<?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>42789</bug_id>
          
          <creation_ts>2010-07-21 14:47:28 -0700</creation_ts>
          <short_desc>Add ANGLE into WebKit</short_desc>
          <delta_ts>2010-08-06 13:22:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Paul Sawaya">psawaya</reporter>
          <assigned_to name="Paul Sawaya">psawaya</assigned_to>
          <cc>adele</cc>
    
    <cc>cmarrin</cc>
    
    <cc>darin</cc>
    
    <cc>kbr</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254529</commentid>
    <comment_count>0</comment_count>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 14:47:28 -0700</bug_when>
    <thetext>ANGLE is a library from Google (http://code.google.com/p/angleproject/) useful for compiling OpenGL ES shaders into desktop GL and DirectX shaders, and for performing code validation.

Here are some patches, one for moving the ANGLE source code into the WebCore tree, along with some code (ANGLEWebkitBridge.cpp) for calling the ANGLE compiler, and some hooks in WebCore itself. I also made some changes in the xcode project to link and build ANGLE with the rest of WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254531</commentid>
    <comment_count>1</comment_count>
      <attachid>62233</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 14:47:52 -0700</bug_when>
    <thetext>Created attachment 62233
ANGLE changes in webcore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254533</commentid>
    <comment_count>2</comment_count>
      <attachid>62234</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 14:48:29 -0700</bug_when>
    <thetext>Created attachment 62234
ANGLE source code, removed bison.exe and flex.exe, left all else intact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254534</commentid>
    <comment_count>3</comment_count>
      <attachid>62235</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 14:49:01 -0700</bug_when>
    <thetext>Created attachment 62235
Changes to WebCore.xcodeproj for ANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254560</commentid>
    <comment_count>4</comment_count>
      <attachid>62233</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-21 15:50:28 -0700</bug_when>
    <thetext>Comment on attachment 62233
ANGLE changes in webcore

In the future, you should mark your patches as patches and review? if you want them to be reviewed.  For now, you should run the check-webkit-style on this patch (ignoring the ANGLE lib itself) and repost).  Please also remove commented out and debugging code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254570</commentid>
    <comment_count>5</comment_count>
      <attachid>62242</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 16:15:24 -0700</bug_when>
    <thetext>Created attachment 62242
Changes to existing files in webkit for ANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254572</commentid>
    <comment_count>6</comment_count>
      <attachid>62243</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-21 16:16:34 -0700</bug_when>
    <thetext>Created attachment 62243
New ANGLE files for webcore

Contains ANGLEWebkitBridge and the ShaderLang and ResourceLimits headers from ANGLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254574</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-21 16:17:50 -0700</bug_when>
    <thetext>Attachment 62242 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/html/canvas/WebGLShader.h:46:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:47:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:48:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:49:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:50:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:51:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:52:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:53:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:64:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:65:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:66:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:66:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/html/canvas/WebGLShader.h:67:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/html/canvas/WebGLShader.h:69:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 14 in 3 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>254578</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-21 16:21:06 -0700</bug_when>
    <thetext>Attachment 62243 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ebCore/platform/graphics/angle/ShaderLang.h:129:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:130:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:130:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:131:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:134:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:134:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:135:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:135:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:136:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:137:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:137:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:138:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:138:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:139:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:142:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:142:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:143:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:143:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:144:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:160:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:161:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/angle/ShaderLang.h:175:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:176:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:177:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:178:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:179:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:180:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/angle/ShaderLang.h:183:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 72 in 4 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>254876</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-07-22 10:47:59 -0700</bug_when>
    <thetext>Why was the ANGLE source code marked R-?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254904</commentid>
    <comment_count>10</comment_count>
      <attachid>62321</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-22 11:33:59 -0700</bug_when>
    <thetext>Created attachment 62321
ANGLE source code

Moved ANGLE to /OpenSource/ANGLE, removed ANGLEWebkitBridge which I mistakenly included in my last patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257497</commentid>
    <comment_count>11</comment_count>
      <attachid>62905</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-07-28 18:05:19 -0700</bug_when>
    <thetext>Created attachment 62905
Contains ANGLE source code and new xcodeproject. Should build correctly into WebKitBuild</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257924</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-07-29 15:31:57 -0700</bug_when>
    <thetext>You shouldn&apos;t include your .move1v3 or pbxuser files.

I also don&apos;t see a Changelog file. You should add a new Changelog file to the ANGLE directory, following the style of the others. Hopefully this will only ever contain &quot;updating to the new version of ANGLE&quot; entries, but it allows us to keep track of what is there. In this case you should indicate what version of ANGLE this is and/or what date you took the drop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259146</commentid>
    <comment_count>13</comment_count>
      <attachid>63268</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-08-02 15:23:09 -0700</bug_when>
    <thetext>Created attachment 63268
ANGLE source code and xcodeproject. Contains no changes to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259147</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-02 15:27:46 -0700</bug_when>
    <thetext>Please make your changelog match WebKit style (8 spaces before each line, &quot;Reviewed by...&quot; line, bug link). I don&apos;t think it needs to list all the files, but it should state their vintage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259151</commentid>
    <comment_count>15</comment_count>
      <attachid>63269</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-08-02 15:40:24 -0700</bug_when>
    <thetext>Created attachment 63269
ANGLE source code and xcodeproject. Improvements to ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259154</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-02 15:42:01 -0700</bug_when>
    <thetext>Note: see http://webkit.org/coding/contributing.html for instructions on using the prepare-ChangeLog, svn-create-patch, etc. scripts which assist in producing patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259201</commentid>
    <comment_count>17</comment_count>
      <attachid>63278</attachid>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-08-02 16:59:57 -0700</bug_when>
    <thetext>Created attachment 63278
ANGLE source code and Xcode project. Cleaned up ChangeLog

Sorry about all of these gigantic patches. Cleaned up ChangeLog, generated using prepare-ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259212</commentid>
    <comment_count>18</comment_count>
      <attachid>63282</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-02 17:21:45 -0700</bug_when>
    <thetext>Created attachment 63282
ANGLE source code and Xcode project. Got rid of errant files

This is the latest patch from Paul. Looks good to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259213</commentid>
    <comment_count>19</comment_count>
      <attachid>63282</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-08-02 17:26:16 -0700</bug_when>
    <thetext>Comment on attachment 63282
ANGLE source code and Xcode project. Got rid of errant files

I think we need a Makefile in the Angle directory - is that right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259214</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 17:29:05 -0700</bug_when>
    <thetext>Attachment 63282 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
{ should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2802:  Declaration has space between type name and * in Framebuffer *framebuffer  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2805:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2817:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2829:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2838:  Declaration has space between type name and * in Framebuffer *framebuffer  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2841:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2846:  Declaration has space between type name and * in Texture *Context  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2848:  Declaration has space between type name and * in Texture *t  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2850:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ANGLE/src/libGLESv2/Context.cpp:2850:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libGLESv2/Context.cpp:2851:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2855:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2862:  Declaration has space between type name and * in Texture2D *incomplete2d  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2870:  Declaration has space between type name and * in TextureCubeMap *incompleteCube  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2898:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2916:  Declaration has space between type name and * in Framebuffer *framebufferObject  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2919:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2920:  Declaration has space between type name and * in Stencilbuffer *stencilbufferObject  [whitespace/declaration] [3]
ANGLE/src/libGLESv2/Context.cpp:2923:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2946:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2952:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2965:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2976:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libGLESv2/Context.cpp:2977:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6126 in 132 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>259504</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-03 09:28:06 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/64560</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62233</attachid>
            <date>2010-07-21 14:47:52 -0700</date>
            <delta_ts>2010-07-21 16:15:24 -0700</delta_ts>
            <desc>ANGLE changes in webcore</desc>
            <filename>angle-into-webkit</filename>
            <type>text/plain</type>
            <size>2285</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MzU5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2ltcG9ydCAiQmxv
Y2tFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiQU5HTEVXZWJraXRCcmlkZ2UuaCIKICNpbmNsdWRl
ICJDYW52YXNPYmplY3QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCkBAIC02MjMsNyArNjI0LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXBpbGVTaGFkZXIoV2UKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBlbnN1cmVD
b250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hh
ZGVyLT5vYmplY3QoKSk7CisKKwkvLyA6OmdsQ29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXIt
Pm9iamVjdCgpKTsKKwkvLyBzaGFkZXItPnNldFZhbGlkYXRlZCh0cnVlKTsKKworCWlmIChBTkdM
RVdyYXBwZXI6OnZhbGlkYXRlU2hhZGVyKHNoYWRlcixnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51
dGY4KCkuZGF0YSgpKSkgeworCQkvL1NoYWRlciB2YWxpZGF0ZWQsIHNvIHVwZGF0ZSBpdCB3aXRo
IHRoZSB0cmFuc2xhdGVkIGRlc2t0b3AgR0xTTCBzb3VyY2UuIAorCQlzaGFkZXJTb3VyY2Uoc2hh
ZGVyLCBzaGFkZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSk7CisJCQorCQk6OmdsQ29tcGlsZVNo
YWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKKwkJc2hhZGVyLT5zZXRWYWxpZGF0ZWQo
dHJ1ZSk7CisJfQorCWVsc2UgeworCQlzaGFkZXItPnNldFZhbGlkYXRlZChmYWxzZSk7CisJfQog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25n
IGJvcmRlcikKQEAgLTEwMDgsNyArMTAyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNo
YWRlclNvdXJjZShXZWIKICAgICBjb25zdCBjaGFyKiBzID0gY3MuZGF0YSgpOwogICAgIAogICAg
IGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgOjpnbFNoYWRlclNvdXJjZSgoR0x1
aW50KSBzaGFkZXItPm9iamVjdCgpLCAxLCAmcywgJmxlbmd0aCk7CisgICAgOjpnbFNoYWRlclNv
dXJjZSgoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCAxLCAmcywgJmxlbmd0aCk7CQogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCkBAIC0xMzU4LDYgKzEzNzIsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViRwogU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJU
KHNoYWRlcik7CisKKworCXByaW50ZigiXG5cbiBpbiBnZXRTaGFkZXJJbmZvTG9nLCB2YWxpZGF0
aW9uOiAlaSBcblxuICIsc2hhZGVyLT5wYXNzZWRWYWxpZGF0aW9uKCkpOworCisJaWYgKCFzaGFk
ZXItPnBhc3NlZFZhbGlkYXRpb24oKSkKKwkJcmV0dXJuIHNoYWRlci0+Z2V0VmFsaWRhdGlvbk1l
c3NhZ2VzKCk7CiAgICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdM
aW50IGxlbmd0aDsKQEAgLTEzNjcsNyArMTM4Nyw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVySW5mb0wKICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxv
YyhsZW5ndGgpOwogICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAK
KwogICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxl
bmd0aCwgJnNpemUsIGluZm8pOwogICAgIFN0cmluZyBzKGluZm8pOwogICAgIGZhc3RGcmVlKGlu
Zm8pOwo=
</data>
<flag name="review"
          id="50392"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62234</attachid>
            <date>2010-07-21 14:48:29 -0700</date>
            <delta_ts>2010-07-21 16:17:34 -0700</delta_ts>
            <desc>ANGLE source code, removed bison.exe and flex.exe, left all else intact.</desc>
            <filename>angle_src_for_webcore</filename>
            <type>text/plain</type>
            <size>2352894</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVXZWJraXRCcmlkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVX
ZWJraXRCcmlkZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9BTkdMRVdlYmtpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiAgQU5HTEVXZWJraXRCcmlkZ2UuY3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBD
cmVhdGVkIGJ5IFBhdWwgU2F3YXlhIG9uIDcvMTUvMTAuCisgKiAgQ29weXJpZ2h0IDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQU5HTEVXZWJraXRCcmlk
Z2UuaCIKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJXZWJHTFNoYWRl
ci5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IEFOR0xFV3JhcHBlcjo6dmFsaWRhdGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlKSB7CisJVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXM7CisJRVNo
TGFuZ3VhZ2Ugc2hhZGVyTGFuZzsKKwlTaEhhbmRsZSBjb21waWxlcjsKKworCWdlbmVyYXRlUmVz
b3VyY2VzKHJlc291cmNlcyk7CisJCisJaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSKQorCQlzaGFkZXJMYW5nID0gRVNoTGFuZ1ZlcnRleDsK
KwllbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSKQorCQlzaGFkZXJMYW5nID0gRVNoTGFuZ0ZyYWdtZW50OworCWVsc2UKKwkJcmV0
dXJuIGZhbHNlOyAvL0ludmFsaWQgc2hhZGVyVHlwZQorCQkKKwlTaEluaXRpYWxpemUoKTsKKwkK
Kwljb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoc2hhZGVyTGFuZywgRVNoU3BlY1dlYkdM
KTsKKwkKKwljb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7c2hhZGVy
U291cmNlfTsKKwkKKwlib29sIHZhbGlkYXRlU3VjY2VzcyA9IFNoQ29tcGlsZShjb21waWxlcixz
aGFkZXJTb3VyY2VTdHJpbmdzLDEsRVNoT3B0Tm9uZSwmcmVzb3VyY2VzLEVEZWJ1Z09wVmVyaWZ5
Q29kZSB8IEVEZWJ1Z09wSW50ZXJtZWRpYXRlIHwgRURlYnVnT3BPYmplY3RDb2RlKTsKKwkKKwlp
ZiAodmFsaWRhdGVTdWNjZXNzKSB7CisJCXByaW50ZigiXG5cbkFOR0xFIHZhbGlkYXRlZCFcblxu
Iik7CisJCQorCQlzaGFkZXItPnNldFRyYW5zbGF0ZWRTb3VyY2UoU2hHZXRPYmplY3RDb2RlKGNv
bXBpbGVyKSk7CisJfSAKKwllbHNlIHsKKwkJc2hhZGVyLT5zZXRWYWxpZGF0aW9uTWVzc2FnZXMo
U2hHZXRWYWxpZGF0b3JMb2coY29tcGlsZXIpKTsKKwkJcHJpbnRmKCJcblxuIEFOR0xFIHZhbGlk
YXRpb24gZmFpbGVkXG5cbiIpOworCQkKKwkJcHJpbnRmKCJcblxuIHJlYXNvbjogXG4gJXMgXG5c
biIsU2hHZXRWYWxpZGF0b3JMb2coY29tcGlsZXIpKTsKKwkJLy8gcHJpbnRmKCJcblxuIGFuZCBo
ZXJlJ3MgdGhlIGluZm8gbG9nOiAlcyBcblxuIixTaEdldEluZm9Mb2coY29tcGlsZXIpKTsKKwl9
CisKKwlwcmludGYoIlxuXG5BTkdMRSBoYWQgdGhpcyB0byBzYXk6XG4iKTsKKwlwdXRzKFNoR2V0
VmFsaWRhdG9yTG9nKGNvbXBpbGVyKSk7CisJCQorCXByaW50ZiAoIlxuXG4gc2hhZGVyIHNvdXJj
ZTpcbiAlcyBcblxuIixzaGFkZXJTb3VyY2UpOworCXByaW50ZigiXG5cbm9iaiBjb2RlOiBcbiAl
c1xuXG4iLFNoR2V0T2JqZWN0Q29kZShjb21waWxlcikpOworCQorCXNoYWRlci0+c2V0VmFsaWRh
dGVkKHZhbGlkYXRlU3VjY2Vzcyk7CisJCisJU2hEZXN0cnVjdChjb21waWxlcik7CisKKwlyZXR1
cm4gdmFsaWRhdGVTdWNjZXNzOworfQorCisvLyBTZXQgdXAgdGhlIHBlciBjb21waWxlIHJlc291
cmNlcwordm9pZCBBTkdMRVdyYXBwZXI6OmdlbmVyYXRlUmVzb3VyY2VzKFRCdWlsdEluUmVzb3Vy
Y2UmIHJlc291cmNlcykgeworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzID0gODsKKyAg
ICByZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2Vz
Lm1heFZhcnlpbmdWZWN0b3JzID0gODsKKyAgICByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSAwOworICAgIHJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gODsKKyAgICByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPSA4OworICAgIHJlc291
cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLm1heERy
YXdCdWZmZXJzID0gMTsKK30KKworfQorCisjZW5kaWYgLy9FTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9BTkdMRVdlYmtpdEJyaWRnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVXZWJraXRC
cmlkZ2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
QU5HTEVXZWJraXRCcmlkZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
ICBBTkdMRVdlYmtpdEJyaWRnZS5oCisgKiAgV2ViQ29yZQorICoKKyAqICBDcmVhdGVkIGJ5IFBh
dWwgU2F3YXlhIG9uIDcvMTUvMTAuCisgKiAgQ29weXJpZ2h0IDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaWZuZGVmIEFOR0xFV2Via2l0QnJpZGdlX2gK
KyNkZWZpbmUgQU5HTEVXZWJraXRCcmlkZ2VfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBTkdMRVdyYXBwZXIgeworcHVibGljOgor
CQorCXN0YXRpYyBib29sIHZhbGlkYXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZSk7CisKK3ByaXZhdGU6CisKKwlzdGF0aWMgdm9pZCBnZW5lcmF0
ZVJlc291cmNlcyhUQnVpbHRJblJlc291cmNlJiByZXNvdXJjZXMpOworCit9OworCit9IC8vbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL1Jlc291cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9SZXNvdXJjZUxpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9SZXNvdXJjZUxpbWl0cy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9SRVNPVVJDRV9MSU1J
VFNfSU5DTFVERURfCisjZGVmaW5lIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCisKK3N0cnVj
dCBUQnVpbHRJblJlc291cmNlCit7CisJaW50IG1heFZlcnRleEF0dHJpYnM7CisJaW50IG1heFZl
cnRleFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhWYXJ5aW5nVmVjdG9yczsKKwlpbnQgbWF4VmVy
dGV4VGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHM7
CisJaW50IG1heFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzOworCWludCBtYXhEcmF3QnVmZmVyczsKK307CisjZW5kaWYgLy8gX1JFU09VUkNFX0xJTUlU
U19JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvU2hhZGVy
TGFuZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvU2hh
ZGVyTGFuZy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworI2lmbmRlZiBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworI2RlZmluZSBf
Q09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiUmVzb3VyY2VMaW1pdHMu
aCIKKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBDX0RFQ0wgX19jZGVjbAorI2Vsc2UKKyNkZWZp
bmUgX19mYXN0Y2FsbAorI2RlZmluZSBDX0RFQ0wKKyNlbmRpZgorCisvLworLy8gVGhpcyBpcyB0
aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgor
Ly8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBpbGVyL2xpbmtlci4KKy8vCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworCWV4dGVybiAiQyIgeworI2VuZGlmCisvLworLy8gRHJpdmVyIG11c3Qg
Y2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyCisvLyBjb21waWxl
ci9saW5rZXIgb3BlcmF0aW9ucy4KKy8vCitpbnQgU2hJbml0aWFsaXplKCk7CisvLworLy8gRHJp
dmVyIHNob3VsZCBjYWxsIHRoaXMgYXQgc2h1dGRvd24uCisvLworaW50IF9fZmFzdGNhbGwgU2hG
aW5hbGl6ZSgpOworLy8KKy8vIFR5cGVzIG9mIGxhbmd1YWdlcyB0aGUgY29tcGlsZXIgY2FuIGNv
bnN1bWUuCisvLwordHlwZWRlZiBlbnVtIHsKKwlFU2hMYW5nVmVydGV4LAorCUVTaExhbmdGcmFn
bWVudCwKKwlFU2hMYW5nQ291bnQsCit9IEVTaExhbmd1YWdlOworCisvLworLy8gVGhlIGxhbmd1
YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMgdG8uCisvLyBJdCBjdXJyZW50bHkg
c3VwcG9ydHMgT3BlbkdMIEVTIGFuZCBXZWJHTCBzcGVjaWZpY2F0aW9ucy4KKy8vCit0eXBlZGVm
IGVudW0geworICAgIEVTaFNwZWNHTEVTMiwKKyAgICBFU2hTcGVjV2ViR0wsCit9IEVTaFNwZWM7
CisKKy8vCisvLyBUeXBlcyBvZiBvdXRwdXQgdGhlIGxpbmtlciB3aWxsIGNyZWF0ZS4KKy8vCit0
eXBlZGVmIGVudW0geworCUVTaEV4VmVydGV4RnJhZ21lbnQsCisJRVNoRXhGcmFnbWVudAorfSBF
U2hFeGVjdXRhYmxlOworCisvLworLy8gT3B0aW1pemF0aW9uIGxldmVsIGZvciB0aGUgY29tcGls
ZXIuCisvLwordHlwZWRlZiBlbnVtIHsKKwlFU2hPcHROb0dlbmVyYXRpb24sCisJRVNoT3B0Tm9u
ZSwKKwlFU2hPcHRTaW1wbGUsICAgICAgIC8vIE9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9u
ZSBxdWlja2x5CisJRVNoT3B0RnVsbCwgICAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgd2ls
bCB0YWtlIG1vcmUgdGltZQorfSBFU2hPcHRpbWl6YXRpb25MZXZlbDsKKworLy8KKy8vIEJ1aWxk
IGEgdGFibGUgZm9yIGJpbmRpbmdzLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IgbG9jYXRpbmcKKy8v
IGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCBnbG9iYWxzLCBldGMuLCBhcyBuZWVkZWQuCisvLwordHlw
ZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIqIG5hbWU7CisJaW50IGJpbmRpbmc7Cit9IFNoQmlu
ZGluZzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBudW1CaW5kaW5nczsKKwlTaEJpbmRpbmcq
IGJpbmRpbmdzOyAgLy8gYXJyYXkgb2YgYmluZGluZ3MKK30gU2hCaW5kaW5nVGFibGU7CisKKy8v
CisvLyBTaEhhbmRsZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFs
bG9jYXRlZCwKKy8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyL2xp
bmtlci4gSXQncyBjb250ZW50cyAKKy8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBj
b21waWxlciBhbmQgbGlua2VyLiAgRm9yIGV4YW1wbGUsCisvLyBzeW1ib2wgdGFibGUgaW5mb3Jt
YXRpb24gYW5kIG9iamVjdCBjb2RlIHBhc3NlZCBmcm9tIHRoZSBjb21waWxlciAKKy8vIHRvIHRo
ZSBsaW5rZXIgY2FuIGJlIHN0b3JlZCB3aGVyZSBTaEhhbmRsZSBwb2ludHMuCisvLworLy8gSWYg
aGFuZGxlIGNyZWF0aW9uIGZhaWxzLCAwIHdpbGwgYmUgcmV0dXJuZWQuCisvLwordHlwZWRlZiB2
b2lkKiBTaEhhbmRsZTsKKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5k
IGRlc3Ryb3kgY29tcGlsZXIvbGlua2VyCisvLyBvYmplY3RzLgorLy8KK1NoSGFuZGxlIFNoQ29u
c3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UsIEVTaFNwZWMpOyAgLy8gb25lIHBlciBzaGFkZXIK
K1NoSGFuZGxlIFNoQ29uc3RydWN0TGlua2VyKGNvbnN0IEVTaEV4ZWN1dGFibGUsIGludCBkZWJ1
Z09wdGlvbnMpOyAgLy8gb25lIHBlciBzaGFkZXIgcGFpcgorU2hIYW5kbGUgU2hDb25zdHJ1Y3RV
bmlmb3JtTWFwKCk7ICAgICAgICAgICAgICAgICAvLyBvbmUgcGVyIHVuaWZvcm0gbmFtZXNwYWNl
IChjdXJyZW50bHkgZW50aXJlIHByb2dyYW0gb2JqZWN0KQordm9pZCBTaERlc3RydWN0KFNoSGFu
ZGxlKTsKKworLy8KKy8vIFRoZSByZXR1cm4gdmFsdWUgb2YgU2hDb21waWxlIGlzIGJvb2xlYW4s
IGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8vCisvLyBUaGUgaW5mby1sb2cg
c2hvdWxkIGJlIHdyaXR0ZW4gYnkgU2hDb21waWxlIGludG8gCisvLyBTaEhhbmRsZSwgc28gaXQg
Y2FuIGFuc3dlciBmdXR1cmUgcXVlcmllcy4KKy8vCitpbnQgU2hDb21waWxlKAorCWNvbnN0IFNo
SGFuZGxlLAorCWNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKKwljb25zdCBpbnQg
bnVtU3RyaW5ncywKKwljb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKKwljb25zdCBUQnVpbHRJ
blJlc291cmNlICpyZXNvdXJjZXMsCisJaW50IGRlYnVnT3B0aW9ucworCSk7CisKKworLy8KKy8v
IFNpbWlsYXIgdG8gU2hDb21waWxlLCBidXQgYWNjZXB0cyBhbiBvcGFxdWUgaGFuZGxlIHRvIGFu
CisvLyBpbnRlcm1lZGlhdGUgbGFuZ3VhZ2Ugc3RydWN0dXJlLgorLy8KK2ludCBTaENvbXBpbGVJ
bnRlcm1lZGlhdGUoCisJU2hIYW5kbGUgY29tcGlsZXIsCisJU2hIYW5kbGUgaW50ZXJtZWRpYXRl
LAorCWNvbnN0IEVTaE9wdGltaXphdGlvbkxldmVsLAorCWludCBkZWJ1Z2dhYmxlICAgICAgICAg
ICAvLyBib29sZWFuCisJKTsKKworaW50IFNoTGluaygKKwljb25zdCBTaEhhbmRsZSwgICAgICAg
ICAgICAgICAvLyBsaW5rZXIgb2JqZWN0CisJY29uc3QgU2hIYW5kbGUgaFtdLCAgICAgICAgICAg
Ly8gY29tcGlsZXIgb2JqZWN0cyB0byBsaW5rIHRvZ2V0aGVyCisJY29uc3QgaW50IG51bUhhbmRs
ZXMsCisJU2hIYW5kbGUgdW5pZm9ybU1hcCwgICAgICAgICAgLy8gdXBkYXRlZCB3aXRoIG5ldyB1
bmlmb3JtcworCXNob3J0IGludCoqIHVuaWZvcm1zQWNjZXNzZWQsICAvLyByZXR1cm5lZCB3aXRo
IGluZGV4ZXMgb2YgdW5pZm9ybXMgYWNjZXNzZWQKKwlpbnQqIG51bVVuaWZvcm1zQWNjZXNzZWQp
OyAJCisKK2ludCBTaExpbmtFeHQoCisJY29uc3QgU2hIYW5kbGUsICAgICAgICAgICAgICAgLy8g
bGlua2VyIG9iamVjdAorCWNvbnN0IFNoSGFuZGxlIGhbXSwgICAgICAgICAgIC8vIGNvbXBpbGVy
IG9iamVjdHMgdG8gbGluayB0b2dldGhlcgorCWNvbnN0IGludCBudW1IYW5kbGVzKTsKKworLy8K
Ky8vIFNoU2V0RW5jcnB5dGlvbk1ldGhvZCBpcyBhIHBsYWNlLWhvbGRlciBmb3Igc3BlY2lmeWlu
ZworLy8gaG93IHNvdXJjZSBjb2RlIGlzIGVuY3J5cHRlZC4KKy8vCit2b2lkIFNoU2V0RW5jcnlw
dGlvbk1ldGhvZChTaEhhbmRsZSk7CisKKy8vCisvLyBBbGwgdGhlIGZvbGxvd2luZyByZXR1cm4g
MCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90CisvLyBhdmFpbGFibGUgaW4gdGhlIG9iamVjdCBw
YXNzZWQgZG93biwgb3IgdGhlIG9iamVjdCBpcyBiYWQuCisvLworY29uc3QgY2hhciogU2hHZXRJ
bmZvTG9nKGNvbnN0IFNoSGFuZGxlKTsKK2NvbnN0IGNoYXIqIFNoR2V0T2JqZWN0Q29kZShjb25z
dCBTaEhhbmRsZSk7Citjb25zdCB2b2lkKiBTaEdldEV4ZWN1dGFibGUoY29uc3QgU2hIYW5kbGUp
OworY29uc3QgY2hhciogU2hHZXRWYWxpZGF0b3JMb2coY29uc3QgU2hIYW5kbGUgaGFuZGxlKTsK
K2ludCBTaFNldFZpcnR1YWxBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEhhbmRsZSwgY29uc3Qg
U2hCaW5kaW5nVGFibGUqKTsgICAvLyB0byBkZXRlY3QgdXNlciBhbGlhc2luZworaW50IFNoU2V0
Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEhhbmRsZSwgY29uc3QgU2hCaW5kaW5nVGFi
bGUqKTsgICAgIC8vIHRvIGZvcmNlIGFueSBwaHlzaWNhbCBtYXBwaW5ncworaW50IFNoR2V0UGh5
c2ljYWxBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEhhbmRsZSwgY29uc3QgU2hCaW5kaW5nVGFi
bGUqKik7IC8vIGZvciBhbGwgYXR0cmlidXRlcworLy8KKy8vIFRlbGwgdGhlIGxpbmtlciB0byBu
ZXZlciBhc3NpZ24gYSB2ZXJ0ZXggYXR0cmlidXRlIHRvIHRoaXMgbGlzdCBvZiBwaHlzaWNhbCBh
dHRyaWJ1dGVzCisvLworaW50IFNoRXhjbHVkZUF0dHJpYnV0ZXMoY29uc3QgU2hIYW5kbGUsIGlu
dCAqYXR0cmlidXRlcywgaW50IGNvdW50KTsKKworLy8KKy8vIFJldHVybnMgdGhlIGxvY2F0aW9u
IElEIG9mIHRoZSBuYW1lZCB1bmlmb3JtLgorLy8gUmV0dXJucyAtMSBpZiBlcnJvci4KKy8vCitp
bnQgU2hHZXRVbmlmb3JtTG9jYXRpb24oY29uc3QgU2hIYW5kbGUgdW5pZm9ybU1hcCwgY29uc3Qg
Y2hhciogbmFtZSk7CisKK2VudW0gVERlYnVnT3B0aW9ucyB7CisJRURlYnVnT3BOb25lICAgICAg
ICAgICAgICAgPSAweDAwMCwKKwlFRGVidWdPcEludGVybWVkaWF0ZSAgICAgICA9IDB4MDAxLAor
CUVEZWJ1Z09wQXNzZW1ibHkgICAgICAgICAgID0gMHgwMDIsCisJRURlYnVnT3BPYmplY3RDb2Rl
ICAgICAgICAgPSAweDAwNCwKKwlFRGVidWdPcExpbmtNYXBzICAgICAgICAgICA9IDB4MDA4LAor
CUVEZWJ1Z09wVmVyaWZ5Q29kZQkJICAgPSAweDAxMAorfTsKKyNpZmRlZiBfX2NwbHVzcGx1cwor
CX0KKyNlbmRpZgorCisjZW5kaWYgLy8gX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvQmFzZVR5cGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9C
YXNlVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvY29tcGlsZXIvQmFzZVR5cGVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMyIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworI2RlZmlu
ZSBfQkFTSUNUWVBFU19JTkNMVURFRF8KKworLy8KKy8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCisv
LworZW51bSBUUHJlY2lzaW9uCit7CisgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBrZXB0IHNvcnRl
ZAorICAgIEVicFVuZGVmaW5lZCwKKyAgICBFYnBMb3csCisgICAgRWJwTWVkaXVtLAorICAgIEVi
cEhpZ2gsCit9OworCitfX2lubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFBy
ZWNpc2lvbiBwKQoreworICAgIHN3aXRjaChwKQorICAgIHsKKyAgICBjYXNlIEVicEhpZ2g6CQly
ZXR1cm4gImhpZ2hwIjsJCWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRp
dW1wIjsJYnJlYWs7CisgICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7Cisg
ICAgZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxs
YmFjaworICAgIH0KK30KKworLy8KKy8vIEJhc2ljIHR5cGUuICBBcnJheXMsIHZlY3RvcnMsIGV0
Yy4sIGFyZSBvcnRob2dvbmFsIHRvIHRoaXMuCisvLworZW51bSBUQmFzaWNUeXBlCit7CisgICAg
RWJ0Vm9pZCwKKyAgICBFYnRGbG9hdCwKKyAgICBFYnRJbnQsCisgICAgRWJ0Qm9vbCwKKyAgICBF
YnRHdWFyZFNhbXBsZXJCZWdpbiwgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9m
IElzU2FtcGxlcigpCisgICAgRWJ0U2FtcGxlcjJELAorICAgIEVidFNhbXBsZXJDdWJlLAorICAg
IEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24g
b2YgSXNTYW1wbGVyKCkKKyAgICBFYnRTdHJ1Y3QsCisgICAgRWJ0QWRkcmVzcywgICAgICAgICAg
ICAvLyBzaG91bGQgYmUgZGVwcmVjYXRlZD8/Cit9OworCitfX2lubGluZSBib29sIElzU2FtcGxl
cihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJC
ZWdpbiAmJiB0eXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOworfQorCisvLworLy8gUXVhbGlmaWVy
cyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1haW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBi
ZSByZWFkCisvLyBvciB3cml0dGVuLCBhbmQgYnkgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5z
bGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMKKy8vIHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBp
bi4gIFNpbmNlIGJ1aWx0LWlucyB0ZW5kIHRvIGdvIHRvIGRpZmZlcmVudCByZWdpc3RlcnMKKy8v
IHRoYW4gdmFyeWluZyBvciB1bmlmb3JtLCBpdCBtYWtlcyBzZW5zZSB0aGV5IGFyZSBwZWVycywg
bm90IHN1Yi1jbGFzc2VzLgorLy8KK2VudW0gVFF1YWxpZmllcgoreworICAgIEV2cVRlbXBvcmFy
eSwgICAgIC8vIEZvciB0ZW1wb3JhcmllcyAod2l0aGluIGEgZnVuY3Rpb24pLCByZWFkL3dyaXRl
CisgICAgRXZxR2xvYmFsLCAgICAgICAgLy8gRm9yIGdsb2JhbHMgcmVhZC93cml0ZQorICAgIEV2
cUNvbnN0LCAgICAgICAgIC8vIFVzZXIgZGVmaW5lZCBjb25zdGFudHMgYW5kIG5vbi1vdXRwdXQg
cGFyYW1ldGVycyBpbiBmdW5jdGlvbnMKKyAgICBFdnFBdHRyaWJ1dGUsICAgICAvLyBSZWFkb25s
eQorICAgIEV2cVZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBmcmFnbWVudCBzaGFkZXJzIG9u
bHkKKyAgICBFdnFWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dy
aXRlCisgICAgRXZxSW52YXJpYW50VmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50
IHNoYWRlcnMgb25seQorICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBz
aGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBSZWFkb25s
eSwgdmVydGV4IGFuZCBmcmFnbWVudAorCisgICAgLy8gcGFjay91bnBhY2sgaW5wdXQgYW5kIG91
dHB1dAorICAgIEV2cUlucHV0LAorICAgIEV2cU91dHB1dCwKKworICAgIC8vIHBhcmFtZXRlcnMK
KyAgICBFdnFJbiwKKyAgICBFdnFPdXQsCisgICAgRXZxSW5PdXQsCisgICAgRXZxQ29uc3RSZWFk
T25seSwKKworICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKKyAgICBF
dnFQb3NpdGlvbiwKKyAgICBFdnFQb2ludFNpemUsCisKKyAgICAvLyBidWlsdC1pbnMgcmVhZCBi
eSBmcmFnbWVudCBzaGFkZXIKKyAgICBFdnFGcmFnQ29vcmQsCisgICAgRXZxRnJvbnRGYWNpbmcs
CisgICAgRXZxUG9pbnRDb29yZCwKKworICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdt
ZW50IHNoYWRlcgorICAgIEV2cUZyYWdDb2xvciwKKyAgICBFdnFGcmFnRGF0YSwKKworICAgIC8v
IGVuZCBvZiBsaXN0CisgICAgRXZxTGFzdCwKK307CisKKy8vCisvLyBUaGlzIGlzIGp1c3QgZm9y
IGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9ucyBhYm92
ZS4KKy8vCitfX2lubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmll
ciBxKQoreworICAgIHN3aXRjaChxKQorICAgIHsKKyAgICBjYXNlIEV2cVRlbXBvcmFyeTogICAg
ICByZXR1cm4gIlRlbXBvcmFyeSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFHbG9iYWw6ICAg
ICAgICAgcmV0dXJuICJHbG9iYWwiOyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3Q6
ICAgICAgICAgIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNv
bnN0UmVhZE9ubHk6ICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1dGUiOyAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46IHJldHVybiAiaW52YXJpYW50IHZhcnlp
bmciOwlicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZh
cmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxVW5pZm9ybTogICAgICAgIHJldHVy
biAidW5pZm9ybSI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICBy
ZXR1cm4gImluIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAg
ICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5PdXQ6ICAg
ICAgICAgIHJldHVybiAiaW5vdXQiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUlucHV0
OiAgICAgICAgICByZXR1cm4gImlucHV0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFP
dXRwdXQ6ICAgICAgICAgcmV0dXJuICJvdXRwdXQiOyAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxUG9zaXRpb246ICAgICAgIHJldHVybiAiUG9zaXRpb24iOyAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cVBvaW50U2l6ZTogICAgICByZXR1cm4gIlBvaW50U2l6ZSI7ICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBi
cmVhazsKKyAgICBjYXNlIEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IHF1YWxpZmllciI7CisgICAgfQorfQorCisjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURf
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0NvZGVHZW5H
TFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL0NvZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaCIKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwcm92aWRlZCB0
byBjcmVhdGUgdGhlIGFjdHVhbAorLy8gY29tcGlsZSBvYmplY3QgdXNlZCBieSBoaWdoZXIgbGV2
ZWwgY29kZS4gIEl0IHJldHVybnMKKy8vIGEgc3ViY2xhc3Mgb2YgVENvbXBpbGVyLgorLy8KK1RD
b21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMg
c3BlYykKK3sKKyAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKGxhbmd1YWdlLCBzcGVjKTsK
K30KKworLy8KKy8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBieSBDb25zdHJ1Y3RDb21waWxl
cgorLy8KK3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBjb21waWxlcikKK3sKKyAgICBk
ZWxldGUgY29tcGlsZXI7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvQ29kZUdlbkhMU0wuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24g
bXVzdCBiZSBwcm92aWRlZCB0byBjcmVhdGUgdGhlIGFjdHVhbAorLy8gY29tcGlsZSBvYmplY3Qg
dXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKKy8vIGEgc3ViY2xhc3Mgb2Yg
VENvbXBpbGVyLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYykKK3sKKyAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JITFNM
KGxhbmd1YWdlLCBzcGVjKTsKK30KKworLy8KKy8vIERlbGV0ZSB0aGUgY29tcGlsZXIgbWFkZSBi
eSBDb25zdHJ1Y3RDb21waWxlcgorLy8KK3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKiBj
b21waWxlcikKK3sKKyAgICBkZWxldGUgY29tcGlsZXI7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0NvbW1vbi5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IF9DT01NT05fSU5DTFVERURfCisjZGVmaW5lIF9DT01NT05fSU5DTFVERURfCisKKyNpbmNsdWRl
IDxtYXA+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8
dmVjdG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCisKK3R5cGVkZWYgaW50
IFRTb3VyY2VMb2M7Citjb25zdCB1bnNpZ25lZCBpbnQgU291cmNlTG9jTGluZU1hc2sgPSAweGZm
ZmY7Citjb25zdCB1bnNpZ25lZCBpbnQgU291cmNlTG9jU3RyaW5nU2hpZnQgPSAxNjsKKworLy8K
Ky8vIFB1dCBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtl
IHRoZW0gdXNlIHRoaXMgc2NoZW1lLgorLy8KKyNkZWZpbmUgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURShBKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCBzKSB7IHJldHVybiAoQSkuYWxsb2NhdGUocyk7IH0gICAgICAgICAg
XAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKl9XaGVyZSkgeyByZXR1cm4g
KF9XaGVyZSk7CX0gICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgeyB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqLCB2b2lkICopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZv
aWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzKSB7IHJldHVybiAoQSkuYWxsb2NhdGUocyk7IH0g
ICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKl9XaGVyZSkg
eyByZXR1cm4gKF9XaGVyZSk7CX0gXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCop
IHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9y
IGRlbGV0ZVtdKHZvaWQgKiwgdm9pZCAqKSB7IH0KKworLy8KKy8vIFBvb2wgdmVyc2lvbiBvZiBz
dHJpbmcuCisvLwordHlwZWRlZiBwb29sX2FsbG9jYXRvcjxjaGFyPiBUU3RyaW5nQWxsb2NhdG9y
OwordHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZyA8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFy
PiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZzsKK3R5cGVkZWYgc3RkOjpiYXNpY19vc3RyaW5n
c3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRT
dHJpbmdTdHJlYW07CitpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmcoY29uc3QgY2hhciog
cykKK3sKKwl2b2lkKiBtZW1vcnkgPSBHbG9iYWxQb29sQWxsb2NhdG9yLmFsbG9jYXRlKHNpemVv
ZihUU3RyaW5nKSk7CisJcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7Cit9CisKKy8vCisv
LyBQZXJzaXN0ZW50IHN0cmluZyBtZW1vcnkuICBTaG91bGQgb25seSBiZSB1c2VkIGZvciBzdHJp
bmdzIHRoYXQgc3Vydml2ZQorLy8gYWNyb3NzIGNvbXBpbGVzL2xpbmtzLgorLy8KKyNkZWZpbmUg
VFBlcnNpc3RTdHJpbmcgc3RkOjpzdHJpbmcKKyNkZWZpbmUgVFBlcnNpc3RTdHJpbmdTdHJlYW0g
c3RkOjpvc3RyaW5nc3RyZWFtCisKKy8vCisvLyBQb29sIGFsbG9jYXRvciB2ZXJzaW9ucyBvZiB2
ZWN0b3JzLCBsaXN0cywgYW5kIG1hcHMKKy8vCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgVFZl
Y3RvciA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+
ID46OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgVFZlY3RvcigpIDogc3RkOjp2ZWN0b3I8VCwg
cG9vbF9hbGxvY2F0b3I8VD4gPigpIHt9CisgICAgVFZlY3Rvcihjb25zdCBwb29sX2FsbG9jYXRv
cjxUPiYgYSkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KGEpIHt9CisgICAg
VFZlY3RvcihzaXplX3R5cGUgaSk6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4o
aSkge30KK307CisKK3RlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBELCBjbGFzcyBDTVAgPSBzdGQ6
Omxlc3M8Sz4gPiAKK2NsYXNzIFRNYXAgOiBwdWJsaWMgc3RkOjptYXA8SywgRCwgQ01QLCBwb29s
X2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywgRD4gPiA+IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+IHRBbGxvY2F0b3I7CisK
KyAgICBUTWFwKCkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KCkge30KKyAgICAv
LyB1c2UgY29ycmVjdCB0d28tc3RhZ2UgbmFtZSBsb29rdXAgc3VwcG9ydGVkIGluIGdjYyAzLjQg
YW5kIGFib3ZlCisgICAgVE1hcChjb25zdCB0QWxsb2NhdG9yJiBhKSA6IHN0ZDo6bWFwPEssIEQs
IENNUCwgdEFsbG9jYXRvcj4oc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPjo6a2V5X2Nv
bXBhcmUoKSwgYSkge30KK307CisKK3R5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3RyaW5nPiBUUHJh
Z21hVGFibGU7CisKKyNlbmRpZiAvLyBfQ09NTU9OX0lOQ0xVREVEXwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9Db25zdGFudFVu
aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODggQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworI2Rl
ZmluZSBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKwor
Y2xhc3MgQ29uc3RhbnRVbmlvbiB7CitwdWJsaWM6CisKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdf
REVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpICAgICAgICAKKyAgICB2b2lkIHNldElDb25zdChp
bnQgaSkge2lDb25zdCA9IGk7IHR5cGUgPSBFYnRJbnQ7IH0KKyAgICB2b2lkIHNldEZDb25zdChm
bG9hdCBmKSB7ZkNvbnN0ID0gZjsgdHlwZSA9IEVidEZsb2F0OyB9CisgICAgdm9pZCBzZXRCQ29u
c3QoYm9vbCBiKSB7YkNvbnN0ID0gYjsgdHlwZSA9IEVidEJvb2w7IH0KKworICAgIGludCBnZXRJ
Q29uc3QoKSB7IHJldHVybiBpQ29uc3Q7IH0KKyAgICBmbG9hdCBnZXRGQ29uc3QoKSB7IHJldHVy
biBmQ29uc3Q7IH0KKyAgICBib29sIGdldEJDb25zdCgpIHsgcmV0dXJuIGJDb25zdDsgfQorICAg
IGludCBnZXRJQ29uc3QoKSBjb25zdCB7IHJldHVybiBpQ29uc3Q7IH0KKyAgICBmbG9hdCBnZXRG
Q29uc3QoKSBjb25zdCB7IHJldHVybiBmQ29uc3Q7IH0KKyAgICBib29sIGdldEJDb25zdCgpIGNv
bnN0IHsgcmV0dXJuIGJDb25zdDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGkgPT0gaUNvbnN0KQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBmbG9hdCBmKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGYgPT0gZkNv
bnN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBib29sIGIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoYiA9PSBiQ29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvbnN0YW50
LnR5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBpZiAoY29uc3Rh
bnQuaUNvbnN0ID09IGlDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBpZiAo
Y29uc3RhbnQuZkNvbnN0ID09IGZDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
IGlmIChjb25zdGFudC5iQ29uc3QgPT0gYkNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaW50IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oaSk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9w
ZXJhdG9yPT0oZik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGJvb2wgYikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShiKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oY29uc3RhbnQpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAg
IHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBpZiAoaUNvbnN0
ID4gY29uc3RhbnQuaUNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAg
ICBpZiAoZkNvbnN0ID4gY29uc3RhbnQuZkNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25z
dAorICAgIHsgCisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBpZiAo
aUNvbnN0IDwgY29uc3RhbnQuaUNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAg
ICAgICAgICBpZiAoZkNvbnN0IDwgY29uc3RhbnQuZkNvbnN0KQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IrKGNvbnN0IENvbnN0YW50VW5pb24m
IGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFs
dWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChp
Q29uc3QgKyBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDog
cmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCArIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0
YW50VW5pb24gb3BlcmF0b3ItKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAor
ICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBjb25zdGFudC5p
Q29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNv
bnN0KGZDb25zdCAtIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3Iq
KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENv
bnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50
LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgKiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCAqIGNvbnN0
YW50LmZDb25zdCk7IGJyZWFrOyAKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJE
ZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJShjb25zdCBDb25zdGFudFVu
aW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVy
blZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0ICUgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3I+Pihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAg
ICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25z
dGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50
OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ID4+IGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Npbmci
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAg
ICBDb25zdGFudFVuaW9uIG9wZXJhdG9yPDwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA8PCBj
b25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciYoY29uc3QgQ29u
c3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlv
biByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVl
LnNldElDb25zdChpQ29uc3QgJiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVm
YXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlv
biBvcGVyYXRvcnwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAK
KyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUg
PT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNl
IEVidEludDogIHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgfCBjb25zdGFudC5pQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcl4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsK
KyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNldElDb25zdChpQ29u
c3QgXiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciYmKGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0
YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5
cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1
cm5WYWx1ZS5zZXRCQ29uc3QoYkNvbnN0ICYmIGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25z
dGFudFVuaW9uIG9wZXJhdG9yfHwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgfHwgY29uc3Rh
bnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYg
IkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgIH0KKworICAgIFRCYXNpY1R5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGU7IH0KK3ByaXZhdGU6CisKKyAgICB1bmlvbiAgeworICAgICAgICBpbnQgaUNvbnN0OyAgLy8g
dXNlZCBmb3IgaXZlYywgc2NhbGFyIGludHMKKyAgICAgICAgYm9vbCBiQ29uc3Q7IC8vIHVzZWQg
Zm9yIGJ2ZWMsIHNjYWxhciBib29scworICAgICAgICBmbG9hdCBmQ29uc3Q7ICAgLy8gdXNlZCBm
b3IgdmVjLCBtYXQsIHNjYWxhciBmbG9hdHMKKyAgICB9IDsKKworICAgIFRCYXNpY1R5cGUgdHlw
ZTsKK307CisKKyNlbmRpZiAvLyBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luZm9TaW5r
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKwordm9pZCBUSW5m
b1NpbmtCYXNlOjpwcmVmaXgoVFByZWZpeFR5cGUgbWVzc2FnZSkgeworICAgIHN3aXRjaChtZXNz
YWdlKSB7CisgICAgICAgIGNhc2UgRVByZWZpeE5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFUHJlZml4V2FybmluZzoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJXQVJO
SU5HOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhFcnJvcjoK
KyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJFUlJPUjogIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFUHJlZml4SW50ZXJuYWxFcnJvcjoKKyAgICAgICAgICAgIHNpbmsuYXBw
ZW5kKCJJTlRFUk5BTCBFUlJPUjogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFUHJlZml4VW5pbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTklNUExF
TUVOVEVEOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhOb3Rl
OgorICAgICAgICAgICAgc2luay5hcHBlbmQoIk5PVEU6ICIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5LT1dOIEVSUk9S
OiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBUSW5mb1NpbmtCYXNl
Ojpsb2NhdGlvbihUU291cmNlTG9jIGxvYykgeworICAgIGludCBzdHJpbmcgPSBsb2MgPj4gU291
cmNlTG9jU3RyaW5nU2hpZnQ7CisgICAgaW50IGxpbmUgPSBsb2MgJiBTb3VyY2VMb2NMaW5lTWFz
azsKKworICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICBpZiAobGluZSkKKyAg
ICAgICAgc3RyZWFtIDw8IHN0cmluZyA8PCAiOiIgPDwgbGluZTsKKyAgICBlbHNlCisgICAgICAg
IHN0cmVhbSA8PCBzdHJpbmcgPDwgIjo/ICI7CisgICAgc3RyZWFtIDw8ICI6ICI7CisKKyAgICBz
aW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3Nh
Z2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcykgeworICAgIHByZWZpeChtZXNz
YWdlKTsKKyAgICBzaW5rLmFwcGVuZChzKTsKKyAgICBzaW5rLmFwcGVuZCgiXG4iKTsKK30KKwor
dm9pZCBUSW5mb1NpbmtCYXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNo
YXIqIHMsIFRTb3VyY2VMb2MgbG9jKSB7CisgICAgcHJlZml4KG1lc3NhZ2UpOworICAgIGxvY2F0
aW9uKGxvYyk7CisgICAgc2luay5hcHBlbmQocyk7CisgICAgc2luay5hcHBlbmQoIlxuIik7Cit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luZm9TaW5r
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxl
ci9JbmZvU2luay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9jb21waWxlci9JbmZvU2luay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5GT1NJTktfSU5DTFVERURfCisjZGVmaW5l
IF9JTkZPU0lOS19JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJjb21w
aWxlci9Db21tb24uaCIKKworLy8gUmV0dXJucyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBn
aXZlbiBmbG9hdGluZy1wb2ludCBudW1iZXIuCitpbmxpbmUgZmxvYXQgZnJhY3Rpb25hbFBhcnQo
ZmxvYXQgZikgeworICBmbG9hdCBpbnRQYXJ0ID0gMC4wZjsKKyAgcmV0dXJuIG1vZGZmKGYsICZp
bnRQYXJ0KTsKK30KKworLy8KKy8vIFRQcmVmaXhUeXBlIGlzIHVzZWQgdG8gY2VudHJhbGl6ZSBo
b3cgaW5mbyBsb2cgbWVzc2FnZXMgc3RhcnQuCisvLyBTZWUgYmVsb3cuCisvLworZW51bSBUUHJl
Zml4VHlwZSB7CisgICAgRVByZWZpeE5vbmUsCisgICAgRVByZWZpeFdhcm5pbmcsCisgICAgRVBy
ZWZpeEVycm9yLAorICAgIEVQcmVmaXhJbnRlcm5hbEVycm9yLAorICAgIEVQcmVmaXhVbmltcGxl
bWVudGVkLAorICAgIEVQcmVmaXhOb3RlCit9OworCisvLworLy8gRW5jYXBzdWxhdGUgaW5mbyBs
b2dzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgdGhlbS4KKy8vCisvLyBUaGUgbWV0aG9kcyBh
cmUgYSBnZW5lcmFsIHNldCBvZiB0b29scyBmb3IgZ2V0dGluZyBhIHZhcmlldHkgb2YKKy8vIG1l
c3NhZ2VzIGFuZCB0eXBlcyBpbnNlcnRlZCBpbnRvIHRoZSBsb2cuCisvLworY2xhc3MgVEluZm9T
aW5rQmFzZSB7CitwdWJsaWM6CisgICAgVEluZm9TaW5rQmFzZSgpIHt9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQp
IHsKKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0g
PDwgdDsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICAvLyBPdmVycmlkZSA8PCBvcGVyYXRvciBmb3Igc3BlY2lmaWMg
dHlwZXMuIEl0IGlzIGZhc3RlciB0byBhcHBlbmQgc3RyaW5ncworICAgIC8vIGFuZCBjaGFyYWN0
ZXJzIGRpcmVjdGx5IHRvIHRoZSBzaW5rLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwo
Y2hhciBjKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKDEsIGMpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgY2hhciogc3Ry
KSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUUGVyc2lzdFN0cmluZyYg
c3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUU3RyaW5nJiBzdHIp
IHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIC8vIE1ha2Ugc3VyZSBmbG9hdHMgYXJlIHdyaXR0ZW4gd2l0aCBjb3Jy
ZWN0IHByZWNpc2lvbi4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGZsb2F0IGYpIHsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGRlY2ltYWwgcG9pbnQgaXMg
d3JpdHRlbi4gSWYgYSBudW1iZXIKKyAgICAgICAgLy8gZG9lcyBub3QgaGF2ZSBhIGZyYWN0aW9u
YWwgcGFydCwgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGZvcm1hdCBkb2VzCisgICAgICAgIC8vIG5v
dCB3cml0ZSB0aGUgZGVjaW1hbCBwb3J0aW9uIHdoaWNoIGdldHMgaW50ZXJwcmV0ZWQgYXMgaW50
ZWdlciBieQorICAgICAgICAvLyB0aGUgY29tcGlsZXIuCisgICAgICAgIFRQZXJzaXN0U3RyaW5n
U3RyZWFtIHN0cmVhbTsKKyAgICAgICAgaWYgKGZyYWN0aW9uYWxQYXJ0KGYpID09IDAuMGYpIHsK
KyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oMSk7CisgICAgICAgICAgICBzdHJlYW0gPDwg
c3RkOjpzaG93cG9pbnQgPDwgc3RkOjpmaXhlZCA8PCBmOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc3RyZWFtLnVuc2V0ZihzdGQ6Omlvczo6Zml4ZWQpOworICAgICAgICAgICAgc3Ry
ZWFtLnVuc2V0ZihzdGQ6Omlvczo6c2NpZW50aWZpYyk7CisgICAgICAgICAgICBzdHJlYW0ucHJl
Y2lzaW9uKDgpOworICAgICAgICAgICAgc3RyZWFtIDw8IGY7CisgICAgICAgIH0KKyAgICAgICAg
c2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICAvLyBXcml0ZSBib29sZWFuIHZhbHVlcyBhcyB0aGVpciBuYW1lcyBpbnN0ZWFkIG9mIGlu
dGVncmFsIHZhbHVlLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoYm9vbCBiKSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGIgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgICAgICBz
aW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9p
ZCBlcmFzZSgpIHsgc2luay5jbGVhcigpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0cmluZyYg
c3RyKCkgY29uc3QgeyByZXR1cm4gc2luazsgfQorICAgIGNvbnN0IGNoYXIqIGNfc3RyKCkgY29u
c3QgeyByZXR1cm4gc2luay5jX3N0cigpOyB9CisKKyAgICB2b2lkIHByZWZpeChUUHJlZml4VHlw
ZSBtZXNzYWdlKTsKKyAgICB2b2lkIGxvY2F0aW9uKFRTb3VyY2VMb2MgbG9jKTsKKyAgICB2b2lk
IG1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcyk7CisgICAgdm9pZCBt
ZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMsIFRTb3VyY2VMb2MgbG9j
KTsKKworcHJpdmF0ZToKKyAgICBUUGVyc2lzdFN0cmluZyBzaW5rOworfTsKKworY2xhc3MgVElu
Zm9TaW5rIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlIGluZm87CisgICAgVEluZm9TaW5r
QmFzZSBkZWJ1ZzsKKyAgICBUSW5mb1NpbmtCYXNlIG9iajsKK307CisKKyNlbmRpZiAvLyBfSU5G
T1NJTktfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIENy
ZWF0ZSBzdHJpbmdzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRkIGJ1aWx0
LWlucyB0aGF0CisvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5kIGVzdGFi
bGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAorLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRv
cnMuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK3ZvaWQgVEJ1aWx0SW5zOjppbml0aWFsaXplKCkK
K3sKKyAgICAvLworICAgIC8vIEluaXRpYWxpemUgYWxsIHRoZSBidWlsdC1pbiBzdHJpbmdzIGZv
ciBwYXJzaW5nLgorICAgIC8vCisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zOworICAgIFRT
dHJpbmcgQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleDsKKyAgICBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlv
bnNGcmFnbWVudDsKKyAgICBUU3RyaW5nIFN0YW5kYXJkVW5pZm9ybXM7CisgICAgVFN0cmluZyBW
ZXJ0ZXhEZWZhdWx0UHJlY2lzaW9uOworICAgIFRTdHJpbmcgRnJhZ21lbnREZWZhdWx0UHJlY2lz
aW9uOworCisgICAgeworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gUHJvdG90eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZW4gYnkgYm90
aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rpb25z
OworCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuZ2xlIGFuZCBUcmlnb25vbWV0cmljIEZ1bmN0
aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgcmFkaWFu
cyhmbG9hdCBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJh
ZGlhbnModmVjMiAgZGVncmVlcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMz
ICByYWRpYW5zKHZlYzMgIGRlZ3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCAgcmFkaWFucyh2ZWM0ICBkZWdyZWVzKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgZGVncmVlcyhmbG9hdCByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIGRlZ3JlZXModmVjMiAgcmFkaWFucyk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBkZWdyZWVzKHZlYzMgIHJhZGlhbnMpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgZGVncmVlcyh2ZWM0ICByYWRpYW5zKTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgc2luKGZsb2F0IGFuZ2xlKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNpbih2ZWMyICBhbmdsZSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzaW4odmVjMyAgYW5nbGUpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgc2luKHZlYzQgIGFuZ2xlKTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgY29zKGZsb2F0IGFuZ2xlKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgIGNvcyh2ZWMyICBhbmdsZSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBjb3ModmVjMyAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgY29zKHZlYzQgIGFuZ2xlKTsiKSk7CisKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgdGFuKGZsb2F0IGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIHRhbih2ZWMyICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICB0YW4odmVjMyAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgdGFuKHZlYzQgIGFuZ2xlKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgYXNpbihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzIgIGFzaW4odmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMz
ICBhc2luKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYXNp
bih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYWNvcyhm
bG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGFjb3ModmVjMiAg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhY29zKHZlYzMgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYWNvcyh2ZWM0ICB4KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYXRhbihmbG9hdCB5LCBmbG9hdCB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGF0YW4odmVjMiAgeSwgdmVjMiAg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhdGFuKHZlYzMgIHksIHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYXRhbih2ZWM0ICB5
LCB2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYXRhbihm
bG9hdCB5X292ZXJfeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhdGFu
KHZlYzIgIHlfb3Zlcl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGF0
YW4odmVjMyAgeV9vdmVyX3gpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
YXRhbih2ZWM0ICB5X292ZXJfeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4cG9u
ZW50aWFsIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgcG93KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgcG93KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgcG93KHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjNCAgcG93KHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBleHAoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBleHAodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMzICBleHAodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBleHAodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxv
ZyhmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGxvZyh2ZWMy
ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGxvZyh2ZWMzICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGxvZyh2ZWM0ICB4KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZXhwMihmbG9hdCB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGV4cDIodmVjMiAgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBleHAyKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgZXhwMih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiZmxvYXQgbG9nMihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIGxvZzIodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzICBsb2cyKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
bG9nMih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgc3Fy
dChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNxcnQodmVj
MiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzcXJ0KHZlYzMgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgc3FydCh2ZWM0ICB4KTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgaW52ZXJzZXNxcnQoZmxvYXQgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBpbnZlcnNlc3FydCh2ZWMyICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGludmVyc2VzcXJ0KHZlYzMg
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgaW52ZXJzZXNxcnQodmVj
NCAgeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCisg
ICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFicyhmbG9hdCB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGFicyh2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFicyh2ZWMzICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFicyh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgc2lnbihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIHNpZ24odmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMzICBzaWduKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCAgc2lnbih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgZmxvb3IoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBm
bG9vcih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZsb29y
KHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZmxvb3IodmVj
NCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGNlaWwoZmxvYXQg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBjZWlsKHZlYzIgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgY2VpbCh2ZWMzICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNlaWwodmVjNCAgeCk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGZyYWN0KGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgZnJhY3QodmVjMiAgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBmcmFjdCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIGZyYWN0KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBtb2QoZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyICBtb2QodmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBtb2QodmVjMyAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtb2QodmVjNCAgeCwgZmxvYXQgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtb2QodmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtb2QodmVjMyAgeCwgdmVjMyAgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtb2QodmVjNCAgeCwgdmVjNCAgeSk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1pbihmbG9hdCB4LCBmbG9hdCB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1pbih2ZWMyICB4LCBmbG9h
dCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1pbih2ZWMzICB4LCBm
bG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1pbih2ZWM0ICB4
LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1pbih2ZWMy
ICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1pbih2
ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1p
bih2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgbWF4KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgbWF4KHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyAgbWF4KHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgbWF4KHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMiAgbWF4KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgbWF4KHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCAgbWF4KHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBjbGFtcChmbG9hdCB4LCBmbG9hdCBtaW5WYWwsIGZs
b2F0IG1heFZhbCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBjbGFtcCh2
ZWMyICB4LCBmbG9hdCBtaW5WYWwsIGZsb2F0IG1heFZhbCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMzICBjbGFtcCh2ZWMzICB4LCBmbG9hdCBtaW5WYWwsIGZsb2F0IG1heFZh
bCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBjbGFtcCh2ZWM0ICB4LCBm
bG9hdCBtaW5WYWwsIGZsb2F0IG1heFZhbCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBjbGFtcCh2ZWMyICB4LCB2ZWMyICBtaW5WYWwsIHZlYzIgIG1heFZhbCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBjbGFtcCh2ZWMzICB4LCB2ZWMzICBtaW5W
YWwsIHZlYzMgIG1heFZhbCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBj
bGFtcCh2ZWM0ICB4LCB2ZWM0ICBtaW5WYWwsIHZlYzQgIG1heFZhbCk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1peChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBhKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1peCh2ZWMyICB4LCB2ZWMyICB5
LCBmbG9hdCBhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1peCh2ZWMz
ICB4LCB2ZWMzICB5LCBmbG9hdCBhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIG1peCh2ZWM0ICB4LCB2ZWM0ICB5LCBmbG9hdCBhKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIG1peCh2ZWMyICB4LCB2ZWMyICB5LCB2ZWMyICBhKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1peCh2ZWMzICB4LCB2ZWMzICB5LCB2ZWMzICBh
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1peCh2ZWM0ICB4LCB2ZWM0
ICB5LCB2ZWM0ICBhKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgc3Rl
cChmbG9hdCBlZGdlLCBmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIHN0ZXAodmVjMiAgZWRnZSwgdmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMzICBzdGVwKHZlYzMgIGVkZ2UsIHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgc3RlcCh2ZWM0ICBlZGdlLCB2ZWM0ICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjMiAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzMgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgc3RlcChmbG9hdCBlZGdlLCB2
ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgc21vb3Roc3Rl
cChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgc21vb3Roc3RlcCh2ZWMyICBlZGdlMCwgdmVjMiAgZWRnZTEsIHZl
YzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc21vb3Roc3RlcCh2
ZWMzICBlZGdlMCwgdmVjMyAgZWRnZTEsIHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjNCAgc21vb3Roc3RlcCh2ZWM0ICBlZGdlMCwgdmVjNCAgZWRnZTEsIHZlYzQg
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc21vb3Roc3RlcChmbG9h
dCBlZGdlMCwgZmxvYXQgZWRnZTEsIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgc21vb3Roc3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIHZlYzMgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgc21vb3Roc3RlcChmbG9hdCBl
ZGdlMCwgZmxvYXQgZWRnZTEsIHZlYzQgIHgpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAv
LyBHZW9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBsZW5ndGgoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBsZW5ndGgodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJm
bG9hdCBsZW5ndGgodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBsZW5ndGgodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IGRpc3RhbmNlKGZsb2F0IHAwLCBmbG9hdCBwMSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMyICBwMCwgdmVjMiAgcDEpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UodmVjMyAgcDAsIHZlYzMgIHAxKTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRpc3RhbmNlKHZlYzQgIHAwLCB2ZWM0ICBw
MSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdChmbG9hdCB4LCBm
bG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdCh2ZWMyICB4
LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdCh2ZWMz
ICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdCh2
ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyBj
cm9zcyh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBub3JtYWxpemUoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBub3JtYWxpemUodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMz
ICBub3JtYWxpemUodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBub3JtYWxpemUodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0IEksIGZsb2F0IE5yZWYpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZmFjZWZvcndhcmQodmVjMiAgTiwgdmVjMiAgSSwg
dmVjMiAgTnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmYWNlZm9y
d2FyZCh2ZWMzICBOLCB2ZWMzICBJLCB2ZWMzICBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIGZhY2Vmb3J3YXJkKHZlYzQgIE4sIHZlYzQgIEksIHZlYzQgIE5yZWYp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCByZWZsZWN0KGZsb2F0IEks
IGZsb2F0IE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgcmVmbGVjdCh2
ZWMyICBJLCB2ZWMyICBOKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJl
ZmxlY3QodmVjMyAgSSwgdmVjMyAgTik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICByZWZsZWN0KHZlYzQgIEksIHZlYzQgIE4pOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCByZWZyYWN0KGZsb2F0IEksIGZsb2F0IE4sIGZsb2F0IGV0YSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByZWZyYWN0KHZlYzIgIEksIHZlYzIgIE4s
IGZsb2F0IGV0YSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICByZWZyYWN0
KHZlYzMgIEksIHZlYzMgIE4sIGZsb2F0IGV0YSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICByZWZyYWN0KHZlYzQgIEksIHZlYzQgIE4sIGZsb2F0IGV0YSk7IikpOworCisg
ICAgICAgIC8vCisgICAgICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoIm1hdDIgbWF0cml4Q29tcE11bHQobWF0MiB4LCBtYXQyIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygibWF0MyBtYXRyaXhDb21wTXVsdChtYXQz
IHgsIG1hdDMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQ0IG1hdHJpeENv
bXBNdWx0KG1hdDQgeCwgbWF0NCB5KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmVj
dG9yIHJlbGF0aW9uYWwgZnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMiBsZXNzVGhhbih2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbih2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhhbih2ZWM0IHgsIHZlYzQgeSk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuKGl2ZWMyIHgsIGl2ZWMy
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbGVzc1RoYW4oaXZlYzMg
eCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhh
bihpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzIgbGVzc1RoYW5FcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMyBsZXNzVGhhbkVxdWFsKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuRXF1YWwodmVjNCB4LCB2ZWM0IHkpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbkVxdWFsKGl2ZWMy
IHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbGVzc1Ro
YW5FcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJ2ZWM0IGxlc3NUaGFuRXF1YWwoaXZlYzQgeCwgaXZlYzQgeSk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuKHZlYzIgeCwgdmVjMiB5KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuKHZlYzMgeCwgdmVjMyB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuKHZlYzQg
eCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRl
clRoYW4oaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMyBncmVhdGVyVGhhbihpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbkVxdWFsKHZlYzIgeCwgdmVj
MiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuRXF1
YWwodmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQg
Z3JlYXRlclRoYW5FcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbkVxdWFsKGl2ZWMzIHgs
IGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3JlYXRlclRo
YW5FcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzIgZXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzMgZXF1YWwodmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiYnZlYzQgZXF1YWwodmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGVxdWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZXF1YWwoaXZlYzQgeCwgaXZlYzQgeSk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFsKGJ2ZWMyIHgsIGJ2ZWMy
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZXF1YWwoYnZlYzMgeCwg
YnZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbChidmVj
NCB4LCBidmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90
RXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzMgbm90RXF1YWwodmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzQgbm90RXF1YWwodmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90RXF1YWwoaXZlYzQgeCwgaXZlYzQg
eSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFsKGJ2ZWMy
IHgsIGJ2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90RXF1
YWwoYnZlYzMgeCwgYnZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
NCBub3RFcXVhbChidmVjNCB4LCBidmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYm9vbCBhbnkoYnZlYzIgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
b29sIGFueShidmVjMyB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYW55
KGJ2ZWM0IHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVj
MiB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWMzIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzQgeCk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdChidmVjMiB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdChidmVjMyB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdChidmVjNCB4KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
c2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBs
ZXIsIHZlYzMgY29vcmQpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBOb2lzZSBmdW5j
dGlvbnMuCisgICAgICAgIC8vCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2Ux
KGZsb2F0IHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVj
MiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWMzICB4
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzQgIHgpOyIp
KTsKKworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKGZsb2F0IHgpOyIpKTsK
KyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMyICB4KTsiKSk7CisgICAg
Ly8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjMyAgeCk7IikpOworICAgIC8vCXMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKHZlYzQgIHgpOyIpKTsKKworICAgIC8vCXMuYXBw
ZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKGZsb2F0IHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzIG5vaXNlMyh2ZWMyICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyBub2lzZTModmVjMyAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgbm9pc2UzKHZlYzQgIHgpOyIpKTsKKworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
bm9pc2U0KGZsb2F0IHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNl
NCh2ZWMyICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVj
MyAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzQgIHgp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgewor
ICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUHJv
dG90eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZW4gYnkgdmVydGV4IHNoYWRlcnMgb25s
eS4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAg
VFN0cmluZyYgcyA9IEJ1aWx0SW5GdW5jdGlvbnNWZXJ0ZXg7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gR2VvbWV0cmljIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjNCBmdHJhbnNmb3JtKCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8v
IFRleHR1cmUgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0IHRleHR1cmUyRExvZChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMiBjb29yZCwgZmxvYXQg
bG9kKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvakxv
ZChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgbG9kKTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgc2FtcGxl
ciwgdmVjNCBjb29yZCwgZmxvYXQgbG9kKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCB0ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBm
bG9hdCBsb2QpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9
CisgICAgeworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gUHJvdG90eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZW4gYnkgZnJhZ21lbnQg
c2hhZGVycyBvbmx5LgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KworICAgICAgICBUU3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50OworCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRChzYW1wbGVyMkQgc2FtcGxlciwgdmVj
MiBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBs
ZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMz
IGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBkRmR4KGZsb2F0IHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBkRmR4
KHZlYzIgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR4KHZlYzMg
IHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkRmR4KHZlYzQgIHApOyIp
KTsKKworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRGZHkoZmxvYXQgcCk7IikpOwor
ICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGRGZHkodmVjMiAgcCk7IikpOworICAgIC8v
CXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHkodmVjMyAgcCk7IikpOworICAgIC8vCXMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIGRGZHkodmVjNCAgcCk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGZ3aWR0aChmbG9hdCBwKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIGZ3aWR0aCh2ZWMyICBwKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzMgIGZ3aWR0aCh2ZWMzICBwKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIGZ3aWR0aCh2ZWM0ICBwKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
XG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAg
ICAgIC8vCisgICAgICAgIC8vIFN0YW5kYXJkIFVuaWZvcm1zCisgICAgICAgIC8vCisgICAgICAg
IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBTdGFuZGFyZFVu
aWZvcm1zOworCisgICAgICAgIC8vCisgICAgICAgIC8vIERlcHRoIHJhbmdlIGluIHdpbmRvdyBj
b29yZGluYXRlcworICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJzdHJ1Y3Qg
Z2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgeyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ICAgIGhpZ2hwIGZsb2F0IG5lYXI7IikpOyAgICAgICAgLy8gbgorICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCIgICAgaGlnaHAgZmxvYXQgZmFyOyIpKTsgICAgICAgICAvLyBmCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9hdCBkaWZmOyIpKTsgICAgICAgIC8vIGYgLSBu
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIn07IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2U7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAg
IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBEZWZhdWx0IHBy
ZWNpc2lvbiBmb3IgdmVydGV4IHNoYWRlcnMuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBWZXJ0ZXhEZWZhdWx0UHJlY2lz
aW9uOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdocCBpbnQ7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAv
Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVmYXVsdCBwcmVj
aXNpb24gZm9yIGZyYWdtZW50IHNoYWRlcnMuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorICAgICAgICAKKyAgICAgICAgVFN0cmluZyYgcyA9IEZyYWdtZW50RGVm
YXVsdFByZWNpc2lvbjsKKyAgICAgICAgCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNp
c2lvbiBtZWRpdW1wIGludDsiKSk7CisgICAgICAgIC8vIE5vIGRlZmF1bHQgcHJlY2lzaW9uIGZv
ciBmbG9hdCBpbiBmcmFnbWVudCBzaGFkZXJzCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxu
IikpOworICAgIH0KKworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9i
YWNrKEZyYWdtZW50RGVmYXVsdFByZWNpc2lvbik7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFu
Z0ZyYWdtZW50XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9ucy5jX3N0cigpKTsKKyAgICBidWls
dEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zRnJh
Z21lbnQpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKFN0
YW5kYXJkVW5pZm9ybXMpOworICAgIAorICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhd
LnB1c2hfYmFjayhWZXJ0ZXhEZWZhdWx0UHJlY2lzaW9uKTsKKyAgICBidWlsdEluU3RyaW5nc1tF
U2hMYW5nVmVydGV4XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9ucyk7CisgICAgYnVpbHRJblN0
cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNWZXJ0ZXgpOwor
ICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhTdGFuZGFyZFVuaWZv
cm1zKTsKK30KKwordm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoY29uc3QgVEJ1aWx0SW5SZXNv
dXJjZSAmcmVzb3VyY2VzKQoreworICAgIFRTdHJpbmdTdHJlYW0gYnVpbHRJbnM7CisKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgY29uc3RhbnRzCisgICAgYnVpbHRJbnMgPDwgImNv
bnN0IGludCBnbF9NYXhWZXJ0ZXhBdHRyaWJzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4QXR0
cmlicyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzIDw8ICI7
IjsKKworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmFyeWluZ1ZlY3RvcnMgPSAi
IDw8IHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwg
ImNvbnN0IGludCBnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2Vz
Lm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29u
c3QgaW50IGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5t
YXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29u
c3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4VGV4dHVy
ZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZl
cnMgPSAiIDw8IHJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA8PCAiOyI7CisKKyAgICBidWlsdElu
U3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhidWlsdElucy5zdHIoKSk7CisgICAg
YnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKGJ1aWx0SW5zLnN0cigpKTsK
K30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBzb21l
IHNwZWNpYWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0aGUg
YnVpbHQtaW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKGxhbmd1YWdlKSB7CisK
KyAgICBjYXNlIEVTaExhbmdGcmFnbWVudDogeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQp
KSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICBUVHlwZShFYnRCb29s
LCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9y
IiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdD
b2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5
cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bv
aW50Q29vcmQiKSwgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFQb2ludENvb3JkLCAgMikpKTsKKworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBFU2hMYW5nVmVydGV4OgorICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUsICAgMSkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZXh0LCBpZGVu
dGlmeSB3aGljaCBidWlsdC1pbnMgZnJvbSB0aGUgYWxyZWFkeSBsb2FkZWQgaGVhZGVycyBoYXZl
CisgICAgLy8gYSBtYXBwaW5nIHRvIGFuIG9wZXJhdG9yLiAgVGhvc2UgdGhhdCBhcmUgbm90IGlk
ZW50aWZpZWQgYXMgc3VjaCBhcmUKKyAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJv
dWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcworICAgIC8vIG9wZXJhdGlvbnMu
CisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3QiLCAgICAgICAg
ICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKKworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0b3JFcXVhbCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rv
ck5vdEVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbiIs
ICAgICAgICAgRU9wTGVzc1RoYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVh
dGVyVGhhbkVxdWFsKTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJy
YWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFuKTsKKworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAgIEVPcFBvdyk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAgICAgRU9wRXhwMik7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAgICAgICAgRU9wTG9nKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAgICAgICAgICBFT3BFeHAp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIiLCAgICAgICAgIEVPcExv
ZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAgICAgIEVP
cFNxcnQpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImludmVyc2VzcXJ0Iiwg
IEVPcEludmVyc2VTcXJ0KTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFi
cyIsICAgICAgICAgIEVPcEFicyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
c2lnbiIsICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFtcCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9wTWl4KTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwgICBFT3BTbW9vdGhTdGVw
KTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAgICAgIEVP
cExlbmd0aCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGlzdGFuY2UiLCAg
ICAgRU9wRGlzdGFuY2UpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRvdCIs
ICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY3Jv
c3MiLCAgICAgICAgRU9wQ3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVPcFJlZnJhY3QpOworICAg
IAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFueSIsICAgICAgICAgIEVPcEFu
eSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWxsIiwgICAgICAgICAgRU9w
QWxsKTsKKworICAgIHN3aXRjaChsYW5ndWFnZSkKKyAgICB7CisgICAgY2FzZSBFU2hMYW5nVmVy
dGV4OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVTaExhbmdGcmFnbWVudDoKKyAgICAvLwlz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR4IiwgICAgICAgICBFT3BEUGR4KTsgICAg
IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvLwlzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICAgICAgICBFT3BEUGR5KTsgICAgIC8vIE9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvLwlzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJmd2lkdGgiLCAgICAgICBFT3BGd2lkdGgpOyAgIC8vIE9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYXNzZXJ0
KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CisgICAgfQorfQorCit2b2lkIElk
ZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgJnJlc291cmNlcykKK3sKKyAgICAvLworICAg
IC8vIEZpcnN0LCBpbnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFy
ZSBub3QgaW4gCisgICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KKyAgICAvLworICAg
IHN3aXRjaChsYW5ndWFnZSkgeworCisgICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6IHsKKyAgICAg
ICAgICAgIC8vIFNldCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgorICAgICAgICAg
ICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQs
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJj
ZXMubWF4RHJhd0J1ZmZlcnMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQor
fQorCitjb25zdCBjaGFyKiBHZXRQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5nKCkKK3sKKyAgICBz
dGF0aWMgY29uc3QgY2hhciAqUHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZyA9ICIiOworCisgICAg
cmV0dXJuIFByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmc7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luaXRpYWxpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvSW5p
dGlhbGl6ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVEXworI2RlZmluZSBfSU5JVElBTElaRV9J
TkNMVURFRF8KKworI2luY2x1ZGUgIkdMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKwordHlwZWRlZiBUVmVjdG9yPFRTdHJp
bmc+IFRCdWlsdEluU3RyaW5nczsKKworY2xhc3MgVEJ1aWx0SW5zIHsKK3B1YmxpYzoKKwlQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisJdm9pZCBpbml0aWFs
aXplKCk7CisJdm9pZCBpbml0aWFsaXplKGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291cmNl
cyk7CisJVEJ1aWx0SW5TdHJpbmdzKiBnZXRCdWlsdEluU3RyaW5ncygpIHsgcmV0dXJuIGJ1aWx0
SW5TdHJpbmdzOyB9Citwcm90ZWN0ZWQ6CisJVEJ1aWx0SW5TdHJpbmdzIGJ1aWx0SW5TdHJpbmdz
W0VTaExhbmdDb3VudF07Cit9OworCit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2Us
IFRTeW1ib2xUYWJsZSYpOwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlLCBUU3lt
Ym9sVGFibGUmLCBjb25zdCBUQnVpbHRJblJlc291cmNlICZyZXNvdXJjZXMpOworYm9vbCBHZW5l
cmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMs
IFRJbmZvU2luayYsIFRTeW1ib2xUYWJsZSosIEVTaExhbmd1YWdlIGxhbmd1YWdlID0gRVNoTGFu
Z0NvdW50KTsKK2Jvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKFRCdWlsdEluU3RyaW5ncyogQnVp
bHRJblN0cmluZ3MsIEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUSW5mb1NpbmsmIGluZm9TaW5rLCBj
b25zdCBUQnVpbHRJblJlc291cmNlICpyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSopOworY29uc3Qg
Y2hhciogR2V0UHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZygpOworZXh0ZXJuICJDIiBpbnQgSW5p
dFByZXByb2Nlc3Nvcih2b2lkKTsKK2V4dGVybiAiQyIgaW50IEZpbmFsaXplUHJlcHJvY2Vzc29y
KHZvaWQpOworCisjZW5kaWYgLy8gX0lOSVRJQUxJWkVfSU5DTFVERURfCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEy
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVE
bGwuaCIKKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisKK09TX1RMU0luZGV4IFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9T
X0lOVkFMSURfVExTX0lOREVYOworCitib29sIEluaXRQcm9jZXNzKCkKK3sKKyAgICBpZiAoVGhy
ZWFkSW5pdGlhbGl6ZUluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCS8vCisJCS8v
IEZ1bmN0aW9uIGlzIHJlLWVudHJhbnQuCisJCS8vCisgICAgICAgIHJldHVybiB0cnVlOworCX0K
KworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKKworICAg
IGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBhbGxvY2F0ZSBUTFMg
YXJlYSBmb3IgaW5pdCBmbGFnIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9CisKKworICAg
IGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0
UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBwb29sIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwl9CisKKyAgICBpZiAoIUluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgp
KSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFs
aXplIHBhcnNlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworCUluaXRU
aHJlYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIEluaXRUaHJlYWQoKQorewor
CS8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyByZS1lbnRyYW50CisJLy8KKyAgICBpZiAoVGhy
ZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJJbml0VGhyZWFkKCk6IFByb2Nlc3MgaGFzbid0IGJlZW4gaW5pdGFsaXNlZC4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJ
bml0aWFsaXplSW5kZXgpICE9IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisJSW5pdGlhbGl6
ZUdsb2JhbFBvb2xzKCk7CisKKwlpZiAoIUluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFPU19TZXRUTFNWYWx1ZShUaHJlYWRJ
bml0aWFsaXplSW5kZXgsICh2b2lkICopMSkpIHsKKwkJYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQo
KTogVW5hYmxlIHRvIHNldCBpbml0IGZsYWcuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIERldGFjaFRocmVhZCgpCit7CisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpCisgICAgICAgIHJldHVybiB0cnVlOworCisJLy8KKwkvLyBG
dW5jdGlvbiBpcyByZS1lbnRyYW50IGFuZCB0aGlzIHRocmVhZCBtYXkgbm90IGhhdmUgYmVlbiBp
bml0YWxpc2VkLgorCS8vCisgICAgaWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJ
bmRleCkgIT0gMCkgeworICAgICAgICBpZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxp
emVJbmRleCwgKHZvaWQgKikwKSkgeworCQkJYXNzZXJ0KDAgJiYgIkRldGFjaFRocmVhZCgpOiBV
bmFibGUgdG8gY2xlYXIgaW5pdCBmbGFnLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworCQl9CisKKwkJRnJlZUdsb2JhbFBvb2xzKCk7CisKKwkJaWYgKCFGcmVlUGFyc2VDb250ZXh0
KCkpCisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisJfQorCisgICAgcmV0dXJuIHN1Y2Nl
c3M7Cit9CisKK2Jvb2wgRGV0YWNoUHJvY2VzcygpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU2hGaW5hbGl6ZSgpOworCisgICAgc3Vj
Y2VzcyA9IERldGFjaFRocmVhZCgpOworCisJRnJlZVBvb2xJbmRleCgpOworCisJaWYgKCFGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKSkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworCisgICAgT1Nf
RnJlZVRMU0luZGV4KFRocmVhZEluaXRpYWxpemVJbmRleCk7CisgICAgVGhyZWFkSW5pdGlhbGl6
ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaWZuZGVmIF9fSU5JVElBTElaRURMTF9I
CisjZGVmaW5lIF9fSU5JVElBTElaRURMTF9ICisKKworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5j
bHVkZS5oIgorCisKK2Jvb2wgSW5pdFByb2Nlc3MoKTsKK2Jvb2wgSW5pdFRocmVhZCgpOworYm9v
bCBEZXRhY2hUaHJlYWQoKTsKK2Jvb2wgRGV0YWNoUHJvY2VzcygpOworCisjZW5kaWYgLy8gX19J
TklUSUFMSVpFRExMX0gKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9j
b21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvSW5pdGlhbGl6
ZUdsb2JhbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KKyNkZWZpbmUgX19J
TklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCisKK3ZvaWQgSW5pdGlhbGl6ZUdsb2JhbFBvb2xz
KCk7Cit2b2lkIEZyZWVHbG9iYWxQb29scygpOworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCk7
Cit2b2lkIEZyZWVQb29sSW5kZXgoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9HTE9CQUxT
X0lOQ0xVREVEXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURF
RF8KKyNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCisjaW5jbHVk
ZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCk7Citib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTsKK2Jvb2wgRnJlZVBh
cnNlQ29udGV4dCgpOworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKKworCisjZW5kaWYg
Ly8gX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL0ludGVybVRy
YXZlcnNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorCisvLworLy8gVHJhdmVyc2UgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiB0
cmVlLCBhbmQKKy8vIGNhbGwgYSBub2RlIHR5cGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2gg
bm9kZS4KKy8vIERvbmUgcmVjdXJzaXZlbHkgdGhyb3VnaCB0aGUgbWVtYmVyIGZ1bmN0aW9uIFRy
YXZlcnNlKCkuCisvLyBOb2RlIHR5cGVzIGNhbiBiZSBza2lwcGVkIGlmIHRoZWlyIGZ1bmN0aW9u
IHRvIGNhbGwgaXMgMCwKKy8vIGJ1dCB0aGVpciBzdWJ0cmVlIHdpbGwgc3RpbGwgYmUgdHJhdmVy
c2VkLgorLy8gTm9kZXMgd2l0aCBjaGlsZHJlbiBjYW4gaGF2ZSB0aGVpciB3aG9sZSBzdWJ0cmVl
IHNraXBwZWQKKy8vIGlmIHByZVZpc2l0IGlzIHR1cm5lZCBvbiBhbmQgdGhlIHR5cGUgc3BlY2lm
aWMgZnVuY3Rpb24KKy8vIHJldHVybnMgZmFsc2UuCisvLworLy8gcHJlVmlzaXQsIHBvc3RWaXNp
dCwgYW5kIHJpZ2h0VG9MZWZ0IGNvbnRyb2wgd2hhdCBvcmRlcgorLy8gbm9kZXMgYXJlIHZpc2l0
ZWQgaW4uCisvLworCisvLworLy8gVHJhdmVyc2FsIGZ1bmN0aW9ucyBmb3IgdGVybWluYWxzIGFy
ZSBzdHJhaWdoZm9yd2FyZC4uLi4KKy8vCit2b2lkIFRJbnRlcm1TeW1ib2w6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWl0LT52aXNpdFN5bWJvbCh0aGlzKTsKK30KKwordm9p
ZCBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7
CisJaXQtPnZpc2l0Q29uc3RhbnRVbmlvbih0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEg
YmluYXJ5IG5vZGUuCisvLwordm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCS8vCisJLy8gdmlzaXQgdGhl
IG5vZGUgYmVmb3JlIGNoaWxkcmVuIGlmIHByZS12aXNpdGluZy4KKwkvLworCWlmKGl0LT5wcmVW
aXNpdCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KFByZVZpc2l0LCB0aGlzKTsKKwl9
CisJCisJLy8KKwkvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KKwkv
LworCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYoaXQtPnJp
Z2h0VG9MZWZ0KSAKKwkJeworCQkJaWYocmlnaHQpCisJCQl7CisJCQkJcmlnaHQtPnRyYXZlcnNl
KGl0KTsKKwkJCX0KKwkJCQorCQkJaWYoaXQtPmluVmlzaXQpCisJCQl7CisJCQkJdmlzaXQgPSBp
dC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CisJCQl9CisKKwkJCWlmKHZpc2l0ICYmIGxl
ZnQpCisJCQl7CisJCQkJbGVmdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQl9CisJCWVsc2UKKwkJ
eworCQkJaWYobGVmdCkKKwkJCXsKKwkJCQlsZWZ0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCQkK
KwkJCWlmKGl0LT5pblZpc2l0KQorCQkJeworCQkJCXZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KElu
VmlzaXQsIHRoaXMpOworCQkJfQorCisJCQlpZih2aXNpdCAmJiByaWdodCkKKwkJCXsKKwkJCQly
aWdodC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQl9CisKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7
CisJfQorCisJLy8KKwkvLyBWaXNpdCB0aGUgbm9kZSBhZnRlciB0aGUgY2hpbGRyZW4sIGlmIHJl
cXVlc3RlZCBhbmQgdGhlIHRyYXZlcnNhbAorCS8vIGhhc24ndCBiZWVuIGNhbmNlbGxlZCB5ZXQu
CisJLy8KKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCXsKKwkJaXQtPnZpc2l0QmluYXJ5
KFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisvLworLy8gVHJhdmVyc2UgYSB1bmFyeSBub2Rl
LiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVElu
dGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0
ID0gdHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQpCisJCXZpc2l0ID0gaXQtPnZpc2l0VW5hcnko
UHJlVmlzaXQsIHRoaXMpOworCisJaWYgKHZpc2l0KSB7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgp
OworCQlvcGVyYW5kLT50cmF2ZXJzZShpdCk7CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0K
KwkKKwlpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZpc2l0VW5hcnkoUG9zdFZp
c2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGFuIGFnZ3JlZ2F0ZSBub2RlLiAgU2Ft
ZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUFn
Z3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9
IHRydWU7CisJCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJdmlzaXQgPSBpdC0+dmlzaXRBZ2dy
ZWdhdGUoUHJlVmlzaXQsIHRoaXMpOworCX0KKwkKKwlpZih2aXNpdCkKKwl7CisJCWl0LT5pbmNy
ZW1lbnREZXB0aCgpOworCisJCWlmKGl0LT5yaWdodFRvTGVmdCkKKwkJeworCQkJZm9yKFRJbnRl
cm1TZXF1ZW5jZTo6cmV2ZXJzZV9pdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5yYmVnaW4oKTsgc2l0
ICE9IHNlcXVlbmNlLnJlbmQoKTsgc2l0KyspCisJCQl7CisJCQkJKCpzaXQpLT50cmF2ZXJzZShp
dCk7CisKKwkJCQlpZih2aXNpdCAmJiBpdC0+aW5WaXNpdCkKKwkJCQl7CisJCQkJCWlmKCpzaXQg
IT0gc2VxdWVuY2UuZnJvbnQoKSkKKwkJCQkJeworCQkJCQkJdmlzaXQgPSBpdC0+dmlzaXRBZ2dy
ZWdhdGUoSW5WaXNpdCwgdGhpcyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQor
CQl7CisJCQlmb3IoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdp
bigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQorCQkJeworCQkJCSgqc2l0KS0+dHJh
dmVyc2UoaXQpOworCisJCQkJaWYodmlzaXQgJiYgaXQtPmluVmlzaXQpCisJCQkJeworCQkJCQlp
Zigqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKKwkJCQkJeworCQkJCQkJdmlzaXQgPSBpdC0+dmlz
aXRBZ2dyZWdhdGUoSW5WaXNpdCwgdGhpcyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJ
CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmKHZpc2l0ICYmIGl0LT5wb3N0Vmlz
aXQpCisJeworCQlpdC0+dmlzaXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCB0aGlzKTsKKwl9Cit9CisK
Ky8vCisvLyBUcmF2ZXJzZSBhIHNlbGVjdGlvbiBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5h
cnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6dHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwlpZiAoaXQt
PnByZVZpc2l0KQorCQl2aXNpdCA9IGl0LT52aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwgdGhpcyk7
CisJCisJaWYgKHZpc2l0KSB7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCQlpZiAoaXQtPnJp
Z2h0VG9MZWZ0KSB7CisJCQlpZiAoZmFsc2VCbG9jaykKKwkJCQlmYWxzZUJsb2NrLT50cmF2ZXJz
ZShpdCk7CisJCQlpZiAodHJ1ZUJsb2NrKQorCQkJCXRydWVCbG9jay0+dHJhdmVyc2UoaXQpOwor
CQkJY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7CisJCX0gZWxzZSB7CisJCQljb25kaXRpb24tPnRy
YXZlcnNlKGl0KTsKKwkJCWlmICh0cnVlQmxvY2spCisJCQkJdHJ1ZUJsb2NrLT50cmF2ZXJzZShp
dCk7CisJCQlpZiAoZmFsc2VCbG9jaykKKwkJCQlmYWxzZUJsb2NrLT50cmF2ZXJzZShpdCk7CisJ
CX0KKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCisJaWYgKHZpc2l0ICYmIGl0LT5wb3N0
VmlzaXQpCisJCWl0LT52aXNpdFNlbGVjdGlvbihQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLwor
Ly8gVHJhdmVyc2UgYSBsb29wIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFw
cGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwlpZihpdC0+cHJlVmlzaXQpCisJewor
CQl2aXNpdCA9IGl0LT52aXNpdExvb3AoUHJlVmlzaXQsIHRoaXMpOworCX0KKwkKKwlpZih2aXNp
dCkKKwl7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCisJCWlmKGl0LT5yaWdodFRvTGVmdCkK
KwkJeworCQkJaWYodGVybWluYWwpCisJCQl7CisJCQkJdGVybWluYWwtPnRyYXZlcnNlKGl0KTsK
KwkJCX0KKworCQkJaWYoYm9keSkKKwkJCXsKKwkJCQlib2R5LT50cmF2ZXJzZShpdCk7CisJCQl9
CisKKwkJCWlmKHRlc3QpCisJCQl7CisJCQkJdGVzdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQl9
CisJCWVsc2UKKwkJeworCQkJaWYodGVzdCkKKwkJCXsKKwkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7
CisJCQl9CisKKwkJCWlmKGJvZHkpCisJCQl7CisJCQkJYm9keS0+dHJhdmVyc2UoaXQpOworCQkJ
fQorCisJCQlpZih0ZXJtaW5hbCkKKwkJCXsKKwkJCQl0ZXJtaW5hbC0+dHJhdmVyc2UoaXQpOwor
CQkJfQorCQl9CisKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCisJaWYodmlzaXQgJiYg
aXQtPnBvc3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdExvb3AoUG9zdFZpc2l0LCB0aGlzKTsKKwl9
Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJyYW5jaCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBi
aW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUJyYW5jaDo6dHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwlpZiAoaXQt
PnByZVZpc2l0KQorCQl2aXNpdCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7CisJ
CisJaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisJ
CWV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQor
CisJaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJCWl0LT52aXNpdEJyYW5jaChQb3N0Vmlz
aXQsIHRoaXMpOworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
CisvLyBCdWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorLy8KKworI2luY2x1
ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9s
b2NhbGludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUmVtb3ZlVHJlZS5oIgorCitib29sIENvbXBhcmVTdHJ1Y3R1
cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFy
cmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7CisKK1RQcmVjaXNpb24gR2V0SGln
aGVzdFByZWNpc2lvbiggVFByZWNpc2lvbiBsZWZ0LCBUUHJlY2lzaW9uIHJpZ2h0ICl7CisgICAg
cmV0dXJuIGxlZnQgPiByaWdodCA/IGxlZnQgOiByaWdodDsKK30KKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vCisvLyBGaXJzdCBzZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBp
bnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCisvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBt
ZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2Rlcy4KKy8vIFRoZXkgYXJlIGNhbGxlZCBmcm9tIHBh
cnNlciBwcm9kdWN0aW9ucy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gQWRk
IGEgdGVybWluYWwgbm9kZSBmb3IgYW4gaWRlbnRpZmllciBpbiBhbiBleHByZXNzaW9uLgorLy8K
Ky8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVN5bWJvbCogVEludGVybWVk
aWF0ZTo6YWRkU3ltYm9sKGludCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgY29uc3QgVFR5cGUm
IHR5cGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtU3ltYm9sKiBub2RlID0gbmV3
IFRJbnRlcm1TeW1ib2woaWQsIG5hbWUsIHR5cGUpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7
CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHdpdGgg
YSBuZXcgcGFyZW50IHRoYXQgZG9lcyBhIGJpbmFyeSBvcGVyYXRpb24gb24gdGhlIG5vZGVzLgor
Ly8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBU
SW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgor
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmIChs
ZWZ0LT5nZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8
IGxlZnQtPmdldFR5cGUoKS5pc1ZlY3RvcigpIHx8IGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAg
ICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Cisg
ICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wg
fHwgbGVmdC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzQXJyYXko
KSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QWRkOgorICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAg
IGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgbGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KKworICAgIC8vCisgICAgLy8gRmlyc3QgdHJ5IGNvbnZlcnRpbmcgdGhlIGNoaWxk
cmVuIHRvIGNvbXBhdGlibGUgdHlwZXMuCisgICAgLy8KKworICAgIGlmICghKGxlZnQtPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKSkgeworICAg
ICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlw
ZSgpLCByaWdodCk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgIHJpZ2h0ID0gY2hp
bGQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9w
LCByaWdodC0+Z2V0VHlwZSgpLCBsZWZ0KTsKKyAgICAgICAgICAgIGlmIChjaGlsZCkKKyAgICAg
ICAgICAgICAgICBsZWZ0ID0gY2hpbGQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobGVmdC0+
Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKworICAgIC8vCisgICAgLy8gTmVlZCBhIG5ldyBub2RlIGhvbGRpbmcgdGhpbmdzIHRv
Z2V0aGVyIHRoZW4uICBNYWtlCisgICAgLy8gb25lIGFuZCBwcm9tb3RlIGl0IHRvIHRoZSByaWdo
dCB0eXBlLgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmlu
YXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0gcmlnaHQtPmdldExp
bmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgbm9kZS0+c2V0TGVmdChsZWZ0
KTsKKyAgICBub2RlLT5zZXRSaWdodChyaWdodCk7CisgICAgaWYgKCEgbm9kZS0+cHJvbW90ZShp
bmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CisKKyAgICBpZiAobGVmdFRlbXBDb25zdGFudCkKKyAgICAgICAgbGVmdFRlbXBD
b25zdGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKHJpZ2h0VGVt
cENvbnN0YW50KQorICAgICAgICByaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0YW50
cy4KKyAgICAvLworCisgICAgVEludGVybVR5cGVkKiB0eXBlZFJldHVybk5vZGUgPSAwOworICAg
IGlmICggbGVmdFRlbXBDb25zdGFudCAmJiByaWdodFRlbXBDb25zdGFudCkgeworICAgICAgICB0
eXBlZFJldHVybk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJp
Z2h0VGVtcENvbnN0YW50LCBpbmZvU2luayk7CisKKyAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9k
ZSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlZFJldHVybk5vZGU7CisgICAgfQorCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGFzc2ln
bm1lbnQuCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQq
IFRJbnRlcm1lZGlhdGU6OmFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVm
dCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIC8vCisgICAg
Ly8gTGlrZSBhZGRpbmcgYmluYXJ5IG1hdGgsIGV4Y2VwdCB0aGUgY29udmVyc2lvbiBjYW4gb25s
eSBnbworICAgIC8vIGZyb20gcmlnaHQgdG8gbGVmdC4KKyAgICAvLworICAgIFRJbnRlcm1CaW5h
cnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgaWYgKGxpbmUgPT0gMCkKKyAg
ICAgICAgbGluZSA9IGxlZnQtPmdldExpbmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwor
CisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5
cGUoKSwgcmlnaHQpOworICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9kZS0+c2V0UmlnaHQoY2hpbGQpOworICAg
IGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBp
bmRleCBvcGVyYXRvciwgd2hlcmUgdGhlIGxlZnQgbm9kZSBpcyB0aGUgYmFzZQorLy8gb2YgYW4g
YXJyYXkgb3Igc3RydWN0LCBhbmQgdGhlIHJpZ2h0IG5vZGUgaXMgYSBkaXJlY3Qgb3IgaW5kaXJl
Y3Qgb2Zmc2V0LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLyBUaGUgY2FsbGVy
IHNob3VsZCBzZXQgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIG5vZGUuCisvLworVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCog
YmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRl
cm1CaW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgaWYgKGxpbmUgPT0g
MCkKKyAgICAgICAgbGluZSA9IGluZGV4LT5nZXRMaW5lKCk7CisgICAgbm9kZS0+c2V0TGluZShs
aW5lKTsKKyAgICBub2RlLT5zZXRMZWZ0KGJhc2UpOworICAgIG5vZGUtPnNldFJpZ2h0KGluZGV4
KTsKKworICAgIC8vIGNhbGxlciBzaG91bGQgc2V0IHRoZSB0eXBlCisKKyAgICByZXR1cm4gbm9k
ZTsKK30KKworLy8KKy8vIEFkZCBvbmUgbm9kZSBhcyB0aGUgcGFyZW50IG9mIGFub3RoZXIgdGhh
dCBpdCBvcGVyYXRlcyBvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVElu
dGVybU5vZGUqIGNoaWxkTm9kZSwgVFNvdXJjZUxvYyBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQoreworICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKKyAgICBUSW50ZXJtVHlwZWQqIGNo
aWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7CisKKyAgICBpZiAoY2hpbGQgPT0gMCkgewor
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQg
dHlwZSBpbiBBZGRVbmFyeU1hdGgiLCBsaW5lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6CisgICAgICAg
ICAgICBpZiAoY2hpbGQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IGNo
aWxkLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSB8
fCBjaGlsZC0+Z2V0VHlwZSgpLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
UG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoY2hpbGQtPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgY2hpbGQtPmdldFR5cGUoKS5pc0FycmF5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIC8vCisgICAgLy8gRG8gd2UgbmVlZCB0byBwcm9tb3RlIHRoZSBvcGVyYW5kPwor
ICAgIC8vCisgICAgLy8gTm90ZTogSW1wbGljaXQgcHJvbW90aW9ucyB3ZXJlIHJlbW92ZWQgZnJv
bSB0aGUgbGFuZ3VhZ2UuCisgICAgLy8KKyAgICBUQmFzaWNUeXBlIG5ld1R5cGUgPSBFYnRWb2lk
OworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgbmV3
VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAg
bmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9h
dDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9pZCkgeworICAgICAgICBjaGlsZCA9IGFk
ZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNoaWxkLT5nZXRQcmVjaXNpb24oKSwgRXZx
VGVtcG9yYXJ5LAorICAgICAgICAgICAgY2hpbGQtPmdldE5vbWluYWxTaXplKCksCisgICAgICAg
ICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAgICAgIGNoaWxkLT5pc0FycmF5KCkpLAor
ICAgICAgICAgICAgY2hpbGQpOworICAgICAgICBpZiAoY2hpbGQgPT0gMCkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIC8vCisgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgd2Ug
YXJlIG5vdyBkb25lLCBpdCdzIGFsbCBpbiB0aGUgY29udmVyc2lvbi4KKyAgICAvLworICAgIHN3
aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAg
ICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKmNoaWxkVGVtcENvbnN0YW50ID0gMDsKKyAgICBpZiAo
Y2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAgICAgICBjaGlsZFRlbXBDb25zdGFudCA9
IGNoaWxkLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgIC8vCisgICAgLy8gTWFrZSBhIG5l
dyBub2RlIGZvciB0aGUgb3BlcmF0b3IuCisgICAgLy8KKyAgICBub2RlID0gbmV3IFRJbnRlcm1V
bmFyeShvcCk7CisgICAgaWYgKGxpbmUgPT0gMCkKKyAgICAgICAgbGluZSA9IGNoaWxkLT5nZXRM
aW5lKCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBub2RlLT5zZXRPcGVyYW5kKGNo
aWxkKTsKKworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChjaGlsZFRlbXBDb25zdGFudCkgIHsKKyAgICAgICAgVEludGVybVR5
cGVkKiBuZXdDaGlsZCA9IGNoaWxkVGVtcENvbnN0YW50LT5mb2xkKG9wLCAwLCBpbmZvU2luayk7
CisKKyAgICAgICAgaWYgKG5ld0NoaWxkKQorICAgICAgICAgICAgcmV0dXJuIG5ld0NoaWxkOwor
ICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gVGhpcyBpcyB0aGUgc2FmZSB3
YXkgdG8gY2hhbmdlIHRoZSBvcGVyYXRvciBvbiBhbiBhZ2dyZWdhdGUsIGFzIGl0CisvLyBkb2Vz
IGxvdHMgb2YgZXJyb3IgY2hlY2tpbmcgYW5kIGZpeGluZy4gIEVzcGVjaWFsbHkgZm9yIGVzdGFi
bGlzaGluZworLy8gYSBmdW5jdGlvbiBjYWxsJ3Mgb3BlcmF0aW9uIG9uIGl0J3Mgc2V0IG9mIHBh
cmFtZXRlcnMuICBTZXF1ZW5jZXMKKy8vIG9mIGluc3RydWN0aW9ucyBhcmUgYWxzbyBhZ2dyZWdh
dGVzLCBidXQgdGhleSBqdXN0IGRpcmVuY3RseSBzZXQKKy8vIHRoZWlyIG9wZXJhdG9yIHRvIEVP
cFNlcXVlbmNlLgorLy8KKy8vIFJldHVybnMgYW4gYWdncmVnYXRlIG5vZGUsIHdoaWNoIGNvdWxk
IGJlIHRoZSBvbmUgcGFzc2VkIGluIGlmCisvLyBpdCB3YXMgYWxyZWFkeSBhbiBhZ2dyZWdhdGUu
CisvLworVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3BlcmF0
b3IoVEludGVybU5vZGUqIG5vZGUsIFRPcGVyYXRvciBvcCwgVFNvdXJjZUxvYyBsaW5lKQorewor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGU7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBoYXZlIGFuIGFnZ3JlZ2F0ZS4gIElmIG5vdCB0dXJuIGl0IGludG8gb25lLgorICAgIC8v
CisgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgYWdnTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRl
KCk7CisgICAgICAgIGlmIChhZ2dOb2RlID09IDAgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BO
dWxsKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTWFrZSBhbiBhZ2dyZWdhdGUg
Y29udGFpbmluZyB0aGlzIG5vZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgYWdnTm9k
ZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1
ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKyAgICAgICAgICAgIGlmIChsaW5lID09IDApCisgICAg
ICAgICAgICAgICAgbGluZSA9IG5vZGUtPmdldExpbmUoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZQorICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKKworICAgIC8vCisg
ICAgLy8gU2V0IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIGFnZ05vZGUtPnNldE9wZXJhdG9y
KG9wKTsKKyAgICBpZiAobGluZSAhPSAwKQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUp
OworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisKKy8vCisvLyBDb252ZXJ0IG9uZSB0eXBlIHRv
IGFub3RoZXIuCisvLworLy8gUmV0dXJucyB0aGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNvbnZl
cnNpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lCisvLyBub2RlIHBhc3NlZCBpbiBpZiBubyBj
b252ZXJzaW9uIHdhcyBuZWVkZWQuCisvLworLy8gUmV0dXJuIDAgaWYgYSBjb252ZXJzaW9uIGNh
bid0IGJlIGRvbmUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJz
aW9uKFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHR5cGUsIFRJbnRlcm1UeXBlZCogbm9kZSkK
K3sKKyAgICAvLworICAgIC8vIERvZXMgdGhlIGJhc2UgdHlwZSBhbGxvdyBvcGVyYXRpb24/Cisg
ICAgLy8KKyAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
RWJ0Vm9pZDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7
CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UsIGlmIHR5cGVzIGFyZSBpZGVudGlj
YWwsIG5vIHByb2JsZW0KKyAgICAvLworICAgIGlmICh0eXBlID09IG5vZGUtPmdldFR5cGUoKSkK
KyAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAgICAvLworICAgIC8vIElmIG9uZSdzIGEgc3RydWN0
dXJlLCB0aGVuIG5vIGNvbnZlcnNpb25zLgorICAgIC8vCisgICAgaWYgKHR5cGUuZ2V0U3RydWN0
KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYW4gYXJyYXksIHRoZW4gbm8gY29udmVyc2lvbnMuCisg
ICAgLy8KKyAgICBpZiAodHlwZS5pc0FycmF5KCkgfHwgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUQmFzaWNUeXBlIHByb21vdGVUbzsKKworICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhwbGljaXQgY29udmVyc2lv
bnMKKyAgICAgICAgLy8KKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICAg
ICAgcHJvbW90ZVRvID0gRWJ0Qm9vbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0RmxvYXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAg
ICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBpbXBsaWNpdCBjb252ZXJzaW9u
cyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gbm9kZS0+Z2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFNpemUgYW5kIHN0cnVjdHVyZSBjb3VsZCBzdGlsbCBkaWZmZXIsIGJ1dCB0aGF0
J3MKKyAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb3BlcmF0b3IgcHJvbW90aW9uLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIGlmIChub2Rl
LT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeworCisgICAgICAgIHJldHVybiAocHJvbW90ZUNvbnN0
YW50VW5pb24ocHJvbW90ZVRvLCBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSkpOworICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWRkIGEgbmV3IG5ld05vZGUgZm9yIHRo
ZSBjb252ZXJzaW9uLgorICAgICAgICAvLworICAgICAgICBUSW50ZXJtVW5hcnkqIG5ld05vZGUg
PSAwOworCisgICAgICAgIFRPcGVyYXRvciBuZXdPcCA9IEVPcE51bGw7CisgICAgICAgIHN3aXRj
aCAocHJvbW90ZVRvKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQgcHJv
bW90aW9uIG5vZGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3Ag
PSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQgcHJvbW90aW9uIG5vZGUiLCBub2RlLT5n
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvSW50OyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9IEVPcENv
bnZGbG9hdFRvSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gdHlwZSIs
IG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KworICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9k
ZS0+aXNBcnJheSgpKTsKKyAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3As
IHR5cGUpOworICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CisgICAg
ICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7
CisgICAgfQorfQorCisvLworLy8gU2FmZSB3YXkgdG8gY29tYmluZSB0d28gbm9kZXMgaW50byBh
biBhZ2dyZWdhdGUuICBXb3JrcyB3aXRoIG51bGwgcG9pbnRlcnMsCisvLyBhIG5vZGUgdGhhdCdz
IG5vdCBhIGFnZ3JlZ2F0ZSB5ZXQsIGV0Yy4KKy8vCisvLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcg
YWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFzc2VkIGluIGZvcgorLy8gYm90aCBleGlzdGluZyBu
b2Rlcy4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpncm93QWdncmVnYXRl
KFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSkK
K3sKKyAgICBpZiAobGVmdCA9PSAwICYmIHJpZ2h0ID09IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IDA7CisgICAgaWYgKGxlZnQpCisgICAg
ICAgIGFnZ05vZGUgPSBsZWZ0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmICghYWdnTm9kZSB8
fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAgICAgICAgYWdnTm9kZSA9IG5ldyBU
SW50ZXJtQWdncmVnYXRlOworICAgICAgICBpZiAobGVmdCkKKyAgICAgICAgICAgIGFnZ05vZGUt
PmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKGxlZnQpOworICAgIH0KKworICAgIGlmIChyaWdodCkK
KyAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2socmlnaHQpOworCisgICAg
aWYgKGxpbmUgIT0gMCkKKyAgICAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJl
dHVybiBhZ2dOb2RlOworfQorCisvLworLy8gVHVybiBhbiBleGlzdGluZyBub2RlIGludG8gYW4g
YWdncmVnYXRlLgorLy8KKy8vIFJldHVybnMgYW4gYWdncmVnYXRlLCB1bmxlc3MgMCB3YXMgcGFz
c2VkIGluIGZvciB0aGUgZXhpc3Rpbmcgbm9kZS4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50
ZXJtZWRpYXRlOjptYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgaWYgKG5vZGUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50
ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgYWdnTm9k
ZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobm9kZSk7CisKKyAgICBpZiAobGluZSAhPSAwKQor
ICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworICAgIGVsc2UKKyAgICAgICAgYWdnTm9k
ZS0+c2V0TGluZShub2RlLT5nZXRMaW5lKCkpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisK
Ky8vCisvLyBGb3IgImlmIiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBh
IGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBw
YXRocyBhcmUgaW4gdGhlCisvLyBub2RlUGFpci4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rp
b24gbm9kZSBjcmVhdGVkLgorLy8KK1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxl
Y3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXIsIFRTb3Vy
Y2VMb2MgbGluZSkKK3sKKyAgICAvLworICAgIC8vIEZvciBjb21waWxlIHRpbWUgY29uc3RhbnQg
c2VsZWN0aW9ucywgcHJ1bmUgdGhlIGNvZGUgYW5kCisgICAgLy8gdGVzdCBub3cuCisgICAgLy8K
KworICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkgJiYgY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTE7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBub2RlUGFpci5ub2RlMjsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VsZWN0aW9u
KiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgbm9kZVBhaXIubm9kZTEsIG5vZGVQ
YWlyLm5vZGUyKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKKworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb21tYShUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBp
ZiAobGVmdC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmIHJpZ2h0LT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgcmV0dXJuIHJp
Z2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqY29tbWFBZ2dyZWdhdGUg
PSBncm93QWdncmVnYXRlKGxlZnQsIHJpZ2h0LCBsaW5lKTsKKyAgICAgICAgY29tbWFBZ2dyZWdh
dGUtPmdldEFzQWdncmVnYXRlKCktPnNldE9wZXJhdG9yKEVPcENvbW1hKTsKKyAgICAgICAgY29t
bWFBZ2dyZWdhdGUtPnNldFR5cGUocmlnaHQtPmdldFR5cGUoKSk7CisgICAgICAgIGNvbW1hQWdn
cmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
KyAgICAgICAgcmV0dXJuIGNvbW1hQWdncmVnYXRlOworICAgIH0KK30KKworLy8KKy8vIEZvciAi
PzoiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAor
Ly8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBzcGVj
aWZpZWQKKy8vIGFzIHNlcGFyYXRlIHBhcmFtZXRlcnMuCisvLworLy8gUmV0dXJucyB0aGUgc2Vs
ZWN0aW9uIG5vZGUgY3JlYXRlZCwgb3IgMCBpZiBvbmUgY291bGQgbm90IGJlLgorLy8KK1RJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwg
VEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9jaywgVFNvdXJj
ZUxvYyBsaW5lKQoreworICAgIC8vCisgICAgLy8gR2V0IGNvbXBhdGlibGUgdHlwZXMuCisgICAg
Ly8KKyAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5jZSwg
dHJ1ZUJsb2NrLT5nZXRUeXBlKCksIGZhbHNlQmxvY2spOworICAgIGlmIChjaGlsZCkKKyAgICAg
ICAgZmFsc2VCbG9jayA9IGNoaWxkOworICAgIGVsc2UgeworICAgICAgICBjaGlsZCA9IGFkZENv
bnZlcnNpb24oRU9wU2VxdWVuY2UsIGZhbHNlQmxvY2stPmdldFR5cGUoKSwgdHJ1ZUJsb2NrKTsK
KyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgdHJ1ZUJsb2NrID0gY2hpbGQ7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vCisgICAgLy8g
U2VlIGlmIGFsbCB0aGUgb3BlcmFuZHMgYXJlIGNvbnN0YW50LCB0aGVuIGZvbGQgaXQgb3RoZXJ3
aXNlIG5vdC4KKyAgICAvLworCisgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRVbmlvbigpICYm
IHRydWVCbG9jay0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgZmFsc2VCbG9jay0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlQmxvY2s7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZUJsb2NrOwor
ICAgIH0KKworICAgIC8vCisgICAgLy8gTWFrZSBhIHNlbGVjdGlvbiBub2RlLgorICAgIC8vCisg
ICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIHRy
dWVCbG9jaywgZmFsc2VCbG9jaywgdHJ1ZUJsb2NrLT5nZXRUeXBlKCkpOworICAgIG5vZGUtPnNl
dExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENvbnN0YW50IHRl
cm1pbmFsIG5vZGVzLiAgSGFzIGEgdW5pb24gdGhhdCBjb250YWlucyBib29sLCBmbG9hdCBvciBp
bnQgY29uc3RhbnRzCisvLworLy8gUmV0dXJucyB0aGUgY29uc3RhbnQgdW5pb24gbm9kZSBjcmVh
dGVkLgorLy8KKworVEludGVybUNvbnN0YW50VW5pb24qIFRJbnRlcm1lZGlhdGU6OmFkZENvbnN0
YW50VW5pb24oQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheVBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0
LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUgPSBu
ZXcgVEludGVybUNvbnN0YW50VW5pb24odW5pb25BcnJheVBvaW50ZXIsIHQpOworICAgIG5vZGUt
PnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmIGZpZWxkcywgVFNvdXJjZUxv
YyBsaW5lKQoreworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSA9IG5ldyBUSW50ZXJtQWdn
cmVnYXRlKEVPcFNlcXVlbmNlKTsKKworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgVElu
dGVybUNvbnN0YW50VW5pb24qIGNvbnN0SW50Tm9kZTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cXVlbmNlVmVjdG9yID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBDb25zdGFudFVuaW9uKiB1
bmlvbkFycmF5OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKyspIHsK
KyAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLm9mZnNldHNbaV0pOworICAgICAgICBjb25zdEludE5v
ZGUgPSBhZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksIGxpbmUpOworICAgICAgICBzZXF1ZW5jZVZlY3Rvci5wdXNoX2JhY2so
Y29uc3RJbnROb2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENy
ZWF0ZSBsb29wIG5vZGVzLgorLy8KK1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRMb29w
KFRJbnRlcm1Ob2RlICppbml0LCBUSW50ZXJtTm9kZSogYm9keSwgVEludGVybVR5cGVkKiB0ZXN0
LCBUSW50ZXJtVHlwZWQqIHRlcm1pbmFsLCBib29sIHRlc3RGaXJzdCwgVFNvdXJjZUxvYyBsaW5l
KQoreworICAgIFRJbnRlcm1Ob2RlKiBub2RlID0gbmV3IFRJbnRlcm1Mb29wKGluaXQsIGJvZHks
IHRlc3QsIHRlcm1pbmFsLCB0ZXN0Rmlyc3QpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisK
KyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIEFkZCBicmFuY2hlcy4KKy8vCitUSW50ZXJt
QnJhbmNoKiBUSW50ZXJtZWRpYXRlOjphZGRCcmFuY2goVE9wZXJhdG9yIGJyYW5jaE9wLCBUU291
cmNlTG9jIGxpbmUpCit7CisgICAgcmV0dXJuIGFkZEJyYW5jaChicmFuY2hPcCwgMCwgbGluZSk7
Cit9CisKK1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3Ig
YnJhbmNoT3AsIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbiwgVFNvdXJjZUxvYyBsaW5lKQorewor
ICAgIFRJbnRlcm1CcmFuY2gqIG5vZGUgPSBuZXcgVEludGVybUJyYW5jaChicmFuY2hPcCwgZXhw
cmVzc2lvbik7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOwor
fQorCisvLworLy8gVGhpcyBpcyB0byBiZSBleGVjdXRlZCBvbmNlIHRoZSBmaW5hbCByb290IGlz
IHB1dCBvbiB0b3AgYnkgdGhlIHBhcnNpbmcKKy8vIHByb2Nlc3MuCisvLworYm9vbCBUSW50ZXJt
ZWRpYXRlOjpwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSogcm9vdCwgRVNoTGFuZ3VhZ2UgbGFuZ3Vh
Z2UpCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LworICAgIC8vIEZpcnN0LCBmaW5pc2ggb2ZmIHRoZSB0b3AgbGV2ZWwgc2VxdWVuY2UsIGlmIGFu
eQorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnUm9vdCA9IHJvb3QtPmdldEFzQWdn
cmVnYXRlKCk7CisgICAgaWYgKGFnZ1Jvb3QgJiYgYWdnUm9vdC0+Z2V0T3AoKSA9PSBFT3BOdWxs
KQorICAgICAgICBhZ2dSb290LT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRoaXMgZGVsZXRlcyB0aGUgdHJlZS4KKy8vCit2b2lkIFRJ
bnRlcm1lZGlhdGU6OnJlbW92ZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBpZiAocm9vdCkK
KyAgICAgICAgUmVtb3ZlQWxsVHJlZU5vZGVzKHJvb3QpOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
TWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIHRyZWUu
CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCisvLworLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBu
b2RlIGNoYW5nZXMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisvLworLy8gUmV0dXJucyB0cnVl
IGlmIHN0YXRlIGlzIG1vZGlmaWVkLgorLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjptb2RpZmll
c1N0YXRlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wUG9z
dEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNl
IEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAg
IGNhc2UgRU9wQXNzaWduOgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVP
cERpdkFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8KKy8vIHJldHVybnMgdHJ1
ZSBpZiB0aGUgb3BlcmF0b3IgaXMgZm9yIG9uZSBvZiB0aGUgY29uc3RydWN0b3JzCisvLworYm9v
bCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjb25zdAoreworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9h
dDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisvLworLy8gTWFrZSBzdXJlIHRo
ZSB0eXBlIG9mIGEgdW5hcnkgb3BlcmF0b3IgaXMgYXBwcm9wcmlhdGUgZm9yIGl0cworLy8gY29t
YmluYXRpb24gb2Ygb3BlcmF0aW9uIGFuZCBvcGVyYW5kIHR5cGUuCisvLworLy8gUmV0dXJucyBm
YWxzZSBpbiBub3RoaW5nIG1ha2VzIHNlbnNlLgorLy8KK2Jvb2wgVEludGVybVVuYXJ5Ojpwcm9t
b3RlKFRJbmZvU2luayYpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcExv
Z2ljYWxOb3Q6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBvcGVyYXRvcnMg
Zm9yIGJ1aWx0LWlucyBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYWdhaW5zdCB0aGVpciBwcm90
b3R5cGUKKyAgICAgICAgY2FzZSBFT3BBbnk6CisgICAgICAgIGNhc2UgRU9wQWxsOgorICAgICAg
ICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzZXRUeXBlKG9wZXJhbmQtPmdldFR5cGUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8KKy8vIEVzdGFibGlzaGVzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHRhbnQgb3BlcmF0aW9uLCBh
cyB3ZWxsIGFzCisvLyBtYWtlcyB0aGUgb3BlcmF0b3IgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUg
b3BlcmFuZHMuCisvLworLy8gUmV0dXJucyBmYWxzZSBpZiBvcGVyYXRvciBjYW4ndCB3b3JrIG9u
IG9wZXJhbmRzLgorLy8KK2Jvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGlu
Zm9TaW5rKQoreworICAgIGludCBzaXplID0gbGVmdC0+Z2V0Tm9taW5hbFNpemUoKTsKKyAgICBp
ZiAocmlnaHQtPmdldE5vbWluYWxTaXplKCkgPiBzaXplKQorICAgICAgICBzaXplID0gcmlnaHQt
PmdldE5vbWluYWxTaXplKCk7CisKKyAgICBUQmFzaWNUeXBlIHR5cGUgPSBsZWZ0LT5nZXRCYXNp
Y1R5cGUoKTsKKworICAgIC8vCisgICAgLy8gQXJyYXlzIGhhdmUgdG8gYmUgZXhhY3QgbWF0Y2hl
cy4KKyAgICAvLworICAgIGlmICgobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkp
ICYmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vCisgICAgLy8gQmFzZSBhc3N1bXB0aW9uOiAganVzdCBtYWtlIHRo
ZSB0eXBlIHRoZSBzYW1lIGFzIHRoZSBsZWZ0CisgICAgLy8gb3BlcmFuZC4gIFRoZW4gb25seSBk
ZXZpYXRpb25zIGZyb20gdGhpcyBuZWVkIGJlIGNvZGVkLgorICAgIC8vCisgICAgc2V0VHlwZShs
ZWZ0LT5nZXRUeXBlKCkpOworCisgICAgVFByZWNpc2lvbiBoaWdoZXN0UHJlY2lzaW9uID0gR2V0
SGlnaGVzdFByZWNpc2lvbihsZWZ0LT5nZXRQcmVjaXNpb24oKSwgcmlnaHQtPmdldFByZWNpc2lv
bigpKTsKKyAgICBnZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VQcmVjaXNpb24oaGlnaGVzdFByZWNp
c2lvbik7CisKKyAgICAvLworICAgIC8vIEFycmF5IG9wZXJhdGlvbnMuCisgICAgLy8KKyAgICBp
ZiAobGVmdC0+aXNBcnJheSgpKSB7CisKKyAgICAgICAgc3dpdGNoIChvcCkgeworCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5v
dEVxdWFsOgorICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBTZXQgYXJyYXkgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6CisgICAg
ICAgICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0QXJyYXlTaXplKGxlZnQtPmdldFR5cGUo
KS5nZXRBcnJheVNpemUoKSk7CisgICAgICAgICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0
QXJyYXlJbmZvcm1hdGlvblR5cGUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5SW5mb3JtYXRpb25U
eXBlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQWxsIHNjYWxhcnMuICBDb2RlIGFmdGVy
IHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vCisgICAgaWYg
KHNpemUgPT0gMSkgeworCisgICAgICAgIHN3aXRjaCAob3ApIHsKKworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoK
KyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuOgorICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBBbmQgYW5kIE9yIG9wZXJhdGUgb24gY29uZGl0aW9u
YWxzCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAg
ICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJv
b2wpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBz
ZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBlbHNlIHNo
b3VsZCBoYXZlIG1hdGNoaW5nIHR5cGVzCisgICAgICAgICAgICAvLworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQt
PmdldEJhc2ljVHlwZSgpIHx8CisgICAgICAgICAgICAgICAgICAgIGxlZnQtPmlzTWF0cml4KCkg
ICAgICE9IHJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIEFyZSB0aGUgc2l6ZXMgY29tcGF0aWJsZT8KKyAgICAvLworICAgIGlmICggbGVmdC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmICBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEg
fHwKKyAgICAgICAgcmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gc2l6ZSAmJiByaWdodC0+Z2V0
Tm9taW5hbFNpemUoKSAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAg
IC8vIENhbiB0aGVzZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/CisgICAgLy8KKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgaWYgKCFsZWZ0LT5p
c01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNN
YXRyaXg7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wTWF0cml4VGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
dHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYm
ICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0
b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwor
ICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24s
IEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdo
dC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNNYXRy
aXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+
aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJp
Z2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBv
bmVudCBwcm9kdWN0CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3Rvcigp
IHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVj
dG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwg
aGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiTWlzc2luZyBlbHNlcyIsIGdldExp
bmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICAgICAg
aWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
VmVjdG9yVGltZXNNYXRyaXhBc3NpZ247CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNN
YXRyaXgoKSkgeworICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNNYXRyaXhBc3Np
Z247CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+
aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJp
Z2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBv
bmVudCBwcm9kdWN0CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3Rvcigp
IHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ247CisgICAgICAg
ICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVt
cG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiTWlzc2luZyBlbHNlcyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQXNzaWduOgorICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6CisgICAgICAgICAg
ICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBmYWxsIHRocm91
Z2gKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBj
YXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9w
U3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8CisgICAgICAgICAgICAgICAg
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAorICAgICAgICAgICAgICAg
IGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhp
Z2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgbGVmdC0+aXNNYXRyaXgoKSB8fCBy
aWdodC0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBF
T3BFcXVhbDoKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbjoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbkVxdWFsOgorICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAg
ICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAorICAgICAgICAg
ICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKKyAgICAgICAg
ICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAv
LyBPbmUgbW9yZSBjaGVjayBmb3IgYXNzaWdubWVudC4gIFRoZSBSZXN1bHRpbmcgdHlwZSBoYXMg
dG8gbWF0Y2ggdGhlIGxlZnQgb3BlcmFuZC4KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAg
ICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAg
ICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpICE9IGxlZnQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbXBh
cmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRV
bmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sKKyAgICBUVHlwZUxp
c3QqIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgIHNpemVfdCBzdHJ1
Y3RTaXplID0gZmllbGRzLT5zaXplKCk7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgc3RydWN0U2l6ZTsgaisrKSB7CisgICAgICAgIGludCBzaXplID0g
KCpmaWVsZHMpW2pdLnR5cGUtPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgoKmZpZWxkcylbal0udHlwZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb21w
YXJlU3RydWN0dXJlKCooKmZpZWxkcylbal0udHlwZSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0s
ICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25B
cnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb21wYXJl
U3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0
VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpCit7CisgICAgaWYgKGxl
ZnROb2RlVHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgVFR5cGUgdHlwZVdpdGhvdXRBcnJheW5l
c3MgPSBsZWZ0Tm9kZVR5cGU7CisgICAgICAgIHR5cGVXaXRob3V0QXJyYXluZXNzLmNsZWFyQXJy
YXluZXNzKCk7CisKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IGxlZnROb2RlVHlwZS5nZXRBcnJh
eVNpemUoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gdHlwZVdpdGhvdXRBcnJheW5lc3MuZ2V0T2JqZWN0
U2l6ZSgpICogaTsKKyAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdCh0eXBlV2l0aG91dEFy
cmF5bmVzcywgJnJpZ2h0VW5pb25BcnJheVtvZmZzZXRdLCAmbGVmdFVuaW9uQXJyYXlbb2Zmc2V0
XSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIHJldHVybiBDb21wYXJlU3RydWN0KGxlZnROb2RlVHlwZSwgcmlnaHRVbmlvbkFy
cmF5LCBsZWZ0VW5pb25BcnJheSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIFRo
ZSBmb2xkIGZ1bmN0aW9ucyBzZWUgaWYgYW4gb3BlcmF0aW9uIG9uIGEgY29uc3RhbnQgY2FuIGJl
IGRvbmUgaW4gcGxhY2UsCisvLyB3aXRob3V0IGdlbmVyYXRpbmcgcnVuLXRpbWUgY29kZS4KKy8v
CisvLyBSZXR1cm5zIHRoZSBub2RlIHRvIGtlZXAgdXNpbmcsIHdoaWNoIG1heSBvciBtYXkgbm90
IGJlIHRoZSBub2RlIHBhc3NlZCBpbi4KKy8vCisKK1RJbnRlcm1UeXBlZCogVEludGVybUNvbnN0
YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwg
VEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBpbnQgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7CisKKyAgICBpZiAoY29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3Bl
cmF0aW9ucworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9k
ZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5p
b25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIFRUeXBlIHJl
dHVyblR5cGUgPSBnZXRUeXBlKCk7CisKKyAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0
IGYgPSAxLjIgKyB2ZWM0KDIsMyw0LDUpOworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpIHsKKyAgICAgICAg
ICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAg
ICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOworICAgICAgICB9IGVsc2UgaWYg
KGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6
ZSA9PSAxKSB7CisgICAgICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IHZlYzQo
MiwzLDQsNSkgKyAxLjI7CisgICAgICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpXTsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgdW5pb25BcnJheVtpXSA9ICpnZXRVbmlvbkFycmF5
UG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAg
ICAgICAgICAgIG9iamVjdFNpemUgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RT
aXplKCk7CisgICAgICAgIH0KKworICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJh
eSA9IDA7CisgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wTm9kZTsKKworICAgICAg
ICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOworICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAg
ICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5
W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
OgorICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5pb25BcnJheVtpXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0
cml4IG11bHRpcGx5IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpz
aXplXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsg
cm93KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNv
bHVtbiA8IHNpemU7IGNvbHVtbisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1
bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5n
ZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJp
Z2h0VW5pb25BcnJheVtjb2x1bW4gKiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAg
ICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIkRpdmlkZSBi
eSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KEZMVF9NQVgpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtp
XS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5p
bmcsICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIsIGdldExp
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdChJ
TlRfTUFYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdo
dFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZv
ciBcIi9cIiIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNWZWN0b3I6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9
IEVidEZsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9y
IG1hdHJpeCB0aW1lcyB2ZWN0b3IiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsKKworICAgICAgICAgICAg
ICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBz
aXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBD
b25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2oqc2l6ZSArIGldLmdldEZD
b25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtqXS5nZXRGQ29uc3QoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVt
cENvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgdGVtcE5vZGUt
PnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsK
KworICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgICAg
ICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNv
bnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIHZlY3RvciB0aW1lcyBtYXRyaXgiLCBn
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W2dldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgp
ICsgKCh1bmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUg
KyBqXS5nZXRGQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVu
IGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5
CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmpl
Y3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmln
aHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltv
YmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gfHwg
cmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAg
ICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDogdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0
VW5pb25BcnJheVtpXSkgPyBmYWxzZSA6IHRydWUpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNp
emUgPT0gMSk7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlv
bkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgICAg
ICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0
U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5ID4gKnJp
Z2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0
KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9k
ZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAg
ICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAg
ICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKENvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25B
cnJheVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2Yg
Zm9yIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7
CisgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJJ
bnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0ZW1wTm9kZSA9IG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CisgICAgICAg
IHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgcmV0dXJuIHRlbXBOb2Rl
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERvIHVuYXJ5IG9wZXJhdGlv
bnMKKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5ld05vZGUgPSAw
OworICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykgeworICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBF
T3BOZWdhdGl2ZToKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBD
b25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlb
aV0uc2V0SUNvbnN0KC11bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYXJ5IG9wZXJhdGlv
biBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogLy8g
dGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdl
dCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3Qo
KSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50IiwgZ2V0TGluZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25z
dEFycmF5LCBnZXRUeXBlKCkpOworICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7
CisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworfQor
CitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBDb25z
dGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
OworICAgIGludCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKworICAg
IENvbnN0YW50VW5pb24gKmxlZnRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZV07
CisKKyAgICBmb3IgKGludCBpPTA7IGkgPCBzaXplOyBpKyspIHsKKworICAgICAgICBzd2l0Y2gg
KHByb21vdGVUbykgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4ocmlnaHRVbmlvbkFycmF5W2ldLmdl
dElDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9u
QXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJyYXlbaV0u
Z2V0QkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5v
dCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEJDb25z
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29u
c3QoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDYW5ub3QgcHJvbW90ZSIsIG5vZGUtPmdldExpbmUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3QocmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgp
ICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldID0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3QocmlnaHRVbmlvbkFycmF5W2ldLmdldEZD
b25zdCgpICE9IDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDYW5ub3QgcHJvbW90ZSIsIG5vZGUt
PmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCAiSW5jb3JyZWN0IGRhdGEgdHlwZSBmb3VuZCIsIG5vZGUtPmdldExpbmUoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlJiB0ID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24o
bGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRR
dWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgp
KSwgbm9kZS0+Z2V0TGluZSgpKTsKK30KKwordm9pZCBUSW50ZXJtQWdncmVnYXRlOjphZGRUb1By
YWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKQoreworICAgIGFzc2VydCghcHJh
Z21hVGFibGUpOworICAgIHByYWdtYVRhYmxlID0gbmV3IFRQcmFnbWFUYWJsZSgpOworICAgICpw
cmFnbWFUYWJsZSA9IHBUYWJsZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvY29tcGlsZXIvTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9MaW5rLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvTGluay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGUgdG9wIGxldmVs
IGFsZ29yaXRobXMgZm9yIGxpbmtpbmcgbXVsdGlwbGUKKy8vIHNoYWRlcnMgdG9nZXRoZXIuCisv
LworI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFu
ZGxlLmgiCisKKy8vCisvLyBBY3R1YWwgbGluayBvYmplY3QsIGRlcml2ZWQgZnJvbSB0aGUgc2hh
ZGVyIGhhbmRsZSBiYXNlIGNsYXNzZXMuCisvLworY2xhc3MgVEdlbmVyaWNMaW5rZXIgOiBwdWJs
aWMgVExpbmtlciB7CitwdWJsaWM6CisgICAgVEdlbmVyaWNMaW5rZXIoRVNoRXhlY3V0YWJsZSBl
LCBpbnQgZE9wdGlvbnMpIDogVExpbmtlcihlKSwgZGVidWdPcHRpb25zKGRPcHRpb25zKSB7IH0K
KyAgICBib29sIGxpbmsoVENvbXBpbGVyTGlzdCYsIFRVbmlmb3JtTWFwKikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgZ2V0QXR0cmlidXRlQmluZGluZ3MoU2hCaW5kaW5nVGFibGUgY29uc3Qg
Kip0KSBjb25zdCB7IH0KKyAgICBpbnQgZGVidWdPcHRpb25zOworfTsKKworLy8KKy8vIFRoZSBp
bnRlcm5hbCB2aWV3IG9mIGEgdW5pZm9ybS9mbG9hdCBvYmplY3QgZXhjaGFuZ2VkIHdpdGggdGhl
IGRyaXZlci4KKy8vCitjbGFzcyBUVW5pZm9ybUxpbmtlZE1hcCA6IHB1YmxpYyBUVW5pZm9ybU1h
cCB7CitwdWJsaWM6CisgICAgVFVuaWZvcm1MaW5rZWRNYXAoKSB7IH0KKyAgICB2aXJ0dWFsIGlu
dCBnZXRMb2NhdGlvbihjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9Cit9OworCitUU2hI
YW5kbGVCYXNlKiBDb25zdHJ1Y3RMaW5rZXIoRVNoRXhlY3V0YWJsZSBleGVjdXRhYmxlLCBpbnQg
ZGVidWdPcHRpb25zKQoreworICAgIHJldHVybiBuZXcgVEdlbmVyaWNMaW5rZXIoZXhlY3V0YWJs
ZSwgZGVidWdPcHRpb25zKTsKK30KKwordm9pZCBEZWxldGVMaW5rZXIoVFNoSGFuZGxlQmFzZSog
bGlua2VyKQoreworICAgIGRlbGV0ZSBsaW5rZXI7Cit9CisKK1RVbmlmb3JtTWFwKiBDb25zdHJ1
Y3RVbmlmb3JtTWFwKCkKK3sKKyAgICByZXR1cm4gbmV3IFRVbmlmb3JtTGlua2VkTWFwKCk7Cit9
CisKK3ZvaWQgRGVsZXRlVW5pZm9ybU1hcChUVW5pZm9ybU1hcCogbWFwKQoreworICAgIGRlbGV0
ZSBtYXA7Cit9CisKK1RTaEhhbmRsZUJhc2UqIENvbnN0cnVjdEJpbmRpbmdzKCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBEZWxldGVCaW5kaW5nTGlzdChUU2hIYW5kbGVCYXNlKiBiaW5k
aW5nTGlzdCkKK3sKKyAgICBkZWxldGUgYmluZGluZ0xpc3Q7Cit9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL01NYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL01NYXAuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvTU1hcC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9N
TUFQX0lOQ0xVREVEXworI2RlZmluZSBfTU1BUF9JTkNMVURFRF8KKworLy8KKy8vIEVuY2Fwc3Vs
YXRlIG1lbW9yeSBtYXBwZWQgZmlsZXMKKy8vCisKK2NsYXNzIFRNTWFwIHsKK3B1YmxpYzoKKyAg
ICBUTU1hcChjb25zdCBjaGFyKiBmaWxlTmFtZSkgOiAKKyAgICAgICAgZlNpemUoLTEpLCAvLyAt
MSBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgR2V0RmlsZVNpemUoKQorICAgICAgICBm
cChOVUxMKSwKKyAgICAgICAgZkJ1ZmYoMCkgICAvLyAwIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1
cm5lZCBieSBNYXBWaWV3T2ZGaWxlKCkKKyAgICB7CisgICAgICAgIGlmICgoZnAgPSBmb3Blbihm
aWxlTmFtZSwgInIiKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2hh
ciBjID0gZ2V0YyhmcCk7CisgICAgICAgIGZTaXplID0gMDsKKyAgICAgICAgd2hpbGUgKGMgIT0g
RU9GKSB7CisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAgICAgICAgYyA9IGdldGMoZnApOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjID09IEVPRikKKyAgICAgICAgICAgIGZTaXplKys7Cisg
ICAgICAgIHJld2luZChmcCk7CisgICAgICAgIGZCdWZmID0gKGNoYXIqKW1hbGxvYyhzaXplb2Yo
Y2hhcikgKiBmU2l6ZSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGMgPSBnZXRj
KGZwKTsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7CisgICAgICAgICAgICBmQnVmZltjb3Vu
dCsrXSA9IGM7CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAg
ZkJ1ZmZbY291bnQrK10gPSBjOworICAgIH0KKworICAgIGNoYXIqIGdldERhdGEoKSB7IHJldHVy
biBmQnVmZjsgfQorICAgIGludCAgIGdldFNpemUoKSB7IHJldHVybiBmU2l6ZTsgfQorCisgICAg
flRNTWFwKCkgeworICAgICAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgICAgIGZjbG9zZShm
cCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgICAgICAgICAgICAgZlNpemU7ICAg
ICAgLy8gc2l6ZSBvZiBmaWxlIHRvIG1hcCBpbgorICAgIEZJTEUgKmZwOworICAgIGNoYXIqICAg
ICAgICAgICBmQnVmZjsgICAgICAvLyB0aGUgYWN0dWFsIGRhdGE7Cit9OworCisjZW5kaWYgLy8g
X01NQVBfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCitu
YW1lc3BhY2UKK3sKK1RTdHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAibWF0IjsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUo
KTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
IG91dCA8PCAiaXZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiBvdXQgPDwg
ImJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgfQor
ICAgIHJldHVybiBUU3RyaW5nKG91dC5jX3N0cigpKTsKK30KKworVFN0cmluZyBhcnJheUJyYWNr
ZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7Cisg
ICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgb3V0IDw8ICJbIiA8PCB0eXBlLmdldEFycmF5U2l6
ZSgpIDw8ICJdIjsKKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Cit9CisKK2Jvb2wg
aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBpZiAoY29uc3QgVElu
dGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1bmN0aW9uKSAmJgor
ICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5jZSk7CisgICAg
fQorICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5vZGUt
PmdldEFzU2VsZWN0aW9uTm9kZSgpKQorICAgIHsKKyAgICAgICAgLy8gVGVybmFyeSBvcGVyYXRv
cnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICAv
LyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5IGFyZSBhbGwgYnkg
dGhlbXNlbHZlcy4KKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rlcm5hcnlPcGVyYXRv
cigpOworICAgIH0KKyAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2RlKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorfSAgLy8g
bmFtZXNwYWNlCisKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpT
aW5rKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgIG1P
YmpTaW5rKG9ialNpbmspLAorICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKK3sKK30K
Kwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFy
KiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKQoreworICAg
IFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQgJiYgcHJlU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHByZVN0cjsKKyAgICB9CisgICAg
ZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAmJiBpblN0cikKKyAgICB7CisgICAgICAgIG91dCA8
PCBpblN0cjsKKyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0ICYmIHBvc3RT
dHIpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cjsKKyAgICB9Cit9CisKK3ZvaWQgVE91
dHB1dEdMU0w6OndyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9
IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxp
ZmllciBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9IEV2
cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQgPDwg
dHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAvLyBEZWNsYXJlIHRoZSBz
dHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgorICAgIGlmICgodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmCisgICAgICAgIChtRGVjbGFyZWRTdHJ1Y3RzLmZp
bmQodHlwZS5nZXRUeXBlTmFtZSgpKSA9PSBtRGVjbGFyZWRTdHJ1Y3RzLmVuZCgpKSkKKyAgICB7
CisgICAgICAgIG91dCA8PCAic3RydWN0ICIgPDwgdHlwZS5nZXRUeXBlTmFtZSgpIDw8ICJ7XG4i
OworICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7
CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworICAgICAg
ICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAgICAgICAgIG91dCA8PCBnZXRU
eXBlTmFtZSgqZmllbGRUeXBlKSA8PCAiICIgPDwgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsK
KyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICBv
dXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIn0iOworICAgICAgICBtRGVjbGFyZWRTdHJ1
Y3RzLmluc2VydCh0eXBlLmdldFR5cGVOYW1lKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7CisgICAgfQorfQorCit2b2lkIFRPdXRw
dXRHTFNMOjp3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFy
Z3MpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAoVElu
dGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSBhcmdzLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBUSW50
ZXJtU3ltYm9sKiBhcmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNT
RVJUKGFyZyAhPSBOVUxMKTsKKworICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0
VHlwZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVy
KCk7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIGZ1bmN0
aW9uIGFyZ3VtZW50cy4KKyAgICAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAm
JiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkpCisgICAgICAgICAgICBvdXQgPDwgdHlwZS5nZXRR
dWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5
cGUpOworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwor
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgICAgICAgICAgb3V0IDw8IGFycmF5
QnJhY2tldHModHlwZSk7CisKKyAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhpcyBpcyBub3Qg
dGhlIGxhc3QgYXJndW1lbnQuCisgICAgICAgIGlmIChpdGVyICE9IC0tYXJncy5lbmQoKSkKKyAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29uc3RhbnRVbmlvbiog
VE91dHB1dEdMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29u
c3RhbnRVbmlvbiogcENvbnN0VW5pb24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2Jq
U2luaygpOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAg
IHsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7CisgICAgICAgIGNv
bnN0IFRUeXBlTGlzdCogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dHJ1Y3R1cmUtPnNpemUoKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlw
ZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAgICAgICBBU1NFUlQo
ZmllbGRUeXBlICE9IE5VTEwpOworICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0
YW50VW5pb24oKmZpZWxkVHlwZSwgcENvbnN0VW5pb24pOworICAgICAgICAgICAgaWYgKGkgIT0g
c3RydWN0dXJlLT5zaXplKCkgLSAxKSBvdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBv
dXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IHR5
cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOwor
ICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBwQ29uc3RV
bmlvbi0+Z2V0RkNvbnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBv
dXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgcmV0dXJuIHBDb25zdFVu
aW9uOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBvdXQgPDwg
bm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBub2Rl
LT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhub2Rl
LT5nZXRUeXBlKCkpOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9uKG5v
ZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wg
VE91dHB1dEdMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2Rl
KQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgVEluZm9TaW5rQmFzZSYg
b3V0ID0gb2JqU2luaygpOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAg
ICAgICAgICAvLyBSSFMgb2YgaW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisgICAg
ICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICIoIiwgIiA9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wU3ViQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7IGJyZWFrOworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhy
b3VnaC4KKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246IAorICAgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNz
aWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBj
YXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAg
ICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAg
ICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIi4iOworICAgICAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBBU1NFUlQKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworICAgICAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgICAgICBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIi4iOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQgPSBu
b2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIFRJbnRl
cm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdodENoaWxkLT5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5i
ZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0KQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAoKnNp
dCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpWzBdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0gRWJ0
SW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLmdldElDb25zdCgpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8
PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInki
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEVxdWFsOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAi
IDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRo
cm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6
CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAq
ICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29s
IFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUp
Cit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKC0iLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0
b3JMb2dpY2FsTm90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3QoIiwgTlVMTCwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCEi
LCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiKyspIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFBvc3REZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiLS0pIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCsrIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLS0iLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29s
OgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMz
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYnZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAgY2FzZSBFT3BDb252
SW50VG9GbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
YXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7ICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgTlVM
TCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJ2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgp
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigi
LCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIml2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogd3JpdGVUcmlwbGV0
KHZpc2l0LCAicmFkaWFucygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BE
ZWdyZWVzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAic2luKCIsIE5VTEws
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
Y29zKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAidGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFz
aW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImFzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQWNvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhdGFu
KCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJleHAoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9n
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2coIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wRXhwMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2cyKCIs
IE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgInNxcnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJz
ZVNxcnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludmVyc2VzcXJ0KCIsIE5VTEwsICIpIik7IGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhYnMoIiwg
TlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lnbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAic2lnbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ2VpbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZnJhY3Qo
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImxlbmd0aCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BOb3JtYWxpemU6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCBOVUxMLCAiKSIp
OyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYW55
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiYWxsKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFRPdXRwdXRHTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBp
ZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIo
IjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIikgPyAoIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29u
ZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilcbiI7CisKKyAgICAg
ICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0VHJ1
ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgICAgIHZpc2l0Q29kZUJs
b2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisgICAgICAgIH0KKyAgICAgICAgZGVjcmVtZW50
RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNM
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sK
KyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBj
YXNlIEVPcFNlcXVlbmNlOiB7CisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4
Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVwdGggPiAw
KSBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgICAg
ICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBzZXF1ZW5jZS5l
bmQoKTsgKytpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
KiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
O1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAg
ICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2Jh
bCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxuIjsKKyAgICAg
ICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlv
biBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7Cisg
ICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShub2RlLT5nZXRUeXBl
KCkpOworICAgICAgICAgICAgb3V0IDw8IHJldHVyblR5cGUgPDwgIiAiIDw8IG5vZGUtPmdldE5h
bWUoKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIHdyaXRlRnVuY3Rp
b25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAgICAg
Ly8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVW
aXNpdCk7CisgICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShub2Rl
LT5nZXRUeXBlKCkpOworICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVuY3Rp
b246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgb3V0IDw8IHJl
dHVyblR5cGUgPDwgIiAiIDw8IGZ1bmN0aW9uTmFtZTsKKworICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCisgICAgICAgICAgICAvLyByZXByZXNlbnRpbmcg
ZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgZnVuY3Rpb24gYm9keS4gVGhlIGxhdHRlcgorICAgICAg
ICAgICAgLy8gaXMgbm90IHByZXNlbnQgaW4gY2FzZSBvZiBlbXB0eSBmdW5jdGlvbiBib2RpZXMu
CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8
IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlOjpj
b25zdF9pdGVyYXRvciBzZXFJdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKworICAgICAgICAgICAg
Ly8gVHJhdmVyc2UgZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAg
ICBBU1NFUlQocGFyYW1zICE9IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtcy0+Z2V0
T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHBhcmFtcy0+dHJhdmVyc2UodGhp
cyk7CisKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIGJvZHkuCisgICAgICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlKiBib2R5ID0gKytzZXFJdGVyICE9IHNlcXVlbmNlLmVuZCgpID8K
KyAgICAgICAgICAgICAgICAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogTlVMTDsKKyAg
ICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKGJvZHkpOworICAgICAgICAgICAgZGVjcmVtZW50RGVw
dGgoKTsKKyAKKyAgICAgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZDsgbm8gbmVlZCB0byB2aXNp
dCBjaGlsZHJlbi4KKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAg
ICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVW
aXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGZ1bmN0aW9uTmFt
ZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7CisgICAgICAg
ICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09
IFByZVZpc2l0KTsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB3cml0ZUZ1
bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAgIG91dCA8
PCAiKSI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAg
ICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2Vx
dWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBl
ZCgpOworICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlhYmxlLT5nZXRUeXBl
KCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgbURlY2xh
cmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiLCAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogd3JpdGVUcmlwbGV0
KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJv
b2woIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMygiLCAi
LCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZl
YzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0Mjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIsICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0gbm9kZS0+Z2V0VHlw
ZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZXNzVGhhbigiLCAiLCAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiZ3JlYXRlclRoYW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW5FcXVhbCgiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJncmVhdGVyVGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFZlY3RvckVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJlcXVhbCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAibm90RXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29tbWE6IHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wTW9kOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiB3cml0ZVRyaXBsZXQodmlzaXQsICJw
b3coIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYXRhbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BN
aW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNYXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2xhbXAo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJtaXgoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3RlcDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTbW9vdGhTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzbW9vdGhzdGVwKCIsICIs
ICIsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cERvdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENyb3NzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
UmVmbGVjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZWZyYWN0
KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAibWF0cml4Q29tcE11bHQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB2aXNpdENo
aWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsK
KworICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgLy8gTG9vcCBoZWFkZXIuCisgICAgaWYgKG5v
ZGUtPnRlc3RGaXJzdCgpKSAgLy8gZm9yIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAiZm9y
ICgiOworICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICAgICAgbm9kZS0+Z2V0
SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAg
QVNTRVJUKG5vZGUtPmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5v
ZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgIH0KKyAgICBlbHNlICAvLyBk
by13aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgImRvXG4iOworICAgIH0KKworICAg
IC8vIExvb3AgYm9keS4KKyAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOworCisg
ICAgLy8gTG9vcCBmb290ZXIuCisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIHdoaWxl
IGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUgKCI7CisgICAgICAgIEFTU0VSVChu
b2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVudERl
cHRoKCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVl
biBhbHJlYWR5IHByb2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwg
VEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5r
KCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBFT3BLaWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVhayIs
IE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiY29udGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wUmV0dXJuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7IGJy
ZWFrOworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRDb2RlQmxvY2soVElu
dGVybU5vZGUqIG5vZGUpIHsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7Cisg
ICAgaWYgKG5vZGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVlbmNlIG5l
ZWQgdG8gYmUgdGVybWluYXRlZAorICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCisgICAgICAg
IGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8gRW1w
dHkgY29kZSBibG9jay4KKyAgICB9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL2NvbXBpbGVyL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL091dHB1dEdMU0wuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvT3V0cHV0R0xTTC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdM
U0xfT1VUUFVUR0xTTF9IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworY2xh
c3MgVE91dHB1dEdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAg
IFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworCitwcm90ZWN0ZWQ6CisgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CisgICAgdm9pZCB3
cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciog
aW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpOworICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5cGUo
Y29uc3QgVFR5cGUmIHR5cGUpOworICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29u
c3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uKiB3cml0
ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24qIHBD
b25zdFVuaW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBub2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25z
dGFudFVuaW9uKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSk7CisgICAgdmlydHVh
bCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2Rl
KTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCog
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QnJhbmNoKiBub2RlKTsKKworICAgIHZvaWQgdmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5v
ZGUpOworCitwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOworICAgIGJvb2wg
bURlY2xhcmluZ1ZhcmlhYmxlczsKKworICAgIC8vIFN0cnVjdHMgYXJlIGRlY2xhcmVkIGFzIHRo
ZSB0cmVlIGlzIHRyYXZlcnNlZC4gVGhpcyBzZXQgY29udGFpbnMgYWxsCisgICAgLy8gdGhlIHN0
cnVjdHMgYWxyZWFkeSBkZWNsYXJlZC4gSXQgaXMgbWFpbnRhaW5lZCBzbyB0aGF0IGEgc3RydWN0
IGlzCisgICAgLy8gZGVjbGFyZWQgb25seSBvbmNlLgorICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0
cmluZz4gRGVjbGFyZWRTdHJ1Y3RzOworICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1
Y3RzOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGls
ZXIvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIxNTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRI
TFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBzaAoreworLy8gSW50ZWdlciB0byBUU3RyaW5n
IGNvbnZlcnNpb24KK1RTdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsK
KyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwor
T3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpCit7CisgICAgbVVu
Zm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRTZWxlY3QoY29udGV4dCwgdGhpcyk7CisgICAgbUluc2lk
ZUZ1bmN0aW9uID0gZmFsc2U7CisKKyAgICBtVXNlc1RleHR1cmUyRCA9IGZhbHNlOworICAgIG1V
c2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2ogPSBmYWxz
ZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKKyAgICBt
VXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOworICAg
IG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOworICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsK
KyAgICBtVXNlc1BvaW50U2l6ZSA9IGZhbHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7CisgICAg
bVVzZXNNb2QxID0gZmFsc2U7CisgICAgbVVzZXNNb2QyID0gZmFsc2U7CisgICAgbVVzZXNNb2Qz
ID0gZmFsc2U7CisgICAgbVVzZXNNb2Q0ID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDEg
PSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZv
cndhcmQzID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKKyAgICBtVXNl
c0VxdWFsTWF0MiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxNYXQzID0gZmFsc2U7CisgICAgbVVz
ZXNFcXVhbE1hdDQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjMiA9IGZhbHNlOworICAgIG1V
c2VzRXF1YWxWZWMzID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbFZlYzQgPSBmYWxzZTsKKyAgICBt
VXNlc0VxdWFsSVZlYzIgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsSVZlYzMgPSBmYWxzZTsKKyAg
ICBtVXNlc0VxdWFsSVZlYzQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzIgPSBmYWxzZTsK
KyAgICBtVXNlc0VxdWFsQlZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzQgPSBmYWxz
ZTsKKyAgICBtVXNlc0F0YW4yID0gZmFsc2U7CisKKyAgICBtU2NvcGVEZXB0aCA9IDA7CisKKyAg
ICBtQXJndW1lbnRJbmRleCA9IDA7Cit9CisKK091dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKK3sK
KyAgICBkZWxldGUgbVVuZm9sZFNlbGVjdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpvdXRwdXQo
KQoreworICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQg
dGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBoZWFkZXIK
KyAgICBoZWFkZXIoKTsKKworICAgIG1Db250ZXh0LmluZm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNf
c3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1Cb2R5LmNfc3RyKCk7Cit9CisK
K1RJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQoreworICAgIHJldHVy
biBtQm9keTsKK30KKworaW50IE91dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5
cGUpIGNvbnN0Cit7CisgICAgaW50IGVsZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgpID8gdHlw
ZS5nZXROb21pbmFsU2l6ZSgpIDogMTsKKyAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5
KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKworICAgIHJldHVybiBlbGVtZW50U2l6ZSAq
IGFycmF5U2l6ZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQoreworICAgIEVTaExh
bmd1YWdlIGxhbmd1YWdlID0gbUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gbUhlYWRlcjsKKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBz
dHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVj
bGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24r
KykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgfQorCisg
ICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9y
cy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3Rv
cisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICBp
ZiAobGFuZ3VhZ2UgPT0gRVNoTGFuZ0ZyYWdtZW50KQorICAgIHsKKyAgICAgICAgVFN0cmluZyB1
bmlmb3JtczsKKyAgICAgICAgVFN0cmluZyB2YXJ5aW5nczsKKworICAgICAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7
CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKworICAgICAgICBmb3IgKFRTeW1ib2xU
YWJsZUxldmVsOjpjb25zdF9pdGVyYXRvciBuYW1lZFN5bWJvbCA9IHN5bWJvbHMtPmJlZ2luKCk7
IG5hbWVkU3ltYm9sICE9IHN5bWJvbHMtPmVuZCgpOyBuYW1lZFN5bWJvbCsrKQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wgPSAoKm5hbWVkU3ltYm9sKS5zZWNv
bmQ7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gc3ltYm9sLT5nZXROYW1lKCk7
CisKKyAgICAgICAgICAgIGlmIChzeW1ib2wtPmlzVmFyaWFibGUoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IHZhcmlhYmxlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOworCisgICAgICAgICAgICAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFVbmlmb3JtKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1SZWZlcmVuY2VkVW5pZm9ybXMuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZl
cmVuY2VkVW5pZm9ybXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsg
IiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICI7XG4iOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFu
dFZhcnlpbmdJbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
UmVmZXJlbmNlZFZhcnlpbmdzLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFZhcnlp
bmdzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBl
KSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGlu
aXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFu
dGljSW5kZXggKz0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFUZW1wb3Jh
cnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWxzIGFy
ZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDb25zdGFudHMgYXJl
IHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5
aW5nczsKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0
IGdsX0NvbG9yWzFdID0ge2Zsb2F0NCgwLCAwLCAwLCAwKX07XG4iOworCisgICAgICAgIGlmICht
VXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxv
YXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7
CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNG
cmFnQ29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQg
ZHhfV2luZG93O1xuIgorICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGZsb2F0MiBkeF9EZXB0
aDtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGJvb2wgZHhfUG9pbnRzT3JMaW5lcztc
biIKKyAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBib29sIGR4X0Zyb250Q0NXO1xuIjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgIG91dCA8PCAg
dW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
KHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgorICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtVXNlc1RleHR1cmUyRF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFz
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEcHJvaihzLCB0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9q
X2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMs
IGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFz
KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMs
IGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxu
IgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlQ3ViZV9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgICAvLyBWZXJ0ZXggc2hhZGVyCisgICAgeworICAgICAgICBUU3RyaW5n
IHVuaWZvcm1zOworICAgICAgICBUU3RyaW5nIGF0dHJpYnV0ZXM7CisgICAgICAgIFRTdHJpbmcg
dmFyeWluZ3M7CisKKyAgICAgICAgVFN5bWJvbFRhYmxlTGV2ZWwgKnN5bWJvbHMgPSBtQ29udGV4
dC5zeW1ib2xUYWJsZS5nZXRHbG9iYWxMZXZlbCgpOworCisgICAgICAgIGZvciAoVFN5bWJvbFRh
YmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVnaW4oKTsg
bmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wpLnNlY29u
ZDsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5hbWUoKTsK
KworICAgICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1
YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAocXVh
bGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVy
ZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkgKyAi
ICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZmluZChuYW1lLmNfc3RyKCkp
ICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3Ry
aW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIg
PSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0g
RXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFZhcnlp
bmdzLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIGxp
bmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29y
YXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUp
ICsgIjtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUdsb2JhbCB8fCBxdWFsaWZpZXIg
PT0gRXZxVGVtcG9yYXJ5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gR2xvYmFscyBhcmUgZGVjbGFyZWQgYW5kIGludGlhbGl6ZWQgYXMgYW4gYWdncmVnYXRlIG5v
ZGUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVy
ID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
Q29uc3RhbnRzIGFyZSByZXBlYXRlZCBhcyBsaXRlcmFscyB3aGVyZSB1c2VkCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiLy8gQXR0cmlidXRlc1xuIjsKKyAgICAg
ICAgb3V0IDw8ICBhdHRyaWJ1dGVzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdDQgZ2xfUG9zaXRpb24gPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4iOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1Vc2VzUG9pbnRTaXplKQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9Qb2ludFNpemUgPSBmbG9hdCgxKTtcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIi8vIFZhcnlp
bmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIgor
ICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4X0hhbGZQaXhlbFNpemU7XG4iCisgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOworICAgICAgICBvdXQg
PDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPT1JEXG4iOworICAgIH0KKworICAgIGlm
IChtVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNF
U19QT0lOVF9DT09SRFxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAg
ICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lOR1xuIjsKKyAg
ICB9CisKKyAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgeworICAgICAgICBvdXQgPDwgIiNk
ZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpFXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0RlcHRo
UmFuZ2UpCisgICAgeworICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1l
dGVyc1xuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgZmxvYXQg
bmVhcjtcbiIKKyAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBkaWZmO1xuIgorICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFyYW1ldGVy
cyBnbF9EZXB0aFJhbmdlO1xuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBp
ZiAobVVzZXNYb3IpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgeG9yKGJvb2wgcCwgYm9v
bCBxKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IChwIHx8IHEpICYmICEocCAmJiBxKTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDEpCisgICAgeworICAgICAg
ICBvdXQgPDwgImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xu
IgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorICAg
IAorICAgIGlmIChtVXNlc01vZDIpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBtb2Qo
ZmxvYXQyIHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisgICAgCisgICAgaWYgKG1Vc2VzTW9k
MykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQgeSlc
biIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0g
eSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDQpCisgICAgeworICAgICAgICBvdXQg
PDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBp
ZiAobVVzZXNGYWNlZm9yd2FyZDEpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGZhY2Vm
b3J3YXJkKGZsb2F0IE4sIGZsb2F0IEksIGZsb2F0IE5yZWYpXG4iCisgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAg
ICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xu
IgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIK
KyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJu
IE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMikK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIGZhY2Vmb3J3YXJkKGZsb2F0MiBOLCBmbG9h
dDIgSSwgZmxvYXQyIE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xu
IgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAg
IiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIg
ICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAg
ICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMykKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZmxvYXQzIGZhY2Vmb3J3YXJkKGZsb2F0MyBOLCBmbG9hdDMgSSwgZmxvYXQzIE5yZWYp
XG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJl
ZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAg
IiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAg
ICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlm
IChtVXNlc0ZhY2Vmb3J3YXJkNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQ0IGZhY2Vm
b3J3YXJkKGZsb2F0NCBOLCBmbG9hdDQgSSwgZmxvYXQ0IE5yZWYpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAg
ICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1O
O1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2Vc
biIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0
dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsTWF0MikK
KyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDJ4MiBtLCBmbG9hdDJ4MiBu
KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG1b
MF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiZcbiIKKyAgICAgICAgICAg
ICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsxXVswXSAmJiBtWzFdWzFdID09IG5bMV1bMV07
XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbE1h
dDMpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQzeDMgbSwgZmxvYXQz
eDMgbilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVy
biBtWzBdWzBdID09IG5bMF1bMF0gJiYgbVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0g
blswXVsyXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFd
WzBdICYmIG1bMV1bMV0gPT0gblsxXVsxXSAmJiBtWzFdWzJdID09IG5bMV1bMl0gJiZcbiIKKyAg
ICAgICAgICAgICAgICIgICAgICAgICAgIG1bMl1bMF0gPT0gblsyXVswXSAmJiBtWzJdWzFdID09
IG5bMl1bMV0gJiYgbVsyXVsyXSA9PSBuWzJdWzJdO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7
CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxNYXQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJib29sIGVxdWFsKGZsb2F0NHg0IG0sIGZsb2F0NHg0IG4pXG4iCisgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbVswXVswXSA9PSBuWzBdWzBdICYmIG1b
MF1bMV0gPT0gblswXVsxXSAmJiBtWzBdWzJdID09IG5bMF1bMl0gJiYgbVswXVszXSA9PSBuWzBd
WzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09IG5bMV1bMF0g
JiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJiBtWzFdWzNdID09
IG5bMV1bM10gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMl1bMF0gPT0gblsy
XVswXSAmJiBtWzJdWzFdID09IG5bMl1bMV0gJiYgbVsyXVsyXSA9PSBuWzJdWzJdICYmIG1bMl1b
M10gPT0gblsyXVszXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVszXVswXSA9
PSBuWzNdWzBdICYmIG1bM11bMV0gPT0gblszXVsxXSAmJiBtWzNdWzJdID09IG5bM11bMl0gJiYg
bVszXVszXSA9PSBuWzNdWzNdO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzRXF1YWxWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFs
KGZsb2F0MiB2LCBmbG9hdDIgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1Lnk7XG4iCisgICAgICAgICAg
ICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzMpCisgICAgeworICAg
ICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQzIHYsIGZsb2F0MyB1KVxuIgorICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55
ID09IHUueSAmJiB2LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQor
CisgICAgaWYgKG1Vc2VzRXF1YWxWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVx
dWFsKGZsb2F0NCB2LCBmbG9hdDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUu
eiAmJiB2LncgPT0gdS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzRXF1YWxJVmVjMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChp
bnQyIHYsIGludDIgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1Lnk7XG4iCisgICAgICAgICAgICAgICAi
fVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbElWZWMzKQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJib29sIGVxdWFsKGludDMgdiwgaW50MyB1KVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAm
JiB2LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYg
KG1Vc2VzRXF1YWxJVmVjNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChpbnQ0
IHYsIGludDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0g
dS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1
YWxCVmVjMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sMiB2LCBib29s
MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAg
IH0KKworICAgIGlmIChtVXNlc0VxdWFsQlZlYzMpCisgICAgeworICAgICAgICBvdXQgPDwgImJv
b2wgZXF1YWwoYm9vbDMgdiwgYm9vbDMgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09
IHUuejtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Vx
dWFsQlZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoYm9vbDQgdiwgYm9v
bDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVy
biB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0gdS53O1xu
IgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjIpCisg
ICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGF0YW55eChmbG9hdCB5LCBmbG9hdCB4KVxuIgor
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeCA9PSAwICYmIHkg
PT0gMCkgeCA9IDE7XG4iICAgLy8gQXZvaWQgcHJvZHVjaW5nIGEgTmFOCisgICAgICAgICAgICAg
ICAiICAgIHJldHVybiBhdGFuMih5LCB4KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAg
IH0KK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2Rl
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgVFN0cmluZyBuYW1l
ID0gbm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0iOworICAgIH0KKyAgICBlbHNlIGlm
IChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAgeworICAgICAgICBvdXQgPDwgImdsX0NvbG9y
IjsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisgICAgewor
ICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAg
ICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKyAgICB7CisgICAgICAg
IG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJvbnRG
YWNpbmcgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfUG9pbnRTaXplIikKKyAgICB7CisgICAgICAgIG1Vc2VzUG9pbnRTaXplID0g
dHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7CisKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBt
UmVmZXJlbmNlZFVuaWZvcm1zLmluc2VydChuYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZWZlcmVuY2VkQXR0cmlidXRlcy5pbnNlcnQobmFtZS5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFs
aWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWlu
Z0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3MuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7CisgICAgfQorfQorCitib29s
IE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2Rl
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2Rl
LT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIiLCAiID0gIiwgIiIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAi
KSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNTY2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAi
LCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJB
c3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIoIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7
CisgICAgICAgICAgICBvdXQgPDwgIiA9IG11bCgiOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVm
dCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiLCB0cmFuc3Bvc2UoIjsg
ICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAiKSkpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9IG11
bCgiOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgICAgIG91dCA8PCAiLCAiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICIpKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBpZiAodmlzaXQgPT0g
SW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5
cGUoKS5nZXRGaWVsZE5hbWUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAg
ICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIu
IjsKKworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJp
Z2h0KCktPmdldEFzQWdncmVnYXRlKCk7CisKKyAgICAgICAgICAgIGlmIChzd2l6emxlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBz
d2l6emxlLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5l
bmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpID0gZWxlbWVudC0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAwOiBvdXQgPDwgIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG91dCA8PCAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQg
PDwgInciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1Yjog
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVh
azsKKyAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiAqICIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICBj
YXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYgKG5vZGUt
PmdldExlZnQoKS0+aXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUt
PmdldE9wKCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFs
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIhKCI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAq
ZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLT5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVs
ZHMpW2ldLnR5cGU7CisKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxk
TmFtZSgpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZp
ZWxkTmFtZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+
Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMiAq
IDI6IG1Vc2VzRXF1YWxNYXQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IDMgKiAzOiBtVXNlc0VxdWFsTWF0MyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSA0ICogNDogbVVzZXNFcXVhbE1hdDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5n
ZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+
Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBtVXNlc0VxdWFsVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogbVVzZXNFcXVhbFZlYzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG1Vc2VzRXF1YWxWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
SW50OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OiBtVXNlc0VxdWFsSVZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6IG1Vc2VzRXF1YWxJVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogbVVzZXNFcXVhbElWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldFNpemUo
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
bVVzZXNFcXVhbEJWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiBtVXNlc0VxdWFsQlZlYzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG1Vc2VzRXF1YWxCVmVjNCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0g
RU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImVxdWFsKCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IiFlcXVhbCgiLCAiLCAiLCAiKSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPD0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OiAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICBicmVhazsKKyAgICAg
IGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAq
ICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFu
c3Bvc2UoIiwgIikpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjog
b3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFr
OworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwg
InRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVh
azsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Cisg
ICAgICAgIG1Vc2VzWG9yID0gdHJ1ZTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhv
cigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFu
ZDogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1V
bmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBj
YXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAi
KSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3RJbmNy
ZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiIsICItLSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZGbG9h
dFRvQm9vbDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
MjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIiki
KTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9v
bDQoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9h
dDoKKyAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIp
OyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxv
YXQyKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmbG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9J
bnQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImludCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAg
IGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFr
OworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIs
ICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BEZWdyZWVzOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAi
IiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvczogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIp
Iik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQXNpbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIp
Iik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BBdGFuOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIiki
KTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExvZzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
TG9nMjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJzcXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJ
bnZlcnNlU3FydDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImFicygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNp
Z246ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZmxvb3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ2Vp
bDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZW5n
dGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7CisvLyAgICBjYXNlIEVPcERQZHg6
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAg
IGJyZWFrOworLy8gICAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZGR5KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRU9wRndpZHRo
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAg
YnJlYWs7ICAgICAgICAKKyAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImFueSgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEFsbDogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBFU2hMYW5ndWFnZSBsYW5n
dWFnZSA9IG1Db250ZXh0Lmxhbmd1YWdlOworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wU2Vx
dWVuY2U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICAg
ICAgbVNjb3BlRGVwdGgrKzsKKworICAgICAgICAgICAgICAgIGlmIChtU2NvcGVCcmFja2V0LnNp
emUoKSA8IG1TY29wZURlcHRoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2soMCk7ICAgLy8gTmV3IHNjb3BlIGxldmVsCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXRbbVNjb3BlRGVwdGggLSAxXSsrOyAgIC8v
IE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZlbAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9
IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0ICE9IG5vZGUtPmdldFNlcXVlbmNlKCku
ZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpc1Npbmds
ZVN0YXRlbWVudCgqc2l0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSW5zaWRlRnVu
Y3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisg
ICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgor
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAg
ICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgICAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKHZhcmlhYmxl
ICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxl
LT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5
cGUoKSwgc2NvcGVkU3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5V
TEwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUt
PmdldEFzU3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3lt
Ym9sKCkgIT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJp
bmcodmFyaWFibGUtPmdldFR5cGUoKSkgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAh
PSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1i
b2xOb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlT
dHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCAmJiB0aGlzLT5pblZpc2l0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNl
LmJhY2soKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2l0ID0gdGhpcy0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZp
c2l0ICYmIHRoaXMtPnBvc3RWaXNpdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+dmlzaXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCBub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgJiYgdmFyaWFibGUtPmdldEFzU3lt
Ym9sTm9kZSgpLT5nZXRTeW1ib2woKSA9PSAiIikgICAvLyBUeXBlIChzdHJ1Y3QpIGRlY2xhcmF0
aW9uCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGFk
ZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3Ry
aW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5hbWUoKSkg
PDwgIigiOworCisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAi
LCAiLCAiIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5jdGlvbjoK
KyAgICAgICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmds
ZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5v
ZGUtPmdldFR5cGUoKSkgPDwgIiAiOworCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1h
aW4iKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9t
YWluKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAi
KCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0
U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJv
bE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmco
c3ltYm9sKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6
ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVu
Y2UuYmVnaW4oKSk7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZp
c2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAg
ICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShu
b2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNv
cmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkQiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2Jp
YXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJv
aigiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2Qi
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGlu
ZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIFJlcXVpcmVz
IHRoZSB2ZXJ0ZXggc2hhZGVyIHRleHR1cmUgc2FtcGxpbmcgZXh0ZW5zaW9uCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZUN1YmVMb2QiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVy
ZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQYXJh
bWV0ZXJzOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57XG4iKTsg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IAorICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICBhZGRDb25zdHJ1
Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCkuZ2V0VHlw
ZU5hbWUoKSksICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgc3RydWN0TG9va3VwKG5vZGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSArICJfY3Rv
cigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW46
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW5FcXVhbDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAh
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTW9kOgorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFz
VHlwZWQoKS0+Z2V0U2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJz
dCBhcmd1bWVudAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG1Vc2VzTW9k
MSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzTW9kMiA9IHRydWU7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzTW9kMyA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzTW9kNCA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wQXRhbjoKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDIpOyAgIC8vIGF0YW4oeCkgaXMgYSB1bmFyeSBvcGVyYXRvcgorICAgICAgICBtVXNlc0F0
YW4yID0gdHJ1ZTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAi
LCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwg
IiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTWl4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxl
cnAoIiwgIiwgIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0ZXA6ICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAic21vb3Roc3RlcCgiLCAiLCAiLCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGlz
dGFuY2U6ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJkb3QoIiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDcm9zczogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIiki
KTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgp
LT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3Vt
ZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDE6IG1Vc2VzRmFjZWZvcndhcmQx
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRmFjZWZvcndhcmQyID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRmFjZWZvcndhcmQzID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRmFjZWZvcndhcmQ0ID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmFjZWZv
cndhcmQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wUmVmbGVjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZmxlY3QoIiwgIiwg
IiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIsICIpIik7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAi
LCAiKSIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVy
YXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ0IiA8PCBtVW5mb2xkU2VsZWN0LT5nZXRU
ZW1wb3JhcnlJbmRleCgpOworICAgIH0KKyAgICBlbHNlICAvLyBpZi9lbHNlIHN0YXRlbWVudAor
ICAgIHsKKyAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9u
KCkpOworCisgICAgICAgIG91dCA8PCAiaWYoIjsKKworICAgICAgICBub2RlLT5nZXRDb25kaXRp
b24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG91dCA8PCAiO31cbiI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdl
dEZhbHNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iCisg
ICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgICAgIG5vZGUtPmdldEZhbHNlQmxv
Y2soKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAgIHdy
aXRlQ29uc3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCkpOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpCit7CisgICAgaWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gbUJvZHk7CisKKyAgICBpZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJkb1xuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldEluaXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5nZXRUZXN0KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlc3QoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRUZXJtaW5hbCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiZm9yKCI7CisgICAgICAgIAorICAgICAg
ICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRJ
bml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7ICI7
CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91
dCA8PCAiOyAiOworCisgICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAg
fQorCisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICB7CisgICAgICAgIG5vZGUtPmdldEJv
ZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgb3V0IDw8ICJ9XG4iOworCisgICAg
aWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUoXG4i
OworCisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAg
b3V0IDw8ICIpIjsKKyAgICB9CisKKyAgICBvdXQgPDwgIjtcbiI7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRl
cm1CcmFuY2ggKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDog
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgIiIsICIiKTsgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BCcmVhazogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJyZWFrIiwgIiIsICIi
KTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnRpbnVlOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiY29udGludWUiLCAiIiwgIiIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAg
ICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJyZXR1cm4gIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybjtcbiI7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpu
b2RlKQoreworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdn
cmVnYXRlKCk7CisKKyAgICBpZiAoYWdncmVnYXRlKQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3Jl
Z2F0ZS0+Z2V0T3AoKSA9PSBFT3BTZXF1ZW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+Z2V0U2Vx
dWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBz
aXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xlU3RhdGVt
ZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8gSGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0aGFuIDI1NSBpdGVyYXRpb25zICh1bnN1cHBvcnRl
ZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhlbQorYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNl
c3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1Cb2R5OworCisgICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8gZm9yKGlu
dCBpbmRleCA9IGluaXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5j
cmVtZW50KQorICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3BlcmF0b3Ig
Y29tcGFyYXRvciA9IEVPcE51bGw7CisgICAgaW50IGluaXRpYWwgPSAwOworICAgIGludCBsaW1p
dCA9IDA7CisgICAgaW50IGluY3JlbWVudCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRleCBuYW1l
IGFuZCBpbnRpYWwgdmFsdWUKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdh
dGUoKTsKKworICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlICZzZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFU
ZW1wb3JhcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAq
YXNzaWduID0gdmFyaWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgICAgICAgICAgICAg
aWYgKGFzc2lnbi0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqY29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRV
bmlvbigpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFu
dC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleCA9IHN5bWJvbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gY29u
c3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBjb21wYXJh
dG9yIGFuZCBsaW1pdCB2YWx1ZQorICAgIGlmIChpbmRleCAhPSBOVUxMICYmIG5vZGUtPmdldFRl
c3QoKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5nZXRUZXN0
KCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHRlc3QgJiYgdGVz
dC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+Z2V0SWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50
ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAg
IGlmIChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3Rh
bnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gdGVz
dC0+Z2V0T3AoKTsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBjb25zdGFudC0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBpbmNyZW1lbnQKKyAg
ICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0
VGVybWluYWwoKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeVRlcm1pbmFs
ID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIFRJbnRl
cm1VbmFyeSAqdW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldFRlcm1pbmFsKCktPmdldEFzVW5hcnlO
b2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYmluYXJ5VGVybWluYWwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgpOworICAg
ICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVybWluYWwt
PmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29u
c3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gY29uc3RhbnQtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChvcCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRU9wQWRkQXNzaWduOiBpbmNyZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiBpbmNyZW1lbnQgPSAtdmFsdWU7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICh1bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAg
ICAgICAgICBUT3BlcmF0b3Igb3AgPSB1bmFyeVRlcm1pbmFsLT5nZXRPcCgpOworCisgICAgICAg
ICAgICBzd2l0Y2ggKG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcFBv
c3RJbmNyZW1lbnQ6IGluY3JlbWVudCA9IDE7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
T3BQb3N0RGVjcmVtZW50OiBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRU9wUHJlSW5jcmVtZW50OiAgaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVPcFByZURlY3JlbWVudDogIGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxs
ICYmIGluY3JlbWVudCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9w
TGVzc1RoYW5FcXVhbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcGFyYXRvciA9IEVPcExl
c3NUaGFuOworICAgICAgICAgICAgbGltaXQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjb21wYXJhdG9yID09IEVPcExlc3NUaGFuKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
aXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwgKyAxKSAvIGluY3JlbWVudDsKKworICAgICAg
ICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGludCByZW1haW5kZXIgPSAobGltaXQgLSBpbml0aWFsICsgMSkgJSBp
bmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBp
bmNyZW1lbnQgKiBzdGQ6Om1pbigyNTUsIGl0ZXJhdGlvbnMpIC0gMSAtIHJlbWFpbmRlcjsKKwor
ICAgICAgICAgICAgICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1w
ZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJm
b3IoaW50ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgaW5pdGlhbDsK
KworICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOworICAgICAgICAgICAgICAgIGluZGV4LT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiA8ICI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGNsYW1wZWRMaW1pdDsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiOyAi
OworICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiArPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbmNyZW1lbnQ7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAg
ICAgICAgICAgICAgaW5pdGlhbCArPSAyNTUgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAg
aXRlcmF0aW9ucyAtPSAyNTU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFuZGxlZCBhcyBhbiBleGNlc3NpdmUgbG9vcAor
fQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRT
dHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcg
JnBvc3RTdHJpbmcpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcHJlU3RyaW5nOwor
ICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgIHsKKyAgICAgICAgb3V0
IDw8IGluU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisg
ICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cmluZzsKKyAgICB9Cit9CisKK1RTdHJpbmcgT3V0
cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKQorewor
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZpZXIoKTsKKyAgICBj
b25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgIFRTdHJpbmcgbmFtZSA9
IHN5bWJvbC0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobmFtZS5lbXB0eSgpKSAgIC8vIEhMU0wg
ZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMKKyAgICB7CisgICAg
ICAgIG5hbWUgPSAieCIgKyBzdHIobUFyZ3VtZW50SW5kZXgrKyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG5hbWUgPSBkZWNvcmF0ZShuYW1lKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUpICsg
IiAiICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6
OnF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVh
bGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJpbiI7
CisgICAgICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKKyAgICAgIGNhc2Ug
RXZxSW5PdXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNvbnN0UmVh
ZE9ubHk6IHJldHVybiAiY29uc3QiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gIiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmlu
Zyhjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpCisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRUeXBlTmFtZSgpICE9ICIiKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGUuZ2V0VHlwZU5h
bWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0cnVjdHVyZSwg
ZGVmaW5lIGluIHBsYWNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAm
ZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5n
ID0gInN0cnVjdFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZp
ZWxkc1tpXS50eXBlOworCisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5cGVT
dHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhm
aWVsZCkgKyAiO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyaW5nICs9ICJ9
ICI7CisKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdl
dE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxv
YXQyeDIiOworICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJm
bG9hdCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDIiOworICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gImZsb2F0NCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImludCI7CisgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuICJpbnQyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImludDMiOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXpl
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJib29sIjsK
KyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImJvb2wyIjsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImJvb2w0
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICBy
ZXR1cm4gInZvaWQiOworICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAg
ICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFVO
SU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgIHJldHVybiAiPHVua25vd24gdHlwZT4iOwor
fQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQor
eworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gIiI7Cisg
ICAgfQorCisgICAgcmV0dXJuICJbIiArIHN0cih0eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsK
K30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkK
K3sKKyAgICBUU3RyaW5nIHN0cmluZzsKKworICAgIGZvciAoaW50IGNvbXBvbmVudCA9IDA7IGNv
bXBvbmVudCA8IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOyBjb21wb25lbnQrKykKKyAgICB7CisgICAg
ICAgIHN0cmluZyArPSAiMCI7CisKKyAgICAgICAgaWYgKGNvbXBvbmVudCA8IHR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpIC0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOworfQorCit2
b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBU
U3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7CisgICAg
aWYgKG5hbWUgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3Ry
dWN0dXJlcyBkb24ndCBoYXZlIGNvbnN0cnVjdG9ycworICAgIH0KKworICAgIFRUeXBlIGN0b3JU
eXBlID0gdHlwZTsKKyAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygpOworICAgIGN0b3JUeXBl
LmNoYW5nZVByZWNpc2lvbihFYnBIaWdoKTsKKyAgICBjdG9yVHlwZS5jaGFuZ2VRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKKworICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0cnVjdCgp
ID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlw
ZT4gUGFyYW1ldGVyQXJyYXk7CisgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7CisK
KyAgICBpZiAocGFyYW1ldGVycykKKyAgICB7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBwYXJhbWV0
ZXIgIT0gcGFyYW1ldGVycy0+ZW5kKCk7IHBhcmFtZXRlcisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5cGVkKCkt
PmdldFR5cGUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRTdHJ1
Y3QoKSkKKyAgICB7CisgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkp
OworCisgICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOworICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0
cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCisgICAgICAgICAgICAgICAgICAgICAie1xu
IjsKKworICAgICAgICBjb25zdCBUVHlwZUxpc3QgJmZpZWxkcyA9ICp0eXBlLmdldFN0cnVjdCgp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRz
W2ldLnR5cGU7CisKKyAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5n
KGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQp
ICsgIjtcbiI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4iOworCisg
ICAgICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0
RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3R1cmUpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNr
KHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY3RvclBh
cmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0udHlwZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgVFN0cmluZyBjb25zdHJ1Y3RvcjsKKworICAg
IGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9
IGN0b3JOYW1lICsgIiAiICsgY3Rvck5hbWUgKyAiX2N0b3IoIjsKKyAgICB9CisgICAgZWxzZSAg
IC8vIEJ1aWx0LWluIHR5cGUKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5cGVTdHJp
bmcoY3RvclR5cGUpICsgIiAiICsgY3Rvck5hbWUgKyAiKCI7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0gMDsgcGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpOyBwYXJhbWV0ZXIrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gY3Rv
clBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKKworICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3Ry
aW5nKHR5cGUpICsgIiB4IiArIHN0cihwYXJhbWV0ZXIpICsgYXJyYXlTdHJpbmcodHlwZSk7CisK
KyAgICAgICAgaWYgKHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjb25zdHJ1Y3RvciArPSAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0
b3IgKz0gIiAgICAiICsgY3Rvck5hbWUgKyAiIHN0cnVjdHVyZSA9IHsiOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAgIHJldHVybiAiICsgdHlwZVN0
cmluZyhjdG9yVHlwZSkgKyAiKCI7CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmlzTWF0cml4
KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCisgICAgeworICAgICAgICBpbnQgZGlt
ID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFt
ZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBdOworCisgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2Fs
YXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGlt
OyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAw
OyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAt
IDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6
ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4
MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmco
KHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rv
ciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IHJlbWFpbmluZ0NvbXBvbmVudHMgPSBjdG9y
VHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGludCBwYXJhbWV0ZXJJbmRleCA9IDA7CisK
KyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ0NvbXBvbmVudHMgPiAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVy
SW5kZXhdOworICAgICAgICAgICAgYm9vbCBtb3JlUGFyYW1ldGVycyA9IHBhcmFtZXRlckluZGV4
IDwgKGludCljdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxOworCisgICAgICAgICAgICBjb25zdHJ1
Y3RvciArPSAieCIgKyBzdHIocGFyYW1ldGVySW5kZXgpOworCisgICAgICAgICAgICBpZiAocGFy
YW1ldGVyLmlzU2NhbGFyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVtYWlu
aW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVy
LmdldE9iamVjdFNpemUoKSB8fCBtb3JlUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9i
amVjdFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
cmVtYWluaW5nQ29tcG9uZW50cyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdDb21wb25l
bnRzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx
OiBjb25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpIHx8IHBh
cmFtZXRlci5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1v
cmVQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1haW5p
bmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlmIChtb3Jl
UGFyYW1ldGVycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRl
eCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmdldFN0
cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIn07XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9y
ICs9ICIpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBt
Q29uc3RydWN0b3JzLmluc2VydChjb25zdHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0YW50VW5p
b24gKk91dHB1dEhMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29u
c3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtQm9keTsKKworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICB7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAodHlwZS5nZXRUeXBlTmFtZSgpKSArICJf
Y3RvcigiOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0ICpzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0
dXJlLT5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZp
ZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworCisgICAgICAgICAgICBjb25zdFVuaW9u
ID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5pb24pOworCisgICAgICAg
ICAgICBpZiAoaSAhPSBzdHJ1Y3R1cmUtPnNpemUoKSAtIDEpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgc2l6
ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUg
PiAxOworICAgICAgICAKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodHlwZSkgPDwgIigiOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBjb25zdFVuaW9uLT5nZXRG
Q29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25z
dFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDog
IG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
ICE9IHNpemUgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAi
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBjb25zdFVuaW9uOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5n
KHVuc2lnbmVkIGludCBkZXB0aExpbWl0KQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtU2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwg
ZGVwdGhMaW1pdDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNj
b3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBpZiAodHlwZU5hbWUg
PT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZU5hbWU7CisgICAgfQorCisgICAgcmV0
dXJuIHR5cGVOYW1lICsgc2NvcGVTdHJpbmcobVNjb3BlRGVwdGgpOworfQorCitUU3RyaW5nIE91
dHB1dEhMU0w6OnN0cnVjdExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBm
b3IgKGludCBkZXB0aCA9IG1TY29wZURlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKQorICAgIHsK
KyAgICAgICAgVFN0cmluZyBzY29wZWROYW1lID0gZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0
cmluZyhkZXB0aCkpOworCisgICAgICAgIGZvciAoU3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVj
dE5hbWUgPSBtU3RydWN0TmFtZXMuYmVnaW4oKTsgc3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMu
ZW5kKCk7IHN0cnVjdE5hbWUrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCpzdHJ1Y3RO
YW1lID09IHNjb3BlZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNjb3BlZE5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJF
QUNIQUJMRSgpOyAgIC8vIFNob3VsZCBoYXZlIGZvdW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IK
KworICAgIHJldHVybiB0eXBlTmFtZTsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0
ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMykg
IT0gImdsXyIgJiYgc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICB7CisgICAgICAg
IHJldHVybiAiXyIgKyBzdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdHJpbmc7CisgICAgfQorfQorfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9jb21waWxlci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9PdXRwdXRITFNMLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL091dHB1dEhMU0wuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfT1VUUFVUSExTTF9IXworI2RlZmluZSBDT01QSUxFUl9PVVRQVVRITFNMX0hf
CisKKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25h
bWVzcGFjZSBzaAoreworY2xhc3MgVW5mb2xkU2VsZWN0OworCitjbGFzcyBPdXRwdXRITFNMIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IE91dHB1
dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCk7CisgICAgfk91dHB1dEhMU0woKTsKKworICAg
IHZvaWQgb3V0cHV0KCk7CisKKyAgICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7CisK
KyAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBU
U3RyaW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGlj
IFRTdHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3Ry
aW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29y
ZSB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIGhlYWRl
cigpOworCisgICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBvdXRwdXQgdGhlaXIgY29kZSB0byB0
aGUgYm9keSBzdHJlYW0KKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAg
ICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgYm9vbCBpc1NpbmdsZVN0YXRlbWVudChU
SW50ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCBoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1M
b29wICpub2RlKTsKKyAgICB2b2lkIG91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRT
dHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcg
JnBvc3RTdHJpbmcpOworICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5
bWJvbCAqc3ltYm9sKTsKKyAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3Q7CisKKyAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBU
U3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOworICAgIGNv
bnN0IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwg
Y29uc3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7CisKKyAgICBUU3RyaW5nIHNjb3BlU3Ry
aW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKKyAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChj
b25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7CisgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3Qg
VFN0cmluZyAmdHlwZU5hbWUpOworCisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAg
VW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOwor
CisgICAgLy8gT3V0cHV0IHN0cmVhbXMKKyAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7CisgICAg
VEluZm9TaW5rQmFzZSBtQm9keTsKKyAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7CisKKyAgICBz
dGQ6OnNldDxzdGQ6OnN0cmluZz4gbVJlZmVyZW5jZWRVbmlmb3JtczsKKyAgICBzdGQ6OnNldDxz
dGQ6OnN0cmluZz4gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzOworICAgIHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiBtUmVmZXJlbmNlZFZhcnlpbmdzOworCisgICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmlu
ZyB3aGF0IGdvZXMgaW4gdGhlIGhlYWRlciBvdXRwdXQKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
OworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJE
UHJvajsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzOworICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKKyAgICBib29sIG1V
c2VzRGVwdGhSYW5nZTsKKyAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJvb2wgbVVzZXNQ
b2ludENvb3JkOworICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAgICBib29sIG1Vc2VzUG9p
bnRTaXplOworICAgIGJvb2wgbVVzZXNYb3I7CisgICAgYm9vbCBtVXNlc01vZDE7CisgICAgYm9v
bCBtVXNlc01vZDI7CisgICAgYm9vbCBtVXNlc01vZDM7CisgICAgYm9vbCBtVXNlc01vZDQ7Cisg
ICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOwor
ICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDM7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsK
KyAgICBib29sIG1Vc2VzRXF1YWxNYXQyOworICAgIGJvb2wgbVVzZXNFcXVhbE1hdDM7CisgICAg
Ym9vbCBtVXNlc0VxdWFsTWF0NDsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWMyOworICAgIGJvb2wg
bVVzZXNFcXVhbFZlYzM7CisgICAgYm9vbCBtVXNlc0VxdWFsVmVjNDsKKyAgICBib29sIG1Vc2Vz
RXF1YWxJVmVjMjsKKyAgICBib29sIG1Vc2VzRXF1YWxJVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1
YWxJVmVjNDsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjMjsKKyAgICBib29sIG1Vc2VzRXF1YWxC
VmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjNDsKKyAgICBib29sIG1Vc2VzQXRhbjI7CisK
KyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IENvbnN0cnVjdG9yczsKKyAgICBDb25zdHJ1
Y3RvcnMgbUNvbnN0cnVjdG9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3Ry
dWN0TmFtZXM7CisgICAgU3RydWN0TmFtZXMgbVN0cnVjdE5hbWVzOworCisgICAgdHlwZWRlZiBz
dGQ6Omxpc3Q8VFN0cmluZz4gU3RydWN0RGVjbGFyYXRpb25zOworICAgIFN0cnVjdERlY2xhcmF0
aW9ucyBtU3RydWN0RGVjbGFyYXRpb25zOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxpbnQ+
IFNjb3BlQnJhY2tldDsKKyAgICBTY29wZUJyYWNrZXQgbVNjb3BlQnJhY2tldDsKKyAgICB1bnNp
Z25lZCBpbnQgbVNjb3BlRGVwdGg7CisKKyAgICBpbnQgbUFyZ3VtZW50SW5kZXg7ICAgLy8gRm9y
IGNyZWF0aW5nIHVuaXF1ZSBhcmd1bWVudCBuYW1lcworfTsKK30KKworI2VuZGlmICAgLy8gQ09N
UElMRVJfT1VUUFVUSExTTF9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9QYXJzZUhlbHBlci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDYyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLworLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKKy8vCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBj
aGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSB2ZWN0b3IuCisvLworYm9vbCBUUGFyc2VD
b250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQg
dmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBpbnQgbGluZSkKK3sKKyAgICBmaWVsZHMu
bnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7CisgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGVudW0geworICAgICAgICBleHl6dywKKyAgICAgICAgZXJnYmEsCisgICAgICAgIGVzdHBx
LAorICAgIH0gZmllbGRTZXRbNF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5u
dW07ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBTdHJpbmdbaV0pICB7CisgICAgICAgIGNh
c2UgJ3gnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
cic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmll
bGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoK
KyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneSc6IAorICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdnJzogCisgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVy
Z2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAg
ZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd6JzogCisgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2InOiAKKyAgICAgICAgICAgIGZpZWxkcy5v
ZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0
c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICd3JzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2
ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZpZWxkcy5udW07ICsraSkgeworICAgICAgICBpZiAoZmllbGRzLm9mZnNldHNbaV0g
Pj0gdmVjU2l6ZSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInZlY3RvciBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAg
ICAgICAgICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgeworICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZy
b20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Ig
c3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSBtYXRyaXguCisvLwor
Ym9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21w
U3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBpbnQgbGluZSkKK3sK
KyAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxz
ZTsKKyAgICBmaWVsZHMucm93ID0gLTE7CisgICAgZmllbGRzLmNvbCA9IC0xOworCisgICAgaWYg
KGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwg
bGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjb21wU3RyaW5nWzBd
ID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5n
WzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmll
bGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKKyAg
ICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfSBlbHNlIGlmIChj
b21wU3RyaW5nWzFdID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8
fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdh
bCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlUm93
ID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1sw
XSA+ICczJyB8fAorICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5n
WzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmll
bGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0g
LSAnMCc7CisgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOworICAgIH0K
KworICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXpl
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiBy
YW5nZSIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRXJy
b3JzCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBUcmFjayB3aGV0aGVyIGVycm9ycyBo
YXZlIG9jY3VycmVkLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCit7CisgICAg
cmVjb3ZlcmVkRnJvbUVycm9yID0gdHJ1ZTsKK30KKworLy8KKy8vIFVzZWQgYnkgZmxleC9iaXNv
biB0byBvdXRwdXQgYWxsIHN5bnRheCBhbmQgcGFyc2luZyBlcnJvcnMuCisvLwordm9pZCBDX0RF
Q0wgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxvYyBuTGluZSwgY29uc3QgY2hhciAqc3pS
ZWFzb24sIGNvbnN0IGNoYXIgKnN6VG9rZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLikKK3sKKyAgICBjaGFyIHN6
RXh0cmFJbmZvWzQwMF07CisgICAgdmFfbGlzdCBtYXJrZXI7CisKKyAgICB2YV9zdGFydChtYXJr
ZXIsIHN6RXh0cmFJbmZvRm9ybWF0KTsKKworICAgIHZzbnByaW50ZihzekV4dHJhSW5mbywgc2l6
ZW9mKHN6RXh0cmFJbmZvKSwgc3pFeHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7CisKKyAgICAvKiBW
QysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8g
Ki8KKyAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIGluZm9TaW5r
LmluZm8ubG9jYXRpb24obkxpbmUpOworICAgIGluZm9TaW5rLmluZm8gPDwgIiciIDw8IHN6VG9r
ZW4gPDwgICInIDogIiA8PCBzelJlYXNvbiA8PCAiICIgPDwgc3pFeHRyYUluZm8gPDwgIlxuIjsK
KworICAgIHZhX2VuZChtYXJrZXIpOworCisgICAgKytudW1FcnJvcnM7Cit9CisKKy8vCisvLyBT
YW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4K
Ky8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQoreworICAgIGVycm9yKGxpbmUsICIi
LCBvcCwgImNhbm5vdCBjb252ZXJ0IGZyb20gJyVzJyB0byAnJXMnIiwKKyAgICAgICAgICByaWdo
dC5jX3N0cigpLCBsZWZ0LmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdl
IGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJp
bmcgb3BlcmFuZCkKK3sKKyAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3As
IAorICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVy
YW5kIG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAor
ICAgICAgICAgIG9wLCBvcGVyYW5kLmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBt
ZXNzYWdlIGZvciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQ
YXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3Ry
aW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGVzICIsIG9wLCAKKyAgICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMg
dGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5kIG9mIHR5cGUgJyVzJyBhbmQgIgorICAgICAg
ICAgICAgImEgcmlnaHQgb3BlcmFuZCBvZiB0eXBlICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2Vw
dGFibGUgY29udmVyc2lvbikiLCAKKyAgICAgICAgICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0
LmNfc3RyKCkpOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2so
aW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpeworICAgIHN3
aXRjaCggdHlwZSApeworICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24g
PT0gRWJwVW5kZWZpbmVkICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lv
biBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50OgorICAgICAg
ICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCApeworICAgICAgICAgICAgZXJyb3IoIGxp
bmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLworLy8gQm90aCB0ZXN0IGFuZCBpZiBuZWNlc3NhcnksIHNwaXQg
b3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhbiBsLXZhbHVl
IHRoYXQgY2FuIGJlIG9wZXJhdGVkIG9uIHRoaXMgd2F5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAg
VEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisg
ICAgaWYgKGJpbmFyeU5vZGUpIHsKKyAgICAgICAgYm9vbCBlcnJvclJldHVybjsKKworICAgICAg
ICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5l
LCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6
emxlOgorICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9w
LCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikg
eworICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07CisKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7
CisgICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5i
ZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOworICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNl
dFt2YWx1ZV0gPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAi
IiwgIiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvclJldHVybjsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWly
ZWQiLCBvcCwgIiIsICIiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAg
IGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7CisgICAgaWYgKHN5bU5vZGUgIT0gMCkKKyAgICAgICAg
c3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKTsKKworICAgIGNvbnN0IGNoYXIq
IG1lc3NhZ2UgPSAwOworICAgIHN3aXRjaCAobm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICBj
YXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0Ijsg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFBdHRyaWJ1dGU6
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKKyAg
ICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZv
cm0iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnB1dDog
ICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9G
cmFnQ29vcmQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6ICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IGdsX0Zyb250RmFjaW5nIjsgYnJlYWs7CisgICAgY2FzZSBFdnFQb2lu
dENvb3JkOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfUG9pbnRDb29yZCI7ICBicmVh
azsKKyAgICBkZWZhdWx0OgorCisgICAgICAgIC8vCisgICAgICAgIC8vIFR5cGUgdGhhdCBjYW4n
dCBiZSB3cml0dGVuIHRvPworICAgICAgICAvLworICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVi
dFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1w
bGVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAg
ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSB2b2lkIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAw
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBFdmVy
eXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCisgICAgLy8KKyAgICBpZiAobWVzc2FnZSA9
PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIElmIHdlIGdldCBo
ZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCisgICAgLy8KKyAgICBpZiAoc3lt
Tm9kZSkKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICJcIiVz
XCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvcihsaW5l
LCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdlKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0
IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0YW50Lgor
Ly8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNl
Q29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBpZiAo
bm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWly
ZWQiLCAiIiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3Qs
IGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBp
cyByZWFsbHkKKy8vIGFuIGludGVnZXIuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMg
YW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSW50
ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIGlmIChub2RlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2Vy
IGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3Is
IHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVudGx5CisvLyBnbG9iYWxseSBzY29wZWQuCisvLworLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0
OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9r
ZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJy
b3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBGb3Igbm93LCBrZWVwIGl0IHNpbXBsZTogIGlm
IGl0IHN0YXJ0cyAiZ2xfIiwgaXQncyByZXNlcnZlZCwgaW5kZXBlbmRlbnQKKy8vIG9mIHNjb3Bl
LiAgRXhjZXB0LCBpZiB0aGUgc3ltYm9sIHRhYmxlIGlzIGF0IHRoZSBidWlsdC1pbiBwdXNoLWxl
dmVsLAorLy8gd2hpY2ggaXMgd2hlbiB3ZSBhcmUgcGFyc2luZyBidWlsdC1pbnMuCisvLworLy8g
UmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmll
cikKK3sKKyAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKKyAgICAgICAg
aWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDMpID09IFRTdHJpbmcoImdsXyIpKSB7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSIsICJnbF8iLCAiIik7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnRpZmll
ci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIC8vZXJyb3IobGlu
ZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOworICAgICAgICAgICAgLy9yZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
IlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Uu
IiwgbGluZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdo
IGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIGJ1aWxkCisvLyBzb21ldGhpbmcg
b2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVjdG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBlIG9m
CisvLyB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBh
biBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1
Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24mIGZ1
bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBlKiB0eXBlKQoreworICAgICp0eXBlID0gZnVuY3Rp
b24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBmYWxz
ZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAg
Y29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDog
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTm90ZTogSXQncyBva2F5
IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0byBo
YXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUgd2hl
biBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vlbi4gIElmIHdlIGxvb3AKKyAgICAvLyBhZ2Fpbiwg
dGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUgdHJ1
ZS4KKyAgICAvLworCisgICAgaW50IHNpemUgPSAwOworICAgIGJvb2wgY29uc3RUeXBlID0gdHJ1
ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7Cisg
ICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZhbHNlOworICAgIGJvb2wgYXJyYXlBcmcgPSBmYWxz
ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgKytp
KSB7CisgICAgICAgIHNpemUgKz0gZnVuY3Rpb25baV0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBmdW5jdGlvbltpXS50
eXBlLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOworICAg
ICAgICBpZiAoZnVsbCkKKyAgICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0g
dHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKQorICAgICAgICAgICAgZnVsbCA9IHRydWU7CisgICAgICAg
IGlmIChmdW5jdGlvbltpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAg
ICAgICAgIGNvbnN0VHlwZSA9IGZhbHNlOworICAgICAgICBpZiAoZnVuY3Rpb25baV0udHlwZS0+
aXNBcnJheSgpKQorICAgICAgICAgICAgYXJyYXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBpZiAoY29uc3RUeXBlKQorICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3Qp
OworCisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNv
bnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGFycmF5
QXJnICYmIG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAi
Y29uc3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5IiwgImNvbnN0cnVjdG9y
IiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobWF0cml4SW5N
YXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFy
YW1Db3VudCgpICE9IDEpIHsKKyAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1h
dHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3Rv
ciIsICIiKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChvdmVyRnVsbCkgeworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRz
IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYm
IHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBk
b2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghdHlwZS0+
aXNNYXRyaXgoKSkgeworICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBz
aXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKKyAgICAgICAgICAg
IChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUo
KSkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQg
Zm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkKiB0eXBlZCA9IG5v
ZGUtPmdldEFzVHlwZWQoKTsKKyAgICBpZiAodHlwZWQgPT0gMCkgeworICAgICAgICBlcnJvcihs
aW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3Ry
dWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAob3AgIT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3Ry
dWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZWQt
PmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5v
dCBjb252ZXJ0IGEgdm9pZCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNo
ZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCByYWlz
ZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQorLy8KKy8vIHJldHVybnMgdHJ1ZSBp
biBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVj
ayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUm
IHB1YlR5cGUpCit7CisgICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZv
ciB0aGUgZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9y
IG5vdAorLy8KKy8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBU
UGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVk
KiB0eXBlKQoreworICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5
cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAi
Iik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBl
eHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Npb24gb3Igbm90Cisv
LworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNv
bnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUp
Cit7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlw
ZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYm9v
bGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpz
YW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25z
dCBjaGFyKiByZWFzb24pCit7CisgICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Cisg
ICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKnBUeXBlLnVzZXJEZWYpKSB7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwg
IihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1wbGVyKSIpOworICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUudHlwZSkpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgcmVhc29uLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIiKTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5x
dWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgorICAgICAgICBwVHlwZS50eXBlID09IEVidFN0
cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVj
dHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlmaWVy
ICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVy
cyBtdXN0IGJlIHVuaWZvcm0iKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hl
Y2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKK3sK
KyAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAm
JiAKKyAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBs
ZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwg
IiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKQorewor
ICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgIFRUeXBlTGlzdCYgc3RydWN0dXJlID0gKnR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc3RydWN0dXJlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpzdHJ1Y3R1cmVbaV0udHlwZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vCisvLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mgc2l6
ZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVk
KiBleHByLCBpbnQmIHNpemUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50
ID0gZXhwci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGNvbnN0YW50ID09IDAgfHwg
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgeworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIs
ICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2l6ZSA9IGNvbnN0YW50
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKKworICAgIGlmIChzaXplIDw9
IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZl
IGludGVnZXIiLCAiIiwgIiIpOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMg
cXVhbGlmaWVyIGNhbiBiZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
aXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9y
Q2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJp
bmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBleHRlbnNpb25FcnJvckNoZWNrKGxpbmUs
ICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworLy8KKy8vIFNlZSBpZiB0aGlzIHR5cGUgY2FuIGJlIGFuIGFycmF5
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQ
YXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpCit7CisgICAgLy8KKyAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJyYXk/CisgICAgLy8K
KyAgICBpZiAodHlwZS5hcnJheSkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xh
cmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19z
dHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vCisvLyBEbyBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJp
bmcgYW4gYXJyYXksIHdpdGggYW5kIAorLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSBy
aWdodCBjaGFuZ2VzIHRvIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1lYW5z
IG5vIHNwZWNpZmllZCBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlh
YmxlKQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNl
IHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKKyAgICAv
LyBiZWNhdXNlIHJlc2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KKyAgICAvLworCisg
ICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAorICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Cisg
ICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJ
biwgJnNhbWVTY29wZSk7CisgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKKyAg
ICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlh
YmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICAgICAgaWYgKHR5cGUuYXJyYXlT
aXplKQorICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5h
cnJheVNpemUpOworCisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUp
KSB7CisgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7CisgICAgICAgICAgICBlcnJvcihsaW5l
LCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9
IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlhYmxl
LT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNs
YXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFyaWFibGUtPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5cGUpKSkg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBh
IGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRUeXBlKiB0ID0gdmFyaWFibGUtPmdl
dEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CisgICAgICAgIHdoaWxlICh0ICE9IDApIHsKKyAgICAg
ICAgICAgIGlmICh0LT5nZXRNYXhBcnJheVNpemUoKSA+IHR5cGUuYXJyYXlTaXplKSB7CisgICAg
ICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQg
Zm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdC0+c2V0QXJyYXlTaXpl
KHR5cGUuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIHQgPSB0LT5nZXRBcnJheUluZm9ybWF0aW9u
VHlwZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQorICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwor
ICAgIH0gCisKKyAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllciwgdHlwZSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQ
YXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSog
dHlwZSwgaW50IHNpemUsIGJvb2wgdXBkYXRlRmxhZywgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IGJvb2wgYnVpbHRJbiA9IGZhbHNlOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxl
LmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZidWlsdEluKTsKKyAgICBpZiAoc3ltYm9sID09IDAp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2RlLT5n
ZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsK
KworICAgIHR5cGUtPnNldEFycmF5SW5mb3JtYXRpb25UeXBlKHZhcmlhYmxlLT5nZXRBcnJheUlu
Zm9ybWF0aW9uVHlwZSgpKTsKKyAgICB2YXJpYWJsZS0+dXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5
cGUodHlwZSk7CisKKyAgICAvLyBzcGVjaWFsIGNhc2luZyB0byB0ZXN0IGluZGV4IHZhbHVlIG9m
IGdsX0ZyYWdEYXRhLiBJZiB0aGUgYWNjZXNzZWQgaW5kZXggaXMgPj0gZ2xfTWF4RHJhd0J1ZmZl
cnMKKyAgICAvLyBpdHMgYW4gZXJyb3IKKyAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImds
X0ZyYWdEYXRhIikgeworICAgICAgICBUU3ltYm9sKiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZp
bmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1aWx0SW4pOworICAgICAgICBpZiAoZnJhZ0RhdGEg
PT0gMCkgeworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMgbm90IGRlZmluZWQiLCBsaW5lKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGZyYWdEYXRhVmFsdWUg
PSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigpWzBd
LmdldElDb25zdCgpOworICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2ZSBh
IG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB3ZSBkb250IHdh
bnQgdG8gdXBkYXRlIHRoZSBtYXhBcnJheVNpemUgd2hlbiB0aGlzIGZsYWcgaXMgbm90IHNldCwg
d2UganVzdCB3YW50IHRvIGluY2x1ZGUgdGhpcyAKKyAgICAvLyBub2RlIHR5cGUgaW4gdGhlIGNo
YWluIG9mIG5vZGUgdHlwZXMgc28gdGhhdCBpdHMgdXBkYXRlZCB3aGVuIGEgaGlnaGVyIG1heEFy
cmF5U2l6ZSBjb21lcyBpbi4KKyAgICBpZiAoIXVwZGF0ZUZsYWcpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNpemUrKzsKKyAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldE1heEFycmF5
U2l6ZShzaXplKTsKKyAgICB0eXBlLT5zZXRNYXhBcnJheVNpemUoc2l6ZSk7CisgICAgVFR5cGUq
IHR0ID0gdHlwZTsKKworICAgIHdoaWxlKHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpICE9
IDApIHsKKyAgICAgICAgdHQgPSB0dC0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAgICAg
ICAgdHQtPnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8vCisvLyBFbmZvcmNlIG5vbi1pbml0aWFsaXplciB0eXBlL3F1YWxpZmllciBydWxl
cy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYg
aWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBNYWtlIHRo
ZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KKyAgICAvLworICAgIGlmICh0eXBlLnF1YWxpZmllciA9
PSBFdnFDb25zdCkgeworICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3Qg
YmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gRG8gc2VtYW50
aWMgY2hlY2tpbmcgZm9yIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5pdGlh
bGl6ZXIsCisvLyBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbklu
aXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYg
dHlwZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQor
ICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gbmV3IFRWYXJp
YWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOworCisgICAgaWYgKCEgc3ltYm9sVGFibGUu
aW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBkZWxldGUgdmFyaWFi
bGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2b2lkRXJyb3JDaGVj
ayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGlu
dCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwg
VFR5cGUqIHR5cGUpCit7ICAgIAorICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgcXVh
bGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVy
IG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhx
dWFsaWZpZXIpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJT
dHJpbmcocXVhbGlmaWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKKyAg
ICBlbHNlCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogZXh0ZW5zaW9uKQoreyAgICAgICAKKyAgICBp
ZiAoZXh0ZW5zaW9uQmVoYXZpb3JbZXh0ZW5zaW9uXSA9PSBFQmhXYXJuKSB7CisgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgKCJleHRlbnNpb24gIiArIFRTdHJp
bmcoZXh0ZW5zaW9uKSArICIgaXMgYmVpbmcgdXNlZCIpLmNfc3RyKCksIGxpbmUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNp
b25dID09IEVCaERpc2FibGUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4
dGVuc2lvbiwgImlzIGRpc2FibGVkIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
Tm9uLUVycm9ycy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sg
dXAgYSBmdW5jdGlvbiBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQg
aXMgYSBmdW5jdGlvbi4KKy8vCisvLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3Vu
ZCwgb3RoZXJ3aXNlIDAuCisvLworY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5k
RnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKK3sKKyAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmds
ZWROYW1lKCksIGJ1aWx0SW4pOworCisgICAgaWYgKHN5bWJvbCA9PSAwKSB7ICAgICAgICAKKyAg
ICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQi
LCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBpZiAoISBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICBlcnJvcihsaW5l
LCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBjb25zdCBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICAKKyAg
ICByZXR1cm4gZnVuY3Rpb247Cit9CisKKy8vCisvLyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBz
ZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhhdmUgb25lIHNldCBvZgorLy8gY29kZSB0
byBoYW5kbGUgdGhlbSBoZXJlLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRp
YWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUm
IHBUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2
YXJpYWJsZSkKK3sKKyAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5cGUpOworCisgICAgaWYgKHZh
cmlhYmxlID09IDApIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVu
dGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2b2lkRXJy
b3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBwVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAvLworICAgICAgICAvLyBhZGQgdmFyaWFibGUgdG8gc3ltYm9sIHRhYmxl
CisgICAgICAgIC8vCisgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmll
ciwgdHlwZSk7CisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBh
bmQgdGhlIHBvb2wgCisgICAgICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1l
bW9yeQorICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11c3Qg
YmUgb2YgdHlwZSBjb25zdGFudCwgYSBnbG9iYWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8KKyAg
ICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCk7CisgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9
IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlh
YmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIC8vCisgICAgLy8gdGVzdCBmb3IgYW5kIHByb3BhZ2F0ZSBjb25z
dGFudAorICAgIC8vCisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAgICAg
IGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwg
Ij0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2
cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwgCisg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwg
IiIpOworICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCisgICAgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOwor
CisgICAgICAgICAgICBpZiAodHlwZS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiB0eXBlLmdldEJh
c2ljVHlwZSgpICE9IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICp1bmlvbkFycmF5ID0g
KGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KSlbMF07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5z
aGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVu
aW9uQXJyYXlQb2ludGVyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlu
aXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2Rl
KCktPmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0
YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIENvbnN0
YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9Iiwg
IiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7
CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgCisg
ICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgeworICAgICAgICBUSW50ZXJtU3ltYm9sKiBp
bnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAg
ICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVkaWF0ZS5hZGRBc3NpZ24oRU9wSW5pdGlhbGl6ZSwg
aW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwgbGluZSk7CisgICAgICAgIGlmIChpbnRlcm1Ob2Rl
ID09IDApIHsKKyAgICAgICAgICAgIGFzc2lnbkVycm9yKGxpbmUsICI9IiwgaW50ZXJtU3ltYm9s
LT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0aWFsaXplci0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAg
ICAgaW50ZXJtTm9kZSA9IDA7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNl
Q29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSkKK3sK
KyAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGJvb2wgYWxsQ29uc3RhbnQgPSB0cnVlOworCisgICAgLy8gY2hlY2sgaWYgYWxs
IHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5zZXJ0
ZWQgaW50byAKKyAgICAvLyB0aGUgcGFyZW50IG5vZGUKKyAgICBpZiAoYWdnck5vZGUpIHsKKyAg
ICAgICAgVEludGVybVNlcXVlbmNlICZjaGlsZFNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdl
dFNlcXVlbmNlKCkgOworICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9
IGNoaWxkU2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwICE9IGNoaWxkU2VxdWVuY2VWZWN0b3IuZW5kKCk7IHArKykgeworICAgICAg
ICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBhbGxDb25zdGFudDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlc3QgZm9y
IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91cyBjb25z
dHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUgcmlnaHQg
ZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAorLy8KKy8vIFJldHVybnMg
MCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBvciB0eXBl
ZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Ig
b3AsIFRGdW5jdGlvbiogZm5DYWxsLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKG5vZGUg
PT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9k
ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgCisgICAgVFR5cGVMaXN0OjppdGVyYXRv
ciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAg
ICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5iZWdpbigpOworICAgIAorICAgIFRU
eXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAg
ICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJnOwor
ICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9w
TnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9
IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAgVElu
dGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYg
c3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxl
ZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVy
ZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAg
ICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAg
ICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLnR5cGUsIDEsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7
CisKKyAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewor
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29u
c3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAgICAg
aWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3Ry
dWN0b3I7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisgICAg
CisgICAgLy8KKyAgICAvLyBIYW5kbGUgbGlzdCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkg
OyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhl
IGNvbnN0cnVjdG9yCisgICAgLy8gaWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlu
cyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBh
cmFtZXRlcgorICAgIAorICAgIGludCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sg
b2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAg
ICAKKyAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNo
ZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAor
ICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisgICAg
Ly8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5
cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQo
KTsgcCsrLCBwYXJhbUNvdW50KyspIHsKKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAg
ICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFy
YW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlIGlmIChvcCA9
PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3Ry
dWN0KCpwLCAobWVtYmVyVHlwZXNbcGFyYW1Db3VudF0pLnR5cGUsIHBhcmFtQ291bnQrMSwgbm9k
ZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9
IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9k
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBp
bnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAg
ICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihj
b25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgIGlmIChjb25zdENvbnN0
cnVjdG9yKQorICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBj
b25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RD
b25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUp
Cit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOwor
ICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAg
ICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworICAgICAg
ICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAgICAgICAg
ICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExp
bmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJs
ZSwgIHR5cGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5l
KCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUs
ICB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0dXJuVmFsKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2RlLT5nZXRMaW5lKCkpOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCisvLyBGdW5jdGlvbiBmb3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24u
IENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVPcCB2YWx1ZQorLy8gZm9yIHRo
ZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiku
IEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cworLy8gdGhlIHBhcmFtZXRlciB0eXBlcyBjb3JyZWN0
bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFuZCBpcyBw
YXNzZWQgYSAKKy8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZlcnRlZCB0byBpbnQuCisvLwor
Ly8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZS4KKy8vCitU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUq
IHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSwg
Ym9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBuZXdOb2RlOworICAgIFRPcGVyYXRv
ciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVk
ZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMy
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoK
KyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoK
KyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoK
KyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0SW50Ogor
ICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50OworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAg
ICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAg
ICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEJvb2w7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIs
ICIiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwg
bm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIsICIiKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJl
IHN0aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2Ug
bmVlZCBvbmUsIGFkZCBvbmUuCisgICAgLy8KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAg
b3V0IGVhcmx5LgorICAgIGlmIChzdWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2Rl
LT5nZXRUeXBlKCkgPT0gKnR5cGUpKQorICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8v
IHNldEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25z
dHJ1Y3RvciwgYXMgbmVlZGVkLgorICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRl
T3BlcmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3Rz
IGZvciB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1
Y3RvcnMuIFJhaXNlcworLy8gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBk
b2VzIG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisv
LworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYg
dGhlIGV4cGVjdGVkIGFuZCB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8KK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBu
b2RlLCBUVHlwZSogdHlwZSwgaW50IHBhcmFtQ291bnQsIFRTb3VyY2VMb2MgbGluZSwgYm9vbCBz
dWJzZXQpCit7CisgICAgaWYgKCp0eXBlID09IG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgp
KSB7CisgICAgICAgIGlmIChzdWJzZXQpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Z2V0QXNU
eXBlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlwZWQoKSwgRU9wQ29uc3RydWN0U3RydWN0
LCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVj
dG9yIiwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAlZCBmcm9tICclcycgdG8gJyVzJyIsIHBh
cmFtQ291bnQsCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgIHJlY292
ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24g
cmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZlY3RvciBmaWVsZChzKSBi
ZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQgdmVjdG9yLgorLy8gSWYgb25seSBvbmUgY29tcG9u
ZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAodi54IG9yIHZbMF0gd2hlcmUgdiBpcyBhIGNvbnRh
bnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQgbm9kZSBpcworLy8gcmV0dXJuZWQsIGVsc2UgYW4g
YWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQgKGZvciB2Lnh5KS4gVGhlIGlucHV0IHRvIHRoaXMg
ZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRoZSBzeW1ib2wKKy8vIG5vZGUgb3IgaXQgY291bGQg
YmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFjY2Vzc2luZyBmaWVs
ZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUgb3IgY29sdW1uIG9mIAorLy8gYSBjb25zdGFudCBt
YXRyaXguCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFZlY3Rvck5v
ZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2Mg
bGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9k
ZSkgeworICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKKworICAgICAgICBpZiAoIXVuaW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3Ig
bWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2VkCisgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFs
aXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVuY3Rpb24iLCBsaW5lKTsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8gYmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3IgYW4g
YWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29uc3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVycm9y
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJF
cnJvciIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltm
aWVsZHMubnVtXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7
CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2Jq
ZWN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAg
ICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlb
ZmllbGRzLm9mZnNldHNbaV1dOworCisgICAgfSAKKyAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCksIGxpbmUpOwor
ICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
dGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBmcm9tIGEgY29uc3RhbnQgbWF0cml4LiBUaGUgdmFs
dWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJl
ZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVhY2ggY29sdW1uIG9mIGEgbWF0cml4IGlzIGEgdmVj
dG9yKS4gVGhlIGlucHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5
bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMgYSBjb25zdGFudCBtYXRyaXgpdGhhdCByZXByZXNl
bnRzIGEgCisvLyBjb25zdGFudCBtYXRyaXggb3IgaXQgY291bGQgYmUgdGhlIHRyZWUgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1hdHJpeCAocy5tMVswXSB3aGVyZSBzIGlzIGEgY29u
c3RhbnQgc3RydWN0dXJlKQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RNYXRyaXhOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKwor
ICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9
IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0
YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIsICIiKTsKKyAgICAgICAgcmVjb3Zl
cigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiB0eXBlZE5vZGU7
Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbGVtZW50IG9mIGFuIGFy
cmF5IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBhcnJheS4gVGhlIHZhbHVlcyBhcmUgcmV0cmll
dmVkIGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQgZm9y
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24g
Y291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKGFbMF0gd2hlcmUgYSBpcyBhIGNvbnN0YW50
IGFycmF5KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3RhbnQgYXJyYXkgb3IgaXQgY291bGQg
YmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IGFycmF5IChzLmExWzBd
IHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9k
ZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7CisgICAgVFR5cGUgYXJyYXlFbGVtZW50VHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKKyAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisKKyAgICBpZiAoaW5k
ZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBp
bmRleCk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKwor
ICAgIGludCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXpl
KCk7CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlv
biogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5p
b25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRU
eXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qg
b2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7
CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30K
KworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3Vs
YXIgZmllbGQgaW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJs
ZS4gCisvLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3By
aWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFn
Z3IKKy8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVl
cyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJz
ZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBl
ZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRUeXBlTGlzdCogZmllbGRzID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2RlOwor
ICAgIGludCBpbnN0YW5jZVNpemUgPSAwOworICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7Cisg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKworICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMtPnNp
emUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoKCpmaWVsZHMpW2luZGV4XS50eXBlLT5nZXRG
aWVsZE5hbWUoKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSAoKmZpZWxkcylbaW5kZXhdLnR5
cGUtPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0ZW1wQ29u
c3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENv
bnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICAgdHlwZWROb2Rl
ID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUs
IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFu
Z2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIiwgIiIpOwor
ICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0
dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYWxsIHN1cHBvcnRlZCBleHRl
bnNpb25zIHRvIGRpc2FibGUKKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmluaXRpYWxpemVFeHRl
bnNpb25CZWhhdmlvcigpCit7CisgICAgLy8KKyAgICAvLyBleGFtcGxlIGNvZGU6IGV4dGVuc2lv
bkJlaGF2aW9yWyJ0ZXN0Il0gPSBFQmhEaXNhYmxlOyAvLyB3aGVyZSAidGVzdCIgaXMgdGhlIG5h
bWUgb2YgCisgICAgLy8gc3VwcG9ydGVkIGV4dGVuc2lvbgorICAgIC8vCisgICAgZXh0ZW5zaW9u
QmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSJdID0gRUJoUmVxdWlyZTsKKyAgICBl
eHRlbnNpb25CZWhhdmlvclsiR0xfM0RMX2FycmF5X29iamVjdHMiXSA9IEVCaERpc2FibGU7Cit9
CisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNf
SU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAo
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250
ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KKyAgICAvLworICAgIEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIAorICAgIGlmIChH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAg
ICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRl
eHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0
KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRl
eHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEds
b2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJz
ZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJl
YWRQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAg
YXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNy
ZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1Nf
U2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNl
Q29udGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBz
cGVlZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9
IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dCgpCit7CisgICAgaWYg
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXgg
bm90IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRU
aHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBh
cnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwor
ICAgIGlmIChscFBhcnNlQ29udGV4dCkKKyAgICAgICAgZGVsZXRlIGxwUGFyc2VDb250ZXh0Owor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKK3sK
KyAgICBPU19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKKwor
ICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkg
eworICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
CisKKyAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7Cit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9QYXJzZUhl
bHBlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9j
b21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisjZGVmaW5l
IF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXworCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmgiCisKK3N0cnVjdCBUTWF0cml4RmllbGRzIHsKKyAgICBib29s
IHdob2xlUm93OworICAgIGJvb2wgd2hvbGVDb2w7CisgICAgaW50IHJvdzsKKyAgICBpbnQgY29s
OworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBFQmhSZXF1aXJlLAorICAgIEVCaEVuYWJsZSwK
KyAgICBFQmhXYXJuLAorICAgIEVCaERpc2FibGUKK30gVEJlaGF2aW9yOworCitzdHJ1Y3QgVFBy
YWdtYSB7CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWco
ZCkgeyB9CisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVnOworICAgIFRQcmFnbWFU
YWJsZSBwcmFnbWFUYWJsZTsKK307CisKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2
YXJpYWJsZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCisvLyB0
aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwu
CisvLworc3RydWN0IFRQYXJzZUNvbnRleHQgeworICAgIFRQYXJzZUNvbnRleHQoVFN5bWJvbFRh
YmxlJiBzeW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVTaExhbmd1YWdlIEwsIFRJbmZvU2lu
ayYgaXMpIDoKKyAgICAgICAgICAgIGludGVybWVkaWF0ZShpbnRlcm0pLCBzeW1ib2xUYWJsZShz
eW10KSwgaW5mb1NpbmsoaXMpLCBsYW5ndWFnZShMKSwgdHJlZVJvb3QoMCksCisgICAgICAgICAg
ICByZWNvdmVyZWRGcm9tRXJyb3IoZmFsc2UpLCBudW1FcnJvcnMoMCksIGxleEFmdGVyVHlwZShm
YWxzZSksIGxvb3BOZXN0aW5nTGV2ZWwoMCksCisgICAgICAgICAgICBpblR5cGVQYXJlbihmYWxz
ZSksIGNvbnRleHRQcmFnbWEodHJ1ZSwgZmFsc2UpIHsgIH0KKyAgICBUSW50ZXJtZWRpYXRlJiBp
bnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQorICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRo
ZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCisgICAgVEluZm9TaW5rJiBpbmZvU2lu
azsKKyAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZTsgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVu
dCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKKyAgICBUSW50ZXJtTm9kZSogdHJl
ZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVkCisgICAgYm9v
bCByZWNvdmVyZWRGcm9tRXJyb3I7ICAgICAvLyB0cnVlIGlmIGEgcGFyc2UgZXJyb3IgaGFzIG9j
Y3VycmVkLCBidXQgd2UgY29udGludWUgdG8gcGFyc2UKKyAgICBpbnQgbnVtRXJyb3JzOworICAg
IGJvb2wgbGV4QWZ0ZXJUeXBlOyAgICAgICAgICAgLy8gdHJ1ZSBpZiB3ZSd2ZSByZWNvZ25pemVk
IGEgdHlwZSwgc28gY2FuIG9ubHkgYmUgbG9va2luZyBmb3IgYW4gaWRlbnRpZmllcgorICAgIGlu
dCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAgLy8gMCBpZiBvdXRzaWRlIGFsbCBsb29wcworICAg
IGJvb2wgaW5UeXBlUGFyZW47ICAgICAgICAgICAgLy8gdHJ1ZSBpZiBpbiBwYXJlbnRoZXNlcywg
bG9va2luZyBvbmx5IGZvciBhbiBpZGVudGlmaWVyCisgICAgY29uc3QgVFR5cGUqIGN1cnJlbnRG
dW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQncyBj
dXJyZW50bHkgYmVpbmcgcGFyc2VkCisgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAv
LyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCisgICAgVE1hcDxUU3Ry
aW5nLCBUQmVoYXZpb3I+IGV4dGVuc2lvbkJlaGF2aW9yOworICAgIHZvaWQgaW5pdGlhbGl6ZUV4
dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICB2b2lkIENfREVDTCBlcnJvcihUU291cmNlTG9jLCBj
b25zdCBjaGFyICpzelJlYXNvbiwgY29uc3QgY2hhciAqc3pUb2tlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzekV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICBib29sIHJl
c2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7Cisg
ICAgdm9pZCByZWNvdmVyKCk7CisKKyAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRT
dHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5lKTsKKyAgICBib29s
IHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZp
ZWxkcyYsIGludCBsaW5lKTsKKyAgICB2b2lkIGFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKKyAgICB2b2lkIHVuYXJ5T3BF
cnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9p
ZCBiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBU
U3RyaW5nIHJpZ2h0KTsKKyAgICBib29sIHByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQ
cmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpOworICAgIGJvb2wgbFZhbHVlRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJv
b2wgY29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2Vy
RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBi
b29sIGdsb2JhbEVycm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0
b2tlbik7CisgICAgYm9vbCBjb25zdHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1O
b2RlKiwgVEZ1bmN0aW9uJiwgVE9wZXJhdG9yLCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXpl
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOworICAg
IGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBl
KTsKKyAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpOworICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCB2
b2lkRXJyb3JDaGVjayhpbnQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOwor
ICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soaW50LCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKKyAgICBi
b29sIGJvb2xFcnJvckNoZWNrKGludCwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNh
bXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0
IGNoYXIqIHJlYXNvbik7CisgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxl
ckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYg
dHlwZSk7CisgICAgYm9vbCBjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKTsKKyAgICBib29sIHBhcmFtRXJy
b3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1R
dWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50
IGxpbmUsIGNvbnN0IGNoYXIqKTsKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihp
bnQgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9v
bCBleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMCk7CisgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ3JOb2RlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1O
b2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIFRTb3VyY2VMb2MpOwor
ICAgIFRJbnRlcm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSog
YWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVj
dFN0cnVjdChUSW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBUU291cmNlTG9jLCBib29sIHN1YnNl
dCk7CisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9w
ZXJhdG9yLCBUSW50ZXJtTm9kZSosIFRTb3VyY2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVk
KiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50
ICwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5l
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5
cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgYm9vbCBhcnJheVNldE1heFNpemUoVEludGVybVN5bWJv
bCosIFRUeXBlKiwgaW50LCBib29sLCBUU291cmNlTG9jKTsKKyAgICBzdHJ1Y3QgVFByYWdtYSBj
b250ZXh0UHJhZ21hOworICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKKyAgICBib29sIEFmdGVyRU9G
OworfTsKKworaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltdLCBp
bnQgYXJnYywgVFBhcnNlQ29udGV4dCYpOwordm9pZCBQYVJlc2VydmVkV29yZCgpOworaW50IFBh
SWRlbnRPclR5cGUoVFN0cmluZyYgaWQsIFRQYXJzZUNvbnRleHQmLCBUU3ltYm9sKiYpOworaW50
IFBhUGFyc2VDb21tZW50KGludCAmbGluZW5vLCBUUGFyc2VDb250ZXh0Jik7Cit2b2lkIHNldElu
aXRpYWxTdGF0ZSgpOworCit0eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2lu
dGVyOworZXh0ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQo
KTsKKyNkZWZpbmUgR2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCisK
K3R5cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKK3sKKyAgICBUUGFyc2VDb250
ZXh0ICpscEdsb2JhbFBhcnNlQ29udGV4dDsKK30gVFRocmVhZFBhcnNlQ29udGV4dDsKKworI2Vu
ZGlmIC8vIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9Qb29sQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvUG9vbEFs
bG9jLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2MuaCIKKworI2lmbmRlZiBfTVNDX1ZFUgor
I2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCisKK09TX1RMU0luZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVY
OworCit2b2lkIEluaXRpYWxpemVHbG9iYWxQb29scygpCit7CisgICAgVFRocmVhZEdsb2JhbFBv
b2xzKiBnbG9iYWxQb29scz0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0
VExTVmFsdWUoUG9vbEluZGV4KSk7ICAgIAorICAgIGlmIChnbG9iYWxQb29scykKKyAgICAgICAg
cmV0dXJuOworCisgICAgVFBvb2xBbGxvY2F0b3IgKmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBuZXcg
VFBvb2xBbGxvY2F0b3IodHJ1ZSk7CisKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERh
dGEgPSBuZXcgVFRocmVhZEdsb2JhbFBvb2xzKCk7CisgICAgCisgICAgdGhyZWFkRGF0YS0+Z2xv
YmFsUG9vbEFsbG9jYXRvciA9IGdsb2JhbFBvb2xBbGxvY2F0b3I7CisgICAgICAgIAorICAgIE9T
X1NldFRMU1ZhbHVlKFBvb2xJbmRleCwgdGhyZWFkRGF0YSk7ICAgICAKKyAgICBnbG9iYWxQb29s
QWxsb2NhdG9yLT5wdXNoKCk7Cit9CisKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCkKK3sKKyAgICAv
LyBSZWxlYXNlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGlzIHRocmVhZC4KKyAgICBUVGhy
ZWFkR2xvYmFsUG9vbHMqIGdsb2JhbFBvb2xzPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9v
bHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsgICAgCisgICAgaWYgKCFnbG9iYWxQb29s
cykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucG9wQWxs
KCk7CisgICAgZGVsZXRlICZHbG9iYWxQb29sQWxsb2NhdG9yOyAgICAgICAKKyAgICBkZWxldGUg
Z2xvYmFsUG9vbHM7Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpCit7CisgICAgLy8g
QWxsb2NhdGUgYSBUTFMgaW5kZXguCisgICAgaWYgKChQb29sSW5kZXggPSBPU19BbGxvY1RMU0lu
ZGV4KCkpID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmVlUG9vbEluZGV4KCkKK3sKKyAgICAvLyBS
ZWxlYXNlIHRoZSBUTFMgaW5kZXguCisgICAgT1NfRnJlZVRMU0luZGV4KFBvb2xJbmRleCk7Cit9
CisKK1RQb29sQWxsb2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBUVGhy
ZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9v
bHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0
YS0+Z2xvYmFsUG9vbEFsbG9jYXRvcjsKK30KKwordm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9y
UHRyKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKQoreworICAgIFRUaHJlYWRHbG9iYWxQ
b29scyogdGhyZWFkRGF0YSA9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dl
dFRMU1ZhbHVlKFBvb2xJbmRleCkpOworCisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9j
YXRvciA9IHBvb2xBbGxvY2F0b3I7Cit9CisKKy8vCisvLyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9u
YWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNzLCB3aGljaAorLy8gaXMgZG9jdW1lbnRl
ZCBpbiBQb29sQWxsb2MuaC4KKy8vCitUUG9vbEFsbG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoYm9v
bCBnLCBpbnQgZ3Jvd3RoSW5jcmVtZW50LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKKyAg
ICBnbG9iYWwoZyksCisgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1l
bnQoYWxsb2NhdGlvbkFsaWdubWVudCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0
KDApLAorICAgIG51bUNhbGxzKDApCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBhbGxvdyBwYWdl
IHNpemVzIHdlIGtub3cgYXJlIHNtYWxsZXIgdGhhbiBhbGwgY29tbW9uCisgICAgLy8gT1MgcGFn
ZSBzaXplcy4KKyAgICAvLworICAgIGlmIChwYWdlU2l6ZSA8IDQqMTAyNCkKKyAgICAgICAgcGFn
ZVNpemUgPSA0KjEwMjQ7CisKKyAgICAvLworICAgIC8vIEEgbGFyZ2UgY3VycmVudFBhZ2VPZmZz
ZXQgaW5kaWNhdGVzIGEgbmV3IHBhZ2UgbmVlZHMgdG8KKyAgICAvLyBiZSBvYnRhaW5lZCB0byBh
bGxvY2F0ZSBtZW1vcnkuCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXpl
OworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgYWxpZ25tZW50IHRvIGJlIGF0IGxlYXN0IHBvaW50
ZXIgYWxpZ25lZCBhbmQKKyAgICAvLyBwb3dlciBvZiAyLgorICAgIC8vCisgICAgc2l6ZV90IG1p
bkFsaWduID0gc2l6ZW9mKHZvaWQqKTsKKyAgICBhbGlnbm1lbnQgJj0gfihtaW5BbGlnbiAtIDEp
OworICAgIGlmIChhbGlnbm1lbnQgPCBtaW5BbGlnbikKKyAgICAgICAgYWxpZ25tZW50ID0gbWlu
QWxpZ247CisgICAgc2l6ZV90IGEgPSAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KQorICAg
ICAgICBhIDw8PSAxOworICAgIGFsaWdubWVudCA9IGE7CisgICAgYWxpZ25tZW50TWFzayA9IGEg
LSAxOworCisgICAgLy8KKyAgICAvLyBBbGlnbiBoZWFkZXIgc2tpcAorICAgIC8vCisgICAgaGVh
ZGVyU2tpcCA9IG1pbkFsaWduOworICAgIGlmIChoZWFkZXJTa2lwIDwgc2l6ZW9mKHRIZWFkZXIp
KSB7CisgICAgICAgIGhlYWRlclNraXAgPSAoc2l6ZW9mKHRIZWFkZXIpICsgYWxpZ25tZW50TWFz
aykgJiB+YWxpZ25tZW50TWFzazsKKyAgICB9Cit9CisKK1RQb29sQWxsb2NhdG9yOjp+VFBvb2xB
bGxvY2F0b3IoKQoreworICAgIGlmICghZ2xvYmFsKSB7CisgICAgICAgIC8vCisgICAgICAgIC8v
IFRoZW4gd2Uga25vdyB0aGF0IHRoaXMgb2JqZWN0IGlzIG5vdCBiZWluZyAKKyAgICAgICAgLy8g
YWxsb2NhdGVkIGFmdGVyIG90aGVyLCBnbG9iYWxseSBzY29wZWQgb2JqZWN0cworICAgICAgICAv
LyB0aGF0IGRlcGVuZCBvbiBpdC4gIFNvIHdlIGNhbiBkZWxldGUgdGhlICJpbiB1c2UiIG1lbW9y
eS4KKyAgICAgICAgLy8KKyAgICAgICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAgICAgICAg
dEhlYWRlciogbmV4dCA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgICAgICBpblVzZUxp
c3QtPn50SGVhZGVyKCk7CisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oaW5Vc2VMaXN0KTsKKyAgICAgICAgICAgIGluVXNlTGlzdCA9IG5leHQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGZyZWUgbGlzdCBt
ZW1vcnkgLSBpdCBjYW4ndCBiZSBiZWluZworICAgIC8vIChjb3JyZWN0bHkpIHJlZmVyZW5jZWQs
IHdoZXRoZXIgdGhlIHBvb2wgYWxsb2NhdG9yIHdhcworICAgIC8vIGdsb2JhbCBvciBub3QuICBX
ZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJlLCBiZWNhdXNl
IHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBsYWNlZCBpbnRv
IHRoZSBmcmVlIGxpc3QuCisgICAgLy8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsKKyAgICAgICAg
dEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVsZXRlIFtdIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxpc3QgPSBuZXh0
OworICAgIH0KK30KKworLy8gU3VwcG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNpZ25lZCBjaGFy
IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOworY29uc3QgdW5zaWduZWQg
Y2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2NvbnN0IHVuc2ln
bmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7CisKKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tT
aXplID0gMTY7CisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9j
a1NpemUgPSAwOworI2VuZGlmCisKKy8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFyZCBibG9jayBm
b3IgZGFtYWdlCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVk
IGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkg
Y29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGd1YXJkQmxvY2tTaXplOyB4Kysp
IHsKKyAgICAgICAgaWYgKGJsb2NrTWVtW3hdICE9IHZhbCkgeworICAgICAgICAgICAgY2hhciBh
c3NlcnRNc2dbODBdOworCisgICAgICAgICAgICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0
IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxwZnVsLgorICAgICAgICAgICAgc3By
aW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAldSBieXRlIGFsbG9jYXRpb24g
YXQgMHglcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsK
KyAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9j
ayIpOworICAgICAgICB9CisgICAgfQorfQorCisKK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnB1c2go
KQoreworICAgIHRBbGxvY1N0YXRlIHN0YXRlID0geyBjdXJyZW50UGFnZU9mZnNldCwgaW5Vc2VM
aXN0IH07CisKKyAgICBzdGFjay5wdXNoX2JhY2soc3RhdGUpOworICAgICAgICAKKyAgICAvLwor
ICAgIC8vIEluZGljYXRlIHRoZXJlIGlzIG5vIGN1cnJlbnQgcGFnZSB0byBhbGxvY2F0ZSBmcm9t
LgorICAgIC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKK30KKworLy8KKy8v
IERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25z
CisvLyB0aGF0IGhhdmUgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgcHVzaCgpLCBvciBzaW5jZSB0
aGUKKy8vIGxhc3QgcG9wKCksIG9yIHNpbmNlIHRoZSBvYmplY3QncyBjcmVhdGlvbi4KKy8vCisv
LyBUaGUgZGVhbGxvY2F0ZWQgcGFnZXMgYXJlIHNhdmVkIGZvciBmdXR1cmUgYWxsb2NhdGlvbnMu
CisvLwordm9pZCBUUG9vbEFsbG9jYXRvcjo6cG9wKCkKK3sKKyAgICBpZiAoc3RhY2suc2l6ZSgp
IDwgMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdEhlYWRlciogcGFnZSA9IHN0YWNrLmJhY2so
KS5wYWdlOworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gc3RhY2suYmFjaygpLm9mZnNldDsKKwor
ICAgIHdoaWxlIChpblVzZUxpc3QgIT0gcGFnZSkgeworICAgICAgICAvLyBpbnZva2UgZGVzdHJ1
Y3RvciB0byBmcmVlIGFsbG9jYXRpb24gbGlzdAorICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVy
KCk7CisgICAgICAgIAorICAgICAgICB0SGVhZGVyKiBuZXh0SW5Vc2UgPSBpblVzZUxpc3QtPm5l
eHRQYWdlOworICAgICAgICBpZiAoaW5Vc2VMaXN0LT5wYWdlQ291bnQgPiAxKQorICAgICAgICAg
ICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaW5Vc2VMaXN0LT5uZXh0UGFnZSA9IGZyZWVMaXN0OworICAg
ICAgICAgICAgZnJlZUxpc3QgPSBpblVzZUxpc3Q7CisgICAgICAgIH0KKyAgICAgICAgaW5Vc2VM
aXN0ID0gbmV4dEluVXNlOworICAgIH0KKworICAgIHN0YWNrLnBvcF9iYWNrKCk7Cit9CisKKy8v
CisvLyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0
aW9ucworLy8gdGhhdCBoYXZlIG9jY3VycmVkLgorLy8KK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnBv
cEFsbCgpCit7CisgICAgd2hpbGUgKHN0YWNrLnNpemUoKSA+IDApCisgICAgICAgIHBvcCgpOwor
fQorCit2b2lkKiBUUG9vbEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKQorewor
ICAgIC8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIGFsbCBhbGxvY2F0aW9ucyBhcmUg
YnJhY2tldGVkIGJ5CisgICAgLy8gdGhlbTogW2d1YXJkYmxvY2tdW2FsbG9jYXRpb25dW2d1YXJk
YmxvY2tdLiAgbnVtQnl0ZXMgaXMgaG93CisgICAgLy8gbXVjaCBtZW1vcnkgdGhlIGNhbGxlciBh
c2tlZCBmb3IuICBhbGxvY2F0aW9uU2l6ZSBpcyB0aGUgdG90YWwKKyAgICAvLyBzaXplIGluY2x1
ZGluZyBndWFyZCBibG9ja3MuICBJbiByZWxlYXNlIGJ1aWxkLAorICAgIC8vIGd1YXJkQmxvY2tT
aXplPTAgYW5kIHRoaXMgYWxsIGdldHMgb3B0aW1pemVkIGF3YXkuCisgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gVEFsbG9jYXRpb246OmFsbG9jYXRpb25TaXplKG51bUJ5dGVzKTsKKyAgICAK
KyAgICAvLworICAgIC8vIEp1c3Qga2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisg
ICAgLy8KKyAgICArK251bUNhbGxzOworICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7CisKKyAg
ICAvLworICAgIC8vIERvIHRoZSBhbGxvY2F0aW9uLCBtb3N0IGxpa2VseSBjYXNlIGZpcnN0LCBm
b3IgZWZmaWNpZW5jeS4KKyAgICAvLyBUaGlzIHN0ZXAgY291bGQgYmUgbW92ZWQgdG8gYmUgaW5s
aW5lIHNvbWV0aW1lLgorICAgIC8vCisgICAgaWYgKGN1cnJlbnRQYWdlT2Zmc2V0ICsgYWxsb2Nh
dGlvblNpemUgPD0gcGFnZVNpemUpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2FmZSB0byBh
bGxvY2F0ZSBmcm9tIGN1cnJlbnRQYWdlT2Zmc2V0LgorICAgICAgICAvLworICAgICAgICB1bnNp
Z25lZCBjaGFyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5V
c2VMaXN0KSArIGN1cnJlbnRQYWdlT2Zmc2V0OworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCAr
PSBhbGxvY2F0aW9uU2l6ZTsKKyAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgPSAoY3VycmVudFBh
Z2VPZmZzZXQgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworCisgICAgICAgIHJl
dHVybiBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxpc3QsIG1lbW9yeSwgbnVtQnl0ZXMpOwor
ICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXAgPiBwYWdlU2l6ZSkg
eworICAgICAgICAvLworICAgICAgICAvLyBEbyBhIG11bHRpLXBhZ2UgYWxsb2NhdGlvbi4gIERv
bid0IG1peCB0aGVzZSB3aXRoIHRoZSBvdGhlcnMuCisgICAgICAgIC8vIFRoZSBPUyBpcyBlZmZp
Y2llbnQgYW5kIGFsbG9jYXRpbmcgYW5kIGZyZWUtaW5nIG11bHRpcGxlIHBhZ2VzLgorICAgICAg
ICAvLworICAgICAgICBzaXplX3QgbnVtQnl0ZXNUb0FsbG9jID0gYWxsb2NhdGlvblNpemUgKyBo
ZWFkZXJTa2lwOworICAgICAgICB0SGVhZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRI
ZWFkZXIqPig6Om5ldyBjaGFyW251bUJ5dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5
ID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50
LW5ldyB0byBpbml0aWFsaXplIGhlYWRlcgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGlu
VXNlTGlzdCwgKG51bUJ5dGVzVG9BbGxvYyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7Cisg
ICAgICAgIGluVXNlTGlzdCA9IG1lbW9yeTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9
IHBhZ2VTaXplOyAgLy8gbWFrZSBuZXh0IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UK
KworICAgICAgICAvLyBObyBndWFyZCBibG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMg
KHlldCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihtZW1vcnkpICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBOZWVkIGEgc2ltcGxlIHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAg
IHRIZWFkZXIqIG1lbW9yeTsKKyAgICBpZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0g
ZnJlZUxpc3Q7CisgICAgICAgIGZyZWVMaXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3
IGNoYXJbcGFnZVNpemVdKTsKKyAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6
ZSBoZWFkZXIKKyAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5V
c2VMaXN0ID0gbWVtb3J5OworICAgIAorICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBj
dXJyZW50UGFnZU9mZnNldCA9IChoZWFkZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1l
bnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0
aW9uKGluVXNlTGlzdCwgcmV0LCBudW1CeXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBh
bGxvY2F0aW9ucyBpbiBhIGxpc3QgZm9yIGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2gu
CisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZv
ciAoY29uc3QgVEFsbG9jYXRpb24qIGFsbG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBh
bGxvYy0+cHJldkFsbG9jKQorICAgICAgICBhbGxvYy0+Y2hlY2soKTsKK30KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvUG9vbEFsbG9jLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9Qb29sQWxsb2Mu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGls
ZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjk2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIF9QT09MQUxMT0NfSU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxM
T0NfSU5DTFVERURfCisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBk
ZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2NrIHNhbml0eSBjaGVja2luZworI2VuZGlmCisKKy8v
CisvLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRv
IGVmZmljaWVudGx5CisvLyBhbGxvY2F0ZSBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0
cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhlIAorLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUg
bm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRlZCwgYnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVs
eSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4KKy8vCisvLyBUaGlzIHNpbXVsdGFuZW91c2x5Cisv
LworLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNp
ZW50OyB0aGUKKy8vICAgICB0eXBpY2FsIGFsbG9jYXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29t
cGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2YgZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24u
CisvLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9mIHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEg
bGFyZ2UgY2xhc3Mgb2YgbGVha3MuCisvLworLy8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2Ug
dGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5nIHRoZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUg
bWV0aG9kcy4KKy8vCisvLyBTVEwgY29udGFpbmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5
IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgorLy8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vj
b25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KKy8vCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBn
dWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sgZWFjaCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4g
IElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBibG9ja3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5z
dGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFueSBpbXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9j
YXRpb24geworcHVibGljOgorICAgIFRBbGxvY2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBj
aGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2ID0gMCkgOgorICAgICAgICBzaXplKHNpemUpLCBt
ZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJy
YWNrZXRlZDoKKyAgICAgICAgLy8gICAgW2FsbG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJs
b2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJsb2NrXQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJl
IGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9ja1NpemUpLi4uLCBidXQgdGhhdAorICAgICAgICAv
LyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgd2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0
cywKKyAgICAgICAgLy8gZXZlbiB3aXRoIHRoZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgbWVtc2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdp
blZhbCwgZ3VhcmRCbG9ja1NpemUpOworICAgICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJE
YXRhRmlsbCwgICAgICAgc2l6ZSk7CisgICAgICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRC
bG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6ZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lk
IGNoZWNrKCkgY29uc3QgeworICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1
YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICBjaGVja0d1YXJkQmxvY2socG9z
dEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgImFmdGVyIik7CisgICAgfQorCisgICAgdm9p
ZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVl
ZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZmZXIgb2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3Vy
IHRyYWNraW5nIGRhdGEuCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUo
c2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmV0dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUg
KyBoZWFkZXJTaXplKCk7CisgICAgfQorCisgICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcg
YnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEgYnVmZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5z
aWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlvbih1bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAg
IHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgY2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1
bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBG
aW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBi
dWZmZXIKKyAgICB1bnNpZ25lZCBjaGFyKiBwcmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0g
KyBoZWFkZXJTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7
IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRCbG9ja1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFy
KiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXpl
X3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQor
ICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxs
b2NhdGlvbiAocHRzIHRvIGhlYWRlcikKKyAgICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAg
ICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRoZSBjaGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZD
KysgNi4wCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFs
OworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAg
Y29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXNlckRhdGFGaWxsOworCisgICAgY29uc3Qgc3Rh
dGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxp
bmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9u
KTsgfQorI2Vsc2UKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1
cm4gMDsgfQorI2VuZGlmCit9OworCisvLworLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAg
T25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5nIGFuZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwg
YW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBUaGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJl
cG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9yIHVzZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFj
a3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5u
aW5nCisvLyBvZiBlYWNoIGFsbG9jYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBP
Uy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMKKy8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJ
bmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNl
LgorLy8KKy8vIFRoZSAicGFnZSBzaXplIiB1c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gs
IHRoZSB1bmRlcmx5aW5nIE9TCisvLyBwYWdlIHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91
dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBzZXQgb2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9z
dCBvcHRpbWFsLgorLy8KK2NsYXNzIFRQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9v
bEFsbG9jYXRvcihib29sIGdsb2JhbCA9IGZhbHNlLCBpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCox
MDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKKworICAgIC8vCisgICAgLy8gRG9u
J3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBw
b3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2NhdG9yKCk7CisKKyAgICAvLworICAgIC8vIENh
bGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVtb3J5IHRvby4gIERv
ZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgor
ICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAgICAvLworICAgIC8vIENhbGwgcG9wKCkgdG8g
ZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHB1c2goKSwK
KyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxsIG1lbW9yeSBzaW5j
ZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgdm9pZCBwb3AoKTsKKworICAgIC8vCisg
ICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkLgorICAgIC8v
CisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBhbGxvY2F0ZSgpIHRv
IGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1lbW9yeQorICAgIC8v
IGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2ludGVyIHRvICdudW1C
eXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IG51bUJ5
dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0ZS4gIFRoZSBwb2lu
dCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAvLyBkZWFsbG9jYXRpb24gY2FuIGJlIHNraXBw
ZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAorICAgIC8vIG9mIHVzZSBpcyB0byBz
aW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQorICAgIC8vIGJ5IGNh
bGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkgbGVhayBwcm9ibGVt
cy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCB0SGVhZGVyOworICAg
IAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAgICAgdEhlYWRlcih0SGVhZGVyKiBuZXh0UGFn
ZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAgICAg
bGFzdEFsbG9jYXRpb24oMCksCisjZW5kaWYKKyAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdl
KSwKKyAgICAgICAgICAgIHBhZ2VDb3VudChwYWdlQ291bnQpIHsgfQorCisgICAgICAgIH50SGVh
ZGVyKCkgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAgICAgaWYgKGxhc3RBbGxvY2F0
aW9uKQorICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9uLT5jaGVja0FsbG9jTGlzdCgpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB0SGVhZGVyKiBuZXh0UGFnZTsKKyAgICAgICAg
c2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgVEFsbG9jYXRp
b24qIGxhc3RBbGxvY2F0aW9uOworI2VuZGlmCisgICAgfTsKKworICAgIHN0cnVjdCB0QWxsb2NT
dGF0ZSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQ7CisgICAgICAgIHRIZWFkZXIqIHBhZ2U7Cisg
ICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRBbGxvY1N0YXRlPiB0QWxsb2NTdGFjazsK
KworICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFuZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1
YXJkIGJsb2NrcworICAgIHZvaWQqIGluaXRpYWxpemVBbGxvY2F0aW9uKHRIZWFkZXIqIGJsb2Nr
LCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBudW1CeXRlcykgeworI2lmZGVmIEdVQVJE
X0JMT0NLUworICAgICAgICBuZXcobWVtb3J5KSBUQWxsb2NhdGlvbihudW1CeXRlcywgbWVtb3J5
LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOworICAgICAgICBibG9jay0+bGFzdEFsbG9jYXRpb24g
PSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4obWVtb3J5KTsKKyNlbmRpZgorICAgICAg
ICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBhd2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBu
b3QgZGVmaW5lZC4KKyAgICAgICAgcmV0dXJuIFRBbGxvY2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9u
KG1lbW9yeSk7CisgICAgfQorCisgICAgYm9vbCBnbG9iYWw7ICAgICAgICAgICAgLy8gc2hvdWxk
IGJlIHRydWUgaWYgdGhpcyBvYmplY3QgaXMgZ2xvYmFsbHkgc2NvcGVkCisgICAgc2l6ZV90IHBh
Z2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUwor
ICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3
aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBn
cmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKKyAgICBzaXplX3QgYWxpZ25t
ZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5
IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCisg
ICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGlu
VXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8g
bGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlz
dCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCisgICAgdEFsbG9jU3RhY2sgc3Rh
Y2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9u
IHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rp
bmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRl
cmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9y
PShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQg
YWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCit9OworCisKKy8vCisvLyBUaGVyZSBjb3Vs
ZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKKy8vIGRp
ZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AK
Ky8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KKy8vCit0
eXBlZGVmIFRQb29sQWxsb2NhdG9yKiBQb29sQWxsb2NhdG9yUG9pbnRlcjsKK2V4dGVybiBUUG9v
bEFsbG9jYXRvciYgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpOworI2RlZmluZSBHbG9iYWxQb29s
QWxsb2NhdG9yIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKQorCisKK3N0cnVjdCBUVGhyZWFkR2xv
YmFsUG9vbHMKK3sKKyAgICBUUG9vbEFsbG9jYXRvciogZ2xvYmFsUG9vbEFsbG9jYXRvcjsKK307
CisKK3ZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihUUG9vbEFsbG9jYXRvciogcG9vbEFs
bG9jYXRvcik7CisKKy8vCisvLyBUaGlzIFNUTCBjb21wYXRpYmxlIGFsbG9jYXRvciBpcyBpbnRl
bmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxvY2F0b3IKKy8vIHBhcmFtZXRlciB0byB0ZW1wbGF0
aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2ZWN0b3IgYW5kIG1hcC4KKy8vCisvLyBJdCB3aWxs
IHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRpb24sIGFuZCBub3QKKy8vIGRvIGFueSBkZWFsbG9j
YXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRlc3RydWN0aW9uLgorLy8KK3RlbXBsYXRlPGNsYXNz
IFQ+CitjbGFzcyBwb29sX2FsbG9jYXRvciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0
eXBlZGVmIFQqIHBvaW50ZXI7CisgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOwor
ICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVm
ZXJlbmNlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOworCisgICAgdGVtcGxhdGU8Y2xhc3Mg
T3RoZXI+IAorICAgIHN0cnVjdCByZWJpbmQgeworICAgICAgICB0eXBlZGVmIHBvb2xfYWxsb2Nh
dG9yPE90aGVyPiBvdGhlcjsKKyAgICB9OworICAgIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2Ug
eCkgY29uc3QgeyByZXR1cm4gJng7IH0KKyAgICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3Rf
cmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9CisKKyAgICBwb29sX2FsbG9jYXRvcigp
IDogYWxsb2NhdG9yKEdsb2JhbFBvb2xBbGxvY2F0b3IpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9y
KFRQb29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcihhKSB7IH0KKyAgICBwb29sX2FsbG9jYXRv
cihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgcCkgOiBhbGxvY2F0b3IocC5hbGxvY2F0b3IpIHsg
fQorCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3Qg
cG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6IGFsbG9jYXRvcihwLmdldEFsbG9jYXRvcigpKSB7
IH0KKworICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsgCisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBz
aXplb2YoVCkpKTsKKyAgICB9CisgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29u
c3Qgdm9pZCopIHsgCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdl
dEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKKyAgICB9CisKKyAgICB2b2lk
IGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkgeyB9CisgICAgdm9pZCBkZWFsbG9jYXRlKHBv
aW50ZXIsIHNpemVfdHlwZSkgeyB9CisKKyAgICBwb2ludGVyIF9DaGFyYWxsb2Moc2l6ZV90IG4p
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9y
KCkuYWxsb2NhdGUobikpOworICAgIH0KKworICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwg
Y29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0KKyAgICB2b2lkIGRlc3Ry
b3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0g
JnJocy5nZXRBbGxvY2F0b3IoKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwb29sX2Fs
bG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRB
bGxvY2F0b3IoKTsgfQorCisgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLyBzaXplb2YoVCk7IH0KKyAgICBzaXplX3R5cGUg
bWF4X3NpemUoaW50IHNpemUpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
LTEpIC8gc2l6ZTsgfQorCisgICAgdm9pZCBzZXRBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEp
IHsgYWxsb2NhdG9yID0gKmE7IH0KKyAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUUG9vbEFsbG9j
YXRvciYgYWxsb2NhdG9yOworfTsKKworI2VuZGlmIC8vIF9QT09MQUxMT0NfSU5DTFVERURfCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1F1YWxpZmllckFs
aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRBbGl2ZVRyYXZlcnNlciA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUQWxpdmVUcmF2ZXJzZXIoVFF1YWxpZmllciBx
KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgZm91bmQoZmFs
c2UpLCBxdWFsaWZpZXIocSkKKyAgICB7CisgICAgfQorCisJYm9vbCB3YXNGb3VuZCgpIHsgcmV0
dXJuIGZvdW5kOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGZvdW5kOworICAgIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyOworCisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Cisg
ICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOworfTsKKwor
Ly8KKy8vIFJlcG9ydCB3aGV0aGVyIG9yIG5vdCBhIHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBxdWFs
aWZpZXIgdHlwZQorLy8gaXMgZ3VhcmFudGVlZCB3cml0dGVuLiAgTm90IGFsd2F5cyBwb3NzaWJs
ZSB0byBkZXRlcm1pbmUgaWYKKy8vIGl0IGlzIHdyaXR0ZW4gY29uZGl0aW9uYWxseS4KKy8vCisv
LyA/PyBJdCBkb2VzIG5vdCBkbyB0aGlzIHdlbGwgeWV0LCB0aGlzIGlzIGp1c3QgYSBwbGFjZSBo
b2xkZXIKKy8vIHRoYXQgc2ltcGx5IGRldGVybWluZXMgaWYgaXQgd2FzIHJlZmVyZW5jZSBhdCBh
bGwsIGFueXdoZXJlLgorLy8KK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJtTm9kZSogbm9k
ZSwgVFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgVEFsaXZlVHJhdmVyc2VyIGl0KHF1YWxp
Zmllcik7CisKKyAgICBpZiAobm9kZSkKKyAgICAgICAgbm9kZS0+dHJhdmVyc2UoJml0KTsKKwor
ICAgIHJldHVybiBpdC53YXNGb3VuZCgpOworfQorCit2b2lkIFRBbGl2ZVRyYXZlcnNlcjo6dmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICAvLworICAgIC8vIElmIGl0J3Mg
d2hhdCB3ZSdyZSBsb29raW5nIGZvciwgcmVjb3JkIGl0LgorICAgIC8vCisgICAgaWYgKG5vZGUt
PmdldFF1YWxpZmllcigpID09IHF1YWxpZmllcikKKyAgICAgICAgZm91bmQgPSB0cnVlOworfQor
Citib29sIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgcHJlVmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaWYgKHdhc0ZvdW5kKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCitib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUqIHJvb3QsIFRR
dWFsaWZpZXIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxl
ci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKKwor
Ly8KKy8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4K
Ky8vCisKK2NsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVi
bGljOgorCVJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
KQorCXsKKwl9CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jv
b2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5v
ZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVU
cmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAg
ZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxl
dGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBu
b2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQor
CisvLworLy8gRW50cnkgcG9pbnQuCisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVy
bU5vZGUqIHJvb3QpCit7CisgICAgUmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNl
KCZpdCk7Cit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGls
ZXIvUmVtb3ZlVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9SZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9k
ZXMoVEludGVybU5vZGUqKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
Y29tcGlsZXIvU2hIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2NvbXBpbGVyL1NoSGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1NoSGFuZGxlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTM5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TSEhBTkRMRV9J
TkNMVURFRF8KKyNkZWZpbmUgX1NISEFORExFX0lOQ0xVREVEXworCisvLworLy8gTWFjaGluZSBp
bmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMKKy8vIHNlbnQg
YXMgU2hIYW5kbGUgdG8gdGhlIGRyaXZlci4KKy8vCisvLyBUaGlzIHNob3VsZCBub3QgYmUgaW5j
bHVkZWQgYnkgZHJpdmVyIGNvZGUuCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBUQ29tcGlsZXI7
CitjbGFzcyBUTGlua2VyOworY2xhc3MgVFVuaWZvcm1NYXA7CisKKworLy8KKy8vIFRoZSBiYXNl
IGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCisvLwor
Y2xhc3MgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVFNoSGFuZGxlQmFzZSgpIHsgfQor
ICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2UoKSB7IH0KKyAgICB2aXJ0dWFsIFRDb21waWxlciog
Z2V0QXNDb21waWxlcigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRMaW5rZXIqIGdldEFz
TGlua2VyKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVFVuaWZvcm1NYXAqIGdldEFzVW5p
Zm9ybU1hcCgpIHsgcmV0dXJuIDA7IH0KK307CisKKy8vCisvLyBUaGUgYmFzZSBjbGFzcyBmb3Ig
dGhlIG1hY2hpbmUgZGVwZW5kZW50IGxpbmtlciB0byBkZXJpdmUgZnJvbQorLy8gZm9yIG1hbmFn
aW5nIHdoZXJlIHVuaWZvcm1zIGxpdmUuCisvLworY2xhc3MgVFVuaWZvcm1NYXAgOiBwdWJsaWMg
VFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVFVuaWZvcm1NYXAoKSB7IH0KKyAgICB2aXJ0
dWFsIH5UVW5pZm9ybU1hcCgpIHsgfQorICAgIHZpcnR1YWwgVFVuaWZvcm1NYXAqIGdldEFzVW5p
Zm9ybU1hcCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGludCBnZXRMb2NhdGlvbihj
b25zdCBjaGFyKiBuYW1lKSA9IDA7ICAgIAorICAgIHZpcnR1YWwgVEluZm9TaW5rJiBnZXRJbmZv
U2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworfTsK
K2NsYXNzIFRJbnRlcm1Ob2RlOworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBtYWNo
aW5lIGRlcGVuZGVudCBjb21waWxlciB0byBkZXJpdmUgZnJvbQorLy8gZm9yIG1hbmFnaW5nIG9i
amVjdCBjb2RlIGZyb20gdGhlIGNvbXBpbGUuCisvLworY2xhc3MgVENvbXBpbGVyIDogcHVibGlj
IFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRDb21waWxlcihFU2hMYW5ndWFnZSBsLCBF
U2hTcGVjIHMpIDogbGFuZ3VhZ2UobCksIHNwZWMocyksIGhhdmVWYWxpZE9iamVjdENvZGUoZmFs
c2UpIHsgfQorICAgIHZpcnR1YWwgflRDb21waWxlcigpIHsgfQorICAgIEVTaExhbmd1YWdlIGdl
dExhbmd1YWdlKCkgeyByZXR1cm4gbGFuZ3VhZ2U7IH0KKyAgICB2aXJ0dWFsIFRJbmZvU2luayYg
Z2V0SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQorCisgICAgdmlydHVhbCBib29sIGNv
bXBpbGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKworICAgIHZpcnR1YWwgVENvbXBpbGVyKiBn
ZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBsaW5rYWJs
ZSgpIHsgcmV0dXJuIGhhdmVWYWxpZE9iamVjdENvZGU7IH0KKworICAgIFRJbmZvU2luayBpbmZv
U2luazsKK3Byb3RlY3RlZDoKKyAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZTsKKyAgICBFU2hTcGVj
IHNwZWM7CisgICAgYm9vbCBoYXZlVmFsaWRPYmplY3RDb2RlOworfTsKKworLy8KKy8vIExpbmsg
b3BlcmF0aW9ucyBhcmUgYmFzZSBvbiBhIGxpc3Qgb2YgY29tcGlsZSByZXN1bHRzLi4uCisvLwor
dHlwZWRlZiBUVmVjdG9yPFRDb21waWxlcio+IFRDb21waWxlckxpc3Q7Cit0eXBlZGVmIFRWZWN0
b3I8VFNoSGFuZGxlQmFzZSo+IFRIYW5kbGVMaXN0OworCisvLworLy8gVGhlIGJhc2UgY2xhc3Mg
Zm9yIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBsaW5rZXIgdG8gZGVyaXZlIGZyb20KKy8vIHRvIG1h
bmFnZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUuCisvLworCitjbGFzcyBUTGlua2VyIDogcHVi
bGljIFRTaEhhbmRsZUJhc2UgeworcHVibGljOgorICAgIFRMaW5rZXIoRVNoRXhlY3V0YWJsZSBl
KSA6IAorICAgICAgICBleGVjdXRhYmxlKGUpLCAKKyAgICAgICAgaGF2ZVJldHVybmFibGVPYmpl
Y3RDb2RlKGZhbHNlKSwKKyAgICAgICAgYXBwQXR0cmlidXRlQmluZGluZ3MoMCksCisgICAgICAg
IGZpeGVkQXR0cmlidXRlQmluZGluZ3MoMCksCisgICAgICAgIGV4Y2x1ZGVkQXR0cmlidXRlcygw
KSwKKyAgICAgICAgZXhjbHVkZWRDb3VudCgwKSwKKyAgICAgICAgdW5pZm9ybUJpbmRpbmdzKDAp
IHsgfQorICAgIHZpcnR1YWwgVExpbmtlciogZ2V0QXNMaW5rZXIoKSB7IHJldHVybiB0aGlzOyB9
CisgICAgdmlydHVhbCB+VExpbmtlcigpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBsaW5rKFRDb21w
aWxlckxpc3QmLCBUVW5pZm9ybU1hcCopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbGluayhUSGFu
ZGxlTGlzdCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFwcEF0dHJp
YnV0ZUJpbmRpbmdzKGNvbnN0IFNoQmluZGluZ1RhYmxlKiB0KSAgIHsgYXBwQXR0cmlidXRlQmlu
ZGluZ3MgPSB0OyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkQXR0cmlidXRlQmluZGluZ3Mo
Y29uc3QgU2hCaW5kaW5nVGFibGUqIHQpIHsgZml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyA9IHQ7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0cmlidXRlQmluZGluZ3MoU2hCaW5kaW5nVGFibGUgY29u
c3QgKip0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEV4Y2x1ZGVkQXR0cmlidXRl
cyhjb25zdCBpbnQqIGF0dHJpYnV0ZXMsIGludCBjb3VudCkgeyBleGNsdWRlZEF0dHJpYnV0ZXMg
PSBhdHRyaWJ1dGVzOyBleGNsdWRlZENvdW50ID0gY291bnQ7IH0KKyAgICB2aXJ0dWFsIFNoQmlu
ZGluZ1RhYmxlKiBnZXRVbmlmb3JtQmluZGluZ3MoKSBjb25zdCAgeyByZXR1cm4gdW5pZm9ybUJp
bmRpbmdzOyB9CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBnZXRPYmplY3RDb2RlKCkgY29uc3Qg
eyByZXR1cm4gMDsgfSAvLyBhIHJlYWwgY29tcGlsZXIgd291bGQgYmUgcmV0dXJuaW5nIG9iamVj
dCBjb2RlIGhlcmUKKyAgICB2aXJ0dWFsIFRJbmZvU2luayYgZ2V0SW5mb1NpbmsoKSB7IHJldHVy
biBpbmZvU2luazsgfQorICAgIFRJbmZvU2luayBpbmZvU2luazsKK3Byb3RlY3RlZDoKKyAgICBF
U2hFeGVjdXRhYmxlIGV4ZWN1dGFibGU7CisgICAgYm9vbCBoYXZlUmV0dXJuYWJsZU9iamVjdENv
ZGU7ICAvLyB0cnVlIHdoZW4gb2JqZWN0Q29kZSBpcyBhY2NlcHRhYmxlIHRvIHNlbmQgdG8gZHJp
dmVyCisKKyAgICBjb25zdCBTaEJpbmRpbmdUYWJsZSogYXBwQXR0cmlidXRlQmluZGluZ3M7Cisg
ICAgY29uc3QgU2hCaW5kaW5nVGFibGUqIGZpeGVkQXR0cmlidXRlQmluZGluZ3M7CisgICAgY29u
c3QgaW50KiBleGNsdWRlZEF0dHJpYnV0ZXM7CisgICAgaW50IGV4Y2x1ZGVkQ291bnQ7CisgICAg
U2hCaW5kaW5nVGFibGUqIHVuaWZvcm1CaW5kaW5nczsgICAgICAgICAgICAgICAgLy8gY3JlYXRl
ZCBieSB0aGUgbGlua2VyICAgIAorfTsKKworLy8KKy8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBi
ZXR3ZWVuIHRoZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKKy8vIGFuZCB0aGUgbWFjaGluZSBk
ZXBlbmRlbnQgY29kZS4KKy8vCisvLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQg
ZGVyaXZlIGZyb20gdGhlIGNsYXNzZXMKKy8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQg
RGVsZXRlKigpIHdpbGwgY3JlYXRlIGFuZCAKKy8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5k
ZW50IG9iamVjdHMsIHdoaWNoIGNvbnRhaW4gdGhlCisvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5k
ZW50IGluZm9ybWF0aW9uLgorLy8KK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFu
Z3VhZ2UsIEVTaFNwZWMpOworCitUU2hIYW5kbGVCYXNlKiBDb25zdHJ1Y3RMaW5rZXIoRVNoRXhl
Y3V0YWJsZSwgaW50KTsKK3ZvaWQgRGVsZXRlTGlua2VyKFRTaEhhbmRsZUJhc2UqKTsKKworVFVu
aWZvcm1NYXAqIENvbnN0cnVjdFVuaWZvcm1NYXAoKTsKK3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENv
bXBpbGVyKik7CisKK3ZvaWQgRGVsZXRlVW5pZm9ybU1hcChUVW5pZm9ybU1hcCopOworCisjZW5k
aWYgLy8gX1NISEFORExFX0lOQ0xVREVEXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9jb21waWxlci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9TaGFkZXJMYW5n
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vCisvLyBJbXBsZW1lbnQgdGhlIHRvcC1sZXZlbCBvZiBpbnRlcmZhY2UgdG8gdGhlIGNvbXBp
bGVyL2xpbmtlciwKKy8vIGFzIGRlZmluZWQgaW4gU2hhZGVyTGFuZy5oCisvLworCisjaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorCisvLworLy8gQSBzeW1ib2wgdGFibGUgZm9y
IGVhY2ggbGFuZ3VhZ2UuICBFYWNoIGhhcyBhIGRpZmZlcmVudAorLy8gc2V0IG9mIGJ1aWx0LWlu
cywgYW5kIHdlIHdhbnQgdG8gcHJlc2VydmUgdGhhdCBmcm9tCisvLyBjb21waWxlIHRvIGNvbXBp
bGUuCisvLworVFN5bWJvbFRhYmxlKiBTeW1ib2xUYWJsZXNbRVNoTGFuZ0NvdW50XTsKKworCitU
UG9vbEFsbG9jYXRvciogUGVyUHJvY2Vzc0dQQSA9IDA7CisvLworLy8gVGhpcyBpcyB0aGUgcGxh
dGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5k
IHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBpbGVyL2xpbmtlci4KKy8vCisKKy8vCisvLyBEcml2
ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIKKy8v
IGNvbXBpbGVyL2xpbmtlciBvcGVyYXRpb25zLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQorewor
ICAgIFRJbmZvU2luayBpbmZvU2luazsKKyAgICBib29sIHJldCA9IHRydWU7CisKKyAgICBpZiAo
IUluaXRQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlciBwcm9jZXNzLiBJZiBpdHMgY2FsbGVkIGJ5IG11bHRp
cGxlIHRocmVhZHMsIHRoZW4gCisgICAgLy8gd2UgbmVlZCB0byBoYXZlIHRocmVhZCBzeW5jaHJv
bml6YXRpb24gY29kZSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHBlciBwcm9jZXNzCisg
ICAgLy8gZ2xvYmFsIHBvb2wgYWxsb2NhdG9yCisgICAgaWYgKCFQZXJQcm9jZXNzR1BBKSB7IAor
ICAgICAgICBUUG9vbEFsbG9jYXRvciAqYnVpbHRJblBvb2xBbGxvY2F0b3IgPSBuZXcgVFBvb2xB
bGxvY2F0b3IodHJ1ZSk7CisgICAgICAgIGJ1aWx0SW5Qb29sQWxsb2NhdG9yLT5wdXNoKCk7Cisg
ICAgICAgIFRQb29sQWxsb2NhdG9yKiBnUG9vbEFsbG9jYXRvciA9ICZHbG9iYWxQb29sQWxsb2Nh
dG9yOworICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKGJ1aWx0SW5Qb29sQWxsb2Nh
dG9yKTsKKworICAgICAgICBUU3ltYm9sVGFibGUgc3ltVGFibGVzW0VTaExhbmdDb3VudF07Cisg
ICAgICAgIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKDAsIGluZm9TaW5rLCBzeW1UYWJsZXMp
OworCisgICAgICAgIFBlclByb2Nlc3NHUEEgPSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7Cisg
ICAgICAgIFBlclByb2Nlc3NHUEEtPnB1c2goKTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9j
YXRvclB0cihQZXJQcm9jZXNzR1BBKTsKKworICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFuZ1Zl
cnRleF0gPSBuZXcgVFN5bWJvbFRhYmxlOworICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFuZ1Zl
cnRleF0tPmNvcHlUYWJsZShzeW1UYWJsZXNbRVNoTGFuZ1ZlcnRleF0pOworICAgICAgICBTeW1i
b2xUYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5
bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdLT5jb3B5VGFibGUoc3ltVGFibGVzW0VTaExhbmdG
cmFnbWVudF0pOworCisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoZ1Bvb2xBbGxv
Y2F0b3IpOworCisgICAgICAgIHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XS5wb3AoKTsKKyAgICAg
ICAgc3ltVGFibGVzW0VTaExhbmdGcmFnbWVudF0ucG9wKCk7CisKKyAgICAgICAgYnVpbHRJblBv
b2xBbGxvY2F0b3ItPnBvcEFsbCgpOworICAgICAgICBkZWxldGUgYnVpbHRJblBvb2xBbGxvY2F0
b3I7ICAgICAgICAKKworICAgIH0KKworICAgIHJldHVybiByZXQgPyAxIDogMDsKK30KKworLy8K
Ky8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIvbGlu
a2VyCisvLyBvYmplY3RzLgorLy8KKworU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hM
YW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIGlmICghSW5pdFRocmVhZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIobGFuZ3VhZ2UsIHNwZWMpKTsK
KyAgICAKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK1No
SGFuZGxlIFNoQ29uc3RydWN0TGlua2VyKGNvbnN0IEVTaEV4ZWN1dGFibGUgZXhlY3V0YWJsZSwg
aW50IGRlYnVnT3B0aW9ucykKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxl
QmFzZSo+KENvbnN0cnVjdExpbmtlcihleGVjdXRhYmxlLCBkZWJ1Z09wdGlvbnMpKTsKKworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlKTsKK30KKworU2hIYW5kbGUgU2hD
b25zdHJ1Y3RVbmlmb3JtTWFwKCkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFu
ZGxlQmFzZSo+KENvbnN0cnVjdFVuaWZvcm1NYXAoKSk7CisKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRsZSBoYW5k
bGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hI
YW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisK
KyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBEZWxldGVDb21waWxlcihi
YXNlLT5nZXRBc0NvbXBpbGVyKCkpOworICAgIGVsc2UgaWYgKGJhc2UtPmdldEFzTGlua2VyKCkp
CisgICAgICAgIERlbGV0ZUxpbmtlcihiYXNlLT5nZXRBc0xpbmtlcigpKTsKKyAgICBlbHNlIGlm
IChiYXNlLT5nZXRBc1VuaWZvcm1NYXAoKSkKKyAgICAgICAgRGVsZXRlVW5pZm9ybU1hcChiYXNl
LT5nZXRBc1VuaWZvcm1NYXAoKSk7Cit9CisKKy8vCisvLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMK
Ky8vCitpbnQgX19mYXN0Y2FsbCBTaEZpbmFsaXplKCkKK3sgIAorICBpZiAoUGVyUHJvY2Vzc0dQ
QSkgeworICAgIFBlclByb2Nlc3NHUEEtPnBvcEFsbCgpOworICAgIGRlbGV0ZSBQZXJQcm9jZXNz
R1BBOworICAgIFBlclByb2Nlc3NHUEEgPSAwOworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwg
RVNoTGFuZ0NvdW50OyArK2kpIHsKKyAgICBkZWxldGUgU3ltYm9sVGFibGVzW2ldOworICAgIFN5
bWJvbFRhYmxlc1tpXSA9IDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2Jvb2wgR2VuZXJhdGVC
dWlsdEluU3ltYm9sVGFibGUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLCBUSW5m
b1NpbmsmIGluZm9TaW5rLCBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlcywgRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UpCit7CisgICAgVEJ1aWx0SW5zIGJ1aWx0SW5zOworICAgIAorCWlmIChyZXNvdXJj
ZXMpIHsKKwkJYnVpbHRJbnMuaW5pdGlhbGl6ZSgqcmVzb3VyY2VzKTsKKwkJSW5pdGlhbGl6ZVN5
bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJpbmdzKCksIGxhbmd1YWdlLCBpbmZvU2lu
aywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZXMpOworCX0gZWxzZSB7CisJCWJ1aWx0SW5zLmluaXRp
YWxpemUoKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJp
bmdzKCksIEVTaExhbmdWZXJ0ZXgsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7
CisJCUluaXRpYWxpemVTeW1ib2xUYWJsZShidWlsdElucy5nZXRCdWlsdEluU3RyaW5ncygpLCBF
U2hMYW5nRnJhZ21lbnQsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKFRCdWls
dEluU3RyaW5ncyogQnVpbHRJblN0cmluZ3MsIEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUSW5mb1Np
bmsmIGluZm9TaW5rLCBjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMsIFRTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGVzKQoreworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGlu
Zm9TaW5rKTsJCisgICAgVFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZTsKKwkKKwlpZiAocmVzb3Vy
Y2VzKQorCQlzeW1ib2xUYWJsZSA9IHN5bWJvbFRhYmxlczsKKwllbHNlCisJCXN5bWJvbFRhYmxl
ID0gJnN5bWJvbFRhYmxlc1tsYW5ndWFnZV07CisKKyAgICBUUGFyc2VDb250ZXh0IHBhcnNlQ29u
dGV4dCgqc3ltYm9sVGFibGUsIGludGVybWVkaWF0ZSwgbGFuZ3VhZ2UsIGluZm9TaW5rKTsKKwor
ICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisgICAgc2V0SW5p
dGlhbFN0YXRlKCk7CisKKyAgICBhc3NlcnQoc3ltYm9sVGFibGUtPmlzRW1wdHkoKSB8fCBzeW1i
b2xUYWJsZS0+YXRTaGFyZWRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgCisgICAgLy8KKyAgICAv
LyBQYXJzZSB0aGUgYnVpbHQtaW5zLiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZSBwZXIK
KyAgICAvLyBsYW5ndWFnZSBzeW1ib2wgdGFibGUuCisgICAgLy8KKyAgICAvLyBQdXNoIHRoZSBz
eW1ib2wgdGFibGUgdG8gZ2l2ZSBpdCBhbiBpbml0aWFsIHNjb3BlLiAgVGhpcworICAgIC8vIHB1
c2ggc2hvdWxkIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBwb3AsIHNvIHRoYXQgYnVpbHQtaW5z
CisgICAgLy8gYXJlIHByZXNlcnZlZCwgYW5kIHRoZSB0ZXN0IGZvciBhbiBlbXB0eSB0YWJsZSBm
YWlscy4KKyAgICAvLworCisgICAgc3ltYm9sVGFibGUtPnB1c2goKTsKKyAgICAKKyAgICAvL0lu
aXRpYWxpemUgdGhlIFByZXByb2Nlc3NvcgorICAgIGludCByZXQgPSBJbml0UHJlcHJvY2Vzc29y
KCk7CisgICAgaWYgKHJldCkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsICAiVW5hYmxlIHRvIGludGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yIChUQnVpbHRJblN0
cmluZ3M6Oml0ZXJhdG9yIGkgID0gQnVpbHRJblN0cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1YWdl
XS5iZWdpbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBCdWls
dEluU3RyaW5nc1twYXJzZUNvbnRleHQubGFuZ3VhZ2VdLmVuZCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKytpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1aWx0SW5T
aGFkZXJzWzFdOworICAgICAgICBpbnQgYnVpbHRJbkxlbmd0aHNbMV07CisKKyAgICAgICAgYnVp
bHRJblNoYWRlcnNbMF0gPSAoKmkpLmNfc3RyKCk7CisgICAgICAgIGJ1aWx0SW5MZW5ndGhzWzBd
ID0gKGludCkgKCppKS5zaXplKCk7CisKKyAgICAgICAgaWYgKFBhUGFyc2VTdHJpbmdzKGNvbnN0
X2Nhc3Q8Y2hhcioqPihidWlsdEluU2hhZGVycyksIGJ1aWx0SW5MZW5ndGhzLCAxLCBwYXJzZUNv
bnRleHQpICE9IDApIHsKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIlVuYWJsZSB0byBwYXJzZSBidWlsdC1pbnMiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworCWlmIChyZXNvdXJjZXMpIHsKKwkJ
SWRlbnRpZnlCdWlsdElucyhwYXJzZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSwgKnJl
c291cmNlcyk7CisJfSBlbHNlIHsJCQkJCQkJCQkgICAKKwkJSWRlbnRpZnlCdWlsdElucyhwYXJz
ZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSk7CisJfQorCisgICAgRmluYWxpemVQcmVw
cm9jZXNzb3IoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRG8gYW4gYWN0dWFs
IGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQgCisvLyBp
biB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCisvLworLy8gUmV0dXJuOiAgVGhlIHJldHVybiB2
YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nl
c3Mgb3IgZmFpbHVyZS4KKy8vCitpbnQgU2hDb21waWxlKAorICAgIGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSwKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29uc3Qg
aW50IG51bVN0cmluZ3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwgb3B0TGV2ZWws
CisgICAgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLAorICAgIGludCBkZWJ1Z09w
dGlvbnMKKyAgICApCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhh
bmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUp
OworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAg
aWYgKGNvbXBpbGVyID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEdsb2JhbFBv
b2xBbGxvY2F0b3IucHVzaCgpOworICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+
aW5mb1Npbms7CisgICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOworICAgIGluZm9TaW5rLmRlYnVn
LmVyYXNlKCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisKKyAgICBpZiAobnVtU3RyaW5n
cyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRp
YXRlKGluZm9TaW5rKTsKKyAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGUoKlN5bWJvbFRhYmxl
c1tjb21waWxlci0+Z2V0TGFuZ3VhZ2UoKV0pOworICAgIAorICAgIEdlbmVyYXRlQnVpbHRJblN5
bWJvbFRhYmxlKHJlc291cmNlcywgaW5mb1NpbmssICZzeW1ib2xUYWJsZSwgY29tcGlsZXItPmdl
dExhbmd1YWdlKCkpOworCisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFi
bGUsIGludGVybWVkaWF0ZSwgY29tcGlsZXItPmdldExhbmd1YWdlKCksIGluZm9TaW5rKTsKKyAg
ICBwYXJzZUNvbnRleHQuaW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICBHbG9i
YWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OworICAgIAorICAgIHNldEluaXRpYWxTdGF0
ZSgpOworCisgICAgSW5pdFByZXByb2Nlc3NvcigpOyAgICAKKyAgICAvLworICAgIC8vIFBhcnNl
IHRoZSBhcHBsaWNhdGlvbidzIHNoYWRlcnMuICBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2wgdGFi
bGUKKyAgICAvLyB3b3JrIHdpbGwgYmUgdGhyb3ctYXdheSwgc28gcHVzaCBhIG5ldyBhbGxvY2F0
aW9uIHNjb3BlIHRoYXQgY2FuCisgICAgLy8gYmUgdGhyb3duIGF3YXksIHRoZW4gcHVzaCBhIHNj
b3BlIGZvciB0aGUgY3VycmVudCBzaGFkZXIncyBnbG9iYWxzLgorICAgIC8vCisgICAgYm9vbCBz
dWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisgICAgaWYgKCFz
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJXcm9uZyBzeW1ib2wgdGFibGUg
bGV2ZWwiKTsKKworICAgIGludCByZXQgPSBQYVBhcnNlU3RyaW5ncyhjb25zdF9jYXN0PGNoYXIq
Kj4oc2hhZGVyU3RyaW5ncyksIDAsIG51bVN0cmluZ3MsIHBhcnNlQ29udGV4dCk7CisgICAgaWYg
KHJldCkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKHN1Y2Nlc3MgJiYgcGFy
c2VDb250ZXh0LnRyZWVSb290KSB7CisgICAgICAgIGlmIChvcHRMZXZlbCA9PSBFU2hPcHROb0dl
bmVyYXRpb24pCisgICAgICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhOb25lLCAiTm8gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0aW9uIG9yIGxpbmtpbmcg
d2FzIHJlcXVlc3RlZC4iKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdWNjZXNzID0g
aW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHBhcnNlQ29udGV4dC50cmVlUm9vdCwgcGFyc2VDb250
ZXh0Lmxhbmd1YWdlKTsKKworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKworICAgICAgICAg
ICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBFRGVidWdPcEludGVybWVkaWF0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0LnRyZWVSb290
KTsKKworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQ2FsbCB0aGUgbWFj
aGluZSBkZXBlbmRlbnQgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIGlmICghY29tcGlsZXItPmNvbXBpbGUocGFyc2VDb250ZXh0LnRyZWVSb290KSkKKyAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghc3VjY2VzcykgeworICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1Np
bmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LmluZm9T
aW5rLmluZm8gPDwgcGFyc2VDb250ZXh0Lm51bUVycm9ycyA8PCAiIGNvbXBpbGF0aW9uIGVycm9y
cy4gIE5vIGNvZGUgZ2VuZXJhdGVkLlxuXG4iOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBFRGVidWdPcEludGVybWVkaWF0ZSkKKyAgICAgICAg
ICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7CisgICAg
fSBlbHNlIGlmICghcGFyc2VDb250ZXh0LnRyZWVSb290KSB7CisgICAgICAgIHBhcnNlQ29udGV4
dC5lcnJvcigxLCAiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4iLCAiIiwgIiIpOworICAgICAgICBw
YXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8ICIg
Y29tcGlsYXRpb24gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7CisgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJt
ZWRpYXRlKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0
LnRyZWVSb290KTsKKyAgICB9CisKKyAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4
dC50cmVlUm9vdCk7CisKKyAgICAvLworICAgIC8vIEVuc3VyZSBzeW1ib2wgdGFibGUgaXMgcmV0
dXJuZWQgdG8gdGhlIGJ1aWx0LWluIGxldmVsLAorICAgIC8vIHRocm93aW5nIGF3YXkgYWxsIGJ1
dCB0aGUgYnVpbHQtaW5zLgorICAgIC8vCisgICAgd2hpbGUgKCEgc3ltYm9sVGFibGUuYXRTaGFy
ZWRCdWlsdEluTGV2ZWwoKSkKKyAgICAgICAgc3ltYm9sVGFibGUucG9wKCk7CisKKyAgICBGaW5h
bGl6ZVByZXByb2Nlc3NvcigpOworICAgIC8vCisgICAgLy8gVGhyb3cgYXdheSBhbGwgdGhlIHRl
bXBvcmFyeSBtZW1vcnkgdXNlZCBieSB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4KKyAgICAvLwor
ICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucG9wKCk7CisKKyAgICByZXR1cm4gc3VjY2VzcyA/IDEg
OiAwOworfQorCisvLworLy8gRG8gYW4gYWN0dWFsIGxpbmsgb24gdGhlIGdpdmVuIGNvbXBpbGUg
b2JqZWN0cy4KKy8vCisvLyBSZXR1cm46ICBUaGUgcmV0dXJuIHZhbHVlIG9mIGlzIHJlYWxseSBi
b29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworaW50IFNoTGlu
aygKKyAgICBjb25zdCBTaEhhbmRsZSBsaW5rSGFuZGxlLAorICAgIGNvbnN0IFNoSGFuZGxlIGNv
bXBIYW5kbGVzW10sCisgICAgY29uc3QgaW50IG51bUhhbmRsZXMsCisgICAgU2hIYW5kbGUgdW5p
Zm9ybU1hcEhhbmRsZSwKKyAgICBzaG9ydCBpbnQqKiB1bmlmb3Jtc0FjY2Vzc2VkLAorICAgIGlu
dCogbnVtVW5pZm9ybXNBY2Nlc3NlZCkKKworeworICAgIGlmICghSW5pdFRocmVhZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9j
YXN0PFRTaEhhbmRsZUJhc2UqPihsaW5rSGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIgPSBz
dGF0aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisgICAgaWYgKGxpbmtl
ciA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCByZXR1cm5WYWx1ZTsKKyAgICBH
bG9iYWxQb29sQWxsb2NhdG9yLnB1c2goKTsKKyAgICByZXR1cm5WYWx1ZSA9IFNoTGlua0V4dChs
aW5rSGFuZGxlLCBjb21wSGFuZGxlcywgbnVtSGFuZGxlcyk7CisgICAgR2xvYmFsUG9vbEFsbG9j
YXRvci5wb3AoKTsKKworICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisK
KyAgICByZXR1cm4gMDsKK30KKy8vCisvLyBUaGlzIGxpbmsgbWV0aG9kIHdpbGwgYmUgZXZlbnR1
YWxseSB1c2VkIG9uY2UgdGhlIElDRCBzdXBwb3J0cyB0aGUgbmV3IGxpbmtlciBpbnRlcmZhY2UK
Ky8vCitpbnQgU2hMaW5rRXh0KAorICAgIGNvbnN0IFNoSGFuZGxlIGxpbmtIYW5kbGUsCisgICAg
Y29uc3QgU2hIYW5kbGUgY29tcEhhbmRsZXNbXSwKKyAgICBjb25zdCBpbnQgbnVtSGFuZGxlcykK
K3sKKyAgICBpZiAobGlua0hhbmRsZSA9PSAwIHx8IG51bUhhbmRsZXMgPT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBUSGFuZGxlTGlzdCBjT2JqZWN0czsKKworICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUhhbmRsZXM7ICsraSkg
eworICAgICAgICAgICAgaWYgKGNvbXBIYW5kbGVzW2ldID09IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oY29tcEhhbmRsZXNbaV0pOworICAgICAgICAgICAgaWYgKGJh
c2UtPmdldEFzTGlua2VyKCkpIHsKKyAgICAgICAgICAgICAgICBjT2JqZWN0cy5wdXNoX2JhY2so
YmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmFz
ZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICAgICAgICAgIGNPYmplY3RzLnB1c2hfYmFjayhi
YXNlLT5nZXRBc0NvbXBpbGVyKCkpOworICAgIAorICAgIAorICAgICAgICAgICAgaWYgKGNPYmpl
Y3RzW2ldID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVC
YXNlKj4obGlua0hhbmRsZSk7CisgICAgVExpbmtlciogbGlua2VyID0gc3RhdGljX2Nhc3Q8VExp
bmtlcio+KGJhc2UtPmdldEFzTGlua2VyKCkpOworCisgICAgaWYgKGxpbmtlciA9PSAwKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGxpbmtlci0+aW5mb1NpbmsuaW5mby5lcmFzZSgpOworICAg
IGxpbmtlci0+aW5mb1Npbmsub2JqLmVyYXNlKCk7CisKKyAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1IYW5kbGVzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChjT2JqZWN0c1tpXS0+Z2V0QXNDb21waWxlcigpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCEgY09iamVjdHNbaV0tPmdldEFzQ29tcGlsZXIoKS0+bGlua2FibGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBsaW5rZXItPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJy
b3IsICJOb3QgYWxsIHNoYWRlcnMgaGF2ZSB2YWxpZCBvYmplY3QgY29kZS4iKTsgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgcmV0ID0gbGlua2Vy
LT5saW5rKGNPYmplY3RzKTsKKworICAgIHJldHVybiByZXQgPyAxIDogMDsKK30KKworLy8KKy8v
IFNoU2V0RW5jcnB5dGlvbk1ldGhvZCBpcyBhIHBsYWNlLWhvbGRlciBmb3Igc3BlY2lmeWluZwor
Ly8gaG93IHNvdXJjZSBjb2RlIGlzIGVuY3J5cHRlZC4KKy8vCit2b2lkIFNoU2V0RW5jcnlwdGlv
bk1ldGhvZChTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAg
ICByZXR1cm47Cit9CisKKy8vSnVzdCBhIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgY29kZQorY29u
c3QgY2hhciogU2hHZXRWYWxpZGF0b3JMb2coY29uc3QgU2hIYW5kbGUgaGFuZGxlKQoreworICAg
ICAgICByZXR1cm4gIiI7Cit9CisKKy8vCisvLyBSZXR1cm4gYW55IGNvbXBpbGVyL2xpbmtlci91
bmlmb3JtbWFwIGxvZyBvZiBtZXNzYWdlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLgorLy8KK2NvbnN0
IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFJ
bml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5rOworCisg
ICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2Ut
PmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisgICAgZWxzZSBpZiAoYmFzZS0+Z2V0
QXNMaW5rZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzTGlua2VyKCktPmdl
dEluZm9TaW5rKCkpOworCisgICAgaW5mb1NpbmstPmluZm8gPDwgaW5mb1NpbmstPmRlYnVnLmNf
c3RyKCk7CisgICAgcmV0dXJuIGluZm9TaW5rLT5pbmZvLmNfc3RyKCk7Cit9CisKKy8vCisvLyBS
ZXR1cm4gYW55IHVubGlua2VkIG9iamVjdCBjb2RlLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0T2Jq
ZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5rOworCisgICAgaWYgKGJhc2Ut
PmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGls
ZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisKKyAgICByZXR1cm4gaW5mb1NpbmstPm9iai5jX3N0cigp
OworfQorCisvLworLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgYmluYXJ5IGNvZGUgZnJvbSB0aGUg
bGluayBwcm9jZXNzLiAgU3RydWN0dXJlCisvLyBpcyBtYWNoaW5lIGRlcGVuZGVudC4KKy8vCitj
b25zdCB2b2lkKiBTaEdldEV4ZWN1dGFibGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlKQoreworICAg
IGlmICghSW5pdFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYW5kbGUg
PT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVp
bnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICAKKyAgICBUTGlua2Vy
KiBsaW5rZXIgPSBzdGF0aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7Cisg
ICAgaWYgKGxpbmtlciA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsaW5r
ZXItPmdldE9iamVjdENvZGUoKTsKK30KKworLy8KKy8vIExldCB0aGUgbGlua2VyIGtub3cgd2hl
cmUgdGhlIGFwcGxpY2F0aW9uIHNhaWQgaXQncyBhdHRyaWJ1dGVzIGFyZSBib3VuZC4KKy8vIFRo
ZSBsaW5rZXIgZG9lcyBub3QgdXNlIHRoZXNlIHZhbHVlcywgdGhleSBhcmUgcmVtYXBwZWQgYnkg
dGhlIElDRCBvcgorLy8gaGFyZHdhcmUuICBJdCBqdXN0IG5lZWRzIHRoZW0gdG8ga25vdyB3aGF0
J3MgYWxpYXNlZC4KKy8vCisvLyBSZXR1cm46ICBUaGUgcmV0dXJuIHZhbHVlIG9mIGlzIHJlYWxs
eSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworaW50IFNo
U2V0VmlydHVhbEF0dHJpYnV0ZUJpbmRpbmdzKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgY29uc3Qg
U2hCaW5kaW5nVGFibGUqIHRhYmxlKQoreyAgICAKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxl
QmFzZSo+KGhhbmRsZSk7CisgICAgVExpbmtlciogbGlua2VyID0gc3RhdGljX2Nhc3Q8VExpbmtl
cio+KGJhc2UtPmdldEFzTGlua2VyKCkpOworCisgICAgaWYgKGxpbmtlciA9PSAwKQorICAgICAg
ICByZXR1cm4gMDsKKyAgIAorICAgIGxpbmtlci0+c2V0QXBwQXR0cmlidXRlQmluZGluZ3ModGFi
bGUpOworCisgICAgcmV0dXJuIDE7Cit9CisKKy8vCisvLyBMZXQgdGhlIGxpbmtlciBrbm93IHdo
ZXJlIHRoZSBwcmVkZWZpbmVkIGF0dHJpYnV0ZXMgaGF2ZSB0byBsaXZlLgorLy8KK2ludCBTaFNl
dEZpeGVkQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjb25zdCBTaEJp
bmRpbmdUYWJsZSogdGFibGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPiho
YW5kbGUpOworICAgIFRMaW5rZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNl
LT5nZXRBc0xpbmtlcigpKTsKKworICAgIGlmIChsaW5rZXIgPT0gMCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBsaW5rZXItPnNldEZpeGVkQXR0cmlidXRlQmluZGluZ3ModGFibGUpOworICAg
IHJldHVybiAxOworfQorCisvLworLy8gU29tZSBhdHRyaWJ1dGUgbG9jYXRpb25zIGFyZSBvZmYt
bGltaXRzIHRvIHRoZSBsaW5rZXIuLi4KKy8vCitpbnQgU2hFeGNsdWRlQXR0cmlidXRlcyhjb25z
dCBTaEhhbmRsZSBoYW5kbGUsIGludCAqYXR0cmlidXRlcywgaW50IGNvdW50KQoreworICAgIGlm
ICghSW5pdFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYW5kbGUgPT0g
MCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRl
cnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIg
PSBzdGF0aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisgICAgaWYgKGxp
bmtlciA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxpbmtlci0+c2V0RXhjbHVkZWRB
dHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIGNvdW50KTsKKworICAgIHJldHVybiAxOworfQorCisvLwor
Ly8gUmV0dXJuIHRoZSBpbmRleCBmb3IgT3BlbkdMIHRvIHVzZSBmb3Iga25vd2luZyB3aGVyZSBh
IHVuaWZvcm0gbGl2ZXMuCisvLworLy8gUmV0dXJuOiAgVGhlIHJldHVybiB2YWx1ZSBvZiBpcyBy
ZWFsbHkgYm9vbGVhbiwgaW5kaWNhdGluZworLy8gc3VjY2VzcyBvciBmYWlsdXJlLgorLy8KK2lu
dCBTaEdldFVuaWZvcm1Mb2NhdGlvbihjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBUU2hIYW5kbGVC
YXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAg
ICBUVW5pZm9ybU1hcCogdW5pZm9ybU1hcD0gYmFzZS0+Z2V0QXNVbmlmb3JtTWFwKCk7CisgICAg
aWYgKHVuaWZvcm1NYXAgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIHVu
aWZvcm1NYXAtPmdldExvY2F0aW9uKG5hbWUpOworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rp
b25hbGl5IGFuZCBtYWluIGlkZWFzCisvLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKworI2luY2x1ZGUg
PHN0ZGlvLmg+CisKKy8vCisvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0
byBsaXZlLgorLy8KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMu
CisvLwordm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkK
K3sKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAg
IGVsc2UgaWYgKGlzVmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgICBtYW5nbGVk
TmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
IG1hbmdsZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgIG1hbmdsZWROYW1lICs9ICJzQyI7ICAgICBicmVhazsK
KyAgICBjYXNlIEVidFN0cnVjdDoKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInN0cnVjdC0iOwor
ICAgICAgICBpZiAodHlwZU5hbWUpCisgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAqdHlwZU5h
bWU7CisgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOworICAgICAgICAgICAgICAgICgqc3RydWN0dXJlKVtp
XS50eXBlLT5idWlsZE1hbmdsZWROYW1lKG1hbmdsZWROYW1lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOworICAg
IGlmIChpc0FycmF5KCkpIHsKKyAgICAgICAgY2hhciBidWZbMjBdOworICAgICAgICBzcHJpbnRm
KGJ1ZiwgIiVkIiwgYXJyYXlTaXplKTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAg
ICAgICBtYW5nbGVkTmFtZSArPSBidWY7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAg
ICB9Cit9CisKK2ludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFn
ZXRTdHJ1Y3QoKSkgeworICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIk5vdCBhIHN0cnVjdCIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RydWN0dXJlU2l6ZSA9PSAwKQor
ICAgICAgICBmb3IgKFRUeXBlTGlzdDo6aXRlcmF0b3IgdGwgPSBnZXRTdHJ1Y3QoKS0+YmVnaW4o
KTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQorICAgICAgICAgICAgc3RydWN0dXJl
U2l6ZSArPSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsKKworICAgIHJldHVybiBzdHJ1
Y3R1cmVTaXplOworfQorCisvLworLy8gRHVtcCBmdW5jdGlvbnMuCisvLworCit2b2lkIFRWYXJp
YWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAoreworICAgIGluZm9TaW5rLmRl
YnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJp
bmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5n
ZXRCYXNpY1N0cmluZygpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAgICBpbmZv
U2luay5kZWJ1ZyA8PCAiWzBdIjsKKyAgICB9CisgICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsK
K30KKwordm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sK
KyAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1
cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIo
KSA8PCAiXG4iOworfQorCit2b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAm
aW5mb1NpbmspIGNvbnN0Cit7CisgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKKyAgICBm
b3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCisgICAgICAg
ICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlOjpk
dW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBj
dXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgeworICAgICAgICBpbmZvU2luay5k
ZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOworICAgICAgICB0YWJsZVtsZXZlbF0t
PmR1bXAoaW5mb1NpbmspOworICAgIH0KK30KKworLy8KKy8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmll
ZCBwb2ludGVycyB0byBkZWxldGUuCisvLworVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKK3sKKyAg
ICBmb3IgKFRQYXJhbUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGkgIT0g
cGFyYW1ldGVycy5lbmQoKTsgKytpKQorICAgICAgICBkZWxldGUgKCppKS50eXBlOworfQorCisv
LworLy8gU3ltYm9sIHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8gc3ltYm9s
cyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KKy8vCitUU3ltYm9sVGFibGVMZXZlbDo6flRTeW1i
b2xUYWJsZUxldmVsKCkKK3sKKyAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVsZXRlICgqaXQpLnNl
Y29uZDsKK30KKworLy8KKy8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFi
bGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQgbmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJv
dmlkZWQgYnVpbHQtaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxvdworLy8gcGVyZm9ybWFuY2Ug
b3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0CisvLyBs
aXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KKy8vCit2b2lkIFRTeW1ib2xU
YWJsZUxldmVsOjpyZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBv
cCkKK3sKKyAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdp
bigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkuc2Vjb25k
LT5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPigoKml0KS5zZWNvbmQpOworICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi0+cmVsYXRl
VG9PcGVyYXRvcihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworVFN5bWJvbDo6VFN5bWJv
bChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNv
cHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30K
KworVFZhcmlhYmxlOjpUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiBjb3B5T2YsIFRTdHJ1Y3R1
cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAgIHR5cGUuY29weVR5cGUo
Y29weU9mLnR5cGUsIHJlbWFwcGVyKTsKKyAgICB1c2VyVHlwZSA9IGNvcHlPZi51c2VyVHlwZTsK
KyAgICAvLyBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWwsIHVuaW9uQXJyYXkgYW5kIGFy
cmF5SW5mb3JtYXRpb24gcG9pbnRlcnMgc2hvdWxkIGJlIE5VTEwKKyAgICBhc3NlcnQoY29weU9m
LmFycmF5SW5mb3JtYXRpb25UeXBlID09IDApOworICAgIGFycmF5SW5mb3JtYXRpb25UeXBlID0g
MDsKKworICAgIGlmIChjb3B5T2YudW5pb25BcnJheSkgeworICAgICAgICBhc3NlcnQoIWNvcHlP
Zi50eXBlLmdldFN0cnVjdCgpKTsKKyAgICAgICAgYXNzZXJ0KGNvcHlPZi50eXBlLmdldE9iamVj
dFNpemUoKSA9PSAxKTsKKyAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICB1bmlvbkFycmF5WzBdID0gY29weU9mLnVuaW9uQXJyYXlbMF07CisgICAgfSBl
bHNlCisgICAgICAgIHVuaW9uQXJyYXkgPSAwOworfQorCitUVmFyaWFibGUqIFRWYXJpYWJsZTo6
Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAgVFZhcmlhYmxlICp2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUoKnRoaXMsIHJlbWFwcGVyKTsKKworICAgIHJldHVybiB2YXJpYWJs
ZTsKK30KKworVEZ1bmN0aW9uOjpURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiBjb3B5T2YsIFRT
dHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socGFy
YW0pOworICAgICAgICBwYXJhbWV0ZXJzLmJhY2soKS5jb3B5UGFyYW0oY29weU9mLnBhcmFtZXRl
cnNbaV0sIHJlbWFwcGVyKTsKKyAgICB9CisKKyAgICByZXR1cm5UeXBlLmNvcHlUeXBlKGNvcHlP
Zi5yZXR1cm5UeXBlLCByZW1hcHBlcik7CisgICAgbWFuZ2xlZE5hbWUgPSBjb3B5T2YubWFuZ2xl
ZE5hbWU7CisgICAgb3AgPSBjb3B5T2Yub3A7CisgICAgZGVmaW5lZCA9IGNvcHlPZi5kZWZpbmVk
OworfQorCitURnVuY3Rpb24qIFRGdW5jdGlvbjo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBw
ZXIpCit7CisgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKnRoaXMsIHJl
bWFwcGVyKTsKKworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworVFN5bWJvbFRhYmxlTGV2ZWwq
IFRTeW1ib2xUYWJsZUxldmVsOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKK3sKKyAg
ICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltVGFibGVMZXZlbCA9IG5ldyBUU3ltYm9sVGFibGVMZXZl
bCgpOworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXRlcjsKKyAgICBmb3IgKGl0ZXIgPSBsZXZlbC5i
ZWdpbigpOyBpdGVyICE9IGxldmVsLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgc3ltVGFibGVM
ZXZlbC0+aW5zZXJ0KCppdGVyLT5zZWNvbmQtPmNsb25lKHJlbWFwcGVyKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHN5bVRhYmxlTGV2ZWw7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlOjpjb3B5VGFi
bGUoY29uc3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpCit7CisgICAgVFN0cnVjdHVyZU1hcCByZW1h
cHBlcjsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGNvcHlPZi50YWJsZS5zaXplKCk7ICsraSkgeworICAgICAgICB0YWJs
ZS5wdXNoX2JhY2soY29weU9mLnRhYmxlW2ldLT5jbG9uZShyZW1hcHBlcikpOworICAgIH0KKyAg
ICBmb3IoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5wcmVjaXNpb25TdGFjay5zaXpl
KCk7IGkrKykgeworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIGNvcHlPZi5wcmVj
aXNpb25TdGFja1tpXSApOworICAgIH0KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvY29tcGlsZXIvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5D
TFVERURfCisKKy8vCisvLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVz
aWduIGNoYXJhY3RlcmlzdGljczoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1
c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2Yg
Y3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgor
Ly8gICBzeW1ib2xzLgorLy8KKy8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2
ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUg
bG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVy
IHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9m
IHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Yg
c3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBn
b2luZyBpbnRvCisvLyAgIHRoZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRp
bWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBz
eW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJz
ZQorLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3Rh
bnQgcHJvcGFnYXRpb24uCisvLworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1h
ZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBp
biB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4K
Ky8vCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorCisvLworLy8gU3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0
aW9ucyBvciB2YXJpYWJsZXMgb3V0IG9mIHRoZXNlLi4uKQorLy8KK2NsYXNzIFRTeW1ib2wgeyAg
ICAKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxv
Y2F0b3IpCisgICAgVFN5bWJvbChjb25zdCBUU3RyaW5nICpuKSA6ICBuYW1lKG4pIHsgfQorICAg
IHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhl
IHBvb2wgKi8gfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAq
bmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25z
dCB7IHJldHVybiBnZXROYW1lKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1
ZUlkID0gaWQ7IH0KKyAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJ
ZDsgfQorICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0g
MDsJCisgICAgVFN5bWJvbChjb25zdCBUU3ltYm9sJik7CisgICAgdmlydHVhbCBUU3ltYm9sKiBj
bG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgY29u
c3QgVFN0cmluZyAqbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9y
IHJlYWwgY29tcGFyaW5nIGR1cmluZyBjb2RlIGdlbmVyYXRpb24KK307CisKKy8vCisvLyBWYXJp
YWJsZSBjbGFzcywgbWVhbmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24uCisvLyAK
Ky8vIFRoZXJlIGNvdWxkIGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZvciBDb25zdGFu
dCB2YXJpYWJsZXM7CisvLyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0LCAob3Igbm9u
ZSkgaXMgY29ycmVjdCBmb3IKKy8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0J3MgZWFzeSB0
byBkbyB0aGlzIHdheSwgYW5kIGRvZXNuJ3QKKy8vIHNlZW0gd29ydGggaGF2aW5nIHNlcGFyYXRl
IGNsYXNzZXMsIGFuZCAiZ2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KKy8vIGRpZmZlcmVu
dCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNvIHRoaXMgaXMg
CisvLyBqdXN0IHNpbXBsZSBhbmQgcHJhZ21hdGljLgorLy8KK2NsYXNzIFRWYXJpYWJsZSA6IHB1
YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBUVmFyaWFibGUoY29uc3QgVFN0cmluZyAqbmFt
ZSwgY29uc3QgVFR5cGUmIHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChuYW1lKSwgdHlw
ZSh0KSwgdXNlclR5cGUodVQpLCB1bmlvbkFycmF5KDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgw
KSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5cGUmIGdldFR5cGUo
KSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVz
ZXJUeXBlOyB9CisgICAgdm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIp
IHsgdHlwZS5jaGFuZ2VRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorICAgIHZvaWQgdXBkYXRlQXJy
YXlJbmZvcm1hdGlvblR5cGUoVFR5cGUgKnQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9
CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgeyByZXR1cm4gYXJyYXlJbmZv
cm1hdGlvblR5cGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0OworCisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkKKyAgICB7
IAorICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCisgICAgICAgICAgICB1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworCisgICAgICAgIHJldHVybiB1
bmlvbkFycmF5OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigp
IGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KKworICAgIHZvaWQgc2hhcmVDb25zdFBvaW50
ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCisgICAgeworICAgICAgICBkZWxldGUgdW5p
b25BcnJheTsKKyAgICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisgICAg
VFZhcmlhYmxlKGNvbnN0IFRWYXJpYWJsZSYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsgLy8g
Y29weSBjb25zdHJ1Y3RvcgorICAgIHZpcnR1YWwgVFZhcmlhYmxlKiBjbG9uZShUU3RydWN0dXJl
TWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0eXBlOworICAgIGJvb2wg
dXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0b3Igd2ls
bCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAvLyB3aGVuIHRo
aXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Cisg
ICAgVFR5cGUgKmFycmF5SW5mb3JtYXRpb25UeXBlOyAgLy8gdGhpcyBpcyB1c2VkIGZvciB1cGRh
dGluZyBtYXhBcnJheVNpemUgaW4gYWxsIHRoZSByZWZlcmVuY2VzIHRvIGEgZ2l2ZW4gc3ltYm9s
Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0aGUg
cGFyc2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVuY3Rp
b24gcGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5nICpuYW1l
OworICAgIFRUeXBlKiB0eXBlOworICAgIHZvaWQgY29weVBhcmFtKGNvbnN0IFRQYXJhbWV0ZXIm
IHBhcmFtLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAgIG5hbWUgPSBO
ZXdQb29sVFN0cmluZyhwYXJhbS5uYW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IHBhcmFt
LnR5cGUtPmNsb25lKHJlbWFwcGVyKTsKKyAgICB9Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9u
IHN1Yi1jbGFzcyBvZiBhIHN5bWJvbC4gIAorLy8KK2NsYXNzIFRGdW5jdGlvbiA6IHB1YmxpYyBU
U3ltYm9sIHsKK3B1YmxpYzoKKyAgICBURnVuY3Rpb24oVE9wZXJhdG9yIG8pIDoKKyAgICAgICAg
VFN5bWJvbCgwKSwKKyAgICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmlu
ZWQpKSwKKyAgICAgICAgb3AobyksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIFRG
dW5jdGlvbihjb25zdCBUU3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlwZSwgVE9wZXJhdG9yIHRP
cCA9IEVPcE51bGwpIDogCisgICAgICAgIFRTeW1ib2wobmFtZSksIAorICAgICAgICByZXR1cm5U
eXBlKHJldFR5cGUpLAorICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rpb246Om1hbmdsZU5hbWUo
Km5hbWUpKSwKKyAgICAgICAgb3AodE9wKSwKKyAgICAgICAgZGVmaW5lZChmYWxzZSkgeyB9Cisg
ICAgdmlydHVhbCB+VEZ1bmN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorCisgICAgc3RhdGljIFRTdHJpbmcgbWFuZ2xlTmFt
ZShjb25zdCBUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygnOyB9CisgICAgc3RhdGlj
IFRTdHJpbmcgdW5tYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWROYW1lKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIoKSwgbWFuZ2xlZE5hbWUu
ZmluZF9maXJzdF9vZignKCcpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFBhcmFtZXRlcihUUGFy
YW1ldGVyJiBwKSAKKyAgICB7IAorICAgICAgICBwYXJhbWV0ZXJzLnB1c2hfYmFjayhwKTsKKyAg
ICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+Z2V0TWFuZ2xlZE5hbWUo
KTsKKyAgICB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1hbmdsZWROYW1lOyB9CisgICAgY29uc3QgVFR5cGUmIGdldFJldHVyblR5cGUoKSBj
b25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRP
cGVyYXRvciBvKSB7IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25z
dCB7IHJldHVybiBvcDsgfQorICAgIHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7
IH0KKyAgICBib29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKworICAgIGludCBn
ZXRQYXJhbUNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwYXJhbWV0ZXJz
LnNpemUoKSk7IH0gICAgCisgICAgVFBhcmFtZXRlciYgb3BlcmF0b3IgW10oaW50IGkpICAgICAg
IHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KKyAgICBjb25zdCBUUGFyYW1ldGVyJiBvcGVyYXRv
ciBbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgVEZ1bmN0aW9uKGNv
bnN0IFRGdW5jdGlvbiYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKyAgICB2aXJ0dWFsIFRG
dW5jdGlvbiogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAgVFBhcmFtTGlz
dCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmluZyBtYW5nbGVk
TmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsKKworCitjbGFz
cyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFwPFRTdHJpbmcs
IFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90eXBlIHRMZXZl
bFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwgYm9vbD4gdElu
c2VydFJlc3VsdDsKKworICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFs
bG9jYXRvcikKKyAgICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQorICAgIH5UU3ltYm9sVGFibGVM
ZXZlbCgpOworCisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKSAKKyAgICB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQg
dG8gdGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHRJbnNlcnRSZXN1bHQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihzeW1ib2wuZ2V0TWFuZ2xl
ZE5hbWUoKSwgJnN5bWJvbCkpOworCisgICAgICAgIHJldHVybiByZXN1bHQuc2Vjb25kOworICAg
IH0KKworICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7
CisgICAgICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOwor
ICAgICAgICBpZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAg
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2
ZWwuYmVnaW4oKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRl
VG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgZHVt
cChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICBUU3ltYm9sVGFibGVMZXZlbCogY2xv
bmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAgdExldmVsIGxl
dmVsOworfTsKKworY2xhc3MgVFN5bWJvbFRhYmxlIHsKK3B1YmxpYzoKKyAgICBUU3ltYm9sVGFi
bGUoKSA6IHVuaXF1ZUlkKDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGUgc3lt
Ym9sIHRhYmxlIGNhbm5vdCBiZSB1c2VkIHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAorICAg
ICAgICAvLyB0aGUgbGFjayBvZiBhbiBpbml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2Vk
IHRvIGRldGVjdAorICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVu
IHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KKyAgICAgICAgLy8KKyAgICB9CisKKyAgICBUU3lt
Ym9sVGFibGUoVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSkKKyAgICB7CisgICAgICAgIHRhYmxlLnB1
c2hfYmFjayhzeW1UYWJsZS50YWJsZVswXSk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hf
YmFjayggc3ltVGFibGUucHJlY2lzaW9uU3RhY2tbMF0gKTsKKyAgICAgICAgdW5pcXVlSWQgPSBz
eW1UYWJsZS51bmlxdWVJZDsKKyAgICB9CisKKyAgICB+VFN5bWJvbFRhYmxlKCkKKyAgICB7Cisg
ICAgICAgIC8vIGxldmVsIDAgaXMgYWx3YXlzIGJ1aWx0IEluIHN5bWJvbHMsIHNvIHdlIG5ldmVy
IHBvcCB0aGF0IG91dAorICAgICAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMSkKKyAgICAgICAg
ICAgIHBvcCgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gV2hlbiB0aGUgc3ltYm9sIHRhYmxl
IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1aWx0LWlucywgdGhlcmUgc2hvdWxkCisgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgorICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCisgICAgLy8KKyAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQorICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHx8IGF0RHluYW1pY0J1aWx0
SW5MZXZlbCgpOyB9CisgICAgYm9vbCBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA9PSAxOyB9CQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA8PSAzOyB9CisgICAgdm9pZCBwdXNoKCkKKyAgICB7IAorICAgICAgICB0YWJs
ZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJlY2lzaW9uU3Rh
Y2sucHVzaF9iYWNrKCBQcmVjaXNpb25TdGFja0xldmVsKCkgKTsKKyAgICB9CisKKyAgICB2b2lk
IHBvcCgpCisgICAgeyAKKyAgICAgICAgZGVsZXRlIHRhYmxlW2N1cnJlbnRMZXZlbCgpXTsgCisg
ICAgICAgIHRhYmxlLnBvcF9iYWNrKCk7IAorICAgICAgICBwcmVjaXNpb25TdGFjay5wb3BfYmFj
aygpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5bWJvbCkKKyAgICB7Cisg
ICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKKyAgICAgICAgcmV0dXJuIHRh
YmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgfQorCisgICAgVFN5bWJv
bCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwgYm9vbCAqc2Ft
ZVNjb3BlID0gMCkgCisgICAgeworICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsK
KyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzeW1i
b2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisgICAgICAgICAgICAtLWxldmVsOworICAg
ICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKKyAgICAgICAgbGV2ZWwr
KzsKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09
IDA7CisgICAgICAgIGlmIChzYW1lU2NvcGUpCisgICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2
ZWwgPT0gY3VycmVudExldmVsKCk7CisgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisg
ICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldEdsb2JhbExldmVsKCkgeyBhc3NlcnQodGFibGUuc2l6
ZSgpID49IDMpOyByZXR1cm4gdGFibGVbMl07IH0KKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3Io
Y29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7IHRhYmxlWzBdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsgfQorICAgIGludCBnZXRNYXhTeW1ib2xJZCgpIHsgcmV0dXJuIHVuaXF1
ZUlkOyB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworICAgIHZv
aWQgY29weVRhYmxlKGNvbnN0IFRTeW1ib2xUYWJsZSYgY29weU9mKTsKKworICAgIHZvaWQgc2V0
RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlLCBUUHJlY2lzaW9uIHByZWMgKXsKKyAg
ICAgICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm47IC8v
IE9ubHkgc2V0IGRlZmF1bHQgcHJlY2lzaW9uIGZvciBpbnQvZmxvYXQKKyAgICAgICAgaW50IGlu
ZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgp
KSAtIDE7CisgICAgICAgIHByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF1bdHlwZV0g
PSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2
YWx1ZQorICAgIH0KKworICAgIC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZv
ciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAg
IFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlKXsKKyAgICAg
ICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm4gRWJwVW5k
ZWZpbmVkOworICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0
YWNrLnNpemUoKSkgLSAxOworICAgICAgICBhc3NlcnQoIGxldmVsID49IDApOyAvLyBKdXN0IHRv
IGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICBQcmVjaXNpb25TdGFja0xldmVs
OjppdGVyYXRvciBpdDsKKyAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAv
LyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJv
ciBjaGVjayB0aGlzPworICAgICAgICB3aGlsZSggbGV2ZWwgPj0gMCApeworICAgICAgICAgICAg
aXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0uZmluZCggdHlwZSApOworICAgICAgICAgICAgaWYo
IGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVsXS5lbmQoKSApeworICAgICAgICAgICAgICAgIHBy
ZWMgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVjOwor
ICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICBpbnQgY3VycmVudExldmVsKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQorICAgIGJvb2wgYXRE
eW5hbWljQnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDI7IH0KKworICAg
IHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CisgICAgdHlwZWRlZiBzdGQ6
Om1hcDwgVEJhc2ljVHlwZSwgVFByZWNpc2lvbiA+IFByZWNpc2lvblN0YWNrTGV2ZWw7CisgICAg
c3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwgPiBwcmVjaXNpb25TdGFjazsKKyAgICBp
bnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2Vu
ZXJhdGlvbgorfTsKKworI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKworVHJh
bnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3Bl
YykKKyAgICA6IFRDb21waWxlcihsYW5nLCBzcGVjKSB7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckdM
U0w6OmNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpIHsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRH
TFNMKGluZm9TaW5rLm9iaik7CisgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JHTFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorCitjbGFzcyBU
cmFuc2xhdG9yR0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5zbGF0
b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYyk7CisgICAgdmlydHVhbCBib29s
IGNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9U
UkFOU0xBVE9SR0xTTF9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9j
b21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1RyYW5zbGF0b3JI
TFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCisKKyNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChFU2hM
YW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpCisgICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykK
K3sKK30KKworYm9vbCBUcmFuc2xhdG9ySExTTDo6Y29tcGlsZShUSW50ZXJtTm9kZSAqcm9vdCkK
K3sKKyAgICBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250
ZXh0KCk7CisgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQpOworCisg
ICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVy
L1RyYW5zbGF0b3JITFNMLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
UkhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRD
b21waWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNsYXRvckhMU0woRVNoTGFuZ3VhZ2UgbGFuZywg
RVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9v
dCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9UeXBlcy5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9U
eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZUEVTX0lOQ0xVREVECisKKyNp
bmNsdWRlICJjb21waWxlci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gTmVlZCB0byBoYXZlIGFz
c29jaWF0aW9uIG9mIGxpbmUgbnVtYmVycyB0byB0eXBlcyBpbiBhIGxpc3QgZm9yIGJ1aWxkaW5n
IHN0cnVjdHMuCisvLworY2xhc3MgVFR5cGU7CitzdHJ1Y3QgVFR5cGVMaW5lIHsKKyAgICBUVHlw
ZSogdHlwZTsKKyAgICBpbnQgbGluZTsKK307Cit0eXBlZGVmIFRWZWN0b3I8VFR5cGVMaW5lPiBU
VHlwZUxpc3Q7CisKK2lubGluZSBUVHlwZUxpc3QqIE5ld1Bvb2xUVHlwZUxpc3QoKQoreworICAg
IHZvaWQqIG1lbW9yeSA9IEdsb2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRUeXBl
TGlzdCkpOworICAgIHJldHVybiBuZXcobWVtb3J5KSBUVHlwZUxpc3Q7Cit9CisKKy8vCisvLyBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlhY2Mgc3RhY2ssICBJ
dCBjYW4ndCBoYXZlCisvLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5vbi10cml2aWFsIGNv
bnN0cnVjdG9ycy4gIEl0IHNob3VsZAorLy8ganVzdCBiZSB1c2VkIHdoaWxlIHJlY29nbml6aW5n
IHRoZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCisvLyBjb3VsZCBiZSB1
c2VkLCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBv
dmVyaGVhZC4KKy8vCisvLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVyZSBpcyBubyBhY3R1
YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKKy8vIG1hdGNoIHVwIG9yIGFyZSBuYW1lIHRo
ZSBzYW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KKy8vCitjbGFzcyBUUHVibGljVHlwZSB7Citw
dWJsaWM6CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwor
ICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAgICAvLyBzaXpl
IG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9vbCBtYXRyaXg7
CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBlKiB1c2VyRGVm
OworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVh
bGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7CisgICAgICAg
IHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAgICAg
ICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBhcnJheSA9IGZh
bHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0gMDsKKyAgICAg
ICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGludCBzLCBib29s
IG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBtYXRyaXggPSBt
OworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCisgICAgewor
ICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAgfQorfTsKKwor
dHlwZWRlZiBUTWFwPFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+IFRTdHJ1Y3R1cmVNYXA7Cit0eXBl
ZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0ZXJhdG9yIFRTdHJ1Y3R1cmVNYXBJ
dGVyYXRvcjsKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGluZ3MgdGhhdCBoYXZlIGEgdHlwZS4K
Ky8vCitjbGFzcyBUVHlwZSB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVU
RShHbG9iYWxQb29sQWxsb2NhdG9yKQorICAgIGV4cGxpY2l0IFRUeXBlKFRCYXNpY1R5cGUgdCwg
VFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIGludCBzID0gMSwgYm9v
bCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZv
cm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBleHBsaWNpdCBUVHlwZShjb25zdCBU
UHVibGljVHlwZSAmcCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUocC50eXBl
KSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShw
LnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJy
YXlTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVj
dHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZp
ZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC51c2VyRGVmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVm
LT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFt
ZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgZXhwbGljaXQgVFR5cGUoVFR5cGVMaXN0KiB1c2VyRGVmLCBjb25zdCBUU3RyaW5n
JiBuLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBv
cmFyeSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSh1c2VyRGVmKSwgc3RydWN0
dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmll
bGROYW1lKDApLCBtYW5nbGVkKDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICBleHBsaWNpdCBUVHlwZSgpIHt9CisgICAgdmlydHVhbCB+VFR5cGUo
KSB7fQorCisgICAgVFR5cGUoY29uc3QgVFR5cGUmIHR5cGUpIHsgKnRoaXMgPSB0eXBlOyB9CisK
KyAgICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJl
bWFwcGVyKQorICAgIHsKKyAgICAgICAgdHlwZSA9IGNvcHlPZi50eXBlOworICAgICAgICBwcmVj
aXNpb24gPSBjb3B5T2YucHJlY2lzaW9uOworICAgICAgICBxdWFsaWZpZXIgPSBjb3B5T2YucXVh
bGlmaWVyOworICAgICAgICBzaXplID0gY29weU9mLnNpemU7CisgICAgICAgIG1hdHJpeCA9IGNv
cHlPZi5tYXRyaXg7CisgICAgICAgIGFycmF5ID0gY29weU9mLmFycmF5OworICAgICAgICBhcnJh
eVNpemUgPSBjb3B5T2YuYXJyYXlTaXplOworCisgICAgICAgIFRTdHJ1Y3R1cmVNYXBJdGVyYXRv
ciBpdGVyOworICAgICAgICBpZiAoY29weU9mLnN0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYg
KChpdGVyID0gcmVtYXBwZXIuZmluZChzdHJ1Y3R1cmUpKSA9PSByZW1hcHBlci5lbmQoKSkgewor
ICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbmV3IHN0cnVjdHVyZSBoZXJlCisgICAgICAg
ICAgICAgICAgc3RydWN0dXJlID0gTmV3UG9vbFRUeXBlTGlzdCgpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnN0cnVjdHVyZS0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAg
ICAgICAgICAgICB0eXBlTGluZS5saW5lID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtpXS5saW5lOwor
ICAgICAgICAgICAgICAgICAgICB0eXBlTGluZS50eXBlID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtp
XS50eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
cHVzaF9iYWNrKHR5cGVMaW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSAwOworCisgICAg
ICAgIGZpZWxkTmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5T2YuZmllbGROYW1lKQorICAgICAg
ICAgICAgZmllbGROYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLmZpZWxkTmFtZS0+Y19zdHIo
KSk7CisgICAgICAgIHR5cGVOYW1lID0gMDsKKyAgICAgICAgaWYgKGNvcHlPZi50eXBlTmFtZSkK
KyAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLnR5cGVOYW1lLT5j
X3N0cigpKTsKKworICAgICAgICBtYW5nbGVkID0gMDsKKyAgICAgICAgaWYgKGNvcHlPZi5tYW5n
bGVkKQorICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5tYW5nbGVk
LT5jX3N0cigpKTsKKworICAgICAgICBzdHJ1Y3R1cmVTaXplID0gY29weU9mLnN0cnVjdHVyZVNp
emU7CisgICAgICAgIG1heEFycmF5U2l6ZSA9IGNvcHlPZi5tYXhBcnJheVNpemU7CisgICAgICAg
IGFzc2VydChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7CisgICAgICAgIGFycmF5
SW5mb3JtYXRpb25UeXBlID0gMDsgLy8gYXJyYXlJbmZvcm1hdGlvblR5cGUgc2hvdWxkIG5vdCBi
ZSBzZXQgZm9yIGJ1aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVsCisgICAgfQorCisgICAgVFR5cGUq
IGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgVFR5cGUgKm5l
d1R5cGUgPSBuZXcgVFR5cGUoKTsKKyAgICAgICAgbmV3VHlwZS0+Y29weVR5cGUoKnRoaXMsIHJl
bWFwcGVyKTsKKworICAgICAgICByZXR1cm4gbmV3VHlwZTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBib29sIG0sIGJvb2wgYSwgaW50IGFT
ID0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGUgPSB0OyBzaXplID0gczsg
bWF0cml4ID0gbTsgYXJyYXkgPSBhOyBhcnJheVNpemUgPSBhUzsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRUeXBlKFRCYXNpY1R5cGUgdCwgaW50IHMsIGJvb2wgbSwgVFR5cGUqIHVzZXJEZWYgPSAw
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZSA9IHQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdHJpeCA9IG07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlckRlZikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSB1c2VyRGVmLT5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFycmF5
IGluZm9ybWF0aW9uIGludGFjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
dmlydHVhbCB2b2lkIHNldFR5cGVOYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgdHlwZU5hbWUgPSBO
ZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpZWxkTmFt
ZShjb25zdCBUU3RyaW5nJiBuKSB7IGZpZWxkTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIo
KSk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVybiAqdHlwZU5hbWU7
CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRGaWVsZE5hbWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZpZWxkTmFtZSk7CisgICAgICAgIHJldHVybiAqZmll
bGROYW1lOworICAgIH0KKworICAgIHZpcnR1YWwgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBUUHJlY2lzaW9uIGdldFByZWNpc2lv
bigpIGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZpcnR1YWwgVFF1YWxpZmllciBn
ZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY2hhbmdlUHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBwcmVjaXNpb24gPSBwOyB9CisgICAg
dmlydHVhbCB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVyID0g
cTsgfQorCisgICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIHR5
cGUKKyAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7
IH0KKworICAgIC8vIEZ1bGwtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2Yg
dHlwZQorICAgIHZpcnR1YWwgaW50IGdldEluc3RhbmNlU2l6ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobWF0cml4KQorICAgICAgICAgICAgcmV0dXJuIHNpemUgKiBzaXplOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBm
YWxzZTsgfQorICAgIGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAw
OyB9CisgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQor
ICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0g
czsgfQorICAgIHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBz
OyB9CisgICAgaW50IGdldE1heEFycmF5U2l6ZSAoKSBjb25zdCB7IHJldHVybiBtYXhBcnJheVNp
emU7IH0KKyAgICB2b2lkIGNsZWFyQXJyYXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNp
emUgPSAwOyBtYXhBcnJheVNpemUgPSAwOyB9CisgICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9u
VHlwZShUVHlwZSogdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KKyAgICBUVHlwZSog
Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9u
VHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUg
PiAxICYmICFtYXRyaXg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJl
dHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0dXJlOyB9CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5cGUgdCkgeworICAgICAgICBzd2l0Y2gg
KHQpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICBy
ZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0SW50OiAg
ICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIy
RCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJl
dHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRTdHJ1Y3Q6
ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7CisgICAgICAg
IH0KKyAgICB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRQcmVj
aXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNp
b24pOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQorICAgIFRUeXBlTGlzdCogZ2V0
U3RydWN0KCkgeyByZXR1cm4gc3RydWN0dXJlOyB9CisKKyAgICBpbnQgZ2V0T2JqZWN0U2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICBpbnQgdG90YWxTaXplOworCisgICAgICAgIGlmIChnZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBnZXRTdHJ1
Y3RTaXplKCk7CisgICAgICAgIGVsc2UgaWYgKG1hdHJpeCkKKyAgICAgICAgICAgIHRvdGFsU2l6
ZSA9IHNpemUgKiBzaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgPSBz
aXplOworCisgICAgICAgIGlmIChpc0FycmF5KCkpCisgICAgICAgICAgICB0b3RhbFNpemUgKj0g
c3RkOjptYXgoZ2V0QXJyYXlTaXplKCksIGdldE1heEFycmF5U2l6ZSgpKTsKKworICAgICAgICBy
ZXR1cm4gdG90YWxTaXplOworICAgIH0KKworICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgY29u
c3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7
CisgICAgICAgIGlmICghbWFuZ2xlZCkgeworICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xU
U3RyaW5nKCIiKTsKKyAgICAgICAgICAgIGJ1aWxkTWFuZ2xlZE5hbWUoKm1hbmdsZWQpOworICAg
ICAgICAgICAgKm1hbmdsZWQgKz0gJzsnIDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAq
bWFuZ2xlZDsKKyAgICB9CisgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29uc3QgVFR5cGUmIHJp
Z2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICYm
CisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCisgICAgICAgICAg
ICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQu
dHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCisg
ICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAgICAg
ICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJp
Z2h0LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1
Y3R1cmU7CisgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBxdWFsaWZpZXIsIGl0J3Mgbm90IGV2
ZXIgd2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgorICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShy
aWdodCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRUeXBlJiByaWdodCkgY29u
c3QgeworICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1cm4gdHlwZSA8IHJpZ2h0
LnR5cGU7CisgICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJldHVybiBzaXplIDwgcmln
aHQuc2l6ZTsKKyAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRyaXgpIHJldHVybiBtYXRy
aXggPCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChhcnJheSAhPSByaWdodC5hcnJheSkgcmV0
dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7CisgICAgICAgIGlmIChhcnJheVNpemUgIT0gcmlnaHQu
YXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlTaXplOworICAgICAgICBp
ZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0cnVjdHVyZSA8IHJpZ2h0
LnN0cnVjdHVyZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRTdHJpbmcg
Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgYnVpbGRN
YW5nbGVkTmFtZShUU3RyaW5nJik7CisgICAgaW50IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKwor
ICAgIFRCYXNpY1R5cGUgdHlwZSAgICAgIDogNjsKKyAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsK
KyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA6IDc7CisgICAgaW50IHNpemUgICAgICAgICAgICAg
OiA4OyAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAg
dW5zaWduZWQgaW50IG1hdHJpeCAgOiAxOworICAgIHVuc2lnbmVkIGludCBhcnJheSAgIDogMTsK
KyAgICBpbnQgYXJyYXlTaXplOworCisgICAgVFR5cGVMaXN0KiBzdHJ1Y3R1cmU7ICAgICAgLy8g
MCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIG11dGFibGUgaW50IHN0cnVjdHVyZVNpemU7
CisgICAgaW50IG1heEFycmF5U2l6ZTsKKyAgICBUVHlwZSogYXJyYXlJbmZvcm1hdGlvblR5cGU7
CisgICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQg
bmFtZXMKKyAgICBUU3RyaW5nICptYW5nbGVkOworICAgIFRTdHJpbmcgKnR5cGVOYW1lOyAgICAg
ICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQorfTsKKworI2VuZGlmIC8vIF9U
WVBFU19JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci9VbmZvbGRTZWxlY3QuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ugc2gK
K3sKK1VuZm9sZFNlbGVjdDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91
dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91
dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30KKwordm9pZCBVbmZvbGRT
ZWxlY3Q6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1UZW1wb3JhcnlJbmRl
eCsrOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworfQorCitib29sIFVuZm9sZFNlbGVjdDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKwor
ICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBpbnQg
aSA9IG1UZW1wb3JhcnlJbmRleCsrOworCisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlw
ZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgdCIgPDwgaSA8PCAiO1xuIjsKKworICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAi
aWYoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNM
KTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
bm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAg
ICB0IiA8PCBpIDw8ICIgPSAiOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVy
c2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8
ICIgICAgdCIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50
cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4LS07CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2VsZWN0OjpnZXRUZW1wb3JhcnlJbmRleCgpCit7
CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleDsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9VbmZvbGRTZWxlY3QuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIv
VW5mb2xkU2VsZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1VORk9MRFNFTEVDVF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7Citj
bGFzcyBPdXRwdXRITFNMOworCitjbGFzcyBVbmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNv
bnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiAqbm9kZSk7CisKKyAgICBpbnQgZ2V0VGVtcG9yYXJ5SW5kZXgoKTsKKwor
ICBwcm90ZWN0ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExT
TCAqY29uc3QgbU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30K
KworI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2RlYnVnLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvZGVidWcu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21waWxlci9k
ZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNl
QnVmZmVyTGVuID0gMTAyNDsKKworI2lmZGVmIFRSQUNFX0VOQUJMRUQKK2V4dGVybiAiQyIgewor
dm9pZCBUcmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICAgIGlmICghZm9ybWF0KSBy
ZXR1cm47CisKKyAgICBUUGFyc2VDb250ZXh0KiBwYXJzZUNvbnRleHQgPSBHZXRHbG9iYWxQYXJz
ZUNvbnRleHQoKTsKKyAgICBpZiAocGFyc2VDb250ZXh0KSB7CisgICAgICAgIGNoYXIgYnVmW2tU
cmFjZUJ1ZmZlckxlbl07CisgICAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgICAgdmFfc3RhcnQo
YXJncywgZm9ybWF0KTsKKyAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1RyYWNlQnVmZmVyTGVuLCBm
b3JtYXQsIGFyZ3MpOworICAgICAgICB2YV9lbmQoYXJncyk7CisKKyAgICAgICAgcGFyc2VDb250
ZXh0LT5pbmZvU2luay5kZWJ1ZyA8PCBidWY7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgor
I2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvY29tcGlsZXIvZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2lu
ZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElMRVJfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElM
RVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWZkZWYgX0RFQlVHCisjZGVm
aW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0byBlbmFibGUgZGVidWcgbWVzc2FnZSB0cmFj
aW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBPdXRwdXRzIHRleHQgdG8gdGhlIGRlYnVnIGxv
ZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2b2lkIFRyYWNlKGNvbnN0IGNoYXIqIGZvcm1h
dCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMK
KworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisKKyNkZWZpbmUgVHJhY2UoLi4uKSAoKHZvaWQp
MCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKKy8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEg
Y29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKKyNkZWZp
bmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAorICAgIGlmKCEoZXhwcmVzc2lvbikpIFwKKyAg
ICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19G
VU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKK30gd2hp
bGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCisgICAgVHJhY2UoIlVuaW1w
bGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAor
ICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTlJFQUNIQUJMRSgp
IGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVO
Q1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNlKTsgXAorfSB3aGlsZSgwKQor
CisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19IXworCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvZ2xzbGFuZy5sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwMCBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisqLwor
LyogQmFzZWQgb24KK0FOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbgorCitJbiAxOTg1
LCBKZWZmIExlZSBwdWJsaXNoZWQgdGhpcyBMZXggc3BlY2lmaWNhdGlvbiB0b2dldGhlciB3aXRo
IGEgWWFjYyAKK2dyYW1tYXIgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMgZHJhZnQuICBU
b20gU3RvY2tmaXNjaCByZXBvc3RlZCAKK2JvdGggdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhh
dCBvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgCit0byBxdWVzdGlvbiAxNy4y
NSBvZiB0aGUgY29tcC5sYW5nLmMgRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwg
CitmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLiAKKworSSBpbnRlbmQg
dG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBn
cmFtbWFyIAorYXMgcG9zc2libGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlzY292ZXIg
ZGlzY3JlcGFuY2llcy4gCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUgCisqLworCitEICAgICAgICAg
ICBbMC05XQorTCAgICAgICAgICAgW2EtekEtWl9dCitIICAgICAgICAgICBbYS1mQS1GMC05XQor
RSAgICAgICAgICAgW0VlXVsrLV0/e0R9KworTyAgICAgICAgICAgWzAtN10KKworJW9wdGlvbiBu
b3VucHV0IAorJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisj
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5o
IgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCitpbnQgeXlfaW5wdXQoY2hhciogYnVm
LCBpbnQgbWF4X3NpemUpOworCitleHRlcm4gaW50IHl5cGFyc2Uodm9pZCopOworI2RlZmluZSBZ
WV9ERUNMIGludCB5eWxleChZWVNUWVBFKiBweXlsdmFsLCB2b2lkKiBwYXJzZUNvbnRleHRMb2Nh
bCkKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgqKChUUGFyc2VDb250ZXh0KikocGFyc2VDb250ZXh0
TG9jYWwpKSkKKyAKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgKHJlc3Vs
dCA9IHl5X2lucHV0KGJ1ZiwgbWF4X3NpemUpKQorCislfQorCisvKgorVE9ETyhhbG9rcCk6IHl5
bGluZW5vIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9sZCBmbGV4LmV4ZSBpbiBjb21waWxlci90
b29scy4KK1JlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZl
cnNpb24uCisqLworJW9wdGlvbiB5eWxpbmVubworCislb3B0aW9uIG5veXl3cmFwCislb3B0aW9u
IG5ldmVyLWludGVyYWN0aXZlCisleCBGSUVMRFMKKworCislJQorPCo+Ii8vIlteXG5dKiJcbiIg
ICAgIHsgLyogPz8gY2FycmlhZ2UgYW5kL29yIGxpbmUtZmVlZD8gKi8gfTsKKworImludmFyaWFu
dCIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOVkFSSUFOVCk7
IH0KKyJoaWdocCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihISUdIX1BSRUNJU0lPTik7IH0KKyJtZWRpdW1wIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJFQ0lTSU9OKTsgfQorImxvd3AiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExPV19QUkVDSVNJT04pOyB9
CisicHJlY2lzaW9uIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
UFJFQ0lTSU9OKTsgfQorCisiYXR0cmlidXRlIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oQVRUUklCVVRFKTsgfQorImNvbnN0IiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlNUX1FVQUwpOyB9CisidW5pZm9ybSIgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVU5JRk9STSk7IH0KKyJ2
YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihWQVJZ
SU5HKTsgfQorCisiYnJlYWsiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oQlJFQUspOyB9CisiY29udGludWUiICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9CisiZG8iICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRE8pOyB9CisiZm9yIiAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQorIndoaWxlIiAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFdISUxFKTsgfQorCisi
aWYiICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSUYp
OyB9CisiZWxzZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oRUxTRSk7IH0KKworImluIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKElOX1FVQUwpOyB9Cisib3V0IiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1VUX1FVQUwpOyB9CisiaW5vdXQiICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5PVVRfUVVBTCk7IH0KKworImZs
b2F0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQorImludCIgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0KKyJ2b2lkIiAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4oVk9JRF9UWVBFKTsgfQorImJvb2wiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihC
T09MX1RZUEUpOyB9CisidHJ1ZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorImZh
bHNlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4
LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKworImRpc2NhcmQiICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERJU0NBUkQpOyB9CisicmV0dXJu
IiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUkVUVVJOKTsg
fQorCisibWF0MiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJz
ZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDIpOyB9CisibWF0MyIg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4
QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDMpOyB9CisibWF0NCIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9CisKKyJ2ZWMyIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4gKFZFQzIpOyB9CisidmVjMyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQor
InZlYzQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KKyJpdmVjMiIgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsgfQorIml2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybiAoSVZFQzMpOyB9CisiaXZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7
IH0KKyJidmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQorImJ2ZWMzIiAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFm
dGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9CisiYnZlYzQiICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuIChCVkVDNCk7IH0KKworInNhbXBsZXIyRCIgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
biBTQU1QTEVSMkQ7IH0KKyJzYW1wbGVyQ3ViZSIgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExF
UkNVQkU7IH0KKworInN0cnVjdCIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihTVFJVQ1QpOyB9CisK
KyJhc20iICAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJjbGFz
cyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidW5pb24iICAgICAg
ICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImVudW0iICAgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ0eXBlZGVmIiAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisidGVtcGxhdGUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorInRoaXMiICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJwYWNrZWQiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJn
b3RvIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic3dpdGNoIiAg
ICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImRlZmF1bHQiICAgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImlubGluZSIgICAgICAgeyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJub2lubGluZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9Cisidm9sYXRpbGUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorInB1YmxpYyIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJzdGF0aWMiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZXh0ZXJu
IiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImV4dGVybmFsIiAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJpbnRlcmZhY2UiICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJsb25nIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9Cisic2hvcnQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorImRvdWJsZSIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJoYWxmIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZml4
ZWQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInVuc2lnbmVkIiAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImlucHV0IiAgICAgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJvdXRwdXQiICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJodmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisiaHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorImh2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJmdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZnZlYzMi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZ2ZWM0IiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkdmVjMiIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImR2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKworInNpemVvZiIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJjYXN0IiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJu
YW1lc3BhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidXNpbmciICAg
ICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCit7TH0oe0x9fHtEfSkqICAg
ICAgIHsgIAorICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgCisgICBweXlsdmFsLT5s
ZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gUGFJZGVudE9y
VHlwZSgqcHl5bHZhbC0+bGV4LnN0cmluZywgcGFyc2VDb250ZXh0LCBweXlsdmFsLT5sZXguc3lt
Ym9sKTsgCit9CisKKzBbeFhde0h9KyAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENP
TlNUQU5UKTsgfQorMHtPfSsgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9Ciswe0R9KyAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIs
IHl5dGV4dCwgIiIsICIiKTsgcGFyc2VDb250ZXh0LnJlY292ZXIoKTsgcmV0dXJuIDA7fQore0R9
KyAgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CisKK3tE
fSt7RX0gICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+
bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pPyB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJl
dHVybihGTE9BVENPTlNUQU5UKTsgfQorIi4ie0R9Kyh7RX0pPyAgICAgeyBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKworIi8qIiAgICAgICAgICAgIHsg
IGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFsLT5sZXgubGluZSwgcGFyc2VDb250ZXh0
KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKKworIis9IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQorIi09IiAgICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVUJfQVNTSUdO
KTsgfQorIio9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihNVUxfQVNTSUdOKTsgfQorIi89IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihESVZfQVNTSUdOKTsgfQorIiU9IiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNT0RfQVNTSUdOKTsgfQorIjw8PSIg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FT
U0lHTik7IH0KKyI+Pj0iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQorIiY9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQorIl49IiAgICAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdOKTsgfQor
Inw9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihP
Ul9BU1NJR04pOyB9CisKKyIrKyIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oSU5DX09QKTsgfQorIi0tIiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihERUNfT1ApOyB9CisiJiYiICAgICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9PUCk7IH0KKyJ8fCIgICAg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1JfT1ApOyB9
CisiXl4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KFhPUl9PUCk7IH0KKyI8PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oTEVfT1ApOyB9CisiPj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKEdFX09QKTsgfQorIj09IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihFUV9PUCk7IH0KKyIhPSIgICAgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTkVfT1ApOyB9CisiPDwi
ICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFRlRf
T1ApOyB9CisiPj4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFJJR0hUX09QKTsgfQorIjsiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oU0VNSUNP
TE9OKTsgfQorKCJ7InwiPCUiKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKExFRlRfQlJBQ0UpOyB9
CisoIn0ifCIlPiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KFJJR0hUX0JSQUNFKTsgfQorIiwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgaWYgKHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbikgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CisiOiIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09MT04pOyB9CisiPSIgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihFUVVBTCk7IH0KKyIoIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VDb250ZXh0
LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CisiKSIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4g
PSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQorKCJbInwiPDoiKSAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0JSQUNLRVQpOyB9CisoIl0ifCI6
PiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0JS
QUNLRVQpOyB9CisiLiIgICAgICAgICB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQor
IiEiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJBTkcp
OyB9CisiLSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
REFTSCk7IH0KKyJ+IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihUSUxERSk7IH0KKyIrIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihQTFVTKTsgfQorIioiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFNUQVIpOyB9CisiLyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oU0xBU0gpOyB9CisiJSIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUEVSQ0VOVCk7IH0KKyI8IiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FOR0xFKTsgfQorIj4iICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0FOR0xF
KTsgfQorInwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KFZFUlRJQ0FMX0JBUik7IH0KKyJeIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihDQVJFVCk7IH0KKyImIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihBTVBFUlNBTkQpOyB9CisiPyIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVFU1RJT04pOyB9CisKKzxGSUVMRFM+e0x9
KHtMfXx7RH0pKiB7IAorQkVHSU4oSU5JVElBTCk7ICAgICAgCisgICAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgICAgIAorICAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0
cmluZyh5eXRleHQpOyAKKyAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOyB9Cis8RklFTERTPlsg
XHRcdlxmXHJdIHt9CisKK1sgXHRcdlxuXGZccl0gICB7ICB9Cis8Kj48PEVPRj4+IHsgKCZwYXJz
ZUNvbnRleHQpLT5BZnRlckVPRiA9IHRydWU7IHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIpOyB5eXRlcm1pbmF0ZSgpO30KKzwqPi4gICAgeyBwYXJzZUNvbnRleHQuaW5mb1Npbmsu
aW5mbyA8PCAiRkxFWDogVW5rbm93biBjaGFyICIgPDwgeXl0ZXh0IDw8ICJcbiI7CisgICAgICAg
ICAgcmV0dXJuIDA7IH0KKworJSUKKworCisvL0luY2x1ZGluZyBQcmUtcHJvY2Vzc29yLgorZXh0
ZXJuICJDIiB7CisgICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5o
IgorfSAKKworLy8KKy8vIFRoZSBZWV9JTlBVVCBtYWNybyBqdXN0IGNhbGxzIHRoaXMuICBNYXli
ZSB0aGlzIGNvdWxkIGJlIGp1c3QgcHV0IGludG8KKy8vIHRoZSBtYWNybyBkaXJlY3RseS4KKy8v
CisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSkKK3sKKyAgICBpbnQgbGVu
OworCisgICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSkpID09IDApCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpIAorICAgICAgICBZWV9GQVRB
TF9FUlJPUiggImlucHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVj
YXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIiApOworCisgICAgYnVmW2xlbl0gPSAnICc7CisJcmV0
dXJuIGxlbisxOworfQorCisKKy8vCisvLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5n
IHl5cGFyc2UuICBXZSBzZXQgdXAgZ2xvYmFscyB1c2VkIGJ5CisvLyB5eXdyYXAuCisvLworLy8g
UmV0dXJucyAwIGZvciBzdWNjZXNzLCBhcyBwZXIgeXlwYXJzZSgpLgorLy8KK2ludCBQYVBhcnNl
U3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRl
eHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGludCBhcmd2MGxlbjsKKyAgICAKKyAgICBT
Y2FuRnJvbVN0cmluZyhhcmd2WzBdKTsgCisgICAgCisgICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50
IENvbXBpbGVyIFBhcnNlIGNvbnRleHQgaW50byB0aGUgY3BwIHN0cnVjdHVyZS4KKwljcHAtPnBD
ID0gKHZvaWQqKSZwYXJzZUNvbnRleHRMb2NhbDsKKwkKKwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAw
KQorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7
ICsraSkgeworICAgICAgICBpZiAoIWFyZ3ZbaV0pIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dExvY2FsLmVycm9yKDAsICJOdWxsIHNoYWRlciBzb3VyY2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLnJlY292ZXIoKTsKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc3RyTGVuKSB7CisgICAgICAg
IGFyZ3YwbGVuID0gKGludCkgc3RybGVuKGFyZ3ZbMF0pOworICAgICAgICBzdHJMZW4gICA9ICZh
cmd2MGxlbjsKKyAgICB9CisgICAgeXlyZXN0YXJ0KDApOworICAgICgmcGFyc2VDb250ZXh0TG9j
YWwpLT5BZnRlckVPRiA9IGZhbHNlOworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3Bw
LT5QYUFyZ3YgICAgID0gYXJndjsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBhcmdjOworICAgIGNw
cC0+UGFTdHJMZW4gICA9IHN0ckxlbjsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7
CisgICAgeXlsaW5lbm8gICA9IDE7CisgICAKKyAgICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkg
eyAgICAKKyAgICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9j
YWwpKTsKKyAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0
TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+
IDApCisgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCB5
eWVycm9yKGNoYXIgKnMpIAoreworICAgIGlmICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+
QWZ0ZXJFT0YpIHsKKyAgICAgICAgaWYgKGNwcC0+dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKKyAg
ICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJy
b3IiLCAicHJlLW1hdHVyZSBFT0YiLCBzLCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdsb2Jh
bFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMs
ICIiKTsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfSAgICAg
ICAgICAgIAorfQorCit2b2lkIFBhUmVzZXJ2ZWRXb3JkKCkKK3sKKyAgICBHbG9iYWxQYXJzZUNv
bnRleHQtPmVycm9yKHl5bGluZW5vLCAiUmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7
CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBQYUlkZW50T3JU
eXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJv
bComIHN5bWJvbCkKK3sKKyAgICBzeW1ib2wgPSBwYXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJs
ZS5maW5kKGlkKTsKKyAgICBpZiAocGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZh
bHNlICYmIHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFi
bGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExv
Y2FsLmxleEFmdGVyVHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gVFlQRV9OQU1FOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBJREVOVElGSUVSOworfQorCitpbnQg
UGFQYXJzZUNvbW1lbnQoaW50ICZsaW5lbm8sIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExv
Y2FsKQoreworICAgIGludCB0cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgaW50IG5leHRDaGFyOwor
ICAgIAorICAgIHdoaWxlICh0cmFuc2l0aW9uRmxhZyAhPSAyKSB7CisgICAgICAgIG5leHRDaGFy
ID0geXlpbnB1dCgpOworICAgICAgICBpZiAobmV4dENoYXIgPT0gJ1xuJykKKyAgICAgICAgICAg
ICBsaW5lbm8rKzsKKyAgICAgICAgc3dpdGNoIChuZXh0Q2hhcikgeworICAgICAgICBjYXNlICcq
JyA6CisgICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnLycgOiAgLyogaWYgc3RhciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVy
LCB0aGVuIGl0IGlzIHRoZSBlbmQgb2YgY29tbWVudCAqLworICAgICAgICAgICAgaWYgKHRyYW5z
aXRpb25GbGFnID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMSA7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT0YgOgorICAgICAgICAgICAg
LyogUmFpc2UgZXJyb3IgbWVzc2FnZSBoZXJlICovCisgICAgICAgICAgICBwYXJzZUNvbnRleHRM
b2NhbC5lcnJvcih5eWxpbmVubywgIkVuZCBvZiBzaGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBj
b21tZW50LiIsICIiLCAiIiwgIiIpOworICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICByZXR1cm4gWVlfTlVMTDsgCisgICAgICAgIGRlZmF1bHQg
OiAgLyogQW55IG90aGVyIGNoYXJhY3RlciB3aWxsIGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAq
LworICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiAxOworfQorCitleHRlcm4gIkMiIHsKKwordm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5r
LmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1Rv
SW5mb0xvZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7
IAorfQorCit2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChU
UGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOwor
ICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworfQorCit2b2lkIENQUEVycm9yVG9J
bmZvTG9nKGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJy
b3IoeXlsaW5lbm8sInN5bnRheCBlcnJvciIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgU2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sK
KyAgICB5eWxpbmVubyAmPSB+U291cmNlTG9jTGluZU1hc2s7CisgICAgeXlsaW5lbm8gfD0gbGlu
ZTsKK30KKwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0cmluZykKK3sKKyAgICB5eWxpbmVu
byA9IChzdHJpbmcgPDwgU291cmNlTG9jU3RyaW5nU2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNl
TG9jTGluZU1hc2spOworfQorCitpbnQgR2V0U3RyaW5nTnVtYmVyKHZvaWQpCit7CisgICAgcmV0
dXJuIHl5bGluZW5vID4+IDE2OworfQorCitpbnQgR2V0TGluZU51bWJlcih2b2lkKQoreworICAg
IHJldHVybiB5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrOworfQorCit2b2lkIEluY0xpbmVO
dW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9
IFNvdXJjZUxvY0xpbmVNYXNrKQorICAgICAgICArK3l5bGluZW5vOworfQorCit2b2lkIERlY0xp
bmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2sp
ID4gMCkKKyAgICAgICAgLS15eWxpbmVubzsKK30KKwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3Qg
Y2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKK3sgICAgCisgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzBdLCAib3B0aW1pemUiKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNv
cnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNt
cCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3Ry
Y21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFm
dGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsK
KyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRp
bWl6ZScgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgeworICAgICAgICBpZiAobnVtVG9r
ZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5
bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBp
ZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlm
ICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVk
IGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsK
KyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1
ZycgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworCisjaWZkZWYgUFJBR01BX1RBQkxFCisgICAgICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVu
dGF0aW9uIHNwZWNpZmljIHByYWdtYQorICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICop
Y3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0
aW9uIGFib3V0IHByYWdtYQorICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJh
Z21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8g
QW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBo
YXMgYSBzeW50YXggbGlrZQorICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFs
dWUpCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHBy
YWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgorICAgICAg
ICAvLyAgICAgICAgCisgICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vu
c1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICop
Y3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21h
VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmlu
ZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFi
bGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNb
MF0gXSA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9IGVsc2Ug
aWYgKG51bVRva2VucyA+PSAyKSB7CisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRh
YmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAg
ICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVy
LT5zZWNvbmQgPSB0b2tlbnNbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQorICAgIH0KK30KKwordm9pZCBTdG9y
ZVN0cihjaGFyICpzdHJpbmcpCit7CisgICAgVFN0cmluZyBzdHJTcmM7CisgICAgc3RyU3JjID0g
VFN0cmluZyhzdHJpbmcpOworCisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hF
cnJNc2cgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0
clNyYzsKK30KKworY29uc3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCkKK3sKKyAgICBjcHAt
PkVyck1zZyA9ICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIo
KTsKKyAgICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQp
Cit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKK30K
KworVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlm
ICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoUmVxdWly
ZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJl
dHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9y
KSkKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2Fy
biIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaFdhcm47CisgICAgZWxzZSB7CisgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAi
JyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxl
OworICAgIH0gICAgICAgIAorfQorCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25z
dCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBUQmVoYXZpb3Ig
YmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBU
QmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsKKyAgICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAv
LyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFt
ZSwgImFsbCIpKSB7CisgICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJl
aGF2aW9yVmFsID09IEVCaEVuYWJsZSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJl
eHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9y
Iik7ICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoaXRlciA9ICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZp
b3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9u
QmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBi
ZWhhdmlvclZhbDsKKyAgICAgICAgfSAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRl
ciA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRT
dHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YmVoYXZpb3JWYWwpIHsKKyAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsg
IicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgICAgICAgIGNhc2UgRUJoV2FybjoK
KyAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKKyAgICAgICAgICAgICAgICBtc2cgPSBUU3Ry
aW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOworICAg
ICAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgIH0K
K30KKyAgICAgICAgCit9ICAvLyBleHRlcm4gIkMiCisKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkK
K3sKKyAgICB5eV9zdGFydCA9IDE7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL2NvbXBpbGVyL2dsc2xhbmcueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL2dsc2xhbmcueQkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIxNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8qKgorICogVGhpcyBp
cyBiaXNvbiBncmFtbWFyIGFuZCBwcm9kdWN0aW9uIGNvZGUgZm9yIHBhcnNpbmcgdGhlIE9wZW5H
TCAyLjAgc2hhZGluZworICogbGFuZ3VhZ2VzLgorICovCisleworCisvKiBCYXNlZCBvbjoKK0FO
U0kgQyBZYWNjIGdyYW1tYXIKKworSW4gMTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNj
IGdyYW1tYXIgKHdoaWNoIGlzIGFjY29tcGFuaWVkIGJ5IGEKK21hdGNoaW5nIExleCBzcGVjaWZp
Y2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IGRyYWZ0IHZlcnNpb24gb2YgdGhlCitBTlNJ
IEMgc3RhbmRhcmQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCBpdCB0byBuZXQuc291cmNlcyBp
biAxOTg3OyB0aGF0CitvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVl
c3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAubGFuZy5jCitGQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBm
dHAudXUubmV0LCBmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLgorCitJ
IGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0
YW5kYXJkIGdyYW1tYXIgYXMKK3Bvc3NpYmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRp
c2NvdmVyIGRpc2NyZXBhbmNpZXMuCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUKKyovCisKKyNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVs
cGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlQQVJT
RV9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorLyoKK1RPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFN
X0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xkIGJpc29uLmV4ZSBpbgorY29tcGlsZXIv
dG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZl
cnNpb24uCisqLworI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCoKKyNkZWZpbmUgcGFy
c2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkKKyNkZWZpbmUg
WVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgo
WVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCitleHRlcm4gdm9pZCB5
eWVycm9yKGNoYXIqKTsKKworI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNl
Q29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1Zl
cnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25s
eSAiLCBTLCAiIiwgIiIpOyAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVkVSVEVYX09OTFkoUywg
TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAg
ICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAo
cGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBQQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4
dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFj
ayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisK
KyNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdl
ICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHVucGFjayBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFBB
Q0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5n
VW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBp
biBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgXAorICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKyV9CisldW5pb24geworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOworICAgICAgICAg
ICAgZmxvYXQgZjsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgYm9vbCBiOworICAg
ICAgICB9OworICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CisgICAgfSBsZXg7CisgICAgc3RydWN0
IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAg
ICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJs
aWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlv
bjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBUVHlwZUxpbmUg
dHlwZUxpbmU7CisgICAgICAgICAgICBUVHlwZUxpc3QqIHR5cGVMaXN0OworICAgICAgICB9Owor
ICAgIH0gaW50ZXJtOworfQorCisleworICAgIGV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSosIHZv
aWQqKTsKKyV9CisKKyVwdXJlX3BhcnNlciAvKiBKdXN0IGluIGNhc2UgaXMgY2FsbGVkIGZyb20g
bXVsdGlwbGUgdGhyZWFkcyAqLworJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxp
Y3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KKyV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9Q
UkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgorJXRva2Vu
IDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBF
CisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRV
Uk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMy
IFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwg
T1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tlbiA8bGV4PiBTVFJVQ1Qg
Vk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFCisKKyV0
b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5U
IEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IEZJRUxEX1NFTEVDVElPTgorJXRva2VuIDxsZXg+
IExFRlRfT1AgUklHSFRfT1AKKyV0b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExFX09QIEdFX09Q
IEVRX09QIE5FX09QCisldG9rZW4gPGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBNVUxfQVNTSUdO
IERJVl9BU1NJR04gQUREX0FTU0lHTgorJXRva2VuIDxsZXg+IE1PRF9BU1NJR04gTEVGVF9BU1NJ
R04gUklHSFRfQVNTSUdOIEFORF9BU1NJR04gWE9SX0FTU0lHTiBPUl9BU1NJR04KKyV0b2tlbiA8
bGV4PiBTVUJfQVNTSUdOCisKKyV0b2tlbiA8bGV4PiBMRUZUX1BBUkVOIFJJR0hUX1BBUkVOIExF
RlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIExFRlRfQlJBQ0UgUklHSFRfQlJBQ0UgRE9UCisldG9r
ZW4gPGxleD4gQ09NTUEgQ09MT04gRVFVQUwgU0VNSUNPTE9OIEJBTkcgREFTSCBUSUxERSBQTFVT
IFNUQVIgU0xBU0ggUEVSQ0VOVAorJXRva2VuIDxsZXg+IExFRlRfQU5HTEUgUklHSFRfQU5HTEUg
VkVSVElDQUxfQkFSIENBUkVUIEFNUEVSU0FORCBRVUVTVElPTgorCisldHlwZSA8aW50ZXJtPiBh
c3NpZ25tZW50X29wZXJhdG9yIHVuYXJ5X29wZXJhdG9yCisldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gdmFyaWFibGVfaWRlbnRpZmllciBwcmltYXJ5X2V4cHJlc3Npb24gcG9zdGZpeF9l
eHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZXhwcmVzc2lvbiBpbnRl
Z2VyX2V4cHJlc3Npb24gYXNzaWdubWVudF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVy
bVR5cGVkTm9kZT4gdW5hcnlfZXhwcmVzc2lvbiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIGFk
ZGl0aXZlX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiByZWxhdGlv
bmFsX2V4cHJlc3Npb24gZXF1YWxpdHlfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1U
eXBlZE5vZGU+IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gY29uc3RhbnRfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50
ZXJtVHlwZWROb2RlPiBzaGlmdF9leHByZXNzaW9uIGFuZF9leHByZXNzaW9uIGV4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVy
bVR5cGVkTm9kZT4gZnVuY3Rpb25fY2FsbCBpbml0aWFsaXplciBjb25kaXRpb24gY29uZGl0aW9u
b3B0CisKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gdHJhbnNsYXRpb25fdW5pdCBmdW5jdGlv
bl9kZWZpbml0aW9uCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHN0YXRlbWVudCBzaW1wbGVf
c3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybUFnZ3JlZ2F0ZT4gIHN0YXRlbWVudF9saXN0
IGNvbXBvdW5kX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlv
bl9zdGF0ZW1lbnQgc2VsZWN0aW9uX3N0YXRlbWVudCBleHByZXNzaW9uX3N0YXRlbWVudAorJXR5
cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbiBleHRlcm5hbF9kZWNsYXJhdGlvbgor
JXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBmb3JfaW5pdF9zdGF0ZW1lbnQgY29tcG91bmRfc3Rh
dGVtZW50X25vX25ld19zY29wZQorJXR5cGUgPGludGVybS5ub2RlUGFpcj4gc2VsZWN0aW9uX3Jl
c3Rfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2Rl
PiBpdGVyYXRpb25fc3RhdGVtZW50IGp1bXBfc3RhdGVtZW50IHN0YXRlbWVudF9ub19uZXdfc2Nv
cGUKKyV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlz
dAorCisldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xh
cmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4g
cGFyYW1ldGVyX3F1YWxpZmllcgorCisldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9u
X3F1YWxpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVj
aWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3NwZWNp
Zmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CisldHlwZSA8aW50ZXJtLnR5cGU+
IHN0cnVjdF9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZUxpbmU+IHN0cnVjdF9kZWNsYXJh
dG9yCisldHlwZSA8aW50ZXJtLnR5cGVMaXN0PiBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IHN0cnVj
dF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorJXR5cGUgPGludGVybS5mdW5j
dGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3IgZnVuY3Rpb25faWRlbnRp
ZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1l
dGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9o
ZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMg
ZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQorJXR5cGUgPGludGVybT4g
ZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0IHRyYW5zbGF0aW9uX3VuaXQKKyUlCisK
K3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAvLyBUaGUg
c3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQorICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAg
ICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5n
LCB0eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpm
YWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUg
YSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1Zhcmlh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2
YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVy
cm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wKKyAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0
aGUgbWVtb3J5CisKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QgKSB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5
ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJp
YWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAkMS5saW5lKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKSwgJDEubGluZSk7CisgICAgfQorICAgIDsKKworcHJpbWFyeV9leHByZXNzaW9uCisg
ICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCBJTlRDT05TVEFOVCB7CisgICAgICAgIC8vCisgICAgICAgIC8vIElOVF9UWVBFIGlzIG9ubHkg
MTYtYml0IHBsdXMgc2lnbiBiaXQgZm9yIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzLAorICAgICAg
ICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cworICAgICAgICAvLworICAgICAg
ICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBGTE9BVENP
TlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwor
ICAgIH0KKyAgICB8IEJPT0xDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KCQxLmIpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdI
VF9QQVJFTiB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKworcG9zdGZpeF9leHBy
ZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNz
aW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkgJiYgISQxLT5p
c01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgaWYgKCQxLT5nZXRB
c1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9y
ICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3Ig
IiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cwor
ICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdEFycmF5Tm9kZSgkMy0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
LCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpKSB7
ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3JzCisgICAgICAgICAgICAgICAgVFZlY3Rv
ckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMg
d2F5IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQorICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgJDIu
bGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7IC8vIGNvbnN0
YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmFkZENvbnN0TWF0cml4Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoJDMtPmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgkMS0+aXNWZWN0b3IoKSB8fCAkMS0+
aXNNYXRyaXgoKSkgJiYgJDEtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYg
ISQxLT5pc0FycmF5KCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIs
ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJy
YXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0
VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5
bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksICQzLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUsICQyLmxpbmUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5n
ZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksIDAsIGZhbHNlLCAkMi5saW5l
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERp
cmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpICYmICQxLT5nZXRUeXBl
KCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0
aCBhIHNpemUgYmVmb3JlIGJlaW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlhYmxlIik7CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhJbmRpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCks
ICQxLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpLCAkMS0+aXNNYXRy
aXgoKSkpOworCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdl
UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSAm
JiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCks
IEV2cUNvbnN0LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICBlbHNlIGlmICgkMS0+
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6
ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpICYmICQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlw
ZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QpKTsKKyAg
ICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKCQxLT5nZXRUeXBlKCkp
OworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGwgeworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKKyAgICAgICAg
aWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMu
bGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxk
czsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQz
LnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgJDMubGluZSkpIHsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0
c1swXSA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKKyAg
ICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxk
cywgJDEsICQzLmxpbmUpOworICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEt
PmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCokMy5zdHJpbmcpLnNpemUoKSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzLm51bSA9PSAx
KSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7
CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
VFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOworICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenps
ZShmaWVsZHMsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgJDIu
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0
cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMg
ZmllbGRzOworICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxk
cygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5saW5lKSkgewor
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAw
OworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmll
bGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50
ZWQgeWV0IiwgIi4iLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgs
ICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxT
aXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkg
KyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBUVHlw
ZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBp
ZiAoZmllbGRzID09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCpmaWVsZHMpW2ldLnR5cGUtPmdldEZp
ZWxkTmFtZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk
Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgJDIubGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpm
aWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmlu
aXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZx
Q29uc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2
ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0
J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Ag
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICIr
KyIsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAkMSwgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMi5s
aW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9
CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiLS0iLCAkMSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDIubGluZSwgIi0tIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaW50ZWdlcl9leHBy
ZXNzaW9uCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+aW50
ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbAor
ICAgIDogZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QgeworICAgICAgICBURnVuY3Rpb24qIGZuQ2Fs
bCA9ICQxLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0
SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9y
LgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBj
b25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVy
aWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBl
IHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlw
ZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hl
Y2soJDEubGluZSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAg
ICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUn
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmFkZENvbnN0cnVjdG9yKCQxLmludGVybU5vZGUsICZ0eXBlLCBvcCwgZm5DYWxsLCAkMS5saW5l
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAkMS5s
aW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0
cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBib29s
IGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1
bmN0aW9uKCQxLmxpbmUsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgaWYgKGZuQ2Fu
ZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBIGRlY2xh
cmVkIGZ1bmN0aW9uLiAgQnV0LCBpdCBtaWdodCBzdGlsbCBtYXAgdG8gYSBidWlsdC1pbgorICAg
ICAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAgICAgICAgICAg
IGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0
LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2Ug
YSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3AsICQxLmxpbmUpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJt
QWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICQxLmxpbmUpOworICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0
aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmlu
ZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBi
dWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllckxp
c3QmIHF1YWxpZmllckxpc3QgPSAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdl
dFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpm
bkNhbmRpZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQt
PmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
W2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFs
dWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJF
cnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyTGlzdC5wdXNo
X2JhY2socXVhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ug
d2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIC8vIFB1dCBv
biBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxf
b3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2FsbF9nZW5l
cmljIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUg
bm90IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfZ2VuZXJp
YworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIFJJR0hUX1BBUkVO
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgfQor
ICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworICAgIH0KKyAgICA7
CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2Nh
bGxfaGVhZGVyIFZPSURfVFlQRSB7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAg
ICQkLmludGVybU5vZGUgPSAwOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsK
KyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAg
OiBmdW5jdGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBU
UGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkgfTsKKyAgICAg
ICAgJDEtPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7Cisg
ICAgICAgICQkLmludGVybU5vZGUgPSAkMjsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07Cisg
ICAgICAgICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAkJC5mdW5j
dGlvbiA9ICQxLmZ1bmN0aW9uOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgJDIubGluZSk7
CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXIKKyAgICA6IGZ1bmN0aW9uX2lk
ZW50aWZpZXIgTEVGVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKwor
Ly8gR3JhbW1hciBOb3RlOiAgQ29uc3RydWN0b3JzIGxvb2sgbGlrZSBmdW5jdGlvbnMsIGJ1dCBh
cmUgcmVjb2duaXplZCBhcyB0eXBlcy4KKworZnVuY3Rpb25faWRlbnRpZmllcgorICAgIDogdHlw
ZV9zcGVjaWZpZXIgeworICAgICAgICAvLworICAgICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAg
ICAvLworICAgICAgICBpZiAoJDEuYXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikp
IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICAkMS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoJDEudXNlckRlZikgeworICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0g
IiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBFT3BDb25zdHJ1Y3RT
dHJ1Y3QpOworICAgICAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgICAgICAgICBzd2l0Y2ggKCQx
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgaWYg
KCQxLm1hdHJpeCkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3Ry
dWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAx
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZs
b2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dFZlYzQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgi
aXZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzMiLCAkMS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJ
VmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXpl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAkMS5saW5lKTsgb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBG
UkFHX1ZFUlRfT05MWSgiYnZlYzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZl
YzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIFRUeXBlOjpnZXRCYXNp
Y1N0cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
VFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAg
ICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5n
LCB0eXBlLCBvcCk7CisgICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICB9CisgICAg
fQorICAgIHwgSURFTlRJRklFUiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywg
dHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAgIHwgRklFTERfU0VMRUNU
SU9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxp
bmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAg
JCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1bmFyeV9leHByZXNzaW9uCisgICAgOiBw
b3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOQ19P
UCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygkMS5saW5lLCAiKysiLCAkMikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGluZSwgIi0tIiwgJDIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgJDIs
ICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIi0t
IiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwg
dW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMS5vcCAhPSBF
T3BOdWxsKSB7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aCgkMS5vcCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBlcnJvck9wID0gIiI7CisgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCBlcnJvck9wLCAkMi0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisvLyBHcmFtbWFyIE5v
dGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3RzLgorCit1bmFyeV9vcGVyYXRvcgor
ICAgIDogUExVUyAgeyAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BOdWxsOyB9CisgICAg
fCBEQVNIICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcE5lZ2F0aXZlOyB9CisgICAg
fCBCQU5HICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KKyAg
ICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYnIHVuYXJ5IG9wcy4gIFBvaW50ZXJz
IGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCisgICAgOiB1
bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBGUkFHX1ZFUlRfT05MWSgiKiIs
ICQyLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IG11bHRpcGxp
Y2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCIvIiwgJDIubGluZSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi8iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQor
ICAgIDsKKworYWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BT
dWIsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
JDIubGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hpZnRfZXhwcmVzc2lvbgor
ICAgIDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3JlbGF0aW9u
YWxfZXhwcmVzc2lvbgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24geworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoJDIubGluZSwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlm
dF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPiIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywg
JDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjw9
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigkMi5saW5lLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5l
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2VxdWFsaXR5X2V4cHJlc3Npb24KKyAgICA6
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGVxdWFsaXR5X2V4cHJl
c3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPT0iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEt
PmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVy
cm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCAkMi5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiIT0iLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlz
QXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9y
Q2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCithbmRfZXhwcmVzc2lvbgorICAg
IDogZXF1YWxpdHlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2V4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uCisgICAgOiBhbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisK
K2luY2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KKyAgICA7CisKK2xvZ2ljYWxfYW5kX2V4cHJlc3Npb24KKyAgICA6IGluY2x1
c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9hbmRfZXhwcmVz
c2lvbiBBTkRfT1AgaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQz
LCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAi
JiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBs
b2dpY2FsX2FuZF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsICQyLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICJeXiIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworbG9n
aWNhbF9vcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJl
c3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
Mi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2NvbmRpdGlvbmFsX2V4cHJlc3Np
b24KKyAgICA6IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2lj
YWxfb3JfZXhwcmVzc2lvbiBRVUVTVElPTiBleHByZXNzaW9uIENPTE9OIGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7CisgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIubGlu
ZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwg
JDIubGluZSk7CisgICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisg
ICAgICAgICAgICAkJCA9IDA7CisKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiOiIsICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDU7CisgICAgICAgIH0KKyAgICB9
CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3Bl
cmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3NpZ25FcnJvcigkMi5saW5lLCAi
YXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgp
KSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9h
cnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICB9CisgICAgOworCithc3NpZ25tZW50X29wZXJhdG9yCisgICAgOiBFUVVBTCAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5v
cCA9IEVPcEFzc2lnbjsgfQorICAgIHwgTVVMX0FTU0lHTiAgIHsgRlJBR19WRVJUX09OTFkoIio9
IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BNdWxBc3NpZ247
IH0KKyAgICB8IERJVl9BU1NJR04gICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICQxLmxpbmUpOyAg
ICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wRGl2QXNzaWduOyB9CisgICAgfCBBRERf
QVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAk
MS5saW5lOyAkJC5vcCA9IEVPcEFkZEFzc2lnbjsgfQorICAgIHwgU1VCX0FTU0lHTiAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3Ag
PSBFT3BTdWJBc3NpZ247IH0KKyAgICA7CisKK2V4cHJlc3Npb24KKyAgICA6IGFzc2lnbm1lbnRf
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBD
T01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIubGluZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwg
IiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQz
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIDog
Y29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0
RXJyb3JDaGVjaygkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitkZWNsYXJhdGlvbgorICAgIDogZnVuY3Rp
b25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJv
dG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIHByb3RvdHlwZS0+c2V0VHlw
ZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUo
ZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAgICAgICBpZiAocGFyYW0u
bmFtZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90
eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUs
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUs
ICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcHJvdG90eXBlLT5zZXRPcGVyYXRvcihFT3BQcm90b3R5cGUpOworICAgICAgICAk
JCA9IHByb3RvdHlwZTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09M
T04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQorICAgICAgICAgICAgJDEuaW50
ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNsYXJhdGlvbik7CisgICAgICAgICQkID0g
JDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVh
bGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAkMy50eXBlLCAkMiApOwor
ICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fcHJvdG90eXBlCisgICAg
OiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVOICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dl
ZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBk
ZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCisg
ICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRp
b24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFs
bG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBt
YXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5n
bGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJl
dkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdl
dEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJl
dkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCpwcmV2
RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJZiB0
aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCisg
ICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1l
cyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisgICAgICAgIC8vIGJlaW5n
IHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUg
b25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAgICAgICQkLmZ1bmN0aW9u
ID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworCisgICAgICAgIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC5mdW5jdGlvbik7CisgICAgfQorICAgIDsKKworZnVu
Y3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rpb25faGVhZGVyIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisKK2Z1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBwYXJhbWV0ZXJfZGVjbGFyYXRpb24geworICAg
ICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAkJCA9ICQxOworICAgICAgICBpZiAo
JDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICQx
LT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxl
dGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBi
ZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVp
bmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAg
ICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lk
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
IiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBkZWxldGUgJDMucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgJDEt
PmFkZFBhcmFtZXRlcigkMy5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitmdW5j
dGlvbl9oZWFkZXIKKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9Q
QVJFTiB7CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQxLnF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBs
ZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEg
cHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikK
KyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7Cisg
ICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOworICAgICAg
ICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdG9yCisg
ICAgLy8gVHlwZSArIG5hbWUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIElERU5USUZJRVIgeworICAg
ICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxp
bmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7JDIuc3RyaW5nLCBuZXcgVFR5cGUoJDEpfTsKKyAg
ICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgICAgICQkLnBhcmFtID0gcGFyYW07CisgICAg
fQorICAgIHwgdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4g
bWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQsIHNpemUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwor
CisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCQxKTsKKyAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbSA9IHsgJDIuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5l
OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9k
ZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9ubHkgcGFyYW1ldGVyIHF1YWxpZmllciBh
IHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJTl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRf
UVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8vCisgICAgLy8gVHlwZSArIG5hbWUKKyAg
ICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IHBh
cmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9ICQy
OworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygk
Mi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMi5s
aW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICAvLworICAgIC8vIE9ubHkgdHlwZQorICAg
IC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90
eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAg
JCQgPSAkMjsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9y
Q2hlY2soJDIubGluZSwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfcXVh
bGlmaWVyCisgICAgOiAvKiBlbXB0eSAqLyB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQor
ICAgIHwgSU5fUVVBTCB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgT1VUX1FV
QUwgeworICAgICAgICAkJCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJTk9VVF9RVUFMIHsKKyAg
ICAgICAgJCQgPSBFdnFJbk91dDsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfdHlwZV9zcGVj
aWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9
IHsgMCwgbmV3IFRUeXBlKCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0K
KyAgICA7CisKK2luaXRfZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5nbGVfZGVjbGFyYXRpb24g
eworICAgICAgICAkJCA9ICQxOworICAgICAgICAKKyAgICAgICAgaWYgKCQkLnR5cGUucHJlY2lz
aW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCQudHlwZS5wcmVjaXNpb24gPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZS50eXBl
KTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soJDEu
bGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUudHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgeworICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgJDMubGluZSksICQzLmxpbmUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMu
bGluZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygk
My5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7
CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5l
LCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5s
aW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFD
S0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5
cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQg
PSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0
LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnR5
cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
OworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUs
ICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBl
KTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
KiQzLnN0cmluZywgdHlwZSwgJDMubGluZSksICQzLmxpbmUpOworICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQg
UklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAg
ICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJy
YXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlw
ZS5zZXRBcnJheSh0cnVlLCAkNy0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKTsKKyAgICAgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ3LCBpbnRlcm1O
b2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ2LmxpbmUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJt
QWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9y
X2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDQu
bGluZSwgJDUsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJv
ckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVEludGVy
bU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0
ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ4LCBpbnRlcm1Ob2Rl
LCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGJ1
aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ3LmxpbmUpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdn
cmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xp
c3QgQ09NTUEgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOwor
CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIXBhcnNlQ29u
dGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1
LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGJ1aWxkIHRo
ZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2Rl
LCAkNC5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzaW5nbGVfZGVjbGFyYXRpb24K
KyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKKyAgICAgICAgJCQudHlwZSA9ICQxOworICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtl
QWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5
cGUoJDEpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVk
X3R5cGUgSURFTlRJRklFUiB7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQyLmxpbmUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMi5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQudHlwZSA9ICQxOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCQyLmxpbmUsICok
Mi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNL
RVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQyLmxpbmUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQy
LmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkMS5zZXRBcnJheSh0
cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0cmluZywgJDEsIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShz
aXplKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKiQyLnN0cmluZywgdHlwZSwgJDIubGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAk
MSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcs
ICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQk
LnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNo
ZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQsIHNpemUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAkMS5zZXRB
cnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0
cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5U
SUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgor
ICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKGludGVybU5vZGUsICQzLmxpbmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7Cisg
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAkMS5saW5lKTsKKyAg
ICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW52YXJpYW50VmFyeWluZ091dDsKKyAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICB9CisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRo
ZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8gICAgfCBidWZmZXJfc3BlY2lmaWVyIHsK
Ky8vICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworLy8gICAgfQorICAgIDsKKworLy8g
R3JhbW1hciBOb3RlOiAgTm8gJ2VudW0nLCBvciAndHlwZWRlZicuCisKKy8vCisvLyBQbGFjZSBo
b2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8ldHlwZSA8aW50ZXJt
PiBidWZmZXJfZGVjbGFyYXRpb24KKy8vJXR5cGUgPGludGVybS50eXBlPiBidWZmZXJfc3BlY2lm
aWVyIGlucHV0X29yX291dHB1dCBidWZmZXJfZGVjbGFyYXRpb25fbGlzdAorLy9idWZmZXJfc3Bl
Y2lmaWVyCisvLyAgICA6IGlucHV0X29yX291dHB1dCBMRUZUX0JSQUNFIGJ1ZmZlcl9kZWNsYXJh
dGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKy8vICAgIH0KKy8vICAgIDsKKy8vCisvL2lucHV0X29y
X291dHB1dAorLy8gICAgOiBJTlBVVCB7CisvLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSwgImlucHV0IikpCisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworLy8gICAgICAgIFVOUEFDS19PTkxZKCJpbnB1dCIsICQxLmxpbmUpOworLy8gICAgICAgICQk
LnF1YWxpZmllciA9IEV2cUlucHV0OworLy8gICAgfQorLy8gICAgfCBPVVRQVVQgeworLy8gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJvdXRwdXQiKSkKKy8vICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgUEFDS19PTkxZKCJvdXRwdXQi
LCAkMS5saW5lKTsKKy8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFPdXRwdXQ7CisvLyAgICB9
CisvLyAgICA7CisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5n
dWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb25fbGlzdAorLy8gICAgOiBidWZmZXJfZGVj
bGFyYXRpb24geworLy8gICAgfQorLy8gICAgfCBidWZmZXJfZGVjbGFyYXRpb25fbGlzdCBidWZm
ZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAgOworCisvLworLy8gSW5wdXQvb3V0cHV0
IHNlbWFudGljczoKKy8vICAgZmxvYXQgbXVzdCBiZSAxNiBvciAzMiBiaXRzCisvLyAgIGZsb2F0
IGFsaWdubWVudCByZXN0cmljdGlvbnM/CisvLyAgIGNoZWNrIGZvciBvbmx5IG9uZSBpbnB1dCBh
bmQgb25seSBvbmUgb3V0cHV0CisvLyAgIHN1bSBvZiBiaXRmaWVsZHMgaGFzIHRvIGJlIG11bHRp
cGxlIG9mIDMyCisvLworCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sg
bGFuZ3VhZ2VzLgorLy8KKy8vYnVmZmVyX2RlY2xhcmF0aW9uCisvLyAgICA6IHR5cGVfc3BlY2lm
aWVyIElERU5USUZJRVIgQ09MT04gY29uc3RhbnRfZXhwcmVzc2lvbiBTRU1JQ09MT04geworLy8g
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIu
c3RyaW5nLCBwYXJzZUNvbnRleHQpKQorLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKy8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAk
MSk7CisvLyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQk
LnZhcmlhYmxlKSkgeworLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKy8v
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgICAgIC8vIGRv
bid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNh
cmUgb2YgaXQKKy8vICAgICAgICB9CisvLyAgICB9CisvLyAgICA7CisKK2Z1bGx5X3NwZWNpZmll
ZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAg
ICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgdHlw
ZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYgKCQyLmFycmF5ICYmIHBh
cnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29i
amVjdHMiKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCQyLmFycmF5
ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMi5z
ZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09
IEV2cUF0dHJpYnV0ZSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50
eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlm
aWVyID09IEV2cVZhcnlpbmdPdXQpICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29s
IHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQx
LnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1
YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAgIDogQ09OU1RfUVVB
TCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAkMS5saW5lKTsKKyAg
ICB9CisgICAgfCBBVFRSSUJVVEUgeworICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwg
JDEubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1
dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICQxLmxpbmUpOworICAgIH0KKyAgICB8IFZB
UllJTkcgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAkMS5saW5lKTsKKyAg
ICB9CisgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVT
aExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAkMS5saW5lKTsKKyAgICB9Cisg
ICAgfCBVTklGT1JNIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVj
aygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVu
aWZvcm0iKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAkMS5saW5lKTsKKyAgICB9CisgICAgOwor
Cit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgcHJlY2lzaW9uX3F1YWxpZmllciB0eXBlX3NwZWNpZmll
cl9ub19wcmVjIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQucHJlY2lzaW9uID0gJDE7
CisgICAgfQorICAgIDsKKworcHJlY2lzaW9uX3F1YWxpZmllcgorICAgIDogSElHSF9QUkVDSVNJ
T04geworICAgICAgICAkJCA9IEVicEhpZ2g7CisgICAgfQorICAgIHwgTUVESVVNX1BSRUNJU0lP
TiB7CisgICAgICAgICQkID0gRWJwTWVkaXVtOworICAgIH0KKyAgICB8IExPV19QUkVDSVNJT04g
IHsKKyAgICAgICAgJCQgPSBFYnBMb3c7CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXJf
bm9fcHJlYworICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgeworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAkJCA9ICQxOworCisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDIubGluZSwgJDEpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLnNldEFycmF5KHRydWUsIHNpemUpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyAgICA6
IFZPSURfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBG
TE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBJ
TlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJPT0xf
VFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisvLyAgICB8IFVOU0lH
TkVEIElOVF9UWVBFIHsKKy8vICAgICAgICBQQUNLX1VOUEFDS19PTkxZKCJ1bnNpZ25lZCIsICQx
LmxpbmUpOworLy8gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworLy8gICAg
ICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisvLyAgICB9CisgICAgfCBW
RUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVn
YXRlKDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVkVDNCB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAg
ICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAg
JCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IEJWRUMzIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1
YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwg
QlZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgSVZFQzMgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAg
IH0KKyAgICB8IElWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsKKyAgICAgICAgRlJBR19W
RVJUX09OTFkoIm1hdDIiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsK
KyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDMg
eworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIsICQxLmxpbmUpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAg
fQorICAgIHwgTUFUUklYNCB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQ0IiwgJDEubGlu
ZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkQgeworICAgICAgICBGUkFHX1ZFUlRf
T05MWSgic2FtcGxlcjJEIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICQxLmxp
bmUpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFko
InNhbXBsZXJDdWJlIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgJDEubGlu
ZSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzdHJ1Y3QiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgfQorICAgIHwgVFlQRV9OQU1FIHsKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUg
bGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8v
CisgICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigkMS5z
eW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICQxLmxpbmUpOworICAgICAg
ICAkJC51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICB9CisgICAgOworCitzdHJ1Y3Rfc3BlY2lm
aWVyCisgICAgOiBTVFJVQ1QgSURFTlRJRklFUiBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlw
ZSgkNCwgKiQyLnN0cmluZyk7CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQyLnN0cmlu
Zy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3Jh
cnksICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOworICAgIH0KKyAg
ICB8IFNUUlVDVCBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNF
IHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgkMywgVFN0cmluZygiIikp
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgJDEubGluZSk7
CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKworc3RydWN0
X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3RydWN0X2RlY2xh
cmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqJCQp
W2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGlu
ZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilb
aV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICQkLT5wdXNoX2JhY2soKCokMilbaV0pOworICAgICAgICB9CisgICAgfQor
ICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3Rf
ZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gJDI7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+dm9pZEVycm9yQ2hlY2soJDEubGluZSwgKCokMilbMF0udHlwZS0+
Z2V0RmllbGROYW1lKCksICQxKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDYXJlZnVsIG5v
dCB0byByZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVz
cworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGUoJDEu
dHlwZSwgJDEuc2l6ZSwgJDEubWF0cml4LCAkMS51c2VyRGVmKTsKKworICAgICAgICAgICAgLy8g
ZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAgICAgaWYgKCgqJCQpW2ldLnR5
cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soJDEubGluZSwgJDEpKQorICAgICAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkMS5hcnJh
eSkKKyAgICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKKyAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAgICAgICgqJCQp
W2ldLnR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc3RydWN0
X2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAg
JCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBD
T01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkLT5wdXNoX2JhY2soJDMpOworICAg
IH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAgOiBJREVOVElGSUVSIHsKKyAgICAg
ICAgJCQudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICAk
JC5saW5lID0gJDEubGluZTsKKyAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJp
bmcpOworICAgIH0KKyAgICB8IElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJl
c3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9p
ZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAgICAgICQk
LnR5cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5nKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkMywg
c2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQu
dHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOworICAgIH0KKyAgICA7CisKK2luaXRpYWxpemVyCisg
ICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitkZWNsYXJh
dGlvbl9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKwor
c3RhdGVtZW50CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAgIHwg
c2ltcGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90
ZTogIE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBwb3J0ZWQuCisKK3Np
bXBsZV9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7ICQkID0gJDE7IH0K
KyAgICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNlbGVjdGlv
bl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9zdGF0ZW1lbnQgICB7
ICQkID0gJDE7IH0KKyAgICB8IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQkID0gJDE7IH0KKyAg
ICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7
ICQkID0gMDsgfQorICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3Ao
KTsgfSBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMyAhPSAwKQorICAgICAgICAgICAgJDMt
PnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAg
OworCitzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9f
bmV3X3Njb3BlIHsgJCQgPSAkMTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAg
ICAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2Nv
cGUKKyAgICAvLyBTdGF0ZW1lbnQgdGhhdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBzY29wZSwgZm9y
IHNlbGVjdGlvbl9zdGF0ZW1lbnQsIGl0ZXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IExFRlRfQlJB
Q0UgUklHSFRfQlJBQ0UgeworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIHwgTEVGVF9CUkFD
RSBzdGF0ZW1lbnRfbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMikKKyAgICAgICAg
ICAgICQyLT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisgICAgICAgICQkID0gJDI7CisgICAg
fQorICAgIDsKKworc3RhdGVtZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgMCk7CisgICAg
fQorICAgIHwgc3RhdGVtZW50X2xpc3Qgc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAgfQorICAg
IDsKKworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9IDA7IH0K
KyAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VEludGVybU5v
ZGUqPigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElGIExFRlRf
UEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS5saW5lLCAkMykpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCAkMS5saW5lKTsKKyAgICB9
CisgICAgOworCitzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6IHN0YXRlbWVudCBFTFNF
IHN0YXRlbWVudCB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0g
JDM7CisgICAgfQorICAgIHwgc3RhdGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAg
ICAgICAgJCQubm9kZTIgPSAwOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5v
ICdzd2l0Y2gnLiAgU3dpdGNoIHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29uZGl0aW9u
CisgICAgLy8gSW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xl
IGRlY2xhcmF0aW9ucworICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQxKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGZ1bGx5
X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBU
SW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2so
JDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICAgICAgJCQgPSAkNDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICQkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2l0ZXJhdGlvbl9zdGF0ZW1l
bnQKKyAgICA6IFdISUxFIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJR0hU
X1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZExvb3AoMCwgJDYsICQ0LCAwLCB0cnVlLCAkMS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRE8geyArK3BhcnNlQ29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBleHByZXNz
aW9uIFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCQ4LmxpbmUsICQ2KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9v
cCgwLCAkMywgJDYsIDAsIGZhbHNlLCAkNC5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4geyBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWw7IH0gZm9yX2luaXRfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudCBSSUdIVF9QQVJFTiBz
dGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29w
KCQ0LCAkNywgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50
ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCB0cnVlLCAkMS5saW5lKTsKKyAg
ICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIDsKKwor
Zm9yX2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRpdGlvbiB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8geworICAg
ICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBj
b25kaXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAg
JCQubm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gZXhwcmVz
c2lvbiAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOwor
ICAgIH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1JQ09MT04g
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNvbnRpbnVlIHN0YXRlbWVu
dCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOworICAgIH0KKyAgICB8
IEJSRUFLIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
YnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7Cisg
ICAgfQorICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVi
dFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12
b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBS
RVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKKyAgICAgICAg
cGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZv
aWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVu
Y3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1h
dGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09MT04gewor
ICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgJDEubGluZSk7CisgICAg
fQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBz
dXBwb3J0ZWQuCisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9u
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQk
OworICAgIH0KKyAgICB8IHRyYW5zbGF0aW9uX3VuaXQgZXh0ZXJuYWxfZGVjbGFyYXRpb24gewor
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEs
ICQyLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAgIH0KKyAg
ICA7CisKK2V4dGVybmFsX2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9kZWZpbml0aW9uIHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBkZWNsYXJhdGlvbiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVmaW5pdGlvbgorICAgIDogZnVuY3Rp
b25fcHJvdG90eXBlIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICooJDEuZnVuY3Rp
b24pOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24q
PihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24uZ2V0TWFuZ2xlZE5hbWUo
KSkpOworICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdm
dW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCisg
ICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRh
YmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCisgICAgICAgIC8vIGFuIGVhcmxpZXIg
b2NjdXJhbmNlLgorICAgICAgICAvLworICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZpbmVkKCkp
IHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxy
ZWFkeSBoYXMgYSBib2R5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9u
LmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRh
a2VzIGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAg
ICAgICAgLy8KKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAg
ICAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2Ug
YW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVi
dFZvaWQpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIi
LCBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4gZnVuY3Rp
b24gY2Fubm90IHJldHVybiBhIHZhbHVlIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAg
ICAgICAvLyBOZXcgc3ltYm9sIHRhYmxlIHNjb3BlIGZvciBib2R5IG9mIGZ1bmN0aW9uIHBsdXMg
aXRzIGFyZ3VtZW50cworICAgICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUgcmV0dXJu
IHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAgICAgICAg
Ly8KKyAgICAgICAgcGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJu
c1ZhbHVlID0gZmFsc2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5zZXJ0IHBhcmFtZXRl
cnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGhh
cyBubyBuYW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQgaXQKKyAgICAg
ICAgLy8gKGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8gdGhlIEhJ
TCwgc28gbG93ZXIgbGV2ZWwgY29kZQorICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBmaW5kIHBh
cmFtZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtTm9k
ZXMgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgVFBhcmFtZXRlciYg
cGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsK
KyAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJh
bS5uYW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRyYW5zZmVy
IG93bmVyc2hpcCBvZiBuYW1lIHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSA9IDA7CisKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5saW5lKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEubGluZSks
ICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFt
ZXRlcnMsICQxLmxpbmUpOworICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVz
OworICAgICAgICBwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAg
ICBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgLy8/PyBDaGVjayB0
aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAg
ICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRl
cm1lZGlhdGUgY29kZQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25U
eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgcGFyc2VDb250ZXh0LT5mdW5jdGlv
blJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5l
LCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50
ZXJtQWdncmVnYXRlLCAkMywgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7CisgICAgICAg
ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFt
ZSgpLmNfc3RyKCkpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5m
dW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21h
IGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVj
aWZpYworICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVl
cmllZCBmcm9tIHRoZSBwYXJzZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5z
ZXRPcHRpbWl6ZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAg
ICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJh
Z21hLmRlYnVnKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFi
bGUocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICB9CisgICAg
OworCislJQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9p
bnRlcm1PdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9s
b2NhbGludGVybWVkaWF0ZS5oIgorCisvLworLy8gVHdvIHB1cnBvc2VzOgorLy8gMS4gIFNob3cg
YW4gZXhhbXBsZSBvZiBob3cgdG8gaXRlcmF0ZSB0cmVlLiAgRnVuY3Rpb25zIGNhbgorLy8gICAg
IGFsc28gZGlyZWN0bHkgY2FsbCBUcmF2ZXJzZSgpIG9uIGNoaWxkcmVuIHRoZW1zZWx2ZXMgdG8K
Ky8vICAgICBoYXZlIGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBwcm9jZXNzIHRoYW4g
c2hvd24gaGVyZS4KKy8vICAgICBTZWUgdGhlIGxhc3QgZnVuY3Rpb24gZm9yIGhvdyB0byBnZXQg
c3RhcnRlZC4KKy8vIDIuICBQcmludCBvdXQgYSB0ZXh0IGJhc2VkIGRlc2NyaXB0aW9uIG9mIHRo
ZSB0cmVlLgorLy8KKworLy8KKy8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEg
ZnJvbSBub2RlIHRvIG5vZGUgaW4KKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUT3V0cHV0
VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRPdXRw
dXRUcmF2ZXJzZXIoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQorICAgIFRJbmZvU2lu
ayYgaW5mb1Npbms7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlv
biopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsK
KyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJv
b2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBi
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworfTsKKworVFN0cmluZyBUVHlw
ZTo6Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdAoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFt
OworCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2
cUdsb2JhbCkKKyAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8
PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CisgICAgaWYgKGFycmF5KQorICAgICAgICBz
dHJlYW0gPDwgImFycmF5IG9mICI7CisgICAgaWYgKG1hdHJpeCkKKyAgICAgICAgc3RyZWFtIDw8
IHNpemUgPDwgIlgiIDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXpl
ID4gMSkKKyAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7
CisKKyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyZWFtLnN0
cigpOworfQorCisvLworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0
IG9mIHRyYXZlcnNpbmcuCisvLworCit2b2lkIE91dHB1dFRyZWVUZXh0KFRJbmZvU2luayYgaW5m
b1NpbmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVwdGgpCit7CisgICAgaW50IGk7
CisKKyAgICBpbmZvU2luay5kZWJ1Zy5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAg
Zm9yIChpID0gMDsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICIg
ICI7Cit9CisKKy8vCisvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBm
dW5jdGlvbnMuICBUaGUgbGFzdCBvbmUKKy8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRy
YXZlcnNhbC4KKy8vCisvLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUg
dGhlIGV4dGVybmFsIHRyYXZlcnNhbAorLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5
b3UgcHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2VsZiwKKy8vIHJldHVybiBmYWxzZS4KKy8vCisKK3Zv
aWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sK
KyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworCisgICAgaW5mb1Np
bmsuZGVidWcgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7CisgICAgaW5mb1Np
bmsuZGVidWcgPDwgIigiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Cit9
CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAg
IE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAgICBvdXQu
ZGVidWcgPDwgIm1vdmUgc2Vjb25kIGNoaWxkIHRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6ICAgICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJpbml0aWFsaXplIGZpcnN0IGNoaWxkIHdpdGggc2Vjb25kIGNoaWxkIjsgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
YWRkIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInN1YnRy
YWN0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtdWx0aXBseSBz
ZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vj
b25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgInZlY3RvciBzY2FsZSBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzU2NhbGFyQXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggc2NhbGUgc2Vjb25kIGNoaWxk
IGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01h
dHJpeEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiZGl2aWRlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0LmRlYnVn
IDw8ICJkaXJlY3QgaW5kZXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJl
Y3Q6IG91dC5kZWJ1ZyA8PCAiaW5kaXJlY3QgaW5kZXgiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BJbmRleERpcmVjdFN0cnVjdDogICBvdXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCBmb3Igc3Ry
dWN0dXJlIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiBvdXQuZGVi
dWcgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6ICAg
IG91dC5kZWJ1ZyA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWI6ICAgIG91dC5kZWJ1ZyA8PCAic3VidHJhY3QiOyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdp
c2UgbXVsdGlwbHkiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6ICAgIG91dC5kZWJ1ZyA8
PCAiZGl2aWRlIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVh
bDogICAgICAgICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgRXF1YWwiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6ICAgICAgICAgb3V0LmRlYnVnIDw8
ICJDb21wYXJlIE5vdCBFcXVhbCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQuZGVi
dWcgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiBv
ciBFcXVhbCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91
dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwgInZlY3Rvci1zY2Fs
ZSI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBv
dXQuZGVidWcgPDwgInZlY3Rvci10aW1lcy1tYXRyaXgiOyAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXQuZGVidWcgPDwgIm1hdHJpeC10aW1lcy12ZWN0b3Ii
OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXQuZGVidWcg
PDwgIm1hdHJpeC1zY2FsZSI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4OiBvdXQuZGVidWcgPDwgIm1hdHJpeC1tdWx0aXBseSI7ICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgb3V0LmRlYnVnIDw8ICJsb2dpY2FsLW9y
IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiBvdXQuZGVidWcgPDwgImxv
Z2ljYWwteG9yIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogb3V0LmRlYnVn
IDw8ICJsb2dpY2FsLWFuZCI7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcgPDwg
Ijx1bmtub3duIG9wPiI7CisgICAgfQorCisgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0VW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9
IGluZm9TaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAg
ICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAg
IG91dC5kZWJ1ZyA8PCAiTmVnYXRlIGNvbmRpdGlvbmFsIjsgICBicmVhazsKKworICAgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICBvdXQuZGVidWcgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAi
UG9zdC1EZWNyZW1lbnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1l
bnQ6ICAgb3V0LmRlYnVnIDw8ICJQcmUtSW5jcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1EZWNyZW1lbnQiOyAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0LmRlYnVn
IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZG
bG9hdFRvQm9vbDpvdXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29s
IHRvIGZsb2F0IjticmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0LmRl
YnVnIDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvSW50OiBvdXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBi
b29sIHRvIGludCI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICBv
dXQuZGVidWcgPDwgInJhZGlhbnMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRGVncmVlczogICAgICAgIG91dC5kZWJ1ZyA8PCAiZGVncmVlcyI7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzaW5l
IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogICAgICAgICAg
ICBvdXQuZGVidWcgPDwgImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wVGFuOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAidGFuZ2VudCI7ICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJh
cmMgc2luZSI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAg
ICAgICBvdXQuZGVidWcgPDwgImFyYyBjb3NpbmUiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQXRhbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEV4cDogICAgICAgICAgICBvdXQuZGVidWcg
PDwgImV4cCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiAg
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibG9nIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJleHAyIjsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICBvdXQuZGVi
dWcgPDwgImxvZzIiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3Fy
dDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3FydCI7ICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAgb3V0LmRlYnVnIDw8ICJpbnZlcnNlIHNx
cnQiOyAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAiQWJzb2x1dGUgdmFsdWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BTaWduOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJTaWduIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZsb29y
IjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAiQ2VpbGluZyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BGcmFjdDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJGcmFjdGlvbiI7ICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
bGVuZ3RoIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6
ICAgICAgb3V0LmRlYnVnIDw8ICJub3JtYWxpemUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgLy8JY2FzZSBFT3BEUGR4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkUGR4IjsgICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBF
T3BEUGR5OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJy
ZWFrOyAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0LmRlYnVn
IDw8ICJmd2lkdGgiOyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAKKwor
ICAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICBvdXQuZGVidWcgPDwgImFueSI7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiYWxsIjsgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0
OiBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJCYWQgdW5hcnkgb3AiKTsKKyAgICB9
CisKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8
ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKwor
ICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAgICAgb3V0LmRlYnVnLm1l
c3NhZ2UoRVByZWZpeEVycm9yLCAibm9kZSBpcyBzdGlsbCBFT3BOdWxsISIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRo
KTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcFNlcXVl
bmNlOiAgICAgIG91dC5kZWJ1ZyA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tbWFcbiI7IHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dC5kZWJ1ZyA8PCAiRnVuY3Rp
b24gRGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEZ1bmN0aW9uQ2FsbDogIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2Rl
LT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dC5k
ZWJ1ZyA8PCAiRnVuY3Rpb24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGZs
b2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dC5kZWJ1ZyA8
PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MzogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzMiOyAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjNDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0
IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IG91dC5kZWJ1
ZyA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
QlZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dC5kZWJ1ZyA8PCAiQ29uc3Ry
dWN0IGludCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dC5k
ZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWM0Ijsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dC5kZWJ1ZyA8PCAiQ29u
c3RydWN0IG1hdDIiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91
dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0NDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qgc3Ry
dWN0dXJlIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0
LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVy
IFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAg
ICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdy
ZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFs
OiAgICAgIG91dC5kZWJ1ZyA8PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXQuZGVidWcgPDwgIk5vdEVx
dWFsIjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6
ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1vZCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wUG93OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJwb3ciOyAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2Vu
dCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICJtaW4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAibWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDog
ICAgICAgICBvdXQuZGVidWcgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTWl4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3RlcCI7ICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQuZGVidWcgPDwgInNtb290
aHN0ZXAiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQuZGVi
dWcgPDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RG90OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY3Jvc3Mt
cHJvZHVjdCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDog
ICBvdXQuZGVidWcgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0LmRlYnVnIDw8ICJyZWZsZWN0IjsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dC5kZWJ1ZyA8
PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6
ICAgICAgICAgICBvdXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFk
IGFnZ3JlZ2F0aW9uIG9wIik7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9w
U2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJhbWV0ZXJzKQorICAgICAgICBvdXQu
ZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAg
IG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1
dFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
IG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRy
ZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgb3V0LmRlYnVnIDw8ICJUZXN0IGNvbmRp
dGlvbiBhbmQgc2VsZWN0IjsKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21w
bGV0ZVN0cmluZygpIDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVU
ZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgb3V0LmRlYnVnIDw8ICJDb25kaXRpb25c
biI7CisgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworCisgICAgT3V0
cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VHJ1
ZUJsb2NrKCkpIHsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2VcbiI7CisgICAgICAg
IG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgb3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2UgaXMgbnVsbFxuIjsKKworICAgIGlmIChub2RlLT5n
ZXRGYWxzZUJsb2NrKCkpIHsKKyAgICAgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUs
IGRlcHRoKTsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSBjYXNlXG4iOworICAgICAgICBu
b2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVw
dGg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIFRJbmZv
U2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpW2ldLmdldEJDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcg
PDwgInRydWUiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJmYWxzZSI7CisKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoIiA8
PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4i
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAg
ICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtp
XS5nZXRGQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgZmxv
YXQpXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KClbaV0uZ2V0SUNvbnN0KCk7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKGNvbnN0
IGludClcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIG91dC5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJV
bmtub3duIGNvbnN0YW50Iiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0
ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKwor
ICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCB3aXRoIGNvbmRpdGlvbiAiOworICAgIGlmICghIG5vZGUt
PnRlc3RGaXJzdCgpKQorICAgICAgICBvdXQuZGVidWcgPDwgIm5vdCAiOworICAgIG91dC5kZWJ1
ZyA8PCAidGVzdGVkIGZpcnN0XG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVU
ZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkgewor
ICAgICAgICBvdXQuZGVidWcgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5n
ZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcg
PDwgIk5vIGxvb3AgY29uZGl0aW9uXG4iOworCisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1Npbmss
IG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7CisgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiTG9vcCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgYm9keVxu
IjsKKworICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKSB7CisgICAgICAgIE91dHB1dFRyZWVU
ZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBU
ZXJtaW5hbCBFeHByZXNzaW9uXG4iOworICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQnJhbmNoKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAg
ICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+
Z2V0Rmxvd09wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dC5kZWJ1ZyA8PCAi
QnJhbmNoOiBLaWxsIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAg
ICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29udGludWU6ICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNo
OiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJCcmFuY2g6IFVua25vd24gQnJhbmNoIjsgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgIiB3aXRo
IGV4cHJlc3Npb25cbiI7CisgICAgICAgICsrZGVwdGg7CisgICAgICAgIG5vZGUtPmdldEV4cHJl
c3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC0tZGVwdGg7CisgICAgfSBlbHNlCisg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0
aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVk
IHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3Mg
Y2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwordm9pZCBUSW50ZXJtZWRpYXRl
OjpvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290ID09IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1NpbmspOworCisg
ICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDg2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLworLy8gRGVmaW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5IGhpZ2gtbGV2ZWwgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uCisvLyBvZiBzaGFkZXJzLiAgVGhpcyBpcyBhIHRyZWUgdGhhdCBw
YXJzZXIgY3JlYXRlcy4KKy8vCisvLyBOb2RlcyBpbiB0aGUgdHJlZSBhcmUgZGVmaW5lZCBhcyBh
IGhpZXJhcmNoeSBvZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAKKy8vIFRJbnRlcm1Ob2RlLiBFYWNo
IGlzIGEgbm9kZSBpbiBhIHRyZWUuICBUaGVyZSBpcyBubyBwcmVzZXQgYnJhbmNoaW5nIGZhY3Rv
cjsKKy8vIGVhY2ggbm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0eXBlIG9mIGxpc3Qgb2YgY2hpbGRy
ZW4uCisvLworCisjaWZuZGVmIF9fSU5URVJNRURJQVRFX0gKKyNkZWZpbmUgX19JTlRFUk1FRElB
VEVfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
VHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci9Db25zdGFudFVuaW9uLmgiCisKKy8vCisvLyBP
cGVyYXRvcnMgdXNlZCBieSB0aGUgaGlnaC1sZXZlbCAocGFyc2UgdHJlZSkgcmVwcmVzZW50YXRp
b24uCisvLworZW51bSBUT3BlcmF0b3IgeworICAgIEVPcE51bGwsICAgICAgICAgICAgLy8gaWYg
aW4gYSBub2RlLCBzaG91bGQgb25seSBtZWFuIGEgbm9kZSBpcyBzdGlsbCBiZWluZyBidWlsdAor
ICAgIEVPcFNlcXVlbmNlLCAgICAgICAgLy8gZGVub3RlcyBhIGxpc3Qgb2Ygc3RhdGVtZW50cywg
b3IgcGFyYW1ldGVycywgZXRjLgorICAgIEVPcEZ1bmN0aW9uQ2FsbCwgICAgCisgICAgRU9wRnVu
Y3Rpb24sICAgICAgICAvLyBGb3IgZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgIEVPcFBhcmFtZXRl
cnMsICAgICAgLy8gYW4gYWdncmVnYXRlIGxpc3RpbmcgdGhlIHBhcmFtZXRlcnMgdG8gYSBmdW5j
dGlvbgorCisgICAgRU9wRGVjbGFyYXRpb24sCisgICAgRU9wUHJvdG90eXBlLAorCisgICAgLy8K
KyAgICAvLyBVbmFyeSBvcGVyYXRvcnMKKyAgICAvLworCisgICAgRU9wTmVnYXRpdmUsCisgICAg
RU9wTG9naWNhbE5vdCwKKyAgICBFT3BWZWN0b3JMb2dpY2FsTm90LAorCisgICAgRU9wUG9zdElu
Y3JlbWVudCwKKyAgICBFT3BQb3N0RGVjcmVtZW50LAorICAgIEVPcFByZUluY3JlbWVudCwKKyAg
ICBFT3BQcmVEZWNyZW1lbnQsCisKKyAgICBFT3BDb252SW50VG9Cb29sLAorICAgIEVPcENvbnZG
bG9hdFRvQm9vbCwKKyAgICBFT3BDb252Qm9vbFRvRmxvYXQsCisgICAgRU9wQ29udkludFRvRmxv
YXQsCisgICAgRU9wQ29udkZsb2F0VG9JbnQsCisgICAgRU9wQ29udkJvb2xUb0ludCwKKworICAg
IC8vCisgICAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAgICAvLworCisgICAgRU9wQWRkLAorICAg
IEVPcFN1YiwKKyAgICBFT3BNdWwsCisgICAgRU9wRGl2LAorICAgIEVPcEVxdWFsLAorICAgIEVP
cE5vdEVxdWFsLAorICAgIEVPcFZlY3RvckVxdWFsLAorICAgIEVPcFZlY3Rvck5vdEVxdWFsLAor
ICAgIEVPcExlc3NUaGFuLAorICAgIEVPcEdyZWF0ZXJUaGFuLAorICAgIEVPcExlc3NUaGFuRXF1
YWwsCisgICAgRU9wR3JlYXRlclRoYW5FcXVhbCwKKyAgICBFT3BDb21tYSwKKworICAgIEVPcFZl
Y3RvclRpbWVzU2NhbGFyLAorICAgIEVPcFZlY3RvclRpbWVzTWF0cml4LAorICAgIEVPcE1hdHJp
eFRpbWVzVmVjdG9yLAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyLAorCisgICAgRU9wTG9naWNh
bE9yLAorICAgIEVPcExvZ2ljYWxYb3IsCisgICAgRU9wTG9naWNhbEFuZCwKKworICAgIEVPcElu
ZGV4RGlyZWN0LAorICAgIEVPcEluZGV4SW5kaXJlY3QsCisgICAgRU9wSW5kZXhEaXJlY3RTdHJ1
Y3QsCisKKyAgICBFT3BWZWN0b3JTd2l6emxlLAorCisgICAgLy8KKyAgICAvLyBCdWlsdC1pbiBm
dW5jdGlvbnMgcG90ZW50aWFsbHkgbWFwcGVkIHRvIG9wZXJhdG9ycworICAgIC8vCisKKyAgICBF
T3BSYWRpYW5zLAorICAgIEVPcERlZ3JlZXMsCisgICAgRU9wU2luLAorICAgIEVPcENvcywKKyAg
ICBFT3BUYW4sCisgICAgRU9wQXNpbiwKKyAgICBFT3BBY29zLAorICAgIEVPcEF0YW4sCisKKyAg
ICBFT3BQb3csCisgICAgRU9wRXhwLAorICAgIEVPcExvZywKKyAgICBFT3BFeHAyLAorICAgIEVP
cExvZzIsCisgICAgRU9wU3FydCwKKyAgICBFT3BJbnZlcnNlU3FydCwKKworICAgIEVPcEFicywK
KyAgICBFT3BTaWduLAorICAgIEVPcEZsb29yLAorICAgIEVPcENlaWwsCisgICAgRU9wRnJhY3Qs
CisgICAgRU9wTW9kLAorICAgIEVPcE1pbiwKKyAgICBFT3BNYXgsCisgICAgRU9wQ2xhbXAsCisg
ICAgRU9wTWl4LAorICAgIEVPcFN0ZXAsCisgICAgRU9wU21vb3RoU3RlcCwKKworICAgIEVPcExl
bmd0aCwKKyAgICBFT3BEaXN0YW5jZSwKKyAgICBFT3BEb3QsCisgICAgRU9wQ3Jvc3MsCisgICAg
RU9wTm9ybWFsaXplLAorICAgIEVPcEZhY2VGb3J3YXJkLAorICAgIEVPcFJlZmxlY3QsCisgICAg
RU9wUmVmcmFjdCwKKworICAgIC8vRU9wRFBkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5
LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy9FT3BEUGR5LCAgICAg
ICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNp
b24KKyAgICAvL0VPcEZ3aWR0aCwgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorCisgICAgRU9wTWF0cml4VGltZXNNYXRyaXgsCisK
KyAgICBFT3BBbnksCisgICAgRU9wQWxsLAorCisgICAgLy8KKyAgICAvLyBCcmFuY2gKKyAgICAv
LworCisgICAgRU9wS2lsbCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5CisgICAgRU9wUmV0
dXJuLAorICAgIEVPcEJyZWFrLAorICAgIEVPcENvbnRpbnVlLAorCisgICAgLy8KKyAgICAvLyBD
b25zdHJ1Y3RvcnMKKyAgICAvLworCisgICAgRU9wQ29uc3RydWN0SW50LAorICAgIEVPcENvbnN0
cnVjdEJvb2wsCisgICAgRU9wQ29uc3RydWN0RmxvYXQsCisgICAgRU9wQ29uc3RydWN0VmVjMiwK
KyAgICBFT3BDb25zdHJ1Y3RWZWMzLAorICAgIEVPcENvbnN0cnVjdFZlYzQsCisgICAgRU9wQ29u
c3RydWN0QlZlYzIsCisgICAgRU9wQ29uc3RydWN0QlZlYzMsCisgICAgRU9wQ29uc3RydWN0QlZl
YzQsCisgICAgRU9wQ29uc3RydWN0SVZlYzIsCisgICAgRU9wQ29uc3RydWN0SVZlYzMsCisgICAg
RU9wQ29uc3RydWN0SVZlYzQsCisgICAgRU9wQ29uc3RydWN0TWF0MiwKKyAgICBFT3BDb25zdHJ1
Y3RNYXQzLAorICAgIEVPcENvbnN0cnVjdE1hdDQsCisgICAgRU9wQ29uc3RydWN0U3RydWN0LAor
CisgICAgLy8KKyAgICAvLyBtb3ZlcworICAgIC8vCisKKyAgICBFT3BBc3NpZ24sCisgICAgRU9w
SW5pdGlhbGl6ZSwKKyAgICBFT3BBZGRBc3NpZ24sCisgICAgRU9wU3ViQXNzaWduLAorICAgIEVP
cE11bEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BWZWN0
b3JUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbiwKKyAg
ICBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BEaXZBc3NpZ24sCit9OworCitj
bGFzcyBUSW50ZXJtVHJhdmVyc2VyOworY2xhc3MgVEludGVybUFnZ3JlZ2F0ZTsKK2NsYXNzIFRJ
bnRlcm1CaW5hcnk7CitjbGFzcyBUSW50ZXJtVW5hcnk7CitjbGFzcyBUSW50ZXJtQ29uc3RhbnRV
bmlvbjsKK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb247CitjbGFzcyBUSW50ZXJtVHlwZWQ7CitjbGFz
cyBUSW50ZXJtU3ltYm9sOworY2xhc3MgVEludGVybUxvb3A7CitjbGFzcyBUSW5mb1Npbms7CisK
Ky8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGUgdHJlZSBub2RlcworLy8KK2NsYXNzIFRJbnRlcm1O
b2RlIHsKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xB
bGxvY2F0b3IpCisKKyAgICBUSW50ZXJtTm9kZSgpIDogbGluZSgwKSB7fQorICAgIHZpcnR1YWwg
VFNvdXJjZUxvYyBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkgeyBsaW5lID0gbDsgfQorICAgIHZpcnR1YWwgdm9p
ZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKikgPSAwOworICAgIHZpcnR1YWwgVEludGVybVR5
cGVkKiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0
YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgflRJbnRlcm1Ob2RlKCkgeyB9Citwcm90ZWN0ZWQ6CisgICAg
VFNvdXJjZUxvYyBsaW5lOworfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2Mu
CisvLworc3RydWN0IFRJbnRlcm1Ob2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOwor
ICAgIFRJbnRlcm1Ob2RlKiBub2RlMjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3Mg
Zm9yIG5vZGVzIHRoYXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVi
bGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUm
IHQpIDogdHlwZSh0KSAgeyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQo
KSAgICAgICAgIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShjb25z
dCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQorICAgIHZpcnR1YWwgY29uc3QgVFR5cGUmIGdldFR5
cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBUVHlwZSogZ2V0VHlwZVBv
aW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJh
c2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KKyAgICB2aXJ0
dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFs
aWZpZXIoKTsgfQorICAgIHZpcnR1YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7
IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigpOyB9CisgICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5h
bFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldE5vbWluYWxTaXplKCk7IH0KKyAgICB2aXJ0
dWFsIGludCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRJbnN0YW5jZVNpemUoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRy
aXgoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUu
aXNBcnJheSgpOyB9CisgICAgdmlydHVhbCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5pc1ZlY3RvcigpOyB9CisgICAgdmlydHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmco
KSAgICAgIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQorICAgIGNvbnN0
IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpICBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxp
ZmllclN0cmluZygpOyB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5
cGUgdHlwZTsKK307CisKKy8vCisvLyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxv
b3BzLgorLy8KK2NsYXNzIFRJbnRlcm1Mb29wIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1Ymxp
YzoKKyAgICBUSW50ZXJtTG9vcChUSW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGFCb2R5
LCBUSW50ZXJtVHlwZWQqIGFUZXN0LCBUSW50ZXJtVHlwZWQqIGFUZXJtaW5hbCwgYm9vbCB0ZXN0
Rmlyc3QpIDogCisgICAgICAgICAgICBpbml0KGluaXQpLAorICAgICAgICAgICAgYm9keShhQm9k
eSksCisgICAgICAgICAgICB0ZXN0KGFUZXN0KSwKKyAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJt
aW5hbCksCisgICAgICAgICAgICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorICAgIHZpcnR1YWwgVElu
dGVybUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2
b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBUSW50ZXJtTm9kZSAqZ2V0SW5p
dCgpIHsgcmV0dXJuIGluaXQ7IH0KKyAgICBUSW50ZXJtTm9kZSAqZ2V0Qm9keSgpIHsgcmV0dXJu
IGJvZHk7IH0KKyAgICBUSW50ZXJtVHlwZWQgKmdldFRlc3QoKSB7IHJldHVybiB0ZXN0OyB9Cisg
ICAgVEludGVybVR5cGVkICpnZXRUZXJtaW5hbCgpIHsgcmV0dXJuIHRlcm1pbmFsOyB9CisgICAg
Ym9vbCB0ZXN0Rmlyc3QoKSB7IHJldHVybiBmaXJzdDsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRl
cm1Ob2RlICppbml0OworICAgIFRJbnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBjb2RlIHRvIGxv
b3Agb3ZlcgorICAgIFRJbnRlcm1UeXBlZCAqdGVzdDsgICAgICAvLyBleGl0IGNvbmRpdGlvbiBh
c3NvY2lhdGVkIHdpdGggbG9vcCwgY291bGQgYmUgMCBmb3IgJ2ZvcicgbG9vcHMKKyAgICBUSW50
ZXJtVHlwZWQgKnRlcm1pbmFsOyAgLy8gZXhpc3RzIGZvciBmb3ItbG9vcHMKKyAgICBib29sIGZp
cnN0OyAgICAgICAgICAgICAgLy8gdHJ1ZSBmb3Igd2hpbGUgYW5kIGZvciwgbm90IGZvciBkby13
aGlsZQorfTsKKworLy8KKy8vIEhhbmRsZSBicmVhaywgY29udGludWUsIHJldHVybiwgYW5kIGtp
bGwuCisvLworY2xhc3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJs
aWM6CisgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogZSkgOgor
ICAgICAgICAgICAgZmxvd09wKG9wKSwKKyAgICAgICAgICAgIGV4cHJlc3Npb24oZSkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBUT3BlcmF0
b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRF
eHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQorcHJvdGVjdGVkOgorICAgIFRPcGVy
YXRvciBmbG93T3A7CisgICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8g
ZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRlbWVudHMKK307CisKKy8vCisvLyBOb2RlcyB0
aGF0IGNvcnJlc3BvbmQgdG8gc3ltYm9scyBvciBjb25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2Rl
LgorLy8KK2NsYXNzIFRJbnRlcm1TeW1ib2wgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1Ymxp
YzoKKyAgICAvLyBpZiBzeW1ib2wgaXMgaW5pdGlhbGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBt
ZW1vcnkgY29tZXMgZnJvbSB0aGUgcG9vbGFsbG9jYXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBm
cm9tCisgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVz
ZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQorICAgIC8vIGl0IGlzIGVzc2Vu
dGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAorICAgIFRJbnRl
cm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCisg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTt9IAorICAg
IHZpcnR1YWwgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVElu
dGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorcHJvdGVjdGVk
OgorICAgIGludCBpZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsKK307CisKK2NsYXNzIFRJbnRlcm1D
b25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVy
bUNvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYg
dCkgOiBUSW50ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9
CisgICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVy
biB1bmlvbkFycmF5UG9pbnRlcjsgfQorICAgIHZvaWQgc2V0VW5pb25BcnJheVBvaW50ZXIoQ29u
c3RhbnRVbmlvbiAqYykgeyB1bmlvbkFycmF5UG9pbnRlciA9IGM7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSAgeyByZXR1cm4gdGhpczsg
fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiApOworICAgIHZp
cnR1YWwgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9T
aW5rJik7Citwcm90ZWN0ZWQ6CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7
Cit9OworCisvLworLy8gSW50ZXJtZWRpYXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9s
ZCBvcGVyYXRvcnMuCisvLworY2xhc3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1U
eXBlZCB7CitwdWJsaWM6CisgICAgVE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7
IH0KKyAgICBib29sIG1vZGlmaWVzU3RhdGUoKSBjb25zdDsKKyAgICBib29sIGlzQ29uc3RydWN0
b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKSB7IHJldHVy
biB0cnVlOyB9Citwcm90ZWN0ZWQ6CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6
IFRJbnRlcm1UeXBlZChUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9Cisg
ICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQo
dCksIG9wKG8pIHt9ICAgCisgICAgVE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZv
ciBhbGwgdGhlIGJhc2ljIGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJt
QmluYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJp
bmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Iobykge30KKyAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0
KFRJbnRlcm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdo
dChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlw
ZWQqIGdldExlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgdmlydHVhbCBUSW50ZXJt
VHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcmlnaHQ7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlw
ZWQqIGxlZnQ7CisgICAgVEludGVybVR5cGVkKiByaWdodDsKK307CisKKy8vCisvLyBOb2RlcyBm
b3IgdW5hcnkgbWF0aCBvcGVyYXRvcnMuCisvLworY2xhc3MgVEludGVybVVuYXJ5IDogcHVibGlj
IFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBv
LCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCkge30KKyAgICBU
SW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBvcGVyYW5kKDAp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0K
KyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJhbmQ7
IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6
CisgICAgVEludGVybVR5cGVkKiBvcGVyYW5kOworfTsKKwordHlwZWRlZiBUVmVjdG9yPFRJbnRl
cm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwordHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmll
ckxpc3Q7CisvLworLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0cmFyeSBzaXplZCBz
ZXQgb2YgY2hpbGRyZW4uCisvLworY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50
ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1P
cGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSB7IH0K
KyAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwg
cHJhZ21hVGFibGUoMCkgeyB9CisgICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFn
bWFUYWJsZTsgfQorICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUo
KSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yKFRPcGVyYXRv
ciBvKSB7IG9wID0gbzsgfQorICAgIHZpcnR1YWwgVEludGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5j
ZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3Qg
VFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsg
dXNlckRlZmluZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVXNlckRlZmluZWQoKSB7
IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIHZpcnR1YWwgVFF1YWxpZmllckxpc3QmIGdldFF1
YWxpZmllcigpIHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0T3B0aW1pemUoYm9v
bCBvKSB7IG9wdGltaXplID0gbzsgfQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVn
ID0gZDsgfQorICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAg
IGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQorICAgIHZvaWQgYWRkVG9QcmFnbWFU
YWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7CisgICAgY29uc3QgVFByYWdtYVRhYmxl
JiBnZXRQcmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorcHJvdGVj
dGVkOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBk
aXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCisgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9
KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRv
cgorICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXF1ZW5jZTsKKyAgICBUUXVhbGlmaWVyTGlzdCBxdWFs
aWZpZXI7CisgICAgVFN0cmluZyBuYW1lOworICAgIGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQg
Zm9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1lcworICAgIGJvb2wgb3B0aW1pemU7CisgICAg
Ym9vbCBkZWJ1ZzsKKyAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOworfTsKKworLy8KKy8v
IEZvciBpZiB0ZXN0cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRl
bWVudC4KKy8vCitjbGFzcyBUSW50ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7
CitwdWJsaWM6CisgICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRl
cm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQikgOgorICAgICAgICAgICAgVEludGVy
bVR5cGVkKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRy
dWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQorICAgIFRJbnRlcm1TZWxlY3Rp
b24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBm
YWxzZUIsIGNvbnN0IFRUeXBlJiB0eXBlKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlw
ZSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIp
IHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBi
b29sIHVzZXNUZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29u
c3QgeyByZXR1cm4gY29uZGl0aW9uOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0VHJ1
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9CisgICAgdmlydHVhbCBUSW50ZXJt
Tm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICB2
aXJ0dWFsIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRo
aXM7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKKyAgICBUSW50
ZXJtTm9kZSogdHJ1ZUJsb2NrOworICAgIFRJbnRlcm1Ob2RlKiBmYWxzZUJsb2NrOworfTsKKwor
ZW51bSBWaXNpdAoreworICAgIFByZVZpc2l0LAorICAgIEluVmlzaXQsCisgICAgUG9zdFZpc2l0
Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUuICBVc2VyIHNob3VsZCBkZXJp
dmUgZnJvbSB0aGlzLCAKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBp
dCwgYW5kIHRoZW4gcGFzcworLy8gaXQgdG8gYSBUcmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hl
biB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50
IHZpc2l0ZWQuCisvLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHByZS12aXNpdCB0byBza2lwIHZpc2l0
aW5nIHRoYXQgbm9kZSdzIHN1YnRyZWUuCisvLworY2xhc3MgVEludGVybVRyYXZlcnNlcgorewor
cHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRv
cikKKworICAgIFRJbnRlcm1UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5W
aXNpdCA9IGZhbHNlLCBib29sIHBvc3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0g
ZmFsc2UpIDogCisgICAgICAgICAgICBwcmVWaXNpdChwcmVWaXNpdCksCisgICAgICAgICAgICBp
blZpc2l0KGluVmlzaXQpLAorICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCisgICAg
ICAgICAgICByaWdodFRvTGVmdChyaWdodFRvTGVmdCksCisgICAgICAgICAgICBkZXB0aCgwKSB7
fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQorICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVlO30K
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIFRJbnRlcm1Mb29wKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQorCisg
ICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KKyAgICB2b2lkIGRlY3JlbWVudERl
cHRoKCkge2RlcHRoLS07fQorCisgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKKyAgICBjb25zdCBi
b29sIGluVmlzaXQ7CisgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CisgICAgY29uc3QgYm9vbCBy
aWdodFRvTGVmdDsKKworcHJvdGVjdGVkOgorICAgIGludCBkZXB0aDsKK307CisKKyNlbmRpZiAv
LyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9sb2NhbGlu
dGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisjZGVmaW5lIF9M
T0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9m
ZnNldHNbNF07CisgICAgaW50IG51bTsKK307CisKKy8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0
aW9ucyB0byBoZWxwIHBhcnNlIGFuZCBidWlsZCB0aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Np
bms7CitjbGFzcyBUSW50ZXJtZWRpYXRlIHsKK3B1YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorCisgICAgVEludGVybWVkaWF0ZShU
SW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9CisgICAgVEludGVybVN5bWJvbCogYWRkU3lt
Ym9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgVFNvdXJjZUxvYyk7Cisg
ICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBU
SW50ZXJtVHlwZWQqKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2Ms
IFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQXNzaWduKFRPcGVyYXRvciBv
cCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jKTsK
KyAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBi
YXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQq
IGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgVFNvdXJjZUxv
YywgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShU
SW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0LCBUU291cmNlTG9jKTsKKyAgICBU
SW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJt
Tm9kZSosIFRPcGVyYXRvciwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybU5vZGUqICBhZGRTZWxl
Y3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgY29kZSwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBU
SW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVElu
dGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24q
IGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiosIGNvbnN0IFRUeXBlJiwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBU
SW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBib29sIHBhcnNlQ29uc3RUcmVlKFRTb3VyY2VM
b2MsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5bWJvbFRhYmxl
JiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAorICAg
IFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRJbnRlcm1Ob2RlKiwgVEludGVybU5vZGUqLCBUSW50ZXJt
VHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBib29sIHRlc3RGaXJzdCwgVFNvdXJjZUxvYyk7CisgICAg
VEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVFNvdXJjZUxvYyk7CisgICAgVElu
dGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBUU291cmNl
TG9jKTsKKyAgICBib29sIHBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiwgRVNoTGFuZ3VhZ2UpOwor
CXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1O
b2RlKik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rJiBpbmZvU2luazsKKworcHJp
dmF0ZToKKyAgICB2b2lkIG9wZXJhdG9yPShUSW50ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNz
aWdubWVudHMKK307CisKKyNlbmRpZiAvLyBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9vc2luY2x1ZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVy
L29zaW5jbHVkZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX09TSU5DTFVERV9ICisjZGVmaW5lIF9fT1NJ
TkNMVURFX0gKKworLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyB0aGUgd2luZG93
J3Mgc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMgYW55IHdpbmRvd3Mgc3BlY2lm
aWMgZnVuY3Rpb25zLgorLy8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42
NCkKKyNkZWZpbmUgQU5HTEVfT1NfV0lOCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChfX2xpbnV4X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19zdW4pCisjZGVmaW5lIEFOR0xF
X09TX1BPU0lYCisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgorI2VuZGlmCisK
KyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNkZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZDX0VY
VFJBTEVBTiAxCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19Q
T1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5j
bHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKKyNpbmNsdWRlICJjb21w
aWxlci9kZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwor
Ly8KKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYgRFdPUkQgT1NfVExTSW5kZXg7
CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VUX09GX0lOREVYRVMpCisjZWxp
ZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgT1NfVExTSW5k
ZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIDB4RkZGRkZGRkYKKyNlbmRpZiAgLy8g
QU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKTsKK2Jvb2wgT1Nf
U2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSk7Citib29sIE9T
X0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOworCitpbmxpbmUgdm9pZCogT1NfR2V0
VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGFzc2VydChuSW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQorICAgIHJldHVy
biBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyAg
ICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOworI2VuZGlmICAvLyBBTkdMRV9P
U19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvb3Nzb3VyY2VfcG9z
aXguY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9j
b21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBvc2l4
IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIK
KworI2lmICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBh
IHBvc2l4IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVpbGQuCisjZW5kaWYKKworLy8K
Ky8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19B
bGxvY1RMU0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQb29sSW5kZXg7CisKKyAgICAv
LworICAgIC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBpZiAoKHB0aHJl
YWRfa2V5X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDApIHsKKyAgICAgICAgYXNzZXJ0
KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2Nh
bCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICAgIHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKworCitib29sIE9TX1NldFRMU1Zh
bHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisgICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwgbHB2VmFsdWUpID09
IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAg
ICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxldGUgdGhlIGdsb2JhbCBwb29s
IGtleS4KKyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxldGUobkluZGV4KSA9PSAwKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvb3Nzb3VyY2Vf
d2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9v
c2luY2x1ZGUuaCIKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRv
dydzIHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1dJTikK
KyNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNpZmljIGZpbGUgaW4gYSBub24g
d2luZG93cyBidWlsZC4KKyNlbmRpZgorCisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBP
cGVyYXRpb25zCisvLworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7CisJRFdPUkQg
ZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVT
KSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0
ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
CisJfQorCisJcmV0dXJuIGR3SW5kZXg7Cit9CisKKworYm9vbCBPU19TZXRUTFNWYWx1ZShPU19U
TFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQoreworCWlmIChuSW5kZXggPT0gT1NfSU5W
QUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFs
aWQgVExTIEluZGV4Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzU2V0VmFsdWUo
bkluZGV4LCBscHZWYWx1ZSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNl
OworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKwlp
ZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19T
ZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor
CisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g
ZmFsc2U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVy
L3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIzMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9u
ZyBkYXRhIGZyb20gbm9kZSB0byBub2RlIGluIAorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNz
IFRDb25zdFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAg
ICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0
UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xU
YWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0KSwK
KyAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFudFBh
cmFtKHNpbmdsZUNvbnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3ltVGFi
bGUpLCBlcnJvcihmYWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQorCXsKKwkJ
aW5kZXggPSAwOworCX0KKworCWJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwor
CWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwli
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisJYm9v
bCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisJYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgaW50IGluZGV4OworICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CisgICAgVFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3Ig
Y29uc3RydWN0b3JUeXBlOworICAgIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5m
b1NpbmsmIGluZm9TaW5rOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7CisgICAgaW50
IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29s
IGlzTWF0cml4OworICAgIGludCBtYXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJp
eCAobm9taW5hbCBzaXplIGFuZCBub3QgdGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8g
VGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxh
c3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8g
UmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2
ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRy
ZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNl
cjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25z
dGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuOworCit9CisK
K2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSogbm9kZSkKK3sKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKTsKKyAgICAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7
CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3In
IDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBl
LmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3Ig
PSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNv
bnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVu
ZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVm
LmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVy
cm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJz
ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQor
eworICAgIGlmICghbm9kZS0+aXNDb25zdHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9w
Q29tbWEpIHsKKyAgICAgICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25z
dHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBw
ZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgewor
ICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9y
VHlwZSA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0
T2JqZWN0U2l6ZSgpOworCisgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkg
eworICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9
IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAg
ICAKKworICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2Vx
dWVuY2UoKS5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAh
PSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+
Z2V0T3AoKSA9PSBFT3BDb21tYSkKKyAgICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAor
CisgICAgICAgICgqcCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykg
CisgICAgeworICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAg
IGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBp
c01hdHJpeCA9IGZhbHNlOworICAgICAgICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlz
aXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29u
c3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlv
biogbGVmdFVuaW9uQXJyYXkgPSB1bmlvbkFycmF5OworICAgIGludCBpbnN0YW5jZVNpemUgPSB0
eXBlLmdldE9iamVjdFNpemUoKTsKKworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAg
ICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAg
ICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGluZGV4ID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07
CisKKyAgICAgICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGludCB0b3RhbFNpemUgPSBpbmRleCArIHNpemU7CisgICAgICAgIENvbnN0YW50VW5pb24g
KnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAg
IGlmICghaXNNYXRyaXgpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291
bnRdOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAg
ICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0b3JzCisgICAgICAgICAgICBpbnQgY291bnQgPSAw
OworICAgICAgICAgICAgaW50IGVsZW1lbnQgPSBpbmRleDsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkg
Pj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBlbGVtZW50KSAlIChtYXRyaXhTaXpl
ICsgMSkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmln
aHRVbmlvbkFycmF5W2NvdW50XTsKKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisKKyAgICAgICAgICAg
ICAgICAoaW5kZXgpKys7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdl
dE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitib29sIFRDb25z
dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sK
KyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJMb29wIE5v
ZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAg
IGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVy
c2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCcmFuY2ggTm9k
ZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAg
ZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4K
Ky8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAg
cHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwg
c3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cGFyc2VDb25zdFRy
ZWUoVFNvdXJjZUxvYyBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5p
b25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQoreworICAgIGlmIChyb290
ID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRDb25zdFRyYXZlcnNlciBpdCh1
bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5r
LCBzeW1ib2xUYWJsZSwgdCk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworICAgIGlmIChp
dC5lcnJvcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
ZmFsc2U7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVy
L3RyYW5zbGF0b3JfY29tbW9uLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3RyYW5zbGF0b3JfY29tbW9uLnZjcHJvagkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdHJhbnNs
YXRvcl9jb21tb24udmNwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2NiBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1By
b2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5h
bWU9InRyYW5zbGF0b3JfY29tbW9uIg0KKwlQcm9qZWN0R1VJRD0iezVCM0E2REI4LTFFN0UtNDBE
Ny05MkI5LURBOEFBRTYxOUZBRH0iDQorCVJvb3ROYW1lc3BhY2U9ImNvbXBpbGVyIg0KKwlLZXl3
b3JkPSJXaW4zMlByb2oiDQorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0K
Kwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8
L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0
aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUlu
dGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSlcY29tbW9uIg0KKwkJCUNv
bmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIp
Li4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJV
RztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCINCisJCQkJTWluaW1hbFJl
YnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxp
YnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2
ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJ
CURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0xpYnJhcmlhblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENv
bmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9y
eT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpXGNvbW1vbiINCisJCQlDb25maWd1cmF0aW9u
VHlwZT0iNCINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0
aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29s
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiIN
CisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcik7JChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIp
Li4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJV
RztfTElCO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0K
KwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQor
CQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1z
PSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3Vy
YXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5j
ZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJ
RmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlV
bmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIN
CisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGRlYnVnLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2xzbGFuZy5s
Ig0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2lu
MzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29s
Ig0KKwkJCQkJCURlc2NyaXB0aW9uPSJFeGVjdXRpbmcgZmxleCBvbiAkKElucHV0UGF0aCkiDQor
CQkJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7aWYgRVhJU1QgJnF1b3Q7JChJ
bnB1dERpcilHZW5fZ2xzbGFuZy5jcHAmcXVvdDsgZGVsICZxdW90OyQoSW5wdXREaXIpR2VuX2ds
c2xhbmcuY3BwJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChJbnB1dERpcil0b29sc1xmbGV4LmV4
ZSZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTtyZW5hbWUgJnF1b3Q7
JChJbnB1dERpcilsZXgueXkuYyZxdW90OyBHZW5fJChJbnB1dE5hbWUpLmNwcCYjeDBEOyYjeDBB
O0BlY2hvIG9mZiINCisJCQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbHNsYW5nX3RhYi5o
Ig0KKwkJCQkJCU91dHB1dHM9IiQoSW5wdXREaXIpR2VuX2dsc2xhbmcuY3BwIg0KKwkJCQkJLz4N
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJ
CQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQlEZXNjcmlwdGlvbj0iRXhlY3V0aW5nIGZsZXgg
b24gJChJbnB1dFBhdGgpIg0KKwkJCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBB
O2lmIEVYSVNUICZxdW90OyQoSW5wdXREaXIpR2VuX2dsc2xhbmcuY3BwJnF1b3Q7IGRlbCAmcXVv
dDskKElucHV0RGlyKUdlbl9nbHNsYW5nLmNwcCZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoSW5w
dXREaXIpdG9vbHNcZmxleC5leGUmcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7
JiN4MEE7cmVuYW1lICZxdW90OyQoSW5wdXREaXIpbGV4Lnl5LmMmcXVvdDsgR2VuXyQoSW5wdXRO
YW1lKS5jcHAmI3gwRDsmI3gwQTtAZWNobyBvZmYiDQorCQkJCQkJQWRkaXRpb25hbERlcGVuZGVu
Y2llcz0iZ2xzbGFuZ190YWIuaCINCisJCQkJCQlPdXRwdXRzPSIkKElucHV0RGlyKUdlbl9nbHNs
YW5nLmNwcCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnbHNsYW5nLnkiDQorCQkJCT4NCisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4N
CisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJRGVz
Y3JpcHRpb249IkV4ZWN1dGluZyBCaXNvbiBvbiAkKElucHV0UGF0aCkiDQorCQkJCQkJQ29tbWFu
ZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7U0VUIEJJU09OX1NJTVBMRT10b29sc1xiaXNvbi5z
aW1wbGUmI3gwRDsmI3gwQTtTRVQgQklTT05fSEFJUlk9dG9vbHNcYmlzb24uc2ltcGxlJiN4MEQ7
JiN4MEE7aWYgRVhJU1QgJnF1b3Q7JChJbnB1dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAm
cXVvdDsgZGVsICZxdW90OyQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwJnF1b3Q7
JiN4MEQ7JiN4MEE7dG9vbHNcYmlzb24uZXhlIC1kIC10IC12ICQoSW5wdXROYW1lKS55JiN4MEQ7
JiN4MEE7cmVuYW1lICZxdW90OyQoSW5wdXREaXIpJChJbnB1dE5hbWUpX3RhYi5jJnF1b3Q7IEdl
bl8kKElucHV0TmFtZSlfdGFiLmNwcCYjeDBEOyYjeDBBO0BlY2hvIG9mZiINCisJCQkJCQlPdXRw
dXRzPSIkKElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCINCisJCQkJCS8+DQorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkND
dXN0b21CdWlsZFRvb2wiDQorCQkJCQkJRGVzY3JpcHRpb249IkV4ZWN1dGluZyBCaXNvbiBvbiAk
KElucHV0UGF0aCkiDQorCQkJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7U0VU
IEJJU09OX1NJTVBMRT10b29sc1xiaXNvbi5zaW1wbGUmI3gwRDsmI3gwQTtTRVQgQklTT05fSEFJ
Ulk9dG9vbHNcYmlzb24uc2ltcGxlJiN4MEQ7JiN4MEE7aWYgRVhJU1QgJnF1b3Q7JChJbnB1dERp
cilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAmcXVvdDsgZGVsICZxdW90OyQoSW5wdXREaXIpR2Vu
XyQoSW5wdXROYW1lKV90YWIuY3BwJnF1b3Q7JiN4MEQ7JiN4MEE7dG9vbHNcYmlzb24uZXhlIC1k
IC10IC12ICQoSW5wdXROYW1lKS55JiN4MEQ7JiN4MEE7cmVuYW1lICZxdW90OyQoSW5wdXREaXIp
JChJbnB1dE5hbWUpX3RhYi5jJnF1b3Q7IEdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCYjeDBEOyYj
eDBBO0BlY2hvIG9mZiINCisJCQkJCQlPdXRwdXRzPSIkKElucHV0RGlyKUdlbl8kKElucHV0TmFt
ZSlfdGFiLmNwcCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbmZvU2luay5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluaXRpYWxp
emUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxJbml0aWFsaXplRGxsLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW50ZXJtZWRpYXRlLmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5caW50ZXJtT3V0LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW50ZXJtVHJh
dmVyc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxMaW5rLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cb3Nzb3VyY2Vfd2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccGFyc2VDb25zdC5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFBhcnNlSGVscGVyLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UG9vbEFsbG9jLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUXVhbGlmaWVyQWxpdmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW1vdmVUcmVlLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyTGFuZy5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN5
bWJvbFRhYmxlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5h
bWU9InByZXByb2Nlc3NvciINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuXHByZXByb2Nlc3NvclxhdG9tLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcY3BwLmMiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNz
b3JcY3Bwc3RydWN0LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcbWVtb3J5LmMiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3Jcc2Nh
bm5lci5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHN5bWJvbHMuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3Nvclx0b2tlbnMuYyIN
CisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJCTxGaWx0ZXINCisJCQkJ
TmFtZT0iZ2VuZXJhdGVkIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cR2VuX2dsc2xhbmcuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii5cR2VuX2dsc2xhbmdfdGFiLmNwcCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFt
ZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIg0K
KwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVC
RkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQmFzZVR5cGVzLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENv
bW1vbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxDb25zdGFudFVuaW9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXGRlYnVnLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluZm9TaW5rLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluaXRpYWxpemUuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZURs
bC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxJbml0aWFsaXplR2xvYmFscy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplUGFyc2VDb250ZXh0LmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGludGVybWVkaWF0ZS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxs
b2NhbGludGVybWVkaWF0ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxNTWFwLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXG9zaW5jbHVkZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQYXJzZUhlbHBlci5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQb29sQWxsb2MuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVh
bGlmaWVyQWxpdmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUmVtb3ZlVHJlZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTFNMQU5HXFJlc291cmNlTGltaXRz
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTaEhhbmRsZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTeW1ib2xUYWJsZS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUeXBl
cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Llx1bmlzdGQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9
InByZXByb2Nlc3NvciINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
XHByZXByb2Nlc3NvclxhdG9tLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcY29tcGlsZS5oIg0KKwkJCQkJPg0K
KwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vz
c29yXGNwcC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXG1lbW9yeS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHBhcnNlci5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5ccHJlcHJvY2Vzc29yXHByZXByb2Nlc3MuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxzY2FubmVyLmgiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxw
cmVwcm9jZXNzb3Jcc2xnbG9iYWxzLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3Jcc3ltYm9scy5oIg0KKwkJCQkJ
Pg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJv
Y2Vzc29yXHRva2Vucy5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQor
CQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJnZW5lcmF0ZWQiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLlxnbHNsYW5nX3RhYi5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQor
CTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci90cmFuc2xhdG9yX2hsc2wudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdHJhbnNs
YXRvcl9obHNsLnZjcHJvagkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvY29tcGlsZXIvdHJhbnNsYXRvcl9obHNsLnZjcHJvagkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1
MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0K
KwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJ0cmFuc2xhdG9yX2hsc2wiDQorCVByb2plY3RHVUlE
PSJ7NTYyMEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fSINCisJUm9vdE5hbWVzcGFj
ZT0iQ3Jvc3NDb21waWxlckhMU0wiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJh
bWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0N
CisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0K
Kwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZp
Z3VyYXRpb25OYW1lKVxobHNsIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUNoYXJh
Y3RlclNldD0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249
IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikuLi87
JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJXSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztOT01JTk1BWCINCisJ
CQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJ
CQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJ
CQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJ
PC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25O
YW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpXGhs
c2wiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJ
CVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRh
R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2Vydmlj
ZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlE
TFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0K
KwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0K
KwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJCUFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1
ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtfQ1JU
X1NFQ1VSRV9OT19XQVJOSU5HUztOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJCQlSdW50aW1l
TGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQorCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xp
YnJhcmlhblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bv
c3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZp
Z3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQor
CQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y2M7
Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0i
ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQorCQkJPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb2RlR2VuSExTTC5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXE91dHB1dEhMU0wuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUcmFuc2xh
dG9ySExTTC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFVuZm9sZFNlbGVjdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0Zp
bHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJo
O2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1Mzgw
LTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxPdXRwdXRITFNMLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRyYW5zbGF0b3JITFNMLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFVuZm9sZFNlbGVjdC5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxz
Pg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci91bmlzdGQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdW5pc3Rk
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKy8vIFRoaXMgaXMgYSBOVUxMIGZpbGUgYW5k
IGlzIG1lYW50IHRvIGJlIGVtcHR5CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVw
cm9jZXNzb3IvYXRvbS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0MCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklE
SUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMg
dGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2Rp
ZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0
aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdp
dGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJq
ZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhj
bHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2lu
YWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXBy
b2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1z
OyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwg
eW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCBy
ZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUs
IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRp
b24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMg
bm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwg
YXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQg
dG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZh
dGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2Fy
ZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVy
LiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMi
IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJ
VEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVT
RSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVS
CitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5Z
IFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJ
TiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5E
L09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQg
QU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisKKy8vCisvLyBhdG9tLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCisKKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiByZWFsbG9jCisjdW5kZWYgZnJlZQor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN0cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCB2YWw7CisgICAgY29uc3Qg
Y2hhciAqc3RyOworfSB0b2tlbnNbXSA9IHsKKyAgICB7IENQUF9BTkRfT1AsICAgICAgICAgIiYm
IiB9LAorICAgIHsgQ1BQX0FORF9BU1NJR04sICAgICAiJj0iIH0sCisgICAgeyBDUFBfU1VCX0FT
U0lHTiwgICAgICItPSIgfSwKKyAgICB7IENQUF9NT0RfQVNTSUdOLCAgICAgIiU9IiB9LAorICAg
IHsgQ1BQX0FERF9BU1NJR04sICAgICAiKz0iIH0sCisgICAgeyBDUFBfRElWX0FTU0lHTiwgICAg
ICIvPSIgfSwKKyAgICB7IENQUF9NVUxfQVNTSUdOLCAgICAgIio9IiB9LAorICAgIHsgQ1BQX1JJ
R0hUX0JSQUNLRVQsICAiOj4iIH0sCisgICAgeyBDUFBfRVFfT1AsICAgICAgICAgICI9PSIgfSwK
KyAgICB7IENQUF9YT1JfT1AsICAgICAgICAgIl5eIiB9LCAKKyAgICB7IENQUF9YT1JfQVNTSUdO
LCAgICAgIl49IiB9LCAKKyAgICB7IENQUF9GTE9BVENPTlNUQU5ULCAgIjxmbG9hdC1jb25zdD4i
IH0sCisgICAgeyBDUFBfR0VfT1AsICAgICAgICAgICI+PSIgfSwKKyAgICB7IENQUF9SSUdIVF9P
UCwgICAgICAgIj4+IiB9LAorICAgIHsgQ1BQX1JJR0hUX0FTU0lHTiwgICAiPj49IiB9LCAKKyAg
ICB7IENQUF9JREVOVElGSUVSLCAgICAgIjxpZGVudD4iIH0sCisgICAgeyBDUFBfSU5UQ09OU1RB
TlQsICAgICI8aW50LWNvbnN0PiIgfSwKKyAgICB7IENQUF9MRV9PUCwgICAgICAgICAgIjw9IiB9
LAorICAgIHsgQ1BQX0xFRlRfT1AsICAgICAgICAiPDwiIH0sCisgICAgeyBDUFBfTEVGVF9BU1NJ
R04sICAgICI8PD0iIH0sCisgICAgeyBDUFBfTEVGVF9CUkFDS0VULCAgICI8OiIgfSwKKyAgICB7
IENQUF9MRUZUX0JSQUNFLCAgICAgIjwlIiB9LCAKKyAgICB7IENQUF9ERUNfT1AsICAgICAgICAg
Ii0tIiB9LAorICAgIHsgQ1BQX1JJR0hUX0JSQUNFLCAgICAiJT4iIH0sIAorICAgIHsgQ1BQX05F
X09QLCAgICAgICAgICAiIT0iIH0sCisgICAgeyBDUFBfT1JfT1AsICAgICAgICAgICJ8fCIgfSwK
KyAgICB7IENQUF9PUl9BU1NJR04sICAgICAgInw9IiB9LCAKKyAgICB7IENQUF9JTkNfT1AsICAg
ICAgICAgIisrIiB9LAorICAgIHsgQ1BQX1NUUkNPTlNUQU5ULCAgICAiPHN0cmluZy1jb25zdD4i
IH0sCisgICAgeyBDUFBfVFlQRUlERU5USUZJRVIsICI8dHlwZS1pZGVudD4iIH0sCit9OworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN0cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyNkZWZpbmUgSU5JVF9TVFJJTkdfVEFCTEVfU0laRSAxNjM4NAorCit0eXBlZGVmIHN0
cnVjdCBTdHJpbmdUYWJsZV9SZWMgeworICAgIGNoYXIgKnN0cmluZ3M7CisgICAgaW50IG5leHRG
cmVlOworICAgIGludCBzaXplOworfSBTdHJpbmdUYWJsZTsKKworLyoKKyAqIEluaXRTdHJpbmdU
YWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHRhYmxlLgorICoKKyAqLworCitzdGF0aWMg
aW50IEluaXRTdHJpbmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQoreworICAgIHN0YWJsZS0+
c3RyaW5ncyA9IChjaGFyICopIG1hbGxvYyhJTklUX1NUUklOR19UQUJMRV9TSVpFKTsKKyAgICBp
ZiAoIXN0YWJsZS0+c3RyaW5ncykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gWmVyby10aCBv
ZmZzZXQgbWVhbnMgImVtcHR5IiBzbyBkb24ndCB1c2UgaXQuCisgICAgc3RhYmxlLT5uZXh0RnJl
ZSA9IDE7CisgICAgc3RhYmxlLT5zaXplID0gSU5JVF9TVFJJTkdfVEFCTEVfU0laRTsKKyAgICBy
ZXR1cm4gMTsKK30gLy8gSW5pdFN0cmluZ1RhYmxlCisKKy8qCisgKiBGcmVlU3RyaW5nVGFibGUo
KSAtIEZyZWUgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKi8KKworc3RhdGljIHZvaWQgRnJlZVN0
cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCit7CisgICAgaWYgKHN0YWJsZS0+c3RyaW5n
cykKKyAgICAgICAgZnJlZShzdGFibGUtPnN0cmluZ3MpOworICAgIHN0YWJsZS0+c3RyaW5ncyA9
IE5VTEw7CisgICAgc3RhYmxlLT5uZXh0RnJlZSA9IDA7CisgICAgc3RhYmxlLT5zaXplID0gMDsK
K30gLy8gRnJlZVN0cmluZ1RhYmxlCisKKy8qCisgKiBIYXNoU3RyaW5nKCkgLSBIYXNoIGEgc3Ry
aW5nIHdpdGggdGhlIGJhc2UgaGFzaCBmdW5jdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGludCBI
YXNoU3RyaW5nKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGh2YWwgPSAwOworCisgICAgd2hp
bGUgKCpzKSB7CisgICAgICAgIGh2YWwgPSAoaHZhbCoxMzUwNyArICpzKjE5NykgXiAoaHZhbCA+
PiAyKTsKKyAgICAgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gaHZhbCAmIDB4N2ZmZmZmZmY7
Cit9IC8vIEhhc2hTdHJpbmcKKworLyoKKyAqIEhhc2hTdHJpbmcyKCkgLSBIYXNoIGEgc3RyaW5n
IHdpdGggdGhlIGluY3JpbWVudGluZyBoYXNoIGZ1bmN0aW9uLgorICoKKyAqLworCitzdGF0aWMg
aW50IEhhc2hTdHJpbmcyKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGh2YWwgPSAwOworCisg
ICAgd2hpbGUgKCpzKSB7CisgICAgICAgIGh2YWwgPSAoaHZhbCo3MjkgKyAqcyozNykgXiAoaHZh
bCA+PiAxKTsKKyAgICAgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gaHZhbDsKK30gLy8gSGFz
aFN0cmluZzIKKworLyoKKyAqIEFkZFN0cmluZygpIC0gQWRkIGEgc3RyaW5nIHRvIGEgc3RyaW5n
IHRhYmxlLiAgUmV0dXJuIGl0J3Mgb2Zmc2V0LgorICoKKyAqLworCitzdGF0aWMgaW50IEFkZFN0
cmluZyhTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBsZW4s
IGxvYzsKKyAgICBjaGFyICpzdHI7CisKKyAgICBsZW4gPSAoaW50KSBzdHJsZW4ocyk7CisgICAg
aWYgKHN0YWJsZS0+bmV4dEZyZWUgKyBsZW4gKyAxID49IHN0YWJsZS0+c2l6ZSkgeworICAgICAg
ICBhc3NlcnQoc3RhYmxlLT5zaXplIDwgMTAwMDAwMCk7CisgICAgICAgIHN0ciA9IChjaGFyICop
IG1hbGxvYyhzdGFibGUtPnNpemUqMik7CisgICAgICAgIG1lbWNweShzdHIsIHN0YWJsZS0+c3Ry
aW5ncywgc3RhYmxlLT5zaXplKTsKKyAgICAgICAgZnJlZShzdGFibGUtPnN0cmluZ3MpOworICAg
ICAgICBzdGFibGUtPnN0cmluZ3MgPSBzdHI7CisgICAgfQorICAgIGxvYyA9IHN0YWJsZS0+bmV4
dEZyZWU7CisgICAgc3RyY3B5KCZzdGFibGUtPnN0cmluZ3NbbG9jXSwgcyk7CisgICAgc3RhYmxl
LT5uZXh0RnJlZSArPSBsZW4gKyAxOworICAgIHJldHVybiBsb2M7Cit9IC8vIEFkZFN0cmluZwor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBIYXNoIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKyNkZWZpbmUgSU5JVF9IQVNIX1RBQkxFX1NJWkUgMjA0NworI2RlZmluZSBIQVNI
X1RBQkxFX01BWF9DT0xMSVNJT05TIDMKKwordHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5X1JlYyB7
CisgICAgaW50IGluZGV4OyAgICAgIC8vIFN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc3RyaW5nIHJl
cHJlc2VudGF0aW9uCisgICAgaW50IHZhbHVlOyAgICAgIC8vIEF0b20gKHN5bWJvbCkgdmFsdWUK
K30gSGFzaEVudHJ5OworCit0eXBlZGVmIHN0cnVjdCBIYXNoVGFibGVfUmVjIHsKKyAgICBIYXNo
RW50cnkgKmVudHJ5OworICAgIGludCBzaXplOworICAgIGludCBlbnRyaWVzOworICAgIGludCBj
b3VudHNbSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOworfSBIYXNoVGFibGU7CisKKy8q
CisgKiBJbml0SGFzaFRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgorICoKKyAq
LworCitzdGF0aWMgaW50IEluaXRIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUsIGludCBmc2l6
ZSkKK3sKKyAgICBpbnQgaWk7CisKKyAgICBodGFibGUtPmVudHJ5ID0gKEhhc2hFbnRyeSAqKSBt
YWxsb2Moc2l6ZW9mKEhhc2hFbnRyeSkqZnNpemUpOworICAgIGlmICghaHRhYmxlLT5lbnRyeSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaHRhYmxlLT5zaXplID0gZnNpemU7CisgICAgZm9yIChp
aSA9IDA7IGlpIDwgZnNpemU7IGlpKyspIHsKKyAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0uaW5k
ZXggPSAwOworICAgICAgICBodGFibGUtPmVudHJ5W2lpXS52YWx1ZSA9IDA7CisgICAgfQorICAg
IGh0YWJsZS0+ZW50cmllcyA9IDA7CisgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVf
TUFYX0NPTExJU0lPTlM7IGlpKyspCisgICAgICAgIGh0YWJsZS0+Y291bnRzW2lpXSA9IDA7Cisg
ICAgcmV0dXJuIDE7Cit9IC8vIEluaXRIYXNoVGFibGUKKworLyoKKyAqIEZyZWVIYXNoVGFibGUo
KSAtIEZyZWUgdGhlIGhhc2ggdGFibGUuCisgKgorICovCisKK3N0YXRpYyB2b2lkIEZyZWVIYXNo
VGFibGUoSGFzaFRhYmxlICpodGFibGUpCit7CisgICAgaWYgKGh0YWJsZS0+ZW50cnkpCisgICAg
ICAgIGZyZWUoaHRhYmxlLT5lbnRyeSk7CisgICAgaHRhYmxlLT5lbnRyeSA9IE5VTEw7CisgICAg
aHRhYmxlLT5zaXplID0gMDsKKyAgICBodGFibGUtPmVudHJpZXMgPSAwOworfSAvLyBGcmVlSGFz
aFRhYmxlCisKKy8qCisgKiBFbXB0eSgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBl
bXB0eS4KKyAqCisgKi8KKworc3RhdGljIGludCBFbXB0eShIYXNoVGFibGUgKmh0YWJsZSwgaW50
IGhhc2hsb2MpCit7CisgICAgYXNzZXJ0KGhhc2hsb2MgPj0gMCAmJiBoYXNobG9jIDwgaHRhYmxl
LT5zaXplKTsKKyAgICBpZiAoaHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleCA9PSAwKSB7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
K30gLy8gRW1wdHkKKworLyoKKyAqIE1hdGNoKCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5
IGlzIG1hdGNoZXMgYSBzdHJpbmcuCisgKgorICovCisKK3N0YXRpYyBpbnQgTWF0Y2goSGFzaFRh
YmxlICpodGFibGUsIFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBoYXNo
bG9jKQoreworICAgIGludCBzdHJsb2M7CisKKyAgICBzdHJsb2MgPSBodGFibGUtPmVudHJ5W2hh
c2hsb2NdLmluZGV4OworICAgIGlmICghc3RyY21wKHMsICZzdGFibGUtPnN0cmluZ3Nbc3RybG9j
XSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfSAvLyBNYXRjaAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBBdG9tIHRh
YmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgSU5JVF9BVE9NX1RBQkxFX1NJ
WkUgMTAyNAorCisKK3N0cnVjdCBBdG9tVGFibGVfUmVjIHsKKyAgICBTdHJpbmdUYWJsZSBzdGFi
bGU7IC8vIFN0cmluZyB0YWJsZS4KKyAgICBIYXNoVGFibGUgaHRhYmxlOyAgIC8vIEhhc2hlcyBz
dHJpbmcgdG8gYXRvbSBudW1iZXIgYW5kIHRva2VuIHZhbHVlLiAgTXVsdGlwbGUgc3RyaW5ncyBj
YW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgdG9rZW4gdmFsdWUg
YnV0IGVhY2ggdW5pcXVlIHN0cmluZyBpcyBhIHVuaXF1ZSBhdG9tLgorICAgIGludCAqYW1hcDsg
ICAgICAgICAgLy8gTWFwcyBhdG9tIHZhbHVlIHRvIG9mZnNldCBpbiBzdHJpbmcgdGFibGUuICBB
dG9tcyBhbGwgbWFwIHRvIHVuaXF1ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5n
cyBleGNlcHQgZm9yIHNvbWUgdW5kZWZpbmVkIHZhbHVlcyBpbiB0aGUgbG93ZXIsIGZpeGVkIHBh
cnQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBhdG9tIHRhYmxlIHRoYXQgbWFw
IHRvICI8dW5kZWZpbmVkPiIuICBUaGUgbG93ZXN0IDI1NiBhdG9tcworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY29ycmVzcG9uZCB0byBzaW5nbGUgY2hhcmFjdGVyIEFTQ0lJIHZhbHVlcyBl
eGNlcHQgZm9yIGFscGhhbnVtZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFj
dGVycyBhbmQgJ18nLCB3aGljaCBjYW4gYmUgb3RoZXIgdG9rZW5zLiAgTmV4dCBjb21lIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2UgdG9rZW5zIHdpdGggdGhlaXIgYXRv
bSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHRva2VuIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlbiBjb21lIHByZWRlZmluZWQgYXRvbXMsIGZvbGxvd2VkIGJ5IHVzZXIgc3BlY2lm
aWVkIGlkZW50aWZpZXJzLgorICAgIGludCAqYXJldjsgICAgICAgICAgLy8gUmV2ZXJzZWQgYXRv
bSBmb3Igc3ltYm9sIHRhYmxlIHVzZS4KKyAgICBpbnQgbmV4dEZyZWU7CisgICAgaW50IHNpemU7
Cit9OworCitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitBdG9tVGFibGUg
KmF0YWJsZSA9ICZsYXRhYmxlOworCitzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUg
KmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOworCisvKgorICogR3Jvd0F0b21UYWJs
ZSgpIC0gR3JvdyB0aGUgYXRvbSB0YWJsZSB0byBhdCBsZWFzdCAic2l6ZSIgaWYgaXQncyBzbWFs
bGVyLgorICoKKyAqLworCitzdGF0aWMgaW50IEdyb3dBdG9tVGFibGUoQXRvbVRhYmxlICphdGFi
bGUsIGludCBzaXplKQoreworICAgIGludCAqbmV3bWFwLCAqbmV3cmV2OworCisgICAgaWYgKGF0
YWJsZS0+c2l6ZSA8IHNpemUpIHsKKyAgICAgICAgaWYgKGF0YWJsZS0+YW1hcCkgeworICAgICAg
ICAgICAgbmV3bWFwID0gcmVhbGxvYyhhdGFibGUtPmFtYXAsIHNpemVvZihpbnQpKnNpemUpOwor
ICAgICAgICAgICAgbmV3cmV2ID0gcmVhbGxvYyhhdGFibGUtPmFyZXYsIHNpemVvZihpbnQpKnNp
emUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3bWFwID0gbWFsbG9jKHNpemVv
ZihpbnQpKnNpemUpOworICAgICAgICAgICAgbmV3cmV2ID0gbWFsbG9jKHNpemVvZihpbnQpKnNp
emUpOworICAgICAgICAgICAgYXRhYmxlLT5zaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIW5ld21hcCB8fCAhbmV3cmV2KSB7CisgICAgICAgICAgICAvKiBmYWlsZWQgdG8gZ3JvdyAt
LSBlcnJvciAqLworICAgICAgICAgICAgaWYgKG5ld21hcCkKKyAgICAgICAgICAgICAgICBhdGFi
bGUtPmFtYXAgPSBuZXdtYXA7CisgICAgICAgICAgICBpZiAobmV3cmV2KQorICAgICAgICAgICAg
ICAgIGF0YWJsZS0+YW1hcCA9IG5ld3JldjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgfQorICAgICAgICBtZW1zZXQoJm5ld21hcFthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0
YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbXNldCgmbmV3cmV2W2F0YWJs
ZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOworICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7
CisgICAgICAgIGF0YWJsZS0+c2l6ZSA9IHNpemU7CisgICAgfQorICAgIHJldHVybiAwOworfSAv
LyBHcm93QXRvbVRhYmxlCisKKy8qCisgKiBsUmV2ZXJzZSgpIC0gUmV2ZXJzZSB0aGUgYm90dG9t
IDIwIGJpdHMgb2YgYSAzMiBiaXQgaW50LgorICoKKyAqLworCitzdGF0aWMgaW50IGxSZXZlcnNl
KGludCBmdmFsKQoreworICAgIHVuc2lnbmVkIGludCBpbiA9IGZ2YWw7CisgICAgaW50IHJlc3Vs
dCA9IDAsIGNudCA9IDA7CisKKyAgICB3aGlsZShpbikgeworICAgICAgICByZXN1bHQgPDw9IDE7
CisgICAgICAgIHJlc3VsdCB8PSBpbiYxOworICAgICAgICBpbiA+Pj0gMTsKKyAgICAgICAgY250
Kys7CisgICAgfQorCisgICAgLy8gRG9uJ3QgdXNlIGFsbCAzMSBiaXRzLiAgT25lIG1pbGxpb24g
YXRvbXMgaXMgcGxlbnR5IGFuZCBzb21ldGltZXMgdGhlCisgICAgLy8gdXBwZXIgYml0cyBhcmUg
dXNlZCBmb3Igb3RoZXIgdGhpbmdzLgorCisgICAgaWYgKGNudCA8IDIwKQorICAgICAgICByZXN1
bHQgPDw9IDIwIC0gY250OworICAgIHJldHVybiByZXN1bHQ7Cit9IC8vIGxSZXZlcnNlCisKKy8q
CisgKiBBbGxvY2F0ZUF0b20oKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20uICBBc3NvY2lhdGVkIHdp
dGggdGhlICJ1bmRlZmluZWQiIHZhbHVlIG9mIC0xLgorICoKKyAqLworCitzdGF0aWMgaW50IEFs
bG9jYXRlQXRvbShBdG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBpZiAoYXRhYmxlLT5uZXh0RnJl
ZSA+PSBhdGFibGUtPnNpemUpCisgICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBhdGFibGUt
Pm5leHRGcmVlKjIpOworICAgIGF0YWJsZS0+YW1hcFthdGFibGUtPm5leHRGcmVlXSA9IC0xOwor
ICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4
dEZyZWUpOworICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKKyAgICByZXR1cm4gYXRhYmxlLT5uZXh0
RnJlZSAtIDE7Cit9IC8vIEFsbG9jYXRlQXRvbQorCisvKgorICogU2V0QXRvbVZhbHVlKCkgLSBB
bGxvY2F0ZSBhIG5ldyBhdG9tIGFzc29jaWF0ZWQgd2l0aCAiaGFzaGluZGV4Ii4KKyAqCisgKi8K
Kworc3RhdGljIHZvaWQgU2V0QXRvbVZhbHVlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbW51
bWJlciwgaW50IGhhc2hpbmRleCkKK3sKKyAgICBhdGFibGUtPmFtYXBbYXRvbW51bWJlcl0gPSBh
dGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4OworICAgIGF0YWJsZS0+aHRhYmxl
LmVudHJ5W2hhc2hpbmRleF0udmFsdWUgPSBhdG9tbnVtYmVyOworfSAvLyBTZXRBdG9tVmFsdWUK
KworLyoKKyAqIEZpbmRIYXNoTG9jKCkgLSBGaW5kIHRoZSBoYXNoIGxvY2F0aW9uIGZvciB0aGlz
IHN0cmluZy4gIFJldHVybiAtMSBpdCBoYXNoIHRhYmxlIGlzIGZ1bGwuCisgKgorICovCisKK3N0
YXRpYyBpbnQgRmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7
CisgICAgaW50IGhhc2hsb2MsIGhhc2hkZWx0YSwgY291bnQ7CisgICAgaW50IEZvdW5kRW1wdHlT
bG90ID0gMDsKKyAgICBpbnQgY29sbGlzaW9uW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAx
XTsKKworICAgIGhhc2hsb2MgPSBIYXNoU3RyaW5nKHMpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsK
KyAgICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKKyAgICAgICAgaWYg
KE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkKKyAg
ICAgICAgICAgIHJldHVybiBoYXNobG9jOworICAgICAgICBjb2xsaXNpb25bMF0gPSBoYXNobG9j
OworICAgICAgICBoYXNoZGVsdGEgPSBIYXNoU3RyaW5nMihzKTsKKyAgICAgICAgY291bnQgPSAw
OworICAgICAgICB3aGlsZSAoY291bnQgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKSB7Cisg
ICAgICAgICAgICBoYXNobG9jID0gKChoYXNobG9jICsgaGFzaGRlbHRhKSAmIDB4N2ZmZmZmZmYp
ICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKKyAgICAgICAgICAgIGlmICghRW1wdHkoJmF0YWJsZS0+
aHRhYmxlLCBoYXNobG9jKSkgeworICAgICAgICAgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5o
dGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxvYykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGhhc2hsb2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBGb3VuZEVtcHR5U2xvdCA9IDE7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAg
Y29sbGlzaW9uW2NvdW50XSA9IGhhc2hsb2M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIUZv
dW5kRW1wdHlTbG90KSB7CisgICAgICAgICAgICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFi
bGUpIHsKKyAgICAgICAgICAgICAgICBpbnQgaWk7CisgICAgICAgICAgICAgICAgY2hhciBzdHJb
MjAwXTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBIYXNoIGZhaWxlZCB3aXRo
IG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3JlYXNlIGhhc2ggdGFibGUgc2l6ZS4g
KioqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyk7
CisgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisKKyAgICAgICAgICAgICAg
ICBzcHJpbnRmKHN0ciwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBkZWx0YT0l
MDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOworICAgICAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZyhzdHIpOworICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNI
X1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmlu
dGYoc3RyLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVudHJ5ICUwNHggd2l0aCBc
IiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgKyAxLCBjb2xsaXNpb25baWld
LCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFibGUuZW50cnlbY29sbGlzaW9uW2lp
XV0udmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuY291bnRzW2NvdW50
XSsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBoYXNobG9jOworfSAvLyBGaW5kSGFz
aExvYworCisvKgorICogSW5jcmVhc2VIYXNoVGFibGVTaXplKCkKKyAqCisgKi8KKworc3RhdGlj
IGludCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaW50
IGlpLCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXplOworICAgIEF0b21UYWJsZSBvbGR0
YWJsZTsKKyAgICBjaGFyICpzOworCisgICAgLy8gU2F2ZSB0aGUgb2xkIGF0b20gdGFibGUgYW5k
IGNyZWF0ZSBhIG5ldyBvbmU6CisKKyAgICBvbGR0YWJsZSA9ICphdGFibGU7CisgICAgc2l6ZSA9
IG9sZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOworICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFi
bGUsIHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEFkZCBhbGwgdGhlIGV4aXN0
aW5nIHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJlc2VydmluZyB0aGVpciBhdG9tIHZh
bHVlczoKKworICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRGcmVlOyBpaSA8IG9sZHRhYmxlLm5l
eHRGcmVlOyBpaSsrKSB7CisgICAgICAgIHN0cmxvYyA9IG9sZHRhYmxlLmFtYXBbaWldOworICAg
ICAgICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0cmxvY107CisgICAgICAgIG9sZGhh
c2hsb2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOworICAgICAgICBhc3NlcnQob2xkaGFz
aGxvYyA+PSAwKTsKKyAgICAgICAgdmFsdWUgPSBvbGR0YWJsZS5odGFibGUuZW50cnlbb2xkaGFz
aGxvY10udmFsdWU7CisgICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHMsIHZhbHVlKTsKKyAg
ICB9CisgICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOworICAgIHJldHVybiAxOworfSAvLyBJ
bmNyZWFzZUhhc2hUYWJsZVNpemUKKworLyoKKyAqIExvb2tVcEFkZFN0cmluZ0hhc2goKSAtIExv
b2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0J3Mgbm90IHRoZXJlLCBhZGQg
aXQgYW5kCisgKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2YWx1ZSBpbiB0aGUgaGFzaCB0
YWJsZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGluZGV4LgorICovCisKK3N0YXRpYyBp
bnQgTG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykK
K3sKKyAgICBpbnQgaGFzaGxvYywgc3RybG9jOworCisgICAgd2hpbGUoMSkgeworICAgICAgICBo
YXNobG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKKyAgICAgICAgaWYgKGhhc2hsb2MgPj0g
MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBJbmNyZWFzZUhhc2hUYWJsZVNpemUoYXRh
YmxlKTsKKyAgICB9CisKKyAgICBpZiAoRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkg
eworICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7CisgICAgICAgIHN0cmxvYyA9IEFk
ZFN0cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOworICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRy
eVtoYXNobG9jXS5pbmRleCA9IHN0cmxvYzsKKyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlb
aGFzaGxvY10udmFsdWUgPSAwOworICAgIH0KKyAgICByZXR1cm4gaGFzaGxvYzsKK30gLy8gTG9v
a1VwQWRkU3RyaW5nSGFzaAorCisvKgorICogTG9va1VwQWRkU3RyaW5nKCkgLSBMb29rdXAgYSBz
dHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0IGFuZAor
ICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUgdG8g
dGhlIG5leHQgYXRvbSBudW1iZXIuCisgKiAgICAgICAgUmV0dXJuIHRoZSBhdG9tIHZhbHVlIG9m
IHN0cmluZy4KKyAqLworCitpbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKQoreworICAgIGludCBoYXNoaW5kZXgsIGF0b207CisKKyAgICBoYXNoaW5k
ZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7CisgICAgYXRvbSA9IGF0YWJsZS0+
aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7CisgICAgaWYgKGF0b20gPT0gMCkgeworICAg
ICAgICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7CisgICAgICAgIFNldEF0b21WYWx1ZShh
dGFibGUsIGF0b20sIGhhc2hpbmRleCk7CisgICAgfQorICAgIHJldHVybiBhdG9tOworfSAvLyBM
b29rVXBBZGRTdHJpbmcKKworLyoKKyAqIEdldEF0b21TdHJpbmcoKQorICoKKyAqLworCitjb25z
dCAgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7Cisg
ICAgaW50IHNvZmZzZXQ7CisKKyAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4
dEZyZWUpIHsKKyAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+YW1hcFthdG9tXTsKKyAgICAgICAg
aWYgKHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUtPnN0YWJsZS5uZXh0RnJlZSkgewor
ICAgICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW3NvZmZzZXRdOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICI8aW50ZXJuYWwgZXJyb3I6IGJhZCBz
b2Zmc2V0PiI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXRvbSA9PSAw
KSB7CisgICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+IjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChhdG9tID09IEVPRikgeworICAgICAgICAgICAgICAgIHJldHVybiAi
PEVPRj4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxp
bnZhbGlkIGF0b20+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30gLy8gR2V0
QXRvbVN0cmluZworCisvKgorICogR2V0UmV2ZXJzZWRBdG9tKCkKKyAqCisgKi8KKworaW50IEdl
dFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisgICAgaWYgKGF0
b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7CisgICAgICAgIHJldHVybiBhdGFi
bGUtPmFyZXZbYXRvbV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fSAvLyBHZXRSZXZlcnNlZEF0b20KKworLyoKKyAqIEFkZEF0b20oKSAtIEFkZCBhIHN0cmluZyB0
byB0aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRo
ZXJlLgorICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGluZGV4LgorICovCisKK2ludCBBZGRB
dG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBhdG9tOwor
CisgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHMpOworICAgIHJldHVybiBhdG9t
OworfSAvLyBBZGRBdG9tCisKKy8qCisgKiBBZGRBdG9tRml4ZWQoKSAtIEFkZCBhbiBhdG9tIHRv
IHRoZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCisg
KiAgICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBvZiAiYXRvbSIuCisgKi8KKworc3Rh
dGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGlu
dCBhdG9tKQoreworICAgIGludCBoYXNoaW5kZXgsIGxzaXplOworCisgICAgaGFzaGluZGV4ID0g
TG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOworICAgIGlmIChhdGFibGUtPm5leHRGcmVl
ID49IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+c2l6ZSkgeworICAgICAgICBsc2l6
ZSA9IGF0YWJsZS0+c2l6ZSoyOworICAgICAgICBpZiAobHNpemUgPD0gYXRvbSkKKyAgICAgICAg
ICAgIGxzaXplID0gYXRvbSArIDE7CisgICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBsc2l6
ZSk7CisgICAgfQorICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5
W2hhc2hpbmRleF0uaW5kZXg7CisgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52
YWx1ZSA9IGF0b207CisgICAgLy9pZiAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKQorICAgIC8v
ICAgIGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKKyAgICB3aGlsZSAoYXRvbSA+PSBhdGFi
bGUtPm5leHRGcmVlKSB7CisgICAgICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9
IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOworICAgICAgICBhdGFibGUtPm5leHRGcmVlKys7
CisgICAgfQorICAgIHJldHVybiBhdG9tOworfSAvLyBBZGRBdG9tRml4ZWQKKworLyoKKyAqIElu
aXRBdG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20gdGFibGUuCisgKgorICovCisKK2lu
dCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKQoreworICAgIGlu
dCBpaTsKKworICAgIGh0c2l6ZSA9IGh0c2l6ZSA8PSAwID8gSU5JVF9IQVNIX1RBQkxFX1NJWkUg
OiBodHNpemU7CisgICAgaWYgKCFJbml0U3RyaW5nVGFibGUoJmF0YWJsZS0+c3RhYmxlKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFJbml0SGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSwg
aHRzaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdGFibGUtPm5leHRGcmVlID0gMDsK
KyAgICBhdGFibGUtPmFtYXAgPSBOVUxMOworICAgIGF0YWJsZS0+c2l6ZSA9IDA7CisgICAgR3Jv
d0F0b21UYWJsZShhdGFibGUsIElOSVRfQVRPTV9UQUJMRV9TSVpFKTsKKyAgICBpZiAoIWF0YWJs
ZS0+YW1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJbml0aWFsaXplIGxvd2VyIHBh
cnQgb2YgYXRvbSB0YWJsZSB0byAiPHVuZGVmaW5lZD4iIGF0b206CisKKyAgICBBZGRBdG9tRml4
ZWQoYXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAwKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBGSVJT
VF9VU0VSX1RPS0VOX1NZOyBpaSsrKQorICAgICAgICBhdGFibGUtPmFtYXBbaWldID0gYXRhYmxl
LT5hbWFwWzBdOworCisgICAgLy8gQWRkIHNpbmdsZSBjaGFyYWN0ZXIgdG9rZW5zIHRvIHRoZSBh
dG9tIHRhYmxlOgorCisgICAgeworCQljb25zdCBjaGFyICpzID0gIn4hJV4mKigpLSs9fCwuPD4v
Pzs6W117fSMiOworICAgICAgICBjaGFyIHRbMl07CisKKyAgICAgICAgdFsxXSA9ICdcMCc7Cisg
ICAgICAgIHdoaWxlICgqcykgeworICAgICAgICAgICAgdFswXSA9ICpzOworICAgICAgICAgICAg
QWRkQXRvbUZpeGVkKGF0YWJsZSwgdCwgc1swXSk7CisgICAgICAgICAgICBzKys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBBZGQgbXVsdGlwbGUgY2hhcmFjdGVyIHNjYW5uZXIgdG9rZW5z
IDoKKworICAgIGZvciAoaWkgPSAwOyBpaSA8IHNpemVvZih0b2tlbnMpL3NpemVvZih0b2tlbnNb
MF0pOyBpaSsrKQorICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0b2tlbnNbaWldLnN0ciwg
dG9rZW5zW2lpXS52YWwpOworCisgICAgLy8gQWRkIGVycm9yIHN5bWJvbCBpZiBydW5uaW5nIGlu
IGVycm9yIG1vZGU6CisKKyAgICBpZiAoY3BwLT5vcHRpb25zLkVycm9yTW9kZSkKKyAgICAgICAg
QWRkQXRvbUZpeGVkKGF0YWJsZSwgImVycm9yIiwgRVJST1JfU1kpOworCisgICAgQWRkQXRvbShh
dGFibGUsICI8KioqIGVuZCBmaXhlZCBhdG9tcyAqKio+Iik7CisKKyAgICByZXR1cm4gMTsKK30g
Ly8gSW5pdEF0b21UYWJsZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBEZWJ1ZyBQcmludGluZyBGdW5j
dGlvbnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qCisgKiBQcmludEF0b21UYWJsZSgpCisgKgor
ICovCisKK3ZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaW50
IGlpOworICAgIGNoYXIgc3RyWzIwMF07CisKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUt
Pm5leHRGcmVlOyBpaSsrKSB7CisgICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlp
LCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CisgICAgfQorICAgIHNwcmludGYoc3RyLCAiSGFzaCB0YWJsZTog
c2l6ZT0lZCwgZW50cmllcz0lZCwgY29sbGlzaW9ucz0iLAorICAgICAgICAgICBhdGFibGUtPmh0
YWJsZS5zaXplLCBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKTsKKyAgICBDUFBEZWJ1Z0xvZ01zZyhz
dHIpOworICAgIGZvciAoaWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlp
KyspIHsKKyAgICAgICAgc3ByaW50ZihzdHIsICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNb
aWldKTsKKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9CisKK30gLy8gUHJpbnRB
dG9tVGFibGUKKworCisvKgorICogR2V0U3RyaW5nT2ZBdG9tKCkKKyAqCisgKi8KKworY2hhciog
R2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKK3sKKwkgY2hhciog
Y2hyX3N0cjsKKwkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBb
YXRvbV1dOworCSByZXR1cm4gY2hyX3N0cjsKK30gLy8gR2V0U3RyaW5nT2ZBdG9tCisKKy8qCisg
KiBGcmVlQXRvbVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFuZCBhc3NvY2lhdGVkIG1l
bW9yeQorICoKKyAqLworCit2b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCit7
CisgICAgRnJlZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7CisgICAgRnJlZUhhc2hUYWJs
ZSgmYXRhYmxlLT5odGFibGUpOworICAgIGlmIChhdGFibGUtPmFtYXApCisgICAgICAgIGZyZWUo
YXRhYmxlLT5hbWFwKTsKKyAgICBpZiAoYXRhYmxlLT5hcmV2KQorICAgICAgICBmcmVlKGF0YWJs
ZS0+YXJldik7CisgICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKKyAgICBhdGFibGUtPmFyZXYgPSBO
VUxMOworICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIGF0YWJsZS0+c2l6ZSA9IDA7Cit9
IC8vIEZyZWVBdG9tVGFibGUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBhdG9t
LmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxl
ci9wcmVwcm9jZXNzb3IvYXRvbS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBw
bGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24s
IG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQor
Y29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdy
ZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQK
K3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5v
bi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBv
cmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2Us
IHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQor
Zm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3
YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhp
cyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBz
dWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUg
bmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jw
b3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4g
dGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBs
aWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGlt
aXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBk
ZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNv
ZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJl
dW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJB
UyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJ
T04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQs
IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJ
VFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEgg
T1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZP
UiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJ
VFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YK
K1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklT
SU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElP
TiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENB
VVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitO
VklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBhdG9tLmgKKy8vCisKKyNpZiAhZGVmaW5l
ZChfX0FUT01fSCkKKyNkZWZpbmUgX19BVE9NX0ggMQorCit0eXBlZGVmIHN0cnVjdCBBdG9tVGFi
bGVfUmVjIEF0b21UYWJsZTsKKworZXh0ZXJuIEF0b21UYWJsZSAqYXRhYmxlOworCitpbnQgSW5p
dEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Cit2b2lkIEZyZWVBdG9t
VGFibGUoQXRvbVRhYmxlICphdGFibGUpOworaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUs
IGNvbnN0IGNoYXIgKnMpOwordm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7
CitpbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKTsK
K2NvbnN0IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsK
K2ludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKK2NoYXIq
IEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOworI2VuZGlmIC8v
ICFkZWZpbmVkKF9fQVRPTV9IKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NvbXBpbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAw
MiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1
cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdy
ZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlv
biwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJl
Citjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBh
Z3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwg
bm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlz
IG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVz
ZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2Fy
ZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5
Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29m
dHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0
aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxs
IHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRo
ZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0Nv
cnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBp
biB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGlt
cGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Cits
aW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3Vy
IGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEg
U29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhl
cmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4g
IkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRB
VElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVO
VCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IK
K0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lU
SCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUg
Rk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJP
RklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFS
SVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FU
SU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIg
Q0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYK
K05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGNvbXBpbGUuaAorLy8KKworI2lmICFk
ZWZpbmVkKF9fQ09NUElMRV9IKQorI2RlZmluZSBfX0NPTVBJTEVfSCAxCisKK2ludCBJbml0Q1BQ
U3RydWN0KHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCBPcHRpb25zX1JlY3sKKyAgICBjb25zdCBj
aGFyICpwcm9maWxlU3RyaW5nOworICAgIGludCBFcnJvck1vZGU7CisgICAgaW50IFF1aWV0Owor
CQorICAgIC8vIERlYnVnIFRoZSBDb21waWxlciBvcHRpb25zOgorICAgIGludCBEdW1wQXRvbVRh
YmxlOworfSBPcHRpb25zOworCitzdHJ1Y3QgQ1BQU3RydWN0X1JlYyB7CisgICAgLy8gUHVibGlj
IG1lbWJlcnMKKyAgICBTb3VyY2VMb2MgKnBMYXN0U291cmNlTG9jOyAgLy8gU2V0IGF0IHRoZSBz
dGFydCBvZiBlYWNoIHN0YXRlbWVudCBieSB0aGUgdHJlZSB3YWxrZXJzCisgICAgT3B0aW9ucyBv
cHRpb25zOyAgICAgICAgICAgIC8vIENvbXBpbGUgb3B0aW9ucyBhbmQgcGFyYW1ldGVycworCisg
ICAgLy8gUHJpdmF0ZSBtZW1iZXJzCisgICAgU291cmNlTG9jIGxhc3RTb3VyY2VMb2M7CisKKyAg
ICAvLyBTY2FubmVyIGRhdGE6CisKKyAgICBTb3VyY2VMb2MgKnRva2VuTG9jOyAgICAgICAgLy8g
U291cmNlIGxvY2F0aW9uIG9mIG1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIK
KyAgICBpbnQgbW9zdFJlY2VudFRva2VuOyAgICAgICAgLy8gTW9zdCByZWNlbnQgdG9rZW4gc2Vl
biBieSB0aGUgc2Nhbm5lcgorICAgIElucHV0U3JjICpjdXJyZW50SW5wdXQ7CisgICAgaW50IHBy
ZXZpb3VzX3Rva2VuOworICAgIGludCBwYXN0Rmlyc3RTdGF0ZW1lbnQ7ICAgICAvLyB1c2VkIHRv
IG1ha2Ugc3VyZSB0aGF0ICN2ZXJzaW9uIGlzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgc2VlbiBpbiB0
aGUgZmlsZSwgaWYgcHJlc2VudAorICAgIAorCXZvaWQgKnBDOyAgICAgICAgICAgICAgICAgICAv
LyBzdG9yaW5nIHRoZSBwYXJzZUNvbnRleHQgb2YgdGhlIGNvbXBpbGUgb2JqZWN0IGluIGNwcC4g
IAorICAgICAKKyAgICAvLyBQcml2YXRlIG1lbWJlcnM6CisgICAgU291cmNlTG9jIGx0b2tlbkxv
YzsKKwlpbnQgaWZkZXB0aDsgICAgICAgICAgICAgICAgLy9jdXJyZW50ICNpZi0jZWxzZS0jZW5k
aWYgbmVzdGluZyBpbiB0aGUgY3BwLmMgZmlsZSAocHJlLXByb2Nlc3NvcikgICAgCisgICAgaW50
IGVsc2VkZXB0aFs2NF07ICAgICAgICAgIC8vS2VlcCBhIHRyYWNrIG9mICNpZiBkZXB0aC4uTWF4
IGFsbG93ZWQgaXMgNjQuICAgCisgICAgaW50IGVsc2V0cmFja2VyOyAgICAgICAgICAgIC8vI2lm
LSNlbHNlIGFuZCAjZW5kaWYgY29uc3RydWN0cy4uLkNvdW50ZXIuCisgICAgY29uc3QgY2hhciAq
RXJyTXNnOworICAgIGludCBDb21waWxlRXJyb3I7ICAgICAgICAgICAvL0luZGljYXRlIGNvbXBp
bGUgZXJyb3Igd2hlbiAjZXJyb3IsICNlbHNlLCNlbGlmIG1pc21hdGNoLgorCisgICAgLy8KKyAg
ICAvLyBHbG9iYWxzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3RyaW5ncygp
IGFuZCB5eV9pbnB1dCgpYW5kIAorICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4oZ2VuX2ds
c2xhbmcuY3BwIGFuZCBzY2FubmVyLmMpCisgICAgLy8KKyAgICBpbnQgICAgUGFXaGljaFN0cjsg
ICAgICAgICAgICAvLyB3aGljaCBzdHJpbmcgd2UncmUgcGFyc2luZworICAgIGludCogICBQYVN0
ckxlbjsgICAgICAgICAgICAgIC8vIGFycmF5IG9mIGxlbmd0aHMgb2YgdGhlIFBhQXJndiBzdHJp
bmdzCisgICAgaW50ICAgIFBhQXJnYzsgICAgICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5n
cyBpbiB0aGUgYXJyYXkKKyAgICBjaGFyKiogUGFBcmd2OyAgICAgICAgICAgICAgICAvLyBvdXIg
YXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSAgICAKKyAgICB1bnNpZ25lZCBpbnQgdG9rZW5zQmVm
b3JlRU9GIDogMTsKK307CisKKyNlbmRpZiAvLyAhZGVmaW5lZChfX0NPTVBJTEVfSCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAyOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdh
cmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3Bw
LmMKKy8vCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKK3N0YXRpYyBp
bnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOworCisvKiBEb24ndCB1c2UgbWVtb3J5LmMn
cyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHByb3Blcmx5IGhlcmUgKi8KKyN1bmRlZiBt
YWxsb2MKKyN1bmRlZiBmcmVlCisKK3N0YXRpYyBpbnQgYmluZEF0b20gPSAwOworc3RhdGljIGlu
dCBjb25zdEF0b20gPSAwOworc3RhdGljIGludCBkZWZhdWx0QXRvbSA9IDA7CitzdGF0aWMgaW50
IGRlZmluZUF0b20gPSAwOworc3RhdGljIGludCBkZWZpbmVkQXRvbSA9IDA7CitzdGF0aWMgaW50
IGVsc2VBdG9tID0gMDsKK3N0YXRpYyBpbnQgZWxpZkF0b20gPSAwOworc3RhdGljIGludCBlbmRp
ZkF0b20gPSAwOworc3RhdGljIGludCBpZkF0b20gPSAwOworc3RhdGljIGludCBpZmRlZkF0b20g
PSAwOworc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaW5jbHVkZUF0b20g
PSAwOworc3RhdGljIGludCBsaW5lQXRvbSA9IDA7CitzdGF0aWMgaW50IHByYWdtYUF0b20gPSAw
Oworc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7CitzdGF0aWMgaW50IHVuZGVmQXRvbSA9IDA7
CitzdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7CitzdGF0aWMgaW50IF9fTElORV9fQXRvbSA9IDA7
CitzdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7CitzdGF0aWMgaW50IF9fVkVSU0lPTl9fQXRv
bSA9IDA7CitzdGF0aWMgaW50IHZlcnNpb25BdG9tID0gMDsKK3N0YXRpYyBpbnQgZXh0ZW5zaW9u
QXRvbSA9IDA7CisKK3N0YXRpYyBTY29wZSAqbWFjcm9zID0gMDsKKyNkZWZpbmUgTUFYX01BQ1JP
X0FSR1MgIDY0CisjZGVmaW5lIE1BWF9JRl9ORVNUSU5HICA2NAorCitzdGF0aWMgU291cmNlTG9j
IGlmbG9jOyAvKiBvdXRlcm1vc3QgI2lmICovCisKK2ludCBJbml0Q1BQKHZvaWQpCit7CisgICAg
Y2hhciAgICAgICAgYnVmZmVyWzY0XSwgKnQ7CisgICAgY29uc3QgY2hhciAgKmY7CisKKyAgICAv
LyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhlIENQUCBsaW5lIHNjYW5uZXI6CisgICAg
YmluZEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiYmluZCIpOworICAgIGNvbnN0QXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJjb25zdCIpOworICAgIGRlZmF1bHRBdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmF1bHQiKTsKKyAgICBkZWZpbmVBdG9tID0gTG9v
a1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZSIpOworICAgIGRlZmluZWRBdG9tID0gTG9va1Vw
QWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZWQiKTsKKyAgICBlbGlmQXRvbSA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsICJlbGlmIik7CisgICAgZWxzZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCAiZWxzZSIpOworICAgIGVuZGlmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJl
bmRpZiIpOworICAgIGlmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZiIpOworICAg
IGlmZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZmRlZiIpOworICAgIGlmbmRl
ZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWZuZGVmIik7CisgICAgaW5jbHVkZUF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaW5jbHVkZSIpOworICAgIGxpbmVBdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImxpbmUiKTsKKyAgICBwcmFnbWFBdG9tID0gTG9va1Vw
QWRkU3RyaW5nKGF0YWJsZSwgInByYWdtYSIpOworICAgIHRleHVuaXRBdG9tID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgInRleHVuaXQiKTsKKyAgICB1bmRlZkF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAidW5kZWYiKTsKKwllcnJvckF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCAiZXJyb3IiKTsKKyAgICBfX0xJTkVfX0F0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
X19MSU5FX18iKTsKKyAgICBfX0ZJTEVfX0F0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
X19GSUxFX18iKTsKKwlfX1ZFUlNJT05fX0F0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
X19WRVJTSU9OX18iKTsKKyAgICB2ZXJzaW9uQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJ2ZXJzaW9uIik7CisgICAgZXh0ZW5zaW9uQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJleHRlbnNpb24iKTsKKyAgICBtYWNyb3MgPSBOZXdTY29wZUluUG9vbChtZW1fQ3JlYXRlUG9v
bCgwLCAwKSk7CisgICAgc3RyY3B5KGJ1ZmZlciwgIlBST0ZJTEVfIik7CisgICAgdCA9IGJ1ZmZl
ciArIHN0cmxlbihidWZmZXIpOworICAgIGYgPSBjcHAtPm9wdGlvbnMucHJvZmlsZVN0cmluZzsK
KyAgICB3aGlsZSAoKGlzYWxudW0oKmYpIHx8ICpmID09ICdfJykgJiYgdCA8IGJ1ZmZlciArIHNp
emVvZihidWZmZXIpIC0gMSkKKyAgICAgICAgKnQrKyA9IHRvdXBwZXIoKmYrKyk7CisgICAgKnQg
PSAwOworCisgICAgUHJlZGVmaW5lSW50TWFjcm8oIkdMX0VTIiwgMSk7CisgICAgUHJlZGVmaW5l
SW50TWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7CisKKwlyZXR1cm4gMTsK
K30gLy8gSW5pdENQUAorCitpbnQgRnJlZUNQUCh2b2lkKQoreworICAgIGlmIChtYWNyb3MpCisg
ICAgeworICAgICAgICBtZW1fRnJlZVBvb2wobWFjcm9zLT5wb29sKTsKKyAgICAgICAgbWFjcm9z
ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworaW50IEZpbmFsQ1BQKHZvaWQpCit7
CisJaWYgKGNwcC0+aWZkZXB0aCkKKwkJQ1BQRXJyb3JUb0luZm9Mb2coIiNpZiBtaXNtYXRjaCIp
OworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IENQUGRlZmluZSh5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4sIG5hbWUsIGFyZ3NbTUFYX01BQ1JPX0FSR1NdLCBh
cmdjOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisgICAgTWFjcm9TeW1ib2wgbWFjOworICAg
IFN5bWJvbCAqc3ltYjsKKyAgICBTb3VyY2VMb2MgZHVtbXlMb2M7CisgICAgbWVtc2V0KCZtYWMs
IDAsIHNpemVvZihtYWMpKTsKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElG
SUVSKSB7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7CisgICAgICAgIHJl
dHVybiB0b2tlbjsKKyAgICB9CisgICAgbmFtZSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKyAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgaWYgKHRva2VuID09ICcoJyAmJiAheXlsdmFscHAtPnNjX2ludCkgeworICAgICAg
ICAvLyBnYXRoZXIgYXJndW1lbnRzCisgICAgICAgIGFyZ2MgPSAwOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoYXJnYyA9PSAwICYmIHRva2VuID09ICcp
JykgYnJlYWs7CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKwkJ
CQlDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB0
b2tlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhcmdjIDwgTUFYX01BQ1JPX0FS
R1MpCisgICAgICAgICAgICAgICAgYXJnc1thcmdjKytdID0geXlsdmFscHAtPnNjX2lkZW50Owor
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICB9IHdoaWxlICh0b2tlbiA9PSAnLCcpOworICAgICAg
ICBpZiAodG9rZW4gIT0gJyknKSB7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Rl
ZmluZSIpOworICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICB9CisgICAgICAgIG1h
Yy5hcmdjID0gYXJnYzsKKyAgICAgICAgbWFjLmFyZ3MgPSBtZW1fQWxsb2MobWFjcm9zLT5wb29s
LCBhcmdjICogc2l6ZW9mKGludCkpOworICAgICAgICBtZW1jcHkobWFjLmFyZ3MsIGFyZ3MsIGFy
Z2MgKiBzaXplb2YoaW50KSk7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9CisgICAgbWFjLmJvZHkgPSBOZXdU
b2tlblN0cmVhbShHZXRBdG9tU3RyaW5nKGF0YWJsZSwgbmFtZSksIG1hY3Jvcy0+cG9vbCk7Cisg
ICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgaWYgKHRva2VuID09ICdcXCcpIHsK
KyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJUaGUgbGluZSBjb250aW51YXRpb24gY2hh
cmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhlIE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdl
Iik7CisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIH0KKyAgICAgICAgUmVjb3Jk
VG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9Owor
CisgICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOworICAgIGlmIChzeW1iKSB7
CisgICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsKKyAgICAgICAgICAgIC8v
IGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBpZGVudGljYWwK
KyAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9IG1hYy5hcmdjKSBnb3Rv
IGVycm9yOworICAgICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBtYWMuYXJnYzsgYXJnYysr
KQorICAgICAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdzW2FyZ2NdICE9IG1h
Yy5hcmdzW2FyZ2NdKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAg
ICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSk7CisgICAgICAgICAg
ICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7CisgICAgICAgICAgICBkbyB7CisgICAgICAg
ICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9rZW47CisgICAgICAgICAgICAgICAgb2xkX3Rv
a2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7CisgICAgICAgICAgICAgICAg
dG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBp
ZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQgIT0gb2xkX2x2YWwpIHsg
CisgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJN
YWNybyBSZWRlZmluZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5n
T2ZBdG9tKGF0YWJsZSxuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3Ry
ZnJvbVRTdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51bWJlcigpOworICAgICAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICAgICAg
ICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9CisgICAgICAgICAgICB9IHdoaWxlICh0b2tl
biA+IDApOworICAgICAgICB9CisgICAgICAgIC8vRnJlZU1hY3JvKCZzeW1iLT5kZXRhaWxzLm1h
Yyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHVtbXlMb2MuZmlsZSA9IDA7CisgICAgICAgIGR1
bW15TG9jLmxpbmUgPSAwOworICAgICAgICBzeW1iID0gQWRkU3ltYm9sKCZkdW1teUxvYywgbWFj
cm9zLCBuYW1lLCBNQUNST19TKTsKKyAgICB9CisgICAgc3ltYi0+ZGV0YWlscy5tYWMgPSBtYWM7
CisgICAgcmV0dXJuICdcbic7Cit9IC8vIENQUGRlZmluZQorCitzdGF0aWMgaW50IENQUHVuZGVm
KHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgU3ltYm9sICpzeW1i
OworCWlmKHRva2VuID09ICdcbicpeworCQlDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVmIik7CisJ
ICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVS
KQorICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3Ms
IHl5bHZhbHBwLT5zY19pZGVudCk7CisgICAgaWYgKHN5bWIpIHsKKyAgICAgICAgc3ltYi0+ZGV0
YWlscy5tYWMudW5kZWYgPSAxOworICAgIH0KKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICdc
bicpIHsKKyAgICBlcnJvcjoKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOwor
ICAgIH0KKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIENQUHVuZGVmCisKKy8qIENQUGVsc2UgLS0g
c2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlzIGFjdHVhbGx5IHVzZWQK
KyoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4gI2Vsc2UsIEFORCB0byBz
a2lwIHRvIGEgI2Vsc2UsCisqKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVyIGEgI2lmLyNpZmRlZi8j
aWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCisqLworCitzdGF0aWMgaW50IENQUGVsc2UoaW50
IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IGF0b20sZGVwdGg9
MDsKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworCQorCXdoaWxlICh0b2tlbiA+IDApIHsKKyAgICAgICAgaWYgKHRv
a2VuICE9ICcjJykgeworCQkgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCQlpZiAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkgIT0gQ1BQX0lERU5USUZJRVIpCisJCQljb250
aW51ZTsKKyAgICAgICAgYXRvbSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKyAgICAgICAgaWYgKGF0
b20gPT0gaWZBdG9tIHx8IGF0b20gPT0gaWZkZWZBdG9tIHx8IGF0b20gPT0gaWZuZGVmQXRvbSl7
CisgICAgICAgICAgICBkZXB0aCsrOyBjcHAtPmlmZGVwdGgrKzsgY3BwLT5lbHNldHJhY2tlcisr
OworICAgICAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworCQl9
CisJCWVsc2UgaWYgKGF0b20gPT0gZW5kaWZBdG9tKSB7CisgICAgICAgICAgICBpZigtLWRlcHRo
PDApeworCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKyAgICAgICAgICAgICAgICBpZiAoY3Bw
LT5pZmRlcHRoKSAKKyAgICAgICAgICAgICAgICAgICAgLS1jcHAtPmlmZGVwdGg7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKyAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKChpbnQpKG1hdGNoZWxzZSkgIT0gMCkm
JiBkZXB0aD09MCkgeworCQkJaWYgKGF0b20gPT0gZWxzZUF0b20gKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAg
ICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2lu
ZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0gCisJCQkJYnJlYWs7CisJCQl9IAorCQkJ
ZWxzZSBpZiAoYXRvbSA9PSBlbGlmQXRvbSkgeworICAgICAgICAgICAgICAgIC8qIHdlIGRlY3Jl
bWVudCBjcHAtPmlmZGVwdGggaGVyZSwgYmVjYXVzZSBDUFBpZiB3aWxsIGluY3JlbWVudAorICAg
ICAgICAgICAgICAgICAqIGl0IGFuZCB3ZSByZWFsbHkgd2FudCB0byBsZWF2ZSBpdCBhbG9uZSAq
LworCQkJCWlmIChjcHAtPmlmZGVwdGgpeworCQkJCQktLWNwcC0+aWZkZXB0aDsKKwkJCQkgICAg
LS1jcHAtPmVsc2V0cmFja2VyOworCQkJCX0KKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQaWYo
eXlsdmFscHApOworICAgICAgICAgICAgfQorCQl9CisgICAgICAgIGVsc2UgaWYoKGF0b209PWVs
c2VBdG9tKSAmJiAoIUNoa0NvcnJlY3RFbHNlTmVzdGluZygpKSl7CisgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAjZWxzZSIpOworICAgICAgICAgICAgY3BwLT5D
b21waWxlRXJyb3I9MTsKKyAgICAgICAgfQorCX07CisgICAgcmV0dXJuIHRva2VuOworfQorCitl
bnVtIGV2YWxfcHJlYyB7CisgICAgTUlOX1BSRUMsCisgICAgQ09ORCwgTE9HT1IsIExPR0FORCwg
T1IsIFhPUiwgQU5ELCBFUVVBTCwgUkVMQVRJT04sIFNISUZULCBBREQsIE1VTCwgVU5BUlksCisg
ICAgTUFYX1BSRUMKK307CisKK3N0YXRpYyBpbnQgb3BfbG9nb3IoaW50IGEsIGludCBiKSB7IHJl
dHVybiBhIHx8IGI7IH0KK3N0YXRpYyBpbnQgb3BfbG9nYW5kKGludCBhLCBpbnQgYikgeyByZXR1
cm4gYSAmJiBiOyB9CitzdGF0aWMgaW50IG9wX29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8
IGI7IH0KK3N0YXRpYyBpbnQgb3BfeG9yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSBeIGI7IH0K
K3N0YXRpYyBpbnQgb3BfYW5kKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAmIGI7IH0KK3N0YXRp
YyBpbnQgb3BfZXEoaW50IGEsIGludCBiKSB7IHJldHVybiBhID09IGI7IH0KK3N0YXRpYyBpbnQg
b3BfbmUoaW50IGEsIGludCBiKSB7IHJldHVybiBhICE9IGI7IH0KK3N0YXRpYyBpbnQgb3BfZ2Uo
aW50IGEsIGludCBiKSB7IHJldHVybiBhID49IGI7IH0KK3N0YXRpYyBpbnQgb3BfbGUoaW50IGEs
IGludCBiKSB7IHJldHVybiBhIDw9IGI7IH0KK3N0YXRpYyBpbnQgb3BfZ3QoaW50IGEsIGludCBi
KSB7IHJldHVybiBhID4gYjsgfQorc3RhdGljIGludCBvcF9sdChpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgPCBiOyB9CitzdGF0aWMgaW50IG9wX3NobChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
PDwgYjsgfQorc3RhdGljIGludCBvcF9zaHIoaW50IGEsIGludCBiKSB7IHJldHVybiBhID4+IGI7
IH0KK3N0YXRpYyBpbnQgb3BfYWRkKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSArIGI7IH0KK3N0
YXRpYyBpbnQgb3Bfc3ViKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAtIGI7IH0KK3N0YXRpYyBp
bnQgb3BfbXVsKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAqIGI7IH0KK3N0YXRpYyBpbnQgb3Bf
ZGl2KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAvIGI7IH0KK3N0YXRpYyBpbnQgb3BfbW9kKGlu
dCBhLCBpbnQgYikgeyByZXR1cm4gYSAlIGI7IH0KK3N0YXRpYyBpbnQgb3BfcG9zKGludCBhKSB7
IHJldHVybiBhOyB9CitzdGF0aWMgaW50IG9wX25lZyhpbnQgYSkgeyByZXR1cm4gLWE7IH0KK3N0
YXRpYyBpbnQgb3BfY21wbChpbnQgYSkgeyByZXR1cm4gfmE7IH0KK3N0YXRpYyBpbnQgb3Bfbm90
KGludCBhKSB7IHJldHVybiAhYTsgfQorCitzdHJ1Y3QgeworICAgIGludCB0b2tlbiwgcHJlYywg
KCpvcCkoaW50LCBpbnQpOworfSBiaW5vcFtdID0geworICAgIHsgQ1BQX09SX09QLCBMT0dPUiwg
b3BfbG9nb3IgfSwKKyAgICB7IENQUF9BTkRfT1AsIExPR0FORCwgb3BfbG9nYW5kIH0sCisgICAg
eyAnfCcsIE9SLCBvcF9vciB9LAorICAgIHsgJ14nLCBYT1IsIG9wX3hvciB9LAorICAgIHsgJyYn
LCBBTkQsIG9wX2FuZCB9LAorICAgIHsgQ1BQX0VRX09QLCBFUVVBTCwgb3BfZXEgfSwKKyAgICB7
IENQUF9ORV9PUCwgRVFVQUwsIG9wX25lIH0sCisgICAgeyAnPicsIFJFTEFUSU9OLCBvcF9ndCB9
LAorICAgIHsgQ1BQX0dFX09QLCBSRUxBVElPTiwgb3BfZ2UgfSwKKyAgICB7ICc8JywgUkVMQVRJ
T04sIG9wX2x0IH0sCisgICAgeyBDUFBfTEVfT1AsIFJFTEFUSU9OLCBvcF9sZSB9LAorICAgIHsg
Q1BQX0xFRlRfT1AsIFNISUZULCBvcF9zaGwgfSwKKyAgICB7IENQUF9SSUdIVF9PUCwgU0hJRlQs
IG9wX3NociB9LAorICAgIHsgJysnLCBBREQsIG9wX2FkZCB9LAorICAgIHsgJy0nLCBBREQsIG9w
X3N1YiB9LAorICAgIHsgJyonLCBNVUwsIG9wX211bCB9LAorICAgIHsgJy8nLCBNVUwsIG9wX2Rp
diB9LAorICAgIHsgJyUnLCBNVUwsIG9wX21vZCB9LAorfTsKKworc3RydWN0IHsKKyAgICBpbnQg
dG9rZW4sICgqb3ApKGludCk7Cit9IHVub3BbXSA9IHsKKyAgICB7ICcrJywgb3BfcG9zIH0sCisg
ICAgeyAnLScsIG9wX25lZyB9LAorICAgIHsgJ34nLCBvcF9jbXBsIH0sCisgICAgeyAnIScsIG9w
X25vdCB9LAorfTsKKworI2RlZmluZSBBTEVOKEEpIChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKQor
CitzdGF0aWMgaW50IGV2YWwoaW50IHRva2VuLCBpbnQgcHJlYywgaW50ICpyZXMsIGludCAqZXJy
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgICAgICAgICBpLCB2YWw7CisgICAg
U3ltYm9sICAgICAgKnM7CisgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7CisgICAg
ICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lZEF0b20pIHsKKyAgICAgICAgICAg
IGludCBuZWVkY2xvc2UgPSAwOworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKHRv
a2VuID09ICcoJykgeworICAgICAgICAgICAgICAgIG5lZWRjbG9zZSA9IDE7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuICE9IENQUF9J
REVOVElGSUVSKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAqcmVz
ID0gKHMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgPyAhcy0+ZGV0YWlscy5tYWMudW5kZWYgOiAwOworICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgaWYgKG5lZWRjbG9zZSkgeworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbiAhPSAnKScpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgfQorCQl9IGVsc2UgaWYgKE1hY3JvRXhwYW5kKHl5
bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKSB7CisJCQl0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICByZXR1
cm4gZXZhbCh0b2tlbiwgcHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwl9IGVsc2UgaWYgKHRva2Vu
ID09IENQUF9JTlRDT05TVEFOVCkgeworICAgICAgICAqcmVzID0geXlsdmFscHAtPnNjX2ludDsK
KyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gJygnKSB7CisgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKyAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgcmVzLCBlcnIsIHl5bHZh
bHBwKTsKKyAgICAgICAgaWYgKCEqZXJyKSB7CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gJykn
KQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSBBTEVOKHVub3ApIC0gMTsgaSA+PSAw
OyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh1bm9wW2ldLnRva2VuID09IHRva2VuKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpID49IDApIHsKKyAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgVU5BUlksIHJlcywg
ZXJyLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAqcmVzID0gdW5vcFtpXS5vcCgqcmVzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9
CisgICAgd2hpbGUgKCEqZXJyKSB7CisgICAgICAgIGlmICh0b2tlbiA9PSAnKScgfHwgdG9rZW4g
PT0gJ1xuJykgYnJlYWs7CisgICAgICAgIGZvciAoaSA9IEFMRU4oYmlub3ApIC0gMTsgaSA+PSAw
OyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChiaW5vcFtpXS50b2tlbiA9PSB0b2tlbikKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA8IDAgfHwgYmlub3Bb
aV0ucHJlYyA8PSBwcmVjKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHZhbCA9ICpyZXM7
CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBiaW5vcFtpXS5wcmVj
LCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICAqcmVzID0gYmlub3BbaV0ub3AodmFsLCAq
cmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHRva2VuOworZXJyb3I6CisgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coImluY29ycmVjdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIik7CisgICAgKmVyciA9IDE7
CisgICAgKnJlcyA9IDA7CisgICAgcmV0dXJuIHRva2VuOworfSAvLyBldmFsCisKK3N0YXRpYyBp
bnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGludCBy
ZXMgPSAwLCBlcnIgPSAwOworCWNwcC0+ZWxzZXRyYWNrZXIrKzsKKyAgICBjcHAtPmVsc2VkZXB0
aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7CisgICAgaWYgKCFjcHAtPmlmZGVwdGgrKykKKyAgICAg
ICAgaWZsb2MgPSAqY3BwLT50b2tlbkxvYzsKKwlpZihjcHAtPmlmZGVwdGggPk1BWF9JRl9ORVNU
SU5HKXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1heCAjaWYgbmVzdGluZyBkZXB0aCBl
eGNlZWRlZCIpOworCQlyZXR1cm4gMDsKKwl9CisJdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJF
QywgJnJlcywgJmVyciwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAg
ICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyB0aGUg
cHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9IAorICAgIGlmICgh
cmVzICYmICFlcnIpIHsKKyAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIENQUGlmCisKK3N0YXRpYyBpbnQgQ1BQaWZk
ZWYoaW50IGRlZmluZWQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgaW50IG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRlbnQ7CisJaWYoKytjcHAtPmlmZGVwdGggPk1B
WF9JRl9ORVNUSU5HKXsKKwkgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1heCAjaWYgbmVzdGluZyBk
ZXB0aCBleGNlZWRlZCIpOworCQlyZXR1cm4gMDsKKwl9CisJY3BwLT5lbHNldHJhY2tlcisrOwor
ICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKKyAgICBpZiAodG9rZW4g
IT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgICAgIGRlZmluZWQgPyBDUFBFcnJvclRvSW5m
b0xvZygiaWZkZWYiKTpDUFBFcnJvclRvSW5mb0xvZygiaWZuZGVmIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgU3ltYm9sICpzID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7CisgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgICAgIENQUFdhcm5p
bmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWZkZWYgcHJlcHJvY2Vz
c29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgd2hpbGUg
KHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisgICAgICAg
IGlmICgoKHMgJiYgIXMtPmRldGFpbHMubWFjLnVuZGVmKSA/IDEgOiAwKSAhPSBkZWZpbmVkKQor
ICAgICAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKKyAgICB9CisgICAgcmV0
dXJuIHRva2VuOworfSAvLyBDUFBpZmRlZgorCitzdGF0aWMgaW50IENQUGxpbmUoeXlzdHlwZXBw
ICogeXlsdmFscHApIAoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJaWYodG9rZW49PSdcbicpeworCQlEZWNM
aW5lTnVtYmVyKCk7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworICAgICAg
ICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVybiB0b2tlbjsKKwl9CisJZWxzZSBpZiAodG9rZW4g
PT0gQ1BQX0lOVENPTlNUQU5UKSB7CisJCXl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+
c3ltYm9sX25hbWUpOworCQlTZXRMaW5lTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOworICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgIAorCQlpZiAodG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7CisgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkJ
CVNldFN0cmluZ051bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJ
CWlmKHRva2VuIT0nXG4nKQorCQkJCUNQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworICAgICAg
ICB9CisJCWVsc2UgaWYgKHRva2VuID09ICdcbicpeworCQkJcmV0dXJuIHRva2VuOworCQl9CisJ
CWVsc2V7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKKwkJfQorCX0K
KwllbHNleworICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworCX0KKyAgICBy
ZXR1cm4gdG9rZW47Cit9CisKK3N0YXRpYyBpbnQgQ1BQZXJyb3IoeXlzdHlwZXBwICogeXlsdmFs
cHApIHsKKworCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKwkKKyAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJykgeworCQlpZiAodG9rZW4gPT0gQ1BQX0ZMT0FUQ09OU1RBTlQgfHwg
dG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsKKyAgICAgICAgICAgIFN0b3JlU3RyKHl5bHZhbHBw
LT5zeW1ib2xfbmFtZSk7CisJCX1lbHNlIGlmKHRva2VuID09IENQUF9JREVOVElGSUVSIHx8IHRv
a2VuID09IENQUF9TVFJDT05TVEFOVCl7CisJCQlTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRh
YmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOworCQl9ZWxzZSB7CisJCSAgICBTdG9yZVN0cihHZXRT
dHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKSk7CisJCX0KKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKwlEZWNMaW5lTnVt
YmVyKCk7CisJLy9zdG9yZSB0aGlzIG1zZyBpbnRvIHRoZSBzaGFkZXIncyBpbmZvcm1hdGlvbiBs
b2cuLnNldCB0aGUgQ29tcGlsZSBFcnJvciBmbGFnISEhIQorCW1lc3NhZ2U9R2V0U3RyZnJvbVRT
dHIoKTsKKyAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAgUmVzZXRUU3RyaW5nKCk7
CisgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAgcmV0
dXJuICdcbic7Cit9Ly9DUFBlcnJvcgorCitzdGF0aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKK3sKKwljaGFyIFNyY1N0ck5hbWVbMl07CisJY2hhcioqIGFsbFRva2VuczsK
KwlpbnQgdG9rZW5Db3VudCA9IDA7CisJaW50IG1heFRva2VuQ291bnQgPSAxMDsKKwljb25zdCBj
aGFyKiBTcmNTdHI7CisJaW50IGk7CisKKwlpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQorCWlmICh0b2tlbj09J1xuJykg
eworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjcHJhZ21h
Iik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKwkgICAgcmV0dXJuIHRva2VuOworCX0KKwkK
KwlhbGxUb2tlbnMgPSAoY2hhcioqKW1hbGxvYyhzaXplb2YoY2hhciopICogbWF4VG9rZW5Db3Vu
dCk7CQorCisJd2hpbGUgKHRva2VuICE9ICdcbicpIHsKKwkJaWYgKHRva2VuQ291bnQgPj0gbWF4
VG9rZW5Db3VudCkgeworCQkJbWF4VG9rZW5Db3VudCAqPSAyOworCQkJYWxsVG9rZW5zID0gKGNo
YXIqKilyZWFsbG9jKChjaGFyKiopYWxsVG9rZW5zLCBzaXplb2YoY2hhciopICogbWF4VG9rZW5D
b3VudCk7CisJCX0KKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIENQUF9JREVOVElGSUVSOgor
CQkJU3JjU3RyID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCk7CisJ
CQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsg
MSk7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0cik7CisJCQlicmVh
azsKKwkJY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisJCQlTcmNTdHIgPSB5eWx2YWxwcC0+c3ltYm9s
X25hbWU7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKHN0cmxlbihT
cmNTdHIpICsgMSk7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0cik7
CisJCQlicmVhazsKKwkJY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKwkJCVNyY1N0ciA9IHl5bHZh
bHBwLT5zeW1ib2xfbmFtZTsKKwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxs
b2Moc3RybGVuKFNyY1N0cikgKyAxKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsr
XSwgU3JjU3RyKTsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorICAgICAgICAgICAgLy8gRU9GCisg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNwcmFnbWEgZGlyZWN0aXZlIG11c3QgZW5kIHdp
dGggYSBuZXdsaW5lIik7CQkJCisJCQlyZXR1cm4gdG9rZW47CisJCWRlZmF1bHQ6CisJCQlTcmNT
dHJOYW1lWzBdID0gdG9rZW47CisJCQlTcmNTdHJOYW1lWzFdID0gJ1wwJzsKKwkJCWFsbFRva2Vu
c1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2MoMik7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rv
a2VuQ291bnQrK10sIFNyY1N0ck5hbWUpOworCQl9CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9CisKKwljcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKKwlI
YW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOworCXRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KwkKKwlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7CisJCWZyZWUgKGFsbFRva2Vu
c1tpXSk7CisJfQorCWZyZWUgKGFsbFRva2Vucyk7CQorCisJcmV0dXJuIHRva2VuOyAgICAKK30g
Ly8gQ1BQcHJhZ21hCisKKyNkZWZpbmUgRVNTTF9WRVJTSU9OX05VTUJFUiAxMDAKKyNkZWZpbmUg
RVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgorCitzdGF0aWMgaW50IENQUHZlcnNpb24oeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCisgICAgaWYgKGNwcC0+cGFzdEZp
cnN0U3RhdGVtZW50ID09IDEpCisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ZlcnNpb24gbXVz
dCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGUgcHJvZ3JhbSIpOworCisg
ICAgaWYodG9rZW49PSdcbicpeworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjdmVyc2lvbiIpOworICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVy
biB0b2tlbjsKKwl9CisgICAgaWYgKHRva2VuICE9IENQUF9JTlRDT05TVEFOVCkKKyAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7CisJCisgICAgeXlsdmFscHAtPnNjX2ludD1h
dG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisJLy9TZXRWZXJzaW9uTnVtYmVyKHl5bHZhbHBw
LT5zY19pbnQpOworICAgIAorICAgIGlmICh5eWx2YWxwcC0+c2NfaW50ICE9IEVTU0xfVkVSU0lP
Tl9OVU1CRVIpCisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVyc2lvbiBudW1iZXIgbm90IHN1
cHBvcnRlZCBieSBFU1NMIik7CisKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgCisJaWYgKHRva2VuID09ICdcbicp
eworCQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2V7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCIjdmVyc2lvbiIpOworCX0KKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIENQUHZlcnNpb24KKwor
c3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCit7CisKKyAgICBp
bnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVs4MF07CisKKyAgICBpZih0b2tlbj09J1xu
Jyl7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNp
b24gbmFtZSBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0
dXJuIHRva2VuOworCX0KKworICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKKyAgICAKKyAgICBzdHJjcHkoZXh0
ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwor
CSAgICAKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICc6JykgeworICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIic6JyBtaXNzaW5nIGFmdGVyIGV4dGVuc2lvbiBuYW1lIik7CisgICAgICAgIHJl
dHVybiB0b2tlbjsKKyAgICB9CisgICAgCisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiAhPSBDUFBf
SURFTlRJRklFUikgeworICAgICAgICBDUFBTaEluZm9Mb2dNc2coImJlaGF2aW9yIGZvciBleHRl
bnNpb24gbm90IHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisg
ICAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoZXh0ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmluZyhh
dGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworCisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCWlmICh0b2tlbiA9PSAn
XG4nKXsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNleworICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiI2V4dGVuc2lvbiIpOworCX0KKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIENQUGV4dGVu
c2lvbgorCitpbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworICAgIGludCBpc1ZlcnNpb24gPSAwOwor
CisgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7CisgICAgICAgIGlmICh5eWx2YWxw
cC0+c2NfaWRlbnQgPT0gZGVmaW5lQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQZGVm
aW5lKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0g
ZWxzZUF0b20pIHsKKwkJCSBpZihDaGtDb3JyZWN0RWxzZU5lc3RpbmcoKSl7CisgICAgICAgICAg
ICAgICAgIGlmICghY3BwLT5pZmRlcHRoICl7CisgICAgICAgICAgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiI2Vsc2UgbWlzbWF0Y2giKTsKKyAgICAgICAgICAgICAgICAgICAgIGNwcC0+
Q29tcGlsZUVycm9yPTE7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgICAg
ICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNl
bHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgfQorCQkJICAgICB0b2tlbiA9IENQUGVsc2Uo
MCwgeXlsdmFscHApOworICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAjZWxzZSIpOworICAgICAgICAgICAgICAgICBj
cHAtPmlmZGVwdGg9MDsKKyAgICAgICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQg
PSAxOworICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB9CisJCX0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsaWZBdG9tKSB7CisgICAgICAgICAgICBpZiAo
IWNwcC0+aWZkZXB0aCl7CisgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxp
ZiBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAg
ICAgICAgICAgfSAKKyAgICAgICAgICAgIC8vIHRoaXMgdG9rZW4gaXMgcmVhbGx5IGEgZG9udCBj
YXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBlYXQgdGhlIHRva2VucworICAgICAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OyAKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKwkJICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVuZGlmQXRvbSkgeworCQkgICAgIC0tY3BwLT5lbHNl
dHJhY2tlcjsKKyAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7CisgICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzbWF0Y2giKTsKKyAgICAgICAgICAgICAg
ICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZWxz
ZQorCQkJICAJIC0tY3BwLT5pZmRlcHRoOworCSAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBpZkF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUGlmKHl5bHZhbHBwKTsK
KyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZkZWZBdG9tKSB7Cisg
ICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigxLCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmbmRlZkF0b20pIHsKKyAgICAgICAgICAgICB0
b2tlbiA9IENQUGlmZGVmKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxw
cC0+c2NfaWRlbnQgPT0gbGluZUF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUGxpbmUo
eXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBwcmFn
bWFBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBwcmFnbWEoeXlsdmFscHApOworICAg
ICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB1bmRlZkF0b20pIHsKKyAgICAg
ICAgICAgICB0b2tlbiA9IENQUHVuZGVmKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5
eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXJyb3JBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBD
UFBlcnJvcih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50
ID09IHZlcnNpb25BdG9tKSB7CisgICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFs
cHApOworICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2
YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgeworICAgICAgICAgICAgdG9rZW4gPSBD
UFBleHRlbnNpb24oeXlsdmFscHApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3Rv
cmVTdHIoIkludmFsaWQgRGlyZWN0aXZlIik7CisgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJp
bmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgbWVzc2Fn
ZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2Up
OworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hp
bGUgKHRva2VuICE9ICdcbicgJiYgdG9rZW4gIT0gMCAmJiB0b2tlbiAhPSBFT0YpIHsKKwkJdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworCX0KKyAgICAgICAgCisgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworCisgICAg
cmV0dXJuIHRva2VuOworfSAvLyByZWFkQ1BQbGluZQorCit2b2lkIEZyZWVNYWNybyhNYWNyb1N5
bWJvbCAqcykgeworICAgIERlbGV0ZVRva2VuU3RyZWFtKHMtPmJvZHkpOworfQorCit2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkgeworICAgIFNvdXJj
ZUxvYyBsb2NhdGlvbiA9IHswfTsKKyAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7CisgICAgTWFj
cm9TeW1ib2wgbWFjcm8gPSB7MH07CisgICAgeXlzdHlwZXBwIHZhbCA9IHswfTsKKyAgICBpbnQg
YXRvbSA9IDA7CisKKyAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9z
LT5wb29sKTsKKyAgICB2YWwuc2NfaW50ID0gdmFsdWU7CisgICAgc3ByaW50Zih2YWwuc3ltYm9s
X25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBSZWNvcmRUb2tlbihtYWNyby5ib2R5LCBDUFBfSU5U
Q09OU1RBTlQsICZ2YWwpOworICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBuYW1l
KTsKKyAgICBzeW1ib2wgPSBBZGRTeW1ib2woJmxvY2F0aW9uLCBtYWNyb3MsIGF0b20sIE1BQ1JP
X1MpOworICAgIHN5bWJvbC0+ZGV0YWlscy5tYWMgPSBtYWNybzsKK30KKworc3RhdGljIGludCBl
b2Zfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7IHJldHVybiAtMTsg
fQorc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXls
dmFscHApIHsgfQorCitzdGF0aWMgdm9pZCBQdXNoRW9mU3JjKCkgeworICAgIElucHV0U3JjICpp
biA9IG1hbGxvYyhzaXplb2YoSW5wdXRTcmMpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJ
bnB1dFNyYykpOworICAgIGluLT5zY2FuID0gZW9mX3NjYW47CisgICAgaW4tPmdldGNoID0gZW9m
X3NjYW47CisgICAgaW4tPnVuZ2V0Y2ggPSBub29wOworICAgIGluLT5wcmV2ID0gY3BwLT5jdXJy
ZW50SW5wdXQ7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbjsKK30KKworc3RhdGljIHZvaWQg
UG9wRW9mU3JjKCkgeworICAgIGlmIChjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbiA9PSBlb2Zfc2Nh
bikgeworICAgICAgICBJbnB1dFNyYyAqaW4gPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+cHJldjsKKyAgICAgICAgZnJlZShpbik7CisgICAgfQor
fQorCitzdGF0aWMgVG9rZW5TdHJlYW0gKlByZXNjYW5NYWNyb0FyZyhUb2tlblN0cmVhbSAqYSwg
eXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBpbnQgdG9rZW47CisgICAgVG9rZW5TdHJlYW0g
Km47CisgICAgUmV3aW5kVG9rZW5TdHJlYW0oYSk7CisgICAgZG8geworICAgICAgICB0b2tlbiA9
IFJlYWRUb2tlbihhLCB5eWx2YWxwcCk7CisgICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUiAmJiBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAodG9rZW4gPiAwKTsKKyAgICBpZiAodG9rZW4gPD0g
MCkgcmV0dXJuIGE7CisgICAgbiA9IE5ld1Rva2VuU3RyZWFtKCJtYWNybyBhcmciLCAwKTsKKyAg
ICBQdXNoRW9mU3JjKCk7CisgICAgUmVhZEZyb21Ub2tlblN0cmVhbShhLCAwLCAwKTsKKyAgICB3
aGlsZSAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKSkgPiAwKSB7CisgICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAm
JiBNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBSZWNvcmRUb2tlbihuLCB0b2tlbiwgeXlsdmFscHApOworICAg
IH0KKyAgICBQb3BFb2ZTcmMoKTsKKyAgICBEZWxldGVUb2tlblN0cmVhbShhKTsKKyAgICByZXR1
cm4gbjsKK30gLy8gUHJlc2Nhbk1hY3JvQXJnCisKK3R5cGVkZWYgc3RydWN0IE1hY3JvSW5wdXRT
cmMgeworICAgIElucHV0U3JjICAgIGJhc2U7CisgICAgTWFjcm9TeW1ib2wgKm1hYzsKKyAgICBU
b2tlblN0cmVhbSAqKmFyZ3M7Cit9IE1hY3JvSW5wdXRTcmM7CisKKy8qIG1hY3JvX3NjYW4gLS0t
CisqKiByZXR1cm4gdGhlIG5leHQgdG9rZW4gZm9yIGEgbWFjcm8gZXhwYW5pb24sIGhhbmRsaW5n
IG1hY3JvIGFyZ3MgCisqLworc3RhdGljIGludCBtYWNyb19zY2FuKE1hY3JvSW5wdXRTcmMgKmlu
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCBpOworICAgIGludCB0b2tlbiA9IFJl
YWRUb2tlbihpbi0+bWFjLT5ib2R5LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuID09IENQUF9J
REVOVElGSUVSKSB7CisgICAgICAgIGZvciAoaSA9IGluLT5tYWMtPmFyZ2MtMTsgaT49MDsgaS0t
KQorICAgICAgICAgICAgaWYgKGluLT5tYWMtPmFyZ3NbaV0gPT0geXlsdmFscHAtPnNjX2lkZW50
KSBicmVhazsKKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAgICAgUmVhZEZyb21Ub2tl
blN0cmVhbShpbi0+YXJnc1tpXSwgeXlsdmFscHAtPnNjX2lkZW50LCAwKTsKKyAgICAgICAgICAg
IHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICB9CisgICAgfQorICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsK
KyAgICBpbi0+bWFjLT5idXN5ID0gMDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNl
LnByZXY7CisgICAgaWYgKGluLT5hcmdzKSB7CisgICAgICAgIGZvciAoaT1pbi0+bWFjLT5hcmdj
LTE7IGk+PTA7IGktLSkKKyAgICAgICAgICAgIERlbGV0ZVRva2VuU3RyZWFtKGluLT5hcmdzW2ld
KTsKKyAgICAgICAgZnJlZShpbi0+YXJncyk7CisgICAgfQorICAgIGZyZWUoaW4pOworICAgIHJl
dHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworfSAvLyBtYWNyb19zY2FuCisKKy8qIE1hY3JvRXhwYW5kCisqKiBjaGVjayBhbiBpZGVudGlm
aWVyIChhdG9tKSB0byBzZWUgaWYgaXQgYSBtYWNybyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4K
KyoqIElmIGl0IGlzLCBwdXNoIGFuIElucHV0U3JjIHRoYXQgd2lsbCBwcm9kdWNlIHRoZSBhcHBy
b3ByaWF0ZSBleHBhbnNpb24KKyoqIGFuZCByZXR1cm4gVFJVRS4gIElmIG5vdCwgcmV0dXJuIEZB
TFNFLgorKi8KKworaW50IE1hY3JvRXhwYW5kKGludCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKK3sKKyAgICBTeW1ib2wgICAgICAgICAgICAgICpzeW0gPSBMb29rVXBTeW1ib2wobWFjcm9z
LCBhdG9tKTsKKyAgICBNYWNyb0lucHV0U3JjICAgICAgICppbjsKKyAgICBpbnQgaSxqLCB0b2tl
biwgZGVwdGg9MDsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworCWlmIChhdG9tID09IF9fTElO
RV9fQXRvbSkgeworICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwor
ICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19p
bnQpOworICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGF0b20gPT0gX19GSUxFX19BdG9tKSB7Cisg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIoKTsKKyAgICAgICAgc3By
aW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAg
ICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCWlmIChhdG9tID09IF9fVkVSU0lPTl9fQXRvbSkgeworICAgICAgICBzdHJj
cHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLEVTU0xfVkVSU0lPTl9TVFJJTkcpOworICAgICAgICB5
eWx2YWxwcC0+c2NfaW50ID0gYXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICBV
bmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisgICAgaWYgKCFzeW0gfHwgc3ltLT5kZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7
CisgICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVzeSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyBy
ZWN1cnNpdmUgZXhwYW5zaW9ucworICAgIGluID0gbWFsbG9jKHNpemVvZigqaW4pKTsKKyAgICBt
ZW1zZXQoaW4sIDAsIHNpemVvZigqaW4pKTsKKyAgICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKilt
YWNyb19zY2FuOworICAgIGluLT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsK
KyAgICBpbi0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAgaW4tPm1h
YyA9ICZzeW0tPmRldGFpbHMubWFjOworICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsK
KyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworCQlpZiAodG9rZW4gIT0gJygnKSB7CisgICAgICAgICAgICBVbmdldFRv
a2VuKHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBh
dG9tOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaW4tPmFyZ3Mg
PSBtYWxsb2MoaW4tPm1hYy0+YXJnYyAqIHNpemVvZihUb2tlblN0cmVhbSAqKSk7CisgICAgICAg
IGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykKKyAgICAgICAgICAgIGluLT5hcmdzW2ld
ID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOworCQlpPTA7aj0wOworICAgICAgICBk
b3sKKyAgICAgICAgICAgIGRlcHRoID0gMDsKKwkJCXdoaWxlKDEpIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsKKyAgICAgICAgICAgICAgICAgICAgU3Rv
cmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7CisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0wKSAmJiAodG9rZW4hPScpJykpIGJyZWFrOworICAg
ICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwICYmICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0g
JyknKSkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsK
KyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOworICAgICAgICAgICAg
ICAgIFJlY29yZFRva2VuKGluLT5hcmdzW2ldLCB0b2tlbiwgeXlsdmFscHApOworICAgICAgICAg
ICAgICAgIGo9MTsKKwkJCX0KKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIHsKKyAgICAg
ICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09MSkgJiZqPT0wKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisJCX13aGlsZShpIDwgaW4tPm1hYy0+
YXJnYyk7CisKKyAgICAgICAgaWYgKGkgPCBpbi0+bWFjLT5hcmdjKSB7CisgICAgICAgICAgICBT
dG9yZVN0cigiVG9vIGZldyBhcmdzIGluIE1hY3JvICIpOworICAgICAgICAgICAgU3RvcmVTdHIo
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7CisgICAgICAgICAgICBtZXNzYWdlPUdldFN0
cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScp
IHsKKyAgICAgICAgICAgIGRlcHRoPTA7CisJCQl3aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGgg
PiAwIHx8IHRva2VuICE9ICcpJykpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJykn
KSBkZXB0aC0tOworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAodG9r
ZW4gPT0gJygnKSBkZXB0aCsrOworICAgICAgICAgICAgfQorCQkJCisgICAgICAgICAgICBpZiAo
dG9rZW4gPD0gMCkgeworICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7
CisgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7
CisgICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBSZXNldFRTdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIFN0b3JlU3RyKCJUb28gbWFueSBhcmdzIGluIE1hY3JvICIpOworICAgICAgICAgICAgU3Rv
cmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7CisgICAgICAgICAgICBtZXNzYWdl
PUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7
CisgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKwkJfQorCQlmb3IgKGk9MDsgaTxpbi0+bWFj
LT5hcmdjOyBpKyspIHsKKyAgICAgICAgICAgIGluLT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJn
KGluLT5hcmdzW2ldLCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICB9CisjaWYgMAorICAgIHBy
aW50ZigiICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNcbiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBs
b2MuZmlsZSksCisgICAgICAgICAgIGxvYy5saW5lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRv
bSkpOworICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykgeworICAgICAgICBwcmlu
dGYoIlx0YXJnICVzID0gJyIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ld
KSk7CisgICAgICAgIER1bXBUb2tlblN0cmVhbShzdGRvdXQsIGluLT5hcmdzW2ldKTsKKyAgICAg
ICAgcHJpbnRmKCInXG4iKTsKKyAgICB9CisjZW5kaWYKKwkvKnJldGFpbiB0aGUgaW5wdXQgc291
cmNlKi8KKyAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgc3ltLT5k
ZXRhaWxzLm1hYy5idXN5ID0gMTsKKyAgICBSZXdpbmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMu
bWFjLmJvZHkpOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOworICAgIHJldHVy
biAxOworfSAvLyBNYWNyb0V4cGFuZAorCitpbnQgQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQp
Cit7CisgICAgaWYoY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09PTApeworCSAgY3Bw
LT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09MTsKKyAgICAgIHJldHVybiAxOyAgICAgICAg
ICAKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAy
LCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3Vw
cGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3Jl
ZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9u
LCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUK
K2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFn
cmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5
IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRp
b24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBu
b24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMg
b3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNl
LCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJl
LCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkK
K2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0
d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRo
aXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwg
c3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhl
IG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29y
cG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGlu
IHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1w
bGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xp
bWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIg
ZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBT
b2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVy
ZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAi
QVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFU
SU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5U
LCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgor
SVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRI
IE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBG
T1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9G
SVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
CitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJ
U0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJ
T04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBD
QVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgor
TlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3BwLmgKKy8vCisKKyNpZiAhZGVmaW5l
ZChfX0NQUF9IKQorI2RlZmluZSBfX0NQUF9IIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wYXJzZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmgiCisKK2ludCBJbml0Q1BQKHZvaWQpOworaW50IEZpbmFsQ1BQKHZvaWQpOworaW50ICByZWFk
Q1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCk7
CisKK3R5cGVkZWYgc3RydWN0IE1hY3JvU3ltYm9sIHsKKyAgICBpbnQgYXJnYzsKKyAgICBpbnQg
KmFyZ3M7CisgICAgVG9rZW5TdHJlYW0gKmJvZHk7CisgICAgdW5zaWduZWQgYnVzeToxOworICAg
IHVuc2lnbmVkIHVuZGVmOjE7Cit9IE1hY3JvU3ltYm9sOworCit2b2lkIEZyZWVNYWNybyhNYWNy
b1N5bWJvbCAqKTsKK3ZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50
IHZhbHVlKTsKKwordm9pZCAgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKTsgICAgICAv
LyBQcmludHMgaW5mb3JtYXRpb24gaW50byBkZWJ1ZyBsb2cKK3ZvaWQgIENQUFNoSW5mb0xvZ01z
Zyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZv
LkxvZwordm9pZCAgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpOyAvLyBQcmlu
dHMgd2FybmluZyBtZXNzYWdlcyBpbnRvIGluZm8gbG9nCit2b2lkICBIYW5kbGVQcmFnbWEoY29u
c3QgY2hhcioqLCBpbnQgbnVtVG9rZW5zKTsgIC8vICNwcmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5l
ci4KK3ZvaWQgIFJlc2V0VFN0cmluZyh2b2lkKTsgICAgICAgICAgICAgICAgICAgLy8gI2Vycm9y
IE1lc3NhZ2UgYXMgVFN0cmluZy4KK3ZvaWQgIENQUEVycm9yVG9JbmZvTG9nKGNoYXIqKTsgICAg
ICAgICAgICAgLy8gU3RpY2sgYWxsIGNwcCBlcnJvcnMgaW50byBTaC5JbmZvLmxvZyAgIC4KK3Zv
aWQgIFN0b3JlU3RyKGNoYXIqKTsgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIFRT
dHJpbmcgaW4gUGFyc2UgQ29udGV4dC4KK3ZvaWQgIFNldExpbmVOdW1iZXIoaW50KTsgICAgICAg
ICAgICAgICAgICAgLy8gU2V0IGxpbmUgbnVtYmVyLiAgCit2b2lkICBTZXRTdHJpbmdOdW1iZXIo
aW50KTsgICAgICAgICAgICAgICAgIC8vIFNldCBzdHJpbmcgbnVtYmVyLiAgICAKK2ludCAgIEdl
dExpbmVOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0
cmluZyBOdW1iZXIuIAoraW50ICAgR2V0U3RyaW5nTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCitjb25zdCBjaGFyKiBHZXRTdHJm
cm9tVFN0cih2b2lkKTsgICAgICAgICAgIC8vIENvbnZlcnQgVFN0cmluZyB0byBTdHJpbmcuICAK
K3ZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0
IGNoYXIqIGJlaGF2aW9yKTsKK2ludCAgIEZyZWVDUFAodm9pZCk7CisKKyNlbmRpZiAvLyAhKGRl
ZmluZWQoX19DUFBfSCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitD
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAor
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
CitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
CitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHBzdHJ1Y3QuYworLy8KKworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKK0NQUFN0cnVjdCAgKmNwcCAgICAgID0gTlVM
TDsKK3N0YXRpYyBpbnQgIHJlZkNvdW50ID0gMDsKKworaW50IEluaXRQcmVwcm9jZXNzb3Iodm9p
ZCk7CitpbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCk7CitpbnQgRnJlZUNQUFN0cnVjdCh2b2lk
KTsKK2ludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKKworLyoKKyAqIEluaXRDUFBTdHJ1
Y3QoKSAtIEluaXRpbGFpemUgdGhlIENQUCBzdHJ1Y3R1cmUuCisgKgorICovCisKK2ludCBJbml0
Q1BQU3RydWN0KHZvaWQpCit7CisgICAgaW50IGxlbjsKKyAgICBjaGFyICpwOworCisgICAgY3Bw
ID0gKENQUFN0cnVjdCAqKSBtYWxsb2Moc2l6ZW9mKENQUFN0cnVjdCkpOworICAgIGlmIChjcHAg
PT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZWZDb3VudCsrOworCisgICAgLy8g
SW5pdGlhbGl6ZSBwdWJsaWMgbWVtYmVyczoKKyAgICBjcHAtPnBMYXN0U291cmNlTG9jID0gJmNw
cC0+bGFzdFNvdXJjZUxvYzsKKyAgICAKKwlwID0gKGNoYXIgKikgJmNwcC0+b3B0aW9uczsKKyAg
ICBsZW4gPSBzaXplb2YoY3BwLT5vcHRpb25zKTsKKyAgICB3aGlsZSAoLS1sZW4gPj0gMCkKKyAg
ICAgICAgcFtsZW5dID0gMDsKKyAgICAgCisgICAgUmVzZXRQcmVwcm9jZXNzb3IoKTsKKyAgICBy
ZXR1cm4gMTsKK30gLy8gSW5pdENQUFN0cnVjdAorCitpbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9p
ZCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHByaXZhdGUgbWVtYmVyczoKKworICAgIGNwcC0+bGFz
dFNvdXJjZUxvYy5maWxlID0gMDsKKyAgICBjcHAtPmxhc3RTb3VyY2VMb2MubGluZSA9IDA7CisJ
Y3BwLT5wQz0wOworICAgIGNwcC0+Q29tcGlsZUVycm9yPTA7IAorCWNwcC0+aWZkZXB0aD0wOwor
ICAgIGZvcihjcHAtPmVsc2V0cmFja2VyPTA7IGNwcC0+ZWxzZXRyYWNrZXI8NjQ7IGNwcC0+ZWxz
ZXRyYWNrZXIrKykKKwkJY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09MDsgCisJY3Bw
LT5lbHNldHJhY2tlcj0wOworICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMDsKKyAgICByZXR1
cm4gMTsKK30KKworLy9JbnRpYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgorCitpbnQgSW5pdFBy
ZXByb2Nlc3Nvcih2b2lkKQoreworICAgIyAgZGVmaW5lIENQUF9TVFVGRiB0cnVlCisgICAgICAg
ICMgIGlmZGVmIENQUF9TVFVGRgorICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgpOworICAgICAg
ICAgICAgSW5pdENQUFN0cnVjdCgpOworICAgICAgICAgICAgY3BwLT5vcHRpb25zLlF1aWV0ID0g
MTsKKyAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nID0gImdlbmVyaWMiOwor
ICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgMCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgICAgICBpZiAoIUluaXRTY2FubmVyKGNwcCkpCisJICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIyAgZW5kaWYKKyAgcmV0dXJuIDA7IAorfQorCisvL0Zy
ZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBzdHJ1Y3R1cmUuCisKK2ludCBGcmVlQ1BQU3Ry
dWN0KHZvaWQpCit7CisgICAgaWYgKHJlZkNvdW50KQorICAgIHsKKyAgICAgICBmcmVlKGNwcCk7
CisgICAgICAgcmVmQ291bnQtLTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDE7Cit9CisKKy8v
RmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgorCitpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Io
dm9pZCkKK3sKKyAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1ZQorICAgICAgICAjICBpZmRlZiBD
UFBfU1RVRkYKKyAgICAgICAgICAgIEZyZWVBdG9tVGFibGUoYXRhYmxlKTsKKyAgICAgICAgICAg
IEZyZWVDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEZyZWVTY2FubmVyKCk7CisgICAgICAgIyAg
ZW5kaWYKKyAgcmV0dXJuIDA7IAorfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2Yg
Y3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9tZW1vcnkuYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAor
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0lu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
K05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitU
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAor
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworI2luY2x1ZGUgPHN0ZGRl
Zi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVm
IF9NU0NfVkVSCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKKworLy8gZGVmYXVsdCBhbGlnbm1lbnQgYW5kIGNo
dW5rc2l6ZSwgaWYgY2FsbGVkIHdpdGggMCBhcmd1bWVudHMKKyNkZWZpbmUgQ0hVTktTSVpFICAg
ICAgICg2NCoxMDI0KQorI2RlZmluZSBBTElHTiAgICAgICAgICAgOAorCisvLyB3ZSBuZWVkIHRv
IGNhbGwgdGhlIGByZWFsJyBtYWxsb2MgYW5kIGZyZWUsIG5vdCBvdXIgcmVwbGFjZW1lbnRzCisj
dW5kZWYgbWFsbG9jCisjdW5kZWYgZnJlZQorCitzdHJ1Y3QgY2h1bmsgeworICAgIHN0cnVjdCBj
aHVuayAgICAgICAgKm5leHQ7Cit9OworCitzdHJ1Y3QgY2xlYW51cCB7CisgICAgc3RydWN0IGNs
ZWFudXAgICAgICAqbmV4dDsKKyAgICB2b2lkICAgICAgICAgICAgICAgICgqZm4pKHZvaWQgKik7
CisgICAgdm9pZCAgICAgICAgICAgICAgICAqYXJnOworfTsKKworc3RydWN0IE1lbW9yeVBvb2xf
cmVjIHsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpuZXh0OworICAgIHVpbnRwdHJfdCAgICAg
ICAgICAgZnJlZSwgZW5kOworICAgIHNpemVfdCAgICAgICAgICAgICAgY2h1bmtzaXplOworICAg
IHVpbnRwdHJfdCAgICAgICAgICAgYWxpZ25tYXNrOworICAgIHN0cnVjdCBjbGVhbnVwICAgICAg
KmNsZWFudXA7Cit9OworCitNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtz
aXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCit7CisgICAgTWVtb3J5UG9vbCAgKnBvb2w7CisKKyAg
ICBpZiAoYWxpZ24gPT0gMCkgYWxpZ24gPSBBTElHTjsKKyAgICBpZiAoY2h1bmtzaXplID09IDAp
IGNodW5rc2l6ZSA9IENIVU5LU0laRTsKKyAgICBpZiAoYWxpZ24gJiAoYWxpZ24tMSkpIHJldHVy
biAwOworICAgIGlmIChjaHVua3NpemUgPCBzaXplb2YoTWVtb3J5UG9vbCkpIHJldHVybiAwOwor
ICAgIGlmIChjaHVua3NpemUgJiAoYWxpZ24tMSkpIHJldHVybiAwOworICAgIGlmICghKHBvb2wg
PSBtYWxsb2MoY2h1bmtzaXplKSkpIHJldHVybiAwOworICAgIHBvb2wtPm5leHQgPSAwOworICAg
IHBvb2wtPmNodW5rc2l6ZSA9IGNodW5rc2l6ZTsKKyAgICBwb29sLT5hbGlnbm1hc2sgPSAodWlu
dHB0cl90KShhbGlnbiktMTsgIAorICAgIHBvb2wtPmZyZWUgPSAoKHVpbnRwdHJfdCkocG9vbCAr
IDEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2s7CisgICAgcG9vbC0+ZW5k
ID0gKHVpbnRwdHJfdClwb29sICsgY2h1bmtzaXplOworICAgIHBvb2wtPmNsZWFudXAgPSAwOwor
ICAgIHJldHVybiBwb29sOworfQorCit2b2lkIG1lbV9GcmVlUG9vbChNZW1vcnlQb29sICpwb29s
KQoreworICAgIHN0cnVjdCBjbGVhbnVwICAgICAgKmNsZWFudXA7CisgICAgc3RydWN0IGNodW5r
ICAgICAgICAqcCwgKm5leHQ7CisKKyAgICBmb3IgKGNsZWFudXAgPSBwb29sLT5jbGVhbnVwOyBj
bGVhbnVwOyBjbGVhbnVwID0gY2xlYW51cC0+bmV4dCkgeworICAgICAgICBjbGVhbnVwLT5mbihj
bGVhbnVwLT5hcmcpOworICAgIH0KKyAgICBmb3IgKHAgPSAoc3RydWN0IGNodW5rICopcG9vbDsg
cDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIGZyZWUocCk7
CisgICAgfQorfQorCit2b2lkICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcG9vbCwgc2l6ZV90IHNp
emUpCit7CisgICAgc3RydWN0IGNodW5rICpjaDsKKyAgICB2b2lkICpydiA9ICh2b2lkICopcG9v
bC0+ZnJlZTsKKyAgICBzaXplID0gKHNpemUgKyBwb29sLT5hbGlnbm1hc2spICYgfnBvb2wtPmFs
aWdubWFzazsKKyAgICBpZiAoc2l6ZSA8PSAwKSBzaXplID0gcG9vbC0+YWxpZ25tYXNrOworICAg
IHBvb2wtPmZyZWUgKz0gc2l6ZTsKKyAgICBpZiAocG9vbC0+ZnJlZSA+IHBvb2wtPmVuZCB8fCBw
b29sLT5mcmVlIDwgKHVpbnRwdHJfdClydikgeworICAgICAgICBzaXplX3QgbWlucmVxID0gKHNp
emUgKyBzaXplb2Yoc3RydWN0IGNodW5rKSArIHBvb2wtPmFsaWdubWFzaykKKyAgICAgICAgICAg
ICAgICAgICAgICAmIH5wb29sLT5hbGlnbm1hc2s7CisgICAgICAgIHBvb2wtPmZyZWUgPSAodWlu
dHB0cl90KXJ2OworICAgICAgICBpZiAobWlucmVxID49IHBvb2wtPmNodW5rc2l6ZSkgeworICAg
ICAgICAgICAgLy8gcmVxdWVzdCBzaXplIGlzIHRvbyBiaWcgZm9yIHRoZSBjaHVua3NpemUsIHNv
IGFsbG9jYXRlIGl0IGFzCisgICAgICAgICAgICAvLyBhIHNpbmdsZSBjaHVuayBvZiB0aGUgcmln
aHQgc2l6ZQorICAgICAgICAgICAgY2ggPSBtYWxsb2MobWlucmVxKTsKKyAgICAgICAgICAgIGlm
ICghY2gpIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2ggPSBtYWxs
b2MocG9vbC0+Y2h1bmtzaXplKTsKKyAgICAgICAgICAgIGlmICghY2gpIHJldHVybiAwOworICAg
ICAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpY2ggKyBtaW5yZXE7CisgICAgICAgICAg
ICBwb29sLT5lbmQgPSAodWludHB0cl90KWNoICsgcG9vbC0+Y2h1bmtzaXplOworICAgICAgICB9
CisgICAgICAgIGNoLT5uZXh0ID0gcG9vbC0+bmV4dDsKKyAgICAgICAgcG9vbC0+bmV4dCA9IGNo
OworICAgICAgICBydiA9ICh2b2lkICopKCgodWludHB0cl90KShjaCsxKSArIHBvb2wtPmFsaWdu
bWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworfQorCitp
bnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcG9vbCwgdm9pZCAoKmZuKSh2b2lkICopLCB2
b2lkICphcmcpIHsKKyAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKworICAgIHBvb2wtPmZy
ZWUgPSAocG9vbC0+ZnJlZSArIHNpemVvZih2b2lkICopIC0gMSkgJiB+KHNpemVvZih2b2lkICop
LTEpOworICAgIGNsZWFudXAgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKHN0cnVjdCBjbGVhbnVw
KSk7CisgICAgaWYgKCFjbGVhbnVwKSByZXR1cm4gLTE7CisgICAgY2xlYW51cC0+bmV4dCA9IHBv
b2wtPmNsZWFudXA7CisgICAgY2xlYW51cC0+Zm4gPSBmbjsKKyAgICBjbGVhbnVwLT5hcmcgPSBh
cmc7CisgICAgcG9vbC0+Y2xlYW51cCA9IGNsZWFudXA7CisgICAgcmV0dXJuIDA7Cit9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJ
RElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBp
bgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1
dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0
aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFz
ZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElB
Citzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlk
ZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5W
SURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVy
IE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRo
ZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRp
c3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRp
b25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91
IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBj
b3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcK
K3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUg
TlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBt
YXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgor
RXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0
cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEg
aGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0
aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhl
ciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVk
LiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRX
QVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF
RCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVS
IEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBF
VkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJ
TkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUg
VVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRI
RQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVP
UlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFC
SUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8v
CisjaWZuZGVmIF9fTUVNT1JZX0gKKyNkZWZpbmUgX19NRU1PUllfSAorCit0eXBlZGVmIHN0cnVj
dCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOworCitleHRlcm4gTWVtb3J5UG9vbCAqbWVtX0Ny
ZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKK2V4dGVybiB2
b2lkIG1lbV9GcmVlUG9vbChNZW1vcnlQb29sICopOworZXh0ZXJuIHZvaWQgKm1lbV9BbGxvYyhN
ZW1vcnlQb29sICpwLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqbWVtX1JlYWxsb2MoTWVt
b3J5UG9vbCAqcCwgdm9pZCAqb2xkLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IG5ld3NpemUpOwor
ZXh0ZXJuIGludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29sICpwLCB2b2lkICgqZm4pKHZvaWQg
KiksIHZvaWQgKmFyZyk7CisKKyNlbmRpZiAvKiBfX01FTU9SWV9IICovCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2Fy
ZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBC
SVNPTl9QQVJTRVJfSAorIyBkZWZpbmUgQklTT05fUEFSU0VSX0gKKworI2lmbmRlZiB5eXN0eXBl
cHAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgICAgc2NfaW50OworICAgIGZsb2F0ICBzY19m
dmFsOworICAgIGludCAgICBzY19pZGVudDsKKwljaGFyICAgc3ltYm9sX25hbWVbTUFYX1NZTUJP
TF9OQU1FX0xFTisxXTsKK30geXlzdHlwZXBwOworCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJ
QUwgMQorI2VuZGlmCisjIGRlZmluZQlDUFBfQU5EX09QCSAgICAgICAgMjU3CisjIGRlZmluZQlD
UFBfU1VCX0FTU0lHTgkgICAgMjU5CisjIGRlZmluZQlDUFBfTU9EX0FTU0lHTgkgICAgMjYwCisj
IGRlZmluZQlDUFBfQUREX0FTU0lHTgkyNjEKKyMgZGVmaW5lCUNQUF9ESVZfQVNTSUdOCTI2Mgor
IyBkZWZpbmUJQ1BQX01VTF9BU1NJR04JMjYzCisjIGRlZmluZQlDUFBfRVFfT1AJICAgICAgICAy
NjQKKyMgZGVmaW5lICAgIENQUF9YT1JfT1AgICAgICAgICAyNjUgCisjIGRlZmluZQlFUlJPUl9T
WQkgICAgMjY2CisjIGRlZmluZQlDUFBfRkxPQVRDT05TVEFOVAkyNjcKKyMgZGVmaW5lCUNQUF9H
RV9PUAkgICAgICAgIDI2OAorIyBkZWZpbmUJQ1BQX1JJR0hUX09QICAgICAgICAyNjkKKyMgZGVm
aW5lCUNQUF9JREVOVElGSUVSCSAgICAyNzAKKyMgZGVmaW5lCUNQUF9JTlRDT05TVEFOVAkgICAg
MjcxCisjIGRlZmluZQlDUFBfTEVfT1AJICAgICAgICAyNzIKKyMgZGVmaW5lCUNQUF9MRUZUX09Q
CSAgICAgICAgMjczCisjIGRlZmluZQlDUFBfREVDX09QCTI3NAorIyBkZWZpbmUJQ1BQX05FX09Q
CSAgICAgICAgMjc1CisjIGRlZmluZQlDUFBfT1JfT1AJICAgICAgICAyNzYKKyMgZGVmaW5lCUNQ
UF9JTkNfT1AJICAgIDI3NworIyBkZWZpbmUJQ1BQX1NUUkNPTlNUQU5UCSAgICAyNzgKKyMgZGVm
aW5lCUNQUF9UWVBFSURFTlRJRklFUgkyNzkKKworIyBkZWZpbmUJRklSU1RfVVNFUl9UT0tFTl9T
WQkyODkKKworIyBkZWZpbmUJQ1BQX1JJR0hUX0FTU0lHTgkgICAgMjgwCisjIGRlZmluZQlDUFBf
TEVGVF9BU1NJR04JICAgIDI4MQorIyBkZWZpbmUJQ1BQX0FORF9BU1NJR04JMjgyCisjIGRlZmlu
ZQlDUFBfT1JfQVNTSUdOICAJMjgzCisjIGRlZmluZQlDUFBfWE9SX0FTU0lHTgkyODQKKyMgZGVm
aW5lCUNQUF9MRUZUX0JSQUNLRVQJMjg1CisjIGRlZmluZQlDUFBfUklHSFRfQlJBQ0tFVAkyODYK
KyMgZGVmaW5lCUNQUF9MRUZUX0JSQUNFCTI4NworIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNFCTI4
OAorCisjZW5kaWYgLyogbm90IEJJU09OX1BBUlNFUl9IICovCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVw
cm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElB
IENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgor
Y29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlv
biBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVz
ZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBk
byBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitz
b2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBi
eSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJ
QSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5W
SURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQor
Ik5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3Ry
aWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25z
LCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJl
ZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5
cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3Rl
eHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJ
RElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJr
cyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhj
ZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBv
ciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVy
ZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0
IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3
b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBO
byBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJF
IElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwK
K0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFM
T05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVO
VCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJ
REVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNF
LCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQor
TlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkg
T0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJ
VFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCitleHRlcm4gQ1BQU3Ry
dWN0ICpjcHA7CitpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKK2ludCBJbml0U2Nhbm5lcihDUFBT
dHJ1Y3QgKmNwcCk7CitpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0
c2l6ZSk7CitpbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcyk7CitjaGFyKiBHZXRTdHJpbmdPZkF0
b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzY0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzY2FubmVyLmMK
Ky8vCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgMAorICAgICNpbmNsdWRlIDxp
ZWVlZnAuaD4KKyAgICAjZWxzZQorICAgICNkZWZpbmUgaXNpbmZmKHgpICgoKCooaW50ICopJih4
KSAmIDB4N2Y4MDAwMDBMKT09MHg3ZjgwMDAwMEwpICYmIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgKCgqKGludCAqKSYoeCkgJiAweDAwN2ZmZmZmTCk9PTAwMDAwMDAwMDBMKSkKKyNlbmRpZgor
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCisKK3R5cGVk
ZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKKyAgICBJbnB1dFNyYyBiYXNlOworICAgIGNoYXIg
KnA7Cit9IFN0cmluZ0lucHV0U3JjOworCitzdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICpp
cywgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgcmV0dXJuIEVPRjsKK30gLy8gZW9mX3Nj
YW4KKworc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICog
eXlsdmFscHApIHt9CisKK3N0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zf
c2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9OworCitzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNy
YyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNkZWZpbmUgRU9MX1NZICdcbicKKworI2lm
IGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIF9fYXNtIGlu
dCAzCisjZWxpZiBkZWZpbmVkKF9NX0FNRDY0KQorICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQo
KSBhc3NlcnQoISJEYmdfQnJlYWtwb2ludCIpOworI2Vsc2UKKyAgICAjZGVmaW5lIERCR19CUkVB
S1BPSU5UKCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX01f
QU1ENjQpCisgICAgX19pbnQ2NCBSRFRTQyAoIHZvaWQgKSB7CisKKyAgICAgICAgX19pbnQ2NCB2
OworICAgIAorICAgICAgICBfX2FzbSBfX2VtaXQgMHgwZgorICAgICAgICBfX2FzbSBfX2VtaXQg
MHgzMQorICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYsIGVheAorICAgICAgICBfX2FzbSBt
b3YgZHdvcmQgcHRyIHYrNCwgZWR4CisgICAgCisgICAgICAgIHJldHVybiB2OworICAgIH0KKyNl
bmRpZgorCisKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCkKK3sKKyAgICAvLyBBZGQg
dmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhlIENQUCBsaW5lIHNjYW5uZXI6CisgICAgaWYgKCFJ
bml0Q1BQKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY3BwLT5tb3N0UmVjZW50VG9rZW4g
PSAwOworICAgIGNwcC0+dG9rZW5Mb2MgPSAmY3BwLT5sdG9rZW5Mb2M7CisKKyAgICBjcHAtPmx0
b2tlbkxvYy5maWxlID0gMDsKKyAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gMDsKKworICAgIGNw
cC0+Y3VycmVudElucHV0ID0gJmVvZl9pbnB1dHNyYzsKKyAgICBjcHAtPnByZXZpb3VzX3Rva2Vu
ID0gJ1xuJzsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisKKyAgICByZXR1cm4g
MTsKK30gLy8gSW5pdFNjYW5uZXIKKworaW50IEZyZWVTY2FubmVyKHZvaWQpCit7CisgICAgcmV0
dXJuIChGcmVlQ1BQKCkpOworfQorCisvKgorICogc3RyX2dldGNoKCkKKyAqIHRha2VzIGNhcmUg
b2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCisgKiByZXR1cm5zIHRoZSBuZXh0LWNo
YXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgorICogcmV0dXJucyBFT0Ygd2hlbiB0aGUgY29tcGxl
dGUgc2hhZGVyIGlzIHBhcnNlZC4KKyAqLworc3RhdGljIGludCBzdHJfZ2V0Y2goU3RyaW5nSW5w
dXRTcmMgKmluKQoreworCWZvcig7Oyl7CisJICAgaWYgKCppbi0+cCl7CisJICAgICAgaWYgKCpp
bi0+cCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgaW4tPmJhc2UubGluZSsrOworICAgICAgICAg
ICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuICppbi0+
cCsrOworCSAgIH0KKwkgICBpZigrKyhjcHAtPlBhV2hpY2hTdHIpIDwgY3BwLT5QYUFyZ2Mpewor
CQkgIGZyZWUoaW4pOworCQkgIFNldFN0cmluZ051bWJlcihjcHAtPlBhV2hpY2hTdHIpOworICAg
IAkgIFNldExpbmVOdW1iZXIoMSk7CisJCSAgU2NhbkZyb21TdHJpbmcoY3BwLT5QYUFyZ3ZbY3Bw
LT5QYVdoaWNoU3RyXSk7CisJCSAgaW49KFN0cmluZ0lucHV0U3JjKiljcHAtPmN1cnJlbnRJbnB1
dDsKKwkgICAgICBjb250aW51ZTsgICAgICAgICAgICAgCisJICAgfQorCSAgIGVsc2V7CisJICAg
ICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OworCSAgICAgIGNwcC0+UGFXaGlj
aFN0cj0wOworICAgICAgICAgIGZyZWUoaW4pOworICAgICAgICAgIHJldHVybiBFT0Y7CisgICAg
ICAgfSAgCisJfQorfSAvLyBzdHJfZ2V0Y2gKKworc3RhdGljIHZvaWQgc3RyX3VuZ2V0Y2goU3Ry
aW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqdHlwZSkgeworICAgIGlmIChpbi0+
cFstMV0gPT0gY2gpaW4tPnAtLTsKKwllbHNlIHsKKwkJKihpbi0+cCk9J1wwJzsgLy90aGlzIHdv
dWxkIHRha2UgY2FyZSBvZiBzaGlmdGluZyB0byB0aGUgcHJldmlvdXMgc3RyaW5nLgorCSAgICBj
cHAtPlBhV2hpY2hTdHItLTsKKwl9ICAKKwlpZiAoY2ggPT0gJ1xuJykgeworICAgICAgICBpbi0+
YmFzZS5saW5lLS07CisgICAgICAgIERlY0xpbmVOdW1iZXIoKTsKKyAgICB9Cit9IC8vIHN0cl91
bmdldGNoCisKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICpzKQoreworICAgIAorCVN0cmluZ0lu
cHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKKyAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZihTdHJpbmdJbnB1dFNyYykpOworCWluLT5wID0gczsKKyAgICBpbi0+YmFz
ZS5saW5lID0gMTsKKyAgICBpbi0+YmFzZS5zY2FuID0gYnl0ZV9zY2FuOworICAgIGluLT5iYXNl
LmdldGNoID0gKGludCAoKikoSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopKXN0cl9nZXRjaDsKKyAg
ICBpbi0+YmFzZS51bmdldGNoID0gKHZvaWQgKCopKElucHV0U3JjICosIGludCwgeXlzdHlwZXBw
ICopKXN0cl91bmdldGNoOworICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsK
KyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsKKworICAgIHJldHVybiAxOworfSAv
LyBTY2FuRnJvbVN0cmluZzsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRmxvYXRpbmcgcG9pbnQg
Y29uc3RhbnRzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogbEJ1aWxkRmxvYXRWYWx1ZSgpIC0g
UXVpY2sgYW5kIGRpcnR5IGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuICBTaW5jZSBhbGwK
KyAqICAgICAgICAgd2UgbmVlZCBpcyBzaW5nbGUgcHJlY2lzaW9uIHRoaXMgc2hvdWxkIGJlIHF1
aXRlIHByZWNpc2UuCisgKi8KKworc3RhdGljIGZsb2F0IGxCdWlsZEZsb2F0VmFsdWUoY29uc3Qg
Y2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgZXhwKQoreworICAgIGRvdWJsZSB2YWwsIGV4cHZhbCwg
dGVuOworICAgIGludCBpaSwgbGxlbiwgYWJzZXhwOworICAgIGZsb2F0IHJ2OworCisgICAgdmFs
ID0gMC4wOworICAgIGxsZW4gPSBsZW47CisgICAgZm9yIChpaSA9IDA7IGlpIDwgbGVuOyBpaSsr
KQorICAgICAgICB2YWwgPSB2YWwqMTAuMCArIChzdHJbaWldIC0gJzAnKTsKKyAgICBpZiAoZXhw
ICE9IDApIHsKKyAgICAgICAgYWJzZXhwID0gZXhwID4gMCA/IGV4cCA6IC1leHA7CisgICAgICAg
IGV4cHZhbCA9IDEuMGY7CisgICAgICAgIHRlbiA9IDEwLjA7CisgICAgICAgIHdoaWxlIChhYnNl
eHApIHsKKyAgICAgICAgICAgIGlmIChhYnNleHAgJiAxKQorICAgICAgICAgICAgICAgIGV4cHZh
bCAqPSB0ZW47CisgICAgICAgICAgICB0ZW4gKj0gdGVuOworICAgICAgICAgICAgYWJzZXhwID4+
PSAxOworICAgICAgICB9CisgICAgICAgIGlmIChleHAgPj0gMCkgeworICAgICAgICAgICAgdmFs
ICo9IGV4cHZhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbCAvPSBleHB2YWw7
CisgICAgICAgIH0KKyAgICB9CisgICAgcnYgPSAoZmxvYXQpdmFsOworICAgIGlmIChpc2luZmYo
cnYpKSB7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIgRVJST1JfX19GUF9DT05TVF9PVkVSRkxPVyIp
OworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9IC8vIGxCdWlsZEZsb2F0VmFsdWUKKworCisvKgor
ICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBwb2ludCBjb25zdGFudC4gIEFzc3Vt
ZXMgdGhhdCB0aGUgc2Nhbm5lcgorICogICAgICAgICBoYXMgc2VlbiBhdCBsZWFzdCBvbmUgZGln
aXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9yIHRoZQorICogICAgICAgICBs
ZXR0ZXIgJ2UnLgorICovCisKK3N0YXRpYyBpbnQgbEZsb2F0Q29uc3QoY2hhciAqc3RyLCBpbnQg
bGVuLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCBIYXNEZWNpbWFs
LCBkZWNsZW4sIGV4cCwgRXhwU2lnbjsKKyAgICBpbnQgc3RyX2xlbjsKKyAgICBmbG9hdCBsdmFs
OworICAgIAorICAgIEhhc0RlY2ltYWwgPSAwOworICAgIGRlY2xlbiA9IDA7CisgICAgZXhwID0g
MDsKKwkKKyAgICBzdHJfbGVuPWxlbjsKKyAgICBpZiAoY2ggPT0gJy4nKSB7CisJCXN0cltsZW4r
K109Y2g7CisgICAgICAgIEhhc0RlY2ltYWwgPSAxOworICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB3aGls
ZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9T
WU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICBkZWNsZW4rKzsKKyAgICAgICAgICAg
ICAgICBpZiAobGVuID4gMCB8fCBjaCAhPSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Ry
W2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7c3RyX2xlbisrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19GUF9DT05TVF9UT09fTE9O
RyIpOworICAgICAgICAgICAgICAgIGxlbiA9IDEsc3RyX2xlbj0xOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXhwb25lbnQ6CisKKyAgICBpZiAoY2ggPT0gJ2Un
IHx8IGNoID09ICdFJykgeworICAgICAgICBFeHBTaWduID0gMTsKKwkJc3RyW2xlbisrXT1jaDsK
KyAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgc3RyW2xl
bisrXT1jaDsgIAorCQkJY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLScpIHsKKyAgICAg
ICAgICAgIEV4cFNpZ24gPSAtMTsKKwkJCXN0cltsZW4rK109Y2g7CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAg
ICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGV4
cCA9IGV4cCoxMCArIGNoIC0gJzAnOworCQkJCXN0cltsZW4rK109Y2g7CisgICAgICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VSUk9SX0lOX0VYUE9ORU5UIik7CisgICAgICAgIH0KKyAg
ICAgICAgZXhwICo9IEV4cFNpZ247CisgICAgfQorICAgICAgCisgICAgaWYgKGxlbiA9PSAwKSB7
CisgICAgICAgIGx2YWwgPSAwLjBmOworCQlzdHJjcHkoc3RyLCIwLjAiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdHJbbGVuXT0nXDAnOyAgICAgIAorICAgICAgICBsdmFsID0gbEJ1aWxkRmxv
YXRWYWx1ZShzdHIsIHN0cl9sZW4sIGV4cCAtIGRlY2xlbik7CisgICAgfQorICAgIC8vIFN1ZmZp
eDoKKyAgICAKKyAgICB5eWx2YWxwcC0+c2NfZnZhbCA9IGx2YWw7CisgICAgc3RyY3B5KHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSxzdHIpOworICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOyAgICAgICAgICAgIAorICAgIHJldHVybiBD
UFBfRkxPQVRDT05TVEFOVDsKK30gLy8gbEZsb2F0Q29uc3QKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIE5vcm1hbCBTY2FubmVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIAorc3RhdGlj
IGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAg
ICBjaGFyIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKKyAgICBjaGFyIHN0
cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKKyAgICBpbnQgQWxyZWFkeUNvbXBsYWluZWQ7
CisgICAgaW50IGxlbiwgY2gsIGlpLCBpdmFsID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgeXlsdmFscHAtPnNjX2ludCA9IDA7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCQorICAgICAgICB3aGlsZSAo
Y2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xyJykgeworICAgICAgICAgICAgeXls
dmFscHAtPnNjX2ludCA9IDE7CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisJCQorICAgICAg
ICBjcHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAgICAg
IGNwcC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKKyAgICAgICAg
bGVuID0gMDsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICBkZWZhdWx0OgorCQkJcmV0
dXJuIGNoOyAvLyBTaW5nbGUgY2hhcmFjdGVyIHRva2VuCisgICAgICAgIGNhc2UgRU9GOgorICAg
ICAgICAgICAgcmV0dXJuIC0xOworCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNl
ICdEJzogY2FzZSAnRSc6CisgICAgICAgIGNhc2UgJ0YnOiBjYXNlICdHJzogY2FzZSAnSCc6IGNh
c2UgJ0knOiBjYXNlICdKJzoKKyAgICAgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzog
Y2FzZSAnTic6IGNhc2UgJ08nOgorICAgICAgICBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1In
OiBjYXNlICdTJzogY2FzZSAnVCc6CisgICAgICAgIGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAn
Vyc6IGNhc2UgJ1gnOiBjYXNlICdZJzoKKyAgICAgICAgY2FzZSAnWic6IGNhc2UgJ18nOgorICAg
ICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6Cisg
ICAgICAgIGNhc2UgJ2YnOiBjYXNlICdnJzogY2FzZSAnaCc6IGNhc2UgJ2knOiBjYXNlICdqJzoK
KyAgICAgICAgY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28n
OgorICAgICAgICBjYXNlICdwJzogY2FzZSAncSc6IGNhc2UgJ3InOiBjYXNlICdzJzogY2FzZSAn
dCc6CisgICAgICAgIGNhc2UgJ3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOiBjYXNl
ICd5JzoKKyAgICAgICAgY2FzZSAneic6ICAgICAgICAgICAgCisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBs
ZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsJCQkJCQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ18n
KTsKKyAgICAgICAgICAgIGlmIChsZW4gPj0gTUFYX1NZTUJPTF9OQU1FX0xFTikKKyAgICAgICAg
ICAgICAgICBsZW4gPSBNQVhfU1lNQk9MX05BTUVfTEVOIC0gMTsKKyAgICAgICAgICAgIHN5bWJv
bF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICByZXR1cm4gQ1BQX0lERU5USUZJRVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnMCc6CisgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0g
Y2g7CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAn
WCcpIHsKKwkJCQl5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8
CisgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAorICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAgICAgICBkbyB7CisJCQkJCQl5eWx2
YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXZhbCA8PSAweDBmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWkgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWkgPSBjaCAtICdBJyArIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnYScgKyAxMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXZhbCA9IChpdmFsIDw8IDQpIHwgaWk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWluZWQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJP
Ul9fX0hFWF9DT05TVF9PVkVSRkxPVyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
cmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAn
MCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0g
J0EnICYmIGNoIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoID49
ICdhJyAmJiBjaCA8PSAnZicpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FUlJPUl9JTl9IRVhfQ09OU1RB
TlQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJCXl5bHZhbHBwLT5zY19pbnQgPSBpdmFs
OworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsgLy8gb2N0YWwgaW50ZWdlciBjb25z
dGFudHMKKyAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAgICAgICAg
ICAgICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAg
ICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpdmFsIDw9IDB4MWZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlpID0g
Y2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBpdmFsID0gKGl2YWwgPDwgMykgfCBp
aTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghQWxyZWFkeUNvbXBsYWluZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiRVJST1JfX19PQ1RfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49
ICcwJyAmJiBjaCA8PSAnNycpOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2gg
PT0gJ2UnIHx8IGNoID09ICdmJyB8fCBjaCA9PSAnaCcgfHwgY2ggPT0gJ3gnfHwgY2ggPT0gJ0Un
KSAKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIGxlbiwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+
c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJeXlsdmFscHAtPnNjX2ludCA9
IGl2YWw7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJY2ggPSAnMCc7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBGYWxsIHRocm91Z2guLi4KKyAgICAgICAgY2FzZSAnMSc6IGNhc2UgJzInOiBj
YXNlICczJzogY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6
IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bGVuID4gMCB8fCBjaCAhPSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdmJyB8fCBjaCA9PSAn
aCcgfHwgY2ggPT0gJ3gnfHwgY2ggPT0gJ0UnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxG
bG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBjaCwgeXlsdmFscHApOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVb
bGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaXZhbCA9IDA7CisgICAgICAg
ICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaWkg
PSAwOyBpaSA8IGxlbjsgaWkrKykgeworICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA+
IDIxNDc0ODM2NCkgfHwgKGl2YWwgPT0gMjE0NzQ4MzY0ICYmIGNoID49IDgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fSU5URUdFUl9DT05TVF9PVkVS
RkxPVyIpOworICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFsKjEw
ICsgY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19p
bnQgPSBpdmFsOworICAgICAgICAgICAgICAgIGlmKGl2YWw9PTApCisgICAgICAgICAgICAgICAg
ICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiMCIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfSU5UQ09OU1RBTlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09
ICctJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfREVDX09QOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1NVQl9B
U1NJR047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIHJldHVybiAnLSc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJysnOgor
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0lOQ19PUDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz0n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BRERfQVNTSUdOOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJysn
OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9NVUxf
QVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJyonOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICclJzoK
KyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9NT0RfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PSAnPicpeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0U7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVy
biAnJSc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJzonOgorICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X1JJR0hUX0JSQUNLRVQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgIHJldHVybiAnOic7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgJ14nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXicpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9YT1JfQVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAnXic7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfRVFfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAg
ICAgICAgICAgICAgIHJldHVybiAnPSc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyEn
OgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX05FX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyEnOworICAgICAgICAgICAgfQor
ICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0g
J3wnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9PUl9PUDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIENQUF9PUl9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgcmV0dXJuICd8JzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyYnOgorICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgIGlmIChjaCA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0FORF9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09
ICc9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BTkRfQVNTSUdOOworICAgICAg
ICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
IHJldHVybiAnJic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBj
YXNlICc8JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJzwnKSB7Cisg
ICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZihjaCA9PSAnPScpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9BU1NJR047CisgICAgICAgICAgICAgICAgZWxz
ZXsKKyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTEVGVF9PUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9MRV9PUDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gJyUnKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZU
X0JSQUNFOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnOicpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0tFVDsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICc8JzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgaWYoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJ
R0hUX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9PUDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAn
PScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9HRV9PUDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICc+JzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgJy4nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgMCwgJy4nLCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFsIEVPRiBoYWNrCisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAnLic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT0gRU9GKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdcbic7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcq
JykgeworICAgICAgICAgICAgICAgIGludCBubGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoICE9
ICcqJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdcbicpIG5sY291bnQr
KzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FT0ZfSU5fQ09NTUVO
VCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID09IEVPRikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IkVSUk9SX19fRU9GX0lOX0NPTU1FTlQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNo
ICE9ICcvJyk7CisgICAgICAgICAgICAgICAgaWYgKG5sY291bnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICdcbic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IEdvIHRyeSBpdCBhZ2Fpbi4uLgorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0RJVl9BU1NJR047CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnLyc7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnIic6CisgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgd2hpbGUgKGNoICE9ICciJyAmJiBjaCAhPSAnXG4nICYm
IGNoICE9IEVPRikgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJUaGUgbGluZSBjb250aW51YXRpb24gY2hh
cmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhlIE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdl
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdfTEVOKSB7CisgICAgICAgICAgICAg
ICAgICAgIHN0cmluZ192YWxbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKzsK
KyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGlmIChj
aCA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X1NUUkNPTlNUQU5UOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiRVJST1JfX19DUFBfRU9MX0lOX1NUUklORyIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBFUlJPUl9TWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30g
Ly8gYnl0ZV9zY2FuCisKK2ludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKK3sg
ICAgCisJeXlzdHlwZXBwIHl5bHZhbHBwOworICAgIGludCB0b2tlbiA9ICdcbic7ICAgCisKKyAg
ICBmb3IoOzspIHsKKworICAgICAgICBjaGFyKiB0b2tlblN0cmluZyA9IDA7CisgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsICZ5eWx2YWxw
cCk7CisJCWlmKGNoZWNrX0VPRih0b2tlbikpCisJCSAgICByZXR1cm4gMDsKKyAgICAgICAgaWYg
KHRva2VuID09ICcjJykgeworICAgICAgICAgICAgaWYgKGNwcC0+cHJldmlvdXNfdG9rZW4gPT0g
J1xuJ3x8IGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gMCkgeworCQkJICAgIHRva2VuID0gcmVhZENQ
UGxpbmUoJnl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJCSAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInByZXByb2Nl
c3NvciBjb21tYW5kIG11c3Qgbm90IGJlIHByZWNlZGVkIGJ5IGFueSBvdGhlciBzdGF0ZW1lbnQg
aW4gdGhhdCBsaW5lIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgY3BwLT5wcmV2aW91c190b2tlbiA9IHRva2VuOworICAgICAg
ICAvLyBleHBhbmQgbWFjcm9zCisgICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAm
JiBNYWNyb0V4cGFuZCh5eWx2YWxwcC5zY19pZGVudCwgJnl5bHZhbHBwKSkgeworICAgICAgICAg
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0b2tlbiA9PSAnXG4nKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVt
ZW50ID0gMTsKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJs
ZSx5eWx2YWxwcC5zY19pZGVudCk7CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0ZM
T0FUQ09OU1RBTlR8fHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7ICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdG9rZW5TdHJpbmcgPSB5eWx2YWxwcC5zeW1ib2xfbmFtZTsKKwkJfSBlbHNlIHsgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0
b2tlbik7CisJICAgIH0KKworICAgICAgICBpZiAodG9rZW5TdHJpbmcpIHsKKyAgICAgICAgICAg
IGlmICgoc2lnbmVkKXN0cmxlbih0b2tlblN0cmluZykgPj0gbWF4U2l6ZSkgeworICAgICAgICAg
ICAgICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWF4U2l6ZTsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSAgaWYgKHN0cmxlbih0
b2tlblN0cmluZykgPiAwKSB7CisJCQkgICAgc3RyY3B5KGJ1ZiwgdG9rZW5TdHJpbmcpOworICAg
ICAgICAgICAgICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKGludClzdHJsZW4odG9rZW5TdHJpbmcpOworICAgICAgICAgICAgfSAgCisKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9IC8v
IHl5bGV4CisKKy8vQ2hlY2tzIGlmIHRoZSB0b2tlbiBqdXN0IHJlYWQgaXMgRU9GIG9yIG5vdC4K
K2ludCBjaGVja19FT0YoaW50IHRva2VuKQoreworICAgaWYodG9rZW49PS0xKXsKKyAgICAgICBp
ZihjcHAtPmlmZGVwdGggPjApeworCQlDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc3Npbmch
ISBDb21waWxhdGlvbiBzdG9wcGVkIik7CisgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Cisg
ICAgICAgfQorICAgICAgcmV0dXJuIDE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBFbmQgb2Ygc2Nhbm5lci5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgor
CitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8vCisvLyBzY2FubmVyLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1NDQU5ORVJfSCkK
KyNkZWZpbmUgX19TQ0FOTkVSX0ggMQorCisjZGVmaW5lIE1BWF9TWU1CT0xfTkFNRV9MRU4gMTI4
CisjZGVmaW5lIE1BWF9TVFJJTkdfTEVOIDUxMgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3BhcnNlci5oIgorCisvLyBOb3QgcmVhbGx5IGF0b20gdGFibGUgc3R1ZmYgYnV0IG5l
ZWRlZCBmaXJzdC4uLgorCit0eXBlZGVmIHN0cnVjdCBTb3VyY2VMb2NfUmVjIHsKKyAgICB1bnNp
Z25lZCBzaG9ydCBmaWxlLCBsaW5lOworfSBTb3VyY2VMb2M7CisKK2ludCB5eXBhcnNlICh2b2lk
KTsKKworaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKKwordHlwZWRlZiBz
dHJ1Y3QgSW5wdXRTcmMgeworICAgIHN0cnVjdCBJbnB1dFNyYwkqcHJldjsKKyAgICBpbnQJCQko
KnNjYW4pKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7CisgICAgaW50CQkJKCpnZXRj
aCkoc3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKKyAgICB2b2lkCQkoKnVuZ2V0Y2gp
KHN0cnVjdCBJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKTsKKyAgICBpbnQJCQluYW1lOyAg
LyogYXRvbSAqLworICAgIGludAkJCWxpbmU7Cit9IElucHV0U3JjOworCitpbnQgSW5pdFNjYW5u
ZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAoraW50
IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKik7ICAgICAgLy8gU3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0
IGZyb20gdGhlIHN0cmluZyBtZW50aW9uZWQuCitpbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAg
ICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCit2b2lkIENQUEVycm9yVG9J
bmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRl
cidzLkluZm8ubG9nCit2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKK3ZvaWQgU2V0U3RyaW5nTnVt
YmVyKGludCk7Cit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Cit2b2lkIERlY0xpbmVOdW1iZXIo
dm9pZCk7CitpbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAgICAgICAgICAvLyBGcmVlIHRo
ZSBjcHAgc2Nhbm5lcgorI2VuZGlmIC8vICEoZGVmaW5lZChfX1NDQU5ORVJfSCkKKwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
CisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0
byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVk
aXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFu
Y2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1z
LCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlz
IE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRl
cm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNl
LCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3
YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBh
bmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9k
aWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0
IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFp
biB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9s
bG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMg
b2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNl
cnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBT
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5W
SURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhl
ciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkg
TlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCBy
aWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3Ig
Ynkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29y
cG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJ
QSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU
CitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S
IElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9O
IEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKwor
SU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS
RUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQg
T0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElP
TiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5E
RVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJ
Q1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvLworLy8gc2xnbG9iYWxzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1NMR0xPQkFMU19I
KQorI2RlZmluZSBfX1NMR0xPQkFMU19IIDEKKwordHlwZWRlZiBzdHJ1Y3QgQ1BQU3RydWN0X1Jl
YyBDUFBTdHJ1Y3Q7CisKK2V4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKKworI3VuZGVmICBDUFBDX0RF
QlVHX1RIRV9DT01QSUxFUgorI2lmIGRlZmluZWQoX0RFQlVHKQorI2RlZmluZSBDUFBDX0RFQlVH
X1RIRV9DT01QSUxFUiAxCisjZW5kaWYKKworI3VuZGVmICBDUFBDX0VOQUJMRV9UT09MUworI2Rl
ZmluZSBDUFBDX0VOQUJMRV9UT09MUyAxCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbWVtb3J5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
dG9rZW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIgorI2lmICFkZWZpbmVkKE5P
X1BBUlNFUikKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKE5VTEwpCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNlbmRp
ZiAvLyAhKGRlZmluZWQoX19TTEdMT0JBTFNfSCkKKworCisgICAgCisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjg5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0
d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBz
eW1ib2xzLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Ns
Z2xvYmFscy5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3ltYm9sIFRhYmxlIFZhcmlhYmxlczog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisKK1Njb3BlICpTY29wZUxpc3QgPSBOVUxMOworU2NvcGUgKkN1
cnJlbnRTY29wZSA9IE5VTEw7CitTY29wZSAqR2xvYmFsU2NvcGUgPSBOVUxMOworCitzdGF0aWMg
dm9pZCB1bmxpbmtTY29wZSh2b2lkICpfc2NvcGUpIHsKKyAgICBTY29wZSAqc2NvcGUgPSBfc2Nv
cGU7CisKKyAgICBpZiAoc2NvcGUtPm5leHQpCisgICAgICAgIHNjb3BlLT5uZXh0LT5wcmV2ID0g
c2NvcGUtPnByZXY7CisgICAgaWYgKHNjb3BlLT5wcmV2KQorICAgICAgICBzY29wZS0+cHJldi0+
bmV4dCA9IHNjb3BlLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgU2NvcGVMaXN0ID0gc2NvcGUt
Pm5leHQ7Cit9CisKKy8qCisgKiBOZXdTY29wZSgpCisgKgorICovCitTY29wZSAqTmV3U2NvcGVJ
blBvb2woTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBTY29wZSAqbFNjb3BlOworCisgICAgbFNj
b3BlID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihTY29wZSkpOworICAgIGxTY29wZS0+cG9vbCA9
IHBvb2w7CisgICAgbFNjb3BlLT5wYXJlbnQgPSBOVUxMOworICAgIGxTY29wZS0+ZnVuU2NvcGUg
PSBOVUxMOworICAgIGxTY29wZS0+c3ltYm9scyA9IE5VTEw7CisgICAgCisgICAgbFNjb3BlLT5s
ZXZlbCA9IDA7CisKKyAgICBsU2NvcGUtPnByb2dyYW1zID0gTlVMTDsKKyAgICBpZiAoKGxTY29w
ZS0+bmV4dCA9IFNjb3BlTGlzdCkpCisgICAgICAgIFNjb3BlTGlzdC0+cHJldiA9IGxTY29wZTsK
KyAgICBsU2NvcGUtPnByZXYgPSAwOworICAgIFNjb3BlTGlzdCA9IGxTY29wZTsKKyAgICBtZW1f
QWRkQ2xlYW51cChwb29sLCB1bmxpbmtTY29wZSwgbFNjb3BlKTsKKyAgICByZXR1cm4gbFNjb3Bl
OworfSAvLyBOZXdTY29wZQorCisvKgorICogUHVzaFNjb3BlKCkKKyAqCisgKi8KKwordm9pZCBQ
dXNoU2NvcGUoU2NvcGUgKmZTY29wZSkKK3sKKyAgICBTY29wZSAqbFNjb3BlOworCisgICAgaWYg
KEN1cnJlbnRTY29wZSkgeworICAgICAgICBmU2NvcGUtPmxldmVsID0gQ3VycmVudFNjb3BlLT5s
ZXZlbCArIDE7CisgICAgICAgIGlmIChmU2NvcGUtPmxldmVsID09IDEpIHsKKyAgICAgICAgICAg
IGlmICghR2xvYmFsU2NvcGUpIHsKKyAgICAgICAgICAgICAgICAvKiBIQUNLIC0gQ1REIC0tIGlm
IEdsb2JhbFNjb3BlPT1OVUxMIGFuZCBsZXZlbD09MSwgd2UncmUKKyAgICAgICAgICAgICAgICAg
KiBkZWZpbmluZyBhIGZ1bmN0aW9uIGluIHRoZSBzdXBlcmdsb2JhbCBzY29wZS4gIFRoaW5ncwor
ICAgICAgICAgICAgICAgICAqIHdpbGwgYnJlYWsgaWYgd2UgbGVhdmUgdGhlIGxldmVsIGFzIDEs
IHNvIHdlIGFyYml0cmFyaWx5CisgICAgICAgICAgICAgICAgICogc2V0IGl0IHRvIDIgKi8KKyAg
ICAgICAgICAgICAgICBmU2NvcGUtPmxldmVsID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoZlNjb3BlLT5sZXZlbCA+PSAyKSB7CisgICAgICAgICAgICBsU2NvcGUg
PSBmU2NvcGU7CisgICAgICAgICAgICB3aGlsZSAobFNjb3BlLT5sZXZlbCA+IDIpCisgICAgICAg
ICAgICAgICAgbFNjb3BlID0gbFNjb3BlLT5uZXh0OworICAgICAgICAgICAgZlNjb3BlLT5mdW5T
Y29wZSA9IGxTY29wZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZTY29wZS0+
bGV2ZWwgPSAwOworICAgIH0KKyAgICBmU2NvcGUtPnBhcmVudCA9IEN1cnJlbnRTY29wZTsKKyAg
ICBDdXJyZW50U2NvcGUgPSBmU2NvcGU7Cit9IC8vIFB1c2hTY29wZQorCisvKgorICogUG9wU2Nv
cGUoKQorICoKKyAqLworCitTY29wZSAqUG9wU2NvcGUodm9pZCkKK3sKKyAgICBTY29wZSAqbFNj
b3BlOworCisgICAgbFNjb3BlID0gQ3VycmVudFNjb3BlOworICAgIGlmIChDdXJyZW50U2NvcGUp
CisgICAgICAgIEN1cnJlbnRTY29wZSA9IEN1cnJlbnRTY29wZS0+cGFyZW50OworICAgIHJldHVy
biBsU2NvcGU7Cit9IC8vIFBvcFNjb3BlCisKKy8qCisgKiBOZXdTeW1ib2woKSAtIEFsbG9jYXRl
IGEgbmV3IHN5bWJvbCBub2RlOworICoKKyAqLworCitTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VM
b2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCkKK3sKKyAg
ICBTeW1ib2wgKmxTeW1iOworICAgIGNoYXIgKnBjaDsKKyAgICBpbnQgaWk7CisKKyAgICBsU3lt
YiA9IChTeW1ib2wgKikgbWVtX0FsbG9jKGZTY29wZS0+cG9vbCwgc2l6ZW9mKFN5bWJvbCkpOwor
ICAgIGxTeW1iLT5sZWZ0ID0gTlVMTDsKKyAgICBsU3ltYi0+cmlnaHQgPSBOVUxMOworICAgIGxT
eW1iLT5uZXh0ID0gTlVMTDsKKyAgICBsU3ltYi0+bmFtZSA9IG5hbWU7CisgICAgbFN5bWItPmxv
YyA9ICpsb2M7CisgICAgbFN5bWItPmtpbmQgPSBraW5kOworICAgIAorICAgIC8vIENsZWFyIHVu
aW9uIGFyZWE6CisKKyAgICBwY2ggPSAoY2hhciAqKSAmbFN5bWItPmRldGFpbHM7CisgICAgZm9y
IChpaSA9IDA7IGlpIDwgc2l6ZW9mKGxTeW1iLT5kZXRhaWxzKTsgaWkrKykKKyAgICAgICAgKnBj
aCsrID0gMDsKKyAgICByZXR1cm4gbFN5bWI7Cit9IC8vIE5ld1N5bWJvbAorCisvKgorICogbEFk
ZFRvVHJlZSgpIC0gVXNpbmcgYSBiaW5hcnkgdHJlZSBpcyBub3QgYSBnb29kIGlkZWEgZm9yIGJh
c2ljIGF0b20gdmFsdWVzIGJlY2F1c2UgdGhleQorICogICAgICAgICBhcmUgZ2VuZXJhdGVkIGlu
IG9yZGVyLiAgV2UnbGwgZml4IHRoaXMgbGF0ZXIgKGJ5IHJldmVyc2luZyB0aGUgYml0IHBhdHRl
cm4pLgorICovCisKK3N0YXRpYyB2b2lkIGxBZGRUb1RyZWUoU3ltYm9sICoqZlN5bWJvbHMsIFN5
bWJvbCAqZlN5bWIpCit7CisgICAgU3ltYm9sICpsU3ltYjsKKyAgICBpbnQgbHJldiwgZnJldjsK
KworICAgIGxTeW1iID0gKmZTeW1ib2xzOworICAgIGlmIChsU3ltYikgeworICAgICAgICBmcmV2
ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgZlN5bWItPm5hbWUpOworICAgICAgICB3aGlsZSAo
bFN5bWIpIHsKKyAgICAgICAgICAgIGxyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3lt
Yi0+bmFtZSk7CisgICAgICAgICAgICBpZiAobHJldiA9PSBmcmV2KSB7CisgICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIkdldEF0b21TdHJpbmcoYXRhYmxlLCBmU3ltYi0+bmFtZSki
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGxyZXYgPiBmcmV2KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsU3lt
Yi0+bGVmdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+bGVmdDsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxT
eW1iLT5sZWZ0ID0gZlN5bWI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChsU3ltYi0+cmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1i
ID0gbFN5bWItPnJpZ2h0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbFN5bWItPnJpZ2h0ID0gZlN5bWI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICpmU3ltYm9scyA9
IGZTeW1iOworICAgIH0KK30gLy8gbEFkZFRvVHJlZQorCisKKy8qCisgKiBBZGRTeW1ib2woKSAt
IEFkZCBhIHZhcmlhYmxlLCB0eXBlLCBvciBmdW5jdGlvbiBuYW1lIHRvIGEgc2NvcGUuCisgKgor
ICovCisKK1N5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBp
bnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisKKyAgICBp
ZiAoIWZTY29wZSkKKyAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOworICAgIGxTeW1iID0g
TmV3U3ltYm9sKGxvYywgZlNjb3BlLCBhdG9tLCBraW5kKTsKKyAgICBsQWRkVG9UcmVlKCZmU2Nv
cGUtPnN5bWJvbHMsIGxTeW1iKTsKKyAgICByZXR1cm4gbFN5bWI7Cit9IC8vIEFkZFN5bWJvbAor
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqIFN5bWJvbCBTZW1hbnRpYyBGdW5jdGlvbnMgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKworLyoKKyAqIExvb2tVcExvY2FsU3ltYm9sKCkKKyAqCisgKi8KKworU3ltYm9s
ICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKK3sKKyAgICBTeW1i
b2wgKmxTeW1iOworICAgIGludCBybmFtZSwgcmF0b207CisKKyAgICByYXRvbSA9IEdldFJldmVy
c2VkQXRvbShhdGFibGUsIGF0b20pOworICAgIGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUg
PSBDdXJyZW50U2NvcGU7CisgICAgbFN5bWIgPSBmU2NvcGUtPnN5bWJvbHM7CisgICAgd2hpbGUg
KGxTeW1iKSB7CisgICAgICAgIHJuYW1lID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgbFN5bWIt
Pm5hbWUpOworICAgICAgICBpZiAocm5hbWUgPT0gcmF0b20pIHsKKyAgICAgICAgICAgIHJldHVy
biBsU3ltYjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChybmFtZSA+IHJhdG9t
KSB7CisgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+bGVmdDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9IC8vIExvb2tVcExvY2Fs
U3ltYm9sCisKKy8qCisgKiBMb29rVXBTeW1ib2woKQorICoKKyAqLworCitTeW1ib2wgKkxvb2tV
cFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKK3sKKyAgICBTeW1ib2wgKmxTeW1iOwor
CisgICAgaWYgKCFmU2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICB3
aGlsZSAoZlNjb3BlKSB7CisgICAgICAgIGxTeW1iID0gTG9va1VwTG9jYWxTeW1ib2woZlNjb3Bl
LCBhdG9tKTsKKyAgICAgICAgaWYgKGxTeW1iKQorICAgICAgICAgICAgcmV0dXJuIGxTeW1iOwor
ICAgICAgICBmU2NvcGUgPSBmU2NvcGUtPnBhcmVudDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7
Cit9IC8vIExvb2tVcFN5bWJvbAorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAy
MDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikg
c3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0
aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdh
cmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90
IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFs
LCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRo
aXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8g
dXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3
YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5h
cnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBT
b2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEs
IHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBh
bGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIg
dGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQor
Q29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVk
IGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3Ig
aW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QK
K2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlv
dXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJ
QSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQg
aGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBB
TiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VN
RU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBP
UgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBX
SVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJM
RSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQ
Uk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1Ig
QVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklD
QVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZF
UiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJ
RgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gc3ltYm9scy5oCisvLworCisjaWYg
IWRlZmluZWQoX19TWU1CT0xTX0gpCisjZGVmaW5lIF9fU1lNQk9MU19IIDEKKworI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKKwordHlwZWRlZiBlbnVtIHN5bWJvbGtp
bmQgeworICAgTUFDUk9fUworfSBzeW1ib2xraW5kOworCisvLyBUeXBlZGVmcyBmb3IgdGhpbmdz
IGRlZmluZWQgaGVyZSBpbiAic3ltYm9scy5oIjoKKwordHlwZWRlZiBzdHJ1Y3QgU2NvcGVfUmVj
IFNjb3BlOwordHlwZWRlZiBzdHJ1Y3QgU3ltYm9sX1JlYyBTeW1ib2w7CisKK3R5cGVkZWYgc3Ry
dWN0IFN5bWJvbExpc3RfUmVjIHsKKyAgICBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgKm5leHQ7Cisg
ICAgU3ltYm9sICpzeW1iOworfSBTeW1ib2xMaXN0OworCitzdHJ1Y3QgU2NvcGVfUmVjIHsKKyAg
ICBTY29wZSAqbmV4dCwgKnByZXY7ICAgICAvLyBkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIHNj
b3BlcworICAgIFNjb3BlICpwYXJlbnQ7CisgICAgU2NvcGUgKmZ1blNjb3BlOyAgICAgICAgLy8g
UG9pbnRzIHRvIGJhc2Ugc2NvcGUgb2YgZW5jbG9zaW5nIGZ1bmN0aW9uCisgICAgTWVtb3J5UG9v
bCAqcG9vbDsgICAgICAgLy8gcG9vbCB1c2VkIGZvciBhbGxvY2F0aW9uIGluIHRoaXMgc2NvcGUK
KyAgICBTeW1ib2wgKnN5bWJvbHM7CisgICAgCisJaW50IGxldmVsOyAgICAgICAgICAgICAgLy8g
MCA9IHN1cGVyIGdsb2JhbHMsIDEgPSBnbG9iYWxzLCBldGMuCisKKyAgICAvLyBPbmx5IHVzZWQg
YXQgZ2xvYmFsIHNjb3BlIChsZXZlbCAxKToKKyAgICBTeW1ib2xMaXN0ICpwcm9ncmFtczsgICAv
LyBMaXN0IG9mIHByb2dyYW1zIGZvciB0aGlzIGNvbXBpbGF0aW9uLgorfTsKKworCisvLyBTeW1i
b2wgdGFibGUgaXMgYSBzaW1wbGUgYmluYXJ5IHRyZWUuCisKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgiICAgICAgICAvLyB0byBnZXQgTWFjcm9TeW1ib2wgZGVmCisKK3N0
cnVjdCBTeW1ib2xfUmVjIHsKKyAgICBTeW1ib2wgKmxlZnQsICpyaWdodDsKKyAgICBTeW1ib2wg
Km5leHQ7CisgICAgaW50IG5hbWU7ICAgICAgIC8vIE5hbWUgYXRvbQorICAgIFNvdXJjZUxvYyBs
b2M7CisgICAgc3ltYm9sa2luZCBraW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgTWFjcm9TeW1i
b2wgbWFjOworICAgIH0gZGV0YWlsczsKK307CisKK2V4dGVybiBTY29wZSAqQ3VycmVudFNjb3Bl
OworZXh0ZXJuIFNjb3BlICpHbG9iYWxTY29wZTsKK2V4dGVybiBTY29wZSAqU2NvcGVMaXN0Owor
CitTY29wZSAqTmV3U2NvcGVJblBvb2woTWVtb3J5UG9vbCAqKTsKKyNkZWZpbmUgTmV3U2NvcGUo
KSAgICAgIE5ld1Njb3BlSW5Qb29sKEN1cnJlbnRTY29wZS0+cG9vbCkKK3ZvaWQgUHVzaFNjb3Bl
KFNjb3BlICpmU2NvcGUpOworU2NvcGUgKlBvcFNjb3BlKHZvaWQpOworU3ltYm9sICpOZXdTeW1i
b2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtp
bmQpOworU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGlu
dCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpOworU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29w
ZSAqZlNjb3BlLCBpbnQgYXRvbSk7CitTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3Bl
LCBpbnQgYXRvbSk7Cit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7CisKKworI2VuZGlm
IC8vICFkZWZpbmVkKF9fU1lNQk9MU19IKQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0NCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChj
KSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElB
Iikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFs
bGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29m
dHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8g
bm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwg
bW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNv
bmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGlu
IHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwg
dG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNv
ZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBi
aW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJ
QSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklE
SUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBp
biBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRo
ZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJ
QQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3Rh
dGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mg
b3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBu
b3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5
IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5W
SURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5z
ZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBP
TiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBM
SU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklO
R0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElP
TiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJ
QUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9T
VCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
T1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJ
RklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9X
RVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZF
TiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gdG9rZW5zLmMKKy8vCisKKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVw
cm9jZXNzb3IgYW5kIFRva2VuIFJlY29yZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKgor
ICogaWRzdHIoKQorICogQ29weSBhIHN0cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29u
dmVydCBpdCBpbnRvIHNvbWV0aGluZyBzdWl0YWJsZQorICogZm9yIGFuIElECisgKgorICovCisK
K3N0YXRpYyBjaGFyICppZHN0cihjb25zdCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQor
eworICAgIHNpemVfdCBsZW47CisgICAgY2hhciAqc3RyLCAqdDsKKyAgICBjb25zdCBjaGFyICpm
OworCisgICAgbGVuID0gc3RybGVuKGZzdHIpOworICAgIGlmICghcG9vbCkKKyAgICAgICAgc3Ry
ID0gKGNoYXIgKikgbWFsbG9jKGxlbiArIDEpOworICAgIGVsc2UKKyAgICAgICAgc3RyID0gKGNo
YXIgKikgbWVtX0FsbG9jKHBvb2wsIGxlbiArIDEpOworICAgIAorICAgIGZvciAoZj1mc3RyLCB0
PXN0cjsgKmY7IGYrKykgeworICAgICAgICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKKyAg
ICAgICAgZWxzZSBpZiAoKmYgPT0gJy4nIHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKKyAgICB9
CisgICAgKnQgPSAwOworICAgIHJldHVybiBzdHI7Cit9IC8vIGlkc3RyCisKKworLyoKKyAqIGxO
ZXdCbG9jaygpCisgKgorICovCisKK3N0YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5T
dHJlYW0gKmZUb2ssIE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgVG9rZW5CbG9jayAqbEJsb2Nr
OworCisgICAgaWYgKCFwb29sKQorICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxs
b2Moc2l6ZW9mKFRva2VuQmxvY2spICsgMjU2KTsKKyAgICBlbHNlCisgICAgICAgIGxCbG9jayA9
IChUb2tlbkJsb2NrICopIG1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYp
OworICAgIGxCbG9jay0+Y291bnQgPSAwOworICAgIGxCbG9jay0+Y3VycmVudCA9IDA7CisgICAg
bEJsb2NrLT5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxv
Y2spOworICAgIGxCbG9jay0+bWF4ID0gMjU2OworICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7Cisg
ICAgaWYgKGZUb2stPmhlYWQpIHsKKyAgICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9j
azsKKyAgICB9IGVsc2UgeworICAgICAgICBmVG9rLT5oZWFkID0gbEJsb2NrOworICAgIH0KKyAg
ICBmVG9rLT5jdXJyZW50ID0gbEJsb2NrOworICAgIHJldHVybiBsQmxvY2s7Cit9IC8vIGxOZXdC
bG9jaworCisvKgorICogbEFkZEJ5dGUoKQorICoKKyAqLworCitzdGF0aWMgdm9pZCBsQWRkQnl0
ZShUb2tlblN0cmVhbSAqZlRvaywgdW5zaWduZWQgY2hhciBmVmFsKQoreworICAgIFRva2VuQmxv
Y2sgKmxCbG9jazsKKyAgICBsQmxvY2sgPSBmVG9rLT5jdXJyZW50OworICAgIGlmIChsQmxvY2st
PmNvdW50ID49IGxCbG9jay0+bWF4KQorICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywg
MCk7CisgICAgbEJsb2NrLT5kYXRhW2xCbG9jay0+Y291bnQrK10gPSBmVmFsOworfSAvLyBsQWRk
Qnl0ZQorCisKKworLyoKKyAqIGxSZWFkQnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBh
IHN0cmVhbS4KKyAqCisgKi8KKworc3RhdGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBU
b2spCit7CisgICAgVG9rZW5CbG9jayAqbEJsb2NrOworICAgIGludCBsdmFsID0gLTE7CisKKyAg
ICBsQmxvY2sgPSBwVG9rLT5jdXJyZW50OworICAgIGlmIChsQmxvY2spIHsKKyAgICAgICAgaWYg
KGxCbG9jay0+Y3VycmVudCA+PSBsQmxvY2stPmNvdW50KSB7CisgICAgICAgICAgICBsQmxvY2sg
PSBsQmxvY2stPm5leHQ7CisgICAgICAgICAgICBpZiAobEJsb2NrKQorICAgICAgICAgICAgICAg
IGxCbG9jay0+Y3VycmVudCA9IDA7CisgICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2Nr
OworICAgICAgICB9CisgICAgICAgIGlmIChsQmxvY2spCisgICAgICAgICAgICBsdmFsID0gbEJs
b2NrLT5kYXRhW2xCbG9jay0+Y3VycmVudCsrXTsKKyAgICB9CisgICAgcmV0dXJuIGx2YWw7Cit9
IC8vIGxSZWFkQnl0ZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8g
R2xvYmFsIEZ1bmN0aW9uczovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CisvKgorICogTmV3VG9rZW5TdHJlYW0oKQorICoKKyAqLworCitUb2tlblN0cmVhbSAqTmV3VG9r
ZW5TdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBUb2tl
blN0cmVhbSAqcFRvazsKKworICAgIGlmICghcG9vbCkKKyAgICAgICAgcFRvayA9IChUb2tlblN0
cmVhbSAqKSBtYWxsb2Moc2l6ZW9mKFRva2VuU3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICBw
VG9rID0gKFRva2VuU3RyZWFtKiltZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7
CisgICAgcFRvay0+bmV4dCA9IE5VTEw7CisgICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBv
b2wpOworICAgIHBUb2stPmhlYWQgPSBOVUxMOworICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOwor
ICAgIGxOZXdCbG9jayhwVG9rLCBwb29sKTsKKyAgICByZXR1cm4gcFRvazsKK30gLy8gTmV3VG9r
ZW5TdHJlYW0KKworLyoKKyAqIERlbGV0ZVRva2VuU3RyZWFtKCkKKyAqCisgKi8KKwordm9pZCBE
ZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaykKK3sKKyAgICBUb2tlbkJsb2NrICpw
QmxvY2ssICpuQmxvY2s7CisKKyAgICBpZiAocFRvaykgeworICAgICAgICBwQmxvY2sgPSBwVG9r
LT5oZWFkOworICAgICAgICB3aGlsZSAocEJsb2NrKSB7CisgICAgICAgICAgICBuQmxvY2sgPSBw
QmxvY2stPm5leHQ7CisgICAgICAgICAgICBmcmVlKHBCbG9jayk7CisgICAgICAgICAgICBwQmxv
Y2sgPSBuQmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBUb2stPm5hbWUpCisgICAgICAg
ICAgICBmcmVlKHBUb2stPm5hbWUpOworICAgICAgICBmcmVlKHBUb2spOworICAgIH0KK30gLy8g
RGVsZXRlVG9rZW5TdHJlYW0KKworLyoKKyAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0
byB0aGUgZW5kIG9mIGEgbGlzdCBmb3IgbGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCisgKgor
ICovCisKK3ZvaWQgUmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlz
dHlwZXBwICogeXlsdmFscHApCit7CisgICAgY29uc3QgY2hhciAqczsKKyAgICB1bnNpZ25lZCBj
aGFyICpzdHI9TlVMTDsKKworICAgIGlmICh0b2tlbiA+IDI1NikKKyAgICAgICAgbEFkZEJ5dGUo
cFRvaywgKHVuc2lnbmVkIGNoYXIpKCh0b2tlbiAmIDB4N2YpICsgMHg4MCkpOworICAgIGVsc2UK
KyAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICBjYXNlIENQUF9JREVOVElGSUVSOgorICAgIGNhc2Ug
Q1BQX1RZUEVJREVOVElGSUVSOgorICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAgICAgICBz
ID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCk7CisgICAgICAgIHdo
aWxlICgqcykKKyAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysr
KTsKKyAgICAgICAgbEFkZEJ5dGUocFRvaywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q1BQX0ZMT0FUQ09OU1RBTlQ6CisgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAgICAgICBz
dHI9eXlsdmFscHAtPnN5bWJvbF9uYW1lOworICAgICAgICAgd2hpbGUgKCpzdHIpeworICAgICAg
ICAgICAgbEFkZEJ5dGUocFRvaywodW5zaWduZWQgY2hhcikgKnN0cik7CisgICAgICAgICAgICAq
c3RyKys7CisgICAgICAgICB9CisgICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKKyAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgJygnOgorICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQg
Y2hhcikoeXlsdmFscHAtPnNjX2ludCA/IDEgOiAwKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfSAvLyBSZWNvcmRUb2tlbgorCisvKgorICogUmV3aW5kVG9rZW5TdHJl
YW0oKSAtIFJlc2V0IGEgdG9rZW4gc3RyZWFtIGluIHByZXBlcmF0aW9uIGZvciByZWFkaW5nLgor
ICoKKyAqLworCit2b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQorewor
ICAgIGlmIChwVG9rLT5oZWFkKSB7CisgICAgICAgIHBUb2stPmN1cnJlbnQgPSBwVG9rLT5oZWFk
OworICAgICAgICBwVG9rLT5jdXJyZW50LT5jdXJyZW50ID0gMDsKKyAgICB9Cit9IC8vIFJld2lu
ZFRva2VuU3RyZWFtCisKKy8qCisgKiBSZWFkVG9rZW4oKSAtIFJlYWQgdGhlIG5leHQgdG9rZW4g
ZnJvbSBhIHN0cmVhbS4KKyAqCisgKi8KKworaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRv
aywgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lN
Qk9MX05BTUVfTEVOICsgMV07CisgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsg
MV07CisgICAgaW50IGx0b2tlbiwgbGVuOworICAgIGNoYXIgY2g7CisKKyAgICBsdG9rZW4gPSBs
UmVhZEJ5dGUocFRvayk7CisgICAgaWYgKGx0b2tlbiA+PSAwKSB7CisgICAgICAgIGlmIChsdG9r
ZW4gPiAxMjcpCisgICAgICAgICAgICBsdG9rZW4gKz0gMTI4OworICAgICAgICBzd2l0Y2ggKGx0
b2tlbikgeworICAgICAgICBjYXNlIENQUF9JREVOVElGSUVSOgorICAgICAgICBjYXNlIENQUF9U
WVBFSURFTlRJRklFUjoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6
JykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAg
ICAgICAgICAgICAgICBjaCA9PSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3lt
Ym9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAg
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisgICAgICAg
ICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQg
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICByZXR1
cm4gQ1BQX0lERU5USUZJRVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBf
U1RSQ09OU1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgd2hpbGUgKChj
aCA9IGxSZWFkQnl0ZShwVG9rKSkgIT0gMCkKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFY
X1NUUklOR19MRU4pCisgICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWxbbGVuKytdID0gY2g7
CisgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSAwOworICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICAgICAgICAg
IGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAg
IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyl8fChjaD09J2UnfHxjaD09J0UnfHxjaD09
Jy4nKXx8KGNoPT0nKyd8fGNoPT0nLScpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5
bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAg
ICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAg
ICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOworICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfZnZhbD0o
ZmxvYXQpYXRvZih5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAg
ICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAn
MCcgJiYgY2ggPD0gJzknKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobGVu
IDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFt
ZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAg
ICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFz
c2VydChjaCA9PSAnXDAnKTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUsc3ltYm9sX25hbWUpOworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnKCc6
CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGx0b2tlbjsKKyAgICB9Cisg
ICAgcmV0dXJuIEVPRl9TWTsKK30gLy8gUmVhZFRva2VuCisKK3R5cGVkZWYgc3RydWN0IFRva2Vu
SW5wdXRTcmMgeworICAgIElucHV0U3JjICAgICAgICAgICAgYmFzZTsKKyAgICBUb2tlblN0cmVh
bSAgICAgICAgICp0b2tlbnM7CisgICAgaW50ICAgICAgICAgICAgICAgICAoKmZpbmFsKShDUFBT
dHJ1Y3QgKik7Cit9IFRva2VuSW5wdXRTcmM7CisKK3N0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tl
bklucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0g
UmVhZFRva2VuKGluLT50b2tlbnMsIHl5bHZhbHBwKTsKKyAgICBpbnQgKCpmaW5hbCkoQ1BQU3Ry
dWN0ICopOworICAgIGNwcC0+dG9rZW5Mb2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFt
ZTsKKyAgICBjcHAtPnRva2VuTG9jLT5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Cisg
ICAgaWYgKHRva2VuID09ICdcbicpIHsKKyAgICAgICAgaW4tPmJhc2UubGluZSsrOworICAgICAg
ICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsK
KyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7CisgICAgZmluYWwgPSBpbi0+
ZmluYWw7CisgICAgZnJlZShpbik7CisgICAgaWYgKGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1
cm4gLTE7CisgICAgcmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Cit9CisKK2ludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFt
ICp0cywgaW50IG5hbWUsIGludCAoKmZpbmFsKShDUFBTdHJ1Y3QgKikpCit7CisgICAgVG9rZW5J
bnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKKyAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZihUb2tlbklucHV0U3JjKSk7CisgICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7
CisgICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIGluLT5iYXNlLnNj
YW4gPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc2Nhbl90b2tlbjsKKyAgICBp
bi0+YmFzZS5saW5lID0gMTsKKyAgICBpbi0+dG9rZW5zID0gdHM7CisgICAgaW4tPmZpbmFsID0g
ZmluYWw7CisgICAgUmV3aW5kVG9rZW5TdHJlYW0odHMpOworICAgIGNwcC0+Y3VycmVudElucHV0
ID0gJmluLT5iYXNlOworICAgIHJldHVybiAxOworfQorCit0eXBlZGVmIHN0cnVjdCBVbmdvdFRv
a2VuIHsKKyAgICBJbnB1dFNyYyAgICBiYXNlOworICAgIGludCAgICAgICAgIHRva2VuOworICAg
IHl5c3R5cGVwcCAgICAgbHZhbDsKK30gVW5nb3RUb2tlbjsKKworc3RhdGljIGludCByZWdldF90
b2tlbihVbmdvdFRva2VuICp0LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9r
ZW4gPSB0LT50b2tlbjsKKyAgICAqeXlsdmFscHAgPSB0LT5sdmFsOworICAgIGNwcC0+Y3VycmVu
dElucHV0ID0gdC0+YmFzZS5wcmV2OworICAgIGZyZWUodCk7CisgICAgcmV0dXJuIHRva2VuOwor
fQorCit2b2lkIFVuZ2V0VG9rZW4oaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewor
ICAgIFVuZ290VG9rZW4gKnQgPSBtYWxsb2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsKKyAgICBtZW1z
ZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9rZW4pKTsKKyAgICB0LT50b2tlbiA9IHRva2VuOworICAg
IHQtPmx2YWwgPSAqeXlsdmFscHA7CisgICAgdC0+YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90
b2tlbjsKKyAgICB0LT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICB0LT5iYXNl
Lm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICB0LT5iYXNlLmxpbmUgPSBjcHAt
PmN1cnJlbnRJbnB1dC0+bGluZTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOwor
fQorCisKK3ZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlz
dHlwZXBwICogeXlsdmFscHApIHsKKyAgICBpbnQgdG9rZW47CisgICAgY2hhciBzdHJbMTAwXTsK
KworICAgIGlmIChmcCA9PSAwKSBmcCA9IHN0ZG91dDsKKyAgICBSZXdpbmRUb2tlblN0cmVhbShz
KTsKKyAgICB3aGlsZSAoKHRva2VuID0gUmVhZFRva2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7Cisg
ICAgICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKKyAg
ICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgICAgICAgICBzcHJpbnRmKHN0ciwg
IiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgICAg
IHNwcmludGYoc3RyLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5z
Y19pZGVudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09O
U1RBTlQ6CisgICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgorICAg
ICAgICAgICAgLy9wcmludGYoIiVkICIsIHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQor
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IHRva2VuKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIs
ICIlYyIsIHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVu
ZCBvZiB0b2tlbnMuYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyB0b2tlbnMuaAor
Ly8KKworI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCisjZGVmaW5lIF9fVE9LRU5TX0ggMQorCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgorCisjZGVmaW5lIEVPRl9T
WSAoLTEpCisKK3R5cGVkZWYgc3RydWN0IFRva2VuQmxvY2tfUmVjIFRva2VuQmxvY2s7CisKK3R5
cGVkZWYgc3RydWN0IFRva2VuU3RyZWFtX1JlYyB7CisgICAgc3RydWN0IFRva2VuU3RyZWFtX1Jl
YyAqbmV4dDsKKyAgICBjaGFyICpuYW1lOworICAgIFRva2VuQmxvY2sgKmhlYWQ7CisgICAgVG9r
ZW5CbG9jayAqY3VycmVudDsKK30gVG9rZW5TdHJlYW07CisKK3N0cnVjdCBUb2tlbkJsb2NrX1Jl
YyB7CisgICAgVG9rZW5CbG9jayAqbmV4dDsKKyAgICBpbnQgY3VycmVudDsKKyAgICBpbnQgY291
bnQ7CisgICAgaW50IG1heDsKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworfTsKKworZXh0ZXJu
IFRva2VuU3RyZWFtIHN0ZGxpYl9jcHBfc3RyZWFtOworCisKK1Rva2VuU3RyZWFtICpOZXdUb2tl
blN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQb29sICpwb29sKTsKK3ZvaWQgRGVsZXRl
VG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOyAKK3ZvaWQgUmVjb3JkVG9rZW4oVG9rZW5T
dHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApOwordm9pZCBSZXdp
bmRUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7CitpbnQgUmVhZFRva2VuKFRva2VuU3Ry
ZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQgUmVhZEZyb21Ub2tlblN0cmVh
bShUb2tlblN0cmVhbSAqcFRvaywgaW50IG5hbWUsIGludCAoKmZpbmFsKShDUFBTdHJ1Y3QgKikp
Owordm9pZCBVbmdldFRva2VuKGludCwgeXlzdHlwZXBwICogeXlsdmFscHApOworCisjaWYgZGVm
aW5lZChDUFBDX0VOQUJMRV9UT09MUykKKwordm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqLCBU
b2tlblN0cmVhbSAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNlbmRpZiAvLyBkZWZpbmVk
KENQUENfRU5BQkxFX1RPT0xTKQorCisjZW5kaWYgLy8gIWRlZmluZWQoX19UT0tFTlNfSCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdG9vbHMvQ09QWUlO
Ry5iaXNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2Nv
bXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24JKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0K
KwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorDQorIENvcHlyaWdodCAoQykgMTk4OSwg
MTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBDQorIEV2ZXJ5b25l
IGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcw0KKyBv
ZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4N
CisNCisJCQkgICAgUHJlYW1ibGUNCisNCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2Fy
ZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXINCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBj
aGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KK0xpY2Vuc2Ug
aXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdl
IGZyZWUNCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBh
bGwgaXRzIHVzZXJzLiAgVGhpcw0KK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBt
b3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlDQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBh
bnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bw0KK3VzaW5nIGl0LiAgKFNv
bWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkN
Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBj
YW4gYXBwbHkgaXQgdG8NCit5b3VyIHByb2dyYW1zLCB0b28uDQorDQorICBXaGVuIHdlIHNwZWFr
IG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90DQorcHJp
Y2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHlvdQ0KK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJl
ZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3INCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0
aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQNCitpZiB5b3Ugd2FudCBp
dCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdA0K
K2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNl
IHRoaW5ncy4NCisNCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSBy
ZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQNCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRz
IG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuDQorVGhlc2UgcmVzdHJpY3Rp
b25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UN
CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQu
DQorDQorICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBw
cm9ncmFtLCB3aGV0aGVyDQorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUg
cmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0DQoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtl
IHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUNCitzb3VyY2UgY29k
ZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWly
DQorcmlnaHRzLg0KKw0KKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczog
KDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZA0KKygyKSBvZmZlciB5b3UgdGhpcyBsaWNl
bnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksDQorZGlzdHJpYnV0
ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4NCisNCisgIEFsc28sIGZvciBlYWNoIGF1dGhv
cidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluDQordGhhdCBl
dmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZy
ZWUNCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVs
c2UgYW5kIHBhc3NlZCBvbiwgd2UNCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3
aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbw0KK3RoYXQgYW55IHByb2JsZW1z
IGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsDQor
YXV0aG9ycycgcmVwdXRhdGlvbnMuDQorDQorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlz
IHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQ0KK3BhdGVudHMuICBXZSB3aXNoIHRv
IGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUNCitwcm9ncmFt
IHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtp
bmcgdGhlDQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBt
YWRlIGl0IGNsZWFyIHRoYXQgYW55DQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5
b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4NCisNCisgIFRoZSBwcmVjaXNl
IHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kDQorbW9k
aWZpY2F0aW9uIGZvbGxvdy4NCisMDQorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UN
CisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBN
T0RJRklDQVRJT04NCisNCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFt
IG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMNCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNv
cHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZA0KK3VuZGVyIHRoZSB0
ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxv
dywNCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNl
ZCBvbiB0aGUgUHJvZ3JhbSINCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2
YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Og0KK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsg
Y29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsDQorZWl0aGVyIHZlcmJh
dGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIN
CitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91
dCBsaW1pdGF0aW9uIGluDQordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNl
ZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuDQorDQorQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlp
bmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QNCitjb3ZlcmVkIGJ5IHRo
aXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mDQorcnVu
bmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0
aGUgUHJvZ3JhbQ0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBh
IHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4g
bWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4NCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBl
bmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4NCisNCisgIDEuIFlvdSBtYXkgY29weSBhbmQg
ZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncw0KK3NvdXJjZSBjb2Rl
IGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQ0KK2Nv
bnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBw
cm9wcmlhdGUNCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBr
ZWVwIGludGFjdCBhbGwgdGhlDQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBh
bmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5Ow0KK2FuZCBnaXZlIGFueSBvdGhlciBy
ZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UNCithbG9uZyB3
aXRoIHRoZSBQcm9ncmFtLg0KKw0KK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2lj
YWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZA0KK3lvdSBtYXkgYXQgeW91ciBvcHRp
b24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuDQorDQor
ICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9y
IGFueSBwb3J0aW9uDQorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFBy
b2dyYW0sIGFuZCBjb3B5IGFuZA0KK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdv
cmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQ0KK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlv
dSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6DQorDQorICAgIGEpIFlvdSBtdXN0
IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcw0KKyAg
ICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkg
Y2hhbmdlLg0KKw0KKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0
cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4NCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlu
cyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55DQorICAgIHBhcnQgdGhlcmVv
ZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkDQor
ICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCisNCisgICAgYykg
SWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3Rp
dmVseQ0KKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5u
aW5nIGZvciBzdWNoDQorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3
YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4NCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBh
biBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhDQorICAgIG5vdGljZSB0aGF0IHRo
ZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQ0KKyAg
ICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFt
IHVuZGVyDQorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0
byB2aWV3IGEgY29weSBvZiB0aGlzDQorICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUg
UHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0DQorICAgIGRvZXMgbm90IG5vcm1hbGx5
IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24NCisgICAgdGhl
IFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pDQorDA0K
K1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xl
LiAgSWYNCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZl
ZCBmcm9tIHRoZSBQcm9ncmFtLA0KK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGlu
ZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbg0KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBM
aWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UNCitzZWN0aW9ucyB3
aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UN
CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBp
cyBhIHdvcmsgYmFzZWQNCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUg
d2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YNCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1p
c3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQ0KK2VudGlyZSB3aG9sZSwg
YW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBp
dC4NCisNCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xh
aW0gcmlnaHRzIG9yIGNvbnRlc3QNCit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJl
bHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8NCitleGVyY2lzZSB0aGUgcmlnaHQg
dG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3INCitjb2xsZWN0aXZl
IHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLg0KKw0KK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3Jl
Z2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0NCit3aXRoIHRo
ZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1
bWUgb2YNCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0
aGUgb3RoZXIgd29yayB1bmRlcg0KK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuDQorDQorICAz
LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNl
ZCBvbiBpdCwNCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUg
Zm9ybSB1bmRlciB0aGUgdGVybXMgb2YNCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVk
IHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6DQorDQorICAgIGEpIEFjY29t
cGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUN
CisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRl
cm1zIG9mIFNlY3Rpb25zDQorICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJp
bHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0KKw0KKyAgICBiKSBBY2NvbXBh
bnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQ0KKyAg
ICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRo
YW4geW91cg0KKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJp
YnV0aW9uLCBhIGNvbXBsZXRlDQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29y
cmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0NCisgICAgY3VzdG9t
YXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0KKw0KKyAgICBjKSBBY2Nv
bXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZl
cg0KKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBh
bHRlcm5hdGl2ZSBpcw0KKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJp
YnV0aW9uIGFuZCBvbmx5IGlmIHlvdQ0KKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmpl
Y3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoDQorICAgIGFuIG9mZmVyLCBpbiBh
Y2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQ0KKw0KK1RoZSBzb3VyY2UgY29kZSBmb3Ig
YSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3INCittYWtpbmcg
bW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNv
dXJjZQ0KK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQg
Y29udGFpbnMsIHBsdXMgYW55DQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxl
cywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvDQorY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5z
dGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQ0KK3NwZWNpYWwgZXhj
ZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQ0KK2Fu
eXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3Ig
YmluYXJ5DQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5l
bCwgYW5kIHNvIG9uKSBvZiB0aGUNCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVj
dXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudA0KK2l0c2VsZiBhY2NvbXBhbmllcyB0
aGUgZXhlY3V0YWJsZS4NCisNCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmpl
Y3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nDQorYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2ln
bmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudA0KK2FjY2VzcyB0byBjb3B5IHRo
ZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcw0KK2Rpc3RyaWJ1dGlv
biBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdA0K
K2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUu
DQorDA0KKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0
cmlidXRlIHRoZSBQcm9ncmFtDQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0
aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdA0KK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1
YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcw0KK3ZvaWQsIGFuZCB3aWxsIGF1
dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4NCitI
b3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9t
IHlvdSB1bmRlcg0KK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRl
cm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoDQorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlh
bmNlLg0KKw0KKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5z
ZSwgc2luY2UgeW91IGhhdmUgbm90DQorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNl
IGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3INCitkaXN0cmlidXRlIHRoZSBQcm9n
cmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUNCitwcm9oaWJp
dGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUs
IGJ5DQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsg
YmFzZWQgb24gdGhlDQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2Yg
dGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQNCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25z
IGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nDQordGhlIFByb2dyYW0gb3Ig
d29ya3MgYmFzZWQgb24gaXQuDQorDQorICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSksIHRoZSByZWNp
cGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUNCitvcmlnaW5h
bCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJq
ZWN0IHRvDQordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2Ug
YW55IGZ1cnRoZXINCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9m
IHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uDQorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9y
IGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8NCit0aGlzIExpY2Vuc2Uu
DQorDQorICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFs
bGVnYXRpb24gb2YgcGF0ZW50DQoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29u
IChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwNCitjb25kaXRpb25zIGFyZSBpbXBvc2Vk
IG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yDQorb3RoZXJ3aXNl
KSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRv
IG5vdA0KK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJ
ZiB5b3UgY2Fubm90DQorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5
IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcw0KK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0
aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UNCittYXkgbm90IGRp
c3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50DQor
bGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0
aGUgUHJvZ3JhbSBieQ0KK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3Ig
aW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbg0KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0
aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8NCityZWZyYWluIGVudGly
ZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLg0KKw0KK0lmIGFueSBwb3J0aW9u
IG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcg0K
K2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24g
aXMgaW50ZW5kZWQgdG8NCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRl
bmRlZCB0byBhcHBseSBpbiBvdGhlcg0KK2NpcmN1bXN0YW5jZXMuDQorDQorSXQgaXMgbm90IHRo
ZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQ0K
K3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFs
aWRpdHkgb2YgYW55DQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVy
cG9zZSBvZiBwcm90ZWN0aW5nIHRoZQ0KK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBk
aXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcw0KK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNl
bnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQ0KK2dlbmVyb3VzIGNvbnRyaWJ1
dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQNCit0aHJvdWdo
IHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhh
dA0KK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUg
b3Igc2hlIGlzIHdpbGxpbmcNCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90
aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QNCitpbXBvc2UgdGhhdCBjaG9pY2UuDQor
DQorVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0
IGlzIGJlbGlldmVkIHRvDQorYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExp
Y2Vuc2UuDQorDA0KKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQ
cm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4NCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0
ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUNCitvcmlnaW5hbCBjb3B5cmln
aHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlDQorbWF5
IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhj
bHVkaW5nDQordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0
ZWQgb25seSBpbiBvciBhbW9uZw0KK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1
Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcw0KK3RoZSBsaW1pdGF0aW9uIGFzIGlm
IHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgOS4gVGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lv
bnMNCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1
Y2ggbmV3IHZlcnNpb25zIHdpbGwNCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2Vu
dCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8NCithZGRyZXNzIG5ldyBwcm9i
bGVtcyBvciBjb25jZXJucy4NCisNCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlz
aGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtDQorc3BlY2lmaWVzIGEgdmVyc2lv
biBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkNCits
YXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1z
IGFuZCBjb25kaXRpb25zDQorZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIg
dmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYg
dGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mDQordGhpcyBM
aWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZQ0KK0ZvdW5kYXRpb24uDQorDQorICAxMC4gSWYgeW91IHdpc2ggdG8gaW5j
b3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlDQorcHJvZ3JhbXMg
d2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhl
IGF1dGhvcg0KK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBj
b3B5cmlnaHRlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcw0KK21ha2UgZXhjZXB0aW9u
cyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxz
DQorb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91
ciBmcmVlIHNvZnR3YXJlIGFuZA0KK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ug
b2Ygc29mdHdhcmUgZ2VuZXJhbGx5Lg0KKw0KKwkJCSAgICBOTyBXQVJSQU5UWQ0KKw0KKyAgMTEu
IEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElT
IE5PIFdBUlJBTlRZDQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBC
WSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVODQorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklU
SU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUw0KK1BST1ZJREUg
VEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTU0VEDQorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTDQorVE8gVEhFIFFVQUxJ
VFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRI
RQ0KK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBO
RUNFU1NBUlkgU0VSVklDSU5HLA0KK1JFUEFJUiBPUiBDT1JSRUNUSU9OLg0KKw0KKyAgMTIuIElO
IE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8g
SU4gV1JJVElORw0KK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJU
WSBXSE8gTUFZIE1PRElGWSBBTkQvT1INCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVS
TUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLA0KK0lOQ0xVRElORyBB
TlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
QVJJU0lORw0KK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0g
KElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQNCitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlO
RyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkNCitZT1UgT1IgVEhJ
UkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFO
WSBPVEhFUg0KK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRQ0KK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCisN
CisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TDQorDA0KKwlBcHBlbmRpeDogSG93
IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zDQorDQorICBJZiB5b3Ug
ZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0
ZXN0DQorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZl
IHRoaXMgaXMgdG8gbWFrZSBpdA0KK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJl
ZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLg0KKw0KKyAgVG8gZG8gc28s
IGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZl
c3QNCit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBt
b3N0IGVmZmVjdGl2ZWx5DQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBl
YWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QNCit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQg
YSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4NCisNCisgICAgPG9u
ZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hh
dCBpdCBkb2VzLj4NCisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+DQor
DQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICAg
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlDQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgIEZvdW5kYXRpb24s
IEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLg0KKw0KK0Fsc28g
YWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBw
YXBlciBtYWlsLg0KKw0KK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91
dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMNCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRl
cmFjdGl2ZSBtb2RlOg0KKw0KKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQg
KEMpIDE5eXkgbmFtZSBvZiBhdXRob3INCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNP
TFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLg0KKyAgICBUaGlz
IGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0
DQorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWls
cy4NCisNCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBz
aG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUNCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5DQorYmUgY2FsbGVk
IHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBl
dmVuIGJlDQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIg
cHJvZ3JhbS4NCisNCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3
b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cg0KK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEg
ImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmDQorbmVjZXNzYXJ5LiAg
SGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOg0KKw0KKyAgWW95b2R5bmUsIEluYy4s
IGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQ0K
KyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRl
biBieSBKYW1lcyBIYWNrZXIuDQorDQorICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmls
IDE5ODkNCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlDQorDQorVGhpcyBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBp
bnRvDQorcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0
aW5lIGxpYnJhcnksIHlvdSBtYXkNCitjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQg
bGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUNCitsaWJyYXJ5LiAgSWYg
dGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwN
CitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4NCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3Rvb2xz
L0NPUFlJTkcuZmxleAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4IEBACitGbGV4IGNhcnJpZXMgdGhlIGNvcHlyaWdodCB1c2VkIGZvciBCU0Qgc29mdHdhcmUs
IHNsaWdodGx5IG1vZGlmaWVkDQorYmVjYXVzZSBpdCBvcmlnaW5hdGVkIGF0IHRoZSBMYXdyZW5j
ZSBCZXJrZWxleSAobm90IExpdmVybW9yZSEpIExhYm9yYXRvcnksDQord2hpY2ggb3BlcmF0ZXMg
dW5kZXIgYSBjb250cmFjdCB3aXRoIHRoZSBEZXBhcnRtZW50IG9mIEVuZXJneToNCisNCisJQ29w
eXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju
aWEuDQorCUFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorCVRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkNCisJVmVybiBQYXhzb24uDQor
DQorCVRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgaGFzIHJpZ2h0cyBpbiB0aGlzIHdvcmsg
cHVyc3VhbnQNCisJdG8gY29udHJhY3Qgbm8uIERFLUFDMDMtNzZTRjAwMDk4IGJldHdlZW4gdGhl
IFVuaXRlZCBTdGF0ZXMNCisJRGVwYXJ0bWVudCBvZiBFbmVyZ3kgYW5kIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEuDQorDQorCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZA0KKwlwcm92aWRlZCB0aGF0OiAoMSkgc291cmNl
IGRpc3RyaWJ1dGlvbnMgcmV0YWluIHRoaXMgZW50aXJlDQorCWNvcHlyaWdodCBub3RpY2UgYW5k
IGNvbW1lbnQsIGFuZCAoMikgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcNCisJYmluYXJpZXMgZGlz
cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogIGBgVGhpcyBwcm9kdWN0DQorCWlu
Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh
LA0KKwlCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycycnIGluIHRoZSBkb2N1bWVudGF0aW9u
IG9yIG90aGVyDQorCW1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24gYW5k
IGluIGFsbCBhZHZlcnRpc2luZw0KKwltYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1
c2Ugb2YgdGhpcyBzb2Z0d2FyZS4gIE5laXRoZXIgdGhlDQorCW5hbWUgb2YgdGhlIFVuaXZlcnNp
dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQ0KKwl1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKwl3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisJVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1INCisJ
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN
UExJRUQNCisJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUg0KKwlQVVJQT1NFLg0KKw0KK1RoaXMgYmFzaWNhbGx5IHNheXMgImRvIHdoYXRl
dmVyIHlvdSBwbGVhc2Ugd2l0aCB0aGlzIHNvZnR3YXJlIGV4Y2VwdA0KK3JlbW92ZSB0aGlzIG5v
dGljZSBvciB0YWtlIGFkdmFudGFnZSBvZiB0aGUgVW5pdmVyc2l0eSdzIChvciB0aGUgZmxleA0K
K2F1dGhvcnMnKSBuYW1lIi4NCisNCitOb3RlIHRoYXQgdGhlICJmbGV4LnNrbCIgc2Nhbm5lciBz
a2VsZXRvbiBjYXJyaWVzIG5vIGNvcHlyaWdodCBub3RpY2UuDQorWW91IGFyZSBmcmVlIHRvIGRv
IHdoYXRldmVyIHlvdSBwbGVhc2Ugd2l0aCBzY2FubmVycyBnZW5lcmF0ZWQgdXNpbmcgZmxleDsN
Citmb3IgdGhlbSwgeW91IGFyZSBub3QgZXZlbiBib3VuZCBieSB0aGUgYWJvdmUgY29weXJpZ2h0
Lg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdG9vbHMv
UkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29t
cGlsZXIvdG9vbHMvUkVBRE1FCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9jb21waWxlci90b29scy9SRUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQgQEAKK1RoZSBzdGFuZGFsb25lIEJpc29uIGFuZCBGbGV4IHdpbjMyIGV4ZWN1dGFibGVzDQor
d2VyZSBjcmVhdGVkIGJ5IFdpbGJ1ciBTdHJlZXR0IGFuZCBjYW4gYmUgb2J0YWluZWQgZnJvbToN
CitodHRwOi8vdXNlcnBhZ2VzLm1vbm1vdXRoLmNvbS9+d3N0cmVldHQvbGV4LXlhY2MvbGV4LXlh
Y2MuaHRtbA0KKw0KK0Jpc29uIHZlcnNpb24gMS4yNDoNCitTZWUgQ09QWUlORy5iaXNvbiBmb3Ig
bGljZW5zZSBpbmZvcm1hdGlvbi4NCitUaGUgb3JpZ2luYWwgc291cmNlIGRpc3RyaWJ1dGlvbiBm
b3IgYmlzb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoNCito
dHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL2Jpc29uLnppcA0KKw0KK0Zs
ZXggdmVyc2lvbiAyLjUuMg0KK1NlZSBDT1BZSU5HLmZsZXggZm9yIGxpY2Vuc2UgaW5mb3JtYXRp
b24uDQorVGhlIG9yaWdpbmFsIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIGZsZXggY2FuIGJlIG9i
dGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoNCitodHRwOi8vYW5nbGVwcm9qZWN0
Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL2ZsZXguemlwDQorDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9jb21waWxlci90b29scy9iaXNvbi5oYWlyeQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhh
aXJ5CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9jb21w
aWxlci90b29scy9iaXNvbi5oYWlyeQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzQgQEAKKwor
ZXh0ZXJuIGludCB0aW1lY2xvY2s7CisKKworaW50IHl5ZXJyb3I7CQkvKiAgWXllcnJvciBhbmQg
eXljb3N0IGFyZSBzZXQgYnkgZ3VhcmRzLgkqLworaW50IHl5Y29zdDsJCS8qICBJZiB5eWVycm9y
IGlzIHNldCB0byBhIG5vbnplcm8gdmFsdWUgYnkgYQkqLworCQkJLyogIGd1YXJkLCB0aGUgcmVk
dWN0aW9uIHdpdGggd2hpY2ggdGhlIGd1YXJkCSovCisJCQkvKiAgaXMgYXNzb2NpYXRlZCBpcyBu
b3QgcGVyZm9ybWVkLCBhbmQgdGhlCSovCisJCQkvKiAgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNt
IGlzIGludm9rZWQuCSovCisJCQkvKiAgWXljb3N0IGluZGljYXRlcyB0aGUgY29zdCBvZiBwZXJm
b3JtaW5nCSovCisJCQkvKiAgdGhlIHJlZHVjdGlvbiBnaXZlbiB0aGUgYXR0cmlidXRlcyBvZiB0
aGUJKi8KKwkJCS8qICBzeW1ib2xzLgkJCQkJKi8KKworCisvKiAgWVlNQVhERVBUSCBpbmRpY2F0
ZXMgdGhlIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YXRlIGFuZCB2YWx1ZQkqLworLyogIHN0YWNr
cy4JCQkJCQkJCSovCisKKyNpZm5kZWYJWVlNQVhERVBUSAorI2RlZmluZQlZWU1BWERFUFRICTUw
MAorI2VuZGlmCisKKy8qICBZWU1BWFJVTEVTIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMg
dGhlIG51bWJlciBvZiBydWxlcyB0aGF0CSovCisvKiAgY291bGQgYmUgcGxhY2VkIGluIHRoZSBy
dWxlIHF1ZXVlLiAgVGhhdCBudW1iZXIgY291bGQgYmUgZGV0ZXJtaW5lZAkqLworLyogIGZyb20g
dGhlIGdyYW1tYXIgYW5kIHRoZSBzaXplIG9mIHRoZSBzdGFjaywgYnV0LCBhcyB5ZXQsIGl0IGlz
IG5vdC4JKi8KKworI2lmbmRlZglZWU1BWFJVTEVTCisjZGVmaW5lCVlZTUFYUlVMRVMJMTAwCisj
ZW5kaWYKKworI2lmbmRlZglZWU1BWEJBQ0tVUAorI2RlZmluZSBZWU1BWEJBQ0tVUAkxMDAKKyNl
bmRpZgorCisKK3Nob3J0CXl5c3NbWVlNQVhERVBUSF07CS8qICB0aGUgc3RhdGUgc3RhY2sJCQkq
LworWVlTVFlQRQl5eXZzW1lZTUFYREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNr
CQkqLworWVlMVFlQRSB5eWxzW1lZTUFYREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0YWNrCQkJ
Ki8KK3Nob3J0CXl5cnFbWVlNQVhSVUxFU107CS8qICB0aGUgcnVsZSBxdWV1ZQkJCSovCitpbnQJ
eXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KKworWVlTVFlQRQl5eWx2YWw7
CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2thaGVhZCBz
eW1ib2wJCQkqLworCitZWVNUWVBFIHl5dHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIGZv
ciB0aGUgc3RhdGUJKi8KKwkJCQkvKiAgYXQgdGhlIHRvcCBvZiB0aGUgc3RhdGUgc3RhY2suCSov
CisKK1lZU1RZUEUgeXl2YWw7CQkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8K
KwkJCQkvKiAgc2VtYW50aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0
aW5lcwkJCQkqLworCitZWUxUWVBFIHl5bGxvYzsJCS8qICBsb2NhdGlvbiBkYXRhIGZvciB0aGUg
bG9va2FoZWFkCSovCisJCQkJLyogIHN5bWJvbAkJCQkqLworCitZWUxUWVBFIHl5dGxvYzsJCS8q
ICBsb2NhdGlvbiBkYXRhIGZvciB0aGUgc3RhdGUgYXQgdGhlCSovCisJCQkJLyogIHRvcCBvZiB0
aGUgc3RhdGUgc3RhY2sJCSovCisKKworaW50CXl5bnVubGV4ZWQ7CitzaG9ydAl5eXVuY2hhcltZ
WU1BWEJBQ0tVUF07CitZWVNUWVBFCXl5dW52YWxbWVlNQVhCQUNLVVBdOworWVlMVFlQRSB5eXVu
bG9jW1lZTUFYQkFDS1VQXTsKKworc2hvcnQgKnl5Z3NzcDsJCQkvKiAgYSBwb2ludGVyIHRvIHRo
ZSB0b3Agb2YgdGhlIHN0YXRlCSovCisJCQkJLyogIHN0YWNrOyBvbmx5IHNldCBkdXJpbmcgZXJy
b3IJKi8KKwkJCQkvKiAgcmVjb3ZlcnkuCQkJCSovCisKK1lZU1RZUEUgKnl5Z3ZzcDsJCS8qICBh
IHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgdmFsdWUJKi8KKwkJCQkvKiAgc3RhY2s7IG9ubHkg
c2V0IGR1cmluZyBlcnJvcgkqLworCQkJCS8qICByZWNvdmVyeS4JCQkJKi8KKworWVlMVFlQRSAq
eXlnbHNwOwkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZQkJKi8KKwkJCQkvKiAgbG9j
YXRpb24gc3RhY2s7IG9ubHkgc2V0IGR1cmluZwkqLworCQkJCS8qICBlcnJvciByZWNvdmVyeS4J
CQkqLworCisKKy8qICBZeWdldCBpcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcGFyc2VyIGFu
ZCB0aGUgbGV4aWNhbCBhbmFseXplci4JKi8KKy8qICBJdCBpcyBjb3N0bHkgdG8gcHJvdmlkZSBz
dWNoIGFuIGludGVyZmFjZSwgYnV0IGl0IGF2b2lkcyByZXF1aXJpbmcJKi8KKy8qICB0aGUgbGV4
aWNhbCBhbmFseXplciB0byBiZSBhYmxlIHRvIGJhY2sgdXAgdGhlIHNjYW4uCQkqLworCit5eWdl
dCgpCit7CisgIGlmICh5eW51bmxleGVkID4gMCkKKyAgICB7CisgICAgICB5eW51bmxleGVkLS07
CisgICAgICB5eWNoYXIgPSB5eXVuY2hhclt5eW51bmxleGVkXTsKKyAgICAgIHl5bHZhbCA9IHl5
dW52YWxbeXludW5sZXhlZF07CisgICAgICB5eWxsb2MgPSB5eXVubG9jW3l5bnVubGV4ZWRdOwor
ICAgIH0KKyAgZWxzZSBpZiAoeXljaGFyIDw9IDApCisgICAgeXljaGFyID0gMDsKKyAgZWxzZQor
ICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5bGV4KCk7CisgICAgICBpZiAoeXljaGFyIDwgMCkKKwl5
eWNoYXIgPSAwOworICAgICAgZWxzZSB5eWNoYXIgPSBZWVRSQU5TTEFURSh5eWNoYXIpOworICAg
IH0KK30KKworCisKK3l5dW5sZXgoY2hyLCB2YWwsIGxvYykKK2ludCBjaHI7CitZWVNUWVBFIHZh
bDsKK1lZTFRZUEUgbG9jOworeworICB5eXVuY2hhclt5eW51bmxleGVkXSA9IGNocjsKKyAgeXl1
bnZhbFt5eW51bmxleGVkXSA9IHZhbDsKKyAgeXl1bmxvY1t5eW51bmxleGVkXSA9IGxvYzsKKyAg
eXludW5sZXhlZCsrOworfQorCisKKworeXlyZXN0b3JlKGZpcnN0LCBsYXN0KQorcmVnaXN0ZXIg
c2hvcnQgKmZpcnN0OworcmVnaXN0ZXIgc2hvcnQgKmxhc3Q7Cit7CisgIHJlZ2lzdGVyIHNob3J0
ICpzc3A7CisgIHJlZ2lzdGVyIHNob3J0ICpycDsKKyAgcmVnaXN0ZXIgaW50IHN5bWJvbDsKKyAg
cmVnaXN0ZXIgaW50IHN0YXRlOworICByZWdpc3RlciBpbnQgdHZhbHNhdmVkOworCisgIHNzcCA9
IHl5Z3NzcDsKKyAgeXl1bmxleCh5eWNoYXIsIHl5bHZhbCwgeXlsbG9jKTsKKworICB0dmFsc2F2
ZWQgPSAwOworICB3aGlsZSAoZmlyc3QgIT0gbGFzdCkKKyAgICB7CisgICAgICBzeW1ib2wgPSB5
eXN0b3NbKnNzcF07CisgICAgICBpZiAoc3ltYm9sIDwgWVlOVEJBU0UpCisJeworCSAgeXl1bmxl
eChzeW1ib2wsIHl5dHZhbCwgeXl0bG9jKTsKKwkgIHR2YWxzYXZlZCA9IDE7CisJICBzc3AtLTsK
Kwl9CisKKyAgICAgIHNzcC0tOworCisgICAgICBpZiAoZmlyc3QgPT0geXlycSkKKwlmaXJzdCA9
IHl5cnEgKyBZWU1BWFJVTEVTOworCisgICAgICBmaXJzdC0tOworCisgICAgICBmb3IgKHJwID0g
eXlyaHMgKyB5eXByaHNbKmZpcnN0XTsgc3ltYm9sID0gKnJwOyBycCsrKQorCXsKKwkgIGlmIChz
eW1ib2wgPCBZWU5UQkFTRSkKKwkgICAgc3RhdGUgPSB5eXRhYmxlW3l5cGFjdFsqc3NwXSArIHN5
bWJvbF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdGF0ZSA9IHl5cGdvdG9bc3ltYm9sIC0g
WVlOVEJBU0VdICsgKnNzcDsKKworCSAgICAgIGlmIChzdGF0ZSA+PSAwICYmIHN0YXRlIDw9IFlZ
TEFTVCAmJiB5eWNoZWNrW3N0YXRlXSA9PSAqc3NwKQorCQlzdGF0ZSA9IHl5dGFibGVbc3RhdGVd
OworCSAgICAgIGVsc2UKKwkJc3RhdGUgPSB5eWRlZmdvdG9bc3ltYm9sIC0gWVlOVEJBU0VdOwor
CSAgICB9CisKKwkgICorK3NzcCA9IHN0YXRlOworCX0KKyAgICB9CisKKyAgaWYgKCAhIHR2YWxz
YXZlZCAmJiBzc3AgPiB5eXNzKQorICAgIHsKKyAgICAgIHl5dW5sZXgoeXlzdG9zWypzc3BdLCB5
eXR2YWwsIHl5dGxvYyk7CisgICAgICBzc3AtLTsKKyAgICB9CisKKyAgeXlnc3NwID0gc3NwOwor
fQorCisKKworaW50Cit5eXBhcnNlKCkKK3sKKyAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CisgIHJl
Z2lzdGVyIGludCB5eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgcmVnaXN0ZXIgc2hv
cnQgKnl5cnEwOworICByZWdpc3RlciBzaG9ydCAqeXlwdHI7CisgIHJlZ2lzdGVyIFlZU1RZUEUg
Knl5dnNwOworCisgIGludCB5eWxlbjsKKyAgWVlMVFlQRSAqeXlsc3A7CisgIHNob3J0ICp5eXJx
MTsKKyAgc2hvcnQgKnl5cnEyOworCisgIHl5c3RhdGUgPSAwOworICB5eXNzcCA9IHl5c3MgLSAx
OworICB5eXZzcCA9IHl5dnMgLSAxOworICB5eWxzcCA9IHl5bHMgLSAxOworICB5eXJxMCA9IHl5
cnE7CisgIHl5cnExID0geXlycTA7CisgIHl5cnEyID0geXlycTA7CisKKyAgeXljaGFyID0geXls
ZXgoKTsKKyAgaWYgKHl5Y2hhciA8IDApCisgICAgeXljaGFyID0gMDsKKyAgZWxzZSB5eWNoYXIg
PSBZWVRSQU5TTEFURSh5eWNoYXIpOworCit5eW5ld3N0YXRlOgorCisgIGlmICh5eXNzcCA+PSB5
eXNzICsgWVlNQVhERVBUSCAtIDEpCisgICAgeworICAgICAgeXlhYm9ydCgiUGFyc2VyIFN0YWNr
IE92ZXJmbG93Iik7CisgICAgICBZWUFCT1JUOworICAgIH0KKworICAqKyt5eXNzcCA9IHl5c3Rh
dGU7CisKK3l5cmVzdW1lOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9
PSBZWUZMQUcpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXluICs9IHl5Y2hhcjsKKyAgaWYg
KHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIpCisgICAg
Z290byB5eWRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkK
KyAgICB7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9Cisg
IGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKyAgeXlzdGF0ZSA9IHl5
bjsKKworICB5eXB0ciA9IHl5cnEyOworICB3aGlsZSAoeXlwdHIgIT0geXlycTEpCisgICAgewor
ICAgICAgeXluID0gKnl5cHRyKys7CisgICAgICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgICAgIHl5
dnNwIC09IHl5bGVuOworICAgICAgeXlsc3AgLT0geXlsZW47CisKKyAgICAgIHl5Z3VhcmQoeXlu
LCB5eXZzcCwgeXlsc3ApOworICAgICAgaWYgKHl5ZXJyb3IpCisJZ290byB5eXNlbWVycjsKKwor
ICAgICAgeXlhY3Rpb24oeXluLCB5eXZzcCwgeXlsc3ApOworICAgICAgKisreXl2c3AgPSB5eXZh
bDsKKworICAgICAgeXlsc3ArKzsKKyAgICAgIGlmICh5eWxlbiA9PSAwKQorCXsKKwkgIHl5bHNw
LT50aW1lc3RhbXAgPSB0aW1lY2xvY2s7CisJICB5eWxzcC0+Zmlyc3RfbGluZSA9IHl5dGxvYy5m
aXJzdF9saW5lOworCSAgeXlsc3AtPmZpcnN0X2NvbHVtbiA9IHl5dGxvYy5maXJzdF9jb2x1bW47
CisJICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwLTEpLT5sYXN0X2xpbmU7CisJICB5eWxzcC0+
bGFzdF9jb2x1bW4gPSAoeXlsc3AtMSktPmxhc3RfY29sdW1uOworCSAgeXlsc3AtPnRleHQgPSAw
OworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVu
LTEpLT5sYXN0X2xpbmU7CisJICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSkt
Pmxhc3RfY29sdW1uOworCX0KKwkgIAorICAgICAgaWYgKHl5cHRyID09IHl5cnEgKyBZWU1BWFJV
TEVTKQorICAgICAgICB5eXB0ciA9IHl5cnE7CisgICAgfQorCisgIGlmICh5eXN0YXRlID09IFlZ
RklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgeXlycTIgPSB5eXB0cjsKKyAgeXlycTEgPSB5eXJx
MDsKKworICAqKyt5eXZzcCA9IHl5dHZhbDsKKyAgKisreXlsc3AgPSB5eXRsb2M7CisgIHl5dHZh
bCA9IHl5bHZhbDsKKyAgeXl0bG9jID0geXlsbG9jOworICB5eWdldCgpOworCisgIGdvdG8geXlu
ZXdzdGF0ZTsKKworeXlkZWZhdWx0OgorCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBp
ZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworeXlyZWR1Y2U6CisKKyAgKnl5cnEw
KysgPSB5eW47CisKKyAgaWYgKHl5cnEwID09IHl5cnEgKyBZWU1BWFJVTEVTKQorICAgIHl5cnEw
ID0geXlycTsKKworICBpZiAoeXlycTAgPT0geXlycTIpCisgICAgeworICAgICAgeXlhYm9ydCgi
UGFyc2VyIFJ1bGUgUXVldWUgT3ZlcmZsb3ciKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQorCisg
IHl5c3NwIC09IHl5cjJbeXluXTsKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5
eXBnb3RvW3l5biAtIFlZTlRCQVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5
eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0
YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9b
eXluIC0gWVlOVEJBU0VdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworeXlzZW1lcnI6CisgICot
LXl5cHRyID0geXluOworICB5eXJxMiA9IHl5cHRyOworICB5eXZzcCArPSB5eXIyW3l5bl07CisK
K3l5ZXJybGFiOgorCisgIHl5Z3NzcCA9IHl5c3NwOworICB5eWd2c3AgPSB5eXZzcDsKKyAgeXln
bHNwID0geXlsc3A7CisgIHl5cmVzdG9yZSh5eXJxMCwgeXlycTIpOworICB5eXJlY292ZXIoKTsK
KyAgeXlzdGF0ZSA9ICp5eWdzc3A7CisgIHl5c3NwID0geXlnc3NwOworICB5eXZzcCA9IHl5Z3Zz
cDsKKyAgeXlycTAgPSB5eXJxOworICB5eXJxMSA9IHl5cnEwOworICB5eXJxMiA9IHl5cnEwOwor
ICBnb3RvIHl5cmVzdW1lOworfQorCiskCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvY29tcGlsZXIvdG9v
bHMvYmlzb24uc2ltcGxlCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5OSBAQAorLyogLSotQy0q
LSAgTm90ZSBzb21lIGNvbXBpbGVycyBjaG9rZSBvbiBjb21tZW50cyBvbiBgI2xpbmUnIGxpbmVz
LiAgKi8KKworLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisgICBDb3B5cmln
aHQgKEMpIDE5ODQsIDE5ODksIDE5OTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK
KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5
LCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBp
cyBjb3BpZWQgYnkgQmlzb24gaW50byBhCisgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1
c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICAg
aW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5l
IGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZWxzZSAvKiBub3QgX19HTlVDX18gKi8KKyNpZiBI
QVZFX0FMTE9DQV9ICisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3QgSEFWRV9BTExP
Q0FfSCAqLworI2lmZGVmIF9BSVgKKyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IF9BSVgg
Ki8KK2NoYXIgKmFsbG9jYSAoKTsKKyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5v
dCBIQVZFX0FMTE9DQV9IICovCisjZW5kaWYgLyogbm90IF9fR05VQ19fICovCisKK2V4dGVybiB2
b2lkIHl5ZXJyb3IoY2hhciogcyk7CisKKyNpZm5kZWYgYWxsb2NhCisjaWZkZWYgX19HTlVDX18K
KyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBHTlUgQy4gICov
CisjaWYgKCFkZWZpbmVkIChfX1NURENfXykgJiYgZGVmaW5lZCAoc3BhcmMpKSB8fCBkZWZpbmVk
IChfX3NwYXJjX18pIHx8IGRlZmluZWQgKF9fc3BhcmMpIHx8IGRlZmluZWQgKF9fc2dpKQorI2lu
Y2x1ZGUgPGFsbG9jYS5oPgorI2Vsc2UgLyogbm90IHNwYXJjICovCisjaWYgKGRlZmluZWQgKE1T
RE9TKSAmJiAhZGVmaW5lZCAoX19UVVJCT0NfXykpIHx8IGRlZmluZWQgKFdJTjMyKQorI2luY2x1
ZGUgPG1hbGxvYy5oPgorI2Vsc2UgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjaWYg
ZGVmaW5lZChfQUlYKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorICNwcmFnbWEgYWxsb2NhCisjZWxz
ZSAvKiBub3QgTVNET1MsIF9fVFVSQk9DX18sIG9yIF9BSVggKi8KKyNpZmRlZiBfX2hwdXgKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cit2b2lkICphbGxvY2EgKHVuc2lnbmVkIGlu
dCk7Cit9OworI2Vsc2UgLyogbm90IF9fY3BsdXNwbHVzICovCit2b2lkICphbGxvY2EgKCk7Cisj
ZW5kaWYgLyogbm90IF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19ocHV4ICovCisjZW5kaWYg
Lyogbm90IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNl
bmRpZiAvKiBub3Qgc3BhcmMuICAqLworI2VuZGlmIC8qIG5vdCBHTlUgQy4gICovCisjZW5kaWYg
LyogYWxsb2NhIG5vdCBkZWZpbmVkLiAgKi8KKworLyogVGhpcyBpcyB0aGUgcGFyc2VyIGNvZGUg
dGhhdCBpcyB3cml0dGVuIGludG8gZWFjaCBiaXNvbiBwYXJzZXIKKyAgd2hlbiB0aGUgJXNlbWFu
dGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgor
ICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBo
YWlyeSBwYXJzZXIKKyAgdXNlZCB3aGVuICVzZW1hbnRpY19wYXJzZXIgaXMgc3BlY2lmaWVkLiAg
Ki8KKworLyogTm90ZTogdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkb2xsYXIgc2lnbiBpbiB0aGlz
IGZpbGUuCisgICBJdCBpcyByZXBsYWNlZCBieSB0aGUgbGlzdCBvZiBhY3Rpb25zLCBlYWNoIGFj
dGlvbgorICAgYXMgb25lIGNhc2Ugb2YgdGhlIHN3aXRjaC4gICovCisKKyNkZWZpbmUgeXllcnJv
awkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZ
KQorI2RlZmluZSBZWUVNUFRZCQktMgorI2RlZmluZSBZWUVPRgkJMAorI2RlZmluZSBZWUFDQ0VQ
VAlyZXR1cm4oMCkKKyNkZWZpbmUgWVlBQk9SVCAJcmV0dXJuKDEpCisjZGVmaW5lIFlZRVJST1IJ
CWdvdG8geXllcnJsYWIxCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4K
KyAgIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5IHRvIGVhc2UgdGhlCisgICB0cmFuc2l0
aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0Mg
dmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2Rl
ZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5
ZXJyc3RhdHVzKQorI2RlZmluZSBZWUJBQ0tVUCh0b2tlbiwgdmFsdWUpIFwKK2RvCQkJCQkJCQlc
CisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgeyB5eWNo
YXIgPSAodG9rZW4pLCB5eWx2YWwgPSAodmFsdWUpOwkJCVwKKyAgICAgIHl5Y2hhcjEgPSBZWVRS
QU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAgWVlQT1BTVEFDSzsJCQkJCQlcCisgICAgICBn
b3RvIHl5YmFja3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAg
ICB7IHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7IFlZRVJST1I7IH0J
XAord2hpbGUgKDApCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2
CisKKyNpZm5kZWYgWVlQVVJFCisjZGVmaW5lIFlZTEVYCQl5eWxleCgpCisjZW5kaWYKKworI2lm
ZGVmIFlZUFVSRQorI2lmZGVmIFlZTFNQX05FRURFRAorI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVm
aW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisj
ZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCAmeXlsbG9jKQorI2VuZGlmCisjZWxzZSAvKiBu
b3QgWVlMU1BfTkVFREVEICovCisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5
bGV4KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5
eWx2YWwpCisjZW5kaWYKKyNlbmRpZiAvKiBub3QgWVlMU1BfTkVFREVEICovCisjZW5kaWYKKwor
LyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUgKi8KKworI2lm
bmRlZiBZWVBVUkUKKworaW50CXl5Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSov
CitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8KKwkJ
CQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKK1lZTFRZ
UEUgeXlsbG9jOwkJCS8qICBsb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkCSovCisJCQkJ
LyogIHN5bWJvbAkJCQkqLworI2VuZGlmCisKK2ludCB5eW5lcnJzOwkJCS8qICBudW1iZXIgb2Yg
cGFyc2UgZXJyb3JzIHNvIGZhciAgICAgICAqLworI2VuZGlmICAvKiBub3QgWVlQVVJFICovCisK
KyNpZiBZWURFQlVHICE9IDAKK2ludCB5eWRlYnVnOwkJCS8qICBub256ZXJvIG1lYW5zIHByaW50
IHBhcnNlIHRyYWNlCSovCisvKiBTaW5jZSB0aGlzIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGRvZXMg
bm90IHN0b3AgbXVsdGlwbGUgcGFyc2VycworICAgZnJvbSBjb2V4aXN0aW5nLiAgKi8KKyNlbmRp
ZgorCisvKiAgWVlJTklUREVQVEggaW5kaWNhdGVzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHBh
cnNlcidzIHN0YWNrcwkqLworCisjaWZuZGVmCVlZSU5JVERFUFRICisjZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAorI2VuZGlmCisKKy8qICBZWU1BWERFUFRIIGlzIHRoZSBtYXhpbXVtIHNpemUgdGhl
IHN0YWNrcyBjYW4gZ3JvdyB0bworICAgIChlZmZlY3RpdmUgb25seSBpZiB0aGUgYnVpbHQtaW4g
c3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4gICovCisKKyNpZiBZWU1BWERFUFRIID09
IDAKKyN1bmRlZiBZWU1BWERFUFRICisjZW5kaWYKKworI2lmbmRlZiBZWU1BWERFUFRICisjZGVm
aW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdz
dHJpY3QtcHJvdG90eXBlcy4gICovCisjaWZkZWYgX19HTlVDX18KK2ludCB5eXBhcnNlICh2b2lk
KTsKKyNlbmRpZgorDAorI2lmIF9fR05VQ19fID4gMQkJLyogR05VIEMgYW5kIEdOVSBDKysgZGVm
aW5lIHRoaXMuICAqLworI2RlZmluZSBfX3l5X21lbWNweShGUk9NLFRPLENPVU5UKQlfX2J1aWx0
aW5fbWVtY3B5KFRPLEZST00sQ09VTlQpCisjZWxzZQkJCQkvKiBub3QgR05VIEMgb3IgQysrICov
CisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5
IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVu
Y3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkg
KGZyb20sIHRvLCBjb3VudCkKKyAgICAgY2hhciAqZnJvbTsKKyAgICAgY2hhciAqdG87CisgICAg
IHNpemVfdCBjb3VudDsKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVy
IGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgc2l6ZV90IGkgPSBjb3VudDsKKworICB3aGlsZSAo
aS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2Vsc2UgLyogX19jcGx1c3BsdXMgKi8K
KworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmls
aXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0
ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoY2hhciAqZnJvbSwgY2hhciAqdG8s
IHNpemVfdCBjb3VudCkKK3sKKyAgcmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVy
IGNoYXIgKnQgPSB0bzsKKyAgcmVnaXN0ZXIgc2l6ZV90IGkgPSBjb3VudDsKKworICB3aGlsZSAo
aS0tID4gMCkKKyAgICAqdCsrID0gKmYrKzsKK30KKworI2VuZGlmCisjZW5kaWYKKworLyogVGhl
IHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50
IHRvIGJlIHBhc3NlZAorICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZl
IHR5cGUgdm9pZCAqLgorICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4K
KyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0
CisgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BB
UkFNCisjaWZuZGVmIFlZUEFSU0VfUEFSQU1fREVDTAorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RF
Q0wgdm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZiAKKyNlbHNlCisjZGVmaW5lIFlZUEFSU0Vf
UEFSQU0KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisjZW5kaWYKKworZXh0ZXJuIFlZX0RF
Q0w7CisKK2ludAoreXlwYXJzZShZWVBBUlNFX1BBUkFNX0RFQ0wgWVlQQVJTRV9QQVJBTSkgewor
ICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIg
c2hvcnQgKnl5c3NwOworICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKyAgaW50IHl5ZXJyc3Rh
dHVzOwkvKiAgbnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMg
ZW5hYmxlZCAqLworICBpbnQgeXljaGFyMSA9IDA7CQkvKiAgbG9va2FoZWFkIHRva2VuIGFzIGFu
IGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIgKi8KKworICBzaG9ydAl5eXNzYVtZ
WUlOSVRERVBUSF07CS8qICB0aGUgc3RhdGUgc3RhY2sJCQkqLworICBZWVNUWVBFIHl5dnNhW1lZ
SU5JVERFUFRIXTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KKworICBzaG9ydCAq
eXlzcyA9IHl5c3NhOwkJLyogIHJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2lu
dGVycyAqLworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CS8qICB0byBhbGxvdyB5eW92ZXJmbG93
IHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUgKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAor
ICBZWUxUWVBFIHl5bHNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSov
CisgIFlZTFRZUEUgKnl5bHMgPSB5eWxzYTsKKyAgWVlMVFlQRSAqeXlsc3A7CisKKyNkZWZpbmUg
WVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tLCB5eWxzcC0tKQorI2Vsc2UKKyNkZWZpbmUg
WVlQT1BTVEFDSyAgICh5eXZzcC0tLCB5eXNzcC0tKQorI2VuZGlmCisKKyAgc2l6ZV90IHl5c3Rh
Y2tzaXplID0gWVlJTklUREVQVEg7CisKKyNpZmRlZiBZWVBVUkUKKyAgaW50IHl5Y2hhcjsKKyAg
WVlTVFlQRSB5eWx2YWw7CisgIGludCB5eW5lcnJzOworI2lmZGVmIFlZTFNQX05FRURFRAorICBZ
WUxUWVBFIHl5bGxvYzsKKyNlbmRpZgorI2VuZGlmCisKKyAgWVlTVFlQRSB5eXZhbDsJCS8qICB0
aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJCQkJLyogIHNlbWFudGljIHZhbHVlcyBm
cm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGluZXMJCQkJKi8KKworICBpbnQgeXlsZW47
CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIs
ICJTdGFydGluZyBwYXJzZVxuIik7CisjZW5kaWYKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJz
dGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNl
IGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVy
cy4KKyAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisg
ICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFj
ay4KKyAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwor
CisgIHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2czsKKyNpZmRlZiBZWUxTUF9ORUVE
RUQKKyAgeXlsc3AgPSB5eWxzOworI2VuZGlmCisKKy8qIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNo
IGlzIGZvdW5kIGluICB5eXN0YXRlICAuICAqLworLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBn
ZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgIGhhdmUganVzdCBiZWVu
IHB1c2hlZC4gc28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCit5
eW5ld3N0YXRlOgorCisgICorK3l5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzc3AgPj0geXlz
cyArIHl5c3RhY2tzaXplIC0gMSkKKyAgICB7CisgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2Ug
dG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2sgKi8KKyAgICAgIC8qIFVzZSBjb3BpZXMgb2YgdGhlc2Ug
c28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50byBtZW1vcnkuICov
CisgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisgICAgICBzaG9ydCAqeXlzczEgPSB5eXNz
OworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOworI2Vu
ZGlmCisKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0
YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgc2l6ZV90IHNpemUgPSB5eXNzcCAtIHl5c3Mg
KyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFk
ZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YKKwkgdGhlIGRhdGEgaW4gdXNlIGluIHRo
YXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIC8qIFRo
aXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJn
cywKKwkgYnV0IHRoYXQgbWlnaHQgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5
c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgq
eXl2c3ApLAorCQkgJnl5bHMxLCBzaXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgJnl5c3RhY2tz
aXplKTsKKyNlbHNlCisgICAgICB5eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAor
CQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6
ZW9mICgqeXl2c3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICB5eXNzID0g
eXlzczE7IHl5dnMgPSB5eXZzMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSB5
eWxzMTsKKyNlbmRpZgorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworICAgICAgLyogRXh0ZW5k
IHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoeXlzdGFja3NpemUgPj0gWVlN
QVhERVBUSCkKKwl7CisJICB5eWVycm9yKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKwkgIHJl
dHVybiAyOworCX0KKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3Np
emUgPiBZWU1BWERFUFRIKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKyAgICAgIHl5c3Mg
PSAoc2hvcnQgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAg
ICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXNzMSwgKGNoYXIgKil5eXNzLCBzaXplICogc2l6ZW9m
ICgqeXlzc3ApKTsKKyAgICAgIHl5dnMgPSAoWVlTVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXpl
ICogc2l6ZW9mICgqeXl2c3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5dnMxLCAo
Y2hhciAqKXl5dnMsIHNpemUgKiBzaXplb2YgKCp5eXZzcCkpOworI2lmZGVmIFlZTFNQX05FRURF
RAorICAgICAgeXlscyA9IChZWUxUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2Yg
KCp5eWxzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlsczEsIChjaGFyICopeXls
cywgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisjZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJm
bG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHNpemUgLSAxOworICAgICAgeXl2c3AgPSB5
eXZzICsgc2l6ZSAtIDE7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzcCA9IHl5bHMg
KyBzaXplIC0gMTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1
ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVkXG4iLCB5eXN0
YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6
ZSAtIDEpCisJWVlBQk9SVDsKKyAgICB9CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVi
dWcpCisgICAgZnByaW50ZihzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSk7
CisjZW5kaWYKKworICBnb3RvIHl5YmFja3VwOworIHl5YmFja3VwOgorCisvKiBEbyBhcHByb3By
aWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKy8qIFJlYWQgYSBs
b29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUu
ICAqLworLyogeXlyZXN1bWU6ICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRv
IGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRgorICAgICBvciBhIHZhbGlkIHRva2VuIGluIGV4dGVybmFsIGZvcm0uICAqLworCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAo
eXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIik7CisjZW5kaWYK
KyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICAvKiBDb252ZXJ0IHRva2VuIHRvIGlu
dGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworCisg
IGlmICh5eWNoYXIgPD0gMCkJCS8qIFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworICAgIHsK
KyAgICAgIHl5Y2hhcjEgPSAwOworICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxs
IFlZTEVYIGFueSBtb3JlICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVn
KQorCWZwcmludGYoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpOworI2VuZGlmCisg
ICAgfQorICBlbHNlCisgICAgeworICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7
CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCXsKKwkgIGZwcmludGYg
KHN0ZGVyciwgIk5leHQgdG9rZW4gaXMgJWQgKCVzIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFd
KTsKKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBw
cmVjaXNlIG1lYW5pbmcKKwkgICAgIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBp
bmZvLiAgKi8KKyNpZmRlZiBZWVBSSU5UCisJICBZWVBSSU5UIChzdGRlcnIsIHl5Y2hhciwgeXls
dmFsKTsKKyNlbmRpZgorCSAgZnByaW50ZiAoc3RkZXJyLCAiKVxuIik7CisJfQorI2VuZGlmCisg
ICAgfQorCisgIHl5biArPSB5eWNoYXIxOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1Qg
fHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXlu
ID0geXl0YWJsZVt5eW5dOworCisgIC8qIHl5biBpcyB3aGF0IHRvIGRvIGZvciB0aGlzIHRva2Vu
IHR5cGUgaW4gdGhpcyBzdGF0ZS4KKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1
bGUgbnVtYmVyLgorICAgICBQb3NpdGl2ZSA9PiBzaGlmdCwgeXluIGlzIG5ldyBzdGF0ZS4KKyAg
ICAgICBOZXcgc3RhdGUgaXMgZmluYWwgc3RhdGUgPT4gZG9uJ3QgYm90aGVyIHRvIHNoaWZ0LAor
ICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisgICAgIDAsIG9yIG1vc3QgbmVnYXRpdmUgbnVt
YmVyID0+IGVycm9yLiAgKi8KKworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXlu
ID09IFlZRkxBRykKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdv
dG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJy
bGFiOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBTaGlm
dCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlk
ZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsIHl5
Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisjZW5kaWYKKworICAvKiBEaXNjYXJkIHRoZSB0b2tl
biBiZWluZyBzaGlmdGVkIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZ
RU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZk
ZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgLyogY291
bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJv
ciBzdGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlz
dGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisvKiBEbyB0aGUgZGVmYXVsdCBhY3Rp
b24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KK3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRl
ZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKy8q
IERvIGEgcmVkdWN0aW9uLiAgeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3
aXRoLiAgKi8KK3l5cmVkdWNlOgorICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgaWYgKHl5bGVuID4g
MCkKKyAgICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOyAvKiBpbXBsZW1lbnQgZGVmYXVsdCB2YWx1
ZSBvZiB0aGUgYWN0aW9uICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisg
ICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJlZHVjaW5nIHZp
YSBydWxlICVkIChsaW5lICVkKSwgIiwKKwkgICAgICAgeXluLCB5eXJsaW5lW3l5bl0pOworCisg
ICAgICAvKiBQcmludCB0aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0
LiAgKi8KKyAgICAgIGZvciAoaSA9IHl5cHJoc1t5eW5dOyB5eXJoc1tpXSA+IDA7IGkrKykKKwlm
cHJpbnRmIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW2ldXSk7CisgICAgICBmcHJpbnRm
IChzdGRlcnIsICIgLT4gJXNcbiIsIHl5dG5hbWVbeXlyMVt5eW5dXSk7CisgICAgfQorI2VuZGlm
CisKKyQgICAvKiB0aGUgYWN0aW9uIGZpbGUgZ2V0cyBjb3BpZWQgaW4gaW4gcGxhY2Ugb2YgdGhp
cyBkb2xsYXJzaWduICovCisgIHl5dnNwIC09IHl5bGVuOworICB5eXNzcCAtPSB5eWxlbjsKKyNp
ZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgLT0geXlsZW47CisjZW5kaWYKKworI2lmIFlZREVC
VUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3Mg
LSAxOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3
aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsK
KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKKyAgKisreXl2
c3AgPSB5eXZhbDsKKworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCsrOworICBpZiAoeXls
ZW4gPT0gMCkKKyAgICB7CisgICAgICB5eWxzcC0+Zmlyc3RfbGluZSA9IHl5bGxvYy5maXJzdF9s
aW5lOworICAgICAgeXlsc3AtPmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5maXJzdF9jb2x1bW47Cisg
ICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwLTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxz
cC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AtMSktPmxhc3RfY29sdW1uOworICAgICAgeXlsc3AtPnRl
eHQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAo
eXlsc3AreXlsZW4tMSktPmxhc3RfbGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5
eWxzcCt5eWxlbi0xKS0+bGFzdF9jb2x1bW47CisgICAgfQorI2VuZGlmCisKKyAgLyogTm93ICJz
aGlmdCIgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLgorICAgICBEZXRlcm1pbmUgd2hhdCBz
dGF0ZSB0aGF0IGdvZXMgdG8sCisgICAgIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFj
ayB0bworICAgICBhbmQgdGhlIHJ1bGUgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9
IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlz
c3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVs
c2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5
bmV3c3RhdGU7CisKK3l5ZXJybGFiOiAgIC8qIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yICovCisK
KyAgaWYgKCEgeXllcnJzdGF0dXMpCisgICAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBm
cm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgICAgeworICAgICAgKyt5eW5l
cnJzOworCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0
ZV07CisKKyAgICAgIGlmICh5eW4gPiBZWUZMQUcgJiYgeXluIDwgWVlMQVNUKQorCXsKKwkgIGlu
dCBzaXplID0gMDsKKwkgIGNoYXIgKm1zZzsKKwkgIGludCB4LCBjb3VudDsKKworCSAgY291bnQg
PSAwOworCSAgLyogU3RhcnQgWCBhdCAteXluIGlmIG5lYyB0byBhdm9pZCBuZWdhdGl2ZSBpbmRl
eGVzIGluIHl5Y2hlY2suICAqLworCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJ
ICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJICAg
IGlmICh5eWNoZWNrW3ggKyB5eW5dID09IHgpCisJICAgICAgc2l6ZSArPSBzdHJsZW4oeXl0bmFt
ZVt4XSkgKyAxNSwgY291bnQrKzsKKwkgIG1zZyA9IChjaGFyICopIG1hbGxvYyhzaXplICsgMTUp
OworCSAgaWYgKG1zZyAhPSAwKQorCSAgICB7CisJICAgICAgc3RyY3B5KG1zZywgInBhcnNlIGVy
cm9yIik7CisKKwkgICAgICBpZiAoY291bnQgPCA1KQorCQl7CisJCSAgY291bnQgPSAwOworCQkg
IGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCQkgICAgICAgeCA8IChzaXplb2YoeXl0
bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgrKykKKwkJICAgIGlmICh5eWNoZWNrW3ggKyB5eW5d
ID09IHgpCisJCSAgICAgIHsKKwkJCXN0cmNhdChtc2csIGNvdW50ID09IDAgPyAiLCBleHBlY3Rp
bmcgYCIgOiAiIG9yIGAiKTsKKwkJCXN0cmNhdChtc2csIHl5dG5hbWVbeF0pOworCQkJc3RyY2F0
KG1zZywgIiciKTsKKwkJCWNvdW50Kys7CisJCSAgICAgIH0KKwkJfQorCSAgICAgIHl5ZXJyb3Io
bXNnKTsKKwkgICAgICBmcmVlKG1zZyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeXllcnJvciAo
InBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4Y2VlZGVkIik7CisJfQorICAgICAg
ZWxzZQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworCXl5ZXJyb3IoInBhcnNlIGVycm9y
Iik7CisgICAgfQorCisgIGdvdG8geXllcnJsYWIxOworeXllcnJsYWIxOiAgIC8qIGhlcmUgb24g
ZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uICovCisKKyAgaWYgKHl5ZXJyc3Rh
dHVzID09IDMpCisgICAgeworICAgICAgLyogaWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJl
dXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbiBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAg
ICAgIC8qIHJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dCAqLworICAgICAgaWYgKHl5
Y2hhciA9PSBZWUVPRikKKwlZWUFCT1JUOworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAo
eXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIs
IHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisjZW5kaWYKKworICAgICAgeXljaGFyID0gWVlF
TVBUWTsKKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9r
ZW4KKyAgICAgYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yIHRva2VuLiAgKi8KKworICB5eWVycnN0
YXR1cyA9IDM7CQkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMgKi8K
KworICBnb3RvIHl5ZXJyaGFuZGxlOworCit5eWVycmRlZmF1bHQ6ICAvKiBjdXJyZW50IHN0YXRl
IGRvZXMgbm90IGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIHRoZSBlcnJvciB0b2tlbi4gKi8KKwor
I2lmIDAKKyAgLyogVGhpcyBpcyB3cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdh
bnQgZXJyb3IgdG9rZW5zCisgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKyAgeXluID0geXlk
ZWZhY3RbeXlzdGF0ZV07ICAvKiBJZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2Vu
LCBvay4gIE90aGVyd2lzZSBwb3AgaXQuKi8KKyAgaWYgKHl5bikgZ290byB5eWRlZmF1bHQ7Cisj
ZW5kaWYKKworeXllcnJwb3A6ICAgLyogcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQg
Y2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4gKi8KKworICBpZiAoeXlzc3AgPT0geXlzcykg
WVlBQk9SVDsKKyAgeXl2c3AtLTsKKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworI2lmZGVmIFlZTFNQ
X05FRURFRAorICB5eWxzcC0tOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5
ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmlu
dGYgKHN0ZGVyciwgIkVycm9yOiBzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3Ax
ICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnBy
aW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworeXllcnJoYW5kbGU6CisKKyAg
eXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5
ZXJyZGVmYXVsdDsKKworICB5eW4gKz0gWVlURVJST1I7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+
IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisgICAgZ290byB5eWVycmRlZmF1
bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAg
ICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJycG9wOworICAgICAgeXluID0gLXl5bjsK
KyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBn
b3RvIHl5ZXJycG9wOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKwor
I2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNo
aWZ0aW5nIGVycm9yIHRva2VuLCAiKTsKKyNlbmRpZgorCisgICorK3l5dnNwID0geXlsdmFsOwor
I2lmZGVmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIHl5
c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvaW5jbHVkZS9FR0wvZWdsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzI5IEBACisvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4
OyAtKi0gKi8KKy8qIHZpOiBzZXQgc3c9NCB0cz04OiAqLworLyogUmVmZXJlbmNlIHZlcnNpb24g
b2YgZWdsLmggZm9yIEVHTCAxLjQuCisgKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAw
OS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICovCisKKy8qCisq
KiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0
aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBs
aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo
LAorKiogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBN
YXRlcmlhbHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxz
IGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMg
QVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBF
WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFN
QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LAorKiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOIFRIRSBNQVRFUklBTFMuCisqLworCisjaWZuZGVmIF9fZWdsX2hfCisjZGVmaW5lIF9fZWds
X2hfCisKKy8qIEFsbCBwbGF0Zm9ybS1kZXBlbmRlbnQgdHlwZXMgYW5kIG1hY3JvIGJvaWxlcnBs
YXRlIChzdWNoIGFzIEVHTEFQSQorICogYW5kIEVHTEFQSUVOVFJZKSBzaG91bGQgZ28gaW4gZWds
cGxhdGZvcm0uaC4KKyAqLworI2luY2x1ZGUgPEVHTC9lZ2xwbGF0Zm9ybS5oPgorCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEVHTCBUeXBlcyAqLworLyog
RUdMaW50IGlzIGRlZmluZWQgaW4gZWdscGxhdGZvcm0uaCAqLwordHlwZWRlZiB1bnNpZ25lZCBp
bnQgRUdMQm9vbGVhbjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IEVHTGVudW07Cit0eXBlZGVmIHZv
aWQgKkVHTENvbmZpZzsKK3R5cGVkZWYgdm9pZCAqRUdMQ29udGV4dDsKK3R5cGVkZWYgdm9pZCAq
RUdMRGlzcGxheTsKK3R5cGVkZWYgdm9pZCAqRUdMU3VyZmFjZTsKK3R5cGVkZWYgdm9pZCAqRUdM
Q2xpZW50QnVmZmVyOworCisvKiBFR0wgVmVyc2lvbmluZyAqLworI2RlZmluZSBFR0xfVkVSU0lP
Tl8xXzAJCQkxCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMQkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJ
T05fMV8yCQkJMQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzMJCQkxCisjZGVmaW5lIEVHTF9WRVJT
SU9OXzFfNAkJCTEKKworLyogRUdMIEVudW1lcmFudHMuIEJpdG1hc2tzIGFuZCBvdGhlciBleGNl
cHRpb25hbCBjYXNlcyBhc2lkZSwgbW9zdAorICogZW51bXMgYXJlIGFzc2lnbmVkIHVuaXF1ZSB2
YWx1ZXMgc3RhcnRpbmcgYXQgMHgzMDAwLgorICovCisKKy8qIEVHTCBhbGlhc2VzICovCisjZGVm
aW5lIEVHTF9GQUxTRQkJCTAKKyNkZWZpbmUgRUdMX1RSVUUJCQkxCisKKy8qIE91dC1vZi1iYW5k
IGhhbmRsZSB2YWx1ZXMgKi8KKyNkZWZpbmUgRUdMX0RFRkFVTFRfRElTUExBWQkJKChFR0xOYXRp
dmVEaXNwbGF5VHlwZSkwKQorI2RlZmluZSBFR0xfTk9fQ09OVEVYVAkJCSgoRUdMQ29udGV4dCkw
KQorI2RlZmluZSBFR0xfTk9fRElTUExBWQkJCSgoRUdMRGlzcGxheSkwKQorI2RlZmluZSBFR0xf
Tk9fU1VSRkFDRQkJCSgoRUdMU3VyZmFjZSkwKQorCisvKiBPdXQtb2YtYmFuZCBhdHRyaWJ1dGUg
dmFsdWUgKi8KKyNkZWZpbmUgRUdMX0RPTlRfQ0FSRQkJCSgoRUdMaW50KS0xKQorCisvKiBFcnJv
cnMgLyBHZXRFcnJvciByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIEVHTF9TVUNDRVNTCQkJMHgz
MDAwCisjZGVmaW5lIEVHTF9OT1RfSU5JVElBTElaRUQJCTB4MzAwMQorI2RlZmluZSBFR0xfQkFE
X0FDQ0VTUwkJCTB4MzAwMgorI2RlZmluZSBFR0xfQkFEX0FMTE9DCQkJMHgzMDAzCisjZGVmaW5l
IEVHTF9CQURfQVRUUklCVVRFCQkweDMwMDQKKyNkZWZpbmUgRUdMX0JBRF9DT05GSUcJCQkweDMw
MDUKKyNkZWZpbmUgRUdMX0JBRF9DT05URVhUCQkJMHgzMDA2CisjZGVmaW5lIEVHTF9CQURfQ1VS
UkVOVF9TVVJGQUNFCQkweDMwMDcKKyNkZWZpbmUgRUdMX0JBRF9ESVNQTEFZCQkJMHgzMDA4Cisj
ZGVmaW5lIEVHTF9CQURfTUFUQ0gJCQkweDMwMDkKKyNkZWZpbmUgRUdMX0JBRF9OQVRJVkVfUElY
TUFQCQkweDMwMEEKKyNkZWZpbmUgRUdMX0JBRF9OQVRJVkVfV0lORE9XCQkweDMwMEIKKyNkZWZp
bmUgRUdMX0JBRF9QQVJBTUVURVIJCTB4MzAwQworI2RlZmluZSBFR0xfQkFEX1NVUkZBQ0UJCQkw
eDMwMEQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfTE9TVAkJMHgzMDBFCS8qIEVHTCAxLjEgLSBJTUdf
cG93ZXJfbWFuYWdlbWVudCAqLworCisvKiBSZXNlcnZlZCAweDMwMEYtMHgzMDFGIGZvciBhZGRp
dGlvbmFsIGVycm9ycyAqLworCisvKiBDb25maWcgYXR0cmlidXRlcyAqLworI2RlZmluZSBFR0xf
QlVGRkVSX1NJWkUJCQkweDMwMjAKKyNkZWZpbmUgRUdMX0FMUEhBX1NJWkUJCQkweDMwMjEKKyNk
ZWZpbmUgRUdMX0JMVUVfU0laRQkJCTB4MzAyMgorI2RlZmluZSBFR0xfR1JFRU5fU0laRQkJCTB4
MzAyMworI2RlZmluZSBFR0xfUkVEX1NJWkUJCQkweDMwMjQKKyNkZWZpbmUgRUdMX0RFUFRIX1NJ
WkUJCQkweDMwMjUKKyNkZWZpbmUgRUdMX1NURU5DSUxfU0laRQkJMHgzMDI2CisjZGVmaW5lIEVH
TF9DT05GSUdfQ0FWRUFUCQkweDMwMjcKKyNkZWZpbmUgRUdMX0NPTkZJR19JRAkJCTB4MzAyOAor
I2RlZmluZSBFR0xfTEVWRUwJCQkweDMwMjkKKyNkZWZpbmUgRUdMX01BWF9QQlVGRkVSX0hFSUdI
VAkJMHgzMDJBCisjZGVmaW5lIEVHTF9NQVhfUEJVRkZFUl9QSVhFTFMJCTB4MzAyQgorI2RlZmlu
ZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEgJCTB4MzAyQworI2RlZmluZSBFR0xfTkFUSVZFX1JFTkRF
UkFCTEUJCTB4MzAyRAorI2RlZmluZSBFR0xfTkFUSVZFX1ZJU1VBTF9JRAkJMHgzMDJFCisjZGVm
aW5lIEVHTF9OQVRJVkVfVklTVUFMX1RZUEUJCTB4MzAyRgorI2RlZmluZSBFR0xfU0FNUExFUwkJ
CTB4MzAzMQorI2RlZmluZSBFR0xfU0FNUExFX0JVRkZFUlMJCTB4MzAzMgorI2RlZmluZSBFR0xf
U1VSRkFDRV9UWVBFCQkweDMwMzMKKyNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX1RZUEUJCTB4MzAz
NAorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfQkxVRV9WQUxVRQkweDMwMzUKKyNkZWZpbmUgRUdM
X1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVFCTB4MzAzNgorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRf
UkVEX1ZBTFVFCTB4MzAzNworI2RlZmluZSBFR0xfTk9ORQkJCTB4MzAzOAkvKiBBdHRyaWIgbGlz
dCB0ZXJtaW5hdG9yICovCisjZGVmaW5lIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCCQkweDMwMzkK
KyNkZWZpbmUgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBCTB4MzAzQQorI2RlZmluZSBFR0xfTUlO
X1NXQVBfSU5URVJWQUwJCTB4MzAzQgorI2RlZmluZSBFR0xfTUFYX1NXQVBfSU5URVJWQUwJCTB4
MzAzQworI2RlZmluZSBFR0xfTFVNSU5BTkNFX1NJWkUJCTB4MzAzRAorI2RlZmluZSBFR0xfQUxQ
SEFfTUFTS19TSVpFCQkweDMwM0UKKyNkZWZpbmUgRUdMX0NPTE9SX0JVRkZFUl9UWVBFCQkweDMw
M0YKKyNkZWZpbmUgRUdMX1JFTkRFUkFCTEVfVFlQRQkJMHgzMDQwCisjZGVmaW5lIEVHTF9NQVRD
SF9OQVRJVkVfUElYTUFQCQkweDMwNDEJLyogUHNldWRvLWF0dHJpYnV0ZSAobm90IHF1ZXJ5YWJs
ZSkgKi8KKyNkZWZpbmUgRUdMX0NPTkZPUk1BTlQJCQkweDMwNDIKKworLyogUmVzZXJ2ZWQgMHgz
MDQxLTB4MzA0RiBmb3IgYWRkaXRpb25hbCBjb25maWcgYXR0cmlidXRlcyAqLworCisvKiBDb25m
aWcgYXR0cmlidXRlIHZhbHVlcyAqLworI2RlZmluZSBFR0xfU0xPV19DT05GSUcJCQkweDMwNTAJ
LyogRUdMX0NPTkZJR19DQVZFQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX05PTl9DT05GT1JNQU5U
X0NPTkZJRwkweDMwNTEJLyogRUdMX0NPTkZJR19DQVZFQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdM
X1RSQU5TUEFSRU5UX1JHQgkJMHgzMDUyCS8qIEVHTF9UUkFOU1BBUkVOVF9UWVBFIHZhbHVlICov
CisjZGVmaW5lIEVHTF9SR0JfQlVGRkVSCQkJMHgzMDhFCS8qIEVHTF9DT0xPUl9CVUZGRVJfVFlQ
RSB2YWx1ZSAqLworI2RlZmluZSBFR0xfTFVNSU5BTkNFX0JVRkZFUgkJMHgzMDhGCS8qIEVHTF9D
T0xPUl9CVUZGRVJfVFlQRSB2YWx1ZSAqLworCisvKiBNb3JlIGNvbmZpZyBhdHRyaWJ1dGUgdmFs
dWVzLCBmb3IgRUdMX1RFWFRVUkVfRk9STUFUICovCisjZGVmaW5lIEVHTF9OT19URVhUVVJFCQkJ
MHgzMDVDCisjZGVmaW5lIEVHTF9URVhUVVJFX1JHQgkJCTB4MzA1RAorI2RlZmluZSBFR0xfVEVY
VFVSRV9SR0JBCQkweDMwNUUKKyNkZWZpbmUgRUdMX1RFWFRVUkVfMkQJCQkweDMwNUYKKworLyog
Q29uZmlnIGF0dHJpYnV0ZSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1BCVUZGRVJfQklUCQkJ
MHgwMDAxCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9QSVhN
QVBfQklUCQkJMHgwMDAyCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5l
IEVHTF9XSU5ET1dfQklUCQkJMHgwMDA0CS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICov
CisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUl9CSVQJMHgwMDIwCS8qIEVHTF9TVVJG
QUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFX0JJ
VAkweDAwNDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX01V
TFRJU0FNUExFX1JFU09MVkVfQk9YX0JJVCAweDAyMDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNr
IGJpdHMgKi8KKyNkZWZpbmUgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCAweDA0MDAJ
LyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKworI2RlZmluZSBFR0xfT1BFTkdMX0VT
X0JJVAkJMHgwMDAxCS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5l
IEVHTF9PUEVOVkdfQklUCQkJMHgwMDAyCS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRz
ICovCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMyX0JJVAkJMHgwMDA0CS8qIEVHTF9SRU5ERVJBQkxF
X1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9PUEVOR0xfQklUCQkJMHgwMDA4CS8qIEVH
TF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisKKy8qIFF1ZXJ5U3RyaW5nIHRhcmdldHMg
Ki8KKyNkZWZpbmUgRUdMX1ZFTkRPUgkJCTB4MzA1MworI2RlZmluZSBFR0xfVkVSU0lPTgkJCTB4
MzA1NAorI2RlZmluZSBFR0xfRVhURU5TSU9OUwkJCTB4MzA1NQorI2RlZmluZSBFR0xfQ0xJRU5U
X0FQSVMJCQkweDMwOEQKKworLyogUXVlcnlTdXJmYWNlIC8gU3VyZmFjZUF0dHJpYiAvIENyZWF0
ZVBidWZmZXJTdXJmYWNlIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0hFSUdIVAkJCTB4MzA1Ngor
I2RlZmluZSBFR0xfV0lEVEgJCQkweDMwNTcKKyNkZWZpbmUgRUdMX0xBUkdFU1RfUEJVRkZFUgkJ
MHgzMDU4CisjZGVmaW5lIEVHTF9URVhUVVJFX0ZPUk1BVAkJMHgzMDgwCisjZGVmaW5lIEVHTF9U
RVhUVVJFX1RBUkdFVAkJMHgzMDgxCisjZGVmaW5lIEVHTF9NSVBNQVBfVEVYVFVSRQkJMHgzMDgy
CisjZGVmaW5lIEVHTF9NSVBNQVBfTEVWRUwJCTB4MzA4MworI2RlZmluZSBFR0xfUkVOREVSX0JV
RkZFUgkJMHgzMDg2CisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFCQkweDMwODcKKyNkZWZpbmUg
RUdMX1ZHX0FMUEhBX0ZPUk1BVAkJMHgzMDg4CisjZGVmaW5lIEVHTF9IT1JJWk9OVEFMX1JFU09M
VVRJT04JMHgzMDkwCisjZGVmaW5lIEVHTF9WRVJUSUNBTF9SRVNPTFVUSU9OCQkweDMwOTEKKyNk
ZWZpbmUgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTwkJMHgzMDkyCisjZGVmaW5lIEVHTF9TV0FQX0JF
SEFWSU9SCQkweDMwOTMKKyNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09MVkUJCTB4MzA5OQor
CisvKiBFR0xfUkVOREVSX0JVRkZFUiB2YWx1ZXMgLyBCaW5kVGV4SW1hZ2UgLyBSZWxlYXNlVGV4
SW1hZ2UgYnVmZmVyIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0JBQ0tfQlVGRkVSCQkJMHgzMDg0
CisjZGVmaW5lIEVHTF9TSU5HTEVfQlVGRkVSCQkweDMwODUKKworLyogT3BlblZHIGNvbG9yIHNw
YWNlcyAqLworI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9zUkdCCQkweDMwODkJLyogRUdMX1ZH
X0NPTE9SU1BBQ0UgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSCTB4
MzA4QQkvKiBFR0xfVkdfQ09MT1JTUEFDRSB2YWx1ZSAqLworCisvKiBPcGVuVkcgYWxwaGEgZm9y
bWF0cyAqLworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX05PTlBSRQkweDMwOEIJLyogRUdM
X0FMUEhBX0ZPUk1BVCB2YWx1ZSAqLworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRQkJ
MHgzMDhDCS8qIEVHTF9BTFBIQV9GT1JNQVQgdmFsdWUgKi8KKworLyogQ29uc3RhbnQgc2NhbGUg
ZmFjdG9yIGJ5IHdoaWNoIGZyYWN0aW9uYWwgZGlzcGxheSByZXNvbHV0aW9ucyAmCisgKiBhc3Bl
Y3QgcmF0aW8gYXJlIHNjYWxlZCB3aGVuIHF1ZXJpZWQgYXMgaW50ZWdlciB2YWx1ZXMuCisgKi8K
KyNkZWZpbmUgRUdMX0RJU1BMQVlfU0NBTElORwkJMTAwMDAKKworLyogVW5rbm93biBkaXNwbGF5
IHJlc29sdXRpb24vYXNwZWN0IHJhdGlvICovCisjZGVmaW5lIEVHTF9VTktOT1dOCQkJKChFR0xp
bnQpLTEpCisKKy8qIEJhY2sgYnVmZmVyIHN3YXAgYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9C
VUZGRVJfUFJFU0VSVkVECQkweDMwOTQJLyogRUdMX1NXQVBfQkVIQVZJT1IgdmFsdWUgKi8KKyNk
ZWZpbmUgRUdMX0JVRkZFUl9ERVNUUk9ZRUQJCTB4MzA5NQkvKiBFR0xfU1dBUF9CRUhBVklPUiB2
YWx1ZSAqLworCisvKiBDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciBidWZmZXIgdHlwZXMg
Ki8KKyNkZWZpbmUgRUdMX09QRU5WR19JTUFHRQkJMHgzMDk2CisKKy8qIFF1ZXJ5Q29udGV4dCB0
YXJnZXRzICovCisjZGVmaW5lIEVHTF9DT05URVhUX0NMSUVOVF9UWVBFCQkweDMwOTcKKworLyog
Q3JlYXRlQ29udGV4dCBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEVHTF9DT05URVhUX0NMSUVOVF9W
RVJTSU9OCTB4MzA5OAorCisvKiBNdWx0aXNhbXBsZSByZXNvbHV0aW9uIGJlaGF2aW9ycyAqLwor
I2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRV9ERUZBVUxUIDB4MzA5QQkvKiBFR0xfTVVM
VElTQU1QTEVfUkVTT0xWRSB2YWx1ZSAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xW
RV9CT1gJMHgzMDlCCS8qIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFIHZhbHVlICovCisKKy8qIEJp
bmRBUEkvUXVlcnlBUEkgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfT1BFTkdMX0VTX0FQSQkJMHgz
MEEwCisjZGVmaW5lIEVHTF9PUEVOVkdfQVBJCQkJMHgzMEExCisjZGVmaW5lIEVHTF9PUEVOR0xf
QVBJCQkJMHgzMEEyCisKKy8qIEdldEN1cnJlbnRTdXJmYWNlIHRhcmdldHMgKi8KKyNkZWZpbmUg
RUdMX0RSQVcJCQkweDMwNTkKKyNkZWZpbmUgRUdMX1JFQUQJCQkweDMwNUEKKworLyogV2FpdE5h
dGl2ZSBlbmdpbmVzICovCisjZGVmaW5lIEVHTF9DT1JFX05BVElWRV9FTkdJTkUJCTB4MzA1Qgor
CisvKiBFR0wgMS4yIHRva2VucyByZW5hbWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICov
CisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFCQkJRUdMX1ZHX0NPTE9SU1BBQ0UKKyNkZWZpbmUgRUdM
X0FMUEhBX0ZPUk1BVAkJRUdMX1ZHX0FMUEhBX0ZPUk1BVAorI2RlZmluZSBFR0xfQ09MT1JTUEFD
RV9zUkdCCQlFR0xfVkdfQ09MT1JTUEFDRV9zUkdCCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFX0xJ
TkVBUgkJRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRf
Tk9OUFJFCQlFR0xfVkdfQUxQSEFfRk9STUFUX05PTlBSRQorI2RlZmluZSBFR0xfQUxQSEFfRk9S
TUFUX1BSRQkJRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkUKKworLyogRUdMIGV4dGVuc2lvbnMgbXVz
dCByZXF1ZXN0IGVudW0gYmxvY2tzIGZyb20gdGhlIEtocm9ub3MKKyAqIEFQSSBSZWdpc3RyYXIs
IHdobyBtYWludGFpbnMgdGhlIGVudW1lcmFudCByZWdpc3RyeS4gU3VibWl0CisgKiBhIGJ1ZyBp
biBLaHJvbm9zIEJ1Z3ppbGxhIGFnYWluc3QgdGFzayAiUmVnaXN0cnkiLgorICovCisKKworCisv
KiBFR0wgRnVuY3Rpb25zICovCisKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsR2V0RXJy
b3Iodm9pZCk7CisKK0VHTEFQSSBFR0xEaXNwbGF5IEVHTEFQSUVOVFJZIGVnbEdldERpc3BsYXko
RUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xp
bnQgKm1pbm9yKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFRlcm1pbmF0ZShF
R0xEaXNwbGF5IGRweSk7CisKK0VHTEFQSSBjb25zdCBjaGFyICogRUdMQVBJRU5UUlkgZWdsUXVl
cnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGludCBuYW1lKTsKKworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsR2V0Q29uZmlncyhFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnICpj
b25maWdzLAorCQkJIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKTsKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRw
eSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwKKwkJCSAgIEVHTENvbmZpZyAqY29uZmlncywg
RUdMaW50IGNvbmZpZ19zaXplLAorCQkJICAgRUdMaW50ICpudW1fY29uZmlnKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwg
RUdMQ29uZmlnIGNvbmZpZywKKwkJCSAgICAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFs
dWUpOworCitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVXaW5kb3dTdXJm
YWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJCSAgRUdMTmF0aXZlV2lu
ZG93VHlwZSB3aW4sCisJCQkJICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBF
R0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJCSAgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShF
R0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKKwkJCQkgIEVHTE5hdGl2ZVBpeG1hcFR5
cGUgcGl4bWFwLAorCQkJCSAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdM
Qm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdM
U3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5
U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbEJpbmRBUEkoRUdMZW51bSBhcGkpOworRUdMQVBJIEVHTGVudW0gRUdMQVBJRU5UUlkg
ZWdsUXVlcnlBUEkodm9pZCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdh
aXRDbGllbnQodm9pZCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFJlbGVh
c2VUaHJlYWQodm9pZCk7CisKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKAorCSAgICAgIEVHTERpc3BsYXkgZHB5LCBFR0xlbnVt
IGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCisJICAgICAgRUdMQ29uZmlnIGNvbmZp
ZywgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFj
ZSwKKwkJCSAgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJm
YWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5U
UlkgZWdsUmVsZWFzZVRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2Us
IEVHTGludCBidWZmZXIpOworCisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3
YXBJbnRlcnZhbChFR0xEaXNwbGF5IGRweSwgRUdMaW50IGludGVydmFsKTsKKworCitFR0xBUEkg
RUdMQ29udGV4dCBFR0xBUElFTlRSWSBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLAorCQkJICAgIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwKKwkJCSAg
ICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbERlc3Ryb3lDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCk7CitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRw
eSwgRUdMU3VyZmFjZSBkcmF3LAorCQkJICBFR0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4
KTsKKworRUdMQVBJIEVHTENvbnRleHQgRUdMQVBJRU5UUlkgZWdsR2V0Q3VycmVudENvbnRleHQo
dm9pZCk7CitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50U3VyZmFj
ZShFR0xpbnQgcmVhZGRyYXcpOworRUdMQVBJIEVHTERpc3BsYXkgRUdMQVBJRU5UUlkgZWdsR2V0
Q3VycmVudERpc3BsYXkodm9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xR
dWVyeUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LAorCQkJICAgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbFdhaXRHTCh2b2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdh
aXROYXRpdmUoRUdMaW50IGVuZ2luZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbENvcHlCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmZhY2UsCisJCQkgIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0KTsKKwor
LyogVGhpcyBpcyBhIGdlbmVyaWMgZnVuY3Rpb24gcG9pbnRlciB0eXBlLCB3aG9zZSBuYW1lIGlu
ZGljYXRlcyBpdCBtdXN0CisgKiBiZSBjYXN0IHRvIHRoZSBwcm9wZXIgdHlwZSAqYW5kIGNhbGxp
bmcgY29udmVudGlvbiogYmVmb3JlIHVzZS4KKyAqLwordHlwZWRlZiB2b2lkICgqX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSkodm9pZCk7CisKKy8qIE5vdywgZGVmaW5l
IGVnbEdldFByb2NBZGRyZXNzIHVzaW5nIHRoZSBnZW5lcmljIGZ1bmN0aW9uIHB0ci4gdHlwZSAq
LworRUdMQVBJIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgRUdMQVBJ
RU5UUlkKKyAgICAgICBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2VnbF9oXyAqLwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0VHTC9lZ2xleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUv
RUdML2VnbGV4dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAK
KyNpZm5kZWYgX19lZ2xleHRfaF8KKyNkZWZpbmUgX19lZ2xleHRfaF8KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3
LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBj
b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl
cyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0
IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoq
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg
YmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg
dGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMi
LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJ
TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H
RU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJX
SVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBN
QVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgor
Ki8KKworI2luY2x1ZGUgPEVHTC9lZ2xwbGF0Zm9ybS5oPgorCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSGVhZGVy
IGZpbGUgdmVyc2lvbiBudW1iZXIgKi8KKy8qIEN1cnJlbnQgdmVyc2lvbiBhdCBodHRwOi8vd3d3
Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2VnbC8gKi8KKy8qICRSZXZpc2lvbjogMTA3OTUgJCBvbiAk
RGF0ZTogMjAxMC0wMy0xOSAxNzowNDoxNyAtMDcwMCAoRnJpLCAxOSBNYXIgMjAxMCkgJCAqLwor
I2RlZmluZSBFR0xfRUdMRVhUX1ZFUlNJT04gNQorCisjaWZuZGVmIEVHTF9LSFJfY29uZmlnX2F0
dHJpYnMKKyNkZWZpbmUgRUdMX0tIUl9jb25maWdfYXR0cmlicyAxCisjZGVmaW5lIEVHTF9DT05G
T1JNQU5UX0tIUgkJCTB4MzA0MgkvKiBFR0xDb25maWcgYXR0cmlidXRlICovCisjZGVmaW5lIEVH
TF9WR19DT0xPUlNQQUNFX0xJTkVBUl9CSVRfS0hSCTB4MDAyMAkvKiBFR0xfU1VSRkFDRV9UWVBF
IGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFX0JJVF9LSFIJCTB4
MDA0MAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZW5kaWYKKworI2lmbmRlZiBF
R0xfS0hSX2xvY2tfc3VyZmFjZQorI2RlZmluZSBFR0xfS0hSX2xvY2tfc3VyZmFjZSAxCisjZGVm
aW5lIEVHTF9SRUFEX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDAxCS8qIEVHTF9MT0NLX1VTQUdFX0hJ
TlRfS0hSIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9XUklURV9TVVJGQUNFX0JJVF9LSFIJCTB4
MDAwMgkvKiBFR0xfTE9DS19VU0FHRV9ISU5UX0tIUiBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xf
TE9DS19TVVJGQUNFX0JJVF9LSFIJCTB4MDA4MAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxk
ICovCisjZGVmaW5lIEVHTF9PUFRJTUFMX0ZPUk1BVF9CSVRfS0hSCQkweDAxMDAJLyogRUdMX1NV
UkZBQ0VfVFlQRSBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfTUFUQ0hfRk9STUFUX0tIUgkJCTB4
MzA0MwkvKiBFR0xDb25maWcgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCXzU2
NV9FWEFDVF9LSFIJCTB4MzBDMAkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLworI2Rl
ZmluZSBFR0xfRk9STUFUX1JHQl81NjVfS0hSCQkJMHgzMEMxCS8qIEVHTF9NQVRDSF9GT1JNQVRf
S0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCQV84ODg4X0VYQUNUX0tIUgkJMHgz
MEMyCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRf
UkdCQV84ODg4X0tIUgkJMHgzMEMzCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisj
ZGVmaW5lIEVHTF9NQVBfUFJFU0VSVkVfUElYRUxTX0tIUgkJMHgzMEM0CS8qIGVnbExvY2tTdXJm
YWNlS0hSIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfTE9DS19VU0FHRV9ISU5UX0tIUgkJCTB4
MzBDNQkvKiBlZ2xMb2NrU3VyZmFjZUtIUiBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1B
UF9QT0lOVEVSX0tIUgkJCTB4MzBDNgkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisj
ZGVmaW5lIEVHTF9CSVRNQVBfUElUQ0hfS0hSCQkJMHgzMEM3CS8qIGVnbFF1ZXJ5U3VyZmFjZSBh
dHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9PUklHSU5fS0hSCQkJMHgzMEM4CS8qIGVn
bFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9SRURf
T0ZGU0VUX0tIUgkJMHgzMEM5CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZp
bmUgRUdMX0JJVE1BUF9QSVhFTF9HUkVFTl9PRkZTRVRfS0hSCTB4MzBDQQkvKiBlZ2xRdWVyeVN1
cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfQkxVRV9PRkZTRVRf
S0hSCTB4MzBDQgkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9C
SVRNQVBfUElYRUxfQUxQSEFfT0ZGU0VUX0tIUgkweDMwQ0MJLyogZWdsUXVlcnlTdXJmYWNlIGF0
dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0xVTUlOQU5DRV9PRkZTRVRfS0hS
CTB4MzBDRAkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9MT1dF
Ul9MRUZUX0tIUgkJCTB4MzBDRQkvKiBFR0xfQklUTUFQX09SSUdJTl9LSFIgdmFsdWUgKi8KKyNk
ZWZpbmUgRUdMX1VQUEVSX0xFRlRfS0hSCQkJMHgzMENGCS8qIEVHTF9CSVRNQVBfT1JJR0lOX0tI
UiB2YWx1ZSAqLworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsTG9ja1N1cmZhY2VLSFIgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdM
U3VyZmFjZSBzdXJmYWNlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xC
b29sZWFuIEVHTEFQSUVOVFJZIGVnbFVubG9ja1N1cmZhY2VLSFIgKEVHTERpc3BsYXkgZGlzcGxh
eSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMg
Ki8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTExPQ0tTVVJGQUNFS0hS
UFJPQykgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFVOTE9DS1NVUkZBQ0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1
cmZhY2UpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9pbWFnZQorI2RlZmluZSBFR0xfS0hS
X2ltYWdlIDEKKyNkZWZpbmUgRUdMX05BVElWRV9QSVhNQVBfS0hSCQkJMHgzMEIwCS8qIGVnbENy
ZWF0ZUltYWdlS0hSIHRhcmdldCAqLwordHlwZWRlZiB2b2lkICpFR0xJbWFnZUtIUjsKKyNkZWZp
bmUgRUdMX05PX0lNQUdFX0tIUgkJCSgoRUdMSW1hZ2VLSFIpMCkKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSBFR0xJbWFnZUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVJbWFn
ZUtIUiAoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xlbnVtIHRhcmdldCwgRUdM
Q2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95SW1hZ2VLSFIgKEVHTERpc3BsYXkgZHB5
LCBFR0xJbWFnZUtIUiBpbWFnZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTEltYWdlS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFSU1BR0VLSFJQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xlbnVtIHRhcmdldCwgRUdM
Q2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVm
IEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DKSAoRUdM
RGlzcGxheSBkcHksIEVHTEltYWdlS0hSIGltYWdlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9L
SFJfdmdfcGFyZW50X2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfdmdfcGFyZW50X2ltYWdlIDEKKyNk
ZWZpbmUgRUdMX1ZHX1BBUkVOVF9JTUFHRV9LSFIJCQkweDMwQkEJLyogZWdsQ3JlYXRlSW1hZ2VL
SFIgdGFyZ2V0ICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfMkRfaW1h
Z2UKKyNkZWZpbmUgRUdMX0tIUl9nbF90ZXh0dXJlXzJEX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dM
X1RFWFRVUkVfMkRfS0hSCQkJMHgzMEIxCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwor
I2RlZmluZSBFR0xfR0xfVEVYVFVSRV9MRVZFTF9LSFIJCTB4MzBCQwkvKiBlZ2xDcmVhdGVJbWFn
ZUtIUiBhdHRyaWJ1dGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfdGV4dHVyZV9j
dWJlbWFwX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfdGV4dHVyZV9jdWJlbWFwX2ltYWdlIDEK
KyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWF9LSFIJMHgzMEIzCS8q
IGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YX0tIUgkweDMwQjQJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICov
CisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lfS0hSCTB4MzBCNQkv
KiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWV9LSFIJMHgzMEI2CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAq
LworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aX0tIUgkweDMwQjcJ
LyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1pfS0hSCTB4MzBCOAkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9pbWFnZQorI2RlZmlu
ZSBFR0xfS0hSX2dsX3RleHR1cmVfM0RfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xfVEVYVFVSRV8z
RF9LSFIJCQkweDMwQjIJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVH
TF9HTF9URVhUVVJFX1pPRkZTRVRfS0hSCQkweDMwQkQJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgYXR0
cmlidXRlICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3JlbmRlcmJ1ZmZlcl9pbWFn
ZQorI2RlZmluZSBFR0xfS0hSX2dsX3JlbmRlcmJ1ZmZlcl9pbWFnZSAxCisjZGVmaW5lIEVHTF9H
TF9SRU5ERVJCVUZGRVJfS0hSCQkJMHgzMEI5CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAq
LworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9yZXVzYWJsZV9zeW5jCisjZGVmaW5lIEVHTF9L
SFJfcmV1c2FibGVfc3luYyAxCisKK3R5cGVkZWYgdm9pZCogRUdMU3luY0tIUjsKK3R5cGVkZWYg
a2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVLSFI7CisKKyNkZWZpbmUgRUdMX1NZ
TkNfU1RBVFVTX0tIUgkJCTB4MzBGMQorI2RlZmluZSBFR0xfU0lHTkFMRURfS0hSCQkJMHgzMEYy
CisjZGVmaW5lIEVHTF9VTlNJR05BTEVEX0tIUgkJCTB4MzBGMworI2RlZmluZSBFR0xfVElNRU9V
VF9FWFBJUkVEX0tIUgkJCTB4MzBGNQorI2RlZmluZSBFR0xfQ09ORElUSU9OX1NBVElTRklFRF9L
SFIJCTB4MzBGNgorI2RlZmluZSBFR0xfU1lOQ19UWVBFX0tIUgkJCTB4MzBGNworI2RlZmluZSBF
R0xfU1lOQ19SRVVTQUJMRV9LSFIJCQkweDMwRkEKKyNkZWZpbmUgRUdMX1NZTkNfRkxVU0hfQ09N
TUFORFNfQklUX0tIUgkJMHgwMDAxCS8qIGVnbENsaWVudFdhaXRTeW5jS0hSIDxmbGFncz4gYml0
ZmllbGQgKi8KKyNkZWZpbmUgRUdMX0ZPUkVWRVJfS0hSCQkJCTB4RkZGRkZGRkZGRkZGRkZGRnVs
bAorI2RlZmluZSBFR0xfTk9fU1lOQ19LSFIJCQkJKChFR0xTeW5jS0hSKTApCisjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3luY0tIUiBFR0xBUElFTlRSWSBlZ2xDcmVh
dGVTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIHR5cGUsIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveVN5bmNL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQ
SUVOVFJZIGVnbENsaWVudFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGludCBmbGFncywgRUdMVGltZUtIUiB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFu
IEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIg
c3luYywgRUdMZW51bSBtb2RlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdl
dFN5bmNBdHRyaWJLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGF0
dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVT
ICovCit0eXBlZGVmIEVHTFN5bmNLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTWU5DS0hS
UFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIHR5cGUsIGNvbnN0IEVHTGludCAqYXR0cmli
X2xpc3QpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNZ
TkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYyk7Cit0eXBlZGVmIEVH
TGludCAoRUdMQVBJRU5UUllQIFBGTkVHTENMSUVOVFdBSVRTWU5DS0hSUFJPQykgKEVHTERpc3Bs
YXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZUtIUiB0aW1lb3V0
KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNJR05BTFNZTkNLSFJQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMZW51bSBtb2RlKTsKK3R5
cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNZTkNBVFRSSUJLSFJQUk9D
KSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdM
aW50ICp2YWx1ZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdlX2Jhc2UKKyNkZWZp
bmUgRUdMX0tIUl9pbWFnZV9iYXNlIDEKKy8qIE1vc3QgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEVH
TF9LSFJfaW1hZ2VfcGl4bWFwIGFib3ZlICovCisjZGVmaW5lIEVHTF9JTUFHRV9QUkVTRVJWRURf
S0hSCQkJMHgzMEQyCS8qIGVnbENyZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAqLworI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0tIUl9pbWFnZV9waXhtYXAKKyNkZWZpbmUgRUdMX0tIUl9pbWFnZV9waXht
YXAgMQorLyogSW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEVHTF9LSFJfaW1hZ2UgYWJvdmUgKi8KKyNl
bmRpZgorCisjaWZuZGVmIEVHTF9JTUdfY29udGV4dF9wcmlvcml0eQorI2RlZmluZSBFR0xfSU1H
X2NvbnRleHRfcHJpb3JpdHkgMQorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9MRVZFTF9J
TUcJCTB4MzEwMAorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9ISUdIX0lNRwkJMHgzMTAx
CisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX01FRElVTV9JTUcJCTB4MzEwMgorI2RlZmlu
ZSBFR0xfQ09OVEVYVF9QUklPUklUWV9MT1dfSU1HCQkweDMxMDMKKyNlbmRpZgorCisjaWZuZGVm
IEVHTF9OVl9jb3ZlcmFnZV9zYW1wbGUKKyNkZWZpbmUgRUdMX05WX2NvdmVyYWdlX3NhbXBsZSAx
CisjZGVmaW5lIEVHTF9DT1ZFUkFHRV9CVUZGRVJTX05WIDB4MzBFMAorI2RlZmluZSBFR0xfQ09W
RVJBR0VfU0FNUExFU19OViAweDMwRTEKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl9kZXB0aF9u
b25saW5lYXIKKyNkZWZpbmUgRUdMX05WX2RlcHRoX25vbmxpbmVhciAxCisjZGVmaW5lIEVHTF9E
RVBUSF9FTkNPRElOR19OViAweDMwRTIKKyNkZWZpbmUgRUdMX0RFUFRIX0VOQ09ESU5HX05PTkVf
TlYgMAorI2RlZmluZSBFR0xfREVQVEhfRU5DT0RJTkdfTk9OTElORUFSX05WIDB4MzBFMworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX05WX3N5bmMKKyNkZWZpbmUgRUdMX05WX3N5bmMgMQorI2RlZmlu
ZSBFR0xfU1lOQ19QUklPUl9DT01NQU5EU19DT01QTEVURV9OVgkweDMwRTYKKyNkZWZpbmUgRUdM
X1NZTkNfU1RBVFVTX05WCQkJMHgzMEU3CisjZGVmaW5lIEVHTF9TSUdOQUxFRF9OVgkJCQkweDMw
RTgKKyNkZWZpbmUgRUdMX1VOU0lHTkFMRURfTlYJCQkweDMwRTkKKyNkZWZpbmUgRUdMX1NZTkNf
RkxVU0hfQ09NTUFORFNfQklUX05WCQkweDAwMDEKKyNkZWZpbmUgRUdMX0ZPUkVWRVJfTlYJCQkJ
MHhGRkZGRkZGRkZGRkZGRkZGdWxsCisjZGVmaW5lIEVHTF9BTFJFQURZX1NJR05BTEVEX05WCQkJ
MHgzMEVBCisjZGVmaW5lIEVHTF9USU1FT1VUX0VYUElSRURfTlYJCQkweDMwRUIKKyNkZWZpbmUg
RUdMX0NPTkRJVElPTl9TQVRJU0ZJRURfTlYJCTB4MzBFQworI2RlZmluZSBFR0xfU1lOQ19UWVBF
X05WCQkJMHgzMEVECisjZGVmaW5lIEVHTF9TWU5DX0NPTkRJVElPTl9OVgkJCTB4MzBFRQorI2Rl
ZmluZSBFR0xfU1lOQ19GRU5DRV9OVgkJCTB4MzBFRgorI2RlZmluZSBFR0xfTk9fU1lOQ19OVgkJ
CQkoKEVHTFN5bmNOVikwKQordHlwZWRlZiB2b2lkKiBFR0xTeW5jTlY7Cit0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBFR0xUaW1lTlY7CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitF
R0xTeW5jTlYgZWdsQ3JlYXRlRmVuY2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNv
bmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xCb29sZWFuIGVnbERlc3Ry
b3lTeW5jTlYgKEVHTFN5bmNOViBzeW5jKTsKK0VHTEJvb2xlYW4gZWdsRmVuY2VOViAoRUdMU3lu
Y05WIHN5bmMpOworRUdMaW50IGVnbENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBF
R0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK0VHTEJvb2xlYW4gZWdsU2lnbmFsU3lu
Y05WIChFR0xTeW5jTlYgc3luYywgRUdMZW51bSBtb2RlKTsKK0VHTEJvb2xlYW4gZWdsR2V0U3lu
Y0F0dHJpYk5WIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN5bmNO
ViAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURUZFTkNFU1lOQ05WUFJPQykgKEVHTERpc3BsYXkg
ZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBl
ZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xERVNUUk9ZU1lOQ05WUFJPQykgKEVH
TFN5bmNOViBzeW5jKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEZF
TkNFTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZ
UCBQRk5FR0xDTElFTlRXQUlUU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxh
Z3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFNJR05BTFNZTkNOVlBST0MpIChFR0xTeW5jTlYgc3luYywgRUdMZW51bSBtb2RlKTsK
K3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNZTkNBVFRSSUJOVlBS
T0MpIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cisj
ZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0VH
TC9lZ2xwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExMCBAQAorI2lmbmRlZiBfX2VnbHBsYXRmb3JtX2hfCisjZGVmaW5lIF9fZWdscGxhdGZvcm1f
aF8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFRoZSBLaHJvbm9zIEdyb3VwIElu
Yy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg
dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9v
ciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0
byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisq
KiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy
Z2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3Bp
ZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo
ZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhF
IE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoq
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g
T0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RI
RVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIFBsYXRmb3JtLXNwZWNpZmlj
IHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKKyAqICRSZXZpc2lvbjogOTcyNCAkIG9u
ICREYXRlOiAyMDA5LTEyLTAyIDAyOjA1OjMzIC0wODAwIChXZWQsIDAyIERlYyAyMDA5KSAkCisg
KgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8g
c3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxs
IG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAorICogdGhleSBjYW4g
YmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJt
aXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6
aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmlsaW5nIGEgYnVnIGFn
YWluc3QgcHJvZHVjdCAiRUdMIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5jbHVk
ZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKy8qIE1hY3JvcyB1c2VkIGluIEVHTCBmdW5jdGlvbiBw
cm90b3R5cGUgZGVjbGFyYXRpb25zLgorICoKKyAqIEVHTCBmdW5jdGlvbnMgc2hvdWxkIGJlIHBy
b3RvdHlwZWQgYXM6CisgKgorICogRUdMQVBJIHJldHVybi10eXBlIEVHTEFQSUVOVFJZIGVnbEZ1
bmN0aW9uKGFyZ3VtZW50cyk7CisgKiB0eXBlZGVmIHJldHVybi10eXBlIChFWFBBUElFTlRSWVAg
UEZORUdMRlVOQ1RJT05QUk9DKSAoYXJndW1lbnRzKTsKKyAqCisgKiBLSFJPTk9TX0FQSUNBTEwg
YW5kIEtIUk9OT1NfQVBJRU5UUlkgYXJlIGRlZmluZWQgaW4gS0hSL2tocnBsYXRmb3JtLmgKKyAq
LworCisjaWZuZGVmIEVHTEFQSQorI2RlZmluZSBFR0xBUEkgS0hST05PU19BUElDQUxMCisjZW5k
aWYKKworI2lmbmRlZiBFR0xBUElFTlRSWQorI2RlZmluZSBFR0xBUElFTlRSWSAgS0hST05PU19B
UElFTlRSWQorI2VuZGlmCisjZGVmaW5lIEVHTEFQSUVOVFJZUCBFR0xBUElFTlRSWSoKKworLyog
VGhlIHR5cGVzIE5hdGl2ZURpc3BsYXlUeXBlLCBOYXRpdmVXaW5kb3dUeXBlLCBhbmQgTmF0aXZl
UGl4bWFwVHlwZQorICogYXJlIGFsaWFzZXMgb2Ygd2luZG93LXN5c3RlbS1kZXBlbmRlbnQgdHlw
ZXMsIHN1Y2ggYXMgWCBEaXNwbGF5ICogb3IKKyAqIFdpbmRvd3MgRGV2aWNlIENvbnRleHQuIFRo
ZXkgbXVzdCBiZSBkZWZpbmVkIGluIHBsYXRmb3JtLXNwZWNpZmljCisgKiBjb2RlIGJlbG93LiBU
aGUgRUdMLXByZWZpeGVkIHZlcnNpb25zIG9mIE5hdGl2ZSpUeXBlIGFyZSB0aGUgc2FtZQorICog
dHlwZXMsIHJlbmFtZWQgaW4gRUdMIDEuMyBzbyBhbGwgdHlwZXMgaW4gdGhlIEFQSSBzdGFydCB3
aXRoICJFR0wiLgorICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1ZDMzJf
XykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykg
LyogV2luMzIgYW5kIFdpbkNFICovCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZp
bmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisK
K3R5cGVkZWYgSERDICAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgSEJJVE1BUCBF
R0xOYXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBIV05EICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7
CisKKyNlbGlmIGRlZmluZWQoX19XSU5TQ1dfXykgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSAg
LyogU3ltYmlhbiAqLworCit0eXBlZGVmIGludCAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlw
ZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwordHlwZWRlZiB2b2lkICpFR0xOYXRpdmVQ
aXhtYXBUeXBlOworCisjZWxpZiBkZWZpbmVkKF9fdW5peF9fKQorCisvKiBYMTEgKHRlbnRhdGl2
ZSkgICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKwor
dHlwZWRlZiBEaXNwbGF5ICpFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgUGl4bWFwICAg
RUdMTmF0aXZlUGl4bWFwVHlwZTsKK3R5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlw
ZTsKKworI2Vsc2UKKyNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6ZWQiCisjZW5kaWYKKwor
LyogRUdMIDEuMiB0eXBlcywgcmVuYW1lZCBmb3IgY29uc2lzdGVuY3kgaW4gRUdMIDEuMyAqLwor
dHlwZWRlZiBFR0xOYXRpdmVEaXNwbGF5VHlwZSBOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYg
RUdMTmF0aXZlUGl4bWFwVHlwZSAgTmF0aXZlUGl4bWFwVHlwZTsKK3R5cGVkZWYgRUdMTmF0aXZl
V2luZG93VHlwZSAgTmF0aXZlV2luZG93VHlwZTsKKworCisvKiBEZWZpbmUgRUdMaW50LiBUaGlz
IG11c3QgYmUgYSBzaWduZWQgaW50ZWdyYWwgdHlwZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbgor
ICogYWxsIGxlZ2FsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzIHBhc3NlZCBpbnRvIGFuZCBv
dXQgb2YgRUdMLCB3aGV0aGVyCisgKiB0aGVpciB0eXBlIGlzIGJvb2xlYW4sIGJpdG1hc2ssIGVu
dW1lcmFudCAoc3ltYm9saWMgY29uc3RhbnQpLCBpbnRlZ2VyLAorICogaGFuZGxlLCBvciBvdGhl
ci4gIFdoaWxlIGluIGdlbmVyYWwgYSAzMi1iaXQgaW50ZWdlciB3aWxsIHN1ZmZpY2UsIGlmCisg
KiBoYW5kbGVzIGFyZSA2NCBiaXQgdHlwZXMsIHRoZW4gRUdMaW50IHNob3VsZCBiZSBkZWZpbmVk
IGFzIGEgc2lnbmVkIDY0LWJpdAorICogaW50ZWdlciB0eXBlLgorICovCit0eXBlZGVmIGtocm9u
b3NfaW50MzJfdCBFR0xpbnQ7CisKKyNlbmRpZiAvKiBfX2VnbHBsYXRmb3JtX2ggKi8KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvaW5jbHVkZS9HTEVTMi9nbDIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUvR0xFUzIv
Z2wyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2lu
Y2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIxIEBACisjaWZuZGVm
IF9fZ2wyX2hfCisjZGVmaW5lIF9fZ2wyX2hfCisKKy8qICRSZXZpc2lvbjogMTA2MDIgJCBvbiAk
RGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAgIyQgKi8KKworI2luY2x1ZGUgPEdMRVMy
L2dsMnBsYXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVl
IFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdM
Y2hhcjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7
Cit0eXBlZGVmIGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAg
ICAgIEdMc2hvcnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGlu
dCAgICAgICAgICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRl
OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBp
bnQgICAgIEdMdWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRl
ZiBraHJvbm9zX2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdM
Zml4ZWQ7CisKKy8qIEdMIHR5cGVzIGZvciBoYW5kbGluZyBsYXJnZSB2ZXJ0ZXggYnVmZmVyIG9i
amVjdHMgKi8KK3R5cGVkZWYga2hyb25vc19pbnRwdHJfdCBHTGludHB0cjsKK3R5cGVkZWYga2hy
b25vc19zc2l6ZV90ICBHTHNpemVpcHRyOworCisvKiBPcGVuR0wgRVMgY29yZSB2ZXJzaW9ucyAq
LworI2RlZmluZSBHTF9FU19WRVJTSU9OXzJfMCAgICAgICAgICAgICAgICAgMQorCisvKiBDbGVh
ckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAg
IDB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDB4
MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDB4MDAw
MDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxTRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgMAorI2RlZmluZSBHTF9UUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMQor
CisvKiBCZWdpbk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNk
ZWZpbmUgR0xfTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBH
TF9UUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX1RSSUFO
R0xFX1NUUklQICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFO
ICAgICAgICAgICAgICAgICAgIDB4MDAwNgorCisvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9y
dGVkIGluIEVTMjApICovCisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8K
Ky8qICAgICAgR0xfRVFVQUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dS
RUFURVIgKi8KKy8qICAgICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisv
KiAgICAgIEdMX0FMV0FZUyAqLworCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUg
R0xfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JDX0NPTE9SICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAg
ICAgMHgwMzAxCisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAweDAz
MDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDB4MDMwMworI2Rl
ZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdM
X09ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0
b3JTcmMgKi8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUg
R0xfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmluZSBHTF9PTkVf
TUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgMHgwMzA3CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9T
QVRVUkFURSAgICAgICAgICAgICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAg
ICAgIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisv
KiAgICAgIEdMX09ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFy
YXRlICovCisjZGVmaW5lIEdMX0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYK
KyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDB4ODAwOQorI2RlZmlu
ZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMg
QkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAg
ICAgIDB4ODgzRAorCisvKiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJB
Q1QgICAgICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KKyNk
ZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBH
TF9CTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5E
X0RTVF9BTFBIQSAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JDX0FM
UEhBICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9DT05TVEFOVF9DT0xPUiAgICAg
ICAgICAgICAgICAgMHg4MDAxCisjZGVmaW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAg
ICAgICAweDgwMDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDB4
ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgMHg4MDA0Cisj
ZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVm
ZmVyIE9iamVjdHMgKi8KKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAg
IDB4ODg5MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgMHg4ODkz
CisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAweDg4OTQKKyNkZWZp
bmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgIDB4ODg5NQorCisjZGVmaW5lIEdM
X1NUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElD
X0RSQVcgICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9EWU5BTUlDX0RSQVcg
ICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNkZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAg
ICAgICAgICAgICAgIDB4ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAg
ICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAg
IDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xfRlJPTlQgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDQwNAorI2RlZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwNDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAg
ICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLworLyog
ICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVBTCAq
LworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAgICAg
IEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICovCisj
ZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAweDBERTEKKyNkZWZpbmUg
R0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVO
RCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNUICAgICAg
ICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAgICAg
ICAgICAgMHgwQjcxCisjZGVmaW5lIEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAw
eDBDMTEKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDB4ODAzNwor
I2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgMHg4MDlFCisjZGVmaW5l
IEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2Rl
ICovCisjZGVmaW5lIEdMX05PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5l
IEdMX0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNkZWZpbmUgR0xfSU5W
QUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgIDB4MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09Q
RVJBVElPTiAgICAgICAgICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAg
ICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5l
IEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAKKyNkZWZpbmUgR0xfQ0NX
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2Rl
ZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdM
X0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDB4ODQ2RQorI2RlZmluZSBHTF9DVUxMX0ZBQ0VfTU9E
RSAgICAgICAgICAgICAgICAgMHgwQjQ1CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAg
ICAgICAgICAgICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAg
ICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgMHgw
QjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAweDBCNzMKKyNk
ZWZpbmUgR0xfREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBH
TF9TVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5lIEdMX1NURU5D
SUxfRlVOQyAgICAgICAgICAgICAgICAgICAweDBCOTIKKyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlM
ICAgICAgICAgICAgICAgICAgIDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhf
RkFJTCAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAg
ICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDB4
MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAgICAgMHgwQjkzCisj
ZGVmaW5lIEdMX1NURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDB4ODgwMAorI2RlZmluZSBHTF9TVEVO
Q0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgMHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFD
S19QQVNTX0RFUFRIX0ZBSUwgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfUEFTUyAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAg
ICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICAw
eDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDB4OENBNQor
I2RlZmluZSBHTF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisjZGVmaW5l
IEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAweDBDMTAKKy8qICAgICAgR0xfU0NJ
U1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAw
eDBDMjIKKyNkZWZpbmUgR0xfQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDB4MEMyMwor
I2RlZmluZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgMHgwQ0Y1CisjZGVmaW5l
IEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAweDBEMDUKKyNkZWZpbmUgR0xfTUFY
X1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BP
UlRfRElNUyAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAg
ICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAg
MHgwRDUzCisjZGVmaW5lIEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAweDBENTQK
KyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NQorI2RlZmlu
ZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NU
RU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9P
RkZTRVRfVU5JVFMgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNFVF9G
SUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAweDgwMzgK
KyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDB4ODA2OQorI2RlZmlu
ZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NB
TVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FNUExFX0NP
VkVSQUdFX1ZBTFVFICAgICAgICAgIDB4ODBBQQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
SU5WRVJUICAgICAgICAgMHg4MEFCCisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAg
ICAgR0xfVEVYVFVSRV9NQUdfRklMVEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dS
QVBfVCAqLworCisjZGVmaW5lIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAweDg2
QTIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgIDB4ODZBMworCisv
KiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAg
MHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEK
KyNkZWZpbmUgR0xfTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBI
aW50VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAg
MHg4MTkyCisKKy8qIERhdGFUeXBlICovCisjZGVmaW5lIEdMX0JZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE0MDAKKyNkZWZpbmUgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgIDB4MTQwMQorI2RlZmluZSBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
NDAyCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICAweDE0MDMKKyNk
ZWZpbmUgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNAorI2RlZmluZSBH
TF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgMHgxNDA1CisjZGVmaW5lIEdMX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDYKKyNkZWZpbmUgR0xfRklYRUQgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTQwQworCisvKiBQaXhlbEZvcm1hdCAqLworI2RlZmluZSBH
TF9ERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgMHgxOTAyCisjZGVmaW5lIEdMX0FMUEhB
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDYKKyNkZWZpbmUgR0xfUkdCICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTkwNworI2RlZmluZSBHTF9SR0JBICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxOTA4CisjZGVmaW5lIEdMX0xVTUlOQU5DRSAgICAgICAgICAgICAgICAg
ICAgICAweDE5MDkKKyNkZWZpbmUgR0xfTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDB4
MTkwQQorCisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgR0xfVU5TSUdORURfQllURSAqLworI2Rl
ZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgMHg4MDMzCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICAweDgwMzQKKyNkZWZpbmUgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzUgICAgICAgICAgIDB4ODM2MworCisvKiBTaGFkZXJzICovCisjZGVmaW5l
IEdMX0ZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9W
RVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICAweDhCMzEKKyNkZWZpbmUgR0xfTUFYX1ZF
UlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgMHg4ODY5CisjZGVmaW5lIEdMX01BWF9WRVJURVhf
VU5JRk9STV9WRUNUT1JTICAgICAgIDB4OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNU
T1JTICAgICAgICAgICAgICAweDhERkMKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMgMHg4QjRECisjZGVmaW5lIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUyAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAg
ICAweDg4NzIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgMHg4
REZECisjZGVmaW5lIEdMX1NIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDB4OEI0Rgor
I2RlZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDhCODAKKyNkZWZp
bmUgR0xfTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHg4QjgyCisjZGVmaW5lIEdM
X1ZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRB
Q0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICAweDhCODUKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1TICAgICAgICAgICAgICAgICAgMHg4Qjg2CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEggICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9BQ1RJVkVfQVRUUklCVVRFUyAg
ICAgICAgICAgICAgICAweDhCODkKKyNkZWZpbmUgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RIICAgICAgMHg4QjhBCisjZGVmaW5lIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAg
ICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAw
eDhCOEQKKworLyogU3RlbmNpbEZ1bmN0aW9uICovCisjZGVmaW5lIEdMX05FVkVSICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgR0xfTEVTUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDIwMQorI2RlZmluZSBHTF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMjAyCisjZGVmaW5lIEdMX0xFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDMKKyNkZWZpbmUgR0xfR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNAorI2Rl
ZmluZSBHTF9OT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA1CisjZGVmaW5lIEdM
X0dFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDYKKyNkZWZpbmUgR0xfQUxXQVlT
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNworCisvKiBTdGVuY2lsT3AgKi8KKy8qICAg
ICAgR0xfWkVSTyAqLworI2RlZmluZSBHTF9LRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxRTAwCisjZGVmaW5lIEdMX1JFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDEK
KyNkZWZpbmUgR0xfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMgorI2RlZmlu
ZSBHTF9ERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAzCisjZGVmaW5lIEdMX0lO
VkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE1MEEKKyNkZWZpbmUgR0xfSU5DUl9XUkFQ
ICAgICAgICAgICAgICAgICAgICAgIDB4ODUwNworI2RlZmluZSBHTF9ERUNSX1dSQVAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NTA4CisKKy8qIFN0cmluZ05hbWUgKi8KKyNkZWZpbmUgR0xfVkVO
RE9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBHTF9SRU5ERVJFUiAg
ICAgICAgICAgICAgICAgICAgICAgMHgxRjAxCisjZGVmaW5lIEdMX1ZFUlNJT04gICAgICAgICAg
ICAgICAgICAgICAgICAweDFGMDIKKyNkZWZpbmUgR0xfRVhURU5TSU9OUyAgICAgICAgICAgICAg
ICAgICAgIDB4MUYwMworCisvKiBUZXh0dXJlTWFnRmlsdGVyICovCisjZGVmaW5lIEdMX05FQVJF
U1QgICAgICAgICAgICAgICAgICAgICAgICAweDI2MDAKKyNkZWZpbmUgR0xfTElORUFSICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MjYwMQorCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAg
ICAgIEdMX05FQVJFU1QgKi8KKy8qICAgICAgR0xfTElORUFSICovCisjZGVmaW5lIEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QgICAgICAgICAweDI3MDAKKyNkZWZpbmUgR0xfTElORUFSX01JUE1B
UF9ORUFSRVNUICAgICAgICAgIDB4MjcwMQorI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5F
QVIgICAgICAgICAgMHgyNzAyCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSICAgICAg
ICAgICAweDI3MDMKKworLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi8KKyNkZWZpbmUgR0xfVEVY
VFVSRV9NQUdfRklMVEVSICAgICAgICAgICAgIDB4MjgwMAorI2RlZmluZSBHTF9URVhUVVJFX01J
Tl9GSUxURVIgICAgICAgICAgICAgMHgyODAxCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAg
ICAgICAgICAgICAgICAweDI4MDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAg
ICAgICAgIDB4MjgwMworCisvKiBUZXh0dXJlVGFyZ2V0ICovCisvKiAgICAgIEdMX1RFWFRVUkVf
MkQgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcwMgor
CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICAweDg1MTMKKyNkZWZp
bmUgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDB4ODUxNAorI2RlZmluZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgMHg4NTE1CisjZGVmaW5lIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWCAgICAweDg1MTYKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZICAgIDB4ODUxNworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1kgICAgMHg4NTE4CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAg
ICAweDg1MTkKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDB4ODUx
QQorI2RlZmluZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgMHg4NTFDCisKKy8q
IFRleHR1cmVVbml0ICovCisjZGVmaW5lIEdMX1RFWFRVUkUwICAgICAgICAgICAgICAgICAgICAg
ICAweDg0QzAKKyNkZWZpbmUgR0xfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
MQorI2RlZmluZSBHTF9URVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMyCisjZGVm
aW5lIEdMX1RFWFRVUkUzICAgICAgICAgICAgICAgICAgICAgICAweDg0QzMKKyNkZWZpbmUgR0xf
VEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNAorI2RlZmluZSBHTF9URVhUVVJF
NSAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM1CisjZGVmaW5lIEdMX1RFWFRVUkU2ICAgICAg
ICAgICAgICAgICAgICAgICAweDg0QzYKKyNkZWZpbmUgR0xfVEVYVFVSRTcgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRDNworI2RlZmluZSBHTF9URVhUVVJFOCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM4CisjZGVmaW5lIEdMX1RFWFRVUkU5ICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzkKKyNkZWZpbmUgR0xfVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDB4ODRDQQorI2Rl
ZmluZSBHTF9URVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgMHg4NENCCisjZGVmaW5lIEdM
X1RFWFRVUkUxMiAgICAgICAgICAgICAgICAgICAgICAweDg0Q0MKKyNkZWZpbmUgR0xfVEVYVFVS
RTEzICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRAorI2RlZmluZSBHTF9URVhUVVJFMTQgICAg
ICAgICAgICAgICAgICAgICAgMHg4NENFCisjZGVmaW5lIEdMX1RFWFRVUkUxNSAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0YKKyNkZWZpbmUgR0xfVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREMAorI2RlZmluZSBHTF9URVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgMHg4
NEQxCisjZGVmaW5lIEdMX1RFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICAweDg0RDIKKyNk
ZWZpbmUgR0xfVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDB4ODREMworI2RlZmluZSBH
TF9URVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ0CisjZGVmaW5lIEdMX1RFWFRV
UkUyMSAgICAgICAgICAgICAgICAgICAgICAweDg0RDUKKyNkZWZpbmUgR0xfVEVYVFVSRTIyICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRENgorI2RlZmluZSBHTF9URVhUVVJFMjMgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEQ3CisjZGVmaW5lIEdMX1RFWFRVUkUyNCAgICAgICAgICAgICAgICAg
ICAgICAweDg0RDgKKyNkZWZpbmUgR0xfVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDB4
ODREOQorI2RlZmluZSBHTF9URVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgMHg4NERBCisj
ZGVmaW5lIEdMX1RFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAgICAweDg0REIKKyNkZWZpbmUg
R0xfVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDB4ODREQworI2RlZmluZSBHTF9URVhU
VVJFMjkgICAgICAgICAgICAgICAgICAgICAgMHg4NERECisjZGVmaW5lIEdMX1RFWFRVUkUzMCAg
ICAgICAgICAgICAgICAgICAgICAweDg0REUKKyNkZWZpbmUgR0xfVEVYVFVSRTMxICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRERgorI2RlZmluZSBHTF9BQ1RJVkVfVEVYVFVSRSAgICAgICAgICAg
ICAgICAgMHg4NEUwCisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworI2RlZmluZSBHTF9SRVBFQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgyOTAxCisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0Ug
ICAgICAgICAgICAgICAgICAweDgxMkYKKyNkZWZpbmUgR0xfTUlSUk9SRURfUkVQRUFUICAgICAg
ICAgICAgICAgIDB4ODM3MAorCisvKiBVbmlmb3JtIFR5cGVzICovCisjZGVmaW5lIEdMX0ZMT0FU
X1ZFQzIgICAgICAgICAgICAgICAgICAgICAweDhCNTAKKyNkZWZpbmUgR0xfRkxPQVRfVkVDMyAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1MQorI2RlZmluZSBHTF9GTE9BVF9WRUM0ICAgICAgICAg
ICAgICAgICAgICAgMHg4QjUyCisjZGVmaW5lIEdMX0lOVF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNTMKKyNkZWZpbmUgR0xfSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1NAorI2RlZmluZSBHTF9JTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU1Cisj
ZGVmaW5lIEdMX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTYKKyNkZWZpbmUg
R0xfQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NworI2RlZmluZSBHTF9CT09M
X1ZFQzMgICAgICAgICAgICAgICAgICAgICAgMHg4QjU4CisjZGVmaW5lIEdMX0JPT0xfVkVDNCAg
ICAgICAgICAgICAgICAgICAgICAweDhCNTkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMiAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QQorI2RlZmluZSBHTF9GTE9BVF9NQVQzICAgICAgICAgICAgICAg
ICAgICAgMHg4QjVCCisjZGVmaW5lIEdMX0ZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICAw
eDhCNUMKKyNkZWZpbmUgR0xfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDB4OEI1RQor
I2RlZmluZSBHTF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgMHg4QjYwCisKKy8qIFZl
cnRleCBBcnJheXMgKi8KKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEICAg
ICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAg
ICAweDg2MjMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICAw
eDg2MjQKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICAweDg2
MjUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAweDg4NkEK
KyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICAweDg2NDUKKyNk
ZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyAweDg4OUYKKworLyog
UmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBF
ICAgMHg4QjlBCisjZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUIDB4
OEI5QgorCisvKiBTaGFkZXIgU291cmNlICovCisjZGVmaW5lIEdMX0NPTVBJTEVfU1RBVFVTICAg
ICAgICAgICAgICAgICAweDhCODEKKyNkZWZpbmUgR0xfSU5GT19MT0dfTEVOR1RIICAgICAgICAg
ICAgICAgIDB4OEI4NAorI2RlZmluZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCAgICAgICAgICAg
MHg4Qjg4CisjZGVmaW5lIEdMX1NIQURFUl9DT01QSUxFUiAgICAgICAgICAgICAgICAweDhERkEK
KworLyogU2hhZGVyIEJpbmFyeSAqLworI2RlZmluZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFMg
ICAgICAgICAgMHg4REY4CisjZGVmaW5lIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAg
ICAweDhERjkKKworLyogU2hhZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KKyNkZWZp
bmUgR0xfTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDB4OERGMAorI2RlZmluZSBHTF9N
RURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgMHg4REYxCisjZGVmaW5lIEdMX0hJR0hfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAweDhERjIKKyNkZWZpbmUgR0xfTE9XX0lOVCAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OERGMworI2RlZmluZSBHTF9NRURJVU1fSU5UICAgICAgICAgICAg
ICAgICAgICAgMHg4REY0CisjZGVmaW5lIEdMX0hJR0hfSU5UICAgICAgICAgICAgICAgICAgICAg
ICAweDhERjUKKworLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqLworI2RlZmluZSBHTF9GUkFNRUJV
RkZFUiAgICAgICAgICAgICAgICAgICAgMHg4RDQwCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUiAg
ICAgICAgICAgICAgICAgICAweDhENDEKKworI2RlZmluZSBHTF9SR0JBNCAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDU2CisjZGVmaW5lIEdMX1JHQjVfQTEgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwNTcKKyNkZWZpbmUgR0xfUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ2MgorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgMHg4MUE1Cisj
ZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICAweDE5MDEKKyNkZWZpbmUg
R0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVOREVSQlVG
RkVSX0hFSUdIVCAgICAgICAgICAgIDB4OEQ0MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSU5U
RVJOQUxfRk9STUFUICAgMHg4RDQ0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAg
ICAgICAgICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAg
IDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgMHg4RDUy
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICAweDhENTMKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9S
RU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgMHg4RDU1CisKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgMHg4Q0QwCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgICAgICAgICAgIDB4OENEMQorI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICAweDhD
RDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZB
Q0UgMHg4Q0QzCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDB4
OENFMAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgMHg4RDAwCisj
ZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICAweDhEMjAKKworI2RlZmlu
ZSBHTF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDB4OENENQorI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICAweDhDRDYKKyNkZWZpbmUg
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgMHg4Q0Q3CisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDB4OENEOQor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAweDhD
REQKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgMHg4Q0E2Cisj
ZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAweDhDQTcKKyNkZWZpbmUg
R0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAweDA1MDYKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgKiBHTCBjb3JlIGZ1bmN0aW9ucy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEFjdGl2ZVRleHR1cmUgKEdMZW51bSB0ZXh0dXJl
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQXR0YWNoU2hhZGVyIChH
THVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEJpbmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBp
bmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQmluZEJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGJ1ZmZlcik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRGcmFtZWJ1ZmZlciAoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRl
cmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRUZXh0
dXJlIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEJsZW5kQ29sb3IgKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3Jl
ZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvbiAoIEdMZW51bSBtb2RlICk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAoR0xl
bnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCbGVuZEZ1bmMgKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRl
IChHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBk
c3RBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJ1ZmZlckRh
dGEgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhLCBH
TGVudW0gdXNhZ2UpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZm
ZXJTdWJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6
ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVO
VFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyIChHTGJpdGZpZWxkIG1hc2spOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckNvbG9yIChHTGNsYW1wZiBy
ZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyRGVwdGhmIChHTGNsYW1wZiBk
ZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyU3RlbmNp
bCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvbG9y
TWFzayAoR0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xi
b29sZWFuIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29t
cGlsZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleFN1YkltYWdl
MkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbENvcHlUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICBHTF9B
UElFTlRSWSBnbENyZWF0ZVByb2dyYW0gKHZvaWQpOworR0xfQVBJQ0FMTCBHTHVpbnQgICAgICAg
R0xfQVBJRU5UUlkgZ2xDcmVhdGVTaGFkZXIgKEdMZW51bSB0eXBlKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2UgKEdMZW51bSBtb2RlKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlQnVmZmVycyAoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1
ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9n
cmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiByZW5kZXJi
dWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU2hh
ZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRGVsZXRlVGV4dHVyZXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlcHRoRnVuYyAoR0xlbnVtIGZ1
bmMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aE1hc2sgKEdM
Ym9vbGVhbiBmbGFnKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVw
dGhSYW5nZWYgKEdMY2xhbXBmIHpOZWFyLCBHTGNsYW1wZiB6RmFyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGV0YWNoU2hhZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1
aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2Fi
bGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXMgKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bERyYXdFbGVtZW50cyAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBj
b25zdCBHTHZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xFbmFibGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmluaXNoICh2b2lkKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdM
ZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5CdWZmZXJzIChHTHNpemVpIG4s
IEdMdWludCogYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdlbmVyYXRlTWlwbWFwIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogZnJhbWVi
dWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuUmVuZGVy
YnVmZmVycyAoR0xzaXplaSBuLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5UZXh0dXJlcyAoR0xzaXplaSBuLCBHTHVpbnQq
IHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0
aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9y
bSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
KiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1
aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNo
YWRlcnMpOworR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJM
b2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJvb2xlYW52IChHTGVudW0gcG5hbWUsIEdM
Ym9vbGVhbiogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICBHTF9BUElFTlRSWSBnbEdldEVycm9y
ICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RmxvYXR2
IChHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2IChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdM
ZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFByb2dyYW1pdiAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFBy
b2dyYW1JbmZvTG9nIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBs
ZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRTaGFkZXJpdiAoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVySW5m
b0xvZyAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
Y2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNp
b250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSk7CitHTF9BUElD
QUxMIGNvbnN0IEdMdWJ5dGUqIEdMX0FQSUVOVFJZIGdsR2V0U3RyaW5nIChHTGVudW0gbmFtZSk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcmZ2
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtZnYgKEdMdWludCBwcm9ncmFtLCBHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0VW5pZm9ybWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdM
aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRV
bmlmb3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAoR0x1
aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYml2IChHTHVpbnQgaW5kZXgs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdMZW51
bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEhpbnQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwg
R0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNCdWZmZXIgKEdMdWludCBidWZmZXIpOworR0xf
QVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdMZW51bSBjYXAp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc0ZyYW1lYnVmZmVyIChH
THVpbnQgZnJhbWVidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkg
Z2xJc1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdM
X0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJidWZmZXIpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1NoYWRlciAoR0x1aW50IHNoYWRlcik7
CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzVGV4dHVyZSAoR0x1aW50
IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5lV2lk
dGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xMaW5rUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xQaXhlbFN0b3JlaSAoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxv
YXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsUmVhZFBpeGVscyAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbGVhc2VTaGFkZXJDb21w
aWxlciAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFnZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZl
cnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25z
dCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmlu
YXJ5LCBHTHNpemVpIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xj
aGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdM
dWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWlu
dCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1h
c2sgKEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
U3RlbmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE9wIChHTGVudW0gZmFpbCwgR0xl
bnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBH
TGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBh
cmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJh
bXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZnYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQg
eCwgR0xmbG9hdCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybTJpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTNmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNpIChHTGludCBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFVuaWZvcm0zaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00
ZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxv
YXQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpIChHTGludCBsb2NhdGlv
biwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFVuaWZvcm1NYXRyaXgyZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgzZnYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0
ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFVzZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVmFsaWRhdGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliMWZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmYgKEdMdWludCBp
bmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJp
YjNmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjNmdiAoR0x1aW50
IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZs
b2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCog
dmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0
cmliUG9pbnRlciAoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xl
YW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRyKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3BvcnQgKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wyX2hfICovCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dM
RVMyL2dsMmV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3MyBAQAorI2lmbmRlZiBfX2ds
MmV4dF9oXworI2RlZmluZSBfX2dsMmV4dF9oXworCisvKiAkUmV2aXNpb246IDEwNzk4ICQgb24g
JERhdGU6OiAyMDEwLTAzLTE5IDE3OjM0OjMwIC0wNzAwICMkICovCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAy
LjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAu
CisgKi8KKworI2lmbmRlZiBHTF9BUElFTlRSWVAKKyMgICBkZWZpbmUgR0xfQVBJRU5UUllQIEdM
X0FQSUVOVFJZKgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogT0VTIGV4dGVuc2lv
biB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfT0VTX2NvbXByZXNzZWRfRVRD
MV9SR0I4X3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3Rl
eHR1cmUKKyNkZWZpbmUgR0xfRVRDMV9SR0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhENjQKKyNlbmRpZgorCisvKiBHTF9PRVNfY29tcHJlc3NlZF9wYWxl
dHRlZF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1
cmUKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCOTAKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCQThfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTEKKyNkZWZpbmUgR0xfUEFMRVRURTRfUjVf
RzZfQjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTIKKyNkZWZpbmUg
R0xfUEFMRVRURTRfUkdCQTRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCOTMKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCNV9BMV9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCOTQKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCOF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTUKKyNkZWZpbmUgR0xfUEFMRVRURThf
UkdCQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTYKKyNkZWZp
bmUgR0xfUEFMRVRURThfUjVfRzZfQjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhCOTcKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCQTRfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCOTgKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCNV9BMV9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTkKKyNlbmRpZgorCisvKiBHTF9P
RVNfZGVwdGgyNCAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGgyNAorI2RlZmluZSBHTF9ERVBUSF9D
T01QT05FTlQyNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFBNgorI2Vu
ZGlmCisKKy8qIEdMX09FU19kZXB0aDMyICovCisjaWZuZGVmIEdMX09FU19kZXB0aDMyCisjZGVm
aW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MUE3CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoX3RleHR1cmUgKi8KKy8qIE5vIG5l
dyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX0VH
TF9pbWFnZSAqLworI2lmbmRlZiBHTF9PRVNfRUdMX2ltYWdlCit0eXBlZGVmIHZvaWQqIEdMZWds
SW1hZ2VPRVM7CisjZW5kaWYKKworLyogR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAqLworI2lm
bmRlZiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA1CisjZW5kaWYKKwor
LyogR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9PRVNfZ2V0X3Byb2dy
YW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9G
T1JNQVRTX09FUyAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZFCisjZGVmaW5lIEdMX1BST0dS
QU1fQklOQVJZX0ZPUk1BVFNfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZGCisj
ZW5kaWYKKworLyogR0xfT0VTX21hcGJ1ZmZlciAqLworI2lmbmRlZiBHTF9PRVNfbWFwYnVmZmVy
CisjZGVmaW5lIEdMX1dSSVRFX09OTFlfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEI5CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NFU1NfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJCCisjZGVmaW5lIEdMX0JVRkZFUl9NQVBQRURf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJDCisjZGVmaW5lIEdM
X0JVRkZFUl9NQVBfUE9JTlRFUl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
OEJECisjZW5kaWYKKworLyogR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICovCisjaWZuZGVm
IEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorI2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGOQorI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
QQorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKKy8qIEdMX09FU19yZ2I4X3JnYmE4ICovCisjaWZu
ZGVmIEdMX09FU19yZ2I4X3JnYmE4CisjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4X09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU4CisjZW5k
aWYKKworLyogR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICovCisjaWZuZGVmIEdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcworI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElW
RV9ISU5UX09FUyAgICAgICAgICAgICAgICAgIDB4OEI4QgorI2VuZGlmCisKKy8qIEdMX09FU19z
dGVuY2lsMSAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9J
TkRFWDFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDYKKyNlbmRp
ZgorCisvKiBHTF9PRVNfc3RlbmNpbDQgKi8KKyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWw0CisjZGVm
aW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RDQ3CisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KKyNpZm5kZWYgR0xf
T0VTX3RleHR1cmVfM0QKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1JfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfVEVYVFVSRV8zRF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkYKKyNkZWZpbmUgR0xf
VEVYVFVSRV9CSU5ESU5HXzNEX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkEKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0laRV9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwNzMKKyNkZWZpbmUgR0xfU0FNUExFUl8zRF9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFXzNEX1pPRkZTRVRfT0VTICAgICAgICAweDhDRDQKKyNlbmRpZgor
CisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdCAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2Vk
IGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIg
Ki8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKwor
LyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0CisjZGVmaW5lIEdMX0hBTEZfRkxPQVRfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDYxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdF9saW5lYXIgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4
dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3RleHR1cmVfbnBvdCAqLworLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorI2RlZmlu
ZSBHTF9WRVJURVhfQVJSQVlfQklORElOR19PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODVCNQorI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdCAqLworLyogR0xf
SEFMRl9GTE9BVF9PRVMgZGVmaW5lZCBpbiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFscmVh
ZHkuICovCisKKy8qIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yICovCisjaWZuZGVmIEdM
X09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8xMF8x
MF8xMF8yX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REY2CisjZGVmaW5lIEdMX0lO
VF8xMF8xMF8xMF8yX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REY3
CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBBTUQgZXh0ZW5zaW9uIHRva2Vucwor
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZSAq
LworI2lmbmRlZiBHTF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZQorI2RlZmluZSBHTF8zRENf
WF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGOQor
I2RlZmluZSBHTF8zRENfWFlfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODdGQQorI2VuZGlmCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJl
ICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FU
Q19SR0JfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qzky
CisjZGVmaW5lIEdMX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QzkzCisjZGVmaW5lIEdMX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9B
TUQgICAgICAgICAgICAgICAgICAgICAgMHg4N0VFCisjZW5kaWYKKworLyogR0xfQU1EX3BlcmZv
cm1hbmNlX21vbml0b3IgKi8KKyNpZm5kZWYgR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IKKyNk
ZWZpbmUgR0xfQ09VTlRFUl9UWVBFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCQzAKKyNkZWZpbmUgR0xfQ09VTlRFUl9SQU5HRV9BTUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCQzEKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UNjRfQU1E
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzIKKyNkZWZpbmUgR0xfUEVS
Q0VOVEFHRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzMK
KyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRfQVZBSUxBQkxFX0FNRCAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCQzQKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRfU0laRV9BTUQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhCQzUKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRf
QU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzYKKyNlbmRpZgorCisv
KiBHTF9BTURfcHJvZ3JhbV9iaW5hcnlfWjQwMCAqLworI2lmbmRlZiBHTF9BTURfcHJvZ3JhbV9i
aW5hcnlfWjQwMAorI2RlZmluZSBHTF9aNDAwX0JJTkFSWV9BTUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODc0MAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgor
ICogRVhUIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRVhU
X2JsZW5kX21pbm1heCAqLworI2lmbmRlZiBHTF9FWFRfYmxlbmRfbWlubWF4CisjZGVmaW5lIEdM
X01JTl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MDA3CisjZGVmaW5lIEdMX01BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDA4CisjZW5kaWYKKworLyogR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZm
ZXIgKi8KKyNpZm5kZWYgR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIKKyNkZWZpbmUgR0xfQ09M
T1JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAK
KyNkZWZpbmUgR0xfREVQVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDE4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDE4MDIKKyNlbmRpZgorCisvKiBHTF9FWFRfbXVsdGlf
ZHJhd19hcnJheXMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVu
c2lvbi4gKi8KKworLyogR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgKi8KKyNpZm5kZWYgR0xfRVhU
X3JlYWRfZm9ybWF0X2JncmEKKyNkZWZpbmUgR0xfQkdSQV9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUICAgICAgICAgICAgICAgICAgICAgICAweDgzNjUKKyNkZWZpbmUg
R0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUICAgICAgICAgICAgICAgICAgICAgICAw
eDgzNjYKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgKi8K
KyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisjZGVmaW5lIEdMX1RF
WFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEZF
CisjZGVmaW5lIEdMX01BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEZGCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4
ODg4ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorI2RlZmluZSBH
TF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODBFMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8K
KyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFVgorI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVZfRVhUICAgICAgICAgICAgICAgICAgICAgIDB4ODM2
OAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogSU1HIGV4dGVuc2lvbiB0b2tlbnMK
KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfSU1HX3Byb2dyYW1fYmluYXJ5ICovCisjaWZu
ZGVmIEdMX0lNR19wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBHTF9TR1hfUFJPR1JBTV9CSU5BUllf
SU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMAorI2VuZGlmCisKKy8qIEdM
X0lNR19yZWFkX2Zvcm1hdCAqLworI2lmbmRlZiBHTF9JTUdfcmVhZF9mb3JtYXQKKyNkZWZpbmUg
R0xfQkdSQV9JTUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfSU1HICAgICAgICAg
ICAgICAgICAgICAgICAweDgzNjUKKyNlbmRpZgorCisvKiBHTF9JTUdfc2hhZGVyX2JpbmFyeSAq
LworI2lmbmRlZiBHTF9JTUdfc2hhZGVyX2JpbmFyeQorI2RlZmluZSBHTF9TR1hfQklOQVJZX0lN
RyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMwQQorI2VuZGlmCisK
Ky8qIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjICovCisjaWZuZGVmIEdMX0lNR190
ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCX1BWUlRD
XzRCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAgMHg4QzAwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAgMHg4QzAxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HICAgICAgICAgICAgICAg
ICAgICAgMHg4QzAyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
ICAgICAgICAgICAgICAgICAgICAgMHg4QzAzCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
CisgKiBOViBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX05W
X2ZlbmNlICovCisjaWZuZGVmIEdMX05WX2ZlbmNlCisjZGVmaW5lIEdMX0FMTF9DT01QTEVURURf
TlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEYyCisjZGVmaW5lIEdM
X0ZFTkNFX1NUQVRVU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NEYzCisjZGVmaW5lIEdMX0ZFTkNFX0NPTkRJVElPTl9OViAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEY0CisjZW5kaWYKKworLyogR0xfTlZfY292ZXJhZ2Vfc2FtcGxlICov
CisjaWZuZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBHTF9DT1ZFUkFHRV9DT01Q
T05FTlRfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMAorI2RlZmluZSBH
TF9DT1ZFUkFHRV9DT01QT05FTlQ0X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEVEMQorI2RlZmluZSBHTF9DT1ZFUkFHRV9BVFRBQ0hNRU5UX05WICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEVEMgorI2RlZmluZSBHTF9DT1ZFUkFHRV9CVUZGRVJTX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMworI2RlZmluZSBHTF9DT1ZFUkFHRV9T
QU1QTEVTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENAorI2RlZmlu
ZSBHTF9DT1ZFUkFHRV9BTExfRlJBR01FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEVENQorI2RlZmluZSBHTF9DT1ZFUkFHRV9FREdFX0ZSQUdNRU5UU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEVENgorI2RlZmluZSBHTF9DT1ZFUkFHRV9BVVRPTUFUSUNfTlYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENworI2RlZmluZSBHTF9DT1ZFUkFH
RV9CVUZGRVJfQklUX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2Vu
ZGlmCisKKy8qIEdMX05WX2RlcHRoX25vbmxpbmVhciAqLworI2lmbmRlZiBHTF9OVl9kZXB0aF9u
b25saW5lYXIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTZfTk9OTElORUFSX05WICAgICAg
ICAgICAgICAgICAgICAgICAweDhFMkMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAq
IFFDT00gZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9RQ09N
X2RyaXZlcl9jb250cm9sICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBl
eHRlbnNpb24uICovCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0ICovCisjaWZuZGVmIEdMX1FD
T01fZXh0ZW5kZWRfZ2V0CisjZGVmaW5lIEdMX1RFWFRVUkVfV0lEVEhfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQyCisjZGVmaW5lIEdMX1RFWFRVUkVfSEVJR0hU
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQzCisjZGVmaW5lIEdM
X1RFWFRVUkVfREVQVEhfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QkQ0CisjZGVmaW5lIEdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QkQ1CisjZGVmaW5lIEdMX1RFWFRVUkVfRk9STUFUX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ2CisjZGVmaW5lIEdMX1RFWFRVUkVfVFlQ
RV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ3CisjZGVmaW5l
IEdMX1RFWFRVUkVfSU1BR0VfVkFMSURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QkQ4CisjZGVmaW5lIEdMX1RFWFRVUkVfTlVNX0xFVkVMU19RQ09NICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QkQ5CisjZGVmaW5lIEdMX1RFWFRVUkVfVEFSR0VUX1FDT00gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkRBCisjZGVmaW5lIEdMX1RFWFRVUkVf
T0JKRUNUX1ZBTElEX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkRCCisjZGVm
aW5lIEdMX1NUQVRFX1JFU1RPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QkRDCisjZW5kaWYKKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQyICovCisvKiBObyBu
ZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX1FDT01f
cGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lmbmRlZiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21v
ZGUKKyNkZWZpbmUgR0xfUEVSRk1PTl9HTE9CQUxfTU9ERV9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhGQTAKKyNlbmRpZgorCisvKiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJp
bmcgKi8KKyNpZm5kZWYgR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1dS
SVRFT05MWV9SRU5ERVJJTkdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODIz
CisjZW5kaWYKKworLyogR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNP
TV90aWxlZF9yZW5kZXJpbmcKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDBfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX0NPTE9SX0JV
RkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgor
I2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDNfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdMX0NPTE9SX0JV
RkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAor
I2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDZfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdMX0NPTE9SX0JV
RkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAor
I2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDFfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdMX0RFUFRIX0JV
RkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAor
I2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDRfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdMX0RFUFRIX0JV
RkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAor
I2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDdfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdMX1NURU5DSUxf
QlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUMl9RQ09NICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxf
QlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUNV9RQ09NICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxf
QlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDBfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FN
UExFX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAor
I2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDNfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FN
UExFX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAor
I2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDZfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FN
UExFX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAor
I2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRW5kIG9mIGV4dGVuc2lvbiB0b2tlbnMs
IHN0YXJ0IG9mIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE9FUyBleHRlbnNpb24gZnVuY3Rpb25z
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90
ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisj
ZGVmaW5lIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlIDEKKyNlbmRpZgorCisv
KiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19j
b21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUKKyNkZWZpbmUgR0xfT0VTX2NvbXByZXNzZWRfcGFs
ZXR0ZWRfdGV4dHVyZSAxCisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoMjQgKi8KKyNpZm5kZWYg
R0xfT0VTX2RlcHRoMjQKKyNkZWZpbmUgR0xfT0VTX2RlcHRoMjQgMQorI2VuZGlmCisKKy8qIEdM
X09FU19kZXB0aDMyICovCisjaWZuZGVmIEdMX09FU19kZXB0aDMyCisjZGVmaW5lIEdMX09FU19k
ZXB0aDMyIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGhfdGV4dHVyZSAqLworI2lmbmRlZiBH
TF9PRVNfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9PRVNfZGVwdGhfdGV4dHVyZSAxCisjZW5k
aWYKKworLyogR0xfT0VTX0VHTF9pbWFnZSAqLworI2lmbmRlZiBHTF9PRVNfRUdMX2ltYWdlCisj
ZGVmaW5lIEdMX09FU19FR0xfaW1hZ2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTIChH
TGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEVHTEltYWdlVGFyZ2V0UmVuZGVyYnVmZmVyU3RvcmFnZU9FUyAoR0xlbnVtIHRh
cmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMRUdMSU1BR0VUQVJHRVRURVhUVVJFMkRPRVNQUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEVHTElNQUdFVEFSR0VUUkVOREVSQlVGRkVSU1RPUkFHRU9FU1BST0MpIChHTGVudW0gdGFyZ2V0
LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKKyNlbmRpZgorCisvKiBHTF9PRVNfZWxlbWVudF9pbmRl
eF91aW50ICovCisjaWZuZGVmIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQKKyNkZWZpbmUgR0xf
T0VTX2VsZW1lbnRfaW5kZXhfdWludCAxCisjZW5kaWYKKworLyogR0xfT0VTX2Zib19yZW5kZXJf
bWlwbWFwICovCisjaWZuZGVmIEdMX09FU19mYm9fcmVuZGVyX21pcG1hcAorI2RlZmluZSBHTF9P
RVNfZmJvX3JlbmRlcl9taXBtYXAgMQorI2VuZGlmCisKKy8qIEdMX09FU19mcmFnbWVudF9wcmVj
aXNpb25faGlnaCAqLworI2lmbmRlZiBHTF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hpZ2gKKyNk
ZWZpbmUgR0xfT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoIDEKKyNlbmRpZgorCisvKiBHTF9P
RVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5h
cnkKKyNkZWZpbmUgR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAxCisjaWZkZWYgR0xfR0xFWFRf
UFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUJpbmFy
eU9FUyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGVudW0gKmJpbmFyeUZvcm1hdCwgR0x2b2lkICpiaW5hcnkpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsUHJvZ3JhbUJpbmFyeU9FUyAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5h
cnlGb3JtYXQsIGNvbnN0IEdMdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOworI2VuZGlmCit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1CSU5BUllPRVNQUk9DKSAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGVudW0g
KmJpbmFyeUZvcm1hdCwgR0x2b2lkICpiaW5hcnkpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xQUk9HUkFNQklOQVJZT0VTUFJPQykgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmlu
YXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyNlbmRpZgor
CisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisjaWZuZGVmIEdMX09FU19tYXBidWZmZXIKKyNkZWZp
bmUgR0xfT0VTX21hcGJ1ZmZlciAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJ
Q0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlck9FUyAoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGFjY2Vzcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbFVubWFwQnVm
ZmVyT0VTIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdl
dEJ1ZmZlclBvaW50ZXJ2T0VTIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoq
IHBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCogKEdMX0FQSUVOVFJZUCBQRk5HTE1BUEJV
RkZFUk9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKTsKK3R5cGVkZWYgR0xi
b29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xVTk1BUEJVRkZFUk9FU1BST0MpIChHTGVudW0gdGFy
Z2V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkVSUE9JTlRFUlZP
RVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJhbXMpOwor
I2VuZGlmCisKKy8qIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAqLworI2lmbmRlZiBHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyNkZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfcmdiOF9yZ2JhOCAqLworI2lmbmRlZiBHTF9PRVNf
cmdiOF9yZ2JhOAorI2RlZmluZSBHTF9PRVNfcmdiOF9yZ2JhOCAxCisjZW5kaWYKKworLyogR0xf
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICovCisjaWZuZGVmIEdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcworI2RlZmluZSBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgMQorI2VuZGlmCisK
Ky8qIEdMX09FU19zdGVuY2lsMSAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDEKKyNkZWZpbmUg
R0xfT0VTX3N0ZW5jaWwxIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RlbmNpbDQgKi8KKyNpZm5k
ZWYgR0xfT0VTX3N0ZW5jaWw0CisjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCisjZW5kaWYKKwor
LyogR0xfT0VTX3RleHR1cmVfM0QgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKKyNkZWZp
bmUgR0xfT0VTX3RleHR1cmVfM0QgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFRleEltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xUZXhTdWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5
VGV4U3ViSW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bENvbXByZXNzZWRUZXhJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhTdWJJbWFn
ZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZv
aWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0
dXJlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFy
Z2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHpvZmZzZXQpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFRFWElNQUdFM0RPRVNQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYU1VCSU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPTVBSRVNTRURURVhJTUFHRTNET0VTUFJP
QykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xDT01QUkVTU0VEVEVYU1VCSU1BR0UzRE9FU1BST0MpIChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUzRE9FUykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHpvZmZzZXQpOworI2VuZGlmCisKKy8qIEdMX09F
U190ZXh0dXJlX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2Zsb2F0CisjZGVmaW5l
IEdMX09FU190ZXh0dXJlX2Zsb2F0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyCisjZGVmaW5l
IEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisjZGVm
aW5lIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXRfbGluZWFyICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXRfbGluZWFyCisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIDEKKyNl
bmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9ucG90ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJl
X25wb3QKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfbnBvdCAxCisjZW5kaWYKKworLyogR0xfT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QKKyNkZWZpbmUgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0ZXhBcnJh
eU9FUyAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlbGV0
ZVZlcnRleEFycmF5c09FUyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmFycmF5cyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgKEdMc2l6ZWkgbiwg
R0x1aW50ICphcnJheXMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1Zl
cnRleEFycmF5T0VTIChHTHVpbnQgYXJyYXkpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MpIChHTHVpbnQgYXJyYXkpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DKSAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmFycmF5cyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MpIChHTHNpemVpIG4sIEdMdWludCAqYXJy
YXlzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1ZFUlRFWEFSUkFZ
T0VTUFJPQykgKEdMdWludCBhcnJheSk7CisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9oYWxm
X2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdAorI2RlZmluZSBHTF9P
RVNfdmVydGV4X2hhbGZfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhfdHlwZV8x
MF8xMF8xMF8yICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yCisjZGVm
aW5lIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yIDEKKyNlbmRpZgorCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSoKKyAqIEFNRCBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CisKKy8qIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9j
b21wcmVzc2VkXzNEQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0
dXJlIDEKKyNlbmRpZgorCisvKiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSAqLworI2lm
bmRlZiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZQorI2RlZmluZSBHTF9BTURfY29tcHJl
c3NlZF9BVENfdGV4dHVyZSAxCisjZW5kaWYKKworLyogQU1EX3BlcmZvcm1hbmNlX21vbml0b3Ig
Ki8KKyNpZm5kZWYgR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IKKyNkZWZpbmUgR0xfQU1EX3Bl
cmZvcm1hbmNlX21vbml0b3IgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yR3JvdXBzQU1EIChHTGludCAqbnVt
R3JvdXBzLCBHTHNpemVpIGdyb3Vwc1NpemUsIEdMdWludCAqZ3JvdXBzKTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlcnNBTUQgKEdMdWludCBncm91
cCwgR0xpbnQgKm51bUNvdW50ZXJzLCBHTGludCAqbWF4QWN0aXZlQ291bnRlcnMsIEdMc2l6ZWkg
Y291bnRlclNpemUsIEdMdWludCAqY291bnRlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cFN0cmluZ0FNRCAoR0x1aW50IGdyb3VwLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpncm91cFN0cmluZyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJTdHJpbmdBTUQgKEdM
dWludCBncm91cCwgR0x1aW50IGNvdW50ZXIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGNoYXIgKmNvdW50ZXJTdHJpbmcpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0UGVyZk1vbml0b3JDb3VudGVySW5mb0FNRCAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291
bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQgKmRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsR2VuUGVyZk1vbml0b3JzQU1EIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlUGVyZk1vbml0b3JzQU1EIChH
THNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsU2VsZWN0UGVyZk1vbml0b3JDb3VudGVyc0FNRCAoR0x1aW50IG1vbml0b3IsIEdMYm9vbGVh
biBlbmFibGUsIEdMdWludCBncm91cCwgR0xpbnQgbnVtQ291bnRlcnMsIEdMdWludCAqY291bnRl
cnNMaXN0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJlZ2luUGVyZk1vbml0b3JB
TUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVuZFBl
cmZNb25pdG9yQU1EIChHTHVpbnQgbW9uaXRvcik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJEYXRhQU1EIChHTHVpbnQgbW9uaXRvciwgR0xlbnVt
IHBuYW1lLCBHTHNpemVpIGRhdGFTaXplLCBHTHVpbnQgKmRhdGEsIEdMaW50ICpieXRlc1dyaXR0
ZW4pOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05J
VE9SR1JPVVBTQU1EUFJPQykgKEdMaW50ICpudW1Hcm91cHMsIEdMc2l6ZWkgZ3JvdXBzU2l6ZSwg
R0x1aW50ICpncm91cHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJG
TU9OSVRPUkNPVU5URVJTQU1EUFJPQykgKEdMdWludCBncm91cCwgR0xpbnQgKm51bUNvdW50ZXJz
LCBHTGludCAqbWF4QWN0aXZlQ291bnRlcnMsIEdMc2l6ZWkgY291bnRlclNpemUsIEdMdWludCAq
Y291bnRlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRP
UkdST1VQU1RSSU5HQU1EUFJPQykgKEdMdWludCBncm91cCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMY2hhciAqZ3JvdXBTdHJpbmcpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNPVU5URVJTVFJJTkdBTURQUk9DKSAoR0x1aW50IGdy
b3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqY291bnRlclN0cmluZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdF
VFBFUkZNT05JVE9SQ09VTlRFUklORk9BTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291
bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xHRU5QRVJGTU9OSVRPUlNBTURQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKm1v
bml0b3JzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVMRVRFUEVSRk1PTklU
T1JTQU1EUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTFNFTEVDVFBFUkZNT05JVE9SQ09VTlRFUlNBTURQUk9DKSAoR0x1
aW50IG1vbml0b3IsIEdMYm9vbGVhbiBlbmFibGUsIEdMdWludCBncm91cCwgR0xpbnQgbnVtQ291
bnRlcnMsIEdMdWludCAqY291bnRlcnNMaXN0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMQkVHSU5QRVJGTU9OSVRPUkFNRFBST0MpIChHTHVpbnQgbW9uaXRvcik7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFBFUkZNT05JVE9SQU1EUFJPQykgKEdMdWludCBt
b25pdG9yKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JD
T1VOVEVSREFUQUFNRFBST0MpIChHTHVpbnQgbW9uaXRvciwgR0xlbnVtIHBuYW1lLCBHTHNpemVp
IGRhdGFTaXplLCBHTHVpbnQgKmRhdGEsIEdMaW50ICpieXRlc1dyaXR0ZW4pOworI2VuZGlmCisK
Ky8qIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwICovCisjaWZuZGVmIEdMX0FNRF9wcm9ncmFt
X2JpbmFyeV9aNDAwCisjZGVmaW5lIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwIDEKKyNlbmRp
ZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEVYVCBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0VYVF9ibGVuZF9taW5tYXggKi8KKyNpZm5kZWYgR0xf
RVhUX2JsZW5kX21pbm1heAorI2RlZmluZSBHTF9FWFRfYmxlbmRfbWlubWF4IDEKKyNlbmRpZgor
CisvKiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAqLworI2lmbmRlZiBHTF9FWFRfZGlzY2Fy
ZF9mcmFtZWJ1ZmZlcgorI2RlZmluZSBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGlz
Y2FyZEZyYW1lYnVmZmVyRVhUIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRz
LCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xESVNDQVJERlJBTUVCVUZGRVJFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtICphdHRhY2htZW50cyk7CisjZW5k
aWYKKworI2lmbmRlZiBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMKKyNkZWZpbmUgR0xfRVhUX211
bHRpX2RyYXdfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdBcnJheXNFWFQgKEdMZW51bSwgR0xpbnQgKiwg
R0xzaXplaSAqLCBHTHNpemVpKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11bHRp
RHJhd0VsZW1lbnRzRVhUIChHTGVudW0sIGNvbnN0IEdMc2l6ZWkgKiwgR0xlbnVtLCBjb25zdCBH
THZvaWQqICosIEdMc2l6ZWkpOworI2VuZGlmIC8qIEdMX0dMRVhUX1BST1RPVFlQRVMgKi8KK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXQVJSQVlTRVhUUFJPQykgKEdM
ZW51bSBtb2RlLCBHTGludCAqZmlyc3QsIEdMc2l6ZWkgKmNvdW50LCBHTHNpemVpIHByaW1jb3Vu
dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1VTFRJRFJBV0VMRU1FTlRTRVhU
UFJPQykgKEdMZW51bSBtb2RlLCBjb25zdCBHTHNpemVpICpjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCogKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCisvKiBH
TF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAqLworI2lmbmRlZiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YQorI2RlZmluZSBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAxCisjZW5kaWYKKworLyogR0xfRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYworI2RlZmluZSBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLworI2lm
bmRlZiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyNkZWZpbmUgR0xfRVhUX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4IDEKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJf
MTBfMTBfMTBfUkVWICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9S
RVYKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFViAxCisjZW5kaWYK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xf
SU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAxCisjZW5k
aWYKKworLyogR0xfSU1HX3JlYWRfZm9ybWF0ICovCisjaWZuZGVmIEdMX0lNR19yZWFkX2Zvcm1h
dAorI2RlZmluZSBHTF9JTUdfcmVhZF9mb3JtYXQgMQorI2VuZGlmCisKKy8qIEdMX0lNR19zaGFk
ZXJfYmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5CisjZGVmaW5lIEdMX0lN
R19zaGFkZXJfYmluYXJ5IDEKKyNlbmRpZgorCisvKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lv
bl9wdnJ0YyAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YworI2Rl
ZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCisjZW5kaWYKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBOViBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKy8qIEdMX05WX2ZlbmNlICovCisjaWZuZGVmIEdMX05WX2ZlbmNlCisjZGVmaW5lIEdM
X05WX2ZlbmNlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xEZWxldGVGZW5jZXNOViAoR0xzaXplaSwgY29uc3QgR0x1aW50ICopOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2VuRmVuY2VzTlYgKEdMc2l6ZWksIEdMdWlu
dCAqKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsSXNGZW5jZU5WIChHTHVp
bnQpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xUZXN0RmVuY2VOViAoR0x1
aW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldEZlbmNlaXZOViAoR0x1aW50
LCBHTGVudW0sIEdMaW50ICopOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRmluaXNo
RmVuY2VOViAoR0x1aW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFNldEZlbmNl
TlYgKEdMdWludCwgR0xlbnVtKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xERUxFVEVGRU5DRVNOVlBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqZmVuY2Vz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VORkVOQ0VTTlZQUk9DKSAoR0xz
aXplaSBuLCBHTHVpbnQgKmZlbmNlcyk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQ
IFBGTkdMSVNGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Cit0eXBlZGVmIEdMYm9vbGVhbiAo
R0xfQVBJRU5UUllQIFBGTkdMVEVTVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VURkVOQ0VJVk5WUFJPQykgKEdMdWludCBmZW5j
ZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRklOSVNIRkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVt
IGNvbmRpdGlvbik7CisjZW5kaWYKKworLyogR0xfTlZfY292ZXJhZ2Vfc2FtcGxlICovCisjaWZu
ZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbENvdmVyYWdlTWFza05WIChHTGJvb2xlYW4gbWFzayk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xDb3ZlcmFnZU9wZXJhdGlvbk5WIChHTGVudW0gb3BlcmF0aW9uKTsKKyNlbmRp
ZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT1ZFUkFHRU1BU0tOVlBST0MpIChH
TGJvb2xlYW4gbWFzayk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVSQUdF
T1BFUkFUSU9OTlZQUk9DKSAoR0xlbnVtIG9wZXJhdGlvbik7CisjZW5kaWYKKworLyogR0xfTlZf
ZGVwdGhfbm9ubGluZWFyICovCisjaWZuZGVmIEdMX05WX2RlcHRoX25vbmxpbmVhcgorI2RlZmlu
ZSBHTF9OVl9kZXB0aF9ub25saW5lYXIgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgor
ICogUUNPTSBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdM
X1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9kcml2ZXJfY29udHJvbAor
I2RlZmluZSBHTF9RQ09NX2RyaXZlcl9jb250cm9sIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9sc1FDT00g
KEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpkcml2ZXJDb250cm9scyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9sU3RyaW5nUUNPTSAoR0x1
aW50IGRyaXZlckNvbnRyb2wsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNo
YXIgKmRyaXZlckNvbnRyb2xTdHJpbmcpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
RW5hYmxlRHJpdmVyQ29udHJvbFFDT00gKEdMdWludCBkcml2ZXJDb250cm9sKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbERpc2FibGVEcml2ZXJDb250cm9sUUNPTSAoR0x1aW50IGRy
aXZlckNvbnRyb2wpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdF
VERSSVZFUkNPTlRST0xTUUNPTVBST0MpIChHTGludCAqbnVtLCBHTHNpemVpIHNpemUsIEdMdWlu
dCAqZHJpdmVyQ29udHJvbHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRE
UklWRVJDT05UUk9MU1RSSU5HUUNPTVBST0MpIChHTHVpbnQgZHJpdmVyQ29udHJvbCwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZHJpdmVyQ29udHJvbFN0cmluZyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVOQUJMRURSSVZFUkNPTlRST0xRQ09N
UFJPQykgKEdMdWludCBkcml2ZXJDb250cm9sKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMRElTQUJMRURSSVZFUkNPTlRST0xRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9s
KTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldCAqLworI2lmbmRlZiBHTF9RQ09N
X2V4dGVuZGVkX2dldAorI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldCAxCisjaWZkZWYgR0xf
R0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4
dHVyZXNRQ09NIChHTHVpbnQgKnRleHR1cmVzLCBHTGludCBtYXhUZXh0dXJlcywgR0xpbnQgKm51
bVRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEJ1ZmZlcnNR
Q09NIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdMaW50ICpudW1CdWZmZXJz
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFJlbmRlcmJ1ZmZlcnNRQ09N
IChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdMaW50IG1heFJlbmRlcmJ1ZmZlcnMsIEdMaW50ICpu
dW1SZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEZy
YW1lYnVmZmVyc1FDT00gKEdMdWludCAqZnJhbWVidWZmZXJzLCBHTGludCBtYXhGcmFtZWJ1ZmZl
cnMsIEdMaW50ICpudW1GcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRXh0R2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdlFDT00gKEdMdWludCB0ZXh0dXJlLCBHTGVudW0g
ZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRUZXhPYmplY3RTdGF0ZU92ZXJyaWRlaVFDT00gKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4U3ViSW1hZ2VRQ09NIChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTHZvaWQgKnRleGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xFeHRHZXRCdWZmZXJQb2ludGVydlFDT00gKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAqKnBh
cmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVY
VFVSRVNRQ09NUFJPQykgKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRleHR1cmVzLCBHTGlu
dCAqbnVtVGV4dHVyZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRC
VUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdMaW50
ICpudW1CdWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUkVO
REVSQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpyZW5kZXJidWZmZXJzLCBHTGludCBtYXhSZW5k
ZXJidWZmZXJzLCBHTGludCAqbnVtUmVuZGVyYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTEVYVEdFVEZSQU1FQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpmcmFtZWJ1
ZmZlcnMsIEdMaW50IG1heEZyYW1lYnVmZmVycywgR0xpbnQgKm51bUZyYW1lYnVmZmVycyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFRFWExFVkVMUEFSQU1FVEVSSVZR
Q09NUFJPQykgKEdMdWludCB0ZXh0dXJlLCBHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEVYVFRFWE9CSkVDVFNUQVRFT1ZFUlJJREVJUUNPTVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
RVhUR0VUVEVYU1VCSU1BR0VRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhU
R0VUQlVGRkVSUE9JTlRFUlZRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAqKnBhcmFt
cyk7CisjZW5kaWYKKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQyICovCisjaWZuZGVmIEdMX1FD
T01fZXh0ZW5kZWRfZ2V0MgorI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldDIgMQorI2lmZGVm
IEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdl
dFNoYWRlcnNRQ09NIChHTHVpbnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50ICpu
dW1TaGFkZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFByb2dyYW1z
UUNPTSAoR0x1aW50ICpwcm9ncmFtcywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Qcm9n
cmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbEV4dElzUHJvZ3JhbUJp
bmFyeVFDT00gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEV4dEdldFByb2dyYW1CaW5hcnlTb3VyY2VRQ09NIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHNo
YWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRTSEFERVJTUUNPTVBST0MpIChHTHVpbnQg
KnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50ICpudW1TaGFkZXJzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUFJPR1JBTVNRQ09NUFJPQykgKEdMdWludCAq
cHJvZ3JhbXMsIEdMaW50IG1heFByb2dyYW1zLCBHTGludCAqbnVtUHJvZ3JhbXMpOwordHlwZWRl
ZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTEVYVElTUFJPR1JBTUJJTkFSWVFDT01QUk9D
KSAoR0x1aW50IHByb2dyYW0pOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRH
RVRQUk9HUkFNQklOQVJZU09VUkNFUUNPTVBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHNo
YWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKKyNlbmRpZgorCisvKiBH
TF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUgKi8KKyNpZm5kZWYgR0xfUUNPTV9wZXJmbW9uX2ds
b2JhbF9tb2RlCisjZGVmaW5lIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAxCisjZW5kaWYK
KworLyogR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nICovCisjaWZuZGVmIEdMX1FDT01fd3Jp
dGVvbmx5X3JlbmRlcmluZworI2RlZmluZSBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgMQor
I2VuZGlmCisKKy8qIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nICovCisjaWZuZGVmIEdMX1FDT01f
dGlsZWRfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nIDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xTdGFy
dFRpbGluZ1FDT00gKEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVp
Z2h0LCBHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xFbmRUaWxpbmdRQ09NIChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CisjZW5kaWYKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU1RBUlRUSUxJTkdRQ09NUFJPQykgKEdMdWlu
dCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTGJpdGZpZWxkIHBy
ZXNlcnZlTWFzayk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElOR1FD
T01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOworI2VuZGlmCisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2dsMmV4dF9oXyAqLwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMnBsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dM
RVMyL2dsMnBsYXRmb3JtLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMCBAQAorI2lmbmRlZiBfX2dsMnBsYXRmb3JtX2hfCisjZGVmaW5lIF9fZ2wycGxhdGZv
cm1faF8KKworLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAyMjoz
NTozNCAtMDgwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRl
dGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisv
KiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9wZW5HTCBFUyAy
LlggIGdsMi5oCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0
aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0
byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAor
ICogdGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4g
IFBsZWFzZSBzdWJtaXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMg
S2hyb25vcyBCdWd6aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmls
aW5nIGEgYnVnIGFnYWluc3QgcHJvZHVjdCAiT3BlbkdMLUVTIiBjb21wb25lbnQgIlJlZ2lzdHJ5
Ii4KKyAqLworCisjaW5jbHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKyNpZm5kZWYgR0xfQVBJ
Q0FMTAorI2RlZmluZSBHTF9BUElDQUxMICBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisjaWZu
ZGVmIEdMX0FQSUVOVFJZCisjZGVmaW5lIEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJRU5UUlkKKyNl
bmRpZgorCisjZW5kaWYgLyogX19nbDJwbGF0Zm9ybV9oXyAqLwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUvR0xTTEFO
Ry9SZXNvdXJjZUxpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9pbmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfUkVTT1VSQ0Vf
TElNSVRTX0lOQ0xVREVEXworI2RlZmluZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXworCitz
dHJ1Y3QgVEJ1aWx0SW5SZXNvdXJjZQoreworCWludCBtYXhWZXJ0ZXhBdHRyaWJzOworCWludCBt
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9yczsKKwlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7CisJaW50IG1h
eFZlcnRleFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzOworCWludCBtYXhUZXh0dXJlSW1hZ2VVbml0czsKKwlpbnQgbWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9yczsKKwlpbnQgbWF4RHJhd0J1ZmZlcnM7Cit9OworI2VuZGlmIC8vIF9SRVNPVVJDRV9M
SU1JVFNfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2lu
Y2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0dMU0xBTkcvU2hh
ZGVyTGFuZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKyNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTVBJ
TEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKworI2luY2x1ZGUgIlJlc291cmNlTGltaXRzLmgiCisK
KyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgQ19ERUNMIF9fY2RlY2wKKyNlbHNlCisjZGVmaW5lIF9f
ZmFzdGNhbGwKKyNkZWZpbmUgQ19ERUNMCisjZW5kaWYKKworLy8KKy8vIFRoaXMgaXMgdGhlIHBs
YXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFu
ZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci9saW5rZXIuCisvLworCisjaWZkZWYgX19j
cGx1c3BsdXMKKwlleHRlcm4gIkMiIHsKKyNlbmRpZgorLy8KKy8vIERyaXZlciBtdXN0IGNhbGwg
dGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgorLy8gY29tcGlsZXIvbGlu
a2VyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpOworLy8KKy8vIERyaXZlciBz
aG91bGQgY2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8KK2ludCBfX2Zhc3RjYWxsIFNoRmluYWxp
emUoKTsKKy8vCisvLyBUeXBlcyBvZiBsYW5ndWFnZXMgdGhlIGNvbXBpbGVyIGNhbiBjb25zdW1l
LgorLy8KK3R5cGVkZWYgZW51bSB7CisJRVNoTGFuZ1ZlcnRleCwKKwlFU2hMYW5nRnJhZ21lbnQs
CisJRVNoTGFuZ0NvdW50LAorfSBFU2hMYW5ndWFnZTsKKworLy8KKy8vIFRoZSBsYW5ndWFnZSBz
cGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvLgorLy8gSXQgY3VycmVudGx5IHN1cHBv
cnRzIE9wZW5HTCBFUyBhbmQgV2ViR0wgc3BlY2lmaWNhdGlvbnMuCisvLwordHlwZWRlZiBlbnVt
IHsKKyAgICBFU2hTcGVjR0xFUzIsCisgICAgRVNoU3BlY1dlYkdMLAorfSBFU2hTcGVjOworCisv
LworLy8gVHlwZXMgb2Ygb3V0cHV0IHRoZSBsaW5rZXIgd2lsbCBjcmVhdGUuCisvLwordHlwZWRl
ZiBlbnVtIHsKKwlFU2hFeFZlcnRleEZyYWdtZW50LAorCUVTaEV4RnJhZ21lbnQKK30gRVNoRXhl
Y3V0YWJsZTsKKworLy8KKy8vIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLgor
Ly8KK3R5cGVkZWYgZW51bSB7CisJRVNoT3B0Tm9HZW5lcmF0aW9uLAorCUVTaE9wdE5vbmUsCisJ
RVNoT3B0U2ltcGxlLCAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUgcXVp
Y2tseQorCUVTaE9wdEZ1bGwsICAgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IHdpbGwgdGFr
ZSBtb3JlIHRpbWUKK30gRVNoT3B0aW1pemF0aW9uTGV2ZWw7CisKKy8vCisvLyBCdWlsZCBhIHRh
YmxlIGZvciBiaW5kaW5ncy4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGxvY2F0aW5nCisvLyBhdHRy
aWJ1dGVzLCB1bmlmb3JtcywgZ2xvYmFscywgZXRjLiwgYXMgbmVlZGVkLgorLy8KK3R5cGVkZWYg
c3RydWN0IHsKKwljb25zdCBjaGFyKiBuYW1lOworCWludCBiaW5kaW5nOworfSBTaEJpbmRpbmc7
CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbnVtQmluZGluZ3M7CisJU2hCaW5kaW5nKiBiaW5k
aW5nczsgIC8vIGFycmF5IG9mIGJpbmRpbmdzCit9IFNoQmluZGluZ1RhYmxlOworCisvLworLy8g
U2hIYW5kbGUgaGVsZCBieSBidXQgb3BhcXVlIHRvIHRoZSBkcml2ZXIuICBJdCBpcyBhbGxvY2F0
ZWQsCisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci9saW5rZXIu
IEl0J3MgY29udGVudHMgCisvLyBhcmUgZGVmaW5lZCBieSBhbmQgdXNlZCBieSB0aGUgY29tcGls
ZXIgYW5kIGxpbmtlci4gIEZvciBleGFtcGxlLAorLy8gc3ltYm9sIHRhYmxlIGluZm9ybWF0aW9u
IGFuZCBvYmplY3QgY29kZSBwYXNzZWQgZnJvbSB0aGUgY29tcGlsZXIgCisvLyB0byB0aGUgbGlu
a2VyIGNhbiBiZSBzdG9yZWQgd2hlcmUgU2hIYW5kbGUgcG9pbnRzLgorLy8KKy8vIElmIGhhbmRs
ZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgorLy8KK3R5cGVkZWYgdm9pZCog
U2hIYW5kbGU7CisKKy8vCisvLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0
cm95IGNvbXBpbGVyL2xpbmtlcgorLy8gb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENvbnN0cnVj
dENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsgIC8vIG9uZSBwZXIgc2hhZGVyCitTaEhh
bmRsZSBTaENvbnN0cnVjdExpbmtlcihjb25zdCBFU2hFeGVjdXRhYmxlLCBpbnQgZGVidWdPcHRp
b25zKTsgIC8vIG9uZSBwZXIgc2hhZGVyIHBhaXIKK1NoSGFuZGxlIFNoQ29uc3RydWN0VW5pZm9y
bU1hcCgpOyAgICAgICAgICAgICAgICAgLy8gb25lIHBlciB1bmlmb3JtIG5hbWVzcGFjZSAoY3Vy
cmVudGx5IGVudGlyZSBwcm9ncmFtIG9iamVjdCkKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRsZSk7
CisKKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBib29sZWFuLCBpbmRp
Y2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworLy8gVGhlIGluZm8tbG9nIHNob3Vs
ZCBiZSB3cml0dGVuIGJ5IFNoQ29tcGlsZSBpbnRvIAorLy8gU2hIYW5kbGUsIHNvIGl0IGNhbiBh
bnN3ZXIgZnV0dXJlIHF1ZXJpZXMuCisvLworaW50IFNoQ29tcGlsZSgKKwljb25zdCBTaEhhbmRs
ZSwKKwljb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisJY29uc3QgaW50IG51bVN0
cmluZ3MsCisJY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwsCisJY29uc3QgVEJ1aWx0SW5SZXNv
dXJjZSAqcmVzb3VyY2VzLAorCWludCBkZWJ1Z09wdGlvbnMKKwkpOworCisKKy8vCisvLyBTaW1p
bGFyIHRvIFNoQ29tcGlsZSwgYnV0IGFjY2VwdHMgYW4gb3BhcXVlIGhhbmRsZSB0byBhbgorLy8g
aW50ZXJtZWRpYXRlIGxhbmd1YWdlIHN0cnVjdHVyZS4KKy8vCitpbnQgU2hDb21waWxlSW50ZXJt
ZWRpYXRlKAorCVNoSGFuZGxlIGNvbXBpbGVyLAorCVNoSGFuZGxlIGludGVybWVkaWF0ZSwKKwlj
b25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKKwlpbnQgZGVidWdnYWJsZSAgICAgICAgICAgLy8g
Ym9vbGVhbgorCSk7CisKK2ludCBTaExpbmsoCisJY29uc3QgU2hIYW5kbGUsICAgICAgICAgICAg
ICAgLy8gbGlua2VyIG9iamVjdAorCWNvbnN0IFNoSGFuZGxlIGhbXSwgICAgICAgICAgIC8vIGNv
bXBpbGVyIG9iamVjdHMgdG8gbGluayB0b2dldGhlcgorCWNvbnN0IGludCBudW1IYW5kbGVzLAor
CVNoSGFuZGxlIHVuaWZvcm1NYXAsICAgICAgICAgIC8vIHVwZGF0ZWQgd2l0aCBuZXcgdW5pZm9y
bXMKKwlzaG9ydCBpbnQqKiB1bmlmb3Jtc0FjY2Vzc2VkLCAgLy8gcmV0dXJuZWQgd2l0aCBpbmRl
eGVzIG9mIHVuaWZvcm1zIGFjY2Vzc2VkCisJaW50KiBudW1Vbmlmb3Jtc0FjY2Vzc2VkKTsgCQor
CitpbnQgU2hMaW5rRXh0KAorCWNvbnN0IFNoSGFuZGxlLCAgICAgICAgICAgICAgIC8vIGxpbmtl
ciBvYmplY3QKKwljb25zdCBTaEhhbmRsZSBoW10sICAgICAgICAgICAvLyBjb21waWxlciBvYmpl
Y3RzIHRvIGxpbmsgdG9nZXRoZXIKKwljb25zdCBpbnQgbnVtSGFuZGxlcyk7CisKKy8vCisvLyBT
aFNldEVuY3JweXRpb25NZXRob2QgaXMgYSBwbGFjZS1ob2xkZXIgZm9yIHNwZWNpZnlpbmcKKy8v
IGhvdyBzb3VyY2UgY29kZSBpcyBlbmNyeXB0ZWQuCisvLwordm9pZCBTaFNldEVuY3J5cHRpb25N
ZXRob2QoU2hIYW5kbGUpOworCisvLworLy8gQWxsIHRoZSBmb2xsb3dpbmcgcmV0dXJuIDAgaWYg
dGhlIGluZm9ybWF0aW9uIGlzIG5vdAorLy8gYXZhaWxhYmxlIGluIHRoZSBvYmplY3QgcGFzc2Vk
IGRvd24sIG9yIHRoZSBvYmplY3QgaXMgYmFkLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xv
Zyhjb25zdCBTaEhhbmRsZSk7Citjb25zdCBjaGFyKiBTaEdldE9iamVjdENvZGUoY29uc3QgU2hI
YW5kbGUpOworY29uc3Qgdm9pZCogU2hHZXRFeGVjdXRhYmxlKGNvbnN0IFNoSGFuZGxlKTsKK2Nv
bnN0IGNoYXIqIFNoR2V0VmFsaWRhdG9yTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSk7CitpbnQg
U2hTZXRWaXJ0dWFsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNoQmlu
ZGluZ1RhYmxlKik7ICAgLy8gdG8gZGV0ZWN0IHVzZXIgYWxpYXNpbmcKK2ludCBTaFNldEZpeGVk
QXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxlKik7
ICAgICAvLyB0byBmb3JjZSBhbnkgcGh5c2ljYWwgbWFwcGluZ3MKK2ludCBTaEdldFBoeXNpY2Fs
QXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxlKiop
OyAvLyBmb3IgYWxsIGF0dHJpYnV0ZXMKKy8vCisvLyBUZWxsIHRoZSBsaW5rZXIgdG8gbmV2ZXIg
YXNzaWduIGEgdmVydGV4IGF0dHJpYnV0ZSB0byB0aGlzIGxpc3Qgb2YgcGh5c2ljYWwgYXR0cmli
dXRlcworLy8KK2ludCBTaEV4Y2x1ZGVBdHRyaWJ1dGVzKGNvbnN0IFNoSGFuZGxlLCBpbnQgKmF0
dHJpYnV0ZXMsIGludCBjb3VudCk7CisKKy8vCisvLyBSZXR1cm5zIHRoZSBsb2NhdGlvbiBJRCBv
ZiB0aGUgbmFtZWQgdW5pZm9ybS4KKy8vIFJldHVybnMgLTEgaWYgZXJyb3IuCisvLworaW50IFNo
R2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IFNoSGFuZGxlIHVuaWZvcm1NYXAsIGNvbnN0IGNoYXIq
IG5hbWUpOworCitlbnVtIFREZWJ1Z09wdGlvbnMgeworCUVEZWJ1Z09wTm9uZSAgICAgICAgICAg
ICAgID0gMHgwMDAsCisJRURlYnVnT3BJbnRlcm1lZGlhdGUgICAgICAgPSAweDAwMSwKKwlFRGVi
dWdPcEFzc2VtYmx5ICAgICAgICAgICA9IDB4MDAyLAorCUVEZWJ1Z09wT2JqZWN0Q29kZSAgICAg
ICAgID0gMHgwMDQsCisJRURlYnVnT3BMaW5rTWFwcyAgICAgICAgICAgPSAweDAwOCwKKwlFRGVi
dWdPcFZlcmlmeUNvZGUJCSAgID0gMHgwMTAKK307CisjaWZkZWYgX19jcGx1c3BsdXMKKwl9Cisj
ZW5kaWYKKworI2VuZGlmIC8vIF9DT01QSUxFUl9JTlRFUkZBQ0VfSU5DTFVERURfCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9pbmNsdWRlL0tI
Ui9raHJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI2OSBAQAorI2lmbmRlZiBfX2tocnBsYXRmb3JtX2hfCisjZGVmaW5lIF9fa2hycGxhdGZvcm1f
aF8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFRoZSBLaHJvbm9zIEdyb3VwIElu
Yy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg
dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9v
ciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0
byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisq
KiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy
Z2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3Bp
ZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo
ZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhF
IE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoq
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g
T0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RI
RVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIEtocm9ub3MgcGxhdGZvcm0t
c3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zLgorICoKKyAqICRSZXZpc2lvbjogOTM1NiAk
IG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUyOjI1IC0wNzAwIChXZWQsIDIxIE9jdCAyMDA5KSAk
CisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0
Zm9ybS4gQWRvcHRlcnMgYXJlCisgKiBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBwbGF0Zm9ybSBzcGVj
aWZpYyBtb2RpZmljYXRpb25zIHRvIHRoZSBLaHJvbm9zCisgKiBncm91cCBzbyB0aGF0IHRoZXkg
Y2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuCisgKiBQbGVh
c2Ugc3VibWl0IGNoYW5nZXMgYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBC
dWd6aWxsYQorICogKGh0dHA6Ly9raHJvbm9zLm9yZy9idWd6aWxsYSkgYnkgZmlsaW5nIGEgYnVn
IGFnYWluc3QgcHJvZHVjdAorICogIktocm9ub3MgKGdlbmVyYWwpIiBjb21wb25lbnQgIlJlZ2lz
dHJ5Ii4KKyAqCisgKiBBIHByZWRlZmluZWQgdGVtcGxhdGUgd2hpY2ggZmlsbHMgaW4gc29tZSBv
ZiB0aGUgYnVnIGZpZWxkcyBjYW4gYmUKKyAqIHJlYWNoZWQgdXNpbmcgaHR0cDovL3Rpbnl1cmwu
Y29tL2tocnBsYXRmb3JtLWgtYnVncmVwb3J0LCBidXQgeW91CisgKiBtdXN0IGNyZWF0ZSBhIEJ1
Z3ppbGxhIGxvZ2luIGZpcnN0LgorICoKKyAqCisgKiBTZWUgdGhlIEltcGxlbWVudGVyJ3MgR3Vp
ZGVsaW5lcyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhpcyBmaWxlCisgKiBzaG91bGQg
YmUgbG9jYXRlZCBvbiB5b3VyIHN5c3RlbSBhbmQgZm9yIG1vcmUgZGV0YWlscyBvZiBpdHMgdXNl
OgorICogICAgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9pbXBsZW1lbnRlcnNfZ3Vp
ZGUucGRmCisgKgorICogVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBhcworICogICAgICAg
ICNpbmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKyAqIGJ5IEtocm9ub3MgY2xpZW50IEFQSSBo
ZWFkZXIgZmlsZXMgdGhhdCB1c2UgaXRzIHR5cGVzIGFuZCBkZWZpbmVzLgorICoKKyAqIFRoZSB0
eXBlcyBpbiBraHJwbGF0Zm9ybS5oIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gZGVmaW5lIEFQSS1z
cGVjaWZpYyB0eXBlcy4KKyAqCisgKiBUeXBlcyBkZWZpbmVkIGluIGtocnBsYXRmb3JtLmg6Cisg
KiAgICBraHJvbm9zX2ludDhfdCAgICAgICAgICAgICAgc2lnbmVkICAgOCAgYml0CisgKiAgICBr
aHJvbm9zX3VpbnQ4X3QgICAgICAgICAgICAgdW5zaWduZWQgOCAgYml0CisgKiAgICBraHJvbm9z
X2ludDE2X3QgICAgICAgICAgICAgc2lnbmVkICAgMTYgYml0CisgKiAgICBraHJvbm9zX3VpbnQx
Nl90ICAgICAgICAgICAgdW5zaWduZWQgMTYgYml0CisgKiAgICBraHJvbm9zX2ludDMyX3QgICAg
ICAgICAgICAgc2lnbmVkICAgMzIgYml0CisgKiAgICBraHJvbm9zX3VpbnQzMl90ICAgICAgICAg
ICAgdW5zaWduZWQgMzIgYml0CisgKiAgICBraHJvbm9zX2ludDY0X3QgICAgICAgICAgICAgc2ln
bmVkICAgNjQgYml0CisgKiAgICBraHJvbm9zX3VpbnQ2NF90ICAgICAgICAgICAgdW5zaWduZWQg
NjQgYml0CisgKiAgICBraHJvbm9zX2ludHB0cl90ICAgICAgICAgICAgc2lnbmVkICAgc2FtZSBu
dW1iZXIgb2YgYml0cyBhcyBhIHBvaW50ZXIKKyAqICAgIGtocm9ub3NfdWludHB0cl90ICAgICAg
ICAgICB1bnNpZ25lZCBzYW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlcgorICogICAga2hy
b25vc19zc2l6ZV90ICAgICAgICAgICAgIHNpZ25lZCAgIHNpemUKKyAqICAgIGtocm9ub3NfdXNp
emVfdCAgICAgICAgICAgICB1bnNpZ25lZCBzaXplCisgKiAgICBraHJvbm9zX2Zsb2F0X3QgICAg
ICAgICAgICAgc2lnbmVkICAgMzIgYml0IGZsb2F0aW5nIHBvaW50CisgKiAgICBraHJvbm9zX3Rp
bWVfbnNfdCAgICAgICAgICAgdW5zaWduZWQgNjQgYml0IHRpbWUgaW4gbmFub3NlY29uZHMKKyAq
ICAgIGtocm9ub3NfdXRpbWVfbmFub3NlY29uZHNfdCB1bnNpZ25lZCB0aW1lIGludGVydmFsIG9y
IGFic29sdXRlIHRpbWUgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW5vc2Vjb25kcworICogICAga2hyb25vc19zdGltZV9uYW5vc2Vjb25kc190IHNpZ25l
ZCB0aW1lIGludGVydmFsIGluIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9zX2Jvb2xlYW5fZW51
bV90ICAgICAgZW51bWVyYXRlZCBib29sZWFuIHR5cGUuIFRoaXMgc2hvdWxkCisgKiAgICAgIG9u
bHkgYmUgdXNlZCBhcyBhIGJhc2UgdHlwZSB3aGVuIGEgY2xpZW50IEFQSSdzIGJvb2xlYW4gdHlw
ZSBpcworICogICAgICBhbiBlbnVtLiBDbGllbnQgQVBJcyB3aGljaCB1c2UgYW4gaW50ZWdlciBv
ciBvdGhlciB0eXBlIGZvcgorICogICAgICBib29sZWFucyBjYW5ub3QgdXNlIHRoaXMgYXMgdGhl
IGJhc2UgdHlwZSBmb3IgdGhlaXIgYm9vbGVhbi4KKyAqCisgKiBUb2tlbnMgZGVmaW5lZCBpbiBr
aHJwbGF0Zm9ybS5oOgorICoKKyAqICAgIEtIUk9OT1NfRkFMU0UsIEtIUk9OT1NfVFJVRSBFbnVt
ZXJhdGVkIGJvb2xlYW4gZmFsc2UvdHJ1ZSB2YWx1ZXMuCisgKgorICogICAgS0hST05PU19TVVBQ
T1JUX0lOVDY0IGlzIDEgaWYgNjQgYml0IGludGVnZXJzIGFyZSBzdXBwb3J0ZWQ7IG90aGVyd2lz
ZSAwLgorICogICAgS0hST05PU19TVVBQT1JUX0ZMT0FUIGlzIDEgaWYgZmxvYXRzIGFyZSBzdXBw
b3J0ZWQ7IG90aGVyd2lzZSAwLgorICoKKyAqIENhbGxpbmcgY29udmVudGlvbiBtYWNyb3MgZGVm
aW5lZCBpbiB0aGlzIGZpbGU6CisgKiAgICBLSFJPTk9TX0FQSUNBTEwKKyAqICAgIEtIUk9OT1Nf
QVBJRU5UUlkKKyAqICAgIEtIUk9OT1NfQVBJQVRUUklCVVRFUworICoKKyAqIFRoZXNlIG1heSBi
ZSB1c2VkIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXM6CisgKgorICogICAgICBLSFJPTk9TX0FQ
SUNBTEwgdm9pZCBLSFJPTk9TX0FQSUVOVFJZIGZ1bmNuYW1lKAorICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFyZzEsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgYXJnMikgS0hST05PU19BUElBVFRSSUJVVEVTOworICovCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUNBTEwKKyAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICogVGhpcyBwcmVjZWRlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9u
IGluIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYg
IWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKyMgICBkZWZpbmUgS0hST05PU19BUElDQUxMIF9f
ZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VsaWYgZGVmaW5lZCAoX19TWU1CSUFOMzJfXykKKyMgICBk
ZWZpbmUgS0hST05PU19BUElDQUxMIElNUE9SVF9DCisjZWxzZQorIyAgIGRlZmluZSBLSFJPTk9T
X0FQSUNBTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERlZmluaXRpb24gb2Yg
S0hST05PU19BUElFTlRSWQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3MgdGhl
IHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiAgYW5kIHByZWNlZGVzIHRoZSBmdW5jdGlvbgor
ICogbmFtZSBpbiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlLgorICovCisjaWYgZGVmaW5lZChfV0lO
MzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18p
CisgICAgLyogV2luMzIgYnV0IG5vdCBXaW5DRSAqLworIyAgIGRlZmluZSBLSFJPTk9TX0FQSUVO
VFJZIF9fc3RkY2FsbAorI2Vsc2UKKyMgICBkZWZpbmUgS0hST05PU19BUElFTlRSWQorI2VuZGlm
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUFUVFJJ
QlVURVMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmb2xsb3dzIHRoZSBjbG9zaW5nIHBh
cmVudGhlc2lzIG9mIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgYXJndW1lbnRzLgorICovCisjaWYg
ZGVmaW5lZCAoX19BUk1DQ18yX18pCisjZGVmaW5lIEtIUk9OT1NfQVBJQVRUUklCVVRFUyBfX3Nv
ZnRmcAorI2Vsc2UKKyNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVTCisjZW5kaWYKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgKiBiYXNpYyB0eXBlIGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKyNpZiAoZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9f
ID49IDE5OTkwMUwpIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19TQ09fXykgfHwg
ZGVmaW5lZChfX1VTTENfXykKKworCisvKgorICogVXNpbmcgPHN0ZGludC5oPgorICovCisjaW5j
bHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9ub3Nf
aW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAga2hyb25vc191aW50MzJf
dDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlw
ZWRlZiB1aW50NjRfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBL
SFJPTk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAg
IDEKKworI2VsaWYgZGVmaW5lZChfX1ZNUyApIHx8IGRlZmluZWQoX19zZ2kpCisKKy8qCisgKiBV
c2luZyA8aW50dHlwZXMuaD4KKyAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGlu
dDMyX3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3Qg
ICAgICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICAg
ICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAgICAg
ICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAxCisj
ZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5lZChfV0lOMzIp
ICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18pCisKKy8qCisgKiBXaW4zMgorICovCit0eXBl
ZGVmIF9faW50MzIgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdW5z
aWduZWQgX19pbnQzMiAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2NCAg
ICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0
ICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
ICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5lZChf
X3N1bl9fKSB8fCBkZWZpbmVkKF9fZGlnaXRhbF9fKQorCisvKgorICogU3VuIG9yIERpZ2l0YWwK
KyAqLwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7Cit0
eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7CisjaWYgZGVm
aW5lZChfX2FyY2g2NF9fKSB8fCBkZWZpbmVkKF9MUDY0KQordHlwZWRlZiBsb25nIGludCAgICAg
ICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50ICAg
ICAgIGtocm9ub3NfdWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgaW50ICAgICAg
ICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgIGto
cm9ub3NfdWludDY0X3Q7CisjZW5kaWYgLyogX19hcmNoNjRfXyAqLworI2RlZmluZSBLSFJPTk9T
X1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKwor
I2VsaWYgMAorCisvKgorICogSHlwb3RoZXRpY2FsIHBsYXRmb3JtIHdpdGggbm8gZmxvYXQgb3Ig
aW50NjQgc3VwcG9ydAorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGtocm9u
b3NfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191aW50
MzJfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMAorI2RlZmluZSBLSFJPTk9T
X1NVUFBPUlRfRkxPQVQgICAwCisKKyNlbHNlCisKKy8qCisgKiBHZW5lcmljIGZhbGxiYWNrCisg
Ki8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAg
a2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJvbm9z
X3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7Cisj
ZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JU
X0ZMT0FUICAgMQorCisjZW5kaWYKKworCisvKgorICogVHlwZXMgdGhhdCBhcmUgKHNvIGZhcikg
dGhlIHNhbWUgb24gYWxsIHBsYXRmb3JtcworICovCit0eXBlZGVmIHNpZ25lZCAgIGNoYXIgICAg
ICAgICAga2hyb25vc19pbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAga2hy
b25vc191aW50OF90OwordHlwZWRlZiBzaWduZWQgICBzaG9ydCBpbnQgICAgIGtocm9ub3NfaW50
MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50ICAgICBraHJvbm9zX3VpbnQxNl90Owor
dHlwZWRlZiBzaWduZWQgICBsb25nICBpbnQgICAgIGtocm9ub3NfaW50cHRyX3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgIGludCAgICAga2hyb25vc191aW50cHRyX3Q7Cit0eXBlZGVmIHNpZ25l
ZCAgIGxvbmcgIGludCAgICAga2hyb25vc19zc2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25n
ICBpbnQgICAgIGtocm9ub3NfdXNpemVfdDsKKworI2lmIEtIUk9OT1NfU1VQUE9SVF9GTE9BVAor
LyoKKyAqIEZsb2F0IHR5cGUKKyAqLwordHlwZWRlZiAgICAgICAgICBmbG9hdCAgICAgICAgIGto
cm9ub3NfZmxvYXRfdDsKKyNlbmRpZgorCisjaWYgS0hST05PU19TVVBQT1JUX0lOVDY0CisvKiBU
aW1lIHR5cGVzCisgKgorICogVGhlc2UgdHlwZXMgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEg
dGltZSBpbnRlcnZhbCBpbiBuYW5vc2Vjb25kcyBvcgorICogYW4gYWJzb2x1dGUgVW5hZGp1c3Rl
ZCBTeXN0ZW0gVGltZS4gIFVuYWRqdXN0ZWQgU3lzdGVtIFRpbWUgaXMgdGhlIG51bWJlcgorICog
b2YgbmFub3NlY29uZHMgc2luY2Ugc29tZSBhcmJpdHJhcnkgc3lzdGVtIGV2ZW50IChlLmcuIHNp
bmNlIHRoZSBsYXN0CisgKiB0aW1lIHRoZSBzeXN0ZW0gYm9vdGVkKS4gIFRoZSBVbmFkanVzdGVk
IFN5c3RlbSBUaW1lIGlzIGFuIHVuc2lnbmVkCisgKiA2NCBiaXQgdmFsdWUgdGhhdCB3cmFwcyBi
YWNrIHRvIDAgZXZlcnkgNTg0IHllYXJzLiAgVGltZSBpbnRlcnZhbHMKKyAqIG1heSBiZSBlaXRo
ZXIgc2lnbmVkIG9yIHVuc2lnbmVkLgorICovCit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgICAg
ICAga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190OwordHlwZWRlZiBraHJvbm9zX2ludDY0X3Qg
ICAgICAgIGtocm9ub3Nfc3RpbWVfbmFub3NlY29uZHNfdDsKKyNlbmRpZgorCisvKgorICogRHVt
bXkgdmFsdWUgdXNlZCB0byBwYWQgZW51bSB0eXBlcyB0byAzMiBiaXRzLgorICovCisjaWZuZGVm
IEtIUk9OT1NfTUFYX0VOVU0KKyNkZWZpbmUgS0hST05PU19NQVhfRU5VTSAweDdGRkZGRkZGCisj
ZW5kaWYKKworLyoKKyAqIEVudW1lcmF0ZWQgYm9vbGVhbiB0eXBlCisgKgorICogVmFsdWVzIG90
aGVyIHRoYW4gemVybyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSB0cnVlLiAgVGhlcmVmb3Jl
CisgKiBjb21wYXJpc29ucyBzaG91bGQgbm90IGJlIG1hZGUgYWdhaW5zdCBLSFJPTk9TX1RSVUUu
CisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgS0hST05PU19GQUxTRSA9IDAsCisgICAgS0hST05P
U19UUlVFICA9IDEsCisgICAgS0hST05PU19CT09MRUFOX0VOVU1fRk9SQ0VfU0laRSA9IEtIUk9O
T1NfTUFYX0VOVU0KK30ga2hyb25vc19ib29sZWFuX2VudW1fdDsKKworI2VuZGlmIC8qIF9fa2hy
cGxhdGZvcm1faF8gKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3Jj
L0FOR0xFLnNsbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9BTkdMRS5zbG4JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9BTkdMRS5zbG4JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK++7vw0K
K01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEw
LjAwDQorIyBWaXN1YWwgQysrIEV4cHJlc3MgMjAwOA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRB
LTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliRUdMIiwgImxpYkVHTFxsaWJFR0wudmNw
cm9qIiwgIntFNzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlQcm9qZWN0
U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7QjU4NzFBN0Et
OTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSA9IHtCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05
ODFFNkY0NDhFNzh9DQorCUVuZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KK1Byb2plY3Qo
Ins4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliR0xFU3YyIiwg
ImxpYkdMRVN2MlxsaWJHTEVTdjIudmNwcm9qIiwgIntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05
ODFFNkY0NDhFNzh9Ig0KKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBv
c3RQcm9qZWN0DQorCQl7NTYyMEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fSA9IHs1
NjIwRjBFNC02QzQzLTQ5QkMtQTE3OC1CODA0RTFBMEMzQTd9DQorCUVuZFByb2plY3RTZWN0aW9u
DQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkx
QkM5NDJ9IikgPSAidHJhbnNsYXRvcl9obHNsIiwgImNvbXBpbGVyXHRyYW5zbGF0b3JfaGxzbC52
Y3Byb2oiLCAiezU2MjBGMEU0LTZDNDMtNDlCQy1BMTc4LUI4MDRFMUEwQzNBN30iDQorCVByb2pl
Y3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXs1QjNBNkRC
OC0xRTdFLTQwRDctOTJCOS1EQThBQUU2MTlGQUR9ID0gezVCM0E2REI4LTFFN0UtNDBENy05MkI5
LURBOEFBRTYxOUZBRH0NCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQorUHJvamVj
dCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ0cmFuc2xhdG9y
X2NvbW1vbiIsICJjb21waWxlclx0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2oiLCAiezVCM0E2REI4
LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH0iDQorRW5kUHJvamVjdA0KK0dsb2JhbA0KKwlH
bG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlv
bg0KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVh
c2V8V2luMzINCisJRW5kR2xvYmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25m
aWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KKwkJe0U3NDZGQ0E5LTY0QzMtNDMz
RS04NUU4LTlBNUE2N0FCN0VENn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIN
CisJCXtFNzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9LkRlYnVnfFdpbjMyLkJ1
aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0U3NDZGQ0E5LTY0QzMtNDMzRS04NUU4LTlBNUE2N0FC
N0VENn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RTc0NkZD
QTktNjRDMy00MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBS
ZWxlYXNlfFdpbjMyDQorCQl7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fS5E
ZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0I1ODcxQTdBLTk2OEMtNDJF
My1BMzNCLTk4MUU2RjQ0OEU3OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQor
CQl7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fS5SZWxlYXNlfFdpbjMyLkFj
dGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFF
NkY0NDhFNzh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs1NjIw
RjBFNC02QzQzLTQ5QkMtQTE3OC1CODA0RTFBMEMzQTd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9
IERlYnVnfFdpbjMyDQorCQl7NTYyMEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fS5E
ZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs1NjIwRjBFNC02QzQzLTQ5QkMt
QTE3OC1CODA0RTFBMEMzQTd9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4z
Mg0KKwkJezU2MjBGMEU0LTZDNDMtNDlCQy1BMTc4LUI4MDRFMUEwQzNBN30uUmVsZWFzZXxXaW4z
Mi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURB
OEFBRTYxOUZBRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs1QjNB
NkRCOC0xRTdFLTQwRDctOTJCOS1EQThBQUU2MTlGQUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBE
ZWJ1Z3xXaW4zMg0KKwkJezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH0uUmVs
ZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NUIzQTZEQjgtMUU3RS00
MEQ3LTkyQjktREE4QUFFNjE5RkFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdp
bjMyDQorCUVuZEdsb2JhbFNlY3Rpb24NCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRp
ZXMpID0gcHJlU29sdXRpb24NCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KKwlFbmRHbG9i
YWxTZWN0aW9uDQorRW5kR2xvYmFsDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNDQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworeworICAndGFyZ2V0cyc6IFsKKyAgICB7CisgICAg
ICAndGFyZ2V0X25hbWUnOiAndHJhbnNsYXRvcl9jb21tb24nLAorICAgICAgJ3R5cGUnOiAnc3Rh
dGljX2xpYnJhcnknLAorICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgJy4nLAorICAg
ICAgICAnLi4vaW5jbHVkZScsCisgICAgICBdLAorICAgICAgJ3ZhcmlhYmxlcyc6IHsKKyAgICAg
ICAgJ2dsc2xhbmdfY3BwX2ZpbGUnOiAnPChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nLmNwcCcs
CisgICAgICAgICdnbHNsYW5nX3RhYl9jcHBfZmlsZSc6ICc8KElOVEVSTUVESUFURV9ESVIpL2ds
c2xhbmdfdGFiLmNwcCcsCisgICAgICAgICdnbHNsYW5nX3RhYl9oX2ZpbGUnOiAnPChJTlRFUk1F
RElBVEVfRElSKS9nbHNsYW5nX3RhYi5oJywKKyAgICAgIH0sCisgICAgICAnc291cmNlcyc6IFsK
KyAgICAgICAgJ2NvbXBpbGVyL0Jhc2VUeXBlcy5oJywKKyAgICAgICAgJ2NvbXBpbGVyL0NvbW1v
bi5oJywKKyAgICAgICAgJ2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaCcsCisgICAgICAgICdjb21w
aWxlci9kZWJ1Zy5jcHAnLAorICAgICAgICAnY29tcGlsZXIvZGVidWcuaCcsCisgICAgICAgICdj
b21waWxlci9JbmZvU2luay5jcHAnLAorICAgICAgICAnY29tcGlsZXIvSW5mb1NpbmsuaCcsCisg
ICAgICAgICdjb21waWxlci9Jbml0aWFsaXplLmNwcCcsCisgICAgICAgICdjb21waWxlci9Jbml0
aWFsaXplLmgnLAorICAgICAgICAnY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAnLAorICAgICAg
ICAnY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oJywKKyAgICAgICAgJ2NvbXBpbGVyL0luaXRpYWxp
emVHbG9iYWxzLmgnLAorICAgICAgICAnY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
JywKKyAgICAgICAgJ2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAnLAorICAgICAgICAnY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgnLAorICAgICAgICAnY29tcGlsZXIvaW50ZXJtT3V0LmNwcCcsCisg
ICAgICAgICdjb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAnLAorICAgICAgICAnY29tcGlsZXIv
TGluay5jcHAnLAorICAgICAgICAnY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCcsCisgICAg
ICAgICdjb21waWxlci9NTWFwLmgnLAorICAgICAgICAnY29tcGlsZXIvb3NpbmNsdWRlLmgnLAor
ICAgICAgICAnY29tcGlsZXIvcGFyc2VDb25zdC5jcHAnLAorICAgICAgICAnY29tcGlsZXIvUGFy
c2VIZWxwZXIuY3BwJywKKyAgICAgICAgJ2NvbXBpbGVyL1BhcnNlSGVscGVyLmgnLAorICAgICAg
ICAnY29tcGlsZXIvUG9vbEFsbG9jLmNwcCcsCisgICAgICAgICdjb21waWxlci9Qb29sQWxsb2Mu
aCcsCisgICAgICAgICdjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAnLAorICAgICAgICAnY29t
cGlsZXIvUXVhbGlmaWVyQWxpdmUuaCcsCisgICAgICAgICdjb21waWxlci9SZW1vdmVUcmVlLmNw
cCcsCisgICAgICAgICdjb21waWxlci9SZW1vdmVUcmVlLmgnLAorICAgICAgICAnY29tcGlsZXIv
U2hhZGVyTGFuZy5jcHAnLAorICAgICAgICAnY29tcGlsZXIvU2hIYW5kbGUuaCcsCisgICAgICAg
ICdjb21waWxlci9TeW1ib2xUYWJsZS5jcHAnLAorICAgICAgICAnY29tcGlsZXIvU3ltYm9sVGFi
bGUuaCcsCisgICAgICAgICdjb21waWxlci9UeXBlcy5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3Vu
aXN0ZC5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMnLAorICAgICAg
ICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCcsCisgICAgICAgICdjb21waWxlci9wcmVw
cm9jZXNzb3IvY29tcGlsZS5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YycsCisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgnLAorICAgICAgICAnY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuYycsCisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmgnLAorICAgICAgICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oJywKKyAgICAgICAg
J2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgnLAorICAgICAgICAnY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NjYW5uZXIuYycsCisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCcs
CisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jJywKKyAgICAgICAgJ2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgnLAorICAgICAgICAnY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5jJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aCcsCisgICAgICAgICMgR2VuZXJhdGVkIGZpbGVzCisgICAgICAgICc8KGdsc2xhbmdfY3BwX2Zp
bGUpJywKKyAgICAgICAgJzwoZ2xzbGFuZ190YWJfY3BwX2ZpbGUpJywKKyAgICAgICAgJzwoZ2xz
bGFuZ190YWJfaF9maWxlKScsCisgICAgICBdLAorICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAg
ICAgIFsnT1M9PSJ3aW4iJywgeworICAgICAgICAgICdzb3VyY2VzJzogWydjb21waWxlci9vc3Nv
dXJjZV93aW4uY3BwJ10sCisgICAgICAgIH0sIHsgIyBlbHNlOiBwb3NpeAorICAgICAgICAgICdz
b3VyY2VzJzogWydjb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAnXSwKKyAgICAgICAgfV0sCisg
ICAgICBdLAorICAgICAgJ2FjdGlvbnMnOiBbCisgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9u
X25hbWUnOiAnZmxleF9nbHNsYW5nJywKKyAgICAgICAgICAnaW5wdXRzJzogWydjb21waWxlci9n
bHNsYW5nLmwnXSwKKyAgICAgICAgICAnb3V0cHV0cyc6IFsnPChnbHNsYW5nX2NwcF9maWxlKSdd
LAorICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAgICAnZmxleCcsCisgICAgICAgICAg
ICAnLS1ub2xpbmUnLAorICAgICAgICAgICAgJy0tbm91bmlzdGQnLAorICAgICAgICAgICAgJy0t
b3V0ZmlsZT08KGdsc2xhbmdfY3BwX2ZpbGUpJywKKyAgICAgICAgICAgICc8KF9pbnB1dHMpJywK
KyAgICAgICAgICBdLAorICAgICAgICAgICdtZXNzYWdlJzogJ0V4ZWN1dGluZyBmbGV4IG9uIDwo
X2lucHV0cyknLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgJ2FjdGlvbl9uYW1l
JzogJ2Jpc29uX2dsc2xhbmcnLAorICAgICAgICAgICdpbnB1dHMnOiBbJ2NvbXBpbGVyL2dsc2xh
bmcueSddLAorICAgICAgICAgICdvdXRwdXRzJzogWyc8KGdsc2xhbmdfdGFiX2NwcF9maWxlKScs
ICc8KGdsc2xhbmdfdGFiX2hfZmlsZSknXSwKKyAgICAgICAgICAnYWN0aW9uJzogWworICAgICAg
ICAgICAgJ2Jpc29uJywKKyAgICAgICAgICAgICctLW5vLWxpbmVzJywKKyAgICAgICAgICAgICct
LWRlZmluZXM9PChnbHNsYW5nX3RhYl9oX2ZpbGUpJywKKyAgICAgICAgICAgICctLXNrZWxldG9u
PXlhY2MuYycsCisgICAgICAgICAgICAnLS1vdXRwdXQ9PChnbHNsYW5nX3RhYl9jcHBfZmlsZSkn
LAorICAgICAgICAgICAgJzwoX2lucHV0cyknLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ21l
c3NhZ2UnOiAnRXhlY3V0aW5nIGJpc29uIG9uIDwoX2lucHV0cyknLAorICAgICAgICB9LAorICAg
ICAgXSwKKyAgICB9LAorICAgIHsKKyAgICAgICd0YXJnZXRfbmFtZSc6ICd0cmFuc2xhdG9yX2ds
c2wnLAorICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAorICAgICAgJ2RlcGVuZGVuY2ll
cyc6IFsndHJhbnNsYXRvcl9jb21tb24nXSwKKyAgICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAg
ICAgICcuJywKKyAgICAgICAgJy4uL2luY2x1ZGUnLAorICAgICAgXSwKKyAgICAgICdzb3VyY2Vz
JzogWworICAgICAgICAnY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwJywKKyAgICAgICAgJ2NvbXBp
bGVyL091dHB1dEdMU0wuY3BwJywKKyAgICAgICAgJ2NvbXBpbGVyL091dHB1dEdMU0wuaCcsCisg
ICAgICAgICdjb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAnLAorICAgICAgICAnY29tcGlsZXIv
VHJhbnNsYXRvckdMU0wuaCcsCisgICAgICBdLAorICAgIH0sCisgICAgeworICAgICAgJ3Rhcmdl
dF9uYW1lJzogJ3RyYW5zbGF0b3JfaGxzbCcsCisgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFy
eScsCisgICAgICAnZGVwZW5kZW5jaWVzJzogWyd0cmFuc2xhdG9yX2NvbW1vbiddLAorICAgICAg
J2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgJy4nLAorICAgICAgICAnLi4vaW5jbHVkZScsCisg
ICAgICBdLAorICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICdjb21waWxlci9Db2RlR2VuSExT
TC5jcHAnLAorICAgICAgICAnY29tcGlsZXIvT3V0cHV0SExTTC5jcHAnLAorICAgICAgICAnY29t
cGlsZXIvT3V0cHV0SExTTC5oJywKKyAgICAgICAgJ2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNw
cCcsCisgICAgICAgICdjb21waWxlci9UcmFuc2xhdG9ySExTTC5oJywKKyAgICAgICAgJ2NvbXBp
bGVyL1VuZm9sZFNlbGVjdC5jcHAnLAorICAgICAgICAnY29tcGlsZXIvVW5mb2xkU2VsZWN0Lmgn
LAorICAgICAgXSwKKyAgICB9LAorICBdLAorICAnY29uZGl0aW9ucyc6IFsKKyAgICBbJ09TPT0i
d2luIicsIHsKKyAgICAgICd0YXJnZXRzJzogWworICAgICAgICB7CisgICAgICAgICAgJ3Rhcmdl
dF9uYW1lJzogJ2xpYkdMRVN2MicsCisgICAgICAgICAgJ3R5cGUnOiAnc2hhcmVkX2xpYnJhcnkn
LAorICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3RyYW5zbGF0b3JfaGxzbCddLAorICAgICAg
ICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAnLicsCisgICAgICAgICAgICAnLi4v
aW5jbHVkZScsCisgICAgICAgICAgICAnJChEWFNES19ESVIpL2luY2x1ZGUnLAorICAgICAgICAg
IF0sCisgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAnY29tbW9uL2FuZ2xldXRp
bHMuaCcsCisgICAgICAgICAgICAnY29tbW9uL2RlYnVnLmNwcCcsCisgICAgICAgICAgICAnY29t
bW9uL2RlYnVnLmgnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNw
cCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCcsCisgICAgICAg
ICAgICAnbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAnLAorICAgICAgICAgICAgJ2xpYkdMRVN2
Mi9nZW9tZXRyeS9keDkuaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4
RGF0YU1hbmFnZXIuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhE
YXRhTWFuYWdlci5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29u
dmVyc2lvbi5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1h
bmFnZXIuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1h
bmFnZXIuaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL0JsaXQuY3BwJywKKyAgICAgICAgICAg
ICdsaWJHTEVTdjIvQmxpdC5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvQnVmZmVyLmNwcCcs
CisgICAgICAgICAgICAnbGliR0xFU3YyL0J1ZmZlci5oJywKKyAgICAgICAgICAgICdsaWJHTEVT
djIvQ29udGV4dC5jcHAnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9Db250ZXh0LmgnLAorICAg
ICAgICAgICAgJ2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ2xpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvbGliR0xFU3YyLmNw
cCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYnLAorICAgICAgICAgICAg
J2xpYkdMRVN2Mi9tYWluLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL21haW4uaCcsCisg
ICAgICAgICAgICAnbGliR0xFU3YyL21hdGh1dGlsLmgnLAorICAgICAgICAgICAgJ2xpYkdMRVN2
Mi9Qcm9ncmFtLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL1Byb2dyYW0uaCcsCisgICAg
ICAgICAgICAnbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL1NoYWRlci5jcHAn
LAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9TaGFkZXIuaCcsCisgICAgICAgICAgICAnbGliR0xF
U3YyL1RleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvVGV4dHVyZS5oJywKKyAg
ICAgICAgICAgICdsaWJHTEVTdjIvdXRpbGl0aWVzLmNwcCcsCisgICAgICAgICAgICAnbGliR0xF
U3YyL3V0aWxpdGllcy5oJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdtc3ZzX3NldHRpbmdz
JzogeworICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKKyAgICAgICAgICAgICAgJ0FkZGl0
aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOiBbJyQoRFhTREtfRElSKS9saWIveDg2J10sCisgICAg
ICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzogWydkM2R4OS5saWInXSwKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
J3RhcmdldF9uYW1lJzogJ2xpYkVHTCcsCisgICAgICAgICAgJ3R5cGUnOiAnc2hhcmVkX2xpYnJh
cnknLAorICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ2xpYkdMRVN2MiddLAorICAgICAgICAg
ICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAnLicsCisgICAgICAgICAgICAnLi4vaW5j
bHVkZScsCisgICAgICAgICAgXSwKKyAgICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAg
ICdjb21tb24vYW5nbGV1dGlscy5oJywKKyAgICAgICAgICAgICdjb21tb24vZGVidWcuY3BwJywK
KyAgICAgICAgICAgICdjb21tb24vZGVidWcuaCcsCisgICAgICAgICAgICAnbGliRUdML0NvbmZp
Zy5jcHAnLAorICAgICAgICAgICAgJ2xpYkVHTC9Db25maWcuaCcsCisgICAgICAgICAgICAnbGli
RUdML0Rpc3BsYXkuY3BwJywKKyAgICAgICAgICAgICdsaWJFR0wvRGlzcGxheS5oJywKKyAgICAg
ICAgICAgICdsaWJFR0wvbGliRUdMLmNwcCcsCisgICAgICAgICAgICAnbGliRUdML2xpYkVHTC5k
ZWYnLAorICAgICAgICAgICAgJ2xpYkVHTC9tYWluLmNwcCcsCisgICAgICAgICAgICAnbGliRUdM
L21haW4uaCcsCisgICAgICAgICAgICAnbGliRUdML1N1cmZhY2UuY3BwJywKKyAgICAgICAgICAg
ICdsaWJFR0wvU3VyZmFjZS5oJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdtc3ZzX3NldHRp
bmdzJzogeworICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKKyAgICAgICAgICAgICAgJ0Fk
ZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiBbJ2QzZDkubGliJ10sCisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfV0sCisgIF0sCit9CisKKyMgTG9j
YWwgVmFyaWFibGVzOgorIyB0YWItd2lkdGg6MgorIyBpbmRlbnQtdGFicy1tb2RlOm5pbAorIyBF
bmQ6CisjIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTIgc2hpZnR3aWR0aD0yOgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9q
L3BhdWxzLm1vZGUxdjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3BhdWxzLm1vZGUxdjMJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzczIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJ
QyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE
cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0Pgor
CTxrZXk+QWN0aXZlUGVyc3BlY3RpdmVOYW1lPC9rZXk+CisJPHN0cmluZz5Qcm9qZWN0PC9zdHJp
bmc+CisJPGtleT5BbGxvd2VkTW9kdWxlczwva2V5PgorCTxhcnJheT4KKwkJPGRpY3Q+CisJCQk8
a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5N
YXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8
L2tleT4KKwkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8L3N0cmluZz4KKwkJCTxr
ZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Hcm91cHMgYW5kIEZpbGVzIE91dGxpbmUgVmlldzwv
c3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5
PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8
c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWE5h
dmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RWRp
dG9yPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRo
PC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4K
KwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+
WENUYXNrTGlzdE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PlRhc2sgTGlzdDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVM
b2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2Vz
PC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8
c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxz
dHJpbmc+RmlsZSBhbmQgU21hcnQgR3JvdXAgRGV0YWlsIFZpZXdlcjwvc3RyaW5nPgorCQk8L2Rp
Y3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48
L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmlu
Zz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJ1aWxkUmVzdWx0c01vZHVs
ZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRldGFpbGVkIEJ1aWxk
IFJlc3VsdHMgVmlld2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1
bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0
YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCTxzdHJpbmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5Qcm9qZWN0IEJhdGNoIEZpbmQgVG9vbDwvc3RyaW5nPgorCQk8L2Rp
Y3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48
L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmlu
Zz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDUHJvamVjdEZvcm1hdENvbmZs
aWN0c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlByb2pl
Y3QgRm9ybWF0IENvbmZsaWN0cyBMaXN0PC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJ
CQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtl
eT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5
Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzIFRvb2w8L3N0cmluZz4KKwkJPC9kaWN0
PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9z
dHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJpbmc+
CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8
L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyPC9z
dHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+
CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxz
dHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQ1ZT
TW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U291cmNlIENv
ZGUgQ29udHJvbCBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1
bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0
YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCTxzdHJpbmc+UEJYRGVidWdCcmVha3BvaW50c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5O
YW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnIEJyZWFrcG9pbnRzIFRvb2w8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9z
dHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5YQ0RvY2thYmxlSW5zcGVj
dG9yPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+SW5zcGVjdG9yPC9z
dHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+
CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxz
dHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYT3Bl
blF1aWNrbHlNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5P
cGVuIFF1aWNrbHkgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5C
dW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5z
dGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+
CisJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1l
PC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnZ2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+
CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJ
PGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5N
b2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4KKwkJCTxr
ZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBDb25zb2xlPC9zdHJpbmc+CisJCTwvZGlj
dD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwv
c3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5n
PgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVsZTwvc3Ry
aW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBzaG90cyBUb29sPC9zdHJp
bmc+CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+QnVuZGxlUGF0aDwva2V5PgorCTxzdHJp
bmc+L0RldmVsb3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RldlRvb2xzSW50ZXJmYWNl
LmZyYW1ld29yay9SZXNvdXJjZXM8L3N0cmluZz4KKwk8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CisJ
PHN0cmluZz5EZWZhdWx0RGVzY3JpcHRpb25LZXk8L3N0cmluZz4KKwk8a2V5PkRvY2tpbmdTeXN0
ZW1WaXNpYmxlPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PkV4dGVuc2lvbjwva2V5PgorCTxzdHJp
bmc+bW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+RmF2QmFyQ29uZmlnPC9rZXk+CisJPGRpY3Q+CisJ
CTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJPHN0cmluZz5GQkM3NkI1ODExRjYy
NjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJPGtleT5YQ0Jhck1vZHVsZUl0ZW1OYW1lczwva2V5Pgor
CQk8ZGljdC8+CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtczwva2V5PgorCQk8YXJyYXkvPgorCTwv
ZGljdD4KKwk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCTxmYWxzZS8+CisJ
PGtleT5JZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUucGVyc3BlY3RpdmVzLnBy
b2plY3QubW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+TWFqb3JWZXJzaW9uPC9rZXk+CisJPGludGVn
ZXI+MzM8L2ludGVnZXI+CisJPGtleT5NaW5vclZlcnNpb248L2tleT4KKwk8aW50ZWdlcj4wPC9p
bnRlZ2VyPgorCTxrZXk+TmFtZTwva2V5PgorCTxzdHJpbmc+RGVmYXVsdDwvc3RyaW5nPgorCTxr
ZXk+Tm90aWZpY2F0aW9uczwva2V5PgorCTxhcnJheS8+CisJPGtleT5PcGVuRWRpdG9yczwva2V5
PgorCTxhcnJheS8+CisJPGtleT5QZXJzcGVjdGl2ZVdpZHRoczwva2V5PgorCTxhcnJheT4KKwkJ
PGludGVnZXI+LTE8L2ludGVnZXI+CisJCTxpbnRlZ2VyPi0xPC9pbnRlZ2VyPgorCTwvYXJyYXk+
CisJPGtleT5QZXJzcGVjdGl2ZXM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0PgorCQkJPGtleT5D
aG9zZW5Ub29sYmFySXRlbXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPmFjdGl2ZS1j
b21iby1wb3B1cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YWN0aW9uPC9zdHJpbmc+CisJCQkJPHN0
cmluZz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+ZGVi
dWdnZXItZW5hYmxlLWJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQkJPHN0cmluZz5idWlsZC1hbmQt
Z288L3N0cmluZz4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5pZGUuUEJYVG9vbGJhclN0b3BCdXR0
b248L3N0cmluZz4KKwkJCQk8c3RyaW5nPmdldC1pbmZvPC9zdHJpbmc+CisJCQkJPHN0cmluZz5O
U1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+Y29tLmFwcGxl
LnBieC50b29sYmFyLnNlYXJjaGZpZWxkPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5D
b250cm9sbGVyQ2xhc3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxr
ZXk+SWNvbk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9qZWN0V2l0aEVkaXRvcjwv
c3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZl
LnByb2plY3Q8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPGZhbHNlLz4K
KwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+
Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PlBCWEJv
dHRvbVNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz4x
QzM3RkJBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQUFD
MDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNE
MDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAx
MDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3Ry
aW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJ
CQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8
c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4K
KwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MUNF
MEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1
bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5Q
QlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJp
bmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5Pgor
CQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldp
ZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+NDMxPC9yZWFsPgor
CQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVt
bnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVt
bjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBC
WFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGlj
dD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5z
aW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjVCQkVGRjlCOTE3
MzgyOTdCOTVDNTY4RDwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjE5NkRCNkFCMDA2QkI4MzUw
M0M3RDc4Njwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjBFOEQ2NUY1ODRGREI4NERBQUJEMzk2
OTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPkUwRURDNDEzMEU3RDM3NDMxOENFNzJCRTwvc3Ry
aW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgor
CQkJCQkJCQk8c3RyaW5nPkZCM0M1MDcyMTFGNzkzNjYwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJ
CQk8c3RyaW5nPkZCM0M1MDc1MTFGNzkzNjYwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJCQk8c3Ry
aW5nPkZCM0M1MEIyMTFGNzk1N0EwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFD
MzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJ
PGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5
PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+MTEw
PC9pbnRlZ2VyPgorCQkJCQkJCQkJPGludGVnZXI+ODM8L2ludGVnZXI+CisJCQkJCQkJCQk8aW50
ZWdlcj44MTwvaW50ZWdlcj4KKwkJCQkJCQkJCTxpbnRlZ2VyPjc2PC9pbnRlZ2VyPgorCQkJCQkJ
CQk8L2FycmF5PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZU91dGxpbmVTdGF0ZVZpc2libGVSZWN0S2V5PC9rZXk+CisJCQkJCQkJPHN0cmluZz57
ezAsIDEwNzB9LCB7NDMxLCAxMDA0fX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxr
ZXk+UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5
PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPHRydWUvPgorCQkJCQkJ
PGtleT5YQ1NoYXJpbmdUb2tlbjwva2V5PgorCQkJCQkJPHN0cmluZz5jb20uYXBwbGUuWGNvZGUu
R0ZTaGFyaW5nVG9rZW48L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pkdlb21ldHJ5
Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQk8ZGljdD4KKwkJCQkJCTxrZXk+RnJhbWU8L2tleT4K
KwkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezQ0OCwgMTAyMn19PC9zdHJpbmc+CisJCQkJCQk8a2V5
Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJ
CTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTxyZWFsPjQzMTwvcmVhbD4KKwkJ
CQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQk8
c3RyaW5nPjc1NCA1OSAxMDIxIDEwNjMgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCQkJPC9k
aWN0PgorCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBU
cmVlTW9kdWxlPC9zdHJpbmc+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3Ry
aW5nPjQ0OHB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRv
Y2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVB
Y3RpdmU8L2tleT4KKwkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVH
VUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJp
bmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+U2hhZGVyTGFuZy5jcHA8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhTcGxpdE1vZHVs
ZUluTmF2aWdhdG9yS2V5PC9rZXk+CisJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5TcGxp
dDA8L2tleT4KKwkJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVs
ZUdVSUQ8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPjFDRTBCMjA0MDY0NzFFMDYwMDk3QTVGNDwv
c3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJ
CQkJCQkJPHN0cmluZz5TaGFkZXJMYW5nLmNwcDwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+X2hp
c3RvcnlDYXBhY2l0eTwva2V5PgorCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJ
CQkJCQkJPGtleT5ib29rbWFyazwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+RkIzQzUwRTUxMUY3
OUUxRTAwODFGNUJBPC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5oaXN0b3J5PC9rZXk+CisJCQkJ
CQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI0MTFGNzk1N0EwMDgxRjVC
QTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQTwv
c3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI2MTFGNzk1N0EwMDgxRjVCQTwvc3Ry
aW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEM5MTFGNzlCMjMwMDgxRjVCQTwvc3RyaW5n
PgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MENBMTFGNzlCMjMwMDgxRjVCQTwvc3RyaW5nPgor
CQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MERCMTFGNzlEMjcwMDgxRjVCQTwvc3RyaW5nPgorCQkJ
CQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0Q291
bnQ8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJCQkJCQk8L2RpY3Q+CisJ
CQkJCQkJCTxrZXk+U3RhdHVzQmFyVmlzaWJpbGl0eTwva2V5PgorCQkJCQkJCQk8dHJ1ZS8+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57
ezAsIDB9LCB7NTY4LCA3NTl9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0Zy
YW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+NzU0IDU5IDEwMjEgMTA2MyAwIDAgMTkyMCAxMTc4
IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJ
CQkJCTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3Bv
cnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjc1OXB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+
CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz4xQ0UwQjIwNTA2NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCQkJCQkJ
PGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5EZXRhaWw8
L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRp
b248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPnt7MCwgNzY0fSwgezU2OCwgMjU4fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5S
dWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjc1NCA1OSAxMDIxIDEwNjMg
MCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJ
PGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yNThwdDwvc3RyaW5nPgorCQkJ
CQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJ
CQkJPHN0cmluZz41NjhwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8
a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5TZXJ2
aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9z
dHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJ
CTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JH
cm91cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxz
dHJpbmc+RkIzQzUwN0MxMUY3OTM3RTAwODFGNUJBPC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0Uw
QjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCM0M1MDdEMTFGNzkz
N0UwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0
PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjIwNTA2NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNp
b248L2tleT4KKwkJCTxzdHJpbmc+Mjwvc3RyaW5nPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJh
dGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWZhdWx0VjM8L3N0
cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+Q29udHJvbGxlckNsYXNzQmFzZU5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pkljb25OYW1lPC9rZXk+CisJ
CQk8c3RyaW5nPldpbmRvd09mUHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZlLm1vcnBoPC9zdHJpbmc+CisJCQk8a2V5PklzVmVy
dGljYWw8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PkxheW91dDwva2V5
PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5Pgor
CQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9u
PC9rZXk+CisJCQkJCTxkaWN0PgorCQkJCQkJPGtleT5QQlhCb3R0b21TbWFydEdyb3VwR0lEczwv
a2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZCQUMwNDUwOUNEMDAwMDAw
MTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0
cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMDhFNzdDMDQ1NDk2MTAwMEM5MTRCRDwvc3RyaW5nPgor
CQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJ
PHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5n
PkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZB
QkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUw
RUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQx
MTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVs
ZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MTFFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJp
bmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmlu
Zz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8
L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3Jv
dXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Q
QlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldpZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJPHJlYWw+MTg2PC9yZWFsPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtl
eT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJy
YXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+
CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGlu
ZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3Jv
dXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5
PgorCQkJCQkJCQk8c3RyaW5nPjI5Qjk3MzE0RkRDRkEzOTQxMUNBMkNFQTwvc3RyaW5nPgorCQkJ
CQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwv
YXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNl
bGVjdGlvbktleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJ
CQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVWaXNpYmxl
UmVjdEtleTwva2V5PgorCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezE4NiwgMzM3fX08L3N0cmlu
Zz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4K
KwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwv
a2V5PgorCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCTxrZXk+WENTaGFyaW5nVG9r
ZW48L2tleT4KKwkJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLlhjb2RlLkdGU2hhcmluZ1Rva2VuPC9z
dHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tl
eT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7
MCwgMH0sIHsyMDMsIDM1NX19PC9zdHJpbmc+CisJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29u
ZmlndXJhdGlvbjwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVt
bjwvc3RyaW5nPgorCQkJCQkJCTxyZWFsPjE4NjwvcmVhbD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJ
CQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPjM3MyAyNjkgNjkw
IDM5NyAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgor
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJ
CQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5N
b3JwaDwvc3RyaW5nPgorCQkJPGtleT5QcmVmZXJyZWRXaWR0aDwva2V5PgorCQkJPGludGVnZXI+
MzAwPC9pbnRlZ2VyPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5Pgor
CQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdy
b3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VGFibGVPZkNvbnRl
bnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xMUUwQjFGRTA2NDcxREVEMDA5N0E1
RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9r
ZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmRlZmF1bHQuc2hvcnRWMzwvc3Ry
aW5nPgorCQk8L2RpY3Q+CisJPC9hcnJheT4KKwk8a2V5PlBlcnNwZWN0aXZlc0JhclZpc2libGU8
L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U2hlbGZJc1Zpc2libGU8L2tleT4KKwk8ZmFsc2UvPgor
CTxrZXk+U291cmNlRGVzY3JpcHRpb248L2tleT4KKwk8c3RyaW5nPmZpbGUgYXQgJy9EZXZlbG9w
ZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZUb29sc0ludGVyZmFjZS5mcmFtZXdvcmsv
UmVzb3VyY2VzL1hDUGVyc3BlY3RpdmVzU3BlY2lmaWNhdGlvbk1vZGUxLnhjcGVyc3BlYyc8L3N0
cmluZz4KKwk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCTx0cnVlLz4KKwk8a2V5PlRp
bWVTdGFtcDwva2V5PgorCTxyZWFsPjAuMDwvcmVhbD4KKwk8a2V5PlRvb2xiYXJDb25maWdVc2Vy
RGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwk8c3RyaW5nPjI8L3N0cmluZz4KKwk8a2V5PlRv
b2xiYXJEaXNwbGF5TW9kZTwva2V5PgorCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJPGtleT5Ub29s
YmFySXNWaXNpYmxlPC9rZXk+CisJPHRydWUvPgorCTxrZXk+VG9vbGJhclNpemVNb2RlPC9rZXk+
CisJPGludGVnZXI+MTwvaW50ZWdlcj4KKwk8a2V5PlR5cGU8L2tleT4KKwk8c3RyaW5nPlBlcnNw
ZWN0aXZlczwvc3RyaW5nPgorCTxrZXk+VXBkYXRlTWVzc2FnZTwva2V5PgorCTxzdHJpbmc+VGhl
IERlZmF1bHQgV29ya3NwYWNlIGluIHRoaXMgdmVyc2lvbiBvZiBYY29kZSBub3cgaW5jbHVkZXMg
c3VwcG9ydCB0byBoaWRlIGFuZCBzaG93IHRoZSBkZXRhaWwgdmlldyAod2hhdCBoYXMgYmVlbiBy
ZWZlcnJlZCB0byBhcyB0aGUgIk1ldHJvLU1vcnBoIiBmZWF0dXJlKS4gIFlvdSBtdXN0IGRpc2Nh
cmQgeW91ciBjdXJyZW50IERlZmF1bHQgV29ya3NwYWNlIHNldHRpbmdzIGFuZCB1cGRhdGUgdG8g
dGhlIGxhdGVzdCBEZWZhdWx0IFdvcmtzcGFjZSBpbiBvcmRlciB0byBnYWluIHRoaXMgZmVhdHVy
ZS4gIERvIHlvdSB3aXNoIHRvIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IFdvcmtzcGFjZSBkZWZhdWx0
cyBmb3IgcHJvamVjdCAnJUAnPzwvc3RyaW5nPgorCTxrZXk+V2luZG93SnVzdGlmaWNhdGlvbjwv
a2V5PgorCTxpbnRlZ2VyPjU8L2ludGVnZXI+CisJPGtleT5XaW5kb3dPcmRlckxpc3Q8L2tleT4K
Kwk8YXJyYXk+CisJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJ
CTxzdHJpbmc+RkJDNzZCNTkxMUY2MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCTxzdHJpbmc+L1Zv
bHVtZXMvREFUQS9wYXVscy9zcmMvU2FmYXJpL09wZW5Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qPC9zdHJpbmc+CisJPC9hcnJh
eT4KKwk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCTxzdHJpbmc+NzU0IDU5IDEwMjEgMTA2MyAw
IDAgMTkyMCAxMTc4IDwvc3RyaW5nPgorCTxrZXk+V2luZG93VG9vbHNWMzwva2V5PgorCTxhcnJh
eT4KKwkJPGRpY3Q+CisJCQk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCQkJ
PGZhbHNlLz4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29s
LmJ1aWxkPC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTx0cnVlLz4KKwkJ
CTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9j
azwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNvbnRlbnRD
b25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVj
dE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xQ0QwNTI4RjA2MjM3MDcyMDAxNjY2
NzU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCQkJCQkJPGtleT5TdGF0dXNCYXJWaXNpYmlsaXR5
PC9rZXk+CisJCQkJCQkJCTx0cnVlLz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9t
ZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsxMzAwLCAyOTR9fTwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+NjIw
IDU0OSAxMzAwIDU3NiAwIDAgMTkyMCAxMTc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJ
CQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8
L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjI5
NHB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNv
bnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJY
UHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5YQ01haW5CdWlsZFJlc3Vs
dHNNb2R1bGVHVUlEPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVs
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJCQkJCQk8
a2V5PlhDQnVpbGRSZXN1bHRzVHJpZ2dlcl9Db2xsYXBzZTwva2V5PgorCQkJCQkJCQk8aW50ZWdl
cj4xMDIxPC9pbnRlZ2VyPgorCQkJCQkJCQk8a2V5PlhDQnVpbGRSZXN1bHRzVHJpZ2dlcl9PcGVu
PC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjEwMTE8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDI5OX0sIHsxMzAw
LCAyMzZ9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+NjIwIDU0OSAxMzAwIDU3NiAwIDAgMTkyMCAxMTc4IDwvc3RyaW5nPgor
CQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+
UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9r
ZXk+CisJCQkJCQkJPHN0cmluZz4yMzZwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8
L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz41MzVwdDwv
c3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwv
a2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJp
bmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTx0
cnVlLz4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0
cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCM0M1
MDdFMTFGNzkzN0UwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNEMDUyOEYwNjIzNzA3
MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz5YQ01haW5CdWlsZFJlc3VsdHNNb2R1bGVH
VUlEPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwv
a2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5idWlsZFYzPC9zdHJpbmc+CisJ
CQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ4NiAzMDA8L3N0
cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjYyMCA1NDkgMTMw
MCA1NzYgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tl
eT4KKwkJCTxzdHJpbmc+RkJDNzZCNTkxMUY2MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCQk8a2V5
PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxmYWxzZS8+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5kZWJ1
Z2dlcjwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGlj
dD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJ
CQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJ
CQkJPGtleT5EZWJ1Z2dlcjwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+SG9y
aXpvbnRhbFNwbGl0Vmlldzwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5f
Y29sbGFwc2luZ0ZyYW1lRGltZW5zaW9uPC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFs
PgorCQkJCQkJCQkJCTxrZXk+X2luZGV4T2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJ
PGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJCQk8a2V5Pl9wZXJjZW50YWdlT2ZDb2xsYXBz
ZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+
aXNDb2xsYXBzZWQ8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPnllczwvc3RyaW5nPgorCQkJCQkJ
CQkJCTxrZXk+c2l6ZXM8L2tleT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxzdHJp
bmc+e3swLCAwfSwgezMxNywgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezMx
NywgMH0sIHszNzcsIDE2NH19PC9zdHJpbmc+CisJCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJ
CTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+VmVydGljYWxTcGxpdFZpZXc8L2tleT4KKwkJCQkJCQkJ
CTxkaWN0PgorCQkJCQkJCQkJCTxrZXk+X2NvbGxhcHNpbmdGcmFtZURpbWVuc2lvbjwva2V5Pgor
CQkJCQkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KKwkJCQkJCQkJCQk8a2V5Pl9pbmRleE9mQ29sbGFw
c2VkVmlldzwva2V5PgorCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJCQkJ
PGtleT5fcGVyY2VudGFnZU9mQ29sbGFwc2VkVmlldzwva2V5PgorCQkJCQkJCQkJCTxyZWFsPjAu
MDwvcmVhbD4KKwkJCQkJCQkJCQk8a2V5PmlzQ29sbGFwc2VkPC9rZXk+CisJCQkJCQkJCQkJPHN0
cmluZz55ZXM8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PnNpemVzPC9rZXk+CisJCQkJCQkJCQkJ
PGFycmF5PgorCQkJCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs2OTQsIDE2NH19PC9zdHJpbmc+
CisJCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAxNjR9LCB7Njk0LCAyMTZ9fTwvc3RyaW5nPgorCQkJ
CQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJ
CQkJPGtleT5MYXVuY2hlckNvbmZpZ1ZlcnNpb248L2tleT4KKwkJCQkJCQkJPHN0cmluZz44PC9z
dHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJ
PHN0cmluZz4xQzE2Mjk4NDA2NEMxMEQ0MDBCOTVBNzI8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5Q
QlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5EZWJ1ZyAtIEdMVVRF
eGFtcGxlcyAoVW5kZXJ3YXRlcik8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtl
eT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtl
eT5EZWJ1Z0NvbnNvbGVEcmF3ZXJTaXplPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+ezEwMCwgMTIw
fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnQ29uc29sZVZpc2libGU8L2tleT4KKwkJCQkJ
CQkJPHN0cmluZz5Ob25lPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RGVidWdDb25zb2xlV2luZG93
RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezIwMCwgMjAwfSwgezUwMCwgMzAwfX08L3N0
cmluZz4KKwkJCQkJCQkJPGtleT5EZWJ1Z1NURElPV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJ
PHN0cmluZz57ezIwMCwgMjAwfSwgezUwMCwgMzAwfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5G
cmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs2OTQsIDM4MH19PC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4z
MjEgMjM4IDY5NCA0MjIgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJ
CQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYRGVidWdTZXNzaW9uTW9k
dWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmlu
Zz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+
UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+
CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnZ2VyPC9z
dHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0
cmluZz5QQlhEZWJ1Z1Nlc3Npb25Nb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxr
ZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQ0QxMEE5
OTA2OUVGOEJBMDBCMDY3MjA8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkFCMDY5RjFFOUIw
MEZBQkNFNjwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUMxNjI5ODQwNjRDMTBENDAwQjk1QTcyPC9z
dHJpbmc+CisJCQkJPHN0cmluZz4xQzBBRDJBQzA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJ
CTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5n
Pnhjb2RlLnRvb2xiYXIuY29uZmlnLmRlYnVnVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3Ry
aW5nPC9rZXk+CisJCQk8c3RyaW5nPjMyMSAyMzggNjk0IDQyMiAwIDAgMTQ0MCA4NzggPC9zdHJp
bmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDRDEwQTk5MDY5
RUY4QkEwMEIwNjcyMDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+
CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5G
aXJzdFRpbWVXaW5kb3dEaXNwbGF5ZWQ8L2tleT4KKwkJCTxmYWxzZS8+CisJCQk8a2V5PklkZW50
aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5maW5kPC9zdHJpbmc+CisJCQk8a2V5
PklzVmVydGljYWw8L2tleT4KKwkJCTx0cnVlLz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJ
CQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5Pgor
CQkJCQkJCQkJCTxzdHJpbmc+MUNERDUyOEMwNjIyMjA3MjAwMTM0Njc1PC9zdHJpbmc+CisJCQkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5n
PlNoYWRlckxhbmcuY3BwPC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5TdGF0dXNCYXJWaXNpYmls
aXR5PC9rZXk+CisJCQkJCQkJCQkJPHRydWUvPgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJ
PGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQkJCTxkaWN0PgorCQkJCQkJ
CQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs3ODEsIDIx
Mn19PC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJ
CQkJCQkJCTxzdHJpbmc+Nzc1IDYyOSA3ODEgNDcwIDAgMCAxOTIwIDExNzggPC9zdHJpbmc+CisJ
CQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCQkJPHN0
cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCQkJPGtleT5Qcm9wb3J0aW9u
PC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPjc4MXB0PC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxz
dHJpbmc+MjEycHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJ
CTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPHRydWUvPgorCQkJCQkJCTxrZXk+Q29u
dGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQ
cm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRDA1MjhFMDYyMzcwNzIw
MDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPlByb2plY3QgRmluZDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAyMTd9LCB7Nzgx
LCAyMTJ9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+Nzc1IDYyOSA3ODEgNDcwIDAgMCAxOTIwIDExNzggPC9zdHJpbmc+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhQcm9qZWN0RmluZE1vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5
PgorCQkJCQkJCTxzdHJpbmc+MjEycHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9h
cnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+NDI5cHQ8L3N0
cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8
c3RyaW5nPlByb2plY3QgRmluZDwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5
PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPHRydWUv
PgorCQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5n
PjFDNTMwRDU3MDY5RjFDRTEwMDBDRkNFRTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+RkIzQzUwREQx
MUY3OUQyNzAwODFGNUJBPC9zdHJpbmc+CisJCQkJPHN0cmluZz5GQjNDNTBERTExRjc5RDI3MDA4
MUY1QkE8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDREQ1MjhDMDYyMjIwNzIwMDEzNDY3NTwvc3Ry
aW5nPgorCQkJCTxzdHJpbmc+MUNEMDUyOEUwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQk8
L2FycmF5PgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+Nzc1IDYyOSA3
ODEgNDcwIDAgMCAxOTIwIDExNzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9r
ZXk+CisJCQk8c3RyaW5nPjFDNTMwRDU3MDY5RjFDRTEwMDBDRkNFRTwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8ZmFsc2UvPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPk1FTlVTRVBBUkFUT1I8
L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5Pgor
CQkJPHN0cmluZz53aW5kb3dUb29sLmRlYnVnZ2VyQ29uc29sZTwvc3RyaW5nPgorCQkJPGtleT5M
YXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+
CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9r
ZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1v
ZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xQzc4RUFBQzA2NUQ0OTI2MDBCMDcwOTU8
L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJ
CQkJPHN0cmluZz5EZWJ1Z2dlciBDb25zb2xlPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJ
CQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NjUwLCAyNTB9
fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJ
CTxzdHJpbmc+NTE2IDYzMiA2NTAgMjUwIDAgMCAxNjgwIDEwMjcgPC9zdHJpbmc+CisJCQkJCQkJ
PC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhEZWJ1
Z0NMSU1vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJ
CTxzdHJpbmc+MjA5cHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MjA5cHQ8L3N0cmluZz4KKwkJ
CQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRl
YnVnZ2VyIENvbnNvbGU8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWERlYnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJCQk8L2Fy
cmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjE8L2lu
dGVnZXI+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxz
dHJpbmc+MUM3OEVBQUQwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzc4
RUFBRTA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDNzhFQUFDMDY1RDQ5
MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3Vy
YXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuY29uc29sZVYzPC9z
dHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz42NTAgNDEgNjUw
IDI1MCAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwva2V5
PgorCQkJPHN0cmluZz4xQzc4RUFBRDA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJPC9k
aWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5k
b3dUb29sLnNuYXBzaG90czwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJh
eT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJ
CTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5YQ1NuYXBz
aG90TW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJ
CTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8
L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBz
aG90czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5Pgor
CQkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8c3RyaW5nPlllczwvc3RyaW5nPgorCQkJ
PGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFy
LmNvbmZpZy5zbmFwc2hvdHM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJ
CQk8c3RyaW5nPjMxNSA4MjQgMzAwIDU1MCAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5
PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxzdHJpbmc+WWVzPC9zdHJpbmc+CisJCTwv
ZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2lu
ZG93VG9vbC5zY208L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJ
CQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGlj
dD4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+
CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz4xQzc4RUFCMjA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9q
ZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4mbHQ7Tm8gRWRpdG9yJmd0Ozwv
c3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNwbGl0TW9kdWxlSW5OYXZpZ2F0b3JLZXk8L2tleT4K
KwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0MDwva2V5PgorCQkJCQkJCQkJPGRp
Y3Q+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQkJ
CTxzdHJpbmc+MUM3OEVBQjMwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0Q291bnQ8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+MTwv
c3RyaW5nPgorCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTxrZXk+U3RhdHVzQmFyVmlzaWJpbGl0
eTwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTwvZGljdD4KKwkJ
CQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJ
CQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezQ1MiwgMH19
PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJ
PHN0cmluZz43NDMgMzc5IDQ1MiAzMDggMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJCQkJCQk8
L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWE5hdmln
YXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz4wcHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJ
CTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJ
CQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xQ0Qw
NTI5MjA2MjM3MDcyMDAxNjY2NzU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9k
dWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5TQ008L3N0cmluZz4KKwkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGlj
dD4KKwkJCQkJCQkJPGtleT5Db25zb2xlRnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAs
IDI1OX0sIHs0NTIsIDB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+e3swLCA3fSwgezQ1MiwgMjU5fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5S
dWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAw
IDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlRhYmxlQ29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlN0YXR1czwvc3RyaW5nPgor
CQkJCQkJCQkJPHJlYWw+MzA8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPkZpbGVOYW1lPC9zdHJp
bmc+CisJCQkJCQkJCQk8cmVhbD4xOTk8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBhdGg8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE5Ny4wOTUwMDEyMjA3MDMxPC9yZWFsPgorCQkJCQkJCQk8
L2FycmF5PgorCQkJCQkJCQk8a2V5PlRhYmxlRnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57
ezAsIDB9LCB7NDUyLCAyNTB9fTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5
Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYQ1ZTTW9kdWxlPC9zdHJpbmc+CisJCQkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yNjJwdDwvc3RyaW5nPgor
CQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4K
KwkJCQkJPHN0cmluZz4yNjZwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJ
CQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U0NNPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZp
Y2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhDVlNNb2R1bGU8L3N0
cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJ
PGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPHN0cmluZz4xQzc4RUFCNDA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJ
CQk8c3RyaW5nPjFDNzhFQUI1MDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+
MUM3OEVBQjIwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI5MjA2
MjM3MDcyMDAxNjY2NzU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLnNjbTwvc3Ry
aW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+NzQzIDM3OSA0NTIg
MzA4IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5
PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5icmVha3BvaW50czwvc3Ry
aW5nPgorCQkJPGtleT5Jc1ZlcnRpY2FsPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgor
CQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5E
b2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21l
QWN0aXZlPC9rZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8a2V5PkNv
bnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJY
Qm90dG9tU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPHN0
cmluZz4xQzc3RkFCQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQkJPC9hcnJheT4K
KwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PjFDRTBCMUZFMDY0NzFERUQwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2pl
Y3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkZpbGVzPC9zdHJpbmc+CisJCQkJ
CQkJCTxrZXk+UEJYUHJvamVjdFN0cnVjdHVyZVByb3ZpZGVkPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+bm88L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVt
bkRhdGE8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBU
cmVlTW9kdWxlQ29sdW1uV2lkdGhzS2V5PC9rZXk+CisJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJ
CQkJPHJlYWw+MTY4PC9yZWFsPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTxrZXk+UEJY
U21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5zS2V5X3Y0PC9rZXk+CisJCQkJCQkJCQk8YXJyYXk+
CisJCQkJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1uPC9zdHJpbmc+CisJCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVP
dXRsaW5lU3RhdGVLZXlfdjc8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlBC
WFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJ
CQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJPHN0cmluZz4xQzc3RkFCQzA0NTA5Q0QwMDAwMDAxMDI8
L3N0cmluZz4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBU
cmVlTW9kdWxlT3V0bGluZVN0YXRlU2VsZWN0aW9uS2V5PC9rZXk+CisJCQkJCQkJCQk8YXJyYXk+
CisJCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJ
CQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPGtleT5QQlhTbWFy
dEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVZpc2libGVSZWN0S2V5PC9rZXk+CisJCQkJCQkJ
CQk8c3RyaW5nPnt7MCwgMH0sIHsxNjgsIDM1MH19PC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQkJPGtleT5QQlhUb3BTbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJCQk8YXJyYXkv
PgorCQkJCQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJ
CQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21l
dHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1l
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezE4NSwgMzY4fX08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5Hcm91cFRyZWVUYWJsZUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQkJPGFy
cmF5PgorCQkJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1uPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVh
bD4xNjg8L3JlYWw+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93
RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4zMTUgNDI0IDc0NCA0MDkgMCAwIDE0NDAgODc4
IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJ
CQkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjE4NXB0PC9zdHJpbmc+CisJCQkJCQk8
L2RpY3Q+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9r
ZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tl
eT4KKwkJCQkJCQkJPHN0cmluZz4xQ0ExQUVENzA2Mzk4RUJEMDA1ODkxNDc8L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5E
ZXRhaWw8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZp
Z3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPnt7MTkwLCAwfSwgezU1NCwgMzY4fX08L3N0cmluZz4KKwkJCQkJCQkJ
PGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMxNSA0MjQgNzQ0
IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+
TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5YQ0RldGFpbE1vZHVsZTwvc3RyaW5nPgorCQkJ
CQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+NTU0cHQ8L3N0cmluZz4K
KwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+
CisJCQkJCTxzdHJpbmc+MzY4cHQ8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5Pgor
CQkJPGtleT5NYWpvclZlcnNpb248L2tleT4KKwkJCTxpbnRlZ2VyPjM8L2ludGVnZXI+CisJCQk8
a2V5Pk1pbm9yVmVyc2lvbjwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5CcmVha3BvaW50czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2
aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRy
ZWVNb2R1bGU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJ
CQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2Vy
PjE8L2ludGVnZXI+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5Pgor
CQkJCTxzdHJpbmc+MUNEREI2NjgwN0Y5OEQ5ODAwQkI1ODE3PC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz4xQ0REQjY2OTA3Rjk4RDk4MDBCQjU4MTc8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDRTBCMUZF
MDY0NzFERUQwMDk3QTVGNDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNBMUFFRDcwNjM5OEVCRDAw
NTg5MTQ3PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlv
bjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5icmVha3BvaW50c1YzPC9z
dHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4zMTUgNDI0IDc0
NCA0MDkgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwva2V5
PgorCQkJPHN0cmluZz4xQ0REQjY2ODA3Rjk4RDk4MDBCQjU4MTc8L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJPC9k
aWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5k
b3dUb29sLmRlYnVnQW5pbWF0b3I8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJ
CQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJY
TmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJ
CQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4K
KwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgor
CQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+
RGVidWcgVmlzdWFsaXplcjwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5Pgor
CQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwv
aW50ZWdlcj4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+
eGNvZGUudG9vbGJhci5jb25maWcuZGVidWdBbmltYXRvclYzPC9zdHJpbmc+CisJCQk8a2V5Pldp
bmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4xMDAgMTAwIDcwMCA1MDAgMCAwIDEyODAgMTAw
MiA8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5
PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmJvb2ttYXJrczwvc3RyaW5nPgorCQkJPGtleT5MYXlv
dXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJ
CQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJ
CQkJPHN0cmluZz5QQlhCb29rbWFya3NNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3Bv
cnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4K
KwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+
MTAwJTwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tl
eT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2Vz
PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhCb29rbWFya3NNb2R1bGU8L3N0cmlu
Zz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGlu
dGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5n
PjUzOCA0MiA0MDEgMTg3IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5wcm9q
ZWN0Rm9ybWF0Q29uZmxpY3RzPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDUHJv
amVjdEZvcm1hdENvbmZsaWN0c01vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlv
bjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJ
CQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAl
PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5Pgor
CQkJPHN0cmluZz5Qcm9qZWN0IEZvcm1hdCBDb25mbGljdHM8L3N0cmluZz4KKwkJCTxrZXk+U2Vy
dmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlhDUHJvamVjdEZvcm1h
dENvbmZsaWN0c01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFy
SXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5XaW5kb3dD
b250ZW50TWluU2l6ZTwva2V5PgorCQkJPHN0cmluZz40NTAgMzAwPC9zdHJpbmc+CisJCQk8a2V5
PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz41MCA4NTAgNDcyIDMwNyAwIDAgMTQ0MCA4
Nzc8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5
PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmNsYXNzQnJvd3Nlcjwvc3RyaW5nPgorCQkJPGtleT5M
YXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+
CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9r
ZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+T3B0aW9uc1NldE5h
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5IaWVyYXJjaHksIGFsbCBjbGFzc2VzPC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz4xQ0E2NDU2RTA2M0I0NUI0MDAxMzc5RDg8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9q
ZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyIC0gTlNP
YmplY3Q8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZp
Z3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5DbGFzc2VzRnJhbWU8
L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7Mzc0LCA5Nn19PC9zdHJpbmc+CisJCQkJ
CQkJCTxrZXk+Q2xhc3Nlc1RyZWVUYWJsZUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQkJPGFy
cmF5PgorCQkJCQkJCQkJPHN0cmluZz5QQlhDbGFzc05hbWVDb2x1bW5JZGVudGlmaWVyPC9zdHJp
bmc+CisJCQkJCQkJCQk8cmVhbD4yMDg8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBCWENsYXNz
Qm9va0NvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIyPC9yZWFsPgor
CQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+e3swLCAwfSwgezYzMCwgMzMxfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5NZW1iZXJzRnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDEwNX0sIHszNzQsIDM5NX19PC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+TWVtYmVyc1RyZWVUYWJsZUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJ
CQkJPGFycmF5PgorCQkJCQkJCQkJPHN0cmluZz5QQlhNZW1iZXJUeXBlSWNvbkNvbHVtbklkZW50
aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIyPC9yZWFsPgorCQkJCQkJCQkJPHN0cmlu
Zz5QQlhNZW1iZXJOYW1lQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+
MjE2PC9yZWFsPgorCQkJCQkJCQkJPHN0cmluZz5QQlhNZW1iZXJUeXBlQ29sdW1uSWRlbnRpZmll
cjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+OTc8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBC
WE1lbWJlckJvb2tDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD4yMjwv
cmVhbD4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJPGtleT5QQlhNb2R1bGVXaW5kb3dTdGF0
dXNCYXJIaWRkZW4yPC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJ
CTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4zODUgMTc5IDYz
MCAzNTIgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5
Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYQ2xhc3NCcm93c2VyTW9kdWxlPC9zdHJp
bmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4zMzJwdDwv
c3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJPHN0cmluZz4zMzJwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Q2xhc3MgQnJvd3Nlcjwvc3Ry
aW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJp
bmc+UEJYQ2xhc3NCcm93c2VyTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5T
dGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5
PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+MUMwQUQyQUYw
NjlGMUU5QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzBBRDJCMDA2OUYxRTlCMDBG
QUJDRTY8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDQTY0NTZFMDYzQjQ1QjQwMDEzNzlEODwvc3Ry
aW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJ
CTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuY2xhc3Nicm93c2VyPC9zdHJpbmc+CisJCQk8
a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4zODUgMTc5IDYzMCAzNTIgMCAwIDE0
NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwva2V5PgorCQkJPHN0cmlu
Zz4xQzBBRDJBRjA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElz
VmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJPC9kaWN0PgorCQk8ZGlj
dD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLnJlZmFj
dG9yaW5nPC9zdHJpbmc+CisJCQk8a2V5PkluY2x1ZGVJblRvb2xzTWVudTwva2V5PgorCQkJPGlu
dGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4K
KwkJCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVn
ZXI+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGlj
dD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnswLCAwfSwgezUw
MCwgMzM1fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+ezAsIDB9LCB7NTAwLCAzMzV9PC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5YQ1JlZmFjdG9yaW5n
TW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0
cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxr
ZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8L2Rp
Y3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlJlZmFjdG9y
aW5nPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJ
CQkJPHN0cmluZz5YQ1JlZmFjdG9yaW5nTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MjAwIDIwMCA1MDAgMzU2IDAgMCAx
OTIwIDEyMDAgPC9zdHJpbmc+CisJCTwvZGljdD4KKwk8L2FycmF5PgorPC9kaWN0PgorPC9wbGlz
dD4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2J1aWxkX2FuZ2xl
Lnhjb2RlcHJvai9wYXVscy5wYnh1c2VyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5wYnh1c2VyCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvYnVpbGRf
YW5nbGUueGNvZGVwcm9qL3BhdWxzLnBieHVzZXIJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY4
IEBACisvLyAhJCpVVEY4KiQhCit7CisJMTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAq
LyA9IHsKKwkJYWN0aXZlRXhlYyA9IDA7CisJfTsKKwkzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUUg
LyogQU5HTEUgU3VwcG9ydCAqLyA9IHsKKwkJYWN0aXZlRXhlYyA9IDA7CisJfTsKKwk0OEI3NDAy
Q0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsK
KwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezU0NCwgOTE1Mn19IjsKKwkJCXNl
cE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgOTM4fSI7
CisJCX07CisJfTsKKwk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAg
Ki8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwg
ezExNjcsIDc1NDB9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MjM2MywgMTl9IjsKKwkJCXNl
cE5hdlZpc1JhbmdlID0gInsxNjIwLCAxNDQ4fSI7CisJCX07CisJfTsKKwk2RjRGRDM1Q0IzREZD
ODlENzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAw
OworCX07CisJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLyA9IHsK
KwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7NjkxLCA2
NTB9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2VmlzUmFuZ2Ug
PSAiezAsIDEzNzZ9IjsKKwkJfTsKKwl9OworCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBn
bHNsYW5nX3RhYi5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1Jl
Y3QgPSAie3swLCAwfSwgezkyNiwgNjMwNzZ9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwg
MH0iOworCQkJc2VwTmF2VmlzUmFuZ2UgPSAiezAsIDE3NDZ9IjsKKwkJfTsKKwl9OworCUI3QjEx
MjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9
IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezkyNiwgNDgzfX0iOworCQkJ
c2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA2MDh9
IjsKKwkJfTsKKwl9OworCURBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVj
dCAqLyA9IHsKKwkJYWN0aXZlQnVpbGRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCWFj
dGl2ZVRhcmdldCA9IDE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi87CisJCWNvZGVT
ZW5zZU1hbmFnZXIgPSBGQkM3NkFGNzExRjYyMDNDMDBCRkIwMzcgLyogQ29kZSBzZW5zZSAqLzsK
KwkJcGVyVXNlckRpY3Rpb25hcnkgPSB7CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWEZpbGVUYWJs
ZURhdGFTb3VyY2UzLlBCWEV4ZWN1dGFibGVzRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFi
bGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJYRmls
ZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhFeGVjdXRhYmxlc0RhdGFTb3Vy
Y2VfTmFtZUlEOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5XaWR0aHNLZXkgPSAo
CisJCQkJCTIyLAorCQkJCQkzMDAsCisJCQkJCTYzNiwKKwkJCQkpOworCQkJCVBCWEZpbGVUYWJs
ZURhdGFTb3VyY2VDb2x1bW5zS2V5ID0gKAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2Vf
QWN0aXZlRmxhZ0lELAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlELAorCQkJ
CQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQ29tbWVudHNJRCwKKwkJCQkpOworCQkJfTsKKwkJ
CVBCWENvbmZpZ3VyYXRpb24uUEJYRmlsZVRhYmxlRGF0YVNvdXJjZTMuUEJYRmlsZVRhYmxlRGF0
YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVj
dGlvbktleSA9IDE7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkg
PSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVE
YXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMzI5LAorCQkJCQky
MCwKKwkJCQkJNDgsCisJCQkJCTQzLAorCQkJCQk0MywKKwkJCQkJMjAsCisJCQkJKTsKKwkJCQlQ
QlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3Vy
Y2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQs
CisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0
YVNvdXJjZV9PYmplY3RTaXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJv
cnNfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJ
CQlQQlhDb25maWd1cmF0aW9uLlBCWFRhcmdldERhdGFTb3VyY2UuUEJYVGFyZ2V0RGF0YVNvdXJj
ZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktl
eSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQ
QlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRh
U291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjg5LAorCQkJCQk2MCwK
KwkJCQkJMjAsCisJCQkJCTQ4LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJKTsKKwkJCQlQQlhG
aWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2Vf
RmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJ
CQkJCVBCWFRhcmdldERhdGFTb3VyY2VfUHJpbWFyeUF0dHJpYnV0ZSwKKwkJCQkJUEJYRmlsZURh
dGFTb3VyY2VfQnVpbHRfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX09iamVjdFNp
emVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0Vycm9yc19Db2x1bW5JRCwKKwkJ
CQkJUEJYRmlsZURhdGFTb3VyY2VfV2FybmluZ3NfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJ
CQlQQlhQZXJQcm9qZWN0VGVtcGxhdGVTdGF0ZVNhdmVEYXRlID0gMzAxNDM3Nzk4OworCQkJUEJY
V29ya3NwYWNlU3RhdGVTYXZlRGF0ZSA9IDMwMTQzNzc5ODsKKwkJfTsKKwkJcGVyVXNlclByb2pl
Y3RJdGVtcyA9IHsKKwkJCUZCM0M0RjE4MTFGNzZCQjEwMDgxRjVCQSA9IEZCM0M0RjE4MTFGNzZC
QjEwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBCMzExRjc5NTdBMDA4
MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwQjMxMUY3OTU3QTAwODFGNUJBIC8q
IFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MEI0MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhU
ZXh0Qm9va21hcmsgKi8gPSBGQjNDNTBCNDExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovOworCQkJRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAq
LyA9IEZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlG
QjNDNTBCNjExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwQjYx
MUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MEI3MTFGNzk1
N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjNDNTBCNzExRjc5NTdBMDA4MUY1
QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQjgxMUY3OTU3QTAwODFGNUJBIC8q
IFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MEI4MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0
Qm9va21hcmsgKi87CisJCQlGQjNDNTBDOTExRjc5QjIzMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovID0gRkIzQzUwQzkxMUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsK
KwkJCUZCM0M1MENBMTFGNzlCMjMwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjND
NTBDQTExRjc5QjIzMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQ0Ix
MUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MENCMTFGNzlCMjMw
MDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBDQzExRjc5QjIzMDA4MUY1
QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwQ0MxMUY3OUIyMzAwODFGNUJBIC8qIFBC
WFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MENEMTFGNzlDMDEwMDgxRjVCQSAvKiBQQlhUZXh0
Qm9va21hcmsgKi8gPSBGQjNDNTBDRDExRjc5QzAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJr
ICovOworCQkJRkIzQzUwRDYxMUY3OUQwMTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9
IEZCM0M1MEQ2MTFGNzlEMDEwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjND
NTBENzExRjc5RDAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwRDcxMUY3
OUQwMTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MERCMTFGNzlEMjcw
MDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjNDNTBEQjExRjc5RDI3MDA4MUY1QkEg
LyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwREMxMUY3OUQyNzAwODFGNUJBIC8qIFBC
WFRleHRCb29rbWFyayAqLyA9IEZCM0M1MERDMTFGNzlEMjcwMDgxRjVCQSAvKiBQQlhUZXh0Qm9v
a21hcmsgKi87CisJCQlGQjNDNTBERjExRjc5RDJGMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJr
ICovID0gRkIzQzUwREYxMUY3OUQyRjAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJ
CUZCM0M1MEUyMTFGNzlERDQwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjNDNTBF
MjExRjc5REQ0MDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwRTUxMUY3
OUUxRTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MEU1MTFGNzlFMUUwMDgx
RjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQkM3NkI1MzExRjYyNjIwMDBCRkIwMzcg
PSBGQkM3NkI1MzExRjYyNjIwMDBCRkIwMzcgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQl9Owor
CQlzb3VyY2VDb250cm9sTWFuYWdlciA9IEZCQzc2QUY2MTFGNjIwM0MwMEJGQjAzNyAvKiBTb3Vy
Y2UgQ29udHJvbCAqLzsKKwkJdXNlckJ1aWxkU2V0dGluZ3MgPSB7CisJCQlTWU1ST09UID0gLi47
CisJCX07CisJfTsKKwlEREQzQjdFM0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wu
aCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9
LCB7OTI2LCA0ODN9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2
VmlzUmFuZ2UgPSAiezAsIDQ3OH0iOworCQl9OworCX07CisJRTNBMjlCNkU5QzIxQjY3QzI1RkYw
RDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdklu
dEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezkyNiwgNDgzfX0iOworCQkJc2VwTmF2U2VsUmFuZ2Ug
PSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA0Nzh9IjsKKwkJfTsKKwl9Owor
CUZCM0M0RjE4MTFGNzZCQjEwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSB7CisJCWlz
YSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IEI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAv
KiBDb2RlR2VuR0xTTC5jcHAgKi87CisJCW5hbWUgPSAiQ29kZUdlbkdMU0wuY3BwOiAxIjsKKwkJ
ckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0gNjA4OworCQl2
ckxvYyA9IDA7CisJfTsKKwlGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7
CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07CisJRkIzQzUwQjMxMUY3OTU3QTAwODFGNUJBIC8qIFBC
WFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0g
QTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsKKwkJbmFtZSA9
ICJnbHNsYW5nX3RhYi5jcHA6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBl
ID0gMDsKKwkJdnJMZW4gPSAxNzQ2OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTBCNDExRjc5
NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9v
a21hcms7CisJCWZSZWYgPSBCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wu
Y3BwICovOworCQluYW1lID0gIkNvZGVHZW5HTFNMLmNwcDogMSI7CisJCXJMZW4gPSAwOworCQly
TG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDYwODsKKwkJdnJMb2MgPSAwOworCX07
CisJRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJ
aXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJC
IC8qIFRyYW5zbGF0b3JITFNMLmggKi87CisJCW5hbWUgPSAiVHJhbnNsYXRvckhMU0wuaDogMSI7
CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDQ3ODsK
KwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQjYxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRC
b29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gREREM0I3
RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi87CisJCW5hbWUgPSAiVHJh
bnNsYXRvckdMU0wuaDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAw
OworCQl2ckxlbiA9IDQ3ODsKKwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQjcxMUY3OTU3QTAw
ODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJr
OworCQlmUmVmID0gOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLzsK
KwkJbmFtZSA9ICJPdXRwdXRHTFNMLmg6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJ
CXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxMzc2OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTBC
ODExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhU
ZXh0Qm9va21hcms7CisJCWZSZWYgPSA5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0
R0xTTC5oICovOworCQluYW1lID0gIk91dHB1dEdMU0wuaDogMSI7CisJCXJMZW4gPSAwOworCQly
TG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDEzNzY7CisJCXZyTG9jID0gMDsKKwl9
OworCUZCM0M1MEM5MTFGNzlCMjMwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSB7CisJ
CWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IDkzRDYxQ0IwQkNFNTRFMDY5RDcxRjky
MCAvKiBPdXRwdXRHTFNMLmggKi87CisJCW5hbWUgPSAiT3V0cHV0R0xTTC5oOiAxIjsKKwkJckxl
biA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0gMTM3NjsKKwkJdnJM
b2MgPSAwOworCX07CisJRkIzQzUwQ0ExMUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFy
ayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gNDhCNzQwMkNDMDdB
MDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovOworCQluYW1lID0gIk91dHB1dEdMU0wu
Y3BwOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7CisJCXZyTGVu
ID0gOTM4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTBDQjExRjc5QjIzMDA4MUY1QkEgLyog
UEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYg
PSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUg
PSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI1MTc7CisJ
CXJUeXBlID0gMDsKKwkJdnJMZW4gPSA3MjA7CisJCXZyTG9jID0gMTIxNTg7CisJfTsKKwlGQjND
NTBDQzExRjc5QjIzMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQ
QlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4g
PSAwOworCQlyTG9jID0gMTI0OTE7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA5ODM7CisJCXZy
TG9jID0gMTAyOTc7CisJfTsKKwlGQjNDNTBDRDExRjc5QzAxMDA4MUY1QkEgLyogUEJYVGV4dEJv
b2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5
QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVy
TGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI0OTE7CisJCXJUeXBlID0g
MDsKKwkJdnJMZW4gPSA5ODM7CisJCXZyTG9jID0gMTAyOTc7CisJfTsKKwlGQjNDNTBENjExRjc5
RDAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9v
a21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQly
TG9jID0gMTI0OTE7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxNDg1OworCQl2ckxvYyA9IDYw
NTY7CisJfTsKKwlGQjNDNTBENzExRjc5RDAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICov
ID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRD
MzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6
IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI0OTE7CisJCXJUeXBlID0gMDsKKwkJdnJM
ZW4gPSAxMzQwOworCQl2ckxvYyA9IDExNTM1OworCX07CisJRkIzQzUwREIxMUY3OUQyNzAwODFG
NUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOwor
CQlmUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovOwor
CQlyTGVuID0gMTk7CisJCXJMb2MgPSAyMzYzOworCQlyVHlwZSA9IDA7CisJfTsKKwlGQjNDNTBE
QzExRjc5RDI3MDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhU
ZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVy
TGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDg1IjsKKwkJckxlbiA9IDE5
OworCQlyTG9jID0gMjM2MzsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDIyMjsKKwkJdnJMb2Mg
PSAyMjQwOworCX07CisJRkIzQzUwREYxMUY3OUQyRjAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFy
ayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gNTZDN0U5OUJBNTAw
QTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovOworCQluYW1lID0gIlNoYWRlckxhbmcu
Y3BwOiA4NSI7CisJCXJMZW4gPSAxOTsKKwkJckxvYyA9IDIzNjM7CisJCXJUeXBlID0gMDsKKwkJ
dnJMZW4gPSAxNDQ4OworCQl2ckxvYyA9IDE2MjA7CisJfTsKKwlGQjNDNTBFMjExRjc5REQ0MDA4
MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7
CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87
CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDg1IjsKKwkJckxlbiA9IDE5OworCQlyTG9jID0g
MjM2MzsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDE0NDg7CisJCXZyTG9jID0gMTYyMDsKKwl9
OworCUZCM0M1MEU1MTFGNzlFMUUwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSB7CisJ
CWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZF
MCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsKKwkJbmFtZSA9ICJTaGFkZXJMYW5nLmNwcDogODUiOwor
CQlyTGVuID0gMTk7CisJCXJMb2MgPSAyMzYzOworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0gMTQ0
ODsKKwkJdnJMb2MgPSAxNjIwOworCX07CisJRkJDNzZBRjYxMUY2MjAzQzAwQkZCMDM3IC8qIFNv
dXJjZSBDb250cm9sICovID0geworCQlpc2EgPSBQQlhTb3VyY2VDb250cm9sTWFuYWdlcjsKKwkJ
ZmFsbGJhY2tJc2EgPSBYQ1NvdXJjZUNvbnRyb2xNYW5hZ2VyOworCQlpc1NDTUVuYWJsZWQgPSAw
OworCQlzY21Db25maWd1cmF0aW9uID0geworCQkJcmVwb3NpdG9yeU5hbWVzRm9yUm9vdHMgPSB7
CisJCQkJIiIgPSAiIjsKKwkJCX07CisJCX07CisJfTsKKwlGQkM3NkFGNzExRjYyMDNDMDBCRkIw
MzcgLyogQ29kZSBzZW5zZSAqLyA9IHsKKwkJaXNhID0gUEJYQ29kZVNlbnNlTWFuYWdlcjsKKwkJ
aW5kZXhUZW1wbGF0ZVBhdGggPSAiIjsKKwl9OworCUZCQzc2QjUzMTFGNjI2MjAwMEJGQjAzNyAv
KiBQQlhUZXh0Qm9va21hcmsgKi8gPSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJl
ZiA9IDQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLzsKKwkJbmFt
ZSA9ICJPdXRwdXRHTFNMLmNwcDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5
cGUgPSAwOworCQl2ckxlbiA9IDE0MzA7CisJCXZyTG9jID0gMDsKKwl9OworfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvYnVpbGRfYW5nbGUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTcgQEAKKy8v
ICEkKlVURjgqJCEKK3sKKwlhcmNoaXZlVmVyc2lvbiA9IDE7CisJY2xhc3NlcyA9IHsKKwl9Owor
CW9iamVjdFZlcnNpb24gPSA0NTsKKwlvYmplY3RzID0geworCisvKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLworCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0geworCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAor
CQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQlGQjNDNTA2NDExRjc5Mjk3MDA4MUY1QkEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gQWxsOworCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7CisJCX07CisJCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdM
RSBTdXBwb3J0ICovID0geworCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OworCQkJYnVpbGRD
b25maWd1cmF0aW9uTGlzdCA9IDBBQTU0ODI1QkY1REYwQTNGQkE5MkI2MCAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQU5HTEUgU3VwcG9ydCIgKi87
CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyogQWN0
aW9uICJmbGV4X2dsc2xhbmciICovLAorCQkJCTBENTEzRjhCOTIzOTQ5QzE1NkRCMDJDNSAvKiBB
Y3Rpb24gImJpc29uX2dsc2xhbmciICovLAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJ
CSk7CisJCQluYW1lID0gIkFOR0xFIFN1cHBvcnQiOworCQkJcHJvZHVjdE5hbWUgPSAidHJhbnNs
YXRvcl9jb21tb24gU3VwcG9ydCI7CisJCX07CisvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNl
Y3Rpb24gKi8KKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBR
dWFsaWZpZXJBbGl2ZS5jcHAgKi87IH07CisJCTBBMjE2OTQ5MTAzRTFFMjI4RjlDMTJGMCAvKiBJ
bml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsg
fTsKKwkJMEQ0MDY0MTY3Mzk4QTY4OTI4MDlBMDlFIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0QxNjlDQjg0OUI4NjFF
MTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJCTMwNjVEMjlFOTdGQUM2RTEyNzM4
OEQxNSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAq
LzsgfTsKKwkJMzJCMURCQ0Q2QjgzRjIxNDZENzg3QTYyIC8qIGF0b20uYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDOUI0NjE2QTY1QTVBQkVGOTFGRDZE
QyAvKiBhdG9tLmMgKi87IH07CisJCTM1QkUxQkJFRTYxMzVBMUNCMDYwOEVBOCAvKiBjcHBzdHJ1
Y3QuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwNThB
MEEyQTBBMDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLzsgfTsKKwkJM0E5NkU5Q0FDOEEy
NUFGMTU2NEI2NTJDIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovOyB9
OworCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQUY2RjMxMjZDMkVDNDM5Nzc4
NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovOyB9OworCQk1MERGMDAwMDVDQzQyMTJGNkZCMTI5MUQg
LyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICov
OyB9OworCQk2RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2QzgzMUE3NUVCRTAw
OUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLzsgfTsKKwkJODg4RjEzODI0OThFMkQ3NEFG
MjgwMUM4IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi87IH07CisJ
CTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyQzlDOEVCNEE3RUZGNUI2N0ZGOURC
RiAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKKwkJOUVGNTk5QjVFNDNGREMxRUE2RENDRjY2IC8q
IExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REQxNTRDNjhBRUJCMzg1RUE3RTRBODMzIC8qIExpbmsuY3BwICovOyB9OworCQlBQkE1QzYxQjFC
NzhCOUE4RDY5RjZBRUMgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5j
cHAgKi87IH07CisJCUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZFRkYwNjkx
M0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKKwkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi87IH07
CisJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAwNUY2Njk2
Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OworCQlCOEJEMjY4NUExNkIxODhD
Q0RGQjA1MkIgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi87IH07CisJCUJFQkJGNEYwODE5RUEzRDAzOTc3QThGQyAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdCRTVEM0My
QzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQlDQjdGMEVGMEQ2QTg5RkE4QzRE
RjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi87IH07CisJCUUxQzdDNURG
RjBCMkRGRUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xB
bGxvYy5jcHAgKi87IH07CisJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5
MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKKwkJRjA5OEY0NjNFREFCQ0YwNzY5MDA3
Njc4IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVBODEzMjM0RCAvKiBzY2FubmVyLmMgKi87IH07CisJCUY1
QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3
MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlGNkFCRDU4RjhDQUI3NjQxRDhCRkU5
MzUgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LzsgfTsKKwkJRkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CisJCUZCM0M1MDU4MTFGNzkyNEEw
MDgxRjVCQSAvKiBPdXRwdXRHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNw
cCAqLzsgfTsKKwkJRkIzQzUwNTkxMUY3OTI0QTAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3
NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07CisJCUZCM0M1MDhF
MTFGNzk0OUUwMDgxRjVCQSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5n
LmNwcCAqLzsgfTsKKwkJRkIzQzUwOEYxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0QxNjlD
Qjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJCUZCM0M1MDkyMTFG
Nzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICov
OyB9OworCQlGQjNDNTA5MzExRjc5NENFMDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2OTI3QkU1RDNDMkM4MkY4
NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTQxMUY3OTRDRTAwODFGNUJB
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovOyB9
OworCQlGQjNDNTA5NTExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUw
QzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCUZCM0M1MDk2MTFGNzk0Q0Uw
MDgxRjVCQSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0
ZS5jcHAgKi87IH07CisJCUZCM0M1MDk3MTFGNzk0Q0UwMDgxRjVCQSAvKiBpbnRlcm1PdXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEy
NkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi87IH07CisJCUZCM0M1MDk4MTFGNzk0
Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJt
VHJhdmVyc2UuY3BwICovOyB9OworCQlGQjNDNTA5OTExRjc5NENFMDA4MUY1QkEgLyogTGluay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDE1NEM2
OEFFQkIzODVFQTdFNEE4MzMgLyogTGluay5jcHAgKi87IH07CisJCUZCM0M1MDlBMTFGNzk0Q0Uw
MDgxRjVCQSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwICovOyB9OworCQlGQjNDNTA5QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25z
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUZCM0M1MDlD
MTFGNzk0Q0UwMDgxRjVCQSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFy
c2VIZWxwZXIuY3BwICovOyB9OworCQlGQjNDNTA5RDExRjc5NENFMDA4MUY1QkEgLyogUG9vbEFs
bG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2
NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQlGQjNDNTA5
RTExRjc5NENFMDA4MUY1QkEgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8q
IFF1YWxpZmllckFsaXZlLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUYxMUY3OTRDRTAwODFGNUJBIC8q
IFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9Owor
CQlGQjNDNTBBMDExRjc5NENFMDA4MUY1QkEgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZG
RTAgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CisJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9
OworCQlGQjNDNTBBNDExRjc5NEZGMDA4MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8q
IGF0b20uYyAqLzsgfTsKKwkJRkIzQzUwQTUxMUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc1NzA3QjM5M0I3RUFC
N0REOTk5OUNCIC8qIGNwcC5jICovOyB9OworCQlGQjNDNTBBNjExRjc5NEZGMDA4MUY1QkEgLyog
Y3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCM0M1
MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnku
YyAqLzsgfTsKKwkJRkIzQzUwQTgxMUY3OTRGRjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVB
ODEzMjM0RCAvKiBzY2FubmVyLmMgKi87IH07CisJCUZCM0M1MEE5MTFGNzk0RkYwMDgxRjVCQSAv
KiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovOyB9OworCQlGQjNDNTBB
QTExRjc5NEZGMDA4MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMg
Ki87IH07CisJCUZCM0M1MEFCMTFGNzk1MUIwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5oIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREREM0I3RTNCN0Iz
NUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi87IH07CisJCUZCM0M1MEFDMTFGNzk1
MUIwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5o
ICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENv
bnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisJCUU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVt
UHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyog
UHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURT
dHJpbmcgPSAzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUU7CisJCQlyZW1vdGVJbmZvID0gInRyYW5z
bGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQl9OworCQlGQjNDNTA2MzExRjc5Mjk3MDA4MUY1QkEg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRl
bVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8q
IFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElE
U3RyaW5nID0gRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBOworCQkJcmVtb3RlSW5mbyA9IGFuZ2xl
OworCQl9OworCQlGQjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVy
UG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwor
CQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMzEzNDlENjY1RkFF
NjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi87CisJCQlyZW1vdGVJbmZvID0gIkFOR0xF
IFN1cHBvcnQiOworCQl9OworLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICov
CisKKy8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwNTZGRUFEQzdEOTVD
NkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTJFQUYwMjgzMTFFRUE0NzUzRTgyODE4IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
b29sQWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTUzQkYwNkJGMTJDNkY1
MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2FsaW50
ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI3RTRDN0VEMEI4MkUx
OERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBt
ZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJE
MDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5z
LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFN0M5QjZFNkRCNzUxRTEyQTJGNkNC
NiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFs
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzREREQzc3MjE2MjAyQTRERTE4MDhC
REIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gbGlidHJhbnNsYXRvcl9jb21tb24uYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IGRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI4RkYyMDE4
MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxh
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUEy
MTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0
cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MEMzOTk4QzlDRTY2REUw
QzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFs
aXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyog
SW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJt
ZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
c3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MDU4QTBBMkEwQTAyMzg2
ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVt
b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1ODQ1RkZG
NUE4RTYzMzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMzMjI1QzJGOEMz
NTczQ0Q5NzI1RTY2IC8qIGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91
dHB1dEdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc2QzgzMUE3
NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
cnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUE1QjVCQjI1MjY4
MDI0NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0
SExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUQ0N0IxQUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTMxNTNENThGNEJCQkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcubCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBnbHNsYW5nLmw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAv
KiBnbHNsYW5nX3RhYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJ
bml0aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFNzY3NEM1MkJERERCMjhB
RjVGRkQ5RiAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9vbEFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Qjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8q
IENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5
bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUxIC8qIGdsc2xh
bmdfdGFiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExT
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExT
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuSExTTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUM4QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IGdsc2xhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUUwQzkw
REY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VI
ZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0YyQjYyRTA4MjBDODMxQUY4
MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWlsZF9hbmdsZS5neXA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNGRDEyQzZFNDZFQkUwODM5QkJFNTJCNSAvKiBwYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9r
ZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQyQzlDOEVCNEE3RUZGNUI2N0ZG
OURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQg
LyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUREMTU0QzY4QUVCQjM4NUVBN0U0QTgzMyAvKiBMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlEREQzQjdFM0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVB
RjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERUVBRkM2MThB
M0IzM0YxRkJGRTM1MzYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRT
ZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0
b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FG
IC8qIEluZm9TaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCM0M1MDVEMTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFy
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJhbmdsZS5hOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5l
ci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8q
IEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNUEx
MUY3OTI0QTAwODFGNUJBIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
KwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHBy
ZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKKwkJCQk5Q0VEM0FGRjFF
NjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAorCQkJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFB
MyAvKiBjb21waWxlLmggKi8sCisJCQkJQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5j
ICovLAorCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLywKKwkJCQk4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJMjk0RjQ0MkEyNjA2
RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovLAorCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNF
NyAvKiBtZW1vcnkuaCAqLywKKwkJCQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2Vy
LmggKi8sCisJCQkJNkJCQzgyMjRCOUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywK
KwkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovLAorCQkJCTA1NkZF
QURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2FubmVyLmggKi8sCisJCQkJODlBNkY3QjFBRDM5MThF
NjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovLAorCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhD
MCAvKiBzeW1ib2xzLmMgKi8sCisJCQkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJv
bHMuaCAqLywKKwkJCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCisJ
CQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRBIC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBh
dGggPSBwcmVwcm9jZXNzb3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkx
OTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJl
cHJvY2Vzc29yICovLAorCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMu
aCAqLywKKwkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICov
LAorCQkJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCisJ
CQkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAorCQkJCUIyRjVDQTEx
RUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmggKi8sCisJCQkJNkU2OTI3QkU1RDND
MkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKKwkJCQlGN0IyOTcxRDRFQjM4MzZCOTRC
N0VDQUYgLyogSW5mb1NpbmsuaCAqLywKKwkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyog
SW5pdGlhbGl6ZS5jcHAgKi8sCisJCQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRp
YWxpemUuaCAqLywKKwkJCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgKi8sCisJCQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwu
aCAqLywKKwkJCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMu
aCAqLywKKwkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oICovLAorCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJz
ZS5jcHAgKi8sCisJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5j
cHAgKi8sCisJCQkJREQxNTRDNjhBRUJCMzg1RUE3RTRBODMzIC8qIExpbmsuY3BwICovLAorCQkJ
CURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJNDhCNzQwMkNDMDdB
MDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLAorCQkJCTkzRDYxQ0IwQkNFNTRFMDY5
RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8sCisJCQkJOUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkz
IC8qIE91dHB1dEhMU0wuY3BwICovLAorCQkJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBP
dXRwdXRITFNMLmggKi8sCisJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVs
cGVyLmNwcCAqLywKKwkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIu
aCAqLywKKwkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywK
KwkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJNDg1
N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKKwkJCQk5RDQ3
QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKKwkJCQlCNDM2RUZG
MDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCisJCQkJRDQwRjc4Q0I5QkEw
Qzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBRTY1RTEzOUFFMTBERTlFRkFE
OEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKKwkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyog
U2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLywKKwkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFi
bGUuaCAqLywKKwkJCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdMU0wu
Y3BwICovLAorCQkJCURERDNCN0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5o
ICovLAorCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAg
Ki8sCisJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8s
CisJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8sCisJCQkJRTM3MTFB
NDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCisJCQkJMkE3NjVCODZD
QkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCTRBQkEyMzBGRUEzNjU0
QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0
IC8qIGRlYnVnLmggKi8sCisJCQkJQTMxNTNENThGNEJCQkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcu
bCAqLywKKwkJCQk4QzMyMjVDMkY4QzM1NzNDRDk3MjVFNjYgLyogZ2xzbGFuZy55ICovLAorCQkJ
CURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkxNTNCRjA2QkYx
MkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlDOEJENTlCRDcw
NTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYwMDVGNjY5NkND
MDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdG
RjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlG
IC8qIHVuaXN0ZC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlwYXRoID0gY29t
cGlsZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk0NjZFMUQwNTMxQTc5
QjU4MTNFOEE3RjggLyogSW50ZXJtZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcu
Y3BwICovLAorCQkJCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAg
Ki8sCisJCQkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUxIC8qIGdsc2xhbmdfdGFiLmggKi8sCisJ
CQkpOworCQkJbmFtZSA9IEludGVybWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gSU5URVJNRURJ
QVRFX0RJUjsKKwkJfTsKKwkJNUJCRUZGOUI5MTczODI5N0I5NUM1NjhEID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYg
LyogU291cmNlICovLAorCQkJCTQ2NkUxRDA1MzFBNzlCNTgxM0U4QTdGOCAvKiBJbnRlcm1lZGlh
dGVzICovLAorCQkJCUUwRURDNDEzMEU3RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLywKKwkJ
CQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8sCisJCQkpOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1
aWxkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDRjJC
NjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAorCQkJKTsKKwkJCW5h
bWUgPSBCdWlsZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUUwRURDNDEz
MEU3RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi8sCisJCQkJRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFu
Z2xlLmEgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0
cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9u
IiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAv
KiBTb3VyY2VzICovLAorCQkJCUE1Qzk5NEU3NERCMUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtz
ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0g
KAorCQkJCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICov
LAorCQkJKTsKKwkJCW5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9jb21tb247CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0
REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9
ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsKKwkJRkIzQzUw
NTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFy
Z2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZCM0M1MDVCMTFGNzkyNEEwMDgxRjVC
QSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkIzQzUwNTYxMUY3OTI0QTAwODFGNUJBIC8q
IFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNUExMUY3OTI0QTAwODFGNUJBIC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkJRkIzQzUwRDExMUY3OUNDQzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8s
CisJCQkpOworCQkJbmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2ds
c2w7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxp
YmFuZ2xlLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxp
YnJhcnkuc3RhdGljIjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwor
CisvKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJREExODhEOEM2QkY4MDczMTIyNTM5
MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0
dHJpYnV0ZXMgPSB7CisJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVT
OworCQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERD
QTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9h
bmdsZSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJaGFz
U2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3
Qjk1QzU2OEQ7CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsK
KwkJCXRhcmdldHMgPSAoCisJCQkJMTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywK
KwkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCisJ
CQkJMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi8sCisJCQkJRkIz
QzUwNTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KKwkJMEQ1MTNGOEI5MjM5NDlDMTU2REIwMkM1IC8qIEFjdGlvbiAiYmlzb25f
Z2xzbGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5w
dXRQYXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5nLnksCisJCQkpOworCQkJbmFtZSA9ICJB
Y3Rpb24gXCJiaXNvbl9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5U
RVJNRURJQVRFX0RJUikvZ2xzbGFuZ190YWIuY3BwIiwKKwkJCQkiJChJTlRFUk1FRElBVEVfRElS
KS9nbHNsYW5nX3RhYi5oIiwKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJl
Y2hvIG5vdGU6IFwiRXhlY3V0aW5nIGJpc29uIG9uIGNvbXBpbGVyL2dsc2xhbmcueVwiXG5leGVj
IGJpc29uIC0tbm8tbGluZXMgXCItLWRlZmluZXM9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5n
X3RhYi5oXCIgXCItLXNrZWxldG9uPXlhY2MuY1wiIFwiLS1vdXRwdXQ9JHtJTlRFUk1FRElBVEVf
RElSfS9nbHNsYW5nX3RhYi5jcHBcIiBjb21waWxlci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJ
CXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAg
LyogQWN0aW9uICJmbGV4X2dsc2xhbmciICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRC
dWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0g
KAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGlsZXIvZ2xzbGFuZy5sLAorCQkJ
KTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMg
PSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5jcHAiLAorCQkJKTsKKwkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jp
bi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBj
b21waWxlci9nbHNsYW5nLmxcIlxuZXhlYyBmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgXCItLW91
dGZpbGU9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcu
bFxuZXhpdCAxXG4iOworCQkJc2hvd0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisvKiBFbmQgUEJY
U2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlFQUEyMkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNl
cyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTg4OEYxMzgyNDk4RTJENzRBRjI4
MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3
N0E4RkMgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzA2NUQyOUU5N0ZBQzZF
MTI3Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEEyMTY5NDkx
MDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTBERjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5RUY1OTlCNUU0M0ZEQzFFQTZEQ0NGNjYgLyogTGluay5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VD
b25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyog
UGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDN0M1REZGMEIyREZFQzA5Mzg3
RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNTU2M0FERkVBMTUxMTZE
NzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUMyM0Y1
OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNl
cyAqLywKKwkJCQlDQjdGMEVGMEQ2QTg5RkE4QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAq
LywKKwkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNl
cyAqLywKKwkJCQkzQTk2RTlDQUM4QTI1QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNl
cyAqLywKKwkJCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJj
ZXMgKi8sCisJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3Vy
Y2VzICovLAorCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3Vy
Y2VzICovLAorCQkJCUFCQTVDNjFCMUI3OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBENDA2NDE2NzM5OEE2ODkyODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUZCM0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAv
KiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJRkIzQzUwQUIxMUY3
OTUxQjAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTBBQzExRjc5NTFCMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5oIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwQTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0b20uYyBpbiBTb3VyY2VzICovLAorCQkJCUZC
M0M1MEE1MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHAuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEE2MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovLAorCQkJCUZC
M0M1MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovLAorCQkJCUZC
M0M1MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAqLywKKwkJCQlG
QjNDNTBBOTExRjc5NEZGMDA4MUY1QkEgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwQUExMUY3OTRGRjAwODFGNUJBIC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZCM0M1MDkyMTFGNzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjNDNTA5MzExRjc5NENFMDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzQzUwOTQxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTUxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxp
emVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTYxMUY3OTRDRTAwODFGNUJBIC8q
IEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NzExRjc5NENFMDA4
MUY1QkEgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk4MTFGNzk0
Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTA5OTExRjc5NENFMDA4MUY1QkEgLyogTGluay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTA5QTExRjc5NENFMDA4MUY1QkEgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzQzUwNTgxMUY3OTI0QTAwODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzQzUwOUIxMUY3OTRDRTAwODFGNUJBIC8qIHBhcnNlQ29uc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUMxMUY3OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlEMTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29s
QWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUUxMUY3OTRDRTAwODFGNUJBIC8q
IFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlGMTFGNzk0Q0Uw
MDgxRjVCQSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEEwMTFG
Nzk0Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzQzUwOEYxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwor
LyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTI5MUVFMDQyMDJFQzc5
Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFy
Z2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBB
TkdMRSBTdXBwb3J0ICovOworCQkJdGFyZ2V0UHJveHkgPSBFNjlCRkJFMkQxMjcyNjIwRTQ2QzNG
OEEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworCQlGQjNDNTA2NDExRjc5Mjk3
MDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdl
dERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSBGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5n
bGUgKi87CisJCQl0YXJnZXRQcm94eSA9IEZCM0M1MDYzMTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhD
b250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCUZCM0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5j
eTsKKwkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0
ICovOworCQkJdGFyZ2V0UHJveHkgPSBGQjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTAw
QkYyRUJDQkRGNTY3OEY0QkEyRkE5MiAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9
ICJ0cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsK
KwkJfTsKKwkJMUExMkFBNUQ2NUFDREU3MUFFMDg5RUUzIC8qIERlZmF1bHQgKi8gPSB7CisJCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJP
RFVDVF9OQU1FID0gQWxsOworCQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworCQkxRjNG
MTIxOEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJ
WCA9IGxpYjsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkuLAorCQkJCQkuLi9p
bmNsdWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUJDNTc5M0M5QTFGRjAyMUE4MUM2NjU1
OSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKSI7
CisJCQkJQ09ORklHVVJBVElPTl9CVUlMRF9ESVIgPSAiJChCVUlMRF9ESVIpIjsKKwkJCQlJTlRF
Uk1FRElBVEVfRElSID0gIiQoUFJPSkVDVF9ERVJJVkVEX0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJ
T04pIjsKKwkJCQlPTkxZX0FDVElWRV9BUkNIID0gWUVTOworCQkJCVNIQVJFRF9JTlRFUk1FRElB
VEVfRElSID0gIiQoU1lNUk9PVCkvRGVyaXZlZFNvdXJjZXMvJChDT05GSUdVUkFUSU9OKSI7CisJ
CQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUZCM0M1MDVDMTFGNzkyNEEwMDgxRjVC
QSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUhFQURF
Ul9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJ
CQlQUk9EVUNUX05BTUUgPSBhbmdsZTsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsK
Ky8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29u
ZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQkwQUE1NDgyNUJGNURGMEEzRkJBOTJCNjAgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFOR0xFIFN1
cHBvcnQiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCisJCQkJMDBCRjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1bHQg
Ki8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMEU1OUY4RkU0QTgwOTlF
OEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiYnVp
bGRfYW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCisJCQkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8qIERlZmF1
bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMzRCQjM4RTNBNzQ0
MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFy
Z2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25M
aXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxRjNGMTIxOEI1MTM1RkJCMDY3
REU4MDkgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9Owor
CQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRp
b25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxQTEyQUE1RDY1QUNERTcx
QUUwODlFRTMgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9
OworCQlGQjNDNTA1QjExRjc5MjRBMDA4MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgImFuZ2xlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUZCM0M1MDVDMTFGNzky
NEEwMDgxRjVCQSAvKiBEZWZhdWx0ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJ
CX07CisvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2Jq
ZWN0ID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tbW9uL2FuZ2xldXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9j
b21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gYW5nbGV1dGlscy5oOiBDb21tb24gQU5H
TEUgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTU1PTl9BTkdMRVVUSUxTX0hfCisjZGVmaW5lIENP
TU1PTl9BTkdMRVVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29u
c3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGlu
IHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKyNl
bmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tbW9uL2RlYnVnLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVi
dWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitzdGF0aWMgYm9v
bCB0cmFjZV9vbiA9IHRydWU7CisKK25hbWVzcGFjZSBnbAorewordm9pZCB0cmFjZShjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpZiAodHJhY2Vfb24pCisgICAgeworICAgICAgICBp
ZiAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICBGSUxFICpmaWxlID0gZm9wZW4oImRl
YnVnLnR4dCIsICJhIik7CisKKyAgICAgICAgICAgIGlmIChmaWxlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHZhX2xpc3QgdmFyYXJnOworICAgICAgICAgICAgICAgIHZhX3N0YXJ0
KHZhcmFyZywgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQs
IHZhcmFyZyk7CisgICAgICAgICAgICAgICAgdmFfZW5kKHZhcmFyZyk7CisKKyAgICAgICAgICAg
ICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21tb24vZGVidWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21t
b24vZGVidWcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZu
ZGVmIENPTU1PTl9ERUJVR19IXworI2RlZmluZSBDT01NT05fREVCVUdfSF8KKworI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK25hbWVzcGFjZSBnbAoreworICAgIC8v
IE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWdnaW5nIGxvZworICAgIHZvaWQgdHJhY2UoY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pOworfQorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIHRyYWNlIG9m
IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZwor
I2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNl
KCJ0cmFjZTogJXMibWVzc2FnZSJcbiIsIF9fRlVOQ1RJT05fXywgX19WQV9BUkdTX18pCisjZWxz
ZQorICAgICNkZWZpbmUgVFJBQ0UoLi4uKSAoKHZvaWQpMCkKKyNlbmRpZgorCisvLyBBIG1hY3Jv
IHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVn
Z2luZyBsb2csIHRvIGRlbm90ZSBhbiBpdGVtIGluIG5lZWQgb2YgZml4aW5nLiBXaWxsIG9jY3Vy
IGV2ZW4gaW4gcmVsZWFzZSBtb2RlLgorI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pIGdsOjp0
cmFjZSgiZml4bWU6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQor
CisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMg
dG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3IuIFdpbGwgb2NjdXIgZXZlbiBp
biByZWxlYXNlIG1vZGUuCisjZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZXJy
OiAlcyJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBfX1ZBX0FSR1NfXykKKworLy8gQSBtYWNy
byBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRl
YnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8geyBcCisgICAgaWYoIShleHBy
ZXNzaW9uKSkgXAorICAgICAgICBFUlIoIlx0ISBBc3NlcnQgZmFpbGVkIGluICVzKCVkKTogIiNl
eHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhw
cmVzc2lvbik7IFwKKyAgICB9IHdoaWxlKDApCisKKworLy8gQSBtYWNybyB0byBpbmRpY2F0ZSB1
bmltcGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkKKyNpZm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBV
TklNUExFTUVOVEVEKCkgZG8geyBcCisgICAgICAgIEZJWE1FKCJcdCEgVW5pbXBsZW1lbnRlZDog
JXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFs
c2UpOyBcCisgICAgICAgIH0gd2hpbGUoMCkKKyNlbHNlCisgICAgI2RlZmluZSBVTklNUExFTUVO
VEVEKCkgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywg
X19MSU5FX18pCisjZW5kaWYKKworLy8gQSBtYWNybyBmb3IgY29kZSB3aGljaCBpcyBub3QgZXhw
ZWN0ZWQgdG8gYmUgcmVhY2hlZCB1bmRlciB2YWxpZCBhc3N1bXB0aW9ucworI2lmbmRlZiBOREVC
VUcKKyAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCisgICAgICAgIEVSUigiXHQhIFVu
cmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwK
KyAgICAgICAgYXNzZXJ0KGZhbHNlKTsgXAorICAgICAgICB9IHdoaWxlKDApCisjZWxzZQorICAg
ICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJsZSByZWFjaGVkOiAlcygl
ZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZW5kaWYKKworLy8gQSBtYWNybyBmdW5j
dGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRhdGUgY29uc3RhbnQgY29u
ZGl0aW9ucworI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5cGVkZWYgaW50IENPTVBJ
TEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29sPihjb25kaXRpb24pPzE6
LTFdCisKKyNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21w
aWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5lIF9CQVNJ
Q1RZUEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8vCitlbnVt
IFRQcmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCisgICAg
RWJwVW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJwSGlnaCwK
K307CisKK19faW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9u
IHApCit7CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAi
aGlnaHAiOwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwli
cmVhazsKKyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBkZWZh
dWx0OgkJCXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisg
ICAgfQorfQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwgYXJl
IG9ydGhvZ29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBFYnRWb2lk
LAorICAgIEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAgIEVidEd1YXJk
U2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1w
bGVyKCkKKyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0R3Vh
cmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1Nh
bXBsZXIoKQorICAgIEVidFN0cnVjdCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNo
b3VsZCBiZSBkZXByZWNhdGVkPz8KK307CisKK19faW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNp
Y1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYm
IHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7Cit9CisKKy8vCisvLyBRdWFsaWZpZXJzIGFuZCBi
dWlsdC1pbnMuICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJlIHJlYWQK
Ky8vIG9yIHdyaXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNsYXRvciB0
byBrbm93IHdoaWNoIHJlZ2lzdGVycworLy8gdG8gYWxsb2NhdGUgdmFyaWFibGVzIGluLiAgU2lu
Y2UgYnVpbHQtaW5zIHRlbmQgdG8gZ28gdG8gZGlmZmVyZW50IHJlZ2lzdGVycworLy8gdGhhbiB2
YXJ5aW5nIG9yIHVuaWZvcm0sIGl0IG1ha2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJzLCBub3Qgc3Vi
LWNsYXNzZXMuCisvLworZW51bSBUUXVhbGlmaWVyCit7CisgICAgRXZxVGVtcG9yYXJ5LCAgICAg
Ly8gRm9yIHRlbXBvcmFyaWVzICh3aXRoaW4gYSBmdW5jdGlvbiksIHJlYWQvd3JpdGUKKyAgICBF
dnFHbG9iYWwsICAgICAgICAvLyBGb3IgZ2xvYmFscyByZWFkL3dyaXRlCisgICAgRXZxQ29uc3Qs
ICAgICAgICAgLy8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0
ZXJzIGluIGZ1bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5CisgICAg
RXZxVmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAg
IEV2cVZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAg
ICBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVy
cyBvbmx5CisgICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMg
b25seSAgcmVhZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0
ZXggYW5kIGZyYWdtZW50CisKKyAgICAvLyBwYWNrL3VucGFjayBpbnB1dCBhbmQgb3V0cHV0Cisg
ICAgRXZxSW5wdXQsCisgICAgRXZxT3V0cHV0LAorCisgICAgLy8gcGFyYW1ldGVycworICAgIEV2
cUluLAorICAgIEV2cU91dCwKKyAgICBFdnFJbk91dCwKKyAgICBFdnFDb25zdFJlYWRPbmx5LAor
CisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgdmVydGV4IHNoYWRlcgorICAgIEV2cVBvc2l0
aW9uLAorICAgIEV2cVBvaW50U2l6ZSwKKworICAgIC8vIGJ1aWx0LWlucyByZWFkIGJ5IGZyYWdt
ZW50IHNoYWRlcgorICAgIEV2cUZyYWdDb29yZCwKKyAgICBFdnFGcm9udEZhY2luZywKKyAgICBF
dnFQb2ludENvb3JkLAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgZnJhZ21lbnQgc2hh
ZGVyCisgICAgRXZxRnJhZ0NvbG9yLAorICAgIEV2cUZyYWdEYXRhLAorCisgICAgLy8gZW5kIG9m
IGxpc3QKKyAgICBFdnFMYXN0LAorfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCBmb3IgZGVidWcg
cHJpbnQgb3V0LCBjYXJyaWVkIGFsb25nIHdpdGggdGhlIGRlZmluaXRpb25zIGFib3ZlLgorLy8K
K19faW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEpCit7
CisgICAgc3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJldHVy
biAiVGVtcG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAgICAgICBy
ZXR1cm4gIkdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAg
ICAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFk
T25seTogIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0dHJp
YnV0ZTogICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFW
YXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmFyeWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJy
ZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2
YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlm
b3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAi
aW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1
cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAg
cmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5wdXQ6ICAgICAg
ICAgIHJldHVybiAiaW5wdXQiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dHB1dDog
ICAgICAgICByZXR1cm4gIm91dHB1dCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFQb3Np
dGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
UG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAgICBicmVh
azsKKyAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gcXVhbGlm
aWVyIjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNMVURFRF8KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9j
b21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9UcmFuc2xhdG9yR0xTTC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3Zp
ZGVkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hl
ciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisv
LworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNo
U3BlYyBzcGVjKQoreworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wobGFuZ3VhZ2UsIHNw
ZWMpOworfQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENv
bXBpbGVyCisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQorewor
ICAgIGRlbGV0ZSBjb21waWxlcjsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9Db2RlR2VuSExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgorCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisv
LyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucwor
Ly8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21w
aWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIHJldHVybiBu
ZXcgVHJhbnNsYXRvckhMU0wobGFuZ3VhZ2UsIHNwZWMpOworfQorCisvLworLy8gRGVsZXRlIHRo
ZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVyCisvLwordm9pZCBEZWxldGVDb21w
aWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQoreworICAgIGRlbGV0ZSBjb21waWxlcjsKK30KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0NvbW1vbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBp
bGVyL0NvbW1vbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTU1PTl9JTkNMVURFRF8KKyNkZWZpbmUg
X0NPTU1PTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
I2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21waWxl
ci9Qb29sQWxsb2MuaCIKKwordHlwZWRlZiBpbnQgVFNvdXJjZUxvYzsKK2NvbnN0IHVuc2lnbmVk
IGludCBTb3VyY2VMb2NMaW5lTWFzayA9IDB4ZmZmZjsKK2NvbnN0IHVuc2lnbmVkIGludCBTb3Vy
Y2VMb2NTdHJpbmdTaGlmdCA9IDE2OworCisvLworLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19E
RUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCisvLwor
I2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEEpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJu
IChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSAgICAgXAorICAgIHZvaWQg
b3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIHZvaWQgKikgeyB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHMp
IHsgcmV0dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSBcCisgICAg
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsg
fQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0eXBlZGVmIHBvb2xfYWxs
b2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5n
IDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5n
OwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0
czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKK2lubGluZSBUU3RyaW5n
KiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQqIG1lbW9yeSA9IEdsb2Jh
bFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1l
bW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4g
IFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCisvLyBhY3Jvc3Mg
Y29tcGlsZXMvbGlua3MuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmluZwor
I2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KKworLy8KKy8v
IFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcworLy8K
K3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9yPFQs
IHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgc3Rk
Ojp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAg
ICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30KKyAg
ICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQsIHBv
b2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3RkOjp2
ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwordGVtcGxhdGUgPGNsYXNz
IEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAorY2xhc3MgVE1hcCA6IHB1
YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBL
LCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWly
PGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEssIEQs
IENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBuYW1l
IGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAgICBUTWFwKGNvbnN0IHRB
bGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1hcDxL
LCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQorfTsKKwordHlwZWRl
ZiBUTWFwPFRTdHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJsZTsKKworI2VuZGlmIC8vIF9DT01N
T05fSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9j
b21waWxlci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvQ29uc3RhbnRV
bmlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4OCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCisjZGVmaW5lIF9DT05TVEFOVF9V
TklPTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCitjbGFzcyBDb25zdGFudFVu
aW9uIHsKK3B1YmxpYzoKKworICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9v
bEFsbG9jYXRvcikgICAgICAgIAorICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3Qg
PSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KKyAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29u
c3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQorCisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJu
IGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAg
IGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4gYkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsg
cmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNv
bnN0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaSA9PSBpQ29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZs
b2F0IGYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZiA9PSBmQ29uc3QpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiID09
IGJDb25zdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChjb25zdGFudC5pQ29uc3QgPT0gaUNv
bnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChjb25zdGFudC5mQ29uc3Qg
PT0gZkNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgaWYgKGNvbnN0YW50LmJD
b25zdCA9PSBiQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhb3BlcmF0b3I9PShpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
ZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShmKTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGIpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhb3BlcmF0b3I9PShjb25zdGFudCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChpQ29uc3QgPiBjb25zdGFudC5pQ29u
c3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPiBj
b25zdGFudC5mQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChpQ29uc3QgPCBjb25zdGFu
dC5pQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29u
c3QgPCBjb25zdGFudC5mQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29u
c3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50
LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRG
Q29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRv
ci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAg
Q29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3Rh
bnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDog
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29u
c3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNv
bnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZs
b2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJl
YWs7IAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAg
IGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25z
dGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9
CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwor
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0
KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFu
dFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAg
ICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlv
biYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25z
dChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAg
ICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25z
dGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0Qm9v
bDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisg
ICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorcHJpdmF0ZToK
KworICAgIHVuaW9uICB7CisgICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBz
Y2FsYXIgaW50cworICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFy
IGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2Nh
bGFyIGZsb2F0cworICAgIH0gOworCisgICAgVEJhc2ljVHlwZSB0eXBlOworfTsKKworI2VuZGlm
IC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9JbmZvU2luay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCit2b2lkIFRJbmZvU2lu
a0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBtZXNzYWdlKSB7CisgICAgc3dpdGNoKG1lc3NhZ2Up
IHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIldBUk5JTkc6
ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEVycm9yOgorICAg
ICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQo
IklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQ
cmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOSU1QTEVNRU5U
RUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeE5vdGU6Cisg
ICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04gRVJST1I6ICIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Omxv
Y2F0aW9uKFRTb3VyY2VMb2MgbG9jKSB7CisgICAgaW50IHN0cmluZyA9IGxvYyA+PiBTb3VyY2VM
b2NTdHJpbmdTaGlmdDsKKyAgICBpbnQgbGluZSA9IGxvYyAmIFNvdXJjZUxvY0xpbmVNYXNrOwor
CisgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIGlmIChsaW5lKQorICAgICAg
ICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6IiA8PCBsaW5lOworICAgIGVsc2UKKyAgICAgICAgc3Ry
ZWFtIDw8IHN0cmluZyA8PCAiOj8gIjsKKyAgICBzdHJlYW0gPDwgIjogIjsKKworICAgIHNpbmsu
YXBwZW5kKHN0cmVhbS5zdHIoKSk7Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShU
UHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKSB7CisgICAgcHJlZml4KG1lc3NhZ2Up
OworICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQorCit2b2lk
IFRJbmZvU2lua0Jhc2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciog
cywgVFNvdXJjZUxvYyBsb2MpIHsKKyAgICBwcmVmaXgobWVzc2FnZSk7CisgICAgbG9jYXRpb24o
bG9jKTsKKyAgICBzaW5rLmFwcGVuZChzKTsKKyAgICBzaW5rLmFwcGVuZCgiXG4iKTsKK30KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luZm9TaW5r
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29t
cGlsZXIvSW5mb1NpbmsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTE0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9JTkZPU0lOS19JTkNMVURFRF8K
KyNkZWZpbmUgX0lORk9TSU5LX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1
ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorCisvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbmFsIHBhcnQg
b2YgdGhlIGdpdmVuIGZsb2F0aW5nLXBvaW50IG51bWJlci4KK2lubGluZSBmbG9hdCBmcmFjdGlv
bmFsUGFydChmbG9hdCBmKSB7CisgIGZsb2F0IGludFBhcnQgPSAwLjBmOworICByZXR1cm4gbW9k
ZmYoZiwgJmludFBhcnQpOworfQorCisvLworLy8gVFByZWZpeFR5cGUgaXMgdXNlZCB0byBjZW50
cmFsaXplIGhvdyBpbmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KKy8vIFNlZSBiZWxvdy4KKy8vCitl
bnVtIFRQcmVmaXhUeXBlIHsKKyAgICBFUHJlZml4Tm9uZSwKKyAgICBFUHJlZml4V2FybmluZywK
KyAgICBFUHJlZml4RXJyb3IsCisgICAgRVByZWZpeEludGVybmFsRXJyb3IsCisgICAgRVByZWZp
eFVuaW1wbGVtZW50ZWQsCisgICAgRVByZWZpeE5vdGUKK307CisKKy8vCisvLyBFbmNhcHN1bGF0
ZSBpbmZvIGxvZ3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVtLgorLy8KKy8vIFRoZSBt
ZXRob2RzIGFyZSBhIGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0aW5nIGEgdmFyaWV0eSBv
ZgorLy8gbWVzc2FnZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhlIGxvZy4KKy8vCitjbGFz
cyBUSW5mb1NpbmtCYXNlIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlKCkge30KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29u
c3QgVCYgdCkgeworICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAg
IHN0cmVhbSA8PCB0OworICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE92ZXJyaWRlIDw8IG9wZXJhdG9yIGZvciBz
cGVjaWZpYyB0eXBlcy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdzCisgICAgLy8gYW5k
IGNoYXJhY3RlcnMgZGlyZWN0bHkgdG8gdGhlIHNpbmsuCisgICAgVEluZm9TaW5rQmFzZSYgb3Bl
cmF0b3I8PChjaGFyIGMpIHsKKyAgICAgICAgc2luay5hcHBlbmQoMSwgYyk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBj
aGFyKiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRQZXJzaXN0
U3RyaW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRTdHJp
bmcmIHN0cikgeworICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIoKSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBhcmUgd3JpdHRlbiB3
aXRoIGNvcnJlY3QgcHJlY2lzaW9uLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoZmxv
YXQgZikgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBw
b2ludCBpcyB3cml0dGVuLiBJZiBhIG51bWJlcgorICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEg
ZnJhY3Rpb25hbCBwYXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0IGRvZXMKKyAgICAg
ICAgLy8gbm90IHdyaXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0cyBpbnRlcnByZXRl
ZCBhcyBpbnRlZ2VyIGJ5CisgICAgICAgIC8vIHRoZSBjb21waWxlci4KKyAgICAgICAgVFBlcnNp
c3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQoZikgPT0g
MC4wZikgeworICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsKKyAgICAgICAgICAgIHN0
cmVhbSA8PCBzdGQ6OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhlZCk7CisgICAgICAg
ICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsKKyAgICAgICAgICAgIHN0
cmVhbS5wcmVjaXNpb24oOCk7CisgICAgICAgICAgICBzdHJlYW0gPDwgZjsKKyAgICAgICAgfQor
ICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRoZWlyIG5hbWVzIGluc3Rl
YWQgb2YgaW50ZWdyYWwgdmFsdWUuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChib29s
IGIpIHsKKyAgICAgICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVlIiA6ICJmYWxzZSI7Cisg
ICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICB2b2lkIGVyYXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KKworICAgIGNvbnN0IFRQZXJzaXN0
U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9CisgICAgY29uc3QgY2hhciogY19z
dHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0KKworICAgIHZvaWQgcHJlZml4KFRQ
cmVmaXhUeXBlIG1lc3NhZ2UpOworICAgIHZvaWQgbG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpOwor
ICAgIHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKTsKKyAg
ICB2b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcywgVFNvdXJj
ZUxvYyBsb2MpOworCitwcml2YXRlOgorICAgIFRQZXJzaXN0U3RyaW5nIHNpbms7Cit9OworCitj
bGFzcyBUSW5mb1NpbmsgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jhc2UgaW5mbzsKKyAgICBU
SW5mb1NpbmtCYXNlIGRlYnVnOworICAgIFRJbmZvU2lua0Jhc2Ugb2JqOworfTsKKworI2VuZGlm
IC8vIF9JTkZPU0lOS19JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjE5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLworLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRl
ZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8vIGNhbm5vdCBiZSBleHByZXNzZWQgaW4g
dGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdzIGJldHdlZW4gCisvLyBidWlsdC1pbiBm
dW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKwordm9pZCBUQnVp
bHRJbnM6OmluaXRpYWxpemUoKQoreworICAgIC8vCisgICAgLy8gSW5pdGlhbGl6ZSBhbGwgdGhl
IGJ1aWx0LWluIHN0cmluZ3MgZm9yIHBhcnNpbmcuCisgICAgLy8KKyAgICBUU3RyaW5nIEJ1aWx0
SW5GdW5jdGlvbnM7CisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zVmVydGV4OworICAgIFRT
dHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50OworICAgIFRTdHJpbmcgU3RhbmRhcmRVbmlm
b3JtczsKKyAgICBUU3RyaW5nIFZlcnRleERlZmF1bHRQcmVjaXNpb247CisgICAgVFN0cmluZyBG
cmFnbWVudERlZmF1bHRQcmVjaXNpb247CisKKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBm
dW5jdGlvbnMgc2VlbiBieSBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYg
cyA9IEJ1aWx0SW5GdW5jdGlvbnM7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5nbGUgYW5k
IFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCByYWRpYW5zKGZsb2F0IGRlZ3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgcmFkaWFucyh2ZWMyICBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIHJhZGlhbnModmVjMyAgZGVncmVlcyk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICByYWRpYW5zKHZlYzQgIGRlZ3JlZXMpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkZWdyZWVzKGZsb2F0IHJhZGlhbnMpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZGVncmVlcyh2ZWMyICByYWRpYW5z
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRlZ3JlZXModmVjMyAgcmFk
aWFucyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkZWdyZWVzKHZlYzQg
IHJhZGlhbnMpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzaW4oZmxv
YXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc2luKHZlYzIg
IGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpbih2ZWMzICBh
bmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzaW4odmVjNCAgYW5n
bGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBjb3MoZmxvYXQgYW5n
bGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY29zKHZlYzIgIGFuZ2xl
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNvcyh2ZWMzICBhbmdsZSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBjb3ModmVjNCAgYW5nbGUpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCB0YW4oZmxvYXQgYW5nbGUpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgdGFuKHZlYzIgIGFuZ2xlKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHRhbih2ZWMzICBhbmdsZSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICB0YW4odmVjNCAgYW5nbGUpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhc2luKGZsb2F0IHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXNpbih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIGFzaW4odmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0ICBhc2luKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBhY29zKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgYWNvcyh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGFjb3ModmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBh
Y29zKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhdGFu
KGZsb2F0IHksIGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
YXRhbih2ZWMyICB5LCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGF0YW4odmVjMyAgeSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0ICBhdGFuKHZlYzQgIHksIHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0IHlfb3Zlcl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIGF0YW4odmVjMiAgeV9vdmVyX3gpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgYXRhbih2ZWMzICB5X292ZXJfeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHlfb3Zlcl94KTsiKSk7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBwb3coZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBwb3codmVjMiAgeCwgdmVjMiAgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBwb3codmVjMyAgeCwgdmVjMyAgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBwb3codmVjNCAgeCwgdmVjNCAgeSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGV4cChmbG9hdCB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGV4cCh2ZWMyICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGV4cCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgIGV4cCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgbG9nKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgbG9nKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgbG9nKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
bG9nKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBleHAy
KGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwMih2ZWMy
ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGV4cDIodmVjMyAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBleHAyKHZlYzQgIHgpOyIpKTsK
KworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsb2cyKGZsb2F0IHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbG9nMih2ZWMyICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGxvZzIodmVjMyAgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2cyKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBzcXJ0KGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgc3FydCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHNxcnQodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBzcXJ0KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBp
bnZlcnNlc3FydChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIg
IGludmVyc2VzcXJ0KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgaW52ZXJzZXNxcnQodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBpbnZlcnNlc3FydCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
Q29tbW9uIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgYWJzKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
YWJzKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWJzKHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYWJzKHZlYzQgIHgp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzaWduKGZsb2F0IHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc2lnbih2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpZ24odmVjMyAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzaWduKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmbG9vcihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgIGZsb29yKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgZmxvb3IodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBmbG9vcih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgY2VpbChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIGNlaWwodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBj
ZWlsKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2VpbCh2
ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZnJhY3QoZmxv
YXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmcmFjdCh2ZWMyICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZyYWN0KHZlYzMgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZnJhY3QodmVjNCAgeCk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCBmbG9hdCB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCBmbG9h
dCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4LCBm
bG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4
LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMz
ICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2
ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
bWluKGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgbWluKHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgbWluKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCAgbWluKHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgbWluKHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgbWluKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtYXgoZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtYXgodmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgZmxvYXQgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtYXgodmVjNCAgeCwgZmxvYXQgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtYXgodmVjMiAgeCwgdmVjMiAgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgdmVjMyAg
eSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtYXgodmVjNCAgeCwgdmVj
NCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGNsYW1wKGZsb2F0
IHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1wKHZlYzMgIHgsIGZsb2F0
IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIGNsYW1wKHZlYzQgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIHZlYzIgIG1pblZhbCwg
dmVjMiAgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1w
KHZlYzMgIHgsIHZlYzMgIG1pblZhbCwgdmVjMyAgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIGNsYW1wKHZlYzQgIHgsIHZlYzQgIG1pblZhbCwgdmVjNCAgbWF4
VmFsKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWl4KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
bWl4KHZlYzIgIHgsIHZlYzIgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgbWl4KHZlYzMgIHgsIHZlYzMgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHksIGZsb2F0IGEpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWl4KHZlYzIgIHgsIHZlYzIgIHks
IHZlYzIgIGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWl4KHZlYzMg
IHgsIHZlYzMgIHksIHZlYzMgIGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgbWl4KHZlYzQgIHgsIHZlYzQgIHksIHZlYzQgIGEpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3RlcCh2ZWMyICBlZGdlLCB2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAodmVjMyAgZWRnZSwgdmVjMyAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzdGVwKHZlYzQgIGVkZ2UsIHZl
YzQgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3RlcChmbG9hdCBl
ZGdlLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAo
ZmxvYXQgZWRnZSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKHZlYzIgIGVk
Z2UwLCB2ZWMyICBlZGdlMSwgdmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMzICBzbW9vdGhzdGVwKHZlYzMgIGVkZ2UwLCB2ZWMzICBlZGdlMSwgdmVjMyAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzbW9vdGhzdGVwKHZlYzQgIGVkZ2Uw
LCB2ZWM0ICBlZGdlMSwgdmVjNCAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMyICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjMiAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBm
bG9hdCBlZGdlMSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjNCAgeCk7IikpOworCisg
ICAgICAgIC8vCisgICAgICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aChmbG9hdCB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWMyICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UoZmxvYXQgcDAsIGZsb2F0IHAxKTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRpc3RhbmNlKHZlYzIgIHAwLCB2ZWMyICBw
MSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMzICBw
MCwgdmVjMyAgcDEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFu
Y2UodmVjNCAgcDAsIHZlYzQgIHAxKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgZG90KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgZG90KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgZG90KHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiZmxvYXQgZG90KHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzIGNyb3NzKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vcm1hbGl6ZShmbG9hdCB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgIG5vcm1hbGl6ZSh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIG5vcm1hbGl6ZSh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgIG5vcm1hbGl6ZSh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxv
YXQgTnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmYWNlZm9yd2Fy
ZCh2ZWMyICBOLCB2ZWMyICBJLCB2ZWMyICBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIGZhY2Vmb3J3YXJkKHZlYzMgIE4sIHZlYzMgIEksIHZlYzMgIE5yZWYpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZmFjZWZvcndhcmQodmVjNCAgTiwg
dmVjNCAgSSwgdmVjNCAgTnJlZik7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IHJlZmxlY3QoZmxvYXQgSSwgZmxvYXQgTik7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICByZWZsZWN0KHZlYzIgIEksIHZlYzIgIE4pOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgcmVmbGVjdCh2ZWMzICBJLCB2ZWMzICBOKTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJlZmxlY3QodmVjNCAgSSwgdmVjNCAgTik7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJlZnJhY3QoZmxvYXQgSSwgZmxvYXQg
TiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJlZnJh
Y3QodmVjMiAgSSwgdmVjMiAgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIHJlZnJhY3QodmVjMyAgSSwgdmVjMyAgTiwgZmxvYXQgZXRhKTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJlZnJhY3QodmVjNCAgSSwgdmVjNCAgTiwg
ZmxvYXQgZXRhKTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTWF0cml4IEZ1bmN0aW9u
cy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygibWF0MiBtYXRyaXhDb21w
TXVsdChtYXQyIHgsIG1hdDIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQz
IG1hdHJpeENvbXBNdWx0KG1hdDMgeCwgbWF0MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoIm1hdDQgbWF0cml4Q29tcE11bHQobWF0NCB4LCBtYXQ0IHkpOyIpKTsKKworICAgICAg
ICAvLworICAgICAgICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCisgICAgICAgIC8v
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuKHZlYzIgeCwgdmVjMiB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKHZlYzMgeCwg
dmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuKHZl
YzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVz
c1RoYW4oaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMyBsZXNzVGhhbihpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWM0IGxlc3NUaGFuKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbkVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwodmVjMyB4LCB2
ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW5FcXVh
bCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMy
IGxlc3NUaGFuRXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMyBsZXNzVGhhbkVxdWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW5FcXVhbChpdmVjNCB4LCBpdmVjNCB5
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW4odmVj
MiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRl
clRoYW4odmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzQgZ3JlYXRlclRoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbihpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3JlYXRlclRoYW4oaXZlYzQgeCwg
aXZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJU
aGFuRXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
YnZlYzMgZ3JlYXRlclRoYW5FcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW5FcXVhbChpdmVj
MiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0
ZXJUaGFuRXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjNCBncmVhdGVyVGhhbkVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbCh2ZWMzIHgsIHZlYzMgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbCh2ZWM0IHgsIHZlYzQgeSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFsKGl2ZWMyIHgsIGl2
ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZXF1YWwoaXZlYzMg
eCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbChp
dmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIg
ZXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMyBlcXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImJ2ZWM0IGVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RFcXVhbCh2ZWM0IHgsIHZlYzQgeSk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFsKGl2ZWMyIHgsIGl2
ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90RXF1YWwoaXZl
YzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RF
cXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
YnZlYzIgbm90RXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMyBub3RFcXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVjMiB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYW55KGJ2ZWMzIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYm9vbCBhbnkoYnZlYzQgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJvb2wgYWxsKGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
Ym9vbCBhbGwoYnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFs
bChidmVjNCB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90KGJ2
ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90KGJ2ZWMzIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90KGJ2ZWM0IHgpOyIpKTsK
KworICAgICAgICAvLworICAgICAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8K
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBs
ZXIsIHZlYzIgY29vcmQpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0
dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVj
NCBjb29yZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1
YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworCisgICAgICAgIC8vCisg
ICAgICAgIC8vIE5vaXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBub2lzZTEoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IG5vaXNlMSh2ZWMyICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgbm9pc2UxKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBub2lzZTEodmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBu
b2lzZTIoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2Uy
KHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMz
ICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjNCAgeCk7
IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBub2lzZTMoZmxvYXQgeCk7Iikp
OworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZlYzIgIHgpOyIpKTsKKyAg
ICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNlMyh2ZWMzICB4KTsiKSk7CisgICAgLy8J
cy5hcHBlbmQoVFN0cmluZygidmVjMyBub2lzZTModmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5h
cHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0IG5vaXNlNCh2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygi
dmVjNCBub2lzZTQodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxu
IikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAg
ICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBi
eSB2ZXJ0ZXggc2hhZGVycyBvbmx5LgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleDsK
KworICAgICAgICAvLworICAgICAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAv
LworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IGZ0cmFuc2Zvcm0oKTsiKSk7CisKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVy
LCB2ZWMyIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9h
dCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9q
TG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlTG9kKHNhbXBsZXJDdWJlIHNh
bXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlv
bnMgc2VlbiBieSBmcmFnbWVudCBzaGFkZXJzIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8v
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rp
b25zRnJhZ21lbnQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMu
CisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNh
bXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVj
MyBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGJpYXMp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBs
ZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKKworICAgIC8vCXMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGRGZHgoZmxvYXQgcCk7IikpOworICAgIC8vCXMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIGRGZHgodmVjMiAgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoInZlYzMgIGRGZHgodmVjMyAgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIGRGZHgodmVjNCAgcCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
ZEZkeShmbG9hdCBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeSh2
ZWMyICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZEZkeSh2ZWMzICBw
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZEZkeSh2ZWM0ICBwKTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZndpZHRoKGZsb2F0IHApOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZndpZHRoKHZlYzIgIHApOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZndpZHRoKHZlYzMgIHApOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZndpZHRoKHZlYzQgIHApOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RhbmRhcmQgVW5pZm9ybXMK
KyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0
cmluZyYgcyA9IFN0YW5kYXJkVW5pZm9ybXM7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVw
dGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCisgICAgICAgIC8vCisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyB7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCIgICAgaGlnaHAgZmxvYXQgbmVhcjsiKSk7ICAgICAgICAvLyBu
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9hdCBmYXI7IikpOyAgICAg
ICAgIC8vIGYKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiICAgIGhpZ2hwIGZsb2F0IGRpZmY7
IikpOyAgICAgICAgLy8gZiAtIG4KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygifTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInVuaWZvcm0gZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMg
Z2xfRGVwdGhSYW5nZTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisg
ICAgICAgIC8vIERlZmF1bHQgcHJlY2lzaW9uIGZvciB2ZXJ0ZXggc2hhZGVycy4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9
IFZlcnRleERlZmF1bHRQcmVjaXNpb247CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJl
Y2lzaW9uIGhpZ2hwIGludDsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lv
biBoaWdocCBmbG9hdDsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAg
IH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAg
ICAgICAvLyBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIAorICAgICAgICBUU3Ry
aW5nJiBzID0gRnJhZ21lbnREZWZhdWx0UHJlY2lzaW9uOworICAgICAgICAKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygicHJlY2lzaW9uIG1lZGl1bXAgaW50OyIpKTsKKyAgICAgICAgLy8gTm8g
ZGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IGluIGZyYWdtZW50IHNoYWRlcnMKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorCisgICAgYnVpbHRJblN0cmluZ3NbRVNo
TGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soRnJhZ21lbnREZWZhdWx0UHJlY2lzaW9uKTsKKyAgICBi
dWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25z
LmNfc3RyKCkpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNr
KEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0Zy
YWdtZW50XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jtcyk7CisgICAgCisgICAgYnVpbHRJblN0
cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKFZlcnRleERlZmF1bHRQcmVjaXNpb24pOwor
ICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rp
b25zKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soQnVpbHRJ
bkZ1bmN0aW9uc1ZlcnRleCk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVz
aF9iYWNrKFN0YW5kYXJkVW5pZm9ybXMpOworfQorCit2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6
ZShjb25zdCBUQnVpbHRJblJlc291cmNlICZyZXNvdXJjZXMpCit7CisgICAgVFN0cmluZ1N0cmVh
bSBidWlsdEluczsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBjb25zdGFudHMK
KyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJl
c291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3Qg
aW50IGdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMgPDwgIjsiOworCisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9N
YXhWYXJ5aW5nVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzIDw8ICI7
IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwor
ICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyA9ICIgPDwgcmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwor
ICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8
IHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwg
ImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMu
bWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0
IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJzIDw8
ICI7IjsKKworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKGJ1
aWx0SW5zLnN0cigpKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2Jh
Y2soYnVpbHRJbnMuc3RyKCkpOworfQorCit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3Vh
Z2UgbGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7CisgICAgLy8KKyAgICAv
LyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUg
bm90IGluIAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBz
d2l0Y2gobGFuZ3VhZ2UpIHsKKworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0ZyYWdDb29yZCIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAg
ICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01h
eERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwg
ICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bv
aW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAx
KSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIE5leHQsIGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5
IGxvYWRlZCBoZWFkZXJzIGhhdmUKKyAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBU
aG9zZSB0aGF0IGFyZSBub3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVk
IHRvIGJlIHJlc29sdmVkIHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFz
CisgICAgLy8gb3BlcmF0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm5vdCIsICAgICAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwor
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVP
cFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVh
bCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BMZXNzVGhhbik7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9w
TGVzc1RoYW5FcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRl
clRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwpOworICAgIAorICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4p
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFz
aW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVP
cEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAg
IEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAg
ICAgICAgRU9wUG93KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwg
ICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ci
LCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4
cCIsICAgICAgICAgIEVPcEV4cCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bG9nMiIsICAgICAgICAgRU9wTG9nMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQpOworCisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAgRU9wQWJzKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWlu
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BN
YXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVP
cENsYW1wKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAg
ICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAg
ICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0
ZXAiLCAgIEVPcFNtb290aFN0ZXApOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAgICAgRU9wRG90KTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2Fy
ZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9w
UmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAg
ICAgRU9wUmVmcmFjdCk7CisgICAgCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
YW55IiwgICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJhbGwiLCAgICAgICAgICBFT3BBbGwpOworCisgICAgc3dpdGNoKGxhbmd1YWdlKQorICAgIHsK
KyAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVNoTGFu
Z0ZyYWdtZW50OgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAg
ICAgICAgIEVPcERQZHgpOyAgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lv
bgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgICAgICAgIEVP
cERQZHkpOyAgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8v
CXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsICAgICAgIEVPcEZ3aWR0aCk7
ICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsK
KyAgICB9Cit9CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3Vy
Y2VzKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBzb21lIHNwZWNpYWwgYnVpbHQt
aW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVy
IGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKGxhbmd1YWdlKSB7CisKKyAgICBjYXNlIEVTaExh
bmdGcmFnbWVudDogeworICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFy
cmF5IHNpemUuCisgICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFGcmFnQ29sb3IsICAgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZnJhZ0RhdGEu
c2V0QXJyYXlTaXplKHJlc291cmNlcy5tYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
IiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OiBicmVhazsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIEdldFByZXByb2Nlc3NvckJ1aWx0
aW5TdHJpbmcoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpQcmVwcm9jZXNzb3JCdWlsdGlu
U3RyaW5nID0gIiI7CisKKyAgICByZXR1cm4gUHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZzsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0lOSVRJQUxJWkVf
SU5DTFVERURfCisjZGVmaW5lIF9JTklUSUFMSVpFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiR0xT
TEFORy9SZXNvdXJjZUxpbWl0cy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xU
YWJsZS5oIgorCit0eXBlZGVmIFRWZWN0b3I8VFN0cmluZz4gVEJ1aWx0SW5TdHJpbmdzOworCitj
bGFzcyBUQnVpbHRJbnMgeworcHVibGljOgorCVBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xv
YmFsUG9vbEFsbG9jYXRvcikKKwl2b2lkIGluaXRpYWxpemUoKTsKKwl2b2lkIGluaXRpYWxpemUo
Y29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKTsKKwlUQnVpbHRJblN0cmluZ3MqIGdl
dEJ1aWx0SW5TdHJpbmdzKCkgeyByZXR1cm4gYnVpbHRJblN0cmluZ3M7IH0KK3Byb3RlY3RlZDoK
KwlUQnVpbHRJblN0cmluZ3MgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0NvdW50XTsKK307CisKK3Zv
aWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxlJik7Cit2b2lkIElk
ZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYsIGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UgJnJlc291cmNlcyk7Citib29sIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKGNv
bnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywgVEluZm9TaW5rJiwgVFN5bWJvbFRhYmxl
KiwgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBFU2hMYW5nQ291bnQpOworYm9vbCBJbml0aWFsaXpl
U3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgKnJl
c291cmNlcywgVFN5bWJvbFRhYmxlKik7Citjb25zdCBjaGFyKiBHZXRQcmVwcm9jZXNzb3JCdWls
dGluU3RyaW5nKCk7CitleHRlcm4gIkMiIGludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpOworZXh0
ZXJuICJDIiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisKKyNlbmRpZiAvLyBfSU5J
VElBTElaRV9JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZURsbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgorCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKworT1NfVExTSW5kZXggVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNf
SU5ERVg7CisKK2Jvb2wgSW5pdFByb2Nlc3MoKQoreworICAgIGlmIChUaHJlYWRJbml0aWFsaXpl
SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJLy8KKwkJLy8gRnVuY3Rpb24gaXMg
cmUtZW50cmFudC4KKwkJLy8KKyAgICAgICAgcmV0dXJuIHRydWU7CisJfQorCisgICAgVGhyZWFk
SW5pdGlhbGl6ZUluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworCisgICAgaWYgKFRocmVhZElu
aXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGFsbG9jYXRlIFRMUyBhcmVhIGZvciBpbml0
IGZsYWciKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworCisgICAgaWYgKCFJbml0aWFs
aXplUG9vbEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZh
aWxlZCB0byBpbml0YWxpemUgZ2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CX0KKworICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKKyAgICAgICAg
YXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29u
dGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisJSW5pdFRocmVhZCgpOworICAg
IHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgSW5pdFRocmVhZCgpCit7CisJLy8KKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHJlLWVudHJhbnQKKwkvLworICAgIGlmIChUaHJlYWRJbml0aWFsaXpl
SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIkluaXRUaHJl
YWQoKTogUHJvY2VzcyBoYXNuJ3QgYmVlbiBpbml0YWxpc2VkLiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisJfQorCisgICAgaWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRl
eCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKwlJbml0aWFsaXplR2xvYmFsUG9vbHMo
KTsKKworCWlmICghSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRl
eCwgKHZvaWQgKikxKSkgeworCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBVbmFibGUgdG8g
c2V0IGluaXQgZmxhZy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIHJldHVy
biB0cnVlOworfQorCisKK2Jvb2wgRGV0YWNoVGhyZWFkKCkKK3sKKyAgICBib29sIHN1Y2Nlc3Mg
PSB0cnVlOworCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKwkvLworCS8vIEZ1bmN0aW9uIGlzIHJl
LWVudHJhbnQgYW5kIHRoaXMgdGhyZWFkIG1heSBub3QgaGF2ZSBiZWVuIGluaXRhbGlzZWQuCisJ
Ly8KKyAgICBpZiAoT1NfR2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKSB7
CisgICAgICAgIGlmICghT1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9p
ZCAqKTApKSB7CisJCQlhc3NlcnQoMCAmJiAiRGV0YWNoVGhyZWFkKCk6IFVuYWJsZSB0byBjbGVh
ciBpbml0IGZsYWcuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisJCX0KKworCQlG
cmVlR2xvYmFsUG9vbHMoKTsKKworCQlpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkKKyAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9v
bCBEZXRhY2hQcm9jZXNzKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgaWYg
KFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBTaEZpbmFsaXplKCk7CisKKyAgICBzdWNjZXNzID0gRGV0YWNo
VGhyZWFkKCk7CisKKwlGcmVlUG9vbEluZGV4KCk7CisKKwlpZiAoIUZyZWVQYXJzZUNvbnRleHRJ
bmRleCgpKQorICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBPU19GcmVlVExTSW5kZXgo
VGhyZWFkSW5pdGlhbGl6ZUluZGV4KTsKKyAgICBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBzdWNjZXNzOworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemVEbGwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gK
KyNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKKworCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNs
dWRlLmgiCisKKworYm9vbCBJbml0UHJvY2VzcygpOworYm9vbCBJbml0VGhyZWFkKCk7Citib29s
IERldGFjaFRocmVhZCgpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7CisKKyNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVETExfSAorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXwor
I2RlZmluZSBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KKwordm9pZCBJbml0aWFsaXpl
R2xvYmFsUG9vbHMoKTsKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCk7Citib29sIEluaXRpYWxpemVQ
b29sSW5kZXgoKTsKK3ZvaWQgRnJlZVBvb2xJbmRleCgpOworCisjZW5kaWYgLy8gX19JTklUSUFM
SVpFX0dMT0JBTFNfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTEla
RV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVfUEFSU0VfQ09O
VEVYVF9JTkNMVURFRF8KKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworYm9vbCBJ
bml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTsKK2Jvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpOworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRl
eHRJbmRleCgpOworCisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNM
VURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9JbnRlcm1UcmF2
ZXJzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkzIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUcmF2ZXJz
ZSB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAorLy8gY2FsbCBhIG5v
ZGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaCBub2RlLgorLy8gRG9uZSByZWN1cnNp
dmVseSB0aHJvdWdoIHRoZSBtZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4KKy8vIE5vZGUgdHlw
ZXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBpcyAwLAorLy8gYnV0
IHRoZWlyIHN1YnRyZWUgd2lsbCBzdGlsbCBiZSB0cmF2ZXJzZWQuCisvLyBOb2RlcyB3aXRoIGNo
aWxkcmVuIGNhbiBoYXZlIHRoZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAorLy8gaWYgcHJlVmlz
aXQgaXMgdHVybmVkIG9uIGFuZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbgorLy8gcmV0dXJu
cyBmYWxzZS4KKy8vCisvLyBwcmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmlnaHRUb0xlZnQgY29u
dHJvbCB3aGF0IG9yZGVyCisvLyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KKy8vCisKKy8vCisvLyBU
cmF2ZXJzYWwgZnVuY3Rpb25zIGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hmb3J3YXJkLi4uLgor
Ly8KK3ZvaWQgVEludGVybVN5bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7
CisJaXQtPnZpc2l0U3ltYm9sKHRoaXMpOworfQorCit2b2lkIFRJbnRlcm1Db25zdGFudFVuaW9u
Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlpdC0+dmlzaXRDb25zdGFudFVu
aW9uKHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9kZS4KKy8vCit2b2lk
IFRJbnRlcm1CaW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wg
dmlzaXQgPSB0cnVlOworCisJLy8KKwkvLyB2aXNpdCB0aGUgbm9kZSBiZWZvcmUgY2hpbGRyZW4g
aWYgcHJlLXZpc2l0aW5nLgorCS8vCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJdmlzaXQgPSBp
dC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOworCX0KKwkKKwkvLworCS8vIFZpc2l0IHRo
ZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgorCS8vCisJaWYodmlzaXQpCisJeworCQlp
dC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpIAorCQl7CisJCQlp
ZihyaWdodCkKKwkJCXsKKwkJCQlyaWdodC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQkJCisJCQlp
ZihpdC0+aW5WaXNpdCkKKwkJCXsKKwkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0
LCB0aGlzKTsKKwkJCX0KKworCQkJaWYodmlzaXQgJiYgbGVmdCkKKwkJCXsKKwkJCQlsZWZ0LT50
cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihsZWZ0KQorCQkJewor
CQkJCWxlZnQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJCQorCQkJaWYoaXQtPmluVmlzaXQpCisJ
CQl7CisJCQkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CisJCQl9CisK
KwkJCWlmKHZpc2l0ICYmIHJpZ2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2ZXJzZShpdCk7CisJ
CQl9CisJCX0KKworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwkvLworCS8vIFZpc2l0
IHRoZSBub2RlIGFmdGVyIHRoZSBjaGlsZHJlbiwgaWYgcmVxdWVzdGVkIGFuZCB0aGUgdHJhdmVy
c2FsCisJLy8gaGFzbid0IGJlZW4gY2FuY2VsbGVkIHlldC4KKwkvLworCWlmKHZpc2l0ICYmIGl0
LT5wb3N0VmlzaXQpCisJeworCQlpdC0+dmlzaXRCaW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKKwl9
Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJp
bmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5w
cmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+dmlzaXRVbmFyeShQcmVWaXNpdCwgdGhpcyk7CisKKwlp
ZiAodmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisJCW9wZXJhbmQtPnRyYXZlcnNl
KGl0KTsKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCQorCWlmICh2aXNpdCAmJiBpdC0+
cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLwor
Ly8gVHJhdmVyc2UgYW4gYWdncmVnYXRlIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBu
b2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKwkKKwlpZihpdC0+cHJl
VmlzaXQpCisJeworCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7
CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYo
aXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlmb3IoVEludGVybVNlcXVlbmNlOjpyZXZlcnNlX2l0
ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLnJiZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UucmVuZCgpOyBz
aXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworCQkJCWlmKHZpc2l0ICYm
IGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYoKnNpdCAhPSBzZXF1ZW5jZS5mcm9udCgpKQor
CQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsK
KwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWZvcihUSW50ZXJtU2Vx
dWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5l
bmQoKTsgc2l0KyspCisJCQl7CisJCQkJKCpzaXQpLT50cmF2ZXJzZShpdCk7CisKKwkJCQlpZih2
aXNpdCAmJiBpdC0+aW5WaXNpdCkKKwkJCQl7CisJCQkJCWlmKCpzaXQgIT0gc2VxdWVuY2UuYmFj
aygpKQorCQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0
aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJaXQtPmRlY3JlbWVudERlcHRo
KCk7CisJfQorCisJaWYodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdEFn
Z3JlZ2F0ZShQb3N0VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNlIGEgc2Vs
ZWN0aW9uIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisv
Lwordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkK
K3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQpCisJCXZpc2l0ID0g
aXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAodmlzaXQpIHsKKwkJ
aXQtPmluY3JlbWVudERlcHRoKCk7CisJCWlmIChpdC0+cmlnaHRUb0xlZnQpIHsKKwkJCWlmIChm
YWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWlmICh0cnVlQmxv
Y2spCisJCQkJdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisJCQljb25kaXRpb24tPnRyYXZlcnNl
KGl0KTsKKwkJfSBlbHNlIHsKKwkJCWNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOworCQkJaWYgKHRy
dWVCbG9jaykKKwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWlmIChmYWxzZUJsb2Nr
KQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJfQorCQlpdC0+ZGVjcmVtZW50RGVw
dGgoKTsKKwl9CisKKwlpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZpc2l0U2Vs
ZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGxvb3Agbm9k
ZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJ
bnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0
ID0gdHJ1ZTsKKworCWlmKGl0LT5wcmVWaXNpdCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0TG9v
cChQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3JlbWVu
dERlcHRoKCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlpZih0ZXJtaW5hbCkK
KwkJCXsKKwkJCQl0ZXJtaW5hbC0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJCQlpZihib2R5KQor
CQkJeworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYodGVzdCkKKwkJCXsK
KwkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZih0
ZXN0KQorCQkJeworCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYoYm9keSkK
KwkJCXsKKwkJCQlib2R5LT50cmF2ZXJzZShpdCk7CisJCQl9CisKKwkJCWlmKHRlcm1pbmFsKQor
CQkJeworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKworCQlpdC0+ZGVj
cmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCXsKKwkJ
aXQtPnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNl
IGEgYnJhbmNoIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUu
CisvLwordm9pZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkK
K3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQpCisJCXZpc2l0ID0g
aXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAodmlzaXQgJiYgZXhwcmVz
c2lvbikgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJZXhwcmVzc2lvbi0+dHJhdmVyc2Uo
aXQpOworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZiAodmlzaXQgJiYgaXQtPnBv
c3RWaXNpdCkKKwkJaXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
Y29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQwNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxk
IHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQu
aD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJt
ZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBU
VHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0
YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKworVFByZWNpc2lvbiBHZXRIaWdoZXN0UHJlY2lz
aW9uKCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKKyAgICByZXR1cm4gbGVm
dCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8v
IEZpcnN0IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVpbGQgdGhlIGludGVybWVkaWF0
ZSByZXByZXNlbnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IG1lbWJlciBmdW5j
dGlvbnMgb2YgdGhlIG5vZGVzLgorLy8gVGhleSBhcmUgY2FsbGVkIGZyb20gcGFyc2VyIHByb2R1
Y3Rpb25zLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBBZGQgYSB0ZXJtaW5h
bCBub2RlIGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Npb24uCisvLworLy8gUmV0dXJu
cyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtU3ltYm9sKiBUSW50ZXJtZWRpYXRlOjphZGRT
eW1ib2woaW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25zdCBUVHlwZSYgdHlwZSwgVFNv
dXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1TeW1ib2wqIG5vZGUgPSBuZXcgVEludGVybVN5
bWJvbChpZCwgbmFtZSwgdHlwZSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJl
dHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBwYXJl
bnQgdGhhdCBkb2VzIGEgYmluYXJ5IG9wZXJhdGlvbiBvbiB0aGUgbm9kZXMuCisvLworLy8gUmV0
dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBl
ZCogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5
cGUoKS5pc01hdHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0
VHlwZSgpLmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBjYXNl
IEVPcExvZ2ljYWxYb3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAg
IGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5n
ZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGxlZnQt
PmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAg
ICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BN
dWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBGaXJzdCB0cnkgY29udmVydGluZyB0aGUgY2hpbGRyZW4gdG8gY29t
cGF0aWJsZSB0eXBlcy4KKyAgICAvLworCisgICAgaWYgKCEobGVmdC0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpKSB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0
KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5n
ZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAg
IGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkg
IT0gcmlnaHQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworCisg
ICAgLy8KKyAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRoZXIgdGhl
bi4gIE1ha2UKKyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5cGUuCisg
ICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwor
ICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSByaWdodC0+Z2V0TGluZSgpOworICAg
IG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOworICAgIG5v
ZGUtPnNldFJpZ2h0KHJpZ2h0KTsKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBD
b25zdGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICpyaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KworICAgIGlmIChsZWZ0VGVtcENvbnN0YW50KQorICAgICAgICBsZWZ0VGVtcENvbnN0YW50ID0g
bGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBpZiAocmlnaHRUZW1wQ29uc3RhbnQp
CisgICAgICAgIHJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgLy8KKyAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgorICAgIC8v
CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgaWYgKCBsZWZ0
VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7CisgICAgICAgIHR5cGVkUmV0dXJu
Tm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29u
c3RhbnQsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAodHlwZWRSZXR1cm5Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsK
K30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gYXNzaWdubWVudC4KKy8v
CisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJt
VHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFk
ZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAg
Ly8gZnJvbSByaWdodCB0byBsZWZ0LgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9
IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5l
ID0gbGVmdC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBUSW50
ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdo
dCk7CisgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbm9kZS0+
c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGlsZCk7CisgICAgaWYgKCEgbm9k
ZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5v
ZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGluZGV4IG9wZXJh
dG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisvLyBvZiBhbiBhcnJheSBvciBz
dHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBvZmZzZXQu
CisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRoZSBjYWxsZXIgc2hvdWxkIHNl
dCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50
ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUJpbmFyeSog
bm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAg
ICBsaW5lID0gaW5kZXgtPmdldExpbmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAg
IG5vZGUtPnNldExlZnQoYmFzZSk7CisgICAgbm9kZS0+c2V0UmlnaHQoaW5kZXgpOworCisgICAg
Ly8gY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUKKworICAgIHJldHVybiBub2RlOworfQorCisv
LworLy8gQWRkIG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2YgYW5vdGhlciB0aGF0IGl0IG9wZXJh
dGVzIG9uLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVk
KiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSog
Y2hpbGROb2RlLCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7
CisgICAgVEludGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGls
ZE5vZGUtPmdldEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCB0eXBlIGluIEFk
ZFVuYXJ5TWF0aCIsIGxpbmUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChj
aGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5
cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBF
T3BOZWdhdGl2ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAg
Ly8KKyAgICAvLyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAg
ICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5n
dWFnZS4KKyAgICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dp
dGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0
SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0g
RWJ0Qm9vbDsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBl
ID0gRWJ0RmxvYXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lv
bihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
CisgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxk
LT5pc01hdHJpeCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAg
ICBjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRv
bmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0
dXJuIGNoaWxkOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9y
IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsK
KyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0gY2hpbGQtPmdldExpbmUoKTsKKyAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOworCisg
ICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0No
aWxkID0gY2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAgICAg
ICBpZiAobmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQorCisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFu
Z2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBvZiBl
cnJvciBjaGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCisv
LyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4g
IFNlcXVlbmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0
aGV5IGp1c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2Uu
CisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9u
ZSBwYXNzZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZS4KKy8vCitUSW50
ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJt
Tm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YW4gYWdncmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUuCisgICAgLy8KKyAgICBpZiAo
bm9kZSkgeworICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAg
ICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250YWluaW5n
IHRoaXMgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBhZ2dOb2RlID0gbmV3IFRJ
bnRlcm1BZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVz
aF9iYWNrKG5vZGUpOworICAgICAgICAgICAgaWYgKGxpbmUgPT0gMCkKKyAgICAgICAgICAgICAg
ICBsaW5lID0gbm9kZS0+Z2V0TGluZSgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAg
IGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworCisgICAgLy8KKyAgICAvLyBTZXQg
dGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAgYWdnTm9kZS0+c2V0T3BlcmF0b3Iob3ApOworICAg
IGlmIChsaW5lICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBy
ZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQgb25lIHR5cGUgdG8gYW5vdGhlci4K
Ky8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiwgd2hp
Y2ggY291bGQgYmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2VkIGluIGlmIG5vIGNvbnZlcnNpb24g
d2FzIG5lZWRlZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNpb24gY2FuJ3QgYmUgZG9u
ZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpb24oVE9wZXJh
dG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBub2RlKQoreworICAgIC8v
CisgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KKyAgICAvLworICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgor
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlkZW50aWNhbCwgbm8gcHJv
YmxlbQorICAgIC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlwZSgpKQorICAgICAgICBy
ZXR1cm4gbm9kZTsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYSBzdHJ1Y3R1cmUsIHRoZW4g
bm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSB8fCBub2Rl
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8KKyAg
ICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9ucy4KKyAgICAvLworICAg
IGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOworCisgICAgc3dpdGNoIChv
cCkgeworICAgICAgICAvLworICAgICAgICAvLyBFeHBsaWNpdCBjb252ZXJzaW9ucworICAgICAg
ICAvLworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgICAgICBwcm9tb3Rl
VG8gPSBFYnRCb29sOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0RmxvYXQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9hdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgICAgIHByb21v
dGVUbyA9IEVidEludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVt
b3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
U2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0IHRoYXQncworICAgICAg
ICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEFzQ29u
c3RhbnRVbmlvbigpKSB7CisKKyAgICAgICAgcmV0dXJuIChwcm9tb3RlQ29uc3RhbnRVbmlvbihw
cm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7CisgICAgfSBlbHNlIHsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBmb3IgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFyeSogbmV3Tm9kZSA9IDA7CisKKyAg
ICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAgICAgICAgc3dpdGNoIChwcm9tb3Rl
VG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9k
ZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG5l
d09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9J
bnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFk
IHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiB0eXBlIiwgbm9kZS0+Z2V0
TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2RlLT5pc0FycmF5
KCkpOworICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwgdHlwZSk7Cisg
ICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbmV3Tm9k
ZS0+c2V0T3BlcmFuZChub2RlKTsKKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9Cit9
CisKKy8vCisvLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBpbnRvIGFuIGFnZ3JlZ2F0
ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEgbm9kZSB0aGF0J3Mgbm90IGEgYWdn
cmVnYXRlIHlldCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBhZ2dyZWdhdGUs
IHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3RoIGV4aXN0aW5nIG5vZGVzLgorLy8K
K1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dyZWdhdGUoVEludGVybU5v
ZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlm
IChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50
ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gMDsKKyAgICBpZiAobGVmdCkKKyAgICAgICAgYWdnTm9k
ZSA9IGxlZnQtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKCFhZ2dOb2RlIHx8IGFnZ05vZGUt
PmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dy
ZWdhdGU7CisgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVu
Y2UoKS5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYgKHJpZ2h0KQorICAgICAgICBh
Z2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdodCk7CisKKyAgICBpZiAobGluZSAh
PSAwKQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05v
ZGU7Cit9CisKKy8vCisvLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUgaW50byBhbiBhZ2dyZWdhdGUu
CisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9y
IHRoZSBleGlzdGluZyBub2RlLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6
Om1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAg
ICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1
ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKworICAgIGlmIChsaW5lICE9IDApCisgICAgICAgIGFn
Z05vZGUtPnNldExpbmUobGluZSk7CisgICAgZWxzZQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5l
KG5vZGUtPmdldExpbmUoKSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIEZv
ciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9u
LAorLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBp
biB0aGUKKy8vIG5vZGVQYWlyLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNy
ZWF0ZWQuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50
ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwgVFNvdXJjZUxvYyBsaW5l
KQoreworICAgIC8vCisgICAgLy8gRm9yIGNvbXBpbGUgdGltZSBjb25zdGFudCBzZWxlY3Rpb25z
LCBwcnVuZSB0aGUgY29kZSBhbmQKKyAgICAvLyB0ZXN0IG5vdy4KKyAgICAvLworCisgICAgaWYg
KGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG5vZGVQYWlyLm5vZGUyOworICAgIH0KKworICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBu
ZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIp
OworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworCitU
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwg
VEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChsZWZ0LT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgcmlnaHQtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb21tYUFnZ3JlZ2F0ZSA9IGdyb3dBZ2dy
ZWdhdGUobGVmdCwgcmlnaHQsIGxpbmUpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0QXNB
Z2dyZWdhdGUoKS0+c2V0T3BlcmF0b3IoRU9wQ29tbWEpOworICAgICAgICBjb21tYUFnZ3JlZ2F0
ZS0+c2V0VHlwZShyaWdodC0+Z2V0VHlwZSgpKTsKKyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdl
dFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICBy
ZXR1cm4gY29tbWFBZ2dyZWdhdGU7CisgICAgfQorfQorCisvLworLy8gRm9yICI/OiIgdGVzdCBu
b2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCisvLyBhIHRydWUg
cGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIHNwZWNpZmllZAorLy8g
YXMgc2VwYXJhdGUgcGFyYW1ldGVycy4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9k
ZSBjcmVhdGVkLCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCisvLworVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlw
ZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9jIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJ
bnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2st
PmdldFR5cGUoKSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJs
b2NrID0gY2hpbGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihF
T3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBp
ZiAoY2hpbGQpCisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxs
IHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90Lgor
ICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2Nr
LT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWVCbG9jazsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisgICAgLy8KKyAgICBUSW50ZXJt
U2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBm
YWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29uc3RhbnQgdGVybWluYWwgbm9k
ZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBjb25zdGFu
dHMKKy8vCisvLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQuCisvLwor
CitUSW50ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRVbmlvbihD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIFRTb3VyY2VM
b2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7CisgICAgbm9kZS0+c2V0TGluZShs
aW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUU291cmNlTG9jIGxpbmUpCit7
CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9w
U2VxdWVuY2UpOworCisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogY29uc3RJbnROb2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0
b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgbGluZSk7CisgICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5v
ZGUpOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Ag
bm9kZXMuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVEludGVybU5v
ZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBib2R5LCBUSW50ZXJtVHlwZWQqIHRlc3QsIFRJbnRlcm1U
eXBlZCogdGVybWluYWwsIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAg
VEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AoaW5pdCwgYm9keSwgdGVzdCwgdGVy
bWluYWwsIHRlc3RGaXJzdCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVy
biBub2RlOworfQorCisvLworLy8gQWRkIGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJ
bnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRTb3VyY2VMb2MgbGlu
ZSkKK3sKKyAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsKK30KKworVElu
dGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwg
VEludGVybVR5cGVkKiBleHByZXNzaW9uLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVy
bUJyYW5jaCogbm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJyYW5jaE9wLCBleHByZXNzaW9uKTsK
KyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisv
LyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZpbmFsIHJvb3QgaXMgcHV0IG9uIHRv
cCBieSB0aGUgcGFyc2luZworLy8gcHJvY2Vzcy4KKy8vCitib29sIFRJbnRlcm1lZGlhdGU6OnBv
c3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290LCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAg
ICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vCisgICAgLy8g
Rmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55CisgICAgLy8K
KyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KyAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCisgICAgICAg
IGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLworLy8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8KK3ZvaWQgVEludGVybWVkaWF0
ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290KQorICAgICAgICBS
ZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNZW1iZXIgZnVu
Y3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KKy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKy8vCisvLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdl
cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgc3RhdGUg
aXMgbW9kaWZpZWQuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0b3I6Om1vZGlmaWVzU3RhdGUoKSBj
b25zdAoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3Np
Z246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLworLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBv
cGVyYXRvciBpcyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKKy8vCitib29sIFRJbnRlcm1P
cGVyYXRvcjo6aXNDb25zdHJ1Y3RvcigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKy8vCisvLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2Yg
YSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCisvLyBjb21iaW5hdGlvbiBv
ZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGluIG5v
dGhpbmcgbWFrZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9T
aW5rJikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoK
KyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQt
aW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQorICAg
ICAgICBjYXNlIEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6CisgICAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNldFR5cGUo
b3BlcmFuZC0+Z2V0VHlwZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRXN0
YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMK
Ky8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4K
Ky8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMu
CisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCit7
CisgICAgaW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChyaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSA+IHNpemUpCisgICAgICAgIHNpemUgPSByaWdodC0+Z2V0Tm9taW5h
bFNpemUoKTsKKworICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOwor
CisgICAgLy8KKyAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgorICAgIC8v
CisgICAgaWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgJiYgKGxlZnQt
PmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8KKyAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhl
IHNhbWUgYXMgdGhlIGxlZnQKKyAgICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMg
ZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5
cGUoKSk7CisKKyAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJl
Y2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAg
IGdldFR5cGVQb2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKwor
ICAgIC8vCisgICAgLy8gQXJyYXkgb3BlcmF0aW9ucy4KKyAgICAvLworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkpIHsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7CisKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Cisg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNl
dCBhcnJheSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVP
cEFzc2lnbjoKKyAgICAgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAg
ICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheVNpemUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheUluZm9y
bWF0aW9uVHlwZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBBbGwgc2NhbGFycy4gIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0
IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCisgICAgLy8KKyAgICBpZiAoc2l6ZSA9PSAx
KSB7CisKKyAgICAgICAgc3dpdGNoIChvcCkgeworCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Cisg
ICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIGhhdmUg
bWF0Y2hpbmcgdHlwZXMKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNU
eXBlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbGVmdC0+aXNNYXRyaXgoKSAgICAgIT0gcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQXJl
IHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgIC8vCisgICAgaWYgKCBsZWZ0LT5nZXROb21pbmFs
U2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSB8fAorICAgICAg
ICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6
ZSgpICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gQ2FuIHRo
ZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0
b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdo
ZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5p
c01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7CisgICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1
Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBpZiAoIWxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7
CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1
Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3Io
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNp
emUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAg
ICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2
OgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0
cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+Z2V0
QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNp
c2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01h
dHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEVxdWFsOgor
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8CisgICAgICAgICAgICAgICAgbGVm
dC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAorICAgICAgICAgICAgICAgIGxl
ZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9uZSBtb3Jl
IGNoZWNrIGZvciBhc3NpZ25tZW50LiAgVGhlIFJlc3VsdGluZyB0eXBlIGhhcyB0byBtYXRjaCB0
aGUgbGVmdCBvcGVyYW5kLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNl
IEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIEVP
cEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkgIT0gbGVmdC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdChj
b25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXks
IENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIFRUeXBlTGlzdCogZmllbGRz
ID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBm
aWVsZHMtPnNpemUoKTsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBzdHJ1Y3RTaXplOyBqKyspIHsKKyAgICAgICAgaW50IHNpemUgPSAoKmZpZWxkcylb
al0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtqXS50eXBlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1
cmUoKigqZmllbGRzKVtqXS50eXBlLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlv
bkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRVbmlvbkFycmF5W2luZGV4
XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbXBhcmVTdHJ1Y3R1cmUo
Y29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5
LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sKKyAgICBpZiAobGVmdE5vZGVUeXBl
LmlzQXJyYXkoKSkgeworICAgICAgICBUVHlwZSB0eXBlV2l0aG91dEFycmF5bmVzcyA9IGxlZnRO
b2RlVHlwZTsKKyAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5lc3MuY2xlYXJBcnJheW5lc3MoKTsK
KworICAgICAgICBpbnQgYXJyYXlTaXplID0gbGVmdE5vZGVUeXBlLmdldEFycmF5U2l6ZSgpOwor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIGludCBvZmZzZXQgPSB0eXBlV2l0aG91dEFycmF5bmVzcy5nZXRPYmplY3RTaXplKCkgKiBp
OworICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0KHR5cGVXaXRob3V0QXJyYXluZXNzLCAm
cmlnaHRVbmlvbkFycmF5W29mZnNldF0sICZsZWZ0VW5pb25BcnJheVtvZmZzZXRdKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
cmV0dXJuIENvbXBhcmVTdHJ1Y3QobGVmdE5vZGVUeXBlLCByaWdodFVuaW9uQXJyYXksIGxlZnRV
bmlvbkFycmF5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gVGhlIGZvbGQgZnVu
Y3Rpb25zIHNlZSBpZiBhbiBvcGVyYXRpb24gb24gYSBjb25zdGFudCBjYW4gYmUgZG9uZSBpbiBw
bGFjZSwKKy8vIHdpdGhvdXQgZ2VuZXJhdGluZyBydW4tdGltZSBjb2RlLgorLy8KKy8vIFJldHVy
bnMgdGhlIG5vZGUgdG8ga2VlcCB1c2luZywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIG5v
ZGUgcGFzc2VkIGluLgorLy8KKworVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6
Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3RhbnROb2RlLCBUSW5mb1Npbmsm
IGluZm9TaW5rKQoreworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRVbmlvbkFy
cmF5UG9pbnRlcigpOworICAgIGludCBvYmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKTsKKworICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRpb25zCisg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29uc3RhbnROb2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0g
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgVFR5cGUgcmV0dXJuVHlwZSA9
IGdldFR5cGUoKTsKKworICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiAr
IHZlYzQoMiwzLDQsNSk7CisgICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICAgICAgcmlnaHRV
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7ICsraSkKKyAgICAgICAgICAgICAgICByaWdo
dFVuaW9uQXJyYXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uc3RhbnRO
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpIHsK
KyAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSAr
IDEuMjsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAg
b2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gMDsKKyAg
ICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBOb2RlOworCisgICAgICAgIGJvb2wgYm9v
bE5vZGVGbGFnID0gZmFsc2U7CisgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgY2Fz
ZSBFT3BBZGQ6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlb
aV0gKyByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAg
ICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEVPcE11bDoKKyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAg
ICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgc2l6
ZTsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgp
ICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRU9wRGl2OgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHplcm8gZXJy
b3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoRkxUX01BWCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIkRpdmlk
ZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJh
eVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIiwg
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rv
cjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRp
bWVzIHZlY3RvciIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAgICAgICAgICAgey8vIHN1
cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXRO
b21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
aV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICog
cmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJh
eSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9s
ZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIsIGdldExpbmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5h
bFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7
IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9u
QXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZD
b25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwor
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBv
c3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9u
QXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7
Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5
W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0
KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsK
KyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAq
cmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25z
dCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVy
blR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEp
OworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFy
cmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgh
Y29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0g
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNv
bnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNvbXBh
cmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9k
ZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAg
ICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkludmFsaWQgb3Bl
cmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25z
dGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKKyAgICAgICAgdGVtcE5vZGUt
PnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucworICAgICAg
ICAvLworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CisgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Cisg
ICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlb
aV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29u
c3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xk
ZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUg
aXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVk
IGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYXJ5
IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBnZXRMaW5lKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdl
dFR5cGUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAg
cmV0dXJuIG5ld05vZGU7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7Cit9CisKK1RJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSBwcm9t
b3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIENvbnN0YW50VW5pb24g
KnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgaW50
IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgQ29uc3RhbnRV
bmlvbiAqbGVmdFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplXTsKKworICAgIGZv
ciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworCisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRv
KSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5z
ZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRCQ29uc3Qo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUi
LCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29u
c3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNv
bnN0KHN0YXRpY19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgIT0gMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRV
bmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgIT0g
MC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJJbmNv
cnJlY3QgZGF0YSB0eXBlIGZvdW5kIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQgPSBu
b2RlLT5nZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25B
cnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigp
LCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5n
ZXRMaW5lKCkpOworfQorCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUo
Y29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpCit7CisgICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7
CisgICAgcHJhZ21hVGFibGUgPSBuZXcgVFByYWdtYVRhYmxlKCk7CisgICAgKnByYWdtYVRhYmxl
ID0gcFRhYmxlOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
Y29tcGlsZXIvTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvY29tcGlsZXIvTGluay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9MaW5rLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFRoZSB0b3AgbGV2
ZWwgYWxnb3JpdGhtcyBmb3IgbGlua2luZyBtdWx0aXBsZQorLy8gc2hhZGVycyB0b2dldGhlci4K
Ky8vCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hI
YW5kbGUuaCIKKworLy8KKy8vIEFjdHVhbCBsaW5rIG9iamVjdCwgZGVyaXZlZCBmcm9tIHRoZSBz
aGFkZXIgaGFuZGxlIGJhc2UgY2xhc3Nlcy4KKy8vCitjbGFzcyBUR2VuZXJpY0xpbmtlciA6IHB1
YmxpYyBUTGlua2VyIHsKK3B1YmxpYzoKKyAgICBUR2VuZXJpY0xpbmtlcihFU2hFeGVjdXRhYmxl
IGUsIGludCBkT3B0aW9ucykgOiBUTGlua2VyKGUpLCBkZWJ1Z09wdGlvbnMoZE9wdGlvbnMpIHsg
fQorICAgIGJvb2wgbGluayhUQ29tcGlsZXJMaXN0JiwgVFVuaWZvcm1NYXAqKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdm9pZCBnZXRBdHRyaWJ1dGVCaW5kaW5ncyhTaEJpbmRpbmdUYWJsZSBjb25z
dCAqKnQpIGNvbnN0IHsgfQorICAgIGludCBkZWJ1Z09wdGlvbnM7Cit9OworCisvLworLy8gVGhl
IGludGVybmFsIHZpZXcgb2YgYSB1bmlmb3JtL2Zsb2F0IG9iamVjdCBleGNoYW5nZWQgd2l0aCB0
aGUgZHJpdmVyLgorLy8KK2NsYXNzIFRVbmlmb3JtTGlua2VkTWFwIDogcHVibGljIFRVbmlmb3Jt
TWFwIHsKK3B1YmxpYzoKKyAgICBUVW5pZm9ybUxpbmtlZE1hcCgpIHsgfQorICAgIHZpcnR1YWwg
aW50IGdldExvY2F0aW9uKGNvbnN0IGNoYXIqIG5hbWUpIHsgcmV0dXJuIDA7IH0KK307CisKK1RT
aEhhbmRsZUJhc2UqIENvbnN0cnVjdExpbmtlcihFU2hFeGVjdXRhYmxlIGV4ZWN1dGFibGUsIGlu
dCBkZWJ1Z09wdGlvbnMpCit7CisgICAgcmV0dXJuIG5ldyBUR2VuZXJpY0xpbmtlcihleGVjdXRh
YmxlLCBkZWJ1Z09wdGlvbnMpOworfQorCit2b2lkIERlbGV0ZUxpbmtlcihUU2hIYW5kbGVCYXNl
KiBsaW5rZXIpCit7CisgICAgZGVsZXRlIGxpbmtlcjsKK30KKworVFVuaWZvcm1NYXAqIENvbnN0
cnVjdFVuaWZvcm1NYXAoKQoreworICAgIHJldHVybiBuZXcgVFVuaWZvcm1MaW5rZWRNYXAoKTsK
K30KKwordm9pZCBEZWxldGVVbmlmb3JtTWFwKFRVbmlmb3JtTWFwKiBtYXApCit7CisgICAgZGVs
ZXRlIG1hcDsKK30KKworVFNoSGFuZGxlQmFzZSogQ29uc3RydWN0QmluZGluZ3MoKQoreworICAg
IHJldHVybiAwOworfQorCit2b2lkIERlbGV0ZUJpbmRpbmdMaXN0KFRTaEhhbmRsZUJhc2UqIGJp
bmRpbmdMaXN0KQoreworICAgIGRlbGV0ZSBiaW5kaW5nTGlzdDsKK30KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL01NYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9NTWFwLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9NTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgX01NQVBfSU5DTFVERURfCisjZGVmaW5lIF9NTUFQX0lOQ0xVREVEXworCisv
LworLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1hcHBlZCBmaWxlcworLy8KKworY2xhc3MgVE1NYXAg
eworcHVibGljOgorICAgIFRNTWFwKGNvbnN0IGNoYXIqIGZpbGVOYW1lKSA6IAorICAgICAgICBm
U2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSBHZXRGaWxlU2l6
ZSgpCisgICAgICAgIGZwKE5VTEwpLAorICAgICAgICBmQnVmZigwKSAgIC8vIDAgaXMgdGhlIGVy
cm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZpZXdPZkZpbGUoKQorICAgIHsKKyAgICAgICAgaWYg
KChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjaGFyIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgZlNpemUgPSAwOworICAgICAg
ICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAgICAgIGZTaXplKys7CisgICAgICAgICAgICBj
ID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0gRU9GKQorICAgICAgICAg
ICAgZlNpemUrKzsKKyAgICAgICAgcmV3aW5kKGZwKTsKKyAgICAgICAgZkJ1ZmYgPSAoY2hhciop
bWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXplKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAg
ICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAg
ICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKKyAgICAg
ICAgfQorICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgfQorCisgICAgY2hhciogZ2V0
RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9CisgICAgaW50ICAgZ2V0U2l6ZSgpIHsgcmV0dXJuIGZT
aXplOyB9CisKKyAgICB+VE1NYXAoKSB7CisgICAgICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAg
ICAgICAgZmNsb3NlKGZwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGludCAgICAgICAg
ICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9mIGZpbGUgdG8gbWFwIGluCisgICAgRklMRSAqZnA7
CisgICAgY2hhciogICAgICAgICAgIGZCdWZmOyAgICAgIC8vIHRoZSBhY3R1YWwgZGF0YTsKK307
CisKKyNlbmRpZiAvLyBfTU1BUF9JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisKK25hbWVzcGFjZQoreworVFN0cmluZyBnZXRUeXBlTmFt
ZShjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBpZiAo
dHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJtYXQiOworICAgICAgICBv
dXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmlz
VmVjdG9yKCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgb3V0IDw8IHR5
cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgb3V0IDw8IHR5
cGUuZ2V0VHlwZU5hbWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUu
Z2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkp
OworfQorCitUU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAg
QVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBvdXQg
PDwgIlsiIDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOworICAgIHJldHVybiBUU3RyaW5n
KG91dC5jX3N0cigpKTsKK30KKworYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSog
bm9kZSkgeworICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBub2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChhZ2dyZWdhdGUtPmdl
dE9wKCkgIT0gRU9wRnVuY3Rpb24pICYmCisgICAgICAgICAgICAgICAoYWdncmVnYXRlLT5nZXRP
cCgpICE9IEVPcFNlcXVlbmNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3QgVEludGVybVNl
bGVjdGlvbiogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkpCisgICAgewor
ICAgICAgICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9mIGFuIGFzc2ln
bm1lbnQgb3BlcmF0b3IuCisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSByYXJlIGNhc2Vz
IGluIHdoaWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgorICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uLT51c2VzVGVybmFyeU9wZXJhdG9yKCk7CisgICAgfQorICAgIGVsc2UgaWYgKG5vZGUt
PmdldEFzTG9vcE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworVE91dHB1dEdMU0w6OlRPdXRw
dXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRy
dWUsIHRydWUsIHRydWUpLAorICAgICAgbU9ialNpbmsob2JqU2luayksCisgICAgICBtRGVjbGFy
aW5nVmFyaWFibGVzKGZhbHNlKQoreworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp3cml0ZVRyaXBs
ZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNv
bnN0IGNoYXIqIHBvc3RTdHIpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygp
OworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVTdHIpCisgICAgeworICAgICAgICBv
dXQgPDwgcHJlU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0ICYmIGlu
U3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2
aXNpdCA9PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBwb3N0
U3RyOworICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVWYXJpYWJsZVR5cGUoY29u
c3QgVFR5cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwor
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAvLyBU
T0RPKGFsb2twKTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMu
CisgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2
cUdsb2JhbCkpCisgICAgICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIg
IjsKKworICAgIC8vIERlY2xhcmUgdGhlIHN0cnVjdCBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFs
cmVhZHkuCisgICAgaWYgKCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgJiYKKyAg
ICAgICAgKG1EZWNsYXJlZFN0cnVjdHMuZmluZCh0eXBlLmdldFR5cGVOYW1lKCkpID09IG1EZWNs
YXJlZFN0cnVjdHMuZW5kKCkpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCB0
eXBlLmdldFR5cGVOYW1lKCkgPDwgIntcbiI7CisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBO
VUxMKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRUeXBlID0gKCpz
dHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IE5VTEwp
OworICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBm
aWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNB
cnJheSgpKQorICAgICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKCpmaWVsZFR5cGUp
OworICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICB9CisgICAgICAgIG91dCA8PCAi
fSI7CisgICAgICAgIG1EZWNsYXJlZFN0cnVjdHMuaW5zZXJ0KHR5cGUuZ2V0VHlwZU5hbWUoKSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBl
KTsKKyAgICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJz
KGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncykKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQg
PSBvYmpTaW5rKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBhcmdzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGFyZ3MuZW5kKCk7ICsraXRlcikK
KyAgICB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGFyZyA9ICgqaXRlciktPmdldEFz
U3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoYXJnICE9IE5VTEwpOworCisgICAgICAgIGNv
bnN0IFRUeXBlJiB0eXBlID0gYXJnLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFZh
bGlkYXRlIHF1YWxpZmllciBmb3IgZnVuY3Rpb24gYXJndW1lbnRzLgorICAgICAgICBpZiAoKHF1
YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSkKKyAg
ICAgICAgICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsKKworICAg
ICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7CisKKyAgICAgICAgY29uc3QgVFN0cmluZyYg
bmFtZSA9IGFyZy0+Z2V0U3ltYm9sKCk7CisgICAgICAgIGlmICghbmFtZS5lbXB0eSgpKQorICAg
ICAgICAgICAgb3V0IDw8ICIgIiA8PCBuYW1lOworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKKworICAgICAgICAvLyBQ
dXQgYSBjb21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KKyAgICAgICAgaWYg
KGl0ZXIgIT0gLS1hcmdzLmVuZCgpKQorICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgfQor
fQorCitjb25zdCBDb25zdGFudFVuaW9uKiBUT3V0cHV0R0xTTDo6d3JpdGVDb25zdGFudFVuaW9u
KGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbikKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpZiAodHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBvdXQgPDwgdHlwZS5nZXRUeXBl
TmFtZSgpIDw8ICIoIjsKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IE5VTEwpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSAoKnN0cnVjdHVyZSlbaV0u
dHlwZTsKKyAgICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAg
ICBwQ29uc3RVbmlvbiA9IHdyaXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlv
bik7CisgICAgICAgICAgICBpZiAoaSAhPSBzdHJ1Y3R1cmUtPnNpemUoKSAtIDEpIG91dCA8PCAi
LCAiOworICAgICAgICB9CisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGludCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJv
b2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7CisgICAgICAgIGlmICh3cml0ZVR5cGUpIG91dCA8PCBn
ZXRUeXBlTmFtZSh0eXBlKSA8PCAiKCI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgKytpLCArK3BDb25zdFVuaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHBD
b25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDogb3V0IDw8IHBDb25zdFVuaW9uLT5nZXRGQ29uc3QoKTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8IHBDb25zdFVuaW9u
LT5nZXRCQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKSBvdXQg
PDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgIikiOwor
ICAgIH0KKyAgICByZXR1cm4gcENvbnN0VW5pb247Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0
ID0gb2JqU2luaygpOworICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmICht
RGVjbGFyaW5nVmFyaWFibGVzICYmIG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCisgICAgICAg
IG91dCA8PCBhcnJheUJyYWNrZXRzKG5vZGUtPmdldFR5cGUoKSk7Cit9CisKK3ZvaWQgVE91dHB1
dEdMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sK
KyAgICB3cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0g
dHJ1ZTsKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAg
ICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIC8vIFJIUyBvZiBpbml0aWFsaXplIGlz
IG5vdCBiZWluZyBkZWNsYXJlZC4KKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVz
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAr
PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFz
c2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIC8vIE5vdGljZSB0aGUgZmFsbC10aHJvdWdoLgorICAgICAgICBjYXNlIEVPcE11bEFzc2ln
bjogCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAg
Y2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBO
VUxMLCAiWyIsICJdIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7CisgICAgICAgICAgICAgICAgLy8g
VE9ETyhhbG9rcCk6IEFTU0VSVAorICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRUeXBl
KCkuZ2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVj
dG9yU3dpenpsZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7CisgICAgICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZSogcmlnaHRDaGlsZCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRl
KCk7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IHJpZ2h0Q2hp
bGQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6
Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsg
KytzaXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiogZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0Tm9taW5hbFNpemUoKSA9
PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiYgZGF0YSA9IGVs
ZW1lbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF07CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChkYXRhLmdldFR5cGUoKSA9PSBFYnRJbnQpOworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGRhdGEuZ2V0SUNvbnN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMDogb3V0IDw8ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6IG91dCA8PCAieSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvdXQgPDwgInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMzogb3V0IDw8ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFkZDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
dWI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC0gIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTXVsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcERpdjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiAhPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICIoIiwgIiA8PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVx
dWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAiLCAiKSIpOyBicmVhazsKKworICAg
ICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiB8
fCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICIoIiwgIiBeXiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsQW5kOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBv
YmpTaW5rKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLSIsIE5VTEwsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIm5vdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoISIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wUG9zdEluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsIE5VTEwsICIr
KykiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsIE5VTEwsICItLSkiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoKysiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigtLSIsIE5V
TEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAg
ICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEws
ICIpIik7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImJ2ZWMyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zs
b2F0OgorICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxv
YXQoIiwgTlVMTCwgIikiKTsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAidmVjMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzMoIiwgTlVMTCwgIikiKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsIE5V
TEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252
RmxvYXRUb0ludDoKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiaW50KCIsIE5VTEwsICIpIik7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVj
NCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BSYWRpYW5zOiB3cml0ZVRyaXBsZXQodmlzaXQsICJyYWRpYW5zKCIsIE5VTEwsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRl
Z3JlZXMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29zOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjb3MoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wVGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ0YW4oIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYXNpbigi
LCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJhY29zKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46
IHdyaXRlVHJpcGxldCh2aXNpdCwgImF0YW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBFT3BFeHA6IHdyaXRlVHJpcGxldCh2aXNpdCwgImV4cCgiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2c6IHdyaXRlVHJpcGxldCh2aXNpdCwgImxvZygiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFeHAyOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJleHAyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImxvZzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU3FydDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic3FydCgiLCBOVUxMLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW52
ZXJzZXNxcnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImFicygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BTaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzaWduKCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcEZsb29yOiB3cml0ZVRyaXBsZXQodmlzaXQsICJmbG9vcigiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWlsOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJjZWlsKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZyYWN0OiB3
cml0ZVRyaXBsZXQodmlzaXQsICJmcmFjdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcExlbmd0aDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogd3JpdGVUcmlwbGV0KHZpc2l0
LCAibm9ybWFsaXplKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQW55
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJhbnkoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhbGwoIiwgTlVMTCwgIikiKTsgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkp
CisgICAgeworICAgICAgICBvdXQgPDwgIigiOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24o
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKSA/ICgiOworICAgICAgICBub2Rl
LT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKSA6ICgi
OworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgImlm
ICgiOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiKVxuIjsKKworICAgICAgICBpbmNyZW1lbnREZXB0aCgpOworICAgICAgICB2
aXNpdENvZGVCbG9jayhub2RlLT5nZXRUcnVlQmxvY2soKSk7CisKKyAgICAgICAgaWYgKG5vZGUt
PmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4i
OworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKKyAg
ICAgICAgfQorICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7
CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wU2VxdWVuY2U6IHsKKyAgICAgICAgICAg
IC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4K
KyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAg
aW5jcmVtZW50RGVwdGgoKTsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2Vx
dWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOworICAgICAgICAg
ICAgICAgICBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKKworICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVjcmVtZW50RGVwdGgoKTsKKworICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNl
cyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgorICAgICAgICAgICAgaWYgKGRlcHRo
ID4gMCkgb3V0IDw8ICJ9XG4iOworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BQcm90b3R5cGU6
IHsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIFRTdHJpbmcgcmV0dXJuVHlwZSA9
IGdldFR5cGVOYW1lKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBvdXQgPDwgcmV0dXJu
VHlwZSA8PCAiICIgPDwgbm9kZS0+Z2V0TmFtZSgpOworCisgICAgICAgICAgICBvdXQgPDwgIigi
OworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICB2aXNpdENoaWxkcmVu
ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgorICAgICAg
ICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIFRTdHJpbmcgcmV0
dXJuVHlwZSA9IGdldFR5cGVOYW1lKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBUU3Ry
aW5nIGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUo
KSk7CisgICAgICAgICAgICBvdXQgPDwgcmV0dXJuVHlwZSA8PCAiICIgPDwgZnVuY3Rpb25OYW1l
OworCisgICAgICAgICAgICBpbmNyZW1lbnREZXB0aCgpOworICAgICAgICAgICAgLy8gRnVuY3Rp
b24gZGVmaW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBvciB0d28gY2hpbGRyZW4gbm9kZXMKKyAg
ICAgICAgICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlv
biBib2R5LiBUaGUgbGF0dGVyCisgICAgICAgICAgICAvLyBpcyBub3QgcHJlc2VudCBpbiBjYXNl
IG9mIGVtcHR5IGZ1bmN0aW9uIGJvZGllcy4KKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1
ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgQVNTRVJU
KChzZXF1ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVlbmNlLnNpemUoKSA9PSAyKSk7CisgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHNlcUl0ZXIgPSBzZXF1ZW5j
ZS5iZWdpbigpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJz
LgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1zID0gKCpzZXFJdGVyKS0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMgIT0gTlVMTCk7CisgICAg
ICAgICAgICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09IEVPcFBhcmFtZXRlcnMpOworICAgICAg
ICAgICAgcGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgLy8gVHJhdmVyc2Ug
ZnVuY3Rpb24gYm9keS4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGJvZHkgPSArK3Nl
cUl0ZXIgIT0gc2VxdWVuY2UuZW5kKCkgPworICAgICAgICAgICAgICAgICgqc2VxSXRlciktPmdl
dEFzQWdncmVnYXRlKCkgOiBOVUxMOworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2soYm9keSk7
CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworIAorICAgICAgICAgICAgLy8gRnVsbHkg
cHJvY2Vzc2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgorICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBjYWxsLgorICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRTdHJpbmcgZnVuY3Rpb25OYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9k
ZS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZnVuY3Rpb25OYW1lIDw8ICIo
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFBhcmFtZXRlcnM6IHsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHBhcmFtZXRlcnMuCisg
ICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgb3V0IDw8
ICIoIjsKKyAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVl
bmNlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRy
ZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RU9wRGVjbGFyYXRpb246IHsKKyAgICAgICAgICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uLgor
ICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogdmFyaWFibGUgPSBz
ZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICAgICAgd3JpdGVWYXJp
YWJsZVR5cGUodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
IjsKKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgbURlY2xh
cmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgTlVM
TCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
InZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9v
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwg
IiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2
ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
dHlwZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2aXNp
dCwgImxlc3NUaGFuKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJncmVhdGVyVGhhbigiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJsZXNzVGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImdyZWF0ZXJUaGFuRXF1YWwoIiwg
IiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cFZlY3Rvck5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3RFcXVhbCgiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBO
VUxMLCAiLCAiLCBOVUxMKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1vZCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQ
b3c6IHdyaXRlVHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIsICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1pbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWluKCIs
ICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAibWF4KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENsYW1wOiB3
cml0ZVRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BNaXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1peCgiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzdGVwKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgInNtb290aHN0ZXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BEaXN0YW5jZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJkb3Qo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ3Jvc3M6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImNyb3NzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZh
Y2VGb3J3YXJkOiB3cml0ZVRyaXBsZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJy
ZWZsZWN0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6IHdy
aXRlVHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTXVsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXRyaXhDb21wTXVsdCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6
OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVEluZm9T
aW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAv
LyBMb29wIGhlYWRlci4KKyAgICBpZiAobm9kZS0+dGVzdEZpcnN0KCkpICAvLyBmb3IgbG9vcAor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJmb3IgKCI7CisgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIjsgIjsKKworICAgICAgICBBU1NFUlQobm9kZS0+Z2V0VGVzdCgpICE9IE5VTEwp
OworICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgIjsgIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VGVybWluYWwoKSkKKyAgICAgICAgICAg
IG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilc
biI7CisgICAgfQorICAgIGVsc2UgIC8vIGRvLXdoaWxlIGxvb3AKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZG9cbiI7CisgICAgfQorCisgICAgLy8gTG9vcCBib2R5LgorICAgIHZpc2l0Q29kZUJs
b2NrKG5vZGUtPmdldEJvZHkoKSk7CisKKyAgICAvLyBMb29wIGZvb3Rlci4KKyAgICBpZiAoIW5v
ZGUtPnRlc3RGaXJzdCgpKSAgLy8gd2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3
aGlsZSAoIjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAg
ICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpO1xu
IjsKKyAgICB9CisgICAgZGVjcmVtZW50RGVwdGgoKTsKKworICAgIC8vIE5vIG5lZWQgdG8gdmlz
aXQgY2hpbGRyZW4uIFRoZXkgaGF2ZSBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGluCisgICAgLy8g
dGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQoreworICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCA9IG9ialNpbmsoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxv
d09wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImRpc2NhcmQiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQnJlYWs6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImJyZWFrIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnRpbnVlOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjb250aW51ZSIsIE5VTEwsIE5V
TEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZXR1cm46IHdyaXRlVHJpcGxldCh2aXNpdCwg
InJldHVybiAiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRPdXRw
dXRHTFNMOjp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgeworICAgIFRJbmZvU2lu
a0Jhc2UgJm91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgIHsKKyAg
ICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRz
IG5vdCBwYXJ0IG9mIGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCisgICAgICAgIC8v
IHdpdGggc2VtaS1jb2xvbi4KKyAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQor
ICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBvdXQgPDwgIntcbn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgorICAgIH0KK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xf
T1VUUFVUR0xTTF9IXworI2RlZmluZSBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisK
KyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCitjbGFzcyBUT3V0cHV0R0xTTCA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgVE91dHB1dEdMU0woVEluZm9T
aW5rQmFzZSYgb2JqU2luayk7CisKK3Byb3RlY3RlZDoKKyAgICBUSW5mb1NpbmtCYXNlJiBvYmpT
aW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0KKyAgICB2b2lkIHdyaXRlVHJpcGxldChWaXNpdCB2
aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hhciog
cG9zdFN0cik7CisgICAgdm9pZCB3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSk7
CisgICAgdm9pZCB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2Um
IGFyZ3MpOworICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHdyaXRlQ29uc3RhbnRVbmlvbihjb25z
dCBUVHlwZSYgdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pOworCisgICAg
dmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpOwor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSog
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1V
bmFyeSogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpOworCisg
ICAgdm9pZCB2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSk7CisKK3ByaXZhdGU6Cisg
ICAgVEluZm9TaW5rQmFzZSYgbU9ialNpbms7CisgICAgYm9vbCBtRGVjbGFyaW5nVmFyaWFibGVz
OworCisgICAgLy8gU3RydWN0cyBhcmUgZGVjbGFyZWQgYXMgdGhlIHRyZWUgaXMgdHJhdmVyc2Vk
LiBUaGlzIHNldCBjb250YWlucyBhbGwKKyAgICAvLyB0aGUgc3RydWN0cyBhbHJlYWR5IGRlY2xh
cmVkLiBJdCBpcyBtYWludGFpbmVkIHNvIHRoYXQgYSBzdHJ1Y3QgaXMKKyAgICAvLyBkZWNsYXJl
ZCBvbmx5IG9uY2UuCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVj
dHM7CisgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7Cit9OworCisjZW5kaWYg
IC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL091dHB1dEhM
U0wuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE1OSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIK
KworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Np
bmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxlY3QuaCIKKworI2luY2x1ZGUgPGFs
Z29yaXRobT4KKworbmFtZXNwYWNlIHNoCit7CisvLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVy
c2lvbgorVFN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNw
cmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitPdXRwdXRI
TFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNl
cih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKK3sKKyAgICBtVW5mb2xkU2Vs
ZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtSW5zaWRlRnVuY3Rp
b24gPSBmYWxzZTsKKworICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CisgICAgbVVzZXNUZXh0
dXJlMkRfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOworICAg
IG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZSA9
IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzRGVw
dGhSYW5nZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7CisgICAgbVVzZXNQ
b2ludENvb3JkID0gZmFsc2U7CisgICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNlOworICAgIG1V
c2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbVVzZXNYb3IgPSBmYWxzZTsKKyAgICBtVXNlc01v
ZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDIgPSBmYWxzZTsKKyAgICBtVXNlc01vZDMgPSBmYWxz
ZTsKKyAgICBtVXNlc01vZDQgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMSA9IGZhbHNl
OworICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDMg
PSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxN
YXQyID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFs
TWF0NCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMyID0gZmFsc2U7CisgICAgbVVzZXNFcXVh
bFZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1
YWxJVmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjMyA9IGZhbHNlOworICAgIG1Vc2Vz
RXF1YWxJVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMiA9IGZhbHNlOworICAgIG1V
c2VzRXF1YWxCVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjNCA9IGZhbHNlOworICAg
IG1Vc2VzQXRhbjIgPSBmYWxzZTsKKworICAgIG1TY29wZURlcHRoID0gMDsKKworICAgIG1Bcmd1
bWVudEluZGV4ID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQoreworICAgIGRl
bGV0ZSBtVW5mb2xkU2VsZWN0OworfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCit7Cisg
ICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1dCB0aGUgYm9k
eSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRlcgorICAgIGhl
YWRlcigpOworCisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsK
KyAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsKK30KKworVEluZm9T
aW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCit7CisgICAgcmV0dXJuIG1Cb2R5
OworfQorCitpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3QKK3sKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5v
bWluYWxTaXplKCkgOiAxOworICAgIGludCBhcnJheVNpemUgPSB0eXBlLmlzQXJyYXkoKSA/IHR5
cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworCisgICAgcmV0dXJuIGVsZW1lbnRTaXplICogYXJyYXlT
aXplOworfQorCit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCit7CisgICAgRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
SGVhZGVyOworCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVjdERl
Y2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJhdGlv
biAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisKKyAgICBmb3Ig
KENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJlZ2lu
KCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKyspCisg
ICAgeworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKworICAgIGlmIChsYW5n
dWFnZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgeworICAgICAgICBUU3RyaW5nIHVuaWZvcm1z
OworICAgICAgICBUU3RyaW5nIHZhcnlpbmdzOworCisgICAgICAgIFRTeW1ib2xUYWJsZUxldmVs
ICpzeW1ib2xzID0gbUNvbnRleHQuc3ltYm9sVGFibGUuZ2V0R2xvYmFsTGV2ZWwoKTsKKyAgICAg
ICAgaW50IHNlbWFudGljSW5kZXggPSAwOworCisgICAgICAgIGZvciAoVFN5bWJvbFRhYmxlTGV2
ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVnaW4oKTsgbmFtZWRT
eW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wpLnNlY29uZDsKKyAg
ICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5hbWUoKTsKKworICAg
ICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBU
VmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
dmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmll
ciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVy
ID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVyZW5jZWRV
bmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBk
ZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVh
bGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWlu
Z0luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVu
Y2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5k
KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBy
b2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAi
ICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6
ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNJbmRl
eCArPSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFHbG9iYWwgfHwgcXVhbGlmaWVyID09IEV2cVRlbXBvcmFyeSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdsb2JhbHMgYXJlIGRlY2xh
cmVkIGFuZCBpbnRpYWxpemVkIGFzIGFuIGFnZ3JlZ2F0ZSBub2RlCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0YW50cyBhcmUgcmVwZWF0
ZWQgYXMgbGl0ZXJhbHMgd2hlcmUgdXNlZAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwor
ICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29s
b3JbMV0gPSB7ZmxvYXQ0KDAsIDAsIDAsIDApfTtcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xf
RnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZhbHNlO1xuIjsKKyAgICAg
ICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29y
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9XaW5k
b3c7XG4iCisgICAgICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4X0RlcHRoO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gYm9vbCBkeF9Qb2ludHNPckxpbmVzO1xuIgorICAg
ICAgICAgICAgICAgICAgICJ1bmlmb3JtIGJvb2wgZHhfRnJvbnRDQ1c7XG4iOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgb3V0IDw8ICB1bmlmb3Jt
czsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisg
ICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAg
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9q
KHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlhcykK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihz
YW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQz
IHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmVDdWJlX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICB7CisgICAgICAgIFRTdHJpbmcgdW5pZm9y
bXM7CisgICAgICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAgICAgICAgVFN0cmluZyB2YXJ5aW5n
czsKKworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJv
bFRhYmxlLmdldEdsb2JhbExldmVsKCk7CisKKyAgICAgICAgZm9yIChUU3ltYm9sVGFibGVMZXZl
bDo6Y29uc3RfaXRlcmF0b3IgbmFtZWRTeW1ib2wgPSBzeW1ib2xzLT5iZWdpbigpOyBuYW1lZFN5
bWJvbCAhPSBzeW1ib2xzLT5lbmQoKTsgbmFtZWRTeW1ib2wrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gKCpuYW1lZFN5bWJvbCkuc2Vjb25kOworICAg
ICAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHN5bWJvbC0+Z2V0TmFtZSgpOworCisgICAg
ICAgICAgICBpZiAoc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB2
YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIGlmIChxdWFsaWZpZXIg
PT0gRXZxVW5pZm9ybSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtUmVmZXJlbmNlZFVuaWZvcm1zLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFVu
aWZvcm1zLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRl
Y29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1SZWZlcmVuY2VkQXR0cmlidXRlcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJl
ZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlw
ZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBp
bml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVmFyeWluZ3MuZmlu
ZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBk
ZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFt
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xu
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFU
ZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBHbG9i
YWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
Q29uc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDb25zdGFu
dHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAgICAgICBvdXQg
PDwgIGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAic3Rh
dGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAg
IAorICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKKyAgICAgICAg
fQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7
CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAg
ICAgICAgICAidW5pZm9ybSBmbG9hdDIgZHhfSGFsZlBpeGVsU2l6ZTtcbiIKKyAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8
PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
UG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5U
X0NPT1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBH
TF9VU0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
KyAgICB7CisgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4i
CisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xu
IgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAiICAg
IGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0Rl
cHRoUmFuZ2U7XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNl
c1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBwLCBib29sIHEpXG4i
CisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gKHAgfHwg
cSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7CisgICAgICAgIG91dCA8
PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisgICAgCisgICAg
aWYgKG1Vc2VzTW9kMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIg
eCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNNb2QzKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5KVxuIgorICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxv
b3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7
CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxv
YXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNl
c0ZhY2Vmb3J3YXJkMSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgZmFjZWZvcndhcmQo
ZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAg
ICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAg
ICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAg
ICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIK
KyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQyKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4sIGZsb2F0MiBJLCBm
bG9hdDIgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1c
biIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4i
CisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIg
ICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAg
fQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJm
bG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMgTnJlZilcbiIKKyAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+
PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAg
ICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAi
ICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
RmFjZWZvcndhcmQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgZmFjZWZvcndhcmQo
ZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAg
ICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisg
ICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAg
ICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtc
biIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxNYXQyKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0MngyIG0sIGZsb2F0MngyIG4pXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbVswXVswXSA9
PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJlxuIgorICAgICAgICAgICAgICAgIiAg
ICAgICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsxXVsxXTtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsTWF0MykKKyAg
ICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDN4MyBtLCBmbG9hdDN4MyBuKVxu
IgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG1bMF1b
MF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiYgbVswXVsyXSA9PSBuWzBdWzJd
ICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09IG5bMV1bMF0gJiYg
bVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJlxuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsx
XSAmJiBtWzJdWzJdID09IG5bMl1bMl07XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNFcXVhbE1hdDQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wg
ZXF1YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0eDQgbilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0gJiYgbVswXVsxXSA9
PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJiBtWzBdWzNdID09IG5bMF1bM10gJiZc
biIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsxXVswXSAmJiBtWzFd
WzFdID09IG5bMV1bMV0gJiYgbVsxXVsyXSA9PSBuWzFdWzJdICYmIG1bMV1bM10gPT0gblsxXVsz
XSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYm
IG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl0gJiYgbVsyXVszXSA9PSBu
WzJdWzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzNdWzBdID09IG5bM11b
MF0gJiYgbVszXVsxXSA9PSBuWzNdWzFdICYmIG1bM11bMl0gPT0gblszXVsyXSAmJiBtWzNdWzNd
ID09IG5bM11bM107XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNFcXVhbFZlYzIpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQy
IHYsIGZsb2F0MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9
XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsVmVjMykKKyAgICB7CisgICAgICAgIG91
dCA8PCAiYm9vbCBlcXVhbChmbG9hdDMgdiwgZmxvYXQzIHUpXG4iCisgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55
ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBp
ZiAobVVzZXNFcXVhbFZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxv
YXQ0IHYsIGZsb2F0NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYu
dyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVz
ZXNFcXVhbElWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDIgdiwg
aW50MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsSVZlYzMpCisgICAgeworICAgICAgICBvdXQgPDwg
ImJvb2wgZXF1YWwoaW50MyB2LCBpbnQzIHUpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55ICYmIHYueiA9
PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNF
cXVhbElWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDQgdiwgaW50
NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4i
CisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbEJWZWMy
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGJvb2wyIHYsIGJvb2wyIHUpXG4i
CisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09
IHUueCAmJiB2LnkgPT0gdS55O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzRXF1YWxCVmVjMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVh
bChib29sMyB2LCBib29sMyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xu
IgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVj
NCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sNCB2LCBib29sNCB1KVxu
IgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9
PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAg
ICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMikKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgpXG4iCisgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAgJiYgeSA9PSAwKSB4
ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIGF0YW4yKHksIHgpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorfQor
Cit2b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBUU3RyaW5nIG5hbWUgPSBub2Rl
LT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29sb3IiKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUg
PT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAg
IH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKKyAgICB7CisgICAgICAg
IG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAg
ICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNG
cmFnQ29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgeworICAgICAgICBtVXNlc1BvaW50Q29v
cmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFt
ZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQorICAgIHsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9
IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9Qb2ludFNpemUiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwor
ICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICBpZiAo
cXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWZlcmVu
Y2VkVW5pZm9ybXMuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmluc2VydChuYW1lLmNfc3RyKCkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9
PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwg
cXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgeworICAgICAgICAg
ICAgbVJlZmVyZW5jZWRWYXJ5aW5ncy5pbnNlcnQobmFtZS5jX3N0cigpKTsKKyAgICAgICAgfQor
CisgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICB9Cit9CisKK2Jvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpCisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICIgPSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246
ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7ICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjog
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRyYW5zcG9zZSgiOyAgIAorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIpKSki
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01h
dHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0
ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7Cisg
ICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
b3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0VHlwZSgpLmdl
dEZpZWxkTmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgIGlmICh2
aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iOworCisg
ICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxlID0gbm9kZS0+Z2V0UmlnaHQoKS0+
Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IHN3aXp6bGUt
PmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6
aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBz
aXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpWzBdLmdldElDb25zdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGkp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBv
dXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8
ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViOiAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdjogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9w
RXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVm
dCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3Ao
KSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiEo
IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0ICpmaWVsZHMg
PSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSAoKmZpZWxkcylbaV0u
dHlwZTsKKworICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCkg
KyAiID09ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICYmICI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIikiOworCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXpl
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyICogMjogbVVz
ZXNFcXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMyAqIDM6
IG1Vc2VzRXF1YWxNYXQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQg
KiA0OiBtVXNlc0VxdWFsTWF0NCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmlzVmVjdG9yKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2lj
VHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG1Vc2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogbVVzZXNFcXVhbFZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Cisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2Vz
RXF1YWxJVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzog
bVVzZXNFcXVhbElWZWMzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBtVXNlc0VxdWFsSVZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0Vx
dWFsQlZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1V
c2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogbVVzZXNFcXVhbEJWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVh
bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZXF1YWwoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIWVxdWFs
KCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8
PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6ICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIiki
KTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3Rv
clRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgi
LCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNw
b3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOworICAg
ICAgY2FzZSBFT3BMb2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IHx8ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAg
bVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAieG9yKCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7ICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisrKSIpOyBicmVhazsKKyAgICAgIGNh
c2UgRU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIi0t
KSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29s
OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAg
IGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wzKCIsICIiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sNCgiLCAi
IiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVy
YW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVh
azsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDIoIiwg
IiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDoKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAz
OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50NCgiLCAiIiwgIikiKTsg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERl
Z3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIp
OyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29z
OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNvcygiLCAiIiwgIikiKTsgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBc2lu
OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXNpbigiLCAiIiwgIikiKTsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEF0YW46
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIiLCAiKSIpOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9nOiAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZygiLCAiIiwgIikiKTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2cyOiAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9nMigiLCAiIiwgIikiKTsgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEludmVyc2VT
cXJ0OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3FydCgiLCAiIiwgIikiKTsgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU2lnbjogICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24oIiwgIiIsICIpIik7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJmbG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDZWlsOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCAiIiwgIikiKTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlbmd0aDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgIiIsICIpIik7ICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKKy8vICAgIGNhc2UgRU9wRFBkeDogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7
CisvLyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJk
ZHkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BGd2lkdGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOyAgICBicmVhazsg
ICAgICAgIAorICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWxsOiAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIikiKTsgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlID0g
bUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BTZXF1ZW5jZToK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgICAgICBtU2Nv
cGVEZXB0aCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1TY29wZUJyYWNrZXQuc2l6ZSgpIDwg
bVNjb3BlRGVwdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2Nv
cGVCcmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2NvcGUgbGV2ZWwKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0aCAtIDFdKys7ICAgLy8gTmV3IHNj
b3BlIGF0IGV4aXN0aW5nIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsg
c2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVt
ZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVVuZm9s
ZFNlbGVjdC0+dHJhdmVyc2UoKnNpdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAi
O1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAg
ICAgICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246CisgICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAg
ICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgKHZh
cmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkgfHwgdmFyaWFibGUtPmdldFF1
YWxpZmllcigpID09IEV2cUdsb2JhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2YXJpYWJsZS0+Z2V0VHlwZSgpLCBz
Y29wZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+Z2V0QXNT
eW1ib2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSAh
PSAiIikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh2YXJp
YWJsZS0+Z2V0VHlwZSgpKSArICIgIjsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVl
bmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wtPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcnJheVN0cmluZyhz
eW1ib2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIg
PSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZpc2l0ICYmIHRoaXMtPmluVmlzaXQpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXQgPSB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCBub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYg
dGhpcy0+cG9zdFZpc2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2Rl
KCktPmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24KKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQgdG8g
Y29uc3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlz
aXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQcm90b3R5cGU6CisgICAgICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9k
ZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7
CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2Vx
dWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1
bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAg
ICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKTtcbiI7CisKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIsICIsICIi
KTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uOgorICAgICAg
ICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShu
b2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0
VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAibWFpbiIpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVl
bmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5j
ZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1
bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAx
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdp
bigpKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAg
ICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdl
dE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5h
bWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUy
RCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xf
dGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVD
dWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0
dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNhbXBsaW5nIGV4dGVu
c2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZl
cnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZUxv
ZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNhbXBs
aW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAgYWRkQ29uc3Ry
dWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAgIGFkZENvbnN0cnVj
dG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJpdmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Io
bm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJtYXQzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogCisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KG5vZGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgp
KSwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBz
dHJ1Y3RMb29rdXAobm9kZS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpICsgIl9jdG9yKCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wTGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIp
Iik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIp
Iik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgp
LT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3Vt
ZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNNb2QxID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNNb2QyID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNNb2QzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgNDogbVVzZXNNb2Q0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BBdGFuOgorICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMik7
ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCisgICAgICAgIG1Vc2VzQXRhbjIgPSB0
cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1heCgiLCAiLCAiLCAi
KSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENsYW1wOiAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVycCgiLCAi
LCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzbW9v
dGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEaXN0YW5jZTog
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIikiKTsgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENyb3Nz
OiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAiKSIpOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldFNp
emUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNlZm9yd2FyZDMgPSB0cnVlOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9yd2FyZDQgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmYWNlZm9yd2FyZCgi
LCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BS
ZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIp
OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtC
YXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkp
CisgICAgeworICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZvbGRTZWxlY3QtPmdldFRlbXBvcmFy
eUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CisgICAgewor
ICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisK
KyAgICAgICAgb3V0IDw8ICJpZigiOworCisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iOworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VC
bG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVsc2VcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50
cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgd3JpdGVDb25z
dGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7
Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSkKK3sKKyAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
Qm9keTsKKworICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgImRvXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVu
Zm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1pbmFsKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAgCisgICAgICAgIGlmIChu
b2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIjsgIjsKKworICAg
ICAgICBpZiAobm9kZS0+Z2V0VGVzdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5n
ZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7
ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisKKyAg
ICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBvdXQgPDwgIn1cbiI7CisKKyAgICBpZiAoIW5v
ZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7CisKKyAg
ICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwg
IikiOworICAgIH0KKworICAgIG91dCA8PCAiO1xuIjsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRj
aCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxsOiAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIpOyAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCAiIiwgIiIpOyAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250
aW51ZSIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJl
dHVybiAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAgICAgICBpZiAoYWdncmVnYXRlLT5n
ZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgp
LmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghaXNTaW5nbGVTdGF0ZW1lbnQoKnNp
dCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBIYW5k
bGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQz
RDkpIGJ5IHNwbGl0dGluZyB0aGVtCitib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CisKKyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKKyAgICAvLyBmb3IoaW50IGluZGV4
ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQp
CisgICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOworICAgIFRPcGVyYXRvciBjb21wYXJh
dG9yID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7CisgICAgaW50IGxpbWl0ID0gMDsK
KyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBhcnNlIGluZGV4IG5hbWUgYW5kIGlu
dGlhbCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBUSW50
ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
CisgICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOworCisgICAgICAgICAg
ICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cVRlbXBvcmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ24g
PSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYXNz
aWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhc3NpZ24tPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFudCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGNvbXBhcmF0b3IgYW5k
IGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0VGVzdCgpKQor
ICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldFRlc3QoKS0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAodGVzdCAmJiB0ZXN0LT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGluZGV4LT5nZXRJZCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSB0ZXN0
LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgICAgICAgICAgaWYgKGNv
bnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRP
cCgpOworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGluY3JlbWVudAorICAgIGlmIChp
bmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5nZXRUZXJtaW5h
bCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWluYWwgPSBub2Rl
LT5nZXRUZXJtaW5hbCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5
ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNVbmFyeU5vZGUoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKKyAgICAgICAgeworICAgICAg
ICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7CisgICAgICAgICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJtaW5hbC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgIGlmIChjb25zdGFudCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlw
ZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG9wKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRPcGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7CisKKyAgICAgICAgICAgIHN3
aXRjaCAob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3Jl
bWVudDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVPcFBvc3RE
ZWNyZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQ
cmVJbmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RU9wUHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5j
cmVtZW50ICE9IDApCisgICAgeworICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhh
bkVxdWFsKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47
CisgICAgICAgICAgICBsaW1pdCArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbXBh
cmF0b3IgPT0gRU9wTGVzc1RoYW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpdGVyYXRp
b25zID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8gaW5jcmVtZW50OworCisgICAgICAgICAgICBp
ZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1pdCAtIGluaXRpYWwgKyAxKSAlIGluY3JlbWVu
dDsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVu
dCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykgLSAxIC0gcmVtYWluZGVyOworCisgICAgICAg
ICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBlZExpbWl0
OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZvcihpbnQg
IjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOworCisgICAg
ICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAg
ICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8
PCAiICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAg
ICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRp
b25zIC09IDI1NTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29wCit9CisKK3Zv
aWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAm
cHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0
cmluZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh2aXNp
dCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJpbmc7CisgICAgfQor
ICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgaW5T
dHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNM
Ojphcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1lID0gc3ltYm9s
LT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRz
IG5hbWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJvdG90eXBlcworICAgIHsKKyAgICAgICAgbmFt
ZSA9ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBxdWFs
aWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBu
YW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlm
aWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIp
CisgICAgeworICAgICAgY2FzZSBFdnFJbjogICAgICAgICAgICByZXR1cm4gImluIjsKKyAgICAg
IGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJvdXQiOworICAgICAgY2FzZSBFdnFJbk91
dDogICAgICAgICByZXR1cm4gImlub3V0IjsKKyAgICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTog
cmV0dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiAiIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0
IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldFR5cGVOYW1lKCkgIT0gIiIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlwZS5nZXRUeXBlTmFtZSgpKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUg
aW4gcGxhY2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0ICZmaWVsZHMg
PSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3Ry
dWN0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ld
LnR5cGU7CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhm
aWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSAr
ICI7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKKwor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
ICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7
CisgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKKyAgICAgICAgICBjYXNlIDQ6
IHJldHVybiAiZmxvYXQ0eDQiOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsK
KyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxv
YXQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiAiaW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImludDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7CisgICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wiOworICAgICAg
ICAgICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiAiYm9vbDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9vbDQiOworICAg
ICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiAi
dm9pZCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyRCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAg
IHJldHVybiAic2FtcGxlckNVQkUiOworICAgICAgICB9CisgICAgfQorCisgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FCisgICAgcmV0dXJuICI8dW5rbm93biB0eXBlPiI7Cit9CisKK1RT
dHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAg
aWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisK
KyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsgIl0iOworfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAg
IFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yIChpbnQgY29tcG9uZW50ID0gMDsgY29tcG9uZW50
IDwgdHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBvbmVudCsrKQorICAgIHsKKyAgICAgICAgc3Ry
aW5nICs9ICIwIjsKKworICAgICAgICBpZiAoY29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXpl
KCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIiwgIjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7Cit9CisKK3ZvaWQgT3V0
cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcg
Jm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKK3sKKyAgICBpZiAobmFt
ZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmVz
IGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisgICAgVFR5cGUgY3RvclR5cGUgPSB0
eXBlOworICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3RvclR5cGUuY2hhbmdl
UHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLmNoYW5nZVF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOworCisgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNv
cmF0ZShuYW1lKSA6IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJh
bWV0ZXJBcnJheTsKKyAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKKworICAgIGlm
IChwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0
X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFtZXRlciAhPSBw
YXJhbWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0
b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQoKS0+Z2V0VHlw
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQor
ICAgIHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1lKSk7CisKKyAg
ICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSArPSAic3RydWN0ICIg
KyBkZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0KCk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlw
ZTsKKworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQp
ICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xu
IjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CisKKyAgICAgICAg
aWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJh
dGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0
dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9yUGFyYW1ldGVy
cy5wdXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICBUU3RyaW5nIGNvbnN0cnVjdG9yOworCisgICAgaWYgKGN0
b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gY3Rvck5h
bWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOworICAgIH0KKyAgICBlbHNlICAgLy8gQnVp
bHQtaW4gdHlwZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyhjdG9y
VHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7IHBh
cmFtZXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBjdG9yUGFyYW1l
dGVyc1twYXJhbWV0ZXJdOworCisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5cGVTdHJpbmcodHlw
ZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0cmluZyh0eXBlKTsKKworICAgICAg
ICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpIC0gMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNvbnN0cnVjdG9yICs9ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBp
ZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAi
ICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0dXJuICIgKyB0eXBlU3RyaW5nKGN0
b3JUeXBlKSArICIoIjsKKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBj
dG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKKyAgICB7CisgICAgICAgIGludCBkaW0gPSBjdG9y
VHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0g
Y3RvclBhcmFtZXRlcnNbMF07CisKKyAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8
IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4MCIgOiAiMC4wIik7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBj
b2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBh
cmFtZXRlci5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZv
ciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkgJiYg
Y29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAi
WyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09
IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAtIDEpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIs
ICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpbnQgcmVtYWluaW5nQ29tcG9uZW50cyA9IGN0b3JUeXBlLmdl
dE9iamVjdFNpemUoKTsKKyAgICAgICAgaW50IHBhcmFtZXRlckluZGV4ID0gMDsKKworICAgICAg
ICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07
CisgICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5kZXggPCAoaW50
KWN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIu
aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDb21w
b25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXIuZ2V0T2Jq
ZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6
ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW1haW5p
bmdDb21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0NvbXBvbmVudHMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNvbnN0
cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
Y29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkgfHwgcGFyYW1ldGVy
LmdldFN0cnVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZW1h
aW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCkgfHwgbW9yZVBhcmFt
ZXRlcnMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBv
bmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYgKG1vcmVQYXJhbWV0
ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtZXRlckluZGV4Kys7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21wb25lbnRzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkp
CisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIik7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIG1Db25zdHJ1
Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29uc3QgQ29uc3RhbnRVbmlvbiAqT3V0
cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBDb25z
dGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAg
ICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5cGVOYW1lKCkpICsgIl9jdG9yKCI7
CisgICAgICAgIAorICAgICAgICBjb25zdCBUVHlwZUxpc3QgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNp
emUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBl
ID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisKKyAgICAgICAgICAgIGNvbnN0VW5pb24gPSB3cml0
ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbik7CisKKyAgICAgICAgICAgIGlm
IChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91
dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBzaXplID0gdHlw
ZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7Cisg
ICAgICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBv
dXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlvbisrKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgp
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgIT0gc2l6
ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVTdHJpbmcodW5zaWdu
ZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgpICYmIGkgPCBkZXB0aExp
bWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsgc3RyKGkpOworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVkU3Ry
dWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0eXBlTmFtZSA9PSAiIikK
KyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlw
ZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExT
TDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGZvciAoaW50
IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pCisgICAgeworICAgICAg
ICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSArIHNjb3BlU3RyaW5nKGRl
cHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0b3Igc3RydWN0TmFtZSA9
IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1Y3ROYW1lcy5lbmQoKTsg
c3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnN0cnVjdE5hbWUgPT0g
c2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGVk
TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFVOUkVBQ0hBQkxF
KCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25zdHJ1Y3RvcgorCisgICAg
cmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlKGNvbnN0
IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZ2xf
IiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICJfIiArIHN0cmluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
cmluZzsKKyAgICB9Cit9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvT3V0cHV0SExT
TC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9PVVRQVVRITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhM
U0xfSF8KKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
KworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBVbmZvbGRTZWxlY3Q7CisKK2NsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQg
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KTsKKyAgICB+T3V0cHV0SExTTCgpOwor
CisgICAgdm9pZCBvdXRwdXQoKTsKKworICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0o
KTsKKworICAgIFRTdHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3Rh
dGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBz
dGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGlj
IFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3Ry
aW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBhbiB1bmRl
cnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQg
aGVhZGVyKCk7CisKKyAgICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2Rl
IHRvIHRoZSBib2R5IHN0cmVhbQorICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Cisg
ICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJv
b2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNp
dFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKKyAgICBib29sIGlzU2luZ2xlU3RhdGVt
ZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVElu
dGVybUxvb3AgKm5vZGUpOworICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29u
c3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0
cmluZyAmcG9zdFN0cmluZyk7CisgICAgVFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25zdCBUSW50
ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBl
KSBjb25zdDsKKworICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycyk7Cisg
ICAgY29uc3QgQ29uc3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0
eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsKKworICAgIFRTdHJpbmcgc2Nv
cGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpOworICAgIFRTdHJpbmcgc2NvcGVkU3Ry
dWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKKyAgICBUU3RyaW5nIHN0cnVjdExvb2t1cChj
b25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7CisKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsK
KyAgICBVbmZvbGRTZWxlY3QgKm1VbmZvbGRTZWxlY3Q7CisgICAgYm9vbCBtSW5zaWRlRnVuY3Rp
b247CisKKyAgICAvLyBPdXRwdXQgc3RyZWFtcworICAgIFRJbmZvU2lua0Jhc2UgbUhlYWRlcjsK
KyAgICBUSW5mb1NpbmtCYXNlIG1Cb2R5OworICAgIFRJbmZvU2lua0Jhc2UgbUZvb3RlcjsKKwor
ICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgc3RkOjpzZXQ8c3Rk
OjpzdHJpbmc+IG1SZWZlcmVuY2VkVmFyeWluZ3M7CisKKyAgICAvLyBQYXJhbWV0ZXJzIGRldGVy
bWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAorICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkQ7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRQcm9qOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJv
b2wgbVVzZXNEZXB0aFJhbmdlOworICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBt
VXNlc1BvaW50Q29vcmQ7CisgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVz
ZXNQb2ludFNpemU7CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAg
ICBib29sIG1Vc2VzTW9kMjsKKyAgICBib29sIG1Vc2VzTW9kMzsKKyAgICBib29sIG1Vc2VzTW9k
NDsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQxOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2Fy
ZDI7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndh
cmQ0OworICAgIGJvb2wgbVVzZXNFcXVhbE1hdDI7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0MzsK
KyAgICBib29sIG1Vc2VzRXF1YWxNYXQ0OworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7CisgICAg
Ym9vbCBtVXNlc0VxdWFsVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWM0OworICAgIGJvb2wg
bVVzZXNFcXVhbElWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWMzOworICAgIGJvb2wgbVVz
ZXNFcXVhbElWZWM0OworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMyOworICAgIGJvb2wgbVVzZXNF
cXVhbEJWZWMzOworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWM0OworICAgIGJvb2wgbVVzZXNBdGFu
MjsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENv
bnN0cnVjdG9ycyBtQ29uc3RydWN0b3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5n
PiBTdHJ1Y3ROYW1lczsKKyAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVj
bGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJhdGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PGludD4gU2NvcGVCcmFja2V0OworICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAg
IHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKKworICAgIGludCBtQXJndW1lbnRJbmRleDsgICAv
LyBGb3IgY3JlYXRpbmcgdW5pcXVlIGFyZ3VtZW50IG5hbWVzCit9OworfQorCisjZW5kaWYgICAv
LyBDT01QSUxFUl9PVVRQVVRITFNMX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NjIgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L29zaW5jbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTdWItIHZlY3RvciBhbmQgbWF0cml4IGZpZWxk
cworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxl
Y3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZvciBhIHZlY3Rvci4K
Ky8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcm
IGNvbXBTdHJpbmcsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiBmaWVsZHMsIGludCBsaW5l
KQoreworICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKKyAgICBpZiAo
ZmllbGRzLm51bSA+IDQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAgICAgIGV4eXp3LAorICAgICAgICBlcmdi
YSwKKyAgICAgICAgZXN0cHEsCisgICAgfSBmaWVsZFNldFs0XTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIHN3aXRjaCAoY29tcFN0cmluZ1tp
XSkgIHsKKyAgICAgICAgY2FzZSAneCc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0g
PSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdyJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7
CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICd5JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ2cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKKyAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
dCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3onOiAK
KyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6IAorICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdwJzoKKyAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0
cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ3cnOiAKKyAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ld
ID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6IAorICAgICAg
ICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBl
cmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdxJzoKKyAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIGlmIChm
aWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
dmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtpLTFd
KSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9u
ZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisvLworLy8gTG9vayBhdCBhICcu
JyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZv
ciBhIG1hdHJpeC4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNv
bnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiBmaWVs
ZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgIGZpZWxk
cy53aG9sZUNvbCA9IGZhbHNlOworICAgIGZpZWxkcy5yb3cgPSAtMTsKKyAgICBmaWVsZHMuY29s
ID0gLTE7CisKKyAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgeworICAgICAgICBlcnJv
cihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwg
JzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hv
bGVDb2wgPSB0cnVlOworICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsK
KyAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21w
U3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOworICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmlu
Z1swXSAtICcwJzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8CisgICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwg
JzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMucm93
ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdb
MV0gLSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVs
ZHMuY29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKy8vCisvLyBFcnJvcnMKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIFRyYWNr
IHdoZXRoZXIgZXJyb3JzIGhhdmUgb2NjdXJyZWQuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojpy
ZWNvdmVyKCkKK3sKKyAgICByZWNvdmVyZWRGcm9tRXJyb3IgPSB0cnVlOworfQorCisvLworLy8g
VXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9y
cy4KKy8vCit2b2lkIENfREVDTCBUUGFyc2VDb250ZXh0OjplcnJvcihUU291cmNlTG9jIG5MaW5l
LCBjb25zdCBjaGFyICpzelJlYXNvbiwgY29uc3QgY2hhciAqc3pUb2tlbiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzekV4dHJhSW5mb0Zvcm1hdCwgLi4u
KQoreworICAgIGNoYXIgc3pFeHRyYUluZm9bNDAwXTsKKyAgICB2YV9saXN0IG1hcmtlcjsKKwor
ICAgIHZhX3N0YXJ0KG1hcmtlciwgc3pFeHRyYUluZm9Gb3JtYXQpOworCisgICAgdnNucHJpbnRm
KHN6RXh0cmFJbmZvLCBzaXplb2Yoc3pFeHRyYUluZm8pLCBzekV4dHJhSW5mb0Zvcm1hdCwgbWFy
a2VyKTsKKworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rv
a2VuJyA6IGV4dHJhaW5mbyAqLworICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJv
cik7CisgICAgaW5mb1NpbmsuaW5mby5sb2NhdGlvbihuTGluZSk7CisgICAgaW5mb1NpbmsuaW5m
byA8PCAiJyIgPDwgc3pUb2tlbiA8PCAgIicgOiAiIDw8IHN6UmVhc29uIDw8ICIgIiA8PCBzekV4
dHJhSW5mbyA8PCAiXG4iOworCisgICAgdmFfZW5kKG1hcmtlcik7CisKKyAgICArK251bUVycm9y
czsKK30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyBhc3NpZ25t
ZW50cyBkb24ndCB3b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6YXNzaWduRXJyb3IoaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7Cisg
ICAgZXJyb3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNvbnZlcnQgZnJvbSAnJXMnIHRvICclcyci
LAorICAgICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQuY19zdHIoKSk7Cit9CisKKy8vCisvLyBT
YW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgdW5hcnkgb3BlcmF0aW9ucyBkb24ndCB3
b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6dW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25z
dCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQoreworICAgZXJyb3IobGluZSwgIiB3cm9uZyBv
cGVyYW5kIHR5cGUiLCBvcCwgCisgICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0
aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAlcyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJs
ZSBjb252ZXJzaW9uKSIsCisgICAgICAgICAgb3AsIG9wZXJhbmQuY19zdHIoKSk7Cit9CisKKy8v
CisvLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBiaW5hcnkgb3BlcmF0aW9ucyBkb24ndCB3
b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6YmluYXJ5T3BFcnJvcihpbnQgbGluZSwgY29u
c3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKK3sKKyAgICBlcnJvcihs
aW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZXMgIiwgb3AsIAorICAgICAgICAgICAgIm5vIG9wZXJh
dGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVmdC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAn
JXMnIGFuZCAiCisgICAgICAgICAgICAiYSByaWdodCBvcGVyYW5kIG9mIHR5cGUgJyVzJyAob3Ig
dGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSIsIAorICAgICAgICAgICAgb3AsIGxl
ZnQuY19zdHIoKSwgcmlnaHQuY19zdHIoKSk7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cHJl
Y2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5
cGUgdHlwZSl7CisgICAgc3dpdGNoKCB0eXBlICl7CisgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAg
ICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBs
aW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3IgKGZsb2F0KSIsICIiLCAiIiApOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7CisgICAg
ICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgKGludCkiLCAiIiwg
IiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QgYW5kIGlm
IG5lY2Vzc2FyeSwgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFs
bHkKKy8vIGFuIGwtdmFsdWUgdGhhdCBjYW4gYmUgb3BlcmF0ZWQgb24gdGhpcyB3YXkuCisvLwor
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250
ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVEludGVybVR5
cGVkKiBub2RlKQoreworICAgIFRJbnRlcm1TeW1ib2wqIHN5bU5vZGUgPSBub2RlLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBiaW5hcnlOb2RlID0gbm9kZS0+Z2V0QXNC
aW5hcnlOb2RlKCk7CisKKyAgICBpZiAoYmluYXJ5Tm9kZSkgeworICAgICAgICBib29sIGVycm9y
UmV0dXJuOworCisgICAgICAgIHN3aXRjaChiaW5hcnlOb2RlLT5nZXRPcCgpKSB7CisgICAgICAg
IGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAg
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIHJldHVybiBsVmFs
dWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgICAgICBj
YXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgICAgICBlcnJvclJldHVybiA9IGxWYWx1ZUVy
cm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisgICAgICAgICAgICBp
ZiAoIWVycm9yUmV0dXJuKSB7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldFs0XSA9IHswLDAs
MCwwfTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogcmlnaHROb2RlID0gYmluYXJ5
Tm9kZS0+Z2V0UmlnaHQoKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
Tm9kZSA9IHJpZ2h0Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IGFnZ3JOb2Rl
LT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwICE9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7
CisgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1ZV0rKzsgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxlIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBj
b21wb25lbnRzIiwgb3AsICIiLCAiIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSAKKworICAgICAgICAgICAgcmV0dXJuIGVycm9yUmV0dXJuOworICAgICAgICBkZWZh
dWx0OiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworCisgICAgY29uc3QgY2hhciogc3ltYm9sID0gMDsKKyAgICBpZiAoc3ltTm9k
ZSAhPSAwKQorICAgICAgICBzeW1ib2wgPSBzeW1Ob2RlLT5nZXRTeW1ib2woKS5jX3N0cigpOwor
CisgICAgY29uc3QgY2hhciogbWVzc2FnZSA9IDA7CisgICAgc3dpdGNoIChub2RlLT5nZXRRdWFs
aWZpZXIoKSkgeworICAgIGNhc2UgRXZxQ29uc3Q6ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5
OiAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUF0dHJpYnV0ZTogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBhdHRyaWJ1
dGUiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5nSW46
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cUlucHV0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1
dCI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcm9udEZh
Y2luZzogICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJvbnRGYWNpbmciOyBicmVhazsK
KyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Q
b2ludENvb3JkIjsgIGJyZWFrOworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/CisgICAgICAgIC8vCisgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhIHNhbXBsZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0Vm9pZDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0g
MCAmJiBzeW1Ob2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICIiLCAiIik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAg
ICAvLworICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBva2F5LCBubyBlcnJvci4KKyAgICAvLwor
ICAgIGlmIChtZXNzYWdlID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisg
ICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4gZXJyb3IgYW5kIGEgbWVzc2FnZS4KKyAg
ICAvLworICAgIGlmIChzeW1Ob2RlKQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVx
dWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9sLCBtZXNzYWdlKTsKKyAgICBlbHNlCisg
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiKCVzKSIsIG1lc3Nh
Z2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBu
ZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkK
Ky8vIGEgY29uc3RhbnQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3Iu
CisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVycm9yQ2hlY2soVEludGVybVR5cGVkKiBu
b2RlKQoreworICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQg
ZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiLCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8KKy8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8g
c2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQorLy8gYW4gaW50ZWdlci4KKy8vCisvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmludGVn
ZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCit7Cisg
ICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFs
U2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdl
dExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuLCAiIik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBz
cGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHdlIGFyZSBjdXJyZW50bHkKKy8vIGdsb2JhbGx5
IHNjb3BlZC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFs
LCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBpZiAoZ2xvYmFsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBlcnJvcihsaW5lLCAib25seSBhbGxvd2VkIGF0IGdsb2JhbCBzY29wZSIs
IHRva2VuLCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEZvciBub3csIGtl
ZXAgaXQgc2ltcGxlOiAgaWYgaXQgc3RhcnRzICJnbF8iLCBpdCdzIHJlc2VydmVkLCBpbmRlcGVu
ZGVudAorLy8gb2Ygc2NvcGUuICBFeGNlcHQsIGlmIHRoZSBzeW1ib2wgdGFibGUgaXMgYXQgdGhl
IGJ1aWx0LWluIHB1c2gtbGV2ZWwsCisvLyB3aGljaCBpcyB3aGVuIHdlIGFyZSBwYXJzaW5nIGJ1
aWx0LWlucy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8K
K2Jvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
U3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIGlmICghc3ltYm9sVGFibGUuYXRCdWlsdEluTGV2
ZWwoKSkgeworICAgICAgICBpZiAoaWRlbnRpZmllci5zdWJzdHIoMCwgMykgPT0gVFN0cmluZygi
Z2xfIikpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZXNlcnZlZCBidWlsdC1pbiBuYW1l
IiwgImdsXyIsICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgeworICAgICAg
ICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNl
cnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7CisgICAg
ICAgICAgICAvL3JldHVybiB0cnVlOworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZl
ZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIE1ha2Ugc3Vy
ZSB0aGVyZSBpcyBlbm91Z2ggZGF0YSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IgdG8gYnVp
bGQKKy8vIHNvbWV0aGluZyBvZiB0aGUgdHlwZSBvZiB0aGUgY29uc3RydWN0b3IuICBBbHNvIHJl
dHVybnMgdGhlIHR5cGUgb2YKKy8vIHRoZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGNvbnN0cnVjdGlvbi4KKy8vCitib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5v
ZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5cGUpCit7Cisg
ICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCk7CisKKyAgICBib29sIGNvbnN0cnVj
dGluZ01hdHJpeCA9IGZhbHNlOworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQ0OgorICAgICAgICBjb25zdHJ1Y3RpbmdNYXRyaXggPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiAKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAv
LyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwg
YnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCisgICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdp
bGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9v
cAorICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxs
JyB3aWxsIGJlY29tZSB0cnVlLgorICAgIC8vCisKKyAgICBpbnQgc2l6ZSA9IDA7CisgICAgYm9v
bCBjb25zdFR5cGUgPSB0cnVlOworICAgIGJvb2wgZnVsbCA9IGZhbHNlOworICAgIGJvb2wgb3Zl
ckZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFsc2U7CisgICAgYm9v
bCBhcnJheUFyZyA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0
UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgc2l6ZSArPSBmdW5jdGlvbltpXS50eXBlLT5n
ZXRPYmplY3RTaXplKCk7CisgICAgICAgIAorICAgICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4
ICYmIGZ1bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgICAgICBtYXRyaXhJbk1h
dHJpeCA9IHRydWU7CisgICAgICAgIGlmIChmdWxsKQorICAgICAgICAgICAgb3ZlckZ1bGwgPSB0
cnVlOworICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0Fy
cmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCisgICAgICAgICAgICBmdWxs
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9
IEV2cUNvbnN0KQorICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7CisgICAgICAgIGlmIChm
dW5jdGlvbltpXS50eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7
CisgICAgfQorICAgIAorICAgIGlmIChjb25zdFR5cGUpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1
YWxpZmllcihFdnFDb25zdCk7CisKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdl
dEFycmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgeworICAgICAgICBlcnJv
cihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBl
bGVtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJy
YXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmIChtYXRyaXhJbk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgIGlm
IChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgIT0gMSkgeworICAgICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3Vt
ZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKG92ZXJGdWxsKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJ0
b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0
eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAhPSBmdW5jdGlvbi5n
ZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1
Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZp
ZWxkcyIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpKSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29u
c3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgp
KSB8fAorICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlw
ZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91
Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJt
VHlwZWQqIHR5cGVkID0gbm9kZS0+Z2V0QXNUeXBlZCgpOworICAgIGlmICh0eXBlZCA9PSAwKSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZl
IGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5n
ZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEg
c2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8v
IFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJlZW4g
ZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCisvLwor
Ly8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50eXBlID09IEVi
dFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNl
ZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29s
ZWFuIGV4cHJlc3Npb24gb3Igbm90CisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCit7CisgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlw
ZS0+aXNWZWN0b3IoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9u
IGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIHRo
ZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhw
cmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJvcgor
Ly8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQ
dWJsaWNUeXBlJiBwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBU
eXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGlj
VHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9
PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRl
ZikpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CisgICAg
ICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkg
eworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlw
ZS50eXBlKSwgIiIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCit7CisgICAgaWYgKChwVHlw
ZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCisgICAgICAgIHBU
eXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
ciksICIiKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVjayhsaW5l
LCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0
ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0
IFRUeXBlJiB0eXBlKQoreworICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZp
ZXIgPT0gRXZxSW5PdXQpICYmIAorICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0g
RWJ0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBl
cnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5n
ZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIo
VFR5cGUmIHR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpIHsKKyAgICAgICAgVFR5cGVMaXN0JiBzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1
Y3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKnN0cnVjdHVyZVtp
XS50eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFu
IGFycmF5IHR5cGUncyBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBs
aW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKK3sKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAo
Y29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2Vy
IGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwor
CisgICAgaWYgKHNpemUgPD0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBt
dXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAgICAgIHNpemUgPSAxOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8v
CisvLyBTZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAg
ICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBl
KS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIGV4dGVuc2lv
bkVycm9yQ2hlY2sobGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgdHlw
ZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVy
cm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICAvLworICAgIC8vIENhbiB0aGUgdHlwZSBiZSBh
biBhcnJheT8KKyAgICAvLworICAgIGlmICh0eXBlLmFycmF5KSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29t
cGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIGFsbCB0aGUgc2VtYW50aWMgY2hl
Y2tpbmcgZm9yIGRlY2xhcmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6
ZSwgYW5kIG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisv
LyBzaXplID09IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNpemUuCisvLworLy8gUmV0dXJucyB0cnVl
IGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJy
b3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwg
VFZhcmlhYmxlKiYgdmFyaWFibGUpCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3Ig
cmVzZXJ2ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLAorICAgIC8vIGJlY2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xh
cmVkLgorICAgIC8vCisKKyAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1l
U2NvcGUgPSBmYWxzZTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlk
ZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwg
IXNhbWVTY29wZSkgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50
aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAg
ICBpZiAodHlwZS5hcnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNl
dEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUu
aW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIs
IGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAg
ICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4gMCkgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRp
Zmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5
cGUoVFR5cGUodHlwZSkpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlv
biBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgVFR5cGUq
IHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAgICAgICAgd2hpbGUg
KHQgIT0gMCkgeworICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5h
cnJheVNpemUpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZh
bHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOworICAgICAgICAgICAgdCA9IHQtPmdl
dEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5h
cnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0
eXBlLmFycmF5U2l6ZSk7CisgICAgfSAKKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBp
ZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1i
b2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwgYm9vbCB1cGRhdGVGbGFnLCBUU291cmNl
TG9jIGxpbmUpCit7CisgICAgYm9vbCBidWlsdEluID0gZmFsc2U7CisgICAgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRTeW1ib2woKSwgJmJ1aWx0SW4pOworICAg
IGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRl
bnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFy
aWFibGUqPihzeW1ib2wpOworCisgICAgdHlwZS0+c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUodmFy
aWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkpOworICAgIHZhcmlhYmxlLT51cGRhdGVB
cnJheUluZm9ybWF0aW9uVHlwZSh0eXBlKTsKKworICAgIC8vIHNwZWNpYWwgY2FzaW5nIHRvIHRl
c3QgaW5kZXggdmFsdWUgb2YgZ2xfRnJhZ0RhdGEuIElmIHRoZSBhY2Nlc3NlZCBpbmRleCBpcyA+
PSBnbF9NYXhEcmF3QnVmZmVycworICAgIC8vIGl0cyBhbiBlcnJvcgorICAgIGlmIChub2RlLT5n
ZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RhdGEiKSB7CisgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRh
ID0gc3ltYm9sVGFibGUuZmluZCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCAmYnVpbHRJbik7CisgICAg
ICAgIGlmIChmcmFnRGF0YSA9PSAwKSB7CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJnbF9NYXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIs
IGxpbmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
bnQgZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0
Q29uc3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisgICAgICAgIGlmIChmcmFnRGF0YVZhbHVl
IDw9IHNpemUpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0
YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZl
cnMiLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIHdlIGRvbnQgd2FudCB0byB1cGRhdGUgdGhlIG1heEFycmF5U2l6ZSB3aGVuIHRoaXMg
ZmxhZyBpcyBub3Qgc2V0LCB3ZSBqdXN0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIAorICAgIC8vIG5v
ZGUgdHlwZSBpbiB0aGUgY2hhaW4gb2Ygbm9kZSB0eXBlcyBzbyB0aGF0IGl0cyB1cGRhdGVkIHdo
ZW4gYSBoaWdoZXIgbWF4QXJyYXlTaXplIGNvbWVzIGluLgorICAgIGlmICghdXBkYXRlRmxhZykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZSsrOworICAgIHZhcmlhYmxlLT5nZXRU
eXBlKCkuc2V0TWF4QXJyYXlTaXplKHNpemUpOworICAgIHR5cGUtPnNldE1heEFycmF5U2l6ZShz
aXplKTsKKyAgICBUVHlwZSogdHQgPSB0eXBlOworCisgICAgd2hpbGUodHQtPmdldEFycmF5SW5m
b3JtYXRpb25UeXBlKCkgIT0gMCkgeworICAgICAgICB0dCA9IHR0LT5nZXRBcnJheUluZm9ybWF0
aW9uVHlwZSgpOworICAgICAgICB0dC0+c2V0TWF4QXJyYXlTaXplKHNpemUpOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5
cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGlu
dCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSkKK3sKKyAgICAv
LworICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgorICAgIC8vCisgICAgaWYg
KHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAgICAgIHR5cGUucXVhbGlmaWVyID0g
RXZxVGVtcG9yYXJ5OworICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlm
aWVyICdjb25zdCcgbXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vCisvLyBEbyBzZW1hbnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0
aGF0IGhhcyBubyBpbml0aWFsaXplciwKKy8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4K
Ky8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBh
cnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlJiB0eXBlKQoreworICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGlu
ZSwgaWRlbnRpZmllcikpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRWYXJpYWJsZSogdmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICBp
ZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBlcnJvcihsaW5l
LCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpw
YXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVy
IHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmllciAh
PSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0g
RXZxSW4pIHsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRo
ICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFy
YW1RdWFsaWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFDb25zdCkKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNv
bnN0UmVhZE9ubHkpOworICAgIGVsc2UKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBh
cmFtUXVhbGlmaWVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250
ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHRlbnNpb24p
Cit7ICAgICAgIAorICAgIGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNpb25dID09IEVCaFdh
cm4pIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAoImV4
dGVuc2lvbiAiICsgVFN0cmluZyhleHRlbnNpb24pICsgIiBpcyBiZWluZyB1c2VkIikuY19zdHIo
KSwgbGluZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGV4dGVuc2lv
bkJlaGF2aW9yW2V4dGVuc2lvbl0gPT0gRUJoRGlzYWJsZSkgeworICAgICAgICBlcnJvcihsaW5l
LCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLCAiaXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vCisvLyBOb24tRXJyb3JzLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCisvLworLy8gTG9vayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwg
YW5kIG1ha2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgorLy8KKy8vIFJldHVybiB0aGUgZnVuY3Rp
b24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KKy8vCitjb25zdCBURnVuY3Rpb24qIFRQ
YXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29s
ICpidWlsdEluKQoreworICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZp
bmQoY2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVpbHRJbik7CisKKyAgICBpZiAoc3ltYm9sID09
IDApIHsgICAgICAgIAorICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRl
ZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIGlmICghIHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7Cisg
ICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGNv
bnN0IFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihz
eW1ib2wpOworICAgIAorICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworLy8KKy8vIEluaXRpYWxp
emVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUg
c2V0IG9mCisvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250
ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1O
b2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAgIFRUeXBlIHR5cGUgPSBUVHlwZShwVHlw
ZSk7CisKKyAgICBpZiAodmFyaWFibGUgPT0gMCkgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJv
ckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHBUeXBlKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIGFkZCB2YXJpYWJs
ZSB0byBzeW1ib2wgdGFibGUKKyAgICAgICAgLy8KKyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5z
ZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkg
ZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKKyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRh
a2UgY2FyZSBvZiB0aGUgbWVtb3J5CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8v
IGlkZW50aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1w
b3JhcnkKKyAgICAvLworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3Jhcnkp
ICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkg
eworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBx
dWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8KKyAgICAvLyB0ZXN0IGZvciBh
bmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZx
Q29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBu
b24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21w
bGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5j
aGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBp
bml0aWFsaXplciAiLCAKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNo
YW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkg
eyAKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB2YXJpYWJsZS0+Z2V0
Q29uc3RQb2ludGVyKCk7CisKKyAgICAgICAgICAgIGlmICh0eXBlLmdldE9iamVjdFNpemUoKSA9
PSAxICYmIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAg
ICAgKnVuaW9uQXJyYXkgPSAoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpKVswXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpKSB7CisgICAgICAg
ICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVy
LT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKwor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9p
bnRlcigpOworICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJy
YXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3Qg
YXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVT
dHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdl
UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAg
IFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRU
eXBlKCksIGxpbmUpOworICAgICAgICBpbnRlcm1Ob2RlID0gaW50ZXJtZWRpYXRlLmFkZEFzc2ln
bihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGluaXRpYWxpemVyLCBsaW5lKTsKKyAgICAg
ICAgaWYgKGludGVybU5vZGUgPT0gMCkgeworICAgICAgICAgICAgYXNzaWduRXJyb3IobGluZSwg
Ij0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3RyaW5nKCksIGluaXRpYWxpemVyLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIAorICAgICAgICBpbnRlcm1Ob2RlID0gMDsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ3JOb2RlKQoreworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAg
ICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0
aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIGlm
IChhZ2dyTm9kZSkgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmNoaWxkU2VxdWVuY2VWZWN0
b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7CisgICAgICAgIGZvciAoVEludGVybVNlcXVl
bmNlOjppdGVyYXRvciBwID0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5lbmQo
KTsgcCsrKSB7CisgICAgICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGFsbENvbnN0YW50OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlz
IHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3Nl
ZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucworLy8gYW5kIGFsc28gY29udmVydCB0
aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4g
CisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAo
YWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3IuCisvLworVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUq
IHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBmbkNhbGwsIFRTb3VyY2VMb2MgbGluZSkK
K3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1B
Z2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBU
VHlwZUxpc3Q6Oml0ZXJhdG9yIG1lbWJlclR5cGVzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QpCisgICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmJlZ2lu
KCk7CisgICAgCisgICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKKyAgICBpZiAodHlwZS0+
aXNBcnJheSgpKQorICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOworCisgICAg
Ym9vbCBzaW5nbGVBcmc7CisgICAgaWYgKGFnZ3JOb2RlKSB7CisgICAgICAgIGlmIChhZ2dyTm9k
ZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAxKQorICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc2luZ2xlQXJnID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHNpbmdsZUFyZyA9
IHRydWU7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7CisgICAgaWYgKHNpbmdsZUFyZykg
eworICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0
b3IgaXMgYmVpbmcgY2FsbGVkIAorICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGlu
c2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0
aW9uIG9uY2UuCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGlu
ZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkK
KyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBl
cykudHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5n
ZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0
b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlw
ZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdO
b2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50
cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNv
bnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVj
dAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAg
Ly8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWlu
ZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29u
c3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBv
ciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFu
ZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVj
ayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4K
KyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVj
dG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNl
cXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgeworICAgICAgICBpZiAodHlw
ZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwg
JmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAg
ICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05v
ZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSkudHlwZSwg
cGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdl
dExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAobmV3Tm9kZSkgeworICAgICAg
ICAgICAgKnAgPSBuZXdOb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVk
KiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihhZ2dyTm9k
ZSwgb3AsIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRD
b25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7Cisg
ICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiBjb25zdENvbnN0cnVjdG9y
OworCisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBj
b25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBib29sIGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRD
b25zdChhZ2dyTm9kZSk7CisgICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7CisgICAgaWYgKGNh
bkJlRm9sZGVkKSB7CisgICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7CisgICAgICAgIENv
bnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVj
dFNpemUoKV07CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MSkgIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJl
ZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdl
dE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUo
YWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRP
cCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5W
YWwpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3Rv
ciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9w
IHZhbHVlCisvLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0
byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1l
dGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlr
ZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVy
dGVkIHRvIGludC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1
Y3RlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVp
bHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwg
VFNvdXJjZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05v
ZGU7CisgICAgVE9wZXJhdG9yIGJhc2ljT3A7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBjb252
ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IEVPcENvbnN0cnVjdFZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjNDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdEZsb2F0OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0
ZWQgY29uc3RydWN0aW9uIiwgIiIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKKyAgICBpZiAo
bmV3Tm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNv
bnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25z
dHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8v
IE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAh
PSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBu
ZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcg
bm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVk
aWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRo
aXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBz
dHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRo
ZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRo
ZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1
dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlw
ZXMgbWF0Y2guCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1
Y3QoVEludGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgVFNvdXJj
ZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sKKyAgICBpZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNU
eXBlZCgpLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgaWYgKHN1YnNldCkKKyAgICAgICAgICAgIHJl
dHVybiBub2RlLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBF
T3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiY29uc3RydWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20g
JyVzJyB0byAnJXMnIiwgcGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5
cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygp
KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUg
dmVjdG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJ
ZiBvbmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3
aGVyZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlzCisvLyBy
ZXR1cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBU
aGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8g
bm9kZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24g
b2YgYWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2Yg
CisvLyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCog
bm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CisKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIGlm
ICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAgIGlmICghdW5pb25BcnJheSkg
eyAgLy8gdGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSByYWlzZWQKKyAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50
VW5pb24gbm90IGluaXRpYWxpemVkIGluIGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxp
bmUpOworICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIFRoZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBz
eW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBl
bHNlLCBpdHMgYW4gZXJyb3IKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50
byB0aGUgdmVjdG9yIiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
aWVsZHMubnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUt
PmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiWyIsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRz
Lm9mZnNldHNbaV0pOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgZmllbGRz
Lm9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdEFycmF5
W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tpXV07CisKKyAgICB9IAorICAgIHR5cGVk
Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIG5vZGUtPmdl
dFR5cGUoKSwgbGluZSk7CisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8vIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5nIGFjY2Vzc2VkIGZyb20gYSBjb25zdGFu
dCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRh
YmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBhIHZlY3RvciAoZWFjaCBjb2x1bW4gb2Yg
YSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291
bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0gd2hlcmUgbSBpcyBhIGNvbnN0YW50IG1h
dHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNvbnN0YW50IG1hdHJpeCBvciBpdCBjb3VsZCBi
ZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgbWF0cml4IChzLm0xWzBd
IHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5v
ZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29u
c3RhbnRVbmlvbigpOworCisgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21p
bmFsU2l6ZSgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJtYXRyaXggZmllbGQg
c2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkg
eworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgdHlwZWROb2RlID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRl
bXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIp
OworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFu
IGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUg
dmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2Ut
dHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKKy8v
IHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVy
ZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBh
cnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3Rh
bnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkKKy8vCitU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwg
VEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybVR5cGVk
KiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUg
PSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBl
ID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3Mo
KTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRl
eCA9IDA7CisgICAgfQorCisgICAgaW50IGFycmF5RWxlbWVudFNpemUgPSBhcnJheUVsZW1lbnRU
eXBlLmdldE9iamVjdFNpemUoKTsKKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAg
ICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBD
b25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZh
bHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJv
bSB0aGUgc3ltYm9sIHRhYmxlLiAKKy8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBz
dHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRk
Q29uc3RTdHJ1Y3RGcm9tQWdncgorLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRy
ZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRp
ZmllciwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVFR5cGVM
aXN0KiBmaWVsZHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgVEludGVybVR5
cGVkICp0eXBlZE5vZGU7CisgICAgaW50IGluc3RhbmNlU2l6ZSA9IDA7CisgICAgdW5zaWduZWQg
aW50IGluZGV4ID0gMDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcENvbnN0YW50Tm9k
ZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgZm9yICggaW5kZXggPSAwOyBp
bmRleCA8IGZpZWxkcy0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmICgoKmZpZWxkcylb
aW5kZXhdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9ICgq
ZmllbGRzKVtpbmRleF0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0YW50VW5pb24qIGNv
bnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisg
ICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFy
cmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8g
dHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICB9IGVsc2Ug
eworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUi
LCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisvLworLy8gSW5pdGlhbGl6ZSBh
bGwgc3VwcG9ydGVkIGV4dGVuc2lvbnMgdG8gZGlzYWJsZQorLy8KK3ZvaWQgVFBhcnNlQ29udGV4
dDo6aW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCkKK3sKKyAgICAvLworICAgIC8vIGV4YW1w
bGUgY29kZTogZXh0ZW5zaW9uQmVoYXZpb3JbInRlc3QiXSA9IEVCaERpc2FibGU7IC8vIHdoZXJl
ICJ0ZXN0IiBpcyB0aGUgbmFtZSBvZiAKKyAgICAvLyBzdXBwb3J0ZWQgZXh0ZW5zaW9uCisgICAg
Ly8KKyAgICBleHRlbnNpb25CZWhhdmlvclsiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBF
QmhSZXF1aXJlOworICAgIGV4dGVuc2lvbkJlaGF2aW9yWyJHTF8zRExfYXJyYXlfb2JqZWN0cyJd
ID0gRUJoRGlzYWJsZTsKK30KKworT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgg
PSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5k
ZXgoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RM
U19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4Lgor
ICAgIC8vCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7
CisgICAgCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExT
X0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5k
ZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluaXRpYWxpemVH
bG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6
ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2Vk
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250
ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4o
T1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJz
ZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVh
ZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlmIChscFRocmVhZERhdGEg
PT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4
dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250
ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBU
aHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9pbnRl
ciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICAvLworICAgIC8vIE1pbmltYWwgZXJy
b3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQg
KmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19H
ZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworCisgICAgcmV0dXJuIGxwUGFy
c2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKK30KKworYm9vbCBGcmVlUGFyc2VDb250
ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFy
c2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0
aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUg
bHBQYXJzZUNvbnRleHQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VD
b250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0
SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4
KTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBfUEFS
U0VSX0hFTFBFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisK
KyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJv
bFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKworc3Ry
dWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVSb3c7CisgICAgYm9vbCB3aG9sZUNv
bDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9OworCit0eXBlZGVmIGVudW0geworICAg
IEVCaFJlcXVpcmUsCisgICAgRUJoRW5hYmxlLAorICAgIEVCaFdhcm4sCisgICAgRUJoRGlzYWJs
ZQorfSBUQmVoYXZpb3I7CisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICBUUHJhZ21hKGJvb2wgbywg
Ym9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKyAgICBib29sIG9wdGltaXplOwor
ICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdtYVRhYmxlIHByYWdtYVRhYmxlOworfTsKKworLy8K
Ky8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxlcyBuZWVkZWQgZHVyaW5nIHBhcnNp
bmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KKy8vIHRoZXkgY2FuIGJlIHBhc3NlZCB0byB0aGUgcGFy
c2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KKy8vCitzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7
CisgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRJbnRlcm1lZGlhdGUmIGlu
dGVybSwgRVNoTGFuZ3VhZ2UgTCwgVEluZm9TaW5rJiBpcykgOgorICAgICAgICAgICAgaW50ZXJt
ZWRpYXRlKGludGVybSksIHN5bWJvbFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1YWdl
KEwpLCB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAgIHJlY292ZXJlZEZyb21FcnJvcihmYWxzZSks
IG51bUVycm9ycygwKSwgbGV4QWZ0ZXJUeXBlKGZhbHNlKSwgbG9vcE5lc3RpbmdMZXZlbCgwKSwK
KyAgICAgICAgICAgIGluVHlwZVBhcmVuKGZhbHNlKSwgY29udGV4dFByYWdtYSh0cnVlLCBmYWxz
ZSkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQg
YnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBz
eW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBw
YXJzZWQKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIEVTaExhbmd1YWdlIGxhbmd1YWdl
OyAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sgb3Ig
dW5wYWNrKQorICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJz
ZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBib29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAgIC8v
IHRydWUgaWYgYSBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0byBw
YXJzZQorICAgIGludCBudW1FcnJvcnM7CisgICAgYm9vbCBsZXhBZnRlclR5cGU7ICAgICAgICAg
ICAvLyB0cnVlIGlmIHdlJ3ZlIHJlY29nbml6ZWQgYSB0eXBlLCBzbyBjYW4gb25seSBiZSBsb29r
aW5nIGZvciBhbiBpZGVudGlmaWVyCisgICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAv
LyAwIGlmIG91dHNpZGUgYWxsIGxvb3BzCisgICAgYm9vbCBpblR5cGVQYXJlbjsgICAgICAgICAg
ICAvLyB0cnVlIGlmIGluIHBhcmVudGhlc2VzLCBsb29raW5nIG9ubHkgZm9yIGFuIGlkZW50aWZp
ZXIKKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8vIHRoZSByZXR1cm4g
dHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBi
b29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlv
biBoYXMgYSByZXR1cm4KKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj4gZXh0ZW5zaW9uQmVo
YXZpb3I7CisgICAgdm9pZCBpbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKworICAgIHZv
aWQgQ19ERUNMIGVycm9yKFRTb3VyY2VMb2MsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBj
aGFyICpzelRva2VuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN6RXh0cmFJ
bmZvRm9ybWF0LCAuLi4pOworICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlY292ZXIoKTsKKworICAgIGJv
b2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiwgaW50IGxpbmUpOworICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0
cmluZyYsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiwgaW50IGxpbmUpOworICAgIHZvaWQg
YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJp
bmcgcmlnaHQpOworICAgIHZvaWQgdW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBv
cCwgVFN0cmluZyBvcGVyYW5kKTsKKyAgICB2b2lkIGJpbmFyeU9wRXJyb3IoaW50IGxpbmUsIGNv
bnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOworICAgIGJvb2wgcHJl
Y2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5
cGUgdHlwZSk7CisgICAgYm9vbCBsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBjb25zdEVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlKTsKKyAgICBib29sIGludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9k
ZSwgY29uc3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgZ2xvYmFsRXJyb3JDaGVjayhpbnQgbGlu
ZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGNvbnN0cnVjdG9y
RXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqLCBURnVuY3Rpb24mLCBUT3BlcmF0b3Is
IFRUeXBlKik7CisgICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJt
VHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7CisgICAgYm9vbCBhcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JD
aGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7CisgICAgYm9vbCBhcnJheUVycm9yQ2hl
Y2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJp
YWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIHZvaWRFcnJvckNoZWNrKGludCwgY29uc3QgVFN0
cmluZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBib29sRXJyb3JDaGVjayhpbnQs
IGNvbnN0IFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soaW50LCBjb25z
dCBUUHVibGljVHlwZSYpOworICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNv
bnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKKyAgICBib29sIHN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlw
ZSk7CisgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxp
ZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBib29sIGNvbnRhaW5zU2Ft
cGxlcihUVHlwZSYgdHlwZSk7CisgICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBs
aW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7CisgICAgYm9vbCBu
b25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHR5cGUpOworICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVy
IHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOworICAg
IGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciopOworICAgIGNv
bnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGludCBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGws
IGJvb2wgKmJ1aWx0SW4gPSAwKTsKKyAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihUU291cmNl
TG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJt
Tm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwKTsKKyAgICBib29sIGFy
ZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBjb25zdCBUVHlwZSosIFRPcGVyYXRv
ciwgVEZ1bmN0aW9uKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RD
b25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUp
OworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUq
LCBpbnQsIFRTb3VyY2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0
cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRJbnRlcm1Ob2RlKiwgVFNvdXJj
ZUxvYywgYm9vbCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2Rl
KFRWZWN0b3JGaWVsZHMmLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJt
VHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9j
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVy
bVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29u
c3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBib29s
IGFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sKiwgVFR5cGUqLCBpbnQsIGJvb2wsIFRTb3Vy
Y2VMb2MpOworICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7CisgICAgVFN0cmluZyBI
YXNoRXJyTXNnOworICAgIGJvb2wgQWZ0ZXJFT0Y7Cit9OworCitpbnQgUGFQYXJzZVN0cmluZ3Mo
Y2hhciogYXJndltdLCBpbnQgc3RyTGVuW10sIGludCBhcmdjLCBUUGFyc2VDb250ZXh0Jik7Cit2
b2lkIFBhUmVzZXJ2ZWRXb3JkKCk7CitpbnQgUGFJZGVudE9yVHlwZShUU3RyaW5nJiBpZCwgVFBh
cnNlQ29udGV4dCYsIFRTeW1ib2wqJik7CitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5lbm8s
IFRQYXJzZUNvbnRleHQmKTsKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCk7CisKK3R5cGVkZWYgVFBh
cnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7CitleHRlcm4gVFBhcnNlQ29udGV4dFBv
aW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworI2RlZmluZSBHbG9iYWxQYXJzZUNvbnRl
eHQgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKKwordHlwZWRlZiBzdHJ1Y3QgVFRocmVhZFBhcnNl
Q29udGV4dFJlYworeworICAgIFRQYXJzZUNvbnRleHQgKmxwR2xvYmFsUGFyc2VDb250ZXh0Owor
fSBUVGhyZWFkUGFyc2VDb250ZXh0OworCisjZW5kaWYgLy8gX1BBUlNFUl9IRUxQRVJfSU5DTFVE
RURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL1Bvb2xBbGxvYy5oIgorCisjaWZuZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8c3RkaW50
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5p
dGlhbGl6ZUdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworT1Nf
VExTSW5kZXggUG9vbEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK3ZvaWQgSW5pdGlh
bGl6ZUdsb2JhbFBvb2xzKCkKK3sKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIGdsb2JhbFBvb2xz
PSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5k
ZXgpKTsgICAgCisgICAgaWYgKGdsb2JhbFBvb2xzKQorICAgICAgICByZXR1cm47CisKKyAgICBU
UG9vbEFsbG9jYXRvciAqZ2xvYmFsUG9vbEFsbG9jYXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0
cnVlKTsKKworICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFk
R2xvYmFsUG9vbHMoKTsKKyAgICAKKyAgICB0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9y
ID0gZ2xvYmFsUG9vbEFsbG9jYXRvcjsKKyAgICAgICAgCisgICAgT1NfU2V0VExTVmFsdWUoUG9v
bEluZGV4LCB0aHJlYWREYXRhKTsgICAgIAorICAgIGdsb2JhbFBvb2xBbGxvY2F0b3ItPnB1c2go
KTsKK30KKwordm9pZCBGcmVlR2xvYmFsUG9vbHMoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIGFs
bG9jYXRlZCBtZW1vcnkgZm9yIHRoaXMgdGhyZWFkLgorICAgIFRUaHJlYWRHbG9iYWxQb29scyog
Z2xvYmFsUG9vbHM9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1Zh
bHVlKFBvb2xJbmRleCkpOyAgICAKKyAgICBpZiAoIWdsb2JhbFBvb2xzKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wb3BBbGwoKTsKKyAgICBkZWxldGUg
Jkdsb2JhbFBvb2xBbGxvY2F0b3I7ICAgICAgIAorICAgIGRlbGV0ZSBnbG9iYWxQb29sczsKK30K
KworYm9vbCBJbml0aWFsaXplUG9vbEluZGV4KCkKK3sKKyAgICAvLyBBbGxvY2F0ZSBhIFRMUyBp
bmRleC4KKyAgICBpZiAoKFBvb2xJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKSkgPT0gT1NfSU5W
QUxJRF9UTFNfSU5ERVgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEZyZWVQb29sSW5kZXgoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFRMUyBp
bmRleC4KKyAgICBPU19GcmVlVExTSW5kZXgoUG9vbEluZGV4KTsKK30KKworVFBvb2xBbGxvY2F0
b3ImIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKQoreworICAgIFRUaHJlYWRHbG9iYWxQb29scyog
dGhyZWFkRGF0YSA9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1Zh
bHVlKFBvb2xJbmRleCkpOworCisgICAgcmV0dXJuICp0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxs
b2NhdG9yOworfQorCit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0
b3IqIHBvb2xBbGxvY2F0b3IpCit7CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWREYXRh
ID0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbElu
ZGV4KSk7CisKKyAgICB0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0gcG9vbEFsbG9j
YXRvcjsKK30KKworLy8KKy8vIEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBv
b2xBbGxvY2F0b3IgY2xhc3MsIHdoaWNoCisvLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5o
LgorLy8KK1RQb29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRvcihib29sIGcsIGludCBncm93dGhJ
bmNyZW1lbnQsIGludCBhbGxvY2F0aW9uQWxpZ25tZW50KSA6IAorICAgIGdsb2JhbChnKSwKKyAg
ICBwYWdlU2l6ZShncm93dGhJbmNyZW1lbnQpLAorICAgIGFsaWdubWVudChhbGxvY2F0aW9uQWxp
Z25tZW50KSwKKyAgICBmcmVlTGlzdCgwKSwKKyAgICBpblVzZUxpc3QoMCksCisgICAgbnVtQ2Fs
bHMoMCkKK3sKKyAgICAvLworICAgIC8vIERvbid0IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBh
cmUgc21hbGxlciB0aGFuIGFsbCBjb21tb24KKyAgICAvLyBPUyBwYWdlIHNpemVzLgorICAgIC8v
CisgICAgaWYgKHBhZ2VTaXplIDwgNCoxMDI0KQorICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsK
KworICAgIC8vCisgICAgLy8gQSBsYXJnZSBjdXJyZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBu
ZXcgcGFnZSBuZWVkcyB0bworICAgIC8vIGJlIG9idGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4K
KyAgICAvLworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7CisKKyAgICAvLworICAg
IC8vIEFkanVzdCBhbGlnbm1lbnQgdG8gYmUgYXQgbGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAor
ICAgIC8vIHBvd2VyIG9mIDIuCisgICAgLy8KKyAgICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yo
dm9pZCopOworICAgIGFsaWdubWVudCAmPSB+KG1pbkFsaWduIC0gMSk7CisgICAgaWYgKGFsaWdu
bWVudCA8IG1pbkFsaWduKQorICAgICAgICBhbGlnbm1lbnQgPSBtaW5BbGlnbjsKKyAgICBzaXpl
X3QgYSA9IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpCisgICAgICAgIGEgPDw9IDE7Cisg
ICAgYWxpZ25tZW50ID0gYTsKKyAgICBhbGlnbm1lbnRNYXNrID0gYSAtIDE7CisKKyAgICAvLwor
ICAgIC8vIEFsaWduIGhlYWRlciBza2lwCisgICAgLy8KKyAgICBoZWFkZXJTa2lwID0gbWluQWxp
Z247CisgICAgaWYgKGhlYWRlclNraXAgPCBzaXplb2YodEhlYWRlcikpIHsKKyAgICAgICAgaGVh
ZGVyU2tpcCA9IChzaXplb2YodEhlYWRlcikgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRN
YXNrOworICAgIH0KK30KKworVFBvb2xBbGxvY2F0b3I6On5UUG9vbEFsbG9jYXRvcigpCit7Cisg
ICAgaWYgKCFnbG9iYWwpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlbiB3ZSBrbm93IHRo
YXQgdGhpcyBvYmplY3QgaXMgbm90IGJlaW5nIAorICAgICAgICAvLyBhbGxvY2F0ZWQgYWZ0ZXIg
b3RoZXIsIGdsb2JhbGx5IHNjb3BlZCBvYmplY3RzCisgICAgICAgIC8vIHRoYXQgZGVwZW5kIG9u
IGl0LiAgU28gd2UgY2FuIGRlbGV0ZSB0aGUgImluIHVzZSIgbWVtb3J5LgorICAgICAgICAvLwor
ICAgICAgICB3aGlsZSAoaW5Vc2VMaXN0KSB7CisgICAgICAgICAgICB0SGVhZGVyKiBuZXh0ID0g
aW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3Qp
OworICAgICAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vCisgICAgLy8gQWx3YXlzIGRlbGV0ZSB0aGUgZnJlZSBsaXN0IG1lbW9yeSAtIGl0IGNhbid0
IGJlIGJlaW5nCisgICAgLy8gKGNvcnJlY3RseSkgcmVmZXJlbmNlZCwgd2hldGhlciB0aGUgcG9v
bCBhbGxvY2F0b3Igd2FzCisgICAgLy8gZ2xvYmFsIG9yIG5vdC4gIFdlIHNob3VsZCBub3QgY2hl
Y2sgdGhlIGd1YXJkIGJsb2NrcworICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVh
ZHkgd2hlbiB0aGUgYmxvY2sgd2FzCisgICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4K
KyAgICAvLworICAgIHdoaWxlIChmcmVlTGlzdCkgeworICAgICAgICB0SGVhZGVyKiBuZXh0ID0g
ZnJlZUxpc3QtPm5leHRQYWdlOworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZnJlZUxpc3QpOworICAgICAgICBmcmVlTGlzdCA9IG5leHQ7CisgICAgfQorfQorCisv
LyBTdXBwb3J0IE1TVkMrKyA2LjAKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1
YXJkQmxvY2tCZWdpblZhbCA9IDB4ZmI7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9u
OjpndWFyZEJsb2NrRW5kVmFsICAgPSAweGZlOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2Nh
dGlvbjo6dXNlckRhdGFGaWxsICAgICAgID0gMHhjZDsKKworI2lmZGVmIEdVQVJEX0JMT0NLUwor
ICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKKyNlbHNl
CisgICAgY29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7CisjZW5k
aWYKKworLy8KKy8vIENoZWNrIGEgc2luZ2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKKy8vCit2
b2lkIFRBbGxvY2F0aW9uOjpjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0s
IHVuc2lnbmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IHggPSAwOyB4IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgeworICAgICAgICBpZiAo
YmxvY2tNZW1beF0gIT0gdmFsKSB7CisgICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4MF07CisK
KyAgICAgICAgICAgIC8vIFdlIGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3Mg
aGVyZSBqdXN0IHRvIGJlIGhlbHBmdWwuCisgICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywg
IlBvb2xBbGxvYzogRGFtYWdlICVzICV1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAg
ICAgICAgICAgICAgICAgICBsb2NUZXh0LCBzaXplLCBkYXRhKCkpOworICAgICAgICAgICAgYXNz
ZXJ0KDAgJiYgIlBvb2xBbGxvYzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CisgICAgICAgIH0K
KyAgICB9Cit9CisKKwordm9pZCBUUG9vbEFsbG9jYXRvcjo6cHVzaCgpCit7CisgICAgdEFsbG9j
U3RhdGUgc3RhdGUgPSB7IGN1cnJlbnRQYWdlT2Zmc2V0LCBpblVzZUxpc3QgfTsKKworICAgIHN0
YWNrLnB1c2hfYmFjayhzdGF0ZSk7CisgICAgICAgIAorICAgIC8vCisgICAgLy8gSW5kaWNhdGUg
dGhlcmUgaXMgbm8gY3VycmVudCBwYWdlIHRvIGFsbG9jYXRlIGZyb20uCisgICAgLy8KKyAgICBj
dXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOworfQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxs
b2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBv
Y2N1cnJlZCBzaW5jZSB0aGUgbGFzdCBwdXNoKCksIG9yIHNpbmNlIHRoZQorLy8gbGFzdCBwb3Ao
KSwgb3Igc2luY2UgdGhlIG9iamVjdCdzIGNyZWF0aW9uLgorLy8KKy8vIFRoZSBkZWFsbG9jYXRl
ZCBwYWdlcyBhcmUgc2F2ZWQgZm9yIGZ1dHVyZSBhbGxvY2F0aW9ucy4KKy8vCit2b2lkIFRQb29s
QWxsb2NhdG9yOjpwb3AoKQoreworICAgIGlmIChzdGFjay5zaXplKCkgPCAxKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0SGVhZGVyKiBwYWdlID0gc3RhY2suYmFjaygpLnBhZ2U7CisgICAgY3Vy
cmVudFBhZ2VPZmZzZXQgPSBzdGFjay5iYWNrKCkub2Zmc2V0OworCisgICAgd2hpbGUgKGluVXNl
TGlzdCAhPSBwYWdlKSB7CisgICAgICAgIC8vIGludm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxs
b2NhdGlvbiBsaXN0CisgICAgICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKKyAgICAgICAgCisg
ICAgICAgIHRIZWFkZXIqIG5leHRJblVzZSA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAg
IGlmIChpblVzZUxpc3QtPnBhZ2VDb3VudCA+IDEpCisgICAgICAgICAgICBkZWxldGUgW10gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpblVzZUxpc3QtPm5leHRQYWdlID0gZnJlZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlz
dCA9IGluVXNlTGlzdDsKKyAgICAgICAgfQorICAgICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7
CisgICAgfQorCisgICAgc3RhY2sucG9wX2JhY2soKTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1k
ZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhh
dmUgb2NjdXJyZWQuCisvLwordm9pZCBUUG9vbEFsbG9jYXRvcjo6cG9wQWxsKCkKK3sKKyAgICB3
aGlsZSAoc3RhY2suc2l6ZSgpID4gMCkKKyAgICAgICAgcG9wKCk7Cit9CisKK3ZvaWQqIFRQb29s
QWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3QgbnVtQnl0ZXMpCit7CisgICAgLy8gSWYgd2UgYXJl
IHVzaW5nIGd1YXJkIGJsb2NrcywgYWxsIGFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQgYnkKKyAg
ICAvLyB0aGVtOiBbZ3VhcmRibG9ja11bYWxsb2NhdGlvbl1bZ3VhcmRibG9ja10uICBudW1CeXRl
cyBpcyBob3cKKyAgICAvLyBtdWNoIG1lbW9yeSB0aGUgY2FsbGVyIGFza2VkIGZvci4gIGFsbG9j
YXRpb25TaXplIGlzIHRoZSB0b3RhbAorICAgIC8vIHNpemUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nr
cy4gIEluIHJlbGVhc2UgYnVpbGQsCisgICAgLy8gZ3VhcmRCbG9ja1NpemU9MCBhbmQgdGhpcyBh
bGwgZ2V0cyBvcHRpbWl6ZWQgYXdheS4KKyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBUQWxs
b2NhdGlvbjo6YWxsb2NhdGlvblNpemUobnVtQnl0ZXMpOworICAgIAorICAgIC8vCisgICAgLy8g
SnVzdCBrZWVwIHNvbWUgaW50ZXJlc3Rpbmcgc3RhdGlzdGljcy4KKyAgICAvLworICAgICsrbnVt
Q2FsbHM7CisgICAgdG90YWxCeXRlcyArPSBudW1CeXRlczsKKworICAgIC8vCisgICAgLy8gRG8g
dGhlIGFsbG9jYXRpb24sIG1vc3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2llbmN5Lgor
ICAgIC8vIFRoaXMgc3RlcCBjb3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRpbWUuCisg
ICAgLy8KKyAgICBpZiAoY3VycmVudFBhZ2VPZmZzZXQgKyBhbGxvY2F0aW9uU2l6ZSA8PSBwYWdl
U2l6ZSkgeworICAgICAgICAvLworICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZyb20gY3Vy
cmVudFBhZ2VPZmZzZXQuCisgICAgICAgIC8vCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG1lbW9y
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgY3VycmVu
dFBhZ2VPZmZzZXQ7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRpb25TaXpl
OworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCArIGFsaWdu
bWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVB
bGxvY2F0aW9uKGluVXNlTGlzdCwgbWVtb3J5LCBudW1CeXRlcyk7CisgICAgfQorCisgICAgaWYg
KGFsbG9jYXRpb25TaXplICsgaGVhZGVyU2tpcCA+IHBhZ2VTaXplKSB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIERvIGEgbXVsdGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRoZXNlIHdp
dGggdGhlIG90aGVycy4KKyAgICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQgYWxsb2Nh
dGluZyBhbmQgZnJlZS1pbmcgbXVsdGlwbGUgcGFnZXMuCisgICAgICAgIC8vCisgICAgICAgIHNp
emVfdCBudW1CeXRlc1RvQWxsb2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7CisgICAg
ICAgIHRIZWFkZXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNo
YXJbbnVtQnl0ZXNUb0FsbG9jXSk7CisgICAgICAgIGlmIChtZW1vcnkgPT0gMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRvIGluaXRpYWxp
emUgaGVhZGVyCisgICAgICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAobnVtQnl0
ZXNUb0FsbG9jICsgcGFnZVNpemUgLSAxKSAvIHBhZ2VTaXplKTsKKyAgICAgICAgaW5Vc2VMaXN0
ID0gbWVtb3J5OworCisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7ICAvLyBt
YWtlIG5leHQgYWxsb2NhdGlvbiBjb21lIGZyb20gYSBuZXcgcGFnZQorCisgICAgICAgIC8vIE5v
IGd1YXJkIGJsb2NrcyBmb3IgbXVsdGktcGFnZSBhbGxvY2F0aW9ucyAoeWV0KQorICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1lbW9yeSkgKyBoZWFkZXJTa2lwKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5lZWQgYSBz
aW1wbGUgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgIC8vCisgICAgdEhlYWRlciogbWVtb3J5
OworICAgIGlmIChmcmVlTGlzdCkgeworICAgICAgICBtZW1vcnkgPSBmcmVlTGlzdDsKKyAgICAg
ICAgZnJlZUxpc3QgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltwYWdlU2l6ZV0p
OworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRlcgorICAgIG5l
dyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAxKTsKKyAgICBpblVzZUxpc3QgPSBtZW1vcnk7
CisgICAgCisgICAgdW5zaWduZWQgY2hhciogcmV0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyICo+KGluVXNlTGlzdCkgKyBoZWFkZXJTa2lwOworICAgIGN1cnJlbnRQYWdlT2Zmc2V0
ID0gKGhlYWRlclNraXAgKyBhbGxvY2F0aW9uU2l6ZSArIGFsaWdubWVudE1hc2spICYgfmFsaWdu
bWVudE1hc2s7CisKKyAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBy
ZXQsIG51bUJ5dGVzKTsKK30KKworCisvLworLy8gQ2hlY2sgYWxsIGFsbG9jYXRpb25zIGluIGEg
bGlzdCBmb3IgZGFtYWdlIGJ5IGNhbGxpbmcgY2hlY2sgb24gZWFjaC4KKy8vCit2b2lkIFRBbGxv
Y2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBUQWxsb2Nh
dGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5wcmV2QWxsb2Mp
CisgICAgICAgIGFsbG9jLT5jaGVjaygpOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTYgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgX1BPT0xBTExPQ19JTkNMVURFRF8KKyNkZWZpbmUgX1BPT0xBTExPQ19J
TkNMVURFRF8KKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBHVUFSRF9CTE9DS1MgIC8vIGRlZmlu
ZSB0byBlbmFibGUgZ3VhcmQgYmxvY2sgc2FuaXR5IGNoZWNraW5nCisjZW5kaWYKKworLy8KKy8v
IFRoaXMgaGVhZGVyIGRlZmluZXMgYW4gYWxsb2NhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gZWZm
aWNpZW50bHkKKy8vIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIHJlcXVlc3RzIGZv
ciBoZWFwIG1lbW9yeSwgd2l0aCB0aGUgCisvLyBpbnRlbnRpb24gdGhhdCB0aGV5IGFyZSBub3Qg
aW5kaXZpZHVhbGx5IGRlYWxsb2NhdGVkLCBidXQgcmF0aGVyIAorLy8gY29sbGVjdGl2ZWx5IGRl
YWxsb2NhdGVkIGF0IG9uZSB0aW1lLgorLy8KKy8vIFRoaXMgc2ltdWx0YW5lb3VzbHkKKy8vCisv
LyAqIE1ha2VzIGVhY2ggaW5kaXZpZHVhbCBhbGxvY2F0aW9uIG11Y2ggbW9yZSBlZmZpY2llbnQ7
IHRoZQorLy8gICAgIHR5cGljYWwgYWxsb2NhdGlvbiBpcyB0cml2aWFsLgorLy8gKiBDb21wbGV0
ZWx5IGF2b2lkcyB0aGUgY29zdCBvZiBkb2luZyBpbmRpdmlkdWFsIGRlYWxsb2NhdGlvbi4KKy8v
ICogU2F2ZXMgdGhlIHRyb3VibGUgb2YgdHJhY2tpbmcgZG93biBhbmQgcGx1Z2dpbmcgYSBsYXJn
ZSBjbGFzcyBvZiBsZWFrcy4KKy8vCisvLyBJbmRpdmlkdWFsIGNsYXNzZXMgY2FuIHVzZSB0aGlz
IGFsbG9jYXRvciBieSBzdXBwbHlpbmcgdGhlaXIgb3duCisvLyBuZXcgYW5kIGRlbGV0ZSBtZXRo
b2RzLgorLy8KKy8vIFNUTCBjb250YWluZXJzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgdXNp
bmcgdGhlIHBvb2xfYWxsb2NhdG9yCisvLyBjbGFzcyBhcyB0aGUgYWxsb2NhdG9yIChzZWNvbmQp
IHRlbXBsYXRlIGFyZ3VtZW50LgorLy8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJk
IGJsb2Nrcywgd2UgbXVzdCB0cmFjayBlYWNoIGluZGl2dWFsCisvLyBhbGxvY2F0aW9uLiAgSWYg
d2UgYXJlbid0IHVzaW5nIGd1YXJkIGJsb2NrcywgdGhlc2UKKy8vIG5ldmVyIGdldCBpbnN0YW50
aWF0ZWQsIHNvIHdvbid0IGhhdmUgYW55IGltcGFjdC4KKy8vIAorCitjbGFzcyBUQWxsb2NhdGlv
biB7CitwdWJsaWM6CisgICAgVEFsbG9jYXRpb24oc2l6ZV90IHNpemUsIHVuc2lnbmVkIGNoYXIq
IG1lbSwgVEFsbG9jYXRpb24qIHByZXYgPSAwKSA6CisgICAgICAgIHNpemUoc2l6ZSksIG1lbSht
ZW0pLCBwcmV2QWxsb2MocHJldikgeworICAgICAgICAvLyBBbGxvY2F0aW9ucyBhcmUgYnJhY2tl
dGVkOgorICAgICAgICAvLyAgICBbYWxsb2NhdGlvbkhlYWRlcl1baW5pdGlhbEd1YXJkQmxvY2td
W3VzZXJEYXRhXVtmaW5hbEd1YXJkQmxvY2tdCisgICAgICAgIC8vIFRoaXMgd291bGQgYmUgY2xl
YW5lciB3aXRoIGlmIChndWFyZEJsb2NrU2l6ZSkuLi4sIGJ1dCB0aGF0CisgICAgICAgIC8vIG1h
a2VzIHRoZSBjb21waWxlciBwcmludCB3YXJuaW5ncyBhYm91dCAwIGxlbmd0aCBtZW1zZXRzLAor
ICAgICAgICAvLyBldmVuIHdpdGggdGhlIGlmKCkgcHJvdGVjdGluZyB0aGVtLgorI2lmZGVmIEdV
QVJEX0JMT0NLUworICAgICAgICBtZW1zZXQocHJlR3VhcmQoKSwgZ3VhcmRCbG9ja0JlZ2luVmFs
LCBndWFyZEJsb2NrU2l6ZSk7CisgICAgICAgIG1lbXNldChkYXRhKCksICAgICAgdXNlckRhdGFG
aWxsLCAgICAgICBzaXplKTsKKyAgICAgICAgbWVtc2V0KHBvc3RHdWFyZCgpLCBndWFyZEJsb2Nr
RW5kVmFsLCAgIGd1YXJkQmxvY2tTaXplKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgY2hl
Y2soKSBjb25zdCB7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhwcmVHdWFyZCgpLCAgZ3VhcmRC
bG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhwb3N0R3Vh
cmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICAiYWZ0ZXIiKTsKKyAgICB9CisKKyAgICB2b2lkIGNo
ZWNrQWxsb2NMaXN0KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gdG90YWwgc2l6ZSBuZWVkZWQg
dG8gYWNjb21vZGF0ZSB1c2VyIGJ1ZmZlciBvZiAnc2l6ZScsCisgICAgLy8gcGx1cyBvdXIgdHJh
Y2tpbmcgZGF0YS4KKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXpl
X3Qgc2l6ZSkgeworICAgICAgICByZXR1cm4gc2l6ZSArIDIgKiBndWFyZEJsb2NrU2l6ZSArIGhl
YWRlclNpemUoKTsKKyAgICB9CisKKyAgICAvLyBPZmZzZXQgZnJvbSBzdXJyb3VuZGluZyBidWZm
ZXIgdG8gZ2V0IHRvIHVzZXIgZGF0YSBidWZmZXIuCisgICAgaW5saW5lIHN0YXRpYyB1bnNpZ25l
ZCBjaGFyKiBvZmZzZXRBbGxvY2F0aW9uKHVuc2lnbmVkIGNoYXIqIG0pIHsKKyAgICAgICAgcmV0
dXJuIG0gKyBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2ln
bmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdDsKKworICAgIC8vIEZpbmQg
b2Zmc2V0cyB0byBwcmUgYW5kIHBvc3QgZ3VhcmQgYmxvY2tzLCBhbmQgdXNlciBkYXRhIGJ1ZmZl
cgorICAgIHVuc2lnbmVkIGNoYXIqIHByZUd1YXJkKCkgIGNvbnN0IHsgcmV0dXJuIG1lbSArIGhl
YWRlclNpemUoKTsgfQorICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSAgICAgIGNvbnN0IHsgcmV0
dXJuIHByZUd1YXJkKCkgKyBndWFyZEJsb2NrU2l6ZTsgfQorICAgIHVuc2lnbmVkIGNoYXIqIHBv
c3RHdWFyZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemU7IH0KKworICAgIHNpemVfdCBz
aXplOyAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHVzZXIgZGF0YSBhcmVhCisgICAg
dW5zaWduZWQgY2hhciogbWVtOyAgICAgICAgICAgLy8gYmVnaW5uaW5nIG9mIG91ciBhbGxvY2F0
aW9uIChwdHMgdG8gaGVhZGVyKQorICAgIFRBbGxvY2F0aW9uKiBwcmV2QWxsb2M7ICAgICAgIC8v
IHByaW9yIGFsbG9jYXRpb24gaW4gdGhlIGNoYWluCisKKyAgICAvLyBTdXBwb3J0IE1TVkMrKyA2
LjAKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2NrQmVnaW5WYWw7Cisg
ICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0VuZFZhbDsKKyAgICBjb25z
dCBzdGF0aWMgdW5zaWduZWQgY2hhciB1c2VyRGF0YUZpbGw7CisKKyAgICBjb25zdCBzdGF0aWMg
c2l6ZV90IGd1YXJkQmxvY2tTaXplOworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgIGlubGluZSBz
dGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzaXplb2YoVEFsbG9jYXRpb24pOyB9
CisjZWxzZQorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiAw
OyB9CisjZW5kaWYKK307CisKKy8vCisvLyBUaGVyZSBhcmUgc2V2ZXJhbCBzdGFja3MuICBPbmUg
aXMgdG8gdHJhY2sgdGhlIHB1c2hpbmcgYW5kIHBvcHBpbmcKKy8vIG9mIHRoZSB1c2VyLCBhbmQg
bm90IHlldCBpbXBsZW1lbnRlZC4gIFRoZSBvdGhlcnMgYXJlIHNpbXBseSBhIAorLy8gcmVwb3Np
dG9yaWVzIG9mIGZyZWUgcGFnZXMgb3IgdXNlZCBwYWdlcy4KKy8vCisvLyBQYWdlIHN0YWNrcyBh
cmUgbGlua2VkIHRvZ2V0aGVyIHdpdGggYSBzaW1wbGUgaGVhZGVyIGF0IHRoZSBiZWdpbm5pbmcK
Ky8vIG9mIGVhY2ggYWxsb2NhdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSB1bmRlcmx5aW5nIE9TLiAg
TXVsdGktcGFnZSBhbGxvY2F0aW9ucworLy8gYXJlIHJldHVybmVkIHRvIHRoZSBPUy4gIEluZGl2
aWR1YWwgcGFnZSBhbGxvY2F0aW9ucyBhcmUga2VwdCBmb3IgZnV0dXJlCisvLyByZS11c2UuCisv
LworLy8gVGhlICJwYWdlIHNpemUiIHVzZWQgaXMgbm90LCBub3IgbXVzdCBpdCBtYXRjaCwgdGhl
IHVuZGVybHlpbmcgT1MKKy8vIHBhZ2Ugc2l6ZS4gIEJ1dCwgaGF2aW5nIGl0IGJlIGFib3V0IHRo
YXQgc2l6ZSBvciBlcXVhbCB0byBhIHNldCBvZiAKKy8vIHBhZ2VzIGlzIGxpa2VseSBtb3N0IG9w
dGltYWwuCisvLworY2xhc3MgVFBvb2xBbGxvY2F0b3IgeworcHVibGljOgorICAgIFRQb29sQWxs
b2NhdG9yKGJvb2wgZ2xvYmFsID0gZmFsc2UsIGludCBncm93dGhJbmNyZW1lbnQgPSA4KjEwMjQs
IGludCBhbGxvY2F0aW9uQWxpZ25tZW50ID0gMTYpOworCisgICAgLy8KKyAgICAvLyBEb24ndCBj
YWxsIHRoZSBkZXN0cnVjdG9yIGp1c3QgdG8gZnJlZSB1cCB0aGUgbWVtb3J5LCBjYWxsIHBvcCgp
CisgICAgLy8KKyAgICB+VFBvb2xBbGxvY2F0b3IoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBw
dXNoKCkgdG8gZXN0YWJsaXNoIGEgbmV3IHBsYWNlIHRvIHBvcCBtZW1vcnkgdG9vLiAgRG9lcyBu
b3QKKyAgICAvLyBoYXZlIHRvIGJlIGNhbGxlZCB0byBnZXQgdGhpbmdzIHN0YXJ0ZWQuCisgICAg
Ly8KKyAgICB2b2lkIHB1c2goKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3AoKSB0byBmcmVl
IGFsbCBtZW1vcnkgYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcHVzaCgpLAorICAg
IC8vIG9yIGlmIG5vIGxhc3QgY2FsbCB0byBwdXNoLCBmcmVlcyBhbGwgbWVtb3J5IHNpbmNlIGZp
cnN0IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICB2b2lkIHBvcCgpOworCisgICAgLy8KKyAgICAv
LyBDYWxsIHBvcEFsbCgpIHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQuCisgICAgLy8KKyAg
ICB2b2lkIHBvcEFsbCgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIGFsbG9jYXRlKCkgdG8gYWN0
dWFsbHkgYWNxdWlyZSBtZW1vcnkuICBSZXR1cm5zIDAgaWYgbm8gbWVtb3J5CisgICAgLy8gYXZh
aWxhYmxlLCBvdGhlcndpc2UgYSBwcm9wZXJseSBhbGlnbmVkIHBvaW50ZXIgdG8gJ251bUJ5dGVz
JyBvZiBtZW1vcnkuCisgICAgLy8KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QgbnVtQnl0ZXMp
OworCisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBubyBkZWFsbG9jYXRlLiAgVGhlIHBvaW50IG9m
IHRoaXMgY2xhc3MgaXMgdGhhdAorICAgIC8vIGRlYWxsb2NhdGlvbiBjYW4gYmUgc2tpcHBlZCBi
eSB0aGUgdXNlciBvZiBpdCwgYXMgdGhlIG1vZGVsCisgICAgLy8gb2YgdXNlIGlzIHRvIHNpbXVs
dGFuZW91c2x5IGRlYWxsb2NhdGUgZXZlcnl0aGluZyBhdCBvbmNlCisgICAgLy8gYnkgY2FsbGlu
ZyBwb3AoKSwgYW5kIHRvIG5vdCBoYXZlIHRvIHNvbHZlIG1lbW9yeSBsZWFrIHByb2JsZW1zLgor
ICAgIC8vCisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgc3RydWN0IHRIZWFkZXI7CisgICAgCisg
ICAgc3RydWN0IHRIZWFkZXIgeworICAgICAgICB0SGVhZGVyKHRIZWFkZXIqIG5leHRQYWdlLCBz
aXplX3QgcGFnZUNvdW50KSA6CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgICAgICBsYXN0
QWxsb2NhdGlvbigwKSwKKyNlbmRpZgorICAgICAgICAgICAgbmV4dFBhZ2UobmV4dFBhZ2UpLAor
ICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkgeyB9CisKKyAgICAgICAgfnRIZWFkZXIo
KSB7CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgICAgICBpZiAobGFzdEFsbG9jYXRpb24p
CisgICAgICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24tPmNoZWNrQWxsb2NMaXN0KCk7CisjZW5k
aWYKKyAgICAgICAgfQorCisgICAgICAgIHRIZWFkZXIqIG5leHRQYWdlOworICAgICAgICBzaXpl
X3QgcGFnZUNvdW50OworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBUQWxsb2NhdGlvbiog
bGFzdEFsbG9jYXRpb247CisjZW5kaWYKKyAgICB9OworCisgICAgc3RydWN0IHRBbGxvY1N0YXRl
IHsKKyAgICAgICAgc2l6ZV90IG9mZnNldDsKKyAgICAgICAgdEhlYWRlciogcGFnZTsKKyAgICB9
OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dEFsbG9jU3RhdGU+IHRBbGxvY1N0YWNrOworCisg
ICAgLy8gVHJhY2sgYWxsb2NhdGlvbnMgaWYgYW5kIG9ubHkgaWYgd2UncmUgdXNpbmcgZ3VhcmQg
YmxvY2tzCisgICAgdm9pZCogaW5pdGlhbGl6ZUFsbG9jYXRpb24odEhlYWRlciogYmxvY2ssIHVu
c2lnbmVkIGNoYXIqIG1lbW9yeSwgc2l6ZV90IG51bUJ5dGVzKSB7CisjaWZkZWYgR1VBUkRfQkxP
Q0tTCisgICAgICAgIG5ldyhtZW1vcnkpIFRBbGxvY2F0aW9uKG51bUJ5dGVzLCBtZW1vcnksIGJs
b2NrLT5sYXN0QWxsb2NhdGlvbik7CisgICAgICAgIGJsb2NrLT5sYXN0QWxsb2NhdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VEFsbG9jYXRpb24qPihtZW1vcnkpOworI2VuZGlmCisgICAgICAgIC8v
IFRoaXMgaXMgb3B0aW1pemVkIGVudGlyZWx5IGF3YXkgaWYgR1VBUkRfQkxPQ0tTIGlzIG5vdCBk
ZWZpbmVkLgorICAgICAgICByZXR1cm4gVEFsbG9jYXRpb246Om9mZnNldEFsbG9jYXRpb24obWVt
b3J5KTsKKyAgICB9CisKKyAgICBib29sIGdsb2JhbDsgICAgICAgICAgICAvLyBzaG91bGQgYmUg
dHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBnbG9iYWxseSBzY29wZWQKKyAgICBzaXplX3QgcGFnZVNp
emU7ICAgICAgICAvLyBncmFudWxhcml0eSBvZiBhbGxvY2F0aW9uIGZyb20gdGhlIE9TCisgICAg
c2l6ZV90IGFsaWdubWVudDsgICAgICAgLy8gYWxsIHJldHVybmVkIGFsbG9jYXRpb25zIHdpbGwg
YmUgYWxpZ25lZCBhdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGdyYW51
bGFyaXR5LCB3aGljaCB3aWxsIGJlIGEgcG93ZXIgb2YgMgorICAgIHNpemVfdCBhbGlnbm1lbnRN
YXNrOworICAgIHNpemVfdCBoZWFkZXJTa2lwOyAgICAgIC8vIGFtb3VudCBvZiBtZW1vcnkgdG8g
c2tpcCB0byBtYWtlIHJvb20gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgaGVhZGVyIChiYXNpY2FsbHksIHNpemUgb2YgaGVhZGVyLCByb3VuZGVkCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB1cCB0byBtYWtlIGl0IGFsaWduZWQKKyAgICBz
aXplX3QgY3VycmVudFBhZ2VPZmZzZXQ7ICAvLyBuZXh0IG9mZnNldCBpbiB0b3Agb2YgaW5Vc2VM
aXN0IHRvIGFsbG9jYXRlIGZyb20KKyAgICB0SGVhZGVyKiBmcmVlTGlzdDsgICAgICAvLyBsaXN0
IG9mIHBvcHBlZCBtZW1vcnkKKyAgICB0SGVhZGVyKiBpblVzZUxpc3Q7ICAgICAvLyBsaXN0IG9m
IGFsbCBtZW1vcnkgY3VycmVudGx5IGJlaW5nIHVzZWQKKyAgICB0QWxsb2NTdGFjayBzdGFjazsg
ICAgICAvLyBzdGFjayBvZiB3aGVyZSB0byBhbGxvY2F0ZSBmcm9tLCB0byBwYXJ0aXRpb24gcG9v
bAorCisgICAgaW50IG51bUNhbGxzOyAgICAgICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBz
dGF0aXN0aWMKKyAgICBzaXplX3QgdG90YWxCeXRlczsgICAgICAvLyBqdXN0IGFuIGludGVyZXN0
aW5nIHN0YXRpc3RpYworcHJpdmF0ZToKKyAgICBUUG9vbEFsbG9jYXRvciYgb3BlcmF0b3I9KGNv
bnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IK
KyAgICBUUG9vbEFsbG9jYXRvcihjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxv
dyBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IKK307CisKKworLy8KKy8vIFRoZXJlIGNvdWxkIHBv
dGVudGlhbGx5IGJlIG1hbnkgcG9vbHMgd2l0aCBwb3BzIGhhcHBlbmluZyBhdAorLy8gZGlmZmVy
ZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZlIGEgZ2xvYmFsIHBvcAorLy8g
d2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxsb2NhdG9yLgorLy8KK3R5cGVk
ZWYgVFBvb2xBbGxvY2F0b3IqIFBvb2xBbGxvY2F0b3JQb2ludGVyOworZXh0ZXJuIFRQb29sQWxs
b2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCk7CisjZGVmaW5lIEdsb2JhbFBvb2xBbGxv
Y2F0b3IgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCisKKworc3RydWN0IFRUaHJlYWRHbG9iYWxQ
b29scworeworICAgIFRQb29sQWxsb2NhdG9yKiBnbG9iYWxQb29sQWxsb2NhdG9yOworfTsKKwor
dm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2Nh
dG9yKTsKKworLy8KKy8vIFRoaXMgU1RMIGNvbXBhdGlibGUgYWxsb2NhdG9yIGlzIGludGVuZGVk
IHRvIGJlIHVzZWQgYXMgdGhlIGFsbG9jYXRvcgorLy8gcGFyYW1ldGVyIHRvIHRlbXBsYXRpemVk
IFNUTCBjb250YWluZXJzLCBsaWtlIHZlY3RvciBhbmQgbWFwLgorLy8KKy8vIEl0IHdpbGwgdXNl
IHRoZSBwb29scyBmb3IgYWxsb2NhdGlvbiwgYW5kIG5vdAorLy8gZG8gYW55IGRlYWxsb2NhdGlv
biwgYnV0IHdpbGwgc3RpbGwgZG8gZGVzdHJ1Y3Rpb24uCisvLwordGVtcGxhdGU8Y2xhc3MgVD4K
K2NsYXNzIHBvb2xfYWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CisgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICAgIHR5cGVk
ZWYgVCogcG9pbnRlcjsKKyAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X3BvaW50ZXI7CisgICAg
dHlwZWRlZiBUJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9yZWZlcmVu
Y2U7CisgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhl
cj4gCisgICAgc3RydWN0IHJlYmluZCB7CisgICAgICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8
T3RoZXI+IG90aGVyOworICAgIH07CisgICAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSB4KSBj
b25zdCB7IHJldHVybiAmeDsgfQorICAgIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKworICAgIHBvb2xfYWxsb2NhdG9yKCkgOiBh
bGxvY2F0b3IoR2xvYmFsUG9vbEFsbG9jYXRvcikgeyB9CisgICAgcG9vbF9hbGxvY2F0b3IoVFBv
b2xBbGxvY2F0b3ImIGEpIDogYWxsb2NhdG9yKGEpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9yKGNv
bnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBwKSA6IGFsbG9jYXRvcihwLmFsbG9jYXRvcikgeyB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29s
X2FsbG9jYXRvcjxPdGhlcj4mIHApIDogYWxsb2NhdG9yKHAuZ2V0QWxsb2NhdG9yKCkpIHsgfQor
CisgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVv
ZihUKSkpOworICAgIH0KKyAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2
b2lkKikgeyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxs
b2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAgIH0KKworICAgIHZvaWQgZGVh
bGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7IH0KKyAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl
ciwgc2l6ZV90eXBlKSB7IH0KKworICAgIHBvaW50ZXIgX0NoYXJhbGxvYyhzaXplX3Qgbikgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5h
bGxvY2F0ZShuKSk7CisgICAgfQorCisgICAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBwLCBjb25z
dCBUJiB2YWwpIHsgbmV3ICgodm9pZCAqKXApIFQodmFsKTsgfQorICAgIHZvaWQgZGVzdHJveShw
b2ludGVyIHApIHsgcC0+VDo6flQoKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBv
b2xfYWxsb2NhdG9yJiByaHMpIGNvbnN0IHsgcmV0dXJuICZnZXRBbGxvY2F0b3IoKSA9PSAmcmhz
LmdldEFsbG9jYXRvcigpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBvb2xfYWxsb2Nh
dG9yJiByaHMpIGNvbnN0IHsgcmV0dXJuICZnZXRBbGxvY2F0b3IoKSAhPSAmcmhzLmdldEFsbG9j
YXRvcigpOyB9CisKKyAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemVvZihUKTsgfQorICAgIHNpemVfdHlwZSBtYXhf
c2l6ZShpbnQgc2l6ZSkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkg
LyBzaXplOyB9CisKKyAgICB2b2lkIHNldEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYSkgeyBh
bGxvY2F0b3IgPSAqYTsgfQorICAgIFRQb29sQWxsb2NhdG9yJiBnZXRBbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBhbGxvY2F0b3I7IH0KKworcHJvdGVjdGVkOgorICAgIFRQb29sQWxsb2NhdG9y
JiBhbGxvY2F0b3I7Cit9OworCisjZW5kaWYgLy8gX1BPT0xBTExPQ19JTkNMVURFRF8KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFs
aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgVEFsaXZlVHJhdmVyc2VyIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRBbGl2ZVRyYXZlcnNlcihUUXVh
bGlmaWVyIHEpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBm
b3VuZChmYWxzZSksIHF1YWxpZmllcihxKQorICAgIHsKKyAgICB9CisKKwlib29sIHdhc0ZvdW5k
KCkgeyByZXR1cm4gZm91bmQ7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgZm91bmQ7CisgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7
Cit9OworCisvLworLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2YgdGhlIGdp
dmVuIHF1YWxpZmllciB0eXBlCisvLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3QgYWx3YXlz
IHBvc3NpYmxlIHRvIGRldGVybWluZSBpZgorLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRpb25hbGx5
LgorLy8KKy8vID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMganVzdCBh
IHBsYWNlIGhvbGRlcgorLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMgcmVmZXJl
bmNlIGF0IGFsbCwgYW55d2hlcmUuCisvLworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1O
b2RlKiBub2RlLCBUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBUQWxpdmVUcmF2ZXJzZXIg
aXQocXVhbGlmaWVyKTsKKworICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT50cmF2ZXJzZSgm
aXQpOworCisgICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Cit9CisKK3ZvaWQgVEFsaXZlVHJhdmVy
c2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIC8vCisgICAgLy8g
SWYgaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCisgICAgLy8KKyAgICBp
ZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQorICAgICAgICBmb3VuZCA9IHRy
dWU7Cit9CisKK2Jvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCBwcmVW
aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpZiAod2FzRm91bmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L1F1YWxpZmllckFsaXZlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihU
SW50ZXJtTm9kZSogcm9vdCwgVFF1YWxpZmllcik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2Nv
bXBpbGVyL1JlbW92ZVRyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvUmVtb3ZlVHJlZS5oIgorCisvLworLy8gQ29kZSB0byByZWN1cnNpdmVs
eSBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8KKworY2xhc3MgUmVtb3ZlVHJlZSA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisJUmVtb3ZlVHJlZSgpIDogVElu
dGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCisJeworCX0KKworcHJvdGVjdGVkOgor
CXZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCXZvaWQgdmlzaXRDb25zdGFudFVu
aW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisJYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSopOworCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5Kik7CisJYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiopOworCWJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUqKTsKK307CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCog
bm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKwor
CXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBkZWxldGUgbm9kZTsKKworCXJldHVybiB0
cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRl
cm1TZWxlY3Rpb24qIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBSZW1vdmVUcmVlOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5p
b24qIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKKy8vCisvLyBFbnRyeSBwb2ludC4KKy8v
Cit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBSZW1v
dmVUcmVlIGl0OworCisgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKK30KKwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1Jl
bW92ZVRyZWUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9k
ZSopOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
U2hIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMzkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1NISEFORExFX0lO
Q0xVREVEXworI2RlZmluZSBfU0hIQU5ETEVfSU5DTFVERURfCisKKy8vCisvLyBNYWNoaW5lIGlu
ZGVwZW5kZW50IHBhcnQgb2YgdGhlIGNvbXBpbGVyIHByaXZhdGUgb2JqZWN0cworLy8gc2VudCBh
cyBTaEhhbmRsZSB0byB0aGUgZHJpdmVyLgorLy8KKy8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCBieSBkcml2ZXIgY29kZS4KKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRDb21waWxlcjsK
K2NsYXNzIFRMaW5rZXI7CitjbGFzcyBUVW5pZm9ybU1hcDsKKworCisvLworLy8gVGhlIGJhc2Ug
Y2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KKy8vCitj
bGFzcyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBUU2hIYW5kbGVCYXNlKCkgeyB9Cisg
ICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsgfQorICAgIHZpcnR1YWwgVENvbXBpbGVyKiBn
ZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVExpbmtlciogZ2V0QXNM
aW5rZXIoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUVW5pZm9ybU1hcCogZ2V0QXNVbmlm
b3JtTWFwKCkgeyByZXR1cm4gMDsgfQorfTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIGZvciB0
aGUgbWFjaGluZSBkZXBlbmRlbnQgbGlua2VyIHRvIGRlcml2ZSBmcm9tCisvLyBmb3IgbWFuYWdp
bmcgd2hlcmUgdW5pZm9ybXMgbGl2ZS4KKy8vCitjbGFzcyBUVW5pZm9ybU1hcCA6IHB1YmxpYyBU
U2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBUVW5pZm9ybU1hcCgpIHsgfQorICAgIHZpcnR1
YWwgflRVbmlmb3JtTWFwKCkgeyB9CisgICAgdmlydHVhbCBUVW5pZm9ybU1hcCogZ2V0QXNVbmlm
b3JtTWFwKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgaW50IGdldExvY2F0aW9uKGNv
bnN0IGNoYXIqIG5hbWUpID0gMDsgICAgCisgICAgdmlydHVhbCBUSW5mb1NpbmsmIGdldEluZm9T
aW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKyAgICBUSW5mb1NpbmsgaW5mb1Npbms7Cit9Owor
Y2xhc3MgVEludGVybU5vZGU7CisKKy8vCisvLyBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1hY2hp
bmUgZGVwZW5kZW50IGNvbXBpbGVyIHRvIGRlcml2ZSBmcm9tCisvLyBmb3IgbWFuYWdpbmcgb2Jq
ZWN0IGNvZGUgZnJvbSB0aGUgY29tcGlsZS4KKy8vCitjbGFzcyBUQ29tcGlsZXIgOiBwdWJsaWMg
VFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVENvbXBpbGVyKEVTaExhbmd1YWdlIGwsIEVT
aFNwZWMgcykgOiBsYW5ndWFnZShsKSwgc3BlYyhzKSwgaGF2ZVZhbGlkT2JqZWN0Q29kZShmYWxz
ZSkgeyB9CisgICAgdmlydHVhbCB+VENvbXBpbGVyKCkgeyB9CisgICAgRVNoTGFuZ3VhZ2UgZ2V0
TGFuZ3VhZ2UoKSB7IHJldHVybiBsYW5ndWFnZTsgfQorICAgIHZpcnR1YWwgVEluZm9TaW5rJiBn
ZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29t
cGlsZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworCisgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdl
dEFzQ29tcGlsZXIoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGxpbmthYmxl
KCkgeyByZXR1cm4gaGF2ZVZhbGlkT2JqZWN0Q29kZTsgfQorCisgICAgVEluZm9TaW5rIGluZm9T
aW5rOworcHJvdGVjdGVkOgorICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlOworICAgIEVTaFNwZWMg
c3BlYzsKKyAgICBib29sIGhhdmVWYWxpZE9iamVjdENvZGU7Cit9OworCisvLworLy8gTGluayBv
cGVyYXRpb25zIGFyZSBiYXNlIG9uIGEgbGlzdCBvZiBjb21waWxlIHJlc3VsdHMuLi4KKy8vCit0
eXBlZGVmIFRWZWN0b3I8VENvbXBpbGVyKj4gVENvbXBpbGVyTGlzdDsKK3R5cGVkZWYgVFZlY3Rv
cjxUU2hIYW5kbGVCYXNlKj4gVEhhbmRsZUxpc3Q7CisKKy8vCisvLyBUaGUgYmFzZSBjbGFzcyBm
b3IgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGxpbmtlciB0byBkZXJpdmUgZnJvbQorLy8gdG8gbWFu
YWdlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZS4KKy8vCisKK2NsYXNzIFRMaW5rZXIgOiBwdWJs
aWMgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVExpbmtlcihFU2hFeGVjdXRhYmxlIGUp
IDogCisgICAgICAgIGV4ZWN1dGFibGUoZSksIAorICAgICAgICBoYXZlUmV0dXJuYWJsZU9iamVj
dENvZGUoZmFsc2UpLAorICAgICAgICBhcHBBdHRyaWJ1dGVCaW5kaW5ncygwKSwKKyAgICAgICAg
Zml4ZWRBdHRyaWJ1dGVCaW5kaW5ncygwKSwKKyAgICAgICAgZXhjbHVkZWRBdHRyaWJ1dGVzKDAp
LAorICAgICAgICBleGNsdWRlZENvdW50KDApLAorICAgICAgICB1bmlmb3JtQmluZGluZ3MoMCkg
eyB9CisgICAgdmlydHVhbCBUTGlua2VyKiBnZXRBc0xpbmtlcigpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIH5UTGlua2VyKCkgeyB9CisgICAgdmlydHVhbCBib29sIGxpbmsoVENvbXBp
bGVyTGlzdCYsIFRVbmlmb3JtTWFwKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsaW5rKFRIYW5k
bGVMaXN0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXBwQXR0cmli
dXRlQmluZGluZ3MoY29uc3QgU2hCaW5kaW5nVGFibGUqIHQpICAgeyBhcHBBdHRyaWJ1dGVCaW5k
aW5ncyA9IHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyhj
b25zdCBTaEJpbmRpbmdUYWJsZSogdCkgeyBmaXhlZEF0dHJpYnV0ZUJpbmRpbmdzID0gdDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRyaWJ1dGVCaW5kaW5ncyhTaEJpbmRpbmdUYWJsZSBjb25z
dCAqKnQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXhjbHVkZWRBdHRyaWJ1dGVz
KGNvbnN0IGludCogYXR0cmlidXRlcywgaW50IGNvdW50KSB7IGV4Y2x1ZGVkQXR0cmlidXRlcyA9
IGF0dHJpYnV0ZXM7IGV4Y2x1ZGVkQ291bnQgPSBjb3VudDsgfQorICAgIHZpcnR1YWwgU2hCaW5k
aW5nVGFibGUqIGdldFVuaWZvcm1CaW5kaW5ncygpIGNvbnN0ICB7IHJldHVybiB1bmlmb3JtQmlu
ZGluZ3M7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldE9iamVjdENvZGUoKSBjb25zdCB7
IHJldHVybiAwOyB9IC8vIGEgcmVhbCBjb21waWxlciB3b3VsZCBiZSByZXR1cm5pbmcgb2JqZWN0
IGNvZGUgaGVyZQorICAgIHZpcnR1YWwgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJu
IGluZm9TaW5rOyB9CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworcHJvdGVjdGVkOgorICAgIEVT
aEV4ZWN1dGFibGUgZXhlY3V0YWJsZTsKKyAgICBib29sIGhhdmVSZXR1cm5hYmxlT2JqZWN0Q29k
ZTsgIC8vIHRydWUgd2hlbiBvYmplY3RDb2RlIGlzIGFjY2VwdGFibGUgdG8gc2VuZCB0byBkcml2
ZXIKKworICAgIGNvbnN0IFNoQmluZGluZ1RhYmxlKiBhcHBBdHRyaWJ1dGVCaW5kaW5nczsKKyAg
ICBjb25zdCBTaEJpbmRpbmdUYWJsZSogZml4ZWRBdHRyaWJ1dGVCaW5kaW5nczsKKyAgICBjb25z
dCBpbnQqIGV4Y2x1ZGVkQXR0cmlidXRlczsKKyAgICBpbnQgZXhjbHVkZWRDb3VudDsKKyAgICBT
aEJpbmRpbmdUYWJsZSogdW5pZm9ybUJpbmRpbmdzOyAgICAgICAgICAgICAgICAvLyBjcmVhdGVk
IGJ5IHRoZSBsaW5rZXIgICAgCit9OworCisvLworLy8gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGJl
dHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBlbmRlbnQgY29kZQorLy8gYW5kIHRoZSBtYWNoaW5lIGRl
cGVuZGVudCBjb2RlLgorLy8KKy8vIFRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlIHNob3VsZCBk
ZXJpdmUgZnJvbSB0aGUgY2xhc3NlcworLy8gYWJvdmUuIFRoZW4gQ29uc3RydWN0KigpIGFuZCBE
ZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5kIAorLy8gZGVzdHJveSB0aGUgbWFjaGluZSBkZXBlbmRl
bnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUKKy8vIGFib3ZlIG1hY2hpbmUgaW5kZXBlbmRl
bnQgaW5mb3JtYXRpb24uCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5n
dWFnZSwgRVNoU3BlYyk7CisKK1RTaEhhbmRsZUJhc2UqIENvbnN0cnVjdExpbmtlcihFU2hFeGVj
dXRhYmxlLCBpbnQpOwordm9pZCBEZWxldGVMaW5rZXIoVFNoSGFuZGxlQmFzZSopOworCitUVW5p
Zm9ybU1hcCogQ29uc3RydWN0VW5pZm9ybU1hcCgpOwordm9pZCBEZWxldGVDb21waWxlcihUQ29t
cGlsZXIqKTsKKwordm9pZCBEZWxldGVVbmlmb3JtTWFwKFRVbmlmb3JtTWFwKik7CisKKyNlbmRp
ZiAvLyBfU0hIQU5ETEVfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5NyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8KKy8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGludGVyZmFjZSB0
byB0aGUgY29tcGlsZXIvbGlua2VyLAorLy8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5nLmgKKy8v
CisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVy
L0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRs
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKKy8vCisvLyBBIHN5bWJv
bCB0YWJsZSBmb3IgZWFjaCBsYW5ndWFnZS4gIEVhY2ggaGFzIGEgZGlmZmVyZW50CisvLyBzZXQg
b2YgYnVpbHQtaW5zLCBhbmQgd2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGF0IGZyb20KKy8vIGNvbXBp
bGUgdG8gY29tcGlsZS4KKy8vCitUU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlc1tFU2hMYW5nQ291
bnRdOworCisKK1RQb29sQWxsb2NhdG9yKiBQZXJQcm9jZXNzR1BBID0gMDsKKy8vCisvLyBUaGlz
IGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJp
dmVyCisvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIvbGlua2VyLgorLy8KKwor
Ly8KKy8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFu
eSBvdGhlcgorLy8gY29tcGlsZXIvbGlua2VyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlh
bGl6ZSgpCit7CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsK
KworICAgIGlmICghSW5pdFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgcGVyIHByb2Nlc3MuIElmIGl0cyBjYWxs
ZWQgYnkgbXVsdGlwbGUgdGhyZWFkcywgdGhlbiAKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgdGhy
ZWFkIHN5bmNocm9uaXphdGlvbiBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGVy
IHByb2Nlc3MKKyAgICAvLyBnbG9iYWwgcG9vbCBhbGxvY2F0b3IKKyAgICBpZiAoIVBlclByb2Nl
c3NHUEEpIHsgCisgICAgICAgIFRQb29sQWxsb2NhdG9yICpidWlsdEluUG9vbEFsbG9jYXRvciA9
IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKKyAgICAgICAgYnVpbHRJblBvb2xBbGxvY2F0b3It
PnB1c2goKTsKKyAgICAgICAgVFBvb2xBbGxvY2F0b3IqIGdQb29sQWxsb2NhdG9yID0gJkdsb2Jh
bFBvb2xBbGxvY2F0b3I7CisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoYnVpbHRJ
blBvb2xBbGxvY2F0b3IpOworCisgICAgICAgIFRTeW1ib2xUYWJsZSBzeW1UYWJsZXNbRVNoTGFu
Z0NvdW50XTsKKyAgICAgICAgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoMCwgaW5mb1Npbmss
IHN5bVRhYmxlcyk7CisKKyAgICAgICAgUGVyUHJvY2Vzc0dQQSA9IG5ldyBUUG9vbEFsbG9jYXRv
cih0cnVlKTsKKyAgICAgICAgUGVyUHJvY2Vzc0dQQS0+cHVzaCgpOworICAgICAgICBTZXRHbG9i
YWxQb29sQWxsb2NhdG9yUHRyKFBlclByb2Nlc3NHUEEpOworCisgICAgICAgIFN5bWJvbFRhYmxl
c1tFU2hMYW5nVmVydGV4XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJvbFRhYmxl
c1tFU2hMYW5nVmVydGV4XS0+Y29weVRhYmxlKHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XSk7Cisg
ICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdID0gbmV3IFRTeW1ib2xUYWJsZTsK
KyAgICAgICAgU3ltYm9sVGFibGVzW0VTaExhbmdGcmFnbWVudF0tPmNvcHlUYWJsZShzeW1UYWJs
ZXNbRVNoTGFuZ0ZyYWdtZW50XSk7CisKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0
cihnUG9vbEFsbG9jYXRvcik7CisKKyAgICAgICAgc3ltVGFibGVzW0VTaExhbmdWZXJ0ZXhdLnBv
cCgpOworICAgICAgICBzeW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XS5wb3AoKTsKKworICAgICAg
ICBidWlsdEluUG9vbEFsbG9jYXRvci0+cG9wQWxsKCk7CisgICAgICAgIGRlbGV0ZSBidWlsdElu
UG9vbEFsbG9jYXRvcjsgICAgICAgIAorCisgICAgfQorCisgICAgcmV0dXJuIHJldCA/IDEgOiAw
OworfQorCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBj
b21waWxlci9saW5rZXIKKy8vIG9iamVjdHMuCisvLworCitTaEhhbmRsZSBTaENvbnN0cnVjdENv
bXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCit7CisgICAgaWYgKCFJ
bml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFz
ZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihDb25zdHJ1Y3RDb21waWxlcihsYW5ndWFn
ZSwgc3BlYykpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
KTsKK30KKworU2hIYW5kbGUgU2hDb25zdHJ1Y3RMaW5rZXIoY29uc3QgRVNoRXhlY3V0YWJsZSBl
eGVjdXRhYmxlLCBpbnQgZGVidWdPcHRpb25zKQoreworICAgIGlmICghSW5pdFRocmVhZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0TGlua2VyKGV4ZWN1dGFibGUsIGRlYnVnT3B0aW9u
cykpOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCitT
aEhhbmRsZSBTaENvbnN0cnVjdFVuaWZvcm1NYXAoKQoreworICAgIGlmICghSW5pdFRocmVhZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0VW5pZm9ybU1hcCgpKTsKKworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlKTsKK30KKwordm9pZCBTaERlc3RydWN0KFNo
SGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybjsK
KworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4o
aGFuZGxlKTsKKworICAgIGlmIChiYXNlLT5nZXRBc0NvbXBpbGVyKCkpCisgICAgICAgIERlbGV0
ZUNvbXBpbGVyKGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgZWxzZSBpZiAoYmFzZS0+Z2V0
QXNMaW5rZXIoKSkKKyAgICAgICAgRGVsZXRlTGlua2VyKGJhc2UtPmdldEFzTGlua2VyKCkpOwor
ICAgIGVsc2UgaWYgKGJhc2UtPmdldEFzVW5pZm9ybU1hcCgpKQorICAgICAgICBEZWxldGVVbmlm
b3JtTWFwKGJhc2UtPmdldEFzVW5pZm9ybU1hcCgpKTsKK30KKworLy8KKy8vIENsZWFudXAgc3lt
Ym9sIHRhYmxlcworLy8KK2ludCBfX2Zhc3RjYWxsIFNoRmluYWxpemUoKQoreyAgCisgIGlmIChQ
ZXJQcm9jZXNzR1BBKSB7CisgICAgUGVyUHJvY2Vzc0dQQS0+cG9wQWxsKCk7CisgICAgZGVsZXRl
IFBlclByb2Nlc3NHUEE7CisgICAgUGVyUHJvY2Vzc0dQQSA9IDA7CisgIH0KKyAgZm9yIChpbnQg
aSA9IDA7IGkgPCBFU2hMYW5nQ291bnQ7ICsraSkgeworICAgIGRlbGV0ZSBTeW1ib2xUYWJsZXNb
aV07CisgICAgU3ltYm9sVGFibGVzW2ldID0gMDsKKyAgfQorICByZXR1cm4gMTsKK30KKworYm9v
bCBHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNv
dXJjZXMsIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVzLCBF
U2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7CisgICAgCisJ
aWYgKHJlc291cmNlcykgeworCQlidWlsdElucy5pbml0aWFsaXplKCpyZXNvdXJjZXMpOworCQlJ
bml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgbGFuZ3Vh
Z2UsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfSBlbHNlIHsKKwkJYnVp
bHRJbnMuaW5pdGlhbGl6ZSgpOworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0
QnVpbHRJblN0cmluZ3MoKSwgRVNoTGFuZ1ZlcnRleCwgaW5mb1NpbmssIHJlc291cmNlcywgc3lt
Ym9sVGFibGVzKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5T
dHJpbmdzKCksIEVTaExhbmdGcmFnbWVudCwgaW5mb1NpbmssIHJlc291cmNlcywgc3ltYm9sVGFi
bGVzKTsKKwl9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXplU3ltYm9s
VGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2UgbGFuZ3Vh
Z2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNl
cywgVFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZXMpCit7CisgICAgVEludGVybWVkaWF0ZSBpbnRl
cm1lZGlhdGUoaW5mb1NpbmspOwkKKyAgICBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlOworCQor
CWlmIChyZXNvdXJjZXMpCisJCXN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGVzOworCWVsc2UKKwkJ
c3ltYm9sVGFibGUgPSAmc3ltYm9sVGFibGVzW2xhbmd1YWdlXTsKKworICAgIFRQYXJzZUNvbnRl
eHQgcGFyc2VDb250ZXh0KCpzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBsYW5ndWFnZSwgaW5m
b1NpbmspOworCisgICAgR2xvYmFsUGFyc2VDb250ZXh0ID0gJnBhcnNlQ29udGV4dDsKKyAgICAK
KyAgICBzZXRJbml0aWFsU3RhdGUoKTsKKworICAgIGFzc2VydChzeW1ib2xUYWJsZS0+aXNFbXB0
eSgpIHx8IHN5bWJvbFRhYmxlLT5hdFNoYXJlZEJ1aWx0SW5MZXZlbCgpKTsKKyAgICAgICAKKyAg
ICAvLworICAgIC8vIFBhcnNlIHRoZSBidWlsdC1pbnMuICBUaGlzIHNob3VsZCBvbmx5IGhhcHBl
biBvbmNlIHBlcgorICAgIC8vIGxhbmd1YWdlIHN5bWJvbCB0YWJsZS4KKyAgICAvLworICAgIC8v
IFB1c2ggdGhlIHN5bWJvbCB0YWJsZSB0byBnaXZlIGl0IGFuIGluaXRpYWwgc2NvcGUuICBUaGlz
CisgICAgLy8gcHVzaCBzaG91bGQgbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIHBvcCwgc28gdGhh
dCBidWlsdC1pbnMKKyAgICAvLyBhcmUgcHJlc2VydmVkLCBhbmQgdGhlIHRlc3QgZm9yIGFuIGVt
cHR5IHRhYmxlIGZhaWxzLgorICAgIC8vCisKKyAgICBzeW1ib2xUYWJsZS0+cHVzaCgpOworICAg
IAorICAgIC8vSW5pdGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yCisgICAgaW50IHJldCA9IEluaXRQ
cmVwcm9jZXNzb3IoKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgICJVbmFibGUgdG8gaW50aWFsaXplIHRoZSBQcmVw
cm9jZXNzb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBmb3Ig
KFRCdWlsdEluU3RyaW5nczo6aXRlcmF0b3IgaSAgPSBCdWlsdEluU3RyaW5nc1twYXJzZUNvbnRl
eHQubGFuZ3VhZ2VdLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpICE9IEJ1aWx0SW5TdHJpbmdzW3BhcnNlQ29udGV4dC5sYW5ndWFnZV0uZW5kKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2kpIHsKKyAgICAgICAgY29uc3QgY2hh
ciogYnVpbHRJblNoYWRlcnNbMV07CisgICAgICAgIGludCBidWlsdEluTGVuZ3Roc1sxXTsKKwor
ICAgICAgICBidWlsdEluU2hhZGVyc1swXSA9ICgqaSkuY19zdHIoKTsKKyAgICAgICAgYnVpbHRJ
bkxlbmd0aHNbMF0gPSAoaW50KSAoKmkpLnNpemUoKTsKKworICAgICAgICBpZiAoUGFQYXJzZVN0
cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KGJ1aWx0SW5TaGFkZXJzKSwgYnVpbHRJbkxlbmd0aHMs
IDEsIHBhcnNlQ29udGV4dCkgIT0gMCkgeworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hYmxlIHRvIHBhcnNlIGJ1aWx0LWlucyIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisJaWYgKHJlc291
cmNlcykgeworCQlJZGVudGlmeUJ1aWx0SW5zKHBhcnNlQ29udGV4dC5sYW5ndWFnZSwgKnN5bWJv
bFRhYmxlLCAqcmVzb3VyY2VzKTsKKwl9IGVsc2UgewkJCQkJCQkJCSAgIAorCQlJZGVudGlmeUJ1
aWx0SW5zKHBhcnNlQ29udGV4dC5sYW5ndWFnZSwgKnN5bWJvbFRhYmxlKTsKKwl9CisKKyAgICBG
aW5hbGl6ZVByZXByb2Nlc3NvcigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBE
byBhbiBhY3R1YWwgY29tcGlsZSBvbiB0aGUgZ2l2ZW4gc3RyaW5ncy4gIFRoZSByZXN1bHQgaXMg
bGVmdCAKKy8vIGluIHRoZSBnaXZlbiBjb21waWxlIG9iamVjdC4KKy8vCisvLyBSZXR1cm46ICBU
aGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyByZWFsbHkgYm9vbGVhbiwgaW5kaWNhdGlu
ZworLy8gc3VjY2VzcyBvciBmYWlsdXJlLgorLy8KK2ludCBTaENvbXBpbGUoCisgICAgY29uc3Qg
U2hIYW5kbGUgaGFuZGxlLAorICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwK
KyAgICBjb25zdCBpbnQgbnVtU3RyaW5ncywKKyAgICBjb25zdCBFU2hPcHRpbWl6YXRpb25MZXZl
bCBvcHRMZXZlbCwKKyAgICBjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMsCisgICAg
aW50IGRlYnVnT3B0aW9ucworICAgICkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFz
ZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGls
ZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wdXNoKCk7CisgICAgVEluZm9TaW5rJiBpbmZvU2luayA9
IGNvbXBpbGVyLT5pbmZvU2luazsKKyAgICBpbmZvU2luay5pbmZvLmVyYXNlKCk7CisgICAgaW5m
b1NpbmsuZGVidWcuZXJhc2UoKTsKKyAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKKworICAgIGlm
IChudW1TdHJpbmdzID09IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgVEludGVybWVkaWF0
ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOworICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZSgq
U3ltYm9sVGFibGVzW2NvbXBpbGVyLT5nZXRMYW5ndWFnZSgpXSk7CisgICAgCisgICAgR2VuZXJh
dGVCdWlsdEluU3ltYm9sVGFibGUocmVzb3VyY2VzLCBpbmZvU2luaywgJnN5bWJvbFRhYmxlLCBj
b21waWxlci0+Z2V0TGFuZ3VhZ2UoKSk7CisKKyAgICBUUGFyc2VDb250ZXh0IHBhcnNlQ29udGV4
dChzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBjb21waWxlci0+Z2V0TGFuZ3VhZ2UoKSwgaW5m
b1NpbmspOworICAgIHBhcnNlQ29udGV4dC5pbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKTsK
KworICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisgICAgc2V0
SW5pdGlhbFN0YXRlKCk7CisKKyAgICBJbml0UHJlcHJvY2Vzc29yKCk7ICAgIAorICAgIC8vCisg
ICAgLy8gUGFyc2UgdGhlIGFwcGxpY2F0aW9uJ3Mgc2hhZGVycy4gIEFsbCB0aGUgZm9sbG93aW5n
IHN5bWJvbCB0YWJsZQorICAgIC8vIHdvcmsgd2lsbCBiZSB0aHJvdy1hd2F5LCBzbyBwdXNoIGEg
bmV3IGFsbG9jYXRpb24gc2NvcGUgdGhhdCBjYW4KKyAgICAvLyBiZSB0aHJvd24gYXdheSwgdGhl
biBwdXNoIGEgc2NvcGUgZm9yIHRoZSBjdXJyZW50IHNoYWRlcidzIGdsb2JhbHMuCisgICAgLy8K
KyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgIHN5bWJvbFRhYmxlLnB1c2goKTsK
KyAgICBpZiAoIXN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkKKyAgICAgICAgcGFyc2VDb250
ZXh0LmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIldyb25nIHN5
bWJvbCB0YWJsZSBsZXZlbCIpOworCisgICAgaW50IHJldCA9IFBhUGFyc2VTdHJpbmdzKGNvbnN0
X2Nhc3Q8Y2hhcioqPihzaGFkZXJTdHJpbmdzKSwgMCwgbnVtU3RyaW5ncywgcGFyc2VDb250ZXh0
KTsKKyAgICBpZiAocmV0KQorICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBpZiAoc3Vj
Y2VzcyAmJiBwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKKyAgICAgICAgaWYgKG9wdExldmVsID09
IEVTaE9wdE5vR2VuZXJhdGlvbikKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeE5vbmUsICJObyBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRpb24g
b3IgbGlua2luZyB3YXMgcmVxdWVzdGVkLiIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3MocGFyc2VDb250ZXh0LnRyZWVSb290
LCBwYXJzZUNvbnRleHQubGFuZ3VhZ2UpOworCisgICAgICAgICAgICBpZiAoc3VjY2Vzcykgewor
CisgICAgICAgICAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRl
KQorICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRl
eHQudHJlZVJvb3QpOworCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBD
YWxsIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlcgorICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgaWYgKCFjb21waWxlci0+Y29tcGlsZShwYXJzZUNvbnRleHQudHJlZVJv
b3QpKQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIHBhcnNlQ29u
dGV4dC5pbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBwYXJzZUNv
bnRleHQuaW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8ICIgY29tcGls
YXRpb24gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7CisgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRl
KQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0LnRyZWVS
b290KTsKKyAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKKyAgICAgICAg
cGFyc2VDb250ZXh0LmVycm9yKDEsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiIsICIiLCAiIik7
CisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1F
cnJvcnMgPDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsK
KyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURl
YnVnT3BJbnRlcm1lZGlhdGUpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShw
YXJzZUNvbnRleHQudHJlZVJvb3QpOworICAgIH0KKworICAgIGludGVybWVkaWF0ZS5yZW1vdmUo
cGFyc2VDb250ZXh0LnRyZWVSb290KTsKKworICAgIC8vCisgICAgLy8gRW5zdXJlIHN5bWJvbCB0
YWJsZSBpcyByZXR1cm5lZCB0byB0aGUgYnVpbHQtaW4gbGV2ZWwsCisgICAgLy8gdGhyb3dpbmcg
YXdheSBhbGwgYnV0IHRoZSBidWlsdC1pbnMuCisgICAgLy8KKyAgICB3aGlsZSAoISBzeW1ib2xU
YWJsZS5hdFNoYXJlZEJ1aWx0SW5MZXZlbCgpKQorICAgICAgICBzeW1ib2xUYWJsZS5wb3AoKTsK
KworICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisgICAgLy8KKyAgICAvLyBUaHJvdyBhd2F5
IGFsbCB0aGUgdGVtcG9yYXJ5IG1lbW9yeSB1c2VkIGJ5IHRoZSBjb21waWxhdGlvbiBwcm9jZXNz
LgorICAgIC8vCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wb3AoKTsKKworICAgIHJldHVybiBz
dWNjZXNzID8gMSA6IDA7Cit9CisKKy8vCisvLyBEbyBhbiBhY3R1YWwgbGluayBvbiB0aGUgZ2l2
ZW4gY29tcGlsZSBvYmplY3RzLgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUgb2Yg
aXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8v
CitpbnQgU2hMaW5rKAorICAgIGNvbnN0IFNoSGFuZGxlIGxpbmtIYW5kbGUsCisgICAgY29uc3Qg
U2hIYW5kbGUgY29tcEhhbmRsZXNbXSwKKyAgICBjb25zdCBpbnQgbnVtSGFuZGxlcywKKyAgICBT
aEhhbmRsZSB1bmlmb3JtTWFwSGFuZGxlLAorICAgIHNob3J0IGludCoqIHVuaWZvcm1zQWNjZXNz
ZWQsCisgICAgaW50KiBudW1Vbmlmb3Jtc0FjY2Vzc2VkKQorCit7CisgICAgaWYgKCFJbml0VGhy
ZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGxpbmtIYW5kbGUpOworICAgIFRMaW5rZXIq
IGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5nZXRBc0xpbmtlcigpKTsKKyAg
ICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IHJldHVyblZh
bHVlOworICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucHVzaCgpOworICAgIHJldHVyblZhbHVlID0g
U2hMaW5rRXh0KGxpbmtIYW5kbGUsIGNvbXBIYW5kbGVzLCBudW1IYW5kbGVzKTsKKyAgICBHbG9i
YWxQb29sQWxsb2NhdG9yLnBvcCgpOworCisgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICBy
ZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorLy8KKy8vIFRoaXMgbGluayBtZXRob2Qgd2ls
bCBiZSBldmVudHVhbGx5IHVzZWQgb25jZSB0aGUgSUNEIHN1cHBvcnRzIHRoZSBuZXcgbGlua2Vy
IGludGVyZmFjZQorLy8KK2ludCBTaExpbmtFeHQoCisgICAgY29uc3QgU2hIYW5kbGUgbGlua0hh
bmRsZSwKKyAgICBjb25zdCBTaEhhbmRsZSBjb21wSGFuZGxlc1tdLAorICAgIGNvbnN0IGludCBu
dW1IYW5kbGVzKQoreworICAgIGlmIChsaW5rSGFuZGxlID09IDAgfHwgbnVtSGFuZGxlcyA9PSAw
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRIYW5kbGVMaXN0IGNPYmplY3RzOworCisgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSGFu
ZGxlczsgKytpKSB7CisgICAgICAgICAgICBpZiAoY29tcEhhbmRsZXNbaV0gPT0gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBy
ZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihjb21wSGFuZGxlc1tpXSk7CisgICAgICAg
ICAgICBpZiAoYmFzZS0+Z2V0QXNMaW5rZXIoKSkgeworICAgICAgICAgICAgICAgIGNPYmplY3Rz
LnB1c2hfYmFjayhiYXNlLT5nZXRBc0xpbmtlcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChiYXNlLT5nZXRBc0NvbXBpbGVyKCkpCisgICAgICAgICAgICAgICAgY09iamVjdHMu
cHVzaF9iYWNrKGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgCisgICAgCisgICAgICAgICAg
ICBpZiAoY09iamVjdHNbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0
PFRTaEhhbmRsZUJhc2UqPihsaW5rSGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIgPSBzdGF0
aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisKKyAgICBpZiAobGlua2Vy
ID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbGlua2VyLT5pbmZvU2luay5pbmZvLmVy
YXNlKCk7CisgICAgbGlua2VyLT5pbmZvU2luay5vYmouZXJhc2UoKTsKKworICAgIHsvLyBzdXBw
b3J0IE1TVkMrKzYuMAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUhhbmRsZXM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGNPYmplY3RzW2ldLT5nZXRBc0NvbXBpbGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoISBjT2JqZWN0c1tpXS0+Z2V0QXNDb21waWxlcigpLT5saW5rYWJs
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtlci0+aW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhFcnJvciwgIk5vdCBhbGwgc2hhZGVycyBoYXZlIHZhbGlkIG9iamVjdCBjb2RlLiIp
OyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBy
ZXQgPSBsaW5rZXItPmxpbmsoY09iamVjdHMpOworCisgICAgcmV0dXJuIHJldCA/IDEgOiAwOwor
fQorCisvLworLy8gU2hTZXRFbmNycHl0aW9uTWV0aG9kIGlzIGEgcGxhY2UtaG9sZGVyIGZvciBz
cGVjaWZ5aW5nCisvLyBob3cgc291cmNlIGNvZGUgaXMgZW5jcnlwdGVkLgorLy8KK3ZvaWQgU2hT
ZXRFbmNyeXB0aW9uTWV0aG9kKFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlID09
IDApCisgICAgICAgIHJldHVybjsKK30KKworLy9KdXN0IGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVy
ZSBjb2RlCitjb25zdCBjaGFyKiBTaEdldFZhbGlkYXRvckxvZyhjb25zdCBTaEhhbmRsZSBoYW5k
bGUpCit7CisgICAgICAgIHJldHVybiAiIjsKK30KKworLy8KKy8vIFJldHVybiBhbnkgY29tcGls
ZXIvbGlua2VyL3VuaWZvcm1tYXAgbG9nIG9mIG1lc3NhZ2VzIGZvciB0aGUgYXBwbGljYXRpb24u
CisvLworY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sK
KyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFu
ZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9
IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZvU2luayogaW5m
b1Npbms7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBpbmZvU2lu
ayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKyAgICBlbHNlIGlm
IChiYXNlLT5nZXRBc0xpbmtlcigpKQorICAgICAgICBpbmZvU2luayA9ICYoYmFzZS0+Z2V0QXNM
aW5rZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisKKyAgICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2lu
ay0+ZGVidWcuY19zdHIoKTsKKyAgICByZXR1cm4gaW5mb1NpbmstPmluZm8uY19zdHIoKTsKK30K
KworLy8KKy8vIFJldHVybiBhbnkgdW5saW5rZWQgb2JqZWN0IGNvZGUuCisvLworY29uc3QgY2hh
ciogU2hHZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIUlu
aXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0
PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZvU2luayogaW5mb1Npbms7CisKKyAg
ICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBpbmZvU2luayA9ICYoYmFzZS0+
Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKworICAgIHJldHVybiBpbmZvU2luay0+
b2JqLmNfc3RyKCk7Cit9CisKKy8vCisvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBiaW5hcnkgY29k
ZSBmcm9tIHRoZSBsaW5rIHByb2Nlc3MuICBTdHJ1Y3R1cmUKKy8vIGlzIG1hY2hpbmUgZGVwZW5k
ZW50LgorLy8KK2NvbnN0IHZvaWQqIFNoR2V0RXhlY3V0YWJsZShjb25zdCBTaEhhbmRsZSBoYW5k
bGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2Uq
IGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIAor
ICAgIFRMaW5rZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5nZXRBc0xp
bmtlcigpKTsKKyAgICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGxpbmtlci0+Z2V0T2JqZWN0Q29kZSgpOworfQorCisvLworLy8gTGV0IHRoZSBsaW5r
ZXIga25vdyB3aGVyZSB0aGUgYXBwbGljYXRpb24gc2FpZCBpdCdzIGF0dHJpYnV0ZXMgYXJlIGJv
dW5kLgorLy8gVGhlIGxpbmtlciBkb2VzIG5vdCB1c2UgdGhlc2UgdmFsdWVzLCB0aGV5IGFyZSBy
ZW1hcHBlZCBieSB0aGUgSUNEIG9yCisvLyBoYXJkd2FyZS4gIEl0IGp1c3QgbmVlZHMgdGhlbSB0
byBrbm93IHdoYXQncyBhbGlhc2VkLgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUg
b2YgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4K
Ky8vCitpbnQgU2hTZXRWaXJ0dWFsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUgaGFu
ZGxlLCBjb25zdCBTaEJpbmRpbmdUYWJsZSogdGFibGUpCit7ICAgIAorICAgIGlmICghSW5pdFRo
cmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2Fz
dDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIgPSBzdGF0aWNf
Y2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisKKyAgICBpZiAobGlua2VyID09
IDApCisgICAgICAgIHJldHVybiAwOworICAgCisgICAgbGlua2VyLT5zZXRBcHBBdHRyaWJ1dGVC
aW5kaW5ncyh0YWJsZSk7CisKKyAgICByZXR1cm4gMTsKK30KKworLy8KKy8vIExldCB0aGUgbGlu
a2VyIGtub3cgd2hlcmUgdGhlIHByZWRlZmluZWQgYXR0cmlidXRlcyBoYXZlIHRvIGxpdmUuCisv
LworaW50IFNoU2V0Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEhhbmRsZSBoYW5kbGUs
IGNvbnN0IFNoQmluZGluZ1RhYmxlKiB0YWJsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFu
ZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVExpbmtlciogbGlua2VyID0gc3RhdGljX2Nhc3Q8VExp
bmtlcio+KGJhc2UtPmdldEFzTGlua2VyKCkpOworCisgICAgaWYgKGxpbmtlciA9PSAwKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGxpbmtlci0+c2V0Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyh0
YWJsZSk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vCisvLyBTb21lIGF0dHJpYnV0ZSBsb2NhdGlv
bnMgYXJlIG9mZi1saW1pdHMgdG8gdGhlIGxpbmtlci4uLgorLy8KK2ludCBTaEV4Y2x1ZGVBdHRy
aWJ1dGVzKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgaW50ICphdHRyaWJ1dGVzLCBpbnQgY291bnQp
Cit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRMaW5r
ZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5nZXRBc0xpbmtlcigpKTsK
KyAgICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbGlua2VyLT5z
ZXRFeGNsdWRlZEF0dHJpYnV0ZXMoYXR0cmlidXRlcywgY291bnQpOworCisgICAgcmV0dXJuIDE7
Cit9CisKKy8vCisvLyBSZXR1cm4gdGhlIGluZGV4IGZvciBPcGVuR0wgdG8gdXNlIGZvciBrbm93
aW5nIHdoZXJlIGEgdW5pZm9ybSBsaXZlcy4KKy8vCisvLyBSZXR1cm46ICBUaGUgcmV0dXJuIHZh
bHVlIG9mIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1
cmUuCisvLworaW50IFNoR2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwg
Y29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPiho
YW5kbGUpOworICAgIFRVbmlmb3JtTWFwKiB1bmlmb3JtTWFwPSBiYXNlLT5nZXRBc1VuaWZvcm1N
YXAoKTsKKyAgICBpZiAodW5pZm9ybU1hcCA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAg
ICByZXR1cm4gdW5pZm9ybU1hcC0+Z2V0TG9jYXRpb24obmFtZSk7Cit9CisKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjE2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gU3ltYm9sIHRhYmxlIGZv
ciBwYXJzaW5nLiAgTW9zdCBmdW5jdGlvbmFsaXkgYW5kIG1haW4gaWRlYXMKKy8vIGFyZSBkb2N1
bWVudGVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1i
b2xUYWJsZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLy8KKy8vIFRUeXBlIGhlbHBlciBm
dW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRvIGxpdmUuCisvLworCisvLworLy8gUmVjdXJzaXZlbHkg
Z2VuZXJhdGUgbWFuZ2xlZCBuYW1lcy4KKy8vCit2b2lkIFRUeXBlOjpidWlsZE1hbmdsZWROYW1l
KFRTdHJpbmcmIG1hbmdsZWROYW1lKQoreworICAgIGlmIChpc01hdHJpeCgpKQorICAgICAgICBt
YW5nbGVkTmFtZSArPSAnbSc7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gJ3YnOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFYnRGbG9h
dDogICAgICAgICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKKyAgICBjYXNl
IEVidEludDogICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnYic7ICAgICAg
YnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgIG1hbmdsZWROYW1lICs9ICJz
MiI7ICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gInNDIjsgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U3RydWN0OgorICAgICAgICBtYW5n
bGVkTmFtZSArPSAic3RydWN0LSI7CisgICAgICAgIGlmICh0eXBlTmFtZSkKKyAgICAgICAgICAg
IG1hbmdsZWROYW1lICs9ICp0eXBlTmFtZTsKKyAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4w
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7CisgICAgICAg
ICAgICAgICAgKCpzdHJ1Y3R1cmUpW2ldLnR5cGUtPmJ1aWxkTWFuZ2xlZE5hbWUobWFuZ2xlZE5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsg
Z2V0Tm9taW5hbFNpemUoKSk7CisgICAgaWYgKGlzQXJyYXkoKSkgeworICAgICAgICBjaGFyIGJ1
ZlsyMF07CisgICAgICAgIHNwcmludGYoYnVmLCAiJWQiLCBhcnJheVNpemUpOworICAgICAgICBt
YW5nbGVkTmFtZSArPSAnWyc7CisgICAgICAgIG1hbmdsZWROYW1lICs9IGJ1ZjsKKyAgICAgICAg
bWFuZ2xlZE5hbWUgKz0gJ10nOworICAgIH0KK30KKworaW50IFRUeXBlOjpnZXRTdHJ1Y3RTaXpl
KCkgY29uc3QKK3sKKyAgICBpZiAoIWdldFN0cnVjdCgpKSB7CisgICAgICAgIGFzc2VydChmYWxz
ZSAmJiAiTm90IGEgc3RydWN0Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlm
IChzdHJ1Y3R1cmVTaXplID09IDApCisgICAgICAgIGZvciAoVFR5cGVMaXN0OjppdGVyYXRvciB0
bCA9IGdldFN0cnVjdCgpLT5iZWdpbigpOyB0bCAhPSBnZXRTdHJ1Y3QoKS0+ZW5kKCk7IHRsKysp
CisgICAgICAgICAgICBzdHJ1Y3R1cmVTaXplICs9ICgoKnRsKS50eXBlKS0+Z2V0T2JqZWN0U2l6
ZSgpOworCisgICAgcmV0dXJuIHN0cnVjdHVyZVNpemU7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0
aW9ucy4KKy8vCisKK3ZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNv
bnN0Cit7CisgICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8
PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0
cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNB
cnJheSgpKSB7CisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBp
bmZvU2luay5kZWJ1ZyA8PCAiXG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1Np
bmsgJmluZm9TaW5rKSBjb25zdAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5j
X3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwg
Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxl
TGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNv
bnN0X2l0ZXJhdG9yIGl0OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZl
bC5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30K
Kwordm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sK
KyAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVs
KSB7CisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7
CisgICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLwor
Ly8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rp
b246On5URnVuY3Rpb24oKQoreworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBh
cmFtZXRlcnMuYmVnaW4oKTsgaSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRl
bGV0ZSAoKmkpLnR5cGU7Cit9CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1h
cCBvZiBwb2ludGVycyB0byBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RT
eW1ib2xUYWJsZUxldmVsOjp+VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVs
OjppdGVyYXRvciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQor
ICAgICAgICBkZWxldGUgKCppdCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5j
dGlvbiBlbnRyaWVzIGluIHRoZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0
byBiZSByZWxhdGVkIHRvIHRoZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlz
IGEgbG93CisvLyBwZXJmb3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBz
eW1ib2wgdGFibGVzIHRoYXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBp
bGVzLgorLy8KK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3Qg
Y2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7Cisg
ICAgZm9yIChpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS5zZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uLT5yZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworCitUU3ltYm9sOjpUU3ltYm9sKGNvbnN0IFRTeW1ib2wmIGNvcHlPZikKK3sKKyAgICBu
YW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLm5hbWUtPmNfc3RyKCkpOworICAgIHVuaXF1ZUlk
ID0gY29weU9mLnVuaXF1ZUlkOworfQorCitUVmFyaWFibGU6OlRWYXJpYWJsZShjb25zdCBUVmFy
aWFibGUmIGNvcHlPZiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpIDogVFN5bWJvbChjb3B5T2Yp
Cit7CisgICAgdHlwZS5jb3B5VHlwZShjb3B5T2YudHlwZSwgcmVtYXBwZXIpOworICAgIHVzZXJU
eXBlID0gY29weU9mLnVzZXJUeXBlOworICAgIC8vIGZvciBidWlsdEluIHN5bWJvbCB0YWJsZSBs
ZXZlbCwgdW5pb25BcnJheSBhbmQgYXJyYXlJbmZvcm1hdGlvbiBwb2ludGVycyBzaG91bGQgYmUg
TlVMTAorICAgIGFzc2VydChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7CisgICAg
YXJyYXlJbmZvcm1hdGlvblR5cGUgPSAwOworCisgICAgaWYgKGNvcHlPZi51bmlvbkFycmF5KSB7
CisgICAgICAgIGFzc2VydCghY29weU9mLnR5cGUuZ2V0U3RydWN0KCkpOworICAgICAgICBhc3Nl
cnQoY29weU9mLnR5cGUuZ2V0T2JqZWN0U2l6ZSgpID09IDEpOworICAgICAgICB1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXlbMF0gPSBjb3B5T2Yu
dW5pb25BcnJheVswXTsKKyAgICB9IGVsc2UKKyAgICAgICAgdW5pb25BcnJheSA9IDA7Cit9CisK
K1RWYXJpYWJsZSogVFZhcmlhYmxlOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKK3sK
KyAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgqdGhpcywgcmVtYXBwZXIp
OworCisgICAgcmV0dXJuIHZhcmlhYmxlOworfQorCitURnVuY3Rpb246OlRGdW5jdGlvbihjb25z
dCBURnVuY3Rpb24mIGNvcHlPZiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpIDogVFN5bWJvbChj
b3B5T2YpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5T2YucGFyYW1l
dGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICBw
YXJhbWV0ZXJzLnB1c2hfYmFjayhwYXJhbSk7CisgICAgICAgIHBhcmFtZXRlcnMuYmFjaygpLmNv
cHlQYXJhbShjb3B5T2YucGFyYW1ldGVyc1tpXSwgcmVtYXBwZXIpOworICAgIH0KKworICAgIHJl
dHVyblR5cGUuY29weVR5cGUoY29weU9mLnJldHVyblR5cGUsIHJlbWFwcGVyKTsKKyAgICBtYW5n
bGVkTmFtZSA9IGNvcHlPZi5tYW5nbGVkTmFtZTsKKyAgICBvcCA9IGNvcHlPZi5vcDsKKyAgICBk
ZWZpbmVkID0gY29weU9mLmRlZmluZWQ7Cit9CisKK1RGdW5jdGlvbiogVEZ1bmN0aW9uOjpjbG9u
ZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKK3sKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0g
bmV3IFRGdW5jdGlvbigqdGhpcywgcmVtYXBwZXIpOworCisgICAgcmV0dXJuIGZ1bmN0aW9uOwor
fQorCitUU3ltYm9sVGFibGVMZXZlbCogVFN5bWJvbFRhYmxlTGV2ZWw6OmNsb25lKFRTdHJ1Y3R1
cmVNYXAmIHJlbWFwcGVyKQoreworICAgIFRTeW1ib2xUYWJsZUxldmVsICpzeW1UYWJsZUxldmVs
ID0gbmV3IFRTeW1ib2xUYWJsZUxldmVsKCk7CisgICAgdExldmVsOjppdGVyYXRvciBpdGVyOwor
ICAgIGZvciAoaXRlciA9IGxldmVsLmJlZ2luKCk7IGl0ZXIgIT0gbGV2ZWwuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBzeW1UYWJsZUxldmVsLT5pbnNlcnQoKml0ZXItPnNlY29uZC0+Y2xvbmUo
cmVtYXBwZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3ltVGFibGVMZXZlbDsKK30KKwordm9p
ZCBUU3ltYm9sVGFibGU6OmNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlPZikKK3sK
KyAgICBUU3RydWN0dXJlTWFwIHJlbWFwcGVyOworICAgIHVuaXF1ZUlkID0gY29weU9mLnVuaXF1
ZUlkOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnRhYmxlLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHRhYmxlLnB1c2hfYmFjayhjb3B5T2YudGFibGVbaV0tPmNsb25l
KHJlbWFwcGVyKSk7CisgICAgfQorICAgIGZvciggdW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29w
eU9mLnByZWNpc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHByZWNpc2lvblN0YWNr
LnB1c2hfYmFjayggY29weU9mLnByZWNpc2lvblN0YWNrW2ldICk7CisgICAgfQorfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1NZTUJPTF9UQUJMRV9J
TkNMVURFRF8KKyNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KKworLy8KKy8vIFN5bWJv
bCB0YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNpZ24gY2hhcmFjdGVyaXN0aWNzOgor
Ly8KKy8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVzZWQgdG8gY29tcGlsZSBtYW55IHNo
YWRlcnMsIHRvIHByZXNlcnZlCisvLyAgIGVmZm9ydCBvZiBjcmVhdGluZyBhbmQgbG9hZGluZyB3
aXRoIHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCisvLyAgIHN5bWJvbHMuCisvLworLy8g
KiBOYW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZlIGVhY2ggZnVuY3Rpb24gYSB1bmlx
dWUgbmFtZQorLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBsb29rdXBzIGFyZSBuZXZlciBhbWJp
Z3VvdXMuICBUaGlzIGFsbG93cworLy8gICBhIHNpbXBsZXIgc3ltYm9sIHRhYmxlIHN0cnVjdHVy
ZS4KKy8vCisvLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Ygc2NvcGUsIHNvIHN5bWJvbCB0YWJs
ZSB3aWxsIHJlYWxseSBiZSBhIHN0YWNrIAorLy8gICBvZiBzeW1ib2wgdGFibGVzLiAgU2VhcmNo
ZWQgZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdvaW5nIGludG8KKy8vICAgdGhlIHRv
cC4KKy8vCisvLyAqIENvbnN0YW50czogIENvbXBpbGUgdGltZSBjb25zdGFudCBzeW1ib2xzIHdp
bGwga2VlcCB0aGVpciB2YWx1ZXMKKy8vICAgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIFRoZSBwYXJz
ZXIgY2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNlCisvLyAgIHRpbWUsIGluY2x1ZGlu
ZyBkb2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFudCBwcm9wYWdhdGlvbi4KKy8vCisv
LyAqIE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFkZSBmcm9tIG9wZXJhdGlvbnMgKCss
IC0tLCAueHksIGV0Yy4pCisvLyAgIGFyZSB0cmFja2VkIGluIHRoZSBpbnRlcm1lZGlhdGUgcmVw
cmVzZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgorLy8KKworI2luY2x1ZGUgPGFzc2Vy
dC5oPgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKKy8vCisvLyBT
eW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvdXQg
b2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5bWJvbCB7ICAgIAorcHVibGljOgorICAgIFBPT0xf
QUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKyAgICBUU3ltYm9sKGNv
bnN0IFRTdHJpbmcgKm4pIDogIG5hbWUobikgeyB9CisgICAgdmlydHVhbCB+VFN5bWJvbCgpIHsg
LyogZG9uJ3QgZGVsZXRlIG5hbWUsIGl0J3MgZnJvbSB0aGUgcG9vbCAqLyB9CisgICAgY29uc3Qg
VFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuICpuYW1lOyB9CisgICAgdmlydHVhbCBj
b25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGdldE5hbWUoKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5pcXVlSWQgPSBpZDsgfQorICAgIGludCBn
ZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1ZUlkOyB9CisgICAgdmlydHVhbCB2b2lk
IGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QgPSAwOwkKKyAgICBUU3ltYm9sKGNvbnN0
IFRTeW1ib2wmKTsKKyAgICB2aXJ0dWFsIFRTeW1ib2wqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJl
bWFwcGVyKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBUU3RyaW5nICpuYW1lOworICAg
IHVuc2lnbmVkIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVhbCBjb21wYXJpbmcgZHVyaW5n
IGNvZGUgZ2VuZXJhdGlvbgorfTsKKworLy8KKy8vIFZhcmlhYmxlIGNsYXNzLCBtZWFuaW5nIGEg
c3ltYm9sIHRoYXQncyBub3QgYSBmdW5jdGlvbi4KKy8vIAorLy8gVGhlcmUgY291bGQgYmUgYSBz
ZXBhcmF0ZSBjbGFzcyBoZWlyYXJjaHkgZm9yIENvbnN0YW50IHZhcmlhYmxlczsKKy8vIE9ubHkg
b25lIG9mIGludCwgYm9vbCwgb3IgZmxvYXQsIChvciBub25lKSBpcyBjb3JyZWN0IGZvcgorLy8g
YW55IHBhcnRpY3VsYXIgdXNlLCBidXQgaXQncyBlYXN5IHRvIGRvIHRoaXMgd2F5LCBhbmQgZG9l
c24ndAorLy8gc2VlbSB3b3J0aCBoYXZpbmcgc2VwYXJhdGUgY2xhc3NlcywgYW5kICJnZXRDb25z
dCIgY2FuJ3Qgc2ltcGx5IHJldHVybgorLy8gZGlmZmVyZW50IHZhbHVlcyBmb3IgZGlmZmVyZW50
IHR5cGVzIHBvbHltb3JwaGljYWxseSwgc28gdGhpcyBpcyAKKy8vIGp1c3Qgc2ltcGxlIGFuZCBw
cmFnbWF0aWMuCisvLworY2xhc3MgVFZhcmlhYmxlIDogcHVibGljIFRTeW1ib2wgeworcHVibGlj
OgorICAgIFRWYXJpYWJsZShjb25zdCBUU3RyaW5nICpuYW1lLCBjb25zdCBUVHlwZSYgdCwgYm9v
bCB1VCA9IGZhbHNlICkgOiBUU3ltYm9sKG5hbWUpLCB0eXBlKHQpLCB1c2VyVHlwZSh1VCksIHVu
aW9uQXJyYXkoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApIHsgfQorICAgIHZpcnR1YWwgflRW
YXJpYWJsZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfSAgICAKKyAgICBUVHlwZSYgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0gICAg
CisgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAg
Ym9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KKyAgICB2b2lkIGNo
YW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLmNoYW5nZVF1YWxpZmll
cihxdWFsaWZpZXIpOyB9CisgICAgdm9pZCB1cGRhdGVBcnJheUluZm9ybWF0aW9uVHlwZShUVHlw
ZSAqdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KKyAgICBUVHlwZSogZ2V0QXJyYXlJ
bmZvcm1hdGlvblR5cGUoKSB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisKKyAgICBDb25z
dGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsgCisgICAgICAgIGlmICghdW5pb25B
cnJheSkKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdl
dE9iamVjdFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7CisgICAgfQorCisg
ICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25B
cnJheTsgfQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29u
c3RBcnJheSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlvbkFycmF5OworICAgICAgICB1bmlv
bkFycmF5ID0gY29uc3RBcnJheTsgIAorICAgIH0KKyAgICBUVmFyaWFibGUoY29uc3QgVFZhcmlh
YmxlJiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOyAvLyBjb3B5IGNvbnN0cnVjdG9yCisgICAg
dmlydHVhbCBUVmFyaWFibGUqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKworcHJv
dGVjdGVkOgorICAgIFRUeXBlIHR5cGU7CisgICAgYm9vbCB1c2VyVHlwZTsKKyAgICAvLyB3ZSBh
cmUgYXNzdW1pbmcgdGhhdCBQb29sIEFsbG9jYXRvciB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbGxv
Y2F0ZWQgdG8gdW5pb25BcnJheQorICAgIC8vIHdoZW4gdGhpcyBvYmplY3QgaXMgZGVzdHJveWVk
CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAgICBUVHlwZSAqYXJyYXlJbmZvcm1h
dGlvblR5cGU7ICAvLyB0aGlzIGlzIHVzZWQgZm9yIHVwZGF0aW5nIG1heEFycmF5U2l6ZSBpbiBh
bGwgdGhlIHJlZmVyZW5jZXMgdG8gYSBnaXZlbiBzeW1ib2wKK307CisKKy8vCisvLyBUaGUgZnVu
Y3Rpb24gc3ViLWNsYXNzIG9mIHN5bWJvbHMgYW5kIHRoZSBwYXJzZXIgd2lsbCBuZWVkIHRvCisv
LyBzaGFyZSB0aGlzIGRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCisvLworc3Ry
dWN0IFRQYXJhbWV0ZXIgeworICAgIFRTdHJpbmcgKm5hbWU7CisgICAgVFR5cGUqIHR5cGU7Cisg
ICAgdm9pZCBjb3B5UGFyYW0oY29uc3QgVFBhcmFtZXRlciYgcGFyYW0sIFRTdHJ1Y3R1cmVNYXAm
IHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHBhcmFtLm5h
bWUtPmNfc3RyKCkpOworICAgICAgICB0eXBlID0gcGFyYW0udHlwZS0+Y2xvbmUocmVtYXBwZXIp
OworICAgIH0KK307CisKKy8vCisvLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIGEgc3ltYm9s
LiAgCisvLworY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wgeworcHVibGljOgorICAg
IFRGdW5jdGlvbihUT3BlcmF0b3IgbykgOgorICAgICAgICBUU3ltYm9sKDApLAorICAgICAgICBy
ZXR1cm5UeXBlKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLAorICAgICAgICBvcChvKSwK
KyAgICAgICAgZGVmaW5lZChmYWxzZSkgeyB9CisgICAgVEZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcg
Km5hbWUsIFRUeXBlJiByZXRUeXBlLCBUT3BlcmF0b3IgdE9wID0gRU9wTnVsbCkgOiAKKyAgICAg
ICAgVFN5bWJvbChuYW1lKSwgCisgICAgICAgIHJldHVyblR5cGUocmV0VHlwZSksCisgICAgICAg
IG1hbmdsZWROYW1lKFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgqbmFtZSkpLAorICAgICAgICBvcCh0
T3ApLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIH5URnVuY3Rpb24o
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0g
ICAgCisKKyAgICBzdGF0aWMgVFN0cmluZyBtYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUp
IHsgcmV0dXJuIG5hbWUgKyAnKCc7IH0KKyAgICBzdGF0aWMgVFN0cmluZyB1bm1hbmdsZU5hbWUo
Y29uc3QgVFN0cmluZyYgbWFuZ2xlZE5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gVFN0cmlu
ZyhtYW5nbGVkTmFtZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5maW5kX2ZpcnN0X29mKCcoJykpOwor
ICAgIH0KKworICAgIHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJhbWV0ZXImIHApIAorICAgIHsgCisg
ICAgICAgIHBhcmFtZXRlcnMucHVzaF9iYWNrKHApOworICAgICAgICBtYW5nbGVkTmFtZSA9IG1h
bmdsZWROYW1lICsgcC50eXBlLT5nZXRNYW5nbGVkTmFtZSgpOworICAgIH0KKworICAgIGNvbnN0
IFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0K
KyAgICBjb25zdCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5
cGU7IH0KKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9
CisgICAgVE9wZXJhdG9yIGdldEJ1aWx0SW5PcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisgICAg
dm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJvb2wgaXNEZWZpbmVk
KCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgaW50IGdldFBhcmFtQ291bnQoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6ZSgpKTsgfSAgICAKKyAgICBU
UGFyYW1ldGVyJiBvcGVyYXRvciBbXShpbnQgaSkgICAgICAgeyByZXR1cm4gcGFyYW1ldGVyc1tp
XTsgfQorICAgIGNvbnN0IFRQYXJhbWV0ZXImIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7IHJl
dHVybiBwYXJhbWV0ZXJzW2ldOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1Npbmsg
JmluZm9TaW5rKSBjb25zdDsKKyAgICBURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiwgVFN0cnVj
dHVyZU1hcCYgcmVtYXBwZXIpOworICAgIHZpcnR1YWwgVEZ1bmN0aW9uKiBjbG9uZShUU3RydWN0
dXJlTWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIFRWZWN0b3I8VFBh
cmFtZXRlcj4gVFBhcmFtTGlzdDsKKyAgICBUUGFyYW1MaXN0IHBhcmFtZXRlcnM7CisgICAgVFR5
cGUgcmV0dXJuVHlwZTsKKyAgICBUU3RyaW5nIG1hbmdsZWROYW1lOworICAgIFRPcGVyYXRvciBv
cDsKKyAgICBib29sIGRlZmluZWQ7Cit9OworCisKK2NsYXNzIFRTeW1ib2xUYWJsZUxldmVsIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJvbCo+IHRMZXZlbDsKKyAg
ICB0eXBlZGVmIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlw
ZWRlZiBjb25zdCB0TGV2ZWw6OnZhbHVlX3R5cGUgdExldmVsUGFpcjsKKyAgICB0eXBlZGVmIHN0
ZDo6cGFpcjx0TGV2ZWw6Oml0ZXJhdG9yLCBib29sPiB0SW5zZXJ0UmVzdWx0OworCisgICAgUE9P
TF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorICAgIFRTeW1ib2xU
YWJsZUxldmVsKCkgeyB9CisgICAgflRTeW1ib2xUYWJsZUxldmVsKCk7CisKKyAgICBib29sIGlu
c2VydChUU3ltYm9sJiBzeW1ib2wpIAorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcmV0
dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRlZCB0byB0aGUgdGFibGUKKyAgICAgICAg
Ly8KKyAgICAgICAgdEluc2VydFJlc3VsdCByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IGxldmVs
Lmluc2VydCh0TGV2ZWxQYWlyKHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCAmc3ltYm9sKSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7CisgICAgfQorCisgICAgVFN5bWJvbCogZmlu
ZChjb25zdCBUU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgdExldmVsOjpjb25z
dF9pdGVyYXRvciBpdCA9IGxldmVsLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdCA9PSBsZXZl
bC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gKCppdCkuc2Vjb25kOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZXZlbC5iZWdpbigpOworICAgIH0KKwor
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2
ZWwuZW5kKCk7CisgICAgfQorCisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIq
IG5hbWUsIFRPcGVyYXRvciBvcCk7CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Npbmsp
IGNvbnN0OworICAgIFRTeW1ib2xUYWJsZUxldmVsKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1h
cHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2ZWwgbGV2ZWw7Cit9OworCitjbGFzcyBUU3lt
Ym9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkKKyAg
ICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVz
ZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CisgICAgICAgIC8vIHRoZSBsYWNrIG9mIGFu
IGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8v
IHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQt
aW5zLgorICAgICAgICAvLworICAgIH0KKworICAgIFRTeW1ib2xUYWJsZShUU3ltYm9sVGFibGUm
IHN5bVRhYmxlKQorICAgIHsKKyAgICAgICAgdGFibGUucHVzaF9iYWNrKHN5bVRhYmxlLnRhYmxl
WzBdKTsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKCBzeW1UYWJsZS5wcmVjaXNp
b25TdGFja1swXSApOworICAgICAgICB1bmlxdWVJZCA9IHN5bVRhYmxlLnVuaXF1ZUlkOworICAg
IH0KKworICAgIH5UU3ltYm9sVGFibGUoKQorICAgIHsKKyAgICAgICAgLy8gbGV2ZWwgMCBpcyBh
bHdheXMgYnVpbHQgSW4gc3ltYm9scywgc28gd2UgbmV2ZXIgcG9wIHRoYXQgb3V0CisgICAgICAg
IHdoaWxlICh0YWJsZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgcG9wKCk7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0
aGUgYnVpbHQtaW5zLCB0aGVyZSBzaG91bGQKKyAgICAvLyAncHVzaCcgY2FsbHMsIHNvIHRoYXQg
YnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCisgICAgLy8gZ2xvYmFscyBh
cmUgYXQgbGV2ZWwgMS4KKyAgICAvLworICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRhYmxl
LnNpemUoKSA9PSAwOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIGF0U2hh
cmVkQnVpbHRJbkxldmVsKCkgfHwgYXREeW5hbWljQnVpbHRJbkxldmVsKCk7IH0KKyAgICBib29s
IGF0U2hhcmVkQnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0JCisg
ICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpIDw9IDM7IH0KKyAg
ICB2b2lkIHB1c2goKQorICAgIHsgCisgICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcgVFN5bWJv
bFRhYmxlTGV2ZWwpOworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIFByZWNpc2lv
blN0YWNrTGV2ZWwoKSApOworICAgIH0KKworICAgIHZvaWQgcG9wKCkKKyAgICB7IAorICAgICAg
ICBkZWxldGUgdGFibGVbY3VycmVudExldmVsKCldOyAKKyAgICAgICAgdGFibGUucG9wX2JhY2so
KTsgCisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgYm9v
bCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLnNldFVuaXF1
ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCldLT5p
bnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJpbmcm
IG5hbWUsIGJvb2wqIGJ1aWx0SW4gPSAwLCBib29sICpzYW1lU2NvcGUgPSAwKSAKKyAgICB7Cisg
ICAgICAgIGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOworICAgICAgICBUU3ltYm9sKiBzeW1i
b2w7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+Zmlu
ZChuYW1lKTsKKyAgICAgICAgICAgIC0tbGV2ZWw7CisgICAgICAgIH0gd2hpbGUgKHN5bWJvbCA9
PSAwICYmIGxldmVsID49IDApOworICAgICAgICBsZXZlbCsrOworICAgICAgICBpZiAoYnVpbHRJ
bikKKyAgICAgICAgICAgICpidWlsdEluID0gbGV2ZWwgPT0gMDsKKyAgICAgICAgaWYgKHNhbWVT
Y29wZSkKKyAgICAgICAgICAgICpzYW1lU2NvcGUgPSBsZXZlbCA9PSBjdXJyZW50TGV2ZWwoKTsK
KyAgICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisKKyAgICBUU3ltYm9sVGFibGVMZXZlbCog
Z2V0R2xvYmFsTGV2ZWwoKSB7IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMyk7IHJldHVybiB0YWJs
ZVsyXTsgfQorICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3Bl
cmF0b3Igb3ApIHsgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0b3IobmFtZSwgb3ApOyB9CisgICAg
aW50IGdldE1heFN5bWJvbElkKCkgeyByZXR1cm4gdW5pcXVlSWQ7IH0KKyAgICB2b2lkIGR1bXAo
VEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgdm9pZCBjb3B5VGFibGUoY29uc3QgVFN5
bWJvbFRhYmxlJiBjb3B5T2YpOworCisgICAgdm9pZCBzZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFz
aWNUeXBlIHR5cGUsIFRQcmVjaXNpb24gcHJlYyApeworICAgICAgICBpZiggdHlwZSAhPSBFYnRG
bG9hdCAmJiB0eXBlICE9IEVidEludCApIHJldHVybjsgLy8gT25seSBzZXQgZGVmYXVsdCBwcmVj
aXNpb24gZm9yIGludC9mbG9hdAorICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKKyAgICAgICAgcHJlY2lz
aW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVtZW50XVt0eXBlXSA9IHByZWM7IC8vIFVzZXMgbWFwIG9w
ZXJhdG9yIFtdLCBvdmVyd3JpdGVzIHRoZSBjdXJyZW50IHZhbHVlCisgICAgfQorCisgICAgLy8g
U2VhcmNoZXMgZG93biB0aGUgcHJlY2lzaW9uU3RhY2sgZm9yIGEgcHJlY2lzaW9uIHF1YWxpZmll
ciBmb3IgdGhlIHNwZWNpZmllZCBUQmFzaWNUeXBlCisgICAgVFByZWNpc2lvbiBnZXREZWZhdWx0
UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworICAgICAgICBpZiggdHlwZSAhPSBFYnRGbG9h
dCAmJiB0eXBlICE9IEVidEludCApIHJldHVybiBFYnBVbmRlZmluZWQ7CisgICAgICAgIGludCBs
ZXZlbCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7CisgICAg
ICAgIGFzc2VydCggbGV2ZWwgPj0gMCk7IC8vIEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5vdCBo
YXBwZW4uCisgICAgICAgIFByZWNpc2lvblN0YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OworICAgICAg
ICBUUHJlY2lzaW9uIHByZWMgPSBFYnBVbmRlZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBhbnl0
aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hvdWxkIHdlIGVycm9yIGNoZWNrIHRoaXM/CisgICAgICAg
IHdoaWxlKCBsZXZlbCA+PSAwICl7CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xl
dmVsXS5maW5kKCB0eXBlICk7CisgICAgICAgICAgICBpZiggaXQgIT0gcHJlY2lzaW9uU3RhY2tb
bGV2ZWxdLmVuZCgpICl7CisgICAgICAgICAgICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxldmVsLS07
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCitwcm90ZWN0ZWQ6ICAg
IAorICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KHRhYmxlLnNpemUoKSkgLSAxOyB9CisgICAgYm9vbCBhdER5bmFtaWNCdWlsdEluTGV2ZWwoKSB7
IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMjsgfQorCisgICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRh
YmxlTGV2ZWwqPiB0YWJsZTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPCBUQmFzaWNUeXBlLCBUUHJl
Y2lzaW9uID4gUHJlY2lzaW9uU3RhY2tMZXZlbDsKKyAgICBzdGQ6OnZlY3RvcjwgUHJlY2lzaW9u
U3RhY2tMZXZlbCA+IHByZWNpc2lvblN0YWNrOworICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZv
ciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCit9OworCisjZW5kaWYg
Ly8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xT
TC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgorCitUcmFuc2xhdG9yR0xT
TDo6VHJhbnNsYXRvckdMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKQorICAgIDog
VENvbXBpbGVyKGxhbmcsIHNwZWMpIHsKK30KKworYm9vbCBUcmFuc2xhdG9yR0xTTDo6Y29tcGls
ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woaW5mb1Np
bmsub2JqKTsKKyAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJB
TlNMQVRPUkdMU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFRyYW5zbGF0b3JHTFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNs
YXRvckdMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaCIKKwor
I2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworVHJhbnNsYXRvckhMU0w6OlRyYW5z
bGF0b3JITFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykKKyAgICA6IFRDb21waWxl
cihsYW5nLCBzcGVjKQoreworfQorCitib29sIFRyYW5zbGF0b3JITFNMOjpjb21waWxlKFRJbnRl
cm1Ob2RlICpyb290KQoreworICAgIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dCA9ICpHZXRH
bG9iYWxQYXJzZUNvbnRleHQoKTsKKyAgICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNl
Q29udGV4dCk7CisKKyAgICBvdXRwdXRITFNMLm91dHB1dCgpOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SSExTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKworY2xhc3Mg
VHJhbnNsYXRvckhMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xh
dG9ySExTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpOworICAgIHZpcnR1YWwgYm9v
bCBjb21waWxlKFRJbnRlcm1Ob2RlKiByb290KTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUkhMU0xfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzA4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9UWVBFU19J
TkNMVURFRAorI2RlZmluZSBfVFlQRVNfSU5DTFVERUQKKworI2luY2x1ZGUgImNvbXBpbGVyL0Jh
c2VUeXBlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL2RlYnVnLmgiCisKKy8vCisvLyBOZWVkIHRvIGhhdmUgYXNzb2NpYXRpb24gb2YgbGluZSBu
dW1iZXJzIHRvIHR5cGVzIGluIGEgbGlzdCBmb3IgYnVpbGRpbmcgc3RydWN0cy4KKy8vCitjbGFz
cyBUVHlwZTsKK3N0cnVjdCBUVHlwZUxpbmUgeworICAgIFRUeXBlKiB0eXBlOworICAgIGludCBs
aW5lOworfTsKK3R5cGVkZWYgVFZlY3RvcjxUVHlwZUxpbmU+IFRUeXBlTGlzdDsKKworaW5saW5l
IFRUeXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCit7CisgICAgdm9pZCogbWVtb3J5ID0gR2xv
YmFsUG9vbEFsbG9jYXRvci5hbGxvY2F0ZShzaXplb2YoVFR5cGVMaXN0KSk7CisgICAgcmV0dXJu
IG5ldyhtZW1vcnkpIFRUeXBlTGlzdDsKK30KKworLy8KKy8vIFRoaXMgaXMgYSB3b3JrYXJvdW5k
IGZvciBhIHByb2JsZW0gd2l0aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKKy8vIHR5
cGVzIHRoYXQgaXQgdGhpbmtzIGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hv
dWxkCisvLyBqdXN0IGJlIHVzZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBh
bnl0aGluZyBlbHNlLiAgUG9pbnRlcnMKKy8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWlu
ZyB0byBhdm9pZCBsb3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgorLy8KKy8vIE5v
dCBhcyBiYWQgYXMgaXQgbG9va3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQg
dGhlIGZpZWxkcworLy8gbWF0Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcg
bGlrZSB0aGF0LgorLy8KK2NsYXNzIFRQdWJsaWNUeXBlIHsKK3B1YmxpYzoKKyAgICBUQmFzaWNU
eXBlIHR5cGU7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgVFByZWNpc2lvbiBwcmVj
aXNpb247CisgICAgaW50IHNpemU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJp
eCwgbm90IHNpemUgb2YgYXJyYXkKKyAgICBib29sIG1hdHJpeDsKKyAgICBib29sIGFycmF5Owor
ICAgIGludCBhcnJheVNpemU7CisgICAgVFR5cGUqIHVzZXJEZWY7CisgICAgaW50IGxpbmU7CisK
KyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0g
MCkKKyAgICB7CisgICAgICAgIHR5cGUgPSBidDsKKyAgICAgICAgcXVhbGlmaWVyID0gcTsKKyAg
ICAgICAgcHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOworICAgICAgICBzaXplID0gMTsKKyAgICAg
ICAgbWF0cml4ID0gZmFsc2U7CisgICAgICAgIGFycmF5ID0gZmFsc2U7CisgICAgICAgIGFycmF5
U2l6ZSA9IDA7CisgICAgICAgIHVzZXJEZWYgPSAwOworICAgICAgICBsaW5lID0gbG47CisgICAg
fQorCisgICAgdm9pZCBzZXRBZ2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQorICAgIHsK
KyAgICAgICAgc2l6ZSA9IHM7CisgICAgICAgIG1hdHJpeCA9IG07CisgICAgfQorCisgICAgdm9p
ZCBzZXRBcnJheShib29sIGEsIGludCBzID0gMCkKKyAgICB7CisgICAgICAgIGFycmF5ID0gYTsK
KyAgICAgICAgYXJyYXlTaXplID0gczsKKyAgICB9Cit9OworCit0eXBlZGVmIFRNYXA8VFR5cGVM
aXN0KiwgVFR5cGVMaXN0Kj4gVFN0cnVjdHVyZU1hcDsKK3R5cGVkZWYgVE1hcDxUVHlwZUxpc3Qq
LCBUVHlwZUxpc3QqPjo6aXRlcmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworLy8KKy8vIEJh
c2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgorLy8KK2NsYXNzIFRUeXBlIHsK
K3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCisgICAgZXhwbGljaXQgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFs
aWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgaW50IHMgPSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBh
ID0gZmFsc2UpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNp
b24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlT
aXplKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0
dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmll
bGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVj
aXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1h
dHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJy
YXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVk
KDApLCB0eXBlTmFtZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnVzZXJEZWYpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmco
cC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBleHBsaWNpdCBU
VHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24gcCA9
IEVicFVuZGVmaW5lZCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoRWJ0U3Ry
dWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0
cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJh
eVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQo
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xU
U3RyaW5nKG4uY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIGV4
cGxpY2l0IFRUeXBlKCkge30KKyAgICB2aXJ0dWFsIH5UVHlwZSgpIHt9CisKKyAgICBUVHlwZShj
b25zdCBUVHlwZSYgdHlwZSkgeyAqdGhpcyA9IHR5cGU7IH0KKworICAgIHZvaWQgY29weVR5cGUo
Y29uc3QgVFR5cGUmIGNvcHlPZiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCisgICAgeworICAg
ICAgICB0eXBlID0gY29weU9mLnR5cGU7CisgICAgICAgIHByZWNpc2lvbiA9IGNvcHlPZi5wcmVj
aXNpb247CisgICAgICAgIHF1YWxpZmllciA9IGNvcHlPZi5xdWFsaWZpZXI7CisgICAgICAgIHNp
emUgPSBjb3B5T2Yuc2l6ZTsKKyAgICAgICAgbWF0cml4ID0gY29weU9mLm1hdHJpeDsKKyAgICAg
ICAgYXJyYXkgPSBjb3B5T2YuYXJyYXk7CisgICAgICAgIGFycmF5U2l6ZSA9IGNvcHlPZi5hcnJh
eVNpemU7CisKKyAgICAgICAgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGlm
IChjb3B5T2Yuc3RydWN0dXJlKSB7CisgICAgICAgICAgICBpZiAoKGl0ZXIgPSByZW1hcHBlci5m
aW5kKHN0cnVjdHVyZSkpID09IHJlbWFwcGVyLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
Y3JlYXRlIHRoZSBuZXcgc3RydWN0dXJlIGhlcmUKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBOZXdQb29sVFR5cGVMaXN0KCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3B5T2Yuc3RydWN0dXJlLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7CisgICAgICAgICAgICAgICAgICAgIHR5cGVMaW5l
LmxpbmUgPSAoKmNvcHlPZi5zdHJ1Y3R1cmUpW2ldLmxpbmU7CisgICAgICAgICAgICAgICAgICAg
IHR5cGVMaW5lLnR5cGUgPSAoKmNvcHlPZi5zdHJ1Y3R1cmUpW2ldLnR5cGUtPmNsb25lKHJlbWFw
cGVyKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5wdXNoX2JhY2sodHlwZUxpbmUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IDA7CisKKyAgICAgICAgZmllbGROYW1lID0gMDsK
KyAgICAgICAgaWYgKGNvcHlPZi5maWVsZE5hbWUpCisgICAgICAgICAgICBmaWVsZE5hbWUgPSBO
ZXdQb29sVFN0cmluZyhjb3B5T2YuZmllbGROYW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlwZU5h
bWUgPSAwOworICAgICAgICBpZiAoY29weU9mLnR5cGVOYW1lKQorICAgICAgICAgICAgdHlwZU5h
bWUgPSBOZXdQb29sVFN0cmluZyhjb3B5T2YudHlwZU5hbWUtPmNfc3RyKCkpOworCisgICAgICAg
IG1hbmdsZWQgPSAwOworICAgICAgICBpZiAoY29weU9mLm1hbmdsZWQpCisgICAgICAgICAgICBt
YW5nbGVkID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLm1hbmdsZWQtPmNfc3RyKCkpOworCisgICAg
ICAgIHN0cnVjdHVyZVNpemUgPSBjb3B5T2Yuc3RydWN0dXJlU2l6ZTsKKyAgICAgICAgbWF4QXJy
YXlTaXplID0gY29weU9mLm1heEFycmF5U2l6ZTsKKyAgICAgICAgYXNzZXJ0KGNvcHlPZi5hcnJh
eUluZm9ybWF0aW9uVHlwZSA9PSAwKTsKKyAgICAgICAgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSAw
OyAvLyBhcnJheUluZm9ybWF0aW9uVHlwZSBzaG91bGQgbm90IGJlIHNldCBmb3IgYnVpbHRJbiBz
eW1ib2wgdGFibGUgbGV2ZWwKKyAgICB9CisKKyAgICBUVHlwZSogY2xvbmUoVFN0cnVjdHVyZU1h
cCYgcmVtYXBwZXIpCisgICAgeworICAgICAgICBUVHlwZSAqbmV3VHlwZSA9IG5ldyBUVHlwZSgp
OworICAgICAgICBuZXdUeXBlLT5jb3B5VHlwZSgqdGhpcywgcmVtYXBwZXIpOworCisgICAgICAg
IHJldHVybiBuZXdUeXBlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlKFRCYXNp
Y1R5cGUgdCwgaW50IHMsIGJvb2wgbSwgYm9vbCBhLCBpbnQgYVMgPSAwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgdHlwZSA9IHQ7IHNpemUgPSBzOyBtYXRyaXggPSBtOyBhcnJheSA9
IGE7IGFycmF5U2l6ZSA9IGFTOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFR5cGUoVEJhc2ljVHlw
ZSB0LCBpbnQgcywgYm9vbCBtLCBUVHlwZSogdXNlckRlZiA9IDApCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyB0eXBlID0gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emUgPSBzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4ID0gbTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyRGVmKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IHVzZXJEZWYtPmdldFN0cnVjdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXJyYXkgaW5mb3JtYXRpb24gaW50YWN0
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlw
ZU5hbWUoY29uc3QgVFN0cmluZyYgbikgeyB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19z
dHIoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmllbGROYW1lKGNvbnN0IFRTdHJpbmcmIG4p
IHsgZmllbGROYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgVFN0cmluZyYgZ2V0VHlwZU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0
KHR5cGVOYW1lKTsKKyAgICAgICAgcmV0dXJuICp0eXBlTmFtZTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGNvbnN0IFRTdHJpbmcmIGdldEZpZWxkTmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBh
c3NlcnQoZmllbGROYW1lKTsKKyAgICAgICAgcmV0dXJuICpmaWVsZE5hbWU7CisgICAgfQorCisg
ICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7
IH0KKyAgICB2aXJ0dWFsIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4g
cHJlY2lzaW9uOyB9CisgICAgdmlydHVhbCBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0
IHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VQcmVjaXNpb24o
VFByZWNpc2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdl
UXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUt
ZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQorICAgIHZpcnR1YWwgaW50
IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQorCisgICAgLy8gRnVsbC1k
aW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBlCisgICAgdmlydHVhbCBp
bnQgZ2V0SW5zdGFuY2VTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtYXRyaXgpCisg
ICAgICAgICAgICByZXR1cm4gc2l6ZSAqIHNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJldHVybiBzaXplOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0
IHsgcmV0dXJuIG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Fy
cmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgYm9vbCBp
c0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmllbGROYW1lICE9IDA7IH0KKyAgICBpbnQgZ2V0QXJy
YXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CisgICAgdm9pZCBzZXRBcnJheVNp
emUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBzZXRN
YXhBcnJheVNpemUgKGludCBzKSB7IG1heEFycmF5U2l6ZSA9IHM7IH0KKyAgICBpbnQgZ2V0TWF4
QXJyYXlTaXplICgpIGNvbnN0IHsgcmV0dXJuIG1heEFycmF5U2l6ZTsgfQorICAgIHZvaWQgY2xl
YXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFsc2U7IGFycmF5U2l6ZSA9IDA7IG1heEFycmF5U2l6
ZSA9IDA7IH0KKyAgICB2b2lkIHNldEFycmF5SW5mb3JtYXRpb25UeXBlKFRUeXBlKiB0KSB7IGFy
cmF5SW5mb3JtYXRpb25UeXBlID0gdDsgfQorICAgIFRUeXBlKiBnZXRBcnJheUluZm9ybWF0aW9u
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5SW5mb3JtYXRpb25UeXBlOyB9CisgICAgdmlydHVh
bCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA+IDEgJiYgIW1hdHJpeDsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAh
bWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljVHlwZSB0KSB7CisgICAgICAgIHN3aXRjaCAodCkgeworICAgICAgICBjYXNl
IEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJu
ICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEJvb2w6ICAgICAg
ICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOiAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4g
InN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25z
dCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFRUeXBlOjpnZXRCYXNpY1N0
cmluZyh0eXBlKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIDo6Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBj
aGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpOyB9CisgICAgVFR5cGVMaXN0KiBnZXRTdHJ1Y3QoKSB7IHJldHVybiBz
dHJ1Y3R1cmU7IH0KKworICAgIGludCBnZXRPYmplY3RTaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGludCB0b3RhbFNpemU7CisKKyAgICAgICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGdldFN0cnVjdFNpemUoKTsKKyAgICAgICAg
ZWxzZSBpZiAobWF0cml4KQorICAgICAgICAgICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7CisKKyAgICAgICAgaWYg
KGlzQXJyYXkoKSkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSAqPSBzdGQ6Om1heChnZXRBcnJheVNp
emUoKSwgZ2V0TWF4QXJyYXlTaXplKCkpOworCisgICAgICAgIHJldHVybiB0b3RhbFNpemU7Cisg
ICAgfQorCisgICAgVFR5cGVMaXN0KiBnZXRTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBzdHJ1Y3R1
cmU7IH0KKyAgICBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKKyAgICAgICAgaWYgKCFtYW5n
bGVkKSB7CisgICAgICAgICAgICBtYW5nbGVkID0gTmV3UG9vbFRTdHJpbmcoIiIpOworICAgICAg
ICAgICAgYnVpbGRNYW5nbGVkTmFtZSgqbWFuZ2xlZCk7CisgICAgICAgICAgICAqbWFuZ2xlZCAr
PSAnOycgOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICptYW5nbGVkOworICAgIH0KKyAg
ICBib29sIHNhbWVFbGVtZW50VHlwZShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAg
ICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgJiYKKyAgICAgICAgICAgICAgICAg
ICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYKKyAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSBy
aWdodC5tYXRyaXggJiYKKyAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1
cmU7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgJiYKKyAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYKKyAgICAgICAgICAgICAgICAgIG1h
dHJpeCA9PSByaWdodC5tYXRyaXggJiYKKyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdo
dC5hcnJheSAgJiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgor
ICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKKyAgICAgICAgLy8g
ZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291
Z2h0IGFmdGVyCisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUVHlwZSYgcmlnaHQp
IGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHJpZ2h0KTsKKyAgICB9CisgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIGlmICh0
eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKKyAgICAgICAgaWYg
KHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOworICAgICAgICBp
ZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsK
KyAgICAgICAgaWYgKGFycmF5ICE9IHJpZ2h0LmFycmF5KSByZXR1cm4gYXJyYXkgPCByaWdodC5h
cnJheTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZSAhPSByaWdodC5hcnJheVNpemUpIHJldHVybiBh
cnJheVNpemUgPCByaWdodC5hcnJheVNpemU7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gcmln
aHQuc3RydWN0dXJlKSByZXR1cm4gc3RydWN0dXJlIDwgcmlnaHQuc3RydWN0dXJlOworCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygp
IGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcm
KTsKKyAgICBpbnQgZ2V0U3RydWN0U2l6ZSgpIGNvbnN0OworCisgICAgVEJhc2ljVHlwZSB0eXBl
ICAgICAgOiA2OworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyIDogNzsKKyAgICBpbnQgc2l6ZSAgICAgICAgICAgICA6IDg7IC8vIHNpemUgb2YgdmVj
dG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbWF0cml4
ICA6IDE7CisgICAgdW5zaWduZWQgaW50IGFycmF5ICAgOiAxOworICAgIGludCBhcnJheVNpemU7
CisKKyAgICBUVHlwZUxpc3QqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEg
c3RydWN0CisgICAgbXV0YWJsZSBpbnQgc3RydWN0dXJlU2l6ZTsKKyAgICBpbnQgbWF4QXJyYXlT
aXplOworICAgIFRUeXBlKiBhcnJheUluZm9ybWF0aW9uVHlwZTsKKyAgICBUU3RyaW5nICpmaWVs
ZE5hbWU7ICAgICAgICAgLy8gZm9yIHN0cnVjdHVyZSBmaWVsZCBuYW1lcworICAgIFRTdHJpbmcg
Km1hbmdsZWQ7CisgICAgVFN0cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1
cmUgZmllbGQgdHlwZSBuYW1lCit9OworCisjZW5kaWYgLy8gX1RZUEVTX0lOQ0xVREVEXwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKK25hbWVzcGFjZSBzaAoreworVW5m
b2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExT
TCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExT
TCkKK3sKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOworfQorCit2b2lkIFVuZm9sZFNlbGVjdDo6
dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbVRlbXBvcmFyeUluZGV4Kys7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKK2Jvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOworCisgICAgaWYg
KG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIGludCBpID0gbVRl
bXBvcmFyeUluZGV4Kys7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5n
KG5vZGUtPmdldFR5cGUoKSkgPDwgIiB0IiA8PCBpIDw8ICI7XG4iOworCisgICAgICAgIG5vZGUt
PmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICJpZigiOwor
ICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAg
ICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBub2RlLT5n
ZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHQiIDw8
IGkgPDwgIiA9ICI7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0
cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICJlbHNlXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICB0
IiA8PCBpIDw8ICIgPSAiOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxu
IjsKKworICAgICAgICBtVGVtcG9yYXJ5SW5kZXgtLTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludCBVbmZvbGRTZWxlY3Q6OmdldFRlbXBvcmFyeUluZGV4KCkKK3sKKyAgICBy
ZXR1cm4gbVRlbXBvcmFyeUluZGV4OworfQorfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlh
dGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gK
K3sKK2NsYXNzIE91dHB1dEhMU0w7CisKK2NsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50
ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4
dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKKworICAgIGludCBnZXRUZW1wb3JhcnlJbmRleCgp
OworCisgIHByb3RlY3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBPdXRw
dXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Cit9
OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9kZWJ1
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9kZWJ1Zy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmNwcDogRGVidWdnaW5nIHV0aWxpdGllcy4KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworc3RhdGlj
IGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OworCisjaWZkZWYgVFJBQ0VfRU5BQkxF
RAorZXh0ZXJuICJDIiB7Cit2b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7Cisg
ICAgaWYgKCFmb3JtYXQpIHJldHVybjsKKworICAgIFRQYXJzZUNvbnRleHQqIHBhcnNlQ29udGV4
dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIGlmIChwYXJzZUNvbnRleHQpIHsKKyAg
ICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKKyAgICAgICAgdmFfbGlzdCBhcmdzOwor
ICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICB2c25wcmludGYoYnVmLCBr
VHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKwor
ICAgICAgICBwYXJzZUNvbnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsKKyAgICB9Cit9Cit9
ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vIFRSQUNFX0VOQUJMRUQKKwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvZGVidWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9kZWJ1Zy5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29t
cGlsZXIvZGVidWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gZGVidWcuaDogRGVidWdnaW5nIHV0aWxpdGllcy4KKworI2lmbmRlZiBDT01Q
SUxFUl9ERUJVR19IXworI2RlZmluZSBDT01QSUxFUl9ERUJVR19IXworCisjaW5jbHVkZSA8YXNz
ZXJ0Lmg+CisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgVFJBQ0VfRU5BQkxFRCAgLy8gZGVmaW5l
IHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlIHRyYWNpbmcKKyNlbmRpZiAgLy8gX0RFQlVHCisKKy8v
IE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWcgbG9nCisjaWZkZWYgVFJBQ0VfRU5BQkxFRAorCisj
aWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMK
K3ZvaWQgVHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworI2lmZGVmICBfX2NwbHVzcGx1
cworfQorI2VuZGlmICAvLyBfX2NwbHVzcGx1cworCisjZWxzZSAgIC8vIFRSQUNFX0VOQUJMRUQK
KworI2RlZmluZSBUcmFjZSguLi4pICgodm9pZCkwKQorCisjZW5kaWYgIC8vIFRSQUNFX0VOQUJM
RUQKKworLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFp
bHVyZXMgdG8gdGhlIGRlYnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8geyBc
CisgICAgaWYoIShleHByZXNzaW9uKSkgXAorICAgICAgICBUcmFjZSgiQXNzZXJ0IGZhaWxlZDog
JXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAg
IGFzc2VydChleHByZXNzaW9uKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFVOSU1QTEVNRU5U
RUQoKSBkbyB7IFwKKyAgICBUcmFjZSgiVW5pbXBsZW1lbnRlZCBpbnZva2VkOiAlcyglZClcbiIs
IF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNlKTsgXAorfSB3aGls
ZSgwKQorCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCisgICAgVHJhY2UoIlVucmVhY2hh
YmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBh
c3NlcnQoZmFsc2UpOyBcCit9IHdoaWxlKDApCisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RFQlVH
X0hfCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjAwIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyovCisvKiBCYXNlZCBvbgorQU5T
SSBDIGdyYW1tYXIsIExleCBzcGVjaWZpY2F0aW9uCisKK0luIDE5ODUsIEplZmYgTGVlIHB1Ymxp
c2hlZCB0aGlzIExleCBzcGVjaWZpY2F0aW9uIHRvZ2V0aGVyIHdpdGggYSBZYWNjIAorZ3JhbW1h
ciBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IEFOU0kgQyBkcmFmdC4gIFRvbSBTdG9ja2Zpc2NoIHJl
cG9zdGVkIAorYm90aCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0IG9yaWdpbmFsLCBhcyBt
ZW50aW9uZWQgaW4gdGhlIGFuc3dlciAKK3RvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21wLmxh
bmcuYyBGQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCAKK2ZpbGUgdXNlbmV0L25l
dC5zb3VyY2VzL2Fuc2kuYy5ncmFtbWFyLlouIAorCitJIGludGVuZCB0byBrZWVwIHRoaXMgdmVy
c2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgCithcyBwb3Nz
aWJsZTsgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLiAK
KworSnV0dGEgRGVnZW5lciwgMTk5NSAKKyovCisKK0QgICAgICAgICAgIFswLTldCitMICAgICAg
ICAgICBbYS16QS1aX10KK0ggICAgICAgICAgIFthLWZBLUYwLTldCitFICAgICAgICAgICBbRWVd
WystXT97RH0rCitPICAgICAgICAgICBbMC03XQorCislb3B0aW9uIG5vdW5wdXQgCisleworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mg
b25seSBwcmFnbWEgKi8KKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUg
OiA0MTAyKQorI2VuZGlmCisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7
CisKK2V4dGVybiBpbnQgeXlwYXJzZSh2b2lkKik7CisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4
KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQorI2RlZmluZSBwYXJz
ZUNvbnRleHQgKCooKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpKQorIAorI2Rl
ZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSAocmVzdWx0ID0geXlfaW5wdXQoYnVm
LCBtYXhfc2l6ZSkpCisKKyV9CisKKy8qCitUT0RPKGFsb2twKTogeXlsaW5lbm8gaXMgb25seSBo
ZXJlIHRvIHN1cHBvcnQgb2xkIGZsZXguZXhlIGluIGNvbXBpbGVyL3Rvb2xzLgorUmVtb3ZlIGl0
IHdoZW4gd2UgY2FuIGV4Y2x1c2l2ZWx5IHVzZSB0aGUgbmV3ZXIgdmVyc2lvbi4KKyovCislb3B0
aW9uIHl5bGluZW5vCisKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3Rp
dmUKKyV4IEZJRUxEUworCisKKyUlCis8Kj4iLy8iW15cbl0qIlxuIiAgICAgeyAvKiA/PyBjYXJy
aWFnZSBhbmQvb3IgbGluZS1mZWVkPyAqLyB9OworCisiaW52YXJpYW50IiAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQorImhpZ2hwIiAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEhJR0hfUFJFQ0lTSU9O
KTsgfQorIm1lZGl1bXAiICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKE1FRElVTV9QUkVDSVNJT04pOyB9CisibG93cCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKyJwcmVjaXNpb24iICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQUkVDSVNJT04pOyB9CisK
KyJhdHRyaWJ1dGUiICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihB
VFRSSUJVVEUpOyB9CisiY29uc3QiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oQ09OU1RfUVVBTCk7IH0KKyJ1bmlmb3JtIiAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihVTklGT1JNKTsgfQorInZhcnlpbmciICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZBUllJTkcpOyB9CisKKyJicmVh
ayIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihCUkVBSyk7
IH0KKyJjb250aW51ZSIgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihDT05USU5VRSk7IH0KKyJkbyIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihETyk7IH0KKyJmb3IiICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihGT1IpOyB9Cisid2hpbGUiICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oV0hJTEUpOyB9CisKKyJpZiIgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJRik7IH0KKyJlbHNlIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihFTFNFKTsgfQorCisi
aW4iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5f
UVVBTCk7IH0KKyJvdXQiICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihPVVRfUVVBTCk7IH0KKyJpbm91dCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihJTk9VVF9RVUFMKTsgfQorCisiZmxvYXQiICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuKEZMT0FUX1RZUEUpOyB9CisiaW50IiAgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0
dXJuKElOVF9UWVBFKTsgfQorInZvaWQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihWT0lEX1RZ
UEUpOyB9CisiYm9vbCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
YXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0KKyJ0
cnVlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxl
eC5iID0gdHJ1ZTsgIHJldHVybihCT09MQ09OU1RBTlQpOyB9CisiZmFsc2UiICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1
cm4oQk9PTENPTlNUQU5UKTsgfQorCisiZGlzY2FyZCIgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oRElTQ0FSRCk7IH0KKyJyZXR1cm4iICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSRVRVUk4pOyB9CisKKyJtYXQyIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRl
clR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMik7IH0KKyJtYXQzIiAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4oTUFUUklYMyk7IH0KKyJtYXQ0IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFU
UklYNCk7IH0KKworInZlYzIiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDMik7IH0KKyJ2
ZWMzIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4
dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzMpOyB9CisidmVjNCIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChWRUM0KTsgfQorIml2ZWMyIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
biAoSVZFQzIpOyB9CisiaXZlYzMiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDMyk7IH0K
KyJpdmVjNCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUM0KTsgfQorImJ2ZWMyIiAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzIpOyB9CisiYnZlYzMiICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsg
cmV0dXJuIChCVkVDMyk7IH0KKyJidmVjNCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUM0
KTsgfQorCisic2FtcGxlcjJEIiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVIyRDsgfQor
InNhbXBsZXJDdWJlIiAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCisic3Ry
dWN0IiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQu
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFNUUlVDVCk7IH0KKworImFzbSIgICAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImNsYXNzIiAgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ1bmlvbiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisiZW51bSIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorInR5cGVkZWYiICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJ0ZW1wbGF0ZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidGhp
cyIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInBhY2tlZCIgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImdvdG8iICAgICAgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJzd2l0Y2giICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZGVmYXVsdCIgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorCisiaW5saW5lIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorIm5vaW5saW5lIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJ2b2xhdGlsZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisicHVibGlj
IiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInN0YXRpYyIgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJleHRlcm4iICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZXh0ZXJuYWwiICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImludGVyZmFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKworImxvbmciICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJzaG9ydCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZG91
YmxlIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImhhbGYiICAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJmaXhlZCIgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidW5zaWduZWQiICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCisiaW5wdXQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorIm91dHB1dCIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKworImh2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJodmVjMyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaHZlYzQi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZ2ZWMyIiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJmdmVjMyIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZnZlYzQiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImR2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJkdmVjMyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZHZlYzQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisic2l6
ZW9mIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImNhc3QiICAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworIm5hbWVzcGFjZSIgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ1c2luZyIgICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeyAgCisgICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyAKKyAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQ
b29sVFN0cmluZyh5eXRleHQpOyAKKyAgIHJldHVybiBQYUlkZW50T3JUeXBlKCpweXlsdmFsLT5s
ZXguc3RyaW5nLCBwYXJzZUNvbnRleHQsIHB5eWx2YWwtPmxleC5zeW1ib2wpOyAKK30KKworMFt4
WF17SH0rICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5s
ZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ciswe099
KyAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxl
eC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKzB7RH0r
ICAgICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIp
OyBwYXJzZUNvbnRleHQucmVjb3ZlcigpOyByZXR1cm4gMDt9Cit7RH0rICAgICAgICAgICAgICB7
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5
dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwore0R9K3tFfSAgICAgICAgICAg
eyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KK3tEfSsi
LiJ7RH0qKHtFfSk/IHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4
LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RB
TlQpOyB9CisiLiJ7RH0rKHtFfSk/ICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQorCisiLyoiICAgICAgICAgICAgeyAgaW50IHJldCA9IFBhUGFy
c2VDb21tZW50KHB5eWx2YWwtPmxleC5saW5lLCBwYXJzZUNvbnRleHQpOyBpZiAoIXJldCkgcmV0
dXJuIHJldDsgfSAgIAorCisiKz0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKEFERF9BU1NJR04pOyB9CisiLT0iICAgICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNVQl9BU1NJR04pOyB9CisiKj0iICAgICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1VTF9BU1NJR04p
OyB9CisiLz0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKERJVl9BU1NJR04pOyB9CisiJT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKE1PRF9BU1NJR04pOyB9CisiPDw9IiAgICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFRlRfQVNTSUdOKTsgfQorIj4+PSIg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9B
U1NJR04pOyB9CisiJj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKEFORF9BU1NJR04pOyB9CisiXj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFhPUl9BU1NJR04pOyB9CisifD0iICAgICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX0FTU0lHTik7IH0KKwor
IisrIiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJ
TkNfT1ApOyB9CisiLS0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKERFQ19PUCk7IH0KKyImJiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oQU5EX09QKTsgfQorInx8IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPUl9PUCk7IH0KKyJeXiIgICAgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oWE9SX09QKTsgfQorIjw9
IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRV9P
UCk7IH0KKyI+PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oR0VfT1ApOyB9CisiPT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKEVRX09QKTsgfQorIiE9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihORV9PUCk7IH0KKyI8PCIgICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9PUCk7IH0KKyI+PiIgICAg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfT1Ap
OyB9CisiOyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CisoInsifCI8
JSIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KKygifSJ8IiU+IikgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9
CisiLCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBpZiAocGFyc2VD
b250ZXh0LmluVHlwZVBhcmVuKSBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJl
dHVybihDT01NQSk7IH0KKyI6IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihDT0xPTik7IH0KKyI9IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFM
KTsgfQorIigiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSB0
cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7IH0KKyIpIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4o
UklHSFRfUEFSRU4pOyB9CisoIlsifCI8OiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KKygiXSJ8Ijo+IikgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KKyIuIiAg
ICAgICAgIHsgQkVHSU4oRklFTERTKTsgIHJldHVybihET1QpOyB9CisiISIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQkFORyk7IH0KKyItIiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihEQVNIKTsgfQorIn4iICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERFKTsgfQor
IisiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBMVVMp
OyB9CisiKiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
U1RBUik7IH0KKyIvIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihTTEFTSCk7IH0KKyIlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihQRVJDRU5UKTsgfQorIjwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKExFRlRfQU5HTEUpOyB9CisiPiIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CisifCIgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkVSVElDQUxfQkFSKTsg
fQorIl4iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENB
UkVUKTsgfQorIiYiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKEFNUEVSU0FORCk7IH0KKyI/IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihRVUVTVElPTik7IH0KKworPEZJRUxEUz57TH0oe0x9fHtEfSkqIHsgCitC
RUdJTihJTklUSUFMKTsgICAgICAKKyAgICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyAg
ICAgCisgICAgcHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAor
ICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJT047IH0KKzxGSUVMRFM+WyBcdFx2XGZccl0ge30KKwor
WyBcdFx2XG5cZlxyXSAgIHsgIH0KKzwqPjw8RU9GPj4geyAoJnBhcnNlQ29udGV4dCktPkFmdGVy
RU9GID0gdHJ1ZTsgeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7IHl5dGVybWlu
YXRlKCk7fQorPCo+LiAgICB7IHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8ICJGTEVYOiBV
bmtub3duIGNoYXIgIiA8PCB5eXRleHQgPDwgIlxuIjsKKyAgICAgICAgICByZXR1cm4gMDsgfQor
CislJQorCisKKy8vSW5jbHVkaW5nIFByZS1wcm9jZXNzb3IuCitleHRlcm4gIkMiIHsKKyAgI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCit9IAorCisvLworLy8g
VGhlIFlZX0lOUFVUIG1hY3JvIGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRoaXMgY291bGQgYmUg
anVzdCBwdXQgaW50bworLy8gdGhlIG1hY3JvIGRpcmVjdGx5LgorLy8KKworaW50IHl5X2lucHV0
KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplKQoreworICAgIGludCBsZW47CisKKyAgICBpZiAoKGxl
biA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQg
YnVmZmVyIG92ZXJmbG93LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNl
cyBSRUpFQ1QiICk7CisKKyAgICBidWZbbGVuXSA9ICcgJzsKKwlyZXR1cm4gbGVuKzE7Cit9CisK
KworLy8KKy8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4gIFdlIHNl
dCB1cCBnbG9iYWxzIHVzZWQgYnkKKy8vIHl5d3JhcC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1
Y2Nlc3MsIGFzIHBlciB5eXBhcnNlKCkuCisvLworaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFy
Z3ZbXSwgaW50IHN0ckxlbltdLCBpbnQgYXJnYywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0
TG9jYWwpCit7CisgICAgaW50IGFyZ3YwbGVuOworICAgIAorICAgIFNjYW5Gcm9tU3RyaW5nKGFy
Z3ZbMF0pOyAKKyAgICAKKyAgICAvL1N0b3JpbmcgdGhlIEN1cnJlbnQgQ29tcGlsZXIgUGFyc2Ug
Y29udGV4dCBpbnRvIHRoZSBjcHAgc3RydWN0dXJlLgorCWNwcC0+cEMgPSAodm9pZCopJnBhcnNl
Q29udGV4dExvY2FsOworCQorCWlmICghYXJndiB8fCBhcmdjID09IDApCisgICAgICAgIHJldHVy
biAxOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAg
IGlmICghYXJndltpXSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwuZXJyb3IoMCwg
Ik51bGwgc2hhZGVyIHNvdXJjZSBzdHJpbmciLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0TG9jYWwucmVjb3ZlcigpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKCFzdHJMZW4pIHsKKyAgICAgICAgYXJndjBsZW4gPSAoaW50
KSBzdHJsZW4oYXJndlswXSk7CisgICAgICAgIHN0ckxlbiAgID0gJmFyZ3YwbGVuOworICAgIH0K
KyAgICB5eXJlc3RhcnQoMCk7CisgICAgKCZwYXJzZUNvbnRleHRMb2NhbCktPkFmdGVyRU9GID0g
ZmFsc2U7CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBh
cmd2OworICAgIGNwcC0+UGFBcmdjICAgICA9IGFyZ2M7CisgICAgY3BwLT5QYVN0ckxlbiAgID0g
c3RyTGVuOworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKyAgICB5eWxpbmVubyAg
ID0gMTsKKyAgIAorICAgIGlmICgqY3BwLT5QYVN0ckxlbiA+PSAwKSB7ICAgIAorICAgICAgICBp
bnQgcmV0ID0geXlwYXJzZSgodm9pZCopKCZwYXJzZUNvbnRleHRMb2NhbCkpOworICAgICAgICBp
ZiAoY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRG
cm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkKKyAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoY2hhciAqcykg
Cit7CisgICAgaWYgKCgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5BZnRlckVPRikgeworICAg
ICAgICBpZiAoY3BwLT50b2tlbnNCZWZvcmVFT0YgPT0gMSkgeworICAgICAgICAgICAgR2xvYmFs
UGFyc2VDb250ZXh0LT5lcnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsICJwcmUtbWF0dXJl
IEVPRiIsIHMsICIiKTsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5l
cnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsIHl5dGV4dCwgcywgIiIpOworICAgICAgICBH
bG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9ICAgICAgICAgICAgCit9CisKK3Zv
aWQgUGFSZXNlcnZlZFdvcmQoKQoreworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sICJSZXNlcnZlZCB3b3JkLiIsIHl5dGV4dCwgIiIsICIiKTsKKyAgICBHbG9iYWxQYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IFBhSWRlbnRPclR5cGUoVFN0cmluZyYgaWQs
IFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsLCBUU3ltYm9sKiYgc3ltYm9sKQorewor
ICAgIHN5bWJvbCA9IHBhcnNlQ29udGV4dExvY2FsLnN5bWJvbFRhYmxlLmZpbmQoaWQpOworICAg
IGlmIChwYXJzZUNvbnRleHRMb2NhbC5sZXhBZnRlclR5cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYm
IHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBz
dGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlz
VXNlclR5cGUoKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBUWVBFX05BTUU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIElERU5USUZJRVI7Cit9CisKK2ludCBQYVBhcnNlQ29tbWVudChp
bnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCit7CisgICAgaW50
IHRyYW5zaXRpb25GbGFnID0gMDsKKyAgICBpbnQgbmV4dENoYXI7CisgICAgCisgICAgd2hpbGUg
KHRyYW5zaXRpb25GbGFnICE9IDIpIHsKKyAgICAgICAgbmV4dENoYXIgPSB5eWlucHV0KCk7Cisg
ICAgICAgIGlmIChuZXh0Q2hhciA9PSAnXG4nKQorICAgICAgICAgICAgIGxpbmVubysrOworICAg
ICAgICBzd2l0Y2ggKG5leHRDaGFyKSB7CisgICAgICAgIGNhc2UgJyonIDoKKyAgICAgICAgICAg
IHRyYW5zaXRpb25GbGFnID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcv
JyA6ICAvKiBpZiBzdGFyIGlzIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIsIHRoZW4gaXQgaXMgdGhl
IGVuZCBvZiBjb21tZW50ICovCisgICAgICAgICAgICBpZiAodHJhbnNpdGlvbkZsYWcgPT0gMSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAxIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPRiA6CisgICAgICAgICAgICAvKiBSYWlzZSBlcnJvciBt
ZXNzYWdlIGhlcmUgKi8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKHl5bGlu
ZW5vLCAiRW5kIG9mIHNoYWRlciBmb3VuZCBiZWZvcmUgZW5kIG9mIGNvbW1lbnQuIiwgIiIsICIi
LCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBZWV9OVUxMOyAKKyAgICAgICAgZGVmYXVsdCA6ICAvKiBBbnkgb3RoZXIg
Y2hhcmFjdGVyIHdpbGwgYmUgYSBwYXJ0IG9mIHRoZSBjb21tZW50ICovCisgICAgICAgICAgICB0
cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisK
K2V4dGVybiAiQyIgeworCit2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sK
KyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShF
UHJlZml4Tm9uZSwgbXNnKTsKK30KKwordm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2csIHl5bGluZW5vKTsgCit9CisKK3ZvaWQgQ1BQ
U2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sIiIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNn
KQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5lcnJvcih5eWxpbmVubywic3lu
dGF4IGVycm9yIiwgIiIsbXNnLCIiKTsKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKK30KKwordm9pZCBTZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5bGluZW5vICY9
IH5Tb3VyY2VMb2NMaW5lTWFzazsKKyAgICB5eWxpbmVubyB8PSBsaW5lOworfQorCit2b2lkIFNl
dFN0cmluZ051bWJlcihpbnQgc3RyaW5nKQoreworICAgIHl5bGluZW5vID0gKHN0cmluZyA8PCBT
b3VyY2VMb2NTdHJpbmdTaGlmdCkgfCAoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzayk7Cit9
CisKK2ludCBHZXRTdHJpbmdOdW1iZXIodm9pZCkKK3sKKyAgICByZXR1cm4geXlsaW5lbm8gPj4g
MTY7Cit9CisKK2ludCBHZXRMaW5lTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5v
ICYgU291cmNlTG9jTGluZU1hc2s7Cit9CisKK3ZvaWQgSW5jTGluZU51bWJlcih2b2lkKQorewor
ICAgIGlmICgoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPD0gU291cmNlTG9jTGluZU1h
c2spCisgICAgICAgICsreXlsaW5lbm87Cit9CisKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKQor
eworICAgIGlmICgoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPiAwKQorICAgICAgICAt
LXl5bGluZW5vOworfQorCit2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBp
bnQgbnVtVG9rZW5zKQoreyAgICAKKyAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6
ZSIpKSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKHRv
a2Vuc1sxXSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBl
Y3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9u
IikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdt
YS5vcHRpbWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAi
b2ZmIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFBy
YWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0
aW1pemUnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0
b2tlbnNbMF0sICJkZWJ1ZyIpKSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVj
dCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29u
dGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5z
WzJdLCAib2ZmIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29u
dGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAn
ZGVidWcnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisKKyNpZmRlZiBQUkFH
TUFfVEFCTEUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMg
cHJhZ21hCisgICAgICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4
dFByYWdtYS5wcmFnbWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21h
CisgICAgICAgIC8vIEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1w
bGVtZW50YXRpb24gY2Fubm90IHJlY29nbml6ZQorICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9u
ZSBzdWNoIGltcGxlbWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtl
CisgICAgICAgIC8vICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKKyAgICAgICAgLy8g
VGhpcyBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5z
dCB0aGUgcHJhZ21hIG5hbWUgaW4gcHJhZ21hVGFibGUuCisgICAgICAgIC8vICAgICAgICAKKyAg
ICAgICAgaWYgKG51bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFz
dHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFRQcmFn
bWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4
dFByYWdtYS5wcmFnbWFUYWJsZTsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3Ig
aXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5z
WzBdKSk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJd
OworICAgICAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49
IDIpIHsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKKyAgICAgICAgICAg
IFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFU
YWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBw
cmFnbWFUYWJsZS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vu
c1sxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJhZ21hVGFibGVb
IHRva2Vuc1swXSBdID0gdG9rZW5zWzFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k
aWYgLy8gUFJBR01BX1RBQkxFCisgICAgfQorfQorCit2b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmlu
ZykKK3sKKyAgICBUU3RyaW5nIHN0clNyYzsKKyAgICBzdHJTcmMgPSBUU3RyaW5nKHN0cmluZyk7
CisKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyA9ICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnICsgIiAiICsgc3RyU3JjOworfQorCitjb25z
dCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQoreworICAgIGNwcC0+RXJyTXNnID0gKCgoVFBh
cnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnKS5jX3N0cigpOworICAgIHJldHVybiBj
cHAtPkVyck1zZzsKK30KKwordm9pZCBSZXNldFRTdHJpbmcodm9pZCkKK3sKKyAgICAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyA9ICIiOworfQorCitUQmVoYXZpb3IgR2V0
QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgaWYgKCFzdHJjbXAoInJlcXVp
cmUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYg
KCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsK
KyAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1
cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQor
ICAgICAgICByZXR1cm4gRUJoV2FybjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0
ZWQiKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgfSAgICAgICAg
Cit9CisKK3ZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUs
IGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdl
dEJlaGF2aW9yKGJlaGF2aW9yKTsKKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVy
YXRvciBpdGVyOworICAgIFRTdHJpbmcgbXNnOworICAgIAorICAgIC8vIHNwZWNpYWwgY2FzZWQg
Zm9yIGFsbCBleHRlbnNpb24KKyAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKKyAg
ICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJo
RW5hYmxlKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBj
YW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpdGVyID0gICgo
VFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVy
ICE9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKQorICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAg
ICAgICB9ICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBpdGVyID0gKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7
CisgICAgICAgIGlmIChpdGVyID09ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNp
b25CZWhhdmlvci5lbmQoKSkgeworICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewor
ICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9y
dGVkIikuY19zdHIoKSk7ICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRUJoRW5hYmxlOgorICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgorICAgICAgICAgICAgY2Fz
ZSBFQmhEaXNhYmxlOgorICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgKChU
UGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fy
bmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgfQorfQorICAgICAgICAKK30g
IC8vIGV4dGVybiAiQyIKKwordm9pZCBzZXRJbml0aWFsU3RhdGUoKQoreworICAgIHl5X3N0YXJ0
ID0gMTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjE2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLyoqCisgKiBUaGlzIGlzIGJp
c29uIGdyYW1tYXIgYW5kIHByb2R1Y3Rpb24gY29kZSBmb3IgcGFyc2luZyB0aGUgT3BlbkdMIDIu
MCBzaGFkaW5nCisgKiBsYW5ndWFnZXMuCisgKi8KKyV7CisKKy8qIEJhc2VkIG9uOgorQU5TSSBD
IFlhY2MgZ3JhbW1hcgorCitJbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgaGlzIFlhY2MgZ3Jh
bW1hciAod2hpY2ggaXMgYWNjb21wYW5pZWQgYnkgYQorbWF0Y2hpbmcgTGV4IHNwZWNpZmljYXRp
b24pIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgZHJhZnQgdmVyc2lvbiBvZiB0aGUKK0FOU0kgQyBz
dGFuZGFyZC4gIFRvbSBTdG9ja2Zpc2NoIHJlcG9zdGVkIGl0IHRvIG5ldC5zb3VyY2VzIGluIDE5
ODc7IHRoYXQKK29yaWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhlIGFuc3dlciB0byBxdWVzdGlv
biAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMKK0ZBUSwgY2FuIGJlIGZ0cCdlZCBmcm9tIGZ0cC51
dS5uZXQsIGZpbGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5ncmFtbWFyLlouCisKK0kgaW50
ZW5kIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGFzIGNsb3NlIHRvIHRoZSBjdXJyZW50IEMgU3RhbmRh
cmQgZ3JhbW1hciBhcworcG9zc2libGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlzY292
ZXIgZGlzY3JlcGFuY2llcy4KKworSnV0dGEgRGVnZW5lciwgMTk5NQorKi8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIu
aCIKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWVBBUlNFX1BB
UkFNIHBhcnNlQ29udGV4dExvY2FsCisvKgorVE9ETyhhbG9rcCk6IFlZUEFSU0VfUEFSQU1fREVD
TCBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQgYmlzb24uZXhlIGluCitjb21waWxlci90b29s
cy4gUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4Y2x1c2l2ZWx5IHVzZSB0aGUgbmV3ZXIgdmVyc2lv
bi4KKyovCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkKgorI2RlZmluZSBwYXJzZUNv
bnRleHQgKChUUGFyc2VDb250ZXh0KikocGFyc2VDb250ZXh0TG9jYWwpKQorI2RlZmluZSBZWUxF
WF9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorI2RlZmluZSBZWV9ERUNMIGludCB5eWxleChZWVNU
WVBFKiBweXlsdmFsLCB2b2lkKiBwYXJzZUNvbnRleHRMb2NhbCkKK2V4dGVybiB2b2lkIHl5ZXJy
b3IoY2hhciopOworCisjZGVmaW5lIEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250
ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQgJiYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVmVydGV4
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIs
IFMsICIiLCAiIik7ICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBWRVJURVhfT05MWShTLCBMKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwg
IiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICAg
ICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdGcmFnbWVudCkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICAgICBcCisgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorfQorCisjZGVmaW5lIFBBQ0tfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5s
YW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrIHNo
YWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2Rl
ZmluZSBVTlBBQ0tfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0g
RVNoTGFuZ1VucGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdW5wYWNrIHNoYWRlcnMgb25s
eSAiLCBTLCAiIiwgIiIpOyAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUEFDS19V
TlBBQ0tfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBh
Y2sgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRl
eHQtPmxhbmd1YWdlICE9IEVTaExhbmdQYWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHBh
Y2svdW5wYWNrIHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICBcCisgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQor
JX0KKyV1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAg
ICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CisgICAgICAgICAgICBm
bG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29sIGI7CisgICAgICAg
IH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAg
ICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
dGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFB1YmxpY1R5
cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwor
ICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRUeXBlTGluZSB0eXBl
TGluZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CisgICAgICAgIH07CisgICAg
fSBpbnRlcm07Cit9CisKKyV7CisgICAgZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiwgdm9pZCop
OworJX0KKworJXB1cmVfcGFyc2VyIC8qIEp1c3QgaW4gY2FzZSBpcyBjYWxsZWQgZnJvbSBtdWx0
aXBsZSB0aHJlYWRzICovCislZXhwZWN0IDEgLyogT25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBi
ZWNhdXNlIG9mIGlmIHwgZWxzZSAqLworJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJ
U0lPTiBNRURJVU1fUFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCisldG9rZW4gPGxl
eD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKKyV0
b2tlbiA8bGV4PiBCUkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgor
JXRva2VuIDxsZXg+IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVD
MyBWRUM0CisldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRf
UVVBTCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IFNUUlVDVCBWT0lE
X1RZUEUgV0hJTEUKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUKKworJXRva2Vu
IDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09OU1RBTlQgQk9P
TENPTlNUQU5UCisldG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9OCisldG9rZW4gPGxleD4gTEVG
VF9PUCBSSUdIVF9PUAorJXRva2VuIDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFf
T1AgTkVfT1AKKyV0b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElW
X0FTU0lHTiBBRERfQVNTSUdOCisldG9rZW4gPGxleD4gTU9EX0FTU0lHTiBMRUZUX0FTU0lHTiBS
SUdIVF9BU1NJR04gQU5EX0FTU0lHTiBYT1JfQVNTSUdOIE9SX0FTU0lHTgorJXRva2VuIDxsZXg+
IFNVQl9BU1NJR04KKworJXRva2VuIDxsZXg+IExFRlRfUEFSRU4gUklHSFRfUEFSRU4gTEVGVF9C
UkFDS0VUIFJJR0hUX0JSQUNLRVQgTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSBET1QKKyV0b2tlbiA8
bGV4PiBDT01NQSBDT0xPTiBFUVVBTCBTRU1JQ09MT04gQkFORyBEQVNIIFRJTERFIFBMVVMgU1RB
UiBTTEFTSCBQRVJDRU5UCisldG9rZW4gPGxleD4gTEVGVF9BTkdMRSBSSUdIVF9BTkdMRSBWRVJU
SUNBTF9CQVIgQ0FSRVQgQU1QRVJTQU5EIFFVRVNUSU9OCisKKyV0eXBlIDxpbnRlcm0+IGFzc2ln
bm1lbnRfb3BlcmF0b3IgdW5hcnlfb3BlcmF0b3IKKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWRO
b2RlPiB2YXJpYWJsZV9pZGVudGlmaWVyIHByaW1hcnlfZXhwcmVzc2lvbiBwb3N0Zml4X2V4cHJl
c3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBleHByZXNzaW9uIGludGVnZXJf
ZXhwcmVzc2lvbiBhc3NpZ25tZW50X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiB1bmFyeV9leHByZXNzaW9uIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gYWRkaXRp
dmVfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiBlcXVhbGl0eV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVk
Tm9kZT4gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiBjb25zdGFudF9leHByZXNzaW9uCisldHlwZSA8
aW50ZXJtLmludGVybVR5cGVkTm9kZT4gbG9naWNhbF9vcl9leHByZXNzaW9uIGxvZ2ljYWxfeG9y
X2V4cHJlc3Npb24gbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1U
eXBlZE5vZGU+IHNoaWZ0X2V4cHJlc3Npb24gYW5kX2V4cHJlc3Npb24gZXhjbHVzaXZlX29yX2V4
cHJlc3Npb24gaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiBmdW5jdGlvbl9jYWxsIGluaXRpYWxpemVyIGNvbmRpdGlvbiBjb25kaXRpb25vcHQK
KworJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiB0cmFuc2xhdGlvbl91bml0IGZ1bmN0aW9uX2Rl
ZmluaXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gc3RhdGVtZW50IHNpbXBsZV9zdGF0
ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtQWdncmVnYXRlPiAgc3RhdGVtZW50X2xpc3QgY29t
cG91bmRfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uX3N0
YXRlbWVudCBzZWxlY3Rpb25fc3RhdGVtZW50IGV4cHJlc3Npb25fc3RhdGVtZW50CisldHlwZSA8
aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uIGV4dGVybmFsX2RlY2xhcmF0aW9uCisldHlw
ZSA8aW50ZXJtLmludGVybU5vZGU+IGZvcl9pbml0X3N0YXRlbWVudCBjb21wb3VuZF9zdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlCisldHlwZSA8aW50ZXJtLm5vZGVQYWlyPiBzZWxlY3Rpb25fcmVzdF9z
dGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGl0
ZXJhdGlvbl9zdGF0ZW1lbnQganVtcF9zdGF0ZW1lbnQgc3RhdGVtZW50X25vX25ld19zY29wZQor
JXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CisK
KyV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRv
ciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJh
bWV0ZXJfcXVhbGlmaWVyCisKKyV0eXBlIDxpbnRlcm0ucHJlY2lzaW9uPiBwcmVjaXNpb25fcXVh
bGlmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVfcXVhbGlmaWVyIGZ1bGx5X3NwZWNpZmll
ZF90eXBlIHR5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVfc3BlY2lmaWVy
X25vX3ByZWMgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyV0eXBlIDxpbnRlcm0udHlwZT4gc3Ry
dWN0X3NwZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlTGluZT4gc3RydWN0X2RlY2xhcmF0b3IK
KyV0eXBlIDxpbnRlcm0udHlwZUxpc3Q+IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qgc3RydWN0X2Rl
Y2xhcmF0aW9uIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0CisldHlwZSA8aW50ZXJtLmZ1bmN0aW9u
PiBmdW5jdGlvbl9oZWFkZXIgZnVuY3Rpb25fZGVjbGFyYXRvciBmdW5jdGlvbl9pZGVudGlmaWVy
CisldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJz
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyCisldHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX2hlYWRl
cl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBmdW5j
dGlvbl9jYWxsX2dlbmVyaWMgZnVuY3Rpb25fcHJvdG90eXBlCisldHlwZSA8aW50ZXJtPiBmdW5j
dGlvbl9jYWxsX29yX21ldGhvZAorCislc3RhcnQgdHJhbnNsYXRpb25fdW5pdAorJSUKKwordmFy
aWFibGVfaWRlbnRpZmllcgorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgIC8vIFRoZSBzeW1i
b2wgdGFibGUgc2VhcmNoIHdhcyBkb25lIGluIHRoZSBsZXhpY2FsIHBoYXNlCisgICAgICAgIGNv
bnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxl
KiB2YXJpYWJsZTsKKyAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAkMS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAg
ICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMS5zdHJpbmcsIHR5
cGUpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VW
YXJpYWJsZSk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZh
cmlhYmxlIHR5cGUgc3ltYm9sCisgICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUo
KSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZhcmlh
YmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJp
YWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJyb3Ig
cmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRoZSBt
ZW1vcnkKKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCApIHsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2
YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CisgICAgICAgICAgICBUVHlwZSB0KHZhcmlhYmxl
LT5nZXRUeXBlKCkpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICQxLmxpbmUpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlw
ZSgpLCAkMS5saW5lKTsKKyAgICB9CisgICAgOworCitwcmltYXJ5X2V4cHJlc3Npb24KKyAgICA6
IHZhcmlhYmxlX2lkZW50aWZpZXIgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElO
VENPTlNUQU5UIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSU5UX1RZUEUgaXMgb25seSAxNi1i
aXQgcGx1cyBzaWduIGJpdCBmb3IgdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMsCisgICAgICAgIC8v
IGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCisgICAgICAgIC8vCisgICAgICAgIGlm
IChhYnMoJDEuaSkgPj0gKDEgPDwgMTYpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVu
aW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IEZMT0FUQ09OU1RB
TlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAg
fQorICAgIHwgQk9PTENPTlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
JDEuYik7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgJDEubGluZSk7CisgICAgfQorICAgIHwgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BB
UkVOIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworCitwb3N0Zml4X2V4cHJlc3Np
b24KKyAgICA6IHByaW1hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQor
ICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24g
UklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0
cml4KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3lt
Ym9sTm9kZSgpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
JDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
IGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAi
ZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAg
aWYgKCQxLT5pc0FycmF5KCkpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgYXJyYXlzCisgICAg
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0QXJyYXlOb2RlKCQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICQx
LCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkpIHsgIC8v
IGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKKyAgICAgICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1swXSA9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7IC8vIG5lZWQgdG8gZG8gaXQgdGhpcyB3YXkg
YmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5CisgICAgICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICQxLCAkMi5saW5l
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsgLy8gY29uc3RhbnQg
Zm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
YWRkQ29uc3RNYXRyaXhOb2RlKCQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01h
dHJpeCgpKSAmJiAkMS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEt
PmlzQXJyYXkoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBl
KCkuZ2V0TWF4QXJyYXlTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNpemUoJDEtPmdldEFzU3ltYm9s
Tm9kZSgpLCAkMS0+Z2V0VHlwZVBvaW50ZXIoKSwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgdHJ1ZSwgJDIubGluZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNpemUoJDEtPmdldEFz
U3ltYm9sTm9kZSgpLCAkMS0+Z2V0VHlwZVBvaW50ZXIoKSwgMCwgZmFsc2UsICQyLmxpbmUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLT5nZXRJQ29uc3QoKSA+PSAkMS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
IiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0QXNDb25zdGFu
dFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
LCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkgJiYgJDEtPmdldFR5cGUoKS5n
ZXRBcnJheVNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3aXRoIGEg
c2l6ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFibGUiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BJbmRleEluZGlyZWN0LCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicEhp
Z2gsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzQXJyYXko
KSkgeworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAg
ICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSwgJDEt
PmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCksICQxLT5pc01hdHJpeCgp
KSk7CisKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KQorICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFs
aWZpZXIoRXZxQ29uc3QpOworICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpICYmICQx
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAkJC0+
c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZx
Q29uc3QsICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc01h
dHJpeCgpKQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgp
LCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkp
KTsKKyAgICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkgJiYgJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQx
LT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCkpOworICAgICAg
ICBlbHNlIGlmICgkMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBl
KCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnkpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQtPnNldFR5cGUoJDEtPmdldFR5cGUoKSk7Cisg
ICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAg
IHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBGSUVMRF9TRUxFQ1RJT04geworICAgICAgICBpZiAo
JDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5l
LCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoJDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOwor
ICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3Ry
aW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5saW5lKSkgeworICAgICAgICAg
ICAgICAgIGZpZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBd
ID0gMDsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAg
ICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAk
MSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICQk
ID0gJDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0
UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmaWVsZHMubnVtID09IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
ZmllbGRzLm9mZnNldHNbMF0pOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAg
ICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRl
eChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9u
KCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBUU3Ry
aW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZp
ZWxkcywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5l
KTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlw
ZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5n
LnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVs
ZHM7CisgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCok
My5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUpKSB7CisgICAg
ICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmll
bGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Cisg
ICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmaWVsZHMu
d2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5
ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOworICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIu
bGluZSk7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlw
ZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAkMS0+Z2V0Tm9taW5hbFNpemUoKSArIGZp
ZWxkcy5yb3cpOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3Qs
ICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUo
JDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Cisg
ICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIFRUeXBlTGlz
dCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGlmIChm
aWVsZHMgPT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIiwgIiIpOworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQk
ID0gJDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKmZpZWxkcylbaV0udHlwZS0+Z2V0RmllbGRO
YW1lKCkgPT0gKiQzLnN0cmluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRGb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZmllbGRGb3Vu
ZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxk
cylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBx
dWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFDb25z
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCAqKCpmaWVsZHMpW2ldLnR5cGUsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVj
dFN0cnVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQk
LT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmct
PmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rv
ciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0g
JDE7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBm
cm9tIHRoZSBwb29sCisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgIisrIiwg
JDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQs
ICQxLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQk
ID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQyLmxpbmUs
ICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICItLSIsICQxKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMi5saW5lLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpbnRlZ2VyX2V4cHJlc3Np
b24KKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5pbnRlZ2Vy
RXJyb3JDaGVjaygkMSwgIltdIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsCisgICAg
OiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZCB7CisgICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0g
JDEuZnVuY3Rpb247CisgICAgICAgIFRPcGVyYXRvciBvcCA9IGZuQ2FsbC0+Z2V0QnVpbHRJbk9w
KCk7CisKKyAgICAgICAgaWYgKG9wICE9IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IuCisg
ICAgICAgICAgICAvLyBEb24ndCBnbyB0aHJvdWdoIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNvbnN0
cnVjdG9ycy4KKyAgICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2ZXJpZmll
ZCBhbGdvcml0aG1pY2FsbHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgVFR5cGUgdHlw
ZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0eXBlIGJh
Y2sKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjaygk
MS5saW5lLCAkMS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CisgICAgICAgICAg
ICAgICAgJCQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBjb25zdHJ1Y3Rvciwgb2YgdHlwZSAndHlwZScuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRk
Q29uc3RydWN0b3IoJDEuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsICQxLmxpbmUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsICQxLmxpbmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCQtPnNldFR5cGUodHlwZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0
b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGJvb2wgYnVp
bHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gcGFyc2VDb250ZXh0LT5maW5kRnVuY3Rp
b24oJDEubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRh
dGUpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQg
ZnVuY3Rpb24uICBCdXQsIGl0IG1pZ2h0IHN0aWxsIG1hcCB0byBhIGJ1aWx0LWluCisgICAgICAg
ICAgICAgICAgLy8gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAgICAgICAgICAgaWYg
KGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4g
b3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICBp
ZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1
aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5
cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VElu
dGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRlcm1BZ2dy
ZWdhdGUsIEVPcEZ1bmN0aW9uQ2FsbCwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQk
LT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgaXMgaG93IHdlIGtub3cgd2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24g
aXMgYSBidWlsdEluIGZ1bmN0aW9uIG9yIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAt
PiBjb3VsZCBiZSBhbiBvdmVybG9hZGVkIGJ1aWx0SW4gZnVuY3Rpb24gYWxzbworICAgICAgICAg
ICAgICAgICAgICAvLyBpZiBidWlsdEluID09IHRydWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0
SW4gZnVuY3Rpb24gd2l0aCBFT3BOdWxsCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVpbHRJ
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRVc2Vy
RGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsOworICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyTGlzdCYg
cXVhbGlmaWVyTGlzdCA9ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRRdWFsaWZpZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFy
YW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSAoKmZuQ2Fu
ZGlkYXRlKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkJC0+Z2V0
TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0t
PmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBj
YW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9y
IiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZXJMaXN0LnB1c2hfYmFj
ayhxdWFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMg
cHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEg
ZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGRlbGV0ZSBmbkNhbGw7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9vcl9t
ZXRob2QKKyAgICA6IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMg
eworICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qg
c3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICQkID0gJDM7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9nZW5lcmljCisg
ICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgUklHSFRfUEFSRU4gewor
ICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5saW5lID0gJDIubGluZTsKKyAgICB9CisgICAg
fCBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIFJJR0hUX1BBUkVOIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgfQorICAgIDsKKwor
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycworICAgIDogZnVuY3Rpb25fY2FsbF9o
ZWFkZXIgVk9JRF9UWVBFIHsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQu
aW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXIgeworICAg
ICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gMDsKKyAgICB9
CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1
bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0VHlwZSgpKSB9OworICAgICAgICAk
MS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAg
ICAgJCQuaW50ZXJtTm9kZSA9ICQyOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVy
X3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBU
UGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMtPmdldFR5cGUoKSkgfTsKKyAgICAg
ICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1bmN0aW9u
ID0gJDEuZnVuY3Rpb247CisgICAgICAgICQkLmludGVybU5vZGUgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsICQzLCAkMi5saW5lKTsKKyAg
ICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcgorICAgIDogZnVuY3Rpb25faWRlbnRp
ZmllciBMRUZUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisvLyBH
cmFtbWFyIE5vdGU6ICBDb25zdHJ1Y3RvcnMgbG9vayBsaWtlIGZ1bmN0aW9ucywgYnV0IGFyZSBy
ZWNvZ25pemVkIGFzIHR5cGVzLgorCitmdW5jdGlvbl9pZGVudGlmaWVyCisgICAgOiB0eXBlX3Nw
ZWNpZmllciB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENvbnN0cnVjdG9yCisgICAgICAgIC8v
CisgICAgICAgIGlmICgkMS5hcnJheSkgeworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgewor
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
ICQxLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICgkMS51c2VyRGVmKSB7CisgICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsK
KyAgICAgICAgICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAgICAgICAgVEZ1bmN0aW9uICpmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIEVPcENvbnN0cnVjdFN0cnVj
dCk7CisgICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAgICAgIHN3aXRjaCAoJDEudHlw
ZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBpZiAoJDEu
bWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RN
YXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVj
NDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEludDsgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVj
MiIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDM6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVjMyIsICQxLmxpbmUpOyBvcCA9
IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAg
IEZSQUdfVkVSVF9PTkxZKCJpdmVjNCIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWM0
OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjMiIsICQxLmxpbmUpOyBvcCA9IEVPcENv
bnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJidmVjMyIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjNCIs
ICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAob3AgPT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
JDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgVFR5cGU6OmdldEJhc2ljU3Ry
aW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAg
IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUU3Ry
aW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAg
ICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5
cGUsIG9wKTsKKyAgICAgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBJREVOVElGSUVSIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAg
ICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBl
KTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgfCBGSUVMRF9TRUxFQ1RJT04g
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwg
KiQxLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMS5zdHJpbmcsIHR5cGUpOworICAgICAgICAkJCA9
IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisKK3VuYXJ5X2V4cHJlc3Npb24KKyAgICA6IHBvc3Rm
aXhfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgSU5DX09QIHVu
YXJ5X2V4cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNo
ZWNrKCQxLmxpbmUsICIrKyIsICQyKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQcmVJbmNyZW1lbnQsICQyLCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5h
cnlPcEVycm9yKCQxLmxpbmUsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB8IERFQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5saW5lLCAiLS0iLCAkMikpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiLS0iLCAk
Mi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAgICB9CisgICAgfCB1bmFy
eV9vcGVyYXRvciB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51
bGwpIHsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKCQxLm9wLCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVy
cm9yT3AgPSAiIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEub3ApIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgIGVycm9yT3AgPSAiLSI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsIGVycm9yT3AsICQyLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKy8vIEdyYW1tYXIgTm90ZTog
IE5vIHRyYWRpdGlvbmFsIHN0eWxlIHR5cGUgY2FzdHMuCisKK3VuYXJ5X29wZXJhdG9yCisgICAg
OiBQTFVTICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcE51bGw7IH0KKyAgICB8IERB
U0ggIHsgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTmVnYXRpdmU7IH0KKyAgICB8IEJB
TkcgIHsgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTG9naWNhbE5vdDsgfQorICAgIDsK
Ky8vIEdyYW1tYXIgTm90ZTogIE5vICcqJyBvciAnJicgdW5hcnkgb3BzLiAgUG9pbnRlcnMgYXJl
IG5vdCBzdXBwb3J0ZWQuCisKK211bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KKyAgICA6IHVuYXJ5
X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9u
IFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCIqIiwgJDIu
bGluZSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BNdWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoJDIubGluZSwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIHwgbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgRlJBR19WRVJU
X09OTFkoIi8iLCAkMi5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
OworCithZGRpdGl2ZV9leHByZXNzaW9uCisgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9u
IHsgJCQgPSAkMTsgfQorICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGFk
ZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1Yiwg
JDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5s
aW5lLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQk
ID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzaGlmdF9leHByZXNzaW9uCisgICAg
OiBhZGRpdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworcmVsYXRpb25hbF9l
eHByZXNzaW9uCisgICAgOiBzaGlmdF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgcmVs
YXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhh
biwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigk
Mi5saW5lLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9
CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4
cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+IiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNl
KTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Np
b24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPD0iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBHRV9PUCBzaGlmdF9leHByZXNzaW9uICB7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVy
VGhhbkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlP
cEVycm9yKCQyLmxpbmUsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworZXF1YWxpdHlfZXhwcmVzc2lvbgorICAgIDogcmVs
YXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lv
biBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsICQyLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI9PSIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNB
cnJheSgpIHx8ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JD
aGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gTkVf
T1AgcmVsYXRpb25hbF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIhPSIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJh
eSgpIHx8ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVj
aygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICA7CisKK2FuZF9leHByZXNzaW9uCisgICAgOiBl
cXVhbGl0eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworZXhjbHVzaXZlX29yX2V4
cHJlc3Npb24KKyAgICA6IGFuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworaW5j
bHVzaXZlX29yX2V4cHJlc3Npb24KKyAgICA6IGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQg
PSAkMTsgfQorICAgIDsKKworbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorICAgIDogaW5jbHVzaXZl
X29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9u
IEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAkMSwgJDMsICQy
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICImJiIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAg
IDsKKworbG9naWNhbF94b3JfZXhwcmVzc2lvbgorICAgIDogbG9naWNhbF9hbmRfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gWE9SX09QIGxvZ2lj
YWxfYW5kX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgJDIubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIl5eIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dpY2Fs
X29yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lv
biAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCQyLmxpbmUsICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxp
bmUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uZGl0aW9uYWxfZXhwcmVzc2lvbgor
ICAgIDogbG9naWNhbF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9v
cl9leHByZXNzaW9uIFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04gYXNzaWdubWVudF9leHByZXNz
aW9uIHsKKyAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMi5saW5lLCAk
MSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCAkMi5s
aW5lKTsKKyAgICAgICAgaWYgKCQzLT5nZXRUeXBlKCkgIT0gJDUtPmdldFR5cGUoKSkKKyAgICAg
ICAgICAgICQkID0gMDsKKworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI6IiwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQ1LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkNTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICA7CisKK2Fzc2lnbm1lbnRfZXhwcmVzc2lvbgorICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KKyAgICB8IHVuYXJ5X2V4cHJlc3Npb24gYXNzaWdubWVudF9vcGVyYXRv
ciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKCQyLmxpbmUsICJhc3NpZ24iLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRBc3NpZ24oJDIub3AsICQxLCAkMywgJDIubGluZSk7CisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmFzc2lnbkVycm9yKCQyLmxpbmUsICJhc3Np
Z24iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQx
OworICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5KCkpICYm
IHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5
X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0K
KyAgICA7CisKK2Fzc2lnbm1lbnRfb3BlcmF0b3IKKyAgICA6IEVRVUFMICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0g
RU9wQXNzaWduOyB9CisgICAgfCBNVUxfQVNTSUdOICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAk
MS5saW5lKTsgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcE11bEFzc2lnbjsgfQor
ICAgIHwgRElWX0FTU0lHTiAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgJDEubGluZSk7ICAgICAk
JC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BEaXZBc3NpZ247IH0KKyAgICB8IEFERF9BU1NJ
R04gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubGluZSA9ICQxLmxp
bmU7ICQkLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgfCBTVUJfQVNTSUdOICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVP
cFN1YkFzc2lnbjsgfQorICAgIDsKKworZXhwcmVzc2lvbgorICAgIDogYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIENPTU1B
IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgaWYgKCQkID09IDAp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLCIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgOworCitjb25zdGFudF9leHByZXNzaW9uCisgICAgOiBjb25k
aXRpb25hbF9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y29uc3RFcnJv
ckNoZWNrKCQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9w
cm90b3R5cGUgU0VNSUNPTE9OICAgeworICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigk
MS5mdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5
cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1
bmN0aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5j
dGlvbi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgVFBh
cmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1l
ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZh
cmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEu
bGluZSksICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBwcm90b3R5cGUtPnNldE9wZXJhdG9yKEVPcFByb3RvdHlwZSk7CisgICAgICAgICQkID0g
cHJvdG90eXBlOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7
CisgICAgICAgIGlmICgkMS5pbnRlcm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAkMS5pbnRlcm1B
Z2dyZWdhdGUtPnNldE9wZXJhdG9yKEVPcERlY2xhcmF0aW9uKTsKKyAgICAgICAgJCQgPSAkMS5p
bnRlcm1BZ2dyZWdhdGU7CisgICAgfQorICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyBTRU1JQ09MT04geworICAgICAgICBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQzLnR5cGUsICQyICk7CisgICAg
ICAgICQkID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9wcm90b3R5cGUKKyAgICA6IGZ1
bmN0aW9uX2RlY2xhcmF0b3IgUklHSFRfUEFSRU4gIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
TXVsdGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgor
ICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmlu
aXRpb24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAg
ICAgLy8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBv
ciBub3QpLgorICAgICAgICAvLworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dl
ZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNo
LgorICAgICAgICAvLworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmdsZWRO
YW1lKCkpKTsKKyAgICAgICAgaWYgKHByZXZEZWMpIHsKKyAgICAgICAgICAgIGlmIChwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11
c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFz
aWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICgoKnByZXZEZWMp
W2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICgqJDEpW2ldLnR5cGUtPmdldFF1YWxpZmllcigp
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92
ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVy
cyIsICgqJDEpW2ldLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMg
aXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKKyAgICAg
ICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZy
b20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKKyAgICAgICAgLy8gYmVpbmcgcmVk
ZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUg
aW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgJCQuZnVuY3Rpb24gPSAk
MTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICB9CisgICAgOworCitmdW5jdGlv
bl9kZWNsYXJhdG9yCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgeworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgeworICAgICAgICAk
JCA9ICQxOworICAgIH0KKyAgICA7CisKKworZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVy
cworICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAg
IC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmICgkMi5w
YXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQorICAgICAgICAgICAgJDEtPmFk
ZFBhcmFtZXRlcigkMi5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSAk
Mi5wYXJhbS50eXBlOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRl
cnMgQ09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
T25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZv
aWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2
b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJj
YW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAi
Iik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGRl
bGV0ZSAkMy5wYXJhbS50eXBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWRk
IHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAkMS0+YWRk
UGFyYW1ldGVyKCQzLnBhcmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2Z1bmN0aW9u
X2hlYWRlcgorICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX1BBUkVO
IHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgJDEucXVhbGlmaWVy
ICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlvbiByZXR1cm4iLCBnZXRRdWFs
aWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBp
cyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90
b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQorICAg
ICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAg
ICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQyLnN0cmluZywgdHlwZSk7CisgICAgICAgICQk
ID0gZnVuY3Rpb247CisgICAgfQorICAgIDsKKworcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAv
LyBUeXBlICsgbmFtZQorICAgIDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiB7CisgICAgICAg
IGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwg
KiQyLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlwZSgkMSl9OworICAgICAg
ICAkJC5saW5lID0gJDIubGluZTsKKyAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKKyAgICB9Cisg
ICAgfCB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHBy
ZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBtYWtl
IGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soJDIubGluZSwgKiQyLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAg
ICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoJDEpOworICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtID0geyAkMi5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7Cisg
ICAgICAgICQkLnBhcmFtID0gcGFyYW07CisgICAgfQorICAgIDsKKworcGFyYW1ldGVyX2RlY2xh
cmF0aW9uCisgICAgLy8KKyAgICAvLyBUaGUgb25seSBwYXJhbWV0ZXIgcXVhbGlmaWVyIGEgcGFy
YW1ldGVyIGNhbiBoYXZlIGFyZQorICAgIC8vIElOX1FVQUwsIE9VVF9RVUFMLCBJTk9VVF9RVUFM
LCBvciBDT05TVC4KKyAgICAvLworCisgICAgLy8KKyAgICAvLyBUeXBlICsgbmFtZQorICAgIC8v
CisgICAgOiB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNs
YXJhdG9yIHsKKyAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFy
YW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDI7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxp
bmUsICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUs
IEV2cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIC8vCisgICAgLy8gT25seSB0eXBlCisgICAgLy8K
KyAgICB8IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgcGFy
YW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAkJCA9
ICQyOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVj
aygkMi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygk
Mi5saW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9xdWFsaWZp
ZXIKKyAgICA6IC8qIGVtcHR5ICovIHsKKyAgICAgICAgJCQgPSBFdnFJbjsKKyAgICB9CisgICAg
fCBJTl9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJbjsKKyAgICB9CisgICAgfCBPVVRfUVVBTCB7
CisgICAgICAgICQkID0gRXZxT3V0OworICAgIH0KKyAgICB8IElOT1VUX1FVQUwgeworICAgICAg
ICAkJCA9IEV2cUluT3V0OworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl90eXBlX3NwZWNpZmll
cgorICAgIDogdHlwZV9zcGVjaWZpZXIgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAw
LCBuZXcgVFR5cGUoJDEpIH07CisgICAgICAgICQkLnBhcmFtID0gcGFyYW07CisgICAgfQorICAg
IDsKKworaW5pdF9kZWNsYXJhdG9yX2xpc3QKKyAgICA6IHNpbmdsZV9kZWNsYXJhdGlvbiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgICAgIAorICAgICAgICBpZiAoJCQudHlwZS5wcmVjaXNpb24g
PT0gRWJwVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAkJC50eXBlLnByZWNpc2lvbiA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigkMS50eXBlLnR5cGUpOwor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygkMS5saW5l
LCAkJC50eXBlLnByZWNpc2lvbiwgJDEudHlwZS50eXBlKSkgeworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiB7CisgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoJDEuaW50ZXJtTm9kZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICokMy5zdHJpbmcsIFRUeXBlKCQxLnR5cGUpLCAkMy5saW5lKSwgJDMubGluZSk7CisgICAgICAg
IAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQz
LmxpbmUsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5l
LCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklF
UiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQx
LnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUs
ICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJh
eUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQx
OworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGlu
ZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQu
bGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDQubGluZSwgJDUsIHNpemUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDEudHlwZS5z
ZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Cisg
ICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQz
LnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwor
ICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQx
LmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMu
c3RyaW5nLCB0eXBlLCAkMy5saW5lKSwgJDMubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdI
VF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1
YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkMS50eXBlLnNl
dEFycmF5KHRydWUsICQ3LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpOworICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQx
LnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9y
Q2hlY2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUSW50ZXJt
Tm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRl
SW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgJDcsIGludGVybU5vZGUs
IHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gYnVp
bGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
JDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDYubGluZSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dy
ZWdhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlz
dCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hU
X0JSQUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOwor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkNC5saW5l
LCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5
cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hl
Y2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5p
dGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgJDgsIGludGVybU5vZGUsIHZh
cmlhYmxlKSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gYnVpbGQg
dGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEu
aW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDcubGluZSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdh
dGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBD
T01NQSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VDb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGlu
dGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlm
IChpbnRlcm1Ob2RlKQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ0
LmxpbmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3NpbmdsZV9kZWNsYXJhdGlvbgorICAg
IDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgeworICAgICAgICAkJC50eXBlID0gJDE7CisgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgk
MSksICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlw
ZSBJREVOVElGSUVSIHsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKSwgJDIubGluZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCQyLmxpbmUsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygk
Mi5saW5lLCAqJDIuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAkJC50eXBlID0gJDE7CisKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0
cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBS
SUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKSwgJDIubGluZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZywgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnNldEFycmF5KHRydWUp
OworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFi
bGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNL
RVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCQxKTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDQsIHNpemUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUp
OworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
JDIuc3RyaW5nLCB0eXBlLCAkMi5saW5lKSwgJDIubGluZSk7CisgICAgICAgIAorICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlw
ZSA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
JDMubGluZSwgJDEpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQz
LmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgICAgICQxLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5n
LCAkMSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklF
UiBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRp
YWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAg
ICAgIC8vCisgICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
aW50ZXJtTm9kZSwgJDMubGluZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0g
MDsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IElOVkFSSUFOVCBJREVOVElGSUVSIHsKKyAgICAg
ICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICQxLmxpbmUpOworICAgICAg
ICAkJC5xdWFsaWZpZXIgPSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSAwOworICAgIH0KKworLy8KKy8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBh
Y2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisvLyAgICB8IGJ1ZmZlcl9zcGVjaWZpZXIgeworLy8g
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisvLyAgICB9CisgICAgOworCisvLyBHcmFt
bWFyIE5vdGU6ICBObyAnZW51bScsIG9yICd0eXBlZGVmJy4KKworLy8KKy8vIFBsYWNlIGhvbGRl
ciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisvLyV0eXBlIDxpbnRlcm0+IGJ1
ZmZlcl9kZWNsYXJhdGlvbgorLy8ldHlwZSA8aW50ZXJtLnR5cGU+IGJ1ZmZlcl9zcGVjaWZpZXIg
aW5wdXRfb3Jfb3V0cHV0IGJ1ZmZlcl9kZWNsYXJhdGlvbl9saXN0CisvL2J1ZmZlcl9zcGVjaWZp
ZXIKKy8vICAgIDogaW5wdXRfb3Jfb3V0cHV0IExFRlRfQlJBQ0UgYnVmZmVyX2RlY2xhcmF0aW9u
X2xpc3QgUklHSFRfQlJBQ0UgeworLy8gICAgfQorLy8gICAgOworLy8KKy8vaW5wdXRfb3Jfb3V0
cHV0CisvLyAgICA6IElOUFVUIHsKKy8vICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxF
cnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAiaW5wdXQiKSkKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisv
LyAgICAgICAgVU5QQUNLX09OTFkoImlucHV0IiwgJDEubGluZSk7CisvLyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxSW5wdXQ7CisvLyAgICB9CisvLyAgICB8IE9VVFBVVCB7CisvLyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgIm91dHB1dCIpKQorLy8gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICBQQUNLX09OTFkoIm91dHB1dCIsICQx
LmxpbmUpOworLy8gICAgICAgICQkLnF1YWxpZmllciA9IEV2cU91dHB1dDsKKy8vICAgIH0KKy8v
ICAgIDsKKworLy8KKy8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdl
cy4KKy8vCisvL2J1ZmZlcl9kZWNsYXJhdGlvbl9saXN0CisvLyAgICA6IGJ1ZmZlcl9kZWNsYXJh
dGlvbiB7CisvLyAgICB9CisvLyAgICB8IGJ1ZmZlcl9kZWNsYXJhdGlvbl9saXN0IGJ1ZmZlcl9k
ZWNsYXJhdGlvbiB7CisvLyAgICB9CisvLyAgICA7CisKKy8vCisvLyBJbnB1dC9vdXRwdXQgc2Vt
YW50aWNzOgorLy8gICBmbG9hdCBtdXN0IGJlIDE2IG9yIDMyIGJpdHMKKy8vICAgZmxvYXQgYWxp
Z25tZW50IHJlc3RyaWN0aW9ucz8KKy8vICAgY2hlY2sgZm9yIG9ubHkgb25lIGlucHV0IGFuZCBv
bmx5IG9uZSBvdXRwdXQKKy8vICAgc3VtIG9mIGJpdGZpZWxkcyBoYXMgdG8gYmUgbXVsdGlwbGUg
b2YgMzIKKy8vCisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5n
dWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb24KKy8vICAgIDogdHlwZV9zcGVjaWZpZXIg
SURFTlRJRklFUiBDT0xPTiBjb25zdGFudF9leHByZXNzaW9uIFNFTUlDT0xPTiB7CisvLyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJp
bmcsIHBhcnNlQ29udGV4dCkpCisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICQxKTsK
Ky8vICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqJCQudmFy
aWFibGUpKSB7CisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJl
ZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICAgICAgLy8gZG9uJ3Qg
aGF2ZSB0byBkZWxldGUgJCQudmFyaWFibGUsIHRoZSBwb29sIHBvcCB3aWxsIHRha2UgY2FyZSBv
ZiBpdAorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vICAgIDsKKworZnVsbHlfc3BlY2lmaWVkX3R5
cGUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBp
ZiAoJDEuYXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVy
cm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkMS5zZXRBcnJh
eShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCB0eXBlX3F1
YWxpZmllciB0eXBlX3NwZWNpZmllciAgeworICAgICAgICBpZiAoJDIuYXJyYXkgJiYgcGFyc2VD
b250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0
cyIpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQyLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJDIuYXJyYXkgJiYg
cGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQyLnNldEFy
cmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZx
QXR0cmlidXRlICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUg
PT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciks
ICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwg
JDIudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVh
bGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVhbGlm
aWVyOworICAgIH0KKyAgICA7CisKK3R5cGVfcXVhbGlmaWVyCisgICAgOiBDT05TVF9RVUFMIHsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICQxLmxpbmUpOworICAgIH0K
KyAgICB8IEFUVFJJQlVURSB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCAkMS5s
aW5lKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgJDEubGluZSk7CisgICAgfQorICAgIHwgVkFSWUlO
RyB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAgICAgICAgICQkLnNldEJhc2lj
KEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICQxLmxpbmUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICQxLmxpbmUpOworICAgIH0K
KyAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFu
Z1ZlcnRleCkKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdPdXQsICQxLmxpbmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICQxLmxpbmUpOworICAgIH0KKyAgICB8
IFVOSUZPUk0geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQx
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9y
bSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICQxLmxpbmUpOworICAgIH0KKyAgICA7CisKK3R5
cGVfc3BlY2lmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICB9CisgICAgfCBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25v
X3ByZWMgeworICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC5wcmVjaXNpb24gPSAkMTsKKyAg
ICB9CisgICAgOworCitwcmVjaXNpb25fcXVhbGlmaWVyCisgICAgOiBISUdIX1BSRUNJU0lPTiB7
CisgICAgICAgICQkID0gRWJwSGlnaDsKKyAgICB9CisgICAgfCBNRURJVU1fUFJFQ0lTSU9OIHsK
KyAgICAgICAgJCQgPSBFYnBNZWRpdW07CisgICAgfQorICAgIHwgTE9XX1BSRUNJU0lPTiAgewor
ICAgICAgICAkJCA9IEVicExvdzsKKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub19w
cmVjCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJheSB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIHwgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVy
cm9yQ2hlY2soJDIubGluZSwgJDMsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9ub25hcnJheQorICAgIDogVk9J
RF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IEZMT0FU
X1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IElOVF9U
WVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgQk9PTF9UWVBF
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKy8vICAgIHwgVU5TSUdORUQg
SU5UX1RZUEUgeworLy8gICAgICAgIFBBQ0tfVU5QQUNLX09OTFkoInVuc2lnbmVkIiwgJDEubGlu
ZSk7CisvLyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisvLyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKy8vICAgIH0KKyAgICB8IFZFQzIg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUo
Mik7CisgICAgfQorICAgIHwgVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBWRUM0IHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0K
KyAgICB8IEJWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5z
ZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgQlZFQzMgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwg
JDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBCVkVD
NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDQpOworICAgIH0KKyAgICB8IElWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgfCBJVkVDMyB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQor
ICAgIHwgSVZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDQpOworICAgIH0KKyAgICB8IE1BVFJJWDIgeworICAgICAgICBGUkFHX1ZFUlRf
T05MWSgibWF0MiIsICQxLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAg
ICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQorICAgIHwgTUFUUklYMyB7Cisg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQzIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICB9Cisg
ICAgfCBNQVRSSVg0IHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDQiLCAkMS5saW5lKTsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQs
IHRydWUpOworICAgIH0KKyAgICB8IFNBTVBMRVIyRCB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZ
KCJzYW1wbGVyMkQiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgJDEubGluZSk7
CisgICAgfQorICAgIHwgU0FNUExFUkNVQkUgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2Ft
cGxlckN1YmUiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAkMS5saW5lKTsK
KyAgICB9CisgICAgfCBzdHJ1Y3Rfc3BlY2lmaWVyIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFko
InN0cnVjdCIsICQxLmxpbmUpOworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5xdWFsaWZp
ZXIgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgfCBUWVBFX05BTUUgeworICAgICAgICAvLwor
ICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmluZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhp
Y2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAgICAgICAgLy8gdHlwZS4KKyAgICAgICAgLy8KKyAg
ICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJv
bCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQk
LnVzZXJEZWYgPSAmc3RydWN0dXJlOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9zcGVjaWZpZXIK
KyAgICA6IFNUUlVDVCBJREVOVElGSUVSIExFRlRfQlJBQ0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xp
c3QgUklHSFRfQlJBQ0UgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCQ0
LCAqJDIuc3RyaW5nKTsKKyAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFy
aWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgaWYgKCEgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJDIuc3RyaW5nLT5j
X3N0cigpLCAic3RydWN0Iik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwg
JDEubGluZSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgfQorICAgIHwg
U1RSVUNUIExFRlRfQlJBQ0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0Ugewor
ICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCQzLCBUU3RyaW5nKCIiKSk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAkMS5saW5lKTsKKyAg
ICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVj
bGFyYXRpb25fbGlzdAorICAgIDogc3RydWN0X2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgfCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBzdHJ1Y3RfZGVjbGFyYXRp
b24geworICAgICAgICAkJCA9ICQxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICQyLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9
IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoKCokJClbal0u
dHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoKiQyKVtpXS5saW5lLCAi
ZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJlOiIsICJzdHJ1Y3QiLCAoKiQyKVtpXS50
eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgJCQtPnB1c2hfYmFjaygoKiQyKVtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
OworCitzdHJ1Y3RfZGVjbGFyYXRpb24KKyAgICA6IHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNs
YXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSAkMjsKKworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT52b2lkRXJyb3JDaGVjaygkMS5saW5lLCAoKiQyKVswXS50eXBlLT5nZXRG
aWVsZE5hbWUoKSwgJDEpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRv
IHJlcGxhY2UgYWxyZWFkeSBrbm93IGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0VHlwZSgkMS50eXBl
LCAkMS5zaXplLCAkMS5tYXRyaXgsICQxLnVzZXJEZWYpOworCisgICAgICAgICAgICAvLyBkb24n
dCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBpZiAoKCokJClbaV0udHlwZS0+
aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjaygkMS5saW5lLCAkMSkpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCQxLmFycmF5KQor
ICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldEFycmF5U2l6ZSgkMS5hcnJheVNpemUp
OworICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYpCisgICAgICAgICAgICAgICAgKCokJClbaV0u
dHlwZS0+c2V0VHlwZU5hbWUoJDEudXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0CisgICAgOiBzdHJ1Y3RfZGVj
bGFyYXRvciB7CisgICAgICAgICQkID0gTmV3UG9vbFRUeXBlTGlzdCgpOworICAgICAgICAkJC0+
cHVzaF9iYWNrKCQxKTsKKyAgICB9CisgICAgfCBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IENPTU1B
IHN0cnVjdF9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQtPnB1c2hfYmFjaygkMyk7CisgICAgfQor
ICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3IKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAk
JC50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICQkLmxp
bmUgPSAkMS5saW5lOworICAgICAgICAkJC50eXBlLT5zZXRGaWVsZE5hbWUoKiQxLnN0cmluZyk7
CisgICAgfQorICAgIHwgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lv
biBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBF
YnBVbmRlZmluZWQpOworICAgICAgICAkJC5saW5lID0gJDEubGluZTsKKyAgICAgICAgJCQudHlw
ZS0+c2V0RmllbGROYW1lKCokMS5zdHJpbmcpOworCisgICAgICAgIGludCBzaXplOworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXpl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC50eXBl
LT5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgfQorICAgIDsKKworaW5pdGlhbGl6ZXIKKyAgICA6
IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2RlY2xhcmF0aW9u
X3N0YXRlbWVudAorICAgIDogZGVjbGFyYXRpb24geyAkJCA9ICQxOyB9CisgICAgOworCitzdGF0
ZW1lbnQKKyAgICA6IGNvbXBvdW5kX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1w
bGVfc3RhdGVtZW50ICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAg
Tm8gbGFiZWxlZCBzdGF0ZW1lbnRzOyAnZ290bycgaXMgbm90IHN1cHBvcnRlZC4KKworc2ltcGxl
X3N0YXRlbWVudAorICAgIDogZGVjbGFyYXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQorICAg
IHwgZXhwcmVzc2lvbl9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAgIHwgc2VsZWN0aW9uX3N0
YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQg
PSAkMTsgfQorICAgIHwganVtcF9zdGF0ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsK
KworY29tcG91bmRfc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQg
PSAwOyB9CisgICAgfCBMRUZUX0JSQUNFIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IH0gc3RhdGVtZW50X2xpc3QgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9
IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQzICE9IDApCisgICAgICAgICAgICAkMy0+c2V0
T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7CisK
K3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICA6IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdf
c2NvcGUgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgICAgICAgICAgICAg
IHsgJCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQor
ICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNuJ3QgY3JlYXRlIGEgbmV3IHNjb3BlLCBmb3Igc2Vs
ZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9uX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBS
SUdIVF9CUkFDRSB7CisgICAgICAgICQkID0gMDsKKyAgICB9CisgICAgfCBMRUZUX0JSQUNFIHN0
YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQyKQorICAgICAgICAgICAg
JDItPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9Cisg
ICAgOworCitzdGF0ZW1lbnRfbGlzdAorICAgIDogc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKCQxLCAwKTsKKyAgICB9Cisg
ICAgfCBzdGF0ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAwKTsKKyAgICB9CisgICAgOwor
CitleHByZXNzaW9uX3N0YXRlbWVudAorICAgIDogU0VNSUNPTE9OICB7ICQkID0gMDsgfQorICAg
IHwgZXhwcmVzc2lvbiBTRU1JQ09MT04gIHsgJCQgPSBzdGF0aWNfY2FzdDxUSW50ZXJtTm9kZSo+
KCQxKTsgfQorICAgIDsKKworc2VsZWN0aW9uX3N0YXRlbWVudAorICAgIDogSUYgTEVGVF9QQVJF
TiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCB7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLmxpbmUsICQzKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywgJDUsICQxLmxpbmUpOworICAgIH0KKyAg
ICA7CisKK3NlbGVjdGlvbl9yZXN0X3N0YXRlbWVudAorICAgIDogc3RhdGVtZW50IEVMU0Ugc3Rh
dGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAkMzsK
KyAgICB9CisgICAgfCBzdGF0ZW1lbnQgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAg
ICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ3N3
aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVkLgorCitjb25kaXRpb24KKyAg
ICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4gaW5jbHVkZSBzaW5nbGUgZGVj
bGFyYXRpb25zCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDEtPmdldExpbmUoKSwgJDEpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMi5s
aW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAg
ICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJp
bmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpCisgICAgICAgICAgICAkJCA9ICQ0OworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
JCQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaXRlcmF0aW9uX3N0YXRlbWVudAor
ICAgIDogV0hJTEUgTEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgp
OyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBjb25kaXRpb24gUklHSFRfUEFS
RU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUucG9wKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
TG9vcCgwLCAkNiwgJDQsIDAsIHRydWUsICQxLmxpbmUpOworICAgICAgICAtLXBhcnNlQ29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBETyB7ICsrcGFyc2VDb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOyB9IHN0YXRlbWVudCBXSElMRSBMRUZUX1BBUkVOIGV4cHJlc3Npb24g
UklHSFRfUEFSRU4gU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soJDgubGluZSwgJDYpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKDAs
ICQzLCAkNiwgMCwgZmFsc2UsICQ0LmxpbmUpOworICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBGT1IgTEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsg
fSBmb3JfaW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50IFJJR0hUX1BBUkVOIHN0YXRl
bWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBv
cCgpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoJDQs
ICQ3LCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUxKSwgcmVpbnRlcnBy
ZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMiksIHRydWUsICQxLmxpbmUpOworICAgICAg
ICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgOworCitmb3Jf
aW5pdF9zdGF0ZW1lbnQKKyAgICA6IGV4cHJlc3Npb25fc3RhdGVtZW50IHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICB9CisgICAgfCBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgeworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICA7CisKK2NvbmRpdGlvbm9wdAorICAgIDogY29uZGl0aW9uIHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCAvKiBNYXkgYmUgbnVsbCAqLyB7CisgICAgICAg
ICQkID0gMDsKKyAgICB9CisgICAgOworCitmb3JfcmVzdF9zdGF0ZW1lbnQKKyAgICA6IGNvbmRp
dGlvbm9wdCBTRU1JQ09MT04geworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5u
b2RlMiA9IDA7CisgICAgfQorICAgIHwgY29uZGl0aW9ub3B0IFNFTUlDT0xPTiBleHByZXNzaW9u
ICB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gJDM7CisgICAg
fQorICAgIDsKKworanVtcF9zdGF0ZW1lbnQKKyAgICA6IENPTlRJTlVFIFNFTUlDT0xPTiB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7CisgICAgfQorICAgIHwgQlJF
QUsgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bCA8PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVh
ayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5saW5lKTsKKyAgICB9
CisgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMS5saW5lKTsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9p
ZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQg
ZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IFJFVFVS
TiBleHByZXNzaW9uIFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxpbmUpOworICAgICAgICBwYXJz
ZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlv
biBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKihwYXJzZUNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hp
bmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBESVNDQVJEIFNFTUlDT0xPTiB7CisgICAg
ICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICQxLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCAkMS5saW5lKTsKKyAgICB9Cisg
ICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBObyAnZ290bycuICBHb3RvcyBhcmUgbm90IHN1cHBv
cnRlZC4KKwordHJhbnNsYXRpb25fdW5pdAorICAgIDogZXh0ZXJuYWxfZGVjbGFyYXRpb24gewor
ICAgICAgICAkJCA9ICQxOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0gJCQ7Cisg
ICAgfQorICAgIHwgdHJhbnNsYXRpb25fdW5pdCBleHRlcm5hbF9kZWNsYXJhdGlvbiB7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIs
IDApOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0gJCQ7CisgICAgfQorICAgIDsK
KworZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyAgICA6IGZ1bmN0aW9uX2RlZmluaXRpb24geworICAg
ICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWZpbml0aW9uCisgICAgOiBmdW5jdGlvbl9w
cm90b3R5cGUgeworICAgICAgICBURnVuY3Rpb24mIGZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7
CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi5nZXRNYW5nbGVkTmFtZSgpKSk7
CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0
aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAg
ICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUu
ICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1
cmFuY2UuCisgICAgICAgIC8vCisgICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgewor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5
IGhhcyBhIGJvZHkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24uZ2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQoKTsKKworICAgICAgICAv
LworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMg
YW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAorICAgICAg
ICAvLworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0TmFtZSgpID09ICJtYWluIikgeworICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkg
cGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24uZ2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9p
ZCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiIsIGZ1
bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAg
IC8vIE5ldyBzeW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBpdHMg
YXJndW1lbnRzCisgICAgICAgIC8vCisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlw
ZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLwor
ICAgICAgICBwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUgPSAmKHByZXZEZWMtPmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5v
IG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAv
LyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAv
LyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBz
byBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1l
dGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBUUGFyYW1ldGVyJiBwYXJh
bSA9IGZ1bmN0aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgeworICAg
ICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5h
bWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gVHJhbnNmZXIgb3du
ZXJzaGlwIG9mIG5hbWUgcG9pbnRlciB0byBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICBwYXJhbS5uYW1lID0gMDsKKworICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxLmxpbmUpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAkMS5saW5lKSwgJDEu
bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVy
cywgJDEubGluZSk7CisgICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9kZXM7Cisg
ICAgICAgIHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7CisgICAgfQorICAgIGNv
bXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICAvLz8/IENoZWNrIHRoYXQg
YWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPworICAgICAg
ICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVk
aWF0ZSBjb2RlCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUt
PmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0
dXJuc1ZhbHVlKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJm
dW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEuZnVuY3Rpb24tPmdldE5h
bWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1B
Z2dyZWdhdGUsICQzLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCAkMS5saW5lKTsKKyAgICAgICAgJCQt
PmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCku
Y19zdHIoKSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0
aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5m
b3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmlj
CisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVk
IGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9w
dGltaXplKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1ZyhwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEu
ZGVidWcpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShw
YXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOworICAgIH0KKyAgICA7CisK
KyUlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9p
bnRlcm1PdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUd28gcHVycG9zZXM6CisvLyAx
LiAgU2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlvbnMgY2Fu
CisvLyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4gdGhlbXNl
bHZlcyB0bworLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHByb2Nl
c3MgdGhhbiBzaG93biBoZXJlLgorLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3IgaG93
IHRvIGdldCBzdGFydGVkLgorLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVzY3JpcHRp
b24gb2YgdGhlIHRyZWUuCisvLworCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxv
bmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNz
IFRPdXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6Cisg
ICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9CisgICAg
VEluZm9TaW5rJiBpbmZvU2luazsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCopOworICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25z
dGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7
CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiop
OworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUq
KTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBi
b29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Cit9OworCitUU3Ry
aW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Cit7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZp
ZXIgIT0gRXZxR2xvYmFsKQorICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
PDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKKyAgICBpZiAoYXJyYXkpCisg
ICAgICAgIHN0cmVhbSA8PCAiYXJyYXkgb2YgIjsKKyAgICBpZiAobWF0cml4KQorICAgICAgICBz
dHJlYW0gPDwgc2l6ZSA8PCAiWCIgPDwgc2l6ZSA8PCAiIG1hdHJpeCBvZiAiOworICAgIGVsc2Ug
aWYgKHNpemUgPiAxKQorICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiLWNvbXBvbmVudCB2ZWN0
b3Igb2YgIjsKKworICAgIHN0cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOworICAgIHJldHVybiBz
dHJlYW0uc3RyKCk7Cit9CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBwcmludGluZywg
bm90IHBhcnQgb2YgdHJhdmVyc2luZy4KKy8vCisKK3ZvaWQgT3V0cHV0VHJlZVRleHQoVEluZm9T
aW5rJiBpbmZvU2luaywgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IGludCBkZXB0aCkKK3sKKyAg
ICBpbnQgaTsKKworICAgIGluZm9TaW5rLmRlYnVnLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7
CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgaW5mb1NpbmsuZGVi
dWcgPDwgIiAgIjsKK30KKworLy8KKy8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJh
dmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0
cyB0aGUgdHJhdmVyc2FsLgorLy8KKy8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMg
dG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJl
bi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgor
Ly8KKwordm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKQoreworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisKKyAg
ICBpbmZvU2luay5kZWJ1ZyA8PCAiJyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKKyAg
ICBpbmZvU2luay5kZWJ1ZyA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAi
KVxuIjsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5r
OworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBv
dXQuZGVidWcgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIm11
bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXgg
bXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dC5kZWJ1ZyA8PCAidmVjdG9yIHNjYWxl
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBzY2FsZSBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjog
ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBv
dXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5k
ZXhJbmRpcmVjdDogb3V0LmRlYnVnIDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0IGluZGV4
IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6
IG91dC5kZWJ1ZyA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKKworICAgICAgICBjYXNlIEVP
cEFkZDogICAgb3V0LmRlYnVnIDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCI7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0LmRlYnVnIDw8ICJjb21w
b25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0
LmRlYnVnIDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEVxdWFsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQu
ZGVidWcgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhh
biI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAg
IG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVz
cyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5F
cXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dC5kZWJ1ZyA8PCAidmVj
dG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6IG91dC5kZWJ1ZyA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dC5kZWJ1ZyA8PCAibWF0cml4LXRpbWVz
LXZlY3RvciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91
dC5kZWJ1ZyA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6IG91dC5kZWJ1ZyA8PCAibWF0cml4LW11bHRpcGx5IjsgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQuZGVidWcgPDwgImxv
Z2ljYWwtb3IiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dC5kZWJ1
ZyA8PCAibG9naWNhbC14b3IiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBv
dXQuZGVidWcgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG91dC5k
ZWJ1ZyA8PCAiPHVua25vd24gb3A+IjsKKyAgICB9CisKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8PCAi
XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlz
aXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRJbmZvU2lu
ayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRo
KTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOiAgICAgICBvdXQuZGVidWcgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
Tm90OiAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1JbmNyZW1l
bnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0LmRl
YnVnIDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBy
ZUluY3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAiUHJlLURlY3Jl
bWVudCI7ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBv
dXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9Cb29sOm91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBib29sIjti
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0LmRlYnVnIDw8ICJDb252
ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OiBvdXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQi
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0LmRlYnVnIDw8ICJD
b252ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczog
ICAgICAgIG91dC5kZWJ1ZyA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0LmRlYnVnIDw8ICJkZWdyZWVzIjsgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQuZGVidWcg
PDwgInNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiAg
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29zaW5lIjsgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJ0YW5nZW50IjsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBvdXQuZGVi
dWcgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNv
czogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2Vu
dCI7ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMb2c6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImV4cDIi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAibG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BTcXJ0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzcXJ0IjsgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBvdXQuZGVidWcgPDwgImlu
dmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6ICAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQuZGVidWcgPDwgIlNpZ24iOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiRmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWlsOiAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZyYWN0aW9uIjsgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0LmRl
YnVnIDw8ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5v
cm1hbGl6ZTogICAgICBvdXQuZGVidWcgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQ
ZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAv
LwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHkiOyAgICAgICAgICAg
ICAgICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBv
dXQuZGVidWcgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgIAorCisgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYW55
IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIkJhZCB1bmFyeSBvcCIp
OworICAgIH0KKworICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3Ry
aW5nKCkgPDwgIikiOworCisgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9T
aW5rOworCisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wTnVsbCkgeworICAgICAgICBvdXQu
ZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJub2RlIGlzIHN0aWxsIEVPcE51bGwhIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9k
ZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2Ug
RU9wU2VxdWVuY2U6ICAgICAgb3V0LmRlYnVnIDw8ICJTZXF1ZW5jZVxuIjsgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21tYVxuIjsg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246ICAgICAgb3V0LmRlYnVnIDw8
ICJGdW5jdGlvbiBEZWZpbml0aW9uOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiAgb3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBDYWxsOiAi
IDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczog
ICAgb3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBQYXJhbWV0ZXJzOiAiOyAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogb3V0LmRlYnVnIDw8ICJDb25z
dHJ1Y3QgZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiAgb3V0
LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjMiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RWZWMzOiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjMyI7ICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjNCI7
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAgb3V0LmRlYnVnIDw8ICJD
b25zdHJ1Y3QgYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjog
b3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZl
YzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0LmRlYnVnIDw8
ICJDb25zdHJ1Y3QgaW50IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
Mjogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RJVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzMiOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qg
aXZlYzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0LmRlYnVn
IDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQuZGVidWcgPDwgIkNvbnN0
cnVjdCBzdHJ1Y3R1cmUiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAg
ICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJl
IEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwgIkNv
bXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVj
dG9yRXF1YWw6ICAgICAgb3V0LmRlYnVnIDw8ICJFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dC5kZWJ1ZyA8
PCAiTm90RXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcE1vZDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibW9kIjsgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQuZGVidWcgPDwgInBvdyI7ICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICBvdXQuZGVidWcgPDwgImFy
YyB0YW5nZW50IjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXQu
ZGVidWcgPDwgIm1pbiI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF4OiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJtYXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENsYW1wOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY2xhbXAiOyAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1peCI7ICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJzdGVwIjsg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dC5kZWJ1ZyA8
PCAic21vb3Roc3RlcCI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiAgICAg
IG91dC5kZWJ1ZyA8PCAiZGlzdGFuY2UiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRvdC1wcm9kdWN0IjsgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0LmRlYnVnIDw8
ICJjcm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VG
b3J3YXJkOiAgIG91dC5kZWJ1ZyA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQuZGVidWcgPDwgInJlZmxlY3QiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0
LmRlYnVnIDw8ICJyZWZyYWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcE11bDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHki
OyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJy
b3IsICJCYWQgYWdncmVnYXRpb24gb3AiKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3Ao
KSAhPSBFT3BTZXF1ZW5jZSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcFBhcmFtZXRlcnMpCisgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIiki
OworCisgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNl
bGVjdGlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAg
T3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQuZGVidWcgPDwgIlRl
c3QgY29uZGl0aW9uIGFuZCBzZWxlY3QiOworICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUt
PmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0
cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQuZGVidWcgPDwgIkNv
bmRpdGlvblxuIjsKKyAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2Rl
LT5nZXRUcnVlQmxvY2soKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZVxuIjsK
KyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxz
ZQorICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOworCisgICAgaWYg
KG5vZGUtPmdldEZhbHNlQmxvY2soKSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2lu
aywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQuZGVidWcgPDwgImZhbHNlIGNhc2VcbiI7Cisg
ICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgLS1kZXB0aDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUT3V0cHV0VHJhdmVy
c2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7Cisg
ICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIGludCBzaXplID0gbm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0VHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0QkNvbnN0KCkpCisgICAgICAgICAgICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAidHJ1ZSI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBvdXQuZGVidWcgPDwgImZhbHNlIjsKKworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiICgiIDw8ICJjb25zdCBib29sIiA8PCAiKSI7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpW2ldLmdldEZDb25zdCgpOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiIChj
b25zdCBmbG9hdClcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwg
IiAoY29uc3QgaW50KVxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgb3V0LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIlVua25vd24gY29uc3RhbnQiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVEluZm9T
aW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVw
dGgpOworCisgICAgb3V0LmRlYnVnIDw8ICJMb29wIHdpdGggY29uZGl0aW9uICI7CisgICAgaWYg
KCEgbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgICAgIG91dC5kZWJ1ZyA8PCAibm90ICI7CisgICAg
b3V0LmRlYnVnIDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0
cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VGVz
dCgpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBDb25kaXRpb25cbiI7CisgICAgICAg
IG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91
dC5kZWJ1ZyA8PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7CisKKyAgICBPdXRwdXRUcmVlVGV4dChp
bmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5nZXRCb2R5KCkpIHsKKyAgICAg
ICAgb3V0LmRlYnVnIDw8ICJMb29wIEJvZHlcbiI7CisgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTm8gbG9v
cCBib2R5XG4iOworCisgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpIHsKKyAgICAgICAgT3V0
cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0LmRlYnVnIDw8
ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7CisgICAgICAgIG5vZGUtPmdldFRlcm1pbmFs
KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2lu
azsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNo
IChub2RlLT5nZXRGbG93T3AoKSkgeworICAgICAgICBjYXNlIEVPcEtpbGw6ICAgICAgb3V0LmRl
YnVnIDw8ICJCcmFuY2g6IEtpbGwiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QnJlYWs6ICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQnJlYWsiOyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBDb250aW51
ZSI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJldHVybjogICAgb3V0LmRlYnVnIDw8
ICJCcmFuY2g6IFJldHVybiI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogVW5rbm93biBCcmFuY2giOyBicmVhazsKKyAgICB9
CisKKyAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8
PCAiIHdpdGggZXhwcmVzc2lvblxuIjsKKyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgbm9kZS0+
Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgLS1kZXB0aDsKKyAgICB9
IGVsc2UKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRv
IHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5p
dGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAorLy8gdHlwZSBvZiBub2Rl
LiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKy8vCit2b2lkIFRJbnRl
cm1lZGlhdGU6Om91dHB1dFRyZWUoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3Qg
PT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVE91dHB1dFRyYXZlcnNlciBpdChpbmZvU2lu
ayk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0ODYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1vcnkg
aGlnaC1sZXZlbCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKy8vIG9mIHNoYWRlcnMuICBU
aGlzIGlzIGEgdHJlZSB0aGF0IHBhcnNlciBjcmVhdGVzLgorLy8KKy8vIE5vZGVzIGluIHRoZSB0
cmVlIGFyZSBkZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIAor
Ly8gVEludGVybU5vZGUuIEVhY2ggaXMgYSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5vIHBy
ZXNldCBicmFuY2hpbmcgZmFjdG9yOworLy8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5
cGUgb2YgbGlzdCBvZiBjaGlsZHJlbi4KKy8vCisKKyNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAor
I2RlZmluZSBfX0lOVEVSTUVESUFURV9ICisKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIK
KyNpbmNsdWRlICJjb21waWxlci9UeXBlcy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbnN0YW50
VW5pb24uaCIKKworLy8KKy8vIE9wZXJhdG9ycyB1c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJz
ZSB0cmVlKSByZXByZXNlbnRhdGlvbi4KKy8vCitlbnVtIFRPcGVyYXRvciB7CisgICAgRU9wTnVs
bCwgICAgICAgICAgICAvLyBpZiBpbiBhIG5vZGUsIHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlz
IHN0aWxsIGJlaW5nIGJ1aWx0CisgICAgRU9wU2VxdWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEg
bGlzdCBvZiBzdGF0ZW1lbnRzLCBvciBwYXJhbWV0ZXJzLCBldGMuCisgICAgRU9wRnVuY3Rpb25D
YWxsLCAgICAKKyAgICBFT3BGdW5jdGlvbiwgICAgICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0
aW9uCisgICAgRU9wUGFyYW1ldGVycywgICAgICAvLyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUg
cGFyYW1ldGVycyB0byBhIGZ1bmN0aW9uCisKKyAgICBFT3BEZWNsYXJhdGlvbiwKKyAgICBFT3BQ
cm90b3R5cGUsCisKKyAgICAvLworICAgIC8vIFVuYXJ5IG9wZXJhdG9ycworICAgIC8vCisKKyAg
ICBFT3BOZWdhdGl2ZSwKKyAgICBFT3BMb2dpY2FsTm90LAorICAgIEVPcFZlY3RvckxvZ2ljYWxO
b3QsCisKKyAgICBFT3BQb3N0SW5jcmVtZW50LAorICAgIEVPcFBvc3REZWNyZW1lbnQsCisgICAg
RU9wUHJlSW5jcmVtZW50LAorICAgIEVPcFByZURlY3JlbWVudCwKKworICAgIEVPcENvbnZJbnRU
b0Jvb2wsCisgICAgRU9wQ29udkZsb2F0VG9Cb29sLAorICAgIEVPcENvbnZCb29sVG9GbG9hdCwK
KyAgICBFT3BDb252SW50VG9GbG9hdCwKKyAgICBFT3BDb252RmxvYXRUb0ludCwKKyAgICBFT3BD
b252Qm9vbFRvSW50LAorCisgICAgLy8KKyAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIC8v
CisKKyAgICBFT3BBZGQsCisgICAgRU9wU3ViLAorICAgIEVPcE11bCwKKyAgICBFT3BEaXYsCisg
ICAgRU9wRXF1YWwsCisgICAgRU9wTm90RXF1YWwsCisgICAgRU9wVmVjdG9yRXF1YWwsCisgICAg
RU9wVmVjdG9yTm90RXF1YWwsCisgICAgRU9wTGVzc1RoYW4sCisgICAgRU9wR3JlYXRlclRoYW4s
CisgICAgRU9wTGVzc1RoYW5FcXVhbCwKKyAgICBFT3BHcmVhdGVyVGhhbkVxdWFsLAorICAgIEVP
cENvbW1hLAorCisgICAgRU9wVmVjdG9yVGltZXNTY2FsYXIsCisgICAgRU9wVmVjdG9yVGltZXNN
YXRyaXgsCisgICAgRU9wTWF0cml4VGltZXNWZWN0b3IsCisgICAgRU9wTWF0cml4VGltZXNTY2Fs
YXIsCisKKyAgICBFT3BMb2dpY2FsT3IsCisgICAgRU9wTG9naWNhbFhvciwKKyAgICBFT3BMb2dp
Y2FsQW5kLAorCisgICAgRU9wSW5kZXhEaXJlY3QsCisgICAgRU9wSW5kZXhJbmRpcmVjdCwKKyAg
ICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKworICAgIEVPcFZlY3RvclN3aXp6bGUsCisKKyAgICAv
LworICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9ucyBwb3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0
b3JzCisgICAgLy8KKworICAgIEVPcFJhZGlhbnMsCisgICAgRU9wRGVncmVlcywKKyAgICBFT3BT
aW4sCisgICAgRU9wQ29zLAorICAgIEVPcFRhbiwKKyAgICBFT3BBc2luLAorICAgIEVPcEFjb3Ms
CisgICAgRU9wQXRhbiwKKworICAgIEVPcFBvdywKKyAgICBFT3BFeHAsCisgICAgRU9wTG9nLAor
ICAgIEVPcEV4cDIsCisgICAgRU9wTG9nMiwKKyAgICBFT3BTcXJ0LAorICAgIEVPcEludmVyc2VT
cXJ0LAorCisgICAgRU9wQWJzLAorICAgIEVPcFNpZ24sCisgICAgRU9wRmxvb3IsCisgICAgRU9w
Q2VpbCwKKyAgICBFT3BGcmFjdCwKKyAgICBFT3BNb2QsCisgICAgRU9wTWluLAorICAgIEVPcE1h
eCwKKyAgICBFT3BDbGFtcCwKKyAgICBFT3BNaXgsCisgICAgRU9wU3RlcCwKKyAgICBFT3BTbW9v
dGhTdGVwLAorCisgICAgRU9wTGVuZ3RoLAorICAgIEVPcERpc3RhbmNlLAorICAgIEVPcERvdCwK
KyAgICBFT3BDcm9zcywKKyAgICBFT3BOb3JtYWxpemUsCisgICAgRU9wRmFjZUZvcndhcmQsCisg
ICAgRU9wUmVmbGVjdCwKKyAgICBFT3BSZWZyYWN0LAorCisgICAgLy9FT3BEUGR4LCAgICAgICAg
ICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24K
KyAgICAvL0VPcERQZHksICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vRU9wRndpZHRoLCAgICAgICAgICAvLyBGcmFn
bWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisKKyAgICBFT3BN
YXRyaXhUaW1lc01hdHJpeCwKKworICAgIEVPcEFueSwKKyAgICBFT3BBbGwsCisKKyAgICAvLwor
ICAgIC8vIEJyYW5jaAorICAgIC8vCisKKyAgICBFT3BLaWxsLCAgICAgICAgICAgIC8vIEZyYWdt
ZW50IG9ubHkKKyAgICBFT3BSZXR1cm4sCisgICAgRU9wQnJlYWssCisgICAgRU9wQ29udGludWUs
CisKKyAgICAvLworICAgIC8vIENvbnN0cnVjdG9ycworICAgIC8vCisKKyAgICBFT3BDb25zdHJ1
Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0Qm9vbCwKKyAgICBFT3BDb25zdHJ1Y3RGbG9hdCwKKyAg
ICBFT3BDb25zdHJ1Y3RWZWMyLAorICAgIEVPcENvbnN0cnVjdFZlYzMsCisgICAgRU9wQ29uc3Ry
dWN0VmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMywK
KyAgICBFT3BDb25zdHJ1Y3RCVmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RJVmVjMiwKKyAgICBFT3BD
b25zdHJ1Y3RJVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RJVmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RN
YXQyLAorICAgIEVPcENvbnN0cnVjdE1hdDMsCisgICAgRU9wQ29uc3RydWN0TWF0NCwKKyAgICBF
T3BDb25zdHJ1Y3RTdHJ1Y3QsCisKKyAgICAvLworICAgIC8vIG1vdmVzCisgICAgLy8KKworICAg
IEVPcEFzc2lnbiwKKyAgICBFT3BJbml0aWFsaXplLAorICAgIEVPcEFkZEFzc2lnbiwKKyAgICBF
T3BTdWJBc3NpZ24sCisgICAgRU9wTXVsQXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVzTWF0cml4
QXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRp
bWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduLAorICAgIEVP
cERpdkFzc2lnbiwKK307CisKK2NsYXNzIFRJbnRlcm1UcmF2ZXJzZXI7CitjbGFzcyBUSW50ZXJt
QWdncmVnYXRlOworY2xhc3MgVEludGVybUJpbmFyeTsKK2NsYXNzIFRJbnRlcm1VbmFyeTsKK2Ns
YXNzIFRJbnRlcm1Db25zdGFudFVuaW9uOworY2xhc3MgVEludGVybVNlbGVjdGlvbjsKK2NsYXNz
IFRJbnRlcm1UeXBlZDsKK2NsYXNzIFRJbnRlcm1TeW1ib2w7CitjbGFzcyBUSW50ZXJtTG9vcDsK
K2NsYXNzIFRJbmZvU2luazsKKworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIHRoZSB0cmVlIG5vZGVz
CisvLworY2xhc3MgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKworICAgIFRJbnRlcm1Ob2RlKCkgOiBsaW5l
KDApIHt9CisgICAgdmlydHVhbCBUU291cmNlTG9jIGdldExpbmUoKSBjb25zdCB7IHJldHVybiBs
aW5lOyB9CisgICAgdmlydHVhbCB2b2lkIHNldExpbmUoVFNvdXJjZUxvYyBsKSB7IGxpbmUgPSBs
OyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUo
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2Rl
KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxl
Y3Rpb25Ob2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0
QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdl
dEFzTG9vcE5vZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7
IH0KK3Byb3RlY3RlZDoKKyAgICBUU291cmNlTG9jIGxpbmU7Cit9OworCisvLworLy8gVGhpcyBp
cyBqdXN0IHRvIGhlbHAgeWFjYy4KKy8vCitzdHJ1Y3QgVEludGVybU5vZGVQYWlyIHsKKyAgICBU
SW50ZXJtTm9kZSogbm9kZTE7CisgICAgVEludGVybU5vZGUqIG5vZGUyOworfTsKKworLy8KKy8v
IEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZXMgdGhhdCBoYXZlIGEgdHlwZS4KKy8vCitjbGFz
cyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRl
cm1UeXBlZChjb25zdCBUVHlwZSYgdCkgOiB0eXBlKHQpICB7IH0KKyAgICB2aXJ0dWFsIFRJbnRl
cm1UeXBlZCogZ2V0QXNUeXBlZCgpICAgICAgICAgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRUeXBlKGNvbnN0IFRUeXBlJiB0KSB7IHR5cGUgPSB0OyB9CisgICAgdmlydHVh
bCBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2aXJ0
dWFsIFRUeXBlKiBnZXRUeXBlUG9pbnRlcigpIHsgcmV0dXJuICZ0eXBlOyB9CisKKyAgICB2aXJ0
dWFsIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNp
Y1R5cGUoKTsgfQorICAgIHZpcnR1YWwgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7
IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9CisgICAgdmlydHVhbCBUUHJlY2lzaW9uIGdl
dFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAgICB2
aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5h
bFNpemUoKTsgfQorICAgIHZpcnR1YWwgaW50IGdldFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldEluc3RhbmNlU2l6ZSgpOyB9CisgICAgdmlydHVhbCBib29sIGlzTWF0cml4KCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5pc01hdHJpeCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXkoKSAg
Y29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWZWN0
b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzU2NhbGFyKCk7IH0KKyAgICBjb25zdCBj
aGFyKiBnZXRCYXNpY1N0cmluZygpICAgICAgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0
cmluZygpOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0KKyAgICBUU3RyaW5nIGdldENvbXBs
ZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0eXBlOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRv
LXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMuCisvLworY2xhc3MgVEludGVybUxvb3AgOiBwdWJsaWMg
VEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRlcm1Mb29wKFRJbnRlcm1Ob2RlICppbml0
LCBUSW50ZXJtTm9kZSogYUJvZHksIFRJbnRlcm1UeXBlZCogYVRlc3QsIFRJbnRlcm1UeXBlZCog
YVRlcm1pbmFsLCBib29sIHRlc3RGaXJzdCkgOiAKKyAgICAgICAgICAgIGluaXQoaW5pdCksCisg
ICAgICAgICAgICBib2R5KGFCb2R5KSwKKyAgICAgICAgICAgIHRlc3QoYVRlc3QpLAorICAgICAg
ICAgICAgdGVybWluYWwoYVRlcm1pbmFsKSwKKyAgICAgICAgICAgIGZpcnN0KHRlc3RGaXJzdCkg
eyB9CisgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAg
IFRJbnRlcm1Ob2RlICpnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQorICAgIFRJbnRlcm1Ob2Rl
ICpnZXRCb2R5KCkgeyByZXR1cm4gYm9keTsgfQorICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVzdCgp
IHsgcmV0dXJuIHRlc3Q7IH0KKyAgICBUSW50ZXJtVHlwZWQgKmdldFRlcm1pbmFsKCkgeyByZXR1
cm4gdGVybWluYWw7IH0KKyAgICBib29sIHRlc3RGaXJzdCgpIHsgcmV0dXJuIGZpcnN0OyB9Citw
cm90ZWN0ZWQ6CisgICAgVEludGVybU5vZGUgKmluaXQ7CisgICAgVEludGVybU5vZGUgKmJvZHk7
ICAgICAgIC8vIGNvZGUgdG8gbG9vcCBvdmVyCisgICAgVEludGVybVR5cGVkICp0ZXN0OyAgICAg
IC8vIGV4aXQgY29uZGl0aW9uIGFzc29jaWF0ZWQgd2l0aCBsb29wLCBjb3VsZCBiZSAwIGZvciAn
Zm9yJyBsb29wcworICAgIFRJbnRlcm1UeXBlZCAqdGVybWluYWw7ICAvLyBleGlzdHMgZm9yIGZv
ci1sb29wcworICAgIGJvb2wgZmlyc3Q7ICAgICAgICAgICAgICAvLyB0cnVlIGZvciB3aGlsZSBh
bmQgZm9yLCBub3QgZm9yIGRvLXdoaWxlCit9OworCisvLworLy8gSGFuZGxlIGJyZWFrLCBjb250
aW51ZSwgcmV0dXJuLCBhbmQga2lsbC4KKy8vCitjbGFzcyBUSW50ZXJtQnJhbmNoIDogcHVibGlj
IFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvciBvcCwg
VEludGVybVR5cGVkKiBlKSA6CisgICAgICAgICAgICBmbG93T3Aob3ApLAorICAgICAgICAgICAg
ZXhwcmVzc2lvbihlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KKyAg
ICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Citw
cm90ZWN0ZWQ6CisgICAgVE9wZXJhdG9yIGZsb3dPcDsKKyAgICBUSW50ZXJtVHlwZWQqIGV4cHJl
c3Npb247ICAvLyBub24temVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwor
fTsKKworLy8KKy8vIE5vZGVzIHRoYXQgY29ycmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50
cyBpbiB0aGUgc291cmNlIGNvZGUuCisvLworY2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBU
SW50ZXJtVHlwZWQgeworcHVibGljOgorICAgIC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBh
cyBzeW1ib2woc3ltKSwgdGhlIG1lbW9yeSBjb21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9m
IHN5bS4gSWYgc3ltIGNvbWVzIGZyb20KKyAgICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxs
b2NhdG9yLCB0aGVuIGl0IGNhdXNlcyBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxl
CisgICAgLy8gaXQgaXMgZXNzZW50aWFsIHRvIHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24g
dG8gc3ltYm9sCisgICAgVEludGVybVN5bWJvbChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBj
b25zdCBUVHlwZSYgdCkgOiAKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsg
c3ltYm9sID0gc3ltO30gCisgICAgdmlydHVhbCBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBp
ZDsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1
cm4gc3ltYm9sOyAgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7CisgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVy
biB0aGlzOyB9Citwcm90ZWN0ZWQ6CisgICAgaW50IGlkOworICAgIFRTdHJpbmcgc3ltYm9sOwor
fTsKKworY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsK
K3B1YmxpYzoKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBv
aW50ZXIsIGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50
ZXIodW5pb25Qb2ludGVyKSB7IH0KKyAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5UG9p
bnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CisgICAgdm9pZCBzZXRV
bmlvbkFycmF5UG9pbnRlcihDb25zdGFudFVuaW9uICpjKSB7IHVuaW9uQXJyYXlQb2ludGVyID0g
YzsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlv
bigpICB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIqICk7CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBU
SW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5UG9pbnRlcjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9y
IG5vZGUgdHlwZXMgdGhhdCBob2xkIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtT3BlcmF0
b3IgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUT3BlcmF0b3IgZ2V0T3Ao
KSBjb25zdCB7IHJldHVybiBvcDsgfQorICAgIGJvb2wgbW9kaWZpZXNTdGF0ZSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwcm9tb3Rl
KFRJbmZvU2luayYpIHsgcmV0dXJuIHRydWU7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtT3Bl
cmF0b3IoVE9wZXJhdG9yIG8pIDogVEludGVybVR5cGVkKFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQpKSwgb3Aobykge30KKyAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8sIFRUeXBl
JiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgb3Aobykge30gICAKKyAgICBUT3BlcmF0b3Igb3A7Cit9
OworCisvLworLy8gTm9kZXMgZm9yIGFsbCB0aGUgYmFzaWMgYmluYXJ5IG1hdGggb3BlcmF0b3Jz
LgorLy8KK2NsYXNzIFRJbnRlcm1CaW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1
YmxpYzoKKyAgICBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihv
KSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAg
dmlydHVhbCB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQgPSBuOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFJpZ2h0KFRJbnRlcm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAg
ICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxlZnQ7IH0K
KyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdo
dDsgfQorICAgIHZpcnR1YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1
cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworcHJvdGVj
dGVkOgorICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKKyAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Owor
fTsKKworLy8KKy8vIE5vZGVzIGZvciB1bmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBU
SW50ZXJtVW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50
ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1PcGVyYXRvcihvLCB0KSwg
b3BlcmFuZCgwKSB7fQorICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3Bl
cmF0b3IobyksIG9wZXJhbmQoMCkge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCog
bykgeyBvcGVyYW5kID0gbzsgfQorICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRPcGVyYW5k
KCkgeyByZXR1cm4gb3BlcmFuZDsgfQorICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1Vu
YXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5m
b1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQ7Cit9OworCit0
eXBlZGVmIFRWZWN0b3I8VEludGVybU5vZGUqPiBUSW50ZXJtU2VxdWVuY2U7Cit0eXBlZGVmIFRW
ZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlzdDsKKy8vCisvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24g
YW4gYXJiaXRyYXJ5IHNpemVkIHNldCBvZiBjaGlsZHJlbi4KKy8vCitjbGFzcyBUSW50ZXJtQWdn
cmVnYXRlIDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUFn
Z3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSks
IHByYWdtYVRhYmxlKDApIHsgfQorICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDog
VEludGVybU9wZXJhdG9yKG8pLCBwcmFnbWFUYWJsZSgwKSB7IH0KKyAgICB+VEludGVybUFnZ3Jl
Z2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQWdncmVn
YXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9CisgICAgdmlydHVhbCBUSW50ZXJt
U2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBuOyB9CisgICAgdmlydHVh
bCBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCB2b2lk
IHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgdmlydHVhbCBU
UXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1cm4gcXVhbGlmaWVyOyB9CisgICAg
dm9pZCBzZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9CisgICAgdm9pZCBzZXRE
ZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBkOyB9CisgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0
dXJuIG9wdGltaXplOyB9CisgICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9Cisg
ICAgdm9pZCBhZGRUb1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKTsKKyAg
ICBjb25zdCBUUHJhZ21hVGFibGUmIGdldFByYWdtYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gKnBy
YWdtYVRhYmxlOyB9Citwcm90ZWN0ZWQ6CisgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50
ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKKyAgICBUSW50ZXJt
QWdncmVnYXRlJiBvcGVyYXRvcj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxv
dyBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgVEludGVybVNlcXVlbmNlIHNlcXVlbmNlOworICAg
IFRRdWFsaWZpZXJMaXN0IHF1YWxpZmllcjsKKyAgICBUU3RyaW5nIG5hbWU7CisgICAgYm9vbCB1
c2VyRGVmaW5lZDsgLy8gdXNlZCBmb3IgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzCisgICAg
Ym9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVnOworICAgIFRQcmFnbWFUYWJsZSAqcHJhZ21h
VGFibGU7Cit9OworCisvLworLy8gRm9yIGlmIHRlc3RzLiAgU2ltcGxpZmllZCBzaW5jZSB0aGVy
ZSBpcyBubyBzd2l0Y2ggc3RhdGVtZW50LgorLy8KK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb24gOiBw
dWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRl
cm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCKSA6
CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSks
IGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9
CisgICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0
cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQiwgY29uc3QgVFR5cGUmIHR5cGUpIDoKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCh0eXBlKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIp
LCBmYWxzZUJsb2NrKGZhbHNlQikge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciopOworICAgIGJvb2wgdXNlc1Rlcm5hcnlPcGVyYXRvcigpIGNvbnN0IHsgcmV0
dXJuIGdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Ob2Rl
KiBnZXRDb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBjb25kaXRpb247IH0KKyAgICB2aXJ0dWFs
IFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVybiB0cnVlQmxvY2s7IH0K
KyAgICB2aXJ0dWFsIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2VCbG9jazsgfQorICAgIHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rp
b25Ob2RlKCkgeyByZXR1cm4gdGhpczsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCog
Y29uZGl0aW9uOworICAgIFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7CisgICAgVEludGVybU5vZGUq
IGZhbHNlQmxvY2s7Cit9OworCitlbnVtIFZpc2l0Cit7CisgICAgUHJlVmlzaXQsCisgICAgSW5W
aXNpdCwKKyAgICBQb3N0VmlzaXQKK307CisKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJl
ZS4gIFVzZXIgc2hvdWxkIGRlcml2ZSBmcm9tIHRoaXMsIAorLy8gcHV0IHRoZWlyIHRyYXZlcnNh
bCBzcGVjaWZpYyBkYXRhIGluIGl0LCBhbmQgdGhlbiBwYXNzCisvLyBpdCB0byBhIFRyYXZlcnNl
IG1ldGhvZC4KKy8vCisvLyBXaGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9k
cyBmb3Igbm9kZXMgeW91IHdhbnQgdmlzaXRlZC4KKy8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJl
LXZpc2l0IHRvIHNraXAgdmlzaXRpbmcgdGhhdCBub2RlJ3Mgc3VidHJlZS4KKy8vCitjbGFzcyBU
SW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVU
RShHbG9iYWxQb29sQWxsb2NhdG9yKQorCisgICAgVEludGVybVRyYXZlcnNlcihib29sIHByZVZp
c2l0ID0gdHJ1ZSwgYm9vbCBpblZpc2l0ID0gZmFsc2UsIGJvb2wgcG9zdFZpc2l0ID0gZmFsc2Us
IGJvb2wgcmlnaHRUb0xlZnQgPSBmYWxzZSkgOiAKKyAgICAgICAgICAgIHByZVZpc2l0KHByZVZp
c2l0KSwKKyAgICAgICAgICAgIGluVmlzaXQoaW5WaXNpdCksCisgICAgICAgICAgICBwb3N0Vmlz
aXQocG9zdFZpc2l0KSwKKyAgICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKKyAg
ICAgICAgICAgIGRlcHRoKDApIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopIHt9CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiopIHt9CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kikge3JldHVybiB0cnVlO30KKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBi
b29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCop
IHtyZXR1cm4gdHJ1ZTt9CisKKyAgICB2b2lkIGluY3JlbWVudERlcHRoKCkge2RlcHRoKys7fQor
ICAgIHZvaWQgZGVjcmVtZW50RGVwdGgoKSB7ZGVwdGgtLTt9CisKKyAgICBjb25zdCBib29sIHBy
ZVZpc2l0OworICAgIGNvbnN0IGJvb2wgaW5WaXNpdDsKKyAgICBjb25zdCBib29sIHBvc3RWaXNp
dDsKKyAgICBjb25zdCBib29sIHJpZ2h0VG9MZWZ0OworCitwcm90ZWN0ZWQ6CisgICAgaW50IGRl
cHRoOworfTsKKworI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0xPQ0FMX0lO
VEVSTUVESUFURV9JTkNMVURFRF8KKyNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURF
RF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKK3N0
cnVjdCBUVmVjdG9yRmllbGRzIHsKKyAgICBpbnQgb2Zmc2V0c1s0XTsKKyAgICBpbnQgbnVtOwor
fTsKKworLy8KKy8vIFNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRvIGhlbHAgcGFyc2UgYW5kIGJ1
aWxkIHRoZSB0cmVlLgorLy8KK2NsYXNzIFRJbmZvU2luazsKK2NsYXNzIFRJbnRlcm1lZGlhdGUg
eworcHVibGljOiAgICAKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xB
bGxvY2F0b3IpCisKKyAgICBUSW50ZXJtZWRpYXRlKFRJbmZvU2luayYgaSkgOiBpbmZvU2luayhp
KSB7IH0KKyAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnZl
cnNpb24oVE9wZXJhdG9yLCBjb25zdCBUVHlwZSYsIFRJbnRlcm1UeXBlZCopOworICAgIFRJbnRl
cm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwg
VEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYywgVFN5bWJvbFRhYmxlJik7CisgICAgVElu
dGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJ
bnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkSW5k
ZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1UeXBlZCogaW5kZXgs
IFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBv
cCwgVEludGVybU5vZGUqIGNoaWxkLCBUU291cmNlTG9jLCBUU3ltYm9sVGFibGUmKTsKKyAgICBU
SW50ZXJtQWdncmVnYXRlKiBncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJt
Tm9kZSogcmlnaHQsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dy
ZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwgVE9wZXJhdG9yLCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQs
IFRJbnRlcm1Ob2RlUGFpciBjb2RlLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFk
ZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBU
SW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCog
YWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFu
dFVuaW9uKiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIHBy
b21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJbnRlcm1Db25zdGFudFVuaW9uKikgOwor
ICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoVFNvdXJjZUxvYywgVEludGVybU5vZGUqLCBDb25zdGFu
dFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9vbCBzaW5nbGVDb25z
dGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgVEludGVybU5vZGUqIGFkZExvb3AoVElu
dGVybU5vZGUqLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1UeXBlZCosIGJv
b2wgdGVzdEZpcnN0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2go
VE9wZXJhdG9yLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFk
ZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYsIFRTb3VyY2VMb2MpOworICAgIGJvb2wgcG9zdFByb2Nl
c3MoVEludGVybU5vZGUqLCBFU2hMYW5ndWFnZSk7CisJdm9pZCByZW1vdmUoVEludGVybU5vZGUq
KTsKKyAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworCitwcml2YXRlOgorICAgIHZvaWQgb3BlcmF0b3I9
KFRJbnRlcm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3NpZ25tZW50cworfTsKKworI2VuZGlmIC8v
IF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVy
L29zaW5jbHVkZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9fT1NJTkNMVURFX0gKKyNkZWZpbmUgX19PU0lOQ0xVREVfSAorCisv
LworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVjaWZpYyBk
YXRhdHlwZXMgYW5kCisvLyBkZWNsYXJlcyBhbnkgd2luZG93cyBzcGVjaWZpYyBmdW5jdGlvbnMu
CisvLworCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorI2RlZmluZSBB
TkdMRV9PU19XSU4KKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fbGludXhf
XykgfHwgXAorICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0Rf
XykgfHwgXAorICAgICAgZGVmaW5lZChfX3N1bikKKyNkZWZpbmUgQU5HTEVfT1NfUE9TSVgKKyNl
bHNlCisjZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCisjZW5kaWYKKworI2lmIGRlZmluZWQo
QU5HTEVfT1NfV0lOKQorI2RlZmluZSBTVFJJQ1QKKyNkZWZpbmUgVkNfRVhUUkFMRUFOIDEKKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2luY2x1
ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
CisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCisvLworI2lmIGRlZmlu
ZWQoQU5HTEVfT1NfV0lOKQordHlwZWRlZiBEV09SRCBPU19UTFNJbmRleDsKKyNkZWZpbmUgT1Nf
SU5WQUxJRF9UTFNfSU5ERVggKFRMU19PVVRfT0ZfSU5ERVhFUykKKyNlbGlmIGRlZmluZWQoQU5H
TEVfT1NfUE9TSVgpCit0eXBlZGVmIHVuc2lnbmVkIGludCBPU19UTFNJbmRleDsKKyNkZWZpbmUg
T1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZGRkZGRgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4K
KworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpOworYm9vbCBPU19TZXRUTFNWYWx1ZShP
U19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKTsKK2Jvb2wgT1NfRnJlZVRMU0luZGV4
KE9TX1RMU0luZGV4IG5JbmRleCk7CisKK2lubGluZSB2b2lkKiBPU19HZXRUTFNWYWx1ZShPU19U
TFNJbmRleCBuSW5kZXgpCit7CisgICAgYXNzZXJ0KG5JbmRleCAhPSBPU19JTlZBTElEX1RMU19J
TkRFWCk7CisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisgICAgcmV0dXJuIFRsc0dldFZhbHVl
KG5JbmRleCk7CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorICAgIHJldHVybiBwdGhy
ZWFkX2dldHNwZWNpZmljKG5JbmRleCk7CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorfQorCisj
ZW5kaWYgLy8gX19PU0lOQ0xVREVfSApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2Nv
bXBpbGVyL29zc291cmNlX3Bvc2l4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXgg
c3BlY2lmaWMgZnVuY3Rpb25zCisvLworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgor
CisjaWYgIWRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEg
cG9zaXggc3BlY2lmaWMgZmlsZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KKyNlbmRpZgorCisvLwor
Ly8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0Fs
bG9jVExTSW5kZXgoKQoreworICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKKworICAgIC8v
CisgICAgLy8gQ3JlYXRlIGdsb2JhbCBwb29sIGtleS4KKyAgICAvLworICAgIGlmICgocHRocmVh
ZF9rZXlfY3JlYXRlKCZwUG9vbEluZGV4LCBOVUxMKSkgIT0gMCkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2Fs
IFN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuIHBQb29sSW5kZXg7CisgICAgfQorfQorCisKK2Jvb2wgT1NfU2V0VExTVmFs
dWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKK3sKKyAgICBpZiAobkluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJPU19TZXRU
TFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0g
MCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7
Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQoreworICAg
IGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wg
a2V5LgorICAgIC8vCisgICAgaWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvb3Nzb3Vy
Y2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL29zaW5jbHVkZS5oIgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlu
cyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZnVuY3Rpb25zCisvLworCisjaWYgIWRlZmluZWQoQU5H
TEVfT1NfV0lOKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHdpbmRvd3Mgc3BlY2lmaWMgZmls
ZSBpbiBhIG5vbiB3aW5kb3dzIGJ1aWxkLgorI2VuZGlmCisKKworLy8KKy8vIFRocmVhZCBMb2Nh
bCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkK
K3sKKwlEV09SRCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNfT1VU
X09GX0lOREVYRVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxl
IHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZBTElE
X1RMU19JTkRFWDsKKwl9CisKKwlyZXR1cm4gZHdJbmRleDsKK30KKworCitib29sIE9TX1NldFRM
U1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisJaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFs
dWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQly
ZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbklu
ZGV4KQoreworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0
KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisJCXJldHVybiBm
YWxzZTsKKwl9CisKKwlpZiAoVGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNl
CisJCXJldHVybiBmYWxzZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcGFy
c2VDb25zdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworLy8KKy8vIFVzZSB0
aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRvIG5vZGUgaW4gCisvLyB0
aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVENvbnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgeworcHVibGljOgorICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBj
VW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJ
bmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpIDogdW5pb25B
cnJheShjVW5pb24pLCB0eXBlKHQpLAorICAgICAgICBjb25zdHJ1Y3RvclR5cGUoY29uc3RydWN0
VHlwZSksIHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksIGluZm9TaW5rKHNp
bmspLCBzeW1ib2xUYWJsZShzeW1UYWJsZSksIGVycm9yKGZhbHNlKSwgaXNNYXRyaXgoZmFsc2Up
LCBtYXRyaXhTaXplKDApCisJeworCQlpbmRleCA9IDA7CisJfQorCisJYm9vbCBlcnJvcjsKKwor
cHJvdGVjdGVkOgorCXZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCXZvaWQgdmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisJYm9vbCB2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5Kik7CisJYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiopOworCWJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqKTsKKwlib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxv
b3AqKTsKKwlib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisK
KyAgICBpbnQgaW5kZXg7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAgICBUVHlw
ZSB0eXBlOworICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CisgICAgYm9vbCBzaW5nbGVD
b25zdGFudFBhcmFtOworICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZTsKKyAgICBpbnQgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29uc3RydWN0b3Ig
KCA0IGZvciB2ZWM0KQorICAgIGJvb2wgaXNNYXRyaXg7CisgICAgaW50IG1hdHJpeFNpemU7IC8v
IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5vdCB0aGUgaW5zdGFu
Y2Ugc2l6ZSkKK307CisKKy8vCisvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZl
cnNhbCBmdW5jdGlvbnMuICBUaGUgbGFzdCBvbmUKKy8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMg
dGhlIHRyYXZlcnNhbC4KKy8vCisvLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRv
IGhhdmUgdGhlIGV4dGVybmFsIHRyYXZlcnNhbAorLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4u
ICBJZiB5b3UgcHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2VsZiwKKy8vIHJldHVybiBmYWxzZS4KKy8v
CisKK3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2Rl
KQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlN5
bWJvbCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgp
KTsKKyAgICByZXR1cm47CisKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyID0gbm9kZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOworICAgIAorICAgIGlmIChx
dWFsaWZpZXIgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1
Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOwor
ICAgICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRM
aW5lKCkpOworICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsgIAor
ICAgIH0KKworICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAi
QmluYXJ5IE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5l
KCkpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6
OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUU3Ry
aW5nIGJ1ZjsKKyAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1j
b25zdGFudCB0byAiKTsKKyAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5v
ZGUtPmdldExpbmUoKSk7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsgIAor
fQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0NvbnN0cnVjdG9yKCkg
JiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BDb21tYSkgeworICAgICAgICBUU3RyaW5nIGJ1ZjsKKyAg
ICAgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQg
dG8gIik7CisgICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5v
ZGUtPmdldExpbmUoKSk7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAgCisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDAp
IHsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYm9vbCBmbGFnID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSAmJiBub2Rl
LT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
ICAgIGlmIChmbGFnKSAKKyAgICB7CisgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSB0cnVl
OyAKKyAgICAgICAgY29uc3RydWN0b3JUeXBlID0gbm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICAgICAgaWYgKG5vZGUt
PmdldFR5cGUoKS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpc01hdHJpeCA9IHRydWU7Cisg
ICAgICAgICAgICBtYXRyaXhTaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7
CisgICAgICAgIH0KKyAgICB9ICAgICAgIAorCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0
ZXJhdG9yIHAgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHArKykg
eworCisgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcENvbW1hKQorICAgICAgICAgICAg
aW5kZXggPSAwOyAgICAgICAgICAgCisKKyAgICAgICAgKCpwKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgfSAgIAorICAgIGlmIChmbGFnKSAKKyAgICB7CisgICAgICAgIHNpbmdsZUNvbnN0YW50UGFy
YW0gPSBmYWxzZTsgICAKKyAgICAgICAgY29uc3RydWN0b3JUeXBlID0gRU9wTnVsbDsKKyAgICAg
ICAgc2l6ZSA9IDA7CisgICAgICAgIGlzTWF0cml4ID0gZmFsc2U7CisgICAgICAgIG1hdHJpeFNp
emUgPSAwOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVy
c2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkK
K3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJTZWxl
Y3Rpb24gTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUo
KSk7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUQ29u
c3RUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9k
ZSkKK3sKKyAgICBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7Cisg
ICAgaW50IGluc3RhbmNlU2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGlu
ZGV4ID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaW5nbGVD
b25zdGFudFBhcmFtKSB7CisgICAgICAgIGludCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKKyAgICAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5
ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBp
IDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4
XSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKworICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsK
KyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgaWYgKCFpc01hdHJpeCkgeworICAgICAgICAgICAgaW50
IGNvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07CisKKyAgICAgICAgICAgICAgICAoaW5kZXgpKys7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCkgPiAxKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKKyAg
ICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBpbnQgZWxlbWVudCA9IGluZGV4
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAoaSAt
IGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworICAgICAgICAgICAg
ICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25z
dCgwLjBmKTsKKworICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAg
ICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIkxvb3AgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIs
IG5vZGUtPmdldExpbmUoKSk7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQnJhbmNoKiBub2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIkJyYW5jaCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwg
bm9kZS0+Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0
byBzdGFydCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGlu
aXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9k
ZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLworYm9vbCBUSW50
ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShUU291cmNlTG9jIGxpbmUsIFRJbnRlcm1Ob2RlKiBy
b290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBl
LCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50
UGFyYW0pCit7CisgICAgaWYgKHJvb3QgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNv
bnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKworICAgIHJvb3QtPnRy
YXZlcnNlKCZpdCk7CisgICAgaWYgKGl0LmVycm9yKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfY29tbW9uLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90
cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2oJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2oJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0i
VmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0idHJhbnNsYXRvcl9jb21tb24i
DQorCVByb2plY3RHVUlEPSJ7NUIzQTZEQjgtMUU3RS00MEQ3LTkyQjktREE4QUFFNjE5RkFEfSIN
CisJUm9vdE5hbWVzcGFjZT0iY29tcGlsZXIiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFy
Z2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxh
dGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZp
bGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRp
b24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIk
KENvbmZpZ3VyYXRpb25OYW1lKVxjb21tb24iDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQor
CQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1
aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWls
ZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGlt
aXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0
RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8uLi9pbmNsdWRlIg0KKwkJCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9f
REVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFz
aWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJVXNlUHJl
Y29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRC
aXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29t
cGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBp
bGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0K
KwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29u
ZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0
aW9uTmFtZSlcY29tbW9uIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Ig0KKwkJCUNoYXJhY3Rl
clNldD0iMCINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4
cGFuc2lvbj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0
RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpcikuLi8uLi9pbmNsdWRlIg0KKwkJCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9f
REVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIw
Ig0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0K
KwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0lu
Zm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5h
Z2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQ
cmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJp
YW5Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVp
bGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0
aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZp
bHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtk
ZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3
MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cZGVidWcuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnbHNsYW5nLmwiDQorCQkJCT4NCisJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxU
b29sDQorCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJRGVzY3JpcHRpb249
IkV4ZWN1dGluZyBmbGV4IG9uICQoSW5wdXRQYXRoKSINCisJCQkJCQlDb21tYW5kTGluZT0iQGVj
aG8gb24mI3gwRDsmI3gwQTtpZiBFWElTVCAmcXVvdDskKElucHV0RGlyKUdlbl9nbHNsYW5nLmNw
cCZxdW90OyBkZWwgJnF1b3Q7JChJbnB1dERpcilHZW5fZ2xzbGFuZy5jcHAmcXVvdDsmI3gwRDsm
I3gwQTsmcXVvdDskKElucHV0RGlyKXRvb2xzXGZsZXguZXhlJnF1b3Q7ICZxdW90OyQoSW5wdXRQ
YXRoKSZxdW90OyYjeDBEOyYjeDBBO3JlbmFtZSAmcXVvdDskKElucHV0RGlyKWxleC55eS5jJnF1
b3Q7IEdlbl8kKElucHV0TmFtZSkuY3BwJiN4MEQ7JiN4MEE7QGVjaG8gb2ZmIg0KKwkJCQkJCUFk
ZGl0aW9uYWxEZXBlbmRlbmNpZXM9Imdsc2xhbmdfdGFiLmgiDQorCQkJCQkJT3V0cHV0cz0iJChJ
bnB1dERpcilHZW5fZ2xzbGFuZy5jcHAiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
DQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0K
KwkJCQkJCURlc2NyaXB0aW9uPSJFeGVjdXRpbmcgZmxleCBvbiAkKElucHV0UGF0aCkiDQorCQkJ
CQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7aWYgRVhJU1QgJnF1b3Q7JChJbnB1
dERpcilHZW5fZ2xzbGFuZy5jcHAmcXVvdDsgZGVsICZxdW90OyQoSW5wdXREaXIpR2VuX2dsc2xh
bmcuY3BwJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChJbnB1dERpcil0b29sc1xmbGV4LmV4ZSZx
dW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTtyZW5hbWUgJnF1b3Q7JChJ
bnB1dERpcilsZXgueXkuYyZxdW90OyBHZW5fJChJbnB1dE5hbWUpLmNwcCYjeDBEOyYjeDBBO0Bl
Y2hvIG9mZiINCisJCQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbHNsYW5nX3RhYi5oIg0K
KwkJCQkJCU91dHB1dHM9IiQoSW5wdXREaXIpR2VuX2dsc2xhbmcuY3BwIg0KKwkJCQkJLz4NCisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXGdsc2xhbmcueSINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlO
YW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQlEZXNjcmlwdGlvbj0iRXhlY3V0aW5nIEJp
c29uIG9uICQoSW5wdXRQYXRoKSINCisJCQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsm
I3gwQTtTRVQgQklTT05fU0lNUExFPXRvb2xzXGJpc29uLnNpbXBsZSYjeDBEOyYjeDBBO1NFVCBC
SVNPTl9IQUlSWT10b29sc1xiaXNvbi5zaW1wbGUmI3gwRDsmI3gwQTtpZiBFWElTVCAmcXVvdDsk
KElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCZxdW90OyBkZWwgJnF1b3Q7JChJbnB1
dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAmcXVvdDsmI3gwRDsmI3gwQTt0b29sc1xiaXNv
bi5leGUgLWQgLXQgLXYgJChJbnB1dE5hbWUpLnkmI3gwRDsmI3gwQTtyZW5hbWUgJnF1b3Q7JChJ
bnB1dERpcikkKElucHV0TmFtZSlfdGFiLmMmcXVvdDsgR2VuXyQoSW5wdXROYW1lKV90YWIuY3Bw
JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmIg0KKwkJCQkJCU91dHB1dHM9IiQoSW5wdXREaXIpR2VuXyQo
SW5wdXROYW1lKV90YWIuY3BwIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJ
CQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJ
CQlEZXNjcmlwdGlvbj0iRXhlY3V0aW5nIEJpc29uIG9uICQoSW5wdXRQYXRoKSINCisJCQkJCQlD
b21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtTRVQgQklTT05fU0lNUExFPXRvb2xzXGJp
c29uLnNpbXBsZSYjeDBEOyYjeDBBO1NFVCBCSVNPTl9IQUlSWT10b29sc1xiaXNvbi5zaW1wbGUm
I3gwRDsmI3gwQTtpZiBFWElTVCAmcXVvdDskKElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFi
LmNwcCZxdW90OyBkZWwgJnF1b3Q7JChJbnB1dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAm
cXVvdDsmI3gwRDsmI3gwQTt0b29sc1xiaXNvbi5leGUgLWQgLXQgLXYgJChJbnB1dE5hbWUpLnkm
I3gwRDsmI3gwQTtyZW5hbWUgJnF1b3Q7JChJbnB1dERpcikkKElucHV0TmFtZSlfdGFiLmMmcXVv
dDsgR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwJiN4MEQ7JiN4MEE7QGVjaG8gb2ZmIg0KKwkJCQkJ
CU91dHB1dHM9IiQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwIg0KKwkJCQkJLz4N
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXEluZm9TaW5rLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZS5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluaXRpYWxpemVEbGwuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJ
bnRlcm1lZGlhdGUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxpbnRlcm1PdXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnRlcm1UcmF2ZXJzZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXExpbmsuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxvc3NvdXJj
ZV93aW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxwYXJzZUNvbnN0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUGFyc2VIZWxwZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQb29sQWxsb2MuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWFsaWZpZXJB
bGl2ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXFJlbW92ZVRyZWUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXJMYW5nLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3ltYm9sVGFibGUuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0icHJlcHJvY2Vzc29yIg0KKwkJ
CQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXGF0b20u
YyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuXHByZXByb2Nlc3NvclxjcHAuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxjcHBzdHJ1Y3QuYyINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXBy
b2Nlc3NvclxtZW1vcnkuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxzY2FubmVyLmMiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3Jc
c3ltYm9scy5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHRva2Vucy5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJPC9GaWx0ZXI+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJnZW5lcmF0ZWQiDQorCQkJ
CT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxHZW5fZ2xzbGFuZy5jcHAiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxH
ZW5fZ2xzbGFuZ190YWIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+
DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJ
RmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0i
ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxCYXNlVHlwZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29tbW9uLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbnN0YW50VW5pb24uaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cZGVi
dWcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cSW5mb1NpbmsuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplRGxsLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluaXRpYWxpemVHbG9iYWxzLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5caW50ZXJtZWRpYXRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGxvY2FsaW50ZXJtZWRpYXRlLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXE1NYXAu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
b3NpbmNsdWRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFBhcnNlSGVscGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFBvb2xBbGxvYy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWFsaWZpZXJBbGl2ZS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW1vdmVUcmVl
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxpbmNsdWRlXEdMU0xBTkdcUmVzb3VyY2VMaW1pdHMuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xTTEFOR1xT
aGFkZXJMYW5nLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFNoSGFuZGxlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXFN5bWJvbFRhYmxlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFR5cGVzLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXHVuaXN0ZC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0icHJlcHJvY2Vzc29yIg0KKwkJCQk+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXGF0b20uaCIN
CisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
XHByZXByb2Nlc3Nvclxjb21waWxlLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcY3BwLmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNz
b3JcbWVtb3J5LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJl
bGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JccGFyc2VyLmgiDQorCQkJCQk+DQorCQkJCTwvRmls
ZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JccHJlcHJv
Y2Vzcy5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHNjYW5uZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxzbGdsb2JhbHMu
aCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuXHByZXByb2Nlc3NvclxzeW1ib2xzLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcdG9rZW5zLmgiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9
ImdlbmVyYXRlZCINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGds
c2xhbmdfdGFiLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwv
RmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFs
U3R1ZGlvUHJvamVjdD4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yX2hsc2wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfaGxzbC52Y3By
b2oJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9j
b21waWxlci90cmFuc2xhdG9yX2hsc2wudmNwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZp
c3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249
IjkuMDAiDQorCU5hbWU9InRyYW5zbGF0b3JfaGxzbCINCisJUHJvamVjdEdVSUQ9Ins1NjIwRjBF
NC02QzQzLTQ5QkMtQTE3OC1CODA0RTFBMEMzQTd9Ig0KKwlSb290TmFtZXNwYWNlPSJDcm9zc0Nv
bXBpbGVySExTTCINCisJS2V5d29yZD0iV2luMzJQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJz
aW9uPSIxOTY2MTMiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9
IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZp
bGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRl
YnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5h
bWUpXGhsc2wiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIx
Ig0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJ
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS4uLzskKFByb2plY3RE
aXIpLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19E
RUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFs
UmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1l
TGlicmFyeT0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdM
ZXZlbD0iMyINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3Vy
YXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJ
T3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJ
CUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSlcaGxzbCINCisJCQlD
b25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1
aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWls
ZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGlt
aXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJs
ZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv
cmllcz0iJChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZSINCisJCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05P
X1dBUk5JTkdTO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIw
Ig0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJl
c291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlu
a0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZl
bnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+
DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXIN
CisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29k
bDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEt
QzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXENvZGVHZW5ITFNMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cT3V0cHV0SExTTC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRyYW5zbGF0b3JITFNMLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
VW5mb2xkU2VsZWN0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJ
PEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDto
bTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0
LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXE91dHB1dEhMU0wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVHJhbnNsYXRvckhMU0wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVW5mb2xkU2VsZWN0LmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xv
YmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvdW5pc3RkLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci91bmlz
dGQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorLy8gVGhpcyBpcyBhIE5VTEwgZmlsZSBh
bmQgaXMgbWVhbnQgdG8gYmUgZW1wdHkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQw
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQg
KGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklE
SUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0
YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBz
b2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBk
byBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxs
LCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRl
cm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVy
c29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMg
aW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIp
LCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEg
U29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29y
IGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJ
RElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5W
SURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJz
IGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVp
dGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJ
RElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBz
dGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVz
cyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0
IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQg
YnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUg
TlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNl
bnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVE
IE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VU
IExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZS
SU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFU
SU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUg
TElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlks
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBM
T1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1P
RElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBI
T1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBF
VkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIGF0b20uYworLy8KKwor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworI3VuZGVmIG1hbGxvYworI3VuZGVmIHJlYWxsb2MK
KyN1bmRlZiBmcmVlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgaW50IHZh
bDsKKyAgICBjb25zdCBjaGFyICpzdHI7Cit9IHRva2Vuc1tdID0geworICAgIHsgQ1BQX0FORF9P
UCwgICAgICAgICAiJiYiIH0sCisgICAgeyBDUFBfQU5EX0FTU0lHTiwgICAgICImPSIgfSwKKyAg
ICB7IENQUF9TVUJfQVNTSUdOLCAgICAgIi09IiB9LAorICAgIHsgQ1BQX01PRF9BU1NJR04sICAg
ICAiJT0iIH0sCisgICAgeyBDUFBfQUREX0FTU0lHTiwgICAgICIrPSIgfSwKKyAgICB7IENQUF9E
SVZfQVNTSUdOLCAgICAgIi89IiB9LAorICAgIHsgQ1BQX01VTF9BU1NJR04sICAgICAiKj0iIH0s
CisgICAgeyBDUFBfUklHSFRfQlJBQ0tFVCwgICI6PiIgfSwKKyAgICB7IENQUF9FUV9PUCwgICAg
ICAgICAgIj09IiB9LAorICAgIHsgQ1BQX1hPUl9PUCwgICAgICAgICAiXl4iIH0sIAorICAgIHsg
Q1BQX1hPUl9BU1NJR04sICAgICAiXj0iIH0sIAorICAgIHsgQ1BQX0ZMT0FUQ09OU1RBTlQsICAi
PGZsb2F0LWNvbnN0PiIgfSwKKyAgICB7IENQUF9HRV9PUCwgICAgICAgICAgIj49IiB9LAorICAg
IHsgQ1BQX1JJR0hUX09QLCAgICAgICAiPj4iIH0sCisgICAgeyBDUFBfUklHSFRfQVNTSUdOLCAg
ICI+Pj0iIH0sIAorICAgIHsgQ1BQX0lERU5USUZJRVIsICAgICAiPGlkZW50PiIgfSwKKyAgICB7
IENQUF9JTlRDT05TVEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9LAorICAgIHsgQ1BQX0xFX09QLCAg
ICAgICAgICAiPD0iIH0sCisgICAgeyBDUFBfTEVGVF9PUCwgICAgICAgICI8PCIgfSwKKyAgICB7
IENQUF9MRUZUX0FTU0lHTiwgICAgIjw8PSIgfSwKKyAgICB7IENQUF9MRUZUX0JSQUNLRVQsICAg
Ijw6IiB9LAorICAgIHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAiPCUiIH0sIAorICAgIHsgQ1BQX0RF
Q19PUCwgICAgICAgICAiLS0iIH0sCisgICAgeyBDUFBfUklHSFRfQlJBQ0UsICAgICIlPiIgfSwg
CisgICAgeyBDUFBfTkVfT1AsICAgICAgICAgICIhPSIgfSwKKyAgICB7IENQUF9PUl9PUCwgICAg
ICAgICAgInx8IiB9LAorICAgIHsgQ1BQX09SX0FTU0lHTiwgICAgICAifD0iIH0sIAorICAgIHsg
Q1BQX0lOQ19PUCwgICAgICAgICAiKysiIH0sCisgICAgeyBDUFBfU1RSQ09OU1RBTlQsICAgICI8
c3RyaW5nLWNvbnN0PiIgfSwKKyAgICB7IENQUF9UWVBFSURFTlRJRklFUiwgIjx0eXBlLWlkZW50
PiIgfSwKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX1NUUklOR19UQUJMRV9TSVpFIDE2Mzg0
CisKK3R5cGVkZWYgc3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7CisgICAgY2hhciAqc3RyaW5nczsK
KyAgICBpbnQgbmV4dEZyZWU7CisgICAgaW50IHNpemU7Cit9IFN0cmluZ1RhYmxlOworCisvKgor
ICogSW5pdFN0cmluZ1RhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBzdHJpbmcgdGFibGUuCisgKgor
ICovCisKK3N0YXRpYyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCit7
CisgICAgc3RhYmxlLT5zdHJpbmdzID0gKGNoYXIgKikgbWFsbG9jKElOSVRfU1RSSU5HX1RBQkxF
X1NJWkUpOworICAgIGlmICghc3RhYmxlLT5zdHJpbmdzKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAvLyBaZXJvLXRoIG9mZnNldCBtZWFucyAiZW1wdHkiIHNvIGRvbid0IHVzZSBpdC4KKyAgICBz
dGFibGUtPm5leHRGcmVlID0gMTsKKyAgICBzdGFibGUtPnNpemUgPSBJTklUX1NUUklOR19UQUJM
RV9TSVpFOworICAgIHJldHVybiAxOworfSAvLyBJbml0U3RyaW5nVGFibGUKKworLyoKKyAqIEZy
ZWVTdHJpbmdUYWJsZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRhYmxlLgorICoKKyAqLworCitzdGF0
aWMgdm9pZCBGcmVlU3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKK3sKKyAgICBpZiAo
c3RhYmxlLT5zdHJpbmdzKQorICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7CisgICAgc3Rh
YmxlLT5zdHJpbmdzID0gTlVMTDsKKyAgICBzdGFibGUtPm5leHRGcmVlID0gMDsKKyAgICBzdGFi
bGUtPnNpemUgPSAwOworfSAvLyBGcmVlU3RyaW5nVGFibGUKKworLyoKKyAqIEhhc2hTdHJpbmco
KSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0aW9uLgorICoKKyAqLwor
CitzdGF0aWMgaW50IEhhc2hTdHJpbmcoY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgaHZhbCA9
IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZhbCA9IChodmFsKjEzNTA3ICsgKnMq
MTk3KSBeIChodmFsID4+IDIpOworICAgICAgICBzKys7CisgICAgfQorICAgIHJldHVybiBodmFs
ICYgMHg3ZmZmZmZmZjsKK30gLy8gSGFzaFN0cmluZworCisvKgorICogSGFzaFN0cmluZzIoKSAt
IEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgaW5jcmltZW50aW5nIGhhc2ggZnVuY3Rpb24uCisgKgor
ICovCisKK3N0YXRpYyBpbnQgSGFzaFN0cmluZzIoY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQg
aHZhbCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZhbCA9IChodmFsKjcyOSAr
ICpzKjM3KSBeIChodmFsID4+IDEpOworICAgICAgICBzKys7CisgICAgfQorICAgIHJldHVybiBo
dmFsOworfSAvLyBIYXNoU3RyaW5nMgorCisvKgorICogQWRkU3RyaW5nKCkgLSBBZGQgYSBzdHJp
bmcgdG8gYSBzdHJpbmcgdGFibGUuICBSZXR1cm4gaXQncyBvZmZzZXQuCisgKgorICovCisKK3N0
YXRpYyBpbnQgQWRkU3RyaW5nKFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7
CisgICAgaW50IGxlbiwgbG9jOworICAgIGNoYXIgKnN0cjsKKworICAgIGxlbiA9IChpbnQpIHN0
cmxlbihzKTsKKyAgICBpZiAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiArIDEgPj0gc3RhYmxlLT5z
aXplKSB7CisgICAgICAgIGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAwMDAwKTsKKyAgICAgICAg
c3RyID0gKGNoYXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKKyAgICAgICAgbWVtY3B5KHN0
ciwgc3RhYmxlLT5zdHJpbmdzLCBzdGFibGUtPnNpemUpOworICAgICAgICBmcmVlKHN0YWJsZS0+
c3RyaW5ncyk7CisgICAgICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsKKyAgICB9CisgICAgbG9j
ID0gc3RhYmxlLT5uZXh0RnJlZTsKKyAgICBzdHJjcHkoJnN0YWJsZS0+c3RyaW5nc1tsb2NdLCBz
KTsKKyAgICBzdGFibGUtPm5leHRGcmVlICs9IGxlbiArIDE7CisgICAgcmV0dXJuIGxvYzsKK30g
Ly8gQWRkU3RyaW5nCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEhhc2ggdGFibGU6IC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX0hBU0hfVEFCTEVfU0laRSAyMDQ3
CisjZGVmaW5lIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgMworCit0eXBlZGVmIHN0cnVjdCBI
YXNoRW50cnlfUmVjIHsKKyAgICBpbnQgaW5kZXg7ICAgICAgLy8gU3RyaW5nIHRhYmxlIG9mZnNl
dCBvZiBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgICBpbnQgdmFsdWU7ICAgICAgLy8gQXRvbSAo
c3ltYm9sKSB2YWx1ZQorfSBIYXNoRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IEhhc2hUYWJsZV9S
ZWMgeworICAgIEhhc2hFbnRyeSAqZW50cnk7CisgICAgaW50IHNpemU7CisgICAgaW50IGVudHJp
ZXM7CisgICAgaW50IGNvdW50c1tIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TICsgMV07Cit9IEhh
c2hUYWJsZTsKKworLyoKKyAqIEluaXRIYXNoVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGhhc2gg
dGFibGUuCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5pdEhhc2hUYWJsZShIYXNoVGFibGUgKmh0
YWJsZSwgaW50IGZzaXplKQoreworICAgIGludCBpaTsKKworICAgIGh0YWJsZS0+ZW50cnkgPSAo
SGFzaEVudHJ5ICopIG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSpmc2l6ZSk7CisgICAgaWYgKCFo
dGFibGUtPmVudHJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICBodGFibGUtPnNpemUgPSBmc2l6
ZTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBmc2l6ZTsgaWkrKykgeworICAgICAgICBodGFibGUt
PmVudHJ5W2lpXS5pbmRleCA9IDA7CisgICAgICAgIGh0YWJsZS0+ZW50cnlbaWldLnZhbHVlID0g
MDsKKyAgICB9CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKKyAgICBmb3IgKGlpID0gMDsgaWkg
PD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykKKyAgICAgICAgaHRhYmxlLT5jb3Vu
dHNbaWldID0gMDsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5pdEhhc2hUYWJsZQorCisvKgorICog
RnJlZUhhc2hUYWJsZSgpIC0gRnJlZSB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKi8KKworc3RhdGlj
IHZvaWQgRnJlZUhhc2hUYWJsZShIYXNoVGFibGUgKmh0YWJsZSkKK3sKKyAgICBpZiAoaHRhYmxl
LT5lbnRyeSkKKyAgICAgICAgZnJlZShodGFibGUtPmVudHJ5KTsKKyAgICBodGFibGUtPmVudHJ5
ID0gTlVMTDsKKyAgICBodGFibGUtPnNpemUgPSAwOworICAgIGh0YWJsZS0+ZW50cmllcyA9IDA7
Cit9IC8vIEZyZWVIYXNoVGFibGUKKworLyoKKyAqIEVtcHR5KCkgLSBTZWUgaWYgYSBoYXNoIHRh
YmxlIGVudHJ5IGlzIGVtcHR5LgorICoKKyAqLworCitzdGF0aWMgaW50IEVtcHR5KEhhc2hUYWJs
ZSAqaHRhYmxlLCBpbnQgaGFzaGxvYykKK3sKKyAgICBhc3NlcnQoaGFzaGxvYyA+PSAwICYmIGhh
c2hsb2MgPCBodGFibGUtPnNpemUpOworICAgIGlmIChodGFibGUtPmVudHJ5W2hhc2hsb2NdLmlu
ZGV4ID09IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfSAvLyBFbXB0eQorCisvKgorICogTWF0Y2goKSAtIFNlZSBpZiBhIGhh
c2ggdGFibGUgZW50cnkgaXMgbWF0Y2hlcyBhIHN0cmluZy4KKyAqCisgKi8KKworc3RhdGljIGlu
dCBNYXRjaChIYXNoVGFibGUgKmh0YWJsZSwgU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hh
ciAqcywgaW50IGhhc2hsb2MpCit7CisgICAgaW50IHN0cmxvYzsKKworICAgIHN0cmxvYyA9IGh0
YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXg7CisgICAgaWYgKCFzdHJjbXAocywgJnN0YWJsZS0+
c3RyaW5nc1tzdHJsb2NdKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIE1hdGNoCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIEF0b20gdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklU
X0FUT01fVEFCTEVfU0laRSAxMDI0CisKKworc3RydWN0IEF0b21UYWJsZV9SZWMgeworICAgIFN0
cmluZ1RhYmxlIHN0YWJsZTsgLy8gU3RyaW5nIHRhYmxlLgorICAgIEhhc2hUYWJsZSBodGFibGU7
ICAgLy8gSGFzaGVzIHN0cmluZyB0byBhdG9tIG51bWJlciBhbmQgdG9rZW4gdmFsdWUuICBNdWx0
aXBsZSBzdHJpbmdzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0aGUgc2Ft
ZSB0b2tlbiB2YWx1ZSBidXQgZWFjaCB1bmlxdWUgc3RyaW5nIGlzIGEgdW5pcXVlIGF0b20uCisg
ICAgaW50ICphbWFwOyAgICAgICAgICAvLyBNYXBzIGF0b20gdmFsdWUgdG8gb2Zmc2V0IGluIHN0
cmluZyB0YWJsZS4gIEF0b21zIGFsbCBtYXAgdG8gdW5pcXVlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdHJpbmdzIGV4Y2VwdCBmb3Igc29tZSB1bmRlZmluZWQgdmFsdWVzIGluIHRoZSBs
b3dlciwgZml4ZWQgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGF0b20g
dGFibGUgdGhhdCBtYXAgdG8gIjx1bmRlZmluZWQ+Ii4gIFRoZSBsb3dlc3QgMjU2IGF0b21zCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHNpbmdsZSBjaGFyYWN0ZXIg
QVNDSUkgdmFsdWVzIGV4Y2VwdCBmb3IgYWxwaGFudW1lcmljCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFyYWN0ZXJzIGFuZCAnXycsIHdoaWNoIGNhbiBiZSBvdGhlciB0b2tlbnMuICBO
ZXh0IGNvbWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZSB0b2tlbnMg
d2l0aCB0aGVpciBhdG9tIHZhbHVlcyBlcXVhbCB0byB0aGUgdG9rZW4gdmFsdWUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbWUgcHJlZGVmaW5lZCBhdG9tcywgZm9sbG93ZWQg
YnkgdXNlciBzcGVjaWZpZWQgaWRlbnRpZmllcnMuCisgICAgaW50ICphcmV2OyAgICAgICAgICAv
LyBSZXZlcnNlZCBhdG9tIGZvciBzeW1ib2wgdGFibGUgdXNlLgorICAgIGludCBuZXh0RnJlZTsK
KyAgICBpbnQgc2l6ZTsKK307CisKK3N0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyAwIH0g
fTsKK0F0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CisKK3N0YXRpYyBpbnQgQWRkQXRvbUZp
eGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRvbSk7CisKKy8qCisg
KiBHcm93QXRvbVRhYmxlKCkgLSBHcm93IHRoZSBhdG9tIHRhYmxlIHRvIGF0IGxlYXN0ICJzaXpl
IiBpZiBpdCdzIHNtYWxsZXIuCisgKgorICovCisKK3N0YXRpYyBpbnQgR3Jvd0F0b21UYWJsZShB
dG9tVGFibGUgKmF0YWJsZSwgaW50IHNpemUpCit7CisgICAgaW50ICpuZXdtYXAsICpuZXdyZXY7
CisKKyAgICBpZiAoYXRhYmxlLT5zaXplIDwgc2l6ZSkgeworICAgICAgICBpZiAoYXRhYmxlLT5h
bWFwKSB7CisgICAgICAgICAgICBuZXdtYXAgPSByZWFsbG9jKGF0YWJsZS0+YW1hcCwgc2l6ZW9m
KGludCkqc2l6ZSk7CisgICAgICAgICAgICBuZXdyZXYgPSByZWFsbG9jKGF0YWJsZS0+YXJldiwg
c2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXdtYXAg
PSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBuZXdyZXYgPSBtYWxsb2Mo
c2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBhdGFibGUtPnNpemUgPSAwOworICAgICAg
ICB9CisgICAgICAgIGlmICghbmV3bWFwIHx8ICFuZXdyZXYpIHsKKyAgICAgICAgICAgIC8qIGZh
aWxlZCB0byBncm93IC0tIGVycm9yICovCisgICAgICAgICAgICBpZiAobmV3bWFwKQorICAgICAg
ICAgICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKKyAgICAgICAgICAgIGlmIChuZXdyZXYp
CisgICAgICAgICAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3cmV2OworICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbXNldCgmbmV3bWFwW2F0YWJsZS0+c2l6ZV0s
IDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgbWVtc2V0
KCZuZXdyZXZbYXRhYmxlLT5zaXplXSwgMCwgKHNpemUgLSBhdGFibGUtPnNpemUpICogc2l6ZW9m
KGludCkpOworICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7CisgICAgICAgIGF0YWJsZS0+
YXJldiA9IG5ld3JldjsKKyAgICAgICAgYXRhYmxlLT5zaXplID0gc2l6ZTsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9IC8vIEdyb3dBdG9tVGFibGUKKworLyoKKyAqIGxSZXZlcnNlKCkgLSBSZXZl
cnNlIHRoZSBib3R0b20gMjAgYml0cyBvZiBhIDMyIGJpdCBpbnQuCisgKgorICovCisKK3N0YXRp
YyBpbnQgbFJldmVyc2UoaW50IGZ2YWwpCit7CisgICAgdW5zaWduZWQgaW50IGluID0gZnZhbDsK
KyAgICBpbnQgcmVzdWx0ID0gMCwgY250ID0gMDsKKworICAgIHdoaWxlKGluKSB7CisgICAgICAg
IHJlc3VsdCA8PD0gMTsKKyAgICAgICAgcmVzdWx0IHw9IGluJjE7CisgICAgICAgIGluID4+PSAx
OworICAgICAgICBjbnQrKzsKKyAgICB9CisKKyAgICAvLyBEb24ndCB1c2UgYWxsIDMxIGJpdHMu
ICBPbmUgbWlsbGlvbiBhdG9tcyBpcyBwbGVudHkgYW5kIHNvbWV0aW1lcyB0aGUKKyAgICAvLyB1
cHBlciBiaXRzIGFyZSB1c2VkIGZvciBvdGhlciB0aGluZ3MuCisKKyAgICBpZiAoY250IDwgMjAp
CisgICAgICAgIHJlc3VsdCA8PD0gMjAgLSBjbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30gLy8g
bFJldmVyc2UKKworLyoKKyAqIEFsbG9jYXRlQXRvbSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRvbS4g
IEFzc29jaWF0ZWQgd2l0aCB0aGUgInVuZGVmaW5lZCIgdmFsdWUgb2YgLTEuCisgKgorICovCisK
K3N0YXRpYyBpbnQgQWxsb2NhdGVBdG9tKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIGlmIChh
dGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSkKKyAgICAgICAgR3Jvd0F0b21UYWJsZShh
dGFibGUsIGF0YWJsZS0+bmV4dEZyZWUqMik7CisgICAgYXRhYmxlLT5hbWFwW2F0YWJsZS0+bmV4
dEZyZWVdID0gLTE7CisgICAgYXRhYmxlLT5hcmV2W2F0YWJsZS0+bmV4dEZyZWVdID0gbFJldmVy
c2UoYXRhYmxlLT5uZXh0RnJlZSk7CisgICAgYXRhYmxlLT5uZXh0RnJlZSsrOworICAgIHJldHVy
biBhdGFibGUtPm5leHRGcmVlIC0gMTsKK30gLy8gQWxsb2NhdGVBdG9tCisKKy8qCisgKiBTZXRB
dG9tVmFsdWUoKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20gYXNzb2NpYXRlZCB3aXRoICJoYXNoaW5k
ZXgiLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBTZXRBdG9tVmFsdWUoQXRvbVRhYmxlICphdGFi
bGUsIGludCBhdG9tbnVtYmVyLCBpbnQgaGFzaGluZGV4KQoreworICAgIGF0YWJsZS0+YW1hcFth
dG9tbnVtYmVyXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0uaW5kZXg7CisgICAg
YXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0b21udW1iZXI7Cit9IC8v
IFNldEF0b21WYWx1ZQorCisvKgorICogRmluZEhhc2hMb2MoKSAtIEZpbmQgdGhlIGhhc2ggbG9j
YXRpb24gZm9yIHRoaXMgc3RyaW5nLiAgUmV0dXJuIC0xIGl0IGhhc2ggdGFibGUgaXMgZnVsbC4K
KyAqCisgKi8KKworc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29u
c3QgY2hhciAqcykKK3sKKyAgICBpbnQgaGFzaGxvYywgaGFzaGRlbHRhLCBjb3VudDsKKyAgICBp
bnQgRm91bmRFbXB0eVNsb3QgPSAwOworICAgIGludCBjb2xsaXNpb25bSEFTSF9UQUJMRV9NQVhf
Q09MTElTSU9OUyArIDFdOworCisgICAgaGFzaGxvYyA9IEhhc2hTdHJpbmcocykgJSBhdGFibGUt
Pmh0YWJsZS5zaXplOworICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkg
eworICAgICAgICBpZiAoTWF0Y2goJmF0YWJsZS0+aHRhYmxlLCAmYXRhYmxlLT5zdGFibGUsIHMs
IGhhc2hsb2MpKQorICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7CisgICAgICAgIGNvbGxpc2lv
blswXSA9IGhhc2hsb2M7CisgICAgICAgIGhhc2hkZWx0YSA9IEhhc2hTdHJpbmcyKHMpOworICAg
ICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjb3VudCA8IEhBU0hfVEFCTEVfTUFYX0NP
TExJU0lPTlMpIHsKKyAgICAgICAgICAgIGhhc2hsb2MgPSAoKGhhc2hsb2MgKyBoYXNoZGVsdGEp
ICYgMHg3ZmZmZmZmZikgJSBhdGFibGUtPmh0YWJsZS5zaXplOworICAgICAgICAgICAgaWYgKCFF
bXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgICAgICAgICAgaWYgKE1h
dGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZvdW5kRW1wdHlTbG90ID0gMTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICBjb2xsaXNpb25bY291bnRdID0gaGFzaGxvYzsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghRm91bmRFbXB0eVNsb3QpIHsKKyAgICAgICAgICAgIGlmIChjcHAtPm9wdGlv
bnMuRHVtcEF0b21UYWJsZSkgeworICAgICAgICAgICAgICAgIGludCBpaTsKKyAgICAgICAgICAg
ICAgICBjaGFyIHN0clsyMDBdOworICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIEhh
c2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFz
aCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgICAgICAgICBIQVNIX1RBQkxFX01B
WF9DT0xMSVNJT05TKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKKwor
ICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIE5ldyBzdHJpbmcgXCIlc1wiLCBoYXNo
PSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0YSk7CisgICAgICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisgICAgICAgICAgICAgICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVkIGF0IGhhc2ggZW50
cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSArIDEs
IGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUtPmh0YWJsZS5lbnRy
eVtjb2xsaXNpb25baWldXS52YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coc3RyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdGFibGUtPmh0YWJs
ZS5jb3VudHNbY291bnRdKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGhhc2hsb2M7
Cit9IC8vIEZpbmRIYXNoTG9jCisKKy8qCisgKiBJbmNyZWFzZUhhc2hUYWJsZVNpemUoKQorICoK
KyAqLworCitzdGF0aWMgaW50IEluY3JlYXNlSGFzaFRhYmxlU2l6ZShBdG9tVGFibGUgKmF0YWJs
ZSkKK3sKKyAgICBpbnQgaWksIHN0cmxvYywgb2xkaGFzaGxvYywgdmFsdWUsIHNpemU7CisgICAg
QXRvbVRhYmxlIG9sZHRhYmxlOworICAgIGNoYXIgKnM7CisKKyAgICAvLyBTYXZlIHRoZSBvbGQg
YXRvbSB0YWJsZSBhbmQgY3JlYXRlIGEgbmV3IG9uZToKKworICAgIG9sZHRhYmxlID0gKmF0YWJs
ZTsKKyAgICBzaXplID0gb2xkdGFibGUuaHRhYmxlLnNpemUqMiArIDE7CisgICAgaWYgKCFJbml0
QXRvbVRhYmxlKGF0YWJsZSwgc2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWRk
IGFsbCB0aGUgZXhpc3RpbmcgdmFsdWVzIHRvIHRoZSBuZXcgYXRvbSB0YWJsZSBwcmVzZXJ2aW5n
IHRoZWlyIGF0b20gdmFsdWVzOgorCisgICAgZm9yIChpaSA9IGF0YWJsZS0+bmV4dEZyZWU7IGlp
IDwgb2xkdGFibGUubmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAgc3RybG9jID0gb2xkdGFibGUu
YW1hcFtpaV07CisgICAgICAgIHMgPSAmb2xkdGFibGUuc3RhYmxlLnN0cmluZ3Nbc3RybG9jXTsK
KyAgICAgICAgb2xkaGFzaGxvYyA9IEZpbmRIYXNoTG9jKCZvbGR0YWJsZSwgcyk7CisgICAgICAg
IGFzc2VydChvbGRoYXNobG9jID49IDApOworICAgICAgICB2YWx1ZSA9IG9sZHRhYmxlLmh0YWJs
ZS5lbnRyeVtvbGRoYXNobG9jXS52YWx1ZTsKKyAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwg
cywgdmFsdWUpOworICAgIH0KKyAgICBGcmVlQXRvbVRhYmxlKCZvbGR0YWJsZSk7CisgICAgcmV0
dXJuIDE7Cit9IC8vIEluY3JlYXNlSGFzaFRhYmxlU2l6ZQorCisvKgorICogTG9va1VwQWRkU3Ry
aW5nSGFzaCgpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRhYmxlLiAgSWYgaXQncyBu
b3QgdGhlcmUsIGFkZCBpdCBhbmQKKyAqICAgICAgICBpbml0aWFsaXplIHRoZSBhdG9tIHZhbHVl
IGluIHRoZSBoYXNoIHRhYmxlIHRvIDAuICBSZXR1cm4gdGhlIGhhc2ggdGFibGUgaW5kZXguCisg
Ki8KKworc3RhdGljIGludCBMb29rVXBBZGRTdHJpbmdIYXNoKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKQoreworICAgIGludCBoYXNobG9jLCBzdHJsb2M7CisKKyAgICB3aGlsZSgx
KSB7CisgICAgICAgIGhhc2hsb2MgPSBGaW5kSGFzaExvYyhhdGFibGUsIHMpOworICAgICAgICBp
ZiAoaGFzaGxvYyA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEluY3JlYXNlSGFz
aFRhYmxlU2l6ZShhdGFibGUpOworICAgIH0KKworICAgIGlmIChFbXB0eSgmYXRhYmxlLT5odGFi
bGUsIGhhc2hsb2MpKSB7CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJpZXMrKzsKKyAgICAg
ICAgc3RybG9jID0gQWRkU3RyaW5nKCZhdGFibGUtPnN0YWJsZSwgcyk7CisgICAgICAgIGF0YWJs
ZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLmluZGV4ID0gc3RybG9jOworICAgICAgICBhdGFibGUt
Pmh0YWJsZS5lbnRyeVtoYXNobG9jXS52YWx1ZSA9IDA7CisgICAgfQorICAgIHJldHVybiBoYXNo
bG9jOworfSAvLyBMb29rVXBBZGRTdHJpbmdIYXNoCisKKy8qCisgKiBMb29rVXBBZGRTdHJpbmco
KSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0J3Mgbm90IHRoZXJl
LCBhZGQgaXQgYW5kCisgKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2YWx1ZSBpbiB0aGUg
aGFzaCB0YWJsZSB0byB0aGUgbmV4dCBhdG9tIG51bWJlci4KKyAqICAgICAgICBSZXR1cm4gdGhl
IGF0b20gdmFsdWUgb2Ygc3RyaW5nLgorICovCisKK2ludCBMb29rVXBBZGRTdHJpbmcoQXRvbVRh
YmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGhhc2hpbmRleCwgYXRvbTsK
KworICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRhYmxlLCBzKTsKKyAgICBh
dG9tID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZTsKKyAgICBpZiAoYXRv
bSA9PSAwKSB7CisgICAgICAgIGF0b20gPSBBbGxvY2F0ZUF0b20oYXRhYmxlKTsKKyAgICAgICAg
U2V0QXRvbVZhbHVlKGF0YWJsZSwgYXRvbSwgaGFzaGluZGV4KTsKKyAgICB9CisgICAgcmV0dXJu
IGF0b207Cit9IC8vIExvb2tVcEFkZFN0cmluZworCisvKgorICogR2V0QXRvbVN0cmluZygpCisg
KgorICovCisKK2NvbnN0ICBjaGFyICpHZXRBdG9tU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgYXRvbSkKK3sKKyAgICBpbnQgc29mZnNldDsKKworICAgIGlmIChhdG9tID4gMCAmJiBhdG9t
IDwgYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICBzb2Zmc2V0ID0gYXRhYmxlLT5hbWFwW2F0
b21dOworICAgICAgICBpZiAoc29mZnNldCA+IDAgJiYgc29mZnNldCA8IGF0YWJsZS0+c3RhYmxl
Lm5leHRGcmVlKSB7CisgICAgICAgICAgICByZXR1cm4gJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3Nb
c29mZnNldF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gIjxpbnRlcm5h
bCBlcnJvcjogYmFkIHNvZmZzZXQ+IjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChhdG9tID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAiPG51bGwgYXRvbT4iOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGF0b20gPT0gRU9GKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICI8RU9GPiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHJldHVybiAiPGludmFsaWQgYXRvbT4iOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfSAvLyBHZXRBdG9tU3RyaW5nCisKKy8qCisgKiBHZXRSZXZlcnNlZEF0b20oKQorICoK
KyAqLworCitpbnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkK
K3sKKyAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZyZWUpIHsKKyAgICAg
ICAgcmV0dXJuIGF0YWJsZS0+YXJldlthdG9tXTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9IC8vIEdldFJldmVyc2VkQXRvbQorCisvKgorICogQWRkQXRvbSgpIC0g
QWRkIGEgc3RyaW5nIHRvIHRoZSBhdG9tLCBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlz
bid0IGFscmVhZHkgdGhlcmUuCisgKiAgICAgICAgIFJldHVybiBpdCdzIGF0b20gaW5kZXguCisg
Ki8KKworaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7Cisg
ICAgaW50IGF0b207CisKKyAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgcyk7Cisg
ICAgcmV0dXJuIGF0b207Cit9IC8vIEFkZEF0b20KKworLyoKKyAqIEFkZEF0b21GaXhlZCgpIC0g
QWRkIGFuIGF0b20gdG8gdGhlIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYgaXQgaXNuJ3QgYWxy
ZWFkeSB0aGVyZS4KKyAqICAgICAgICAgQXNzaWduIGl0IHRoZSBhdG9tIHZhbHVlIG9mICJhdG9t
Ii4KKyAqLworCitzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29u
c3QgY2hhciAqcywgaW50IGF0b20pCit7CisgICAgaW50IGhhc2hpbmRleCwgbHNpemU7CisKKyAg
ICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7CisgICAgaWYgKGF0
YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplIHx8IGF0b20gPj0gYXRhYmxlLT5zaXplKSB7
CisgICAgICAgIGxzaXplID0gYXRhYmxlLT5zaXplKjI7CisgICAgICAgIGlmIChsc2l6ZSA8PSBh
dG9tKQorICAgICAgICAgICAgbHNpemUgPSBhdG9tICsgMTsKKyAgICAgICAgR3Jvd0F0b21UYWJs
ZShhdGFibGUsIGxzaXplKTsKKyAgICB9CisgICAgYXRhYmxlLT5hbWFwW2F0b21dID0gYXRhYmxl
LT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFibGUtPmh0YWJsZS5lbnRy
eVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbTsKKyAgICAvL2lmIChhdG9tID49IGF0YWJsZS0+bmV4
dEZyZWUpCisgICAgLy8gICAgYXRhYmxlLT5uZXh0RnJlZSA9IGF0b20gKyAxOworICAgIHdoaWxl
IChhdG9tID49IGF0YWJsZS0+bmV4dEZyZWUpIHsKKyAgICAgICAgYXRhYmxlLT5hcmV2W2F0YWJs
ZS0+bmV4dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7CisgICAgICAgIGF0YWJs
ZS0+bmV4dEZyZWUrKzsKKyAgICB9CisgICAgcmV0dXJuIGF0b207Cit9IC8vIEFkZEF0b21GaXhl
ZAorCisvKgorICogSW5pdEF0b21UYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgYXRvbSB0YWJsZS4K
KyAqCisgKi8KKworaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNp
emUpCit7CisgICAgaW50IGlpOworCisgICAgaHRzaXplID0gaHRzaXplIDw9IDAgPyBJTklUX0hB
U0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKKyAgICBpZiAoIUluaXRTdHJpbmdUYWJsZSgmYXRhYmxl
LT5zdGFibGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUluaXRIYXNoVGFibGUoJmF0
YWJsZS0+aHRhYmxlLCBodHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF0YWJsZS0+
bmV4dEZyZWUgPSAwOworICAgIGF0YWJsZS0+YW1hcCA9IE5VTEw7CisgICAgYXRhYmxlLT5zaXpl
ID0gMDsKKyAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgSU5JVF9BVE9NX1RBQkxFX1NJWkUpOwor
ICAgIGlmICghYXRhYmxlLT5hbWFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEluaXRp
YWxpemUgbG93ZXIgcGFydCBvZiBhdG9tIHRhYmxlIHRvICI8dW5kZWZpbmVkPiIgYXRvbToKKwor
ICAgIEFkZEF0b21GaXhlZChhdGFibGUsICI8dW5kZWZpbmVkPiIsIDApOworICAgIGZvciAoaWkg
PSAwOyBpaSA8IEZJUlNUX1VTRVJfVE9LRU5fU1k7IGlpKyspCisgICAgICAgIGF0YWJsZS0+YW1h
cFtpaV0gPSBhdGFibGUtPmFtYXBbMF07CisKKyAgICAvLyBBZGQgc2luZ2xlIGNoYXJhY3RlciB0
b2tlbnMgdG8gdGhlIGF0b20gdGFibGU6CisKKyAgICB7CisJCWNvbnN0IGNoYXIgKnMgPSAifiEl
XiYqKCktKz18LC48Pi8/OzpbXXt9IyI7CisgICAgICAgIGNoYXIgdFsyXTsKKworICAgICAgICB0
WzFdID0gJ1wwJzsKKyAgICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAgICAgICB0WzBdID0gKnM7
CisgICAgICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0LCBzWzBdKTsKKyAgICAgICAgICAg
IHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBtdWx0aXBsZSBjaGFyYWN0ZXIg
c2Nhbm5lciB0b2tlbnMgOgorCisgICAgZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKHRva2Vucykv
c2l6ZW9mKHRva2Vuc1swXSk7IGlpKyspCisgICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHRv
a2Vuc1tpaV0uc3RyLCB0b2tlbnNbaWldLnZhbCk7CisKKyAgICAvLyBBZGQgZXJyb3Igc3ltYm9s
IGlmIHJ1bm5pbmcgaW4gZXJyb3IgbW9kZToKKworICAgIGlmIChjcHAtPm9wdGlvbnMuRXJyb3JN
b2RlKQorICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiZXJyb3IiLCBFUlJPUl9TWSk7CisK
KyAgICBBZGRBdG9tKGF0YWJsZSwgIjwqKiogZW5kIGZpeGVkIGF0b21zICoqKj4iKTsKKworICAg
IHJldHVybiAxOworfSAvLyBJbml0QXRvbVRhYmxlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIERlYnVn
IFByaW50aW5nIEZ1bmN0aW9uczogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIFByaW50QXRv
bVRhYmxlKCkKKyAqCisgKi8KKwordm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJs
ZSkKK3sKKyAgICBpbnQgaWk7CisgICAgY2hhciBzdHJbMjAwXTsKKworICAgIGZvciAoaWkgPSAw
OyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAgc3ByaW50ZihzdHIsICIl
ZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1d
KTsKKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9CisgICAgc3ByaW50ZihzdHIs
ICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25zPSIsCisgICAgICAg
ICAgIGF0YWJsZS0+aHRhYmxlLnNpemUsIGF0YWJsZS0+aHRhYmxlLmVudHJpZXMpOworICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgSEFTSF9UQUJMRV9NQVhf
Q09MTElTSU9OUzsgaWkrKykgeworICAgICAgICBzcHJpbnRmKHN0ciwgIiAlZCIsIGF0YWJsZS0+
aHRhYmxlLmNvdW50c1tpaV0pOworICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOworICAgIH0K
KworfSAvLyBQcmludEF0b21UYWJsZQorCisKKy8qCisgKiBHZXRTdHJpbmdPZkF0b20oKQorICoK
KyAqLworCitjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KQoreworCSBjaGFyKiBjaHJfc3RyOworCSBjaHJfc3RyPSZhdGFibGUtPnN0YWJsZS5zdHJpbmdz
W2F0YWJsZS0+YW1hcFthdG9tXV07CisJIHJldHVybiBjaHJfc3RyOworfSAvLyBHZXRTdHJpbmdP
ZkF0b20KKworLyoKKyAqIEZyZWVBdG9tVGFibGUoKSAtIEZyZWUgdGhlIGF0b20gdGFibGUgYW5k
IGFzc29jaWF0ZWQgbWVtb3J5CisgKgorICovCisKK3ZvaWQgRnJlZUF0b21UYWJsZShBdG9tVGFi
bGUgKmF0YWJsZSkKK3sKKyAgICBGcmVlU3RyaW5nVGFibGUoJmF0YWJsZS0+c3RhYmxlKTsKKyAg
ICBGcmVlSGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSk7CisgICAgaWYgKGF0YWJsZS0+YW1hcCkK
KyAgICAgICAgZnJlZShhdGFibGUtPmFtYXApOworICAgIGlmIChhdGFibGUtPmFyZXYpCisgICAg
ICAgIGZyZWUoYXRhYmxlLT5hcmV2KTsKKyAgICBhdGFibGUtPmFtYXAgPSBOVUxMOworICAgIGF0
YWJsZS0+YXJldiA9IE5VTEw7CisgICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7CisgICAgYXRhYmxl
LT5zaXplID0gMDsKK30gLy8gRnJlZUF0b21UYWJsZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8gRW5kIG9mIGF0b20uYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2F0b20uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEg
Q29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9u
IG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNl
IHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRv
IG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3Nv
ZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElB
IGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJ
RElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisi
TlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJp
YnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMs
IGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVk
aXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHly
aWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4
dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklE
SUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtz
IG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNl
cHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9y
IGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJl
aW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQg
bWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdv
cmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5v
IGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUg
SVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAor
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxP
TkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5U
IFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lE
RU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0Us
IFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitO
VklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBP
RiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElU
WSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8v
IGF0b20uaAorLy8KKworI2lmICFkZWZpbmVkKF9fQVRPTV9IKQorI2RlZmluZSBfX0FUT01fSCAx
CisKK3R5cGVkZWYgc3RydWN0IEF0b21UYWJsZV9SZWMgQXRvbVRhYmxlOworCitleHRlcm4gQXRv
bVRhYmxlICphdGFibGU7CisKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgaHRzaXplKTsKK3ZvaWQgRnJlZUF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7CitpbnQg
QWRkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Cit2b2lkIFByaW50QXRv
bVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKTsKK2ludCBMb29rVXBBZGRTdHJpbmcoQXRvbVRhYmxl
ICphdGFibGUsIGNvbnN0IGNoYXIgKnMpOworY29uc3QgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9t
VGFibGUgKmF0YWJsZSwgaW50IGF0b20pOworaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUg
KmF0YWJsZSwgaW50IGF0b20pOworY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRh
YmxlLCBpbnQgYXRvbSk7CisjZW5kaWYgLy8gIWRlZmluZWQoX19BVE9NX0gpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29t
cGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGls
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2Fy
ZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3Ig
cmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2Vw
dGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rl
cm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0
aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNl
IHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNl
bnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNv
ZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlm
eSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0
aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3Jl
dGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlv
bnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3Ms
IHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9t
IE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBv
dGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQg
YnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVu
dCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mg
b3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2lu
Y29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5W
SURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRI
T1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT
IE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFU
SU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4K
KworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO
RElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitP
VVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJV
VElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIg
VU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBT
VFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvLworLy8gY29tcGlsZS5oCisvLworCisjaWYgIWRlZmluZWQoX19DT01QSUxFX0gp
CisjZGVmaW5lIF9fQ09NUElMRV9IIDEKKworaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CisKK3R5
cGVkZWYgc3RydWN0IE9wdGlvbnNfUmVjeworICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVTdHJpbmc7
CisgICAgaW50IEVycm9yTW9kZTsKKyAgICBpbnQgUXVpZXQ7CisJCisgICAgLy8gRGVidWcgVGhl
IENvbXBpbGVyIG9wdGlvbnM6CisgICAgaW50IER1bXBBdG9tVGFibGU7Cit9IE9wdGlvbnM7CisK
K3N0cnVjdCBDUFBTdHJ1Y3RfUmVjIHsKKyAgICAvLyBQdWJsaWMgbWVtYmVycworICAgIFNvdXJj
ZUxvYyAqcExhc3RTb3VyY2VMb2M7ICAvLyBTZXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc3RhdGVt
ZW50IGJ5IHRoZSB0cmVlIHdhbGtlcnMKKyAgICBPcHRpb25zIG9wdGlvbnM7ICAgICAgICAgICAg
Ly8gQ29tcGlsZSBvcHRpb25zIGFuZCBwYXJhbWV0ZXJzCisKKyAgICAvLyBQcml2YXRlIG1lbWJl
cnMKKyAgICBTb3VyY2VMb2MgbGFzdFNvdXJjZUxvYzsKKworICAgIC8vIFNjYW5uZXIgZGF0YToK
KworICAgIFNvdXJjZUxvYyAqdG9rZW5Mb2M7ICAgICAgICAvLyBTb3VyY2UgbG9jYXRpb24gb2Yg
bW9zdCByZWNlbnQgdG9rZW4gc2VlbiBieSB0aGUgc2Nhbm5lcgorICAgIGludCBtb3N0UmVjZW50
VG9rZW47ICAgICAgICAvLyBNb3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCisg
ICAgSW5wdXRTcmMgKmN1cnJlbnRJbnB1dDsKKyAgICBpbnQgcHJldmlvdXNfdG9rZW47CisgICAg
aW50IHBhc3RGaXJzdFN0YXRlbWVudDsgICAgIC8vIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgI3Zl
cnNpb24gaXMgdGhlIGZpcnN0IHN0YXRlbWVudCBzZWVuIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50
CisgICAgCisJdm9pZCAqcEM7ICAgICAgICAgICAgICAgICAgIC8vIHN0b3JpbmcgdGhlIHBhcnNl
Q29udGV4dCBvZiB0aGUgY29tcGlsZSBvYmplY3QgaW4gY3BwLiAgCisgICAgIAorICAgIC8vIFBy
aXZhdGUgbWVtYmVyczoKKyAgICBTb3VyY2VMb2MgbHRva2VuTG9jOworCWludCBpZmRlcHRoOyAg
ICAgICAgICAgICAgICAvL2N1cnJlbnQgI2lmLSNlbHNlLSNlbmRpZiBuZXN0aW5nIGluIHRoZSBj
cHAuYyBmaWxlIChwcmUtcHJvY2Vzc29yKSAgICAKKyAgICBpbnQgZWxzZWRlcHRoWzY0XTsgICAg
ICAgICAgLy9LZWVwIGEgdHJhY2sgb2YgI2lmIGRlcHRoLi5NYXggYWxsb3dlZCBpcyA2NC4gICAK
KyAgICBpbnQgZWxzZXRyYWNrZXI7ICAgICAgICAgICAgLy8jaWYtI2Vsc2UgYW5kICNlbmRpZiBj
b25zdHJ1Y3RzLi4uQ291bnRlci4KKyAgICBjb25zdCBjaGFyICpFcnJNc2c7CisgICAgaW50IENv
bXBpbGVFcnJvcjsgICAgICAgICAgIC8vSW5kaWNhdGUgY29tcGlsZSBlcnJvciB3aGVuICNlcnJv
ciwgI2Vsc2UsI2VsaWYgbWlzbWF0Y2guCisKKyAgICAvLworICAgIC8vIEdsb2JhbHMgdXNlZCB0
byBjb21tdW5pY2F0ZSBiZXR3ZWVuIFBhUGFyc2VTdHJpbmdzKCkgYW5kIHl5X2lucHV0KClhbmQg
CisgICAgLy8gYWxzbyBhY3Jvc3MgdGhlIGZpbGVzLihnZW5fZ2xzbGFuZy5jcHAgYW5kIHNjYW5u
ZXIuYykKKyAgICAvLworICAgIGludCAgICBQYVdoaWNoU3RyOyAgICAgICAgICAgIC8vIHdoaWNo
IHN0cmluZyB3ZSdyZSBwYXJzaW5nCisgICAgaW50KiAgIFBhU3RyTGVuOyAgICAgICAgICAgICAg
Ly8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2IHN0cmluZ3MKKyAgICBpbnQgICAgUGFB
cmdjOyAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBzdHJpbmdzIGluIHRoZSBhcnJheQorICAg
IGNoYXIqKiBQYUFyZ3Y7ICAgICAgICAgICAgICAgIC8vIG91ciBhcnJheSBvZiBzdHJpbmdzIHRv
IHBhcnNlICAgIAorICAgIHVuc2lnbmVkIGludCB0b2tlbnNCZWZvcmVFT0YgOiAxOworfTsKKwor
I2VuZGlmIC8vICFkZWZpbmVkKF9fQ09NUElMRV9IKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDI5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHAuYworLy8K
KworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworc3RhdGljIGludCBDUFBp
Zih5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKy8qIERvbid0IHVzZSBtZW1vcnkuYydzIHJlcGxh
Y2VtZW50cywgYXMgd2UgY2xlYW4gdXAgcHJvcGVybHkgaGVyZSAqLworI3VuZGVmIG1hbGxvYwor
I3VuZGVmIGZyZWUKKworc3RhdGljIGludCBiaW5kQXRvbSA9IDA7CitzdGF0aWMgaW50IGNvbnN0
QXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmF1bHRBdG9tID0gMDsKK3N0YXRpYyBpbnQgZGVmaW5l
QXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmluZWRBdG9tID0gMDsKK3N0YXRpYyBpbnQgZWxzZUF0
b20gPSAwOworc3RhdGljIGludCBlbGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGVuZGlmQXRvbSA9
IDA7CitzdGF0aWMgaW50IGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGlmZGVmQXRvbSA9IDA7Citz
dGF0aWMgaW50IGlmbmRlZkF0b20gPSAwOworc3RhdGljIGludCBpbmNsdWRlQXRvbSA9IDA7Citz
dGF0aWMgaW50IGxpbmVBdG9tID0gMDsKK3N0YXRpYyBpbnQgcHJhZ21hQXRvbSA9IDA7CitzdGF0
aWMgaW50IHRleHVuaXRBdG9tID0gMDsKK3N0YXRpYyBpbnQgdW5kZWZBdG9tID0gMDsKK3N0YXRp
YyBpbnQgZXJyb3JBdG9tID0gMDsKK3N0YXRpYyBpbnQgX19MSU5FX19BdG9tID0gMDsKK3N0YXRp
YyBpbnQgX19GSUxFX19BdG9tID0gMDsKK3N0YXRpYyBpbnQgX19WRVJTSU9OX19BdG9tID0gMDsK
K3N0YXRpYyBpbnQgdmVyc2lvbkF0b20gPSAwOworc3RhdGljIGludCBleHRlbnNpb25BdG9tID0g
MDsKKworc3RhdGljIFNjb3BlICptYWNyb3MgPSAwOworI2RlZmluZSBNQVhfTUFDUk9fQVJHUyAg
NjQKKyNkZWZpbmUgTUFYX0lGX05FU1RJTkcgIDY0CisKK3N0YXRpYyBTb3VyY2VMb2MgaWZsb2M7
IC8qIG91dGVybW9zdCAjaWYgKi8KKworaW50IEluaXRDUFAodm9pZCkKK3sKKyAgICBjaGFyICAg
ICAgICBidWZmZXJbNjRdLCAqdDsKKyAgICBjb25zdCBjaGFyICAqZjsKKworICAgIC8vIEFkZCB2
YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKKyAgICBiaW5kQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7CisgICAgY29uc3RBdG9tID0gTG9v
a1VwQWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7CisgICAgZGVmYXVsdEF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOworICAgIGRlZmluZUF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiZGVmaW5lIik7CisgICAgZGVmaW5lZEF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAiZGVmaW5lZCIpOworICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0
YWJsZSwgImVsaWYiKTsKKyAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJl
bHNlIik7CisgICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVuZGlmIik7
CisgICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7CisgICAgaWZkZWZB
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7CisgICAgaWZuZGVmQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKKyAgICBpbmNsdWRlQXRvbSA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7CisgICAgbGluZUF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAibGluZSIpOworICAgIHByYWdtYUF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAicHJhZ21hIik7CisgICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCAidGV4dW5pdCIpOworICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJ1bmRlZiIpOworCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlcnJv
ciIpOworICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0xJTkVf
XyIpOworICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0ZJTEVf
XyIpOworCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX1ZFUlNJ
T05fXyIpOworICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInZlcnNp
b24iKTsKKyAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImV4dGVu
c2lvbiIpOworICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29sKDAsIDAp
KTsKKyAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKKyAgICB0ID0gYnVmZmVyICsgc3Ry
bGVuKGJ1ZmZlcik7CisgICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOworICAgIHdo
aWxlICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6ZW9mKGJ1
ZmZlcikgLSAxKQorICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKKyAgICAqdCA9IDA7CisK
KyAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKKyAgICBQcmVkZWZpbmVJbnRNYWNy
bygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKKworCXJldHVybiAxOworfSAvLyBJ
bml0Q1BQCisKK2ludCBGcmVlQ1BQKHZvaWQpCit7CisgICAgaWYgKG1hY3JvcykKKyAgICB7Cisg
ICAgICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOworICAgICAgICBtYWNyb3MgPSAwOwor
ICAgIH0KKworICAgIHJldHVybiAxOworfQorCitpbnQgRmluYWxDUFAodm9pZCkKK3sKKwlpZiAo
Y3BwLT5pZmRlcHRoKQorCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7CisgICAg
cmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQoreworICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFyZ2M7Cisg
ICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBNYWNyb1N5bWJvbCBtYWM7CisgICAgU3ltYm9s
ICpzeW1iOworICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKKyAgICBtZW1zZXQoJm1hYywgMCwgc2l6
ZW9mKG1hYykpOworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsK
KyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgcmV0dXJuIHRv
a2VuOworICAgIH0KKyAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OworICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICBpZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7CisgICAgICAgIC8vIGdh
dGhlciBhcmd1bWVudHMKKyAgICAgICAgYXJnYyA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJyknKSBicmVh
azsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgeworCQkJCUNQUEVy
cm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJHUykKKyAg
ICAgICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7CisgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7CisgICAgICAgIGlmICh0
b2tlbiAhPSAnKScpIHsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7
CisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIH0KKyAgICAgICAgbWFjLmFyZ2Mg
PSBhcmdjOworICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2wsIGFyZ2Mg
KiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJnYyAqIHNp
emVvZihpbnQpKTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKyAgICBtYWMuYm9keSA9IE5ld1Rva2VuU3Ry
ZWFtKEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKKyAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgeworICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIg
KFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKKyAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgfQorICAgICAgICBSZWNvcmRUb2tlbiht
YWMuYm9keSwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH07CisKKyAgICBz
eW1iID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7CisgICAgaWYgKHN5bWIpIHsKKyAgICAg
ICAgaWYgKCFzeW1iLT5kZXRhaWxzLm1hYy51bmRlZikgeworICAgICAgICAgICAgLy8gYWxyZWFk
eSBkZWZpbmVkIC0tIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGlkZW50aWNhbAorICAgICAg
ICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ2MgIT0gbWFjLmFyZ2MpIGdvdG8gZXJyb3I7
CisgICAgICAgICAgICBmb3IgKGFyZ2M9MDsgYXJnYyA8IG1hYy5hcmdjOyBhcmdjKyspCisgICAg
ICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ3NbYXJnY10gIT0gbWFjLmFyZ3Nb
YXJnY10pCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBSZXdp
bmRUb2tlblN0cmVhbShzeW1iLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICAgICAgICAgIFJld2lu
ZFRva2VuU3RyZWFtKG1hYy5ib2R5KTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg
ICBpbnQgb2xkX2x2YWwsIG9sZF90b2tlbjsKKyAgICAgICAgICAgICAgICBvbGRfdG9rZW4gPSBS
ZWFkVG9rZW4oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIG9sZF9sdmFsID0geXlsdmFscHAtPnNjX2ludDsKKyAgICAgICAgICAgICAgICB0b2tlbiA9
IFJlYWRUb2tlbihtYWMuYm9keSwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tl
biAhPSBvbGRfdG9rZW4gfHwgeXlsdmFscHAtPnNjX2ludCAhPSBvbGRfbHZhbCkgeyAKKyAgICAg
ICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoIk1hY3JvIFJl
ZGVmaW5lZCIpOworICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20o
YXRhYmxlLG5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0
cigpOworICAgICAgICAgICAgICAgICAgICBEZWNMaW5lTnVtYmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgSW5j
TGluZU51bWJlcigpOworICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7IH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuID4gMCk7
CisgICAgICAgIH0KKyAgICAgICAgLy9GcmVlTWFjcm8oJnN5bWItPmRldGFpbHMubWFjKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkdW1teUxvYy5maWxlID0gMDsKKyAgICAgICAgZHVtbXlMb2Mu
bGluZSA9IDA7CisgICAgICAgIHN5bWIgPSBBZGRTeW1ib2woJmR1bW15TG9jLCBtYWNyb3MsIG5h
bWUsIE1BQ1JPX1MpOworICAgIH0KKyAgICBzeW1iLT5kZXRhaWxzLm1hYyA9IG1hYzsKKyAgICBy
ZXR1cm4gJ1xuJzsKK30gLy8gQ1BQZGVmaW5lCisKK3N0YXRpYyBpbnQgQ1BQdW5kZWYoeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBTeW1ib2wgKnN5bWI7CisJaWYo
dG9rZW4gPT0gJ1xuJyl7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsKKwkgICAgcmV0
dXJuIHRva2VuOworICAgIH0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpCisgICAg
ICAgICAgZ290byBlcnJvcjsKKyAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFs
cHAtPnNjX2lkZW50KTsKKyAgICBpZiAoc3ltYikgeworICAgICAgICBzeW1iLT5kZXRhaWxzLm1h
Yy51bmRlZiA9IDE7CisgICAgfQorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJ1xuJykgewor
ICAgIGVycm9yOgorICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVmIik7CisgICAgfQor
ICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdW5kZWYKKworLyogQ1BQZWxzZSAtLSBza2lwIGZv
cndhcmQgdG8gYXBwcm9wcmlhdGUgc3BvdC4gIFRoaXMgaXMgYWN0dWFsbHkgdXNlZAorKiogdG8g
c2tpcCB0byBhbmQgI2VuZGlmIGFmdGVyIHNlZWluZyBhbiAjZWxzZSwgQU5EIHRvIHNraXAgdG8g
YSAjZWxzZSwKKyoqICNlbGlmLCBvciAjZW5kaWYgYWZ0ZXIgYSAjaWYvI2lmZGVmLyNpZm5kZWYv
I2VsaWYgdGVzdCB3YXMgZmFsc2UKKyovCisKK3N0YXRpYyBpbnQgQ1BQZWxzZShpbnQgbWF0Y2hl
bHNlLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgYXRvbSxkZXB0aD0wOworICAg
IGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisJCisJd2hpbGUgKHRva2VuID4gMCkgeworICAgICAgICBpZiAodG9rZW4gIT0g
JyMnKSB7CisJCSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisJCWlmICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJRklFUikKKwkJCWNvbnRpbnVlOwor
ICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50OworICAgICAgICBpZiAoYXRvbSA9PSBp
ZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9PSBpZm5kZWZBdG9tKXsKKyAgICAg
ICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAtPmVsc2V0cmFja2VyKys7CisgICAg
ICAgICAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7CisJCX0KKwkJZWxz
ZSBpZiAoYXRvbSA9PSBlbmRpZkF0b20pIHsKKyAgICAgICAgICAgIGlmKC0tZGVwdGg8MCl7CisJ
CQkgICAgLS1jcHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIGlmIChjcHAtPmlmZGVw
dGgpIAorICAgICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLS1j
cHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRoOworICAgICAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICgoKGludCkobWF0Y2hlbHNlKSAhPSAwKSYmIGRlcHRo
PT0wKSB7CisJCQlpZiAoYXRvbSA9PSBlbHNlQXRvbSApIHsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNl
IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgfSAKKwkJCQlicmVhazsKKwkJCX0gCisJCQllbHNlIGlm
IChhdG9tID09IGVsaWZBdG9tKSB7CisgICAgICAgICAgICAgICAgLyogd2UgZGVjcmVtZW50IGNw
cC0+aWZkZXB0aCBoZXJlLCBiZWNhdXNlIENQUGlmIHdpbGwgaW5jcmVtZW50CisgICAgICAgICAg
ICAgICAgICogaXQgYW5kIHdlIHJlYWxseSB3YW50IHRvIGxlYXZlIGl0IGFsb25lICovCisJCQkJ
aWYgKGNwcC0+aWZkZXB0aCl7CisJCQkJCS0tY3BwLT5pZmRlcHRoOworCQkJCSAgICAtLWNwcC0+
ZWxzZXRyYWNrZXI7CisJCQkJfQorICAgICAgICAgICAgICAgIHJldHVybiBDUFBpZih5eWx2YWxw
cCk7CisgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgZWxzZSBpZigoYXRvbT09ZWxzZUF0b20p
ICYmICghQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpKXsKKyAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICBjcHAtPkNvbXBpbGVF
cnJvcj0xOworICAgICAgICB9CisJfTsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2VudW0gZXZh
bF9wcmVjIHsKKyAgICBNSU5fUFJFQywKKyAgICBDT05ELCBMT0dPUiwgTE9HQU5ELCBPUiwgWE9S
LCBBTkQsIEVRVUFMLCBSRUxBVElPTiwgU0hJRlQsIEFERCwgTVVMLCBVTkFSWSwKKyAgICBNQVhf
UFJFQworfTsKKworc3RhdGljIGludCBvcF9sb2dvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
fHwgYjsgfQorc3RhdGljIGludCBvcF9sb2dhbmQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICYm
IGI7IH0KK3N0YXRpYyBpbnQgb3Bfb3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIHwgYjsgfQor
c3RhdGljIGludCBvcF94b3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIF4gYjsgfQorc3RhdGlj
IGludCBvcF9hbmQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICYgYjsgfQorc3RhdGljIGludCBv
cF9lcShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorc3RhdGljIGludCBvcF9uZShp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgIT0gYjsgfQorc3RhdGljIGludCBvcF9nZShpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgPj0gYjsgfQorc3RhdGljIGludCBvcF9sZShpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgPD0gYjsgfQorc3RhdGljIGludCBvcF9ndChpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgPiBiOyB9CitzdGF0aWMgaW50IG9wX2x0KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8
IGI7IH0KK3N0YXRpYyBpbnQgb3Bfc2hsKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8PCBiOyB9
CitzdGF0aWMgaW50IG9wX3NocihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj4gYjsgfQorc3Rh
dGljIGludCBvcF9hZGQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICsgYjsgfQorc3RhdGljIGlu
dCBvcF9zdWIoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC0gYjsgfQorc3RhdGljIGludCBvcF9t
dWwoaW50IGEsIGludCBiKSB7IHJldHVybiBhICogYjsgfQorc3RhdGljIGludCBvcF9kaXYoaW50
IGEsIGludCBiKSB7IHJldHVybiBhIC8gYjsgfQorc3RhdGljIGludCBvcF9tb2QoaW50IGEsIGlu
dCBiKSB7IHJldHVybiBhICUgYjsgfQorc3RhdGljIGludCBvcF9wb3MoaW50IGEpIHsgcmV0dXJu
IGE7IH0KK3N0YXRpYyBpbnQgb3BfbmVnKGludCBhKSB7IHJldHVybiAtYTsgfQorc3RhdGljIGlu
dCBvcF9jbXBsKGludCBhKSB7IHJldHVybiB+YTsgfQorc3RhdGljIGludCBvcF9ub3QoaW50IGEp
IHsgcmV0dXJuICFhOyB9CisKK3N0cnVjdCB7CisgICAgaW50IHRva2VuLCBwcmVjLCAoKm9wKShp
bnQsIGludCk7Cit9IGJpbm9wW10gPSB7CisgICAgeyBDUFBfT1JfT1AsIExPR09SLCBvcF9sb2dv
ciB9LAorICAgIHsgQ1BQX0FORF9PUCwgTE9HQU5ELCBvcF9sb2dhbmQgfSwKKyAgICB7ICd8Jywg
T1IsIG9wX29yIH0sCisgICAgeyAnXicsIFhPUiwgb3BfeG9yIH0sCisgICAgeyAnJicsIEFORCwg
b3BfYW5kIH0sCisgICAgeyBDUFBfRVFfT1AsIEVRVUFMLCBvcF9lcSB9LAorICAgIHsgQ1BQX05F
X09QLCBFUVVBTCwgb3BfbmUgfSwKKyAgICB7ICc+JywgUkVMQVRJT04sIG9wX2d0IH0sCisgICAg
eyBDUFBfR0VfT1AsIFJFTEFUSU9OLCBvcF9nZSB9LAorICAgIHsgJzwnLCBSRUxBVElPTiwgb3Bf
bHQgfSwKKyAgICB7IENQUF9MRV9PUCwgUkVMQVRJT04sIG9wX2xlIH0sCisgICAgeyBDUFBfTEVG
VF9PUCwgU0hJRlQsIG9wX3NobCB9LAorICAgIHsgQ1BQX1JJR0hUX09QLCBTSElGVCwgb3Bfc2hy
IH0sCisgICAgeyAnKycsIEFERCwgb3BfYWRkIH0sCisgICAgeyAnLScsIEFERCwgb3Bfc3ViIH0s
CisgICAgeyAnKicsIE1VTCwgb3BfbXVsIH0sCisgICAgeyAnLycsIE1VTCwgb3BfZGl2IH0sCisg
ICAgeyAnJScsIE1VTCwgb3BfbW9kIH0sCit9OworCitzdHJ1Y3QgeworICAgIGludCB0b2tlbiwg
KCpvcCkoaW50KTsKK30gdW5vcFtdID0geworICAgIHsgJysnLCBvcF9wb3MgfSwKKyAgICB7ICct
Jywgb3BfbmVnIH0sCisgICAgeyAnficsIG9wX2NtcGwgfSwKKyAgICB7ICchJywgb3Bfbm90IH0s
Cit9OworCisjZGVmaW5lIEFMRU4oQSkgKHNpemVvZihBKS9zaXplb2YoQVswXSkpCisKK3N0YXRp
YyBpbnQgZXZhbChpbnQgdG9rZW4sIGludCBwcmVjLCBpbnQgKnJlcywgaW50ICplcnIsIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCAgICAgICAgIGksIHZhbDsKKyAgICBTeW1ib2wg
ICAgICAqczsKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVkQXRvbSkgeworICAgICAgICAgICAgaW50IG5l
ZWRjbG9zZSA9IDA7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JygnKSB7CisgICAgICAgICAgICAgICAgbmVlZGNsb3NlID0gMTsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJ
RVIpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICpyZXMgPSAocyA9
IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICA/ICFzLT5kZXRhaWxzLm1hYy51bmRlZiA6IDA7CisgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgICAgICAgICBpZiAobmVlZGNsb3NlKSB7CisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
ICE9ICcpJykKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoTWFjcm9FeHBhbmQoeXlsdmFscHAt
PnNjX2lkZW50LCB5eWx2YWxwcCkpIHsKKwkJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHJldHVybiBldmFs
KHRva2VuLCBwcmVjLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCX0gZWxzZSBpZiAodG9rZW4gPT0gQ1BQ
X0lOVENPTlNUQU5UKSB7CisgICAgICAgICpyZXMgPSB5eWx2YWxwcC0+c2NfaW50OworICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgfSBlbHNlIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVDLCByZXMsIGVyciwgeXlsdmFscHApOwor
ICAgICAgICBpZiAoISplcnIpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnKScpCisgICAg
ICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IEFMRU4odW5vcCkgLSAxOyBpID49IDA7IGktLSkg
eworICAgICAgICAgICAgaWYgKHVub3BbaV0udG9rZW4gPT0gdG9rZW4pCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBVTkFSWSwgcmVzLCBlcnIsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICpyZXMgPSB1bm9wW2ldLm9wKCpyZXMpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICB3
aGlsZSAoISplcnIpIHsKKyAgICAgICAgaWYgKHRva2VuID09ICcpJyB8fCB0b2tlbiA9PSAnXG4n
KSBicmVhazsKKyAgICAgICAgZm9yIChpID0gQUxFTihiaW5vcCkgLSAxOyBpID49IDA7IGktLSkg
eworICAgICAgICAgICAgaWYgKGJpbm9wW2ldLnRva2VuID09IHRva2VuKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMCB8fCBiaW5vcFtpXS5wcmVj
IDw9IHByZWMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFsID0gKnJlczsKKyAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIGJpbm9wW2ldLnByZWMsIHJlcywg
ZXJyLCB5eWx2YWxwcCk7CisgICAgICAgICpyZXMgPSBiaW5vcFtpXS5vcCh2YWwsICpyZXMpOwor
ICAgIH0KKyAgICByZXR1cm4gdG9rZW47CitlcnJvcjoKKyAgICBDUFBFcnJvclRvSW5mb0xvZygi
aW5jb3JyZWN0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUiKTsKKyAgICAqZXJyID0gMTsKKyAgICAq
cmVzID0gMDsKKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIGV2YWwKKworc3RhdGljIGludCBDUFBp
Zih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaW50IHJlcyA9IDAs
IGVyciA9IDA7CisJY3BwLT5lbHNldHJhY2tlcisrOworICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+
ZWxzZXRyYWNrZXJdID0gMDsKKyAgICBpZiAoIWNwcC0+aWZkZXB0aCsrKQorICAgICAgICBpZmxv
YyA9ICpjcHAtPnRva2VuTG9jOworCWlmKGNwcC0+aWZkZXB0aCA+TUFYX0lGX05FU1RJTkcpewor
ICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVk
Iik7CisJCXJldHVybiAwOworCX0KKwl0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVDLCAmcmVz
LCAmZXJyLCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgQ1BQ
V2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nIHRoZSBwcmVwcm9j
ZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgIHdoaWxlICh0
b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH0gCisgICAgaWYgKCFyZXMgJiYg
IWVycikgeworICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOworICAgIH0KKwor
ICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQaWYKKworc3RhdGljIGludCBDUFBpZmRlZihpbnQg
ZGVmaW5lZCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpbnQg
bmFtZSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKwlpZigrK2NwcC0+aWZkZXB0aCA+TUFYX0lGX05F
U1RJTkcpeworCSAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4
Y2VlZGVkIik7CisJCXJldHVybiAwOworCX0KKwljcHAtPmVsc2V0cmFja2VyKys7CisgICAgY3Bw
LT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworICAgIGlmICh0b2tlbiAhPSBDUFBf
SURFTlRJRklFUikgeworICAgICAgICAgICAgZGVmaW5lZCA/IENQUEVycm9yVG9JbmZvTG9nKCJp
ZmRlZiIpOkNQUEVycm9yVG9JbmZvTG9nKCJpZm5kZWYiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBTeW1ib2wgKnMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKKyAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5m
b0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZmRlZiBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICB3aGlsZSAodG9rZW4g
IT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgo
cyAmJiAhcy0+ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCisgICAgICAg
ICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOworICAgIH0KKyAgICByZXR1cm4gdG9r
ZW47Cit9IC8vIENQUGlmZGVmCisKK3N0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwlpZih0b2tlbj09J1xuJyl7CisJCURlY0xpbmVOdW1i
ZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAgICAgIEluY0xp
bmVOdW1iZXIoKTsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNlIGlmICh0b2tlbiA9PSBDUFBf
SU5UQ09OU1RBTlQpIHsKKwkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xf
bmFtZSk7CisJCVNldExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgCisJCWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKyAgICAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQkJU2V0U3Ry
aW5nTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQkJaWYodG9r
ZW4hPSdcbicpCisJCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAgICAgIH0KKwkJ
ZWxzZSBpZiAodG9rZW4gPT0gJ1xuJyl7CisJCQlyZXR1cm4gdG9rZW47CisJCX0KKwkJZWxzZXsK
KyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworCQl9CisJfQorCWVsc2V7
CisgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisJfQorICAgIHJldHVybiB0
b2tlbjsKK30KKworc3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewor
CisJaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworCQorICAgIHdoaWxlICh0b2tl
biAhPSAnXG4nKSB7CisJCWlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9
PSBDUFBfSU5UQ09OU1RBTlQpeworICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJv
bF9uYW1lKTsKKwkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0g
Q1BQX1NUUkNPTlNUQU5UKXsKKwkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXls
dmFscHAtPnNjX2lkZW50KSk7CisJCX1lbHNlIHsKKwkJICAgIFN0b3JlU3RyKEdldFN0cmluZ09m
QXRvbShhdGFibGUsdG9rZW4pKTsKKwkJfQorCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQorCURlY0xpbmVOdW1iZXIoKTsK
KwkvL3N0b3JlIHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9uIGxvZy4uc2V0
IHRoZSBDb21waWxlIEVycm9yIGZsYWchISEhCisJbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwor
ICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICBSZXNldFRTdHJpbmcoKTsKKyAgICBj
cHAtPkNvbXBpbGVFcnJvcj0xOworICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICByZXR1cm4gJ1xu
JzsKK30vL0NQUGVycm9yCisKK3N0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQoreworCWNoYXIgU3JjU3RyTmFtZVsyXTsKKwljaGFyKiogYWxsVG9rZW5zOworCWludCB0
b2tlbkNvdW50ID0gMDsKKwlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOworCWNvbnN0IGNoYXIqIFNy
Y1N0cjsKKwlpbnQgaTsKKworCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCisJaWYgKHRva2VuPT0nXG4nKSB7CisJCURl
Y0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFnbWEiKTsKKyAg
ICAgICAgSW5jTGluZU51bWJlcigpOworCSAgICByZXR1cm4gdG9rZW47CisJfQorCQorCWFsbFRv
a2VucyA9IChjaGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsJCisK
Kwl3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworCQlpZiAodG9rZW5Db3VudCA+PSBtYXhUb2tlbkNv
dW50KSB7CisJCQltYXhUb2tlbkNvdW50ICo9IDI7CisJCQlhbGxUb2tlbnMgPSAoY2hhcioqKXJl
YWxsb2MoKGNoYXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsK
KwkJfQorCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgQ1BQX0lERU5USUZJRVI6CisJCQlTcmNT
dHIgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKKwkJCWFsbFRv
a2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKKwkJ
CXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKKwkJCWJyZWFrOworCQlj
YXNlIENQUF9JTlRDT05TVEFOVDoKKwkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsK
KwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikg
KyAxKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKKwkJCWJy
ZWFrOworCQljYXNlIENQUF9GTE9BVENPTlNUQU5UOgorCQkJU3JjU3RyID0geXlsdmFscHAtPnN5
bWJvbF9uYW1lOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJs
ZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNT
dHIpOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisgICAgICAgICAgICAvLyBFT0YKKyAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5l
d2xpbmUiKTsJCQkKKwkJCXJldHVybiB0b2tlbjsKKwkJZGVmYXVsdDoKKwkJCVNyY1N0ck5hbWVb
MF0gPSB0b2tlbjsKKwkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOworCQkJYWxsVG9rZW5zW3Rva2Vu
Q291bnRdID0gKGNoYXIqKW1hbGxvYygyKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3Vu
dCsrXSwgU3JjU3RyTmFtZSk7CisJCX0KKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKworCWNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOworCUhhbmRsZVBy
YWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7CisJdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQorCWZv
ciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKKwkJZnJlZSAoYWxsVG9rZW5zW2ldKTsK
Kwl9CisJZnJlZSAoYWxsVG9rZW5zKTsJCisKKwlyZXR1cm4gdG9rZW47ICAgIAorfSAvLyBDUFBw
cmFnbWEKKworI2RlZmluZSBFU1NMX1ZFUlNJT05fTlVNQkVSIDEwMAorI2RlZmluZSBFU1NMX1ZF
UlNJT05fU1RSSU5HICIxMDAiCisKK3N0YXRpYyBpbnQgQ1BQdmVyc2lvbih5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKK3sKKworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisKKyAgICBpZiAoY3BwLT5wYXN0Rmlyc3RTdGF0
ZW1lbnQgPT0gMSkKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjdmVyc2lvbiBtdXN0IG9jY3Vy
IGJlZm9yZSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoZSBwcm9ncmFtIik7CisKKyAgICBpZih0
b2tlbj09J1xuJyl7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiN2ZXJzaW9uIik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0dXJuIHRva2Vu
OworCX0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lOVENPTlNUQU5UKQorICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwkKKyAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXls
dmFscHAtPnN5bWJvbF9uYW1lKTsKKwkvL1NldFZlcnNpb25OdW1iZXIoeXlsdmFscHAtPnNjX2lu
dCk7CisgICAgCisgICAgaWYgKHl5bHZhbHBwLT5zY19pbnQgIT0gRVNTTF9WRVJTSU9OX05VTUJF
UikKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJWZXJzaW9uIG51bWJlciBub3Qgc3VwcG9ydGVk
IGJ5IEVTU0wiKTsKKworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAKKwlpZiAodG9rZW4gPT0gJ1xuJyl7CisJCXJl
dHVybiB0b2tlbjsKKwl9CisJZWxzZXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJz
aW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdmVyc2lvbgorCitzdGF0aWMg
aW50IENQUGV4dGVuc2lvbih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKworICAgIGludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgY2hhciBleHRlbnNpb25OYW1lWzgwXTsKKworICAgIGlmKHRva2VuPT0nXG4nKXsKKwkJ
RGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiBuYW1l
IG5vdCBzcGVjaWZpZWQiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1cm4gdG9r
ZW47CisJfQorCisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQorICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOworICAgIAorICAgIHN0cmNweShleHRlbnNpb25O
YW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisJICAgIAor
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJzonKSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiJzonIG1pc3NpbmcgYWZ0ZXIgZXh0ZW5zaW9uIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIHRv
a2VuOworICAgIH0KKyAgICAKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElG
SUVSKSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiYmVoYXZpb3IgZm9yIGV4dGVuc2lvbiBu
b3Qgc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICB1cGRh
dGVFeHRlbnNpb25CZWhhdmlvcihleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
eXlsdmFscHAtPnNjX2lkZW50KSk7CisKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJaWYgKHRva2VuID09ICdcbicpewor
CQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2V7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIj
ZXh0ZW5zaW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQZXh0ZW5zaW9uCisK
K2ludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisgICAgaW50IGlzVmVyc2lvbiA9IDA7CisKKyAgICBp
ZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBkZWZpbmVBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBkZWZpbmUoeXls
dmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbHNlQXRv
bSkgeworCQkJIGlmKENoa0NvcnJlY3RFbHNlTmVzdGluZygpKXsKKyAgICAgICAgICAgICAgICAg
aWYgKCFjcHAtPmlmZGVwdGggKXsKKyAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCIjZWxzZSBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxl
RXJyb3I9MTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICBD
UFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2Vsc2UgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICAgICAgICAgICB9CisJCQkgICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICAgICAgIGNwcC0+aWZk
ZXB0aD0wOworICAgICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Cisg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIH0KKwkJfSBlbHNlIGlmICh5
eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxpZkF0b20pIHsKKyAgICAgICAgICAgIGlmICghY3BwLT5p
ZmRlcHRoKXsKKyAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbGlmIG1pc21h
dGNoIik7CisgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgICAg
ICB9IAorICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNhcmUsIGJ1
dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCisgICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7IAorICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQkg
ICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2
YWxwcC0+c2NfaWRlbnQgPT0gZW5kaWZBdG9tKSB7CisJCSAgICAgLS1jcHAtPmVsc2V0cmFja2Vy
OworICAgICAgICAgICAgIGlmICghY3BwLT5pZmRlcHRoKXsKKyAgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIiNlbmRpZiBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgICBjcHAt
PkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisJCQkg
IAkgLS1jcHAtPmlmZGVwdGg7CisJICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IGlmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQaWYoeXlsdmFscHApOworICAgICAg
ICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZmRlZkF0b20pIHsKKyAgICAgICAg
ICAgICB0b2tlbiA9IENQUGlmZGVmKDEsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5
eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZuZGVmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0g
Q1BQaWZkZWYoMCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBsaW5lQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQbGluZSh5eWx2YWxw
cCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHByYWdtYUF0b20p
IHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUHByYWdtYSh5eWx2YWxwcCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHVuZGVmQXRvbSkgeworICAgICAgICAgICAg
IHRva2VuID0gQ1BQdW5kZWYoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBw
LT5zY19pZGVudCA9PSBlcnJvckF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUGVycm9y
KHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVy
c2lvbkF0b20pIHsKKyAgICAgICAgICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Cisg
ICAgICAgICAgICBpc1ZlcnNpb24gPSAxOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBleHRlbnNpb25BdG9tKSB7CisgICAgICAgICAgICB0b2tlbiA9IENQUGV4dGVu
c2lvbih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdG9yZVN0cigi
SW52YWxpZCBEaXJlY3RpdmUiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRv
bShhdGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBtZXNzYWdlPUdldFN0
cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAodG9r
ZW4gIT0gJ1xuJyAmJiB0b2tlbiAhPSAwICYmIHRva2VuICE9IEVPRikgeworCQl0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQor
ICAgICAgICAKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisKKyAgICByZXR1cm4g
dG9rZW47Cit9IC8vIHJlYWRDUFBsaW5lCisKK3ZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpz
KSB7CisgICAgRGVsZXRlVG9rZW5TdHJlYW0ocy0+Ym9keSk7Cit9CisKK3ZvaWQgUHJlZGVmaW5l
SW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7CisgICAgU291cmNlTG9jIGxv
Y2F0aW9uID0gezB9OworICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBNYWNyb1N5bWJv
bCBtYWNybyA9IHswfTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIGludCBhdG9tID0g
MDsKKworICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wp
OworICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKKyAgICBzcHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwg
IiVkIiwgdmFsdWUpOworICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFO
VCwgJnZhbCk7CisgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOworICAg
IHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7Cisg
ICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOworfQorCitzdGF0aWMgaW50IGVvZl9zY2Fu
KElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9CitzdGF0
aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
eyB9CisKK3N0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7CisgICAgSW5wdXRTcmMgKmluID0gbWFs
bG9jKHNpemVvZihJbnB1dFNyYykpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElucHV0U3Jj
KSk7CisgICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKKyAgICBpbi0+Z2V0Y2ggPSBlb2Zfc2NhbjsK
KyAgICBpbi0+dW5nZXRjaCA9IG5vb3A7CisgICAgaW4tPnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1
dDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworfQorCitzdGF0aWMgdm9pZCBQb3BFb2ZT
cmMoKSB7CisgICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2FuKSB7Cisg
ICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OworICAgICAgICBjcHAtPmN1
cnJlbnRJbnB1dCA9IGluLT5wcmV2OworICAgICAgICBmcmVlKGluKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbjsKKyAgICBUb2tlblN0cmVhbSAqbjsKKyAg
ICBSZXdpbmRUb2tlblN0cmVhbShhKTsKKyAgICBkbyB7CisgICAgICAgIHRva2VuID0gUmVhZFRv
a2VuKGEsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYm
IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9IHdoaWxlICh0b2tlbiA+IDApOworICAgIGlmICh0b2tlbiA8PSAwKSByZXR1
cm4gYTsKKyAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOworICAgIFB1c2hF
b2ZTcmMoKTsKKyAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOworICAgIHdoaWxlICgo
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApKSA+IDApIHsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1hY3Jv
RXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7CisgICAgfQorICAg
IFBvcEVvZlNyYygpOworICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOworICAgIHJldHVybiBuOwor
fSAvLyBQcmVzY2FuTWFjcm9BcmcKKwordHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNyYyB7Cisg
ICAgSW5wdXRTcmMgICAgYmFzZTsKKyAgICBNYWNyb1N5bWJvbCAqbWFjOworICAgIFRva2VuU3Ry
ZWFtICoqYXJnczsKK30gTWFjcm9JbnB1dFNyYzsKKworLyogbWFjcm9fc2NhbiAtLS0KKyoqIHJl
dHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcgbWFjcm8g
YXJncyAKKyovCitzdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4sIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IGk7CisgICAgaW50IHRva2VuID0gUmVhZFRva2Vu
KGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJ
RVIpIHsKKyAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCisgICAg
ICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQpIGJyZWFr
OworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICBSZWFkRnJvbVRva2VuU3RyZWFt
KGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOworICAgICAgICAgICAgcmV0dXJu
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOworICAgIGlu
LT5tYWMtPmJ1c3kgPSAwOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsK
KyAgICBpZiAoaW4tPmFyZ3MpIHsKKyAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2MtMTsgaT49
MDsgaS0tKQorICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0pOworICAg
ICAgICBmcmVlKGluLT5hcmdzKTsKKyAgICB9CisgICAgZnJlZShpbik7CisgICAgcmV0dXJuIGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cit9IC8v
IG1hY3JvX3NjYW4KKworLyogTWFjcm9FeHBhbmQKKyoqIGNoZWNrIGFuIGlkZW50aWZpZXIgKGF0
b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgorKiogSWYg
aXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJvcHJpYXRl
IGV4cGFuc2lvbgorKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFMU0UuCisq
LworCitpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQorewor
ICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3MsIGF0b20p
OworICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOworICAgIGludCBpLGosIHRva2VuLCBkZXB0
aD0wOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJaWYgKGF0b20gPT0gX19MSU5FX19BdG9t
KSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7CisgICAgICAg
IHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7Cisg
ICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAgICAgIHJl
dHVybiAxOworICAgIH0KKyAgICBpZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKKyAgICAgICAg
eXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOworICAgICAgICBzcHJpbnRmKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBVbmdl
dFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisJaWYgKGF0b20gPT0gX19WRVJTSU9OX19BdG9tKSB7CisgICAgICAgIHN0cmNweSh5eWx2
YWxwcC0+c3ltYm9sX25hbWUsRVNTTF9WRVJTSU9OX1NUUklORyk7CisgICAgICAgIHl5bHZhbHBw
LT5zY19pbnQgPSBhdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgIFVuZ2V0VG9r
ZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KyAgICBpZiAoIXN5bSB8fCBzeW0tPmRldGFpbHMubWFjLnVuZGVmKSByZXR1cm4gMDsKKyAgICBp
ZiAoc3ltLT5kZXRhaWxzLm1hYy5idXN5KSByZXR1cm4gMDsgICAgICAgIC8vIG5vIHJlY3Vyc2l2
ZSBleHBhbnNpb25zCisgICAgaW4gPSBtYWxsb2Moc2l6ZW9mKCppbikpOworICAgIG1lbXNldChp
biwgMCwgc2l6ZW9mKCppbikpOworICAgIGluLT5iYXNlLnNjYW4gPSAodm9pZCAqKW1hY3JvX3Nj
YW47CisgICAgaW4tPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGlu
LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICBpbi0+bWFjID0gJnN5
bS0+ZGV0YWlscy5tYWM7CisgICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYXJncykgeworICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisJCWlmICh0b2tlbiAhPSAnKCcpIHsKKyAgICAgICAgICAgIFVuZ2V0VG9rZW4odG9r
ZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IGF0b207Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpbi0+YXJncyA9IG1hbGxv
Yyhpbi0+bWFjLT5hcmdjICogc2l6ZW9mKFRva2VuU3RyZWFtICopKTsKKyAgICAgICAgZm9yIChp
PTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKQorICAgICAgICAgICAgaW4tPmFyZ3NbaV0gPSBOZXdU
b2tlblN0cmVhbSgibWFjcm8gYXJnIiwgMCk7CisJCWk9MDtqPTA7CisgICAgICAgIGRveworICAg
ICAgICAgICAgZGVwdGggPSAwOworCQkJd2hpbGUoMSkgeworICAgICAgICAgICAgICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeworICAgICAgICAgICAgICAgICAgICBT
dG9yZVN0cigiRU9GIGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cihH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYoKGluLT5tYWMtPmFyZ2M9PTApICYmICh0b2tlbiE9JyknKSkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgaWYgKGRlcHRoID09IDAgJiYgKHRva2VuID09ICcsJyB8fCB0b2tlbiA9PSAnKScpKSBi
cmVhazsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsrOworICAgICAg
ICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIGRlcHRoLS07CisgICAgICAgICAgICAgICAgUmVj
b3JkVG9rZW4oaW4tPmFyZ3NbaV0sIHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
aj0xOworCQkJfQorICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgeworICAgICAgICAgICAg
ICAgIGlmKChpbi0+bWFjLT5hcmdjPT0xKSAmJmo9PTApCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGkrKzsKKwkJfXdoaWxlKGkgPCBpbi0+bWFjLT5hcmdjKTsK
KworICAgICAgICBpZiAoaSA8IGluLT5tYWMtPmFyZ2MpIHsKKyAgICAgICAgICAgIFN0b3JlU3Ry
KCJUb28gZmV3IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJp
bmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRT
dHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAg
IFJlc2V0VFN0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9ICcpJykgeworICAg
ICAgICAgICAgZGVwdGg9MDsKKwkJCXdoaWxlICh0b2tlbiA+PSAwICYmIChkZXB0aCA+IDAgfHwg
dG9rZW4gIT0gJyknKSkgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIGRlcHRo
LS07CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAn
KCcpIGRlcHRoKys7CisgICAgICAgICAgICB9CisJCQkKKyAgICAgICAgICAgIGlmICh0b2tlbiA8
PSAwKSB7CisgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsKKyAgICAg
ICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAg
ICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3Rv
cmVTdHIoIlRvbyBtYW55IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBTdG9yZVN0cihH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3Ry
ZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAg
ICAgICAgIFJlc2V0VFN0cmluZygpOworCQl9CisJCWZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7
IGkrKykgeworICAgICAgICAgICAgaW4tPmFyZ3NbaV0gPSBQcmVzY2FuTWFjcm9BcmcoaW4tPmFy
Z3NbaV0sIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgIH0KKyNpZiAwCisgICAgcHJpbnRmKCIg
IDwlczolZD5mb3VuZCBtYWNybyAlc1xuIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGxvYy5maWxl
KSwKKyAgICAgICAgICAgbG9jLmxpbmUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdG9tKSk7Cisg
ICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAgICAgIHByaW50ZigiXHRh
cmcgJXMgPSAnIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGluLT5tYWMtPmFyZ3NbaV0pKTsKKyAg
ICAgICAgRHVtcFRva2VuU3RyZWFtKHN0ZG91dCwgaW4tPmFyZ3NbaV0pOworICAgICAgICBwcmlu
dGYoIidcbiIpOworICAgIH0KKyNlbmRpZgorCS8qcmV0YWluIHRoZSBpbnB1dCBzb3VyY2UqLwor
ICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICBzeW0tPmRldGFpbHMu
bWFjLmJ1c3kgPSAxOworICAgIFJld2luZFRva2VuU3RyZWFtKHN5bS0+ZGV0YWlscy5tYWMuYm9k
eSk7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0dXJuIDE7Cit9
IC8vIE1hY3JvRXhwYW5kCisKK2ludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCkKK3sKKyAg
ICBpZihjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT09MCl7CisJICBjcHAtPmVsc2Vk
ZXB0aFtjcHAtPmVsc2V0cmFja2VyXT0xOworICAgICAgcmV0dXJuIDE7ICAgICAgICAgIAorICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEi
KSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxs
YXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0
d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBu
b3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29u
YWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4g
dGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0
byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29m
dHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJp
bmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElB
IFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJ
QSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGlu
IGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhl
ciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElB
CitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0
ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBv
ciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5v
dAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkg
eW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJ
RElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNl
ZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9O
IEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5H
RU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Us
IE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9O
IFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElB
QkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NU
IFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBP
UiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElG
SUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dF
VkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVO
IElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHAuaAorLy8KKworI2lmICFk
ZWZpbmVkKF9fQ1BQX0gpCisjZGVmaW5lIF9fQ1BQX0ggMQorCisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3BhcnNlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90
b2tlbnMuaCIKKworaW50IEluaXRDUFAodm9pZCk7CitpbnQgRmluYWxDUFAodm9pZCk7CitpbnQg
IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBNYWNyb0V4cGFuZChpbnQg
YXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApOworaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2
b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgTWFjcm9TeW1ib2wgeworICAgIGludCBhcmdjOworICAg
IGludCAqYXJnczsKKyAgICBUb2tlblN0cmVhbSAqYm9keTsKKyAgICB1bnNpZ25lZCBidXN5OjE7
CisgICAgdW5zaWduZWQgdW5kZWY6MTsKK30gTWFjcm9TeW1ib2w7CisKK3ZvaWQgRnJlZU1hY3Jv
KE1hY3JvU3ltYm9sICopOwordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1l
LCBpbnQgdmFsdWUpOworCit2b2lkICBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpOyAg
ICAgIC8vIFByaW50cyBpbmZvcm1hdGlvbiBpbnRvIGRlYnVnIGxvZwordm9pZCAgQ1BQU2hJbmZv
TG9nTXNnKGNvbnN0IGNoYXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNo
LkluZm8uTG9nCit2b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8v
IFByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKK3ZvaWQgIEhhbmRsZVByYWdt
YShjb25zdCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29u
dGFpbmVyLgordm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAj
ZXJyb3IgTWVzc2FnZSBhcyBUU3RyaW5nLgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciop
OyAgICAgICAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAg
Lgordm9pZCAgU3RvcmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgVFN0cmluZyBpbiBQYXJzZSBDb250ZXh0Lgordm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKK3ZvaWQgIFNldFN0cmluZ051
bWJlcihpbnQpOyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAoraW50
ICAgR2V0TGluZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCitpbnQgICBHZXRTdHJpbmdOdW1iZXIodm9pZCk7ICAgICAgICAg
ICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKK2NvbnN0IGNoYXIqIEdl
dFN0cmZyb21UU3RyKHZvaWQpOyAgICAgICAgICAgLy8gQ29udmVydCBUU3RyaW5nIHRvIFN0cmlu
Zy4gIAordm9pZCAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwg
Y29uc3QgY2hhciogYmVoYXZpb3IpOworaW50ICAgRnJlZUNQUCh2b2lkKTsKKworI2VuZGlmIC8v
ICEoZGVmaW5lZChfX0NQUF9IKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHBzdHJ1Y3QuYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
K0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJl
LgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGNwcHN0
cnVjdC5jCisvLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworQ1BQU3RydWN0
ICAqY3BwICAgICAgPSBOVUxMOworc3RhdGljIGludCAgcmVmQ291bnQgPSAwOworCitpbnQgSW5p
dFByZXByb2Nlc3Nvcih2b2lkKTsKK2ludCBSZXNldFByZXByb2Nlc3Nvcih2b2lkKTsKK2ludCBG
cmVlQ1BQU3RydWN0KHZvaWQpOworaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZvaWQpOworCisv
KgorICogSW5pdENQUFN0cnVjdCgpIC0gSW5pdGlsYWl6ZSB0aGUgQ1BQIHN0cnVjdHVyZS4KKyAq
CisgKi8KKworaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCkKK3sKKyAgICBpbnQgbGVuOworICAgIGNo
YXIgKnA7CisKKyAgICBjcHAgPSAoQ1BQU3RydWN0ICopIG1hbGxvYyhzaXplb2YoQ1BQU3RydWN0
KSk7CisgICAgaWYgKGNwcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlZkNv
dW50Kys7CisKKyAgICAvLyBJbml0aWFsaXplIHB1YmxpYyBtZW1iZXJzOgorICAgIGNwcC0+cExh
c3RTb3VyY2VMb2MgPSAmY3BwLT5sYXN0U291cmNlTG9jOworICAgIAorCXAgPSAoY2hhciAqKSAm
Y3BwLT5vcHRpb25zOworICAgIGxlbiA9IHNpemVvZihjcHAtPm9wdGlvbnMpOworICAgIHdoaWxl
ICgtLWxlbiA+PSAwKQorICAgICAgICBwW2xlbl0gPSAwOworICAgICAKKyAgICBSZXNldFByZXBy
b2Nlc3NvcigpOworICAgIHJldHVybiAxOworfSAvLyBJbml0Q1BQU3RydWN0CisKK2ludCBSZXNl
dFByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIC8vIEluaXRpYWxpemUgcHJpdmF0ZSBtZW1iZXJz
OgorCisgICAgY3BwLT5sYXN0U291cmNlTG9jLmZpbGUgPSAwOworICAgIGNwcC0+bGFzdFNvdXJj
ZUxvYy5saW5lID0gMDsKKwljcHAtPnBDPTA7CisgICAgY3BwLT5Db21waWxlRXJyb3I9MDsgCisJ
Y3BwLT5pZmRlcHRoPTA7CisgICAgZm9yKGNwcC0+ZWxzZXRyYWNrZXI9MDsgY3BwLT5lbHNldHJh
Y2tlcjw2NDsgY3BwLT5lbHNldHJhY2tlcisrKQorCQljcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0
cmFja2VyXT0wOyAKKwljcHAtPmVsc2V0cmFja2VyPTA7CisgICAgY3BwLT50b2tlbnNCZWZvcmVF
T0YgPSAwOworICAgIHJldHVybiAxOworfQorCisvL0ludGlhbGl6aW5nIHRoZSBQcmVwcm9jZXNz
b3IuCisKK2ludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpCit7CisgICAjICBkZWZpbmUgQ1BQX1NU
VUZGIHRydWUKKyAgICAgICAgIyAgaWZkZWYgQ1BQX1NUVUZGCisgICAgICAgICAgICBGcmVlQ1BQ
U3RydWN0KCk7CisgICAgICAgICAgICBJbml0Q1BQU3RydWN0KCk7CisgICAgICAgICAgICBjcHAt
Pm9wdGlvbnMuUXVpZXQgPSAxOworICAgICAgICAgICAgY3BwLT5vcHRpb25zLnByb2ZpbGVTdHJp
bmcgPSAiZ2VuZXJpYyI7CisgICAgICAgICAgICBpZiAoIUluaXRBdG9tVGFibGUoYXRhYmxlLCAw
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGlmICghSW5pdFNjYW5u
ZXIoY3BwKSkKKwkgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAjICBlbmRpZgorICByZXR1
cm4gMDsgCit9CisKKy8vRnJlZUNQUFN0cnVjdCgpIC0gRnJlZSB0aGUgQ1BQIHN0cnVjdHVyZS4K
KworaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCkKK3sKKyAgICBpZiAocmVmQ291bnQpCisgICAgewor
ICAgICAgIGZyZWUoY3BwKTsKKyAgICAgICByZWZDb3VudC0tOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gMTsKK30KKworLy9GaW5hbGl6aW5nIHRoZSBQcmVwcm9jZXNzb3IuCisKK2ludCBGaW5h
bGl6ZVByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIyAgZGVmaW5lIENQUF9TVFVGRiB0cnVlCisg
ICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgorICAgICAgICAgICAgRnJlZUF0b21UYWJsZShhdGFi
bGUpOworICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgpOworICAgICAgICAgICAgRnJlZVNjYW5u
ZXIoKTsKKyAgICAgICAjICBlbmRpZgorICByZXR1cm4gMDsgCit9CisKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIEVuZCBvZiBjcHBzdHJ1Y3QuYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9tZW1vcnkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQor
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAor
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQor
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RT
LgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
K09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8vCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgor
CisvLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBpZiBjYWxsZWQgd2l0aCAwIGFy
Z3VtZW50cworI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEwMjQpCisjZGVmaW5lIEFMSUdO
ICAgICAgICAgICA4CisKKy8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgYHJlYWwnIG1hbGxvYyBhbmQg
ZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBmcmVlCisK
K3N0cnVjdCBjaHVuayB7CisgICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKK307CisKK3N0
cnVjdCBjbGVhbnVwIHsKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpuZXh0OworICAgIHZvaWQg
ICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICph
cmc7Cit9OworCitzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgeworICAgIHN0cnVjdCBjaHVuayAgICAg
ICAgKm5leHQ7CisgICAgdWludHB0cl90ICAgICAgICAgICBmcmVlLCBlbmQ7CisgICAgc2l6ZV90
ICAgICAgICAgICAgICBjaHVua3NpemU7CisgICAgdWludHB0cl90ICAgICAgICAgICBhbGlnbm1h
c2s7CisgICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKK307CisKK01lbW9yeVBvb2wg
Km1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbikKK3sK
KyAgICBNZW1vcnlQb29sICAqcG9vbDsKKworICAgIGlmIChhbGlnbiA9PSAwKSBhbGlnbiA9IEFM
SUdOOworICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXplID0gQ0hVTktTSVpFOworICAg
IGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSA8IHNp
emVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSAmIChhbGlnbi0x
KSkgcmV0dXJuIDA7CisgICAgaWYgKCEocG9vbCA9IG1hbGxvYyhjaHVua3NpemUpKSkgcmV0dXJu
IDA7CisgICAgcG9vbC0+bmV4dCA9IDA7CisgICAgcG9vbC0+Y2h1bmtzaXplID0gY2h1bmtzaXpl
OworICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFsaWduKS0xOyAgCisgICAgcG9v
bC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29sLT5hbGlnbm1hc2spICYgfnBv
b2wtPmFsaWdubWFzazsKKyAgICBwb29sLT5lbmQgPSAodWludHB0cl90KXBvb2wgKyBjaHVua3Np
emU7CisgICAgcG9vbC0+Y2xlYW51cCA9IDA7CisgICAgcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQg
bWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgc3RydWN0IGNsZWFudXAgICAg
ICAqY2xlYW51cDsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpwLCAqbmV4dDsKKworICAgIGZv
ciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNsZWFudXAgPSBjbGVhbnVwLT5u
ZXh0KSB7CisgICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFyZyk7CisgICAgfQorICAgIGZv
ciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4dCkgeworICAgICAgICBuZXh0
ID0gcC0+bmV4dDsKKyAgICAgICAgZnJlZShwKTsKKyAgICB9Cit9CisKK3ZvaWQgKm1lbV9BbGxv
YyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBzdHJ1Y3QgY2h1bmsgKmNo
OworICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOworICAgIHNpemUgPSAoc2l6ZSAr
IHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgIGlmIChzaXplIDw9IDAp
IHNpemUgPSBwb29sLT5hbGlnbm1hc2s7CisgICAgcG9vbC0+ZnJlZSArPSBzaXplOworICAgIGlm
IChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUgPCAodWludHB0cl90KXJ2KSB7
CisgICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3QgY2h1bmspICsg
cG9vbC0+YWxpZ25tYXNrKQorICAgICAgICAgICAgICAgICAgICAgICYgfnBvb2wtPmFsaWdubWFz
azsKKyAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7CisgICAgICAgIGlmIChtaW5y
ZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7CisgICAgICAgICAgICAvLyByZXF1ZXN0IHNpemUgaXMg
dG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUgaXQgYXMKKyAgICAgICAgICAg
IC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCisgICAgICAgICAgICBjaCA9IG1h
bGxvYyhtaW5yZXEpOworICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5jaHVua3NpemUpOworICAgICAg
ICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAgICAgICBwb29sLT5mcmVlID0gKHVpbnRw
dHJfdCljaCArIG1pbnJlcTsKKyAgICAgICAgICAgIHBvb2wtPmVuZCA9ICh1aW50cHRyX3QpY2gg
KyBwb29sLT5jaHVua3NpemU7CisgICAgICAgIH0KKyAgICAgICAgY2gtPm5leHQgPSBwb29sLT5u
ZXh0OworICAgICAgICBwb29sLT5uZXh0ID0gY2g7CisgICAgICAgIHJ2ID0gKHZvaWQgKikoKCh1
aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2spOwor
ICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKK2ludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29s
ICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykgeworICAgIHN0cnVjdCBjbGVh
bnVwICpjbGVhbnVwOworCisgICAgcG9vbC0+ZnJlZSA9IChwb29sLT5mcmVlICsgc2l6ZW9mKHZv
aWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7CisgICAgY2xlYW51cCA9IG1lbV9BbGxv
Yyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKKyAgICBpZiAoIWNsZWFudXApIHJldHVy
biAtMTsKKyAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51cDsKKyAgICBjbGVhbnVwLT5m
biA9IGZuOworICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKKyAgICBwb29sLT5jbGVhbnVwID0gY2xl
YW51cDsKKyAgICByZXR1cm4gMDsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
K2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJ
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
CitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitl
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAor
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
K1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKyNpZm5kZWYgX19NRU1P
UllfSAorI2RlZmluZSBfX01FTU9SWV9ICisKK3R5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVj
IE1lbW9yeVBvb2w7CisKK2V4dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3Qg
Y2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOworZXh0ZXJuIHZvaWQgbWVtX0ZyZWVQb29s
KE1lbW9yeVBvb2wgKik7CitleHRlcm4gdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnAsIHNp
emVfdCBzaXplKTsKK2V4dGVybiB2b2lkICptZW1fUmVhbGxvYyhNZW1vcnlQb29sICpwLCB2b2lk
ICpvbGQsIHNpemVfdCBvbGRzaXplLCBzaXplX3QgbmV3c2l6ZSk7CitleHRlcm4gaW50IG1lbV9B
ZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnAsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKTsK
KworI2VuZGlmIC8qIF9fTUVNT1JZX0ggKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvcGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0Nv
cHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRp
b24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVz
ZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMg
TlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAg
SWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2Us
IGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgor
CitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5
b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29w
eXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNv
ZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUK
K05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJj
ZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRl
IHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3Rp
Y2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlz
Y2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdh
cmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dv
cyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhw
cmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2Vz
CitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1
ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGlu
ZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdo
aWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJl
IGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcg
UFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5H
IFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAor
Tk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4g
Q09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5W
SURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVY
RU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVD
VElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09G
VFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFD
VCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhF
UldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEJJU09O
X1BBUlNFUl9ICisjIGRlZmluZSBCSVNPTl9QQVJTRVJfSAorCisjaWZuZGVmIHl5c3R5cGVwcAor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICBzY19pbnQ7CisgICAgZmxvYXQgIHNjX2Z2YWw7
CisgICAgaW50ICAgIHNjX2lkZW50OworCWNoYXIgICBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05B
TUVfTEVOKzFdOworfSB5eXN0eXBlcHA7CisKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAx
CisjZW5kaWYKKyMgZGVmaW5lCUNQUF9BTkRfT1AJICAgICAgICAyNTcKKyMgZGVmaW5lCUNQUF9T
VUJfQVNTSUdOCSAgICAyNTkKKyMgZGVmaW5lCUNQUF9NT0RfQVNTSUdOCSAgICAyNjAKKyMgZGVm
aW5lCUNQUF9BRERfQVNTSUdOCTI2MQorIyBkZWZpbmUJQ1BQX0RJVl9BU1NJR04JMjYyCisjIGRl
ZmluZQlDUFBfTVVMX0FTU0lHTgkyNjMKKyMgZGVmaW5lCUNQUF9FUV9PUAkgICAgICAgIDI2NAor
IyBkZWZpbmUgICAgQ1BQX1hPUl9PUCAgICAgICAgIDI2NSAKKyMgZGVmaW5lCUVSUk9SX1NZCSAg
ICAyNjYKKyMgZGVmaW5lCUNQUF9GTE9BVENPTlNUQU5UCTI2NworIyBkZWZpbmUJQ1BQX0dFX09Q
CSAgICAgICAgMjY4CisjIGRlZmluZQlDUFBfUklHSFRfT1AgICAgICAgIDI2OQorIyBkZWZpbmUJ
Q1BQX0lERU5USUZJRVIJICAgIDI3MAorIyBkZWZpbmUJQ1BQX0lOVENPTlNUQU5UCSAgICAyNzEK
KyMgZGVmaW5lCUNQUF9MRV9PUAkgICAgICAgIDI3MgorIyBkZWZpbmUJQ1BQX0xFRlRfT1AJICAg
ICAgICAyNzMKKyMgZGVmaW5lCUNQUF9ERUNfT1AJMjc0CisjIGRlZmluZQlDUFBfTkVfT1AJICAg
ICAgICAyNzUKKyMgZGVmaW5lCUNQUF9PUl9PUAkgICAgICAgIDI3NgorIyBkZWZpbmUJQ1BQX0lO
Q19PUAkgICAgMjc3CisjIGRlZmluZQlDUFBfU1RSQ09OU1RBTlQJICAgIDI3OAorIyBkZWZpbmUJ
Q1BQX1RZUEVJREVOVElGSUVSCTI3OQorCisjIGRlZmluZQlGSVJTVF9VU0VSX1RPS0VOX1NZCTI4
OQorCisjIGRlZmluZQlDUFBfUklHSFRfQVNTSUdOCSAgICAyODAKKyMgZGVmaW5lCUNQUF9MRUZU
X0FTU0lHTgkgICAgMjgxCisjIGRlZmluZQlDUFBfQU5EX0FTU0lHTgkyODIKKyMgZGVmaW5lCUNQ
UF9PUl9BU1NJR04gIAkyODMKKyMgZGVmaW5lCUNQUF9YT1JfQVNTSUdOCTI4NAorIyBkZWZpbmUJ
Q1BQX0xFRlRfQlJBQ0tFVAkyODUKKyMgZGVmaW5lCUNQUF9SSUdIVF9CUkFDS0VUCTI4NgorIyBk
ZWZpbmUJQ1BQX0xFRlRfQlJBQ0UJMjg3CisjIGRlZmluZQlDUFBfUklHSFRfQlJBQ0UJMjg4CisK
KyNlbmRpZiAvKiBub3QgQklTT05fUEFSU0VSX0ggKi8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgor
CitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8g
eW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlz
dHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywg
cGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBO
VklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJt
cywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwg
dW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2Fy
ZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5k
IHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBp
ZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4g
dGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9m
IHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2
aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklE
SUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIg
cmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5W
SURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmln
aHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5
IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBv
cmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEg
U09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAor
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ
TVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBF
SVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lO
IE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD
VCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9G
IFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04g
T0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVS
IFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNU
IExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworCisjIGluY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKK2V4dGVy
biBDUFBTdHJ1Y3QgKmNwcDsKK2ludCBJbml0Q1BQU3RydWN0KHZvaWQpOworaW50IEluaXRTY2Fu
bmVyKENQUFN0cnVjdCAqY3BwKTsKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
LCBpbnQgaHRzaXplKTsKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICpzKTsKK2NoYXIqIEdldFN0
cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgor
CitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8g
eW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlz
dHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywg
cGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBO
VklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJt
cywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwg
dW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2Fy
ZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5k
IHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBp
ZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4g
dGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9m
IHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2
aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklE
SUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIg
cmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5W
SURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmln
aHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5
IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBv
cmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEg
U09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAor
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ
TVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBF
SVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lO
IE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD
VCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9G
IFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04g
T0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVS
IFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNU
IExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLy8KKy8vIHNjYW5uZXIuYworLy8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNp
ZiAwCisgICAgI2luY2x1ZGUgPGllZWVmcC5oPgorICAgICNlbHNlCisgICAgI2RlZmluZSBpc2lu
ZmYoeCkgKCgoKihpbnQgKikmKHgpICYgMHg3ZjgwMDAwMEwpPT0weDdmODAwMDAwTCkgJiYgXAor
ICAgICAgICAgICAgICAgICAgICAgICAoKCooaW50ICopJih4KSAmIDB4MDA3ZmZmZmZMKT09MDAw
MDAwMDAwMEwpKQorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgeworICAgIElucHV0
U3JjIGJhc2U7CisgICAgY2hhciAqcDsKK30gU3RyaW5nSW5wdXRTcmM7CisKK3N0YXRpYyBpbnQg
ZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICByZXR1
cm4gRU9GOworfSAvLyBlb2Zfc2NhbgorCitzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwg
aW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkge30KKworc3RhdGljIElucHV0U3JjIGVvZl9p
bnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wIH07CisKK3N0YXRpYyBp
bnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2RlZmlu
ZSBFT0xfU1kgJ1xuJworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIERCR19C
UkVBS1BPSU5UKCkgX19hc20gaW50IDMKKyNlbGlmIGRlZmluZWQoX01fQU1ENjQpCisgICAgI2Rl
ZmluZSBEQkdfQlJFQUtQT0lOVCgpIGFzc2VydCghIkRiZ19CcmVha3BvaW50Iik7CisjZWxzZQor
ICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0Nf
VkVSKSAmJiAhZGVmaW5lZChfTV9BTUQ2NCkKKyAgICBfX2ludDY0IFJEVFNDICggdm9pZCApIHsK
KworICAgICAgICBfX2ludDY0IHY7CisgICAgCisgICAgICAgIF9fYXNtIF9fZW1pdCAweDBmCisg
ICAgICAgIF9fYXNtIF9fZW1pdCAweDMxCisgICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdiwg
ZWF4CisgICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdis0LCBlZHgKKyAgICAKKyAgICAgICAg
cmV0dXJuIHY7CisgICAgfQorI2VuZGlmCisKKworaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAq
Y3BwKQoreworICAgIC8vIEFkZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUg
c2Nhbm5lcjoKKyAgICBpZiAoIUluaXRDUFAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBj
cHAtPm1vc3RSZWNlbnRUb2tlbiA9IDA7CisgICAgY3BwLT50b2tlbkxvYyA9ICZjcHAtPmx0b2tl
bkxvYzsKKworICAgIGNwcC0+bHRva2VuTG9jLmZpbGUgPSAwOworICAgIGNwcC0+bHRva2VuTG9j
LmxpbmUgPSAwOworCisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmZW9mX2lucHV0c3JjOworICAg
IGNwcC0+cHJldmlvdXNfdG9rZW4gPSAnXG4nOworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50
ID0gMDsKKworICAgIHJldHVybiAxOworfSAvLyBJbml0U2Nhbm5lcgorCitpbnQgRnJlZVNjYW5u
ZXIodm9pZCkKK3sKKyAgICByZXR1cm4gKEZyZWVDUFAoKSk7Cit9CisKKy8qCisgKiBzdHJfZ2V0
Y2goKQorICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KKyAq
IHJldHVybnMgdGhlIG5leHQtY2hhciBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uCisgKiByZXR1cm5z
IEVPRiB3aGVuIHRoZSBjb21wbGV0ZSBzaGFkZXIgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50
IHN0cl9nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4pCit7CisJZm9yKDs7KXsKKwkgICBpZiAoKmlu
LT5wKXsKKwkgICAgICBpZiAoKmluLT5wID09ICdcbicpIHsKKyAgICAgICAgICAgICBpbi0+YmFz
ZS5saW5lKys7CisgICAgICAgICAgICAgSW5jTGluZU51bWJlcigpOworICAgICAgICAgIH0KKyAg
ICAgICAgICByZXR1cm4gKmluLT5wKys7CisJICAgfQorCSAgIGlmKCsrKGNwcC0+UGFXaGljaFN0
cikgPCBjcHAtPlBhQXJnYyl7CisJCSAgZnJlZShpbik7CisJCSAgU2V0U3RyaW5nTnVtYmVyKGNw
cC0+UGFXaGljaFN0cik7CisgICAgCSAgU2V0TGluZU51bWJlcigxKTsKKwkJICBTY2FuRnJvbVN0
cmluZyhjcHAtPlBhQXJndltjcHAtPlBhV2hpY2hTdHJdKTsKKwkJICBpbj0oU3RyaW5nSW5wdXRT
cmMqKWNwcC0+Y3VycmVudElucHV0OworCSAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAKKwkg
ICB9CisJICAgZWxzZXsKKwkgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7
CisJICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7CisgICAgICAgICAgZnJlZShpbik7CisgICAgICAg
ICAgcmV0dXJuIEVPRjsKKyAgICAgICB9ICAKKwl9Cit9IC8vIHN0cl9nZXRjaAorCitzdGF0aWMg
dm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICp0
eXBlKSB7CisgICAgaWYgKGluLT5wWy0xXSA9PSBjaClpbi0+cC0tOworCWVsc2UgeworCQkqKGlu
LT5wKT0nXDAnOyAvL3RoaXMgd291bGQgdGFrZSBjYXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBwcmV2
aW91cyBzdHJpbmcuCisJICAgIGNwcC0+UGFXaGljaFN0ci0tOworCX0gIAorCWlmIChjaCA9PSAn
XG4nKSB7CisgICAgICAgIGluLT5iYXNlLmxpbmUtLTsKKyAgICAgICAgRGVjTGluZU51bWJlcigp
OworICAgIH0KK30gLy8gc3RyX3VuZ2V0Y2gKKworaW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKnMp
Cit7CisgICAgCisJU3RyaW5nSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVvZihTdHJpbmdJbnB1
dFNyYykpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CisJaW4t
PnAgPSBzOworICAgIGluLT5iYXNlLmxpbmUgPSAxOworICAgIGluLT5iYXNlLnNjYW4gPSBieXRl
X3NjYW47CisgICAgaW4tPmJhc2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBl
cHAgKikpc3RyX2dldGNoOworICAgIGluLT5iYXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRT
cmMgKiwgaW50LCB5eXN0eXBlcHAgKikpc3RyX3VuZ2V0Y2g7CisgICAgaW4tPmJhc2UucHJldiA9
IGNwcC0+Y3VycmVudElucHV0OworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwor
CisgICAgcmV0dXJuIDE7Cit9IC8vIFNjYW5Gcm9tU3RyaW5nOworCisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLyBGbG9hdGluZyBwb2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiBs
QnVpbGRGbG9hdFZhbHVlKCkgLSBRdWljayBhbmQgZGlydHkgY29udmVyc2lvbiB0byBmbG9hdGlu
ZyBwb2ludC4gIFNpbmNlIGFsbAorICogICAgICAgICB3ZSBuZWVkIGlzIHNpbmdsZSBwcmVjaXNp
b24gdGhpcyBzaG91bGQgYmUgcXVpdGUgcHJlY2lzZS4KKyAqLworCitzdGF0aWMgZmxvYXQgbEJ1
aWxkRmxvYXRWYWx1ZShjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBleHApCit7CisgICAg
ZG91YmxlIHZhbCwgZXhwdmFsLCB0ZW47CisgICAgaW50IGlpLCBsbGVuLCBhYnNleHA7CisgICAg
ZmxvYXQgcnY7CisKKyAgICB2YWwgPSAwLjA7CisgICAgbGxlbiA9IGxlbjsKKyAgICBmb3IgKGlp
ID0gMDsgaWkgPCBsZW47IGlpKyspCisgICAgICAgIHZhbCA9IHZhbCoxMC4wICsgKHN0cltpaV0g
LSAnMCcpOworICAgIGlmIChleHAgIT0gMCkgeworICAgICAgICBhYnNleHAgPSBleHAgPiAwID8g
ZXhwIDogLWV4cDsKKyAgICAgICAgZXhwdmFsID0gMS4wZjsKKyAgICAgICAgdGVuID0gMTAuMDsK
KyAgICAgICAgd2hpbGUgKGFic2V4cCkgeworICAgICAgICAgICAgaWYgKGFic2V4cCAmIDEpCisg
ICAgICAgICAgICAgICAgZXhwdmFsICo9IHRlbjsKKyAgICAgICAgICAgIHRlbiAqPSB0ZW47Cisg
ICAgICAgICAgICBhYnNleHAgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cCA+PSAw
KSB7CisgICAgICAgICAgICB2YWwgKj0gZXhwdmFsOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFsIC89IGV4cHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBydiA9IChmbG9hdCl2
YWw7CisgICAgaWYgKGlzaW5mZihydikpIHsKKwkJQ1BQRXJyb3JUb0luZm9Mb2coIiBFUlJPUl9f
X0ZQX0NPTlNUX09WRVJGTE9XIik7CisgICAgfQorICAgIHJldHVybiBydjsKK30gLy8gbEJ1aWxk
RmxvYXRWYWx1ZQorCisKKy8qCisgKiBsRmxvYXRDb25zdCgpIC0gU2NhbiBhIGZsb2F0aW5nIHBv
aW50IGNvbnN0YW50LiAgQXNzdW1lcyB0aGF0IHRoZSBzY2FubmVyCisgKiAgICAgICAgIGhhcyBz
ZWVuIGF0IGxlYXN0IG9uZSBkaWdpdCwgZm9sbG93ZWQgYnkgZWl0aGVyIGEgZGVjaW1hbCAnLicg
b3IgdGhlCisgKiAgICAgICAgIGxldHRlciAnZScuCisgKi8KKworc3RhdGljIGludCBsRmxvYXRD
b25zdChjaGFyICpzdHIsIGludCBsZW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7
CisgICAgaW50IEhhc0RlY2ltYWwsIGRlY2xlbiwgZXhwLCBFeHBTaWduOworICAgIGludCBzdHJf
bGVuOworICAgIGZsb2F0IGx2YWw7CisgICAgCisgICAgSGFzRGVjaW1hbCA9IDA7CisgICAgZGVj
bGVuID0gMDsKKyAgICBleHAgPSAwOworCQorICAgIHN0cl9sZW49bGVuOworICAgIGlmIChjaCA9
PSAnLicpIHsKKwkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgSGFzRGVjaW1hbCA9IDE7CisgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAg
ICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgIGRl
Y2xlbisrOworICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwIHx8IGNoICE9ICcwJykgeworICAg
ICAgICAgICAgICAgICAgICBzdHJbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4r
KztzdHJfbGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJP
Ul9fX0ZQX0NPTlNUX1RPT19MT05HIik7CisgICAgICAgICAgICAgICAgbGVuID0gMSxzdHJfbGVu
PTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFeHBvbmVudDoK
KworICAgIGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7CisgICAgICAgIEV4cFNpZ24gPSAx
OworCQlzdHJbbGVuKytdPWNoOworICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICBpZiAoY2ggPT0gJysnKSB7
CisgICAgICAgICAgICBzdHJbbGVuKytdPWNoOyAgCisJCQljaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYg
KGNoID09ICctJykgeworICAgICAgICAgICAgRXhwU2lnbiA9IC0xOworCQkJc3RyW2xlbisrXT1j
aDsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpIHsKKyAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgZXhwID0gZXhwKjEwICsgY2ggLSAnMCc7CisJCQkJc3RyW2xlbisr
XT1jaDsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRVJST1JfSU5fRVhQT05F
TlQiKTsKKyAgICAgICAgfQorICAgICAgICBleHAgKj0gRXhwU2lnbjsKKyAgICB9CisgICAgICAK
KyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgbHZhbCA9IDAuMGY7CisJCXN0cmNweShzdHIs
IjAuMCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cltsZW5dPSdcMCc7ICAgICAgCisgICAg
ICAgIGx2YWwgPSBsQnVpbGRGbG9hdFZhbHVlKHN0ciwgc3RyX2xlbiwgZXhwIC0gZGVjbGVuKTsK
KyAgICB9CisgICAgLy8gU3VmZml4OgorICAgIAorICAgIHl5bHZhbHBwLT5zY19mdmFsID0gbHZh
bDsKKyAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN0cik7CisgICAgY3BwLT5jdXJy
ZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7ICAgICAg
ICAgICAgCisgICAgcmV0dXJuIENQUF9GTE9BVENPTlNUQU5UOworfSAvLyBsRmxvYXRDb25zdAor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTm9ybWFsIFNjYW5uZXIgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisgICAgCitzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQoreworICAgIGNoYXIgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xF
TiArIDFdOworICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGlu
dCBBbHJlYWR5Q29tcGxhaW5lZDsKKyAgICBpbnQgbGVuLCBjaCwgaWksIGl2YWwgPSAwOworCisg
ICAgZm9yICg7OykgeworICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMDsKKyAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KwkJCisgICAgICAgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXHIn
KSB7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMTsKKyAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgIH0KKwkJCisgICAgICAgIGNwcC0+bHRva2VuTG9jLmZpbGUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bmFtZTsKKyAgICAgICAgY3BwLT5sdG9rZW5Mb2MubGluZSA9IGNwcC0+Y3VycmVudElu
cHV0LT5saW5lOworICAgICAgICBsZW4gPSAwOworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAg
ICAgIGRlZmF1bHQ6CisJCQlyZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KKyAg
ICAgICAgY2FzZSBFT0Y6CisgICAgICAgICAgICByZXR1cm4gLTE7CisJCWNhc2UgJ0EnOiBjYXNl
ICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKyAgICAgICAgY2FzZSAnRic6IGNh
c2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOgorICAgICAgICBjYXNlICdLJzog
Y2FzZSAnTCc6IGNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6CisgICAgICAgIGNhc2UgJ1An
OiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKKyAgICAgICAgY2FzZSAn
VSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgorICAgICAgICBjYXNl
ICdaJzogY2FzZSAnXyc6CisgICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNh
c2UgJ2QnOiBjYXNlICdlJzoKKyAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzog
Y2FzZSAnaSc6IGNhc2UgJ2onOgorICAgICAgICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20n
OiBjYXNlICduJzogY2FzZSAnbyc6CisgICAgICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAn
cic6IGNhc2UgJ3MnOiBjYXNlICd0JzoKKyAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNl
ICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgorICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAK
KyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9O
QU1FX0xFTikgeworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwkJCQkJCisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jykg
fHwKKyAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAg
ICAgICAgICAgICBjaCA9PSAnXycpOworICAgICAgICAgICAgaWYgKGxlbiA+PSBNQVhfU1lNQk9M
X05BTUVfTEVOKQorICAgICAgICAgICAgICAgIGxlbiA9IE1BWF9TWU1CT0xfTkFNRV9MRU4gLSAx
OworICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBjcHAt
PmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcwJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5z
eW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJ3gnIHx8IGNoID09ICdYJykgeworCQkJCXl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4r
K10gPSBjaDsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICgoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBj
aCA8PSAnRicpIHx8CisgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2Yn
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFp
bmVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGRvIHsKKwkJCQkJCXl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpdmFsIDw9IDB4MGZmZmZmZmYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ0EnICsgMTA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWkgPSBjaCAtICdhJyArIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdmFsID0gKGl2YWwgPDwgNCkgfCBpaTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIkVSUk9SX19fSEVYX0NPTlNUX09WRVJGTE9XIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9f
X0VSUk9SX0lOX0hFWF9DT05TVEFOVCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJeXls
dmFscHAtPnNjX2ludCA9IGl2YWw7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05T
VEFOVDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeyAv
LyBvY3RhbCBpbnRlZ2VyIGNvbnN0YW50cworICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFp
bmVkID0gMDsKKyAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGl2YWwgPD0gMHgxZmZmZmZmZikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWkgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl2
YWwgPSAoaXZhbCA8PCAzKSB8IGlpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX09DVF9DT05TVF9PVkVS
RkxPVyIpOworICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc3Jyk7CisgICAgICAgICAgICAgICAg
aWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBj
aCA9PSAneCd8fCBjaCA9PSAnRScpIAorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9h
dENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBjaCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJ
CQl5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lO
VENPTlNUQU5UOworICAgICAgICAgICAgfSBlbHNlIHsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQljaCA9ICcwJzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4uLgorICAgICAgICBj
YXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6
IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgICAgICAgICAgZG8g
eworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwIHx8IGNoICE9ICcwJykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAg
ICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAm
JiBjaCA8PSAnOScpOworICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwg
Y2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4s
IGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHl5
bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICBpdmFsID0gMDsKKyAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAg
ICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgbGVuOyBpaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoID0geXlsdmFscHAtPnN5bWJvbF9uYW1lW2lpXSAtICcwJzsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKChpdmFsID4gMjE0NzQ4MzY0KSB8fCAoaXZhbCA9PSAyMTQ3NDgzNjQgJiYg
Y2ggPj0gOCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWlu
ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1Jf
X19JTlRFR0VSX0NPTlNUX09WRVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICBBbHJl
YWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaXZhbCA9IGl2YWwqMTAgKyBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7CisgICAgICAgICAgICAgICAgaWYoaXZhbD09
MCkKKyAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIwIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9E
RUNfT1A7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICctJzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09
ICcrJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5DX09QOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FERF9B
U1NJR047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIHJldHVybiAnKyc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyonOgor
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnKic7CisgICAgICAgICAgICB9
CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9
PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01PRF9BU1NJR047CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9S
SUdIVF9CUkFDRTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICclJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAn
Oic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICc6JzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSAnXic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAg
aWYgKGNoID09ICdeJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfWE9SX09QOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047CisgICAgICAgICAgICAgICAgZWxz
ZXsKKyAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgcmV0dXJuICdeJzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNl
ICc9JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICc9JzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNo
ID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTkVfT1A7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAn
ISc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgY2ggPSBj
cHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09S
X09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0n
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX0FTU0lHTjsKKyAgICAgICAgICAg
ICAgICBlbHNleworICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1
cm4gJ3wnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAn
Jic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICcmJykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfQU5EX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0FORF9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
IGlmIChjaCA9PSAnPCcpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlm
KGNoID09ICc9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0FTU0lHTjsK
KyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJ
bnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGNoID09ICc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFD
S0VUOworICAgICAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBjYXNlICc+
JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZihjaCA9PSAnPScpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7Cisg
ICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJ
R0hUX09QOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0dFX09QOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAg
ICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCAw
LCAnLicsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKGNoID09ICcuJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7IC8vIFNwZWNp
YWwgRU9GIGhhY2sKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcuJzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBjaCAh
PSBFT0YpOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT0gJyonKSB7CisgICAgICAgICAgICAgICAgaW50IG5sY291bnQgPSAw
OworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJ1xuJykgbmxjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
IEVPRikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJF
UlJPUl9fX0VPRl9JTl9DT01NRU5UIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FT0ZfSU5fQ09NTUVOVCIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJy8nKTsKKyAgICAgICAgICAgICAgICBpZiAobmxjb3Vu
dCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gR28gdHJ5IGl0IGFnYWluLi4uCisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lH
TjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICciJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB3aGlsZSAoY2ggIT0g
JyInICYmIGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKSB7CisgICAgICAgICAgICAgICAgaWYgKGNo
ID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBs
aW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdM
IEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NUUklOR19M
RU4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gY2g7CisgICAgICAg
ICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSAnXDAn
OworICAgICAgICAgICAgaWYgKGNoID09ICciJykgeworICAgICAgICAgICAgICAgIHl5bHZhbHBw
LT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN0cmluZ192YWwpOworICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfU1RSQ09OU1RBTlQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0NQUF9FT0xfSU5fU1RS
SU5HIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1NZOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfSAvLyBieXRlX3NjYW4KKworaW50IHl5bGV4X0NQUChjaGFyKiBi
dWYsIGludCBtYXhTaXplKQoreyAgICAKKwl5eXN0eXBlcHAgeXlsdmFscHA7CisgICAgaW50IHRv
a2VuID0gJ1xuJzsgICAKKworICAgIGZvcig7OykgeworCisgICAgICAgIGNoYXIqIHRva2VuU3Ry
aW5nID0gMDsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKKwkJaWYoY2hlY2tfRU9GKHRva2VuKSkKKwkJICAgIHJl
dHVybiAwOworICAgICAgICBpZiAodG9rZW4gPT0gJyMnKSB7CisgICAgICAgICAgICBpZiAoY3Bw
LT5wcmV2aW91c190b2tlbiA9PSAnXG4nfHwgY3BwLT5wcmV2aW91c190b2tlbiA9PSAwKSB7CisJ
CQkgICAgdG9rZW4gPSByZWFkQ1BQbGluZSgmeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlm
KGNoZWNrX0VPRih0b2tlbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCQkJICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGNvbW1hbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkg
YW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGF0IGxpbmUiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjcHAtPnByZXZpb3VzX3Rv
a2VuID0gdG9rZW47CisgICAgICAgIC8vIGV4cGFuZCBtYWNyb3MKKyAgICAgICAgaWYgKHRva2Vu
ID09IENQUF9JREVOVElGSUVSICYmIE1hY3JvRXhwYW5kKHl5bHZhbHBwLnNjX2lkZW50LCAmeXls
dmFscHApKSB7CisgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRva2Vu
ID09ICdcbicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAKKyAgICAgICAgaWYg
KHRva2VuID09IENQUF9JREVOVElGSUVSKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLnNjX2lkZW50KTsKKyAgICAgICAgfSBlbHNl
IGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVHx8dG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5U
KXsgICAgICAgICAgICAgCisgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7
ICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9u
YW1lOworCQl9IGVsc2UgeyAgICAgICAgICAgIAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RT
dGF0ZW1lbnQgPSAxOyAgICAgICAgICAgIAorICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRT
dHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKTsKKwkgICAgfQorCisgICAgICAgIGlmICh0b2tlblN0
cmluZykgeworICAgICAgICAgICAgaWYgKChzaWduZWQpc3RybGVuKHRva2VuU3RyaW5nKSA+PSBt
YXhTaXplKSB7CisgICAgICAgICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOworICAg
ICAgICAgICAgICAgIHJldHVybiBtYXhTaXplOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlICBpZiAoc3RybGVuKHRva2VuU3RyaW5nKSA+IDApIHsKKwkJCSAgICBzdHJjcHkoYnVm
LCB0b2tlblN0cmluZyk7CisgICAgICAgICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAx
OworICAgICAgICAgICAgICAgIHJldHVybiAoaW50KXN0cmxlbih0b2tlblN0cmluZyk7CisgICAg
ICAgICAgICB9ICAKKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30gLy8geXlsZXgKKworLy9DaGVja3MgaWYgdGhlIHRva2VuIGp1c3Qg
cmVhZCBpcyBFT0Ygb3Igbm90LgoraW50IGNoZWNrX0VPRihpbnQgdG9rZW4pCit7CisgICBpZih0
b2tlbj09LTEpeworICAgICAgIGlmKGNwcC0+aWZkZXB0aCA+MCl7CisJCUNQUEVycm9yVG9JbmZv
TG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBpbGF0aW9uIHN0b3BwZWQiKTsKKyAgICAgICAgY3Bw
LT5Db21waWxlRXJyb3I9MTsKKyAgICAgICB9CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJl
dHVybiAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBzY2FubmVyLmMgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
K2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJ
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
CitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitl
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAor
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
K1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHNjYW5uZXIuaAor
Ly8KKworI2lmICFkZWZpbmVkKF9fU0NBTk5FUl9IKQorI2RlZmluZSBfX1NDQU5ORVJfSCAxCisK
KyNkZWZpbmUgTUFYX1NZTUJPTF9OQU1FX0xFTiAxMjgKKyNkZWZpbmUgTUFYX1NUUklOR19MRU4g
NTEyCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisKKy8vIE5v
dCByZWFsbHkgYXRvbSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4uCisKK3R5cGVkZWYg
c3RydWN0IFNvdXJjZUxvY19SZWMgeworICAgIHVuc2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7Cit9
IFNvdXJjZUxvYzsKKworaW50IHl5cGFyc2UgKHZvaWQpOworCitpbnQgeXlsZXhfQ1BQKGNoYXIq
IGJ1ZiwgaW50IG1heFNpemUpOworCit0eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7CisgICAgc3Ry
dWN0IElucHV0U3JjCSpwcmV2OworICAgIGludAkJCSgqc2Nhbikoc3RydWN0IElucHV0U3JjICos
IHl5c3R5cGVwcCAqKTsKKyAgICBpbnQJCQkoKmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlz
dHlwZXBwICopOworICAgIHZvaWQJCSgqdW5nZXRjaCkoc3RydWN0IElucHV0U3JjICosIGludCwg
eXlzdHlwZXBwICopOworICAgIGludAkJCW5hbWU7ICAvKiBhdG9tICovCisgICAgaW50CQkJbGlu
ZTsKK30gSW5wdXRTcmM7CisKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8g
SW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCitpbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqKTsg
ICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5nIG1lbnRpb25l
ZC4KK2ludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhpdCBh
IEVPRiBhYnJ1cHRseSAKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsgICAvLyBzdGlj
a2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3ZvaWQgU2V0TGlu
ZU51bWJlcihpbnQpOwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKK3ZvaWQgSW5jTGluZU51
bWJlcih2b2lkKTsKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKTsKK2ludCBGcmVlU2Nhbm5lcih2
b2lkKTsgICAgICAgICAgICAgICAgIC8vIEZyZWUgdGhlIGNwcCBzY2FubmVyCisjZW5kaWYgLy8g
IShkZWZpbmVkKF9fU0NBTk5FUl9IKQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0
d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBz
bGdsb2JhbHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCisjZGVmaW5lIF9f
U0xHTE9CQUxTX0ggMQorCit0eXBlZGVmIHN0cnVjdCBDUFBTdHJ1Y3RfUmVjIENQUFN0cnVjdDsK
KworZXh0ZXJuIENQUFN0cnVjdCAqY3BwOworCisjdW5kZWYgIENQUENfREVCVUdfVEhFX0NPTVBJ
TEVSCisjaWYgZGVmaW5lZChfREVCVUcpCisjZGVmaW5lIENQUENfREVCVUdfVEhFX0NPTVBJTEVS
IDEKKyNlbmRpZgorCisjdW5kZWYgIENQUENfRU5BQkxFX1RPT0xTCisjZGVmaW5lIENQUENfRU5B
QkxFX1RPT0xTIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgiCisjaWYgIWRlZmluZWQoTk9fUEFSU0VSKQorI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKyNlbmRpZgorCisjaWYgIWRl
ZmluZWQoTlVMTCkKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2VuZGlmIC8vICEoZGVmaW5l
ZChfX1NMR0xPQkFMU19IKQorCisKKyAgICAKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyODkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3
YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHN5
bWJvbHMuYworLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTeW1ib2wgVGFibGUgVmFyaWFibGVzOiAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworU2NvcGUgKlNjb3BlTGlzdCA9IE5VTEw7CitTY29wZSAqQ3Vy
cmVudFNjb3BlID0gTlVMTDsKK1Njb3BlICpHbG9iYWxTY29wZSA9IE5VTEw7CisKK3N0YXRpYyB2
b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkgeworICAgIFNjb3BlICpzY29wZSA9IF9zY29w
ZTsKKworICAgIGlmIChzY29wZS0+bmV4dCkKKyAgICAgICAgc2NvcGUtPm5leHQtPnByZXYgPSBz
Y29wZS0+cHJldjsKKyAgICBpZiAoc2NvcGUtPnByZXYpCisgICAgICAgIHNjb3BlLT5wcmV2LT5u
ZXh0ID0gc2NvcGUtPm5leHQ7CisgICAgZWxzZQorICAgICAgICBTY29wZUxpc3QgPSBzY29wZS0+
bmV4dDsKK30KKworLyoKKyAqIE5ld1Njb3BlKCkKKyAqCisgKi8KK1Njb3BlICpOZXdTY29wZUlu
UG9vbChNZW1vcnlQb29sICpwb29sKQoreworICAgIFNjb3BlICpsU2NvcGU7CisKKyAgICBsU2Nv
cGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNjb3BlKSk7CisgICAgbFNjb3BlLT5wb29sID0g
cG9vbDsKKyAgICBsU2NvcGUtPnBhcmVudCA9IE5VTEw7CisgICAgbFNjb3BlLT5mdW5TY29wZSA9
IE5VTEw7CisgICAgbFNjb3BlLT5zeW1ib2xzID0gTlVMTDsKKyAgICAKKyAgICBsU2NvcGUtPmxl
dmVsID0gMDsKKworICAgIGxTY29wZS0+cHJvZ3JhbXMgPSBOVUxMOworICAgIGlmICgobFNjb3Bl
LT5uZXh0ID0gU2NvcGVMaXN0KSkKKyAgICAgICAgU2NvcGVMaXN0LT5wcmV2ID0gbFNjb3BlOwor
ICAgIGxTY29wZS0+cHJldiA9IDA7CisgICAgU2NvcGVMaXN0ID0gbFNjb3BlOworICAgIG1lbV9B
ZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBsU2NvcGUpOworICAgIHJldHVybiBsU2NvcGU7
Cit9IC8vIE5ld1Njb3BlCisKKy8qCisgKiBQdXNoU2NvcGUoKQorICoKKyAqLworCit2b2lkIFB1
c2hTY29wZShTY29wZSAqZlNjb3BlKQoreworICAgIFNjb3BlICpsU2NvcGU7CisKKyAgICBpZiAo
Q3VycmVudFNjb3BlKSB7CisgICAgICAgIGZTY29wZS0+bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxl
dmVsICsgMTsKKyAgICAgICAgaWYgKGZTY29wZS0+bGV2ZWwgPT0gMSkgeworICAgICAgICAgICAg
aWYgKCFHbG9iYWxTY29wZSkgeworICAgICAgICAgICAgICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYg
R2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0xLCB3ZSdyZQorICAgICAgICAgICAgICAgICAq
IGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1cGVyZ2xvYmFsIHNjb3BlLiAgVGhpbmdzCisg
ICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBpZiB3ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwg
c28gd2UgYXJiaXRyYXJpbHkKKyAgICAgICAgICAgICAgICAgKiBzZXQgaXQgdG8gMiAqLworICAg
ICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49IDIpIHsKKyAgICAgICAgICAgIGxTY29wZSA9
IGZTY29wZTsKKyAgICAgICAgICAgIHdoaWxlIChsU2NvcGUtPmxldmVsID4gMikKKyAgICAgICAg
ICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7CisgICAgICAgICAgICBmU2NvcGUtPmZ1blNj
b3BlID0gbFNjb3BlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZlNjb3BlLT5s
ZXZlbCA9IDA7CisgICAgfQorICAgIGZTY29wZS0+cGFyZW50ID0gQ3VycmVudFNjb3BlOworICAg
IEN1cnJlbnRTY29wZSA9IGZTY29wZTsKK30gLy8gUHVzaFNjb3BlCisKKy8qCisgKiBQb3BTY29w
ZSgpCisgKgorICovCisKK1Njb3BlICpQb3BTY29wZSh2b2lkKQoreworICAgIFNjb3BlICpsU2Nv
cGU7CisKKyAgICBsU2NvcGUgPSBDdXJyZW50U2NvcGU7CisgICAgaWYgKEN1cnJlbnRTY29wZSkK
KyAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVudFNjb3BlLT5wYXJlbnQ7CisgICAgcmV0dXJu
IGxTY29wZTsKK30gLy8gUG9wU2NvcGUKKworLyoKKyAqIE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUg
YSBuZXcgc3ltYm9sIG5vZGU7CisgKgorICovCisKK1N5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxv
YyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKQoreworICAg
IFN5bWJvbCAqbFN5bWI7CisgICAgY2hhciAqcGNoOworICAgIGludCBpaTsKKworICAgIGxTeW1i
ID0gKFN5bWJvbCAqKSBtZW1fQWxsb2MoZlNjb3BlLT5wb29sLCBzaXplb2YoU3ltYm9sKSk7Cisg
ICAgbFN5bWItPmxlZnQgPSBOVUxMOworICAgIGxTeW1iLT5yaWdodCA9IE5VTEw7CisgICAgbFN5
bWItPm5leHQgPSBOVUxMOworICAgIGxTeW1iLT5uYW1lID0gbmFtZTsKKyAgICBsU3ltYi0+bG9j
ID0gKmxvYzsKKyAgICBsU3ltYi0+a2luZCA9IGtpbmQ7CisgICAgCisgICAgLy8gQ2xlYXIgdW5p
b24gYXJlYToKKworICAgIHBjaCA9IChjaGFyICopICZsU3ltYi0+ZGV0YWlsczsKKyAgICBmb3Ig
KGlpID0gMDsgaWkgPCBzaXplb2YobFN5bWItPmRldGFpbHMpOyBpaSsrKQorICAgICAgICAqcGNo
KysgPSAwOworICAgIHJldHVybiBsU3ltYjsKK30gLy8gTmV3U3ltYm9sCisKKy8qCisgKiBsQWRk
VG9UcmVlKCkgLSBVc2luZyBhIGJpbmFyeSB0cmVlIGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFz
aWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0aGV5CisgKiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4g
b3JkZXIuICBXZSdsbCBmaXggdGhpcyBsYXRlciAoYnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVy
bikuCisgKi8KKworc3RhdGljIHZvaWQgbEFkZFRvVHJlZShTeW1ib2wgKipmU3ltYm9scywgU3lt
Ym9sICpmU3ltYikKK3sKKyAgICBTeW1ib2wgKmxTeW1iOworICAgIGludCBscmV2LCBmcmV2Owor
CisgICAgbFN5bWIgPSAqZlN5bWJvbHM7CisgICAgaWYgKGxTeW1iKSB7CisgICAgICAgIGZyZXYg
PSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBmU3ltYi0+bmFtZSk7CisgICAgICAgIHdoaWxlIChs
U3ltYikgeworICAgICAgICAgICAgbHJldiA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1i
LT5uYW1lKTsKKyAgICAgICAgICAgIGlmIChscmV2ID09IGZyZXYpIHsKKyAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiR2V0QXRvbVN0cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAobHJldiA+IGZyZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1i
LT5sZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0Owor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbFN5
bWItPmxlZnQgPSBmU3ltYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxTeW1iLT5yaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIg
PSBsU3ltYi0+cmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsU3ltYi0+cmlnaHQgPSBmU3ltYjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmZTeW1ib2xzID0g
ZlN5bWI7CisgICAgfQorfSAvLyBsQWRkVG9UcmVlCisKKworLyoKKyAqIEFkZFN5bWJvbCgpIC0g
QWRkIGEgdmFyaWFibGUsIHR5cGUsIG9yIGZ1bmN0aW9uIG5hbWUgdG8gYSBzY29wZS4KKyAqCisg
Ki8KKworU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGlu
dCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpCit7CisgICAgU3ltYm9sICpsU3ltYjsKKworICAgIGlm
ICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7CisgICAgbFN5bWIgPSBO
ZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0b20sIGtpbmQpOworICAgIGxBZGRUb1RyZWUoJmZTY29w
ZS0+c3ltYm9scywgbFN5bWIpOworICAgIHJldHVybiBsU3ltYjsKK30gLy8gQWRkU3ltYm9sCisK
KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogU3ltYm9sIFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworCisvKgorICogTG9va1VwTG9jYWxTeW1ib2woKQorICoKKyAqLworCitTeW1ib2wg
Kkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKQoreworICAgIFN5bWJv
bCAqbFN5bWI7CisgICAgaW50IHJuYW1lLCByYXRvbTsKKworICAgIHJhdG9tID0gR2V0UmV2ZXJz
ZWRBdG9tKGF0YWJsZSwgYXRvbSk7CisgICAgaWYgKCFmU2NvcGUpCisgICAgICAgIGZTY29wZSA9
IEN1cnJlbnRTY29wZTsKKyAgICBsU3ltYiA9IGZTY29wZS0+c3ltYm9sczsKKyAgICB3aGlsZSAo
bFN5bWIpIHsKKyAgICAgICAgcm5hbWUgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+
bmFtZSk7CisgICAgICAgIGlmIChybmFtZSA9PSByYXRvbSkgeworICAgICAgICAgICAgcmV0dXJu
IGxTeW1iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20p
IHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5yaWdodDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30gLy8gTG9va1VwTG9jYWxT
eW1ib2wKKworLyoKKyAqIExvb2tVcFN5bWJvbCgpCisgKgorICovCisKK1N5bWJvbCAqTG9va1Vw
U3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisK
KyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOworICAgIHdo
aWxlIChmU2NvcGUpIHsKKyAgICAgICAgbFN5bWIgPSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUs
IGF0b20pOworICAgICAgICBpZiAobFN5bWIpCisgICAgICAgICAgICByZXR1cm4gbFN5bWI7Cisg
ICAgICAgIGZTY29wZSA9IGZTY29wZS0+cGFyZW50OworICAgIH0KKyAgICByZXR1cm4gTlVMTDsK
K30gLy8gTG9va1VwU3ltYm9sCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzeW1ib2xzLmgK
Ky8vCisKKyNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkKKyNkZWZpbmUgX19TWU1CT0xTX0ggMQor
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgorCit0eXBlZGVmIGVu
dW0gc3ltYm9sa2luZCB7CisgICBNQUNST19TCit9IHN5bWJvbGtpbmQ7CisKKy8vIFR5cGVkZWZz
IGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1ib2xzLmgiOgorCit0eXBlZGVmIHN0cnVj
dCBTY29wZV9SZWMgU2NvcGU7Cit0eXBlZGVmIHN0cnVjdCBTeW1ib2xfUmVjIFN5bWJvbDsKKwor
dHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgeworICAgIHN0cnVjdCBTeW1ib2xMaXN0X1Jl
YyAqbmV4dDsKKyAgICBTeW1ib2wgKnN5bWI7Cit9IFN5bWJvbExpc3Q7CisKK3N0cnVjdCBTY29w
ZV9SZWMgeworICAgIFNjb3BlICpuZXh0LCAqcHJldjsgICAgIC8vIGRvdWJseS1saW5rZWQgbGlz
dCBvZiBhbGwgc2NvcGVzCisgICAgU2NvcGUgKnBhcmVudDsKKyAgICBTY29wZSAqZnVuU2NvcGU7
ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBvZiBlbmNsb3NpbmcgZnVuY3Rpb24KKyAg
ICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29sIHVzZWQgZm9yIGFsbG9jYXRpb24gaW4g
dGhpcyBzY29wZQorICAgIFN5bWJvbCAqc3ltYm9sczsKKyAgICAKKwlpbnQgbGV2ZWw7ICAgICAg
ICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9IGdsb2JhbHMsIGV0Yy4KKworICAgIC8v
IE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVsIDEpOgorICAgIFN5bWJvbExpc3QgKnBy
b2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9yIHRoaXMgY29tcGlsYXRpb24uCit9Owor
CisKKy8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBiaW5hcnkgdHJlZS4KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAgICAgIC8vIHRvIGdldCBNYWNyb1N5bWJv
bCBkZWYKKworc3RydWN0IFN5bWJvbF9SZWMgeworICAgIFN5bWJvbCAqbGVmdCwgKnJpZ2h0Owor
ICAgIFN5bWJvbCAqbmV4dDsKKyAgICBpbnQgbmFtZTsgICAgICAgLy8gTmFtZSBhdG9tCisgICAg
U291cmNlTG9jIGxvYzsKKyAgICBzeW1ib2xraW5kIGtpbmQ7CisgICAgdW5pb24geworICAgICAg
ICBNYWNyb1N5bWJvbCBtYWM7CisgICAgfSBkZXRhaWxzOworfTsKKworZXh0ZXJuIFNjb3BlICpD
dXJyZW50U2NvcGU7CitleHRlcm4gU2NvcGUgKkdsb2JhbFNjb3BlOworZXh0ZXJuIFNjb3BlICpT
Y29wZUxpc3Q7CisKK1Njb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICopOworI2RlZmlu
ZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2woQ3VycmVudFNjb3BlLT5wb29sKQordm9p
ZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7CitTY29wZSAqUG9wU2NvcGUodm9pZCk7CitTeW1i
b2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5
bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUg
KmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkxvb2tVcExvY2Fs
U3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKK1N5bWJvbCAqTG9va1VwU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKTsKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsK
KworCisjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCisKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJ
RElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBp
bgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1
dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0
aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFz
ZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElB
Citzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlk
ZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5W
SURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVy
IE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRo
ZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRp
c3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRp
b25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91
IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBj
b3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcK
K3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUg
TlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBt
YXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgor
RXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0
cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEg
aGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0
aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhl
ciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVk
LiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRX
QVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF
RCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVS
IEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBF
VkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJ
TkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUg
VVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRI
RQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVP
UlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFC
SUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8v
CisvLyB0b2tlbnMuYworLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUg
ImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xv
YmFscy5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIFByZXByb2Nlc3NvciBhbmQgVG9rZW4gUmVjb3JkZXIgYW5kIFBs
YXliYWNrOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKy8qCisgKiBpZHN0cigpCisgKiBDb3B5IGEgc3RyaW5nIHRvIGEg
bWFsbG9jJ2VkIGJsb2NrIGFuZCBjb252ZXJ0IGl0IGludG8gc29tZXRoaW5nIHN1aXRhYmxlCisg
KiBmb3IgYW4gSUQKKyAqCisgKi8KKworc3RhdGljIGNoYXIgKmlkc3RyKGNvbnN0IGNoYXIgKmZz
dHIsIE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgc2l6ZV90IGxlbjsKKyAgICBjaGFyICpzdHIs
ICp0OworICAgIGNvbnN0IGNoYXIgKmY7CisKKyAgICBsZW4gPSBzdHJsZW4oZnN0cik7CisgICAg
aWYgKCFwb29sKQorICAgICAgICBzdHIgPSAoY2hhciAqKSBtYWxsb2MobGVuICsgMSk7CisgICAg
ZWxzZQorICAgICAgICBzdHIgPSAoY2hhciAqKSBtZW1fQWxsb2MocG9vbCwgbGVuICsgMSk7Cisg
ICAgCisgICAgZm9yIChmPWZzdHIsIHQ9c3RyOyAqZjsgZisrKSB7CisgICAgICAgIGlmIChpc2Fs
bnVtKCpmKSkgKnQrKyA9ICpmOworICAgICAgICBlbHNlIGlmICgqZiA9PSAnLicgfHwgKmYgPT0g
Jy8nKSAqdCsrID0gJ18nOworICAgIH0KKyAgICAqdCA9IDA7CisgICAgcmV0dXJuIHN0cjsKK30g
Ly8gaWRzdHIKKworCisvKgorICogbE5ld0Jsb2NrKCkKKyAqCisgKi8KKworc3RhdGljIFRva2Vu
QmxvY2sgKmxOZXdCbG9jayhUb2tlblN0cmVhbSAqZlRvaywgTWVtb3J5UG9vbCAqcG9vbCkKK3sK
KyAgICBUb2tlbkJsb2NrICpsQmxvY2s7CisKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIGxCbG9j
ayA9IChUb2tlbkJsb2NrICopIG1hbGxvYyhzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOworICAg
IGVsc2UKKyAgICAgICAgbEJsb2NrID0gKFRva2VuQmxvY2sgKikgbWVtX0FsbG9jKHBvb2wsIHNp
emVvZihUb2tlbkJsb2NrKSArIDI1Nik7CisgICAgbEJsb2NrLT5jb3VudCA9IDA7CisgICAgbEJs
b2NrLT5jdXJyZW50ID0gMDsKKyAgICBsQmxvY2stPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBs
QmxvY2sgKyBzaXplb2YoVG9rZW5CbG9jayk7CisgICAgbEJsb2NrLT5tYXggPSAyNTY7CisgICAg
bEJsb2NrLT5uZXh0ID0gTlVMTDsKKyAgICBpZiAoZlRvay0+aGVhZCkgeworICAgICAgICBmVG9r
LT5jdXJyZW50LT5uZXh0ID0gbEJsb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIGZUb2stPmhl
YWQgPSBsQmxvY2s7CisgICAgfQorICAgIGZUb2stPmN1cnJlbnQgPSBsQmxvY2s7CisgICAgcmV0
dXJuIGxCbG9jazsKK30gLy8gbE5ld0Jsb2NrCisKKy8qCisgKiBsQWRkQnl0ZSgpCisgKgorICov
CisKK3N0YXRpYyB2b2lkIGxBZGRCeXRlKFRva2VuU3RyZWFtICpmVG9rLCB1bnNpZ25lZCBjaGFy
IGZWYWwpCit7CisgICAgVG9rZW5CbG9jayAqbEJsb2NrOworICAgIGxCbG9jayA9IGZUb2stPmN1
cnJlbnQ7CisgICAgaWYgKGxCbG9jay0+Y291bnQgPj0gbEJsb2NrLT5tYXgpCisgICAgICAgIGxC
bG9jayA9IGxOZXdCbG9jayhmVG9rLCAwKTsKKyAgICBsQmxvY2stPmRhdGFbbEJsb2NrLT5jb3Vu
dCsrXSA9IGZWYWw7Cit9IC8vIGxBZGRCeXRlCisKKworCisvKgorICogbFJlYWRCeXRlKCkgLSBH
ZXQgdGhlIG5leHQgYnl0ZSBmcm9tIGEgc3RyZWFtLgorICoKKyAqLworCitzdGF0aWMgaW50IGxS
ZWFkQnl0ZShUb2tlblN0cmVhbSAqcFRvaykKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7Cisg
ICAgaW50IGx2YWwgPSAtMTsKKworICAgIGxCbG9jayA9IHBUb2stPmN1cnJlbnQ7CisgICAgaWYg
KGxCbG9jaykgeworICAgICAgICBpZiAobEJsb2NrLT5jdXJyZW50ID49IGxCbG9jay0+Y291bnQp
IHsKKyAgICAgICAgICAgIGxCbG9jayA9IGxCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGlmIChs
QmxvY2spCisgICAgICAgICAgICAgICAgbEJsb2NrLT5jdXJyZW50ID0gMDsKKyAgICAgICAgICAg
IHBUb2stPmN1cnJlbnQgPSBsQmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxCbG9jaykK
KyAgICAgICAgICAgIGx2YWwgPSBsQmxvY2stPmRhdGFbbEJsb2NrLT5jdXJyZW50KytdOworICAg
IH0KKyAgICByZXR1cm4gbHZhbDsKK30gLy8gbFJlYWRCeXRlCisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLyBHbG9iYWwgRnVuY3Rpb25zOi8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qCisgKiBOZXdUb2tlblN0cmVhbSgpCisgKgorICov
CisKK1Rva2VuU3RyZWFtICpOZXdUb2tlblN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQ
b29sICpwb29sKQoreworICAgIFRva2VuU3RyZWFtICpwVG9rOworCisgICAgaWYgKCFwb29sKQor
ICAgICAgICBwVG9rID0gKFRva2VuU3RyZWFtICopIG1hbGxvYyhzaXplb2YoVG9rZW5TdHJlYW0p
KTsKKyAgICBlbHNlCisgICAgICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0qKW1lbV9BbGxvYyhwb29s
LCBzaXplb2YoVG9rZW5TdHJlYW0pKTsKKyAgICBwVG9rLT5uZXh0ID0gTlVMTDsKKyAgICBwVG9r
LT5uYW1lID0gaWRzdHIobmFtZSwgcG9vbCk7CisgICAgcFRvay0+aGVhZCA9IE5VTEw7CisgICAg
cFRvay0+Y3VycmVudCA9IE5VTEw7CisgICAgbE5ld0Jsb2NrKHBUb2ssIHBvb2wpOworICAgIHJl
dHVybiBwVG9rOworfSAvLyBOZXdUb2tlblN0cmVhbQorCisvKgorICogRGVsZXRlVG9rZW5TdHJl
YW0oKQorICoKKyAqLworCit2b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9r
KQoreworICAgIFRva2VuQmxvY2sgKnBCbG9jaywgKm5CbG9jazsKKworICAgIGlmIChwVG9rKSB7
CisgICAgICAgIHBCbG9jayA9IHBUb2stPmhlYWQ7CisgICAgICAgIHdoaWxlIChwQmxvY2spIHsK
KyAgICAgICAgICAgIG5CbG9jayA9IHBCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGZyZWUocEJs
b2NrKTsKKyAgICAgICAgICAgIHBCbG9jayA9IG5CbG9jazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocFRvay0+bmFtZSkKKyAgICAgICAgICAgIGZyZWUocFRvay0+bmFtZSk7CisgICAgICAgIGZy
ZWUocFRvayk7CisgICAgfQorfSAvLyBEZWxldGVUb2tlblN0cmVhbQorCisvKgorICogUmVjb3Jk
VG9rZW4oKSAtIEFkZCBhIHRva2VuIHRvIHRoZSBlbmQgb2YgYSBsaXN0IGZvciBsYXRlciBwbGF5
YmFjayBvciBwcmludG91dC4KKyAqCisgKi8KKwordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVh
bSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjb25zdCBj
aGFyICpzOworICAgIHVuc2lnbmVkIGNoYXIgKnN0cj1OVUxMOworCisgICAgaWYgKHRva2VuID4g
MjU2KQorICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoKHRva2VuICYgMHg3
ZikgKyAweDgwKSk7CisgICAgZWxzZQorICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQg
Y2hhcikodG9rZW4gJiAweDdmKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgIGNhc2UgQ1BQ
X0lERU5USUZJRVI6CisgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgY2FzZSBDUFBf
U1RSQ09OU1RBTlQ6CisgICAgICAgIHMgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KTsKKyAgICAgICAgd2hpbGUgKCpzKQorICAgICAgICAgICAgbEFkZEJ5dGUocFRv
aywgKHVuc2lnbmVkIGNoYXIpICpzKyspOworICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICBjYXNlIENQUF9J
TlRDT05TVEFOVDoKKyAgICAgICAgIHN0cj15eWx2YWxwcC0+c3ltYm9sX25hbWU7CisgICAgICAg
ICB3aGlsZSAoKnN0cil7CisgICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCh1bnNpZ25lZCBjaGFy
KSAqc3RyKTsKKyAgICAgICAgICAgICpzdHIrKzsKKyAgICAgICAgIH0KKyAgICAgICAgIGxBZGRC
eXRlKHBUb2ssIDApOworICAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAgICAgIGxB
ZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSh5eWx2YWxwcC0+c2NfaW50ID8gMSA6IDApKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9IC8vIFJlY29yZFRva2VuCisK
Ky8qCisgKiBSZXdpbmRUb2tlblN0cmVhbSgpIC0gUmVzZXQgYSB0b2tlbiBzdHJlYW0gaW4gcHJl
cGVyYXRpb24gZm9yIHJlYWRpbmcuCisgKgorICovCisKK3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0o
VG9rZW5TdHJlYW0gKnBUb2spCit7CisgICAgaWYgKHBUb2stPmhlYWQpIHsKKyAgICAgICAgcFRv
ay0+Y3VycmVudCA9IHBUb2stPmhlYWQ7CisgICAgICAgIHBUb2stPmN1cnJlbnQtPmN1cnJlbnQg
PSAwOworICAgIH0KK30gLy8gUmV3aW5kVG9rZW5TdHJlYW0KKworLyoKKyAqIFJlYWRUb2tlbigp
IC0gUmVhZCB0aGUgbmV4dCB0b2tlbiBmcm9tIGEgc3RyZWFtLgorICoKKyAqLworCitpbnQgUmVh
ZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBj
aGFyIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKKyAgICBjaGFyIHN0cmlu
Z192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKKyAgICBpbnQgbHRva2VuLCBsZW47CisgICAgY2hh
ciBjaDsKKworICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICBpZiAobHRva2VuID49
IDApIHsKKyAgICAgICAgaWYgKGx0b2tlbiA+IDEyNykKKyAgICAgICAgICAgIGx0b2tlbiArPSAx
Mjg7CisgICAgICAgIHN3aXRjaCAobHRva2VuKSB7CisgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJ
RVI6CisgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgorICAgICAgICAgICAgbGVuID0g
MDsKKyAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgd2hpbGUg
KChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49
ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgfHwKKyAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgewor
ICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAg
ICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xfbmFt
ZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKKyAgICAgICAg
ICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9u
YW1lKTsKKyAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7
CisgICAgICAgICAgICB3aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQorICAgICAg
ICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xFTikKKyAgICAgICAgICAgICAgICAgICAg
c3RyaW5nX3ZhbFtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IDA7
CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCBzdHJpbmdfdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9GTE9B
VENPTlNUQU5UOgorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIGNoID0gbFJlYWRC
eXRlKHBUb2spOworICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKXx8
KGNoPT0nZSd8fGNoPT0nRSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSctJykpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsK
KyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAg
ICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAgICAg
ICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKKyAgICAgICAg
ICAgIHl5bHZhbHBwLT5zY19mdmFsPShmbG9hdClhdG9mKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAg
ICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAg
ICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAg
bGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0g
PSAnXDAnOworICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOworICAgICAgICAgICAgc3Ry
Y3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2
YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBs
UmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbHRva2VuOworICAgIH0KKyAgICByZXR1cm4gRU9GX1NZOworfSAvLyBSZWFkVG9rZW4K
KwordHlwZWRlZiBzdHJ1Y3QgVG9rZW5JbnB1dFNyYyB7CisgICAgSW5wdXRTcmMgICAgICAgICAg
ICBiYXNlOworICAgIFRva2VuU3RyZWFtICAgICAgICAgKnRva2VuczsKKyAgICBpbnQgICAgICAg
ICAgICAgICAgICgqZmluYWwpKENQUFN0cnVjdCAqKTsKK30gVG9rZW5JbnB1dFNyYzsKKworc3Rh
dGljIGludCBzY2FuX3Rva2VuKFRva2VuSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKK3sKKyAgICBpbnQgdG9rZW4gPSBSZWFkVG9rZW4oaW4tPnRva2VucywgeXlsdmFscHApOwor
ICAgIGludCAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7CisgICAgY3BwLT50b2tlbkxvYy0+ZmlsZSA9
IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOworICAgIGNwcC0+dG9rZW5Mb2MtPmxpbmUgPSBjcHAt
PmN1cnJlbnRJbnB1dC0+bGluZTsKKyAgICBpZiAodG9rZW4gPT0gJ1xuJykgeworICAgICAgICBp
bi0+YmFzZS5saW5lKys7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgaWYgKHRv
a2VuID4gMCkgcmV0dXJuIHRva2VuOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2Uu
cHJldjsKKyAgICBmaW5hbCA9IGluLT5maW5hbDsKKyAgICBmcmVlKGluKTsKKyAgICBpZiAoZmlu
YWwgJiYgIWZpbmFsKGNwcCkpIHJldHVybiAtMTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKK30KKworaW50IFJlYWRGcm9t
VG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnRzLCBpbnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0
cnVjdCAqKSkKK3sKKyAgICBUb2tlbklucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoVG9rZW5J
bnB1dFNyYykpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKKyAg
ICBpbi0+YmFzZS5uYW1lID0gbmFtZTsKKyAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50
SW5wdXQ7CisgICAgaW4tPmJhc2Uuc2NhbiA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5cGVw
cCAqKSlzY2FuX3Rva2VuOworICAgIGluLT5iYXNlLmxpbmUgPSAxOworICAgIGluLT50b2tlbnMg
PSB0czsKKyAgICBpbi0+ZmluYWwgPSBmaW5hbDsKKyAgICBSZXdpbmRUb2tlblN0cmVhbSh0cyk7
CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0dXJuIDE7Cit9CisK
K3R5cGVkZWYgc3RydWN0IFVuZ290VG9rZW4geworICAgIElucHV0U3JjICAgIGJhc2U7CisgICAg
aW50ICAgICAgICAgdG9rZW47CisgICAgeXlzdHlwZXBwICAgICBsdmFsOworfSBVbmdvdFRva2Vu
OworCitzdGF0aWMgaW50IHJlZ2V0X3Rva2VuKFVuZ290VG9rZW4gKnQsIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IHQtPnRva2VuOworICAgICp5eWx2YWxwcCA9IHQt
Pmx2YWw7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSB0LT5iYXNlLnByZXY7CisgICAgZnJlZSh0
KTsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK3ZvaWQgVW5nZXRUb2tlbihpbnQgdG9rZW4sIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgVW5nb3RUb2tlbiAqdCA9IG1hbGxvYyhzaXplb2Yo
VW5nb3RUb2tlbikpOworICAgIG1lbXNldCh0LCAwLCBzaXplb2YoVW5nb3RUb2tlbikpOworICAg
IHQtPnRva2VuID0gdG9rZW47CisgICAgdC0+bHZhbCA9ICp5eWx2YWxwcDsKKyAgICB0LT5iYXNl
LnNjYW4gPSAodm9pZCAqKXJlZ2V0X3Rva2VuOworICAgIHQtPmJhc2UucHJldiA9IGNwcC0+Y3Vy
cmVudElucHV0OworICAgIHQtPmJhc2UubmFtZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOwor
ICAgIHQtPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGNwcC0+Y3Vy
cmVudElucHV0ID0gJnQtPmJhc2U7Cit9CisKKwordm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAq
ZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tl
bjsKKyAgICBjaGFyIHN0clsxMDBdOworCisgICAgaWYgKGZwID09IDApIGZwID0gc3Rkb3V0Owor
ICAgIFJld2luZFRva2VuU3RyZWFtKHMpOworICAgIHdoaWxlICgodG9rZW4gPSBSZWFkVG9rZW4o
cywgeXlsdmFscHApKSA+IDApIHsKKyAgICAgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIENQUF9JREVOVElGSUVSOgorICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAg
ICAgICAgICAgIHNwcmludGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX1NU
UkNPTlNUQU5UOgorICAgICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlZzku
NiAiLCB5eWx2YWxwcC0+c2NfZnZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAgICAgICAgICAvL3ByaW50ZigiJWQgIiwgeXlsdmFscHAt
PnNjX2ludCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh0b2tlbiA+PSAxMjcpCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAi
LCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9Cit9CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKy8vIHRva2Vucy5oCisvLworCisjaWYgIWRlZmluZWQoX19U
T0tFTlNfSCkKKyNkZWZpbmUgX19UT0tFTlNfSCAxCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvcGFyc2VyLmgiCisKKyNkZWZpbmUgRU9GX1NZICgtMSkKKwordHlwZWRlZiBzdHJ1
Y3QgVG9rZW5CbG9ja19SZWMgVG9rZW5CbG9jazsKKwordHlwZWRlZiBzdHJ1Y3QgVG9rZW5TdHJl
YW1fUmVjIHsKKyAgICBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjICpuZXh0OworICAgIGNoYXIgKm5h
bWU7CisgICAgVG9rZW5CbG9jayAqaGVhZDsKKyAgICBUb2tlbkJsb2NrICpjdXJyZW50OworfSBU
b2tlblN0cmVhbTsKKworc3RydWN0IFRva2VuQmxvY2tfUmVjIHsKKyAgICBUb2tlbkJsb2NrICpu
ZXh0OworICAgIGludCBjdXJyZW50OworICAgIGludCBjb3VudDsKKyAgICBpbnQgbWF4OworICAg
IHVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCitleHRlcm4gVG9rZW5TdHJlYW0gc3RkbGliX2Nw
cF9zdHJlYW07CisKKworVG9rZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5h
bWUsIE1lbW9yeVBvb2wgKnBvb2wpOwordm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVh
bSAqcFRvayk7IAordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2Vu
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Cit2b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3Ry
ZWFtICpwVG9rKTsKK2ludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKTsKK2ludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rLCBp
bnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSk7Cit2b2lkIFVuZ2V0VG9rZW4oaW50
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNpZiBkZWZpbmVkKENQUENfRU5BQkxFX1RPT0xT
KQorCit2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICosIFRva2VuU3RyZWFtICosIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKTsKKworI2VuZGlmIC8vIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChfX1RPS0VOU19IKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90b29scy9D
T1BZSU5HLmJpc29uCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFDQorCQkgICAgICAg
VmVyc2lvbiAyLCBKdW5lIDE5OTENCisNCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjc1
IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0ENCisgRXZlcnlvbmUgaXMgcGVybWl0
dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzDQorIG9mIHRoaXMgbGlj
ZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLg0KKw0KKwkJCSAg
ICBQcmVhbWJsZQ0KKw0KKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNp
Z25lZCB0byB0YWtlIGF3YXkgeW91cg0KK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4g
IEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorTGljZW5zZSBpcyBpbnRlbmRl
ZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQ0KK3Nv
ZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNl
cnMuICBUaGlzDQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhl
IEZyZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBw
cm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvDQordXNpbmcgaXQuICAoU29tZSBvdGhlciBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQ0KK3RoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBp
dCB0bw0KK3lvdXIgcHJvZ3JhbXMsIHRvby4NCisNCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBz
b2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QNCitwcmljZS4gIE91ciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91
DQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJl
IChhbmQgY2hhcmdlIGZvcg0KK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJl
Y2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdA0KK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlv
dSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0DQoraW4gbmV3IGZy
ZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLg0K
Kw0KKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9u
cyB0aGF0IGZvcmJpZA0KK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNr
IHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4NCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNs
YXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQ0KK2Rpc3RyaWJ1
dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4NCisNCisgIEZv
ciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdo
ZXRoZXINCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRz
IGFsbCB0aGUgcmlnaHRzIHRoYXQNCit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0
IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQ0KK3NvdXJjZSBjb2RlLiAgQW5kIHlv
dSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXINCityaWdodHMu
DQorDQorICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJp
Z2h0IHRoZSBzb2Z0d2FyZSwgYW5kDQorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2gg
Z2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwNCitkaXN0cmlidXRlIGFuZC9vciBt
b2RpZnkgdGhlIHNvZnR3YXJlLg0KKw0KKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVj
dGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4NCit0aGF0IGV2ZXJ5b25lIHVu
ZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQ0KK3NvZnR3
YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFz
c2VkIG9uLCB3ZQ0KK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBo
YXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvDQordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNl
ZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwNCithdXRob3JzJyBy
ZXB1dGF0aW9ucy4NCisNCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5l
ZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlDQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhl
IGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQ0KK3Byb2dyYW0gd2lsbCBpbmRp
dmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUNCitw
cm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xl
YXIgdGhhdCBhbnkNCitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVl
IHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLg0KKw0KKyAgVGhlIHByZWNpc2UgdGVybXMgYW5k
IGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQNCittb2RpZmljYXRpb24g
Zm9sbG93Lg0KKwwNCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KKyAgIFRFUk1T
IEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElP
Tg0KKw0KKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIg
d29yayB3aGljaCBjb250YWlucw0KK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhv
bGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkDQordW5kZXIgdGhlIHRlcm1zIG9mIHRo
aXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LA0KK3JlZmVy
cyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQ
cm9ncmFtIg0KK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3Jr
IHVuZGVyIGNvcHlyaWdodCBsYXc6DQordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5n
IHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwNCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0
aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcg0KK2xhbmd1YWdl
LiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRp
b24gaW4NCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJl
c3NlZCBhcyAieW91Ii4NCisNCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJp
YnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdA0KK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNl
OyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YNCitydW5uaW5nIHRoZSBQ
cm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFt
DQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNl
ZCBvbiB0aGUNCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1
bm5pbmcgdGhlIFByb2dyYW0pLg0KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hh
dCB0aGUgUHJvZ3JhbSBkb2VzLg0KKw0KKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRl
IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzDQorc291cmNlIGNvZGUgYXMgeW91IHJl
Y2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91DQorY29uc3BpY3VvdXNs
eSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQ0K
K2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0
IGFsbCB0aGUNCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUg
YWJzZW5jZSBvZiBhbnkgd2FycmFudHk7DQorYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMg
b2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQ0KK2Fsb25nIHdpdGggdGhlIFBy
b2dyYW0uDQorDQorWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2Yg
dHJhbnNmZXJyaW5nIGEgY29weSwgYW5kDQoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3
YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4NCisNCisgIDIuIFlvdSBt
YXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRp
b24NCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5k
IGNvcHkgYW5kDQorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0
aGUgdGVybXMgb2YgU2VjdGlvbiAxDQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVl
dCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCisNCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhl
IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQorICAgIHN0YXRpbmcg
dGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuDQor
DQorICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3Ig
cHVibGlzaCwgdGhhdCBpbg0KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRl
cml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkNCisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBs
aWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQNCisgICAgcGFydGll
cyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgICBjKSBJZiB0aGUgbW9k
aWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5DQorICAg
IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1
Y2gNCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJp
bnQgb3IgZGlzcGxheSBhbg0KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJp
YXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGENCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8g
d2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlDQorICAgIGEgd2FycmFu
dHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXINCisg
ICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBj
b3B5IG9mIHRoaXMNCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0
c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQNCisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3Vj
aCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbg0KKyAgICB0aGUgUHJvZ3JhbSBp
cyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikNCisMDQorVGhlc2UgcmVx
dWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZg0KK2lk
ZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhl
IFByb2dyYW0sDQorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQg
YW5kIHNlcGFyYXRlIHdvcmtzIGluDQordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFu
ZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQ0KK3NlY3Rpb25zIHdoZW4geW91IGRp
c3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQ0KK2Rpc3RyaWJ1
dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBi
YXNlZA0KK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0
IGJlIG9uIHRoZSB0ZXJtcyBvZg0KK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9y
IG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlDQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0
byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0Lg0KKw0KK1Ro
dXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMg
b3IgY29udGVzdA0KK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7
IHJhdGhlciwgdGhlIGludGVudCBpcyB0bw0KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9s
IHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcg0KK2NvbGxlY3RpdmUgd29ya3MgYmFz
ZWQgb24gdGhlIFByb2dyYW0uDQorDQorSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2Yg
YW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQ0KK3dpdGggdGhlIFByb2dyYW0g
KG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZg0KK2Eg
c3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3
b3JrIHVuZGVyDQordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4NCisNCisgIDMuIFlvdSBtYXkg
Y29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LA0K
K3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVy
IHRoZSB0ZXJtcyBvZg0KK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3Ug
YWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoNCisNCisgICAgYSkgQWNjb21wYW55IGl0IHdp
dGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQ0KKyAgICBzb3Vy
Y2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2Vj
dGlvbnMNCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZv
ciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGIpIEFjY29tcGFueSBpdCB3aXRo
IGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlDQorICAgIHllYXJzLCB0
byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyDQor
ICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg
Y29tcGxldGUNCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5n
IHNvdXJjZSBjb2RlLCB0byBiZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2Yg
U2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQ0KKyAgICBjdXN0b21hcmlseSB1c2Vk
IGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGMpIEFjY29tcGFueSBpdCB3
aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyDQorICAgIHRv
IGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZl
IGlzDQorICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5k
IG9ubHkgaWYgeW91DQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9y
IGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gNCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRo
IFN1YnNlY3Rpb24gYiBhYm92ZS4pDQorDQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVh
bnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcg0KK21ha2luZyBtb2RpZmljYXRp
b25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlDQorY29k
ZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywg
cGx1cyBhbnkNCithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRo
ZSBzY3JpcHRzIHVzZWQgdG8NCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24g
b2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhDQorc3BlY2lhbCBleGNlcHRpb24sIHRo
ZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlDQorYW55dGhpbmcgdGhh
dCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkNCitm
b3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28g
b24pIG9mIHRoZQ0KK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVu
cywgdW5sZXNzIHRoYXQgY29tcG9uZW50DQoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRh
YmxlLg0KKw0KK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlz
IG1hZGUgYnkgb2ZmZXJpbmcNCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFj
ZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50DQorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj
b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzDQorZGlzdHJpYnV0aW9uIG9mIHRoZSBz
b3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90DQorY29tcGVsbGVk
IHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4NCisMDQorICA0
LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhl
IFByb2dyYW0NCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5z
ZS4gIEFueSBhdHRlbXB0DQorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBv
ciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzDQordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxs
eSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLg0KK0hvd2V2ZXIsIHBh
cnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVy
DQordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBz
byBsb25nIGFzIHN1Y2gNCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuDQorDQor
ICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5
b3UgaGF2ZSBub3QNCitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlv
dSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcg0KK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRz
IGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQ0KK3Byb2hpYml0ZWQgYnkgbGF3
IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkNCittb2Rp
Znlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0
aGUNCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vu
c2UgdG8gZG8gc28sIGFuZA0KK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlp
bmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcNCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNl
ZCBvbiBpdC4NCisNCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFt
IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUNCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRv
bWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQ0KK29yaWdpbmFsIGxpY2Vuc29y
IHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8NCit0
aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhl
cg0KK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0
cyBncmFudGVkIGhlcmVpbi4NCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5n
IGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bw0KK3RoaXMgTGljZW5zZS4NCisNCisgIDcu
IElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBv
ZiBwYXRlbnQNCitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1p
dGVkIHRvIHBhdGVudCBpc3N1ZXMpLA0KK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3
aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3INCitvdGhlcndpc2UpIHRoYXQgY29u
dHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90DQorZXhj
dXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5u
b3QNCitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxp
Z2F0aW9ucyB1bmRlciB0aGlzDQorTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxp
Z2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQ0KK21heSBub3QgZGlzdHJpYnV0ZSB0
aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQNCitsaWNlbnNlIHdv
dWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFt
IGJ5DQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5
IHRocm91Z2ggeW91LCB0aGVuDQordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGgg
aXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bw0KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBk
aXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uDQorDQorSWYgYW55IHBvcnRpb24gb2YgdGhpcyBz
ZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyDQorYW55IHBhcnRp
Y3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRl
ZCB0bw0KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFw
cGx5IGluIG90aGVyDQorY2lyY3Vtc3RhbmNlcy4NCisNCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ug
b2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55DQorcGF0ZW50cyBv
ciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBh
bnkNCitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHBy
b3RlY3RpbmcgdGhlDQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlv
biBzeXN0ZW0sIHdoaWNoIGlzDQoraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3Rp
Y2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlDQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0
aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZA0KK3Rocm91Z2ggdGhhdCBzeXN0
ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0DQorc3lzdGVt
OyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMg
d2lsbGluZw0KK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVt
IGFuZCBhIGxpY2Vuc2VlIGNhbm5vdA0KK2ltcG9zZSB0aGF0IGNob2ljZS4NCisNCitUaGlzIHNl
Y3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2
ZWQgdG8NCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4NCisM
DQorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMg
cmVzdHJpY3RlZCBpbg0KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5
IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQ0KK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIg
d2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UNCittYXkgYWRkIGFuIGV4
cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcNCit0
aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlu
IG9yIGFtb25nDQorY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0
aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzDQordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBp
biB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuDQorDQorICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucw0KK29mIHRo
ZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVy
c2lvbnMgd2lsbA0KK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s
IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bw0KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNv
bmNlcm5zLg0KKw0KK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNp
b24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0NCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBv
ZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQ0KK2xhdGVyIHZlcnNp
b24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRp
dGlvbnMNCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3Jh
bSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YNCit0aGlzIExpY2Vuc2UsIHlv
dSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlDQorRm91bmRhdGlvbi4NCisNCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBw
YXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUNCitwcm9ncmFtcyB3aG9zZSBkaXN0
cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yDQor
dG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVk
IGJ5IHRoZSBGcmVlDQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzDQorbWFrZSBleGNlcHRpb25zIGZvciB0aGlz
LiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMNCitvZiBwcmVz
ZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29m
dHdhcmUgYW5kDQorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2Fy
ZSBnZW5lcmFsbHkuDQorDQorCQkJICAgIE5PIFdBUlJBTlRZDQorDQorICAxMS4gQkVDQVVTRSBU
SEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFO
VFkNCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FC
TEUgTEFXLiAgRVhDRVBUIFdIRU4NCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTDQorUFJPVklERSBUSEUgUFJPR1JB
TSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQN
CitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRg0KK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMNCitUTyBUSEUgUVVBTElUWSBBTkQgUEVS
Rk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFDQorUFJPR1JB
TSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBT
RVJWSUNJTkcsDQorUkVQQUlSIE9SIENPUlJFQ1RJT04uDQorDQorICAxMi4gSU4gTk8gRVZFTlQg
VU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5H
DQorV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkg
TU9ESUZZIEFORC9PUg0KK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJP
VkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsDQorSU5DTFVESU5HIEFOWSBHRU5FUkFM
LCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HDQor
T1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5H
IEJVVCBOT1QgTElNSVRFRA0KK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVE
IElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQ0KK1lPVSBPUiBUSElSRCBQQVJUSUVT
IE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSDQor
UFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFDQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLg0KKw0KKwkJICAgICBF
TkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCisMDQorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkg
VGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMNCisNCisgIElmIHlvdSBkZXZlbG9wIGEg
bmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QNCitwb3Nz
aWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0
byBtYWtlIGl0DQorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRl
IGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuDQorDQorICBUbyBkbyBzbywgYXR0YWNoIHRo
ZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdA0KK3RvIGF0
dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0
aXZlbHkNCitjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBz
aG91bGQgaGF2ZSBhdCBsZWFzdA0KK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIg
dG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLg0KKw0KKyAgICA8b25lIGxpbmUgdG8g
Z2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMu
Pg0KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4NCisNCisgICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUNCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1
IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorDQorQWxzbyBhZGQgaW5mb3Jt
YXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwu
DQorDQorSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hv
cnQgbm90aWNlIGxpa2UgdGhpcw0KK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1v
ZGU6DQorDQorICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBu
YW1lIG9mIGF1dGhvcg0KKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8g
V0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuDQorICAgIFRoaXMgaXMgZnJlZSBz
b2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQNCisgICAgdW5k
ZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLg0KKw0KK1Ro
ZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93
IHRoZSBhcHByb3ByaWF0ZQ0KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAg
T2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkNCitiZSBjYWxsZWQgc29tZXRoaW5n
IG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUNCitt
b3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLg0K
Kw0KK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBw
cm9ncmFtbWVyKSBvciB5b3VyDQorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0
IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYNCituZWNlc3NhcnkuICBIZXJlIGlzIGEg
c2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6DQorDQorICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRp
c2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtDQorICBgR25vbW92
aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVz
IEhhY2tlci4NCisNCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQ0KKyAg
VHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UNCisNCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8NCitwcm9w
cmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFy
eSwgeW91IG1heQ0KK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHBy
b3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQ0KK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdo
YXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbA0KK1B1YmxpYyBM
aWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90b29scy9D
T1BZSU5HLmZsZXgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9jb21waWxlci90b29scy9DT1BZSU5HLmZsZXgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzggQEAKK0ZsZXggY2FycmllcyB0aGUgY29weXJpZ2h0IHVzZWQgZm9yIEJTRCBzb2Z0d2Fy
ZSwgc2xpZ2h0bHkgbW9kaWZpZWQNCitiZWNhdXNlIGl0IG9yaWdpbmF0ZWQgYXQgdGhlIExhd3Jl
bmNlIEJlcmtlbGV5IChub3QgTGl2ZXJtb3JlISkgTGFib3JhdG9yeSwNCit3aGljaCBvcGVyYXRl
cyB1bmRlciBhIGNvbnRyYWN0IHdpdGggdGhlIERlcGFydG1lbnQgb2YgRW5lcmd5Og0KKw0KKwlD
b3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv
cm5pYS4NCisJQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisJVGhpcyBjb2RlIGlzIGRlcml2ZWQg
ZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQ0KKwlWZXJuIFBheHNvbi4N
CisNCisJVGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCBoYXMgcmlnaHRzIGluIHRoaXMgd29y
ayBwdXJzdWFudA0KKwl0byBjb250cmFjdCBuby4gREUtQUMwMy03NlNGMDAwOTggYmV0d2VlbiB0
aGUgVW5pdGVkIFN0YXRlcw0KKwlEZXBhcnRtZW50IG9mIEVuZXJneSBhbmQgdGhlIFVuaXZlcnNp
dHkgb2YgQ2FsaWZvcm5pYS4NCisNCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkDQorCXByb3ZpZGVkIHRoYXQ6ICgxKSBzb3Vy
Y2UgZGlzdHJpYnV0aW9ucyByZXRhaW4gdGhpcyBlbnRpcmUNCisJY29weXJpZ2h0IG5vdGljZSBh
bmQgY29tbWVudCwgYW5kICgyKSBkaXN0cmlidXRpb25zIGluY2x1ZGluZw0KKwliaW5hcmllcyBk
aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAgYGBUaGlzIHByb2R1Y3QNCisJ
aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju
aWEsDQorCUJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzJycgaW4gdGhlIGRvY3VtZW50YXRp
b24gb3Igb3RoZXINCisJbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBh
bmQgaW4gYWxsIGFkdmVydGlzaW5nDQorCW1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y
IHVzZSBvZiB0aGlzIHNvZnR3YXJlLiAgTmVpdGhlciB0aGUNCisJbmFtZSBvZiB0aGUgVW5pdmVy
c2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlDQorCXVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQor
CXdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKwlUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUg0K
KwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg
SU1QTElFRA0KKwlXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSDQorCVBVUlBPU0UuDQorDQorVGhpcyBiYXNpY2FsbHkgc2F5cyAiZG8gd2hh
dGV2ZXIgeW91IHBsZWFzZSB3aXRoIHRoaXMgc29mdHdhcmUgZXhjZXB0DQorcmVtb3ZlIHRoaXMg
bm90aWNlIG9yIHRha2UgYWR2YW50YWdlIG9mIHRoZSBVbml2ZXJzaXR5J3MgKG9yIHRoZSBmbGV4
DQorYXV0aG9ycycpIG5hbWUiLg0KKw0KK05vdGUgdGhhdCB0aGUgImZsZXguc2tsIiBzY2FubmVy
IHNrZWxldG9uIGNhcnJpZXMgbm8gY29weXJpZ2h0IG5vdGljZS4NCitZb3UgYXJlIGZyZWUgdG8g
ZG8gd2hhdGV2ZXIgeW91IHBsZWFzZSB3aXRoIHNjYW5uZXJzIGdlbmVyYXRlZCB1c2luZyBmbGV4
Ow0KK2ZvciB0aGVtLCB5b3UgYXJlIG5vdCBldmVuIGJvdW5kIGJ5IHRoZSBhYm92ZSBjb3B5cmln
aHQuDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvY29tcGlsZXIv
dG9vbHMvUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2NvbXBpbGVyL3Rvb2xzL1JFQURNRQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3Rvb2xzL1JFQURNRQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNCBAQAorVGhlIHN0YW5kYWxvbmUgQmlzb24gYW5kIEZsZXggd2luMzIg
ZXhlY3V0YWJsZXMNCit3ZXJlIGNyZWF0ZWQgYnkgV2lsYnVyIFN0cmVldHQgYW5kIGNhbiBiZSBv
YnRhaW5lZCBmcm9tOg0KK2h0dHA6Ly91c2VycGFnZXMubW9ubW91dGguY29tL353c3RyZWV0dC9s
ZXgteWFjYy9sZXgteWFjYy5odG1sDQorDQorQmlzb24gdmVyc2lvbiAxLjI0Og0KK1NlZSBDT1BZ
SU5HLmJpc29uIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLg0KK1RoZSBvcmlnaW5hbCBzb3VyY2Ug
ZGlzdHJpYnV0aW9uIGZvciBiaXNvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5n
IGxvY2F0aW9uOg0KK2h0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5jb20vZmlsZXMvYmlz
b24uemlwDQorDQorRmxleCB2ZXJzaW9uIDIuNS4yDQorU2VlIENPUFlJTkcuZmxleCBmb3IgbGlj
ZW5zZSBpbmZvcm1hdGlvbi4NCitUaGUgb3JpZ2luYWwgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3Ig
ZmxleCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOg0KK2h0dHA6
Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5jb20vZmlsZXMvZmxleC56aXANCisNCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90b29scy9iaXNvbi5o
YWlyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9j
b21waWxlci90b29scy9iaXNvbi5oYWlyeQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMzNCBAQAorCitleHRlcm4gaW50IHRpbWVjbG9jazsKKworCitpbnQg
eXllcnJvcjsJCS8qICBZeWVycm9yIGFuZCB5eWNvc3QgYXJlIHNldCBieSBndWFyZHMuCSovCitp
bnQgeXljb3N0OwkJLyogIElmIHl5ZXJyb3IgaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSBieSBh
CSovCisJCQkvKiAgZ3VhcmQsIHRoZSByZWR1Y3Rpb24gd2l0aCB3aGljaCB0aGUgZ3VhcmQJKi8K
KwkJCS8qICBpcyBhc3NvY2lhdGVkIGlzIG5vdCBwZXJmb3JtZWQsIGFuZCB0aGUJKi8KKwkJCS8q
ICBlcnJvciByZWNvdmVyeSBtZWNoYW5pc20gaXMgaW52b2tlZC4JKi8KKwkJCS8qICBZeWNvc3Qg
aW5kaWNhdGVzIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcJKi8KKwkJCS8qICB0aGUgcmVkdWN0aW9u
IGdpdmVuIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQkqLworCQkJLyogIHN5bWJvbHMuCQkJCQkqLwor
CisKKy8qICBZWU1BWERFUFRIIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3Rh
dGUgYW5kIHZhbHVlCSovCisvKiAgc3RhY2tzLgkJCQkJCQkJKi8KKworI2lmbmRlZglZWU1BWERF
UFRICisjZGVmaW5lCVlZTUFYREVQVEgJNTAwCisjZW5kaWYKKworLyogIFlZTUFYUlVMRVMgbXVz
dCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbnVtYmVyIG9mIHJ1bGVzIHRoYXQJKi8KKy8q
ICBjb3VsZCBiZSBwbGFjZWQgaW4gdGhlIHJ1bGUgcXVldWUuICBUaGF0IG51bWJlciBjb3VsZCBi
ZSBkZXRlcm1pbmVkCSovCisvKiAgZnJvbSB0aGUgZ3JhbW1hciBhbmQgdGhlIHNpemUgb2YgdGhl
IHN0YWNrLCBidXQsIGFzIHlldCwgaXQgaXMgbm90LgkqLworCisjaWZuZGVmCVlZTUFYUlVMRVMK
KyNkZWZpbmUJWVlNQVhSVUxFUwkxMDAKKyNlbmRpZgorCisjaWZuZGVmCVlZTUFYQkFDS1VQCisj
ZGVmaW5lIFlZTUFYQkFDS1VQCTEwMAorI2VuZGlmCisKKworc2hvcnQJeXlzc1tZWU1BWERFUFRI
XTsJLyogIHRoZSBzdGF0ZSBzdGFjawkJCSovCitZWVNUWVBFCXl5dnNbWVlNQVhERVBUSF07CS8q
ICB0aGUgc2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCitZWUxUWVBFIHl5bHNbWVlNQVhERVBUSF07
CS8qICB0aGUgbG9jYXRpb24gc3RhY2sJCQkqLworc2hvcnQJeXlycVtZWU1BWFJVTEVTXTsJLyog
IHRoZSBydWxlIHF1ZXVlCQkJKi8KK2ludAl5eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3lt
Ym9sCQkqLworCitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRo
ZQkJKi8KKwkJCQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKK1lZU1RZUEUgeXl0dmFsOwkJ
CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgZm9yIHRoZSBzdGF0ZQkqLworCQkJCS8qICBhdCB0aGUg
dG9wIG9mIHRoZSBzdGF0ZSBzdGFjay4JKi8KKworWVlTVFlQRSB5eXZhbDsJCQkvKiAgdGhlIHZh
cmlhYmxlIHVzZWQgdG8gcmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0
aGUgYWN0aW9uCSovCisJCQkJLyogIHJvdXRpbmVzCQkJCSovCisKK1lZTFRZUEUgeXlsbG9jOwkJ
LyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJ
CSovCisKK1lZTFRZUEUgeXl0bG9jOwkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBzdGF0ZSBh
dCB0aGUJKi8KKwkJCQkvKiAgdG9wIG9mIHRoZSBzdGF0ZSBzdGFjawkJKi8KKworCitpbnQJeXlu
dW5sZXhlZDsKK3Nob3J0CXl5dW5jaGFyW1lZTUFYQkFDS1VQXTsKK1lZU1RZUEUJeXl1bnZhbFtZ
WU1BWEJBQ0tVUF07CitZWUxUWVBFIHl5dW5sb2NbWVlNQVhCQUNLVVBdOworCitzaG9ydCAqeXln
c3NwOwkJCS8qICBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhdGUJKi8KKwkJCQkvKiAg
c3RhY2s7IG9ubHkgc2V0IGR1cmluZyBlcnJvcgkqLworCQkJCS8qICByZWNvdmVyeS4JCQkJKi8K
KworWVlTVFlQRSAqeXlndnNwOwkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSB2YWx1
ZQkqLworCQkJCS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9yCSovCisJCQkJLyogIHJl
Y292ZXJ5LgkJCQkqLworCitZWUxUWVBFICp5eWdsc3A7CQkvKiAgYSBwb2ludGVyIHRvIHRoZSB0
b3Agb2YgdGhlCQkqLworCQkJCS8qICBsb2NhdGlvbiBzdGFjazsgb25seSBzZXQgZHVyaW5nCSov
CisJCQkJLyogIGVycm9yIHJlY292ZXJ5LgkJCSovCisKKworLyogIFl5Z2V0IGlzIGFuIGludGVy
ZmFjZSBiZXR3ZWVuIHRoZSBwYXJzZXIgYW5kIHRoZSBsZXhpY2FsIGFuYWx5emVyLgkqLworLyog
IEl0IGlzIGNvc3RseSB0byBwcm92aWRlIHN1Y2ggYW4gaW50ZXJmYWNlLCBidXQgaXQgYXZvaWRz
IHJlcXVpcmluZwkqLworLyogIHRoZSBsZXhpY2FsIGFuYWx5emVyIHRvIGJlIGFibGUgdG8gYmFj
ayB1cCB0aGUgc2Nhbi4JCSovCisKK3l5Z2V0KCkKK3sKKyAgaWYgKHl5bnVubGV4ZWQgPiAwKQor
ICAgIHsKKyAgICAgIHl5bnVubGV4ZWQtLTsKKyAgICAgIHl5Y2hhciA9IHl5dW5jaGFyW3l5bnVu
bGV4ZWRdOworICAgICAgeXlsdmFsID0geXl1bnZhbFt5eW51bmxleGVkXTsKKyAgICAgIHl5bGxv
YyA9IHl5dW5sb2NbeXludW5sZXhlZF07CisgICAgfQorICBlbHNlIGlmICh5eWNoYXIgPD0gMCkK
KyAgICB5eWNoYXIgPSAwOworICBlbHNlCisgICAgeworICAgICAgeXljaGFyID0geXlsZXgoKTsK
KyAgICAgIGlmICh5eWNoYXIgPCAwKQorCXl5Y2hhciA9IDA7CisgICAgICBlbHNlIHl5Y2hhciA9
IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisgICAgfQorfQorCisKKworeXl1bmxleChjaHIsIHZhbCwg
bG9jKQoraW50IGNocjsKK1lZU1RZUEUgdmFsOworWVlMVFlQRSBsb2M7Cit7CisgIHl5dW5jaGFy
W3l5bnVubGV4ZWRdID0gY2hyOworICB5eXVudmFsW3l5bnVubGV4ZWRdID0gdmFsOworICB5eXVu
bG9jW3l5bnVubGV4ZWRdID0gbG9jOworICB5eW51bmxleGVkKys7Cit9CisKKworCit5eXJlc3Rv
cmUoZmlyc3QsIGxhc3QpCityZWdpc3RlciBzaG9ydCAqZmlyc3Q7CityZWdpc3RlciBzaG9ydCAq
bGFzdDsKK3sKKyAgcmVnaXN0ZXIgc2hvcnQgKnNzcDsKKyAgcmVnaXN0ZXIgc2hvcnQgKnJwOwor
ICByZWdpc3RlciBpbnQgc3ltYm9sOworICByZWdpc3RlciBpbnQgc3RhdGU7CisgIHJlZ2lzdGVy
IGludCB0dmFsc2F2ZWQ7CisKKyAgc3NwID0geXlnc3NwOworICB5eXVubGV4KHl5Y2hhciwgeXls
dmFsLCB5eWxsb2MpOworCisgIHR2YWxzYXZlZCA9IDA7CisgIHdoaWxlIChmaXJzdCAhPSBsYXN0
KQorICAgIHsKKyAgICAgIHN5bWJvbCA9IHl5c3Rvc1sqc3NwXTsKKyAgICAgIGlmIChzeW1ib2wg
PCBZWU5UQkFTRSkKKwl7CisJICB5eXVubGV4KHN5bWJvbCwgeXl0dmFsLCB5eXRsb2MpOworCSAg
dHZhbHNhdmVkID0gMTsKKwkgIHNzcC0tOworCX0KKworICAgICAgc3NwLS07CisKKyAgICAgIGlm
IChmaXJzdCA9PSB5eXJxKQorCWZpcnN0ID0geXlycSArIFlZTUFYUlVMRVM7CisKKyAgICAgIGZp
cnN0LS07CisKKyAgICAgIGZvciAocnAgPSB5eXJocyArIHl5cHJoc1sqZmlyc3RdOyBzeW1ib2wg
PSAqcnA7IHJwKyspCisJeworCSAgaWYgKHN5bWJvbCA8IFlZTlRCQVNFKQorCSAgICBzdGF0ZSA9
IHl5dGFibGVbeXlwYWN0Wypzc3BdICsgc3ltYm9sXTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAg
IHN0YXRlID0geXlwZ290b1tzeW1ib2wgLSBZWU5UQkFTRV0gKyAqc3NwOworCisJICAgICAgaWYg
KHN0YXRlID49IDAgJiYgc3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbc3RhdGVdID09ICpzc3Ap
CisJCXN0YXRlID0geXl0YWJsZVtzdGF0ZV07CisJICAgICAgZWxzZQorCQlzdGF0ZSA9IHl5ZGVm
Z290b1tzeW1ib2wgLSBZWU5UQkFTRV07CisJICAgIH0KKworCSAgKisrc3NwID0gc3RhdGU7CisJ
fQorICAgIH0KKworICBpZiAoICEgdHZhbHNhdmVkICYmIHNzcCA+IHl5c3MpCisgICAgeworICAg
ICAgeXl1bmxleCh5eXN0b3NbKnNzcF0sIHl5dHZhbCwgeXl0bG9jKTsKKyAgICAgIHNzcC0tOwor
ICAgIH0KKworICB5eWdzc3AgPSBzc3A7Cit9CisKKworCitpbnQKK3l5cGFyc2UoKQoreworICBy
ZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hv
cnQgKnl5c3NwOworICByZWdpc3RlciBzaG9ydCAqeXlycTA7CisgIHJlZ2lzdGVyIHNob3J0ICp5
eXB0cjsKKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisKKyAgaW50IHl5bGVuOworICBZWUxU
WVBFICp5eWxzcDsKKyAgc2hvcnQgKnl5cnExOworICBzaG9ydCAqeXlycTI7CisKKyAgeXlzdGF0
ZSA9IDA7CisgIHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2cyAtIDE7CisgIHl5bHNw
ID0geXlscyAtIDE7CisgIHl5cnEwID0geXlycTsKKyAgeXlycTEgPSB5eXJxMDsKKyAgeXlycTIg
PSB5eXJxMDsKKworICB5eWNoYXIgPSB5eWxleCgpOworICBpZiAoeXljaGFyIDwgMCkKKyAgICB5
eWNoYXIgPSAwOworICBlbHNlIHl5Y2hhciA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKK3l5bmV3
c3RhdGU6CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyBZWU1BWERFUFRIIC0gMSkKKyAgICB7Cisg
ICAgICB5eWFib3J0KCJQYXJzZXIgU3RhY2sgT3ZlcmZsb3ciKTsKKyAgICAgIFlZQUJPUlQ7Cisg
ICAgfQorCisgICorK3l5c3NwID0geXlzdGF0ZTsKKworeXlyZXN1bWU6CisKKyAgeXluID0geXlw
YWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsK
KworICB5eW4gKz0geXljaGFyOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXlj
aGVja1t5eW5dICE9IHl5Y2hhcikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRh
YmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIHl5biA9IC15eW47CisgICAg
ICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5
eWVycmxhYjsKKworICB5eXN0YXRlID0geXluOworCisgIHl5cHRyID0geXlycTI7CisgIHdoaWxl
ICh5eXB0ciAhPSB5eXJxMSkKKyAgICB7CisgICAgICB5eW4gPSAqeXlwdHIrKzsKKyAgICAgIHl5
bGVuID0geXlyMlt5eW5dOworICAgICAgeXl2c3AgLT0geXlsZW47CisgICAgICB5eWxzcCAtPSB5
eWxlbjsKKworICAgICAgeXlndWFyZCh5eW4sIHl5dnNwLCB5eWxzcCk7CisgICAgICBpZiAoeXll
cnJvcikKKwlnb3RvIHl5c2VtZXJyOworCisgICAgICB5eWFjdGlvbih5eW4sIHl5dnNwLCB5eWxz
cCk7CisgICAgICAqKyt5eXZzcCA9IHl5dmFsOworCisgICAgICB5eWxzcCsrOworICAgICAgaWYg
KHl5bGVuID09IDApCisJeworCSAgeXlsc3AtPnRpbWVzdGFtcCA9IHRpbWVjbG9jazsKKwkgIHl5
bHNwLT5maXJzdF9saW5lID0geXl0bG9jLmZpcnN0X2xpbmU7CisJICB5eWxzcC0+Zmlyc3RfY29s
dW1uID0geXl0bG9jLmZpcnN0X2NvbHVtbjsKKwkgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3At
MSktPmxhc3RfbGluZTsKKwkgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9j
b2x1bW47CisJICB5eWxzcC0+dGV4dCA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5bHNw
LT5sYXN0X2xpbmUgPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfbGluZTsKKwkgIHl5bHNwLT5sYXN0
X2NvbHVtbiA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9jb2x1bW47CisJfQorCSAgCisgICAgICBp
ZiAoeXlwdHIgPT0geXlycSArIFlZTUFYUlVMRVMpCisgICAgICAgIHl5cHRyID0geXlycTsKKyAg
ICB9CisKKyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICB5eXJx
MiA9IHl5cHRyOworICB5eXJxMSA9IHl5cnEwOworCisgICorK3l5dnNwID0geXl0dmFsOworICAq
Kyt5eWxzcCA9IHl5dGxvYzsKKyAgeXl0dmFsID0geXlsdmFsOworICB5eXRsb2MgPSB5eWxsb2M7
CisgIHl5Z2V0KCk7CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWRlZmF1bHQ6CisKKyAgeXlu
ID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFi
OworCit5eXJlZHVjZToKKworICAqeXlycTArKyA9IHl5bjsKKworICBpZiAoeXlycTAgPT0geXly
cSArIFlZTUFYUlVMRVMpCisgICAgeXlycTAgPSB5eXJxOworCisgIGlmICh5eXJxMCA9PSB5eXJx
MikKKyAgICB7CisgICAgICB5eWFib3J0KCJQYXJzZXIgUnVsZSBRdWV1ZSBPdmVyZmxvdyIpOwor
ICAgICAgWVlBQk9SVDsKKyAgICB9CisKKyAgeXlzc3AgLT0geXlyMlt5eW5dOworICB5eW4gPSB5
eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3Nw
OworICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlz
dGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNl
CisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5l
d3N0YXRlOworCit5eXNlbWVycjoKKyAgKi0teXlwdHIgPSB5eW47CisgIHl5cnEyID0geXlwdHI7
CisgIHl5dnNwICs9IHl5cjJbeXluXTsKKworeXllcnJsYWI6CisKKyAgeXlnc3NwID0geXlzc3A7
CisgIHl5Z3ZzcCA9IHl5dnNwOworICB5eWdsc3AgPSB5eWxzcDsKKyAgeXlyZXN0b3JlKHl5cnEw
LCB5eXJxMik7CisgIHl5cmVjb3ZlcigpOworICB5eXN0YXRlID0gKnl5Z3NzcDsKKyAgeXlzc3Ag
PSB5eWdzc3A7CisgIHl5dnNwID0geXlndnNwOworICB5eXJxMCA9IHl5cnE7CisgIHl5cnExID0g
eXlycTA7CisgIHl5cnEyID0geXlycTA7CisgIGdvdG8geXlyZXN1bWU7Cit9CisKKyQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29u
LnNpbXBsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGUJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGUJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjk5IEBACisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGls
ZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworCisvKiBTa2VsZXRv
biBvdXRwdXQgcGFyc2VyIGZvciBiaXNvbiwKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwg
MTk5MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJ
bmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICovCisKKy8qIEFz
IGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBp
bnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxl
IHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2Yg
Qmlzb24uICAqLworCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9h
bGxvY2EKKyNlbHNlIC8qIG5vdCBfX0dOVUNfXyAqLworI2lmIEhBVkVfQUxMT0NBX0gKKyNpbmNs
dWRlIDxhbGxvY2EuaD4KKyNlbHNlIC8qIG5vdCBIQVZFX0FMTE9DQV9IICovCisjaWZkZWYgX0FJ
WAorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAvKiBub3QgX0FJWCAqLworY2hhciAqYWxsb2NhICgp
OworI2VuZGlmIC8qIG5vdCBfQUlYICovCisjZW5kaWYgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8K
KyNlbmRpZiAvKiBub3QgX19HTlVDX18gKi8KKworZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKiBz
KTsKKworI2lmbmRlZiBhbGxvY2EKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19i
dWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90IEdOVSBDLiAgKi8KKyNpZiAoIWRlZmluZWQgKF9f
U1REQ19fKSAmJiBkZWZpbmVkIChzcGFyYykpIHx8IGRlZmluZWQgKF9fc3BhcmNfXykgfHwgZGVm
aW5lZCAoX19zcGFyYykgfHwgZGVmaW5lZCAoX19zZ2kpCisjaW5jbHVkZSA8YWxsb2NhLmg+Cisj
ZWxzZSAvKiBub3Qgc3BhcmMgKi8KKyNpZiAoZGVmaW5lZCAoTVNET1MpICYmICFkZWZpbmVkIChf
X1RVUkJPQ19fKSkgfHwgZGVmaW5lZCAoV0lOMzIpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxz
ZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNpZiBkZWZpbmVkKF9BSVgpCisjaW5j
bHVkZSA8bWFsbG9jLmg+CisgI3ByYWdtYSBhbGxvY2EKKyNlbHNlIC8qIG5vdCBNU0RPUywgX19U
VVJCT0NfXywgb3IgX0FJWCAqLworI2lmZGVmIF9faHB1eAorI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKK3ZvaWQgKmFsbG9jYSAodW5zaWduZWQgaW50KTsKK307CisjZWxzZSAvKiBu
b3QgX19jcGx1c3BsdXMgKi8KK3ZvaWQgKmFsbG9jYSAoKTsKKyNlbmRpZiAvKiBub3QgX19jcGx1
c3BsdXMgKi8KKyNlbmRpZiAvKiBfX2hwdXggKi8KKyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2Vu
ZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2VuZGlmIC8qIG5vdCBzcGFyYy4g
ICovCisjZW5kaWYgLyogbm90IEdOVSBDLiAgKi8KKyNlbmRpZiAvKiBhbGxvY2Egbm90IGRlZmlu
ZWQuICAqLworCisvKiBUaGlzIGlzIHRoZSBwYXJzZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50
byBlYWNoIGJpc29uIHBhcnNlcgorICB3aGVuIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0
aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisgIEl0IHdhcyB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorICB1c2Vk
IHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBzcGVjaWZpZWQuICAqLworCisvKiBOb3RlOiB0aGVy
ZSBtdXN0IGJlIG9ubHkgb25lIGRvbGxhciBzaWduIGluIHRoaXMgZmlsZS4KKyAgIEl0IGlzIHJl
cGxhY2VkIGJ5IHRoZSBsaXN0IG9mIGFjdGlvbnMsIGVhY2ggYWN0aW9uCisgICBhcyBvbmUgY2Fz
ZSBvZiB0aGUgc3dpdGNoLiAgKi8KKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAw
KQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJ
CS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5lIFlZQUNDRVBUCXJldHVybigwKQorI2RlZmlu
ZSBZWUFCT1JUIAlyZXR1cm4oMSkKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKy8q
IExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLgorICAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkgdG8gZWFzZSB0aGUKKyAgIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFu
aW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBs
YW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisjZGVmaW5lIFlZRkFJTAkJZ290byB5
eWVycmxhYgorI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisjZGVmaW5l
IFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAorZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZ
WUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7IHl5Y2hhciA9ICh0b2tlbiksIHl5bHZh
bCA9ICh2YWx1ZSk7CQkJXAorICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJ
CQlcCisgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJ
XAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAgIHsgeXllcnJvciAoInN5bnRh
eCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsgWVlFUlJPUjsgfQlcCit3aGlsZSAoMCkKKworI2Rl
ZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworI2lmbmRlZiBZWVBVUkUK
KyNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKyNlbmRpZgorCisjaWZkZWYgWVlQVVJFCisjaWZkZWYg
WVlMU1BfTkVFREVECisjaWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5
eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4
KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYKKyNlbHNlIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8K
KyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgWVlMRVhf
UEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCkKKyNlbmRpZgorI2Vu
ZGlmIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNlbmRpZgorCisvKiBJZiBub25yZWVudHJhbnQs
IGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZSAqLworCisjaWZuZGVmIFlZUFVSRQorCitpbnQJ
eXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KK1lZU1RZUEUJeXlsdmFsOwkJ
CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3lt
Ym9sCQkJKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxv
Y2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisj
ZW5kaWYKKworaW50IHl5bmVycnM7CQkJLyogIG51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFy
ICAgICAgICovCisjZW5kaWYgIC8qIG5vdCBZWVBVUkUgKi8KKworI2lmIFlZREVCVUcgIT0gMAor
aW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KKy8q
IFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXplZCwgaXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBw
YXJzZXJzCisgICBmcm9tIGNvZXhpc3RpbmcuICAqLworI2VuZGlmCisKKy8qICBZWUlOSVRERVBU
SCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCisK
KyNpZm5kZWYJWVlJTklUREVQVEgKKyNkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKwor
LyogIFlZTUFYREVQVEggaXMgdGhlIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRv
CisgICAgKGVmZmVjdGl2ZSBvbmx5IGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0
aG9kIGlzIHVzZWQpLiAgKi8KKworI2lmIFlZTUFYREVQVEggPT0gMAorI3VuZGVmIFlZTUFYREVQ
VEgKKyNlbmRpZgorCisjaWZuZGVmIFlZTUFYREVQVEgKKyNkZWZpbmUgWVlNQVhERVBUSCAxMDAw
MAorI2VuZGlmCisKKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAg
Ki8KKyNpZmRlZiBfX0dOVUNfXworaW50IHl5cGFyc2UgKHZvaWQpOworI2VuZGlmCisMCisjaWYg
X19HTlVDX18gPiAxCQkvKiBHTlUgQyBhbmQgR05VIEMrKyBkZWZpbmUgdGhpcy4gICovCisjZGVm
aW5lIF9feXlfbWVtY3B5KEZST00sVE8sQ09VTlQpCV9fYnVpbHRpbl9tZW1jcHkoVE8sRlJPTSxD
T1VOVCkKKyNlbHNlCQkJCS8qIG5vdCBHTlUgQyBvciBDKysgKi8KKyNpZm5kZWYgX19jcGx1c3Bs
dXMKKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRp
YmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBz
eXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5X21lbWNweSAoZnJvbSwgdG8sIGNvdW50KQor
ICAgICBjaGFyICpmcm9tOworICAgICBjaGFyICp0bzsKKyAgICAgc2l6ZV90IGNvdW50Oworewor
ICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICBy
ZWdpc3RlciBzaXplX3QgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0Kysg
PSAqZisrOworfQorCisjZWxzZSAvKiBfX2NwbHVzcGx1cyAqLworCisvKiBUaGlzIGlzIHRoZSBt
b3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxh
YmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZv
aWQKK19feXlfbWVtY3B5IChjaGFyICpmcm9tLCBjaGFyICp0bywgc2l6ZV90IGNvdW50KQorewor
ICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICBy
ZWdpc3RlciBzaXplX3QgaSA9IGNvdW50OworCisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0Kysg
PSAqZisrOworfQorCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZ
UEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gYmUgcGFzc2VkCisgICBp
bnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGhhdmUgdHlwZSB2b2lkICouCisgICBJ
dCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorICAgR3JhbW1hciBhY3Rpb25z
IGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5IGNhc3RpbmcgaXQKKyAgIHRvIHRoZSBwcm9wZXIg
cG9pbnRlciB0eXBlLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZm5kZWYgWVlQQVJT
RV9QQVJBTV9ERUNMCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BB
UkFNOworI2VuZGlmIAorI2Vsc2UKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBB
UlNFX1BBUkFNX0RFQ0wKKyNlbmRpZgorCitleHRlcm4gWVlfREVDTDsKKworaW50Cit5eXBhcnNl
KFlZUEFSU0VfUEFSQU1fREVDTCBZWVBBUlNFX1BBUkFNKSB7CisgIHJlZ2lzdGVyIGludCB5eXN0
YXRlOworICByZWdpc3RlciBpbnQgeXluOworICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJl
Z2lzdGVyIFlZU1RZUEUgKnl5dnNwOworICBpbnQgeXllcnJzdGF0dXM7CS8qICBudW1iZXIgb2Yg
dG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkICovCisgIGludCB5
eWNoYXIxID0gMDsJCS8qICBsb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0
ZWQpIHRva2VuIG51bWJlciAqLworCisgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsJLyogIHRo
ZSBzdGF0ZSBzdGFjawkJCSovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwkvKiAgdGhl
IHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLworCisgIHNob3J0ICp5eXNzID0geXlzc2E7CQkvKiAg
cmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzICovCisgIFlZU1RZUEUg
Knl5dnMgPSB5eXZzYTsJLyogIHRvIGFsbG93IHl5b3ZlcmZsb3cgdG8gcmVhbGxvY2F0ZSB0aGVt
IGVsc2V3aGVyZSAqLworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsc2FbWVlJ
TklUREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0YWNrCQkJKi8KKyAgWVlMVFlQRSAqeXlscyA9
IHl5bHNhOworICBZWUxUWVBFICp5eWxzcDsKKworI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNw
LS0sIHl5c3NwLS0sIHl5bHNwLS0pCisjZWxzZQorI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNw
LS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBzaXplX3QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBU
SDsKKworI2lmZGVmIFlZUFVSRQorICBpbnQgeXljaGFyOworICBZWVNUWVBFIHl5bHZhbDsKKyAg
aW50IHl5bmVycnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIFlZTFRZUEUgeXlsbG9jOworI2Vu
ZGlmCisjZW5kaWYKKworICBZWVNUWVBFIHl5dmFsOwkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRv
IHJldHVybgkJKi8KKwkJCQkvKiAgc2VtYW50aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLwor
CQkJCS8qICByb3V0aW5lcwkJCQkqLworCisgIGludCB5eWxlbjsKKworI2lmIFlZREVCVUcgIT0g
MAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4i
KTsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVy
cnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFk
LiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUg
ZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0
YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVk
IGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzIC0g
MTsKKyAgeXl2c3AgPSB5eXZzOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCA9IHl5bHM7
CisjZW5kaWYKKworLyogUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3Rh
dGUgIC4gICovCisvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUg
YW5kIGxvY2F0aW9uIHN0YWNrcworICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5n
IGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KK3l5bmV3c3RhdGU6CisKKyAgKisr
eXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAx
KQorICAgIHsKKyAgICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBz
dGFjayAqLworICAgICAgLyogVXNlIGNvcGllcyBvZiB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9u
J3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvIG1lbW9yeS4gKi8KKyAgICAgIFlZU1RZUEUgKnl5
dnMxID0geXl2czsKKyAgICAgIHNob3J0ICp5eXNzMSA9IHl5c3M7CisjaWZkZWYgWVlMU1BfTkVF
REVECisgICAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7CisjZW5kaWYKKworICAgICAgLyogR2V0
IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4g
ICovCisgICAgICBzaXplX3Qgc2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92
ZXJmbG93CisgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZgorCSB0aGUgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMu
ICAqLworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgLyogVGhpcyB1c2VkIHRvIGJlIGEgY29u
ZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLAorCSBidXQgdGhhdCBtaWdo
dCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKyAgICAgIHl5b3Zl
cmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2Yg
KCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlsczEs
IHNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAmeXlzdGFja3NpemUpOworI2Vsc2UKKyAgICAg
IHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBz
aXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAm
eXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAgIHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMx
OworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IHl5bHMxOworI2VuZGlmCisjZWxz
ZSAvKiBubyB5eW92ZXJmbG93ICovCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24g
d2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorCXsKKwkgIHl5
ZXJyb3IoInBhcnNlciBzdGFjayBvdmVyZmxvdyIpOworCSAgcmV0dXJuIDI7CisJfQorICAgICAg
eXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisJ
eXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworICAgICAgeXlzcyA9IChzaG9ydCAqKSBhbGxvY2Eg
KHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hh
ciAqKXl5c3MxLCAoY2hhciAqKXl5c3MsIHNpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAg
eXl2cyA9IChZWVNUWVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkp
OworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXl2czEsIChjaGFyICopeXl2cywgc2l6ZSAq
IHNpemVvZiAoKnl5dnNwKSk7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0gKFlZ
TFRZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisgICAgICBf
X3l5X21lbWNweSAoKGNoYXIgKil5eWxzMSwgKGNoYXIgKil5eWxzLCBzaXplICogc2l6ZW9mICgq
eXlsc3ApKTsKKyNlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlz
c3AgPSB5eXNzICsgc2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyBzaXplIC0gMTsKKyNp
ZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHNwID0geXlscyArIHNpemUgLSAxOworI2VuZGlm
CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJy
LCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWRcbiIsIHl5c3RhY2tzaXplKTsKKyNlbmRpZgor
CisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOwor
ICAgIH0KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKTsKKyNlbmRpZgorCisgIGdvdG8g
eXliYWNrdXA7CisgeXliYWNrdXA6CisKKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2
ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3
ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTog
Ki8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVu
Y2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Cisg
IGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93
biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICov
CisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFs
aWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZ
KQorICAgIHsKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYo
c3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKTsKKyNlbmRpZgorICAgICAgeXljaGFyID0gWVlM
RVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXlj
aGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJ
LyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7
CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8K
KworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIs
ICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKworI2lmIFlZREVCVUcgIT0g
MAorICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAgZnByaW50ZiAoc3RkZXJyLCAiTmV4dCB0b2tl
biBpcyAlZCAoJXMiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworCSAgLyogR2l2ZSB0aGUg
aW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8gcHJpbnQgdGhlIHByZWNpc2UgbWVhbmluZworCSAg
ICAgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIgZGVidWdnaW5nIGluZm8uICAqLworI2lmZGVmIFlZ
UFJJTlQKKwkgIFlZUFJJTlQgKHN0ZGVyciwgeXljaGFyLCB5eWx2YWwpOworI2VuZGlmCisJICBm
cHJpbnRmIChzdGRlcnIsICIpXG4iKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgeXluICs9IHl5
Y2hhcjE7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0g
eXljaGFyMSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisK
KyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRl
LgorICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15eW4gaXMgcnVsZSBudW1iZXIuCisgICAgIFBv
c2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0YXRlLgorICAgICAgIE5ldyBzdGF0ZSBpcyBm
aW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisgICAgICAganVzdCByZXR1cm4g
c3VjY2Vzcy4KKyAgICAgMCwgb3IgbW9zdCBuZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLwor
CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8g
eXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9
CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKyAgaWYgKHl5biA9
PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9r
ZW4uICAqLworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYo
c3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQgKCVzKSwgIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hh
cjFdKTsKKyNlbmRpZgorCisgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5s
ZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0g
WVlFTVBUWTsKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAg
KisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBz
aW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yIHN0YXR1cy4gICovCisgIGlm
ICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMtLTsKKworICB5eXN0YXRlID0geXluOworICBnb3Rv
IHl5bmV3c3RhdGU7CisKKy8qIERvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQg
c3RhdGUuICAqLworeXlkZWZhdWx0OgorCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBp
ZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworLyogRG8gYSByZWR1Y3Rpb24uICB5
eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworeXlyZWR1Y2U6
CisgIHl5bGVuID0geXlyMlt5eW5dOworICBpZiAoeXlsZW4gPiAwKQorICAgIHl5dmFsID0geXl2
c3BbMS15eWxlbl07IC8qIGltcGxlbWVudCBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb24gKi8K
KworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBpbnQgaTsK
KworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVkdWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQp
LCAiLAorCSAgICAgICB5eW4sIHl5cmxpbmVbeXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBz
eW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICAgZm9yIChp
ID0geXlwcmhzW3l5bl07IHl5cmhzW2ldID4gMDsgaSsrKQorCWZwcmludGYgKHN0ZGVyciwgIiVz
ICIsIHl5dG5hbWVbeXlyaHNbaV1dKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAtPiAlc1xu
IiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9CisjZW5kaWYKKworJCAgIC8qIHRoZSBhY3Rp
b24gZmlsZSBnZXRzIGNvcGllZCBpbiBpbiBwbGFjZSBvZiB0aGlzIGRvbGxhcnNpZ24gKi8KKyAg
eXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09IHl5bGVuOworI2lmZGVmIFlZTFNQX05FRURFRAor
ICB5eWxzcCAtPSB5eWxlbjsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRl
YnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRm
IChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3Nw
KQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3Rk
ZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisjaWZk
ZWYgWVlMU1BfTkVFREVECisgIHl5bHNwKys7CisgIGlmICh5eWxlbiA9PSAwKQorICAgIHsKKyAg
ICAgIHl5bHNwLT5maXJzdF9saW5lID0geXlsbG9jLmZpcnN0X2xpbmU7CisgICAgICB5eWxzcC0+
Zmlyc3RfY29sdW1uID0geXlsbG9jLmZpcnN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT5sYXN0X2xp
bmUgPSAoeXlsc3AtMSktPmxhc3RfbGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5
eWxzcC0xKS0+bGFzdF9jb2x1bW47CisgICAgICB5eWxzcC0+dGV4dCA9IDA7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFz
dF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0
X2NvbHVtbjsKKyAgICB9CisjZW5kaWYKKworICAvKiBOb3cgInNoaWZ0IiB0aGUgcmVzdWx0IG9m
IHRoZSByZWR1Y3Rpb24uCisgICAgIERldGVybWluZSB3aGF0IHN0YXRlIHRoYXQgZ29lcyB0bywK
KyAgICAgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvCisgICAgIGFuZCB0aGUg
cnVsZSBudW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5
c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRCQVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUg
Pj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkK
KyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5
eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworeXllcnJs
YWI6ICAgLyogaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgKi8KKworICBpZiAoISB5eWVycnN0YXR1
cykKKyAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9y
dCB0aGlzIGVycm9yLiAgKi8KKyAgICB7CisgICAgICArK3l5bmVycnM7CisKKyNpZmRlZiBZWUVS
Uk9SX1ZFUkJPU0UKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICAgICAgaWYgKHl5
biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisJeworCSAgaW50IHNpemUgPSAwOworCSAgY2hh
ciAqbXNnOworCSAgaW50IHgsIGNvdW50OworCisJICBjb3VudCA9IDA7CisJICAvKiBTdGFydCBY
IGF0IC15eW4gaWYgbmVjIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4geXljaGVjay4gICov
CisJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkgICAgICAgeCA8IChzaXplb2Yo
eXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgrKykKKwkgICAgaWYgKHl5Y2hlY2tbeCArIHl5
bl0gPT0geCkKKwkgICAgICBzaXplICs9IHN0cmxlbih5eXRuYW1lW3hdKSArIDE1LCBjb3VudCsr
OworCSAgbXNnID0gKGNoYXIgKikgbWFsbG9jKHNpemUgKyAxNSk7CisJICBpZiAobXNnICE9IDAp
CisJICAgIHsKKwkgICAgICBzdHJjcHkobXNnLCAicGFyc2UgZXJyb3IiKTsKKworCSAgICAgIGlm
IChjb3VudCA8IDUpCisJCXsKKwkJICBjb3VudCA9IDA7CisJCSAgZm9yICh4ID0gKHl5biA8IDAg
PyAteXluIDogMCk7CisJCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFy
ICopKTsgeCsrKQorCQkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkJICAgICAgewor
CQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/ICIsIGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOwor
CQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7CisJCQlzdHJjYXQobXNnLCAiJyIpOworCQkJY291
bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAgICAgeXllcnJvcihtc2cpOworCSAgICAgIGZyZWUo
bXNnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB5eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28g
dmlydHVhbCBtZW1vcnkgZXhjZWVkZWQiKTsKKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogWVlF
UlJPUl9WRVJCT1NFICovCisJeXllcnJvcigicGFyc2UgZXJyb3IiKTsKKyAgICB9CisKKyAgZ290
byB5eWVycmxhYjE7Cit5eWVycmxhYjE6ICAgLyogaGVyZSBvbiBlcnJvciByYWlzZWQgZXhwbGlj
aXRseSBieSBhbiBhY3Rpb24gKi8KKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7Cisg
ICAgICAvKiBpZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2Vu
IGFmdGVyIGFuIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgLyogcmV0dXJuIGZhaWx1
cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisgICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorCVlZ
QUJPUlQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYo
c3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAlZCAoJXMpLlxuIiwgeXljaGFyLCB5eXRuYW1lW3l5
Y2hhcjFdKTsKKyNlbmRpZgorCisgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAv
KiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbgorICAgICBhZnRlciBzaGlm
dGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLworCisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2gg
cmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5k
bGU7CisKK3l5ZXJyZGVmYXVsdDogIC8qIGN1cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhp
bmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRva2VuLiAqLworCisjaWYgMAorICAvKiBUaGlzIGlz
IHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKyAg
ICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8q
IElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBv
cCBpdC4qLworICBpZiAoeXluKSBnb3RvIHl5ZGVmYXVsdDsKKyNlbmRpZgorCit5eWVycnBvcDog
ICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBl
cnJvciB0b2tlbiAqLworCisgIGlmICh5eXNzcCA9PSB5eXNzKSBZWUFCT1JUOworICB5eXZzcC0t
OworICB5eXN0YXRlID0gKi0teXlzc3A7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwLS07
CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAg
ICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6
IHN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50
ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIp
OworICAgIH0KKyNlbmRpZgorCit5eWVycmhhbmRsZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0
ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5
biArPSBZWVRFUlJPUjsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tb
eXluXSAhPSBZWVRFUlJPUikKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gPSB5eXRh
YmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFH
KQorCWdvdG8geXllcnJwb3A7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVj
ZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJwb3A7CisKKyAg
aWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisjaWYgWVlERUJVRyAhPSAwCisg
IGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4s
ICIpOworI2VuZGlmCisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVE
CisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290
byB5eW5ld3N0YXRlOworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbmZpZy5jcHA6
IEltcGxlbWVudHMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBmb3JtYXQs
IHR5cGUKKy8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMgRUdMQ29u
ZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCisvLyBbRUdMIDEuNF0gc2VjdGlvbiAzLjQg
cGFnZSAxNS4KKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIGVnbAoreworQ29uZmlnOjpDb25maWco
RDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1h
eEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhT
dGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCisgICAgOiBtRGlzcGxheU1vZGUoZGlz
cGxheU1vZGUpLCBtUmVuZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCksIG1EZXB0
aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxlKG11bHRpU2Ft
cGxlKQoreworICAgIHNldChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heEludGVydmFsLCBy
ZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUpOworfQor
Cit2b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQoreworICAgIG1CdWZmZXJTaXplID0gMDsKKyAg
ICBtUmVkU2l6ZSA9IDA7CisgICAgbUdyZWVuU2l6ZSA9IDA7CisgICAgbUJsdWVTaXplID0gMDsK
KyAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7CisgICAgbUFscGhhU2l6ZSA9IDA7CisgICAgbUFscGhh
TWFza1NpemUgPSAwOworICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRfQ0FSRTsKKyAg
ICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db2xvckJ1ZmZlclR5
cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RPTlRfQ0FSRTsK
KyAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db25mb3JtYW50ID0gMDsKKyAg
ICBtRGVwdGhTaXplID0gMDsKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2ZVBpeG1h
cCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1NYXhQQnVmZmVy
SGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1heFN3YXBJbnRl
cnZhbCA9IEVHTF9ET05UX0NBUkU7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NB
UkU7CisgICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1OYXRpdmVW
aXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9DQVJFOworICAg
IG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOworICAgIG1TYW1wbGVCdWZmZXJz
ID0gMDsKKyAgICBtU2FtcGxlcyA9IDA7CisgICAgbVN0ZW5jaWxTaXplID0gMDsKKyAgICBtU3Vy
ZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKKyAgICBtVHJhbnNwYXJlbnRUeXBlID0gRUdMX05P
TkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFu
c3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFuc3BhcmVudEJsdWVW
YWx1ZSA9IEVHTF9ET05UX0NBUkU7Cit9CisKK3ZvaWQgQ29uZmlnOjpzZXQoRDNERElTUExBWU1P
REUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBE
M0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0
LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgc3dpdGNoIChyZW5kZXJUYXJnZXRGb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIG1CdWZmZXJTaXpl
ID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7Cisg
ICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBtQnVmZmVyU2l6
ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDEwOworICAgICAgICBtR3JlZW5TaXplID0gMTA7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDEwOworICAgICAgICBtQWxwaGFTaXplID0gMjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgbUJ1ZmZlclNp
emUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSA4OworICAgICAgICBtR3JlZW5TaXplID0gODsK
KyAgICAgICAgbUJsdWVTaXplID0gODsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDg7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBtQnVmZmVyU2l6ZSA9
IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUgPSA2OworICAg
ICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAx
NjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAg
ICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIG1CdWZmZXJTaXplID0gMzI7
CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDg7CisgICAgICAg
IG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0
cyBzaG91bGQgbm90IGJlIHZhbGlkCisgICAgfQorCisgICAgbUx1bWluYW5jZVNpemUgPSAwOwor
ICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9GQUxT
RTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7CisgICAgbUNvbG9yQnVmZmVy
VHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIG1Db25maWdDYXZlYXQgPSAoZGlzcGxheU1vZGUu
Rm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9TTE9XX0NPTkZJ
RzsKKyAgICBtQ29uZmlnSUQgPSAwOworICAgIG1Db25mb3JtYW50ID0gRUdMX09QRU5HTF9FUzJf
QklUOworCisgICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCisgICAgeworLy8gICAgY2Fz
ZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMTY7CisvLyAgICAg
IG1TdGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDMy
OgorICAgICAgICBtRGVwdGhTaXplID0gMzI7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAgIG1EZXB0aFNp
emUgPSAxNTsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBt
U3RlbmNpbFNpemUgPSA4OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4
OgorICAgICAgICBtRGVwdGhTaXplID0gMjQ7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAgbURlcHRo
U2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSA0OworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDE2OworICAgICAgICBt
U3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRDNERk1UX0QzMkZf
TE9DS0FCTEU6CisvLyAgICAgIG1EZXB0aFNpemUgPSAzMjsKKy8vICAgICAgbVN0ZW5jaWxTaXpl
ID0gMDsKKy8vICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6CisvLyAgICAg
IG1EZXB0aFNpemUgPSAyNDsKKy8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKKy8vICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IG1MZXZlbCA9IDA7CisgICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7CisgICAgbU1h
eFBCdWZmZXJXaWR0aCA9IDA7CisgICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOworICAgIG1NYXhQ
QnVmZmVyUGl4ZWxzID0gMDsKKyAgICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50ZXJ2YWw7Cisg
ICAgbU1pblN3YXBJbnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIG1OYXRpdmVSZW5kZXJhYmxl
ID0gRUdMX0ZBTFNFOworICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3Vh
bFR5cGUgPSAwOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKKyAg
ICBtU2FtcGxlQnVmZmVycyA9IG11bHRpU2FtcGxlID8gMSA6IDA7CisgICAgbVNhbXBsZXMgPSBt
dWx0aVNhbXBsZTsKKyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQgfCBFR0xfV0lO
RE9XX0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7CisgICAgbVRyYW5zcGFy
ZW50VHlwZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gMDsKKyAgICBt
VHJhbnNwYXJlbnRHcmVlblZhbHVlID0gMDsKKyAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSAw
OworfQorCitFR0xDb25maWcgQ29uZmlnOjpnZXRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVy
biAoRUdMQ29uZmlnKShzaXplX3QpbUNvbmZpZ0lEOworfQorCitTb3J0Q29uZmlnOjpTb3J0Q29u
ZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKKyAgICA6IG1XYW50UmVkKGZhbHNlKSwgbVdh
bnRHcmVlbihmYWxzZSksIG1XYW50Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFsc2UpLCBtV2Fu
dEx1bWluYW5jZShmYWxzZSkKK3sKKyAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhhdHRyaWJM
aXN0KTsKK30KKwordm9pZCBTb3J0Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhjb25z
dCBFR0xpbnQgKmF0dHJpYkxpc3QpCit7CisgICAgLy8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdl
IDI0CisgICAgLy8gU29ydGluZyBydWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNv
bG9yIGJpdHMsIG5vdCBjb25zaWRlcmluZworICAgIC8vIGNvbXBvbmVudHMgdGhhdCBhcmUgMCBv
ciBkb24ndC1jYXJlLgorICAgIGZvciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0cmliTGlzdDsg
YXR0clswXSAhPSBFR0xfTk9ORTsgYXR0ciArPSAyKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJb
MV0gIT0gMCAmJiBhdHRyWzFdICE9IEVHTF9ET05UX0NBUkUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoYXR0clswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfUkVEX1NJWkU6ICAgICAgIG1XYW50UmVkID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0cnVlOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50QWxwaGEgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6IG1XYW50
THVtaW5hbmNlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0VHTGludCBTb3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25m
aWcgJmNvbmZpZykgY29uc3QKK3sKKyAgICBFR0xpbnQgdG90YWwgPSAwOworCisgICAgaWYgKG1X
YW50UmVkKSAgICAgICB0b3RhbCArPSBjb25maWcubVJlZFNpemU7CisgICAgaWYgKG1XYW50R3Jl
ZW4pICAgICB0b3RhbCArPSBjb25maWcubUdyZWVuU2l6ZTsKKyAgICBpZiAobVdhbnRCbHVlKSAg
ICAgIHRvdGFsICs9IGNvbmZpZy5tQmx1ZVNpemU7CisgICAgaWYgKG1XYW50QWxwaGEpICAgICB0
b3RhbCArPSBjb25maWcubUFscGhhU2l6ZTsKKyAgICBpZiAobVdhbnRMdW1pbmFuY2UpIHRvdGFs
ICs9IGNvbmZpZy5tTHVtaW5hbmNlU2l6ZTsKKworICAgIHJldHVybiB0b3RhbDsKK30KKworYm9v
bCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmlnICp5
KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMpKCp4LCAqeSk7Cit9CisKK2Jvb2wgU29ydENv
bmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkgY29uc3QK
K3sKKyAgICAjZGVmaW5lIFNPUlQoYXR0cmlidXRlKSAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKHguYXR0cmlidXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAgICAgIFwKKyAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHJldHVybiB4LmF0dHJpYnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwKKyAgICAgICAg
fQorCisgICAgTUVUQV9BU1NFUlQoRUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcgJiYgRUdMX1NM
T1dfQ09ORklHIDwgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRyk7CisgICAgU09SVChtQ29uZmln
Q2F2ZWF0KTsKKworICAgIE1FVEFfQVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdMX0xVTUlOQU5D
RV9CVUZGRVIpOworICAgIFNPUlQobUNvbG9yQnVmZmVyVHlwZSk7CisKKyAgICAvLyBCeSBsYXJn
ZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcgdGhvc2UgdGhh
dCBhcmUgcmVxdWVzdGVkIHRvIGJlID4gMC4KKyAgICBFR0xpbnQgeENvbXBvbmVudHNTaXplID0g
d2FudGVkQ29tcG9uZW50c1NpemUoeCk7CisgICAgRUdMaW50IHlDb21wb25lbnRzU2l6ZSA9IHdh
bnRlZENvbXBvbmVudHNTaXplKHkpOworICAgIGlmICh4Q29tcG9uZW50c1NpemUgIT0geUNvbXBv
bmVudHNTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6ZSA+IHlDb21w
b25lbnRzU2l6ZTsKKyAgICB9CisKKyAgICBTT1JUKG1CdWZmZXJTaXplKTsKKyAgICBTT1JUKG1T
YW1wbGVCdWZmZXJzKTsKKyAgICBTT1JUKG1TYW1wbGVzKTsKKyAgICBTT1JUKG1EZXB0aFNpemUp
OworICAgIFNPUlQobVN0ZW5jaWxTaXplKTsKKyAgICBTT1JUKG1BbHBoYU1hc2tTaXplKTsKKyAg
ICBTT1JUKG1OYXRpdmVWaXN1YWxUeXBlKTsKKyAgICBTT1JUKG1Db25maWdJRCk7CisKKyAgICAj
dW5kZWYgU09SVAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBXZSdkIGxpa2UgdG8gdXNl
IFNvcnRDb25maWcgdG8gYWxzbyBlbGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3MuCisvLyBUaGlz
IHdvcmtzIGFzIGxvbmcgYXMgd2UgbmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRoIGRpZmZlcmVu
dCBwZXItUkdCLWNvbXBvbmVudCBsYXlvdXRzLAorLy8gYnV0IHRoZSBzYW1lIHRvdGFsLgorLy8g
NTU1MSBhbmQgNTY1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZmZXJlbnQuCisv
LyA1NTUxIGFuZCA1NTUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUgaXMgZGlmZmVy
ZW50LgorY29uc3QgRUdMaW50IENvbmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQoreworICAgIEVH
TF9SRURfU0laRSwgMSwKKyAgICBFR0xfR1JFRU5fU0laRSwgMSwKKyAgICBFR0xfQkxVRV9TSVpF
LCAxLAorICAgIEVHTF9MVU1JTkFOQ0VfU0laRSwgMSwKKyAgICAvLyBCVVQgTk9UIEFMUEhBCisg
ICAgRUdMX05PTkUKK307CisKK0NvbmZpZ1NldDo6Q29uZmlnU2V0KCkKKyAgICA6IG1TZXQoU29y
dENvbmZpZyhtU29ydEF0dHJpYnMpKQoreworfQorCit2b2lkIENvbmZpZ1NldDo6YWRkKEQzRERJ
U1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4
U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVw
dGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgQ29uZmlnIGNvbmZp
ZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRh
cmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSk7CisKKyAgICBtU2V0
Lmluc2VydChjb25maWcpOworfQorCitzaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVNldC5zaXplKCk7Cit9CisKK2Jvb2wgQ29uZmlnU2V0OjpnZXRDb25maWdz
KEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29u
ZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgdmVjdG9yPGNvbnN0IENvbmZpZyo+
IHBhc3NlZDsKKyAgICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7CisKKyAgICBmb3IgKEl0
ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZp
ZysrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAgIGNvbnN0IEVH
TGludCAqYXR0cmlidXRlID0gYXR0cmliTGlzdDsKKworICAgICAgICB3aGlsZSAoYXR0cmlidXRl
WzBdICE9IEVHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0
ZVswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6
ICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0FM
UEhBX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXplID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJsdWVT
aXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25m
aWctPm1HcmVlblNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgIG1h
dGNoID0gY29uZmlnLT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAg
ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfU1RFTkNJTF9T
SVpFOiAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBhdHRyaWJ1
dGVbMV07ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmlnQ2F2ZWF0
ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNv
bmZpZ0lEID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBj
b25maWctPm1MZXZlbCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAg
IG1hdGNoID0gY29uZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZ
UEU6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0cmlidXRl
WzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfU0FNUExF
UzogICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlQnVm
ZmVycyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWct
Pm1TdXJmYWNlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1UcmFuc3BhcmVudFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6
ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmlidXRlWzFd
OyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9H
UkVFTl9WQUxVRTogICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJB
TlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFJlZFZh
bHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmluZFRv
VGV4dHVyZVJHQiA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUJpbmRUb1RleHR1cmVSR0JBID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0Vf
U0laRTogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0gYXR0cmli
dXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
QUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1hc2tTaXpl
ID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29s
b3JCdWZmZXJUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRjaCA9IChj
b25maWctPm1SZW5kZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAg
bWF0Y2ggPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAg
ICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVbMV0pID09
IGF0dHJpYnV0ZVsxXTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFtYXRjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhc3NlZC5wdXNoX2JhY2soJipj
b25maWcpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3MpCisgICAgeworICAg
ICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25maWcoYXR0cmli
TGlzdCkpOworCisgICAgICAgIEVHTGludCBpbmRleDsKKyAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGludD4ocGFzc2Vk
LnNpemUoKSk7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZ3NbaW5kZXhd
ID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICAqbnVt
Q29uZmlnID0gaW5kZXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpudW1Db25m
aWcgPSBwYXNzZWQuc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjb25z
dCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSkKK3sK
KyAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQu
ZW5kKCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZy0+Z2V0SGFuZGxlKCkg
PT0gY29uZmlnSGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJigqY29uZmln
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML0NvbmZpZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9Db25maWcu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xp
YkVHTC9Db25maWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIENvbmZpZy5oOiBEZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVz
Y3JpYmluZyB0aGUgZm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNl
LiBJbXBsZW1lbnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VH
TCAxLjRdIHNlY3Rpb24gMy40IHBhZ2UgMTUuCisKKyNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8K
KyNkZWZpbmUgSU5DTFVERV9DT05GSUdfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxF
R0wvZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxh
eTsKKworY2xhc3MgQ29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBDb25maWcoRDNERElTUExBWU1P
REUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50
ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5j
aWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7CisKKyAgICB2b2lkIHNldERlZmF1bHRzKCk7
CisgICAgdm9pZCBzZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2Fw
SW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRG
b3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7
CisgICAgRUdMQ29uZmlnIGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgY29uc3QgRDNERElTUExB
WU1PREUgbURpc3BsYXlNb2RlOworICAgIGNvbnN0IEQzREZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9y
bWF0OworICAgIGNvbnN0IEQzREZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIGNvbnN0
IEVHTGludCBtTXVsdGlTYW1wbGU7CisKKyAgICBFR0xpbnQgbUJ1ZmZlclNpemU7ICAgICAgICAg
ICAgICAvLyBEZXB0aCBvZiB0aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1SZWRTaXplOyAg
ICAgICAgICAgICAgICAgLy8gQml0cyBvZiBSZWQgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVH
TGludCBtR3JlZW5TaXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgR3JlZW4gaW4gdGhlIGNv
bG9yIGJ1ZmZlcgorICAgIEVHTGludCBtQmx1ZVNpemU7ICAgICAgICAgICAgICAgIC8vIEJpdHMg
b2YgQmx1ZSBpbiB0aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1MdW1pbmFuY2VTaXplOyAg
ICAgICAgICAgLy8gQml0cyBvZiBMdW1pbmFuY2UgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVH
TGludCBtQWxwaGFTaXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgaW4gdGhlIGNv
bG9yIGJ1ZmZlcgorICAgIEVHTGludCBtQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgIC8vIEJpdHMg
b2YgQWxwaGEgTWFzayBpbiB0aGUgbWFzayBidWZmZXIKKyAgICBFR0xCb29sZWFuIG1CaW5kVG9U
ZXh0dXJlUkdCOyAgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQiB0ZXh0dXJlcy4KKyAgICBF
R0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCQTsgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJH
QkEgdGV4dHVyZXMuCisgICAgRUdMZW51bSBtQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgLy8gQ29s
b3IgYnVmZmVyIHR5cGUKKyAgICBFR0xlbnVtIG1Db25maWdDYXZlYXQ7ICAgICAgICAgICAvLyBB
bnkgY2F2ZWF0cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICBFR0xpbnQgbUNvbmZpZ0lEOyAg
ICAgICAgICAgICAgICAvLyBVbmlxdWUgRUdMQ29uZmlnIGlkZW50aWZpZXIKKyAgICBFR0xpbnQg
bUNvbmZvcm1hbnQ7ICAgICAgICAgICAgICAvLyBXaGV0aGVyIGNvbnRleHRzIGNyZWF0ZWQgd2l0
aCB0aGlzIGNvbmZpZyBhcmUgY29uZm9ybWFudAorICAgIEVHTGludCBtRGVwdGhTaXplOyAgICAg
ICAgICAgICAgIC8vIEJpdHMgb2YgWiBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgRUdMaW50IG1M
ZXZlbDsgICAgICAgICAgICAgICAgICAgLy8gRnJhbWUgYnVmZmVyIGxldmVsCisgICAgRUdMQm9v
bGVhbiBtTWF0Y2hOYXRpdmVQaXhtYXA7ICAgLy8gTWF0Y2ggdGhlIG5hdGl2ZSBwaXhtYXAgZm9y
bWF0CisgICAgRUdMaW50IG1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICAgLy8gTWF4aW11bSB3aWR0
aCBvZiBwYnVmZmVyCisgICAgRUdMaW50IG1NYXhQQnVmZmVySGVpZ2h0OyAgICAgICAgLy8gTWF4
aW11bSBoZWlnaHQgb2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlclBpeGVsczsgICAg
ICAgIC8vIE1heGltdW0gc2l6ZSBvZiBwYnVmZmVyCisgICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2
YWw7ICAgICAgICAgLy8gTWF4aW11bSBzd2FwIGludGVydmFsCisgICAgRUdMaW50IG1NaW5Td2Fw
SW50ZXJ2YWw7ICAgICAgICAgLy8gTWluaW11bSBzd2FwIGludGVydmFsCisgICAgRUdMQm9vbGVh
biBtTmF0aXZlUmVuZGVyYWJsZTsgICAgLy8gRUdMX1RSVUUgaWYgbmF0aXZlIHJlbmRlcmluZyBB
UElzIGNhbiByZW5kZXIgdG8gc3VyZmFjZQorICAgIEVHTGludCBtTmF0aXZlVmlzdWFsSUQ7ICAg
ICAgICAgIC8vIEhhbmRsZSBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB2aXN1YWwKKyAgICBFR0xp
bnQgbU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAgICAvLyBOYXRpdmUgdmlzdWFsIHR5cGUgb2YgdGhl
IGFzc29jaWF0ZWQgdmlzdWFsCisgICAgRUdMaW50IG1SZW5kZXJhYmxlVHlwZTsgICAgICAgICAg
Ly8gV2hpY2ggY2xpZW50IHJlbmRlcmluZyBBUElzIGFyZSBzdXBwb3J0ZWQuCisgICAgRUdMaW50
IG1TYW1wbGVCdWZmZXJzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIG11bHRpc2FtcGxlIGJ1ZmZl
cnMKKyAgICBFR0xpbnQgbVNhbXBsZXM7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2Ygc2Ft
cGxlcyBwZXIgcGl4ZWwKKyAgICBFR0xpbnQgbVN0ZW5jaWxTaXplOyAgICAgICAgICAgICAvLyBC
aXRzIG9mIFN0ZW5jaWwgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgRUdMaW50IG1TdXJmYWNl
VHlwZTsgICAgICAgICAgICAgLy8gV2hpY2ggdHlwZXMgb2YgRUdMIHN1cmZhY2VzIGFyZSBzdXBw
b3J0ZWQuCisgICAgRUdMZW51bSBtVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgLy8gVHlwZSBvZiB0
cmFuc3BhcmVuY3kgc3VwcG9ydGVkCisgICAgRUdMaW50IG1UcmFuc3BhcmVudFJlZFZhbHVlOyAg
ICAgLy8gVHJhbnNwYXJlbnQgcmVkIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEdyZWVu
VmFsdWU7ICAgLy8gVHJhbnNwYXJlbnQgZ3JlZW4gdmFsdWUKKyAgICBFR0xpbnQgbVRyYW5zcGFy
ZW50Qmx1ZVZhbHVlOyAgICAvLyBUcmFuc3BhcmVudCBibHVlIHZhbHVlCit9OworCisvLyBGdW5j
dGlvbiBvYmplY3QgdXNlZCBieSBTVEwgc29ydGluZyByb3V0aW5lcyBmb3Igb3JkZXJpbmcgQ29u
ZmlncyBhY2NvcmRpbmcgdG8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0LgorY2xhc3MgU29y
dENvbmZpZworeworICBwdWJsaWM6CisgICAgZXhwbGljaXQgU29ydENvbmZpZyhjb25zdCBFR0xp
bnQgKmF0dHJpYkxpc3QpOworCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwg
Y29uc3QgQ29uZmlnICp5KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmln
ICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgdm9pZCBzY2Fu
Rm9yV2FudGVkQ29tcG9uZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOworICAgIEVHTGlu
dCB3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29uc3Q7CisKKyAg
ICBib29sIG1XYW50UmVkOworICAgIGJvb2wgbVdhbnRHcmVlbjsKKyAgICBib29sIG1XYW50Qmx1
ZTsKKyAgICBib29sIG1XYW50QWxwaGE7CisgICAgYm9vbCBtV2FudEx1bWluYW5jZTsKK307CisK
K2NsYXNzIENvbmZpZ1NldAoreworICAgIGZyaWVuZCBEaXNwbGF5OworCisgIHB1YmxpYzoKKyAg
ICBDb25maWdTZXQoKTsKKworICAgIHZvaWQgYWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2Rl
LCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xp
bnQgbXVsdGlTYW1wbGUpOworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBnZXRD
b25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xp
bnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGNvbnN0IGVnbDo6Q29uZmln
ICpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oQ29uZmlnU2V0KTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29u
ZmlnLCBTb3J0Q29uZmlnPiBTZXQ7CisgICAgdHlwZWRlZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9y
OworICAgIFNldCBtU2V0OworCisgICAgc3RhdGljIGNvbnN0IEVHTGludCBtU29ydEF0dHJpYnNb
XTsKK307Cit9CisKKyNlbmRpZiAgIC8vIElOQ0xVREVfQ09ORklHX0hfCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML0Rpc3BsYXku
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
bGliRUdML0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3MSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gRGlzcGxheS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6RGlzcGxh
eSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAorLy8gZGlzcGxheSBvbiB3aGljaCBn
cmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlzcGxheS4KKy8vIFtFR0wgMS40XSBz
ZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgorCisjZGVmaW5lIFJFRl9SQVNU
IDAgICAvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNFX1JFRl9SQVNUIGlu
IHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKworbmFtZXNwYWNlIGVnbAoreworRGlz
cGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkgOiBtRGMoZGV2aWNlQ29udGV4dCkKK3sK
KyAgICBtRDNkOSA9IE5VTEw7CisgICAgbURldmljZSA9IE5VTEw7CisKKyAgICBtQWRhcHRlciA9
IEQzREFEQVBURVJfREVGQVVMVDsKKworICAgICNpZiBSRUZfUkFTVCA9PSAxIHx8IGRlZmluZWQo
Rk9SQ0VfUkVGX1JBU1QpCisgICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVWVFlQRV9SRUY7Cisg
ICAgI2Vsc2UKKyAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZUWVBFX0hBTDsKKyAgICAjZW5k
aWYKKworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSAxOworICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAx
OworICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKK30KKworRGlzcGxheTo6fkRpc3BsYXkoKQorewor
ICAgIHRlcm1pbmF0ZSgpOworfQorCitib29sIERpc3BsYXk6OmluaXRpYWxpemUoKQoreworICAg
IGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShEM0RfU0RLX1ZFUlNJT04pOworCisgICAg
aWYgKG1EM2Q5KQorICAgIHsKKyAgICAgICAgaWYgKG1EYyAhPSBOVUxMKQorICAgICAgICB7Cisg
ICAgICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IERldGVybWluZSB3aGljaCBh
ZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBjb3JyZXNwb25kcyB0bworICAgICAgICB9
CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+R2V0RGV2aWNlQ2FwcyhtQWRhcHRl
ciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBE
M0RQU19WRVJTSU9OKDIsIDApKQorICAgICAgICB7CisgICAgICAgICAgICBtRDNkOS0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgbUQzZDkgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IDQ7CisgICAgICAgICAg
ICBtTWF4U3dhcEludGVydmFsID0gMDsKKworICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBy
ZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFKSB7bU1p
blN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOyBtTWF4U3dhcElu
dGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7fQorICAgICAgICAgICAgaWYg
KG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxf
T05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWws
IDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7fQor
ICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBS
RVNFTlRfSU5URVJWQUxfVFdPKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1N
aW5Td2FwSW50ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJ
bnRlcnZhbCwgMik7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbklu
dGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVydmFsID0gc3Rk
OjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBz
LlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikgICAgICB7
bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dh
cEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7fQorCisgICAgICAgICAg
ICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBEM0RGTVRfQTFSNUc1QjUsCisgICAgICAgICAgICAvLyAgRDNERk1U
X0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBS
ZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVu
ZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisgICAgICAgICAgICAgICAgRDNERk1UX0E4
UjhHOEI4LAorICAgICAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCisgICAgICAgICAgICAgICAg
RDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOAorICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1h
dHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJM
RSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDMyLAorICAgICAgICAgICAgLy8gIEQzREZNVF9E
MTVTMSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDI0UzgsCisgICAgICAgICAgICAgICAgRDNE
Rk1UX0QyNFg4LAorICAgICAgICAgICAgLy8gIEQzREZNVF9EMjRYNFM0LAorICAgICAgICAgICAg
ICAgIEQzREZNVF9EMTYsCisgICAgICAgICAgICAvLyAgRDNERk1UX0QzMkZfTE9DS0FCTEUsCisg
ICAgICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAorICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgICAgICAgICAgbUQzZDkt
PkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisK
KyAgICAgICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7CisKKyAgICAgICAgICAgIGZvciAoaW50
IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBzaXplb2YocmVuZGVyVGFyZ2V0Rm9ybWF0
cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0
Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFD
RSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVuY2lsSW5kZXggPCBzaXplb2YoZGVwdGhT
dGVuY2lsRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZGVwdGhTdGVuY2lsSW5kZXgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRDNERk9STUFU
IGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0
Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEVudW1lcmF0ZSBtdWx0
aS1zYW1wbGluZworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NldC5h
ZGQoY3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcEludGVydmFsLCBtTWF4U3dhcEludGVydmFs
LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhl
bSBpbnRlcm5hbGx5CisgICAgICAgICAgICBFR0xpbnQgaW5kZXggPSAxOworICAgICAgICAgICAg
Zm9yIChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7
IGNvbmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsgY29uZmlnKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOworICAgICAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lEID0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgIG1Db25maWdTZXQubVNldC5pbnNlcnQoY29u
ZmlndXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWlzSW5pdGlhbGl6ZWQoKSkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZSgpOworCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEaXNw
bGF5Ojp0ZXJtaW5hdGUoKQoreworICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFj
ZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1
cmZhY2UrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSAqc3VyZmFjZTsKKyAgICB9CisKKyAgICBm
b3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9yIGNvbnRleHQgPSBtQ29udGV4dFNldC5iZWdpbigpOyBj
b250ZXh0ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjb250ZXh0KyspCisgICAgeworICAgICAgICBn
bERlc3Ryb3lDb250ZXh0KCpjb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAobURldmljZSkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgbURldmljZSA9IE5VTEw7
CisgICAgfQorCisgICAgaWYgKG1EM2Q5KQorICAgIHsKKyAgICAgICAgbUQzZDktPlJlbGVhc2Uo
KTsKKyAgICAgICAgbUQzZDkgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBEaXNwbGF5OjpzdGFy
dFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0YXJ0ZWQpCisgICAgeworICAgICAgICBsb25n
IHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7CisgICAgfQorfQorCit2
b2lkIERpc3BsYXk6OmVuZFNjZW5lKCkKK3sKKyAgICBpZiAobVNjZW5lU3RhcnRlZCkKKyAgICB7
CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURldmljZS0+RW5kU2NlbmUoKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywg
Y29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1D
b25maWcpCit7CisgICAgcmV0dXJuIG1Db25maWdTZXQuZ2V0Q29uZmlncyhjb25maWdzLCBhdHRy
aWJMaXN0LCBjb25maWdTaXplLCBudW1Db25maWcpOworfQorCitib29sIERpc3BsYXk6OmdldENv
bmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZh
bHVlKQoreworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1Nl
dC5nZXQoY29uZmlnKTsKKworICAgIHN3aXRjaCAoYXR0cmlidXRlKQorICAgIHsKKyAgICAgIGNh
c2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1CdWZmZXJTaXplOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0FMUEhBX1NJ
WkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1BbHBoYVNpemU7ICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICAgICAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CbHVlU2l6ZTsgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1HcmVlblNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1S
ZWRTaXplOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0RFUFRIX1NJWkU6
ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFNpemU7ICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NURU5DSUxfU0laRTogICAgICAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdGVuY2lsU2l6ZTsgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1Db25maWdDYXZlYXQ7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X0NPTkZJR19JRDogICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25m
aWdJRDsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1MZXZlbDsgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVSZW5kZXJhYmxlOyAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTogICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NB
TVBMRVM6ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TYW1wbGVz
OyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAg
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TYW1wbGVCdWZmZXJzOyAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NVUkZBQ0VfVFlQRTogICAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZTsgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1UcmFuc3BhcmVudFR5cGU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5T
UEFSRU5UX0JMVUVfVkFMVUU6ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVu
dEJsdWVWYWx1ZTsgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0dSRUVOX1ZB
TFVFOiAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudEdyZWVuVmFsdWU7ICBi
cmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFJlZFZhbHVlOyAgICBicmVhazsKKyAgICAgIGNh
c2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1CaW5kVG9UZXh0dXJlUkdCOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JJTkRfVE9f
VEVYVFVSRV9SR0JBOiAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9UZXh0dXJl
UkdCQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVSVkFMOiAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NaW5Td2FwSW50ZXJ2YWw7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RUdMX0xVTUlOQU5DRV9TSVpFOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1M
dW1pbmFuY2VTaXplOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0FMUEhBX01BU0tf
U0laRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1BbHBoYU1hc2tTaXplOyAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db2xvckJ1ZmZlclR5cGU7ICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1SZW5kZXJhYmxlVHlwZTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgICp2YWx1ZSA9IGZhbHNlOyBVTklNUExFTUVOVEVE
KCk7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25mb3JtYW50OyAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3VyZmFjZSAqRGlzcGxheTo6Y3JlYXRlV2luZG93
U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZykKK3sKKyAgICBjb25zdCBDb25m
aWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOworCisgICAgRDNEUFJF
U0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OworCisgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFN0
ZW5jaWxGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsK
KyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gY29uZmlndXJhdGlvbi0+
bVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lk
dGggPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSAwOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBjb25maWd1cmF0aW9u
LT5tRGVwdGhTaXplID8gVFJVRSA6IEZBTFNFOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdz
ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gd2luZG93OworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNh
bXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVk
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBjb252ZXJ0SW50
ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVj
dCA9IEQzRFNXQVBFRkZFQ1RfQ09QWTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9
IFRSVUU7ICAgLy8gRklYTUUKKworICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9
IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxM
OworCisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAgICAgRFdPUkQgYmVoYXZpb3JGbGFn
cyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOwor
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwg
bURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9W
RVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVy
cywgJm1EZXZpY2UpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIHdp
bmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5H
LCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIGlmIChtRGV2aWNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CisgICAgICAgICAg
ICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBDaGFpbik7CisgICAgICAgICAgICBtRGV2
aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoIW1TdXJmYWNlU2V0LmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBl
eGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFjZXMvd2luZG93cyBjdXJyZW50bHkgaW4g
dXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICAgICAgLy8gYSBzZXBhcmF0ZSBzd2FwIGNo
YWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMs
ICZzd2FwQ2hhaW4pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5z
LiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlQWRk
aXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgZGVwdGhz
dGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKKyAgICAgICAgICAgIC8vIENyZWF0ZURldmljZSwgc28g
d2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgorICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lk
dGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwgJmRlcHRoU3Rl
bmNpbFN1cmZhY2UsIE5VTEwpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAg
Y2hhaW4uIE91dCBvZiBtZW1vcnkuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgdGhlIGRldmljZSBhbHJlYWR5IGV4aXN0
cywgYnV0IHRoZXJlIGFyZSBubyBzdXJmYWNlcyBpbiB1c2UsIHRoZW4gYWxsIHRoZSBzdXJmYWNl
cy93aW5kb3dzCisgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVzdHJveWVkLCBhbmQgd2Ugc2hv
dWxkIHJlcHVycG9zZSB0aGUgb3JpZ2luYWxseSBjcmVhdGVkIGRlcHRoc3RlbmNpbCBzdXJmYWNl
IGZvcgorICAgICAgICAgICAgLy8gdXNlIHdpdGggdGhlIG5ldyBzdXJmYWNlIHdlIGFyZSBjcmVh
dGluZy4KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+UmVzZXQoJnByZXNl
bnRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXNldCBwcmVzZW50YXRpb24gcGFyYW1ldGVy
cyBmb3IgZGV2aWNlLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAg
aWYgKG1EZXZpY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNjZW5lU3RhcnRl
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1EZXZpY2UtPkdldFN3YXBDaGFpbigwLCAmc3dh
cENoYWluKTsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNl
KCZkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKHN3YXBDaGFpbikKKyAg
ICB7CisgICAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBzd2FwQ2hhaW4sIGRlcHRo
U3RlbmNpbFN1cmZhY2UsIGNvbmZpZ3VyYXRpb24pOworICAgICAgICBtU3VyZmFjZVNldC5pbnNl
cnQoc3VyZmFjZSk7CisKKyAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK0VHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4
dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQoreworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcgPSBtQ29uZmlnU2V0LmdldChjb25maWdIYW5kbGUpOworCisgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY29uZmlnKTsKKyAgICBtQ29udGV4dFNldC5pbnNlcnQo
Y29udGV4dCk7CisKKyAgICByZXR1cm4gY29udGV4dDsKK30KKwordm9pZCBEaXNwbGF5OjpkZXN0
cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgZGVsZXRlIHN1cmZhY2U7
CisgICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7Cit9CisKK3ZvaWQgRGlzcGxheTo6ZGVz
dHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgZ2xEZXN0cm95Q29udGV4
dChjb250ZXh0KTsKKyAgICBtQ29udGV4dFNldC5lcmFzZShjb250ZXh0KTsKK30KKworYm9vbCBE
aXNwbGF5Ojppc0luaXRpYWxpemVkKCkKK3sKKyAgICByZXR1cm4gbUQzZDkgIT0gTlVMTCAmJiBt
Q29uZmlnU2V0LnNpemUoKSA+IDA7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxpZENvbmZpZyhF
R0xDb25maWcgY29uZmlnKQoreworICAgIHJldHVybiBtQ29uZmlnU2V0LmdldChjb25maWcpICE9
IE5VTEw7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxpZENvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpCit7CisgICAgcmV0dXJuIG1Db250ZXh0U2V0LmZpbmQoY29udGV4dCkgIT0gbUNvbnRl
eHRTZXQuZW5kKCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJm
YWNlICpzdXJmYWNlKQoreworICAgIHJldHVybiBtU3VyZmFjZVNldC5maW5kKHN1cmZhY2UpICE9
IG1TdXJmYWNlU2V0LmVuZCgpOworfQorCitib29sIERpc3BsYXk6Omhhc0V4aXN0aW5nV2luZG93
U3VyZmFjZShIV05EIHdpbmRvdykKK3sKKyAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1
cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgp
OyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBpZiAoKCpzdXJmYWNlKS0+Z2V0V2luZG93SGFu
ZGxlKCkgPT0gd2luZG93KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBEaXNwbGF5Ojpz
ZXRTd2FwSW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgbVN3YXBJbnRlcnZhbCA9IGlu
dGVydmFsOworICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVydmFsLCBtTWlu
U3dhcEludGVydmFsKTsKKyAgICBtU3dhcEludGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZh
bCwgbU1heFN3YXBJbnRlcnZhbCk7CisKKyAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydElu
dGVydmFsKG1Td2FwSW50ZXJ2YWwpOworfQorCitEV09SRCBEaXNwbGF5OjpnZXRQcmVzZW50SW50
ZXJ2YWwoKQoreworICAgIHJldHVybiBtUHJlc2VudEludGVydmFsOworfQorCitEV09SRCBEaXNw
bGF5Ojpjb252ZXJ0SW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgc3dpdGNoKGludGVy
dmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1N
RURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7Cisg
ICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKKyAgICAgIGNhc2Ug
MzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7CisgICAgICBjYXNlIDQ6IHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7Cit9CisK
K0lEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERldmljZSgpCit7CisgICAgcmV0dXJuIG1E
ZXZpY2U7Cit9CisKK0QzRENBUFM5IERpc3BsYXk6OmdldERldmljZUNhcHMoKQoreworICAgIHJl
dHVybiBtRGV2aWNlQ2FwczsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3BsYXku
aDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFic3Ry
YWN0CisvLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50cyBF
R0xEaXNwbGF5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgorCisjaWZuZGVm
IElOQ0xVREVfRElTUExBWV9IXworI2RlZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KKworI2lmbmRl
ZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRp
ZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlIDxz
ZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGliRUdM
L0NvbmZpZy5oIgorI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCisKK25hbWVzcGFjZSBlZ2wK
K3sKK2NsYXNzIERpc3BsYXkKK3sKKyAgcHVibGljOgorICAgIERpc3BsYXkoSERDIGRldmljZUNv
bnRleHQpOworCisgICAgfkRpc3BsYXkoKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworICAg
IHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY2VuZSgpOworICAg
IHZpcnR1YWwgdm9pZCBlbmRTY2VuZSgpOworCisgICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZp
ZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwg
RUdMaW50ICpudW1Db25maWcpOworICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBj
b25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCisgICAgZWdsOjpTdXJm
YWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnKTsK
KyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7CisK
KyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisgICAgdm9p
ZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisKKyAgICBib29sIGlzSW5p
dGlhbGl6ZWQoKTsKKyAgICBib29sIGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZyk7Cisg
ICAgYm9vbCBpc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9vbCBp
c1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIGJvb2wgaGFzRXhpc3Rp
bmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKKworICAgIHZvaWQgc2V0U3dhcEludGVydmFs
KEdMaW50IGludGVydmFsKTsKKyAgICBEV09SRCBnZXRQcmVzZW50SW50ZXJ2YWwoKTsKKyAgICBz
dGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGludGVydmFsKTsKKworICAgIHZpcnR1
YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7CisgICAgdmlydHVhbCBEM0RDQVBTOSBn
ZXREZXZpY2VDYXBzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRGlzcGxheSk7CisgICAgY29uc3QgSERDIG1EYzsKKworICAgIFVJTlQgbUFkYXB0ZXI7Cisg
ICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBJRGlyZWN0M0Q5ICptRDNkOTsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworCisg
ICAgYm9vbCBtU2NlbmVTdGFydGVkOworICAgIEdMaW50IG1Td2FwSW50ZXJ2YWw7CisgICAgRUdM
aW50IG1NYXhTd2FwSW50ZXJ2YWw7CisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7CisgICAg
RFdPUkQgbVByZXNlbnRJbnRlcnZhbDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFjZSo+
IFN1cmZhY2VTZXQ7CisgICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKKworICAgIENvbmZpZ1Nl
dCBtQ29uZmlnU2V0OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENvbnRl
eHRTZXQ7CisgICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKK307Cit9CisKKyNlbmRpZiAgIC8v
IElOQ0xVREVfRElTUExBWV9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZh
Y2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBh
IGRyYXdpbmcgc3VyZmFjZQorLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3cs
IGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgorLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCisK
KyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5Lmgi
CisKK25hbWVzcGFjZSBlZ2wKK3sKK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwg
SURpcmVjdDNEU3dhcENoYWluOSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhT
dGVuY2lsLCBjb25zdCBDb25maWcgKmNvbmZpZykgCisgICAgOiBtRGlzcGxheShkaXNwbGF5KSwg
bVN3YXBDaGFpbihzd2FwQ2hhaW4pLCBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCksIG1Db25m
aWcoY29uZmlnKQoreworICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0
ID0gTlVMTDsKKyAgICBtRmxpcFRleHR1cmUgPSBOVUxMOworICAgIG1GbGlwU3RhdGUgPSBOVUxM
OworICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOworCisgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAo
RUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5l
IGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tf
QlVGRkVSOworICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKKworICAg
IGlmIChtU3dhcENoYWluKQorICAgIHsKKyAgICAgICAgbVN3YXBDaGFpbi0+QWRkUmVmKCk7Cisg
ICAgICAgIG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01P
Tk8sICZtQmFja0J1ZmZlcik7CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9u
OworICAgICAgICBtQmFja0J1ZmZlci0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAg
IG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRp
b24uSGVpZ2h0OworCisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXkt
PmdldERldmljZSgpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0KG1XaWR0aCwgbUhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBkZXNjcmlwdGlv
bi5NdWx0aVNhbXBsZVR5cGUsIGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0Us
ICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihFR0xfQkFEX0FMTE9DKTsKKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCAxLCBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAm
bUZsaXBUZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBlcnJvcihFR0xf
QkFEX0FMTE9DKTsKKworICAgICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N1cmZhY2U6On5TdXJm
YWNlKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4t
PlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAg
ICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0
KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIGlmIChtRmxpcFRleHR1cmUpCisgICAgeworICAgICAgICBtRmxp
cFRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7
CisgICAgICAgIG1GbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVByZUZs
aXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9
Cit9CisKK0hXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKK3sKKyAgICBpZiAobVN3YXBD
aGFpbikKKyAgICB7CisgICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1l
dGVyczsKKyAgICAgICAgbVN3YXBDaGFpbi0+R2V0UHJlc2VudFBhcmFtZXRlcnMoJnByZXNlbnRQ
YXJhbWV0ZXJzKTsKKworICAgICAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdp
bmRvdzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBTdXJmYWNlOjp3cml0
ZVJlY29yZGFibGVGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RU
ZXh0dXJlOSAqc291cmNlKQoreworICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlv
bnMKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNF
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NP
TElEKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwg
RkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQz
RENVTExfTk9ORSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5B
QkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVF
TkFCTEUsIDApOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxV
RSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7
CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNF
KTsKKyAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgIGRldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOworCisgICAgLy8gSnVzdCBzYW1wbGUgdGhlIHRleHR1cmUKKyAgICBk
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VM
RUNUQVJHMSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JBUkcxLCBEM0RUQV9URVhUVVJFKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRl
KDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0
dXJlKDAsIHNvdXJjZSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9N
QUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAs
IEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRG
VkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsKKworICAgIGRldmljZS0+U2V0U3RyZWFt
U291cmNlRnJlcSgwLCAxKTsgLy8gRHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMgYWJvdXQgc3Ry
ZWFtIDAsIG5vdCB0aGUgcmVzdC4KK30KKwordm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit7Cisg
ICAgSFJFU1VMVCBocjsKKworICAgIGlmIChtRmxpcFN0YXRlID09IE5VTEwpCisgICAgeworICAg
ICAgICAvLyBDcmVhdGUgdHdvIHN0YXRlIGJsb2NrcyBib3RoIHJlY29yZGluZyB0aGUgc3RhdGVz
IHRoYXQgYXJlIGNoYW5nZWQgd2hlbiBzd2FwcGluZy4KKworICAgICAgICAvLyBtUHJlRmxpcFN0
YXRlIHdpbGwgcmVjb3JkIHRoZSBvcmlnaW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgorICAgICAgICBo
ciA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKyAgICAgICAgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsK
KyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1QcmVGbGlwU3RhdGUpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gbUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgc3RhdGUgZm9yIHRo
ZSBzd2FwIG9wZXJhdGlvbi4KKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAgd3JpdGVSZWNvcmRh
YmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsKKworICAgICAgICBociA9IGRldmljZS0+RW5k
U3RhdGVCbG9jaygmbUZsaXBTdGF0ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8
IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwor
CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICB7CisgICAgICAgICAgICBtRmxpcFN0
YXRlID0gTlVMTDsKKyAgICAgICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgaHIgPSBtRmxpcFN0YXRlLT5BcHBseSgpOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGhyID0gbVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIGRldmljZS0+R2V0UmVu
ZGVyVGFyZ2V0KDAsICZtUHJlRmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+R2V0RGVwdGhT
dGVuY2lsU3VyZmFjZSgmbVByZUZsaXBEZXB0aFN0ZW5jaWwpOworCisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgbUJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2ls
U3VyZmFjZShOVUxMKTsKK30KKwordm9pZCBTdXJmYWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlKQoreworICAgIG1QcmVGbGlwU3RhdGUtPkFwcGx5KCk7CisKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtUHJlRmxpcEJhY2tCdWZmZXIpOworICAgIGRldmlj
ZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShtUHJlRmxpcERlcHRoU3RlbmNpbCk7CisKKyAgICBp
ZiAobVByZUZsaXBCYWNrQnVmZmVyKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBCYWNrQnVmZmVy
LT5SZWxlYXNlKCk7CisgICAgICAgIG1QcmVGbGlwQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1QcmVGbGlwRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBO
VUxMOworICAgIH0KK30KKworYm9vbCBTdXJmYWNlOjpzd2FwKCkKK3sKKyAgICBpZiAobVN3YXBD
aGFpbikKKyAgICB7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5
LT5nZXREZXZpY2UoKTsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZh
Y2U7CisgICAgICAgIG1GbGlwVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3Vy
ZmFjZSk7CisKKyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+
U3RyZXRjaFJlY3QobVJlbmRlclRhcmdldCwgTlVMTCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQz
RFRFWEZfTk9ORSk7CisKKyAgICAgICAgYXBwbHlGbGlwU3RhdGUoZGV2aWNlLCBtRmxpcFRleHR1
cmUpOworCisgICAgICAgIC8vIFJlbmRlciB0aGUgdGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRo
ZSBiYWNrIGJ1ZmZlcgorICAgICAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3sgICAgIDAgLSAwLjVm
LCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBm
LCAxLjBmLCAxLjBmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41
ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgICAgIDAgLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4w
ZiwgMC4wZiwgMC4wZn19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdgorCisgICAgICAgIG1EaXNw
bGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBU
X1RSSUFOR0xFRkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICAgICAgdGV4
dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICByZXN0b3JlU3RhdGUoZGV2aWNlKTsK
KworICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtU3dhcENoYWluLT5QcmVzZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIG1EaXNwbGF5LT5n
ZXRQcmVzZW50SW50ZXJ2YWwoKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNE
RVJSX0RSSVZFUklOVEVSTkFMRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
RUdMaW50IFN1cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOwor
fQorCitFR0xpbnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhl
aWdodDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgp
Cit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0
LT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSURp
cmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9T
dXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFN1cmZhY2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNl
bnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEg
d2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8vIEltcGxlbWVudHMgRUdMU3Vy
ZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFn
ZSAzLgorCisjaWZuZGVmIElOQ0xVREVfU1VSRkFDRV9IXworI2RlZmluZSBJTkNMVURFX1NVUkZB
Q0VfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8
ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVn
bAoreworY2xhc3MgRGlzcGxheTsKK2NsYXNzIENvbmZpZzsKKworY2xhc3MgU3VyZmFjZQorewor
ICBwdWJsaWM6CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBJRGlyZWN0M0RTd2FwQ2hh
aW45ICpzd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBkZXB0aFN0ZW5jaWwsIGNvbnN0IGVn
bDo6Q29uZmlnICpjb25maWcpOworCisgICAgflN1cmZhY2UoKTsKKworICAgIEhXTkQgZ2V0V2lu
ZG93SGFuZGxlKCk7CisgICAgYm9vbCBzd2FwKCk7CisKKyAgICB2aXJ0dWFsIEVHTGludCBnZXRX
aWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7CisKKyAgICBEaXNwbGF5ICpj
b25zdCBtRGlzcGxheTsKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpjb25zdCBtU3dhcENoYWlu
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNp
bDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJlOworCisgICAgdm9pZCBhcHBs
eUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpz
b3VyY2UpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7
CisgICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2Nr
OSAqbUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVByZUZsaXBTdGF0ZTsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBCYWNrQnVmZmVyOworICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKKworICAgIGNvbnN0IGVnbDo6Q29uZmln
ICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0ZWQgd2l0aAorICAg
IEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWlnaHQgb2Ygc3VyZmFjZQorICAg
IEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0aCBvZiBzdXJmYWNlCisvLyAg
RUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6b250YWwgZG90IHBpdGNoCisv
LyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZlcnRpY2FsIGRvdCBwaXRjaAor
Ly8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJZiB0cnVlLCBjcmVhdGUgbGFy
Z2VzdCBwYnVmZmVyIHBvc3NpYmxlCisvLyAgRUdMQm9vbGVhbiBtaXBtYXBUZXh0dXJlOyAgICAg
IC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcworLy8gIEVHTGludCBtaXBtYXBMZXZlbDsg
ICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRvCisvLyAgRUdMZW51bSBtdWx0
aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29sdmUgYmVoYXZpb3IKKyAgICBF
R0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxheSBhc3BlY3QgcmF0aW8KKyAg
ICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVuZGVyIGJ1ZmZlcgorICAgIEVH
TGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIgc3dhcCBiZWhhdmlvcgorLy8g
IEVHTGVudW0gdGV4dHVyZUZvcm1hdDsgICAgICAgICAvLyBGb3JtYXQgb2YgdGV4dHVyZTogUkdC
LCBSR0JBLCBvciBubyB0ZXh0dXJlCisvLyAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0OyAgICAgICAg
IC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQorLy8gIEVHTGVudW0gdmdBbHBo
YUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9wZW5WRworLy8gIEVHTGVudW0g
dmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBmb3IgT3BlblZHCit9OworfQor
CisjZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML2xpYkVH
TC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4NSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gbGliRUdMLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4K
KworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgor
I2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkpCit7CisgICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29u
ZmlnIGNvbmZpZykKK3sKKyAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbmZp
Zyhjb25maWcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBm
YWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIXZh
bGlkYXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFs
aWRTdXJmYWNlKHN1cmZhY2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
U1VSRkFDRSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4g
IkMiCit7CitFR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0Uo
IigpIik7CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOworCisg
ICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZWdsOjpzZXRDdXJy
ZW50RXJyb3IoRUdMX1NVQ0NFU1MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwor
RUdMRGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBk
aXNwbGF5X2lkKQoreworICAgIFRSQUNFKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9p
ZCA9IDB4JTAuOHApIiwgZGlzcGxheV9pZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBSZXR1cm4gdGhlIHNhbWUgRUdMRGlzcGxheSBoYW5kbGUgd2hlbiBkaXNwbGF5X2lk
IGFscmVhZHkgY3JlYXRlZCBhIGRpc3BsYXkKKworICAgICAgICBpZiAoZGlzcGxheV9pZCA9PSBF
R0xfREVGQVVMVF9ESVNQTEFZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IGVn
bDo6RGlzcGxheSgoSERDKU5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlfaWQgaXMgYSB2YWxpZCBk
aXNwbGF5IGRldmljZSBjb250ZXh0CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgZWdsOjpEaXNw
bGF5KChIREMpZGlzcGxheV9pZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9OT19ESVNQTEFZKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisK
K0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGlu
dCAqbWFqb3IsIEVHTGludCAqbWlub3IpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44
cCkiLAorICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0Up
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOworICAgICAgICBp
ZiAobWlub3IpICptaW5vciA9IDQ7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUoRUdMRGlz
cGxheSBkcHkpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHApIiwgZHB5
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgZGlzcGxheS0+dGVybWlu
YXRlKCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQor
Citjb25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVH
TGludCBuYW1lKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xp
bnQgbmFtZSA9ICVkKSIsIGRweSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKKyAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzKCJPcGVuR0xfRVMiKTsKKyAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgorICAg
ICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIiIpOworICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoK
KyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCJUcmFuc0dhbWluZyBJbmMuIik7CisgICAgICAg
ICAgY2FzZSBFR0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKGdp
dC1kZXZlbCAiX19EQVRFX18iICIgX19USU1FX18iKSIpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJu
IE5VTEw7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxh
eSBkcHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51
bV9jb25maWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENv
bmZpZyAqY29uZmlncyA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXpl
ID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNv
bmZpZ3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFudW1fY29u
ZmlnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVU
RVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmli
TGlzdFtdID0gICAge0VHTF9OT05FfTsKKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZp
Z3MoY29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxT
RSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFM
U0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5
IGRweSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xp
bnQgY29uZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykKK3sKKyAgICBUUkFDRSgiKEVHTERp
c3BsYXkgZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAs
ICIKKyAgICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZp
Z19zaXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBk
cHksIGF0dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbnVtX2NvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYg
KCFhdHRyaWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBhdHRy
aWJMaXN0OworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdz
LCBhdHRyaWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwg
ZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xp
bnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0
ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29uZmln
LCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAg
ICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRpc3BsYXktPmdl
dENvbmZpZ0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisK
K0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBk
cHksIEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhw
LCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAw
eCUwLjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhw
KSIsIGRweSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4o
ZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisgICAg
ICAgIEhXTkQgd2luZG93ID0gKEhXTkQpd2luOworCisgICAgICAgIGlmICghSXNXaW5kb3cod2lu
ZG93KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZF
X1dJTkRPVywgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJp
Yl9saXN0KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmF0dHJpYl9saXN0ICE9IEVH
TF9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xp
c3RbMF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfUkVO
REVSX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJfbGlzdFsxXSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVy
aW5nIGRpcmVjdGx5IHRvIGZyb250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xf
VkdfQ09MT1JTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
TUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FM
UEhBX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZB
Q0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChkaXNwbGF5LT5oYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJG
QUNFKTsKKyAgICAgICAgfQorCisgICAgICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IChFR0xTdXJm
YWNlKWRpc3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcpOworCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05P
X1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdM
U3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJB
Q0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhw
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwg
Y29uZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExB
WSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAg
cmV0dXJuIEVHTF9OT19TVVJGQUNFOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVh
dGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRp
dmVQaXhtYXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBU
UkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAu
OHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgorICAgICAgICAgICJj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFw
LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJu
IEVHTF9OT19TVVJGQUNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3Vy
ZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIFRSQUNFKCIo
RUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIs
IGRweSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNF
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBF
R0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZhY2Uo
KGVnbDo6U3VyZmFjZSopc3VyZmFjZSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RS
VUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2Uo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdM
aW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdM
U3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQg
KnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2
YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0
ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0Up
OworICAgICAgICB9CisKKyAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6
U3VyZmFjZSopc3VyZmFjZTsKKworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFR0xfVkdfQ09MT1JTUEFDRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgor
ICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xT
dXJmYWNlLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RUdMX0hPUklaT05UQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTEFSR0VT
VF9QQlVGRkVSOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKKyAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9N
VUxUSVNBTVBMRV9SRVNPTFZFOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1Rf
UkFUSU86CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRUdMX1NXQVBfQkVIQVZJT1I6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1RFWFRV
UkVfRk9STUFUOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKKyAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFR0xfV0lEVEg6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKK3sKKyAgICBUUkFDRSgiKEVHTGVu
dW0gYXBpID0gMHglWCkiLCBhcGkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2gg
KGFwaSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6CisgICAgICAg
ICAgY2FzZSBFR0xfT1BFTlZHX0FQSToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVt
ZW50YXRpb24KKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6c2V0
Q3VycmVudEFQSShhcGkpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9G
QUxTRTsKK30KKworRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKK3sKKyAgICBU
UkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6
OmdldEN1cnJlbnRBUEkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCit7CisgICAg
VFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitF
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCit7CisgICAgVFJBQ0Uo
IigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19E
SVNQTEFZLCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsK
KworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTFN1
cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3Bs
YXkgZHB5LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZp
ZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xE
aXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1
ZmZlciBidWZmZXIgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAw
eCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAg
IGRweSwgYnVmdHlwZSwgYnVmZmVyLCBjb25maWcsIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAg
fQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19T
VVJGQUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZh
Y2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQoreworICAgIFRSQUNF
KCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhw
LCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAg
ZHB5LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZB
TFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxh
eSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwg
RUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGV4
SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikK
K3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJm
YWNlID0gMHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVy
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3Rh
dGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRp
c3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAg
ICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKK3sKKyAg
ICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQp
IiwgZHB5LCBpbnRlcnZhbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVH
TF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPnNldFN3YXBJbnRlcnZhbChp
bnRlcnZhbCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOwor
fQorCitFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5
LCBFR0xDb25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGlu
dCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAs
IEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAw
eCUwLjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhw
KSIsIGRweSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CisgICAgICAg
IH0KKworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0
KGNvbmZpZyk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xE
aXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjdHggPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBkaXNwbGF5LT5kZXN0cm95Q29udGV4dCgoZ2w6OkNvbnRleHQqKWN0eCk7CisKKyAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3
LCBFR0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNl
IHJlYWQgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBk
cHksIGRyYXcsIHJlYWQsIGN0eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwor
ICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsK
KyAgICAgICAgRFdPUkQgcGFzc2VzOworCisgICAgICAgIGlmICghZGV2aWNlIHx8IGRldmljZS0+
VmFsaWRhdGVEZXZpY2UoJnBhc3NlcykgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0eCAhPSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRh
dGUoZGlzcGxheSwgY29udGV4dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xf
RkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRyYXcgIT0gRUdMX05PX1NVUkZBQ0Ug
JiYgIXZhbGlkYXRlKGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKSkg
fHwKKyAgICAgICAgICAgIChyZWFkICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZShkaXNw
bGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYXcg
IT0gcmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCisgICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7Cisg
ICAgICAgIGVnbDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOworICAgICAgICBlZ2w6OnNl
dEN1cnJlbnRSZWFkU3VyZmFjZShyZWFkKTsKKworICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRl
eHQsIGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTENvbnRleHQgX19z
dGRjYWxsIGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGdsR2V0Q3VycmVu
dENvbnRleHQoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9OT19DT05URVhUKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05P
X0NPTlRFWFQ7Cit9CisKK0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRTdXJmYWNl
KEVHTGludCByZWFkZHJhdykKK3sKKyAgICBUUkFDRSgiKEVHTGludCByZWFkZHJhdyA9ICVkKSIs
IHJlYWRkcmF3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRkcmF3ID09IEVH
TF9SRUFEKQorICAgICAgICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIHJlYWQgPSBlZ2w6Omdl
dEN1cnJlbnRSZWFkU3VyZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmVhZCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVhZGRyYXcgPT0gRUdMX0RSQVcpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVHTFN1cmZhY2UgZHJhdyA9IGVnbDo6Z2V0Q3VycmVudERyYXdT
dXJmYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhkcmF3KTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNF
OworfQorCitFR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKQor
eworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBFR0xEaXNwbGF5
IGRweSA9IGVnbDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vz
cyhkcHkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOworICAgIH0KKwor
ICAgIHJldHVybiBFR0xfTk9fRElTUExBWTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
UXVlcnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMaW50IGF0dHJp
YnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHgl
MC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVH
TGludCAqdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjdHgsIGF0dHJpYnV0ZSwg
dmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRh
dGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Cisg
ICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwg
ZWdsV2FpdEdMKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0TmF0aXZl
KEVHTGludCBlbmdpbmUpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgZW5naW5lID0gJWQpIiwgZW5n
aW5lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1
cmZhY2UpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZh
Y2Ugc3VyZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1
cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBl
Z2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisgICAg
ICAgIGlmIChlZ2xTdXJmYWNlLT5zd2FwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xDb3B5QnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
YWNlLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMTmF0aXZl
UGl4bWFwVHlwZSB0YXJnZXQgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSwgdGFyZ2V0KTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nh
c3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisK
KyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBFR0xfRkFMU0U7Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgX19zdGRjYWxsIGVnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1l
KQoreworICAgIFRSQUNFKCIoY29uc3QgY2hhciAqcHJvY25hbWUgPSBcIiVzXCIpIiwgcHJvY25h
bWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgICAgICBfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgICAgIH07CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEV4dGVuc2lvbiBlZ2xFeHRlbnNpb25zW10gPQorICAgICAgICB7
CisgICAgICAgICAgICB7IiIsIE5VTEx9LAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50
IGV4dCA9IDA7IGV4dCA8IHNpemVvZihlZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24p
OyBleHQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZWds
RXh0ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWVnbEV4
dGVuc2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGdsR2V0UHJvY0FkZHJlc3MocHJvY25hbWUpOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpTlVMTCk7CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9saWJFR0wvbGliRUdMLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wuZGVm
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACitMSUJSQVJZCWxpYkVHTAorRVhQT1JUUwor
CWVnbEJpbmRBUEkgICAgICAgICAgICAgICAgICAgICAgQDE0CisJZWdsQmluZFRleEltYWdlICAg
ICAgICAgICAgICAgICBAMjAKKwllZ2xDaG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3CisJ
ZWdsQ29weUJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzMKKwllZ2xDcmVhdGVDb250ZXh0ICAg
ICAgICAgICAgICAgIEAyMworCWVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAg
ICBAMTgKKwllZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZSAgICAgICAgIEAxMAorCWVnbENyZWF0ZVBp
eG1hcFN1cmZhY2UgICAgICAgICAgQDExCisJZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAg
ICBAOQorCWVnbERlc3Ryb3lDb250ZXh0ICAgICAgICAgICAgICAgQDI0CisJZWdsRGVzdHJveVN1
cmZhY2UgICAgICAgICAgICAgICBAMTIKKwllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAg
IEA4CisJZWdsR2V0Q29uZmlncyAgICAgICAgICAgICAgICAgICBANgorCWVnbEdldEN1cnJlbnRD
b250ZXh0ICAgICAgICAgICAgQDI2CisJZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBA
MjgKKwllZ2xHZXRDdXJyZW50U3VyZmFjZSAgICAgICAgICAgIEAyNworCWVnbEdldERpc3BsYXkg
ICAgICAgICAgICAgICAgICAgQDIKKwllZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAx
CisJZWdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICBAMzQKKwllZ2xJbml0aWFsaXplICAg
ICAgICAgICAgICAgICAgIEAzCisJZWdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUK
KwllZ2xRdWVyeUFQSSAgICAgICAgICAgICAgICAgICAgIEAxNQorCWVnbFF1ZXJ5Q29udGV4dCAg
ICAgICAgICAgICAgICAgQDI5CisJZWdsUXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQor
CWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAgICAgICAgICAgQDEzCisJZWdsUmVsZWFzZVRleEltYWdl
ICAgICAgICAgICAgICBAMjEKKwllZ2xSZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNwor
CWVnbFN1cmZhY2VBdHRyaWIgICAgICAgICAgICAgICAgQDE5CisJZWdsU3dhcEJ1ZmZlcnMgICAg
ICAgICAgICAgICAgICBAMzIKKwllZ2xTd2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgor
CWVnbFRlcm1pbmF0ZSAgICAgICAgICAgICAgICAgICAgQDQKKwllZ2xXYWl0Q2xpZW50ICAgICAg
ICAgICAgICAgICAgIEAxNgorCWVnbFdhaXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMwCisJ
ZWdsV2FpdE5hdGl2ZSAgICAgICAgICAgICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJFR0wv
bGliRUdMLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93
cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBD
KysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkVHTCINCisJUHJvamVjdEdVSUQ9IntF
NzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlSb290TmFtZXNwYWNlPSJs
aWJFR0wiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0i
MTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4z
MiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4N
CisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9u
TmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIN
CisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4u
L2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJ
TkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9N
SU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1bnRpbWVDaGVj
a3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRl
cj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5
UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ig0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzPSJkM2Q5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlNb2R1bGVE
ZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9u
PSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0i
MSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9
IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNv
bW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpciku
LlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVv
dDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXRE
aXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQor
CQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25m
aWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRp
b25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9IjEi
DQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hN
TERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJT
ZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249
IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47
ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlv
bnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VD
VVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJCQlSdW50aW1lTGli
cmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZl
bD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJ
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
TGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIiDQorCQkJ
CUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5k
ZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVt
PSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNPTURBVEZvbGRp
bmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlv
blByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYj
eDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRs
bCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUp
XCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsm
I3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJh
dGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNl
cz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlG
aWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVu
aXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0K
KwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmlnLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXENvbW1vblxk
ZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXERpc3BsYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmls
ZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRl
bnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlzcGxheS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVk
ZVxFR0xcZWdsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbHBsYXRm
b3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cU3VyZmFjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQor
CQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIg0KKwkJCT4NCisJCTwvRmls
ZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRp
b1Byb2plY3Q+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGli
RUdML21haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9p
bnQgYW5kIG1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJF
R0wvbWFpbi5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK3N0YXRpYyBEV09SRCBj
dXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJ
TlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAg
c3dpdGNoIChyZWFzb24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgICNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgRklM
RSAqZGVidWcgPSBmb3BlbigiZGVidWcudHh0IiwgInJ0Iik7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZGVidWcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmY2xvc2Uo
ZGVidWcpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAi
d3QiKTsgICAvLyBFcmFzZQorICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjdXJyZW50
VExTID0gVGxzQWxsb2MoKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09V
VF9PRl9JTkRFWEVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRv
IGluaXRpYWxpemUgaW5kZXgKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1cnJlbnQqKUxv
Y2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAo
Y3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJy
ZW50VExTLCBjdXJyZW50KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVycm9yID0gRUdM
X1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09QRU5HTF9FU19B
UEk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7Cisg
ICAgICAgICAgICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RI
UkVBRF9ERVRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9D
RVNTX0RFVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgVGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBUUlVFOworfQorCituYW1lc3BhY2UgZWdsCit7Cit2b2lkIHNldEN1cnJlbnRF
cnJvcihFR0xpbnQgZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmVycm9yID0gZXJyb3I7Cit9
CisKK0VHTGludCBnZXRDdXJyZW50RXJyb3IoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAo
Q3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+
ZXJyb3I7Cit9CisKK3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKK3sKKyAgICBDdXJy
ZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAg
Y3VycmVudC0+QVBJID0gQVBJOworfQorCitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQoreworICAg
IEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisK
KyAgICByZXR1cm4gY3VycmVudC0+QVBJOworfQorCit2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVH
TERpc3BsYXkgZHB5KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZHB5OworfQorCitF
R0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQt
PmRpc3BsYXk7Cit9CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3Vy
ZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOworfQorCitF
R0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJy
ZW50LT5kcmF3U3VyZmFjZTsKK30KKwordm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3Vy
ZmFjZSBzdXJmYWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IHN1cmZhY2U7
Cit9CisKK0VHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKK3sKKyAgICBDdXJyZW50
ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0
dXJuIGN1cnJlbnQtPnJlYWRTdXJmYWNlOworfQorfQorCit2b2lkIGVycm9yKEVHTGludCBlcnJv
ckNvZGUpCit7CisgICAgZWdsOjpzZXRDdXJyZW50RXJyb3IoZXJyb3JDb2RlKTsKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkVHTC9tYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliRUdML21haW4u
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xp
YkVHTC9tYWluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2lm
bmRlZiBMSUJFR0xfTUFJTl9IXworI2RlZmluZSBMSUJFR0xfTUFJTl9IXworCisjZGVmaW5lIEVH
TEFQSQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKworbmFtZXNwYWNlIGVnbAoreworc3RydWN0IEN1
cnJlbnQKK3sKKyAgICBFR0xpbnQgZXJyb3I7CisgICAgRUdMZW51bSBBUEk7CisgICAgRUdMRGlz
cGxheSBkaXNwbGF5OworICAgIEVHTFN1cmZhY2UgZHJhd1N1cmZhY2U7CisgICAgRUdMU3VyZmFj
ZSByZWFkU3VyZmFjZTsKK307CisKK3ZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcik7
CitFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCk7CisKK3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVt
IEFQSSk7CitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKTsKKwordm9pZCBzZXRDdXJyZW50RGlzcGxh
eShFR0xEaXNwbGF5IGRweSk7CitFR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCk7CisKK3Zv
aWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSk7CitFR0xTdXJmYWNl
IGdldEN1cnJlbnREcmF3U3VyZmFjZSgpOworCit2b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShF
R0xTdXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsK
K30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JDb2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4K
K2NvbnN0IFQgJmVycm9yKEVHTGludCBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQor
eworICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZzdWNjZXNzKGNvbnN0IFQgJnJldHVyblZhbHVl
KQoreworICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKEVHTF9TVUNDRVNTKTsKKworICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAvLyBMSUJFR0xfTUFJTl9IXwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9C
bGl0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NjQgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFz
cy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKKyNpbmNsdWRlIDxkM2R4OS5oPgor
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgorCituYW1lc3BhY2UKK3sKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAg
aXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBv
c2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRoZSB1
cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJp
Z2h0LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVz
dCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorY29uc3QgY2hhciBzdGFu
ZGFyZHZzW10gPQorInN0cnVjdCBWU19PVVRQVVRcbiIKKyJ7XG4iCisiICAgIGZsb2F0NCBwb3Np
dGlvbiA6IFBPU0lUSU9OO1xuIgorIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7XG4i
CisifTtcbiIKKyJcbiIKKyJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7XG4iCisi
XG4iCisiVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pXG4iCisi
e1xuIgorIiAgICBWU19PVVRQVVQgT3V0O1xuIgorIlxuIgorIiAgICBPdXQucG9zaXRpb24gPSBw
b3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCisiICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9u
ICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtc
biIKKyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBGbGlwIFkgVmVydGV4
IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91dHB1
dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNvb3Jk
IHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgx
LDApIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVs
IHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNoYXIgZmxpcHl2c1td
ID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQ
T1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgorIn07XG4i
CisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgorIlxuIgorIlZT
X09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgorIntcbiIKKyIg
ICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24g
KyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0
NCgwLjUsIDAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIKKyJcbiIK
KyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFk
ZXIKKy8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2NvbnN0IGNo
YXIgcGFzc3Rocm91Z2hwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4iCisiZmxv
YXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCisie1xuIgor
IglyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCisifVxuIjsKKworLy8gTHVtaW5h
bmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzAp
LnJycmEuCisvLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAu
CisvLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorY29uc3Qg
Y2hhciBsdW1pbmFuY2Vwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4iCisidW5p
Zm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0NCB0ZXhj
b29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRtcCA9IHRleDJE
KHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAudyA9IHRtcC53ICogbW9kZS54ICsgbW9kZS55
O1xuIgorIglyZXR1cm4gdG1wLnh4eHc7XG4iCisifVxuIjsKKworLy8gUkdCL0EgQ29tcG9uZW50
IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdpdGggb3B0
aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZvcmNlIFJHQiA9IDAs
IHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9yY2UgQSA9IDEsIHNl
dCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAuCitjb25z
dCBjaGFyIGNvbXBvbmVudG1hc2twc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4i
CisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRtcCA9
IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUu
eDtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudztcbiIKKyIJcmV0dXJuIHRt
cDtcbiIKKyJ9XG4iOworCit9CisKK25hbWVzcGFjZSBnbAoreworCitjb25zdCBjaGFyICogY29u
c3QgQmxpdDo6bVNoYWRlclNvdXJjZVtdID0KK3sKKyAgICBzdGFuZGFyZHZzLAorICAgIGZsaXB5
dnMsCisgICAgcGFzc3Rocm91Z2hwcywKKyAgICBsdW1pbmFuY2VwcywKKyAgICBjb21wb25lbnRt
YXNrcHMKK307CisKK0JsaXQ6OkJsaXQoQ29udGV4dCAqY29udGV4dCkKKyAgOiBtQ29udGV4dChj
b250ZXh0KSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRpb24o
TlVMTCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwp
LCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7CisgICAgbWVt
c2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Cit9CisK
K0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3RhdGVC
bG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0ZXhC
dWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1YWRW
ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBT
SEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW2ld
KQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNlKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0xLCAtMSwKKyAg
ICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQorICAgIH07CisK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNV
TFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVTQUdF
X1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5VTEwp
OworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2b2lkICpsb2NrUHRy
OworICAgIG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKKyAgICBt
ZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRleEJ1ZmZl
ci0+VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVu
dHNbXSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwgRDNEREVD
TE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAgICAgRDNE
REVDTF9FTkQoKQorICAgIH07CisKKyAgICBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFy
YXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Citi
b29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUs
CisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6
KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSoqKSwKKyAgICAgICAg
ICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVy
KShEM0RTaGFkZXJUeXBlKikpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CisKKyAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAobUNvbXBp
bGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIgPSBzdGF0
aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSUQzRFhCdWZmZXIgKnNoYWRlckNvZGU7CisgICAg
ICAgIEhSRVNVTFQgaHIgPSBEM0RYQ29tcGlsZVNoYWRlcihtU2hhZGVyU291cmNlW3NvdXJjZV0s
IHN0cmxlbihtU2hhZGVyU291cmNlW3NvdXJjZV0pLCBOVUxMLCBOVUxMLCAibWFpbiIsIHByb2Zp
bGUsIDAsICZzaGFkZXJDb2RlLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY29tcGlsZSAlcyBzaGFk
ZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClz
b3VyY2UsIGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGhyID0gKGRldmljZS0+KmNyZWF0ZVNoYWRlcikoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQq
PihzaGFkZXJDb2RlLT5HZXRCdWZmZXJQb2ludGVyKCkpLCAmc2hhZGVyKTsKKyAgICAgICAgaWYg
KEZBSUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlckNvZGUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSAlcyBzaGFkZXIgZm9yIGJsaXQg
b3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNoYWRlckNv
ZGUtPlJlbGVhc2UoKTsKKworICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0gPSBzaGFk
ZXI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IChkZXZpY2UtPipzZXRTaGFkZXIpKHNoYWRl
cik7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRv
IHNldCAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJv
ZmlsZSwgKGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihTaGFkZXJJ
ZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
PihzaGFkZXIsIG1Db250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0M0RE
ZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhT
aGFkZXIpOworfQorCitib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikK
K3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCBt
Q29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0M0REZXZpY2U5OjpDcmVh
dGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKK30KKwor
UkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29u
c3QKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXREZXNjKCZk
ZXNjKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAwOworICAgIHJlY3QudG9w
ID0gMDsKKyAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRvbSA9IGRl
c2MuSGVpZ2h0OworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94RmlsdGVy
KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQorewor
ICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291
cmNlLCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0
VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0
KTsKKworICAgIHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworICAgIHNldFBp
eGVsU2hhZGVyKFNIQURFUl9QU19QQVNTVEhST1VHSCk7CisKKyAgICBzZXRDb21tb25CbGl0U3Rh
dGUoKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwg
RDNEVEVYRl9MSU5FQVIpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBf
TUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CisKKyAgICBzZXRWaWV3cG9ydChnZXRTdXJmYWNl
UmVjdChkZXN0KSwgMCwgMCk7CisKKyAgICByZW5kZXIoKTsKKworICAgIHRleHR1cmUtPlJlbGVh
c2UoKTsKKworICAgIHJlc3RvcmVTdGF0ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBS
RUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4dHVy
ZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QpOwor
ICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIHNhdmVT
dGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0Vmlld3BvcnQoc291cmNlUmVj
dCwgeG9mZnNldCwgeW9mZnNldCk7CisKKyAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKyAgICBp
ZiAoc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoZGVzdEZvcm1hdCkpCisgICAgeworICAgICAgICBy
ZW5kZXIoKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3Jl
U3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldEZvcm1hdENv
bnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KQoreworICAgIGJvb2wgb2theSA9IHNldFZl
cnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworCisgICAgc3dpdGNoIChkZXN0Rm9ybWF0
KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdMX1JH
QkE6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgIG9r
YXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNLKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNI
QURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW9r
YXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7IFgg
PSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAgICAvLyBUaGUgbWVhbmluZyBvZiB0aGlz
IGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4KKyAgICAv
LyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgorICAgIGZs
b2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICBzd2l0Y2ggKGRlc3RGb3Jt
YXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xf
UkdCQToKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtaXSA9IDE7
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgcHNDb25zdDBb
WF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAg
ICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBbWV0gPSAxOwor
ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAg
IHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZ2V0RGV2aWNl
KCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1
cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCit7
CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIHNv
dXJjZURlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAvLyBD
b3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4dHVy
ZTkgKnRleHR1cmU7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUo
c291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBz
b3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1h
dCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgIHJlc3VsdCA9IHRleHR1
cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRleHR1cmUt
PlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGly
ZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisgICAgUkVDVCBkM2RTb3VyY2VSZWN0Owor
ICAgIGQzZFNvdXJjZVJlY3QubGVmdCA9IHNvdXJjZVJlY3QubGVmdDsKKyAgICBkM2RTb3VyY2VS
ZWN0LnJpZ2h0ID0gc291cmNlUmVjdC5yaWdodDsKKyAgICBkM2RTb3VyY2VSZWN0LnRvcCA9IHNv
dXJjZVJlY3QudG9wOworICAgIGQzZFNvdXJjZVJlY3QuYm90dG9tID0gc291cmNlUmVjdC5ib3R0
b207CisKKyAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmljZS0+U3Ry
ZXRjaFJlY3Qoc3VyZmFjZSwgJmQzZFNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBE
M0RURVhGX05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiB0ZXh0dXJl
OworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkgdnA7CisgICAgdnAuWCAgICAg
ID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OworICAgIHZwLldpZHRoICA9IHNv
dXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgdnAuSGVpZ2h0ID0gc291cmNl
UmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5NaW5aICAgPSAwLjBmOworICAg
IHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOworCisgICAg
ZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5IZWln
aHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBoYWxm
UGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgpCit7
CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBkZXZp
Y2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJM
RV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVf
R1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7CisKKyAgICBkZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9J
TlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRVUkUs
IEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NV
LCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNE
U0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZW5kZXIo
KQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgaHIgPSBk
ZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVv
ZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZl
cnRleERlY2xhcmF0aW9uKTsKKworICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICBociA9
IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKK30KKwor
dm9pZCBCbGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworCisgICAgSFJFU1VMVCBocjsKKworICAgIGRldmljZS0+R2V0RGVwdGhT
dGVuY2lsU3VyZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBkZXZpY2UtPkdldFJlbmRl
clRhcmdldCgwLCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJs
b2NrID09IE5VTEwpCisgICAgeworICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2Nr
KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHNldENvbW1vbkJs
aXRTdGF0ZSgpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0WzRdID0g
eyAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7
CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3Qs
IDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAgICBkZXZp
Y2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOworCisgICAgICAg
IEQzRFZJRVdQT1JUOSBkdW1teVZwOworICAgICAgICBkdW1teVZwLlggPSAwOworICAgICAgICBk
dW1teVZwLlkgPSAwOworICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKKyAgICAgICAgZHVtbXlW
cC5IZWlnaHQgPSAxOworICAgICAgICBkdW1teVZwLk1pblogPSAwOworICAgICAgICBkdW1teVZw
Lk1heFogPSAxOworCisgICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnApOworCisg
ICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAgICAgICBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7CisKKyAgICAgICAgZGV2
aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAg
ICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7CisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0
ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOworICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlc3RvcmVTdGF0
ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAg
ICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWRE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVM
TDsKKyAgICB9CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJU
YXJnZXQpOworICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7CisgICAg
ICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRSZW5kZXJU
YXJnZXQgPSBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5V
TEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvQmxpdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJH
TEVTdjIvQmxpdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX0JMSVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1
ZGUgPG1hcD4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
KyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCitu
YW1lc3BhY2UgZ2wKK3sKK2NsYXNzIENvbnRleHQ7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGlj
OgorICAgIGV4cGxpY2l0IEJsaXQoQ29udGV4dCAqY29udGV4dCk7CisgICAgfkJsaXQoKTsKKwor
ICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8g
c291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAg
aW4gdXBwZXItbGVmdCkKKyAgICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQg
ZGVzdEZvcm1hdCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1w
bGUsIGlmIGRlc3RGb3JtYXQgPSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9y
Y2VkIHRvIDAuCisgICAgYm9vbCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3Vy
Y2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgICAvLyAy
eDIgYm94IGZpbHRlciBzYW1wbGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KKyAgICAvLyBSZXF1aXJl
cyB0aGF0IHNvdXJjZSBpcyBSR0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBz
b3VyY2UuCisgICAgYm9vbCBib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgIHByaXZhdGU6CisgICAgQ29udGV4dCAqbUNvbnRl
eHQ7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247CisK
KyAgICB2b2lkIGluaXRHZW9tZXRyeSgpOworCisgICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hh
ZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1
cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNv
dXJjZVJlY3QpOworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0U3Rh
dGUoKTsKKyAgICBSRUNUIGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
KSBjb25zdDsKKworICAgIC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNo
YWRlcnMgYW5kIG1TaGFkZXJTb3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAgICAg
ICAgU0hBREVSX1ZTX1NUQU5EQVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAgICAg
IFNIQURFUl9QU19QQVNTVEhST1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKKyAg
ICAgICAgU0hBREVSX1BTX0NPTVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAorICAg
IH07CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2VbXTsKKwor
ICAgIC8vIFRoaXMgYWN0dWFsbHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJ
RGlyZWN0M0RQaXhlbFNoYWRlcjkgY2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICpt
Q29tcGlsZWRTaGFkZXJzW1NIQURFUl9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNE
U2hhZGVyVHlwZT4KKyAgICBib29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNo
YXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3Qz
RERldmljZTk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUgKiop
LAorICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoq
c2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIo
U2hhZGVySWQgc2hhZGVyKTsKKyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRl
cik7CisgICAgdm9pZCByZW5kZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9p
ZCByZXN0b3JlU3RhdGUoKTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVC
bG9jazsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptU2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oQmxpdCk7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9I
XwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL0J1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyLmNwcDogSW1wbGVt
ZW50cyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4
IGFuZC9vcgorLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45
IHBhZ2UgMjEuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisKK25hbWVzcGFjZSBn
bAoreworCitCdWZmZXI6OkJ1ZmZlcigpCit7CisgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICBt
U2l6ZSA9IDA7CisgICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOworfQorCitCdWZmZXI6On5C
dWZmZXIoKQoreworICAgIGRlbGV0ZVtdIG1Db250ZW50czsKK30KKwordm9pZCBCdWZmZXI6OmJ1
ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2Up
Cit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1Db250ZW50
czsKKyAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSAh
PSBtU2l6ZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKKyAgICAgICAgbUNv
bnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07CisgICAgICAgIG1lbXNldChtQ29udGVudHMsIDAs
IHNpemUpOworICAgIH0KKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDApCisgICAg
eworICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICBt
U2l6ZSA9IHNpemU7CisgICAgbVVzYWdlID0gdXNhZ2U7Cit9CisKK3ZvaWQgQnVmZmVyOjpidWZm
ZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zm
c2V0KQoreworICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZzZXQsIGRhdGEsIHNpemUpOworfQor
Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUg
Z2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgor
Ly8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEu
CisKKyNpZm5kZWYgTElCR0xFU1YyX0JVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVS
X0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQnVmZmVyCit7CisgIHB1Ymxp
YzoKKyAgICBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgfkJ1ZmZlcigpOworCisgICAgdm9pZCBi
dWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdl
KTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBz
aXplLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJuIG1Db250
ZW50czsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KKyAgICBH
TGVudW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOworCisgICAgR0x1Ynl0ZSAqbUNvbnRl
bnRzOworICAgIHNpemVfdCBtU2l6ZTsKKyAgICBHTGVudW0gbVVzYWdlOworfTsKKworfQorCisj
ZW5kaWYgICAvLyBMSUJHTEVTVjJfQlVGRkVSX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5OTAgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBj
bGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcg
b3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVH
TENvbnRleHQuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1
ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlckJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9i
YWNrZW5kLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgiCisKKyN1bmRlZiBuZWFyCisjdW5kZWYg
ZmFyCisKK25hbWVzcGFjZSBnbAoreworQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnKQorICAgIDogbUNvbmZpZyhjb25maWcpCit7CisgICAgc2V0Q2xlYXJDb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAx
LjBmOworICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7CisKKyAgICBtU3RhdGUuY3Vs
bEZhY2UgPSBmYWxzZTsKKyAgICBtU3RhdGUuY3VsbE1vZGUgPSBHTF9CQUNLOworICAgIG1TdGF0
ZS5mcm9udEZhY2UgPSBHTF9DQ1c7CisgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGZhbHNlOworICAg
IG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9MRVNTOworICAgIG1TdGF0ZS5ibGVuZCA9IGZhbHNlOwor
ICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IEdMX09ORTsKKyAgICBtU3RhdGUuc291cmNlQmxl
bmRBbHBoYSA9IEdMX09ORTsKKyAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsKKyAg
ICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJPOworICAgIG1TdGF0ZS5ibGVuZEVxdWF0
aW9uUkdCID0gR0xfRlVOQ19BREQ7CisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdM
X0ZVTkNfQUREOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IDA7CisgICAgbVN0YXRlLmJs
ZW5kQ29sb3IuZ3JlZW4gPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSAwOworICAg
IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBm
YWxzZTsKKyAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0
ZW5jaWxSZWYgPSAwOworICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IC0xOworICAgIG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrID0gLTE7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FM
V0FZUzsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAwOworICAgIG1TdGF0ZS5zdGVuY2ls
QmFja01hc2sgPSAtIDE7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gLTE7Cisg
ICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NE
ZXB0aEZhaWwgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdM
X0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxs
ID0gZmFsc2U7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOworICAgIG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSAwLjBmOworICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRv
Q292ZXJhZ2UgPSBmYWxzZTsKKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsKKyAg
ICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IDEuMGY7CisgICAgbVN0YXRlLnNhbXBsZUNv
dmVyYWdlSW52ZXJ0ID0gZmFsc2U7CisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7Cisg
ICAgbVN0YXRlLmRpdGhlciA9IHRydWU7CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9
IEdMX0RPTlRfQ0FSRTsKKworICAgIG1TdGF0ZS5saW5lV2lkdGggPSAxLjBmOworCisgICAgbVN0
YXRlLnZpZXdwb3J0WCA9IDA7CisgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgbVN0YXRl
LnZpZXdwb3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUu
dmlld3BvcnRIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7CisgICAgbVN0YXRl
LnpOZWFyID0gMC4wZjsKKyAgICBtU3RhdGUuekZhciA9IDEuMGY7CisKKyAgICBtU3RhdGUuc2Np
c3NvclggPSAwOworICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7CisgICAgbVN0YXRlLnNjaXNzb3JX
aWR0aCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLldpZHRoOworICAgIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OworCisgICAgbVN0YXRlLmNvbG9yTWFz
a1JlZCA9IHRydWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0dyZWVuID0gdHJ1ZTsKKyAgICBtU3Rh
dGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gdHJ1
ZTsKKyAgICBtU3RhdGUuZGVwdGhNYXNrID0gdHJ1ZTsKKworICAgIC8vIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuNyBwYWdlIDgzOgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBU
RVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVfTUFQIGhhdmUgdHdvZGltZW5zaW9uYWwKKyAgICAv
LyBhbmQgY3ViZSBtYXAgdGV4dHVyZSBzdGF0ZSB2ZWN0b3JzIHJlc3BlY3RpdmVseSBhc3NvY2lh
dGVkIHdpdGggdGhlbS4KKyAgICAvLyBJbiBvcmRlciB0aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0
aWFsIHRleHR1cmVzIG5vdCBiZSBsb3N0LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHRleHR1cmUKKyAg
ICAvLyBvYmplY3RzIGFsbCBvZiB3aG9zZSBuYW1lcyBhcmUgMC4KKworICAgIG1UZXh0dXJlMkRa
ZXJvID0gbmV3IFRleHR1cmUyRCh0aGlzKTsKKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvID0gbmV3
IFRleHR1cmVDdWJlTWFwKHRoaXMpOworCisgICAgbUNvbG9yYnVmZmVyWmVybyA9IE5VTEw7Cisg
ICAgbURlcHRoYnVmZmVyWmVybyA9IE5VTEw7CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gTlVM
TDsKKworICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBtU3RhdGUuYXJyYXlCdWZm
ZXIgPSAwOworICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRUZXh0
dXJlQ3ViZU1hcCgwKTsKKyAgICBiaW5kVGV4dHVyZTJEKDApOworICAgIGJpbmRGcmFtZWJ1ZmZl
cigwKTsKKyAgICBiaW5kUmVuZGVyYnVmZmVyKDApOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7
IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAo
aW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBs
ZXIrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBtSW5j
b21wbGV0ZVRleHR1cmVzW3R5cGVdID0gTlVMTDsKKyAgICB9CisKKyAgICBtU3RhdGUuY3VycmVu
dFByb2dyYW0gPSAwOworCisgICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1TdGF0
ZS51bnBhY2tBbGlnbm1lbnQgPSA0OworCisgICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxMOworICAg
IG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxM
OworICAgIG1CbGl0ID0gTlVMTDsKKworICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworICAgIG1J
bnZhbGlkVmFsdWUgPSBmYWxzZTsKKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworICAg
IG1PdXRPZk1lbW9yeSA9IGZhbHNlOworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24g
PSBmYWxzZTsKKworICAgIG1IYXNCZWVuQ3VycmVudCA9IGZhbHNlOworCisgICAgbU1hc2tlZENs
ZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7CisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworQ29u
dGV4dDo6fkNvbnRleHQoKQoreworICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CisKKyAg
ICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgfQor
CisgICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOworICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBa
ZXJvOworCisgICAgZGVsZXRlIG1Db2xvcmJ1ZmZlclplcm87CisgICAgZGVsZXRlIG1EZXB0aGJ1
ZmZlclplcm87CisgICAgZGVsZXRlIG1TdGVuY2lsYnVmZmVyWmVybzsKKworICAgIGRlbGV0ZSBt
QnVmZmVyQmFja0VuZDsKKyAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOworICAgIGRlbGV0
ZSBtSW5kZXhEYXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUJsaXQ7CisKKyAgICB3aGlsZSAoIW1C
dWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFw
LmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5
KCkpCisgICAgeworICAgICAgICBkZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZp
cnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZVNoYWRlcihtU2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisK
KyAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisK
KyAgICB3aGlsZSAoIW1SZW5kZXJidWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVJlbmRlcmJ1ZmZlcihtUmVuZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9
CisKKyAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxl
dGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICBpZiAo
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSkKKyAgICB7CisgICAgICAgIG1NYXNrZWRDbGVhclNhdmVk
U3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQo
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAo
IW1IYXNCZWVuQ3VycmVudCkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDYXBzID0gZGlzcGxheS0+
Z2V0RGV2aWNlQ2FwcygpOworCisgICAgICAgIG1CdWZmZXJCYWNrRW5kID0gbmV3IER4OUJhY2tF
bmQodGhpcywgZGV2aWNlKTsKKyAgICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRl
eERhdGFNYW5hZ2VyKHRoaXMsIG1CdWZmZXJCYWNrRW5kKTsKKyAgICAgICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAg
ICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CisKKyAgICAgICAgaW5pdEV4dGVuc2lvblN0cmlu
ZygpOworCisgICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOworICAgICAgICBtU3RhdGUudmll
d3BvcnRZID0gMDsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRX
aWR0aCgpOworICAgICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWln
aHQoKTsKKworICAgICAgICBtU3RhdGUuc2Npc3NvclggPSAwOworICAgICAgICBtU3RhdGUuc2Np
c3NvclkgPSAwOworICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lk
dGgoKTsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQo
KTsKKworICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFdy
YXAgdGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQg
YXNzaWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZh
dWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOwor
CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1ZmZlcigpOwor
ICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVs
dFJlbmRlclRhcmdldCk7CisgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyWmVybyA9IG5ldyBE
ZXB0aGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOworICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZm
ZXJaZXJvID0gbmV3IFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsKKworICAgIHNldEZyYW1l
YnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOworICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xv
cmJ1ZmZlclplcm8pOworICAgIHNldERlcHRoYnVmZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOwor
ICAgIHNldFN0ZW5jaWxidWZmZXJaZXJvKHN0ZW5jaWxidWZmZXJaZXJvKTsKKworICAgIGZyYW1l
YnVmZmVyWmVyby0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICBmcmFt
ZWJ1ZmZlclplcm8tPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJh
bWVidWZmZXJaZXJvLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisKKyAg
ICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICBpZiAoZGVwdGhTdGVuY2ls
KQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorICAgIAor
ICAgIGlmIChtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPT0gRDNEUFNfVkVSU0lPTigz
LCAwKSkKKyAgICB7CisgICAgICAgIG1Qc1Byb2ZpbGUgPSAicHNfM18wIjsKKyAgICAgICAgbVZz
UHJvZmlsZSA9ICJ2c18zXzAiOworICAgIH0KKyAgICBlbHNlICAvLyBlZ2w6OkRpc3BsYXkgZ3Vh
cmFudGVlcyBzdXBwb3J0IGZvciBhdCBsZWFzdCAyLjAKKyAgICB7CisgICAgICAgIG1Qc1Byb2Zp
bGUgPSAicHNfMl8wIjsKKyAgICAgICAgbVZzUHJvZmlsZSA9ICJ2c18yXzAiOworICAgIH0KKwor
ICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQg
YWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBp
cyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcuCit2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURp
cnR5KCkKK3sKKyAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRQcm9ncmFtID0gMDsKKworICAg
IG1DbGVhclN0YXRlRGlydHkgPSB0cnVlOworICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Cisg
ICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsK
KyAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0
cnVlOworICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVNjaXNzb3JT
dGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURp
dGhlclN0YXRlRGlydHkgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3Io
ZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCit7CisgICAg
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5ncmVlbiA9IGdyZWVuOworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJs
dWU7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOworfQorCit2b2lk
IENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpCit7CisgICAgbVN0YXRlLmRlcHRo
Q2xlYXJWYWx1ZSA9IGRlcHRoOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChp
bnQgc3RlbmNpbCkKK3sKKyAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOwor
fQorCit2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAo
bVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbEZh
Y2UgPSBlbmFibGVkOworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30K
KworYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdGF0ZS5jdWxsRmFjZTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0g
bW9kZSkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUpCisgICAgeworICAgICAg
ICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQor
eworICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9IGZyb250KQorICAgIHsKKyAgICAgICAgbVN0
YXRlLmZyb250RmFjZSA9IGZyb250OworICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3Rh
dGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7
CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVw
dGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCit7CisgICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0g
ZGVwdGhGdW5jKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsK
KyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpCit7CisgICAgbVN0YXRl
LnpOZWFyID0gek5lYXI7CisgICAgbVN0YXRlLnpGYXIgPSB6RmFyOworfQorCit2b2lkIENvbnRl
eHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVu
YWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOworICAgICAgICBt
QmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNCbGVu
ZEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuYmxlbmQ7Cit9CisKK3ZvaWQg
Q29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdC
LCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpCit7CisgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0IgfHwKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAh
PSBkZXN0UkdCIHx8CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEp
CisgICAgeworICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7CisgICAg
ICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0UkdCOworICAgICAgICBtU3RhdGUuc291cmNl
QmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOworICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEg
PSBkZXN0QWxwaGE7CisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZs
b2F0IGJsdWUsIGZsb2F0IGFscGhhKQoreworICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQg
IT0gcmVkIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8Cisg
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fAorICAgICAgICBtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZENv
bG9yLnJlZCA9IHJlZDsKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsK
KyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhID0gYWxwaGE7CisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JF
cXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZEVx
dWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9u
QWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0
aW9uUkdCID0gcmdiRXF1YXRpb247CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEg
PSBhbHBoYUVxdWF0aW9uOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQoreworICAg
IGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnN0ZW5jaWxUZXN0OworfQorCit2b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBH
THVpbnQgc3RlbmNpbE1hc2spCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVu
Y2lsRnVuYyB8fAorICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8Cisg
ICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNp
bFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsKKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9
IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdM
ZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNp
bEJhY2tNYXNrKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxC
YWNrRnVuYyB8fAorICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tS
ZWYgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2sp
CisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5j
OworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/
IHN0ZW5jaWxCYWNrUmVmIDogMDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0
ZW5jaWxCYWNrTWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdy
aXRlbWFzaykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdy
aXRlbWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNp
bFdyaXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxC
YWNrV3JpdGVtYXNrKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0g
c3RlbmNpbEJhY2tXcml0ZW1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlv
bnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51
bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9
IHN0ZW5jaWxGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBz
dGVuY2lsUGFzc0RlcHRoRmFpbCB8fAorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNp
bEZhaWwgPSBzdGVuY2lsRmFpbDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWls
ID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
UGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkg
PSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlv
bnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykKK3sKKyAgICBpZiAobVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0ZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0
aFBhc3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJh
Y2tGYWlsOworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNp
bEJhY2tQYXNzRGVwdGhGYWlsOworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGly
dHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0Rmls
bChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBl
bmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxl
ZDsKKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7CisKK30KKwordm9pZCBDb250ZXh0Ojpz
ZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQorewor
ICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKKyAgICAgICAg
bVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1bml0cykKKyAgICB7CisgICAgICAgIG1TdGF0
ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9yOworICAgICAgICBtU3RhdGUucG9seWdvbk9m
ZnNldFVuaXRzID0gdW5pdHM7CisgICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShi
b29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0g
ZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBl
bmFibGVkOworICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCiti
b29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3Zl
cmFnZSA9IGVuYWJsZWQ7CisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAg
IGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fAorICAgICAgICBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52ZXJ0KQorICAgIHsKKyAgICAgICAgbVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVy
YWdlSW52ZXJ0ID0gaW52ZXJ0OworICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Cisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBt
U3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkg
PSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zY2lzc29yVGVzdDsKK30KKwordm9pZCBDb250
ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGl0aGVyICE9
IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKKyAgICAg
ICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojpp
c0RpdGhlckVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOworfQor
Cit2b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKQoreworICAgIG1TdGF0
ZS5saW5lV2lkdGggPSB3aWR0aDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1h
cEhpbnQoR0xlbnVtIGhpbnQpCit7CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhp
bnQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgbVN0YXRlLnZpZXdwb3J0
WCA9IHg7CisgICAgbVN0YXRlLnZpZXdwb3J0WSA9IHk7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lk
dGggPSB3aWR0aDsKKyAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Cit9CisKK3Zv
aWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwg
bVN0YXRlLnNjaXNzb3JZICE9IHkgfHwgCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0g
d2lkdGggfHwgbVN0YXRlLnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAgICAgICAg
bVN0YXRlLnNjaXNzb3JYID0geDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKKyAgICAg
ICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHdpZHRoOworICAgICAgICBtU3RhdGUuc2Npc3Nvckhl
aWdodCA9IGhlaWdodDsKKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0g
cmVkIHx8IG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUu
Y29sb3JNYXNrQmx1ZSAhPSBibHVlIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkK
KyAgICB7CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7CisgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tHcmVlbiA9IGdyZWVuOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9
IGJsdWU7CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOworICAgICAgICBt
TWFza1N0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0
aE1hc2soYm9vbCBtYXNrKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCisg
ICAgeworICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsKKyAgICAgICAgbU1hc2tTdGF0
ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxl
cihpbnQgYWN0aXZlKQoreworICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOworfQor
CitHTHVpbnQgQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtU3RhdGUuZnJhbWVidWZmZXI7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJi
dWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyOwor
fQorCitHTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAoreworICAg
IHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4
QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCit7Cisg
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1FbmFibGVkID0gZW5hYmxlZDsK
K30KKworY29uc3QgQXR0cmlidXRlU3RhdGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRl
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0
ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUs
IEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIgPSBib3VuZEJ1ZmZl
cjsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXplOwor
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7CisgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXpl
ZDsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9IHN0cmlk
ZTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2lu
dGVyOworfQorCitjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKK30KKworLy8gcmV0dXJucyBlbnRpcmUgc2V0
IG9mIGF0dHJpYnV0ZXMgYXMgYSBibG9jaworY29uc3QgQXR0cmlidXRlU3RhdGUgKkNvbnRleHQ6
OmdldFZlcnRleEF0dHJpYkJsb2NrKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVu
dCkKK3sKKyAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQg
Q29udGV4dDo6Z2V0UGFja0FsaWdubWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrQWxpZ25tZW50OworfQorCit2b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGlu
dCBhbGlnbm1lbnQpCit7CisgICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsK
K30KKworR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQg
YnVmZmVyIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIHVuc2ln
bmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUp
ICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisK
KyAgICBtQnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30K
KworLy8gUmV0dXJucyBhbiB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQorR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxl
ID0gMTsKKworICAgIHdoaWxlIChtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFw
LmVuZCgpIHx8IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkg
ICAvLyBTaGFyZWQgbmFtZSBzcGFjZQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIG1TaGFk
ZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBt
U2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAg
ICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwor
Ly8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQorR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAg
d2hpbGUgKG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSB8fCBt
U2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpKSAgIC8vIFNoYXJlZCBu
YW1lIHNwYWNlCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtUHJvZ3Jh
bU1hcFtoYW5kbGVdID0gbmV3IFByb2dyYW0oKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
Ky8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0
ZVRleHR1cmUoKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUg
KG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKSAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1UZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxM
OworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVi
dWZmZXIgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICB1
bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtRnJhbWVidWZmZXJNYXAuZmlu
ZChoYW5kbGUpICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRs
ZSsrOworICAgIH0KKworICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAg
IHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBu
YW1lCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFu
ZGxlKSAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7
CisgICAgfQorCisgICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJl
dHVybiBoYW5kbGU7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZm
ZXIpCit7CisgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFw
LmZpbmQoYnVmZmVyKTsKKworICAgIGlmIChidWZmZXJPYmplY3QgIT0gbUJ1ZmZlck1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgIGRlbGV0
ZSBidWZmZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJP
YmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNo
YWRlcikKK3sKKyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJN
YXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QtPnNlY29uZC0+aXNBdHRhY2hl
ZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNvbmQ7
CisgICAgICAgICAgICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9iamVjdCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNlY29u
ZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4
dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVy
YXRvciBwcm9ncmFtT2JqZWN0ID0gbVByb2dyYW1NYXAuZmluZChwcm9ncmFtKTsKKworICAgIGlm
IChwcm9ncmFtT2JqZWN0ICE9IG1Qcm9ncmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KHByb2dyYW0gIT0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAg
ICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+c2Vjb25kOworICAgICAgICAgICAgbVByb2dyYW1NYXAu
ZXJhc2UocHJvZ3JhbU9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50
IHRleHR1cmUpCit7CisgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1U
ZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7CisKKyAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4
dHVyZU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7CisK
KyAgICAgICAgaWYgKHRleHR1cmUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRl
IHRleHR1cmVPYmplY3QtPnNlY29uZDsKKyAgICAgICAgfQorCisgICAgICAgIG1UZXh0dXJlTWFw
LmVyYXNlKHRleHR1cmVPYmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVG
cmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgRnJhbWVidWZmZXJNYXA6Oml0
ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZm
ZXIpOworCisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGRldGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAg
ICAgICBkZWxldGUgZnJhbWVidWZmZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVm
ZmVyTWFwLmVyYXNlKGZyYW1lYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4
dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVy
YnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFw
LmZpbmQocmVuZGVyYnVmZmVyKTsKKworICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJl
bmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpOworCisgICAgICAgIGRlbGV0ZSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmplY3QpOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1
ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQorICAg
IHsKKyAgICAgICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOworICAgIH0KKwor
ICAgIG1TdGF0ZS5hcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5k
RWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZl
ciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXBb
YnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5
QnVmZmVyID0gYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50
IHRleHR1cmUpCit7CisgICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0g
MCkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmUyRCh0
aGlzKTsKKyAgICB9CisKKyAgICBtU3RhdGUudGV4dHVyZTJEID0gdGV4dHVyZTsKKworICAgIG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0
ZXh0dXJlOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4
dHVyZSkKK3sKKyAgICBpZiAoIWdldFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmVNYXBbdGV4dHVyZV0gPSBuZXcgVGV4dHVyZUN1YmVNYXAo
dGhpcyk7CisgICAgfQorCisgICAgbVN0YXRlLnRleHR1cmVDdWJlTWFwID0gdGV4dHVyZTsKKwor
ICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1w
bGVyXSA9IHRleHR1cmU7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdMdWlu
dCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkK
KyAgICB7CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVi
dWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsK
K30KKwordm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIp
Cit7CisgICAgaWYgKHJlbmRlcmJ1ZmZlciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVuZGVy
YnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9
IG5ldyBSZW5kZXJidWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUucmVuZGVyYnVmZmVyID0g
cmVuZGVyYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dy
YW0pCit7CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
CisKKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAg
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBz
d2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxh
Z2dlZC4KKworICAgIGlmIChwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW1PYmplY3QtPmlzRmxhZ2dl
ZEZvckRlbGV0aW9uKCkpCisgICAgeworICAgICAgICBkZWxldGVQcm9ncmFtKHByaW9yUHJvZ3Jh
bSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1
ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZy
YW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yYnVm
ZmVyWmVybyhDb2xvcmJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJa
ZXJvOworICAgIG1Db2xvcmJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0RGVwdGhidWZmZXJaZXJvKERlcHRoYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1E
ZXB0aGJ1ZmZlclplcm87CisgICAgbURlcHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKK30KKwordm9p
ZCBDb250ZXh0OjpzZXRTdGVuY2lsYnVmZmVyWmVybyhTdGVuY2lsYnVmZmVyICpidWZmZXIpCit7
CisgICAgZGVsZXRlIG1TdGVuY2lsYnVmZmVyWmVybzsKKyAgICBtU3RlbmNpbGJ1ZmZlclplcm8g
PSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZl
ciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtUmVuZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJi
dWZmZXJdOworICAgIG1SZW5kZXJidWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl0gPSBidWZm
ZXI7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUp
Cit7CisgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFu
ZGxlKTsKKworICAgIGlmIChidWZmZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
YnVmZmVyLT5zZWNvbmQ7CisgICAgfQorfQorCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcih1
bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0g
bVNoYWRlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAu
ZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHNoYWRlci0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAq
Q29udGV4dDo6Z2V0UHJvZ3JhbSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFByb2dyYW1N
YXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBp
ZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vj
b25kOworICAgIH0KK30KKworVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBp
bnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkgcmV0dXJuIE5VTEw7CisKKyAgICBU
ZXh0dXJlTWFwOjppdGVyYXRvciB0ZXh0dXJlID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOwor
CisgICAgaWYgKHRleHR1cmUgPT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHR1
cmUtPnNlY29uZDsKKyAgICB9Cit9CisKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRv
ciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAo
ZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmcmFtZWJ1
ZmZlci0+c2Vjb25kOworICAgIH0KK30KKworUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5k
ZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBSZW5kZXJidWZmZXJNYXA6Oml0
ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9IG1SZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisg
ICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biByZW5kZXJidWZmZXItPnNlY29uZDsKKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpDb250ZXh0
OjpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkK
KyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVm
ZmVyKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXIt
PmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5k
ZXIgdGFyZ2V0cyBiYXNlZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICBy
ZXR1cm4gbUNvbG9yYnVmZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
RGVwdGhidWZmZXIgKkNvbnRleHQ6OmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpCit7Cisg
ICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJi
dWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVyYnVm
ZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNEZXB0aGJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRp
ZmZlcmVudCBpbml0aWFsIHJlbmRlciB0YXJnZXRzIGJhc2VkIG9uIHRoZSBhdHRhY2htZW50IHR5
cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtRGVwdGhidWZmZXJaZXJvOworICAgIH0KKworICAg
IHJldHVybiBOVUxMOworfQorCitTdGVuY2lsYnVmZmVyICpDb250ZXh0OjpnZXRTdGVuY2lsYnVm
ZmVyKEdMdWludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIHsKKyAgICAg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsK
KworICAgICAgICBpZiAocmVuZGVyYnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNTdGVuY2lsYnVm
ZmVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGVuY2ls
YnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVy
biBOVUxMOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAgICBy
ZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5hcnJheUJ1ZmZlcik7Cit9CisKK0J1ZmZlciAqQ29udGV4
dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIpOworfQorCitQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50
UHJvZ3JhbSgpCit7CisgICAgcmV0dXJuIGdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFt
KTsKK30KKworVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQoreworICAgIGlmICht
U3RhdGUudGV4dHVyZTJEID09IDApICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZm
ZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBvbiB0aGUgdGFyZ2V0CisgICAgeworICAgICAg
ICByZXR1cm4gbVRleHR1cmUyRFplcm87CisgICAgfQorCisgICAgcmV0dXJuIChUZXh0dXJlMkQq
KWdldFRleHR1cmUobVN0YXRlLnRleHR1cmUyRCk7Cit9CisKK1RleHR1cmVDdWJlTWFwICpDb250
ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCit7CisgICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1h
cCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0
dXJlQ3ViZU1hcFplcm87CisgICAgfQorCisgICAgcmV0dXJuIChUZXh0dXJlQ3ViZU1hcCopZ2V0
VGV4dHVyZShtU3RhdGUudGV4dHVyZUN1YmVNYXApOworfQorCitUZXh0dXJlICpDb250ZXh0Ojpn
ZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkK
K3sKKyAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxl
cl07CisKKyAgICBpZiAodGV4aWQgPT0gMCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
Y2FzZSBTQU1QTEVSXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm87CisgICAgICAgICAgY2FzZSBT
QU1QTEVSX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGdldFRleHR1cmUodGV4aWQpOworfQorCitGcmFtZWJ1ZmZlciAqQ29u
dGV4dDo6Z2V0RnJhbWVidWZmZXIoKQoreworICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3Rh
dGUuZnJhbWVidWZmZXIpOworfQorCitib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBw
bmFtZSwgR0xib29sZWFuICpwYXJhbXMpCit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NP
VkVSQUdFX0lOVkVSVDogICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFz
a1JlZDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOworICAgICAg
ICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0g
bVN0YXRlLmNvbG9yTWFza0FscGhhOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VM
TF9GQUNFOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOworICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdv
bk9mZnNldEZpbGw7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogKnBh
cmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRTogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKKyAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNj
aXNzb3JUZXN0OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7CisgICAgICBjYXNlIEdMX0JMRU5E
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsKKyAgICAgIGNhc2Ug
R0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0
ICpwYXJhbXMpCit7CisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGlu
Y2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KKyAgICAvLyBi
ZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhl
IEdMIEVTIDIuMCBzcGVjIG5hbWVzCisgICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBx
dWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQorICAg
IC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBh
cHBsaWNhdGlvbi4KKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTElO
RV9XSURUSDogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgR0xf
REVQVEhfQ0xFQVJfVkFMVUU6ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1
ZTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAq
cGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3I7ICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZz
ZXRVbml0czsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdF
OgorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsK
KyAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Cisg
ICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOworICAg
ICAgICBwYXJhbXNbMV0gPSBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWDsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0g
PSBtU3RhdGUuek5lYXI7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHBhcmFt
c1swXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBt
U3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLmJsdWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUuYWxwaGE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9DT0xP
UjoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmJsZW5kQ29sb3IucmVkOworICAgICAgICBw
YXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0g
bVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5k
Q29sb3IuYWxwaGE7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6
OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICAvLyBQbGVh
c2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5h
bCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVk
IGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFt
ZXMKKyAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBp
dCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55CisgICAgLy8gY2FzZSwgdGhpcyBzaG91
bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5
IGZpbmQgaXQgaW4gCisgICAgLy8gQ29udGV4dDo6Z2V0RmxvYXR2LgorICAgIHN3aXRjaCAocG5h
bWUpCisgICAgeworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1z
ID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZBUllJTkdfVkVDVE9SUzsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzogKnBhcmFtcyA9IGdsOjpNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUzsgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fQ09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTOiAvKiBubyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVk
ICovICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAg
IC8qIG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVi
dWZmZXI7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNU
SVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNh
bXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JM
RU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVu
ZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJ
T05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTog
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
dGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJ
WEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0la
RTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfU0laRTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
OiAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfRk9STUFUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heCgoaW50
KWdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsIChpbnQpZ2w6Ok1BWF9URVhUVVJFX1NJWkUpOwor
ICAgICAgICAgICAgcGFyYW1zWzBdID0gbWF4RGltZW5zaW9uOworICAgICAgICAgICAgcGFyYW1z
WzFdID0gbWF4RGltZW5zaW9uOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9WSUVXUE9SVDoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKKyAg
ICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsKKyAgICAgICAgcGFyYW1zWzJdID0g
bVN0YXRlLnZpZXdwb3J0V2lkdGg7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9y
dEhlaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAg
ICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1T
dGF0ZS5zY2lzc29yWTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsK
KyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9u
dEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAg
ICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAg
Y2FzZSBHTF9BTFBIQV9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpDb2xv
cmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKKwor
ICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9SRURfQklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9
IGNvbG9yYnVmZmVyLT5nZXRHcmVlblNpemUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0JMVUVfQklUUzogICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0g
Y29sb3JidWZmZXItPmdldEFscGhhU2l6ZSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAg
ICAgZ2w6OkRlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpOworCisgICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAg
ICAgIGdsOjpTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5j
aWxTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUu
YWN0aXZlU2FtcGxlciA+IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZl
U2FtcGxlcl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlcklu
Zm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQor
eworICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQVEhf
Q0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGlzIEZMT0FUIHJhdGhl
ciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4g
VGhpcyBpcyBkdWUKKyAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5h
bGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KKyAgICAvLyBp
ZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZlcnNp
b24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBj
YWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFi
bGUsIHdlCisgICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBU
aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKKyAgICAvLyBhcHBs
aWNhdGlvbi4KKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFM6IC8qIG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzIGFy
ZSBzdXBwb3J0ZWQgKi8gCisgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAg
ICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9BVFRSSUJTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoK
KyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6
CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNl
IEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5B
UllfRk9STUFUUzoKKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
OgorICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6CisgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX0dFTkVS
QVRFX01JUE1BUF9ISU5UOgorICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xf
R1JFRU5fQklUUzoKKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBI
QV9CSVRTOgorICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JJVFM6CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAg
ICBjYXNlIEdMX0NVTExfRkFDRV9NT0RFOgorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgorICAg
ICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRToKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
UkVGOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
UEFTU19ERVBUSF9GQUlMOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19WQUxVRV9NQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BB
U1NfREVQVEhfRkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFT
UzoKKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzoKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JH
QjoKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9E
U1RfUkdCOgorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6CisgICAgICBjYXNlIEdMX0JM
RU5EX0VRVUFUSU9OX1JHQjoKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAg
Y2FzZSBHTF9TVUJQSVhFTF9CSVRTOgorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgor
ICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9T
QU1QTEVfQlVGRkVSUzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAgIGNhc2UgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgor
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgor
ICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVX
UE9SVDoKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6CisgICAgICAgIHsKKyAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjoKKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVN
QVNLOgorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIC8vIENVTExfRkFD
RSB0aHJvdWdoIERJVEhFUiBhcmUgbmF0dXJhbCB0byBJc0VuYWJsZWQsCisgICAgICBjYXNlIEdM
X1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3Vn
aCB0aGUgR2V0e1R5cGV9diBxdWVyaWVzLgorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9f
Q09WRVJBR0U6IC8vIEZvciB0aGlzIHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBi
b29sLW5hdHVyYWwKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOgorICAgICAgY2FzZSBH
TF9TQ0lTU09SX1RFU1Q6CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDoKKyAgICAgIGNhc2Ug
R0xfREVQVEhfVEVTVDoKKyAgICAgIGNhc2UgR0xfQkxFTkQ6CisgICAgICBjYXNlIEdMX0RJVEhF
UjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAg
Km51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0NPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09M
OworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToK
KyAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6CisgICAgICBjYXNlIEdMX0xJTkVfV0lE
VEg6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICB7CisgICAg
ICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVF
OgorICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5
cGUgPSBHTF9GTE9BVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0
IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAor
Ly8gc2Npc3NvciByZWN0YW5nbGUgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCitib29sIENvbnRl
eHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCByZW5k
ZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KCk7CisgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNl
cmlhbCkKKyAgICB7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRh
cmdldCk7CisgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0
U2VyaWFsOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclNlcmlhbCgpOworICAgIGlmIChkZXB0aGJ1
ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsKQorICAgIHsKKyAgICAgICAg
ZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7CisgICAgICAgIG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB9CisKKyAg
ICBEM0RWSUVXUE9SVDkgdmlld3BvcnQ7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAg
cmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKKworICAgIGlmIChpZ25vcmVWaWV3cG9ydCkK
KyAgICB7CisgICAgICAgIHZpZXdwb3J0LlggPSAwOworICAgICAgICB2aWV3cG9ydC5ZID0gMDsK
KyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICB2aWV3cG9ydC5I
ZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7CisgICAg
ICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICB2aWV3cG9ydC5YID0gc3RkOjptYXgobVN0YXRlLnZpZXdwb3J0WCwgMCk7CisgICAgICAgIHZp
ZXdwb3J0LlkgPSBzdGQ6Om1heChtU3RhdGUudmlld3BvcnRZLCAwKTsKKyAgICAgICAgdmlld3Bv
cnQuV2lkdGggPSBzdGQ6Om1pbihtU3RhdGUudmlld3BvcnRXaWR0aCwgKGludClkZXNjLldpZHRo
IC0gKGludCl2aWV3cG9ydC5YKTsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4o
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAoaW50KWRlc2MuSGVpZ2h0IC0gKGludCl2aWV3cG9ydC5Z
KTsKKyAgICAgICAgdmlld3BvcnQuTWluWiA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKKyAgICAg
ICAgdmlld3BvcnQuTWF4WiA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOworICAgIH0KKworICAgIGlm
ICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0LkhlaWdodCA8PSAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyCisgICAgfQorCisgICAg
ZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmlld3BvcnQpOworCisgICAgaWYgKG1TY2lzc29yU3RhdGVE
aXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFJFQ1QgcmVjdCA9IHttU3RhdGUuc2Npc3NvclgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1T
dGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHR9OworCisgICAgICAg
ICAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0KTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6
ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAg
IEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAxLjBmIC8gdmlld3BvcnQu
SGVpZ2h0fTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxT
aXplLCAxLCAoR0xmbG9hdCopJnh5KTsKKworICAgICAgICBHTGludCB3aW5kb3cgPSBwcm9ncmFt
T2JqZWN0LT5nZXREeFdpbmRvd0xvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9
IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIu
MGYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCAr
IG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChmbG9hdCltU3RhdGUudmlld3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07
CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm00ZnYod2luZG93LCAxLCAoR0xmbG9h
dCopJndoeHkpOworCisgICAgICAgIEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhE
ZXB0aExvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgZHpbMl0gPSB7KG1TdGF0ZS56RmFyIC0g
bVN0YXRlLnpOZWFyKSAvIDIuMGYsIChtU3RhdGUuek5lYXIgKyBtU3RhdGUuekZhcikgLyAyLjBm
fTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgKEdMZmxv
YXQqKSZkeik7CisKKyAgICAgICAgR0xpbnQgbmVhciA9IHByb2dyYW1PYmplY3QtPmdldERlcHRo
UmFuZ2VOZWFyTG9jYXRpb24oKTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFm
dihuZWFyLCAxLCAmbVN0YXRlLnpOZWFyKTsKKworICAgICAgICBHTGludCBmYXIgPSBwcm9ncmFt
T2JqZWN0LT5nZXREZXB0aFJhbmdlRmFyTG9jYXRpb24oKTsKKyAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTFmdihmYXIsIDEsICZtU3RhdGUuekZhcik7CisKKyAgICAgICAgR0xpbnQg
ZGlmZiA9IHByb2dyYW1PYmplY3QtPmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKTsKKyAgICAg
ICAgR0xmbG9hdCB6RGlmZiA9IG1TdGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyOworICAgICAgICBw
cm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWZ2KGRpZmYsIDEsICZ6RGlmZik7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRl
IChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywgc3RlbmNpbGluZywgZXRjKSB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0g
ZHJhd01vZGUpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAg
ICBHTGludCBmcm9udENDVyA9IHByb2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigp
OworICAgIEdMaW50IGNjdyA9IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7CisgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7CisKKyAgICBHTGlu
dCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRp
b24oKTsKKyAgICBHTGludCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7
CisgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3
YXlzRnJvbnQpOworCisgICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkp
CisgICAgeworICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVy
dEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1DdWxsU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGF0ZURp
cnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJV
RSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJk
eDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtRGVwdGhT
dGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCisg
ICAgeworICAgICAgICBpZiAobVN0YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisg
ICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhB
ICYmIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
JiYKKyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FM
UEhBICYmIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3Ip
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RD
T0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
b3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+
KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJs
ZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3Rh
dGUuZGVzdEJsZW5kUkdCKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0JMRU5ET1AsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJH
QikpOworCisgICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5z
b3VyY2VCbGVuZEFscGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0Ig
IT0gbVN0YXRlLmRlc3RCbGVuZEFscGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFM
UEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3Rh
dGUuc291cmNlQmxlbmRBbHBoYSkpOworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfREVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0
ZS5kZXN0QmxlbmRBbHBoYSkpOworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSkpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
RVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAg
ICAgbUJsZW5kU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbFN0
YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5z
dGVuY2lsVGVzdCAmJiBoYXNTdGVuY2lsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUp
OworCisgICAgICAgICAgICAvLyBGSVhNRTogVW5zdXBwb3J0ZWQgYnkgRDNEOQorICAgICAgICAg
ICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNf
U1RFTkNJTFJFRjsKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19D
Q1dfU1RFTkNJTE1BU0sgPSBEM0RSU19TVEVOQ0lMTUFTSzsKKyAgICAgICAgICAgIGNvbnN0IEQz
RFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5D
SUxXUklURU1BU0s7CisgICAgICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0g
bVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5z
dGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiB8fCAKKyAgICAgICAgICAgICAgICBt
U3RhdGUuc3RlbmNpbE1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBFUlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0
ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZh
bGlkIHVuZGVyIFdlYkdMLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUg
bWF4aW11bSBzaXplIG9mIHRoZSBzdGVuY2lsIHJlZgorICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3Rl
bmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
KCk7CisgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXIt
PmdldFN0ZW5jaWxTaXplKCkpIC0gMTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sg
OiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1T
dGF0ZS5zdGVuY2lsRnVuYykpOworCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0ND
V19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBt
U3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNL
IDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8g
RDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbEZhaWwpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJ
TFpGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZl
cnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNf
U1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBh
c3NEZXB0aFBhc3MpKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0ND
V19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8g
RDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0
ZW5jaWxCYWNrRnVuYykpOworCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NU
RU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBt
U3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxN
QVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tGYWlsKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTFpGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5D
SUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0
eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtTWFza1N0YXRlRGlydHkpCisgICAgeworICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4
OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tH
cmVlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0
ZS5jb2xvck1hc2tBbHBoYSkpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pXUklURUVOQUJMRSwgbVN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAg
ICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1Qb2x5Z29uT2Zm
c2V0U3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZp
bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBnZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGRl
cHRoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9s
eWdvbk9mZnNldEZhY3RvcikpOworICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxk
ZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVw
dGhTaXplKCkpKTsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0aEJpYXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgMCk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7CisgICAgICAgIH0KKworICAg
ICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
bUNvbmZpZy0+bU11bHRpU2FtcGxlICE9IDAgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgewor
ICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVk
LiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVu
dGVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAobURpdGhlclN0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRS
VUUgOiBGQUxTRSk7CisKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9
CisKKyAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKK30KKworLy8gRmlsbCBpbiB0aGUgc2Vt
YW50aWNJbmRleCBmaWVsZCBvZiB0aGUgYXJyYXkgb2YgVHJhbnNsYXRlZEF0dHJpYnV0ZXMgYmFz
ZWQgb24gdGhlIGFjdGl2ZSBHTFNMIHByb2dyYW0uCit2b2lkIENvbnRleHQ6Omxvb2t1cEF0dHJp
YnV0ZU1hcHBpbmcoVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmli
dXRlc1tpXS5zZW1hbnRpY0luZGV4ID0gZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0U2VtYW50aWNJ
bmRleChpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVy
dGV4QnVmZmVyKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAq
dXNlSW5kZXhpbmcsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBUcmFu
c2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdM
ZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGZpcnN0LCBj
b3VudCwgdHJhbnNsYXRlZCk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0
cmFuc2xhdGVkKTsKKworICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3
KHRyYW5zbGF0ZWQpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmVuYWJsZWQgJiYgdHJh
bnNsYXRlZFtpXS5ub25BcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gbUluZGV4
RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlVW5pbmRleGVkKG1vZGUsIGNvdW50LCBpbmRl
eEluZm8pOworICAgICAgICAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBJbmRpY2VzUHJlRHJhdygqaW5kZXhJbmZvKTsKKwor
ICAgICAgICAgICAgKnVzZUluZGV4aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBHTF9O
T19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgICp1c2VJbmRleGluZyA9IGZhbHNlOwor
ICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4
QnVmZmVyKGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBUcmFu
c2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdM
ZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGluZGV4SW5m
by5taW5JbmRleCwgaW5kZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCB0cmFu
c2xhdGVkKTsKKworICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICBs
b29rdXBBdHRyaWJ1dGVNYXBwaW5nKHRyYW5zbGF0ZWQpOworCisgICAgICAgIG1CdWZmZXJCYWNr
RW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOworICAgIH0KKworICAgIHJl
dHVybiBlcnI7Cit9CisKKy8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkg
YmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCitHTGVudW0gQ29udGV4dDo6YXBwbHlJ
bmRleEJ1ZmZlcihjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBH
TGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1vZGUsIHR5
cGUsIGNvdW50LCBnZXRCdWZmZXIobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciksIGluZGljZXMs
IGluZGV4SW5mbyk7CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAg
ICAgbUJ1ZmZlckJhY2tFbmQtPnNldHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisgICAg
fQorCisgICAgcmV0dXJuIGVycjsKK30KKworLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hh
ZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBw
bHlTaGFkZXJzKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2Uo
KTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVy
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UGl4ZWxTaGFkZXIoKTsKKworICAgIGRldmljZS0+U2V0VmVy
dGV4U2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhl
bFNoYWRlcik7CisKKyAgICBpZiAocHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxp
ZWRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3Jt
cygpOworICAgICAgICBwcm9ncmFtT2JqZWN0LT5kaXJ0eUFsbFNhbXBsZXJzKCk7CisgICAgICAg
IG1BcHBsaWVkUHJvZ3JhbSA9IHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpOworICAgIH0KKwor
ICAgIHByb2dyYW1PYmplY3QtPmFwcGx5VW5pZm9ybXMoKTsKK30KKworLy8gQXBwbGllcyB0aGUg
dGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9p
ZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVu
dFByb2dyYW0oKTsKKworICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICB7CisgICAgICAgIGludCB0ZXh0dXJl
VW5pdCA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJNYXBwaW5nKHNhbXBsZXIpOworICAgICAg
ICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZXJU
eXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbU9iamVjdC0+Z2V0U2FtcGxlclR5cGUoc2FtcGxlcik7
CisKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0
dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworCisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+
aXNTYW1wbGVyRGlydHkoc2FtcGxlcikgfHwgdGV4dHVyZS0+aXNEaXJ0eSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXBsZXRlKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5n
ZXRXcmFwUygpOworICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5n
ZXRXcmFwVCgpOworICAgICAgICAgICAgICAgICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVy
ZS0+Z2V0TWluRmlsdGVyKCk7CisgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIg
PSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVy
dFRleHR1cmVXcmFwKHdyYXBTKSk7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKHNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVy
ZVdyYXAod3JhcFQpKTsKKworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShzYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdGaWx0ZXIo
bWFnRmlsdGVyKSk7CisgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQz
ZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOworICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29u
dmVydE1pbkZpbHRlcihtaW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIpOwor
ICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RT
QU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRl
cik7CisKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXIsIHRl
eHR1cmUtPmdldFRleHR1cmUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0
VGV4dHVyZShzYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRl
eHR1cmUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5zZXRTYW1wbGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmpl
Y3QtPmlzU2FtcGxlckRpcnR5KHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtT2JqZWN0LT5zZXRTYW1wbGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICAgCisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMo
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMpCit7CisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKKworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzeXN0ZW1TdXJmYWNlOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9y
bWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOworCisgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKGRlc2MuTXVs
dGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCisgICAgeworICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJl
Y3QgaW50byBub24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKKyAgICB9CisKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJm
YWNlKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpCisg
ICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN5c3RlbVN1cmZhY2Ut
PlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8g
Z2VuZXJhdGUKKyAgICB9CisKKyAgICBEM0RMT0NLRURfUkVDVCBsb2NrOworICAgIFJFQ1QgcmVj
dCA9IHtzdGQ6Om1heCh4LCAwKSwKKyAgICAgICAgICAgICAgICAgc3RkOjptYXgoeSwgMCksCisg
ICAgICAgICAgICAgICAgIHN0ZDo6bWluKHggKyB3aWR0aCwgKGludClkZXNjLldpZHRoKSwKKyAg
ICAgICAgICAgICAgICAgc3RkOjptaW4oeSArIGhlaWdodCwgKGludClkZXNjLkhlaWdodCl9Owor
CisgICAgcmVzdWx0ID0gc3lzdGVtU3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RM
T0NLX1JFQURPTkxZKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAg
ICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsK
KyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKKyAgICB1
bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7CisKKyAgICBH
THNpemVpIG91dHB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIG1T
dGF0ZS5wYWNrQWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgaisrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
IHI7CisgICAgICAgICAgICBmbG9hdCBnOworICAgICAgICAgICAgZmxvYXQgYjsKKyAgICAgICAg
ICAgIGZsb2F0IGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQg
c2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAg
ICAgICAgICBhID0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYp
ICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdF
MCkgKiAoMS4wZiAvIDB4MDdFMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhG
ODAwKSAqICgxLjBmIC8gMHhGODAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgeHJnYiA9ICoodW5z
aWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAg
ICAgICAgICAgICAgICBhID0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYg
MHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdi
ICYgMHgwM0UwKSAqICgxLjBmIC8gMHgwM0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9ICh4
cmdiICYgMHg3QzAwKSAqICgxLjBmIC8gMHg3QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Ogor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJn
YiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBsb2NrLlBpdGNoKTsK
KworICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7
CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4
MDNFMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAv
IDB4N0MwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3Vy
Y2UgKyA0ICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0g
KGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7CisgICAgICAgICAgICAg
ICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAg
ICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAw
MEZGMDApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgx
LjBmIC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBp
bnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAg
ICAgICBhID0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBG
RikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOworICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2Ig
JiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7CisgICAgICAgICAgICAgICAgICAg
IHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0EyUjEwRzEwQjEwOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAq
IGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAw
MDApICogKDEuMGYgLyAweEMwMDAwMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdi
ICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOworICAgICAgICAgICAgICAgICAg
ICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7CisgICAgICAg
ICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAw
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogciArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOworICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAu
NWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVAorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAg
IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQorICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCisg
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcg
KyAwLjVmKSA8PCA1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXN0ZW1TdXJm
YWNlLT5VbmxvY2tSZWN0KCk7CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Cit9CisK
K3ZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQoreworICAgIEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIWZyYW1l
YnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX0lOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworICAgIERXT1JEIGZsYWdzID0gMDsKKworICAgIGlmICht
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0NP
TE9SX0JVRkZFUl9CSVQ7CisKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xv
cmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWFzayAmIEdM
X0RFUFRIX0JVRkZFUl9CSVQpCisgICAgeworICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZG
RVJfQklUOworICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhTdGVuY2lsKCk7CisKKyAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOworCisgICAg
aWYgKChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBkZXB0aFN0ZW5jaWwpCisgICAg
eworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5H
ZXREZXNjKCZkZXNjKTsKKworICAgICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGVzMmR4OjpHZXRTdGVuY2lsU2l6
ZShkZXNjLkZvcm1hdCk7CisgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNp
bFNpemUpIC0gMTsKKworICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChtYXNrICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldCh0
cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBu
b3QgdGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRDNE
Q09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWUuYWxwaGEpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5ncmVlbiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsKKyAgICBmbG9hdCBkZXB0aCA9
IGNsYW1wMDEobVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSk7CisgICAgaW50IHN0ZW5jaWwgPSBtU3Rh
dGUuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOworCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsK
KworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygm
ZGVzYyk7CisKKyAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZXMyZHg6OkdldEFscGhhU2l6ZShk
ZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhOworCisgICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKKyAgICBj
b25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VU
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKG1TdGF0ZS5jb2xv
ck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVuICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tl
ZCk7CisKKyAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxD
bGVhcikKKyAgICB7CisgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBh
dGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KKyAgICAgICAg
Ly8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFn
Z2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtl
bi4KKyAgICAgICAgSFJFU1VMVCBocjsKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3Rh
dGVCbG9jaygpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxX
QVlTKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwg
RkFMU0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9E
RSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LCAwKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVO
QUJMRSwgRkFMU0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsK
KyAgICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKKworICAgICAgICAgICAgaHIg
PSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOworICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKTsKKworICAgICAgICBpZiAobU1hc2tlZENs
ZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBociA9IG1NYXNr
ZWRDbGVhclNhdmVkU3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisK
KyAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIChtU3Rh
dGUuY29sb3JNYXNrUmVkICAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVN0YXRlLmNvbG9yTWFza0dyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1TdGF0ZS5jb2xvck1hc2tCbHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAw
KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtU3RhdGUuY29sb3JNYXNrQWxwaGEgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhB
IDogMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAmIEQz
RENMRUFSX1NURU5DSUwpKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxX
QVlTKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJF
Riwgc3RlbmNpbCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxPUF9SRVBM
QUNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpG
QUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBkZXZpY2UtPlNldFBpeGVs
U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAg
ICAgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAg
ICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOworCisgICAgICAgIHN0cnVj
dCBWZXJ0ZXgKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgeCwgeSwgeiwgdzsKKyAgICAg
ICAgICAgIEQzRENPTE9SIGRpZmZ1c2U7CisgICAgICAgIH07CisKKyAgICAgICAgVmVydGV4IHF1
YWRbNF07CisgICAgICAgIHF1YWRbMF0ueCA9IDAuMGY7CisgICAgICAgIHF1YWRbMF0ueSA9IChm
bG9hdClkZXNjLkhlaWdodDsKKyAgICAgICAgcXVhZFswXS56ID0gMC4wZjsKKyAgICAgICAgcXVh
ZFswXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFswXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAg
ICAgcXVhZFsxXS54ID0gKGZsb2F0KWRlc2MuV2lkdGg7CisgICAgICAgIHF1YWRbMV0ueSA9IChm
bG9hdClkZXNjLkhlaWdodDsKKyAgICAgICAgcXVhZFsxXS56ID0gMC4wZjsKKyAgICAgICAgcXVh
ZFsxXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFsxXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAg
ICAgcXVhZFsyXS54ID0gMC4wZjsKKyAgICAgICAgcXVhZFsyXS55ID0gMC4wZjsKKyAgICAgICAg
cXVhZFsyXS56ID0gMC4wZjsKKyAgICAgICAgcXVhZFsyXS53ID0gMS4wZjsKKyAgICAgICAgcXVh
ZFsyXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAgICAgcXVhZFszXS54ID0gKGZsb2F0KWRlc2Mu
V2lkdGg7CisgICAgICAgIHF1YWRbM10ueSA9IDAuMGY7CisgICAgICAgIHF1YWRbM10ueiA9IDAu
MGY7CisgICAgICAgIHF1YWRbM10udyA9IDEuMGY7CisgICAgICAgIHF1YWRbM10uZGlmZnVzZSA9
IGNvbG9yOworCisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAgICAgZGV2aWNl
LT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKFZl
cnRleCkpOworCisgICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJV
RSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJM
RSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pC
VUZGRVIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBt
TWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKGZsYWdzKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFn
cywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZHJh
d0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCit7CisgICAg
aWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKKyAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7CisgICAgaW50IHByaW1p
dGl2ZUNvdW50OworCisgICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBj
b3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdl
dChmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0
ZShtb2RlKTsKKworICAgIFRyYW5zbGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOworICAgIGJvb2wg
dXNlSW5kZXhpbmc7CisgICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKG1vZGUsIGZp
cnN0LCBjb3VudCwgJnVzZUluZGV4aW5nLCAmaW5kZXhJbmZvKTsKKyAgICBpZiAoZXJyICE9IEdM
X05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKGVycik7CisgICAgfQorCisg
ICAgYXBwbHlTaGFkZXJzKCk7CisgICAgYXBwbHlUZXh0dXJlcygpOworCisgICAgaWYgKCFnZXRD
dXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghY3VsbFNr
aXBzRHJhdyhtb2RlKSkKKyAgICB7CisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAg
ICAgICAgaWYgKHVzZUluZGV4aW5nKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPkRy
YXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRl
eCwgaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbklu
ZGV4KzEsIGluZGV4SW5mby5vZmZzZXQvaW5kZXhJbmZvLmluZGV4U2l6ZSwgcHJpbWl0aXZlQ291
bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2
aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRpY2VzKQorewor
ICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBpZiAoIWluZGljZXMgJiYg
IW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKKyAgICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7CisgICAgaW50IHByaW1p
dGl2ZUNvdW50OworCisgICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBj
b3VudCwgJnByaW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdl
dChmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0
ZShtb2RlKTsKKworICAgIFRyYW5zbGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOworICAgIEdMZW51
bSBlcnIgPSBhcHBseUluZGV4QnVmZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5k
ZXhJbmZvKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKGVycik7CisgICAgfQorCisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5k
ZXhJbmZvKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKGVycik7CisgICAgfQorCisgICAgYXBwbHlTaGFkZXJzKCk7CisgICAgYXBwbHlU
ZXh0dXJlcygpOworCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBs
ZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgIH0KKworICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKKyAgICB7CisgICAgICAg
IGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFByaW1p
dGl2ZShwcmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5t
aW5JbmRleCwgaW5kZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCBpbmRleElu
Zm8ub2Zmc2V0L2luZGV4SW5mby5pbmRleFNpemUsIHByaW1pdGl2ZUNvdW50KTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZmluaXNoKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisgICAgSURpcmVjdDNEUXVlcnk5ICpvY2NsdXNpb25RdWVyeSA9IE5VTEw7CisKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lP
TiwgJm9jY2x1c2lvblF1ZXJ5KTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKworICAgIGlmIChvY2NsdXNpb25RdWVyeSkKKyAgICB7CisgICAgICAgIElE
aXJlY3QzRFN0YXRlQmxvY2s5ICpzYXZlZFN0YXRlID0gTlVMTDsKKyAgICAgICAgZGV2aWNlLT5D
cmVhdGVTdGF0ZUJsb2NrKEQzRFNCVF9BTEwsICZzYXZlZFN0YXRlKTsKKworICAgICAgICBvY2Ns
dXNpb25RdWVyeS0+SXNzdWUoRDNESVNTVUVfQkVHSU4pOworCisgICAgICAgIC8vIFJlbmRlciBz
b21ldGhpbmcgb3V0c2lkZSB0aGUgcmVuZGVyIHRhcmdldAorICAgICAgICBkZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVM
TCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZp
Y2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKKyAgICAgICAgZmxvYXQgZGF0YVs0XSA9IHstMS4w
ZiwgLTEuMGYsIC0xLjBmLCAxLjBmfTsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOwor
ICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9QT0lOVExJU1QsIDEsIGRhdGEs
IHNpemVvZihkYXRhKSk7CisKKyAgICAgICAgb2NjbHVzaW9uUXVlcnktPklzc3VlKEQzRElTU1VF
X0VORCk7CisKKyAgICAgICAgd2hpbGUgKG9jY2x1c2lvblF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAs
IEQzREdFVERBVEFfRkxVU0gpID09IFNfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVz
ZWZ1bCBmaXJzdAorICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgIH0KKworICAgICAgICBv
Y2NsdXNpb25RdWVyeS0+UmVsZWFzZSgpOworCisgICAgICAgIGlmIChzYXZlZFN0YXRlKQorICAg
ICAgICB7CisgICAgICAgICAgICBzYXZlZFN0YXRlLT5BcHBseSgpOworICAgICAgICAgICAgc2F2
ZWRTdGF0ZS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OmZsdXNoKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KyAgICBJRGlyZWN0M0RRdWVyeTkgKmV2ZW50UXVlcnkgPSBOVUxMOworCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVl
cnkpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgaWYgKGV2ZW50UXVlcnkpCisgICAgeworICAgICAgICBldmVudFF1ZXJ5LT5Jc3N1ZShEM0RJ
U1NVRV9FTkQpOworCisgICAgICAgIHdoaWxlIChldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAs
IEQzREdFVERBVEFfRkxVU0gpID09IFNfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVz
ZWZ1bCBmaXJzdAorICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAgIH0KKworICAgICAgICBl
dmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnJlY29yZElu
dmFsaWRFbnVtKCkKK3sKKyAgICBtSW52YWxpZEVudW0gPSB0cnVlOworfQorCit2b2lkIENvbnRl
eHQ6OnJlY29yZEludmFsaWRWYWx1ZSgpCit7CisgICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Cit9
CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpCit7CisgICAgbUludmFs
aWRPcGVyYXRpb24gPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5
KCkKK3sKKyAgICBtT3V0T2ZNZW1vcnkgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnJlY29y
ZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpCit7CisgICAgbUludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbiA9IHRydWU7Cit9CisKKy8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9y
cyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlmIGFueS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuNSBwYWdlIDEzLgorR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKK3sKKyAgICBpZiAo
bUludmFsaWRFbnVtKQorICAgIHsKKyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7CisKKyAg
ICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRU5VTTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRW
YWx1ZSkKKyAgICB7CisgICAgICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gR0xfSU5WQUxJRF9WQUxVRTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRPcGVyYXRp
b24pCisgICAgeworICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBpZiAobU91dE9mTWVt
b3J5KQorICAgIHsKKyAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7CisKKyAgICAgICAgcmV0
dXJuIEdMX09VVF9PRl9NRU1PUlk7CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkRnJhbWVidWZm
ZXJPcGVyYXRpb24pCisgICAgeworICAgICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9u
ID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OOworICAgIH0KKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKworY29uc3QgY2hhciAq
Q29udGV4dDo6Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCkKK3sKKyAgICByZXR1cm4gbVBzUHJvZmls
ZTsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpCit7
CisgICAgcmV0dXJuIG1Wc1Byb2ZpbGU7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVy
KEdMdWludCBidWZmZXIpCit7CisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45
IHBhZ2UgMjI6CisgICAgLy8gSWYgYSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQg
aXMgYm91bmQsIGFsbCBiaW5kaW5ncyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250
ZXh0CisgICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVy
cykgYXJlIHJlc2V0IHRvIHplcm8uCisKKyAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyID09IGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlciA9IDA7CisgICAgfQorCisg
ICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQg
YXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUr
KykKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0u
bUJvdW5kQnVmZmVyID09IGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlciA9IDA7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sK
KyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4NDoKKyAgICAvLyBJ
ZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVu
aXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0IGFyZQorICAgIC8vIHJl
Ym91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5
cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBl
XVtzYW1wbGVyXSA9PSB0ZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQg
cGFnZSAxMTI6CisgICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0
cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0
aGVuIGl0IGlzCisgICAgLy8gYXMgaWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2Fs
bGVkLCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdo
aWNoIHRoaXMKKyAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3Vu
ZCBmcmFtZWJ1ZmZlci4KKworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1l
YnVmZmVyKCk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBmcmFtZWJ1
ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKKyAgICAvLyBJZiBhIGZyYW1lYnVmZmVy
IHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVs
ZXRlZCwgaXQgaXMgYXMgdGhvdWdoCisgICAgLy8gQmluZEZyYW1lYnVmZmVyIGhhZCBiZWVuIGV4
ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJhbWVidWZmZXIgb2Yg
emVyby4KKworICAgIGlmIChtU3RhdGUuZnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCisgICAg
eworICAgICAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwOToKKyAgICAvLyBJZiBhIHJlbmRlcmJ1
ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwg
aXQgaXMgYXMgdGhvdWdoIEJpbmRSZW5kZXJidWZmZXIKKyAgICAvLyBoYWQgYmVlbiBleGVjdXRl
ZCB3aXRoIHRoZSB0YXJnZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCisKKyAgICBp
ZiAobVN0YXRlLnJlbmRlcmJ1ZmZlciA9PSByZW5kZXJidWZmZXIpCisgICAgeworICAgICAgICBi
aW5kUmVuZGVyYnVmZmVyKDApOworICAgIH0KKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDQuNCBwYWdlIDExMToKKyAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciBvYmplY3QgaXMg
ZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3Vu
ZCBmcmFtZWJ1ZmZlciwKKyAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFj
aCBhdHRhY2htZW50CisgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNo
ZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KKworICAgIEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIp
CisgICAgeworICAgICAgICBmcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlcik7CisgICAgfQorfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVy
ZShTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1
cmVzW3R5cGVdOworCisgICAgaWYgKHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAsIDAsIDI1NSB9OworCisgICAgICAgIHN3aXRj
aCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFNBTVBM
RVJfMkQKKworICAgICAgICAgIGNhc2UgU0FNUExFUl8yRDoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQodGhpcyk7
CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCBHTF9SR0JBLCAxLCAx
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgICAg
dCA9IGluY29tcGxldGUyZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgY2FzZSBTQU1QTEVSX0NVQkU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0aGlz
KTsKKworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIEdMX1JH
QkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCBHTF9SR0JBLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZVBvc1koMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VOZWdZKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNv
bG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCBHTF9S
R0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAg
ICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1ooMCwgR0xfUkdCQSwgMSwgMSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworCisgICAgICAgICAgICAgIHQgPSBp
bmNvbXBsZXRlQ3ViZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXSA9IHQ7CisgICAgfQorCisg
ICAgcmV0dXJuIHQ7Cit9CisKK2Jvb2wgQ29udGV4dDo6Y3VsbFNraXBzRHJhdyhHTGVudW0gZHJh
d01vZGUpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZSAmJiBtU3RhdGUuY3VsbE1vZGUg
PT0gR0xfRlJPTlRfQU5EX0JBQ0sgJiYgaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOworfQorCiti
b29sIENvbnRleHQ6OmlzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBzd2l0
Y2ggKGRyYXdNb2RlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgY2Fz
ZSBHTF9UUklBTkdMRV9GQU46CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgY2FzZSBHTF9MSU5F
UzoKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOgorICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb250ZXh0OjpoYXNTdGVuY2lsKCkK
K3sKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigp
OworCisgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0KQorICAgIHsKKyAgICAgICAgU3RlbmNpbGJ1
ZmZlciAqc3RlbmNpbGJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyKCk7CisKKyAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgp
ID4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBD
b250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZXMpCit7CisgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVz
WzBdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0g
PSB2YWx1ZXNbMV07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRW
YWx1ZVsyXSA9IHZhbHVlc1syXTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5t
Q3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOworCisgICAgbVZlcnRleERhdGFNYW5hZ2VyLT5k
aXJ0eUN1cnJlbnRWYWx1ZXMoKTsKK30KKwordm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3Ry
aW5nKCkKK3sKKyAgICBpZiAobUJ1ZmZlckJhY2tFbmQtPnN1cHBvcnRJbnRJbmRpY2VzKCkpCisg
ICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50ICI7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5z
aW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKKyAgICBpZiAoZW5kICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEp
OworICAgIH0KK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOworfQorCit9CisK
K2V4dGVybiAiQyIKK3sKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZykKK3sKKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZyk7Cit9
CisKK3ZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBk
ZWxldGUgY29udGV4dDsKKworICAgIGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCisg
ICAgeworICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfQor
fQorCit2b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIGdsOjptYWtlQ3VycmVu
dChjb250ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsKK30KKworZ2w6OkNvbnRleHQgKmdsR2V0Q3Vy
cmVudENvbnRleHQoKQoreworICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOworfQorfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
ODcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6
OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZworLy8g
cmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRh
dGlvbiBvZiBFR0xDb250ZXh0LgorCisjaWZuZGVmIElOQ0xVREVfQ09OVEVYVF9IXworI2RlZmlu
ZSBJTkNMVURFX0NPTlRFWFRfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjZGVmaW5lIEVHTEFQSQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRl
IDxkM2Q5Lmg+CisKKyNpbmNsdWRlIDxtYXA+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorCituYW1lc3BhY2UgZWdsCit7CitjbGFzcyBEaXNwbGF5OworY2xhc3MgU3VyZmFjZTsK
K2NsYXNzIENvbmZpZzsKK30KKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0
dHJpYnV0ZTsKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOworCitjbGFzcyBCdWZmZXI7Citj
bGFzcyBTaGFkZXI7CitjbGFzcyBQcm9ncmFtOworY2xhc3MgVGV4dHVyZTsKK2NsYXNzIFRleHR1
cmUyRDsKK2NsYXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3MgRnJhbWVidWZmZXI7CitjbGFzcyBS
ZW5kZXJidWZmZXI7CitjbGFzcyBDb2xvcmJ1ZmZlcjsKK2NsYXNzIERlcHRoYnVmZmVyOworY2xh
c3MgU3RlbmNpbGJ1ZmZlcjsKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyOworY2xhc3MgSW5kZXhE
YXRhTWFuYWdlcjsKK2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBCbGl0OworCitlbnVtCit7
CisgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTIsCisgICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMgPSAxMjgsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDgsCisgICAgTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKKyAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgPSAwLAorICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCisgICAgTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDE2LAorICAgIE1BWF9SRU5ERVJCVUZGRVJfU0la
RSA9IDQwOTYsICAgLy8gRklYTUU6IFZlcmlmeQorICAgIE1BWF9EUkFXX0JVRkZFUlMgPSAxLAor
CisgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSBHTF9SR0IsCisgICAgSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUKK307
CisKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOworY29u
c3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9IDEuMGY7Citjb25zdCBmbG9h
dCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFT
RURfUE9JTlRfU0laRV9SQU5HRV9NQVggPSAxLjBmOworCitlbnVtIFNhbXBsZXJUeXBlCit7Cisg
ICAgU0FNUExFUl8yRCwKKyAgICBTQU1QTEVSX0NVQkUsCisKKyAgICBTQU1QTEVSX1RZUEVfQ09V
TlQKK307CisKK3N0cnVjdCBDb2xvcgoreworICAgIGZsb2F0IHJlZDsKKyAgICBmbG9hdCBncmVl
bjsKKyAgICBmbG9hdCBibHVlOworICAgIGZsb2F0IGFscGhhOworfTsKKworLy8gSGVscGVyIHN0
cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIHZlcnRleCBhdHRyaWJ1dGUKK2NsYXNzIEF0dHJp
YnV0ZVN0YXRlCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVTdGF0ZSgpCisgICAgICAgIDog
bVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDAp
LCBtUG9pbnRlcihOVUxMKSwgbUJvdW5kQnVmZmVyKDApLCBtRW5hYmxlZChmYWxzZSkKKyAgICB7
CisgICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwOworICAgICAgICBtQ3VycmVudFZhbHVlWzFd
ID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVsyXSA9IDA7CisgICAgICAgIG1DdXJyZW50VmFs
dWVbM10gPSAxOworICAgIH0KKworICAgIC8vIEZyb20gVmVydGV4QXJyYXlQb2ludGVyCisgICAg
R0xlbnVtIG1UeXBlOworICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7Cisg
ICAgR0xzaXplaSBtU3RyaWRlOyAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRlCisgICAgY29uc3Qg
dm9pZCAqbVBvaW50ZXI7CisKKyAgICBHTHVpbnQgbUJvdW5kQnVmZmVyOyAvLyBDYXB0dXJlZCB3
aGVuIFZlcnRleEFycmF5UG9pbnRlciBpcyBjYWxsZWQuCisKKyAgICBib29sIG1FbmFibGVkOyAv
LyBGcm9tIEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKKworICAgIGZsb2F0IG1DdXJy
ZW50VmFsdWVbNF07IC8vIEZyb20gVmVydGV4QXR0cmliNGYKK307CisKKy8vIEhlbHBlciBzdHJ1
Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQorc3RydWN0IFN0YXRlCit7CisgICAgQ29sb3Ig
Y29sb3JDbGVhclZhbHVlOworICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBpbnQg
c3RlbmNpbENsZWFyVmFsdWU7CisKKyAgICBib29sIGN1bGxGYWNlOworICAgIEdMZW51bSBjdWxs
TW9kZTsKKyAgICBHTGVudW0gZnJvbnRGYWNlOworICAgIGJvb2wgZGVwdGhUZXN0OworICAgIEdM
ZW51bSBkZXB0aEZ1bmM7CisgICAgYm9vbCBibGVuZDsKKyAgICBHTGVudW0gc291cmNlQmxlbmRS
R0I7CisgICAgR0xlbnVtIGRlc3RCbGVuZFJHQjsKKyAgICBHTGVudW0gc291cmNlQmxlbmRBbHBo
YTsKKyAgICBHTGVudW0gZGVzdEJsZW5kQWxwaGE7CisgICAgR0xlbnVtIGJsZW5kRXF1YXRpb25S
R0I7CisgICAgR0xlbnVtIGJsZW5kRXF1YXRpb25BbHBoYTsKKyAgICBDb2xvciBibGVuZENvbG9y
OworICAgIGJvb2wgc3RlbmNpbFRlc3Q7CisgICAgR0xlbnVtIHN0ZW5jaWxGdW5jOworICAgIEdM
aW50IHN0ZW5jaWxSZWY7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrOworICAgIEdMZW51bSBzdGVu
Y2lsRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7CisgICAgR0xlbnVtIHN0
ZW5jaWxQYXNzRGVwdGhQYXNzOworICAgIEdMdWludCBzdGVuY2lsV3JpdGVtYXNrOworICAgIEdM
ZW51bSBzdGVuY2lsQmFja0Z1bmM7CisgICAgR0xpbnQgc3RlbmNpbEJhY2tSZWY7CisgICAgR0x1
aW50IHN0ZW5jaWxCYWNrTWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tGYWlsOworICAgIEdM
ZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzczsKKyAgICBHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2s7CisgICAgYm9vbCBw
b2x5Z29uT2Zmc2V0RmlsbDsKKyAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRGYWN0b3I7CisgICAg
R0xmbG9hdCBwb2x5Z29uT2Zmc2V0VW5pdHM7CisgICAgYm9vbCBzYW1wbGVBbHBoYVRvQ292ZXJh
Z2U7CisgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKKyAgICBHTGNsYW1wZiBzYW1wbGVDb3ZlcmFn
ZVZhbHVlOworICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CisgICAgYm9vbCBzY2lzc29y
VGVzdDsKKyAgICBib29sIGRpdGhlcjsKKworICAgIEdMZmxvYXQgbGluZVdpZHRoOworCisgICAg
R0xlbnVtIGdlbmVyYXRlTWlwbWFwSGludDsKKworICAgIEdMaW50IHZpZXdwb3J0WDsKKyAgICBH
TGludCB2aWV3cG9ydFk7CisgICAgR0xzaXplaSB2aWV3cG9ydFdpZHRoOworICAgIEdMc2l6ZWkg
dmlld3BvcnRIZWlnaHQ7CisgICAgZmxvYXQgek5lYXI7CisgICAgZmxvYXQgekZhcjsKKworICAg
IEdMaW50IHNjaXNzb3JYOworICAgIEdMaW50IHNjaXNzb3JZOworICAgIEdMc2l6ZWkgc2Npc3Nv
cldpZHRoOworICAgIEdMc2l6ZWkgc2Npc3NvckhlaWdodDsKKworICAgIGJvb2wgY29sb3JNYXNr
UmVkOworICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CisgICAgYm9vbCBjb2xvck1hc2tCbHVlOwor
ICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CisgICAgYm9vbCBkZXB0aE1hc2s7CisKKyAgICBpbnQg
YWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0IHNlbGVjdG9yIC0gR0xfVEVY
VFVSRTAKKyAgICBHTHVpbnQgYXJyYXlCdWZmZXI7CisgICAgR0x1aW50IGVsZW1lbnRBcnJheUJ1
ZmZlcjsKKyAgICBHTHVpbnQgdGV4dHVyZTJEOworICAgIEdMdWludCB0ZXh0dXJlQ3ViZU1hcDsK
KyAgICBHTHVpbnQgZnJhbWVidWZmZXI7CisgICAgR0x1aW50IHJlbmRlcmJ1ZmZlcjsKKyAgICBH
THVpbnQgY3VycmVudFByb2dyYW07CisKKyAgICBBdHRyaWJ1dGVTdGF0ZSB2ZXJ0ZXhBdHRyaWJ1
dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBHTHVpbnQgc2FtcGxlclRleHR1cmVbU0FNUExF
Ul9UWVBFX0NPVU5UXVtNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisKKyAgICBHTGludCB1bnBh
Y2tBbGlnbm1lbnQ7CisgICAgR0xpbnQgcGFja0FsaWdubWVudDsKK307CisKK2NsYXNzIENvbnRl
eHQKK3sKKyAgcHVibGljOgorICAgIENvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyk7
CisKKyAgICB+Q29udGV4dCgpOworCisgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisKKyAgICB2b2lkIG1hcmtBbGxTdGF0
ZURpcnR5KCk7CisKKyAgICAvLyBTdGF0ZSBtYW5pcHVsYXRpb24KKyAgICB2b2lkIHNldENsZWFy
Q29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwor
CisgICAgdm9pZCBzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKTsKKworICAgIHZvaWQgc2V0Q2xl
YXJTdGVuY2lsKGludCBzdGVuY2lsKTsKKworICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBlbmFi
bGVkKTsKKyAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEN1bGxNb2RlKEdMZW51bSBtb2RlKTsKKworICAgIHZvaWQgc2V0RnJvbnRGYWNlKEdMZW51bSBm
cm9udCk7CisKKyAgICB2b2lkIHNldERlcHRoVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wg
aXNEZXB0aFRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERlcHRoRnVuYyhHTGVu
dW0gZGVwdGhGdW5jKTsKKworICAgIHZvaWQgc2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxv
YXQgekZhcik7CisgICAgCisgICAgdm9pZCBzZXRCbGVuZChib29sIGVuYWJsZWQpOworICAgIGJv
b2wgaXNCbGVuZEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0QmxlbmRGYWN0b3JzKEdM
ZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51
bSBkZXN0QWxwaGEpOworICAgIHZvaWQgc2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdy
ZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBzZXRCbGVuZEVxdWF0aW9u
KEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pOworCisgICAgdm9pZCBz
ZXRTdGVuY2lsVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTdGVuY2lsVGVzdEVuYWJs
ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1
bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzayk7CisgICAgdm9pZCBzZXRT
dGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFj
a1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2lsV3JpdGVt
YXNrKEdMdWludCBzdGVuY2lsV3JpdGVtYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrV3Jp
dGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2ls
T3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFp
bCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNr
T3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNz
RGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKTsKKworICAgIHZvaWQg
c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzUG9seWdvbk9m
ZnNldEZpbGxFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRQYXJh
bXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCisgICAgdm9pZCBzZXRTYW1wbGVB
bHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzU2FtcGxlQWxwaGFUb0Nv
dmVyYWdlRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZShib29s
IGVuYWJsZWQpOworICAgIGJvb2wgaXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52
ZXJ0KTsKKworICAgIHZvaWQgc2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKTsKKyAgICBib29s
IGlzU2Npc3NvclRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERpdGhlcihib29s
IGVuYWJsZWQpOworICAgIGJvb2wgaXNEaXRoZXJFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKKworICAgIHZvaWQgc2V0R2VuZXJhdGVNaXBt
YXBIaW50KEdMZW51bSBoaW50KTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdm9pZCBz
ZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKworICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZvaWQgc2V0RGVwdGhNYXNrKGJvb2wgbWFzayk7
CisKKyAgICB2b2lkIHNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2ZSk7CisKKyAgICBHTHVpbnQg
Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0UmVuZGVyYnVmZmVy
SGFuZGxlKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25z
dDsKKworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtLCBib29sIGVuYWJsZWQpOworICAgIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZnZXRWZXJ0ZXhB
dHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAgICB2b2lkIHNldFZlcnRleEF0
dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwgR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKyAgICBj
b25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
IGNvbnN0OworCisgICAgY29uc3QgQXR0cmlidXRlU3RhdGUgKmdldFZlcnRleEF0dHJpYkJsb2Nr
KCk7CisKKyAgICB2b2lkIHNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOworICAg
IEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWNrQWxp
Z25tZW50KEdMaW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0UGFja0FsaWdubWVudCgpIGNv
bnN0OworCisgICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVTaGFk
ZXIoR0xlbnVtIHR5cGUpOworICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7CisgICAgR0x1aW50
IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBH
THVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKKyAgICB2
b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZvaWQgZGVsZXRlVGV4dHVy
ZShHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZm
ZXIpOworCisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9p
ZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFRl
eHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZUN1YmVNYXAoR0x1
aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAg
IHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CisKKyAgICB2b2lkIHNldEZyYW1lYnVm
ZmVyWmVybyhGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpOworICAgIHZvaWQgc2V0Q29sb3JidWZm
ZXJaZXJvKENvbG9yYnVmZmVyICpyZW5kZXJidWZmZXIpOworICAgIHZvaWQgc2V0RGVwdGhidWZm
ZXJaZXJvKERlcHRoYnVmZmVyICpkZXB0aEJ1ZmZlcik7CisgICAgdm9pZCBzZXRTdGVuY2lsYnVm
ZmVyWmVybyhTdGVuY2lsYnVmZmVyICpzdGVuY2lsQnVmZmVyKTsKKyAgICB2b2lkIHNldFJlbmRl
cmJ1ZmZlcihSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlcik7CisKKyAgICB2b2lkIHNldFZlcnRl
eEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcyk7CisKKyAgICBCdWZm
ZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVp
bnQgaGFuZGxlKTsKKyAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOworICAg
IFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdl
dEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVy
YnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihH
THVpbnQgaGFuZGxlKTsKKyAgICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoR0x1aW50IGhh
bmRsZSk7CisgICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxl
KTsKKworICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOworICAgIFByb2dyYW0gKmdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAg
VGV4dHVyZTJEICpnZXRUZXh0dXJlMkQoKTsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVy
ZUN1YmVNYXAoKTsKKyAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQg
c2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVm
ZmVyKCk7CisKKyAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFt
cyk7CisgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwor
ICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcyk7CisK
KyAgICBib29sIGdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlw
ZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOworCisgICAgYm9vbCBhcHBseVJlbmRlclRhcmdl
dChib29sIGlnbm9yZVZpZXdwb3J0KTsKKyAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdN
b2RlKTsKKyAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoR0xlbnVtIG1vZGUsIEdMaW50IGZp
cnN0LCBHTHNpemVpIGNvdW50LCBib29sICp1c2VJbmRleGluZywgVHJhbnNsYXRlZEluZGV4RGF0
YSAqaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihj
b25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5
cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgR0xlbnVtIGFwcGx5Q291
bnRpbmdJbmRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xlbnVtIGNvdW50LCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICppbmRleEluZm8pOworICAgIHZvaWQgYXBwbHlTaGFkZXJzKCk7CisgICAgdm9pZCBh
cHBseVRleHR1cmVzKCk7CisKKyAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCB2b2lkKiBwaXhlbHMpOworICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2
b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsK
KyAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIGluZGljZXMpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9p
ZCBmbHVzaCgpOworCisgICAgdm9pZCByZWNvcmRJbnZhbGlkRW51bSgpOworICAgIHZvaWQgcmVj
b3JkSW52YWxpZFZhbHVlKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCk7Cisg
ICAgdm9pZCByZWNvcmRPdXRPZk1lbW9yeSgpOworICAgIHZvaWQgcmVjb3JkSW52YWxpZEZyYW1l
YnVmZmVyT3BlcmF0aW9uKCk7CisKKyAgICBHTGVudW0gZ2V0RXJyb3IoKTsKKworICAgIGNvbnN0
IGNoYXIgKmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpOworICAgIGNvbnN0IGNoYXIgKmdldFZlcnRl
eFNoYWRlclByb2ZpbGUoKTsKKworICAgIGNvbnN0IGNoYXIgKmdldEV4dGVuc2lvblN0cmluZygp
IGNvbnN0OworCisgICAgQmxpdCAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAg
ICBjb25zdCBEM0RDQVBTOSAmZ2V0RGV2aWNlQ2FwcygpIHsgcmV0dXJuIG1EZXZpY2VDYXBzOyB9
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7CisK
KyAgICB2b2lkIGxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0
cmlidXRlcyk7CisKKyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2
b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgZGV0YWNoRnJhbWVi
dWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihH
THVpbnQgcmVuZGVyYnVmZmVyKTsKKworICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJl
KFNhbXBsZXJUeXBlIHR5cGUpOworCisgICAgYm9vbCBjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3
TW9kZSk7CisgICAgYm9vbCBpc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpOworICAgIGJv
b2wgaGFzU3RlbmNpbCgpOworCisgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbnN0IG1Db25maWc7
CisKKyAgICBTdGF0ZSAgIG1TdGF0ZTsKKworICAgIFRleHR1cmUyRCAqbVRleHR1cmUyRFplcm87
CisgICAgVGV4dHVyZUN1YmVNYXAgKm1UZXh0dXJlQ3ViZU1hcFplcm87CisKKyAgICBDb2xvcmJ1
ZmZlciAqbUNvbG9yYnVmZmVyWmVybzsKKyAgICBEZXB0aGJ1ZmZlciAqbURlcHRoYnVmZmVyWmVy
bzsKKyAgICBTdGVuY2lsYnVmZmVyICptU3RlbmNpbGJ1ZmZlclplcm87CisKKyAgICB0eXBlZGVm
IHN0ZDo6bWFwPEdMdWludCwgQnVmZmVyKj4gQnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVm
ZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1h
cDsKKyAgICBTaGFkZXJNYXAgbVNoYWRlck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1
aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1hcDsKKyAgICBQcm9ncmFtTWFwIG1Qcm9ncmFtTWFwOwor
CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAg
IFRleHR1cmVNYXAgbVRleHR1cmVNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwg
RnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsKKyAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVi
dWZmZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOworICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwor
CisgICAgdm9pZCBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7CisgICAgc3RkOjpzdHJpbmcgbUV4dGVu
c2lvblN0cmluZzsKKworICAgIEJ1ZmZlckJhY2tFbmQgKm1CdWZmZXJCYWNrRW5kOworICAgIFZl
cnRleERhdGFNYW5hZ2VyICptVmVydGV4RGF0YU1hbmFnZXI7CisgICAgSW5kZXhEYXRhTWFuYWdl
ciAqbUluZGV4RGF0YU1hbmFnZXI7CisKKyAgICBCbGl0ICptQmxpdDsKKworICAgIFRleHR1cmUg
Km1JbmNvbXBsZXRlVGV4dHVyZXNbU0FNUExFUl9UWVBFX0NPVU5UXTsKKworICAgIC8vIFJlY29y
ZGVkIGVycm9ycworICAgIGJvb2wgbUludmFsaWRFbnVtOworICAgIGJvb2wgbUludmFsaWRWYWx1
ZTsKKyAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOworICAgIGJvb2wgbU91dE9mTWVtb3J5Owor
ICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsKKworICAgIGJvb2wgbUhhc0Jl
ZW5DdXJyZW50OworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbTsKKyAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7CisKKyAgICBjb25zdCBjaGFyICptUHNQcm9maWxlOwor
ICAgIGNvbnN0IGNoYXIgKm1Wc1Byb2ZpbGU7CisKKyAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdz
CisgICAgYm9vbCBtQ2xlYXJTdGF0ZURpcnR5OworICAgIGJvb2wgbUN1bGxTdGF0ZURpcnR5Owor
ICAgIGJvb2wgbURlcHRoU3RhdGVEaXJ0eTsKKyAgICBib29sIG1NYXNrU3RhdGVEaXJ0eTsKKyAg
ICBib29sIG1QaXhlbFBhY2tpbmdTdGF0ZURpcnR5OworICAgIGJvb2wgbUJsZW5kU3RhdGVEaXJ0
eTsKKyAgICBib29sIG1TdGVuY2lsU3RhdGVEaXJ0eTsKKyAgICBib29sIG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eTsKKyAgICBib29sIG1TY2lzc29yU3RhdGVEaXJ0eTsKKyAgICBib29sIG1TYW1w
bGVTdGF0ZURpcnR5OworICAgIGJvb2wgbUZyb250RmFjZURpcnR5OworICAgIGJvb2wgbURpdGhl
clN0YXRlRGlydHk7CisKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZTsKKworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworfTsKK30KKworZXh0ZXJuICJD
IgoreworLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCitnbDo6Q29udGV4dCAq
Z2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOwordm9pZCBnbERlc3Ry
b3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6
Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1
cmZhY2UpOworZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKK19fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3Mo
Y29uc3QgY2hhciAqcHJvY25hbWUpOworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX0NPTlRFWFRf
SF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBG
cmFtZWJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4gSW1w
bGVtZW50cyBHTCBmcmFtZWJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDUuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9UZXh0dXJlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK0ZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcigpCit7CisgICAgbUNvbG9yYnVmZmVy
VHlwZSA9IEdMX05PTkU7CisgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKworICAgIG1EZXB0
aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7CisKKyAg
ICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1TdGVuY2lsYnVmZmVySGFuZGxl
ID0gMDsKK30KKworRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCit7Cit9CisKK3ZvaWQgRnJh
bWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIp
Cit7CisgICAgbUNvbG9yYnVmZmVyVHlwZSA9IHR5cGU7CisgICAgbUNvbG9yYnVmZmVySGFuZGxl
ID0gY29sb3JidWZmZXI7Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdM
ZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpCit7CisgICAgbURlcHRoYnVmZmVyVHlwZSA9
IHR5cGU7CisgICAgbURlcHRoYnVmZmVySGFuZGxlID0gZGVwdGhidWZmZXI7Cit9CisKK3ZvaWQg
RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2ls
YnVmZmVyKQoreworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IHR5cGU7CisgICAgbVN0ZW5jaWxi
dWZmZXJIYW5kbGUgPSBzdGVuY2lsYnVmZmVyOworfQorCit2b2lkIEZyYW1lYnVmZmVyOjpkZXRh
Y2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIGlmIChtQ29sb3JidWZmZXJIYW5kbGUg
PT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCisgICAgewor
ICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbUNvbG9yYnVmZmVy
SGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVySGFuZGxlID09IHRleHR1
cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAgIHsKKyAgICAgICAg
bURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9
IDA7CisgICAgfQorCisgICAgaWYgKG1TdGVuY2lsYnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYg
SXNUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCisgICAgeworICAgICAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9
IDA7CisgICAgfQorfQorCit2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1
aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAobUNvbG9yYnVmZmVySGFuZGxlID09IHJlbmRl
cmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7Cisg
ICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtQ29sb3JidWZmZXJI
YW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJIYW5kbGUgPT0gcmVuZGVy
YnVmZmVyICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAg
ICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1EZXB0aGJ1ZmZlckhh
bmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1TdGVuY2lsYnVmZmVySGFuZGxlID09IHJlbmRl
cmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsK
KyAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbVN0ZW5jaWxi
dWZmZXJIYW5kbGUgPSAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBnZXRDb2xvcmJ1ZmZlcigpOworCisgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQo
KQoreworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1ZmZlcigpOwor
CisgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordW5z
aWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCit7CisgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7
CisKKyAgICBpZiAoZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhidWZm
ZXItPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RT
dXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAg
ICBpZiAoZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhidWZmZXItPmdl
dERlcHRoU3RlbmNpbCgpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitDb2xvcmJ1
ZmZlciAqRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVy
ID0gTlVMTDsKKworICAgIGlmIChtQ29sb3JidWZmZXJUeXBlID09IEdMX05PTkUpCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBjb2xvcmJ1ZmZlciA9IE5VTEw7CisgICAg
fQorICAgIGVsc2UgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAg
IHsKKyAgICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3Ji
dWZmZXJIYW5kbGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb2xvcmJ1ZmZl
ciA9IGNvbnRleHQtPmdldFRleHR1cmUobUNvbG9yYnVmZmVySGFuZGxlKS0+Z2V0Q29sb3JidWZm
ZXIobUNvbG9yYnVmZmVyVHlwZSk7CisgICAgfQorCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNv
bG9yYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gY29sb3Ji
dWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0RlcHRoYnVmZmVyICpGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIoKQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKyAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0
LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOworCisgICAgaWYgKGRlcHRoYnVm
ZmVyICYmIGRlcHRoYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZGVwdGhidWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1N0ZW5jaWxi
dWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNp
bGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUp
OworCisgICAgaWYgKHN0ZW5jaWxidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlci0+aXNTdGVuY2lsYnVm
ZmVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlcjsKKyAgICB9CisKKyAg
ICByZXR1cm4gTlVMTDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5
cGUoKQoreworICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOworfQorCitHTGVudW0gRnJhbWVi
dWZmZXI6OmdldERlcHRoYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5
cGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQorewor
ICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6
Z2V0Q29sb3JidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVybiBtQ29sb3JidWZmZXJIYW5kbGU7
Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQoreworICAg
IHJldHVybiBtRGVwdGhidWZmZXJIYW5kbGU7Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0
U3RlbmNpbGJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVySGFuZGxl
OworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCit7CisgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgaW50IHdpZHRoID0gMDsK
KyAgICBpbnQgaGVpZ2h0ID0gMDsKKworICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05P
TkUpCisgICAgeworICAgICAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1
ZmZlcigpOworCisgICAgICAgIGlmICghY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBjb2xvcmJ1
ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAg
IHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IGNvbG9y
YnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29u
dGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAgICAgICBpZiAo
IWRlcHRoYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlcHRo
YnVmZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgZGVwdGhidWZmZXItPmdldEhlaWdodCgpID09IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgICAgIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQg
IT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAg
ICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZm
ZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUpOworCisgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyLT5nZXRX
aWR0aCgpID09IDAgfHwgc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBo
ZWlnaHQgPSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBz
dGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKK30KK30KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZyYW1lYnVmZmVyLmg6IERlZmluZXMg
dGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4gSW1wbGVtZW50cyBHTCBmcmFtZWJ1ZmZlcgorLy8g
b2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiA0LjQgcGFnZSAxMDUuCisKKyNpZm5kZWYgTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIENvbG9yYnVmZmVyOwor
Y2xhc3MgRGVwdGhidWZmZXI7CitjbGFzcyBTdGVuY2lsYnVmZmVyOworCitjbGFzcyBGcmFtZWJ1
ZmZlcgoreworICBwdWJsaWM6CisgICAgRnJhbWVidWZmZXIoKTsKKworICAgIH5GcmFtZWJ1ZmZl
cigpOworCisgICAgdm9pZCBzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyKTsKKyAgICB2b2lkIHNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVw
dGhidWZmZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IHN0ZW5jaWxidWZmZXIpOworCisgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJl
KTsKKyAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKwor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKCk7CisgICAgdW5zaWduZWQgaW50IGdldERlcHRoYnVmZmVyU2VyaWFsKCk7
CisKKyAgICBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoKTsKKyAgICBEZXB0aGJ1ZmZlciAq
Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBTdGVuY2lsYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7
CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7CisgICAgR0xlbnVtIGdldERlcHRo
YnVmZmVyVHlwZSgpOworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOworCisgICAg
R0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKCk7CisgICAgR0x1aW50IGdldERlcHRoYnVmZmVy
SGFuZGxlKCk7CisgICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKworICAgIEdM
ZW51bSBjb21wbGV0ZW5lc3MoKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihGcmFtZWJ1ZmZlcik7CisKKyAgICBHTHVpbnQgbUNvbG9yYnVmZmVySGFuZGxlOwor
ICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlOworCisgICAgR0x1aW50IG1EZXB0aGJ1ZmZlckhh
bmRsZTsKKyAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlwZTsKKworICAgIEdMdWludCBtU3RlbmNp
bGJ1ZmZlckhhbmRsZTsKKyAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOworfTsKK30KKwor
I2VuZGlmICAgLy8gTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1Byb2dyYW0u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NjAgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJv
Z3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVk
IGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4
LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKworI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9IDE7CisKK3N0
ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc3ByaW50
ZihidWZmZXIsICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1VuaWZvcm06OlVu
aWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSksIGFycmF5U2l6ZShhcnJheVNpemUp
Cit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybVR5cGVTaXplKHR5cGUpICogYXJyYXlTaXplOwor
ICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0KGRhdGEsIDAs
IGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRydWU7CisgICAgaGFuZGxlc1NldCA9IGZhbHNlOworfQor
CitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30KKworVW5pZm9y
bUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2ln
bmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFtZShuYW1lKSwg
ZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW06OlByb2dyYW0o
KQoreworICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgbVZlcnRleFNoYWRlciA9IE5V
TEw7CisKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtVmVydGV4RXhlY3V0YWJs
ZSA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFi
bGVWUyA9IE5VTEw7CisKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworCisgICAgdW5saW5rKCk7CisKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CisKKyAg
ICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKK30KKworUHJvZ3JhbTo6flByb2dyYW0oKQorewor
ICAgIHVubGluayh0cnVlKTsKKworICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5VTEwpCisgICAg
eworICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICB9CisKKyAgICBpZiAobUZy
YWdtZW50U2hhZGVyICE9IE5VTEwpCisgICAgeworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmRl
dGFjaCgpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIp
CisgICAgeworICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IChW
ZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+YXR0YWNoKCk7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURF
UikKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRl
ciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOworICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmF0
dGFjaCgpOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCit7Cisg
ICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAg
ICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRldGFj
aCgpOworICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAo
c2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAg
aWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+ZGV0YWNo
KCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHVubGluaygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
dCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsKK30K
KworSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRlcigpCit7Cisg
ICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3QzRFZlcnRleFNoYWRlcjkg
KlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRh
YmxlOworfQorCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5k
ZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJh
c2UobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0u
aW5zZXJ0KG5hbWUpOworICAgIH0KK30KKworR0x1aW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUxv
Y2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAgeworICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFt
ZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7Cit9CisKK2ludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJ
bmRleCkKK3sKKyAgICBpZiAoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIHJldHVybiBtU2VtYW50aWNJbmRl
eFthdHRyaWJ1dGVJbmRleF07CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisvLyBSZXR1
cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSB1bml0IGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJl
Y3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4IHJlZmVyZW5jZWQgaW4gdGhlIGNvbXBpbGVkIEhMU0wg
c2hhZGVyCitHTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyh1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4KQoreworICAgIGFzc2VydChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJz
KS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisKKyAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQg
PSAtMTsKKworICAgIGlmIChtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUpCisgICAgewor
ICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5sb2dp
Y2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA8IE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0
dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK1NhbXBsZXJUeXBlIFByb2dy
YW06OmdldFNhbXBsZXJUeXBlKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgYXNz
ZXJ0KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0p
KTsKKyAgICBhc3NlcnQobVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKworICAgIHJl
dHVybiBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBlOworfQorCitib29sIFByb2dyYW06Omlz
U2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpIGNvbnN0Cit7CisgICAgaWYg
KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5OworICAg
IH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUHJvZ3JhbTo6c2V0U2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgsIGJv
b2wgZGlydHkpCit7CisgICAgaWYgKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3Np
emVvZihtU2FtcGxlcnNbMF0pKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRl
eF0uZGlydHkgPSBkaXJ0eTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworfQorCitH
TGludCBQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSwgYm9vbCBk
ZWNvcmF0ZWQpCit7CisgICAgc3RkOjpzdHJpbmcgbmFtZVN0cihuYW1lKTsKKyAgICBpbnQgc3Vi
c2NyaXB0ID0gMDsKKyAgICBzaXplX3QgYmVnaW5CID0gbmFtZVN0ci5maW5kKCdbJyk7CisgICAg
c2l6ZV90IGVuZEIgPSBuYW1lU3RyLmZpbmQoJ10nKTsKKyAgICBpZiAoYmVnaW5CICE9IHN0ZDo6
c3RyaW5nOjpucG9zICYmIGVuZEIgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAg
ICBzdGQ6OnN0cmluZyBzdWJzY3JTdHIgPSBuYW1lU3RyLnN1YnN0cihiZWdpbkIgKyAxLCBiZWdp
bkIgLSBlbmRCIC0gMSk7CisgICAgICAgIG5hbWVTdHIuZXJhc2UoYmVnaW5CKTsKKyAgICAgICAg
c3Vic2NyaXB0ID0gYXRvaShzdWJzY3JTdHIuY19zdHIoKSk7CisgICAgfQorCisgICAgaWYgKCFk
ZWNvcmF0ZWQpCisgICAgeworICAgICAgICBuYW1lU3RyID0gZGVjb3JhdGUobmFtZVN0cik7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVu
aWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLm5hbWUgPT0gbmFtZVN0ciAmJgorICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICB2LCBzaXplb2Yo
R0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
bmV3IEdMYm9vbGVhbltjb3VudF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pLAorICAgICAgICAgICAgICAgYm9vbFBhcmFt
cywgc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQ
YXJhbXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMmZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGZsb2F0KSAqIDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMZmxvYXQpICog
Y291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JP
T0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcg
R0xib29sZWFuW2NvdW50ICogMl07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDIsCisgICAgICAgICAgICAgICBi
b29sUGFyYW1zLCAyICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVs
ZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7CisgICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAzLAorICAgICAgICAgICAgICAgdiwgMyAqIHNpemVv
ZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAzXTsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogMywKKyAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXMsIDMgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKwor
ICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgICAgICB2
LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDRdOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbikg
KiA0LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgNCAqIHNpemVvZihHTGJvb2xlYW4pICog
Y291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNl
IAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBH
TF9GTE9BVF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgIHZhbHVlLCA0ICogc2l6ZW9mKEdMZmxvYXQpICog
Y291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9y
bU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogOSwKKyAgICAgICAgICAgdmFs
dWUsIDkgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxP
QVRfTUFUNCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xm
bG9hdCkgKiAxNiwKKyAgICAgICAgICAgdmFsdWUsIDE2ICogc2l6ZW9mKEdMZmxvYXQpICogY291
bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0lOVCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQp
LAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAg
ZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAg
aW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAo
YXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6
ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50XTsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbiksCisg
ICAgICAgICAgICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKwor
ICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAgICB7CisgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKwor
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBz
aXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDJdOworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ld
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbikgKiAyLAorICAgICAg
ICAgICAgICAgYm9vbFBhcmFtcywgMiAqIHNpemVvZihHTGJvb2xlYW4pICogY291bnQpOworCisg
ICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKwor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAgIHsKKyAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisg
ICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAgdiwgMyAqIHNp
emVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogM107CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0g
PT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDMsCisgICAgICAg
ICAgICAgICBib29sUGFyYW1zLCAzICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAg
ICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtOjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAgICAgICB2LCA0ICogc2l6
ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiA0XTsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9G
QUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogNCwKKyAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXMsIDQgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAg
ICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW06OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCAqcGFyYW1zKQorewor
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKKworICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFy
Z2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICB7
CisgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50Owor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0g
PT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBtZW1jcHkocGFyYW1z
LCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yo
R0xmbG9hdCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICB7
CisgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50OworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAqcGFyYW1zKQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKwor
ICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKworICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5p
Zm9ybS0+dHlwZSkpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICB7CisgICAg
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50OworCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICB7CisgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0
UGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQgKiBzaXplb2YoR0xp
bnQpLAorICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQoreworICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBQ
cm9ncmFtOjpkaXJ0eUFsbFNhbXBsZXJzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICsraW5kZXgpCisgICAgewor
ICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vIEFw
cGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMoKQoreworICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZv
ciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9j
YXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRh
dGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3Jt
MWJ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm0yYnYobG9jYXRpb24sIGFycmF5U2l6ZSwg
Yik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5
VW5pZm9ybTNidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtNGJ2KGxvY2F0aW9uLCBhcnJh
eVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAg
ICBhcHBseVVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IGFwcGx5VW5pZm9ybTJmdihsb2NhdGlv
biwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogYXBwbHlVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBhcHBseVVuaWZvcm00ZnYo
bG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6IGFwcGx5VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXlTaXpl
LCBmKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogYXBwbHlVbmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFy
cmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFw
cGx5VW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KGxvY2F0aW9uLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVD
MzogICBhcHBseVVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdihsb2Nh
dGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30K
KworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVycyBpbnRv
IGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0RYQnVmZmVyICpQcm9ncmFtOjpjb21waWxlVG9CaW5h
cnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRh
YmxlICoqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBpZiAoIWhsc2wpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRDNEWEJ1ZmZlciAqYmluYXJ5ID0gTlVMTDsKKyAg
ICBJRDNEWEJ1ZmZlciAqZXJyb3JNZXNzYWdlID0gTlVMTDsKKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gRDNEWENvbXBpbGVTaGFkZXIoaGxzbCwgKFVJTlQpc3RybGVuKGhsc2wpLCBOVUxMLCBOVUxM
LCAibWFpbiIsIHByb2ZpbGUsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UsIGNvbnN0YW50VGFi
bGUpOworCisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJpbmFyeTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIChJRDNEWEJ1ZmZlciopTlVMTCk7CisgICAgfQorCisgICAg
aWYgKGVycm9yTWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAo
Y29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7CisKKyAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbWVzc2FnZSk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwg
aGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisgICAgfQorCisgICAgcmV0
dXJuIE5VTEw7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJl
Z2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5n
dWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNj
ZXNmdWwKK2ludCBQcm9ncmFtOjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1td
WzRdKQoreworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21l
bnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT52
YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4gPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAgICAgaW50IG0g
PSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IE1BWF9WQVJZSU5HX1ZF
Q1RPUlMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
ICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsK
KworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgciA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgLSBuOyByID49IDAgJiYg
IXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5y
ZWcgPSByOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHNwYWNl
WzRdID0gezB9OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IE1BWF9WQVJZSU5H
X1ZFQ1RPUlM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc3BhY2VbeF0gPiBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+
IG4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBN
QVhfVkFSWUlOR19WRUNUT1JTOyByKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29s
dW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47CisKKyAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcg
JXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lz
dGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBN
QVhfVkFSWUlOR19WRUNUT1JTOyByKyspCisgICAgeworICAgICAgICBpZiAocGFja2luZ1tyXVsw
XSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCit7
CisgICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0eSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFZhcnlpbmcgKnBh
Y2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07CisgICAgaW50IHJlZ2lzdGVy
cyA9IHBhY2tWYXJ5aW5ncyhwYWNraW5nKTsKKworICAgIGlmIChyZWdpc3RlcnMgPCAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZWdpc3RlcnMgPT0g
TUFYX1ZBUllJTkdfVkVDVE9SUyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQor
ICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0
IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZyYWdtZW50U2hh
ZGVyLT52YXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdz
LmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisK
KyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gbVZlcnRleFNoYWRl
ci0+dmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmVu
ZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9
PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0
LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVHlw
ZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVu
dCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRw
dXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1
dC0+Y29sOworCisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNo
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJhZ21lbnQgdmFy
eWluZyB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgZm9y
IChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAi
OyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IG1W
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRl
eEhMU0wgKz0gZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIo
c2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICBtVmVydGV4SExTTCAr
PSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgInN0
cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOworCisgICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAgIGludCByZWdp
c3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNr
aW5nW3JdWzFdID8gMiA6IDEpKTsKKworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0
IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiBURVhDT09SRCIgKyBz
dHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6IFRFWENPT1JEIiArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisg
ICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAg
ICAgICAgICAgICAie1xuIjsKKworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAh
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgewor
ICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZShhdHRyaWJ1dGUtPm5hbWUp
ICsgIiA9ICI7CisKKyAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBl
KSA+IDEpICAgLy8gTWF0cml4CisgICAgICAgIHsKKyAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9
ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1
dC4iICsgZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9CisKKyAgICBt
VmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VU
UFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xf
UG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24u
eiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGlmIChtRnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAgIH0KKworICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtVmVydGV4U2hhZGVyLT52YXJ5
aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2
YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3Vu
dCh2YXJ5aW5nLT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
cm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHIg
PSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRp
cGxlIHZhcnlpbmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBw
YWNraW5nW3JdWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAi
LiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhITFNMICs9ICJ6
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVmVy
dGV4SExTTCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhM
U0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0g
IjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgbVZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIG1QaXhlbEhM
U0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAg
CisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRl
ci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdz
LmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6
ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFi
bGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKKyAgICAg
ICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogVEVY
Q09PUkQiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYgKG1G
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBtUGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6IFRFWENPT1JEIiArIHN0cihyZWdpc3RlcnMp
ICsgIjtcbiI7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNl
c0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZG
YWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAgIG1QaXhlbEhMU0wgKz0gIn07XG4iCisgICAg
ICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxu
IgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0
IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFpbihQU19J
TlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eCAqIHJodykgKiBkeF9XaW5kb3cueCArIGR4X1dpbmRvdy56O1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcp
ICogZHhfV2luZG93LnkgKyBkeF9XaW5kb3cudztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0Rl
cHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJh
Z0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJv
bnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFj
ZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisKKyAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZh
cnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93
czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIG1QaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07
XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIFRSQUNFKCJcbiVz
IiwgbVBpeGVsSExTTC5jX3N0cigpKTsKKyAgICBUUkFDRSgiXG4lcyIsIG1WZXJ0ZXhITFNMLmNf
c3RyKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIExpbmtzIHRoZSBITFNMIGNvZGUg
b2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlp
bmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0
dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1bmlmb3Jtcwor
dm9pZCBQcm9ncmFtOjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoKTsKKworICAgIGlmICghbUZyYWdt
ZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhT
aGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNoYXIgKnZlcnRl
eFByb2ZpbGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7CisgICAgY29uc3Qg
Y2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7CisK
KyAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRl
eEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisKKyAgICBpZiAoIWxpbmtWYXJ5aW5n
cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElEM0RYQnVmZmVyICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4
UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAgIElEM0RYQnVmZmVyICpwaXhlbEJpbmFy
eSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhlbEJpbmFyeSkK
KyAgICB7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
ICAgICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVy
KChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVydGV4RXhlY3V0
YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVs
U2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4
ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhSZXN1bHQpICYm
IFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFyeS0+UmVsZWFz
ZSgpOworICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2ZXJ0ZXhCaW5h
cnkgPSBOVUxMOworICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAgaWYgKG1W
ZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghbGlua0F0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1z
KG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0
YW50VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQg
YXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAgICAgICAgLy8g
YXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNv
cmF0aW9uCisgICAgICAgICAgICBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRGVwdGhS
YW5nZUZhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLmZhciIs
IHRydWUpOworICAgICAgICAgICAgbURlcHRoUmFuZ2VEaWZmTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZGlmZiIsIHRydWUpOworICAgICAgICAgICAgbUR4RGVw
dGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiLCB0cnVlKTsKKyAgICAg
ICAgICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9XaW5kb3ci
LCB0cnVlKTsKKyAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOworICAgICAgICAgICAgbUR4RnJv
bnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciLCB0cnVlKTsK
KyAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlv
bigiZHhfUG9pbnRzT3JMaW5lcyIsIHRydWUpOworCisgICAgICAgICAgICBtTGlua2VkID0gdHJ1
ZTsgICAvLyBTdWNjZXNzCisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIERldGVybWluZXMgdGhl
IG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJl
YW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygpCit7CisgICAg
dW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBhdHRyaWJ1dGVz
IHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsr
KQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRy
aWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkg
Z2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUg
bG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlu
a2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisKKyAgICAgICAgICAgIGludCBy
b3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworCisgICAgICAgICAgICBp
ZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0
IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCks
IGxvY2F0aW9uKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiAr
IGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRy
aWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJp
YnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRl
cy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRl
QmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkg
ICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAg
ICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9j
YXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgICAgICBpZiAoYXZh
aWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9B
VFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygi
VG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigp
KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRl
eF0gPSAqYXR0cmlidXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgYXR0cmli
dXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQorICAg
IHsKKyAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleCht
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3Mg
PSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5k
ZXhdLnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykK
KyAgICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10g
PSBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
dCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQor
eworICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9j
YXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RY
Q29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RBTlRUQUJMRV9E
RVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKyAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25z
dGFudERlc2NyaXB0aW9uOworICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisKKyAgICBj
b25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25z
dGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCisgICAgewor
ICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29u
c3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisgICAgICAgIGNvbnN0YW50VGFibGUtPkdldENvbnN0
YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlv
bkNvdW50KTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oY29uc3RhbnRIYW5kbGUsIGNv
bnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQWRkcyB0aGUg
ZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0
aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9y
bSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0
IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29u
c3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
SW5kZXg7CisKKyAgICAgICAgYXNzZXJ0KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMp
L3NpemVvZihtU2FtcGxlcnNbMF0pKTsKKworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4
XS5hY3RpdmUgPSB0cnVlOworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBlID0g
KGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gU0FNUExF
Ul9DVUJFIDogU0FNUExFUl8yRDsKKyAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGly
dHkgPSB0cnVlOworICAgIH0KKworICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNz
KQorICAgIHsKKyAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRp
b24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQo
Y29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9E
RVNDIGZpZWxkRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNv
dW50ID0gMTsKKworICAgICAgICAgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50
RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsK
KworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShmaWVsZEhhbmRsZSwgZmllbGRE
ZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArICIuIikpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgorICAgICAgY2FzZSBEM0RYUENfVkVD
VE9SOgorICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6CisgICAgICBjYXNlIEQzRFhQ
Q19PQkpFQ1Q6CisgICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRp
b24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBVbmlmb3JtICp1bmlm
b3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lKTsKKworICAgIGlm
KCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKG5hbWUuY19zdHIoKSwgdHJ1ZSk7CisgICAgR0xlbnVtIHR5cGUgPSB1bmlmb3Jt
LT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAgICBkZWxldGUg
dW5pZm9ybTsKKworICAgICAgICBpZiAobVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XS0+dHlwZSAhPSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5p
Zm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkg
LSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNp
emU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1M
b2NhdGlvbihuYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RB
TlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAg
aWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxh
cnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAgICAgIGNhc2Ug
RDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0wsIG5hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09M
X1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIG5hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBE
M0RYUFRfSU5UOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBuYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
NCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3Rh
bnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChjb25zdGFu
dERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1
YXJlIG1hdHJpY2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAg
ICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIG5hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
RkxPQVRfTUFUNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOworfQorCisvLyBU
aGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQorc3RkOjpzdHJp
bmcgUHJvZ3JhbTo6ZGVjb3JhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cmluZykKK3sKKyAgICBp
ZiAoc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9
ICJkeF8iKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9Cit9CisKK3N0ZDo6c3Ry
aW5nIFByb2dyYW06OnVuZGVjb3JhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cmluZykKK3sKKyAg
ICBpZiAoc3RyaW5nLnN1YnN0cigwLCAxKSA9PSAiXyIpCisgICAgeworICAgICAgICByZXR1cm4g
c3RyaW5nLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0cmluZzsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWJ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgQk9P
TCAqdmVjdG9yID0gbmV3IEJPT0xbY291bnRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh2W2ldID09IEdMX0ZBTFNFKQorICAgICAgICAg
ICAgdmVjdG9yW2ldID0gMDsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHZlY3RvcltpXSA9
IDE7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7
CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJn
ZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworCisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7
CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldEJvb2xBcnJheShkZXZpY2UsIGNvbnN0YW50
UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsK
KyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0Qm9vbEFycmF5KGRldmljZSwgY29uc3RhbnRW
UywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlIFtdIHZlY3RvcjsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTJidihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIEQzRFhW
RUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZF
Q1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAwLCAwKTsK
KworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFO
RExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0
YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0
YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShk
ZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25z
dGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXko
ZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVb
XSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0zYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAq
dikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZl
Y3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsxXSA9PSBHTF9GQUxTRSA/IDAuMGYg
OiAxLjBmKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzJdID09IEdMX0ZB
TFNFID8gMC4wZiA6IDEuMGYpLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3Rh
bnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQp
OworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50
KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0g
bmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdM
X0ZBTFNFID8gMC4wZiA6IDEuMGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dlsxXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2WzJdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHZbM10gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZikpOwor
CisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5E
TEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3Rh
bnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3Rh
bnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRl
dmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0
YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShk
ZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZSBb
XSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
Cit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3Jt
LCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTLT5TZXRGbG9hdEFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdiwgY291
bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVWUy0+U2V0RmxvYXRBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHYsIGNvdW50KTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7
CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCh2WzBdLCB2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAg
RDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlm
b3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAg
ICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZl
Y3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2
ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgRDNEWFZFQ1RPUjQg
KnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCh2
WzBdLCB2WzFdLCB2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25z
dGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQ
UywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwor
ICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsK
KyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExF
IGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50
SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50
UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50UFMsIChEM0RYVkVDVE9SNCopdiwgY291bnQpOworICAgIH0KKworICAgIGlm
IChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9y
QXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCAoRDNEWFZFQ1RPUjQqKXYsIGNvdW50KTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KQoreworICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1hdHJp
eFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVlWzJdLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVszXSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDEsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAsICAgICAgICAwLCAxKTsKKworICAgICAg
ICB2YWx1ZSArPSA0OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhh
bmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBT
KQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJy
YXkoZGV2aWNlLCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAo
Y29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldE1hdHJpeFRy
YW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0cml4LCBjb3VudCk7CisgICAgfQor
CisgICAgZGVsZXRlW10gbWF0cml4OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RYTUFUUklYICptYXRyaXggPSBuZXcg
RDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFUUklYKHZhbHVlWzBdLCB2YWx1ZVsz
XSwgdmFsdWVbNl0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0s
IHZhbHVlWzRdLCB2YWx1ZVs3XSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZVsyXSwgdmFsdWVbNV0sIHZhbHVlWzhdLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDEpOworCisgICAgICAgIHZhbHVl
ICs9IDk7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50
UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0
YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAg
eworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZp
Y2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFu
dFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3Nl
QXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBk
ZWxldGVbXSBtYXRyaXg7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjph
cHBseVVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFU
UklYW2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIG1hdHJpeFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVlWzRdLCB2YWx1
ZVs4XSwgIHZhbHVlWzEyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsx
XSwgdmFsdWVbNV0sIHZhbHVlWzldLCAgdmFsdWVbMTNdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs2XSwgdmFsdWVbMTBdLCB2YWx1ZVsxNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbM10sIHZhbHVlWzddLCB2YWx1ZVsxMV0s
IHZhbHVlWzE1XSk7CisKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisgICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFu
dFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywg
JmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBT
LT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291
bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBt
YXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSBtYXRyaXg7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0xaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAg
ICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFu
dFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3Rh
bnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoY29u
c3RhbnRQUywgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKKworICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChjb25z
dGFudFBTKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Zmlyc3RJbmRleDsgc2FtcGxlckluZGV4IDwgZmlyc3RJbmRleCArIGNvdW50OyBzYW1wbGVySW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGludCBtYXBwZWRTYW1wbGVy
ID0gdlswXTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPj0gMCAmJiBzYW1w
bGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUp
OworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSBtYXBwZWRTYW1wbGVyOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNb
c2FtcGxlckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0SW50
QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNv
bnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRJbnRBcnJheShk
ZXZpY2UsIGNvbnN0YW50VlMsIHYsIGNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBu
ZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0s
IChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25z
dGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQ
UywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwor
ICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsK
KyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNE
WFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9h
dCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0
YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50
KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFu
dFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3Vu
dCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3
IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAo
ZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAgICB2ICs9IDQ7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Cisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRV
bmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMs
IHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAg
ICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZT
LCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGUgW10gdmVjdG9yOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQoreworICAgIGlmICghZm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNoYXIgaW5mb1sxMDI0XTsKKworICAgIHZhX2xpc3QgdmFyYXJn
OworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgdmFfZW5kKHZhcmFyZyk7CisKKyAgICBz
aXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKKworICAgIGlmICghbUluZm9Mb2cpCisg
ICAgeworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKKyAgICAg
ICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIgKm5l
d0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKKyAgICAgICAgc3Ry
Y3B5KG5ld0xvZywgbUluZm9Mb2cpOworICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3Ro
LCBpbmZvKTsKKworICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKKyAgICAgICAgbUluZm9Mb2cg
PSBuZXdMb2c7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCit7Cisg
ICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOworICAg
IH0KK30KKworLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3Rh
dGUsIGFmdGVyIGRldGFjaGluZyBhIHNoYWRlciwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRl
c3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7CisgICAgaWYg
KGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7CisgICAgICAgIGlm
IChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRl
ci0+ZGV0YWNoKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1WZXJ0ZXhTaGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5V
TEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKKyAgICB7
CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVBpeGVsRXhl
Y3V0YWJsZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQorICAg
IHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVBTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50VGFibGVWUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVWUyA9IE5VTEw7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1MaW5r
ZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUuY2xlYXIoKTsKKyAgICAgICAgbVNlbWFudGljSW5kZXhb
aW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJz
W2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgbVNhbXBsZXJzW2luZGV4XS5kaXJ0eSA9
IHRydWU7CisgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOworICAgICAgICBtVW5pZm9ybXMucG9wX2Jh
Y2soKTsKKyAgICB9CisKKyAgICBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbiA9IC0xOworICAgIG1E
ZXB0aFJhbmdlTmVhckxvY2F0aW9uID0gLTE7CisgICAgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbiA9
IC0xOworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhXaW5kb3dMb2NhdGlvbiA9
IC0xOworICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOworICAgIG1EeEZyb250Q0NX
TG9jYXRpb24gPSAtMTsKKyAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKKworICAg
IG1Vbmlmb3JtSW5kZXguY2xlYXIoKTsKKworICAgIG1QaXhlbEhMU0wuY2xlYXIoKTsKKyAgICBt
VmVydGV4SExTTC5jbGVhcigpOworCisgICAgZGVsZXRlW10gbUluZm9Mb2c7CisgICAgbUluZm9M
b2cgPSBOVUxMOworCisgICAgbUxpbmtlZCA9IGZhbHNlOworfQorCitib29sIFByb2dyYW06Omlz
TGlua2VkKCkKK3sKKyAgICByZXR1cm4gbUxpbmtlZDsKK30KKworYm9vbCBQcm9ncmFtOjppc1Zh
bGlkYXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQorCit1bnNpZ25l
ZCBpbnQgUHJvZ3JhbTo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNlcmlhbDsK
K30KKwordW5zaWduZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKK3sKKyAgICByZXR1cm4g
bUN1cnJlbnRTZXJpYWwrKzsKK30KKworaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7
CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50IGluZGV4ID0gMDsKKwor
ICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGJ1ZlNpemUg
LSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obUluZm9Mb2cpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpbmZvTG9nW2luZGV4XSA9IG1JbmZvTG9nW2luZGV4XTsKKyAgICAgICAgICAgIGluZGV4
Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBpZiAobGVuZ3RoKQorICAgIHsK
KyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpnZXRB
dHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAq
c2hhZGVycykKK3sKKyAgICBpbnQgdG90YWwgPSAwOworCisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIp
CisgICAgeworICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRvdGFsKys7CisgICAgfQorCisgICAgaWYgKG1GcmFnbWVudFNoYWRl
cikKKyAgICB7CisgICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQorICAgICAgICB7CisgICAg
ICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICB0b3RhbCsrOworICAgIH0KKworICAgIGlmIChjb3VudCkKKyAg
ICB7CisgICAgICAgICpjb3VudCA9IHRvdGFsOworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpn
ZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAg
IHVuc2lnbmVkIGludCBhdHRyaWJ1dGUgPSAwOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgaW5kZXg7IGkrKykKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF0dHJpYnV0ZSsrOworCisgICAgICAgICAgICBBU1NFUlQoYXR0cmlidXRlIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVB
dHRyaWJ1dGVDb3VudCgpCisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpOworICAgIH0KKworICAgIGlmIChidWZzaXplID4g
MCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVb
YXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcs
IGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAg
aWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1l
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5n
bGUgJ3R5cGUnIGluc3RhbmNlCisKKyAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmli
dXRlXS50eXBlOworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
Cit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4Kysp
CisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5h
bWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJ
bmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlm
b3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50
ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
dW5pZm9ybSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsr
KQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgdW5pZm9ybSsrOwor
CisgICAgICAgICAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGlu
ZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCisgICAgICAg
IH0KKyAgICAgICAgd2hpbGUgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5zdWJzdHIoMCwgMykg
PT0gImR4XyIpOworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7CisgICAgICAg
IHN0ZDo6c3RyaW5nIHN0cmluZyA9IHVuZGVjb3JhdGUobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1l
KTsKKworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemUgIT0gMSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAgICB9CisKKyAgICAg
ICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVb
YnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7Cisg
ICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKKworICAgICp0eXBlID0g
bVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5zdWJz
dHIoMCwgMykgIT0gImR4XyIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFByb2dyYW06Omdl
dEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisg
ICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3Jt
czsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3Jt
SW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuc3Vi
c3RyKDAsIDMpICE9ICJkeF8iKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBz
dGQ6Om1heCgoaW50KSh1bmRlY29yYXRlKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lKS5s
ZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAg
IG1EZWxldGVTdGF0dXMgPSB0cnVlOworfQorCitib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRl
bGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKK30KKwordm9pZCBQ
cm9ncmFtOjp2YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBpZiAoIWlz
TGlua2VkKCkpIAorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQcm9ncmFtIGhhcyBu
b3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOworICAgICAgICBtVmFsaWRhdGVkID0gZmFs
c2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGx5VW5pZm9ybXMoKTsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhl
IHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0LiIpOworICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVZh
bGlkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbTo6dmFs
aWRhdGVTYW1wbGVycygpIGNvbnN0Cit7CisgICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxl
cnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUg
c2FtZQorICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQg
cHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKKyAgICAvLyBEcmF3
QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04g
ZXJyb3IuCisgICAgc3RkOjptYXA8aW50LCBTYW1wbGVyVHlwZT4gc2FtcGxlck1hcDsgCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgKytp
KQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChzYW1wbGVyTWFwLmZpbmQobVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJl
VW5pdCkgIT0gc2FtcGxlck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobVNhbXBsZXJzW2ldLnR5cGUgIT0gc2FtcGxlck1hcFttU2FtcGxlcnNbaV0ubG9naWNh
bFRleHR1cmVVbml0XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHNhbXBsZXJNYXBbbVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdF0gPSBtU2FtcGxlcnNb
aV0udHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFByb2dyYW06OmdldENvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBEM0RYSEFORExFICpjb25zdGFudFZT
KQoreworICAgIGlmICghdGFyZ2V0VW5pZm9ybS0+aGFuZGxlc1NldCkKKyAgICB7CisgICAgICAg
IHRhcmdldFVuaWZvcm0tPnBzSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRC
eU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKKyAgICAgICAgdGFyZ2V0VW5p
Zm9ybS0+dnNIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0
YXJnZXRVbmlmb3JtLT5uYW1lLmNfc3RyKCkpOworICAgICAgICB0YXJnZXRVbmlmb3JtLT5oYW5k
bGVzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAqY29uc3RhbnRQUyA9IHRhcmdldFVuaWZvcm0t
PnBzSGFuZGxlOworICAgICpjb25zdGFudFZTID0gdGFyZ2V0VW5pZm9ybS0+dnNIYW5kbGU7Cit9
CisKK0dMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6
Z2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFJh
bmdlTmVhckxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlRmFyTG9j
YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhSYW5nZUZhckxvY2F0aW9uOworfQor
CitHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtRHhEZXB0aExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeFdpbmRvd0xvY2F0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4V2luZG93TG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeEZy
b250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9u
OworfQorCitHTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlBy
b2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRl
ZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAy
OC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJP
R1JBTV9IXworCisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVk
ZSA8dmVjdG9yPgorI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3Ry
dWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0K
K3sKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgY29uc3QgR0xl
bnVtIHR5cGU7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplOworCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBib29sIGRp
cnR5OworCisgICAgRDNEWEhBTkRMRSB2c0hhbmRsZTsKKyAgICBEM0RYSEFORExFIHBzSGFuZGxl
OworICAgIGJvb2wgaGFuZGxlc1NldDsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxh
dGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCitzdHJ1
Y3QgVW5pZm9ybUxvY2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5z
aWduZWQgaW50IGluZGV4OworfTsKKworY2xhc3MgUHJvZ3JhbQoreworICBwdWJsaWM6CisgICAg
UHJvZ3JhbSgpOworCisgICAgflByb2dyYW0oKTsKKworICAgIGJvb2wgYXR0YWNoU2hhZGVyKFNo
YWRlciAqc2hhZGVyKTsKKyAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7Cisg
ICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CisKKyAgICBJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqZ2V0VmVydGV4U2hhZGVyKCk7CisKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihH
THVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVM
b2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQg
YXR0cmlidXRlSW5kZXgpOworCisgICAgdm9pZCBkaXJ0eUFsbFNhbXBsZXJzKCk7CisKKyAgICBH
TGludCBnZXRTYW1wbGVyTWFwcGluZyh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBT
YW1wbGVyVHlwZSBnZXRTYW1wbGVyVHlwZSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAg
ICBib29sIGlzU2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgsIGJvb2wg
ZGlydHkpOworCisgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUs
IGJvb2wgZGVjb3JhdGVkKTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAg
IGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwor
CisgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKnBhcmFtcyk7
CisgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMaW50ICpwYXJhbXMpOwor
CisgICAgR0xpbnQgZ2V0RGVwdGhSYW5nZURpZmZMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50
IGdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREZXB0aFJh
bmdlRmFyTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeFdpbmRvd0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQg
Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEZyb250
Q0NXTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlv
bigpIGNvbnN0OworCisgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgdm9pZCBhcHBs
eVVuaWZvcm1zKCk7CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBib29sIGlzTGlua2VkKCk7Cisg
ICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVp
bnQgKnNoYWRlcnMpOworCisgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
OworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xp
bnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpOworCisgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKKyAgICBib29sIGlzRmxh
Z2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIHZhbGlkYXRlKCk7CisgICAgYm9v
bCB2YWxpZGF0ZVNhbXBsZXJzKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0
OworCisgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOworCisgICAgSUQzRFhCdWZmZXIg
KmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJ
RDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKKyAgICB2b2lkIHVubGluayhib29s
IGRlc3Ryb3kgPSBmYWxzZSk7CisKKyAgICBpbnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcg
KnBhY2tpbmdbXVs0XSk7CisgICAgYm9vbCBsaW5rVmFyeWluZ3MoKTsKKworICAgIGJvb2wgbGlu
a0F0dHJpYnV0ZXMoKTsKKyAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSk7CisKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUg
KmNvbnN0YW50VGFibGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExF
ICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3Jp
cHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAiIik7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAm
bmFtZSk7CisgICAgVW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIGJvb2wgYXBw
bHlVbmlmb3JtMWJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xl
YW4gKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMmJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2J2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtNGJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGJvb2xlYW4gKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAg
Ym9vbCBhcHBseVVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybU1h
dHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworCisgICAgdm9pZCBnZXRDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgRDNEWEhBTkRMRSAqY29uc3RhbnRQUywgRDNEWEhBTkRMRSAqY29uc3Rh
bnRWUyk7CisKKyAgICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAuLi4p
OworICAgIHZvaWQgcmVzZXRJbmZvTG9nKCk7CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVj
b3JhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cmluZyk7ICAgICAvLyBQcmVwZW5kIGFuIHVuZGVy
c2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmlu
ZyAmc3RyaW5nKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCisKKyAgICBzdGF0aWMg
dW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CisKKyAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdt
ZW50U2hhZGVyOworICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKKworICAgIHN0ZDo6
c3RyaW5nIG1QaXhlbEhMU0w7CisgICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisKKyAgICBJ
RGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVy
dGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7CisgICAgSUQzRFhDb25zdGFudFRhYmxlICpt
Q29uc3RhbnRUYWJsZVBTOworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVW
UzsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVS
VEVYX0FUVFJJQlNdOworICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhf
QVRUUklCU107CisgICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisK
KyAgICBzdHJ1Y3QgU2FtcGxlcgorICAgIHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAg
IEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICAgICAgU2FtcGxlclR5cGUgdHlwZTsKKyAg
ICAgICAgYm9vbCBkaXJ0eTsKKyAgICB9OworCisgICAgU2FtcGxlciBtU2FtcGxlcnNbTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4g
VW5pZm9ybUFycmF5OworICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5k
ZXggbVVuaWZvcm1JbmRleDsKKworICAgIEdMaW50IG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uOwor
ICAgIEdMaW50IG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uOworICAgIEdMaW50IG1EZXB0aFJhbmdl
RmFyTG9jYXRpb247CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhX
aW5kb3dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247CisgICAg
R0xpbnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9j
YXRpb247CisKKyAgICBib29sIG1MaW5rZWQ7CisgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8v
IEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5v
IGxvbmdlciBpbiB1c2UKKyAgICBjaGFyICptSW5mb0xvZzsKKyAgICBib29sIG1WYWxpZGF0ZWQ7
CisKKyAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRTZXJpYWw7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9I
XwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFJlbmRlcmJ1ZmZlci5jcHA6IHRoZSBnbDo6UmVuZGVyYnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVy
aXZlZCBjbGFzc2VzCisvLyBDb2xvcmJ1ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZm
ZXIuIEltcGxlbWVudHMgR0wgcmVuZGVyYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4Lgor
CisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFj
ZSBnbAorewordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOwor
CitSZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcigpCit7CisgICAgbVdpZHRoID0gMDsKKyAgICBt
SGVpZ2h0ID0gMDsKKyAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vIGRlZmF1bHQgZm9ybWF0LCBu
ZWVkcyB0byBiZSBvbmUgb2YgdGhlIGV4cGVjdGVkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzCisgICAg
bVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Cit9CisKK1JlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZl
cigpCit7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjppc0NvbG9yYnVmZmVyKCkKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZm
ZXIoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKworSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBy
ZXR1cm4gTlVMTDsKK30KKworaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKQoreworICAgIHJl
dHVybiBtV2lkdGg7Cit9CisKK2ludCBSZW5kZXJidWZmZXI6OmdldEhlaWdodCgpCit7CisgICAg
cmV0dXJuIG1IZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyOjpzZXRTaXplKGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3sKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVp
Z2h0OworfQorCisKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldEZvcm1hdCgpCit7CisgICAgcmV0
dXJuIG1Gb3JtYXQ7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6OmdldFNlcmlhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXI6Omlzc3VlU2VyaWFsKCkKK3sKKyAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKK30K
KworQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQpIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKHJlbmRlclRhcmdl
dCkKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisKKyAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICByZW5kZXJUYXJnZXQtPkdldERlc2Mo
JmRlc2NyaXB0aW9uKTsKKworICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNj
cmlwdGlvbi5IZWlnaHQpOworICAgIH0KKworfQorCitDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KQoreworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCBlczJkeDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExF
X05PTkUsIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisKKyAgICBpZiAocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAobVJl
bmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIG1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNl
dFNpemUoMCwgMCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsKKyAgICB9Cit9CisKK0Nv
bG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KK30KKworYm9vbCBD
b2xvcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dM
dWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMy
ZHg6OkdldFJlZFNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRHcmVlblNpemUoKQoreworICAgIGlmICht
UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9u
OworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgcmV0dXJuIGVzMmR4OjpHZXRHcmVlblNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRCbHVlU2l6ZSgp
Cit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0
aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldEJsdWVTaXplKGRlc2NyaXB0aW9uLkZv
cm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0dMdWludCBDb2xvcmJ1ZmZlcjo6
Z2V0QWxwaGFTaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0
RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6R2V0QWxwaGFTaXpl
KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJl
Y3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1
cm4gbVJlbmRlclRhcmdldDsKK30KKworRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpCit7
CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+QWRk
UmVmKCk7CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBk
ZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBzZXRTaXplKGRl
c2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0g
R0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBh
cmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1
ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgfQorfQorCitEZXB0aGJ1ZmZl
cjo6RGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uo
d2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxT
RSwgJm1EZXB0aFN0ZW5jaWwsIDApOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAg
eworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0gR0xf
REVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUg
cXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZl
ciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHNldFNpemUoMCwgMCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy9kZWZh
dWx0IGZvcm1hdAorICAgIH0KK30KKworRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCit7Cisg
ICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxl
YXNlKCk7CisgICAgfQorfQorCitib29sIERlcHRoYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0x1aW50IERlcHRoYnVmZmVyOjpnZXREZXB0aFNpemUo
KQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlw
dGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXREZXB0aFNpemUoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkg
KkRlcHRoYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtRGVwdGhTdGVu
Y2lsOworfQorCitTdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5
ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpCit7CisgICAgaWYg
KGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisK
KyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBkZXB0aFN0ZW5j
aWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9u
LldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJ
TF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwg
dGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZv
ciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlCisgICAgfQorfQorCitTdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVy
KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQs
IEQzREZNVF9EMjRTOCwgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVu
Y2lsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgc2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4
OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxs
aW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2ls
bCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGlu
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRTaXplKDAsIDApOwor
ICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vZGVmYXVsdCBmb3JtYXQKKyAgICB9Cit9CisK
K1N0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisK
K0dMdWludCBTdGVuY2lsYnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSgpCit7CisgICAgaWYgKG1EZXB0
aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Cisg
ICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBy
ZXR1cm4gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlN0ZW5jaWxi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9
Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVu
ZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHZpcnR1YWwgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBh
bmQgaXRzIGRlcml2ZWQKKy8vIGNsYXNzZXMgQ29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBT
dGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBw
YWdlIDEwOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCisjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXIKK3sKKyAgcHVi
bGljOgorICAgIFJlbmRlcmJ1ZmZlcigpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyKCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb2xvcmJ1ZmZlcigpOworICAgIHZpcnR1YWwgYm9vbCBp
c0RlcHRoYnVmZmVyKCk7CisgICAgdmlydHVhbCBib29sIGlzU3RlbmNpbGJ1ZmZlcigpOworCisg
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0dWFs
IGludCBnZXRXaWR0aCgpOworICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpOworICAgIEdMZW51
bSBnZXRGb3JtYXQoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CisKKyAgcHJvdGVjdGVkOgorICAg
IHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdMZW51bSBtRm9ybWF0
OworICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlcik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50
IG1DdXJyZW50U2VyaWFsOworCisgICAgaW50IG1XaWR0aDsKKyAgICBpbnQgbUhlaWdodDsKK307
CisKK2NsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6
CisgICAgZXhwbGljaXQgQ29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdl
dCk7CisgICAgQ29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
KTsKKworICAgIH5Db2xvcmJ1ZmZlcigpOworCisgICAgYm9vbCBpc0NvbG9yYnVmZmVyKCk7CisK
KyAgICBHTHVpbnQgZ2V0UmVkU2l6ZSgpOworICAgIEdMdWludCBnZXRHcmVlblNpemUoKTsKKyAg
ICBHTHVpbnQgZ2V0Qmx1ZVNpemUoKTsKKyAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCk7CisKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbG9yYnVmZmVyKTsKK307CisKK2NsYXNzIERlcHRo
YnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQg
RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgRGVwdGhi
dWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIH5EZXB0aGJ1ZmZlcigpOworCisg
ICAgYm9vbCBpc0RlcHRoYnVmZmVyKCk7CisKKyAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCk7CisK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVwdGhidWZmZXIpOworICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOworfTsKKworY2xhc3MgU3RlbmNpbGJ1ZmZlciA6IHB1
YmxpYyBSZW5kZXJidWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFN0ZW5jaWxidWZm
ZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgU3RlbmNpbGJ1ZmZlcihp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgflN0ZW5jaWxidWZmZXIoKTsKKworICAgIGJv
b2wgaXNTdGVuY2lsYnVmZmVyKCk7CisKKyAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKTsKKwor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdGVuY2lsYnVmZmVyKTsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
c3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBT
aGFkZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgIGRlcml2
ZWQgY2xhc3NlcworLy8gVmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50
cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQgcmVsYXRlZAorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uIDMuOCBwYWdlIDg0
LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgor
CisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJsYW5nLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAor
ewordm9pZCAqU2hhZGVyOjptRnJhZ21lbnRDb21waWxlciA9IE5VTEw7Cit2b2lkICpTaGFkZXI6
Om1WZXJ0ZXhDb21waWxlciA9IE5VTEw7CisKK1NoYWRlcjo6U2hhZGVyKENvbnRleHQgKmNvbnRl
eHQsIEdMdWludCBoYW5kbGUpIDogbUhhbmRsZShoYW5kbGUpLCBtQ29udGV4dChjb250ZXh0KQor
eworICAgIG1Tb3VyY2UgPSBOVUxMOworICAgIG1IbHNsID0gTlVMTDsKKyAgICBtSW5mb0xvZyA9
IE5VTEw7CisKKyAgICAvLyBQZXJmb3JtIGEgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgdGhl
IHNoYWRlciBjb21waWxlciAob3IgYWZ0ZXIgYmVpbmcgZGVzdHJ1Y3RlZCBieSByZWxlYXNlQ29t
cGlsZXIpCisgICAgaWYgKCFtRnJhZ21lbnRDb21waWxlcikKKyAgICB7CisgICAgICAgIGludCBy
ZXN1bHQgPSBTaEluaXRpYWxpemUoKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICB7
CisgICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNo
TGFuZ0ZyYWdtZW50LCBFU2hTcGVjR0xFUzIpOworICAgICAgICAgICAgbVZlcnRleENvbXBpbGVy
ID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nVmVydGV4LCBFU2hTcGVjR0xFUzIpOworICAg
ICAgICB9CisgICAgfQorCisgICAgbUF0dGFjaENvdW50ID0gMDsKKyAgICBtRGVsZXRlU3RhdHVz
ID0gZmFsc2U7Cit9CisKK1NoYWRlcjo6flNoYWRlcigpCit7CisgICAgZGVsZXRlW10gbVNvdXJj
ZTsKKyAgICBkZWxldGVbXSBtSGxzbDsKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKK30KKworR0x1
aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhhbmRsZTsKK30K
Kwordm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3Ry
aW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQoreworICAgIGRlbGV0ZVtdIG1Tb3VyY2U7CisgICAg
aW50IHRvdGFsTGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQpc3Ry
bGVuKHN0cmluZ1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtU291cmNlID0gbmV3IGNo
YXJbdG90YWxMZW5ndGggKyAxXTsKKyAgICBjaGFyICpjb2RlID0gbVNvdXJjZTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGludCBzdHJpbmdM
ZW5ndGg7CisKKyAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gbGVuZ3RoW2ldOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJs
ZW4oc3RyaW5nW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5n
W2ldLCBzdHJpbmdMZW5ndGgpOworICAgICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKKyAgICB9
CisKKyAgICBtU291cmNlW3RvdGFsTGVuZ3RoXSA9ICdcMCc7Cit9CisKK2ludCBTaGFkZXI6Omdl
dEluZm9Mb2dMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3Ry
bGVuKG1JbmZvTG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3sKKyAgICBp
bnQgaW5kZXggPSAwOworCisgICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtSW5mb0xvZykpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gbUluZm9Mb2dbaW5kZXhdOwor
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZTaXpl
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlm
IChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCitp
bnQgU2hhZGVyOjpnZXRTb3VyY2VMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbVNvdXJjZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
IHJldHVybiBzdHJsZW4obVNvdXJjZSkgKyAxOworICAgIH0KK30KKwordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqc291cmNlKQor
eworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBpZiAobVNvdXJjZSkKKyAgICB7CisgICAgICAg
IHdoaWxlIChpbmRleCA8IGJ1ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obVNvdXJj
ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNvdXJjZVtpbmRleF0gPSBtU291cmNlW2luZGV4
XTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVm
U2l6ZSkKKyAgICB7CisgICAgICAgIHNvdXJjZVtpbmRleF0gPSAnXDAnOworICAgIH0KKworICAg
IGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQor
Citib29sIFNoYWRlcjo6aXNDb21waWxlZCgpCit7CisgICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7
Cit9CisKK2NvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCit7CisgICAgcmV0dXJuIG1IbHNs
OworfQorCit2b2lkIFNoYWRlcjo6YXR0YWNoKCkKK3sKKyAgICBtQXR0YWNoQ291bnQrKzsKK30K
Kwordm9pZCBTaGFkZXI6OmRldGFjaCgpCit7CisgICAgbUF0dGFjaENvdW50LS07CisKKyAgICBp
ZiAobUF0dGFjaENvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKKyAgICB7CisgICAgICAgIG1D
b250ZXh0LT5kZWxldGVTaGFkZXIobUhhbmRsZSk7CisgICAgfQorfQorCitib29sIFNoYWRlcjo6
aXNBdHRhY2hlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BdHRhY2hDb3VudCA+IDA7Cit9CisK
K2Jvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EZWxldGVTdGF0dXM7Cit9CisKK3ZvaWQgU2hhZGVyOjpmbGFnRm9yRGVsZXRpb24oKQorewor
ICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOworfQorCit2b2lkIFNoYWRlcjo6cmVsZWFzZUNvbXBp
bGVyKCkKK3sKKyAgICBTaERlc3RydWN0KG1GcmFnbWVudENvbXBpbGVyKTsKKyAgICBTaERlc3Ry
dWN0KG1WZXJ0ZXhDb21waWxlcik7CisKKyAgICBtRnJhZ21lbnRDb21waWxlciA9IE5VTEw7Cisg
ICAgbVZlcnRleENvbXBpbGVyID0gTlVMTDsKKworICAgIFNoRmluYWxpemUoKTsKK30KKwordm9p
ZCBTaGFkZXI6OnBhcnNlVmFyeWluZ3MoKQoreworICAgIGlmIChtSGxzbCkKKyAgICB7CisgICAg
ICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKG1IbHNsLCAiLy8gVmFyeWluZ3MiKSArIDEy
OworCisgICAgICAgIHdoaWxlKHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgdmFy
eWluZ1R5cGVbMjU2XTsKKyAgICAgICAgICAgIGNoYXIgdmFyeWluZ05hbWVbMjU2XTsKKworICAg
ICAgICAgICAgaW50IG1hdGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJXMgJXMiLCB2YXJ5
aW5nVHlwZSwgdmFyeWluZ05hbWUpOworCisgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjaGFyICphcnJheSA9IHN0cnN0cih2YXJ5aW5nTmFtZSwgIlsiKTsKKyAgICAg
ICAgICAgIGludCBzaXplID0gMTsKKworICAgICAgICAgICAgaWYgKGFycmF5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHNpemUgPSBhdG9pKGFycmF5ICsgMSk7CisgICAgICAgICAg
ICAgICAgKmFycmF5ID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyeWlu
Z3MucHVzaF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUs
IHNpemUsIGFycmF5ICE9IE5VTEwpKTsKKworICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5w
dXQsICI7IikgKyAyOworICAgICAgICB9CisKKyAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJz
dHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAhPSBOVUxMOworICAgICAgICBtVXNlc0Zy
b250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxM
OworICAgIH0KK30KKwordm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIp
Cit7CisgICAgaWYgKGlzQ29tcGlsZWQoKSB8fCAhbVNvdXJjZSkKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBUUkFDRSgiXG4lcyIsIG1Tb3VyY2UpOworCisgICAgZGVsZXRl
W10gbUluZm9Mb2c7CisgICAgbUluZm9Mb2cgPSBOVUxMOworCisgICAgVEJ1aWx0SW5SZXNvdXJj
ZSByZXNvdXJjZXM7CisKKyAgICByZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9IE1BWF9WRVJU
RVhfQVRUUklCUzsKKyAgICByZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsKKyAgICByZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMg
PSBNQVhfVkFSWUlOR19WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyA9IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsKKyAgICByZXNvdXJjZXMu
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTOworICAgIHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOworICAgIHJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0g
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzsKKyAgICByZXNvdXJjZXMubWF4RHJhd0J1ZmZl
cnMgPSBNQVhfRFJBV19CVUZGRVJTOworCisgICAgaW50IHJlc3VsdCA9IFNoQ29tcGlsZShjb21w
aWxlciwgJm1Tb3VyY2UsIDEsIEVTaE9wdE5vbmUsICZyZXNvdXJjZXMsIEVEZWJ1Z09wT2JqZWN0
Q29kZSk7CisgICAgY29uc3QgY2hhciAqb2JqID0gU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsK
KyAgICBjb25zdCBjaGFyICppbmZvID0gU2hHZXRJbmZvTG9nKGNvbXBpbGVyKTsKKworICAgIGlm
IChyZXN1bHQpCisgICAgeworICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW3N0cmxlbihvYmopICsg
MV07CisgICAgICAgIHN0cmNweShtSGxzbCwgb2JqKTsKKworICAgICAgICBUUkFDRSgiXG4lcyIs
IG1IbHNsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcg
Y2hhcltzdHJsZW4oaW5mbykgKyAxXTsKKyAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsK
KworICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZvTG9nKTsKKyAgICB9Cit9CisKK0dMZW51bSBT
aGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSkKK3sKKyAgICBpZiAodHlw
ZSA9PSAiZmxvYXQiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgIH0KKyAg
ICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDIiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZM
T0FUX1ZFQzI7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIpCisgICAgewor
ICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMzsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9
PSAiZmxvYXQ0IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0OworICAgIH0K
KyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDJ4MiIpCisgICAgeworICAgICAgICByZXR1cm4g
R0xfRkxPQVRfTUFUMjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzeDMiKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgfQorICAgIGVsc2UgaWYg
KHR5cGUgPT0gImZsb2F0NHg0IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0
OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gR0xfTk9ORTsK
K30KKworLy8gdHJ1ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tp
bmcgdGhhbiB5Citib29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwg
Y29uc3QgVmFyeWluZyAmeSkKK3sKKyAgICBpZih4LnR5cGUgPT0geS50eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHguc2l6ZSA+IHkuc2l6ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHgudHlw
ZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRy
dWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAg
ICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJu
IGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjog
cmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICBzd2l0Y2goeS50eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0
cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAg
c3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDog
cmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNl
OworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0
dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlcnRleFNoYWRl
cjo6VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVy
KGNvbnRleHQsIGhhbmRsZSkKK3sKK30KKworVmVydGV4U2hhZGVyOjp+VmVydGV4U2hhZGVyKCkK
K3sKK30KKworR0xlbnVtIFZlcnRleFNoYWRlcjo6Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIEdM
X1ZFUlRFWF9TSEFERVI7Cit9CisKK3ZvaWQgVmVydGV4U2hhZGVyOjpjb21waWxlKCkKK3sKKyAg
ICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7CisgICAgcGFyc2VBdHRyaWJ1dGVzKCk7
CisgICAgcGFyc2VWYXJ5aW5ncygpOworfQorCitpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRp
Y0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQoreworICAgIGlmICghYXR0
cmlidXRlTmFtZS5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAw
OworICAgICAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtQXR0
cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09IGF0dHJp
YnV0ZU5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGlj
SW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIC0xOworfQorCit2b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKK3sK
KyAgICBpZiAobUhsc2wpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0
cihtSGxzbCwgIi8vIEF0dHJpYnV0ZXMiKSArIDE0OworCisgICAgICAgIHdoaWxlKHRydWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOworICAgICAgICAg
ICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1Nl07CisKKyAgICAgICAgICAgIGludCBtYXRjaGVzID0g
c3NjYW5mKGlucHV0LCAic3RhdGljICVzIF8lcyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5h
bWUpOworCisgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtQXR0cmli
dXRlcy5wdXNoX2JhY2soQXR0cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmli
dXRlTmFtZSkpOworCisgICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihD
b250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihjb250ZXh0LCBoYW5kbGUp
Cit7Cit9CisKK0ZyYWdtZW50U2hhZGVyOjp+RnJhZ21lbnRTaGFkZXIoKQoreworfQorCitHTGVu
dW0gRnJhZ21lbnRTaGFkZXI6OmdldFR5cGUoKQoreworICAgIHJldHVybiBHTF9GUkFHTUVOVF9T
SEFERVI7Cit9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OmNvbXBpbGUoKQoreworICAgIGNvbXBp
bGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOworICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICB2
YXJ5aW5ncy5zb3J0KGNvbXBhcmVWYXJ5aW5nKTsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVT
djIvU2hhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlNoYWRlciBjbGFz
cyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVmVydGV4U2hhZGVyIGFuZCBG
cmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQKKy8vIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0
IGFuZCBzZWN0aW9uCisvLyAzLjggcGFnZSA4NC4KKworI2lmbmRlZiBMSUJHTEVTVjJfU0hBREVS
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkeDkuaD4KKyNpbmNsdWRlIDxsaXN0
PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisK
K25hbWVzcGFjZSBnbAoreworc3RydWN0IFZhcnlpbmcKK3sKKyAgICBWYXJ5aW5nKEdMZW51bSB0
eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJvb2wgYXJyYXkpCisgICAg
ICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwgYXJyYXkoYXJyYXkpLCBy
ZWcoLTEpLCBjb2woLTEpCisgICAgeworICAgIH0KKworICAgIEdMZW51bSB0eXBlOworICAgIHN0
ZDo6c3RyaW5nIG5hbWU7CisgICAgaW50IHNpemU7ICAgLy8gTnVtYmVyIG9mICd0eXBlJyBlbGVt
ZW50cworICAgIGJvb2wgYXJyYXk7CisKKyAgICBpbnQgcmVnOyAgICAvLyBGaXJzdCB2YXJ5aW5n
IHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluaworICAgIGludCBjb2w7ICAgIC8vIEZpcnN0
IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCit9OworCit0eXBlZGVmIHN0
ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKKworY2xhc3MgU2hhZGVyCit7CisgICAgZnJp
ZW5kIFByb2dyYW07CisKKyAgcHVibGljOgorICAgIFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBH
THVpbnQgaGFuZGxlKTsKKworICAgIHZpcnR1YWwgflNoYWRlcigpOworCisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VHlwZSgpID0gMDsKKyAgICBHTHVpbnQgZ2V0SGFuZGxlKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGRlbGV0ZVNvdXJjZSgpOworICAgIHZvaWQgc2V0U291cmNlKEdMc2l6ZWkgY291bnQs
IGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpOworICAgIGludCBnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICBpbnQgZ2V0U291cmNlTGVu
Z3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIGNoYXIgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpID0g
MDsKKyAgICBib29sIGlzQ29tcGlsZWQoKTsKKyAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7CisK
KyAgICB2b2lkIGF0dGFjaCgpOworICAgIHZvaWQgZGV0YWNoKCk7CisgICAgYm9vbCBpc0F0dGFj
aGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OworICAg
IHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ29tcGls
ZXIoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRl
cik7CisKKyAgICB2b2lkIHBhcnNlVmFyeWluZ3MoKTsKKworICAgIHZvaWQgY29tcGlsZVRvSExT
TCh2b2lkICpjb21waWxlcik7CisKKyAgICBzdGF0aWMgR0xlbnVtIHBhcnNlVHlwZShjb25zdCBz
dGQ6OnN0cmluZyAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3Qg
VmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSk7CisKKyAgICBjb25zdCBHTHVpbnQgbUhhbmRs
ZTsKKyAgICBpbnQgbUF0dGFjaENvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0
cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bworICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAv
LyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3aGVuIG5v
IGxvbmdlciBpbiB1c2UKKworICAgIGNoYXIgKm1Tb3VyY2U7CisgICAgY2hhciAqbUhsc2w7Cisg
ICAgY2hhciAqbUluZm9Mb2c7CisKKyAgICBWYXJ5aW5nTGlzdCB2YXJ5aW5nczsKKworICAgIGJv
b2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworCisgICAgQ29u
dGV4dCAqbUNvbnRleHQ7CisKKyAgICBzdGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7Cisg
ICAgc3RhdGljIHZvaWQgKm1WZXJ0ZXhDb21waWxlcjsKK307CisKK3N0cnVjdCBBdHRyaWJ1dGUK
K3sKKyAgICBBdHRyaWJ1dGUoKSA6IHR5cGUoR0xfTk9ORSksIG5hbWUoIiIpCisgICAgeworICAg
IH0KKworICAgIEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
IDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRy
aWJ1dGU+IEF0dHJpYnV0ZUFycmF5OworCitjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hh
ZGVyCit7CisgICAgZnJpZW5kIFByb2dyYW07CisKKyAgcHVibGljOgorICAgIFZlcnRleFNoYWRl
cihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKworICAgIH5WZXJ0ZXhTaGFkZXIo
KTsKKworICAgIEdMZW51bSBnZXRUeXBlKCk7CisgICAgdm9pZCBjb21waWxlKCk7CisgICAgaW50
IGdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpOworCisg
IHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleFNoYWRlcik7CisK
KyAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOworCisgICAgQXR0cmlidXRlQXJyYXkgbUF0dHJp
YnV0ZXM7Cit9OworCitjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKK3sKKyAg
cHVibGljOgorICAgIEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5k
bGUpOworCisgICAgfkZyYWdtZW50U2hhZGVyKCk7CisKKyAgICBHTGVudW0gZ2V0VHlwZSgpOwor
ICAgIHZvaWQgY29tcGlsZSgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEZyYWdtZW50U2hhZGVyKTsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9T
SEFERVJfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQ5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVy
ZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBj
bGFzc2VzCisvLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRl
eHR1cmUgb2JqZWN0cyBhbmQgcmVsYXRlZAorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRo
dXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvQmxpdC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVGV4dHVyZTo6SW1hZ2U6OkltYWdl
KCkKKyAgOiB3aWR0aCgwKSwgaGVpZ2h0KDApLCBkaXJ0eShmYWxzZSksIHN1cmZhY2UoTlVMTCkK
K3sKK30KKworVGV4dHVyZTo6SW1hZ2U6On5JbWFnZSgpCit7CisgIGlmIChzdXJmYWNlKSBzdXJm
YWNlLT5SZWxlYXNlKCk7Cit9CisKK1RleHR1cmU6OlRleHR1cmUoQ29udGV4dCAqY29udGV4dCkg
OiBtQ29udGV4dChjb250ZXh0KQoreworICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1B
UF9MSU5FQVI7CisgICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKKyAgICBtV3JhcFMgPSBHTF9S
RVBFQVQ7CisgICAgbVdyYXBUID0gR0xfUkVQRUFUOworCisgICAgbURpcnR5TWV0YURhdGEgPSB0
cnVlOworICAgIG1EaXJ0eSA9IHRydWU7CisgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNlOworICAg
IG1CYXNlVGV4dHVyZSA9IE5VTEw7Cit9CisKK1RleHR1cmU6On5UZXh0dXJlKCkKK3sKK30KKwor
QmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpCit7CisgICAgcmV0dXJuIG1Db250ZXh0LT5nZXRC
bGl0dGVyKCk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0
ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0
ZXIoR0xlbnVtIGZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKGZpbHRlcikKKyAgICB7CisgICAgICBj
YXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNU
OgorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTElORUFSOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU1pbkZpbHRl
ciAhPSBmaWx0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9
IGZpbHRlcjsKKyAgICAgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0
dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKGZpbHRlcikK
KyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7CisgICAgICAgICAgICAg
ICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFw
KQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JFUEVBVDoKKyAg
ICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFU
OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKKyAgICAgICAgICAgICAgICBtRGly
dHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
Ky8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBl
bnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7Cisg
ICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFUOgorICAgICAgY2Fz
ZSBHTF9DTEFNUF9UT19FREdFOgorICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVt
IFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NaW5GaWx0ZXI7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtTWFnRmlsdGVyOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAorewor
ICAgIHJldHVybiBtV3JhcFM7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1XcmFwVDsKK30KKworR0x1aW50IFRleHR1cmU6OmdldFdpZHRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitHTHVpbnQgVGV4dHVyZTo6Z2V0SGVp
Z2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworLy8gU2VsZWN0cyBhbiBp
bnRlcm5hbCBEaXJlY3QzRCA5IGZvcm1hdCBmb3Igc3RvcmluZyBhbiBJbWFnZQorRDNERk9STUFU
IFRleHR1cmU6OnNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0KQoreworICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Cit9CisKK2ludCBUZXh0dXJlOjppbWFnZVBpdGNoKGNvbnN0IEltYWdlICZp
bWcpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltZy53aWR0aCAqIDQ7Cit9CisKKy8vIFN0b3JlIHRo
ZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVp
Z2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0
aGUgQkdSQTggcGl4ZWwgcmVjdGFuZ2xlIGF0IG91dHB1dCB3aXRoIG91dHB1dFBpdGNoIGJ5dGVz
IGluIGJldHdlZW4gZWFjaCBsaW5lLgordm9pZCBUZXh0dXJlOjpsb2FkSW1hZ2VEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21w
dXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UxNiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzb3VyY2UpOwor
ICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgcjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZzsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTsK
KworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4XTsKKyAgICAg
ICAgICAgICAgICByID0gMDsKKyAgICAgICAgICAgICAgICBnID0gMDsKKyAgICAgICAgICAgICAg
ICBiID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgICAgICAgICByID0gc291cmNlW3hdOworICAgICAgICAgICAg
ICAgIGcgPSBzb3VyY2VbeF07CisgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4XTsKKyAgICAg
ICAgICAgICAgICBhID0gMHhGRjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICByID0gc291cmNl
WzIqeCswXTsKKyAgICAgICAgICAgICAgICBnID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAg
ICAgICBiID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgICAgICBhID0gc291cmNlWzIqeCsx
XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBy
ID0gc291cmNlW3ggKiAzICsgMF07CisgICAgICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbeCAq
IDMgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4ICogMyArIDJdOworICAg
ICAgICAgICAgICAgICAgICBhID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
YmEgPSBzb3VyY2UxNlt4XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdi
YSAmIDB4MDAxRikgPj4gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYg
MHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4g
MTMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1JH
QkE6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAg
ICAgciA9IHNvdXJjZVt4ICogNCArIDBdOworICAgICAgICAgICAgICAgICAgICBnID0gc291cmNl
W3ggKiA0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDQgKyAyXTsK
KyAgICAgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4ICogNCArIDNdOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGEgPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwg
KChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJn
YmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAw
KSA+PiAxMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAgICAgICAgICAgICAgICAgICBhID0g
KHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBiID0g
KChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4
MDdDMCkgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gKChyZ2JhICYgMHhGODAw
KSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gYjsKKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IGc7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSByOworICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gYTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBJbWFnZSAqaW1nKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVM
TDsKKworICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwKQorICAgIHsKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNl
KHdpZHRoLCBoZWlnaHQsIHNlbGVjdEZvcm1hdChmb3JtYXQpLCBEM0RQT09MX1NZU1RFTU1FTSwg
Jm5ld1N1cmZhY2UsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW1nLT5zdXJm
YWNlKSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBpbWctPnN1cmZhY2UgPSBuZXdTdXJm
YWNlOworCisgICAgaW1nLT53aWR0aCA9IHdpZHRoOworICAgIGltZy0+aGVpZ2h0ID0gaGVpZ2h0
OworICAgIGltZy0+Zm9ybWF0ID0gZm9ybWF0OworCisgICAgaWYgKHBpeGVscyAhPSBOVUxMICYm
IG5ld1N1cmZhY2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBuZXdTdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2Vk
LCBOVUxMLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZElt
YWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICBuZXdT
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBpbWctPmRpcnR5ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7Cit9CisKK3ZvaWQgVGV4
dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBpZiAo
d2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1nLT5o
ZWlnaHQpIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKworICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3Qo
JmxvY2tlZCwgTlVMTCwgMCk7CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbG9hZEltYWdlRGF0YSh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGltZy0+
c3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KKworICAgIGltZy0+ZGlydHkgPSB0cnVlOwor
fQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQoreworICAg
IGlmICghaXNDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1EaXJ0eU1ldGFEYXRhKQorICAgIHsKKyAgICAgICAgbUJhc2VUZXh0dXJlID0g
Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKG1EaXJ0eU1ldGFEYXRhIHx8IGRpcnR5SW1hZ2VEYXRhKCkpCisgICAgeworICAg
ICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxz
ZTsKKyAgICBBU1NFUlQoIWRpcnR5SW1hZ2VEYXRhKCkpOworCisgICAgcmV0dXJuIG1CYXNlVGV4
dHVyZTsKK30KKworYm9vbCBUZXh0dXJlOjppc0RpcnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KG1EaXJ0eSB8fCBtRGlydHlNZXRhRGF0YSB8fCBkaXJ0eUltYWdlRGF0YSgpKTsKK30KKworLy8g
UmV0dXJucyB0aGUgdG9wLWxldmVsIHRleHR1cmUgc3VyZmFjZSBhcyBhIHJlbmRlciB0YXJnZXQK
K3ZvaWQgVGV4dHVyZTo6bmVlZFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKCFtSXNSZW5kZXJh
YmxlKQorICAgIHsKKyAgICAgICAgbUJhc2VUZXh0dXJlID0gY29udmVydFRvUmVuZGVyVGFyZ2V0
KCk7CisgICAgICAgIG1Jc1JlbmRlcmFibGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkaXJ0
eUltYWdlRGF0YSgpKQorICAgIHsKKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworICAgIH0KKwor
ICAgIG1EaXJ0eU1ldGFEYXRhID0gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZTo6ZHJvcFRleHR1
cmUoKQoreworICAgIGlmIChtQmFzZVRleHR1cmUpCisgICAgeworICAgICAgICBtQmFzZVRleHR1
cmUgPSBOVUxMOworICAgIH0KKworICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpwdXNoVGV4dHVyZShJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm5ld1RleHR1cmUs
IGJvb2wgcmVuZGVyYWJsZSkKK3sKKyAgICBtQmFzZVRleHR1cmUgPSBuZXdUZXh0dXJlOworICAg
IG1EaXJ0eU1ldGFEYXRhID0gZmFsc2U7CisgICAgbUlzUmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7
CisgICAgbURpcnR5ID0gdHJ1ZTsKK30KKworCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVs
cyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0Cit7
CisgICAgaWYgKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpCisgICAgeworICAgICAg
ICByZXR1cm4gbWF4bGV2ZWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE9w
ZW5HTCBFUyAyLjAgd2l0aG91dCBHTF9PRVNfdGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBO
UE9UIG1pcG1hcHMuCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworR0xpbnQgVGV4dHVy
ZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplLCBHTGludCBtYXhsZXZlbCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSwgbWF4bGV2ZWwpOworfQorCitp
bnQgVGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CYXNlVGV4dHVy
ZSA/IG1CYXNlVGV4dHVyZS0+R2V0TGV2ZWxDb3VudCgpIDogMDsKK30KKworVGV4dHVyZTJEOjpU
ZXh0dXJlMkQoQ29udGV4dCAqY29udGV4dCkgOiBUZXh0dXJlKGNvbnRleHQpCit7CisgICAgbVRl
eHR1cmUgPSBOVUxMOworICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKK30KKworVGV4dHVy
ZTJEOjp+VGV4dHVyZTJEKCkKK3sKKyAgICBkZWxldGUgbUNvbG9yYnVmZmVyUHJveHk7CisKKyAg
ICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAg
ICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZTJEOjpnZXRU
YXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBHTF9URVhUVVJFXzJEOworfQorCisvLyBXaGls
ZSBPcGVuR0wgZG9lc24ndCBjaGVjayB0ZXh0dXJlIGNvbnNpc3RlbmN5IHVudGlsIGRyYXctdGlt
ZSwgRDNEOSByZXF1aXJlcyBhIGNvbXBsZXRlIHRleHR1cmUKKy8vIGZvciByZW5kZXItdG8tdGV4
dHVyZSAoc3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBXZSBoYXZlIG5vIHdheSBvZiBrZWVwaW5nIGlu
ZGl2aWR1YWwgaW5jb25zaXN0ZW50IGxldmVscy4KKy8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGlj
dWxhciBsZXZlbCBvZiB0aGUgdGV4dHVyZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmlj
IGZvcm1hdCwgd2lkdGggYW5kIGhlaWdodC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4
aXN0aW5nIHRleHR1cmUgd2FzIHVuc3VpdGFibGUgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28s
IGl0IHdpbGwgYWxzbyBzZXQKKy8vIGEgbmV3IGhlaWdodCBhbmQgd2lkdGggZm9yIHRoZSB0ZXh0
dXJlIGJ5IHdvcmtpbmcgYmFja3dhcmRzIGZyb20gdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQu
Citib29sIFRleHR1cmUyRDo6cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGJvb2wg
d2lkdGhPa2F5ID0gKG1XaWR0aCA+PiBsZXZlbCA9PSB3aWR0aCk7CisgICAgYm9vbCBoZWlnaHRP
a2F5ID0gKG1IZWlnaHQgPj4gbGV2ZWwgPT0gaGVpZ2h0KTsKKworICAgIGJvb2wgc2l6ZU9rYXkg
PSAoKHdpZHRoT2theSAmJiBoZWlnaHRPa2F5KQorICAgICAgICAgICAgICAgICAgICAgfHwgKHdp
ZHRoT2theSAmJiBtSGVpZ2h0ID4+IGxldmVsID09IDAgJiYgaGVpZ2h0ID09IDEpCisgICAgICAg
ICAgICAgICAgICAgICB8fCAoaGVpZ2h0T2theSAmJiBtV2lkdGggPj4gbGV2ZWwgPT0gMCAmJiB3
aWR0aCA9PSAxKSk7CisKKyAgICBib29sIHRleHR1cmVPa2F5ID0gKHNpemVPa2F5ICYmIGludGVy
bmFsRm9ybWF0ID09IG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisKKyAgICBpZiAoIXRleHR1cmVP
a2F5KQorICAgIHsKKyAgICAgICAgVFJBQ0UoIlJlZGVmaW5pbmcgMkQgdGV4dHVyZSAoJWQsIDB4
JTA0WCwgJWQsICVkID0+IDB4JTA0WCwgJWQsICVkKS4iLCBsZXZlbCwKKyAgICAgICAgICAgICAg
bUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtV2lkdGgsIG1IZWlnaHQsCisgICAgICAgICAgICAgIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICAvLyBQdXJnZSBhbGwgdGhl
IGxldmVscyBhbmQgdGhlIHRleHR1cmUuCisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFn
ZUFycmF5W2ldLnN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbaV0uc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ldLnN1cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBkcm9w
VGV4dHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGggPDwgbGV2ZWw7
CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQgPDwgbGV2ZWw7CisgICAgICAgIG1JbWFnZUFycmF5
WzBdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworICAgIH0KKworICAgIHJldHVybiAhdGV4dHVy
ZU9rYXk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworCisgICAgVGV4dHVyZTo6c2V0SW1hZ2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBB
U1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UgIT0gTlVMTCk7CisKKyAgICBpZiAobGV2
ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dExldmVsID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKGxldmVsLCAmZGVzdExldmVsKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICAgICAg
ICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHhvZmZz
ZXQ7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHlvZmZzZXQ7CisgICAgICAgICAgICBz
b3VyY2VSZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVj
dC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisgICAgICAgICAgICBQT0lOVCBkZXN0UG9p
bnQ7CisgICAgICAgICAgICBkZXN0UG9pbnQueCA9IHhvZmZzZXQ7CisgICAgICAgICAgICBkZXN0
UG9pbnQueSA9IHlvZmZzZXQ7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldERldmljZSgpLT5V
cGRhdGVTdXJmYWNlKGltZy0+c3VyZmFjZSwgJnNvdXJjZVJlY3QsIGRlc3RMZXZlbCwgJmRlc3RQ
b2ludCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAg
ICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgY29tbWl0UmVjdChsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpj
b3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNl
KQoreworICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAg
ICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKHdpZHRo
ICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAg
ICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9w
ID0geTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0OworICAgICAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUt
PkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmRlc3QpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+
Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBpbnRl
cm5hbEZvcm1hdCwgMCwgMCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKKyAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0uaGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbWFnZUFycmF5W2xldmVsXS5mb3JtYXQg
PSBpbnRlcm5hbEZvcm1hdDsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQorewor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0ud2lkdGggfHwgeW9m
ZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKHJlZGVm
aW5lVGV4dHVyZSgwLCBtSW1hZ2VBcnJheVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdLndpZHRo
LCBtSW1hZ2VBcnJheVswXS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAg
IGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVj
dDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdo
dCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3Q7CisgICAgICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxl
dmVsLCAmZGVzdCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJj
ZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwg
eG9mZnNldCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9
Cit9CisKKy8vIFRlc3RzIGZvciBHTCB0ZXh0dXJlIG9iamVjdCBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgorYm9vbCBUZXh0dXJlMkQ6Omlz
Q29tcGxldGUoKSBjb25zdAoreworICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS53
aWR0aDsKKyAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmhlaWdodDsKKworICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOworCisgICAgc3dpdGNo
IChtTWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2Ug
R0xfTElORUFSOgorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5F
QVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoK
KyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cy
KHdpZHRoKSkKKyAgICAgICAgfHwgKGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAh
aXNQb3cyKGhlaWdodCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChtaXBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8
ICFpc1BvdzIoaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KTsKKworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZm9ybWF0ICE9IG1J
bWFnZUFycmF5WzBdLmZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0ud2lkdGggIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQgIT0gc3RkOjptYXgoMSwgaGVpZ2h0
ID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKK0lEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0RUZXh0
dXJlOSAqdGV4dHVyZTsKKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0u
Zm9ybWF0KTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1X
aWR0aCwgbUhlaWdodCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCBtSGVpZ2h0LCAwKSwgMCwgZm9y
bWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAg
fQorCisgICAgaWYgKG1UZXh0dXJlKSBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgIG1UZXh0dXJl
ID0gdGV4dHVyZTsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnVw
ZGF0ZVRleHR1cmUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworCisgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAobUlt
YWdlQXJyYXlbbGV2ZWxdLmRpcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbGV2ZWxTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmxldmVsU3VyZmFjZSk7CisKKyAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2UobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UsIE5VTEws
IGxldmVsU3VyZmFjZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOworCisg
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmRpcnR5ID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4
dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQoreworICAgIElEaXJlY3QzRFRleHR1cmU5
ICp0ZXh0dXJlID0gTlVMTDsKKworICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDAp
CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Cisg
ICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBE
M0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBt
SGVpZ2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVj
dDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVGV4dHVy
ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3Vu
dCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlOworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaSwgJnNvdXJj
ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAm
ZGVzdCk7CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+
UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBE
M0RURVhGX05PTkUpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwor
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURp
cmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUg
IT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworYm9vbCBU
ZXh0dXJlMkQ6OmRpcnR5SW1hZ2VEYXRhKCkgY29uc3QKK3sKKyAgICBpbnQgcSA9IGxvZzIoc3Rk
OjptYXgobVdpZHRoLCBtSGVpZ2h0KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSBxOyBp
KyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uZGlydHkpIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmdlbmVy
YXRlTWlwbWFwcygpCit7CisgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF0ud2lkdGgpIHx8
ICFpc1BvdzIobUltYWdlQXJyYXlbMF0uaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgLy8gUHVyZ2UgYXJyYXkg
bGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJh
dGVkIG1pcG1hcCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1X
aWR0aCwgbUhlaWdodCkpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlICE9IE5VTEwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UgPSBOVUxMOworICAgICAgICB9CisK
KyAgICAgICAgbUltYWdlQXJyYXlbaV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICBtSW1hZ2VB
cnJheVtpXS5mb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5mb3JtYXQ7CisgICAgICAgIG1JbWFnZUFy
cmF5W2ldLndpZHRoID0gc3RkOjptYXgobUltYWdlQXJyYXlbMF0ud2lkdGggPj4gaSwgMSk7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2ldLmhlaWdodCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmhl
aWdodCA+PiBpLCAxKTsKKyAgICB9CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgeworICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBOVUxMOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bG93ZXIgPSBOVUxMOworCisgICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaS0xLCAm
dXBwZXIpOworICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZsb3dlcik7CisK
KyAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAg
ICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0Nv
bG9yYnVmZmVyICpUZXh0dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICB9CisK
KyAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OworfQorCitJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworCisgICAgbmVlZFJlbmRlclRhcmdl
dCgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
bVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmcmVuZGVyVGFyZ2V0KTsKKworICAgIHJldHVy
biByZW5kZXJUYXJnZXQ7Cit9CisKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChDb250
ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIG1GYWNl
UHJveGllc1tpXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVD
dWJlTWFwKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBtRmFjZVByb3hpZXNbaV07CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBO
VUxMOworICAgIH0KK30KKworR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25z
dAoreworICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOworfQorCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJ
bWFnZSgwLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgxLCBs
ZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBv
c1koR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3sKKyAgICBzZXRJbWFnZSg1LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpjb21taXRSZWN0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit7CisgICAgaW50IGZhY2UgPSBmYWNlSW5kZXgoZmFjZVRhcmdldCk7CisKKyAgICBBU1NFUlQo
bUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnN1cmZhY2UgIT0gTlVMTCk7CisKKyAgICBpZiAobGV2
ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dExldmVsID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOworICAgICAgICBBU1NFUlQo
ZGVzdExldmVsICE9IE5VTEwpOworCisgICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZl
bF07CisKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QubGVmdCA9IHhvZmZzZXQ7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHlvZmZzZXQ7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAg
ICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisgICAgICAgICAg
ICBQT0lOVCBkZXN0UG9pbnQ7CisgICAgICAgICAgICBkZXN0UG9pbnQueCA9IHhvZmZzZXQ7Cisg
ICAgICAgICAgICBkZXN0UG9pbnQueSA9IHlvZmZzZXQ7CisKKyAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCAmc291cmNl
UmVjdCwgZGVzdExldmVsLCAmZGVzdFBvaW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOworCisgICAg
ICAgICAgICBpbWctPmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUlt
YWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0pOworICAgIGNvbW1pdFJlY3QoZmFjZSwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCisvLyBUZXN0cyBm
b3IgR0wgdGV4dHVyZSBvYmplY3QgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAzLjcuMTAgcGFnZSA4MS4KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcGxldGUoKSBj
b25zdAoreworICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0ud2lkdGg7CisKKyAgICBp
ZiAoc2l6ZSA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgbWlwbWFwcGluZzsKKworICAgIHN3aXRjaCAobU1pbkZpbHRlcikKKyAgICB7CisgICAg
ICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgbWlwbWFw
cGluZyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBN
QVBfTElORUFSOgorICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2Zh
Y2VdWzBdLndpZHRoICE9IHNpemUgfHwgbUltYWdlQXJyYXlbZmFjZV1bMF0uaGVpZ2h0ICE9IHNp
emUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChtaXBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1BvdzIoc2l6
ZSkgJiYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdM
X0NMQU1QX1RPX0VER0UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgcSA9IGxvZzIoc2l6ZSk7CisKKyAgICAgICAgZm9yIChp
bnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmZvcm1hdCAhPSBtSW1h
Z2VBcnJheVswXVswXS5mb3JtYXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS53aWR0aCAhPSBzdGQ6Om1heCgxLCBzaXplID4+
IGxldmVsKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBBU1NFUlQobUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLmhlaWdodCA9PSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ud2lk
dGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0
aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCitJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0
ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICBJRGlyZWN0
M0RDdWJlVGV4dHVyZTkgKnRleHR1cmU7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlQ3ViZVRleHR1cmUobVdpZHRoLCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIDApLCAwLCBm
b3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAg
ICB9CisKKyAgICBpZiAobVRleHR1cmUpIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICBtVGV4
dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCit2b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsr
KQorICAgIHsKKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07CisKKyAgICAg
ICAgICAgIGlmIChpbWctPmRpcnR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpsZXZlbFN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBs
ZXZlbCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxldmVsU3VyZmFjZSAhPSBOVUxMKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChsZXZlbFN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVT
dXJmYWNlKGltZy0+c3VyZmFjZSwgTlVMTCwgbGV2ZWxTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAg
ICAgICBsZXZlbFN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICBpbWct
PmRpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKQoreworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqdGV4
dHVyZSA9IE5VTEw7CisKKyAgICBpZiAobVdpZHRoICE9IDApCisgICAgeworICAgICAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAgICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2Vs
ZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3JlYXRpb25MZXZlbHMo
bVdpZHRoLCAwKSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBmb3JtYXQsIEQzRFBPT0xfREVGQVVM
VCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGYgPSAw
OyBmIDwgNjsgZisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGV2ZWxzOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9G
QUNFUz4oZiksIGksICZzb3VyY2UpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2Uo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19j
YXN0PEQzRENVQkVNQVBfRkFDRVM+KGYpLCBpLCAmZGVzdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNl
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0
LCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSop
TlVMTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgbVRleHR1cmUg
PSB0ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgcmVk
ZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpOworCisgICAgVGV4dHVy
ZTo6c2V0SW1hZ2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXSk7Cit9CisKK3Vuc2lnbmVkIGludCBU
ZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQoreworICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSAxKTsKKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7CisgICAgTUVUQV9B
U1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YID09IDMpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA0KTsKKyAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gNSk7CisKKyAgICByZXR1cm4gZmFjZSAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDsKK30KKworYm9vbCBUZXh0dXJlQ3ViZU1hcDo6ZGlydHlJbWFn
ZURhdGEoKSBjb25zdAoreworICAgIGludCBxID0gbG9nMihtV2lkdGgpOworCisgICAgZm9yIChp
bnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
PSBxOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5k
aXJ0eSkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8vIFdoaWxlIE9wZW5HTCBkb2Vzbid0IGNoZWNrIHRleHR1cmUgY29uc2lzdGVuY3kg
dW50aWwgZHJhdy10aW1lLCBEM0Q5IHJlcXVpcmVzIGEgY29tcGxldGUgdGV4dHVyZQorLy8gZm9y
IHJlbmRlci10by10ZXh0dXJlIChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUgbm8gd2F5
IG9mIGtlZXBpbmcgaW5kaXZpZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzICYgZmFjZXMuCisvLyBD
YWxsIHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1cmUgbXVzdCBiZSBk
ZWZpbmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWlnaHQuCisvLworLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBleGlzdGluZyB0ZXh0dXJlIHdhcyB1bnN1aXRhYmxlIGhhZCB0
byBiZSBkZXN0cm95ZWQuIElmIHNvLCBpdCB3aWxsIGFsc28gc2V0CisvLyBhIG5ldyBzaXplIGZv
ciB0aGUgdGV4dHVyZSBieSB3b3JraW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiBzaXplLgor
Ym9vbCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgpCit7CisgICAgLy8gQXJlIHRoZXNlIHNldHRp
bmdzIGNvbXBhdGlibGUgd2l0aCBsZXZlbCAwPworICAgIGJvb2wgc2l6ZU9rYXkgPSAobUltYWdl
QXJyYXlbMF1bMF0ud2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOworCisgICAgYm9vbCB0ZXh0dXJl
T2theSA9IChzaXplT2theSAmJiBpbnRlcm5hbEZvcm1hdCA9PSBtSW1hZ2VBcnJheVswXVswXS5m
b3JtYXQpOworCisgICAgaWYgKCF0ZXh0dXJlT2theSkKKyAgICB7CisgICAgICAgIFRSQUNFKCJS
ZWRlZmluaW5nIGN1YmUgdGV4dHVyZSAoJWQsIDB4JTA0WCwgJWQgPT4gMHglMDRYLCAlZCkuIiwg
bGV2ZWwsCisgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgbUltYWdlQXJy
YXlbMF1bMF0ud2lkdGgsCisgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0LCB3aWR0aCk7CisK
KyAgICAgICAgLy8gUHVyZ2UgYWxsIHRoZSBsZXZlbHMgYW5kIHRoZSB0ZXh0dXJlLgorICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZSAhPSBOVUxMKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0u
ZGlydHkgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5z
dXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ld
LnN1cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAg
ICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwor
ICAgICAgICAgICAgZHJvcFRleHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1XaWR0aCA9
IHdpZHRoIDw8IGxldmVsOworICAgICAgICBtSW1hZ2VBcnJheVswXVswXS53aWR0aCA9IHdpZHRo
IDw8IGxldmVsOworICAgICAgICBtSGVpZ2h0ID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1J
bWFnZUFycmF5WzBdWzBdLmhlaWdodCA9IHdpZHRoIDw8IGxldmVsOworCisgICAgICAgIG1JbWFn
ZUFycmF5WzBdWzBdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworICAgIH0KKworICAgIHJldHVy
biAhdGV4dHVyZU9rYXk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVu
dW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNl
KQoreworICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgoZmFjZSk7CisKKyAg
ICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpKQorICAg
IHsKKyAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJl
KG1UZXh0dXJlLCB0cnVlKTsKKyAgICB9CisKKyAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsK
KworICAgIGlmICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAg
ICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9w
ID0geTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwp
OworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRl
clRhcmdldCgpLCBzb3VyY2VSZWN0LCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgZGVzdCk7CisgICAg
ICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhd
W2xldmVsXS53aWR0aCA9IHdpZHRoOworICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxd
LmhlaWdodCA9IGhlaWdodDsKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5mb3Jt
YXQgPSBpbnRlcm5hbEZvcm1hdDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJl
TWFwOjpnZXRDdWJlTWFwU3VyZmFjZSh1bnNpZ25lZCBpbnQgZmFjZUlkZW50aWZpZXIsIHVuc2ln
bmVkIGludCBsZXZlbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZUluZGV4OworCisgICAgaWYg
KGZhY2VJZGVudGlmaWVyIDwgNikKKyAgICB7CisgICAgICAgIGZhY2VJbmRleCA9IGZhY2VJZGVu
dGlmaWVyOworICAgIH0KKyAgICBlbHNlIGlmIChmYWNlSWRlbnRpZmllciA+PSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgZmFjZUlkZW50aWZpZXIgPD0gR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aKQorICAgIHsKKyAgICAgICAgZmFjZUluZGV4ID0gZmFjZUlkZW50aWZp
ZXIgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGZhY2VJbmRleCA9IDA7CisgICAg
fQorCisgICAgaWYgKG1UZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3VyZmFjZSA9IE5VTEw7CisKKyAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUtPkdldEN1YmVN
YXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGZhY2VJbmRleCksIGxldmVs
LCAmc3VyZmFjZSk7CisKKyAgICByZXR1cm4gKFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5V
TEw7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkK
K3sKKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVs
XS53aWR0aDsKKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgIH0KKworICAgIGlmIChyZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF1b
MF0uZm9ybWF0LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCkpCisgICAgeworICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnZXRSZW5kZXJUYXJnZXQoZmFjZSk7
CisgICAgfQorCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAg
UkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICBz
b3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7
CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKworICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKwor
ICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJn
ZXQoKSwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KK30KKworYm9vbCBU
ZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25zdAoreworICAgIGlmIChtSW1hZ2VB
cnJheVswXVswXS53aWR0aCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAxOyBmIDwgNjsgZisrKQorICAgIHsKKyAg
ICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdWzBdLndpZHRoICE9IG1JbWFnZUFycmF5WzBdWzBdLndp
ZHRoCisgICAgICAgICAgICB8fCBtSW1hZ2VBcnJheVtmXVswXS5mb3JtYXQgIT0gbUltYWdlQXJy
YXlbMF1bMF0uZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVsw
XVswXS53aWR0aCkgfHwgIWlzQ3ViZUNvbXBsZXRlKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIC8vIFB1cmdlIGFycmF5
IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVy
YXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJh
eVswXVswXS53aWR0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlICE9IE5V
TEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZh
Y2UgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtp
XS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5mb3JtYXQg
PSBtSW1hZ2VBcnJheVtmXVswXS5mb3JtYXQ7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtp
XS53aWR0aCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLndpZHRoID4+IGksIDEpOworICAg
ICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uaGVpZ2h0ID0gbUltYWdlQXJyYXlbZl1baV0ud2lk
dGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZiwgaS0xKTsKKyAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJmYWNlKGYs
IGkpOworCisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVw
cGVyLCBsb3dlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBO
VUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxv
d2VyLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIUlz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsKKworICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNl
XSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpOworICAgIH0KKwor
ICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgQVNT
RVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisKKyAgICBuZWVkUmVuZGVyVGFy
Z2V0KCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAg
ICBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNF
Uz4oZmFjZUluZGV4KHRhcmdldCkpLCAwLCAmcmVuZGVyVGFyZ2V0KTsKKworICAgIHJldHVybiBy
ZW5kZXJUYXJnZXQ7Cit9CisKK1RleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpUZXh0
dXJlQ29sb3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KQorICA6
IENvbG9yYnVmZmVyKE5VTEwpLCBtVGV4dHVyZSh0ZXh0dXJlKSwgbVRhcmdldCh0YXJnZXQpCit7
CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KSk7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlOjpUZXh0dXJl
Q29sb3JidWZmZXJQcm94eTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRh
cmdldCkgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgbVJlbmRlclRhcmdldCA9IG1U
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisKKyAgICByZXR1cm4gbVJlbmRlclRh
cmdldDsKK30KKworaW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRXaWR0
aCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgpOworfQorCitpbnQgVGV4dHVy
ZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCgpCit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlLT5nZXRIZWlnaHQoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIFRleHR1cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3Mg
YW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCisvLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVy
ZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAorLy8gcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVSRV9IXworI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9I
XworCisjaW5jbHVkZSA8dmVjdG9yPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIENvbnRleHQ7CitjbGFz
cyBCbGl0OworCitlbnVtCit7CisgICAgTUFYX1RFWFRVUkVfU0laRSA9IDIwNDgsCisgICAgTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9IDIwNDgsCisKKyAgICBNQVhfVEVYVFVSRV9MRVZFTFMg
PSAxMiAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCit9OworCitjbGFzcyBUZXh0dXJl
Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJlKENvbnRleHQgKmNvbnRleHQpOwor
CisgICAgdmlydHVhbCB+VGV4dHVyZSgpOworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0
KCkgY29uc3QgPSAwOworCisgICAgYm9vbCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7Cisg
ICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgYm9vbCBzZXRXcmFwUyhH
TGVudW0gd3JhcCk7CisgICAgYm9vbCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisKKyAgICBHTGVu
dW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0
OworICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwVCgpIGNv
bnN0OworCisgICAgR0x1aW50IGdldFdpZHRoKCkgY29uc3Q7CisgICAgR0x1aW50IGdldEhlaWdo
dCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ29tcGxldGUoKSBjb25zdCA9IDA7CisK
KyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIENv
bG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOworCisgICAgYm9vbCBpc0RpcnR5KCkgY29u
c3Q7CisKKyAgcHJvdGVjdGVkOgorICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5Owor
ICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eTsKKyAgICBjbGFzcyBUZXh0
dXJlQ29sb3JidWZmZXJQcm94eSA6IHB1YmxpYyBDb2xvcmJ1ZmZlcgorICAgIHsKKyAgICAgIHB1
YmxpYzoKKyAgICAgICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkoVGV4dHVyZSAqdGV4dHVyZSwg
R0xlbnVtIHRhcmdldCk7CisgICAgICAgICAgICAvLyB0YXJnZXQgaXMgYSAyRC1saWtlIHRleHR1
cmUgdGFyZ2V0IChHTF9URVhUVVJFXzJEIG9yIG9uZSBvZiB0aGUgY3ViZSBmYWNlIHRhcmdldHMp
CisKKyAgICAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CisKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKTsKKyAgICAgICAgdmlydHVhbCBpbnQg
Z2V0SGVpZ2h0KCk7CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIFRleHR1cmUgKm1UZXh0dXJl
OworICAgICAgICBHTGVudW0gbVRhcmdldDsKKyAgICB9OworCisgICAgLy8gSGVscGVyIHN0cnVj
dHVyZSByZXByZXNlbnRpbmcgYSBzaW5nbGUgaW1hZ2UgbGF5ZXIKKyAgICBzdHJ1Y3QgSW1hZ2UK
KyAgICB7CisgICAgICAgIEltYWdlKCk7CisgICAgICAgIH5JbWFnZSgpOworCisgICAgICAgIEdM
c2l6ZWkgd2lkdGg7CisgICAgICAgIEdMc2l6ZWkgaGVpZ2h0OworICAgICAgICBHTGVudW0gZm9y
bWF0OworCisgICAgICAgIGJvb2wgZGlydHk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnN1cmZhY2U7CisgICAgfTsKKworICAgIHN0YXRpYyBEM0RGT1JNQVQgc2VsZWN0Rm9ybWF0KEdM
ZW51bSBmb3JtYXQpOworICAgIGludCBpbWFnZVBpdGNoKGNvbnN0IEltYWdlJiBpbWcpIGNvbnN0
OworCisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAg
R0xlbnVtIG1XcmFwUzsKKyAgICBHTGVudW0gbVdyYXBUOworCisgICAgdm9pZCBzZXRJbWFnZShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsK
KyAgICB2b2lkIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworCisgICAg
dm9pZCBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0OworICAgIEdM
aW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0Owor
CisgICAgLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgd2VhayBhbmQgaXQgaXMgYXNzdW1lZCB0
aGUgZGVyaXZlZCBjbGFzcyB3aWxsIGtlZXAgYSBzdHJvbmcgcG9pbnRlciB1bnRpbCB0aGUgbmV4
dCBjcmVhdGVUZXh0dXJlKCkgY2FsbC4KKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqY3JlYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgp
ID0gMDsKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVy
VGFyZ2V0KCkgPSAwOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURh
dGEoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIGRyb3BUZXh0dXJlKCk7CisgICAgdm9pZCBwdXNo
VGV4dHVyZShJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm5ld1RleHR1cmUsIGJvb2wgcmVuZGVyYWJs
ZSk7CisKKyAgICBCbGl0ICpnZXRCbGl0dGVyKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgbVdpZHRo
OworICAgIHVuc2lnbmVkIGludCBtSGVpZ2h0OworCisgICAgaW50IGxldmVsQ291bnQoKSBjb25z
dDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsK
KworICAgIENvbnRleHQgKm1Db250ZXh0OworCisgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpt
QmFzZVRleHR1cmU7IC8vIFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVkIGNsYXNz
IGlzIGFzc3VtZWQgdG8gb3duIGEgc3Ryb25nIHBvaW50ZXIuCisgICAgYm9vbCBtRGlydHlNZXRh
RGF0YTsKKyAgICBib29sIG1Jc1JlbmRlcmFibGU7CisKKyAgICBib29sIG1EaXJ0eTsKKworICAg
IHZvaWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworfTsKKwor
Y2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IFRleHR1cmUyRChDb250ZXh0ICpjb250ZXh0KTsKKworICAgIH5UZXh0dXJlMkQoKTsKKwor
ICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CisgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKworICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwcygpOworCisgICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVt
IHRhcmdldCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZTJEKTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0
dXJlKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdDsKKworICAgIHZvaWQgY29tbWl0UmVjdChH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbTUFYX1RFWFRVUkVfTEVW
RUxTXTsKKworICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKKworICAgIFRleHR1cmVD
b2xvcmJ1ZmZlclByb3h5ICptQ29sb3JidWZmZXJQcm94eTsKKworICAgIGJvb2wgcmVkZWZpbmVU
ZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKK307CisKK2NsYXNzIFRleHR1cmVDdWJlTWFwIDog
cHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRleHR1cmVDdWJlTWFw
KENvbnRleHQgKmNvbnRleHQpOworCisgICAgflRleHR1cmVDdWJlTWFwKCk7CisKKyAgICBHTGVu
dW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVn
WihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKworICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIGZh
Y2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291
cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisKKyAgICBib29sIGlz
Q29tcGxldGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsK
KworICAgIHZpcnR1YWwgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQp
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJl
TWFwKTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdDsKKworICAgIC8vIGZhY2VJZGVudGlmaWVyIGlz
IDAtNSBvciBvbmUgb2YgdGhlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfKiBlbnVtZXJhbnRzLgorICAg
IC8vIFJldHVybnMgTlVMTCBpZiB0aGUgY2FsbCB1bmRlcmx5aW5nIERpcmVjdDNEIGNhbGwgZmFp
bHMuCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKHVuc2lnbmVkIGlu
dCBmYWNlSWRlbnRpZmllciwgdW5zaWduZWQgaW50IGxldmVsKTsKKworICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKKworICAgIGJvb2wgaXNDdWJlQ29tcGxl
dGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKTsKKworICAgIEltYWdlIG1JbWFnZUFycmF5
WzZdW01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1U
ZXh0dXJlOworCisgICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkgKm1GYWNlUHJveGllc1s2XTsK
KworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KTsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUwNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGxpYkdMRVN2Mi5jcHA6
IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zLgorCisjZGVm
aW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VGV4dHVyZS5oIgorCitleHRlcm4gIkMiCit7CisKK3ZvaWQgX19zdGRjYWxsIGdsQWN0aXZlVGV4
dHVyZShHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0ZXh0dXJlID0gMHgl
WCkiLCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPCBH
TF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTAgKyBnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0QWN0aXZlU2FtcGxlcih0ZXh0dXJlIC0gR0xfVEVYVFVSRTAp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQXR0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRlciA9ICVkKSIs
IHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+YXR0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRBdHRyaWJMb2NhdGlvbihH
THVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xj
aGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRleCwgbmFtZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RybmNt
cChuYW1lLCAiZ2xfIiwgMykgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5iaW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKQorewor
ICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBidWZmZXIgPSAlZCkiLCB0
YXJnZXQsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kRWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVm
ZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGZy
YW1lYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9G
UkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xC
aW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCByZW5kZXJidWZmZXIpCit7Cisg
ICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVk
KSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgdGV4dHVy
ZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgdGV4dHVyZSA9
ICVkKSIsIHRhcmdldCwgdGV4dHVyZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVPYmplY3QgPSBj
b250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICBpZiAodGV4dHVyZU9i
amVjdCAmJiB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQgJiYgdGV4dHVyZSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUyRCh0ZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBi
bHVlLCBHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMY2xhbXBmIHJlZCA9ICVmLCBH
TGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhhID0g
JWYpIiwKKyAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0
QmxlbmRDb2xvcihnbDo6Y2xhbXAwMShyZWQpLCBnbDo6Y2xhbXAwMShncmVlbiksIGdsOjpjbGFt
cDAxKGJsdWUpLCBnbDo6Y2xhbXAwMShhbHBoYSkpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvbihH
TGVudW0gbW9kZSkKK3sKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlLCBtb2RlKTsK
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVS
R0IsIEdMZW51bSBtb2RlQWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZVJHQiA9IDB4
JVgsIEdMZW51bSBtb2RlQWxwaGEgPSAweCVYKSIsIG1vZGVSR0IsIG1vZGVBbHBoYSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobW9kZVJHQikKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfRlVOQ19BREQ6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgor
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtb2RlQWxwaGEpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgorICAgICAgICAgIGNhc2UgR0xfRlVO
Q19TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2RlUkdCLCBt
b2RlQWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZh
Y3RvcikKK3sKKyAgICBnbEJsZW5kRnVuY1NlcGFyYXRlKHNmYWN0b3IsIGRmYWN0b3IsIHNmYWN0
b3IsIGRmYWN0b3IpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuY1NlcGFyYXRlKEdM
ZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFs
cGhhKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHNyY1JHQiA9IDB4JVgsIEdMZW51bSBkc3RSR0Ig
PSAweCVYLCBHTGVudW0gc3JjQWxwaGEgPSAweCVYLCBHTGVudW0gZHN0QWxwaGEgPSAweCVYKSIs
CisgICAgICAgICAgc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3JjUkdCKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xf
U1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAg
ICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1Rf
Q09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNU
QU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJB
VEU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKGRzdFJHQikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAg
ICBjYXNlIEdMX09ORToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6
CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2Ug
R0xfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAg
ICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNU
QU5UX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChz
cmNBbHBoYSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBj
YXNlIEdMX09ORToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6Cisg
ICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xf
U1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAgICAg
ICAgICBjYXNlIEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1Rf
QUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5U
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgorICAg
ICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkc3RBbHBoYSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX09ORToKKyAgICAgICAg
ICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09M
T1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgorICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBI
QToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6CisgICAgICAgICAgY2Fz
ZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFO
VF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgIGNh
c2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBjb25zdGFudENvbG9yVXNlZCA9IChzcmNSR0Ig
PT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9D
T0xPUiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJHQiA9PSBHTF9D
T05TVEFOVF9DT0xPUiB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKTsK
KworICAgICAgICBib29sIGNvbnN0YW50QWxwaGFVc2VkID0gKHNyY1JHQiA9PSBHTF9DT05TVEFO
VF9BTFBIQSB8fCBzcmNSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UkdCID09IEdMX0NPTlNUQU5UX0FMUEhB
IHx8IGRzdFJHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpOworCisgICAgICAgIGlm
IChjb25zdGFudENvbG9yVXNlZCAmJiBjb25zdGFudEFscGhhVXNlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJTaW11bHRhbmVvdXMgdXNlIG9mIEdMX0NPTlNUQU5UX0FMUEhBL0dMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSBhbmQgR0xfQ09OU1RBTlRfQ09MT1IvR0xfT05FX01JTlVT
X0NPTlNUQU5UX0NPTE9SIGludmFsaWQgdW5kZXIgV2ViR0wiKTsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kRmFjdG9ycyhzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlckRhdGEoR0xl
bnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1
c2FnZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpcHRyIHNp
emUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCwgR0xlbnVtIHVzYWdlID0gJWQp
IiwKKyAgICAgICAgICB0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKHNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHVz
YWdlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fRFJBVzoKKyAgICAgICAg
ICBjYXNlIEdMX1NUQVRJQ19EUkFXOgorICAgICAgICAgIGNhc2UgR0xfRFlOQU1JQ19EUkFXOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FS
UkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1
ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXItPmJ1ZmZlckRhdGEoZGF0YSwg
c2l6ZSwgdXNhZ2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNp
emVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKHNpemUgPCAwIHx8IG9mZnNldCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChk
YXRhID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVm
ZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0g
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChz
aXplX3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYnVmZmVyLT5idWZmZXJTdWJEYXRhKGRhdGEsIHNpemUsIG9mZnNl
dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xl
bnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKTsKKworICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQoreworICAgIFRSQUNFKCIoR0xiaXRm
aWVsZCBtYXNrID0gJVgpIiwgbWFzayk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUs
IEdMY2xhbXBmIGFscGhhKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xh
bXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZiki
LAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVh
ckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyRGVwdGhmKEdM
Y2xhbXBmIGRlcHRoKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgZGVwdGggPSAlZikiLCBkZXB0
aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhclN0ZW5j
aWwoR0xpbnQgcykKK3sKKyAgICBUUkFDRSgiKEdMaW50IHMgPSAlZCkiLCBzKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRDbGVhclN0ZW5jaWwocyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb2xvck1hc2soR0xib29sZWFuIHJlZCwg
R0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKQoreworICAg
IFRSQUNFKCIoR0xib29sZWFuIHJlZCA9ICVkLCBHTGJvb2xlYW4gZ3JlZW4gPSAlZCwgR0xib29s
ZWFuIGJsdWUgPSAlZCwgR0xib29sZWFuIGFscGhhID0gJWQpIiwKKyAgICAgICAgICByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0Q29sb3JNYXNrKHJlZCA9PSBHTF9UUlVF
LCBncmVlbiA9PSBHTF9UUlVFLCBibHVlID09IEdMX1RSVUUsIGFscGhhID09IEdMX1RSVUUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsQ29tcGlsZVNoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1
aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0g
Y29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9n
cmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPmNvbXBpbGUoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bENvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9
IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgIiAKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xp
bnQgYm9yZGVyID0gJWQsIEdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0
YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IChsZXZl
bCA+IDAgJiYgIWdsOjppc1BvdzIod2lkdGgpKSB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cy
KGhlaWdodCkpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6ZSA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyB1bHRpbWF0ZWx5IHdlIGRv
bid0IHN1cHBvcnQgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdM
dm9pZCogZGF0YSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBs
ZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAg
ICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBm
b3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0
IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RF
WFRVUkVfTEVWRUxTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6
OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwg
aW1hZ2VTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHhvZmZzZXQgIT0gMCB8fCB5
b2Zmc2V0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOyAvLyBUaGUgdGV4dHVyZSBiZWluZyBvcGVyYXRlZCBvbiBpcyBub3Qg
YSBjb21wcmVzc2VkIHRleHR1cmUuCisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCAiCisgICAgICAgICAgIkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVp
IHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkKSIsCisg
ICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwg
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA+
IDAgJiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJF
X1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZl
bCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAg
ICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVs
KSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYm9yZGVyICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gY29udGV4
dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlm
ICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBH
TGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAg
IHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9U
RVhUVVJFX0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1p
dHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1p
dHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIo
KS0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0x1aW50IF9fc3RkY2FsbCBnbENyZWF0ZVByb2dyYW0odm9pZCkKK3sKKyAgICBUUkFDRSgi
KCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1
aW50IF9fc3RkY2FsbCBnbENyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK3sKKyAgICBUUkFDRSgi
KEdMZW51bSB0eXBlID0gMHglWCkiLCB0eXBlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmNyZWF0ZVNoYWRlcih0eXBlKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ3VsbEZhY2UoR0xlbnVtIG1vZGUpCit7CisgICAg
VFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6
CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JB
Q0s6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsTW9kZSht
b2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiBidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCog
YnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVCdWZmZXIoYnVmZmVyc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGZyYW1lYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBH
THVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgZnJhbWVidWZmZXJzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlcnNbaV0gIT0gMCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsRGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQt
PmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVSZW5kZXJidWZmZXJzKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xz
aXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogcmVuZGVyYnVmZmVycyA9IDB4JTAuOHApIiwgbiwg
cmVuZGVyYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyc1tpXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdM
dWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoc2hhZGVyID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5nZXRTaGFkZXIoc2hhZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihj
b250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVTaGFk
ZXIoc2hhZGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVRleHR1cmVzKEdMc2l6ZWkgbiwgY29uc3QgR0x1
aW50KiB0ZXh0dXJlcykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVp
bnQqIHRleHR1cmVzID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0gIT0gMCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUodGV4dHVyZXNb
aV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlcHRoRnVu
YyhHTGVudW0gZnVuYykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmdW5jID0gMHglWCkiLCBmdW5j
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmdW5jKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9ORVZFUjoKKyAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKKyAgICAg
ICAgICBjYXNlIEdMX0xFU1M6CisgICAgICAgICAgY2FzZSBHTF9MRVFVQUw6CisgICAgICAgICAg
Y2FzZSBHTF9FUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6CisgICAgICAgICAgY2Fz
ZSBHTF9HRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhGdW5jKGZ1bmMpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVwdGhNYXNr
KEdMYm9vbGVhbiBmbGFnKQoreworICAgIFRSQUNFKCIoR0xib29sZWFuIGZsYWcgPSAlZCkiLCBm
bGFnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXREZXB0aE1hc2soZmxhZyAhPSBHTF9GQUxTRSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEZXB0aFJhbmdlZihHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcikKK3sKKyAgICBUUkFD
RSgiKEdMY2xhbXBmIHpOZWFyID0gJWYsIEdMY2xhbXBmIHpGYXIgPSAlZikiLCB6TmVhciwgekZh
cik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+c2V0RGVwdGhSYW5nZSh6TmVhciwgekZhcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZXRh
Y2hTaGFkZXIoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihH
THVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVy
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQt
PmdldFNoYWRlcihzaGFkZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hh
ZGVyQnlQcm9ncmFtSGFuZGxlOworICAgICAgICAgICAgICAgIHNoYWRlckJ5UHJvZ3JhbUhhbmRs
ZSA9IGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNo
YWRlckJ5UHJvZ3JhbUhhbmRsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtQnlTaGFkZXJIYW5k
bGUgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcik7CisgICAgICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQnlTaGFkZXJIYW5kbGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmRldGFj
aFNoYWRlcihzaGFkZXJPYmplY3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEaXNhYmxlKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCki
LCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UoZmFsc2Up
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbChmYWxzZSk7ICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNv
bnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShmYWxzZSk7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxl
Q292ZXJhZ2UoZmFsc2UpOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0NJ
U1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdChmYWxzZSk7ICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0RGVwdGhUZXN0KGZhbHNlKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZChmYWxzZSk7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcihmYWxzZSk7ICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRl
eCA9ICVkKSIsIGluZGV4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliRW5hYmxlZChpbmRl
eCwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50
IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwIHx8IGZpcnN0IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGlu
ZGljZXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQg
PSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCBpbmRpY2VzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2FwKQorewor
ICAgIFRSQUNFKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQ
b2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVy
YWdlKHRydWUpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6
ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3Qo
dHJ1ZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNU
OiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0aGVy
KHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCkKK3sKKyAg
ICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliRW5hYmxlZChpbmRleCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGaW5pc2godm9pZCkKK3sK
KyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5maW5pc2goKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoKHZv
aWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCA9IDB4JVgsICIKKyAgICAgICAgICAiR0x1aW50IHJlbmRl
cmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBy
ZW5kZXJidWZmZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSIHx8IHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKTsKKworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCB8fCAhZnJh
bWVidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9S
X0FUVEFDSE1FTlQwOgorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZm
ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5D
SUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1
ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdl
dCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVtIHRleHRhcmdldCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0x1aW50IHRleHR1cmUgPSAlZCwgR0xpbnQgbGV2ZWwgPSAl
ZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRB
Q0hNRU5UOgorICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRleHRhcmdldCA9IEdMX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNv
bnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgICAgICAgICBpZiAodGV4ID09
IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICAg
ICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpOworCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwIHx8ICFmcmFt
ZWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1Jf
QVRUQUNITUVOVDA6ICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIodGV4dGFyZ2V0LCB0ZXh0
dXJlKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAg
IGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXIt
PnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xGcm9udEZhY2UoR0xlbnVtIG1vZGUpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQ1c6CisgICAgICAgICAgY2Fz
ZSBHTF9DQ1c6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGcm9u
dEZhY2UobW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuQnVmZmVycyhHTHNpemVpIG4sIEdMdWludCog
YnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGJ1ZmZlcnMg
PSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
biA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBUUkFDRSgi
KEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXh0dXJlLT5nZW5l
cmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWlu
dCogZnJhbWVidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
ZnJhbWVidWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMo
R0xzaXplaSBuLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVp
IG4gPSAlZCwgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZm
ZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlcnNb
aV0gPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdlblRleHR1cmVzKEdMc2l6ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKK3sKKyAgICBUUkFD
RSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4
dHVyZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dHVyZXNbaV0g
PSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRB
Y3RpdmVBdHRyaWIoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVk
LCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSAqbGVuZ3RoID0gMHglMC44cCwgIgorICAg
ICAgICAgICJHTGludCAqc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSAqdHlwZSA9ICUwLjhwLCBHTGNo
YXIgKm5hbWUgPSAlMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZzaXplLCBs
ZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
YnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJp
YnV0ZUNvdW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwg
dHlwZSwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3JtKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6
ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsICIKKyAg
ICAgICAgICAiR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQqIHNpemUgPSAweCUwLjhw
LCBHTGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVp
bnQpcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtKGlu
ZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QXR0
YWNoZWRTaGFkZXJzKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAl
ZCwgR0xzaXplaSBtYXhjb3VudCA9ICVkLCBHTHNpemVpKiBjb3VudCA9IDB4JTAuOHAsIEdMdWlu
dCogc2hhZGVycyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBtYXhjb3VudCwgY291
bnQsIHNoYWRlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobWF4Y291bnQgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzKG1heGNvdW50LCBjb3VudCwgc2hh
ZGVycyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
aW50IF9fc3RkY2FsbCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBH
TGNoYXIqIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25zdCBH
TGNoYXIqIG5hbWUgPSAlcykiLCBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJpYnV0ZUxvY2F0aW9uKG5hbWUp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7CisgICAgfQorCisgICAg
cmV0dXJuIC0xOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEJvb2xlYW52KEdMZW51bSBwbmFt
ZSwgR0xib29sZWFuKiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUgPSAweCVY
LCBHTGJvb2xlYW4qIHBhcmFtcyA9IDB4JTAuOHApIiwgIHBuYW1lLCBwYXJhbXMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
KGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1
ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAg
ICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBw
YXJhbWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0g
R0xfRkxPQVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGZsb2F0
ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0g
bmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5n
ZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4w
ZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOworICAgICAg
ICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKKworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKKwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFt
czsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaW50UGFyYW1zW2ldID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJh
bXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVm
ZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0g
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIg
aXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9CVUZGRVJfVVNBR0U6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+dXNh
Z2UoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZG
RVJfU0laRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xHZXRFcnJvcih2b2lk
KQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFy
YW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1z
ID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRGbG9hdHYo
cG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBu
YXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwor
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1l
LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9
PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhl
IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1
cm4uCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
TlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVt
UGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFt
ZSwgYm9vbFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMC4wZjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxLjBm
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtd
IGJvb2xQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGZsb2F0
KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4
JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAg
IEdMdWludCBhdHRhY2htZW50SGFuZGxlOworICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQw
OiAgICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1l
YnVmZmVyKCktPmdldENvbG9yYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlckhhbmRs
ZSgpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9BVFRBQ0hNRU5UOiAgICAgCisgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBjb250
ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAg
ICAgICBhdHRhY2htZW50SGFuZGxlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAgCisgICAgICAgICAgICAgICAgYXR0YWNobWVu
dFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
OworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5cGU7
ICAgLy8gVHlwZSBjYXRlZ29yeQorICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdM
X05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5cGU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNUZXh0dXJlVGFyZ2V0
KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudE9iamVjdFR5cGU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRPYmplY3RUeXBlID09
IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0g
R0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBi
ZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgIGlmIChhdHRh
Y2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRU
eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsR2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFt
cykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlw
ZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQs
IGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAg
ICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1z
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtu
dW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFt
ZSwgZmxvYXRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKCgoR0xmbG9hdCko
MHhGRkZGRkZGRikgKiBmbG9hdFBhcmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShmbG9hdFBhcmFtc1tpXSA+IDAu
MGYgPyBmbG9vcihmbG9hdFBhcmFtc1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0UGFyYW1zW2ldIC0g
MC41KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgW10gZmxvYXRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBw
YXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGVudW0gcG5hbWUg
PSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5hbWUsIHBhcmFtcyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0
aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BVFRB
Q0hFRF9TSEFERVJTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURV9N
QVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRB
Y3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZl
VW5pZm9ybU1heExlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1JbmZvTG9nKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQs
IEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogaW5mb2xvZyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwcm9ncmFtLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlckhhbmRsZSgpKTsKKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfV0lEVEg6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSEVJ
R0hUOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEhlaWdodCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1
ZmZlci0+Z2V0Rm9ybWF0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5k
ZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJi
dWZmZXIpLT5nZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVu
ZGVyYnVmZmVyKS0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAg
IGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIq
PihyZW5kZXJidWZmZXIpLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgICAg
ICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1
ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEFscGhhU2l6ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNEZXB0aGJ1ZmZlcigpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpE
ZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldERlcHRoU2l6ZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0la
RToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFN0ZW5jaWxTaXplKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldFNoYWRlcml2KEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xlbnVtIHBuYW1lID0g
JWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNoYWRlciwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisK
KyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TSEFERVJfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2Jq
ZWN0LT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX0RFTEVURV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9i
amVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19M
RU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0SW5mb0xv
Z0xlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVy
T2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJJbmZvTG9nKEdMdWlu
dCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9s
b2cpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9
ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIGluZm9sb2cgPSAweCUwLjhw
KSIsCisgICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0
ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVy
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0
LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBl
LCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pCit7CisgICAgVFJBQ0UoIihHTGVudW0g
c2hhZGVydHlwZSA9IDB4JVgsIEdMZW51bSBwcmVjaXNpb250eXBlID0gMHglWCwgR0xpbnQqIHJh
bmdlID0gMHglMC44cCwgR0xpbnQqIHByZWNpc2lvbiA9IDB4JTAuOHApIiwKKyAgICAgICAgICBz
aGFkZXJ0eXBlLCBwcmVjaXNpb250eXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzaGFkZXJ0eXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9WRVJURVhfU0hBREVSOgorICAgICAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVS
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
IChwcmVjaXNpb250eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9MT1dfRkxPQVQ6
CisgICAgICAgICAgY2FzZSBHTF9NRURJVU1fRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9ISUdI
X0ZMT0FUOgorICAgICAgICAgICAgLy8gQXNzdW1lIElFRUUgNzU0IHByZWNpc2lvbgorICAgICAg
ICAgICAgcmFuZ2VbMF0gPSAxMjc7CisgICAgICAgICAgICByYW5nZVsxXSA9IDEyNzsKKyAgICAg
ICAgICAgICpwcmVjaXNpb24gPSAyMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfTE9XX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX01FRElVTV9JTlQ6CisgICAgICAgICAg
Y2FzZSBHTF9ISUdIX0lOVDoKKyAgICAgICAgICAgIC8vIFNvbWUgKG1vc3QpIGhhcmR3YXJlIG9u
bHkgc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXJzLAorICAg
ICAgICAgICAgLy8gd2hpY2ggY2FuIGFjY3VyYXRlbHkgcmVwcmVzZW50IGludGVnZXJzIHVwIHRv
ICsvLTE2Nzc3MjE2CisgICAgICAgICAgICByYW5nZVswXSA9IDI0OworICAgICAgICAgICAgcmFu
Z2VbMV0gPSAyNDsKKyAgICAgICAgICAgICpwcmVjaXNpb24gPSAwOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6
ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSkKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxl
bmd0aCA9IDB4JTAuOHAsIEdMY2hhciogc291cmNlID0gMHglMC44cCkiLAorICAgICAgICAgIHNo
YWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hh
ZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291cmNlKGJ1
ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCitjb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xl
bnVtIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX1ZFTkRPUjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIlRyYW5zR2FtaW5n
IEluYy4iOworICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CisgICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJBTkdMRSI7CisgICAgICAgICAgY2FzZSBHTF9WRVJTSU9OOgorICAgICAgICAg
ICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoZ2l0LWRldmVsICJfX0RBVEVfXyAi
ICIgX19USU1FX18iKSI7CisgICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJ
T046CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAw
IChnaXQtZGV2ZWwgIl9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKKyAgICAgICAgICBjYXNlIEdM
X0VYVEVOU0lPTlM6CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBO
VUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0
ZSopTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChHTHVieXRlKilO
VUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBh
cmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFt
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0
ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFt
LCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHgl
MC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlm
b3JtZnYobG9jYXRpb24sIHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBw
YXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlv
biA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmpl
Y3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBwYXJhbXMpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKworaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVp
bnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBuYW1l
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChzdHJzdHIobmFtZSwgImdsXyIpID09IG5hbWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSwgZmFs
c2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7CisgICAgfQorCisg
ICAgcmV0dXJuIC0xOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYmZ2KEdM
dWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0Uo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1z
ID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6QXR0cmlidXRlU3RhdGUgYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJT
dGF0ZShpbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubUVuYWJsZWQgPyBH
TF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVNpemU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TdHJpZGU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0
ZS5tVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBH
TGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0ZSBhdHRyaWJTdGF0ZSA9
IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJT
dGF0ZS5tRW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklE
RToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0cmlkZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1RZUEU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0
YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZm
ZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVO
VF9WRVJURVhfQVRUUklCOgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVu
dFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3VycmVu
dFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoq
IHBvaW50ZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1l
ID0gMHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwb2lu
dGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSAhPSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwb2ludGVy
ID0gY29uc3RfY2FzdDxHTHZvaWQqPihjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xIaW50KEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBtb2RlID0gMHglWCkiLCB0YXJn
ZXQsIG1vZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAg
ICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
RkFTVEVTVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9OSUNFU1Q6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRE9OVF9DQVJFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRHZW5lcmF0
ZU1pcG1hcEhpbnQobW9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVyKEdMdWludCBidWZmZXIp
Cit7CisgICAgVFJBQ0UoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVmZmVyKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0ICYmIGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OkJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0QnVmZmVyKGJ1ZmZlcik7
CisKKyAgICAgICAgICAgIGlmIChidWZmZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFM
U0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0VuYWJsZWQoR0xlbnVtIGNhcCkKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjYXApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250ZXh0LT5pc1BvbHln
b25PZmZzZXRGaWxsRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5h
YmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTY2lz
c29yVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxlZCgpOworICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGVwdGhUZXN0RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVkKCk7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+
aXNEaXRoZXJFbmFibGVkKCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgZnJhbWVidWZmZXIgPSAl
ZCkiLCBmcmFtZWJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBm
cmFtZWJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKwor
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZB
TFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHByb2dyYW0pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1JlbmRlcmJ1ZmZlcihH
THVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHJlbmRlcmJ1ZmZlciA9
ICVkKSIsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAm
JiByZW5kZXJidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KnJlbmRlcmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpOworCisgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50
IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgc2hhZGVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIo
c2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKHNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVy
biBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCB0ZXh0dXJlID0gJWQpIiwgdGV4dHVyZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiB0ZXh0dXJlKQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRl
eHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisg
ICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbExpbmVXaWR0aChHTGZs
b2F0IHdpZHRoKQoreworICAgIFRSQUNFKCIoR0xmbG9hdCB3aWR0aCA9ICVmKSIsIHdpZHRoKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdpZHRoIDw9IDAuMGYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0TGlu
ZVdpZHRoKHdpZHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKQorewor
ICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVj
dC0+bGluaygpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsUGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJh
bSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQp
IiwgcG5hbWUsIHBhcmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgaWYgKHBh
cmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFtICE9IDgpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0VW5wYWNrQWxpZ25tZW50KHBhcmFtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgorICAgICAgICAgICAgICAgIGlmIChw
YXJhbSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0gIT0gNCAmJiBwYXJhbSAhPSA4KQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFBhY2tBbGlnbm1lbnQocGFyYW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQb2x5Z29uT2Zmc2V0KEdMZmxvYXQg
ZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIFRSQUNFKCIoR0xmbG9hdCBmYWN0b3IgPSAl
ZiwgR0xmbG9hdCB1bml0cyA9ICVmKSIsIGZhY3RvciwgdW5pdHMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFBv
bHlnb25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgVFJBQ0UoIihHTGludCB4
ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9
ICVkLCAiCisgICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4
JVgsIEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
IChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBnbDo6SU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpOwor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgor
ICAgICAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lkdGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9T
SVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJl
bmRlcmJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRSZW5kZXJidWZmZXIobmV3IGdsOjpEZXB0aGJ1ZmZlcih3aWR0aCwgaGVpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6Q29sb3Ji
dWZmZXIod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXIobmV3IGdsOjpTdGVuY2lsYnVmZmVyKHdpZHRo
LCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xl
YW4gaW52ZXJ0KQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFu
IGludmVydCA9ICVkKSIsIHZhbHVlLCBpbnZlcnQpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVy
YWdlUGFyYW1zKGdsOjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RSVUUpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsU2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRTY2lzc29yUGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVy
QmluYXJ5KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9y
bWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCit7CisgICAgVFJBQ0Uo
IihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCwgR0xlbnVt
IGJpbmFyeWZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBiaW5hcnkg
PSAweCUwLjhwLCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgbiwgc2hhZGVycywg
YmluYXJ5Zm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IC8vIE5vIGJpbmFyeSBzaGFkZXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgorICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNv
bnN0IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUw
LjhwKSIsCisgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9
IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoIXNoYWRlck9i
amVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UHJv
Z3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZXRTb3VyY2UoY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCBy
ZWYsIEdMdWludCBtYXNrKQoreworICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTF9GUk9OVF9B
TkRfQkFDSywgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2ls
RnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzaykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xlbnVtIGZ1bmMgPSAw
eCVYLCBHTGludCByZWYgPSAlZCwgR0x1aW50IG1hc2sgPSAlZCkiLCBmYWNlLCBmdW5jLCByZWYs
IG1hc2spOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAg
ICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmdW5jKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9ORVZFUjoKKyAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKKyAgICAgICAgICBj
YXNlIEdMX0xFU1M6CisgICAgICAgICAgY2FzZSBHTF9MRVFVQUw6CisgICAgICAgICAgY2FzZSBH
TF9FUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dS
RUFURVI6CisgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsUGFyYW1zKGZ1
bmMsIHJlZiwgbWFzayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09
IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja1BhcmFtcyhmdW5jLCByZWYsIG1h
c2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1hc2soR0x1aW50IG1hc2spCit7
CisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBtYXNrKTsKK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTHVp
bnQgbWFzaykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwgR0x1aW50IG1hc2sg
PSAlZCkiLCBmYWNlLCBtYXNrKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChm
YWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAgICAgICBjYXNl
IEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRf
QkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2ls
V3JpdGVtYXNrKG1hc2spOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmFjZSA9
PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2sobWFzayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFp
bCwgR0xlbnVtIHpwYXNzKQoreworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xfRlJPTlRfQU5E
X0JBQ0ssIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNp
bE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51
bSB6cGFzcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xlbnVtIGZhaWwg
PSAweCVYLCBHTGVudW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4JVhzKSIsCisgICAg
ICAgICAgZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChmYWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAg
ICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
ZmFpbCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNl
IEdMX0tFRVA6CisgICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xf
SU5DUjoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1I6CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6
CisgICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dS
QVA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKHpmYWlsKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAg
IGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6CisgICAgICAgICAgY2Fz
ZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2UgR0xfREVDUjoKKyAgICAgICAgICBjYXNlIEdMX0lO
VkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKKyAgICAgICAgICBjYXNlIEdMX0RF
Q1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN3aXRjaCAoenBhc3MpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAg
ICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2UgR0xfUkVQTEFDRToKKyAgICAgICAg
ICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9ERUNSOgorICAgICAgICAgIGNhc2Ug
R0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgorICAgICAgICAgIGNhc2Ug
R0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9O
VCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxPcGVyYXRpb25zKGZhaWwsIHpmYWlsLCB6cGFzcyk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFj
ZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBUUkFDRSgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKKyAgICAgICAg
ICAiR0xpbnQgYm9yZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9
IDB4JVgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA8IDAg
fHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZl
bCA+IDAgJiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhU
VVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBs
ZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAg
ICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxl
dmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBmb3JtYXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9yZGVyICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhl
bHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZVBvc1gobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5l
Z1gobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0Fs
aWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1oobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgp
LCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFy
YW0pCit7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludClwYXJhbSk7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIChHTGludCkqcGFyYW1zKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCit7
CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0xpbnQgcGFyYW0gPSAlZCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFt
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BR19GSUxURVI6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0
ZXIoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50
KiBwYXJhbXMpCit7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsICpwYXJhbXMp
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBUUkFDRSgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQs
IEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdM
c2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4
JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6
SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwg
MCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3aWR0
aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBoZWln
aHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUo
Zm9ybWF0LCB0eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisg
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRV
bnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgpCit7CisgICAgZ2xVbmlmb3JtMWZ2KGxvY2F0
aW9uLCAxLCAmeCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9
IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0x
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgpCit7CisgICAgZ2xV
bmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7Cisg
ICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9j
YXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHkpCit7CisgICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKKworICAgIGdsVW5p
Zm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGlu
dCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKK3sKKyAgICBHTGludCB4eVs0XSA9IHt4LCB5
fTsKKworICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0o
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xp
bnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit7CisgICAgR0xm
bG9hdCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEs
IChHTGZsb2F0KikmeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIFRSQUNF
KCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0
KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0g
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xpbnQgeikKK3sKKyAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBnbFVu
aWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQq
IHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQoreworICAgIEdMZmxv
YXQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKKworICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwg
MSwgKEdMZmxvYXQqKSZ4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIFRS
QUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZs
b2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeiwgR0xpbnQgdykKK3sKKyAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHos
IHd9OworCisgICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXp3KTsKK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9u
LCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00aXYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1h
dHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9
IEdMX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBU
UkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFu
IHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0o
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNl
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0g
JWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgJiYg
cHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9n
cmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVk
KSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3Jh
bSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
aW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNb
NF0gPSB7IHgsIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwg
Y29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xm
bG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIy
ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAgIFRSQUNFKCIoR0x1
aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwg
eCwgeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9OworICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIs
IGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVz
WzFdLCAwLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2YoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgs
IEdMZmxvYXQgeSwgR0xmbG9hdCB6KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQs
IEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYpIiwgaW5kZXgs
IHgsIHksIHopOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIzZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44
cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZh
bHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGluZGV4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBH
TGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHosIHcpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1
aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFs
dWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCog
cHRyKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMaW50IHNpemUgPSAlZCwg
R0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgIkdMYm9vbGVhbiBub3JtYWxpemVkID0g
JWQsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCogcHRyID0gMHglMC44cCkiLAor
ICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHB0cik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2Fz
ZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAg
IGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJpZGUgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgp
LCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgVFJBQ0UoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAgIFRSQUNFKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9
ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCAiCisgICAgICAgICAg
IkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JXgsIGNvbnN0IEdMdm9pZCog
cGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNo
YXIgKnByb2NuYW1lKQoreworICAgIHN0cnVjdCBFeHRlbnNpb24KKyAgICB7CisgICAgICAgIGNv
bnN0IGNoYXIgKm5hbWU7CisgICAgICAgIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgYWRkcmVzczsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IEV4dGVuc2lvbiBn
bEV4dGVuc2lvbnNbXSA9CisgICAgeworICAgICAgICB7ImdsVGV4SW1hZ2UzRE9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGV4SW1hZ2UzRE9FU30sCisg
ICAgfTsKKworICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMp
IC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChw
cm9jbmFtZSwgZ2xFeHRlbnNpb25zW2V4dF0ubmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWds
RXh0ZW5zaW9uc1tleHRdLmFkZHJlc3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
TlVMTDsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKK0xJQlJBUlkgbGliR0xFU3YyCitF
WFBPUlRTCisgICAgZ2xBY3RpdmVUZXh0dXJlICAgICAgICAgICAgICAgICBAMQorICAgIGdsQXR0
YWNoU2hhZGVyICAgICAgICAgICAgICAgICAgQDIKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbiAg
ICAgICAgICAgIEAzCisgICAgZ2xCaW5kQnVmZmVyICAgICAgICAgICAgICAgICAgICBANAorICAg
IGdsQmluZEZyYW1lYnVmZmVyICAgICAgICAgICAgICAgQDUKKyAgICBnbEJpbmRSZW5kZXJidWZm
ZXIgICAgICAgICAgICAgIEA2CisgICAgZ2xCaW5kVGV4dHVyZSAgICAgICAgICAgICAgICAgICBA
NworICAgIGdsQmxlbmRDb2xvciAgICAgICAgICAgICAgICAgICAgQDgKKyAgICBnbEJsZW5kRXF1
YXRpb24gICAgICAgICAgICAgICAgIEA5CisgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUgICAg
ICAgICBAMTAKKyAgICBnbEJsZW5kRnVuYyAgICAgICAgICAgICAgICAgICAgIEAxMQorICAgIGds
QmxlbmRGdW5jU2VwYXJhdGUgICAgICAgICAgICAgQDEyCisgICAgZ2xCdWZmZXJEYXRhICAgICAg
ICAgICAgICAgICAgICBAMTMKKyAgICBnbEJ1ZmZlclN1YkRhdGEgICAgICAgICAgICAgICAgIEAx
NAorICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAgICAgICAgQDE1CisgICAgZ2xDbGVhciAg
ICAgICAgICAgICAgICAgICAgICAgICBAMTYKKyAgICBnbENsZWFyQ29sb3IgICAgICAgICAgICAg
ICAgICAgIEAxNworICAgIGdsQ2xlYXJEZXB0aGYgICAgICAgICAgICAgICAgICAgQDE4CisgICAg
Z2xDbGVhclN0ZW5jaWwgICAgICAgICAgICAgICAgICBAMTkKKyAgICBnbENvbG9yTWFzayAgICAg
ICAgICAgICAgICAgICAgIEAyMAorICAgIGdsQ29tcGlsZVNoYWRlciAgICAgICAgICAgICAgICAg
QDIxCisgICAgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAgICAgICAgICBAMjIKKyAgICBnbENvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEICAgICAgIEAyMworICAgIGdsQ29weVRleEltYWdlMkQgICAgICAg
ICAgICAgICAgQDI0CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAgICAgICAgICAgICBAMjUKKyAg
ICBnbENyZWF0ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAyNgorICAgIGdsQ3JlYXRlU2hhZGVy
ICAgICAgICAgICAgICAgICAgQDI3CisgICAgZ2xDdWxsRmFjZSAgICAgICAgICAgICAgICAgICAg
ICBAMjgKKyAgICBnbERlbGV0ZUJ1ZmZlcnMgICAgICAgICAgICAgICAgIEAyOQorICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzICAgICAgICAgICAgQDMwCisgICAgZ2xEZWxldGVQcm9ncmFtICAgICAg
ICAgICAgICAgICBAMzIKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAgICAgICAgIEAzMwor
ICAgIGdsRGVsZXRlU2hhZGVyICAgICAgICAgICAgICAgICAgQDM0CisgICAgZ2xEZWxldGVUZXh0
dXJlcyAgICAgICAgICAgICAgICBAMzEKKyAgICBnbERlcHRoRnVuYyAgICAgICAgICAgICAgICAg
ICAgIEAzNgorICAgIGdsRGVwdGhNYXNrICAgICAgICAgICAgICAgICAgICAgQDM3CisgICAgZ2xE
ZXB0aFJhbmdlZiAgICAgICAgICAgICAgICAgICBAMzgKKyAgICBnbERldGFjaFNoYWRlciAgICAg
ICAgICAgICAgICAgIEAzNQorICAgIGdsRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICAgQDM5
CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICBANDAKKyAgICBnbERyYXdBcnJh
eXMgICAgICAgICAgICAgICAgICAgIEA0MQorICAgIGdsRHJhd0VsZW1lbnRzICAgICAgICAgICAg
ICAgICAgQDQyCisgICAgZ2xFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICBANDMKKyAgICBn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgIEA0NAorICAgIGdsRmluaXNoICAgICAgICAg
ICAgICAgICAgICAgICAgQDQ1CisgICAgZ2xGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICBA
NDYKKyAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyICAgICAgIEA0NworICAgIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQgICAgICAgICAgQDQ4CisgICAgZ2xGcm9udEZhY2UgICAgICAgICAgICAg
ICAgICAgICBANDkKKyAgICBnbEdlbkJ1ZmZlcnMgICAgICAgICAgICAgICAgICAgIEA1MAorICAg
IGdsR2VuRnJhbWVidWZmZXJzICAgICAgICAgICAgICAgQDUyCisgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzICAgICAgICAgICAgICBANTMKKyAgICBnbEdlblRleHR1cmVzICAgICAgICAgICAgICAgICAg
IEA1NAorICAgIGdsR2VuZXJhdGVNaXBtYXAgICAgICAgICAgICAgICAgQDUxCisgICAgZ2xHZXRB
Y3RpdmVBdHRyaWIgICAgICAgICAgICAgICBANTUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm0gICAg
ICAgICAgICAgIEA1NgorICAgIGdsR2V0QXR0YWNoZWRTaGFkZXJzICAgICAgICAgICAgQDU3Cisg
ICAgZ2xHZXRBdHRyaWJMb2NhdGlvbiAgICAgICAgICAgICBANTgKKyAgICBnbEdldEJvb2xlYW52
ICAgICAgICAgICAgICAgICAgIEA1OQorICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgICAgICAg
ICAgQDYwCisgICAgZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgICBANjEKKyAgICBnbEdl
dEZsb2F0diAgICAgICAgICAgICAgICAgICAgIEA2MgorICAgIGdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYgICBANjMKKyAgICBnbEdldEludGVnZXJ2ICAgICAgICAgICAgICAg
ICAgIEA2NAorICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cgICAgICAgICAgICAgQDY2CisgICAgZ2xH
ZXRQcm9ncmFtaXYgICAgICAgICAgICAgICAgICBANjUKKyAgICBnbEdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2ICAgIEA2NworICAgIGdsR2V0U2hhZGVySW5mb0xvZyAgICAgICAgICAgICAgQDY5
CisgICAgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgICAgICBANzAKKyAgICBnbEdldFNoYWRl
clNvdXJjZSAgICAgICAgICAgICAgIEA3MQorICAgIGdsR2V0U2hhZGVyaXYgICAgICAgICAgICAg
ICAgICAgQDY4CisgICAgZ2xHZXRTdHJpbmcgICAgICAgICAgICAgICAgICAgICBANzIKKyAgICBn
bEdldFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAgIEA3MworICAgIGdsR2V0VGV4UGFyYW1ldGVy
aXYgICAgICAgICAgICAgQDc0CisgICAgZ2xHZXRVbmlmb3JtTG9jYXRpb24gICAgICAgICAgICBA
NzcKKyAgICBnbEdldFVuaWZvcm1mdiAgICAgICAgICAgICAgICAgIEA3NQorICAgIGdsR2V0VW5p
Zm9ybWl2ICAgICAgICAgICAgICAgICAgQDc2CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
diAgICAgICBAODAKKyAgICBnbEdldFZlcnRleEF0dHJpYmZ2ICAgICAgICAgICAgIEA3OAorICAg
IGdsR2V0VmVydGV4QXR0cmliaXYgICAgICAgICAgICAgQDc5CisgICAgZ2xIaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICBAODEKKyAgICBnbElzQnVmZmVyICAgICAgICAgICAgICAgICAgICAg
IEA4MgorICAgIGdsSXNFbmFibGVkICAgICAgICAgICAgICAgICAgICAgQDgzCisgICAgZ2xJc0Zy
YW1lYnVmZmVyICAgICAgICAgICAgICAgICBAODQKKyAgICBnbElzUHJvZ3JhbSAgICAgICAgICAg
ICAgICAgICAgIEA4NQorICAgIGdsSXNSZW5kZXJidWZmZXIgICAgICAgICAgICAgICAgQDg2Cisg
ICAgZ2xJc1NoYWRlciAgICAgICAgICAgICAgICAgICAgICBAODcKKyAgICBnbElzVGV4dHVyZSAg
ICAgICAgICAgICAgICAgICAgIEA4OAorICAgIGdsTGluZVdpZHRoICAgICAgICAgICAgICAgICAg
ICAgQDg5CisgICAgZ2xMaW5rUHJvZ3JhbSAgICAgICAgICAgICAgICAgICBAOTAKKyAgICBnbFBp
eGVsU3RvcmVpICAgICAgICAgICAgICAgICAgIEA5MQorICAgIGdsUG9seWdvbk9mZnNldCAgICAg
ICAgICAgICAgICAgQDkyCisgICAgZ2xSZWFkUGl4ZWxzICAgICAgICAgICAgICAgICAgICBAOTMK
KyAgICBnbFJlbGVhc2VTaGFkZXJDb21waWxlciAgICAgICAgIEA5NAorICAgIGdsUmVuZGVyYnVm
ZmVyU3RvcmFnZSAgICAgICAgICAgQDk1CisgICAgZ2xTYW1wbGVDb3ZlcmFnZSAgICAgICAgICAg
ICAgICBAOTYKKyAgICBnbFNjaXNzb3IgICAgICAgICAgICAgICAgICAgICAgIEA5NworICAgIGds
U2hhZGVyQmluYXJ5ICAgICAgICAgICAgICAgICAgQDk4CisgICAgZ2xTaGFkZXJTb3VyY2UgICAg
ICAgICAgICAgICAgICBAOTkKKyAgICBnbFN0ZW5jaWxGdW5jICAgICAgICAgICAgICAgICAgIEAx
MDAKKyAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgICAgICAgICAgIEAxMDEKKyAgICBnbFN0ZW5j
aWxNYXNrICAgICAgICAgICAgICAgICAgIEAxMDIKKyAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUg
ICAgICAgICAgIEAxMDMKKyAgICBnbFN0ZW5jaWxPcCAgICAgICAgICAgICAgICAgICAgIEAxMDQK
KyAgICBnbFN0ZW5jaWxPcFNlcGFyYXRlICAgICAgICAgICAgIEAxMDUKKyAgICBnbFRleEltYWdl
MkQgICAgICAgICAgICAgICAgICAgIEAxMDYKKyAgICBnbFRleFBhcmFtZXRlcmYgICAgICAgICAg
ICAgICAgIEAxMDcKKyAgICBnbFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAgICAgIEAxMDgKKyAg
ICBnbFRleFBhcmFtZXRlcmkgICAgICAgICAgICAgICAgIEAxMDkKKyAgICBnbFRleFBhcmFtZXRl
cml2ICAgICAgICAgICAgICAgIEAxMTAKKyAgICBnbFRleFN1YkltYWdlMkQgICAgICAgICAgICAg
ICAgIEAxMTEKKyAgICBnbFVuaWZvcm0xZiAgICAgICAgICAgICAgICAgICAgIEAxMTIKKyAgICBn
bFVuaWZvcm0xZnYgICAgICAgICAgICAgICAgICAgIEAxMTMKKyAgICBnbFVuaWZvcm0xaSAgICAg
ICAgICAgICAgICAgICAgIEAxMTQKKyAgICBnbFVuaWZvcm0xaXYgICAgICAgICAgICAgICAgICAg
IEAxMTUKKyAgICBnbFVuaWZvcm0yZiAgICAgICAgICAgICAgICAgICAgIEAxMTYKKyAgICBnbFVu
aWZvcm0yZnYgICAgICAgICAgICAgICAgICAgIEAxMTcKKyAgICBnbFVuaWZvcm0yaSAgICAgICAg
ICAgICAgICAgICAgIEAxMTgKKyAgICBnbFVuaWZvcm0yaXYgICAgICAgICAgICAgICAgICAgIEAx
MTkKKyAgICBnbFVuaWZvcm0zZiAgICAgICAgICAgICAgICAgICAgIEAxMjAKKyAgICBnbFVuaWZv
cm0zZnYgICAgICAgICAgICAgICAgICAgIEAxMjEKKyAgICBnbFVuaWZvcm0zaSAgICAgICAgICAg
ICAgICAgICAgIEAxMjIKKyAgICBnbFVuaWZvcm0zaXYgICAgICAgICAgICAgICAgICAgIEAxMjMK
KyAgICBnbFVuaWZvcm00ZiAgICAgICAgICAgICAgICAgICAgIEAxMjQKKyAgICBnbFVuaWZvcm00
ZnYgICAgICAgICAgICAgICAgICAgIEAxMjUKKyAgICBnbFVuaWZvcm00aSAgICAgICAgICAgICAg
ICAgICAgIEAxMjYKKyAgICBnbFVuaWZvcm00aXYgICAgICAgICAgICAgICAgICAgIEAxMjcKKyAg
ICBnbFVuaWZvcm1NYXRyaXgyZnYgICAgICAgICAgICAgIEAxMjgKKyAgICBnbFVuaWZvcm1NYXRy
aXgzZnYgICAgICAgICAgICAgIEAxMjkKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnYgICAgICAgICAg
ICAgIEAxMzAKKyAgICBnbFVzZVByb2dyYW0gICAgICAgICAgICAgICAgICAgIEAxMzEKKyAgICBn
bFZhbGlkYXRlUHJvZ3JhbSAgICAgICAgICAgICAgIEAxMzIKKyAgICBnbFZlcnRleEF0dHJpYjFm
ICAgICAgICAgICAgICAgIEAxMzMKKyAgICBnbFZlcnRleEF0dHJpYjFmdiAgICAgICAgICAgICAg
IEAxMzQKKyAgICBnbFZlcnRleEF0dHJpYjJmICAgICAgICAgICAgICAgIEAxMzUKKyAgICBnbFZl
cnRleEF0dHJpYjJmdiAgICAgICAgICAgICAgIEAxMzYKKyAgICBnbFZlcnRleEF0dHJpYjNmICAg
ICAgICAgICAgICAgIEAxMzcKKyAgICBnbFZlcnRleEF0dHJpYjNmdiAgICAgICAgICAgICAgIEAx
MzgKKyAgICBnbFZlcnRleEF0dHJpYjRmICAgICAgICAgICAgICAgIEAxMzkKKyAgICBnbFZlcnRl
eEF0dHJpYjRmdiAgICAgICAgICAgICAgIEAxNDAKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIg
ICAgICAgICAgIEAxNDEKKyAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAgICAgICAgIEAxNDIK
KworICAgIDsgRXh0ZW5zaW9ucworICAgIGdsVGV4SW1hZ2UzRE9FUwkJCQkJQDE0MworICAgIAor
ICAgIDsgRUdMIGRlcGVuZGVuY2llcworICAgIGdsQ3JlYXRlQ29udGV4dAkJCQkJQDE0NCBOT05B
TUUKKyAgICBnbERlc3Ryb3lDb250ZXh0CQkJCUAxNDUgTk9OQU1FCisgICAgZ2xNYWtlQ3VycmVu
dAkJCQkJQDE0NiBOT05BTUUKKyAgICBnbEdldEN1cnJlbnRDb250ZXh0CQkJCUAxNDcgTk9OQU1F
CisgICAgZ2xHZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgICBAMTQ4IE5PTkFNRQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQ5IEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlv
UHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOS4wMCINCisJ
TmFtZT0ibGliR0xFU3YyIg0KKwlQcm9qZWN0R1VJRD0ie0I1ODcxQTdBLTk2OEMtNDJFMy1BMzNC
LTk4MUU2RjQ0OEU3OH0iDQorCVJvb3ROYW1lc3BhY2U9ImxpYkdMRVN2MiINCisJS2V5d29yZD0i
V2luMzJQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBs
YXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0
Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+
DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERp
cmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1l
ZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25U
eXBlPSIyIg0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRh
R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2Vydmlj
ZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlE
TFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0K
KwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9
IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdM
RVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCINCisJCQkJTWlu
aW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVu
dGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJu
aW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2Ui
DQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IkQzZHg5Lmxp
YiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0i
bGliR0xFU3YyLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJ
CQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0
YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNvbW1hbmRMaW5lPSJA
ZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilc
bGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdM
RVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4N
CisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFz
ZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0
aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1l
KSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJ
V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkND
dXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFH
ZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNl
UHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURM
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQor
CQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQor
CQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJv
amVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJ
TjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJF
X05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJCQlSdW50aW1lTGlicmFy
eT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0i
MyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVi
dWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
TWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlu
a2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iRDNkeDkubGliIg0KKwkJCQlM
aW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNl
Ig0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiINCisJCQkJR2VuZXJh
dGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCU9wdGlt
aXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCisJCQkJUmFu
ZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIN
CisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
QUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNB
cHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWls
ZEV2ZW50VG9vbCINCisJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsm
I3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90
OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7
JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBB
O0BlY2hvIG9mZiYjeDBEOyYjeDBBOyINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8
L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8Rmls
ZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3Bw
O2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRp
Zmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQorCQkJPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxCbGl0LmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxj
b21tb25cZGVidWcuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UmVuZGVyYnVmZmVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJHZW9tZXRyeSINCisJCQkJPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGJhY2tlbmQuY3BwIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
Z2VvbWV0cnlcZHg5LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XEluZGV4RGF0YU1hbmFnZXIuY3BwIg0KKwkJCQkJ
Pg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0
cnlcVmVydGV4RGF0YU1hbmFnZXIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9G
aWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMi
DQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRp
Zmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxCbGl0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250ZXh0LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1lYnVm
ZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGlu
Y2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYXRodXRpbC5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZl
ci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxTaGFkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cVGV4dHVyZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsdGVyDQorCQkJCU5hbWU9Ikdlb21ldHJ5Ig0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcYmFja2VuZC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcZHg5LmgiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9t
ZXRyeVxJbmRleERhdGFNYW5hZ2VyLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVx2ZXJ0ZXhjb252ZXJzaW9uLmgiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxn
ZW9tZXRyeVxWZXJ0ZXhEYXRhTWFuYWdlci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
PC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuXGxp
YkdMRVN2Mi5kZWYiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4N
CisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL21haW4uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGli
R0xFU3YyL21haW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVudCBv
ZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKKyNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorCisj
aW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisKK3N0YXRpYyBEV09SRCBjdXJyZW50
VExTID0gVExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5D
RSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAgc3dpdGNo
IChyZWFzb24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOworCisgICAgICAgICAgICBp
ZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAorICAgICAgY2FzZSBETExf
VEhSRUFEX0FUVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkN1cnJlbnQgKmN1cnJl
bnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGdsOjpDdXJyZW50KSk7
CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOworCisgICAgICAgICAgICAgICAg
Y3VycmVudC0+Y29udGV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxh
eSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpj
dXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1
cnJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1
cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJl
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3Vy
cmVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworbmFtZXNwYWNlIGdsCit7Cit2b2lk
IG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWds
OjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5jb250ZXh0ID0gY29udGV4
dDsKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKKworICAgIGlmIChjb250ZXh0ICYm
IGRpc3BsYXkgJiYgc3VyZmFjZSkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPm1ha2VDdXJyZW50
KGRpc3BsYXksIHN1cmZhY2UpOworICAgIH0KK30KKworQ29udGV4dCAqZ2V0Q29udGV4dCgpCit7
CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExT
KTsKKworICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OworfQorCitlZ2w6OkRpc3BsYXkgKmdl
dERpc3BsYXkoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKK30KKworSURp
cmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBnZXREaXNwbGF5KCk7CisKKyAgICByZXR1cm4gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Cit9Cit9
CisKKy8vIFJlY29yZHMgYW4gZXJyb3IgY29kZQordm9pZCBlcnJvcihHTGVudW0gZXJyb3JDb2Rl
KQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgpOwor
CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVycm9yQ29kZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3JkSW52YWxpZEVudW0oKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgiXHQhIEVy
cm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29y
ZEludmFsaWRWYWx1ZSgpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEgRXJyb3IgZ2VuZXJh
dGVkOiBpbnZhbGlkIHZhbHVlXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfSU5WQUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZh
bGlkT3BlcmF0aW9uKCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0
ZWQ6IGludmFsaWQgb3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfT1VUX09GX01FTU9SWToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZE91dE9m
TWVtb3J5KCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IG91
dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29y
ZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJc
dCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGZyYW1lYnVmZmVyIG9wZXJhdGlvblxuIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisgICAgfQorfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliR0xFU3YyL21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL21haW4uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWFpbi5oOiBNYW5hZ2Vt
ZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQUlOX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9NQUlOX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGli
RUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVz
cGFjZSBnbAoreworc3RydWN0IEN1cnJlbnQKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0OworICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheTsKK307CisKK3ZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAq
Y29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwor
CitDb250ZXh0ICpnZXRDb250ZXh0KCk7CitlZ2w6OkRpc3BsYXkgKmdldERpc3BsYXkoKTsKKwor
SURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Cit9CisKK3ZvaWQgZXJyb3IoR0xlbnVtIGVy
cm9yQ29kZSk7CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZlcnJvcihHTGVudW0gZXJy
b3JDb2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlcnJvcihlcnJvckNvZGUpOwor
CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJ
Tl9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3Yy
L21hdGh1dGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDogTWF0
aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX01B
VEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSA8bWF0
aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKK2lubGluZSBib29sIGlzUG93MihpbnQgeCkKK3sKKyAg
ICByZXR1cm4gKHggJiAoeCAtIDEpKSA9PSAwICYmICh4ICE9IDApOworfQorCitpbmxpbmUgaW50
IGxvZzIoaW50IHgpCit7CisgICAgaW50IHIgPSAwOworICAgIHdoaWxlICgoeCA+PiByKSA+IDEp
IHIrKzsKKyAgICByZXR1cm4gcjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBjZWlsUG93Mih1
bnNpZ25lZCBpbnQgeCkKK3sKKyAgICBpZiAoeCAhPSAwKSB4LS07CisgICAgeCB8PSB4ID4+IDE7
CisgICAgeCB8PSB4ID4+IDI7CisgICAgeCB8PSB4ID4+IDQ7CisgICAgeCB8PSB4ID4+IDg7Cisg
ICAgeCB8PSB4ID4+IDE2OworICAgIHgrKzsKKworICAgIHJldHVybiB4OworfQorCitpbmxpbmUg
ZmxvYXQgY2xhbXAwMShmbG9hdCB4KQoreworICAgIHJldHVybiB4IDwgMCA/IDAgOiAoeCA+IDEg
PyAxIDogeCk7Cit9CisKK3RlbXBsYXRlPGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVkIGlu
dCB1bm9ybShmbG9hdCB4KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZG
RkZGID4+ICgzMiAtIG4pOworCisgICAgaWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1heDsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQp
KG1heCAqIHggKyAwLjVmKTsKKyAgICB9Cit9Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9N
QVRIVVRJTF9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJv
dXRpbmVzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8
bGltaXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgIHJldHVybiAxOworICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorICAgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBHTF9JTlRfVkVD
MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgor
ICAgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
OgorICAgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAg
ICAgIHJldHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0xlbnVtIFVuaWZvcm1Db21wb25lbnRUeXBl
KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
Qk9PTDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6
CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6CisgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9O
RTsKK30KKworc2l6ZV90IFVuaWZvcm1UeXBlU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6ZW9mKEdMYm9v
bGVhbik7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAg
ICAgY2FzZSBHTF9JTlQ6ICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgfQorCisgICAgcmV0
dXJuIFVuaWZvcm1UeXBlU2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3Jt
Q29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK2ludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6Cisg
ICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBH
TF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAg
ICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51
bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6
CisgICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9G
TE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9J
TlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0Ogor
ICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMo
dW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVk
IGludCBiaXRzU2l6ZSkKK3sKKyAgICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUp
OworCisgICAgdW5zaWduZWQgaW50IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGludD46Om1heCgpID4+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0
cyAtIGFsbG9jYXRpb25TaXplKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Yml0c1NpemUgLSBhbGxvY2F0aW9uU2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgo
KmJpdHMgJiBtYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNr
OworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAx
OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworR0xzaXplaSBDb21wdXRlUGl0Y2goR0xz
aXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkK
K3sKKyAgICBBU1NFUlQoYWxpZ25tZW50ID4gMCAmJiBpc1BvdzIoYWxpZ25tZW50KSk7CisKKyAg
ICBHTHNpemVpIHJhd1BpdGNoID0gQ29tcHV0ZVBpeGVsU2l6ZShmb3JtYXQsIHR5cGUpICogd2lk
dGg7CisgICAgcmV0dXJuIChyYXdQaXRjaCArIGFsaWdubWVudCAtIDEpICYgfihhbGlnbm1lbnQg
LSAxKTsKK30KKworLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRl
eGVsIGluIGFuIEltYWdlCitpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwor
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpOworICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9m
KHVuc2lnbmVkIGNoYXIpICogMjsKKyAgICAgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAg
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDM7CisgICAgICAgICAgY2FzZSBHTF9SR0JB
OiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiA0OworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSXNDdWJlbWFwVGV4
dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0ID49IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aKTsKK30KKworYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkK
K3sKKyAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpOworfQorCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25l
IG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIENoZWNrVGV4dHVyZUZv
cm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2Fz
ZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIHJldHVybiAo
Zm9ybWF0ID09IEdMX1JHQkEpOworCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOworCisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKK25hbWVzcGFjZSBlczJkeAor
eworCitEM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKQorewor
ICAgIEQzRENNUEZVTkMgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7CisgICAgc3dpdGNoIChjb21w
YXJpc29uKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBEM0RDTVBf
TkVWRVI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxXQVlTOiAgIGQzZENvbXAgPSBE
M0RDTVBfQUxXQVlTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVTUzogICAgIGQzZENv
bXAgPSBEM0RDTVBfTEVTUzsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVRVUFMOiAg
IGQzZENvbXAgPSBEM0RDTVBfTEVTU0VRVUFMOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRVFV
QUw6ICAgIGQzZENvbXAgPSBEM0RDTVBfRVFVQUw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUjsgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUkVRVUFMOyBicmVhazsK
KyAgICAgIGNhc2UgR0xfTk9URVFVQUw6IGQzZENvbXAgPSBEM0RDTVBfTk9URVFVQUw7ICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGQzZENvbXA7Cit9CisKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpCit7
CisgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJlZCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYmx1ZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmFscGhhKSk7Cit9CisKK0QzREJMRU5EIENv
bnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKQoreworICAgIEQzREJMRU5EIGQzZEJsZW5kID0g
RDNEQkxFTkRfWkVSTzsKKworICAgIHN3aXRjaCAoYmxlbmQpCisgICAgeworICAgICAgY2FzZSBH
TF9aRVJPOiAgICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfWkVSTzsgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAgICAgIGQz
ZEJsZW5kID0gRDNEQkxFTkRfT05FOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9T
UkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQ09MT1I7ICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOiAgICAgIGQzZEJs
ZW5kID0gRDNEQkxFTkRfSU5WU1JDQ09MT1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1Rf
Q09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVENPTE9SOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQzZEJsZW5k
ID0gRDNEQkxFTkRfSU5WREVTVENPTE9SOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQ
SEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEE7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0g
RDNEQkxFTkRfSU5WU1JDQUxQSEE7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVEFMUEhBOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNE
QkxFTkRfSU5WREVTVEFMUEhBOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEQkxF
TkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQTog
ICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNEQkxFTkRf
SU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6
ICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEFTQVQ7ICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmQ7Cit9
CisKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApCit7CisgICAgRDNE
QkxFTkRPUCBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7CisKKyAgICBzd2l0Y2ggKGJsZW5k
T3ApCisgICAgeworICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5k
T3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19T
VUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQz
REJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmRPcDsKK30KKworRDNEU1RFTkNJTE9QIENv
bnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKK3sKKyAgICBEM0RTVEVOQ0lMT1AgZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7CisKKyAgICBzd2l0Y2ggKHN0ZW5jaWxPcCkK
KyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX1pFUk87ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9LRUVQOiAgICAgIGQzZFN0ZW5jaWxP
cCA9IEQzRFNURU5DSUxPUF9LRUVQOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVQTEFDRTog
ICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfUkVQTEFDRTsgYnJlYWs7CisgICAgICBjYXNl
IEdMX0lOQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1JTQVQ7IGJyZWFr
OworICAgICAgY2FzZSBHTF9ERUNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9E
RUNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5WRVJUOiAgICBkM2RTdGVuY2lsT3AgPSBE
M0RTVEVOQ0lMT1BfSU5WRVJUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDogZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9E
RUNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9ERUNSOyAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZFN0ZW5j
aWxPcDsKK30KKworRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3
cmFwKQoreworICAgIEQzRFRFWFRVUkVBRERSRVNTIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQ
OworCisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFUOiAgICAg
ICAgICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQOyAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9DTEFNUF9UT19FREdFOiAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX0NMQU1QOyAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogICBkM2RXcmFwID0gRDNEVEFERFJFU1Nf
TUlSUk9SOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGQzZFdyYXA7Cit9CisKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBj
dWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSkKK3sKKyAgICBEM0RDVUxMIGN1bGwgPSBEM0RDVUxM
X0NDVzsKKyAgICBzd2l0Y2ggKGN1bGxGYWNlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlJPTlQ6
CisgICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ1cgOiBEM0RD
VUxMX0NDVyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICBj
dWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NDVyA6IEQzRENVTExfQ1cpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIGN1
bGwgPSBEM0RDVUxMX05PTkU7IC8vIGN1bGxpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBkcmF3
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gY3VsbDsKK30KKworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIHJldHVybiAocmVkICAg
PyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAoZ3JlZW4gPyBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAoYmx1ZSAgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAorICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xP
UldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Cit9CisKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZl
cnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcikKK3sKKyAgICBEM0RURVhUVVJFRklMVEVSVFlQ
RSBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgIHN3aXRjaCAobWFnRmlsdGVyKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lO
VDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhG
X0xJTkVBUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBkM2RNYWdGaWx0ZXI7Cit9CisKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVu
dW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhU
VVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKQoreworICAgIHN3aXRjaCAobWluRmlsdGVyKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQz
RFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Cisg
ICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmls
dGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFS
OworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJ
TkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RN
aXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1p
cEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9
CisKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkK
K3sKKyAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9E
MjRGUzg6CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAg
ICBjYXNlIEQzREZNVF9EMjRYNFM0OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QxNVMxOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NL
QUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QzMjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4Ogor
ICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoK
KyAgICAgICAgcmV0dXJuIDA7CisvLyAgICAgIGNhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJl
dHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKy8vICAgICAgY2FzZSBEM0RGTVRfUzhfTE9D
S0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQorICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBH
ZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JG
b3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJl
dHVybiAyOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgIHJldHVybiA4Owor
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldFJl
ZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAx
MDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6CisgICAgICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAg
ICAgcmV0dXJuIDU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JG
b3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDEwOworICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1
OgorICAgICAgICByZXR1cm4gNTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAg
cmV0dXJuIDY7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4gMTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsKKyAg
ICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAg
ICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGlu
dCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQoreworICAgIHN3aXRjaCAoZGVw
dGhGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOiAgcmV0dXJu
IDE2OworICAgICAgY2FzZSBEM0RGTVRfRDMyOiAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAg
Y2FzZSBEM0RGTVRfRDE1UzE6ICAgICAgICAgcmV0dXJuIDE1OworICAgICAgY2FzZSBEM0RGTVRf
RDI0Uzg6ICAgICAgICAgcmV0dXJuIDI0OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6ICAgICAg
ICAgcmV0dXJuIDI0OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDogICAgICAgcmV0dXJuIDI0
OworICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgY2Fz
ZSBEM0RGTVRfRDMyRl9MT0NLQUJMRTogcmV0dXJuIDMyOworICAgICAgY2FzZSBEM0RGTVRfRDI0
RlM4OiAgICAgICAgcmV0dXJuIDI0OworLy8gICAgICBjYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6
ICByZXR1cm4gMzI7ICAgLy8gRDNEOUV4IG9ubHkKKy8vICAgICAgY2FzZSBEM0RGTVRfUzhfTE9D
S0FCTEU6ICAgcmV0dXJuIDA7ICAgIC8vIEQzRDlFeCBvbmx5CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBDb252
ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBwcmltaXRpdmVD
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJp
bWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKK3sKKyAgICBzd2l0Y2ggKHByaW1p
dGl2ZVR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICAgICpkM2RQcmlt
aXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBwcmltaXRpdmVDb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVTOgor
ICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOworICAgICAgICAqZDNk
UHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDI7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRf
TElORVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudDsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgICpkM2RQ
cmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291
bnQgPSBwcmltaXRpdmVDb3VudCAtIDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
UklBTkdMRVM6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVMSVNU
OworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDM7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZl
Q291bnQgPSBwcmltaXRpdmVDb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9UUklBTkdMRV9GQU46CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5H
TEVGQU47CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0QzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVm
ZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdCNV9BMTogICAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CisgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAg
ICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6CisgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OiAgICAgICByZXR1cm4gRDNERk1UX0Qy
NFM4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9B
OFI4RzhCODsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0
eSByb3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNkZWZpbmUgTElC
R0xFU1YyX1VUSUxJVElFU19ICisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVjdCBD
b2xvcjsKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7CitHTGVudW0g
VW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1UeXBlU2l6
ZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CitpbnQg
VmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJl
ZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVu
c2lnbmVkIGludCBiaXRzU2l6ZSk7CisKK2ludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKTsKK0dMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpOworYm9vbCBJc0N1YmVt
YXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xl
bnVtIHRhcmdldCk7Citib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpOworCit9CisKK25hbWVzcGFjZSBlczJkeAoreworCitEM0RDTVBGVU5DIENv
bnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKK0QzRENPTE9SIENvbnZlcnRDb2xv
cihnbDo6Q29sb3IgY29sb3IpOworRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxl
bmQpOworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7CitEM0RTVEVO
Q0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKK0QzRFRFWFRVUkVBRERS
RVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7CitEM0RDVUxMIENvbnZlcnRDdWxs
TW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOworRFdPUkQgQ29udmVydENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKK0Qz
RFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcik7Cit2
b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcik7Cit1
bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25l
ZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdl
dEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldEJsdWVT
aXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQz
REZPUk1BVCBkZXB0aEZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9S
TUFUIHN0ZW5jaWxGb3JtYXQpOworYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJp
bWl0aXZlVHlwZSwgR0xzaXplaSBwcmltaXRpdmVDb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRp
dmVDb3VudCk7CitEM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9y
bWF0KTsKKworfQorCisjZW5kaWYgIC8vIExJQkdMRVNWMl9VVElMSVRJRVNfSApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4
RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9n
ZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3Bw
OiBEZWZpbmVzIHRoZSBJbmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKKy8vIHJ1bnMgdGhl
IEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKworI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNr
ZW5kLmgiCisKK25hbWVzcGFjZQoreworICAgIGVudW0geyBJTklUSUFMX0lOREVYX0JVRkZFUl9T
SVpFID0gNDA5NiAqIHNpemVvZihHTHVpbnQpIH07Cit9CisKK25hbWVzcGFjZSBnbAoreworCitJ
bmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZl
ckJhY2tFbmQgKmJhY2tlbmQpCisgIDogbUNvbnRleHQoY29udGV4dCksIG1CYWNrZW5kKGJhY2tl
bmQpLCBtSW50SW5kaWNlc1N1cHBvcnRlZChiYWNrZW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQor
eworICAgIG1Db3VudGluZ0J1ZmZlciA9IE5VTEw7CisgICAgbUNvdW50aW5nQnVmZmVyU2l6ZSA9
IDA7CisKKyAgICBtTGluZUxvb3BCdWZmZXIgPSBOVUxMOworCisgICAgbVN0cmVhbUJ1ZmZlclNo
b3J0ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJ
WkUsIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgIGlmIChtSW50SW5kaWNlc1N1cHBvcnRlZCkK
KyAgICB7CisgICAgICAgIG1TdHJlYW1CdWZmZXJJbnQgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhC
dWZmZXIoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVN0cmVhbUJ1ZmZlckludCA9IE5VTEw7CisgICAg
fQorfQorCitJbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdlcigpCit7CisgICAgZGVs
ZXRlIG1TdHJlYW1CdWZmZXJTaG9ydDsKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlckludDsKKyAg
ICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOworICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7Cit9
CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJbmRleFR5cGUsIGNsYXNz
IE91dHB1dEluZGV4VHlwZT4KK3ZvaWQgY29weUluZGljZXMoY29uc3QgSW5wdXRJbmRleFR5cGUg
KmluLCBHTHNpemVpIGNvdW50LCBPdXRwdXRJbmRleFR5cGUgKm91dCwgR0x1aW50ICptaW5JbmRl
eCwgR0x1aW50ICptYXhJbmRleCkKK3sKKyAgICBJbnB1dEluZGV4VHlwZSBmaXJzdCA9ICppbjsK
KyAgICBHTHVpbnQgbWluSW5kZXhTb0ZhciA9IGZpcnN0OworICAgIEdMdWludCBtYXhJbmRleFNv
RmFyID0gZmlyc3Q7CisKKyAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1pbkluZGV4U29GYXIgPiAqaW4pIG1pbkluZGV4U29GYXIgPSAq
aW47CisgICAgICAgIGlmIChtYXhJbmRleFNvRmFyIDwgKmluKSBtYXhJbmRleFNvRmFyID0gKmlu
OworCisgICAgICAgICpvdXQrKyA9ICppbisrOworICAgIH0KKworICAgIC8vIEl0IG1pZ2h0IGJl
IGEgbGluZSBsb29wLCBzbyBjb3B5IHRoZSBsb29wIGluZGV4LgorICAgICpvdXQgPSBmaXJzdDsK
KworICAgICptaW5JbmRleCA9IG1pbkluZGV4U29GYXI7CisgICAgKm1heEluZGV4ID0gbWF4SW5k
ZXhTb0ZhcjsKK30KKworfQorCitHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFs
aWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmFy
cmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0
YSAqdHJhbnNsYXRlZCkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCB8
fCB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpOwor
ICAgIEFTU0VSVChjb3VudCA+IDApOworCisgICAgaWYgKGFycmF5RWxlbWVudEJ1ZmZlciAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PEdM
c2l6ZWk+KGluZGljZXMpOworCisgICAgICAgIGlmICh0eXBlU2l6ZSh0eXBlKSAqIGNvdW50ICsg
b2Zmc2V0ID4gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGFycmF5RWxlbWVudEJ1ZmZlci0+c2l6
ZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9O
OworICAgICAgICB9CisKKyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihhcnJheUVsZW1lbnRCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAg
dHJhbnNsYXRlZC0+Y291bnQgPSBjb3VudDsKKworICAgIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3Bh
Y2UgPSBzcGFjZVJlcXVpcmVkKHR5cGUsIGNvdW50KTsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1
ZmZlciAqc3RyZWFtSWIgPSBwcmVwYXJlSW5kZXhCdWZmZXIodHlwZSwgcmVxdWlyZWRTcGFjZSk7
CisKKyAgICBzaXplX3Qgb2Zmc2V0OworICAgIHZvaWQgKm91dHB1dCA9IHN0cmVhbUliLT5tYXAo
cmVxdWlyZWRTcGFjZSwgJm9mZnNldCk7CisKKyAgICB0cmFuc2xhdGVkLT5idWZmZXIgPSBzdHJl
YW1JYjsKKyAgICB0cmFuc2xhdGVkLT5vZmZzZXQgPSBvZmZzZXQ7CisgICAgdHJhbnNsYXRlZC0+
aW5kZXhTaXplID0gaW5kZXhTaXplKHR5cGUpOworCisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdO
RURfQllURSkKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgKmluID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpOworICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGlj
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworCisgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3Vu
dCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgIHsKKyAgICAg
ICAgY29uc3QgR0x1aW50ICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
OworCisgICAgICAgIGlmIChtSW50SW5kaWNlc1N1cHBvcnRlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgR0x1aW50ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVpbnQqPihvdXRwdXQpOworCisgICAg
ICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4
LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gV2hlbiAzMi1iaXQgaW5kaWNlcyBhcmUgdW5zdXBwb3J0ZWQs
IGZha2UgdGhlbSBieSB0cnVuY2F0aW5nIHRvIDE2LWJpdC4KKworICAgICAgICAgICAgR0x1c2hv
cnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAg
Y29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5z
bGF0ZWQtPm1heEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBjb25zdCBHTHVzaG9ydCAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpOworICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihv
dXRwdXQpOworCisgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRl
ZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgfQorCisgICAgc3RyZWFt
SWItPnVubWFwKCk7CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK3N0ZDo6c2l6ZV90
IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKSA/
IHNpemVvZihHTHVpbnQpIDogc2l6ZW9mKEdMdXNob3J0KTsKK30KKworc3RkOjpzaXplX3QgSW5k
ZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiByZXR1cm4gc2l6ZW9m
KEdMdWludCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdM
dXNob3J0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6IHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgfQorfQorCitzdGQ6OnNp
emVfdCBJbmRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVpcmVkKEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50KSBjb25zdAoreworICAgIHJldHVybiAoY291bnQgKyAxKSAqIGluZGV4U2l6ZSh0eXBl
KTsgLy8gKzEgYmVjYXVzZSB3ZSBhbHdheXMgbGVhdmUgYW4gZXh0cmEgZm9yIGxpbmUgbG9vcHMK
K30KKworVHJhbnNsYXRlZEluZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5k
ZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCit7CisgICAg
Ym9vbCB1c2UzMiA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCAmJiBtSW50SW5kaWNlc1N1cHBv
cnRlZCk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnN0cmVhbUliID0gdXNlMzIgPyBt
U3RyZWFtQnVmZmVySW50IDogbVN0cmVhbUJ1ZmZlclNob3J0OworCisgICAgaWYgKHJlcXVpcmVk
U3BhY2UgPiBzdHJlYW1JYi0+c2l6ZSgpKQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3QgbmV3
U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDIgKiBzdHJlYW1JYi0+c2l6ZSgpKTsKKwor
ICAgICAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm5ld1N0cmVhbUJ1ZmZlciA9IG1CYWNrZW5k
LT5jcmVhdGVJbmRleEJ1ZmZlcihuZXdTaXplLCB1c2UzMiA/IEdMX1VOU0lHTkVEX0lOVCA6IEdM
X1VOU0lHTkVEX1NIT1JUKTsKKworICAgICAgICBkZWxldGUgc3RyZWFtSWI7CisKKyAgICAgICAg
c3RyZWFtSWIgPSBuZXdTdHJlYW1CdWZmZXI7CisKKyAgICAgICAgaWYgKHVzZTMyKQorICAgICAg
ICB7CisgICAgICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gc3RyZWFtSWI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtU3RyZWFtQnVmZmVyU2hvcnQg
PSBzdHJlYW1JYjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVhbUliLT5yZXNlcnZlU3Bh
Y2UocmVxdWlyZWRTcGFjZSk7CisKKyAgICByZXR1cm4gc3RyZWFtSWI7Cit9CisKK0dMZW51bSBJ
bmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQoreworICAgIGlm
IChjb3VudCA+PSA2NTUzNSkgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CisKKyAgICBpZiAobW9k
ZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAgICAgICAvLyBGb3IgbGluZSBsb29wcywgY3Jl
YXRlIGEgc2luZ2xlLXVzZSBidWZmZXIgdGhhdCBydW5zIDAgLSBjb3VudC0xLCAwLgorICAgICAg
ICBkZWxldGUgbUxpbmVMb29wQnVmZmVyOworICAgICAgICBtTGluZUxvb3BCdWZmZXIgPSBtQmFj
a2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIoKGNvdW50KzEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSwgR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICppbmRpY2Vz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4obUxpbmVMb29wQnVmZmVyLT5tYXAoKSk7
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGljZXNb
Y291bnRdID0gMDsKKworICAgICAgICBtTGluZUxvb3BCdWZmZXItPnVubWFwKCk7CisKKyAgICAg
ICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtTGluZUxvb3BCdWZmZXI7CisgICAgICAgIGluZGV4SW5m
by0+Y291bnQgPSBjb3VudCArIDE7CisgICAgICAgIGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3Vu
dCAtIDE7CisgICAgfQorICAgIGVsc2UgaWYgKG1Db3VudGluZ0J1ZmZlclNpemUgPCBjb3VudCkK
KyAgICB7CisgICAgICAgIG1Db3VudGluZ0J1ZmZlclNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2Fz
dDxHTHNpemVpPihjZWlsUG93Mihjb3VudCkpLCBtQ291bnRpbmdCdWZmZXJTaXplKjIpOworCisg
ICAgICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7CisgICAgICAgIG1Db3VudGluZ0J1ZmZlciA9
IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihjb3VudCAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgICAgICB1bnNpZ25lZCBzaG9ydCAqaW5kaWNl
cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0ICo+KG1Db3VudGluZ0J1ZmZlci0+bWFwKCkp
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7CisgICAgICAgIH0KKworICAgICAgICBtQ291bnRp
bmdCdWZmZXItPnVubWFwKCk7CisKKyAgICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRp
bmdCdWZmZXI7CisgICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3VudDsKKyAgICAgICAgaW5k
ZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7CisgICAgICAgIGluZGV4
SW5mby0+Y291bnQgPSBjb3VudDsKKyAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50
IC0gMTsKKyAgICB9CisKKyAgICBpbmRleEluZm8tPmluZGV4U2l6ZSA9IHNpemVvZih1bnNpZ25l
ZCBzaG9ydCk7CisgICAgaW5kZXhJbmZvLT5taW5JbmRleCA9IDA7CisgICAgaW5kZXhJbmZvLT5v
ZmZzZXQgPSAwOworCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhE
YXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0
cnkvSW5kZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMg
dGhlIEluZGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRy
YW5zbGF0aW9uIHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZlcnMuCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0dFT01FVFJZX0lOREVYREFUQU1BTkFHRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZ
X0lOREVYREFUQU1BTkFHRVJfSF8KKworI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxjc3Rk
ZGVmPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFzcyBC
dWZmZXI7CitjbGFzcyBCdWZmZXJCYWNrRW5kOworY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVy
Oworc3RydWN0IEZvcm1hdENvbnZlcnRlcjsKKworc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGEK
K3sKKyAgICBHTHVpbnQgbWluSW5kZXg7CisgICAgR0x1aW50IG1heEluZGV4OworICAgIEdMdWlu
dCBjb3VudDsKKyAgICBHTHVpbnQgaW5kZXhTaXplOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVm
ZmVyICpidWZmZXI7CisgICAgR0xzaXplaSBvZmZzZXQ7Cit9OworCitjbGFzcyBJbmRleERhdGFN
YW5hZ2VyCit7CisgIHB1YmxpYzoKKyAgICBJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRl
eHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpOworICAgIH5JbmRleERhdGFNYW5hZ2VyKCk7CisK
KyAgICBHTGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBH
THNpemVpIGNvdW50LCBCdWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5k
aWNlcywgVHJhbnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCk7CisgICAgR0xlbnVtIHByZVJl
bmRlclZhbGlkYXRlVW5pbmRleGVkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFuc2xh
dGVkSW5kZXhEYXRhICppbmRleEluZm8pOworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3Qg
SW5kZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OworICAgIHN0ZDo6
c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7Cisg
ICAgc3RkOjpzaXplX3Qgc3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCkg
Y29uc3Q7CisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpwcmVwYXJlSW5kZXhCdWZmZXIoR0xl
bnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpOworCisgICAgQ29udGV4dCAqbUNv
bnRleHQ7CisgICAgQnVmZmVyQmFja0VuZCAqbUJhY2tlbmQ7CisKKyAgICBib29sIG1JbnRJbmRp
Y2VzU3VwcG9ydGVkOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVy
U2hvcnQ7CisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVySW50OworCisg
ICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptQ291bnRpbmdCdWZmZXI7CisgICAgR0xzaXplaSBt
Q291bnRpbmdCdWZmZXJTaXplOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptTGluZUxv
b3BCdWZmZXI7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9JTkRF
WERBVEFNQU5BR0VSX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9W
ZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
Z2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFn
ZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3Mu
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaCIKKwor
I2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCisKK25hbWVzcGFjZQoreworICAgIGVu
dW0geyBJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSA9IDEwMjQqMTAyNCB9OworfQorCituYW1l
c3BhY2UgZ2wKK3sKKworVmVydGV4RGF0YU1hbmFnZXI6OlZlcnRleERhdGFNYW5hZ2VyKENvbnRl
eHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpCisgICAgOiBtQ29udGV4dChjb250
ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1EaXJ0eUN1cnJlbnRWYWx1ZXModHJ1ZSksIG1DdXJy
ZW50VmFsdWVPZmZzZXQoMCkKK3sKKyAgICBtU3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0
ZVZlcnRleEJ1ZmZlcihJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSk7CisgICAgdHJ5CisgICAg
eworICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1
ZmZlckZvclN0cmlkZVplcm8oNCAqIHNpemVvZihmbG9hdCkgKiBNQVhfVkVSVEVYX0FUVFJJQlMp
OworICAgIH0KKyAgICBjYXRjaCAoLi4uKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1TdHJlYW1C
dWZmZXI7CisgICAgICAgIHRocm93OworICAgIH0KK30KKworVmVydGV4RGF0YU1hbmFnZXI6On5W
ZXJ0ZXhEYXRhTWFuYWdlcigpCit7CisgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgZGVs
ZXRlIG1DdXJyZW50VmFsdWVCdWZmZXI7Cit9CisKK3N0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRU
UklCUz4gVmVydGV4RGF0YU1hbmFnZXI6OmdldEFjdGl2ZUF0dHJpYnMoKSBjb25zdAoreworICAg
IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gYWN0aXZlOworCisgICAgUHJvZ3JhbSAq
cHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgZm9yIChpbnQg
YXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGFjdGl2ZVthdHRyaWJ1dGVJbmRleF0g
PSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAg
IH0KKworICAgIHJldHVybiBhY3RpdmU7Cit9CisKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6
cHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRy
YW5zbGF0ZWQpCit7CisgICAgY29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJpYnMgPSBtQ29udGV4
dC0+Z2V0VmVydGV4QXR0cmliQmxvY2soKTsKKyAgICBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVS
VEVYX0FUVFJJQlM+IGFjdGl2ZUF0dHJpYnMgPSBnZXRBY3RpdmVBdHRyaWJzKCk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgaWYgKCFhY3RpdmVBdHRyaWJzW2ldICYmIGF0dHJpYnNbaV0ubUVuYWJsZWQgJiYgYXR0cmli
c1tpXS5tQm91bmRCdWZmZXIgIT0gMCAmJiAhbUNvbnRleHQtPmdldEJ1ZmZlcihhdHRyaWJzW2ld
Lm1Cb3VuZEJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICB7CisgICAgICAgIHRyYW5zbGF0ZWRbaV0uZW5hYmxlZCA9IGFjdGl2ZUF0dHJpYnNb
aV07CisgICAgfQorCisgICAgYm9vbCB1c2VzQ3VycmVudFZhbHVlcyA9IGZhbHNlOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmICFhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAg
ICB7CisgICAgICAgICAgICB1c2VzQ3VycmVudFZhbHVlcyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhhbmRsZSB0aGUgaWRlbnRpdHktbWFw
cGVkIGF0dHJpYnV0ZXMuCisgICAgLy8gUHJvY2VzcyBhcnJheSBhdHRyaWJ1dGVzLgorCisgICAg
c3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJp
YnNbaV0gJiYgYXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVx
dWlyZWRTcGFjZSArPSBzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChyZXF1aXJlZFNwYWNlID4gbVN0cmVhbUJ1ZmZlci0+c2l6ZSgp
KQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVk
U3BhY2UsIDMgKiBtU3RyZWFtQnVmZmVyLT5zaXplKCkgLyAyKTsgLy8gMS41IHggbVN0cmVhbUJ1
ZmZlci0+c2l6ZSgpIGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdl
IGRvbid0IGhhdmUgdG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KKworICAgICAgICBUcmFuc2xhdGVk
VmVydGV4QnVmZmVyICpuZXdTdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVm
ZmVyKG5ld1NpemUpOworCisgICAgICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOworICAgICAgICBt
U3RyZWFtQnVmZmVyID0gbmV3U3RyZWFtQnVmZmVyOworICAgIH0KKworICAgIG1TdHJlYW1CdWZm
ZXItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNlKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZl
QXR0cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAg
ICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVydGVyID0gbUJhY2tlbmQtPmdldEZvcm1hdENv
bnZlcnRlcihhdHRyaWJzW2ldLm1UeXBlLCBhdHRyaWJzW2ldLm1TaXplLCBhdHRyaWJzW2ldLm1O
b3JtYWxpemVkKTsKKworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5ub25BcnJheSA9IGZhbHNl
OworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0gYXR0cmlic1tpXS5tVHlwZTsKKyAg
ICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6ZSA9IGF0dHJpYnNbaV0ubVNpemU7CisgICAgICAg
ICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQgPSBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkOwor
ICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSBmb3JtYXRDb252ZXJ0ZXIub3V0cHV0
VmVydGV4U2l6ZTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYnVmZmVyID0gbVN0cmVhbUJ1
ZmZlcjsKKworICAgICAgICAgICAgc2l6ZV90IGlucHV0U3RyaWRlID0gaW50ZXJwcmV0R2xTdHJp
ZGUoYXR0cmlic1tpXSk7CisgICAgICAgICAgICBzaXplX3QgZWxlbWVudFNpemUgPSB0eXBlU2l6
ZShhdHRyaWJzW2ldLm1UeXBlKSAqIGF0dHJpYnNbaV0ubVNpemU7CisKKyAgICAgICAgICAgIHZv
aWQgKm91dHB1dCA9IG1TdHJlYW1CdWZmZXItPm1hcChzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0s
IGNvdW50KSwgJnRyYW5zbGF0ZWRbaV0ub2Zmc2V0KTsKKworICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5wdXQ7CisgICAgICAgICAgICBpZiAoYXR0cmlic1tpXS5tQm91bmRCdWZmZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBtQ29udGV4dC0+Z2V0
QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKTsKKworICAgICAgICAgICAgICAgIHNpemVf
dCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHNpemVfdD4oYXR0cmlic1tpXS5tUG9pbnRlcik7
CisKKyAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd2UgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBz
aXplIGJlbG93LCBtYWtlIHN1cmUgaXQgY2FuIGJlIGNvbXB1dGVkIHdpdGhvdXQgaW50ZWdlciBv
dmVyZmxvdy4KKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNp
emVfdD46Om1heCgpIC0gc3RhcnQgPCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oY291bnQpCisg
ICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+Ojpt
YXgoKSAvIGlucHV0U3RyaWRlIDwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KHN0YXJ0ICsgY291
bnQgLSAxKSAvLyBpdCdzIGEgcHJlcmVxdWlzaXRlIHRoYXQgY291bnQgPj0gMSwgc28gc3RhcnQr
Y291bnQtMSA+PSAwLgorICAgICAgICAgICAgICAgICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRz
PHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBvZmZzZXQgPCBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNv
dW50IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6
OnNpemVfdD46Om1heCgpIC0gZWxlbWVudFNpemUgPCBvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChz
dGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50U2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1TdHJlYW1CdWZmZXItPnVubWFwKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0ICsgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAt
IDEpICsgZWxlbWVudFNpemUgPiBidWZmZXItPnNpemUoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1TdHJlYW1CdWZmZXItPnVubWFwKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIt
PmRhdGEoKSkgKyBvZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBhdHRyaWJzW2ldLm1Qb2ludGVyOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihpbnB1dCkgKyBpbnB1dFN0cmlkZSAqIHN0YXJ0OworCisgICAgICAgICAgICBpZiAoZm9y
bWF0Q29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAq
IGlucHV0U3RyaWRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRDb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0
LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1TdHJlYW1CdWZmZXItPnVubWFwKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
dXNlc0N1cnJlbnRWYWx1ZXMpCisgICAgeworICAgICAgICBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1
dGVzKGF0dHJpYnMsIGFjdGl2ZUF0dHJpYnMsIHRyYW5zbGF0ZWQsIGNvdW50KTsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5h
Z2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9CWVRFOiBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiBz
aXplb2YoR0xieXRlKTsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6IGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6IHJldHVybiBzaXplb2YoR0xzaG9ydCk7CisgICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1cm4g
c2l6ZW9mKEdMZml4ZWQpOworICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIHNpemVvZihHTGZs
b2F0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBzaXplb2YoR0xmbG9h
dCk7CisgICAgfQorfQorCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6aW50ZXJwcmV0
R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1
cm4gYXR0cmliLm1TdHJpZGUgPyBhdHRyaWIubVN0cmlkZSA6IHR5cGVTaXplKGF0dHJpYi5tVHlw
ZSkgKiBhdHRyaWIubVNpemU7Cit9CisKKy8vIFJvdW5kIHVwIHggKD49MCkgdG8gdGhlIG5leHQg
bXVsdGlwbGUgb2YgbXVsdGlwbGUgKD4wKS4KKy8vIDAgcm91bmRzIHVwIHRvIDAuCitzdGQ6OnNp
emVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6cm91bmRVcChzdGQ6OnNpemVfdCB4LCBzdGQ6OnNpemVf
dCBtdWx0aXBsZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoeCA+PSAwKTsKKyAgICBBU1NFUlQobXVs
dGlwbGUgPiAwKTsKKworICAgIHN0ZDo6c2l6ZV90IHJlbWFpbmRlciA9IHggJSBtdWx0aXBsZTsK
KyAgICBpZiAocmVtYWluZGVyICE9IDApCisgICAgeworICAgICAgICByZXR1cm4geCArIG11bHRp
cGxlIC0gcmVtYWluZGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
eDsKKyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVp
cmVkKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkg
Y29uc3QKK3sKKyAgICBzdGQ6OnNpemVfdCBzaXplID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZl
cnRlcihhdHRyaWIubVR5cGUsIGF0dHJpYi5tU2l6ZSwgYXR0cmliLm1Ob3JtYWxpemVkKS5vdXRw
dXRWZXJ0ZXhTaXplOworICAgIHNpemUgKj0gbWF4VmVydGV4OworCisgICAgcmV0dXJuIHJvdW5k
VXAoc2l6ZSwgNCAqIHNpemVvZihHTGZsb2F0KSk7Cit9CisKK3ZvaWQgVmVydGV4RGF0YU1hbmFn
ZXI6OnByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJp
YnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gJmFjdGl2ZUF0dHJpYnMs
IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIHN0ZDo6c2l6ZV90IGNvdW50KQorewor
ICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVzKQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3Qg
dG90YWxTaXplID0gNCAqIHNpemVvZihmbG9hdCkgKiBNQVhfVkVSVEVYX0FUVFJJQlM7CisKKyAg
ICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlci0+cmVzZXJ2ZVNwYWNlKHRvdGFsU2l6ZSk7CisKKyAg
ICAgICAgZmxvYXQqIGN1cnJlbnRWYWx1ZXMgPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1DdXJyZW50
VmFsdWVCdWZmZXItPm1hcCh0b3RhbFNpemUsICZtQ3VycmVudFZhbHVlT2Zmc2V0KSk7CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEdMX0ZMT0FUeDQgaXMg
c3VwcG9ydGVkIGJ5IHRoZSBiYWNrLWVuZC4gKEZvciBEM0Q5LCBpdCBpcyBhIG1hbmRhdG9yeSBm
b3JtYXQuKQorICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMF0gPSBhdHRyaWJzW2ldLm1D
dXJyZW50VmFsdWVbMF07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCsxXSA9IGF0dHJp
YnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzJd
ID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdOworICAgICAgICAgICAgY3VycmVudFZhbHVl
c1tpKjQrM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107CisgICAgICAgIH0KKworICAg
ICAgICBtQ3VycmVudFZhbHVlQnVmZmVyLT51bm1hcCgpOworICAgIH0KKworICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmICFhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAg
ICB7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vbkFycmF5ID0gdHJ1ZTsKKworICAgICAg
ICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyOworCisgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBHTF9GTE9BVDsKKyAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0uc2l6ZSA9IDQ7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKKyAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gbUN1cnJlbnRWYWx1ZU9mZnNldCArIDQgKiBzaXpl
b2YoZmxvYXQpICogaTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFN
YW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkv
VmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0
aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRy
YW5zbGF0aW9uIHByb2Nlc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWERB
VEFNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdF
Ul9IXworCisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUg
R0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIEJ1
ZmZlckJhY2tFbmQ7CitjbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOworc3RydWN0IFRyYW5z
bGF0ZWRBdHRyaWJ1dGU7CitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyOworc3RydWN0IFRyYW5zbGF0
ZWRJbmRleERhdGE7CisKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyCit7CisgIHB1YmxpYzoKKyAg
ICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNr
ZW5kKTsKKyAgICB+VmVydGV4RGF0YU1hbmFnZXIoKTsKKworICAgIHZvaWQgZGlydHlDdXJyZW50
VmFsdWVzKCkgeyBtRGlydHlDdXJyZW50VmFsdWVzID0gdHJ1ZTsgfQorCisgICAgR0xlbnVtIHBy
ZVJlbmRlclZhbGlkYXRlKEdMaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVk
QXR0cmlidXRlICpvdXRBdHRyaWJzKTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6Yml0c2V0PE1B
WF9WRVJURVhfQVRUUklCUz4gZ2V0QWN0aXZlQXR0cmlicygpIGNvbnN0OworCisgICAgdm9pZCBw
cm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBj
b25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFu
c2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCk7CisKKyAgICBz
dGQ6OnNpemVfdCB0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3RkOjpzaXplX3Qg
aW50ZXJwcmV0R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYikgY29uc3Q7CisK
KyAgICBzdGQ6OnNpemVfdCByb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6ZV90IG11bHRp
cGxlKSBjb25zdDsKKyAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKGNvbnN0IEF0dHJpYnV0
ZVN0YXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkgY29uc3Q7CisKKyAgICBDb250
ZXh0ICptQ29udGV4dDsKKyAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKworICAgIFRyYW5z
bGF0ZWRWZXJ0ZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXI7CisKKyAgICBib29sIG1EaXJ0eUN1cnJl
bnRWYWx1ZXM7CisgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldDsgICAgICAgICAg
ICAvLyBPZmZzZXQgd2l0aGluIG1DdXJyZW50VmFsdWVCdWZmZXIgdGhhdCB0aGUgY3VycmVudCBh
dHRyaWJ1dGUgdmFsdWVzIHdlcmUgbGFzdCBsb2FkZWQgYXQuCisgICAgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlciAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX0dFT01FVFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L2JhY2tlbmQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9i
YWNrZW5kLmg6IEFic3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyCisvLyB0aGF0IG11c3QgYmUgaW1wbGVt
ZW50ZWQgYnkgYW55IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisKKyNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK3ZvaWQgKlRyYW5zbGF0ZWRCdWZmZXI6Om1h
cChzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQoreworICAg
IEFTU0VSVChyZXF1aXJlZFNwYWNlIDw9IG1CdWZmZXJTaXplKTsKKworICAgIHJlc2VydmVTcGFj
ZShyZXF1aXJlZFNwYWNlKTsKKworICAgICpvZmZzZXQgPSBtQ3VycmVudFBvaW50OworICAgIG1D
dXJyZW50UG9pbnQgKz0gcmVxdWlyZWRTcGFjZTsKKworICAgIHJldHVybiBzdHJlYW1pbmdNYXAo
Km9mZnNldCwgcmVxdWlyZWRTcGFjZSk7Cit9CisKK3ZvaWQgVHJhbnNsYXRlZEJ1ZmZlcjo6cmVz
ZXJ2ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCit7CisgICAgaWYgKG1DdXJyZW50
UG9pbnQgKyByZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCisgICAgeworICAgICAgICByZWN5
Y2xlKCk7CisgICAgICAgIG1DdXJyZW50UG9pbnQgPSAwOworICAgIH0KK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2Jh
Y2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3Ny
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdl
b21ldHJ5L2JhY2tlbmQuaDogQWJzdHJhY3QgY2xhc3NlcyBCdWZmZXJCYWNrRW5kLCBUcmFuc2xh
dGVkVmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIKKy8vIHRoYXQgbXVzdCBi
ZSBpbXBsZW1lbnRlZCBieSBhbnkgQVBJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEFOR0xF
LgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCisjZGVmaW5l
IEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlcjsKK2NsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcjsKKworc3RydWN0IEZvcm1hdENvbnZl
cnRlcgoreworICAgIGJvb2wgaWRlbnRpdHk7CisgICAgc3RkOjpzaXplX3Qgb3V0cHV0VmVydGV4
U2l6ZTsKKyAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXpl
X3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOworfTsKKworc3RydWN0IFRyYW5z
bGF0ZWRBdHRyaWJ1dGUKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgYm9vbCBub25BcnJheTsK
KworICAgIC8vIFRoZXNlIGFyZSB0aGUgb3JpZ2luYWwgdW50cmFuc2xhdGVkIHZhbHVlcy4gKE9y
IGp1c3QgaGF2ZSBzb21lIHNvcnQgb2YgQnVmZmVyQmFja0VuZDo6VHJhbnNsYXRlZFR5cGVLZXku
KQorICAgIEdMZW51bSB0eXBlOworICAgIHN0ZDo6c2l6ZV90IHNpemU7CisgICAgYm9vbCBub3Jt
YWxpemVkOworCisgICAgc3RkOjpzaXplX3Qgb2Zmc2V0OworCisgICAgc3RkOjpzaXplX3Qgc3Ry
aWRlOyAvLyAwIG1lYW5zIG5vdCB0byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxsCisK
KyAgICBzdGQ6OnNpemVfdCBzZW1hbnRpY0luZGV4OworCisgICAgVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlciAqYnVmZmVyOworfTsKKworY2xhc3MgQnVmZmVyQmFja0VuZAoreworICBwdWJsaWM6Cisg
ICAgdmlydHVhbCB+QnVmZmVyQmFja0VuZCgpIHsgfQorCisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRJbnRJbmRpY2VzKCkgPSAwOworCisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVy
ICpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgPSAwOworICAgIHZpcnR1YWwg
VHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhz
dGQ6OnNpemVfdCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIg
KmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKSA9IDA7Cisg
ICAgdmlydHVhbCBGb3JtYXRDb252ZXJ0ZXIgZ2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBl
LCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSkgPSAwOworCisgICAgLy8gRm9yIGFu
IGlkZW50aXR5LW1hcHBhYmxlIHN0cmVhbSwgdmVyaWZ5IHRoYXQgdGhlIHN0cmlkZSBhbmQgb2Zm
c2V0IGFyZSBva2F5LgorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlw
ZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZz
ZXQpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwSW5kaWNlc1ByZURyYXco
Y29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKSA9IDA7CisgICAgdmlydHVhbCBH
TGVudW0gc2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICph
dHRyaWJ1dGVzKSA9IDA7Cit9OworCitjbGFzcyBUcmFuc2xhdGVkQnVmZmVyCit7CisgIHB1Ymxp
YzoKKyAgICBleHBsaWNpdCBUcmFuc2xhdGVkQnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogbUJ1
ZmZlclNpemUoc2l6ZSksIG1DdXJyZW50UG9pbnQoMCkgeyB9CisgICAgdmlydHVhbCB+VHJhbnNs
YXRlZEJ1ZmZlcigpIHsgfQorCisgICAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1CdWZmZXJTaXplOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgICB2b2lkIHJlc2VydmVTcGFjZShzdGQ6OnNpemVf
dCByZXF1aXJlZFNwYWNlKTsKKworICAgIHZvaWQgKm1hcChzdGQ6OnNpemVfdCByZXF1aXJlZFNw
YWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIHJlY3ljbGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpz
aXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKSA9IDA7CisKKyAgcHJpdmF0ZToKKyAgICBz
dGQ6OnNpemVfdCBtQnVmZmVyU2l6ZTsKKyAgICBzdGQ6OnNpemVfdCBtQ3VycmVudFBvaW50Owor
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRyYW5zbGF0ZWRCdWZmZXIpOworfTsKKwor
Y2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkQnVmZmVyCit7
CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHN0ZDo6c2l6
ZV90IHNpemUpIDogVHJhbnNsYXRlZEJ1ZmZlcihzaXplKSB7IH0KK307CisKK2NsYXNzIFRyYW5z
bGF0ZWRJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkQnVmZmVyCit7CisgIHB1YmxpYzoK
KyAgICBleHBsaWNpdCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBU
cmFuc2xhdGVkQnVmZmVyKHNpemUpIHsgfQorfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVT
VjJfR0VPTUVUUllfQkFDS0VORF9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJH
TEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2R4OS5oOiBEaXJlY3QzRCA5LWJhc2VkIGlt
cGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5k
IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9k
eDkuaCIKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3BhY2UKK3sKKy8v
IE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5
cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3QpCisvLyBCWVRFLW5v
cm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNl
bnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVu
dGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJ
ZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNIT1JUICAgICAgICAgICAgICAgIFNI
T1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50
aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQg
KENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9y
IEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRU
b0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50aXR5KQorCisvLyBH
TFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4g
Cit0ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07CisKK3RlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4geyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiB7IHR5cGVk
ZWYgR0x1Ynl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9S
VD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5
cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyB9OwordGVtcGxh
dGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4geyB0eXBlZGVmIEdMdWludCB0eXBlOyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GTE9BVD4geyB0eXBlZGVmIEdMZmxv
YXQgdHlwZTsgfTsKKworLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBp
dCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKK2VudW0gRDNE
VmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZMT0FULAorICAgIEQzRFZUX1NIT1JULAorICAgIEQz
RFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRfVUJZVEUsCisgICAgRDNEVlRfVUJZVEVfTk9STSwK
KyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsKKworLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNE
IHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5n
IEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5
cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0
eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNE
VG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQg
Y2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVf
Tk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
dHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNE
IHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0
IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KK3RlbXBsYXRlIDx1bnNp
Z25lZCBpbnQgdHlwZSwgaW50IHNpemU+CitzdHJ1Y3QgV2lkZW5SdWxlCit7Cit9OworCit0ZW1w
bGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAg
ICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRXZlbjxz
aXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hP
UlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAg
OiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRlblRvRm91cjxz
aXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNI
T1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKKworLy8gVmVy
dGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0
ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNvbWJp
bmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQgc2l6ZT4KK3N0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3MKK3sKK307CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY2FwZmxh
ZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgorc3RydWN0IFZlcnRleFR5cGVGbGFnc0hlbHBlcgor
eworICAgIGVudW0geyBjYXBmbGFnID0gY2FwZmxhZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9
IGRlY2xmbGFnIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9B
VDE+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQs
IDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0
ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFn
c0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAs
IEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZ
UEVfU0hPUlQ0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJO
LCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERU
Q0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVf
VVNIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
VVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0
TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGluZyBt
YXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBE
M0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxHTGVu
dW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcKK3sK
K307CisKK3RlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBG
YWxsYmFjayA9IFByZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sKKyAg
ICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNrID0g
RmFsbGJhY2sgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxH
TF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAg
ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07
ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAg
ICAgICAgLy8gSWRlbnRpdHksIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRl
bnRpdHksIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAg
ICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05P
Uk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0
LCBOb3JtYWxpemUKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Cit0
ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxP
QVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBHTCB0
eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0
aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVk
VG9GbG9hdCkuCisvLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVk
IGluIHZlcnRleGNvbnZlcnNpb24uaC4KKworLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJl
ZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2lu
Y2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0ZSA8
R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+Citz
dHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5
cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+Cit7Cit9OworCisv
LyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUg
Tm9ybWFsaXplIG9wZXJhdG9yLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENv
bnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXpl
PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKKworLy8gVXNlIGEgZnVs
bCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNo
ZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgordGVtcGxh
dGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4g
OiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBD
b252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRv
RmxvYXQ8R0x1aW50LCAxNj4geyB9OworCisvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVz
ZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVE
ZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBu
b3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPgorc3RydWN0IERlZmF1bHRW
ZXJ0ZXhWYWx1ZXNTdGFnZTIKK3sKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVm
YXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1bHRW
YWx1ZXM8VD4geyB9OwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFs
dWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKKwor
Ly8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVz
c2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6
ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFn
ZTI8VCwgbm9ybWFsaXplZD4KK3sKK307CisKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0
cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1wbGVE
ZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07CisKKy8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGgg
Q29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxs
YmFjayBjb252ZXJzaW9uLgorLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4g
b3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07
IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUg
PSBUOjpmYWxsYmFjayB9OyB9OworCisvLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIu
IEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9m
YWxsYmFjayBjb252ZXJzaW9uLAorLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRo
ZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBl
cyBmbGFnIGluIGNhcCBmbGFnCisvLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQg
Zm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCit0ZW1wbGF0ZSA8R0xlbnVt
IGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y2xhc3MgUHJlZmVyZW5jZVJ1bGU+CitzdHJ1Y3QgQ29udmVydGVyCisgICAgOiBnbDo6VmVydGV4
RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhU
eXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVy
dGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NU
eXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXpl
ZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Cit7Citwcml2YXRlOgorICAgIGVudW0g
eyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBu
b3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNk
dHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKKworcHVibGljOgorICAgIGVudW0geyBjYXBmbGFn
ID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07CisgICAgZW51
bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxh
ZyB9OworfTsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKK0R4OUJhY2tFbmQ6OkR4OUJhY2tFbmQo
Q29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZDNkZGV2aWNlKQorICAgIDogbURl
dmljZShkM2RkZXZpY2UpCit7CisgICAgbURldmljZS0+QWRkUmVmKCk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgKytpKQorICAgIHsKKyAgICAgICAgbUFw
cGxpZWRBdHRyaWJFbmFibGVkW2ldID0gdHJ1ZTsKKyAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtp
XSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7CisgICAgfQorCisgICAgbVN0cmVhbUZy
ZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJQlNdID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNF
RDsKKworICAgIEQzRENBUFM5IGNhcHMgPSBjb250ZXh0LT5nZXREZXZpY2VDYXBzKCk7CisKKyAg
ICBJRGlyZWN0M0Q5ICpkM2RPYmplY3Q7CisgICAgbURldmljZS0+R2V0RGlyZWN0M0QoJmQzZE9i
amVjdCk7CisKKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5IGlkZW50OworICAgIGQzZE9iamVj
dC0+R2V0QWRhcHRlcklkZW50aWZpZXIoY2Fwcy5BZGFwdGVyT3JkaW5hbCwgMCwgJmlkZW50KTsK
KyAgICBkM2RPYmplY3QtPlJlbGVhc2UoKTsKKworICAgIC8vIEluc3RhbmNpbmcgaXMgbWFuZGF0
b3J5IGZvciBhbGwgSFcgd2l0aCBTTTMgdmVydGV4IHNoYWRlcnMsIGJ1dCBhdm9pZCBoYXJkd2Fy
ZSB3aGVyZSBpdCBkb2VzIG5vdCB3b3JrLgorICAgIG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVy
byA9IChjYXBzLlZlcnRleFNoYWRlclZlcnNpb24gPj0gRDNEVlNfVkVSU0lPTigzLCAwKSAmJiBp
ZGVudC5WZW5kb3JJZCAhPSAweDgwODYpOworICAgIG1TdXBwb3J0SW50SW5kaWNlcyA9IChjYXBz
Lk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KSk7CisKKyAgICBjaGVja1ZlcnRleENhcHMoY2Fw
cy5EZWNsVHlwZXMpOworfQorCitEeDlCYWNrRW5kOjp+RHg5QmFja0VuZCgpCit7CisgICAgbURl
dmljZS0+UmVsZWFzZSgpOworfQorCitib29sIER4OUJhY2tFbmQ6OnN1cHBvcnRJbnRJbmRpY2Vz
KCkKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRJbnRJbmRpY2VzOworfQorCisvLyBJbml0aWFsaXNl
IGEgVHJhbnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUs
IHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHks
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVy
dEFycmF5LCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCisgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFnLCBc
CisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCksICAg
ICAgICBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxiYWNr
KSAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0eXBl
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpF
KHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1
ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwgVFJB
TlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCisgICAg
fQorCitjb25zdCBEeDlCYWNrRW5kOjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIER4OUJhY2tFbmQ6
Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0g
PSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZS0xXQoreworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURf
U0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GSVhFRCksCisgICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX0ZMT0FUKQorfTsKKwordm9pZCBEeDlCYWNrRW5kOjpjaGVja1Zl
cnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFn
ID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBz
RmxhZykgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1BdHRy
aWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVm
ZXJyZWRDb252ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtQXR0cmlidXRlVHlwZXNb
aV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJz
aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlVmVydGV4QnVm
ZmVyKHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXIo
bURldmljZSwgc2l6ZSk7Cit9CisKK1RyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKkR4OUJhY2tFbmQ6
OmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBpZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBEeDlWZXJ0ZXhCdWZmZXIobURldmljZSwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91
bmQobURldmljZSwgc2l6ZSk7CisgICAgfQorfQorCitUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKkR4
OUJhY2tFbmQ6OmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBl
KQoreworICAgIHJldHVybiBuZXcgRHg5SW5kZXhCdWZmZXIobURldmljZSwgc2l6ZSwgdHlwZSk7
Cit9CisKKy8vIFRoaXMgaXMgdXNlZCB0byBpbmRleCBtQXR0cmlidXRlVHlwZXMgYW5kIG1Qb3Nz
aWJsZVRyYW5zbGF0aW9ucy4KK3Vuc2lnbmVkIGludCBEeDlCYWNrRW5kOjp0eXBlSW5kZXgoR0xl
bnVtIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfQllURTogcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAx
OworICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOiByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OworICAgICAg
Y2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IHJldHVybiA1OworICAgIH0KK30KKworRm9ybWF0Q29udmVydGVyIER4OUJhY2tFbmQ6OmdldEZv
cm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxp
emUpCit7CisgICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgodHlwZSldW25vcm1h
bGl6ZV1bc2l6ZS0xXS5mb3JtYXRDb252ZXJ0ZXI7Cit9CisKK0QzRERFQ0xUWVBFIER4OUJhY2tF
bmQ6Om1hcEF0dHJpYnV0ZVR5cGUoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wg
bm9ybWFsaXplKSBjb25zdAoreworICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4
KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZDNkRGVjbFR5cGU7Cit9CisKK2Jvb2wgRHg5QmFj
a0VuZDo6dmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6
c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25zdAoreworICAgIC8vIEQzRDkg
cmVxdWlyZXMgdGhlIHN0cmVhbSBvZmZzZXQgYW5kIHN0cmlkZSB0byBiZSBhIG11bHRpcGxlIG9m
IERXT1JELgorICAgIHJldHVybiAoc3RyaWRlICUgc2l6ZW9mKERXT1JEKSA9PSAwICYmIG9mZnNl
dCAlIHNpemVvZihEV09SRCkgPT0gMCk7Cit9CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKkR4
OUJhY2tFbmQ6OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKnZiKSBjb25zdAor
eworICAgIHJldHVybiB2YiA/IHN0YXRpY19jYXN0PER4OVZlcnRleEJ1ZmZlcio+KHZiKS0+Z2V0
QnVmZmVyKCkgOiBOVUxMOworfQorCitJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6
OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGliID8gc3RhdGljX2Nhc3Q8RHg5SW5kZXhCdWZmZXIqPihpYiktPmdldEJ1ZmZlcigpIDog
TlVMTDsKK30KKworR0xlbnVtIER4OUJhY2tFbmQ6OnNldHVwSW5kaWNlc1ByZURyYXcoY29uc3Qg
VHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKQoreworICAgIG1EZXZpY2UtPlNldEluZGlj
ZXMoZ2V0RHhCdWZmZXIoaW5kZXhJbmZvLmJ1ZmZlcikpOworICAgIHJldHVybiBHTF9OT19FUlJP
UjsKK30KKworR0xlbnVtIER4OUJhY2tFbmQ6OnNldHVwQXR0cmlidXRlc1ByZURyYXcoY29uc3Qg
VHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBIUkVTVUxUIGhyOworCisg
ICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTKzFdOworCisg
ICAgRDNEVkVSVEVYRUxFTUVOVDkgKm5leHRFbGVtZW50ID0gJmVsZW1lbnRzWzBdOworCisgICAg
Zm9yIChCWVRFIGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBu
ZXh0RWxlbWVudC0+U3RyZWFtID0gaSArIDE7ICAgIC8vIFN0cmVhbSAwIGlzIHNraXBwZWQgYmVj
YXVzZSBEM0QgZG9lcyBub3QgcGVybWl0IGl0IHRvIGJlIGFuIGluc3RhbmNlZCBzdHJlYW0uCisg
ICAgICAgICAgICBuZXh0RWxlbWVudC0+T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIG5leHRFbGVt
ZW50LT5UeXBlID0gc3RhdGljX2Nhc3Q8QllURT4obWFwQXR0cmlidXRlVHlwZShhdHRyaWJ1dGVz
W2ldLnR5cGUsIGF0dHJpYnV0ZXNbaV0uc2l6ZSwgYXR0cmlidXRlc1tpXS5ub3JtYWxpemVkKSk7
CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxU
OworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JE
OworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdlSW5kZXggPSBhdHRyaWJ1dGVzW2ldLnNl
bWFudGljSW5kZXg7CisgICAgICAgICAgICBuZXh0RWxlbWVudCsrOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5E
KCk7CisgICAgKm5leHRFbGVtZW50ID0gZW5kOworCisgICAgSURpcmVjdDNEVmVydGV4RGVjbGFy
YXRpb245KiB2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICBociA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmdmVydGV4RGVjbGFyYXRpb24pOworICAgIG1EZXZpY2Ut
PlNldFZlcnRleERlY2xhcmF0aW9uKHZlcnRleERlY2xhcmF0aW9uKTsKKyAgICB2ZXJ0ZXhEZWNs
YXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5V
TEwsIDAsIDApOworCisgICAgYm9vbCBub25BcnJheUF0dHJpYnV0ZXMgPSBmYWxzZTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgewor
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJheSkgbm9uQXJyYXlBdHRyaWJ1dGVzID0gdHJ1ZTsK
KworICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKGkgKyAxLCBnZXREeEJ1ZmZl
cihhdHRyaWJ1dGVzW2ldLmJ1ZmZlciksIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSk7CisgICAgICAgICAgICBpZiAoIW1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJsZWRbaV0g
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoaSArIDEsIDAsIDAs
IDApOworICAgICAgICAgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1Vc2VJbnN0YW5jaW5n
Rm9yU3RyaWRlWmVybykKKyAgICB7CisgICAgICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIHN0cmlk
ZSB6ZXJvIGF0dHJpYnV0ZXMsIHdlIGRpc2FibGUgaW5zdGFuY2luZyBzbyB0aGF0IERyYXdQcmlt
aXRpdmUgY2FuIGJlIHVzZWQuCisKKyAgICAgICAgaWYgKG5vbkFycmF5QXR0cmlidXRlcykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbMF0gIT0gU1RSRUFNX0ZS
RVFVRU5DWV9JTkRFWEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TdHJlYW1G
cmVxdWVuY3lbMF0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQ7CisgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERB
VEEgfCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubm9uQXJyYXkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5W2kr
MV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpKzFdID0g
U1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpICsgMSwgRDNEU1RSRUFNU09VUkNFX0lOU1RB
TkNFREFUQSB8IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbaSsxXSAhPSBTVFJF
QU1fRlJFUVVFTkNZX0lOREVYRUQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpKzFdID0gU1RSRUFNX0ZSRVFV
RU5DWV9JTkRFWEVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoaSArIDEsIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlMgKyAxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TdHJlYW1G
cmVxdWVuY3lbaV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbaV0gPSBTVFJFQU1f
RlJFUVVFTkNZX1VOSU5TVEFOQ0VEOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hv
dWxkIG5vdCBiZSBuZWVkZWQsIGJ1dCBvdGhlcndpc2UgdGhlcmUgaXMgYSBidWdneSBkcml2ZXIg
dGhhdCB3aWxsIGxlYXZlIGluc3RhbmNpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxl
ZCBmb3IgdGhlIGZpcnN0IGRyYXcgYWZ0ZXIgaXQgaGFzIGJlZW4gdHVybmVkIG9mZi4KKyAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCBEM0RTVFJFQU1T
T1VSQ0VfSU5ERVhFRERBVEEgfCAxKTsKKworICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKworRHg5
QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKQorICAgIDogVHJhbnNsYXRlZFZlcnRleEJ1ZmZl
cihzaXplKQoreworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihz
aXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBEM0RQT09MX0RF
RkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKyAgICB7
CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBv
ZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKKyAg
ICB9Cit9CisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6RHg5VmVydGV4QnVmZmVyKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFn
cykKKyAgICA6IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBIUkVTVUxUIGhy
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgdXNhZ2VGbGFncywgMCwgRDNEUE9P
TF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhyICE9IFNfT0spCisg
ICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZm
ZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7
CisgICAgfQorfQorCisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6fkR4OVZlcnRleEJ1
ZmZlcigpCit7CisgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RW
ZXJ0ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6
OkR4OVZlcnRleEJ1ZmZlcjo6bWFwKCkKK3sKKyAgICB2b2lkICptYXBQdHI7CisKKyAgICBtVmVy
dGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDApOworCisgICAgcmV0dXJuIG1hcFB0cjsK
K30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBt
VmVydGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhC
dWZmZXI6OnJlY3ljbGUoKQoreworICAgIHZvaWQgKmR1bW15OworICAgIG1WZXJ0ZXhCdWZmZXIt
PkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOworfQorCit2b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OnN0cmVh
bWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgdm9p
ZCAqbWFwUHRyOworCisgICAgbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQ
dHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKworLy8g
Tm9ybWFsbHkgVkJzIGFyZSBjcmVhdGVkIHdpdGggRDNEVVNBR0VfV1JJVEVPTkxZIHwgRDNEVVNB
R0VfRFlOQU1JQywgYnV0IHNvbWUgaGFyZHdhcmUgJiBkcml2ZXJzIHdvbid0IHJlbmRlcgorLy8g
aWYgYW55IHN0cmlkZS16ZXJvIHN0cmVhbXMgYXJlIGluIEQzRFVTQUdFX0RZTkFNSUMgVkJzLCBz
byB0aGlzIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBzdWNoIFZCcyB3aXRoIG9ubHkgRDNEVVNB
R0VfV1JJVEVPTkxZIHNldC4KKy8vIEQzRExPQ0tfRElTQ0FSRCBhbmQgRDNETE9DS19OT09WRVJX
UklURSBhcmUgb25seSBhdmFpbGFibGUgb24gRDNEVVNBR0VfRFlOQU1JQyBWQnMsIHNvIHdlIG92
ZXJyaWRlIG1ldGhvZHMgdG8gYXZvaWQgdXNpbmcgdGhlc2UgZmxhZ3MuCitEeDlCYWNrRW5kOjpE
eDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0
cmlkZVdvcmthcm91bmQoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXpl
KQorICAgIDogRHg5VmVydGV4QnVmZmVyKGRldmljZSwgc2l6ZSwgRDNEVVNBR0VfV1JJVEVPTkxZ
KQoreworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3Jr
YXJvdW5kOjpyZWN5Y2xlKCkKK3sKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVm
ZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQs
IHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqbWFwUHRyOworCisgICAgZ2V0QnVmZmVy
KCktPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCAwKTsKKworICAgIHJldHVybiBtYXBQdHI7
Cit9CisKK0R4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpEeDlJbmRleEJ1ZmZlcihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKQorICAgIDog
VHJhbnNsYXRlZEluZGV4QnVmZmVyKHNpemUpCit7CisgICAgQVNTRVJUKHR5cGUgPT0gR0xfVU5T
SUdORURfU0hPUlQgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisgICAgRDNERk9STUFU
IGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKSA/IEQzREZNVF9JTkRFWDE2IDog
RDNERk1UX0lOREVYMzI7CisKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVJbmRleEJ1
ZmZlcihzaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCBmb3JtYXQs
IEQzRFBPT0xfREVGQVVMVCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhyICE9IFNf
T0spCisgICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhbiBpbmRl
eCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6YmFkX2Fs
bG9jKCk7CisgICAgfQorfQorCitEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6fkR4OUluZGV4
QnVmZmVyKCkKK3sKKyAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKK30KKworSURpcmVjdDNE
SW5kZXhCdWZmZXI5KkR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6OkR4
OUluZGV4QnVmZmVyOjptYXAoKQoreworICAgIHZvaWQgKm1hcFB0cjsKKworICAgIG1JbmRleEJ1
ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRyLCAwKTsKKworICAgIHJldHVybiBtYXBQdHI7Cit9CisK
K3ZvaWQgRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBtSW5kZXhC
dWZmZXItPlVubG9jaygpOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpy
ZWN5Y2xlKCkKK3sKKyAgICB2b2lkICpkdW1teTsKKyAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwg
MSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgIG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7
Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpzdHJlYW1pbmdNYXAoc3Rk
OjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHZvaWQgKm1hcFB0cjsK
KworICAgIG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIEQzRExPQ0tf
Tk9PVkVSV1JJVEUpOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvc3JjL2xpYkdMRVN2
Mi9nZW9tZXRyeS9keDkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2R4OS5oOiBEaXJl
Y3QzRCA5LWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRW
ZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KKworI2lmbmRlZiBMSUJHTEVT
VjJfR0VPTUVUUllfRFg5X0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8KKwor
I2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgRHg5QmFja0VuZCA6IHB1YmxpYyBCdWZmZXJCYWNrRW5kCit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkg
KmQzZGRldmljZSk7CisgICAgfkR4OUJhY2tFbmQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0SW50SW5kaWNlcygpOworCisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgdmlydHVhbCBUcmFuc2xh
dGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6
ZV90IHNpemUpOworICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJbmRl
eEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSk7CisgICAgdmlydHVhbCBGb3Jt
YXRDb252ZXJ0ZXIgZ2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBz
aXplLCBib29sIG5vcm1hbGl6ZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0o
R0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpz
aXplX3Qgb2Zmc2V0KSBjb25zdDsKKworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwSW5kaWNlc1By
ZURyYXcoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKKyAgICB2aXJ0dWFs
IEdMZW51bSBzZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
KmF0dHJpYnV0ZXMpOworCisgIHByaXZhdGU6CisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmlj
ZTsKKworICAgIGJvb2wgbVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvOworICAgIGJvb2wgbVN1
cHBvcnRJbnRJbmRpY2VzOworCisgICAgYm9vbCBtQXBwbGllZEF0dHJpYkVuYWJsZWRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKworICAgIGVudW0gU3RyZWFtRnJlcXVlbmN5CisgICAgeworICAgICAg
ICBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEID0gMCwKKyAgICAgICAgU1RSRUFNX0ZSRVFV
RU5DWV9JTkRFWEVELAorICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRAorICAgIH07
CisKKyAgICBTdHJlYW1GcmVxdWVuY3kgbVN0cmVhbUZyZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJ
QlMrMV07CisKKyAgICBzdHJ1Y3QgVHJhbnNsYXRpb25JbmZvCisgICAgeworICAgICAgICBGb3Jt
YXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVydGVyOworICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNs
VHlwZTsKKyAgICB9OworCisgICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0g
NiB9OworCisgICAgVHJhbnNsYXRpb25JbmZvIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJ
bmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCisKKyAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNj
cmlwdGlvbgorICAgIHsKKyAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7CisgICAgICAgIFRyYW5zbGF0
aW9uSW5mbyBwcmVmZXJyZWRDb252ZXJzaW9uOworICAgICAgICBUcmFuc2xhdGlvbkluZm8gZmFs
bGJhY2tDb252ZXJzaW9uOworICAgIH07CisKKyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8g
Z2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkRl
c2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3Jt
YWxpemVkXVtzaXplLTFdCisKKyAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlw
ZXMpOworCisgICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3Q7CisK
KyAgICBjbGFzcyBEeDlWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZFZlcnRleEJ1ZmZl
cgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgRHg5VmVydGV4QnVmZmVyKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgICAgIHZpcnR1YWwgfkR4
OVZlcnRleEJ1ZmZlcigpOworCisgICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1
ZmZlcigpIGNvbnN0OworCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIER4OVZlcnRleEJ1ZmZl
cihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdl
RmxhZ3MpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCAqbWFwKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCB1bm1hcCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXpl
X3Qgc2l6ZSk7CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZl
cjkgKm1WZXJ0ZXhCdWZmZXI7CisgICAgfTsKKworICAgIGNsYXNzIER4OVZlcnRleEJ1ZmZlclpl
cm9TdHJpZGVXb3JrYXJvdW5kIDogcHVibGljIER4OVZlcnRleEJ1ZmZlcgorICAgIHsKKyAgICAg
IHB1YmxpYzoKKyAgICAgICAgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKKworICAgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOwor
ICAgIH07CisKKyAgICBjbGFzcyBEeDlJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIER4OUluZGV4QnVmZmVyKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpOwor
ICAgICAgICB2aXJ0dWFsIH5EeDlJbmRleEJ1ZmZlcigpOworCisgICAgICAgIElEaXJlY3QzRElu
ZGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7CisKKyAgICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgdmlydHVhbCB2b2lkICptYXAoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICpz
dHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKKworICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7
CisgICAgfTsKKworICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldER4QnVmZmVyKFRyYW5z
bGF0ZWRWZXJ0ZXhCdWZmZXIgKnZiKSBjb25zdDsKKyAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkg
KmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0OworCisgICAgRDNE
REVDTFRZUEUgbWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
Ym9vbCBub3JtYWxpemVkKSBjb25zdDsKK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1Yy
X0dFT01FVFJZX0RYOV9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVy
dGV4Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMDggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5
L3ZlcnRleGNvbnZlcnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNz
ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZAorLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmpl
Y3RzIHVzZWQgYnkgdGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KKworI2lmbmRlZiBMSUJH
TEVTVjJfR0VPTUVUUllfVkVSVEVYQ09OVkVSU0lPTl9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VP
TUVUUllfVkVSVEVYQ09OVkVSU0lPTl9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRl
IDxsaW1pdHM+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIiAvLyBEZWZpbmVzIElu
ZGV4CisKK25hbWVzcGFjZSBnbAoreworCisvLyBDb252ZXJzaW9uIHR5cGVzOgorLy8gc3RhdGlj
IGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zv
cm0sIGZhbHNlIG90aGVyd2lzZQorLy8gc3RhdGljIFUgY29udmVydChUKTogY29udmVydCBhIHNp
bmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlCisvLyB0
eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNp
b24KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgSWRlbnRpdHkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsK
KworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHg7Cisg
ICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+CitzdHJ1Y3QgQ2Fz
dAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBl
ZGVmIFRvVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBDYXN0PFQsIFQ+Cit7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaWRlbnRpdHkgPSB0cnVlOworCisgICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7CisKKyAg
ICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih4KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxp
emUKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOworCisgICAgdHlw
ZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQor
ICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworICAgICAg
ICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOworCisgICAgICAgIGlmIChOTDo6aXNf
c2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDgg
Y29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCisgICAgICAgICAgICAvLyBzdGF0aWMgY29uc3Qg
ZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBz
dG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhhdC4KKyAgICAg
ICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpKzEpOworICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNvcjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmL05MOjpt
YXgoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwg
c3RkOjpzaXplX3QgU2NhbGVCaXRzPgorc3RydWN0IEZpeGVkVG9GbG9hdAoreworICAgIHN0YXRp
YyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1
dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQorICAgIHsKKyAg
ICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rh
dGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOworICAgIH0KK307CisKKy8vIFdpZGVuIHR5cGVz
OgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBj
b21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNpb24KKworLy8g
RmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgordGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CitzdHJ1Y3QgTm9XaWRlbgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFs
V2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsK
K307CisKKy8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBw
b3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwordGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0V2ZW4KK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXpl
X3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxX
aWR0aCA9IE4rKE4mMSk7Cit9OworCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBX
aWRlblRvRm91cgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGgg
PSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gNDsKK307CisK
Ky8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4KK3RlbXBsYXRl
IDxjbGFzcyBUPgorc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKK3sKKyAgICBzdGF0aWMgVCB6
ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAgICBzdGF0aWMgVCBvbmUoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQorfTsKKworLy8gQnV0IG5vcm1hbGlzZWQgdHlw
ZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRo
ZSBtYXggdmFsdWUuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBOb3JtYWxpemVkRGVmYXVs
dFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigw
KTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpOyB9Cit9OworCisvLyBDb252ZXJ0ZXI6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVu
dGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRl
bmluZykKKy8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBi
eXRlcyBwZXIgb3V0cHV0IHZlcnRleAorLy8gc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0
IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6
IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQg
b3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgorCit0ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBX
aWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBs
ZURlZmF1bHRWYWx1ZXM8SW5UPiA+CitzdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRlcgoreworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5cGU7CisgICAg
dHlwZWRlZiBJblQgSW5wdXRUeXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkg
PSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBD
b252ZXJ0ZXI6OmlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNp
emUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7CisKKyAgICBz
dGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCisgICAgeworICAgICAgICBm
b3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7
CisKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91
dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNv
bXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVl
UnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBz
dGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAg
ICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+
KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7CisKKyAgICAgICAgICAgIG91dCArPSBXaWRlblJ1
bGU6OmZpbmFsV2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb252
ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qg
biwgdm9pZCAqb3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNf
Y2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0
VHlwZSo+KG91dCkpOworICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIEFkdmFuY2UgdGhlIGdp
dmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRz
KS4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVz
KFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0
cikgKyBudW1CeXRlcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29weUNvbXBvbmVudChP
dXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRp
bmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCisgICAgeworICAgICAgICBpZiAoV2lkZW5S
dWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQo
aW5bZWxlbWVudGluZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAg
IC8vIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9OX0hfCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5t
bQkocmV2aXNpb24gNjM1OTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0NvbnRleHQzRE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5o
IgorI2luY2x1ZGUgIkFOR0xFV2Via2l0QnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2FudmFzT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgpAQCAtNjIzLDcgKzYyNCwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hh
ZGVyKFdlCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOwotICAgIDo6Z2xDb21waWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkp
OworCisJLy8gOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7CisJ
Ly8gc2hhZGVyLT5zZXRWYWxpZGF0ZWQodHJ1ZSk7CisKKwlpZiAoQU5HTEVXcmFwcGVyOjp2YWxp
ZGF0ZVNoYWRlcihzaGFkZXIsZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSkp
IHsKKwkJLy9TaGFkZXIgdmFsaWRhdGVkLCBzbyB1cGRhdGUgaXQgd2l0aCB0aGUgdHJhbnNsYXRl
ZCBkZXNrdG9wIEdMU0wgc291cmNlLiAKKwkJc2hhZGVyU291cmNlKHNoYWRlciwgc2hhZGVyLT5n
ZXRUcmFuc2xhdGVkU291cmNlKCkpOworCQkKKwkJOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkg
c2hhZGVyLT5vYmplY3QoKSk7CisJCXNoYWRlci0+c2V0VmFsaWRhdGVkKHRydWUpOworCX0KKwll
bHNlIHsKKwkJc2hhZGVyLT5zZXRWYWxpZGF0ZWQoZmFsc2UpOworCX0KIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
bGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC0x
MDA4LDcgKzEwMjIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoV2Vi
CiAgICAgY29uc3QgY2hhciogcyA9IGNzLmRhdGEoKTsKICAgICAKICAgICBpbnQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLT5v
YmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkg
c2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOwkKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWdu
ZWQgbG9uZyBtYXNrKQpAQCAtMTM1OCw2ICsxMzcyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFdlYkcKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOworCisK
KwlwcmludGYoIlxuXG4gaW4gZ2V0U2hhZGVySW5mb0xvZywgdmFsaWRhdGlvbjogJWkgXG5cbiAi
LHNoYWRlci0+cGFzc2VkVmFsaWRhdGlvbigpKTsKKworCWlmICghc2hhZGVyLT5wYXNzZWRWYWxp
ZGF0aW9uKCkpCisJCXJldHVybiBzaGFkZXItPmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwogICAg
IAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBHTGludCBsZW5ndGg7CkBA
IC0xMzY3LDcgKzEzODcsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9MCiAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKICAg
ICBpZiAoIWluZm8pCiAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgCisKICAgICA6OmdsR2V0
U2hhZGVySW5mb0xvZygoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBp
bmZvKTsKICAgICBTdHJpbmcgcyhpbmZvKTsKICAgICBmYXN0RnJlZShpbmZvKTsK
</data>
<flag name="review"
          id="50393"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62235</attachid>
            <date>2010-07-21 14:49:01 -0700</date>
            <delta_ts>2010-07-21 15:51:06 -0700</delta_ts>
            <desc>Changes to WebCore.xcodeproj for ANGLE</desc>
            <filename>angle_xcodeproj</filename>
            <type>text/plain</type>
            <size>13419</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYzNTk0KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzgyLDcg
KzQ3ODIsNiBAQAogCQlCQ0UwMTM5QTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTAxMzk4
MEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuY3BwICovOyB9OwogCQlCQ0UwMTM5QjBD
MEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHls
ZVNoZWV0LmggKi87IH07CiAJCUJDRTA0QzhBMERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTA0Qzg5
MERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0b3IuaCAqLzsgfTsKLQkJQkNFMDRDOTQwREFGRjkw
MjAwN0EwRjQxIC8qIEdlbmVyYXRlZEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTA0QzkzMERBRkY5MDIwMDdBMEY0MSAvKiBHZW5lcmF0
ZWRJbWFnZS5jcHAgKi87IH07CiAJCUJDRTFDNDFCMEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMUM0
MTkwRDk4Mjk4MDAwM0IwMkYyIC8qIExvY2F0aW9uLmggKi87IH07CiAJCUJDRTFDNDFDMEQ5ODI5
ODEwMDNCMDJGMiAvKiBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0UxQzQxQTBEOTgyOTgwMDAzQjAyRjIgLyogTG9jYXRpb24uY3Bw
ICovOyB9OwogCQlCQ0UxQzQzQjBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UxQzQzOTBEOTgz
MEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5jcHAgKi87IH07CkBAIC01MjAzLDYgKzUyMDIsMTEg
QEAKIAkJRkFCRTcyRkUxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTE5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQkU3MkZDMTA1OUMyMTEw
MEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgKi87IH07CiAJCUZBQzEyQ0M0MTEyMERBNjkwMERB
Q0MzNiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkFDMTJDQzIxMTIwREE2OTAwREFDQzM2IC8qIFJlbmRlck1h
dGhNTFN1YlN1cC5jcHAgKi87IH07CiAJCUZBQzEyQ0M1MTEyMERBNjkwMERBQ0MzNiAvKiBSZW5k
ZXJNYXRoTUxTdWJTdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZBQzEyQ0MzMTEyMERBNjkwMERBQ0MzNiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuaCAq
LzsgfTsKKwkJRkIzQzRFMzExMUY3Njg4RTAwODFGNUJBIC8qIEFOR0xFV2Via2l0QnJpZGdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCM0M0RDk3
MTFGNzY4OEUwMDgxRjVCQSAvKiBBTkdMRVdlYmtpdEJyaWRnZS5jcHAgKi87IH07CisJCUZCM0M0
RTMyMTFGNzY4OEUwMDgxRjVCQSAvKiBBTkdMRVdlYmtpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzQzREOTgxMUY3Njg4RTAwODFGNUJB
IC8qIEFOR0xFV2Via2l0QnJpZGdlLmggKi87IH07CisJCUZCM0M0RUI5MTFGNzY4OEYwMDgxRjVC
QSAvKiBSZXNvdXJjZUxpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzQzRFMkUxMUY3Njg4RTAwODFGNUJBIC8qIFJlc291cmNlTGltaXRzLmgg
Ki87IH07CisJCUZCM0M0RUJBMTFGNzY4OEYwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjNDNEUyRjExRjc2ODhF
MDA4MUY1QkEgLyogU2hhZGVyTGFuZy5oICovOyB9OworCQlGQjgxQjFCMTExRUNGQjkxMDA4NUZD
NTEgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkI4MUIxQjAxMUVDRkI5MTAwODVGQzUxIC8qIEdlbmVyYXRlZEltYWdl
LmNwcCAqLzsgfTsKIAkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4NTBG
Njc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlND
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTZGRDQ4QjBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRlcy5jcHAgKi87IH07
CiAJCUZFNkZENDhFMEY2NzZFOTMwMDA5Mjg3MyAvKiBKU0Nvb3JkaW5hdGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4QzBGNjc2RTkzMDAw
OTI4NzMgLyogSlNDb29yZGluYXRlcy5oICovOyB9OwpAQCAtMTA0MTUsNyArMTA0MTksNiBAQAog
CQlCQ0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNo
ZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0eWxlU2hlZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFMDRDODkwREFGRjdBMDAwN0EwRjQxIC8q
IEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFMDRDOTMwREFGRjkwMjAwN0EwRjQx
IC8qIEdlbmVyYXRlZEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdlbmVyYXRlZEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNF
MUM0MTkwRDk4Mjk4MDAwM0IwMkYyIC8qIExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
RTFDNDFBMEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRTFDNDIyMEQ5ODI5RjIwMDNCMDJGMiAvKiBMb2NhdGlvbi5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA5MDksNiArMTA5MTIsMTEgQEAKIAkJRkFCRTcyRkMxMDU5QzIxMTAwRDk5OUREIC8qIE1h
dGhNTE5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhN
TE5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkFDMTJDQzIxMTIwREE2
OTAwREFDQzM2IC8qIFJlbmRlck1hdGhNTFN1YlN1cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxTdWJTdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQUMxMkNDMzExMjBEQTY5MDBEQUNDMzYgLyogUmVuZGVyTWF0aE1MU3Vi
U3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFN1YlN1
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjNDNEQ5NzExRjc2ODhFMDA4MUY1
QkEgLyogQU5HTEVXZWJraXRCcmlkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQU5HTEVXZWJraXRCcmlkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjNDNEQ5ODExRjc2ODhFMDA4MUY1QkEgLyogQU5HTEVXZWJraXRCcmlkZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQU5HTEVXZWJraXRCcmlkZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzQzRFMkUxMUY3Njg4RTAwODFGNUJBIC8qIFJlc291
cmNlTGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTGlt
aXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCM0M0RTJGMTFGNzY4OEUwMDgx
RjVCQSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
YWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkI4MUIxQjAxMUVDRkI5
MTAwODVGQzUxIC8qIEdlbmVyYXRlZEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdlbmVyYXRlZEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU0OUVGOTcwREM1MTQ2MjAwNDI2NkUxIC8qIERhc2hib2FyZFN1cHBvcnRDU1NQcm9w
ZXJ0eU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERhc2hib2FyZFN1cHBvcnRDU1NQ
cm9wZXJ0eU5hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTZGRDQ4NTBG
Njc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29vcmRpbmF0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2
RkQ0ODYwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDb29yZGluYXRlcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTM4OSw2ICsxNTM5Nyw4IEBACiAJCUIyQTAxNTkxMEFGNkNENTMwMDZCQ0UwRSAvKiBncmFwaGlj
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzQzRE
OTUxMUY3Njg4RTAwODFGNUJBIC8qIGFuZ2xlICovLAorCQkJCUZCODFCMUIwMTFFQ0ZCOTEwMDg1
RkM1MSAvKiBHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MjkwQjA1MzgxNDAwMkNF
NjRGIC8qIGNnICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICov
LAogCQkJCUIyNzUzNTQ5MEIwNTM4MTQwMDJDRTY0RiAvKiBtYWMgKi8sCkBAIC0xNTQyNyw3ICsx
NTQzNyw2IEBACiAJCQkJQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5o
ICovLAogCQkJCTM3MjAyMTk4MTA2MjEzQzYwMEYyNUM0QiAvKiBGb250U21vb3RoaW5nTW9kZS5o
ICovLAogCQkJCTM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oICov
LAotCQkJCUJDRTA0QzkzMERBRkY5MDIwMDdBMEY0MSAvKiBHZW5lcmF0ZWRJbWFnZS5jcHAgKi8s
CiAJCQkJQkMyM0YwREEwREFGRjRBNDAwOUZEQzkxIC8qIEdlbmVyYXRlZEltYWdlLmggKi8sCiAJ
CQkJQkNFMDRDODkwREFGRjdBMDAwN0EwRjQxIC8qIEdlbmVyYXRvci5oICovLAogCQkJCUIyQzNE
QTVCMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oICovLApAQCAtMTcxNjAsNiArMTcx
NjksMTcgQEAKIAkJCXBhdGggPSAuLi9tYXRobWw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQlGQjNDNEQ5NTExRjc2ODhFMDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCM0M0RDk3MTFGNzY4OEUwMDgx
RjVCQSAvKiBBTkdMRVdlYmtpdEJyaWRnZS5jcHAgKi8sCisJCQkJRkIzQzREOTgxMUY3Njg4RTAw
ODFGNUJBIC8qIEFOR0xFV2Via2l0QnJpZGdlLmggKi8sCisJCQkJRkIzQzRFMkUxMUY3Njg4RTAw
ODFGNUJBIC8qIFJlc291cmNlTGltaXRzLmggKi8sCisJCQkJRkIzQzRFMkYxMUY3Njg4RTAwODFG
NUJBIC8qIFNoYWRlckxhbmcuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gYW5nbGU7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTk4MTEsNiArMTk4
MzEsOSBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9v
bU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZCM0M0RTMyMTFGNzY4OEUwMDgxRjVCQSAvKiBB
TkdMRVdlYmtpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkIzQzRFQjkxMUY3Njg4RjAw
ODFGNUJBIC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGQjNDNEVCQTEx
Rjc2ODhGMDA4MUY1QkEgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xOTgzOCw2
ICsxOTg2MSw3IEBACiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gMTQ5QzI4MzkwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJXZWJDb3JlIiAqLzsKIAkJCWJ1aWxkUGhhc2Vz
ID0gKAorCQkJCUZCM0M0Rjg3MTFGNzc3NjIwMDgxRjVCQSAvKiBCdWlsZCBBTkdMRSAqLywKIAkJ
CQk1RDJGN0RBMDBDNjg3OUM2MDBCNUI3MkIgLyogVXBkYXRlIEluZm8ucGxpc3Qgd2l0aCB2ZXJz
aW9uIGluZm9ybWF0aW9uICovLAogCQkJCTkzRjE5OEE2MDgyNDVFNTkwMDFFOUFCQyAvKiBIZWFk
ZXJzICovLAogCQkJCTFDMTFDQ0I0MEFBNjA5MzcwMERBREIyMCAvKiBDb3B5IEdlbmVyYXRlZCBI
ZWFkZXJzICovLApAQCAtMjAwOTIsNiArMjAxMTYsMjAgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4v
c2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJta2RpciAtcCBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlXCJcbmNkIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmVcIlxuXG4vYmluL2xuIC1zZmggXCIke1NSQ1JPT1R9XCIgV2ViQ29y
ZVxuZXhwb3J0IFdlYkNvcmU9XCJXZWJDb3JlXCJcblxuaWYgWyBcIiR7QUNUSU9OfVwiID0gXCJi
dWlsZFwiIC1vIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxcIiAtbyBcIiR7QUNUSU9OfVwiID0g
XCJpbnN0YWxsaGRyc1wiIF07IHRoZW5cbiAgICBtYWtlIC1mIFwiV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlXCIgLWogYC91c3Ivc2Jpbi9zeXNjdGwgLW4gaHcuYXZhaWxjcHVgXG5maVxuIjsK
IAkJfTsKKwkJRkIzQzRGODcxMUY3Nzc2MjAwODFGNUJBIC8qIEJ1aWxkIEFOR0xFICovID0gewor
CQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkp
OworCQkJbmFtZSA9ICJCdWlsZCBBTkdMRSI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCSk7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9
IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJ4Y29kZWJ1aWxkIC1wcm9qZWN0IHBsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovIjsKKwkJfTsKIC8qIEVu
ZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0yMDcxMiw3ICsyMDc1MCw2IEBACiAJCQkJNTFF
NEFEQjYwQzQyQjRDRjAwNDJCQzU1IC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxQzgxQjg5MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzMkU4NDkwQzUxNDkzRjAwQjE1MDBGIC8qIEdD
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0UwNEM5NDBEQUZGOTAyMDA3QTBG
NDEgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MEQ3QzUwRTlD
MUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTZD
QjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTk2MjI5NzgxMTMzRUZENzAwREM0Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyMjAxLDYgKzIyMjM4LDggQEAKIAkJCQk5
M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNT
QXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjgxQjFCMTExRUNGQjkxMDA4NUZDNTEg
LyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzRFMzExMUY3Njg4
RTAwODFGNUJBIC8qIEFOR0xFV2Via2l0QnJpZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjIy
NDIsNiArMjIyODEsMjEgQEAKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUNERDQ1
RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdlYkNvcmUueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRp
bmdzID0gewogCQkJCUlOU1RBTExfUEFUSCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikiOworCQkJ
CUxJQlJBUllfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJIiQo
TElCUkFSWV9TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSkiLAorCQkJCSk7CisJCQkJ
TElCUkFSWV9TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSA9ICJcIiQoU1JDUk9PVClc
IiI7CisJCQkJT1RIRVJfTERGTEFHUyA9ICgKKwkJCQkJIi1sYW5nbGUiLAorCQkJCQkiLWwkKFNR
TElURTNfTElCUkFSWSkiLAorCQkJCQkiLWxvYmpjIiwKKwkJCQkJIi1zdWJfbGlicmFyeSIsCisJ
CQkJCWxpYm9iamMsCisJCQkJCSItdW1icmVsbGEiLAorCQkJCQlXZWJLaXQsCisJCQkJCSIkKFdF
QktJVDJfTERGTEFHUykiLAorCQkJCSk7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwpA
QCAtMjIyNTAsNiArMjIzMDQsMjEgQEAKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
MUNERDQ1RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdlYkNvcmUueGNjb25maWcgKi87CiAJCQlidWls
ZFNldHRpbmdzID0gewogCQkJCUlOU1RBTExfUEFUSCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJUiki
OworCQkJCUxJQlJBUllfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJ
CQkJIiQoTElCUkFSWV9TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSkiLAorCQkJCSk7
CisJCQkJTElCUkFSWV9TRUFSQ0hfUEFUSFNfUVVPVEVEX0ZPUl9UQVJHRVRfMSA9ICJcIiQoU1JD
Uk9PVClcIiI7CisJCQkJT1RIRVJfTERGTEFHUyA9ICgKKwkJCQkJIi1sYW5nbGUiLAorCQkJCQki
LWwkKFNRTElURTNfTElCUkFSWSkiLAorCQkJCQkiLWxvYmpjIiwKKwkJCQkJIi1zdWJfbGlicmFy
eSIsCisJCQkJCWxpYm9iamMsCisJCQkJCSItdW1icmVsbGEiLAorCQkJCQlXZWJLaXQsCisJCQkJ
CSIkKFdFQktJVDJfTERGTEFHUykiLAorCQkJCSk7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7
CiAJCX07CkBAIC0yMjI1OCw2ICsyMjMyNywyMSBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAxQ0RENDVFNTBCQTlDODQ2MDBGOTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAqLzsK
IAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJQlVJTERfVkFSSUFOVFMgPSBub3JtYWw7CisJCQkJ
TElCUkFSWV9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiJChM
SUJSQVJZX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xKSIsCisJCQkJKTsKKwkJCQlM
SUJSQVJZX1NFQVJDSF9QQVRIU19RVU9URURfRk9SX1RBUkdFVF8xID0gIlwiJChTUkNST09UKVwi
IjsKKwkJCQlPVEhFUl9MREZMQUdTID0gKAorCQkJCQkiLWxhbmdsZSIsCisJCQkJCSItbCQoU1FM
SVRFM19MSUJSQVJZKSIsCisJCQkJCSItbG9iamMiLAorCQkJCQkiLXN1Yl9saWJyYXJ5IiwKKwkJ
CQkJbGlib2JqYywKKwkJCQkJIi11bWJyZWxsYSIsCisJCQkJCVdlYktpdCwKKwkJCQkJIiQoV0VC
S0lUMl9MREZMQUdTKSIsCisJCQkJKTsKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJ
fTsKQEAgLTIyMjY1LDEwICsyMjM0OSwxMyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDREQ0NUU0MEJBOUM4NDYwMEY5
MDE0NyAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewot
CQkJCURFQURfQ09ERV9TVFJJUFBJTkcgPSAiJChERUFEX0NPREVfU1RSSVBQSU5HX2RlYnVnKSI7
CisJCQkJREVBRF9DT0RFX1NUUklQUElORyA9IFlFUzsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQo
REVCVUdfREVGSU5FU19kZWJ1ZykiOwogCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAiJChH
Q0NfT1BUSU1JWkFUSU9OX0xFVkVMX2RlYnVnKSI7Ci0JCQkJU1RSSVBfSU5TVEFMTEVEX1BST0RV
Q1QgPSAiJChTVFJJUF9JTlNUQUxMRURfUFJPRFVDVF9kZWJ1ZykiOworCQkJCUxJQlJBUllfU0VB
UkNIX1BBVEhTID0gcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGU7CisJCQkJT05MWV9BQ1RJVkVfQVJD
SCA9IFlFUzsKKwkJCQlPVEhFUl9MREZMQUdTID0gIiI7CisJCQkJU1RSSVBfSU5TVEFMTEVEX1BS
T0RVQ1QgPSBZRVM7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwpAQCAtMjIyNzYsNyAr
MjIzNjMsMTEgQEAKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSAxQ0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxl
YXNlLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlTVFJJUF9JTlNUQUxM
RURfUFJPRFVDVCA9IE5POworCQkJCURFQURfQ09ERV9TVFJJUFBJTkcgPSBZRVM7CisJCQkJTElC
UkFSWV9TRUFSQ0hfUEFUSFMgPSBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZTsKKwkJCQlPTkxZX0FD
VElWRV9BUkNIID0gWUVTOworCQkJCU9USEVSX0xERkxBR1MgPSAiIjsKKwkJCQlTVFJJUF9JTlNU
QUxMRURfUFJPRFVDVCA9IFlFUzsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKQEAg
LTIyMjg0LDYgKzIyMzc1LDExIEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJ
CWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMUNERDQ1RTYwQkE5Qzg0NjAwRjkwMTQ3IC8q
IEJhc2UueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCURFQURfQ09ERV9T
VFJJUFBJTkcgPSBZRVM7CisJCQkJTElCUkFSWV9TRUFSQ0hfUEFUSFMgPSBwbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZTsKKwkJCQlPTkxZX0FDVElWRV9BUkNIID0gWUVTOworCQkJCU9USEVSX0xERkxB
R1MgPSAiIjsKKwkJCQlTVFJJUF9JTlNUQUxMRURfUFJPRFVDVCA9IFlFUzsKIAkJCX07CiAJCQlu
YW1lID0gUHJvZHVjdGlvbjsKIAkJfTsK
</data>
<flag name="review"
          id="50394"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62242</attachid>
            <date>2010-07-21 16:15:24 -0700</date>
            <delta_ts>2010-08-06 13:22:10 -0700</delta_ts>
            <desc>Changes to existing files in webkit for ANGLE</desc>
            <filename>angle-into-webkit2</filename>
            <type>text/plain</type>
            <size>4249</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCShyZXZpc2lvbiA2MzU5NCkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw4ICszOCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmUKIH0K
IAogV2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBH
cmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSB0eXBlKQotICAgIDogQ2FudmFzT2JqZWN0
KGN0eCkKLSAgICAsIG1fdHlwZSh0eXBlKQorICAgIDogQ2FudmFzT2JqZWN0KGN0eCksIG1fdHlw
ZSh0eXBlKSwgbV92YWxpZGF0ZWQoZmFsc2UpCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKIH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmgJKHJldmlzaW9uIDYzNTk0KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNoYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNp
bmNsdWRlICJDYW52YXNPYmplY3QuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKQEAgLTM2LDExICszOCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgV2Vi
R0xTaGFkZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgfldlYkdMU2hhZGVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQotICAgICAgICAKKwogICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlKTsKIAogICAgICAgICBH
cmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAKKwkJYm9vbCBwYXNzZWRWYWxpZGF0aW9uKCkgeyByZXR1cm4gbV92YWxpZGF0
ZWQ7IH0JCQorCQl2b2lkIHNldFZhbGlkYXRlZChib29sIHZhbGlkYXRlZCkgeyBtX3ZhbGlkYXRl
ZCA9IHZhbGlkYXRlZDsgfQorCQkKKwkJU3RyaW5nIGdldFZhbGlkYXRpb25NZXNzYWdlcygpIHsg
cmV0dXJuIG1fdmFsaWRhdGlvbk1lc3NhZ2VzOyB9CisJCXZvaWQgc2V0VmFsaWRhdGlvbk1lc3Nh
Z2VzKFN0cmluZyBtZXNzYWdlcykgeyBtX3ZhbGlkYXRpb25NZXNzYWdlcyA9IG1lc3NhZ2VzOyB9
CisJCQorCQlTdHJpbmcgZ2V0VHJhbnNsYXRlZFNvdXJjZSgpIHsgcmV0dXJuIG1fdHJhbnNsYXRl
ZFNvdXJjZTsgfQorCQl2b2lkIHNldFRyYW5zbGF0ZWRTb3VyY2UoU3RyaW5nIHNvdXJjZSkgeyBt
X3RyYW5zbGF0ZWRTb3VyY2UgPSBzb3VyY2U7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdl
YkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJH
TEVudW1UeXBlKTsKIApAQCAtNDksNiArNjAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUgbV90eXBlOworCisJCVN0cmlu
ZyBtX3ZhbGlkYXRpb25NZXNzYWdlczsKKwkJCisJCS8vRGVza3RvcCBHTFNMIHNvdXJjZQorCQlT
dHJpbmcgbV90cmFuc2xhdGVkU291cmNlOworCisJCWJvb2wgbV92YWxpZGF0ZWQ7CiAgICAgfTsK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2
MzU5NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAi
QU5HTEVXZWJraXRCcmlkZ2UuaCIKICNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02MjMsNyAr
NjI0LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoV2UKIHsKICAg
ICBBU1NFUlQoc2hhZGVyKTsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAg
OjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7CisKKyAgICBpZiAo
QU5HTEVXcmFwcGVyOjp2YWxpZGF0ZVNoYWRlcihzaGFkZXIsZ2V0U2hhZGVyU291cmNlKHNoYWRl
cikudXRmOCgpLmRhdGEoKSkpIHsKKyAgICAgICAgLy9TaGFkZXIgdmFsaWRhdGVkLCBzbyB1cGRh
dGUgaXQgd2l0aCB0aGUgdHJhbnNsYXRlZCBkZXNrdG9wIEdMU0wgc291cmNlLiAKKyAgICAgICAg
c2hhZGVyU291cmNlKHNoYWRlciwgc2hhZGVyLT5nZXRUcmFuc2xhdGVkU291cmNlKCkpOworICAg
ICAgICAKKyAgICAgICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3Qo
KSk7CisgICAgICAgIHNoYWRlci0+c2V0VmFsaWRhdGVkKHRydWUpOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgc2hhZGVyLT5zZXRWYWxpZGF0ZWQoZmFsc2UpOworICAgIH0KIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQs
IGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIp
CkBAIC0xMDA4LDcgKzEwMTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3Vy
Y2UoV2ViCiAgICAgY29uc3QgY2hhciogcyA9IGNzLmRhdGEoKTsKICAgICAKICAgICBpbnQgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hh
ZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOyAgICAKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJl
ZiwgdW5zaWduZWQgbG9uZyBtYXNrKQpAQCAtMTM1OCw2ICsxMzY5LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViRwogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBpZiAoIXNoYWRlci0+cGFzc2VkVmFsaWRhdGlvbigpKQorICAgICAgICByZXR1
cm4gc2hhZGVyLT5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKICAgICAKICAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CiAgICAgR0xpbnQgbGVuZ3RoOwpAQCAtMTM2Nyw3ICsxMzgxLDcg
QEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTAogICAgIEdMY2hhciog
aW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CiAgICAgaWYgKCFpbmZvKQogICAg
ICAgICByZXR1cm4gIiI7Ci0gICAgICAgIAorCiAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CiAgICAgU3RyaW5n
IHMoaW5mbyk7CiAgICAgZmFzdEZyZWUoaW5mbyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62243</attachid>
            <date>2010-07-21 16:16:34 -0700</date>
            <delta_ts>2010-07-28 18:05:19 -0700</delta_ts>
            <desc>New ANGLE files for webcore</desc>
            <filename>angle-webkit-bridge</filename>
            <type>text/plain</type>
            <size>9343</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVXZWJraXRCcmlkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVX
ZWJraXRCcmlkZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9BTkdMRVdlYmtpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiAgQU5HTEVXZWJraXRCcmlkZ2UuY3BwCisgKiAgV2ViQ29yZQorICoKKyAqICBD
cmVhdGVkIGJ5IFBhdWwgU2F3YXlhIG9uIDcvMTUvMTAuCisgKiAgQ29weXJpZ2h0IDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQU5HTEVXZWJraXRCcmlk
Z2UuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgIldlYkdMU2hh
ZGVyLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgQU5HTEVXcmFwcGVyOjp2YWxpZGF0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBjb25z
dCBjaGFyKiBzaGFkZXJTb3VyY2UpCit7CisgICAgVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXM7
CisgICAgRVNoTGFuZ3VhZ2Ugc2hhZGVyTGFuZzsKKyAgICBTaEhhbmRsZSBjb21waWxlcjsKKwor
ICAgIGdlbmVyYXRlUmVzb3VyY2VzKHJlc291cmNlcyk7CisgICAgCisgICAgaWYgKHNoYWRlci0+
Z2V0VHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKQorICAgICAgICBz
aGFkZXJMYW5nID0gRVNoTGFuZ1ZlcnRleDsKKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUo
KSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKQorICAgICAgICBzaGFkZXJM
YW5nID0gRVNoTGFuZ0ZyYWdtZW50OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBJbnZhbGlkIHNoYWRlclR5cGUKKyAgICAgICAgCisgICAgU2hJbml0aWFsaXplKCk7CisgICAg
CisgICAgY29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKHNoYWRlckxhbmcsIEVTaFNwZWNX
ZWJHTCk7CisgICAgCisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU291cmNlU3RyaW5nc1td
ID0ge3NoYWRlclNvdXJjZX07CisgICAgCisgICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENv
bXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIEVTaE9wdE5vbmUsICZyZXNv
dXJjZXMsIEVEZWJ1Z09wVmVyaWZ5Q29kZSB8IEVEZWJ1Z09wSW50ZXJtZWRpYXRlIHwgRURlYnVn
T3BPYmplY3RDb2RlKTsKKyAgICAKKyAgICBpZiAodmFsaWRhdGVTdWNjZXNzKQorICAgICAgICBz
aGFkZXItPnNldFRyYW5zbGF0ZWRTb3VyY2UoU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKSk7Cisg
ICAgZWxzZQorICAgICAgICBzaGFkZXItPnNldFZhbGlkYXRpb25NZXNzYWdlcyhTaEdldFZhbGlk
YXRvckxvZyhjb21waWxlcikpOworCisgICAgc2hhZGVyLT5zZXRWYWxpZGF0ZWQodmFsaWRhdGVT
dWNjZXNzKTsKKyAgICAKKyAgICBTaERlc3RydWN0KGNvbXBpbGVyKTsKKworICAgIHJldHVybiB2
YWxpZGF0ZVN1Y2Nlc3M7Cit9CisKKy8vIFNldCB1cCB0aGUgcGVyIGNvbXBpbGUgcmVzb3VyY2Vz
Cit2b2lkIEFOR0xFV3JhcHBlcjo6Z2VuZXJhdGVSZXNvdXJjZXMoVEJ1aWx0SW5SZXNvdXJjZSYg
cmVzb3VyY2VzKQoreworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzID0gODsKKyAgICBy
ZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLm1h
eFZhcnlpbmdWZWN0b3JzID0gODsKKyAgICByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMgPSAwOworICAgIHJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0g
ODsKKyAgICByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPSA4OworICAgIHJlc291cmNl
cy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLm1heERyYXdC
dWZmZXJzID0gMTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvQU5HTEVXZWJraXRCcmlkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FOR0xFV2Via2l0QnJp
ZGdlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0FO
R0xFV2Via2l0QnJpZGdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAg
QU5HTEVXZWJraXRCcmlkZ2UuaAorICogIFdlYkNvcmUKKyAqCisgKiAgQ3JlYXRlZCBieSBQYXVs
IFNhd2F5YSBvbiA3LzE1LzEwLgorICogIENvcHlyaWdodCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKi8KKworI2lmbmRlZiBBTkdMRVdlYmtpdEJyaWRnZV9oCisj
ZGVmaW5lIEFOR0xFV2Via2l0QnJpZGdlX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiU2hhZGVyTGFuZy5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQU5HTEVXcmFwcGVyIHsKK3B1YmxpYzoKKwkK
KwlzdGF0aWMgYm9vbCB2YWxpZGF0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBj
aGFyKiBzaGFkZXJTb3VyY2UpOworCitwcml2YXRlOgorCisJc3RhdGljIHZvaWQgZ2VuZXJhdGVS
ZXNvdXJjZXMoVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKTsKKworfTsKKworfSAvL25hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9SZXNvdXJjZUxpbWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfUkVTT1VSQ0VfTElNSVRT
X0lOQ0xVREVEXworI2RlZmluZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXworCitzdHJ1Y3Qg
VEJ1aWx0SW5SZXNvdXJjZQoreworCWludCBtYXhWZXJ0ZXhBdHRyaWJzOworCWludCBtYXhWZXJ0
ZXhVbmlmb3JtVmVjdG9yczsKKwlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7CisJaW50IG1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOwor
CWludCBtYXhUZXh0dXJlSW1hZ2VVbml0czsKKwlpbnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
czsKKwlpbnQgbWF4RHJhd0J1ZmZlcnM7Cit9OworI2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1JVFNf
SU5DTFVERURfCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1NoYWRlckxh
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1NoYWRl
ckxhbmcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
U2hhZGVyTGFuZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKyNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKyNkZWZpbmUgX0NP
TVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKworI2luY2x1ZGUgIlJlc291cmNlTGltaXRzLmgi
CisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgQ19ERUNMIF9fY2RlY2wKKyNlbHNlCisjZGVmaW5l
IF9fZmFzdGNhbGwKKyNkZWZpbmUgQ19ERUNMCisjZW5kaWYKKworLy8KKy8vIFRoaXMgaXMgdGhl
IHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKKy8v
IGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci9saW5rZXIuCisvLworCisjaWZkZWYg
X19jcGx1c3BsdXMKKwlleHRlcm4gIkMiIHsKKyNlbmRpZgorLy8KKy8vIERyaXZlciBtdXN0IGNh
bGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgorLy8gY29tcGlsZXIv
bGlua2VyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpOworLy8KKy8vIERyaXZl
ciBzaG91bGQgY2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8KK2ludCBfX2Zhc3RjYWxsIFNoRmlu
YWxpemUoKTsKKy8vCisvLyBUeXBlcyBvZiBsYW5ndWFnZXMgdGhlIGNvbXBpbGVyIGNhbiBjb25z
dW1lLgorLy8KK3R5cGVkZWYgZW51bSB7CisJRVNoTGFuZ1ZlcnRleCwKKwlFU2hMYW5nRnJhZ21l
bnQsCisJRVNoTGFuZ0NvdW50LAorfSBFU2hMYW5ndWFnZTsKKworLy8KKy8vIFRoZSBsYW5ndWFn
ZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvLgorLy8gSXQgY3VycmVudGx5IHN1
cHBvcnRzIE9wZW5HTCBFUyBhbmQgV2ViR0wgc3BlY2lmaWNhdGlvbnMuCisvLwordHlwZWRlZiBl
bnVtIHsKKyAgICBFU2hTcGVjR0xFUzIsCisgICAgRVNoU3BlY1dlYkdMLAorfSBFU2hTcGVjOwor
CisvLworLy8gVHlwZXMgb2Ygb3V0cHV0IHRoZSBsaW5rZXIgd2lsbCBjcmVhdGUuCisvLwordHlw
ZWRlZiBlbnVtIHsKKwlFU2hFeFZlcnRleEZyYWdtZW50LAorCUVTaEV4RnJhZ21lbnQKK30gRVNo
RXhlY3V0YWJsZTsKKworLy8KKy8vIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVy
LgorLy8KK3R5cGVkZWYgZW51bSB7CisJRVNoT3B0Tm9HZW5lcmF0aW9uLAorCUVTaE9wdE5vbmUs
CisJRVNoT3B0U2ltcGxlLCAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUg
cXVpY2tseQorCUVTaE9wdEZ1bGwsICAgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IHdpbGwg
dGFrZSBtb3JlIHRpbWUKK30gRVNoT3B0aW1pemF0aW9uTGV2ZWw7CisKKy8vCisvLyBCdWlsZCBh
IHRhYmxlIGZvciBiaW5kaW5ncy4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGxvY2F0aW5nCisvLyBh
dHRyaWJ1dGVzLCB1bmlmb3JtcywgZ2xvYmFscywgZXRjLiwgYXMgbmVlZGVkLgorLy8KK3R5cGVk
ZWYgc3RydWN0IHsKKwljb25zdCBjaGFyKiBuYW1lOworCWludCBiaW5kaW5nOworfSBTaEJpbmRp
bmc7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbnVtQmluZGluZ3M7CisJU2hCaW5kaW5nKiBi
aW5kaW5nczsgIC8vIGFycmF5IG9mIGJpbmRpbmdzCit9IFNoQmluZGluZ1RhYmxlOworCisvLwor
Ly8gU2hIYW5kbGUgaGVsZCBieSBidXQgb3BhcXVlIHRvIHRoZSBkcml2ZXIuICBJdCBpcyBhbGxv
Y2F0ZWQsCisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci9saW5r
ZXIuIEl0J3MgY29udGVudHMgCisvLyBhcmUgZGVmaW5lZCBieSBhbmQgdXNlZCBieSB0aGUgY29t
cGlsZXIgYW5kIGxpbmtlci4gIEZvciBleGFtcGxlLAorLy8gc3ltYm9sIHRhYmxlIGluZm9ybWF0
aW9uIGFuZCBvYmplY3QgY29kZSBwYXNzZWQgZnJvbSB0aGUgY29tcGlsZXIgCisvLyB0byB0aGUg
bGlua2VyIGNhbiBiZSBzdG9yZWQgd2hlcmUgU2hIYW5kbGUgcG9pbnRzLgorLy8KKy8vIElmIGhh
bmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgorLy8KK3R5cGVkZWYgdm9p
ZCogU2hIYW5kbGU7CisKKy8vCisvLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBk
ZXN0cm95IGNvbXBpbGVyL2xpbmtlcgorLy8gb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENvbnN0
cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsgIC8vIG9uZSBwZXIgc2hhZGVyCitT
aEhhbmRsZSBTaENvbnN0cnVjdExpbmtlcihjb25zdCBFU2hFeGVjdXRhYmxlLCBpbnQgZGVidWdP
cHRpb25zKTsgIC8vIG9uZSBwZXIgc2hhZGVyIHBhaXIKK1NoSGFuZGxlIFNoQ29uc3RydWN0VW5p
Zm9ybU1hcCgpOyAgICAgICAgICAgICAgICAgLy8gb25lIHBlciB1bmlmb3JtIG5hbWVzcGFjZSAo
Y3VycmVudGx5IGVudGlyZSBwcm9ncmFtIG9iamVjdCkKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRs
ZSk7CisKKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBib29sZWFuLCBp
bmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworLy8gVGhlIGluZm8tbG9nIHNo
b3VsZCBiZSB3cml0dGVuIGJ5IFNoQ29tcGlsZSBpbnRvIAorLy8gU2hIYW5kbGUsIHNvIGl0IGNh
biBhbnN3ZXIgZnV0dXJlIHF1ZXJpZXMuCisvLworaW50IFNoQ29tcGlsZSgKKwljb25zdCBTaEhh
bmRsZSwKKwljb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisJY29uc3QgaW50IG51
bVN0cmluZ3MsCisJY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwsCisJY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSAqcmVzb3VyY2VzLAorCWludCBkZWJ1Z09wdGlvbnMKKwkpOworCisKKy8vCisvLyBT
aW1pbGFyIHRvIFNoQ29tcGlsZSwgYnV0IGFjY2VwdHMgYW4gb3BhcXVlIGhhbmRsZSB0byBhbgor
Ly8gaW50ZXJtZWRpYXRlIGxhbmd1YWdlIHN0cnVjdHVyZS4KKy8vCitpbnQgU2hDb21waWxlSW50
ZXJtZWRpYXRlKAorCVNoSGFuZGxlIGNvbXBpbGVyLAorCVNoSGFuZGxlIGludGVybWVkaWF0ZSwK
Kwljb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKKwlpbnQgZGVidWdnYWJsZSAgICAgICAgICAg
Ly8gYm9vbGVhbgorCSk7CisKK2ludCBTaExpbmsoCisJY29uc3QgU2hIYW5kbGUsICAgICAgICAg
ICAgICAgLy8gbGlua2VyIG9iamVjdAorCWNvbnN0IFNoSGFuZGxlIGhbXSwgICAgICAgICAgIC8v
IGNvbXBpbGVyIG9iamVjdHMgdG8gbGluayB0b2dldGhlcgorCWNvbnN0IGludCBudW1IYW5kbGVz
LAorCVNoSGFuZGxlIHVuaWZvcm1NYXAsICAgICAgICAgIC8vIHVwZGF0ZWQgd2l0aCBuZXcgdW5p
Zm9ybXMKKwlzaG9ydCBpbnQqKiB1bmlmb3Jtc0FjY2Vzc2VkLCAgLy8gcmV0dXJuZWQgd2l0aCBp
bmRleGVzIG9mIHVuaWZvcm1zIGFjY2Vzc2VkCisJaW50KiBudW1Vbmlmb3Jtc0FjY2Vzc2VkKTsg
CQorCitpbnQgU2hMaW5rRXh0KAorCWNvbnN0IFNoSGFuZGxlLCAgICAgICAgICAgICAgIC8vIGxp
bmtlciBvYmplY3QKKwljb25zdCBTaEhhbmRsZSBoW10sICAgICAgICAgICAvLyBjb21waWxlciBv
YmplY3RzIHRvIGxpbmsgdG9nZXRoZXIKKwljb25zdCBpbnQgbnVtSGFuZGxlcyk7CisKKy8vCisv
LyBTaFNldEVuY3JweXRpb25NZXRob2QgaXMgYSBwbGFjZS1ob2xkZXIgZm9yIHNwZWNpZnlpbmcK
Ky8vIGhvdyBzb3VyY2UgY29kZSBpcyBlbmNyeXB0ZWQuCisvLwordm9pZCBTaFNldEVuY3J5cHRp
b25NZXRob2QoU2hIYW5kbGUpOworCisvLworLy8gQWxsIHRoZSBmb2xsb3dpbmcgcmV0dXJuIDAg
aWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdAorLy8gYXZhaWxhYmxlIGluIHRoZSBvYmplY3QgcGFz
c2VkIGRvd24sIG9yIHRoZSBvYmplY3QgaXMgYmFkLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5m
b0xvZyhjb25zdCBTaEhhbmRsZSk7Citjb25zdCBjaGFyKiBTaEdldE9iamVjdENvZGUoY29uc3Qg
U2hIYW5kbGUpOworY29uc3Qgdm9pZCogU2hHZXRFeGVjdXRhYmxlKGNvbnN0IFNoSGFuZGxlKTsK
K2NvbnN0IGNoYXIqIFNoR2V0VmFsaWRhdG9yTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSk7Citp
bnQgU2hTZXRWaXJ0dWFsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNo
QmluZGluZ1RhYmxlKik7ICAgLy8gdG8gZGV0ZWN0IHVzZXIgYWxpYXNpbmcKK2ludCBTaFNldEZp
eGVkQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxl
Kik7ICAgICAvLyB0byBmb3JjZSBhbnkgcGh5c2ljYWwgbWFwcGluZ3MKK2ludCBTaEdldFBoeXNp
Y2FsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxl
KiopOyAvLyBmb3IgYWxsIGF0dHJpYnV0ZXMKKy8vCisvLyBUZWxsIHRoZSBsaW5rZXIgdG8gbmV2
ZXIgYXNzaWduIGEgdmVydGV4IGF0dHJpYnV0ZSB0byB0aGlzIGxpc3Qgb2YgcGh5c2ljYWwgYXR0
cmlidXRlcworLy8KK2ludCBTaEV4Y2x1ZGVBdHRyaWJ1dGVzKGNvbnN0IFNoSGFuZGxlLCBpbnQg
KmF0dHJpYnV0ZXMsIGludCBjb3VudCk7CisKKy8vCisvLyBSZXR1cm5zIHRoZSBsb2NhdGlvbiBJ
RCBvZiB0aGUgbmFtZWQgdW5pZm9ybS4KKy8vIFJldHVybnMgLTEgaWYgZXJyb3IuCisvLworaW50
IFNoR2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IFNoSGFuZGxlIHVuaWZvcm1NYXAsIGNvbnN0IGNo
YXIqIG5hbWUpOworCitlbnVtIFREZWJ1Z09wdGlvbnMgeworCUVEZWJ1Z09wTm9uZSAgICAgICAg
ICAgICAgID0gMHgwMDAsCisJRURlYnVnT3BJbnRlcm1lZGlhdGUgICAgICAgPSAweDAwMSwKKwlF
RGVidWdPcEFzc2VtYmx5ICAgICAgICAgICA9IDB4MDAyLAorCUVEZWJ1Z09wT2JqZWN0Q29kZSAg
ICAgICAgID0gMHgwMDQsCisJRURlYnVnT3BMaW5rTWFwcyAgICAgICAgICAgPSAweDAwOCwKKwlF
RGVidWdPcFZlcmlmeUNvZGUJCSAgID0gMHgwMTAKK307CisjaWZkZWYgX19jcGx1c3BsdXMKKwl9
CisjZW5kaWYKKworI2VuZGlmIC8vIF9DT01QSUxFUl9JTlRFUkZBQ0VfSU5DTFVERURfCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62321</attachid>
            <date>2010-07-22 11:33:59 -0700</date>
            <delta_ts>2010-07-28 18:05:19 -0700</delta_ts>
            <desc>ANGLE source code</desc>
            <filename>angle-source2</filename>
            <type>text/plain</type>
            <size>1588879</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdML2VnbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1
ZGUvRUdML2VnbC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzI5IEBACisvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4
OyAtKi0gKi8KKy8qIHZpOiBzZXQgc3c9NCB0cz04OiAqLworLyogUmVmZXJlbmNlIHZlcnNpb24g
b2YgZWdsLmggZm9yIEVHTCAxLjQuCisgKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAw
OS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICovCisKKy8qCisq
KiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0
aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBs
aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo
LAorKiogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBN
YXRlcmlhbHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxz
IGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMg
QVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBF
WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFN
QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LAorKiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOIFRIRSBNQVRFUklBTFMuCisqLworCisjaWZuZGVmIF9fZWdsX2hfCisjZGVmaW5lIF9fZWds
X2hfCisKKy8qIEFsbCBwbGF0Zm9ybS1kZXBlbmRlbnQgdHlwZXMgYW5kIG1hY3JvIGJvaWxlcnBs
YXRlIChzdWNoIGFzIEVHTEFQSQorICogYW5kIEVHTEFQSUVOVFJZKSBzaG91bGQgZ28gaW4gZWds
cGxhdGZvcm0uaC4KKyAqLworI2luY2x1ZGUgPEVHTC9lZ2xwbGF0Zm9ybS5oPgorCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEVHTCBUeXBlcyAqLworLyog
RUdMaW50IGlzIGRlZmluZWQgaW4gZWdscGxhdGZvcm0uaCAqLwordHlwZWRlZiB1bnNpZ25lZCBp
bnQgRUdMQm9vbGVhbjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IEVHTGVudW07Cit0eXBlZGVmIHZv
aWQgKkVHTENvbmZpZzsKK3R5cGVkZWYgdm9pZCAqRUdMQ29udGV4dDsKK3R5cGVkZWYgdm9pZCAq
RUdMRGlzcGxheTsKK3R5cGVkZWYgdm9pZCAqRUdMU3VyZmFjZTsKK3R5cGVkZWYgdm9pZCAqRUdM
Q2xpZW50QnVmZmVyOworCisvKiBFR0wgVmVyc2lvbmluZyAqLworI2RlZmluZSBFR0xfVkVSU0lP
Tl8xXzAJCQkxCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMQkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJ
T05fMV8yCQkJMQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzMJCQkxCisjZGVmaW5lIEVHTF9WRVJT
SU9OXzFfNAkJCTEKKworLyogRUdMIEVudW1lcmFudHMuIEJpdG1hc2tzIGFuZCBvdGhlciBleGNl
cHRpb25hbCBjYXNlcyBhc2lkZSwgbW9zdAorICogZW51bXMgYXJlIGFzc2lnbmVkIHVuaXF1ZSB2
YWx1ZXMgc3RhcnRpbmcgYXQgMHgzMDAwLgorICovCisKKy8qIEVHTCBhbGlhc2VzICovCisjZGVm
aW5lIEVHTF9GQUxTRQkJCTAKKyNkZWZpbmUgRUdMX1RSVUUJCQkxCisKKy8qIE91dC1vZi1iYW5k
IGhhbmRsZSB2YWx1ZXMgKi8KKyNkZWZpbmUgRUdMX0RFRkFVTFRfRElTUExBWQkJKChFR0xOYXRp
dmVEaXNwbGF5VHlwZSkwKQorI2RlZmluZSBFR0xfTk9fQ09OVEVYVAkJCSgoRUdMQ29udGV4dCkw
KQorI2RlZmluZSBFR0xfTk9fRElTUExBWQkJCSgoRUdMRGlzcGxheSkwKQorI2RlZmluZSBFR0xf
Tk9fU1VSRkFDRQkJCSgoRUdMU3VyZmFjZSkwKQorCisvKiBPdXQtb2YtYmFuZCBhdHRyaWJ1dGUg
dmFsdWUgKi8KKyNkZWZpbmUgRUdMX0RPTlRfQ0FSRQkJCSgoRUdMaW50KS0xKQorCisvKiBFcnJv
cnMgLyBHZXRFcnJvciByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lIEVHTF9TVUNDRVNTCQkJMHgz
MDAwCisjZGVmaW5lIEVHTF9OT1RfSU5JVElBTElaRUQJCTB4MzAwMQorI2RlZmluZSBFR0xfQkFE
X0FDQ0VTUwkJCTB4MzAwMgorI2RlZmluZSBFR0xfQkFEX0FMTE9DCQkJMHgzMDAzCisjZGVmaW5l
IEVHTF9CQURfQVRUUklCVVRFCQkweDMwMDQKKyNkZWZpbmUgRUdMX0JBRF9DT05GSUcJCQkweDMw
MDUKKyNkZWZpbmUgRUdMX0JBRF9DT05URVhUCQkJMHgzMDA2CisjZGVmaW5lIEVHTF9CQURfQ1VS
UkVOVF9TVVJGQUNFCQkweDMwMDcKKyNkZWZpbmUgRUdMX0JBRF9ESVNQTEFZCQkJMHgzMDA4Cisj
ZGVmaW5lIEVHTF9CQURfTUFUQ0gJCQkweDMwMDkKKyNkZWZpbmUgRUdMX0JBRF9OQVRJVkVfUElY
TUFQCQkweDMwMEEKKyNkZWZpbmUgRUdMX0JBRF9OQVRJVkVfV0lORE9XCQkweDMwMEIKKyNkZWZp
bmUgRUdMX0JBRF9QQVJBTUVURVIJCTB4MzAwQworI2RlZmluZSBFR0xfQkFEX1NVUkZBQ0UJCQkw
eDMwMEQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfTE9TVAkJMHgzMDBFCS8qIEVHTCAxLjEgLSBJTUdf
cG93ZXJfbWFuYWdlbWVudCAqLworCisvKiBSZXNlcnZlZCAweDMwMEYtMHgzMDFGIGZvciBhZGRp
dGlvbmFsIGVycm9ycyAqLworCisvKiBDb25maWcgYXR0cmlidXRlcyAqLworI2RlZmluZSBFR0xf
QlVGRkVSX1NJWkUJCQkweDMwMjAKKyNkZWZpbmUgRUdMX0FMUEhBX1NJWkUJCQkweDMwMjEKKyNk
ZWZpbmUgRUdMX0JMVUVfU0laRQkJCTB4MzAyMgorI2RlZmluZSBFR0xfR1JFRU5fU0laRQkJCTB4
MzAyMworI2RlZmluZSBFR0xfUkVEX1NJWkUJCQkweDMwMjQKKyNkZWZpbmUgRUdMX0RFUFRIX1NJ
WkUJCQkweDMwMjUKKyNkZWZpbmUgRUdMX1NURU5DSUxfU0laRQkJMHgzMDI2CisjZGVmaW5lIEVH
TF9DT05GSUdfQ0FWRUFUCQkweDMwMjcKKyNkZWZpbmUgRUdMX0NPTkZJR19JRAkJCTB4MzAyOAor
I2RlZmluZSBFR0xfTEVWRUwJCQkweDMwMjkKKyNkZWZpbmUgRUdMX01BWF9QQlVGRkVSX0hFSUdI
VAkJMHgzMDJBCisjZGVmaW5lIEVHTF9NQVhfUEJVRkZFUl9QSVhFTFMJCTB4MzAyQgorI2RlZmlu
ZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEgJCTB4MzAyQworI2RlZmluZSBFR0xfTkFUSVZFX1JFTkRF
UkFCTEUJCTB4MzAyRAorI2RlZmluZSBFR0xfTkFUSVZFX1ZJU1VBTF9JRAkJMHgzMDJFCisjZGVm
aW5lIEVHTF9OQVRJVkVfVklTVUFMX1RZUEUJCTB4MzAyRgorI2RlZmluZSBFR0xfU0FNUExFUwkJ
CTB4MzAzMQorI2RlZmluZSBFR0xfU0FNUExFX0JVRkZFUlMJCTB4MzAzMgorI2RlZmluZSBFR0xf
U1VSRkFDRV9UWVBFCQkweDMwMzMKKyNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX1RZUEUJCTB4MzAz
NAorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfQkxVRV9WQUxVRQkweDMwMzUKKyNkZWZpbmUgRUdM
X1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVFCTB4MzAzNgorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRf
UkVEX1ZBTFVFCTB4MzAzNworI2RlZmluZSBFR0xfTk9ORQkJCTB4MzAzOAkvKiBBdHRyaWIgbGlz
dCB0ZXJtaW5hdG9yICovCisjZGVmaW5lIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCCQkweDMwMzkK
KyNkZWZpbmUgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBCTB4MzAzQQorI2RlZmluZSBFR0xfTUlO
X1NXQVBfSU5URVJWQUwJCTB4MzAzQgorI2RlZmluZSBFR0xfTUFYX1NXQVBfSU5URVJWQUwJCTB4
MzAzQworI2RlZmluZSBFR0xfTFVNSU5BTkNFX1NJWkUJCTB4MzAzRAorI2RlZmluZSBFR0xfQUxQ
SEFfTUFTS19TSVpFCQkweDMwM0UKKyNkZWZpbmUgRUdMX0NPTE9SX0JVRkZFUl9UWVBFCQkweDMw
M0YKKyNkZWZpbmUgRUdMX1JFTkRFUkFCTEVfVFlQRQkJMHgzMDQwCisjZGVmaW5lIEVHTF9NQVRD
SF9OQVRJVkVfUElYTUFQCQkweDMwNDEJLyogUHNldWRvLWF0dHJpYnV0ZSAobm90IHF1ZXJ5YWJs
ZSkgKi8KKyNkZWZpbmUgRUdMX0NPTkZPUk1BTlQJCQkweDMwNDIKKworLyogUmVzZXJ2ZWQgMHgz
MDQxLTB4MzA0RiBmb3IgYWRkaXRpb25hbCBjb25maWcgYXR0cmlidXRlcyAqLworCisvKiBDb25m
aWcgYXR0cmlidXRlIHZhbHVlcyAqLworI2RlZmluZSBFR0xfU0xPV19DT05GSUcJCQkweDMwNTAJ
LyogRUdMX0NPTkZJR19DQVZFQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX05PTl9DT05GT1JNQU5U
X0NPTkZJRwkweDMwNTEJLyogRUdMX0NPTkZJR19DQVZFQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdM
X1RSQU5TUEFSRU5UX1JHQgkJMHgzMDUyCS8qIEVHTF9UUkFOU1BBUkVOVF9UWVBFIHZhbHVlICov
CisjZGVmaW5lIEVHTF9SR0JfQlVGRkVSCQkJMHgzMDhFCS8qIEVHTF9DT0xPUl9CVUZGRVJfVFlQ
RSB2YWx1ZSAqLworI2RlZmluZSBFR0xfTFVNSU5BTkNFX0JVRkZFUgkJMHgzMDhGCS8qIEVHTF9D
T0xPUl9CVUZGRVJfVFlQRSB2YWx1ZSAqLworCisvKiBNb3JlIGNvbmZpZyBhdHRyaWJ1dGUgdmFs
dWVzLCBmb3IgRUdMX1RFWFRVUkVfRk9STUFUICovCisjZGVmaW5lIEVHTF9OT19URVhUVVJFCQkJ
MHgzMDVDCisjZGVmaW5lIEVHTF9URVhUVVJFX1JHQgkJCTB4MzA1RAorI2RlZmluZSBFR0xfVEVY
VFVSRV9SR0JBCQkweDMwNUUKKyNkZWZpbmUgRUdMX1RFWFRVUkVfMkQJCQkweDMwNUYKKworLyog
Q29uZmlnIGF0dHJpYnV0ZSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1BCVUZGRVJfQklUCQkJ
MHgwMDAxCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9QSVhN
QVBfQklUCQkJMHgwMDAyCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5l
IEVHTF9XSU5ET1dfQklUCQkJMHgwMDA0CS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICov
CisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUl9CSVQJMHgwMDIwCS8qIEVHTF9TVVJG
QUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFX0JJ
VAkweDAwNDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX01V
TFRJU0FNUExFX1JFU09MVkVfQk9YX0JJVCAweDAyMDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNr
IGJpdHMgKi8KKyNkZWZpbmUgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCAweDA0MDAJ
LyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKworI2RlZmluZSBFR0xfT1BFTkdMX0VT
X0JJVAkJMHgwMDAxCS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5l
IEVHTF9PUEVOVkdfQklUCQkJMHgwMDAyCS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRz
ICovCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMyX0JJVAkJMHgwMDA0CS8qIEVHTF9SRU5ERVJBQkxF
X1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9PUEVOR0xfQklUCQkJMHgwMDA4CS8qIEVH
TF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisKKy8qIFF1ZXJ5U3RyaW5nIHRhcmdldHMg
Ki8KKyNkZWZpbmUgRUdMX1ZFTkRPUgkJCTB4MzA1MworI2RlZmluZSBFR0xfVkVSU0lPTgkJCTB4
MzA1NAorI2RlZmluZSBFR0xfRVhURU5TSU9OUwkJCTB4MzA1NQorI2RlZmluZSBFR0xfQ0xJRU5U
X0FQSVMJCQkweDMwOEQKKworLyogUXVlcnlTdXJmYWNlIC8gU3VyZmFjZUF0dHJpYiAvIENyZWF0
ZVBidWZmZXJTdXJmYWNlIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0hFSUdIVAkJCTB4MzA1Ngor
I2RlZmluZSBFR0xfV0lEVEgJCQkweDMwNTcKKyNkZWZpbmUgRUdMX0xBUkdFU1RfUEJVRkZFUgkJ
MHgzMDU4CisjZGVmaW5lIEVHTF9URVhUVVJFX0ZPUk1BVAkJMHgzMDgwCisjZGVmaW5lIEVHTF9U
RVhUVVJFX1RBUkdFVAkJMHgzMDgxCisjZGVmaW5lIEVHTF9NSVBNQVBfVEVYVFVSRQkJMHgzMDgy
CisjZGVmaW5lIEVHTF9NSVBNQVBfTEVWRUwJCTB4MzA4MworI2RlZmluZSBFR0xfUkVOREVSX0JV
RkZFUgkJMHgzMDg2CisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFCQkweDMwODcKKyNkZWZpbmUg
RUdMX1ZHX0FMUEhBX0ZPUk1BVAkJMHgzMDg4CisjZGVmaW5lIEVHTF9IT1JJWk9OVEFMX1JFU09M
VVRJT04JMHgzMDkwCisjZGVmaW5lIEVHTF9WRVJUSUNBTF9SRVNPTFVUSU9OCQkweDMwOTEKKyNk
ZWZpbmUgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTwkJMHgzMDkyCisjZGVmaW5lIEVHTF9TV0FQX0JF
SEFWSU9SCQkweDMwOTMKKyNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09MVkUJCTB4MzA5OQor
CisvKiBFR0xfUkVOREVSX0JVRkZFUiB2YWx1ZXMgLyBCaW5kVGV4SW1hZ2UgLyBSZWxlYXNlVGV4
SW1hZ2UgYnVmZmVyIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0JBQ0tfQlVGRkVSCQkJMHgzMDg0
CisjZGVmaW5lIEVHTF9TSU5HTEVfQlVGRkVSCQkweDMwODUKKworLyogT3BlblZHIGNvbG9yIHNw
YWNlcyAqLworI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9zUkdCCQkweDMwODkJLyogRUdMX1ZH
X0NPTE9SU1BBQ0UgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSCTB4
MzA4QQkvKiBFR0xfVkdfQ09MT1JTUEFDRSB2YWx1ZSAqLworCisvKiBPcGVuVkcgYWxwaGEgZm9y
bWF0cyAqLworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX05PTlBSRQkweDMwOEIJLyogRUdM
X0FMUEhBX0ZPUk1BVCB2YWx1ZSAqLworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRQkJ
MHgzMDhDCS8qIEVHTF9BTFBIQV9GT1JNQVQgdmFsdWUgKi8KKworLyogQ29uc3RhbnQgc2NhbGUg
ZmFjdG9yIGJ5IHdoaWNoIGZyYWN0aW9uYWwgZGlzcGxheSByZXNvbHV0aW9ucyAmCisgKiBhc3Bl
Y3QgcmF0aW8gYXJlIHNjYWxlZCB3aGVuIHF1ZXJpZWQgYXMgaW50ZWdlciB2YWx1ZXMuCisgKi8K
KyNkZWZpbmUgRUdMX0RJU1BMQVlfU0NBTElORwkJMTAwMDAKKworLyogVW5rbm93biBkaXNwbGF5
IHJlc29sdXRpb24vYXNwZWN0IHJhdGlvICovCisjZGVmaW5lIEVHTF9VTktOT1dOCQkJKChFR0xp
bnQpLTEpCisKKy8qIEJhY2sgYnVmZmVyIHN3YXAgYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9C
VUZGRVJfUFJFU0VSVkVECQkweDMwOTQJLyogRUdMX1NXQVBfQkVIQVZJT1IgdmFsdWUgKi8KKyNk
ZWZpbmUgRUdMX0JVRkZFUl9ERVNUUk9ZRUQJCTB4MzA5NQkvKiBFR0xfU1dBUF9CRUhBVklPUiB2
YWx1ZSAqLworCisvKiBDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciBidWZmZXIgdHlwZXMg
Ki8KKyNkZWZpbmUgRUdMX09QRU5WR19JTUFHRQkJMHgzMDk2CisKKy8qIFF1ZXJ5Q29udGV4dCB0
YXJnZXRzICovCisjZGVmaW5lIEVHTF9DT05URVhUX0NMSUVOVF9UWVBFCQkweDMwOTcKKworLyog
Q3JlYXRlQ29udGV4dCBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEVHTF9DT05URVhUX0NMSUVOVF9W
RVJTSU9OCTB4MzA5OAorCisvKiBNdWx0aXNhbXBsZSByZXNvbHV0aW9uIGJlaGF2aW9ycyAqLwor
I2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRV9ERUZBVUxUIDB4MzA5QQkvKiBFR0xfTVVM
VElTQU1QTEVfUkVTT0xWRSB2YWx1ZSAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xW
RV9CT1gJMHgzMDlCCS8qIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFIHZhbHVlICovCisKKy8qIEJp
bmRBUEkvUXVlcnlBUEkgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfT1BFTkdMX0VTX0FQSQkJMHgz
MEEwCisjZGVmaW5lIEVHTF9PUEVOVkdfQVBJCQkJMHgzMEExCisjZGVmaW5lIEVHTF9PUEVOR0xf
QVBJCQkJMHgzMEEyCisKKy8qIEdldEN1cnJlbnRTdXJmYWNlIHRhcmdldHMgKi8KKyNkZWZpbmUg
RUdMX0RSQVcJCQkweDMwNTkKKyNkZWZpbmUgRUdMX1JFQUQJCQkweDMwNUEKKworLyogV2FpdE5h
dGl2ZSBlbmdpbmVzICovCisjZGVmaW5lIEVHTF9DT1JFX05BVElWRV9FTkdJTkUJCTB4MzA1Qgor
CisvKiBFR0wgMS4yIHRva2VucyByZW5hbWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICov
CisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFCQkJRUdMX1ZHX0NPTE9SU1BBQ0UKKyNkZWZpbmUgRUdM
X0FMUEhBX0ZPUk1BVAkJRUdMX1ZHX0FMUEhBX0ZPUk1BVAorI2RlZmluZSBFR0xfQ09MT1JTUEFD
RV9zUkdCCQlFR0xfVkdfQ09MT1JTUEFDRV9zUkdCCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFX0xJ
TkVBUgkJRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRf
Tk9OUFJFCQlFR0xfVkdfQUxQSEFfRk9STUFUX05PTlBSRQorI2RlZmluZSBFR0xfQUxQSEFfRk9S
TUFUX1BSRQkJRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkUKKworLyogRUdMIGV4dGVuc2lvbnMgbXVz
dCByZXF1ZXN0IGVudW0gYmxvY2tzIGZyb20gdGhlIEtocm9ub3MKKyAqIEFQSSBSZWdpc3RyYXIs
IHdobyBtYWludGFpbnMgdGhlIGVudW1lcmFudCByZWdpc3RyeS4gU3VibWl0CisgKiBhIGJ1ZyBp
biBLaHJvbm9zIEJ1Z3ppbGxhIGFnYWluc3QgdGFzayAiUmVnaXN0cnkiLgorICovCisKKworCisv
KiBFR0wgRnVuY3Rpb25zICovCisKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsR2V0RXJy
b3Iodm9pZCk7CisKK0VHTEFQSSBFR0xEaXNwbGF5IEVHTEFQSUVOVFJZIGVnbEdldERpc3BsYXko
RUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xp
bnQgKm1pbm9yKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFRlcm1pbmF0ZShF
R0xEaXNwbGF5IGRweSk7CisKK0VHTEFQSSBjb25zdCBjaGFyICogRUdMQVBJRU5UUlkgZWdsUXVl
cnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGludCBuYW1lKTsKKworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsR2V0Q29uZmlncyhFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnICpj
b25maWdzLAorCQkJIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKTsKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRw
eSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwKKwkJCSAgIEVHTENvbmZpZyAqY29uZmlncywg
RUdMaW50IGNvbmZpZ19zaXplLAorCQkJICAgRUdMaW50ICpudW1fY29uZmlnKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwg
RUdMQ29uZmlnIGNvbmZpZywKKwkJCSAgICAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFs
dWUpOworCitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVXaW5kb3dTdXJm
YWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJCSAgRUdMTmF0aXZlV2lu
ZG93VHlwZSB3aW4sCisJCQkJICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBF
R0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJCSAgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShF
R0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKKwkJCQkgIEVHTE5hdGl2ZVBpeG1hcFR5
cGUgcGl4bWFwLAorCQkJCSAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdM
Qm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdM
U3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5
U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbEJpbmRBUEkoRUdMZW51bSBhcGkpOworRUdMQVBJIEVHTGVudW0gRUdMQVBJRU5UUlkg
ZWdsUXVlcnlBUEkodm9pZCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdh
aXRDbGllbnQodm9pZCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFJlbGVh
c2VUaHJlYWQodm9pZCk7CisKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKAorCSAgICAgIEVHTERpc3BsYXkgZHB5LCBFR0xlbnVt
IGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCisJICAgICAgRUdMQ29uZmlnIGNvbmZp
ZywgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFj
ZSwKKwkJCSAgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJm
YWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5U
UlkgZWdsUmVsZWFzZVRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2Us
IEVHTGludCBidWZmZXIpOworCisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3
YXBJbnRlcnZhbChFR0xEaXNwbGF5IGRweSwgRUdMaW50IGludGVydmFsKTsKKworCitFR0xBUEkg
RUdMQ29udGV4dCBFR0xBUElFTlRSWSBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLAorCQkJICAgIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwKKwkJCSAg
ICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbERlc3Ryb3lDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCk7CitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRw
eSwgRUdMU3VyZmFjZSBkcmF3LAorCQkJICBFR0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4
KTsKKworRUdMQVBJIEVHTENvbnRleHQgRUdMQVBJRU5UUlkgZWdsR2V0Q3VycmVudENvbnRleHQo
dm9pZCk7CitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50U3VyZmFj
ZShFR0xpbnQgcmVhZGRyYXcpOworRUdMQVBJIEVHTERpc3BsYXkgRUdMQVBJRU5UUlkgZWdsR2V0
Q3VycmVudERpc3BsYXkodm9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xR
dWVyeUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LAorCQkJICAgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbFdhaXRHTCh2b2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdh
aXROYXRpdmUoRUdMaW50IGVuZ2luZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbENvcHlCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmZhY2UsCisJCQkgIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0KTsKKwor
LyogVGhpcyBpcyBhIGdlbmVyaWMgZnVuY3Rpb24gcG9pbnRlciB0eXBlLCB3aG9zZSBuYW1lIGlu
ZGljYXRlcyBpdCBtdXN0CisgKiBiZSBjYXN0IHRvIHRoZSBwcm9wZXIgdHlwZSAqYW5kIGNhbGxp
bmcgY29udmVudGlvbiogYmVmb3JlIHVzZS4KKyAqLwordHlwZWRlZiB2b2lkICgqX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSkodm9pZCk7CisKKy8qIE5vdywgZGVmaW5l
IGVnbEdldFByb2NBZGRyZXNzIHVzaW5nIHRoZSBnZW5lcmljIGZ1bmN0aW9uIHB0ci4gdHlwZSAq
LworRUdMQVBJIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgRUdMQVBJ
RU5UUlkKKyAgICAgICBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2VnbF9oXyAqLwpJ
bmRleDogQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5j
bHVkZS9FR0wvZWdsZXh0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xl
eHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAKKyNpZm5kZWYgX19lZ2xleHRfaF8K
KyNkZWZpbmUgX19lZ2xleHRfaF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZgorCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3Jv
dXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh
cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg
YW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxz
IiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp
bmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs
IGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisq
KiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO
WQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD
VElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9V
VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBP
UiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworI2luY2x1ZGUgPEVHTC9l
Z2xwbGF0Zm9ybS5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSGVhZGVyIGZpbGUgdmVyc2lvbiBudW1iZXIg
Ki8KKy8qIEN1cnJlbnQgdmVyc2lvbiBhdCBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5
L2VnbC8gKi8KKy8qICRSZXZpc2lvbjogMTA3OTUgJCBvbiAkRGF0ZTogMjAxMC0wMy0xOSAxNzow
NDoxNyAtMDcwMCAoRnJpLCAxOSBNYXIgMjAxMCkgJCAqLworI2RlZmluZSBFR0xfRUdMRVhUX1ZF
UlNJT04gNQorCisjaWZuZGVmIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMKKyNkZWZpbmUgRUdMX0tI
Ul9jb25maWdfYXR0cmlicyAxCisjZGVmaW5lIEVHTF9DT05GT1JNQU5UX0tIUgkJCTB4MzA0Mgkv
KiBFR0xDb25maWcgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX0xJTkVB
Ul9CSVRfS0hSCTB4MDAyMAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5l
IEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFX0JJVF9LSFIJCTB4MDA0MAkvKiBFR0xfU1VSRkFDRV9U
WVBFIGJpdGZpZWxkICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2xvY2tfc3VyZmFjZQor
I2RlZmluZSBFR0xfS0hSX2xvY2tfc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9SRUFEX1NVUkZBQ0Vf
QklUX0tIUgkJMHgwMDAxCS8qIEVHTF9MT0NLX1VTQUdFX0hJTlRfS0hSIGJpdGZpZWxkICovCisj
ZGVmaW5lIEVHTF9XUklURV9TVVJGQUNFX0JJVF9LSFIJCTB4MDAwMgkvKiBFR0xfTE9DS19VU0FH
RV9ISU5UX0tIUiBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfTE9DS19TVVJGQUNFX0JJVF9LSFIJ
CTB4MDA4MAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9PUFRJ
TUFMX0ZPUk1BVF9CSVRfS0hSCQkweDAxMDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAq
LworI2RlZmluZSBFR0xfTUFUQ0hfRk9STUFUX0tIUgkJCTB4MzA0MwkvKiBFR0xDb25maWcgYXR0
cmlidXRlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCXzU2NV9FWEFDVF9LSFIJCTB4MzBDMAkv
KiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfRk9STUFUX1JHQl81
NjVfS0hSCQkJMHgzMEMxCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5l
IEVHTF9GT1JNQVRfUkdCQV84ODg4X0VYQUNUX0tIUgkJMHgzMEMyCS8qIEVHTF9NQVRDSF9GT1JN
QVRfS0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCQV84ODg4X0tIUgkJMHgzMEMz
CS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9NQVBfUFJFU0VS
VkVfUElYRUxTX0tIUgkJMHgzMEM0CS8qIGVnbExvY2tTdXJmYWNlS0hSIGF0dHJpYnV0ZSAqLwor
I2RlZmluZSBFR0xfTE9DS19VU0FHRV9ISU5UX0tIUgkJCTB4MzBDNQkvKiBlZ2xMb2NrU3VyZmFj
ZUtIUiBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QT0lOVEVSX0tIUgkJCTB4MzBD
NgkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElU
Q0hfS0hSCQkJMHgzMEM3CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUg
RUdMX0JJVE1BUF9PUklHSU5fS0hSCQkJMHgzMEM4CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1
dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9SRURfT0ZGU0VUX0tIUgkJMHgzMEM5CS8q
IGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9H
UkVFTl9PRkZTRVRfS0hSCTB4MzBDQQkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisj
ZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfQkxVRV9PRkZTRVRfS0hSCTB4MzBDQgkvKiBlZ2xRdWVy
eVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfQUxQSEFfT0ZG
U0VUX0tIUgkweDMwQ0MJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBF
R0xfQklUTUFQX1BJWEVMX0xVTUlOQU5DRV9PRkZTRVRfS0hSCTB4MzBDRAkvKiBlZ2xRdWVyeVN1
cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9MT1dFUl9MRUZUX0tIUgkJCTB4MzBDRQkv
KiBFR0xfQklUTUFQX09SSUdJTl9LSFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1VQUEVSX0xFRlRf
S0hSCQkJMHgzMENGCS8qIEVHTF9CSVRNQVBfT1JJR0lOX0tIUiB2YWx1ZSAqLworI2lmZGVmIEVH
TF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsTG9j
a1N1cmZhY2VLSFIgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bFVubG9ja1N1cmZhY2VLSFIgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNl
KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVh
biAoRUdMQVBJRU5UUllQIFBGTkVHTExPQ0tTVVJGQUNFS0hSUFJPQykgKEVHTERpc3BsYXkgZGlz
cGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK3R5
cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFVOTE9DS1NVUkZBQ0VLSFJQUk9D
KSAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworI2VuZGlmCisKKyNp
Zm5kZWYgRUdMX0tIUl9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2ltYWdlIDEKKyNkZWZpbmUgRUdM
X05BVElWRV9QSVhNQVBfS0hSCQkJMHgzMEIwCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAq
LwordHlwZWRlZiB2b2lkICpFR0xJbWFnZUtIUjsKKyNkZWZpbmUgRUdMX05PX0lNQUdFX0tIUgkJ
CSgoRUdMSW1hZ2VLSFIpMCkKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBF
R0xJbWFnZUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVJbWFnZUtIUiAoRUdMRGlzcGxheSBkcHks
IEVHTENvbnRleHQgY3R4LCBFR0xlbnVtIHRhcmdldCwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwg
Y29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRS
WSBlZ2xEZXN0cm95SW1hZ2VLSFIgKEVHTERpc3BsYXkgZHB5LCBFR0xJbWFnZUtIUiBpbWFnZSk7
CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTEltYWdlS0hS
IChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFSU1BR0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHks
IEVHTENvbnRleHQgY3R4LCBFR0xlbnVtIHRhcmdldCwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwg
Y29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVO
VFJZUCBQRk5FR0xERVNUUk9ZSU1BR0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTEltYWdl
S0hSIGltYWdlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfdmdfcGFyZW50X2ltYWdlCisj
ZGVmaW5lIEVHTF9LSFJfdmdfcGFyZW50X2ltYWdlIDEKKyNkZWZpbmUgRUdMX1ZHX1BBUkVOVF9J
TUFHRV9LSFIJCQkweDMwQkEJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfMkRfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9n
bF90ZXh0dXJlXzJEX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfMkRfS0hSCQkJMHgz
MEIxCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVS
RV9MRVZFTF9LSFIJCTB4MzBCQwkvKiBlZ2xDcmVhdGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KKyNl
bmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfdGV4dHVyZV9jdWJlbWFwX2ltYWdlCisjZGVmaW5l
IEVHTF9LSFJfZ2xfdGV4dHVyZV9jdWJlbWFwX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWF9LSFIJMHgzMEIzCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRh
cmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YX0tIUgkw
eDMwQjQJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lfS0hSCTB4MzBCNQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0
YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWV9LSFIJ
MHgzMEI2CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aX0tIUgkweDMwQjcJLyogZWdsQ3JlYXRlSW1hZ2VLSFIg
dGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pfS0hS
CTB4MzBCOAkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNlbmRpZgorCisjaWZuZGVm
IEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVf
M0RfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xfVEVYVFVSRV8zRF9LSFIJCQkweDMwQjIJLyogZWds
Q3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX1pPRkZTRVRf
S0hSCQkweDMwQkQJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgYXR0cmlidXRlICovCisjZW5kaWYKKwor
I2lmbmRlZiBFR0xfS0hSX2dsX3JlbmRlcmJ1ZmZlcl9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2ds
X3JlbmRlcmJ1ZmZlcl9pbWFnZSAxCisjZGVmaW5lIEVHTF9HTF9SRU5ERVJCVUZGRVJfS0hSCQkJ
MHgzMEI5CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0tIUl9yZXVzYWJsZV9zeW5jCisjZGVmaW5lIEVHTF9LSFJfcmV1c2FibGVfc3luYyAxCisK
K3R5cGVkZWYgdm9pZCogRUdMU3luY0tIUjsKK3R5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vj
b25kc190IEVHTFRpbWVLSFI7CisKKyNkZWZpbmUgRUdMX1NZTkNfU1RBVFVTX0tIUgkJCTB4MzBG
MQorI2RlZmluZSBFR0xfU0lHTkFMRURfS0hSCQkJMHgzMEYyCisjZGVmaW5lIEVHTF9VTlNJR05B
TEVEX0tIUgkJCTB4MzBGMworI2RlZmluZSBFR0xfVElNRU9VVF9FWFBJUkVEX0tIUgkJCTB4MzBG
NQorI2RlZmluZSBFR0xfQ09ORElUSU9OX1NBVElTRklFRF9LSFIJCTB4MzBGNgorI2RlZmluZSBF
R0xfU1lOQ19UWVBFX0tIUgkJCTB4MzBGNworI2RlZmluZSBFR0xfU1lOQ19SRVVTQUJMRV9LSFIJ
CQkweDMwRkEKKyNkZWZpbmUgRUdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUX0tIUgkJMHgwMDAx
CS8qIGVnbENsaWVudFdhaXRTeW5jS0hSIDxmbGFncz4gYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdM
X0ZPUkVWRVJfS0hSCQkJCTB4RkZGRkZGRkZGRkZGRkZGRnVsbAorI2RlZmluZSBFR0xfTk9fU1lO
Q19LSFIJCQkJKChFR0xTeW5jS0hSKTApCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitF
R0xBUEkgRUdMU3luY0tIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTeW5jS0hSKEVHTERpc3BsYXkg
ZHB5LCBFR0xlbnVtIHR5cGUsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveVN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVH
TFN5bmNLSFIgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENsaWVudFdhaXRT
eW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFncywgRUdM
VGltZUtIUiB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25h
bFN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMZW51bSBtb2RlKTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdldFN5bmNBdHRyaWJLSFIoRUdMRGlz
cGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN5bmNL
SFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTWU5DS0hSUFJPQykgKEVHTERpc3BsYXkgZHB5
LCBFR0xlbnVtIHR5cGUsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xC
b29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNZTkNLSFJQUk9DKSAoRUdMRGlzcGxh
eSBkcHksIEVHTFN5bmNLSFIgc3luYyk7Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBG
TkVHTENMSUVOVFdBSVRTWU5DS0hSUFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGludCBmbGFncywgRUdMVGltZUtIUiB0aW1lb3V0KTsKK3R5cGVkZWYgRUdMQm9vbGVh
biAoRUdMQVBJRU5UUllQIFBGTkVHTFNJR05BTFNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHks
IEVHTFN5bmNLSFIgc3luYywgRUdMZW51bSBtb2RlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdM
QVBJRU5UUllQIFBGTkVHTEdFVFNZTkNBVFRSSUJLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVH
TFN5bmNLSFIgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX2ltYWdlX2Jhc2UKKyNkZWZpbmUgRUdMX0tIUl9pbWFnZV9iYXNl
IDEKKy8qIE1vc3QgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEVHTF9LSFJfaW1hZ2VfcGl4bWFwIGFi
b3ZlICovCisjZGVmaW5lIEVHTF9JTUFHRV9QUkVTRVJWRURfS0hSCQkJMHgzMEQyCS8qIGVnbENy
ZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9pbWFn
ZV9waXhtYXAKKyNkZWZpbmUgRUdMX0tIUl9pbWFnZV9waXhtYXAgMQorLyogSW50ZXJmYWNlcyBk
ZWZpbmVkIGJ5IEVHTF9LSFJfaW1hZ2UgYWJvdmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9J
TUdfY29udGV4dF9wcmlvcml0eQorI2RlZmluZSBFR0xfSU1HX2NvbnRleHRfcHJpb3JpdHkgMQor
I2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9MRVZFTF9JTUcJCTB4MzEwMAorI2RlZmluZSBF
R0xfQ09OVEVYVF9QUklPUklUWV9ISUdIX0lNRwkJMHgzMTAxCisjZGVmaW5lIEVHTF9DT05URVhU
X1BSSU9SSVRZX01FRElVTV9JTUcJCTB4MzEwMgorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklU
WV9MT1dfSU1HCQkweDMxMDMKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl9jb3ZlcmFnZV9zYW1w
bGUKKyNkZWZpbmUgRUdMX05WX2NvdmVyYWdlX3NhbXBsZSAxCisjZGVmaW5lIEVHTF9DT1ZFUkFH
RV9CVUZGRVJTX05WIDB4MzBFMAorI2RlZmluZSBFR0xfQ09WRVJBR0VfU0FNUExFU19OViAweDMw
RTEKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl9kZXB0aF9ub25saW5lYXIKKyNkZWZpbmUgRUdM
X05WX2RlcHRoX25vbmxpbmVhciAxCisjZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OViAweDMw
RTIKKyNkZWZpbmUgRUdMX0RFUFRIX0VOQ09ESU5HX05PTkVfTlYgMAorI2RlZmluZSBFR0xfREVQ
VEhfRU5DT0RJTkdfTk9OTElORUFSX05WIDB4MzBFMworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05W
X3N5bmMKKyNkZWZpbmUgRUdMX05WX3N5bmMgMQorI2RlZmluZSBFR0xfU1lOQ19QUklPUl9DT01N
QU5EU19DT01QTEVURV9OVgkweDMwRTYKKyNkZWZpbmUgRUdMX1NZTkNfU1RBVFVTX05WCQkJMHgz
MEU3CisjZGVmaW5lIEVHTF9TSUdOQUxFRF9OVgkJCQkweDMwRTgKKyNkZWZpbmUgRUdMX1VOU0lH
TkFMRURfTlYJCQkweDMwRTkKKyNkZWZpbmUgRUdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUX05W
CQkweDAwMDEKKyNkZWZpbmUgRUdMX0ZPUkVWRVJfTlYJCQkJMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEVHTF9BTFJFQURZX1NJR05BTEVEX05WCQkJMHgzMEVBCisjZGVmaW5lIEVHTF9U
SU1FT1VUX0VYUElSRURfTlYJCQkweDMwRUIKKyNkZWZpbmUgRUdMX0NPTkRJVElPTl9TQVRJU0ZJ
RURfTlYJCTB4MzBFQworI2RlZmluZSBFR0xfU1lOQ19UWVBFX05WCQkJMHgzMEVECisjZGVmaW5l
IEVHTF9TWU5DX0NPTkRJVElPTl9OVgkJCTB4MzBFRQorI2RlZmluZSBFR0xfU1lOQ19GRU5DRV9O
VgkJCTB4MzBFRgorI2RlZmluZSBFR0xfTk9fU1lOQ19OVgkJCQkoKEVHTFN5bmNOVikwKQordHlw
ZWRlZiB2b2lkKiBFR0xTeW5jTlY7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBFR0xUaW1l
TlY7CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xTeW5jTlYgZWdsQ3JlYXRlRmVu
Y2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7CitFR0xCb29sZWFuIGVnbERlc3Ryb3lTeW5jTlYgKEVHTFN5bmNOViBz
eW5jKTsKK0VHTEJvb2xlYW4gZWdsRmVuY2VOViAoRUdMU3luY05WIHN5bmMpOworRUdMaW50IGVn
bENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVO
ViB0aW1lb3V0KTsKK0VHTEJvb2xlYW4gZWdsU2lnbmFsU3luY05WIChFR0xTeW5jTlYgc3luYywg
RUdMZW51bSBtb2RlKTsKK0VHTEJvb2xlYW4gZWdsR2V0U3luY0F0dHJpYk5WIChFR0xTeW5jTlYg
c3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VH
TEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN5bmNOViAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURUZFTkNFU1lOQ05WUFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlv
biwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQ
SUVOVFJZUCBQRk5FR0xERVNUUk9ZU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5jKTsKK3R5cGVk
ZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEZFTkNFTlZQUk9DKSAoRUdMU3luY05W
IHN5bmMpOwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xDTElFTlRXQUlUU1lO
Q05WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0
KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNJR05BTFNZTkNOVlBS
T0MpIChFR0xTeW5jTlYgc3luYywgRUdMZW51bSBtb2RlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAo
RUdMQVBJRU5UUllQIFBGTkVHTEdFVFNZTkNBVFRSSUJOVlBST0MpIChFR0xTeW5jTlYgc3luYywg
RUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xw
bGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMCBAQAorI2lmbmRlZiBfX2VnbHBsYXRmb3JtX2hfCisjZGVmaW5l
IF9fZWdscGxhdGZvcm1faF8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFRoZSBL
aHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlz
IHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiog
Ik1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlv
biwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNv
cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh
bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVy
c29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj
dCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
CisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlh
bHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX
QVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJV
VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiog
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9S
IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIFBs
YXRmb3JtLXNwZWNpZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKKyAqICRSZXZp
c2lvbjogOTcyNCAkIG9uICREYXRlOiAyMDA5LTEyLTAyIDAyOjA1OjMzIC0wODAwIChXZWQsIDAy
IERlYyAyMDA5KSAkCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFu
ZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdl
ZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhh
dAorICogdGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmls
ZS4gIFBsZWFzZSBzdWJtaXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJs
aWMgS2hyb25vcyBCdWd6aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkg
ZmlsaW5nIGEgYnVnIGFnYWluc3QgcHJvZHVjdCAiRUdMIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4K
KyAqLworCisjaW5jbHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKy8qIE1hY3JvcyB1c2VkIGlu
IEVHTCBmdW5jdGlvbiBwcm90b3R5cGUgZGVjbGFyYXRpb25zLgorICoKKyAqIEVHTCBmdW5jdGlv
bnMgc2hvdWxkIGJlIHByb3RvdHlwZWQgYXM6CisgKgorICogRUdMQVBJIHJldHVybi10eXBlIEVH
TEFQSUVOVFJZIGVnbEZ1bmN0aW9uKGFyZ3VtZW50cyk7CisgKiB0eXBlZGVmIHJldHVybi10eXBl
IChFWFBBUElFTlRSWVAgUEZORUdMRlVOQ1RJT05QUk9DKSAoYXJndW1lbnRzKTsKKyAqCisgKiBL
SFJPTk9TX0FQSUNBTEwgYW5kIEtIUk9OT1NfQVBJRU5UUlkgYXJlIGRlZmluZWQgaW4gS0hSL2to
cnBsYXRmb3JtLmgKKyAqLworCisjaWZuZGVmIEVHTEFQSQorI2RlZmluZSBFR0xBUEkgS0hST05P
U19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBFR0xBUElFTlRSWQorI2RlZmluZSBFR0xBUElF
TlRSWSAgS0hST05PU19BUElFTlRSWQorI2VuZGlmCisjZGVmaW5lIEVHTEFQSUVOVFJZUCBFR0xB
UElFTlRSWSoKKworLyogVGhlIHR5cGVzIE5hdGl2ZURpc3BsYXlUeXBlLCBOYXRpdmVXaW5kb3dU
eXBlLCBhbmQgTmF0aXZlUGl4bWFwVHlwZQorICogYXJlIGFsaWFzZXMgb2Ygd2luZG93LXN5c3Rl
bS1kZXBlbmRlbnQgdHlwZXMsIHN1Y2ggYXMgWCBEaXNwbGF5ICogb3IKKyAqIFdpbmRvd3MgRGV2
aWNlIENvbnRleHQuIFRoZXkgbXVzdCBiZSBkZWZpbmVkIGluIHBsYXRmb3JtLXNwZWNpZmljCisg
KiBjb2RlIGJlbG93LiBUaGUgRUdMLXByZWZpeGVkIHZlcnNpb25zIG9mIE5hdGl2ZSpUeXBlIGFy
ZSB0aGUgc2FtZQorICogdHlwZXMsIHJlbmFtZWQgaW4gRUdMIDEuMyBzbyBhbGwgdHlwZXMgaW4g
dGhlIEFQSSBzdGFydCB3aXRoICJFR0wiLgorICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwg
ZGVmaW5lZChfX1ZDMzJfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX19T
Q0lURUNIX1NOQVBfXykgLyogV2luMzIgYW5kIFdpbkNFICovCisjaWZuZGVmIFdJTjMyX0xFQU5f
QU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCisjZW5kaWYKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisKK3R5cGVkZWYgSERDICAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5
cGVkZWYgSEJJVE1BUCBFR0xOYXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBIV05EICAgIEVHTE5h
dGl2ZVdpbmRvd1R5cGU7CisKKyNlbGlmIGRlZmluZWQoX19XSU5TQ1dfXykgfHwgZGVmaW5lZChf
X1NZTUJJQU4zMl9fKSAgLyogU3ltYmlhbiAqLworCit0eXBlZGVmIGludCAgIEVHTE5hdGl2ZURp
c3BsYXlUeXBlOwordHlwZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwordHlwZWRlZiB2
b2lkICpFR0xOYXRpdmVQaXhtYXBUeXBlOworCisjZWxpZiBkZWZpbmVkKF9fdW5peF9fKQorCisv
KiBYMTEgKHRlbnRhdGl2ZSkgICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxY
MTEvWHV0aWwuaD4KKwordHlwZWRlZiBEaXNwbGF5ICpFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5
cGVkZWYgUGl4bWFwICAgRUdMTmF0aXZlUGl4bWFwVHlwZTsKK3R5cGVkZWYgV2luZG93ICAgRUdM
TmF0aXZlV2luZG93VHlwZTsKKworI2Vsc2UKKyNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6
ZWQiCisjZW5kaWYKKworLyogRUdMIDEuMiB0eXBlcywgcmVuYW1lZCBmb3IgY29uc2lzdGVuY3kg
aW4gRUdMIDEuMyAqLwordHlwZWRlZiBFR0xOYXRpdmVEaXNwbGF5VHlwZSBOYXRpdmVEaXNwbGF5
VHlwZTsKK3R5cGVkZWYgRUdMTmF0aXZlUGl4bWFwVHlwZSAgTmF0aXZlUGl4bWFwVHlwZTsKK3R5
cGVkZWYgRUdMTmF0aXZlV2luZG93VHlwZSAgTmF0aXZlV2luZG93VHlwZTsKKworCisvKiBEZWZp
bmUgRUdMaW50LiBUaGlzIG11c3QgYmUgYSBzaWduZWQgaW50ZWdyYWwgdHlwZSBsYXJnZSBlbm91
Z2ggdG8gY29udGFpbgorICogYWxsIGxlZ2FsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzIHBh
c3NlZCBpbnRvIGFuZCBvdXQgb2YgRUdMLCB3aGV0aGVyCisgKiB0aGVpciB0eXBlIGlzIGJvb2xl
YW4sIGJpdG1hc2ssIGVudW1lcmFudCAoc3ltYm9saWMgY29uc3RhbnQpLCBpbnRlZ2VyLAorICog
aGFuZGxlLCBvciBvdGhlci4gIFdoaWxlIGluIGdlbmVyYWwgYSAzMi1iaXQgaW50ZWdlciB3aWxs
IHN1ZmZpY2UsIGlmCisgKiBoYW5kbGVzIGFyZSA2NCBiaXQgdHlwZXMsIHRoZW4gRUdMaW50IHNo
b3VsZCBiZSBkZWZpbmVkIGFzIGEgc2lnbmVkIDY0LWJpdAorICogaW50ZWdlciB0eXBlLgorICov
Cit0eXBlZGVmIGtocm9ub3NfaW50MzJfdCBFR0xpbnQ7CisKKyNlbmRpZiAvKiBfX2VnbHBsYXRm
b3JtX2ggKi8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUv
R0xFUzIvZ2wyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIxIEBACisjaWZuZGVmIF9fZ2wy
X2hfCisjZGVmaW5lIF9fZ2wyX2hfCisKKy8qICRSZXZpc2lvbjogMTA2MDIgJCBvbiAkRGF0ZTo6
IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAgIyQgKi8KKworI2luY2x1ZGUgPEdMRVMyL2dsMnBs
YXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwor
LyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3
YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
KiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHZv
aWQgICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsK
K3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
ICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBl
ZGVmIGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdM
c2hvcnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAg
ICAgICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAg
IEdMdWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJv
bm9zX2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7
CisKKy8qIEdMIHR5cGVzIGZvciBoYW5kbGluZyBsYXJnZSB2ZXJ0ZXggYnVmZmVyIG9iamVjdHMg
Ki8KK3R5cGVkZWYga2hyb25vc19pbnRwdHJfdCBHTGludHB0cjsKK3R5cGVkZWYga2hyb25vc19z
c2l6ZV90ICBHTHNpemVpcHRyOworCisvKiBPcGVuR0wgRVMgY29yZSB2ZXJzaW9ucyAqLworI2Rl
ZmluZSBHTF9FU19WRVJTSU9OXzJfMCAgICAgICAgICAgICAgICAgMQorCisvKiBDbGVhckJ1ZmZl
ck1hc2sgKi8KKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDB4MDAw
MDAxMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDB4MDAwMDA0
MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDB4MDAwMDQwMDAK
KworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxTRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMAorI2RlZmluZSBHTF9UUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBC
ZWdpbk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisj
ZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUg
R0xfTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklB
TkdMRVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX1RSSUFOR0xFX1NU
UklQICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAg
ICAgICAgICAgICAgIDB4MDAwNgorCisvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGlu
IEVTMjApICovCisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAg
ICAgR0xfRVFVQUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIg
Ki8KKy8qICAgICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAg
IEdMX0FMV0FZUyAqLworCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVS
TyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAg
ICAgIDB4MDMwMAorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgMHgw
MzAxCisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAweDAzMDIKKyNk
ZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDB4MDMwMworI2RlZmluZSBH
TF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9N
SU5VU19EU1RfQUxQSEEgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMg
Ki8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNU
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmluZSBHTF9PTkVfTUlOVVNf
RFNUX0NPTE9SICAgICAgICAgICAgMHgwMzA3CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFU
RSAgICAgICAgICAgICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdM
X09ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAg
IEdMX09ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICov
CisjZGVmaW5lIEdMX0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNkZWZp
bmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDB4ODAwOQorI2RlZmluZSBHTF9C
TEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRf
RVFVQVRJT04gKi8KKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgIDB4
ODgzRAorCisvKiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAg
ICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KKyNkZWZpbmUg
R0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVO
RF9TUkNfUkdCICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9B
TFBIQSAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JDX0FMUEhBICAg
ICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9DT05TVEFOVF9DT0xPUiAgICAgICAgICAg
ICAgICAgMHg4MDAxCisjZGVmaW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAw
eDgwMDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDB4ODAwMwor
I2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgMHg4MDA0CisjZGVmaW5l
IEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9i
amVjdHMgKi8KKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgIDB4ODg5
MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgMHg4ODkzCisjZGVm
aW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVB
TV9EUkFXICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RSQVcg
ICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9EWU5BTUlDX0RSQVcgICAgICAg
ICAgICAgICAgICAgMHg4OEU4CisKKyNkZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAg
ICAgICAgIDB4ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAg
MHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgIDB4ODYy
NgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xfRlJPTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDQwNAorI2RlZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwNDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAweDA0
MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLworLyogICAgICBH
TF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVBTCAqLworLyog
ICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAgICAgIEdMX0dF
UVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICovCisjZGVmaW5l
IEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAweDBERTEKKyNkZWZpbmUgR0xfQ1VM
TF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNUICAgICAgICAgICAg
ICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAg
MHgwQjcxCisjZGVmaW5lIEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAweDBDMTEK
KyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDB4ODAzNworI2RlZmlu
ZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NB
TVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisj
ZGVmaW5lIEdMX05PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX0lO
VkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9W
QUxVRSAgICAgICAgICAgICAgICAgIDB4MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElP
TiAgICAgICAgICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAg
ICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5lIEdMX0NX
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAKKyNkZWZpbmUgR0xfQ0NXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBH
TF9MSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFT
RURfUE9JTlRfU0laRV9SQU5HRSAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFICAgICAgIDB4ODQ2RQorI2RlZmluZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAg
ICAgICAgICAgICAgMHgwQjQ1CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAg
ICAgICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDB4
MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgMHgwQjcyCisj
ZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUg
R0xfREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5lIEdMX1NURU5DSUxfRlVO
QyAgICAgICAgICAgICAgICAgICAweDBCOTIKKyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAg
ICAgICAgICAgICAgIDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAg
ICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICAw
eDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDB4MEI5Nwor
I2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5l
IEdMX1NURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUgR0xfU1RF
TkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDB4ODgwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JB
Q0tfRkFJTCAgICAgICAgICAgICAgMHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNT
X0RFUFRIX0ZBSUwgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
UEFTUyAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAgICAgICAg
MHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICAweDhDQTQK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDB4OENBNQorI2RlZmlu
ZSBHTF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisjZGVmaW5lIEdMX1ND
SVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAweDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9U
RVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAweDBDMjIK
KyNkZWZpbmUgR0xfQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmlu
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgMHgwQ0Y1CisjZGVmaW5lIEdMX1BB
Q0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRV
UkVfU0laRSAgICAgICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElN
UyAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAgICAg
ICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1MgorI2RlZmluZSBHTF9HUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgMHgwRDUz
CisjZGVmaW5lIEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAweDBENTQKKyNkZWZp
bmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NQorI2RlZmluZSBHTF9E
RVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxf
QklUUyAgICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRf
VU5JVFMgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNFVF9GSUxMICov
CisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAweDgwMzgKKyNkZWZp
bmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9T
QU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdF
X1ZBTFVFICAgICAgICAgIDB4ODBBQQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJU
ICAgICAgICAgMHg4MEFCCisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xf
VEVYVFVSRV9NQUdfRklMVEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLwor
LyogICAgICBHTF9URVhUVVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAq
LworCisjZGVmaW5lIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAweDg2QTIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgIDB4ODZBMworCisvKiBIaW50
TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgMHgxMTAw
CisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZp
bmUgR0xfTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50VGFy
Z2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgMHg4MTky
CisKKy8qIERhdGFUeXBlICovCisjZGVmaW5lIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE0MDAKKyNkZWZpbmUgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgIDB4
MTQwMQorI2RlZmluZSBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAyCisj
ZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUg
R0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNAorI2RlZmluZSBHTF9VTlNJ
R05FRF9JTlQgICAgICAgICAgICAgICAgICAgMHgxNDA1CisjZGVmaW5lIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDYKKyNkZWZpbmUgR0xfRklYRUQgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTQwQworCisvKiBQaXhlbEZvcm1hdCAqLworI2RlZmluZSBHTF9ERVBU
SF9DT01QT05FTlQgICAgICAgICAgICAgICAgMHgxOTAyCisjZGVmaW5lIEdMX0FMUEhBICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE5MDYKKyNkZWZpbmUgR0xfUkdCICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTkwNworI2RlZmluZSBHTF9SR0JBICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxOTA4CisjZGVmaW5lIEdMX0xVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICAw
eDE5MDkKKyNkZWZpbmUgR0xfTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDB4MTkwQQor
CisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgR0xfVU5TSUdORURfQllURSAqLworI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgMHg4MDMzCisjZGVmaW5lIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzEgICAgICAgICAweDgwMzQKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgIDB4ODM2MworCisvKiBTaGFkZXJzICovCisjZGVmaW5lIEdMX0ZS
QUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhf
U0hBREVSICAgICAgICAgICAgICAgICAgICAweDhCMzEKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9B
VFRSSUJTICAgICAgICAgICAgICAgMHg4ODY5CisjZGVmaW5lIEdMX01BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTICAgICAgIDB4OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAg
ICAgICAgICAgICAweDhERkMKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgMHg4QjRECisjZGVmaW5lIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAg
IDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICAweDg4
NzIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgMHg4REZECisj
ZGVmaW5lIEdMX1NIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2RlZmlu
ZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDhCODAKKyNkZWZpbmUgR0xf
TElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHg4QjgyCisjZGVmaW5lIEdMX1ZBTElE
QVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9T
SEFERVJTICAgICAgICAgICAgICAgICAweDhCODUKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1T
ICAgICAgICAgICAgICAgICAgMHg4Qjg2CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNX01BWF9M
RU5HVEggICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9BQ1RJVkVfQVRUUklCVVRFUyAgICAgICAg
ICAgICAgICAweDhCODkKKyNkZWZpbmUgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIICAg
ICAgMHg4QjhBCisjZGVmaW5lIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAgICAgIDB4
OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAweDhCOEQK
KworLyogU3RlbmNpbEZ1bmN0aW9uICovCisjZGVmaW5lIEdMX05FVkVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgR0xfTEVTUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMQorI2RlZmluZSBHTF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MjAyCisjZGVmaW5lIEdMX0xFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDMKKyNk
ZWZpbmUgR0xfR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZSBH
TF9OT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA1CisjZGVmaW5lIEdMX0dFUVVB
TCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDYKKyNkZWZpbmUgR0xfQUxXQVlTICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDIwNworCisvKiBTdGVuY2lsT3AgKi8KKy8qICAgICAgR0xf
WkVSTyAqLworI2RlZmluZSBHTF9LRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAw
CisjZGVmaW5lIEdMX1JFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDEKKyNkZWZp
bmUgR0xfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMgorI2RlZmluZSBHTF9E
RUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAzCisjZGVmaW5lIEdMX0lOVkVSVCAg
ICAgICAgICAgICAgICAgICAgICAgICAweDE1MEEKKyNkZWZpbmUgR0xfSU5DUl9XUkFQICAgICAg
ICAgICAgICAgICAgICAgIDB4ODUwNworI2RlZmluZSBHTF9ERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NTA4CisKKy8qIFN0cmluZ05hbWUgKi8KKyNkZWZpbmUgR0xfVkVORE9SICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBHTF9SRU5ERVJFUiAgICAgICAg
ICAgICAgICAgICAgICAgMHgxRjAxCisjZGVmaW5lIEdMX1ZFUlNJT04gICAgICAgICAgICAgICAg
ICAgICAgICAweDFGMDIKKyNkZWZpbmUgR0xfRVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAg
IDB4MUYwMworCisvKiBUZXh0dXJlTWFnRmlsdGVyICovCisjZGVmaW5lIEdMX05FQVJFU1QgICAg
ICAgICAgICAgICAgICAgICAgICAweDI2MDAKKyNkZWZpbmUgR0xfTElORUFSICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MjYwMQorCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIEdM
X05FQVJFU1QgKi8KKy8qICAgICAgR0xfTElORUFSICovCisjZGVmaW5lIEdMX05FQVJFU1RfTUlQ
TUFQX05FQVJFU1QgICAgICAgICAweDI3MDAKKyNkZWZpbmUgR0xfTElORUFSX01JUE1BUF9ORUFS
RVNUICAgICAgICAgIDB4MjcwMQorI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgICAg
ICAgICAgMHgyNzAyCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICAw
eDI3MDMKKworLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV9N
QUdfRklMVEVSICAgICAgICAgICAgIDB4MjgwMAorI2RlZmluZSBHTF9URVhUVVJFX01JTl9GSUxU
RVIgICAgICAgICAgICAgMHgyODAxCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAg
ICAgICAgICAweDI4MDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAgICAgICAg
IDB4MjgwMworCisvKiBUZXh0dXJlVGFyZ2V0ICovCisvKiAgICAgIEdMX1RFWFRVUkVfMkQgKi8K
KyNkZWZpbmUgR0xfVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcwMgorCisjZGVm
aW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICAweDg1MTMKKyNkZWZpbmUgR0xf
VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDB4ODUxNAorI2RlZmluZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgMHg4NTE1CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWCAgICAweDg1MTYKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZICAgIDB4ODUxNworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kg
ICAgMHg4NTE4CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICAweDg1
MTkKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDB4ODUxQQorI2Rl
ZmluZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgMHg4NTFDCisKKy8qIFRleHR1
cmVVbml0ICovCisjZGVmaW5lIEdMX1RFWFRVUkUwICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzAKKyNkZWZpbmUgR0xfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMQorI2Rl
ZmluZSBHTF9URVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMyCisjZGVmaW5lIEdM
X1RFWFRVUkUzICAgICAgICAgICAgICAgICAgICAgICAweDg0QzMKKyNkZWZpbmUgR0xfVEVYVFVS
RTQgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNAorI2RlZmluZSBHTF9URVhUVVJFNSAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEM1CisjZGVmaW5lIEdMX1RFWFRVUkU2ICAgICAgICAgICAg
ICAgICAgICAgICAweDg0QzYKKyNkZWZpbmUgR0xfVEVYVFVSRTcgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDNworI2RlZmluZSBHTF9URVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgMHg4
NEM4CisjZGVmaW5lIEdMX1RFWFRVUkU5ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzkKKyNk
ZWZpbmUgR0xfVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDB4ODRDQQorI2RlZmluZSBH
TF9URVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgMHg4NENCCisjZGVmaW5lIEdMX1RFWFRV
UkUxMiAgICAgICAgICAgICAgICAgICAgICAweDg0Q0MKKyNkZWZpbmUgR0xfVEVYVFVSRTEzICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDRAorI2RlZmluZSBHTF9URVhUVVJFMTQgICAgICAgICAg
ICAgICAgICAgICAgMHg4NENFCisjZGVmaW5lIEdMX1RFWFRVUkUxNSAgICAgICAgICAgICAgICAg
ICAgICAweDg0Q0YKKyNkZWZpbmUgR0xfVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDB4
ODREMAorI2RlZmluZSBHTF9URVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgMHg4NEQxCisj
ZGVmaW5lIEdMX1RFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICAweDg0RDIKKyNkZWZpbmUg
R0xfVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDB4ODREMworI2RlZmluZSBHTF9URVhU
VVJFMjAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ0CisjZGVmaW5lIEdMX1RFWFRVUkUyMSAg
ICAgICAgICAgICAgICAgICAgICAweDg0RDUKKyNkZWZpbmUgR0xfVEVYVFVSRTIyICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRENgorI2RlZmluZSBHTF9URVhUVVJFMjMgICAgICAgICAgICAgICAg
ICAgICAgMHg4NEQ3CisjZGVmaW5lIEdMX1RFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICAw
eDg0RDgKKyNkZWZpbmUgR0xfVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDB4ODREOQor
I2RlZmluZSBHTF9URVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgMHg4NERBCisjZGVmaW5l
IEdMX1RFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAgICAweDg0REIKKyNkZWZpbmUgR0xfVEVY
VFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDB4ODREQworI2RlZmluZSBHTF9URVhUVVJFMjkg
ICAgICAgICAgICAgICAgICAgICAgMHg4NERECisjZGVmaW5lIEdMX1RFWFRVUkUzMCAgICAgICAg
ICAgICAgICAgICAgICAweDg0REUKKyNkZWZpbmUgR0xfVEVYVFVSRTMxICAgICAgICAgICAgICAg
ICAgICAgIDB4ODRERgorI2RlZmluZSBHTF9BQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAg
MHg4NEUwCisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworI2RlZmluZSBHTF9SRVBFQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgyOTAxCisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAg
ICAgICAgICAgICAweDgxMkYKKyNkZWZpbmUgR0xfTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAg
ICAgIDB4ODM3MAorCisvKiBVbmlmb3JtIFR5cGVzICovCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzIg
ICAgICAgICAgICAgICAgICAgICAweDhCNTAKKyNkZWZpbmUgR0xfRkxPQVRfVkVDMyAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1MQorI2RlZmluZSBHTF9GTE9BVF9WRUM0ICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUyCisjZGVmaW5lIEdMX0lOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAw
eDhCNTMKKyNkZWZpbmUgR0xfSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NAor
I2RlZmluZSBHTF9JTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU1CisjZGVmaW5l
IEdMX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTYKKyNkZWZpbmUgR0xfQk9P
TF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NworI2RlZmluZSBHTF9CT09MX1ZFQzMg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjU4CisjZGVmaW5lIEdMX0JPT0xfVkVDNCAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMiAgICAgICAgICAgICAg
ICAgICAgIDB4OEI1QQorI2RlZmluZSBHTF9GTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAg
MHg4QjVCCisjZGVmaW5lIEdMX0ZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICAweDhCNUMK
KyNkZWZpbmUgR0xfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDB4OEI1RQorI2RlZmlu
ZSBHTF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgMHg4QjYwCisKKy8qIFZlcnRleCBB
cnJheXMgKi8KKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEICAgICAgICAw
eDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICAweDg2
MjMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICAweDg2MjQK
KyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICAweDg2MjUKKyNk
ZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAweDg4NkEKKyNkZWZp
bmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICAweDg2NDUKKyNkZWZpbmUg
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyAweDg4OUYKKworLyogUmVhZCBG
b3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFICAgMHg4
QjlBCisjZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUIDB4OEI5Qgor
CisvKiBTaGFkZXIgU291cmNlICovCisjZGVmaW5lIEdMX0NPTVBJTEVfU1RBVFVTICAgICAgICAg
ICAgICAgICAweDhCODEKKyNkZWZpbmUgR0xfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAg
IDB4OEI4NAorI2RlZmluZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCAgICAgICAgICAgMHg4Qjg4
CisjZGVmaW5lIEdMX1NIQURFUl9DT01QSUxFUiAgICAgICAgICAgICAgICAweDhERkEKKworLyog
U2hhZGVyIEJpbmFyeSAqLworI2RlZmluZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICAg
ICAgMHg4REY4CisjZGVmaW5lIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICAweDhE
RjkKKworLyogU2hhZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KKyNkZWZpbmUgR0xf
TE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDB4OERGMAorI2RlZmluZSBHTF9NRURJVU1f
RkxPQVQgICAgICAgICAgICAgICAgICAgMHg4REYxCisjZGVmaW5lIEdMX0hJR0hfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAweDhERjIKKyNkZWZpbmUgR0xfTE9XX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OERGMworI2RlZmluZSBHTF9NRURJVU1fSU5UICAgICAgICAgICAgICAgICAg
ICAgMHg4REY0CisjZGVmaW5lIEdMX0hJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDhE
RjUKKworLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqLworI2RlZmluZSBHTF9GUkFNRUJVRkZFUiAg
ICAgICAgICAgICAgICAgICAgMHg4RDQwCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUiAgICAgICAg
ICAgICAgICAgICAweDhENDEKKworI2RlZmluZSBHTF9SR0JBNCAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDU2CisjZGVmaW5lIEdMX1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwNTcKKyNkZWZpbmUgR0xfUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2Mgor
I2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgMHg4MUE1CisjZGVmaW5l
IEdMX1NURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICAweDE5MDEKKyNkZWZpbmUgR0xfU1RF
TkNJTF9JTkRFWDggICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJV
RkZFUl9XSURUSCAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0hF
SUdIVCAgICAgICAgICAgIDB4OEQ0MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxf
Rk9STUFUICAgMHg4RDQ0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAg
ICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDB4OEQ1
MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgMHg4RDUyCisjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xf
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5ERVJC
VUZGRVJfU1RFTkNJTF9TSVpFICAgICAgMHg4RDU1CisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgMHg4Q0QwCisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgICAgICAgICAgIDB4OENEMQorI2RlZmluZSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICAweDhDRDIKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgMHg4
Q0QzCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDB4OENFMAor
I2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgMHg4RDAwCisjZGVmaW5l
IEdMX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICAweDhEMjAKKworI2RlZmluZSBHTF9O
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDB4OENENQorI2RlZmluZSBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgMHg4Q0Q3CisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDB4OENEOQorI2RlZmlu
ZSBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAweDhDREQKKwor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgMHg4Q0E2CisjZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAweDhDQTcKKyNkZWZpbmUgR0xfTUFY
X1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OICAweDA1MDYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBH
TCBjb3JlIGZ1bmN0aW9ucy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEFjdGl2ZVRleHR1cmUgKEdMZW51bSB0ZXh0dXJlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQXR0YWNoU2hhZGVyIChHTHVpbnQg
cHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEJpbmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwg
Y29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmluZEJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZl
cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRUZXh0dXJlIChH
TGVudW0gdGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEJsZW5kQ29sb3IgKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvbiAoIEdMZW51bSBtb2RlICk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAoR0xlbnVtIG1v
ZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xCbGVuZEZ1bmMgKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChHTGVu
dW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBo
YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJ1ZmZlckRhdGEgKEdM
ZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhLCBHTGVudW0g
dXNhZ2UpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZmZXJTdWJE
YXRhIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29u
c3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyIChHTGJpdGZpZWxkIG1hc2spOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckNvbG9yIChHTGNsYW1wZiByZWQsIEdM
Y2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyRGVwdGhmIChHTGNsYW1wZiBkZXB0aCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyU3RlbmNpbCAoR0xp
bnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvbG9yTWFzayAo
R0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFu
IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcGlsZVNo
YWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQg
Ym9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbENvcHlUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICBHTF9BUElFTlRS
WSBnbENyZWF0ZVByb2dyYW0gKHZvaWQpOworR0xfQVBJQ0FMTCBHTHVpbnQgICAgICAgR0xfQVBJ
RU5UUlkgZ2xDcmVhdGVTaGFkZXIgKEdMZW51bSB0eXBlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2UgKEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlQnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChH
THVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU2hhZGVyIChH
THVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVs
ZXRlVGV4dHVyZXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlcHRoRnVuYyAoR0xlbnVtIGZ1bmMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aE1hc2sgKEdMYm9vbGVh
biBmbGFnKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5n
ZWYgKEdMY2xhbXBmIHpOZWFyLCBHTGNsYW1wZiB6RmFyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGV0YWNoU2hhZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNo
YWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGUgKEdM
ZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXMgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xz
aXplaSBjb3VudCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdF
bGVtZW50cyAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xF
bmFibGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmluaXNoICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWludCByZW5k
ZXJidWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0
ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5CdWZmZXJzIChHTHNpemVpIG4sIEdMdWlu
dCogYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbmVy
YXRlTWlwbWFwIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogZnJhbWVidWZmZXJz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuUmVuZGVyYnVmZmVy
cyAoR0xzaXplaSBuLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5UZXh0dXJlcyAoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1
cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlQXR0
cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybSAoR0x1
aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMp
OworR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlv
biAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJvb2xlYW52IChHTGVudW0gcG5hbWUsIEdMYm9vbGVh
biogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVm
ZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFt
cyk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lk
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RmxvYXR2IChHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2IChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFByb2dyYW1pdiAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1J
bmZvTG9nIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgs
IEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRTaGFkZXJpdiAoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVySW5mb0xvZyAo
R0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciog
aW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBl
LCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSk7CitHTF9BUElDQUxMIGNv
bnN0IEdMdWJ5dGUqIEdMX0FQSUVOVFJZIGdsR2V0U3RyaW5nIChHTGVudW0gbmFtZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcmZ2IChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtZnYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlv
biwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0VW5pZm9ybWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3Jt
TG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAoR0x1aW50IGlu
ZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYml2IChHTHVpbnQgaW5kZXgsIEdMZW51
bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEhpbnQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgR0xib29s
ZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNCdWZmZXIgKEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdMZW51bSBjYXApOworR0xf
QVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc0ZyYW1lYnVmZmVyIChHTHVpbnQg
ZnJhbWVidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1By
b2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVO
VFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCBH
TGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1NoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9B
UElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzVGV4dHVyZSAoR0x1aW50IHRleHR1
cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdM
ZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5r
UHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQaXhlbFN0b3JlaSAoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFj
dG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsUmVhZFBpeGVscyAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbGVhc2VTaGFkZXJDb21waWxlciAo
dm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xTYW1wbGVDb3ZlcmFnZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBH
THNpemVpIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNo
YWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiog
c3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBt
YXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmNT
ZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNr
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1hc2sgKEdM
dWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNp
bE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE9wIChHTGVudW0gZmFpbCwgR0xlbnVtIHpm
YWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xTdGVuY2lsT3BTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZh
aWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZiAoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
Y29uc3QgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBw
YXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRl
cml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTJEIChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybTFpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xm
bG9hdCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJm
diAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVW5pZm9ybTJpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNm
IChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xpbnQgeik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0zaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xp
bnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZnYgKEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpIChHTGludCBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm1NYXRyaXgyZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgzZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVz
ZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVmFsaWRhdGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5keCwgR0xm
bG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0
cmliMWZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmYgKEdMdWludCBpbmR4LCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjNmIChH
THVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjNmdiAoR0x1aW50IGluZHgs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliNGZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliUG9p
bnRlciAoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9y
bWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3BvcnQgKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wyX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMy
L2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc3MyBAQAorI2lmbmRlZiBfX2dsMmV4dF9oXworI2RlZmluZSBfX2dsMmV4dF9o
XworCisvKiAkUmV2aXNpb246IDEwNzk4ICQgb24gJERhdGU6OiAyMDEwLTAzLTE5IDE3OjM0OjMw
IC0wNzAwICMkICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYK
KworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNv
ZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDov
L29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworI2lmbmRlZiBHTF9BUElFTlRS
WVAKKyMgICBkZWZpbmUgR0xfQVBJRU5UUllQIEdMX0FQSUVOVFJZKgorI2VuZGlmCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogT0VTIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKworLyogR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgKi8KKyNpZm5kZWYg
R0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKKyNkZWZpbmUgR0xfRVRDMV9SR0I4
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENjQKKyNlbmRp
ZgorCisvKiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlICovCisjaWZuZGVmIEdM
X09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdC
OF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTAKKyNkZWZpbmUg
R0xfUEFMRVRURTRfUkdCQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCOTEKKyNkZWZpbmUgR0xfUEFMRVRURTRfUjVfRzZfQjVfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCOTIKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCQTRfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTMKKyNkZWZpbmUgR0xfUEFMRVRURTRf
UkdCNV9BMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTQKKyNkZWZp
bmUgR0xfUEFMRVRURThfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhCOTUKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCQThfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCOTYKKyNkZWZpbmUgR0xfUEFMRVRURThfUjVfRzZfQjVfT0VT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTcKKyNkZWZpbmUgR0xfUEFMRVRU
RThfUkdCQTRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTgKKyNk
ZWZpbmUgR0xfUEFMRVRURThfUkdCNV9BMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCOTkKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGgyNCAqLworI2lmbmRlZiBHTF9P
RVNfZGVwdGgyNAorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQyNF9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODFBNgorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aDMyICov
CisjaWZuZGVmIEdMX09FU19kZXB0aDMyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE3CisjZW5kaWYKKworLyogR0xf
T0VTX2RlcHRoX3RleHR1cmUgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlz
IGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX0VHTF9pbWFnZSAqLworI2lmbmRlZiBHTF9PRVNf
RUdMX2ltYWdlCit0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CisjZW5kaWYKKworLyogR0xf
T0VTX2VsZW1lbnRfaW5kZXhfdWludCAqLworI2lmbmRlZiBHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA1CisjZW5kaWYKKworLyogR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eSAqLworI2lmbmRlZiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dS
QU1fQklOQVJZX0xFTkdUSF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisj
ZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUyAgICAgICAgICAgICAgICAg
ICAgICAgMHg4N0ZFCisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4N0ZGCisjZW5kaWYKKworLyogR0xfT0VTX21hcGJ1ZmZl
ciAqLworI2lmbmRlZiBHTF9PRVNfbWFwYnVmZmVyCisjZGVmaW5lIEdMX1dSSVRFX09OTFlfT0VT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEI5CisjZGVmaW5lIEdM
X0JVRkZFUl9BQ0NFU1NfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
OEJCCisjZGVmaW5lIEdMX0JVRkZFUl9NQVBQRURfT0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4OEJDCisjZGVmaW5lIEdMX0JVRkZFUl9NQVBfUE9JTlRFUl9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJECisjZW5kaWYKKworLyogR0xfT0VTX3Bh
Y2tlZF9kZXB0aF9zdGVuY2lsICovCisjaWZuZGVmIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bAorI2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRGOQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisK
Ky8qIEdMX09FU19yZ2I4X3JnYmE4ICovCisjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CisjZGVm
aW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU4CisjZW5kaWYKKworLyogR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzICovCisjaWZuZGVmIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworI2RlZmlu
ZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyAgICAgICAgICAgICAgICAg
IDB4OEI4QgorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsMSAqLworI2lmbmRlZiBHTF9PRVNf
c3RlbmNpbDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDFfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhENDYKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RlbmNpbDQgKi8K
KyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWw0CisjZGVmaW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CisjZW5kaWYKKworLyogR0xf
T0VTX3RleHR1cmVfM0QgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKKyNkZWZpbmUgR0xf
VEVYVFVSRV9XUkFQX1JfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NzIKKyNkZWZpbmUgR0xfVEVYVFVSRV8zRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwNkYKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzNEX09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkEKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRV
UkVfU0laRV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNzMKKyNkZWZpbmUg
R0xfU0FNUExFUl8zRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCNUYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFXzNEX1pPRkZT
RVRfT0VTICAgICAgICAweDhDRDQKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdCAq
LworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisv
KiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9k
dWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisjZGVmaW5lIEdMX0hBTEZf
RkxPQVRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYxCisj
ZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgKi8KKy8qIE5vIG5l
dyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3Rl
eHR1cmVfbnBvdCAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5z
aW9uLiAqLworCisvKiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9P
RVNfdmVydGV4X2FycmF5X29iamVjdAorI2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElOR19P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCNQorI2VuZGlmCisKKy8qIEdMX09F
U192ZXJ0ZXhfaGFsZl9mbG9hdCAqLworLyogR0xfSEFMRl9GTE9BVF9PRVMgZGVmaW5lZCBpbiBH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFscmVhZHkuICovCisKKy8qIEdMX09FU192ZXJ0ZXhf
dHlwZV8xMF8xMF8xMF8yICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8y
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8xMF8xMF8xMF8yX09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4REY2CisjZGVmaW5lIEdMX0lOVF8xMF8xMF8xMF8yX09FUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4REY3CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qCisgKiBBTUQgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBH
TF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9BTURfY29tcHJlc3Nl
ZF8zRENfdGV4dHVyZQorI2RlZmluZSBHTF8zRENfWF9BTUQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODdGOQorI2RlZmluZSBHTF8zRENfWFlfQU1EICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGQQorI2VuZGlmCisKKy8q
IEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVz
c2VkX0FUQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FUQ19SR0JfQU1EICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzkyCisjZGVmaW5lIEdMX0FUQ19SR0JBX0VYUExJ
Q0lUX0FMUEhBX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzkzCisjZGVmaW5lIEdM
X0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQgICAgICAgICAgICAgICAgICAgICAgMHg4
N0VFCisjZW5kaWYKKworLyogR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IgKi8KKyNpZm5kZWYg
R0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IKKyNkZWZpbmUgR0xfQ09VTlRFUl9UWVBFX0FNRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzAKKyNkZWZpbmUgR0xfQ09V
TlRFUl9SQU5HRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzEK
KyNkZWZpbmUgR0xfVU5TSUdORURfSU5UNjRfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCQzIKKyNkZWZpbmUgR0xfUEVSQ0VOVEFHRV9BTUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhCQzMKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRf
QVZBSUxBQkxFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzQKKyNkZWZpbmUgR0xf
UEVSRk1PTl9SRVNVTFRfU0laRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
QzUKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRfQU1EICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCQzYKKyNlbmRpZgorCisvKiBHTF9BTURfcHJvZ3JhbV9iaW5hcnlfWjQw
MCAqLworI2lmbmRlZiBHTF9BTURfcHJvZ3JhbV9iaW5hcnlfWjQwMAorI2RlZmluZSBHTF9aNDAw
X0JJTkFSWV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc0MAor
I2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRVhUIGV4dGVuc2lvbiB0b2tlbnMKKyAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRVhUX2JsZW5kX21pbm1heCAqLworI2lmbmRlZiBH
TF9FWFRfYmxlbmRfbWlubWF4CisjZGVmaW5lIEdMX01JTl9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA3CisjZGVmaW5lIEdMX01BWF9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA4CisjZW5kaWYK
KworLyogR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIgKi8KKyNpZm5kZWYgR0xfRVhUX2Rpc2Nh
cmRfZnJhbWVidWZmZXIKKyNkZWZpbmUgR0xfQ09MT1JfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAKKyNkZWZpbmUgR0xfREVQVEhfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDEKKyNkZWZpbmUgR0xf
U1RFTkNJTF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4
MDIKKyNlbmRpZgorCisvKiBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgKi8KKy8qIE5vIG5ldyB0
b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfRVhUX3JlYWRf
Zm9ybWF0X2JncmEgKi8KKyNpZm5kZWYgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKKyNkZWZpbmUg
R0xfQkdSQV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAweDgzNjUKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhUICAgICAgICAgICAgICAgICAgICAgICAweDgzNjYKKyNlbmRpZgorCisvKiBHTF9FWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEZFCisjZGVmaW5lIEdMX01BWF9URVhUVVJFX01B
WF9BTklTT1RST1BZX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHg4NEZGCisjZW5kaWYKKwor
LyogR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OAorI2RlZmluZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQorI2VuZGlmCisKKy8qIEdMX0VYVF90
ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlw
ZV8yXzEwXzEwXzEwX1JFVgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVZf
RVhUICAgICAgICAgICAgICAgICAgICAgIDB4ODM2OAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgorICogSU1HIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyog
R0xfSU1HX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19wcm9ncmFtX2JpbmFyeQor
I2RlZmluZSBHTF9TR1hfUFJPR1JBTV9CSU5BUllfSU1HICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTEzMAorI2VuZGlmCisKKy8qIEdMX0lNR19yZWFkX2Zvcm1hdCAqLworI2lmbmRl
ZiBHTF9JTUdfcmVhZF9mb3JtYXQKKyNkZWZpbmUgR0xfQkdSQV9JTUcgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNF9SRVZfSU1HICAgICAgICAgICAgICAgICAgICAgICAweDgzNjUKKyNlbmRp
ZgorCisvKiBHTF9JTUdfc2hhZGVyX2JpbmFyeSAqLworI2lmbmRlZiBHTF9JTUdfc2hhZGVyX2Jp
bmFyeQorI2RlZmluZSBHTF9TR1hfQklOQVJZX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEMwQQorI2VuZGlmCisKKy8qIEdMX0lNR190ZXh0dXJlX2NvbXByZXNz
aW9uX3B2cnRjICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcgICAgICAgICAgICAgICAg
ICAgICAgMHg4QzAwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcg
ICAgICAgICAgICAgICAgICAgICAgMHg4QzAxCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HICAgICAgICAgICAgICAgICAgICAgMHg4QzAyCisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAgICAgICAgICAgMHg4QzAz
CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBOViBleHRlbnNpb24gdG9rZW5zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX05WX2ZlbmNlICovCisjaWZuZGVmIEdMX05WX2Zl
bmNlCisjZGVmaW5lIEdMX0FMTF9DT01QTEVURURfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEYyCisjZGVmaW5lIEdMX0ZFTkNFX1NUQVRVU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEYzCisjZGVmaW5lIEdMX0ZFTkNFX0NPTkRJ
VElPTl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY0CisjZW5kaWYK
KworLyogR0xfTlZfY292ZXJhZ2Vfc2FtcGxlICovCisjaWZuZGVmIEdMX05WX2NvdmVyYWdlX3Nh
bXBsZQorI2RlZmluZSBHTF9DT1ZFUkFHRV9DT01QT05FTlRfTlYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEVEMAorI2RlZmluZSBHTF9DT1ZFUkFHRV9DT01QT05FTlQ0X05WICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMQorI2RlZmluZSBHTF9DT1ZFUkFHRV9B
VFRBQ0hNRU5UX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMgorI2RlZmlu
ZSBHTF9DT1ZFUkFHRV9CVUZGRVJTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEVEMworI2RlZmluZSBHTF9DT1ZFUkFHRV9TQU1QTEVTX05WICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEVENAorI2RlZmluZSBHTF9DT1ZFUkFHRV9BTExfRlJBR01FTlRT
X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENQorI2RlZmluZSBHTF9DT1ZFUkFH
RV9FREdFX0ZSQUdNRU5UU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENgorI2Rl
ZmluZSBHTF9DT1ZFUkFHRV9BVVRPTUFUSUNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEVENworI2RlZmluZSBHTF9DT1ZFUkFHRV9CVUZGRVJfQklUX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2VuZGlmCisKKy8qIEdMX05WX2RlcHRoX25vbmxp
bmVhciAqLworI2lmbmRlZiBHTF9OVl9kZXB0aF9ub25saW5lYXIKKyNkZWZpbmUgR0xfREVQVEhf
Q09NUE9ORU5UMTZfTk9OTElORUFSX05WICAgICAgICAgICAgICAgICAgICAgICAweDhFMkMKKyNl
bmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFFDT00gZXh0ZW5zaW9uIHRva2VucworICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9RQ09NX2RyaXZlcl9jb250cm9sICovCisvKiBObyBu
ZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX1FDT01f
ZXh0ZW5kZWRfZ2V0ICovCisjaWZuZGVmIEdMX1FDT01fZXh0ZW5kZWRfZ2V0CisjZGVmaW5lIEdM
X1RFWFRVUkVfV0lEVEhfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QkQyCisjZGVmaW5lIEdMX1RFWFRVUkVfSEVJR0hUX1FDT00gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QkQzCisjZGVmaW5lIEdMX1RFWFRVUkVfREVQVEhfUUNPTSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ0CisjZGVmaW5lIEdMX1RFWFRVUkVfSU5U
RVJOQUxfRk9STUFUX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ1CisjZGVmaW5l
IEdMX1RFWFRVUkVfRk9STUFUX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QkQ2CisjZGVmaW5lIEdMX1RFWFRVUkVfVFlQRV9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QkQ3CisjZGVmaW5lIEdMX1RFWFRVUkVfSU1BR0VfVkFMSURfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ4CisjZGVmaW5lIEdMX1RFWFRVUkVf
TlVNX0xFVkVMU19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ5CisjZGVm
aW5lIEdMX1RFWFRVUkVfVEFSR0VUX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QkRBCisjZGVmaW5lIEdMX1RFWFRVUkVfT0JKRUNUX1ZBTElEX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QkRCCisjZGVmaW5lIEdMX1NUQVRFX1JFU1RPUkUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkRDCisjZW5kaWYKKworLyogR0xf
UUNPTV9leHRlbmRlZF9nZXQyICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhp
cyBleHRlbnNpb24uICovCisKKy8qIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lm
bmRlZiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUKKyNkZWZpbmUgR0xfUEVSRk1PTl9HTE9C
QUxfTU9ERV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQTAKKyNlbmRpZgor
CisvKiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNPTV93cml0
ZW9ubHlfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1dSSVRFT05MWV9SRU5ERVJJTkdfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODIzCisjZW5kaWYKKworLyogR0xfUUNPTV90aWxl
ZF9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDAxCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklU
Ml9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDA4CisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklU
NV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDQwCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
MF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMjAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
M19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAxMDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
Nl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDA4MDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDQwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMjAwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUg
R0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAxMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQxX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZG
RVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUg
R0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDA4MDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ0X1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZG
RVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUg
R0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDQwMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ3X1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KgorICogRW5kIG9mIGV4dGVuc2lvbiB0b2tlbnMsIHN0YXJ0IG9mIGNvcnJlc3BvbmRpbmcgZXh0
ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSoKKyAqIE9FUyBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
IEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19j
b21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisjZGVmaW5lIEdMX09FU19jb21wcmVzc2VkX0VU
QzFfUkdCOF90ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRl
ZF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUK
KyNkZWZpbmUgR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4dHVyZSAxCisjZW5kaWYKKwor
LyogR0xfT0VTX2RlcHRoMjQgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMjQKKyNkZWZpbmUgR0xf
T0VTX2RlcHRoMjQgMQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aDMyICovCisjaWZuZGVmIEdM
X09FU19kZXB0aDMyCisjZGVmaW5lIEdMX09FU19kZXB0aDMyIDEKKyNlbmRpZgorCisvKiBHTF9P
RVNfZGVwdGhfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGhfdGV4dHVyZQorI2RlZmlu
ZSBHTF9PRVNfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKworLyogR0xfT0VTX0VHTF9pbWFnZSAq
LworI2lmbmRlZiBHTF9PRVNfRUdMX2ltYWdlCisjZGVmaW5lIEdMX09FU19FR0xfaW1hZ2UgMQor
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VT
IGltYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVHTEltYWdlVGFyZ2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZU9FUyAoR0xlbnVtIHRhcmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7
CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRUdMSU1BR0VUQVJHRVRU
RVhUVVJFMkRPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVHTElNQUdFVEFSR0VUUkVOREVSQlVGRkVS
U1RPUkFHRU9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKKyNl
bmRpZgorCisvKiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICovCisjaWZuZGVmIEdMX09FU19l
bGVtZW50X2luZGV4X3VpbnQKKyNkZWZpbmUgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAxCisj
ZW5kaWYKKworLyogR0xfT0VTX2Zib19yZW5kZXJfbWlwbWFwICovCisjaWZuZGVmIEdMX09FU19m
Ym9fcmVuZGVyX21pcG1hcAorI2RlZmluZSBHTF9PRVNfZmJvX3JlbmRlcl9taXBtYXAgMQorI2Vu
ZGlmCisKKy8qIEdMX09FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaCAqLworI2lmbmRlZiBHTF9P
RVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hpZ2gKKyNkZWZpbmUgR0xfT0VTX2ZyYWdtZW50X3ByZWNp
c2lvbl9oaWdoIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisj
aWZuZGVmIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfT0VTX2dldF9wcm9n
cmFtX2JpbmFyeSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyAoR0x1aW50IHByb2dyYW0sIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGVudW0gKmJpbmFyeUZvcm1hdCwgR0x2b2lk
ICpiaW5hcnkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUHJvZ3JhbUJpbmFyeU9F
UyAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsIGNvbnN0IEdMdm9pZCAqYmlu
YXJ5LCBHTGludCBsZW5ndGgpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVFBST0dSQU1CSU5BUllPRVNQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGVudW0gKmJpbmFyeUZvcm1hdCwgR0x2b2lkICpiaW5h
cnkpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xQUk9HUkFNQklOQVJZT0VTUFJP
QykgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQgKmJp
bmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyNlbmRpZgorCisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisj
aWZuZGVmIEdMX09FU19tYXBidWZmZXIKKyNkZWZpbmUgR0xfT0VTX21hcGJ1ZmZlciAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1h
cEJ1ZmZlck9FUyAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGFjY2Vzcyk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiBHTF9BUElFTlRSWSBnbFVubWFwQnVmZmVyT0VTIChHTGVudW0gdGFyZ2V0KTsKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYg
dm9pZCogKEdMX0FQSUVOVFJZUCBQRk5HTE1BUEJVRkZFUk9FU1BST0MpIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYWNjZXNzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xV
Tk1BUEJVRkZFUk9FU1BST0MpIChHTGVudW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUQlVGRkVSUE9JTlRFUlZPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJhbXMpOworI2VuZGlmCisKKy8qIEdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCAqLworI2lmbmRlZiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyNk
ZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIDEKKyNlbmRpZgorCisvKiBHTF9PRVNf
cmdiOF9yZ2JhOCAqLworI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAorI2RlZmluZSBHTF9PRVNf
cmdiOF9yZ2JhOCAxCisjZW5kaWYKKworLyogR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICov
CisjaWZuZGVmIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworI2RlZmluZSBHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgMQorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsMSAqLworI2lm
bmRlZiBHTF9PRVNfc3RlbmNpbDEKKyNkZWZpbmUgR0xfT0VTX3N0ZW5jaWwxIDEKKyNlbmRpZgor
CisvKiBHTF9PRVNfc3RlbmNpbDQgKi8KKyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWw0CisjZGVmaW5l
IEdMX09FU19zdGVuY2lsNCAxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KKyNp
Zm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQorI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFRl
eEltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGlu
dCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVs
cyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTNET0VTIChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4U3ViSW1hZ2UzRE9FUyAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTNET0VTIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQg
bGV2ZWwsIEdMaW50IHpvZmZzZXQpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTFRFWElNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYU1VC
SU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQqIHBpeGVscyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhT
VUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTENPTVBSRVNTRURURVhJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBH
THZvaWQqIGRhdGEpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT01QUkVTU0VE
VEVYU1VCSU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUzRE9FUykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2ht
ZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50
IHpvZmZzZXQpOworI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0ICovCisjaWZuZGVm
IEdMX09FU190ZXh0dXJlX2Zsb2F0CisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2Zsb2F0IDEKKyNl
bmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyCisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciAxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAqLworI2lmbmRlZiBH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICovCisj
aWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyCisjZGVmaW5lIEdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9u
cG90ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX25wb3QKKyNkZWZpbmUgR0xfT0VTX3RleHR1
cmVfbnBvdCAxCisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgKi8KKyNp
Zm5kZWYgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyNkZWZpbmUgR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0ZXhBcnJheU9FUyAoR0x1aW50IGFycmF5KTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlbGV0ZVZlcnRleEFycmF5c09FUyAoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQgKmFycmF5cyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xH
ZW5WZXJ0ZXhBcnJheXNPRVMgKEdMc2l6ZWkgbiwgR0x1aW50ICphcnJheXMpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1ZlcnRleEFycmF5T0VTIChHTHVpbnQgYXJyYXkp
OworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEJJTkRWRVJURVhBUlJB
WU9FU1BST0MpIChHTHVpbnQgYXJyYXkpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmFy
cmF5cyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFTlZFUlRFWEFSUkFZU09F
U1BST0MpIChHTHNpemVpIG4sIEdMdWludCAqYXJyYXlzKTsKK3R5cGVkZWYgR0xib29sZWFuIChH
TF9BUElFTlRSWVAgUEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQykgKEdMdWludCBhcnJheSk7Cisj
ZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU192
ZXJ0ZXhfaGFsZl9mbG9hdAorI2RlZmluZSBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgMQorI2Vu
ZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yICovCisjaWZuZGVmIEdMX09F
U192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yCisjZGVmaW5lIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8x
MF8xMF8yIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFNRCBleHRlbnNpb24g
ZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkXzNE
Q190ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlCisjZGVm
aW5lIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9BTURf
Y29tcHJlc3NlZF9BVENfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9BTURfY29tcHJlc3NlZF9BVENf
dGV4dHVyZQorI2RlZmluZSBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSAxCisjZW5kaWYK
KworLyogQU1EX3BlcmZvcm1hbmNlX21vbml0b3IgKi8KKyNpZm5kZWYgR0xfQU1EX3BlcmZvcm1h
bmNlX21vbml0b3IKKyNkZWZpbmUgR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IgMQorI2lmZGVm
IEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBl
cmZNb25pdG9yR3JvdXBzQU1EIChHTGludCAqbnVtR3JvdXBzLCBHTHNpemVpIGdyb3Vwc1NpemUs
IEdMdWludCAqZ3JvdXBzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZN
b25pdG9yQ291bnRlcnNBTUQgKEdMdWludCBncm91cCwgR0xpbnQgKm51bUNvdW50ZXJzLCBHTGlu
dCAqbWF4QWN0aXZlQ291bnRlcnMsIEdMc2l6ZWkgY291bnRlclNpemUsIEdMdWludCAqY291bnRl
cnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cFN0
cmluZ0FNRCAoR0x1aW50IGdyb3VwLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xjaGFyICpncm91cFN0cmluZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQ
ZXJmTW9uaXRvckNvdW50ZXJTdHJpbmdBTUQgKEdMdWludCBncm91cCwgR0x1aW50IGNvdW50ZXIs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmNvdW50ZXJTdHJpbmcp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVySW5m
b0FNRCAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQg
KmRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2VuUGVyZk1vbml0b3JzQU1E
IChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRGVsZXRlUGVyZk1vbml0b3JzQU1EIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsU2VsZWN0UGVyZk1vbml0b3JDb3VudGVy
c0FNRCAoR0x1aW50IG1vbml0b3IsIEdMYm9vbGVhbiBlbmFibGUsIEdMdWludCBncm91cCwgR0xp
bnQgbnVtQ291bnRlcnMsIEdMdWludCAqY291bnRlcnNMaXN0KTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbEJlZ2luUGVyZk1vbml0b3JBTUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVuZFBlcmZNb25pdG9yQU1EIChHTHVpbnQgbW9uaXRv
cik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJE
YXRhQU1EIChHTHVpbnQgbW9uaXRvciwgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGRhdGFTaXplLCBH
THVpbnQgKmRhdGEsIEdMaW50ICpieXRlc1dyaXR0ZW4pOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SR1JPVVBTQU1EUFJPQykgKEdMaW50ICpu
dW1Hcm91cHMsIEdMc2l6ZWkgZ3JvdXBzU2l6ZSwgR0x1aW50ICpncm91cHMpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNPVU5URVJTQU1EUFJPQykgKEdM
dWludCBncm91cCwgR0xpbnQgKm51bUNvdW50ZXJzLCBHTGludCAqbWF4QWN0aXZlQ291bnRlcnMs
IEdMc2l6ZWkgY291bnRlclNpemUsIEdMdWludCAqY291bnRlcnMpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkdST1VQU1RSSU5HQU1EUFJPQykgKEdMdWlu
dCBncm91cCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZ3JvdXBT
dHJpbmcpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNP
VU5URVJTVFJJTkdBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqY291bnRlclN0cmluZyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUklORk9BTURQ
Uk9DKSAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQg
KmRhdGEpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRU5QRVJGTU9OSVRPUlNB
TURQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKm1vbml0b3JzKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMREVMRVRFUEVSRk1PTklUT1JTQU1EUFJPQykgKEdMc2l6ZWkgbiwgR0x1
aW50ICptb25pdG9ycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNFTEVDVFBF
UkZNT05JVE9SQ09VTlRFUlNBTURQUk9DKSAoR0x1aW50IG1vbml0b3IsIEdMYm9vbGVhbiBlbmFi
bGUsIEdMdWludCBncm91cCwgR0xpbnQgbnVtQ291bnRlcnMsIEdMdWludCAqY291bnRlcnNMaXN0
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQkVHSU5QRVJGTU9OSVRPUkFNRFBS
T0MpIChHTHVpbnQgbW9uaXRvcik7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVO
RFBFUkZNT05JVE9SQU1EUFJPQykgKEdMdWludCBtb25pdG9yKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JDT1VOVEVSREFUQUFNRFBST0MpIChHTHVpbnQg
bW9uaXRvciwgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGRhdGFTaXplLCBHTHVpbnQgKmRhdGEsIEdM
aW50ICpieXRlc1dyaXR0ZW4pOworI2VuZGlmCisKKy8qIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9a
NDAwICovCisjaWZuZGVmIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwCisjZGVmaW5lIEdMX0FN
RF9wcm9ncmFtX2JpbmFyeV9aNDAwIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAq
IEVYVCBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0VY
VF9ibGVuZF9taW5tYXggKi8KKyNpZm5kZWYgR0xfRVhUX2JsZW5kX21pbm1heAorI2RlZmluZSBH
TF9FWFRfYmxlbmRfbWlubWF4IDEKKyNlbmRpZgorCisvKiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1
ZmZlciAqLworI2lmbmRlZiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlcgorI2RlZmluZSBHTF9F
WFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGlzY2FyZEZyYW1lYnVmZmVyRVhUIChHTGVudW0g
dGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRz
KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xESVNDQVJERlJBTUVC
VUZGRVJFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29u
c3QgR0xlbnVtICphdHRhY2htZW50cyk7CisjZW5kaWYKKworI2lmbmRlZiBHTF9FWFRfbXVsdGlf
ZHJhd19hcnJheXMKKyNkZWZpbmUgR0xfRVhUX211bHRpX2RyYXdfYXJyYXlzIDEKKyNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURy
YXdBcnJheXNFWFQgKEdMZW51bSwgR0xpbnQgKiwgR0xzaXplaSAqLCBHTHNpemVpKTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11bHRpRHJhd0VsZW1lbnRzRVhUIChHTGVudW0sIGNv
bnN0IEdMc2l6ZWkgKiwgR0xlbnVtLCBjb25zdCBHTHZvaWQqICosIEdMc2l6ZWkpOworI2VuZGlm
IC8qIEdMX0dMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMTVVMVElEUkFXQVJSQVlTRVhUUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCAqZmlyc3QsIEdM
c2l6ZWkgKmNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTE1VTFRJRFJBV0VMRU1FTlRTRVhUUFJPQykgKEdMZW51bSBtb2RlLCBjb25zdCBH
THNpemVpICpjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogKmluZGljZXMsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCisvKiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAqLwor
I2lmbmRlZiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQorI2RlZmluZSBHTF9FWFRfcmVhZF9mb3Jt
YXRfYmdyYSAxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworI2RlZmluZSBH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgMQorI2VuZGlmCisKKy8qIEdMX0VYVF90
ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IDEKKyNlbmRp
ZgorCisvKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCisjaWZuZGVmIEdM
X0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVf
dHlwZV8yXzEwXzEwXzEwX1JFViAxCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJ
TUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdf
cHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfSU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5l
IEdMX0lNR19wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKworLyogR0xfSU1HX3JlYWRfZm9ybWF0
ICovCisjaWZuZGVmIEdMX0lNR19yZWFkX2Zvcm1hdAorI2RlZmluZSBHTF9JTUdfcmVhZF9mb3Jt
YXQgMQorI2VuZGlmCisKKy8qIEdMX0lNR19zaGFkZXJfYmluYXJ5ICovCisjaWZuZGVmIEdMX0lN
R19zaGFkZXJfYmluYXJ5CisjZGVmaW5lIEdMX0lNR19zaGFkZXJfYmluYXJ5IDEKKyNlbmRpZgor
CisvKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAqLworI2lmbmRlZiBHTF9JTUdf
dGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YworI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVz
c2lvbl9wdnJ0YyAxCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBOViBleHRlbnNp
b24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX05WX2ZlbmNlICovCisj
aWZuZGVmIEdMX05WX2ZlbmNlCisjZGVmaW5lIEdMX05WX2ZlbmNlIDEKKyNpZmRlZiBHTF9HTEVY
VF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVGZW5jZXNO
ViAoR0xzaXplaSwgY29uc3QgR0x1aW50ICopOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2VuRmVuY2VzTlYgKEdMc2l6ZWksIEdMdWludCAqKTsKK0dMX0FQSUNBTEwgR0xib29sZWFu
IEdMX0FQSUVOVFJZIGdsSXNGZW5jZU5WIChHTHVpbnQpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4g
R0xfQVBJRU5UUlkgZ2xUZXN0RmVuY2VOViAoR0x1aW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEdldEZlbmNlaXZOViAoR0x1aW50LCBHTGVudW0sIEdMaW50ICopOworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRmluaXNoRmVuY2VOViAoR0x1aW50KTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFNldEZlbmNlTlYgKEdMdWludCwgR0xlbnVtKTsKKyNlbmRp
ZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVGRU5DRVNOVlBST0MpIChH
THNpemVpIG4sIGNvbnN0IEdMdWludCAqZmVuY2VzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMR0VORkVOQ0VTTlZQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKmZlbmNlcyk7Cit0
eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMSVNGRU5DRU5WUFJPQykgKEdMdWlu
dCBmZW5jZSk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMVEVTVEZFTkNF
TlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
R0VURkVOQ0VJVk5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFy
YW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRklOSVNIRkVOQ0VOVlBST0Mp
IChHTHVpbnQgZmVuY2UpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5D
RU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbik7CisjZW5kaWYKKworLyog
R0xfTlZfY292ZXJhZ2Vfc2FtcGxlICovCisjaWZuZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQor
I2RlZmluZSBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvdmVyYWdlTWFza05WIChHTGJvb2xl
YW4gbWFzayk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3ZlcmFnZU9wZXJhdGlv
bk5WIChHTGVudW0gb3BlcmF0aW9uKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xDT1ZFUkFHRU1BU0tOVlBST0MpIChHTGJvb2xlYW4gbWFzayk7Cit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVSQUdFT1BFUkFUSU9OTlZQUk9DKSAoR0xlbnVtIG9w
ZXJhdGlvbik7CisjZW5kaWYKKworLyogR0xfTlZfZGVwdGhfbm9ubGluZWFyICovCisjaWZuZGVm
IEdMX05WX2RlcHRoX25vbmxpbmVhcgorI2RlZmluZSBHTF9OVl9kZXB0aF9ub25saW5lYXIgMQor
I2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogUUNPTSBleHRlbnNpb24gZnVuY3Rpb25z
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KKyNp
Zm5kZWYgR0xfUUNPTV9kcml2ZXJfY29udHJvbAorI2RlZmluZSBHTF9RQ09NX2RyaXZlcl9jb250
cm9sIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xHZXREcml2ZXJDb250cm9sc1FDT00gKEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6ZSwg
R0x1aW50ICpkcml2ZXJDb250cm9scyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xH
ZXREcml2ZXJDb250cm9sU3RyaW5nUUNPTSAoR0x1aW50IGRyaXZlckNvbnRyb2wsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmRyaXZlckNvbnRyb2xTdHJpbmcpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRW5hYmxlRHJpdmVyQ29udHJvbFFDT00gKEdM
dWludCBkcml2ZXJDb250cm9sKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERpc2Fi
bGVEcml2ZXJDb250cm9sUUNPTSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOworI2VuZGlmCit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVERSSVZFUkNPTlRST0xTUUNPTVBST0MpIChH
TGludCAqbnVtLCBHTHNpemVpIHNpemUsIEdMdWludCAqZHJpdmVyQ29udHJvbHMpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVREUklWRVJDT05UUk9MU1RSSU5HUUNPTVBST0Mp
IChHTHVpbnQgZHJpdmVyQ29udHJvbCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMY2hhciAqZHJpdmVyQ29udHJvbFN0cmluZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEVOQUJMRURSSVZFUkNPTlRST0xRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9s
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRElTQUJMRURSSVZFUkNPTlRST0xR
Q09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9sKTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4
dGVuZGVkX2dldCAqLworI2lmbmRlZiBHTF9RQ09NX2V4dGVuZGVkX2dldAorI2RlZmluZSBHTF9R
Q09NX2V4dGVuZGVkX2dldCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4dHVyZXNRQ09NIChHTHVpbnQgKnRleHR1cmVz
LCBHTGludCBtYXhUZXh0dXJlcywgR0xpbnQgKm51bVRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEV4dEdldEJ1ZmZlcnNRQ09NIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50
IG1heEJ1ZmZlcnMsIEdMaW50ICpudW1CdWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbEV4dEdldFJlbmRlcmJ1ZmZlcnNRQ09NIChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdM
aW50IG1heFJlbmRlcmJ1ZmZlcnMsIEdMaW50ICpudW1SZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEZyYW1lYnVmZmVyc1FDT00gKEdMdWludCAqZnJh
bWVidWZmZXJzLCBHTGludCBtYXhGcmFtZWJ1ZmZlcnMsIEdMaW50ICpudW1GcmFtZWJ1ZmZlcnMp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4TGV2ZWxQYXJhbWV0ZXJp
dlFDT00gKEdMdWludCB0ZXh0dXJlLCBHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRU
ZXhPYmplY3RTdGF0ZU92ZXJyaWRlaVFDT00gKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4U3Vi
SW1hZ2VRQ09NIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQgKnRleGVs
cyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRCdWZmZXJQb2ludGVydlFD
T00gKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVYVFVSRVNRQ09NUFJPQykgKEdMdWludCAqdGV4
dHVyZXMsIEdMaW50IG1heFRleHR1cmVzLCBHTGludCAqbnVtVGV4dHVyZXMpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKmJ1
ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdMaW50ICpudW1CdWZmZXJzKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUkVOREVSQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50
ICpyZW5kZXJidWZmZXJzLCBHTGludCBtYXhSZW5kZXJidWZmZXJzLCBHTGludCAqbnVtUmVuZGVy
YnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVEZSQU1FQlVG
RkVSU1FDT01QUk9DKSAoR0x1aW50ICpmcmFtZWJ1ZmZlcnMsIEdMaW50IG1heEZyYW1lYnVmZmVy
cywgR0xpbnQgKm51bUZyYW1lYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEVYVEdFVFRFWExFVkVMUEFSQU1FVEVSSVZRQ09NUFJPQykgKEdMdWludCB0ZXh0dXJlLCBH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVFRFWE9CSkVDVFNUQVRFT1ZFUlJJREVJ
UUNPTVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVYU1VCSU1BR0VRQ09NUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUQlVGRkVSUE9JTlRFUlZRQ09NUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYKKworLyogR0xfUUNPTV9l
eHRlbmRlZF9nZXQyICovCisjaWZuZGVmIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MgorI2RlZmluZSBH
TF9RQ09NX2V4dGVuZGVkX2dldDIgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFNoYWRlcnNRQ09NIChHTHVpbnQgKnNoYWRl
cnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50ICpudW1TaGFkZXJzKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEV4dEdldFByb2dyYW1zUUNPTSAoR0x1aW50ICpwcm9ncmFtcywgR0xp
bnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Qcm9ncmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVh
biBHTF9BUElFTlRSWSBnbEV4dElzUHJvZ3JhbUJpbmFyeVFDT00gKEdMdWludCBwcm9ncmFtKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFByb2dyYW1CaW5hcnlTb3VyY2VR
Q09NIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBH
TGludCAqbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xF
WFRHRVRTSEFERVJTUUNPTVBST0MpIChHTHVpbnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMs
IEdMaW50ICpudW1TaGFkZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhU
R0VUUFJPR1JBTVNRQ09NUFJPQykgKEdMdWludCAqcHJvZ3JhbXMsIEdMaW50IG1heFByb2dyYW1z
LCBHTGludCAqbnVtUHJvZ3JhbXMpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQ
Rk5HTEVYVElTUFJPR1JBTUJJTkFSWVFDT01QUk9DKSAoR0x1aW50IHByb2dyYW0pOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRQUk9HUkFNQklOQVJZU09VUkNFUUNPTVBS
T0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBH
TGludCAqbGVuZ3RoKTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUg
Ki8KKyNpZm5kZWYgR0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlCisjZGVmaW5lIEdMX1FDT01f
cGVyZm1vbl9nbG9iYWxfbW9kZSAxCisjZW5kaWYKKworLyogR0xfUUNPTV93cml0ZW9ubHlfcmVu
ZGVyaW5nICovCisjaWZuZGVmIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZworI2RlZmluZSBH
TF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgMQorI2VuZGlmCisKKy8qIEdMX1FDT01fdGlsZWRf
cmVuZGVyaW5nICovCisjaWZuZGVmIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nCisjZGVmaW5lIEdM
X1FDT01fdGlsZWRfcmVuZGVyaW5nIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xTdGFydFRpbGluZ1FDT00gKEdMdWludCB4LCBHTHVp
bnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTGJpdGZpZWxkIHByZXNlcnZlTWFz
ayk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFbmRUaWxpbmdRQ09NIChHTGJpdGZp
ZWxkIHByZXNlcnZlTWFzayk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMU1RBUlRUSUxJTkdRQ09NUFJPQykgKEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRo
LCBHTHVpbnQgaGVpZ2h0LCBHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElOR1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2
ZU1hc2spOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRp
ZiAvKiBfX2dsMmV4dF9oXyAqLwpJbmRleDogQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJwbGF0Zm9y
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfX2dsMnBsYXRmb3JtX2hfCisjZGVmaW5lIF9f
Z2wycGxhdGZvcm1faF8KKworLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0w
My0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIu
MC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4K
KyAqLworCisvKiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9w
ZW5HTCBFUyAyLlggIGdsMi5oCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9y
bS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5j
b3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAg
c28gdGhhdAorICogdGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRo
aXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRo
ZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQor
ICogYnkgZmlsaW5nIGEgYnVnIGFnYWluc3QgcHJvZHVjdCAiT3BlbkdMLUVTIiBjb21wb25lbnQg
IlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5jbHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKyNpZm5k
ZWYgR0xfQVBJQ0FMTAorI2RlZmluZSBHTF9BUElDQUxMICBLSFJPTk9TX0FQSUNBTEwKKyNlbmRp
ZgorCisjaWZuZGVmIEdMX0FQSUVOVFJZCisjZGVmaW5lIEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJ
RU5UUlkKKyNlbmRpZgorCisjZW5kaWYgLyogX19nbDJwbGF0Zm9ybV9oXyAqLwpJbmRleDogQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
aW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9p
bmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xV
REVEXworI2RlZmluZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXworCitzdHJ1Y3QgVEJ1aWx0
SW5SZXNvdXJjZQoreworCWludCBtYXhWZXJ0ZXhBdHRyaWJzOworCWludCBtYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9yczsKKwlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7CisJaW50IG1heFZlcnRleFRleHR1
cmVJbWFnZVVuaXRzOworCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOworCWludCBt
YXhUZXh0dXJlSW1hZ2VVbml0czsKKwlpbnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKKwlp
bnQgbWF4RHJhd0J1ZmZlcnM7Cit9OworI2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVE
RURfCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9J
TkNMVURFRF8KKyNkZWZpbmUgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKworI2luY2x1
ZGUgIlJlc291cmNlTGltaXRzLmgiCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgQ19ERUNMIF9f
Y2RlY2wKKyNlbHNlCisjZGVmaW5lIF9fZmFzdGNhbGwKKyNkZWZpbmUgQ19ERUNMCisjZW5kaWYK
KworLy8KKy8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3
ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci9s
aW5rZXIuCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKKwlleHRlcm4gIkMiIHsKKyNlbmRpZgor
Ly8KKy8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFu
eSBvdGhlcgorLy8gY29tcGlsZXIvbGlua2VyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlh
bGl6ZSgpOworLy8KKy8vIERyaXZlciBzaG91bGQgY2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8K
K2ludCBfX2Zhc3RjYWxsIFNoRmluYWxpemUoKTsKKy8vCisvLyBUeXBlcyBvZiBsYW5ndWFnZXMg
dGhlIGNvbXBpbGVyIGNhbiBjb25zdW1lLgorLy8KK3R5cGVkZWYgZW51bSB7CisJRVNoTGFuZ1Zl
cnRleCwKKwlFU2hMYW5nRnJhZ21lbnQsCisJRVNoTGFuZ0NvdW50LAorfSBFU2hMYW5ndWFnZTsK
KworLy8KKy8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRv
LgorLy8gSXQgY3VycmVudGx5IHN1cHBvcnRzIE9wZW5HTCBFUyBhbmQgV2ViR0wgc3BlY2lmaWNh
dGlvbnMuCisvLwordHlwZWRlZiBlbnVtIHsKKyAgICBFU2hTcGVjR0xFUzIsCisgICAgRVNoU3Bl
Y1dlYkdMLAorfSBFU2hTcGVjOworCisvLworLy8gVHlwZXMgb2Ygb3V0cHV0IHRoZSBsaW5rZXIg
d2lsbCBjcmVhdGUuCisvLwordHlwZWRlZiBlbnVtIHsKKwlFU2hFeFZlcnRleEZyYWdtZW50LAor
CUVTaEV4RnJhZ21lbnQKK30gRVNoRXhlY3V0YWJsZTsKKworLy8KKy8vIE9wdGltaXphdGlvbiBs
ZXZlbCBmb3IgdGhlIGNvbXBpbGVyLgorLy8KK3R5cGVkZWYgZW51bSB7CisJRVNoT3B0Tm9HZW5l
cmF0aW9uLAorCUVTaE9wdE5vbmUsCisJRVNoT3B0U2ltcGxlLCAgICAgICAvLyBPcHRpbWl6YXRp
b25zIHRoYXQgY2FuIGJlIGRvbmUgcXVpY2tseQorCUVTaE9wdEZ1bGwsICAgICAgICAgLy8gT3B0
aW1pemF0aW9ucyB0aGF0IHdpbGwgdGFrZSBtb3JlIHRpbWUKK30gRVNoT3B0aW1pemF0aW9uTGV2
ZWw7CisKKy8vCisvLyBCdWlsZCBhIHRhYmxlIGZvciBiaW5kaW5ncy4gIFRoaXMgY2FuIGJlIHVz
ZWQgZm9yIGxvY2F0aW5nCisvLyBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgZ2xvYmFscywgZXRjLiwg
YXMgbmVlZGVkLgorLy8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyKiBuYW1lOworCWlu
dCBiaW5kaW5nOworfSBTaEJpbmRpbmc7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbnVtQmlu
ZGluZ3M7CisJU2hCaW5kaW5nKiBiaW5kaW5nczsgIC8vIGFycmF5IG9mIGJpbmRpbmdzCit9IFNo
QmluZGluZ1RhYmxlOworCisvLworLy8gU2hIYW5kbGUgaGVsZCBieSBidXQgb3BhcXVlIHRvIHRo
ZSBkcml2ZXIuICBJdCBpcyBhbGxvY2F0ZWQsCisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVk
IGJ5IHRoZSBjb21waWxlci9saW5rZXIuIEl0J3MgY29udGVudHMgCisvLyBhcmUgZGVmaW5lZCBi
eSBhbmQgdXNlZCBieSB0aGUgY29tcGlsZXIgYW5kIGxpbmtlci4gIEZvciBleGFtcGxlLAorLy8g
c3ltYm9sIHRhYmxlIGluZm9ybWF0aW9uIGFuZCBvYmplY3QgY29kZSBwYXNzZWQgZnJvbSB0aGUg
Y29tcGlsZXIgCisvLyB0byB0aGUgbGlua2VyIGNhbiBiZSBzdG9yZWQgd2hlcmUgU2hIYW5kbGUg
cG9pbnRzLgorLy8KKy8vIElmIGhhbmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVy
bmVkLgorLy8KK3R5cGVkZWYgdm9pZCogU2hIYW5kbGU7CisKKy8vCisvLyBEcml2ZXIgY2FsbHMg
dGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGNvbXBpbGVyL2xpbmtlcgorLy8gb2JqZWN0cy4K
Ky8vCitTaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsg
IC8vIG9uZSBwZXIgc2hhZGVyCitTaEhhbmRsZSBTaENvbnN0cnVjdExpbmtlcihjb25zdCBFU2hF
eGVjdXRhYmxlLCBpbnQgZGVidWdPcHRpb25zKTsgIC8vIG9uZSBwZXIgc2hhZGVyIHBhaXIKK1No
SGFuZGxlIFNoQ29uc3RydWN0VW5pZm9ybU1hcCgpOyAgICAgICAgICAgICAgICAgLy8gb25lIHBl
ciB1bmlmb3JtIG5hbWVzcGFjZSAoY3VycmVudGx5IGVudGlyZSBwcm9ncmFtIG9iamVjdCkKK3Zv
aWQgU2hEZXN0cnVjdChTaEhhbmRsZSk7CisKKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIFNo
Q29tcGlsZSBpcyBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisv
LworLy8gVGhlIGluZm8tbG9nIHNob3VsZCBiZSB3cml0dGVuIGJ5IFNoQ29tcGlsZSBpbnRvIAor
Ly8gU2hIYW5kbGUsIHNvIGl0IGNhbiBhbnN3ZXIgZnV0dXJlIHF1ZXJpZXMuCisvLworaW50IFNo
Q29tcGlsZSgKKwljb25zdCBTaEhhbmRsZSwKKwljb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJp
bmdzW10sCisJY29uc3QgaW50IG51bVN0cmluZ3MsCisJY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2
ZWwsCisJY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAqcmVzb3VyY2VzLAorCWludCBkZWJ1Z09wdGlv
bnMKKwkpOworCisKKy8vCisvLyBTaW1pbGFyIHRvIFNoQ29tcGlsZSwgYnV0IGFjY2VwdHMgYW4g
b3BhcXVlIGhhbmRsZSB0byBhbgorLy8gaW50ZXJtZWRpYXRlIGxhbmd1YWdlIHN0cnVjdHVyZS4K
Ky8vCitpbnQgU2hDb21waWxlSW50ZXJtZWRpYXRlKAorCVNoSGFuZGxlIGNvbXBpbGVyLAorCVNo
SGFuZGxlIGludGVybWVkaWF0ZSwKKwljb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKKwlpbnQg
ZGVidWdnYWJsZSAgICAgICAgICAgLy8gYm9vbGVhbgorCSk7CisKK2ludCBTaExpbmsoCisJY29u
c3QgU2hIYW5kbGUsICAgICAgICAgICAgICAgLy8gbGlua2VyIG9iamVjdAorCWNvbnN0IFNoSGFu
ZGxlIGhbXSwgICAgICAgICAgIC8vIGNvbXBpbGVyIG9iamVjdHMgdG8gbGluayB0b2dldGhlcgor
CWNvbnN0IGludCBudW1IYW5kbGVzLAorCVNoSGFuZGxlIHVuaWZvcm1NYXAsICAgICAgICAgIC8v
IHVwZGF0ZWQgd2l0aCBuZXcgdW5pZm9ybXMKKwlzaG9ydCBpbnQqKiB1bmlmb3Jtc0FjY2Vzc2Vk
LCAgLy8gcmV0dXJuZWQgd2l0aCBpbmRleGVzIG9mIHVuaWZvcm1zIGFjY2Vzc2VkCisJaW50KiBu
dW1Vbmlmb3Jtc0FjY2Vzc2VkKTsgCQorCitpbnQgU2hMaW5rRXh0KAorCWNvbnN0IFNoSGFuZGxl
LCAgICAgICAgICAgICAgIC8vIGxpbmtlciBvYmplY3QKKwljb25zdCBTaEhhbmRsZSBoW10sICAg
ICAgICAgICAvLyBjb21waWxlciBvYmplY3RzIHRvIGxpbmsgdG9nZXRoZXIKKwljb25zdCBpbnQg
bnVtSGFuZGxlcyk7CisKKy8vCisvLyBTaFNldEVuY3JweXRpb25NZXRob2QgaXMgYSBwbGFjZS1o
b2xkZXIgZm9yIHNwZWNpZnlpbmcKKy8vIGhvdyBzb3VyY2UgY29kZSBpcyBlbmNyeXB0ZWQuCisv
Lwordm9pZCBTaFNldEVuY3J5cHRpb25NZXRob2QoU2hIYW5kbGUpOworCisvLworLy8gQWxsIHRo
ZSBmb2xsb3dpbmcgcmV0dXJuIDAgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdAorLy8gYXZhaWxh
YmxlIGluIHRoZSBvYmplY3QgcGFzc2VkIGRvd24sIG9yIHRoZSBvYmplY3QgaXMgYmFkLgorLy8K
K2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSk7Citjb25zdCBjaGFyKiBT
aEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUpOworY29uc3Qgdm9pZCogU2hHZXRFeGVjdXRh
YmxlKGNvbnN0IFNoSGFuZGxlKTsKK2NvbnN0IGNoYXIqIFNoR2V0VmFsaWRhdG9yTG9nKGNvbnN0
IFNoSGFuZGxlIGhhbmRsZSk7CitpbnQgU2hTZXRWaXJ0dWFsQXR0cmlidXRlQmluZGluZ3MoY29u
c3QgU2hIYW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxlKik7ICAgLy8gdG8gZGV0ZWN0IHVzZXIg
YWxpYXNpbmcKK2ludCBTaFNldEZpeGVkQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUs
IGNvbnN0IFNoQmluZGluZ1RhYmxlKik7ICAgICAvLyB0byBmb3JjZSBhbnkgcGh5c2ljYWwgbWFw
cGluZ3MKK2ludCBTaEdldFBoeXNpY2FsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5kbGUs
IGNvbnN0IFNoQmluZGluZ1RhYmxlKiopOyAvLyBmb3IgYWxsIGF0dHJpYnV0ZXMKKy8vCisvLyBU
ZWxsIHRoZSBsaW5rZXIgdG8gbmV2ZXIgYXNzaWduIGEgdmVydGV4IGF0dHJpYnV0ZSB0byB0aGlz
IGxpc3Qgb2YgcGh5c2ljYWwgYXR0cmlidXRlcworLy8KK2ludCBTaEV4Y2x1ZGVBdHRyaWJ1dGVz
KGNvbnN0IFNoSGFuZGxlLCBpbnQgKmF0dHJpYnV0ZXMsIGludCBjb3VudCk7CisKKy8vCisvLyBS
ZXR1cm5zIHRoZSBsb2NhdGlvbiBJRCBvZiB0aGUgbmFtZWQgdW5pZm9ybS4KKy8vIFJldHVybnMg
LTEgaWYgZXJyb3IuCisvLworaW50IFNoR2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IFNoSGFuZGxl
IHVuaWZvcm1NYXAsIGNvbnN0IGNoYXIqIG5hbWUpOworCitlbnVtIFREZWJ1Z09wdGlvbnMgewor
CUVEZWJ1Z09wTm9uZSAgICAgICAgICAgICAgID0gMHgwMDAsCisJRURlYnVnT3BJbnRlcm1lZGlh
dGUgICAgICAgPSAweDAwMSwKKwlFRGVidWdPcEFzc2VtYmx5ICAgICAgICAgICA9IDB4MDAyLAor
CUVEZWJ1Z09wT2JqZWN0Q29kZSAgICAgICAgID0gMHgwMDQsCisJRURlYnVnT3BMaW5rTWFwcyAg
ICAgICAgICAgPSAweDAwOCwKKwlFRGVidWdPcFZlcmlmeUNvZGUJCSAgID0gMHgwMTAKK307Cisj
aWZkZWYgX19jcGx1c3BsdXMKKwl9CisjZW5kaWYKKworI2VuZGlmIC8vIF9DT01QSUxFUl9JTlRF
UkZBQ0VfSU5DTFVERURfCkluZGV4OiBBTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI2OSBAQAorI2lmbmRlZiBfX2tocnBsYXRmb3JtX2hfCisjZGVmaW5lIF9fa2hycGxhdGZv
cm1faF8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFRoZSBLaHJvbm9zIEdyb3Vw
IEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn
ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu
ZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIp
LCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n
CisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg
bWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj
b3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwg
Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiog
VEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1Ig
T1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIEtocm9ub3MgcGxhdGZv
cm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zLgorICoKKyAqICRSZXZpc2lvbjogOTM1
NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUyOjI1IC0wNzAwIChXZWQsIDIxIE9jdCAyMDA5
KSAkCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBw
bGF0Zm9ybS4gQWRvcHRlcnMgYXJlCisgKiBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBwbGF0Zm9ybSBz
cGVjaWZpYyBtb2RpZmljYXRpb25zIHRvIHRoZSBLaHJvbm9zCisgKiBncm91cCBzbyB0aGF0IHRo
ZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuCisgKiBQ
bGVhc2Ugc3VibWl0IGNoYW5nZXMgYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25v
cyBCdWd6aWxsYQorICogKGh0dHA6Ly9raHJvbm9zLm9yZy9idWd6aWxsYSkgYnkgZmlsaW5nIGEg
YnVnIGFnYWluc3QgcHJvZHVjdAorICogIktocm9ub3MgKGdlbmVyYWwpIiBjb21wb25lbnQgIlJl
Z2lzdHJ5Ii4KKyAqCisgKiBBIHByZWRlZmluZWQgdGVtcGxhdGUgd2hpY2ggZmlsbHMgaW4gc29t
ZSBvZiB0aGUgYnVnIGZpZWxkcyBjYW4gYmUKKyAqIHJlYWNoZWQgdXNpbmcgaHR0cDovL3Rpbnl1
cmwuY29tL2tocnBsYXRmb3JtLWgtYnVncmVwb3J0LCBidXQgeW91CisgKiBtdXN0IGNyZWF0ZSBh
IEJ1Z3ppbGxhIGxvZ2luIGZpcnN0LgorICoKKyAqCisgKiBTZWUgdGhlIEltcGxlbWVudGVyJ3Mg
R3VpZGVsaW5lcyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhpcyBmaWxlCisgKiBzaG91
bGQgYmUgbG9jYXRlZCBvbiB5b3VyIHN5c3RlbSBhbmQgZm9yIG1vcmUgZGV0YWlscyBvZiBpdHMg
dXNlOgorICogICAgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9pbXBsZW1lbnRlcnNf
Z3VpZGUucGRmCisgKgorICogVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBhcworICogICAg
ICAgICNpbmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKyAqIGJ5IEtocm9ub3MgY2xpZW50IEFQ
SSBoZWFkZXIgZmlsZXMgdGhhdCB1c2UgaXRzIHR5cGVzIGFuZCBkZWZpbmVzLgorICoKKyAqIFRo
ZSB0eXBlcyBpbiBraHJwbGF0Zm9ybS5oIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gZGVmaW5lIEFQ
SS1zcGVjaWZpYyB0eXBlcy4KKyAqCisgKiBUeXBlcyBkZWZpbmVkIGluIGtocnBsYXRmb3JtLmg6
CisgKiAgICBraHJvbm9zX2ludDhfdCAgICAgICAgICAgICAgc2lnbmVkICAgOCAgYml0CisgKiAg
ICBraHJvbm9zX3VpbnQ4X3QgICAgICAgICAgICAgdW5zaWduZWQgOCAgYml0CisgKiAgICBraHJv
bm9zX2ludDE2X3QgICAgICAgICAgICAgc2lnbmVkICAgMTYgYml0CisgKiAgICBraHJvbm9zX3Vp
bnQxNl90ICAgICAgICAgICAgdW5zaWduZWQgMTYgYml0CisgKiAgICBraHJvbm9zX2ludDMyX3Qg
ICAgICAgICAgICAgc2lnbmVkICAgMzIgYml0CisgKiAgICBraHJvbm9zX3VpbnQzMl90ICAgICAg
ICAgICAgdW5zaWduZWQgMzIgYml0CisgKiAgICBraHJvbm9zX2ludDY0X3QgICAgICAgICAgICAg
c2lnbmVkICAgNjQgYml0CisgKiAgICBraHJvbm9zX3VpbnQ2NF90ICAgICAgICAgICAgdW5zaWdu
ZWQgNjQgYml0CisgKiAgICBraHJvbm9zX2ludHB0cl90ICAgICAgICAgICAgc2lnbmVkICAgc2Ft
ZSBudW1iZXIgb2YgYml0cyBhcyBhIHBvaW50ZXIKKyAqICAgIGtocm9ub3NfdWludHB0cl90ICAg
ICAgICAgICB1bnNpZ25lZCBzYW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlcgorICogICAg
a2hyb25vc19zc2l6ZV90ICAgICAgICAgICAgIHNpZ25lZCAgIHNpemUKKyAqICAgIGtocm9ub3Nf
dXNpemVfdCAgICAgICAgICAgICB1bnNpZ25lZCBzaXplCisgKiAgICBraHJvbm9zX2Zsb2F0X3Qg
ICAgICAgICAgICAgc2lnbmVkICAgMzIgYml0IGZsb2F0aW5nIHBvaW50CisgKiAgICBraHJvbm9z
X3RpbWVfbnNfdCAgICAgICAgICAgdW5zaWduZWQgNjQgYml0IHRpbWUgaW4gbmFub3NlY29uZHMK
KyAqICAgIGtocm9ub3NfdXRpbWVfbmFub3NlY29uZHNfdCB1bnNpZ25lZCB0aW1lIGludGVydmFs
IG9yIGFic29sdXRlIHRpbWUgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW5vc2Vjb25kcworICogICAga2hyb25vc19zdGltZV9uYW5vc2Vjb25kc190IHNp
Z25lZCB0aW1lIGludGVydmFsIGluIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9zX2Jvb2xlYW5f
ZW51bV90ICAgICAgZW51bWVyYXRlZCBib29sZWFuIHR5cGUuIFRoaXMgc2hvdWxkCisgKiAgICAg
IG9ubHkgYmUgdXNlZCBhcyBhIGJhc2UgdHlwZSB3aGVuIGEgY2xpZW50IEFQSSdzIGJvb2xlYW4g
dHlwZSBpcworICogICAgICBhbiBlbnVtLiBDbGllbnQgQVBJcyB3aGljaCB1c2UgYW4gaW50ZWdl
ciBvciBvdGhlciB0eXBlIGZvcgorICogICAgICBib29sZWFucyBjYW5ub3QgdXNlIHRoaXMgYXMg
dGhlIGJhc2UgdHlwZSBmb3IgdGhlaXIgYm9vbGVhbi4KKyAqCisgKiBUb2tlbnMgZGVmaW5lZCBp
biBraHJwbGF0Zm9ybS5oOgorICoKKyAqICAgIEtIUk9OT1NfRkFMU0UsIEtIUk9OT1NfVFJVRSBF
bnVtZXJhdGVkIGJvb2xlYW4gZmFsc2UvdHJ1ZSB2YWx1ZXMuCisgKgorICogICAgS0hST05PU19T
VVBQT1JUX0lOVDY0IGlzIDEgaWYgNjQgYml0IGludGVnZXJzIGFyZSBzdXBwb3J0ZWQ7IG90aGVy
d2lzZSAwLgorICogICAgS0hST05PU19TVVBQT1JUX0ZMT0FUIGlzIDEgaWYgZmxvYXRzIGFyZSBz
dXBwb3J0ZWQ7IG90aGVyd2lzZSAwLgorICoKKyAqIENhbGxpbmcgY29udmVudGlvbiBtYWNyb3Mg
ZGVmaW5lZCBpbiB0aGlzIGZpbGU6CisgKiAgICBLSFJPTk9TX0FQSUNBTEwKKyAqICAgIEtIUk9O
T1NfQVBJRU5UUlkKKyAqICAgIEtIUk9OT1NfQVBJQVRUUklCVVRFUworICoKKyAqIFRoZXNlIG1h
eSBiZSB1c2VkIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXM6CisgKgorICogICAgICBLSFJPTk9T
X0FQSUNBTEwgdm9pZCBLSFJPTk9TX0FQSUVOVFJZIGZ1bmNuYW1lKAorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsCisgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYXJnMikgS0hST05PU19BUElBVFRSSUJVVEVTOworICovCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUNBTEwKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICogVGhpcyBwcmVjZWRlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0
aW9uIGluIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikg
JiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKyMgICBkZWZpbmUgS0hST05PU19BUElDQUxM
IF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VsaWYgZGVmaW5lZCAoX19TWU1CSUFOMzJfXykKKyMg
ICBkZWZpbmUgS0hST05PU19BUElDQUxMIElNUE9SVF9DCisjZWxzZQorIyAgIGRlZmluZSBLSFJP
Tk9TX0FQSUNBTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERlZmluaXRpb24g
b2YgS0hST05PU19BUElFTlRSWQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3Mg
dGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiAgYW5kIHByZWNlZGVzIHRoZSBmdW5jdGlv
bgorICogbmFtZSBpbiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlLgorICovCisjaWYgZGVmaW5lZChf
V0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQ
X18pCisgICAgLyogV2luMzIgYnV0IG5vdCBXaW5DRSAqLworIyAgIGRlZmluZSBLSFJPTk9TX0FQ
SUVOVFJZIF9fc3RkY2FsbAorI2Vsc2UKKyMgICBkZWZpbmUgS0hST05PU19BUElFTlRSWQorI2Vu
ZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUFU
VFJJQlVURVMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmb2xsb3dzIHRoZSBjbG9zaW5n
IHBhcmVudGhlc2lzIG9mIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgYXJndW1lbnRzLgorICovCisj
aWYgZGVmaW5lZCAoX19BUk1DQ18yX18pCisjZGVmaW5lIEtIUk9OT1NfQVBJQVRUUklCVVRFUyBf
X3NvZnRmcAorI2Vsc2UKKyNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVTCisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBiYXNpYyB0eXBlIGRlZmluaXRpb25zCisgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKyNpZiAoZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lP
Tl9fID49IDE5OTkwMUwpIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19TQ09fXykg
fHwgZGVmaW5lZChfX1VTTENfXykKKworCisvKgorICogVXNpbmcgPHN0ZGludC5oPgorICovCisj
aW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9u
b3NfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAga2hyb25vc191aW50
MzJfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90Owor
dHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmlu
ZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9B
VCAgIDEKKworI2VsaWYgZGVmaW5lZChfX1ZNUyApIHx8IGRlZmluZWQoX19zZ2kpCisKKy8qCisg
KiBVc2luZyA8aW50dHlwZXMuaD4KKyAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVm
IGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdWludDMy
X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAg
ICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAg
ICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAx
CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5lZChfV0lO
MzIpICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18pCisKKy8qCisgKiBXaW4zMgorICovCit0
eXBlZGVmIF9faW50MzIgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYg
dW5zaWduZWQgX19pbnQzMiAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2
NCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2lu
dDY0ICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5U
NjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5l
ZChfX3N1bl9fKSB8fCBkZWZpbmVkKF9fZGlnaXRhbF9fKQorCisvKgorICogU3VuIG9yIERpZ2l0
YWwKKyAqLwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7CisjaWYg
ZGVmaW5lZChfX2FyY2g2NF9fKSB8fCBkZWZpbmVkKF9MUDY0KQordHlwZWRlZiBsb25nIGludCAg
ICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
ICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgaW50ICAg
ICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
IGtocm9ub3NfdWludDY0X3Q7CisjZW5kaWYgLyogX19hcmNoNjRfXyAqLworI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEK
KworI2VsaWYgMAorCisvKgorICogSHlwb3RoZXRpY2FsIHBsYXRmb3JtIHdpdGggbm8gZmxvYXQg
b3IgaW50NjQgc3VwcG9ydAorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGto
cm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191
aW50MzJfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMAorI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfRkxPQVQgICAwCisKKyNlbHNlCisKKy8qCisgKiBHZW5lcmljIGZhbGxiYWNr
CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAg
ICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJv
bm9zX3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2lu
dDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7
CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQ
T1JUX0ZMT0FUICAgMQorCisjZW5kaWYKKworCisvKgorICogVHlwZXMgdGhhdCBhcmUgKHNvIGZh
cikgdGhlIHNhbWUgb24gYWxsIHBsYXRmb3JtcworICovCit0eXBlZGVmIHNpZ25lZCAgIGNoYXIg
ICAgICAgICAga2hyb25vc19pbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAg
a2hyb25vc191aW50OF90OwordHlwZWRlZiBzaWduZWQgICBzaG9ydCBpbnQgICAgIGtocm9ub3Nf
aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50ICAgICBraHJvbm9zX3VpbnQxNl90
OwordHlwZWRlZiBzaWduZWQgICBsb25nICBpbnQgICAgIGtocm9ub3NfaW50cHRyX3Q7Cit0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgIGludCAgICAga2hyb25vc191aW50cHRyX3Q7Cit0eXBlZGVmIHNp
Z25lZCAgIGxvbmcgIGludCAgICAga2hyb25vc19zc2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBpbnQgICAgIGtocm9ub3NfdXNpemVfdDsKKworI2lmIEtIUk9OT1NfU1VQUE9SVF9GTE9B
VAorLyoKKyAqIEZsb2F0IHR5cGUKKyAqLwordHlwZWRlZiAgICAgICAgICBmbG9hdCAgICAgICAg
IGtocm9ub3NfZmxvYXRfdDsKKyNlbmRpZgorCisjaWYgS0hST05PU19TVVBQT1JUX0lOVDY0Cisv
KiBUaW1lIHR5cGVzCisgKgorICogVGhlc2UgdHlwZXMgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50
IGEgdGltZSBpbnRlcnZhbCBpbiBuYW5vc2Vjb25kcyBvcgorICogYW4gYWJzb2x1dGUgVW5hZGp1
c3RlZCBTeXN0ZW0gVGltZS4gIFVuYWRqdXN0ZWQgU3lzdGVtIFRpbWUgaXMgdGhlIG51bWJlcgor
ICogb2YgbmFub3NlY29uZHMgc2luY2Ugc29tZSBhcmJpdHJhcnkgc3lzdGVtIGV2ZW50IChlLmcu
IHNpbmNlIHRoZSBsYXN0CisgKiB0aW1lIHRoZSBzeXN0ZW0gYm9vdGVkKS4gIFRoZSBVbmFkanVz
dGVkIFN5c3RlbSBUaW1lIGlzIGFuIHVuc2lnbmVkCisgKiA2NCBiaXQgdmFsdWUgdGhhdCB3cmFw
cyBiYWNrIHRvIDAgZXZlcnkgNTg0IHllYXJzLiAgVGltZSBpbnRlcnZhbHMKKyAqIG1heSBiZSBl
aXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkLgorICovCit0eXBlZGVmIGtocm9ub3NfdWludDY0X3Qg
ICAgICAga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190OwordHlwZWRlZiBraHJvbm9zX2ludDY0
X3QgICAgICAgIGtocm9ub3Nfc3RpbWVfbmFub3NlY29uZHNfdDsKKyNlbmRpZgorCisvKgorICog
RHVtbXkgdmFsdWUgdXNlZCB0byBwYWQgZW51bSB0eXBlcyB0byAzMiBiaXRzLgorICovCisjaWZu
ZGVmIEtIUk9OT1NfTUFYX0VOVU0KKyNkZWZpbmUgS0hST05PU19NQVhfRU5VTSAweDdGRkZGRkZG
CisjZW5kaWYKKworLyoKKyAqIEVudW1lcmF0ZWQgYm9vbGVhbiB0eXBlCisgKgorICogVmFsdWVz
IG90aGVyIHRoYW4gemVybyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSB0cnVlLiAgVGhlcmVm
b3JlCisgKiBjb21wYXJpc29ucyBzaG91bGQgbm90IGJlIG1hZGUgYWdhaW5zdCBLSFJPTk9TX1RS
VUUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgS0hST05PU19GQUxTRSA9IDAsCisgICAgS0hS
T05PU19UUlVFICA9IDEsCisgICAgS0hST05PU19CT09MRUFOX0VOVU1fRk9SQ0VfU0laRSA9IEtI
Uk9OT1NfTUFYX0VOVU0KK30ga2hyb25vc19ib29sZWFuX2VudW1fdDsKKworI2VuZGlmIC8qIF9f
a2hycGxhdGZvcm1faF8gKi8KSW5kZXg6IEFOR0xFL3NyYy9BTkdMRS5zbG4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL0FOR0xFLnNsbgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9BTkdMRS5z
bG4JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK++7vw0KK01pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEwLjAwDQorIyBWaXN1YWwgQysr
IEV4cHJlc3MgMjAwOA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkx
QkM5NDJ9IikgPSAibGliRUdMIiwgImxpYkVHTFxsaWJFR0wudmNwcm9qIiwgIntFNzQ2RkNBOS02
NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVw
ZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgx
RTZGNDQ4RTc4fSA9IHtCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9DQorCUVu
ZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTEx
RDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliR0xFU3YyIiwgImxpYkdMRVN2MlxsaWJHTEVT
djIudmNwcm9qIiwgIntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9Ig0KKwlQ
cm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7NTYy
MEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fSA9IHs1NjIwRjBFNC02QzQzLTQ5QkMt
QTE3OC1CODA0RTFBMEMzQTd9DQorCUVuZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KK1By
b2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidHJhbnNs
YXRvcl9obHNsIiwgImNvbXBpbGVyXHRyYW5zbGF0b3JfaGxzbC52Y3Byb2oiLCAiezU2MjBGMEU0
LTZDNDMtNDlCQy1BMTc4LUI4MDRFMUEwQzNBN30iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3RE
ZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXs1QjNBNkRCOC0xRTdFLTQwRDctOTJCOS1E
QThBQUU2MTlGQUR9ID0gezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH0NCisJ
RW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEt
MTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiIsICJjb21waWxl
clx0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2oiLCAiezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURB
OEFBRTYxOUZBRH0iDQorRW5kUHJvamVjdA0KK0dsb2JhbA0KKwlHbG9iYWxTZWN0aW9uKFNvbHV0
aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KKwkJRGVidWd8V2luMzIg
PSBEZWJ1Z3xXaW4zMg0KKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCisJRW5kR2xv
YmFsU2VjdGlvbg0KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1z
KSA9IHBvc3RTb2x1dGlvbg0KKwkJe0U3NDZGQ0E5LTY0QzMtNDMzRS04NUU4LTlBNUE2N0FCN0VE
Nn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtFNzQ2RkNBOS02NEMz
LTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4z
Mg0KKwkJe0U3NDZGQ0E5LTY0QzMtNDMzRS04NUU4LTlBNUE2N0FCN0VENn0uUmVsZWFzZXxXaW4z
Mi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RTc0NkZDQTktNjRDMy00MzNFLTg1RTgt
OUE1QTY3QUI3RUQ2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7
QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVD
ZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0I1ODcxQTdBLTk2OEMtNDJFMy1BMzNCLTk4MUU2RjQ0OEU3
OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7QjU4NzFBN0EtOTY4Qy00
MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8
V2luMzINCisJCXtCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9LlJlbGVhc2V8
V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs1NjIwRjBFNC02QzQzLTQ5QkMtQTE3
OC1CODA0RTFBMEMzQTd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7
NTYyMEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fS5EZWJ1Z3xXaW4zMi5CdWlsZC4w
ID0gRGVidWd8V2luMzINCisJCXs1NjIwRjBFNC02QzQzLTQ5QkMtQTE3OC1CODA0RTFBMEMzQTd9
LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezU2MjBGMEU0LTZD
NDMtNDlCQy1BMTc4LUI4MDRFMUEwQzNBN30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFz
ZXxXaW4zMg0KKwkJezVCM0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH0uRGVidWd8
V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs1QjNBNkRCOC0xRTdFLTQwRDctOTJC
OS1EQThBQUU2MTlGQUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezVC
M0E2REI4LTFFN0UtNDBENy05MkI5LURBOEFBRTYxOUZBRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVD
ZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NUIzQTZEQjgtMUU3RS00MEQ3LTkyQjktREE4QUFFNjE5
RkFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCUVuZEdsb2JhbFNl
Y3Rpb24NCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24N
CisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KKwlFbmRHbG9iYWxTZWN0aW9uDQorRW5kR2xv
YmFsDQpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2J1aWxkX2Fu
Z2xlLmd5cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDQgQEAKKyMgQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworeworICAndGFyZ2V0
cyc6IFsKKyAgICB7CisgICAgICAndGFyZ2V0X25hbWUnOiAndHJhbnNsYXRvcl9jb21tb24nLAor
ICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAorICAgICAgJ2luY2x1ZGVfZGlycyc6IFsK
KyAgICAgICAgJy4nLAorICAgICAgICAnLi4vaW5jbHVkZScsCisgICAgICBdLAorICAgICAgJ3Zh
cmlhYmxlcyc6IHsKKyAgICAgICAgJ2dsc2xhbmdfY3BwX2ZpbGUnOiAnPChJTlRFUk1FRElBVEVf
RElSKS9nbHNsYW5nLmNwcCcsCisgICAgICAgICdnbHNsYW5nX3RhYl9jcHBfZmlsZSc6ICc8KElO
VEVSTUVESUFURV9ESVIpL2dsc2xhbmdfdGFiLmNwcCcsCisgICAgICAgICdnbHNsYW5nX3RhYl9o
X2ZpbGUnOiAnPChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5oJywKKyAgICAgIH0sCisg
ICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgJ2NvbXBpbGVyL0Jhc2VUeXBlcy5oJywKKyAgICAg
ICAgJ2NvbXBpbGVyL0NvbW1vbi5oJywKKyAgICAgICAgJ2NvbXBpbGVyL0NvbnN0YW50VW5pb24u
aCcsCisgICAgICAgICdjb21waWxlci9kZWJ1Zy5jcHAnLAorICAgICAgICAnY29tcGlsZXIvZGVi
dWcuaCcsCisgICAgICAgICdjb21waWxlci9JbmZvU2luay5jcHAnLAorICAgICAgICAnY29tcGls
ZXIvSW5mb1NpbmsuaCcsCisgICAgICAgICdjb21waWxlci9Jbml0aWFsaXplLmNwcCcsCisgICAg
ICAgICdjb21waWxlci9Jbml0aWFsaXplLmgnLAorICAgICAgICAnY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5jcHAnLAorICAgICAgICAnY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oJywKKyAgICAgICAg
J2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgnLAorICAgICAgICAnY29tcGlsZXIvSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oJywKKyAgICAgICAgJ2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAn
LAorICAgICAgICAnY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgnLAorICAgICAgICAnY29tcGlsZXIv
aW50ZXJtT3V0LmNwcCcsCisgICAgICAgICdjb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAnLAor
ICAgICAgICAnY29tcGlsZXIvTGluay5jcHAnLAorICAgICAgICAnY29tcGlsZXIvbG9jYWxpbnRl
cm1lZGlhdGUuaCcsCisgICAgICAgICdjb21waWxlci9NTWFwLmgnLAorICAgICAgICAnY29tcGls
ZXIvb3NpbmNsdWRlLmgnLAorICAgICAgICAnY29tcGlsZXIvcGFyc2VDb25zdC5jcHAnLAorICAg
ICAgICAnY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwJywKKyAgICAgICAgJ2NvbXBpbGVyL1BhcnNl
SGVscGVyLmgnLAorICAgICAgICAnY29tcGlsZXIvUG9vbEFsbG9jLmNwcCcsCisgICAgICAgICdj
b21waWxlci9Qb29sQWxsb2MuaCcsCisgICAgICAgICdjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5j
cHAnLAorICAgICAgICAnY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCcsCisgICAgICAgICdjb21w
aWxlci9SZW1vdmVUcmVlLmNwcCcsCisgICAgICAgICdjb21waWxlci9SZW1vdmVUcmVlLmgnLAor
ICAgICAgICAnY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAnLAorICAgICAgICAnY29tcGlsZXIvU2hI
YW5kbGUuaCcsCisgICAgICAgICdjb21waWxlci9TeW1ib2xUYWJsZS5jcHAnLAorICAgICAgICAn
Y29tcGlsZXIvU3ltYm9sVGFibGUuaCcsCisgICAgICAgICdjb21waWxlci9UeXBlcy5oJywKKyAg
ICAgICAgJ2NvbXBpbGVyL3VuaXN0ZC5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMnLAorICAgICAgICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCcsCisgICAg
ICAgICdjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oJywKKyAgICAgICAgJ2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuYycsCisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgnLAorICAgICAgICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jJywKKyAgICAg
ICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYycsCisgICAgICAgICdjb21waWxlci9w
cmVwcm9jZXNzb3IvbWVtb3J5LmgnLAorICAgICAgICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Bh
cnNlci5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgnLAor
ICAgICAgICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYycsCisgICAgICAgICdjb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zbGdsb2JhbHMuaCcsCisgICAgICAgICdjb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5jJywKKyAgICAgICAgJ2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgnLAorICAgICAg
ICAnY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jJywKKyAgICAgICAgJ2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuaCcsCisgICAgICAgICMgR2VuZXJhdGVkIGZpbGVzCisgICAgICAg
ICc8KGdsc2xhbmdfY3BwX2ZpbGUpJywKKyAgICAgICAgJzwoZ2xzbGFuZ190YWJfY3BwX2ZpbGUp
JywKKyAgICAgICAgJzwoZ2xzbGFuZ190YWJfaF9maWxlKScsCisgICAgICBdLAorICAgICAgJ2Nv
bmRpdGlvbnMnOiBbCisgICAgICAgIFsnT1M9PSJ3aW4iJywgeworICAgICAgICAgICdzb3VyY2Vz
JzogWydjb21waWxlci9vc3NvdXJjZV93aW4uY3BwJ10sCisgICAgICAgIH0sIHsgIyBlbHNlOiBw
b3NpeAorICAgICAgICAgICdzb3VyY2VzJzogWydjb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAn
XSwKKyAgICAgICAgfV0sCisgICAgICBdLAorICAgICAgJ2FjdGlvbnMnOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZmxleF9nbHNsYW5nJywKKyAgICAgICAgICAnaW5w
dXRzJzogWydjb21waWxlci9nbHNsYW5nLmwnXSwKKyAgICAgICAgICAnb3V0cHV0cyc6IFsnPChn
bHNsYW5nX2NwcF9maWxlKSddLAorICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAgICAn
ZmxleCcsCisgICAgICAgICAgICAnLS1ub2xpbmUnLAorICAgICAgICAgICAgJy0tbm91bmlzdGQn
LAorICAgICAgICAgICAgJy0tb3V0ZmlsZT08KGdsc2xhbmdfY3BwX2ZpbGUpJywKKyAgICAgICAg
ICAgICc8KF9pbnB1dHMpJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdtZXNzYWdlJzogJ0V4
ZWN1dGluZyBmbGV4IG9uIDwoX2lucHV0cyknLAorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgJ2FjdGlvbl9uYW1lJzogJ2Jpc29uX2dsc2xhbmcnLAorICAgICAgICAgICdpbnB1dHMn
OiBbJ2NvbXBpbGVyL2dsc2xhbmcueSddLAorICAgICAgICAgICdvdXRwdXRzJzogWyc8KGdsc2xh
bmdfdGFiX2NwcF9maWxlKScsICc8KGdsc2xhbmdfdGFiX2hfZmlsZSknXSwKKyAgICAgICAgICAn
YWN0aW9uJzogWworICAgICAgICAgICAgJ2Jpc29uJywKKyAgICAgICAgICAgICctLW5vLWxpbmVz
JywKKyAgICAgICAgICAgICctLWRlZmluZXM9PChnbHNsYW5nX3RhYl9oX2ZpbGUpJywKKyAgICAg
ICAgICAgICctLXNrZWxldG9uPXlhY2MuYycsCisgICAgICAgICAgICAnLS1vdXRwdXQ9PChnbHNs
YW5nX3RhYl9jcHBfZmlsZSknLAorICAgICAgICAgICAgJzwoX2lucHV0cyknLAorICAgICAgICAg
IF0sCisgICAgICAgICAgJ21lc3NhZ2UnOiAnRXhlY3V0aW5nIGJpc29uIG9uIDwoX2lucHV0cykn
LAorICAgICAgICB9LAorICAgICAgXSwKKyAgICB9LAorICAgIHsKKyAgICAgICd0YXJnZXRfbmFt
ZSc6ICd0cmFuc2xhdG9yX2dsc2wnLAorICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAor
ICAgICAgJ2RlcGVuZGVuY2llcyc6IFsndHJhbnNsYXRvcl9jb21tb24nXSwKKyAgICAgICdpbmNs
dWRlX2RpcnMnOiBbCisgICAgICAgICcuJywKKyAgICAgICAgJy4uL2luY2x1ZGUnLAorICAgICAg
XSwKKyAgICAgICdzb3VyY2VzJzogWworICAgICAgICAnY29tcGlsZXIvQ29kZUdlbkdMU0wuY3Bw
JywKKyAgICAgICAgJ2NvbXBpbGVyL091dHB1dEdMU0wuY3BwJywKKyAgICAgICAgJ2NvbXBpbGVy
L091dHB1dEdMU0wuaCcsCisgICAgICAgICdjb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAnLAor
ICAgICAgICAnY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCcsCisgICAgICBdLAorICAgIH0sCisg
ICAgeworICAgICAgJ3RhcmdldF9uYW1lJzogJ3RyYW5zbGF0b3JfaGxzbCcsCisgICAgICAndHlw
ZSc6ICdzdGF0aWNfbGlicmFyeScsCisgICAgICAnZGVwZW5kZW5jaWVzJzogWyd0cmFuc2xhdG9y
X2NvbW1vbiddLAorICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgJy4nLAorICAgICAg
ICAnLi4vaW5jbHVkZScsCisgICAgICBdLAorICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICdj
b21waWxlci9Db2RlR2VuSExTTC5jcHAnLAorICAgICAgICAnY29tcGlsZXIvT3V0cHV0SExTTC5j
cHAnLAorICAgICAgICAnY29tcGlsZXIvT3V0cHV0SExTTC5oJywKKyAgICAgICAgJ2NvbXBpbGVy
L1RyYW5zbGF0b3JITFNMLmNwcCcsCisgICAgICAgICdjb21waWxlci9UcmFuc2xhdG9ySExTTC5o
JywKKyAgICAgICAgJ2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAnLAorICAgICAgICAnY29tcGls
ZXIvVW5mb2xkU2VsZWN0LmgnLAorICAgICAgXSwKKyAgICB9LAorICBdLAorICAnY29uZGl0aW9u
cyc6IFsKKyAgICBbJ09TPT0id2luIicsIHsKKyAgICAgICd0YXJnZXRzJzogWworICAgICAgICB7
CisgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYkdMRVN2MicsCisgICAgICAgICAgJ3R5cGUn
OiAnc2hhcmVkX2xpYnJhcnknLAorICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3RyYW5zbGF0
b3JfaGxzbCddLAorICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAnLics
CisgICAgICAgICAgICAnLi4vaW5jbHVkZScsCisgICAgICAgICAgICAnJChEWFNES19ESVIpL2lu
Y2x1ZGUnLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAg
ICAnY29tbW9uL2FuZ2xldXRpbHMuaCcsCisgICAgICAgICAgICAnY29tbW9uL2RlYnVnLmNwcCcs
CisgICAgICAgICAgICAnY29tbW9uL2RlYnVnLmgnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9n
ZW9tZXRyeS9iYWNrZW5kLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2dlb21ldHJ5L2Jh
Y2tlbmQuaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAnLAorICAg
ICAgICAgICAgJ2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaCcsCisgICAgICAgICAgICAnbGliR0xF
U3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVT
djIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIv
Z2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2Vv
bWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvZ2Vv
bWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL0JsaXQu
Y3BwJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvQmxpdC5oJywKKyAgICAgICAgICAgICdsaWJH
TEVTdjIvQnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL0J1ZmZlci5oJywKKyAg
ICAgICAgICAgICdsaWJHTEVTdjIvQ29udGV4dC5jcHAnLAorICAgICAgICAgICAgJ2xpYkdMRVN2
Mi9Db250ZXh0LmgnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAnLAor
ICAgICAgICAgICAgJ2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oJywKKyAgICAgICAgICAgICdsaWJH
TEVTdjIvbGliR0xFU3YyLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL2xpYkdMRVN2Mi5k
ZWYnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9tYWluLmNwcCcsCisgICAgICAgICAgICAnbGli
R0xFU3YyL21haW4uaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL21hdGh1dGlsLmgnLAorICAg
ICAgICAgICAgJ2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcCcsCisgICAgICAgICAgICAnbGliR0xFU3Yy
L1Byb2dyYW0uaCcsCisgICAgICAgICAgICAnbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAnLAor
ICAgICAgICAgICAgJ2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCcsCisgICAgICAgICAgICAnbGli
R0xFU3YyL1NoYWRlci5jcHAnLAorICAgICAgICAgICAgJ2xpYkdMRVN2Mi9TaGFkZXIuaCcsCisg
ICAgICAgICAgICAnbGliR0xFU3YyL1RleHR1cmUuY3BwJywKKyAgICAgICAgICAgICdsaWJHTEVT
djIvVGV4dHVyZS5oJywKKyAgICAgICAgICAgICdsaWJHTEVTdjIvdXRpbGl0aWVzLmNwcCcsCisg
ICAgICAgICAgICAnbGliR0xFU3YyL3V0aWxpdGllcy5oJywKKyAgICAgICAgICBdLAorICAgICAg
ICAgICdtc3ZzX3NldHRpbmdzJzogeworICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKKyAg
ICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOiBbJyQoRFhTREtfRElS
KS9saWIveDg2J10sCisgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzogWydk
M2R4OS5saWInXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYkVHTCcsCisgICAgICAgICAgJ3R5
cGUnOiAnc2hhcmVkX2xpYnJhcnknLAorICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ2xpYkdM
RVN2MiddLAorICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAnLicsCisg
ICAgICAgICAgICAnLi4vaW5jbHVkZScsCisgICAgICAgICAgXSwKKyAgICAgICAgICAnc291cmNl
cyc6IFsKKyAgICAgICAgICAgICdjb21tb24vYW5nbGV1dGlscy5oJywKKyAgICAgICAgICAgICdj
b21tb24vZGVidWcuY3BwJywKKyAgICAgICAgICAgICdjb21tb24vZGVidWcuaCcsCisgICAgICAg
ICAgICAnbGliRUdML0NvbmZpZy5jcHAnLAorICAgICAgICAgICAgJ2xpYkVHTC9Db25maWcuaCcs
CisgICAgICAgICAgICAnbGliRUdML0Rpc3BsYXkuY3BwJywKKyAgICAgICAgICAgICdsaWJFR0wv
RGlzcGxheS5oJywKKyAgICAgICAgICAgICdsaWJFR0wvbGliRUdMLmNwcCcsCisgICAgICAgICAg
ICAnbGliRUdML2xpYkVHTC5kZWYnLAorICAgICAgICAgICAgJ2xpYkVHTC9tYWluLmNwcCcsCisg
ICAgICAgICAgICAnbGliRUdML21haW4uaCcsCisgICAgICAgICAgICAnbGliRUdML1N1cmZhY2Uu
Y3BwJywKKyAgICAgICAgICAgICdsaWJFR0wvU3VyZmFjZS5oJywKKyAgICAgICAgICBdLAorICAg
ICAgICAgICdtc3ZzX3NldHRpbmdzJzogeworICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsK
KyAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiBbJ2QzZDkubGliJ10sCisg
ICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfV0s
CisgIF0sCit9CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyB0YWItd2lkdGg6MgorIyBpbmRlbnQt
dGFicy1tb2RlOm5pbAorIyBFbmQ6CisjIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTIgc2hp
ZnR3aWR0aD0yOgpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5t
b2RlMXYzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1
bHMubW9kZTF2MwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXBy
b2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzY5IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAi
LS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Q
cm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxr
ZXk+QWN0aXZlUGVyc3BlY3RpdmVOYW1lPC9rZXk+CisJPHN0cmluZz5Qcm9qZWN0PC9zdHJpbmc+
CisJPGtleT5BbGxvd2VkTW9kdWxlczwva2V5PgorCTxhcnJheT4KKwkJPGRpY3Q+CisJCQk8a2V5
PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJ
bnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tl
eT4KKwkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5Hcm91cHMgYW5kIEZpbGVzIE91dGxpbmUgVmlldzwvc3Ry
aW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5Pgor
CQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3Ry
aW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWE5hdmln
YXRvckdyb3VwPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RWRpdG9y
PC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9r
ZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJ
CTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENU
YXNrTGlzdE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlRh
c2sgTGlzdDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2Fk
UGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9r
ZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3Ry
aW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJp
bmc+RmlsZSBhbmQgU21hcnQgR3JvdXAgRGV0YWlsIFZpZXdlcjwvc3RyaW5nPgorCQk8L2RpY3Q+
CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0
cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4K
KwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJ1aWxkUmVzdWx0c01vZHVsZTwv
c3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRldGFpbGVkIEJ1aWxkIFJl
c3VsdHMgVmlld2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRs
ZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5j
ZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CTxzdHJpbmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5
PgorCQkJPHN0cmluZz5Qcm9qZWN0IEJhdGNoIEZpbmQgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+
CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0
cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4K
KwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDUHJvamVjdEZvcm1hdENvbmZsaWN0
c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlByb2plY3Qg
Rm9ybWF0IENvbmZsaWN0cyBMaXN0PC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8
a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5N
YXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8
L2tleT4KKwkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzIFRvb2w8L3N0cmluZz4KKwkJPC9kaWN0Pgor
CQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJp
bmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJpbmc+CisJ
CQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0
cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyPC9zdHJp
bmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJ
CQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJp
bmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQ1ZTTW9k
dWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U291cmNlIENvZGUg
Q29udHJvbCBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRs
ZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5j
ZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CTxzdHJpbmc+UEJYRGVidWdCcmVha3BvaW50c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1l
PC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnIEJyZWFrcG9pbnRzIFRvb2w8L3N0cmluZz4KKwkJPC9k
aWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+
PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJp
bmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5YQ0RvY2thYmxlSW5zcGVjdG9y
PC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+SW5zcGVjdG9yPC9zdHJp
bmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJ
CQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJp
bmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYT3BlblF1
aWNrbHlNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5PcGVu
IFF1aWNrbHkgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5k
bGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFu
Y2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJ
CQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9r
ZXk+CisJCQk8c3RyaW5nPkRlYnVnZ2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJ
CQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtl
eT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBDb25zb2xlPC9zdHJpbmc+CisJCTwvZGljdD4K
KwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3Ry
aW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgor
CQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVsZTwvc3RyaW5n
PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBzaG90cyBUb29sPC9zdHJpbmc+
CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+QnVuZGxlUGF0aDwva2V5PgorCTxzdHJpbmc+
L0RldmVsb3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RldlRvb2xzSW50ZXJmYWNlLmZy
YW1ld29yay9SZXNvdXJjZXM8L3N0cmluZz4KKwk8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CisJPHN0
cmluZz5EZWZhdWx0RGVzY3JpcHRpb25LZXk8L3N0cmluZz4KKwk8a2V5PkRvY2tpbmdTeXN0ZW1W
aXNpYmxlPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PkV4dGVuc2lvbjwva2V5PgorCTxzdHJpbmc+
bW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+RmF2QmFyQ29uZmlnPC9rZXk+CisJPGRpY3Q+CisJCTxr
ZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJPHN0cmluZz5GQkM3NkI1ODExRjYyNjIw
MDBCRkIwMzc8L3N0cmluZz4KKwkJPGtleT5YQ0Jhck1vZHVsZUl0ZW1OYW1lczwva2V5PgorCQk8
ZGljdC8+CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtczwva2V5PgorCQk8YXJyYXkvPgorCTwvZGlj
dD4KKwk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCTxmYWxzZS8+CisJPGtl
eT5JZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUucGVyc3BlY3RpdmVzLnByb2pl
Y3QubW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+TWFqb3JWZXJzaW9uPC9rZXk+CisJPGludGVnZXI+
MzM8L2ludGVnZXI+CisJPGtleT5NaW5vclZlcnNpb248L2tleT4KKwk8aW50ZWdlcj4wPC9pbnRl
Z2VyPgorCTxrZXk+TmFtZTwva2V5PgorCTxzdHJpbmc+RGVmYXVsdDwvc3RyaW5nPgorCTxrZXk+
Tm90aWZpY2F0aW9uczwva2V5PgorCTxhcnJheS8+CisJPGtleT5PcGVuRWRpdG9yczwva2V5Pgor
CTxhcnJheS8+CisJPGtleT5QZXJzcGVjdGl2ZVdpZHRoczwva2V5PgorCTxhcnJheT4KKwkJPGlu
dGVnZXI+LTE8L2ludGVnZXI+CisJCTxpbnRlZ2VyPi0xPC9pbnRlZ2VyPgorCTwvYXJyYXk+CisJ
PGtleT5QZXJzcGVjdGl2ZXM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0PgorCQkJPGtleT5DaG9z
ZW5Ub29sYmFySXRlbXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPmFjdGl2ZS1jb21i
by1wb3B1cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YWN0aW9uPC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+ZGVidWdn
ZXItZW5hYmxlLWJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQkJPHN0cmluZz5idWlsZC1hbmQtZ288
L3N0cmluZz4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5pZGUuUEJYVG9vbGJhclN0b3BCdXR0b248
L3N0cmluZz4KKwkJCQk8c3RyaW5nPmdldC1pbmZvPC9zdHJpbmc+CisJCQkJPHN0cmluZz5OU1Rv
b2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnBi
eC50b29sYmFyLnNlYXJjaGZpZWxkPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Db250
cm9sbGVyQ2xhc3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+
SWNvbk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9qZWN0V2l0aEVkaXRvcjwvc3Ry
aW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZlLnBy
b2plY3Q8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPGZhbHNlLz4KKwkJ
CTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+QmVj
b21lQWN0aXZlPC9rZXk+CisJCQkJCTx0cnVlLz4KKwkJCQkJPGtleT5Db250ZW50Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQk8ZGljdD4KKwkJCQkJCTxrZXk+UEJYQm90dG9tU21hcnRHcm91cEdJ
RHM8L2tleT4KKwkJCQkJCTxhcnJheT4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAw
MDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQUMwNDUwOUNEMDAwMDAwMTAy
PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTA5Q0QwMDAwMDAxMDI8L3N0cmlu
Zz4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MzlDRDExMjExMDEwMjwvc3RyaW5nPgorCQkJ
CQkJCTxzdHJpbmc+RTI2NDRCMzUwNTNCNjlCMjAwMjExMjU2PC9zdHJpbmc+CisJCQkJCQkJPHN0
cmluZz4xQzM3RkFCQzA0NTA5Q0QwMDAxMDAxMDQ8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFD
QzBFQTQwMDQzNTBFRjkwMDQ0NDEwQjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUNDMEVBNDAw
NDM1MEVGOTAwNDExMTBCPC9zdHJpbmc+CisJCQkJCQk8L2FycmF5PgorCQkJCQkJPGtleT5QQlhQ
cm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcxREVEMDA5
N0E1RjQ8L3N0cmluZz4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJ
CQkJCQk8c3RyaW5nPkZpbGVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RTdHJ1Y3R1
cmVQcm92aWRlZDwva2V5PgorCQkJCQkJPHN0cmluZz55ZXM8L3N0cmluZz4KKwkJCQkJCTxrZXk+
UEJYU21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5EYXRhPC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uV2lkdGhzS2V5PC9rZXk+CisJ
CQkJCQkJPGFycmF5PgorCQkJCQkJCQk8cmVhbD40MzE8L3JlYWw+CisJCQkJCQkJPC9hcnJheT4K
KwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uc0tleV92NDwva2V5Pgor
CQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1uPC9zdHJpbmc+CisJCQkJ
CQkJPC9hcnJheT4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVN
b2R1bGVPdXRsaW5lU3RhdGVLZXlfdjc8L2tleT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+
UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVFeHBhbnNpb25LZXk8L2tleT4KKwkJ
CQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+NUJCRUZGOUI5MTczODI5N0I5NUM1NjhEPC9z
dHJpbmc+CisJCQkJCQkJCTxzdHJpbmc+MTk2REI2QUIwMDZCQjgzNTAzQzdENzg2PC9zdHJpbmc+
CisJCQkJCQkJCTxzdHJpbmc+MEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5PC9zdHJpbmc+CisJCQkJ
CQkJCTxzdHJpbmc+RTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFPC9zdHJpbmc+CisJCQkJCQkJCTxz
dHJpbmc+MUMzN0ZCQUMwNDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJCTxzdHJpbmc+
MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPC9hcnJheT4KKwkJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlU2VsZWN0aW9uS2V5PC9r
ZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8aW50ZWdlcj42
OTwvaW50ZWdlcj4KKwkJCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJCQk8aW50
ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJ
CQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVZpc2libGVSZWN0S2V5
PC9rZXk+CisJCQkJCQkJPHN0cmluZz57ezAsIDY2Mn0sIHs0MzEsIDc2MH19PC9zdHJpbmc+CisJ
CQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJ
CQk8YXJyYXkvPgorCQkJCQkJPGtleT5YQ0luY2x1ZGVQZXJzcGVjdGl2ZXNTd2l0Y2g8L2tleT4K
KwkJCQkJCTx0cnVlLz4KKwkJCQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4KKwkJCQkJCTxz
dHJpbmc+Y29tLmFwcGxlLlhjb2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJCQkJCTwvZGlj
dD4KKwkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJ
CQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs0NDgsIDc3OH19
PC9zdHJpbmc+CisJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5Pgor
CQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJ
CTxyZWFsPjQzMTwvcmVhbD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRv
d0ZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPjM1MSA1OSAxMDIxIDgxOSAwIDAgMTQ0MCA4Nzgg
PC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJPHN0
cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJPHN0cmluZz40NDhwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCQk8
ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0Pgor
CQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFD
RTBCMjAzMDY0NzFFMDYwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnBhcnNlQ29uc3QuY3BwPC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+UEJYU3BsaXRNb2R1bGVJbk5hdmlnYXRvcktleTwva2V5PgorCQkJCQkJ
CQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXQwPC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCQkJPHN0cmlu
Zz4xQ0UwQjIwNDA2NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+cGFyc2VDb25zdC5jcHA8
L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5Pl9oaXN0b3J5Q2FwYWNpdHk8L2tleT4KKwkJCQkJCQkJ
CQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+Ym9va21hcms8L2tleT4KKwkJ
CQkJCQkJCQk8c3RyaW5nPkZCM0M1M0I1MTFGOEJGNzIwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJ
CQkJCTxrZXk+aGlzdG9yeTwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQkJPHN0
cmluZz5GQjNDNTBCNDExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmlu
Zz5GQjNDNTBCNTExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5G
QjNDNTBCNjExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjND
NTBDOTExRjc5QjIzMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTBD
QTExRjc5QjIzMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTNCMzEx
RjhCRjcyMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTNCNDExRjhC
RjcyMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCQkJPGtleT5TcGxpdENvdW50PC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPjE8L3N0
cmluZz4KKwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8
L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21l
dHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1l
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezU2OCwgNTc3fX08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjM1MSA1
OSAxMDIxIDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJ
CTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3Ry
aW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+NTc3cHQ8
L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVu
dENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9q
ZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRTBCMjA1MDY0NzFFMDYwMDk3
QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8
a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCA1ODJ9LCB7NTY4LCAxOTZ9fTwv
c3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+MzUxIDU5IDEwMjEgODE5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9k
dWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmlu
Zz4xOTZwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz41NjhwdDwvc3RyaW5nPgorCQkJCTwvZGlj
dD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdDwv
c3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxz
dHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJ
PHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxN
b2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5
PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+RkIzQzUzQjYxMUY4QkY3MjAwODFGNUJBPC9zdHJp
bmc+CisJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCQk8
c3RyaW5nPkZCM0M1M0I3MTFGOEJGNzIwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNF
MEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjIwNTA2NDcx
RTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWdV
c2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwkJCTxzdHJpbmc+Mjwvc3RyaW5nPgorCQkJ
PGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFy
LmNvbmZpZy5kZWZhdWx0VjM8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+
Q29udHJvbGxlckNsYXNzQmFzZU5hbWU8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8
a2V5Pkljb25OYW1lPC9rZXk+CisJCQk8c3RyaW5nPldpbmRvd09mUHJvamVjdDwvc3RyaW5nPgor
CQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZlLm1vcnBoPC9z
dHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+
CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5
PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQk8a2V5
PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCTxkaWN0PgorCQkJCQkJPGtleT5QQlhC
b3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+
MUMzN0ZCQUMwNDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFB
QzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMDhFNzdDMDQ1NDk2
MTAwMEM5MTRCRDwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAw
MTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8L3N0
cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5nPgor
CQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJCQkJ
PHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5n
PjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJ
CTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MTFFMEIxRkUw
NjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJl
bDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5QQlhQcm9q
ZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJ
PGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldpZHRoc0tl
eTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+MTg2PC9yZWFsPgorCQkJCQkJ
CTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlf
djQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3Ry
aW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNtYXJ0
R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5
PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjI5Qjk3MzE0RkRDRkEzOTQx
MUNBMkNFQTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEw
Mjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJ
CQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJPC9h
cnJheT4KKwkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1
bGVPdXRsaW5lU3RhdGVWaXNpYmxlUmVjdEtleTwva2V5PgorCQkJCQkJCTxzdHJpbmc+e3swLCAw
fSwgezE4NiwgMzM3fX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9w
U21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVk
ZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJ
CQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4KKwkJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLlhj
b2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5HZW9t
ZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PkZyYW1lPC9r
ZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsyMDMsIDM1NX19PC9zdHJpbmc+CisJCQkJCQk8
a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJ
CQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTxyZWFsPjE4NjwvcmVhbD4K
KwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJ
CQk8c3RyaW5nPjM3MyAyNjkgNjkwIDM5NyAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCTwv
ZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0
cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFt
ZTwva2V5PgorCQkJPHN0cmluZz5Nb3JwaDwvc3RyaW5nPgorCQkJPGtleT5QcmVmZXJyZWRXaWR0
aDwva2V5PgorCQkJPGludGVnZXI+MzAwPC9pbnRlZ2VyPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nl
czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJ
CQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4K
KwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4x
MUUwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRv
b2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmln
LmRlZmF1bHQuc2hvcnRWMzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJPC9hcnJheT4KKwk8a2V5PlBl
cnNwZWN0aXZlc0JhclZpc2libGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U2hlbGZJc1Zpc2li
bGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U291cmNlRGVzY3JpcHRpb248L2tleT4KKwk8c3Ry
aW5nPmZpbGUgYXQgJy9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZUb29s
c0ludGVyZmFjZS5mcmFtZXdvcmsvUmVzb3VyY2VzL1hDUGVyc3BlY3RpdmVzU3BlY2lmaWNhdGlv
bk1vZGUxLnhjcGVyc3BlYyc8L3N0cmluZz4KKwk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5
PgorCTx0cnVlLz4KKwk8a2V5PlRpbWVTdGFtcDwva2V5PgorCTxyZWFsPjAuMDwvcmVhbD4KKwk8
a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwk8c3RyaW5n
PjI8L3N0cmluZz4KKwk8a2V5PlRvb2xiYXJEaXNwbGF5TW9kZTwva2V5PgorCTxpbnRlZ2VyPjE8
L2ludGVnZXI+CisJPGtleT5Ub29sYmFySXNWaXNpYmxlPC9rZXk+CisJPHRydWUvPgorCTxrZXk+
VG9vbGJhclNpemVNb2RlPC9rZXk+CisJPGludGVnZXI+MTwvaW50ZWdlcj4KKwk8a2V5PlR5cGU8
L2tleT4KKwk8c3RyaW5nPlBlcnNwZWN0aXZlczwvc3RyaW5nPgorCTxrZXk+VXBkYXRlTWVzc2Fn
ZTwva2V5PgorCTxzdHJpbmc+VGhlIERlZmF1bHQgV29ya3NwYWNlIGluIHRoaXMgdmVyc2lvbiBv
ZiBYY29kZSBub3cgaW5jbHVkZXMgc3VwcG9ydCB0byBoaWRlIGFuZCBzaG93IHRoZSBkZXRhaWwg
dmlldyAod2hhdCBoYXMgYmVlbiByZWZlcnJlZCB0byBhcyB0aGUgIk1ldHJvLU1vcnBoIiBmZWF0
dXJlKS4gIFlvdSBtdXN0IGRpc2NhcmQgeW91ciBjdXJyZW50IERlZmF1bHQgV29ya3NwYWNlIHNl
dHRpbmdzIGFuZCB1cGRhdGUgdG8gdGhlIGxhdGVzdCBEZWZhdWx0IFdvcmtzcGFjZSBpbiBvcmRl
ciB0byBnYWluIHRoaXMgZmVhdHVyZS4gIERvIHlvdSB3aXNoIHRvIHVwZGF0ZSB0byB0aGUgbGF0
ZXN0IFdvcmtzcGFjZSBkZWZhdWx0cyBmb3IgcHJvamVjdCAnJUAnPzwvc3RyaW5nPgorCTxrZXk+
V2luZG93SnVzdGlmaWNhdGlvbjwva2V5PgorCTxpbnRlZ2VyPjU8L2ludGVnZXI+CisJPGtleT5X
aW5kb3dPcmRlckxpc3Q8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJpbmc+RkJDNzZCNTkxMUY2MjYy
MDAwQkZCMDM3PC9zdHJpbmc+CisJCTxzdHJpbmc+L1ZvbHVtZXMvREFUQS9wYXVscy9zcmMvU2Fm
YXJpL09wZW5Tb3VyY2UvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvajwvc3RyaW5nPgor
CTwvYXJyYXk+CisJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwk8c3RyaW5nPjM1MSA1OSAxMDIx
IDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJPGtleT5XaW5kb3dUb29sc1YzPC9rZXk+CisJ
PGFycmF5PgorCQk8ZGljdD4KKwkJCTxrZXk+Rmlyc3RUaW1lV2luZG93RGlzcGxheWVkPC9rZXk+
CisJCQk8ZmFsc2UvPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRv
d1Rvb2wuYnVpbGQ8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUv
PgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtl
eT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29u
dGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQ
cm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRDA1MjhGMDYyMzcwNzIw
MDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2li
aWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5
Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5
PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezEzMDAsIDI5NH19PC9zdHJp
bmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz4xNDAgMjc4IDEzMDAgNTc2IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+
CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdy
b3VwPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmlu
Zz4yOTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtl
eT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+WENNYWluQnVpbGRS
ZXN1bHRzTW9kdWxlR1VJRDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVM
YWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkJ1aWxkIFJlc3VsdHM8L3N0cmluZz4KKwkJCQkJ
CQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJfQ29sbGFwc2U8L2tleT4KKwkJCQkJCQkJPGlu
dGVnZXI+MTAyMTwvaW50ZWdlcj4KKwkJCQkJCQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJf
T3Blbjwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xMDExPC9pbnRlZ2VyPgorCQkJCQkJCTwvZGlj
dD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0
PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAyOTl9LCB7
MTMwMCwgMjM2fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5n
PgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJp
bmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9u
PC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMzZwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJ
CQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz41MzVw
dDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nl
czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9z
dHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJ
CTx0cnVlLz4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZC
M0M1M0I4MTFGOEJGNzIwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNEMDUyOEYwNjIz
NzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz5YQ01haW5CdWlsZFJlc3VsdHNNb2R1
bGVHVUlEPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlv
bjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5idWlsZFYzPC9zdHJpbmc+
CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ4NiAzMDA8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjE0MCAyNzgg
MTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwv
a2V5PgorCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGZhbHNlLz4KKwkJPC9kaWN0PgorCQk8
ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmRl
YnVnZ2VyPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJ
CQkJCQk8a2V5PkRlYnVnZ2VyPC9rZXk+CisJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5I
b3Jpem9udGFsU3BsaXRWaWV3PC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5
Pl9jb2xsYXBzaW5nRnJhbWVEaW1lbnNpb248L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3Jl
YWw+CisJCQkJCQkJCQkJPGtleT5faW5kZXhPZkNvbGxhcHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJ
CQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+X3BlcmNlbnRhZ2VPZkNvbGxh
cHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CisJCQkJCQkJCQkJPGtl
eT5pc0NvbGxhcHNlZDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJ
CQkJCQkJPGtleT5zaXplczwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQkJPHN0
cmluZz57ezAsIDB9LCB7MzE3LCAxNjR9fTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPnt7
MzE3LCAwfSwgezM3NywgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJ
CQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5WZXJ0aWNhbFNwbGl0Vmlldzwva2V5PgorCQkJCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5fY29sbGFwc2luZ0ZyYW1lRGltZW5zaW9uPC9rZXk+
CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+X2luZGV4T2ZDb2xs
YXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJ
CQk8a2V5Pl9wZXJjZW50YWdlT2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+
MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+aXNDb2xsYXBzZWQ8L2tleT4KKwkJCQkJCQkJCQk8
c3RyaW5nPnllczwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+c2l6ZXM8L2tleT4KKwkJCQkJCQkJ
CQk8YXJyYXk+CisJCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5NCwgMTY0fX08L3N0cmlu
Zz4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDE2NH0sIHs2OTQsIDIxNn19PC9zdHJpbmc+CisJ
CQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPC9kaWN0PgorCQkJ
CQkJCQk8a2V5PkxhdW5jaGVyQ29uZmlnVmVyc2lvbjwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjg8
L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPjFDMTYyOTg0MDY0QzEwRDQwMEI5NUE3Mjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRlYnVnIC0gR0xV
VEV4YW1wbGVzIChVbmRlcndhdGVyKTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8
a2V5PkRlYnVnQ29uc29sZURyYXdlclNpemU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57MTAwLCAx
MjB9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RGVidWdDb25zb2xlVmlzaWJsZTwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5EZWJ1Z0NvbnNvbGVXaW5k
b3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwv
c3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnU1RESU9XaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5NCwgMzgwfX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PjMyMSAyMzggNjk0IDQyMiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhEZWJ1Z1Nlc3Npb25N
b2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3Ry
aW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtl
eT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCTwvZGlj
dD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RGVidWdnZXI8
L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8
c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJ
PGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDRDEw
QTk5MDY5RUY4QkEwMEIwNjcyMDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUMwQUQyQUIwNjlGMUU5
QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzE2Mjk4NDA2NEMxMEQ0MDBCOTVBNzI8
L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkFDMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgor
CQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJp
bmc+eGNvZGUudG9vbGJhci5jb25maWcuZGVidWdWMzwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dT
dHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzIxIDIzOCA2OTQgNDIyIDAgMCAxNDQwIDg3OCA8L3N0
cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+MUNEMTBBOTkw
NjlFRjhCQTAwQjA2NzIwPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tl
eT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5
PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCQkJPGZhbHNlLz4KKwkJCTxrZXk+SWRl
bnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmZpbmQ8L3N0cmluZz4KKwkJCTxr
ZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUvPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4K
KwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+
CisJCQkJCQkJCQkJPHN0cmluZz4xQ0RENTI4QzA2MjIyMDcyMDAxMzQ2NzU8L3N0cmluZz4KKwkJ
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQkJCTxzdHJp
bmc+U2hhZGVyTGFuZy5jcHA8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2li
aWxpdHk8L2tleT4KKwkJCQkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJ
CQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezc4MSwg
MjEyfX08L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4K
KwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJCQk8
c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+NzgxcHQ8L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJPGtleT5D
b250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNEMDUyOEUwNjIzNzA3
MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9r
ZXk+CisJCQkJCQkJCTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+
CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDIxN30sIHs3
ODEsIDIxMn19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4K
KwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5n
PlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9r
ZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8
L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz40MjlwdDwv
c3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhQcm9qZWN0RmluZE1vZHVsZTwvc3RyaW5n
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8dHJ1
ZS8+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJp
bmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJCQkJPHN0cmluZz5GQjNDNTBE
RDExRjc5RDI3MDA4MUY1QkE8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCM0M1MERFMTFGNzlEMjcw
MDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNERDUyOEMwNjIyMjA3MjAwMTM0Njc1PC9z
dHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI4RTA2MjM3MDcyMDAxNjY2NzU8L3N0cmluZz4KKwkJ
CTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz43NzUgNjI5
IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8
L2tleT4KKwkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJCQk8
a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxmYWxzZS8+CisJCTwvZGljdD4KKwkJ
PGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+TUVOVVNFUEFSQVRP
Ujwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+
CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdnZXJDb25zb2xlPC9zdHJpbmc+CisJCQk8a2V5
PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tl
eT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8
L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0
TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDNzhFQUFDMDY1RDQ5MjYwMEIwNzA5
NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPkRlYnVnZ2VyIENvbnNvbGU8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJ
CQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs2NTAsIDI1
MH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJ
CQkJPHN0cmluZz41MTYgNjMyIDY1MCAyNTAgMCAwIDE2ODAgMTAyNyA8L3N0cmluZz4KKwkJCQkJ
CQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWERl
YnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJ
CQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5Pgor
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgor
CQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+
RGVidWdnZXIgQ29uc29sZTwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5Pgor
CQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwv
aW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz4xQzc4RUFBRDA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFD
NzhFQUFFMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUM3OEVBQUMwNjVE
NDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5jb25zb2xlVjM8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjY1MCA0MSA2
NTAgMjUwIDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9r
ZXk+CisJCQk8c3RyaW5nPjFDNzhFQUFEMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8
L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndp
bmRvd1Rvb2wuc25hcHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDU25h
cHNob3RNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJ
CTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U25h
cHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+
CisJCQkJPHN0cmluZz5YQ1NuYXBzaG90TW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxzdHJpbmc+WWVzPC9zdHJpbmc+CisJ
CQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xi
YXIuY29uZmlnLnNuYXBzaG90czwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4K
KwkJCTxzdHJpbmc+MzE1IDgyNCAzMDAgNTUwIDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPHN0cmluZz5ZZXM8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53
aW5kb3dUb29sLnNjbTwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4K
KwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxk
aWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGlj
dD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3Ry
aW5nPjFDNzhFQUIyMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPiZsdDtObyBFZGl0b3ImZ3Q7
PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYU3BsaXRNb2R1bGVJbk5hdmlnYXRvcktleTwva2V5
PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXQwPC9rZXk+CisJCQkJCQkJCQk8
ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJ
CQkJPHN0cmluZz4xQzc4RUFCMzA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQkJCQkJCTwv
ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXRDb3VudDwva2V5PgorCQkJCQkJCQkJPHN0cmluZz4x
PC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5TdGF0dXNCYXJWaXNpYmls
aXR5PC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NDUyLCAw
fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQkJCQkJ
CTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYTmF2
aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjBwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgor
CQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFD
RDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPlNDTTwvc3RyaW5nPgorCQkJCQkJCTwv
ZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PkNvbnNvbGVGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7
MCwgMjU5fSwgezQ1MiwgMH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz57ezAsIDd9LCB7NDUyLCAyNTl9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+NzQzIDM3OSA0NTIgMzA4
IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+VGFibGVDb25maWd1cmF0aW9u
PC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCTxzdHJpbmc+U3RhdHVzPC9zdHJpbmc+
CisJCQkJCQkJCQk8cmVhbD4zMDwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+RmlsZU5hbWU8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE5OTwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UGF0aDwv
c3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MTk3LjA5NTAwMTIyMDcwMzE8L3JlYWw+CisJCQkJCQkJ
CTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+VGFibGVGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
Pnt7MCwgMH0sIHs0NTIsIDI1MH19PC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDVlNNb2R1bGU8L3N0cmluZz4KKwkJ
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjI2MnB0PC9zdHJpbmc+
CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5
PgorCQkJCQk8c3RyaW5nPjI2NnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5TQ008L3N0cmluZz4KKwkJCTxrZXk+U2Vy
dmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWENWU01vZHVsZTwv
c3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJ
CQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDNzhFQUI0MDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgor
CQkJCTxzdHJpbmc+MUM3OEVBQjUwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz4xQzc4RUFCMjA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDRDA1Mjky
MDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNv
bmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuc2NtPC9z
dHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz43NDMgMzc5IDQ1
MiAzMDggMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxr
ZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmJyZWFrcG9pbnRzPC9z
dHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+
CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5
PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNv
bWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+
Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5Q
QlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8
c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJv
amVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+RmlsZXM8L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCQkJPHN0
cmluZz5ubzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29s
dW1uRGF0YTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91
cFRyZWVNb2R1bGVDb2x1bW5XaWR0aHNLZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJ
CQkJCQk8cmVhbD4xNjg8L3JlYWw+CisJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPGtleT5Q
QlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmluZz4KKwkJCQkJCQkJCTwvYXJy
YXk+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVs
ZU91dGxpbmVTdGF0ZUtleV92Nzwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+
UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVFeHBhbnNpb25LZXk8L2tleT4KKwkJ
CQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEw
Mjwvc3RyaW5nPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91
cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVTZWxlY3Rpb25LZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJ
CQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8a2V5PlBCWFNt
YXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlVmlzaWJsZVJlY3RLZXk8L2tleT4KKwkJCQkJ
CQkJCTxzdHJpbmc+e3swLCAwfSwgezE2OCwgMzUwfX08L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQkJCTxhcnJh
eS8+CisJCQkJCQkJCTxrZXk+WENJbmNsdWRlUGVyc3BlY3RpdmVzU3dpdGNoPC9rZXk+CisJCQkJ
CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2Vv
bWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MTg1LCAzNjh9fTwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQk8
YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmluZz4KKwkJCQkJCQkJCTxy
ZWFsPjE2ODwvcmVhbD4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5k
b3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMxNSA0MjQgNzQ0IDQwOSAwIDAgMTQ0MCA4
NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJ
CQkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxr
ZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTg1cHQ8L3N0cmluZz4KKwkJCQkJ
CTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248
L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDQTFBRUQ3MDYzOThFQkQwMDU4OTE0Nzwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29u
ZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+
CisJCQkJCQkJCTxzdHJpbmc+e3sxOTAsIDB9LCB7NTU0LCAzNjh9fTwvc3RyaW5nPgorCQkJCQkJ
CQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MzE1IDQyNCA3
NDQgNDA5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJ
CQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz41NTRwdDwvc3RyaW5n
PgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJPHN0cmluZz4zNjhwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+
CisJCQk8a2V5Pk1ham9yVmVyc2lvbjwva2V5PgorCQkJPGludGVnZXI+MzwvaW50ZWdlcj4KKwkJ
CTxrZXk+TWlub3JWZXJzaW9uPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtl
eT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQk8a2V5PlNl
cnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVn
ZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+
CisJCQkJPHN0cmluZz4xQ0REQjY2ODA3Rjk4RDk4MDBCQjU4MTc8L3N0cmluZz4KKwkJCQk8c3Ry
aW5nPjFDRERCNjY5MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNFMEIx
RkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0ExQUVENzA2Mzk4RUJE
MDA1ODkxNDc8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0
aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmJyZWFrcG9pbnRzVjM8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjMxNSA0MjQg
NzQ0IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9r
ZXk+CisJCQk8c3RyaW5nPjFDRERCNjY4MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQk8
L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndp
bmRvd1Rvb2wuZGVidWdBbmltYXRvcjwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4K
KwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5Pgor
CQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5
PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+
CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmlu
Zz5EZWJ1ZyBWaXN1YWxpemVyPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+
CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4x
PC9pbnRlZ2VyPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmlu
Zz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWJ1Z0FuaW1hdG9yVjM8L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjEwMCAxMDAgNzAwIDUwMCAwIDAgMTI4MCAx
MDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYm9va21hcmtzPC9zdHJpbmc+CisJCQk8a2V5Pkxh
eW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4K
KwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CQkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJv
cG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0
PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmlu
Zz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5Cb29rbWFya3M8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNz
ZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3Ry
aW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8
aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJp
bmc+NTM4IDQyIDQwMSAxODcgMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8
ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLnBy
b2plY3RGb3JtYXRDb25mbGljdHM8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJ
CQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+WENQ
cm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0
aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJ
CQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEw
MCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+
CisJCQk8c3RyaW5nPlByb2plY3QgRm9ybWF0IENvbmZsaWN0czwvc3RyaW5nPgorCQkJPGtleT5T
ZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENQcm9qZWN0Rm9y
bWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNi
YXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PldpbmRv
d0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ1MCAzMDA8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjUwIDg1MCA0NzIgMzA3IDAgMCAxNDQw
IDg3Nzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuY2xhc3NCcm93c2VyPC9zdHJpbmc+CisJCQk8a2V5
PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tl
eT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8
L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5PcHRpb25zU2V0
TmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkhpZXJhcmNoeSwgYWxsIGNsYXNzZXM8L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3Ry
aW5nPjFDQTY0NTZFMDYzQjQ1QjQwMDEzNzlEODwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkNsYXNzIEJyb3dzZXIgLSBO
U09iamVjdDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29u
ZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkNsYXNzZXNGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHszNzQsIDk2fX08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5DbGFzc2VzVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQk8
YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWENsYXNzTmFtZUNvbHVtbklkZW50aWZpZXI8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIwODwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UEJYQ2xh
c3NCb29rQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+
CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0
cmluZz57ezAsIDB9LCB7NjMwLCAzMzF9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5Pk1lbWJlcnNG
cmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMTA1fSwgezM3NCwgMzk1fX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5NZW1iZXJzVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5cGVJY29uQ29sdW1uSWRl
bnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+CisJCQkJCQkJCQk8c3Ry
aW5nPlBCWE1lbWJlck5hbWVDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVh
bD4yMTY8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5cGVDb2x1bW5JZGVudGlm
aWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD45NzwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+
UEJYTWVtYmVyQm9va0NvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIy
PC9yZWFsPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlBCWE1vZHVsZVdpbmRvd1N0
YXR1c0JhckhpZGRlbjI8L2tleT4KKwkJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJ
CQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjM4NSAxNzkg
NjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0
cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjMzMnB0
PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9y
dGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjMzMnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyPC9z
dHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0
cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxr
ZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQzBBRDJB
RjA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkIwMDY5RjFFOUIw
MEZBQkNFNjwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNBNjQ1NkUwNjNCNDVCNDAwMTM3OUQ4PC9z
dHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5Pgor
CQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5jbGFzc2Jyb3dzZXI8L3N0cmluZz4KKwkJ
CTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjM4NSAxNzkgNjMwIDM1MiAwIDAg
MTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3Ry
aW5nPjFDMEFEMkFGMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29s
SXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wucmVm
YWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+SW5jbHVkZUluVG9vbHNNZW51PC9rZXk+CisJCQk8
aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJ
CQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0
PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50
ZWdlcj4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+ezAsIDB9LCB7
NTAwLCAzMzV9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz57MCwgMH0sIHs1MDAsIDMzNX08L3N0cmluZz4KKwkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDUmVmYWN0b3Jp
bmdNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8
c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJ
PGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCTwv
ZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UmVmYWN0
b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4K
KwkJCQk8c3RyaW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJ
CQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4yMDAgMjAwIDUwMCAzNTYgMCAw
IDE5MjAgMTIwMCA8L3N0cmluZz4KKwkJPC9kaWN0PgorCTwvYXJyYXk+Cis8L2RpY3Q+Cis8L3Bs
aXN0PgpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5wYnh1c2Vy
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1bHMucGJ4
dXNlcgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1
bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MDggQEAKKy8vICEkKlVURjgqJCEK
K3sKKwkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovID0geworCQlhY3RpdmVFeGVj
ID0gMDsKKwl9OworCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICov
ID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAv
KiBPdXRwdXRHTFNMLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRz
UmVjdCA9ICJ7ezAsIDB9LCB7NTQ0LCA5MTUyfX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAs
IDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA5Mzh9IjsKKwkJfTsKKwl9OworCTU2QzdF
OTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0g
eworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7NjkxLCA3Nzg3fX0iOworCQkJ
c2VwTmF2U2VsUmFuZ2UgPSAiezIzNjMsIDE5fSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MTgw
OSwgMTA5Mn0iOworCQl9OworCX07CisJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5z
bGF0b3JfY29tbW9uICovID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTkzRDYxQ0IwQkNF
NTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNl
cE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezY5MSwgNjUwfX0iOworCQkJc2VwTmF2U2Vs
UmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxMzc2fSI7CisJCX07
CisJfTsKKwlBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0g
eworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYs
IDYzMDc2fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1Jh
bmdlID0gInswLCAxNzQ2fSI7CisJCX07CisJfTsKKwlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQg
LyogQ29kZUdlbkdMU0wuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3Vu
ZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDQ4M319IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInsw
LCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgNjA4fSI7CisJCX07CisJfTsKKwlEMkM5
QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9
IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezEyMTYsIDI5NTF9fSI7CisJ
CQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2VmlzUmFuZ2UgPSAiezAsIDE0
NjN9IjsKKwkJfTsKKwl9OworCURBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9i
amVjdCAqLyA9IHsKKwkJYWN0aXZlQnVpbGRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJ
CWFjdGl2ZVRhcmdldCA9IDE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi87CisJCWNv
ZGVTZW5zZU1hbmFnZXIgPSBGQkM3NkFGNzExRjYyMDNDMDBCRkIwMzcgLyogQ29kZSBzZW5zZSAq
LzsKKwkJcGVyVXNlckRpY3Rpb25hcnkgPSB7CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWEZpbGVU
YWJsZURhdGFTb3VyY2UzLlBCWEV4ZWN1dGFibGVzRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxl
VGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJY
RmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhFeGVjdXRhYmxlc0RhdGFT
b3VyY2VfTmFtZUlEOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5XaWR0aHNLZXkg
PSAoCisJCQkJCTIyLAorCQkJCQkzMDAsCisJCQkJCTYzNiwKKwkJCQkpOworCQkJCVBCWEZpbGVU
YWJsZURhdGFTb3VyY2VDb2x1bW5zS2V5ID0gKAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3Vy
Y2VfQWN0aXZlRmxhZ0lELAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlELAor
CQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQ29tbWVudHNJRCwKKwkJCQkpOworCQkJfTsK
KwkJCVBCWENvbmZpZ3VyYXRpb24uUEJYRmlsZVRhYmxlRGF0YVNvdXJjZTMuUEJYRmlsZVRhYmxl
RGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0Rp
cmVjdGlvbktleSA9IDE7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdL
ZXkgPSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFi
bGVEYXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMzI5LAorCQkJ
CQkyMCwKKwkJCQkJNDgsCisJCQkJCTQzLAorCQkJCQk0MywKKwkJCQkJMjAsCisJCQkJKTsKKwkJ
CQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFT
b3VyY2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1u
SUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxl
RGF0YVNvdXJjZV9PYmplY3RTaXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9F
cnJvcnNfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklE
LAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07
CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWFRhcmdldERhdGFTb3VyY2UuUEJYVGFyZ2V0RGF0YVNv
dXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlv
bktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkg
PSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVE
YXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjg5LAorCQkJCQk2
MCwKKwkJCQkJMjAsCisJCQkJCTQ4LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJKTsKKwkJCQlQ
QlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3Vy
Y2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQs
CisJCQkJCVBCWFRhcmdldERhdGFTb3VyY2VfUHJpbWFyeUF0dHJpYnV0ZSwKKwkJCQkJUEJYRmls
ZURhdGFTb3VyY2VfQnVpbHRfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX09iamVj
dFNpemVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0Vycm9yc19Db2x1bW5JRCwK
KwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfV2FybmluZ3NfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07
CisJCQlQQlhQZXJQcm9qZWN0VGVtcGxhdGVTdGF0ZVNhdmVEYXRlID0gMzAxNTE0NTgyOworCQkJ
UEJYV29ya3NwYWNlU3RhdGVTYXZlRGF0ZSA9IDMwMTUxNDU4MjsKKwkJfTsKKwkJcGVyVXNlclBy
b2plY3RJdGVtcyA9IHsKKwkJCUZCM0M0RjE4MTFGNzZCQjEwMDgxRjVCQSA9IEZCM0M0RjE4MTFG
NzZCQjEwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBCMzExRjc5NTdB
MDA4MUY1QkEgPSBGQjNDNTBCMzExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICov
OworCQkJRkIzQzUwQjQxMUY3OTU3QTAwODFGNUJBID0gRkIzQzUwQjQxMUY3OTU3QTAwODFGNUJB
IC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQSA9IEZC
M0M1MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBC
NjExRjc5NTdBMDA4MUY1QkEgPSBGQjNDNTBCNjExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJv
b2ttYXJrICovOworCQkJRkIzQzUwQjcxMUY3OTU3QTAwODFGNUJBID0gRkIzQzUwQjcxMUY3OTU3
QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MEI4MTFGNzk1N0EwMDgx
RjVCQSA9IEZCM0M1MEI4MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJ
CQlGQjNDNTBDOTExRjc5QjIzMDA4MUY1QkEgPSBGQjNDNTBDOTExRjc5QjIzMDA4MUY1QkEgLyog
UEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQ0ExMUY3OUIyMzAwODFGNUJBID0gRkIzQzUw
Q0ExMUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MENCMTFG
NzlCMjMwMDgxRjVCQSA9IEZCM0M1MENCMTFGNzlCMjMwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21h
cmsgKi87CisJCQlGQjNDNTBDQzExRjc5QjIzMDA4MUY1QkEgPSBGQjNDNTBDQzExRjc5QjIzMDA4
MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQ0QxMUY3OUMwMTAwODFGNUJB
ID0gRkIzQzUwQ0QxMUY3OUMwMTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZC
M0M1MEQ2MTFGNzlEMDEwMDgxRjVCQSA9IEZCM0M1MEQ2MTFGNzlEMDEwMDgxRjVCQSAvKiBQQlhU
ZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBENzExRjc5RDAxMDA4MUY1QkEgPSBGQjNDNTBENzEx
Rjc5RDAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwREIxMUY3OUQy
NzAwODFGNUJBID0gRkIzQzUwREIxMUY3OUQyNzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAq
LzsKKwkJCUZCM0M1MERDMTFGNzlEMjcwMDgxRjVCQSA9IEZCM0M1MERDMTFGNzlEMjcwMDgxRjVC
QSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBERjExRjc5RDJGMDA4MUY1QkEgPSBG
QjNDNTBERjExRjc5RDJGMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUw
RTIxMUY3OURENDAwODFGNUJBID0gRkIzQzUwRTIxMUY3OURENDAwODFGNUJBIC8qIFBCWFRleHRC
b29rbWFyayAqLzsKKwkJCUZCM0M1MEU1MTFGNzlFMUUwMDgxRjVCQSA9IEZCM0M1MEU1MTFGNzlF
MUUwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTNCMzExRjhCRjcyMDA4
MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUzQjMxMUY4QkY3MjAwODFGNUJBIC8q
IFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1M0I0MTFGOEJGNzIwMDgxRjVCQSAvKiBQQlhU
ZXh0Qm9va21hcmsgKi8gPSBGQjNDNTNCNDExRjhCRjcyMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovOworCQkJRkIzQzUzQjUxMUY4QkY3MjAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAq
LyA9IEZCM0M1M0I1MTFGOEJGNzIwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlG
QkM3NkI1MzExRjYyNjIwMDBCRkIwMzcgPSBGQkM3NkI1MzExRjYyNjIwMDBCRkIwMzcgLyogUEJY
VGV4dEJvb2ttYXJrICovOworCQl9OworCQlzb3VyY2VDb250cm9sTWFuYWdlciA9IEZCQzc2QUY2
MTFGNjIwM0MwMEJGQjAzNyAvKiBTb3VyY2UgQ29udHJvbCAqLzsKKwkJdXNlckJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQlTWU1ST09UID0gLi47CisJCX07CisJfTsKKwlEREQzQjdFM0I3QjM1QTBCODQ2
OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2
SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7OTI2LCA0ODN9fSI7CisJCQlzZXBOYXZTZWxSYW5n
ZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2VmlzUmFuZ2UgPSAiezAsIDQ3OH0iOworCQl9OworCX07
CisJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7CisJ
CXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezkyNiwgNDgz
fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0g
InswLCA0Nzh9IjsKKwkJfTsKKwl9OworCUZCM0M0RjE4MTFGNzZCQjEwMDgxRjVCQSAvKiBQQlhU
ZXh0Qm9va21hcmsgKi8gPSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IEI3
QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87CisJCW5hbWUgPSAi
Q29kZUdlbkdMU0wuY3BwOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9
IDA7CisJCXZyTGVuID0gNjA4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTA1NTExRjc5MjRB
MDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07CisJRkIzQzUw
QjMxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJY
VGV4dEJvb2ttYXJrOworCQlmUmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xh
bmdfdGFiLmNwcCAqLzsKKwkJbmFtZSA9ICJnbHNsYW5nX3RhYi5jcHA6IDEiOworCQlyTGVuID0g
MDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxNzQ2OworCQl2ckxvYyA9
IDA7CisJfTsKKwlGQjNDNTBCNDExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICov
ID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSBCN0IxMTI3Qzc1QjU3NkZD
MDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovOworCQluYW1lID0gIkNvZGVHZW5HTFNMLmNw
cDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9
IDYwODsKKwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJBIC8qIFBC
WFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0g
RTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi87CisJCW5hbWUg
PSAiVHJhbnNsYXRvckhMU0wuaDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5
cGUgPSAwOworCQl2ckxlbiA9IDQ3ODsKKwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQjYxMUY3
OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJv
b2ttYXJrOworCQlmUmVmID0gREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JH
TFNMLmggKi87CisJCW5hbWUgPSAiVHJhbnNsYXRvckdMU0wuaDogMSI7CisJCXJMZW4gPSAwOwor
CQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDQ3ODsKKwkJdnJMb2MgPSAwOwor
CX07CisJRkIzQzUwQjcxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsK
KwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gOTNENjFDQjBCQ0U1NEUwNjlENzFG
OTIwIC8qIE91dHB1dEdMU0wuaCAqLzsKKwkJbmFtZSA9ICJPdXRwdXRHTFNMLmg6IDEiOworCQly
TGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxMzc2OworCQl2
ckxvYyA9IDA7CisJfTsKKwlGQjNDNTBCODExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA5M0Q2MUNCMEJD
RTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovOworCQluYW1lID0gIk91dHB1dEdMU0wu
aDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9
IDEzNzY7CisJCXZyTG9jID0gMDsKKwl9OworCUZCM0M1MEM5MTFGNzlCMjMwMDgxRjVCQSAvKiBQ
QlhUZXh0Qm9va21hcmsgKi8gPSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9
IDkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi87CisJCW5hbWUgPSAi
T3V0cHV0R0xTTC5oOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7
CisJCXZyTGVuID0gMTM3NjsKKwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQ0ExMUY3OUIyMzAw
ODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJr
OworCQlmUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
OworCQluYW1lID0gIk91dHB1dEdMU0wuY3BwOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAw
OworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0gOTM4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjND
NTBDQjExRjc5QjIzMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQ
QlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4g
PSAwOworCQlyTG9jID0gMTI1MTc7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA3MjA7CisJCXZy
TG9jID0gMTIxNTg7CisJfTsKKwlGQjNDNTBDQzExRjc5QjIzMDA4MUY1QkEgLyogUEJYVGV4dEJv
b2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5
QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVy
TGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI0OTE7CisJCXJUeXBlID0g
MDsKKwkJdnJMZW4gPSA5ODM7CisJCXZyTG9jID0gMTAyOTc7CisJfTsKKwlGQjNDNTBDRDExRjc5
QzAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9v
a21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQly
TG9jID0gMTI0OTE7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA5ODM7CisJCXZyTG9jID0gMTAy
OTc7CisJfTsKKwlGQjNDNTBENjExRjc5RDAxMDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICov
ID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRD
MzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6
IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI0OTE7CisJCXJUeXBlID0gMDsKKwkJdnJM
ZW4gPSAxNDg1OworCQl2ckxvYyA9IDYwNTY7CisJfTsKKwlGQjNDNTBENzExRjc5RDAxMDA4MUY1
QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJ
CWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJ
CW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDQzOCI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMTI0
OTE7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxMzQwOworCQl2ckxvYyA9IDExNTM1OworCX07
CisJRkIzQzUwREIxMUY3OUQyNzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJ
aXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOworCQlyTGVuID0gMTk7CisJCXJMb2MgPSAyMzYzOworCQly
VHlwZSA9IDA7CisJfTsKKwlGQjNDNTBEQzExRjc5RDI3MDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1
MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFu
Zy5jcHA6IDg1IjsKKwkJckxlbiA9IDE5OworCQlyTG9jID0gMjM2MzsKKwkJclR5cGUgPSAwOwor
CQl2ckxlbiA9IDIyMjsKKwkJdnJMb2MgPSAyMjQwOworCX07CisJRkIzQzUwREYxMUY3OUQyRjAw
ODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJr
OworCQlmUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICov
OworCQluYW1lID0gIlNoYWRlckxhbmcuY3BwOiA4NSI7CisJCXJMZW4gPSAxOTsKKwkJckxvYyA9
IDIzNjM7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxNDQ4OworCQl2ckxvYyA9IDE2MjA7CisJ
fTsKKwlGQjNDNTBFMjExRjc5REQ0MDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gewor
CQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZG
RTAgLyogU2hhZGVyTGFuZy5jcHAgKi87CisJCW5hbWUgPSAiU2hhZGVyTGFuZy5jcHA6IDg1IjsK
KwkJckxlbiA9IDE5OworCQlyTG9jID0gMjM2MzsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDE0
NDg7CisJCXZyTG9jID0gMTYyMDsKKwl9OworCUZCM0M1MEU1MTFGNzlFMUUwMDgxRjVCQSAvKiBQ
QlhUZXh0Qm9va21hcmsgKi8gPSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9
IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsKKwkJbmFtZSA9
ICJTaGFkZXJMYW5nLmNwcDogODUiOworCQlyTGVuID0gMTk7CisJCXJMb2MgPSAyMzYzOworCQly
VHlwZSA9IDA7CisJCXZyTGVuID0gMTQ0ODsKKwkJdnJMb2MgPSAxNjIwOworCX07CisJRkIzQzUz
QjMxMUY4QkY3MjAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJY
VGV4dEJvb2ttYXJrOworCQlmUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRl
ckxhbmcuY3BwICovOworCQluYW1lID0gIlNoYWRlckxhbmcuY3BwOiA4NSI7CisJCXJMZW4gPSAx
OTsKKwkJckxvYyA9IDIzNjM7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSAxMDkyOworCQl2ckxv
YyA9IDE4MDk7CisJfTsKKwlGQjNDNTNCNDExRjhCRjcyMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSBEMkM5QzhFQjRB
N0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87CisJCW5hbWUgPSAicGFyc2VDb25z
dC5jcHA6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJM
ZW4gPSAxNDYzOworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTNCNTExRjhCRjcyMDA4MUY1QkEg
LyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZS
ZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87CisJCW5h
bWUgPSAicGFyc2VDb25zdC5jcHA6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJU
eXBlID0gMDsKKwkJdnJMZW4gPSAxNDYzOworCQl2ckxvYyA9IDA7CisJfTsKKwlGQkM3NkFGNjEx
RjYyMDNDMDBCRkIwMzcgLyogU291cmNlIENvbnRyb2wgKi8gPSB7CisJCWlzYSA9IFBCWFNvdXJj
ZUNvbnRyb2xNYW5hZ2VyOworCQlmYWxsYmFja0lzYSA9IFhDU291cmNlQ29udHJvbE1hbmFnZXI7
CisJCWlzU0NNRW5hYmxlZCA9IDA7CisJCXNjbUNvbmZpZ3VyYXRpb24gPSB7CisJCQlyZXBvc2l0
b3J5TmFtZXNGb3JSb290cyA9IHsKKwkJCQkiIiA9ICIiOworCQkJfTsKKwkJfTsKKwl9OworCUZC
Qzc2QUY3MTFGNjIwM0MwMEJGQjAzNyAvKiBDb2RlIHNlbnNlICovID0geworCQlpc2EgPSBQQlhD
b2RlU2Vuc2VNYW5hZ2VyOworCQlpbmRleFRlbXBsYXRlUGF0aCA9ICIiOworCX07CisJRkJDNzZC
NTMxMUY2MjYyMDAwQkZCMDM3IC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJY
VGV4dEJvb2ttYXJrOworCQlmUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1
dEdMU0wuY3BwICovOworCQluYW1lID0gIk91dHB1dEdMU0wuY3BwOiAxIjsKKwkJckxlbiA9IDA7
CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0gMTQzMDsKKwkJdnJMb2MgPSAw
OworCX07Cit9CkluZGV4OiBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxNyBAQAorLy8g
ISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0geworCX07CisJ
b2JqZWN0VmVyc2lvbiA9IDQ1OworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0
ZVRhcmdldCBzZWN0aW9uICovCisJCTE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi8g
PSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gNzdDRUZCN0I0MEYwNUIwQTgwNEU2QjJCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJBbGwiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJ
CQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCUZCM0M1MDY0MTFGNzkyOTcwMDgxRjVCQSAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSBBbGw7CisJCQlwcm9k
dWN0TmFtZSA9IEFsbDsKKwkJfTsKKwkJMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xF
IFN1cHBvcnQgKi8gPSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMEFBNTQ4MjVCRjVERjBBM0ZCQTkyQjYwIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJBTkdMRSBTdXBwb3J0IiAqLzsK
KwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUZBMEQ3MTI1REIwNkE3QTc3MTZBNTkxMCAvKiBBY3Rp
b24gImZsZXhfZ2xzbGFuZyIgKi8sCisJCQkJMEQ1MTNGOEI5MjM5NDlDMTU2REIwMkM1IC8qIEFj
dGlvbiAiYmlzb25fZ2xzbGFuZyIgKi8sCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJ
KTsKKwkJCW5hbWUgPSAiQU5HTEUgU3VwcG9ydCI7CisJCQlwcm9kdWN0TmFtZSA9ICJ0cmFuc2xh
dG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJfTsKKy8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2Vj
dGlvbiAqLworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwNTU2M0FERkVB
MTUxMTZENzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1
YWxpZmllckFsaXZlLmNwcCAqLzsgfTsKKwkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIElu
aXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9
OworCQkwRDQwNjQxNjczOThBNjg5MjgwOUEwOUUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUx
NURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4
RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICov
OyB9OworCQkzMkIxREJDRDZCODNGMjE0NkQ3ODdBNjIgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRD
IC8qIGF0b20uYyAqLzsgfTsKKwkJMzVCRTFCQkVFNjEzNUExQ0IwNjA4RUE4IC8qIGNwcHN0cnVj
dC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA1OEEw
QTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovOyB9OworCQkzQTk2RTlDQUM4QTI1
QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi87IH07
CisJCTQwRkMxODlCOEEyNDZFREYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1
QzNGIC8qIGludGVybU91dC5jcHAgKi87IH07CisJCTUwREYwMDAwNUNDNDIxMkY2RkIxMjkxRCAv
KiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi87
IH07CisJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5
QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQk4ODhGMTM4MjQ5OEUyRDc0QUYy
ODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJ
OUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJG
IC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQk5RUY1OTlCNUU0M0ZEQzFFQTZEQ0NGNjYgLyog
TGluay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
RDE1NEM2OEFFQkIzODVFQTdFNEE4MzMgLyogTGluay5jcHAgKi87IH07CisJCUFCQTVDNjFCMUI3
OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNw
cCAqLzsgfTsKKwkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEz
RkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlBRDg1NTE3RjA4NkZEQ0VG
Mzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsK
KwkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZD
QzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CisJCUI4QkQyNjg1QTE2QjE4OEND
REZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNw
cCAqLzsgfTsKKwkJQkVCQkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIEluZm9TaW5rLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjkyN0JFNUQzQzJD
ODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAgKi87IH07CisJCUNCN0YwRUYwRDZBODlGQThDNERG
NTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLzsgfTsKKwkJRTFDN0M1REZG
MEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFs
bG9jLmNwcCAqLzsgfTsKKwkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5jIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwMDc0NURBOTkx
NEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2
NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsKKwkJRjVB
RTJBMjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcx
QiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUY2QUJENThGOENBQjc2NDFEOEJGRTkz
NSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICov
OyB9OworCQlGQjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdCMTEyN0M3NUI1NzZG
QzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTgxMUY3OTI0QTAw
ODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3Bw
ICovOyB9OworCQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZCNzBEQzc0
QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwOEUx
MUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcu
Y3BwICovOyB9OworCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190YWIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzRDE2OUNC
ODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTIxMUY3
OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi87
IH07CisJCUZCM0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdCRTVEM0MyQzgyRjg2
MTExREYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQlGQjNDNTA5NDExRjc5NENFMDA4MUY1QkEg
LyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07
CisJCUZCM0M1MDk1MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYwQzM5OThDOUNFNjZERTBD
NUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTYxMUY3OTRDRTAw
ODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJtZWRpYXRl
LmNwcCAqLzsgfTsKKwkJRkIzQzUwOTcxMUY3OTRDRTAwODFGNUJBIC8qIGludGVybU91dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJRkIzQzUwOTgxMUY3OTRD
RTAwODFGNUJBIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1U
cmF2ZXJzZS5jcHAgKi87IH07CisJCUZCM0M1MDk5MTFGNzk0Q0UwMDgxRjVCQSAvKiBMaW5rLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREMTU0QzY4
QUVCQjM4NUVBN0U0QTgzMyAvKiBMaW5rLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUExMUY3OTRDRTAw
ODFGNUJBIC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9w
b3NpeC5jcHAgKi87IH07CisJCUZCM0M1MDlCMTFGNzk0Q0UwMDgxRjVCQSAvKiBwYXJzZUNvbnN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyQzlD
OEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKKwkJRkIzQzUwOUMx
MUY3OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJz
ZUhlbHBlci5jcHAgKi87IH07CisJCUZCM0M1MDlEMTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29sQWxs
b2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY0
RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi87IH07CisJCUZCM0M1MDlF
MTFGNzk0Q0UwMDgxRjVCQSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyog
UXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQlGQjNDNTA5RjExRjc5NENFMDA4MUY1QkEgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CisJ
CUZCM0M1MEEwMTFGNzk0Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZF
MCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKKwkJRkIzQzUwQTExMUY3OTRDRTAwODFGNUJBIC8q
IFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07
CisJCUZCM0M1MEE0MTFGNzk0RkYwMDgxRjVCQSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2REMgLyog
YXRvbS5jICovOyB9OworCQlGQjNDNTBBNTExRjc5NEZGMDA4MUY1QkEgLyogY3BwLmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzU3MDdCMzkzQjdFQUI3
REQ5OTk5Q0IgLyogY3BwLmMgKi87IH07CisJCUZCM0M1MEE2MTFGNzk0RkYwMDgxRjVCQSAvKiBj
cHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLzsgfTsKKwkJRkIzQzUw
QTcxMUY3OTRGRjAwODFGNUJBIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5j
ICovOyB9OworCQlGQjNDNTBBODExRjc5NEZGMDA4MUY1QkEgLyogc2Nhbm5lci5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkYzQUE2OTRERjlBNDQ1NUE4
MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsKKwkJRkIzQzUwQTkxMUY3OTRGRjAwODFGNUJBIC8q
IHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi87IH07CisJCUZCM0M1MEFB
MTFGNzk0RkYwMDgxRjVCQSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAq
LzsgfTsKKwkJRkIzQzUwQUIxMUY3OTUxQjAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREQzQjdFM0I3QjM1
QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLzsgfTsKKwkJRkIzQzUwQUMxMUY3OTUx
QjAwODFGNUJBIC8qIE91dHB1dEdMU0wuaCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmgg
Ki87IH07CisvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQ29u
dGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KKwkJRTY5QkZCRTJEMTI3MjYyMEU0NkMzRjhBIC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Q
cm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IERBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQ
cm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0
cmluZyA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RTsKKwkJCXJlbW90ZUluZm8gPSAidHJhbnNs
YXRvcl9jb21tb24gU3VwcG9ydCI7CisJCX07CisJCUZCM0M1MDYzMTFGNzkyOTcwMDgxRjVCQSAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVt
UHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyog
UHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURT
dHJpbmcgPSBGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkE7CisJCQlyZW1vdGVJbmZvID0gYW5nbGU7
CisJCX07CisJCUZCM0M1MEQwMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJv
eHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQ
b3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87CisJ
CQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAzMTM0OUQ2NjVGQUU2
NDJBRUI0OTEzNUU7CisJCQlyZW1vdGVJbmZvID0gIkFOR0xFIFN1cHBvcnQiOworCQl9OworLyog
RW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZpbGVS
ZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwNTZGRUFEQzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0
b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTJFQUYwMjgzMTFFRUE0NzUzRTgy
ODE4IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29sQWxsb2MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBNzY1Qjg2Q0JBRjBE
NEEzRTY5RENBNyAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2VsZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMDA3NDVEQTk5MTRGREUyNzREMDNE
NSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJFN0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFs
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9j
b21tb24uYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
YXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlidHJhbnNsYXRvcl9jb21t
b24uYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJM0Y3QzQ4NkMzNzBB
NzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0ODU3RTE4Nzk5RDMz
MkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVh
bGlmaWVyQWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OEI3NDAyQ0Mw
N0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRw
dXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEFCQTIzMEZFQTM2NTRC
MDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVnLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNw
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU4MEIy
QTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0
IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0SExTTC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6
ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplRGxsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJCQzgyMjRCOUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nl
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzZCQjEy
QUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9s
VGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0Q5Q0YzNzZEQzU3OTlCNEM2
QjMzMzFFIC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3ltYm9scy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NTEzRkFDNjk5REIxNTU4
RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1ODQ1RkZGNUE4RTYzMzY0MzA4MjM2RCAvKiBJ
bml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNv
bnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlBNkY3QjFBRDM5MThFNjRE
Rjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMzMjI1QzJGOEMzNTczQ0Q5NzI1RTY2IC8qIGdsc2xh
bmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NTI3NkFB
NkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZGVidWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBh
cnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkzIC8qIE91dHB1
dEhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTlDRUQzQUZGMUU2MUI0NUVFMTAwNTY1NiAvKiBhdG9tLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUQ0N0Ix
QUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1
YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEwQ0U0MzYzMTg0
OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTMxNTNENThGNEJCQkQ5OEE4
NEU0MjEwIC8qIGdsc2xhbmcubCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUU2NUUxMzlBRTEwREU5RUZBRDhE
NUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
RjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjQzNkVGRjA2
OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3ZlVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI2NEVBQkU3MzhGQzY2
NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjc1NzA3QjM5M0I3RUFCN0REOTk5
OUNCIC8qIGNwcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUxIC8qIGdsc2xhbmdfdGFiLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJFMjU4NDg2
MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMzREFG
RjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlR2VuSExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0RkU5
ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM4
QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3Np
bmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCMUY5MUQzRDhDQzQ0NkYz
NUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyog
UGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xl
Lmd5cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBidWlsZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNGRDEyQzZFNDZFQkUwODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQxM0MzNjkzQjlFNDBEMzdGMkZB
QjM0QSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURE
MTU0QzY4QUVCQjM4NUVBN0U0QTgzMyAvKiBMaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExp
bmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEREQzQjdFM0I3QjM1QTBCODQ2
OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNG
IC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyogTU1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYwMTNB
NzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHN5bWJvbHMu
Yzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0
IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5rLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCM0M1
MDVEMTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBsaWJhbmdsZS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owor
CQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBz
Y2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVy
ZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNUExMUY3OTI0QTAwODFGNUJBIC8qIEZy
YW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24g
Ki8KKwkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5
MUZENkRDIC8qIGF0b20uYyAqLywKKwkJCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRv
bS5oICovLAorCQkJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCisJ
CQkJQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAorCQkJCTUyOEZGMjAxODM5
QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLywKKwkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEg
LyogY3Bwc3RydWN0LmMgKi8sCisJCQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9y
eS5jICovLAorCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnkuaCAqLywKKwkJ
CQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCisJCQkJNkJCQzgyMjRC
OUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlGRjNBQTY5NERGOUE0NDU1
QTgxMzIzNEQgLyogc2Nhbm5lci5jICovLAorCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAv
KiBzY2FubmVyLmggKi8sCisJCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFs
cy5oICovLAorCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCisJ
CQkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKKwkJCQkyRDAwNzQ1
REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCisJCQkJRDEzQzM2OTNCOUU0MEQzN0Yy
RkFCMzRBIC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBwcmVwcm9jZXNzb3I7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3
ODYgLyogU291cmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovLAorCQkJCTI3
RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQlCN0IxMTI3Qzc1
QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAorCQkJCUM0OTU0OURDQ0FGNDUw
RUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCisJCQkJRjc0NjE4RjE4RkU1NDQ4MTE1
MDE3QzQ0IC8qIENvbW1vbi5oICovLAorCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBD
b25zdGFudFVuaW9uLmggKi8sCisJCQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9T
aW5rLmNwcCAqLywKKwkJCQlGN0IyOTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAq
LywKKwkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCisJ
CQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRpYWxpemUuaCAqLywKKwkJCQk2MEMz
OTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCisJCQkJQTBDRTQz
NjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKKwkJCQkyRTdDOUI2RTZE
Qjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQk4NTg0NUZGRjVB
OEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAorCQkJCUM0RkU5
ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJM0Y3QzQ4
NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJREQxNTRDNjhB
RUJCMzg1RUE3RTRBODMzIC8qIExpbmsuY3BwICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZF
MzUzNiAvKiBNTWFwLmggKi8sCisJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1
dEdMU0wuY3BwICovLAorCQkJCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNM
LmggKi8sCisJCQkJOUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICov
LAorCQkJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRITFNMLmggKi8sCisJCQkJ
OTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlDRUUw
QzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlCNjRFQUJFNzM4
RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQkxMkVBRjAyODMxMUVFQTQ3
NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3
IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKKwkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLywKKwkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyog
UmVtb3ZlVHJlZS5jcHAgKi8sCisJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92
ZVRyZWUuaCAqLywKKwkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAq
LywKKwkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJ
CQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKKwkJCQk3
QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQk2RkI3MERD
NzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAorCQkJCURERDNCN0Uz
QjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUMzREFGRjZCRjEy
QkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCisJCQkJRTNBMjlCNkU5QzIx
QjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCisJCQkJQUE1M0I2NjMyQzc2Rjkw
NURGMDhFNTY0IC8qIFR5cGVzLmggKi8sCisJCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8q
IFVuZm9sZFNlbGVjdC5jcHAgKi8sCisJCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVu
Zm9sZFNlbGVjdC5oICovLAorCQkJCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5j
cHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJ
QTMxNTNENThGNEJCQkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcubCAqLywKKwkJCQk4QzMyMjVDMkY4
QzM1NzNDRDk3MjVFNjYgLyogZ2xzbGFuZy55ICovLAorCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4
NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAv
KiBpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9j
YWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3Np
bmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bv
c2l4LmNwcCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5j
cHAgKi8sCisJCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlwYXRoID0gY29tcGlsZXI7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQk0NjZFMUQwNTMxQTc5QjU4MTNFOEE3RjggLyogSW50ZXJt
ZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
Q0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3BwICovLAorCQkJCUE1M0QxNjlD
Qjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkJQkM2NkQ2QjQ3RDlB
RjMyODY2NDRCQkUxIC8qIGdsc2xhbmdfdGFiLmggKi8sCisJCQkpOworCQkJbmFtZSA9IEludGVy
bWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gSU5URVJNRURJQVRFX0RJUjsKKwkJfTsKKwkJNUJC
RUZGOUI5MTczODI5N0I5NUM1NjhEID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovLAorCQkJCTQ2
NkUxRDA1MzFBNzlCNTgxM0U4QTdGOCAvKiBJbnRlcm1lZGlhdGVzICovLAorCQkJCUUwRURDNDEz
MEU3RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLywKKwkJCQlCMkMxODRDMzU0MzE5OEJBNTE1
OTJFQTQgLyogQnVpbGQgKi8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDRjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAg
LyogYnVpbGRfYW5nbGUuZ3lwICovLAorCQkJKTsKKwkJCW5hbWUgPSBCdWlsZDsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUUwRURDNDEzMEU3RDM3NDMxOENFNzJCRSAvKiBQ
cm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
M0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8sCisJ
CQkJRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFuZ2xlLmEgKi8sCisJCQkpOworCQkJ
bmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVu
ZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9u
ICovCisJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9
IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSAzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKKwkJCWJ1aWxkUGhhc2Vz
ID0gKAorCQkJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAorCQkJCUE1
Qzk5NEU3NERCMUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxk
UnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTI5MUVFMDQyMDJFQzc5
Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSB0
cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10
eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsKKwkJRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBIC8q
IGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1
cmF0aW9uTGlzdCA9IEZCM0M1MDVCMTFGNzkyNEEwMDgxRjVCQSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovOworCQkJYnVpbGRQaGFzZXMg
PSAoCisJCQkJRkIzQzUwNTYxMUY3OTI0QTAwODFGNUJBIC8qIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwNUExMUY3OTI0QTAwODFGNUJBIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRS
dWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJRkIzQzUwRDExMUY3OUND
QzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IGFu
Z2xlOworCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7CisJCQlwcm9kdWN0UmVmZXJl
bmNlID0gRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFuZ2xlLmEgKi87CisJCQlwcm9k
dWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsK
Ky8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQcm9qZWN0
IHNlY3Rpb24gKi8KKwkJREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0
ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMgPSB7CisJCQkJQnVp
bGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVTOworCQkJfTsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi87CisJCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9
IDE7CisJCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7CisJCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKKwkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCisJCQkJMzEzNDlENjY1RkFFNjQyQUVC
NDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi8sCisJCQkJRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJB
IC8qIGFuZ2xlICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8K
KworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEQ1MTNG
OEI5MjM5NDlDMTU2REIwMkM1IC8qIEFjdGlvbiAiYmlzb25fZ2xzbGFuZyIgKi8gPSB7CisJCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCQljb21w
aWxlci9nbHNsYW5nLnksCisJCQkpOworCQkJbmFtZSA9ICJBY3Rpb24gXCJiaXNvbl9nbHNsYW5n
XCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFu
Z190YWIuY3BwIiwKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5oIiwKKwkJ
CSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJCXNoZWxs
UGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJlY2hvIG5vdGU6IFwiRXhlY3V0aW5n
IGJpc29uIG9uIGNvbXBpbGVyL2dsc2xhbmcueVwiXG5leGVjIGJpc29uIC0tbm8tbGluZXMgXCIt
LWRlZmluZXM9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5oXCIgXCItLXNrZWxldG9u
PXlhY2MuY1wiIFwiLS1vdXRwdXQ9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5jcHBc
IiBjb21waWxlci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAw
OworCQl9OworCQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyogQWN0aW9uICJmbGV4X2dsc2xh
bmciICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0
aHMgPSAoCisJCQkJY29tcGlsZXIvZ2xzbGFuZy5sLAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9u
IFwiZmxleF9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJ
QVRFX0RJUikvZ2xzbGFuZy5jcHAiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0
ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxu
ZXhlYyBmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgXCItLW91dGZpbGU9JHtJTlRFUk1FRElBVEVf
RElSfS9nbHNsYW5nLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcubFxuZXhpdCAxXG4iOworCQkJc2hv
d0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwor
CQlFQUEyMkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyogSW5mb1NpbmsuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8qIEluaXRpYWxp
emUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIElu
aXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTBERjAwMDA1Q0M0MjEyRjZGQjEy
OTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MEZDMTg5QjhBMjQ2
RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY1QUUyQTI5
MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk5RUY1OTlCNUU0M0ZEQzFFQTZEQ0NGNjYgLyogTGluay5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTFDN0M1REZGMEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwNTU2M0FERkVBMTUxMTZENzIzMzMzMkYgLyogUXVhbGlmaWVy
QWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8q
IFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjhCRDI2ODVBMTZCMTg4Q0NERkIw
NTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjZBQkQ1OEY4Q0FCNzY0
MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMyQjFEQkNE
NkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKKwkJCQlDQjdGMEVGMEQ2
QTg5RkE4QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKKwkJCQkzNUJFMUJCRUU2MTM1
QTFDQjA2MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKKwkJCQkzQTk2RTlDQUM4
QTI1QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKKwkJCQlGMDk4RjQ2M0VE
QUJDRjA3NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCisJCQkJQUQ4NTUxN0Yw
ODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAorCQkJCUU4QzcyN0FB
OEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAorCQkJCUFCQTVDNjFC
MUI3OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBENDA2
NDE2NzM5OEE2ODkyODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CisJCX07CisJCUZCM0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAvKiBTb3VyY2VzICovID0geworCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OworCQkJZmlsZXMgPSAoCisJCQkJRkIzQzUwQUIxMUY3OTUxQjAwODFGNUJBIC8qIFRyYW5z
bGF0b3JHTFNMLmggaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBQzExRjc5NTFCMDA4MUY1QkEg
LyogT3V0cHV0R0xTTC5oIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTQxMUY3OTRGRjAwODFG
NUJBIC8qIGF0b20uYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE1MTFGNzk0RkYwMDgxRjVC
QSAvKiBjcHAuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE2MTFGNzk0RkYwMDgxRjVCQSAv
KiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE3MTFGNzk0RkYwMDgxRjVC
QSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE4MTFGNzk0RkYwMDgxRjVC
QSAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBOTExRjc5NEZGMDA4MUY1
QkEgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQUExMUY3OTRGRjAwODFG
NUJBIC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOEUxMUY3OTQ5RTAwODFG
NUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNTcxMUY3OTI0QTAw
ODFGNUJBIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDkyMTFG
Nzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5MzEx
Rjc5NENFMDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUw
OTQxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwOTUxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzQzUwOTYxMUY3OTRDRTAwODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjNDNTA5NzExRjc5NENFMDA4MUY1QkEgLyogaW50ZXJtT3V0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk4MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1U
cmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5OTExRjc5NENFMDA4MUY1QkEg
LyogTGluay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5QTExRjc5NENFMDA4MUY1QkEg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNTgxMUY3OTI0
QTAwODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUIx
MUY3OTRDRTAwODFGNUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwOUMxMUY3OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUZCM0M1MDlEMTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzQzUwOUUxMUY3OTRDRTAwODFGNUJBIC8qIFF1YWxpZmllckFsaXZlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlGMTFGNzk0Q0UwMDgxRjVCQSAvKiBSZW1vdmVUcmVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEEwMTFGNzk0Q0UwMDgxRjVCQSAvKiBTaGFk
ZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA1OTExRjc5MjRBMDA4
MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOEYx
MUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsK
KwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5k
IFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYVGFyZ2V0RGVw
ZW5kZW5jeSBzZWN0aW9uICovCisJCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAvKiBQQlhUYXJn
ZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRh
cmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOworCQkJ
dGFyZ2V0UHJveHkgPSBFNjlCRkJFMkQxMjcyNjIwRTQ2QzNGOEEgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovOworCQl9OworCQlGQjNDNTA2NDExRjc5Mjk3MDA4MUY1QkEgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJn
ZXQgPSBGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi87CisJCQl0YXJnZXRQcm94
eSA9IEZCM0M1MDYzMTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87
CisJCX07CisJCUZCM0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDMxMzQ5
RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOworCQkJdGFyZ2V0UHJveHkg
PSBGQjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwor
CQl9OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCisvKiBCZWdpbiBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTAwQkYyRUJDQkRGNTY3OEY0QkEyRkE5
MiAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBT
dXBwb3J0IjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMUExMkFBNUQ2NUFD
REU3MUFFMDg5RUUzIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gQWxsOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworCQkxRjNGMTIxOEI1MTM1RkJCMDY3REU4MDkg
LyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlIRUFERVJf
U0VBUkNIX1BBVEhTID0gKAorCQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAorCQkJCSk7CisJCQkJ
UFJPRFVDVF9OQU1FID0gdHJhbnNsYXRvcl9jb21tb247CisJCQl9OworCQkJbmFtZSA9IERlZmF1
bHQ7CisJCX07CisJCUJDNTc5M0M5QTFGRjAyMUE4MUM2NjU1OSAvKiBEZWZhdWx0ICovID0gewor
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
CUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKSI7CisJCQkJQ09ORklHVVJBVElPTl9C
VUlMRF9ESVIgPSAiJChCVUlMRF9ESVIpIjsKKwkJCQlJTlRFUk1FRElBVEVfRElSID0gIiQoUFJP
SkVDVF9ERVJJVkVEX0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJT04pIjsKKwkJCQlPTkxZX0FDVElW
RV9BUkNIID0gWUVTOworCQkJCVNIQVJFRF9JTlRFUk1FRElBVEVfRElSID0gIiQoU1lNUk9PVCkv
RGVyaXZlZFNvdXJjZXMvJChDT05GSUdVUkFUSU9OKSI7CisJCQl9OworCQkJbmFtZSA9IERlZmF1
bHQ7CisJCX07CisJCUZCM0M1MDVDMTFGNzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0ICovID0gewor
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
CUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJ
CQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBhbmds
ZTsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmln
dXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlv
biAqLworCQkwQUE1NDgyNUJGNURGMEEzRkJBOTJCNjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFOR0xFIFN1cHBvcnQiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
MDBCRjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gRGVmYXVsdDsKKwkJfTsKKwkJMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovID0geworCQkJ
aXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJ
CQkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25O
YW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMzRCQjM4RTNBNzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1v
biIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKKwkJCQkxRjNGMTIxOEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVsdCAqLywK
KwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQk3N0NFRkI3QjQwRjA1QjBBODA0
RTZCMkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQg
IkFsbCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKKwkJCQkxQTEyQUE1RDY1QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQlGQjNDNTA1QjExRjc5MjRB
MDA4MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
ImFuZ2xlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCUZCM0M1MDVDMTFGNzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0
ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisvKiBFbmQgWENDb25maWd1
cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2JqZWN0ID0gREExODhEOEM2QkY4MDcz
MTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpJbmRleDogQU5HTEUvc3JjL2NvbW1v
bi9hbmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxz
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gYW5nbGV1dGls
cy5oOiBDb21tb24gQU5HTEUgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTU1PTl9BTkdMRVVUSUxT
X0hfCisjZGVmaW5lIENPTU1PTl9BTkdMRVVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxs
b3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMg
bXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKyNk
ZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNv
bnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBU
eXBlTmFtZSYpCisKKyNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpJbmRleDogQU5HTEUv
c3JjL2NvbW1vbi9kZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3Bw
OiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitzdGF0aWMgYm9vbCB0cmFj
ZV9vbiA9IHRydWU7CisKK25hbWVzcGFjZSBnbAorewordm9pZCB0cmFjZShjb25zdCBjaGFyICpm
b3JtYXQsIC4uLikKK3sKKyAgICBpZiAodHJhY2Vfb24pCisgICAgeworICAgICAgICBpZiAoZm9y
bWF0KQorICAgICAgICB7CisgICAgICAgICAgICBGSUxFICpmaWxlID0gZm9wZW4oImRlYnVnLnR4
dCIsICJhIik7CisKKyAgICAgICAgICAgIGlmIChmaWxlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZhX2xpc3QgdmFyYXJnOworICAgICAgICAgICAgICAgIHZhX3N0YXJ0KHZhcmFy
ZywgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFy
Zyk7CisgICAgICAgICAgICAgICAgdmFfZW5kKHZhcmFyZyk7CisKKyAgICAgICAgICAgICAgICBm
Y2xvc2UoZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1v
bi9kZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5o
OiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTU1PTl9ERUJVR19IXworI2RlZmlu
ZSBDT01NT05fREVCVUdfSF8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0
Lmg+CisKK25hbWVzcGFjZSBnbAoreworICAgIC8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWdn
aW5nIGxvZworICAgIHZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworfQorCisv
LyBBIG1hY3JvIHRvIG91dHB1dCBhIHRyYWNlIG9mIGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZworI2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5l
IFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJ0cmFjZTogJXMibWVzc2FnZSJcbiIsIF9f
RlVOQ1RJT05fXywgX19WQV9BUkdTX18pCisjZWxzZQorICAgICNkZWZpbmUgVFJBQ0UoLi4uKSAo
KHZvaWQpMCkKKyNlbmRpZgorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIHRvIGRlbm90ZSBhbiBpdGVt
IGluIG5lZWQgb2YgZml4aW5nLiBXaWxsIG9jY3VyIGV2ZW4gaW4gcmVsZWFzZSBtb2RlLgorI2Rl
ZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZml4bWU6ICVzIm1lc3NhZ2UiXG4i
LCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1
bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNh
c2Ugb2YgZXJyb3IuIFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUuCisjZGVmaW5lIEVS
UihtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZXJyOiAlcyJtZXNzYWdlIlxuIiwgX19GVU5DVElP
Tl9fLCBfX1ZBX0FSR1NfXykKKworLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5k
IG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhw
cmVzc2lvbikgZG8geyBcCisgICAgaWYoIShleHByZXNzaW9uKSkgXAorICAgICAgICBFUlIoIlx0
ISBBc3NlcnQgZmFpbGVkIGluICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9f
LCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKKyAgICB9IHdoaWxlKDAp
CisKKworLy8gQSBtYWNybyB0byBpbmRpY2F0ZSB1bmltcGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkK
KyNpZm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCisgICAg
ICAgIEZJWE1FKCJcdCEgVW5pbXBsZW1lbnRlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9f
TElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgICAgIH0gd2hpbGUoMCkK
KyNlbHNlCisgICAgI2RlZmluZSBVTklNUExFTUVOVEVEKCkgRklYTUUoIlx0ISBVbmltcGxlbWVu
dGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZW5kaWYKKworLy8gQSBt
YWNybyBmb3IgY29kZSB3aGljaCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcmVhY2hlZCB1bmRlciB2
YWxpZCBhc3N1bXB0aW9ucworI2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFVOUkVBQ0hBQkxF
KCkgZG8geyBcCisgICAgICAgIEVSUigiXHQhIFVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxu
IiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsgXAor
ICAgICAgICB9IHdoaWxlKDApCisjZWxzZQorICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIo
Ilx0ISBVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5F
X18pCisjZW5kaWYKKworLy8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBh
c3NlcnQgdG8gdmFsaWRhdGUgY29uc3RhbnQgY29uZGl0aW9ucworI2RlZmluZSBNRVRBX0FTU0VS
VChjb25kaXRpb24pIHR5cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tz
dGF0aWNfY2FzdDxib29sPihjb25kaXRpb24pPzE6LTFdCisKKyNlbmRpZiAgIC8vIENPTU1PTl9E
RUJVR19IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVm
aW5lIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMK
Ky8vCitlbnVtIFRQcmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29y
dGVkCisgICAgRWJwVW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAg
RWJwSGlnaCwKK307CisKK19faW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhU
UHJlY2lzaW9uIHApCit7CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJ
CXJldHVybiAiaGlnaHAiOwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1l
ZGl1bXAiOwlicmVhazsKKyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsK
KyAgICBkZWZhdWx0OgkJCXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZh
bGxiYWNrCisgICAgfQorfQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywg
ZXRjLiwgYXJlIG9ydGhvZ29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAg
ICBFYnRWb2lkLAorICAgIEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAg
IEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24g
b2YgSXNTYW1wbGVyKCkKKyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisg
ICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQorICAgIEVidFN0cnVjdCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAg
ICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KK307CisKK19faW5saW5lIGJvb2wgSXNTYW1w
bGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxl
ckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7Cit9CisKKy8vCisvLyBRdWFsaWZp
ZXJzIGFuZCBidWlsdC1pbnMuICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2Fu
IGJlIHJlYWQKKy8vIG9yIHdyaXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJh
bnNsYXRvciB0byBrbm93IHdoaWNoIHJlZ2lzdGVycworLy8gdG8gYWxsb2NhdGUgdmFyaWFibGVz
IGluLiAgU2luY2UgYnVpbHQtaW5zIHRlbmQgdG8gZ28gdG8gZGlmZmVyZW50IHJlZ2lzdGVycwor
Ly8gdGhhbiB2YXJ5aW5nIG9yIHVuaWZvcm0sIGl0IG1ha2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJz
LCBub3Qgc3ViLWNsYXNzZXMuCisvLworZW51bSBUUXVhbGlmaWVyCit7CisgICAgRXZxVGVtcG9y
YXJ5LCAgICAgLy8gRm9yIHRlbXBvcmFyaWVzICh3aXRoaW4gYSBmdW5jdGlvbiksIHJlYWQvd3Jp
dGUKKyAgICBFdnFHbG9iYWwsICAgICAgICAvLyBGb3IgZ2xvYmFscyByZWFkL3dyaXRlCisgICAg
RXZxQ29uc3QsICAgICAgICAgLy8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1
dCBwYXJhbWV0ZXJzIGluIGZ1bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRv
bmx5CisgICAgRXZxVmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMg
b25seQorICAgIEV2cVZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQv
d3JpdGUKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21l
bnQgc2hhZGVycyBvbmx5CisgICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4
IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRv
bmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CisKKyAgICAvLyBwYWNrL3VucGFjayBpbnB1dCBhbmQg
b3V0cHV0CisgICAgRXZxSW5wdXQsCisgICAgRXZxT3V0cHV0LAorCisgICAgLy8gcGFyYW1ldGVy
cworICAgIEV2cUluLAorICAgIEV2cU91dCwKKyAgICBFdnFJbk91dCwKKyAgICBFdnFDb25zdFJl
YWRPbmx5LAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgdmVydGV4IHNoYWRlcgorICAg
IEV2cVBvc2l0aW9uLAorICAgIEV2cVBvaW50U2l6ZSwKKworICAgIC8vIGJ1aWx0LWlucyByZWFk
IGJ5IGZyYWdtZW50IHNoYWRlcgorICAgIEV2cUZyYWdDb29yZCwKKyAgICBFdnFGcm9udEZhY2lu
ZywKKyAgICBFdnFQb2ludENvb3JkLAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgZnJh
Z21lbnQgc2hhZGVyCisgICAgRXZxRnJhZ0NvbG9yLAorICAgIEV2cUZyYWdEYXRhLAorCisgICAg
Ly8gZW5kIG9mIGxpc3QKKyAgICBFdnFMYXN0LAorfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCBm
b3IgZGVidWcgcHJpbnQgb3V0LCBjYXJyaWVkIGFsb25nIHdpdGggdGhlIGRlZmluaXRpb25zIGFi
b3ZlLgorLy8KK19faW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlm
aWVyIHEpCit7CisgICAgc3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAg
ICAgIHJldHVybiAiVGVtcG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDog
ICAgICAgICByZXR1cm4gIkdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25z
dDogICAgICAgICAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
Q29uc3RSZWFkT25seTogIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cUF0dHJpYnV0ZTogICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxVmFyeWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVh
azsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFy
eWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImlu
dmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0
dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAg
IHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAg
ICAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDog
ICAgICAgICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5w
dXQ6ICAgICAgICAgIHJldHVybiAiaW5wdXQiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cU91dHB1dDogICAgICAgICByZXR1cm4gIm91dHB1dCI7ICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFQb3NpdGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxUG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAg
IGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsg
ICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRh
IjsgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25v
d24gcXVhbGlmaWVyIjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNMVURF
RF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9y
R0xTTC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0
ZSB0aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2Rl
LiAgSXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENvbXBpbGVy
KiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQor
eworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wobGFuZ3VhZ2UsIHNwZWMpOworfQorCisv
LworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVyCisvLwor
dm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQoreworICAgIGRlbGV0ZSBj
b21waWxlcjsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9U
cmFuc2xhdG9ySExTTC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVk
IHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBs
ZXZlbCBjb2RlLiAgSXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLwor
VENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3Bl
YyBzcGVjKQoreworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wobGFuZ3VhZ2UsIHNwZWMp
OworfQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBp
bGVyCisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQoreworICAg
IGRlbGV0ZSBjb21waWxlcjsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTU1PTl9JTkNMVURFRF8KKyNkZWZp
bmUgX0NPTU1PTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzc3RyZWFt
PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21w
aWxlci9Qb29sQWxsb2MuaCIKKwordHlwZWRlZiBpbnQgVFNvdXJjZUxvYzsKK2NvbnN0IHVuc2ln
bmVkIGludCBTb3VyY2VMb2NMaW5lTWFzayA9IDB4ZmZmZjsKK2NvbnN0IHVuc2lnbmVkIGludCBT
b3VyY2VMb2NTdHJpbmdTaGlmdCA9IDE2OworCisvLworLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCisv
LworI2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEEpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0
dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSAgICAgXAorICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIHZvaWQgKikgeyB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90
IHMpIHsgcmV0dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgXAorICAgIHZvaWQqIG9wZXJh
dG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSBcCisg
ICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICop
IHsgfQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0eXBlZGVmIHBvb2xf
YWxsb2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0ZDo6YmFzaWNfc3Ry
aW5nIDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3Ry
aW5nOwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3Ry
YWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKK2lubGluZSBUU3Ry
aW5nKiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQqIG1lbW9yeSA9IEds
b2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3
KG1lbW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9y
eS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCisvLyBhY3Jv
c3MgY29tcGlsZXMvbGlua3MuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmlu
ZworI2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KKworLy8K
Ky8vIFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcwor
Ly8KK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9y
PFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUg
c3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsK
KyAgICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30K
KyAgICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQs
IHBvb2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3Rk
Ojp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwordGVtcGxhdGUgPGNs
YXNzIEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAorY2xhc3MgVE1hcCA6
IHB1YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25z
dCBLLCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpw
YWlyPGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEss
IEQsIENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBu
YW1lIGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAgICBUTWFwKGNvbnN0
IHRBbGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1h
cDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQorfTsKKwordHlw
ZWRlZiBUTWFwPFRTdHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJsZTsKKworI2VuZGlmIC8vIF9D
T01NT05fSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI4OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQ09OU1RB
TlRfVU5JT05fSU5DTFVERURfCisjZGVmaW5lIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KKwor
I2luY2x1ZGUgPGFzc2VydC5oPgorCitjbGFzcyBDb25zdGFudFVuaW9uIHsKK3B1YmxpYzoKKwor
ICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikgICAgICAg
IAorICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsg
fQorICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0Rmxv
YXQ7IH0KKyAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0
Qm9vbDsgfQorCisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZs
b2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkg
eyByZXR1cm4gYkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlD
b25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQor
ICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaSA9PSBp
Q29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoZiA9PSBmQ29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiID09IGJDb25zdCkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgIGlmIChjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0KQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRG
bG9hdDoKKyAgICAgICAgICAgIGlmIChjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0KQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRCb29sOgorICAgICAgICAgICAgaWYgKGNvbnN0YW50LmJDb25zdCA9PSBiQ29uc3QpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShp
KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShmKTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KGIpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb25zdGFudFVu
aW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShj
b25zdGFudCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgQ29uc3RhbnRVbmlv
biYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3Rh
bnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgIGlmIChpQ29uc3QgPiBjb25zdGFudC5pQ29uc3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPiBjb25zdGFudC5mQ29uc3QpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29uc3Rh
bnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0g
Y29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVi
dEludDoKKyAgICAgICAgICAgIGlmIChpQ29uc3QgPCBjb25zdGFudC5pQ29uc3QpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPCBjb25zdGFudC5mQ29u
c3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRv
cisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAg
Q29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3Rh
bnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDog
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29u
c3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNv
bnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZs
b2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAg
Q29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNv
bnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAg
YXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5z
ZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAorICAgICAgICBkZWZh
dWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3Bl
cmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAg
ICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJ
bnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisg
ICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50
KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAg
ICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPj4g
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFs
c2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBk
ZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVu
aW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0
IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAg
ICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVl
OworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlD
b25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNz
ZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yXihj
b25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25z
dGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50
eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAg
ICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25z
dGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29uc3Rh
bnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYg
IkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJl
dHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0
QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRU
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorcHJpdmF0ZToKKworICAgIHVuaW9uICB7Cisg
ICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cworICAgICAg
ICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCisgICAgICAgIGZs
b2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cworICAgIH0g
OworCisgICAgVEJhc2ljVHlwZSB0eXBlOworfTsKKworI2VuZGlmIC8vIF9DT05TVEFOVF9VTklP
Tl9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5o
IgorCit2b2lkIFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBtZXNzYWdlKSB7Cisg
ICAgc3dpdGNoKG1lc3NhZ2UpIHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2lu
ay5hcHBlbmQoIldBUk5JTkc6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RVByZWZpeEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAg
ICAgICAgc2luay5hcHBlbmQoIklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVQcmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5h
cHBlbmQoIlVOSU1QTEVNRU5URUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRVByZWZpeE5vdGU6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5k
KCJVTktPV04gRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IFRJbmZvU2lua0Jhc2U6OmxvY2F0aW9uKFRTb3VyY2VMb2MgbG9jKSB7CisgICAgaW50IHN0cmlu
ZyA9IGxvYyA+PiBTb3VyY2VMb2NTdHJpbmdTaGlmdDsKKyAgICBpbnQgbGluZSA9IGxvYyAmIFNv
dXJjZUxvY0xpbmVNYXNrOworCisgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAg
IGlmIChsaW5lKQorICAgICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6IiA8PCBsaW5lOworICAg
IGVsc2UKKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZyA8PCAiOj8gIjsKKyAgICBzdHJlYW0gPDwg
IjogIjsKKworICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Cit9CisKK3ZvaWQgVEluZm9T
aW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKSB7Cisg
ICAgcHJlZml4KG1lc3NhZ2UpOworICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBwZW5k
KCJcbiIpOworfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgbWVz
c2FnZSwgY29uc3QgY2hhciogcywgVFNvdXJjZUxvYyBsb2MpIHsKKyAgICBwcmVmaXgobWVzc2Fn
ZSk7CisgICAgbG9jYXRpb24obG9jKTsKKyAgICBzaW5rLmFwcGVuZChzKTsKKyAgICBzaW5rLmFw
cGVuZCgiXG4iKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9JTkZPU0lOS19JTkNMVURFRF8KKyNk
ZWZpbmUgX0lORk9TSU5LX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg
ImNvbXBpbGVyL0NvbW1vbi5oIgorCisvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2Yg
dGhlIGdpdmVuIGZsb2F0aW5nLXBvaW50IG51bWJlci4KK2lubGluZSBmbG9hdCBmcmFjdGlvbmFs
UGFydChmbG9hdCBmKSB7CisgIGZsb2F0IGludFBhcnQgPSAwLjBmOworICByZXR1cm4gbW9kZmYo
ZiwgJmludFBhcnQpOworfQorCisvLworLy8gVFByZWZpeFR5cGUgaXMgdXNlZCB0byBjZW50cmFs
aXplIGhvdyBpbmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KKy8vIFNlZSBiZWxvdy4KKy8vCitlbnVt
IFRQcmVmaXhUeXBlIHsKKyAgICBFUHJlZml4Tm9uZSwKKyAgICBFUHJlZml4V2FybmluZywKKyAg
ICBFUHJlZml4RXJyb3IsCisgICAgRVByZWZpeEludGVybmFsRXJyb3IsCisgICAgRVByZWZpeFVu
aW1wbGVtZW50ZWQsCisgICAgRVByZWZpeE5vdGUKK307CisKKy8vCisvLyBFbmNhcHN1bGF0ZSBp
bmZvIGxvZ3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVtLgorLy8KKy8vIFRoZSBtZXRo
b2RzIGFyZSBhIGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0aW5nIGEgdmFyaWV0eSBvZgor
Ly8gbWVzc2FnZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhlIGxvZy4KKy8vCitjbGFzcyBU
SW5mb1NpbmtCYXNlIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlKCkge30KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3Qg
VCYgdCkgeworICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0
cmVhbSA8PCB0OworICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE92ZXJyaWRlIDw8IG9wZXJhdG9yIGZvciBzcGVj
aWZpYyB0eXBlcy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdzCisgICAgLy8gYW5kIGNo
YXJhY3RlcnMgZGlyZWN0bHkgdG8gdGhlIHNpbmsuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0
b3I8PChjaGFyIGMpIHsKKyAgICAgICAgc2luay5hcHBlbmQoMSwgYyk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBjaGFy
KiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRQZXJzaXN0U3Ry
aW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRTdHJpbmcm
IHN0cikgeworICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIoKSk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBhcmUgd3JpdHRlbiB3aXRo
IGNvcnJlY3QgcHJlY2lzaW9uLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoZmxvYXQg
ZikgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBwb2lu
dCBpcyB3cml0dGVuLiBJZiBhIG51bWJlcgorICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEgZnJh
Y3Rpb25hbCBwYXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0IGRvZXMKKyAgICAgICAg
Ly8gbm90IHdyaXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0cyBpbnRlcnByZXRlZCBh
cyBpbnRlZ2VyIGJ5CisgICAgICAgIC8vIHRoZSBjb21waWxlci4KKyAgICAgICAgVFBlcnNpc3RT
dHJpbmdTdHJlYW0gc3RyZWFtOworICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQoZikgPT0gMC4w
ZikgeworICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsKKyAgICAgICAgICAgIHN0cmVh
bSA8PCBzdGQ6OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhlZCk7CisgICAgICAgICAg
ICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsKKyAgICAgICAgICAgIHN0cmVh
bS5wcmVjaXNpb24oOCk7CisgICAgICAgICAgICBzdHJlYW0gPDwgZjsKKyAgICAgICAgfQorICAg
ICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorICAgIC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRoZWlyIG5hbWVzIGluc3RlYWQg
b2YgaW50ZWdyYWwgdmFsdWUuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChib29sIGIp
IHsKKyAgICAgICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisgICAg
ICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICB2b2lkIGVyYXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KKworICAgIGNvbnN0IFRQZXJzaXN0U3Ry
aW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9CisgICAgY29uc3QgY2hhciogY19zdHIo
KSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0KKworICAgIHZvaWQgcHJlZml4KFRQcmVm
aXhUeXBlIG1lc3NhZ2UpOworICAgIHZvaWQgbG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpOworICAg
IHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKTsKKyAgICB2
b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcywgVFNvdXJjZUxv
YyBsb2MpOworCitwcml2YXRlOgorICAgIFRQZXJzaXN0U3RyaW5nIHNpbms7Cit9OworCitjbGFz
cyBUSW5mb1NpbmsgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jhc2UgaW5mbzsKKyAgICBUSW5m
b1NpbmtCYXNlIGRlYnVnOworICAgIFRJbmZvU2lua0Jhc2Ugb2JqOworfTsKKworI2VuZGlmIC8v
IF9JTkZPU0lOS19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQ3JlYXRl
IHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5z
IHRoYXQKKy8vIGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNo
IG1hcHBpbmdzIGJldHdlZW4gCisvLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKwordm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoKQorewor
ICAgIC8vCisgICAgLy8gSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1aWx0LWluIHN0cmluZ3MgZm9yIHBh
cnNpbmcuCisgICAgLy8KKyAgICBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbnM7CisgICAgVFN0cmlu
ZyBCdWlsdEluRnVuY3Rpb25zVmVydGV4OworICAgIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0Zy
YWdtZW50OworICAgIFRTdHJpbmcgU3RhbmRhcmRVbmlmb3JtczsKKyAgICBUU3RyaW5nIFZlcnRl
eERlZmF1bHRQcmVjaXNpb247CisgICAgVFN0cmluZyBGcmFnbWVudERlZmF1bHRQcmVjaXNpb247
CisKKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAg
ICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSBib3RoIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IEJ1aWx0SW5GdW5jdGlvbnM7CisK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25z
LgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCByYWRpYW5zKGZs
b2F0IGRlZ3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgcmFkaWFu
cyh2ZWMyICBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJh
ZGlhbnModmVjMyAgZGVncmVlcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICByYWRpYW5zKHZlYzQgIGRlZ3JlZXMpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBkZWdyZWVzKGZsb2F0IHJhZGlhbnMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgZGVncmVlcyh2ZWMyICByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIGRlZ3JlZXModmVjMyAgcmFkaWFucyk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBkZWdyZWVzKHZlYzQgIHJhZGlhbnMpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzaW4oZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgc2luKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpbih2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBzaW4odmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBjb3MoZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgY29zKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIGNvcyh2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBjb3ModmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCB0YW4oZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgdGFuKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzMgIHRhbih2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0ICB0YW4odmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBhc2luKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgYXNpbih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFz
aW4odmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhc2luKHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhY29zKGZsb2F0
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWNvcyh2ZWMyICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFjb3ModmVjMyAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhY29zKHZlYzQgIHgpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0IHksIGZsb2F0IHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2ZWMyICB5LCB2ZWMyICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGF0YW4odmVjMyAgeSwgdmVjMyAg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHksIHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0
IHlfb3Zlcl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGF0YW4odmVj
MiAgeV9vdmVyX3gpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXRhbih2
ZWMzICB5X292ZXJfeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhdGFu
KHZlYzQgIHlfb3Zlcl94KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhwb25lbnRp
YWwgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBwb3coZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMyICBwb3codmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMzICBwb3codmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBwb3codmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGV4cChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIGV4cCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGV4cCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGV4
cCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbG9nKGZs
b2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbG9nKHZlYzIgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbG9nKHZlYzMgIHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbG9nKHZlYzQgIHgpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBleHAyKGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwMih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzMgIGV4cDIodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBleHAyKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBsb2cyKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgbG9nMih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
IGxvZzIodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2cy
KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzcXJ0KGZs
b2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3FydCh2ZWMyICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNxcnQodmVjMyAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzcXJ0KHZlYzQgIHgpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBpbnZlcnNlc3FydChmbG9hdCB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGludmVyc2VzcXJ0KHZlYzIgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgaW52ZXJzZXNxcnQodmVjMyAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBpbnZlcnNlc3FydCh2ZWM0ICB4
KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KKyAgICAg
ICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYWJzKGZsb2F0IHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWJzKHZlYzIgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWJzKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCAgYWJzKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBzaWduKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgc2lnbih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHNpZ24odmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBzaWduKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBm
bG9vcihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGZsb29y
KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZmxvb3IodmVj
MyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmbG9vcih2ZWM0ICB4
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgY2VpbChmbG9hdCB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNlaWwodmVjMiAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBjZWlsKHZlYzMgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2VpbCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZnJhY3QoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBmcmFjdCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIGZyYWN0KHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgZnJhY3QodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWluKGZsb2F0IHgsIGZsb2F0IHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWluKHZlYzIgIHgsIGZsb2F0IHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWluKHZlYzMgIHgsIGZsb2F0
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIGZs
b2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWluKHZlYzIgIHgs
IHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWluKHZlYzMg
IHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZl
YzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBt
YXgoZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBtYXgodmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzICBtYXgodmVjMyAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0ICBtYXgodmVjNCAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBtYXgodmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0ICBtYXgodmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGNsYW1wKGZsb2F0IHgsIGZsb2F0IG1pblZhbCwgZmxvYXQg
bWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIg
IHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIGNsYW1wKHZlYzMgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNsYW1wKHZlYzQgIHgsIGZsb2F0
IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIGNsYW1wKHZlYzIgIHgsIHZlYzIgIG1pblZhbCwgdmVjMiAgbWF4VmFsKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1wKHZlYzMgIHgsIHZlYzMgIG1pblZhbCwg
dmVjMyAgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNsYW1w
KHZlYzQgIHgsIHZlYzQgIG1pblZhbCwgdmVjNCAgbWF4VmFsKTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgbWl4KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGEpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWl4KHZlYzIgIHgsIHZlYzIgIHksIGZs
b2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWl4KHZlYzMgIHgs
IHZlYzMgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
bWl4KHZlYzQgIHgsIHZlYzQgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgbWl4KHZlYzIgIHgsIHZlYzIgIHksIHZlYzIgIGEpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWl4KHZlYzMgIHgsIHZlYzMgIHksIHZlYzMgIGEpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHks
IHZlYzQgIGEpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzdGVwKGZs
b2F0IGVkZ2UsIGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
c3RlcCh2ZWMyICBlZGdlLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHN0ZXAodmVjMyAgZWRnZSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBzdGVwKHZlYzQgIGVkZ2UsIHZlYzQgIHgpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMiAgc3RlcChmbG9hdCBlZGdlLCB2ZWMyICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjMyAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzQg
IHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzbW9vdGhzdGVwKGZs
b2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKHZlYzIgIGVkZ2UwLCB2ZWMyICBlZGdlMSwgdmVjMiAg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzbW9vdGhzdGVwKHZlYzMg
IGVkZ2UwLCB2ZWMzICBlZGdlMSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBzbW9vdGhzdGVwKHZlYzQgIGVkZ2UwLCB2ZWM0ICBlZGdlMSwgdmVjNCAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKGZsb2F0IGVk
Z2UwLCBmbG9hdCBlZGdlMSwgdmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMzICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjMyAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2Uw
LCBmbG9hdCBlZGdlMSwgdmVjNCAgeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEdl
b21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGxlbmd0aChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IGxlbmd0aCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IGxlbmd0aCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxl
bmd0aCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlz
dGFuY2UoZmxvYXQgcDAsIGZsb2F0IHAxKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGRpc3RhbmNlKHZlYzIgIHAwLCB2ZWMyICBwMSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMzICBwMCwgdmVjMyAgcDEpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UodmVjNCAgcDAsIHZlYzQgIHAxKTsi
KSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KGZsb2F0IHgsIGZsb2F0
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzIgIHgsIHZl
YzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzMgIHgs
IHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzQg
IHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIGNyb3Nz
KHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5v
cm1hbGl6ZShmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG5v
cm1hbGl6ZSh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG5v
cm1hbGl6ZSh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG5v
cm1hbGl6ZSh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
ZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZik7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmYWNlZm9yd2FyZCh2ZWMyICBOLCB2ZWMyICBJLCB2ZWMy
ICBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZhY2Vmb3J3YXJk
KHZlYzMgIE4sIHZlYzMgIEksIHZlYzMgIE5yZWYpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgZmFjZWZvcndhcmQodmVjNCAgTiwgdmVjNCAgSSwgdmVjNCAgTnJlZik7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJlZmxlY3QoZmxvYXQgSSwgZmxv
YXQgTik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByZWZsZWN0KHZlYzIg
IEksIHZlYzIgIE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmVmbGVj
dCh2ZWMzICBJLCB2ZWMzICBOKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
IHJlZmxlY3QodmVjNCAgSSwgdmVjNCAgTik7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IHJlZnJhY3QoZmxvYXQgSSwgZmxvYXQgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJlZnJhY3QodmVjMiAgSSwgdmVjMiAgTiwgZmxv
YXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJlZnJhY3QodmVj
MyAgSSwgdmVjMyAgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIHJlZnJhY3QodmVjNCAgSSwgdmVjNCAgTiwgZmxvYXQgZXRhKTsiKSk7CisKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTWF0cml4IEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygibWF0MiBtYXRyaXhDb21wTXVsdChtYXQyIHgsIG1hdDIgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQzIG1hdHJpeENvbXBNdWx0KG1hdDMgeCwg
bWF0MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIm1hdDQgbWF0cml4Q29tcE11
bHQobWF0NCB4LCBtYXQ0IHkpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBWZWN0b3Ig
cmVsYXRpb25hbCBmdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImJ2ZWMyIGxlc3NUaGFuKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW4oaXZlYzIgeCwgaXZlYzIgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbihpdmVjMyB4LCBp
dmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuKGl2
ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBs
ZXNzVGhhbkVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwodmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW5FcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuRXF1YWwoaXZlYzIgeCwg
aXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbkVx
dWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzQgbGVzc1RoYW5FcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW4odmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW4odmVjMyB4LCB2ZWMzIHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3JlYXRlclRoYW4odmVjNCB4LCB2
ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBncmVhdGVyVGhh
bihpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMz
IGdyZWF0ZXJUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzQgZ3JlYXRlclRoYW4oaXZlYzQgeCwgaXZlYzQgeSk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuRXF1YWwodmVjMiB4LCB2ZWMyIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW5FcXVhbCh2
ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVh
dGVyVGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzIgZ3JlYXRlclRoYW5FcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzMgeCwgaXZl
YzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbkVx
dWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMiBlcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMyBlcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjNCBlcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWMyIGVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzMgZXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbChidmVjMyB4LCBidmVj
MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKGJ2ZWM0IHgs
IGJ2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3RFcXVh
bCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBu
b3RFcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjNCBub3RFcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWMyIG5vdEVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzMgbm90RXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RFcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsi
KSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90RXF1YWwoYnZlYzIgeCwg
YnZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbChi
dmVjMyB4LCBidmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5v
dEVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJib29sIGFueShidmVjMiB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wg
YW55KGJ2ZWMzIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbnkoYnZl
YzQgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWMyIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzMgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVjNCB4KTsiKSk7CisKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90KGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzMgbm90KGJ2ZWMzIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiYnZlYzQgbm90KGJ2ZWM0IHgpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAv
LyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1w
bGVyLCB2ZWMzIGNvb3JkKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4
dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBjb29yZCk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmUoc2FtcGxlckN1YmUgc2FtcGxlciwg
dmVjMyBjb29yZCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vaXNlIGZ1bmN0aW9u
cy4KKyAgICAgICAgLy8KKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEoZmxv
YXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWMyICB4
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzMgIHgpOyIp
KTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVjNCAgeCk7IikpOwor
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIoZmxvYXQgeCk7IikpOworICAg
IC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQo
VFN0cmluZygidmVjMyBub2lzZTMoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoInZlYzMgbm9pc2UzKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzIG5vaXNlMyh2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBu
b2lzZTModmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lz
ZTQoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZl
YzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWMzICB4
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjNCAgeCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAg
ICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5
cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSB2ZXJ0ZXggc2hhZGVycyBvbmx5Lgor
ICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICBUU3Ry
aW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleDsKKworICAgICAgICAvLworICAgICAgICAv
LyBHZW9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0IGZ0cmFuc2Zvcm0oKTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGV4
dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9hdCBsb2Qp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNh
bXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2
ZWM0IGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0IHRleHR1cmVDdWJlTG9kKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0
IGxvZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAg
ICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAv
LyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSBmcmFnbWVudCBzaGFk
ZXJzIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisg
ICAgICAgIFRTdHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQ7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNv
b3JkLCBmbG9hdCBiaWFzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4
dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgYmlhcyk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJE
IHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29v
cmQsIGZsb2F0IGJpYXMpOyIpKTsKKworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRG
ZHgoZmxvYXQgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGRGZHgodmVj
MiAgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHgodmVjMyAgcCk7
IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRGZHgodmVjNCAgcCk7IikpOwor
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeShmbG9hdCBwKTsiKSk7CisgICAg
Ly8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeSh2ZWMyICBwKTsiKSk7CisgICAgLy8Jcy5h
cHBlbmQoVFN0cmluZygidmVjMyAgZEZkeSh2ZWMzICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQo
VFN0cmluZygidmVjNCAgZEZkeSh2ZWM0ICBwKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgZndpZHRoKGZsb2F0IHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgZndpZHRoKHZlYzIgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgZndpZHRoKHZlYzMgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgZndpZHRoKHZlYzQgIHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIp
KTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gU3RhbmRhcmQgVW5pZm9ybXMKKyAgICAgICAgLy8KKyAgICAgICAgLy89
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IFN0YW5kYXJkVW5pZm9y
bXM7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3Jk
aW5hdGVzCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInN0cnVjdCBnbF9E
ZXB0aFJhbmdlUGFyYW1ldGVycyB7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCIgICAg
aGlnaHAgZmxvYXQgbmVhcjsiKSk7ICAgICAgICAvLyBuCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoIiAgICBoaWdocCBmbG9hdCBmYXI7IikpOyAgICAgICAgIC8vIGYKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiICAgIGhpZ2hwIGZsb2F0IGRpZmY7IikpOyAgICAgICAgLy8gZiAtIG4KKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygifTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InVuaWZvcm0gZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIERlZmF1bHQgcHJlY2lz
aW9uIGZvciB2ZXJ0ZXggc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IFZlcnRleERlZmF1bHRQcmVjaXNpb247
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIGhpZ2hwIGludDsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdocCBmbG9hdDsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBEZWZhdWx0IHByZWNpc2lv
biBmb3IgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgIAorICAgICAgICBUU3RyaW5nJiBzID0gRnJhZ21lbnREZWZhdWx0
UHJlY2lzaW9uOworICAgICAgICAKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9u
IG1lZGl1bXAgaW50OyIpKTsKKyAgICAgICAgLy8gTm8gZGVmYXVsdCBwcmVjaXNpb24gZm9yIGZs
b2F0IGluIGZyYWdtZW50IHNoYWRlcnMKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7
CisgICAgfQorCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2so
RnJhZ21lbnREZWZhdWx0UHJlY2lzaW9uKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nRnJh
Z21lbnRdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zLmNfc3RyKCkpOworICAgIGJ1aWx0SW5T
dHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVu
dCk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soU3RhbmRh
cmRVbmlmb3Jtcyk7CisgICAgCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVz
aF9iYWNrKFZlcnRleERlZmF1bHRQcmVjaXNpb24pOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExh
bmdWZXJ0ZXhdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zKTsKKyAgICBidWlsdEluU3RyaW5n
c1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCk7CisgICAg
YnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKFN0YW5kYXJkVW5pZm9ybXMp
OworfQorCit2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShjb25zdCBUQnVpbHRJblJlc291cmNl
ICZyZXNvdXJjZXMpCit7CisgICAgVFN0cmluZ1N0cmVhbSBidWlsdEluczsKKworICAgIC8vIElt
cGxlbWVudGF0aW9uIGRlcGVuZGVudCBjb25zdGFudHMKKyAgICBidWlsdElucyA8PCAiY29uc3Qg
aW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJz
IDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleFVuaWZvcm1W
ZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPDwgIjsiOwor
CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5nVmVjdG9ycyA9ICIgPDwg
cmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29u
c3QgaW50IGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBp
bnQgZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLm1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBp
bnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhUZXh0dXJlSW1h
Z2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVu
dFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhEcmF3QnVmZmVycyA9
ICIgPDwgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJzIDw8ICI7IjsKKworICAgIGJ1aWx0SW5TdHJp
bmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKGJ1aWx0SW5zLnN0cigpKTsKKyAgICBidWls
dEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soYnVpbHRJbnMuc3RyKCkpOworfQor
Cit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpCit7CisgICAgLy8KKyAgICAvLyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3Bl
Y2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAorICAgIC8vIHRoZSBidWls
dC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKKworICAg
IGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0
cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBF
YnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwg
ICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9y
LCAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRD
b29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBv
aW50Q29vcmQsICAyKSkpOworCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEVTaExhbmdWZXJ0ZXg6CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhp
Z2gsIEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5leHQsIGlkZW50aWZ5
IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFkZXJzIGhhdmUKKyAg
ICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFyZSBub3QgaWRlbnRp
ZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29sdmVkIHRocm91Z2gg
YSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAgLy8gb3BlcmF0aW9ucy4KKyAg
ICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgICAg
ICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90
RXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAg
ICAgICBFT3BMZXNzVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3Jl
YXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJU
aGFuRXF1YWwpOworICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlh
bnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3Fy
dCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9w
SW52ZXJzZVNxcnQpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwg
ICAgICAgICAgRU9wQWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWdu
IiwgICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
bG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOwor
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVu
Z3RoKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBF
T3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAg
ICAgICAgRU9wRG90KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIs
ICAgICAgICBFT3BDcm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9y
bWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAgCisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwp
OworCisgICAgc3dpdGNoKGxhbmd1YWdlKQorICAgIHsKKyAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgorICAgIC8vCXN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgICAgICAgIEVPcERQZHgpOyAgICAgLy8g
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vCXN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgICAgICAgIEVPcERQZHkpOyAgICAgLy8gT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImZ3aWR0aCIsICAgICAgIEVPcEZ3aWR0aCk7ICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBhc3NlcnQoZmFs
c2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9Cit9CisKK3ZvaWQgSWRlbnRp
ZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQoreworICAgIC8vCisgICAgLy8g
Rmlyc3QsIGluc2VydCBzb21lIHNwZWNpYWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5v
dCBpbiAKKyAgICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dp
dGNoKGxhbmd1YWdlKSB7CisKKyAgICBjYXNlIEVTaExhbmdGcmFnbWVudDogeworICAgICAgICAg
ICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCisgICAgICAgICAgICBU
VHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCwgZmFs
c2UsIHRydWUpOworICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5t
YXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9Cit9CisK
K2NvbnN0IGNoYXIqIEdldFByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmcoKQoreworICAgIHN0YXRp
YyBjb25zdCBjaGFyICpQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5nID0gIiI7CisKKyAgICByZXR1
cm4gUHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZzsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
X0lOSVRJQUxJWkVfSU5DTFVERURfCisjZGVmaW5lIF9JTklUSUFMSVpFX0lOQ0xVREVEXworCisj
aW5jbHVkZSAiR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIv
Q29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9TeW1ib2xUYWJsZS5oIgorCit0eXBlZGVmIFRWZWN0b3I8VFN0cmluZz4gVEJ1aWx0SW5T
dHJpbmdzOworCitjbGFzcyBUQnVpbHRJbnMgeworcHVibGljOgorCVBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKwl2b2lkIGluaXRpYWxpemUoKTsKKwl2b2lk
IGluaXRpYWxpemUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKTsKKwlUQnVpbHRJ
blN0cmluZ3MqIGdldEJ1aWx0SW5TdHJpbmdzKCkgeyByZXR1cm4gYnVpbHRJblN0cmluZ3M7IH0K
K3Byb3RlY3RlZDoKKwlUQnVpbHRJblN0cmluZ3MgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0NvdW50
XTsKK307CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxl
Jik7Cit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYsIGNv
bnN0IFRCdWlsdEluUmVzb3VyY2UgJnJlc291cmNlcyk7Citib29sIEdlbmVyYXRlQnVpbHRJblN5
bWJvbFRhYmxlKGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywgVEluZm9TaW5rJiwg
VFN5bWJvbFRhYmxlKiwgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBFU2hMYW5nQ291bnQpOworYm9v
bCBJbml0aWFsaXplU3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywg
RVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UgKnJlc291cmNlcywgVFN5bWJvbFRhYmxlKik7Citjb25zdCBjaGFyKiBHZXRQcmVw
cm9jZXNzb3JCdWlsdGluU3RyaW5nKCk7CitleHRlcm4gIkMiIGludCBJbml0UHJlcHJvY2Vzc29y
KHZvaWQpOworZXh0ZXJuICJDIiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisKKyNl
bmRpZiAvLyBfSU5JVElBTElaRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplRGxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgorCisjaW5jbHVkZSAiR0xT
TEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFs
cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKworT1Nf
VExTSW5kZXggVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisK
K2Jvb2wgSW5pdFByb2Nlc3MoKQoreworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggIT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJLy8KKwkJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFu
dC4KKwkJLy8KKyAgICAgICAgcmV0dXJuIHRydWU7CisJfQorCisgICAgVGhyZWFkSW5pdGlhbGl6
ZUluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dFByb2Nlc3MoKTogRmFpbGVkIHRvIGFsbG9jYXRlIFRMUyBhcmVhIGZvciBpbml0IGZsYWciKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworCisgICAgaWYgKCFJbml0aWFsaXplUG9vbElu
ZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBp
bml0YWxpemUgZ2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAg
IGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisJSW5pdFRocmVhZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCisKK2Jvb2wgSW5pdFRocmVhZCgpCit7CisJLy8KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIHJlLWVudHJhbnQKKwkvLworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTogUHJv
Y2VzcyBoYXNuJ3QgYmVlbiBpbml0YWxpc2VkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJ
fQorCisgICAgaWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCkgIT0gMCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKwlJbml0aWFsaXplR2xvYmFsUG9vbHMoKTsKKworCWlm
ICghSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCwgKHZvaWQg
KikxKSkgeworCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBVbmFibGUgdG8gc2V0IGluaXQg
ZmxhZy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIHJldHVybiB0cnVlOwor
fQorCisKK2Jvb2wgRGV0YWNoVGhyZWFkKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
CisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKwkvLworCS8vIEZ1bmN0aW9uIGlzIHJlLWVudHJhbnQg
YW5kIHRoaXMgdGhyZWFkIG1heSBub3QgaGF2ZSBiZWVuIGluaXRhbGlzZWQuCisJLy8KKyAgICBp
ZiAoT1NfR2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKSB7CisgICAgICAg
IGlmICghT1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTApKSB7
CisJCQlhc3NlcnQoMCAmJiAiRGV0YWNoVGhyZWFkKCk6IFVuYWJsZSB0byBjbGVhciBpbml0IGZs
YWcuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisJCX0KKworCQlGcmVlR2xvYmFs
UG9vbHMoKTsKKworCQlpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkKKyAgICAgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKwl9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBEZXRhY2hQ
cm9jZXNzKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgaWYgKFRocmVhZElu
aXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBTaEZpbmFsaXplKCk7CisKKyAgICBzdWNjZXNzID0gRGV0YWNoVGhyZWFkKCk7
CisKKwlGcmVlUG9vbEluZGV4KCk7CisKKwlpZiAoIUZyZWVQYXJzZUNvbnRleHRJbmRleCgpKQor
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBPU19GcmVlVExTSW5kZXgoVGhyZWFkSW5p
dGlhbGl6ZUluZGV4KTsKKyAgICBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19JTlZBTElEX1RM
U19JTkRFWDsKKworICAgIHJldHVybiBzdWNjZXNzOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZURsbC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVEbGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KyNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gKKyNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKKwor
CisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKKworYm9vbCBJbml0UHJvY2Vzcygp
OworYm9vbCBJbml0VGhyZWFkKCk7Citib29sIERldGFjaFRocmVhZCgpOworYm9vbCBEZXRhY2hQ
cm9jZXNzKCk7CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExfSAorCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xV
REVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KKwordm9pZCBJbml0
aWFsaXplR2xvYmFsUG9vbHMoKTsKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCk7Citib29sIEluaXRp
YWxpemVQb29sSW5kZXgoKTsKK3ZvaWQgRnJlZVBvb2xJbmRleCgpOworCisjZW5kaWYgLy8gX19J
TklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhU
X0lOQ0xVREVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8K
KyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworYm9vbCBJbml0aWFsaXplUGFyc2VD
b250ZXh0SW5kZXgoKTsKK2Jvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOworYm9v
bCBGcmVlUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOworCisK
KyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCisKKy8vCisvLyBUcmF2ZXJzZSB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHRy
ZWUsIGFuZAorLy8gY2FsbCBhIG5vZGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaCBu
b2RlLgorLy8gRG9uZSByZWN1cnNpdmVseSB0aHJvdWdoIHRoZSBtZW1iZXIgZnVuY3Rpb24gVHJh
dmVyc2UoKS4KKy8vIE5vZGUgdHlwZXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlaXIgZnVuY3Rpb24g
dG8gY2FsbCBpcyAwLAorLy8gYnV0IHRoZWlyIHN1YnRyZWUgd2lsbCBzdGlsbCBiZSB0cmF2ZXJz
ZWQuCisvLyBOb2RlcyB3aXRoIGNoaWxkcmVuIGNhbiBoYXZlIHRoZWlyIHdob2xlIHN1YnRyZWUg
c2tpcHBlZAorLy8gaWYgcHJlVmlzaXQgaXMgdHVybmVkIG9uIGFuZCB0aGUgdHlwZSBzcGVjaWZp
YyBmdW5jdGlvbgorLy8gcmV0dXJucyBmYWxzZS4KKy8vCisvLyBwcmVWaXNpdCwgcG9zdFZpc2l0
LCBhbmQgcmlnaHRUb0xlZnQgY29udHJvbCB3aGF0IG9yZGVyCisvLyBub2RlcyBhcmUgdmlzaXRl
ZCBpbi4KKy8vCisKKy8vCisvLyBUcmF2ZXJzYWwgZnVuY3Rpb25zIGZvciB0ZXJtaW5hbHMgYXJl
IHN0cmFpZ2hmb3J3YXJkLi4uLgorLy8KK3ZvaWQgVEludGVybVN5bWJvbDo6dHJhdmVyc2UoVElu
dGVybVRyYXZlcnNlciogaXQpCit7CisJaXQtPnZpc2l0U3ltYm9sKHRoaXMpOworfQorCit2b2lk
IFRJbnRlcm1Db25zdGFudFVuaW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sK
KwlpdC0+dmlzaXRDb25zdGFudFVuaW9uKHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBi
aW5hcnkgbm9kZS4KKy8vCit2b2lkIFRJbnRlcm1CaW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJLy8KKwkvLyB2aXNpdCB0aGUg
bm9kZSBiZWZvcmUgY2hpbGRyZW4gaWYgcHJlLXZpc2l0aW5nLgorCS8vCisJaWYoaXQtPnByZVZp
c2l0KQorCXsKKwkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOworCX0K
KwkKKwkvLworCS8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgorCS8v
CisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmln
aHRUb0xlZnQpIAorCQl7CisJCQlpZihyaWdodCkKKwkJCXsKKwkJCQlyaWdodC0+dHJhdmVyc2Uo
aXQpOworCQkJfQorCQkJCisJCQlpZihpdC0+aW5WaXNpdCkKKwkJCXsKKwkJCQl2aXNpdCA9IGl0
LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKwkJCX0KKworCQkJaWYodmlzaXQgJiYgbGVm
dCkKKwkJCXsKKwkJCQlsZWZ0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7
CisJCQlpZihsZWZ0KQorCQkJeworCQkJCWxlZnQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJCQor
CQkJaWYoaXQtPmluVmlzaXQpCisJCQl7CisJCQkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5W
aXNpdCwgdGhpcyk7CisJCQl9CisKKwkJCWlmKHZpc2l0ICYmIHJpZ2h0KQorCQkJeworCQkJCXJp
Z2h0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsK
Kwl9CisKKwkvLworCS8vIFZpc2l0IHRoZSBub2RlIGFmdGVyIHRoZSBjaGlsZHJlbiwgaWYgcmVx
dWVzdGVkIGFuZCB0aGUgdHJhdmVyc2FsCisJLy8gaGFzbid0IGJlZW4gY2FuY2VsbGVkIHlldC4K
KwkvLworCWlmKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJeworCQlpdC0+dmlzaXRCaW5hcnko
UG9zdFZpc2l0LCB0aGlzKTsKKwl9Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUu
ICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50
ZXJtVW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQg
PSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+dmlzaXRVbmFyeShQ
cmVWaXNpdCwgdGhpcyk7CisKKwlpZiAodmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7
CisJCW9wZXJhbmQtPnRyYXZlcnNlKGl0KTsKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQor
CQorCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRVbmFyeShQb3N0Vmlz
aXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYW4gYWdncmVnYXRlIG5vZGUuICBTYW1l
IGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtQWdn
cmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0g
dHJ1ZTsKKwkKKwlpZihpdC0+cHJlVmlzaXQpCisJeworCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3Jl
Z2F0ZShQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3Jl
bWVudERlcHRoKCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlmb3IoVEludGVy
bVNlcXVlbmNlOjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLnJiZWdpbigpOyBzaXQg
IT0gc2VxdWVuY2UucmVuZCgpOyBzaXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZlcnNlKGl0
KTsKKworCQkJCWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYoKnNpdCAh
PSBzZXF1ZW5jZS5mcm9udCgpKQorCQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3Jl
Z2F0ZShJblZpc2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJ
CXsKKwkJCWZvcihUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2lu
KCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisJCQl7CisJCQkJKCpzaXQpLT50cmF2
ZXJzZShpdCk7CisKKwkJCQlpZih2aXNpdCAmJiBpdC0+aW5WaXNpdCkKKwkJCQl7CisJCQkJCWlm
KCpzaXQgIT0gc2VxdWVuY2UuYmFjaygpKQorCQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNp
dEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkK
KwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCisJaWYodmlzaXQgJiYgaXQtPnBvc3RWaXNp
dCkKKwl7CisJCWl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIHRoaXMpOworCX0KK30KKwor
Ly8KKy8vIFRyYXZlcnNlIGEgc2VsZWN0aW9uIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFy
eSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+
cHJlVmlzaXQpCisJCXZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
KwkKKwlpZiAodmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisJCWlmIChpdC0+cmln
aHRUb0xlZnQpIHsKKwkJCWlmIChmYWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNl
KGl0KTsKKwkJCWlmICh0cnVlQmxvY2spCisJCQkJdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisJ
CQljb25kaXRpb24tPnRyYXZlcnNlKGl0KTsKKwkJfSBlbHNlIHsKKwkJCWNvbmRpdGlvbi0+dHJh
dmVyc2UoaXQpOworCQkJaWYgKHRydWVCbG9jaykKKwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0
KTsKKwkJCWlmIChmYWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJ
fQorCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZiAodmlzaXQgJiYgaXQtPnBvc3RW
aXNpdCkKKwkJaXQtPnZpc2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisv
LyBUcmF2ZXJzZSBhIGxvb3Agbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBw
bHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
KiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmKGl0LT5wcmVWaXNpdCkKKwl7CisJ
CXZpc2l0ID0gaXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0
KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQor
CQl7CisJCQlpZih0ZXJtaW5hbCkKKwkJCXsKKwkJCQl0ZXJtaW5hbC0+dHJhdmVyc2UoaXQpOwor
CQkJfQorCisJCQlpZihib2R5KQorCQkJeworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0K
KworCQkJaWYodGVzdCkKKwkJCXsKKwkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0K
KwkJZWxzZQorCQl7CisJCQlpZih0ZXN0KQorCQkJeworCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsK
KwkJCX0KKworCQkJaWYoYm9keSkKKwkJCXsKKwkJCQlib2R5LT50cmF2ZXJzZShpdCk7CisJCQl9
CisKKwkJCWlmKHRlcm1pbmFsKQorCQkJeworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJ
CQl9CisJCX0KKworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZih2aXNpdCAmJiBp
dC0+cG9zdFZpc2l0KQorCXsKKwkJaXQtPnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworCX0K
K30KKworLy8KKy8vIFRyYXZlcnNlIGEgYnJhbmNoIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJp
bmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+
cHJlVmlzaXQpCisJCXZpc2l0ID0gaXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKKwkK
KwlpZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJ
ZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisK
KwlpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNp
dCwgdGhpcyk7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQwNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxk
IHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQu
aD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJt
ZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBU
VHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0
YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKworVFByZWNpc2lvbiBHZXRIaWdoZXN0UHJlY2lz
aW9uKCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKKyAgICByZXR1cm4gbGVm
dCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8v
IEZpcnN0IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVpbGQgdGhlIGludGVybWVkaWF0
ZSByZXByZXNlbnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IG1lbWJlciBmdW5j
dGlvbnMgb2YgdGhlIG5vZGVzLgorLy8gVGhleSBhcmUgY2FsbGVkIGZyb20gcGFyc2VyIHByb2R1
Y3Rpb25zLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBBZGQgYSB0ZXJtaW5h
bCBub2RlIGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Npb24uCisvLworLy8gUmV0dXJu
cyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtU3ltYm9sKiBUSW50ZXJtZWRpYXRlOjphZGRT
eW1ib2woaW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25zdCBUVHlwZSYgdHlwZSwgVFNv
dXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1TeW1ib2wqIG5vZGUgPSBuZXcgVEludGVybVN5
bWJvbChpZCwgbmFtZSwgdHlwZSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJl
dHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBwYXJl
bnQgdGhhdCBkb2VzIGEgYmluYXJ5IG9wZXJhdGlvbiBvbiB0aGUgbm9kZXMuCisvLworLy8gUmV0
dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBl
ZCogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5
cGUoKS5pc01hdHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0
VHlwZSgpLmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBjYXNl
IEVPcExvZ2ljYWxYb3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAg
IGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5n
ZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGxlZnQt
PmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAg
ICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BN
dWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBGaXJzdCB0cnkgY29udmVydGluZyB0aGUgY2hpbGRyZW4gdG8gY29t
cGF0aWJsZSB0eXBlcy4KKyAgICAvLworCisgICAgaWYgKCEobGVmdC0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpKSB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0
KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5n
ZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAg
IGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkg
IT0gcmlnaHQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworCisg
ICAgLy8KKyAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRoZXIgdGhl
bi4gIE1ha2UKKyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5cGUuCisg
ICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwor
ICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSByaWdodC0+Z2V0TGluZSgpOworICAg
IG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOworICAgIG5v
ZGUtPnNldFJpZ2h0KHJpZ2h0KTsKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBD
b25zdGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICpyaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KworICAgIGlmIChsZWZ0VGVtcENvbnN0YW50KQorICAgICAgICBsZWZ0VGVtcENvbnN0YW50ID0g
bGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBpZiAocmlnaHRUZW1wQ29uc3RhbnQp
CisgICAgICAgIHJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgLy8KKyAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgorICAgIC8v
CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgaWYgKCBsZWZ0
VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7CisgICAgICAgIHR5cGVkUmV0dXJu
Tm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29u
c3RhbnQsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAodHlwZWRSZXR1cm5Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsK
K30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gYXNzaWdubWVudC4KKy8v
CisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJt
VHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFk
ZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAg
Ly8gZnJvbSByaWdodCB0byBsZWZ0LgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9
IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5l
ID0gbGVmdC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBUSW50
ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdo
dCk7CisgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbm9kZS0+
c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGlsZCk7CisgICAgaWYgKCEgbm9k
ZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5v
ZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGluZGV4IG9wZXJh
dG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisvLyBvZiBhbiBhcnJheSBvciBz
dHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBvZmZzZXQu
CisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRoZSBjYWxsZXIgc2hvdWxkIHNl
dCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50
ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUJpbmFyeSog
bm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAg
ICBsaW5lID0gaW5kZXgtPmdldExpbmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAg
IG5vZGUtPnNldExlZnQoYmFzZSk7CisgICAgbm9kZS0+c2V0UmlnaHQoaW5kZXgpOworCisgICAg
Ly8gY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUKKworICAgIHJldHVybiBub2RlOworfQorCisv
LworLy8gQWRkIG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2YgYW5vdGhlciB0aGF0IGl0IG9wZXJh
dGVzIG9uLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVk
KiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSog
Y2hpbGROb2RlLCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7
CisgICAgVEludGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGls
ZE5vZGUtPmdldEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCB0eXBlIGluIEFk
ZFVuYXJ5TWF0aCIsIGxpbmUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChj
aGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5
cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5n
ZXRUeXBlKCkuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBF
T3BOZWdhdGl2ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAg
Ly8KKyAgICAvLyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAg
ICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5n
dWFnZS4KKyAgICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dp
dGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0
SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0g
RWJ0Qm9vbDsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBl
ID0gRWJ0RmxvYXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lv
bihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
CisgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxk
LT5pc01hdHJpeCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAg
ICBjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRv
bmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0
dXJuIGNoaWxkOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9y
IHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsK
KyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0gY2hpbGQtPmdldExpbmUoKTsKKyAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOworCisg
ICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0No
aWxkID0gY2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAgICAg
ICBpZiAobmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQorCisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFu
Z2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBvZiBl
cnJvciBjaGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCisv
LyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4g
IFNlcXVlbmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0
aGV5IGp1c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2Uu
CisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9u
ZSBwYXNzZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZS4KKy8vCitUSW50
ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJt
Tm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YW4gYWdncmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUuCisgICAgLy8KKyAgICBpZiAo
bm9kZSkgeworICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAg
ICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250YWluaW5n
IHRoaXMgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBhZ2dOb2RlID0gbmV3IFRJ
bnRlcm1BZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVz
aF9iYWNrKG5vZGUpOworICAgICAgICAgICAgaWYgKGxpbmUgPT0gMCkKKyAgICAgICAgICAgICAg
ICBsaW5lID0gbm9kZS0+Z2V0TGluZSgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAg
IGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworCisgICAgLy8KKyAgICAvLyBTZXQg
dGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAgYWdnTm9kZS0+c2V0T3BlcmF0b3Iob3ApOworICAg
IGlmIChsaW5lICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBy
ZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQgb25lIHR5cGUgdG8gYW5vdGhlci4K
Ky8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiwgd2hp
Y2ggY291bGQgYmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2VkIGluIGlmIG5vIGNvbnZlcnNpb24g
d2FzIG5lZWRlZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNpb24gY2FuJ3QgYmUgZG9u
ZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpb24oVE9wZXJh
dG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBub2RlKQoreworICAgIC8v
CisgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KKyAgICAvLworICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgor
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlkZW50aWNhbCwgbm8gcHJv
YmxlbQorICAgIC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlwZSgpKQorICAgICAgICBy
ZXR1cm4gbm9kZTsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYSBzdHJ1Y3R1cmUsIHRoZW4g
bm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSB8fCBub2Rl
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8KKyAg
ICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9ucy4KKyAgICAvLworICAg
IGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOworCisgICAgc3dpdGNoIChv
cCkgeworICAgICAgICAvLworICAgICAgICAvLyBFeHBsaWNpdCBjb252ZXJzaW9ucworICAgICAg
ICAvLworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgICAgICBwcm9tb3Rl
VG8gPSBFYnRCb29sOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0RmxvYXQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9hdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgICAgIHByb21v
dGVUbyA9IEVidEludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVt
b3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
U2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0IHRoYXQncworICAgICAg
ICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEFzQ29u
c3RhbnRVbmlvbigpKSB7CisKKyAgICAgICAgcmV0dXJuIChwcm9tb3RlQ29uc3RhbnRVbmlvbihw
cm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7CisgICAgfSBlbHNlIHsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBmb3IgdGhlIGNvbnZlcnNp
b24uCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFyeSogbmV3Tm9kZSA9IDA7CisKKyAg
ICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAgICAgICAgc3dpdGNoIChwcm9tb3Rl
VG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9k
ZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG5l
d09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9J
bnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFk
IHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiB0eXBlIiwgbm9kZS0+Z2V0
TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2RlLT5pc0FycmF5
KCkpOworICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwgdHlwZSk7Cisg
ICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbmV3Tm9k
ZS0+c2V0T3BlcmFuZChub2RlKTsKKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9Cit9
CisKKy8vCisvLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBpbnRvIGFuIGFnZ3JlZ2F0
ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEgbm9kZSB0aGF0J3Mgbm90IGEgYWdn
cmVnYXRlIHlldCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBhZ2dyZWdhdGUs
IHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3RoIGV4aXN0aW5nIG5vZGVzLgorLy8K
K1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dyZWdhdGUoVEludGVybU5v
ZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlm
IChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50
ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gMDsKKyAgICBpZiAobGVmdCkKKyAgICAgICAgYWdnTm9k
ZSA9IGxlZnQtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKCFhZ2dOb2RlIHx8IGFnZ05vZGUt
PmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dy
ZWdhdGU7CisgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVu
Y2UoKS5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYgKHJpZ2h0KQorICAgICAgICBh
Z2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdodCk7CisKKyAgICBpZiAobGluZSAh
PSAwKQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05v
ZGU7Cit9CisKKy8vCisvLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUgaW50byBhbiBhZ2dyZWdhdGUu
CisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9y
IHRoZSBleGlzdGluZyBub2RlLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6
Om1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAg
ICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1
ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKworICAgIGlmIChsaW5lICE9IDApCisgICAgICAgIGFn
Z05vZGUtPnNldExpbmUobGluZSk7CisgICAgZWxzZQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5l
KG5vZGUtPmdldExpbmUoKSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIEZv
ciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9u
LAorLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBp
biB0aGUKKy8vIG5vZGVQYWlyLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNy
ZWF0ZWQuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50
ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwgVFNvdXJjZUxvYyBsaW5l
KQoreworICAgIC8vCisgICAgLy8gRm9yIGNvbXBpbGUgdGltZSBjb25zdGFudCBzZWxlY3Rpb25z
LCBwcnVuZSB0aGUgY29kZSBhbmQKKyAgICAvLyB0ZXN0IG5vdy4KKyAgICAvLworCisgICAgaWYg
KGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG5vZGVQYWlyLm5vZGUyOworICAgIH0KKworICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBu
ZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIp
OworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworCitU
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwg
VEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChsZWZ0LT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgcmlnaHQtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb21tYUFnZ3JlZ2F0ZSA9IGdyb3dBZ2dy
ZWdhdGUobGVmdCwgcmlnaHQsIGxpbmUpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0QXNB
Z2dyZWdhdGUoKS0+c2V0T3BlcmF0b3IoRU9wQ29tbWEpOworICAgICAgICBjb21tYUFnZ3JlZ2F0
ZS0+c2V0VHlwZShyaWdodC0+Z2V0VHlwZSgpKTsKKyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdl
dFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICBy
ZXR1cm4gY29tbWFBZ2dyZWdhdGU7CisgICAgfQorfQorCisvLworLy8gRm9yICI/OiIgdGVzdCBu
b2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCisvLyBhIHRydWUg
cGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIHNwZWNpZmllZAorLy8g
YXMgc2VwYXJhdGUgcGFyYW1ldGVycy4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9k
ZSBjcmVhdGVkLCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCisvLworVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlw
ZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9jIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJ
bnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2st
PmdldFR5cGUoKSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJs
b2NrID0gY2hpbGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihF
T3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBp
ZiAoY2hpbGQpCisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxs
IHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90Lgor
ICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2Nr
LT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWVCbG9jazsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisgICAgLy8KKyAgICBUSW50ZXJt
U2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBm
YWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29uc3RhbnQgdGVybWluYWwgbm9k
ZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBjb25zdGFu
dHMKKy8vCisvLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQuCisvLwor
CitUSW50ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRVbmlvbihD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIFRTb3VyY2VM
b2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7CisgICAgbm9kZS0+c2V0TGluZShs
aW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUU291cmNlTG9jIGxpbmUpCit7
CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9w
U2VxdWVuY2UpOworCisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogY29uc3RJbnROb2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0
b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgbGluZSk7CisgICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5v
ZGUpOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Ag
bm9kZXMuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVEludGVybU5v
ZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBib2R5LCBUSW50ZXJtVHlwZWQqIHRlc3QsIFRJbnRlcm1U
eXBlZCogdGVybWluYWwsIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAg
VEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AoaW5pdCwgYm9keSwgdGVzdCwgdGVy
bWluYWwsIHRlc3RGaXJzdCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVy
biBub2RlOworfQorCisvLworLy8gQWRkIGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJ
bnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRTb3VyY2VMb2MgbGlu
ZSkKK3sKKyAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsKK30KKworVElu
dGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwg
VEludGVybVR5cGVkKiBleHByZXNzaW9uLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVy
bUJyYW5jaCogbm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJyYW5jaE9wLCBleHByZXNzaW9uKTsK
KyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisv
LyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZpbmFsIHJvb3QgaXMgcHV0IG9uIHRv
cCBieSB0aGUgcGFyc2luZworLy8gcHJvY2Vzcy4KKy8vCitib29sIFRJbnRlcm1lZGlhdGU6OnBv
c3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290LCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAg
ICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vCisgICAgLy8g
Rmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55CisgICAgLy8K
KyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KyAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCisgICAgICAg
IGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLworLy8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8KK3ZvaWQgVEludGVybWVkaWF0
ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290KQorICAgICAgICBS
ZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNZW1iZXIgZnVu
Y3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KKy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKy8vCisvLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdl
cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgc3RhdGUg
aXMgbW9kaWZpZWQuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0b3I6Om1vZGlmaWVzU3RhdGUoKSBj
b25zdAoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3Np
Z246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLworLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBv
cGVyYXRvciBpcyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKKy8vCitib29sIFRJbnRlcm1P
cGVyYXRvcjo6aXNDb25zdHJ1Y3RvcigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKy8vCisvLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2Yg
YSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCisvLyBjb21iaW5hdGlvbiBv
ZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGluIG5v
dGhpbmcgbWFrZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9T
aW5rJikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoK
KyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQt
aW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQorICAg
ICAgICBjYXNlIEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6CisgICAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNldFR5cGUo
b3BlcmFuZC0+Z2V0VHlwZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRXN0
YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMK
Ky8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4K
Ky8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMu
CisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCit7
CisgICAgaW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChyaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSA+IHNpemUpCisgICAgICAgIHNpemUgPSByaWdodC0+Z2V0Tm9taW5h
bFNpemUoKTsKKworICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOwor
CisgICAgLy8KKyAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgorICAgIC8v
CisgICAgaWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgJiYgKGxlZnQt
PmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8KKyAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhl
IHNhbWUgYXMgdGhlIGxlZnQKKyAgICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMg
ZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5
cGUoKSk7CisKKyAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJl
Y2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAg
IGdldFR5cGVQb2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKwor
ICAgIC8vCisgICAgLy8gQXJyYXkgb3BlcmF0aW9ucy4KKyAgICAvLworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkpIHsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7CisKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Cisg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNl
dCBhcnJheSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVP
cEFzc2lnbjoKKyAgICAgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAg
ICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheVNpemUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheUluZm9y
bWF0aW9uVHlwZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8KKyAgICAvLyBBbGwgc2NhbGFycy4gIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0
IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCisgICAgLy8KKyAgICBpZiAoc2l6ZSA9PSAx
KSB7CisKKyAgICAgICAgc3dpdGNoIChvcCkgeworCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Cisg
ICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIGhhdmUg
bWF0Y2hpbmcgdHlwZXMKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNU
eXBlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbGVmdC0+aXNNYXRyaXgoKSAgICAgIT0gcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQXJl
IHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgIC8vCisgICAgaWYgKCBsZWZ0LT5nZXROb21pbmFs
U2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSB8fAorICAgICAg
ICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6
ZSgpICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gQ2FuIHRo
ZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0
b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdo
ZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5p
c01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7CisgICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1
Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBpZiAoIWxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7
CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1
Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3Io
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNp
emUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAg
ICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2
OgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0
cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+Z2V0
QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNp
c2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01h
dHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEVxdWFsOgor
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8CisgICAgICAgICAgICAgICAgbGVm
dC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAorICAgICAgICAgICAgICAgIGxl
ZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9uZSBtb3Jl
IGNoZWNrIGZvciBhc3NpZ25tZW50LiAgVGhlIFJlc3VsdGluZyB0eXBlIGhhcyB0byBtYXRjaCB0
aGUgbGVmdCBvcGVyYW5kLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNl
IEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIEVP
cEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkgIT0gbGVmdC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdChj
b25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXks
IENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIFRUeXBlTGlzdCogZmllbGRz
ID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBm
aWVsZHMtPnNpemUoKTsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBzdHJ1Y3RTaXplOyBqKyspIHsKKyAgICAgICAgaW50IHNpemUgPSAoKmZpZWxkcylb
al0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtqXS50eXBlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1
cmUoKigqZmllbGRzKVtqXS50eXBlLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlv
bkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRVbmlvbkFycmF5W2luZGV4
XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbXBhcmVTdHJ1Y3R1cmUo
Y29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5
LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sKKyAgICBpZiAobGVmdE5vZGVUeXBl
LmlzQXJyYXkoKSkgeworICAgICAgICBUVHlwZSB0eXBlV2l0aG91dEFycmF5bmVzcyA9IGxlZnRO
b2RlVHlwZTsKKyAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5lc3MuY2xlYXJBcnJheW5lc3MoKTsK
KworICAgICAgICBpbnQgYXJyYXlTaXplID0gbGVmdE5vZGVUeXBlLmdldEFycmF5U2l6ZSgpOwor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIGludCBvZmZzZXQgPSB0eXBlV2l0aG91dEFycmF5bmVzcy5nZXRPYmplY3RTaXplKCkgKiBp
OworICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0KHR5cGVXaXRob3V0QXJyYXluZXNzLCAm
cmlnaHRVbmlvbkFycmF5W29mZnNldF0sICZsZWZ0VW5pb25BcnJheVtvZmZzZXRdKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
cmV0dXJuIENvbXBhcmVTdHJ1Y3QobGVmdE5vZGVUeXBlLCByaWdodFVuaW9uQXJyYXksIGxlZnRV
bmlvbkFycmF5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gVGhlIGZvbGQgZnVu
Y3Rpb25zIHNlZSBpZiBhbiBvcGVyYXRpb24gb24gYSBjb25zdGFudCBjYW4gYmUgZG9uZSBpbiBw
bGFjZSwKKy8vIHdpdGhvdXQgZ2VuZXJhdGluZyBydW4tdGltZSBjb2RlLgorLy8KKy8vIFJldHVy
bnMgdGhlIG5vZGUgdG8ga2VlcCB1c2luZywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIG5v
ZGUgcGFzc2VkIGluLgorLy8KKworVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6
Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3RhbnROb2RlLCBUSW5mb1Npbmsm
IGluZm9TaW5rKQoreworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRVbmlvbkFy
cmF5UG9pbnRlcigpOworICAgIGludCBvYmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKTsKKworICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRpb25zCisg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29uc3RhbnROb2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0g
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgVFR5cGUgcmV0dXJuVHlwZSA9
IGdldFR5cGUoKTsKKworICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiAr
IHZlYzQoMiwzLDQsNSk7CisgICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICAgICAgcmlnaHRV
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7ICsraSkKKyAgICAgICAgICAgICAgICByaWdo
dFVuaW9uQXJyYXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uc3RhbnRO
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpIHsK
KyAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSAr
IDEuMjsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAg
b2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gMDsKKyAg
ICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBOb2RlOworCisgICAgICAgIGJvb2wgYm9v
bE5vZGVGbGFnID0gZmFsc2U7CisgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgY2Fz
ZSBFT3BBZGQ6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlb
aV0gKyByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAg
ICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEVPcE11bDoKKyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgewor
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAg
ICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgc2l6
ZTsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgp
ICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRU9wRGl2OgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHplcm8gZXJy
b3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoRkxUX01BWCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIkRpdmlk
ZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJh
eVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIiwg
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rv
cjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRp
bWVzIHZlY3RvciIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAgICAgICAgICAgey8vIHN1
cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXRO
b21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
aV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICog
cmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJh
eSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9s
ZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIsIGdldExpbmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5h
bFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7
IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9u
QXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZD
b25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwor
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBv
c3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9u
QXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7
Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5
W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0
KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsK
KyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAq
cmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25z
dCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVy
blR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEp
OworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFy
cmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgh
Y29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0g
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNv
bnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNvbXBh
cmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9k
ZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAg
ICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkludmFsaWQgb3Bl
cmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25z
dGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKKyAgICAgICAgdGVtcE5vZGUt
PnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucworICAgICAg
ICAvLworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CisgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Cisg
ICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlb
aV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29u
c3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xk
ZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUg
aXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVk
IGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYXJ5
IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBnZXRMaW5lKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdl
dFR5cGUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAg
cmV0dXJuIG5ld05vZGU7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7Cit9CisKK1RJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSBwcm9t
b3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIENvbnN0YW50VW5pb24g
KnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgaW50
IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgQ29uc3RhbnRV
bmlvbiAqbGVmdFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplXTsKKworICAgIGZv
ciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworCisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRv
KSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5z
ZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRCQ29uc3Qo
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUi
LCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29u
c3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNv
bnN0KHN0YXRpY19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgIT0gMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRV
bmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgIT0g
MC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJJbmNv
cnJlY3QgZGF0YSB0eXBlIGZvdW5kIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQgPSBu
b2RlLT5nZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25B
cnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigp
LCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5n
ZXRMaW5lKCkpOworfQorCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUo
Y29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpCit7CisgICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7
CisgICAgcHJhZ21hVGFibGUgPSBuZXcgVFByYWdtYVRhYmxlKCk7CisgICAgKnByYWdtYVRhYmxl
ID0gcFRhYmxlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0xpbmsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9MaW5rLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9MaW5rLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFRoZSB0b3AgbGV2ZWwgYWxnb3JpdGhtcyBmb3IgbGlu
a2luZyBtdWx0aXBsZQorLy8gc2hhZGVycyB0b2dldGhlci4KKy8vCisjaW5jbHVkZSAiY29tcGls
ZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKworLy8KKy8vIEFj
dHVhbCBsaW5rIG9iamVjdCwgZGVyaXZlZCBmcm9tIHRoZSBzaGFkZXIgaGFuZGxlIGJhc2UgY2xh
c3Nlcy4KKy8vCitjbGFzcyBUR2VuZXJpY0xpbmtlciA6IHB1YmxpYyBUTGlua2VyIHsKK3B1Ymxp
YzoKKyAgICBUR2VuZXJpY0xpbmtlcihFU2hFeGVjdXRhYmxlIGUsIGludCBkT3B0aW9ucykgOiBU
TGlua2VyKGUpLCBkZWJ1Z09wdGlvbnMoZE9wdGlvbnMpIHsgfQorICAgIGJvb2wgbGluayhUQ29t
cGlsZXJMaXN0JiwgVFVuaWZvcm1NYXAqKSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBnZXRB
dHRyaWJ1dGVCaW5kaW5ncyhTaEJpbmRpbmdUYWJsZSBjb25zdCAqKnQpIGNvbnN0IHsgfQorICAg
IGludCBkZWJ1Z09wdGlvbnM7Cit9OworCisvLworLy8gVGhlIGludGVybmFsIHZpZXcgb2YgYSB1
bmlmb3JtL2Zsb2F0IG9iamVjdCBleGNoYW5nZWQgd2l0aCB0aGUgZHJpdmVyLgorLy8KK2NsYXNz
IFRVbmlmb3JtTGlua2VkTWFwIDogcHVibGljIFRVbmlmb3JtTWFwIHsKK3B1YmxpYzoKKyAgICBU
VW5pZm9ybUxpbmtlZE1hcCgpIHsgfQorICAgIHZpcnR1YWwgaW50IGdldExvY2F0aW9uKGNvbnN0
IGNoYXIqIG5hbWUpIHsgcmV0dXJuIDA7IH0KK307CisKK1RTaEhhbmRsZUJhc2UqIENvbnN0cnVj
dExpbmtlcihFU2hFeGVjdXRhYmxlIGV4ZWN1dGFibGUsIGludCBkZWJ1Z09wdGlvbnMpCit7Cisg
ICAgcmV0dXJuIG5ldyBUR2VuZXJpY0xpbmtlcihleGVjdXRhYmxlLCBkZWJ1Z09wdGlvbnMpOwor
fQorCit2b2lkIERlbGV0ZUxpbmtlcihUU2hIYW5kbGVCYXNlKiBsaW5rZXIpCit7CisgICAgZGVs
ZXRlIGxpbmtlcjsKK30KKworVFVuaWZvcm1NYXAqIENvbnN0cnVjdFVuaWZvcm1NYXAoKQorewor
ICAgIHJldHVybiBuZXcgVFVuaWZvcm1MaW5rZWRNYXAoKTsKK30KKwordm9pZCBEZWxldGVVbmlm
b3JtTWFwKFRVbmlmb3JtTWFwKiBtYXApCit7CisgICAgZGVsZXRlIG1hcDsKK30KKworVFNoSGFu
ZGxlQmFzZSogQ29uc3RydWN0QmluZGluZ3MoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lk
IERlbGV0ZUJpbmRpbmdMaXN0KFRTaEhhbmRsZUJhc2UqIGJpbmRpbmdMaXN0KQoreworICAgIGRl
bGV0ZSBiaW5kaW5nTGlzdDsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9NTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9NTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX01NQVBfSU5DTFVERURfCisjZGVmaW5lIF9NTUFQ
X0lOQ0xVREVEXworCisvLworLy8gRW5jYXBzdWxhdGUgbWVtb3J5IG1hcHBlZCBmaWxlcworLy8K
KworY2xhc3MgVE1NYXAgeworcHVibGljOgorICAgIFRNTWFwKGNvbnN0IGNoYXIqIGZpbGVOYW1l
KSA6IAorICAgICAgICBmU2l6ZSgtMSksIC8vIC0xIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1cm5l
ZCBieSBHZXRGaWxlU2l6ZSgpCisgICAgICAgIGZwKE5VTEwpLAorICAgICAgICBmQnVmZigwKSAg
IC8vIDAgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IE1hcFZpZXdPZkZpbGUoKQorICAg
IHsKKyAgICAgICAgaWYgKChmcCA9IGZvcGVuKGZpbGVOYW1lLCAiciIpKSA9PSBOVUxMKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjaGFyIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgZlNp
emUgPSAwOworICAgICAgICB3aGlsZSAoYyAhPSBFT0YpIHsKKyAgICAgICAgICAgIGZTaXplKys7
CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0g
RU9GKQorICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgcmV3aW5kKGZwKTsKKyAgICAgICAg
ZkJ1ZmYgPSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGZTaXplKTsKKyAgICAgICAgaW50
IGNvdW50ID0gMDsKKyAgICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB3aGlsZSAoYyAhPSBF
T0YpIHsKKyAgICAgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICAgICAgICAgIGMgPSBn
ZXRjKGZwKTsKKyAgICAgICAgfQorICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgfQor
CisgICAgY2hhciogZ2V0RGF0YSgpIHsgcmV0dXJuIGZCdWZmOyB9CisgICAgaW50ICAgZ2V0U2l6
ZSgpIHsgcmV0dXJuIGZTaXplOyB9CisKKyAgICB+VE1NYXAoKSB7CisgICAgICAgIGlmIChmcCAh
PSBOVUxMKQorICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIGludCAgICAgICAgICAgICBmU2l6ZTsgICAgICAvLyBzaXplIG9mIGZpbGUgdG8gbWFwIGlu
CisgICAgRklMRSAqZnA7CisgICAgY2hhciogICAgICAgICAgIGZCdWZmOyAgICAgIC8vIHRoZSBh
Y3R1YWwgZGF0YTsKK307CisKKyNlbmRpZiAvLyBfTU1BUF9JTkNMVURFRF8KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjc3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL2RlYnVnLmgiCisKK25hbWVzcGFjZQoreworVFN0cmluZyBnZXRUeXBlTmFtZShjb25z
dCBUVHlwZSYgdHlwZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBpZiAodHlwZS5p
c01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJtYXQiOworICAgICAgICBvdXQgPDwg
dHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9y
KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVidEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0
Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0
VHlwZU5hbWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFz
aWNTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQor
CitUU3RyaW5nIGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgQVNTRVJU
KHR5cGUuaXNBcnJheSgpKTsKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBvdXQgPDwgIlsi
IDw8IHR5cGUuZ2V0QXJyYXlTaXplKCkgPDwgIl0iOworICAgIHJldHVybiBUU3RyaW5nKG91dC5j
X3N0cigpKTsKK30KKworYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSogbm9kZSkg
eworICAgIGlmIChjb25zdCBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBub2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChhZ2dyZWdhdGUtPmdldE9wKCkg
IT0gRU9wRnVuY3Rpb24pICYmCisgICAgICAgICAgICAgICAoYWdncmVnYXRlLT5nZXRPcCgpICE9
IEVPcFNlcXVlbmNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29uc3QgVEludGVybVNlbGVjdGlv
biogc2VsZWN0aW9uID0gbm9kZS0+Z2V0QXNTZWxlY3Rpb25Ob2RlKCkpCisgICAgeworICAgICAg
ICAvLyBUZXJuYXJ5IG9wZXJhdG9ycyBhcmUgdXN1YWxseSBwYXJ0IG9mIGFuIGFzc2lnbm1lbnQg
b3BlcmF0b3IuCisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aG9zZSByYXJlIGNhc2VzIGluIHdo
aWNoIHRoZXkgYXJlIGFsbCBieSB0aGVtc2VsdmVzLgorICAgICAgICByZXR1cm4gc2VsZWN0aW9u
LT51c2VzVGVybmFyeU9wZXJhdG9yKCk7CisgICAgfQorICAgIGVsc2UgaWYgKG5vZGUtPmdldEFz
TG9vcE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworVE91dHB1dEdMU0w6OlRPdXRwdXRHTFNM
KFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCisgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRy
dWUsIHRydWUpLAorICAgICAgbU9ialNpbmsob2JqU2luayksCisgICAgICBtRGVjbGFyaW5nVmFy
aWFibGVzKGZhbHNlKQoreworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp3cml0ZVRyaXBsZXQoVmlz
aXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNo
YXIqIHBvc3RTdHIpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCAmJiBwcmVTdHIpCisgICAgeworICAgICAgICBvdXQgPDwg
cHJlU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0ICYmIGluU3RyKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9
PSBQb3N0VmlzaXQgJiYgcG9zdFN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBwb3N0U3RyOwor
ICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5
cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAvLyBUT0RPKGFs
b2twKTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCisgICAg
aWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2Jh
bCkpCisgICAgICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsKKwor
ICAgIC8vIERlY2xhcmUgdGhlIHN0cnVjdCBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFscmVhZHku
CisgICAgaWYgKCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgJiYKKyAgICAgICAg
KG1EZWNsYXJlZFN0cnVjdHMuZmluZCh0eXBlLmdldFR5cGVOYW1lKCkpID09IG1EZWNsYXJlZFN0
cnVjdHMuZW5kKCkpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCB0eXBlLmdl
dFR5cGVOYW1lKCkgPDwgIntcbiI7CisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBOVUxMKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1
cmUpW2ldLnR5cGU7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IE5VTEwpOworICAg
ICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAgaWYgKGZpZWxkVHlwZS0+aXNBcnJheSgp
KQorICAgICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKCpmaWVsZFR5cGUpOworICAg
ICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICB9CisgICAgICAgIG91dCA8PCAifSI7Cisg
ICAgICAgIG1EZWNsYXJlZFN0cnVjdHMuaW5zZXJ0KHR5cGUuZ2V0VHlwZU5hbWUoKSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSYgYXJncykKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpT
aW5rKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
cmdzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGFyZ3MuZW5kKCk7ICsraXRlcikKKyAgICB7
CisgICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wqIGFyZyA9ICgqaXRlciktPmdldEFzU3ltYm9s
Tm9kZSgpOworICAgICAgICBBU1NFUlQoYXJnICE9IE5VTEwpOworCisgICAgICAgIGNvbnN0IFRU
eXBlJiB0eXBlID0gYXJnLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRl
IHF1YWxpZmllciBmb3IgZnVuY3Rpb24gYXJndW1lbnRzLgorICAgICAgICBpZiAoKHF1YWxpZmll
ciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSkKKyAgICAgICAg
ICAgIG91dCA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIjsKKworICAgICAgICBv
dXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7CisKKyAgICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSA9
IGFyZy0+Z2V0U3ltYm9sKCk7CisgICAgICAgIGlmICghbmFtZS5lbXB0eSgpKQorICAgICAgICAg
ICAgb3V0IDw8ICIgIiA8PCBuYW1lOworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAg
ICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKKworICAgICAgICAvLyBQdXQgYSBj
b21tYSBpZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KKyAgICAgICAgaWYgKGl0ZXIg
IT0gLS1hcmdzLmVuZCgpKQorICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgfQorfQorCitj
b25zdCBDb25zdGFudFVuaW9uKiBUT3V0cHV0R0xTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0
IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbikKK3sKKyAgICBUSW5m
b1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBvdXQgPDwgdHlwZS5nZXRUeXBlTmFtZSgp
IDw8ICIoIjsKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IE5VTEwpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSAoKnN0cnVjdHVyZSlbaV0udHlwZTsK
KyAgICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAgICBwQ29u
c3RVbmlvbiA9IHdyaXRlQ29uc3RhbnRVbmlvbigqZmllbGRUeXBlLCBwQ29uc3RVbmlvbik7Cisg
ICAgICAgICAgICBpZiAoaSAhPSBzdHJ1Y3R1cmUtPnNpemUoKSAtIDEpIG91dCA8PCAiLCAiOwor
ICAgICAgICB9CisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGludCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7CisgICAgICAgIGlmICh3cml0ZVR5cGUpIG91dCA8PCBnZXRUeXBl
TmFtZSh0eXBlKSA8PCAiKCI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
LCArK3BDb25zdFVuaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHBDb25zdFVu
aW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogb3V0IDw8IHBDb25zdFVuaW9uLT5nZXRGQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8IHBDb25zdFVuaW9uLT5nZXRC
Q29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKSBvdXQgPDwgIiwg
IjsKKyAgICAgICAgfQorICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgIikiOworICAgIH0K
KyAgICByZXR1cm4gcENvbnN0VW5pb247Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2Jq
U2luaygpOworICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChtRGVjbGFy
aW5nVmFyaWFibGVzICYmIG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCisgICAgICAgIG91dCA8
PCBhcnJheUJyYWNrZXRzKG5vZGUtPmdldFR5cGUoKSk7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6
OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICB3
cml0ZUNvbnN0YW50VW5pb24obm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpKTsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAg
aWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIC8vIFJIUyBvZiBpbml0aWFsaXplIGlzIG5vdCBi
ZWluZyBkZWNsYXJlZC4KKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BB
c3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQWRkQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNp
dCwgIigiLCAiIC09ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIC8v
IE5vdGljZSB0aGUgZmFsbC10aHJvdWdoLgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogCisg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2Fs
YXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBF
T3BJbmRleEluZGlyZWN0OgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAi
WyIsICJdIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVj
dFN0cnVjdDoKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7CisgICAgICAgICAgICAgICAgLy8gVE9ETyhh
bG9rcCk6IEFTU0VSVAorICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRUeXBlKCkuZ2V0
RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dp
enpsZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7CisgICAgICAgICAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogcmlnaHRDaGlsZCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7Cisg
ICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IHJpZ2h0Q2hpbGQtPmdl
dFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgKytzaXQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiogZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiYgZGF0YSA9IGVsZW1lbnQt
PmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF07CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChk
YXRhLmdldFR5cGUoKSA9PSBFYnRJbnQpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRh
dGEuZ2V0SUNvbnN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMDogb3V0IDw8ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG91dCA8PCAieSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBvdXQgPDwgInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzog
b3V0IDw8ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFkZDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWI6IHdy
aXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTXVsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcERpdjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNb2Q6IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiAhPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BH
cmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiA8PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+PSAiLCAiKSIpOyBicmVhazsKKworICAgICAgICAv
LyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoK
KyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wTG9naWNhbE9yOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiBeXiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5k
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHZpc2l0
Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVP
cE5lZ2F0aXZlOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLSIsIE5VTEwsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5v
dCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoISIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2Ug
RU9wUG9zdEluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsIE5VTEwsICIrKykiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsIE5VTEwsICItLSkiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoKysiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BQcmVEZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigtLSIsIE5VTEwsICIp
Iik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgICAgY2Fz
ZSBFT3BDb252RmxvYXRUb0Jvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJh
bmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEwsICIpIik7
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2
ZWMyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Ogor
ICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwg
TlVMTCwgIikiKTsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAidmVjMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b0ludDoKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW50
KCIsIE5VTEwsICIpIik7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIml2ZWMyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgTlVMTCwgIikiKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSA0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BS
YWRpYW5zOiB3cml0ZVRyaXBsZXQodmlzaXQsICJyYWRpYW5zKCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRlZ3JlZXMo
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiB3
cml0ZVRyaXBsZXQodmlzaXQsICJjb3MoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wVGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ0YW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQXNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYXNpbigiLCBOVUxM
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJhY29zKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgImF0YW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BFeHA6IHdyaXRlVHJpcGxldCh2aXNpdCwgImV4cCgiLCBOVUxMLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMb2c6IHdyaXRlVHJpcGxldCh2aXNpdCwgImxvZygiLCBOVUxMLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFeHAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJl
eHAyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImxvZzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
U3FydDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic3FydCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW52ZXJzZXNx
cnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImFicygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
aWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzaWduKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEZsb29yOiB3cml0ZVRyaXBsZXQodmlzaXQsICJmbG9vcigiLCBOVUxMLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWlsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJj
ZWlsKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZyYWN0OiB3cml0ZVRy
aXBsZXQodmlzaXQsICJmcmFjdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNl
IEVPcExlbmd0aDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsIE5VTEwsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAibm9y
bWFsaXplKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQW55OiB3cml0
ZVRyaXBsZXQodmlzaXQsICJhbnkoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhbGwoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAg
eworICAgICAgICBvdXQgPDwgIigiOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKSA/ICgiOworICAgICAgICBub2RlLT5nZXRU
cnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKSA6ICgiOworICAg
ICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQgPDwgImlmICgiOwor
ICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91
dCA8PCAiKVxuIjsKKworICAgICAgICBpbmNyZW1lbnREZXB0aCgpOworICAgICAgICB2aXNpdENv
ZGVCbG9jayhub2RlLT5nZXRUcnVlQmxvY2soKSk7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZh
bHNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iOworICAg
ICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0RmFsc2VCbG9jaygpKTsKKyAgICAgICAg
fQorICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAg
VEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Ao
KSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wU2VxdWVuY2U6IHsKKyAgICAgICAgICAgIC8vIFNj
b3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4KKyAgICAg
ICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAie1xuIjsKKworICAgICAgICAgICAgaW5jcmVt
ZW50RGVwdGgoKTsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzZXF1ZW5jZS5iZWdpbigpOworICAgICAgICAgICAgICAg
ICBpdGVyICE9IHNlcXVlbmNlLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVEludGVybU5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsK
KworICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKKyAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICI7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVj
cmVtZW50RGVwdGgoKTsKKworICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNl
cHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgorICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkg
b3V0IDw8ICJ9XG4iOworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BQcm90b3R5cGU6IHsKKyAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgQVNTRVJUKHZp
c2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIFRTdHJpbmcgcmV0dXJuVHlwZSA9IGdldFR5
cGVOYW1lKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBvdXQgPDwgcmV0dXJuVHlwZSA8
PCAiICIgPDwgbm9kZS0+Z2V0TmFtZSgpOworCisgICAgICAgICAgICBvdXQgPDwgIigiOworICAg
ICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisg
ICAgICAgICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcEZ1bmN0
aW9uOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgorICAgICAgICAgICAg
QVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIFRTdHJpbmcgcmV0dXJuVHlw
ZSA9IGdldFR5cGVOYW1lKG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBUU3RyaW5nIGZ1
bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7Cisg
ICAgICAgICAgICBvdXQgPDwgcmV0dXJuVHlwZSA8PCAiICIgPDwgZnVuY3Rpb25OYW1lOworCisg
ICAgICAgICAgICBpbmNyZW1lbnREZXB0aCgpOworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVm
aW5pdGlvbiBub2RlIGNvbnRhaW5zIG9uZSBvciB0d28gY2hpbGRyZW4gbm9kZXMKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbiBib2R5
LiBUaGUgbGF0dGVyCisgICAgICAgICAgICAvLyBpcyBub3QgcHJlc2VudCBpbiBjYXNlIG9mIGVt
cHR5IGZ1bmN0aW9uIGJvZGllcy4KKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYg
c2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgQVNTRVJUKChzZXF1
ZW5jZS5zaXplKCkgPT0gMSkgfHwgKHNlcXVlbmNlLnNpemUoKSA9PSAyKSk7CisgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHNlcUl0ZXIgPSBzZXF1ZW5jZS5iZWdp
bigpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAg
ICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1zID0gKCpzZXFJdGVyKS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMgIT0gTlVMTCk7CisgICAgICAgICAg
ICBBU1NFUlQocGFyYW1zLT5nZXRPcCgpID09IEVPcFBhcmFtZXRlcnMpOworICAgICAgICAgICAg
cGFyYW1zLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rp
b24gYm9keS4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGJvZHkgPSArK3NlcUl0ZXIg
IT0gc2VxdWVuY2UuZW5kKCkgPworICAgICAgICAgICAgICAgICgqc2VxSXRlciktPmdldEFzQWdn
cmVnYXRlKCkgOiBOVUxMOworICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2soYm9keSk7CisgICAg
ICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworIAorICAgICAgICAgICAgLy8gRnVsbHkgcHJvY2Vz
c2VkOyBubyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgorICAgICAgICAgICAgdmlzaXRDaGlsZHJl
biA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBF
T3BGdW5jdGlvbkNhbGw6CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBjYWxsLgorICAgICAgICAg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFRTdHJpbmcgZnVuY3Rpb25OYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0
TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZnVuY3Rpb25OYW1lIDw8ICIoIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIp
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBh
cmFtZXRlcnM6IHsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHBhcmFtZXRlcnMuCisgICAgICAg
ICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgb3V0IDw8ICIoIjsK
KyAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBm
YWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRGVj
bGFyYXRpb246IHsKKyAgICAgICAgICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICAgICAg
ICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgp
OworICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1UeXBlZCogdmFyaWFibGUgPSBzZXF1ZW5j
ZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICAgICAgd3JpdGVWYXJpYWJsZVR5
cGUodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgIjsKKyAg
ICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zh
cmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RGbG9hdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzQo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCVmVjMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJ2ZWMzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjNCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImludCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMzKCIs
ICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiB3cml0
ZVRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUm
IHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZS5n
ZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImxl
c3NUaGFuKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJncmVhdGVyVGhhbigiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZXNz
VGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImdyZWF0ZXJUaGFuRXF1YWwoIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3Rv
ck5vdEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3RFcXVhbCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb21tYTogd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAi
LCAiLCBOVUxMKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIm1vZCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3c6IHdy
aXRlVHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIsICIsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcE1pbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
bWF4KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENsYW1wOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BNaXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1peCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzdGVwKCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6IHdyaXRlVHJpcGxldCh2aXNp
dCwgInNtb290aHN0ZXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BE
aXN0YW5jZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRG90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJkb3QoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ3Jvc3M6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImNyb3NzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VGb3J3
YXJkOiB3cml0ZVRyaXBsZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZWZsZWN0
KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6IHdyaXRlVHJp
cGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTXVsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXRyaXhDb21wTXVsdCgiLCAiLCAiLCAiKSIp
OyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW47Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0
TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAvLyBMb29w
IGhlYWRlci4KKyAgICBpZiAobm9kZS0+dGVzdEZpcnN0KCkpICAvLyBmb3IgbG9vcAorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJmb3IgKCI7CisgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisg
ICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgIjsgIjsKKworICAgICAgICBBU1NFUlQobm9kZS0+Z2V0VGVzdCgpICE9IE5VTEwpOworICAg
ICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIjsg
IjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VGVybWluYWwoKSkKKyAgICAgICAgICAgIG5vZGUt
PmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilcbiI7Cisg
ICAgfQorICAgIGVsc2UgIC8vIGRvLXdoaWxlIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAi
ZG9cbiI7CisgICAgfQorCisgICAgLy8gTG9vcCBib2R5LgorICAgIHZpc2l0Q29kZUJsb2NrKG5v
ZGUtPmdldEJvZHkoKSk7CisKKyAgICAvLyBMb29wIGZvb3Rlci4KKyAgICBpZiAoIW5vZGUtPnRl
c3RGaXJzdCgpKSAgLy8gd2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZSAo
IjsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAgICAgbm9k
ZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpO1xuIjsKKyAg
ICB9CisgICAgZGVjcmVtZW50RGVwdGgoKTsKKworICAgIC8vIE5vIG5lZWQgdG8gdmlzaXQgY2hp
bGRyZW4uIFRoZXkgaGF2ZSBiZWVuIGFscmVhZHkgcHJvY2Vzc2VkIGluCisgICAgLy8gdGhpcyBm
dW5jdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQoreworICAgIFRJbmZvU2lu
a0Jhc2UgJm91dCA9IG9ialNpbmsoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkp
CisgICAgeworICAgICAgICBjYXNlIEVPcEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2Nh
cmQiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQnJlYWs6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImJyZWFrIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnRpbnVlOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjb250aW51ZSIsIE5VTEwsIE5VTEwpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BSZXR1cm46IHdyaXRlVHJpcGxldCh2aXNpdCwgInJldHVy
biAiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRPdXRwdXRHTFNM
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgeworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAobm9kZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAg
bm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC8vIFNpbmdsZSBzdGF0ZW1lbnRzIG5vdCBw
YXJ0IG9mIGEgc2VxdWVuY2UgbmVlZCB0byBiZSB0ZXJtaW5hdGVkCisgICAgICAgIC8vIHdpdGgg
c2VtaS1jb2xvbi4KKyAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgICAg
ICAgICAgb3V0IDw8ICI7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQg
PDwgIntcbn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgorICAgIH0KK30KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0wuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRHTFNMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXworI2RlZmluZSBDUk9T
U0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisKKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRl
ICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorCitjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Citw
dWJsaWM6CisgICAgVE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luayk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4gbU9ialNpbms7IH0K
KyAgICB2b2lkIHdyaXRlVHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBj
b25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hhciogcG9zdFN0cik7CisgICAgdm9pZCB3cml0ZVZh
cmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSk7CisgICAgdm9pZCB3cml0ZUZ1bmN0aW9uUGFy
YW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpOworICAgIGNvbnN0IENvbnN0YW50
VW5pb24qIHdyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwgY29uc3QgQ29uc3Rh
bnRVbmlvbiogcENvbnN0VW5pb24pOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSk7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1Mb29wKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpOworCisgICAgdm9pZCB2aXNpdENvZGVCbG9jayhUSW50
ZXJtTm9kZSogbm9kZSk7CisKK3ByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSYgbU9ialNpbms7
CisgICAgYm9vbCBtRGVjbGFyaW5nVmFyaWFibGVzOworCisgICAgLy8gU3RydWN0cyBhcmUgZGVj
bGFyZWQgYXMgdGhlIHRyZWUgaXMgdHJhdmVyc2VkLiBUaGlzIHNldCBjb250YWlucyBhbGwKKyAg
ICAvLyB0aGUgc3RydWN0cyBhbHJlYWR5IGRlY2xhcmVkLiBJdCBpcyBtYWludGFpbmVkIHNvIHRo
YXQgYSBzdHJ1Y3QgaXMKKyAgICAvLyBkZWNsYXJlZCBvbmx5IG9uY2UuCisgICAgdHlwZWRlZiBz
dGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CisgICAgRGVjbGFyZWRTdHJ1Y3RzIG1E
ZWNsYXJlZFN0cnVjdHM7Cit9OworCisjZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBV
VEdMU0xfSF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1
dEhMU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxlY3QuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIHNoCit7CisvLyBJbnRlZ2VyIHRvIFRTdHJp
bmcgY29udmVyc2lvbgorVFN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBd
OworICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQor
CitPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVy
bVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKK3sKKyAgICBt
VW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtSW5z
aWRlRnVuY3Rpb24gPSBmYWxzZTsKKworICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CisgICAg
bVVzZXNUZXh0dXJlMkRfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZh
bHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0
dXJlQ3ViZSA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOworICAg
IG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7Cisg
ICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7CisgICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNl
OworICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbVVzZXNYb3IgPSBmYWxzZTsKKyAg
ICBtVXNlc01vZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDIgPSBmYWxzZTsKKyAgICBtVXNlc01v
ZDMgPSBmYWxzZTsKKyAgICBtVXNlc01vZDQgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJk
MSA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNGYWNl
Zm9yd2FyZDMgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAgIG1V
c2VzRXF1YWxNYXQyID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDMgPSBmYWxzZTsKKyAgICBt
VXNlc0VxdWFsTWF0NCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMyID0gZmFsc2U7CisgICAg
bVVzZXNFcXVhbFZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjNCA9IGZhbHNlOworICAg
IG1Vc2VzRXF1YWxJVmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjMyA9IGZhbHNlOwor
ICAgIG1Vc2VzRXF1YWxJVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMiA9IGZhbHNl
OworICAgIG1Vc2VzRXF1YWxCVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjNCA9IGZh
bHNlOworICAgIG1Vc2VzQXRhbjIgPSBmYWxzZTsKKworICAgIG1TY29wZURlcHRoID0gMDsKKwor
ICAgIG1Bcmd1bWVudEluZGV4ID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQor
eworICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1
dCgpCit7CisgICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1
dCB0aGUgYm9keSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRl
cgorICAgIGhlYWRlcigpOworCisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFkZXIu
Y19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsKK30K
KworVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCit7CisgICAgcmV0
dXJuIG1Cb2R5OworfQorCitpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAm
dHlwZSkgY29uc3QKK3sKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0
eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBhcnJheVNpemUgPSB0eXBlLmlzQXJy
YXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworCisgICAgcmV0dXJuIGVsZW1lbnRTaXpl
ICogYXJyYXlTaXplOworfQorCit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCit7CisgICAgRVNo
TGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBUSW5mb1NpbmtCYXNl
ICZvdXQgPSBtSGVhZGVyOworCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9y
IHN0cnVjdERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3RE
ZWNsYXJhdGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlv
bisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisK
KyAgICBmb3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0
b3JzLmJlZ2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVj
dG9yKyspCisgICAgeworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKworICAg
IGlmIChsYW5ndWFnZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgeworICAgICAgICBUU3RyaW5n
IHVuaWZvcm1zOworICAgICAgICBUU3RyaW5nIHZhcnlpbmdzOworCisgICAgICAgIFRTeW1ib2xU
YWJsZUxldmVsICpzeW1ib2xzID0gbUNvbnRleHQuc3ltYm9sVGFibGUuZ2V0R2xvYmFsTGV2ZWwo
KTsKKyAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworCisgICAgICAgIGZvciAoVFN5bWJv
bFRhYmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVnaW4o
KTsgbmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wpLnNl
Y29uZDsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5hbWUo
KTsKKworICAgICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNfY2Fz
dDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlmaWVy
IHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
cXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJl
ZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkg
KyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJp
YW50VmFyeWluZ0luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1SZWZlcmVuY2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFy
eWluZ3MuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5
cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsg
aW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2Vt
YW50aWNJbmRleCArPSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFHbG9iYWwgfHwgcXVhbGlmaWVyID09IEV2cVRlbXBv
cmFyeSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdsb2JhbHMg
YXJlIGRlY2xhcmVkIGFuZCBpbnRpYWxpemVkIGFzIGFuIGFnZ3JlZ2F0ZSBub2RlCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFDb25z
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0YW50cyBh
cmUgcmVwZWF0ZWQgYXMgbGl0ZXJhbHMgd2hlcmUgdXNlZAorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZh
cnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9h
dDQgZ2xfQ29sb3JbMV0gPSB7ZmxvYXQ0KDAsIDAsIDAsIDApfTtcbiI7CisKKyAgICAgICAgaWYg
KG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZhbHNlO1xu
IjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNl
c0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0
NCBkeF9XaW5kb3c7XG4iCisgICAgICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4X0Rl
cHRoO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gYm9vbCBkeF9Qb2ludHNPckxpbmVz
O1xuIgorICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGJvb2wgZHhfRnJvbnRDQ1c7XG4iOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgb3V0IDw8
ICB1bmlmb3JtczsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJp
YXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQp
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRwcm9qKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMo
cywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQg
YmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJp
YXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUg
cywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
VXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICB7CisgICAgICAgIFRTdHJp
bmcgdW5pZm9ybXM7CisgICAgICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAgICAgICAgVFN0cmlu
ZyB2YXJ5aW5nczsKKworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250
ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7CisKKyAgICAgICAgZm9yIChUU3ltYm9s
VGFibGVMZXZlbDo6Y29uc3RfaXRlcmF0b3IgbmFtZWRTeW1ib2wgPSBzeW1ib2xzLT5iZWdpbigp
OyBuYW1lZFN5bWJvbCAhPSBzeW1ib2xzLT5lbmQoKTsgbmFtZWRTeW1ib2wrKykKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gKCpuYW1lZFN5bWJvbCkuc2Vj
b25kOworICAgICAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHN5bWJvbC0+Z2V0TmFtZSgp
OworCisgICAgICAgICAgICBpZiAoc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IHN0YXRpY19jYXN0
PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIGlmIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtUmVmZXJlbmNlZFVuaWZvcm1zLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVm
ZXJlbmNlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSAr
ICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkQXR0cmlidXRlcy5maW5kKG5hbWUuY19zdHIo
KSkgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5cGVT
dHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsg
IiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVmFy
eWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dyYW0g
bGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVj
b3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlw
ZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxpZmll
ciA9PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUg
bm9kZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAg
ICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAg
ICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7
CisgICAgICAgIAorICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFy
eWluZ3NcbiI7CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4i
CisgICAgICAgICAgICAgICAidW5pZm9ybSBmbG9hdDIgZHhfSGFsZlBpeGVsU2l6ZTtcbiIKKyAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91
dCA8PCAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9V
U0VTX1BPSU5UX0NPT1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVw
dGhSYW5nZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJh
bWV0ZXJzXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9h
dCBuZWFyO1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAg
ICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0
ZXJzIGdsX0RlcHRoUmFuZ2U7XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAg
IGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBwLCBi
b29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7
XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1Vc2VzTW9kMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1v
ZChmbG9hdDIgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNN
b2QzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5
KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHgg
LSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNCkKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIK
KyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAg
IGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgZmFj
ZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKKyAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAg
ICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47
XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxu
IgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1
cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQy
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4sIGZs
b2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7
XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAg
ICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAg
IiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAg
ICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJc
biI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMgTnJl
ZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChO
cmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAg
ICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAg
ICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAg
ICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgor
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgZmFj
ZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKKyAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgor
ICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4g
LU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxz
ZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxNYXQy
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0MngyIG0sIGZsb2F0Mngy
IG4pXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
bVswXVswXSA9PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJlxuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsxXVsx
XTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFs
TWF0MykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDN4MyBtLCBmbG9h
dDN4MyBuKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiYgbVswXVsyXSA9
PSBuWzBdWzJdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09IG5b
MV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJlxuIgor
ICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1bMV0g
PT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl07XG4iCisgICAgICAgICAgICAgICAifVxu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbE1hdDQpCisgICAgeworICAgICAgICBvdXQg
PDwgImJvb2wgZXF1YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0eDQgbilcbiIKKyAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0gJiYg
bVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJiBtWzBdWzNdID09IG5b
MF1bM10gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsxXVsw
XSAmJiBtWzFdWzFdID09IG5bMV1bMV0gJiYgbVsxXVsyXSA9PSBuWzFdWzJdICYmIG1bMV1bM10g
PT0gblsxXVszXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBu
WzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl0gJiYgbVsy
XVszXSA9PSBuWzJdWzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzNdWzBd
ID09IG5bM11bMF0gJiYgbVszXVsxXSA9PSBuWzNdWzFdICYmIG1bM11bMl0gPT0gblszXVsyXSAm
JiBtWzNdWzNdID09IG5bM11bM107XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNFcXVhbFZlYzIpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1
YWwoZmxvYXQyIHYsIGZsb2F0MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAg
ICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsVmVjMykKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDMgdiwgZmxvYXQzIHUpXG4iCisgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2
LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wg
ZXF1YWwoZmxvYXQ0IHYsIGZsb2F0NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0g
dS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNFcXVhbElWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFs
KGludDIgdiwgaW50MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsSVZlYzMpCisgICAgeworICAgICAg
ICBvdXQgPDwgImJvb2wgZXF1YWwoaW50MyB2LCBpbnQzIHUpXG4iCisgICAgICAgICAgICAgICAi
e1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55
ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBp
ZiAobVVzZXNFcXVhbElWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGlu
dDQgdiwgaW50NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9
PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNF
cXVhbEJWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGJvb2wyIHYsIGJv
b2wyIHUpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVjMykKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Ym9vbCBlcXVhbChib29sMyB2LCBib29sMyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2Lnog
PT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
RXF1YWxCVmVjNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sNCB2LCBi
b29sNCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7
XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMikK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgpXG4i
CisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAgJiYg
eSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7Cisg
ICAgfQorfQorCit2b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5v
ZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBUU3RyaW5nIG5h
bWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29sb3Ii
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAgfQorICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29s
b3IiOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKKyAgICB7
CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOwor
ICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQorICAgIHsKKyAgICAg
ICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgeworICAgICAgICBtVXNl
c1BvaW50Q29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQorICAgIHsKKyAgICAgICAgbVVzZXNGcm9u
dEZhY2luZyA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlm
IChuYW1lID09ICJnbF9Qb2ludFNpemUiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludFNpemUg
PSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKworICAg
ICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZWZlcmVuY2VkVW5pZm9ybXMuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmluc2VydChuYW1lLmNfc3RyKCkpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1
YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgewor
ICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5aW5ncy5pbnNlcnQobmFtZS5jX3N0cigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICB9Cit9CisKK2Jv
b2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5v
ZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIiIsICIgPSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BB
ZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIs
ICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9
ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxh
ckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigi
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRM
ZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRyYW5zcG9zZSgi
OyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0g
bXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0
VHlwZSgpLmdldEZpZWxkTmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAg
ICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
Ii4iOworCisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxlID0gbm9kZS0+Z2V0
UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICAgICAgaWYgKHN3aXp6bGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9
IHN3aXp6bGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNl
LmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50LT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Mjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wU3Vi
OiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJy
ZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdjogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAg
IGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBpZiAobm9k
ZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1
YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiEoIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0
ICpmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSAoKmZp
ZWxkcylbaV0udHlwZTsKKworICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0Rmll
bGROYW1lKCkgKyAiID09ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0
RmllbGROYW1lKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0g
MSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICYmICI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwg
IikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgp
LT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAy
ICogMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMyAqIDM6IG1Vc2VzRXF1YWxNYXQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDQgKiA0OiBtVXNlc0VxdWFsTWF0NCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmlzVmVjdG9yKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCkt
PmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgp
LT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IG1Vc2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbFZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRT
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6IG1Vc2VzRXF1YWxJVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogbVVzZXNFcXVhbElWZWMzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBtVXNlc0VxdWFsSVZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogbVVzZXNFcXVhbEJWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiZXF1YWwoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiIWVxdWFsKCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbjogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA8PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICogIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRy
YW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9y
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJl
YWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJy
ZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiIHx8ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoK
KyAgICAgICAgbVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
eG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2Fs
QW5kOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7ICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAg
IGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwgIiIs
ICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG9zdElu
Y3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisrKSIpOyBicmVhazsK
KyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiIiwgIi0tKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9Cb29sOgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgp
LmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wzKCIsICIiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJi
b29sNCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zs
b2F0OgorICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgIiIsICIp
Iik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9hdDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0
OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0ludDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAg
ICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAiIiwgIikiKTsgYnJl
YWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50NCgiLCAi
IiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIs
ICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQ29zOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNvcygiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BBc2luOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXNpbigiLCAiIiwg
IikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEF0YW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIiLCAi
KSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wTG9nOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZygiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BMb2cyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9nMigiLCAiIiwgIiki
KTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEludmVyc2VTcXJ0OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3FydCgiLCAiIiwgIiki
KTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
U2lnbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24oIiwgIiIsICIpIik7
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmbG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BD
ZWlsOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCAiIiwgIikiKTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExl
bmd0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgIiIsICIpIik7
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAibm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKKy8vICAgIGNhc2UgRU9wRFBk
eDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsgICAg
ICAgYnJlYWs7CisvLyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJkZHkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BGd2lk
dGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOyAg
ICBicmVhazsgICAgICAgIAorICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIEVTaExhbmd1YWdlIGxh
bmd1YWdlID0gbUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJv
ZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BT
ZXF1ZW5jZToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAg
ICAgICBtU2NvcGVEZXB0aCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1TY29wZUJyYWNrZXQu
c2l6ZSgpIDwgbVNjb3BlRGVwdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBtU2NvcGVCcmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2NvcGUgbGV2ZWwKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0aCAtIDFdKys7ICAg
Ly8gTmV3IHNjb3BlIGF0IGV4aXN0aW5nIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzU2lu
Z2xlU3RhdGVtZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2UoKnNpdCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAg
IG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1JbnNpZGVG
dW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisK
KyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246
CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsK
KyAgICAgICAgICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAodmFyaWFi
bGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkgfHwgdmFyaWFi
bGUtPmdldFF1YWxpZmllcigpID09IEV2cUdsb2JhbCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2YXJpYWJsZS0+Z2V0
VHlwZSgpLCBzY29wZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwg
TlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+Z2V0QXNTeW1ib2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRT
eW1ib2woKSAhPSAiIikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZVN0
cmluZyh2YXJpYWJsZS0+Z2V0VHlwZSgpKSArICIgIjsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0
ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcnJh
eVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHRoaXMtPmluVmlzaXQpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVu
Y2UuYmFjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzaXQgPSB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCBu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
dmlzaXQgJiYgdGhpcy0+cG9zdFZpc2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFy
YXRpb24KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkg
YWRkZWQgdG8gY29uc3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0
ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQcm90b3R5cGU6CisgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5cGVT
dHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgp
KSA8PCAiKCI7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9k
ZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKTtcbiI7
CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICIsICIsICIiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9u
OgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFu
Z2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJl
VmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmco
bm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAi
bWFpbiIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X21haW4oIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8
ICIoIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVu
Y2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5n
ZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3lt
Ym9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmlu
ZyhzeW1ib2wpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5z
aXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1
ZW5jZS5iZWdpbigpKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0
VmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisg
ICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1l
KG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVm
aW5lZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRl
Y29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0g
InRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQ
cm9qKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExv
ZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNhbXBs
aW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWly
ZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlQ3ViZUxvZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0
dXJlIHNhbXBsaW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBh
cmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIilcbntcbiIp
OyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzEiLCAmbm9kZS0+Z2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMSgiLCAiIiwgIikiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMSgiLCAiIiwgIikiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29u
c3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBhZGRDb25z
dHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwor
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogCisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIpIik7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KG5vZGUtPmdldFR5cGUoKS5nZXRU
eXBlTmFtZSgpKSwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpICsgIl9j
dG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhh
bjogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IDw9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICE9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZp
cnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNN
b2QxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNNb2QyID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNNb2QzID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNNb2Q0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BBdGFuOgorICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCisgICAgICAgIG1Vc2Vz
QXRhbjIgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1heCgi
LCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENsYW1wOiAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3RlcDog
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BE
aXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIiki
KTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAi
KSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVk
KCktPmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJn
dW1lbnQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2Fy
ZDEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIg
PSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNlZm9yd2FyZDMgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9yd2FyZDQgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmYWNl
Zm9yd2FyZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAi
LCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAq
ICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNp
dFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9w
ZXJhdG9yKCkpCisgICAgeworICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZvbGRTZWxlY3QtPmdl
dFRlbXBvcmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50
CisgICAgeworICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRp
b24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZigiOworCisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAg
ICAgICAgICJ7XG4iOworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAgICBpZiAobm9kZS0+
Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVsc2VcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgbm9kZS0+Z2V0RmFsc2VC
bG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBPdXRwdXRITFNM
Ojp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAg
d3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKSk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW5mb1NpbmtCYXNl
ICZvdXQgPSBtQm9keTsKKworICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgeworICAg
ICAgICBvdXQgPDwgImRvXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1pbmFs
KCkpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdl
dEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIjsg
IjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VGVzdCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
b3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAg
ICB9CisKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0
Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBvdXQgPDwgIn1cbiI7CisKKyAg
ICBpZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZShc
biI7CisKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAg
ICBvdXQgPDwgIikiOworICAgIH0KKworICAgIG91dCA8PCAiO1xuIjsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVElu
dGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKwor
ICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxs
OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIpOyAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCAiIiwg
IiIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlz
aXQsICJjb250aW51ZSIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46Cisg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgInJldHVybiAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUg
Km5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNB
Z2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAgICAgICBpZiAoYWdn
cmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdncmVnYXRlLT5nZXRT
ZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7
IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghaXNTaW5nbGVTdGF0
ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9y
dGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCitib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4
Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CisKKyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKKyAgICAvLyBmb3Io
aW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBpbmRleCArPSBp
bmNyZW1lbnQpCisgICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOworICAgIFRPcGVyYXRv
ciBjb21wYXJhdG9yID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7CisgICAgaW50IGxp
bWl0ID0gMDsKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBhcnNlIGluZGV4IG5h
bWUgYW5kIGludGlhbCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpOworCisgICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAgICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOworCisg
ICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2
cVRlbXBvcmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5
ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhc3NpZ24tPmdl
dExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFudCkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0
YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAx
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4ID0gc3ltYm9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBj
b25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGNvbXBh
cmF0b3IgYW5kIGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0
VGVzdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldFRl
c3QoKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAodGVzdCAmJiB0
ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGluZGV4LT5nZXRJ
ZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3Rh
bnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgICAgICAg
ICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0g
MSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0
ZXN0LT5nZXRPcCgpOworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGluY3JlbWVudAor
ICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5n
ZXRUZXJtaW5hbCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWlu
YWwgPSBub2RlLT5nZXRUZXJtaW5hbCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICAgICAgVElu
dGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNVbmFy
eU5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKKyAgICAgICAg
eworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7Cisg
ICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJtaW5h
bC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgIGlmIChj
b25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG9wKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRPcGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRU9w
UG9zdEluY3JlbWVudDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVPcFBvc3REZWNyZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51
bGwgJiYgaW5jcmVtZW50ICE9IDApCisgICAgeworICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBF
T3BMZXNzVGhhbkVxdWFsKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJhdG9yID0gRU9w
TGVzc1RoYW47CisgICAgICAgICAgICBsaW1pdCArPSAxOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8gaW5jcmVtZW50OworCisgICAg
ICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1pdCAtIGluaXRpYWwgKyAxKSAl
IGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCAr
IGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykgLSAxIC0gcmVtYWluZGVyOwor
CisgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xh
bXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
ImZvcihpbnQgIjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFs
OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7
ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAg
ICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAg
ICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29w
Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3Qg
VFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmlu
ZyAmcG9zdFN0cmluZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJpbmc7
CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBv
dXQgPDwgaW5TdHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkK
KyAgICB7CisgICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKworVFN0cmluZyBP
dXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7
CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOworICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1l
ID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExT
TCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJvdG90eXBlcworICAgIHsKKyAg
ICAgICAgbmFtZSA9ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKworICAgIHJl
dHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkg
KyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExT
TDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChx
dWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFJbjogICAgICAgICAgICByZXR1cm4gImlu
IjsKKyAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJvdXQiOworICAgICAgY2Fz
ZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKKyAgICAgIGNhc2UgRXZxQ29uc3RS
ZWFkT25seTogcmV0dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3Ry
aW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldFR5cGVOYW1lKCkgIT0gIiIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlwZS5nZXRUeXBl
TmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJl
LCBkZWZpbmUgaW4gcGxhY2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0
ICZmaWVsZHMgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgVFN0cmluZyBzdHJp
bmcgPSAic3RydWN0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAq
ZmllbGRzW2ldLnR5cGU7CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlw
ZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5n
KGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmcgKz0g
In0gIjsKKworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJm
bG9hdDJ4MiI7CisgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKKyAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0eDQiOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
ImZsb2F0IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MiI7CisgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiAiZmxvYXQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidEludDoKKyAg
ICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiaW50IjsKKyAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gImludDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7Cisg
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNp
emUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wi
OworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiAiYm9vbDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9v
bDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAg
IHJldHVybiAidm9pZCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOworICAgICAgICB9CisgICAgfQorCisgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgcmV0dXJuICI8dW5rbm93biB0eXBlPiI7
Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUp
Cit7CisgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsK
KyAgICB9CisKKyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsgIl0i
OworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBl
KQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yIChpbnQgY29tcG9uZW50ID0gMDsg
Y29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBvbmVudCsrKQorICAgIHsKKyAg
ICAgICAgc3RyaW5nICs9ICIwIjsKKworICAgICAgICBpZiAoY29tcG9uZW50IDwgdHlwZS5nZXRP
YmplY3RTaXplKCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIiwgIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7Cit9CisK
K3ZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKK3sKKyAg
ICBpZiAobmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBOYW1lbGVzcyBz
dHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisgICAgVFR5cGUgY3Rv
clR5cGUgPSB0eXBlOworICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3RvclR5
cGUuY2hhbmdlUHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLmNoYW5nZVF1YWxpZmll
cihFdnFUZW1wb3JhcnkpOworCisgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0
KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRU
eXBlPiBQYXJhbWV0ZXJBcnJheTsKKyAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsK
KworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVu
Y2U6OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFt
ZXRlciAhPSBwYXJhbWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQo
KS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0
cnVjdCgpKQorICAgIHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1l
KSk7CisKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSArPSAi
c3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOworCisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0
KCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVs
ZHNbaV0udHlwZTsKKworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJp
bmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVs
ZCkgKyAiO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CisK
KyAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1
Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2Jh
Y2soc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9y
UGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICBUU3RyaW5nIGNvbnN0cnVjdG9yOworCisg
ICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3Ig
Kz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOworICAgIH0KKyAgICBlbHNl
ICAgLy8gQnVpbHQtaW4gdHlwZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0
cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5z
aXplKCk7IHBhcmFtZXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBj
dG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOworCisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5cGVT
dHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0cmluZyh0eXBlKTsK
KworICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpIC0gMSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1
Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0dXJuICIgKyB0eXBl
U3RyaW5nKGN0b3JUeXBlKSArICIoIjsKKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuaXNNYXRy
aXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKKyAgICB7CisgICAgICAgIGludCBk
aW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmcGFy
YW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07CisKKyAgICAgICAgaWYgKHBhcmFtZXRlci5pc1Nj
YWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBk
aW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9
IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4MCIgOiAiMC4wIik7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGlt
IC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldE5vbWluYWxT
aXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmco
IngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmlu
Zygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAtIDEp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVj
dG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgcmVtYWluaW5nQ29tcG9uZW50cyA9IGN0
b3JUeXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgaW50IHBhcmFtZXRlckluZGV4ID0gMDsK
KworICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0
ZXJJbmRleF07CisgICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5k
ZXggPCAoaW50KWN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChw
YXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW1h
aW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0
ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0
T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChyZW1haW5pbmdDb21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0NvbXBv
bmVudHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6IGNvbnN0cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjogY29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkgfHwg
cGFyYW1ldGVyLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFT
U0VSVChyZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCkgfHwg
bW9yZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlbWFp
bmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYgKG1v
cmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtZXRlcklu
ZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21wb25l
bnRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0
b3IgKz0gIik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAg
IG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29uc3QgQ29uc3RhbnRV
bmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBj
b25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG1Cb2R5OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5cGVOYW1lKCkpICsg
Il9jdG9yKCI7CisgICAgICAgIAorICAgICAgICBjb25zdCBUVHlwZUxpc3QgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1
Y3R1cmUtPnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAq
ZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisKKyAgICAgICAgICAgIGNvbnN0VW5p
b24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbik7CisKKyAgICAg
ICAgICAgIGlmIChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBz
aXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6
ZSA+IDE7CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlvbisrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNvbnN0VW5pb24tPmdl
dEZDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNv
bnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIs
ICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVUeXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVTdHJp
bmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgpICYmIGkg
PCBkZXB0aExpbWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsgc3RyKGkp
OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6
c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0eXBlTmFt
ZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAg
IGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pCisgICAg
eworICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSArIHNjb3Bl
U3RyaW5nKGRlcHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0b3Igc3Ry
dWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1Y3ROYW1l
cy5lbmQoKTsgc3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnN0cnVj
dE5hbWUgPT0gc2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc2NvcGVkTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFVO
UkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25zdHJ1Y3Rv
cgorCisgICAgcmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29y
YXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAz
KSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICJfIiArIHN0cmluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0cmluZzsKKyAgICB9Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9PVVRQVVRITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKworI2lu
Y2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJt
ZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNl
IHNoCit7CitjbGFzcyBVbmZvbGRTZWxlY3Q7CisKK2NsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgT3V0cHV0SExTTChU
UGFyc2VDb250ZXh0ICZjb250ZXh0KTsKKyAgICB+T3V0cHV0SExTTCgpOworCisgICAgdm9pZCBv
dXRwdXQoKTsKKworICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0oKTsKKworICAgIFRT
dHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcg
cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBzdGF0aWMgVFN0cmlu
ZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgaW5p
dGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRl
KGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlIHRvIGF2
b2lkIG5hbWluZyBjbGFzaGVzCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQgaGVhZGVyKCk7CisK
KyAgICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2RlIHRvIHRoZSBib2R5
IHN0cmVhbQorICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZvaWQg
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoKik7CisKKyAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1O
b2RlICpub2RlKTsKKyAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5v
ZGUpOworICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAm
cHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0
cmluZyk7CisgICAgVFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpz
eW1ib2wpOworICAgIGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdDsKKwor
ICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcg
Jm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycyk7CisgICAgY29uc3QgQ29u
c3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBD
b25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsKKworICAgIFRTdHJpbmcgc2NvcGVTdHJpbmcodW5z
aWduZWQgaW50IGRlcHRoTGltaXQpOworICAgIFRTdHJpbmcgc2NvcGVkU3RydWN0KGNvbnN0IFRT
dHJpbmcgJnR5cGVOYW1lKTsKKyAgICBUU3RyaW5nIHN0cnVjdExvb2t1cChjb25zdCBUU3RyaW5n
ICZ0eXBlTmFtZSk7CisKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBVbmZvbGRT
ZWxlY3QgKm1VbmZvbGRTZWxlY3Q7CisgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CisKKyAgICAv
LyBPdXRwdXQgc3RyZWFtcworICAgIFRJbmZvU2lua0Jhc2UgbUhlYWRlcjsKKyAgICBUSW5mb1Np
bmtCYXNlIG1Cb2R5OworICAgIFRJbmZvU2lua0Jhc2UgbUZvb3RlcjsKKworICAgIHN0ZDo6c2V0
PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1S
ZWZlcmVuY2VkVmFyeWluZ3M7CisKKyAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWluaW5nIHdoYXQg
Z29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAorICAgIGJvb2wgbVVzZXNUZXh0dXJlMkQ7CisgICAg
Ym9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qOwor
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJvb2wgbVVzZXNEZXB0
aFJhbmdlOworICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBtVXNlc1BvaW50Q29v
cmQ7CisgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVzZXNQb2ludFNpemU7
CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAgICBib29sIG1Vc2Vz
TW9kMjsKKyAgICBib29sIG1Vc2VzTW9kMzsKKyAgICBib29sIG1Vc2VzTW9kNDsKKyAgICBib29s
IG1Vc2VzRmFjZWZvcndhcmQxOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7CisgICAgYm9v
bCBtVXNlc0ZhY2Vmb3J3YXJkMzsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OworICAgIGJv
b2wgbVVzZXNFcXVhbE1hdDI7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0MzsKKyAgICBib29sIG1V
c2VzRXF1YWxNYXQ0OworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7CisgICAgYm9vbCBtVXNlc0Vx
dWFsVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWM0OworICAgIGJvb2wgbVVzZXNFcXVhbElW
ZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWMzOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWM0
OworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMzOwor
ICAgIGJvb2wgbVVzZXNFcXVhbEJWZWM0OworICAgIGJvb2wgbVVzZXNBdGFuMjsKKworICAgIHR5
cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9ycyBt
Q29uc3RydWN0b3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1l
czsKKyAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6bGlz
dDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25zIG1T
dHJ1Y3REZWNsYXJhdGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2NvcGVC
cmFja2V0OworICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVkIGlu
dCBtU2NvcGVEZXB0aDsKKworICAgIGludCBtQXJndW1lbnRJbmRleDsgICAvLyBGb3IgY3JlYXRp
bmcgdW5pcXVlIGFyZ3VtZW50IG5hbWVzCit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9P
VVRQVVRITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0NjIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTdWIt
IHZlY3RvciBhbmQgbWF0cml4IGZpZWxkcworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8g
TG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9m
ZnNldHMKKy8vIGZvciBhIHZlY3Rvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVj
dG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21w
U3RyaW5nLnNpemUoKTsKKyAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIo
KSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAg
ICAgIGV4eXp3LAorICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEsCisgICAgfSBmaWVsZFNl
dFs0XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CisgICAg
ICAgIHN3aXRjaCAoY29tcFN0cmluZ1tpXSkgIHsKKyAgICAgICAgY2FzZSAneCc6IAorICAgICAg
ICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBl
eHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzogCisgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2Jh
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd5JzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ3onOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnYic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAg
ICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIGNhc2UgJ3cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsK
KyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnYSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdxJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAg
ICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxl
Y3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51
bTsgKytpKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVs
ZFNldFtpXSAhPSBmaWVsZFNldFtpLTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQi
LCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworCisvLworLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5n
ZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZvciBhIG1hdHJpeC4KKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRT
aXplLCBUTWF0cml4RmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy53aG9s
ZVJvdyA9IGZhbHNlOworICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgIGZpZWxkcy5y
b3cgPSAtMTsKKyAgICBmaWVsZHMuY29sID0gLTE7CisKKyAgICBpZiAoY29tcFN0cmluZy5zaXpl
KCkgIT0gMikgeworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4
IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAg
ICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOworICAgICAgICBmaWVsZHMuY29s
ID0gY29tcFN0cmluZ1sxXSAtICcwJzsKKyAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0g
J18nKSB7CisgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0g
PiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOworICAgICAg
ICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8CisgICAg
ICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAg
ZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxk
cy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmlu
Zy5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFcnJvcnMKKy8vCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworLy8KKy8vIFRyYWNrIHdoZXRoZXIgZXJyb3JzIGhhdmUgb2NjdXJyZWQuCisv
Lwordm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKK3sKKyAgICByZWNvdmVyZWRGcm9tRXJy
b3IgPSB0cnVlOworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwg
c3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIENfREVDTCBUUGFyc2VDb250ZXh0
OjplcnJvcihUU291cmNlTG9jIG5MaW5lLCBjb25zdCBjaGFyICpzelJlYXNvbiwgY29uc3QgY2hh
ciAqc3pUb2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpzekV4dHJhSW5mb0Zvcm1hdCwgLi4uKQoreworICAgIGNoYXIgc3pFeHRyYUluZm9bNDAwXTsK
KyAgICB2YV9saXN0IG1hcmtlcjsKKworICAgIHZhX3N0YXJ0KG1hcmtlciwgc3pFeHRyYUluZm9G
b3JtYXQpOworCisgICAgdnNucHJpbnRmKHN6RXh0cmFJbmZvLCBzaXplb2Yoc3pFeHRyYUluZm8p
LCBzekV4dHJhSW5mb0Zvcm1hdCwgbWFya2VyKTsKKworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxl
KGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6IGV4dHJhaW5mbyAqLworICAgIGluZm9TaW5r
LmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgaW5mb1NpbmsuaW5mby5sb2NhdGlvbihu
TGluZSk7CisgICAgaW5mb1NpbmsuaW5mbyA8PCAiJyIgPDwgc3pUb2tlbiA8PCAgIicgOiAiIDw8
IHN6UmVhc29uIDw8ICIgIiA8PCBzekV4dHJhSW5mbyA8PCAiXG4iOworCisgICAgdmFfZW5kKG1h
cmtlcik7CisKKyAgICArK251bUVycm9yczsKK30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2Fn
ZSBmb3IgYWxsIHBsYWNlcyBhc3NpZ25tZW50cyBkb24ndCB3b3JrLgorLy8KK3ZvaWQgVFBhcnNl
Q29udGV4dDo6YXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxl
ZnQsIFRTdHJpbmcgcmlnaHQpCit7CisgICAgZXJyb3IobGluZSwgIiIsIG9wLCAiY2Fubm90IGNv
bnZlcnQgZnJvbSAnJXMnIHRvICclcyciLAorICAgICAgICAgIHJpZ2h0LmNfc3RyKCksIGxlZnQu
Y19zdHIoKSk7Cit9CisKKy8vCisvLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMg
dW5hcnkgb3BlcmF0aW9ucyBkb24ndCB3b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6dW5h
cnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBvcGVyYW5kKQorewor
ICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCBvcCwgCisgICAgICAgICAgIm5v
IG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGFuIG9wZXJhbmQgb2YgdHlwZSAlcyAo
b3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9uKSIsCisgICAgICAgICAgb3AsIG9w
ZXJhbmQuY19zdHIoKSk7Cit9CisKKy8vCisvLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBi
aW5hcnkgb3BlcmF0aW9ucyBkb24ndCB3b3JrLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6Ymlu
YXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmlu
ZyByaWdodCkKK3sKKyAgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZXMgIiwgb3As
IAorICAgICAgICAgICAgIm5vIG9wZXJhdGlvbiAnJXMnIGV4aXN0cyB0aGF0IHRha2VzIGEgbGVm
dC1oYW5kIG9wZXJhbmQgb2YgdHlwZSAnJXMnIGFuZCAiCisgICAgICAgICAgICAiYSByaWdodCBv
cGVyYW5kIG9mIHR5cGUgJyVzJyAob3IgdGhlcmUgaXMgbm8gYWNjZXB0YWJsZSBjb252ZXJzaW9u
KSIsIAorICAgICAgICAgICAgb3AsIGxlZnQuY19zdHIoKSwgcmlnaHQuY19zdHIoKSk7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNp
c2lvbiBwcmVjaXNpb24sIFRCYXNpY1R5cGUgdHlwZSl7CisgICAgc3dpdGNoKCB0eXBlICl7Cisg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQg
KXsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCBmb3Ig
KGZsb2F0KSIsICIiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24g
PT0gRWJwVW5kZWZpbmVkICl7CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lv
biBzcGVjaWZpZWQgKGludCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vCisvLyBCb3RoIHRlc3QgYW5kIGlmIG5lY2Vzc2FyeSwgc3BpdCBvdXQgYW4gZXJyb3IsIHRv
IHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGwtdmFsdWUgdGhhdCBjYW4gYmUgb3Bl
cmF0ZWQgb24gdGhpcyB3YXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJy
b3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBjaGFyKiBvcCwgVEludGVybVR5cGVkKiBub2RlKQoreworICAgIFRJbnRlcm1TeW1ib2wq
IHN5bU5vZGUgPSBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5KiBi
aW5hcnlOb2RlID0gbm9kZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICBpZiAoYmluYXJ5Tm9k
ZSkgeworICAgICAgICBib29sIGVycm9yUmV0dXJuOworCisgICAgICAgIHN3aXRjaChiaW5hcnlO
b2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNh
c2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoK
KyAgICAgICAgICAgIHJldHVybiBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2Rl
LT5nZXRMZWZ0KCkpOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgICAg
ICBlcnJvclJldHVybiA9IGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdl
dExlZnQoKSk7CisgICAgICAgICAgICBpZiAoIWVycm9yUmV0dXJuKSB7CisgICAgICAgICAgICAg
ICAgaW50IG9mZnNldFs0XSA9IHswLDAsMCwwfTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogcmlnaHROb2RlID0gYmluYXJ5Tm9kZS0+Z2V0UmlnaHQoKTsKKyAgICAgICAgICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICphZ2dyTm9kZSA9IHJpZ2h0Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IGFnZ3JOb2RlLT5n
ZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gKCpwKS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldFt2YWx1
ZV0rKzsgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0W3ZhbHVlXSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSBvZiBzd2l6emxl
IGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnRzIiwgb3AsICIiLCAiIik7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAKKworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yUmV0dXJuOworICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgY29uc3QgY2hhciogc3lt
Ym9sID0gMDsKKyAgICBpZiAoc3ltTm9kZSAhPSAwKQorICAgICAgICBzeW1ib2wgPSBzeW1Ob2Rl
LT5nZXRTeW1ib2woKS5jX3N0cigpOworCisgICAgY29uc3QgY2hhciogbWVzc2FnZSA9IDA7Cisg
ICAgc3dpdGNoIChub2RlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgIGNhc2UgRXZxQ29uc3Q6ICAg
ICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25z
dCI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0dHJpYnV0ZTogICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBhbiBhdHRyaWJ1dGUiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxVW5pZm9y
bTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB2
YXJ5aW5nIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUlucHV0OiAgICAgICAgICBtZXNzYWdl
ID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJh
Z0Nvb3JkOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJl
YWs7CisgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
Z2xfRnJvbnRGYWNpbmciOyBicmVhazsKKyAgICBjYXNlIEV2cVBvaW50Q29vcmQ6ICAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBnbF9Qb2ludENvb3JkIjsgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/
CisgICAgICAgIC8vCisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIiOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IHZvaWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2Fn
ZSA9PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBv
a2F5LCBubyBlcnJvci4KKyAgICAvLworICAgIGlmIChtZXNzYWdlID09IDApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmUgYW4g
ZXJyb3IgYW5kIGEgbWVzc2FnZS4KKyAgICAvLworICAgIGlmIChzeW1Ob2RlKQorICAgICAgICBl
cnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIlwiJXNcIiAoJXMpIiwgc3ltYm9s
LCBtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1
aXJlZCIsIG9wLCAiKCVzKSIsIG1lc3NhZ2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
CisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNl
ZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGEgY29uc3RhbnQuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdEVy
cm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlKQoreworICAgIGlmIChub2RlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9k
ZS0+Z2V0TGluZSgpLCAiY29uc3RhbnQgZXhwcmVzc2lvbiByZXF1aXJlZCIsICIiLCAiIik7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2Fy
eSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQorLy8gYW4g
aW50ZWdlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwg
Y29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVi
dEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiByZXF1
aXJlZCIsIHRva2VuLCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGgg
dGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHdlIGFy
ZSBjdXJyZW50bHkKKy8vIGdsb2JhbGx5IHNjb3BlZC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6Omdsb2JhbEVycm9yQ2hl
Y2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBpZiAo
Z2xvYmFsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihsaW5lLCAib25seSBh
bGxvd2VkIGF0IGdsb2JhbCBzY29wZSIsIHRva2VuLCAiIik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8KKy8vIEZvciBub3csIGtlZXAgaXQgc2ltcGxlOiAgaWYgaXQgc3RhcnRzICJnbF8i
LCBpdCdzIHJlc2VydmVkLCBpbmRlcGVuZGVudAorLy8gb2Ygc2NvcGUuICBFeGNlcHQsIGlmIHRo
ZSBzeW1ib2wgdGFibGUgaXMgYXQgdGhlIGJ1aWx0LWluIHB1c2gtbGV2ZWwsCisvLyB3aGljaCBp
cyB3aGVuIHdlIGFyZSBwYXJzaW5nIGJ1aWx0LWlucy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJv
ckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIGlmICgh
c3ltYm9sVGFibGUuYXRCdWlsdEluTGV2ZWwoKSkgeworICAgICAgICBpZiAoaWRlbnRpZmllci5z
dWJzdHIoMCwgMykgPT0gVFN0cmluZygiZ2xfIikpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIiwgImdsXyIsICIiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0g
VFN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0
aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVy
LmNfc3RyKCksICIiLCAiIik7CisgICAgICAgICAgICAvL3JldHVybiB0cnVlOworICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZl
IHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8KKy8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggZGF0YSBwcm92aWRlZCB0
byB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQKKy8vIHNvbWV0aGluZyBvZiB0aGUgdHlwZSBvZiB0
aGUgY29uc3RydWN0b3IuICBBbHNvIHJldHVybnMgdGhlIHR5cGUgb2YKKy8vIHRoZSBjb25zdHJ1
Y3Rvci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGNvbnN0
cnVjdGlvbi4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRv
ciBvcCwgVFR5cGUqIHR5cGUpCit7CisgICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBl
KCk7CisKKyAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOworICAgIHN3aXRjaChv
cCkgeworICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1h
dDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjb25zdHJ1Y3RpbmdNYXRy
aXggPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFu
eSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCisgICAg
Ly8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhh
dmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAorICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRy
YSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgorICAgIC8vCisKKyAg
ICBpbnQgc2l6ZSA9IDA7CisgICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOworICAgIGJvb2wgZnVs
bCA9IGZhbHNlOworICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG1hdHJpeElu
TWF0cml4ID0gZmFsc2U7CisgICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgc2l6
ZSArPSBmdW5jdGlvbltpXS50eXBlLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIGZ1bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4KCkp
CisgICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChmdWxsKQor
ICAgICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOworICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3Ry
dWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RT
aXplKCkpCisgICAgICAgICAgICBmdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uW2ld
LnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQorICAgICAgICAgICAgY29uc3RUeXBl
ID0gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlvbltpXS50eXBlLT5pc0FycmF5KCkpCisgICAg
ICAgICAgICBhcnJheUFyZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChjb25zdFR5cGUp
CisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdCk7CisKKyAgICBpZiAodHlw
ZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFt
Q291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMg
b25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9w
Q29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJv
bSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtYXRyaXhJbk1hdHJpeCAmJiAhdHlwZS0+
aXNBcnJheSgpKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgIT0gMSkg
eworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4
IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG92ZXJGdWxsKSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3Ii
LCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0
KCktPnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRo
ZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpKSB7Cisg
ICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXpl
IDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAorICAgICAgICAgICAgKG9wID09IEVPcENvbnN0
cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9u
IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkID0gbm9kZS0+Z2V0QXNUeXBlZCgp
OworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rv
ciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1
Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0Vm9pZCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lk
IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBh
IHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3Nh
Z2UgZm9yIHN1Y2ggYSBjYXNlCisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJy
b3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAg
ICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImls
bGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRo
aXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9u
KSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Npb24gb3Igbm90CisvLworLy8gcmV0
dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmJv
b2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCit7CisgICAg
aWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8
IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0b3IoKSkgeworICAgICAgICBlcnJvcihs
aW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5j
dGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRh
aW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5zIHRy
dWUgaW4gY2FzZSBvZiBhbiBlcnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKK3sKKyAgICBpZiAocFR5
cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5
cGUuc2l6ZSA+IDEpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24g
ZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbikK
K3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYgKGNvbnRh
aW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJl
YXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250
YWlucyBhIHNhbXBsZXIpIik7CisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYg
KElzU2FtcGxlcihwVHlwZS50eXBlKSkgeworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRU
eXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIpOworCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0
OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYg
cFR5cGUpCit7CisgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBU
eXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFB
dHRyaWJ1dGUpICYmCisgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAm
JiBzYW1wbGVyRXJyb3JDaGVjayhsaW5lLCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9y
bSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1
YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIGlmICgocXVhbGlm
aWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIAorICAgICAgICAgICAg
IHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJh
c2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91
dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VD
b250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCit7CisgICAgaWYgKElzU2FtcGxl
cih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgVFR5cGVMaXN0JiBz
dHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBzdHJ1Y3R1cmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChjb250
YWluc1NhbXBsZXIoKnN0cnVjdHVyZVtpXS50eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8v
IERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5IHR5cGUncyBzaXplLgorLy8KKy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojph
cnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6
ZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0SW50KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11
c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCktPmdldElDb25zdCgpOworCisgICAgaWYgKHNpemUgPD0gMCkgeworICAgICAgICBl
cnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAi
Iik7CisgICAgICAgIHNpemUgPSAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJl
IGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8v
Citib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwg
VFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhp
cyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIi
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUucXVhbGlmaWVy
ID09IEV2cUNvbnN0ICYmIGV4dGVuc2lvbkVycm9yQ2hlY2sobGluZSwgIkdMXzNETF9hcnJheV9v
YmplY3RzIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisvLworLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJy
YXlUeXBlRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICAvLwor
ICAgIC8vIENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KKyAgICAvLworICAgIGlmICh0eXBlLmFy
cmF5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJy
YXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8v
IERvIGFsbCB0aGUgc2VtYW50aWMgY2hlY2tpbmcgZm9yIGRlY2xhcmluZyBhbiBhcnJheSwgd2l0
aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6ZSwgYW5kIG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8g
dGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBzaXplID09IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNp
emUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCit7CisgICAgLy8K
KyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIgd2Ug
a25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorICAgIC8vIGJlY2F1c2UgcmVzZXJ2
ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8vCisKKyAgICBib29sIGJ1aWx0SW4g
PSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKKyAgICBUU3ltYm9sKiBzeW1i
b2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsK
KyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgeworICAgICAgICBpZiAocmVzZXJ2
ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIs
IFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCisgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisKKyAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAg
IGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJP
UiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
ISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInZhcmlh
YmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZh
cmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkg
YXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2Yg
YXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEgdmFyaWFibGUt
PmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUi
LCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlv
blR5cGUoKTsKKyAgICAgICAgd2hpbGUgKHQgIT0gMCkgeworICAgICAgICAgICAgaWYgKHQtPmdl
dE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKKyAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5Iiwg
aWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUp
OworICAgICAgICAgICAgdCA9IHQtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisgICAgfSAKKworICAgIGlm
ICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJy
YXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwg
Ym9vbCB1cGRhdGVGbGFnLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgYm9vbCBidWlsdEluID0g
ZmFsc2U7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRT
eW1ib2woKSwgJmJ1aWx0SW4pOworICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBlcnJv
cihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFRWYXJpYWJsZSogdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOworCisgICAgdHlwZS0+c2V0
QXJyYXlJbmZvcm1hdGlvblR5cGUodmFyaWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkp
OworICAgIHZhcmlhYmxlLT51cGRhdGVBcnJheUluZm9ybWF0aW9uVHlwZSh0eXBlKTsKKworICAg
IC8vIHNwZWNpYWwgY2FzaW5nIHRvIHRlc3QgaW5kZXggdmFsdWUgb2YgZ2xfRnJhZ0RhdGEuIElm
IHRoZSBhY2Nlc3NlZCBpbmRleCBpcyA+PSBnbF9NYXhEcmF3QnVmZmVycworICAgIC8vIGl0cyBh
biBlcnJvcgorICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RhdGEiKSB7Cisg
ICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3ltYm9sVGFibGUuZmluZCgiZ2xfTWF4RHJhd0J1
ZmZlcnMiLCAmYnVpbHRJbik7CisgICAgICAgIGlmIChmcmFnRGF0YSA9PSAwKSB7CisgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJnbF9NYXhE
cmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBpbnQgZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0Q29uc3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7Cisg
ICAgICAgIGlmIChmcmFnRGF0YVZhbHVlIDw9IHNpemUpIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUg
b2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHdlIGRvbnQgd2FudCB0byB1cGRhdGUgdGhl
IG1heEFycmF5U2l6ZSB3aGVuIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCB3ZSBqdXN0IHdhbnQgdG8g
aW5jbHVkZSB0aGlzIAorICAgIC8vIG5vZGUgdHlwZSBpbiB0aGUgY2hhaW4gb2Ygbm9kZSB0eXBl
cyBzbyB0aGF0IGl0cyB1cGRhdGVkIHdoZW4gYSBoaWdoZXIgbWF4QXJyYXlTaXplIGNvbWVzIGlu
LgorICAgIGlmICghdXBkYXRlRmxhZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6
ZSsrOworICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0TWF4QXJyYXlTaXplKHNpemUpOworICAg
IHR5cGUtPnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICBUVHlwZSogdHQgPSB0eXBlOworCisg
ICAgd2hpbGUodHQtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgIT0gMCkgeworICAgICAgICB0
dCA9IHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpOworICAgICAgICB0dC0+c2V0TWF4QXJy
YXlTaXplKHNpemUpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVu
Zm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVi
bGljVHlwZSYgdHlwZSkKK3sKKyAgICAvLworICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtl
IHNlbnNlLgorICAgIC8vCisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSB7Cisg
ICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9yYXJ5OworICAgICAgICBlcnJvcihsaW5l
LCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBpbml0aWFsaXplZCIs
IGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBEbyBzZW1hbnRpYyBjaGVja2luZyBmb3Ig
YSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBubyBpbml0aWFsaXplciwKKy8vIGFuZCB1
cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2Fz
IGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50
IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKQoreworICAgIGlm
IChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAgICAgIHJlY292ZXIo
KTsKKworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVy
LCBUVHlwZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxl
KSkgeworICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZp
ZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sg
ICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVt
cG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24g
ZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKKyAgICAgICAgZXJyb3IobGluZSwgInF1
YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
LCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkKKyAgICAgICAgdHlw
ZS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOworICAgIGVsc2UKKyAgICAgICAg
dHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBjaGFyKiBleHRlbnNpb24pCit7ICAgICAgIAorICAgIGlmIChleHRlbnNpb25CZWhh
dmlvcltleHRlbnNpb25dID09IEVCaFdhcm4pIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhXYXJuaW5nLCAoImV4dGVuc2lvbiAiICsgVFN0cmluZyhleHRlbnNpb24pICsg
IiBpcyBiZWluZyB1c2VkIikuY19zdHIoKSwgbGluZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKGV4dGVuc2lvbkJlaGF2aW9yW2V4dGVuc2lvbl0gPT0gRUJoRGlzYWJs
ZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLCAiaXMgZGlz
YWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBOb24tRXJyb3JzLgorLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gTG9vayB1cCBhIGZ1bmN0aW9uIG5h
bWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgor
Ly8KKy8vIFJldHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4K
Ky8vCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGlu
ZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQoreworICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVpbHRJ
bik7CisKKyAgICBpZiAoc3ltYm9sID09IDApIHsgICAgICAgIAorICAgICAgICBlcnJvcihsaW5l
LCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghIHN5
bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1l
IGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIGNvbnN0IFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNf
Y2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOworICAgIAorICAgIHJldHVybiBmdW5jdGlv
bjsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGlu
IHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCisvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhl
cmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxv
YyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXpl
ciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAg
IFRUeXBlIHR5cGUgPSBUVHlwZShwVHlwZSk7CisKKyAgICBpZiAodmFyaWFibGUgPT0gMCkgewor
ICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlk
ZW50aWZpZXIsIHBUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8v
CisgICAgICAgIC8vIGFkZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKKyAgICAgICAgLy8KKyAg
ICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKKyAgICAg
ICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRl
IHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKKyAg
ICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNvbnN0
YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkKKyAgICAvLworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICBpZiAoKHF1
YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAo
cXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBp
bml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgLy8KKyAgICAvLyB0ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8KKwor
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAh
PSBpbml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFy
aWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IGlu
aXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1h
dGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKKyAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluaXRpYWxpemVy
LT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24qIHVu
aW9uQXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CisKKyAgICAgICAgICAgIGlm
ICh0eXBlLmdldE9iamVjdFNpemUoKSA9PSAxICYmIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
U3RydWN0KSB7CisgICAgICAgICAgICAgICAgKnVuaW9uQXJyYXkgPSAoaW5pdGlhbGl6ZXItPmdl
dEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKVswXTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVy
KGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFz
U3ltYm9sTm9kZSgpKSB7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkp
OworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VFZhcmlhYmxlKj4oc3ltYm9sKTsKKworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RB
cnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgdmFyaWFibGUtPnNo
YXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAocXVhbGlmaWVy
ICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5n
ZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBpbnRlcm1Ob2Rl
ID0gaW50ZXJtZWRpYXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGlu
aXRpYWxpemVyLCBsaW5lKTsKKyAgICAgICAgaWYgKGludGVybU5vZGUgPT0gMCkgeworICAgICAg
ICAgICAgYXNzaWduRXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3Ry
aW5nKCksIGluaXRpYWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICBpbnRlcm1Ob2RlID0g
MDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxD
aGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQoreworICAgIGlmICghYWdnck5v
ZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBh
bGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVz
IGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8v
IHRoZSBwYXJlbnQgbm9kZQorICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmNoaWxkU2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7Cisg
ICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gY2hpbGRTZXF1ZW5jZVZl
Y3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0g
Y2hpbGRTZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICBpZiAoISgqcCkt
PmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFsbENvbnN0YW50Owor
fQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNz
IG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
cworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBp
cyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBv
ciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3Iu
CisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJt
Tm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBm
bkNhbGwsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNB
Z2dyZWdhdGUoKTsKKyAgICAKKyAgICBUVHlwZUxpc3Q6Oml0ZXJhdG9yIG1lbWJlclR5cGVzOwor
ICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgIG1lbWJlclR5cGVzID0g
dHlwZS0+Z2V0U3RydWN0KCktPmJlZ2luKCk7CisgICAgCisgICAgVFR5cGUgZWxlbWVudFR5cGUg
PSAqdHlwZTsKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICBlbGVtZW50VHlwZS5j
bGVhckFycmF5bmVzcygpOworCisgICAgYm9vbCBzaW5nbGVBcmc7CisgICAgaWYgKGFnZ3JOb2Rl
KSB7CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1
ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7CisgICAgfSBl
bHNlCisgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld05v
ZGU7CisgICAgaWYgKHNpbmdsZUFyZykgeworICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3Ry
dWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkIAorICAgICAgICAvLyBm
b3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNh
bGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9uIG9uY2UuCisgICAgICAgIGlmICh0eXBlLT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVt
ZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG9w
ID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBlcykudHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxz
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdElu
KHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBpZiAo
bmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1
Y3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8v
IEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAm
c2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0
aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAg
ICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUg
cGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisg
ICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0
b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZvciBl
YWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRo
ZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJp
Z2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJl
IGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5v
IGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6
aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291
bnQrKykgeworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9k
ZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUt
PmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIChtZW1iZXJU
eXBlc1twYXJhbUNvdW50XSkudHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRy
dWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJ
bih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAgKnAgPSBuZXdOb2RlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRB
Z2dyZWdhdGVPcGVyYXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCog
Y29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRB
c0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAg
IHJldHVybiBjb25zdENvbnN0cnVjdG9yOworCisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQor
CitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBib29sIGNh
bkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7CisgICAgYWdnck5vZGUtPnNl
dFR5cGUodHlwZSk7CisgICAgaWYgKGNhbkJlRm9sZGVkKSB7CisgICAgICAgIGJvb2wgcmV0dXJu
VmFsID0gZmFsc2U7CisgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07CisgICAgICAgIGlmIChhZ2dyTm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGlu
dGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwg
dW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRl
cm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVu
aW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOworICAgICAg
ICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlw
ZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8v
IEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlN
YXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCisvLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0
aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0
IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1
Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAorLy8gZmxv
YXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KKy8vCisvLyBSZXR1cm5zIDAgZm9y
IGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVFBh
cnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sK
KyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9yIGJhc2ljT3A7CisKKyAg
ICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KKyAgICAvLworICAg
IHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBiYXNpY09w
ID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIsICIiKTsKKyAgICAg
ICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBuZXdOb2RlID0g
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCks
IHN5bWJvbFRhYmxlKTsKKyAgICBpZiAobmV3Tm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4g
b3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9u
ZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCisgICAg
aWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAq
dHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVnYXRlT3Bl
cmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVk
ZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2Rl
LCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9m
IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCisv
LyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRo
ZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5k
IHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCisvLworVEludGVybVR5cGVkKiBUUGFy
c2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBl
LCBpbnQgcGFyYW1Db3VudCwgVFNvdXJjZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sKKyAgICBp
ZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgaWYg
KHN1YnNldCkKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRBc1R5cGVkKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCAiY2Fubm90IGNv
bnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcGFyYW1Db3VudCwKKyAgICAg
ICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygp
LCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVl
IHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVjdG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZy
b20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBvbmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlz
IGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVyZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVu
IGEgY29udGFudCBub2RlIGlzCisvLyByZXR1cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBp
cyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBl
aXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9kZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRp
YXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50
IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisvLyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50
ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRz
JiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJ
bnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29u
c3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgIHVu
aW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisg
ICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBu
ZXZlciBiZSByYWlzZWQKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGluaXRpYWxpemVkIGluIGFkZENvbnN0
VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOworICAgICAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIFRoZSBu
b2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBv
ciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIiwgIiIpOworICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ29uc3Rh
bnRVbmlvbiogY29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGZp
ZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkpIHsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91
dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOworICAgICAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tp
XV07CisKKyAgICB9IAorICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKGNvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgcmV0dXJuIHR5cGVk
Tm9kZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5n
IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZl
ZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBh
IHZlY3RvciAoZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQg
CisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0g
d2hlcmUgbSBpcyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNvbnN0
YW50IG1hdHJpeCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUg
Y29uc3RhbnQgbWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUp
CisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50
IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0
YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKGluZGV4ID49
IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICIiLCAiWyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5k
ZXgpOworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAg
ICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25B
cnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAg
ICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
OworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVu
aW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLworLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJv
bSBhIGNvbnN0YW50IGFycmF5LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhl
IHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhl
IGVsZW1lbnQuIFRoZSBpbnB1dCAKKy8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUg
YSBzeW1ib2wgbm9kZSAoYVswXSB3aGVyZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXBy
ZXNlbnRzIGEgCisvLyBjb25zdGFudCBhcnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNv
bnN0YW50IHN0cnVjdHVyZSkKKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAg
ICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxl
bWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRU
eXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFy
cmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBpbmRleCA9IDA7CisgICAgfQorCisgICAgaW50IGFycmF5RWxl
bWVudFNpemUgPSBhcnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNpemUoKTsKKworICAgIGlmICh0
ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0g
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVk
Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxl
bWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUg
YXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUg
YSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAKKy8vIElmIHRoZXJl
IGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRk
Q29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdncgorLy8gZnVuY3Rpb24g
YW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRl
ZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNl
TG9jIGxpbmUpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CisgICAgVEludGVybVR5cGVkICp0eXBlZE5vZGU7CisgICAgaW50IGluc3RhbmNl
U2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
CisgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy0+c2l6ZSgpOyArK2luZGV4KSB7
CisgICAgICAgIGlmICgoKmZpZWxkcylbaW5kZXhdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09IGlk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaW5zdGFuY2VTaXplICs9ICgqZmllbGRzKVtpbmRleF0udHlwZS0+Z2V0T2JqZWN0U2l6
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAg
ICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9k
ZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxp
bmcgZnVuY3Rpb24KKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9m
ZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292ZXIo
KTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOwor
fQorCisvLworLy8gSW5pdGlhbGl6ZSBhbGwgc3VwcG9ydGVkIGV4dGVuc2lvbnMgdG8gZGlzYWJs
ZQorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6aW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCkK
K3sKKyAgICAvLworICAgIC8vIGV4YW1wbGUgY29kZTogZXh0ZW5zaW9uQmVoYXZpb3JbInRlc3Qi
XSA9IEVCaERpc2FibGU7IC8vIHdoZXJlICJ0ZXN0IiBpcyB0aGUgbmFtZSBvZiAKKyAgICAvLyBz
dXBwb3J0ZWQgZXh0ZW5zaW9uCisgICAgLy8KKyAgICBleHRlbnNpb25CZWhhdmlvclsiR0xfQVJC
X3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhSZXF1aXJlOworICAgIGV4dGVuc2lvbkJlaGF2aW9y
WyJHTF8zRExfYXJyYXlfb2JqZWN0cyJdID0gRUJoRGlzYWJsZTsKK30KKworT1NfVExTSW5kZXgg
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJ
bml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRl
eHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAi
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0
YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJ
bml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRh
bGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlmIChH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAg
ICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250
ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0
PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFk
eSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhy
ZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgp
OworICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJz
ZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRocmVh
ZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAg
ICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKwor
ICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRo
cmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRl
eCkpOworCisgICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsK
K30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYg
IkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4
dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9T
X0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VD
b250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4
IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBh
cnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2Vy
dCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3Qg
aW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBP
U19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Q
YXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBf
UEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURf
CisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5
bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKwor
c3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVSb3c7CisgICAgYm9vbCB3aG9s
ZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9OworCit0eXBlZGVmIGVudW0gewor
ICAgIEVCaFJlcXVpcmUsCisgICAgRUJoRW5hYmxlLAorICAgIEVCaFdhcm4sCisgICAgRUJoRGlz
YWJsZQorfSBUQmVoYXZpb3I7CisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICBUUHJhZ21hKGJvb2wg
bywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKyAgICBib29sIG9wdGltaXpl
OworICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdtYVRhYmxlIHByYWdtYVRhYmxlOworfTsKKwor
Ly8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxlcyBuZWVkZWQgZHVyaW5nIHBh
cnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KKy8vIHRoZXkgY2FuIGJlIHBhc3NlZCB0byB0aGUg
cGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KKy8vCitzdHJ1Y3QgVFBhcnNlQ29udGV4
dCB7CisgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRJbnRlcm1lZGlhdGUm
IGludGVybSwgRVNoTGFuZ3VhZ2UgTCwgVEluZm9TaW5rJiBpcykgOgorICAgICAgICAgICAgaW50
ZXJtZWRpYXRlKGludGVybSksIHN5bWJvbFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1
YWdlKEwpLCB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAgIHJlY292ZXJlZEZyb21FcnJvcihmYWxz
ZSksIG51bUVycm9ycygwKSwgbGV4QWZ0ZXJUeXBlKGZhbHNlKSwgbG9vcE5lc3RpbmdMZXZlbCgw
KSwKKyAgICAgICAgICAgIGluVHlwZVBhcmVuKGZhbHNlKSwgY29udGV4dFByYWdtYSh0cnVlLCBm
YWxzZSkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBh
bmQgYnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAv
LyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWlu
ZyBwYXJzZWQKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIEVTaExhbmd1YWdlIGxhbmd1
YWdlOyAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sg
b3IgdW5wYWNrKQorICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBw
YXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBib29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAg
IC8vIHRydWUgaWYgYSBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0
byBwYXJzZQorICAgIGludCBudW1FcnJvcnM7CisgICAgYm9vbCBsZXhBZnRlclR5cGU7ICAgICAg
ICAgICAvLyB0cnVlIGlmIHdlJ3ZlIHJlY29nbml6ZWQgYSB0eXBlLCBzbyBjYW4gb25seSBiZSBs
b29raW5nIGZvciBhbiBpZGVudGlmaWVyCisgICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAg
ICAvLyAwIGlmIG91dHNpZGUgYWxsIGxvb3BzCisgICAgYm9vbCBpblR5cGVQYXJlbjsgICAgICAg
ICAgICAvLyB0cnVlIGlmIGluIHBhcmVudGhlc2VzLCBsb29raW5nIG9ubHkgZm9yIGFuIGlkZW50
aWZpZXIKKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8vIHRoZSByZXR1
cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAg
ICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5j
dGlvbiBoYXMgYSByZXR1cm4KKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj4gZXh0ZW5zaW9u
QmVoYXZpb3I7CisgICAgdm9pZCBpbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKworICAg
IHZvaWQgQ19ERUNMIGVycm9yKFRTb3VyY2VMb2MsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25z
dCBjaGFyICpzelRva2VuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN6RXh0
cmFJbmZvRm9ybWF0LCAuLi4pOworICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlY292ZXIoKTsKKworICAg
IGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVj
dG9yRmllbGRzJiwgaW50IGxpbmUpOworICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3Qg
VFN0cmluZyYsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiwgaW50IGxpbmUpOworICAgIHZv
aWQgYXNzaWduRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRT
dHJpbmcgcmlnaHQpOworICAgIHZvaWQgdW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVFN0cmluZyBvcGVyYW5kKTsKKyAgICB2b2lkIGJpbmFyeU9wRXJyb3IoaW50IGxpbmUs
IGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpOworICAgIGJvb2wg
cHJlY2lzaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgVFByZWNpc2lvbiBwcmVjaXNpb24sIFRCYXNp
Y1R5cGUgdHlwZSk7CisgICAgYm9vbCBsVmFsdWVFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBj
aGFyKiBvcCwgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBjb25zdEVycm9yQ2hlY2soVEludGVy
bVR5cGVkKiBub2RlKTsKKyAgICBib29sIGludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgZ2xvYmFsRXJyb3JDaGVjayhpbnQg
bGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGNvbnN0cnVj
dG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqLCBURnVuY3Rpb24mLCBUT3BlcmF0
b3IsIFRUeXBlKik7CisgICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50
ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7CisgICAgYm9vbCBhcnJheVF1YWxpZmllckVycm9y
Q2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJyYXlUeXBlRXJy
b3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7CisgICAgYm9vbCBhcnJheUVycm9y
Q2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRW
YXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIHZvaWRFcnJvckNoZWNrKGludCwgY29uc3Qg
VFN0cmluZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBib29sRXJyb3JDaGVjayhp
bnQsIGNvbnN0IFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soaW50LCBj
b25zdCBUUHVibGljVHlwZSYpOworICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKKyAgICBib29s
IHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSk7CisgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1
YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBib29sIGNvbnRhaW5z
U2FtcGxlcihUVHlwZSYgdHlwZSk7CisgICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGlu
dCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7CisgICAgYm9v
bCBub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUmIHR5cGUpOworICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlm
aWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwor
ICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciopOworICAg
IGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGludCBsaW5lLCBURnVuY3Rpb24qIHBmbkNh
bGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKKyAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihUU291
cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50
ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwKTsKKyAgICBib29s
IGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOworICAgIFRJbnRl
cm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBjb25zdCBUVHlwZSosIFRPcGVy
YXRvciwgVEZ1bmN0aW9uKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBmb2xkQ29u
c3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5
cGUpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5
cGUqLCBpbnQsIFRTb3VyY2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50ZXJtVHlwZWQqIGNv
bnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRJbnRlcm1Ob2RlKiwgVFNv
dXJjZUxvYywgYm9vbCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JO
b2RlKFRWZWN0b3JGaWVsZHMmLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVElu
dGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCogYWRk
Q29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBi
b29sIGFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sKiwgVFR5cGUqLCBpbnQsIGJvb2wsIFRT
b3VyY2VMb2MpOworICAgIHN0cnVjdCBUUHJhZ21hIGNvbnRleHRQcmFnbWE7CisgICAgVFN0cmlu
ZyBIYXNoRXJyTXNnOworICAgIGJvb2wgQWZ0ZXJFT0Y7Cit9OworCitpbnQgUGFQYXJzZVN0cmlu
Z3MoY2hhciogYXJndltdLCBpbnQgc3RyTGVuW10sIGludCBhcmdjLCBUUGFyc2VDb250ZXh0Jik7
Cit2b2lkIFBhUmVzZXJ2ZWRXb3JkKCk7CitpbnQgUGFJZGVudE9yVHlwZShUU3RyaW5nJiBpZCwg
VFBhcnNlQ29udGV4dCYsIFRTeW1ib2wqJik7CitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5l
bm8sIFRQYXJzZUNvbnRleHQmKTsKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCk7CisKK3R5cGVkZWYg
VFBhcnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7CitleHRlcm4gVFBhcnNlQ29udGV4
dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworI2RlZmluZSBHbG9iYWxQYXJzZUNv
bnRleHQgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKKwordHlwZWRlZiBzdHJ1Y3QgVFRocmVhZFBh
cnNlQ29udGV4dFJlYworeworICAgIFRQYXJzZUNvbnRleHQgKmxwR2xvYmFsUGFyc2VDb250ZXh0
OworfSBUVGhyZWFkUGFyc2VDb250ZXh0OworCisjZW5kaWYgLy8gX1BBUlNFUl9IRUxQRVJfSU5D
TFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMx
OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5o
IgorCisjaWZuZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworT1NfVExTSW5kZXggUG9vbEluZGV4
ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK3ZvaWQgSW5pdGlhbGl6ZUdsb2JhbFBvb2xzKCkK
K3sKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIGdsb2JhbFBvb2xzPSBzdGF0aWNfY2FzdDxUVGhy
ZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsgICAgCisgICAgaWYg
KGdsb2JhbFBvb2xzKQorICAgICAgICByZXR1cm47CisKKyAgICBUUG9vbEFsbG9jYXRvciAqZ2xv
YmFsUG9vbEFsbG9jYXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKKworICAgIFRUaHJl
YWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkR2xvYmFsUG9vbHMoKTsKKyAg
ICAKKyAgICB0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0gZ2xvYmFsUG9vbEFsbG9j
YXRvcjsKKyAgICAgICAgCisgICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCB0aHJlYWREYXRh
KTsgICAgIAorICAgIGdsb2JhbFBvb2xBbGxvY2F0b3ItPnB1c2goKTsKK30KKwordm9pZCBGcmVl
R2xvYmFsUG9vbHMoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9y
IHRoaXMgdGhyZWFkLgorICAgIFRUaHJlYWRHbG9iYWxQb29scyogZ2xvYmFsUG9vbHM9IHN0YXRp
Y19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOyAg
ICAKKyAgICBpZiAoIWdsb2JhbFBvb2xzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgR2xv
YmFsUG9vbEFsbG9jYXRvci5wb3BBbGwoKTsKKyAgICBkZWxldGUgJkdsb2JhbFBvb2xBbGxvY2F0
b3I7ICAgICAgIAorICAgIGRlbGV0ZSBnbG9iYWxQb29sczsKK30KKworYm9vbCBJbml0aWFsaXpl
UG9vbEluZGV4KCkKK3sKKyAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KKyAgICBpZiAoKFBv
b2xJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKSkgPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZyZWVQ
b29sSW5kZXgoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFRMUyBpbmRleC4KKyAgICBPU19GcmVl
VExTSW5kZXgoUG9vbEluZGV4KTsKK30KKworVFBvb2xBbGxvY2F0b3ImIEdldEdsb2JhbFBvb2xB
bGxvY2F0b3IoKQoreworICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IHN0YXRp
Y19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOwor
CisgICAgcmV0dXJuICp0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yOworfQorCit2b2lk
IFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3Ip
Cit7CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWREYXRhID0gc3RhdGljX2Nhc3Q8VFRo
cmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7CisKKyAgICB0aHJl
YWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0gcG9vbEFsbG9jYXRvcjsKK30KKworLy8KKy8v
IEltcGxlbWVudCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVFBvb2xBbGxvY2F0b3IgY2xhc3Ms
IHdoaWNoCisvLyBpcyBkb2N1bWVudGVkIGluIFBvb2xBbGxvYy5oLgorLy8KK1RQb29sQWxsb2Nh
dG9yOjpUUG9vbEFsbG9jYXRvcihib29sIGcsIGludCBncm93dGhJbmNyZW1lbnQsIGludCBhbGxv
Y2F0aW9uQWxpZ25tZW50KSA6IAorICAgIGdsb2JhbChnKSwKKyAgICBwYWdlU2l6ZShncm93dGhJ
bmNyZW1lbnQpLAorICAgIGFsaWdubWVudChhbGxvY2F0aW9uQWxpZ25tZW50KSwKKyAgICBmcmVl
TGlzdCgwKSwKKyAgICBpblVzZUxpc3QoMCksCisgICAgbnVtQ2FsbHMoMCkKK3sKKyAgICAvLwor
ICAgIC8vIERvbid0IGFsbG93IHBhZ2Ugc2l6ZXMgd2Uga25vdyBhcmUgc21hbGxlciB0aGFuIGFs
bCBjb21tb24KKyAgICAvLyBPUyBwYWdlIHNpemVzLgorICAgIC8vCisgICAgaWYgKHBhZ2VTaXpl
IDwgNCoxMDI0KQorICAgICAgICBwYWdlU2l6ZSA9IDQqMTAyNDsKKworICAgIC8vCisgICAgLy8g
QSBsYXJnZSBjdXJyZW50UGFnZU9mZnNldCBpbmRpY2F0ZXMgYSBuZXcgcGFnZSBuZWVkcyB0bwor
ICAgIC8vIGJlIG9idGFpbmVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAgICAvLworICAgIGN1cnJl
bnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7CisKKyAgICAvLworICAgIC8vIEFkanVzdCBhbGlnbm1l
bnQgdG8gYmUgYXQgbGVhc3QgcG9pbnRlciBhbGlnbmVkIGFuZAorICAgIC8vIHBvd2VyIG9mIDIu
CisgICAgLy8KKyAgICBzaXplX3QgbWluQWxpZ24gPSBzaXplb2Yodm9pZCopOworICAgIGFsaWdu
bWVudCAmPSB+KG1pbkFsaWduIC0gMSk7CisgICAgaWYgKGFsaWdubWVudCA8IG1pbkFsaWduKQor
ICAgICAgICBhbGlnbm1lbnQgPSBtaW5BbGlnbjsKKyAgICBzaXplX3QgYSA9IDE7CisgICAgd2hp
bGUgKGEgPCBhbGlnbm1lbnQpCisgICAgICAgIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsK
KyAgICBhbGlnbm1lbnRNYXNrID0gYSAtIDE7CisKKyAgICAvLworICAgIC8vIEFsaWduIGhlYWRl
ciBza2lwCisgICAgLy8KKyAgICBoZWFkZXJTa2lwID0gbWluQWxpZ247CisgICAgaWYgKGhlYWRl
clNraXAgPCBzaXplb2YodEhlYWRlcikpIHsKKyAgICAgICAgaGVhZGVyU2tpcCA9IChzaXplb2Yo
dEhlYWRlcikgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworICAgIH0KK30KKwor
VFBvb2xBbGxvY2F0b3I6On5UUG9vbEFsbG9jYXRvcigpCit7CisgICAgaWYgKCFnbG9iYWwpIHsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlbiB3ZSBrbm93IHRoYXQgdGhpcyBvYmplY3QgaXMg
bm90IGJlaW5nIAorICAgICAgICAvLyBhbGxvY2F0ZWQgYWZ0ZXIgb3RoZXIsIGdsb2JhbGx5IHNj
b3BlZCBvYmplY3RzCisgICAgICAgIC8vIHRoYXQgZGVwZW5kIG9uIGl0LiAgU28gd2UgY2FuIGRl
bGV0ZSB0aGUgImluIHVzZSIgbWVtb3J5LgorICAgICAgICAvLworICAgICAgICB3aGlsZSAoaW5V
c2VMaXN0KSB7CisgICAgICAgICAgICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFn
ZTsKKyAgICAgICAgICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKKyAgICAgICAgICAgIGRlbGV0
ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAgICAgICAgaW5V
c2VMaXN0ID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gQWx3YXlz
IGRlbGV0ZSB0aGUgZnJlZSBsaXN0IG1lbW9yeSAtIGl0IGNhbid0IGJlIGJlaW5nCisgICAgLy8g
KGNvcnJlY3RseSkgcmVmZXJlbmNlZCwgd2hldGhlciB0aGUgcG9vbCBhbGxvY2F0b3Igd2FzCisg
ICAgLy8gZ2xvYmFsIG9yIG5vdC4gIFdlIHNob3VsZCBub3QgY2hlY2sgdGhlIGd1YXJkIGJsb2Nr
cworICAgIC8vIGhlcmUsIGJlY2F1c2Ugd2UgZGlkIGl0IGFscmVhZHkgd2hlbiB0aGUgYmxvY2sg
d2FzCisgICAgLy8gcGxhY2VkIGludG8gdGhlIGZyZWUgbGlzdC4KKyAgICAvLworICAgIHdoaWxl
IChmcmVlTGlzdCkgeworICAgICAgICB0SGVhZGVyKiBuZXh0ID0gZnJlZUxpc3QtPm5leHRQYWdl
OworICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZUxpc3QpOwor
ICAgICAgICBmcmVlTGlzdCA9IG5leHQ7CisgICAgfQorfQorCisvLyBTdXBwb3J0IE1TVkMrKyA2
LjAKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tCZWdpblZhbCA9
IDB4ZmI7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrRW5kVmFs
ICAgPSAweGZlOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6dXNlckRhdGFGaWxs
ICAgICAgID0gMHhjZDsKKworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgIGNvbnN0IHNpemVfdCBU
QWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAxNjsKKyNlbHNlCisgICAgY29uc3Qgc2l6ZV90
IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDA7CisjZW5kaWYKKworLy8KKy8vIENoZWNr
IGEgc2luZ2xlIGd1YXJkIGJsb2NrIGZvciBkYW1hZ2UKKy8vCit2b2lkIFRBbGxvY2F0aW9uOjpj
aGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hhciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFs
LCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IHggPSAwOyB4
IDwgZ3VhcmRCbG9ja1NpemU7IHgrKykgeworICAgICAgICBpZiAoYmxvY2tNZW1beF0gIT0gdmFs
KSB7CisgICAgICAgICAgICBjaGFyIGFzc2VydE1zZ1s4MF07CisKKyAgICAgICAgICAgIC8vIFdl
IGRvbid0IHByaW50IHRoZSBhc3NlcnQgbWVzc2FnZS4gIEl0J3MgaGVyZSBqdXN0IHRvIGJlIGhl
bHBmdWwuCisgICAgICAgICAgICBzcHJpbnRmKGFzc2VydE1zZywgIlBvb2xBbGxvYzogRGFtYWdl
ICVzICV1IGJ5dGUgYWxsb2NhdGlvbiBhdCAweCVwXG4iLAorICAgICAgICAgICAgICAgICAgICBs
b2NUZXh0LCBzaXplLCBkYXRhKCkpOworICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIlBvb2xBbGxv
YzogRGFtYWdlIGluIGd1YXJkIGJsb2NrIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwordm9p
ZCBUUG9vbEFsbG9jYXRvcjo6cHVzaCgpCit7CisgICAgdEFsbG9jU3RhdGUgc3RhdGUgPSB7IGN1
cnJlbnRQYWdlT2Zmc2V0LCBpblVzZUxpc3QgfTsKKworICAgIHN0YWNrLnB1c2hfYmFjayhzdGF0
ZSk7CisgICAgICAgIAorICAgIC8vCisgICAgLy8gSW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVu
dCBwYWdlIHRvIGFsbG9jYXRlIGZyb20uCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9
IHBhZ2VTaXplOworfQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhl
IGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUg
bGFzdCBwdXNoKCksIG9yIHNpbmNlIHRoZQorLy8gbGFzdCBwb3AoKSwgb3Igc2luY2UgdGhlIG9i
amVjdCdzIGNyZWF0aW9uLgorLy8KKy8vIFRoZSBkZWFsbG9jYXRlZCBwYWdlcyBhcmUgc2F2ZWQg
Zm9yIGZ1dHVyZSBhbGxvY2F0aW9ucy4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3AoKQor
eworICAgIGlmIChzdGFjay5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm47CisKKyAgICB0SGVh
ZGVyKiBwYWdlID0gc3RhY2suYmFjaygpLnBhZ2U7CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBz
dGFjay5iYWNrKCkub2Zmc2V0OworCisgICAgd2hpbGUgKGluVXNlTGlzdCAhPSBwYWdlKSB7Cisg
ICAgICAgIC8vIGludm9rZSBkZXN0cnVjdG9yIHRvIGZyZWUgYWxsb2NhdGlvbiBsaXN0CisgICAg
ICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKKyAgICAgICAgCisgICAgICAgIHRIZWFkZXIqIG5l
eHRJblVzZSA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGlmIChpblVzZUxpc3QtPnBh
Z2VDb3VudCA+IDEpCisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oaW5Vc2VMaXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpblVzZUxpc3QtPm5l
eHRQYWdlID0gZnJlZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9IGluVXNlTGlzdDsKKyAg
ICAgICAgfQorICAgICAgICBpblVzZUxpc3QgPSBuZXh0SW5Vc2U7CisgICAgfQorCisgICAgc3Rh
Y2sucG9wX2JhY2soKTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxs
IHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuCisvLwor
dm9pZCBUUG9vbEFsbG9jYXRvcjo6cG9wQWxsKCkKK3sKKyAgICB3aGlsZSAoc3RhY2suc2l6ZSgp
ID4gMCkKKyAgICAgICAgcG9wKCk7Cit9CisKK3ZvaWQqIFRQb29sQWxsb2NhdG9yOjphbGxvY2F0
ZShzaXplX3QgbnVtQnl0ZXMpCit7CisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGd1YXJkIGJsb2Nr
cywgYWxsIGFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQgYnkKKyAgICAvLyB0aGVtOiBbZ3VhcmRi
bG9ja11bYWxsb2NhdGlvbl1bZ3VhcmRibG9ja10uICBudW1CeXRlcyBpcyBob3cKKyAgICAvLyBt
dWNoIG1lbW9yeSB0aGUgY2FsbGVyIGFza2VkIGZvci4gIGFsbG9jYXRpb25TaXplIGlzIHRoZSB0
b3RhbAorICAgIC8vIHNpemUgaW5jbHVkaW5nIGd1YXJkIGJsb2Nrcy4gIEluIHJlbGVhc2UgYnVp
bGQsCisgICAgLy8gZ3VhcmRCbG9ja1NpemU9MCBhbmQgdGhpcyBhbGwgZ2V0cyBvcHRpbWl6ZWQg
YXdheS4KKyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBUQWxsb2NhdGlvbjo6YWxsb2NhdGlv
blNpemUobnVtQnl0ZXMpOworICAgIAorICAgIC8vCisgICAgLy8gSnVzdCBrZWVwIHNvbWUgaW50
ZXJlc3Rpbmcgc3RhdGlzdGljcy4KKyAgICAvLworICAgICsrbnVtQ2FsbHM7CisgICAgdG90YWxC
eXRlcyArPSBudW1CeXRlczsKKworICAgIC8vCisgICAgLy8gRG8gdGhlIGFsbG9jYXRpb24sIG1v
c3QgbGlrZWx5IGNhc2UgZmlyc3QsIGZvciBlZmZpY2llbmN5LgorICAgIC8vIFRoaXMgc3RlcCBj
b3VsZCBiZSBtb3ZlZCB0byBiZSBpbmxpbmUgc29tZXRpbWUuCisgICAgLy8KKyAgICBpZiAoY3Vy
cmVudFBhZ2VPZmZzZXQgKyBhbGxvY2F0aW9uU2l6ZSA8PSBwYWdlU2l6ZSkgeworICAgICAgICAv
LworICAgICAgICAvLyBTYWZlIHRvIGFsbG9jYXRlIGZyb20gY3VycmVudFBhZ2VPZmZzZXQuCisg
ICAgICAgIC8vCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgY3VycmVudFBhZ2VPZmZzZXQ7CisgICAg
ICAgIGN1cnJlbnRQYWdlT2Zmc2V0ICs9IGFsbG9jYXRpb25TaXplOworICAgICAgICBjdXJyZW50
UGFnZU9mZnNldCA9IChjdXJyZW50UGFnZU9mZnNldCArIGFsaWdubWVudE1hc2spICYgfmFsaWdu
bWVudE1hc2s7CisKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlz
dCwgbWVtb3J5LCBudW1CeXRlcyk7CisgICAgfQorCisgICAgaWYgKGFsbG9jYXRpb25TaXplICsg
aGVhZGVyU2tpcCA+IHBhZ2VTaXplKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERvIGEgbXVs
dGktcGFnZSBhbGxvY2F0aW9uLiAgRG9uJ3QgbWl4IHRoZXNlIHdpdGggdGhlIG90aGVycy4KKyAg
ICAgICAgLy8gVGhlIE9TIGlzIGVmZmljaWVudCBhbmQgYWxsb2NhdGluZyBhbmQgZnJlZS1pbmcg
bXVsdGlwbGUgcGFnZXMuCisgICAgICAgIC8vCisgICAgICAgIHNpemVfdCBudW1CeXRlc1RvQWxs
b2MgPSBhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXA7CisgICAgICAgIHRIZWFkZXIqIG1lbW9y
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbbnVtQnl0ZXNUb0FsbG9j
XSk7CisgICAgICAgIGlmIChtZW1vcnkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisg
ICAgICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCisgICAgICAg
IG5ldyhtZW1vcnkpIHRIZWFkZXIoaW5Vc2VMaXN0LCAobnVtQnl0ZXNUb0FsbG9jICsgcGFnZVNp
emUgLSAxKSAvIHBhZ2VTaXplKTsKKyAgICAgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworCisgICAg
ICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7ICAvLyBtYWtlIG5leHQgYWxsb2NhdGlv
biBjb21lIGZyb20gYSBuZXcgcGFnZQorCisgICAgICAgIC8vIE5vIGd1YXJkIGJsb2NrcyBmb3Ig
bXVsdGktcGFnZSBhbGxvY2F0aW9ucyAoeWV0KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1lbW9yeSkgKyBoZWFkZXJT
a2lwKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5lZWQgYSBzaW1wbGUgcGFnZSB0byBhbGxv
Y2F0ZSBmcm9tLgorICAgIC8vCisgICAgdEhlYWRlciogbWVtb3J5OworICAgIGlmIChmcmVlTGlz
dCkgeworICAgICAgICBtZW1vcnkgPSBmcmVlTGlzdDsKKyAgICAgICAgZnJlZUxpc3QgPSBmcmVl
TGlzdC0+bmV4dFBhZ2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtb3J5ID0gcmVpbnRlcnBy
ZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltwYWdlU2l6ZV0pOworICAgICAgICBpZiAobWVt
b3J5ID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBVc2UgcGxh
Y2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRlcgorICAgIG5ldyhtZW1vcnkpIHRIZWFkZXIo
aW5Vc2VMaXN0LCAxKTsKKyAgICBpblVzZUxpc3QgPSBtZW1vcnk7CisgICAgCisgICAgdW5zaWdu
ZWQgY2hhciogcmV0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlz
dCkgKyBoZWFkZXJTa2lwOworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGhlYWRlclNraXAgKyBh
bGxvY2F0aW9uU2l6ZSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisKKyAgICBy
ZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCByZXQsIG51bUJ5dGVzKTsKK30K
KworCisvLworLy8gQ2hlY2sgYWxsIGFsbG9jYXRpb25zIGluIGEgbGlzdCBmb3IgZGFtYWdlIGJ5
IGNhbGxpbmcgY2hlY2sgb24gZWFjaC4KKy8vCit2b2lkIFRBbGxvY2F0aW9uOjpjaGVja0FsbG9j
TGlzdCgpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBUQWxsb2NhdGlvbiogYWxsb2MgPSB0aGlz
OyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5wcmV2QWxsb2MpCisgICAgICAgIGFsbG9jLT5j
aGVjaygpOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1BPT0xBTExPQ19JTkNMVURFRF8KKyNk
ZWZpbmUgX1BPT0xBTExPQ19JTkNMVURFRF8KKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBHVUFS
RF9CTE9DS1MgIC8vIGRlZmluZSB0byBlbmFibGUgZ3VhcmQgYmxvY2sgc2FuaXR5IGNoZWNraW5n
CisjZW5kaWYKKworLy8KKy8vIFRoaXMgaGVhZGVyIGRlZmluZXMgYW4gYWxsb2NhdG9yIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gZWZmaWNpZW50bHkKKy8vIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9m
IHNtYWxsIHJlcXVlc3RzIGZvciBoZWFwIG1lbW9yeSwgd2l0aCB0aGUgCisvLyBpbnRlbnRpb24g
dGhhdCB0aGV5IGFyZSBub3QgaW5kaXZpZHVhbGx5IGRlYWxsb2NhdGVkLCBidXQgcmF0aGVyIAor
Ly8gY29sbGVjdGl2ZWx5IGRlYWxsb2NhdGVkIGF0IG9uZSB0aW1lLgorLy8KKy8vIFRoaXMgc2lt
dWx0YW5lb3VzbHkKKy8vCisvLyAqIE1ha2VzIGVhY2ggaW5kaXZpZHVhbCBhbGxvY2F0aW9uIG11
Y2ggbW9yZSBlZmZpY2llbnQ7IHRoZQorLy8gICAgIHR5cGljYWwgYWxsb2NhdGlvbiBpcyB0cml2
aWFsLgorLy8gKiBDb21wbGV0ZWx5IGF2b2lkcyB0aGUgY29zdCBvZiBkb2luZyBpbmRpdmlkdWFs
IGRlYWxsb2NhdGlvbi4KKy8vICogU2F2ZXMgdGhlIHRyb3VibGUgb2YgdHJhY2tpbmcgZG93biBh
bmQgcGx1Z2dpbmcgYSBsYXJnZSBjbGFzcyBvZiBsZWFrcy4KKy8vCisvLyBJbmRpdmlkdWFsIGNs
YXNzZXMgY2FuIHVzZSB0aGlzIGFsbG9jYXRvciBieSBzdXBwbHlpbmcgdGhlaXIgb3duCisvLyBu
ZXcgYW5kIGRlbGV0ZSBtZXRob2RzLgorLy8KKy8vIFNUTCBjb250YWluZXJzIGNhbiB1c2UgdGhp
cyBhbGxvY2F0b3IgYnkgdXNpbmcgdGhlIHBvb2xfYWxsb2NhdG9yCisvLyBjbGFzcyBhcyB0aGUg
YWxsb2NhdG9yIChzZWNvbmQpIHRlbXBsYXRlIGFyZ3VtZW50LgorLy8KKworI2luY2x1ZGUgPHN0
ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworLy8gSWYg
d2UgYXJlIHVzaW5nIGd1YXJkIGJsb2Nrcywgd2UgbXVzdCB0cmFjayBlYWNoIGluZGl2dWFsCisv
LyBhbGxvY2F0aW9uLiAgSWYgd2UgYXJlbid0IHVzaW5nIGd1YXJkIGJsb2NrcywgdGhlc2UKKy8v
IG5ldmVyIGdldCBpbnN0YW50aWF0ZWQsIHNvIHdvbid0IGhhdmUgYW55IGltcGFjdC4KKy8vIAor
CitjbGFzcyBUQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgVEFsbG9jYXRpb24oc2l6ZV90IHNp
emUsIHVuc2lnbmVkIGNoYXIqIG1lbSwgVEFsbG9jYXRpb24qIHByZXYgPSAwKSA6CisgICAgICAg
IHNpemUoc2l6ZSksIG1lbShtZW0pLCBwcmV2QWxsb2MocHJldikgeworICAgICAgICAvLyBBbGxv
Y2F0aW9ucyBhcmUgYnJhY2tldGVkOgorICAgICAgICAvLyAgICBbYWxsb2NhdGlvbkhlYWRlcl1b
aW5pdGlhbEd1YXJkQmxvY2tdW3VzZXJEYXRhXVtmaW5hbEd1YXJkQmxvY2tdCisgICAgICAgIC8v
IFRoaXMgd291bGQgYmUgY2xlYW5lciB3aXRoIGlmIChndWFyZEJsb2NrU2l6ZSkuLi4sIGJ1dCB0
aGF0CisgICAgICAgIC8vIG1ha2VzIHRoZSBjb21waWxlciBwcmludCB3YXJuaW5ncyBhYm91dCAw
IGxlbmd0aCBtZW1zZXRzLAorICAgICAgICAvLyBldmVuIHdpdGggdGhlIGlmKCkgcHJvdGVjdGlu
ZyB0aGVtLgorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBtZW1zZXQocHJlR3VhcmQoKSwg
Z3VhcmRCbG9ja0JlZ2luVmFsLCBndWFyZEJsb2NrU2l6ZSk7CisgICAgICAgIG1lbXNldChkYXRh
KCksICAgICAgdXNlckRhdGFGaWxsLCAgICAgICBzaXplKTsKKyAgICAgICAgbWVtc2V0KHBvc3RH
dWFyZCgpLCBndWFyZEJsb2NrRW5kVmFsLCAgIGd1YXJkQmxvY2tTaXplKTsKKyNlbmRpZgorICAg
IH0KKworICAgIHZvaWQgY2hlY2soKSBjb25zdCB7CisgICAgICAgIGNoZWNrR3VhcmRCbG9jayhw
cmVHdWFyZCgpLCAgZ3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CisgICAgICAgIGNoZWNr
R3VhcmRCbG9jayhwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICAiYWZ0ZXIiKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNoZWNrQWxsb2NMaXN0KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4g
dG90YWwgc2l6ZSBuZWVkZWQgdG8gYWNjb21vZGF0ZSB1c2VyIGJ1ZmZlciBvZiAnc2l6ZScsCisg
ICAgLy8gcGx1cyBvdXIgdHJhY2tpbmcgZGF0YS4KKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShzaXplX3Qgc2l6ZSkgeworICAgICAgICByZXR1cm4gc2l6ZSArIDIgKiBn
dWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsKKyAgICB9CisKKyAgICAvLyBPZmZzZXQgZnJv
bSBzdXJyb3VuZGluZyBidWZmZXIgdG8gZ2V0IHRvIHVzZXIgZGF0YSBidWZmZXIuCisgICAgaW5s
aW5lIHN0YXRpYyB1bnNpZ25lZCBjaGFyKiBvZmZzZXRBbGxvY2F0aW9uKHVuc2lnbmVkIGNoYXIq
IG0pIHsKKyAgICAgICAgcmV0dXJuIG0gKyBndWFyZEJsb2NrU2l6ZSArIGhlYWRlclNpemUoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0d1YXJkQmxvY2sodW5zaWduZWQgY2hh
ciogYmxvY2tNZW0sIHVuc2lnbmVkIGNoYXIgdmFsLCBjb25zdCBjaGFyKiBsb2NUZXh0KSBjb25z
dDsKKworICAgIC8vIEZpbmQgb2Zmc2V0cyB0byBwcmUgYW5kIHBvc3QgZ3VhcmQgYmxvY2tzLCBh
bmQgdXNlciBkYXRhIGJ1ZmZlcgorICAgIHVuc2lnbmVkIGNoYXIqIHByZUd1YXJkKCkgIGNvbnN0
IHsgcmV0dXJuIG1lbSArIGhlYWRlclNpemUoKTsgfQorICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEo
KSAgICAgIGNvbnN0IHsgcmV0dXJuIHByZUd1YXJkKCkgKyBndWFyZEJsb2NrU2l6ZTsgfQorICAg
IHVuc2lnbmVkIGNoYXIqIHBvc3RHdWFyZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKSArIHNpemU7
IH0KKworICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHVz
ZXIgZGF0YSBhcmVhCisgICAgdW5zaWduZWQgY2hhciogbWVtOyAgICAgICAgICAgLy8gYmVnaW5u
aW5nIG9mIG91ciBhbGxvY2F0aW9uIChwdHMgdG8gaGVhZGVyKQorICAgIFRBbGxvY2F0aW9uKiBw
cmV2QWxsb2M7ICAgICAgIC8vIHByaW9yIGFsbG9jYXRpb24gaW4gdGhlIGNoYWluCisKKyAgICAv
LyBTdXBwb3J0IE1TVkMrKyA2LjAKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFy
ZEJsb2NrQmVnaW5WYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9j
a0VuZFZhbDsKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciB1c2VyRGF0YUZpbGw7CisK
KyAgICBjb25zdCBzdGF0aWMgc2l6ZV90IGd1YXJkQmxvY2tTaXplOworI2lmZGVmIEdVQVJEX0JM
T0NLUworICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzaXpl
b2YoVEFsbG9jYXRpb24pOyB9CisjZWxzZQorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGhlYWRl
clNpemUoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKK307CisKKy8vCisvLyBUaGVyZSBhcmUgc2V2
ZXJhbCBzdGFja3MuICBPbmUgaXMgdG8gdHJhY2sgdGhlIHB1c2hpbmcgYW5kIHBvcHBpbmcKKy8v
IG9mIHRoZSB1c2VyLCBhbmQgbm90IHlldCBpbXBsZW1lbnRlZC4gIFRoZSBvdGhlcnMgYXJlIHNp
bXBseSBhIAorLy8gcmVwb3NpdG9yaWVzIG9mIGZyZWUgcGFnZXMgb3IgdXNlZCBwYWdlcy4KKy8v
CisvLyBQYWdlIHN0YWNrcyBhcmUgbGlua2VkIHRvZ2V0aGVyIHdpdGggYSBzaW1wbGUgaGVhZGVy
IGF0IHRoZSBiZWdpbm5pbmcKKy8vIG9mIGVhY2ggYWxsb2NhdGlvbiBvYnRhaW5lZCBmcm9tIHRo
ZSB1bmRlcmx5aW5nIE9TLiAgTXVsdGktcGFnZSBhbGxvY2F0aW9ucworLy8gYXJlIHJldHVybmVk
IHRvIHRoZSBPUy4gIEluZGl2aWR1YWwgcGFnZSBhbGxvY2F0aW9ucyBhcmUga2VwdCBmb3IgZnV0
dXJlCisvLyByZS11c2UuCisvLworLy8gVGhlICJwYWdlIHNpemUiIHVzZWQgaXMgbm90LCBub3Ig
bXVzdCBpdCBtYXRjaCwgdGhlIHVuZGVybHlpbmcgT1MKKy8vIHBhZ2Ugc2l6ZS4gIEJ1dCwgaGF2
aW5nIGl0IGJlIGFib3V0IHRoYXQgc2l6ZSBvciBlcXVhbCB0byBhIHNldCBvZiAKKy8vIHBhZ2Vz
IGlzIGxpa2VseSBtb3N0IG9wdGltYWwuCisvLworY2xhc3MgVFBvb2xBbGxvY2F0b3IgeworcHVi
bGljOgorICAgIFRQb29sQWxsb2NhdG9yKGJvb2wgZ2xvYmFsID0gZmFsc2UsIGludCBncm93dGhJ
bmNyZW1lbnQgPSA4KjEwMjQsIGludCBhbGxvY2F0aW9uQWxpZ25tZW50ID0gMTYpOworCisgICAg
Ly8KKyAgICAvLyBEb24ndCBjYWxsIHRoZSBkZXN0cnVjdG9yIGp1c3QgdG8gZnJlZSB1cCB0aGUg
bWVtb3J5LCBjYWxsIHBvcCgpCisgICAgLy8KKyAgICB+VFBvb2xBbGxvY2F0b3IoKTsKKworICAg
IC8vCisgICAgLy8gQ2FsbCBwdXNoKCkgdG8gZXN0YWJsaXNoIGEgbmV3IHBsYWNlIHRvIHBvcCBt
ZW1vcnkgdG9vLiAgRG9lcyBub3QKKyAgICAvLyBoYXZlIHRvIGJlIGNhbGxlZCB0byBnZXQgdGhp
bmdzIHN0YXJ0ZWQuCisgICAgLy8KKyAgICB2b2lkIHB1c2goKTsKKworICAgIC8vCisgICAgLy8g
Q2FsbCBwb3AoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNh
bGwgdG8gcHVzaCgpLAorICAgIC8vIG9yIGlmIG5vIGxhc3QgY2FsbCB0byBwdXNoLCBmcmVlcyBh
bGwgbWVtb3J5IHNpbmNlIGZpcnN0IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICB2b2lkIHBvcCgp
OworCisgICAgLy8KKyAgICAvLyBDYWxsIHBvcEFsbCgpIHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxv
Y2F0ZWQuCisgICAgLy8KKyAgICB2b2lkIHBvcEFsbCgpOworCisgICAgLy8KKyAgICAvLyBDYWxs
IGFsbG9jYXRlKCkgdG8gYWN0dWFsbHkgYWNxdWlyZSBtZW1vcnkuICBSZXR1cm5zIDAgaWYgbm8g
bWVtb3J5CisgICAgLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBwcm9wZXJseSBhbGlnbmVkIHBv
aW50ZXIgdG8gJ251bUJ5dGVzJyBvZiBtZW1vcnkuCisgICAgLy8KKyAgICB2b2lkKiBhbGxvY2F0
ZShzaXplX3QgbnVtQnl0ZXMpOworCisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBubyBkZWFsbG9j
YXRlLiAgVGhlIHBvaW50IG9mIHRoaXMgY2xhc3MgaXMgdGhhdAorICAgIC8vIGRlYWxsb2NhdGlv
biBjYW4gYmUgc2tpcHBlZCBieSB0aGUgdXNlciBvZiBpdCwgYXMgdGhlIG1vZGVsCisgICAgLy8g
b2YgdXNlIGlzIHRvIHNpbXVsdGFuZW91c2x5IGRlYWxsb2NhdGUgZXZlcnl0aGluZyBhdCBvbmNl
CisgICAgLy8gYnkgY2FsbGluZyBwb3AoKSwgYW5kIHRvIG5vdCBoYXZlIHRvIHNvbHZlIG1lbW9y
eSBsZWFrIHByb2JsZW1zLgorICAgIC8vCisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgc3RydWN0
IHRIZWFkZXI7CisgICAgCisgICAgc3RydWN0IHRIZWFkZXIgeworICAgICAgICB0SGVhZGVyKHRI
ZWFkZXIqIG5leHRQYWdlLCBzaXplX3QgcGFnZUNvdW50KSA6CisjaWZkZWYgR1VBUkRfQkxPQ0tT
CisgICAgICAgICAgICBsYXN0QWxsb2NhdGlvbigwKSwKKyNlbmRpZgorICAgICAgICAgICAgbmV4
dFBhZ2UobmV4dFBhZ2UpLAorICAgICAgICAgICAgcGFnZUNvdW50KHBhZ2VDb3VudCkgeyB9CisK
KyAgICAgICAgfnRIZWFkZXIoKSB7CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgICAgICBp
ZiAobGFzdEFsbG9jYXRpb24pCisgICAgICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24tPmNoZWNr
QWxsb2NMaXN0KCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHRIZWFkZXIqIG5leHRQ
YWdlOworICAgICAgICBzaXplX3QgcGFnZUNvdW50OworI2lmZGVmIEdVQVJEX0JMT0NLUworICAg
ICAgICBUQWxsb2NhdGlvbiogbGFzdEFsbG9jYXRpb247CisjZW5kaWYKKyAgICB9OworCisgICAg
c3RydWN0IHRBbGxvY1N0YXRlIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldDsKKyAgICAgICAgdEhl
YWRlciogcGFnZTsKKyAgICB9OworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dEFsbG9jU3RhdGU+
IHRBbGxvY1N0YWNrOworCisgICAgLy8gVHJhY2sgYWxsb2NhdGlvbnMgaWYgYW5kIG9ubHkgaWYg
d2UncmUgdXNpbmcgZ3VhcmQgYmxvY2tzCisgICAgdm9pZCogaW5pdGlhbGl6ZUFsbG9jYXRpb24o
dEhlYWRlciogYmxvY2ssIHVuc2lnbmVkIGNoYXIqIG1lbW9yeSwgc2l6ZV90IG51bUJ5dGVzKSB7
CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgIG5ldyhtZW1vcnkpIFRBbGxvY2F0aW9uKG51
bUJ5dGVzLCBtZW1vcnksIGJsb2NrLT5sYXN0QWxsb2NhdGlvbik7CisgICAgICAgIGJsb2NrLT5s
YXN0QWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VEFsbG9jYXRpb24qPihtZW1vcnkpOwor
I2VuZGlmCisgICAgICAgIC8vIFRoaXMgaXMgb3B0aW1pemVkIGVudGlyZWx5IGF3YXkgaWYgR1VB
UkRfQkxPQ0tTIGlzIG5vdCBkZWZpbmVkLgorICAgICAgICByZXR1cm4gVEFsbG9jYXRpb246Om9m
ZnNldEFsbG9jYXRpb24obWVtb3J5KTsKKyAgICB9CisKKyAgICBib29sIGdsb2JhbDsgICAgICAg
ICAgICAvLyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBnbG9iYWxseSBzY29wZWQK
KyAgICBzaXplX3QgcGFnZVNpemU7ICAgICAgICAvLyBncmFudWxhcml0eSBvZiBhbGxvY2F0aW9u
IGZyb20gdGhlIE9TCisgICAgc2l6ZV90IGFsaWdubWVudDsgICAgICAgLy8gYWxsIHJldHVybmVk
IGFsbG9jYXRpb25zIHdpbGwgYmUgYWxpZ25lZCBhdCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGdyYW51bGFyaXR5LCB3aGljaCB3aWxsIGJlIGEgcG93ZXIgb2YgMgorICAg
IHNpemVfdCBhbGlnbm1lbnRNYXNrOworICAgIHNpemVfdCBoZWFkZXJTa2lwOyAgICAgIC8vIGFt
b3VudCBvZiBtZW1vcnkgdG8gc2tpcCB0byBtYWtlIHJvb20gZm9yIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgaGVhZGVyIChiYXNpY2FsbHksIHNpemUgb2YgaGVhZGVy
LCByb3VuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB1cCB0byBtYWtl
IGl0IGFsaWduZWQKKyAgICBzaXplX3QgY3VycmVudFBhZ2VPZmZzZXQ7ICAvLyBuZXh0IG9mZnNl
dCBpbiB0b3Agb2YgaW5Vc2VMaXN0IHRvIGFsbG9jYXRlIGZyb20KKyAgICB0SGVhZGVyKiBmcmVl
TGlzdDsgICAgICAvLyBsaXN0IG9mIHBvcHBlZCBtZW1vcnkKKyAgICB0SGVhZGVyKiBpblVzZUxp
c3Q7ICAgICAvLyBsaXN0IG9mIGFsbCBtZW1vcnkgY3VycmVudGx5IGJlaW5nIHVzZWQKKyAgICB0
QWxsb2NTdGFjayBzdGFjazsgICAgICAvLyBzdGFjayBvZiB3aGVyZSB0byBhbGxvY2F0ZSBmcm9t
LCB0byBwYXJ0aXRpb24gcG9vbAorCisgICAgaW50IG51bUNhbGxzOyAgICAgICAgICAgLy8ganVz
dCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKKyAgICBzaXplX3QgdG90YWxCeXRlczsgICAgICAv
LyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYworcHJpdmF0ZToKKyAgICBUUG9vbEFsbG9j
YXRvciYgb3BlcmF0b3I9KGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFsbG93IGFz
c2lnbm1lbnQgb3BlcmF0b3IKKyAgICBUUG9vbEFsbG9jYXRvcihjb25zdCBUUG9vbEFsbG9jYXRv
ciYpOyAgLy8gZG9udCBhbGxvdyBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IKK307CisKKworLy8K
Ky8vIFRoZXJlIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1hbnkgcG9vbHMgd2l0aCBwb3BzIGhhcHBl
bmluZyBhdAorLy8gZGlmZmVyZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZl
IGEgZ2xvYmFsIHBvcAorLy8gd2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxs
b2NhdG9yLgorLy8KK3R5cGVkZWYgVFBvb2xBbGxvY2F0b3IqIFBvb2xBbGxvY2F0b3JQb2ludGVy
OworZXh0ZXJuIFRQb29sQWxsb2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCk7CisjZGVm
aW5lIEdsb2JhbFBvb2xBbGxvY2F0b3IgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCisKKworc3Ry
dWN0IFRUaHJlYWRHbG9iYWxQb29scworeworICAgIFRQb29sQWxsb2NhdG9yKiBnbG9iYWxQb29s
QWxsb2NhdG9yOworfTsKKwordm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFRQb29sQWxs
b2NhdG9yKiBwb29sQWxsb2NhdG9yKTsKKworLy8KKy8vIFRoaXMgU1RMIGNvbXBhdGlibGUgYWxs
b2NhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIGFsbG9jYXRvcgorLy8gcGFyYW1l
dGVyIHRvIHRlbXBsYXRpemVkIFNUTCBjb250YWluZXJzLCBsaWtlIHZlY3RvciBhbmQgbWFwLgor
Ly8KKy8vIEl0IHdpbGwgdXNlIHRoZSBwb29scyBmb3IgYWxsb2NhdGlvbiwgYW5kIG5vdAorLy8g
ZG8gYW55IGRlYWxsb2NhdGlvbiwgYnV0IHdpbGwgc3RpbGwgZG8gZGVzdHJ1Y3Rpb24uCisvLwor
dGVtcGxhdGU8Y2xhc3MgVD4KK2NsYXNzIHBvb2xfYWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CisgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j
ZV90eXBlOworICAgIHR5cGVkZWYgVCogcG9pbnRlcjsKKyAgICB0eXBlZGVmIGNvbnN0IFQqIGNv
bnN0X3BvaW50ZXI7CisgICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBjb25z
dCBUJiBjb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CisKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBPdGhlcj4gCisgICAgc3RydWN0IHJlYmluZCB7CisgICAgICAgIHR5cGVk
ZWYgcG9vbF9hbGxvY2F0b3I8T3RoZXI+IG90aGVyOworICAgIH07CisgICAgcG9pbnRlciBhZGRy
ZXNzKHJlZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQorICAgIGNvbnN0X3BvaW50ZXIg
YWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKworICAgIHBv
b2xfYWxsb2NhdG9yKCkgOiBhbGxvY2F0b3IoR2xvYmFsUG9vbEFsbG9jYXRvcikgeyB9CisgICAg
cG9vbF9hbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3ImIGEpIDogYWxsb2NhdG9yKGEpIHsgfQorICAg
IHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBwKSA6IGFsbG9jYXRvcihw
LmFsbG9jYXRvcikgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KKyAgICBwb29sX2Fs
bG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxPdGhlcj4mIHApIDogYWxsb2NhdG9yKHAuZ2V0
QWxsb2NhdG9yKCkpIHsgfQorCisgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCku
YWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAgIH0KKyAgICBwb2ludGVyIGFsbG9jYXRlKHNp
emVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOworICAg
IH0KKworICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7IH0KKyAgICB2b2lk
IGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKSB7IH0KKworICAgIHBvaW50ZXIgX0NoYXJh
bGxvYyhzaXplX3QgbikgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVy
PihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuKSk7CisgICAgfQorCisgICAgdm9pZCBjb25zdHJ1
Y3QocG9pbnRlciBwLCBjb25zdCBUJiB2YWwpIHsgbmV3ICgodm9pZCAqKXApIFQodmFsKTsgfQor
ICAgIHZvaWQgZGVzdHJveShwb2ludGVyIHApIHsgcC0+VDo6flQoKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IHBvb2xfYWxsb2NhdG9yJiByaHMpIGNvbnN0IHsgcmV0dXJuICZnZXRB
bGxvY2F0b3IoKSA9PSAmcmhzLmdldEFsbG9jYXRvcigpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHBvb2xfYWxsb2NhdG9yJiByaHMpIGNvbnN0IHsgcmV0dXJuICZnZXRBbGxvY2F0b3Io
KSAhPSAmcmhzLmdldEFsbG9jYXRvcigpOyB9CisKKyAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemVvZihUKTsgfQor
ICAgIHNpemVfdHlwZSBtYXhfc2l6ZShpbnQgc2l6ZSkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2l6ZV90eXBlPigtMSkgLyBzaXplOyB9CisKKyAgICB2b2lkIHNldEFsbG9jYXRvcihUUG9v
bEFsbG9jYXRvciogYSkgeyBhbGxvY2F0b3IgPSAqYTsgfQorICAgIFRQb29sQWxsb2NhdG9yJiBn
ZXRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3I7IH0KKworcHJvdGVjdGVkOgor
ICAgIFRQb29sQWxsb2NhdG9yJiBhbGxvY2F0b3I7Cit9OworCisjZW5kaWYgLy8gX1BPT0xBTExP
Q19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgVEFsaXZlVHJhdmVyc2VyIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRBbGl2ZVRyYXZlcnNlcihUUXVhbGlm
aWVyIHEpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBmb3Vu
ZChmYWxzZSksIHF1YWxpZmllcihxKQorICAgIHsKKyAgICB9CisKKwlib29sIHdhc0ZvdW5kKCkg
eyByZXR1cm4gZm91bmQ7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgZm91bmQ7CisgICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Cit9
OworCisvLworLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IGEgdmFyaWFibGUgb2YgdGhlIGdpdmVu
IHF1YWxpZmllciB0eXBlCisvLyBpcyBndWFyYW50ZWVkIHdyaXR0ZW4uICBOb3QgYWx3YXlzIHBv
c3NpYmxlIHRvIGRldGVybWluZSBpZgorLy8gaXQgaXMgd3JpdHRlbiBjb25kaXRpb25hbGx5Lgor
Ly8KKy8vID8/IEl0IGRvZXMgbm90IGRvIHRoaXMgd2VsbCB5ZXQsIHRoaXMgaXMganVzdCBhIHBs
YWNlIGhvbGRlcgorLy8gdGhhdCBzaW1wbHkgZGV0ZXJtaW5lcyBpZiBpdCB3YXMgcmVmZXJlbmNl
IGF0IGFsbCwgYW55d2hlcmUuCisvLworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2Rl
KiBub2RlLCBUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBUQWxpdmVUcmF2ZXJzZXIgaXQo
cXVhbGlmaWVyKTsKKworICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT50cmF2ZXJzZSgmaXQp
OworCisgICAgcmV0dXJuIGl0Lndhc0ZvdW5kKCk7Cit9CisKK3ZvaWQgVEFsaXZlVHJhdmVyc2Vy
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIC8vCisgICAgLy8gSWYg
aXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCByZWNvcmQgaXQuCisgICAgLy8KKyAgICBpZiAo
bm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gcXVhbGlmaWVyKQorICAgICAgICBmb3VuZCA9IHRydWU7
Cit9CisKK2Jvb2wgVEFsaXZlVHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCBwcmVWaXNp
dCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpZiAod2FzRm91bmQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9R
dWFsaWZpZXJBbGl2ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJtTm9kZSogcm9vdCwgVFF1YWxp
Zmllcik7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUmVtb3ZlVHJlZS5oIgorCisvLworLy8gQ29kZSB0
byByZWN1cnNpdmVseSBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8KKworY2xhc3Mg
UmVtb3ZlVHJlZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisJUmVtb3Zl
VHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCisJeworCX0KKwor
cHJvdGVjdGVkOgorCXZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCXZvaWQgdmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisJYm9vbCB2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5Kik7CisJYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiopOworCWJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqKTsKK307CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKK30KKworYm9vbCBSZW1vdmVUcmVl
Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKwlkZWxl
dGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBkZWxldGUgbm9kZTsK
KworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJ
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQg
dmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBSZW1vdmVUcmVlOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVy
bUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKKy8vCisvLyBFbnRy
eSBwb2ludC4KKy8vCit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkK
K3sKKyAgICBSZW1vdmVUcmVlIGl0OworCisgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKK30KKwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL1JlbW92ZVRyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSopOwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoSGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
U2hIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgX1NISEFORExFX0lOQ0xVREVEXworI2RlZmluZSBfU0hIQU5ETEVfSU5D
TFVERURfCisKKy8vCisvLyBNYWNoaW5lIGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGNvbXBpbGVy
IHByaXZhdGUgb2JqZWN0cworLy8gc2VudCBhcyBTaEhhbmRsZSB0byB0aGUgZHJpdmVyLgorLy8K
Ky8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KKy8vCisKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCisKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFRMaW5rZXI7CitjbGFzcyBUVW5pZm9y
bU1hcDsKKworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0
dXJuZWQgdG8gdGhlIGRyaXZlci4KKy8vCitjbGFzcyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoK
KyAgICBUU2hIYW5kbGVCYXNlKCkgeyB9CisgICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsg
fQorICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgVExpbmtlciogZ2V0QXNMaW5rZXIoKSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBUVW5pZm9ybU1hcCogZ2V0QXNVbmlmb3JtTWFwKCkgeyByZXR1cm4gMDsgfQorfTsKKwor
Ly8KKy8vIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgbGlua2VyIHRv
IGRlcml2ZSBmcm9tCisvLyBmb3IgbWFuYWdpbmcgd2hlcmUgdW5pZm9ybXMgbGl2ZS4KKy8vCitj
bGFzcyBUVW5pZm9ybU1hcCA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBU
VW5pZm9ybU1hcCgpIHsgfQorICAgIHZpcnR1YWwgflRVbmlmb3JtTWFwKCkgeyB9CisgICAgdmly
dHVhbCBUVW5pZm9ybU1hcCogZ2V0QXNVbmlmb3JtTWFwKCkgeyByZXR1cm4gdGhpczsgfQorICAg
IHZpcnR1YWwgaW50IGdldExvY2F0aW9uKGNvbnN0IGNoYXIqIG5hbWUpID0gMDsgICAgCisgICAg
dmlydHVhbCBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKyAg
ICBUSW5mb1NpbmsgaW5mb1Npbms7Cit9OworY2xhc3MgVEludGVybU5vZGU7CisKKy8vCisvLyBU
aGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyIHRvIGRlcml2
ZSBmcm9tCisvLyBmb3IgbWFuYWdpbmcgb2JqZWN0IGNvZGUgZnJvbSB0aGUgY29tcGlsZS4KKy8v
CitjbGFzcyBUQ29tcGlsZXIgOiBwdWJsaWMgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAg
VENvbXBpbGVyKEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcykgOiBsYW5ndWFnZShsKSwgc3BlYyhz
KSwgaGF2ZVZhbGlkT2JqZWN0Q29kZShmYWxzZSkgeyB9CisgICAgdmlydHVhbCB+VENvbXBpbGVy
KCkgeyB9CisgICAgRVNoTGFuZ3VhZ2UgZ2V0TGFuZ3VhZ2UoKSB7IHJldHVybiBsYW5ndWFnZTsg
fQorICAgIHZpcnR1YWwgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5r
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOwor
CisgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiB0aGlzOyB9
CisgICAgdmlydHVhbCBib29sIGxpbmthYmxlKCkgeyByZXR1cm4gaGF2ZVZhbGlkT2JqZWN0Q29k
ZTsgfQorCisgICAgVEluZm9TaW5rIGluZm9TaW5rOworcHJvdGVjdGVkOgorICAgIEVTaExhbmd1
YWdlIGxhbmd1YWdlOworICAgIEVTaFNwZWMgc3BlYzsKKyAgICBib29sIGhhdmVWYWxpZE9iamVj
dENvZGU7Cit9OworCisvLworLy8gTGluayBvcGVyYXRpb25zIGFyZSBiYXNlIG9uIGEgbGlzdCBv
ZiBjb21waWxlIHJlc3VsdHMuLi4KKy8vCit0eXBlZGVmIFRWZWN0b3I8VENvbXBpbGVyKj4gVENv
bXBpbGVyTGlzdDsKK3R5cGVkZWYgVFZlY3RvcjxUU2hIYW5kbGVCYXNlKj4gVEhhbmRsZUxpc3Q7
CisKKy8vCisvLyBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGxpbmtl
ciB0byBkZXJpdmUgZnJvbQorLy8gdG8gbWFuYWdlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZS4K
Ky8vCisKK2NsYXNzIFRMaW5rZXIgOiBwdWJsaWMgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6Cisg
ICAgVExpbmtlcihFU2hFeGVjdXRhYmxlIGUpIDogCisgICAgICAgIGV4ZWN1dGFibGUoZSksIAor
ICAgICAgICBoYXZlUmV0dXJuYWJsZU9iamVjdENvZGUoZmFsc2UpLAorICAgICAgICBhcHBBdHRy
aWJ1dGVCaW5kaW5ncygwKSwKKyAgICAgICAgZml4ZWRBdHRyaWJ1dGVCaW5kaW5ncygwKSwKKyAg
ICAgICAgZXhjbHVkZWRBdHRyaWJ1dGVzKDApLAorICAgICAgICBleGNsdWRlZENvdW50KDApLAor
ICAgICAgICB1bmlmb3JtQmluZGluZ3MoMCkgeyB9CisgICAgdmlydHVhbCBUTGlua2VyKiBnZXRB
c0xpbmtlcigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIH5UTGlua2VyKCkgeyB9Cisg
ICAgdmlydHVhbCBib29sIGxpbmsoVENvbXBpbGVyTGlzdCYsIFRVbmlmb3JtTWFwKikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBsaW5rKFRIYW5kbGVMaXN0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QXBwQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hCaW5kaW5nVGFi
bGUqIHQpICAgeyBhcHBBdHRyaWJ1dGVCaW5kaW5ncyA9IHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEJpbmRpbmdUYWJsZSogdCkgeyBmaXhl
ZEF0dHJpYnV0ZUJpbmRpbmdzID0gdDsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRyaWJ1dGVC
aW5kaW5ncyhTaEJpbmRpbmdUYWJsZSBjb25zdCAqKnQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RXhjbHVkZWRBdHRyaWJ1dGVzKGNvbnN0IGludCogYXR0cmlidXRlcywgaW50IGNv
dW50KSB7IGV4Y2x1ZGVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7IGV4Y2x1ZGVkQ291bnQgPSBj
b3VudDsgfQorICAgIHZpcnR1YWwgU2hCaW5kaW5nVGFibGUqIGdldFVuaWZvcm1CaW5kaW5ncygp
IGNvbnN0ICB7IHJldHVybiB1bmlmb3JtQmluZGluZ3M7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IHZv
aWQqIGdldE9iamVjdENvZGUoKSBjb25zdCB7IHJldHVybiAwOyB9IC8vIGEgcmVhbCBjb21waWxl
ciB3b3VsZCBiZSByZXR1cm5pbmcgb2JqZWN0IGNvZGUgaGVyZQorICAgIHZpcnR1YWwgVEluZm9T
aW5rJiBnZXRJbmZvU2luaygpIHsgcmV0dXJuIGluZm9TaW5rOyB9CisgICAgVEluZm9TaW5rIGlu
Zm9TaW5rOworcHJvdGVjdGVkOgorICAgIEVTaEV4ZWN1dGFibGUgZXhlY3V0YWJsZTsKKyAgICBi
b29sIGhhdmVSZXR1cm5hYmxlT2JqZWN0Q29kZTsgIC8vIHRydWUgd2hlbiBvYmplY3RDb2RlIGlz
IGFjY2VwdGFibGUgdG8gc2VuZCB0byBkcml2ZXIKKworICAgIGNvbnN0IFNoQmluZGluZ1RhYmxl
KiBhcHBBdHRyaWJ1dGVCaW5kaW5nczsKKyAgICBjb25zdCBTaEJpbmRpbmdUYWJsZSogZml4ZWRB
dHRyaWJ1dGVCaW5kaW5nczsKKyAgICBjb25zdCBpbnQqIGV4Y2x1ZGVkQXR0cmlidXRlczsKKyAg
ICBpbnQgZXhjbHVkZWRDb3VudDsKKyAgICBTaEJpbmRpbmdUYWJsZSogdW5pZm9ybUJpbmRpbmdz
OyAgICAgICAgICAgICAgICAvLyBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgICAgCit9OworCisvLwor
Ly8gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBlbmRlbnQg
Y29kZQorLy8gYW5kIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLgorLy8KKy8vIFRoZSBtYWNo
aW5lIGRlcGVuZGVudCBjb2RlIHNob3VsZCBkZXJpdmUgZnJvbSB0aGUgY2xhc3NlcworLy8gYWJv
dmUuIFRoZW4gQ29uc3RydWN0KigpIGFuZCBEZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5kIAorLy8g
ZGVzdHJveSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUK
Ky8vIGFib3ZlIG1hY2hpbmUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24uCisvLworVENvbXBpbGVy
KiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSwgRVNoU3BlYyk7CisKK1RTaEhhbmRsZUJh
c2UqIENvbnN0cnVjdExpbmtlcihFU2hFeGVjdXRhYmxlLCBpbnQpOwordm9pZCBEZWxldGVMaW5r
ZXIoVFNoSGFuZGxlQmFzZSopOworCitUVW5pZm9ybU1hcCogQ29uc3RydWN0VW5pZm9ybU1hcCgp
Owordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKKwordm9pZCBEZWxldGVVbmlmb3Jt
TWFwKFRVbmlmb3JtTWFwKik7CisKKyNlbmRpZiAvLyBfU0hIQU5ETEVfSU5DTFVERURfCkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5NyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGludGVy
ZmFjZSB0byB0aGUgY29tcGlsZXIvbGlua2VyLAorLy8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5n
LmgKKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9T
aEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKKy8vCisvLyBB
IHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsYW5ndWFnZS4gIEVhY2ggaGFzIGEgZGlmZmVyZW50Cisv
LyBzZXQgb2YgYnVpbHQtaW5zLCBhbmQgd2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGF0IGZyb20KKy8v
IGNvbXBpbGUgdG8gY29tcGlsZS4KKy8vCitUU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlc1tFU2hM
YW5nQ291bnRdOworCisKK1RQb29sQWxsb2NhdG9yKiBQZXJQcm9jZXNzR1BBID0gMDsKKy8vCisv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCisvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIvbGlua2VyLgor
Ly8KKworLy8KKy8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRv
aW5nIGFueSBvdGhlcgorLy8gY29tcGlsZXIvbGlua2VyIG9wZXJhdGlvbnMuCisvLworaW50IFNo
SW5pdGlhbGl6ZSgpCit7CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworICAgIGJvb2wgcmV0ID0g
dHJ1ZTsKKworICAgIGlmICghSW5pdFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgcGVyIHByb2Nlc3MuIElmIGl0
cyBjYWxsZWQgYnkgbXVsdGlwbGUgdGhyZWFkcywgdGhlbiAKKyAgICAvLyB3ZSBuZWVkIHRvIGhh
dmUgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24g
b2YgcGVyIHByb2Nlc3MKKyAgICAvLyBnbG9iYWwgcG9vbCBhbGxvY2F0b3IKKyAgICBpZiAoIVBl
clByb2Nlc3NHUEEpIHsgCisgICAgICAgIFRQb29sQWxsb2NhdG9yICpidWlsdEluUG9vbEFsbG9j
YXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKKyAgICAgICAgYnVpbHRJblBvb2xBbGxv
Y2F0b3ItPnB1c2goKTsKKyAgICAgICAgVFBvb2xBbGxvY2F0b3IqIGdQb29sQWxsb2NhdG9yID0g
Jkdsb2JhbFBvb2xBbGxvY2F0b3I7CisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIo
YnVpbHRJblBvb2xBbGxvY2F0b3IpOworCisgICAgICAgIFRTeW1ib2xUYWJsZSBzeW1UYWJsZXNb
RVNoTGFuZ0NvdW50XTsKKyAgICAgICAgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoMCwgaW5m
b1NpbmssIHN5bVRhYmxlcyk7CisKKyAgICAgICAgUGVyUHJvY2Vzc0dQQSA9IG5ldyBUUG9vbEFs
bG9jYXRvcih0cnVlKTsKKyAgICAgICAgUGVyUHJvY2Vzc0dQQS0+cHVzaCgpOworICAgICAgICBT
ZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFBlclByb2Nlc3NHUEEpOworCisgICAgICAgIFN5bWJv
bFRhYmxlc1tFU2hMYW5nVmVydGV4XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJv
bFRhYmxlc1tFU2hMYW5nVmVydGV4XS0+Y29weVRhYmxlKHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4
XSk7CisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdID0gbmV3IFRTeW1ib2xU
YWJsZTsKKyAgICAgICAgU3ltYm9sVGFibGVzW0VTaExhbmdGcmFnbWVudF0tPmNvcHlUYWJsZShz
eW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XSk7CisKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9j
YXRvclB0cihnUG9vbEFsbG9jYXRvcik7CisKKyAgICAgICAgc3ltVGFibGVzW0VTaExhbmdWZXJ0
ZXhdLnBvcCgpOworICAgICAgICBzeW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XS5wb3AoKTsKKwor
ICAgICAgICBidWlsdEluUG9vbEFsbG9jYXRvci0+cG9wQWxsKCk7CisgICAgICAgIGRlbGV0ZSBi
dWlsdEluUG9vbEFsbG9jYXRvcjsgICAgICAgIAorCisgICAgfQorCisgICAgcmV0dXJuIHJldCA/
IDEgOiAwOworfQorCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVz
dHJveSBjb21waWxlci9saW5rZXIKKy8vIG9iamVjdHMuCisvLworCitTaEhhbmRsZSBTaENvbnN0
cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCit7CisgICAg
aWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihDb25zdHJ1Y3RDb21waWxlcihs
YW5ndWFnZSwgc3BlYykpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlKTsKK30KKworU2hIYW5kbGUgU2hDb25zdHJ1Y3RMaW5rZXIoY29uc3QgRVNoRXhlY3V0
YWJsZSBleGVjdXRhYmxlLCBpbnQgZGVidWdPcHRpb25zKQoreworICAgIGlmICghSW5pdFRocmVh
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0
aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0TGlua2VyKGV4ZWN1dGFibGUsIGRlYnVn
T3B0aW9ucykpOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOwor
fQorCitTaEhhbmRsZSBTaENvbnN0cnVjdFVuaWZvcm1NYXAoKQoreworICAgIGlmICghSW5pdFRo
cmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBz
dGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0VW5pZm9ybU1hcCgpKTsKKworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlKTsKK30KKwordm9pZCBTaERlc3Ry
dWN0KFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKworICAgIGlmIChiYXNlLT5nZXRBc0NvbXBpbGVyKCkpCisgICAgICAg
IERlbGV0ZUNvbXBpbGVyKGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgZWxzZSBpZiAoYmFz
ZS0+Z2V0QXNMaW5rZXIoKSkKKyAgICAgICAgRGVsZXRlTGlua2VyKGJhc2UtPmdldEFzTGlua2Vy
KCkpOworICAgIGVsc2UgaWYgKGJhc2UtPmdldEFzVW5pZm9ybU1hcCgpKQorICAgICAgICBEZWxl
dGVVbmlmb3JtTWFwKGJhc2UtPmdldEFzVW5pZm9ybU1hcCgpKTsKK30KKworLy8KKy8vIENsZWFu
dXAgc3ltYm9sIHRhYmxlcworLy8KK2ludCBfX2Zhc3RjYWxsIFNoRmluYWxpemUoKQoreyAgCisg
IGlmIChQZXJQcm9jZXNzR1BBKSB7CisgICAgUGVyUHJvY2Vzc0dQQS0+cG9wQWxsKCk7CisgICAg
ZGVsZXRlIFBlclByb2Nlc3NHUEE7CisgICAgUGVyUHJvY2Vzc0dQQSA9IDA7CisgIH0KKyAgZm9y
IChpbnQgaSA9IDA7IGkgPCBFU2hMYW5nQ291bnQ7ICsraSkgeworICAgIGRlbGV0ZSBTeW1ib2xU
YWJsZXNbaV07CisgICAgU3ltYm9sVGFibGVzW2ldID0gMDsKKyAgfQorICByZXR1cm4gMTsKK30K
KworYm9vbCBHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNl
KiByZXNvdXJjZXMsIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGVzLCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7Cisg
ICAgCisJaWYgKHJlc291cmNlcykgeworCQlidWlsdElucy5pbml0aWFsaXplKCpyZXNvdXJjZXMp
OworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwg
bGFuZ3VhZ2UsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfSBlbHNlIHsK
KwkJYnVpbHRJbnMuaW5pdGlhbGl6ZSgpOworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJ
bnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgRVNoTGFuZ1ZlcnRleCwgaW5mb1NpbmssIHJlc291cmNl
cywgc3ltYm9sVGFibGVzKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1
aWx0SW5TdHJpbmdzKCksIEVTaExhbmdGcmFnbWVudCwgaW5mb1NpbmssIHJlc291cmNlcywgc3lt
Ym9sVGFibGVzKTsKKwl9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXpl
U3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJl
c291cmNlcywgVFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZXMpCit7CisgICAgVEludGVybWVkaWF0
ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOwkKKyAgICBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
OworCQorCWlmIChyZXNvdXJjZXMpCisJCXN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGVzOworCWVs
c2UKKwkJc3ltYm9sVGFibGUgPSAmc3ltYm9sVGFibGVzW2xhbmd1YWdlXTsKKworICAgIFRQYXJz
ZUNvbnRleHQgcGFyc2VDb250ZXh0KCpzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBsYW5ndWFn
ZSwgaW5mb1NpbmspOworCisgICAgR2xvYmFsUGFyc2VDb250ZXh0ID0gJnBhcnNlQ29udGV4dDsK
KyAgICAKKyAgICBzZXRJbml0aWFsU3RhdGUoKTsKKworICAgIGFzc2VydChzeW1ib2xUYWJsZS0+
aXNFbXB0eSgpIHx8IHN5bWJvbFRhYmxlLT5hdFNoYXJlZEJ1aWx0SW5MZXZlbCgpKTsKKyAgICAg
ICAKKyAgICAvLworICAgIC8vIFBhcnNlIHRoZSBidWlsdC1pbnMuICBUaGlzIHNob3VsZCBvbmx5
IGhhcHBlbiBvbmNlIHBlcgorICAgIC8vIGxhbmd1YWdlIHN5bWJvbCB0YWJsZS4KKyAgICAvLwor
ICAgIC8vIFB1c2ggdGhlIHN5bWJvbCB0YWJsZSB0byBnaXZlIGl0IGFuIGluaXRpYWwgc2NvcGUu
ICBUaGlzCisgICAgLy8gcHVzaCBzaG91bGQgbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIHBvcCwg
c28gdGhhdCBidWlsdC1pbnMKKyAgICAvLyBhcmUgcHJlc2VydmVkLCBhbmQgdGhlIHRlc3QgZm9y
IGFuIGVtcHR5IHRhYmxlIGZhaWxzLgorICAgIC8vCisKKyAgICBzeW1ib2xUYWJsZS0+cHVzaCgp
OworICAgIAorICAgIC8vSW5pdGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yCisgICAgaW50IHJldCA9
IEluaXRQcmVwcm9jZXNzb3IoKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgICJVbmFibGUgdG8gaW50aWFsaXplIHRo
ZSBQcmVwcm9jZXNzb3IiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKFRCdWlsdEluU3RyaW5nczo6aXRlcmF0b3IgaSAgPSBCdWlsdEluU3RyaW5nc1twYXJz
ZUNvbnRleHQubGFuZ3VhZ2VdLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpICE9IEJ1aWx0SW5TdHJpbmdzW3BhcnNlQ29udGV4dC5sYW5ndWFnZV0uZW5kKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2kpIHsKKyAgICAgICAgY29u
c3QgY2hhciogYnVpbHRJblNoYWRlcnNbMV07CisgICAgICAgIGludCBidWlsdEluTGVuZ3Roc1sx
XTsKKworICAgICAgICBidWlsdEluU2hhZGVyc1swXSA9ICgqaSkuY19zdHIoKTsKKyAgICAgICAg
YnVpbHRJbkxlbmd0aHNbMF0gPSAoaW50KSAoKmkpLnNpemUoKTsKKworICAgICAgICBpZiAoUGFQ
YXJzZVN0cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KGJ1aWx0SW5TaGFkZXJzKSwgYnVpbHRJbkxl
bmd0aHMsIDEsIHBhcnNlQ29udGV4dCkgIT0gMCkgeworICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hYmxlIHRvIHBhcnNlIGJ1aWx0LWlu
cyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisJaWYg
KHJlc291cmNlcykgeworCQlJZGVudGlmeUJ1aWx0SW5zKHBhcnNlQ29udGV4dC5sYW5ndWFnZSwg
KnN5bWJvbFRhYmxlLCAqcmVzb3VyY2VzKTsKKwl9IGVsc2UgewkJCQkJCQkJCSAgIAorCQlJZGVu
dGlmeUJ1aWx0SW5zKHBhcnNlQ29udGV4dC5sYW5ndWFnZSwgKnN5bWJvbFRhYmxlKTsKKwl9CisK
KyAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
CisvLyBEbyBhbiBhY3R1YWwgY29tcGlsZSBvbiB0aGUgZ2l2ZW4gc3RyaW5ncy4gIFRoZSByZXN1
bHQgaXMgbGVmdCAKKy8vIGluIHRoZSBnaXZlbiBjb21waWxlIG9iamVjdC4KKy8vCisvLyBSZXR1
cm46ICBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyByZWFsbHkgYm9vbGVhbiwgaW5k
aWNhdGluZworLy8gc3VjY2VzcyBvciBmYWlsdXJlLgorLy8KK2ludCBTaENvbXBpbGUoCisgICAg
Y29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmlu
Z3NbXSwKKyAgICBjb25zdCBpbnQgbnVtU3RyaW5ncywKKyAgICBjb25zdCBFU2hPcHRpbWl6YXRp
b25MZXZlbCBvcHRMZXZlbCwKKyAgICBjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMs
CisgICAgaW50IGRlYnVnT3B0aW9ucworICAgICkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFu
ZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFz
Q29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wdXNoKCk7CisgICAgVEluZm9TaW5rJiBpbmZv
U2luayA9IGNvbXBpbGVyLT5pbmZvU2luazsKKyAgICBpbmZvU2luay5pbmZvLmVyYXNlKCk7Cisg
ICAgaW5mb1NpbmsuZGVidWcuZXJhc2UoKTsKKyAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKKwor
ICAgIGlmIChudW1TdHJpbmdzID09IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgVEludGVy
bWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOworICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xU
YWJsZSgqU3ltYm9sVGFibGVzW2NvbXBpbGVyLT5nZXRMYW5ndWFnZSgpXSk7CisgICAgCisgICAg
R2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUocmVzb3VyY2VzLCBpbmZvU2luaywgJnN5bWJvbFRh
YmxlLCBjb21waWxlci0+Z2V0TGFuZ3VhZ2UoKSk7CisKKyAgICBUUGFyc2VDb250ZXh0IHBhcnNl
Q29udGV4dChzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBjb21waWxlci0+Z2V0TGFuZ3VhZ2Uo
KSwgaW5mb1NpbmspOworICAgIHBhcnNlQ29udGV4dC5pbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZp
b3IoKTsKKworICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisg
ICAgc2V0SW5pdGlhbFN0YXRlKCk7CisKKyAgICBJbml0UHJlcHJvY2Vzc29yKCk7ICAgIAorICAg
IC8vCisgICAgLy8gUGFyc2UgdGhlIGFwcGxpY2F0aW9uJ3Mgc2hhZGVycy4gIEFsbCB0aGUgZm9s
bG93aW5nIHN5bWJvbCB0YWJsZQorICAgIC8vIHdvcmsgd2lsbCBiZSB0aHJvdy1hd2F5LCBzbyBw
dXNoIGEgbmV3IGFsbG9jYXRpb24gc2NvcGUgdGhhdCBjYW4KKyAgICAvLyBiZSB0aHJvd24gYXdh
eSwgdGhlbiBwdXNoIGEgc2NvcGUgZm9yIHRoZSBjdXJyZW50IHNoYWRlcidzIGdsb2JhbHMuCisg
ICAgLy8KKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgIHN5bWJvbFRhYmxlLnB1
c2goKTsKKyAgICBpZiAoIXN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkKKyAgICAgICAgcGFy
c2VDb250ZXh0LmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIldy
b25nIHN5bWJvbCB0YWJsZSBsZXZlbCIpOworCisgICAgaW50IHJldCA9IFBhUGFyc2VTdHJpbmdz
KGNvbnN0X2Nhc3Q8Y2hhcioqPihzaGFkZXJTdHJpbmdzKSwgMCwgbnVtU3RyaW5ncywgcGFyc2VD
b250ZXh0KTsKKyAgICBpZiAocmV0KQorICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBp
ZiAoc3VjY2VzcyAmJiBwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKKyAgICAgICAgaWYgKG9wdExl
dmVsID09IEVTaE9wdE5vR2VuZXJhdGlvbikKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC5pbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeE5vbmUsICJObyBlcnJvcnMuICBObyBjb2RlIGdlbmVy
YXRpb24gb3IgbGlua2luZyB3YXMgcmVxdWVzdGVkLiIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3MocGFyc2VDb250ZXh0LnRy
ZWVSb290LCBwYXJzZUNvbnRleHQubGFuZ3VhZ2UpOworCisgICAgICAgICAgICBpZiAoc3VjY2Vz
cykgeworCisgICAgICAgICAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJt
ZWRpYXRlKQorICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJz
ZUNvbnRleHQudHJlZVJvb3QpOworCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBDYWxsIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlcgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgaWYgKCFjb21waWxlci0+Y29tcGlsZShwYXJzZUNvbnRleHQu
dHJlZVJvb3QpKQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIHBh
cnNlQ29udGV4dC5pbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBw
YXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8ICIg
Y29tcGlsYXRpb24gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7CisgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJt
ZWRpYXRlKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0
LnRyZWVSb290KTsKKyAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKKyAg
ICAgICAgcGFyc2VDb250ZXh0LmVycm9yKDEsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiIsICIi
LCAiIik7CisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4
dC5udW1FcnJvcnMgPDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5c
blxuIjsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBpZiAoZGVidWdPcHRpb25z
ICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0
VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworICAgIH0KKworICAgIGludGVybWVkaWF0ZS5y
ZW1vdmUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKKworICAgIC8vCisgICAgLy8gRW5zdXJlIHN5
bWJvbCB0YWJsZSBpcyByZXR1cm5lZCB0byB0aGUgYnVpbHQtaW4gbGV2ZWwsCisgICAgLy8gdGhy
b3dpbmcgYXdheSBhbGwgYnV0IHRoZSBidWlsdC1pbnMuCisgICAgLy8KKyAgICB3aGlsZSAoISBz
eW1ib2xUYWJsZS5hdFNoYXJlZEJ1aWx0SW5MZXZlbCgpKQorICAgICAgICBzeW1ib2xUYWJsZS5w
b3AoKTsKKworICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisgICAgLy8KKyAgICAvLyBUaHJv
dyBhd2F5IGFsbCB0aGUgdGVtcG9yYXJ5IG1lbW9yeSB1c2VkIGJ5IHRoZSBjb21waWxhdGlvbiBw
cm9jZXNzLgorICAgIC8vCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wb3AoKTsKKworICAgIHJl
dHVybiBzdWNjZXNzID8gMSA6IDA7Cit9CisKKy8vCisvLyBEbyBhbiBhY3R1YWwgbGluayBvbiB0
aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3RzLgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFs
dWUgb2YgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVy
ZS4KKy8vCitpbnQgU2hMaW5rKAorICAgIGNvbnN0IFNoSGFuZGxlIGxpbmtIYW5kbGUsCisgICAg
Y29uc3QgU2hIYW5kbGUgY29tcEhhbmRsZXNbXSwKKyAgICBjb25zdCBpbnQgbnVtSGFuZGxlcywK
KyAgICBTaEhhbmRsZSB1bmlmb3JtTWFwSGFuZGxlLAorICAgIHNob3J0IGludCoqIHVuaWZvcm1z
QWNjZXNzZWQsCisgICAgaW50KiBudW1Vbmlmb3Jtc0FjY2Vzc2VkKQorCit7CisgICAgaWYgKCFJ
bml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFz
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGxpbmtIYW5kbGUpOworICAgIFRM
aW5rZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5nZXRBc0xpbmtlcigp
KTsKKyAgICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IHJl
dHVyblZhbHVlOworICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucHVzaCgpOworICAgIHJldHVyblZh
bHVlID0gU2hMaW5rRXh0KGxpbmtIYW5kbGUsIGNvbXBIYW5kbGVzLCBudW1IYW5kbGVzKTsKKyAg
ICBHbG9iYWxQb29sQWxsb2NhdG9yLnBvcCgpOworCisgICAgaWYgKHJldHVyblZhbHVlKQorICAg
ICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorLy8KKy8vIFRoaXMgbGluayBtZXRo
b2Qgd2lsbCBiZSBldmVudHVhbGx5IHVzZWQgb25jZSB0aGUgSUNEIHN1cHBvcnRzIHRoZSBuZXcg
bGlua2VyIGludGVyZmFjZQorLy8KK2ludCBTaExpbmtFeHQoCisgICAgY29uc3QgU2hIYW5kbGUg
bGlua0hhbmRsZSwKKyAgICBjb25zdCBTaEhhbmRsZSBjb21wSGFuZGxlc1tdLAorICAgIGNvbnN0
IGludCBudW1IYW5kbGVzKQoreworICAgIGlmIChsaW5rSGFuZGxlID09IDAgfHwgbnVtSGFuZGxl
cyA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRIYW5kbGVMaXN0IGNPYmplY3RzOwor
CisgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtSGFuZGxlczsgKytpKSB7CisgICAgICAgICAgICBpZiAoY29tcEhhbmRsZXNbaV0gPT0gMCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRTaEhhbmRsZUJhc2UqIGJh
c2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihjb21wSGFuZGxlc1tpXSk7Cisg
ICAgICAgICAgICBpZiAoYmFzZS0+Z2V0QXNMaW5rZXIoKSkgeworICAgICAgICAgICAgICAgIGNP
YmplY3RzLnB1c2hfYmFjayhiYXNlLT5nZXRBc0xpbmtlcigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChiYXNlLT5nZXRBc0NvbXBpbGVyKCkpCisgICAgICAgICAgICAgICAgY09i
amVjdHMucHVzaF9iYWNrKGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgCisgICAgCisgICAg
ICAgICAgICBpZiAoY09iamVjdHNbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJl
dF9jYXN0PFRTaEhhbmRsZUJhc2UqPihsaW5rSGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIg
PSBzdGF0aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisKKyAgICBpZiAo
bGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbGlua2VyLT5pbmZvU2luay5p
bmZvLmVyYXNlKCk7CisgICAgbGlua2VyLT5pbmZvU2luay5vYmouZXJhc2UoKTsKKworICAgIHsv
LyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUhhbmRs
ZXM7ICsraSkgeworICAgICAgICAgICAgaWYgKGNPYmplY3RzW2ldLT5nZXRBc0NvbXBpbGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoISBjT2JqZWN0c1tpXS0+Z2V0QXNDb21waWxlcigpLT5s
aW5rYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtlci0+aW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhFcnJvciwgIk5vdCBhbGwgc2hhZGVycyBoYXZlIHZhbGlkIG9iamVjdCBj
b2RlLiIpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ym9vbCByZXQgPSBsaW5rZXItPmxpbmsoY09iamVjdHMpOworCisgICAgcmV0dXJuIHJldCA/IDEg
OiAwOworfQorCisvLworLy8gU2hTZXRFbmNycHl0aW9uTWV0aG9kIGlzIGEgcGxhY2UtaG9sZGVy
IGZvciBzcGVjaWZ5aW5nCisvLyBob3cgc291cmNlIGNvZGUgaXMgZW5jcnlwdGVkLgorLy8KK3Zv
aWQgU2hTZXRFbmNyeXB0aW9uTWV0aG9kKFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoaGFu
ZGxlID09IDApCisgICAgICAgIHJldHVybjsKK30KKworLy9KdXN0IGEgcGxhY2Vob2xkZXIgZm9y
IGZ1dHVyZSBjb2RlCitjb25zdCBjaGFyKiBTaEdldFZhbGlkYXRvckxvZyhjb25zdCBTaEhhbmRs
ZSBoYW5kbGUpCit7CisgICAgICAgIHJldHVybiAiIjsKK30KKworLy8KKy8vIFJldHVybiBhbnkg
Y29tcGlsZXIvbGlua2VyL3VuaWZvcm1tYXAgbG9nIG9mIG1lc3NhZ2VzIGZvciB0aGUgYXBwbGlj
YXRpb24uCisvLworY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSog
YmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZvU2lu
ayogaW5mb1Npbms7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBp
bmZvU2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKyAgICBl
bHNlIGlmIChiYXNlLT5nZXRBc0xpbmtlcigpKQorICAgICAgICBpbmZvU2luayA9ICYoYmFzZS0+
Z2V0QXNMaW5rZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisKKyAgICBpbmZvU2luay0+aW5mbyA8PCBp
bmZvU2luay0+ZGVidWcuY19zdHIoKTsKKyAgICByZXR1cm4gaW5mb1NpbmstPmluZm8uY19zdHIo
KTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgdW5saW5rZWQgb2JqZWN0IGNvZGUuCisvLworY29u
c3QgY2hhciogU2hHZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBp
ZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRp
Y19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZvU2luayogaW5mb1Npbms7
CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBpbmZvU2luayA9ICYo
YmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKworICAgIHJldHVybiBpbmZv
U2luay0+b2JqLmNfc3RyKCk7Cit9CisKKy8vCisvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBiaW5h
cnkgY29kZSBmcm9tIHRoZSBsaW5rIHByb2Nlc3MuICBTdHJ1Y3R1cmUKKy8vIGlzIG1hY2hpbmUg
ZGVwZW5kZW50LgorLy8KK2NvbnN0IHZvaWQqIFNoR2V0RXhlY3V0YWJsZShjb25zdCBTaEhhbmRs
ZSBoYW5kbGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRs
ZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwor
ICAgIAorICAgIFRMaW5rZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5n
ZXRBc0xpbmtlcigpKTsKKyAgICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGxpbmtlci0+Z2V0T2JqZWN0Q29kZSgpOworfQorCisvLworLy8gTGV0IHRo
ZSBsaW5rZXIga25vdyB3aGVyZSB0aGUgYXBwbGljYXRpb24gc2FpZCBpdCdzIGF0dHJpYnV0ZXMg
YXJlIGJvdW5kLgorLy8gVGhlIGxpbmtlciBkb2VzIG5vdCB1c2UgdGhlc2UgdmFsdWVzLCB0aGV5
IGFyZSByZW1hcHBlZCBieSB0aGUgSUNEIG9yCisvLyBoYXJkd2FyZS4gIEl0IGp1c3QgbmVlZHMg
dGhlbSB0byBrbm93IHdoYXQncyBhbGlhc2VkLgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4g
dmFsdWUgb2YgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFp
bHVyZS4KKy8vCitpbnQgU2hTZXRWaXJ0dWFsQXR0cmlidXRlQmluZGluZ3MoY29uc3QgU2hIYW5k
bGUgaGFuZGxlLCBjb25zdCBTaEJpbmRpbmdUYWJsZSogdGFibGUpCit7ICAgIAorICAgIGlmICgh
SW5pdFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYW5kbGUgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUTGlua2VyKiBsaW5rZXIgPSBz
dGF0aWNfY2FzdDxUTGlua2VyKj4oYmFzZS0+Z2V0QXNMaW5rZXIoKSk7CisKKyAgICBpZiAobGlu
a2VyID09IDApCisgICAgICAgIHJldHVybiAwOworICAgCisgICAgbGlua2VyLT5zZXRBcHBBdHRy
aWJ1dGVCaW5kaW5ncyh0YWJsZSk7CisKKyAgICByZXR1cm4gMTsKK30KKworLy8KKy8vIExldCB0
aGUgbGlua2VyIGtub3cgd2hlcmUgdGhlIHByZWRlZmluZWQgYXR0cmlidXRlcyBoYXZlIHRvIGxp
dmUuCisvLworaW50IFNoU2V0Rml4ZWRBdHRyaWJ1dGVCaW5kaW5ncyhjb25zdCBTaEhhbmRsZSBo
YW5kbGUsIGNvbnN0IFNoQmluZGluZ1RhYmxlKiB0YWJsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJl
YWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAg
IHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVExpbmtlciogbGlua2VyID0gc3RhdGljX2Nh
c3Q8VExpbmtlcio+KGJhc2UtPmdldEFzTGlua2VyKCkpOworCisgICAgaWYgKGxpbmtlciA9PSAw
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxpbmtlci0+c2V0Rml4ZWRBdHRyaWJ1dGVCaW5k
aW5ncyh0YWJsZSk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vCisvLyBTb21lIGF0dHJpYnV0ZSBs
b2NhdGlvbnMgYXJlIG9mZi1saW1pdHMgdG8gdGhlIGxpbmtlci4uLgorLy8KK2ludCBTaEV4Y2x1
ZGVBdHRyaWJ1dGVzKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgaW50ICphdHRyaWJ1dGVzLCBpbnQg
Y291bnQpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJh
c2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAg
IFRMaW5rZXIqIGxpbmtlciA9IHN0YXRpY19jYXN0PFRMaW5rZXIqPihiYXNlLT5nZXRBc0xpbmtl
cigpKTsKKyAgICBpZiAobGlua2VyID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbGlu
a2VyLT5zZXRFeGNsdWRlZEF0dHJpYnV0ZXMoYXR0cmlidXRlcywgY291bnQpOworCisgICAgcmV0
dXJuIDE7Cit9CisKKy8vCisvLyBSZXR1cm4gdGhlIGluZGV4IGZvciBPcGVuR0wgdG8gdXNlIGZv
ciBrbm93aW5nIHdoZXJlIGEgdW5pZm9ybSBsaXZlcy4KKy8vCisvLyBSZXR1cm46ICBUaGUgcmV0
dXJuIHZhbHVlIG9mIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9y
IGZhaWx1cmUuCisvLworaW50IFNoR2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJh
c2UqPihoYW5kbGUpOworICAgIFRVbmlmb3JtTWFwKiB1bmlmb3JtTWFwPSBiYXNlLT5nZXRBc1Vu
aWZvcm1NYXAoKTsKKyAgICBpZiAodW5pZm9ybU1hcCA9PSAwKQorICAgICAgICByZXR1cm4gLTE7
CisKKyAgICByZXR1cm4gdW5pZm9ybU1hcC0+Z2V0TG9jYXRpb24obmFtZSk7Cit9CisKSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLworLy8gU3ltYm9sIHRhYmxlIGZvciBwYXJzaW5nLiAgTW9z
dCBmdW5jdGlvbmFsaXkgYW5kIG1haW4gaWRlYXMKKy8vIGFyZSBkb2N1bWVudGVkIGluIHRoZSBo
ZWFkZXIgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorCisj
aW5jbHVkZSA8c3RkaW8uaD4KKworLy8KKy8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBh
IHBsYWNlIHRvIGxpdmUuCisvLworCisvLworLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFuZ2xl
ZCBuYW1lcy4KKy8vCit2b2lkIFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmIG1hbmds
ZWROYW1lKQoreworICAgIGlmIChpc01hdHJpeCgpKQorICAgICAgICBtYW5nbGVkTmFtZSArPSAn
bSc7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3Yn
OworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAg
IG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidEludDogICAgICAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0Qm9v
bDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVhazsK
KyAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAg
IGJyZWFrOworICAgIGNhc2UgRWJ0U3RydWN0OgorICAgICAgICBtYW5nbGVkTmFtZSArPSAic3Ry
dWN0LSI7CisgICAgICAgIGlmICh0eXBlTmFtZSkKKyAgICAgICAgICAgIG1hbmdsZWROYW1lICs9
ICp0eXBlTmFtZTsKKyAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7CisgICAgICAgICAgICAgICAgKCpzdHJ1
Y3R1cmUpW2ldLnR5cGUtPmJ1aWxkTWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0Tm9taW5hbFNpemUo
KSk7CisgICAgaWYgKGlzQXJyYXkoKSkgeworICAgICAgICBjaGFyIGJ1ZlsyMF07CisgICAgICAg
IHNwcmludGYoYnVmLCAiJWQiLCBhcnJheVNpemUpOworICAgICAgICBtYW5nbGVkTmFtZSArPSAn
Wyc7CisgICAgICAgIG1hbmdsZWROYW1lICs9IGJ1ZjsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
J10nOworICAgIH0KK30KKworaW50IFRUeXBlOjpnZXRTdHJ1Y3RTaXplKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWdldFN0cnVjdCgpKSB7CisgICAgICAgIGFzc2VydChmYWxzZSAmJiAiTm90IGEgc3Ry
dWN0Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzdHJ1Y3R1cmVTaXpl
ID09IDApCisgICAgICAgIGZvciAoVFR5cGVMaXN0OjppdGVyYXRvciB0bCA9IGdldFN0cnVjdCgp
LT5iZWdpbigpOyB0bCAhPSBnZXRTdHJ1Y3QoKS0+ZW5kKCk7IHRsKyspCisgICAgICAgICAgICBz
dHJ1Y3R1cmVTaXplICs9ICgoKnRsKS50eXBlKS0+Z2V0T2JqZWN0U2l6ZSgpOworCisgICAgcmV0
dXJuIHN0cnVjdHVyZVNpemU7Cit9CisKKy8vCisvLyBEdW1wIGZ1bmN0aW9ucy4KKy8vCisKK3Zv
aWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Cit7CisgICAgaW5m
b1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxp
ZmllclN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8
PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7CisgICAg
ICAgIGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOworICAgIH0KKyAgICBpbmZvU2luay5kZWJ1ZyA8
PCAiXG4iOworfQorCit2b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBj
b25zdAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIg
PDwgIHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUo
KS5jX3N0cigpIDw8ICJcbiI7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVElu
Zm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0
OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkK
KyAgICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKK30KKwordm9pZCBUU3ltYm9s
VGFibGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBmb3IgKGludCBs
ZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisgICAgICAgIGlu
Zm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7CisgICAgICAgIHRhYmxl
W2xldmVsXS0+ZHVtcChpbmZvU2luayk7CisgICAgfQorfQorCisvLworLy8gRnVuY3Rpb25zIGhh
dmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KKy8vCitURnVuY3Rpb246On5URnVuY3Rpb24o
KQoreworICAgIGZvciAoVFBhcmFtTGlzdDo6aXRlcmF0b3IgaSA9IHBhcmFtZXRlcnMuYmVnaW4o
KTsgaSAhPSBwYXJhbWV0ZXJzLmVuZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkpLnR5cGU7
Cit9CisKKy8vCisvLyBTeW1ib2wgdGFibGUgbGV2ZWxzIGFyZSBhIG1hcCBvZiBwb2ludGVycyB0
byBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorLy8KK1RTeW1ib2xUYWJsZUxldmVs
Ojp+VFN5bWJvbFRhYmxlTGV2ZWwoKQoreworICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9
IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICBkZWxldGUg
KCppdCkuc2Vjb25kOworfQorCisvLworLy8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGlu
IHRoZSB0YWJsZSB3aXRoIHRoZSBub24tbWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxhdGVkIHRv
IHRoZSBwcm92aWRlZCBidWlsdC1pbiBvcGVyYXRpb24uICBUaGlzIGlzIGEgbG93CisvLyBwZXJm
b3JtYW5jZSBvcGVyYXRpb24sIGFuZCBvbmx5IGludGVuZGVkIGZvciBzeW1ib2wgdGFibGVzIHRo
YXQKKy8vIGxpdmUgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbXBpbGVzLgorLy8KK3ZvaWQg
VFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9w
ZXJhdG9yIG9wKQoreworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGxl
dmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0
KS5zZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlv
biA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KCgqaXQpLnNlY29uZCk7CisgICAgICAgICAgICBp
ZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9u
LT5yZWxhdGVUb09wZXJhdG9yKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCitUU3ltYm9s
OjpUU3ltYm9sKGNvbnN0IFRTeW1ib2wmIGNvcHlPZikKK3sKKyAgICBuYW1lID0gTmV3UG9vbFRT
dHJpbmcoY29weU9mLm5hbWUtPmNfc3RyKCkpOworICAgIHVuaXF1ZUlkID0gY29weU9mLnVuaXF1
ZUlkOworfQorCitUVmFyaWFibGU6OlRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUmIGNvcHlPZiwg
VFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpIDogVFN5bWJvbChjb3B5T2YpCit7CisgICAgdHlwZS5j
b3B5VHlwZShjb3B5T2YudHlwZSwgcmVtYXBwZXIpOworICAgIHVzZXJUeXBlID0gY29weU9mLnVz
ZXJUeXBlOworICAgIC8vIGZvciBidWlsdEluIHN5bWJvbCB0YWJsZSBsZXZlbCwgdW5pb25BcnJh
eSBhbmQgYXJyYXlJbmZvcm1hdGlvbiBwb2ludGVycyBzaG91bGQgYmUgTlVMTAorICAgIGFzc2Vy
dChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7CisgICAgYXJyYXlJbmZvcm1hdGlv
blR5cGUgPSAwOworCisgICAgaWYgKGNvcHlPZi51bmlvbkFycmF5KSB7CisgICAgICAgIGFzc2Vy
dCghY29weU9mLnR5cGUuZ2V0U3RydWN0KCkpOworICAgICAgICBhc3NlcnQoY29weU9mLnR5cGUu
Z2V0T2JqZWN0U2l6ZSgpID09IDEpOworICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXlbMF0gPSBjb3B5T2YudW5pb25BcnJheVswXTsK
KyAgICB9IGVsc2UKKyAgICAgICAgdW5pb25BcnJheSA9IDA7Cit9CisKK1RWYXJpYWJsZSogVFZh
cmlhYmxlOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKK3sKKyAgICBUVmFyaWFibGUg
KnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgqdGhpcywgcmVtYXBwZXIpOworCisgICAgcmV0dXJu
IHZhcmlhYmxlOworfQorCitURnVuY3Rpb246OlRGdW5jdGlvbihjb25zdCBURnVuY3Rpb24mIGNv
cHlPZiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpIDogVFN5bWJvbChjb3B5T2YpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5T2YucGFyYW1ldGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICBwYXJhbWV0ZXJzLnB1c2hf
YmFjayhwYXJhbSk7CisgICAgICAgIHBhcmFtZXRlcnMuYmFjaygpLmNvcHlQYXJhbShjb3B5T2Yu
cGFyYW1ldGVyc1tpXSwgcmVtYXBwZXIpOworICAgIH0KKworICAgIHJldHVyblR5cGUuY29weVR5
cGUoY29weU9mLnJldHVyblR5cGUsIHJlbWFwcGVyKTsKKyAgICBtYW5nbGVkTmFtZSA9IGNvcHlP
Zi5tYW5nbGVkTmFtZTsKKyAgICBvcCA9IGNvcHlPZi5vcDsKKyAgICBkZWZpbmVkID0gY29weU9m
LmRlZmluZWQ7Cit9CisKK1RGdW5jdGlvbiogVEZ1bmN0aW9uOjpjbG9uZShUU3RydWN0dXJlTWFw
JiByZW1hcHBlcikKK3sKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigq
dGhpcywgcmVtYXBwZXIpOworCisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitUU3ltYm9sVGFi
bGVMZXZlbCogVFN5bWJvbFRhYmxlTGV2ZWw6OmNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVy
KQoreworICAgIFRTeW1ib2xUYWJsZUxldmVsICpzeW1UYWJsZUxldmVsID0gbmV3IFRTeW1ib2xU
YWJsZUxldmVsKCk7CisgICAgdExldmVsOjppdGVyYXRvciBpdGVyOworICAgIGZvciAoaXRlciA9
IGxldmVsLmJlZ2luKCk7IGl0ZXIgIT0gbGV2ZWwuZW5kKCk7ICsraXRlcikgeworICAgICAgICBz
eW1UYWJsZUxldmVsLT5pbnNlcnQoKml0ZXItPnNlY29uZC0+Y2xvbmUocmVtYXBwZXIpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc3ltVGFibGVMZXZlbDsKK30KKwordm9pZCBUU3ltYm9sVGFibGU6
OmNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlPZikKK3sKKyAgICBUU3RydWN0dXJl
TWFwIHJlbWFwcGVyOworICAgIHVuaXF1ZUlkID0gY29weU9mLnVuaXF1ZUlkOworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnRhYmxlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIHRhYmxlLnB1c2hfYmFjayhjb3B5T2YudGFibGVbaV0tPmNsb25lKHJlbWFwcGVyKSk7Cisg
ICAgfQorICAgIGZvciggdW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnByZWNpc2lvblN0
YWNrLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hfYmFjayggY29w
eU9mLnByZWNpc2lvblN0YWNrW2ldICk7CisgICAgfQorfQpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KKyNkZWZpbmUgX1NZTUJPTF9UQUJMRV9JTkNM
VURFRF8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIEhhcyB0aGVzZSBkZXNp
Z24gY2hhcmFjdGVyaXN0aWNzOgorLy8KKy8vICogU2FtZSBzeW1ib2wgdGFibGUgY2FuIGJlIHVz
ZWQgdG8gY29tcGlsZSBtYW55IHNoYWRlcnMsIHRvIHByZXNlcnZlCisvLyAgIGVmZm9ydCBvZiBj
cmVhdGluZyBhbmQgbG9hZGluZyB3aXRoIHRoZSBsYXJnZSBudW1iZXJzIG9mIGJ1aWx0LWluCisv
LyAgIHN5bWJvbHMuCisvLworLy8gKiBOYW1lIG1hbmdsaW5nIHdpbGwgYmUgdXNlZCB0byBnaXZl
IGVhY2ggZnVuY3Rpb24gYSB1bmlxdWUgbmFtZQorLy8gICBzbyB0aGF0IHN5bWJvbCB0YWJsZSBs
b29rdXBzIGFyZSBuZXZlciBhbWJpZ3VvdXMuICBUaGlzIGFsbG93cworLy8gICBhIHNpbXBsZXIg
c3ltYm9sIHRhYmxlIHN0cnVjdHVyZS4KKy8vCisvLyAqIFB1c2hpbmcgYW5kIHBvcHBpbmcgb2Yg
c2NvcGUsIHNvIHN5bWJvbCB0YWJsZSB3aWxsIHJlYWxseSBiZSBhIHN0YWNrIAorLy8gICBvZiBz
eW1ib2wgdGFibGVzLiAgU2VhcmNoZWQgZnJvbSB0aGUgdG9wLCB3aXRoIG5ldyBpbnNlcnRzIGdv
aW5nIGludG8KKy8vICAgdGhlIHRvcC4KKy8vCisvLyAqIENvbnN0YW50czogIENvbXBpbGUgdGlt
ZSBjb25zdGFudCBzeW1ib2xzIHdpbGwga2VlcCB0aGVpciB2YWx1ZXMKKy8vICAgaW4gdGhlIHN5
bWJvbCB0YWJsZS4gIFRoZSBwYXJzZXIgY2FuIHN1YnN0aXR1dGUgY29uc3RhbnRzIGF0IHBhcnNl
CisvLyAgIHRpbWUsIGluY2x1ZGluZyBkb2luZyBjb25zdGFudCBmb2xkaW5nIGFuZCBjb25zdGFu
dCBwcm9wYWdhdGlvbi4KKy8vCisvLyAqIE5vIHRlbXBvcmFyaWVzOiAgVGVtcG9yYXJpZXMgbWFk
ZSBmcm9tIG9wZXJhdGlvbnMgKCssIC0tLCAueHksIGV0Yy4pCisvLyAgIGFyZSB0cmFja2VkIGlu
IHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24sIG5vdCB0aGUgc3ltYm9sIHRhYmxlLgor
Ly8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0lu
Zm9TaW5rLmgiCisKKy8vCisvLyBTeW1ib2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQgZnVuY3Rp
b25zIG9yIHZhcmlhYmxlcyBvdXQgb2YgdGhlc2UuLi4pCisvLworY2xhc3MgVFN5bWJvbCB7ICAg
IAorcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9j
YXRvcikKKyAgICBUU3ltYm9sKGNvbnN0IFRTdHJpbmcgKm4pIDogIG5hbWUobikgeyB9CisgICAg
dmlydHVhbCB+VFN5bWJvbCgpIHsgLyogZG9uJ3QgZGVsZXRlIG5hbWUsIGl0J3MgZnJvbSB0aGUg
cG9vbCAqLyB9CisgICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuICpu
YW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIGdldE5hbWUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5pcXVl
SWQgPSBpZDsgfQorICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1ZUlk
OyB9CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QgPSAw
OwkKKyAgICBUU3ltYm9sKGNvbnN0IFRTeW1ib2wmKTsKKyAgICB2aXJ0dWFsIFRTeW1ib2wqIGNs
b25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBjb25z
dCBUU3RyaW5nICpuYW1lOworICAgIHVuc2lnbmVkIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3Ig
cmVhbCBjb21wYXJpbmcgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgorfTsKKworLy8KKy8vIFZhcmlh
YmxlIGNsYXNzLCBtZWFuaW5nIGEgc3ltYm9sIHRoYXQncyBub3QgYSBmdW5jdGlvbi4KKy8vIAor
Ly8gVGhlcmUgY291bGQgYmUgYSBzZXBhcmF0ZSBjbGFzcyBoZWlyYXJjaHkgZm9yIENvbnN0YW50
IHZhcmlhYmxlczsKKy8vIE9ubHkgb25lIG9mIGludCwgYm9vbCwgb3IgZmxvYXQsIChvciBub25l
KSBpcyBjb3JyZWN0IGZvcgorLy8gYW55IHBhcnRpY3VsYXIgdXNlLCBidXQgaXQncyBlYXN5IHRv
IGRvIHRoaXMgd2F5LCBhbmQgZG9lc24ndAorLy8gc2VlbSB3b3J0aCBoYXZpbmcgc2VwYXJhdGUg
Y2xhc3NlcywgYW5kICJnZXRDb25zdCIgY2FuJ3Qgc2ltcGx5IHJldHVybgorLy8gZGlmZmVyZW50
IHZhbHVlcyBmb3IgZGlmZmVyZW50IHR5cGVzIHBvbHltb3JwaGljYWxseSwgc28gdGhpcyBpcyAK
Ky8vIGp1c3Qgc2ltcGxlIGFuZCBwcmFnbWF0aWMuCisvLworY2xhc3MgVFZhcmlhYmxlIDogcHVi
bGljIFRTeW1ib2wgeworcHVibGljOgorICAgIFRWYXJpYWJsZShjb25zdCBUU3RyaW5nICpuYW1l
LCBjb25zdCBUVHlwZSYgdCwgYm9vbCB1VCA9IGZhbHNlICkgOiBUU3ltYm9sKG5hbWUpLCB0eXBl
KHQpLCB1c2VyVHlwZSh1VCksIHVuaW9uQXJyYXkoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDAp
IHsgfQorICAgIHZpcnR1YWwgflRWYXJpYWJsZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Zh
cmlhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAKKyAgICBUVHlwZSYgZ2V0VHlwZSgp
IHsgcmV0dXJuIHR5cGU7IH0gICAgCisgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7
IHJldHVybiB0eXBlOyB9CisgICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNl
clR5cGU7IH0KKyAgICB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikg
eyB0eXBlLmNoYW5nZVF1YWxpZmllcihxdWFsaWZpZXIpOyB9CisgICAgdm9pZCB1cGRhdGVBcnJh
eUluZm9ybWF0aW9uVHlwZShUVHlwZSAqdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0K
KyAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSB7IHJldHVybiBhcnJheUluZm9y
bWF0aW9uVHlwZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2lu
aykgY29uc3Q7CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQorICAgIHsg
CisgICAgICAgIGlmICghdW5pb25BcnJheSkKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07CisKKyAgICAgICAgcmV0dXJuIHVu
aW9uQXJyYXk7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkg
Y29uc3QgeyByZXR1cm4gdW5pb25BcnJheTsgfQorCisgICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRl
ciggQ29uc3RhbnRVbmlvbiAqY29uc3RBcnJheSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlv
bkFycmF5OworICAgICAgICB1bmlvbkFycmF5ID0gY29uc3RBcnJheTsgIAorICAgIH0KKyAgICBU
VmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOyAvLyBj
b3B5IGNvbnN0cnVjdG9yCisgICAgdmlydHVhbCBUVmFyaWFibGUqIGNsb25lKFRTdHJ1Y3R1cmVN
YXAmIHJlbWFwcGVyKTsKKworcHJvdGVjdGVkOgorICAgIFRUeXBlIHR5cGU7CisgICAgYm9vbCB1
c2VyVHlwZTsKKyAgICAvLyB3ZSBhcmUgYXNzdW1pbmcgdGhhdCBQb29sIEFsbG9jYXRvciB3aWxs
IGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdW5pb25BcnJheQorICAgIC8vIHdoZW4gdGhp
cyBvYmplY3QgaXMgZGVzdHJveWVkCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAg
ICBUVHlwZSAqYXJyYXlJbmZvcm1hdGlvblR5cGU7ICAvLyB0aGlzIGlzIHVzZWQgZm9yIHVwZGF0
aW5nIG1heEFycmF5U2l6ZSBpbiBhbGwgdGhlIHJlZmVyZW5jZXMgdG8gYSBnaXZlbiBzeW1ib2wK
K307CisKKy8vCisvLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIHN5bWJvbHMgYW5kIHRoZSBw
YXJzZXIgd2lsbCBuZWVkIHRvCisvLyBzaGFyZSB0aGlzIGRlZmluaXRpb24gb2YgYSBmdW5jdGlv
biBwYXJhbWV0ZXIuCisvLworc3RydWN0IFRQYXJhbWV0ZXIgeworICAgIFRTdHJpbmcgKm5hbWU7
CisgICAgVFR5cGUqIHR5cGU7CisgICAgdm9pZCBjb3B5UGFyYW0oY29uc3QgVFBhcmFtZXRlciYg
cGFyYW0sIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgbmFtZSA9IE5l
d1Bvb2xUU3RyaW5nKHBhcmFtLm5hbWUtPmNfc3RyKCkpOworICAgICAgICB0eXBlID0gcGFyYW0u
dHlwZS0+Y2xvbmUocmVtYXBwZXIpOworICAgIH0KK307CisKKy8vCisvLyBUaGUgZnVuY3Rpb24g
c3ViLWNsYXNzIG9mIGEgc3ltYm9sLiAgCisvLworY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRT
eW1ib2wgeworcHVibGljOgorICAgIFRGdW5jdGlvbihUT3BlcmF0b3IgbykgOgorICAgICAgICBU
U3ltYm9sKDApLAorICAgICAgICByZXR1cm5UeXBlKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCkpLAorICAgICAgICBvcChvKSwKKyAgICAgICAgZGVmaW5lZChmYWxzZSkgeyB9CisgICAgVEZ1
bmN0aW9uKGNvbnN0IFRTdHJpbmcgKm5hbWUsIFRUeXBlJiByZXRUeXBlLCBUT3BlcmF0b3IgdE9w
ID0gRU9wTnVsbCkgOiAKKyAgICAgICAgVFN5bWJvbChuYW1lKSwgCisgICAgICAgIHJldHVyblR5
cGUocmV0VHlwZSksCisgICAgICAgIG1hbmdsZWROYW1lKFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgq
bmFtZSkpLAorICAgICAgICBvcCh0T3ApLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAg
ICB2aXJ0dWFsIH5URnVuY3Rpb24oKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisKKyAgICBzdGF0aWMgVFN0cmluZyBtYW5nbGVOYW1l
KGNvbnN0IFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJuIG5hbWUgKyAnKCc7IH0KKyAgICBzdGF0aWMg
VFN0cmluZyB1bm1hbmdsZU5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZE5hbWUpCisgICAgewor
ICAgICAgICByZXR1cm4gVFN0cmluZyhtYW5nbGVkTmFtZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5m
aW5kX2ZpcnN0X29mKCcoJykpOworICAgIH0KKworICAgIHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJh
bWV0ZXImIHApIAorICAgIHsgCisgICAgICAgIHBhcmFtZXRlcnMucHVzaF9iYWNrKHApOworICAg
ICAgICBtYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lICsgcC50eXBlLT5nZXRNYW5nbGVkTmFtZSgp
OworICAgIH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbWFuZ2xlZE5hbWU7IH0KKyAgICBjb25zdCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoVE9w
ZXJhdG9yIG8pIHsgb3AgPSBvOyB9CisgICAgVE9wZXJhdG9yIGdldEJ1aWx0SW5PcCgpIGNvbnN0
IHsgcmV0dXJuIG9wOyB9CisgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsg
fQorICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQorCisgICAgaW50IGdl
dFBhcmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMu
c2l6ZSgpKTsgfSAgICAKKyAgICBUUGFyYW1ldGVyJiBvcGVyYXRvciBbXShpbnQgaSkgICAgICAg
eyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorICAgIGNvbnN0IFRQYXJhbWV0ZXImIG9wZXJhdG9y
IFtdKGludCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICBURnVuY3Rpb24oY29u
c3QgVEZ1bmN0aW9uJiwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworICAgIHZpcnR1YWwgVEZ1
bmN0aW9uKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAg
ICB0eXBlZGVmIFRWZWN0b3I8VFBhcmFtZXRlcj4gVFBhcmFtTGlzdDsKKyAgICBUUGFyYW1MaXN0
IHBhcmFtZXRlcnM7CisgICAgVFR5cGUgcmV0dXJuVHlwZTsKKyAgICBUU3RyaW5nIG1hbmdsZWRO
YW1lOworICAgIFRPcGVyYXRvciBvcDsKKyAgICBib29sIGRlZmluZWQ7Cit9OworCisKK2NsYXNz
IFRTeW1ib2xUYWJsZUxldmVsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywg
VFN5bWJvbCo+IHRMZXZlbDsKKyAgICB0eXBlZGVmIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBjb25zdCB0TGV2ZWw6OnZhbHVlX3R5cGUgdExldmVs
UGFpcjsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjx0TGV2ZWw6Oml0ZXJhdG9yLCBib29sPiB0SW5z
ZXJ0UmVzdWx0OworCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxs
b2NhdG9yKQorICAgIFRTeW1ib2xUYWJsZUxldmVsKCkgeyB9CisgICAgflRTeW1ib2xUYWJsZUxl
dmVsKCk7CisKKyAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpIAorICAgIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRlZCB0
byB0aGUgdGFibGUKKyAgICAgICAgLy8KKyAgICAgICAgdEluc2VydFJlc3VsdCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdCA9IGxldmVsLmluc2VydCh0TGV2ZWxQYWlyKHN5bWJvbC5nZXRNYW5nbGVk
TmFtZSgpLCAmc3ltYm9sKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7CisgICAg
fQorCisgICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsK
KyAgICAgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdCA9IGxldmVsLmZpbmQobmFtZSk7Cisg
ICAgICAgIGlmIChpdCA9PSBsZXZlbC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOworICAgIH0KKworICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZXZl
bC5iZWdpbigpOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbGV2ZWwuZW5kKCk7CisgICAgfQorCisgICAgdm9pZCByZWxhdGVU
b09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCk7CisgICAgdm9pZCBkdW1w
KFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworICAgIFRTeW1ib2xUYWJsZUxldmVsKiBjbG9u
ZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICB0TGV2ZWwgbGV2
ZWw7Cit9OworCitjbGFzcyBUU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIFRTeW1ib2xUYWJs
ZSgpIDogdW5pcXVlSWQoMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBzeW1i
b2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CisgICAg
ICAgIC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwgY2FsbCB0byBwdXNoKCkgY2FuIGJlIHVzZWQg
dG8gZGV0ZWN0CisgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4g
cHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgorICAgICAgICAvLworICAgIH0KKworICAgIFRTeW1i
b2xUYWJsZShUU3ltYm9sVGFibGUmIHN5bVRhYmxlKQorICAgIHsKKyAgICAgICAgdGFibGUucHVz
aF9iYWNrKHN5bVRhYmxlLnRhYmxlWzBdKTsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucHVzaF9i
YWNrKCBzeW1UYWJsZS5wcmVjaXNpb25TdGFja1swXSApOworICAgICAgICB1bmlxdWVJZCA9IHN5
bVRhYmxlLnVuaXF1ZUlkOworICAgIH0KKworICAgIH5UU3ltYm9sVGFibGUoKQorICAgIHsKKyAg
ICAgICAgLy8gbGV2ZWwgMCBpcyBhbHdheXMgYnVpbHQgSW4gc3ltYm9scywgc28gd2UgbmV2ZXIg
cG9wIHRoYXQgb3V0CisgICAgICAgIHdoaWxlICh0YWJsZS5zaXplKCkgPiAxKQorICAgICAgICAg
ICAgcG9wKCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUg
aXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYnVpbHQtaW5zLCB0aGVyZSBzaG91bGQKKyAgICAvLyAn
cHVzaCcgY2FsbHMsIHNvIHRoYXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hh
ZGVyCisgICAgLy8gZ2xvYmFscyBhcmUgYXQgbGV2ZWwgMS4KKyAgICAvLworICAgIGJvb2wgaXNF
bXB0eSgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAwOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5M
ZXZlbCgpIHsgcmV0dXJuIGF0U2hhcmVkQnVpbHRJbkxldmVsKCkgfHwgYXREeW5hbWljQnVpbHRJ
bkxldmVsKCk7IH0KKyAgICBib29sIGF0U2hhcmVkQnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFi
bGUuc2l6ZSgpID09IDE7IH0JCisgICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFi
bGUuc2l6ZSgpIDw9IDM7IH0KKyAgICB2b2lkIHB1c2goKQorICAgIHsgCisgICAgICAgIHRhYmxl
LnB1c2hfYmFjayhuZXcgVFN5bWJvbFRhYmxlTGV2ZWwpOworICAgICAgICBwcmVjaXNpb25TdGFj
ay5wdXNoX2JhY2soIFByZWNpc2lvblN0YWNrTGV2ZWwoKSApOworICAgIH0KKworICAgIHZvaWQg
cG9wKCkKKyAgICB7IAorICAgICAgICBkZWxldGUgdGFibGVbY3VycmVudExldmVsKCldOyAKKyAg
ICAgICAgdGFibGUucG9wX2JhY2soKTsgCisgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9iYWNr
KCk7CisgICAgfQorCisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIHsKKyAg
ICAgICAgc3ltYm9sLnNldFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworICAgICAgICByZXR1cm4gdGFi
bGVbY3VycmVudExldmVsKCldLT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBUU3ltYm9s
KiBmaW5kKGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wqIGJ1aWx0SW4gPSAwLCBib29sICpzYW1l
U2NvcGUgPSAwKSAKKyAgICB7CisgICAgICAgIGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOwor
ICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN5bWJv
bCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICAgICAgICAgIC0tbGV2ZWw7CisgICAg
ICAgIH0gd2hpbGUgKHN5bWJvbCA9PSAwICYmIGxldmVsID49IDApOworICAgICAgICBsZXZlbCsr
OworICAgICAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgICAgICpidWlsdEluID0gbGV2ZWwgPT0g
MDsKKyAgICAgICAgaWYgKHNhbWVTY29wZSkKKyAgICAgICAgICAgICpzYW1lU2NvcGUgPSBsZXZl
bCA9PSBjdXJyZW50TGV2ZWwoKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisKKyAg
ICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7IGFzc2VydCh0YWJsZS5zaXpl
KCkgPj0gMyk7IHJldHVybiB0YWJsZVsyXTsgfQorICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihj
b25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApIHsgdGFibGVbMF0tPnJlbGF0ZVRvT3BlcmF0
b3IobmFtZSwgb3ApOyB9CisgICAgaW50IGdldE1heFN5bWJvbElkKCkgeyByZXR1cm4gdW5pcXVl
SWQ7IH0KKyAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgdm9p
ZCBjb3B5VGFibGUoY29uc3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpOworCisgICAgdm9pZCBzZXRE
ZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUsIFRQcmVjaXNpb24gcHJlYyApeworICAg
ICAgICBpZiggdHlwZSAhPSBFYnRGbG9hdCAmJiB0eXBlICE9IEVidEludCApIHJldHVybjsgLy8g
T25seSBzZXQgZGVmYXVsdCBwcmVjaXNpb24gZm9yIGludC9mbG9hdAorICAgICAgICBpbnQgaW5k
ZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkp
IC0gMTsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2tbaW5kZXhPZkxhc3RFbGVtZW50XVt0eXBlXSA9
IHByZWM7IC8vIFVzZXMgbWFwIG9wZXJhdG9yIFtdLCBvdmVyd3JpdGVzIHRoZSBjdXJyZW50IHZh
bHVlCisgICAgfQorCisgICAgLy8gU2VhcmNoZXMgZG93biB0aGUgcHJlY2lzaW9uU3RhY2sgZm9y
IGEgcHJlY2lzaW9uIHF1YWxpZmllciBmb3IgdGhlIHNwZWNpZmllZCBUQmFzaWNUeXBlCisgICAg
VFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworICAgICAg
ICBpZiggdHlwZSAhPSBFYnRGbG9hdCAmJiB0eXBlICE9IEVidEludCApIHJldHVybiBFYnBVbmRl
ZmluZWQ7CisgICAgICAgIGludCBsZXZlbCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3Rh
Y2suc2l6ZSgpKSAtIDE7CisgICAgICAgIGFzc2VydCggbGV2ZWwgPj0gMCk7IC8vIEp1c3QgdG8g
YmUgc2FmZS4gU2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgIFByZWNpc2lvblN0YWNrTGV2ZWw6
Oml0ZXJhdG9yIGl0OworICAgICAgICBUUHJlY2lzaW9uIHByZWMgPSBFYnBVbmRlZmluZWQ7IC8v
IElmIHdlIGRvbnQgZmluZCBhbnl0aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hvdWxkIHdlIGVycm9y
IGNoZWNrIHRoaXM/CisgICAgICAgIHdoaWxlKCBsZXZlbCA+PSAwICl7CisgICAgICAgICAgICBp
dCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS5maW5kKCB0eXBlICk7CisgICAgICAgICAgICBpZigg
aXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLmVuZCgpICl7CisgICAgICAgICAgICAgICAgcHJl
YyA9ICgqaXQpLnNlY29uZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxldmVsLS07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByZWM7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6ICAgIAorICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9CisgICAgYm9vbCBhdER5
bmFtaWNCdWlsdEluTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMjsgfQorCisgICAg
c3RkOjp2ZWN0b3I8VFN5bWJvbFRhYmxlTGV2ZWwqPiB0YWJsZTsKKyAgICB0eXBlZGVmIHN0ZDo6
bWFwPCBUQmFzaWNUeXBlLCBUUHJlY2lzaW9uID4gUHJlY2lzaW9uU3RhY2tMZXZlbDsKKyAgICBz
dGQ6OnZlY3RvcjwgUHJlY2lzaW9uU3RhY2tMZXZlbCA+IHByZWNpc2lvblN0YWNrOworICAgIGlu
dCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5l
cmF0aW9uCit9OworCisjZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xT
TC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgorCitUcmFuc2xhdG9yR0xT
TDo6VHJhbnNsYXRvckdMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKQorICAgIDog
VENvbXBpbGVyKGxhbmcsIHNwZWMpIHsKK30KKworYm9vbCBUcmFuc2xhdG9yR0xTTDo6Y29tcGls
ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woaW5mb1Np
bmsub2JqKTsKKyAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUkdMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNzIFRyYW5zbGF0b3JHTFNMIDogcHVi
bGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNsYXRvckdMU0woRVNoTGFuZ3VhZ2Ug
bGFuZywgRVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9k
ZSogcm9vdCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworVHJhbnNs
YXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykK
KyAgICA6IFRDb21waWxlcihsYW5nLCBzcGVjKQoreworfQorCitib29sIFRyYW5zbGF0b3JITFNM
Ojpjb21waWxlKFRJbnRlcm1Ob2RlICpyb290KQoreworICAgIFRQYXJzZUNvbnRleHQmIHBhcnNl
Q29udGV4dCA9ICpHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyAgICBzaDo6T3V0cHV0SExTTCBv
dXRwdXRITFNMKHBhcnNlQ29udGV4dCk7CisKKyAgICBvdXRwdXRITFNMLm91dHB1dCgpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNM
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
SExTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKworY2xhc3MgVHJhbnNs
YXRvckhMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xhdG9ySExT
TChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpOworICAgIHZpcnR1YWwgYm9vbCBjb21w
aWxlKFRJbnRlcm1Ob2RlKiByb290KTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUkhMU0xfSF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA4IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIF9UWVBFU19JTkNMVURFRAorI2RlZmluZSBfVFlQRVNfSU5D
TFVERUQKKworI2luY2x1ZGUgImNvbXBpbGVyL0Jhc2VUeXBlcy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisKKy8vCisvLyBOZWVk
IHRvIGhhdmUgYXNzb2NpYXRpb24gb2YgbGluZSBudW1iZXJzIHRvIHR5cGVzIGluIGEgbGlzdCBm
b3IgYnVpbGRpbmcgc3RydWN0cy4KKy8vCitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUVHlwZUxpbmUg
eworICAgIFRUeXBlKiB0eXBlOworICAgIGludCBsaW5lOworfTsKK3R5cGVkZWYgVFZlY3RvcjxU
VHlwZUxpbmU+IFRUeXBlTGlzdDsKKworaW5saW5lIFRUeXBlTGlzdCogTmV3UG9vbFRUeXBlTGlz
dCgpCit7CisgICAgdm9pZCogbWVtb3J5ID0gR2xvYmFsUG9vbEFsbG9jYXRvci5hbGxvY2F0ZShz
aXplb2YoVFR5cGVMaXN0KSk7CisgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBlTGlzdDsKK30K
KworLy8KKy8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0aCB0aGUgeWFj
YyBzdGFjaywgIEl0IGNhbid0IGhhdmUKKy8vIHR5cGVzIHRoYXQgaXQgdGhpbmtzIGhhdmUgbm9u
LXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCisvLyBqdXN0IGJlIHVzZWQgd2hpbGUg
cmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9pbnRlcnMKKy8v
IGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9mIG1lbW9yeSBt
YW5hZ2VtZW50IG92ZXJoZWFkLgorLy8KKy8vIE5vdCBhcyBiYWQgYXMgaXQgbG9va3MsIHRoZXJl
IGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcworLy8gbWF0Y2ggdXAgb3Ig
YXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgorLy8KK2NsYXNzIFRQdWJs
aWNUeXBlIHsKK3B1YmxpYzoKKyAgICBUQmFzaWNUeXBlIHR5cGU7CisgICAgVFF1YWxpZmllciBx
dWFsaWZpZXI7CisgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgaW50IHNpemU7ICAgICAg
ICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJyYXkKKyAgICBi
b29sIG1hdHJpeDsKKyAgICBib29sIGFycmF5OworICAgIGludCBhcnJheVNpemU7CisgICAgVFR5
cGUqIHVzZXJEZWY7CisgICAgaW50IGxpbmU7CisKKyAgICB2b2lkIHNldEJhc2ljKFRCYXNpY1R5
cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKKyAgICB7CisgICAgICAgIHR5cGUgPSBi
dDsKKyAgICAgICAgcXVhbGlmaWVyID0gcTsKKyAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5kZWZp
bmVkOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAgICAg
IGFycmF5ID0gZmFsc2U7CisgICAgICAgIGFycmF5U2l6ZSA9IDA7CisgICAgICAgIHVzZXJEZWYg
PSAwOworICAgICAgICBsaW5lID0gbG47CisgICAgfQorCisgICAgdm9pZCBzZXRBZ2dyZWdhdGUo
aW50IHMsIGJvb2wgbSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IHM7CisgICAgICAg
IG1hdHJpeCA9IG07CisgICAgfQorCisgICAgdm9pZCBzZXRBcnJheShib29sIGEsIGludCBzID0g
MCkKKyAgICB7CisgICAgICAgIGFycmF5ID0gYTsKKyAgICAgICAgYXJyYXlTaXplID0gczsKKyAg
ICB9Cit9OworCit0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4gVFN0cnVjdHVy
ZU1hcDsKK3R5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRlcmF0b3IgVFN0
cnVjdHVyZU1hcEl0ZXJhdG9yOworLy8KKy8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhh
dmUgYSB0eXBlLgorLy8KK2NsYXNzIFRUeXBlIHsKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisgICAgZXhwbGljaXQgVFR5cGUoVEJh
c2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgaW50
IHMgPSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShz
KSwgbWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDAp
LCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBl
TmFtZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfQorICAgIGV4cGxpY2l0IFRU
eXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZp
ZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJh
eVNpemUocC5hcnJheVNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9u
VHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
LnVzZXJEZWYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNf
c3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICBleHBsaWNpdCBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNv
bnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZp
ZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBh
cnJheVNpemUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKHVzZXJE
ZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25U
eXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKCkge30KKyAgICB2aXJ0
dWFsIH5UVHlwZSgpIHt9CisKKyAgICBUVHlwZShjb25zdCBUVHlwZSYgdHlwZSkgeyAqdGhpcyA9
IHR5cGU7IH0KKworICAgIHZvaWQgY29weVR5cGUoY29uc3QgVFR5cGUmIGNvcHlPZiwgVFN0cnVj
dHVyZU1hcCYgcmVtYXBwZXIpCisgICAgeworICAgICAgICB0eXBlID0gY29weU9mLnR5cGU7Cisg
ICAgICAgIHByZWNpc2lvbiA9IGNvcHlPZi5wcmVjaXNpb247CisgICAgICAgIHF1YWxpZmllciA9
IGNvcHlPZi5xdWFsaWZpZXI7CisgICAgICAgIHNpemUgPSBjb3B5T2Yuc2l6ZTsKKyAgICAgICAg
bWF0cml4ID0gY29weU9mLm1hdHJpeDsKKyAgICAgICAgYXJyYXkgPSBjb3B5T2YuYXJyYXk7Cisg
ICAgICAgIGFycmF5U2l6ZSA9IGNvcHlPZi5hcnJheVNpemU7CisKKyAgICAgICAgVFN0cnVjdHVy
ZU1hcEl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGlmIChjb3B5T2Yuc3RydWN0dXJlKSB7CisgICAg
ICAgICAgICBpZiAoKGl0ZXIgPSByZW1hcHBlci5maW5kKHN0cnVjdHVyZSkpID09IHJlbWFwcGVy
LmVuZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBuZXcgc3RydWN0dXJlIGhl
cmUKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBOZXdQb29sVFR5cGVMaXN0KCk7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5T2Yuc3RydWN0dXJl
LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7
CisgICAgICAgICAgICAgICAgICAgIHR5cGVMaW5lLmxpbmUgPSAoKmNvcHlPZi5zdHJ1Y3R1cmUp
W2ldLmxpbmU7CisgICAgICAgICAgICAgICAgICAgIHR5cGVMaW5lLnR5cGUgPSAoKmNvcHlPZi5z
dHJ1Y3R1cmUpW2ldLnR5cGUtPmNsb25lKHJlbWFwcGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5wdXNoX2JhY2sodHlwZUxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gaXRlci0+c2Vjb25k
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9
IDA7CisKKyAgICAgICAgZmllbGROYW1lID0gMDsKKyAgICAgICAgaWYgKGNvcHlPZi5maWVsZE5h
bWUpCisgICAgICAgICAgICBmaWVsZE5hbWUgPSBOZXdQb29sVFN0cmluZyhjb3B5T2YuZmllbGRO
YW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlwZU5hbWUgPSAwOworICAgICAgICBpZiAoY29weU9m
LnR5cGVOYW1lKQorICAgICAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhjb3B5T2Yu
dHlwZU5hbWUtPmNfc3RyKCkpOworCisgICAgICAgIG1hbmdsZWQgPSAwOworICAgICAgICBpZiAo
Y29weU9mLm1hbmdsZWQpCisgICAgICAgICAgICBtYW5nbGVkID0gTmV3UG9vbFRTdHJpbmcoY29w
eU9mLm1hbmdsZWQtPmNfc3RyKCkpOworCisgICAgICAgIHN0cnVjdHVyZVNpemUgPSBjb3B5T2Yu
c3RydWN0dXJlU2l6ZTsKKyAgICAgICAgbWF4QXJyYXlTaXplID0gY29weU9mLm1heEFycmF5U2l6
ZTsKKyAgICAgICAgYXNzZXJ0KGNvcHlPZi5hcnJheUluZm9ybWF0aW9uVHlwZSA9PSAwKTsKKyAg
ICAgICAgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSAwOyAvLyBhcnJheUluZm9ybWF0aW9uVHlwZSBz
aG91bGQgbm90IGJlIHNldCBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWwKKyAgICB9CisK
KyAgICBUVHlwZSogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCisgICAgeworICAgICAg
ICBUVHlwZSAqbmV3VHlwZSA9IG5ldyBUVHlwZSgpOworICAgICAgICBuZXdUeXBlLT5jb3B5VHlw
ZSgqdGhpcywgcmVtYXBwZXIpOworCisgICAgICAgIHJldHVybiBuZXdUeXBlOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlKFRCYXNpY1R5cGUgdCwgaW50IHMsIGJvb2wgbSwgYm9v
bCBhLCBpbnQgYVMgPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZSA9IHQ7
IHNpemUgPSBzOyBtYXRyaXggPSBtOyBhcnJheSA9IGE7IGFycmF5U2l6ZSA9IGFTOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0LCBpbnQgcywgYm9vbCBtLCBUVHlwZSog
dXNlckRlZiA9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlID0gdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0cml4ID0gbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh1c2VyRGVmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9
IHVzZXJEZWYtPmdldFN0cnVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bGVhdmUgYXJyYXkgaW5mb3JtYXRpb24gaW50YWN0LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZU5hbWUoY29uc3QgVFN0cmluZyYgbikgeyB0
eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RmllbGROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgZmllbGROYW1lID0gTmV3UG9vbFRTdHJp
bmcobi5jX3N0cigpKTsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0VHlwZU5hbWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0KHR5cGVOYW1lKTsKKyAgICAgICAgcmV0dXJu
ICp0eXBlTmFtZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldEZpZWxk
TmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3NlcnQoZmllbGROYW1lKTsKKyAgICAgICAg
cmV0dXJuICpmaWVsZE5hbWU7CisgICAgfQorCisgICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJh
c2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2aXJ0dWFsIFRQcmVjaXNpb24g
Z2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gcHJlY2lzaW9uOyB9CisgICAgdmlydHVhbCBU
UXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAg
IHZpcnR1YWwgdm9pZCBjaGFuZ2VQcmVjaXNpb24oVFByZWNpc2lvbiBwKSB7IHByZWNpc2lvbiA9
IHA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlUXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkgeyBx
dWFsaWZpZXIgPSBxOyB9CisKKyAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUg
aW5zdGFuY2UgdHlwZQorICAgIHZpcnR1YWwgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZTsgfQorCisgICAgLy8gRnVsbC1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBp
bnN0YW5jZSBvZiB0eXBlCisgICAgdmlydHVhbCBpbnQgZ2V0SW5zdGFuY2VTaXplKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtYXRyaXgpCisgICAgICAgICAgICByZXR1cm4gc2l6ZSAqIHNp
emU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeCA/IHRydWUgOiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5
ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgYm9vbCBpc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmll
bGROYW1lICE9IDA7IH0KKyAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJy
YXlTaXplOyB9CisgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBh
cnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBzZXRNYXhBcnJheVNpemUgKGludCBzKSB7IG1heEFy
cmF5U2l6ZSA9IHM7IH0KKyAgICBpbnQgZ2V0TWF4QXJyYXlTaXplICgpIGNvbnN0IHsgcmV0dXJu
IG1heEFycmF5U2l6ZTsgfQorICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFs
c2U7IGFycmF5U2l6ZSA9IDA7IG1heEFycmF5U2l6ZSA9IDA7IH0KKyAgICB2b2lkIHNldEFycmF5
SW5mb3JtYXRpb25UeXBlKFRUeXBlKiB0KSB7IGFycmF5SW5mb3JtYXRpb25UeXBlID0gdDsgfQor
ICAgIFRUeXBlKiBnZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5
SW5mb3JtYXRpb25UeXBlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSA+IDEgJiYgIW1hdHJpeDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NjYWxhcigp
IGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJhc2ljVHlwZSB0KSB7CisgICAg
ICAgIHN3aXRjaCAodCkgeworICAgICAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1
cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgIHJldHVy
biAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBl
IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIFRUeXBlOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsgfQorICAgIGNvbnN0IGNo
YXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJlY2lzaW9uU3Ry
aW5nKHByZWNpc2lvbik7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoKSBj
b25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpOyB9CisgICAgVFR5
cGVMaXN0KiBnZXRTdHJ1Y3QoKSB7IHJldHVybiBzdHJ1Y3R1cmU7IH0KKworICAgIGludCBnZXRP
YmplY3RTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCB0b3RhbFNpemU7CisKKyAgICAg
ICAgaWYgKGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHRvdGFsU2l6
ZSA9IGdldFN0cnVjdFNpemUoKTsKKyAgICAgICAgZWxzZSBpZiAobWF0cml4KQorICAgICAgICAg
ICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRv
dGFsU2l6ZSA9IHNpemU7CisKKyAgICAgICAgaWYgKGlzQXJyYXkoKSkKKyAgICAgICAgICAgIHRv
dGFsU2l6ZSAqPSBzdGQ6Om1heChnZXRBcnJheVNpemUoKSwgZ2V0TWF4QXJyYXlTaXplKCkpOwor
CisgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgfQorCisgICAgVFR5cGVMaXN0KiBnZXRT
dHJ1Y3QoKSBjb25zdCB7IHJldHVybiBzdHJ1Y3R1cmU7IH0KKyAgICBUU3RyaW5nJiBnZXRNYW5n
bGVkTmFtZSgpIHsKKyAgICAgICAgaWYgKCFtYW5nbGVkKSB7CisgICAgICAgICAgICBtYW5nbGVk
ID0gTmV3UG9vbFRTdHJpbmcoIiIpOworICAgICAgICAgICAgYnVpbGRNYW5nbGVkTmFtZSgqbWFu
Z2xlZCk7CisgICAgICAgICAgICAqbWFuZ2xlZCArPSAnOycgOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICptYW5nbGVkOworICAgIH0KKyAgICBib29sIHNhbWVFbGVtZW50VHlwZShjb25z
dCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdo
dC50eXBlICAgJiYKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYK
KyAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSByaWdodC5tYXRyaXggJiYKKyAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1cmU7CisgICAgfQorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICAgICAgdHlw
ZSA9PSByaWdodC50eXBlICAgJiYKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5z
aXplICAgJiYKKyAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSByaWdodC5tYXRyaXggJiYKKyAg
ICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAgJiYgKCFhcnJheSB8fCBhcnJh
eVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09
IHJpZ2h0LnN0cnVjdHVyZTsKKyAgICAgICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwg
aXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291Z2h0IGFmdGVyCisgICAgfQorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuICFv
cGVyYXRvcj09KHJpZ2h0KTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUm
IHJpZ2h0KSBjb25zdCB7CisgICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0
eXBlIDwgcmlnaHQudHlwZTsKKyAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJu
IHNpemUgPCByaWdodC5zaXplOworICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkg
cmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAgaWYgKGFycmF5ICE9IHJpZ2h0
LmFycmF5KSByZXR1cm4gYXJyYXkgPCByaWdodC5hcnJheTsKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSAhPSByaWdodC5hcnJheVNpemUpIHJldHVybiBhcnJheVNpemUgPCByaWdodC5hcnJheVNpemU7
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gcmlnaHQuc3RydWN0dXJlKSByZXR1cm4gc3RydWN0
dXJlIDwgcmlnaHQuc3RydWN0dXJlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKKyAgICBpbnQgZ2V0U3RydWN0U2l6ZSgp
IGNvbnN0OworCisgICAgVEJhc2ljVHlwZSB0eXBlICAgICAgOiA2OworICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyIDogNzsKKyAgICBpbnQgc2l6ZSAg
ICAgICAgICAgICA6IDg7IC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2Yg
YXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbWF0cml4ICA6IDE7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5ICAgOiAxOworICAgIGludCBhcnJheVNpemU7CisKKyAgICBUVHlwZUxpc3QqIHN0cnVjdHVy
ZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAgbXV0YWJsZSBpbnQgc3Ry
dWN0dXJlU2l6ZTsKKyAgICBpbnQgbWF4QXJyYXlTaXplOworICAgIFRUeXBlKiBhcnJheUluZm9y
bWF0aW9uVHlwZTsKKyAgICBUU3RyaW5nICpmaWVsZE5hbWU7ICAgICAgICAgLy8gZm9yIHN0cnVj
dHVyZSBmaWVsZCBuYW1lcworICAgIFRTdHJpbmcgKm1hbmdsZWQ7CisgICAgVFN0cmluZyAqdHlw
ZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1lCit9OworCisj
ZW5kaWYgLy8gX1RZUEVTX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNlbGVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVj
dC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5m
b1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKK25hbWVzcGFjZSBz
aAoreworVW5mb2xkU2VsZWN0OjpVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwg
T3V0cHV0SExTTCAqb3V0cHV0SExTTCkgOiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wo
b3V0cHV0SExTTCkKK3sKKyAgICBtVGVtcG9yYXJ5SW5kZXggPSAwOworfQorCit2b2lkIFVuZm9s
ZFNlbGVjdDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgbVRlbXBvcmFyeUlu
ZGV4Kys7CisgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKK2Jvb2wgVW5mb2xkU2VsZWN0
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwor
CisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIGlu
dCBpID0gbVRlbXBvcmFyeUluZGV4Kys7CisKKyAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50
eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiB0IiA8PCBpIDw8ICI7XG4iOworCisgICAg
ICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8
ICJpZigiOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhM
U0wpOworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAg
ICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAi
ICAgIHQiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICJlbHNlXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAg
ICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgIiAgICB0IiA8PCBpIDw8ICIgPSAiOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCkt
PnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAg
ICAgICAifVxuIjsKKworICAgICAgICBtVGVtcG9yYXJ5SW5kZXgtLTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2ludCBVbmZvbGRTZWxlY3Q6OmdldFRlbXBvcmFyeUluZGV4KCkK
K3sKKyAgICByZXR1cm4gbVRlbXBvcmFyeUluZGV4OworfQorfQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL1VuZm9sZFNlbGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
ZWxlY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVU5G
T0xEU0VMRUNUX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIE91
dHB1dEhMU0w7CisKK2NsYXNzIFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2Vy
Cit7CisgIHB1YmxpYzoKKyAgICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwg
T3V0cHV0SExTTCAqb3V0cHV0SExTTCk7CisKKyAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2Rl
ICpub2RlKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uICpub2RlKTsKKworICAgIGludCBnZXRUZW1wb3JhcnlJbmRleCgpOworCisgIHByb3Rl
Y3RlZDoKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBPdXRwdXRITFNMICpjb25z
dCBtT3V0cHV0SExTTDsKKworICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Cit9OworfQorCisjZW5k
aWYgICAvLyBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9kZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmNwcDogRGVi
dWdnaW5nIHV0aWxpdGllcy4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisKKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKworc3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0
OworCisjaWZkZWYgVFJBQ0VfRU5BQkxFRAorZXh0ZXJuICJDIiB7Cit2b2lkIFRyYWNlKGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisgICAgaWYgKCFmb3JtYXQpIHJldHVybjsKKworICAgIFRQ
YXJzZUNvbnRleHQqIHBhcnNlQ29udGV4dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAg
IGlmIChwYXJzZUNvbnRleHQpIHsKKyAgICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsK
KyAgICAgICAgdmFfbGlzdCBhcmdzOworICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwor
ICAgICAgICB2c25wcmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7Cisg
ICAgICAgIHZhX2VuZChhcmdzKTsKKworICAgICAgICBwYXJzZUNvbnRleHQtPmluZm9TaW5rLmRl
YnVnIDw8IGJ1ZjsKKyAgICB9Cit9Cit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYgIC8vIFRSQUNF
X0VOQUJMRUQKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvZGVidWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gZGVidWcuaDogRGVidWdnaW5nIHV0aWxpdGllcy4KKworI2lmbmRlZiBD
T01QSUxFUl9ERUJVR19IXworI2RlZmluZSBDT01QSUxFUl9ERUJVR19IXworCisjaW5jbHVkZSA8
YXNzZXJ0Lmg+CisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgVFJBQ0VfRU5BQkxFRCAgLy8gZGVm
aW5lIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlIHRyYWNpbmcKKyNlbmRpZiAgLy8gX0RFQlVHCisK
Ky8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWcgbG9nCisjaWZkZWYgVFJBQ0VfRU5BQkxFRAor
CisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAgLy8gX19jcGx1c3Bs
dXMKK3ZvaWQgVHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworI2lmZGVmICBfX2NwbHVz
cGx1cworfQorI2VuZGlmICAvLyBfX2NwbHVzcGx1cworCisjZWxzZSAgIC8vIFRSQUNFX0VOQUJM
RUQKKworI2RlZmluZSBUcmFjZSguLi4pICgodm9pZCkwKQorCisjZW5kaWYgIC8vIFRSQUNFX0VO
QUJMRUQKKworLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcg
ZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8g
eyBcCisgICAgaWYoIShleHByZXNzaW9uKSkgXAorICAgICAgICBUcmFjZSgiQXNzZXJ0IGZhaWxl
ZDogJXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAor
ICAgIGFzc2VydChleHByZXNzaW9uKTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIFVOSU1QTEVN
RU5URUQoKSBkbyB7IFwKKyAgICBUcmFjZSgiVW5pbXBsZW1lbnRlZCBpbnZva2VkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNlKTsgXAorfSB3
aGlsZSgwKQorCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCisgICAgVHJhY2UoIlVucmVh
Y2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAg
ICBhc3NlcnQoZmFsc2UpOyBcCit9IHdoaWxlKDApCisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX0RF
QlVHX0hfCisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAwIEBACisvKgor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKyovCisvKiBCYXNlZCBvbgorQU5TSSBDIGdyYW1tYXIsIExleCBz
cGVjaWZpY2F0aW9uCisKK0luIDE5ODUsIEplZmYgTGVlIHB1Ymxpc2hlZCB0aGlzIExleCBzcGVj
aWZpY2F0aW9uIHRvZ2V0aGVyIHdpdGggYSBZYWNjIAorZ3JhbW1hciBmb3IgdGhlIEFwcmlsIDMw
LCAxOTg1IEFOU0kgQyBkcmFmdC4gIFRvbSBTdG9ja2Zpc2NoIHJlcG9zdGVkIAorYm90aCB0byBu
ZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0IG9yaWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhlIGFu
c3dlciAKK3RvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21wLmxhbmcuYyBGQVEsIGNhbiBiZSBm
dHAnZWQgZnJvbSBmdHAudXUubmV0LCAKK2ZpbGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5n
cmFtbWFyLlouIAorCitJIGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0
aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgCithcyBwb3NzaWJsZTsgcGxlYXNlIGxldCBt
ZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLiAKKworSnV0dGEgRGVnZW5lciwg
MTk5NSAKKyovCisKK0QgICAgICAgICAgIFswLTldCitMICAgICAgICAgICBbYS16QS1aX10KK0gg
ICAgICAgICAgIFthLWZBLUYwLTldCitFICAgICAgICAgICBbRWVdWystXT97RH0rCitPICAgICAg
ICAgICBbMC03XQorCislb3B0aW9uIG5vdW5wdXQgCisleworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgor
I2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KKyNp
ZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQorI2VuZGlmCisK
K2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7CisKK2V4dGVybiBpbnQgeXlw
YXJzZSh2b2lkKik7CisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWws
IHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQorI2RlZmluZSBwYXJzZUNvbnRleHQgKCooKFRQYXJz
ZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpKQorIAorI2RlZmluZSBZWV9JTlBVVChidWYs
cmVzdWx0LG1heF9zaXplKSAocmVzdWx0ID0geXlfaW5wdXQoYnVmLCBtYXhfc2l6ZSkpCisKKyV9
CisKKy8qCitUT0RPKGFsb2twKTogeXlsaW5lbm8gaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xk
IGZsZXguZXhlIGluIGNvbXBpbGVyL3Rvb2xzLgorUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4Y2x1
c2l2ZWx5IHVzZSB0aGUgbmV3ZXIgdmVyc2lvbi4KKyovCislb3B0aW9uIHl5bGluZW5vCisKKyVv
cHRpb24gbm95eXdyYXAKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyV4IEZJRUxEUworCisK
KyUlCis8Kj4iLy8iW15cbl0qIlxuIiAgICAgeyAvKiA/PyBjYXJyaWFnZSBhbmQvb3IgbGluZS1m
ZWVkPyAqLyB9OworCisiaW52YXJpYW50IiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQorImhpZ2hwIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEhJR0hfUFJFQ0lTSU9OKTsgfQorIm1lZGl1bXAiICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1FRElVTV9QUkVDSVNJ
T04pOyB9CisibG93cCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKyJwcmVjaXNpb24iICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihQUkVDSVNJT04pOyB9CisKKyJhdHRyaWJ1dGUiICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBVFRSSUJVVEUpOyB9CisiY29u
c3QiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OU1Rf
UVVBTCk7IH0KKyJ1bmlmb3JtIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihVTklGT1JNKTsgfQorInZhcnlpbmciICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKFZBUllJTkcpOyB9CisKKyJicmVhayIgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihCUkVBSyk7IH0KKyJjb250aW51ZSIgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT05USU5VRSk7IH0KKyJk
byIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihETyk7
IH0KKyJmb3IiICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihGT1IpOyB9Cisid2hpbGUiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oV0hJTEUpOyB9CisKKyJpZiIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihJRik7IH0KKyJlbHNlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihFTFNFKTsgfQorCisiaW4iICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5fUVVBTCk7IH0KKyJvdXQiICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPVVRfUVVBTCk7
IH0KKyJpbm91dCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihJTk9VVF9RVUFMKTsgfQorCisiZmxvYXQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEZMT0FU
X1RZUEUpOyB9CisiaW50IiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKElOVF9UWVBFKTsgfQor
InZvaWQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihWT0lEX1RZUEUpOyB9CisiYm9vbCIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0KKyJ0cnVlIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVy
bihCT09MQ09OU1RBTlQpOyB9CisiZmFsc2UiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4oQk9PTENPTlNUQU5UKTsg
fQorCisiZGlzY2FyZCIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oRElTQ0FSRCk7IH0KKyJyZXR1cm4iICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihSRVRVUk4pOyB9CisKKyJtYXQyIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4oTUFUUklYMik7IH0KKyJtYXQzIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMyk7
IH0KKyJtYXQ0IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYNCk7IH0KKworInZlYzIi
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDMik7IH0KKyJ2ZWMzIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKFZFQzMpOyB9CisidmVjNCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChW
RUM0KTsgfQorIml2ZWMyIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzIpOyB9CisiaXZl
YzMiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQu
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDMyk7IH0KKyJpdmVjNCIgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4gKElWRUM0KTsgfQorImJ2ZWMyIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
biAoQlZFQzIpOyB9CisiYnZlYzMiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0K
KyJidmVjNCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUM0KTsgfQorCisic2FtcGxlcjJE
IiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4
QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCisic3RydWN0IiAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuKFNUUlVDVCk7IH0KKworImFzbSIgICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KKworImNsYXNzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJ1bmlvbiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZW51bSIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInR5cGVk
ZWYiICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ0ZW1wbGF0ZSIgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidGhpcyIgICAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInBhY2tlZCIgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKworImdvdG8iICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJzd2l0Y2giICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisiZGVmYXVsdCIgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisi
aW5saW5lIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorIm5vaW5saW5l
IiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ2b2xhdGlsZSIgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisicHVibGljIiAgICAgICB7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQorInN0YXRpYyIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KKyJleHRlcm4iICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9CisiZXh0ZXJuYWwiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQor
ImludGVyZmFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImxvbmci
ICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJzaG9ydCIgICAgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZG91YmxlIiAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImhhbGYiICAgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKyJmaXhlZCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9CisidW5zaWduZWQiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQorCisiaW5wdXQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorIm91
dHB1dCIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImh2ZWMyIiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJodmVjMyIgICAgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaHZlYzQiICAgICAgICB7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZ2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KKyJmdmVjMyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9CisiZnZlYzQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQor
ImR2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkdmVjMyIg
ICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZHZlYzQiICAgICAgICB7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisic2l6ZW9mIiAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImNhc3QiICAgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKworIm5hbWVzcGFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJ1c2luZyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisKK3tMfSh7TH18e0R9KSogICAgICAgeyAgCisgICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyAKKyAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQp
OyAKKyAgIHJldHVybiBQYUlkZW50T3JUeXBlKCpweXlsdmFsLT5sZXguc3RyaW5nLCBwYXJzZUNv
bnRleHQsIHB5eWx2YWwtPmxleC5zeW1ib2wpOyAKK30KKworMFt4WF17SH0rICAgICAgICAgeyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRl
eHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ciswe099KyAgICAgICAgICAgICB7IHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKzB7RH0rICAgICAgICAgICAgIHsgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBwYXJzZUNvbnRleHQucmVj
b3ZlcigpOyByZXR1cm4gMDt9Cit7RH0rICAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KKwore0R9K3tFfSAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5
dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/IHsgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisiLiJ7RH0rKHtF
fSk/ICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsg
fQorCisiLyoiICAgICAgICAgICAgeyAgaW50IHJldCA9IFBhUGFyc2VDb21tZW50KHB5eWx2YWwt
PmxleC5saW5lLCBwYXJzZUNvbnRleHQpOyBpZiAoIXJldCkgcmV0dXJuIHJldDsgfSAgIAorCisi
Kz0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFE
RF9BU1NJR04pOyB9CisiLT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKFNVQl9BU1NJR04pOyB9CisiKj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1VTF9BU1NJR04pOyB9CisiLz0iICAgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERJVl9BU1NJR04pOyB9
CisiJT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KE1PRF9BU1NJR04pOyB9CisiPDw9IiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKExFRlRfQVNTSUdOKTsgfQorIj4+PSIgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9BU1NJR04pOyB9CisiJj0iICAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9BU1NJ
R04pOyB9CisiXj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFhPUl9BU1NJR04pOyB9CisifD0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX0FTU0lHTik7IH0KKworIisrIiAgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTkNfT1ApOyB9CisiLS0iICAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERFQ19PUCk7
IH0KKyImJiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oQU5EX09QKTsgfQorInx8IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihPUl9PUCk7IH0KKyJeXiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oWE9SX09QKTsgfQorIjw9IiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRV9PUCk7IH0KKyI+PSIgICAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oR0VfT1ApOyB9Cisi
PT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVR
X09QKTsgfQorIiE9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihORV9PUCk7IH0KKyI8PCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTEVGVF9PUCk7IH0KKyI+PiIgICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfT1ApOyB9CisiOyIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CisoInsifCI8JSIpICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNl
OyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KKygifSJ8IiU+IikgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CisiLCIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBpZiAocGFyc2VDb250ZXh0LmluVHlwZVBhcmVu
KSBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KKyI6
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT0xPTik7
IH0KKyI9IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQorIigiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IGZhbHNlOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9Q
QVJFTik7IH0KKyIpIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBh
cnNlQ29udGV4dC5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4oUklHSFRfUEFSRU4pOyB9Ciso
IlsifCI8OiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExF
RlRfQlJBQ0tFVCk7IH0KKygiXSJ8Ijo+IikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KKyIuIiAgICAgICAgIHsgQkVHSU4oRklF
TERTKTsgIHJldHVybihET1QpOyB9CisiISIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQkFORyk7IH0KKyItIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihEQVNIKTsgfQorIn4iICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERFKTsgfQorIisiICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBMVVMpOyB9CisiKiIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU1RBUik7IH0KKyIvIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTTEFTSCk7IH0KKyIl
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQRVJDRU5U
KTsgfQorIjwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KExFRlRfQU5HTEUpOyB9CisiPiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CisifCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQorIl4iICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENBUkVUKTsgfQorIiYiICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFNUEVSU0FORCk7IH0K
KyI/IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihRVUVT
VElPTik7IH0KKworPEZJRUxEUz57TH0oe0x9fHtEfSkqIHsgCitCRUdJTihJTklUSUFMKTsgICAg
ICAKKyAgICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyAgICAgCisgICAgcHl5bHZhbC0+
bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgIHJldHVybiBGSUVMRF9T
RUxFQ1RJT047IH0KKzxGSUVMRFM+WyBcdFx2XGZccl0ge30KKworWyBcdFx2XG5cZlxyXSAgIHsg
IH0KKzwqPjw8RU9GPj4geyAoJnBhcnNlQ29udGV4dCktPkFmdGVyRU9GID0gdHJ1ZTsgeXlfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7IHl5dGVybWluYXRlKCk7fQorPCo+LiAgICB7
IHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8ICJGTEVYOiBVbmtub3duIGNoYXIgIiA8PCB5
eXRleHQgPDwgIlxuIjsKKyAgICAgICAgICByZXR1cm4gMDsgfQorCislJQorCisKKy8vSW5jbHVk
aW5nIFByZS1wcm9jZXNzb3IuCitleHRlcm4gIkMiIHsKKyAgI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCit9IAorCisvLworLy8gVGhlIFlZX0lOUFVUIG1hY3Jv
IGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRoaXMgY291bGQgYmUganVzdCBwdXQgaW50bworLy8g
dGhlIG1hY3JvIGRpcmVjdGx5LgorLy8KKworaW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1h
eF9zaXplKQoreworICAgIGludCBsZW47CisKKyAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBj
YW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiICk7CisKKyAg
ICBidWZbbGVuXSA9ICcgJzsKKwlyZXR1cm4gbGVuKzE7Cit9CisKKworLy8KKy8vIFBhcnNlIGFu
IGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4gIFdlIHNldCB1cCBnbG9iYWxzIHVzZWQg
YnkKKy8vIHl5d3JhcC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGFzIHBlciB5eXBh
cnNlKCkuCisvLworaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltd
LCBpbnQgYXJnYywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCit7CisgICAgaW50
IGFyZ3YwbGVuOworICAgIAorICAgIFNjYW5Gcm9tU3RyaW5nKGFyZ3ZbMF0pOyAKKyAgICAKKyAg
ICAvL1N0b3JpbmcgdGhlIEN1cnJlbnQgQ29tcGlsZXIgUGFyc2UgY29udGV4dCBpbnRvIHRoZSBj
cHAgc3RydWN0dXJlLgorCWNwcC0+cEMgPSAodm9pZCopJnBhcnNlQ29udGV4dExvY2FsOworCQor
CWlmICghYXJndiB8fCBhcmdjID09IDApCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmICghYXJndltpXSkgewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwuZXJyb3IoMCwgIk51bGwgc2hhZGVyIHNvdXJj
ZSBzdHJpbmciLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwucmVjb3Zl
cigpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKCFzdHJMZW4pIHsKKyAgICAgICAgYXJndjBsZW4gPSAoaW50KSBzdHJsZW4oYXJndlswXSk7
CisgICAgICAgIHN0ckxlbiAgID0gJmFyZ3YwbGVuOworICAgIH0KKyAgICB5eXJlc3RhcnQoMCk7
CisgICAgKCZwYXJzZUNvbnRleHRMb2NhbCktPkFmdGVyRU9GID0gZmFsc2U7CisgICAgY3BwLT5Q
YVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBhcmd2OworICAgIGNwcC0+UGFB
cmdjICAgICA9IGFyZ2M7CisgICAgY3BwLT5QYVN0ckxlbiAgID0gc3RyTGVuOworICAgIGNwcC0+
cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKyAgICB5eWxpbmVubyAgID0gMTsKKyAgIAorICAgIGlm
ICgqY3BwLT5QYVN0ckxlbiA+PSAwKSB7ICAgIAorICAgICAgICBpbnQgcmV0ID0geXlwYXJzZSgo
dm9pZCopKCZwYXJzZUNvbnRleHRMb2NhbCkpOworICAgICAgICBpZiAoY3BwLT5Db21waWxlRXJy
b3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFyc2VD
b250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkKKyAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoY2hhciAqcykgCit7CisgICAgaWYgKCgoVFBh
cnNlQ29udGV4dCAqKWNwcC0+cEMpLT5BZnRlckVPRikgeworICAgICAgICBpZiAoY3BwLT50b2tl
bnNCZWZvcmVFT0YgPT0gMSkgeworICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5lcnJv
cih5eWxpbmVubywgInN5bnRheCBlcnJvciIsICJwcmUtbWF0dXJlIEVPRiIsIHMsICIiKTsKKyAg
ICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5lcnJvcih5eWxpbmVubywgInN5
bnRheCBlcnJvciIsIHl5dGV4dCwgcywgIiIpOworICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICB9ICAgICAgICAgICAgCit9CisKK3ZvaWQgUGFSZXNlcnZlZFdvcmQo
KQoreworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJSZXNlcnZlZCB3
b3JkLiIsIHl5dGV4dCwgIiIsICIiKTsKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKK30KKworaW50IFBhSWRlbnRPclR5cGUoVFN0cmluZyYgaWQsIFRQYXJzZUNvbnRleHQmIHBh
cnNlQ29udGV4dExvY2FsLCBUU3ltYm9sKiYgc3ltYm9sKQoreworICAgIHN5bWJvbCA9IHBhcnNl
Q29udGV4dExvY2FsLnN5bWJvbFRhYmxlLmZpbmQoaWQpOworICAgIGlmIChwYXJzZUNvbnRleHRM
b2NhbC5sZXhBZnRlclR5cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJs
ZSgpKSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFi
bGUqPihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBUWVBFX05BTUU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJu
IElERU5USUZJRVI7Cit9CisKK2ludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVubywgVFBhcnNl
Q29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCit7CisgICAgaW50IHRyYW5zaXRpb25GbGFnID0g
MDsKKyAgICBpbnQgbmV4dENoYXI7CisgICAgCisgICAgd2hpbGUgKHRyYW5zaXRpb25GbGFnICE9
IDIpIHsKKyAgICAgICAgbmV4dENoYXIgPSB5eWlucHV0KCk7CisgICAgICAgIGlmIChuZXh0Q2hh
ciA9PSAnXG4nKQorICAgICAgICAgICAgIGxpbmVubysrOworICAgICAgICBzd2l0Y2ggKG5leHRD
aGFyKSB7CisgICAgICAgIGNhc2UgJyonIDoKKyAgICAgICAgICAgIHRyYW5zaXRpb25GbGFnID0g
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcvJyA6ICAvKiBpZiBzdGFyIGlz
IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIsIHRoZW4gaXQgaXMgdGhlIGVuZCBvZiBjb21tZW50ICov
CisgICAgICAgICAgICBpZiAodHJhbnNpdGlvbkZsYWcgPT0gMSkgeworICAgICAgICAgICAgICAg
IHJldHVybiAxIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPRiA6CisgICAgICAgICAgICAvKiBSYWlzZSBlcnJvciBtZXNzYWdlIGhlcmUgKi8KKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKHl5bGluZW5vLCAiRW5kIG9mIHNoYWRl
ciBmb3VuZCBiZWZvcmUgZW5kIG9mIGNvbW1lbnQuIiwgIiIsICIiLCAiIik7CisgICAgICAgICAg
ICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBZWV9O
VUxMOyAKKyAgICAgICAgZGVmYXVsdCA6ICAvKiBBbnkgb3RoZXIgY2hhcmFjdGVyIHdpbGwgYmUg
YSBwYXJ0IG9mIHRoZSBjb21tZW50ICovCisgICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK2V4dGVybiAiQyIgeworCit2
b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsK
K30KKwordm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhX
YXJuaW5nLCBtc2csIHl5bGluZW5vKTsgCit9CisKK3ZvaWQgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0
IGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXls
aW5lbm8sIiIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
Cit9CisKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQoreworICAgICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5lcnJvcih5eWxpbmVubywic3ludGF4IGVycm9yIiwgIiIsbXNn
LCIiKTsKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKK30KKwordm9pZCBTZXRM
aW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5bGluZW5vICY9IH5Tb3VyY2VMb2NMaW5lTWFz
azsKKyAgICB5eWxpbmVubyB8PSBsaW5lOworfQorCit2b2lkIFNldFN0cmluZ051bWJlcihpbnQg
c3RyaW5nKQoreworICAgIHl5bGluZW5vID0gKHN0cmluZyA8PCBTb3VyY2VMb2NTdHJpbmdTaGlm
dCkgfCAoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzayk7Cit9CisKK2ludCBHZXRTdHJpbmdO
dW1iZXIodm9pZCkKK3sKKyAgICByZXR1cm4geXlsaW5lbm8gPj4gMTY7Cit9CisKK2ludCBHZXRM
aW5lTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5vICYgU291cmNlTG9jTGluZU1h
c2s7Cit9CisKK3ZvaWQgSW5jTGluZU51bWJlcih2b2lkKQoreworICAgIGlmICgoeXlsaW5lbm8g
JiBTb3VyY2VMb2NMaW5lTWFzaykgPD0gU291cmNlTG9jTGluZU1hc2spCisgICAgICAgICsreXls
aW5lbm87Cit9CisKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKQoreworICAgIGlmICgoeXlsaW5l
bm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPiAwKQorICAgICAgICAtLXl5bGluZW5vOworfQorCit2
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQoreyAg
ICAKKyAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6ZSIpKSB7CisgICAgICAgIGlm
IChudW1Ub2tlbnMgIT0gNCkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6
ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgewor
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBhZnRlciAnb3B0aW1p
emUnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCisgICAgICAgICAgICAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7
CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCisgICAgICAgICAg
ICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZh
bHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwi
IG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
Y21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilc
IiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIp
KSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sx
XSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBh
ZnRlciAnZGVidWcnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCisgICAg
ICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9
IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2ZmIikpCisgICAg
ICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9
IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJv
blwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVidWcnIHByYWdtYSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
Y21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilc
IiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisKKyNpZmRlZiBQUkFHTUFfVEFCTEUKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCisgICAgICAgIC8v
IHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJs
ZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21hCisgICAgICAgIC8vIEZvciBu
b3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gY2Fubm90
IHJlY29nbml6ZQorICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9uZSBzdWNoIGltcGxlbWVudGF0
aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtlCisgICAgICAgIC8vICNwcmFn
bWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKKyAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlv
biBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5zdCB0aGUgcHJhZ21hIG5hbWUg
aW4gcHJhZ21hVGFibGUuCisgICAgICAgIC8vICAgICAgICAKKyAgICAgICAgaWYgKG51bVRva2Vu
cyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFzdHJjbXAodG9rZW5zWzNdLCAi
KSIpKSB7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFi
bGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJs
ZTsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKKyAgICAgICAgICAg
IGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7CisgICAgICAgICAg
ICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGl0ZXIt
PnNlY29uZCA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJdOworICAgICAgICAgICAgfSAg
ICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49IDIpIHsKKyAgICAgICAgICAg
IFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+
Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRl
cmF0b3IgaXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmco
dG9rZW5zWzBdKSk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkg
eworICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9r
ZW5zWzFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLy8gUFJBR01BX1RBQkxF
CisgICAgfQorfQorCit2b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKK3sKKyAgICBUU3RyaW5n
IHN0clNyYzsKKyAgICBzdHJTcmMgPSBUU3RyaW5nKHN0cmluZyk7CisKKyAgICAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMp
LT5IYXNoRXJyTXNnICsgIiAiICsgc3RyU3JjOworfQorCitjb25zdCBjaGFyKiBHZXRTdHJmcm9t
VFN0cih2b2lkKQoreworICAgIGNwcC0+RXJyTXNnID0gKCgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5IYXNoRXJyTXNnKS5jX3N0cigpOworICAgIHJldHVybiBjcHAtPkVyck1zZzsKK30KKwor
dm9pZCBSZXNldFRTdHJpbmcodm9pZCkKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBD
KS0+SGFzaEVyck1zZyA9ICIiOworfQorCitUQmVoYXZpb3IgR2V0QmVoYXZpb3IoY29uc3QgY2hh
ciogYmVoYXZpb3IpCit7CisgICAgaWYgKCFzdHJjbXAoInJlcXVpcmUiLCBiZWhhdmlvcikpCisg
ICAgICAgIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYgKCFzdHJjbXAoImVuYWJsZSIs
IGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsKKyAgICBlbHNlIGlmICghc3Ry
Y21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKKyAg
ICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJo
V2FybjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJiZWhh
dmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsKKyAg
ICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgfSAgICAgICAgCit9CisKK3ZvaWQgIHVwZGF0
ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2
aW9yKQoreworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdldEJlaGF2aW9yKGJlaGF2aW9y
KTsKKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVyYXRvciBpdGVyOworICAgIFRT
dHJpbmcgbXNnOworICAgIAorICAgIC8vIHNwZWNpYWwgY2FzZWQgZm9yIGFsbCBleHRlbnNpb24K
KyAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKKyAgICAgICAgaWYgKGJlaGF2aW9y
VmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJoRW5hYmxlKSB7CisgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBjYW5ub3QgaGF2ZSAncmVxdWly
ZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpdGVyID0gICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVyICE9ICgoVFBhcnNlQ29udGV4
dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsgKytpdGVyKQorICAgICAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgICAgICB9ICAgICAgICAKKyAg
ICB9IGVsc2UgeworICAgICAgICBpdGVyID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4
dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7CisgICAgICAgIGlmIChpdGVy
ID09ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5lbmQoKSkg
eworICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgeworICAgICAgICAgICAgY2FzZSBF
QmhSZXF1aXJlOgorICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiZXh0
ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7ICAK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRUJoRW5hYmxlOgorICAg
ICAgICAgICAgY2FzZSBFQmhXYXJuOgorICAgICAgICAgICAgY2FzZSBFQmhEaXNhYmxlOgorICAg
ICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicg
aXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNfc3RyKCks
IHl5bGluZW5vKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaXRlci0+c2Vjb25k
ID0gYmVoYXZpb3JWYWw7CisgICAgfQorfQorICAgICAgICAKK30gIC8vIGV4dGVybiAiQyIKKwor
dm9pZCBzZXRJbml0aWFsU3RhdGUoKQoreworICAgIHl5X3N0YXJ0ID0gMTsKK30KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcueQkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
LyoqCisgKiBUaGlzIGlzIGJpc29uIGdyYW1tYXIgYW5kIHByb2R1Y3Rpb24gY29kZSBmb3IgcGFy
c2luZyB0aGUgT3BlbkdMIDIuMCBzaGFkaW5nCisgKiBsYW5ndWFnZXMuCisgKi8KKyV7CisKKy8q
IEJhc2VkIG9uOgorQU5TSSBDIFlhY2MgZ3JhbW1hcgorCitJbiAxOTg1LCBKZWZmIExlZSBwdWJs
aXNoZWQgaGlzIFlhY2MgZ3JhbW1hciAod2hpY2ggaXMgYWNjb21wYW5pZWQgYnkgYQorbWF0Y2hp
bmcgTGV4IHNwZWNpZmljYXRpb24pIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgZHJhZnQgdmVyc2lv
biBvZiB0aGUKK0FOU0kgQyBzdGFuZGFyZC4gIFRvbSBTdG9ja2Zpc2NoIHJlcG9zdGVkIGl0IHRv
IG5ldC5zb3VyY2VzIGluIDE5ODc7IHRoYXQKK29yaWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhl
IGFuc3dlciB0byBxdWVzdGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMKK0ZBUSwgY2FuIGJl
IGZ0cCdlZCBmcm9tIGZ0cC51dS5uZXQsIGZpbGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5n
cmFtbWFyLlouCisKK0kgaW50ZW5kIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGFzIGNsb3NlIHRvIHRo
ZSBjdXJyZW50IEMgU3RhbmRhcmQgZ3JhbW1hciBhcworcG9zc2libGU7IHBsZWFzZSBsZXQgbWUg
a25vdyBpZiB5b3UgZGlzY292ZXIgZGlzY3JlcGFuY2llcy4KKworSnV0dGEgRGVnZW5lciwgMTk5
NQorKi8KKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwor
I2RlZmluZSBZWVBBUlNFX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCisvKgorVE9ETyhhbG9rcCk6
IFlZUEFSU0VfUEFSQU1fREVDTCBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQgYmlzb24uZXhl
IGluCitjb21waWxlci90b29scy4gUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4Y2x1c2l2ZWx5IHVz
ZSB0aGUgbmV3ZXIgdmVyc2lvbi4KKyovCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTCB2b2lk
KgorI2RlZmluZSBwYXJzZUNvbnRleHQgKChUUGFyc2VDb250ZXh0KikocGFyc2VDb250ZXh0TG9j
YWwpKQorI2RlZmluZSBZWUxFWF9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorI2RlZmluZSBZWV9E
RUNMIGludCB5eWxleChZWVNUWVBFKiBweXlsdmFsLCB2b2lkKiBwYXJzZUNvbnRleHRMb2NhbCkK
K2V4dGVybiB2b2lkIHl5ZXJyb3IoY2hhciopOworCisjZGVmaW5lIEZSQUdfVkVSVF9PTkxZKFMs
IEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQgJiYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFn
ZSAhPSBFU2hMYW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgXAorICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBW
RVJURVhfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFu
Z1ZlcnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBT
LCAiIiwgIiIpOyAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMs
IEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdGcmFnbWVudCkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIp
OyAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFBBQ0tfT05MWShTLCBMKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBp
ZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1
cHBvcnRlZCBpbiBwYWNrIHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICAgICAgICAg
XAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKK30KKworI2RlZmluZSBVTlBBQ0tfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1VucGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4g
dW5wYWNrIHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgICAgICAgICAgIFwKKyAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9
CisKKyNkZWZpbmUgUEFDS19VTlBBQ0tfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1
YWdlICE9IEVTaExhbmdVbnBhY2sgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdQYWNrKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHBhY2svdW5wYWNrIHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAg
ICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorJX0KKyV1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNv
dXJjZUxvYyBsaW5lOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJp
bmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAg
ICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxl
eDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIFRPcGVy
YXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lz
aW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAg
ICAgIFRUeXBlTGluZSB0eXBlTGluZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7
CisgICAgICAgIH07CisgICAgfSBpbnRlcm07Cit9CisKKyV7CisgICAgZXh0ZXJuIGludCB5eWxl
eChZWVNUWVBFKiwgdm9pZCopOworJX0KKworJXB1cmVfcGFyc2VyIC8qIEp1c3QgaW4gY2FzZSBp
cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzICovCislZXhwZWN0IDEgLyogT25lIHNoaWZ0
IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLworJXRva2VuIDxsZXg+IElO
VkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1fUFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJF
Q0lTSU9OCisldG9rZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FU
X1RZUEUgSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBCUkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJ
RiBESVNDQVJEIFJFVFVSTgorJXRva2VuIDxsZXg+IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElW
RUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1B
VFJJWDQgSU5fUVVBTCBPVVRfUVVBTCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2Vu
IDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FN
UExFUkNVQkUKKworJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RB
TlQgSU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9O
CisldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9PUAorJXRva2VuIDxsZXg+IElOQ19PUCBERUNf
T1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKKyV0b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9S
X09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERfQVNTSUdOCisldG9rZW4gPGxleD4gTU9EX0FT
U0lHTiBMRUZUX0FTU0lHTiBSSUdIVF9BU1NJR04gQU5EX0FTU0lHTiBYT1JfQVNTSUdOIE9SX0FT
U0lHTgorJXRva2VuIDxsZXg+IFNVQl9BU1NJR04KKworJXRva2VuIDxsZXg+IExFRlRfUEFSRU4g
UklHSFRfUEFSRU4gTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgTEVGVF9CUkFDRSBSSUdIVF9C
UkFDRSBET1QKKyV0b2tlbiA8bGV4PiBDT01NQSBDT0xPTiBFUVVBTCBTRU1JQ09MT04gQkFORyBE
QVNIIFRJTERFIFBMVVMgU1RBUiBTTEFTSCBQRVJDRU5UCisldG9rZW4gPGxleD4gTEVGVF9BTkdM
RSBSSUdIVF9BTkdMRSBWRVJUSUNBTF9CQVIgQ0FSRVQgQU1QRVJTQU5EIFFVRVNUSU9OCisKKyV0
eXBlIDxpbnRlcm0+IGFzc2lnbm1lbnRfb3BlcmF0b3IgdW5hcnlfb3BlcmF0b3IKKyV0eXBlIDxp
bnRlcm0uaW50ZXJtVHlwZWROb2RlPiB2YXJpYWJsZV9pZGVudGlmaWVyIHByaW1hcnlfZXhwcmVz
c2lvbiBwb3N0Zml4X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBl
eHByZXNzaW9uIGludGVnZXJfZXhwcmVzc2lvbiBhc3NpZ25tZW50X2V4cHJlc3Npb24KKyV0eXBl
IDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiB1bmFyeV9leHByZXNzaW9uIG11bHRpcGxpY2F0aXZl
X2V4cHJlc3Npb24gYWRkaXRpdmVfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBl
ZE5vZGU+IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBlcXVhbGl0eV9leHByZXNzaW9uCisldHlwZSA8
aW50ZXJtLmludGVybVR5cGVkTm9kZT4gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiBjb25zdGFudF9l
eHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gbG9naWNhbF9vcl9leHBy
ZXNzaW9uIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gbG9naWNhbF9hbmRfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHNoaWZ0X2V4cHJlc3Npb24gYW5kX2V4cHJlc3Np
b24gZXhjbHVzaXZlX29yX2V4cHJlc3Npb24gaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyV0eXBl
IDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBmdW5jdGlvbl9jYWxsIGluaXRpYWxpemVyIGNvbmRp
dGlvbiBjb25kaXRpb25vcHQKKworJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiB0cmFuc2xhdGlv
bl91bml0IGZ1bmN0aW9uX2RlZmluaXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gc3Rh
dGVtZW50IHNpbXBsZV9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtQWdncmVnYXRlPiAg
c3RhdGVtZW50X2xpc3QgY29tcG91bmRfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5v
ZGU+IGRlY2xhcmF0aW9uX3N0YXRlbWVudCBzZWxlY3Rpb25fc3RhdGVtZW50IGV4cHJlc3Npb25f
c3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGRlY2xhcmF0aW9uIGV4dGVybmFs
X2RlY2xhcmF0aW9uCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IGZvcl9pbml0X3N0YXRlbWVu
dCBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisldHlwZSA8aW50ZXJtLm5vZGVQYWly
PiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50CisldHlwZSA8aW50
ZXJtLmludGVybU5vZGU+IGl0ZXJhdGlvbl9zdGF0ZW1lbnQganVtcF9zdGF0ZW1lbnQgc3RhdGVt
ZW50X25vX25ld19zY29wZQorJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGluaXRf
ZGVjbGFyYXRvcl9saXN0CisKKyV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlvbiBw
YXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRl
cm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisKKyV0eXBlIDxpbnRlcm0ucHJlY2lz
aW9uPiBwcmVjaXNpb25fcXVhbGlmaWVyCisldHlwZSA8aW50ZXJtLnR5cGU+IHR5cGVfcXVhbGlm
aWVyIGZ1bGx5X3NwZWNpZmllZF90eXBlIHR5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnR5
cGU+IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyV0eXBl
IDxpbnRlcm0udHlwZT4gc3RydWN0X3NwZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlTGluZT4g
c3RydWN0X2RlY2xhcmF0b3IKKyV0eXBlIDxpbnRlcm0udHlwZUxpc3Q+IHN0cnVjdF9kZWNsYXJh
dG9yX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0CisldHlw
ZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFkZXIgZnVuY3Rpb25fZGVjbGFyYXRvciBm
dW5jdGlvbl9pZGVudGlmaWVyCisldHlwZSA8aW50ZXJtLmZ1bmN0aW9uPiBmdW5jdGlvbl9oZWFk
ZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyCisldHlwZSA8aW50ZXJtPiBm
dW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9oZWFkZXJf
bm9fcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVuY3Rpb25fcHJvdG90eXBlCisl
dHlwZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAorCislc3RhcnQgdHJhbnNsYXRp
b25fdW5pdAorJSUKKwordmFyaWFibGVfaWRlbnRpZmllcgorICAgIDogSURFTlRJRklFUiB7Cisg
ICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgc2VhcmNoIHdhcyBkb25lIGluIHRoZSBsZXhpY2Fs
IHBoYXNlCisgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9ICQxLnN5bWJvbDsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJp
YWJsZSgkMS5zdHJpbmcsIHR5cGUpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VW
YXJpYWJsZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmll
ciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCisgICAgICAgICAgICBpZiAoISBz
eW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5
bWJvbCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBp
dCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Ag
d2lsbCByZWNsYWltIHRoZSBtZW1vcnkKKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCApIHsKKyAgICAgICAgICAgIENvbnN0YW50VW5p
b24qIGNvbnN0QXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CisgICAgICAgICAg
ICBUVHlwZSB0KHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICQxLmxp
bmUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKTsKKyAgICB9CisgICAgOworCitwcmltYXJ5
X2V4cHJlc3Npb24KKyAgICA6IHZhcmlhYmxlX2lkZW50aWZpZXIgeworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IElOVENPTlNUQU5UIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSU5U
X1RZUEUgaXMgb25seSAxNi1iaXQgcGx1cyBzaWduIGJpdCBmb3IgdmVydGV4L2ZyYWdtZW50IHNo
YWRlcnMsCisgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCisgICAg
ICAgIC8vCisgICAgICAgIGlmIChhYnMoJDEuaSkgPj0gKDEgPDwgMTYpKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxv
dyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgIH0K
KyAgICB8IEZMT0FUQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgk
MS5mKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgJDEubGluZSk7CisgICAgfQorICAgIHwgQk9PTENPTlNUQU5UIHsKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoJDEuYik7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAgfQorICAgIHwgTEVGVF9QQVJFTiBl
eHByZXNzaW9uIFJJR0hUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOwor
Citwb3N0Zml4X2V4cHJlc3Npb24KKyAgICA6IHByaW1hcnlfZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBp
bnRlZ2VyX2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmICghJDEtPmlzQXJy
YXkoKSAmJiAhJDEtPmlzTWF0cml4KCkgJiYgISQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAg
ICBpZiAoJDEtPmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRy
aXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25z
dCkgeworICAgICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsgLy8gY29uc3RhbnQgZm9sZGlu
ZyBmb3IgYXJyYXlzCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0
QXJyYXlOb2RlKCQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCksICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEt
PmlzVmVjdG9yKCkpIHsgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKKyAgICAgICAg
ICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVt
ID0gMTsKKyAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9ICQzLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7IC8vIG5lZWQg
dG8gZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5
CisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShm
aWVsZHMsICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAgICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RNYXRyaXhOb2RlKCQzLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICQxLCAkMi5saW5lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkMy0+Z2V0
UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCQxLT5pc1Zl
Y3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAmJiAkMS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXpl
KCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5n
ZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXkoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICgkMS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0TWF4QXJyYXlTaXplKCkgPD0gJDMtPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNp
emUoJDEtPmdldEFzU3ltYm9sTm9kZSgpLCAkMS0+Z2V0VHlwZVBvaW50ZXIoKSwgJDMtPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgdHJ1
ZSwgJDIubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNl
dE1heFNpemUoJDEtPmdldEFzU3ltYm9sTm9kZSgpLCAkMS0+Z2V0VHlwZVBvaW50ZXIoKSwgMCwg
ZmFsc2UsICQyLmxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggJDMtPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+PSAkMS0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCci
LCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkg
JiYgJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUg
cmVkZWNsYXJlZCB3aXRoIGEgc2l6ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFi
bGUiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCAkMSwgJDMsICQyLmxpbmUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoJDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCkpCisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKSwgJDEtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlw
ZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXpl
KCksICQxLT5pc01hdHJpeCgpKSk7CisKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9p
bnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICB9IGVsc2UgaWYgKCQx
LT5pc01hdHJpeCgpICYmICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
CisgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5n
ZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAg
IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUo
JDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgJDEt
PmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkgJiYg
JDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICQk
LT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBF
dnFDb25zdCkpOworICAgICAgICBlbHNlIGlmICgkMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAg
ICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigp
LCBFdnFUZW1wb3JhcnkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQtPnNldFR5cGUo
JDEtPmdldFR5cGUoKSk7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbCB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBGSUVMRF9TRUxFQ1RJ
T04geworICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJh
eSIsICIuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoJDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0
b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5s
aW5lKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVj
dG9yIGZpZWxkcworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCAkMSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJh
c2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKiQzLnN0cmlu
Zykuc2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChm
aWVsZHMubnVtID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLm9mZnNldHNbMF0pOworICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsK
KyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgp
LCAkMS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwg
JDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5
cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwg
KGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
VE1hdHJpeEZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBh
cnNlTWF0cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMs
ICQzLmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5
cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCAk
MS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAkMS0+Z2V0
Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cpOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUp
OworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIFRUeXBlTGlzdCogZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsK
KyAgICAgICAgICAgIGlmIChmaWVsZHMgPT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBm
aWVsZHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKmZpZWxkcylb
aV0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKiQzLnN0cmluZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoZmllbGRGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCAkMi5s
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICQk
LT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhl
IHN0cnVjdHVyZSBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBz
dHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPmNoYW5n
ZVF1YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCAqKCpmaWVsZHMpW2ldLnR5cGUsICQzLmxpbmUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJl
cyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRl
ICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgfQorICAgIHwgcG9zdGZpeF9leHBy
ZXNzaW9uIElOQ19PUCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soJDIubGluZSwgIisrIiwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFBvc3RJbmNyZW1lbnQsICQxLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5h
cnlPcEVycm9yKCQyLmxpbmUsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgeworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICItLSIsICQxKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwg
JDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMi5saW5lLCAiLS0i
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOwor
CitpbnRlZ2VyX2V4cHJlc3Npb24KKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygkMSwgIltdIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitm
dW5jdGlvbl9jYWxsCisgICAgOiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZCB7CisgICAgICAgIFRG
dW5jdGlvbiogZm5DYWxsID0gJDEuZnVuY3Rpb247CisgICAgICAgIFRPcGVyYXRvciBvcCA9IGZu
Q2FsbC0+Z2V0QnVpbHRJbk9wKCk7CisKKyAgICAgICAgaWYgKG9wICE9IEVPcE51bGwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJl
IGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICAvLyBEb24ndCBnbyB0aHJvdWdoIHRoZSBzeW1i
b2wgdGFibGUgZm9yIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRl
cnMgd2lsbCBiZSB2ZXJpZmllZCBhbGdvcml0aG1pY2FsbHkuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMg
dG8gZ2V0IHRoZSB0eXBlIGJhY2sKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0
cnVjdG9yRXJyb3JDaGVjaygkMS5saW5lLCAkMS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5
cGUpKSB7CisgICAgICAgICAgICAgICAgJCQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBjb25zdHJ1Y3Rvciwg
b2YgdHlwZSAndHlwZScuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBm
bkNhbGwsICQxLmxpbmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IoMCwgb3AsICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCQtPnNldFR5
cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKKyAg
ICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gcGFyc2VD
b250ZXh0LT5maW5kRnVuY3Rpb24oJDEubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAg
ICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uICBCdXQsIGl0IG1pZ2h0IHN0aWxsIG1hcCB0byBh
IGJ1aWx0LWluCisgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFw
cGVkIHRvIGEgYnVpbHQtaW4gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCAwLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50
ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJv
ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgJDEubGluZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAgICAgICAgICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcigkMS5pbnRlcm1BZ2dyZWdhdGUsIEVPcEZ1bmN0aW9uQ2FsbCwgJDEubGluZSk7CisgICAg
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaG93IHdlIGtub3cgd2hldGhlciB0
aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0aW9uIG9yIGEgdXNlciBkZWZpbmVk
IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gZmFsc2UsIGl0
J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVybG9hZGVkIGJ1aWx0SW4gZnVuY3Rp
b24gYWxzbworICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IHRydWUsIGl0J3Mg
ZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBFT3BOdWxsCisgICAgICAgICAgICAg
ICAgICAgIGlmICghYnVpbHRJbikKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0
QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisK
KyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOworICAgICAgICAgICAgICAgICAg
ICBUUXVhbGlmaWVyTGlzdCYgcXVhbGlmaWVyTGlzdCA9ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5n
ZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
bkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHF1YWwgPSAoKmZuQ2FuZGlkYXRlKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygkJC0+Z2V0TGluZSgpLCAiYXNzaWduIiwgJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCks
ICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBh
cmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFs
aWZpZXJMaXN0LnB1c2hfYmFjayhxdWFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0
UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
ZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAg
ICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxp
bmUpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBmbkNhbGw7CisgICAgfQorICAgIDsKKwor
ZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKyAgICA6IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5j
dGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQzLmxpbmUs
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIsICIiKTsKKyAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDM7CisgICAgfQorICAgIDsKKworZnVuY3Rp
b25fY2FsbF9nZW5lcmljCisgICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRl
cnMgUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5saW5lID0gJDIu
bGluZTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIFJJ
R0hUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7
CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycworICAg
IDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgVk9JRF9UWVBFIHsKKyAgICAgICAgJCQuZnVuY3Rpb24g
PSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIHwgZnVuY3Rpb25f
Y2FsbF9oZWFkZXIgeworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRl
cm1Ob2RlID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3Bh
cmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIGFzc2lnbm1lbnRfZXhwcmVzc2lv
biB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMi0+Z2V0VHlw
ZSgpKSB9OworICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgJCQuZnVu
Y3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9ICQyOworICAgIH0KKyAgICB8IGZ1
bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBhc3NpZ25tZW50X2V4cHJl
c3Npb24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDMtPmdl
dFR5cGUoKSkgfTsKKyAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7Cisg
ICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247CisgICAgICAgICQkLmludGVybU5vZGUg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUs
ICQzLCAkMi5saW5lKTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcgorICAg
IDogZnVuY3Rpb25faWRlbnRpZmllciBMRUZUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBDb25zdHJ1Y3RvcnMgbG9vayBsaWtlIGZ1
bmN0aW9ucywgYnV0IGFyZSByZWNvZ25pemVkIGFzIHR5cGVzLgorCitmdW5jdGlvbl9pZGVudGlm
aWVyCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENvbnN0
cnVjdG9yCisgICAgICAgIC8vCisgICAgICAgIGlmICgkMS5hcnJheSkgeworICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMS5saW5lLCAiR0xfM0RMX2Fy
cmF5X29iamVjdHMiKSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgICAgICQxLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgkMS51c2VyRGVmKSB7CisgICAgICAgICAgICBUU3RyaW5n
IHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAgICAg
ICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUs
IEVPcENvbnN0cnVjdFN0cnVjdCk7CisgICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICAgICAg
ICAgIHN3aXRjaCAoJDEudHlwZSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAg
ICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgk
MS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RN
YXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVjMjsg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVP
cENvbnN0cnVjdEludDsgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJpdmVjMiIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVj
MyIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVjNCIsICQxLmxpbmUpOyBvcCA9
IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
c3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjMiIsICQx
LmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIDM6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjMyIsICQxLmxpbmUpOyBvcCA9IEVPcENv
bnN0cnVjdEJWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJidmVjNCIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
VFR5cGU6OmdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJDEudHlwZSA9IEVidEZsb2F0
OworICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAgIFRUeXBl
IHR5cGUoJDEpOworICAgICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rp
b24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKKyAgICAgICAgICAgICQkID0gZnVuY3Rpb247Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBJREVOVElGSUVSIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwg
RWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rp
b24oJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAg
fCBGSUVMRF9TRUxFQ1RJT04geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwor
ICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMS5zdHJpbmcsIHR5
cGUpOworICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisKK3VuYXJ5X2V4cHJl
c3Npb24KKyAgICA6IHBvc3RmaXhfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAg
fQorICAgIHwgSU5DX09QIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQxLmxpbmUsICIrKyIsICQyKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCAkMS5saW5lLCBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsICIrKyIsICQyLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgJCQgPSAkMjsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IERFQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5s
aW5lLCAiLS0iLCAkMikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJl
RGVjcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJv
cigkMS5saW5lLCAiLS0iLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0K
KyAgICB9CisgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAg
aWYgKCQxLm9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEu
b3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgIGVycm9yT3AgPSAiLSI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogZXJyb3JPcCA9ICIh
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUs
IGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsK
Ky8vIEdyYW1tYXIgTm90ZTogIE5vIHRyYWRpdGlvbmFsIHN0eWxlIHR5cGUgY2FzdHMuCisKK3Vu
YXJ5X29wZXJhdG9yCisgICAgOiBQTFVTICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVP
cE51bGw7IH0KKyAgICB8IERBU0ggIHsgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTmVn
YXRpdmU7IH0KKyAgICB8IEJBTkcgIHsgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTG9n
aWNhbE5vdDsgfQorICAgIDsKKy8vIEdyYW1tYXIgTm90ZTogIE5vICcqJyBvciAnJicgdW5hcnkg
b3BzLiAgUG9pbnRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK211bHRpcGxpY2F0aXZlX2V4cHJl
c3Npb24KKyAgICA6IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCIqIiwgJDIubGluZSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIioiLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQor
ICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsK
KyAgICAgICAgRlJBR19WRVJUX09OTFkoIi8iLCAkMi5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLyIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgOworCithZGRpdGl2ZV9leHByZXNzaW9uCisgICAgOiBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lv
biBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwgJDMsICQyLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIrIiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzaGlm
dF9leHByZXNzaW9uCisgICAgOiBhZGRpdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAg
IDsKKworcmVsYXRpb25hbF9leHByZXNzaW9uCisgICAgOiBzaGlmdF9leHByZXNzaW9uIHsgJCQg
PSAkMTsgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRfZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQy
LmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIFJJ
R0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsICQyLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+IiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBy
ZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5F
cXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJv
cigkMi5saW5lLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBHRV9PUCBzaGlmdF9leHBy
ZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworZXF1YWxpdHlfZXhw
cmVzc2lvbgorICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwg
ZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKKyAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFs
LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBp
ZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQy
LmxpbmUsICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9
IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4
dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGVxdWFs
aXR5X2V4cHJlc3Npb24gTkVfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAk
MSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
JCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxp
bmUsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVs
c2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+
ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICA7CisKK2FuZF9l
eHByZXNzaW9uCisgICAgOiBlcXVhbGl0eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsK
KworZXhjbHVzaXZlX29yX2V4cHJlc3Npb24KKyAgICA6IGFuZF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQorICAgIDsKKworaW5jbHVzaXZlX29yX2V4cHJlc3Npb24KKyAgICA6IGV4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworbG9naWNhbF9hbmRfZXhwcmVzc2lv
bgorICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dp
Y2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCQyLmxpbmUsICImJiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAg
ICAgICB9CisgICAgfQorICAgIDsKKworbG9naWNhbF94b3JfZXhwcmVzc2lvbgorICAgIDogbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2ljYWxfeG9yX2V4cHJl
c3Npb24gWE9SX09QIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAk
MywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwg
Il5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgOworCitsb2dpY2FsX29yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfeG9yX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9n
aWNhbF94b3JfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICJ8fCIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uZGl0
aW9uYWxfZXhwcmVzc2lvbgorICAgIDogbG9naWNhbF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04g
YXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJy
b3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlv
bigkMSwgJDMsICQ1LCAkMi5saW5lKTsKKyAgICAgICAgaWYgKCQzLT5nZXRUeXBlKCkgIT0gJDUt
PmdldFR5cGUoKSkKKyAgICAgICAgICAgICQkID0gMDsKKworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI6Iiwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkNTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICA7CisKK2Fzc2lnbm1lbnRfZXhwcmVzc2lvbgorICAgIDogY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IHVuYXJ5X2V4cHJlc3Npb24g
YXNzaWdubWVudF9vcGVyYXRvciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICJhc3NpZ24iLCAkMSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oJDIub3AsICQxLCAkMywgJDIubGluZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmFzc2lnbkVy
cm9yKCQyLmxpbmUsICJhc3NpZ24iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8
ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5s
aW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICA7CisKK2Fzc2lnbm1lbnRfb3BlcmF0b3IKKyAgICA6IEVR
VUFMICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubGluZSA9
ICQxLmxpbmU7ICQkLm9wID0gRU9wQXNzaWduOyB9CisgICAgfCBNVUxfQVNTSUdOICAgeyBGUkFH
X1ZFUlRfT05MWSgiKj0iLCAkMS5saW5lKTsgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9
IEVPcE11bEFzc2lnbjsgfQorICAgIHwgRElWX0FTU0lHTiAgIHsgRlJBR19WRVJUX09OTFkoIi89
IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BEaXZBc3NpZ247
IH0KKyAgICB8IEFERF9BU1NJR04gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wQWRkQXNzaWduOyB9CisgICAgfCBTVUJf
QVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAk
MS5saW5lOyAkJC5vcCA9IEVPcFN1YkFzc2lnbjsgfQorICAgIDsKKworZXhwcmVzc2lvbgorICAg
IDogYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEsICQzLCAkMi5saW5lKTsKKyAg
ICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BF
cnJvcigkMi5saW5lLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICQkID0gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitjb25zdGFudF9leHBy
ZXNzaW9uCisgICAgOiBjb25kaXRpb25hbF9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2RlY2xhcmF0aW9u
CisgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgeworICAgICAgICBURnVuY3Rp
b24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJt
QWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJv
dG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3Rv
dHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAg
ICAgIGlmIChwYXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
VFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5
cGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlh
YmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLCAkMS5saW5lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIi
LCAqcGFyYW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBwcm90b3R5cGUtPnNldE9wZXJhdG9yKEVPcFByb3RvdHlw
ZSk7CisgICAgICAgICQkID0gcHJvdG90eXBlOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRv
cl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIGlmICgkMS5pbnRlcm1BZ2dyZWdhdGUpCisgICAg
ICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wZXJhdG9yKEVPcERlY2xhcmF0aW9uKTsK
KyAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgfQorICAgIHwgUFJFQ0lTSU9O
IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyBTRU1JQ09MT04gewor
ICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNpb24oICQz
LnR5cGUsICQyICk7CisgICAgICAgICQkID0gMDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9w
cm90b3R5cGUKKyAgICA6IGZ1bmN0aW9uX2RlY2xhcmF0b3IgUklHSFRfUEFSRU4gIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0
aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVm
aW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJl
ZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBp
dCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAgICAgICAvLworICAgICAgICAvLyBSZWRlY2xh
cmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVh
bGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAvLworICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgaWYgKHByZXZEZWMpIHsKKyAgICAg
ICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVyblR5cGUo
KSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJs
b2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRS
ZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmICgoKnByZXZEZWMpW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICgqJDEpW2ldLnR5
cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBw
YXJhbWV0ZXIgcXVhbGlmaWVycyIsICgqJDEpW2ldLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygp
LCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisg
ICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEg
ZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhl
IHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKKyAg
ICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJh
dGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAg
ICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisKKyAgICAg
ICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICB9
CisgICAgOworCitmdW5jdGlvbl9kZWNsYXJhdG9yCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKKworZnVuY3Rpb25faGVh
ZGVyX3dpdGhfcGFyYW1ldGVycworICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRlcl9kZWNs
YXJhdGlvbiB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICQkID0gJDE7
CisgICAgICAgIGlmICgkMi5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQor
ICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRlcigkMi5wYXJhbSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGRlbGV0ZSAkMi5wYXJhbS50eXBlOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBm
dW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJh
bWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAg
ICAgICAgLy8KKyAgICAgICAgaWYgKCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVi
dFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+
IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICco
dm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICQkID0gJDE7Cisg
ICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKCQzLnBhcmFtKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK2Z1bmN0aW9uX2hlYWRlcgorICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURF
TlRJRklFUiBMRUZUX1BBUkVOIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFHbG9i
YWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBmdW5jdGlv
biByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFr
ZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUg
ZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBv
cnQgcmVjdXJzaW9uKQorICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlw
ZSB0eXBlKCQxKTsKKyAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQyLnN0cmluZywg
dHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAgIDsKKworcGFyYW1ldGVy
X2RlY2xhcmF0b3IKKyAgICAvLyBUeXBlICsgbmFtZQorICAgIDogdHlwZV9zcGVjaWZpZXIgSURF
TlRJRklFUiB7CisgICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQn
IiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBU
VHlwZSgkMSl9OworICAgICAgICAkJC5saW5lID0gJDIubGluZTsKKyAgICAgICAgJCQucGFyYW0g
PSBwYXJhbTsKKyAgICB9CisgICAgfCB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIExFRlRfQlJB
Q0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAvLyBDaGVj
ayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJDEuc2V0QXJyYXko
dHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoJDEpOworICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAkMi5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgJCQu
bGluZSA9ICQyLmxpbmU7CisgICAgICAgICQkLnBhcmFtID0gcGFyYW07CisgICAgfQorICAgIDsK
KworcGFyYW1ldGVyX2RlY2xhcmF0aW9uCisgICAgLy8KKyAgICAvLyBUaGUgb25seSBwYXJhbWV0
ZXIgcXVhbGlmaWVyIGEgcGFyYW1ldGVyIGNhbiBoYXZlIGFyZQorICAgIC8vIElOX1FVQUwsIE9V
VF9RVUFMLCBJTk9VVF9RVUFMLCBvciBDT05TVC4KKyAgICAvLworCisgICAgLy8KKyAgICAvLyBU
eXBlICsgbmFtZQorICAgIC8vCisgICAgOiB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlm
aWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxpZmllciwgJDIs
ICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgfQorICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7Cisg
ICAgICAgICQkID0gJDI7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtZXRlclNhbXBs
ZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKCQyLmxpbmUsIEV2cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5cGUpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIC8vCisgICAgLy8g
T25seSB0eXBlCisgICAgLy8KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZp
ZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMzsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxpZmllciwg
JDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgfQorICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZp
ZXIgeworICAgICAgICAkJCA9ICQyOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0
ZXJTYW1wbGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICA7CisK
K3BhcmFtZXRlcl9xdWFsaWZpZXIKKyAgICA6IC8qIGVtcHR5ICovIHsKKyAgICAgICAgJCQgPSBF
dnFJbjsKKyAgICB9CisgICAgfCBJTl9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJbjsKKyAgICB9
CisgICAgfCBPVVRfUVVBTCB7CisgICAgICAgICQkID0gRXZxT3V0OworICAgIH0KKyAgICB8IElO
T1VUX1FVQUwgeworICAgICAgICAkJCA9IEV2cUluT3V0OworICAgIH0KKyAgICA7CisKK3BhcmFt
ZXRlcl90eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXIgeworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDEpIH07CisgICAgICAgICQkLnBhcmFtID0g
cGFyYW07CisgICAgfQorICAgIDsKKworaW5pdF9kZWNsYXJhdG9yX2xpc3QKKyAgICA6IHNpbmds
ZV9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIAorICAgICAgICBpZiAo
JCQudHlwZS5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAkJC50eXBl
LnByZWNpc2lvbiA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lv
bigkMS50eXBlLnR5cGUpOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cHJlY2lzaW9u
RXJyb3JDaGVjaygkMS5saW5lLCAkJC50eXBlLnByZWNpc2lvbiwgJDEudHlwZS50eXBlKSkgewor
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJ
RklFUiB7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIFRUeXBlKCQxLnR5cGUpLCAkMy5saW5lKSwg
JDMubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbklu
aXRFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xp
c3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEu
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJp
bmcsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJv
ckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0
cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlw
ZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJ
RklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5l
LCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlw
ZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDQubGluZSwg
JDUsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Cisg
ICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCB0eXBlLCAkMy5saW5lKSwgJDMubGluZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVS
IExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQk
ID0gJDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFy
c2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsICQ3LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXpl
KCkpOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0Lmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlw
ZSwgJDcsIGludGVybU5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDYubGluZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkLmludGVy
bUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBp
bml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFu
dF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5
cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQg
PSAkMTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJz
ZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXpl
RXJyb3JDaGVjaygkNC5saW5lLCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUp
OworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUs
ICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmV4dGVuc2lvbkVycm9yQ2hlY2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VD
b250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwg
JDgsIGludGVybU5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICAg
ICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDcubGluZSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVyIHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5l
LCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICQkID0gJDE7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAg
IGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmlu
ZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5v
ZGUsIGludGVybU5vZGUsICQ0LmxpbmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3Npbmds
ZV9kZWNsYXJhdGlvbgorICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgeworICAgICAgICAkJC50
eXBlID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCBUVHlwZSgkMSksICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIHsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5s
aW5lKSwgJDIubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAk
JC50eXBlID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdEVycm9yQ2hl
Y2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElG
SUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5s
aW5lKSwgJDIubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IHBhcnNl
Q29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICQxLnNldEFycmF5KHRydWUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIu
c3RyaW5nLCAkMSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURF
TlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsK
KyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxKTsKKyAgICAgICAgaW50IHNpemU7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDQsIHNp
emUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5cGUu
c2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCAkMi5saW5lKSwgJDIubGluZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZywgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwg
c2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygk
My5saW5lLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lm
aWVkX3R5cGUgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlwZSA9ICQxOwor
CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIXBhcnNlQ29u
dGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50
ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgJDMubGluZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IElOVkFSSUFOVCBJ
REVOVElGSUVSIHsKKyAgICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIs
ICQxLmxpbmUpOworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
OworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgIH0KKworLy8KKy8vIFBsYWNl
IGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisvLyAgICB8IGJ1ZmZl
cl9zcGVjaWZpZXIgeworLy8gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisvLyAgICB9
CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBObyAnZW51bScsIG9yICd0eXBlZGVmJy4KKwor
Ly8KKy8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisv
LyV0eXBlIDxpbnRlcm0+IGJ1ZmZlcl9kZWNsYXJhdGlvbgorLy8ldHlwZSA8aW50ZXJtLnR5cGU+
IGJ1ZmZlcl9zcGVjaWZpZXIgaW5wdXRfb3Jfb3V0cHV0IGJ1ZmZlcl9kZWNsYXJhdGlvbl9saXN0
CisvL2J1ZmZlcl9zcGVjaWZpZXIKKy8vICAgIDogaW5wdXRfb3Jfb3V0cHV0IExFRlRfQlJBQ0Ug
YnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgeworLy8gICAgfQorLy8gICAgOwor
Ly8KKy8vaW5wdXRfb3Jfb3V0cHV0CisvLyAgICA6IElOUFVUIHsKKy8vICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW5wdXQiKSkKKy8vICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgVU5QQUNLX09OTFkoImlucHV0IiwgJDEubGluZSk7
CisvLyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW5wdXQ7CisvLyAgICB9CisvLyAgICB8IE9V
VFBVVCB7CisvLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgIm91dHB1dCIp
KQorLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICBQQUNL
X09OTFkoIm91dHB1dCIsICQxLmxpbmUpOworLy8gICAgICAgICQkLnF1YWxpZmllciA9IEV2cU91
dHB1dDsKKy8vICAgIH0KKy8vICAgIDsKKworLy8KKy8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBh
Y2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisvL2J1ZmZlcl9kZWNsYXJhdGlvbl9saXN0CisvLyAg
ICA6IGJ1ZmZlcl9kZWNsYXJhdGlvbiB7CisvLyAgICB9CisvLyAgICB8IGJ1ZmZlcl9kZWNsYXJh
dGlvbl9saXN0IGJ1ZmZlcl9kZWNsYXJhdGlvbiB7CisvLyAgICB9CisvLyAgICA7CisKKy8vCisv
LyBJbnB1dC9vdXRwdXQgc2VtYW50aWNzOgorLy8gICBmbG9hdCBtdXN0IGJlIDE2IG9yIDMyIGJp
dHMKKy8vICAgZmxvYXQgYWxpZ25tZW50IHJlc3RyaWN0aW9ucz8KKy8vICAgY2hlY2sgZm9yIG9u
bHkgb25lIGlucHV0IGFuZCBvbmx5IG9uZSBvdXRwdXQKKy8vICAgc3VtIG9mIGJpdGZpZWxkcyBo
YXMgdG8gYmUgbXVsdGlwbGUgb2YgMzIKKy8vCisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRo
ZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb24KKy8vICAg
IDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBDT0xPTiBjb25zdGFudF9leHByZXNzaW9uIFNF
TUlDT0xPTiB7CisvLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KCQyLmxpbmUsICokMi5zdHJpbmcsIHBhcnNlQ29udGV4dCkpCisvLyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZSgkMi5zdHJpbmcsICQxKTsKKy8vICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmluc2VydCgqJCQudmFyaWFibGUpKSB7CisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19z
dHIoKSwgIiIpOworLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAg
ICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byBkZWxldGUgJCQudmFyaWFibGUsIHRoZSBwb29sIHBv
cCB3aWxsIHRha2UgY2FyZSBvZiBpdAorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vICAgIDsKKwor
ZnVsbHlfc3BlY2lmaWVkX3R5cGUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQg
PSAkMTsKKworICAgICAgICBpZiAoJDEuYXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3Rz
IikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgeworICAgICAgICBpZiAo
JDIuYXJyYXkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJH
TF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoJDIuYXJyYXkgJiYgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2so
JDIubGluZSwgJDEpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgk
MS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBF
YnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFs
aWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gJDEucXVhbGlmaWVyOworICAgIH0KKyAgICA7CisKK3R5cGVfcXVhbGlmaWVyCisg
ICAgOiBDT05TVF9RVUFMIHsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3Qs
ICQxLmxpbmUpOworICAgIH0KKyAgICB8IEFUVFJJQlVURSB7CisgICAgICAgIFZFUlRFWF9PTkxZ
KCJhdHRyaWJ1dGUiLCAkMS5saW5lKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgImF0dHJpYnV0ZSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgJDEubGluZSk7Cisg
ICAgfQorICAgIHwgVkFSWUlORyB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCksICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICQxLmxpbmUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4s
ICQxLmxpbmUpOworICAgIH0KKyAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZv
aWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICQxLmxpbmUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICQxLmxp
bmUpOworICAgIH0KKyAgICB8IFVOSUZPUk0geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICQxLmxpbmUpOwor
ICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub19w
cmVjIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwcmVjaXNpb25fcXVhbGlmaWVy
IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC5w
cmVjaXNpb24gPSAkMTsKKyAgICB9CisgICAgOworCitwcmVjaXNpb25fcXVhbGlmaWVyCisgICAg
OiBISUdIX1BSRUNJU0lPTiB7CisgICAgICAgICQkID0gRWJwSGlnaDsKKyAgICB9CisgICAgfCBN
RURJVU1fUFJFQ0lTSU9OIHsKKyAgICAgICAgJCQgPSBFYnBNZWRpdW07CisgICAgfQorICAgIHwg
TE9XX1BSRUNJU0lPTiAgeworICAgICAgICAkJCA9IEVicExvdzsKKyAgICB9CisgICAgOworCit0
eXBlX3NwZWNpZmllcl9ub19wcmVjCisgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJheSB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgTEVG
VF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQk
ID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygk
Mi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDMsIHNpemUpKQorICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQuc2V0QXJyYXko
dHJ1ZSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcl9u
b25hcnJheQorICAgIDogVk9JRF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICQxLmxpbmUpOwor
ICAgIH0KKyAgICB8IEZMT0FUX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwor
ICAgIH0KKyAgICB8IElOVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisgICAg
fQorICAgIHwgQk9PTF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgIH0K
Ky8vICAgIHwgVU5TSUdORUQgSU5UX1RZUEUgeworLy8gICAgICAgIFBBQ0tfVU5QQUNLX09OTFko
InVuc2lnbmVkIiwgJDEubGluZSk7CisvLyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisvLyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKy8v
ICAgIH0KKyAgICB8IFZFQzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVkVDMyB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAg
fCBWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdn
cmVnYXRlKDQpOworICAgIH0KKyAgICB8IEJWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxp
bmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgQlZFQzMgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsK
KyAgICB9CisgICAgfCBCVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICAg
ICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KKyAgICB8IElWRUMyIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwg
cXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAg
fCBJVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dy
ZWdhdGUoMyk7CisgICAgfQorICAgIHwgSVZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KKyAgICB8IE1BVFJJWDIgewor
ICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MiIsICQxLmxpbmUpOworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgfQor
ICAgIHwgTUFUUklYMyB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQzIiwgJDEubGluZSk7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgz
LCB0cnVlKTsKKyAgICB9CisgICAgfCBNQVRSSVg0IHsKKyAgICAgICAgRlJBR19WRVJUX09OTFko
Im1hdDQiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAg
JCQuc2V0QWdncmVnYXRlKDQsIHRydWUpOworICAgIH0KKyAgICB8IFNBTVBMRVIyRCB7CisgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIy
RCwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgU0FNUExFUkNVQkUgeworICAgICAgICBG
UkFHX1ZFUlRfT05MWSgic2FtcGxlckN1YmUiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXJDdWJl
LCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBzdHJ1Y3Rfc3BlY2lmaWVyIHsKKyAgICAg
ICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICQxLmxpbmUpOworICAgICAgICAkJCA9ICQxOwor
ICAgICAgICAkJC5xdWFsaWZpZXIgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICB9CisgICAgfCBUWVBFX05B
TUUgeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmluZWQgdHlw
ZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAgICAgICAgLy8gdHlw
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgJDEu
bGluZSk7CisgICAgICAgICQkLnVzZXJEZWYgPSAmc3RydWN0dXJlOworICAgIH0KKyAgICA7CisK
K3N0cnVjdF9zcGVjaWZpZXIKKyAgICA6IFNUUlVDVCBJREVOVElGSUVSIExFRlRfQlJBQ0Ugc3Ry
dWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgeworICAgICAgICBUVHlwZSogc3RydWN0
dXJlID0gbmV3IFRUeXBlKCQ0LCAqJDIuc3RyaW5nKTsKKyAgICAgICAgVFZhcmlhYmxlKiB1c2Vy
VHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKKyAg
ICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVm
KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0
aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1
Y3QsIEV2cVRlbXBvcmFyeSwgJDEubGluZSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1
cmU7CisgICAgfQorICAgIHwgU1RSVUNUIExFRlRfQlJBQ0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xp
c3QgUklHSFRfQlJBQ0UgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCQz
LCBUU3RyaW5nKCIiKSk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9y
YXJ5LCAkMS5saW5lKTsKKyAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICB9Cisg
ICAgOworCitzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorICAgIDogc3RydWN0X2RlY2xhcmF0aW9u
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlz
dCBzdHJ1Y3RfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKCokJClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+
Z2V0RmllbGROYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigoKiQyKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJlOiIsICJz
dHJ1Y3QiLCAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgJCQtPnB1c2hfYmFjaygoKiQyKVtpXSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRpb24KKyAgICA6IHR5cGVfc3Bl
Y2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSAk
MjsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT52b2lkRXJyb3JDaGVjaygkMS5saW5lLCAo
KiQyKVswXS50eXBlLT5nZXRGaWVsZE5hbWUoKSwgJDEpKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQkLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93IGFzcGVjdHMgb2YgdHlwZSwg
bGlrZSBhcnJheS1uZXNzCisgICAgICAgICAgICAvLworICAgICAgICAgICAgKCokJClbaV0udHlw
ZS0+c2V0VHlwZSgkMS50eXBlLCAkMS5zaXplLCAkMS5tYXRyaXgsICQxLnVzZXJEZWYpOworCisg
ICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBp
ZiAoKCokJClbaV0udHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMS5saW5lLCAkMSkpCisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCQxLmFycmF5KQorICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldEFycmF5
U2l6ZSgkMS5hcnJheVNpemUpOworICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYpCisgICAgICAg
ICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0VHlwZU5hbWUoJDEudXNlckRlZi0+Z2V0VHlwZU5h
bWUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0
CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gTmV3UG9vbFRUeXBlTGlz
dCgpOworICAgICAgICAkJC0+cHVzaF9iYWNrKCQxKTsKKyAgICB9CisgICAgfCBzdHJ1Y3RfZGVj
bGFyYXRvcl9saXN0IENPTU1BIHN0cnVjdF9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQtPnB1c2hf
YmFjaygkMyk7CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3IKKyAgICA6IElERU5U
SUZJRVIgeworICAgICAgICAkJC50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7CisgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOworICAgICAgICAkJC50eXBlLT5zZXRGaWVs
ZE5hbWUoKiQxLnN0cmluZyk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQudHlwZSA9IG5l
dyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICAkJC5saW5lID0gJDEubGlu
ZTsKKyAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJpbmcpOworCisgICAgICAg
IGludCBzaXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCQyLmxpbmUsICQzLCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAkJC50eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgfQorICAgIDsKKwor
aW5pdGlhbGl6ZXIKKyAgICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAg
ICA7CisKK2RlY2xhcmF0aW9uX3N0YXRlbWVudAorICAgIDogZGVjbGFyYXRpb24geyAkJCA9ICQx
OyB9CisgICAgOworCitzdGF0ZW1lbnQKKyAgICA6IGNvbXBvdW5kX3N0YXRlbWVudCAgeyAkJCA9
ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKwor
Ly8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1lbnRzOyAnZ290bycgaXMgbm90IHN1
cHBvcnRlZC4KKworc2ltcGxlX3N0YXRlbWVudAorICAgIDogZGVjbGFyYXRpb25fc3RhdGVtZW50
IHsgJCQgPSAkMTsgfQorICAgIHwgZXhwcmVzc2lvbl9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQor
ICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwgaXRlcmF0aW9u
X3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQorICAgIHwganVtcF9zdGF0ZW1lbnQgICAgICAgIHsg
JCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNF
IFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9CisgICAgfCBMRUZUX0JSQUNFIHsgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc3RhdGVtZW50X2xpc3QgeyBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyB9IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKCQzICE9IDApCisg
ICAgICAgICAgICAkMy0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAkJCA9ICQz
OworICAgIH0KKyAgICA7CisKK3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICA6IGNvbXBvdW5k
X3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9CisgICAgfCBzaW1wbGVfc3RhdGVt
ZW50ICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQorICAgIDsKKworY29tcG91bmRfc3RhdGVt
ZW50X25vX25ld19zY29wZQorICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNuJ3QgY3JlYXRlIGEg
bmV3IHNjb3BlLCBmb3Igc2VsZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9uX3N0YXRlbWVudAor
ICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7CisgICAgICAgICQkID0gMDsKKyAgICB9Cisg
ICAgfCBMRUZUX0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYg
KCQyKQorICAgICAgICAgICAgJDItPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAg
JCQgPSAkMjsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbGlzdAorICAgIDogc3RhdGVtZW50
IHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KCQxLCAwKTsKKyAgICB9CisgICAgfCBzdGF0ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgeworICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAw
KTsKKyAgICB9CisgICAgOworCitleHByZXNzaW9uX3N0YXRlbWVudAorICAgIDogU0VNSUNPTE9O
ICB7ICQkID0gMDsgfQorICAgIHwgZXhwcmVzc2lvbiBTRU1JQ09MT04gIHsgJCQgPSBzdGF0aWNf
Y2FzdDxUSW50ZXJtTm9kZSo+KCQxKTsgfQorICAgIDsKKworc2VsZWN0aW9uX3N0YXRlbWVudAor
ICAgIDogSUYgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIHNlbGVjdGlvbl9yZXN0
X3N0YXRlbWVudCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQx
LmxpbmUsICQzKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywgJDUsICQx
LmxpbmUpOworICAgIH0KKyAgICA7CisKK3NlbGVjdGlvbl9yZXN0X3N0YXRlbWVudAorICAgIDog
c3RhdGVtZW50IEVMU0Ugc3RhdGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAg
ICAgJCQubm9kZTIgPSAkMzsKKyAgICB9CisgICAgfCBzdGF0ZW1lbnQgeworICAgICAgICAkJC5u
b2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIDsKKworLy8gR3Jh
bW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9ydGVk
LgorCitjb25kaXRpb24KKyAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBjYW4g
aW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDEtPmdl
dExpbmUoKSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
fQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXpl
ciB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5i
b29sRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVy
KCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpCisgICAgICAgICAgICAk
JCA9ICQ0OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgJCQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaXRl
cmF0aW9uX3N0YXRlbWVudAorICAgIDogV0hJTEUgTEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBj
b25kaXRpb24gUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAkNiwgJDQsIDAsIHRydWUsICQxLmxpbmUpOworICAg
ICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBETyB7
ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IHN0YXRlbWVudCBXSElMRSBMRUZU
X1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDgubGluZSwgJDYpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRMb29wKDAsICQzLCAkNiwgMCwgZmFsc2UsICQ0LmxpbmUpOworICAgICAgICAt
LXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBGT1IgTEVGVF9Q
QVJFTiB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfSBmb3JfaW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50
IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZExvb3AoJDQsICQ3LCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1
Lm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMiksIHRydWUs
ICQxLmxpbmUpOworICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAg
ICB9CisgICAgOworCitmb3JfaW5pdF9zdGF0ZW1lbnQKKyAgICA6IGV4cHJlc3Npb25fc3RhdGVt
ZW50IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBkZWNsYXJhdGlvbl9zdGF0ZW1l
bnQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2NvbmRpdGlvbm9wdAorICAg
IDogY29uZGl0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCAvKiBNYXkgYmUg
bnVsbCAqLyB7CisgICAgICAgICQkID0gMDsKKyAgICB9CisgICAgOworCitmb3JfcmVzdF9zdGF0
ZW1lbnQKKyAgICA6IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04geworICAgICAgICAkJC5ub2RlMSA9
ICQxOworICAgICAgICAkJC5ub2RlMiA9IDA7CisgICAgfQorICAgIHwgY29uZGl0aW9ub3B0IFNF
TUlDT0xPTiBleHByZXNzaW9uICB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQk
Lm5vZGUyID0gJDM7CisgICAgfQorICAgIDsKKworanVtcF9zdGF0ZW1lbnQKKyAgICA6IENPTlRJ
TlVFIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWwgPD0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29u
dGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7
CisgICAgfQorICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIs
ICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFr
LCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMS5saW5l
KTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
MS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4i
LCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IFJFVFVSTiBleHByZXNzaW9uIFNFTUlDT0xPTiB7CisgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQxLmxp
bmUpOworICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1ZTsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoKihwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBlKCkp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIHJl
dHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBESVNDQVJE
IFNFTUlDT0xPTiB7CisgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICQxLmxpbmUpOworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCAk
MS5saW5lKTsKKyAgICB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBObyAnZ290bycuICBH
b3RvcyBhcmUgbm90IHN1cHBvcnRlZC4KKwordHJhbnNsYXRpb25fdW5pdAorICAgIDogZXh0ZXJu
YWxfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgICAgICBwYXJzZUNvbnRleHQt
PnRyZWVSb290ID0gJCQ7CisgICAgfQorICAgIHwgdHJhbnNsYXRpb25fdW5pdCBleHRlcm5hbF9k
ZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZSgkMSwgJDIsIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0g
JCQ7CisgICAgfQorICAgIDsKKworZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyAgICA6IGZ1bmN0aW9u
X2RlZmluaXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0aW9u
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9kZWZpbml0aW9u
CisgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgeworICAgICAgICBURnVuY3Rpb24mIGZ1bmN0aW9u
ID0gKigkMS5mdW5jdGlvbik7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi5n
ZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6ICAncHJldkRl
YycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNl
ZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGlu
IHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKKyAgICAgICAg
Ly8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8vCisgICAgICAgIGlmIChwcmV2RGVj
LT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhp
cyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBi
b2R5IiwgZnVuY3Rpb24uZ2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmlu
ZWQoKTsKKworICAgICAgICAvLworICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1h
aW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVy
IHRoYW4gdm9pZAorICAgICAgICAvLworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0TmFtZSgpID09
ICJtYWluIikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSA+IDAp
IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlv
biBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24uZ2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDEubGluZSwgIiIsIGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygp
LCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vCisgICAgICAgIC8vIE5ldyBzeW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkgb2Yg
ZnVuY3Rpb24gcGx1cyBpdHMgYXJndW1lbnRzCisgICAgICAgIC8vCisgICAgICAgIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVt
YmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1l
bnRzLgorICAgICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5
cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJ
bnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRo
ZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGlu
c2VydCBpdAorICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAg
ICAgICAvLworICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRl
cnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdo
ZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAg
ICBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFt
Lm5hbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhl
IHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmICgh
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9uIiwg
dmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFi
bGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gVHJhbnNmZXIgb3duZXJzaGlwIG9mIG5hbWUgcG9pbnRlciB0byBzeW1ib2wgdGFibGUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBwYXJhbS5uYW1lID0gMDsKKwor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIg
dG8gdGhlIEhJTAorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cyA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KSwgJDEubGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQxLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJh
bU5vZGVzID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5v
ZGVzLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50
eXBlLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1O
b2RlcywgRU9wUGFyYW1ldGVycywgJDEubGluZSk7CisgICAgICAgICQxLmludGVybUFnZ3JlZ2F0
ZSA9IHBhcmFtTm9kZXM7CisgICAgICAgIHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9
IDA7CisgICAgfQorICAgIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAg
ICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBl
ICE9IHZvaWQgPworICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNz
IHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBwYXJzZUNv
bnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwg
JDEuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCAkMS5s
aW5lKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rpb24t
PmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0
b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3Ro
ZXIgdmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0
aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgJCQtPmdldEFz
QWdncmVnYXRlKCktPnNldE9wdGltaXplKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRp
bWl6ZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1ZyhwYXJzZUNvbnRl
eHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
YWRkVG9QcmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUp
OworICAgIH0KKyAgICA7CisKKyUlCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQxNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUd28gcHVycG9zZXM6CisvLyAxLiAg
U2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlvbnMgY2FuCisv
LyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4gdGhlbXNlbHZl
cyB0bworLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHByb2Nlc3Mg
dGhhbiBzaG93biBoZXJlLgorLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBmb3IgaG93IHRv
IGdldCBzdGFydGVkLgorLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVzY3JpcHRpb24g
b2YgdGhlIHRyZWUuCisvLworCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcg
ZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNzIFRP
dXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAg
VE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9CisgICAgVElu
Zm9TaW5rJiBpbmZvU2luazsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCopOworICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKik7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSopOworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Cisg
ICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwor
ICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsK
KyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29s
IHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Cit9OworCitUU3RyaW5n
IFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Cit7CisgICAgVFN0cmluZ1N0cmVhbSBz
dHJlYW07CisKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIg
IT0gRXZxR2xvYmFsKQorICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwg
IiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKKyAgICBpZiAoYXJyYXkpCisgICAg
ICAgIHN0cmVhbSA8PCAiYXJyYXkgb2YgIjsKKyAgICBpZiAobWF0cml4KQorICAgICAgICBzdHJl
YW0gPDwgc2l6ZSA8PCAiWCIgPDwgc2l6ZSA8PCAiIG1hdHJpeCBvZiAiOworICAgIGVsc2UgaWYg
KHNpemUgPiAxKQorICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Ig
b2YgIjsKKworICAgIHN0cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOworICAgIHJldHVybiBzdHJl
YW0uc3RyKCk7Cit9CisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBwcmludGluZywgbm90
IHBhcnQgb2YgdHJhdmVyc2luZy4KKy8vCisKK3ZvaWQgT3V0cHV0VHJlZVRleHQoVEluZm9TaW5r
JiBpbmZvU2luaywgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IGludCBkZXB0aCkKK3sKKyAgICBp
bnQgaTsKKworICAgIGluZm9TaW5rLmRlYnVnLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7CisK
KyAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICAgICAgaW5mb1NpbmsuZGVidWcg
PDwgIiAgIjsKK30KKworLy8KKy8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVy
c2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0
aGUgdHJhdmVyc2FsLgorLy8KKy8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8g
aGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4g
IElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8K
Kwordm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2Rl
KQoreworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisKKyAgICBp
bmZvU2luay5kZWJ1ZyA8PCAiJyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKKyAgICBp
bmZvU2luay5kZWJ1ZyA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxu
IjsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOwor
CisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBvdXQu
ZGVidWcgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
c3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIm11bHRp
cGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggbXVs
dCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dC5kZWJ1ZyA8PCAidmVjdG9yIHNjYWxlIHNl
Y29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBzY2FsZSBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQg
aW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAg
ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3Qg
Y2hpbGQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQu
ZGVidWcgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDogb3V0LmRlYnVnIDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0IGluZGV4IGZv
ciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91
dC5kZWJ1ZyA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFk
ZDogICAgb3V0LmRlYnVnIDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFN1YjogICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCI7ICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0LmRlYnVnIDw8ICJjb21wb25l
bnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0LmRl
YnVnIDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cEVxdWFsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQuZGVi
dWcgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiI7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91
dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBU
aGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVh
bDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dC5kZWJ1ZyA8PCAidmVjdG9y
LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRy
aXg6IG91dC5kZWJ1ZyA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dC5kZWJ1ZyA8PCAibWF0cml4LXRpbWVzLXZl
Y3RvciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dC5k
ZWJ1ZyA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNNYXRyaXg6IG91dC5kZWJ1ZyA8PCAibWF0cml4LW11bHRpcGx5IjsgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQuZGVidWcgPDwgImxvZ2lj
YWwtb3IiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dC5kZWJ1ZyA8
PCAibG9naWNhbC14b3IiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvdXQu
ZGVidWcgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG91dC5kZWJ1
ZyA8PCAiPHVua25vd24gb3A+IjsKKyAgICB9CisKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBu
b2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8PCAiXG4i
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRJbmZvU2luayYg
b3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsK
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OiAgICAgICBvdXQuZGVidWcgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90
OiAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1JbmNyZW1lbnQi
OyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0LmRlYnVn
IDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZUlu
Y3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAiUHJlLURlY3JlbWVu
dCI7ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBvdXQu
ZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udkZsb2F0VG9Cb29sOm91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBib29sIjticmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0LmRlYnVnIDw8ICJDb252ZXJ0
IGJvb2wgdG8gZmxvYXQiO2JyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBv
dXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9JbnQ6IG91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0LmRlYnVnIDw8ICJDb252
ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAg
ICAgIG91dC5kZWJ1ZyA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0LmRlYnVnIDw8ICJkZWdyZWVzIjsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQuZGVidWcgPDwg
InNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29zOiAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiY29zaW5lIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJ0YW5nZW50IjsgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBvdXQuZGVidWcg
PDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNvczog
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2VudCI7
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BM
b2c6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImV4cDIiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAibG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BTcXJ0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzcXJ0IjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBvdXQuZGVidWcgPDwgImludmVy
c2Ugc3FydCI7ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQuZGVidWcgPDwgIlNpZ24iOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
Rmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWlsOiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZyYWN0aW9uIjsgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0LmRlYnVn
IDw8ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogICAgICBvdXQuZGVidWcgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHgi
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwlj
YXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHkiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQu
ZGVidWcgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
IAorCisgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYW55Ijsg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAg
b3V0LmRlYnVnIDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIkJhZCB1bmFyeSBvcCIpOwor
ICAgIH0KKworICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5n
KCkgPDwgIikiOworCisgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5r
OworCisgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wTnVsbCkgeworICAgICAgICBvdXQuZGVi
dWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJub2RlIGlzIHN0aWxsIEVPcE51bGwhIik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwg
ZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9w
U2VxdWVuY2U6ICAgICAgb3V0LmRlYnVnIDw8ICJTZXF1ZW5jZVxuIjsgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21tYVxuIjsgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246ICAgICAgb3V0LmRlYnVnIDw8ICJG
dW5jdGlvbiBEZWZpbml0aW9uOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wRnVuY3Rpb25DYWxsOiAgb3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBDYWxsOiAiIDw8
IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogICAg
b3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBQYXJhbWV0ZXJzOiAiOyAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1
Y3QgZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiAgb3V0LmRl
YnVnIDw8ICJDb25zdHJ1Y3QgdmVjMiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RWZWMzOiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjMyI7ICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjNCI7ICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAgb3V0LmRlYnVnIDw8ICJDb25z
dHJ1Y3QgYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjogb3V0
LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzQi
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0LmRlYnVnIDw8ICJD
b25zdHJ1Y3QgaW50IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjog
b3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzMiOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZl
YzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0LmRlYnVnIDw8
ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQz
OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQ0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVj
dCBzdHJ1Y3R1cmUiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAg
ICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdy
ZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwgIkNvbXBh
cmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9y
RXF1YWw6ICAgICAgb3V0LmRlYnVnIDw8ICJFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dC5kZWJ1ZyA8PCAi
Tm90RXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVP
cE1vZDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibW9kIjsgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQuZGVidWcgPDwgInBvdyI7ICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICBvdXQuZGVidWcgPDwgImFyYyB0
YW5nZW50IjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXQuZGVi
dWcgPDwgIm1pbiI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJtYXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENs
YW1wOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY2xhbXAiOyAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1peCI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJzdGVwIjsgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dC5kZWJ1ZyA8PCAi
c21vb3Roc3RlcCI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiAgICAgIG91
dC5kZWJ1ZyA8PCAiZGlzdGFuY2UiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BEb3Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRvdC1wcm9kdWN0IjsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJj
cm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZhY2VGb3J3
YXJkOiAgIG91dC5kZWJ1ZyA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQuZGVidWcgPDwgInJlZmxlY3QiOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0LmRl
YnVnIDw8ICJyZWZyYWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE11bDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHkiOyBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3Is
ICJCYWQgYWdncmVnYXRpb24gb3AiKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSAh
PSBFT3BTZXF1ZW5jZSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcFBhcmFtZXRlcnMpCisgICAgICAg
IG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOwor
CisgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
T3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAgT3V0
cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQuZGVidWcgPDwgIlRlc3Qg
Y29uZGl0aW9uIGFuZCBzZWxlY3QiOworICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0cHV0
VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQuZGVidWcgPDwgIkNvbmRp
dGlvblxuIjsKKyAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5n
ZXRUcnVlQmxvY2soKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZVxuIjsKKyAg
ICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQor
ICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOworCisgICAgaWYgKG5v
ZGUtPmdldEZhbHNlQmxvY2soKSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywg
bm9kZSwgZGVwdGgpOworICAgICAgICBvdXQuZGVidWcgPDwgImZhbHNlIGNhc2VcbiI7CisgICAg
ICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAg
LS1kZXB0aDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUT3V0cHV0VHJhdmVyc2Vy
Ojp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAg
VEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIGludCBzaXplID0gbm9kZS0+Z2V0VHlw
ZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0VHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKClbaV0uZ2V0QkNvbnN0KCkpCisgICAgICAgICAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAidHJ1ZSI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBvdXQuZGVidWcgPDwgImZhbHNlIjsKKworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
ICgiIDw8ICJjb25zdCBib29sIiA8PCAiKSI7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICJcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpW2ldLmdldEZDb25zdCgpOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiIChjb25z
dCBmbG9hdClcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVi
dEludDoKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAo
Y29uc3QgaW50KVxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgb3V0LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgIlVua25vd24gY29uc3RhbnQiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgVEluZm9TaW5r
JiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgp
OworCisgICAgb3V0LmRlYnVnIDw8ICJMb29wIHdpdGggY29uZGl0aW9uICI7CisgICAgaWYgKCEg
bm9kZS0+dGVzdEZpcnN0KCkpCisgICAgICAgIG91dC5kZWJ1ZyA8PCAibm90ICI7CisgICAgb3V0
LmRlYnVnIDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7CisKKyAgICArK2RlcHRoOworCisgICAgT3V0cHV0
VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VGVzdCgp
KSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBDb25kaXRpb25cbiI7CisgICAgICAgIG5v
ZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7CisKKyAgICBPdXRwdXRUcmVlVGV4dChpbmZv
U2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5nZXRCb2R5KCkpIHsKKyAgICAgICAg
b3V0LmRlYnVnIDw8ICJMb29wIEJvZHlcbiI7CisgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTm8gbG9vcCBi
b2R5XG4iOworCisgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpIHsKKyAgICAgICAgT3V0cHV0
VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJM
b29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7CisgICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCkt
PnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsK
KworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChu
b2RlLT5nZXRGbG93T3AoKSkgeworICAgICAgICBjYXNlIEVPcEtpbGw6ICAgICAgb3V0LmRlYnVn
IDw8ICJCcmFuY2g6IEtpbGwiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQnJl
YWs6ICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQnJlYWsiOyAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb250aW51ZTogIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBDb250aW51ZSI7
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJldHVybjogICAgb3V0LmRlYnVnIDw8ICJC
cmFuY2g6IFJldHVybiI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICBvdXQuZGVidWcgPDwgIkJyYW5jaDogVW5rbm93biBCcmFuY2giOyBicmVhazsKKyAgICB9CisK
KyAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAi
IHdpdGggZXhwcmVzc2lvblxuIjsKKyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgbm9kZS0+Z2V0
RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgLS1kZXB0aDsKKyAgICB9IGVs
c2UKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0
YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlh
bGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAorLy8gdHlwZSBvZiBub2RlLiAg
SXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKy8vCit2b2lkIFRJbnRlcm1l
ZGlhdGU6Om91dHB1dFRyZWUoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QgPT0g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVE91dHB1dFRyYXZlcnNlciBpdChpbmZvU2luayk7
CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1l
ZGlhdGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0ODYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
CisvLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1vcnkgaGlnaC1sZXZlbCBpbnRlcm1lZGlhdGUg
cmVwcmVzZW50YXRpb24KKy8vIG9mIHNoYWRlcnMuICBUaGlzIGlzIGEgdHJlZSB0aGF0IHBhcnNl
ciBjcmVhdGVzLgorLy8KKy8vIE5vZGVzIGluIHRoZSB0cmVlIGFyZSBkZWZpbmVkIGFzIGEgaGll
cmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIAorLy8gVEludGVybU5vZGUuIEVhY2ggaXMg
YSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5vIHByZXNldCBicmFuY2hpbmcgZmFjdG9yOwor
Ly8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5cGUgb2YgbGlzdCBvZiBjaGlsZHJlbi4K
Ky8vCisKKyNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAorI2RlZmluZSBfX0lOVEVSTUVESUFURV9I
CisKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci9UeXBl
cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbnN0YW50VW5pb24uaCIKKworLy8KKy8vIE9wZXJh
dG9ycyB1c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSByZXByZXNlbnRhdGlvbi4K
Ky8vCitlbnVtIFRPcGVyYXRvciB7CisgICAgRU9wTnVsbCwgICAgICAgICAgICAvLyBpZiBpbiBh
IG5vZGUsIHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJlaW5nIGJ1aWx0CisgICAg
RU9wU2VxdWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBzdGF0ZW1lbnRzLCBvciBw
YXJhbWV0ZXJzLCBldGMuCisgICAgRU9wRnVuY3Rpb25DYWxsLCAgICAKKyAgICBFT3BGdW5jdGlv
biwgICAgICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCisgICAgRU9wUGFyYW1ldGVycywg
ICAgICAvLyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVycyB0byBhIGZ1bmN0aW9u
CisKKyAgICBFT3BEZWNsYXJhdGlvbiwKKyAgICBFT3BQcm90b3R5cGUsCisKKyAgICAvLworICAg
IC8vIFVuYXJ5IG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BOZWdhdGl2ZSwKKyAgICBFT3BM
b2dpY2FsTm90LAorICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCisKKyAgICBFT3BQb3N0SW5jcmVt
ZW50LAorICAgIEVPcFBvc3REZWNyZW1lbnQsCisgICAgRU9wUHJlSW5jcmVtZW50LAorICAgIEVP
cFByZURlY3JlbWVudCwKKworICAgIEVPcENvbnZJbnRUb0Jvb2wsCisgICAgRU9wQ29udkZsb2F0
VG9Cb29sLAorICAgIEVPcENvbnZCb29sVG9GbG9hdCwKKyAgICBFT3BDb252SW50VG9GbG9hdCwK
KyAgICBFT3BDb252RmxvYXRUb0ludCwKKyAgICBFT3BDb252Qm9vbFRvSW50LAorCisgICAgLy8K
KyAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIC8vCisKKyAgICBFT3BBZGQsCisgICAgRU9w
U3ViLAorICAgIEVPcE11bCwKKyAgICBFT3BEaXYsCisgICAgRU9wRXF1YWwsCisgICAgRU9wTm90
RXF1YWwsCisgICAgRU9wVmVjdG9yRXF1YWwsCisgICAgRU9wVmVjdG9yTm90RXF1YWwsCisgICAg
RU9wTGVzc1RoYW4sCisgICAgRU9wR3JlYXRlclRoYW4sCisgICAgRU9wTGVzc1RoYW5FcXVhbCwK
KyAgICBFT3BHcmVhdGVyVGhhbkVxdWFsLAorICAgIEVPcENvbW1hLAorCisgICAgRU9wVmVjdG9y
VGltZXNTY2FsYXIsCisgICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCisgICAgRU9wTWF0cml4VGlt
ZXNWZWN0b3IsCisgICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCisKKyAgICBFT3BMb2dpY2FsT3Is
CisgICAgRU9wTG9naWNhbFhvciwKKyAgICBFT3BMb2dpY2FsQW5kLAorCisgICAgRU9wSW5kZXhE
aXJlY3QsCisgICAgRU9wSW5kZXhJbmRpcmVjdCwKKyAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwK
KworICAgIEVPcFZlY3RvclN3aXp6bGUsCisKKyAgICAvLworICAgIC8vIEJ1aWx0LWluIGZ1bmN0
aW9ucyBwb3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCisgICAgLy8KKworICAgIEVPcFJh
ZGlhbnMsCisgICAgRU9wRGVncmVlcywKKyAgICBFT3BTaW4sCisgICAgRU9wQ29zLAorICAgIEVP
cFRhbiwKKyAgICBFT3BBc2luLAorICAgIEVPcEFjb3MsCisgICAgRU9wQXRhbiwKKworICAgIEVP
cFBvdywKKyAgICBFT3BFeHAsCisgICAgRU9wTG9nLAorICAgIEVPcEV4cDIsCisgICAgRU9wTG9n
MiwKKyAgICBFT3BTcXJ0LAorICAgIEVPcEludmVyc2VTcXJ0LAorCisgICAgRU9wQWJzLAorICAg
IEVPcFNpZ24sCisgICAgRU9wRmxvb3IsCisgICAgRU9wQ2VpbCwKKyAgICBFT3BGcmFjdCwKKyAg
ICBFT3BNb2QsCisgICAgRU9wTWluLAorICAgIEVPcE1heCwKKyAgICBFT3BDbGFtcCwKKyAgICBF
T3BNaXgsCisgICAgRU9wU3RlcCwKKyAgICBFT3BTbW9vdGhTdGVwLAorCisgICAgRU9wTGVuZ3Ro
LAorICAgIEVPcERpc3RhbmNlLAorICAgIEVPcERvdCwKKyAgICBFT3BDcm9zcywKKyAgICBFT3BO
b3JtYWxpemUsCisgICAgRU9wRmFjZUZvcndhcmQsCisgICAgRU9wUmVmbGVjdCwKKyAgICBFT3BS
ZWZyYWN0LAorCisgICAgLy9FT3BEUGR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvL0VPcERQZHksICAgICAgICAg
ICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgor
ICAgIC8vRU9wRndpZHRoLCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeCwKKworICAg
IEVPcEFueSwKKyAgICBFT3BBbGwsCisKKyAgICAvLworICAgIC8vIEJyYW5jaAorICAgIC8vCisK
KyAgICBFT3BLaWxsLCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkKKyAgICBFT3BSZXR1cm4s
CisgICAgRU9wQnJlYWssCisgICAgRU9wQ29udGludWUsCisKKyAgICAvLworICAgIC8vIENvbnN0
cnVjdG9ycworICAgIC8vCisKKyAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0
Qm9vbCwKKyAgICBFT3BDb25zdHJ1Y3RGbG9hdCwKKyAgICBFT3BDb25zdHJ1Y3RWZWMyLAorICAg
IEVPcENvbnN0cnVjdFZlYzMsCisgICAgRU9wQ29uc3RydWN0VmVjNCwKKyAgICBFT3BDb25zdHJ1
Y3RCVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RCVmVjMywKKyAgICBFT3BDb25zdHJ1Y3RCVmVjNCwK
KyAgICBFT3BDb25zdHJ1Y3RJVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RJVmVjMywKKyAgICBFT3BD
b25zdHJ1Y3RJVmVjNCwKKyAgICBFT3BDb25zdHJ1Y3RNYXQyLAorICAgIEVPcENvbnN0cnVjdE1h
dDMsCisgICAgRU9wQ29uc3RydWN0TWF0NCwKKyAgICBFT3BDb25zdHJ1Y3RTdHJ1Y3QsCisKKyAg
ICAvLworICAgIC8vIG1vdmVzCisgICAgLy8KKworICAgIEVPcEFzc2lnbiwKKyAgICBFT3BJbml0
aWFsaXplLAorICAgIEVPcEFkZEFzc2lnbiwKKyAgICBFT3BTdWJBc3NpZ24sCisgICAgRU9wTXVs
QXNzaWduLAorICAgIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduLAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduLAorICAgIEVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduLAorICAgIEVPcERpdkFzc2lnbiwKK307CisKK2NsYXNz
IFRJbnRlcm1UcmF2ZXJzZXI7CitjbGFzcyBUSW50ZXJtQWdncmVnYXRlOworY2xhc3MgVEludGVy
bUJpbmFyeTsKK2NsYXNzIFRJbnRlcm1VbmFyeTsKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9u
OworY2xhc3MgVEludGVybVNlbGVjdGlvbjsKK2NsYXNzIFRJbnRlcm1UeXBlZDsKK2NsYXNzIFRJ
bnRlcm1TeW1ib2w7CitjbGFzcyBUSW50ZXJtTG9vcDsKK2NsYXNzIFRJbmZvU2luazsKKworLy8K
Ky8vIEJhc2UgY2xhc3MgZm9yIHRoZSB0cmVlIG5vZGVzCisvLworY2xhc3MgVEludGVybU5vZGUg
eworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9j
YXRvcikKKworICAgIFRJbnRlcm1Ob2RlKCkgOiBsaW5lKDApIHt9CisgICAgdmlydHVhbCBUU291
cmNlTG9jIGdldExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldExpbmUoVFNvdXJjZUxvYyBsKSB7IGxpbmUgPSBsOyB9CisgICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQq
IGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRV
bmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVElu
dGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7IH0KK3Byb3RlY3RlZDoKKyAgICBUU291
cmNlTG9jIGxpbmU7Cit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IHRvIGhlbHAgeWFjYy4KKy8v
CitzdHJ1Y3QgVEludGVybU5vZGVQYWlyIHsKKyAgICBUSW50ZXJtTm9kZSogbm9kZTE7CisgICAg
VEludGVybU5vZGUqIG5vZGUyOworfTsKKworLy8KKy8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Ig
bm9kZXMgdGhhdCBoYXZlIGEgdHlwZS4KKy8vCitjbGFzcyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMg
VEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRlcm1UeXBlZChjb25zdCBUVHlwZSYgdCkg
OiB0eXBlKHQpICB7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpICAg
ICAgICAgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlKGNvbnN0IFRU
eXBlJiB0KSB7IHR5cGUgPSB0OyB9CisgICAgdmlydHVhbCBjb25zdCBUVHlwZSYgZ2V0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2aXJ0dWFsIFRUeXBlKiBnZXRUeXBlUG9pbnRl
cigpIHsgcmV0dXJuICZ0eXBlOyB9CisKKyAgICB2aXJ0dWFsIFRCYXNpY1R5cGUgZ2V0QmFzaWNU
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQorICAgIHZpcnR1YWwg
VFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmll
cigpOyB9CisgICAgdmlydHVhbCBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAgIHZpcnR1YWwg
aW50IGdldFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEluc3RhbmNlU2l6ZSgpOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc01hdHJpeCgp
OyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0Fy
cmF5KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBl
LmlzVmVjdG9yKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVy
biB0eXBlLmlzU2NhbGFyKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpICAg
ICAgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmluZygpOyB9CisgICAgY29uc3QgY2hh
ciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVy
U3RyaW5nKCk7IH0KKyAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0
eXBlOworfTsKKworLy8KKy8vIEhhbmRsZSBmb3IsIGRvLXdoaWxlLCBhbmQgd2hpbGUgbG9vcHMu
CisvLworY2xhc3MgVEludGVybUxvb3AgOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgor
ICAgIFRJbnRlcm1Mb29wKFRJbnRlcm1Ob2RlICppbml0LCBUSW50ZXJtTm9kZSogYUJvZHksIFRJ
bnRlcm1UeXBlZCogYVRlc3QsIFRJbnRlcm1UeXBlZCogYVRlcm1pbmFsLCBib29sIHRlc3RGaXJz
dCkgOiAKKyAgICAgICAgICAgIGluaXQoaW5pdCksCisgICAgICAgICAgICBib2R5KGFCb2R5KSwK
KyAgICAgICAgICAgIHRlc3QoYVRlc3QpLAorICAgICAgICAgICAgdGVybWluYWwoYVRlcm1pbmFs
KSwKKyAgICAgICAgICAgIGZpcnN0KHRlc3RGaXJzdCkgeyB9CisgICAgdmlydHVhbCBUSW50ZXJt
TG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIFRJbnRlcm1Ob2RlICpnZXRJbml0KCkg
eyByZXR1cm4gaW5pdDsgfQorICAgIFRJbnRlcm1Ob2RlICpnZXRCb2R5KCkgeyByZXR1cm4gYm9k
eTsgfQorICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVzdCgpIHsgcmV0dXJuIHRlc3Q7IH0KKyAgICBU
SW50ZXJtVHlwZWQgKmdldFRlcm1pbmFsKCkgeyByZXR1cm4gdGVybWluYWw7IH0KKyAgICBib29s
IHRlc3RGaXJzdCgpIHsgcmV0dXJuIGZpcnN0OyB9Citwcm90ZWN0ZWQ6CisgICAgVEludGVybU5v
ZGUgKmluaXQ7CisgICAgVEludGVybU5vZGUgKmJvZHk7ICAgICAgIC8vIGNvZGUgdG8gbG9vcCBv
dmVyCisgICAgVEludGVybVR5cGVkICp0ZXN0OyAgICAgIC8vIGV4aXQgY29uZGl0aW9uIGFzc29j
aWF0ZWQgd2l0aCBsb29wLCBjb3VsZCBiZSAwIGZvciAnZm9yJyBsb29wcworICAgIFRJbnRlcm1U
eXBlZCAqdGVybWluYWw7ICAvLyBleGlzdHMgZm9yIGZvci1sb29wcworICAgIGJvb2wgZmlyc3Q7
ICAgICAgICAgICAgICAvLyB0cnVlIGZvciB3aGlsZSBhbmQgZm9yLCBub3QgZm9yIGRvLXdoaWxl
Cit9OworCisvLworLy8gSGFuZGxlIGJyZWFrLCBjb250aW51ZSwgcmV0dXJuLCBhbmQga2lsbC4K
Ky8vCitjbGFzcyBUSW50ZXJtQnJhbmNoIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoK
KyAgICBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBlKSA6CisgICAg
ICAgICAgICBmbG93T3Aob3ApLAorICAgICAgICAgICAgZXhwcmVzc2lvbihlKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIFRPcGVyYXRvciBn
ZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJl
c3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgVE9wZXJhdG9y
IGZsb3dPcDsKKyAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24temVybyBleGNl
cHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cworfTsKKworLy8KKy8vIE5vZGVzIHRoYXQg
Y29ycmVzcG9uZCB0byBzeW1ib2xzIG9yIGNvbnN0YW50cyBpbiB0aGUgc291cmNlIGNvZGUuCisv
LworY2xhc3MgVEludGVybVN5bWJvbCA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgor
ICAgIC8vIGlmIHN5bWJvbCBpcyBpbml0aWFsaXplZCBhcyBzeW1ib2woc3ltKSwgdGhlIG1lbW9y
eSBjb21lcyBmcm9tIHRoZSBwb29sYWxsb2NhdG9yIG9mIHN5bS4gSWYgc3ltIGNvbWVzIGZyb20K
KyAgICAvLyBwZXIgcHJvY2VzcyBnbG9iYWxwb29sYWxsb2NhdG9yLCB0aGVuIGl0IGNhdXNlcyBp
bmNyZWFzZWQgbWVtb3J5IHVzYWdlIHBlciBjb21waWxlCisgICAgLy8gaXQgaXMgZXNzZW50aWFs
IHRvIHVzZSAic3ltYm9sID0gc3ltIiB0byBhc3NpZ24gdG8gc3ltYm9sCisgICAgVEludGVybVN5
bWJvbChpbnQgaSwgY29uc3QgVFN0cmluZyYgc3ltLCBjb25zdCBUVHlwZSYgdCkgOiAKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltO30gCisgICAgdmly
dHVhbCBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQorICAgIHZpcnR1YWwgY29uc3Qg
VFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3ltYm9sOyAgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCBUSW50ZXJt
U3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9Citwcm90ZWN0ZWQ6Cisg
ICAgaW50IGlkOworICAgIFRTdHJpbmcgc3ltYm9sOworfTsKKworY2xhc3MgVEludGVybUNvbnN0
YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBvaW50ZXIsIGNvbnN0IFRUeXBlJiB0KSA6
IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50ZXIodW5pb25Qb2ludGVyKSB7IH0KKyAg
ICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVu
aW9uQXJyYXlQb2ludGVyOyB9CisgICAgdm9pZCBzZXRVbmlvbkFycmF5UG9pbnRlcihDb25zdGFu
dFVuaW9uICpjKSB7IHVuaW9uQXJyYXlQb2ludGVyID0gYzsgfQorICAgIHZpcnR1YWwgVEludGVy
bUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpICB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqICk7CisgICAgdmlydHVh
bCBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1Npbmsm
KTsKK3Byb3RlY3RlZDoKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsKK307
CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGUgdHlwZXMgdGhhdCBob2xkIG9w
ZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtT3BlcmF0b3IgOiBwdWJsaWMgVEludGVybVR5cGVk
IHsKK3B1YmxpYzoKKyAgICBUT3BlcmF0b3IgZ2V0T3AoKSBjb25zdCB7IHJldHVybiBvcDsgfQor
ICAgIGJvb2wgbW9kaWZpZXNTdGF0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb25zdHJ1Y3Rvcigp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpIHsgcmV0dXJuIHRy
dWU7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8pIDogVElu
dGVybVR5cGVkKFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpKSwgb3Aobykge30KKyAgICBU
SW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwg
b3Aobykge30gICAKKyAgICBUT3BlcmF0b3Igb3A7Cit9OworCisvLworLy8gTm9kZXMgZm9yIGFs
bCB0aGUgYmFzaWMgYmluYXJ5IG1hdGggb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1CaW5h
cnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCB2b2lkIHNldExlZnQoVElu
dGVybVR5cGVkKiBuKSB7IGxlZnQgPSBuOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJpZ2h0KFRJ
bnRlcm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCog
Z2V0TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxlZnQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBl
ZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQorICAgIHZpcnR1YWwgVEludGVy
bUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCog
bGVmdDsKKyAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OworfTsKKworLy8KKy8vIE5vZGVzIGZvciB1
bmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtVW5hcnkgOiBwdWJsaWMgVElu
dGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIFRU
eXBlJiB0KSA6IFRJbnRlcm1PcGVyYXRvcihvLCB0KSwgb3BlcmFuZCgwKSB7fQorICAgIFRJbnRl
cm1VbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIG9wZXJhbmQoMCkge30K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCogbykgeyBvcGVyYW5kID0gbzsgfQorICAg
IHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsgfQor
ICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAg
ICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQ7Cit9OworCit0eXBlZGVmIFRWZWN0b3I8VEludGVybU5v
ZGUqPiBUSW50ZXJtU2VxdWVuY2U7Cit0eXBlZGVmIFRWZWN0b3I8aW50PiBUUXVhbGlmaWVyTGlz
dDsKKy8vCisvLyBOb2RlcyB0aGF0IG9wZXJhdGUgb24gYW4gYXJiaXRyYXJ5IHNpemVkIHNldCBv
ZiBjaGlsZHJlbi4KKy8vCitjbGFzcyBUSW50ZXJtQWdncmVnYXRlIDogcHVibGljIFRJbnRlcm1P
cGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJh
dG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChmYWxzZSksIHByYWdtYVRhYmxlKDApIHsgfQorICAg
IFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBwcmFn
bWFUYWJsZSgwKSB7IH0KKyAgICB+VEludGVybUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRh
YmxlOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0b3IoVE9wZXJhdG9yIG8p
IHsgb3AgPSBvOyB9CisgICAgdmlydHVhbCBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkg
eyByZXR1cm4gc2VxdWVuY2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBUU3Ry
aW5nJiBuKSB7IG5hbWUgPSBuOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXROYW1l
KCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2Vy
RGVmaW5lZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0
dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgdmlydHVhbCBUUXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlm
aWVyKCkgeyByZXR1cm4gcXVhbGlmaWVyOyB9CisgICAgdm9pZCBzZXRPcHRpbWl6ZShib29sIG8p
IHsgb3B0aW1pemUgPSBvOyB9CisgICAgdm9pZCBzZXREZWJ1Zyhib29sIGQpIHsgZGVidWcgPSBk
OyB9CisgICAgYm9vbCBnZXRPcHRpbWl6ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9CisgICAgYm9v
bCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVnOyB9CisgICAgdm9pZCBhZGRUb1ByYWdtYVRhYmxl
KGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxlKTsKKyAgICBjb25zdCBUUHJhZ21hVGFibGUmIGdl
dFByYWdtYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gKnByYWdtYVRhYmxlOyB9Citwcm90ZWN0ZWQ6
CisgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2Fs
bG93IGNvcHkgY29uc3RydWN0b3IKKyAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRvcj0oY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCisg
ICAgVEludGVybVNlcXVlbmNlIHNlcXVlbmNlOworICAgIFRRdWFsaWZpZXJMaXN0IHF1YWxpZmll
cjsKKyAgICBUU3RyaW5nIG5hbWU7CisgICAgYm9vbCB1c2VyRGVmaW5lZDsgLy8gdXNlZCBmb3Ig
dXNlciBkZWZpbmVkIGZ1bmN0aW9uIG5hbWVzCisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29s
IGRlYnVnOworICAgIFRQcmFnbWFUYWJsZSAqcHJhZ21hVGFibGU7Cit9OworCisvLworLy8gRm9y
IGlmIHRlc3RzLiAgU2ltcGxpZmllZCBzaW5jZSB0aGVyZSBpcyBubyBzd2l0Y2ggc3RhdGVtZW50
LgorLy8KK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1
YmxpYzoKKyAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5v
ZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJs
b2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CisgICAgVEludGVybVNlbGVjdGlvbihU
SW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNl
QiwgY29uc3QgVFR5cGUmIHR5cGUpIDoKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0eXBlKSwg
Y29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30K
KyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIGJvb2wg
dXNlc1Rlcm5hcnlPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGdldEJhc2ljVHlwZSgpICE9IEVi
dFZvaWQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Ob2RlKiBnZXRDb25kaXRpb24oKSBjb25zdCB7
IHJldHVybiBjb25kaXRpb247IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxv
Y2soKSBjb25zdCB7IHJldHVybiB0cnVlQmxvY2s7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Ob2Rl
KiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VCbG9jazsgfQorICAgIHZpcnR1
YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4gdGhpczsg
fQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOworICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CisgICAgVEludGVybU5vZGUqIGZhbHNlQmxvY2s7Cit9OworCitlbnVt
IFZpc2l0Cit7CisgICAgUHJlVmlzaXQsCisgICAgSW5WaXNpdCwKKyAgICBQb3N0VmlzaXQKK307
CisKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZS4gIFVzZXIgc2hvdWxkIGRlcml2ZSBm
cm9tIHRoaXMsIAorLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGluIGl0LCBh
bmQgdGhlbiBwYXNzCisvLyBpdCB0byBhIFRyYXZlcnNlIG1ldGhvZC4KKy8vCisvLyBXaGVuIHVz
aW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdhbnQgdmlz
aXRlZC4KKy8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJlLXZpc2l0IHRvIHNraXAgdmlzaXRpbmcg
dGhhdCBub2RlJ3Mgc3VidHJlZS4KKy8vCitjbGFzcyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJs
aWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQor
CisgICAgVEludGVybVRyYXZlcnNlcihib29sIHByZVZpc2l0ID0gdHJ1ZSwgYm9vbCBpblZpc2l0
ID0gZmFsc2UsIGJvb2wgcG9zdFZpc2l0ID0gZmFsc2UsIGJvb2wgcmlnaHRUb0xlZnQgPSBmYWxz
ZSkgOiAKKyAgICAgICAgICAgIHByZVZpc2l0KHByZVZpc2l0KSwKKyAgICAgICAgICAgIGluVmlz
aXQoaW5WaXNpdCksCisgICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKKyAgICAgICAg
ICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKKyAgICAgICAgICAgIGRlcHRoKDApIHt9CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopIHt9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kikg
e3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5Kikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7cmV0dXJuIHRydWU7fQorICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNp
dCwgVEludGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJy
YW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopIHtyZXR1cm4gdHJ1ZTt9CisKKyAgICB2
b2lkIGluY3JlbWVudERlcHRoKCkge2RlcHRoKys7fQorICAgIHZvaWQgZGVjcmVtZW50RGVwdGgo
KSB7ZGVwdGgtLTt9CisKKyAgICBjb25zdCBib29sIHByZVZpc2l0OworICAgIGNvbnN0IGJvb2wg
aW5WaXNpdDsKKyAgICBjb25zdCBib29sIHBvc3RWaXNpdDsKKyAgICBjb25zdCBib29sIHJpZ2h0
VG9MZWZ0OworCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRoOworfTsKKworI2VuZGlmIC8vIF9f
SU5URVJNRURJQVRFX0gKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KKyNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVE
SUFURV9JTkNMVURFRF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRh
YmxlLmgiCisKK3N0cnVjdCBUVmVjdG9yRmllbGRzIHsKKyAgICBpbnQgb2Zmc2V0c1s0XTsKKyAg
ICBpbnQgbnVtOworfTsKKworLy8KKy8vIFNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRvIGhlbHAg
cGFyc2UgYW5kIGJ1aWxkIHRoZSB0cmVlLgorLy8KK2NsYXNzIFRJbmZvU2luazsKK2NsYXNzIFRJ
bnRlcm1lZGlhdGUgeworcHVibGljOiAgICAKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRF
KEdsb2JhbFBvb2xBbGxvY2F0b3IpCisKKyAgICBUSW50ZXJtZWRpYXRlKFRJbmZvU2luayYgaSkg
OiBpbmZvU2luayhpKSB7IH0KKyAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBj
b25zdCBUU3RyaW5nJiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlw
ZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBjb25zdCBUVHlwZSYsIFRJbnRlcm1UeXBlZCop
OworICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1U
eXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYywgVFN5bWJvbFRhYmxl
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1U
eXBlZCogaW5kZXgsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRo
KFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBUU291cmNlTG9jLCBUU3ltYm9sVGFi
bGUmKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBs
ZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIG1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MpOworICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwgVE9wZXJh
dG9yLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVjdGlvbihUSW50ZXJt
VHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBjb2RlLCBUU291cmNlTG9jKTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCog
dHJ1ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VMb2MpOworICAgIFRJ
bnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJp
Z2h0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRV
bmlvbihDb25zdGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9jKTsKKyAgICBUSW50
ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJbnRlcm1Db25zdGFu
dFVuaW9uKikgOworICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoVFNvdXJjZUxvYywgVEludGVybU5v
ZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9v
bCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgVEludGVybU5vZGUq
IGFkZExvb3AoVEludGVybU5vZGUqLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRl
cm1UeXBlZCosIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQnJhbmNo
KiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQnJhbmNoKiBh
ZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9jKTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYsIFRTb3VyY2VMb2MpOworICAgIGJv
b2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqLCBFU2hMYW5ndWFnZSk7CisJdm9pZCByZW1vdmUo
VEludGVybU5vZGUqKTsKKyAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKKyAgICAK
K3Byb3RlY3RlZDoKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworCitwcml2YXRlOgorICAgIHZv
aWQgb3BlcmF0b3I9KFRJbnRlcm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3NpZ25tZW50cworfTsK
KworI2VuZGlmIC8vIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L29zaW5jbHVkZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVk
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIF9fT1NJTkNMVURFX0gKKyNkZWZpbmUgX19PU0lOQ0xVREVfSAorCisvLworLy8gVGhp
cyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVjaWZpYyBkYXRhdHlwZXMg
YW5kCisvLyBkZWNsYXJlcyBhbnkgd2luZG93cyBzcGVjaWZpYyBmdW5jdGlvbnMuCisvLworCisj
aWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorI2RlZmluZSBBTkdMRV9PU19X
SU4KKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgfHwgXAor
ICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgXAor
ICAgICAgZGVmaW5lZChfX3N1bikKKyNkZWZpbmUgQU5HTEVfT1NfUE9TSVgKKyNlbHNlCisjZXJy
b3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCisjZW5kaWYKKworI2lmIGRlZmluZWQoQU5HTEVfT1Nf
V0lOKQorI2RlZmluZSBTVFJJQ1QKKyNkZWZpbmUgVkNfRVhUUkFMRUFOIDEKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2luY2x1ZGUgPHB0aHJl
YWQuaD4KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlm
ICAvLyBBTkdMRV9PU19XSU4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisKKy8vCisv
LyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCisvLworI2lmIGRlZmluZWQoQU5HTEVf
T1NfV0lOKQordHlwZWRlZiBEV09SRCBPU19UTFNJbmRleDsKKyNkZWZpbmUgT1NfSU5WQUxJRF9U
TFNfSU5ERVggKFRMU19PVVRfT0ZfSU5ERVhFUykKKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9T
SVgpCit0eXBlZGVmIHVuc2lnbmVkIGludCBPU19UTFNJbmRleDsKKyNkZWZpbmUgT1NfSU5WQUxJ
RF9UTFNfSU5ERVggMHhGRkZGRkZGRgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KKworT1NfVExT
SW5kZXggT1NfQWxsb2NUTFNJbmRleCgpOworYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRl
eCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKTsKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0lu
ZGV4IG5JbmRleCk7CisKK2lubGluZSB2b2lkKiBPU19HZXRUTFNWYWx1ZShPU19UTFNJbmRleCBu
SW5kZXgpCit7CisgICAgYXNzZXJ0KG5JbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCk7Cisj
aWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisgICAgcmV0dXJuIFRsc0dldFZhbHVlKG5JbmRleCk7
CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorICAgIHJldHVybiBwdGhyZWFkX2dldHNw
ZWNpZmljKG5JbmRleCk7CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorfQorCisjZW5kaWYgLy8g
X19PU0lOQ0xVREVfSApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFRo
aXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXggc3BlY2lmaWMgZnVuY3Rpb25zCisvLworI2luY2x1
ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCisjaWYgIWRlZmluZWQoQU5HTEVfT1NfUE9TSVgp
CisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXggc3BlY2lmaWMgZmlsZSBpbiBhIG5vbi1w
b3NpeCBidWlsZC4KKyNlbmRpZgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0
aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworICAgIHB0aHJlYWRf
a2V5X3QgcFBvb2xJbmRleDsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIGdsb2JhbCBwb29sIGtl
eS4KKyAgICAvLworICAgIGlmICgocHRocmVhZF9rZXlfY3JlYXRlKCZwUG9vbEluZGV4LCBOVUxM
KSkgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFi
bGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBQb29sSW5kZXg7CisgICAg
fQorfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICps
cHZWYWx1ZSkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Cisg
ICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHB0aHJlYWRfc2V0c3Bl
Y2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgo
T1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5LgorICAgIC8vCisgICAgaWYgKHB0aHJlYWRf
a2V5X2RlbGV0ZShuSW5kZXgpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL29zc291
cmNlX3dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dp
bi5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBj
b250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZnVuY3Rpb25zCisvLworCisjaWYgIWRlZmlu
ZWQoQU5HTEVfT1NfV0lOKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHdpbmRvd3Mgc3BlY2lm
aWMgZmlsZSBpbiBhIG5vbiB3aW5kb3dzIGJ1aWxkLgorI2VuZGlmCisKKworLy8KKy8vIFRocmVh
ZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0lu
ZGV4KCkKK3sKKwlEV09SRCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBU
TFNfT1VUX09GX0lOREVYRVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTog
VW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19J
TlZBTElEX1RMU19JTkRFWDsKKwl9CisKKwlyZXR1cm4gZHdJbmRleDsKK30KKworCitib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisJaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor
CWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7CisJZWxz
ZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5k
ZXggbkluZGV4KQoreworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJ
YXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisJCXJl
dHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4gdHJ1ZTsK
KwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wYXJz
ZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworLy8KKy8vIFVzZSB0aGlzIGNsYXNzIHRvIGNh
cnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRvIG5vZGUgaW4gCisvLyB0aGUgdHJhdmVyc2FsCisv
LworY2xhc3MgVENvbnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVi
bGljOgorICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2lu
Z2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywg
VFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpIDogdW5pb25BcnJheShjVW5pb24pLCB0
eXBlKHQpLAorICAgICAgICBjb25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksIHNpbmdsZUNv
bnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksIGluZm9TaW5rKHNpbmspLCBzeW1ib2xUYWJs
ZShzeW1UYWJsZSksIGVycm9yKGZhbHNlKSwgaXNNYXRyaXgoZmFsc2UpLCBtYXRyaXhTaXplKDAp
CisJeworCQlpbmRleCA9IDA7CisJfQorCisJYm9vbCBlcnJvcjsKKworcHJvdGVjdGVkOgorCXZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCXZvaWQgdmlzaXRDb25zdGFudFVuaW9u
KFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisJYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybUJpbmFyeSopOworCWJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVu
YXJ5Kik7CisJYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlv
biopOworCWJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUq
KTsKKwlib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKwlib29sIHZp
c2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKKyAgICBpbnQgaW5kZXg7
CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAgICBUVHlwZSB0eXBlOworICAgIFRP
cGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CisgICAgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtOwor
ICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsK
KyAgICBpbnQgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29uc3RydWN0b3IgKCA0IGZvciB2ZWM0KQor
ICAgIGJvb2wgaXNNYXRyaXg7CisgICAgaW50IG1hdHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0
aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5vdCB0aGUgaW5zdGFuY2Ugc2l6ZSkKK307CisK
Ky8vCisvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBmdW5jdGlvbnMu
ICBUaGUgbGFzdCBvbmUKKy8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRyYXZlcnNhbC4K
Ky8vCisvLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUgdGhlIGV4dGVy
bmFsIHRyYXZlcnNhbAorLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5b3UgcHJvY2Vz
cyBjaGlsZHJlbiB5b3Vyc2VsZiwKKy8vIHJldHVybiBmYWxzZS4KKy8vCisKK3ZvaWQgVENvbnN0
VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlN5bWJvbCBOb2RlIGZvdW5k
IGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICByZXR1cm47
CisKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOworICAgIAorICAgIGlmIChxdWFsaWZpZXIgIT0gRXZx
Q29uc3QpIHsKKyAgICAgICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25z
dHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBw
ZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmluYXJ5IE5vZGUgZm91
bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUU3RyaW5nIGJ1ZjsKKyAgICBi
dWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsK
KyAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5vZGUtPmdldExpbmUoKSk7
CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsgIAorfQorCitib29sIFRDb25z
dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUq
IG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0NvbnN0cnVjdG9yKCkgJiYgbm9kZS0+Z2V0T3Ao
KSAhPSBFT3BDb21tYSkgeworICAgICAgICBUU3RyaW5nIGJ1ZjsKKyAgICAgICAgYnVmLmFwcGVu
ZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgICAg
IGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5vZGUtPmdldExpbmUoKSk7
CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgCisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDApIHsKKyAgICAgICAgZXJy
b3IgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBmbGFn
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSAmJiBub2RlLT5nZXRTZXF1ZW5jZSgp
WzBdLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIGlmIChmbGFnKSAK
KyAgICB7CisgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSB0cnVlOyAKKyAgICAgICAgY29u
c3RydWN0b3JUeXBlID0gbm9kZS0+Z2V0T3AoKTsKKyAgICAgICAgc2l6ZSA9IG5vZGUtPmdldFR5
cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5pc01h
dHJpeCgpKSB7CisgICAgICAgICAgICBpc01hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBtYXRy
aXhTaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIH0KKyAg
ICB9ICAgICAgIAorCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHArKykgeworCisgICAgICAgIGlm
IChub2RlLT5nZXRPcCgpID09IEVPcENvbW1hKQorICAgICAgICAgICAgaW5kZXggPSAwOyAgICAg
ICAgICAgCisKKyAgICAgICAgKCpwKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSAgIAorICAgIGlm
IChmbGFnKSAKKyAgICB7CisgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZTsgICAK
KyAgICAgICAgY29uc3RydWN0b3JUeXBlID0gRU9wTnVsbDsKKyAgICAgICAgc2l6ZSA9IDA7Cisg
ICAgICAgIGlzTWF0cml4ID0gZmFsc2U7CisgICAgICAgIG1hdHJpeFNpemUgPSAwOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJTZWxlY3Rpb24gTm9kZSBmb3Vu
ZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgZXJyb3Ig
PSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZp
c2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBDb25z
dGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSA9IHVuaW9uQXJyYXk7CisgICAgaW50IGluc3RhbmNl
U2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGluZGV4ID49IGluc3RhbmNl
U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7
CisgICAgICAgIGludCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAg
ICAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2luZGV4XSA9IHJpZ2h0VW5pb25B
cnJheVtpXTsKKworICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW50IHRvdGFsU2l6ZSA9IGluZGV4ICsgc2l6ZTsKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsK
KyAgICAgICAgaWYgKCFpc01hdHJpeCkgeworICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25B
cnJheVtjb3VudF07CisKKyAgICAgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkg
PiAxKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgIGludCBj
b3VudCA9IDA7CisgICAgICAgICAgICBpbnQgZWxlbWVudCA9IGluZGV4OworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAoaSAtIGVsZW1lbnQpICUgKG1h
dHJpeFNpemUgKyAxKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworICAgICAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKworICAg
ICAgICAgICAgICAgIChpbmRleCkrKzsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBu
b2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Ikxvb3AgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUo
KSk7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29u
c3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2Rl
KQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJy
YW5jaCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgp
KTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gVGhp
cyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJh
dmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAg
dG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRy
ZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLworYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJz
ZUNvbnN0VHJlZShUU291cmNlTG9jIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCit7CisgICAg
aWYgKHJvb3QgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVENvbnN0VHJhdmVy
c2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwg
aW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cisg
ICAgaWYgKGl0LmVycm9yKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBmYWxzZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yX2Nv
bW1vbi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Jf
Y29tbW9uLnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yX2NvbW1vbi52Y3Byb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDY2IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJv
amVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOS4wMCINCisJTmFt
ZT0idHJhbnNsYXRvcl9jb21tb24iDQorCVByb2plY3RHVUlEPSJ7NUIzQTZEQjgtMUU3RS00MEQ3
LTkyQjktREE4QUFFNjE5RkFEfSINCisJUm9vdE5hbWVzcGFjZT0iY29tcGlsZXIiDQorCUtleXdv
cmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQor
CTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwv
UGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRp
b25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRw
dXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50
ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKVxjb21tb24iDQorCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpciku
Li8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVH
O19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVi
dWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGli
cmFyeT0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZl
bD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJ
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
TGlicmFyaWFuVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29s
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29u
ZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5
PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURp
cmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSlcY29tbW9uIg0KKwkJCUNvbmZpZ3VyYXRpb25U
eXBlPSI0Ig0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRp
b249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0K
KwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVE
aXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpLi4vOyQoUHJvamVjdERpciku
Li8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVH
O19MSUI7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiDQor
CQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJ
CQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9
ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJh
dGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNl
cz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlG
aWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVu
aXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0K
KwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cZGVidWcuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnbHNsYW5nLmwi
DQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4z
MiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJCQkJRGVzY3JpcHRpb249IkV4ZWN1dGluZyBmbGV4IG9uICQoSW5wdXRQYXRoKSINCisJ
CQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtpZiBFWElTVCAmcXVvdDskKElu
cHV0RGlyKUdlbl9nbHNsYW5nLmNwcCZxdW90OyBkZWwgJnF1b3Q7JChJbnB1dERpcilHZW5fZ2xz
bGFuZy5jcHAmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKElucHV0RGlyKXRvb2xzXGZsZXguZXhl
JnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBO3JlbmFtZSAmcXVvdDsk
KElucHV0RGlyKWxleC55eS5jJnF1b3Q7IEdlbl8kKElucHV0TmFtZSkuY3BwJiN4MEQ7JiN4MEE7
QGVjaG8gb2ZmIg0KKwkJCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Imdsc2xhbmdfdGFiLmgi
DQorCQkJCQkJT3V0cHV0cz0iJChJbnB1dERpcilHZW5fZ2xzbGFuZy5jcHAiDQorCQkJCQkvPg0K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9
IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCQkJCURlc2NyaXB0aW9uPSJFeGVjdXRpbmcgZmxleCBv
biAkKElucHV0UGF0aCkiDQorCQkJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7
aWYgRVhJU1QgJnF1b3Q7JChJbnB1dERpcilHZW5fZ2xzbGFuZy5jcHAmcXVvdDsgZGVsICZxdW90
OyQoSW5wdXREaXIpR2VuX2dsc2xhbmcuY3BwJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChJbnB1
dERpcil0b29sc1xmbGV4LmV4ZSZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsm
I3gwQTtyZW5hbWUgJnF1b3Q7JChJbnB1dERpcilsZXgueXkuYyZxdW90OyBHZW5fJChJbnB1dE5h
bWUpLmNwcCYjeDBEOyYjeDBBO0BlY2hvIG9mZiINCisJCQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5j
aWVzPSJnbHNsYW5nX3RhYi5oIg0KKwkJCQkJCU91dHB1dHM9IiQoSW5wdXREaXIpR2VuX2dsc2xh
bmcuY3BwIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGdsc2xhbmcueSINCisJCQkJPg0KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0K
KwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQlEZXNj
cmlwdGlvbj0iRXhlY3V0aW5nIEJpc29uIG9uICQoSW5wdXRQYXRoKSINCisJCQkJCQlDb21tYW5k
TGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtTRVQgQklTT05fU0lNUExFPXRvb2xzXGJpc29uLnNp
bXBsZSYjeDBEOyYjeDBBO1NFVCBCSVNPTl9IQUlSWT10b29sc1xiaXNvbi5zaW1wbGUmI3gwRDsm
I3gwQTtpZiBFWElTVCAmcXVvdDskKElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCZx
dW90OyBkZWwgJnF1b3Q7JChJbnB1dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAmcXVvdDsm
I3gwRDsmI3gwQTt0b29sc1xiaXNvbi5leGUgLWQgLXQgLXYgJChJbnB1dE5hbWUpLnkmI3gwRDsm
I3gwQTtyZW5hbWUgJnF1b3Q7JChJbnB1dERpcikkKElucHV0TmFtZSlfdGFiLmMmcXVvdDsgR2Vu
XyQoSW5wdXROYW1lKV90YWIuY3BwJiN4MEQ7JiN4MEE7QGVjaG8gb2ZmIg0KKwkJCQkJCU91dHB1
dHM9IiQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwIg0KKwkJCQkJLz4NCisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0N1
c3RvbUJ1aWxkVG9vbCINCisJCQkJCQlEZXNjcmlwdGlvbj0iRXhlY3V0aW5nIEJpc29uIG9uICQo
SW5wdXRQYXRoKSINCisJCQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtTRVQg
QklTT05fU0lNUExFPXRvb2xzXGJpc29uLnNpbXBsZSYjeDBEOyYjeDBBO1NFVCBCSVNPTl9IQUlS
WT10b29sc1xiaXNvbi5zaW1wbGUmI3gwRDsmI3gwQTtpZiBFWElTVCAmcXVvdDskKElucHV0RGly
KUdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCZxdW90OyBkZWwgJnF1b3Q7JChJbnB1dERpcilHZW5f
JChJbnB1dE5hbWUpX3RhYi5jcHAmcXVvdDsmI3gwRDsmI3gwQTt0b29sc1xiaXNvbi5leGUgLWQg
LXQgLXYgJChJbnB1dE5hbWUpLnkmI3gwRDsmI3gwQTtyZW5hbWUgJnF1b3Q7JChJbnB1dERpcikk
KElucHV0TmFtZSlfdGFiLmMmcXVvdDsgR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwJiN4MEQ7JiN4
MEE7QGVjaG8gb2ZmIg0KKwkJCQkJCU91dHB1dHM9IiQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1l
KV90YWIuY3BwIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluZm9TaW5rLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5pdGlhbGl6
ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXEluaXRpYWxpemVEbGwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxJbnRlcm1lZGlhdGUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxpbnRlcm1PdXQuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnRlcm1UcmF2
ZXJzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXExpbmsuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxvc3NvdXJjZV93aW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxwYXJzZUNvbnN0LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUGFyc2VIZWxwZXIuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQ
b29sQWxsb2MuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxRdWFsaWZpZXJBbGl2ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbW92ZVRyZWUuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXJMYW5nLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3lt
Ym9sVGFibGUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFt
ZT0icHJlcHJvY2Vzc29yIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5ccHJlcHJvY2Vzc29yXGF0b20uYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxjcHAuYyINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3Nv
clxjcHBzdHJ1Y3QuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxtZW1vcnkuYyINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxzY2Fu
bmVyLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLlxwcmVwcm9jZXNzb3Jcc3ltYm9scy5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQor
CQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHRva2Vucy5jIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQkJPEZpbHRlcg0KKwkJCQlO
YW1lPSJnZW5lcmF0ZWQiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
LlxHZW5fZ2xzbGFuZy5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLlxHZW5fZ2xzbGFuZ190YWIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8
L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1l
PSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQor
CQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJG
Qn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxCYXNlVHlwZXMuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29t
bW9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXENvbnN0YW50VW5pb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cZGVidWcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5mb1NpbmsuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZS5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplRGxs
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
XEluaXRpYWxpemVHbG9iYWxzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5caW50ZXJtZWRpYXRlLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGxv
Y2FsaW50ZXJtZWRpYXRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXE1NYXAuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cb3NpbmNsdWRlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFBhcnNlSGVscGVyLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFBvb2xBbGxvYy5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxRdWFs
aWZpZXJBbGl2ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxSZW1vdmVUcmVlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMU0xBTkdcUmVzb3VyY2VMaW1pdHMu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXGluY2x1ZGVcR0xTTEFOR1xTaGFkZXJMYW5nLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNoSGFuZGxlLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN5bWJvbFRhYmxlLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFR5cGVz
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
XHVuaXN0ZC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0i
cHJlcHJvY2Vzc29yIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
cHJlcHJvY2Vzc29yXGF0b20uaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3Nvclxjb21waWxlLmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNz
b3JcY3BwLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcbWVtb3J5LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JccGFyc2VyLmgi
DQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
LlxwcmVwcm9jZXNzb3JccHJlcHJvY2Vzcy5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
CTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHNjYW5uZXIuaCINCisJ
CQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHBy
ZXByb2Nlc3NvclxzbGdsb2JhbHMuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxzeW1ib2xzLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9j
ZXNzb3JcdG9rZW5zLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJ
CQk8RmlsdGVyDQorCQkJCU5hbWU9ImdlbmVyYXRlZCINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdsc2xhbmdfdGFiLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQk8L0ZpbHRlcj4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJ
PC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvcl9obHNsLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvcl9obHNsLnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yX2hsc2wudmNwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZp
c3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249
IjkuMDAiDQorCU5hbWU9InRyYW5zbGF0b3JfaGxzbCINCisJUHJvamVjdEdVSUQ9Ins1NjIwRjBF
NC02QzQzLTQ5QkMtQTE3OC1CODA0RTFBMEMzQTd9Ig0KKwlSb290TmFtZXNwYWNlPSJDcm9zc0Nv
bXBpbGVySExTTCINCisJS2V5d29yZD0iV2luMzJQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJz
aW9uPSIxOTY2MTMiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9
IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9vbEZp
bGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRl
YnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5h
bWUpXGhsc2wiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFjdGVyU2V0PSIx
Ig0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJ
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS4uLzskKFByb2plY3RE
aXIpLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19E
RUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFs
UmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1l
TGlicmFyeT0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdM
ZXZlbD0iMyINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3Vy
YXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJ
T3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJ
CUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSlcaGxzbCINCisJCQlD
b25maWd1cmF0aW9uVHlwZT0iNCINCisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1
aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWls
ZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGlt
aXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUVuYWJs
ZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv
cmllcz0iJChQcm9qZWN0RGlyKS4uLzskKFByb2plY3REaXIpLi4vLi4vaW5jbHVkZSINCisJCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05P
X1dBUk5JTkdTO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIw
Ig0KKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCisJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJl
c291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlu
a0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZl
bnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+
DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXIN
CisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29k
bDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEt
QzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXENvZGVHZW5ITFNMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cT3V0cHV0SExTTC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRyYW5zbGF0b3JITFNMLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
VW5mb2xkU2VsZWN0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJ
PEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDto
bTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0
LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXE91dHB1dEhMU0wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVHJhbnNsYXRvckhMU0wuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVW5mb2xkU2VsZWN0LmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xv
YmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L3VuaXN0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSBAQAorLy8gVGhpcyBpcyBhIE5VTEwgZmlsZSBhbmQgaXMgbWVhbnQgdG8gYmUgZW1w
dHkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0
d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8v
IGF0b20uYworLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworI3VuZGVmIG1hbGxvYwor
I3VuZGVmIHJlYWxsb2MKKyN1bmRlZiBmcmVlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8g
U3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RhdGljIGNvbnN0IHN0cnVj
dCB7CisgICAgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpzdHI7Cit9IHRva2Vuc1tdID0gewor
ICAgIHsgQ1BQX0FORF9PUCwgICAgICAgICAiJiYiIH0sCisgICAgeyBDUFBfQU5EX0FTU0lHTiwg
ICAgICImPSIgfSwKKyAgICB7IENQUF9TVUJfQVNTSUdOLCAgICAgIi09IiB9LAorICAgIHsgQ1BQ
X01PRF9BU1NJR04sICAgICAiJT0iIH0sCisgICAgeyBDUFBfQUREX0FTU0lHTiwgICAgICIrPSIg
fSwKKyAgICB7IENQUF9ESVZfQVNTSUdOLCAgICAgIi89IiB9LAorICAgIHsgQ1BQX01VTF9BU1NJ
R04sICAgICAiKj0iIH0sCisgICAgeyBDUFBfUklHSFRfQlJBQ0tFVCwgICI6PiIgfSwKKyAgICB7
IENQUF9FUV9PUCwgICAgICAgICAgIj09IiB9LAorICAgIHsgQ1BQX1hPUl9PUCwgICAgICAgICAi
Xl4iIH0sIAorICAgIHsgQ1BQX1hPUl9BU1NJR04sICAgICAiXj0iIH0sIAorICAgIHsgQ1BQX0ZM
T0FUQ09OU1RBTlQsICAiPGZsb2F0LWNvbnN0PiIgfSwKKyAgICB7IENQUF9HRV9PUCwgICAgICAg
ICAgIj49IiB9LAorICAgIHsgQ1BQX1JJR0hUX09QLCAgICAgICAiPj4iIH0sCisgICAgeyBDUFBf
UklHSFRfQVNTSUdOLCAgICI+Pj0iIH0sIAorICAgIHsgQ1BQX0lERU5USUZJRVIsICAgICAiPGlk
ZW50PiIgfSwKKyAgICB7IENQUF9JTlRDT05TVEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9LAorICAg
IHsgQ1BQX0xFX09QLCAgICAgICAgICAiPD0iIH0sCisgICAgeyBDUFBfTEVGVF9PUCwgICAgICAg
ICI8PCIgfSwKKyAgICB7IENQUF9MRUZUX0FTU0lHTiwgICAgIjw8PSIgfSwKKyAgICB7IENQUF9M
RUZUX0JSQUNLRVQsICAgIjw6IiB9LAorICAgIHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAiPCUiIH0s
IAorICAgIHsgQ1BQX0RFQ19PUCwgICAgICAgICAiLS0iIH0sCisgICAgeyBDUFBfUklHSFRfQlJB
Q0UsICAgICIlPiIgfSwgCisgICAgeyBDUFBfTkVfT1AsICAgICAgICAgICIhPSIgfSwKKyAgICB7
IENQUF9PUl9PUCwgICAgICAgICAgInx8IiB9LAorICAgIHsgQ1BQX09SX0FTU0lHTiwgICAgICAi
fD0iIH0sIAorICAgIHsgQ1BQX0lOQ19PUCwgICAgICAgICAiKysiIH0sCisgICAgeyBDUFBfU1RS
Q09OU1RBTlQsICAgICI8c3RyaW5nLWNvbnN0PiIgfSwKKyAgICB7IENQUF9UWVBFSURFTlRJRklF
UiwgIjx0eXBlLWlkZW50PiIgfSwKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3Ry
aW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX1NUUklOR19U
QUJMRV9TSVpFIDE2Mzg0CisKK3R5cGVkZWYgc3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7CisgICAg
Y2hhciAqc3RyaW5nczsKKyAgICBpbnQgbmV4dEZyZWU7CisgICAgaW50IHNpemU7Cit9IFN0cmlu
Z1RhYmxlOworCisvKgorICogSW5pdFN0cmluZ1RhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBzdHJp
bmcgdGFibGUuCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0cmluZ1Rh
YmxlICpzdGFibGUpCit7CisgICAgc3RhYmxlLT5zdHJpbmdzID0gKGNoYXIgKikgbWFsbG9jKElO
SVRfU1RSSU5HX1RBQkxFX1NJWkUpOworICAgIGlmICghc3RhYmxlLT5zdHJpbmdzKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAvLyBaZXJvLXRoIG9mZnNldCBtZWFucyAiZW1wdHkiIHNvIGRvbid0
IHVzZSBpdC4KKyAgICBzdGFibGUtPm5leHRGcmVlID0gMTsKKyAgICBzdGFibGUtPnNpemUgPSBJ
TklUX1NUUklOR19UQUJMRV9TSVpFOworICAgIHJldHVybiAxOworfSAvLyBJbml0U3RyaW5nVGFi
bGUKKworLyoKKyAqIEZyZWVTdHJpbmdUYWJsZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRhYmxlLgor
ICoKKyAqLworCitzdGF0aWMgdm9pZCBGcmVlU3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJs
ZSkKK3sKKyAgICBpZiAoc3RhYmxlLT5zdHJpbmdzKQorICAgICAgICBmcmVlKHN0YWJsZS0+c3Ry
aW5ncyk7CisgICAgc3RhYmxlLT5zdHJpbmdzID0gTlVMTDsKKyAgICBzdGFibGUtPm5leHRGcmVl
ID0gMDsKKyAgICBzdGFibGUtPnNpemUgPSAwOworfSAvLyBGcmVlU3RyaW5nVGFibGUKKworLyoK
KyAqIEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0
aW9uLgorICoKKyAqLworCitzdGF0aWMgaW50IEhhc2hTdHJpbmcoY29uc3QgY2hhciAqcykKK3sK
KyAgICBpbnQgaHZhbCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZhbCA9ICho
dmFsKjEzNTA3ICsgKnMqMTk3KSBeIChodmFsID4+IDIpOworICAgICAgICBzKys7CisgICAgfQor
ICAgIHJldHVybiBodmFsICYgMHg3ZmZmZmZmZjsKK30gLy8gSGFzaFN0cmluZworCisvKgorICog
SGFzaFN0cmluZzIoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgaW5jcmltZW50aW5nIGhhc2gg
ZnVuY3Rpb24uCisgKgorICovCisKK3N0YXRpYyBpbnQgSGFzaFN0cmluZzIoY29uc3QgY2hhciAq
cykKK3sKKyAgICBpbnQgaHZhbCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZh
bCA9IChodmFsKjcyOSArICpzKjM3KSBeIChodmFsID4+IDEpOworICAgICAgICBzKys7CisgICAg
fQorICAgIHJldHVybiBodmFsOworfSAvLyBIYXNoU3RyaW5nMgorCisvKgorICogQWRkU3RyaW5n
KCkgLSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJpbmcgdGFibGUuICBSZXR1cm4gaXQncyBvZmZzZXQu
CisgKgorICovCisKK3N0YXRpYyBpbnQgQWRkU3RyaW5nKFN0cmluZ1RhYmxlICpzdGFibGUsIGNv
bnN0IGNoYXIgKnMpCit7CisgICAgaW50IGxlbiwgbG9jOworICAgIGNoYXIgKnN0cjsKKworICAg
IGxlbiA9IChpbnQpIHN0cmxlbihzKTsKKyAgICBpZiAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiAr
IDEgPj0gc3RhYmxlLT5zaXplKSB7CisgICAgICAgIGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAw
MDAwKTsKKyAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKKyAg
ICAgICAgbWVtY3B5KHN0ciwgc3RhYmxlLT5zdHJpbmdzLCBzdGFibGUtPnNpemUpOworICAgICAg
ICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7CisgICAgICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsK
KyAgICB9CisgICAgbG9jID0gc3RhYmxlLT5uZXh0RnJlZTsKKyAgICBzdHJjcHkoJnN0YWJsZS0+
c3RyaW5nc1tsb2NdLCBzKTsKKyAgICBzdGFibGUtPm5leHRGcmVlICs9IGxlbiArIDE7CisgICAg
cmV0dXJuIGxvYzsKK30gLy8gQWRkU3RyaW5nCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
IEhhc2ggdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX0hBU0hf
VEFCTEVfU0laRSAyMDQ3CisjZGVmaW5lIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgMworCit0
eXBlZGVmIHN0cnVjdCBIYXNoRW50cnlfUmVjIHsKKyAgICBpbnQgaW5kZXg7ICAgICAgLy8gU3Ry
aW5nIHRhYmxlIG9mZnNldCBvZiBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgICBpbnQgdmFsdWU7
ICAgICAgLy8gQXRvbSAoc3ltYm9sKSB2YWx1ZQorfSBIYXNoRW50cnk7CisKK3R5cGVkZWYgc3Ry
dWN0IEhhc2hUYWJsZV9SZWMgeworICAgIEhhc2hFbnRyeSAqZW50cnk7CisgICAgaW50IHNpemU7
CisgICAgaW50IGVudHJpZXM7CisgICAgaW50IGNvdW50c1tIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TICsgMV07Cit9IEhhc2hUYWJsZTsKKworLyoKKyAqIEluaXRIYXNoVGFibGUoKSAtIEluaXRp
YWxpemUgdGhlIGhhc2ggdGFibGUuCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5pdEhhc2hUYWJs
ZShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGZzaXplKQoreworICAgIGludCBpaTsKKworICAgIGh0
YWJsZS0+ZW50cnkgPSAoSGFzaEVudHJ5ICopIG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSpmc2l6
ZSk7CisgICAgaWYgKCFodGFibGUtPmVudHJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICBodGFi
bGUtPnNpemUgPSBmc2l6ZTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBmc2l6ZTsgaWkrKykgewor
ICAgICAgICBodGFibGUtPmVudHJ5W2lpXS5pbmRleCA9IDA7CisgICAgICAgIGh0YWJsZS0+ZW50
cnlbaWldLnZhbHVlID0gMDsKKyAgICB9CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKKyAgICBm
b3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykKKyAgICAg
ICAgaHRhYmxlLT5jb3VudHNbaWldID0gMDsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5pdEhhc2hU
YWJsZQorCisvKgorICogRnJlZUhhc2hUYWJsZSgpIC0gRnJlZSB0aGUgaGFzaCB0YWJsZS4KKyAq
CisgKi8KKworc3RhdGljIHZvaWQgRnJlZUhhc2hUYWJsZShIYXNoVGFibGUgKmh0YWJsZSkKK3sK
KyAgICBpZiAoaHRhYmxlLT5lbnRyeSkKKyAgICAgICAgZnJlZShodGFibGUtPmVudHJ5KTsKKyAg
ICBodGFibGUtPmVudHJ5ID0gTlVMTDsKKyAgICBodGFibGUtPnNpemUgPSAwOworICAgIGh0YWJs
ZS0+ZW50cmllcyA9IDA7Cit9IC8vIEZyZWVIYXNoVGFibGUKKworLyoKKyAqIEVtcHR5KCkgLSBT
ZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LgorICoKKyAqLworCitzdGF0aWMgaW50
IEVtcHR5KEhhc2hUYWJsZSAqaHRhYmxlLCBpbnQgaGFzaGxvYykKK3sKKyAgICBhc3NlcnQoaGFz
aGxvYyA+PSAwICYmIGhhc2hsb2MgPCBodGFibGUtPnNpemUpOworICAgIGlmIChodGFibGUtPmVu
dHJ5W2hhc2hsb2NdLmluZGV4ID09IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfSAvLyBFbXB0eQorCisvKgorICogTWF0Y2go
KSAtIFNlZSBpZiBhIGhhc2ggdGFibGUgZW50cnkgaXMgbWF0Y2hlcyBhIHN0cmluZy4KKyAqCisg
Ki8KKworc3RhdGljIGludCBNYXRjaChIYXNoVGFibGUgKmh0YWJsZSwgU3RyaW5nVGFibGUgKnN0
YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGhhc2hsb2MpCit7CisgICAgaW50IHN0cmxvYzsKKwor
ICAgIHN0cmxvYyA9IGh0YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXg7CisgICAgaWYgKCFzdHJj
bXAocywgJnN0YWJsZS0+c3RyaW5nc1tzdHJsb2NdKSkgeworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIE1hdGNoCisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vIEF0b20gdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworI2RlZmluZSBJTklUX0FUT01fVEFCTEVfU0laRSAxMDI0CisKKworc3RydWN0IEF0b21UYWJs
ZV9SZWMgeworICAgIFN0cmluZ1RhYmxlIHN0YWJsZTsgLy8gU3RyaW5nIHRhYmxlLgorICAgIEhh
c2hUYWJsZSBodGFibGU7ICAgLy8gSGFzaGVzIHN0cmluZyB0byBhdG9tIG51bWJlciBhbmQgdG9r
ZW4gdmFsdWUuICBNdWx0aXBsZSBzdHJpbmdzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaGF2ZSB0aGUgc2FtZSB0b2tlbiB2YWx1ZSBidXQgZWFjaCB1bmlxdWUgc3RyaW5nIGlzIGEg
dW5pcXVlIGF0b20uCisgICAgaW50ICphbWFwOyAgICAgICAgICAvLyBNYXBzIGF0b20gdmFsdWUg
dG8gb2Zmc2V0IGluIHN0cmluZyB0YWJsZS4gIEF0b21zIGFsbCBtYXAgdG8gdW5pcXVlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIGV4Y2VwdCBmb3Igc29tZSB1bmRlZmluZWQg
dmFsdWVzIGluIHRoZSBsb3dlciwgZml4ZWQgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gb2YgdGhlIGF0b20gdGFibGUgdGhhdCBtYXAgdG8gIjx1bmRlZmluZWQ+Ii4gIFRoZSBsb3dl
c3QgMjU2IGF0b21zCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHNp
bmdsZSBjaGFyYWN0ZXIgQVNDSUkgdmFsdWVzIGV4Y2VwdCBmb3IgYWxwaGFudW1lcmljCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGFuZCAnXycsIHdoaWNoIGNhbiBiZSBv
dGhlciB0b2tlbnMuICBOZXh0IGNvbWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
YW5ndWFnZSB0b2tlbnMgd2l0aCB0aGVpciBhdG9tIHZhbHVlcyBlcXVhbCB0byB0aGUgdG9rZW4g
dmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbWUgcHJlZGVmaW5lZCBh
dG9tcywgZm9sbG93ZWQgYnkgdXNlciBzcGVjaWZpZWQgaWRlbnRpZmllcnMuCisgICAgaW50ICph
cmV2OyAgICAgICAgICAvLyBSZXZlcnNlZCBhdG9tIGZvciBzeW1ib2wgdGFibGUgdXNlLgorICAg
IGludCBuZXh0RnJlZTsKKyAgICBpbnQgc2l6ZTsKK307CisKK3N0YXRpYyBBdG9tVGFibGUgbGF0
YWJsZSA9IHsgeyAwIH0gfTsKK0F0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CisKK3N0YXRp
YyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQg
YXRvbSk7CisKKy8qCisgKiBHcm93QXRvbVRhYmxlKCkgLSBHcm93IHRoZSBhdG9tIHRhYmxlIHRv
IGF0IGxlYXN0ICJzaXplIiBpZiBpdCdzIHNtYWxsZXIuCisgKgorICovCisKK3N0YXRpYyBpbnQg
R3Jvd0F0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IHNpemUpCit7CisgICAgaW50ICpu
ZXdtYXAsICpuZXdyZXY7CisKKyAgICBpZiAoYXRhYmxlLT5zaXplIDwgc2l6ZSkgeworICAgICAg
ICBpZiAoYXRhYmxlLT5hbWFwKSB7CisgICAgICAgICAgICBuZXdtYXAgPSByZWFsbG9jKGF0YWJs
ZS0+YW1hcCwgc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBuZXdyZXYgPSByZWFsbG9j
KGF0YWJsZS0+YXJldiwgc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBuZXdtYXAgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBu
ZXdyZXYgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBhdGFibGUtPnNp
emUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICghbmV3bWFwIHx8ICFuZXdyZXYpIHsKKyAg
ICAgICAgICAgIC8qIGZhaWxlZCB0byBncm93IC0tIGVycm9yICovCisgICAgICAgICAgICBpZiAo
bmV3bWFwKQorICAgICAgICAgICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKKyAgICAgICAg
ICAgIGlmIChuZXdyZXYpCisgICAgICAgICAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3cmV2Owor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbXNldCgmbmV3bWFw
W2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsK
KyAgICAgICAgbWVtc2V0KCZuZXdyZXZbYXRhYmxlLT5zaXplXSwgMCwgKHNpemUgLSBhdGFibGUt
PnNpemUpICogc2l6ZW9mKGludCkpOworICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7Cisg
ICAgICAgIGF0YWJsZS0+YXJldiA9IG5ld3JldjsKKyAgICAgICAgYXRhYmxlLT5zaXplID0gc2l6
ZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9IC8vIEdyb3dBdG9tVGFibGUKKworLyoKKyAqIGxS
ZXZlcnNlKCkgLSBSZXZlcnNlIHRoZSBib3R0b20gMjAgYml0cyBvZiBhIDMyIGJpdCBpbnQuCisg
KgorICovCisKK3N0YXRpYyBpbnQgbFJldmVyc2UoaW50IGZ2YWwpCit7CisgICAgdW5zaWduZWQg
aW50IGluID0gZnZhbDsKKyAgICBpbnQgcmVzdWx0ID0gMCwgY250ID0gMDsKKworICAgIHdoaWxl
KGluKSB7CisgICAgICAgIHJlc3VsdCA8PD0gMTsKKyAgICAgICAgcmVzdWx0IHw9IGluJjE7Cisg
ICAgICAgIGluID4+PSAxOworICAgICAgICBjbnQrKzsKKyAgICB9CisKKyAgICAvLyBEb24ndCB1
c2UgYWxsIDMxIGJpdHMuICBPbmUgbWlsbGlvbiBhdG9tcyBpcyBwbGVudHkgYW5kIHNvbWV0aW1l
cyB0aGUKKyAgICAvLyB1cHBlciBiaXRzIGFyZSB1c2VkIGZvciBvdGhlciB0aGluZ3MuCisKKyAg
ICBpZiAoY250IDwgMjApCisgICAgICAgIHJlc3VsdCA8PD0gMjAgLSBjbnQ7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30gLy8gbFJldmVyc2UKKworLyoKKyAqIEFsbG9jYXRlQXRvbSgpIC0gQWxsb2Nh
dGUgYSBuZXcgYXRvbS4gIEFzc29jaWF0ZWQgd2l0aCB0aGUgInVuZGVmaW5lZCIgdmFsdWUgb2Yg
LTEuCisgKgorICovCisKK3N0YXRpYyBpbnQgQWxsb2NhdGVBdG9tKEF0b21UYWJsZSAqYXRhYmxl
KQoreworICAgIGlmIChhdGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSkKKyAgICAgICAg
R3Jvd0F0b21UYWJsZShhdGFibGUsIGF0YWJsZS0+bmV4dEZyZWUqMik7CisgICAgYXRhYmxlLT5h
bWFwW2F0YWJsZS0+bmV4dEZyZWVdID0gLTE7CisgICAgYXRhYmxlLT5hcmV2W2F0YWJsZS0+bmV4
dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7CisgICAgYXRhYmxlLT5uZXh0RnJl
ZSsrOworICAgIHJldHVybiBhdGFibGUtPm5leHRGcmVlIC0gMTsKK30gLy8gQWxsb2NhdGVBdG9t
CisKKy8qCisgKiBTZXRBdG9tVmFsdWUoKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20gYXNzb2NpYXRl
ZCB3aXRoICJoYXNoaW5kZXgiLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBTZXRBdG9tVmFsdWUo
QXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tbnVtYmVyLCBpbnQgaGFzaGluZGV4KQoreworICAg
IGF0YWJsZS0+YW1hcFthdG9tbnVtYmVyXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRl
eF0uaW5kZXg7CisgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0
b21udW1iZXI7Cit9IC8vIFNldEF0b21WYWx1ZQorCisvKgorICogRmluZEhhc2hMb2MoKSAtIEZp
bmQgdGhlIGhhc2ggbG9jYXRpb24gZm9yIHRoaXMgc3RyaW5nLiAgUmV0dXJuIC0xIGl0IGhhc2gg
dGFibGUgaXMgZnVsbC4KKyAqCisgKi8KKworc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFi
bGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgaGFzaGxvYywgaGFzaGRlbHRh
LCBjb3VudDsKKyAgICBpbnQgRm91bmRFbXB0eVNsb3QgPSAwOworICAgIGludCBjb2xsaXNpb25b
SEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOworCisgICAgaGFzaGxvYyA9IEhhc2hTdHJp
bmcocykgJSBhdGFibGUtPmh0YWJsZS5zaXplOworICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRh
YmxlLCBoYXNobG9jKSkgeworICAgICAgICBpZiAoTWF0Y2goJmF0YWJsZS0+aHRhYmxlLCAmYXRh
YmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKQorICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7Cisg
ICAgICAgIGNvbGxpc2lvblswXSA9IGhhc2hsb2M7CisgICAgICAgIGhhc2hkZWx0YSA9IEhhc2hT
dHJpbmcyKHMpOworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjb3VudCA8IEhB
U0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpIHsKKyAgICAgICAgICAgIGhhc2hsb2MgPSAoKGhhc2hs
b2MgKyBoYXNoZGVsdGEpICYgMHg3ZmZmZmZmZikgJSBhdGFibGUtPmh0YWJsZS5zaXplOworICAg
ICAgICAgICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBo
YXNobG9jKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZvdW5kRW1w
dHlTbG90ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICBjb2xsaXNpb25bY291bnRdID0gaGFzaGxvYzsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghRm91bmRFbXB0eVNsb3QpIHsKKyAgICAgICAgICAg
IGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgeworICAgICAgICAgICAgICAgIGludCBp
aTsKKyAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOworICAgICAgICAgICAgICAgIHNwcmlu
dGYoc3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11
c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgICAgICAg
ICBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coc3RyKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIE5ldyBzdHJp
bmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hk
ZWx0YSk7CisgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisgICAgICAgICAg
ICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5
ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhdGFibGUtPmh0YWJsZS5jb3VudHNbY291bnRdKys7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGhhc2hsb2M7Cit9IC8vIEZpbmRIYXNoTG9jCisKKy8qCisgKiBJbmNyZWFzZUhhc2hU
YWJsZVNpemUoKQorICoKKyAqLworCitzdGF0aWMgaW50IEluY3JlYXNlSGFzaFRhYmxlU2l6ZShB
dG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBpbnQgaWksIHN0cmxvYywgb2xkaGFzaGxvYywgdmFs
dWUsIHNpemU7CisgICAgQXRvbVRhYmxlIG9sZHRhYmxlOworICAgIGNoYXIgKnM7CisKKyAgICAv
LyBTYXZlIHRoZSBvbGQgYXRvbSB0YWJsZSBhbmQgY3JlYXRlIGEgbmV3IG9uZToKKworICAgIG9s
ZHRhYmxlID0gKmF0YWJsZTsKKyAgICBzaXplID0gb2xkdGFibGUuaHRhYmxlLnNpemUqMiArIDE7
CisgICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgc2l6ZSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gQWRkIGFsbCB0aGUgZXhpc3RpbmcgdmFsdWVzIHRvIHRoZSBuZXcgYXRvbSB0
YWJsZSBwcmVzZXJ2aW5nIHRoZWlyIGF0b20gdmFsdWVzOgorCisgICAgZm9yIChpaSA9IGF0YWJs
ZS0+bmV4dEZyZWU7IGlpIDwgb2xkdGFibGUubmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAgc3Ry
bG9jID0gb2xkdGFibGUuYW1hcFtpaV07CisgICAgICAgIHMgPSAmb2xkdGFibGUuc3RhYmxlLnN0
cmluZ3Nbc3RybG9jXTsKKyAgICAgICAgb2xkaGFzaGxvYyA9IEZpbmRIYXNoTG9jKCZvbGR0YWJs
ZSwgcyk7CisgICAgICAgIGFzc2VydChvbGRoYXNobG9jID49IDApOworICAgICAgICB2YWx1ZSA9
IG9sZHRhYmxlLmh0YWJsZS5lbnRyeVtvbGRoYXNobG9jXS52YWx1ZTsKKyAgICAgICAgQWRkQXRv
bUZpeGVkKGF0YWJsZSwgcywgdmFsdWUpOworICAgIH0KKyAgICBGcmVlQXRvbVRhYmxlKCZvbGR0
YWJsZSk7CisgICAgcmV0dXJuIDE7Cit9IC8vIEluY3JlYXNlSGFzaFRhYmxlU2l6ZQorCisvKgor
ICogTG9va1VwQWRkU3RyaW5nSGFzaCgpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRh
YmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKKyAqICAgICAgICBpbml0aWFsaXpl
IHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIDAuICBSZXR1cm4gdGhlIGhhc2gg
dGFibGUgaW5kZXguCisgKi8KKworc3RhdGljIGludCBMb29rVXBBZGRTdHJpbmdIYXNoKEF0b21U
YWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBoYXNobG9jLCBzdHJsb2M7
CisKKyAgICB3aGlsZSgxKSB7CisgICAgICAgIGhhc2hsb2MgPSBGaW5kSGFzaExvYyhhdGFibGUs
IHMpOworICAgICAgICBpZiAoaGFzaGxvYyA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIEluY3JlYXNlSGFzaFRhYmxlU2l6ZShhdGFibGUpOworICAgIH0KKworICAgIGlmIChFbXB0
eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVu
dHJpZXMrKzsKKyAgICAgICAgc3RybG9jID0gQWRkU3RyaW5nKCZhdGFibGUtPnN0YWJsZSwgcyk7
CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLmluZGV4ID0gc3RybG9jOwor
ICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS52YWx1ZSA9IDA7CisgICAgfQor
ICAgIHJldHVybiBoYXNobG9jOworfSAvLyBMb29rVXBBZGRTdHJpbmdIYXNoCisKKy8qCisgKiBM
b29rVXBBZGRTdHJpbmcoKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElm
IGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQgYW5kCisgKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRv
bSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byB0aGUgbmV4dCBhdG9tIG51bWJlci4KKyAqICAg
ICAgICBSZXR1cm4gdGhlIGF0b20gdmFsdWUgb2Ygc3RyaW5nLgorICovCisKK2ludCBMb29rVXBB
ZGRTdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGhh
c2hpbmRleCwgYXRvbTsKKworICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRh
YmxlLCBzKTsKKyAgICBhdG9tID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1
ZTsKKyAgICBpZiAoYXRvbSA9PSAwKSB7CisgICAgICAgIGF0b20gPSBBbGxvY2F0ZUF0b20oYXRh
YmxlKTsKKyAgICAgICAgU2V0QXRvbVZhbHVlKGF0YWJsZSwgYXRvbSwgaGFzaGluZGV4KTsKKyAg
ICB9CisgICAgcmV0dXJuIGF0b207Cit9IC8vIExvb2tVcEFkZFN0cmluZworCisvKgorICogR2V0
QXRvbVN0cmluZygpCisgKgorICovCisKK2NvbnN0ICBjaGFyICpHZXRBdG9tU3RyaW5nKEF0b21U
YWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKK3sKKyAgICBpbnQgc29mZnNldDsKKworICAgIGlmIChh
dG9tID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICBzb2Zmc2V0ID0g
YXRhYmxlLT5hbWFwW2F0b21dOworICAgICAgICBpZiAoc29mZnNldCA+IDAgJiYgc29mZnNldCA8
IGF0YWJsZS0+c3RhYmxlLm5leHRGcmVlKSB7CisgICAgICAgICAgICByZXR1cm4gJmF0YWJsZS0+
c3RhYmxlLnN0cmluZ3Nbc29mZnNldF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gIjxpbnRlcm5hbCBlcnJvcjogYmFkIHNvZmZzZXQ+IjsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChhdG9tID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAiPG51
bGwgYXRvbT4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGF0b20gPT0gRU9G
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8RU9GPiI7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJldHVybiAiPGludmFsaWQgYXRvbT4iOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfSAvLyBHZXRBdG9tU3RyaW5nCisKKy8qCisgKiBHZXRSZXZl
cnNlZEF0b20oKQorICoKKyAqLworCitpbnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRh
YmxlLCBpbnQgYXRvbSkKK3sKKyAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4
dEZyZWUpIHsKKyAgICAgICAgcmV0dXJuIGF0YWJsZS0+YXJldlthdG9tXTsKKyAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIEdldFJldmVyc2VkQXRvbQorCisvKgor
ICogQWRkQXRvbSgpIC0gQWRkIGEgc3RyaW5nIHRvIHRoZSBhdG9tLCBoYXNoIGFuZCBzdHJpbmcg
dGFibGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCisgKiAgICAgICAgIFJldHVybiBpdCdz
IGF0b20gaW5kZXguCisgKi8KKworaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0
IGNoYXIgKnMpCit7CisgICAgaW50IGF0b207CisKKyAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgcyk7CisgICAgcmV0dXJuIGF0b207Cit9IC8vIEFkZEF0b20KKworLyoKKyAqIEFk
ZEF0b21GaXhlZCgpIC0gQWRkIGFuIGF0b20gdG8gdGhlIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMg
aWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZS4KKyAqICAgICAgICAgQXNzaWduIGl0IHRoZSBhdG9t
IHZhbHVlIG9mICJhdG9tIi4KKyAqLworCitzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFi
bGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pCit7CisgICAgaW50IGhhc2hpbmRl
eCwgbHNpemU7CisKKyAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwg
cyk7CisgICAgaWYgKGF0YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplIHx8IGF0b20gPj0g
YXRhYmxlLT5zaXplKSB7CisgICAgICAgIGxzaXplID0gYXRhYmxlLT5zaXplKjI7CisgICAgICAg
IGlmIChsc2l6ZSA8PSBhdG9tKQorICAgICAgICAgICAgbHNpemUgPSBhdG9tICsgMTsKKyAgICAg
ICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIGxzaXplKTsKKyAgICB9CisgICAgYXRhYmxlLT5hbWFw
W2F0b21dID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbTsKKyAgICAvL2lmIChhdG9t
ID49IGF0YWJsZS0+bmV4dEZyZWUpCisgICAgLy8gICAgYXRhYmxlLT5uZXh0RnJlZSA9IGF0b20g
KyAxOworICAgIHdoaWxlIChhdG9tID49IGF0YWJsZS0+bmV4dEZyZWUpIHsKKyAgICAgICAgYXRh
YmxlLT5hcmV2W2F0YWJsZS0+bmV4dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7
CisgICAgICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKKyAgICB9CisgICAgcmV0dXJuIGF0b207Cit9
IC8vIEFkZEF0b21GaXhlZAorCisvKgorICogSW5pdEF0b21UYWJsZSgpIC0gSW5pdGlhbGl6ZSB0
aGUgYXRvbSB0YWJsZS4KKyAqCisgKi8KKworaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICph
dGFibGUsIGludCBodHNpemUpCit7CisgICAgaW50IGlpOworCisgICAgaHRzaXplID0gaHRzaXpl
IDw9IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKKyAgICBpZiAoIUluaXRTdHJp
bmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUlu
aXRIYXNoVGFibGUoJmF0YWJsZS0+aHRhYmxlLCBodHNpemUpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIGF0YWJsZS0+YW1hcCA9IE5VTEw7Cisg
ICAgYXRhYmxlLT5zaXplID0gMDsKKyAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgSU5JVF9BVE9N
X1RBQkxFX1NJWkUpOworICAgIGlmICghYXRhYmxlLT5hbWFwKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIEluaXRpYWxpemUgbG93ZXIgcGFydCBvZiBhdG9tIHRhYmxlIHRvICI8dW5kZWZp
bmVkPiIgYXRvbToKKworICAgIEFkZEF0b21GaXhlZChhdGFibGUsICI8dW5kZWZpbmVkPiIsIDAp
OworICAgIGZvciAoaWkgPSAwOyBpaSA8IEZJUlNUX1VTRVJfVE9LRU5fU1k7IGlpKyspCisgICAg
ICAgIGF0YWJsZS0+YW1hcFtpaV0gPSBhdGFibGUtPmFtYXBbMF07CisKKyAgICAvLyBBZGQgc2lu
Z2xlIGNoYXJhY3RlciB0b2tlbnMgdG8gdGhlIGF0b20gdGFibGU6CisKKyAgICB7CisJCWNvbnN0
IGNoYXIgKnMgPSAifiElXiYqKCktKz18LC48Pi8/OzpbXXt9IyI7CisgICAgICAgIGNoYXIgdFsy
XTsKKworICAgICAgICB0WzFdID0gJ1wwJzsKKyAgICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAg
ICAgICB0WzBdID0gKnM7CisgICAgICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0LCBzWzBd
KTsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBtdWx0
aXBsZSBjaGFyYWN0ZXIgc2Nhbm5lciB0b2tlbnMgOgorCisgICAgZm9yIChpaSA9IDA7IGlpIDwg
c2l6ZW9mKHRva2Vucykvc2l6ZW9mKHRva2Vuc1swXSk7IGlpKyspCisgICAgICAgIEFkZEF0b21G
aXhlZChhdGFibGUsIHRva2Vuc1tpaV0uc3RyLCB0b2tlbnNbaWldLnZhbCk7CisKKyAgICAvLyBB
ZGQgZXJyb3Igc3ltYm9sIGlmIHJ1bm5pbmcgaW4gZXJyb3IgbW9kZToKKworICAgIGlmIChjcHAt
Pm9wdGlvbnMuRXJyb3JNb2RlKQorICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiZXJyb3Ii
LCBFUlJPUl9TWSk7CisKKyAgICBBZGRBdG9tKGF0YWJsZSwgIjwqKiogZW5kIGZpeGVkIGF0b21z
ICoqKj4iKTsKKworICAgIHJldHVybiAxOworfSAvLyBJbml0QXRvbVRhYmxlCisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIERlYnVnIFByaW50aW5nIEZ1bmN0aW9uczogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
LyoKKyAqIFByaW50QXRvbVRhYmxlKCkKKyAqCisgKi8KKwordm9pZCBQcmludEF0b21UYWJsZShB
dG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBpbnQgaWk7CisgICAgY2hhciBzdHJbMjAwXTsKKwor
ICAgIGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAg
c3ByaW50ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0
YWJsZS0+YW1hcFtpaV1dKTsKKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9Cisg
ICAgc3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNp
b25zPSIsCisgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLnNpemUsIGF0YWJsZS0+aHRhYmxlLmVu
dHJpZXMpOworICAgIENQUERlYnVnTG9nTXNnKHN0cik7CisgICAgZm9yIChpaSA9IDA7IGlpIDwg
SEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgeworICAgICAgICBzcHJpbnRmKHN0ciwg
IiAlZCIsIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tpaV0pOworICAgICAgICBDUFBEZWJ1Z0xvZ01z
ZyhzdHIpOworICAgIH0KKworfSAvLyBQcmludEF0b21UYWJsZQorCisKKy8qCisgKiBHZXRTdHJp
bmdPZkF0b20oKQorICoKKyAqLworCitjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICph
dGFibGUsIGludCBhdG9tKQoreworCSBjaGFyKiBjaHJfc3RyOworCSBjaHJfc3RyPSZhdGFibGUt
PnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFthdG9tXV07CisJIHJldHVybiBjaHJfc3RyOwor
fSAvLyBHZXRTdHJpbmdPZkF0b20KKworLyoKKyAqIEZyZWVBdG9tVGFibGUoKSAtIEZyZWUgdGhl
IGF0b20gdGFibGUgYW5kIGFzc29jaWF0ZWQgbWVtb3J5CisgKgorICovCisKK3ZvaWQgRnJlZUF0
b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBGcmVlU3RyaW5nVGFibGUoJmF0YWJs
ZS0+c3RhYmxlKTsKKyAgICBGcmVlSGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSk7CisgICAgaWYg
KGF0YWJsZS0+YW1hcCkKKyAgICAgICAgZnJlZShhdGFibGUtPmFtYXApOworICAgIGlmIChhdGFi
bGUtPmFyZXYpCisgICAgICAgIGZyZWUoYXRhYmxlLT5hcmV2KTsKKyAgICBhdGFibGUtPmFtYXAg
PSBOVUxMOworICAgIGF0YWJsZS0+YXJldiA9IE5VTEw7CisgICAgYXRhYmxlLT5uZXh0RnJlZSA9
IDA7CisgICAgYXRhYmxlLT5zaXplID0gMDsKK30gLy8gRnJlZUF0b21UYWJsZQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIGF0b20uYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
K0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJl
LgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGF0b20u
aAorLy8KKworI2lmICFkZWZpbmVkKF9fQVRPTV9IKQorI2RlZmluZSBfX0FUT01fSCAxCisKK3R5
cGVkZWYgc3RydWN0IEF0b21UYWJsZV9SZWMgQXRvbVRhYmxlOworCitleHRlcm4gQXRvbVRhYmxl
ICphdGFibGU7CisKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRz
aXplKTsKK3ZvaWQgRnJlZUF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7CitpbnQgQWRkQXRv
bShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Cit2b2lkIFByaW50QXRvbVRhYmxl
KEF0b21UYWJsZSAqYXRhYmxlKTsKK2ludCBMb29rVXBBZGRTdHJpbmcoQXRvbVRhYmxlICphdGFi
bGUsIGNvbnN0IGNoYXIgKnMpOworY29uc3QgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUg
KmF0YWJsZSwgaW50IGF0b20pOworaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJs
ZSwgaW50IGF0b20pOworY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgYXRvbSk7CisjZW5kaWYgLy8gIWRlZmluZWQoX19BVE9NX0gpCkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAor
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0lu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
K05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitU
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAor
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY29tcGlsZS5oCisv
LworCisjaWYgIWRlZmluZWQoX19DT01QSUxFX0gpCisjZGVmaW5lIF9fQ09NUElMRV9IIDEKKwor
aW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0IE9wdGlvbnNfUmVjewor
ICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVTdHJpbmc7CisgICAgaW50IEVycm9yTW9kZTsKKyAgICBp
bnQgUXVpZXQ7CisJCisgICAgLy8gRGVidWcgVGhlIENvbXBpbGVyIG9wdGlvbnM6CisgICAgaW50
IER1bXBBdG9tVGFibGU7Cit9IE9wdGlvbnM7CisKK3N0cnVjdCBDUFBTdHJ1Y3RfUmVjIHsKKyAg
ICAvLyBQdWJsaWMgbWVtYmVycworICAgIFNvdXJjZUxvYyAqcExhc3RTb3VyY2VMb2M7ICAvLyBT
ZXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc3RhdGVtZW50IGJ5IHRoZSB0cmVlIHdhbGtlcnMKKyAg
ICBPcHRpb25zIG9wdGlvbnM7ICAgICAgICAgICAgLy8gQ29tcGlsZSBvcHRpb25zIGFuZCBwYXJh
bWV0ZXJzCisKKyAgICAvLyBQcml2YXRlIG1lbWJlcnMKKyAgICBTb3VyY2VMb2MgbGFzdFNvdXJj
ZUxvYzsKKworICAgIC8vIFNjYW5uZXIgZGF0YToKKworICAgIFNvdXJjZUxvYyAqdG9rZW5Mb2M7
ICAgICAgICAvLyBTb3VyY2UgbG9jYXRpb24gb2YgbW9zdCByZWNlbnQgdG9rZW4gc2VlbiBieSB0
aGUgc2Nhbm5lcgorICAgIGludCBtb3N0UmVjZW50VG9rZW47ICAgICAgICAvLyBNb3N0IHJlY2Vu
dCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCisgICAgSW5wdXRTcmMgKmN1cnJlbnRJbnB1dDsK
KyAgICBpbnQgcHJldmlvdXNfdG9rZW47CisgICAgaW50IHBhc3RGaXJzdFN0YXRlbWVudDsgICAg
IC8vIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgI3ZlcnNpb24gaXMgdGhlIGZpcnN0IHN0YXRlbWVu
dCBzZWVuIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50CisgICAgCisJdm9pZCAqcEM7ICAgICAgICAg
ICAgICAgICAgIC8vIHN0b3JpbmcgdGhlIHBhcnNlQ29udGV4dCBvZiB0aGUgY29tcGlsZSBvYmpl
Y3QgaW4gY3BwLiAgCisgICAgIAorICAgIC8vIFByaXZhdGUgbWVtYmVyczoKKyAgICBTb3VyY2VM
b2MgbHRva2VuTG9jOworCWludCBpZmRlcHRoOyAgICAgICAgICAgICAgICAvL2N1cnJlbnQgI2lm
LSNlbHNlLSNlbmRpZiBuZXN0aW5nIGluIHRoZSBjcHAuYyBmaWxlIChwcmUtcHJvY2Vzc29yKSAg
ICAKKyAgICBpbnQgZWxzZWRlcHRoWzY0XTsgICAgICAgICAgLy9LZWVwIGEgdHJhY2sgb2YgI2lm
IGRlcHRoLi5NYXggYWxsb3dlZCBpcyA2NC4gICAKKyAgICBpbnQgZWxzZXRyYWNrZXI7ICAgICAg
ICAgICAgLy8jaWYtI2Vsc2UgYW5kICNlbmRpZiBjb25zdHJ1Y3RzLi4uQ291bnRlci4KKyAgICBj
b25zdCBjaGFyICpFcnJNc2c7CisgICAgaW50IENvbXBpbGVFcnJvcjsgICAgICAgICAgIC8vSW5k
aWNhdGUgY29tcGlsZSBlcnJvciB3aGVuICNlcnJvciwgI2Vsc2UsI2VsaWYgbWlzbWF0Y2guCisK
KyAgICAvLworICAgIC8vIEdsb2JhbHMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIFBhUGFy
c2VTdHJpbmdzKCkgYW5kIHl5X2lucHV0KClhbmQgCisgICAgLy8gYWxzbyBhY3Jvc3MgdGhlIGZp
bGVzLihnZW5fZ2xzbGFuZy5jcHAgYW5kIHNjYW5uZXIuYykKKyAgICAvLworICAgIGludCAgICBQ
YVdoaWNoU3RyOyAgICAgICAgICAgIC8vIHdoaWNoIHN0cmluZyB3ZSdyZSBwYXJzaW5nCisgICAg
aW50KiAgIFBhU3RyTGVuOyAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUg
UGFBcmd2IHN0cmluZ3MKKyAgICBpbnQgICAgUGFBcmdjOyAgICAgICAgICAgICAgICAvLyBjb3Vu
dCBvZiBzdHJpbmdzIGluIHRoZSBhcnJheQorICAgIGNoYXIqKiBQYUFyZ3Y7ICAgICAgICAgICAg
ICAgIC8vIG91ciBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlICAgIAorICAgIHVuc2lnbmVkIGlu
dCB0b2tlbnNCZWZvcmVFT0YgOiAxOworfTsKKworI2VuZGlmIC8vICFkZWZpbmVkKF9fQ09NUElM
RV9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDI5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0
d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBj
cHAuYworLy8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworc3RhdGlj
IGludCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKy8qIERvbid0IHVzZSBtZW1vcnku
YydzIHJlcGxhY2VtZW50cywgYXMgd2UgY2xlYW4gdXAgcHJvcGVybHkgaGVyZSAqLworI3VuZGVm
IG1hbGxvYworI3VuZGVmIGZyZWUKKworc3RhdGljIGludCBiaW5kQXRvbSA9IDA7CitzdGF0aWMg
aW50IGNvbnN0QXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmF1bHRBdG9tID0gMDsKK3N0YXRpYyBp
bnQgZGVmaW5lQXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmluZWRBdG9tID0gMDsKK3N0YXRpYyBp
bnQgZWxzZUF0b20gPSAwOworc3RhdGljIGludCBlbGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGVu
ZGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGlmZGVmQXRv
bSA9IDA7CitzdGF0aWMgaW50IGlmbmRlZkF0b20gPSAwOworc3RhdGljIGludCBpbmNsdWRlQXRv
bSA9IDA7CitzdGF0aWMgaW50IGxpbmVBdG9tID0gMDsKK3N0YXRpYyBpbnQgcHJhZ21hQXRvbSA9
IDA7CitzdGF0aWMgaW50IHRleHVuaXRBdG9tID0gMDsKK3N0YXRpYyBpbnQgdW5kZWZBdG9tID0g
MDsKK3N0YXRpYyBpbnQgZXJyb3JBdG9tID0gMDsKK3N0YXRpYyBpbnQgX19MSU5FX19BdG9tID0g
MDsKK3N0YXRpYyBpbnQgX19GSUxFX19BdG9tID0gMDsKK3N0YXRpYyBpbnQgX19WRVJTSU9OX19B
dG9tID0gMDsKK3N0YXRpYyBpbnQgdmVyc2lvbkF0b20gPSAwOworc3RhdGljIGludCBleHRlbnNp
b25BdG9tID0gMDsKKworc3RhdGljIFNjb3BlICptYWNyb3MgPSAwOworI2RlZmluZSBNQVhfTUFD
Uk9fQVJHUyAgNjQKKyNkZWZpbmUgTUFYX0lGX05FU1RJTkcgIDY0CisKK3N0YXRpYyBTb3VyY2VM
b2MgaWZsb2M7IC8qIG91dGVybW9zdCAjaWYgKi8KKworaW50IEluaXRDUFAodm9pZCkKK3sKKyAg
ICBjaGFyICAgICAgICBidWZmZXJbNjRdLCAqdDsKKyAgICBjb25zdCBjaGFyICAqZjsKKworICAg
IC8vIEFkZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKKyAg
ICBiaW5kQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7CisgICAgY29uc3RB
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7CisgICAgZGVmYXVsdEF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOworICAgIGRlZmluZUF0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lIik7CisgICAgZGVmaW5lZEF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lZCIpOworICAgIGVsaWZBdG9tID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgImVsaWYiKTsKKyAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhh
dGFibGUsICJlbHNlIik7CisgICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
ImVuZGlmIik7CisgICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7Cisg
ICAgaWZkZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7CisgICAgaWZu
ZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKKyAgICBpbmNsdWRl
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7CisgICAgbGluZUF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAibGluZSIpOworICAgIHByYWdtYUF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAicHJhZ21hIik7CisgICAgdGV4dW5pdEF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAidGV4dW5pdCIpOworICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsICJ1bmRlZiIpOworCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJlcnJvciIpOworICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJfX0xJTkVfXyIpOworICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJfX0ZJTEVfXyIpOworCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJfX1ZFUlNJT05fXyIpOworICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgInZlcnNpb24iKTsKKyAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgImV4dGVuc2lvbiIpOworICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQ
b29sKDAsIDApKTsKKyAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKKyAgICB0ID0gYnVm
ZmVyICsgc3RybGVuKGJ1ZmZlcik7CisgICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5n
OworICAgIHdoaWxlICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsg
c2l6ZW9mKGJ1ZmZlcikgLSAxKQorICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKKyAgICAq
dCA9IDA7CisKKyAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKKyAgICBQcmVkZWZp
bmVJbnRNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKKworCXJldHVybiAx
OworfSAvLyBJbml0Q1BQCisKK2ludCBGcmVlQ1BQKHZvaWQpCit7CisgICAgaWYgKG1hY3JvcykK
KyAgICB7CisgICAgICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOworICAgICAgICBtYWNy
b3MgPSAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitpbnQgRmluYWxDUFAodm9pZCkK
K3sKKwlpZiAoY3BwLT5pZmRlcHRoKQorCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNo
Iik7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10s
IGFyZ2M7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBNYWNyb1N5bWJvbCBtYWM7Cisg
ICAgU3ltYm9sICpzeW1iOworICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKKyAgICBtZW1zZXQoJm1h
YywgMCwgc2l6ZW9mKG1hYykpOworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5U
SUZJRVIpIHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAg
cmV0dXJuIHRva2VuOworICAgIH0KKyAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OworICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICBpZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7CisgICAg
ICAgIC8vIGdhdGhlciBhcmd1bWVudHMKKyAgICAgICAgYXJnYyA9IDA7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0g
JyknKSBicmVhazsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewor
CQkJCUNQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9f
QVJHUykKKyAgICAgICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7
CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7CisgICAg
ICAgIGlmICh0b2tlbiAhPSAnKScpIHsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIj
ZGVmaW5lIik7CisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIH0KKyAgICAgICAg
bWFjLmFyZ2MgPSBhcmdjOworICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBv
b2wsIGFyZ2MgKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywg
YXJnYyAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKyAgICBtYWMuYm9keSA9IE5l
d1Rva2VuU3RyZWFtKEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsK
KyAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykg
eworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBj
aGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3Vh
Z2UiKTsKKyAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgfQorICAgICAgICBSZWNv
cmRUb2tlbihtYWMuYm9keSwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH07
CisKKyAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7CisgICAgaWYgKHN5bWIp
IHsKKyAgICAgICAgaWYgKCFzeW1iLT5kZXRhaWxzLm1hYy51bmRlZikgeworICAgICAgICAgICAg
Ly8gYWxyZWFkeSBkZWZpbmVkIC0tIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGlkZW50aWNh
bAorICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ2MgIT0gbWFjLmFyZ2MpIGdv
dG8gZXJyb3I7CisgICAgICAgICAgICBmb3IgKGFyZ2M9MDsgYXJnYyA8IG1hYy5hcmdjOyBhcmdj
KyspCisgICAgICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ3NbYXJnY10gIT0g
bWFjLmFyZ3NbYXJnY10pCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAg
ICAgICBSZXdpbmRUb2tlblN0cmVhbShzeW1iLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICAgICAg
ICAgIFJld2luZFRva2VuU3RyZWFtKG1hYy5ib2R5KTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICBpbnQgb2xkX2x2YWwsIG9sZF90b2tlbjsKKyAgICAgICAgICAgICAgICBvbGRf
dG9rZW4gPSBSZWFkVG9rZW4oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSwgeXlsdmFscHApOworICAg
ICAgICAgICAgICAgIG9sZF9sdmFsID0geXlsdmFscHAtPnNjX2ludDsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IFJlYWRUb2tlbihtYWMuYm9keSwgeXlsdmFscHApOworICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPSBvbGRfdG9rZW4gfHwgeXlsdmFscHAtPnNjX2ludCAhPSBvbGRfbHZhbCkg
eyAKKyAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIo
Ik1hY3JvIFJlZGVmaW5lZCIpOworICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJp
bmdPZkF0b20oYXRhYmxlLG5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRT
dHJmcm9tVFN0cigpOworICAgICAgICAgICAgICAgICAgICBEZWNMaW5lTnVtYmVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgSW5jTGluZU51bWJlcigpOworICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRv
a2VuID4gMCk7CisgICAgICAgIH0KKyAgICAgICAgLy9GcmVlTWFjcm8oJnN5bWItPmRldGFpbHMu
bWFjKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkdW1teUxvYy5maWxlID0gMDsKKyAgICAgICAg
ZHVtbXlMb2MubGluZSA9IDA7CisgICAgICAgIHN5bWIgPSBBZGRTeW1ib2woJmR1bW15TG9jLCBt
YWNyb3MsIG5hbWUsIE1BQ1JPX1MpOworICAgIH0KKyAgICBzeW1iLT5kZXRhaWxzLm1hYyA9IG1h
YzsKKyAgICByZXR1cm4gJ1xuJzsKK30gLy8gQ1BQZGVmaW5lCisKK3N0YXRpYyBpbnQgQ1BQdW5k
ZWYoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBTeW1ib2wgKnN5
bWI7CisJaWYodG9rZW4gPT0gJ1xuJyl7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsK
KwkgICAgcmV0dXJuIHRva2VuOworICAgIH0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJ
RVIpCisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3Jv
cywgeXlsdmFscHAtPnNjX2lkZW50KTsKKyAgICBpZiAoc3ltYikgeworICAgICAgICBzeW1iLT5k
ZXRhaWxzLm1hYy51bmRlZiA9IDE7CisgICAgfQorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0g
J1xuJykgeworICAgIGVycm9yOgorICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVmIik7
CisgICAgfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdW5kZWYKKworLyogQ1BQZWxzZSAt
LSBza2lwIGZvcndhcmQgdG8gYXBwcm9wcmlhdGUgc3BvdC4gIFRoaXMgaXMgYWN0dWFsbHkgdXNl
ZAorKiogdG8gc2tpcCB0byBhbmQgI2VuZGlmIGFmdGVyIHNlZWluZyBhbiAjZWxzZSwgQU5EIHRv
IHNraXAgdG8gYSAjZWxzZSwKKyoqICNlbGlmLCBvciAjZW5kaWYgYWZ0ZXIgYSAjaWYvI2lmZGVm
LyNpZm5kZWYvI2VsaWYgdGVzdCB3YXMgZmFsc2UKKyovCisKK3N0YXRpYyBpbnQgQ1BQZWxzZShp
bnQgbWF0Y2hlbHNlLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgYXRvbSxkZXB0
aD0wOworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisJCisJd2hpbGUgKHRva2VuID4gMCkgeworICAgICAgICBpZiAo
dG9rZW4gIT0gJyMnKSB7CisJCSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisJCWlmICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJRklFUikKKwkJCWNv
bnRpbnVlOworICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50OworICAgICAgICBpZiAo
YXRvbSA9PSBpZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9PSBpZm5kZWZBdG9t
KXsKKyAgICAgICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAtPmVsc2V0cmFja2Vy
Kys7CisgICAgICAgICAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7CisJ
CX0KKwkJZWxzZSBpZiAoYXRvbSA9PSBlbmRpZkF0b20pIHsKKyAgICAgICAgICAgIGlmKC0tZGVw
dGg8MCl7CisJCQkgICAgLS1jcHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIGlmIChj
cHAtPmlmZGVwdGgpIAorICAgICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRo
OworICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoKGludCkobWF0Y2hlbHNlKSAhPSAw
KSYmIGRlcHRoPT0wKSB7CisJCQlpZiAoYXRvbSA9PSBlbHNlQXRvbSApIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93
aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfSAKKwkJCQlicmVhazsKKwkJCX0gCisJ
CQllbHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7CisgICAgICAgICAgICAgICAgLyogd2UgZGVj
cmVtZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNhdXNlIENQUGlmIHdpbGwgaW5jcmVtZW50Cisg
ICAgICAgICAgICAgICAgICogaXQgYW5kIHdlIHJlYWxseSB3YW50IHRvIGxlYXZlIGl0IGFsb25l
ICovCisJCQkJaWYgKGNwcC0+aWZkZXB0aCl7CisJCQkJCS0tY3BwLT5pZmRlcHRoOworCQkJCSAg
ICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisJCQkJfQorICAgICAgICAgICAgICAgIHJldHVybiBDUFBp
Zih5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgZWxzZSBpZigoYXRvbT09
ZWxzZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpKXsKKyAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICBjcHAt
PkNvbXBpbGVFcnJvcj0xOworICAgICAgICB9CisJfTsKKyAgICByZXR1cm4gdG9rZW47Cit9CisK
K2VudW0gZXZhbF9wcmVjIHsKKyAgICBNSU5fUFJFQywKKyAgICBDT05ELCBMT0dPUiwgTE9HQU5E
LCBPUiwgWE9SLCBBTkQsIEVRVUFMLCBSRUxBVElPTiwgU0hJRlQsIEFERCwgTVVMLCBVTkFSWSwK
KyAgICBNQVhfUFJFQworfTsKKworc3RhdGljIGludCBvcF9sb2dvcihpbnQgYSwgaW50IGIpIHsg
cmV0dXJuIGEgfHwgYjsgfQorc3RhdGljIGludCBvcF9sb2dhbmQoaW50IGEsIGludCBiKSB7IHJl
dHVybiBhICYmIGI7IH0KK3N0YXRpYyBpbnQgb3Bfb3IoaW50IGEsIGludCBiKSB7IHJldHVybiBh
IHwgYjsgfQorc3RhdGljIGludCBvcF94b3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIF4gYjsg
fQorc3RhdGljIGludCBvcF9hbmQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICYgYjsgfQorc3Rh
dGljIGludCBvcF9lcShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorc3RhdGljIGlu
dCBvcF9uZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgIT0gYjsgfQorc3RhdGljIGludCBvcF9n
ZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj0gYjsgfQorc3RhdGljIGludCBvcF9sZShpbnQg
YSwgaW50IGIpIHsgcmV0dXJuIGEgPD0gYjsgfQorc3RhdGljIGludCBvcF9ndChpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgPiBiOyB9CitzdGF0aWMgaW50IG9wX2x0KGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA8IGI7IH0KK3N0YXRpYyBpbnQgb3Bfc2hsKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSA8PCBiOyB9CitzdGF0aWMgaW50IG9wX3NocihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj4g
YjsgfQorc3RhdGljIGludCBvcF9hZGQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICsgYjsgfQor
c3RhdGljIGludCBvcF9zdWIoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC0gYjsgfQorc3RhdGlj
IGludCBvcF9tdWwoaW50IGEsIGludCBiKSB7IHJldHVybiBhICogYjsgfQorc3RhdGljIGludCBv
cF9kaXYoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC8gYjsgfQorc3RhdGljIGludCBvcF9tb2Qo
aW50IGEsIGludCBiKSB7IHJldHVybiBhICUgYjsgfQorc3RhdGljIGludCBvcF9wb3MoaW50IGEp
IHsgcmV0dXJuIGE7IH0KK3N0YXRpYyBpbnQgb3BfbmVnKGludCBhKSB7IHJldHVybiAtYTsgfQor
c3RhdGljIGludCBvcF9jbXBsKGludCBhKSB7IHJldHVybiB+YTsgfQorc3RhdGljIGludCBvcF9u
b3QoaW50IGEpIHsgcmV0dXJuICFhOyB9CisKK3N0cnVjdCB7CisgICAgaW50IHRva2VuLCBwcmVj
LCAoKm9wKShpbnQsIGludCk7Cit9IGJpbm9wW10gPSB7CisgICAgeyBDUFBfT1JfT1AsIExPR09S
LCBvcF9sb2dvciB9LAorICAgIHsgQ1BQX0FORF9PUCwgTE9HQU5ELCBvcF9sb2dhbmQgfSwKKyAg
ICB7ICd8JywgT1IsIG9wX29yIH0sCisgICAgeyAnXicsIFhPUiwgb3BfeG9yIH0sCisgICAgeyAn
JicsIEFORCwgb3BfYW5kIH0sCisgICAgeyBDUFBfRVFfT1AsIEVRVUFMLCBvcF9lcSB9LAorICAg
IHsgQ1BQX05FX09QLCBFUVVBTCwgb3BfbmUgfSwKKyAgICB7ICc+JywgUkVMQVRJT04sIG9wX2d0
IH0sCisgICAgeyBDUFBfR0VfT1AsIFJFTEFUSU9OLCBvcF9nZSB9LAorICAgIHsgJzwnLCBSRUxB
VElPTiwgb3BfbHQgfSwKKyAgICB7IENQUF9MRV9PUCwgUkVMQVRJT04sIG9wX2xlIH0sCisgICAg
eyBDUFBfTEVGVF9PUCwgU0hJRlQsIG9wX3NobCB9LAorICAgIHsgQ1BQX1JJR0hUX09QLCBTSElG
VCwgb3Bfc2hyIH0sCisgICAgeyAnKycsIEFERCwgb3BfYWRkIH0sCisgICAgeyAnLScsIEFERCwg
b3Bfc3ViIH0sCisgICAgeyAnKicsIE1VTCwgb3BfbXVsIH0sCisgICAgeyAnLycsIE1VTCwgb3Bf
ZGl2IH0sCisgICAgeyAnJScsIE1VTCwgb3BfbW9kIH0sCit9OworCitzdHJ1Y3QgeworICAgIGlu
dCB0b2tlbiwgKCpvcCkoaW50KTsKK30gdW5vcFtdID0geworICAgIHsgJysnLCBvcF9wb3MgfSwK
KyAgICB7ICctJywgb3BfbmVnIH0sCisgICAgeyAnficsIG9wX2NtcGwgfSwKKyAgICB7ICchJywg
b3Bfbm90IH0sCit9OworCisjZGVmaW5lIEFMRU4oQSkgKHNpemVvZihBKS9zaXplb2YoQVswXSkp
CisKK3N0YXRpYyBpbnQgZXZhbChpbnQgdG9rZW4sIGludCBwcmVjLCBpbnQgKnJlcywgaW50ICpl
cnIsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCAgICAgICAgIGksIHZhbDsKKyAg
ICBTeW1ib2wgICAgICAqczsKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAg
ICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVkQXRvbSkgeworICAgICAgICAg
ICAgaW50IG5lZWRjbG9zZSA9IDA7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4gPT0gJygnKSB7CisgICAgICAgICAgICAgICAgbmVlZGNsb3NlID0gMTsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gQ1BQ
X0lERU5USUZJRVIpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICpy
ZXMgPSAocyA9IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICA/ICFzLT5kZXRhaWxzLm1hYy51bmRlZiA6IDA7CisgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAobmVlZGNsb3NlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRva2VuICE9ICcpJykKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoTWFjcm9FeHBhbmQo
eXlsdmFscHAtPnNjX2lkZW50LCB5eWx2YWxwcCkpIHsKKwkJCXRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHJl
dHVybiBldmFsKHRva2VuLCBwcmVjLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCX0gZWxzZSBpZiAodG9r
ZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7CisgICAgICAgICpyZXMgPSB5eWx2YWxwcC0+c2NfaW50
OworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgfSBlbHNlIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVDLCByZXMsIGVyciwgeXls
dmFscHApOworICAgICAgICBpZiAoISplcnIpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSAn
KScpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IEFMRU4odW5vcCkgLSAxOyBpID49
IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHVub3BbaV0udG9rZW4gPT0gdG9rZW4pCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBVTkFSWSwgcmVz
LCBlcnIsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICpyZXMgPSB1bm9wW2ldLm9wKCpyZXMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAg
IH0KKyAgICB3aGlsZSAoISplcnIpIHsKKyAgICAgICAgaWYgKHRva2VuID09ICcpJyB8fCB0b2tl
biA9PSAnXG4nKSBicmVhazsKKyAgICAgICAgZm9yIChpID0gQUxFTihiaW5vcCkgLSAxOyBpID49
IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKGJpbm9wW2ldLnRva2VuID09IHRva2VuKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMCB8fCBiaW5v
cFtpXS5wcmVjIDw9IHByZWMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFsID0gKnJl
czsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIGJpbm9wW2ldLnBy
ZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgICpyZXMgPSBiaW5vcFtpXS5vcCh2YWws
ICpyZXMpOworICAgIH0KKyAgICByZXR1cm4gdG9rZW47CitlcnJvcjoKKyAgICBDUFBFcnJvclRv
SW5mb0xvZygiaW5jb3JyZWN0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUiKTsKKyAgICAqZXJyID0g
MTsKKyAgICAqcmVzID0gMDsKKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIGV2YWwKKworc3RhdGlj
IGludCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaW50
IHJlcyA9IDAsIGVyciA9IDA7CisJY3BwLT5lbHNldHJhY2tlcisrOworICAgIGNwcC0+ZWxzZWRl
cHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKKyAgICBpZiAoIWNwcC0+aWZkZXB0aCsrKQorICAg
ICAgICBpZmxvYyA9ICpjcHAtPnRva2VuTG9jOworCWlmKGNwcC0+aWZkZXB0aCA+TUFYX0lGX05F
U1RJTkcpeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRo
IGV4Y2VlZGVkIik7CisJCXJldHVybiAwOworCX0KKwl0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9Q
UkVDLCAmcmVzLCAmZXJyLCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAg
ICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nIHRo
ZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAg
IHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH0gCisgICAgaWYg
KCFyZXMgJiYgIWVycikgeworICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOwor
ICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQaWYKKworc3RhdGljIGludCBDUFBp
ZmRlZihpbnQgZGVmaW5lZCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICBpbnQgbmFtZSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKwlpZigrK2NwcC0+aWZkZXB0aCA+
TUFYX0lGX05FU1RJTkcpeworCSAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5n
IGRlcHRoIGV4Y2VlZGVkIik7CisJCXJldHVybiAwOworCX0KKwljcHAtPmVsc2V0cmFja2VyKys7
CisgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworICAgIGlmICh0b2tl
biAhPSBDUFBfSURFTlRJRklFUikgeworICAgICAgICAgICAgZGVmaW5lZCA/IENQUEVycm9yVG9J
bmZvTG9nKCJpZmRlZiIpOkNQUEVycm9yVG9JbmZvTG9nKCJpZm5kZWYiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBTeW1ib2wgKnMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKKyAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgQ1BQV2Fy
bmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZmRlZiBwcmVwcm9j
ZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCgocyAmJiAhcy0+ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQp
CisgICAgICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOworICAgIH0KKyAgICBy
ZXR1cm4gdG9rZW47Cit9IC8vIENQUGlmZGVmCisKK3N0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBl
cHAgKiB5eWx2YWxwcCkgCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwlpZih0b2tlbj09J1xuJyl7CisJCURl
Y0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAg
ICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNlIGlmICh0b2tl
biA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKwkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBw
LT5zeW1ib2xfbmFtZSk7CisJCVNldExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7CisgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgCisJCWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKyAg
ICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwor
CQkJU2V0U3RyaW5nTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
CQkJaWYodG9rZW4hPSdcbicpCisJCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAg
ICAgIH0KKwkJZWxzZSBpZiAodG9rZW4gPT0gJ1xuJyl7CisJCQlyZXR1cm4gdG9rZW47CisJCX0K
KwkJZWxzZXsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworCQl9CisJ
fQorCWVsc2V7CisgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisJfQorICAg
IHJldHVybiB0b2tlbjsKK30KKworc3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgeworCisJaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworCQorICAgIHdo
aWxlICh0b2tlbiAhPSAnXG4nKSB7CisJCWlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8
fCB0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpeworICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lKTsKKwkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwg
dG9rZW4gPT0gQ1BQX1NUUkNPTlNUQU5UKXsKKwkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShh
dGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7CisJCX1lbHNlIHsKKwkJICAgIFN0b3JlU3RyKEdl
dFN0cmluZ09mQXRvbShhdGFibGUsdG9rZW4pKTsKKwkJfQorCQl0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQorCURlY0xpbmVO
dW1iZXIoKTsKKwkvL3N0b3JlIHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9u
IGxvZy4uc2V0IHRoZSBDb21waWxlIEVycm9yIGZsYWchISEhCisJbWVzc2FnZT1HZXRTdHJmcm9t
VFN0cigpOworICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICBSZXNldFRTdHJpbmco
KTsKKyAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICBy
ZXR1cm4gJ1xuJzsKK30vL0NQUGVycm9yCisKK3N0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQoreworCWNoYXIgU3JjU3RyTmFtZVsyXTsKKwljaGFyKiogYWxsVG9rZW5z
OworCWludCB0b2tlbkNvdW50ID0gMDsKKwlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOworCWNvbnN0
IGNoYXIqIFNyY1N0cjsKKwlpbnQgaTsKKworCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCisJaWYgKHRva2VuPT0nXG4n
KSB7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFn
bWEiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCSAgICByZXR1cm4gdG9rZW47CisJfQor
CQorCWFsbFRva2VucyA9IChjaGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNv
dW50KTsJCisKKwl3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworCQlpZiAodG9rZW5Db3VudCA+PSBt
YXhUb2tlbkNvdW50KSB7CisJCQltYXhUb2tlbkNvdW50ICo9IDI7CisJCQlhbGxUb2tlbnMgPSAo
Y2hhcioqKXJlYWxsb2MoKGNoYXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tl
bkNvdW50KTsKKwkJfQorCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgQ1BQX0lERU5USUZJRVI6
CisJCQlTcmNTdHIgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsK
KwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikg
KyAxKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKKwkJCWJy
ZWFrOworCQljYXNlIENQUF9JTlRDT05TVEFOVDoKKwkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1i
b2xfbmFtZTsKKwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVu
KFNyY1N0cikgKyAxKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3Ry
KTsKKwkJCWJyZWFrOworCQljYXNlIENQUF9GTE9BVENPTlNUQU5UOgorCQkJU3JjU3RyID0geXls
dmFscHAtPnN5bWJvbF9uYW1lOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1h
bGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50
KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisgICAgICAgICAgICAvLyBFT0YK
KyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQg
d2l0aCBhIG5ld2xpbmUiKTsJCQkKKwkJCXJldHVybiB0b2tlbjsKKwkJZGVmYXVsdDoKKwkJCVNy
Y1N0ck5hbWVbMF0gPSB0b2tlbjsKKwkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOworCQkJYWxsVG9r
ZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYygyKTsKKwkJCXN0cmNweShhbGxUb2tlbnNb
dG9rZW5Db3VudCsrXSwgU3JjU3RyTmFtZSk7CisJCX0KKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKworCWNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOwor
CUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7CisJdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworCQorCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKKwkJZnJlZSAoYWxsVG9r
ZW5zW2ldKTsKKwl9CisJZnJlZSAoYWxsVG9rZW5zKTsJCisKKwlyZXR1cm4gdG9rZW47ICAgIAor
fSAvLyBDUFBwcmFnbWEKKworI2RlZmluZSBFU1NMX1ZFUlNJT05fTlVNQkVSIDEwMAorI2RlZmlu
ZSBFU1NMX1ZFUlNJT05fU1RSSU5HICIxMDAiCisKK3N0YXRpYyBpbnQgQ1BQdmVyc2lvbih5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKK3sKKworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisKKyAgICBpZiAoY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPT0gMSkKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjdmVyc2lvbiBt
dXN0IG9jY3VyIGJlZm9yZSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoZSBwcm9ncmFtIik7CisK
KyAgICBpZih0b2tlbj09J1xuJyl7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0
dXJuIHRva2VuOworCX0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lOVENPTlNUQU5UKQorICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwkKKyAgICB5eWx2YWxwcC0+c2NfaW50
PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkvL1NldFZlcnNpb25OdW1iZXIoeXlsdmFs
cHAtPnNjX2ludCk7CisgICAgCisgICAgaWYgKHl5bHZhbHBwLT5zY19pbnQgIT0gRVNTTF9WRVJT
SU9OX05VTUJFUikKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJWZXJzaW9uIG51bWJlciBub3Qg
c3VwcG9ydGVkIGJ5IEVTU0wiKTsKKworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAKKwlpZiAodG9rZW4gPT0gJ1xu
Jyl7CisJCXJldHVybiB0b2tlbjsKKwl9CisJZWxzZXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiN2ZXJzaW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdmVyc2lvbgor
CitzdGF0aWMgaW50IENQUGV4dGVuc2lvbih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKworICAg
IGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgY2hhciBleHRlbnNpb25OYW1lWzgwXTsKKworICAgIGlmKHRva2VuPT0n
XG4nKXsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVu
c2lvbiBuYW1lIG5vdCBzcGVjaWZpZWQiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQly
ZXR1cm4gdG9rZW47CisJfQorCisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQorICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOworICAgIAorICAgIHN0cmNweShl
eHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7
CisJICAgIAorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJzonKSB7CisgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiJzonIG1pc3NpbmcgYWZ0ZXIgZXh0ZW5zaW9uIG5hbWUiKTsKKyAgICAgICAg
cmV0dXJuIHRva2VuOworICAgIH0KKyAgICAKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9IENQ
UF9JREVOVElGSUVSKSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiYmVoYXZpb3IgZm9yIGV4
dGVuc2lvbiBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisK
KyAgICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5n
KGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJaWYgKHRva2VuID09
ICdcbicpeworCQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2V7CisgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjZXh0ZW5zaW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQZXh0
ZW5zaW9uCisKK2ludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBp
bnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisgICAgaW50IGlzVmVyc2lvbiA9IDA7
CisKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgaWYgKHl5bHZh
bHBwLT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBk
ZWZpbmUoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9
PSBlbHNlQXRvbSkgeworCQkJIGlmKENoa0NvcnJlY3RFbHNlTmVzdGluZygpKXsKKyAgICAgICAg
ICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGggKXsKKyAgICAgICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCIjZWxzZSBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgICAgICAgY3Bw
LT5Db21waWxlRXJyb3I9MTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAgICAg
ICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcg
I2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICB9CisJCQkgICAgIHRva2VuID0gQ1BQZWxz
ZSgwLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICAgICAg
IGNwcC0+aWZkZXB0aD0wOworICAgICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVu
dCA9IDE7CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIH0KKwkJfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxpZkF0b20pIHsKKyAgICAgICAgICAgIGlm
ICghY3BwLT5pZmRlcHRoKXsKKyAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNl
bGlmIG1pc21hdGNoIik7CisgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Cisg
ICAgICAgICAgICB9IAorICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250
IGNhcmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCisgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7IAorICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworCQkgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNl
IGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZW5kaWZBdG9tKSB7CisJCSAgICAgLS1jcHAtPmVs
c2V0cmFja2VyOworICAgICAgICAgICAgIGlmICghY3BwLT5pZmRlcHRoKXsKKyAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbmRpZiBtaXNtYXRjaCIpOworICAgICAgICAgICAg
ICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBl
bHNlCisJCQkgIAkgLS1jcHAtPmlmZGVwdGg7CisJICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGlmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQaWYoeXlsdmFscHAp
OworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZmRlZkF0b20pIHsK
KyAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZuZGVmQXRvbSkgeworICAgICAgICAgICAg
IHRva2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZh
bHBwLT5zY19pZGVudCA9PSBsaW5lQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQbGlu
ZSh5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHBy
YWdtYUF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUHByYWdtYSh5eWx2YWxwcCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHVuZGVmQXRvbSkgeworICAg
ICAgICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9
IENQUGVycm9yKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRl
bnQgPT0gdmVyc2lvbkF0b20pIHsKKyAgICAgICAgICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2
YWxwcCk7CisgICAgICAgICAgICBpc1ZlcnNpb24gPSAxOworICAgICAgICB9IGVsc2UgaWYgKHl5
bHZhbHBwLT5zY19pZGVudCA9PSBleHRlbnNpb25BdG9tKSB7CisgICAgICAgICAgICB0b2tlbiA9
IENQUGV4dGVuc2lvbih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBT
dG9yZVN0cigiSW52YWxpZCBEaXJlY3RpdmUiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0
cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBtZXNz
YWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2Fn
ZSk7CisgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJyAmJiB0b2tlbiAhPSAwICYmIHRva2VuICE9IEVPRikgeworCQl0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisJfQorICAgICAgICAKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisKKyAg
ICByZXR1cm4gdG9rZW47Cit9IC8vIHJlYWRDUFBsaW5lCisKK3ZvaWQgRnJlZU1hY3JvKE1hY3Jv
U3ltYm9sICpzKSB7CisgICAgRGVsZXRlVG9rZW5TdHJlYW0ocy0+Ym9keSk7Cit9CisKK3ZvaWQg
UHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7CisgICAgU291
cmNlTG9jIGxvY2F0aW9uID0gezB9OworICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBN
YWNyb1N5bWJvbCBtYWNybyA9IHswfTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIGlu
dCBhdG9tID0gMDsKKworICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNy
b3MtPnBvb2wpOworICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKKyAgICBzcHJpbnRmKHZhbC5zeW1i
b2xfbmFtZSwgIiVkIiwgdmFsdWUpOworICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9J
TlRDT05TVEFOVCwgJnZhbCk7CisgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5h
bWUpOworICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFD
Uk9fUyk7CisgICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOworfQorCitzdGF0aWMgaW50
IGVvZl9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0x
OyB9CitzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkgeyB9CisKK3N0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7CisgICAgSW5wdXRTcmMg
KmluID0gbWFsbG9jKHNpemVvZihJbnB1dFNyYykpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9m
KElucHV0U3JjKSk7CisgICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKKyAgICBpbi0+Z2V0Y2ggPSBl
b2Zfc2NhbjsKKyAgICBpbi0+dW5nZXRjaCA9IG5vb3A7CisgICAgaW4tPnByZXYgPSBjcHAtPmN1
cnJlbnRJbnB1dDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworfQorCitzdGF0aWMgdm9p
ZCBQb3BFb2ZTcmMoKSB7CisgICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9z
Y2FuKSB7CisgICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OworICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5wcmV2OworICAgICAgICBmcmVlKGluKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICph
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbjsKKyAgICBUb2tlblN0cmVh
bSAqbjsKKyAgICBSZXdpbmRUb2tlblN0cmVhbShhKTsKKyAgICBkbyB7CisgICAgICAgIHRva2Vu
ID0gUmVhZFRva2VuKGEsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVO
VElGSUVSICYmIExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9IHdoaWxlICh0b2tlbiA+IDApOworICAgIGlmICh0b2tlbiA8
PSAwKSByZXR1cm4gYTsKKyAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwor
ICAgIFB1c2hFb2ZTcmMoKTsKKyAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOworICAg
IHdoaWxlICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApKSA+IDApIHsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVS
ICYmIE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7Cisg
ICAgfQorICAgIFBvcEVvZlNyYygpOworICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOworICAgIHJl
dHVybiBuOworfSAvLyBQcmVzY2FuTWFjcm9BcmcKKwordHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1
dFNyYyB7CisgICAgSW5wdXRTcmMgICAgYmFzZTsKKyAgICBNYWNyb1N5bWJvbCAqbWFjOworICAg
IFRva2VuU3RyZWFtICoqYXJnczsKK30gTWFjcm9JbnB1dFNyYzsKKworLyogbWFjcm9fc2NhbiAt
LS0KKyoqIHJldHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxp
bmcgbWFjcm8gYXJncyAKKyovCitzdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAq
aW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IGk7CisgICAgaW50IHRva2VuID0g
UmVhZFRva2VuKGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gPT0gQ1BQ
X0lERU5USUZJRVIpIHsKKyAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBp
LS0pCisgICAgICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRl
bnQpIGJyZWFrOworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICBSZWFkRnJvbVRv
a2VuU3RyZWFtKGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOworICAgICAgICAg
ICAgcmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2Vu
OworICAgIGluLT5tYWMtPmJ1c3kgPSAwOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJh
c2UucHJldjsKKyAgICBpZiAoaW4tPmFyZ3MpIHsKKyAgICAgICAgZm9yIChpPWluLT5tYWMtPmFy
Z2MtMTsgaT49MDsgaS0tKQorICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3Nb
aV0pOworICAgICAgICBmcmVlKGluLT5hcmdzKTsKKyAgICB9CisgICAgZnJlZShpbik7CisgICAg
cmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Cit9IC8vIG1hY3JvX3NjYW4KKworLyogTWFjcm9FeHBhbmQKKyoqIGNoZWNrIGFuIGlkZW50
aWZpZXIgKGF0b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVk
LgorKiogSWYgaXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFw
cHJvcHJpYXRlIGV4cGFuc2lvbgorKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4g
RkFMU0UuCisqLworCitpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQoreworICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNy
b3MsIGF0b20pOworICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOworICAgIGludCBpLGosIHRv
a2VuLCBkZXB0aD0wOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJaWYgKGF0b20gPT0gX19M
SU5FX19BdG9tKSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7
CisgICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNj
X2ludCk7CisgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsK
KyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOworICAgICAgICBz
cHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAg
ICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisJaWYgKGF0b20gPT0gX19WRVJTSU9OX19BdG9tKSB7CisgICAgICAgIHN0
cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsRVNTTF9WRVJTSU9OX1NUUklORyk7CisgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBhdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAg
IFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKyAgICBpZiAoIXN5bSB8fCBzeW0tPmRldGFpbHMubWFjLnVuZGVmKSByZXR1cm4g
MDsKKyAgICBpZiAoc3ltLT5kZXRhaWxzLm1hYy5idXN5KSByZXR1cm4gMDsgICAgICAgIC8vIG5v
IHJlY3Vyc2l2ZSBleHBhbnNpb25zCisgICAgaW4gPSBtYWxsb2Moc2l6ZW9mKCppbikpOworICAg
IG1lbXNldChpbiwgMCwgc2l6ZW9mKCppbikpOworICAgIGluLT5iYXNlLnNjYW4gPSAodm9pZCAq
KW1hY3JvX3NjYW47CisgICAgaW4tPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5l
OworICAgIGluLT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICBpbi0+
bWFjID0gJnN5bS0+ZGV0YWlscy5tYWM7CisgICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYXJncykg
eworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisJCWlmICh0b2tlbiAhPSAnKCcpIHsKKyAgICAgICAgICAgIFVuZ2V0
VG9rZW4odG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9
IGF0b207CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpbi0+YXJn
cyA9IG1hbGxvYyhpbi0+bWFjLT5hcmdjICogc2l6ZW9mKFRva2VuU3RyZWFtICopKTsKKyAgICAg
ICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKQorICAgICAgICAgICAgaW4tPmFyZ3Nb
aV0gPSBOZXdUb2tlblN0cmVhbSgibWFjcm8gYXJnIiwgMCk7CisJCWk9MDtqPTA7CisgICAgICAg
IGRveworICAgICAgICAgICAgZGVwdGggPSAwOworCQkJd2hpbGUoMSkgeworICAgICAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeworICAgICAgICAgICAg
ICAgICAgICBTdG9yZVN0cigiRU9GIGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgICAgICBT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9PTApICYmICh0b2tlbiE9JyknKSkgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDAgJiYgKHRva2VuID09ICcsJyB8fCB0b2tlbiA9
PSAnKScpKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsr
OworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIGRlcHRoLS07CisgICAgICAgICAg
ICAgICAgUmVjb3JkVG9rZW4oaW4tPmFyZ3NbaV0sIHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgaj0xOworCQkJfQorICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgeworICAg
ICAgICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0xKSAmJmo9PTApCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkrKzsKKwkJfXdoaWxlKGkgPCBpbi0+bWFj
LT5hcmdjKTsKKworICAgICAgICBpZiAoaSA8IGluLT5tYWMtPmFyZ2MpIHsKKyAgICAgICAgICAg
IFN0b3JlU3RyKCJUb28gZmV3IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBTdG9yZVN0
cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0
U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAg
ICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9ICcp
JykgeworICAgICAgICAgICAgZGVwdGg9MDsKKwkJCXdoaWxlICh0b2tlbiA+PSAwICYmIChkZXB0
aCA+IDAgfHwgdG9rZW4gIT0gJyknKSkgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAn
KScpIGRlcHRoLS07CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA9PSAnKCcpIGRlcHRoKys7CisgICAgICAgICAgICB9CisJCQkKKyAgICAgICAgICAgIGlm
ICh0b2tlbiA8PSAwKSB7CisgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAi
KTsKKyAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20p
KTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIFJlc2V0VFN0
cmluZygpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgU3RvcmVTdHIoIlRvbyBtYW55IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3Nh
Z2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdl
KTsKKyAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworCQl9CisJCWZvciAoaT0wOyBpPGluLT5t
YWMtPmFyZ2M7IGkrKykgeworICAgICAgICAgICAgaW4tPmFyZ3NbaV0gPSBQcmVzY2FuTWFjcm9B
cmcoaW4tPmFyZ3NbaV0sIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgIH0KKyNpZiAwCisgICAg
cHJpbnRmKCIgIDwlczolZD5mb3VuZCBtYWNybyAlc1xuIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IGxvYy5maWxlKSwKKyAgICAgICAgICAgbG9jLmxpbmUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBh
dG9tKSk7CisgICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAgICAgIHBy
aW50ZigiXHRhcmcgJXMgPSAnIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGluLT5tYWMtPmFyZ3Nb
aV0pKTsKKyAgICAgICAgRHVtcFRva2VuU3RyZWFtKHN0ZG91dCwgaW4tPmFyZ3NbaV0pOworICAg
ICAgICBwcmludGYoIidcbiIpOworICAgIH0KKyNlbmRpZgorCS8qcmV0YWluIHRoZSBpbnB1dCBz
b3VyY2UqLworICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICBzeW0t
PmRldGFpbHMubWFjLmJ1c3kgPSAxOworICAgIFJld2luZFRva2VuU3RyZWFtKHN5bS0+ZGV0YWls
cy5tYWMuYm9keSk7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0
dXJuIDE7Cit9IC8vIE1hY3JvRXhwYW5kCisKK2ludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9p
ZCkKK3sKKyAgICBpZihjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT09MCl7CisJICBj
cHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT0xOworICAgICAgcmV0dXJuIDE7ICAgICAg
ICAgIAorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0
aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlm
aWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3Rp
dHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0
aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVk
aXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1Ympl
Y3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNs
dXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5h
bCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJv
ZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGgg
b3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7
IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5
b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3Rp
Y2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJl
ZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwg
dHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlv
biBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBu
b3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBh
cmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0
byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0
aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJl
IG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIu
IAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIg
QkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlU
SEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNI
QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNF
IEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIK
K1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkg
U1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElO
IEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQv
T1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBB
TkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEg
SEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHAuaAorLy8KKworI2lmICFkZWZpbmVkKF9fQ1BQ
X0gpCisjZGVmaW5lIF9fQ1BQX0ggMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKKwor
aW50IEluaXRDUFAodm9pZCk7CitpbnQgRmluYWxDUFAodm9pZCk7CitpbnQgIHJlYWRDUFBsaW5l
KHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlw
ZXBwICogeXlsdmFscHApOworaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKTsKKwordHlw
ZWRlZiBzdHJ1Y3QgTWFjcm9TeW1ib2wgeworICAgIGludCBhcmdjOworICAgIGludCAqYXJnczsK
KyAgICBUb2tlblN0cmVhbSAqYm9keTsKKyAgICB1bnNpZ25lZCBidXN5OjE7CisgICAgdW5zaWdu
ZWQgdW5kZWY6MTsKK30gTWFjcm9TeW1ib2w7CisKK3ZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICopOwordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
OworCit2b2lkICBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpOyAgICAgIC8vIFByaW50
cyBpbmZvcm1hdGlvbiBpbnRvIGRlYnVnIGxvZwordm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0
IGNoYXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG9nCit2
b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJu
aW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKK3ZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFy
KiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgordm9p
ZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2Fn
ZSBhcyBUU3RyaW5nLgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAg
ICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgordm9pZCAgU3Rv
cmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBp
biBQYXJzZSBDb250ZXh0Lgordm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKK3ZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAoraW50ICAgR2V0TGluZU51
bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51
bWJlci4gCitpbnQgICBHZXRTdHJpbmdOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKK2NvbnN0IGNoYXIqIEdldFN0cmZyb21UU3Ry
KHZvaWQpOyAgICAgICAgICAgLy8gQ29udmVydCBUU3RyaW5nIHRvIFN0cmluZy4gIAordm9pZCAg
dXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOworaW50ICAgRnJlZUNQUCh2b2lkKTsKKworI2VuZGlmIC8vICEoZGVmaW5lZChf
X0NQUF9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3Qu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBz
dHJ1Y3QuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBv
cmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29m
dHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9u
IG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBh
Y2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNl
Cit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1
dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdy
ZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0
aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQor
bGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJ
QSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBt
b2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRo
b3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlk
ZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0
CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQg
dGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmli
dXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1h
cmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitO
VklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24g
ZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwg
bm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFu
dGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBw
YXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dv
cmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJl
CitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RI
RSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywg
V0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQ
UkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklM
SVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9Q
RVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVD
VFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFM
LCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdB
WQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNU
UklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVU
SEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
KSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVF
TiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLy8KKy8vIGNwcHN0cnVjdC5jCisvLworCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKKworQ1BQU3RydWN0ICAqY3BwICAgICAgPSBOVUxMOworc3RhdGljIGludCAg
cmVmQ291bnQgPSAwOworCitpbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKTsKK2ludCBSZXNldFBy
ZXByb2Nlc3Nvcih2b2lkKTsKK2ludCBGcmVlQ1BQU3RydWN0KHZvaWQpOworaW50IEZpbmFsaXpl
UHJlcHJvY2Vzc29yKHZvaWQpOworCisvKgorICogSW5pdENQUFN0cnVjdCgpIC0gSW5pdGlsYWl6
ZSB0aGUgQ1BQIHN0cnVjdHVyZS4KKyAqCisgKi8KKworaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCkK
K3sKKyAgICBpbnQgbGVuOworICAgIGNoYXIgKnA7CisKKyAgICBjcHAgPSAoQ1BQU3RydWN0ICop
IG1hbGxvYyhzaXplb2YoQ1BQU3RydWN0KSk7CisgICAgaWYgKGNwcCA9PSBOVUxMKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJlZkNvdW50Kys7CisKKyAgICAvLyBJbml0aWFsaXplIHB1Ymxp
YyBtZW1iZXJzOgorICAgIGNwcC0+cExhc3RTb3VyY2VMb2MgPSAmY3BwLT5sYXN0U291cmNlTG9j
OworICAgIAorCXAgPSAoY2hhciAqKSAmY3BwLT5vcHRpb25zOworICAgIGxlbiA9IHNpemVvZihj
cHAtPm9wdGlvbnMpOworICAgIHdoaWxlICgtLWxlbiA+PSAwKQorICAgICAgICBwW2xlbl0gPSAw
OworICAgICAKKyAgICBSZXNldFByZXByb2Nlc3NvcigpOworICAgIHJldHVybiAxOworfSAvLyBJ
bml0Q1BQU3RydWN0CisKK2ludCBSZXNldFByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIC8vIElu
aXRpYWxpemUgcHJpdmF0ZSBtZW1iZXJzOgorCisgICAgY3BwLT5sYXN0U291cmNlTG9jLmZpbGUg
PSAwOworICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5saW5lID0gMDsKKwljcHAtPnBDPTA7CisgICAg
Y3BwLT5Db21waWxlRXJyb3I9MDsgCisJY3BwLT5pZmRlcHRoPTA7CisgICAgZm9yKGNwcC0+ZWxz
ZXRyYWNrZXI9MDsgY3BwLT5lbHNldHJhY2tlcjw2NDsgY3BwLT5lbHNldHJhY2tlcisrKQorCQlj
cHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT0wOyAKKwljcHAtPmVsc2V0cmFja2VyPTA7
CisgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAwOworICAgIHJldHVybiAxOworfQorCisvL0lu
dGlhbGl6aW5nIHRoZSBQcmVwcm9jZXNzb3IuCisKK2ludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQp
Cit7CisgICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKKyAgICAgICAgIyAgaWZkZWYgQ1BQX1NU
VUZGCisgICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7CisgICAgICAgICAgICBJbml0Q1BQU3Ry
dWN0KCk7CisgICAgICAgICAgICBjcHAtPm9wdGlvbnMuUXVpZXQgPSAxOworICAgICAgICAgICAg
Y3BwLT5vcHRpb25zLnByb2ZpbGVTdHJpbmcgPSAiZ2VuZXJpYyI7CisgICAgICAgICAgICBpZiAo
IUluaXRBdG9tVGFibGUoYXRhYmxlLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgIGlmICghSW5pdFNjYW5uZXIoY3BwKSkKKwkgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAjICBlbmRpZgorICByZXR1cm4gMDsgCit9CisKKy8vRnJlZUNQUFN0cnVjdCgpIC0g
RnJlZSB0aGUgQ1BQIHN0cnVjdHVyZS4KKworaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCkKK3sKKyAg
ICBpZiAocmVmQ291bnQpCisgICAgeworICAgICAgIGZyZWUoY3BwKTsKKyAgICAgICByZWZDb3Vu
dC0tOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMTsKK30KKworLy9GaW5hbGl6aW5nIHRoZSBQ
cmVwcm9jZXNzb3IuCisKK2ludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIyAg
ZGVmaW5lIENQUF9TVFVGRiB0cnVlCisgICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgorICAgICAg
ICAgICAgRnJlZUF0b21UYWJsZShhdGFibGUpOworICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgp
OworICAgICAgICAgICAgRnJlZVNjYW5uZXIoKTsKKyAgICAgICAjICBlbmRpZgorICByZXR1cm4g
MDsgCit9CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBjcHBzdHJ1Y3QuYyAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNv
ZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlv
biBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMg
YWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVz
ZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmli
dXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8g
dGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUK
K2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklE
SUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwg
bW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0
aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3Zp
ZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVz
dAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5k
IHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJp
YnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVt
YXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQor
TlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
IGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2Us
IG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3Jh
bnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkg
cGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3
b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBi
ZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitU
SEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMs
IFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVY
UFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJ
TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBP
UEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RV
Q1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lB
TCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBX
QVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElT
VFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hF
VEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8vCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5o
IgorCisvLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBpZiBjYWxsZWQgd2l0aCAw
IGFyZ3VtZW50cworI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEwMjQpCisjZGVmaW5lIEFM
SUdOICAgICAgICAgICA4CisKKy8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgYHJlYWwnIG1hbGxvYyBh
bmQgZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBmcmVl
CisKK3N0cnVjdCBjaHVuayB7CisgICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKK307CisK
K3N0cnVjdCBjbGVhbnVwIHsKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpuZXh0OworICAgIHZv
aWQgICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgICAg
ICphcmc7Cit9OworCitzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgeworICAgIHN0cnVjdCBjaHVuayAg
ICAgICAgKm5leHQ7CisgICAgdWludHB0cl90ICAgICAgICAgICBmcmVlLCBlbmQ7CisgICAgc2l6
ZV90ICAgICAgICAgICAgICBjaHVua3NpemU7CisgICAgdWludHB0cl90ICAgICAgICAgICBhbGln
bm1hc2s7CisgICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKK307CisKK01lbW9yeVBv
b2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbikK
K3sKKyAgICBNZW1vcnlQb29sICAqcG9vbDsKKworICAgIGlmIChhbGlnbiA9PSAwKSBhbGlnbiA9
IEFMSUdOOworICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXplID0gQ0hVTktTSVpFOwor
ICAgIGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSA8
IHNpemVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSAmIChhbGln
bi0xKSkgcmV0dXJuIDA7CisgICAgaWYgKCEocG9vbCA9IG1hbGxvYyhjaHVua3NpemUpKSkgcmV0
dXJuIDA7CisgICAgcG9vbC0+bmV4dCA9IDA7CisgICAgcG9vbC0+Y2h1bmtzaXplID0gY2h1bmtz
aXplOworICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFsaWduKS0xOyAgCisgICAg
cG9vbC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29sLT5hbGlnbm1hc2spICYg
fnBvb2wtPmFsaWdubWFzazsKKyAgICBwb29sLT5lbmQgPSAodWludHB0cl90KXBvb2wgKyBjaHVu
a3NpemU7CisgICAgcG9vbC0+Y2xlYW51cCA9IDA7CisgICAgcmV0dXJuIHBvb2w7Cit9CisKK3Zv
aWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgc3RydWN0IGNsZWFudXAg
ICAgICAqY2xlYW51cDsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpwLCAqbmV4dDsKKworICAg
IGZvciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNsZWFudXAgPSBjbGVhbnVw
LT5uZXh0KSB7CisgICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFyZyk7CisgICAgfQorICAg
IGZvciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4dCkgeworICAgICAgICBu
ZXh0ID0gcC0+bmV4dDsKKyAgICAgICAgZnJlZShwKTsKKyAgICB9Cit9CisKK3ZvaWQgKm1lbV9B
bGxvYyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBzdHJ1Y3QgY2h1bmsg
KmNoOworICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOworICAgIHNpemUgPSAoc2l6
ZSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgIGlmIChzaXplIDw9
IDApIHNpemUgPSBwb29sLT5hbGlnbm1hc2s7CisgICAgcG9vbC0+ZnJlZSArPSBzaXplOworICAg
IGlmIChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUgPCAodWludHB0cl90KXJ2
KSB7CisgICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3QgY2h1bmsp
ICsgcG9vbC0+YWxpZ25tYXNrKQorICAgICAgICAgICAgICAgICAgICAgICYgfnBvb2wtPmFsaWdu
bWFzazsKKyAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7CisgICAgICAgIGlmICht
aW5yZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7CisgICAgICAgICAgICAvLyByZXF1ZXN0IHNpemUg
aXMgdG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUgaXQgYXMKKyAgICAgICAg
ICAgIC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCisgICAgICAgICAgICBjaCA9
IG1hbGxvYyhtaW5yZXEpOworICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5jaHVua3NpemUpOworICAg
ICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAgICAgICBwb29sLT5mcmVlID0gKHVp
bnRwdHJfdCljaCArIG1pbnJlcTsKKyAgICAgICAgICAgIHBvb2wtPmVuZCA9ICh1aW50cHRyX3Qp
Y2ggKyBwb29sLT5jaHVua3NpemU7CisgICAgICAgIH0KKyAgICAgICAgY2gtPm5leHQgPSBwb29s
LT5uZXh0OworICAgICAgICBwb29sLT5uZXh0ID0gY2g7CisgICAgICAgIHJ2ID0gKHZvaWQgKiko
KCh1aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2sp
OworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKK2ludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQ
b29sICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykgeworICAgIHN0cnVjdCBj
bGVhbnVwICpjbGVhbnVwOworCisgICAgcG9vbC0+ZnJlZSA9IChwb29sLT5mcmVlICsgc2l6ZW9m
KHZvaWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7CisgICAgY2xlYW51cCA9IG1lbV9B
bGxvYyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKKyAgICBpZiAoIWNsZWFudXApIHJl
dHVybiAtMTsKKyAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51cDsKKyAgICBjbGVhbnVw
LT5mbiA9IGZuOworICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKKyAgICBwb29sLT5jbGVhbnVwID0g
Y2xlYW51cDsKKyAgICByZXR1cm4gMDsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJ
RElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVz
IHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50
IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9k
aWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25z
dGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3
aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciBy
ZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3Vi
amVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4
Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdp
bmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVw
cm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0
aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jt
czsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUs
IHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5v
dGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2gg
cmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1l
LCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0
aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlz
IG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQs
IGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVk
IHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2
YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdh
cmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRl
ci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElT
IiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBF
SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBV
U0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhF
UgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFO
WSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcg
SU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFO
RC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VE
IEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLy8KKyNpZm5kZWYgX19NRU1PUllfSAorI2RlZmluZSBfX01F
TU9SWV9ICisKK3R5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVjIE1lbW9yeVBvb2w7CisKK2V4
dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtzaXplLCB1bnNpZ25l
ZCBpbnQgYWxpZ24pOworZXh0ZXJuIHZvaWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKik7Citl
eHRlcm4gdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnAsIHNpemVfdCBzaXplKTsKK2V4dGVy
biB2b2lkICptZW1fUmVhbGxvYyhNZW1vcnlQb29sICpwLCB2b2lkICpvbGQsIHNpemVfdCBvbGRz
aXplLCBzaXplX3QgbmV3c2l6ZSk7CitleHRlcm4gaW50IG1lbV9BZGRDbGVhbnVwKE1lbW9yeVBv
b2wgKnAsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKTsKKworI2VuZGlmIC8qIF9fTUVN
T1JZX0ggKi8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgor
CitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8g
eW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlz
dHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywg
cGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBO
VklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJt
cywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwg
dW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2Fy
ZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5k
IHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBp
ZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4g
dGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9m
IHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2
aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklE
SUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIg
cmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5W
SURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmln
aHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5
IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBv
cmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEg
U09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAor
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ
TVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBF
SVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lO
IE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD
VCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9G
IFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04g
T0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVS
IFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNU
IExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworCisjaWZuZGVmIEJJU09OX1BBUlNFUl9ICisjIGRlZmluZSBCSVNPTl9QQVJTRVJfSAorCisj
aWZuZGVmIHl5c3R5cGVwcAordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICBzY19pbnQ7Cisg
ICAgZmxvYXQgIHNjX2Z2YWw7CisgICAgaW50ICAgIHNjX2lkZW50OworCWNoYXIgICBzeW1ib2xf
bmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOKzFdOworfSB5eXN0eXBlcHA7CisKKyMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKyMgZGVmaW5lCUNQUF9BTkRfT1AJICAgICAgICAy
NTcKKyMgZGVmaW5lCUNQUF9TVUJfQVNTSUdOCSAgICAyNTkKKyMgZGVmaW5lCUNQUF9NT0RfQVNT
SUdOCSAgICAyNjAKKyMgZGVmaW5lCUNQUF9BRERfQVNTSUdOCTI2MQorIyBkZWZpbmUJQ1BQX0RJ
Vl9BU1NJR04JMjYyCisjIGRlZmluZQlDUFBfTVVMX0FTU0lHTgkyNjMKKyMgZGVmaW5lCUNQUF9F
UV9PUAkgICAgICAgIDI2NAorIyBkZWZpbmUgICAgQ1BQX1hPUl9PUCAgICAgICAgIDI2NSAKKyMg
ZGVmaW5lCUVSUk9SX1NZCSAgICAyNjYKKyMgZGVmaW5lCUNQUF9GTE9BVENPTlNUQU5UCTI2Nwor
IyBkZWZpbmUJQ1BQX0dFX09QCSAgICAgICAgMjY4CisjIGRlZmluZQlDUFBfUklHSFRfT1AgICAg
ICAgIDI2OQorIyBkZWZpbmUJQ1BQX0lERU5USUZJRVIJICAgIDI3MAorIyBkZWZpbmUJQ1BQX0lO
VENPTlNUQU5UCSAgICAyNzEKKyMgZGVmaW5lCUNQUF9MRV9PUAkgICAgICAgIDI3MgorIyBkZWZp
bmUJQ1BQX0xFRlRfT1AJICAgICAgICAyNzMKKyMgZGVmaW5lCUNQUF9ERUNfT1AJMjc0CisjIGRl
ZmluZQlDUFBfTkVfT1AJICAgICAgICAyNzUKKyMgZGVmaW5lCUNQUF9PUl9PUAkgICAgICAgIDI3
NgorIyBkZWZpbmUJQ1BQX0lOQ19PUAkgICAgMjc3CisjIGRlZmluZQlDUFBfU1RSQ09OU1RBTlQJ
ICAgIDI3OAorIyBkZWZpbmUJQ1BQX1RZUEVJREVOVElGSUVSCTI3OQorCisjIGRlZmluZQlGSVJT
VF9VU0VSX1RPS0VOX1NZCTI4OQorCisjIGRlZmluZQlDUFBfUklHSFRfQVNTSUdOCSAgICAyODAK
KyMgZGVmaW5lCUNQUF9MRUZUX0FTU0lHTgkgICAgMjgxCisjIGRlZmluZQlDUFBfQU5EX0FTU0lH
TgkyODIKKyMgZGVmaW5lCUNQUF9PUl9BU1NJR04gIAkyODMKKyMgZGVmaW5lCUNQUF9YT1JfQVNT
SUdOCTI4NAorIyBkZWZpbmUJQ1BQX0xFRlRfQlJBQ0tFVAkyODUKKyMgZGVmaW5lCUNQUF9SSUdI
VF9CUkFDS0VUCTI4NgorIyBkZWZpbmUJQ1BQX0xFRlRfQlJBQ0UJMjg3CisjIGRlZmluZQlDUFBf
UklHSFRfQlJBQ0UJMjg4CisKKyNlbmRpZiAvKiBub3QgQklTT05fUEFSU0VSX0ggKi8KSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitO
VklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91
IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVy
bXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJp
YnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9m
IHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxl
YXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklE
SUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFi
aWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywg
TlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5k
ZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAo
dGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJl
ZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5
b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhl
IGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRo
ZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNl
IG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEu
CitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmln
aHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJ
QSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRz
IHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90
aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0
ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09G
VFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM
SUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRI
RVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5P
IEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwK
K0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRI
RSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0Yg
VEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRI
RU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJ
QUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
CisjIGluY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKK2V4dGVybiBD
UFBTdHJ1Y3QgKmNwcDsKK2ludCBJbml0Q1BQU3RydWN0KHZvaWQpOworaW50IEluaXRTY2FubmVy
KENQUFN0cnVjdCAqY3BwKTsKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgaHRzaXplKTsKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICpzKTsKK2NoYXIqIEdldFN0cmlu
Z09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
NjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdo
dCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5W
SURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2lu
c3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElB
IHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91
IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3Rh
bGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBw
ZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0
cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJl
IiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQv
b3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBO
VklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2Yg
TlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1l
cnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitO
ZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBO
VklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5
IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHBy
ZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBi
dXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdl
ZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRo
ZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxp
Y2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklE
RUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlO
RlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklO
QVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBC
RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFS
WSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8s
IExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwg
TU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUs
IEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0Us
IEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHNjYW5uZXIuYworLy8K
KworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAwCisgICAgI2luY2x1ZGUgPGllZWVm
cC5oPgorICAgICNlbHNlCisgICAgI2RlZmluZSBpc2luZmYoeCkgKCgoKihpbnQgKikmKHgpICYg
MHg3ZjgwMDAwMEwpPT0weDdmODAwMDAwTCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAo
KCooaW50ICopJih4KSAmIDB4MDA3ZmZmZmZMKT09MDAwMDAwMDAwMEwpKQorI2VuZGlmCisKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKKwordHlwZWRlZiBz
dHJ1Y3QgU3RyaW5nSW5wdXRTcmMgeworICAgIElucHV0U3JjIGJhc2U7CisgICAgY2hhciAqcDsK
K30gU3RyaW5nSW5wdXRTcmM7CisKK3N0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICByZXR1cm4gRU9GOworfSAvLyBlb2Zfc2Nhbgor
CitzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkge30KKworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2Fu
LCAmZW9mX3NjYW4sICZub29wIH07CisKK3N0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICos
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2RlZmluZSBFT0xfU1kgJ1xuJworCisjaWYgZGVm
aW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgX19hc20gaW50IDMK
KyNlbGlmIGRlZmluZWQoX01fQU1ENjQpCisgICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIGFz
c2VydCghIkRiZ19CcmVha3BvaW50Iik7CisjZWxzZQorICAgICNkZWZpbmUgREJHX0JSRUFLUE9J
TlQoKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfTV9BTUQ2
NCkKKyAgICBfX2ludDY0IFJEVFNDICggdm9pZCApIHsKKworICAgICAgICBfX2ludDY0IHY7Cisg
ICAgCisgICAgICAgIF9fYXNtIF9fZW1pdCAweDBmCisgICAgICAgIF9fYXNtIF9fZW1pdCAweDMx
CisgICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdiwgZWF4CisgICAgICAgIF9fYXNtIG1vdiBk
d29yZCBwdHIgdis0LCBlZHgKKyAgICAKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorI2VuZGlm
CisKKworaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKQoreworICAgIC8vIEFkZCB2YXJp
b3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKKyAgICBpZiAoIUluaXRD
UFAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjcHAtPm1vc3RSZWNlbnRUb2tlbiA9IDA7
CisgICAgY3BwLT50b2tlbkxvYyA9ICZjcHAtPmx0b2tlbkxvYzsKKworICAgIGNwcC0+bHRva2Vu
TG9jLmZpbGUgPSAwOworICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSAwOworCisgICAgY3BwLT5j
dXJyZW50SW5wdXQgPSAmZW9mX2lucHV0c3JjOworICAgIGNwcC0+cHJldmlvdXNfdG9rZW4gPSAn
XG4nOworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKworICAgIHJldHVybiAxOwor
fSAvLyBJbml0U2Nhbm5lcgorCitpbnQgRnJlZVNjYW5uZXIodm9pZCkKK3sKKyAgICByZXR1cm4g
KEZyZWVDUFAoKSk7Cit9CisKKy8qCisgKiBzdHJfZ2V0Y2goKQorICogdGFrZXMgY2FyZSBvZiBy
ZWFkaW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KKyAqIHJldHVybnMgdGhlIG5leHQtY2hhciBm
cm9tIHRoZSBpbnB1dCBzdHJlYW0uCisgKiByZXR1cm5zIEVPRiB3aGVuIHRoZSBjb21wbGV0ZSBz
aGFkZXIgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IHN0cl9nZXRjaChTdHJpbmdJbnB1dFNy
YyAqaW4pCit7CisJZm9yKDs7KXsKKwkgICBpZiAoKmluLT5wKXsKKwkgICAgICBpZiAoKmluLT5w
ID09ICdcbicpIHsKKyAgICAgICAgICAgICBpbi0+YmFzZS5saW5lKys7CisgICAgICAgICAgICAg
SW5jTGluZU51bWJlcigpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKmluLT5wKys7
CisJICAgfQorCSAgIGlmKCsrKGNwcC0+UGFXaGljaFN0cikgPCBjcHAtPlBhQXJnYyl7CisJCSAg
ZnJlZShpbik7CisJCSAgU2V0U3RyaW5nTnVtYmVyKGNwcC0+UGFXaGljaFN0cik7CisgICAgCSAg
U2V0TGluZU51bWJlcigxKTsKKwkJICBTY2FuRnJvbVN0cmluZyhjcHAtPlBhQXJndltjcHAtPlBh
V2hpY2hTdHJdKTsKKwkJICBpbj0oU3RyaW5nSW5wdXRTcmMqKWNwcC0+Y3VycmVudElucHV0Owor
CSAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAKKwkgICB9CisJICAgZWxzZXsKKwkgICAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7CisJICAgICAgY3BwLT5QYVdoaWNoU3Ry
PTA7CisgICAgICAgICAgZnJlZShpbik7CisgICAgICAgICAgcmV0dXJuIEVPRjsKKyAgICAgICB9
ICAKKwl9Cit9IC8vIHN0cl9nZXRjaAorCitzdGF0aWMgdm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJ
bnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICp0eXBlKSB7CisgICAgaWYgKGluLT5wWy0x
XSA9PSBjaClpbi0+cC0tOworCWVsc2UgeworCQkqKGluLT5wKT0nXDAnOyAvL3RoaXMgd291bGQg
dGFrZSBjYXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBwcmV2aW91cyBzdHJpbmcuCisJICAgIGNwcC0+
UGFXaGljaFN0ci0tOworCX0gIAorCWlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgIGluLT5iYXNl
LmxpbmUtLTsKKyAgICAgICAgRGVjTGluZU51bWJlcigpOworICAgIH0KK30gLy8gc3RyX3VuZ2V0
Y2gKKworaW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKnMpCit7CisgICAgCisJU3RyaW5nSW5wdXRT
cmMgKmluID0gbWFsbG9jKHNpemVvZihTdHJpbmdJbnB1dFNyYykpOworICAgIG1lbXNldChpbiwg
MCwgc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CisJaW4tPnAgPSBzOworICAgIGluLT5iYXNlLmxp
bmUgPSAxOworICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47CisgICAgaW4tPmJhc2UuZ2V0
Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNoOworICAgIGlu
LT5iYXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKikp
c3RyX3VuZ2V0Y2g7CisgICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAg
IGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOworCisgICAgcmV0dXJuIDE7Cit9IC8vIFNj
YW5Gcm9tU3RyaW5nOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9hdGluZyBwb2ludCBjb25z
dGFudHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiBsQnVpbGRGbG9hdFZhbHVlKCkgLSBRdWlj
ayBhbmQgZGlydHkgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludC4gIFNpbmNlIGFsbAorICog
ICAgICAgICB3ZSBuZWVkIGlzIHNpbmdsZSBwcmVjaXNpb24gdGhpcyBzaG91bGQgYmUgcXVpdGUg
cHJlY2lzZS4KKyAqLworCitzdGF0aWMgZmxvYXQgbEJ1aWxkRmxvYXRWYWx1ZShjb25zdCBjaGFy
ICpzdHIsIGludCBsZW4sIGludCBleHApCit7CisgICAgZG91YmxlIHZhbCwgZXhwdmFsLCB0ZW47
CisgICAgaW50IGlpLCBsbGVuLCBhYnNleHA7CisgICAgZmxvYXQgcnY7CisKKyAgICB2YWwgPSAw
LjA7CisgICAgbGxlbiA9IGxlbjsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspCisg
ICAgICAgIHZhbCA9IHZhbCoxMC4wICsgKHN0cltpaV0gLSAnMCcpOworICAgIGlmIChleHAgIT0g
MCkgeworICAgICAgICBhYnNleHAgPSBleHAgPiAwID8gZXhwIDogLWV4cDsKKyAgICAgICAgZXhw
dmFsID0gMS4wZjsKKyAgICAgICAgdGVuID0gMTAuMDsKKyAgICAgICAgd2hpbGUgKGFic2V4cCkg
eworICAgICAgICAgICAgaWYgKGFic2V4cCAmIDEpCisgICAgICAgICAgICAgICAgZXhwdmFsICo9
IHRlbjsKKyAgICAgICAgICAgIHRlbiAqPSB0ZW47CisgICAgICAgICAgICBhYnNleHAgPj49IDE7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cCA+PSAwKSB7CisgICAgICAgICAgICB2YWwgKj0g
ZXhwdmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsIC89IGV4cHZhbDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBydiA9IChmbG9hdCl2YWw7CisgICAgaWYgKGlzaW5mZihydikp
IHsKKwkJQ1BQRXJyb3JUb0luZm9Mb2coIiBFUlJPUl9fX0ZQX0NPTlNUX09WRVJGTE9XIik7Cisg
ICAgfQorICAgIHJldHVybiBydjsKK30gLy8gbEJ1aWxkRmxvYXRWYWx1ZQorCisKKy8qCisgKiBs
RmxvYXRDb25zdCgpIC0gU2NhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgQXNzdW1lcyB0
aGF0IHRoZSBzY2FubmVyCisgKiAgICAgICAgIGhhcyBzZWVuIGF0IGxlYXN0IG9uZSBkaWdpdCwg
Zm9sbG93ZWQgYnkgZWl0aGVyIGEgZGVjaW1hbCAnLicgb3IgdGhlCisgKiAgICAgICAgIGxldHRl
ciAnZScuCisgKi8KKworc3RhdGljIGludCBsRmxvYXRDb25zdChjaGFyICpzdHIsIGludCBsZW4s
IGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IEhhc0RlY2ltYWwsIGRl
Y2xlbiwgZXhwLCBFeHBTaWduOworICAgIGludCBzdHJfbGVuOworICAgIGZsb2F0IGx2YWw7Cisg
ICAgCisgICAgSGFzRGVjaW1hbCA9IDA7CisgICAgZGVjbGVuID0gMDsKKyAgICBleHAgPSAwOwor
CQorICAgIHN0cl9sZW49bGVuOworICAgIGlmIChjaCA9PSAnLicpIHsKKwkJc3RyW2xlbisrXT1j
aDsKKyAgICAgICAgSGFzRGVjaW1hbCA9IDE7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHdoaWxlIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJP
TF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgIGRlY2xlbisrOworICAgICAgICAgICAgICAg
IGlmIChsZW4gPiAwIHx8IGNoICE9ICcwJykgeworICAgICAgICAgICAgICAgICAgICBzdHJbbGVu
XSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKztzdHJfbGVuKys7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0ZQX0NPTlNUX1RPT19MT05HIik7
CisgICAgICAgICAgICAgICAgbGVuID0gMSxzdHJfbGVuPTE7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBFeHBvbmVudDoKKworICAgIGlmIChjaCA9PSAnZScgfHwg
Y2ggPT0gJ0UnKSB7CisgICAgICAgIEV4cFNpZ24gPSAxOworCQlzdHJbbGVuKytdPWNoOworICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICBzdHJbbGVuKytd
PWNoOyAgCisJCQljaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKGNoID09ICctJykgeworICAgICAgICAg
ICAgRXhwU2lnbiA9IC0xOworCQkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAg
IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhwID0g
ZXhwKjEwICsgY2ggLSAnMCc7CisJCQkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIkVSUk9SX19fRVJST1JfSU5fRVhQT05FTlQiKTsKKyAgICAgICAgfQorICAgICAg
ICBleHAgKj0gRXhwU2lnbjsKKyAgICB9CisgICAgICAKKyAgICBpZiAobGVuID09IDApIHsKKyAg
ICAgICAgbHZhbCA9IDAuMGY7CisJCXN0cmNweShzdHIsIjAuMCIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0cltsZW5dPSdcMCc7ICAgICAgCisgICAgICAgIGx2YWwgPSBsQnVpbGRGbG9hdFZh
bHVlKHN0ciwgc3RyX2xlbiwgZXhwIC0gZGVjbGVuKTsKKyAgICB9CisgICAgLy8gU3VmZml4Ogor
ICAgIAorICAgIHl5bHZhbHBwLT5zY19mdmFsID0gbHZhbDsKKyAgICBzdHJjcHkoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLHN0cik7CisgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7ICAgICAgICAgICAgCisgICAgcmV0dXJuIENQUF9G
TE9BVENPTlNUQU5UOworfSAvLyBsRmxvYXRDb25zdAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8gTm9ybWFsIFNjYW5uZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgCitzdGF0aWMgaW50
IGJ5dGVfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGNo
YXIgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiArIDFdOworICAgIGNoYXIgc3RyaW5n
X3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGludCBBbHJlYWR5Q29tcGxhaW5lZDsKKyAg
ICBpbnQgbGVuLCBjaCwgaWksIGl2YWwgPSAwOworCisgICAgZm9yICg7OykgeworICAgICAgICB5
eWx2YWxwcC0+c2NfaW50ID0gMDsKKyAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJCisgICAgICAgIHdoaWxlIChjaCA9
PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXHInKSB7CisgICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gMTsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKwkJCisgICAgICAgIGNw
cC0+bHRva2VuTG9jLmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICAgICAgY3Bw
LT5sdG9rZW5Mb2MubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgICAgICBsZW4g
PSAwOworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGRlZmF1bHQ6CisJCQlyZXR1cm4g
Y2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KKyAgICAgICAgY2FzZSBFT0Y6CisgICAgICAg
ICAgICByZXR1cm4gLTE7CisJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0Qn
OiBjYXNlICdFJzoKKyAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAn
SSc6IGNhc2UgJ0onOgorICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6IGNhc2UgJ00nOiBjYXNl
ICdOJzogY2FzZSAnTyc6CisgICAgICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNh
c2UgJ1MnOiBjYXNlICdUJzoKKyAgICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzog
Y2FzZSAnWCc6IGNhc2UgJ1knOgorICAgICAgICBjYXNlICdaJzogY2FzZSAnXyc6CisgICAgICAg
IGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKKyAgICAg
ICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgorICAg
ICAgICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6Cisg
ICAgICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBjYXNlICd0JzoK
KyAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3kn
OgorICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAKKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAg
ICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisr
OworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwkJCQkJCisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IHdoaWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwKKyAgICAgICAgICAgICAgICAgICAg
IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycpOwor
ICAgICAgICAgICAgaWYgKGxlbiA+PSBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAg
ICAgIGxlbiA9IE1BWF9TWU1CT0xfTkFNRV9MRU4gLSAxOworICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICcwJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsK
KyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykg
eworCQkJCXl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICAgICAgICAgIGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAg
ICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CisgICAgICAgICAg
ICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKwkJCQkJCXl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
dmFsIDw9IDB4MGZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
Pj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
aSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2gg
Pj0gJ0EnICYmIGNoIDw9ICdGJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
aSA9IGNoIC0gJ0EnICsgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICdhJyArIDEwOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dmFsID0gKGl2YWwgPDwgNCkgfCBpaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19f
SEVYX0NPTlNUX09WRVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFk
eUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICcwJyAm
JiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScg
JiYgY2ggPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2En
ICYmIGNoIDw9ICdmJykpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VSUk9SX0lOX0hFWF9DT05TVEFOVCIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25h
bWVbbGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeyAvLyBvY3RhbCBpbnRlZ2VyIGNvbnN0YW50
cworICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAgICAgICAgICAgICAg
ICBpdmFsID0gMDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHl5
bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGl2YWwgPD0gMHgxZmZmZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAt
ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCAzKSB8IGlpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCJFUlJPUl9fX09DVF9DT05TVF9PVkVSRkxPVyIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAn
ICYmIGNoIDw9ICc3Jyk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAn
ZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIAor
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xf
bmFtZSwgbGVuLCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZh
bDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAgICAgICAgICAg
fSBlbHNlIHsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQljaCA9ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaC4uLgorICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2Ug
JzMnOiBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2Fz
ZSAnOCc6IGNhc2UgJzknOgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4g
PiAwIHx8IGNoICE9ICcwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5
bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAgICAgICAg
ICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8
fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0
Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5d
ID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAgICAgICAg
ICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7
IGlpIDwgbGVuOyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0geXlsdmFscHAtPnN5
bWJvbF9uYW1lW2lpXSAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpdmFsID4gMjE0
NzQ4MzY0KSB8fCAoaXZhbCA9PSAyMTQ3NDgzNjQgJiYgY2ggPj0gOCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWluZWQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19JTlRFR0VSX0NPTlNUX09WRVJGTE9X
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaXZhbCA9IGl2YWwqMTAgKyBj
aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9
IGl2YWw7CisgICAgICAgICAgICAgICAgaWYoaXZhbD09MCkKKyAgICAgICAgICAgICAgICAgICBz
dHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIwIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9JTlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJy0n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ERUNfT1A7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lH
TjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICctJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnKyc6CisgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfSU5DX09QOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FERF9BU1NJR047CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnKyc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyonOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJ
R047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAg
ICAgICAgIHJldHVybiAnKic7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyUnOgorICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX01PRF9BU1NJR047CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+
Jyl7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcl
JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklH
SFRfQlJBQ0tFVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICc6JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAn
Xic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICdeJykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfWE9SX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X1hPUl9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgICAgcmV0dXJuICdeJzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9F
UV9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICc9JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnISc6Cisg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfTkVfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnISc7CisgICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnfCcp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX09QOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX09SX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAg
ICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5
eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ3wnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnJic6CisgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgaWYgKGNoID09ICcmJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5E
X09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0n
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FORF9BU1NJR047CisgICAgICAgICAg
ICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgcmV0
dXJuICcmJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
JzwnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKKyAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNlewor
ICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9M
RUZUX09QOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0xFX09QOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnJScpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJB
Q0U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDS0VUOworICAgICAgICAgICAgICAgICAg
ICBlbHNleworICAgICAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJzwnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
ICAgICBpZihjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRf
QVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX09QOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9Jykg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0dFX09QOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJz4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSAnLic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8
PSAnOScpIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbEZs
b2F0Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCAwLCAnLicsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJykgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gLTE7IC8vIFNwZWNpYWwgRU9GIGhhY2sKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICcuJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgJy8nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLycpIHsK
KyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpOworICAgICAgICAgICAgICAg
IGlmIChjaCA9PSBFT0YpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyonKSB7
CisgICAgICAgICAgICAgICAgaW50IG5sY291bnQgPSAwOworICAgICAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyon
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykgbmxjb3VudCsrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IEVPRikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJS
T1JfX19FT0ZfSU5fQ09NTUVOVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0g
Jy8nKTsKKyAgICAgICAgICAgICAgICBpZiAobmxjb3VudCkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gR28g
dHJ5IGl0IGFnYWluLi4uCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcvJzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICciJzoKKyAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicgJiYgY2gg
IT0gRU9GKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0
ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NUUklOR19MRU4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nX3ZhbFtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAg
ICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgaWYgKGNoID09
ICciJykgeworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsIHN0cmluZ192YWwpOworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1RS
Q09OU1RBTlQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCJFUlJPUl9fX0NQUF9FT0xfSU5fU1RSSU5HIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEVSUk9SX1NZOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSAvLyBi
eXRlX3NjYW4KKworaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoreyAgICAK
Kwl5eXN0eXBlcHAgeXlsdmFscHA7CisgICAgaW50IHRva2VuID0gJ1xuJzsgICAKKworICAgIGZv
cig7OykgeworCisgICAgICAgIGNoYXIqIHRva2VuU3RyaW5nID0gMDsKKyAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsK
KwkJaWYoY2hlY2tfRU9GKHRva2VuKSkKKwkJICAgIHJldHVybiAwOworICAgICAgICBpZiAodG9r
ZW4gPT0gJyMnKSB7CisgICAgICAgICAgICBpZiAoY3BwLT5wcmV2aW91c190b2tlbiA9PSAnXG4n
fHwgY3BwLT5wcmV2aW91c190b2tlbiA9PSAwKSB7CisJCQkgICAgdG9rZW4gPSByZWFkQ1BQbGlu
ZSgmeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworCQkJICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29y
IGNvbW1hbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0
aGF0IGxpbmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gdG9rZW47CisgICAgICAgIC8v
IGV4cGFuZCBtYWNyb3MKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1h
Y3JvRXhwYW5kKHl5bHZhbHBwLnNjX2lkZW50LCAmeXlsdmFscHApKSB7CisgICAgICAgICAgICBj
cHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHRva2VuID09ICdcbicpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVS
KSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQg
PSAxOworICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5
bHZhbHBwLnNjX2lkZW50KTsKKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRD
T05TVEFOVHx8dG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7ICAgICAgICAgICAgCisgICAgICAgICAg
ICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOworCQl9IGVsc2UgeyAgICAgICAg
ICAgIAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOyAgICAgICAgICAg
IAorICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2Vu
KTsKKwkgICAgfQorCisgICAgICAgIGlmICh0b2tlblN0cmluZykgeworICAgICAgICAgICAgaWYg
KChzaWduZWQpc3RybGVuKHRva2VuU3RyaW5nKSA+PSBtYXhTaXplKSB7CisgICAgICAgICAgICAg
ICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiBtYXhT
aXplOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlICBpZiAoc3RybGVuKHRva2Vu
U3RyaW5nKSA+IDApIHsKKwkJCSAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7CisgICAgICAg
ICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOworICAgICAgICAgICAgICAgIHJldHVy
biAoaW50KXN0cmxlbih0b2tlblN0cmluZyk7CisgICAgICAgICAgICB9ICAKKworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30gLy8geXls
ZXgKKworLy9DaGVja3MgaWYgdGhlIHRva2VuIGp1c3QgcmVhZCBpcyBFT0Ygb3Igbm90LgoraW50
IGNoZWNrX0VPRihpbnQgdG9rZW4pCit7CisgICBpZih0b2tlbj09LTEpeworICAgICAgIGlmKGNw
cC0+aWZkZXB0aCA+MCl7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENv
bXBpbGF0aW9uIHN0b3BwZWQiKTsKKyAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAg
ICB9CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vIEVuZCBvZiBzY2FubmVyLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEg
Q29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9u
IG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNl
IHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRv
IG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3Nv
ZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElB
IGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJ
RElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisi
TlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJp
YnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMs
IGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVk
aXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHly
aWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4
dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklE
SUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtz
IG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNl
cHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9y
IGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJl
aW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQg
bWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdv
cmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5v
IGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUg
SVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAor
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxP
TkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5U
IFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lE
RU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0Us
IFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitO
VklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBP
RiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElU
WSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8v
IHNjYW5uZXIuaAorLy8KKworI2lmICFkZWZpbmVkKF9fU0NBTk5FUl9IKQorI2RlZmluZSBfX1ND
QU5ORVJfSCAxCisKKyNkZWZpbmUgTUFYX1NZTUJPTF9OQU1FX0xFTiAxMjgKKyNkZWZpbmUgTUFY
X1NUUklOR19MRU4gNTEyCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2Vy
LmgiCisKKy8vIE5vdCByZWFsbHkgYXRvbSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4u
CisKK3R5cGVkZWYgc3RydWN0IFNvdXJjZUxvY19SZWMgeworICAgIHVuc2lnbmVkIHNob3J0IGZp
bGUsIGxpbmU7Cit9IFNvdXJjZUxvYzsKKworaW50IHl5cGFyc2UgKHZvaWQpOworCitpbnQgeXls
ZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOworCit0eXBlZGVmIHN0cnVjdCBJbnB1dFNy
YyB7CisgICAgc3RydWN0IElucHV0U3JjCSpwcmV2OworICAgIGludAkJCSgqc2Nhbikoc3RydWN0
IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKKyAgICBpbnQJCQkoKmdldGNoKShzdHJ1Y3QgSW5w
dXRTcmMgKiwgeXlzdHlwZXBwICopOworICAgIHZvaWQJCSgqdW5nZXRjaCkoc3RydWN0IElucHV0
U3JjICosIGludCwgeXlzdHlwZXBwICopOworICAgIGludAkJCW5hbWU7ICAvKiBhdG9tICovCisg
ICAgaW50CQkJbGluZTsKK30gSW5wdXRTcmM7CisKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3Qg
KmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCitpbnQgU2NhbkZyb21TdHJp
bmcoY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3Ry
aW5nIG1lbnRpb25lZC4KK2ludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNr
IGlmIHdlIGhpdCBhIEVPRiBhYnJ1cHRseSAKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAq
KTsgICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cK
K3ZvaWQgU2V0TGluZU51bWJlcihpbnQpOwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKK3Zv
aWQgSW5jTGluZU51bWJlcih2b2lkKTsKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKTsKK2ludCBG
cmVlU2Nhbm5lcih2b2lkKTsgICAgICAgICAgICAgICAgIC8vIEZyZWUgdGhlIGNwcCBzY2FubmVy
CisjZW5kaWYgLy8gIShkZWZpbmVkKF9fU0NBTk5FUl9IKQorCkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzbGdsb2JhbHMu
aAorLy8KKworI2lmICFkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCisjZGVmaW5lIF9fU0xHTE9CQUxT
X0ggMQorCit0eXBlZGVmIHN0cnVjdCBDUFBTdHJ1Y3RfUmVjIENQUFN0cnVjdDsKKworZXh0ZXJu
IENQUFN0cnVjdCAqY3BwOworCisjdW5kZWYgIENQUENfREVCVUdfVEhFX0NPTVBJTEVSCisjaWYg
ZGVmaW5lZChfREVCVUcpCisjZGVmaW5lIENQUENfREVCVUdfVEhFX0NPTVBJTEVSIDEKKyNlbmRp
ZgorCisjdW5kZWYgIENQUENfRU5BQkxFX1RPT0xTCisjZGVmaW5lIENQUENfRU5BQkxFX1RPT0xT
IDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jb21waWxlLmgiCisjaWYgIWRlZmluZWQoTk9fUEFSU0VSKQorI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTlVM
TCkKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2VuZGlmIC8vICEoZGVmaW5lZChfX1NMR0xP
QkFMU19IKQorCisKKyAgICAKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zeW1ib2xzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zeW1ib2xzLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKy8vIHN5bWJvbHMuYworLy8KKworI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBTeW1ib2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU2NvcGUgKlNj
b3BlTGlzdCA9IE5VTEw7CitTY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKK1Njb3BlICpHbG9i
YWxTY29wZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkg
eworICAgIFNjb3BlICpzY29wZSA9IF9zY29wZTsKKworICAgIGlmIChzY29wZS0+bmV4dCkKKyAg
ICAgICAgc2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKKyAgICBpZiAoc2NvcGUtPnBy
ZXYpCisgICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7CisgICAgZWxzZQor
ICAgICAgICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKK30KKworLyoKKyAqIE5ld1Njb3BlKCkK
KyAqCisgKi8KK1Njb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQoreworICAg
IFNjb3BlICpsU2NvcGU7CisKKyAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNj
b3BlKSk7CisgICAgbFNjb3BlLT5wb29sID0gcG9vbDsKKyAgICBsU2NvcGUtPnBhcmVudCA9IE5V
TEw7CisgICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7CisgICAgbFNjb3BlLT5zeW1ib2xzID0g
TlVMTDsKKyAgICAKKyAgICBsU2NvcGUtPmxldmVsID0gMDsKKworICAgIGxTY29wZS0+cHJvZ3Jh
bXMgPSBOVUxMOworICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKKyAgICAgICAg
U2NvcGVMaXN0LT5wcmV2ID0gbFNjb3BlOworICAgIGxTY29wZS0+cHJldiA9IDA7CisgICAgU2Nv
cGVMaXN0ID0gbFNjb3BlOworICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBs
U2NvcGUpOworICAgIHJldHVybiBsU2NvcGU7Cit9IC8vIE5ld1Njb3BlCisKKy8qCisgKiBQdXNo
U2NvcGUoKQorICoKKyAqLworCit2b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQoreworICAg
IFNjb3BlICpsU2NvcGU7CisKKyAgICBpZiAoQ3VycmVudFNjb3BlKSB7CisgICAgICAgIGZTY29w
ZS0+bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKKyAgICAgICAgaWYgKGZTY29wZS0+
bGV2ZWwgPT0gMSkgeworICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgeworICAgICAgICAg
ICAgICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0x
LCB3ZSdyZQorICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1
cGVyZ2xvYmFsIHNjb3BlLiAgVGhpbmdzCisgICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBp
ZiB3ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKKyAgICAgICAgICAg
ICAgICAgKiBzZXQgaXQgdG8gMiAqLworICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAy
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49
IDIpIHsKKyAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKKyAgICAgICAgICAgIHdoaWxlIChs
U2NvcGUtPmxldmVsID4gMikKKyAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7
CisgICAgICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7CisgICAgfQorICAgIGZTY29wZS0+
cGFyZW50ID0gQ3VycmVudFNjb3BlOworICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKK30gLy8g
UHVzaFNjb3BlCisKKy8qCisgKiBQb3BTY29wZSgpCisgKgorICovCisKK1Njb3BlICpQb3BTY29w
ZSh2b2lkKQoreworICAgIFNjb3BlICpsU2NvcGU7CisKKyAgICBsU2NvcGUgPSBDdXJyZW50U2Nv
cGU7CisgICAgaWYgKEN1cnJlbnRTY29wZSkKKyAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVu
dFNjb3BlLT5wYXJlbnQ7CisgICAgcmV0dXJuIGxTY29wZTsKK30gLy8gUG9wU2NvcGUKKworLyoK
KyAqIE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7CisgKgorICovCisK
K1N5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFt
ZSwgc3ltYm9sa2luZCBraW5kKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgY2hhciAqcGNo
OworICAgIGludCBpaTsKKworICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxsb2MoZlNjb3Bl
LT5wb29sLCBzaXplb2YoU3ltYm9sKSk7CisgICAgbFN5bWItPmxlZnQgPSBOVUxMOworICAgIGxT
eW1iLT5yaWdodCA9IE5VTEw7CisgICAgbFN5bWItPm5leHQgPSBOVUxMOworICAgIGxTeW1iLT5u
YW1lID0gbmFtZTsKKyAgICBsU3ltYi0+bG9jID0gKmxvYzsKKyAgICBsU3ltYi0+a2luZCA9IGtp
bmQ7CisgICAgCisgICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKKworICAgIHBjaCA9IChjaGFyICop
ICZsU3ltYi0+ZGV0YWlsczsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YobFN5bWItPmRl
dGFpbHMpOyBpaSsrKQorICAgICAgICAqcGNoKysgPSAwOworICAgIHJldHVybiBsU3ltYjsKK30g
Ly8gTmV3U3ltYm9sCisKKy8qCisgKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJpbmFyeSB0cmVl
IGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0aGV5Cisg
KiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhpcyBsYXRlciAo
YnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCisgKi8KKworc3RhdGljIHZvaWQgbEFkZFRv
VHJlZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKK3sKKyAgICBTeW1ib2wgKmxT
eW1iOworICAgIGludCBscmV2LCBmcmV2OworCisgICAgbFN5bWIgPSAqZlN5bWJvbHM7CisgICAg
aWYgKGxTeW1iKSB7CisgICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBmU3lt
Yi0+bmFtZSk7CisgICAgICAgIHdoaWxlIChsU3ltYikgeworICAgICAgICAgICAgbHJldiA9IEdl
dFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKKyAgICAgICAgICAgIGlmIChscmV2
ID09IGZyZXYpIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiR2V0QXRvbVN0
cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZyZXYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdodCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+cmlnaHQgPSBm
U3ltYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7CisgICAgfQorfSAvLyBsQWRkVG9UcmVl
CisKKworLyoKKyAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUsIG9yIGZ1bmN0
aW9uIG5hbWUgdG8gYSBzY29wZS4KKyAqCisgKi8KKworU3ltYm9sICpBZGRTeW1ib2woU291cmNl
TG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpCit7Cisg
ICAgU3ltYm9sICpsU3ltYjsKKworICAgIGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBD
dXJyZW50U2NvcGU7CisgICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0b20sIGtp
bmQpOworICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOworICAgIHJldHVy
biBsU3ltYjsKK30gLy8gQWRkU3ltYm9sCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogU3ltYm9s
IFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogTG9va1VwTG9jYWxT
eW1ib2woKQorICoKKyAqLworCitTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2Nv
cGUsIGludCBhdG9tKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgaW50IHJuYW1lLCByYXRv
bTsKKworICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7CisgICAgaWYg
KCFmU2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBsU3ltYiA9IGZT
Y29wZS0+c3ltYm9sczsKKyAgICB3aGlsZSAobFN5bWIpIHsKKyAgICAgICAgcm5hbWUgPSBHZXRS
ZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7CisgICAgICAgIGlmIChybmFtZSA9PSBy
YXRvbSkgeworICAgICAgICAgICAgcmV0dXJuIGxTeW1iOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9IGxT
eW1iLT5sZWZ0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9
IGxTeW1iLT5yaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gTlVMTDsKK30gLy8gTG9va1VwTG9jYWxTeW1ib2wKKworLyoKKyAqIExvb2tVcFN5bWJvbCgp
CisgKgorICovCisKK1N5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9t
KQoreworICAgIFN5bWJvbCAqbFN5bWI7CisKKyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNj
b3BlID0gQ3VycmVudFNjb3BlOworICAgIHdoaWxlIChmU2NvcGUpIHsKKyAgICAgICAgbFN5bWIg
PSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOworICAgICAgICBpZiAobFN5bWIpCisg
ICAgICAgICAgICByZXR1cm4gbFN5bWI7CisgICAgICAgIGZTY29wZSA9IGZTY29wZS0+cGFyZW50
OworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30gLy8gTG9va1VwU3ltYm9sCisKSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2Fy
ZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzeW1i
b2xzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkKKyNkZWZpbmUgX19TWU1CT0xT
X0ggMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgorCit0eXBl
ZGVmIGVudW0gc3ltYm9sa2luZCB7CisgICBNQUNST19TCit9IHN5bWJvbGtpbmQ7CisKKy8vIFR5
cGVkZWZzIGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1ib2xzLmgiOgorCit0eXBlZGVm
IHN0cnVjdCBTY29wZV9SZWMgU2NvcGU7Cit0eXBlZGVmIHN0cnVjdCBTeW1ib2xfUmVjIFN5bWJv
bDsKKwordHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgeworICAgIHN0cnVjdCBTeW1ib2xM
aXN0X1JlYyAqbmV4dDsKKyAgICBTeW1ib2wgKnN5bWI7Cit9IFN5bWJvbExpc3Q7CisKK3N0cnVj
dCBTY29wZV9SZWMgeworICAgIFNjb3BlICpuZXh0LCAqcHJldjsgICAgIC8vIGRvdWJseS1saW5r
ZWQgbGlzdCBvZiBhbGwgc2NvcGVzCisgICAgU2NvcGUgKnBhcmVudDsKKyAgICBTY29wZSAqZnVu
U2NvcGU7ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBvZiBlbmNsb3NpbmcgZnVuY3Rp
b24KKyAgICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29sIHVzZWQgZm9yIGFsbG9jYXRp
b24gaW4gdGhpcyBzY29wZQorICAgIFN5bWJvbCAqc3ltYm9sczsKKyAgICAKKwlpbnQgbGV2ZWw7
ICAgICAgICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9IGdsb2JhbHMsIGV0Yy4KKwor
ICAgIC8vIE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVsIDEpOgorICAgIFN5bWJvbExp
c3QgKnByb2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9yIHRoaXMgY29tcGlsYXRpb24u
Cit9OworCisKKy8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBiaW5hcnkgdHJlZS4KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAgICAgIC8vIHRvIGdldCBNYWNy
b1N5bWJvbCBkZWYKKworc3RydWN0IFN5bWJvbF9SZWMgeworICAgIFN5bWJvbCAqbGVmdCwgKnJp
Z2h0OworICAgIFN5bWJvbCAqbmV4dDsKKyAgICBpbnQgbmFtZTsgICAgICAgLy8gTmFtZSBhdG9t
CisgICAgU291cmNlTG9jIGxvYzsKKyAgICBzeW1ib2xraW5kIGtpbmQ7CisgICAgdW5pb24gewor
ICAgICAgICBNYWNyb1N5bWJvbCBtYWM7CisgICAgfSBkZXRhaWxzOworfTsKKworZXh0ZXJuIFNj
b3BlICpDdXJyZW50U2NvcGU7CitleHRlcm4gU2NvcGUgKkdsb2JhbFNjb3BlOworZXh0ZXJuIFNj
b3BlICpTY29wZUxpc3Q7CisKK1Njb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICopOwor
I2RlZmluZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2woQ3VycmVudFNjb3BlLT5wb29s
KQordm9pZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7CitTY29wZSAqUG9wU2NvcGUodm9pZCk7
CitTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5h
bWUsIHN5bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywg
U2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkxvb2tV
cExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKK1N5bWJvbCAqTG9va1VwU3lt
Ym9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hh
ciAqKTsKKworCisjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCisKSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
CitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKwor
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitO
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwor
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
K1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
CitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyB0b2tlbnMuYwor
Ly8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIFByZXByb2Nlc3NvciBhbmQgVG9rZW4gUmVjb3JkZXIgYW5kIFBsYXliYWNrOiAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKKy8qCisgKiBpZHN0cigpCisgKiBDb3B5IGEgc3RyaW5nIHRvIGEgbWFsbG9jJ2VkIGJsb2Nr
IGFuZCBjb252ZXJ0IGl0IGludG8gc29tZXRoaW5nIHN1aXRhYmxlCisgKiBmb3IgYW4gSUQKKyAq
CisgKi8KKworc3RhdGljIGNoYXIgKmlkc3RyKGNvbnN0IGNoYXIgKmZzdHIsIE1lbW9yeVBvb2wg
KnBvb2wpCit7CisgICAgc2l6ZV90IGxlbjsKKyAgICBjaGFyICpzdHIsICp0OworICAgIGNvbnN0
IGNoYXIgKmY7CisKKyAgICBsZW4gPSBzdHJsZW4oZnN0cik7CisgICAgaWYgKCFwb29sKQorICAg
ICAgICBzdHIgPSAoY2hhciAqKSBtYWxsb2MobGVuICsgMSk7CisgICAgZWxzZQorICAgICAgICBz
dHIgPSAoY2hhciAqKSBtZW1fQWxsb2MocG9vbCwgbGVuICsgMSk7CisgICAgCisgICAgZm9yIChm
PWZzdHIsIHQ9c3RyOyAqZjsgZisrKSB7CisgICAgICAgIGlmIChpc2FsbnVtKCpmKSkgKnQrKyA9
ICpmOworICAgICAgICBlbHNlIGlmICgqZiA9PSAnLicgfHwgKmYgPT0gJy8nKSAqdCsrID0gJ18n
OworICAgIH0KKyAgICAqdCA9IDA7CisgICAgcmV0dXJuIHN0cjsKK30gLy8gaWRzdHIKKworCisv
KgorICogbE5ld0Jsb2NrKCkKKyAqCisgKi8KKworc3RhdGljIFRva2VuQmxvY2sgKmxOZXdCbG9j
ayhUb2tlblN0cmVhbSAqZlRvaywgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBUb2tlbkJsb2Nr
ICpsQmxvY2s7CisKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2Nr
ICopIG1hbGxvYyhzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOworICAgIGVsc2UKKyAgICAgICAg
bEJsb2NrID0gKFRva2VuQmxvY2sgKikgbWVtX0FsbG9jKHBvb2wsIHNpemVvZihUb2tlbkJsb2Nr
KSArIDI1Nik7CisgICAgbEJsb2NrLT5jb3VudCA9IDA7CisgICAgbEJsb2NrLT5jdXJyZW50ID0g
MDsKKyAgICBsQmxvY2stPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBsQmxvY2sgKyBzaXplb2Yo
VG9rZW5CbG9jayk7CisgICAgbEJsb2NrLT5tYXggPSAyNTY7CisgICAgbEJsb2NrLT5uZXh0ID0g
TlVMTDsKKyAgICBpZiAoZlRvay0+aGVhZCkgeworICAgICAgICBmVG9rLT5jdXJyZW50LT5uZXh0
ID0gbEJsb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIGZUb2stPmhlYWQgPSBsQmxvY2s7Cisg
ICAgfQorICAgIGZUb2stPmN1cnJlbnQgPSBsQmxvY2s7CisgICAgcmV0dXJuIGxCbG9jazsKK30g
Ly8gbE5ld0Jsb2NrCisKKy8qCisgKiBsQWRkQnl0ZSgpCisgKgorICovCisKK3N0YXRpYyB2b2lk
IGxBZGRCeXRlKFRva2VuU3RyZWFtICpmVG9rLCB1bnNpZ25lZCBjaGFyIGZWYWwpCit7CisgICAg
VG9rZW5CbG9jayAqbEJsb2NrOworICAgIGxCbG9jayA9IGZUb2stPmN1cnJlbnQ7CisgICAgaWYg
KGxCbG9jay0+Y291bnQgPj0gbEJsb2NrLT5tYXgpCisgICAgICAgIGxCbG9jayA9IGxOZXdCbG9j
ayhmVG9rLCAwKTsKKyAgICBsQmxvY2stPmRhdGFbbEJsb2NrLT5jb3VudCsrXSA9IGZWYWw7Cit9
IC8vIGxBZGRCeXRlCisKKworCisvKgorICogbFJlYWRCeXRlKCkgLSBHZXQgdGhlIG5leHQgYnl0
ZSBmcm9tIGEgc3RyZWFtLgorICoKKyAqLworCitzdGF0aWMgaW50IGxSZWFkQnl0ZShUb2tlblN0
cmVhbSAqcFRvaykKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7CisgICAgaW50IGx2YWwgPSAt
MTsKKworICAgIGxCbG9jayA9IHBUb2stPmN1cnJlbnQ7CisgICAgaWYgKGxCbG9jaykgeworICAg
ICAgICBpZiAobEJsb2NrLT5jdXJyZW50ID49IGxCbG9jay0+Y291bnQpIHsKKyAgICAgICAgICAg
IGxCbG9jayA9IGxCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGlmIChsQmxvY2spCisgICAgICAg
ICAgICAgICAgbEJsb2NrLT5jdXJyZW50ID0gMDsKKyAgICAgICAgICAgIHBUb2stPmN1cnJlbnQg
PSBsQmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxCbG9jaykKKyAgICAgICAgICAgIGx2
YWwgPSBsQmxvY2stPmRhdGFbbEJsb2NrLT5jdXJyZW50KytdOworICAgIH0KKyAgICByZXR1cm4g
bHZhbDsKK30gLy8gbFJlYWRCeXRlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLyBHbG9iYWwgRnVuY3Rpb25zOi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKy8qCisgKiBOZXdUb2tlblN0cmVhbSgpCisgKgorICovCisKK1Rva2VuU3RyZWFt
ICpOZXdUb2tlblN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQb29sICpwb29sKQorewor
ICAgIFRva2VuU3RyZWFtICpwVG9rOworCisgICAgaWYgKCFwb29sKQorICAgICAgICBwVG9rID0g
KFRva2VuU3RyZWFtICopIG1hbGxvYyhzaXplb2YoVG9rZW5TdHJlYW0pKTsKKyAgICBlbHNlCisg
ICAgICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0qKW1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5T
dHJlYW0pKTsKKyAgICBwVG9rLT5uZXh0ID0gTlVMTDsKKyAgICBwVG9rLT5uYW1lID0gaWRzdHIo
bmFtZSwgcG9vbCk7CisgICAgcFRvay0+aGVhZCA9IE5VTEw7CisgICAgcFRvay0+Y3VycmVudCA9
IE5VTEw7CisgICAgbE5ld0Jsb2NrKHBUb2ssIHBvb2wpOworICAgIHJldHVybiBwVG9rOworfSAv
LyBOZXdUb2tlblN0cmVhbQorCisvKgorICogRGVsZXRlVG9rZW5TdHJlYW0oKQorICoKKyAqLwor
Cit2b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIFRva2Vu
QmxvY2sgKnBCbG9jaywgKm5CbG9jazsKKworICAgIGlmIChwVG9rKSB7CisgICAgICAgIHBCbG9j
ayA9IHBUb2stPmhlYWQ7CisgICAgICAgIHdoaWxlIChwQmxvY2spIHsKKyAgICAgICAgICAgIG5C
bG9jayA9IHBCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGZyZWUocEJsb2NrKTsKKyAgICAgICAg
ICAgIHBCbG9jayA9IG5CbG9jazsKKyAgICAgICAgfQorICAgICAgICBpZiAocFRvay0+bmFtZSkK
KyAgICAgICAgICAgIGZyZWUocFRvay0+bmFtZSk7CisgICAgICAgIGZyZWUocFRvayk7CisgICAg
fQorfSAvLyBEZWxldGVUb2tlblN0cmVhbQorCisvKgorICogUmVjb3JkVG9rZW4oKSAtIEFkZCBh
IHRva2VuIHRvIHRoZSBlbmQgb2YgYSBsaXN0IGZvciBsYXRlciBwbGF5YmFjayBvciBwcmludG91
dC4KKyAqCisgKi8KKwordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRv
a2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjb25zdCBjaGFyICpzOworICAgIHVu
c2lnbmVkIGNoYXIgKnN0cj1OVUxMOworCisgICAgaWYgKHRva2VuID4gMjU2KQorICAgICAgICBs
QWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoKHRva2VuICYgMHg3ZikgKyAweDgwKSk7Cisg
ICAgZWxzZQorICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikodG9rZW4gJiAw
eDdmKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6Cisg
ICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6Cisg
ICAgICAgIHMgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKKyAg
ICAgICAgd2hpbGUgKCpzKQorICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNo
YXIpICpzKyspOworICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKKyAg
ICAgICAgIHN0cj15eWx2YWxwcC0+c3ltYm9sX25hbWU7CisgICAgICAgICB3aGlsZSAoKnN0cil7
CisgICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCh1bnNpZ25lZCBjaGFyKSAqc3RyKTsKKyAgICAg
ICAgICAgICpzdHIrKzsKKyAgICAgICAgIH0KKyAgICAgICAgIGxBZGRCeXRlKHBUb2ssIDApOwor
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1
bnNpZ25lZCBjaGFyKSh5eWx2YWxwcC0+c2NfaW50ID8gMSA6IDApKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9IC8vIFJlY29yZFRva2VuCisKKy8qCisgKiBSZXdpbmRU
b2tlblN0cmVhbSgpIC0gUmVzZXQgYSB0b2tlbiBzdHJlYW0gaW4gcHJlcGVyYXRpb24gZm9yIHJl
YWRpbmcuCisgKgorICovCisKK3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBU
b2spCit7CisgICAgaWYgKHBUb2stPmhlYWQpIHsKKyAgICAgICAgcFRvay0+Y3VycmVudCA9IHBU
b2stPmhlYWQ7CisgICAgICAgIHBUb2stPmN1cnJlbnQtPmN1cnJlbnQgPSAwOworICAgIH0KK30g
Ly8gUmV3aW5kVG9rZW5TdHJlYW0KKworLyoKKyAqIFJlYWRUb2tlbigpIC0gUmVhZCB0aGUgbmV4
dCB0b2tlbiBmcm9tIGEgc3RyZWFtLgorICoKKyAqLworCitpbnQgUmVhZFRva2VuKFRva2VuU3Ry
ZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjaGFyIHN5bWJvbF9uYW1l
W01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKKyAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklO
R19MRU4gKyAxXTsKKyAgICBpbnQgbHRva2VuLCBsZW47CisgICAgY2hhciBjaDsKKworICAgIGx0
b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICBpZiAobHRva2VuID49IDApIHsKKyAgICAgICAg
aWYgKGx0b2tlbiA+IDEyNykKKyAgICAgICAgICAgIGx0b2tlbiArPSAxMjg7CisgICAgICAgIHN3
aXRjaCAobHRva2VuKSB7CisgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CisgICAgICAgIGNh
c2UgQ1BQX1RZUEVJREVOVElGSUVSOgorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAg
IGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnYScgJiYg
Y2ggPD0gJ3onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAn
WicpIHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwK
KyAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAg
ICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOwor
ICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsK
KyAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICB3
aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQorICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBNQVhfU1RSSU5HX0xFTikKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW4r
K10gPSBjaDsKKyAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IDA7CisgICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAg
ICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAg
ICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKXx8KGNoPT0nZSd8fGNoPT0n
RSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSctJykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKzsK
KyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7
CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAgICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19mdmFsPShmbG9hdClhdG9mKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAw
OworICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICB3aGlsZSAo
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5
bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAg
ICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAg
ICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOworICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0
b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICcoJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbHRva2VuOwor
ICAgIH0KKyAgICByZXR1cm4gRU9GX1NZOworfSAvLyBSZWFkVG9rZW4KKwordHlwZWRlZiBzdHJ1
Y3QgVG9rZW5JbnB1dFNyYyB7CisgICAgSW5wdXRTcmMgICAgICAgICAgICBiYXNlOworICAgIFRv
a2VuU3RyZWFtICAgICAgICAgKnRva2VuczsKKyAgICBpbnQgICAgICAgICAgICAgICAgICgqZmlu
YWwpKENQUFN0cnVjdCAqKTsKK30gVG9rZW5JbnB1dFNyYzsKKworc3RhdGljIGludCBzY2FuX3Rv
a2VuKFRva2VuSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQg
dG9rZW4gPSBSZWFkVG9rZW4oaW4tPnRva2VucywgeXlsdmFscHApOworICAgIGludCAoKmZpbmFs
KShDUFBTdHJ1Y3QgKik7CisgICAgY3BwLT50b2tlbkxvYy0+ZmlsZSA9IGNwcC0+Y3VycmVudElu
cHV0LT5uYW1lOworICAgIGNwcC0+dG9rZW5Mb2MtPmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+
bGluZTsKKyAgICBpZiAodG9rZW4gPT0gJ1xuJykgeworICAgICAgICBpbi0+YmFzZS5saW5lKys7
CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgaWYgKHRva2VuID4gMCkgcmV0dXJu
IHRva2VuOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKKyAgICBmaW5h
bCA9IGluLT5maW5hbDsKKyAgICBmcmVlKGluKTsKKyAgICBpZiAoZmluYWwgJiYgIWZpbmFsKGNw
cCkpIHJldHVybiAtMTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKK30KKworaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9r
ZW5TdHJlYW0gKnRzLCBpbnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSkKK3sKKyAg
ICBUb2tlbklucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoVG9rZW5JbnB1dFNyYykpOworICAg
IG1lbXNldChpbiwgMCwgc2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKKyAgICBpbi0+YmFzZS5uYW1l
ID0gbmFtZTsKKyAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgaW4t
PmJhc2Uuc2NhbiA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5cGVwcCAqKSlzY2FuX3Rva2Vu
OworICAgIGluLT5iYXNlLmxpbmUgPSAxOworICAgIGluLT50b2tlbnMgPSB0czsKKyAgICBpbi0+
ZmluYWwgPSBmaW5hbDsKKyAgICBSZXdpbmRUb2tlblN0cmVhbSh0cyk7CisgICAgY3BwLT5jdXJy
ZW50SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0
IFVuZ290VG9rZW4geworICAgIElucHV0U3JjICAgIGJhc2U7CisgICAgaW50ICAgICAgICAgdG9r
ZW47CisgICAgeXlzdHlwZXBwICAgICBsdmFsOworfSBVbmdvdFRva2VuOworCitzdGF0aWMgaW50
IHJlZ2V0X3Rva2VuKFVuZ290VG9rZW4gKnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAg
IGludCB0b2tlbiA9IHQtPnRva2VuOworICAgICp5eWx2YWxwcCA9IHQtPmx2YWw7CisgICAgY3Bw
LT5jdXJyZW50SW5wdXQgPSB0LT5iYXNlLnByZXY7CisgICAgZnJlZSh0KTsKKyAgICByZXR1cm4g
dG9rZW47Cit9CisKK3ZvaWQgVW5nZXRUb2tlbihpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKSB7CisgICAgVW5nb3RUb2tlbiAqdCA9IG1hbGxvYyhzaXplb2YoVW5nb3RUb2tlbikpOwor
ICAgIG1lbXNldCh0LCAwLCBzaXplb2YoVW5nb3RUb2tlbikpOworICAgIHQtPnRva2VuID0gdG9r
ZW47CisgICAgdC0+bHZhbCA9ICp5eWx2YWxwcDsKKyAgICB0LT5iYXNlLnNjYW4gPSAodm9pZCAq
KXJlZ2V0X3Rva2VuOworICAgIHQtPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAg
IHQtPmJhc2UubmFtZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOworICAgIHQtPmJhc2UubGlu
ZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJnQt
PmJhc2U7Cit9CisKKwordm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFt
ICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbjsKKyAgICBjaGFyIHN0
clsxMDBdOworCisgICAgaWYgKGZwID09IDApIGZwID0gc3Rkb3V0OworICAgIFJld2luZFRva2Vu
U3RyZWFtKHMpOworICAgIHdoaWxlICgodG9rZW4gPSBSZWFkVG9rZW4ocywgeXlsdmFscHApKSA+
IDApIHsKKyAgICAgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIENQUF9JREVOVElG
SUVSOgorICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAgICAgICAgICAgIHNwcmlu
dGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXls
dmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBf
RkxPQVRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+
c2NfZnZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RB
TlQ6CisgICAgICAgICAgICAvL3ByaW50ZigiJWQgIiwgeXlsdmFscHAtPnNjX2ludCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh0b2tlbiA+
PSAxMjcpCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5n
KGF0YWJsZSwgdG9rZW4pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzcHJp
bnRmKHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
K2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJ
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
CitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitl
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAor
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
K1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHRva2Vucy5oCisv
LworCisjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKKyNkZWZpbmUgX19UT0tFTlNfSCAxCisKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisKKyNkZWZpbmUgRU9GX1NZ
ICgtMSkKKwordHlwZWRlZiBzdHJ1Y3QgVG9rZW5CbG9ja19SZWMgVG9rZW5CbG9jazsKKwordHlw
ZWRlZiBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjIHsKKyAgICBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVj
ICpuZXh0OworICAgIGNoYXIgKm5hbWU7CisgICAgVG9rZW5CbG9jayAqaGVhZDsKKyAgICBUb2tl
bkJsb2NrICpjdXJyZW50OworfSBUb2tlblN0cmVhbTsKKworc3RydWN0IFRva2VuQmxvY2tfUmVj
IHsKKyAgICBUb2tlbkJsb2NrICpuZXh0OworICAgIGludCBjdXJyZW50OworICAgIGludCBjb3Vu
dDsKKyAgICBpbnQgbWF4OworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCitleHRlcm4g
VG9rZW5TdHJlYW0gc3RkbGliX2NwcF9zdHJlYW07CisKKworVG9rZW5TdHJlYW0gKk5ld1Rva2Vu
U3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wgKnBvb2wpOwordm9pZCBEZWxldGVU
b2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7IAordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0
cmVhbSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Cit2b2lkIFJld2lu
ZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsKK2ludCBSZWFkVG9rZW4oVG9rZW5TdHJl
YW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBSZWFkRnJvbVRva2VuU3RyZWFt
KFRva2VuU3RyZWFtICpwVG9rLCBpbnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSk7
Cit2b2lkIFVuZ2V0VG9rZW4oaW50LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNpZiBkZWZp
bmVkKENQUENfRU5BQkxFX1RPT0xTKQorCit2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICosIFRv
a2VuU3RyZWFtICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2VuZGlmIC8vIGRlZmluZWQo
Q1BQQ19FTkFCTEVfVE9PTFMpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChfX1RPS0VOU19IKQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24JKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFDQorCQkgICAgICAg
VmVyc2lvbiAyLCBKdW5lIDE5OTENCisNCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjc1
IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0ENCisgRXZlcnlvbmUgaXMgcGVybWl0
dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzDQorIG9mIHRoaXMgbGlj
ZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLg0KKw0KKwkJCSAg
ICBQcmVhbWJsZQ0KKw0KKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNp
Z25lZCB0byB0YWtlIGF3YXkgeW91cg0KK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4g
IEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorTGljZW5zZSBpcyBpbnRlbmRl
ZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQ0KK3Nv
ZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNl
cnMuICBUaGlzDQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhl
IEZyZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBw
cm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvDQordXNpbmcgaXQuICAoU29tZSBvdGhlciBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQ0KK3RoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBp
dCB0bw0KK3lvdXIgcHJvZ3JhbXMsIHRvby4NCisNCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBz
b2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QNCitwcmljZS4gIE91ciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91
DQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJl
IChhbmQgY2hhcmdlIGZvcg0KK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJl
Y2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdA0KK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlv
dSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0DQoraW4gbmV3IGZy
ZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLg0K
Kw0KKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9u
cyB0aGF0IGZvcmJpZA0KK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNr
IHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4NCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNs
YXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQ0KK2Rpc3RyaWJ1
dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4NCisNCisgIEZv
ciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdo
ZXRoZXINCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRz
IGFsbCB0aGUgcmlnaHRzIHRoYXQNCit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0
IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQ0KK3NvdXJjZSBjb2RlLiAgQW5kIHlv
dSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXINCityaWdodHMu
DQorDQorICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJp
Z2h0IHRoZSBzb2Z0d2FyZSwgYW5kDQorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2gg
Z2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwNCitkaXN0cmlidXRlIGFuZC9vciBt
b2RpZnkgdGhlIHNvZnR3YXJlLg0KKw0KKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVj
dGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4NCit0aGF0IGV2ZXJ5b25lIHVu
ZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQ0KK3NvZnR3
YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFz
c2VkIG9uLCB3ZQ0KK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBo
YXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvDQordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNl
ZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwNCithdXRob3JzJyBy
ZXB1dGF0aW9ucy4NCisNCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5l
ZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlDQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhl
IGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQ0KK3Byb2dyYW0gd2lsbCBpbmRp
dmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUNCitw
cm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xl
YXIgdGhhdCBhbnkNCitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVl
IHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLg0KKw0KKyAgVGhlIHByZWNpc2UgdGVybXMgYW5k
IGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQNCittb2RpZmljYXRpb24g
Zm9sbG93Lg0KKwwNCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KKyAgIFRFUk1T
IEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElP
Tg0KKw0KKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIg
d29yayB3aGljaCBjb250YWlucw0KK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhv
bGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkDQordW5kZXIgdGhlIHRlcm1zIG9mIHRo
aXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LA0KK3JlZmVy
cyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQ
cm9ncmFtIg0KK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3Jr
IHVuZGVyIGNvcHlyaWdodCBsYXc6DQordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5n
IHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwNCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0
aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcg0KK2xhbmd1YWdl
LiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRp
b24gaW4NCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJl
c3NlZCBhcyAieW91Ii4NCisNCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJp
YnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdA0KK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNl
OyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YNCitydW5uaW5nIHRoZSBQ
cm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFt
DQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNl
ZCBvbiB0aGUNCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1
bm5pbmcgdGhlIFByb2dyYW0pLg0KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hh
dCB0aGUgUHJvZ3JhbSBkb2VzLg0KKw0KKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRl
IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzDQorc291cmNlIGNvZGUgYXMgeW91IHJl
Y2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91DQorY29uc3BpY3VvdXNs
eSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQ0K
K2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0
IGFsbCB0aGUNCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUg
YWJzZW5jZSBvZiBhbnkgd2FycmFudHk7DQorYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMg
b2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQ0KK2Fsb25nIHdpdGggdGhlIFBy
b2dyYW0uDQorDQorWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2Yg
dHJhbnNmZXJyaW5nIGEgY29weSwgYW5kDQoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3
YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4NCisNCisgIDIuIFlvdSBt
YXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRp
b24NCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5k
IGNvcHkgYW5kDQorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0
aGUgdGVybXMgb2YgU2VjdGlvbiAxDQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVl
dCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCisNCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhl
IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQorICAgIHN0YXRpbmcg
dGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuDQor
DQorICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3Ig
cHVibGlzaCwgdGhhdCBpbg0KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRl
cml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkNCisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBs
aWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQNCisgICAgcGFydGll
cyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgICBjKSBJZiB0aGUgbW9k
aWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5DQorICAg
IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1
Y2gNCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJp
bnQgb3IgZGlzcGxheSBhbg0KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJp
YXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGENCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8g
d2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlDQorICAgIGEgd2FycmFu
dHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXINCisg
ICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBj
b3B5IG9mIHRoaXMNCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0
c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQNCisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3Vj
aCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbg0KKyAgICB0aGUgUHJvZ3JhbSBp
cyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikNCisMDQorVGhlc2UgcmVx
dWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZg0KK2lk
ZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhl
IFByb2dyYW0sDQorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQg
YW5kIHNlcGFyYXRlIHdvcmtzIGluDQordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFu
ZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQ0KK3NlY3Rpb25zIHdoZW4geW91IGRp
c3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQ0KK2Rpc3RyaWJ1
dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBi
YXNlZA0KK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0
IGJlIG9uIHRoZSB0ZXJtcyBvZg0KK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9y
IG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlDQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0
byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0Lg0KKw0KK1Ro
dXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMg
b3IgY29udGVzdA0KK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7
IHJhdGhlciwgdGhlIGludGVudCBpcyB0bw0KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9s
IHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcg0KK2NvbGxlY3RpdmUgd29ya3MgYmFz
ZWQgb24gdGhlIFByb2dyYW0uDQorDQorSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2Yg
YW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQ0KK3dpdGggdGhlIFByb2dyYW0g
KG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZg0KK2Eg
c3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3
b3JrIHVuZGVyDQordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4NCisNCisgIDMuIFlvdSBtYXkg
Y29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LA0K
K3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVy
IHRoZSB0ZXJtcyBvZg0KK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3Ug
YWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoNCisNCisgICAgYSkgQWNjb21wYW55IGl0IHdp
dGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQ0KKyAgICBzb3Vy
Y2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2Vj
dGlvbnMNCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZv
ciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGIpIEFjY29tcGFueSBpdCB3aXRo
IGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlDQorICAgIHllYXJzLCB0
byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyDQor
ICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEg
Y29tcGxldGUNCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5n
IHNvdXJjZSBjb2RlLCB0byBiZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2Yg
U2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQ0KKyAgICBjdXN0b21hcmlseSB1c2Vk
IGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGMpIEFjY29tcGFueSBpdCB3
aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyDQorICAgIHRv
IGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZl
IGlzDQorICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5k
IG9ubHkgaWYgeW91DQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9y
IGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gNCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRo
IFN1YnNlY3Rpb24gYiBhYm92ZS4pDQorDQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVh
bnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcg0KK21ha2luZyBtb2RpZmljYXRp
b25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlDQorY29k
ZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywg
cGx1cyBhbnkNCithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRo
ZSBzY3JpcHRzIHVzZWQgdG8NCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24g
b2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhDQorc3BlY2lhbCBleGNlcHRpb24sIHRo
ZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlDQorYW55dGhpbmcgdGhh
dCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkNCitm
b3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28g
b24pIG9mIHRoZQ0KK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVu
cywgdW5sZXNzIHRoYXQgY29tcG9uZW50DQoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRh
YmxlLg0KKw0KK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlz
IG1hZGUgYnkgb2ZmZXJpbmcNCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFj
ZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50DQorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBj
b2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzDQorZGlzdHJpYnV0aW9uIG9mIHRoZSBz
b3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90DQorY29tcGVsbGVk
IHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4NCisMDQorICA0
LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhl
IFByb2dyYW0NCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5z
ZS4gIEFueSBhdHRlbXB0DQorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBv
ciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzDQordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxs
eSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLg0KK0hvd2V2ZXIsIHBh
cnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVy
DQordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBz
byBsb25nIGFzIHN1Y2gNCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuDQorDQor
ICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5
b3UgaGF2ZSBub3QNCitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlv
dSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcg0KK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRz
IGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQ0KK3Byb2hpYml0ZWQgYnkgbGF3
IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkNCittb2Rp
Znlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0
aGUNCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vu
c2UgdG8gZG8gc28sIGFuZA0KK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlp
bmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcNCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNl
ZCBvbiBpdC4NCisNCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFt
IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUNCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRv
bWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQ0KK29yaWdpbmFsIGxpY2Vuc29y
IHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8NCit0
aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhl
cg0KK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0
cyBncmFudGVkIGhlcmVpbi4NCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5n
IGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bw0KK3RoaXMgTGljZW5zZS4NCisNCisgIDcu
IElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBv
ZiBwYXRlbnQNCitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1p
dGVkIHRvIHBhdGVudCBpc3N1ZXMpLA0KK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3
aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3INCitvdGhlcndpc2UpIHRoYXQgY29u
dHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90DQorZXhj
dXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5u
b3QNCitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxp
Z2F0aW9ucyB1bmRlciB0aGlzDQorTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxp
Z2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQ0KK21heSBub3QgZGlzdHJpYnV0ZSB0
aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQNCitsaWNlbnNlIHdv
dWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFt
IGJ5DQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5
IHRocm91Z2ggeW91LCB0aGVuDQordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGgg
aXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bw0KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBk
aXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uDQorDQorSWYgYW55IHBvcnRpb24gb2YgdGhpcyBz
ZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyDQorYW55IHBhcnRp
Y3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRl
ZCB0bw0KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFw
cGx5IGluIG90aGVyDQorY2lyY3Vtc3RhbmNlcy4NCisNCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ug
b2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55DQorcGF0ZW50cyBv
ciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBh
bnkNCitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHBy
b3RlY3RpbmcgdGhlDQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlv
biBzeXN0ZW0sIHdoaWNoIGlzDQoraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3Rp
Y2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlDQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0
aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZA0KK3Rocm91Z2ggdGhhdCBzeXN0
ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0DQorc3lzdGVt
OyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMg
d2lsbGluZw0KK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVt
IGFuZCBhIGxpY2Vuc2VlIGNhbm5vdA0KK2ltcG9zZSB0aGF0IGNob2ljZS4NCisNCitUaGlzIHNl
Y3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2
ZWQgdG8NCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4NCisM
DQorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMg
cmVzdHJpY3RlZCBpbg0KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5
IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQ0KK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIg
d2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UNCittYXkgYWRkIGFuIGV4
cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcNCit0
aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGlu
IG9yIGFtb25nDQorY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0
aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzDQordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBp
biB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuDQorDQorICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucw0KK29mIHRo
ZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVy
c2lvbnMgd2lsbA0KK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s
IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bw0KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNv
bmNlcm5zLg0KKw0KK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNp
b24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0NCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBv
ZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQ0KK2xhdGVyIHZlcnNp
b24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRp
dGlvbnMNCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3Jh
bSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YNCit0aGlzIExpY2Vuc2UsIHlv
dSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlDQorRm91bmRhdGlvbi4NCisNCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBw
YXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUNCitwcm9ncmFtcyB3aG9zZSBkaXN0
cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yDQor
dG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVk
IGJ5IHRoZSBGcmVlDQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzDQorbWFrZSBleGNlcHRpb25zIGZvciB0aGlz
LiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMNCitvZiBwcmVz
ZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29m
dHdhcmUgYW5kDQorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2Fy
ZSBnZW5lcmFsbHkuDQorDQorCQkJICAgIE5PIFdBUlJBTlRZDQorDQorICAxMS4gQkVDQVVTRSBU
SEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFO
VFkNCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FC
TEUgTEFXLiAgRVhDRVBUIFdIRU4NCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTDQorUFJPVklERSBUSEUgUFJPR1JB
TSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQN
CitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRg0KK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMNCitUTyBUSEUgUVVBTElUWSBBTkQgUEVS
Rk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFDQorUFJPR1JB
TSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBT
RVJWSUNJTkcsDQorUkVQQUlSIE9SIENPUlJFQ1RJT04uDQorDQorICAxMi4gSU4gTk8gRVZFTlQg
VU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5H
DQorV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkg
TU9ESUZZIEFORC9PUg0KK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJP
VkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsDQorSU5DTFVESU5HIEFOWSBHRU5FUkFM
LCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HDQor
T1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5H
IEJVVCBOT1QgTElNSVRFRA0KK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVE
IElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQ0KK1lPVSBPUiBUSElSRCBQQVJUSUVT
IE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSDQor
UFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFDQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLg0KKw0KKwkJICAgICBF
TkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCisMDQorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkg
VGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMNCisNCisgIElmIHlvdSBkZXZlbG9wIGEg
bmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QNCitwb3Nz
aWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0
byBtYWtlIGl0DQorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRl
IGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuDQorDQorICBUbyBkbyBzbywgYXR0YWNoIHRo
ZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdA0KK3RvIGF0
dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0
aXZlbHkNCitjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBz
aG91bGQgaGF2ZSBhdCBsZWFzdA0KK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIg
dG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLg0KKw0KKyAgICA8b25lIGxpbmUgdG8g
Z2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMu
Pg0KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4NCisNCisgICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUNCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4NCisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1
IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorDQorQWxzbyBhZGQgaW5mb3Jt
YXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwu
DQorDQorSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hv
cnQgbm90aWNlIGxpa2UgdGhpcw0KK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1v
ZGU6DQorDQorICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBu
YW1lIG9mIGF1dGhvcg0KKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8g
V0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuDQorICAgIFRoaXMgaXMgZnJlZSBz
b2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQNCisgICAgdW5k
ZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLg0KKw0KK1Ro
ZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93
IHRoZSBhcHByb3ByaWF0ZQ0KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAg
T2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkNCitiZSBjYWxsZWQgc29tZXRoaW5n
IG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUNCitt
b3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLg0K
Kw0KK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBw
cm9ncmFtbWVyKSBvciB5b3VyDQorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0
IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYNCituZWNlc3NhcnkuICBIZXJlIGlzIGEg
c2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6DQorDQorICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRp
c2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtDQorICBgR25vbW92
aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVz
IEhhY2tlci4NCisNCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQ0KKyAg
VHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UNCisNCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8NCitwcm9w
cmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFy
eSwgeW91IG1heQ0KK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHBy
b3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQ0KK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdo
YXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbA0KK1B1YmxpYyBM
aWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLg0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci90b29scy9DT1BZSU5HLmZsZXgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Rv
b2xzL0NPUFlJTkcuZmxleAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29s
cy9DT1BZSU5HLmZsZXgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKK0ZsZXggY2Fycmll
cyB0aGUgY29weXJpZ2h0IHVzZWQgZm9yIEJTRCBzb2Z0d2FyZSwgc2xpZ2h0bHkgbW9kaWZpZWQN
CitiZWNhdXNlIGl0IG9yaWdpbmF0ZWQgYXQgdGhlIExhd3JlbmNlIEJlcmtlbGV5IChub3QgTGl2
ZXJtb3JlISkgTGFib3JhdG9yeSwNCit3aGljaCBvcGVyYXRlcyB1bmRlciBhIGNvbnRyYWN0IHdp
dGggdGhlIERlcGFydG1lbnQgb2YgRW5lcmd5Og0KKw0KKwlDb3B5cmlnaHQgKGMpIDE5OTAgVGhl
IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisJQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCisNCisJVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmli
dXRlZCB0byBCZXJrZWxleSBieQ0KKwlWZXJuIFBheHNvbi4NCisNCisJVGhlIFVuaXRlZCBTdGF0
ZXMgR292ZXJubWVudCBoYXMgcmlnaHRzIGluIHRoaXMgd29yayBwdXJzdWFudA0KKwl0byBjb250
cmFjdCBuby4gREUtQUMwMy03NlNGMDAwOTggYmV0d2VlbiB0aGUgVW5pdGVkIFN0YXRlcw0KKwlE
ZXBhcnRtZW50IG9mIEVuZXJneSBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisN
CisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUg
cGVybWl0dGVkDQorCXByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgZGlzdHJpYnV0aW9ucyByZXRh
aW4gdGhpcyBlbnRpcmUNCisJY29weXJpZ2h0IG5vdGljZSBhbmQgY29tbWVudCwgYW5kICgyKSBk
aXN0cmlidXRpb25zIGluY2x1ZGluZw0KKwliaW5hcmllcyBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg
YWNrbm93bGVkZ2VtZW50OiAgYGBUaGlzIHByb2R1Y3QNCisJaW5jbHVkZXMgc29mdHdhcmUgZGV2
ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsDQorCUJlcmtlbGV5IGFuZCBp
dHMgY29udHJpYnV0b3JzJycgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXINCisJbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaW4gYWxsIGFkdmVydGlzaW5n
DQorCW1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJl
LiAgTmVpdGhlciB0aGUNCisJbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlDQorCXVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorCXdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBg
QVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUg0KKwlJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRA0KKwlXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSDQorCVBVUlBP
U0UuDQorDQorVGhpcyBiYXNpY2FsbHkgc2F5cyAiZG8gd2hhdGV2ZXIgeW91IHBsZWFzZSB3aXRo
IHRoaXMgc29mdHdhcmUgZXhjZXB0DQorcmVtb3ZlIHRoaXMgbm90aWNlIG9yIHRha2UgYWR2YW50
YWdlIG9mIHRoZSBVbml2ZXJzaXR5J3MgKG9yIHRoZSBmbGV4DQorYXV0aG9ycycpIG5hbWUiLg0K
Kw0KK05vdGUgdGhhdCB0aGUgImZsZXguc2tsIiBzY2FubmVyIHNrZWxldG9uIGNhcnJpZXMgbm8g
Y29weXJpZ2h0IG5vdGljZS4NCitZb3UgYXJlIGZyZWUgdG8gZG8gd2hhdGV2ZXIgeW91IHBsZWFz
ZSB3aXRoIHNjYW5uZXJzIGdlbmVyYXRlZCB1c2luZyBmbGV4Ow0KK2ZvciB0aGVtLCB5b3UgYXJl
IG5vdCBldmVuIGJvdW5kIGJ5IHRoZSBhYm92ZSBjb3B5cmlnaHQuDQpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL3Rvb2xzL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
dG9vbHMvUkVBRE1FCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL1JF
QURNRQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorVGhlIHN0YW5kYWxvbmUgQmlzb24g
YW5kIEZsZXggd2luMzIgZXhlY3V0YWJsZXMNCit3ZXJlIGNyZWF0ZWQgYnkgV2lsYnVyIFN0cmVl
dHQgYW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tOg0KK2h0dHA6Ly91c2VycGFnZXMubW9ubW91dGgu
Y29tL353c3RyZWV0dC9sZXgteWFjYy9sZXgteWFjYy5odG1sDQorDQorQmlzb24gdmVyc2lvbiAx
LjI0Og0KK1NlZSBDT1BZSU5HLmJpc29uIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLg0KK1RoZSBv
cmlnaW5hbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBiaXNvbiBjYW4gYmUgb2J0YWluZWQgZnJv
bSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOg0KK2h0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29k
ZS5jb20vZmlsZXMvYmlzb24uemlwDQorDQorRmxleCB2ZXJzaW9uIDIuNS4yDQorU2VlIENPUFlJ
TkcuZmxleCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCitUaGUgb3JpZ2luYWwgc291cmNlIGRp
c3RyaWJ1dGlvbiBmb3IgZmxleCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIGxv
Y2F0aW9uOg0KK2h0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5jb20vZmlsZXMvZmxleC56
aXANCisNCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uaGFpcnkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5CShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMzNCBAQAorCitleHRlcm4gaW50IHRpbWVjbG9jazsKKworCitpbnQgeXllcnJv
cjsJCS8qICBZeWVycm9yIGFuZCB5eWNvc3QgYXJlIHNldCBieSBndWFyZHMuCSovCitpbnQgeXlj
b3N0OwkJLyogIElmIHl5ZXJyb3IgaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSBieSBhCSovCisJ
CQkvKiAgZ3VhcmQsIHRoZSByZWR1Y3Rpb24gd2l0aCB3aGljaCB0aGUgZ3VhcmQJKi8KKwkJCS8q
ICBpcyBhc3NvY2lhdGVkIGlzIG5vdCBwZXJmb3JtZWQsIGFuZCB0aGUJKi8KKwkJCS8qICBlcnJv
ciByZWNvdmVyeSBtZWNoYW5pc20gaXMgaW52b2tlZC4JKi8KKwkJCS8qICBZeWNvc3QgaW5kaWNh
dGVzIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcJKi8KKwkJCS8qICB0aGUgcmVkdWN0aW9uIGdpdmVu
IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQkqLworCQkJLyogIHN5bWJvbHMuCQkJCQkqLworCisKKy8q
ICBZWU1BWERFUFRIIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhdGUgYW5k
IHZhbHVlCSovCisvKiAgc3RhY2tzLgkJCQkJCQkJKi8KKworI2lmbmRlZglZWU1BWERFUFRICisj
ZGVmaW5lCVlZTUFYREVQVEgJNTAwCisjZW5kaWYKKworLyogIFlZTUFYUlVMRVMgbXVzdCBiZSBh
dCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbnVtYmVyIG9mIHJ1bGVzIHRoYXQJKi8KKy8qICBjb3Vs
ZCBiZSBwbGFjZWQgaW4gdGhlIHJ1bGUgcXVldWUuICBUaGF0IG51bWJlciBjb3VsZCBiZSBkZXRl
cm1pbmVkCSovCisvKiAgZnJvbSB0aGUgZ3JhbW1hciBhbmQgdGhlIHNpemUgb2YgdGhlIHN0YWNr
LCBidXQsIGFzIHlldCwgaXQgaXMgbm90LgkqLworCisjaWZuZGVmCVlZTUFYUlVMRVMKKyNkZWZp
bmUJWVlNQVhSVUxFUwkxMDAKKyNlbmRpZgorCisjaWZuZGVmCVlZTUFYQkFDS1VQCisjZGVmaW5l
IFlZTUFYQkFDS1VQCTEwMAorI2VuZGlmCisKKworc2hvcnQJeXlzc1tZWU1BWERFUFRIXTsJLyog
IHRoZSBzdGF0ZSBzdGFjawkJCSovCitZWVNUWVBFCXl5dnNbWVlNQVhERVBUSF07CS8qICB0aGUg
c2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCitZWUxUWVBFIHl5bHNbWVlNQVhERVBUSF07CS8qICB0
aGUgbG9jYXRpb24gc3RhY2sJCQkqLworc2hvcnQJeXlycVtZWU1BWFJVTEVTXTsJLyogIHRoZSBy
dWxlIHF1ZXVlCQkJKi8KK2ludAl5eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3ltYm9sCQkq
LworCitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8K
KwkJCQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKK1lZU1RZUEUgeXl0dmFsOwkJCS8qICB0
aGUgc2VtYW50aWMgdmFsdWUgZm9yIHRoZSBzdGF0ZQkqLworCQkJCS8qICBhdCB0aGUgdG9wIG9m
IHRoZSBzdGF0ZSBzdGFjay4JKi8KKworWVlTVFlQRSB5eXZhbDsJCQkvKiAgdGhlIHZhcmlhYmxl
IHVzZWQgdG8gcmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0
aW9uCSovCisJCQkJLyogIHJvdXRpbmVzCQkJCSovCisKK1lZTFRZUEUgeXlsbG9jOwkJLyogIGxv
Y2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisK
K1lZTFRZUEUgeXl0bG9jOwkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBzdGF0ZSBhdCB0aGUJ
Ki8KKwkJCQkvKiAgdG9wIG9mIHRoZSBzdGF0ZSBzdGFjawkJKi8KKworCitpbnQJeXludW5sZXhl
ZDsKK3Nob3J0CXl5dW5jaGFyW1lZTUFYQkFDS1VQXTsKK1lZU1RZUEUJeXl1bnZhbFtZWU1BWEJB
Q0tVUF07CitZWUxUWVBFIHl5dW5sb2NbWVlNQVhCQUNLVVBdOworCitzaG9ydCAqeXlnc3NwOwkJ
CS8qICBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhdGUJKi8KKwkJCQkvKiAgc3RhY2s7
IG9ubHkgc2V0IGR1cmluZyBlcnJvcgkqLworCQkJCS8qICByZWNvdmVyeS4JCQkJKi8KKworWVlT
VFlQRSAqeXlndnNwOwkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSB2YWx1ZQkqLwor
CQkJCS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9yCSovCisJCQkJLyogIHJlY292ZXJ5
LgkJCQkqLworCitZWUxUWVBFICp5eWdsc3A7CQkvKiAgYSBwb2ludGVyIHRvIHRoZSB0b3Agb2Yg
dGhlCQkqLworCQkJCS8qICBsb2NhdGlvbiBzdGFjazsgb25seSBzZXQgZHVyaW5nCSovCisJCQkJ
LyogIGVycm9yIHJlY292ZXJ5LgkJCSovCisKKworLyogIFl5Z2V0IGlzIGFuIGludGVyZmFjZSBi
ZXR3ZWVuIHRoZSBwYXJzZXIgYW5kIHRoZSBsZXhpY2FsIGFuYWx5emVyLgkqLworLyogIEl0IGlz
IGNvc3RseSB0byBwcm92aWRlIHN1Y2ggYW4gaW50ZXJmYWNlLCBidXQgaXQgYXZvaWRzIHJlcXVp
cmluZwkqLworLyogIHRoZSBsZXhpY2FsIGFuYWx5emVyIHRvIGJlIGFibGUgdG8gYmFjayB1cCB0
aGUgc2Nhbi4JCSovCisKK3l5Z2V0KCkKK3sKKyAgaWYgKHl5bnVubGV4ZWQgPiAwKQorICAgIHsK
KyAgICAgIHl5bnVubGV4ZWQtLTsKKyAgICAgIHl5Y2hhciA9IHl5dW5jaGFyW3l5bnVubGV4ZWRd
OworICAgICAgeXlsdmFsID0geXl1bnZhbFt5eW51bmxleGVkXTsKKyAgICAgIHl5bGxvYyA9IHl5
dW5sb2NbeXludW5sZXhlZF07CisgICAgfQorICBlbHNlIGlmICh5eWNoYXIgPD0gMCkKKyAgICB5
eWNoYXIgPSAwOworICBlbHNlCisgICAgeworICAgICAgeXljaGFyID0geXlsZXgoKTsKKyAgICAg
IGlmICh5eWNoYXIgPCAwKQorCXl5Y2hhciA9IDA7CisgICAgICBlbHNlIHl5Y2hhciA9IFlZVFJB
TlNMQVRFKHl5Y2hhcik7CisgICAgfQorfQorCisKKworeXl1bmxleChjaHIsIHZhbCwgbG9jKQor
aW50IGNocjsKK1lZU1RZUEUgdmFsOworWVlMVFlQRSBsb2M7Cit7CisgIHl5dW5jaGFyW3l5bnVu
bGV4ZWRdID0gY2hyOworICB5eXVudmFsW3l5bnVubGV4ZWRdID0gdmFsOworICB5eXVubG9jW3l5
bnVubGV4ZWRdID0gbG9jOworICB5eW51bmxleGVkKys7Cit9CisKKworCit5eXJlc3RvcmUoZmly
c3QsIGxhc3QpCityZWdpc3RlciBzaG9ydCAqZmlyc3Q7CityZWdpc3RlciBzaG9ydCAqbGFzdDsK
K3sKKyAgcmVnaXN0ZXIgc2hvcnQgKnNzcDsKKyAgcmVnaXN0ZXIgc2hvcnQgKnJwOworICByZWdp
c3RlciBpbnQgc3ltYm9sOworICByZWdpc3RlciBpbnQgc3RhdGU7CisgIHJlZ2lzdGVyIGludCB0
dmFsc2F2ZWQ7CisKKyAgc3NwID0geXlnc3NwOworICB5eXVubGV4KHl5Y2hhciwgeXlsdmFsLCB5
eWxsb2MpOworCisgIHR2YWxzYXZlZCA9IDA7CisgIHdoaWxlIChmaXJzdCAhPSBsYXN0KQorICAg
IHsKKyAgICAgIHN5bWJvbCA9IHl5c3Rvc1sqc3NwXTsKKyAgICAgIGlmIChzeW1ib2wgPCBZWU5U
QkFTRSkKKwl7CisJICB5eXVubGV4KHN5bWJvbCwgeXl0dmFsLCB5eXRsb2MpOworCSAgdHZhbHNh
dmVkID0gMTsKKwkgIHNzcC0tOworCX0KKworICAgICAgc3NwLS07CisKKyAgICAgIGlmIChmaXJz
dCA9PSB5eXJxKQorCWZpcnN0ID0geXlycSArIFlZTUFYUlVMRVM7CisKKyAgICAgIGZpcnN0LS07
CisKKyAgICAgIGZvciAocnAgPSB5eXJocyArIHl5cHJoc1sqZmlyc3RdOyBzeW1ib2wgPSAqcnA7
IHJwKyspCisJeworCSAgaWYgKHN5bWJvbCA8IFlZTlRCQVNFKQorCSAgICBzdGF0ZSA9IHl5dGFi
bGVbeXlwYWN0Wypzc3BdICsgc3ltYm9sXTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHN0YXRl
ID0geXlwZ290b1tzeW1ib2wgLSBZWU5UQkFTRV0gKyAqc3NwOworCisJICAgICAgaWYgKHN0YXRl
ID49IDAgJiYgc3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbc3RhdGVdID09ICpzc3ApCisJCXN0
YXRlID0geXl0YWJsZVtzdGF0ZV07CisJICAgICAgZWxzZQorCQlzdGF0ZSA9IHl5ZGVmZ290b1tz
eW1ib2wgLSBZWU5UQkFTRV07CisJICAgIH0KKworCSAgKisrc3NwID0gc3RhdGU7CisJfQorICAg
IH0KKworICBpZiAoICEgdHZhbHNhdmVkICYmIHNzcCA+IHl5c3MpCisgICAgeworICAgICAgeXl1
bmxleCh5eXN0b3NbKnNzcF0sIHl5dHZhbCwgeXl0bG9jKTsKKyAgICAgIHNzcC0tOworICAgIH0K
KworICB5eWdzc3AgPSBzc3A7Cit9CisKKworCitpbnQKK3l5cGFyc2UoKQoreworICByZWdpc3Rl
ciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5
c3NwOworICByZWdpc3RlciBzaG9ydCAqeXlycTA7CisgIHJlZ2lzdGVyIHNob3J0ICp5eXB0cjsK
KyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisKKyAgaW50IHl5bGVuOworICBZWUxUWVBFICp5
eWxzcDsKKyAgc2hvcnQgKnl5cnExOworICBzaG9ydCAqeXlycTI7CisKKyAgeXlzdGF0ZSA9IDA7
CisgIHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2cyAtIDE7CisgIHl5bHNwID0geXls
cyAtIDE7CisgIHl5cnEwID0geXlycTsKKyAgeXlycTEgPSB5eXJxMDsKKyAgeXlycTIgPSB5eXJx
MDsKKworICB5eWNoYXIgPSB5eWxleCgpOworICBpZiAoeXljaGFyIDwgMCkKKyAgICB5eWNoYXIg
PSAwOworICBlbHNlIHl5Y2hhciA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKK3l5bmV3c3RhdGU6
CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyBZWU1BWERFUFRIIC0gMSkKKyAgICB7CisgICAgICB5
eWFib3J0KCJQYXJzZXIgU3RhY2sgT3ZlcmZsb3ciKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQor
CisgICorK3l5c3NwID0geXlzdGF0ZTsKKworeXlyZXN1bWU6CisKKyAgeXluID0geXlwYWN0W3l5
c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5
eW4gKz0geXljaGFyOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5
eW5dICE9IHl5Y2hhcikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5
bl07CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3Rv
IHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxh
YjsKKworICB5eXN0YXRlID0geXluOworCisgIHl5cHRyID0geXlycTI7CisgIHdoaWxlICh5eXB0
ciAhPSB5eXJxMSkKKyAgICB7CisgICAgICB5eW4gPSAqeXlwdHIrKzsKKyAgICAgIHl5bGVuID0g
eXlyMlt5eW5dOworICAgICAgeXl2c3AgLT0geXlsZW47CisgICAgICB5eWxzcCAtPSB5eWxlbjsK
KworICAgICAgeXlndWFyZCh5eW4sIHl5dnNwLCB5eWxzcCk7CisgICAgICBpZiAoeXllcnJvcikK
Kwlnb3RvIHl5c2VtZXJyOworCisgICAgICB5eWFjdGlvbih5eW4sIHl5dnNwLCB5eWxzcCk7Cisg
ICAgICAqKyt5eXZzcCA9IHl5dmFsOworCisgICAgICB5eWxzcCsrOworICAgICAgaWYgKHl5bGVu
ID09IDApCisJeworCSAgeXlsc3AtPnRpbWVzdGFtcCA9IHRpbWVjbG9jazsKKwkgIHl5bHNwLT5m
aXJzdF9saW5lID0geXl0bG9jLmZpcnN0X2xpbmU7CisJICB5eWxzcC0+Zmlyc3RfY29sdW1uID0g
eXl0bG9jLmZpcnN0X2NvbHVtbjsKKwkgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxh
c3RfbGluZTsKKwkgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47
CisJICB5eWxzcC0+dGV4dCA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5bHNwLT5sYXN0
X2xpbmUgPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfbGluZTsKKwkgIHl5bHNwLT5sYXN0X2NvbHVt
biA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9jb2x1bW47CisJfQorCSAgCisgICAgICBpZiAoeXlw
dHIgPT0geXlycSArIFlZTUFYUlVMRVMpCisgICAgICAgIHl5cHRyID0geXlycTsKKyAgICB9CisK
KyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICB5eXJxMiA9IHl5
cHRyOworICB5eXJxMSA9IHl5cnEwOworCisgICorK3l5dnNwID0geXl0dmFsOworICAqKyt5eWxz
cCA9IHl5dGxvYzsKKyAgeXl0dmFsID0geXlsdmFsOworICB5eXRsb2MgPSB5eWxsb2M7CisgIHl5
Z2V0KCk7CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWRlZmF1bHQ6CisKKyAgeXluID0geXlk
ZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCit5
eXJlZHVjZToKKworICAqeXlycTArKyA9IHl5bjsKKworICBpZiAoeXlycTAgPT0geXlycSArIFlZ
TUFYUlVMRVMpCisgICAgeXlycTAgPSB5eXJxOworCisgIGlmICh5eXJxMCA9PSB5eXJxMikKKyAg
ICB7CisgICAgICB5eWFib3J0KCJQYXJzZXIgUnVsZSBRdWV1ZSBPdmVyZmxvdyIpOworICAgICAg
WVlBQk9SVDsKKyAgICB9CisKKyAgeXlzc3AgLT0geXlyMlt5eW5dOworICB5eW4gPSB5eXIxW3l5
bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBp
ZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0g
PT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAg
eXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRl
OworCit5eXNlbWVycjoKKyAgKi0teXlwdHIgPSB5eW47CisgIHl5cnEyID0geXlwdHI7CisgIHl5
dnNwICs9IHl5cjJbeXluXTsKKworeXllcnJsYWI6CisKKyAgeXlnc3NwID0geXlzc3A7CisgIHl5
Z3ZzcCA9IHl5dnNwOworICB5eWdsc3AgPSB5eWxzcDsKKyAgeXlyZXN0b3JlKHl5cnEwLCB5eXJx
Mik7CisgIHl5cmVjb3ZlcigpOworICB5eXN0YXRlID0gKnl5Z3NzcDsKKyAgeXlzc3AgPSB5eWdz
c3A7CisgIHl5dnNwID0geXlndnNwOworICB5eXJxMCA9IHl5cnE7CisgIHl5cnExID0geXlycTA7
CisgIHl5cnEyID0geXlycTA7CisgIGdvdG8geXlyZXN1bWU7Cit9CisKKyQKSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGUKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci90b29scy9iaXNvbi5zaW1wbGUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjk5IEBA
CisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAj
bGluZScgbGluZXMuICAqLworCisvKiBTa2VsZXRvbiBvdXRwdXQgcGFyc2VyIGZvciBiaXNvbiwK
KyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p
CisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRn
ZSwgTUEgMDIxMzksIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4g
dGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxl
LCB5b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBU
aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworCisjaWZkZWYgX19HTlVD
X18KKyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBfX0dOVUNf
XyAqLworI2lmIEhBVkVfQUxMT0NBX0gKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbHNlIC8qIG5v
dCBIQVZFX0FMTE9DQV9IICovCisjaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAv
KiBub3QgX0FJWCAqLworY2hhciAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5vdCBfQUlYICovCisj
ZW5kaWYgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8KKyNlbmRpZiAvKiBub3QgX19HTlVDX18gKi8K
KworZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKiBzKTsKKworI2lmbmRlZiBhbGxvY2EKKyNpZmRl
ZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90
IEdOVSBDLiAgKi8KKyNpZiAoIWRlZmluZWQgKF9fU1REQ19fKSAmJiBkZWZpbmVkIChzcGFyYykp
IHx8IGRlZmluZWQgKF9fc3BhcmNfXykgfHwgZGVmaW5lZCAoX19zcGFyYykgfHwgZGVmaW5lZCAo
X19zZ2kpCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3Qgc3BhcmMgKi8KKyNpZiAo
ZGVmaW5lZCAoTVNET1MpICYmICFkZWZpbmVkIChfX1RVUkJPQ19fKSkgfHwgZGVmaW5lZCAoV0lO
MzIpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9D
X18gKi8KKyNpZiBkZWZpbmVkKF9BSVgpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisgI3ByYWdtYSBh
bGxvY2EKKyNlbHNlIC8qIG5vdCBNU0RPUywgX19UVVJCT0NfXywgb3IgX0FJWCAqLworI2lmZGVm
IF9faHB1eAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK3ZvaWQgKmFsbG9jYSAo
dW5zaWduZWQgaW50KTsKK307CisjZWxzZSAvKiBub3QgX19jcGx1c3BsdXMgKi8KK3ZvaWQgKmFs
bG9jYSAoKTsKKyNlbmRpZiAvKiBub3QgX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX2hwdXgg
Ki8KKyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJC
T0NfXyAqLworI2VuZGlmIC8qIG5vdCBzcGFyYy4gICovCisjZW5kaWYgLyogbm90IEdOVSBDLiAg
Ki8KKyNlbmRpZiAvKiBhbGxvY2Egbm90IGRlZmluZWQuICAqLworCisvKiBUaGlzIGlzIHRoZSBw
YXJzZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50byBlYWNoIGJpc29uIHBhcnNlcgorICB3aGVu
IHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhl
IGdyYW1tYXIuCisgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxp
ZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorICB1c2VkIHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBz
cGVjaWZpZWQuICAqLworCisvKiBOb3RlOiB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGRvbGxhciBz
aWduIGluIHRoaXMgZmlsZS4KKyAgIEl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBsaXN0IG9mIGFjdGlv
bnMsIGVhY2ggYWN0aW9uCisgICBhcyBvbmUgY2FzZSBvZiB0aGUgc3dpdGNoLiAgKi8KKworI2Rl
ZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hh
ciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVm
aW5lIFlZQUNDRVBUCXJldHVybigwKQorI2RlZmluZSBZWUFCT1JUIAlyZXR1cm4oMSkKKyNkZWZp
bmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2Fs
bCB5eWVycm9yLgorICAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkgdG8gZWFzZSB0aGUK
KyAgIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisg
ICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBn
by4gICovCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2RlZmluZSBZWVJFQ09WRVJJ
TkcoKSAgKCEheXllcnJzdGF0dXMpCisjZGVmaW5lIFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAor
ZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwK
KyAgICB7IHl5Y2hhciA9ICh0b2tlbiksIHl5bHZhbCA9ICh2YWx1ZSk7CQkJXAorICAgICAgeXlj
aGFyMSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLOwkJCQkJ
CVwKKyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJ
CQkJCQkJXAorICAgIHsgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsg
WVlFUlJPUjsgfQlcCit3aGlsZSAoMCkKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZ
RVJSQ09ERQkyNTYKKworI2lmbmRlZiBZWVBVUkUKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKyNl
bmRpZgorCisjaWZkZWYgWVlQVVJFCisjaWZkZWYgWVlMU1BfTkVFREVECisjaWZkZWYgWVlMRVhf
UEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFN
KQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYK
KyNlbHNlIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmlu
ZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxF
WAkJeXlsZXgoJnl5bHZhbCkKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8K
KyNlbmRpZgorCisvKiBJZiBub25yZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVy
ZSAqLworCisjaWZuZGVmIFlZUFVSRQorCitpbnQJeXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFk
IHN5bWJvbAkJKi8KK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2Yg
dGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KKworI2lmZGVmIFlZTFNQX05F
RURFRAorWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhl
YWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisjZW5kaWYKKworaW50IHl5bmVycnM7CQkJLyog
IG51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyICAgICAgICovCisjZW5kaWYgIC8qIG5vdCBZ
WVBVUkUgKi8KKworI2lmIFlZREVCVUcgIT0gMAoraW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8g
bWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KKy8qIFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXpl
ZCwgaXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBwYXJzZXJzCisgICBmcm9tIGNvZXhpc3Rpbmcu
ICAqLworI2VuZGlmCisKKy8qICBZWUlOSVRERVBUSCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6
ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCisKKyNpZm5kZWYJWVlJTklUREVQVEgKKyNkZWZp
bmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogIFlZTUFYREVQVEggaXMgdGhlIG1heGlt
dW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvCisgICAgKGVmZmVjdGl2ZSBvbmx5IGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLiAgKi8KKworI2lmIFlZ
TUFYREVQVEggPT0gMAorI3VuZGVmIFlZTUFYREVQVEgKKyNlbmRpZgorCisjaWZuZGVmIFlZTUFY
REVQVEgKKyNkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKy8qIFByZXZlbnQgd2Fy
bmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworaW50IHl5
cGFyc2UgKHZvaWQpOworI2VuZGlmCisMCisjaWYgX19HTlVDX18gPiAxCQkvKiBHTlUgQyBhbmQg
R05VIEMrKyBkZWZpbmUgdGhpcy4gICovCisjZGVmaW5lIF9feXlfbWVtY3B5KEZST00sVE8sQ09V
TlQpCV9fYnVpbHRpbl9tZW1jcHkoVE8sRlJPTSxDT1VOVCkKKyNlbHNlCQkJCS8qIG5vdCBHTlUg
QyBvciBDKysgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKworLyogVGhpcyBpcyB0aGUgbW9zdCBy
ZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBi
dWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitf
X3l5X21lbWNweSAoZnJvbSwgdG8sIGNvdW50KQorICAgICBjaGFyICpmcm9tOworICAgICBjaGFy
ICp0bzsKKyAgICAgc2l6ZV90IGNvdW50OworeworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsK
KyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBzaXplX3QgaSA9IGNvdW50Owor
CisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZWxzZSAvKiBfX2Nw
bHVzcGx1cyAqLworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBp
bmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2
YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChjaGFyICpmcm9t
LCBjaGFyICp0bywgc2l6ZV90IGNvdW50KQoreworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsK
KyAgcmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBzaXplX3QgaSA9IGNvdW50Owor
CisgIHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZW5kaWYKKyNlbmRp
ZgorCisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2Yg
YW4gYXJndW1lbnQgdG8gYmUgcGFzc2VkCisgICBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQg
c2hvdWxkIGhhdmUgdHlwZSB2b2lkICouCisgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8g
YW4gb2JqZWN0LgorICAgR3JhbW1hciBhY3Rpb25zIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5
IGNhc3RpbmcgaXQKKyAgIHRvIHRoZSBwcm9wZXIgcG9pbnRlciB0eXBlLiAgKi8KKworI2lmZGVm
IFlZUEFSU0VfUEFSQU0KKyNpZm5kZWYgWVlQQVJTRV9QQVJBTV9ERUNMCisjZGVmaW5lIFlZUEFS
U0VfUEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmIAorI2Vsc2UKKyNkZWZp
bmUgWVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNlbmRpZgorCitl
eHRlcm4gWVlfREVDTDsKKworaW50Cit5eXBhcnNlKFlZUEFSU0VfUEFSQU1fREVDTCBZWVBBUlNF
X1BBUkFNKSB7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQgeXluOwor
ICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworICBp
bnQgeXllcnJzdGF0dXM7CS8qICBudW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJv
ciBtZXNzYWdlcyBlbmFibGVkICovCisgIGludCB5eWNoYXIxID0gMDsJCS8qICBsb29rYWhlYWQg
dG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlciAqLworCisgIHNo
b3J0CXl5c3NhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzdGF0ZSBzdGFjawkJCSovCisgIFlZU1RZ
UEUgeXl2c2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLwor
CisgIHNob3J0ICp5eXNzID0geXlzc2E7CQkvKiAgcmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNl
cGFyYXRlIHBvaW50ZXJzICovCisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsJLyogIHRvIGFsbG93
IHl5b3ZlcmZsb3cgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZSAqLworCisjaWZkZWYgWVlM
U1BfTkVFREVECisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9u
IHN0YWNrCQkJKi8KKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworICBZWUxUWVBFICp5eWxzcDsK
KworI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0sIHl5bHNwLS0pCisjZWxz
ZQorI2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBz
aXplX3QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworI2lmZGVmIFlZUFVSRQorICBpbnQg
eXljaGFyOworICBZWVNUWVBFIHl5bHZhbDsKKyAgaW50IHl5bmVycnM7CisjaWZkZWYgWVlMU1Bf
TkVFREVECisgIFlZTFRZUEUgeXlsbG9jOworI2VuZGlmCisjZW5kaWYKKworICBZWVNUWVBFIHl5
dmFsOwkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8KKwkJCQkvKiAgc2VtYW50
aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0aW5lcwkJCQkqLworCisg
IGludCB5eWxlbjsKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKTsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSAw
OworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZ
OwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0
YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRp
b24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhl
IHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFs
aXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3AgPSB5eXZzOworI2lmZGVm
IFlZTFNQX05FRURFRAorICB5eWxzcCA9IHl5bHM7CisjZW5kaWYKKworLyogUHVzaCBhIG5ldyBz
dGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3RhdGUgIC4gICovCisvKiBJbiBhbGwgY2FzZXMs
IHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgaGF2
ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3Rh
Y2tzLiAgKi8KK3l5bmV3c3RhdGU6CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5
eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdpdmUgdXNl
ciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjayAqLworICAgICAgLyogVXNlIGNvcGll
cyBvZiB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRv
IG1lbW9yeS4gKi8KKyAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKKyAgICAgIHNob3J0ICp5
eXNzMSA9IHl5c3M7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICBZWUxUWVBFICp5eWxzMSA9
IHl5bHM7CisjZW5kaWYKKworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0
aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBzaXplX3Qgc2l6ZSA9IHl5
c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICAvKiBFYWNoIHN0YWNr
IHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZgorCSB0aGUgZGF0YSBp
biB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICAqLworI2lmZGVmIFlZTFNQX05FRURFRAor
ICAgICAgLyogVGhpcyB1c2VkIHRvIGJlIGEgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3
byBleHRyYSBhcmdzLAorCSBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxv
dyBpcyBhIG1hY3JvLiAgKi8KKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxv
dyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUg
KiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlsczEsIHNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJ
CSAmeXlzdGFja3NpemUpOworI2Vsc2UKKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBv
dmVyZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEs
IHNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAg
ICAgIHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAg
ICAgeXlscyA9IHl5bHMxOworI2VuZGlmCisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisgICAg
ICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNr
c2l6ZSA+PSBZWU1BWERFUFRIKQorCXsKKwkgIHl5ZXJyb3IoInBhcnNlciBzdGFjayBvdmVyZmxv
dyIpOworCSAgcmV0dXJuIDI7CisJfQorICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlm
ICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwor
ICAgICAgeXlzcyA9IChzaG9ydCAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlz
c3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5c3MxLCAoY2hhciAqKXl5c3MsIHNp
emUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgeXl2cyA9IChZWVNUWVBFICopIGFsbG9jYSAo
eXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFy
ICopeXl2czEsIChjaGFyICopeXl2cywgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisjaWZkZWYg
WVlMU1BfTkVFREVECisgICAgICB5eWxzID0gKFlZTFRZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKnl5bHNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eWxzMSwg
KGNoYXIgKil5eWxzLCBzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyNlbmRpZgorI2VuZGlmIC8q
IG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgc2l6ZSAtIDE7CisgICAg
ICB5eXZzcCA9IHl5dnMgKyBzaXplIC0gMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5
bHNwID0geXlscyArIHNpemUgLSAxOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAg
IGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8g
JWRcbiIsIHl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyAr
IHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworI2lmIFlZREVCVUcgIT0gMAor
ICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4i
LCB5eXN0YXRlKTsKKyNlbmRpZgorCisgIGdvdG8geXliYWNrdXA7CisgeXliYWNrdXA6CisKKy8q
IERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLwor
LyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFk
eSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVj
aWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8K
KworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdv
dG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4g
aWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZ
WUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4g
ICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyNpZiBZWURFQlVHICE9IDAK
KyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAi
KTsKKyNlbmRpZgorICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQg
dG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3
aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQu
ICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8q
IERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICAgICAg
aWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7
CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xB
VEUoeXljaGFyKTsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJewor
CSAgZnByaW50ZiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLCB5eWNoYXIsIHl5dG5h
bWVbeXljaGFyMV0pOworCSAgLyogR2l2ZSB0aGUgaW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8g
cHJpbnQgdGhlIHByZWNpc2UgbWVhbmluZworCSAgICAgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIg
ZGVidWdnaW5nIGluZm8uICAqLworI2lmZGVmIFlZUFJJTlQKKwkgIFlZUFJJTlQgKHN0ZGVyciwg
eXljaGFyLCB5eWx2YWwpOworI2VuZGlmCisJICBmcHJpbnRmIChzdGRlcnIsICIpXG4iKTsKKwl9
CisjZW5kaWYKKyAgICB9CisKKyAgeXluICs9IHl5Y2hhcjE7CisgIGlmICh5eW4gPCAwIHx8IHl5
biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyMSkKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisKKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9y
IHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorICAgICBOZWdhdGl2ZSA9PiByZWR1Y2Us
IC15eW4gaXMgcnVsZSBudW1iZXIuCisgICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3
IHN0YXRlLgorICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIg
dG8gc2hpZnQsCisgICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KKyAgICAgMCwgb3IgbW9zdCBu
ZWdhdGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLworCisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAg
ICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXlu
OworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAg
IGdvdG8geXllcnJsYWI7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOwor
CisgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworCisjaWYgWVlERUJVRyAhPSAw
CisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQg
KCVzKSwgIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgIC8qIERpc2Nh
cmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5
eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICAqKyt5eXZzcCA9IHl5
bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYK
KworICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1
cm4gb2ZmIGVycm9yIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMt
LTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKy8qIERvIHRoZSBk
ZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICAqLworeXlkZWZhdWx0OgorCisg
IHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVy
cmxhYjsKKworLyogRG8gYSByZWR1Y3Rpb24uICB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUg
dG8gcmVkdWNlIHdpdGguICAqLworeXlyZWR1Y2U6CisgIHl5bGVuID0geXlyMlt5eW5dOworICBp
ZiAoeXlsZW4gPiAwKQorICAgIHl5dmFsID0geXl2c3BbMS15eWxlbl07IC8qIGltcGxlbWVudCBk
ZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb24gKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAo
eXlkZWJ1ZykKKyAgICB7CisgICAgICBpbnQgaTsKKworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
UmVkdWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQpLCAiLAorCSAgICAgICB5eW4sIHl5cmxpbmVb
eXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0
aGVpciByZXN1bHQuICAqLworICAgICAgZm9yIChpID0geXlwcmhzW3l5bl07IHl5cmhzW2ldID4g
MDsgaSsrKQorCWZwcmludGYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWVbeXlyaHNbaV1dKTsKKyAg
ICAgIGZwcmludGYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAg
ICB9CisjZW5kaWYKKworJCAgIC8qIHRoZSBhY3Rpb24gZmlsZSBnZXRzIGNvcGllZCBpbiBpbiBw
bGFjZSBvZiB0aGlzIGRvbGxhcnNpZ24gKi8KKyAgeXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09
IHl5bGVuOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCAtPSB5eWxlbjsKKyNlbmRpZgor
CisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpz
c3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ci
KTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIs
ICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYK
KworICAqKyt5eXZzcCA9IHl5dmFsOworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwKys7
CisgIGlmICh5eWxlbiA9PSAwKQorICAgIHsKKyAgICAgIHl5bHNwLT5maXJzdF9saW5lID0geXls
bG9jLmZpcnN0X2xpbmU7CisgICAgICB5eWxzcC0+Zmlyc3RfY29sdW1uID0geXlsbG9jLmZpcnN0
X2NvbHVtbjsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxhc3RfbGluZTsK
KyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47CisgICAg
ICB5eWxzcC0+dGV4dCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXlsc3AtPmxh
c3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3Rf
Y29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVtbjsKKyAgICB9CisjZW5kaWYKKwor
ICAvKiBOb3cgInNoaWZ0IiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uCisgICAgIERldGVy
bWluZSB3aGF0IHN0YXRlIHRoYXQgZ29lcyB0bywKKyAgICAgYmFzZWQgb24gdGhlIHN0YXRlIHdl
IHBvcHBlZCBiYWNrIHRvCisgICAgIGFuZCB0aGUgcnVsZSBudW1iZXIgcmVkdWNlZCBieS4gICov
CisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRC
QVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAm
JiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0
YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOwor
CisgIGdvdG8geXluZXdzdGF0ZTsKKworeXllcnJsYWI6ICAgLyogaGVyZSBvbiBkZXRlY3Rpbmcg
ZXJyb3IgKi8KKworICBpZiAoISB5eWVycnN0YXR1cykKKyAgICAvKiBJZiBub3QgYWxyZWFkeSBy
ZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgICB7Cisg
ICAgICArK3l5bmVycnM7CisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKworICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1Qp
CisJeworCSAgaW50IHNpemUgPSAwOworCSAgY2hhciAqbXNnOworCSAgaW50IHgsIGNvdW50Owor
CisJICBjb3VudCA9IDA7CisJICAvKiBTdGFydCBYIGF0IC15eW4gaWYgbmVjIHRvIGF2b2lkIG5l
Z2F0aXZlIGluZGV4ZXMgaW4geXljaGVjay4gICovCisJICBmb3IgKHggPSAoeXluIDwgMCA/IC15
eW4gOiAwKTsKKwkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7
IHgrKykKKwkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkgICAgICBzaXplICs9IHN0
cmxlbih5eXRuYW1lW3hdKSArIDE1LCBjb3VudCsrOworCSAgbXNnID0gKGNoYXIgKikgbWFsbG9j
KHNpemUgKyAxNSk7CisJICBpZiAobXNnICE9IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkobXNn
LCAicGFyc2UgZXJyb3IiKTsKKworCSAgICAgIGlmIChjb3VudCA8IDUpCisJCXsKKwkJICBjb3Vu
dCA9IDA7CisJCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJCSAgICAgICB4IDwg
KHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCQkgICAgaWYgKHl5Y2hl
Y2tbeCArIHl5bl0gPT0geCkKKwkJICAgICAgeworCQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/
ICIsIGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOworCQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7
CisJCQlzdHJjYXQobXNnLCAiJyIpOworCQkJY291bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAg
ICAgeXllcnJvcihtc2cpOworCSAgICAgIGZyZWUobXNnKTsKKwkgICAgfQorCSAgZWxzZQorCSAg
ICB5eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhjZWVkZWQiKTsK
Kwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisJeXllcnJvcigi
cGFyc2UgZXJyb3IiKTsKKyAgICB9CisKKyAgZ290byB5eWVycmxhYjE7Cit5eWVycmxhYjE6ICAg
LyogaGVyZSBvbiBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gKi8KKworICBp
ZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBpZiBqdXN0IHRyaWVkIGFuZCBm
YWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KKworICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisg
ICAgICBpZiAoeXljaGFyID09IFlZRU9GKQorCVlZQUJPUlQ7CisKKyNpZiBZWURFQlVHICE9IDAK
KyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAl
ZCAoJXMpLlxuIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgICAgICB5
eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbgorICAgICBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLwor
CisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVu
dHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKK3l5ZXJyZGVmYXVsdDogIC8qIGN1
cnJlbnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRv
a2VuLiAqLworCisjaWYgMAorICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4
cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKyAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLwor
ICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2Vw
dCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4qLworICBpZiAoeXluKSBnb3RvIHl5
ZGVmYXVsdDsKKyNlbmRpZgorCit5eWVycnBvcDogICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUg
YmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbiAqLworCisgIGlmICh5eXNz
cCA9PSB5eXNzKSBZWUFCT1JUOworICB5eXZzcC0tOworICB5eXN0YXRlID0gKi0teXlzc3A7Cisj
aWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwLS07CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0g
MAorICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOwor
ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworICAgICAg
d2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7
CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCit5eWVycmhh
bmRsZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQor
ICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biArPSBZWVRFUlJPUjsKKyAgaWYgKHl5biA8
IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKKyAgICBnb3Rv
IHl5ZXJyZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQor
ICAgIHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJwb3A7CisgICAgICB5
eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9
PSAwKQorICAgIGdvdG8geXllcnJwb3A7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZ
QUNDRVBUOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYo
c3RkZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpOworI2VuZGlmCisKKyAgKisreXl2c3Ag
PSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2Vu
ZGlmCisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworfQpJbmRleDogQU5H
TEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wv
Q29uZmlnLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENv
bmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRo
ZSBmb3JtYXQsIHR5cGUKKy8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVu
dHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCisvLyBbRUdMIDEuNF0gc2Vj
dGlvbiAzLjQgcGFnZSAxNS4KKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKworI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIGVnbAoreworQ29uZmln
OjpDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwg
RUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCisgICAgOiBtRGlzcGxh
eU1vZGUoZGlzcGxheU1vZGUpLCBtUmVuZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCksIG1EZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxl
KG11bHRpU2FtcGxlKQoreworICAgIHNldChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heElu
dGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1w
bGUpOworfQorCit2b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQoreworICAgIG1CdWZmZXJTaXpl
ID0gMDsKKyAgICBtUmVkU2l6ZSA9IDA7CisgICAgbUdyZWVuU2l6ZSA9IDA7CisgICAgbUJsdWVT
aXplID0gMDsKKyAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7CisgICAgbUFscGhhU2l6ZSA9IDA7Cisg
ICAgbUFscGhhTWFza1NpemUgPSAwOworICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db2xv
ckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RP
TlRfQ0FSRTsKKyAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db25mb3JtYW50
ID0gMDsKKyAgICBtRGVwdGhTaXplID0gMDsKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5h
dGl2ZVBpeG1hcCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1N
YXhQQnVmZmVySGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1h
eFN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IEVH
TF9ET05UX0NBUkU7CisgICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOworICAg
IG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9D
QVJFOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOworICAgIG1TYW1w
bGVCdWZmZXJzID0gMDsKKyAgICBtU2FtcGxlcyA9IDA7CisgICAgbVN0ZW5jaWxTaXplID0gMDsK
KyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKKyAgICBtVHJhbnNwYXJlbnRUeXBl
ID0gRUdMX05PTkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOwor
ICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFuc3Bh
cmVudEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Cit9CisKK3ZvaWQgQ29uZmlnOjpzZXQoRDNE
RElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgc3dpdGNoIChyZW5kZXJUYXJn
ZXRGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIG1C
dWZmZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6
ZSA9IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBt
QnVmZmVyU2l6ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDEwOworICAgICAgICBtR3JlZW5T
aXplID0gMTA7CisgICAgICAgIG1CbHVlU2l6ZSA9IDEwOworICAgICAgICBtQWxwaGFTaXplID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAg
bUJ1ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSA4OworICAgICAgICBtR3JlZW5T
aXplID0gODsKKyAgICAgICAgbUJsdWVTaXplID0gODsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDg7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBtQnVm
ZmVyU2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUg
PSA2OworICAgICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgbUJ1ZmZl
clNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0g
NTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIG1CdWZmZXJT
aXplID0gMzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDg7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3Ro
ZXIgZm9ybWF0cyBzaG91bGQgbm90IGJlIHZhbGlkCisgICAgfQorCisgICAgbUx1bWluYW5jZVNp
emUgPSAwOworICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9
IEVHTF9GQUxTRTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7CisgICAgbUNv
bG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIG1Db25maWdDYXZlYXQgPSAoZGlz
cGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9T
TE9XX0NPTkZJRzsKKyAgICBtQ29uZmlnSUQgPSAwOworICAgIG1Db25mb3JtYW50ID0gRUdMX09Q
RU5HTF9FUzJfQklUOworCisgICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCisgICAgewor
Ly8gICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMTY7
CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
M0RGTVRfRDMyOgorICAgICAgICBtRGVwdGhTaXplID0gMzI7CisgICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAg
IG1EZXB0aFNpemUgPSAxNTsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0Owor
ICAgICAgICBtU3RlbmNpbFNpemUgPSA4OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg4OgorICAgICAgICBtRGVwdGhTaXplID0gMjQ7CisgICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAg
ICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSA0OworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDE2Owor
ICAgICAgICBtU3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRDNE
Rk1UX0QzMkZfTE9DS0FCTEU6CisvLyAgICAgIG1EZXB0aFNpemUgPSAzMjsKKy8vICAgICAgbVN0
ZW5jaWxTaXplID0gMDsKKy8vICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6
CisvLyAgICAgIG1EZXB0aFNpemUgPSAyNDsKKy8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKKy8v
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIG1MZXZlbCA9IDA7CisgICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7
CisgICAgbU1heFBCdWZmZXJXaWR0aCA9IDA7CisgICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwor
ICAgIG1NYXhQQnVmZmVyUGl4ZWxzID0gMDsKKyAgICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50
ZXJ2YWw7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIG1OYXRpdmVS
ZW5kZXJhYmxlID0gRUdMX0ZBTFNFOworICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5h
dGl2ZVZpc3VhbFR5cGUgPSAwOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMy
X0JJVDsKKyAgICBtU2FtcGxlQnVmZmVycyA9IG11bHRpU2FtcGxlID8gMSA6IDA7CisgICAgbVNh
bXBsZXMgPSBtdWx0aVNhbXBsZTsKKyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQg
fCBFR0xfV0lORE9XX0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7CisgICAg
bVRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0g
MDsKKyAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gMDsKKyAgICBtVHJhbnNwYXJlbnRCbHVl
VmFsdWUgPSAwOworfQorCitFR0xDb25maWcgQ29uZmlnOjpnZXRIYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiAoRUdMQ29uZmlnKShzaXplX3QpbUNvbmZpZ0lEOworfQorCitTb3J0Q29uZmln
OjpTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKKyAgICA6IG1XYW50UmVkKGZh
bHNlKSwgbVdhbnRHcmVlbihmYWxzZSksIG1XYW50Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFs
c2UpLCBtV2FudEx1bWluYW5jZShmYWxzZSkKK3sKKyAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50
cyhhdHRyaWJMaXN0KTsKK30KKwordm9pZCBTb3J0Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9u
ZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCit7CisgICAgLy8gW0VHTF0gc2VjdGlvbiAz
LjQuMSBwYWdlIDI0CisgICAgLy8gU29ydGluZyBydWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVt
YmVyIG9mIGNvbG9yIGJpdHMsIG5vdCBjb25zaWRlcmluZworICAgIC8vIGNvbXBvbmVudHMgdGhh
dCBhcmUgMCBvciBkb24ndC1jYXJlLgorICAgIGZvciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0
cmliTGlzdDsgYXR0clswXSAhPSBFR0xfTk9ORTsgYXR0ciArPSAyKQorICAgIHsKKyAgICAgICAg
aWYgKGF0dHJbMV0gIT0gMCAmJiBhdHRyWzFdICE9IEVHTF9ET05UX0NBUkUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoYXR0clswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgIG1XYW50UmVkID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50
QWxwaGEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJ
WkU6IG1XYW50THVtaW5hbmNlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0VHTGludCBTb3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShj
b25zdCBDb25maWcgJmNvbmZpZykgY29uc3QKK3sKKyAgICBFR0xpbnQgdG90YWwgPSAwOworCisg
ICAgaWYgKG1XYW50UmVkKSAgICAgICB0b3RhbCArPSBjb25maWcubVJlZFNpemU7CisgICAgaWYg
KG1XYW50R3JlZW4pICAgICB0b3RhbCArPSBjb25maWcubUdyZWVuU2l6ZTsKKyAgICBpZiAobVdh
bnRCbHVlKSAgICAgIHRvdGFsICs9IGNvbmZpZy5tQmx1ZVNpemU7CisgICAgaWYgKG1XYW50QWxw
aGEpICAgICB0b3RhbCArPSBjb25maWcubUFscGhhU2l6ZTsKKyAgICBpZiAobVdhbnRMdW1pbmFu
Y2UpIHRvdGFsICs9IGNvbmZpZy5tTHVtaW5hbmNlU2l6ZTsKKworICAgIHJldHVybiB0b3RhbDsK
K30KKworYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3Qg
Q29uZmlnICp5KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMpKCp4LCAqeSk7Cit9CisKK2Jv
b2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAm
eSkgY29uc3QKK3sKKyAgICAjZGVmaW5lIFNPUlQoYXR0cmlidXRlKSAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKHguYXR0cmlidXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAg
ICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHJldHVybiB4LmF0dHJpYnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwK
KyAgICAgICAgfQorCisgICAgTUVUQV9BU1NFUlQoRUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcg
JiYgRUdMX1NMT1dfQ09ORklHIDwgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRyk7CisgICAgU09S
VChtQ29uZmlnQ2F2ZWF0KTsKKworICAgIE1FVEFfQVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdM
X0xVTUlOQU5DRV9CVUZGRVIpOworICAgIFNPUlQobUNvbG9yQnVmZmVyVHlwZSk7CisKKyAgICAv
LyBCeSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcg
dGhvc2UgdGhhdCBhcmUgcmVxdWVzdGVkIHRvIGJlID4gMC4KKyAgICBFR0xpbnQgeENvbXBvbmVu
dHNTaXplID0gd2FudGVkQ29tcG9uZW50c1NpemUoeCk7CisgICAgRUdMaW50IHlDb21wb25lbnRz
U2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHkpOworICAgIGlmICh4Q29tcG9uZW50c1NpemUg
IT0geUNvbXBvbmVudHNTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6
ZSA+IHlDb21wb25lbnRzU2l6ZTsKKyAgICB9CisKKyAgICBTT1JUKG1CdWZmZXJTaXplKTsKKyAg
ICBTT1JUKG1TYW1wbGVCdWZmZXJzKTsKKyAgICBTT1JUKG1TYW1wbGVzKTsKKyAgICBTT1JUKG1E
ZXB0aFNpemUpOworICAgIFNPUlQobVN0ZW5jaWxTaXplKTsKKyAgICBTT1JUKG1BbHBoYU1hc2tT
aXplKTsKKyAgICBTT1JUKG1OYXRpdmVWaXN1YWxUeXBlKTsKKyAgICBTT1JUKG1Db25maWdJRCk7
CisKKyAgICAjdW5kZWYgU09SVAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBXZSdkIGxp
a2UgdG8gdXNlIFNvcnRDb25maWcgdG8gYWxzbyBlbGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3Mu
CisvLyBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2UgbmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRo
IGRpZmZlcmVudCBwZXItUkdCLWNvbXBvbmVudCBsYXlvdXRzLAorLy8gYnV0IHRoZSBzYW1lIHRv
dGFsLgorLy8gNTU1MSBhbmQgNTY1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZm
ZXJlbnQuCisvLyA1NTUxIGFuZCA1NTUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUg
aXMgZGlmZmVyZW50LgorY29uc3QgRUdMaW50IENvbmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQor
eworICAgIEVHTF9SRURfU0laRSwgMSwKKyAgICBFR0xfR1JFRU5fU0laRSwgMSwKKyAgICBFR0xf
QkxVRV9TSVpFLCAxLAorICAgIEVHTF9MVU1JTkFOQ0VfU0laRSwgMSwKKyAgICAvLyBCVVQgTk9U
IEFMUEhBCisgICAgRUdMX05PTkUKK307CisKK0NvbmZpZ1NldDo6Q29uZmlnU2V0KCkKKyAgICA6
IG1TZXQoU29ydENvbmZpZyhtU29ydEF0dHJpYnMpKQoreworfQorCit2b2lkIENvbmZpZ1NldDo6
YWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBF
R0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RG
T1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgQ29u
ZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWws
IHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSk7CisK
KyAgICBtU2V0Lmluc2VydChjb25maWcpOworfQorCitzaXplX3QgQ29uZmlnU2V0OjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVNldC5zaXplKCk7Cit9CisKK2Jvb2wgQ29uZmlnU2V0Ojpn
ZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBF
R0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgdmVjdG9yPGNvbnN0
IENvbmZpZyo+IHBhc3NlZDsKKyAgICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7CisKKyAg
ICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5k
KCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAg
IGNvbnN0IEVHTGludCAqYXR0cmlidXRlID0gYXR0cmliTGlzdDsKKworICAgICAgICB3aGlsZSAo
YXR0cmlidXRlWzBdICE9IEVHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KGF0dHJpYnV0ZVswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQlVG
RkVSX1NJWkU6ICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFT
aXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUJsdWVTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1HcmVlblNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpF
OiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
U1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29u
ZmlnQ2F2ZWF0ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1MZXZlbCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxF
OiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVf
VklTVUFMX1RZUEU6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49
IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
U2FtcGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9
IChjb25maWctPm1TdXJmYWNlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JM
VUVfVkFMVUU6ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFO
U1BBUkVOVF9HUkVFTl9WQUxVRTogICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5W
YWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3Bh
cmVudFJlZFZhbHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmln
LT5tQmluZFRvVGV4dHVyZVJHQiA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRj
aCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0JBID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lO
VEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9M
VU1JTkFOQ0VfU0laRTogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUg
Pj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBo
YU1hc2tTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tQ29sb3JCdWZmZXJUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBt
YXRjaCA9IChjb25maWctPm1SZW5kZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmli
dXRlWzFdOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1B
UDogICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1B
TlQ6ICAgICAgICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1
dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhc3NlZC5wdXNo
X2JhY2soJipjb25maWcpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3MpCisg
ICAgeworICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25m
aWcoYXR0cmliTGlzdCkpOworCisgICAgICAgIEVHTGludCBpbmRleDsKKyAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGlu
dD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZp
Z3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAg
ICAgICAqbnVtQ29uZmlnID0gaW5kZXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
ICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitjb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hh
bmRsZSkKK3sKKyAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmln
ICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZy0+Z2V0
SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
JigqY29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorfQpJ
bmRleDogQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliRUdML0NvbmZpZy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IENvbmZpZy5oOiBEZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUg
Zm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRz
IEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNlY3Rp
b24gMy40IHBhZ2UgMTUuCisKKyNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8KKyNkZWZpbmUgSU5D
TFVERV9DT05GSUdfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+Cisj
aW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKKworY2xhc3Mg
Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1v
ZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZP
Uk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVH
TGludCBtdWx0aVNhbXBsZSk7CisKKyAgICB2b2lkIHNldERlZmF1bHRzKCk7CisgICAgdm9pZCBz
ZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVH
TGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZP
Uk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7CisgICAgRUdMQ29u
ZmlnIGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgY29uc3QgRDNERElTUExBWU1PREUgbURpc3Bs
YXlNb2RlOworICAgIGNvbnN0IEQzREZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgIGNv
bnN0IEQzREZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIGNvbnN0IEVHTGludCBtTXVs
dGlTYW1wbGU7CisKKyAgICBFR0xpbnQgbUJ1ZmZlclNpemU7ICAgICAgICAgICAgICAvLyBEZXB0
aCBvZiB0aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1SZWRTaXplOyAgICAgICAgICAgICAg
ICAgLy8gQml0cyBvZiBSZWQgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtR3JlZW5T
aXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgR3JlZW4gaW4gdGhlIGNvbG9yIGJ1ZmZlcgor
ICAgIEVHTGludCBtQmx1ZVNpemU7ICAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQmx1ZSBpbiB0
aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1MdW1pbmFuY2VTaXplOyAgICAgICAgICAgLy8g
Qml0cyBvZiBMdW1pbmFuY2UgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtQWxwaGFT
aXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgaW4gdGhlIGNvbG9yIGJ1ZmZlcgor
ICAgIEVHTGludCBtQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgTWFz
ayBpbiB0aGUgbWFzayBidWZmZXIKKyAgICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCOyAg
ICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQiB0ZXh0dXJlcy4KKyAgICBFR0xCb29sZWFuIG1C
aW5kVG9UZXh0dXJlUkdCQTsgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQkEgdGV4dHVyZXMu
CisgICAgRUdMZW51bSBtQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgLy8gQ29sb3IgYnVmZmVyIHR5
cGUKKyAgICBFR0xlbnVtIG1Db25maWdDYXZlYXQ7ICAgICAgICAgICAvLyBBbnkgY2F2ZWF0cyBm
b3IgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICBFR0xpbnQgbUNvbmZpZ0lEOyAgICAgICAgICAgICAg
ICAvLyBVbmlxdWUgRUdMQ29uZmlnIGlkZW50aWZpZXIKKyAgICBFR0xpbnQgbUNvbmZvcm1hbnQ7
ICAgICAgICAgICAgICAvLyBXaGV0aGVyIGNvbnRleHRzIGNyZWF0ZWQgd2l0aCB0aGlzIGNvbmZp
ZyBhcmUgY29uZm9ybWFudAorICAgIEVHTGludCBtRGVwdGhTaXplOyAgICAgICAgICAgICAgIC8v
IEJpdHMgb2YgWiBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgRUdMaW50IG1MZXZlbDsgICAgICAg
ICAgICAgICAgICAgLy8gRnJhbWUgYnVmZmVyIGxldmVsCisgICAgRUdMQm9vbGVhbiBtTWF0Y2hO
YXRpdmVQaXhtYXA7ICAgLy8gTWF0Y2ggdGhlIG5hdGl2ZSBwaXhtYXAgZm9ybWF0CisgICAgRUdM
aW50IG1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICAgLy8gTWF4aW11bSB3aWR0aCBvZiBwYnVmZmVy
CisgICAgRUdMaW50IG1NYXhQQnVmZmVySGVpZ2h0OyAgICAgICAgLy8gTWF4aW11bSBoZWlnaHQg
b2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlclBpeGVsczsgICAgICAgIC8vIE1heGlt
dW0gc2l6ZSBvZiBwYnVmZmVyCisgICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICAg
Ly8gTWF4aW11bSBzd2FwIGludGVydmFsCisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7ICAg
ICAgICAgLy8gTWluaW11bSBzd2FwIGludGVydmFsCisgICAgRUdMQm9vbGVhbiBtTmF0aXZlUmVu
ZGVyYWJsZTsgICAgLy8gRUdMX1RSVUUgaWYgbmF0aXZlIHJlbmRlcmluZyBBUElzIGNhbiByZW5k
ZXIgdG8gc3VyZmFjZQorICAgIEVHTGludCBtTmF0aXZlVmlzdWFsSUQ7ICAgICAgICAgIC8vIEhh
bmRsZSBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB2aXN1YWwKKyAgICBFR0xpbnQgbU5hdGl2ZVZp
c3VhbFR5cGU7ICAgICAgICAvLyBOYXRpdmUgdmlzdWFsIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQg
dmlzdWFsCisgICAgRUdMaW50IG1SZW5kZXJhYmxlVHlwZTsgICAgICAgICAgLy8gV2hpY2ggY2xp
ZW50IHJlbmRlcmluZyBBUElzIGFyZSBzdXBwb3J0ZWQuCisgICAgRUdMaW50IG1TYW1wbGVCdWZm
ZXJzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIG11bHRpc2FtcGxlIGJ1ZmZlcnMKKyAgICBFR0xp
bnQgbVNhbXBsZXM7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgcGl4
ZWwKKyAgICBFR0xpbnQgbVN0ZW5jaWxTaXplOyAgICAgICAgICAgICAvLyBCaXRzIG9mIFN0ZW5j
aWwgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgRUdMaW50IG1TdXJmYWNlVHlwZTsgICAgICAg
ICAgICAgLy8gV2hpY2ggdHlwZXMgb2YgRUdMIHN1cmZhY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAg
RUdMZW51bSBtVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgLy8gVHlwZSBvZiB0cmFuc3BhcmVuY3kg
c3VwcG9ydGVkCisgICAgRUdMaW50IG1UcmFuc3BhcmVudFJlZFZhbHVlOyAgICAgLy8gVHJhbnNw
YXJlbnQgcmVkIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEdyZWVuVmFsdWU7ICAgLy8g
VHJhbnNwYXJlbnQgZ3JlZW4gdmFsdWUKKyAgICBFR0xpbnQgbVRyYW5zcGFyZW50Qmx1ZVZhbHVl
OyAgICAvLyBUcmFuc3BhcmVudCBibHVlIHZhbHVlCit9OworCisvLyBGdW5jdGlvbiBvYmplY3Qg
dXNlZCBieSBTVEwgc29ydGluZyByb3V0aW5lcyBmb3Igb3JkZXJpbmcgQ29uZmlncyBhY2NvcmRp
bmcgdG8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0LgorY2xhc3MgU29ydENvbmZpZworewor
ICBwdWJsaWM6CisgICAgZXhwbGljaXQgU29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxp
c3QpOworCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmln
ICp5KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBD
b25maWcgJnkpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgdm9pZCBzY2FuRm9yV2FudGVkQ29t
cG9uZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOworICAgIEVHTGludCB3YW50ZWRDb21w
b25lbnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29uc3Q7CisKKyAgICBib29sIG1XYW50
UmVkOworICAgIGJvb2wgbVdhbnRHcmVlbjsKKyAgICBib29sIG1XYW50Qmx1ZTsKKyAgICBib29s
IG1XYW50QWxwaGE7CisgICAgYm9vbCBtV2FudEx1bWluYW5jZTsKK307CisKK2NsYXNzIENvbmZp
Z1NldAoreworICAgIGZyaWVuZCBEaXNwbGF5OworCisgIHB1YmxpYzoKKyAgICBDb25maWdTZXQo
KTsKKworICAgIHZvaWQgYWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWlu
U3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1w
bGUpOworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBnZXRDb25maWdzKEVHTENv
bmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6
ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdMQ29u
ZmlnIGNvbmZpZ0hhbmRsZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oQ29uZmlnU2V0KTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0Q29u
ZmlnPiBTZXQ7CisgICAgdHlwZWRlZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIFNldCBt
U2V0OworCisgICAgc3RhdGljIGNvbnN0IEVHTGludCBtU29ydEF0dHJpYnNbXTsKK307Cit9CisK
KyNlbmRpZiAgIC8vIElOQ0xVREVfQ09ORklHX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRGlzcGxheS5jcHA6IElt
cGxlbWVudHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFj
dAorLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdM
RGlzcGxheS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFp
bi5oIgorCisjZGVmaW5lIFJFRl9SQVNUIDAgICAvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRl
ZmluaW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MK
KworbmFtZXNwYWNlIGVnbAoreworRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkg
OiBtRGMoZGV2aWNlQ29udGV4dCkKK3sKKyAgICBtRDNkOSA9IE5VTEw7CisgICAgbURldmljZSA9
IE5VTEw7CisKKyAgICBtQWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVMVDsKKworICAgICNpZiBS
RUZfUkFTVCA9PSAxIHx8IGRlZmluZWQoRk9SQ0VfUkVGX1JBU1QpCisgICAgICAgIG1EZXZpY2VU
eXBlID0gRDNEREVWVFlQRV9SRUY7CisgICAgI2Vsc2UKKyAgICAgICAgbURldmljZVR5cGUgPSBE
M0RERVZUWVBFX0hBTDsKKyAgICAjZW5kaWYKKworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSAxOwor
ICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAxOworICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKK30KKwor
RGlzcGxheTo6fkRpc3BsYXkoKQoreworICAgIHRlcm1pbmF0ZSgpOworfQorCitib29sIERpc3Bs
YXk6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShE
M0RfU0RLX1ZFUlNJT04pOworCisgICAgaWYgKG1EM2Q5KQorICAgIHsKKyAgICAgICAgaWYgKG1E
YyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBj
b3JyZXNwb25kcyB0bworICAgICAgICB9CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNk
OS0+R2V0RGV2aWNlQ2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7CisK
KyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGV2aWNlQ2Fw
cy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUQzZDkgPSBOVUxMOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbU1pblN3YXBJ
bnRlcnZhbCA9IDQ7CisgICAgICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKKworICAgICAg
ICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfSU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2Fw
SW50ZXJ2YWwsIDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZh
bCwgMCk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFs
cyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgo
bU1heFN3YXBJbnRlcnZhbCwgMSk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNl
bnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKSAgICAgICB7bU1pblN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVy
dmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7fQorICAgICAgICAgICAgaWYgKG1E
ZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUUpICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMp
OyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQorICAg
ICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNF
TlRfSU5URVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5T
d2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRl
cnZhbCwgNCk7fQorCisgICAgICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9y
bWF0c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGTVRfQTFSNUc1QjUs
CisgICAgICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1w
IGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVz
aW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisg
ICAgICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgICAgIEQzREZNVF9S
NUc2QjUsCisgICAgICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgICAg
IEQzREZNVF9YOFI4RzhCOAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgRDNE
Rk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDMyLAor
ICAgICAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDI0
UzgsCisgICAgICAgICAgICAgICAgRDNERk1UX0QyNFg4LAorICAgICAgICAgICAgLy8gIEQzREZN
VF9EMjRYNFM0LAorICAgICAgICAgICAgICAgIEQzREZNVF9EMTYsCisgICAgICAgICAgICAvLyAg
RDNERk1UX0QzMkZfTE9DS0FCTEUsCisgICAgICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlN
b2RlOworICAgICAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwg
JmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAgICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7
CisKKyAgICAgICAgICAgIGZvciAoaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBz
aXplb2YocmVuZGVyVGFyZ2V0Rm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVu
Y2lsSW5kZXggPCBzaXplb2YoZGVwdGhTdGVuY2lsRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFU
KTsgZGVwdGhTdGVuY2lsSW5kZXgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNp
bEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQz
RFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQoY3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcElu
dGVydmFsLCBtTWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNp
bEZvcm1hdCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBh
IHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5CisgICAgICAgICAgICBFR0xpbnQg
aW5kZXggPSAxOworICAgICAgICAgICAgZm9yIChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9
IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsg
Y29uZmlnKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3Vy
YXRpb24gPSAqY29uZmlnOworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lE
ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgIG1D
b25maWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICB7CisgICAgICAg
IHRlcm1pbmF0ZSgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBEaXNwbGF5Ojp0ZXJtaW5hdGUoKQoreworICAgIGZvciAoU3Vy
ZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2Ug
IT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSAq
c3VyZmFjZTsKKyAgICB9CisKKyAgICBmb3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9yIGNvbnRleHQg
PSBtQ29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjb250
ZXh0KyspCisgICAgeworICAgICAgICBnbERlc3Ryb3lDb250ZXh0KCpjb250ZXh0KTsKKyAgICB9
CisKKyAgICBpZiAobURldmljZSkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgbURldmljZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EM2Q5KQorICAgIHsK
KyAgICAgICAgbUQzZDktPlJlbGVhc2UoKTsKKyAgICAgICAgbUQzZDkgPSBOVUxMOworICAgIH0K
K30KKwordm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0YXJ0
ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgbVNjZW5lU3RhcnRl
ZCA9IHRydWU7CisgICAgfQorfQorCit2b2lkIERpc3BsYXk6OmVuZFNjZW5lKCkKK3sKKyAgICBp
ZiAobVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURldmljZS0+
RW5kU2NlbmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAg
bVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgIH0KK30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25m
aWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQg
Y29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgcmV0dXJuIG1Db25maWdTZXQu
Z2V0Q29uZmlncyhjb25maWdzLCBhdHRyaWJMaXN0LCBjb25maWdTaXplLCBudW1Db25maWcpOwor
fQorCitib29sIERpc3BsYXk6OmdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xp
bnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKworICAgIHN3aXRjaCAoYXR0
cmlidXRlKQorICAgIHsKKyAgICAgIGNhc2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CdWZmZXJTaXplOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1BbHBoYVNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X0JMVUVfU0laRTogICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CbHVl
U2l6ZTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1HcmVlblNpemU7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZWRTaXplOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0RFUFRIX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1EZXB0aFNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NU
RU5DSUxfU0laRTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdGVuY2ls
U2l6ZTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAg
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25maWdDYXZlYXQ7ICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDogICAgICAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25maWdJRDsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1MZXZlbDsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElW
RV9SRU5ERVJBQkxFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVSZW5k
ZXJhYmxlOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTog
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1TYW1wbGVzOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1TYW1wbGVCdWZmZXJzOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NVUkZBQ0Vf
VFlQRTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZTsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFR5cGU7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudEJsdWVWYWx1ZTsgICBicmVhazsKKyAgICAgIGNhc2Ug
RUdMX1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVFOiAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1U
cmFuc3BhcmVudEdyZWVuVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5U
X1JFRF9WQUxVRTogICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFJlZFZh
bHVlOyAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCOyAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBOiAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X01JTl9TV0FQX0lOVEVSVkFMOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NaW5T
d2FwSW50ZXJ2YWw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVS
VkFMOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NYXhTd2FwSW50ZXJ2YWw7ICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiAgICAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1MdW1pbmFuY2VTaXplOyAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1BbHBoYU1hc2tTaXplOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NP
TE9SX0JVRkZFUl9UWVBFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db2xvckJ1
ZmZlclR5cGU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTog
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJhYmxlVHlwZTsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgICp2YWx1
ZSA9IGZhbHNlOyBVTklNUExFTUVOVEVEKCk7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1Db25mb3JtYW50OyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3VyZmFj
ZSAqRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNv
bmZpZykKK3sKKyAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0Lmdl
dChjb25maWcpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OworCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9
IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
Rm9ybWF0ID0gY29uZmlndXJhdGlvbi0+bVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJIZWlnaHQgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0
aFN0ZW5jaWwgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplID8gVFJVRSA6IEZBTFNFOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2
aWNlV2luZG93ID0gd2luZG93OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVh
bGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAg
IC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0
aW9uSW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfQ09QWTsKKyAgICBwcmVz
ZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7ICAgLy8gRklYTUUKKworICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAg
ICAgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RD
UkVBVEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFn
cyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVE
RVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworCisgICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWds
OjpTdXJmYWNlKilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZSht
QWRhcHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9T
T0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsK
KworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICBtU2NlbmVTdGFy
dGVkID0gZmFsc2U7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBD
aGFpbik7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0
aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBpZiAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFj
ZXMvd2luZG93cyBjdXJyZW50bHkgaW4gdXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICAg
ICAgLy8gYSBzZXBhcmF0ZSBzd2FwIGNoYWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KKyAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBD
aGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOworCisgICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICAgICAgLy8gQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlIGEgZGVwdGhzdGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKKyAgICAgICAg
ICAgIC8vIENyZWF0ZURldmljZSwgc28gd2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgorICAgICAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQ
YXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVR
dWFsaXR5LCBGQUxTRSwgJmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworCisgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3YXBDaGFpbi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5j
aWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW4uIE91dCBvZiBtZW1vcnkuIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYg
dGhlIGRldmljZSBhbHJlYWR5IGV4aXN0cywgYnV0IHRoZXJlIGFyZSBubyBzdXJmYWNlcyBpbiB1
c2UsIHRoZW4gYWxsIHRoZSBzdXJmYWNlcy93aW5kb3dzCisgICAgICAgICAgICAvLyBoYXZlIGJl
ZW4gZGVzdHJveWVkLCBhbmQgd2Ugc2hvdWxkIHJlcHVycG9zZSB0aGUgb3JpZ2luYWxseSBjcmVh
dGVkIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvcgorICAgICAgICAgICAgLy8gdXNlIHdpdGggdGhl
IG5ldyBzdXJmYWNlIHdlIGFyZSBjcmVhdGluZy4KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXNl
dCBwcmVzZW50YXRpb24gcGFyYW1ldGVycyBmb3IgZGV2aWNlLiBPdXQgb2YgbWVtb3J5LiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNl
KilOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1EZXZpY2UpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPkdldFN3YXBDaGFpbigwLCAmc3dhcENoYWluKTsKKyAgICAgICAgICAgICAgICBtRGV2aWNl
LT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBOVUxMOwor
CisgICAgaWYgKHN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFj
ZSh0aGlzLCBzd2FwQ2hhaW4sIGRlcHRoU3RlbmNpbFN1cmZhY2UsIGNvbmZpZ3VyYXRpb24pOwor
ICAgICAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7CisKKyAgICAgICAgc3dhcENoYWlu
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK0VHTENvbnRl
eHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQoreworICAg
IGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcgPSBtQ29uZmlnU2V0LmdldChjb25maWdIYW5kbGUp
OworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY29uZmlnKTsK
KyAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CisKKyAgICByZXR1cm4gY29udGV4dDsK
K30KKwordm9pZCBEaXNwbGF5OjpkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
Cit7CisgICAgZGVsZXRlIHN1cmZhY2U7CisgICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7
Cit9CisKK3ZvaWQgRGlzcGxheTo6ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQp
Cit7CisgICAgZ2xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICBtQ29udGV4dFNldC5lcmFz
ZShjb250ZXh0KTsKK30KKworYm9vbCBEaXNwbGF5Ojppc0luaXRpYWxpemVkKCkKK3sKKyAgICBy
ZXR1cm4gbUQzZDkgIT0gTlVMTCAmJiBtQ29uZmlnU2V0LnNpemUoKSA+IDA7Cit9CisKK2Jvb2wg
RGlzcGxheTo6aXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKQoreworICAgIHJldHVybiBt
Q29uZmlnU2V0LmdldChjb25maWcpICE9IE5VTEw7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxp
ZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIG1Db250ZXh0U2V0
LmZpbmQoY29udGV4dCkgIT0gbUNvbnRleHRTZXQuZW5kKCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6
aXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIHJldHVybiBtU3Vy
ZmFjZVNldC5maW5kKHN1cmZhY2UpICE9IG1TdXJmYWNlU2V0LmVuZCgpOworfQorCitib29sIERp
c3BsYXk6Omhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdykKK3sKKyAgICBmb3Ig
KFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJm
YWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBpZiAo
KCpzdXJmYWNlKS0+Z2V0V2luZG93SGFuZGxlKCkgPT0gd2luZG93KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBEaXNwbGF5OjpzZXRTd2FwSW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCit7
CisgICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOworICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtU3dhcEludGVydmFsLCBtTWluU3dhcEludGVydmFsKTsKKyAgICBtU3dhcEludGVydmFs
ID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCk7CisKKyAgICBtUHJl
c2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOworfQorCitEV09S
RCBEaXNwbGF5OjpnZXRQcmVzZW50SW50ZXJ2YWwoKQoreworICAgIHJldHVybiBtUHJlc2VudElu
dGVydmFsOworfQorCitEV09SRCBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwoR0xpbnQgaW50ZXJ2
YWwpCit7CisgICAgc3dpdGNoKGludGVydmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUU7CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0RFRkFVTFQ7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERl
dmljZSgpCit7CisgICAgcmV0dXJuIG1EZXZpY2U7Cit9CisKK0QzRENBUFM5IERpc3BsYXk6Omdl
dERldmljZUNhcHMoKQoreworICAgIHJldHVybiBtRGV2aWNlQ2FwczsKK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3Bs
YXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFi
c3RyYWN0CisvLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50
cyBFR0xEaXNwbGF5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgorCisjaWZu
ZGVmIElOQ0xVREVfRElTUExBWV9IXworI2RlZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KKworI2lm
bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNl
bmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRl
IDxzZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGli
RUdML0NvbmZpZy5oIgorI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCisKK25hbWVzcGFjZSBl
Z2wKK3sKK2NsYXNzIERpc3BsYXkKK3sKKyAgcHVibGljOgorICAgIERpc3BsYXkoSERDIGRldmlj
ZUNvbnRleHQpOworCisgICAgfkRpc3BsYXkoKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwor
ICAgIHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY2VuZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRTY2VuZSgpOworCisgICAgYm9vbCBnZXRDb25maWdzKEVHTENv
bmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6
ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZp
ZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCisgICAgZWdsOjpT
dXJmYWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmln
KTsKKyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7
CisKKyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisgICAg
dm9pZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisKKyAgICBib29sIGlz
SW5pdGlhbGl6ZWQoKTsKKyAgICBib29sIGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZyk7
CisgICAgYm9vbCBpc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9v
bCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIGJvb2wgaGFzRXhp
c3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKKworICAgIHZvaWQgc2V0U3dhcEludGVy
dmFsKEdMaW50IGludGVydmFsKTsKKyAgICBEV09SRCBnZXRQcmVzZW50SW50ZXJ2YWwoKTsKKyAg
ICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGludGVydmFsKTsKKworICAgIHZp
cnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7CisgICAgdmlydHVhbCBEM0RDQVBT
OSBnZXREZXZpY2VDYXBzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRGlzcGxheSk7CisgICAgY29uc3QgSERDIG1EYzsKKworICAgIFVJTlQgbUFkYXB0ZXI7
CisgICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBJRGlyZWN0M0Q5ICptRDNkOTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOwor
CisgICAgYm9vbCBtU2NlbmVTdGFydGVkOworICAgIEdMaW50IG1Td2FwSW50ZXJ2YWw7CisgICAg
RUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7CisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7Cisg
ICAgRFdPUkQgbVByZXNlbnRJbnRlcnZhbDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFj
ZSo+IFN1cmZhY2VTZXQ7CisgICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKKworICAgIENvbmZp
Z1NldCBtQ29uZmlnU2V0OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENv
bnRleHRTZXQ7CisgICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKK307Cit9CisKKyNlbmRpZiAg
IC8vIElOQ0xVREVfRElTUExBWV9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzMDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRz
IHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQor
Ly8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFj
ayBidWZmZXJzLgorLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCisKKyNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJF
R0wvbWFpbi5oIgorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKK25hbWVzcGFjZSBlZ2wK
K3sKK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dhcENoYWlu
OSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsLCBjb25zdCBDb25m
aWcgKmNvbmZpZykgCisgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVN3YXBDaGFpbihzd2FwQ2hh
aW4pLCBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCksIG1Db25maWcoY29uZmlnKQoreworICAg
IG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRmxp
cFRleHR1cmUgPSBOVUxMOworICAgIG1GbGlwU3RhdGUgPSBOVUxMOworICAgIG1QcmVGbGlwU3Rh
dGUgPSBOVUxMOworCisgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xf
RElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3Bl
Y3QgcmF0aW8KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOworICAgIG1Td2Fw
QmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKKworICAgIGlmIChtU3dhcENoYWluKQor
ICAgIHsKKyAgICAgICAgbVN3YXBDaGFpbi0+QWRkUmVmKCk7CisgICAgICAgIG1Td2FwQ2hhaW4t
PkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7
CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtQmFja0J1
ZmZlci0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0
aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OworCisgICAg
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KG1XaWR0aCwg
bUhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUs
IGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBO
VUxMKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihF
R0xfQkFEX0FMTE9DKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
IGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUZsaXBUZXh0dXJlLCBOVUxM
KTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBlcnJvcihFR0xfQkFEX0FMTE9DKTsKKworICAg
ICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N1cmZhY2U6On5TdXJmYWNlKCkKK3sKKyAgICBpZiAo
bVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVs
ZWFzZSgpOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
bVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2ls
KQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IGlmIChtRmxpcFRleHR1cmUpCisgICAgeworICAgICAgICBtRmxpcFRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1GbGlwU3Rh
dGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVByZUZsaXBTdGF0ZSkKKyAgICB7Cisg
ICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0hXTkQgU3VyZmFj
ZTo6Z2V0V2luZG93SGFuZGxlKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICAgICAgbVN3
YXBDaGFpbi0+R2V0UHJlc2VudFBhcmFtZXRlcnMoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAg
ICAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdzsKKyAgICB9CisKKyAg
ICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3Rh
dGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQor
eworICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklU
RUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVF
TkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKE5VTEwpOworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwor
CisgICAgLy8gSnVzdCBzYW1wbGUgdGhlIHRleHR1cmUKKyAgICBkZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhU
VVJFKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9Q
LCBEM0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHNvdXJjZSk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZf
UE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVS
LCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X1NSR0JURVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8
IEQzREZWRl9URVgxKTsKKworICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsg
Ly8gRHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMgYWJvdXQgc3RyZWFtIDAsIG5vdCB0aGUgcmVz
dC4KK30KKwordm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit7CisgICAgSFJFU1VMVCBocjsKKwor
ICAgIGlmIChtRmxpcFN0YXRlID09IE5VTEwpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdHdv
IHN0YXRlIGJsb2NrcyBib3RoIHJlY29yZGluZyB0aGUgc3RhdGVzIHRoYXQgYXJlIGNoYW5nZWQg
d2hlbiBzd2FwcGluZy4KKworICAgICAgICAvLyBtUHJlRmxpcFN0YXRlIHdpbGwgcmVjb3JkIHRo
ZSBvcmlnaW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgorICAgICAgICBociA9IGRldmljZS0+QmVnaW5T
dGF0ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgd3Jp
dGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsKKyAgICAgICAgaHIgPSBkZXZp
Y2UtPkVuZFN0YXRlQmxvY2soJm1QcmVGbGlwU3RhdGUpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
bUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgc3RhdGUgZm9yIHRoZSBzd2FwIG9wZXJhdGlvbi4K
KyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmlj
ZSwgc291cmNlKTsKKworICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBT
dGF0ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICB7CisgICAgICAgICAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICAg
ICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1QcmVGbGlwU3Rh
dGUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgaHIgPSBtRmxpcFN0YXRlLT5BcHBseSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhyID0g
bVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgIH0KKworICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtUHJl
RmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmbVBy
ZUZsaXBEZXB0aFN0ZW5jaWwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbUJh
Y2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKK30K
Kwordm9pZCBTdXJmYWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKQor
eworICAgIG1QcmVGbGlwU3RhdGUtPkFwcGx5KCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRh
cmdldCgwLCBtUHJlRmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2ls
U3VyZmFjZShtUHJlRmxpcERlcHRoU3RlbmNpbCk7CisKKyAgICBpZiAobVByZUZsaXBCYWNrQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBCYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1QcmVGbGlwQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlw
RGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KK30KKwor
Ym9vbCBTdXJmYWNlOjpzd2FwKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKKwor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7CisgICAgICAgIG1GbGlw
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7CisKKyAgICAgICAg
bURpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QobVJlbmRl
clRhcmdldCwgTlVMTCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAg
ICAgICAgYXBwbHlGbGlwU3RhdGUoZGV2aWNlLCBtRmxpcFRleHR1cmUpOworCisgICAgICAgIC8v
IFJlbmRlciB0aGUgdGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRoZSBiYWNrIGJ1ZmZlcgorICAg
ICAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3sgICAgIDAgLSAwLjVmLCAgICAgICAwIC0gMC41Ziwg
MC4wZiwgMS4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge21X
aWR0aCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAxLjBmfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYs
IDAuMGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
ICAgIDAgLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgMC4wZiwgMC4wZn19OyAg
IC8vIHgsIHksIHosIHJodywgdSwgdgorCisgICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7
CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBx
dWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICAgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVh
c2UoKTsKKworICAgICAgICByZXN0b3JlU3RhdGUoZGV2aWNlKTsKKworICAgICAgICBtRGlzcGxh
eS0+ZW5kU2NlbmUoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVz
ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIG1EaXNwbGF5LT5nZXRQcmVzZW50SW50ZXJ2YWwo
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFM
RVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJ
Q0VMT1NUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRf
TE9TVCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRUdMaW50IFN1cmZhY2U6Omdl
dFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitFR0xpbnQgU3VyZmFj
ZTo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworSURpcmVj
dDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1SZW5k
ZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlN1
cmZhY2U6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAg
eworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJm
YWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhl
IGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8v
IEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEu
NF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaWZuZGVmIElOQ0xVREVfU1VSRkFDRV9IXworI2Rl
ZmluZSBJTkNMVURFX1NVUkZBQ0VfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKK2NsYXNzIENvbmZpZzsKKwor
Y2xhc3MgU3VyZmFjZQoreworICBwdWJsaWM6CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5
LCBJRGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBkZXB0
aFN0ZW5jaWwsIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworCisgICAgflN1cmZhY2UoKTsK
KworICAgIEhXTkQgZ2V0V2luZG93SGFuZGxlKCk7CisgICAgYm9vbCBzd2FwKCk7CisKKyAgICB2
aXJ0dWFsIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7
CisKKyAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45
ICpjb25zdCBtU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJl
OworCisgICAgdm9pZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElE
aXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSk7CisgICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICBJ
RGlyZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2Nr
OSAqbVByZUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBCYWNrQnVm
ZmVyOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKKworICAg
IGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2Fz
IGNyZWF0ZWQgd2l0aAorICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWln
aHQgb2Ygc3VyZmFjZQorICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0
aCBvZiBzdXJmYWNlCisvLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6
b250YWwgZG90IHBpdGNoCisvLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZl
cnRpY2FsIGRvdCBwaXRjaAorLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJ
ZiB0cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCisvLyAgRUdMQm9vbGVhbiBt
aXBtYXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcworLy8gIEVH
TGludCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRv
CisvLyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29s
dmUgYmVoYXZpb3IKKyAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxh
eSBhc3BlY3QgcmF0aW8KKyAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVu
ZGVyIGJ1ZmZlcgorICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIg
c3dhcCBiZWhhdmlvcgorLy8gIEVHTGVudW0gdGV4dHVyZUZvcm1hdDsgICAgICAgICAvLyBGb3Jt
YXQgb2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCisvLyAgRUdMZW51bSB0ZXh0
dXJlVGFyZ2V0OyAgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQor
Ly8gIEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9w
ZW5WRworLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBm
b3IgT3BlblZHCit9OworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KSW5kZXg6
IEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gbGliRUdMLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4KKwor
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgorI2lu
Y2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkpCit7CisgICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7CisgICAgfQorCisg
ICAgaWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmln
IGNvbmZpZykKK3sKKyAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbmZpZyhj
b25maWcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBmYWxz
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIXZhbGlk
YXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRT
dXJmYWNlKHN1cmZhY2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VS
RkFDRSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gIkMi
Cit7CitFR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigp
Iik7CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOworCisgICAg
aWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50
RXJyb3IoRUdMX1NVQ0NFU1MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworRUdM
RGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNw
bGF5X2lkKQoreworICAgIFRSQUNFKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCA9
IDB4JTAuOHApIiwgZGlzcGxheV9pZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBSZXR1cm4gdGhlIHNhbWUgRUdMRGlzcGxheSBoYW5kbGUgd2hlbiBkaXNwbGF5X2lkIGFs
cmVhZHkgY3JlYXRlZCBhIGRpc3BsYXkKKworICAgICAgICBpZiAoZGlzcGxheV9pZCA9PSBFR0xf
REVGQVVMVF9ESVNQTEFZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6
RGlzcGxheSgoSERDKU5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlfaWQgaXMgYSB2YWxpZCBkaXNw
bGF5IGRldmljZSBjb250ZXh0CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgZWdsOjpEaXNwbGF5
KChIREMpZGlzcGxheV9pZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19ESVNQTEFZKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisKK0VH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAq
bWFqb3IsIEVHTGludCAqbWlub3IpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4
JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44cCki
LAorICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOworICAgICAgICBpZiAo
bWlub3IpICptaW5vciA9IDQ7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdM
X0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUoRUdMRGlzcGxh
eSBkcHkpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHApIiwgZHB5KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZB
TFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgZGlzcGxheS0+dGVybWluYXRl
KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitj
b25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGlu
dCBuYW1lKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQg
bmFtZSA9ICVkKSIsIGRweSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKKyAgICAgICAgICAgIHJldHVybiBzdWNj
ZXNzKCJPcGVuR0xfRVMiKTsKKyAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgorICAgICAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoIiIpOworICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoKKyAg
ICAgICAgICAgIHJldHVybiBzdWNjZXNzKCJUcmFuc0dhbWluZyBJbmMuIik7CisgICAgICAgICAg
Y2FzZSBFR0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKGdpdC1k
ZXZlbCAiX19EQVRFX18iICIgX19USU1FX18iKSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIE5V
TEw7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBk
cHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9j
b25maWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZp
ZyAqY29uZmlncyA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXplID0g
JWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZp
Z3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFudW1fY29uZmln
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIs
IEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlz
dFtdID0gICAge0VHTF9OT05FfTsKKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ3Mo
Y29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7
Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRw
eSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQg
Y29uZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykKK3sKKyAgICBUUkFDRSgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIK
KyAgICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19z
aXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGF0dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghbnVtX2NvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYgKCFh
dHRyaWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBhdHRyaWJM
aXN0OworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdzLCBh
dHRyaWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
R2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQg
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkg
PSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9
ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29uZmlnLCBh
dHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBp
ZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENv
bmZpZ0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VH
TFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisgICAgICAg
IEhXTkQgd2luZG93ID0gKEhXTkQpd2luOworCisgICAgICAgIGlmICghSXNXaW5kb3cod2luZG93
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZFX1dJ
TkRPVywgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJpYl9s
aXN0KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmF0dHJpYl9saXN0ICE9IEVHTF9O
T05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3Rb
MF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVS
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJfbGlzdFsxXSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JBQ0tf
QlVGRkVSOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVyaW5n
IGRpcmVjdGx5IHRvIGZyb250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdf
Q09MT1JTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhB
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gs
IEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0Up
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkaXNwbGF5LT5oYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNF
KTsKKyAgICAgICAgfQorCisgICAgICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IChFR0xTdXJmYWNl
KWRpc3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcpOworCisgICAgICAg
IHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NV
UkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMU3Vy
ZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0Uo
IihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29u
ZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEVHTF9OT19TVVJGQUNFOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQ
aXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBUUkFD
RSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAs
IEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFwLCBh
dHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVH
TF9OT19TVVJGQUNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3VyZmFj
ZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIFRSQUNFKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRw
eSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xf
RkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZhY2UoKGVn
bDo6U3VyZmFjZSopc3VyZmFjZSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50
ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3Vy
ZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZh
bHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShk
aXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3Vy
ZmFjZSopc3VyZmFjZTsKKworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBF
R0xfVkdfQ09MT1JTUEFDRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgorICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJm
YWNlLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdM
X0hPUklaT05UQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9Q
QlVGRkVSOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKKyAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NVUxU
SVNBTVBMRV9SRVNPTFZFOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1RfUkFU
SU86CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRUdMX1NXQVBfQkVIQVZJT1I6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVf
Rk9STUFUOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKKyAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBF
R0xfV0lEVEg6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKK3sKKyAgICBUUkFDRSgiKEVHTGVudW0g
YXBpID0gMHglWCkiLCBhcGkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGFw
aSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6CisgICAgICAgICAg
Y2FzZSBFR0xfT1BFTlZHX0FQSToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6c2V0Q3Vy
cmVudEFQSShhcGkpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxT
RTsKK30KKworRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKK3sKKyAgICBUUkFD
RSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6Omdl
dEN1cnJlbnRBUEkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOworICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOwor
fQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCit7CisgICAgVFJB
Q0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCit7CisgICAgVFJBQ0UoIigp
Iik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19ESVNQ
TEFZLCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsKKwor
ICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTFN1cmZh
Y2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3BsYXkg
ZHB5LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZpZyBj
b25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1ZmZl
ciBidWZmZXIgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAweCUw
LjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRw
eSwgYnVmdHlwZSwgYnVmZmVyLCBjb25maWcsIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQor
CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJG
QUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQoreworICAgIFRSQUNFKCIo
RUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBF
R0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAgZHB5
LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdM
aW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RS
VUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGV4SW1h
Z2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sK
KyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNl
ID0gMHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3Bs
YXkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9
CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBU
UkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQpIiwg
ZHB5LCBpbnRlcnZhbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPnNldFN3YXBJbnRlcnZhbChpbnRl
cnZhbCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQor
CitFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAq
YXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVH
TENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CisgICAgICAgIH0K
KworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNv
bmZpZyk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19DT05U
RVhUOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNw
bGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjdHggPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICBkaXNwbGF5LT5kZXN0cm95Q29udGV4dCgoZ2w6OkNvbnRleHQqKWN0eCk7CisKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBF
R0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJl
YWQgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGRyYXcsIHJlYWQsIGN0eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOworICAg
ICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKyAg
ICAgICAgRFdPUkQgcGFzc2VzOworCisgICAgICAgIGlmICghZGV2aWNlIHx8IGRldmljZS0+VmFs
aWRhdGVEZXZpY2UoJnBhc3NlcykgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGN0eCAhPSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRhdGUo
ZGlzcGxheSwgY29udGV4dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRyYXcgIT0gRUdMX05PX1NVUkZBQ0UgJiYg
IXZhbGlkYXRlKGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKSkgfHwK
KyAgICAgICAgICAgIChyZWFkICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZShkaXNwbGF5
LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYXcgIT0g
cmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7CisgICAg
ICAgIGVnbDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOworICAgICAgICBlZ2w6OnNldEN1
cnJlbnRSZWFkU3VyZmFjZShyZWFkKTsKKworICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQs
IGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKKworICAgICAgICBy
ZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0Up
OworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTENvbnRleHQgX19zdGRj
YWxsIGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGdsR2V0Q3VycmVudENv
bnRleHQoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9OT19DT05URVhUKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0NP
TlRFWFQ7Cit9CisKK0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVH
TGludCByZWFkZHJhdykKK3sKKyAgICBUUkFDRSgiKEVHTGludCByZWFkZHJhdyA9ICVkKSIsIHJl
YWRkcmF3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRkcmF3ID09IEVHTF9S
RUFEKQorICAgICAgICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIHJlYWQgPSBlZ2w6OmdldEN1
cnJlbnRSZWFkU3VyZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmVhZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVhZGRyYXcgPT0gRUdMX0RSQVcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVHTFN1cmZhY2UgZHJhdyA9IGVnbDo6Z2V0Q3VycmVudERyYXdTdXJm
YWNlKCk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhkcmF3KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwor
fQorCitFR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKQorewor
ICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBFR0xEaXNwbGF5IGRw
eSA9IGVnbDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhk
cHkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOworICAgIH0KKworICAg
IHJldHVybiBFR0xfTk9fRElTUExBWTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVl
cnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMaW50IGF0dHJpYnV0
ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGlu
dCAqdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjdHgsIGF0dHJpYnV0ZSwgdmFs
dWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUo
ZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAg
ICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICBy
ZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
V2FpdEdMKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNz
KDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0TmF0aXZlKEVH
TGludCBlbmdpbmUpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgZW5naW5lID0gJWQpIiwgZW5naW5l
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
c3VyZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4o
ZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6
OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisgICAgICAg
IGlmIChlZ2xTdXJmYWNlLT5zd2FwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xDb3B5QnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
LCBFR0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkg
ZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMTmF0aXZlUGl4
bWFwVHlwZSB0YXJnZXQgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSwgdGFyZ2V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJl
dHVybiBFR0xfRkFMU0U7Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUgX19zdGRjYWxsIGVnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQor
eworICAgIFRSQUNFKCIoY29uc3QgY2hhciAqcHJvY25hbWUgPSBcIiVzXCIpIiwgcHJvY25hbWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgICAgICBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEV4dGVuc2lvbiBlZ2xFeHRlbnNpb25zW10gPQorICAgICAgICB7Cisg
ICAgICAgICAgICB7IiIsIE5VTEx9LAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGV4
dCA9IDA7IGV4dCA8IHNpemVvZihlZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBl
eHQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZWdsRXh0
ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWVnbEV4dGVu
c2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGdsR2V0UHJvY0FkZHJlc3MocHJvY25hbWUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpTlVMTCk7CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM2IEBACitMSUJSQVJZCWxpYkVHTAorRVhQT1JUUworCWVnbEJpbmRBUEkgICAgICAgICAgICAg
ICAgICAgICAgQDE0CisJZWdsQmluZFRleEltYWdlICAgICAgICAgICAgICAgICBAMjAKKwllZ2xD
aG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3CisJZWdsQ29weUJ1ZmZlcnMgICAgICAgICAg
ICAgICAgICBAMzMKKwllZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgIEAyMworCWVnbENy
ZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAgICBAMTgKKwllZ2xDcmVhdGVQYnVmZmVy
U3VyZmFjZSAgICAgICAgIEAxMAorCWVnbENyZWF0ZVBpeG1hcFN1cmZhY2UgICAgICAgICAgQDEx
CisJZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAgICBAOQorCWVnbERlc3Ryb3lDb250ZXh0
ICAgICAgICAgICAgICAgQDI0CisJZWdsRGVzdHJveVN1cmZhY2UgICAgICAgICAgICAgICBAMTIK
KwllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAgIEA4CisJZWdsR2V0Q29uZmlncyAgICAg
ICAgICAgICAgICAgICBANgorCWVnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgQDI2CisJ
ZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBAMjgKKwllZ2xHZXRDdXJyZW50U3VyZmFj
ZSAgICAgICAgICAgIEAyNworCWVnbEdldERpc3BsYXkgICAgICAgICAgICAgICAgICAgQDIKKwll
Z2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAxCisJZWdsR2V0UHJvY0FkZHJlc3MgICAg
ICAgICAgICAgICBAMzQKKwllZ2xJbml0aWFsaXplICAgICAgICAgICAgICAgICAgIEAzCisJZWds
TWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUKKwllZ2xRdWVyeUFQSSAgICAgICAgICAg
ICAgICAgICAgIEAxNQorCWVnbFF1ZXJ5Q29udGV4dCAgICAgICAgICAgICAgICAgQDI5CisJZWds
UXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQorCWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAg
ICAgICAgICAgQDEzCisJZWdsUmVsZWFzZVRleEltYWdlICAgICAgICAgICAgICBAMjEKKwllZ2xS
ZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNworCWVnbFN1cmZhY2VBdHRyaWIgICAgICAg
ICAgICAgICAgQDE5CisJZWdsU3dhcEJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzIKKwllZ2xT
d2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgorCWVnbFRlcm1pbmF0ZSAgICAgICAgICAg
ICAgICAgICAgQDQKKwllZ2xXYWl0Q2xpZW50ICAgICAgICAgICAgICAgICAgIEAxNgorCWVnbFdh
aXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMwCisJZWdsV2FpdE5hdGl2ZSAgICAgICAgICAg
ICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMv
bGliRUdML2xpYkVHTC52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJF
R0wudmNwcm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9q
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5
cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkVHTCINCisJUHJv
amVjdEdVSUQ9IntFNzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlSb290
TmFtZXNwYWNlPSJsaWJFR0wiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3
b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJ
CQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8
L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChD
b25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3Vy
YXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9
IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJ
CQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2pl
Y3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4z
MjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19E
RVBSRUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNp
Y1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVj
b21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJp
dFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0
PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21w
aWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGls
ZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29s
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRp
dGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0K
KwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1
Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6ZWRC
YXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRh
cmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZp
ZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRv
b2wiDQorCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4
MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkg
JnF1b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gw
RDsmI3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9u
DQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIk
KENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFy
YWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rp
b25FeHBhbnNpb249IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJv
amVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBP
UlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJ
CQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJ
CVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJm
YWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNk
OS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZp
bGU9ImxpYkVHTC5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJ
CQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJs
ZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJ
RGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFr
ZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNvbW1hbmRMaW5l
PSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJc
JChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERp
cilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVH
TC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25O
YW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4NCisJ
CTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQor
CTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBG
aWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTth
c214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMy
RDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmln
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXENvbW1vblxkZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1l
PSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQor
CQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJG
Qn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlzcGxh
eS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW5jbHVkZVxFR0xcZWdsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xleHQuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVc
RUdMXGVnbHBsYXRmb3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
PC9GaWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIg0KKwkJ
CT4NCisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8
L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML21haW4uY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQgYW5kIG1h
bmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5o
IgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK3N0YXRpYyBEV09SRCBjdXJyZW50VExT
ID0gVExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBp
bnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAgc3dpdGNoIChy
ZWFzb24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHsK
KyAgICAgICAgICAgICNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqZGVidWcg
PSBmb3BlbigiZGVidWcudHh0IiwgInJ0Iik7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVidWcp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOwor
ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAid3QiKTsgICAv
LyBFcmFzZQorICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjdXJyZW50VExTID0gVGxz
QWxsb2MoKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRF
WEVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxp
emUgaW5kZXgKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2Mo
TFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBj
dXJyZW50KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVycm9yID0gRUdMX1NVQ0NFU1M7
CisgICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09QRU5HTF9FU19BUEk7CisgICAg
ICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgICAgICAg
ICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgICAg
ICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRB
Q0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFD
SDoKKyAgICAgICAgeworICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBUUlVFOworfQorCituYW1lc3BhY2UgZWdsCit7Cit2b2lkIHNldEN1cnJlbnRFcnJvcihFR0xp
bnQgZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmVycm9yID0gZXJyb3I7Cit9CisKK0VHTGlu
dCBnZXRDdXJyZW50RXJyb3IoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZXJyb3I7Cit9
CisKK3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKK3sKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+
QVBJID0gQVBJOworfQorCitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQoreworICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1
cm4gY3VycmVudC0+QVBJOworfQorCit2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkg
ZHB5KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZHB5OworfQorCitFR0xEaXNwbGF5
IGdldEN1cnJlbnREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7
Cit9CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sK
KyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OworCisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOworfQorCitFR0xTdXJmYWNl
IGdldEN1cnJlbnREcmF3U3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kcmF3
U3VyZmFjZTsKK30KKwordm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJm
YWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IHN1cmZhY2U7Cit9CisKK0VH
TFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50
ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJl
bnQtPnJlYWRTdXJmYWNlOworfQorfQorCit2b2lkIGVycm9yKEVHTGludCBlcnJvckNvZGUpCit7
CisgICAgZWdsOjpzZXRDdXJyZW50RXJyb3IoZXJyb3JDb2RlKTsKK30KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVudCBv
ZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2lmbmRlZiBMSUJFR0xfTUFJTl9IXworI2RlZmluZSBM
SUJFR0xfTUFJTl9IXworCisjZGVmaW5lIEVHTEFQSQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKwor
bmFtZXNwYWNlIGVnbAoreworc3RydWN0IEN1cnJlbnQKK3sKKyAgICBFR0xpbnQgZXJyb3I7Cisg
ICAgRUdMZW51bSBBUEk7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5OworICAgIEVHTFN1cmZhY2Ug
ZHJhd1N1cmZhY2U7CisgICAgRUdMU3VyZmFjZSByZWFkU3VyZmFjZTsKK307CisKK3ZvaWQgc2V0
Q3VycmVudEVycm9yKEVHTGludCBlcnJvcik7CitFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCk7CisK
K3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSk7CitFR0xlbnVtIGdldEN1cnJlbnRBUEko
KTsKKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5IGRweSk7CitFR0xEaXNwbGF5
IGdldEN1cnJlbnREaXNwbGF5KCk7CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1
cmZhY2Ugc3VyZmFjZSk7CitFR0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFjZSgpOworCit2
b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFj
ZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JD
b2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEVHTGludCBlcnJvckNv
ZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZz
dWNjZXNzKGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVnbDo6c2V0Q3VycmVudEVycm9y
KEVHTF9TVUNDRVNTKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAv
LyBMSUJFR0xfTUFJTl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NjQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0
eSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKKyNpbmNsdWRlIDxkM2R4
OS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorCituYW1lc3BhY2UKK3sKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElu
cHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vu
b3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGlu
IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90
dG9tIHJpZ2h0LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMw
LlkgbXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorY29uc3QgY2hh
ciBzdGFuZGFyZHZzW10gPQorInN0cnVjdCBWU19PVVRQVVRcbiIKKyJ7XG4iCisiICAgIGZsb2F0
NCBwb3NpdGlvbiA6IFBPU0lUSU9OO1xuIgorIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09S
RDA7XG4iCisifTtcbiIKKyJcbiIKKyJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7
XG4iCisiXG4iCisiVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04p
XG4iCisie1xuIgorIiAgICBWU19PVVRQVVQgT3V0O1xuIgorIlxuIgorIiAgICBPdXQucG9zaXRp
b24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCisiICAgIE91dC50ZXhjb29yZCA9IHBv
c2l0aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAw
LCAwKTtcbiIKKyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBGbGlwIFkg
VmVydGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8v
IE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4
IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4g
YW5kICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxm
LXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNoYXIgZmxp
cHl2c1tdID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9hdDQgcG9zaXRp
b24gOiBQT1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgor
In07XG4iCisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgorIlxu
IgorIlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgorIntc
biIKKyIgICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0aW9uID0gcG9z
aXRpb24gKyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAq
IGZsb2F0NCgwLjUsIDAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIK
KyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBQYXNzdGhyb3VnaCBQaXhl
bCBTaGFkZXIKKy8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Nv
bnN0IGNoYXIgcGFzc3Rocm91Z2hwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4i
CisiZmxvYXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCisi
e1xuIgorIglyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCisifVxuIjsKKworLy8g
THVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgw
LCB0YzApLnJycmEuCisvLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAu
WSA9IDAuCisvLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgor
Y29uc3QgY2hhciBsdW1pbmFuY2Vwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4i
CisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRtcCA9
IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAudyA9IHRtcC53ICogbW9kZS54ICsg
bW9kZS55O1xuIgorIglyZXR1cm4gdG1wLnh4eHc7XG4iCisifVxuIjsKKworLy8gUkdCL0EgQ29t
cG9uZW50IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdp
dGggb3B0aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZvcmNlIFJH
QiA9IDAsIHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9yY2UgQSA9
IDEsIHNldCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAu
Citjb25zdCBjaGFyIGNvbXBvbmVudG1hc2twc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4i
CisiXG4iCisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWlu
KGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0
IHRtcCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAueHl6ID0gdG1wLnh5eiAq
IG1vZGUueDtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudztcbiIKKyIJcmV0
dXJuIHRtcDtcbiIKKyJ9XG4iOworCit9CisKK25hbWVzcGFjZSBnbAoreworCitjb25zdCBjaGFy
ICogY29uc3QgQmxpdDo6bVNoYWRlclNvdXJjZVtdID0KK3sKKyAgICBzdGFuZGFyZHZzLAorICAg
IGZsaXB5dnMsCisgICAgcGFzc3Rocm91Z2hwcywKKyAgICBsdW1pbmFuY2VwcywKKyAgICBjb21w
b25lbnRtYXNrcHMKK307CisKK0JsaXQ6OkJsaXQoQ29udGV4dCAqY29udGV4dCkKKyAgOiBtQ29u
dGV4dChjb250ZXh0KSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFy
YXRpb24oTlVMTCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2ls
KE5VTEwpLCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7Cisg
ICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7
Cit9CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVk
U3RhdGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRW
ZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikg
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRTaGFk
ZXJzW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkK
K3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0xLCAt
MSwKKyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQorICAg
IH07CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQz
RFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIs
IE5VTEwpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2b2lkICps
b2NrUHRyOworICAgIG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsK
KyAgICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkg
ZWxlbWVudHNbXSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwg
RDNEREVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAg
ICAgRDNEREVDTF9FTkQoKQorICAgIH07CisKKyAgICBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4
RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChociA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5
cGU+Citib29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2
aWNlOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSoqKSwKKyAg
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0
U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAo
bUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIg
PSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSUQzRFhCdWZmZXIgKnNoYWRlckNvZGU7
CisgICAgICAgIEhSRVNVTFQgaHIgPSBEM0RYQ29tcGlsZVNoYWRlcihtU2hhZGVyU291cmNlW3Nv
dXJjZV0sIHN0cmxlbihtU2hhZGVyU291cmNlW3NvdXJjZV0pLCBOVUxMLCBOVUxMLCAibWFpbiIs
IHByb2ZpbGUsIDAsICZzaGFkZXJDb2RlLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY29tcGlsZSAl
cyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwg
KGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGhyID0gKGRldmljZS0+KmNyZWF0ZVNoYWRlcikoc3RhdGljX2Nhc3Q8Y29uc3Qg
RFdPUkQqPihzaGFkZXJDb2RlLT5HZXRCdWZmZXJQb2ludGVyKCkpLCAmc2hhZGVyKTsKKyAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlckNvZGUtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSAlcyBzaGFkZXIgZm9y
IGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClzb3VyY2Us
IGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNo
YWRlckNvZGUtPlJlbGVhc2UoKTsKKworICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0g
PSBzaGFkZXI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IChkZXZpY2UtPipzZXRTaGFkZXIp
KHNoYWRlcik7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHNldCAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFgu
IiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihT
aGFkZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5PihzaGFkZXIsIG1Db250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCksICZJRGly
ZWN0M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRW
ZXJ0ZXhTaGFkZXIpOworfQorCitib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNo
YWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hh
ZGVyLCBtQ29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0M0REZXZpY2U5
OjpDcmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsK
K30KKworUkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSkgY29uc3QKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXRE
ZXNjKCZkZXNjKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAwOworICAgIHJl
Y3QudG9wID0gMDsKKyAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRv
bSA9IGRlc2MuSGVpZ2h0OworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94
RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1
cmUoc291cmNlLCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmlj
ZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgw
LCBkZXN0KTsKKworICAgIHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworICAg
IHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19QQVNTVEhST1VHSCk7CisKKyAgICBzZXRDb21tb25C
bGl0U3RhdGUoKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJ
TFRFUiwgRDNEVEVYRl9MSU5FQVIpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CisKKyAgICBzZXRWaWV3cG9ydChnZXRT
dXJmYWNlUmVjdChkZXN0KSwgMCwgMCk7CisKKyAgICByZW5kZXIoKTsKKworICAgIHRleHR1cmUt
PlJlbGVhc2UoKTsKKworICAgIHJlc3RvcmVTdGF0ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNE
VGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJl
Y3QpOworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IHNhdmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0Vmlld3BvcnQoc291
cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCk7CisKKyAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsK
KyAgICBpZiAoc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoZGVzdEZvcm1hdCkpCisgICAgeworICAg
ICAgICByZW5kZXIoKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICBy
ZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldEZv
cm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KQoreworICAgIGJvb2wgb2theSA9
IHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworCisgICAgc3dpdGNoIChkZXN0
Rm9ybWF0KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNl
IEdMX1JHQkE6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAg
ICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNL
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hh
ZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoIW9rYXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51
bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAgICAvLyBUaGUgbWVhbmluZyBv
ZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4K
KyAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgor
ICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICBzd2l0Y2ggKGRl
c3RGb3JtYXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNh
c2UgR0xfUkdCQToKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFta
XSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgcHND
b25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAg
IGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBbWV0g
PSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZ2V0
RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VU
b1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QpCit7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9E
RVNDIHNvdXJjZURlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAg
ICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNE
VGV4dHVyZTkgKnRleHR1cmU7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0
b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNj
LkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAg
fQorCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgIHJlc3VsdCA9
IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRl
eHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisgICAgUkVDVCBkM2RTb3VyY2VS
ZWN0OworICAgIGQzZFNvdXJjZVJlY3QubGVmdCA9IHNvdXJjZVJlY3QubGVmdDsKKyAgICBkM2RT
b3VyY2VSZWN0LnJpZ2h0ID0gc291cmNlUmVjdC5yaWdodDsKKyAgICBkM2RTb3VyY2VSZWN0LnRv
cCA9IHNvdXJjZVJlY3QudG9wOworICAgIGQzZFNvdXJjZVJlY3QuYm90dG9tID0gc291cmNlUmVj
dC5ib3R0b207CisKKyAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJmQzZFNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBO
VUxMLCBEM0RURVhGX05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKwor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiB0
ZXh0dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkgdnA7CisgICAgdnAu
WCAgICAgID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OworICAgIHZwLldpZHRo
ICA9IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgdnAuSGVpZ2h0ID0g
c291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5NaW5aICAgPSAwLjBm
OworICAgIHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOwor
CisgICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92
cC5IZWlnaHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rigw
LCBoYWxmUGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0
ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklU
RUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVF
TkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7CisKKyAgICBkZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRF
WEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRF
WFRVUkUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQorICAgIHsKKyAgICAgICAgZGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgIH0KK30KKwordm9pZCBCbGl0Ojpy
ZW5kZXIoKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQg
aHIgPSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAq
IHNpemVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbiht
UXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAg
ICBociA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsK
K30KKwordm9pZCBCbGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworCisgICAgSFJFU1VMVCBocjsKKworICAgIGRldmljZS0+R2V0
RGVwdGhTdGVuY2lsU3VyZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBkZXZpY2UtPkdl
dFJlbmRlclRhcmdldCgwLCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKworICAgIGlmIChtU2F2ZWRT
dGF0ZUJsb2NrID09IE5VTEwpCisgICAgeworICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0
ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHNldENv
bW1vbkJsaXRTdGF0ZSgpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0
WzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15
Q29uc3QsIDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAg
ICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOworCisg
ICAgICAgIEQzRFZJRVdQT1JUOSBkdW1teVZwOworICAgICAgICBkdW1teVZwLlggPSAwOworICAg
ICAgICBkdW1teVZwLlkgPSAwOworICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKKyAgICAgICAg
ZHVtbXlWcC5IZWlnaHQgPSAxOworICAgICAgICBkdW1teVZwLk1pblogPSAwOworICAgICAgICBk
dW1teVZwLk1heFogPSAxOworCisgICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnAp
OworCisgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAgICAgICBkZXZp
Y2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7CisKKyAgICAg
ICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsK
KworICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChtU2F2
ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVM
TCkKKyAgICB7CisgICAgICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlc3Rv
cmVTdGF0ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2ls
KTsKKyAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBt
U2F2ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2ls
ID0gTlVMTDsKKyAgICB9CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRS
ZW5kZXJUYXJnZXQpOworICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7
CisgICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRS
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2Nr
ICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL0JsaXQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0
LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0JM
SVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlIDxkM2Q5
Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sK
K2NsYXNzIENvbnRleHQ7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0
IEJsaXQoQ29udGV4dCAqY29udGV4dCk7CisgICAgfkJsaXQoKTsKKworICAgIC8vIENvcHkgZnJv
bSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8gc291cmNlUmVjdCwgeG9m
ZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkK
KyAgICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVj
aWZpZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3Jt
YXQgPSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCisgICAg
Ym9vbCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgICAvLyAyeDIgYm94IGZpbHRlciBz
YW1wbGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KKyAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBp
cyBSR0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCisgICAgYm9v
bCBib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QpOworCisgIHByaXZhdGU6CisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247CisKKyAgICB2b2lkIGluaXRH
ZW9tZXRyeSgpOworCisgICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVz
dEZvcm1hdCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUo
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOworICAg
IHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKKyAgICBSRUNU
IGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKKworICAg
IC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFk
ZXJTb3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAgICAgICAgU0hBREVSX1ZTX1NU
QU5EQVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAgICAgIFNIQURFUl9QU19QQVNT
VEhST1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKKyAgICAgICAgU0hBREVSX1BT
X0NPTVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAorICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2VbXTsKKworICAgIC8vIFRoaXMgYWN0
dWFsbHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgY2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJz
W1NIQURFUl9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAg
ICBib29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisg
ICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipjcmVh
dGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUgKiopLAorICAgICAgICAgICAg
ICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RT
aGFkZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVy
KTsKKyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7CisgICAgdm9pZCBy
ZW5kZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9pZCByZXN0b3JlU3RhdGUo
KTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptU2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxp
dCk7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpJbmRleDogQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvQnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gQnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50
aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgorLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBH
TCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCdWZmZXI6OkJ1ZmZlcigpCit7CisgICAgbUNv
bnRlbnRzID0gTlVMTDsKKyAgICBtU2l6ZSA9IDA7CisgICAgbVVzYWdlID0gR0xfRFlOQU1JQ19E
UkFXOworfQorCitCdWZmZXI6On5CdWZmZXIoKQoreworICAgIGRlbGV0ZVtdIG1Db250ZW50czsK
K30KKwordm9pZCBCdWZmZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0
ciBzaXplLCBHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZVtdIG1Db250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICB9
CisgICAgZWxzZSBpZiAoc2l6ZSAhPSBtU2l6ZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1D
b250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07CisgICAgICAg
IG1lbXNldChtQ29udGVudHMsIDAsIHNpemUpOworICAgIH0KKworICAgIGlmIChkYXRhICE9IE5V
TEwgJiYgc2l6ZSA+IDApCisgICAgeworICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBz
aXplKTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHNpemU7CisgICAgbVVzYWdlID0gdXNhZ2U7Cit9
CisKK3ZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlw
dHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZz
ZXQsIGRhdGEsIHNpemUpOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUg
Z2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgor
Ly8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEu
CisKKyNpZm5kZWYgTElCR0xFU1YyX0JVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVS
X0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQnVmZmVyCit7CisgIHB1Ymxp
YzoKKyAgICBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgfkJ1ZmZlcigpOworCisgICAgdm9pZCBi
dWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdl
KTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBz
aXplLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJuIG1Db250
ZW50czsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KKyAgICBH
TGVudW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOworCisgICAgR0x1Ynl0ZSAqbUNvbnRl
bnRzOworICAgIHNpemVfdCBtU2l6ZTsKKyAgICBHTGVudW0gbVVzYWdlOworfTsKKworfQorCisj
ZW5kaWYgICAvLyBMSUJHTEVTVjJfQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI5OTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRl
eHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdM
IHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhl
IEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAibGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1
ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2Vv
bWV0cnkvZHg5LmgiCisKKyN1bmRlZiBuZWFyCisjdW5kZWYgZmFyCisKK25hbWVzcGFjZSBnbAor
eworQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKQorICAgIDogbUNv
bmZpZyhjb25maWcpCit7CisgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBm
KTsKKworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOworICAgIG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IDA7CisKKyAgICBtU3RhdGUuY3VsbEZhY2UgPSBmYWxzZTsKKyAgICBt
U3RhdGUuY3VsbE1vZGUgPSBHTF9CQUNLOworICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7
CisgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBH
TF9MRVNTOworICAgIG1TdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIG1TdGF0ZS5zb3VyY2VCbGVu
ZFJHQiA9IEdMX09ORTsKKyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKKyAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsKKyAgICBtU3RhdGUuZGVzdEJsZW5kQWxw
aGEgPSBHTF9aRVJPOworICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7
CisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIG1TdGF0
ZS5ibGVuZENvbG9yLnJlZCA9IDA7CisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOwor
ICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuc3Rl
bmNpbEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAwOworICAgIG1T
dGF0ZS5zdGVuY2lsTWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7
CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAwOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7CisgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gLTE7CisgICAgbVN0YXRlLnN0ZW5jaWxGYWls
ID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOwor
ICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdM
X0tFRVA7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7CisgICAgbVN0YXRl
LnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5p
dHMgPSAwLjBmOworICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKKyAg
ICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsKKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSA9IDEuMGY7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gZmFsc2U7
CisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLmRpdGhlciA9IHRy
dWU7CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IEdMX0RPTlRfQ0FSRTsKKworICAg
IG1TdGF0ZS5saW5lV2lkdGggPSAxLjBmOworCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7Cisg
ICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBjb25m
aWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBjb25m
aWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7CisgICAgbVN0YXRlLnpOZWFyID0gMC4wZjsKKyAgICBt
U3RhdGUuekZhciA9IDEuMGY7CisKKyAgICBtU3RhdGUuc2Npc3NvclggPSAwOworICAgIG1TdGF0
ZS5zY2lzc29yWSA9IDA7CisgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IGNvbmZpZy0+bURpc3Bs
YXlNb2RlLldpZHRoOworICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuSGVpZ2h0OworCisgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHRydWU7CisgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gdHJ1ZTsKKyAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRy
dWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKKyAgICBtU3RhdGUuZGVwdGhN
YXNrID0gdHJ1ZTsKKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdl
IDgzOgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJF
X0NVQkVfTUFQIGhhdmUgdHdvZGltZW5zaW9uYWwKKyAgICAvLyBhbmQgY3ViZSBtYXAgdGV4dHVy
ZSBzdGF0ZSB2ZWN0b3JzIHJlc3BlY3RpdmVseSBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAgICAv
LyBJbiBvcmRlciB0aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBs
b3N0LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHRleHR1cmUKKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3
aG9zZSBuYW1lcyBhcmUgMC4KKworICAgIG1UZXh0dXJlMkRaZXJvID0gbmV3IFRleHR1cmUyRCh0
aGlzKTsKKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMp
OworCisgICAgbUNvbG9yYnVmZmVyWmVybyA9IE5VTEw7CisgICAgbURlcHRoYnVmZmVyWmVybyA9
IE5VTEw7CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKKworICAgIG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID0gMDsKKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKKyAgICBi
aW5kVGV4dHVyZTJEKDApOworICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5kUmVuZGVy
YnVmZmVyKDApOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVf
Q09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1w
bGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBF
X0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVd
ID0gTlVMTDsKKyAgICB9CisKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOworCisgICAg
bVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0
OworCisgICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxMOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9
IE5VTEw7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsK
KworICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNl
OworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKKworICAgIG1IYXNC
ZWVuQ3VycmVudCA9IGZhbHNlOworCisgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7
CisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworQ29udGV4dDo6fkNvbnRleHQoKQorewor
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CisKKyAgICBmb3IgKGludCB0eXBlID0gMDsg
dHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgfQorCisgICAgZGVsZXRlIG1UZXh0dXJl
MkRaZXJvOworICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1D
b2xvcmJ1ZmZlclplcm87CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAgZGVsZXRl
IG1TdGVuY2lsYnVmZmVyWmVybzsKKworICAgIGRlbGV0ZSBtQnVmZmVyQmFja0VuZDsKKyAgICBk
ZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOworICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsK
KyAgICBkZWxldGUgbUJsaXQ7CisKKyAgICB3aGlsZSAoIW1CdWZmZXJNYXAuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAg
ICB9CisKKyAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBk
ZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNoYWRlciht
U2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1GcmFtZWJ1
ZmZlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1l
YnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1SZW5kZXJi
dWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVu
ZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1UZXh0
dXJlTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFw
LmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSkKKyAgICB7CisgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPlJlbGVhc2UoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoIW1IYXNCZWVuQ3VycmVudCkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2VDYXBzID0gZGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOworCisg
ICAgICAgIG1CdWZmZXJCYWNrRW5kID0gbmV3IER4OUJhY2tFbmQodGhpcywgZGV2aWNlKTsKKyAg
ICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1C
dWZmZXJCYWNrRW5kKTsKKyAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRh
TWFuYWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1CbGl0ID0gbmV3IEJsaXQo
dGhpcyk7CisKKyAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOworCisgICAgICAgIG1TdGF0
ZS52aWV3cG9ydFggPSAwOworICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKKyAgICAgICAg
bVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOworICAgICAgICBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtU3Rh
dGUuc2Npc3NvclggPSAwOworICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOworICAgICAgICBt
U3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtSGFzQmVl
bkN1cnJlbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVj
dDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcw
JyBuYW1lcworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3Vy
ZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1ZmZlcigpOworICAgIENvbG9yYnVmZmVyICpjb2xv
cmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7CisgICAg
RGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyWmVybyA9IG5ldyBEZXB0aGJ1ZmZlcihkZXB0aFN0ZW5j
aWwpOworICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IFN0ZW5jaWxi
dWZmZXIoZGVwdGhTdGVuY2lsKTsKKworICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZl
clplcm8pOworICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOworICAgIHNl
dERlcHRoYnVmZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOworICAgIHNldFN0ZW5jaWxidWZmZXJa
ZXJvKHN0ZW5jaWxidWZmZXJaZXJvKTsKKworICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3Ji
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRo
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVu
Y2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisKKyAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0
LT5SZWxlYXNlKCk7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIGlmIChtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24gPT0gRDNEUFNfVkVSU0lPTigzLCAwKSkKKyAgICB7CisgICAgICAg
IG1Qc1Byb2ZpbGUgPSAicHNfM18wIjsKKyAgICAgICAgbVZzUHJvZmlsZSA9ICJ2c18zXzAiOwor
ICAgIH0KKyAgICBlbHNlICAvLyBlZ2w6OkRpc3BsYXkgZ3VhcmFudGVlcyBzdXBwb3J0IGZvciBh
dCBsZWFzdCAyLjAKKyAgICB7CisgICAgICAgIG1Qc1Byb2ZpbGUgPSAicHNfMl8wIjsKKyAgICAg
ICAgbVZzUHJvZmlsZSA9ICJ2c18yXzAiOworICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURpcnR5
KCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxh
dGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJl
LWRyYXcuCit2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKK3sKKyAgICBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7CisgICAgbUFwcGxpZWRQcm9ncmFtID0gMDsKKworICAgIG1DbGVhclN0YXRlRGlydHkgPSB0
cnVlOworICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURlcHRoU3RhdGVEaXJ0eSA9
IHRydWU7CisgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQmxlbmRTdGF0ZURpcnR5
ID0gdHJ1ZTsKKyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Qb2x5Z29uT2Zm
c2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAg
ICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVl
OworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVl
biwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCit7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5yZWQgPSByZWQ7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwor
ICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7CisgICAgbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVw
dGgoZmxvYXQgZGVwdGgpCit7CisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwor
fQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKK3sKKyAgICBt
U3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOworfQorCit2b2lkIENvbnRleHQ6OnNl
dEN1bGxGYWNlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVu
YWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOworICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0N1
bGxGYWNlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKK30K
Kwordm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAobVN0
YXRlLmN1bGxNb2RlICE9IG1vZGUpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBt
b2RlOworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQoreworICAgIGlmIChtU3RhdGUuZnJv
bnRGYWNlICE9IGZyb250KQorICAgIHsKKyAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250
OworICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhU
ZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxl
ZDsKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENv
bnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5k
ZXB0aFRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1
bmMpCit7CisgICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICAgICAgbURlcHRoU3RhdGVE
aXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxv
YXQgek5lYXIsIGZsb2F0IHpGYXIpCit7CisgICAgbVN0YXRlLnpOZWFyID0gek5lYXI7CisgICAg
bVN0YXRlLnpGYXIgPSB6RmFyOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCisgICAgeworICAgICAg
ICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUuYmxlbmQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0
b3JzKEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEs
IEdMZW51bSBkZXN0QWxwaGEpCit7CisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBz
b3VyY2VSR0IgfHwKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxw
aGEgfHwKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8CisgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCisgICAgeworICAgICAgICBtU3Rh
dGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRS
R0IgPSBkZXN0UkdCOworICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFs
cGhhOworICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7CisgICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRC
bGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhh
KQoreworICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8CisgICAgICAgIG1T
dGF0ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmJsdWUgIT0gYmx1ZSB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBh
bHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKKyAgICAg
ICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmJsZW5k
Q29sb3IuYmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxw
aGE7CisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhh
RXF1YXRpb24pCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0
aW9uIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlv
bikKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247
CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOworICAg
ICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbFRl
c3QgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJs
ZWQ7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29s
IENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLnN0ZW5jaWxUZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xl
bnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCit7
CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAorICAgICAgICBt
U3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2ls
TWFzayAhPSBzdGVuY2lsTWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9
IHN0ZW5jaWxGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4g
MCkgPyBzdGVuY2lsUmVmIDogMDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNp
bE1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMs
IEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQoreworICAgIGlm
IChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAorICAgICAgICBt
U3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCisgICAgeworICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOworICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKK3sKKyAgICBpZiAo
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKKyAgICB7CisgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKKyAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQoreworICAg
IGlmIChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2sp
CisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFj
a1dyaXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWls
LCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFz
cykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8CisgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8
fAorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZh
aWw7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVw
dGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNr
RmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzcykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVu
Y2lsQmFja0ZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAh
PSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCisgICAgeworICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOworICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwor
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCit7Cisg
ICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKKyAgICAgICAgbVBvbHlnb25P
ZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucG9seWdv
bk9mZnNldEZpbGw7CisKK30KKwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1z
KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIGlmIChtU3RhdGUucG9seWdv
bk9mZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRV
bml0cyAhPSB1bml0cykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
ID0gZmFjdG9yOworICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Cisg
ICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7CisgICAg
ICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOworICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxl
QWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1w
bGVBbHBoYVRvQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2Uo
Ym9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxl
ZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7CisgICAg
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6
aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMo
R0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292
ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fAorICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZl
cnQgIT0gaW52ZXJ0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0Owor
ICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBl
bmFibGVkOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
Ym9vbCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdGF0ZS5zY2lzc29yVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBl
bmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCisgICAgeworICAg
ICAgICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkg
PSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOworfQorCit2b2lkIENvbnRleHQ6OnNldExp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKQoreworICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsK
K30KKwordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCit7
CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCit7CisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7CisgICAgbVN0YXRlLnZp
ZXdwb3J0WSA9IHk7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKKyAgICBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3Nv
clBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZICE9IHkg
fHwgCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNz
b3JIZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0geDsK
KyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0
aCA9IHdpZHRoOworICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEp
Cit7CisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAhPSBibHVl
IHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tSZWQgPSByZWQ7CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IGdy
ZWVuOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOworICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQorewor
ICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCisgICAgeworICAgICAgICBtU3RhdGUu
ZGVwdGhNYXNrID0gbWFzazsKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKQoreworICAg
IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuZnJhbWVidWZm
ZXI7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuYXJyYXlC
dWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25l
ZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1FbmFibGVkID0gZW5hYmxlZDsKK30KKworY29uc3QgQXR0cmlidXRl
U3RhdGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pCit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKK30K
Kwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtLCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tQm91bmRCdWZmZXIgPSBib3VuZEJ1ZmZlcjsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXplOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOworfQorCitjb25zdCB2b2lk
ICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
UG9pbnRlcjsKK30KKworLy8gcmV0dXJucyBlbnRpcmUgc2V0IG9mIGF0dHJpYnV0ZXMgYXMgYSBi
bG9jaworY29uc3QgQXR0cmlidXRlU3RhdGUgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkJsb2Nr
KCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKK3sKKyAgICBtU3RhdGUucGFj
a0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdu
bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworfQorCit2
b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAg
bVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6
Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFja0Fs
aWdubWVudDsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKK0dMdWludCBD
b250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwor
CisgICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5kKCkp
CisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtQnVmZmVyTWFwW2hhbmRs
ZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVz
ZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlICht
U2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpIHx8IG1Qcm9ncmFtTWFw
LmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFj
ZQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gR0xf
VkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBW
ZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBH
TF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBu
ZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQg
cHJvZ3JhbS9zaGFkZXIgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQorewor
ICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZp
bmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxl
KSAhPSBtU2hhZGVyTWFwLmVuZCgpKSAgIC8vIFNoYXJlZCBuYW1lIHNwYWNlCisgICAgeworICAg
ICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFBy
b2dyYW0oKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2Vk
IHRleHR1cmUgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHVu
c2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFu
ZGxlKSAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAg
IH0KKworICAgIG1UZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRs
ZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQorR0x1aW50IENv
bnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0g
MTsKKworICAgIHdoaWxlIChtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1GcmFtZWJ1
ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1G
cmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
Ky8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCitHTHVpbnQgQ29udGV4dDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKwor
ICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVyYnVmZmVy
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbVJlbmRl
cmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgQnVmZmVyTWFw
OjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKKworICAg
IGlmIChidWZmZXJPYmplY3QgIT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRl
dGFjaEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgIGRlbGV0ZSBidWZmZXJPYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJPYmplY3QpOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBTaGFkZXJN
YXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFkZXIpOworCisg
ICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
aWYgKCFzaGFkZXJPYmplY3QtPnNlY29uZC0+aXNBdHRhY2hlZCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2hhZGVy
TWFwLmVyYXNlKHNoYWRlck9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtT2JqZWN0ID0g
bVByb2dyYW1NYXAuZmluZChwcm9ncmFtKTsKKworICAgIGlmIChwcm9ncmFtT2JqZWN0ICE9IG1Q
cm9ncmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gIT0gbVN0YXRlLmN1
cnJlbnRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVj
dC0+c2Vjb25kOworICAgICAgICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgVGV4
dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZSk7CisKKyAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7
CisgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHRleHR1cmVPYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgfQorCisgICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3Qp
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpCit7CisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2Jq
ZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOworCisgICAgaWYgKGZyYW1l
YnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRl
dGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgZnJhbWVidWZm
ZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVm
ZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciBy
ZW5kZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsK
KworICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworCisgICAg
ICAgIGRlbGV0ZSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbVJlbmRlcmJ1
ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVm
ZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOworICAgIH0KKworICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ciA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVu
c2lnbmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIo
YnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIo
KTsKKyAgICB9CisKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gYnVmZmVyOworfQor
Cit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYg
KCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIG1U
ZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmUyRCh0aGlzKTsKKyAgICB9CisKKyAgICBt
U3RhdGUudGV4dHVyZTJEID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtT
QU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworfQorCit2b2lkIENv
bnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAoIWdl
dFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQorICAgIHsKKyAgICAgICAgbVRleHR1
cmVNYXBbdGV4dHVyZV0gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgfQorCisgICAg
bVN0YXRlLnRleHR1cmVDdWJlTWFwID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXSA9IHRleHR1cmU7Cit9CisK
K3ZvaWQgQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1GcmFt
ZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICB9CisKKyAg
ICBtU3RhdGUuZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0Ojpi
aW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKHJlbmRlcmJ1
ZmZlciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IG5ldyBSZW5kZXJidWZmZXIoKTsK
KyAgICB9CisKKyAgICBtU3RhdGUucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyOworfQorCit2
b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgUHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTHVpbnQgcHJpb3JQ
cm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0
byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KKworICAgIGlmIChwcm9n
cmFtT2JqZWN0ICYmIHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkpCisgICAg
eworICAgICAgICBkZWxldGVQcm9ncmFtKHByaW9yUHJvZ3JhbSk7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQoreworICAg
IGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVm
ZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yYnVmZmVyWmVybyhDb2xvcmJ1ZmZlciAq
YnVmZmVyKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJvOworICAgIG1Db2xvcmJ1ZmZl
clplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhidWZmZXJaZXJvKERl
cHRoYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAg
bURlcHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2ls
YnVmZmVyWmVybyhTdGVuY2lsYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1TdGVuY2ls
YnVmZmVyWmVybzsKKyAgICBtU3RlbmNpbGJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQg
Q29udGV4dDo6c2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRl
bGV0ZSBtUmVuZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdOworICAgIG1SZW5kZXJi
dWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl0gPSBidWZmZXI7Cit9CisKK0J1ZmZlciAqQ29u
dGV4dDo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgQnVmZmVyTWFwOjpp
dGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChidWZm
ZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7CisgICAg
fQorfQorCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQor
eworICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRs
ZSk7CisKKyAgICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNo
YWRlci0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbSh1
bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0g
PSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3Jh
bU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgIH0KK30KKworVGV4
dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGlm
IChoYW5kbGUgPT0gMCkgcmV0dXJuIE5VTEw7CisKKyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0
ZXh0dXJlID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHRleHR1cmUgPT0g
bVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsKKyAgICB9Cit9
CisKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFt
ZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1l
YnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOworICAgIH0K
K30KKworUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKK3sKKyAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9
IG1SZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHJlbmRlcmJ1ZmZlciA9
PSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29u
ZDsKKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpDb250ZXh0OjpnZXRDb2xvcmJ1ZmZlcihHTHVp
bnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAg
ICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yYnVmZmVyKj4ocmVu
ZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gU3BlY2lhbCBjYXNl
OiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNlZCBvbiB0
aGUgYXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVyWmVy
bzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRGVwdGhidWZmZXIgKkNvbnRleHQ6
OmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSAhPSAwKQor
ICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVyYnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+
aXNEZXB0aGJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHJlbmRl
ciB0YXJnZXRzIGJhc2VkIG9uIHRoZSBhdHRhY2htZW50IHR5cGUKKyAgICB7CisgICAgICAgIHJl
dHVybiBtRGVwdGhidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitT
dGVuY2lsYnVmZmVyICpDb250ZXh0OjpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpCit7
CisgICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJidWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVy
YnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGVuY2lsYnVmZmVyKj4ocmVuZGVyYnVmZmVy
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbVN0
ZW5jaWxidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitCdWZmZXIg
KkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0
ZS5hcnJheUJ1ZmZlcik7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIp
OworfQorCitQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCit7CisgICAgcmV0
dXJuIGdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKK30KKworVGV4dHVyZTJEICpD
b250ZXh0OjpnZXRUZXh0dXJlMkQoKQoreworICAgIGlmIChtU3RhdGUudGV4dHVyZTJEID09IDAp
ICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJl
cyBiYXNlZCBvbiB0aGUgdGFyZ2V0CisgICAgeworICAgICAgICByZXR1cm4gbVRleHR1cmUyRFpl
cm87CisgICAgfQorCisgICAgcmV0dXJuIChUZXh0dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRl
eHR1cmUyRCk7Cit9CisKK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1h
cCgpCit7CisgICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9PSAwKSAgIC8vIFNwZWNpYWwg
Y2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhl
IHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAg
fQorCisgICAgcmV0dXJuIChUZXh0dXJlQ3ViZU1hcCopZ2V0VGV4dHVyZShtU3RhdGUudGV4dHVy
ZUN1YmVNYXApOworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNp
Z25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBHTHVpbnQgdGV4aWQg
PSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07CisKKyAgICBpZiAodGV4aWQg
PT0gMCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOiByZXR1
cm4gbVRleHR1cmUyRFplcm87CisgICAgICAgICAgY2FzZSBTQU1QTEVSX0NVQkU6IHJldHVybiBt
VGV4dHVyZUN1YmVNYXBaZXJvOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdldFRl
eHR1cmUodGV4aWQpOworfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIo
KQoreworICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUuZnJhbWVidWZmZXIpOworfQor
Citib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJh
bXMpCit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1NIQURFUl9D
T01QSUxFUjogICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNr
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoK
KyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKKyAgICAgICAgcGFyYW1z
WzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUu
Y29sb3JNYXNrQmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhh
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7CisgICAgICBj
YXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9U
RVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRl
c3Q7CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kZXB0aFRlc3Q7CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsKKyAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250
ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgLy8g
UGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5h
bCBnZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBh
cyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVz
CisgICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQg
d291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxk
IG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0
Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHln
b25PZmZzZXRGYWN0b3I7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5J
VFM6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0g
PSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1zWzFdID0g
Z2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICAgIHBhcmFtc1swXSA9IGds
OjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOworICAgICAgICBwYXJhbXNbMV0gPSBnbDo6
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0RFUFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7CisgICAg
ICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQ09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmdyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7
CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgcGFyYW1zWzBd
ID0gbVN0YXRlLmJsZW5kQ29sb3IucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxl
bmRDb2xvci5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1
ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJf
VkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1l
bnRhdGlvbgorICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUg
dGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKKyAgICAvLyBHZXRJbnRlZ2Vy
diBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZl
cnNpb24gaW4gYW55CisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNl
IHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCisgICAgLy8g
Q29udGV4dDo6Z2V0RmxvYXR2LgorICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVD
VE9SUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZBUllJTkdfVkVDVE9SUzsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzogKnBhcmFtcyA9IGdsOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAq
cGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJhbXMgPSBn
bDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdsOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJf
U0laRTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllf
Rk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAvKiBubyBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
cjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzog
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVidWZmZXI7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlBB
Q0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGln
bm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1B
UF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7
IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxl
bmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdC
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfU0laRTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGds
OjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFUzog
ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZ
UEU7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9S
TUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heCgoaW50KWdsOjpNQVhfUkVOREVSQlVGRkVS
X1NJWkUsIChpbnQpZ2w6Ok1BWF9URVhUVVJFX1NJWkUpOworICAgICAgICAgICAgcGFyYW1zWzBd
ID0gbWF4RGltZW5zaW9uOworICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAg
ICAgcGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0
YXRlLnZpZXdwb3J0WTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7
CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3Rh
dGUuc2Npc3Nvclg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKKyAgICAg
ICAgcGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsKKyAgICAgICAgcGFyYW1zWzNdID0g
bVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklU
UzoKKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVl
blNpemUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpw
YXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhh
U2l6ZSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
UFRIX0JJVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworCisgICAgICAgICAg
ICBpZiAoZGVwdGhidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVy
ICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAg
ICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBt
U3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0
ZS5hY3RpdmVTYW1wbGVyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVu
dW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQoreworICAgIC8vIFBsZWFzZSBub3Rl
OiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBp
bXBsZW1lbnRhdGlvbgorICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQg
YmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUKKyAgICAvLyB0
byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBz
byB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KKyAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRl
eHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1l
bnRlZCAKKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRv
IHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFibGUsIHdlCisgICAgLy8gcGxhY2Ug
REVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRp
ZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKKyAgICAvLyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0Y2gg
KHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6
IC8qIG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gCisgICAg
ICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgICAgeworICAgICAgICAgICAg
KnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAg
Y2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZB
UllJTkdfVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJf
U0laRToKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgIGNh
c2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgY2FzZSBHTF9BUlJB
WV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVUlJFTlRf
UFJPR1JBTToKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX1VO
UEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgorICAg
ICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKKyAgICAgIGNh
c2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgorICAgICAgY2FzZSBH
TF9ERVBUSF9CSVRTOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6CisgICAgICBjYXNlIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVTExfRkFDRV9N
T0RFOgorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgorICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVY
VFVSRToKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1ZBTFVFX01BU0s6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOgorICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZVTkM6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfREVQ
VEhfRlVOQzoKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjoKKyAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOgorICAgICAgY2FzZSBH
TF9CTEVORF9EU1RfQUxQSEE6CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoKKyAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
V1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRT
OgorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUzoKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9UWVBFOgorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgorICAgICAgY2FzZSBHTF9URVhUVVJF
X0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgIGNhc2UgR0xf
U0NJU1NPUl9CT1g6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAg
ICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjoKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
X0lOVkVSVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9D
VUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIC8vIENVTExfRkFDRSB0aHJvdWdoIERJVEhFUiBhcmUg
bmF0dXJhbCB0byBJc0VuYWJsZWQsCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVy
aWVzLgorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlz
IHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwKKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFOgorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDoKKyAgICAg
IGNhc2UgR0xfQkxFTkQ6CisgICAgICBjYXNlIEdMX0RJVEhFUjoKKyAgICAgICAgeworICAgICAg
ICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAg
ICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBh
cmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICAgIGNhc2UgR0xfREVQVEhf
Q0xFQVJfVkFMVUU6CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6CisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICBj
YXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZM
T0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9CTEVO
RF9DT0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKKyAgICAg
ICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5j
aWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAorLy8gc2Npc3NvciByZWN0YW5nbGUg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0
KGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7CisKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRG
cmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZl
ck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAg
eworICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aFN0ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAgaWYgKHJlbmRlclRh
cmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKKyAgICB7CisgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CisgICAgICAgIG1BcHBs
aWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIH0KKworICAg
IHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRE
ZXB0aGJ1ZmZlclNlcmlhbCgpOworICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7CisgICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJp
YWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB9CisKKyAgICBEM0RWSUVXUE9SVDkgdmlld3Bv
cnQ7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNj
KCZkZXNjKTsKKworICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKKyAgICB7CisgICAgICAgIHZpZXdw
b3J0LlggPSAwOworICAgICAgICB2aWV3cG9ydC5ZID0gMDsKKyAgICAgICAgdmlld3BvcnQuV2lk
dGggPSBkZXNjLldpZHRoOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXNjLkhlaWdodDsK
KyAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSAx
LjBmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2aWV3cG9ydC5YID0gc3RkOjpt
YXgobVN0YXRlLnZpZXdwb3J0WCwgMCk7CisgICAgICAgIHZpZXdwb3J0LlkgPSBzdGQ6Om1heCht
U3RhdGUudmlld3BvcnRZLCAwKTsKKyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbiht
U3RhdGUudmlld3BvcnRXaWR0aCwgKGludClkZXNjLldpZHRoIC0gKGludCl2aWV3cG9ydC5YKTsK
KyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0SGVpZ2h0
LCAoaW50KWRlc2MuSGVpZ2h0IC0gKGludCl2aWV3cG9ydC5ZKTsKKyAgICAgICAgdmlld3BvcnQu
TWluWiA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IGNs
YW1wMDEobVN0YXRlLnpGYXIpOworICAgIH0KKworICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAw
IHx8IHZpZXdwb3J0LkhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIE5vdGhpbmcgdG8gcmVuZGVyCisgICAgfQorCisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgm
dmlld3BvcnQpOworCisgICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAg
IGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1QgcmVj
dCA9IHttU3RhdGUuc2Npc3NvclgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNj
aXNzb3JZLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0
ZS5zY2lzc29yV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZ
ICsgbVN0YXRlLnNjaXNzb3JIZWlnaHR9OworCisgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNz
b3JSZWN0KCZyZWN0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVT
VEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtU2Npc3NvclN0
YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFt
KQorICAgIHsKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9n
cmFtKCk7CisKKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4w
ZiAvIHZpZXdwb3J0LldpZHRoLCAxLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKKyAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCAoR0xmbG9hdCopJnh5
KTsKKworICAgICAgICBHTGludCB3aW5kb3cgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFdpbmRvd0xv
Y2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0
aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRo
IC8gMi4wZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3Bv
cnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07CisgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm00ZnYod2luZG93LCAxLCAoR0xmbG9hdCopJndoeHkpOworCisgICAgICAg
IEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAg
ICAgIEdMZmxvYXQgZHpbMl0gPSB7KG1TdGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyKSAvIDIuMGYs
IChtU3RhdGUuek5lYXIgKyBtU3RhdGUuekZhcikgLyAyLjBmfTsKKyAgICAgICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgKEdMZmxvYXQqKSZkeik7CisKKyAgICAgICAg
R0xpbnQgbmVhciA9IHByb2dyYW1PYmplY3QtPmdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKTsK
KyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihuZWFyLCAxLCAmbVN0YXRlLnpO
ZWFyKTsKKworICAgICAgICBHTGludCBmYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdl
RmFyTG9jYXRpb24oKTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihmYXIs
IDEsICZtU3RhdGUuekZhcik7CisKKyAgICAgICAgR0xpbnQgZGlmZiA9IHByb2dyYW1PYmplY3Qt
PmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCB6RGlmZiA9IG1T
dGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyOworICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlm
b3JtMWZ2KGRpZmYsIDEsICZ6RGlmZik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0
LCBhbHBoYSBibGVuZGluZywgc3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZp
Y2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTGludCBmcm9udENDVyA9IHBy
b2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGNjdyA9ICht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7CisgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFpdihmcm9udENDVywgMSwgJmNjdyk7CisKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBhbHdh
eXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7CisgICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworCisgICAgaWYg
KG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCisgICAgeworICAgICAgICBpZiAo
bVN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxs
TW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwg
RDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IGZh
bHNlOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAg
aWYgKG1TdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24o
bVN0YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9G
QUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0
YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAobVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVu
ZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0Qmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVz
MmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+KG1T
dGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENv
bG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNl
QmxlbmRSR0IpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVT
VEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVzMmR4OjpD
b252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOworCisgICAgICAgICAgICBp
ZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IAor
ICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RCbGVuZEFs
cGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OworCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVO
REFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkp
OworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
QUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOwor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhB
LCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOworCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFC
TEUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFj
ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBoYXNTdGVu
Y2lsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOworCisgICAgICAgICAgICAvLyBG
SVhNRTogVW5zdXBwb3J0ZWQgYnkgRDNEOQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RB
VEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKKyAgICAgICAg
ICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RS
U19TVEVOQ0lMTUFTSzsKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RS
U19DQ1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7CisgICAgICAg
ICAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3Jp
dGVtYXNrIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5z
dGVuY2lsQmFja1JlZiB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0g
bVN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBF
UlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFs
dWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBz
dGVuY2lsIHJlZgorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1
ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBHTHVp
bnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0g
MTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxG
VU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwor
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRl
LnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1h
eFN0ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBE
M0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0
ZW5jaWxQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19D
Q1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKworICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NX
ID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBE
M0RSU19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
OiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZB
SUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBB
U1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChtTWFza1N0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1T
dGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOwor
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgbVN0YXRl
LmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkKKyAgICB7
CisgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpLT5n
ZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVT
Q0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcikpOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsKKyAgICAgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQq
KSZkZXB0aEJpYXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVT
Q0FMRURFUFRIQklBUywgMCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0RFUFRIQklBUywgMCk7CisgICAgICAgIH0KKworICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobUNvbmZpZy0+bU11bHRpU2FtcGxl
ICE9IDAgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgRklYTUUoIlNhbXBs
ZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisK
KyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobURp
dGhlclN0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAg
ICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtRnJvbnRGYWNlRGly
dHkgPSBmYWxzZTsKK30KKworLy8gRmlsbCBpbiB0aGUgc2VtYW50aWNJbmRleCBmaWVsZCBvZiB0
aGUgYXJyYXkgb2YgVHJhbnNsYXRlZEF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBHTFNM
IHByb2dyYW0uCit2b2lkIENvbnRleHQ6Omxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJhbnNsYXRl
ZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5h
YmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4
ID0gZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0U2VtYW50aWNJbmRleChpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdMZW51bSBtb2Rl
LCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAqdXNlSW5kZXhpbmcsIFRyYW5zbGF0
ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5z
bGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGZpcnN0LCBjb3VudCwgdHJhbnNsYXRlZCk7Cisg
ICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKKworICAgIG1C
dWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmICh0cmFuc2xhdGVkW2ldLmVuYWJsZWQgJiYgdHJhbnNsYXRlZFtpXS5ub25BcnJheSkK
KyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZVJlbmRl
clZhbGlkYXRlVW5pbmRleGVkKG1vZGUsIGNvdW50LCBpbmRleEluZm8pOworICAgICAgICAgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtQnVmZmVyQmFja0VuZC0+
c2V0dXBJbmRpY2VzUHJlRHJhdygqaW5kZXhJbmZvKTsKKworICAgICAgICAgICAgKnVzZUluZGV4
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgICp1c2VJbmRleGluZyA9IGZhbHNlOworICAgIHJldHVybiBHTF9OT19FUlJP
UjsKK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRyYW5zbGF0
ZWRJbmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5z
bGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZv
Lm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCB0cmFuc2xhdGVkKTsKKworICAgIGlmIChl
cnIgPT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICBsb29rdXBBdHRyaWJ1dGVNYXBwaW5n
KHRyYW5zbGF0ZWQpOworCisgICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQ
cmVEcmF3KHRyYW5zbGF0ZWQpOworICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKKy8vIEFw
cGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCitHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCB2b2lk
ICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5z
bGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1vZGUsIHR5cGUsIGNvdW50LCBnZXRCdWZmZXIo
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciksIGluZGljZXMsIGluZGV4SW5mbyk7CisKKyAgICBp
ZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlckJhY2tFbmQtPnNl
dHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisgICAgfQorCisgICAgcmV0dXJuIGVycjsK
K30KKworLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKK3sKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAg
ICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UGl4ZWxTaGFkZXIoKTsKKworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRl
cik7CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CisKKyAgICBpZiAo
cHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtKQorICAgIHsKKyAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFt
T2JqZWN0LT5kaXJ0eUFsbFNhbXBsZXJzKCk7CisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbSA9IHBy
b2dyYW1PYmplY3QtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHByb2dyYW1PYmplY3QtPmFw
cGx5VW5pZm9ybXMoKTsKK30KKworLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIg
c3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAg
ICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNh
bXBsZXIrKykKKyAgICB7CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3Qt
PmdldFNhbXBsZXJNYXBwaW5nKHNhbXBsZXIpOworICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZXJUeXBlIHRleHR1cmVUeXBlID0gcHJv
Z3JhbU9iamVjdC0+Z2V0U2FtcGxlclR5cGUoc2FtcGxlcik7CisKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUp
OworCisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+aXNTYW1wbGVyRGlydHkoc2FtcGxl
cikgfHwgdGV4dHVyZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0
ZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1w
bGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7
CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNhbXBsZXIsIEQz
RFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKKworICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1Q
X01BR0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdGaWx0ZXIobWFnRmlsdGVyKSk7CisgICAgICAg
ICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmls
dGVyOworICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0
ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIpOworICAgICAgICAgICAgICAgICAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWlu
RmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXIsIHRleHR1cmUtPmdldFRleHR1cmUoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCBnZXRJ
bmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRT
YW1wbGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNh
bXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVy
ZShzYW1wbGVyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRTYW1w
bGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgCisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB2
b2lkKiBwaXhlbHMpCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVi
dWZmZXIoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZm
ZXItPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0
LT5HZXREZXNjKCZkZXNjKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNl
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZh
Y2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1F
TSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1V
TFRJU0FNUExFX05PTkUpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1w
bGVkIHJlbmRlciB0YXJnZXQKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRl
clRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKKworICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpCisgICAgeworICAgICAgICBzeXN0ZW1T
dXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAg
ICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAgICB9CisKKyAg
ICBEM0RMT0NLRURfUkVDVCBsb2NrOworICAgIFJFQ1QgcmVjdCA9IHtzdGQ6Om1heCh4LCAwKSwK
KyAgICAgICAgICAgICAgICAgc3RkOjptYXgoeSwgMCksCisgICAgICAgICAgICAgICAgIHN0ZDo6
bWluKHggKyB3aWR0aCwgKGludClkZXNjLldpZHRoKSwKKyAgICAgICAgICAgICAgICAgc3RkOjpt
aW4oeSArIGhlaWdodCwgKGludClkZXNjLkhlaWdodCl9OworCisgICAgcmVzdWx0ID0gc3lzdGVt
U3VyZmFjZS0+TG9ja1JlY3QoJmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICByZXR1cm47ICAgLy8gTm8g
c2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSAodW5zaWduZWQgY2hhciopbG9jay5wQml0czsKKyAgICB1bnNpZ25lZCBjaGFyICpk
ZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2
ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7CisKKyAgICBHTHNpemVpIG91dHB1dFBpdGNoID0g
Q29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIG1TdGF0ZS5wYWNrQWxpZ25tZW50KTsK
KworICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQor
ICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHI7CisgICAgICAgICAgICBmbG9h
dCBnOworICAgICAgICAgICAgZmxvYXQgYjsKKyAgICAgICAgICAgIGZsb2F0IGE7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICog
aSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKKyAg
ICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwor
ICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7
CisgICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAw
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgeHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2Ug
KyAyICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gMS4w
ZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgw
MDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwM0UwKSAqICgxLjBmIC8g
MHgwM0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHg3QzAwKSAqICgxLjBm
IC8gMHg3QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQq
KShzb3VyY2UgKyAyICogaSArIGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7CisgICAgICAgICAgICAgICAgICAg
IGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAg
ICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7CisgICAgICAgICAgICAg
ICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9BOFI4RzhCODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBsb2Nr
LlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAq
ICgxLjBmIC8gMHhGRjAwMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4
MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IChhcmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAg
ICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSAr
IGogKiBsb2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKKyAgICAg
ICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAw
RkYpOworICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBm
IC8gMHgwMDAwRkYwMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAw
MDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAg
ICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAw
MDAwKTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4w
ZiAvIDB4MDAwMDAzRkYpOworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZG
QzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJn
YiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiAr
IDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAorICAgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRQorICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQ
aXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCisgICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAx
MSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisK
KyAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXIo
R0xiaXRmaWVsZCBtYXNrKQoreworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9
IGdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICB7CisgICAgICAgIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
Z2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworICAgIERXT1JEIGZsYWdzID0gMDsKKworICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7CisKKyAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisg
ICAgeworICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICBpZiAo
bVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJf
WkJVRkZFUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0
aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICBH
THVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOworCisgICAgaWYgKChtYXNrICYgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUKSAmJiBkZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKKworICAg
ICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsU2l6ZSA9IGVzMmR4OjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7CisgICAg
ICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKKworICAgICAg
ICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxh
Z3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXNr
ICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldCh0cnVlKSkgICAvLyBDbGlwcyB0aGUg
Y2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CisgICAg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xP
Ul9BUkdCKHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5yZWQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JD
bGVhclZhbHVlLmJsdWUpKTsKKyAgICBmbG9hdCBkZXB0aCA9IGNsYW1wMDEobVN0YXRlLmRlcHRo
Q2xlYXJWYWx1ZSk7CisgICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUg
JiAweDAwMDAwMEZGOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgIEQzRFNVUkZBQ0VfREVT
QyBkZXNjOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICBib29sIGFs
cGhhVW5tYXNrZWQgPSAoZXMyZHg6OkdldEFscGhhU2l6ZShkZXNjLkZvcm1hdCkgPT0gMCkgfHwg
bVN0YXRlLmNvbG9yTWFza0FscGhhOworCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNp
bENsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2ls
VW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRD
b2xvckNsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKSAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNv
bG9yTWFza0dyZWVuICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVN0YXRlLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CisKKyAgICBpZiAobmVlZE1h
c2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKKyAgICB7CisgICAgICAg
IC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0
byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0
ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNl
IHRoYXQKKyAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KKyAgICAgICAgSFJFU1VMVCBo
cjsKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKKyAgICAgICAg
eworICAgICAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExf
U09MSUQpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRF
U1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZG
X1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFt
U291cmNlRnJlcSgwLCAxKTsKKworICAgICAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxv
Y2soJm1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKTsKKworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxM
KQorICAgICAgICB7CisgICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkNh
cHR1cmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxT
RSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9B
TFdBWVMpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZB
TFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNE
Q1VMTF9OT05FKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9E
RSwgRDNERklMTF9TT0xJRCk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisKKyAgICAgICAgaWYgKGZsYWdzICYg
RDNEQ0xFQVJfVEFSR0VUKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIChtU3RhdGUuY29sb3JNYXNrUmVkICAgPyBE
M0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLmNvbG9yTWFza0dyZWVu
ID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5jb2xvck1hc2tC
bHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAwKSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUuY29sb3JN
YXNrQWxwaGEgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIDogMCkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
dGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19U
V09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxXUklURU1BU0ssIG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQ
QVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7CisgICAgICAgICAgICBtU3RlbmNpbFN0YXRlRGly
dHkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAg
ICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRGVkYo
RDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKDAsIDEpOworCisgICAgICAgIHN0cnVjdCBWZXJ0ZXgKKyAgICAgICAgewor
ICAgICAgICAgICAgZmxvYXQgeCwgeSwgeiwgdzsKKyAgICAgICAgICAgIEQzRENPTE9SIGRpZmZ1
c2U7CisgICAgICAgIH07CisKKyAgICAgICAgVmVydGV4IHF1YWRbNF07CisgICAgICAgIHF1YWRb
MF0ueCA9IDAuMGY7CisgICAgICAgIHF1YWRbMF0ueSA9IChmbG9hdClkZXNjLkhlaWdodDsKKyAg
ICAgICAgcXVhZFswXS56ID0gMC4wZjsKKyAgICAgICAgcXVhZFswXS53ID0gMS4wZjsKKyAgICAg
ICAgcXVhZFswXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAgICAgcXVhZFsxXS54ID0gKGZsb2F0
KWRlc2MuV2lkdGg7CisgICAgICAgIHF1YWRbMV0ueSA9IChmbG9hdClkZXNjLkhlaWdodDsKKyAg
ICAgICAgcXVhZFsxXS56ID0gMC4wZjsKKyAgICAgICAgcXVhZFsxXS53ID0gMS4wZjsKKyAgICAg
ICAgcXVhZFsxXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAgICAgcXVhZFsyXS54ID0gMC4wZjsK
KyAgICAgICAgcXVhZFsyXS55ID0gMC4wZjsKKyAgICAgICAgcXVhZFsyXS56ID0gMC4wZjsKKyAg
ICAgICAgcXVhZFsyXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFsyXS5kaWZmdXNlID0gY29sb3I7
CisKKyAgICAgICAgcXVhZFszXS54ID0gKGZsb2F0KWRlc2MuV2lkdGg7CisgICAgICAgIHF1YWRb
M10ueSA9IDAuMGY7CisgICAgICAgIHF1YWRbM10ueiA9IDAuMGY7CisgICAgICAgIHF1YWRbM10u
dyA9IDEuMGY7CisgICAgICAgIHF1YWRbM10uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAgIGRp
c3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNE
UFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKFZlcnRleCkpOworCisgICAgICAgIGlm
IChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7CisgICAgICAgICAg
ICBkZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0aCwg
c3RlbmNpbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
LT5BcHBseSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZsYWdzKQorICAgIHsK
KyAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBmbGFncywgY29sb3IsIGRlcHRoLCBzdGVu
Y2lsKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCit7CisgICAgaWYgKCFtU3RhdGUuY3VycmVudFBy
b2dyYW0pCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgIH0KKworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBEM0RQUklNSVRJ
VkVUWVBFIHByaW1pdGl2ZVR5cGU7CisgICAgaW50IHByaW1pdGl2ZUNvdW50OworCisgICAgaWYo
IWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCwgJnByaW1pdGl2ZVR5cGUs
ICZwcmltaXRpdmVDb3VudCkpCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZShtb2RlKTsKKworICAgIFRyYW5z
bGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOworICAgIGJvb2wgdXNlSW5kZXhpbmc7CisgICAgR0xl
bnVtIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKG1vZGUsIGZpcnN0LCBjb3VudCwgJnVzZUluZGV4
aW5nLCAmaW5kZXhJbmZvKTsKKyAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKGVycik7CisgICAgfQorCisgICAgYXBwbHlTaGFkZXJzKCk7Cisg
ICAgYXBwbHlUZXh0dXJlcygpOworCisgICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxp
ZGF0ZVNhbXBsZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKKyAgICB7
CisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAgICAgaWYgKHVzZUluZGV4aW5n
KQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHBy
aW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4
LCBpbmRleEluZm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbkluZGV4KzEsIGluZGV4SW5mby5vZmZz
ZXQvaW5kZXhJbmZvLmluZGV4U2l6ZSwgcHJpbWl0aXZlQ291bnQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlKHBy
aW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRpY2VzKQoreworICAgIGlmICghbVN0YXRlLmN1cnJl
bnRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICB9CisKKyAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgIH0KKworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBEM0RQUklNSVRJ
VkVUWVBFIHByaW1pdGl2ZVR5cGU7CisgICAgaW50IHByaW1pdGl2ZUNvdW50OworCisgICAgaWYo
IWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCwgJnByaW1pdGl2ZVR5cGUs
ICZwcmltaXRpdmVDb3VudCkpCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZShtb2RlKTsKKworICAgIFRyYW5z
bGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOworICAgIEdMZW51bSBlcnIgPSBhcHBseUluZGV4QnVm
ZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKKyAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKGVycik7CisgICAg
fQorCisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvKTsKKyAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKGVycik7CisgICAg
fQorCisgICAgYXBwbHlTaGFkZXJzKCk7CisgICAgYXBwbHlUZXh0dXJlcygpOworCisgICAgaWYg
KCFnZXRDdXJyZW50UHJvZ3JhbSgpLT52YWxpZGF0ZVNhbXBsZXJzKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmICgh
Y3VsbFNraXBzRHJhdyhtb2RlKSkKKyAgICB7CisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUo
KTsKKyAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAt
KElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1h
eEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCBpbmRleEluZm8ub2Zmc2V0L2luZGV4SW5mby5p
bmRleFNpemUsIHByaW1pdGl2ZUNvdW50KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Zmlu
aXNoKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgSURpcmVjdDNEUXVl
cnk5ICpvY2NsdXNpb25RdWVyeSA9IE5VTEw7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KTsK
KworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlm
IChvY2NsdXNpb25RdWVyeSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICpz
YXZlZFN0YXRlID0gTlVMTDsKKyAgICAgICAgZGV2aWNlLT5DcmVhdGVTdGF0ZUJsb2NrKEQzRFNC
VF9BTEwsICZzYXZlZFN0YXRlKTsKKworICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNE
SVNTVUVfQkVHSU4pOworCisgICAgICAgIC8vIFJlbmRlciBzb21ldGhpbmcgb3V0c2lkZSB0aGUg
cmVuZGVyIHRhcmdldAorICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7
CisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgIGRldmljZS0+
U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFla
UkhXKTsKKyAgICAgICAgZmxvYXQgZGF0YVs0XSA9IHstMS4wZiwgLTEuMGYsIC0xLjBmLCAxLjBm
fTsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdQ
cmltaXRpdmVVUChEM0RQVF9QT0lOVExJU1QsIDEsIGRhdGEsIHNpemVvZihkYXRhKSk7CisKKyAg
ICAgICAgb2NjbHVzaW9uUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisKKyAgICAgICAgd2hp
bGUgKG9jY2x1c2lvblF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpID09
IFNfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFs
bG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAorICAgICAgICAg
ICAgU2xlZXAoMCk7CisgICAgICAgIH0KKworICAgICAgICBvY2NsdXNpb25RdWVyeS0+UmVsZWFz
ZSgpOworCisgICAgICAgIGlmIChzYXZlZFN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBz
YXZlZFN0YXRlLT5BcHBseSgpOworICAgICAgICAgICAgc2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmZsdXNoKCkKK3sKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBJRGlyZWN0M0RRdWVyeTkg
KmV2ZW50UXVlcnkgPSBOVUxMOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpOworCisgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKGV2ZW50UXVlcnkpCisg
ICAgeworICAgICAgICBldmVudFF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworCisgICAgICAg
IHdoaWxlIChldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpID09
IFNfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFs
bG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAorICAgICAgICAg
ICAgU2xlZXAoMCk7CisgICAgICAgIH0KKworICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7
CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkKK3sKKyAgICBt
SW52YWxpZEVudW0gPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRWYWx1
ZSgpCit7CisgICAgbUludmFsaWRWYWx1ZSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVj
b3JkSW52YWxpZE9wZXJhdGlvbigpCit7CisgICAgbUludmFsaWRPcGVyYXRpb24gPSB0cnVlOwor
fQorCit2b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVtb3J5KCkKK3sKKyAgICBtT3V0T2ZNZW1v
cnkgPSB0cnVlOworfQorCit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9w
ZXJhdGlvbigpCit7CisgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IHRydWU7Cit9
CisKKy8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVycm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcs
IGlmIGFueS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuNSBwYWdlIDEzLgorR0xl
bnVtIENvbnRleHQ6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobUludmFsaWRFbnVtKQorICAgIHsK
KyAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfRU5VTTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRWYWx1ZSkKKyAgICB7CisgICAgICAg
IG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9WQUxV
RTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRPcGVyYXRpb24pCisgICAgeworICAgICAgICBt
SW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKyAgICB9CisKKyAgICBpZiAobU91dE9mTWVtb3J5KQorICAgIHsKKyAgICAgICAg
bU91dE9mTWVtb3J5ID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7
CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24pCisgICAgewor
ICAgICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOworICAgIH0KKworICAgIHJl
dHVybiBHTF9OT19FUlJPUjsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UGl4ZWxTaGFk
ZXJQcm9maWxlKCkKK3sKKyAgICByZXR1cm4gbVBzUHJvZmlsZTsKK30KKworY29uc3QgY2hhciAq
Q29udGV4dDo6Z2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpCit7CisgICAgcmV0dXJuIG1Wc1Byb2Zp
bGU7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCit7Cisg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6CisgICAgLy8gSWYg
YSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5n
cyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0CisgICAgLy8gKGkuZS4gaW4g
dGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8u
CisKKyAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5hcnJheUJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmli
dXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlm
IChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyID09IGJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1
dGVdLm1Cb3VuZEJ1ZmZlciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4
dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4NDoKKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlz
IGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0
byB0aGF0IHRleHR1cmUgb2JqZWN0IGFyZQorICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmpl
Y3QgemVybworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09V
TlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVy
IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9PSB0ZXh0dXJl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0
eXBlXVtzYW1wbGVyXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6CisgICAgLy8gSWYg
YSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0
byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCisgICAgLy8gYXMg
aWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBv
ZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKKyAgICAvLyBpbWFn
ZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KKworICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAo
ZnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBmcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0
ZXh0dXJlKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQu
NCBwYWdlIDEwNzoKKyAgICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJv
dW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdo
CisgICAgLy8gQmluZEZyYW1lYnVmZmVyIGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdl
dCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJhbWVidWZmZXIgb2YgemVyby4KKworICAgIGlmIChtU3Rh
dGUuZnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBiaW5kRnJhbWVi
dWZmZXIoMCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihH
THVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDQuNCBwYWdlIDEwOToKKyAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRs
eSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRS
ZW5kZXJidWZmZXIKKyAgICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgUkVO
REVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCisKKyAgICBpZiAobVN0YXRlLnJlbmRlcmJ1ZmZl
ciA9PSByZW5kZXJidWZmZXIpCisgICAgeworICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwor
ICAgIH0KKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToK
KyAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1h
Z2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKKyAgICAv
LyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxl
ZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50CisgICAgLy8g
cG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBi
b3VuZCBmcmFtZWJ1ZmZlci4KKworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZy
YW1lYnVmZmVyKCk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBmcmFt
ZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CisgICAgfQorfQorCitU
ZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShTYW1wbGVyVHlwZSB0eXBlKQor
eworICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOworCisgICAgaWYg
KHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNvbG9yW10g
PSB7IDAsIDAsIDAsIDI1NSB9OworCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFNBTVBMRVJfMkQKKworICAgICAgICAgIGNh
c2UgU0FNUExFUl8yRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlMkQg
KmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQodGhpcyk7CisgICAgICAgICAgICAgICAgaW5j
b21wbGV0ZTJkLT5zZXRJbWFnZSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTQU1QTEVS
X0NVQkU6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNv
bXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0aGlzKTsKKworICAgICAgICAgICAgICBp
bmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUt
PnNldEltYWdlTmVnWCgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1ko
MCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIEdMX1JHQkEsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAg
aW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZU5lZ1ooMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMSwgY29sb3IpOworCisgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlQ3ViZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbUluY29t
cGxldGVUZXh0dXJlc1t0eXBlXSA9IHQ7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisKK2Jv
b2wgQ29udGV4dDo6Y3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5jdWxsRmFjZSAmJiBtU3RhdGUuY3VsbE1vZGUgPT0gR0xfRlJPTlRfQU5EX0JBQ0sg
JiYgaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOworfQorCitib29sIENvbnRleHQ6OmlzVHJpYW5n
bGVNb2RlKEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IGNhc2UgR0xfUE9JTlRTOgorICAgICAgY2FzZSBHTF9MSU5FUzoKKyAgICAgIGNhc2UgR0xfTElO
RV9MT09QOgorICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDb250ZXh0OjpoYXNTdGVuY2lsKCkKK3sKKyAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKGZyYW1lYnVm
ZmVyT2JqZWN0KQorICAgIHsKKyAgICAgICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlck9i
amVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7CisKKyAgICAgICAg
aWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCit7CisgICAgQVNTRVJUKGlu
ZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOworICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsK
KyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFs
dWVzWzNdOworCisgICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1ZXMoKTsK
K30KKwordm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKK3sKKyAgICBpZiAobUJ1
ZmZlckJhY2tFbmQtPnN1cHBvcnRJbnRJbmRpY2VzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7CisgICAgfQorCisgICAg
c3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9u
b3Rfb2YoJyAnKTsKKyAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOworICAgIH0KK30KKworY29uc3Qg
Y2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUV4dGVuc2lvblN0cmluZy5jX3N0cigpOworfQorCit9CisKK2V4dGVybiAiQyIKK3sKK2dsOjpD
b250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZykKK3sKKyAg
ICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNvbmZpZyk7Cit9CisKK3ZvaWQgZ2xEZXN0cm95Q29u
dGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBkZWxldGUgY29udGV4dDsKKworICAg
IGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkpCisgICAgeworICAgICAgICBnbDo6bWFr
ZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfQorfQorCit2b2lkIGdsTWFrZUN1cnJl
bnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJm
YWNlICpzdXJmYWNlKQoreworICAgIGdsOjptYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBz
dXJmYWNlKTsKK30KKworZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKQoreworICAg
IHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0ODcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRleHQuaDog
RGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQg
cGVyZm9ybWluZworLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVj
aWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgorCisjaWZuZGVmIElOQ0xVREVfQ09O
VEVYVF9IXworI2RlZmluZSBJTkNMVURFX0NPTlRFWFRfSF8KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZGVmaW5lIEVHTEFQSQorI2luY2x1ZGUgPEVHTC9l
Z2wuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlIDxtYXA+CisKKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZWdsCit7CitjbGFzcyBEaXNwbGF5Owor
Y2xhc3MgU3VyZmFjZTsKK2NsYXNzIENvbmZpZzsKK30KKworbmFtZXNwYWNlIGdsCit7CitzdHJ1
Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOworCitj
bGFzcyBCdWZmZXI7CitjbGFzcyBTaGFkZXI7CitjbGFzcyBQcm9ncmFtOworY2xhc3MgVGV4dHVy
ZTsKK2NsYXNzIFRleHR1cmUyRDsKK2NsYXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3MgRnJhbWVi
dWZmZXI7CitjbGFzcyBSZW5kZXJidWZmZXI7CitjbGFzcyBDb2xvcmJ1ZmZlcjsKK2NsYXNzIERl
cHRoYnVmZmVyOworY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2Vy
OworY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBC
bGl0OworCitlbnVtCit7CisgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTIsCisgICAgTUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAxMjgsCisgICAgTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDgs
CisgICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKKyAgICBNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAwLAorICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ID0gMTYsCisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDE2LAorICAgIE1BWF9S
RU5ERVJCVUZGRVJfU0laRSA9IDQwOTYsICAgLy8gRklYTUU6IFZlcmlmeQorICAgIE1BWF9EUkFX
X0JVRkZFUlMgPSAxLAorCisgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSBH
TF9SR0IsCisgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0gR0xfVU5TSUdORURf
U0hPUlRfNV82XzUKK307CisKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9N
SU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9IDEu
MGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOID0gMS4wZjsKK2Nv
bnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVggPSAxLjBmOworCitlbnVtIFNh
bXBsZXJUeXBlCit7CisgICAgU0FNUExFUl8yRCwKKyAgICBTQU1QTEVSX0NVQkUsCisKKyAgICBT
QU1QTEVSX1RZUEVfQ09VTlQKK307CisKK3N0cnVjdCBDb2xvcgoreworICAgIGZsb2F0IHJlZDsK
KyAgICBmbG9hdCBncmVlbjsKKyAgICBmbG9hdCBibHVlOworICAgIGZsb2F0IGFscGhhOworfTsK
KworLy8gSGVscGVyIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIHZlcnRleCBhdHRyaWJ1
dGUKK2NsYXNzIEF0dHJpYnV0ZVN0YXRlCit7CisgIHB1YmxpYzoKKyAgICBBdHRyaWJ1dGVTdGF0
ZSgpCisgICAgICAgIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFs
c2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUJvdW5kQnVmZmVyKDApLCBtRW5hYmxl
ZChmYWxzZSkKKyAgICB7CisgICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwOworICAgICAgICBt
Q3VycmVudFZhbHVlWzFdID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVsyXSA9IDA7CisgICAg
ICAgIG1DdXJyZW50VmFsdWVbM10gPSAxOworICAgIH0KKworICAgIC8vIEZyb20gVmVydGV4QXJy
YXlQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOworICAgIEdMaW50IG1TaXplOworICAgIGJvb2wg
bU5vcm1hbGl6ZWQ7CisgICAgR0xzaXplaSBtU3RyaWRlOyAvLyAwIG1lYW5zIG5hdHVyYWwgc3Ry
aWRlCisgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisKKyAgICBHTHVpbnQgbUJvdW5kQnVmZmVy
OyAvLyBDYXB0dXJlZCB3aGVuIFZlcnRleEFycmF5UG9pbnRlciBpcyBjYWxsZWQuCisKKyAgICBi
b29sIG1FbmFibGVkOyAvLyBGcm9tIEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKKwor
ICAgIGZsb2F0IG1DdXJyZW50VmFsdWVbNF07IC8vIEZyb20gVmVydGV4QXR0cmliNGYKK307CisK
Ky8vIEhlbHBlciBzdHJ1Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQorc3RydWN0IFN0YXRl
Cit7CisgICAgQ29sb3IgY29sb3JDbGVhclZhbHVlOworICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJW
YWx1ZTsKKyAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7CisKKyAgICBib29sIGN1bGxGYWNlOwor
ICAgIEdMZW51bSBjdWxsTW9kZTsKKyAgICBHTGVudW0gZnJvbnRGYWNlOworICAgIGJvb2wgZGVw
dGhUZXN0OworICAgIEdMZW51bSBkZXB0aEZ1bmM7CisgICAgYm9vbCBibGVuZDsKKyAgICBHTGVu
dW0gc291cmNlQmxlbmRSR0I7CisgICAgR0xlbnVtIGRlc3RCbGVuZFJHQjsKKyAgICBHTGVudW0g
c291cmNlQmxlbmRBbHBoYTsKKyAgICBHTGVudW0gZGVzdEJsZW5kQWxwaGE7CisgICAgR0xlbnVt
IGJsZW5kRXF1YXRpb25SR0I7CisgICAgR0xlbnVtIGJsZW5kRXF1YXRpb25BbHBoYTsKKyAgICBD
b2xvciBibGVuZENvbG9yOworICAgIGJvb2wgc3RlbmNpbFRlc3Q7CisgICAgR0xlbnVtIHN0ZW5j
aWxGdW5jOworICAgIEdMaW50IHN0ZW5jaWxSZWY7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrOwor
ICAgIEdMZW51bSBzdGVuY2lsRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7
CisgICAgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzOworICAgIEdMdWludCBzdGVuY2lsV3Jp
dGVtYXNrOworICAgIEdMZW51bSBzdGVuY2lsQmFja0Z1bmM7CisgICAgR0xpbnQgc3RlbmNpbEJh
Y2tSZWY7CisgICAgR0x1aW50IHN0ZW5jaWxCYWNrTWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEJh
Y2tGYWlsOworICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7CisgICAgR0xlbnVt
IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsKKyAgICBHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1h
c2s7CisgICAgYm9vbCBwb2x5Z29uT2Zmc2V0RmlsbDsKKyAgICBHTGZsb2F0IHBvbHlnb25PZmZz
ZXRGYWN0b3I7CisgICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0VW5pdHM7CisgICAgYm9vbCBzYW1w
bGVBbHBoYVRvQ292ZXJhZ2U7CisgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKKyAgICBHTGNsYW1w
ZiBzYW1wbGVDb3ZlcmFnZVZhbHVlOworICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7Cisg
ICAgYm9vbCBzY2lzc29yVGVzdDsKKyAgICBib29sIGRpdGhlcjsKKworICAgIEdMZmxvYXQgbGlu
ZVdpZHRoOworCisgICAgR0xlbnVtIGdlbmVyYXRlTWlwbWFwSGludDsKKworICAgIEdMaW50IHZp
ZXdwb3J0WDsKKyAgICBHTGludCB2aWV3cG9ydFk7CisgICAgR0xzaXplaSB2aWV3cG9ydFdpZHRo
OworICAgIEdMc2l6ZWkgdmlld3BvcnRIZWlnaHQ7CisgICAgZmxvYXQgek5lYXI7CisgICAgZmxv
YXQgekZhcjsKKworICAgIEdMaW50IHNjaXNzb3JYOworICAgIEdMaW50IHNjaXNzb3JZOworICAg
IEdMc2l6ZWkgc2Npc3NvcldpZHRoOworICAgIEdMc2l6ZWkgc2Npc3NvckhlaWdodDsKKworICAg
IGJvb2wgY29sb3JNYXNrUmVkOworICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CisgICAgYm9vbCBj
b2xvck1hc2tCbHVlOworICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CisgICAgYm9vbCBkZXB0aE1h
c2s7CisKKyAgICBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0IHNl
bGVjdG9yIC0gR0xfVEVYVFVSRTAKKyAgICBHTHVpbnQgYXJyYXlCdWZmZXI7CisgICAgR0x1aW50
IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICBHTHVpbnQgdGV4dHVyZTJEOworICAgIEdMdWludCB0
ZXh0dXJlQ3ViZU1hcDsKKyAgICBHTHVpbnQgZnJhbWVidWZmZXI7CisgICAgR0x1aW50IHJlbmRl
cmJ1ZmZlcjsKKyAgICBHTHVpbnQgY3VycmVudFByb2dyYW07CisKKyAgICBBdHRyaWJ1dGVTdGF0
ZSB2ZXJ0ZXhBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBHTHVpbnQgc2FtcGxl
clRleHR1cmVbU0FNUExFUl9UWVBFX0NPVU5UXVtNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisK
KyAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7CisgICAgR0xpbnQgcGFja0FsaWdubWVudDsKK307
CisKK2NsYXNzIENvbnRleHQKK3sKKyAgcHVibGljOgorICAgIENvbnRleHQoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZyk7CisKKyAgICB+Q29udGV4dCgpOworCisgICAgdm9pZCBtYWtlQ3VycmVu
dChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisKKyAgICB2
b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisKKyAgICAvLyBTdGF0ZSBtYW5pcHVsYXRpb24KKyAg
ICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwg
ZmxvYXQgYWxwaGEpOworCisgICAgdm9pZCBzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKTsKKwor
ICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKTsKKworICAgIHZvaWQgc2V0Q3Vs
bEZhY2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldEN1bGxNb2RlKEdMZW51bSBtb2RlKTsKKworICAgIHZvaWQgc2V0RnJv
bnRGYWNlKEdMZW51bSBmcm9udCk7CisKKyAgICB2b2lkIHNldERlcHRoVGVzdChib29sIGVuYWJs
ZWQpOworICAgIGJvb2wgaXNEZXB0aFRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKTsKKworICAgIHZvaWQgc2V0RGVwdGhSYW5nZShm
bG9hdCB6TmVhciwgZmxvYXQgekZhcik7CisgICAgCisgICAgdm9pZCBzZXRCbGVuZChib29sIGVu
YWJsZWQpOworICAgIGJvb2wgaXNCbGVuZEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0
QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291
cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpOworICAgIHZvaWQgc2V0QmxlbmRDb2xvcihmbG9h
dCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBz
ZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24p
OworCisgICAgdm9pZCBzZXRTdGVuY2lsVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNT
dGVuY2lsVGVzdEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0U3RlbmNpbFBhcmFtcyhH
TGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzayk7
CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBH
TGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzayk7CisgICAgdm9pZCBz
ZXRTdGVuY2lsV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsV3JpdGVtYXNrKTsKKyAgICB2b2lkIHNl
dFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzayk7CisgICAg
dm9pZCBzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVu
Y2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKTsKKyAgICB2b2lk
IHNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0g
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNz
KTsKKworICAgIHZvaWQgc2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKTsKKyAgICBi
b29sIGlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBv
bHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCisgICAg
dm9pZCBzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlz
U2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTYW1w
bGVDb3ZlcmFnZShib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYg
dmFsdWUsIGJvb2wgaW52ZXJ0KTsKKworICAgIHZvaWQgc2V0U2Npc3NvclRlc3QoYm9vbCBlbmFi
bGVkKTsKKyAgICBib29sIGlzU2Npc3NvclRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldERpdGhlcihib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNEaXRoZXJFbmFibGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKKworICAgIHZvaWQg
c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KTsKKworICAgIHZvaWQgc2V0Vmlld3Bv
cnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworCisgICAgdm9pZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVk
LCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgIHZvaWQgc2V0RGVwdGhN
YXNrKGJvb2wgbWFzayk7CisKKyAgICB2b2lkIHNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2ZSk7
CisKKyAgICBHTHVpbnQgZ2V0RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQg
Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgZ2V0QXJyYXlCdWZm
ZXJIYW5kbGUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNp
Z25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOworICAgIGNvbnN0IEF0dHJpYnV0ZVN0
YXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAgICB2
b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBi
b3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpw
b2ludGVyKTsKKyAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0pIGNvbnN0OworCisgICAgY29uc3QgQXR0cmlidXRlU3RhdGUgKmdldFZl
cnRleEF0dHJpYkJsb2NrKCk7CisKKyAgICB2b2lkIHNldFVucGFja0FsaWdubWVudChHTGludCBh
bGlnbm1lbnQpOworICAgIEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNvbnN0OworCisgICAg
dm9pZCBzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0UGFj
a0FsaWdubWVudCgpIGNvbnN0OworCisgICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOworICAgIEdM
dWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIEdMdWludCBjcmVhdGVQcm9ncmFt
KCk7CisgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQgY3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisKKyAgICB2b2lkIGRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQg
c2hhZGVyKTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZv
aWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1
ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdM
dWludCByZW5kZXJidWZmZXIpOworCisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CisgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwor
ICAgIHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4
dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdM
dWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5k
ZXJidWZmZXIpOworICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CisKKyAgICB2
b2lkIHNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpOworICAgIHZv
aWQgc2V0Q29sb3JidWZmZXJaZXJvKENvbG9yYnVmZmVyICpyZW5kZXJidWZmZXIpOworICAgIHZv
aWQgc2V0RGVwdGhidWZmZXJaZXJvKERlcHRoYnVmZmVyICpkZXB0aEJ1ZmZlcik7CisgICAgdm9p
ZCBzZXRTdGVuY2lsYnVmZmVyWmVybyhTdGVuY2lsYnVmZmVyICpzdGVuY2lsQnVmZmVyKTsKKyAg
ICB2b2lkIHNldFJlbmRlcmJ1ZmZlcihSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlcik7CisKKyAg
ICB2b2lkIHNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
cyk7CisKKyAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTaGFkZXIg
KmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWlu
dCBoYW5kbGUpOworICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7CisgICAg
RnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFJlbmRlcmJ1
ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIENvbG9yYnVmZmVyICpn
ZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhi
dWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZl
cihHTHVpbnQgaGFuZGxlKTsKKworICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKKyAgICBC
dWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIFByb2dyYW0gKmdldEN1cnJlbnRQ
cm9ncmFtKCk7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQoKTsKKyAgICBUZXh0dXJlQ3Vi
ZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVy
ZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSk7CisgICAgRnJhbWVidWZm
ZXIgKmdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUs
IEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdM
aW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xl
YW4gKnBhcmFtcyk7CisKKyAgICBib29sIGdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5h
bWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOworCisgICAgYm9vbCBh
cHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KTsKKyAgICB2b2lkIGFwcGx5U3Rh
dGUoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoR0xlbnVt
IG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBib29sICp1c2VJbmRleGluZywgVHJh
bnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZm
ZXIoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBw
bHlJbmRleEJ1ZmZlcihjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
bW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAg
R0xlbnVtIGFwcGx5Q291bnRpbmdJbmRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xlbnVtIGNvdW50
LCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIHZvaWQgYXBwbHlTaGFkZXJz
KCk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKCk7CisKKyAgICB2b2lkIHJlYWRQaXhlbHMoR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVs
ZCBtYXNrKTsKKyAgICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIGluZGljZXMpOworICAgIHZvaWQgZmlu
aXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworCisgICAgdm9pZCByZWNvcmRJbnZhbGlkRW51bSgp
OworICAgIHZvaWQgcmVjb3JkSW52YWxpZFZhbHVlKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlk
T3BlcmF0aW9uKCk7CisgICAgdm9pZCByZWNvcmRPdXRPZk1lbW9yeSgpOworICAgIHZvaWQgcmVj
b3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7CisKKyAgICBHTGVudW0gZ2V0RXJyb3Io
KTsKKworICAgIGNvbnN0IGNoYXIgKmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpOworICAgIGNvbnN0
IGNoYXIgKmdldFZlcnRleFNoYWRlclByb2ZpbGUoKTsKKworICAgIGNvbnN0IGNoYXIgKmdldEV4
dGVuc2lvblN0cmluZygpIGNvbnN0OworCisgICAgQmxpdCAqZ2V0QmxpdHRlcigpIHsgcmV0dXJu
IG1CbGl0OyB9CisKKyAgICBjb25zdCBEM0RDQVBTOSAmZ2V0RGV2aWNlQ2FwcygpIHsgcmV0dXJu
IG1EZXZpY2VDYXBzOyB9CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQ29udGV4dCk7CisKKyAgICB2b2lkIGxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJhbnNsYXRl
ZEF0dHJpYnV0ZSAqYXR0cmlidXRlcyk7CisKKyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQg
YnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZv
aWQgZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRldGFj
aFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKworICAgIFRleHR1cmUgKmdldElu
Y29tcGxldGVUZXh0dXJlKFNhbXBsZXJUeXBlIHR5cGUpOworCisgICAgYm9vbCBjdWxsU2tpcHNE
cmF3KEdMZW51bSBkcmF3TW9kZSk7CisgICAgYm9vbCBpc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJh
d01vZGUpOworICAgIGJvb2wgaGFzU3RlbmNpbCgpOworCisgICAgY29uc3QgZWdsOjpDb25maWcg
KmNvbnN0IG1Db25maWc7CisKKyAgICBTdGF0ZSAgIG1TdGF0ZTsKKworICAgIFRleHR1cmUyRCAq
bVRleHR1cmUyRFplcm87CisgICAgVGV4dHVyZUN1YmVNYXAgKm1UZXh0dXJlQ3ViZU1hcFplcm87
CisKKyAgICBDb2xvcmJ1ZmZlciAqbUNvbG9yYnVmZmVyWmVybzsKKyAgICBEZXB0aGJ1ZmZlciAq
bURlcHRoYnVmZmVyWmVybzsKKyAgICBTdGVuY2lsYnVmZmVyICptU3RlbmNpbGJ1ZmZlclplcm87
CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgQnVmZmVyKj4gQnVmZmVyTWFwOworICAg
IEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFNo
YWRlcio+IFNoYWRlck1hcDsKKyAgICBTaGFkZXJNYXAgbVNoYWRlck1hcDsKKworICAgIHR5cGVk
ZWYgc3RkOjptYXA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1hcDsKKyAgICBQcm9ncmFtTWFw
IG1Qcm9ncmFtTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFRleHR1cmUqPiBU
ZXh0dXJlTWFwOworICAgIFRleHR1cmVNYXAgbVRleHR1cmVNYXA7CisKKyAgICB0eXBlZGVmIHN0
ZDo6bWFwPEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsKKyAgICBGcmFtZWJ1
ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwg
UmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFwOworICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVu
ZGVyYnVmZmVyTWFwOworCisgICAgdm9pZCBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7CisgICAgc3Rk
OjpzdHJpbmcgbUV4dGVuc2lvblN0cmluZzsKKworICAgIEJ1ZmZlckJhY2tFbmQgKm1CdWZmZXJC
YWNrRW5kOworICAgIFZlcnRleERhdGFNYW5hZ2VyICptVmVydGV4RGF0YU1hbmFnZXI7CisgICAg
SW5kZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1hbmFnZXI7CisKKyAgICBCbGl0ICptQmxpdDsK
KworICAgIFRleHR1cmUgKm1JbmNvbXBsZXRlVGV4dHVyZXNbU0FNUExFUl9UWVBFX0NPVU5UXTsK
KworICAgIC8vIFJlY29yZGVkIGVycm9ycworICAgIGJvb2wgbUludmFsaWRFbnVtOworICAgIGJv
b2wgbUludmFsaWRWYWx1ZTsKKyAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOworICAgIGJvb2wg
bU91dE9mTWVtb3J5OworICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsKKwor
ICAgIGJvb2wgbUhhc0JlZW5DdXJyZW50OworCisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJv
Z3JhbTsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAg
dW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7CisKKyAgICBjb25zdCBjaGFy
ICptUHNQcm9maWxlOworICAgIGNvbnN0IGNoYXIgKm1Wc1Byb2ZpbGU7CisKKyAgICAvLyBzdGF0
ZSBjYWNoaW5nIGZsYWdzCisgICAgYm9vbCBtQ2xlYXJTdGF0ZURpcnR5OworICAgIGJvb2wgbUN1
bGxTdGF0ZURpcnR5OworICAgIGJvb2wgbURlcHRoU3RhdGVEaXJ0eTsKKyAgICBib29sIG1NYXNr
U3RhdGVEaXJ0eTsKKyAgICBib29sIG1QaXhlbFBhY2tpbmdTdGF0ZURpcnR5OworICAgIGJvb2wg
bUJsZW5kU3RhdGVEaXJ0eTsKKyAgICBib29sIG1TdGVuY2lsU3RhdGVEaXJ0eTsKKyAgICBib29s
IG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eTsKKyAgICBib29sIG1TY2lzc29yU3RhdGVEaXJ0eTsK
KyAgICBib29sIG1TYW1wbGVTdGF0ZURpcnR5OworICAgIGJvb2wgbUZyb250RmFjZURpcnR5Owor
ICAgIGJvb2wgbURpdGhlclN0YXRlRGlydHk7CisKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAq
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKKworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworfTsK
K30KKworZXh0ZXJuICJDIgoreworLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdM
CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcp
Owordm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgZ2xN
YWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBl
Z2w6OlN1cmZhY2UgKnN1cmZhY2UpOworZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQo
KTsKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGds
R2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpOworfQorCisjZW5kaWYgICAvLyBJ
TkNMVURFX0NPTlRFWFRfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBGcmFtZWJ1
ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4gSW1wbGVtZW50
cyBHTCBmcmFtZWJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDUuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvRnJhbWVidWZmZXIuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0
dXJlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK0ZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcigpCit7CisgICAgbUNvbG9yYnVmZmVyVHlwZSA9
IEdMX05PTkU7CisgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKworICAgIG1EZXB0aGJ1ZmZl
clR5cGUgPSBHTF9OT05FOworICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7CisKKyAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1TdGVuY2lsYnVmZmVySGFuZGxlID0gMDsK
K30KKworRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCit7Cit9CisKK3ZvaWQgRnJhbWVidWZm
ZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCit7Cisg
ICAgbUNvbG9yYnVmZmVyVHlwZSA9IHR5cGU7CisgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gY29s
b3JidWZmZXI7Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0
eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpCit7CisgICAgbURlcHRoYnVmZmVyVHlwZSA9IHR5cGU7
CisgICAgbURlcHRoYnVmZmVySGFuZGxlID0gZGVwdGhidWZmZXI7Cit9CisKK3ZvaWQgRnJhbWVi
dWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVy
KQoreworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IHR5cGU7CisgICAgbVN0ZW5jaWxidWZmZXJI
YW5kbGUgPSBzdGVuY2lsYnVmZmVyOworfQorCit2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0
dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIGlmIChtQ29sb3JidWZmZXJIYW5kbGUgPT0gdGV4
dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCisgICAgeworICAgICAg
ICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxl
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYg
SXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAgIHsKKyAgICAgICAgbURlcHRo
YnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7Cisg
ICAgfQorCisgICAgaWYgKG1TdGVuY2lsYnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0
dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCisgICAgeworICAgICAgICBtU3RlbmNpbGJ1
ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IDA7Cisg
ICAgfQorfQorCit2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJl
bmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAobUNvbG9yYnVmZmVySGFuZGxlID09IHJlbmRlcmJ1ZmZl
ciAmJiBtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7CisgICAgICAg
IG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtQ29sb3JidWZmZXJIYW5kbGUg
PSAwOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJIYW5kbGUgPT0gcmVuZGVyYnVmZmVy
ICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAgICAgICAg
bURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9
IDA7CisgICAgfQorCisgICAgaWYgKG1TdGVuY2lsYnVmZmVySGFuZGxlID09IHJlbmRlcmJ1ZmZl
ciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAgICAg
ICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJI
YW5kbGUgPSAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoKQoreworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRD
b2xvcmJ1ZmZlcigpOworCisgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbG9yYnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQorewor
ICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1ZmZlcigpOworCisgICAg
aWYgKGNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordW5zaWduZWQg
aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCit7CisgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAg
ICBpZiAoZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhidWZmZXItPmdl
dFNlcmlhbCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNl
OSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9
IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAo
ZGVwdGhidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhidWZmZXItPmdldERlcHRo
U3RlbmNpbCgpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitDb2xvcmJ1ZmZlciAq
RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0gTlVM
TDsKKworICAgIGlmIChtQ29sb3JidWZmZXJUeXBlID09IEdMX05PTkUpCisgICAgeworICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICBjb2xvcmJ1ZmZlciA9IE5VTEw7CisgICAgfQorICAg
IGVsc2UgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAg
ICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3JidWZmZXJI
YW5kbGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb2xvcmJ1ZmZlciA9IGNv
bnRleHQtPmdldFRleHR1cmUobUNvbG9yYnVmZmVySGFuZGxlKS0+Z2V0Q29sb3JidWZmZXIobUNv
bG9yYnVmZmVyVHlwZSk7CisgICAgfQorCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVm
ZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gY29sb3JidWZmZXI7
CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0RlcHRoYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhidWZmZXIoKQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKyAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXRE
ZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOworCisgICAgaWYgKGRlcHRoYnVmZmVyICYm
IGRlcHRoYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCisgICAgeworICAgICAgICByZXR1cm4gZGVw
dGhidWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1N0ZW5jaWxidWZmZXIg
KkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUpOworCisg
ICAgaWYgKHN0ZW5jaWxidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlci0+aXNTdGVuY2lsYnVmZmVyKCkp
CisgICAgeworICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUoKQor
eworICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6
OmdldERlcHRoYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7Cit9
CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQoreworICAgIHJl
dHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3JidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVybiBtQ29sb3JidWZmZXJIYW5kbGU7Cit9CisK
K0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVy
biBtRGVwdGhidWZmZXJIYW5kbGU7Cit9CisKK0dMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVySGFuZGxlOworfQor
CitHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCit7CisgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBp
bnQgaGVpZ2h0ID0gMDsKKworICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCisg
ICAgeworICAgICAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1ZmZlcigp
OworCisgICAgICAgIGlmICghY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBjb2xvcmJ1ZmZlci0+
Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIHdpZHRo
ID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVy
LT5nZXRIZWlnaHQoKTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+
Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAgICAgICBpZiAoIWRlcHRo
YnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlcHRoYnVmZmVy
LT5nZXRXaWR0aCgpID09IDAgfHwgZGVwdGhidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgd2lkdGggPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAg
IGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgU3Rl
bmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0
ZW5jaWxidWZmZXJIYW5kbGUpOworCisgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgp
ID09IDAgfHwgc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICB3aWR0aCA9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQg
PSBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBzdGVuY2ls
YnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIEZyYW1lYnVmZmVyLmg6IERlZmluZXMgdGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4g
SW1wbGVtZW50cyBHTCBmcmFtZWJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlv
bmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDUuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GUkFNRUJVRkZF
Ul9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIENvbG9yYnVmZmVyOworY2xhc3MgRGVwdGhidWZmZXI7CitjbGFzcyBT
dGVuY2lsYnVmZmVyOworCitjbGFzcyBGcmFtZWJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgRnJh
bWVidWZmZXIoKTsKKworICAgIH5GcmFtZWJ1ZmZlcigpOworCisgICAgdm9pZCBzZXRDb2xvcmJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKTsKKyAgICB2b2lkIHNldERlcHRo
YnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpOworICAgIHZvaWQgc2V0U3Rl
bmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpOworCisgICAgdm9p
ZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGRldGFjaFJlbmRlcmJ1
ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7
CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAgdW5zaWdu
ZWQgaW50IGdldERlcHRoYnVmZmVyU2VyaWFsKCk7CisKKyAgICBDb2xvcmJ1ZmZlciAqZ2V0Q29s
b3JidWZmZXIoKTsKKyAgICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKKyAgICBTdGVu
Y2lsYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZm
ZXJUeXBlKCk7CisgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOworICAgIEdMZW51bSBn
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpOworCisgICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxl
KCk7CisgICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgR0x1aW50IGdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKTsKKworICAgIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CisKKyAg
ICBHTHVpbnQgbUNvbG9yYnVmZmVySGFuZGxlOworICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBl
OworCisgICAgR0x1aW50IG1EZXB0aGJ1ZmZlckhhbmRsZTsKKyAgICBHTGVudW0gbURlcHRoYnVm
ZmVyVHlwZTsKKworICAgIEdMdWludCBtU3RlbmNpbGJ1ZmZlckhhbmRsZTsKKyAgICBHTGVudW0g
bVN0ZW5jaWxidWZmZXJUeXBlOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0ZSQU1F
QlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
NjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAu
MyBwYWdlIDI4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKworI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgor
CituYW1lc3BhY2UgZ2wKK3sKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNlcmlhbCA9
IDE7CisKK3N0ZDo6c3RyaW5nIHN0cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07Cisg
ICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSksIGFycmF5U2l6ZShh
cnJheVNpemUpCit7CisgICAgaW50IGJ5dGVzID0gVW5pZm9ybVR5cGVTaXplKHR5cGUpICogYXJy
YXlTaXplOworICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgbWVtc2V0
KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICBkaXJ0eSA9IHRydWU7CisgICAgaGFuZGxlc1NldCA9IGZh
bHNlOworfQorCitVbmlmb3JtOjp+VW5pZm9ybSgpCit7CisgICAgZGVsZXRlW10gZGF0YTsKK30K
KworVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorICAgIDogbmFt
ZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCit7Cit9CisKK1Byb2dyYW06
OlByb2dyYW0oKQoreworICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7CisKKyAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7CisgICAgbUNv
bnN0YW50VGFibGVWUyA9IE5VTEw7CisKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbVZhbGlk
YXRlZCA9IGZhbHNlOworCisgICAgdW5saW5rKCk7CisKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFs
c2U7CisKKyAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKK30KKworUHJvZ3JhbTo6flByb2dy
YW0oKQoreworICAgIHVubGluayh0cnVlKTsKKworICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5V
TEwpCisgICAgeworICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICB9CisKKyAg
ICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCisgICAgeworICAgICAgICBtRnJhZ21lbnRT
aGFkZXItPmRldGFjaCgpOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRF
WF9TSEFERVIpCisgICAgeworICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRleFNo
YWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+YXR0
YWNoKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFn
bWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOworICAgICAgICBtRnJhZ21lbnRT
aGFkZXItPmF0dGFjaCgpOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFk
ZXIpCit7CisgICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0ZXhTaGFk
ZXItPmRldGFjaCgpOworICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAg
ZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsK
KyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1GcmFnbWVudFNoYWRl
ci0+ZGV0YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgfQorICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHVubGluaygpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2ludCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtVmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEg
OiAwKTsKK30KKworSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtOjpnZXRQaXhlbFNoYWRl
cigpCit7CisgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Cit9CisKK0lEaXJlY3QzRFZlcnRl
eFNoYWRlcjkgKlByb2dyYW06OmdldFZlcnRleFNoYWRlcigpCit7CisgICAgcmV0dXJuIG1WZXJ0
ZXhFeGVjdXRhYmxlOworfQorCit2b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihH
THVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKGluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRp
bmdbaV0uZXJhc2UobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBtQXR0cmlidXRlQmluZGlu
Z1tpbmRleF0uaW5zZXJ0KG5hbWUpOworICAgIH0KK30KKworR0x1aW50IFByb2dyYW06OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5hbWUpCisgICAg
eworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtp
bmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBQcm9ncmFtOjpnZXRTZW1hbnRpY0luZGV4KGludCBh
dHRyaWJ1dGVJbmRleCkKK3sKKyAgICBpZiAoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1
dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIHJldHVybiBtU2Vt
YW50aWNJbmRleFthdHRyaWJ1dGVJbmRleF07CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQor
CisvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSB1bml0IGNvcnJlc3BvbmRpbmcg
dG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIKKy8vIGluZGV4IHJlZmVyZW5jZWQgaW4gdGhlIGNvbXBp
bGVkIEhMU0wgc2hhZGVyCitHTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyh1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KQoreworICAgIGFzc2VydChzYW1wbGVySW5kZXggPCBzaXplb2Yo
bVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisKKyAgICBHTGludCBsb2dpY2FsVGV4
dHVyZVVuaXQgPSAtMTsKKworICAgIGlmIChtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUp
CisgICAgeworICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJl
VW5pdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxv
Z2ljYWxUZXh0dXJlVW5pdDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK1NhbXBsZXJU
eXBlIFByb2dyYW06OmdldFNhbXBsZXJUeXBlKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7
CisgICAgYXNzZXJ0KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2Ft
cGxlcnNbMF0pKTsKKyAgICBhc3NlcnQobVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsK
KworICAgIHJldHVybiBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBlOworfQorCitib29sIFBy
b2dyYW06OmlzU2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpIGNvbnN0Cit7
CisgICAgaWYgKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxl
cnNbMF0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRp
cnR5OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUHJvZ3JhbTo6c2V0U2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXgsIGJvb2wgZGlydHkpCit7CisgICAgaWYgKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2Ft
cGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzW3Nh
bXBsZXJJbmRleF0uZGlydHkgPSBkaXJ0eTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworfQorCitHTGludCBQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oY29uc3QgY2hhciAqbmFt
ZSwgYm9vbCBkZWNvcmF0ZWQpCit7CisgICAgc3RkOjpzdHJpbmcgbmFtZVN0cihuYW1lKTsKKyAg
ICBpbnQgc3Vic2NyaXB0ID0gMDsKKyAgICBzaXplX3QgYmVnaW5CID0gbmFtZVN0ci5maW5kKCdb
Jyk7CisgICAgc2l6ZV90IGVuZEIgPSBuYW1lU3RyLmZpbmQoJ10nKTsKKyAgICBpZiAoYmVnaW5C
ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGVuZEIgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
eworICAgICAgICBzdGQ6OnN0cmluZyBzdWJzY3JTdHIgPSBuYW1lU3RyLnN1YnN0cihiZWdpbkIg
KyAxLCBiZWdpbkIgLSBlbmRCIC0gMSk7CisgICAgICAgIG5hbWVTdHIuZXJhc2UoYmVnaW5CKTsK
KyAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShzdWJzY3JTdHIuY19zdHIoKSk7CisgICAgfQorCisg
ICAgaWYgKCFkZWNvcmF0ZWQpCisgICAgeworICAgICAgICBuYW1lU3RyID0gZGVjb3JhdGUobmFt
ZVN0cik7CisgICAgfQorCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1J
bmRleC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlv
biA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZVN0ciAmJgorICAgICAgICAgICAgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsK
K30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICB2
LCBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBm
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pLAorICAgICAgICAgICAgICAg
Ym9vbFBhcmFtcywgc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRl
IFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdM
ZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogMl07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
RkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDIsCisgICAgICAg
ICAgICAgICBib29sUGFyYW1zLCAyICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAg
ICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwor
CisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAzLAorICAgICAgICAgICAgICAgdiwg
MyAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAzXTsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICog
MywKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDMgKiBzaXplb2YoR0xib29sZWFuKSAqIGNv
dW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZSAK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAg
ICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDRdOworCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
Ym9vbGVhbikgKiA0LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgNCAqIHNpemVvZihHTGJv
b2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0K
KyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCisgICAgICAgICAgIHZhbHVlLCA0ICogc2l6ZW9mKEdM
ZmxvYXQpICogY291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6
c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
KworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogOSwKKyAgICAg
ICAgICAgdmFsdWUsIDkgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUNCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xmbG9hdCkgKiAxNiwKKyAgICAgICAgICAgdmFsdWUsIDE2ICogc2l6ZW9mKEdMZmxv
YXQpICogY291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0
VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xpbnQpLAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAg
ICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50XTsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9v
bGVhbiksCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFuKSAqIGNv
dW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKKyAgICAgICAgICAgICAg
IHYsIDIgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKKyAgICB7CisgICAgICAgIGludCBhcnJh
eVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6
ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDJdOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbikgKiAy
LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMiAqIHNpemVvZihHTGJvb2xlYW4pICogY291
bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAorICAgICAgICAgICAgICAg
diwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogM107CisKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDMs
CisgICAgICAgICAgICAgICBib29sUGFyYW1zLCAzICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3Vu
dCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDQsCisgICAgICAgICAgICAgICB2
LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiA0XTsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogNCwK
KyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDQgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50
KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW06OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCAqcGFy
YW1zKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgor
ICAgICAgICB7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IGNvdW50OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQ
YXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBtZW1j
cHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAorICAgICAgICAgICAgICAgY291bnQg
KiBzaXplb2YoR0xmbG9hdCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5UOgor
ICAgICAgICB7CisgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50Owor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFt
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAqcGFyYW1zKQor
eworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0
YXJnZXRVbmlmb3JtLT50eXBlKTsKKworICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUo
dGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAg
ICB7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGNvdW50OworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQYXJhbXNbaV07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZM
T0FUOgorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZs
b2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIGNvdW50OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdM
aW50KWZsb2F0UGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQgKiBz
aXplb2YoR0xpbnQpLAorICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW06OmRpcnR5QWxsVW5pZm9ybXMoKQorewor
ICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQor
ICAgIHsKKyAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOworICAgIH0KK30K
Kwordm9pZCBQcm9ncmFtOjpkaXJ0eUFsbFNhbXBsZXJzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICsraW5kZXgp
CisgICAgeworICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKKy8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBzZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmpl
Y3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMo
KQoreworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlm
b3JtczsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0t
PmRpcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworICAgICAgICAgICAgR0xmbG9hdCAqZiA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xpbnQgKmkgPSAoR0xpbnQqKXRhcmdldFVu
aWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGJvb2xlYW4gKmIgPSAoR0xib29sZWFuKil0YXJn
ZXRVbmlmb3JtLT5kYXRhOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5
cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgYXBw
bHlVbmlmb3JtMWJ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm0yYnYobG9jYXRpb24sIGFy
cmF5U2l6ZSwgYik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVD
MzogIGFwcGx5VW5pZm9ybTNidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtNGJ2KGxvY2F0
aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDogICAgICBhcHBseVVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IGFwcGx5VW5pZm9ybTJm
dihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogYXBwbHlVbmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYp
OyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBhcHBseVVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IGFwcGx5VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
YXJyYXlTaXplLCBmKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
YXBwbHlVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIGFycmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVDog
ICAgICAgIGFwcGx5VW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KGxv
Y2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9y
bTRpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hh
ZGVycyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKK0lEM0RYQnVmZmVyICpQcm9ncmFtOjpjb21w
aWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhD
b25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBpZiAoIWhsc2wpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRDNEWEJ1ZmZlciAqYmluYXJ5ID0g
TlVMTDsKKyAgICBJRDNEWEJ1ZmZlciAqZXJyb3JNZXNzYWdlID0gTlVMTDsKKworICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNEWENvbXBpbGVTaGFkZXIoaGxzbCwgKFVJTlQpc3RybGVuKGhsc2wpLCBO
VUxMLCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UsIGNv
bnN0YW50VGFibGUpOworCisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJpbmFyeTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRDNEWEJ1ZmZlciopTlVMTCk7CisgICAg
fQorCisgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1l
c3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7CisK
KyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCIlc1xuIiwgbWVzc2FnZSk7CisgICAgICAgIFRSQUNF
KCJcbiVzIiwgaGxzbCk7CisgICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2
YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hh
ZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTEx
CisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEg
aWYgdW5zdWNjZXNmdWwKK2ludCBQcm9ncmFtOjpwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdKQoreworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50
U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaW50IG4g
PSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKKyAgICAg
ICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBt
ID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IE1BWF9W
QVJZSU5HX1ZFQ1RPUlMgLSBuICYmICFzdWNjZXNzOyByKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsg
eCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+
Y29sID0gMDsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBtOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgLSBuOyBy
ID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFp
bGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZh
aWxhYmxlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0g
MjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYq
dmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IHNwYWNlWzRdID0gezB9OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IE1B
WF9WQVJZSU5HX1ZFQ1RPUlM7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOworCisg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPiBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1u
XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3BhY2Vb
Y29sdW1uXSA+IG4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBNQVhfVkFSWUlOR19WRUNUT1JTOyByKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47
CisKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIkNvdWxkIG5vdCBwYWNr
IHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBNQVhfVkFSWUlOR19WRUNUT1JTOyByKyspCisgICAgeworICAgICAgICBpZiAocGFj
a2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1ty
XVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitib29sIFByb2dyYW06OmxpbmtWYXJ5
aW5ncygpCit7CisgICAgaWYgKG1QaXhlbEhMU0wuZW1wdHkoKSB8fCBtVmVydGV4SExTTC5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFZh
cnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07CisgICAgaW50
IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhwYWNraW5nKTsKKworICAgIGlmIChyZWdpc3RlcnMg
PCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZWdp
c3RlcnMgPT0gTUFYX1ZBUllJTkdfVkVDVE9SUyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5aW5nIHJlZ2lz
dGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gbUZy
YWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBtRnJhZ21lbnRTaGFkZXIt
PnZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0g
ZmFsc2U7CisKKyAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gbVZl
cnRleFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IG1WZXJ0ZXhTaGFkZXItPnZh
cnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG91dHB1
dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+
c2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRo
ZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5j
b2wgPSBpbnB1dC0+Y29sOworCisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIW1hdGNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiRnJh
Z21lbnQgdmFyeWluZyB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWlu
ZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7
CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXR0
cmlidXRlLT50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAg
ICAgbVZlcnRleEhMU0wgKz0gZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09S
RCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKworICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICB9CisKKyAgICBtVmVy
dGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwor
CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAg
IGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8g
MyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKworICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiBURVhD
T09SRCIgKyBzdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQ0IGdsX0ZyYWdDb29yZCA6IFRFWENPT1JEIiArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Cisg
ICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgIlxu
IgorICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIK
KyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0
ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZShhdHRyaWJ1
dGUtPm5hbWUpICsgIiA9ICI7CisKKyAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4CisgICAgICAgIHsKKyAgICAgICAgICAgIG1WZXJ0
ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRleEhMU0wg
Kz0gIihpbnB1dC4iICsgZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIpO1xuIjsKKyAgICB9
CisKKyAgICBtVmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBnbF9t
YWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICIg
ICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bv
c2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eSA9IC0oZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xf
UG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGlm
IChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtVmVydGV4U2hh
ZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdz
LmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6
ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFi
bGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7CisgICAgICAgICAgICAgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOworCisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2Vk
IGJ5IG11bHRpcGxlIHZhcnlpbmdzCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1ty
XVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVy
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4
SExTTCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAwOiBtVmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogbVZlcnRleEhMU0wgKz0gInkiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1WZXJ0ZXhI
TFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiBtVmVydGV4SExTTCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
bVZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBz
dHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAg
IG1QaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgIntc
biI7CisgICAgCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFn
bWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXIt
PnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
KTsKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4g
KyAiIDogVEVYQ09PUkQiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBt
UGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6IFRFWENPT1JEIiArIHN0cihy
ZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobUZyYWdtZW50U2hh
ZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAg
IGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOworICAgIH0KKworICAgIG1QaXhlbEhMU0wgKz0gIn07
XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RydWN0IFBT
X09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQ0IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4iCisgICAgICAgICAgICAgICAgICAifTtc
biIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQg
bWFpbihQU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueCAqIHJodykgKiBkeF9XaW5kb3cueCArIGR4X1dpbmRvdy56O1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3Jk
LnkgKiByaHcpICogZHhfV2luZG93LnkgKyBkeF9XaW5kb3cudztcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3
KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBtUGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChp
bnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKKyAgICB9CisK
KyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVy
LT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAg
ICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSAr
ICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChy
b3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
bVBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIG1QaXhlbEhMU0wgKz0gIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAi
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xf
Q29sb3JbMF07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIFRS
QUNFKCJcbiVzIiwgbVBpeGVsSExTTC5jX3N0cigpKTsKKyAgICBUUkFDRSgiXG4lcyIsIG1WZXJ0
ZXhITFNMLmNfc3RyKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIExpbmtzIHRoZSBI
TFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRo
ZWlyIHZhcnlpbmdzLAorLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5p
bmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKKy8vIGEgbGlzdCBvZiB1
bmlmb3Jtcwordm9pZCBQcm9ncmFtOjpsaW5rKCkKK3sKKyAgICB1bmxpbmsoKTsKKworICAgIGlm
ICghbUZyYWdtZW50U2hhZGVyIHx8ICFtRnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwg
IW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGNo
YXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7Cisg
ICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9m
aWxlKCk7CisKKyAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Cisg
ICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisKKyAgICBpZiAoIWxp
bmtWYXJ5aW5ncygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElEM0RY
QnVmZmVyICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wuY19zdHIo
KSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOworICAgIElEM0RYQnVmZmVyICpw
aXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBpeGVsUHJv
ZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOworCisgICAgaWYgKHZlcnRleEJpbmFyeSAmJiBwaXhl
bEJpbmFyeSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworICAgICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVy
dGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksICZtVmVy
dGV4RXhlY3V0YWJsZSk7CisgICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwg
Jm1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4
ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0ZXhS
ZXN1bHQpICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOworCisgICAgICAgIHZlcnRleEJpbmFy
eS0+UmVsZWFzZSgpOworICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOworICAgICAgICB2
ZXJ0ZXhCaW5hcnkgPSBOVUxMOworICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7CisKKyAgICAg
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbGlu
a1VuaWZvcm1zKG1Db25zdGFudFRhYmxlUFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9y
bXMobUNvbnN0YW50VGFibGVWUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUg
c2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XworICAgICAg
ICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRp
b25hbCBkZWNvcmF0aW9uCisgICAgICAgICAgICBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgdHJ1ZSk7CisgICAgICAgICAg
ICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJh
bmdlLmZhciIsIHRydWUpOworICAgICAgICAgICAgbURlcHRoUmFuZ2VEaWZmTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZGlmZiIsIHRydWUpOworICAgICAgICAg
ICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiLCB0cnVl
KTsKKyAgICAgICAgICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJk
eF9XaW5kb3ciLCB0cnVlKTsKKyAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOworICAgICAgICAg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ci
LCB0cnVlKTsKKyAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIsIHRydWUpOworCisgICAgICAgICAgICBtTGlu
a2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIERldGVy
bWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZl
cnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcworYm9vbCBQcm9ncmFtOjpsaW5rQXR0cmlidXRlcygp
Cit7CisgICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOworCisgICAgLy8gTGluayBh
dHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKEF0dHJpYnV0
ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAv
LyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8g
dGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisKKyAgICAgICAg
ICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworCisgICAg
ICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQWN0aXZlIGF0dHJpYnV0
ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1l
LmNfc3RyKCksIGxvY2F0aW9uKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChs
b2NhdGlvbiArIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaW50IGxvY2F0aW9uID0gZ2V0
QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
OworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRz
KCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwcGVuZFRv
SW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFt
ZS5jX3N0cigpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRv
IGxpbmsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFp
bGFibGVJbmRleF0gPSAqYXR0cmlidXRlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChp
bnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
UzsgKQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gbVZlcnRleFNoYWRlci0+Z2V0U2VtYW50
aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAg
aW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0
cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJv
d3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRl
SW5kZXgrK10gPSBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2ludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKQoreworICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobUF0dHJpYnV0ZUJp
bmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25d
LmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6bGlua1VuaWZv
cm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSkKK3sKKyAgICBEM0RYQ09OU1RB
TlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbjsKKyAgICBEM0RYQ09OU1RBTlRf
REVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7
CisKKyAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24p
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5k
ZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4Kysp
CisgICAgeworICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJs
ZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7CisgICAgICAgIGNvbnN0YW50VGFibGUt
PkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZk
ZXNjcmlwdGlvbkNvdW50KTsKKworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oY29uc3RhbnRI
YW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
QWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNo
YWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcworLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1
bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQorYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlm
b3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRf
REVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICBpZiAo
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7CisKKyAgICAgICAgYXNzZXJ0KHNhbXBsZXJJbmRleCA8IHNpemVvZiht
U2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKTsKKworICAgICAgICBtU2FtcGxlcnNbc2Ft
cGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4
XS50eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUp
ID8gU0FNUExFUl9DVUJFIDogU0FNUExFUl8yRDsKKyAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKKyAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJ
bmRleF0uZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0
aW9uLkNsYXNzKQorICAgIHsKKyAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50
RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0
Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKworICAgICAgICAgICAgICAgIEQzRFhD
T05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgVUlOVCBkZXNj
cmlwdGlvbkNvdW50ID0gMTsKKworICAgICAgICAgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPkdl
dENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlv
bkNvdW50KTsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShmaWVsZEhhbmRs
ZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArICIu
IikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgorICAgICAgY2FzZSBE
M0RYUENfVkVDVE9SOgorICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6CisgICAgICBj
YXNlIEQzRFhQQ19PQkpFQ1Q6CisgICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKGNvbnN0YW50
RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBVbmlm
b3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lKTsK
KworICAgIGlmKCF1bmlmb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAorICAgIEdMaW50IGxvY2F0aW9uID0g
Z2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUuY19zdHIoKSwgdHJ1ZSk7CisgICAgR0xlbnVtIHR5cGUg
PSB1bmlmb3JtLT50eXBlOworCisgICAgaWYgKGxvY2F0aW9uID49IDApCisgICAgeworICAgICAg
ICBkZWxldGUgdW5pZm9ybTsKKworICAgICAgICBpZiAobVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XS0+dHlwZSAhPSB0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Vbmlmb3Jtcy5wdXNo
X2JhY2sodW5pZm9ybSk7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jt
cy5zaXplKCkgLSAxOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3Jt
LT5hcnJheVNpemU7ICsraSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNr
KFVuaWZvcm1Mb2NhdGlvbihuYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybShjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgJm5hbWUp
Cit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMg
YW5kIHNjYWxhcnMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5U
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgorICAgICAg
ICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
MTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9CT09MOgor
ICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0ws
IG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzQsIG5hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBEM0RYUFRfSU5UOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBu
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9JTlRfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMz
LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5z
KSAgLy8gU3F1YXJlIG1hdHJpY2VzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgor
ICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01B
VDIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBuYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfTUFUNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiAwOwor
fQorCisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQor
c3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cmluZykK
K3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3Ry
KDAsIDMpICE9ICJkeF8iKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9Cit9CisK
K3N0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGUoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cmlu
ZykKK3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAxKSA9PSAiXyIpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RyaW5nLnN1YnN0cigxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0cmluZzsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jt
MWJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7
CisgICAgQk9PTCAqdmVjdG9yID0gbmV3IEJPT0xbY291bnRdOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh2W2ldID09IEdMX0ZBTFNFKQor
ICAgICAgICAgICAgdmVjdG9yW2ldID0gMDsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHZl
Y3RvcltpXSA9IDE7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNv
bnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFu
ZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworCisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQ
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldEJvb2xBcnJheShkZXZpY2Us
IGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZT
KQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0Qm9vbEFycmF5KGRldmljZSwg
Y29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlIFtdIHZlY3Rv
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTJi
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQorewor
ICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYp
LCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAg
ICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAg
IGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50
VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAg
aWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0
b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAg
IGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVj
dG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAg
ICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0zYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
Ym9vbGVhbiAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0
W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7Cisg
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdMX0ZBTFNFID8gMC4wZiA6
IDEuMGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsxXSA9PSBHTF9GQUxT
RSA/IDAuMGYgOiAxLjBmKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzJd
ID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAg
fQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3Jt
LCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3Rv
ciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAg
bUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0
b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAq
dmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2
WzBdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodlsxXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh2WzJdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbM10gPT0gR0xfRkFMU0UgPyAwLjBmIDog
MS4wZikpOworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAg
IEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAg
Z2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRW
Uyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBp
ZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3Rv
ckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAg
aWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0
b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAg
IGRlbGV0ZSBbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7
CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJn
ZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgewor
ICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRGbG9hdEFycmF5KGRldmljZSwgY29uc3RhbnRQ
UywgdiwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+U2V0RmxvYXRBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHYs
IGNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjph
cHBseVVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3Vu
dF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCh2WzBdLCB2WzFdLCAwLCAwKTsKKworICAgICAgICB2
ICs9IDI7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50
UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0
YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAg
eworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0
YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAg
IHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25z
dGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgRDNE
WFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RY
VkVDVE9SNCh2WzBdLCB2WzFdLCB2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQor
CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhB
TkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAm
Y29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3Rvciwg
Y291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3Is
IGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdl
dENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMp
OworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYg
KGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JB
cnJheShkZXZpY2UsIGNvbnN0YW50UFMsIChEM0RYVkVDVE9SNCopdiwgY291bnQpOworICAgIH0K
KworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+
U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCAoRDNEWFZFQ1RPUjQqKXYsIGNvdW50
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQoreworICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2Nv
dW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIG1hdHJpeFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVlWzJdLCAwLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVszXSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDEsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAsICAgICAgICAwLCAxKTsK
KworICAgICAgICB2YWx1ZSArPSA0OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRD
b25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChj
b25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0TWF0cml4VHJh
bnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisK
KyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNl
dE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0cml4LCBjb3VudCk7
CisgICAgfQorCisgICAgZGVsZXRlW10gbWF0cml4OworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RYTUFUUklYICptYXRy
aXggPSBuZXcgRDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFUUklYKHZhbHVlWzBd
LCB2YWx1ZVszXSwgdmFsdWVbNl0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVbMV0sIHZhbHVlWzRdLCB2YWx1ZVs3XSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVsyXSwgdmFsdWVbNV0sIHZhbHVlWzhdLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDEpOworCisgICAg
ICAgIHZhbHVlICs9IDk7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExF
IGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50
SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50
UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VB
cnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGlm
IChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4
VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9
CisKKyAgICBkZWxldGVbXSBtYXRyaXg7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtOjphcHBseVVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5l
dyBEM0RYTUFUUklYW2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIG1hdHJpeFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVl
WzRdLCB2YWx1ZVs4XSwgIHZhbHVlWzEyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVsxXSwgdmFsdWVbNV0sIHZhbHVlWzldLCAgdmFsdWVbMTNdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs2XSwgdmFsdWVbMTBdLCB2YWx1ZVsx
NF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbM10sIHZhbHVlWzddLCB2
YWx1ZVsxMV0sIHZhbHVlWzE1XSk7CisKKyAgICAgICAgdmFsdWUgKz0gMTY7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRM
RSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29u
c3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3Rh
bnRUYWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1h
dHJpeCwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25z
dGFudFZTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSBtYXRyaXg7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0xaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3Rh
bnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMs
ICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2Uo
KTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgRDNEWENPTlNUQU5UX0RF
U0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0g
MTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFu
dERlc2MoY29uc3RhbnRQUywgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50
KTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25zdGFudERlc2NyaXB0
aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQorICAgICAgICB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJ
bmRleChjb25zdGFudFBTKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gZmlyc3RJbmRleDsgc2FtcGxlckluZGV4IDwgZmlyc3RJbmRleCArIGNvdW50OyBz
YW1wbGVySW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGludCBtYXBw
ZWRTYW1wbGVyID0gdlswXTsKKworICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPj0g
MCAmJiBzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5s
b2dpY2FsVGV4dHVyZVVuaXQgPSBtYXBwZWRTYW1wbGVyOworICAgICAgICAgICAgICAgICAgICBt
U2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQ
Uy0+U2V0SW50QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2LCBjb3VudCk7CisgICAgfQorCisg
ICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRJ
bnRBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHYsIGNvdW50KTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0yaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2
ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZs
b2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKKworICAgICAgICB2ICs9IDI7CisgICAgfQor
CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhB
TkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAm
Y29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3Rvciwg
Y291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3Is
IGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3Ig
PSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZb
MF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7CisKKyAgICAgICAgdiArPSAzOworICAg
IH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQz
RFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9y
bSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAg
bUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0
b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVj
dG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVj
dG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9h
dCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKKworICAgICAg
ICB2ICs9IDQ7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0
YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxl
cyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisg
ICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNv
bnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBj
b25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGUgW10gdmVjdG9y
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YXBwZW5kVG9JbmZvTG9n
KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIGlmICghZm9ybWF0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIgaW5mb1sxMDI0XTsKKworICAgIHZhX2xp
c3QgdmFyYXJnOworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYo
aW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgdmFfZW5kKHZhcmFyZyk7
CisKKyAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKKworICAgIGlmICghbUlu
Zm9Mb2cpCisgICAgeworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAx
XTsKKyAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAg
IGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKKyAg
ICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOworICAgICAgICBzdHJjcHkobmV3TG9nICsg
bG9nTGVuZ3RoLCBpbmZvKTsKKworICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKKyAgICAgICAg
bUluZm9Mb2cgPSBuZXdMb2c7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OnJlc2V0SW5mb0xv
ZygpCit7CisgICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgZGVsZXRlIFtdIG1JbmZv
TG9nOworICAgIH0KK30KKworLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5s
aW5rZWQgc3RhdGUsIGFmdGVyIGRldGFjaGluZyBhIHNoYWRlciwgYmVmb3JlIHJlLWxpbmtpbmcs
IG9yIGF0IGRlc3RydWN0aW9uCit2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCit7
CisgICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKKyAgICB7Cisg
ICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFn
bWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxM
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVBpeGVsRXhlY3V0YWJs
ZSkKKyAgICB7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAgICAg
bVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhFeGVjdXRh
YmxlKQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRU
YWJsZVBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgpOworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobUNvbnN0YW50
VGFibGVWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVhc2UoKTsKKyAg
ICAgICAgbUNvbnN0YW50VGFibGVWUyA9IE5VTEw7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUuY2xlYXIoKTsKKyAgICAgICAgbVNlbWFu
dGljSW5kZXhbaW5kZXhdID0gLTE7CisgICAgfQorCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAg
bVNhbXBsZXJzW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgbVNhbXBsZXJzW2luZGV4
XS5kaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOworICAgICAgICBtVW5pZm9y
bXMucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbiA9IC0x
OworICAgIG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uID0gLTE7CisgICAgbURlcHRoUmFuZ2VGYXJM
b2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKKyAgICBtRHhXaW5kb3dM
b2NhdGlvbiA9IC0xOworICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOworICAgIG1E
eEZyb250Q0NXTG9jYXRpb24gPSAtMTsKKyAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAt
MTsKKworICAgIG1Vbmlmb3JtSW5kZXguY2xlYXIoKTsKKworICAgIG1QaXhlbEhMU0wuY2xlYXIo
KTsKKyAgICBtVmVydGV4SExTTC5jbGVhcigpOworCisgICAgZGVsZXRlW10gbUluZm9Mb2c7Cisg
ICAgbUluZm9Mb2cgPSBOVUxMOworCisgICAgbUxpbmtlZCA9IGZhbHNlOworfQorCitib29sIFBy
b2dyYW06OmlzTGlua2VkKCkKK3sKKyAgICByZXR1cm4gbUxpbmtlZDsKK30KKworYm9vbCBQcm9n
cmFtOjppc1ZhbGlkYXRlZCgpIGNvbnN0IAoreworICAgIHJldHVybiBtVmFsaWRhdGVkOworfQor
Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNlcmlhbDsKK30KKwordW5zaWduZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKK3sKKyAg
ICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKK30KKworaW50IFByb2dyYW06OmdldEluZm9Mb2dM
ZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZv
TG9nKSArIDE7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50IGluZGV4
ID0gMDsKKworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHdoaWxlIChpbmRleCA8
IGJ1ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obUluZm9Mb2cpKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmZvTG9nW2luZGV4XSA9IG1JbmZvTG9nW2luZGV4XTsKKyAgICAgICAg
ICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7
CisgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBpZiAobGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKwordm9pZCBQcm9n
cmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQs
IEdMdWludCAqc2hhZGVycykKK3sKKyAgICBpbnQgdG90YWwgPSAwOworCisgICAgaWYgKG1WZXJ0
ZXhTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKKyAgICAgICAg
eworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4U2hhZGVyLT5nZXRIYW5kbGUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsKys7CisgICAgfQorCisgICAgaWYgKG1GcmFn
bWVudFNoYWRlcikKKyAgICB7CisgICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQorICAgICAg
ICB7CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFu
ZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbCsrOworICAgIH0KKworICAgIGlmIChj
b3VudCkKKyAgICB7CisgICAgICAgICpjb3VudCA9IHRvdGFsOworICAgIH0KK30KKwordm9pZCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1l
KQoreworICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGUgPSAwOworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF0dHJpYnV0ZSsrOworCisgICAgICAgICAgICBBU1NFUlQoYXR0cmlidXRl
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBn
ZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpOworICAgIH0KKworICAgIGlmIChi
dWZzaXplID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRB
dHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7CisKKyAgICAgICAgc3RybmNweShuYW1l
LCBzdHJpbmcsIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisK
KyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0
cmxlbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gMTsgICAvLyBBbHdh
eXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCisKKyAgICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1
dGVbYXR0cmlidXRlXS50eXBlOworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1
dGVDb3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0
ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKK3sKKyAgICBpbnQgbWF4TGVuZ3RoID0gMDsK
KworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRB
Y3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICB1bnNp
Z25lZCBpbnQgdW5pZm9ybSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBp
bmRleDsgaSsrKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgdW5p
Zm9ybSsrOworCisgICAgICAgICAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkp
OyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5zdWJz
dHIoMCwgMykgPT0gImR4XyIpOworICAgIH0KKworICAgIGlmIChidWZzaXplID4gMCkKKyAgICB7
CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IHVuZGVjb3JhdGUobVVuaWZvcm1zW3VuaWZv
cm1dLT5uYW1lKTsKKworICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemUg
IT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICJbMF0iOworICAgICAgICB9
CisKKyAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmc2l6ZSk7CisgICAg
ICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZTsKKworICAg
ICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOworfQorCitHTGludCBQcm9ncmFtOjpn
ZXRBY3RpdmVVbmlmb3JtQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+
bmFtZS5zdWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvdW50
Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0dMaW50IFBy
b2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGgg
PSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBu
dW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAoIW1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhM
ZW5ndGggPSBzdGQ6Om1heCgoaW50KSh1bmRlY29yYXRlKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
LT5uYW1lKS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwordm9pZCBQcm9ncmFtOjpmbGFnRm9yRGVsZXRpb24o
KQoreworICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOworfQorCitib29sIFByb2dyYW06OmlzRmxh
Z2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKK30K
Kwordm9pZCBQcm9ncmFtOjp2YWxpZGF0ZSgpCit7CisgICAgcmVzZXRJbmZvTG9nKCk7CisKKyAg
ICBpZiAoIWlzTGlua2VkKCkpIAorICAgIHsKKyAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJQcm9n
cmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOworICAgICAgICBtVmFsaWRh
dGVkID0gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGx5VW5pZm9y
bXMoKTsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMgcmVm
ZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0LiIpOworICAgICAgICAgICAgbVZhbGlk
YXRlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbVZhbGlkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbTo6dmFsaWRhdGVTYW1wbGVycygpIGNvbnN0Cit7CisgICAgLy8gaWYgYW55IHR3byBhY3Rp
dmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZl
ciB0byB0aGUgc2FtZQorICAgIC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhl
IGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKKyAg
ICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9P
UEVSQVRJT04gZXJyb3IuCisgICAgc3RkOjptYXA8aW50LCBTYW1wbGVyVHlwZT4gc2FtcGxlck1h
cDsgCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyc1tpXS5hY3RpdmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChzYW1wbGVyTWFwLmZpbmQobVNhbXBsZXJzW2ldLmxvZ2lj
YWxUZXh0dXJlVW5pdCkgIT0gc2FtcGxlck1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAobVNhbXBsZXJzW2ldLnR5cGUgIT0gc2FtcGxlck1hcFttU2FtcGxlcnNb
aV0ubG9naWNhbFRleHR1cmVVbml0XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHNhbXBsZXJNYXBbbVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdF0gPSBt
U2FtcGxlcnNbaV0udHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW06OmdldENvbnN0YW50SGFuZGxlcyhVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBEM0RYSEFORExFICpj
b25zdGFudFZTKQoreworICAgIGlmICghdGFyZ2V0VW5pZm9ybS0+aGFuZGxlc1NldCkKKyAgICB7
CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnBzSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0
Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKKyAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dnNIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5
TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5uYW1lLmNfc3RyKCkpOworICAgICAgICB0YXJnZXRVbmlm
b3JtLT5oYW5kbGVzU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAqY29uc3RhbnRQUyA9IHRhcmdl
dFVuaWZvcm0tPnBzSGFuZGxlOworICAgICpjb25zdGFudFZTID0gdGFyZ2V0VW5pZm9ybS0+dnNI
YW5kbGU7Cit9CisKK0dMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbjsKK30KKworR0xpbnQg
UHJvZ3JhbTo6Z2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJh
bmdlRmFyTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhSYW5nZUZhckxvY2F0
aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeFdp
bmRvd0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4V2luZG93TG9jYXRpb247Cit9
CisKK0dMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFt
OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhGcm9udEND
V0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKK30KKwor
fQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjMgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3Mu
IEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfUFJPR1JBTV9IXworI2RlZmluZSBMSUJHTEVTVjJfUFJPR1JBTV9IXworCisj
aW5jbHVkZSA8ZDNkeDkuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgor
I2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEZyYWdtZW50
U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworCisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2Vu
dGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQorc3RydWN0IFVuaWZvcm0KK3sKKyAgICBVbmlm
b3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZSk7CisKKyAgICB+VW5pZm9ybSgpOworCisgICAgY29uc3QgR0xlbnVtIHR5cGU7Cisg
ICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplOworCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBib29sIGRpcnR5OworCisgICAg
RDNEWEhBTkRMRSB2c0hhbmRsZTsKKyAgICBEM0RYSEFORExFIHBzSGFuZGxlOworICAgIGJvb2wg
aGFuZGxlc1NldDsKK307CisKKy8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jt
cy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCitzdHJ1Y3QgVW5pZm9ybUxv
Y2F0aW9uCit7CisgICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1
bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKworICAgIHN0ZDo6c3Ry
aW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CisgICAgdW5zaWduZWQgaW50IGlu
ZGV4OworfTsKKworY2xhc3MgUHJvZ3JhbQoreworICBwdWJsaWM6CisgICAgUHJvZ3JhbSgpOwor
CisgICAgflByb2dyYW0oKTsKKworICAgIGJvb2wgYXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVy
KTsKKyAgICBib29sIGRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7CisgICAgaW50IGdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3Q7CisKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7CisKKyAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOworICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5k
ZXgpOworCisgICAgdm9pZCBkaXJ0eUFsbFNhbXBsZXJzKCk7CisKKyAgICBHTGludCBnZXRTYW1w
bGVyTWFwcGluZyh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBTYW1wbGVyVHlwZSBn
ZXRTYW1wbGVyVHlwZSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKKyAgICBib29sIGlzU2Ft
cGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpIGNvbnN0OworICAgIHZvaWQgc2V0
U2FtcGxlckRpcnR5KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgsIGJvb2wgZGlydHkpOworCisg
ICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgZGVjb3Jh
dGVkKTsKKyAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlm
b3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
KyAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworCisgICAgYm9vbCBn
ZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgKnBhcmFtcyk7CisgICAgYm9vbCBn
ZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMaW50ICpwYXJhbXMpOworCisgICAgR0xpbnQg
Z2V0RGVwdGhSYW5nZURpZmZMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldERlcHRoUmFu
Z2VOZWFyTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREZXB0aFJhbmdlRmFyTG9jYXRp
b24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKKyAgICBH
TGludCBnZXREeFdpbmRvd0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24o
KSBjb25zdDsKKyAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Owor
CisgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7CisgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7
CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBib29sIGlzTGlua2VkKCk7CisgICAgaW50IGdldElu
Zm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0QXR0YWNoZWRT
aGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMp
OworCisgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgIEdMaW50
IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlm
b3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50
ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZl
VW5pZm9ybUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwor
CisgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKKyAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0
aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIHZhbGlkYXRlKCk7CisgICAgYm9vbCB2YWxpZGF0ZVNh
bXBsZXJzKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OworCisgICAgdW5z
aWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOworCisgICAgSUQzRFhCdWZmZXIgKmNvbXBpbGVUb0Jp
bmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50
VGFibGUgKipjb25zdGFudFRhYmxlKTsKKyAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBm
YWxzZSk7CisKKyAgICBpbnQgcGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0
XSk7CisgICAgYm9vbCBsaW5rVmFyeWluZ3MoKTsKKworICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMo
KTsKKyAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7
CisKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFi
bGUpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhh
bmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6
c3RyaW5nIG5hbWUgPSAiIik7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAg
VW5pZm9ybSAqY3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWJ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpOworICAg
IGJvb2wgYXBwbHlVbmlmb3JtMmJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGJvb2xlYW4gKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2J2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpOworICAgIGJvb2wgYXBwbHlVbmlm
b3JtNGJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYp
OworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
OworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybU1hdHJpeDJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1NYXRyaXg0ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0zaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFw
cGx5VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOworCisgICAgdm9pZCBnZXRDb25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgRDNEWEhBTkRMRSAqY29uc3RhbnRQUywgRDNEWEhBTkRMRSAqY29uc3RhbnRWUyk7CisKKyAg
ICB2b2lkIGFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICppbmZvLCAuLi4pOworICAgIHZvaWQg
cmVzZXRJbmZvTG9nKCk7CisKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGUoY29uc3Qg
c3RkOjpzdHJpbmcgJnN0cmluZyk7ICAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBz
dGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKTsg
ICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGlzc3VlU2VyaWFsKCk7CisKKyAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwor
ICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKKworICAgIHN0ZDo6c3RyaW5nIG1QaXhl
bEhMU0w7CisgICAgc3RkOjpzdHJpbmcgbVZlcnRleEhMU0w7CisKKyAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAq
bVZlcnRleEV4ZWN1dGFibGU7CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJs
ZVBTOworICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNd
OworICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Cisg
ICAgaW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBzdHJ1Y3Qg
U2FtcGxlcgorICAgIHsKKyAgICAgICAgYm9vbCBhY3RpdmU7CisgICAgICAgIEdMaW50IGxvZ2lj
YWxUZXh0dXJlVW5pdDsKKyAgICAgICAgU2FtcGxlclR5cGUgdHlwZTsKKyAgICAgICAgYm9vbCBk
aXJ0eTsKKyAgICB9OworCisgICAgU2FtcGxlciBtU2FtcGxlcnNbTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFNdOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5
OworICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxV
bmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKKyAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1J
bmRleDsKKworICAgIEdMaW50IG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uOworICAgIEdMaW50IG1E
ZXB0aFJhbmdlTmVhckxvY2F0aW9uOworICAgIEdMaW50IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247
CisgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKKyAgICBHTGludCBtRHhXaW5kb3dMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247CisgICAgR0xpbnQgbUR4RnJv
bnRDQ1dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRpb247CisKKyAg
ICBib29sIG1MaW5rZWQ7CisgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1
c2UKKyAgICBjaGFyICptSW5mb0xvZzsKKyAgICBib29sIG1WYWxpZGF0ZWQ7CisKKyAgICB1bnNp
Z25lZCBpbnQgbVNlcmlhbDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJp
YWw7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTUgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlci5jcHA6IHRoZSBnbDo6UmVuZGVy
YnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCisvLyBDb2xvcmJ1ZmZlciwgRGVw
dGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMgR0wgcmVuZGVyYnVmZmVyCisv
LyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAorewordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
cjo6bUN1cnJlbnRTZXJpYWwgPSAxOworCitSZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcigpCit7
CisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0gMDsKKyAgICBtRm9ybWF0ID0gR0xfUkdC
QTQ7IC8vIGRlZmF1bHQgZm9ybWF0LCBuZWVkcyB0byBiZSBvbmUgb2YgdGhlIGV4cGVjdGVkIHJl
bmRlcmJ1ZmZlciBmb3JtYXRzCisgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Cit9CisKK1Jl
bmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCit7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjpp
c0NvbG9yYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyYnVm
ZmVyOjppc0RlcHRoYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
SURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAg
ICByZXR1cm4gTlVMTDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0
RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IFJlbmRlcmJ1ZmZl
cjo6Z2V0V2lkdGgoKQoreworICAgIHJldHVybiBtV2lkdGg7Cit9CisKK2ludCBSZW5kZXJidWZm
ZXI6OmdldEhlaWdodCgpCit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVy
YnVmZmVyOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtV2lkdGggPSB3
aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OworfQorCisKK0dMZW51bSBSZW5kZXJidWZmZXI6
OmdldEZvcm1hdCgpCit7CisgICAgcmV0dXJuIG1Gb3JtYXQ7Cit9CisKK3Vuc2lnbmVkIGludCBS
ZW5kZXJidWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9
CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6Omlzc3VlU2VyaWFsKCkKK3sKKyAgICByZXR1
cm4gbUN1cnJlbnRTZXJpYWwrKzsKK30KKworQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQp
Cit7CisgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAg
ICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBzZXRTaXpl
KGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAgIH0KKworfQorCitD
b2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisg
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBlczJkeDo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChmb3JtYXQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwg
TlVMTCk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHNldFNp
emUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHNldFNpemUoMCwgMCk7CisgICAgICAgIG1Gb3JtYXQgPSBH
TF9SR0JBNDsKKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQoreworICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFz
ZSgpOworICAgIH0KK30KKworYm9vbCBDb2xvcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpCit7
CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9u
KTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldFJlZFNpemUoZGVzY3JpcHRpb24uRm9ybWF0
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRH
cmVlblNpemUoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNj
KCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRHcmVlblNpemUoZGVz
Y3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1aW50IENv
bG9yYnVmZmVyOjpnZXRCbHVlU2l6ZSgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAg
eworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJU
YXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6Okdl
dEJsdWVTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkKK3sKKyAgICBpZiAobVJlbmRl
clRhcmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAg
ICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJl
dHVybiBlczJkeDo6R2V0QWxwaGFTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworRGVwdGhidWZm
ZXI6OkRlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRo
U3RlbmNpbChkZXB0aFN0ZW5jaWwpCit7CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2NyaXB0aW9uOworICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9u
KTsKKworICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWln
aHQpOworICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSBy
ZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBv
bmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdl
CisgICAgfQorfQorCitEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisg
ICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBEM0RN
VUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOworCisgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
aWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5k
ZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUg
b2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldFNpemUoMCwgMCk7CisgICAgICAgIG1G
b3JtYXQgPSBHTF9SR0JBNDsgLy9kZWZhdWx0IGZvcm1hdAorICAgIH0KK30KKworRGVwdGhidWZm
ZXI6On5EZXB0aGJ1ZmZlcigpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAg
ICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitib29sIERlcHRoYnVm
ZmVyOjppc0RlcHRoYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0x1aW50IERl
cHRoYnVmZmVyOjpnZXREZXB0aFNpemUoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpH
ZXREZXB0aFNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQor
eworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOworfQorCitTdGVuY2lsYnVmZmVyOjpTdGVuY2ls
YnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChk
ZXB0aFN0ZW5jaWwpCit7CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRl
cHRoU3RlbmNpbC0+QWRkUmVmKCk7CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0
aW9uOworICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAg
ICAgICBzZXRTaXplKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAg
ICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIg
cGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlk
IHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgfQorfQorCitTdGVu
Y2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIG1EZXB0aFN0ZW5j
aWwgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5j
aWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZNVF9EMjRTOCwgRDNETVVMVElTQU1QTEVfTk9O
RSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgewor
ICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZv
cm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRl
cnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJi
dWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBzZXRTaXplKDAsIDApOworICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vZGVm
YXVsdCBmb3JtYXQKKyAgICB9Cit9CisKK1N0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKCkK
K3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0dMdWludCBTdGVuY2lsYnVmZmVyOjpnZXRTdGVuY2ls
U2l6ZSgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2Ny
aXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgU3RlbmNp
bGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSURp
cmVjdDNEU3VyZmFjZTkgKlN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAg
cmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
UmVuZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHZpcnR1YWwgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFz
cyBhbmQgaXRzIGRlcml2ZWQKKy8vIGNsYXNzZXMgQ29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFu
ZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgorLy8gb2JqZWN0cyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQu
MyBwYWdlIDEwOC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCisjZGVmaW5l
IExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXIKK3sKKyAg
cHVibGljOgorICAgIFJlbmRlcmJ1ZmZlcigpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVy
KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb2xvcmJ1ZmZlcigpOworICAgIHZpcnR1YWwgYm9v
bCBpc0RlcHRoYnVmZmVyKCk7CisgICAgdmlydHVhbCBib29sIGlzU3RlbmNpbGJ1ZmZlcigpOwor
CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB2aXJ0
dWFsIGludCBnZXRXaWR0aCgpOworICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpOworICAgIEdM
ZW51bSBnZXRGb3JtYXQoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisK
KyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CisKKyAgcHJvdGVjdGVkOgor
ICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEdMZW51bSBtRm9y
bWF0OworICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlcik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aW50IG1DdXJyZW50U2VyaWFsOworCisgICAgaW50IG1XaWR0aDsKKyAgICBpbnQgbUhlaWdodDsK
K307CisKK2NsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJs
aWM6CisgICAgZXhwbGljaXQgQ29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRh
cmdldCk7CisgICAgQ29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0KTsKKworICAgIH5Db2xvcmJ1ZmZlcigpOworCisgICAgYm9vbCBpc0NvbG9yYnVmZmVyKCk7
CisKKyAgICBHTHVpbnQgZ2V0UmVkU2l6ZSgpOworICAgIEdMdWludCBnZXRHcmVlblNpemUoKTsK
KyAgICBHTHVpbnQgZ2V0Qmx1ZVNpemUoKTsKKyAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCk7CisK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgcHJvdGVjdGVk
OgorICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFyZ2V0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbG9yYnVmZmVyKTsKK307CisKK2NsYXNzIERl
cHRoYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGlj
aXQgRGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgRGVw
dGhidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIH5EZXB0aGJ1ZmZlcigpOwor
CisgICAgYm9vbCBpc0RlcHRoYnVmZmVyKCk7CisKKyAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCk7
CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVwdGhidWZmZXIpOworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOworfTsKKworY2xhc3MgU3RlbmNpbGJ1ZmZlciA6
IHB1YmxpYyBSZW5kZXJidWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFN0ZW5jaWxi
dWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgU3RlbmNpbGJ1ZmZl
cihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgflN0ZW5jaWxidWZmZXIoKTsKKworICAg
IGJvb2wgaXNTdGVuY2lsYnVmZmVyKCk7CisKKyAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKTsK
KworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdGVuY2lsYnVmZmVyKTsKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdM
RVNWMl9SRU5ERVJCVUZGRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTAyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXIuY3BwOiBJbXBsZW1l
bnRzIHRoZSBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgIGRlcml2ZWQgY2xhc3NlcworLy8gVmVy
dGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0
cyBhbmQgcmVsYXRlZAorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uIDMuOCBwYWdlIDg0LgorCisjaW5jbHVkZSAibGli
R0xFU3YyL1NoYWRlci5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJsYW5nLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAorewordm9pZCAqU2hhZGVyOjpt
RnJhZ21lbnRDb21waWxlciA9IE5VTEw7Cit2b2lkICpTaGFkZXI6Om1WZXJ0ZXhDb21waWxlciA9
IE5VTEw7CisKK1NoYWRlcjo6U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUp
IDogbUhhbmRsZShoYW5kbGUpLCBtQ29udGV4dChjb250ZXh0KQoreworICAgIG1Tb3VyY2UgPSBO
VUxMOworICAgIG1IbHNsID0gTlVMTDsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICAvLyBQ
ZXJmb3JtIGEgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNoYWRlciBjb21waWxlciAo
b3IgYWZ0ZXIgYmVpbmcgZGVzdHJ1Y3RlZCBieSByZWxlYXNlQ29tcGlsZXIpCisgICAgaWYgKCFt
RnJhZ21lbnRDb21waWxlcikKKyAgICB7CisgICAgICAgIGludCByZXN1bHQgPSBTaEluaXRpYWxp
emUoKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBtRnJh
Z21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ0ZyYWdtZW50LCBFU2hT
cGVjR0xFUzIpOworICAgICAgICAgICAgbVZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21w
aWxlcihFU2hMYW5nVmVydGV4LCBFU2hTcGVjR0xFUzIpOworICAgICAgICB9CisgICAgfQorCisg
ICAgbUF0dGFjaENvdW50ID0gMDsKKyAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Cit9CisKK1No
YWRlcjo6flNoYWRlcigpCit7CisgICAgZGVsZXRlW10gbVNvdXJjZTsKKyAgICBkZWxldGVbXSBt
SGxzbDsKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKK30KKworR0x1aW50IFNoYWRlcjo6Z2V0SGFu
ZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhhbmRsZTsKK30KKwordm9pZCBTaGFkZXI6OnNl
dFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAq
bGVuZ3RoKQoreworICAgIGRlbGV0ZVtdIG1Tb3VyY2U7CisgICAgaW50IHRvdGFsTGVuZ3RoID0g
MDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAg
IGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRv
dGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAx
XTsKKyAgICBjaGFyICpjb2RlID0gbVNvdXJjZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGludCBzdHJpbmdMZW5ndGg7CisKKyAgICAgICAg
aWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3Ry
aW5nTGVuZ3RoID0gbGVuZ3RoW2ldOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgp
OworICAgICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKKyAgICB9CisKKyAgICBtU291cmNlW3Rv
dGFsTGVuZ3RoXSA9ICdcMCc7Cit9CisKK2ludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdAoreworICAgIGlmICghbUluZm9Mb2cpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7
CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisg
ICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgYnVmU2l6ZSAt
IDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtSW5mb0xvZykpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGluZm9Mb2dbaW5kZXhdID0gbUluZm9Mb2dbaW5kZXhdOworICAgICAgICAgICAgaW5kZXgr
KzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAg
aW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgewor
ICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCitpbnQgU2hhZGVyOjpnZXRTb3Vy
Y2VMZW5ndGgoKSBjb25zdAoreworICAgIGlmICghbVNvdXJjZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHJldHVybiBzdHJsZW4obVNv
dXJjZSkgKyAxOworICAgIH0KK30KKwordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqc291cmNlKQoreworICAgIGludCBpbmRleCA9
IDA7CisKKyAgICBpZiAobVNvdXJjZSkKKyAgICB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGJ1
ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obVNvdXJjZSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNvdXJjZVtpbmRleF0gPSBtU291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGlu
ZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmU2l6ZSkKKyAgICB7CisgICAg
ICAgIHNvdXJjZVtpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAg
eworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCitib29sIFNoYWRlcjo6aXND
b21waWxlZCgpCit7CisgICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIg
KlNoYWRlcjo6Z2V0SExTTCgpCit7CisgICAgcmV0dXJuIG1IbHNsOworfQorCit2b2lkIFNoYWRl
cjo6YXR0YWNoKCkKK3sKKyAgICBtQXR0YWNoQ291bnQrKzsKK30KKwordm9pZCBTaGFkZXI6OmRl
dGFjaCgpCit7CisgICAgbUF0dGFjaENvdW50LS07CisKKyAgICBpZiAobUF0dGFjaENvdW50ID09
IDAgJiYgbURlbGV0ZVN0YXR1cykKKyAgICB7CisgICAgICAgIG1Db250ZXh0LT5kZWxldGVTaGFk
ZXIobUhhbmRsZSk7CisgICAgfQorfQorCitib29sIFNoYWRlcjo6aXNBdHRhY2hlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1BdHRhY2hDb3VudCA+IDA7Cit9CisKK2Jvb2wgU2hhZGVyOjppc0Zs
YWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Cit9
CisKK3ZvaWQgU2hhZGVyOjpmbGFnRm9yRGVsZXRpb24oKQoreworICAgIG1EZWxldGVTdGF0dXMg
PSB0cnVlOworfQorCit2b2lkIFNoYWRlcjo6cmVsZWFzZUNvbXBpbGVyKCkKK3sKKyAgICBTaERl
c3RydWN0KG1GcmFnbWVudENvbXBpbGVyKTsKKyAgICBTaERlc3RydWN0KG1WZXJ0ZXhDb21waWxl
cik7CisKKyAgICBtRnJhZ21lbnRDb21waWxlciA9IE5VTEw7CisgICAgbVZlcnRleENvbXBpbGVy
ID0gTlVMTDsKKworICAgIFNoRmluYWxpemUoKTsKK30KKwordm9pZCBTaGFkZXI6OnBhcnNlVmFy
eWluZ3MoKQoreworICAgIGlmIChtSGxzbCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmlu
cHV0ID0gc3Ryc3RyKG1IbHNsLCAiLy8gVmFyeWluZ3MiKSArIDEyOworCisgICAgICAgIHdoaWxl
KHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgdmFyeWluZ1R5cGVbMjU2XTsKKyAg
ICAgICAgICAgIGNoYXIgdmFyeWluZ05hbWVbMjU2XTsKKworICAgICAgICAgICAgaW50IG1hdGNo
ZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJXMgJXMiLCB2YXJ5aW5nVHlwZSwgdmFyeWluZ05h
bWUpOworCisgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGFyICph
cnJheSA9IHN0cnN0cih2YXJ5aW5nTmFtZSwgIlsiKTsKKyAgICAgICAgICAgIGludCBzaXplID0g
MTsKKworICAgICAgICAgICAgaWYgKGFycmF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHNpemUgPSBhdG9pKGFycmF5ICsgMSk7CisgICAgICAgICAgICAgICAgKmFycmF5ID0gJ1ww
JzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyeWluZ3MucHVzaF9iYWNrKFZhcnlp
bmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUsIGFycmF5ICE9IE5V
TEwpKTsKKworICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOworICAg
ICAgICB9CisKKyAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VT
X0ZSQUdfQ09PUkQiKSAhPSBOVUxMOworICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3Ry
KG1IbHNsLCAiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOworICAgIH0KK30KKwordm9p
ZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCit7CisgICAgaWYgKGlzQ29t
cGlsZWQoKSB8fCAhbVNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBUUkFDRSgiXG4lcyIsIG1Tb3VyY2UpOworCisgICAgZGVsZXRlW10gbUluZm9Mb2c7CisgICAg
bUluZm9Mb2cgPSBOVUxMOworCisgICAgVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXM7CisKKyAg
ICByZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9IE1BWF9WRVJURVhfQVRUUklCUzsKKyAgICBy
ZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SUzsKKyAgICByZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlOR19WRUNU
T1JTOworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUUzsKKyAgICByZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyA9IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgIHJlc291
cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAg
IHJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzsKKyAgICByZXNvdXJjZXMubWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZG
RVJTOworCisgICAgaW50IHJlc3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgJm1Tb3VyY2UsIDEs
IEVTaE9wdE5vbmUsICZyZXNvdXJjZXMsIEVEZWJ1Z09wT2JqZWN0Q29kZSk7CisgICAgY29uc3Qg
Y2hhciAqb2JqID0gU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsKKyAgICBjb25zdCBjaGFyICpp
bmZvID0gU2hHZXRJbmZvTG9nKGNvbXBpbGVyKTsKKworICAgIGlmIChyZXN1bHQpCisgICAgewor
ICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW3N0cmxlbihvYmopICsgMV07CisgICAgICAgIHN0cmNw
eShtSGxzbCwgb2JqKTsKKworICAgICAgICBUUkFDRSgiXG4lcyIsIG1IbHNsKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltzdHJsZW4oaW5mbykg
KyAxXTsKKyAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKKworICAgICAgICBUUkFDRSgi
XG4lcyIsIG1JbmZvTG9nKTsKKyAgICB9Cit9CisKK0dMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShj
b25zdCBzdGQ6OnN0cmluZyAmdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDIiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzI7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIpCisgICAgeworICAgICAgICByZXR1cm4gR0xf
RkxPQVRfVkVDMzsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0IikKKyAgICB7
CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0OworICAgIH0KKyAgICBlbHNlIGlmICh0eXBl
ID09ICJmbG9hdDJ4MiIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMjsKKyAg
ICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzeDMiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0NHg0
IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgIH0KKyAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gR0xfTk9ORTsKK30KKworLy8gdHJ1ZSBpZiB2
YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Citib29sIFNo
YWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSkK
K3sKKyAgICBpZih4LnR5cGUgPT0geS50eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHguc2l6
ZSA+IHkuc2l6ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHgudHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgICAgc3dpdGNoKHkudHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNl
OworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDog
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
ICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJl
dHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIGZh
bHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
TE9BVDogcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlcnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKENv
bnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRsZSkK
K3sKK30KKworVmVydGV4U2hhZGVyOjp+VmVydGV4U2hhZGVyKCkKK3sKK30KKworR0xlbnVtIFZl
cnRleFNoYWRlcjo6Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIEdMX1ZFUlRFWF9TSEFERVI7Cit9
CisKK3ZvaWQgVmVydGV4U2hhZGVyOjpjb21waWxlKCkKK3sKKyAgICBjb21waWxlVG9ITFNMKG1W
ZXJ0ZXhDb21waWxlcik7CisgICAgcGFyc2VBdHRyaWJ1dGVzKCk7CisgICAgcGFyc2VWYXJ5aW5n
cygpOworfQorCitpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6
c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQoreworICAgIGlmICghYXR0cmlidXRlTmFtZS5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworICAgICAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2
b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKK3sKKyAgICBpZiAobUhsc2wpCisg
ICAgeworICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIEF0dHJp
YnV0ZXMiKSArIDE0OworCisgICAgICAgIHdoaWxlKHRydWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOworICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVO
YW1lWzI1Nl07CisKKyAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3Rh
dGljICVzIF8lcyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOworCisgICAgICAgICAg
ICBpZiAobWF0Y2hlcyAhPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0
cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOworCisgICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0ZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBH
THVpbnQgaGFuZGxlKSA6IFNoYWRlcihjb250ZXh0LCBoYW5kbGUpCit7Cit9CisKK0ZyYWdtZW50
U2hhZGVyOjp+RnJhZ21lbnRTaGFkZXIoKQoreworfQorCitHTGVudW0gRnJhZ21lbnRTaGFkZXI6
OmdldFR5cGUoKQoreworICAgIHJldHVybiBHTF9GUkFHTUVOVF9TSEFERVI7Cit9CisKK3ZvaWQg
RnJhZ21lbnRTaGFkZXI6OmNvbXBpbGUoKQoreworICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50
Q29tcGlsZXIpOworICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICB2YXJ5aW5ncy5zb3J0KGNvbXBh
cmVWYXJ5aW5nKTsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUgYWJzdHJh
Y3QgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMg
VmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2Jq
ZWN0cyBhbmQKKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uCisvLyAzLjggcGFnZSA4NC4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfU0hBREVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KKworI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkeDku
aD4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworc3RydWN0IFZhcnlpbmcKK3sKKyAg
ICBWYXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUs
IGJvb2wgYXJyYXkpCisgICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXpl
KSwgYXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCisgICAgeworICAgIH0KKworICAgIEdM
ZW51bSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgaW50IHNpemU7ICAgLy8gTnVt
YmVyIG9mICd0eXBlJyBlbGVtZW50cworICAgIGJvb2wgYXJyYXk7CisKKyAgICBpbnQgcmVnOyAg
ICAvLyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluaworICAgIGlu
dCBjb2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5r
Cit9OworCit0eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKKworY2xhc3Mg
U2hhZGVyCit7CisgICAgZnJpZW5kIFByb2dyYW07CisKKyAgcHVibGljOgorICAgIFNoYWRlcihD
b250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKworICAgIHZpcnR1YWwgflNoYWRlcigp
OworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpID0gMDsKKyAgICBHTHVpbnQgZ2V0SGFu
ZGxlKCkgY29uc3Q7CisKKyAgICB2b2lkIGRlbGV0ZVNvdXJjZSgpOworICAgIHZvaWQgc2V0U291
cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5n
dGgpOworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAg
ICBpbnQgZ2V0U291cmNlTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRTb3VyY2UoR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsZSgpID0gMDsKKyAgICBib29sIGlzQ29tcGlsZWQoKTsKKyAgICBjb25zdCBj
aGFyICpnZXRITFNMKCk7CisKKyAgICB2b2lkIGF0dGFjaCgpOworICAgIHZvaWQgZGV0YWNoKCk7
CisgICAgYm9vbCBpc0F0dGFjaGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxl
dGlvbigpIGNvbnN0OworICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisKKyAgICBzdGF0aWMg
dm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFNoYWRlcik7CisKKyAgICB2b2lkIHBhcnNlVmFyeWluZ3MoKTsKKworICAg
IHZvaWQgY29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcik7CisKKyAgICBzdGF0aWMgR0xlbnVt
IHBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgY29t
cGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSk7CisKKyAgICBj
b25zdCBHTHVpbnQgbUhhbmRsZTsKKyAgICBpbnQgbUF0dGFjaENvdW50OyAgICAgLy8gTnVtYmVy
IG9mIHByb2dyYW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bworICAgIGJvb2wg
bURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4g
YmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKKworICAgIGNoYXIgKm1Tb3VyY2U7Cisg
ICAgY2hhciAqbUhsc2w7CisgICAgY2hhciAqbUluZm9Mb2c7CisKKyAgICBWYXJ5aW5nTGlzdCB2
YXJ5aW5nczsKKworICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBtVXNlc0Zyb250
RmFjaW5nOworCisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisKKyAgICBzdGF0aWMgdm9pZCAqbUZy
YWdtZW50Q29tcGlsZXI7CisgICAgc3RhdGljIHZvaWQgKm1WZXJ0ZXhDb21waWxlcjsKK307CisK
K3N0cnVjdCBBdHRyaWJ1dGUKK3sKKyAgICBBdHRyaWJ1dGUoKSA6IHR5cGUoR0xfTk9ORSksIG5h
bWUoIiIpCisgICAgeworICAgIH0KKworICAgIEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKQorICAgIHsKKyAgICB9
CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworfTsKKwordHlwZWRl
ZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5OworCitjbGFzcyBWZXJ0ZXhT
aGFkZXIgOiBwdWJsaWMgU2hhZGVyCit7CisgICAgZnJpZW5kIFByb2dyYW07CisKKyAgcHVibGlj
OgorICAgIFZlcnRleFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKwor
ICAgIH5WZXJ0ZXhTaGFkZXIoKTsKKworICAgIEdMZW51bSBnZXRUeXBlKCk7CisgICAgdm9pZCBj
b21waWxlKCk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0
dHJpYnV0ZU5hbWUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7CisKKyAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOworCisgICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1
YmxpYyBTaGFkZXIKK3sKKyAgcHVibGljOgorICAgIEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNv
bnRleHQsIEdMdWludCBoYW5kbGUpOworCisgICAgfkZyYWdtZW50U2hhZGVyKCk7CisKKyAgICBH
TGVudW0gZ2V0VHlwZSgpOworICAgIHZvaWQgY29tcGlsZSgpOworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdtZW50U2hhZGVyKTsKK307Cit9CisKKyNlbmRp
ZiAgIC8vIExJQkdMRVNWMl9TSEFERVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVyZS5j
cHA6IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBjbGFz
c2VzCisvLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1
cmUgb2JqZWN0cyBhbmQgcmVsYXRlZAorLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
IgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRp
bC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvQmxpdC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVGV4dHVyZTo6SW1hZ2U6OkltYWdlKCkK
KyAgOiB3aWR0aCgwKSwgaGVpZ2h0KDApLCBkaXJ0eShmYWxzZSksIHN1cmZhY2UoTlVMTCkKK3sK
K30KKworVGV4dHVyZTo6SW1hZ2U6On5JbWFnZSgpCit7CisgIGlmIChzdXJmYWNlKSBzdXJmYWNl
LT5SZWxlYXNlKCk7Cit9CisKK1RleHR1cmU6OlRleHR1cmUoQ29udGV4dCAqY29udGV4dCkgOiBt
Q29udGV4dChjb250ZXh0KQoreworICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9M
SU5FQVI7CisgICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKKyAgICBtV3JhcFMgPSBHTF9SRVBF
QVQ7CisgICAgbVdyYXBUID0gR0xfUkVQRUFUOworCisgICAgbURpcnR5TWV0YURhdGEgPSB0cnVl
OworICAgIG1EaXJ0eSA9IHRydWU7CisgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNlOworICAgIG1C
YXNlVGV4dHVyZSA9IE5VTEw7Cit9CisKK1RleHR1cmU6On5UZXh0dXJlKCkKK3sKK30KKworQmxp
dCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpCit7CisgICAgcmV0dXJuIG1Db250ZXh0LT5nZXRCbGl0
dGVyKCk7Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIo
R0xlbnVtIGZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKGZpbHRlcikKKyAgICB7CisgICAgICBjYXNl
IEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgor
ICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTElORUFSOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU1pbkZpbHRlciAh
PSBmaWx0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZp
bHRlcjsKKyAgICAgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVs
IGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJl
OjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKGZpbHRlcikKKyAg
ICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7CisgICAgICAgICAgICAgICAg
bURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFs
aWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQor
eworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JFUEVBVDoKKyAgICAg
IGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKKyAgICAgICAgICAgICAgICBtRGlydHkg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAg
c3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFUOgorICAgICAgY2FzZSBH
TF9DTEFNUF9UT19FREdFOgorICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtV3JhcFQgPSB3cmFwOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIFRl
eHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NaW5GaWx0ZXI7Cit9
CisKK0dMZW51bSBUZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
TWFnRmlsdGVyOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAoreworICAg
IHJldHVybiBtV3JhcFM7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1XcmFwVDsKK30KKworR0x1aW50IFRleHR1cmU6OmdldFdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitHTHVpbnQgVGV4dHVyZTo6Z2V0SGVpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworLy8gU2VsZWN0cyBhbiBpbnRl
cm5hbCBEaXJlY3QzRCA5IGZvcm1hdCBmb3Igc3RvcmluZyBhbiBJbWFnZQorRDNERk9STUFUIFRl
eHR1cmU6OnNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0KQoreworICAgIHJldHVybiBEM0RGTVRf
QThSOEc4Qjg7Cit9CisKK2ludCBUZXh0dXJlOjppbWFnZVBpdGNoKGNvbnN0IEltYWdlICZpbWcp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGltZy53aWR0aCAqIDQ7Cit9CisKKy8vIFN0b3JlIHRoZSBw
aXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0
IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAorLy8gaW50byB0aGUg
QkdSQTggcGl4ZWwgcmVjdGFuZ2xlIGF0IG91dHB1dCB3aXRoIG91dHB1dFBpdGNoIGJ5dGVzIGlu
IGJldHdlZW4gZWFjaCBsaW5lLgordm9pZCBUZXh0dXJlOjpsb2FkSW1hZ2VEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRl
UGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ux
NiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzb3VyY2UpOworICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKworICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZzsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4XTsKKyAgICAgICAg
ICAgICAgICByID0gMDsKKyAgICAgICAgICAgICAgICBnID0gMDsKKyAgICAgICAgICAgICAgICBi
ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKKyAgICAgICAgICAgICAgICByID0gc291cmNlW3hdOworICAgICAgICAgICAgICAg
IGcgPSBzb3VyY2VbeF07CisgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4XTsKKyAgICAgICAg
ICAgICAgICBhID0gMHhGRjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgICByID0gc291cmNlWzIq
eCswXTsKKyAgICAgICAgICAgICAgICBnID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgICAg
ICBiID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgICAgICBhID0gc291cmNlWzIqeCsxXTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgICAgICByID0g
c291cmNlW3ggKiAzICsgMF07CisgICAgICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbeCAqIDMg
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4ICogMyArIDJdOworICAgICAg
ICAgICAgICAgICAgICBhID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEg
PSBzb3VyY2UxNlt4XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7CisgICAg
ICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAm
IDB4MDAxRikgPj4gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYgMHgw
N0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAg
ciA9IHNvdXJjZVt4ICogNCArIDBdOworICAgICAgICAgICAgICAgICAgICBnID0gc291cmNlW3gg
KiA0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAg
ICAgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4ICogNCArIDNdOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGEgPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChy
Z2JhICYgMHgwMEYwKSA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEg
JiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+
PiAxMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAgICAgICAgICAgICAgICAgICBhID0gKHJn
YmEgJiAweDAwMDEpID8gMHhGRiA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBiID0gKChy
Z2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdD
MCkgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gKChyZ2JhICYgMHhGODAwKSA+
PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gYjsKKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IGc7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSByOworICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gYTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJl
OjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJ
bWFnZSAqaW1nKQoreworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsK
KworICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwKQorICAgIHsKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKHdp
ZHRoLCBoZWlnaHQsIHNlbGVjdEZvcm1hdChmb3JtYXQpLCBEM0RQT09MX1NZU1RFTU1FTSwgJm5l
d1N1cmZhY2UsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW1nLT5zdXJmYWNl
KSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBpbWctPnN1cmZhY2UgPSBuZXdTdXJmYWNl
OworCisgICAgaW1nLT53aWR0aCA9IHdpZHRoOworICAgIGltZy0+aGVpZ2h0ID0gaGVpZ2h0Owor
ICAgIGltZy0+Zm9ybWF0ID0gZm9ybWF0OworCisgICAgaWYgKHBpeGVscyAhPSBOVUxMICYmIG5l
d1N1cmZhY2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsK
KyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBuZXdTdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBO
VUxMLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAg
IGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZEltYWdl
RGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgICAgICBuZXdTdXJm
YWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBpbWctPmRpcnR5ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7Cit9CisKK3ZvaWQgVGV4dHVy
ZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBpZiAod2lk
dGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1nLT5oZWln
aHQpIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKworICAgIEQzRExPQ0tFRF9SRUNU
IGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxv
Y2tlZCwgTlVMTCwgMCk7CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
aWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgbG9hZEltYWdlRGF0YSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7CisgICAgICAgIGltZy0+c3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KKworICAgIGltZy0+ZGlydHkgPSB0cnVlOworfQor
CitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQoreworICAgIGlm
ICghaXNDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg
ICAgaWYgKG1EaXJ0eU1ldGFEYXRhKQorICAgIHsKKyAgICAgICAgbUJhc2VUZXh0dXJlID0gY3Jl
YXRlVGV4dHVyZSgpOworICAgICAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1EaXJ0eU1ldGFEYXRhIHx8IGRpcnR5SW1hZ2VEYXRhKCkpCisgICAgeworICAgICAg
ICB1cGRhdGVUZXh0dXJlKCk7CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsK
KyAgICBBU1NFUlQoIWRpcnR5SW1hZ2VEYXRhKCkpOworCisgICAgcmV0dXJuIG1CYXNlVGV4dHVy
ZTsKK30KKworYm9vbCBUZXh0dXJlOjppc0RpcnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1E
aXJ0eSB8fCBtRGlydHlNZXRhRGF0YSB8fCBkaXJ0eUltYWdlRGF0YSgpKTsKK30KKworLy8gUmV0
dXJucyB0aGUgdG9wLWxldmVsIHRleHR1cmUgc3VyZmFjZSBhcyBhIHJlbmRlciB0YXJnZXQKK3Zv
aWQgVGV4dHVyZTo6bmVlZFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKCFtSXNSZW5kZXJhYmxl
KQorICAgIHsKKyAgICAgICAgbUJhc2VUZXh0dXJlID0gY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7
CisgICAgICAgIG1Jc1JlbmRlcmFibGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkaXJ0eUlt
YWdlRGF0YSgpKQorICAgIHsKKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworICAgIH0KKworICAg
IG1EaXJ0eU1ldGFEYXRhID0gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZTo6ZHJvcFRleHR1cmUo
KQoreworICAgIGlmIChtQmFzZVRleHR1cmUpCisgICAgeworICAgICAgICBtQmFzZVRleHR1cmUg
PSBOVUxMOworICAgIH0KKworICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpwdXNoVGV4dHVyZShJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm5ld1RleHR1cmUsIGJv
b2wgcmVuZGVyYWJsZSkKK3sKKyAgICBtQmFzZVRleHR1cmUgPSBuZXdUZXh0dXJlOworICAgIG1E
aXJ0eU1ldGFEYXRhID0gZmFsc2U7CisgICAgbUlzUmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7Cisg
ICAgbURpcnR5ID0gdHJ1ZTsKK30KKworCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbWF4bGV2ZWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE9wZW5H
TCBFUyAyLjAgd2l0aG91dCBHTF9PRVNfdGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9U
IG1pcG1hcHMuCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworR0xpbnQgVGV4dHVyZTo6
Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplLCBHTGludCBtYXhsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSwgbWF4bGV2ZWwpOworfQorCitpbnQg
VGV4dHVyZTo6bGV2ZWxDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1CYXNlVGV4dHVyZSA/
IG1CYXNlVGV4dHVyZS0+R2V0TGV2ZWxDb3VudCgpIDogMDsKK30KKworVGV4dHVyZTJEOjpUZXh0
dXJlMkQoQ29udGV4dCAqY29udGV4dCkgOiBUZXh0dXJlKGNvbnRleHQpCit7CisgICAgbVRleHR1
cmUgPSBOVUxMOworICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKK30KKworVGV4dHVyZTJE
Ojp+VGV4dHVyZTJEKCkKK3sKKyAgICBkZWxldGUgbUNvbG9yYnVmZmVyUHJveHk7CisKKyAgICBp
ZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZTJEOjpnZXRUYXJn
ZXQoKSBjb25zdAoreworICAgIHJldHVybiBHTF9URVhUVVJFXzJEOworfQorCisvLyBXaGlsZSBP
cGVuR0wgZG9lc24ndCBjaGVjayB0ZXh0dXJlIGNvbnNpc3RlbmN5IHVudGlsIGRyYXctdGltZSwg
RDNEOSByZXF1aXJlcyBhIGNvbXBsZXRlIHRleHR1cmUKKy8vIGZvciByZW5kZXItdG8tdGV4dHVy
ZSAoc3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBXZSBoYXZlIG5vIHdheSBvZiBrZWVwaW5nIGluZGl2
aWR1YWwgaW5jb25zaXN0ZW50IGxldmVscy4KKy8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGljdWxh
ciBsZXZlbCBvZiB0aGUgdGV4dHVyZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmljIGZv
cm1hdCwgd2lkdGggYW5kIGhlaWdodC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4aXN0
aW5nIHRleHR1cmUgd2FzIHVuc3VpdGFibGUgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28sIGl0
IHdpbGwgYWxzbyBzZXQKKy8vIGEgbmV3IGhlaWdodCBhbmQgd2lkdGggZm9yIHRoZSB0ZXh0dXJl
IGJ5IHdvcmtpbmcgYmFja3dhcmRzIGZyb20gdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQuCiti
b29sIFRleHR1cmUyRDo6cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGJvb2wgd2lk
dGhPa2F5ID0gKG1XaWR0aCA+PiBsZXZlbCA9PSB3aWR0aCk7CisgICAgYm9vbCBoZWlnaHRPa2F5
ID0gKG1IZWlnaHQgPj4gbGV2ZWwgPT0gaGVpZ2h0KTsKKworICAgIGJvb2wgc2l6ZU9rYXkgPSAo
KHdpZHRoT2theSAmJiBoZWlnaHRPa2F5KQorICAgICAgICAgICAgICAgICAgICAgfHwgKHdpZHRo
T2theSAmJiBtSGVpZ2h0ID4+IGxldmVsID09IDAgJiYgaGVpZ2h0ID09IDEpCisgICAgICAgICAg
ICAgICAgICAgICB8fCAoaGVpZ2h0T2theSAmJiBtV2lkdGggPj4gbGV2ZWwgPT0gMCAmJiB3aWR0
aCA9PSAxKSk7CisKKyAgICBib29sIHRleHR1cmVPa2F5ID0gKHNpemVPa2F5ICYmIGludGVybmFs
Rm9ybWF0ID09IG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisKKyAgICBpZiAoIXRleHR1cmVPa2F5
KQorICAgIHsKKyAgICAgICAgVFJBQ0UoIlJlZGVmaW5pbmcgMkQgdGV4dHVyZSAoJWQsIDB4JTA0
WCwgJWQsICVkID0+IDB4JTA0WCwgJWQsICVkKS4iLCBsZXZlbCwKKyAgICAgICAgICAgICAgbUlt
YWdlQXJyYXlbMF0uZm9ybWF0LCBtV2lkdGgsIG1IZWlnaHQsCisgICAgICAgICAgICAgIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICAvLyBQdXJnZSBhbGwgdGhlIGxl
dmVscyBhbmQgdGhlIHRleHR1cmUuCisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2ldLnN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgbUltYWdlQXJy
YXlbaV0uc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ld
LnN1cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBkcm9wVGV4
dHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGggPDwgbGV2ZWw7Cisg
ICAgICAgIG1IZWlnaHQgPSBoZWlnaHQgPDwgbGV2ZWw7CisgICAgICAgIG1JbWFnZUFycmF5WzBd
LmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworICAgIH0KKworICAgIHJldHVybiAhdGV4dHVyZU9r
YXk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworCisgICAgVGV4dHVyZTo6c2V0SW1hZ2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBBU1NF
UlQobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UgIT0gTlVMTCk7CisKKyAgICBpZiAobGV2ZWwg
PCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExl
dmVsID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFj
ZUxldmVsKGxldmVsLCAmZGVzdExldmVsKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICAgICAgICAg
IFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHhvZmZzZXQ7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHlvZmZzZXQ7CisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC5i
b3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisgICAgICAgICAgICBQT0lOVCBkZXN0UG9pbnQ7
CisgICAgICAgICAgICBkZXN0UG9pbnQueCA9IHhvZmZzZXQ7CisgICAgICAgICAgICBkZXN0UG9p
bnQueSA9IHlvZmZzZXQ7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRh
dGVTdXJmYWNlKGltZy0+c3VyZmFjZSwgJnNvdXJjZVJlY3QsIGRlc3RMZXZlbCwgJmRlc3RQb2lu
dCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgY29tbWl0UmVjdChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQor
eworICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAg
ICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKHdpZHRoICE9
IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAg
ICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAg
IHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0g
eTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0OworICAgICAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbChsZXZlbCwgJmRlc3QpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9y
bWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBpbnRlcm5h
bEZvcm1hdCwgMCwgMCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICBtSW1hZ2VBcnJheVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKKyAgICBtSW1hZ2VBcnJheVts
ZXZlbF0uaGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbWFnZUFycmF5W2xldmVsXS5mb3JtYXQgPSBp
bnRlcm5hbEZvcm1hdDsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQoreworICAg
IGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0ud2lkdGggfHwgeW9mZnNl
dCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKHJlZGVmaW5l
VGV4dHVyZSgwLCBtSW1hZ2VBcnJheVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdLndpZHRoLCBt
SW1hZ2VBcnJheVswXS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAgIGlm
IChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsK
KyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9
IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3VyY2VS
ZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3Q7CisgICAgICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVs
LCAmZGVzdCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+
Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgeG9m
ZnNldCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9Cit9
CisKKy8vIFRlc3RzIGZvciBHTCB0ZXh0dXJlIG9iamVjdCBjb21wbGV0ZW5lc3MuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgorYm9vbCBUZXh0dXJlMkQ6OmlzQ29t
cGxldGUoKSBjb25zdAoreworICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS53aWR0
aDsKKyAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmhlaWdodDsKKworICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOworCisgICAgc3dpdGNoICht
TWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xf
TElORUFSOgorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJf
TUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdp
ZHRoKSkKKyAgICAgICAgfHwgKGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQ
b3cyKGhlaWdodCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChtaXBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1BvdzIod2lkdGgpIHx8ICFp
c1BvdzIoaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsK
KworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZm9ybWF0ICE9IG1JbWFn
ZUFycmF5WzBdLmZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZl
bF0ud2lkdGggIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+
IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0
dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKK0lEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqdGV4dHVyZTsKKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9y
bWF0KTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1XaWR0
aCwgbUhlaWdodCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCBtSGVpZ2h0LCAwKSwgMCwgZm9ybWF0
LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgfQor
CisgICAgaWYgKG1UZXh0dXJlKSBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgIG1UZXh0dXJlID0g
dGV4dHVyZTsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnVwZGF0
ZVRleHR1cmUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworCisgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKworICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAobUltYWdl
QXJyYXlbbGV2ZWxdLmRpcnR5KQorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbGV2ZWxTdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmxldmVsU3VyZmFjZSk7CisKKyAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPlVwZGF0ZVN1cmZhY2UobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UsIE5VTEwsIGxl
dmVsU3VyZmFjZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICAgICAgICAgIGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmRpcnR5ID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0
ZXh0dXJlID0gTlVMTDsKKworICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCisg
ICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAg
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBEM0RG
T1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVp
Z2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNE
QmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVGV4dHVyZSAh
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaSwgJnNvdXJjZSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0Owor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAmZGVz
dCk7CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVs
ZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RU
RVhGX05PTkUpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVj
dDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUgIT0g
TlVMTCkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAg
bVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworYm9vbCBUZXh0
dXJlMkQ6OmRpcnR5SW1hZ2VEYXRhKCkgY29uc3QKK3sKKyAgICBpbnQgcSA9IGxvZzIoc3RkOjpt
YXgobVdpZHRoLCBtSGVpZ2h0KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSBxOyBpKysp
CisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uZGlydHkpIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRl
TWlwbWFwcygpCit7CisgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF0ud2lkdGgpIHx8ICFp
c1BvdzIobUltYWdlQXJyYXlbMF0uaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2
ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVk
IG1pcG1hcCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1XaWR0
aCwgbUhlaWdodCkpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlICE9IE5VTEwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UgPSBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgbUltYWdlQXJyYXlbaV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICBtSW1hZ2VBcnJh
eVtpXS5mb3JtYXQgPSBtSW1hZ2VBcnJheVswXS5mb3JtYXQ7CisgICAgICAgIG1JbWFnZUFycmF5
W2ldLndpZHRoID0gc3RkOjptYXgobUltYWdlQXJyYXlbMF0ud2lkdGggPj4gaSwgMSk7CisgICAg
ICAgIG1JbWFnZUFycmF5W2ldLmhlaWdodCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmhlaWdo
dCA+PiBpLCAxKTsKKyAgICB9CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgeworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqdXBwZXIgPSBOVUxMOworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBOVUxMOworCisgICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaS0xLCAmdXBw
ZXIpOworICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZsb3dlcik7CisKKyAg
ICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOworICAgICAg
ICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0NvbG9y
YnVmZmVyICpUZXh0dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCit7CisgICAg
aWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICB9CisKKyAg
ICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OworfQorCitJRGlyZWN0M0RTdXJm
YWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBB
U1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworCisgICAgbmVlZFJlbmRlclRhcmdldCgp
OworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgbVRl
eHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmcmVuZGVyVGFyZ2V0KTsKKworICAgIHJldHVybiBy
ZW5kZXJUYXJnZXQ7Cit9CisKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChDb250ZXh0
ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAgIG1GYWNlUHJv
eGllc1tpXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJl
TWFwKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICAg
IGRlbGV0ZSBtRmFjZVByb3hpZXNbaV07CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlKQorICAg
IHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxM
OworICAgIH0KK30KKworR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAor
eworICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOworfQorCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFn
ZSgwLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgxLCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ko
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3sKKyAgICBzZXRJbWFnZSgzLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwor
fQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscykKK3sKKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBzZXRJbWFnZSg1LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworfQorCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb21taXRSZWN0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaW50IGZhY2UgPSBmYWNlSW5kZXgoZmFjZVRhcmdldCk7CisKKyAgICBBU1NFUlQobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnN1cmZhY2UgIT0gTlVMTCk7CisKKyAgICBpZiAobGV2ZWwg
PCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExl
dmVsID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOworICAgICAgICBBU1NFUlQoZGVz
dExldmVsICE9IE5VTEwpOworCisgICAgICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07
CisKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHhvZmZzZXQ7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHlvZmZzZXQ7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOworICAgICAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OworCisgICAgICAgICAgICBQ
T0lOVCBkZXN0UG9pbnQ7CisgICAgICAgICAgICBkZXN0UG9pbnQueCA9IHhvZmZzZXQ7CisgICAg
ICAgICAgICBkZXN0UG9pbnQueSA9IHlvZmZzZXQ7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCAmc291cmNlUmVj
dCwgZGVzdExldmVsLCAmZGVzdFBvaW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOworCisgICAgICAg
ICAgICBpbWctPmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3sKKyAgICBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0pOworICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCisvLyBUZXN0cyBmb3Ig
R0wgdGV4dHVyZSBvYmplY3QgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjcuMTAgcGFnZSA4MS4KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcGxldGUoKSBjb25z
dAoreworICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0ud2lkdGg7CisKKyAgICBpZiAo
c2l6ZSA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgbWlwbWFwcGluZzsKKworICAgIHN3aXRjaCAobU1pbkZpbHRlcikKKyAgICB7CisgICAgICBj
YXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGlu
ZyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgorICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGZvciAoaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2Vd
WzBdLndpZHRoICE9IHNpemUgfHwgbUltYWdlQXJyYXlbZmFjZV1bMF0uaGVpZ2h0ICE9IHNpemUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChtaXBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1BvdzIoc2l6ZSkg
JiYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NM
QU1QX1RPX0VER0UpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgcSA9IGxvZzIoc2l6ZSk7CisKKyAgICAgICAgZm9yIChpbnQg
ZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmZvcm1hdCAhPSBtSW1hZ2VB
cnJheVswXVswXS5mb3JtYXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS53aWR0aCAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxl
dmVsKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBBU1NFUlQobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLmhlaWdodCA9PSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ud2lkdGgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUg
dGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCitJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0g
c2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICBJRGlyZWN0M0RD
dWJlVGV4dHVyZTkgKnRleHR1cmU7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQ3ViZVRleHR1cmUobVdpZHRoLCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIDApLCAwLCBmb3Jt
YXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICB9
CisKKyAgICBpZiAobVRleHR1cmUpIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICBtVGV4dHVy
ZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCit2b2lkIFRleHR1cmVDdWJl
TWFwOjp1cGRhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQor
ICAgIHsKKyAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07CisKKyAgICAgICAg
ICAgIGlmIChpbWctPmRpcnR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpsZXZlbFN1cmZhY2UgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZl
bCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxldmVsU3VyZmFjZSAhPSBOVUxMKTsKKworICAg
ICAgICAgICAgICAgIGlmIChsZXZlbFN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJm
YWNlKGltZy0+c3VyZmFjZSwgTlVMTCwgbGV2ZWxTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgICAg
ICBsZXZlbFN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICBpbWctPmRp
cnR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCitJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKQoreworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqdGV4dHVy
ZSA9IE5VTEw7CisKKyAgICBpZiAobVdpZHRoICE9IDApCisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0
Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3JlYXRpb25MZXZlbHMobVdp
ZHRoLCAwKSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwg
JnRleHR1cmUsIE5VTEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAg
aW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBm
IDwgNjsgZisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGV2ZWxzOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlOworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNF
Uz4oZiksIGksICZzb3VyY2UpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0
PEQzRENVQkVNQVBfRkFDRVM+KGYpLCBpLCAmZGVzdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBO
VUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVM
TCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICB7
CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgbVRleHR1cmUgPSB0
ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgcmVkZWZp
bmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpOworCisgICAgVGV4dHVyZTo6
c2V0SW1hZ2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXSk7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0
dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQoreworICAgIE1FVEFfQVNTRVJUKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCA9PSAxKTsKKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7CisgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDMpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA0KTsKKyAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gNSk7CisKKyAgICByZXR1cm4gZmFjZSAtIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDsKK30KKworYm9vbCBUZXh0dXJlQ3ViZU1hcDo6ZGlydHlJbWFnZURh
dGEoKSBjb25zdAoreworICAgIGludCBxID0gbG9nMihtV2lkdGgpOworCisgICAgZm9yIChpbnQg
ZiA9IDA7IGYgPCA2OyBmKyspCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBx
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5kaXJ0
eSkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIFdoaWxlIE9wZW5HTCBkb2Vzbid0IGNoZWNrIHRleHR1cmUgY29uc2lzdGVuY3kgdW50
aWwgZHJhdy10aW1lLCBEM0Q5IHJlcXVpcmVzIGEgY29tcGxldGUgdGV4dHVyZQorLy8gZm9yIHJl
bmRlci10by10ZXh0dXJlIChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUgbm8gd2F5IG9m
IGtlZXBpbmcgaW5kaXZpZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzICYgZmFjZXMuCisvLyBDYWxs
IHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1cmUgbXVzdCBiZSBkZWZp
bmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWlnaHQuCisvLworLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBleGlzdGluZyB0ZXh0dXJlIHdhcyB1bnN1aXRhYmxlIGhhZCB0byBi
ZSBkZXN0cm95ZWQuIElmIHNvLCBpdCB3aWxsIGFsc28gc2V0CisvLyBhIG5ldyBzaXplIGZvciB0
aGUgdGV4dHVyZSBieSB3b3JraW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiBzaXplLgorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgpCit7CisgICAgLy8gQXJlIHRoZXNlIHNldHRpbmdz
IGNvbXBhdGlibGUgd2l0aCBsZXZlbCAwPworICAgIGJvb2wgc2l6ZU9rYXkgPSAobUltYWdlQXJy
YXlbMF1bMF0ud2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOworCisgICAgYm9vbCB0ZXh0dXJlT2th
eSA9IChzaXplT2theSAmJiBpbnRlcm5hbEZvcm1hdCA9PSBtSW1hZ2VBcnJheVswXVswXS5mb3Jt
YXQpOworCisgICAgaWYgKCF0ZXh0dXJlT2theSkKKyAgICB7CisgICAgICAgIFRSQUNFKCJSZWRl
ZmluaW5nIGN1YmUgdGV4dHVyZSAoJWQsIDB4JTA0WCwgJWQgPT4gMHglMDRYLCAlZCkuIiwgbGV2
ZWwsCisgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgbUltYWdlQXJyYXlb
MF1bMF0ud2lkdGgsCisgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0LCB3aWR0aCk7CisKKyAg
ICAgICAgLy8gUHVyZ2UgYWxsIHRoZSBsZXZlbHMgYW5kIHRoZSB0ZXh0dXJlLgorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZSAhPSBOVUxMKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uZGly
dHkgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5zdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLnN1
cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAg
ICAgICAgICAgZHJvcFRleHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1XaWR0aCA9IHdp
ZHRoIDw8IGxldmVsOworICAgICAgICBtSW1hZ2VBcnJheVswXVswXS53aWR0aCA9IHdpZHRoIDw8
IGxldmVsOworICAgICAgICBtSGVpZ2h0ID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1JbWFn
ZUFycmF5WzBdWzBdLmhlaWdodCA9IHdpZHRoIDw8IGxldmVsOworCisgICAgICAgIG1JbWFnZUFy
cmF5WzBdWzBdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworICAgIH0KKworICAgIHJldHVybiAh
dGV4dHVyZU9rYXk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0g
ZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQor
eworICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgoZmFjZSk7CisKKyAgICBp
ZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpKQorICAgIHsK
KyAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1U
ZXh0dXJlLCB0cnVlKTsKKyAgICB9CisKKyAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKKwor
ICAgIGlmICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAg
ICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAg
IHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0g
eTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOwor
CisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRh
cmdldCgpLCBzb3VyY2VSZWN0LCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgZGVzdCk7CisgICAgICAg
IGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS53aWR0aCA9IHdpZHRoOworICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmhl
aWdodCA9IGhlaWdodDsKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5mb3JtYXQg
PSBpbnRlcm5hbEZvcm1hdDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFw
OjpnZXRDdWJlTWFwU3VyZmFjZSh1bnNpZ25lZCBpbnQgZmFjZUlkZW50aWZpZXIsIHVuc2lnbmVk
IGludCBsZXZlbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZUluZGV4OworCisgICAgaWYgKGZh
Y2VJZGVudGlmaWVyIDwgNikKKyAgICB7CisgICAgICAgIGZhY2VJbmRleCA9IGZhY2VJZGVudGlm
aWVyOworICAgIH0KKyAgICBlbHNlIGlmIChmYWNlSWRlbnRpZmllciA+PSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggJiYgZmFjZUlkZW50aWZpZXIgPD0gR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aKQorICAgIHsKKyAgICAgICAgZmFjZUluZGV4ID0gZmFjZUlkZW50aWZpZXIg
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGZhY2VJbmRleCA9IDA7CisgICAgfQor
CisgICAgaWYgKG1UZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZSA9IE5VTEw7CisKKyAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUtPkdldEN1YmVNYXBT
dXJmYWNlKHN0YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGZhY2VJbmRleCksIGxldmVsLCAm
c3VyZmFjZSk7CisKKyAgICByZXR1cm4gKFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5VTEw7
Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3sK
KyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXS53
aWR0aDsKKworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWln
aHQgPiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgIH0KKworICAgIGlmIChyZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF1bMF0u
Zm9ybWF0LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCkpCisgICAgeworICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnZXRSZW5kZXJUYXJnZXQoZmFjZSk7Cisg
ICAgfQorCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgUkVD
VCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICBzb3Vy
Y2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Cisg
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKworICAg
ICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQo
KSwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KK30KKworYm9vbCBUZXh0
dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25zdAoreworICAgIGlmIChtSW1hZ2VBcnJh
eVswXVswXS53aWR0aCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAxOyBmIDwgNjsgZisrKQorICAgIHsKKyAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ZdWzBdLndpZHRoICE9IG1JbWFnZUFycmF5WzBdWzBdLndpZHRo
CisgICAgICAgICAgICB8fCBtSW1hZ2VBcnJheVtmXVswXS5mb3JtYXQgIT0gbUltYWdlQXJyYXlb
MF1bMF0uZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVsw
XS53aWR0aCkgfHwgIWlzQ3ViZUNvbXBsZXRlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIC8vIFB1cmdlIGFycmF5IGxl
dmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRl
ZCBtaXBtYXAgbGV2ZWxzLgorICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVsw
XVswXS53aWR0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlICE9IE5VTEwp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uc3VyZmFj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZhY2Ug
PSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5k
aXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5mb3JtYXQgPSBt
SW1hZ2VBcnJheVtmXVswXS5mb3JtYXQ7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS53
aWR0aCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLndpZHRoID4+IGksIDEpOworICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZl1baV0uaGVpZ2h0ID0gbUltYWdlQXJyYXlbZl1baV0ud2lkdGg7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZiwgaS0xKTsKKyAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJmYWNlKGYsIGkp
OworCisgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVy
LCBsb3dlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxM
KSB1cHBlci0+UmVsZWFzZSgpOworICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2Vy
LT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpUZXh0dXJl
Q3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoIUlzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsKKworICAgIGlmIChtRmFjZVBy
b3hpZXNbZmFjZV0gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9
IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpOworICAgIH0KKworICAg
IHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgQVNTRVJU
KElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0
KCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBt
VGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNFUz4o
ZmFjZUluZGV4KHRhcmdldCkpLCAwLCAmcmVuZGVyVGFyZ2V0KTsKKworICAgIHJldHVybiByZW5k
ZXJUYXJnZXQ7Cit9CisKK1RleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpUZXh0dXJl
Q29sb3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KQorICA6IENv
bG9yYnVmZmVyKE5VTEwpLCBtVGV4dHVyZSh0ZXh0dXJlKSwgbVRhcmdldCh0YXJnZXQpCit7Cisg
ICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSk7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlOjpUZXh0dXJlQ29s
b3JidWZmZXJQcm94eTo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdl
dCkgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgbVJlbmRlclRhcmdldCA9IG1UZXh0
dXJlLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKK30KKworaW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRXaWR0aCgp
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgpOworfQorCitpbnQgVGV4dHVyZTo6
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCgpCit7CisgICAgcmV0dXJuIG1UZXh0
dXJlLT5nZXRIZWlnaHQoKTsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRleHR1cmUuaDogRGVmaW5l
cyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVk
CisvLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wg
dGV4dHVyZSBvYmplY3RzIGFuZAorLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KKworI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVS
RV9IXworI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxk
M2Q5Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1l
c3BhY2UgZ2wKK3sKK2NsYXNzIENvbnRleHQ7CitjbGFzcyBCbGl0OworCitlbnVtCit7CisgICAg
TUFYX1RFWFRVUkVfU0laRSA9IDIwNDgsCisgICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9
IDIwNDgsCisKKyAgICBNQVhfVEVYVFVSRV9MRVZFTFMgPSAxMiAgIC8vIDErbG9nMiBvZiBNQVhf
VEVYVFVSRV9TSVpFCit9OworCitjbGFzcyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAgICBleHBs
aWNpdCBUZXh0dXJlKENvbnRleHQgKmNvbnRleHQpOworCisgICAgdmlydHVhbCB+VGV4dHVyZSgp
OworCisgICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgPSAwOworCisgICAgYm9v
bCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xl
bnVtIGZpbHRlcik7CisgICAgYm9vbCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7CisgICAgYm9vbCBz
ZXRXcmFwVChHTGVudW0gd3JhcCk7CisKKyAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwUygp
IGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworCisgICAgR0x1aW50IGdldFdp
ZHRoKCkgY29uc3Q7CisgICAgR0x1aW50IGdldEhlaWdodCgpIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIGlzQ29tcGxldGUoKSBjb25zdCA9IDA7CisKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmdldFRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBz
KCkgPSAwOworCisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CisKKyAgcHJvdGVjdGVkOgorICAg
IGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OworICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJl
Q29sb3JidWZmZXJQcm94eTsKKyAgICBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSA6IHB1
YmxpYyBDb2xvcmJ1ZmZlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgVGV4dHVyZUNv
bG9yYnVmZmVyUHJveHkoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgICAg
ICAgICAvLyB0YXJnZXQgaXMgYSAyRC1saWtlIHRleHR1cmUgdGFyZ2V0IChHTF9URVhUVVJFXzJE
IG9yIG9uZSBvZiB0aGUgY3ViZSBmYWNlIHRhcmdldHMpCisKKyAgICAgICAgdmlydHVhbCBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICAgICAgdmlydHVhbCBpbnQg
Z2V0V2lkdGgoKTsKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCk7CisKKyAgICAgIHBy
aXZhdGU6CisgICAgICAgIFRleHR1cmUgKm1UZXh0dXJlOworICAgICAgICBHTGVudW0gbVRhcmdl
dDsKKyAgICB9OworCisgICAgLy8gSGVscGVyIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzaW5n
bGUgaW1hZ2UgbGF5ZXIKKyAgICBzdHJ1Y3QgSW1hZ2UKKyAgICB7CisgICAgICAgIEltYWdlKCk7
CisgICAgICAgIH5JbWFnZSgpOworCisgICAgICAgIEdMc2l6ZWkgd2lkdGg7CisgICAgICAgIEdM
c2l6ZWkgaGVpZ2h0OworICAgICAgICBHTGVudW0gZm9ybWF0OworCisgICAgICAgIGJvb2wgZGly
dHk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2U7CisgICAgfTsKKworICAg
IHN0YXRpYyBEM0RGT1JNQVQgc2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQpOworICAgIGludCBp
bWFnZVBpdGNoKGNvbnN0IEltYWdlJiBpbWcpIGNvbnN0OworCisgICAgR0xlbnVtIG1NaW5GaWx0
ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBHTGVu
dW0gbVdyYXBUOworCisgICAgdm9pZCBzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworCisgICAgdm9pZCBuZWVkUmVuZGVyVGFyZ2V0KCk7
CisKKyAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0OworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6
ZWkgc2l6ZSwgR0xpbnQgbWF4bGV2ZWwpIGNvbnN0OworCisgICAgLy8gVGhlIHBvaW50ZXIgcmV0
dXJuZWQgaXMgd2VhayBhbmQgaXQgaXMgYXNzdW1lZCB0aGUgZGVyaXZlZCBjbGFzcyB3aWxsIGtl
ZXAgYSBzdHJvbmcgcG9pbnRlciB1bnRpbCB0aGUgbmV4dCBjcmVhdGVUZXh0dXJlKCkgY2FsbC4K
KyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOworICAgIHZpcnR1
YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KSA9IDA7
CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2
b2lkIGRyb3BUZXh0dXJlKCk7CisgICAgdm9pZCBwdXNoVGV4dHVyZShJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKm5ld1RleHR1cmUsIGJvb2wgcmVuZGVyYWJsZSk7CisKKyAgICBCbGl0ICpnZXRCbGl0
dGVyKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgbVdpZHRoOworICAgIHVuc2lnbmVkIGludCBtSGVp
Z2h0OworCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKKworICAgIENvbnRleHQgKm1Db250ZXh0
OworCisgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICptQmFzZVRleHR1cmU7IC8vIFRoaXMgaXMg
YSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVkIGNsYXNzIGlzIGFzc3VtZWQgdG8gb3duIGEgc3Ry
b25nIHBvaW50ZXIuCisgICAgYm9vbCBtRGlydHlNZXRhRGF0YTsKKyAgICBib29sIG1Jc1JlbmRl
cmFibGU7CisKKyAgICBib29sIG1EaXJ0eTsKKworICAgIHZvaWQgbG9hZEltYWdlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworfTsKKworY2xhc3MgVGV4dHVyZTJEIDogcHVibGlj
IFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRleHR1cmUyRChDb250ZXh0ICpj
b250ZXh0KTsKKworICAgIH5UZXh0dXJlMkQoKTsKKworICAgIEdMZW51bSBnZXRUYXJnZXQoKSBj
b25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBj
b3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNl
KTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworCisgICAgdmlydHVhbCBD
b2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CisKKyAgcHJpdmF0ZToK
KyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKKworICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY29u
dmVydFRvUmVuZGVyVGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEo
KSBjb25zdDsKKworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAg
SW1hZ2UgbUltYWdlQXJyYXlbTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEaXJlY3QzRFRl
eHR1cmU5ICptVGV4dHVyZTsKKworICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptQ29sb3Ji
dWZmZXJQcm94eTsKKworICAgIGJvb2wgcmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
KTsKK307CisKK2NsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IFRleHR1cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpOworCisg
ICAgflRleHR1cmVDdWJlTWFwKCk7CisKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lk
IHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdl
UG9zWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKworICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJ
bWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5k
ZXJidWZmZXIgKnNvdXJjZSk7CisKKyAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKworICAgIHZpcnR1YWwgQ29sb3JidWZm
ZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpOworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKKworICAgIHZpcnR1YWwgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBj
b25zdDsKKworICAgIC8vIGZhY2VJZGVudGlmaWVyIGlzIDAtNSBvciBvbmUgb2YgdGhlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfKiBlbnVtZXJhbnRzLgorICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUg
Y2FsbCB1bmRlcmx5aW5nIERpcmVjdDNEIGNhbGwgZmFpbHMuCisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldEN1YmVNYXBTdXJmYWNlKHVuc2lnbmVkIGludCBmYWNlSWRlbnRpZmllciwgdW5zaWdu
ZWQgaW50IGxldmVsKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51
bSBmYWNlKTsKKworICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKKworICAgIHZvaWQg
c2V0SW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgY29t
bWl0UmVjdChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIHJl
ZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVp
IHdpZHRoKTsKKworICAgIEltYWdlIG1JbWFnZUFycmF5WzZdW01BWF9URVhUVVJFX0xFVkVMU107
CisKKyAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOworCisgICAgVGV4dHVyZUNv
bG9yYnVmZmVyUHJveHkgKm1GYWNlUHJveGllc1s2XTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKK307Cit9CisKKyNlbmRp
ZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGxp
YkdMRVN2Mi5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBFUyAyLjAgZnVuY3Rp
b25zLgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxs
aW1pdHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorCitleHRlcm4gIkMiCit7CisKK3ZvaWQgX19zdGRjYWxs
IGdsQWN0aXZlVGV4dHVyZShHTGVudW0gdGV4dHVyZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0
ZXh0dXJlID0gMHglWCkiLCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTAgKyBnbDo6TUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0QWN0aXZlU2FtcGxlcih0ZXh0dXJlIC0g
R0xfVEVYVFVSRTApOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQXR0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVp
bnQgc2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNo
YWRlciA9ICVkKSIsIHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgZ2w6OlNoYWRl
ciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dy
YW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+YXR0YWNoU2hhZGVyKHNo
YWRlck9iamVjdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRBdHRy
aWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5h
bWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAl
ZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRleCwgbmFtZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoc3RybmNtcChuYW1lLCAiZ2xfIiwgMykgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5iaW5kQXR0cmlidXRlTG9jYXRpb24o
aW5kZXgsIG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
YnVmZmVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBidWZm
ZXIgPSAlZCkiLCB0YXJnZXQsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kRWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
QmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCki
LCB0YXJnZXQsIGZyYW1lYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRh
cmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCByZW5kZXJi
dWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IHJlbmRl
cmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kUmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBH
THVpbnQgdGV4dHVyZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVp
bnQgdGV4dHVyZSA9ICVkKSIsIHRhcmdldCwgdGV4dHVyZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1
cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICBp
ZiAodGV4dHVyZU9iamVjdCAmJiB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQg
JiYgdGV4dHVyZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUyRCh0ZXh0dXJl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAo
dGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVu
LCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMY2xhbXBm
IHJlZCA9ICVmLCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xh
bXBmIGFscGhhID0gJWYpIiwKKyAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29udGV4dC0+c2V0QmxlbmRDb2xvcihnbDo6Y2xhbXAwMShyZWQpLCBnbDo6Y2xhbXAwMShncmVl
biksIGdsOjpjbGFtcDAxKGJsdWUpLCBnbDo6Y2xhbXAwMShhbHBoYSkpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxl
bmRFcXVhdGlvbihHTGVudW0gbW9kZSkKK3sKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSht
b2RlLCBtb2RlKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0g
bW9kZVJHQiA9IDB4JVgsIEdMZW51bSBtb2RlQWxwaGEgPSAweCVYKSIsIG1vZGVSR0IsIG1vZGVB
bHBoYSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobW9kZVJHQikKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6CisgICAgICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOgorICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtb2Rl
QWxwaGEpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgorICAgICAgICAg
IGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9T
VUJUUkFDVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlv
bihtb2RlUkdCLCBtb2RlQWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jKEdMZW51bSBzZmFjdG9y
LCBHTGVudW0gZGZhY3RvcikKK3sKKyAgICBnbEJsZW5kRnVuY1NlcGFyYXRlKHNmYWN0b3IsIGRm
YWN0b3IsIHNmYWN0b3IsIGRmYWN0b3IpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVu
Y1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwg
R0xlbnVtIGRzdEFscGhhKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHNyY1JHQiA9IDB4JVgsIEdM
ZW51bSBkc3RSR0IgPSAweCVYLCBHTGVudW0gc3JjQWxwaGEgPSAweCVYLCBHTGVudW0gZHN0QWxw
aGEgPSAweCVYKSIsCisgICAgICAgICAgc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBo
YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3JjUkdCKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAg
ICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19D
T0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FM
UEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBj
YXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNf
QUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzd2l0Y2ggKGRzdFJHQikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVS
TzoKKyAgICAgICAgICBjYXNlIEdMX09ORToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoK
KyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBH
TF9EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAg
ICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NS
Q19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoK
KyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBj
YXNlIEdMX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNU
QU5UX0FMUEhBOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgc3dpdGNoIChzcmNBbHBoYSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoK
KyAgICAgICAgICBjYXNlIEdMX09ORToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAg
ICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9E
U1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAg
ICAgIGNhc2UgR0xfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19B
TFBIQToKKyAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAg
ICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkc3RBbHBoYSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX09O
RToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Cisg
ICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBjb25zdGFudENvbG9yVXNl
ZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgc3JjUkdCID09IEdMX09ORV9NSU5V
U19DT05TVEFOVF9DT0xPUiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRz
dFJHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SKTsKKworICAgICAgICBib29sIGNvbnN0YW50QWxwaGFVc2VkID0gKHNyY1JHQiA9
PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBzcmNSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FM
UEhBIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UkdCID09IEdMX0NP
TlNUQU5UX0FMUEhBIHx8IGRzdFJHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpOwor
CisgICAgICAgIGlmIChjb25zdGFudENvbG9yVXNlZCAmJiBjb25zdGFudEFscGhhVXNlZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgRVJSKCJTaW11bHRhbmVvdXMgdXNlIG9mIEdMX0NPTlNUQU5U
X0FMUEhBL0dMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSBhbmQgR0xfQ09OU1RBTlRfQ09MT1Iv
R0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SIGludmFsaWQgdW5kZXIgV2ViR0wiKTsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5k
RmFjdG9ycyhzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRh
dGEsIEdMZW51bSB1c2FnZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCwgR0xlbnVt
IHVzYWdlID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHNpemUgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKHVzYWdlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fRFJB
VzoKKyAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19EUkFXOgorICAgICAgICAgIGNhc2UgR0xfRFlO
QU1JQ19EUkFXOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisK
KyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXItPmJ1ZmZl
ckRhdGEoZGF0YSwgc2l6ZSwgdXNhZ2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNl
dCA9ICVkLCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44
cCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKHNpemUgPCAwIHx8IG9mZnNldCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OkJ1ZmZlciAqYnVmZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAg
ICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKChzaXplX3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmZmVyLT5idWZmZXJTdWJEYXRhKGRhdGEs
IHNpemUsIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVt
IHRhcmdldCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDAp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKTsK
KworICAgICAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQoreworICAgIFRS
QUNFKCIoR0xiaXRmaWVsZCBtYXNrID0gJVgpIiwgbWFzayk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXIobWFz
ayk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xDbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgcmVk
ID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYg
YWxwaGEgPSAlZikiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENs
ZWFyRGVwdGhmKEdMY2xhbXBmIGRlcHRoKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgZGVwdGgg
PSAlZikiLCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKK3sKKyAgICBUUkFDRSgiKEdMaW50IHMgPSAlZCkiLCBz
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRDbGVhclN0ZW5jaWwocyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb2xvck1hc2soR0xi
b29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFs
cGhhKQoreworICAgIFRSQUNFKCIoR0xib29sZWFuIHJlZCA9ICVkLCBHTGJvb2xlYW4gZ3JlZW4g
PSAlZCwgR0xib29sZWFuIGJsdWUgPSAlZCwgR0xib29sZWFuIGFscGhhID0gJWQpIiwKKyAgICAg
ICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0Q29sb3JNYXNrKHJl
ZCA9PSBHTF9UUlVFLCBncmVlbiA9PSBHTF9UUlVFLCBibHVlID09IEdMX1RSVUUsIGFscGhhID09
IEdMX1RSVUUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29tcGlsZVNoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAg
IFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hh
ZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlm
ICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPmNvbXBpbGUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIFRSQUNFKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgIiAKKyAgICAgICAgICAiR0xzaXplaSBoZWln
aHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0
IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhU
VVJFX0xFVkVMUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIod2lkdGgpKSB8fCAobGV2ZWwgPiAwICYm
ICFnbDo6aXNQb3cyKGhlaWdodCkpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6ZSA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyB1bHRp
bWF0ZWx5IHdlIGRvbid0IHN1cHBvcnQgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQg
PSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0g
JWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgaW1hZ2VTaXpl
ID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6
ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRh
cmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwg
PiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxldmVs
ID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIo
aGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHhvZmZz
ZXQgIT0gMCB8fCB5b2Zmc2V0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBUaGUgdGV4dHVyZSBiZWluZyBvcGVyYXRl
ZCBvbiBpcyBub3QgYSBjb21wcmVzc2VkIHRleHR1cmUuCisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcikKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMaW50IHggPSAlZCwgR0xpbnQgeSA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRl
ciA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChs
ZXZlbCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsZXZlbCA+IDAgJiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWln
aHQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6
Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVf
U0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6CisgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUg
Pj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xf
UkdCOgorICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9yZGVyICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291
cmNlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdl
KGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAg
VFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9m
ZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgeCA9ICVk
LCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVU
YXJnZXQodGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVs
ID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8
fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZDo6
bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6
bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gY29udGV4dC0+Z2V0
RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYg
KCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKworR0x1aW50IF9fc3RkY2FsbCBnbENyZWF0ZVByb2dyYW0odm9pZCkKK3sK
KyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworR0x1aW50IF9fc3RkY2FsbCBnbENyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSB0eXBlID0gMHglWCkiLCB0eXBlKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQtPmNyZWF0ZVNoYWRlcih0eXBlKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ3VsbEZhY2UoR0xlbnVtIG1v
ZGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xf
RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRDdWxsTW9kZShtb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwg
Y29uc3QgR0x1aW50KiBidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNv
bnN0IEdMdWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVCdWZmZXIoYnVmZmVyc1tp
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9
ICVkLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgZnJhbWVidWZm
ZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZl
cnNbaV0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyc1tpXSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzKQoreworICAg
IFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogcmVuZGVyYnVmZmVycyA9IDB4
JTAuOHApIiwgbiwgcmVuZGVyYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyc1tpXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAg
ICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoc2hhZGVyID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZihjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0
LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVRleHR1cmVzKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVk
LCBjb25zdCBHTHVpbnQqIHRleHR1cmVzID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0gIT0gMCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1
cmUodGV4dHVyZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERlcHRoRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmdW5jID0g
MHglWCkiLCBmdW5jKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmdW5jKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9ORVZFUjoKKyAgICAgICAgICBjYXNlIEdMX0FM
V0FZUzoKKyAgICAgICAgICBjYXNlIEdMX0xFU1M6CisgICAgICAgICAgY2FzZSBHTF9MRVFVQUw6
CisgICAgICAgICAgY2FzZSBHTF9FUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6Cisg
ICAgICAgICAgY2FzZSBHTF9HRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhGdW5jKGZ1bmMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQoreworICAgIFRSQUNFKCIoR0xib29sZWFuIGZs
YWcgPSAlZCkiLCBmbGFnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aE1hc2soZmxhZyAhPSBHTF9GQUxT
RSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xEZXB0aFJhbmdlZihHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcikK
K3sKKyAgICBUUkFDRSgiKEdMY2xhbXBmIHpOZWFyID0gJWYsIEdMY2xhbXBmIHpGYXIgPSAlZiki
LCB6TmVhciwgekZhcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xEZXRhY2hTaGFkZXIoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCit7Cisg
ICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJv
Z3JhbSwgc2hhZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVj
dCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlciAqc2hhZGVyQnlQcm9ncmFtSGFuZGxlOworICAgICAgICAgICAgICAgIHNoYWRlckJ5
UHJvZ3JhbUhhbmRsZSA9IGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNoYWRlckJ5UHJvZ3JhbUhhbmRsZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
QnlTaGFkZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcik7CisgICAgICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQnlTaGFkZXJIYW5kbGUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmRldGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0g
Y2FwID0gMHglWCkiLCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3Vs
bEZhY2UoZmFsc2UpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
UE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbChm
YWxzZSk7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9f
Q09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShmYWxzZSk7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4
dC0+c2V0U2FtcGxlQ292ZXJhZ2UoZmFsc2UpOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVz
dChmYWxzZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KGZhbHNlKTsgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RGVwdGhUZXN0KGZhbHNlKTsgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRC
bGVuZChmYWxzZSk7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcihmYWxzZSk7ICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCkKK3sKKyAgICBUUkFDRSgi
KEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
RW5hYmxlZChpbmRleCwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5cyhHTGVudW0gbW9kZSwg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9
IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCkiLCBtb2RlLCBmaXJz
dCwgY291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwIHx8IGZp
cnN0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQqIGluZGljZXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdM
c2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGlj
ZXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0Vs
ZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVu
dW0gY2FwKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKGNhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBj
b250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxl
QWxwaGFUb0NvdmVyYWdlKHRydWUpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0
U3RlbmNpbFRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0RGl0aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBp
bmRleCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliRW5hYmxlZChpbmRleCwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGaW5p
c2godm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5maW5pc2goKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEZsdXNoKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Zmx1c2goKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVy
KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50
ID0gMHglWCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCA9IDB4JVgsICIKKyAgICAgICAgICAi
R0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVm
ZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
dGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSIHx8IHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5E
RVJCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZm
ZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkg
PT0gMCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRDb2xvcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+
c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVt
IHRleHRhcmdldCA9IDB4JVgsICIKKyAgICAgICAgICAiR0x1aW50IHRleHR1cmUgPSAlZCwgR0xp
bnQgbGV2ZWwgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRleHRhcmdldCA9IEdMX05PTkU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUgKnRleCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAodGV4ID09IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgorICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJF
X0NVQkVfTUFQKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWwgIT0gMCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9
PSAwIHx8ICFmcmFtZWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6ICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIodGV4
dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9B
VFRBQ0hNRU5UOiAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1
cmUpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDog
ZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGcm9udEZhY2UoR0xlbnVtIG1vZGUpCit7CisgICAg
VFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobW9kZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQ1c6Cisg
ICAgICAgICAgY2FzZSBHTF9DQ1c6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRGcm9udEZhY2UobW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuQnVmZmVycyhHTHNpemVp
IG4sIEdMdWludCogYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVp
bnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1
cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAg
ICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0
ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNp
emVpIG4sIEdMdWludCogZnJhbWVidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0g
JWQsIEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJzW2ldID0gY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblJl
bmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCit7CisgICAgVFJB
Q0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBu
LCByZW5kZXJidWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
bmRlcmJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykK
K3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVzID0gIDB4JTAu
OHApIiwgbiwgdGV4dHVyZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dGV4dHVyZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRBY3RpdmVBdHRyaWIoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xz
aXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWlu
dCBpbmRleCA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSAqbGVuZ3RoID0gMHgl
MC44cCwgIgorICAgICAgICAgICJHTGludCAqc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSAqdHlwZSA9
ICUwLjhwLCBHTGNoYXIgKm5hbWUgPSAlMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGluZGV4
LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdl
dEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxl
bmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3JtKEdMdWlu
dCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3Ro
LCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7CisgICAgVFJBQ0Uo
IihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXpl
ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQqIHNp
emUgPSAweCUwLjhwLCBHTGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUw
LjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwg
dHlwZSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IChHTHVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2V0QXR0YWNoZWRTaGFkZXJzKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50
LCBHTHNpemVpKiBjb3VudCwgR0x1aW50KiBzaGFkZXJzKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCwgR0xzaXplaSBtYXhjb3VudCA9ICVkLCBHTHNpemVpKiBjb3VudCA9IDB4
JTAuOHAsIEdMdWludCogc2hhZGVycyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBt
YXhjb3VudCwgY291bnQsIHNoYWRlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
bWF4Y291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzKG1heGNvdW50
LCBjb3VudCwgc2hhZGVycyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKworaW50IF9fc3RkY2FsbCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9n
cmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUgPSAlcykiLCBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUsIC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dHJpYnV0ZUxv
Y2F0aW9uKG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEJvb2xlYW52
KEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGJvb2xlYW4qIHBhcmFtcyA9IDB4JTAuOHApIiwgIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJh
bXMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KworICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRo
ZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJh
bXNbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBO
VUxMOworICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1z
XTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50
UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW50UGFyYW1zW2ldID09IDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJh
bXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVy
UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQor
eworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgs
IEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OkJ1ZmZlciAqYnVmZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAg
ICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVm
ZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVh
bnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9CVUZGRVJfVVNBR0U6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGJ1ZmZlci0+dXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CVUZGRVJfU0laRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5z
aXplKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xH
ZXRFcnJvcih2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xf
Tk9fRVJST1I7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xm
bG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0
LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1Q
YXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0
ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYg
KG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtu
b3duIHRoYXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1l
dGVycyB0byByZXR1cm4uCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9C
T09MKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBH
TGJvb2xlYW5bbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRC
b29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFM
U0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMC4wZjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSAxLjBmOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAg
ICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGZsb2F0KWludFBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0
YWNobWVudCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgcGFyYW1zKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsK
KyAgICAgICAgICAgIEdMdWludCBhdHRhY2htZW50SGFuZGxlOworICAgICAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9S
X0FUVEFDSE1FTlQwOiAgICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyVHlwZSgpOworICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xv
cmJ1ZmZlckhhbmRsZSgpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgICAgCisgICAgICAgICAgICAgICAgYXR0YWNobWVu
dFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gY29udGV4dC0+Z2V0RnJhbWVidWZm
ZXIoKS0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAgCisgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0
LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVu
dE9iamVjdFR5cGU7ICAgLy8gVHlwZSBjYXRlZ29yeQorICAgICAgICAgICAgaWYgKGF0dGFjaG1l
bnRUeXBlID09IEdMX05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0
YWNobWVudFR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNU
ZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dE9iamVjdFR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRP
YmplY3RUeXBlID09IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9i
amVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxv
dyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAg
ICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBu
YXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwor
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1l
LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9
PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5h
bWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAg
ICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOworICAg
ICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOwor
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFy
YW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDE7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBH
TF9GTE9BVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQg
KmZsb2F0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBu
ZXcgR0xmbG9hdFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5H
RSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9D
TEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQp
KCgoR0xmbG9hdCkoMHhGRkZGRkZGRikgKiBmbG9hdFBhcmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShmbG9hdFBh
cmFtc1tpXSA+IDAuMGYgPyBmbG9vcihmbG9hdFBhcmFtc1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0
UGFyYW1zW2ldIC0gMC41KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBH
TGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5h
bWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFU
VVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVk
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0lORk9f
TE9HX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0
SW5mb0xvZ0xlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9BVFRBQ0hFRF9TSEFERVJTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9n
cmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFt
T2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVj
dC0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1JbmZvTG9n
KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFy
KiBpbmZvbG9nKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xzaXplaSBi
dWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogaW5mb2xvZyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
ckhhbmRsZSgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVy
KGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpKTsKKworICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfV0lEVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0V2lk
dGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5E
RVJCVUZGRVJfSEVJR0hUOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldEhlaWdodCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHJlbmRlcmJ1ZmZlci0+Z2V0Rm9ybWF0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZm
ZXIqPihyZW5kZXJidWZmZXIpLT5nZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAg
ICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9y
YnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6
Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6
CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEFscGhhU2l6ZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0RFUFRI
X1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNEZXB0aGJ1ZmZlcigp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PGdsOjpEZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldERlcHRoU2l6ZSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc1N0ZW5j
aWxidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFN0
ZW5jaWxTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlcml2KEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xl
bnVtIHBuYW1lID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNoYWRlciwgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVy
KHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TSEFERVJfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gc2hhZGVyT2JqZWN0LT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHNoYWRlck9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6
IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVj
dC0+Z2V0SW5mb0xvZ0xlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gc2hhZGVyT2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJJ
bmZvTG9nKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBH
TGNoYXIqIGluZm9sb2cpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6
ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIGluZm9s
b2cgPSAweCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIGluZm9s
b2cpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAq
c2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAg
IGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c2hhZGVyT2JqZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBw
cmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pCit7CisgICAgVFJB
Q0UoIihHTGVudW0gc2hhZGVydHlwZSA9IDB4JVgsIEdMZW51bSBwcmVjaXNpb250eXBlID0gMHgl
WCwgR0xpbnQqIHJhbmdlID0gMHglMC44cCwgR0xpbnQqIHByZWNpc2lvbiA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBzaGFkZXJ0eXBlLCBwcmVjaXNpb250eXBlLCByYW5nZSwgcHJlY2lzaW9uKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzaGFkZXJ0eXBlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgorICAgICAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAg
ICAgICAgc3dpdGNoIChwcmVjaXNpb250eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9MT1dfRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9NRURJVU1fRkxPQVQ6CisgICAgICAgICAg
Y2FzZSBHTF9ISUdIX0ZMT0FUOgorICAgICAgICAgICAgLy8gQXNzdW1lIElFRUUgNzU0IHByZWNp
c2lvbgorICAgICAgICAgICAgcmFuZ2VbMF0gPSAxMjc7CisgICAgICAgICAgICByYW5nZVsxXSA9
IDEyNzsKKyAgICAgICAgICAgICpwcmVjaXNpb24gPSAyMzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfTE9XX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX01FRElVTV9JTlQ6
CisgICAgICAgICAgY2FzZSBHTF9ISUdIX0lOVDoKKyAgICAgICAgICAgIC8vIFNvbWUgKG1vc3Qp
IGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBu
dW1iZXJzLAorICAgICAgICAgICAgLy8gd2hpY2ggY2FuIGFjY3VyYXRlbHkgcmVwcmVzZW50IGlu
dGVnZXJzIHVwIHRvICsvLTE2Nzc3MjE2CisgICAgICAgICAgICByYW5nZVswXSA9IDI0OworICAg
ICAgICAgICAgcmFuZ2VbMV0gPSAyNDsKKyAgICAgICAgICAgICpwcmVjaXNpb24gPSAwOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyU291cmNlKEdMdWludCBz
aGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSkK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQs
IEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogc291cmNlID0gMHglMC44cCkiLAor
ICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29u
dGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9iamVjdC0+
Z2V0U291cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xH
ZXRTdHJpbmcoR0xlbnVtIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gbmFtZSA9IDB4JVgp
IiwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1ZFTkRPUjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSop
IlRyYW5zR2FtaW5nIEluYy4iOworICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CisgICAgICAg
ICAgICByZXR1cm4gKEdMdWJ5dGUqKSJBTkdMRSI7CisgICAgICAgICAgY2FzZSBHTF9WRVJTSU9O
OgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoZ2l0LWRldmVs
ICJfX0RBVEVfXyAiICIgX19USU1FX18iKSI7CisgICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT046CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMg
R0xTTCBFUyAxLjAwIChnaXQtZGV2ZWwgIl9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKKyAgICAg
ICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgo
Y29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCAoR0x1Ynl0ZSopTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChHTHVieXRlKilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVA6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1pbkZpbHRlcigpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JB
UF9TOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFw
UygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRXcmFwVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdl
dCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIFRS
QUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xmbG9hdCog
cGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJv
Z3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0LT5nZXRVbmlmb3JtZnYobG9jYXRpb24sIHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRp
b24sIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBH
TGludCBsb2NhdGlvbiA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBs
b2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwg
IXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9u
LCBwYXJhbXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1M
b2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNF
KCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBw
cm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChzdHJzdHIobmFtZSwgImds
XyIpID09IG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAt
MSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
LCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtTG9jYXRp
b24obmFtZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7
CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRl
eEF0dHJpYmZ2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7
CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xm
bG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbDo6QXR0cmlidXRlU3RhdGUgYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9F
TkFCTEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUu
bUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVNpemU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
VFJJREU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1T
dHJpZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9h
dClhdHRyaWJTdGF0ZS5tVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUg
OiBHTF9GQUxTRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJy
ZW50VmFsdWVbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWludCBpbmRleCwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0g
JWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0ZSBh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChhdHRyaWJTdGF0ZS5tRW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX1NUUklERToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0
cmlkZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0
YXRlLm1UeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0
ZS5tQm91bmRCdWZmZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8g
Zmxvb3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5h
bWUsIEdMdm9pZCoqIHBvaW50ZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4JTAuOHApIiwgaW5kZXgs
IHBuYW1lLCBwb2ludGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSAhPSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1BPSU5URVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICpwb2ludGVyID0gY29uc3RfY2FzdDxHTHZvaWQqPihjb250ZXh0LT5nZXRWZXJ0ZXhBdHRy
aWJQb2ludGVyKGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xIaW50KEdMZW51bSB0YXJnZXQsIEdMZW51bSBt
b2RlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBtb2RlID0g
MHglWCkiLCB0YXJnZXQsIG1vZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJ
TlQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfRkFTVEVTVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9OSUNFU1Q6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRE9OVF9DQVJFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVCkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVyKEdM
dWludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVmZmVy
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIGJ1ZmZlcikKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0QnVm
ZmVyKGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChidWZmZXJPYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0VuYWJsZWQoR0xl
bnVtIGNhcCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChjYXApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
OiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250
ZXh0LT5pc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFU
b0NvdmVyYWdlRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RTogICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNTY2lzc29yVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxl
ZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQtPmlzRGVwdGhUZXN0RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVk
KCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNEaXRoZXJFbmFibGVkKCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNG
cmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgZnJh
bWVidWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCAmJiBmcmFtZWJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAg
cmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHByb2dyYW0pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1Jl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHJl
bmRlcmJ1ZmZlciA9ICVkKSIsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCAmJiByZW5kZXJidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOworCisgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNT
aGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCki
LCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgc2hhZGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0
LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKHNoYWRlck9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzVGV4
dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCB0ZXh0dXJlID0gJWQp
IiwgdGV4dHVyZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiB0ZXh0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNv
bnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbExp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKQoreworICAgIFRSQUNFKCIoR0xmbG9hdCB3aWR0aCA9ICVm
KSIsIHdpZHRoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdpZHRoIDw9IDAuMGYp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+c2V0TGluZVdpZHRoKHdpZHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBw
cm9ncmFtKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+bGluaygpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1l
LCBHTGludCBwYXJhbSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50
IHBhcmFtID0gJWQpIiwgcG5hbWUsIHBhcmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAg
ICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFt
ICE9IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0VW5wYWNrQWxpZ25tZW50KHBhcmFtKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgorICAgICAgICAg
ICAgICAgIGlmIChwYXJhbSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0gIT0gNCAmJiBwYXJh
bSAhPSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFBhY2tBbGlnbm1lbnQocGFyYW0pOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQb2x5Z29uT2Zm
c2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIFRSQUNFKCIoR0xmbG9h
dCBmYWN0b3IgPSAlZiwgR0xmbG9hdCB1bml0cyA9ICVmKSIsIGZhY3RvciwgdW5pdHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldFBvbHlnb25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xS
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgVFJB
Q0UoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNp
emVpIGhlaWdodCA9ICVkLCAiCisgICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVu
dW0gdHlwZSA9IDB4JVgsIEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgIHBpeGVscyk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6
CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgZ2w6OklNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHZvaWQpCit7CisgICAgVFJB
Q0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VD
b21waWxlcigpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNp
emVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3
aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICAgICAgY2FzZSBH
TF9SR0I1X0ExOgorICAgICAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgICAgIGNhc2UgR0xf
U1RFTkNJTF9JTkRFWDg6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lkdGggPiBnbDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXIobmV3IGdsOjpEZXB0aGJ1ZmZlcih3aWR0aCwg
aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
UkdCQTQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0I1NjU6CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5l
dyBnbDo6Q29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXIobmV3IGdsOjpTdGVuY2ls
YnVmZmVyKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZh
bHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgdmFsdWUgPSAl
ZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBpbnZlcnQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNhbXBsZUNvdmVyYWdlUGFyYW1zKGdsOjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RS
VUUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsU2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVk
LCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVp
Z2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTY2lzc29yUGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVu
dW0gYmluYXJ5Zm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCit7
CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBzaGFkZXJzID0gMHgl
MC44cCwgR0xlbnVtIGJpbmFyeWZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2
b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAg
biwgc2hhZGVycywgYmluYXJ5Zm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIC8vIE5vIGJpbmFyeSBzaGFkZXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50
IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBs
ZW5ndGggPSAweCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5n
dGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNo
YWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBp
ZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZXRTb3Vy
Y2UoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jKEdMZW51bSBm
dW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKQoreworICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0
ZShHTF9GUk9OVF9BTkRfQkFDSywgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzaykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xl
bnVtIGZ1bmMgPSAweCVYLCBHTGludCByZWYgPSAlZCwgR0x1aW50IG1hc2sgPSAlZCkiLCBmYWNl
LCBmdW5jLCByZWYsIG1hc2spOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZh
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2Ug
R0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmdW5jKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9ORVZFUjoKKyAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoK
KyAgICAgICAgICBjYXNlIEdMX0xFU1M6CisgICAgICAgICAgY2FzZSBHTF9MRVFVQUw6CisgICAg
ICAgICAgY2FzZSBHTF9FUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKyAgICAgICAg
ICBjYXNlIEdMX0dSRUFURVI6CisgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9B
TkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVu
Y2lsUGFyYW1zKGZ1bmMsIHJlZiwgbWFzayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja1BhcmFtcyhm
dW5jLCByZWYsIG1hc2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1hc2soR0x1
aW50IG1hc2spCit7CisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNL
LCBtYXNrKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMZW51
bSBmYWNlLCBHTHVpbnQgbWFzaykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwg
R0x1aW50IG1hc2sgPSAlZCkiLCBmYWNlLCBtYXNrKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChmYWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAg
ICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBH
TF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsV3JpdGVtYXNrKG1hc2spOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1h
c2sobWFzayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWws
IEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQoreworICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUo
R0xfRlJPTlRfQU5EX0JBQ0ssIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0g
emZhaWwsIEdMZW51bSB6cGFzcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBmYWNlID0gMHglWCwg
R0xlbnVtIGZhaWwgPSAweCVYLCBHTGVudW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4
JVhzKSIsCisgICAgICAgICAgZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChmYWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9GUk9OVDoKKyAgICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9O
VF9BTkRfQkFDSzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCAoZmFpbCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAg
ICAgICAgICBjYXNlIEdMX0tFRVA6CisgICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgorICAgICAg
ICAgIGNhc2UgR0xfSU5DUjoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1I6CisgICAgICAgICAgY2Fz
ZSBHTF9JTlZFUlQ6CisgICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6CisgICAgICAgICAgY2Fz
ZSBHTF9ERUNSX1dSQVA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzd2l0Y2ggKHpmYWlsKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJP
OgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Cisg
ICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2UgR0xfREVDUjoKKyAgICAgICAg
ICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKKyAgICAgICAg
ICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoenBhc3MpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2UgR0xfUkVQTEFD
RToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9ERUNSOgorICAg
ICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgorICAg
ICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFj
ZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxPcGVyYXRpb25zKGZhaWwsIHpm
YWlsLCB6cGFzcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdM
X0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoZmFpbCwgemZhaWws
IHpwYXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRl
cm5hbGZvcm1hdCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQs
ICIKKyAgICAgICAgICAiR0xpbnQgYm9yZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBH
TGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAg
ICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChsZXZlbCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsZXZlbCA+IDAgJiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93Miho
ZWlnaHQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAo
Z2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRV
UkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVS
RV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBmb3JtYXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYm9yZGVyICE9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdu
bWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRJbWFnZU5lZ1gobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1kobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1oobGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFj
a0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pCit7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChH
TGludClwYXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZnYoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludCkqcGFyYW1zKTsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OlRleHR1cmUgKnRleHR1cmU7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAg
ICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1M6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygo
R0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKKyAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
LT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IGNvbnN0IEdMaW50KiBwYXJhbXMpCit7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5h
bWUsICpwYXJhbXMpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAg
ICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4
b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUw
LjhwKSIsCisgICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKCFnbDo6SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhv
ZmZzZXQgPCB3aWR0aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlv
ZmZzZXQgPCBoZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZ2w6OkNoZWNrVGV4dHVy
ZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGgg
PT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgpCit7CisgICAgZ2xVbmlm
b3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAg
ICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgp
Cit7CisgICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlv
biwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsK
KworICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
c2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24s
IGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMmZ2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKK3sKKyAgICBHTGludCB4
eVs0XSA9IHt4LCB5fTsKKworICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50Kikm
eHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwg
bG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTJpdihs
b2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtM2YoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHop
Cit7CisgICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBnbFVuaWZvcm0zZnYo
bG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQor
eworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xpbnQgeikKK3sKKyAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07
CisKKyAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291
bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZihHTGlu
dCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQor
eworICAgIEdMZmxvYXQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKKworICAgIGdsVW5pZm9ybTRm
dihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2
KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aShHTGludCBsb2NhdGlvbiwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykKK3sKKyAgICBHTGludCB4eXp3WzRd
ID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCAxLCAoR0xpbnQq
KSZ4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00
aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Ug
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRp
b24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2
YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgz
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNw
b3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwg
dHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0g
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSkKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9G
QUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWlu
dCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvZ3JhbSAh
PSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT52YWxpZGF0ZSgpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgpCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHgsIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1
aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFs
dWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xW
ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAg
IFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAl
ZikiLCBpbmRleCwgeCwgeSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9Owor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMg
PSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVl
c1swXSwgdmFsdWVzWzFdLCAwLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2YoR0x1aW50IGluZGV4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQoreworICAgIFRSQUNFKCIoR0x1aW50
IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0g
JWYpIiwgaW5kZXgsIHgsIHksIHopOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEg
fTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFs
dWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2
YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYo
R0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcp
Cit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxv
YXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHks
IHosIHcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWI0ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCki
LCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1
ZXMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNv
bnN0IEdMdm9pZCogcHRyKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMaW50
IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgIkdMYm9vbGVhbiBu
b3JtYWxpemVkID0gJWQsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCogcHRyID0g
MHglMC44cCkiLAorICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIHB0cik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6
ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Cisg
ICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgIGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJpZGUg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1
ZmZlckhhbmRsZSgpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwgc3RyaWRl
LCBwdHIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVFJBQ0UoIihHTGludCB4ID0gJWQsIEdMaW50IHkg
PSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNp
emVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCAi
CisgICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JXgsIGNv
bnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRy
ZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQoreworICAgIHN0cnVjdCBFeHRlbnNpb24KKyAgICB7
CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUgYWRkcmVzczsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
IEV4dGVuc2lvbiBnbEV4dGVuc2lvbnNbXSA9CisgICAgeworICAgICAgICB7ImdsVGV4SW1hZ2Uz
RE9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGV4SW1h
Z2UzRE9FU30sCisgICAgfTsKKworICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihn
bEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQorICAgIHsKKyAgICAgICAg
aWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRlbnNpb25zW2V4dF0ubmFtZSkgPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRdLmFkZHJlc3M7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gTlVMTDsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRl
ZgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKK0xJQlJBUlkgbGliR0xFU3YyCitFWFBPUlRTCisg
ICAgZ2xBY3RpdmVUZXh0dXJlICAgICAgICAgICAgICAgICBAMQorICAgIGdsQXR0YWNoU2hhZGVy
ICAgICAgICAgICAgICAgICAgQDIKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbiAgICAgICAgICAg
IEAzCisgICAgZ2xCaW5kQnVmZmVyICAgICAgICAgICAgICAgICAgICBANAorICAgIGdsQmluZEZy
YW1lYnVmZmVyICAgICAgICAgICAgICAgQDUKKyAgICBnbEJpbmRSZW5kZXJidWZmZXIgICAgICAg
ICAgICAgIEA2CisgICAgZ2xCaW5kVGV4dHVyZSAgICAgICAgICAgICAgICAgICBANworICAgIGds
QmxlbmRDb2xvciAgICAgICAgICAgICAgICAgICAgQDgKKyAgICBnbEJsZW5kRXF1YXRpb24gICAg
ICAgICAgICAgICAgIEA5CisgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUgICAgICAgICBAMTAK
KyAgICBnbEJsZW5kRnVuYyAgICAgICAgICAgICAgICAgICAgIEAxMQorICAgIGdsQmxlbmRGdW5j
U2VwYXJhdGUgICAgICAgICAgICAgQDEyCisgICAgZ2xCdWZmZXJEYXRhICAgICAgICAgICAgICAg
ICAgICBAMTMKKyAgICBnbEJ1ZmZlclN1YkRhdGEgICAgICAgICAgICAgICAgIEAxNAorICAgIGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAgICAgICAgQDE1CisgICAgZ2xDbGVhciAgICAgICAgICAg
ICAgICAgICAgICAgICBAMTYKKyAgICBnbENsZWFyQ29sb3IgICAgICAgICAgICAgICAgICAgIEAx
NworICAgIGdsQ2xlYXJEZXB0aGYgICAgICAgICAgICAgICAgICAgQDE4CisgICAgZ2xDbGVhclN0
ZW5jaWwgICAgICAgICAgICAgICAgICBAMTkKKyAgICBnbENvbG9yTWFzayAgICAgICAgICAgICAg
ICAgICAgIEAyMAorICAgIGdsQ29tcGlsZVNoYWRlciAgICAgICAgICAgICAgICAgQDIxCisgICAg
Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAgICAgICAgICBAMjIKKyAgICBnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTJEICAgICAgIEAyMworICAgIGdsQ29weVRleEltYWdlMkQgICAgICAgICAgICAgICAg
QDI0CisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAgICAgICAgICAgICBAMjUKKyAgICBnbENyZWF0
ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAyNgorICAgIGdsQ3JlYXRlU2hhZGVyICAgICAgICAg
ICAgICAgICAgQDI3CisgICAgZ2xDdWxsRmFjZSAgICAgICAgICAgICAgICAgICAgICBAMjgKKyAg
ICBnbERlbGV0ZUJ1ZmZlcnMgICAgICAgICAgICAgICAgIEAyOQorICAgIGdsRGVsZXRlRnJhbWVi
dWZmZXJzICAgICAgICAgICAgQDMwCisgICAgZ2xEZWxldGVQcm9ncmFtICAgICAgICAgICAgICAg
ICBAMzIKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAgICAgICAgIEAzMworICAgIGdsRGVs
ZXRlU2hhZGVyICAgICAgICAgICAgICAgICAgQDM0CisgICAgZ2xEZWxldGVUZXh0dXJlcyAgICAg
ICAgICAgICAgICBAMzEKKyAgICBnbERlcHRoRnVuYyAgICAgICAgICAgICAgICAgICAgIEAzNgor
ICAgIGdsRGVwdGhNYXNrICAgICAgICAgICAgICAgICAgICAgQDM3CisgICAgZ2xEZXB0aFJhbmdl
ZiAgICAgICAgICAgICAgICAgICBAMzgKKyAgICBnbERldGFjaFNoYWRlciAgICAgICAgICAgICAg
ICAgIEAzNQorICAgIGdsRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICAgQDM5CisgICAgZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICBANDAKKyAgICBnbERyYXdBcnJheXMgICAgICAg
ICAgICAgICAgICAgIEA0MQorICAgIGdsRHJhd0VsZW1lbnRzICAgICAgICAgICAgICAgICAgQDQy
CisgICAgZ2xFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICBANDMKKyAgICBnbEVuYWJsZVZl
cnRleEF0dHJpYkFycmF5ICAgICAgIEA0NAorICAgIGdsRmluaXNoICAgICAgICAgICAgICAgICAg
ICAgICAgQDQ1CisgICAgZ2xGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICBANDYKKyAgICBn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyICAgICAgIEA0NworICAgIGdsRnJhbWVidWZmZXJUZXh0
dXJlMkQgICAgICAgICAgQDQ4CisgICAgZ2xGcm9udEZhY2UgICAgICAgICAgICAgICAgICAgICBA
NDkKKyAgICBnbEdlbkJ1ZmZlcnMgICAgICAgICAgICAgICAgICAgIEA1MAorICAgIGdsR2VuRnJh
bWVidWZmZXJzICAgICAgICAgICAgICAgQDUyCisgICAgZ2xHZW5SZW5kZXJidWZmZXJzICAgICAg
ICAgICAgICBANTMKKyAgICBnbEdlblRleHR1cmVzICAgICAgICAgICAgICAgICAgIEA1NAorICAg
IGdsR2VuZXJhdGVNaXBtYXAgICAgICAgICAgICAgICAgQDUxCisgICAgZ2xHZXRBY3RpdmVBdHRy
aWIgICAgICAgICAgICAgICBANTUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm0gICAgICAgICAgICAg
IEA1NgorICAgIGdsR2V0QXR0YWNoZWRTaGFkZXJzICAgICAgICAgICAgQDU3CisgICAgZ2xHZXRB
dHRyaWJMb2NhdGlvbiAgICAgICAgICAgICBANTgKKyAgICBnbEdldEJvb2xlYW52ICAgICAgICAg
ICAgICAgICAgIEA1OQorICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgICAgICAgICAgQDYwCisg
ICAgZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgICBANjEKKyAgICBnbEdldEZsb2F0diAg
ICAgICAgICAgICAgICAgICAgIEA2MgorICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYgICBANjMKKyAgICBnbEdldEludGVnZXJ2ICAgICAgICAgICAgICAgICAgIEA2NAor
ICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cgICAgICAgICAgICAgQDY2CisgICAgZ2xHZXRQcm9ncmFt
aXYgICAgICAgICAgICAgICAgICBANjUKKyAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
ICAgIEA2NworICAgIGdsR2V0U2hhZGVySW5mb0xvZyAgICAgICAgICAgICAgQDY5CisgICAgZ2xH
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgICAgICBANzAKKyAgICBnbEdldFNoYWRlclNvdXJjZSAg
ICAgICAgICAgICAgIEA3MQorICAgIGdsR2V0U2hhZGVyaXYgICAgICAgICAgICAgICAgICAgQDY4
CisgICAgZ2xHZXRTdHJpbmcgICAgICAgICAgICAgICAgICAgICBANzIKKyAgICBnbEdldFRleFBh
cmFtZXRlcmZ2ICAgICAgICAgICAgIEA3MworICAgIGdsR2V0VGV4UGFyYW1ldGVyaXYgICAgICAg
ICAgICAgQDc0CisgICAgZ2xHZXRVbmlmb3JtTG9jYXRpb24gICAgICAgICAgICBANzcKKyAgICBn
bEdldFVuaWZvcm1mdiAgICAgICAgICAgICAgICAgIEA3NQorICAgIGdsR2V0VW5pZm9ybWl2ICAg
ICAgICAgICAgICAgICAgQDc2CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiAgICAgICBA
ODAKKyAgICBnbEdldFZlcnRleEF0dHJpYmZ2ICAgICAgICAgICAgIEA3OAorICAgIGdsR2V0VmVy
dGV4QXR0cmliaXYgICAgICAgICAgICAgQDc5CisgICAgZ2xIaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgICBAODEKKyAgICBnbElzQnVmZmVyICAgICAgICAgICAgICAgICAgICAgIEA4MgorICAg
IGdsSXNFbmFibGVkICAgICAgICAgICAgICAgICAgICAgQDgzCisgICAgZ2xJc0ZyYW1lYnVmZmVy
ICAgICAgICAgICAgICAgICBAODQKKyAgICBnbElzUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAg
IEA4NQorICAgIGdsSXNSZW5kZXJidWZmZXIgICAgICAgICAgICAgICAgQDg2CisgICAgZ2xJc1No
YWRlciAgICAgICAgICAgICAgICAgICAgICBAODcKKyAgICBnbElzVGV4dHVyZSAgICAgICAgICAg
ICAgICAgICAgIEA4OAorICAgIGdsTGluZVdpZHRoICAgICAgICAgICAgICAgICAgICAgQDg5Cisg
ICAgZ2xMaW5rUHJvZ3JhbSAgICAgICAgICAgICAgICAgICBAOTAKKyAgICBnbFBpeGVsU3RvcmVp
ICAgICAgICAgICAgICAgICAgIEA5MQorICAgIGdsUG9seWdvbk9mZnNldCAgICAgICAgICAgICAg
ICAgQDkyCisgICAgZ2xSZWFkUGl4ZWxzICAgICAgICAgICAgICAgICAgICBAOTMKKyAgICBnbFJl
bGVhc2VTaGFkZXJDb21waWxlciAgICAgICAgIEA5NAorICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZSAgICAgICAgICAgQDk1CisgICAgZ2xTYW1wbGVDb3ZlcmFnZSAgICAgICAgICAgICAgICBAOTYK
KyAgICBnbFNjaXNzb3IgICAgICAgICAgICAgICAgICAgICAgIEA5NworICAgIGdsU2hhZGVyQmlu
YXJ5ICAgICAgICAgICAgICAgICAgQDk4CisgICAgZ2xTaGFkZXJTb3VyY2UgICAgICAgICAgICAg
ICAgICBAOTkKKyAgICBnbFN0ZW5jaWxGdW5jICAgICAgICAgICAgICAgICAgIEAxMDAKKyAgICBn
bFN0ZW5jaWxGdW5jU2VwYXJhdGUgICAgICAgICAgIEAxMDEKKyAgICBnbFN0ZW5jaWxNYXNrICAg
ICAgICAgICAgICAgICAgIEAxMDIKKyAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUgICAgICAgICAg
IEAxMDMKKyAgICBnbFN0ZW5jaWxPcCAgICAgICAgICAgICAgICAgICAgIEAxMDQKKyAgICBnbFN0
ZW5jaWxPcFNlcGFyYXRlICAgICAgICAgICAgIEAxMDUKKyAgICBnbFRleEltYWdlMkQgICAgICAg
ICAgICAgICAgICAgIEAxMDYKKyAgICBnbFRleFBhcmFtZXRlcmYgICAgICAgICAgICAgICAgIEAx
MDcKKyAgICBnbFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAgICAgIEAxMDgKKyAgICBnbFRleFBh
cmFtZXRlcmkgICAgICAgICAgICAgICAgIEAxMDkKKyAgICBnbFRleFBhcmFtZXRlcml2ICAgICAg
ICAgICAgICAgIEAxMTAKKyAgICBnbFRleFN1YkltYWdlMkQgICAgICAgICAgICAgICAgIEAxMTEK
KyAgICBnbFVuaWZvcm0xZiAgICAgICAgICAgICAgICAgICAgIEAxMTIKKyAgICBnbFVuaWZvcm0x
ZnYgICAgICAgICAgICAgICAgICAgIEAxMTMKKyAgICBnbFVuaWZvcm0xaSAgICAgICAgICAgICAg
ICAgICAgIEAxMTQKKyAgICBnbFVuaWZvcm0xaXYgICAgICAgICAgICAgICAgICAgIEAxMTUKKyAg
ICBnbFVuaWZvcm0yZiAgICAgICAgICAgICAgICAgICAgIEAxMTYKKyAgICBnbFVuaWZvcm0yZnYg
ICAgICAgICAgICAgICAgICAgIEAxMTcKKyAgICBnbFVuaWZvcm0yaSAgICAgICAgICAgICAgICAg
ICAgIEAxMTgKKyAgICBnbFVuaWZvcm0yaXYgICAgICAgICAgICAgICAgICAgIEAxMTkKKyAgICBn
bFVuaWZvcm0zZiAgICAgICAgICAgICAgICAgICAgIEAxMjAKKyAgICBnbFVuaWZvcm0zZnYgICAg
ICAgICAgICAgICAgICAgIEAxMjEKKyAgICBnbFVuaWZvcm0zaSAgICAgICAgICAgICAgICAgICAg
IEAxMjIKKyAgICBnbFVuaWZvcm0zaXYgICAgICAgICAgICAgICAgICAgIEAxMjMKKyAgICBnbFVu
aWZvcm00ZiAgICAgICAgICAgICAgICAgICAgIEAxMjQKKyAgICBnbFVuaWZvcm00ZnYgICAgICAg
ICAgICAgICAgICAgIEAxMjUKKyAgICBnbFVuaWZvcm00aSAgICAgICAgICAgICAgICAgICAgIEAx
MjYKKyAgICBnbFVuaWZvcm00aXYgICAgICAgICAgICAgICAgICAgIEAxMjcKKyAgICBnbFVuaWZv
cm1NYXRyaXgyZnYgICAgICAgICAgICAgIEAxMjgKKyAgICBnbFVuaWZvcm1NYXRyaXgzZnYgICAg
ICAgICAgICAgIEAxMjkKKyAgICBnbFVuaWZvcm1NYXRyaXg0ZnYgICAgICAgICAgICAgIEAxMzAK
KyAgICBnbFVzZVByb2dyYW0gICAgICAgICAgICAgICAgICAgIEAxMzEKKyAgICBnbFZhbGlkYXRl
UHJvZ3JhbSAgICAgICAgICAgICAgIEAxMzIKKyAgICBnbFZlcnRleEF0dHJpYjFmICAgICAgICAg
ICAgICAgIEAxMzMKKyAgICBnbFZlcnRleEF0dHJpYjFmdiAgICAgICAgICAgICAgIEAxMzQKKyAg
ICBnbFZlcnRleEF0dHJpYjJmICAgICAgICAgICAgICAgIEAxMzUKKyAgICBnbFZlcnRleEF0dHJp
YjJmdiAgICAgICAgICAgICAgIEAxMzYKKyAgICBnbFZlcnRleEF0dHJpYjNmICAgICAgICAgICAg
ICAgIEAxMzcKKyAgICBnbFZlcnRleEF0dHJpYjNmdiAgICAgICAgICAgICAgIEAxMzgKKyAgICBn
bFZlcnRleEF0dHJpYjRmICAgICAgICAgICAgICAgIEAxMzkKKyAgICBnbFZlcnRleEF0dHJpYjRm
diAgICAgICAgICAgICAgIEAxNDAKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIgICAgICAgICAg
IEAxNDEKKyAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAgICAgICAgIEAxNDIKKworICAgIDsg
RXh0ZW5zaW9ucworICAgIGdsVGV4SW1hZ2UzRE9FUwkJCQkJQDE0MworICAgIAorICAgIDsgRUdM
IGRlcGVuZGVuY2llcworICAgIGdsQ3JlYXRlQ29udGV4dAkJCQkJQDE0NCBOT05BTUUKKyAgICBn
bERlc3Ryb3lDb250ZXh0CQkJCUAxNDUgTk9OQU1FCisgICAgZ2xNYWtlQ3VycmVudAkJCQkJQDE0
NiBOT05BTUUKKyAgICBnbEdldEN1cnJlbnRDb250ZXh0CQkJCUAxNDcgTk9OQU1FCisgICAgZ2xH
ZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgICBAMTQ4IE5PTkFNRQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5k
b3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFs
IEMrKyINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0ibGliR0xFU3YyIg0KKwlQcm9qZWN0R1VJ
RD0ie0I1ODcxQTdBLTk2OEMtNDJFMy1BMzNCLTk4MUU2RjQ0OEU3OH0iDQorCVJvb3ROYW1lc3Bh
Y2U9ImxpYkdMRVN2MiINCisJS2V5d29yZD0iV2luMzJQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtW
ZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5h
bWU9IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxUb29sRmlsZXM+DQorCTwvVG9v
bEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9
IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZp
Z3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlv
bk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUNoYXJhY3RlclNldD0iMSIN
CisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERp
cikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19E
RUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RF
UFJFQ0FURTtOT01JTk1BWCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNv
bXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0
UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9
IjQiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxl
clRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0
aW9uYWxEZXBlbmRlbmNpZXM9IkQzZHg5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0K
KwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiINCisJCQkJR2VuZXJhdGVE
ZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6
ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJ
CVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5r
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVy
aWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVu
dFRvb2wiDQorCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90
OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7
JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBB
O2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0
RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNo
byBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25m
aWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9
IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGly
ZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIN
CisJCQlDaGFyYWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0K
KwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5s
aW5lRnVuY3Rpb25FeHBhbnNpb249IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJ
QkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJF
X1NDTD0wIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFk
ZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0
eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVu
ZGVuY2llcz0iRDNkeDkubGliIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCUlnbm9y
ZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNlIg0KKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0i
bGliR0xFU3YyLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJ
CQlTdWJTeXN0ZW09IjIiDQorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCisJCQkJRW5hYmxl
Q09NREFURm9sZGluZz0iMiINCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlE
YXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtl
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkJQ29tbWFuZExpbmU9
IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwk
KENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGly
KVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGli
R0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyINCisJCQkv
Pg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNl
cz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291
cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7
YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2
LTJBMzJENzUyQTJGRn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxC
bGl0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii5cQnVmZmVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cZGVidWcuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGxp
YkdMRVN2Mi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXG1haW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVy
ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXHV0aWxpdGllcy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbHRlcg0KKwkJ
CQlOYW1lPSJHZW9tZXRyeSINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuXGdlb21ldHJ5XGJhY2tlbmQuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcZHg5LmNwcCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XElu
ZGV4RGF0YU1hbmFnZXIuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcVmVydGV4RGF0YU1hbmFnZXIuY3BwIg0KKwkJ
CQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0
ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5s
O2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVC
LTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxC
bGl0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXEJ1ZmZlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxDb250ZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1lYnVmZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMi5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aW5jbHVkZVxHTEVTMlxnbDJleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxt
YXRodXRpbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxQcm9ncmFtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXIuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9Ikdlb21ldHJ5Ig0K
KwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcYmFja2Vu
ZC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cZ2VvbWV0cnlcZHg5LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxJbmRleERhdGFNYW5hZ2VyLmgiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9t
ZXRyeVx2ZXJ0ZXhjb252ZXJzaW9uLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxWZXJ0ZXhEYXRhTWFuYWdlci5oIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJCTxG
aWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5kZWYiDQorCQkJPg0KKwkJPC9GaWxl
Pg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlv
UHJvamVjdD4NCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL21haW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdl
bWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5o
IgorCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisKK3N0YXRpYyBEV09SRCBj
dXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJ
TlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAg
c3dpdGNoIChyZWFzb24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOworCisgICAgICAg
ICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAorICAgICAgY2Fz
ZSBETExfVEhSRUFEX0FUVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkN1cnJlbnQg
KmN1cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGdsOjpDdXJy
ZW50KSk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOworCisgICAgICAgICAg
ICAgICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgY3VycmVudC0+
ZGlzcGxheSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICB2
b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICAgICAgICAgIGlm
IChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExP
Q0FMKWN1cnJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZv
aWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYg
KGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9D
QUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVu
dFRMUyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworbmFtZXNwYWNlIGdsCit7
Cit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3Vy
cmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5jb250ZXh0ID0g
Y29udGV4dDsKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKKworICAgIGlmIChjb250
ZXh0ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPm1ha2VD
dXJyZW50KGRpc3BsYXksIHN1cmZhY2UpOworICAgIH0KK30KKworQ29udGV4dCAqZ2V0Q29udGV4
dCgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OworfQorCitlZ2w6OkRpc3Bs
YXkgKmdldERpc3BsYXkoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKK30K
KworSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBnZXREaXNwbGF5KCk7CisKKyAgICByZXR1cm4gZGlzcGxheS0+Z2V0RGV2aWNlKCk7
Cit9Cit9CisKKy8vIFJlY29yZHMgYW4gZXJyb3IgY29kZQordm9pZCBlcnJvcihHTGVudW0gZXJy
b3JDb2RlKQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4
dCgpOworCisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVycm9yQ29k
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9FTlVNOgorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3JkSW52YWxpZEVudW0oKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgi
XHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY29yZEludmFsaWRWYWx1ZSgpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEgRXJyb3Ig
Z2VuZXJhdGVkOiBpbnZhbGlkIHZhbHVlXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfSU5WQUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
cmRJbnZhbGlkT3BlcmF0aW9uKCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBn
ZW5lcmF0ZWQ6IGludmFsaWQgb3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfT1VUX09GX01FTU9SWToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29y
ZE91dE9mTWVtb3J5KCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0
ZWQ6IG91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOworICAgICAgICAgICAgZ2w6OnRy
YWNlKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGZyYW1lYnVmZmVyIG9wZXJhdGlvblxu
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICB9CisgICAgfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWFpbi5oOiBNYW5hZ2VtZW50IG9mIHRocmVhZC1s
b2NhbCBkYXRhLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQUlOX0hfCisjZGVmaW5lIExJQkdMRVNW
Ml9NQUlOX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworc3Ry
dWN0IEN1cnJlbnQKK3sKKyAgICBDb250ZXh0ICpjb250ZXh0OworICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheTsKK307CisKK3ZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworCitDb250ZXh0ICpnZXRD
b250ZXh0KCk7CitlZ2w6OkRpc3BsYXkgKmdldERpc3BsYXkoKTsKKworSURpcmVjdDNERGV2aWNl
OSAqZ2V0RGV2aWNlKCk7Cit9CisKK3ZvaWQgZXJyb3IoR0xlbnVtIGVycm9yQ29kZSk7CisKK3Rl
bXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZlcnJvcihHTGVudW0gZXJyb3JDb2RlLCBjb25zdCBU
ICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlcnJvcihlcnJvckNvZGUpOworCisgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJTl9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJH
TEVTdjIvbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWF0
aHV0aWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gbWF0aHV0aWwuaDogTWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisK
KyNpZm5kZWYgTElCR0xFU1YyX01BVEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJ
TF9IXworCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKK2lubGluZSBib29s
IGlzUG93MihpbnQgeCkKK3sKKyAgICByZXR1cm4gKHggJiAoeCAtIDEpKSA9PSAwICYmICh4ICE9
IDApOworfQorCitpbmxpbmUgaW50IGxvZzIoaW50IHgpCit7CisgICAgaW50IHIgPSAwOworICAg
IHdoaWxlICgoeCA+PiByKSA+IDEpIHIrKzsKKyAgICByZXR1cm4gcjsKK30KKworaW5saW5lIHVu
c2lnbmVkIGludCBjZWlsUG93Mih1bnNpZ25lZCBpbnQgeCkKK3sKKyAgICBpZiAoeCAhPSAwKSB4
LS07CisgICAgeCB8PSB4ID4+IDE7CisgICAgeCB8PSB4ID4+IDI7CisgICAgeCB8PSB4ID4+IDQ7
CisgICAgeCB8PSB4ID4+IDg7CisgICAgeCB8PSB4ID4+IDE2OworICAgIHgrKzsKKworICAgIHJl
dHVybiB4OworfQorCitpbmxpbmUgZmxvYXQgY2xhbXAwMShmbG9hdCB4KQoreworICAgIHJldHVy
biB4IDwgMCA/IDAgOiAoeCA+IDEgPyAxIDogeCk7Cit9CisKK3RlbXBsYXRlPGNvbnN0IGludCBu
PgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAgaWYgKHggPiAxKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8IDApCisg
ICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9Cit9Cit9CisKKyNl
bmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJv
dXRpbmVzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8
bGltaXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgIHJldHVybiAxOworICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorICAgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBHTF9JTlRfVkVD
MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgor
ICAgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
OgorICAgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAg
ICAgIHJldHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0xlbnVtIFVuaWZvcm1Db21wb25lbnRUeXBl
KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
Qk9PTDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6
CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6CisgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9O
RTsKK30KKworc2l6ZV90IFVuaWZvcm1UeXBlU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6ZW9mKEdMYm9v
bGVhbik7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAg
ICAgY2FzZSBHTF9JTlQ6ICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgfQorCisgICAgcmV0
dXJuIFVuaWZvcm1UeXBlU2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3Jt
Q29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK2ludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6Cisg
ICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBH
TF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAg
ICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51
bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX05PTkU6
CisgICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9G
TE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9J
TlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0Ogor
ICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMo
dW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVk
IGludCBiaXRzU2l6ZSkKK3sKKyAgICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUp
OworCisgICAgdW5zaWduZWQgaW50IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGludD46Om1heCgpID4+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0
cyAtIGFsbG9jYXRpb25TaXplKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Yml0c1NpemUgLSBhbGxvY2F0aW9uU2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgo
KmJpdHMgJiBtYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNr
OworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAx
OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworR0xzaXplaSBDb21wdXRlUGl0Y2goR0xz
aXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkK
K3sKKyAgICBBU1NFUlQoYWxpZ25tZW50ID4gMCAmJiBpc1BvdzIoYWxpZ25tZW50KSk7CisKKyAg
ICBHTHNpemVpIHJhd1BpdGNoID0gQ29tcHV0ZVBpeGVsU2l6ZShmb3JtYXQsIHR5cGUpICogd2lk
dGg7CisgICAgcmV0dXJuIChyYXdQaXRjaCArIGFsaWdubWVudCAtIDEpICYgfihhbGlnbm1lbnQg
LSAxKTsKK30KKworLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRl
eGVsIGluIGFuIEltYWdlCitpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwor
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpOworICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9m
KHVuc2lnbmVkIGNoYXIpICogMjsKKyAgICAgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAg
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDM7CisgICAgICAgICAgY2FzZSBHTF9SR0JB
OiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiA0OworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSXNDdWJlbWFwVGV4
dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0ID49IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aKTsKK30KKworYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkK
K3sKKyAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpOworfQorCisvLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25l
IG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCitib29sIENoZWNrVGV4dHVyZUZv
cm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2Fz
ZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIHJldHVybiAo
Zm9ybWF0ID09IEdMX1JHQkEpOworCisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOworCisgICAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKK25hbWVzcGFjZSBlczJkeAor
eworCitEM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKQorewor
ICAgIEQzRENNUEZVTkMgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7CisgICAgc3dpdGNoIChjb21w
YXJpc29uKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBEM0RDTVBf
TkVWRVI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxXQVlTOiAgIGQzZENvbXAgPSBE
M0RDTVBfQUxXQVlTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVTUzogICAgIGQzZENv
bXAgPSBEM0RDTVBfTEVTUzsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTEVRVUFMOiAg
IGQzZENvbXAgPSBEM0RDTVBfTEVTU0VRVUFMOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRVFV
QUw6ICAgIGQzZENvbXAgPSBEM0RDTVBfRVFVQUw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUjsgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUkVRVUFMOyBicmVhazsK
KyAgICAgIGNhc2UgR0xfTk9URVFVQUw6IGQzZENvbXAgPSBEM0RDTVBfTk9URVFVQUw7ICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGQzZENvbXA7Cit9CisKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpCit7
CisgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJlZCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYmx1ZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmFscGhhKSk7Cit9CisKK0QzREJMRU5EIENv
bnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKQoreworICAgIEQzREJMRU5EIGQzZEJsZW5kID0g
RDNEQkxFTkRfWkVSTzsKKworICAgIHN3aXRjaCAoYmxlbmQpCisgICAgeworICAgICAgY2FzZSBH
TF9aRVJPOiAgICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfWkVSTzsgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAgICAgIGQz
ZEJsZW5kID0gRDNEQkxFTkRfT05FOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9T
UkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQ09MT1I7ICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOiAgICAgIGQzZEJs
ZW5kID0gRDNEQkxFTkRfSU5WU1JDQ09MT1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1Rf
Q09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVENPTE9SOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQzZEJsZW5k
ID0gRDNEQkxFTkRfSU5WREVTVENPTE9SOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQ
SEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEE7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0g
RDNEQkxFTkRfSU5WU1JDQUxQSEE7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVEFMUEhBOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNE
QkxFTkRfSU5WREVTVEFMUEhBOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEQkxF
TkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQTog
ICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNEQkxFTkRf
SU5WQkxFTkRGQUNUT1I7IGJyZWFrOworICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6
ICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEFTQVQ7ICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmQ7Cit9
CisKK0QzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApCit7CisgICAgRDNE
QkxFTkRPUCBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7CisKKyAgICBzd2l0Y2ggKGJsZW5k
T3ApCisgICAgeworICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5k
T3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19T
VUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQz
REJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQmxlbmRPcDsKK30KKworRDNEU1RFTkNJTE9QIENv
bnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKK3sKKyAgICBEM0RTVEVOQ0lMT1AgZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7CisKKyAgICBzd2l0Y2ggKHN0ZW5jaWxPcCkK
KyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX1pFUk87ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9LRUVQOiAgICAgIGQzZFN0ZW5jaWxP
cCA9IEQzRFNURU5DSUxPUF9LRUVQOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVQTEFDRTog
ICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfUkVQTEFDRTsgYnJlYWs7CisgICAgICBjYXNl
IEdMX0lOQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1JTQVQ7IGJyZWFr
OworICAgICAgY2FzZSBHTF9ERUNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9E
RUNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5WRVJUOiAgICBkM2RTdGVuY2lsT3AgPSBE
M0RTVEVOQ0lMT1BfSU5WRVJUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDogZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1I7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9E
RUNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9ERUNSOyAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZFN0ZW5j
aWxPcDsKK30KKworRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3
cmFwKQoreworICAgIEQzRFRFWFRVUkVBRERSRVNTIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQ
OworCisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFUOiAgICAg
ICAgICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQOyAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9DTEFNUF9UT19FREdFOiAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX0NMQU1QOyAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogICBkM2RXcmFwID0gRDNEVEFERFJFU1Nf
TUlSUk9SOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGQzZFdyYXA7Cit9CisKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBj
dWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSkKK3sKKyAgICBEM0RDVUxMIGN1bGwgPSBEM0RDVUxM
X0NDVzsKKyAgICBzd2l0Y2ggKGN1bGxGYWNlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlJPTlQ6
CisgICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ1cgOiBEM0RD
VUxMX0NDVyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICBj
dWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NDVyA6IEQzRENVTExfQ1cpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIGN1
bGwgPSBEM0RDVUxMX05PTkU7IC8vIGN1bGxpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBkcmF3
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gY3VsbDsKK30KKworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIHJldHVybiAocmVkICAg
PyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAorICAgICAgICAgICAoZ3JlZW4gPyBE
M0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAoYmx1ZSAgPyBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAorICAgICAgICAgICAoYWxwaGEgPyBEM0RDT0xP
UldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Cit9CisKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZl
cnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcikKK3sKKyAgICBEM0RURVhUVVJFRklMVEVSVFlQ
RSBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgIHN3aXRjaCAobWFnRmlsdGVyKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lO
VDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBEM0RURVhG
X0xJTkVBUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBkM2RNYWdGaWx0ZXI7Cit9CisKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVu
dW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhU
VVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKQoreworICAgIHN3aXRjaCAobWluRmlsdGVyKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQz
RFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Cisg
ICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmls
dGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFS
OworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJ
TkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RN
aXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1p
cEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9
CisKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkK
K3sKKyAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9E
MjRGUzg6CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAg
ICBjYXNlIEQzREZNVF9EMjRYNFM0OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QxNVMxOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NL
QUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QzMjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4Ogor
ICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoK
KyAgICAgICAgcmV0dXJuIDA7CisvLyAgICAgIGNhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJl
dHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKy8vICAgICAgY2FzZSBEM0RGTVRfUzhfTE9D
S0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQorICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBH
ZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JG
b3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJl
dHVybiAyOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgIHJldHVybiA4Owor
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldFJl
ZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQp
CisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAx
MDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6CisgICAgICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAg
ICAgcmV0dXJuIDU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JG
b3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDEwOworICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1
OgorICAgICAgICByZXR1cm4gNTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAg
cmV0dXJuIDY7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4gMTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsKKyAg
ICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAg
ICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGlu
dCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQoreworICAgIHN3aXRjaCAoZGVw
dGhGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOiAgcmV0dXJu
IDE2OworICAgICAgY2FzZSBEM0RGTVRfRDMyOiAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAg
Y2FzZSBEM0RGTVRfRDE1UzE6ICAgICAgICAgcmV0dXJuIDE1OworICAgICAgY2FzZSBEM0RGTVRf
RDI0Uzg6ICAgICAgICAgcmV0dXJuIDI0OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6ICAgICAg
ICAgcmV0dXJuIDI0OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDogICAgICAgcmV0dXJuIDI0
OworICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgY2Fz
ZSBEM0RGTVRfRDMyRl9MT0NLQUJMRTogcmV0dXJuIDMyOworICAgICAgY2FzZSBEM0RGTVRfRDI0
RlM4OiAgICAgICAgcmV0dXJuIDI0OworLy8gICAgICBjYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6
ICByZXR1cm4gMzI7ICAgLy8gRDNEOUV4IG9ubHkKKy8vICAgICAgY2FzZSBEM0RGTVRfUzhfTE9D
S0FCTEU6ICAgcmV0dXJuIDA7ICAgIC8vIEQzRDlFeCBvbmx5CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBDb252
ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBwcmltaXRpdmVD
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJp
bWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKK3sKKyAgICBzd2l0Y2ggKHByaW1p
dGl2ZVR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICAgICpkM2RQcmlt
aXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBwcmltaXRpdmVDb3VudDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVTOgor
ICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOworICAgICAgICAqZDNk
UHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDI7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRf
TElORVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudDsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgICpkM2RQ
cmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291
bnQgPSBwcmltaXRpdmVDb3VudCAtIDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
UklBTkdMRVM6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVMSVNU
OworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDM7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRVNUUklQOworICAgICAgICAqZDNkUHJpbWl0aXZl
Q291bnQgPSBwcmltaXRpdmVDb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9UUklBTkdMRV9GQU46CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5H
TEVGQU47CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0QzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVm
ZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdCNV9BMTogICAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CisgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAg
ICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6CisgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OiAgICAgICByZXR1cm4gRDNERk1UX0Qy
NFM4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9B
OFI4RzhCODsKKyAgICB9Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5oOiBD
b252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2lmbmRl
ZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNkZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQz
ZDkuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVjdCBDb2xvcjsKKworaW50IFVuaWZvcm1D
b21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUo
R0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1UeXBlU2l6ZShHTGVudW0gdHlwZSk7CitpbnQg
VmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChH
TGVudW0gdHlwZSk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpi
aXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSk7
CisKK2ludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKK0dM
c2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCBhbGlnbm1lbnQpOworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51
bSB0YXJnZXQpOworYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Citib29sIENo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOworCit9CisK
K25hbWVzcGFjZSBlczJkeAoreworCitEM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51
bSBjb21wYXJpc29uKTsKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOwor
RDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOworRDNEQkxFTkRPUCBDb252
ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7CitEM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxP
cChHTGVudW0gc3RlbmNpbE9wKTsKK0QzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3Jh
cChHTGVudW0gd3JhcCk7CitEM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2Us
IEdMZW51bSBmcm9udEZhY2UpOworRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9v
bCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKK0QzRFRFWFRVUkVGSUxURVJUWVBFIENv
bnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcik7Cit2b2lkIENvbnZlcnRNaW5GaWx0ZXIo
R0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNE
VEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcik7Cit1bnNpZ25lZCBpbnQgR2V0QWxwaGFT
aXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShEM0RG
T1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZv
cm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7
Cit1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwor
Ym9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBw
cmltaXRpdmVDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQ
RSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCk7CitEM0RGT1JNQVQg
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKKworfQorCisjZW5kaWYg
IC8vIExJQkdMRVNWMl9VVElMSVRJRVNfSApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9t
ZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L0luZGV4
RGF0YU1hbmFnZXIuY3BwOiBEZWZpbmVzIHRoZSBJbmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRo
YXQKKy8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZm
ZXJzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIK
KworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisKK25hbWVzcGFjZQoreworICAgIGVudW0geyBJTklUSUFM
X0lOREVYX0JVRkZFUl9TSVpFID0gNDA5NiAqIHNpemVvZihHTHVpbnQpIH07Cit9CisKK25hbWVz
cGFjZSBnbAoreworCitJbmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2VyKENvbnRleHQg
KmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpCisgIDogbUNvbnRleHQoY29udGV4dCks
IG1CYWNrZW5kKGJhY2tlbmQpLCBtSW50SW5kaWNlc1N1cHBvcnRlZChiYWNrZW5kLT5zdXBwb3J0
SW50SW5kaWNlcygpKQoreworICAgIG1Db3VudGluZ0J1ZmZlciA9IE5VTEw7CisgICAgbUNvdW50
aW5nQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBtTGluZUxvb3BCdWZmZXIgPSBOVUxMOworCisgICAg
bVN0cmVhbUJ1ZmZlclNob3J0ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxf
SU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgIGlmIChtSW50SW5k
aWNlc1N1cHBvcnRlZCkKKyAgICB7CisgICAgICAgIG1TdHJlYW1CdWZmZXJJbnQgPSBtQmFja2Vu
ZC0+Y3JlYXRlSW5kZXhCdWZmZXIoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdO
RURfSU5UKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVN0cmVhbUJ1ZmZlcklu
dCA9IE5VTEw7CisgICAgfQorfQorCitJbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdl
cigpCit7CisgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXJTaG9ydDsKKyAgICBkZWxldGUgbVN0cmVh
bUJ1ZmZlckludDsKKyAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOworICAgIGRlbGV0ZSBtTGlu
ZUxvb3BCdWZmZXI7Cit9CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJ
bmRleFR5cGUsIGNsYXNzIE91dHB1dEluZGV4VHlwZT4KK3ZvaWQgY29weUluZGljZXMoY29uc3Qg
SW5wdXRJbmRleFR5cGUgKmluLCBHTHNpemVpIGNvdW50LCBPdXRwdXRJbmRleFR5cGUgKm91dCwg
R0x1aW50ICptaW5JbmRleCwgR0x1aW50ICptYXhJbmRleCkKK3sKKyAgICBJbnB1dEluZGV4VHlw
ZSBmaXJzdCA9ICppbjsKKyAgICBHTHVpbnQgbWluSW5kZXhTb0ZhciA9IGZpcnN0OworICAgIEdM
dWludCBtYXhJbmRleFNvRmFyID0gZmlyc3Q7CisKKyAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1pbkluZGV4U29GYXIgPiAqaW4pIG1p
bkluZGV4U29GYXIgPSAqaW47CisgICAgICAgIGlmIChtYXhJbmRleFNvRmFyIDwgKmluKSBtYXhJ
bmRleFNvRmFyID0gKmluOworCisgICAgICAgICpvdXQrKyA9ICppbisrOworICAgIH0KKworICAg
IC8vIEl0IG1pZ2h0IGJlIGEgbGluZSBsb29wLCBzbyBjb3B5IHRoZSBsb29wIGluZGV4LgorICAg
ICpvdXQgPSBmaXJzdDsKKworICAgICptaW5JbmRleCA9IG1pbkluZGV4U29GYXI7CisgICAgKm1h
eEluZGV4ID0gbWF4SW5kZXhTb0ZhcjsKK30KKworfQorCitHTGVudW0gSW5kZXhEYXRhTWFuYWdl
cjo6cHJlUmVuZGVyVmFsaWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBHTHNpemVpIGNv
dW50LCBCdWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5kaWNlcywgVHJh
bnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBHTF9V
TlNJR05FRF9TSE9SVCB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUgfHwgdHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpOworICAgIEFTU0VSVChjb3VudCA+IDApOworCisgICAgaWYgKGFycmF5RWxl
bWVudEJ1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBvZmZzZXQgPSByZWlu
dGVycHJldF9jYXN0PEdMc2l6ZWk+KGluZGljZXMpOworCisgICAgICAgIGlmICh0eXBlU2l6ZSh0
eXBlKSAqIGNvdW50ICsgb2Zmc2V0ID4gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGFycmF5RWxl
bWVudEJ1ZmZlci0+c2l6ZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0lO
VkFMSURfT1BFUkFUSU9OOworICAgICAgICB9CisKKyAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihhcnJheUVsZW1lbnRCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7
CisgICAgfQorCisgICAgdHJhbnNsYXRlZC0+Y291bnQgPSBjb3VudDsKKworICAgIHN0ZDo6c2l6
ZV90IHJlcXVpcmVkU3BhY2UgPSBzcGFjZVJlcXVpcmVkKHR5cGUsIGNvdW50KTsKKworICAgIFRy
YW5zbGF0ZWRJbmRleEJ1ZmZlciAqc3RyZWFtSWIgPSBwcmVwYXJlSW5kZXhCdWZmZXIodHlwZSwg
cmVxdWlyZWRTcGFjZSk7CisKKyAgICBzaXplX3Qgb2Zmc2V0OworICAgIHZvaWQgKm91dHB1dCA9
IHN0cmVhbUliLT5tYXAocmVxdWlyZWRTcGFjZSwgJm9mZnNldCk7CisKKyAgICB0cmFuc2xhdGVk
LT5idWZmZXIgPSBzdHJlYW1JYjsKKyAgICB0cmFuc2xhdGVkLT5vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgdHJhbnNsYXRlZC0+aW5kZXhTaXplID0gaW5kZXhTaXplKHR5cGUpOworCisgICAgaWYgKHR5
cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgKmlu
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpOworICAgICAgICBHTHVzaG9y
dCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworCisgICAgICAgIGNvcHlJ
bmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVk
LT5tYXhJbmRleCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5U
KQorICAgIHsKKyAgICAgICAgY29uc3QgR0x1aW50ICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpOworCisgICAgICAgIGlmIChtSW50SW5kaWNlc1N1cHBvcnRlZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVpbnQqPihv
dXRwdXQpOworCisgICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5z
bGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2hlbiAzMi1iaXQgaW5kaWNlcyBh
cmUgdW5zdXBwb3J0ZWQsIGZha2UgdGhlbSBieSB0cnVuY2F0aW5nIHRvIDE2LWJpdC4KKworICAg
ICAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsK
KworICAgICAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5t
aW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBjb25zdCBHTHVzaG9ydCAqaW4gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpOworICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nh
c3Q8R0x1c2hvcnQqPihvdXRwdXQpOworCisgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwg
b3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAg
fQorCisgICAgc3RyZWFtSWItPnVubWFwKCk7CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9
CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRp
Y2VzU3VwcG9ydGVkKSA/IHNpemVvZihHTHVpbnQpIDogc2l6ZW9mKEdMdXNob3J0KTsKK30KKwor
c3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0
Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OiByZXR1cm4gc2l6ZW9mKEdMdWludCk7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBy
ZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7CisgICAg
fQorfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVpcmVkKEdMZW51
bSB0eXBlLCBHTHNpemVpIGNvdW50KSBjb25zdAoreworICAgIHJldHVybiAoY291bnQgKyAxKSAq
IGluZGV4U2l6ZSh0eXBlKTsgLy8gKzEgYmVjYXVzZSB3ZSBhbHdheXMgbGVhdmUgYW4gZXh0cmEg
Zm9yIGxpbmUgbG9vcHMKK30KKworVHJhbnNsYXRlZEluZGV4QnVmZmVyICpJbmRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlSW5kZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVk
U3BhY2UpCit7CisgICAgYm9vbCB1c2UzMiA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCAmJiBt
SW50SW5kaWNlc1N1cHBvcnRlZCk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnN0cmVh
bUliID0gdXNlMzIgPyBtU3RyZWFtQnVmZmVySW50IDogbVN0cmVhbUJ1ZmZlclNob3J0OworCisg
ICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBzdHJlYW1JYi0+c2l6ZSgpKQorICAgIHsKKyAgICAgICAg
c3RkOjpzaXplX3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDIgKiBzdHJlYW1J
Yi0+c2l6ZSgpKTsKKworICAgICAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm5ld1N0cmVhbUJ1
ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihuZXdTaXplLCB1c2UzMiA/IEdMX1VO
U0lHTkVEX0lOVCA6IEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgICAgICBkZWxldGUgc3RyZWFt
SWI7CisKKyAgICAgICAgc3RyZWFtSWIgPSBuZXdTdHJlYW1CdWZmZXI7CisKKyAgICAgICAgaWYg
KHVzZTMyKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gc3RyZWFt
SWI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtU3Ry
ZWFtQnVmZmVyU2hvcnQgPSBzdHJlYW1JYjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVh
bUliLT5yZXNlcnZlU3BhY2UocmVxdWlyZWRTcGFjZSk7CisKKyAgICByZXR1cm4gc3RyZWFtSWI7
Cit9CisKK0dMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhl
ZChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJ
bmZvKQoreworICAgIGlmIChjb3VudCA+PSA2NTUzNSkgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7
CisKKyAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgeworICAgICAgICAvLyBGb3Ig
bGluZSBsb29wcywgY3JlYXRlIGEgc2luZ2xlLXVzZSBidWZmZXIgdGhhdCBydW5zIDAgLSBjb3Vu
dC0xLCAwLgorICAgICAgICBkZWxldGUgbUxpbmVMb29wQnVmZmVyOworICAgICAgICBtTGluZUxv
b3BCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIoKGNvdW50KzEpICogc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSwgR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgICAgIHVuc2lnbmVk
IHNob3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4obUxpbmVMb29w
QnVmZmVyLT5tYXAoKSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsKKyAgICAgICAgfQorCisg
ICAgICAgIGluZGljZXNbY291bnRdID0gMDsKKworICAgICAgICBtTGluZUxvb3BCdWZmZXItPnVu
bWFwKCk7CisKKyAgICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtTGluZUxvb3BCdWZmZXI7Cisg
ICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3VudCArIDE7CisgICAgICAgIGluZGV4SW5mby0+
bWF4SW5kZXggPSBjb3VudCAtIDE7CisgICAgfQorICAgIGVsc2UgaWYgKG1Db3VudGluZ0J1ZmZl
clNpemUgPCBjb3VudCkKKyAgICB7CisgICAgICAgIG1Db3VudGluZ0J1ZmZlclNpemUgPSBzdGQ6
Om1heChzdGF0aWNfY2FzdDxHTHNpemVpPihjZWlsUG93Mihjb3VudCkpLCBtQ291bnRpbmdCdWZm
ZXJTaXplKjIpOworCisgICAgICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7CisgICAgICAgIG1D
b3VudGluZ0J1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihjb3VudCAqIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgICAgICB1bnNpZ25l
ZCBzaG9ydCAqaW5kaWNlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0ICo+KG1Db3VudGlu
Z0J1ZmZlci0+bWFwKCkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7CisgICAgICAgIH0KKwor
ICAgICAgICBtQ291bnRpbmdCdWZmZXItPnVubWFwKCk7CisKKyAgICAgICAgaW5kZXhJbmZvLT5i
dWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7CisgICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3Vu
dDsKKyAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7
CisgICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3VudDsKKyAgICAgICAgaW5kZXhJbmZvLT5t
YXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisKKyAgICBpbmRleEluZm8tPmluZGV4U2l6ZSA9
IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgaW5kZXhJbmZvLT5taW5JbmRleCA9IDA7Cisg
ICAgaW5kZXhJbmZvLT5vZmZzZXQgPSAwOworCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQor
Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1h
bmFnZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5k
ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBnZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIElu
ZGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0
aW9uIHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZlcnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01F
VFJZX0lOREVYREFUQU1BTkFHRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0lOREVY
REFUQU1BTkFHRVJfSF8KKworI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxjc3RkZGVmPgor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFzcyBCdWZmZXI7
CitjbGFzcyBCdWZmZXJCYWNrRW5kOworY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyOworc3Ry
dWN0IEZvcm1hdENvbnZlcnRlcjsKKworc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGEKK3sKKyAg
ICBHTHVpbnQgbWluSW5kZXg7CisgICAgR0x1aW50IG1heEluZGV4OworICAgIEdMdWludCBjb3Vu
dDsKKyAgICBHTHVpbnQgaW5kZXhTaXplOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpi
dWZmZXI7CisgICAgR0xzaXplaSBvZmZzZXQ7Cit9OworCitjbGFzcyBJbmRleERhdGFNYW5hZ2Vy
Cit7CisgIHB1YmxpYzoKKyAgICBJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1
ZmZlckJhY2tFbmQgKmJhY2tlbmQpOworICAgIH5JbmRleERhdGFNYW5hZ2VyKCk7CisKKyAgICBH
TGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50LCBCdWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5kaWNlcywg
VHJhbnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCk7CisgICAgR0xlbnVtIHByZVJlbmRlclZh
bGlkYXRlVW5pbmRleGVkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICppbmRleEluZm8pOworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgSW5kZXhE
YXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OworICAgIHN0ZDo6c2l6ZV90
IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3Rk
OjpzaXplX3Qgc3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCkgY29uc3Q7
CisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpwcmVwYXJlSW5kZXhCdWZmZXIoR0xlbnVtIHR5
cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpOworCisgICAgQ29udGV4dCAqbUNvbnRleHQ7
CisgICAgQnVmZmVyQmFja0VuZCAqbUJhY2tlbmQ7CisKKyAgICBib29sIG1JbnRJbmRpY2VzU3Vw
cG9ydGVkOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVyU2hvcnQ7
CisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVySW50OworCisgICAgVHJh
bnNsYXRlZEluZGV4QnVmZmVyICptQ291bnRpbmdCdWZmZXI7CisgICAgR0xzaXplaSBtQ291bnRp
bmdCdWZmZXJTaXplOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptTGluZUxvb3BCdWZm
ZXI7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9JTkRFWERBVEFN
QU5BR0VSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1Zl
cnRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
Z2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIu
aDogRGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0
aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2Vv
bWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaCIKKworI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0
cnkvYmFja2VuZC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5h
Z2VyLmgiCisKK25hbWVzcGFjZQoreworICAgIGVudW0geyBJTklUSUFMX1NUUkVBTV9CVUZGRVJf
U0laRSA9IDEwMjQqMTAyNCB9OworfQorCituYW1lc3BhY2UgZ2wKK3sKKworVmVydGV4RGF0YU1h
bmFnZXI6OlZlcnRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQg
KmJhY2tlbmQpCisgICAgOiBtQ29udGV4dChjb250ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1E
aXJ0eUN1cnJlbnRWYWx1ZXModHJ1ZSksIG1DdXJyZW50VmFsdWVPZmZzZXQoMCkKK3sKKyAgICBt
U3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlcihJTklUSUFMX1NUUkVB
TV9CVUZGRVJfU0laRSk7CisgICAgdHJ5CisgICAgeworICAgICAgICBtQ3VycmVudFZhbHVlQnVm
ZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oNCAqIHNpemVv
ZihmbG9hdCkgKiBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIH0KKyAgICBjYXRjaCAoLi4uKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgICAgIHRocm93OworICAg
IH0KK30KKworVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCit7CisgICAg
ZGVsZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgZGVsZXRlIG1DdXJyZW50VmFsdWVCdWZmZXI7Cit9
CisKK3N0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gVmVydGV4RGF0YU1hbmFnZXI6Omdl
dEFjdGl2ZUF0dHJpYnMoKSBjb25zdAoreworICAgIHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRU
UklCUz4gYWN0aXZlOworCisgICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1
dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGFjdGl2ZVthdHRyaWJ1dGVJbmRleF0gPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRl
eChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgIH0KKworICAgIHJldHVybiBhY3RpdmU7Cit9
CisKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQpCit7CisgICAgY29uc3QgQXR0
cmlidXRlU3RhdGUgKmF0dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4QXR0cmliQmxvY2soKTsK
KyAgICBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IGFjdGl2ZUF0dHJpYnMg
PSBnZXRBY3RpdmVBdHRyaWJzKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCFhY3RpdmVBdHRyaWJzW2ldICYm
IGF0dHJpYnNbaV0ubUVuYWJsZWQgJiYgYXR0cmlic1tpXS5tQm91bmRCdWZmZXIgIT0gMCAmJiAh
bUNvbnRleHQtPmdldEJ1ZmZlcihhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcikpCisgICAgICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIHRyYW5zbGF0
ZWRbaV0uZW5hYmxlZCA9IGFjdGl2ZUF0dHJpYnNbaV07CisgICAgfQorCisgICAgYm9vbCB1c2Vz
Q3VycmVudFZhbHVlcyA9IGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYm
ICFhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICB1c2VzQ3VycmVu
dFZhbHVlcyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEhhbmRsZSB0aGUgaWRlbnRpdHktbWFwcGVkIGF0dHJpYnV0ZXMuCisgICAgLy8gUHJv
Y2VzcyBhcnJheSBhdHRyaWJ1dGVzLgorCisgICAgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9
IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0cmlic1tpXS5tRW5hYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZWRTcGFjZSArPSBzcGFjZVJlcXVpcmVk
KGF0dHJpYnNbaV0sIGNvdW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXF1aXJl
ZFNwYWNlID4gbVN0cmVhbUJ1ZmZlci0+c2l6ZSgpKQorICAgIHsKKyAgICAgICAgc3RkOjpzaXpl
X3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDMgKiBtU3RyZWFtQnVmZmVyLT5z
aXplKCkgLyAyKTsgLy8gMS41IHggbVN0cmVhbUJ1ZmZlci0+c2l6ZSgpIGlzIGFyYml0cmFyeSBh
bmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRvbid0IGhhdmUgdG9vIG1hbnkgcmVhbGxv
Y2F0aW9ucy4KKworICAgICAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpuZXdTdHJlYW1CdWZm
ZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyKG5ld1NpemUpOworCisgICAgICAgIGRl
bGV0ZSBtU3RyZWFtQnVmZmVyOworICAgICAgICBtU3RyZWFtQnVmZmVyID0gbmV3U3RyZWFtQnVm
ZmVyOworICAgIH0KKworICAgIG1TdHJlYW1CdWZmZXItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNw
YWNlKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1F
bmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0Q29u
dmVydGVyID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWJzW2ldLm1UeXBlLCBh
dHRyaWJzW2ldLm1TaXplLCBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkKTsKKworICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5ub25BcnJheSA9IGZhbHNlOworICAgICAgICAgICAgdHJhbnNsYXRlZFtp
XS50eXBlID0gYXR0cmlic1tpXS5tVHlwZTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6
ZSA9IGF0dHJpYnNbaV0ubVNpemU7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6
ZWQgPSBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5z
dHJpZGUgPSBmb3JtYXRDb252ZXJ0ZXIub3V0cHV0VmVydGV4U2l6ZTsKKyAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYnVmZmVyID0gbVN0cmVhbUJ1ZmZlcjsKKworICAgICAgICAgICAgc2l6ZV90
IGlucHV0U3RyaWRlID0gaW50ZXJwcmV0R2xTdHJpZGUoYXR0cmlic1tpXSk7CisgICAgICAgICAg
ICBzaXplX3QgZWxlbWVudFNpemUgPSB0eXBlU2l6ZShhdHRyaWJzW2ldLm1UeXBlKSAqIGF0dHJp
YnNbaV0ubVNpemU7CisKKyAgICAgICAgICAgIHZvaWQgKm91dHB1dCA9IG1TdHJlYW1CdWZmZXIt
Pm1hcChzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50KSwgJnRyYW5zbGF0ZWRbaV0ub2Zm
c2V0KTsKKworICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQ7CisgICAgICAgICAgICBpZiAo
YXR0cmlic1tpXS5tQm91bmRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QnVmZmVyICpidWZmZXIgPSBtQ29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVm
ZmVyKTsKKworICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0
PHNpemVfdD4oYXR0cmlic1tpXS5tUG9pbnRlcik7CisKKyAgICAgICAgICAgICAgICAvLyBCZWZv
cmUgd2UgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGJlbG93LCBtYWtlIHN1cmUgaXQgY2Fu
IGJlIGNvbXB1dGVkIHdpdGhvdXQgaW50ZWdlciBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICBp
ZiAoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gc3RhcnQgPCBzdGF0
aWNfY2FzdDxzdGQ6OnNpemVfdD4oY291bnQpCisgICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6
bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAvIGlucHV0U3RyaWRlIDwgc3RhdGlj
X2Nhc3Q8c3RkOjpzaXplX3Q+KHN0YXJ0ICsgY291bnQgLSAxKSAvLyBpdCdzIGEgcHJlcmVxdWlz
aXRlIHRoYXQgY291bnQgPj0gMSwgc28gc3RhcnQrY291bnQtMSA+PSAwLgorICAgICAgICAgICAg
ICAgICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBvZmZz
ZXQgPCBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gZWxlbWVudFNp
emUgPCBvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50
U2l6ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1CdWZm
ZXItPnVubWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICsg
aW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEpICsgZWxlbWVudFNpemUgPiBidWZmZXIt
PnNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1C
dWZmZXItPnVubWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5wdXQgPSBhdHRyaWJzW2ldLm1Qb2ludGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpbnB1dFN0cmlkZSAq
IHN0YXJ0OworCisgICAgICAgICAgICBpZiAoZm9ybWF0Q29udmVydGVyLmlkZW50aXR5ICYmIGlu
cHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3Jt
YXRDb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdHJlYW1CdWZmZXItPnVubWFwKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXNlc0N1cnJlbnRWYWx1ZXMpCisgICAgewor
ICAgICAgICBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGF0dHJpYnMsIGFjdGl2ZUF0dHJpYnMs
IHRyYW5zbGF0ZWQsIGNvdW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9
CisKK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CWVRFOiBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiBzaXplb2YoR0xieXRlKTsKKyAgICAgIGNhc2Ug
R0xfU0hPUlQ6IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBzaXplb2YoR0xzaG9ydCk7
CisgICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1cm4gc2l6ZW9mKEdMZml4ZWQpOworICAgICAgY2Fz
ZSBHTF9GTE9BVDogcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgfQorfQorCitzdGQ6OnNpemVf
dCBWZXJ0ZXhEYXRhTWFuYWdlcjo6aW50ZXJwcmV0R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3Rh
dGUgJmF0dHJpYikgY29uc3QKK3sKKyAgICByZXR1cm4gYXR0cmliLm1TdHJpZGUgPyBhdHRyaWIu
bVN0cmlkZSA6IHR5cGVTaXplKGF0dHJpYi5tVHlwZSkgKiBhdHRyaWIubVNpemU7Cit9CisKKy8v
IFJvdW5kIHVwIHggKD49MCkgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgbXVsdGlwbGUgKD4wKS4K
Ky8vIDAgcm91bmRzIHVwIHRvIDAuCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6cm91
bmRVcChzdGQ6OnNpemVfdCB4LCBzdGQ6OnNpemVfdCBtdWx0aXBsZSkgY29uc3QKK3sKKyAgICBB
U1NFUlQoeCA+PSAwKTsKKyAgICBBU1NFUlQobXVsdGlwbGUgPiAwKTsKKworICAgIHN0ZDo6c2l6
ZV90IHJlbWFpbmRlciA9IHggJSBtdWx0aXBsZTsKKyAgICBpZiAocmVtYWluZGVyICE9IDApCisg
ICAgeworICAgICAgICByZXR1cm4geCArIG11bHRpcGxlIC0gcmVtYWluZGVyOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90
IFZlcnRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVpcmVkKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZh
dHRyaWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkgY29uc3QKK3sKKyAgICBzdGQ6OnNpemVfdCBz
aXplID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWIubVR5cGUsIGF0dHJpYi5t
U2l6ZSwgYXR0cmliLm1Ob3JtYWxpemVkKS5vdXRwdXRWZXJ0ZXhTaXplOworICAgIHNpemUgKj0g
bWF4VmVydGV4OworCisgICAgcmV0dXJuIHJvdW5kVXAoc2l6ZSwgNCAqIHNpemVvZihHTGZsb2F0
KSk7Cit9CisKK3ZvaWQgVmVydGV4RGF0YU1hbmFnZXI6OnByb2Nlc3NOb25BcnJheUF0dHJpYnV0
ZXMoY29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJpYnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9W
RVJURVhfQVRUUklCUz4gJmFjdGl2ZUF0dHJpYnMsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5z
bGF0ZWQsIHN0ZDo6c2l6ZV90IGNvdW50KQoreworICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVz
KQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3QgdG90YWxTaXplID0gNCAqIHNpemVvZihmbG9h
dCkgKiBNQVhfVkVSVEVYX0FUVFJJQlM7CisKKyAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlci0+
cmVzZXJ2ZVNwYWNlKHRvdGFsU2l6ZSk7CisKKyAgICAgICAgZmxvYXQqIGN1cnJlbnRWYWx1ZXMg
PSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1DdXJyZW50VmFsdWVCdWZmZXItPm1hcCh0b3RhbFNpemUs
ICZtQ3VycmVudFZhbHVlT2Zmc2V0KSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIEdMX0ZMT0FUeDQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrLWVuZC4g
KEZvciBEM0Q5LCBpdCBpcyBhIG1hbmRhdG9yeSBmb3JtYXQuKQorICAgICAgICAgICAgY3VycmVu
dFZhbHVlc1tpKjQrMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07CisgICAgICAgICAg
ICBjdXJyZW50VmFsdWVzW2kqNCsxXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKKyAg
ICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzJdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVl
WzJdOworICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrM10gPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbM107CisgICAgICAgIH0KKworICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyLT51
bm1hcCgpOworICAgIH0KKworICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYm
ICFhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLm5vbkFycmF5ID0gdHJ1ZTsKKworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIg
PSBtQ3VycmVudFZhbHVlQnVmZmVyOworCisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUg
PSBHTF9GTE9BVDsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6ZSA9IDQ7CisgICAgICAg
ICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0uc3RyaWRlID0gMDsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0g
bUN1cnJlbnRWYWx1ZU9mZnNldCArIDQgKiBzaXplb2YoZmxvYXQpICogaTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhE
YXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkv
VmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
Z2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaDog
RGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUg
QnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZ
X1ZFUlRFWERBVEFNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhE
QVRBTUFOQUdFUl9IXworCisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPGNzdGRkZWY+CisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcjsK
K2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOworc3Ry
dWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyOworc3RydWN0
IFRyYW5zbGF0ZWRJbmRleERhdGE7CisKK2NsYXNzIFZlcnRleERhdGFNYW5hZ2VyCit7CisgIHB1
YmxpYzoKKyAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJCYWNr
RW5kICpiYWNrZW5kKTsKKyAgICB+VmVydGV4RGF0YU1hbmFnZXIoKTsKKworICAgIHZvaWQgZGly
dHlDdXJyZW50VmFsdWVzKCkgeyBtRGlydHlDdXJyZW50VmFsdWVzID0gdHJ1ZTsgfQorCisgICAg
R0xlbnVtIHByZVJlbmRlclZhbGlkYXRlKEdMaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
cmFuc2xhdGVkQXR0cmlidXRlICpvdXRBdHRyaWJzKTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6
Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gZ2V0QWN0aXZlQXR0cmlicygpIGNvbnN0OworCisg
ICAgdm9pZCBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICph
dHRyaWJzLCBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRy
aWJzLCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCk7
CisKKyAgICBzdGQ6OnNpemVfdCB0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3Rk
OjpzaXplX3QgaW50ZXJwcmV0R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYikg
Y29uc3Q7CisKKyAgICBzdGQ6OnNpemVfdCByb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6
ZV90IG11bHRpcGxlKSBjb25zdDsKKyAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKGNvbnN0
IEF0dHJpYnV0ZVN0YXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkgY29uc3Q7CisK
KyAgICBDb250ZXh0ICptQ29udGV4dDsKKyAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKwor
ICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXI7CisKKyAgICBib29sIG1E
aXJ0eUN1cnJlbnRWYWx1ZXM7CisgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldDsg
ICAgICAgICAgICAvLyBPZmZzZXQgd2l0aGluIG1DdXJyZW50VmFsdWVCdWZmZXIgdGhhdCB0aGUg
Y3VycmVudCBhdHRyaWJ1dGUgdmFsdWVzIHdlcmUgbGFzdCBsb2FkZWQgYXQuCisgICAgVHJhbnNs
YXRlZFZlcnRleEJ1ZmZlciAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKK307CisKK30KKworI2VuZGlm
ICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9iYWNrZW5kLmg6IEFi
c3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQg
VHJhbnNsYXRlZEluZGV4QnVmZmVyCisvLyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYW55
IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK3ZvaWQgKlRyYW5zbGF0ZWRCdWZmZXI6Om1hcChzdGQ6OnNpemVf
dCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQoreworICAgIEFTU0VSVChyZXF1
aXJlZFNwYWNlIDw9IG1CdWZmZXJTaXplKTsKKworICAgIHJlc2VydmVTcGFjZShyZXF1aXJlZFNw
YWNlKTsKKworICAgICpvZmZzZXQgPSBtQ3VycmVudFBvaW50OworICAgIG1DdXJyZW50UG9pbnQg
Kz0gcmVxdWlyZWRTcGFjZTsKKworICAgIHJldHVybiBzdHJlYW1pbmdNYXAoKm9mZnNldCwgcmVx
dWlyZWRTcGFjZSk7Cit9CisKK3ZvaWQgVHJhbnNsYXRlZEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKHN0
ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCit7CisgICAgaWYgKG1DdXJyZW50UG9pbnQgKyByZXF1
aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCisgICAgeworICAgICAgICByZWN5Y2xlKCk7CisgICAg
ICAgIG1DdXJyZW50UG9pbnQgPSAwOworICAgIH0KK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xp
YkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L2JhY2tlbmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2JhY2tlbmQuaDogQWJzdHJhY3QgY2xhc3Nl
cyBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIKKy8vIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbnkgQVBJLXNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIG9mIEFOR0xFLgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9C
QUNLRU5EX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCisKKyNpbmNs
dWRlIDxjc3RkZGVmPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAorewor
Y2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcjsKK2NsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1ZmZl
cjsKKworc3RydWN0IEZvcm1hdENvbnZlcnRlcgoreworICAgIGJvb2wgaWRlbnRpdHk7CisgICAg
c3RkOjpzaXplX3Qgb3V0cHV0VmVydGV4U2l6ZTsKKyAgICB2b2lkICgqY29udmVydEFycmF5KShj
b25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpv
dXQpOworfTsKKworc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUKK3sKKyAgICBib29sIGVuYWJs
ZWQ7CisgICAgYm9vbCBub25BcnJheTsKKworICAgIC8vIFRoZXNlIGFyZSB0aGUgb3JpZ2luYWwg
dW50cmFuc2xhdGVkIHZhbHVlcy4gKE9yIGp1c3QgaGF2ZSBzb21lIHNvcnQgb2YgQnVmZmVyQmFj
a0VuZDo6VHJhbnNsYXRlZFR5cGVLZXkuKQorICAgIEdMZW51bSB0eXBlOworICAgIHN0ZDo6c2l6
ZV90IHNpemU7CisgICAgYm9vbCBub3JtYWxpemVkOworCisgICAgc3RkOjpzaXplX3Qgb2Zmc2V0
OworCisgICAgc3RkOjpzaXplX3Qgc3RyaWRlOyAvLyAwIG1lYW5zIG5vdCB0byBhZHZhbmNlIHRo
ZSByZWFkIHBvaW50ZXIgYXQgYWxsCisKKyAgICBzdGQ6OnNpemVfdCBzZW1hbnRpY0luZGV4Owor
CisgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqYnVmZmVyOworfTsKKworY2xhc3MgQnVmZmVy
QmFja0VuZAoreworICBwdWJsaWM6CisgICAgdmlydHVhbCB+QnVmZmVyQmFja0VuZCgpIHsgfQor
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRJbnRJbmRpY2VzKCkgPSAwOworCisgICAgdmlydHVh
bCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qg
c2l6ZSkgPSAwOworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVy
dGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBzaXplKSA9IDA7CisgICAgdmlydHVh
bCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNp
emUsIEdMZW51bSB0eXBlKSA9IDA7CisgICAgdmlydHVhbCBGb3JtYXRDb252ZXJ0ZXIgZ2V0Rm9y
bWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6
ZSkgPSAwOworCisgICAgLy8gRm9yIGFuIGlkZW50aXR5LW1hcHBhYmxlIHN0cmVhbSwgdmVyaWZ5
IHRoYXQgdGhlIHN0cmlkZSBhbmQgb2Zmc2V0IGFyZSBva2F5LgorICAgIHZpcnR1YWwgYm9vbCB2
YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgR0xl
bnVtIHNldHVwSW5kaWNlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJ
bmZvKSA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gc2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKSA9IDA7Cit9OworCitjbGFzcyBUcmFu
c2xhdGVkQnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUcmFuc2xhdGVkQnVmZmVy
KHN0ZDo6c2l6ZV90IHNpemUpIDogbUJ1ZmZlclNpemUoc2l6ZSksIG1DdXJyZW50UG9pbnQoMCkg
eyB9CisgICAgdmlydHVhbCB+VHJhbnNsYXRlZEJ1ZmZlcigpIHsgfQorCisgICAgc3RkOjpzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgKm1hcCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgICB2b2lk
IHJlc2VydmVTcGFjZShzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKTsKKworICAgIHZvaWQgKm1h
cChzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KTsKKworICBw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKSA9
IDA7CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNpemVfdCBtQnVmZmVyU2l6ZTsKKyAgICBzdGQ6
OnNpemVfdCBtQ3VycmVudFBvaW50OworCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRy
YW5zbGF0ZWRCdWZmZXIpOworfTsKKworY2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciA6IHB1
YmxpYyBUcmFuc2xhdGVkQnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUcmFuc2xh
dGVkVmVydGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogVHJhbnNsYXRlZEJ1ZmZlcihzaXpl
KSB7IH0KK307CisKK2NsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xh
dGVkQnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUcmFuc2xhdGVkSW5kZXhCdWZm
ZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBUcmFuc2xhdGVkQnVmZmVyKHNpemUpIHsgfQorfTsKKwor
fQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfQkFDS0VORF9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9s
aWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTMgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2R4OS5oOiBEaXJlY3QzRCA5LWJhc2Vk
IGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIg
YW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRy
eS9keDkuaCIKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3BhY2UKK3sK
Ky8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNs
IHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3QpCisvLyBCWVRF
LW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXBy
ZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllURSAgICAgICAgVUJZVEU0IChJ
ZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9CWVRFLW5vcm0gICBVQllURTRO
IChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNIT1JUICAgICAgICAgICAgICAg
IFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JULW5vcm0gKElk
ZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdORURfU0hPUlQgICAgICAgRkxP
QVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkp
IG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4
ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50aXR5KQorCisv
LyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRl
Zi4gCit0ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07CisKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4geyB0eXBlZGVmIEdMYnl0ZSB0eXBl
OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiB7IHR5
cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9T
SE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRv
Q1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4geyB0eXBlZGVmIEdMdWludCB0eXBl
OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GTE9BVD4geyB0eXBlZGVmIEdM
ZmxvYXQgdHlwZTsgfTsKKworLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhh
dCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKK2VudW0g
RDNEVmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZMT0FULAorICAgIEQzRFZUX1NIT1JULAorICAg
IEQzRFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRfVUJZVEUsCisgICAgRDNEVlRfVUJZVEVfTk9S
TSwKKyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsKKworLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20g
RDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25k
aW5nIEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRv
Q1R5cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4g
eyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxE
M0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
RDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZ
VEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgdHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQg
RDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0
aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KK3RlbXBsYXRlIDx1
bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+CitzdHJ1Y3QgV2lkZW5SdWxlCit7Cit9OworCit0
ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAg
ICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1
Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRXZl
bjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
U0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBs
YXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAg
ICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1
Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRlblRvRm91
cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
VVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKKworLy8g
VmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2
ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNv
bWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQgc2l6ZT4KK3N0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKK3sKK307CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY2Fw
ZmxhZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgorc3RydWN0IFZlcnRleFR5cGVGbGFnc0hlbHBl
cgoreworICAgIGVudW0geyBjYXBmbGFnID0gY2FwZmxhZyB9OworICAgIGVudW0geyBkZWNsZmxh
ZyA9IGRlY2xmbGFnIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9G
TE9BVDE+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxP
QVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVD
TFRZUEVfU0hPUlQ0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9S
VDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQz
RERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0s
IDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZ
UEVfVVNIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hP
UlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGlu
ZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFj
ayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxH
TGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcK
K3sKK307CisKK3RlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlw
ZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sK
KyAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNr
ID0gRmFsbGJhY2sgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGlu
ZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBw
aW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAg
ICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7
IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsg
ICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8g
SWRlbnRpdHksIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0
eQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAg
ICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JU
X05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAg
ICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBD
YXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0
Cit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
RkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+
IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBH
TCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRl
cyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZp
eGVkVG9GbG9hdCkuCisvLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZp
bmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KKworLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292
ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkg
c2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0
ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+
CitzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJv
bVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+Cit7Cit9Owor
CisvLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0
aGUgTm9ybWFsaXplIG9wZXJhdG9yLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0
IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFs
aXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKKworLy8gVXNlIGEg
ZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1h
dGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgordGVt
cGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9B
VD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhl
ZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OworCisvLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlz
IHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1w
bGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBv
ciBub3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPgorc3RydWN0IERlZmF1
bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKK3sKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
RGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1
bHRWYWx1ZXM8VD4geyB9OwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4
VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsK
KworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhw
cmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1h
bGl6ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNT
dGFnZTI8VCwgbm9ybWFsaXplZD4KK3sKK307CisKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1w
bGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07CisKKy8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdp
dGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBm
YWxsYmFjayBjb252ZXJzaW9uLgorLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMg
YW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCit0ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVk
IH07IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5
cGUgPSBUOjpmYWxsYmFjayB9OyB9OworCisvLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRo
ZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJl
ZC9mYWxsYmFjayBjb252ZXJzaW9uLAorLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9m
IHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xU
eXBlcyBmbGFnIGluIGNhcCBmbGFnCisvLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVk
ZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCit0ZW1wbGF0ZSA8R0xl
bnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+CitzdHJ1Y3QgQ29udmVydGVyCisgICAgOiBnbDo6VmVy
dGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0
ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RU
b0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Cit7Citwcml2YXRlOgorICAgIGVu
dW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBl
LCBub3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8
ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKKworcHVibGljOgorICAgIGVudW0geyBjYXBm
bGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07CisgICAg
ZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNs
ZmxhZyB9OworfTsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKK0R4OUJhY2tFbmQ6OkR4OUJhY2tF
bmQoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZDNkZGV2aWNlKQorICAgIDog
bURldmljZShkM2RkZXZpY2UpCit7CisgICAgbURldmljZS0+QWRkUmVmKCk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgKytpKQorICAgIHsKKyAgICAgICAg
bUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldID0gdHJ1ZTsKKyAgICAgICAgbVN0cmVhbUZyZXF1ZW5j
eVtpXSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7CisgICAgfQorCisgICAgbVN0cmVh
bUZyZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJQlNdID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RB
TkNFRDsKKworICAgIEQzRENBUFM5IGNhcHMgPSBjb250ZXh0LT5nZXREZXZpY2VDYXBzKCk7CisK
KyAgICBJRGlyZWN0M0Q5ICpkM2RPYmplY3Q7CisgICAgbURldmljZS0+R2V0RGlyZWN0M0QoJmQz
ZE9iamVjdCk7CisKKyAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5IGlkZW50OworICAgIGQzZE9i
amVjdC0+R2V0QWRhcHRlcklkZW50aWZpZXIoY2Fwcy5BZGFwdGVyT3JkaW5hbCwgMCwgJmlkZW50
KTsKKyAgICBkM2RPYmplY3QtPlJlbGVhc2UoKTsKKworICAgIC8vIEluc3RhbmNpbmcgaXMgbWFu
ZGF0b3J5IGZvciBhbGwgSFcgd2l0aCBTTTMgdmVydGV4IHNoYWRlcnMsIGJ1dCBhdm9pZCBoYXJk
d2FyZSB3aGVyZSBpdCBkb2VzIG5vdCB3b3JrLgorICAgIG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRl
WmVybyA9IChjYXBzLlZlcnRleFNoYWRlclZlcnNpb24gPj0gRDNEVlNfVkVSU0lPTigzLCAwKSAm
JiBpZGVudC5WZW5kb3JJZCAhPSAweDgwODYpOworICAgIG1TdXBwb3J0SW50SW5kaWNlcyA9IChj
YXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KSk7CisKKyAgICBjaGVja1ZlcnRleENhcHMo
Y2Fwcy5EZWNsVHlwZXMpOworfQorCitEeDlCYWNrRW5kOjp+RHg5QmFja0VuZCgpCit7CisgICAg
bURldmljZS0+UmVsZWFzZSgpOworfQorCitib29sIER4OUJhY2tFbmQ6OnN1cHBvcnRJbnRJbmRp
Y2VzKCkKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRJbnRJbmRpY2VzOworfQorCisvLyBJbml0aWFs
aXNlIGEgVHJhbnNsYXRpb25JbmZvCisjZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNp
emUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRp
dHksICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwg
bm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29u
dmVydEFycmF5LCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+OjpjYXBmbGFn
LCBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZCks
ICAgICAgICBcCisgICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZUZhbGxi
YWNrKSAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRSh0
eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCisgICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAzKSwg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAgICBcCisg
ICAgfQorCitjb25zdCBEeDlCYWNrRW5kOjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIER4OUJhY2tF
bmQ6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1b
NF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXpl
ZF1bc2l6ZS0xXQoreworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBU
UkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05T
X0ZPUl9UWVBFKEdMX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdO
RURfU0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GSVhFRCksCisgICAgVFJB
TlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZMT0FUKQorfTsKKwordm9pZCBEeDlCYWNrRW5kOjpjaGVj
a1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNG
bGFnID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5j
YXBzRmxhZykgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1B
dHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5w
cmVmZXJyZWRDb252ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtQXR0cmlidXRlVHlw
ZXNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252
ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlVmVydGV4
QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZm
ZXIobURldmljZSwgc2l6ZSk7Cit9CisKK1RyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKkR4OUJhY2tF
bmQ6OmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSkKK3sK
KyAgICBpZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXIobURldmljZSwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmth
cm91bmQobURldmljZSwgc2l6ZSk7CisgICAgfQorfQorCitUcmFuc2xhdGVkSW5kZXhCdWZmZXIg
KkR4OUJhY2tFbmQ6OmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0
eXBlKQoreworICAgIHJldHVybiBuZXcgRHg5SW5kZXhCdWZmZXIobURldmljZSwgc2l6ZSwgdHlw
ZSk7Cit9CisKKy8vIFRoaXMgaXMgdXNlZCB0byBpbmRleCBtQXR0cmlidXRlVHlwZXMgYW5kIG1Q
b3NzaWJsZVRyYW5zbGF0aW9ucy4KK3Vuc2lnbmVkIGludCBEeDlCYWNrRW5kOjp0eXBlSW5kZXgo
R0xlbnVtIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfQllURTogcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVy
biAxOworICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOiByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OworICAg
ICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IHJldHVybiA1OworICAgIH0KK30KKworRm9ybWF0Q29udmVydGVyIER4OUJhY2tFbmQ6Omdl
dEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9vbCBub3Jt
YWxpemUpCit7CisgICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgodHlwZSldW25v
cm1hbGl6ZV1bc2l6ZS0xXS5mb3JtYXRDb252ZXJ0ZXI7Cit9CisKK0QzRERFQ0xUWVBFIER4OUJh
Y2tFbmQ6Om1hcEF0dHJpYnV0ZVR5cGUoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJv
b2wgbm9ybWFsaXplKSBjb25zdAoreworICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUlu
ZGV4KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZDNkRGVjbFR5cGU7Cit9CisKK2Jvb2wgRHg5
QmFja0VuZDo6dmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0
ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25zdAoreworICAgIC8vIEQz
RDkgcmVxdWlyZXMgdGhlIHN0cmVhbSBvZmZzZXQgYW5kIHN0cmlkZSB0byBiZSBhIG11bHRpcGxl
IG9mIERXT1JELgorICAgIHJldHVybiAoc3RyaWRlICUgc2l6ZW9mKERXT1JEKSA9PSAwICYmIG9m
ZnNldCAlIHNpemVvZihEV09SRCkgPT0gMCk7Cit9CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkg
KkR4OUJhY2tFbmQ6OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKnZiKSBjb25z
dAoreworICAgIHJldHVybiB2YiA/IHN0YXRpY19jYXN0PER4OVZlcnRleEJ1ZmZlcio+KHZiKS0+
Z2V0QnVmZmVyKCkgOiBOVUxMOworfQorCitJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKkR4OUJhY2tF
bmQ6OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGliID8gc3RhdGljX2Nhc3Q8RHg5SW5kZXhCdWZmZXIqPihpYiktPmdldEJ1ZmZlcigp
IDogTlVMTDsKK30KKworR0xlbnVtIER4OUJhY2tFbmQ6OnNldHVwSW5kaWNlc1ByZURyYXcoY29u
c3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKQoreworICAgIG1EZXZpY2UtPlNldElu
ZGljZXMoZ2V0RHhCdWZmZXIoaW5kZXhJbmZvLmJ1ZmZlcikpOworICAgIHJldHVybiBHTF9OT19F
UlJPUjsKK30KKworR0xlbnVtIER4OUJhY2tFbmQ6OnNldHVwQXR0cmlidXRlc1ByZURyYXcoY29u
c3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBIUkVTVUxUIGhyOwor
CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTKzFdOwor
CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgKm5leHRFbGVtZW50ID0gJmVsZW1lbnRzWzBdOworCisg
ICAgZm9yIChCWVRFIGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgewor
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAg
ICBuZXh0RWxlbWVudC0+U3RyZWFtID0gaSArIDE7ICAgIC8vIFN0cmVhbSAwIGlzIHNraXBwZWQg
YmVjYXVzZSBEM0QgZG9lcyBub3QgcGVybWl0IGl0IHRvIGJlIGFuIGluc3RhbmNlZCBzdHJlYW0u
CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIG5leHRF
bGVtZW50LT5UeXBlID0gc3RhdGljX2Nhc3Q8QllURT4obWFwQXR0cmlidXRlVHlwZShhdHRyaWJ1
dGVzW2ldLnR5cGUsIGF0dHJpYnV0ZXNbaV0uc2l6ZSwgYXR0cmlidXRlc1tpXS5ub3JtYWxpemVk
KSk7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZB
VUxUOworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENP
T1JEOworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdlSW5kZXggPSBhdHRyaWJ1dGVzW2ld
LnNlbWFudGljSW5kZXg7CisgICAgICAgICAgICBuZXh0RWxlbWVudCsrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xf
RU5EKCk7CisgICAgKm5leHRFbGVtZW50ID0gZW5kOworCisgICAgSURpcmVjdDNEVmVydGV4RGVj
bGFyYXRpb245KiB2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICBociA9IG1EZXZpY2UtPkNyZWF0ZVZl
cnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmdmVydGV4RGVjbGFyYXRpb24pOworICAgIG1EZXZp
Y2UtPlNldFZlcnRleERlY2xhcmF0aW9uKHZlcnRleERlY2xhcmF0aW9uKTsKKyAgICB2ZXJ0ZXhE
ZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAs
IE5VTEwsIDAsIDApOworCisgICAgYm9vbCBub25BcnJheUF0dHJpYnV0ZXMgPSBmYWxzZTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAg
eworICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJheSkgbm9uQXJyYXlBdHRyaWJ1dGVzID0gdHJ1
ZTsKKworICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKGkgKyAxLCBnZXREeEJ1
ZmZlcihhdHRyaWJ1dGVzW2ldLmJ1ZmZlciksIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1
dGVzW2ldLnN0cmlkZSk7CisgICAgICAgICAgICBpZiAoIW1BcHBsaWVkQXR0cmliRW5hYmxlZFtp
XSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJsZWRb
aV0gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoaSArIDEsIDAs
IDAsIDApOworICAgICAgICAgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1Vc2VJbnN0YW5j
aW5nRm9yU3RyaWRlWmVybykKKyAgICB7CisgICAgICAgIC8vIFdoZW4gdGhlcmUgYXJlIG5vIHN0
cmlkZSB6ZXJvIGF0dHJpYnV0ZXMsIHdlIGRpc2FibGUgaW5zdGFuY2luZyBzbyB0aGF0IERyYXdQ
cmltaXRpdmUgY2FuIGJlIHVzZWQuCisKKyAgICAgICAgaWYgKG5vbkFycmF5QXR0cmlidXRlcykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbMF0gIT0gU1RSRUFN
X0ZSRVFVRU5DWV9JTkRFWEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TdHJl
YW1GcmVxdWVuY3lbMF0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQ7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhF
RERBVEEgfCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubm9uQXJyYXkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5
W2krMV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpKzFd
ID0gU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpICsgMSwgRDNEU1RSRUFNU09VUkNFX0lO
U1RBTkNFREFUQSB8IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbaSsxXSAhPSBT
VFJFQU1fRlJFUVVFTkNZX0lOREVYRUQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpKzFdID0gU1RSRUFNX0ZS
RVFVRU5DWV9JTkRFWEVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZUZyZXEoaSArIDEsIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlMgKyAxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TdHJl
YW1GcmVxdWVuY3lbaV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbaV0gPSBTVFJF
QU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
c2hvdWxkIG5vdCBiZSBuZWVkZWQsIGJ1dCBvdGhlcndpc2UgdGhlcmUgaXMgYSBidWdneSBkcml2
ZXIgdGhhdCB3aWxsIGxlYXZlIGluc3RhbmNpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gZW5h
YmxlZCBmb3IgdGhlIGZpcnN0IGRyYXcgYWZ0ZXIgaXQgaGFzIGJlZW4gdHVybmVkIG9mZi4KKyAg
ICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCAxKTsKKworICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKwor
RHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKQorICAgIDogVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlcihzaXplKQoreworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZl
cihzaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBEM0RQT09M
X0RFRkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKyAg
ICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZl
ciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsK
KyAgICB9Cit9CisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6RHg5VmVydGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VG
bGFncykKKyAgICA6IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBIUkVTVUxU
IGhyID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgdXNhZ2VGbGFncywgMCwgRDNE
UE9PTF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhyICE9IFNfT0sp
CisgICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBi
dWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9j
KCk7CisgICAgfQorfQorCisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6fkR4OVZlcnRl
eEJ1ZmZlcigpCit7CisgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OmdldEJ1ZmZlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7Cit9CisKK3ZvaWQgKkR4OUJhY2tF
bmQ6OkR4OVZlcnRleEJ1ZmZlcjo6bWFwKCkKK3sKKyAgICB2b2lkICptYXBQdHI7CisKKyAgICBt
VmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDApOworCisgICAgcmV0dXJuIG1hcFB0
cjsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAg
ICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0
ZXhCdWZmZXI6OnJlY3ljbGUoKQoreworICAgIHZvaWQgKmR1bW15OworICAgIG1WZXJ0ZXhCdWZm
ZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgIG1WZXJ0ZXhCdWZm
ZXItPlVubG9jaygpOworfQorCit2b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OnN0
cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAg
dm9pZCAqbWFwUHRyOworCisgICAgbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZt
YXBQdHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKwor
Ly8gTm9ybWFsbHkgVkJzIGFyZSBjcmVhdGVkIHdpdGggRDNEVVNBR0VfV1JJVEVPTkxZIHwgRDNE
VVNBR0VfRFlOQU1JQywgYnV0IHNvbWUgaGFyZHdhcmUgJiBkcml2ZXJzIHdvbid0IHJlbmRlcgor
Ly8gaWYgYW55IHN0cmlkZS16ZXJvIHN0cmVhbXMgYXJlIGluIEQzRFVTQUdFX0RZTkFNSUMgVkJz
LCBzbyB0aGlzIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBzdWNoIFZCcyB3aXRoIG9ubHkgRDNE
VVNBR0VfV1JJVEVPTkxZIHNldC4KKy8vIEQzRExPQ0tfRElTQ0FSRCBhbmQgRDNETE9DS19OT09W
RVJXUklURSBhcmUgb25seSBhdmFpbGFibGUgb24gRDNEVVNBR0VfRFlOQU1JQyBWQnMsIHNvIHdl
IG92ZXJyaWRlIG1ldGhvZHMgdG8gYXZvaWQgdXNpbmcgdGhlc2UgZmxhZ3MuCitEeDlCYWNrRW5k
OjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6RHg5VmVydGV4QnVmZmVyWmVy
b1N0cmlkZVdvcmthcm91bmQoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBz
aXplKQorICAgIDogRHg5VmVydGV4QnVmZmVyKGRldmljZSwgc2l6ZSwgRDNEVVNBR0VfV1JJVEVP
TkxZKQoreworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVX
b3JrYXJvdW5kOjpyZWN5Y2xlKCkKK3sKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4
QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZz
ZXQsIHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqbWFwUHRyOworCisgICAgZ2V0QnVm
ZmVyKCktPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCAwKTsKKworICAgIHJldHVybiBtYXBQ
dHI7Cit9CisKK0R4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpEeDlJbmRleEJ1ZmZlcihJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKQorICAg
IDogVHJhbnNsYXRlZEluZGV4QnVmZmVyKHNpemUpCit7CisgICAgQVNTRVJUKHR5cGUgPT0gR0xf
VU5TSUdORURfU0hPUlQgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisgICAgRDNERk9S
TUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKSA/IEQzREZNVF9JTkRFWDE2
IDogRDNERk1UX0lOREVYMzI7CisKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVJbmRl
eEJ1ZmZlcihzaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCBmb3Jt
YXQsIEQzRFBPT0xfREVGQVVMVCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhyICE9
IFNfT0spCisgICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhbiBp
bmRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6YmFk
X2FsbG9jKCk7CisgICAgfQorfQorCitEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6fkR4OUlu
ZGV4QnVmZmVyKCkKK3sKKyAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKK30KKworSURpcmVj
dDNESW5kZXhCdWZmZXI5KkR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6
OkR4OUluZGV4QnVmZmVyOjptYXAoKQoreworICAgIHZvaWQgKm1hcFB0cjsKKworICAgIG1JbmRl
eEJ1ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRyLCAwKTsKKworICAgIHJldHVybiBtYXBQdHI7Cit9
CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBtSW5k
ZXhCdWZmZXItPlVubG9jaygpOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVy
OjpyZWN5Y2xlKCkKK3sKKyAgICB2b2lkICpkdW1teTsKKyAgICBtSW5kZXhCdWZmZXItPkxvY2so
MCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgIG1JbmRleEJ1ZmZlci0+VW5sb2Nr
KCk7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpzdHJlYW1pbmdNYXAo
c3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHZvaWQgKm1hcFB0
cjsKKworICAgIG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIEQzRExP
Q0tfTk9PVkVSV1JJVEUpOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKworfQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi9nZW9tZXRyeS9keDkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2R4OS5oOiBEaXJlY3QzRCA5LWJhc2VkIGltcGxl
bWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5kIFRy
YW5zbGF0ZWRJbmRleEJ1ZmZlci4KKworI2lmbmRlZiBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hf
CisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8KKworI2luY2x1ZGUgPGQzZDkuaD4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2Vv
bWV0cnkvYmFja2VuZC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgRHg5QmFja0VuZCA6
IHB1YmxpYyBCdWZmZXJCYWNrRW5kCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEeDlCYWNr
RW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmQzZGRldmljZSk7CisgICAg
fkR4OUJhY2tFbmQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0SW50SW5kaWNlcygpOwor
CisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIo
c3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6ZV90IHNpemUpOworICAgIHZp
cnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcihzdGQ6OnNpemVf
dCBzaXplLCBHTGVudW0gdHlwZSk7CisgICAgdmlydHVhbCBGb3JtYXRDb252ZXJ0ZXIgZ2V0Rm9y
bWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6
ZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6
c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25z
dDsKKworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwSW5kaWNlc1ByZURyYXcoY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEF0dHJp
YnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpOworCisg
IHByaXZhdGU6CisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKworICAgIGJvb2wgbVVz
ZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvOworICAgIGJvb2wgbVN1cHBvcnRJbnRJbmRpY2VzOwor
CisgICAgYm9vbCBtQXBwbGllZEF0dHJpYkVuYWJsZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKwor
ICAgIGVudW0gU3RyZWFtRnJlcXVlbmN5CisgICAgeworICAgICAgICBTVFJFQU1fRlJFUVVFTkNZ
X1VOSU5TVEFOQ0VEID0gMCwKKyAgICAgICAgU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVELAorICAg
ICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRAorICAgIH07CisKKyAgICBTdHJlYW1GcmVx
dWVuY3kgbVN0cmVhbUZyZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJQlMrMV07CisKKyAgICBzdHJ1
Y3QgVHJhbnNsYXRpb25JbmZvCisgICAgeworICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0
Q29udmVydGVyOworICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsKKyAgICB9OworCisg
ICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OworCisgICAgVHJhbnNs
YXRpb25JbmZvIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1b
NF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplLTFdCisKKyAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbgorICAgIHsKKyAg
ICAgICAgRFdPUkQgY2Fwc0ZsYWc7CisgICAgICAgIFRyYW5zbGF0aW9uSW5mbyBwcmVmZXJyZWRD
b252ZXJzaW9uOworICAgICAgICBUcmFuc2xhdGlvbkluZm8gZmFsbGJhY2tDb252ZXJzaW9uOwor
ICAgIH07CisKKyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0
ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJs
ZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0
eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCisK
KyAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpOworCisgICAgdW5zaWdu
ZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3Q7CisKKyAgICBjbGFzcyBEeDlWZXJ0
ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcgorICAgIHsKKyAgICAgIHB1
YmxpYzoKKyAgICAgICAgRHg5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
c3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgICAgIHZpcnR1YWwgfkR4OVZlcnRleEJ1ZmZlcigpOwor
CisgICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisg
ICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIER4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCAqbWFwKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAqc3Ry
ZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7CisKKyAgICAg
IHByaXZhdGU6CisgICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7
CisgICAgfTsKKworICAgIGNsYXNzIER4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5k
IDogcHVibGljIER4OVZlcnRleEJ1ZmZlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAg
RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKKworICAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChz
dGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOworICAgIH07CisKKyAgICBjbGFz
cyBEeDlJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkSW5kZXhCdWZmZXIKKyAgICB7Cisg
ICAgICBwdWJsaWM6CisgICAgICAgIER4OUluZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRl
dmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpOworICAgICAgICB2aXJ0dWFsIH5E
eDlJbmRleEJ1ZmZlcigpOworCisgICAgICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0QnVm
ZmVyKCkgY29uc3Q7CisKKyAgICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkICpt
YXAoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpz
aXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7CisgICAgfTsKKworICAgIElE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldER4QnVmZmVyKFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIg
KnZiKSBjb25zdDsKKyAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmdldER4QnVmZmVyKFRyYW5z
bGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0OworCisgICAgRDNEREVDTFRZUEUgbWFwQXR0cmli
dXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemVkKSBj
b25zdDsKK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX0RYOV9IXwpJ
bmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9u
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNv
bnZlcnNpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDggQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIGdlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRl
eCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZAorLy8gdGhlIEZv
cm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkgdGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3Rl
bS4KKworI2lmbmRlZiBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYQ09OVkVSU0lPTl9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYQ09OVkVSU0lPTl9IXworCisjaW5jbHVkZSA8
Y3N0ZGRlZj4KKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIiAvLyBEZWZpbmVzIEluZGV4CisKK25hbWVzcGFjZSBnbAoreworCisvLyBDb252ZXJzaW9u
IHR5cGVzOgorLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBh
biBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQorLy8gc3RhdGljIFUgY29udmVy
dChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhl
IG91dHB1dCB0eXBlCisvLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNl
ZCBieSB0aGlzIGNvbnZlcnNpb24KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgSWRlbnRp
dHkKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0eXBl
ZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHg7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFz
cyBUb1Q+CitzdHJ1Y3QgQ2FzdAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
ZmFsc2U7CisKKyAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFRvVCBj
b252ZXJ0KEZyb21UIHgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBDYXN0PFQsIFQ+Cit7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOworCisgICAgdHlwZWRlZiBU
IE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK3N0cnVjdCBOb3JtYWxpemUKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9
IGZhbHNlOworCisgICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGlt
aXRzPFQ+IE5MOworICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOworCisg
ICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25z
dCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCisgICAgICAgICAg
ICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0
aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFu
ZCBhbGwgdGhhdC4KKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0
YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOworICAgICAgICAgICAgcmV0dXJuICgyKmYr
MSkqZGl2aXNvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmL05MOjptYXgoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRl
IDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgorc3RydWN0IEZpeGVkVG9G
bG9hdAoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0
eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9t
VHlwZSB4KQorICAgIHsKKyAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0
aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOworICAgIH0KK307
CisKKy8vIFdpZGVuIHR5cGVzOgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFs
V2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCisvLyBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVy
IGNvbnZlcnNpb24KKworLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgordGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgTm9XaWRlbgoreworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVf
dCBmaW5hbFdpZHRoID0gTjsKK307CisKKy8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lH
TkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwor
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0V2ZW4KK3sKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Cit9OworCit0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRm91cgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5h
bFdpZHRoID0gNDsKK307CisKKy8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1
c3QgdGhhdC4KK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMK
K3sKKyAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAg
ICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQorfTsKKworLy8g
QnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlz
IHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVj
dCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Cit9OworCisvLyBDb252ZXJ0ZXI6CisvLyBzdGF0
aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5z
Zm9ybSAod2l0aCBubyB3aWRlbmluZykKKy8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5h
bFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAorLy8gc3RhdGljIHZvaWQg
Y29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6
ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1h
eSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgorCit0ZW1wbGF0ZSA8
Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVs
dFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+CitzdHJ1Y3QgVmVydGV4RGF0
YUNvbnZlcnRlcgoreworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBl
IE91dHB1dFR5cGU7CisgICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOworCisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxl
OjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0
cHV0VHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBl
ICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQp
CisgICAgeworICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRl
cyhpbiwgaSAqIHN0cmlkZSk7CisKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4s
IDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwor
ICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0
VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9u
ZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxl
Ojp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7CisKKyAgICAgICAg
ICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0
cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwg
c3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOworICAgIH0KKworICBwcml2YXRlOgorICAg
IC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBw
b2ludGVkLXRvIGVsZW1lbnRzKS4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGF0aWMg
VCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0
ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5k
ZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBD
b252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRp
bmRleF0gPSBkZWZhdWx0dmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9O
X0hfCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62905</attachid>
            <date>2010-07-28 18:05:19 -0700</date>
            <delta_ts>2010-08-02 15:23:09 -0700</delta_ts>
            <desc>Contains ANGLE source code and new xcodeproject. Should build correctly into WebKitBuild</desc>
            <filename>angle-into-webkit3</filename>
            <type>text/plain</type>
            <size>1902563</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysr
IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjE0IEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNs
YXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0cyA9IHsKKworLyog
QmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5
IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87
IH07CisJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhF
NjkgLyogZGVidWcuY3BwICovOyB9OworCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5m
b1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzOUQy
N0IxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIElu
aXRpYWxpemUuY3BwICovOyB9OworCQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJ
CUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzIxMjAwRjM1QTAwMDg4
RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07CisJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2
OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi87IH07
CisJCUZCMzlEMjg0MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzNTEyMDBGMzVB
MDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlGQjM5RDI4ODEyMDBGMzVB
MDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNl
X3Bvc2l4LmNwcCAqLzsgfTsKKwkJRkIzOUQyOEExMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICovOyB9OworCQlGQjM5RDI4
RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFy
c2VDb25zdC5jcHAgKi87IH07CisJCUZCMzlEMjhGMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0MDEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQlGQjM5
RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQ
b29sQWxsb2MuY3BwICovOyB9OworCQlGQjM5RDI5MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDUx
MjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLzsgfTsKKwkJRkIzOUQyOTYxMjAwRjM1QTAwMDg4
RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jICovOyB9OworCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0
LmMgKi87IH07CisJCUZCMzlEMjk5MTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRCMTIwMEYzNUEw
MDA4OEU2OSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJRkIzOUQyOUQxMjAwRjM1QTAwMDg4RTY5IC8q
IHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi87IH07CisJCUZCMzlEMkEw
MTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5j
ICovOyB9OworCQlGQjM5RDJBMjEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NDEyMDBGMzVBMDAw
ODhFNjkgLyogdG9rZW5zLmMgKi87IH07CisJCUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBR
dWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICov
OyB9OworCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1ODEyMDBGMzVB
MDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CisJCUZCMzlEMkE4MTIwMEYzNUEwMDA4
OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAq
LzsgfTsKKwkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYz
NUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CisJCUZCMzlEMkFDMTIwMEYzNUEw
MDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuY3BwICovOyB9OworCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OworCQlGQjM5
RDJDMjEyMDBGM0VGMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJFMTIwMEYzRTYwMDA4OEU2OSAv
KiBSZXNvdXJjZUxpbWl0cy5oICovOyB9OworCQlGQjM5RDJDMzEyMDBGM0VGMDAwODhFNjkgLyog
U2hhZGVyTGFuZy5oIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgfTsKKwkJRkIz
OUQ3MjMxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGds
c2xhbmcuY3BwICovOyB9OworCQlGQjM5RDcyNDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190
YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQ3MjIxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzOUQ3
MjUxMjAxMDMyNDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmggaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDcyMTEyMDEwMzIwMDAwODhFNjkgLyogZ2xz
bGFuZ190YWIuaCAqLzsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBC
ZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwRDExMjAwRjBFMzAwMDg4
RTY5IC8qIGxpYmFuZ2xlLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFuZ2xl
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUZCMzlEMTg2MTIwMEYy
NjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTg3MTIw
MEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVH
ZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVnLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5
IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAvKiBn
bHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xhbmcubDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8qIGds
c2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIElu
Zm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQxOTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlh
bGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5MzEyMDBGMjYyMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAv
KiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5
NjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE5ODEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50
ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUExMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9j
YWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxp
bnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUMxMjAw
RjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RDEyMDBGMjYyMDAw
ODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9z
aW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RTEyMDBGMjYy
MDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3Nv
dXJjZV93aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBvc3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdM
U0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBMTEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
dXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNM
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNl
Q29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBNjEyMDBGMjYyMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
c2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTcxMjAwRjI2
MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MUFFMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFGMTIwMEYy
NjIwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIwMTIw
MEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIxMTIwMEYy
NjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
bWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIyMTIwMEYyNjIw
MDA4OEU2OSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIzMTIwMEYyNjIwMDA4
OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBy
ZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjQxMjAwRjI2
MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0g
c2Nhbm5lci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCNTEyMDBGMjYy
MDAwODhFNjkgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBz
Y2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI2MTIwMEYyNjIw
MDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
c2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI3MTIwMEYy
NjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjgxMjAwRjI2
MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
c3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCOTEyMDBGMjYy
MDAwODhFNjkgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRv
a2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQTEyMDBGMjYyMDAw
ODhFNjkgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vu
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhF
NjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJB
bGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhFNjkg
LyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBT
aGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzAxMjAw
RjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUMxMTIw
MEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJv
bFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAv
KiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IHRy
YW5zbGF0b3JfY29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRl
SW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRT
ZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMzEyMDBGMjYy
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFE
NDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyMTEy
MDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
MjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5sZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIElu
aXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlh
bGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJEMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJFMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6
ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVH
bG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMxMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGlu
ZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8q
IGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjM0MTIwMEYzNUEw
MDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
MzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVkaWF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhF
NjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkg
Lyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkg
LyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBw
YXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDAxMjAw
RjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxs
b2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRv
bS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0
QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0
QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RDEy
MDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RTEyMDBG
MzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjRG
MTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsg
cGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTAx
MjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1MTEy
MDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1
MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjUz
MTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTQx
MjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBh
dGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTUxMjAw
RjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTYxMjAwRjM1
QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJl
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5
IC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJlbW92
ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUExMjAwRjM1QTAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2NjEyMDBGMzVBMDAwODhFNjkgLyogdHJhbnNsYXRv
cl9jb21tb24udmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSB0cmFuc2xhdG9yX2Nv
bW1vbi52Y3Byb2o7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjY3MTIwMEYz
NUEwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7
IHBhdGggPSB0cmFuc2xhdG9yX2hsc2wudmNwcm9qOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJh
bnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0
b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjZDMTIwMEYzNUEw
MDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0ZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZXNvdXJjZUxpbWl0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDcyMDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBnbHNsYW5nLmNwcDsg
cGF0aCA9IHNyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRoID0gc3JjL2lu
dGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZ190YWIuY3BwOyBwYXRoID0gc3JjL2ludGVy
bWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBF
bmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0YxMjAwRjBFMzAwMDg4RTY5IC8qIEZyYW1l
d29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8K
KwkJRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8s
CisJCQkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLywKKwkJCQlGQjM5RDBD
QjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLywKKwkJCQlGQjM5RDBDQzEyMDBF
RjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyQkQxMjAwRjNF
NjAwMDg4RTY5IC8qIEdMU0xBTkcgKi8sCisJCQkJRkIzOUQxODUxMjAwRjI2MjAwMDg4RTY5IC8q
IGNvbXBpbGVyICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRp
YXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIz
OUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovLAorCQkJCUZCMzlENzIxMTIw
MTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJCUZCMzlENzIyMTIwMTAzMjAw
MDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IEludGVybWVk
aWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDBDQzEyMDBF
RjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICov
LAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQxODYxMjAwRjI2MjAw
MDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAv
KiBDb2RlR2VuR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENv
ZGVHZW5ITFNMLmNwcCAqLywKKwkJCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9u
LmggKi8sCisJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAq
LywKKwkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZC
MzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMThEMTIwMEYy
NjIwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5
IC8qIGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1Np
bmsuY3BwICovLAorCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5oICov
LAorCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJ
CQlGQjM5RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlE
MTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDE5
NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMTk1MTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMTk2MTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQx
OTcxMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQxOTgx
MjAwRjI2MjAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMTk5MTIwMEYy
NjIwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMTlBMTIwMEYyNjIwMDA4
OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQxOUIxMjAwRjI2MjAwMDg4
RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQxOUMxMjAwRjI2MjAwMDg4
RTY5IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDE5RDEyMDBGMjYyMDAwODhFNjkgLyogb3NpbmNs
dWRlLmggKi8sCisJCQkJRkIzOUQxOUUxMjAwRjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4
LmNwcCAqLywKKwkJCQlGQjM5RDE5RjEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNw
cCAqLywKKwkJCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8s
CisJCQkJRkIzOUQxQTExMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlG
QjM5RDFBMjEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0SExTTC5jcHAgKi8sCisJCQkJRkIzOUQx
QTMxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQxQTUxMjAwRjI2MjAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDFBNjEyMDBGMjYyMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDFBODEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFs
bG9jLmggKi8sCisJCQkJRkIzOUQxQTkxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAq
LywKKwkJCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICov
LAorCQkJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAor
CQkJCUZCMzlEMUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlG
QjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUZCMzlEMUJG
MTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5RDFDMDEyMDBG
MjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhF
NjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAv
KiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFu
c2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8q
IHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyog
VHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBU
cmFuc2xhdG9ySExTTC5oICovLAorCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBl
cy5oICovLAorCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3Bw
ICovLAorCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywK
KwkJCQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCisJCQkpOworCQkJ
aW5jbHVkZUluSW5kZXggPSAwOworCQkJbmFtZSA9IGNvbXBpbGVyOworCQkJcGF0aCA9IHNyYy9j
b21waWxlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZCMzlEMUE5MTIw
MEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMg
Ki8sCisJCQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLywKKwkJCQlGQjM5
RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovLAorCQkJCUZCMzlEMUFEMTIwMEYy
NjIwMDA4OEU2OSAvKiBjcHAuYyAqLywKKwkJCQlGQjM5RDFBRTEyMDBGMjYyMDAwODhFNjkgLyog
Y3BwLmggKi8sCisJCQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICov
LAorCQkJCUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLywKKwkJCQlGQjM5
RDFCMTEyMDBGMjYyMDAwODhFNjkgLyogbWVtb3J5LmggKi8sCisJCQkJRkIzOUQxQjIxMjAwRjI2
MjAwMDg4RTY5IC8qIHBhcnNlci5oICovLAorCQkJCUZCMzlEMUIzMTIwMEYyNjIwMDA4OEU2OSAv
KiBwcmVwcm9jZXNzLmggKi8sCisJCQkJRkIzOUQxQjQxMjAwRjI2MjAwMDg4RTY5IC8qIHNjYW5u
ZXIuYyAqLywKKwkJCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5oICovLAor
CQkJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLywKKwkJCQlGQjM5
RDFCNzEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5jICovLAorCQkJCUZCMzlEMUI4MTIwMEYy
NjIwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8sCisJCQkJRkIzOUQxQjkxMjAwRjI2MjAwMDg4RTY5
IC8qIHRva2Vucy5jICovLAorCQkJCUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMu
aCAqLywKKwkJCSk7CisJCQlpbmNsdWRlSW5JbmRleCA9IDA7CisJCQlwYXRoID0gcHJlcHJvY2Vz
c29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQyMjAxMjAwRjM1
QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8s
CisJCQkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLywKKwkJ
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8sCisJCQkJRkIzOUQyMjUx
MjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQlGQjM5RDIyNjEyMDBG
MzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMjI4MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5n
LmwgKi8sCisJCQkJRkIzOUQyMjkxMjAwRjM1QTAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLywKKwkJ
CQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAorCQkJCUZCMzlE
MjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAorCQkJCUZCMzlEMjJDMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5RDIyRDEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAv
KiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyog
SW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8q
IEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGlu
dGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1P
dXQuY3BwICovLAorCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJz
ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCisJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKKwkJ
CQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJRkIzOUQy
MzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlGQjM5RDIz
QTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlGQjM5RDIzQjEy
MDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJRkIzOUQyM0MxMjAwRjM1
QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhF
NjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9j
LmNwcCAqLywKKwkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8s
CisJCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKKwkJCQlG
QjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCUZC
MzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUZCMzlE
MjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlGQjM5RDI1OTEy
MDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUZCMzlEMjVBMTIwMEYzNUEw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhF
NjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3lt
Ym9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5oICovLAorCQkJCUZCMzlEMjY2MTIwMEYzNUEwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2Nv
bW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQyNjcxMjAwRjM1QTAwMDg4RTY5IC8qIHRyYW5zbGF0
b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQyNjgxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5z
bGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAq
LywKKwkJCQlGQjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywK
KwkJCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJ
RkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0ZC5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBjb21waWxlcjsKKwkJCXBhdGggPSBzcmMvY29tcGlsZXI7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OworCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzc29y
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDI0
NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovLAorCQkJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8sCisJCQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBp
bGUuaCAqLywKKwkJCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8sCisJCQkJ
RkIzOUQyNDkxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5oICovLAorCQkJCUZCMzlEMjRBMTIwMEYz
NUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLywKKwkJCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhF
NjkgLyogbWVtb3J5LmMgKi8sCisJCQkJRkIzOUQyNEMxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9y
eS5oICovLAorCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZXIuaCAqLywKKwkJ
CQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovLAorCQkJCUZCMzlE
MjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8sCisJCQkJRkIzOUQyNTAxMjAwRjM1
QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKKwkJCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkg
Lyogc2xnbG9iYWxzLmggKi8sCisJCQkJRkIzOUQyNTIxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJv
bHMuYyAqLywKKwkJCQlGQjM5RDI1MzEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5oICovLAor
CQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLywKKwkJCQlGQjM5RDI1
NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHByZXBy
b2Nlc3NvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZCMzlEMkJEMTIw
MEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlGQjM5RDJCRTEyMDBGM0U2MDAwODhFNjkgLyogUmVzb3VyY2VMaW1p
dHMuaCAqLywKKwkJCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICov
LAorCQkJKTsKKwkJCW5hbWUgPSBHTFNMQU5HOworCQkJcGF0aCA9IGluY2x1ZGUvR0xTTEFORzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisvKiBFbmQgUEJYR3JvdXAgc2VjdGlv
biAqLworCisvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQlGQjM5RDBEMDEy
MDBGMEUzMDAwODhFNjkgLyogYW5nbGUgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzOUQwRDYxMjAwRjExRTAwMDg4RTY5IC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJhbmdsZSIgKi87
CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlGQjM5RDBERTEyMDBGMTkxMDAwODhFNjkgLyogQWN0
aW9uICJmbGV4X2dsc2xhbmciICovLAorCQkJCUZCMzlEMzFDMTIwMEY2OTIwMDA4OEU2OSAvKiBB
Y3Rpb24gImJpc29uX2dsc2xhbmciICovLAorCQkJCUZCMzlEMENFMTIwMEYwRTMwMDA4OEU2OSAv
KiBTb3VyY2VzICovLAorCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0g
KAorCQkJKTsKKwkJCW5hbWUgPSBhbmdsZTsKKwkJCXByb2R1Y3ROYW1lID0gYW5nbGU7CisJCQlw
cm9kdWN0UmVmZXJlbmNlID0gRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYmFuZ2xlLmEg
Ki87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3Rh
dGljIjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdp
biBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJRkIzOUQwNzAxMjAwRUQ5MjAwMDg4RTY5IC8qIFBy
b2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSBGQjM5RDA3MzEyMDBFRDkyMDAwODhFNjkgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJBTkdMRSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVy
c2lvbiA9ICJYY29kZSAyLjQiOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CisJCQlt
YWluR3JvdXAgPSBGQjM5RDA2RTEyMDBFRDkyMDAwODhFNjk7CisJCQlwcm9qZWN0RGlyUGF0aCA9
ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJRkIzOUQwRDAx
MjAwRjBFMzAwMDg4RTY5IC8qIGFuZ2xlICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9q
ZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJRkIzOUQwREUxMjAwRjE5MTAwMDg4RTY5IC8qIEFjdGlvbiAiZmxleF9nbHNsYW5n
IiAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0
aW9uTWFzayA9IDEyOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJ
CQljb21waWxlci9nbHNsYW5nLmwsCisJCQkpOworCQkJbmFtZSA9ICJBY3Rpb24gXCJmbGV4X2ds
c2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9n
bHNsYW5nLmNwcCIsCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiZWNobyBu
b3RlOiBcIkV4ZWN1dGluZyBmbGV4IG9uIGNvbXBpbGVyL2dsc2xhbmcubFwiXG5lY2hvIG5vdGU6
ICR7SU5URVJNRURJQVRFX0RJUn1cbmV4ZWMgZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIFwiLS1v
dXRmaWxlPSR7SU5URVJNRURJQVRFX0RJUn0vZ2xzbGFuZy5jcHBcIiBzcmMvY29tcGlsZXIvZ2xz
bGFuZy5sXG5leGl0IDEiOworCQkJc2hvd0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisJCUZCMzlE
MzFDMTIwMEY2OTIwMDA4OEU2OSAvKiBBY3Rpb24gImJpc29uX2dsc2xhbmciICovID0geworCQkJ
aXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29t
cGlsZXIvZ2xzbGFuZy55LAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiYmlzb25fZ2xzbGFu
Z1wiIjsKKwkJCW91dHB1dFBhdGhzID0gKAorCQkJCSIkKElOVEVSTUVESUFURV9ESVIpL2dsc2xh
bmdfdGFiLmNwcCIsCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZ190YWIuaCIsCisJ
CQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVs
bFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiZWNobyBub3RlOiBcIkV4ZWN1dGlu
ZyBiaXNvbiBvbiBjb21waWxlci9nbHNsYW5nLnlcIlxuZXhlYyBiaXNvbiAtLW5vLWxpbmVzIFwi
LS1kZWZpbmVzPSR7SU5URVJNRURJQVRFX0RJUn0vZ2xzbGFuZ190YWIuaFwiIFwiLS1za2VsZXRv
bj15YWNjLmNcIiBcIi0tb3V0cHV0PSR7SU5URVJNRURJQVRFX0RJUn0vZ2xzbGFuZ190YWIuY3Bw
XCIgc3JjL2NvbXBpbGVyL2dsc2xhbmcueVxuZXhpdCAxXG4iOworCQkJc2hvd0VudlZhcnNJbkxv
ZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlGQjM5RDBDRTEy
MDBGMEUzMDAwODhFNjkgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCUZCMzlEMkMyMTIwMEYzRUYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzOUQ3MjUxMjAxMDMyNDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmgg
aW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDcyNDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190
YWIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyQzMxMjAwRjNFRjAwMDg4RTY5IC8qIFNo
YWRlckxhbmcuaCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAv
KiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3NTEyMDBGMzVBMDAw
ODhFNjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyNzkxMjAwRjM1QTAw
MDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjdCMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjdE
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzOUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlGQjM5RDI4NDEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291
cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjhBMTIwMEYzNUEwMDA4OEU2
OSAvKiBPdXRwdXRHTFNMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjhFMTIwMEYzNUEw
MDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjhGMTIw
MEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5
RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKKwkJCQlG
QjM5RDI5NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5
RDI5ODEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKKwkJCQlG
QjM5RDI5OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKKwkJCQlG
QjM5RDI5RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9s
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8q
IFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU291
cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlv
biBzZWN0aW9uICovCisJCUZCMzlEMDcxMTIwMEVEOTIwMDA4OEU2OSAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVF9QUkVfWENPREVfM18xKSI7CisJCQkJ
QVJDSFNfU1RBTkRBUkRfNjRfQklUX1BSRV9YQ09ERV8zXzEgPSB4ODZfNjQ7CisJCQkJQ09QWV9Q
SEFTRV9TVFJJUCA9IE5POworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKFNS
Q1JPT1QpL2luY2x1ZGUiLAorCQkJCQkiJChTUkNST09UKS9zcmMiLAorCQkJCSk7CisJCQkJSU5U
RVJNRURJQVRFX0RJUiA9IHNyYy9pbnRlcm1lZGlhdGU7CisJCQl9OworCQkJbmFtZSA9IERlYnVn
OworCQl9OworCQlGQjM5RDA3MjEyMDBFRDkyMDAwODhFNjkgLyogUmVsZWFzZSAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlB
UkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVF9QUkVfWENPREVfM18xKSI7CisJCQkJQVJD
SFNfU1RBTkRBUkRfNjRfQklUX1BSRV9YQ09ERV8zXzEgPSB4ODZfNjQ7CisJCQkJQ09QWV9QSEFT
RV9TVFJJUCA9IFlFUzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNS
T09UKS9pbmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9PVCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVS
TUVESUFURV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRlOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNl
OworCQl9OworCQlGQjM5RDBEMjEyMDBGMEU0MDAwODhFNjkgLyogRGVidWcgKi8gPSB7CisJCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxX
QVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POwor
CQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05U
SU5VRSA9IFlFUzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJR0NDX09QVElNSVpB
VElPTl9MRVZFTCA9IDA7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJ
UFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IGFuZ2xlOworCQkJfTsKKwkJCW5h
bWUgPSBEZWJ1ZzsKKwkJfTsKKwkJRkIzOUQwRDMxMjAwRjBFNDAwMDg4RTY5IC8qIFJlbGVhc2Ug
Ki8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9QSEFTRV9T
VFJJUCA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1k
c3ltIjsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsKKwkJCQlHQ0NfTU9E
RUxfVFVOSU5HID0gRzU7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJ
UFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IGFuZ2xlOworCQkJCVpFUk9fTElO
SyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQnVpbGRD
b25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBz
ZWN0aW9uICovCisJCUZCMzlEMDczMTIwMEVEOTIwMDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkFOR0xFIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmln
dXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUZCMzlEMDcxMTIw
MEVEOTIwMDA4OEU2OSAvKiBEZWJ1ZyAqLywKKwkJCQlGQjM5RDA3MjEyMDBFRDkyMDAwODhFNjkg
LyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9
IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQlGQjM5
RDBENjEyMDBGMTFFMDAwODhFNjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgImFuZ2xlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUZCMzlEMEQyMTIwMEYwRTQwMDA4OEU2
OSAvKiBEZWJ1ZyAqLywKKwkJCQlGQjM5RDBEMzEyMDBGMEU0MDAwODhFNjkgLyogUmVsZWFzZSAq
LywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworLyogRW5kIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLworCX07CisJcm9vdE9iamVjdCA9IEZCMzlEMDcwMTIwMEVEOTIw
MDA4OEU2OSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKK30KSW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdM
L2VnbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvRUdML2VnbC5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzI5
IEBACisvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KKy8qIHZpOiBzZXQgc3c9
NCB0cz04OiAqLworLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9yIEVHTCAxLjQuCisg
KiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAo
V2VkLCAyMSBPY3QgMjAwOSkgJAorICovCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAw
OSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh
bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyoqIGNvcHkg
b2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0
aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVz
dHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8g
dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorKiogZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMsIGFuZCB0bworKiogcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgdG8gZG8gc28s
IHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyoqCisqKiBUaGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp
bmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg
TWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xV
RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJ
TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO
VC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT
IEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiogVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyoqIE1BVEVS
SUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRFUklBTFMuCisqLwor
CisjaWZuZGVmIF9fZWdsX2hfCisjZGVmaW5lIF9fZWdsX2hfCisKKy8qIEFsbCBwbGF0Zm9ybS1k
ZXBlbmRlbnQgdHlwZXMgYW5kIG1hY3JvIGJvaWxlcnBsYXRlIChzdWNoIGFzIEVHTEFQSQorICog
YW5kIEVHTEFQSUVOVFJZKSBzaG91bGQgZ28gaW4gZWdscGxhdGZvcm0uaC4KKyAqLworI2luY2x1
ZGUgPEVHTC9lZ2xwbGF0Zm9ybS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKy8qIEVHTCBUeXBlcyAqLworLyogRUdMaW50IGlzIGRlZmluZWQgaW4gZWds
cGxhdGZvcm0uaCAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgRUdMQm9vbGVhbjsKK3R5cGVkZWYg
dW5zaWduZWQgaW50IEVHTGVudW07Cit0eXBlZGVmIHZvaWQgKkVHTENvbmZpZzsKK3R5cGVkZWYg
dm9pZCAqRUdMQ29udGV4dDsKK3R5cGVkZWYgdm9pZCAqRUdMRGlzcGxheTsKK3R5cGVkZWYgdm9p
ZCAqRUdMU3VyZmFjZTsKK3R5cGVkZWYgdm9pZCAqRUdMQ2xpZW50QnVmZmVyOworCisvKiBFR0wg
VmVyc2lvbmluZyAqLworI2RlZmluZSBFR0xfVkVSU0lPTl8xXzAJCQkxCisjZGVmaW5lIEVHTF9W
RVJTSU9OXzFfMQkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV8yCQkJMQorI2RlZmluZSBFR0xf
VkVSU0lPTl8xXzMJCQkxCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfNAkJCTEKKworLyogRUdMIEVu
dW1lcmFudHMuIEJpdG1hc2tzIGFuZCBvdGhlciBleGNlcHRpb25hbCBjYXNlcyBhc2lkZSwgbW9z
dAorICogZW51bXMgYXJlIGFzc2lnbmVkIHVuaXF1ZSB2YWx1ZXMgc3RhcnRpbmcgYXQgMHgzMDAw
LgorICovCisKKy8qIEVHTCBhbGlhc2VzICovCisjZGVmaW5lIEVHTF9GQUxTRQkJCTAKKyNkZWZp
bmUgRUdMX1RSVUUJCQkxCisKKy8qIE91dC1vZi1iYW5kIGhhbmRsZSB2YWx1ZXMgKi8KKyNkZWZp
bmUgRUdMX0RFRkFVTFRfRElTUExBWQkJKChFR0xOYXRpdmVEaXNwbGF5VHlwZSkwKQorI2RlZmlu
ZSBFR0xfTk9fQ09OVEVYVAkJCSgoRUdMQ29udGV4dCkwKQorI2RlZmluZSBFR0xfTk9fRElTUExB
WQkJCSgoRUdMRGlzcGxheSkwKQorI2RlZmluZSBFR0xfTk9fU1VSRkFDRQkJCSgoRUdMU3VyZmFj
ZSkwKQorCisvKiBPdXQtb2YtYmFuZCBhdHRyaWJ1dGUgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0RP
TlRfQ0FSRQkJCSgoRUdMaW50KS0xKQorCisvKiBFcnJvcnMgLyBHZXRFcnJvciByZXR1cm4gdmFs
dWVzICovCisjZGVmaW5lIEVHTF9TVUNDRVNTCQkJMHgzMDAwCisjZGVmaW5lIEVHTF9OT1RfSU5J
VElBTElaRUQJCTB4MzAwMQorI2RlZmluZSBFR0xfQkFEX0FDQ0VTUwkJCTB4MzAwMgorI2RlZmlu
ZSBFR0xfQkFEX0FMTE9DCQkJMHgzMDAzCisjZGVmaW5lIEVHTF9CQURfQVRUUklCVVRFCQkweDMw
MDQKKyNkZWZpbmUgRUdMX0JBRF9DT05GSUcJCQkweDMwMDUKKyNkZWZpbmUgRUdMX0JBRF9DT05U
RVhUCQkJMHgzMDA2CisjZGVmaW5lIEVHTF9CQURfQ1VSUkVOVF9TVVJGQUNFCQkweDMwMDcKKyNk
ZWZpbmUgRUdMX0JBRF9ESVNQTEFZCQkJMHgzMDA4CisjZGVmaW5lIEVHTF9CQURfTUFUQ0gJCQkw
eDMwMDkKKyNkZWZpbmUgRUdMX0JBRF9OQVRJVkVfUElYTUFQCQkweDMwMEEKKyNkZWZpbmUgRUdM
X0JBRF9OQVRJVkVfV0lORE9XCQkweDMwMEIKKyNkZWZpbmUgRUdMX0JBRF9QQVJBTUVURVIJCTB4
MzAwQworI2RlZmluZSBFR0xfQkFEX1NVUkZBQ0UJCQkweDMwMEQKKyNkZWZpbmUgRUdMX0NPTlRF
WFRfTE9TVAkJMHgzMDBFCS8qIEVHTCAxLjEgLSBJTUdfcG93ZXJfbWFuYWdlbWVudCAqLworCisv
KiBSZXNlcnZlZCAweDMwMEYtMHgzMDFGIGZvciBhZGRpdGlvbmFsIGVycm9ycyAqLworCisvKiBD
b25maWcgYXR0cmlidXRlcyAqLworI2RlZmluZSBFR0xfQlVGRkVSX1NJWkUJCQkweDMwMjAKKyNk
ZWZpbmUgRUdMX0FMUEhBX1NJWkUJCQkweDMwMjEKKyNkZWZpbmUgRUdMX0JMVUVfU0laRQkJCTB4
MzAyMgorI2RlZmluZSBFR0xfR1JFRU5fU0laRQkJCTB4MzAyMworI2RlZmluZSBFR0xfUkVEX1NJ
WkUJCQkweDMwMjQKKyNkZWZpbmUgRUdMX0RFUFRIX1NJWkUJCQkweDMwMjUKKyNkZWZpbmUgRUdM
X1NURU5DSUxfU0laRQkJMHgzMDI2CisjZGVmaW5lIEVHTF9DT05GSUdfQ0FWRUFUCQkweDMwMjcK
KyNkZWZpbmUgRUdMX0NPTkZJR19JRAkJCTB4MzAyOAorI2RlZmluZSBFR0xfTEVWRUwJCQkweDMw
MjkKKyNkZWZpbmUgRUdMX01BWF9QQlVGRkVSX0hFSUdIVAkJMHgzMDJBCisjZGVmaW5lIEVHTF9N
QVhfUEJVRkZFUl9QSVhFTFMJCTB4MzAyQgorI2RlZmluZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEgJ
CTB4MzAyQworI2RlZmluZSBFR0xfTkFUSVZFX1JFTkRFUkFCTEUJCTB4MzAyRAorI2RlZmluZSBF
R0xfTkFUSVZFX1ZJU1VBTF9JRAkJMHgzMDJFCisjZGVmaW5lIEVHTF9OQVRJVkVfVklTVUFMX1RZ
UEUJCTB4MzAyRgorI2RlZmluZSBFR0xfU0FNUExFUwkJCTB4MzAzMQorI2RlZmluZSBFR0xfU0FN
UExFX0JVRkZFUlMJCTB4MzAzMgorI2RlZmluZSBFR0xfU1VSRkFDRV9UWVBFCQkweDMwMzMKKyNk
ZWZpbmUgRUdMX1RSQU5TUEFSRU5UX1RZUEUJCTB4MzAzNAorI2RlZmluZSBFR0xfVFJBTlNQQVJF
TlRfQkxVRV9WQUxVRQkweDMwMzUKKyNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVF
CTB4MzAzNgorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFCTB4MzAzNworI2RlZmlu
ZSBFR0xfTk9ORQkJCTB4MzAzOAkvKiBBdHRyaWIgbGlzdCB0ZXJtaW5hdG9yICovCisjZGVmaW5l
IEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCCQkweDMwMzkKKyNkZWZpbmUgRUdMX0JJTkRfVE9fVEVY
VFVSRV9SR0JBCTB4MzAzQQorI2RlZmluZSBFR0xfTUlOX1NXQVBfSU5URVJWQUwJCTB4MzAzQgor
I2RlZmluZSBFR0xfTUFYX1NXQVBfSU5URVJWQUwJCTB4MzAzQworI2RlZmluZSBFR0xfTFVNSU5B
TkNFX1NJWkUJCTB4MzAzRAorI2RlZmluZSBFR0xfQUxQSEFfTUFTS19TSVpFCQkweDMwM0UKKyNk
ZWZpbmUgRUdMX0NPTE9SX0JVRkZFUl9UWVBFCQkweDMwM0YKKyNkZWZpbmUgRUdMX1JFTkRFUkFC
TEVfVFlQRQkJMHgzMDQwCisjZGVmaW5lIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQCQkweDMwNDEJ
LyogUHNldWRvLWF0dHJpYnV0ZSAobm90IHF1ZXJ5YWJsZSkgKi8KKyNkZWZpbmUgRUdMX0NPTkZP
Uk1BTlQJCQkweDMwNDIKKworLyogUmVzZXJ2ZWQgMHgzMDQxLTB4MzA0RiBmb3IgYWRkaXRpb25h
bCBjb25maWcgYXR0cmlidXRlcyAqLworCisvKiBDb25maWcgYXR0cmlidXRlIHZhbHVlcyAqLwor
I2RlZmluZSBFR0xfU0xPV19DT05GSUcJCQkweDMwNTAJLyogRUdMX0NPTkZJR19DQVZFQVQgdmFs
dWUgKi8KKyNkZWZpbmUgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRwkweDMwNTEJLyogRUdMX0NP
TkZJR19DQVZFQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX1JHQgkJMHgzMDUy
CS8qIEVHTF9UUkFOU1BBUkVOVF9UWVBFIHZhbHVlICovCisjZGVmaW5lIEVHTF9SR0JfQlVGRkVS
CQkJMHgzMDhFCS8qIEVHTF9DT0xPUl9CVUZGRVJfVFlQRSB2YWx1ZSAqLworI2RlZmluZSBFR0xf
TFVNSU5BTkNFX0JVRkZFUgkJMHgzMDhGCS8qIEVHTF9DT0xPUl9CVUZGRVJfVFlQRSB2YWx1ZSAq
LworCisvKiBNb3JlIGNvbmZpZyBhdHRyaWJ1dGUgdmFsdWVzLCBmb3IgRUdMX1RFWFRVUkVfRk9S
TUFUICovCisjZGVmaW5lIEVHTF9OT19URVhUVVJFCQkJMHgzMDVDCisjZGVmaW5lIEVHTF9URVhU
VVJFX1JHQgkJCTB4MzA1RAorI2RlZmluZSBFR0xfVEVYVFVSRV9SR0JBCQkweDMwNUUKKyNkZWZp
bmUgRUdMX1RFWFRVUkVfMkQJCQkweDMwNUYKKworLyogQ29uZmlnIGF0dHJpYnV0ZSBtYXNrIGJp
dHMgKi8KKyNkZWZpbmUgRUdMX1BCVUZGRVJfQklUCQkJMHgwMDAxCS8qIEVHTF9TVVJGQUNFX1RZ
UEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9QSVhNQVBfQklUCQkJMHgwMDAyCS8qIEVHTF9T
VVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9XSU5ET1dfQklUCQkJMHgwMDA0
CS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9WR19DT0xPUlNQ
QUNFX0xJTkVBUl9CSVQJMHgwMDIwCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisj
ZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFX0JJVAkweDAwNDAJLyogRUdMX1NVUkZBQ0Vf
VFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09MVkVfQk9YX0JJ
VCAweDAyMDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1NX
QVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCAweDA0MDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNr
IGJpdHMgKi8KKworI2RlZmluZSBFR0xfT1BFTkdMX0VTX0JJVAkJMHgwMDAxCS8qIEVHTF9SRU5E
RVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9PUEVOVkdfQklUCQkJMHgwMDAy
CS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9PUEVOR0xf
RVMyX0JJVAkJMHgwMDA0CS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBiaXRzICovCisjZGVm
aW5lIEVHTF9PUEVOR0xfQklUCQkJMHgwMDA4CS8qIEVHTF9SRU5ERVJBQkxFX1RZUEUgbWFzayBi
aXRzICovCisKKy8qIFF1ZXJ5U3RyaW5nIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX1ZFTkRPUgkJ
CTB4MzA1MworI2RlZmluZSBFR0xfVkVSU0lPTgkJCTB4MzA1NAorI2RlZmluZSBFR0xfRVhURU5T
SU9OUwkJCTB4MzA1NQorI2RlZmluZSBFR0xfQ0xJRU5UX0FQSVMJCQkweDMwOEQKKworLyogUXVl
cnlTdXJmYWNlIC8gU3VyZmFjZUF0dHJpYiAvIENyZWF0ZVBidWZmZXJTdXJmYWNlIHRhcmdldHMg
Ki8KKyNkZWZpbmUgRUdMX0hFSUdIVAkJCTB4MzA1NgorI2RlZmluZSBFR0xfV0lEVEgJCQkweDMw
NTcKKyNkZWZpbmUgRUdMX0xBUkdFU1RfUEJVRkZFUgkJMHgzMDU4CisjZGVmaW5lIEVHTF9URVhU
VVJFX0ZPUk1BVAkJMHgzMDgwCisjZGVmaW5lIEVHTF9URVhUVVJFX1RBUkdFVAkJMHgzMDgxCisj
ZGVmaW5lIEVHTF9NSVBNQVBfVEVYVFVSRQkJMHgzMDgyCisjZGVmaW5lIEVHTF9NSVBNQVBfTEVW
RUwJCTB4MzA4MworI2RlZmluZSBFR0xfUkVOREVSX0JVRkZFUgkJMHgzMDg2CisjZGVmaW5lIEVH
TF9WR19DT0xPUlNQQUNFCQkweDMwODcKKyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVAkJMHgz
MDg4CisjZGVmaW5lIEVHTF9IT1JJWk9OVEFMX1JFU09MVVRJT04JMHgzMDkwCisjZGVmaW5lIEVH
TF9WRVJUSUNBTF9SRVNPTFVUSU9OCQkweDMwOTEKKyNkZWZpbmUgRUdMX1BJWEVMX0FTUEVDVF9S
QVRJTwkJMHgzMDkyCisjZGVmaW5lIEVHTF9TV0FQX0JFSEFWSU9SCQkweDMwOTMKKyNkZWZpbmUg
RUdMX01VTFRJU0FNUExFX1JFU09MVkUJCTB4MzA5OQorCisvKiBFR0xfUkVOREVSX0JVRkZFUiB2
YWx1ZXMgLyBCaW5kVGV4SW1hZ2UgLyBSZWxlYXNlVGV4SW1hZ2UgYnVmZmVyIHRhcmdldHMgKi8K
KyNkZWZpbmUgRUdMX0JBQ0tfQlVGRkVSCQkJMHgzMDg0CisjZGVmaW5lIEVHTF9TSU5HTEVfQlVG
RkVSCQkweDMwODUKKworLyogT3BlblZHIGNvbG9yIHNwYWNlcyAqLworI2RlZmluZSBFR0xfVkdf
Q09MT1JTUEFDRV9zUkdCCQkweDMwODkJLyogRUdMX1ZHX0NPTE9SU1BBQ0UgdmFsdWUgKi8KKyNk
ZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSCTB4MzA4QQkvKiBFR0xfVkdfQ09MT1JTUEFD
RSB2YWx1ZSAqLworCisvKiBPcGVuVkcgYWxwaGEgZm9ybWF0cyAqLworI2RlZmluZSBFR0xfVkdf
QUxQSEFfRk9STUFUX05PTlBSRQkweDMwOEIJLyogRUdMX0FMUEhBX0ZPUk1BVCB2YWx1ZSAqLwor
I2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRQkJMHgzMDhDCS8qIEVHTF9BTFBIQV9GT1JN
QVQgdmFsdWUgKi8KKworLyogQ29uc3RhbnQgc2NhbGUgZmFjdG9yIGJ5IHdoaWNoIGZyYWN0aW9u
YWwgZGlzcGxheSByZXNvbHV0aW9ucyAmCisgKiBhc3BlY3QgcmF0aW8gYXJlIHNjYWxlZCB3aGVu
IHF1ZXJpZWQgYXMgaW50ZWdlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgRUdMX0RJU1BMQVlfU0NB
TElORwkJMTAwMDAKKworLyogVW5rbm93biBkaXNwbGF5IHJlc29sdXRpb24vYXNwZWN0IHJhdGlv
ICovCisjZGVmaW5lIEVHTF9VTktOT1dOCQkJKChFR0xpbnQpLTEpCisKKy8qIEJhY2sgYnVmZmVy
IHN3YXAgYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9CVUZGRVJfUFJFU0VSVkVECQkweDMwOTQJ
LyogRUdMX1NXQVBfQkVIQVZJT1IgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0JVRkZFUl9ERVNUUk9Z
RUQJCTB4MzA5NQkvKiBFR0xfU1dBUF9CRUhBVklPUiB2YWx1ZSAqLworCisvKiBDcmVhdGVQYnVm
ZmVyRnJvbUNsaWVudEJ1ZmZlciBidWZmZXIgdHlwZXMgKi8KKyNkZWZpbmUgRUdMX09QRU5WR19J
TUFHRQkJMHgzMDk2CisKKy8qIFF1ZXJ5Q29udGV4dCB0YXJnZXRzICovCisjZGVmaW5lIEVHTF9D
T05URVhUX0NMSUVOVF9UWVBFCQkweDMwOTcKKworLyogQ3JlYXRlQ29udGV4dCBhdHRyaWJ1dGVz
ICovCisjZGVmaW5lIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OCTB4MzA5OAorCisvKiBNdWx0
aXNhbXBsZSByZXNvbHV0aW9uIGJlaGF2aW9ycyAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVf
UkVTT0xWRV9ERUZBVUxUIDB4MzA5QQkvKiBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRSB2YWx1ZSAq
LworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRV9CT1gJMHgzMDlCCS8qIEVHTF9NVUxU
SVNBTVBMRV9SRVNPTFZFIHZhbHVlICovCisKKy8qIEJpbmRBUEkvUXVlcnlBUEkgdGFyZ2V0cyAq
LworI2RlZmluZSBFR0xfT1BFTkdMX0VTX0FQSQkJMHgzMEEwCisjZGVmaW5lIEVHTF9PUEVOVkdf
QVBJCQkJMHgzMEExCisjZGVmaW5lIEVHTF9PUEVOR0xfQVBJCQkJMHgzMEEyCisKKy8qIEdldEN1
cnJlbnRTdXJmYWNlIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0RSQVcJCQkweDMwNTkKKyNkZWZp
bmUgRUdMX1JFQUQJCQkweDMwNUEKKworLyogV2FpdE5hdGl2ZSBlbmdpbmVzICovCisjZGVmaW5l
IEVHTF9DT1JFX05BVElWRV9FTkdJTkUJCTB4MzA1QgorCisvKiBFR0wgMS4yIHRva2VucyByZW5h
bWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICovCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNF
CQkJRUdMX1ZHX0NPTE9SU1BBQ0UKKyNkZWZpbmUgRUdMX0FMUEhBX0ZPUk1BVAkJRUdMX1ZHX0FM
UEhBX0ZPUk1BVAorI2RlZmluZSBFR0xfQ09MT1JTUEFDRV9zUkdCCQlFR0xfVkdfQ09MT1JTUEFD
RV9zUkdCCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFX0xJTkVBUgkJRUdMX1ZHX0NPTE9SU1BBQ0Vf
TElORUFSCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRfTk9OUFJFCQlFR0xfVkdfQUxQSEFfRk9S
TUFUX05PTlBSRQorI2RlZmluZSBFR0xfQUxQSEFfRk9STUFUX1BSRQkJRUdMX1ZHX0FMUEhBX0ZP
Uk1BVF9QUkUKKworLyogRUdMIGV4dGVuc2lvbnMgbXVzdCByZXF1ZXN0IGVudW0gYmxvY2tzIGZy
b20gdGhlIEtocm9ub3MKKyAqIEFQSSBSZWdpc3RyYXIsIHdobyBtYWludGFpbnMgdGhlIGVudW1l
cmFudCByZWdpc3RyeS4gU3VibWl0CisgKiBhIGJ1ZyBpbiBLaHJvbm9zIEJ1Z3ppbGxhIGFnYWlu
c3QgdGFzayAiUmVnaXN0cnkiLgorICovCisKKworCisvKiBFR0wgRnVuY3Rpb25zICovCisKK0VH
TEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsR2V0RXJyb3Iodm9pZCk7CisKK0VHTEFQSSBFR0xE
aXNwbGF5IEVHTEFQSUVOVFJZIGVnbEdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlz
cGxheV9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xJbml0aWFsaXplKEVH
TERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xpbnQgKm1pbm9yKTsKK0VHTEFQSSBFR0xC
b29sZWFuIEVHTEFQSUVOVFJZIGVnbFRlcm1pbmF0ZShFR0xEaXNwbGF5IGRweSk7CisKK0VHTEFQ
SSBjb25zdCBjaGFyICogRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHks
IEVHTGludCBuYW1lKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsR2V0Q29u
ZmlncyhFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnICpjb25maWdzLAorCQkJIEVHTGludCBjb25m
aWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwgY29uc3QgRUdMaW50ICphdHRyaWJf
bGlzdCwKKwkJCSAgIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLAorCQkJ
ICAgRUdMaW50ICpudW1fY29uZmlnKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKKwkJCSAg
ICAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCitFR0xBUEkgRUdMU3VyZmFj
ZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xD
b25maWcgY29uZmlnLAorCQkJCSAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4sCisJCQkJICBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVn
bENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAor
CQkJCSAgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTFN1cmZhY2UgRUdM
QVBJRU5UUlkgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmln
IGNvbmZpZywKKwkJCQkgIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwLAorCQkJCSAgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xE
ZXN0cm95U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3VyZmFjZShFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEJpbmRBUEkoRUdMZW51bSBh
cGkpOworRUdMQVBJIEVHTGVudW0gRUdMQVBJRU5UUlkgZWdsUXVlcnlBUEkodm9pZCk7CisKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdhaXRDbGllbnQodm9pZCk7CisKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFJlbGVhc2VUaHJlYWQodm9pZCk7CisKK0VHTEFQ
SSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVy
KAorCSAgICAgIEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZl
ciBidWZmZXIsCisJICAgICAgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJf
bGlzdCk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN1cmZhY2VBdHRyaWIo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwKKwkJCSAgICBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQmlu
ZFRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZm
ZXIpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUmVsZWFzZVRleEltYWdlKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpOworCisKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3YXBJbnRlcnZhbChFR0xEaXNwbGF5IGRw
eSwgRUdMaW50IGludGVydmFsKTsKKworCitFR0xBUEkgRUdMQ29udGV4dCBFR0xBUElFTlRSWSBl
Z2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJICAg
IEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwKKwkJCSAgICBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lDb250ZXh0KEVH
TERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LAorCQkJ
ICBFR0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4KTsKKworRUdMQVBJIEVHTENvbnRleHQg
RUdMQVBJRU5UUlkgZWdsR2V0Q3VycmVudENvbnRleHQodm9pZCk7CitFR0xBUEkgRUdMU3VyZmFj
ZSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xpbnQgcmVhZGRyYXcpOworRUdM
QVBJIEVHTERpc3BsYXkgRUdMQVBJRU5UUlkgZWdsR2V0Q3VycmVudERpc3BsYXkodm9pZCk7CitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeUNvbnRleHQoRUdMRGlzcGxheSBk
cHksIEVHTENvbnRleHQgY3R4LAorCQkJICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSk7CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdhaXRHTCh2b2lkKTsKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFdhaXROYXRpdmUoRUdMaW50IGVuZ2luZSk7
CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5
IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZ
IGVnbENvcHlCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsCisJCQkg
IEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0KTsKKworLyogVGhpcyBpcyBhIGdlbmVyaWMgZnVu
Y3Rpb24gcG9pbnRlciB0eXBlLCB3aG9zZSBuYW1lIGluZGljYXRlcyBpdCBtdXN0CisgKiBiZSBj
YXN0IHRvIHRoZSBwcm9wZXIgdHlwZSAqYW5kIGNhbGxpbmcgY29udmVudGlvbiogYmVmb3JlIHVz
ZS4KKyAqLwordHlwZWRlZiB2b2lkICgqX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSkodm9pZCk7CisKKy8qIE5vdywgZGVmaW5lIGVnbEdldFByb2NBZGRyZXNzIHVzaW5n
IHRoZSBnZW5lcmljIGZ1bmN0aW9uIHB0ci4gdHlwZSAqLworRUdMQVBJIF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgRUdMQVBJRU5UUlkKKyAgICAgICBlZ2xHZXRQcm9j
QWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmCisKKyNlbmRpZiAvKiBfX2VnbF9oXyAqLwpJbmRleDogQU5HTEUvaW5jbHVkZS9FR0wv
ZWdsZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMjIgQEAKKyNpZm5kZWYgX19lZ2xleHRfaF8KKyNkZWZpbmUgX19lZ2xleHRfaF8KKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorKiogQ29weXJp
Z2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp
bmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVy
aWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxz
LCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVy
bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg
cG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
CisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO
RCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD
T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ
VEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg
TUFURVJJQUxTLgorKi8KKworI2luY2x1ZGUgPEVHTC9lZ2xwbGF0Zm9ybS5oPgorCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
KworLyogSGVhZGVyIGZpbGUgdmVyc2lvbiBudW1iZXIgKi8KKy8qIEN1cnJlbnQgdmVyc2lvbiBh
dCBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2VnbC8gKi8KKy8qICRSZXZpc2lvbjog
MTA3OTUgJCBvbiAkRGF0ZTogMjAxMC0wMy0xOSAxNzowNDoxNyAtMDcwMCAoRnJpLCAxOSBNYXIg
MjAxMCkgJCAqLworI2RlZmluZSBFR0xfRUdMRVhUX1ZFUlNJT04gNQorCisjaWZuZGVmIEVHTF9L
SFJfY29uZmlnX2F0dHJpYnMKKyNkZWZpbmUgRUdMX0tIUl9jb25maWdfYXR0cmlicyAxCisjZGVm
aW5lIEVHTF9DT05GT1JNQU5UX0tIUgkJCTB4MzA0MgkvKiBFR0xDb25maWcgYXR0cmlidXRlICov
CisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUl9CSVRfS0hSCTB4MDAyMAkvKiBFR0xf
U1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJF
X0JJVF9LSFIJCTB4MDA0MAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX2xvY2tfc3VyZmFjZQorI2RlZmluZSBFR0xfS0hSX2xvY2tfc3Vy
ZmFjZSAxCisjZGVmaW5lIEVHTF9SRUFEX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDAxCS8qIEVHTF9M
T0NLX1VTQUdFX0hJTlRfS0hSIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9XUklURV9TVVJGQUNF
X0JJVF9LSFIJCTB4MDAwMgkvKiBFR0xfTE9DS19VU0FHRV9ISU5UX0tIUiBiaXRmaWVsZCAqLwor
I2RlZmluZSBFR0xfTE9DS19TVVJGQUNFX0JJVF9LSFIJCTB4MDA4MAkvKiBFR0xfU1VSRkFDRV9U
WVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9PUFRJTUFMX0ZPUk1BVF9CSVRfS0hSCQkweDAx
MDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfTUFUQ0hfRk9S
TUFUX0tIUgkJCTB4MzA0MwkvKiBFR0xDb25maWcgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9G
T1JNQVRfUkdCXzU2NV9FWEFDVF9LSFIJCTB4MzBDMAkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2
YWx1ZSAqLworI2RlZmluZSBFR0xfRk9STUFUX1JHQl81NjVfS0hSCQkJMHgzMEMxCS8qIEVHTF9N
QVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCQV84ODg4X0VY
QUNUX0tIUgkJMHgzMEMyCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5l
IEVHTF9GT1JNQVRfUkdCQV84ODg4X0tIUgkJMHgzMEMzCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hS
IHZhbHVlICovCisjZGVmaW5lIEVHTF9NQVBfUFJFU0VSVkVfUElYRUxTX0tIUgkJMHgzMEM0CS8q
IGVnbExvY2tTdXJmYWNlS0hSIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfTE9DS19VU0FHRV9I
SU5UX0tIUgkJCTB4MzBDNQkvKiBlZ2xMb2NrU3VyZmFjZUtIUiBhdHRyaWJ1dGUgKi8KKyNkZWZp
bmUgRUdMX0JJVE1BUF9QT0lOVEVSX0tIUgkJCTB4MzBDNgkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0
cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElUQ0hfS0hSCQkJMHgzMEM3CS8qIGVnbFF1
ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9PUklHSU5fS0hSCQkJ
MHgzMEM4CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1B
UF9QSVhFTF9SRURfT0ZGU0VUX0tIUgkJMHgzMEM5CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1
dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9HUkVFTl9PRkZTRVRfS0hSCTB4MzBDQQkv
KiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxf
QkxVRV9PRkZTRVRfS0hSCTB4MzBDQgkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisj
ZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfQUxQSEFfT0ZGU0VUX0tIUgkweDMwQ0MJLyogZWdsUXVl
cnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0xVTUlOQU5D
RV9PRkZTRVRfS0hSCTB4MzBDRAkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVm
aW5lIEVHTF9MT1dFUl9MRUZUX0tIUgkJCTB4MzBDRQkvKiBFR0xfQklUTUFQX09SSUdJTl9LSFIg
dmFsdWUgKi8KKyNkZWZpbmUgRUdMX1VQUEVSX0xFRlRfS0hSCQkJMHgzMENGCS8qIEVHTF9CSVRN
QVBfT1JJR0lOX0tIUiB2YWx1ZSAqLworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsTG9ja1N1cmZhY2VLSFIgKEVHTERpc3BsYXkg
ZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFVubG9ja1N1cmZhY2VLSFIgKEVHTERp
c3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTExP
Q0tTVVJGQUNFS0hSUFJPQykgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNl
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFVOTE9DS1NVUkZBQ0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkaXNwbGF5LCBF
R0xTdXJmYWNlIHN1cmZhY2UpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9pbWFnZQorI2Rl
ZmluZSBFR0xfS0hSX2ltYWdlIDEKKyNkZWZpbmUgRUdMX05BVElWRV9QSVhNQVBfS0hSCQkJMHgz
MEIwCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwordHlwZWRlZiB2b2lkICpFR0xJbWFn
ZUtIUjsKKyNkZWZpbmUgRUdMX05PX0lNQUdFX0tIUgkJCSgoRUdMSW1hZ2VLSFIpMCkKKyNpZmRl
ZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xJbWFnZUtIUiBFR0xBUElFTlRSWSBl
Z2xDcmVhdGVJbWFnZUtIUiAoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xlbnVt
IHRhcmdldCwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95SW1hZ2VLSFIgKEVH
TERpc3BsYXkgZHB5LCBFR0xJbWFnZUtIUiBpbWFnZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9Q
Uk9UT1RZUEVTICovCit0eXBlZGVmIEVHTEltYWdlS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JF
QVRFSU1BR0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xlbnVt
IHRhcmdldCwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xERVNUUk9ZSU1BR0VL
SFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTEltYWdlS0hSIGltYWdlKTsKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9LSFJfdmdfcGFyZW50X2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfdmdfcGFyZW50
X2ltYWdlIDEKKyNkZWZpbmUgRUdMX1ZHX1BBUkVOVF9JTUFHRV9LSFIJCQkweDMwQkEJLyogZWds
Q3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3Rl
eHR1cmVfMkRfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9nbF90ZXh0dXJlXzJEX2ltYWdlIDEKKyNk
ZWZpbmUgRUdMX0dMX1RFWFRVUkVfMkRfS0hSCQkJMHgzMEIxCS8qIGVnbENyZWF0ZUltYWdlS0hS
IHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9MRVZFTF9LSFIJCTB4MzBCQwkvKiBl
Z2xDcmVhdGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJf
Z2xfdGV4dHVyZV9jdWJlbWFwX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfdGV4dHVyZV9jdWJl
bWFwX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWF9L
SFIJMHgzMEIzCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YX0tIUgkweDMwQjQJLyogZWdsQ3JlYXRlSW1hZ2VL
SFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lf
S0hSCTB4MzBCNQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWV9LSFIJMHgzMEI2CS8qIGVnbENyZWF0ZUltYWdl
S0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
X0tIUgkweDMwQjcJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9H
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pfS0hSCTB4MzBCOAkvKiBlZ2xDcmVhdGVJbWFn
ZUtIUiB0YXJnZXQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9p
bWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfM0RfaW1hZ2UgMQorI2RlZmluZSBFR0xf
R0xfVEVYVFVSRV8zRF9LSFIJCQkweDMwQjIJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICov
CisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX1pPRkZTRVRfS0hSCQkweDMwQkQJLyogZWdsQ3JlYXRl
SW1hZ2VLSFIgYXR0cmlidXRlICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3JlbmRl
cmJ1ZmZlcl9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3JlbmRlcmJ1ZmZlcl9pbWFnZSAxCisj
ZGVmaW5lIEVHTF9HTF9SRU5ERVJCVUZGRVJfS0hSCQkJMHgzMEI5CS8qIGVnbENyZWF0ZUltYWdl
S0hSIHRhcmdldCAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9yZXVzYWJsZV9zeW5jCisj
ZGVmaW5lIEVHTF9LSFJfcmV1c2FibGVfc3luYyAxCisKK3R5cGVkZWYgdm9pZCogRUdMU3luY0tI
UjsKK3R5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVLSFI7CisKKyNk
ZWZpbmUgRUdMX1NZTkNfU1RBVFVTX0tIUgkJCTB4MzBGMQorI2RlZmluZSBFR0xfU0lHTkFMRURf
S0hSCQkJMHgzMEYyCisjZGVmaW5lIEVHTF9VTlNJR05BTEVEX0tIUgkJCTB4MzBGMworI2RlZmlu
ZSBFR0xfVElNRU9VVF9FWFBJUkVEX0tIUgkJCTB4MzBGNQorI2RlZmluZSBFR0xfQ09ORElUSU9O
X1NBVElTRklFRF9LSFIJCTB4MzBGNgorI2RlZmluZSBFR0xfU1lOQ19UWVBFX0tIUgkJCTB4MzBG
NworI2RlZmluZSBFR0xfU1lOQ19SRVVTQUJMRV9LSFIJCQkweDMwRkEKKyNkZWZpbmUgRUdMX1NZ
TkNfRkxVU0hfQ09NTUFORFNfQklUX0tIUgkJMHgwMDAxCS8qIGVnbENsaWVudFdhaXRTeW5jS0hS
IDxmbGFncz4gYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX0ZPUkVWRVJfS0hSCQkJCTB4RkZGRkZG
RkZGRkZGRkZGRnVsbAorI2RlZmluZSBFR0xfTk9fU1lOQ19LSFIJCQkJKChFR0xTeW5jS0hSKTAp
CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3luY0tIUiBFR0xBUElF
TlRSWSBlZ2xDcmVhdGVTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIHR5cGUsIGNvbnN0
IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWds
RGVzdHJveVN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYyk7CitFR0xBUEkg
RUdMaW50IEVHTEFQSUVOVFJZIGVnbENsaWVudFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBF
R0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZUtIUiB0aW1lb3V0KTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNLSFIoRUdMRGlzcGxheSBkcHks
IEVHTFN5bmNLSFIgc3luYywgRUdMZW51bSBtb2RlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbEdldFN5bmNBdHRyaWJLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3lu
YywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VHTEVY
VF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN5bmNLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xD
UkVBVEVTWU5DS0hSUFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIHR5cGUsIGNvbnN0IEVH
TGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMREVTVFJPWVNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYyk7
Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTENMSUVOVFdBSVRTWU5DS0hSUFJP
QykgKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGlt
ZUtIUiB0aW1lb3V0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNJ
R05BTFNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMZW51
bSBtb2RlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNZTkNB
VFRSSUJLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGF0
dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdl
X2Jhc2UKKyNkZWZpbmUgRUdMX0tIUl9pbWFnZV9iYXNlIDEKKy8qIE1vc3QgaW50ZXJmYWNlcyBk
ZWZpbmVkIGJ5IEVHTF9LSFJfaW1hZ2VfcGl4bWFwIGFib3ZlICovCisjZGVmaW5lIEVHTF9JTUFH
RV9QUkVTRVJWRURfS0hSCQkJMHgzMEQyCS8qIGVnbENyZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAq
LworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9pbWFnZV9waXhtYXAKKyNkZWZpbmUgRUdMX0tI
Ul9pbWFnZV9waXhtYXAgMQorLyogSW50ZXJmYWNlcyBkZWZpbmVkIGJ5IEVHTF9LSFJfaW1hZ2Ug
YWJvdmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9JTUdfY29udGV4dF9wcmlvcml0eQorI2Rl
ZmluZSBFR0xfSU1HX2NvbnRleHRfcHJpb3JpdHkgMQorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklP
UklUWV9MRVZFTF9JTUcJCTB4MzEwMAorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9ISUdI
X0lNRwkJMHgzMTAxCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX01FRElVTV9JTUcJCTB4
MzEwMgorI2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9MT1dfSU1HCQkweDMxMDMKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9OVl9jb3ZlcmFnZV9zYW1wbGUKKyNkZWZpbmUgRUdMX05WX2NvdmVy
YWdlX3NhbXBsZSAxCisjZGVmaW5lIEVHTF9DT1ZFUkFHRV9CVUZGRVJTX05WIDB4MzBFMAorI2Rl
ZmluZSBFR0xfQ09WRVJBR0VfU0FNUExFU19OViAweDMwRTEKKyNlbmRpZgorCisjaWZuZGVmIEVH
TF9OVl9kZXB0aF9ub25saW5lYXIKKyNkZWZpbmUgRUdMX05WX2RlcHRoX25vbmxpbmVhciAxCisj
ZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OViAweDMwRTIKKyNkZWZpbmUgRUdMX0RFUFRIX0VO
Q09ESU5HX05PTkVfTlYgMAorI2RlZmluZSBFR0xfREVQVEhfRU5DT0RJTkdfTk9OTElORUFSX05W
IDB4MzBFMworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WX3N5bmMKKyNkZWZpbmUgRUdMX05WX3N5
bmMgMQorI2RlZmluZSBFR0xfU1lOQ19QUklPUl9DT01NQU5EU19DT01QTEVURV9OVgkweDMwRTYK
KyNkZWZpbmUgRUdMX1NZTkNfU1RBVFVTX05WCQkJMHgzMEU3CisjZGVmaW5lIEVHTF9TSUdOQUxF
RF9OVgkJCQkweDMwRTgKKyNkZWZpbmUgRUdMX1VOU0lHTkFMRURfTlYJCQkweDMwRTkKKyNkZWZp
bmUgRUdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUX05WCQkweDAwMDEKKyNkZWZpbmUgRUdMX0ZP
UkVWRVJfTlYJCQkJMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisjZGVmaW5lIEVHTF9BTFJFQURZX1NJ
R05BTEVEX05WCQkJMHgzMEVBCisjZGVmaW5lIEVHTF9USU1FT1VUX0VYUElSRURfTlYJCQkweDMw
RUIKKyNkZWZpbmUgRUdMX0NPTkRJVElPTl9TQVRJU0ZJRURfTlYJCTB4MzBFQworI2RlZmluZSBF
R0xfU1lOQ19UWVBFX05WCQkJMHgzMEVECisjZGVmaW5lIEVHTF9TWU5DX0NPTkRJVElPTl9OVgkJ
CTB4MzBFRQorI2RlZmluZSBFR0xfU1lOQ19GRU5DRV9OVgkJCTB4MzBFRgorI2RlZmluZSBFR0xf
Tk9fU1lOQ19OVgkJCQkoKEVHTFN5bmNOVikwKQordHlwZWRlZiB2b2lkKiBFR0xTeW5jTlY7Cit0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBFR0xUaW1lTlY7CisjaWZkZWYgRUdMX0VHTEVYVF9Q
Uk9UT1RZUEVTCitFR0xTeW5jTlYgZWdsQ3JlYXRlRmVuY2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5
LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xCb29s
ZWFuIGVnbERlc3Ryb3lTeW5jTlYgKEVHTFN5bmNOViBzeW5jKTsKK0VHTEJvb2xlYW4gZWdsRmVu
Y2VOViAoRUdMU3luY05WIHN5bmMpOworRUdMaW50IGVnbENsaWVudFdhaXRTeW5jTlYgKEVHTFN5
bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK0VHTEJvb2xlYW4g
ZWdsU2lnbmFsU3luY05WIChFR0xTeW5jTlYgc3luYywgRUdMZW51bSBtb2RlKTsKK0VHTEJvb2xl
YW4gZWdsR2V0U3luY0F0dHJpYk5WIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBl
ZGVmIEVHTFN5bmNOViAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURUZFTkNFU1lOQ05WUFJPQykg
KEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJf
bGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xERVNUUk9ZU1lO
Q05WUFJPQykgKEVHTFN5bmNOViBzeW5jKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5U
UllQIFBGTkVHTEZFTkNFTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwordHlwZWRlZiBFR0xpbnQg
KEVHTEFQSUVOVFJZUCBQRk5FR0xDTElFTlRXQUlUU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5j
LCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAo
RUdMQVBJRU5UUllQIFBGTkVHTFNJR05BTFNZTkNOVlBST0MpIChFR0xTeW5jTlYgc3luYywgRUdM
ZW51bSBtb2RlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNZ
TkNBVFRSSUJOVlBST0MpIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50
ICp2YWx1ZSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vu
ZGlmCkluZGV4OiBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9p
bmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAor
I2lmbmRlZiBfX2VnbHBsYXRmb3JtX2hfCisjZGVmaW5lIF9fZWdscGxhdGZvcm1faF8KKworLyoK
KyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisq
KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl
cnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lh
dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGlu
IHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0
IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp
c2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl
IE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlh
bHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl
cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1
YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFM
UyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoq
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS
UkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO
R1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIFBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFu
ZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKKyAqICRSZXZpc2lvbjogOTcyNCAkIG9uICREYXRlOiAy
MDA5LTEyLTAyIDAyOjA1OjMzIC0wODAwIChXZWQsIDAyIERlYyAyMDA5KSAkCisgKgorICogQWRv
cHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVp
ciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNh
dGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAorICogdGhleSBjYW4gYmUgaW5jbHVk
ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQgY2hhbmdl
cworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxsYSAoaHR0
cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmlsaW5nIGEgYnVnIGFnYWluc3QgcHJv
ZHVjdCAiRUdMIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5jbHVkZSA8S0hSL2to
cnBsYXRmb3JtLmg+CisKKy8qIE1hY3JvcyB1c2VkIGluIEVHTCBmdW5jdGlvbiBwcm90b3R5cGUg
ZGVjbGFyYXRpb25zLgorICoKKyAqIEVHTCBmdW5jdGlvbnMgc2hvdWxkIGJlIHByb3RvdHlwZWQg
YXM6CisgKgorICogRUdMQVBJIHJldHVybi10eXBlIEVHTEFQSUVOVFJZIGVnbEZ1bmN0aW9uKGFy
Z3VtZW50cyk7CisgKiB0eXBlZGVmIHJldHVybi10eXBlIChFWFBBUElFTlRSWVAgUEZORUdMRlVO
Q1RJT05QUk9DKSAoYXJndW1lbnRzKTsKKyAqCisgKiBLSFJPTk9TX0FQSUNBTEwgYW5kIEtIUk9O
T1NfQVBJRU5UUlkgYXJlIGRlZmluZWQgaW4gS0hSL2tocnBsYXRmb3JtLmgKKyAqLworCisjaWZu
ZGVmIEVHTEFQSQorI2RlZmluZSBFR0xBUEkgS0hST05PU19BUElDQUxMCisjZW5kaWYKKworI2lm
bmRlZiBFR0xBUElFTlRSWQorI2RlZmluZSBFR0xBUElFTlRSWSAgS0hST05PU19BUElFTlRSWQor
I2VuZGlmCisjZGVmaW5lIEVHTEFQSUVOVFJZUCBFR0xBUElFTlRSWSoKKworLyogVGhlIHR5cGVz
IE5hdGl2ZURpc3BsYXlUeXBlLCBOYXRpdmVXaW5kb3dUeXBlLCBhbmQgTmF0aXZlUGl4bWFwVHlw
ZQorICogYXJlIGFsaWFzZXMgb2Ygd2luZG93LXN5c3RlbS1kZXBlbmRlbnQgdHlwZXMsIHN1Y2gg
YXMgWCBEaXNwbGF5ICogb3IKKyAqIFdpbmRvd3MgRGV2aWNlIENvbnRleHQuIFRoZXkgbXVzdCBi
ZSBkZWZpbmVkIGluIHBsYXRmb3JtLXNwZWNpZmljCisgKiBjb2RlIGJlbG93LiBUaGUgRUdMLXBy
ZWZpeGVkIHZlcnNpb25zIG9mIE5hdGl2ZSpUeXBlIGFyZSB0aGUgc2FtZQorICogdHlwZXMsIHJl
bmFtZWQgaW4gRUdMIDEuMyBzbyBhbGwgdHlwZXMgaW4gdGhlIEFQSSBzdGFydCB3aXRoICJFR0wi
LgorICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1ZDMzJfXykgJiYgIWRl
ZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykgLyogV2luMzIg
YW5kIFdpbkNFICovCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJf
TEVBTl9BTkRfTUVBTiAxCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3R5cGVkZWYg
SERDICAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgSEJJVE1BUCBFR0xOYXRpdmVQ
aXhtYXBUeXBlOwordHlwZWRlZiBIV05EICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7CisKKyNlbGlm
IGRlZmluZWQoX19XSU5TQ1dfXykgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSAgLyogU3ltYmlh
biAqLworCit0eXBlZGVmIGludCAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiB2b2lk
ICpFR0xOYXRpdmVXaW5kb3dUeXBlOwordHlwZWRlZiB2b2lkICpFR0xOYXRpdmVQaXhtYXBUeXBl
OworCisjZWxpZiBkZWZpbmVkKF9fdW5peF9fKQorCisvKiBYMTEgKHRlbnRhdGl2ZSkgICovCisj
aW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKwordHlwZWRlZiBE
aXNwbGF5ICpFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgUGl4bWFwICAgRUdMTmF0aXZl
UGl4bWFwVHlwZTsKK3R5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlwZTsKKworI2Vs
c2UKKyNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6ZWQiCisjZW5kaWYKKworLyogRUdMIDEu
MiB0eXBlcywgcmVuYW1lZCBmb3IgY29uc2lzdGVuY3kgaW4gRUdMIDEuMyAqLwordHlwZWRlZiBF
R0xOYXRpdmVEaXNwbGF5VHlwZSBOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgRUdMTmF0aXZl
UGl4bWFwVHlwZSAgTmF0aXZlUGl4bWFwVHlwZTsKK3R5cGVkZWYgRUdMTmF0aXZlV2luZG93VHlw
ZSAgTmF0aXZlV2luZG93VHlwZTsKKworCisvKiBEZWZpbmUgRUdMaW50LiBUaGlzIG11c3QgYmUg
YSBzaWduZWQgaW50ZWdyYWwgdHlwZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbgorICogYWxsIGxl
Z2FsIGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzIHBhc3NlZCBpbnRvIGFuZCBvdXQgb2YgRUdM
LCB3aGV0aGVyCisgKiB0aGVpciB0eXBlIGlzIGJvb2xlYW4sIGJpdG1hc2ssIGVudW1lcmFudCAo
c3ltYm9saWMgY29uc3RhbnQpLCBpbnRlZ2VyLAorICogaGFuZGxlLCBvciBvdGhlci4gIFdoaWxl
IGluIGdlbmVyYWwgYSAzMi1iaXQgaW50ZWdlciB3aWxsIHN1ZmZpY2UsIGlmCisgKiBoYW5kbGVz
IGFyZSA2NCBiaXQgdHlwZXMsIHRoZW4gRUdMaW50IHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc2ln
bmVkIDY0LWJpdAorICogaW50ZWdlciB0eXBlLgorICovCit0eXBlZGVmIGtocm9ub3NfaW50MzJf
dCBFR0xpbnQ7CisKKyNlbmRpZiAvKiBfX2VnbHBsYXRmb3JtX2ggKi8KSW5kZXg6IEFOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjIxIEBACisjaWZuZGVmIF9fZ2wyX2hfCisjZGVmaW5lIF9fZ2wyX2hfCisK
Ky8qICRSZXZpc2lvbjogMTA2MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4
MDAgIyQgKi8KKworI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisg
KiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVC
LyAuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMK
KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHZvaWQgICAgICAgICAgICAgR0x2b2lkOwor
dHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAg
ICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgR0xib29sZWFuOwordHlwZWRlZiB1
bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVmIGtocm9ub3NfaW50OF90ICAgR0xi
eXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hvcnQ7Cit0eXBlZGVmIGludCAgICAg
ICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xzaXplaTsKK3R5cGVk
ZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIEdM
dXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMdWludDsKK3R5cGVkZWYga2hyb25v
c19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdMY2xhbXBmOwor
dHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7CisKKy8qIEdMIHR5cGVzIGZvciBoYW5k
bGluZyBsYXJnZSB2ZXJ0ZXggYnVmZmVyIG9iamVjdHMgKi8KK3R5cGVkZWYga2hyb25vc19pbnRw
dHJfdCBHTGludHB0cjsKK3R5cGVkZWYga2hyb25vc19zc2l6ZV90ICBHTHNpemVpcHRyOworCisv
KiBPcGVuR0wgRVMgY29yZSB2ZXJzaW9ucyAqLworI2RlZmluZSBHTF9FU19WRVJTSU9OXzJfMCAg
ICAgICAgICAgICAgICAgMQorCisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xfREVQ
VEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVG
RkVSX0JJVCAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmlu
ZSBHTF9GQUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9UUlVFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdpbk1vZGUgKi8KKyNkZWZpbmUgR0xf
UE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAg
ICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDA0CisjZGVmaW5lIEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAweDAw
MDUKKyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgIDB4MDAwNgorCisv
KiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGluIEVTMjApICovCisvKiAgICAgIEdMX05F
VkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAgICAgR0xfRVFVQUwgKi8KKy8qICAgICAg
R0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIgKi8KKy8qICAgICAgR0xfTk9URVFVQUwg
Ki8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAgIEdMX0FMV0FZUyAqLworCisvKiBCbGVu
ZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAKKyNkZWZpbmUgR0xfT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgR0xfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBHTF9P
TkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgMHgwMzAxCisjZGVmaW5lIEdMX1NSQ19BTFBI
QSAgICAgICAgICAgICAgICAgICAgICAweDAzMDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19B
TFBIQSAgICAgICAgICAgIDB4MDMwMworI2RlZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAg
ICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgR0xfWkVSTyAqLwor
LyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAg
ICAgIDB4MDMwNgorI2RlZmluZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgMHgw
MzA3CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICAweDAzMDgKKy8q
ICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgKi8K
Ky8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19EU1RfQUxQSEEg
Ki8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdMX0ZVTkNfQUREICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAg
ICAgICAgICAgICAgIDB4ODAwOQorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAg
ICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgIDB4ODgzRAorCisvKiBCbGVuZFN1YnRyYWN0
ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICAweDgwMEEKKyNk
ZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBh
cmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KKyNkZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAg
ICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAgICAg
ICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICAweDgw
Q0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDB4ODBDQgorI2Rl
ZmluZSBHTF9DT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVmaW5lIEdM
X09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAweDgwMDIKKyNkZWZpbmUgR0xfQ09OU1RB
TlRfQUxQSEEgICAgICAgICAgICAgICAgIDB4ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQUxQSEEgICAgICAgMHg4MDA0CisjZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAg
ICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZpbmUgR0xfQVJS
QVlfQlVGRkVSICAgICAgICAgICAgICAgICAgIDB4ODg5MgorI2RlZmluZSBHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUiAgICAgICAgICAgMHg4ODkzCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5E
SU5HICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklO
RElORyAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAg
ICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgIDB4ODhF
NAorI2RlZmluZSBHTF9EWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNk
ZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDB4ODc2NAorI2RlZmluZSBH
TF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VS
UkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgIDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8K
KyNkZWZpbmUgR0xfRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2RlZmlu
ZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA1CisjZGVmaW5lIEdMX0ZS
T05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAq
LworLyogICAgICBHTF9ORVZFUiAqLworLyogICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VR
VUFMICovCisvKiAgICAgIEdMX0xFUVVBTCAqLworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAg
ICAgIEdMX05PVEVRVUFMICovCisvKiAgICAgIEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdB
WVMgKi8KKworLyogRW5hYmxlQ2FwICovCisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAg
ICAgICAgICAgICAweDBERTEKKyNkZWZpbmUgR0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAg
ICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBH
TF9ERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5lIEdMX1NDSVNT
T1JfVEVTVCAgICAgICAgICAgICAgICAgICAweDBDMTEKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTCAgICAgICAgICAgIDB4ODAzNworI2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0UgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAg
ICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05PX0VSUk9SICAgICAg
ICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX0lOVkFMSURfRU5VTSAgICAgICAgICAgICAg
ICAgICAweDA1MDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgIDB4
MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgMHgwNTAyCisj
ZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJv
bnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5lIEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA5MDAKKyNkZWZpbmUgR0xfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAgICAg
ICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAg
ICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDB4ODQ2
RQorI2RlZmluZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgMHgwQjQ1CisjZGVm
aW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAweDBCNDYKKyNkZWZpbmUgR0xf
REVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9X
UklURU1BU0sgICAgICAgICAgICAgICAgMHgwQjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZB
TFVFICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAgICAgICAgICAg
ICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAg
ICAgMHgwQjkxCisjZGVmaW5lIEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICAweDBC
OTIKKyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgIDB4MEI5NAorI2Rl
ZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdM
X1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9SRUYgICAgICAgICAgICAgICAgICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVF
X01BU0sgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5DSUxfV1JJVEVNQVNLICAg
ICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAg
ICAgIDB4ODgwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgMHg4
ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAweDg4MDIKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgIDB4ODgwMworI2RlZmluZSBH
TF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAgICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5D
SUxfQkFDS19WQUxVRV9NQVNLICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNL
X1dSSVRFTUFTSyAgICAgICAgIDB4OENBNQorI2RlZmluZSBHTF9WSUVXUE9SVCAgICAgICAgICAg
ICAgICAgICAgICAgMHgwQkEyCisjZGVmaW5lIEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAg
ICAgICAweDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9S
X0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09MT1JfV1JJVEVN
QVNLICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmluZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAg
ICAgICAgICAgICAgMHgwQ0Y1CisjZGVmaW5lIEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAg
ICAgICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgIDB4
MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgMHgwRDNBCisj
ZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUg
R0xfUkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVF
Tl9CSVRTICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5lIEdMX0JMVUVfQklUUyAg
ICAgICAgICAgICAgICAgICAgICAweDBENTQKKyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAg
ICAgICAgICAgICAgIDB4MEQ1NQorI2RlZmluZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAg
ICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICAw
eDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAgICAgICAgIDB4MkEwMAor
LyogICAgICBHTF9QT0xZR09OX09GRlNFVF9GSUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZG
U0VUX0ZBQ1RPUiAgICAgICAgICAweDgwMzgKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
ICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAgICAgICAg
ICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwQTkKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDB4ODBBQQor
I2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgMHg4MEFCCisKKy8qIEdl
dFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklMVEVSICovCisv
KiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBf
UyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdMX05VTV9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUyAweDg2QTIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFMgICAgIDB4ODZBMworCisvKiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05U
X0NBUkUgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAg
ICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNUICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVS
QVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgMHg4MTkyCisKKy8qIERhdGFUeXBlICovCisjZGVm
aW5lIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDAKKyNkZWZpbmUgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgIDB4MTQwMQorI2RlZmluZSBHTF9TSE9SVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAyCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwNAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAgMHgxNDA1CisjZGVmaW5lIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDYKKyNkZWZpbmUgR0xfRklYRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwQworCisv
KiBQaXhlbEZvcm1hdCAqLworI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQgICAgICAgICAgICAg
ICAgMHgxOTAyCisjZGVmaW5lIEdMX0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5
MDYKKyNkZWZpbmUgR0xfUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNworI2Rl
ZmluZSBHTF9SR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA4CisjZGVmaW5lIEdM
X0xVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICAweDE5MDkKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFX0FMUEhBICAgICAgICAgICAgICAgIDB4MTkwQQorCisvKiBQaXhlbFR5cGUgKi8KKy8qICAg
ICAgR0xfVU5TSUdORURfQllURSAqLworI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
ICAgICAgICAgMHg4MDMzCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAg
ICAweDgwMzQKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDB4ODM2
MworCisvKiBTaGFkZXJzICovCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUiAgICAgICAgICAg
ICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAg
ICAweDhCMzEKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgMHg4
ODY5CisjZGVmaW5lIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDB4OERGQgor
I2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAweDhERkMKKyNkZWZp
bmUgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgMHg4QjRECisjZGVmaW5lIEdM
X01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICAweDg4NzIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgMHg4REZECisjZGVmaW5lIEdMX1NIQURFUl9UWVBFICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2RlZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAg
ICAgICAgICAgICAgICAweDhCODAKKyNkZWZpbmUgR0xfTElOS19TVEFUVVMgICAgICAgICAgICAg
ICAgICAgICAgMHg4QjgyCisjZGVmaW5lIEdMX1ZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAg
ICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICAw
eDhCODUKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgMHg4Qjg2
CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICAgIDB4OEI4NworI2Rl
ZmluZSBHTF9BQ1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICAweDhCODkKKyNkZWZpbmUg
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIICAgICAgMHg4QjhBCisjZGVmaW5lIEdMX1NI
QURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAgICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5U
X1BST0dSQU0gICAgICAgICAgICAgICAgICAweDhCOEQKKworLyogU3RlbmNpbEZ1bmN0aW9uICov
CisjZGVmaW5lIEdMX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZp
bmUgR0xfTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMQorI2RlZmluZSBHTF9F
UVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAyCisjZGVmaW5lIEdMX0xFUVVBTCAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDMKKyNkZWZpbmUgR0xfR1JFQVRFUiAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZSBHTF9OT1RFUVVBTCAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMjA1CisjZGVmaW5lIEdMX0dFUVVBTCAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAyMDYKKyNkZWZpbmUgR0xfQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIw
NworCisvKiBTdGVuY2lsT3AgKi8KKy8qICAgICAgR0xfWkVSTyAqLworI2RlZmluZSBHTF9LRUVQ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAwCisjZGVmaW5lIEdMX1JFUExBQ0UgICAg
ICAgICAgICAgICAgICAgICAgICAweDFFMDEKKyNkZWZpbmUgR0xfSU5DUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MUUwMgorI2RlZmluZSBHTF9ERUNSICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxRTAzCisjZGVmaW5lIEdMX0lOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE1MEEKKyNkZWZpbmUgR0xfSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDB4ODUwNwor
I2RlZmluZSBHTF9ERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgMHg4NTA4CisKKy8qIFN0
cmluZ05hbWUgKi8KKyNkZWZpbmUgR0xfVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MUYwMAorI2RlZmluZSBHTF9SRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAxCisj
ZGVmaW5lIEdMX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAweDFGMDIKKyNkZWZpbmUg
R0xfRVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAgIDB4MUYwMworCisvKiBUZXh0dXJlTWFn
RmlsdGVyICovCisjZGVmaW5lIEdMX05FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDI2
MDAKKyNkZWZpbmUgR0xfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYwMQorCisv
KiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIEdMX05FQVJFU1QgKi8KKy8qICAgICAgR0xf
TElORUFSICovCisjZGVmaW5lIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICAweDI3
MDAKKyNkZWZpbmUgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgIDB4MjcwMQorI2Rl
ZmluZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgMHgyNzAyCisjZGVmaW5lIEdM
X0xJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICAweDI3MDMKKworLyogVGV4dHVyZVBhcmFt
ZXRlck5hbWUgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV9NQUdfRklMVEVSICAgICAgICAgICAgIDB4
MjgwMAorI2RlZmluZSBHTF9URVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgMHgyODAxCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICAweDI4MDIKKyNkZWZpbmUg
R0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAgICAgICAgIDB4MjgwMworCisvKiBUZXh0dXJlVGFy
Z2V0ICovCisvKiAgICAgIEdMX1RFWFRVUkVfMkQgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRSAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTcwMgorCisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVAg
ICAgICAgICAgICAgICAweDg1MTMKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQ
ICAgICAgIDB4ODUxNAorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAg
MHg4NTE1CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICAweDg1MTYK
KyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgIDB4ODUxNworI2RlZmlu
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgMHg4NTE4CisjZGVmaW5lIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICAweDg1MTkKKyNkZWZpbmUgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aICAgIDB4ODUxQQorI2RlZmluZSBHTF9NQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFICAgICAgMHg4NTFDCisKKy8qIFRleHR1cmVVbml0ICovCisjZGVmaW5lIEdMX1RF
WFRVUkUwICAgICAgICAgICAgICAgICAgICAgICAweDg0QzAKKyNkZWZpbmUgR0xfVEVYVFVSRTEg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMQorI2RlZmluZSBHTF9URVhUVVJFMiAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEMyCisjZGVmaW5lIEdMX1RFWFRVUkUzICAgICAgICAgICAgICAg
ICAgICAgICAweDg0QzMKKyNkZWZpbmUgR0xfVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRDNAorI2RlZmluZSBHTF9URVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM1
CisjZGVmaW5lIEdMX1RFWFRVUkU2ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzYKKyNkZWZp
bmUgR0xfVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNworI2RlZmluZSBHTF9U
RVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM4CisjZGVmaW5lIEdMX1RFWFRVUkU5
ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzkKKyNkZWZpbmUgR0xfVEVYVFVSRTEwICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRDQQorI2RlZmluZSBHTF9URVhUVVJFMTEgICAgICAgICAgICAg
ICAgICAgICAgMHg4NENCCisjZGVmaW5lIEdMX1RFWFRVUkUxMiAgICAgICAgICAgICAgICAgICAg
ICAweDg0Q0MKKyNkZWZpbmUgR0xfVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
RAorI2RlZmluZSBHTF9URVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgMHg4NENFCisjZGVm
aW5lIEdMX1RFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAgICAweDg0Q0YKKyNkZWZpbmUgR0xf
VEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDB4ODREMAorI2RlZmluZSBHTF9URVhUVVJF
MTcgICAgICAgICAgICAgICAgICAgICAgMHg4NEQxCisjZGVmaW5lIEdMX1RFWFRVUkUxOCAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDIKKyNkZWZpbmUgR0xfVEVYVFVSRTE5ICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMworI2RlZmluZSBHTF9URVhUVVJFMjAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEQ0CisjZGVmaW5lIEdMX1RFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICAweDg0
RDUKKyNkZWZpbmUgR0xfVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDB4ODRENgorI2Rl
ZmluZSBHTF9URVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ3CisjZGVmaW5lIEdM
X1RFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICAweDg0RDgKKyNkZWZpbmUgR0xfVEVYVFVS
RTI1ICAgICAgICAgICAgICAgICAgICAgIDB4ODREOQorI2RlZmluZSBHTF9URVhUVVJFMjYgICAg
ICAgICAgICAgICAgICAgICAgMHg4NERBCisjZGVmaW5lIEdMX1RFWFRVUkUyNyAgICAgICAgICAg
ICAgICAgICAgICAweDg0REIKKyNkZWZpbmUgR0xfVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREQworI2RlZmluZSBHTF9URVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgMHg4
NERECisjZGVmaW5lIEdMX1RFWFRVUkUzMCAgICAgICAgICAgICAgICAgICAgICAweDg0REUKKyNk
ZWZpbmUgR0xfVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDB4ODRERgorI2RlZmluZSBH
TF9BQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgMHg4NEUwCisKKy8qIFRleHR1cmVXcmFw
TW9kZSAqLworI2RlZmluZSBHTF9SRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOTAx
CisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICAweDgxMkYKKyNkZWZp
bmUgR0xfTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDB4ODM3MAorCisvKiBVbmlmb3Jt
IFR5cGVzICovCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICAweDhC
NTAKKyNkZWZpbmUgR0xfRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgIDB4OEI1MQorI2Rl
ZmluZSBHTF9GTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgMHg4QjUyCisjZGVmaW5lIEdM
X0lOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAweDhCNTMKKyNkZWZpbmUgR0xfSU5UX1ZF
QzMgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NAorI2RlZmluZSBHTF9JTlRfVkVDNCAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjU1CisjZGVmaW5lIEdMX0JPT0wgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCNTYKKyNkZWZpbmUgR0xfQk9PTF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI1NworI2RlZmluZSBHTF9CT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU4CisjZGVmaW5lIEdMX0JPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICAweDhCNTkKKyNk
ZWZpbmUgR0xfRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgIDB4OEI1QQorI2RlZmluZSBH
TF9GTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgMHg4QjVCCisjZGVmaW5lIEdMX0ZMT0FU
X01BVDQgICAgICAgICAgICAgICAgICAgICAweDhCNUMKKyNkZWZpbmUgR0xfU0FNUExFUl8yRCAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1RQorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkUgICAgICAg
ICAgICAgICAgICAgMHg4QjYwCisKKy8qIFZlcnRleCBBcnJheXMgKi8KKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEICAgICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICAweDg2MjMKKyNkZWZpbmUgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9TVFJJREUgICAgICAgICAweDg2MjQKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9UWVBFICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEICAgICAweDg4NkEKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9QT0lOVEVSICAgICAgICAweDg2NDUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9C
VUZGRVJfQklORElORyAweDg4OUYKKworLyogUmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFICAgMHg4QjlBCisjZGVmaW5lIEdMX0lNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfRk9STUFUIDB4OEI5QgorCisvKiBTaGFkZXIgU291cmNlICovCisj
ZGVmaW5lIEdMX0NPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICAweDhCODEKKyNkZWZpbmUg
R0xfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgIDB4OEI4NAorI2RlZmluZSBHTF9TSEFE
RVJfU09VUkNFX0xFTkdUSCAgICAgICAgICAgMHg4Qjg4CisjZGVmaW5lIEdMX1NIQURFUl9DT01Q
SUxFUiAgICAgICAgICAgICAgICAweDhERkEKKworLyogU2hhZGVyIEJpbmFyeSAqLworI2RlZmlu
ZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICAgICAgMHg4REY4CisjZGVmaW5lIEdMX05V
TV9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICAweDhERjkKKworLyogU2hhZGVyIFByZWNpc2lv
bi1TcGVjaWZpZWQgVHlwZXMgKi8KKyNkZWZpbmUgR0xfTE9XX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICAgIDB4OERGMAorI2RlZmluZSBHTF9NRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAg
MHg4REYxCisjZGVmaW5lIEdMX0hJR0hfRkxPQVQgICAgICAgICAgICAgICAgICAgICAweDhERjIK
KyNkZWZpbmUgR0xfTE9XX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMworI2RlZmlu
ZSBHTF9NRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgMHg4REY0CisjZGVmaW5lIEdMX0hJ
R0hfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDhERjUKKworLyogRnJhbWVidWZmZXIgT2Jq
ZWN0LiAqLworI2RlZmluZSBHTF9GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgMHg4RDQw
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICAweDhENDEKKworI2Rl
ZmluZSBHTF9SR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU2CisjZGVmaW5lIEdM
X1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcKKyNkZWZpbmUgR0xfUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgorI2RlZmluZSBHTF9ERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgMHg4MUE1CisjZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICAweDE5MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAw
eDhENDIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgIDB4OEQ0Mwor
I2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgMHg4RDQ0CisjZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICAweDhENTAKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfQkxVRV9TSVpFICAgICAgICAgMHg4RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBI
QV9TSVpFICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUg
ICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAg
MHg4RDU1CisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAg
ICAgICAgICAgMHg4Q0QwCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUUgICAgICAgICAgIDB4OENEMQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1RFWFRVUkVfTEVWRUwgICAgICAgICAweDhDRDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgMHg4Q0QzCisKKyNkZWZpbmUgR0xfQ09MT1Jf
QVRUQUNITUVOVDAgICAgICAgICAgICAgIDB4OENFMAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hN
RU5UICAgICAgICAgICAgICAgMHg4RDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVCAg
ICAgICAgICAgICAweDhEMjAKKworI2RlZmluZSBHTF9OT05FICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAg
ICAgICAgIDB4OENENQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgMHg4Q0Q3CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
RElNRU5TSU9OUyAgICAgICAgIDB4OENEOQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRCAgICAgICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9C
SU5ESU5HICAgICAgICAgICAgMHg4Q0E2CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5H
ICAgICAgICAgICAweDhDQTcKKyNkZWZpbmUgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAg
ICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAw
eDA1MDYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBHTCBjb3JlIGZ1bmN0aW9ucy4KKyAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEFj
dGl2ZVRleHR1cmUgKEdMZW51bSB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQXR0YWNoU2hhZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRBdHRyaWJMb2NhdGlv
biAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlciAoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFJlbmRlcmJ1ZmZlciAo
R0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEJpbmRUZXh0dXJlIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgdGV4
dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kQ29sb3Ig
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlv
biAoIEdMZW51bSBtb2RlICk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEZ1bmMgKEdMZW51
bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdC
LCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEJ1ZmZlckRhdGEgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIg
c2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhLCBHTGVudW0gdXNhZ2UpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZmZXJTdWJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQ
SUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAo
R0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENs
ZWFyIChHTGJpdGZpZWxkIG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xDbGVhckNvbG9yIChHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBi
bHVlLCBHTGNsYW1wZiBhbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbENsZWFyRGVwdGhmIChHTGNsYW1wZiBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbENsZWFyU3RlbmNpbCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbG9yTWFzayAoR0xib29sZWFuIHJlZCwgR0xib29sZWFu
IGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcGlsZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0
YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhJbWFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVy
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdl
MkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitH
TF9BUElDQUxMIEdMdWludCAgICAgICBHTF9BUElFTlRSWSBnbENyZWF0ZVByb2dyYW0gKHZvaWQp
OworR0xfQVBJQ0FMTCBHTHVpbnQgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVTaGFkZXIgKEdM
ZW51bSB0eXBlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZh
Y2UgKEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
RGVsZXRlQnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgKEdMc2l6
ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgKEdMc2l6
ZWkgbiwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdMc2l6ZWkgbiwg
Y29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbERlcHRoRnVuYyAoR0xlbnVtIGZ1bmMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xEZXB0aE1hc2sgKEdMYm9vbGVhbiBmbGFnKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMY2xhbXBmIHpOZWFyLCBHTGNs
YW1wZiB6RmFyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGV0YWNo
U2hhZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWlu
dCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJh
eXMgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50cyAoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUgKEdMZW51bSBjYXApOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
RmluaXNoICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1
c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51
bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWludCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJl
LCBHTGludCBsZXZlbCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZy
b250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5CdWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogYnVmZmVycyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbmVyYXRlTWlwbWFwIChHTGVudW0gdGFyZ2V0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJz
IChHTHNpemVpIG4sIEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2VuUmVuZGVyYnVmZmVycyAoR0xzaXplaSBuLCBHTHVpbnQqIHJl
bmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5U
ZXh0dXJlcyAoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1
aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUs
IEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0q
IHR5cGUsIEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQs
IEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpOworR0xfQVBJQ0FMTCBpbnQgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0
IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEJvb2xlYW52IChHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIEdMZW51bSAg
ICAgICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0RmxvYXR2IChHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFt
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1pdiAoR0x1aW50
IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1JbmZvTG9nIChHTHVpbnQgcHJvZ3JhbSwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFkZXJpdiAoR0x1aW50IHNoYWRl
ciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVySW5mb0xvZyAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVt
IHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBw
cmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFk
ZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3Ro
LCBHTGNoYXIqIHNvdXJjZSk7CitHTF9BUElDQUxMIGNvbnN0IEdMdWJ5dGUqIEdMX0FQSUVOVFJZ
IGdsR2V0U3RyaW5nIChHTGVudW0gbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3Jt
ZnYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWl2IChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBpbnQg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFt
LCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxv
YXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZl
cnRleEF0dHJpYml2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBv
aW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEhpbnQgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNC
dWZmZXIgKEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5U
UlkgZ2xJc0VuYWJsZWQgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xf
QVBJRU5UUlkgZ2xJc0ZyYW1lYnVmZmVyIChHTHVpbnQgZnJhbWVidWZmZXIpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdM
dWludCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkg
Z2xJc1NoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9B
UElFTlRSWSBnbElzVGV4dHVyZSAoR0x1aW50IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5rUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0p
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQaXhlbFN0b3JlaSAoR0xl
bnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVhZFBpeGVscyAoR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFJlbGVhc2VTaGFkZXJDb21waWxlciAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFnZSAoR0xj
bGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNo
YWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51bSBiaW5h
cnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRl
ciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVu
Z3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmMg
KEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdM
ZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1hc2sgKEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZh
Y2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
U3RlbmNpbE9wIChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAoR0xl
bnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVGV4UGFyYW1ldGVyZiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBh
cmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVy
ZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9j
YXRpb24sIEdMZmxvYXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0xZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpIChH
TGludCBsb2NhdGlvbiwgR0xpbnQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0y
ZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJpdiAoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmIChHTGludCBsb2NhdGlvbiwgR0xmbG9h
dCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTNpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zaXYgKEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwg
R0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTRpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00
aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyZnYgKEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm1NYXRyaXgzZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVzZVByb2dyYW0gKEdMdWludCBwcm9ncmFt
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmFsaWRhdGVQcm9ncmFt
IChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMWZ2IChHTHVpbnQgaW5keCwgY29u
c3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmVydGV4QXR0cmliMmYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1
aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjNmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFZlcnRleEF0dHJpYjNmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChH
THVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGZ2IChH
THVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliUG9pbnRlciAoR0x1aW50IGluZHgsIEdMaW50
IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUs
IGNvbnN0IEdMdm9pZCogcHRyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmlld3BvcnQgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wy
X2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNs
dWRlL0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3MyBAQAorI2lmbmRl
ZiBfX2dsMmV4dF9oXworI2RlZmluZSBfX2dsMmV4dF9oXworCisvKiAkUmV2aXNpb246IDEwNzk4
ICQgb24gJERhdGU6OiAyMDEwLTAzLTE5IDE3OjM0OjMwIC0wNzAwICMkICovCisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFRoaXMgZG9jdW1lbnQg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9u
CisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0Zy
ZWVCLyAuCisgKi8KKworI2lmbmRlZiBHTF9BUElFTlRSWVAKKyMgICBkZWZpbmUgR0xfQVBJRU5U
UllQIEdMX0FQSUVOVFJZKgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogT0VTIGV4
dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfT0VTX2NvbXByZXNz
ZWRfRVRDMV9SR0I4X3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9S
R0I4X3RleHR1cmUKKyNkZWZpbmUgR0xfRVRDMV9SR0I4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhENjQKKyNlbmRpZgorCisvKiBHTF9PRVNfY29tcHJlc3Nl
ZF9wYWxldHRlZF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVk
X3RleHR1cmUKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCOTAKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCQThfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTEKKyNkZWZpbmUgR0xfUEFMRVRU
RTRfUjVfRzZfQjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTIKKyNk
ZWZpbmUgR0xfUEFMRVRURTRfUkdCQTRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCOTMKKyNkZWZpbmUgR0xfUEFMRVRURTRfUkdCNV9BMV9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCOTQKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCOF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTUKKyNkZWZpbmUgR0xfUEFM
RVRURThfUkdCQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTYK
KyNkZWZpbmUgR0xfUEFMRVRURThfUjVfRzZfQjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCOTcKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCQTRfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhCOTgKKyNkZWZpbmUgR0xfUEFMRVRURThfUkdCNV9B
MV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOTkKKyNlbmRpZgorCisv
KiBHTF9PRVNfZGVwdGgyNCAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGgyNAorI2RlZmluZSBHTF9E
RVBUSF9DT01QT05FTlQyNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFB
NgorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aDMyICovCisjaWZuZGVmIEdMX09FU19kZXB0aDMy
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MUE3CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoX3RleHR1cmUgKi8KKy8q
IE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xf
T0VTX0VHTF9pbWFnZSAqLworI2lmbmRlZiBHTF9PRVNfRUdMX2ltYWdlCit0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CisjZW5kaWYKKworLyogR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAq
LworI2lmbmRlZiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50CisjZGVmaW5lIEdMX1VOU0lHTkVE
X0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA1CisjZW5k
aWYKKworLyogR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9PRVNfZ2V0
X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTX09FUyAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZFCisjZGVmaW5lIEdM
X1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
N0ZGCisjZW5kaWYKKworLyogR0xfT0VTX21hcGJ1ZmZlciAqLworI2lmbmRlZiBHTF9PRVNfbWFw
YnVmZmVyCisjZGVmaW5lIEdMX1dSSVRFX09OTFlfT0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4OEI5CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NFU1NfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJCCisjZGVmaW5lIEdMX0JVRkZFUl9N
QVBQRURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJDCisjZGVm
aW5lIEdMX0JVRkZFUl9NQVBfUE9JTlRFUl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4OEJECisjZW5kaWYKKworLyogR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICovCisj
aWZuZGVmIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorI2RlZmluZSBHTF9ERVBUSF9TVEVO
Q0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGOQorI2RlZmlu
ZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRGQQorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKKy8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CisjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CisjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JH
QkE4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU4
CisjZW5kaWYKKworLyogR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICovCisjaWZuZGVmIEdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVS
SVZBVElWRV9ISU5UX09FUyAgICAgICAgICAgICAgICAgIDB4OEI4QgorI2VuZGlmCisKKy8qIEdM
X09FU19zdGVuY2lsMSAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDEKKyNkZWZpbmUgR0xfU1RF
TkNJTF9JTkRFWDFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDYK
KyNlbmRpZgorCisvKiBHTF9PRVNfc3RlbmNpbDQgKi8KKyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWw0
CisjZGVmaW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDQ3CisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KKyNpZm5k
ZWYgR0xfT0VTX3RleHR1cmVfM0QKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1JfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfVEVYVFVSRV8z
RF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkYKKyNkZWZp
bmUgR0xfVEVYVFVSRV9CSU5ESU5HXzNEX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgwNkEKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0laRV9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwNzMKKyNkZWZpbmUgR0xfU0FNUExFUl8zRF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFXzNEX1pPRkZTRVRfT0VTICAgICAgICAweDhDRDQKKyNl
bmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdCAqLworLyogTm8gbmV3IHRva2VucyBpbnRy
b2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9s
aW5lYXIgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKworLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0CisjZGVmaW5lIEdMX0hBTEZfRkxPQVRfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdF9saW5lYXIgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0
aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3RleHR1cmVfbnBvdCAqLworLyogTm8gbmV3
IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdmVy
dGV4X2FycmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAor
I2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElOR19PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODVCNQorI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdCAqLwor
LyogR0xfSEFMRl9GTE9BVF9PRVMgZGVmaW5lZCBpbiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
IGFscmVhZHkuICovCisKKy8qIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yICovCisjaWZu
ZGVmIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF8xMF8xMF8xMF8yX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REY2CisjZGVmaW5l
IEdMX0lOVF8xMF8xMF8xMF8yX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4REY3CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBBTUQgZXh0ZW5zaW9uIHRv
a2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9BTURfY29tcHJlc3NlZF8zRENfdGV4
dHVyZSAqLworI2lmbmRlZiBHTF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZQorI2RlZmluZSBH
TF8zRENfWF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODdGOQorI2RlZmluZSBHTF8zRENfWFlfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODdGQQorI2VuZGlmCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190
ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisjZGVmaW5l
IEdMX0FUQ19SR0JfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QzkyCisjZGVmaW5lIEdMX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QzkzCisjZGVmaW5lIEdMX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9B
TFBIQV9BTUQgICAgICAgICAgICAgICAgICAgICAgMHg4N0VFCisjZW5kaWYKKworLyogR0xfQU1E
X3BlcmZvcm1hbmNlX21vbml0b3IgKi8KKyNpZm5kZWYgR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0
b3IKKyNkZWZpbmUgR0xfQ09VTlRFUl9UWVBFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCQzAKKyNkZWZpbmUgR0xfQ09VTlRFUl9SQU5HRV9BTUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzEKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
NjRfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzIKKyNkZWZpbmUg
R0xfUEVSQ0VOVEFHRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCQzMKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRfQVZBSUxBQkxFX0FNRCAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCQzQKKyNkZWZpbmUgR0xfUEVSRk1PTl9SRVNVTFRfU0laRV9BTUQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzUKKyNkZWZpbmUgR0xfUEVSRk1PTl9S
RVNVTFRfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCQzYKKyNlbmRp
ZgorCisvKiBHTF9BTURfcHJvZ3JhbV9iaW5hcnlfWjQwMCAqLworI2lmbmRlZiBHTF9BTURfcHJv
Z3JhbV9iaW5hcnlfWjQwMAorI2RlZmluZSBHTF9aNDAwX0JJTkFSWV9BTUQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc0MAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgorICogRVhUIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyog
R0xfRVhUX2JsZW5kX21pbm1heCAqLworI2lmbmRlZiBHTF9FWFRfYmxlbmRfbWlubWF4CisjZGVm
aW5lIEdMX01JTl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDA3CisjZGVmaW5lIEdMX01BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDA4CisjZW5kaWYKKworLyogR0xfRVhUX2Rpc2NhcmRfZnJh
bWVidWZmZXIgKi8KKyNpZm5kZWYgR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIKKyNkZWZpbmUg
R0xfQ09MT1JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE4MDAKKyNkZWZpbmUgR0xfREVQVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDE4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDIKKyNlbmRpZgorCisvKiBHTF9FWFRf
bXVsdGlfZHJhd19hcnJheXMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlz
IGV4dGVuc2lvbi4gKi8KKworLyogR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgKi8KKyNpZm5kZWYg
R0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKKyNkZWZpbmUgR0xfQkdSQV9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhUICAgICAgICAgICAgICAgICAgICAgICAweDgzNjUKKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAweDgzNjYKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisjZGVmaW5l
IEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEZFCisjZGVmaW5lIEdMX01BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEZGCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorI2Rl
ZmluZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODBFMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9S
RVYgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFVgorI2RlZmlu
ZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVZfRVhUICAgICAgICAgICAgICAgICAgICAg
IDB4ODM2OAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogSU1HIGV4dGVuc2lvbiB0
b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfSU1HX3Byb2dyYW1fYmluYXJ5ICov
CisjaWZuZGVmIEdMX0lNR19wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBHTF9TR1hfUFJPR1JBTV9C
SU5BUllfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMAorI2VuZGlmCisK
Ky8qIEdMX0lNR19yZWFkX2Zvcm1hdCAqLworI2lmbmRlZiBHTF9JTUdfcmVhZF9mb3JtYXQKKyNk
ZWZpbmUgR0xfQkdSQV9JTUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwRTEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfSU1HICAg
ICAgICAgICAgICAgICAgICAgICAweDgzNjUKKyNlbmRpZgorCisvKiBHTF9JTUdfc2hhZGVyX2Jp
bmFyeSAqLworI2lmbmRlZiBHTF9JTUdfc2hhZGVyX2JpbmFyeQorI2RlZmluZSBHTF9TR1hfQklO
QVJZX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMwQQorI2Vu
ZGlmCisKKy8qIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjICovCisjaWZuZGVmIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
X1BWUlRDXzRCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAgMHg4QzAwCisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAgMHg4
QzAxCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HICAgICAgICAg
ICAgICAgICAgICAgMHg4QzAyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQ
VjFfSU1HICAgICAgICAgICAgICAgICAgICAgMHg4QzAzCisjZW5kaWYKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qCisgKiBOViBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
IEdMX05WX2ZlbmNlICovCisjaWZuZGVmIEdMX05WX2ZlbmNlCisjZGVmaW5lIEdMX0FMTF9DT01Q
TEVURURfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEYyCisjZGVm
aW5lIEdMX0ZFTkNFX1NUQVRVU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEYzCisjZGVmaW5lIEdMX0ZFTkNFX0NPTkRJVElPTl9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEY0CisjZW5kaWYKKworLyogR0xfTlZfY292ZXJhZ2Vfc2Ft
cGxlICovCisjaWZuZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBHTF9DT1ZFUkFH
RV9DT01QT05FTlRfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMAorI2Rl
ZmluZSBHTF9DT1ZFUkFHRV9DT01QT05FTlQ0X05WICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEVEMQorI2RlZmluZSBHTF9DT1ZFUkFHRV9BVFRBQ0hNRU5UX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEVEMgorI2RlZmluZSBHTF9DT1ZFUkFHRV9CVUZGRVJTX05W
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVEMworI2RlZmluZSBHTF9DT1ZF
UkFHRV9TQU1QTEVTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENAor
I2RlZmluZSBHTF9DT1ZFUkFHRV9BTExfRlJBR01FTlRTX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEVENQorI2RlZmluZSBHTF9DT1ZFUkFHRV9FREdFX0ZSQUdNRU5UU19OViAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEVENgorI2RlZmluZSBHTF9DT1ZFUkFHRV9BVVRPTUFU
SUNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEVENworI2RlZmluZSBHTF9D
T1ZFUkFHRV9CVUZGRVJfQklUX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAw
MAorI2VuZGlmCisKKy8qIEdMX05WX2RlcHRoX25vbmxpbmVhciAqLworI2lmbmRlZiBHTF9OVl9k
ZXB0aF9ub25saW5lYXIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTZfTk9OTElORUFSX05W
ICAgICAgICAgICAgICAgICAgICAgICAweDhFMkMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSoKKyAqIFFDT00gZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBH
TF9RQ09NX2RyaXZlcl9jb250cm9sICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkg
dGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0ICovCisjaWZuZGVm
IEdMX1FDT01fZXh0ZW5kZWRfZ2V0CisjZGVmaW5lIEdMX1RFWFRVUkVfV0lEVEhfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQyCisjZGVmaW5lIEdMX1RFWFRVUkVf
SEVJR0hUX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQzCisjZGVm
aW5lIEdMX1RFWFRVUkVfREVQVEhfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QkQ0CisjZGVmaW5lIEdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QkQ1CisjZGVmaW5lIEdMX1RFWFRVUkVfRk9STUFUX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ2CisjZGVmaW5lIEdMX1RFWFRV
UkVfVFlQRV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkQ3Cisj
ZGVmaW5lIEdMX1RFWFRVUkVfSU1BR0VfVkFMSURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QkQ4CisjZGVmaW5lIEdMX1RFWFRVUkVfTlVNX0xFVkVMU19RQ09NICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QkQ5CisjZGVmaW5lIEdMX1RFWFRVUkVfVEFSR0VUX1FD
T00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkRBCisjZGVmaW5lIEdMX1RF
WFRVUkVfT0JKRUNUX1ZBTElEX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkRC
CisjZGVmaW5lIEdMX1NUQVRFX1JFU1RPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QkRDCisjZW5kaWYKKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQyICovCisv
KiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdM
X1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lmbmRlZiBHTF9RQ09NX3BlcmZtb25fZ2xv
YmFsX21vZGUKKyNkZWZpbmUgR0xfUEVSRk1PTl9HTE9CQUxfTU9ERV9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhGQTAKKyNlbmRpZgorCisvKiBHTF9RQ09NX3dyaXRlb25seV9y
ZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nCisjZGVmaW5l
IEdMX1dSSVRFT05MWV9SRU5ERVJJTkdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODIzCisjZW5kaWYKKworLyogR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgKi8KKyNpZm5kZWYg
R0xfUUNPTV90aWxlZF9yZW5kZXJpbmcKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDBfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX0NP
TE9SX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw
MDAwMgorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDNfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdMX0NP
TE9SX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw
MDAxMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDZfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdMX0NP
TE9SX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw
MDA4MAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDFfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdMX0RF
UFRIX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw
MDQwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdMX0RF
UFRIX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw
MjAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDdfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAx
MDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUMl9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4
MDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUNV9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQw
MDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJ
VDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdMX01V
TFRJU0FNUExFX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAw
MDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJ
VDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdMX01V
TFRJU0FNUExFX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAw
MDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJ
VDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdMX01V
TFRJU0FNUExFX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAw
MDAwMAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRW5kIG9mIGV4dGVuc2lvbiB0
b2tlbnMsIHN0YXJ0IG9mIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE9FUyBleHRlbnNpb24gZnVu
Y3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX09FU19jb21wcmVzc2VkX0VUQzFf
UkdCOF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlCisjZGVmaW5lIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlIDEKKyNlbmRp
ZgorCisvKiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlICovCisjaWZuZGVmIEdM
X09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUKKyNkZWZpbmUgR0xfT0VTX2NvbXByZXNz
ZWRfcGFsZXR0ZWRfdGV4dHVyZSAxCisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoMjQgKi8KKyNp
Zm5kZWYgR0xfT0VTX2RlcHRoMjQKKyNkZWZpbmUgR0xfT0VTX2RlcHRoMjQgMQorI2VuZGlmCisK
Ky8qIEdMX09FU19kZXB0aDMyICovCisjaWZuZGVmIEdMX09FU19kZXB0aDMyCisjZGVmaW5lIEdM
X09FU19kZXB0aDMyIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGhfdGV4dHVyZSAqLworI2lm
bmRlZiBHTF9PRVNfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9PRVNfZGVwdGhfdGV4dHVyZSAx
CisjZW5kaWYKKworLyogR0xfT0VTX0VHTF9pbWFnZSAqLworI2lmbmRlZiBHTF9PRVNfRUdMX2lt
YWdlCisjZGVmaW5lIEdMX09FU19FR0xfaW1hZ2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVHTEltYWdlVGFyZ2V0VGV4dHVyZTJE
T0VTIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEVHTEltYWdlVGFyZ2V0UmVuZGVyYnVmZmVyU3RvcmFnZU9FUyAoR0xl
bnVtIHRhcmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRUdMSU1BR0VUQVJHRVRURVhUVVJFMkRPRVNQUk9DKSAoR0xlbnVt
IHRhcmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEVHTElNQUdFVEFSR0VUUkVOREVSQlVGRkVSU1RPUkFHRU9FU1BST0MpIChHTGVudW0g
dGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKKyNlbmRpZgorCisvKiBHTF9PRVNfZWxlbWVu
dF9pbmRleF91aW50ICovCisjaWZuZGVmIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQKKyNkZWZp
bmUgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAxCisjZW5kaWYKKworLyogR0xfT0VTX2Zib19y
ZW5kZXJfbWlwbWFwICovCisjaWZuZGVmIEdMX09FU19mYm9fcmVuZGVyX21pcG1hcAorI2RlZmlu
ZSBHTF9PRVNfZmJvX3JlbmRlcl9taXBtYXAgMQorI2VuZGlmCisKKy8qIEdMX09FU19mcmFnbWVu
dF9wcmVjaXNpb25faGlnaCAqLworI2lmbmRlZiBHTF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hp
Z2gKKyNkZWZpbmUgR0xfT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoIDEKKyNlbmRpZgorCisv
KiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX09FU19nZXRfcHJvZ3Jh
bV9iaW5hcnkKKyNkZWZpbmUgR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAxCisjaWZkZWYgR0xf
R0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3Jh
bUJpbmFyeU9FUyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGVudW0gKmJpbmFyeUZvcm1hdCwgR0x2b2lkICpiaW5hcnkpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsUHJvZ3JhbUJpbmFyeU9FUyAoR0x1aW50IHByb2dyYW0sIEdMZW51
bSBiaW5hcnlGb3JtYXQsIGNvbnN0IEdMdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOworI2Vu
ZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1CSU5BUllPRVNQ
Uk9DKSAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGVudW0gKmJpbmFyeUZvcm1hdCwgR0x2b2lkICpiaW5hcnkpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xQUk9HUkFNQklOQVJZT0VTUFJPQykgKEdMdWludCBwcm9ncmFtLCBHTGVu
dW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyNl
bmRpZgorCisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisjaWZuZGVmIEdMX09FU19tYXBidWZmZXIK
KyNkZWZpbmUgR0xfT0VTX21hcGJ1ZmZlciAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwor
R0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlck9FUyAoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGFjY2Vzcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbFVu
bWFwQnVmZmVyT0VTIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCogKEdMX0FQSUVOVFJZUCBQRk5H
TE1BUEJVRkZFUk9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKTsKK3R5cGVk
ZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xVTk1BUEJVRkZFUk9FU1BST0MpIChHTGVu
dW0gdGFyZ2V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkVSUE9J
TlRFUlZPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJh
bXMpOworI2VuZGlmCisKKy8qIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAqLworI2lmbmRl
ZiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyNkZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfcmdiOF9yZ2JhOCAqLworI2lmbmRlZiBH
TF9PRVNfcmdiOF9yZ2JhOAorI2RlZmluZSBHTF9PRVNfcmdiOF9yZ2JhOCAxCisjZW5kaWYKKwor
LyogR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICovCisjaWZuZGVmIEdMX09FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcworI2RlZmluZSBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgMQorI2Vu
ZGlmCisKKy8qIEdMX09FU19zdGVuY2lsMSAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDEKKyNk
ZWZpbmUgR0xfT0VTX3N0ZW5jaWwxIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RlbmNpbDQgKi8K
KyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWw0CisjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCisjZW5k
aWYKKworLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfM0QK
KyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFRleEltYWdlM0RPRVMgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xDb3B5VGV4U3ViSW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2
b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZm
ZXJUZXh0dXJlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0g
dGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHpvZmZzZXQpOwor
I2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFRFWElNQUdFM0RPRVNQUk9D
KSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYU1VCSU1BR0UzRE9FU1BST0MpIChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPTVBSRVNTRURURVhJTUFHRTNE
T0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBi
b3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT01QUkVTU0VEVEVYU1VCSU1BR0UzRE9FU1BST0MpIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUzRE9F
UykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBH
THVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHpvZmZzZXQpOworI2VuZGlmCisKKy8q
IEdMX09FU190ZXh0dXJlX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2Zsb2F0Cisj
ZGVmaW5lIEdMX09FU190ZXh0dXJlX2Zsb2F0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVy
ZV9mbG9hdF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyCisj
ZGVmaW5lIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAxCisjZW5kaWYKKworLyogR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
CisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXRfbGluZWFyCisjZGVmaW5lIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFy
IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9ucG90ICovCisjaWZuZGVmIEdMX09FU190
ZXh0dXJlX25wb3QKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfbnBvdCAxCisjZW5kaWYKKworLyog
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QKKyNkZWZpbmUgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0
ZXhBcnJheU9FUyAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bERlbGV0ZVZlcnRleEFycmF5c09FUyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmFycmF5cyk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgKEdMc2l6
ZWkgbiwgR0x1aW50ICphcnJheXMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkg
Z2xJc1ZlcnRleEFycmF5T0VTIChHTHVpbnQgYXJyYXkpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MpIChHTHVpbnQgYXJyYXkp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQ
Uk9DKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmFycmF5cyk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MpIChHTHNpemVpIG4sIEdMdWlu
dCAqYXJyYXlzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1ZFUlRF
WEFSUkFZT0VTUFJPQykgKEdMdWludCBhcnJheSk7CisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRl
eF9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdAorI2RlZmlu
ZSBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhf
dHlwZV8xMF8xMF8xMF8yICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8y
CisjZGVmaW5lIEdMX09FU192ZXJ0ZXhfdHlwZV8xMF8xMF8xMF8yIDEKKyNlbmRpZgorCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSoKKyAqIEFNRCBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlICovCisjaWZuZGVmIEdM
X0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FNRF9jb21wcmVzc2VkXzNE
Q190ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSAq
LworI2lmbmRlZiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZQorI2RlZmluZSBHTF9BTURf
Y29tcHJlc3NlZF9BVENfdGV4dHVyZSAxCisjZW5kaWYKKworLyogQU1EX3BlcmZvcm1hbmNlX21v
bml0b3IgKi8KKyNpZm5kZWYgR0xfQU1EX3BlcmZvcm1hbmNlX21vbml0b3IKKyNkZWZpbmUgR0xf
QU1EX3BlcmZvcm1hbmNlX21vbml0b3IgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yR3JvdXBzQU1EIChHTGlu
dCAqbnVtR3JvdXBzLCBHTHNpemVpIGdyb3Vwc1NpemUsIEdMdWludCAqZ3JvdXBzKTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlcnNBTUQgKEdMdWlu
dCBncm91cCwgR0xpbnQgKm51bUNvdW50ZXJzLCBHTGludCAqbWF4QWN0aXZlQ291bnRlcnMsIEdM
c2l6ZWkgY291bnRlclNpemUsIEdMdWludCAqY291bnRlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cFN0cmluZ0FNRCAoR0x1aW50IGdyb3VwLCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpncm91cFN0cmluZyk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJTdHJpbmdB
TUQgKEdMdWludCBncm91cCwgR0x1aW50IGNvdW50ZXIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGNoYXIgKmNvdW50ZXJTdHJpbmcpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVySW5mb0FNRCAoR0x1aW50IGdyb3VwLCBHTHVp
bnQgY291bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQgKmRhdGEpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2VuUGVyZk1vbml0b3JzQU1EIChHTHNpemVpIG4sIEdMdWludCAqbW9u
aXRvcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlUGVyZk1vbml0b3Jz
QU1EIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsU2VsZWN0UGVyZk1vbml0b3JDb3VudGVyc0FNRCAoR0x1aW50IG1vbml0b3IsIEdM
Ym9vbGVhbiBlbmFibGUsIEdMdWludCBncm91cCwgR0xpbnQgbnVtQ291bnRlcnMsIEdMdWludCAq
Y291bnRlcnNMaXN0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJlZ2luUGVyZk1v
bml0b3JBTUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEVuZFBlcmZNb25pdG9yQU1EIChHTHVpbnQgbW9uaXRvcik7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJEYXRhQU1EIChHTHVpbnQgbW9uaXRvciwg
R0xlbnVtIHBuYW1lLCBHTHNpemVpIGRhdGFTaXplLCBHTHVpbnQgKmRhdGEsIEdMaW50ICpieXRl
c1dyaXR0ZW4pOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBF
UkZNT05JVE9SR1JPVVBTQU1EUFJPQykgKEdMaW50ICpudW1Hcm91cHMsIEdMc2l6ZWkgZ3JvdXBz
U2l6ZSwgR0x1aW50ICpncm91cHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xH
RVRQRVJGTU9OSVRPUkNPVU5URVJTQU1EUFJPQykgKEdMdWludCBncm91cCwgR0xpbnQgKm51bUNv
dW50ZXJzLCBHTGludCAqbWF4QWN0aXZlQ291bnRlcnMsIEdMc2l6ZWkgY291bnRlclNpemUsIEdM
dWludCAqY291bnRlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJG
TU9OSVRPUkdST1VQU1RSSU5HQU1EUFJPQykgKEdMdWludCBncm91cCwgR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZ3JvdXBTdHJpbmcpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNPVU5URVJTVFJJTkdBTURQUk9DKSAoR0x1
aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMY2hhciAqY291bnRlclN0cmluZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUklORk9BTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHVp
bnQgY291bnRlciwgR0xlbnVtIHBuYW1lLCBHTHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xHRU5QRVJGTU9OSVRPUlNBTURQUk9DKSAoR0xzaXplaSBuLCBHTHVp
bnQgKm1vbml0b3JzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVMRVRFUEVS
Rk1PTklUT1JTQU1EUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNFTEVDVFBFUkZNT05JVE9SQ09VTlRFUlNBTURQUk9D
KSAoR0x1aW50IG1vbml0b3IsIEdMYm9vbGVhbiBlbmFibGUsIEdMdWludCBncm91cCwgR0xpbnQg
bnVtQ291bnRlcnMsIEdMdWludCAqY291bnRlcnNMaXN0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMQkVHSU5QRVJGTU9OSVRPUkFNRFBST0MpIChHTHVpbnQgbW9uaXRvcik7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFBFUkZNT05JVE9SQU1EUFJPQykgKEdM
dWludCBtb25pdG9yKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1P
TklUT1JDT1VOVEVSREFUQUFNRFBST0MpIChHTHVpbnQgbW9uaXRvciwgR0xlbnVtIHBuYW1lLCBH
THNpemVpIGRhdGFTaXplLCBHTHVpbnQgKmRhdGEsIEdMaW50ICpieXRlc1dyaXR0ZW4pOworI2Vu
ZGlmCisKKy8qIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwICovCisjaWZuZGVmIEdMX0FNRF9w
cm9ncmFtX2JpbmFyeV9aNDAwCisjZGVmaW5lIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwIDEK
KyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEVYVCBleHRlbnNpb24gZnVuY3Rpb25z
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0VYVF9ibGVuZF9taW5tYXggKi8KKyNpZm5k
ZWYgR0xfRVhUX2JsZW5kX21pbm1heAorI2RlZmluZSBHTF9FWFRfYmxlbmRfbWlubWF4IDEKKyNl
bmRpZgorCisvKiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAqLworI2lmbmRlZiBHTF9FWFRf
ZGlzY2FyZF9mcmFtZWJ1ZmZlcgorI2RlZmluZSBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAx
CisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRGlzY2FyZEZyYW1lYnVmZmVyRVhUIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFj
aG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xESVNDQVJERlJBTUVCVUZGRVJFWFRQUk9DKSAoR0xlbnVtIHRh
cmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtICphdHRhY2htZW50cyk7
CisjZW5kaWYKKworI2lmbmRlZiBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMKKyNkZWZpbmUgR0xf
RVhUX211bHRpX2RyYXdfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdBcnJheXNFWFQgKEdMZW51bSwgR0xp
bnQgKiwgR0xzaXplaSAqLCBHTHNpemVpKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0VsZW1lbnRzRVhUIChHTGVudW0sIGNvbnN0IEdMc2l6ZWkgKiwgR0xlbnVtLCBj
b25zdCBHTHZvaWQqICosIEdMc2l6ZWkpOworI2VuZGlmIC8qIEdMX0dMRVhUX1BST1RPVFlQRVMg
Ki8KK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXQVJSQVlTRVhUUFJP
QykgKEdMZW51bSBtb2RlLCBHTGludCAqZmlyc3QsIEdMc2l6ZWkgKmNvdW50LCBHTHNpemVpIHBy
aW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1VTFRJRFJBV0VMRU1F
TlRTRVhUUFJPQykgKEdMZW51bSBtb2RlLCBjb25zdCBHTHNpemVpICpjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCogKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgor
CisvKiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAqLworI2lmbmRlZiBHTF9FWFRfcmVhZF9mb3Jt
YXRfYmdyYQorI2RlZmluZSBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAxCisjZW5kaWYKKworLyog
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICovCisjaWZuZGVmIEdMX0VYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworI2RlZmluZSBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMgMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAq
LworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyNkZWZpbmUgR0xfRVhU
X3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IDEKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV90
eXBlXzJfMTBfMTBfMTBfUkVWICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8x
MF8xMF9SRVYKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFViAxCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwor
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5k
ZWYgR0xfSU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAx
CisjZW5kaWYKKworLyogR0xfSU1HX3JlYWRfZm9ybWF0ICovCisjaWZuZGVmIEdMX0lNR19yZWFk
X2Zvcm1hdAorI2RlZmluZSBHTF9JTUdfcmVhZF9mb3JtYXQgMQorI2VuZGlmCisKKy8qIEdMX0lN
R19zaGFkZXJfYmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5CisjZGVmaW5l
IEdMX0lNR19zaGFkZXJfYmluYXJ5IDEKKyNlbmRpZgorCisvKiBHTF9JTUdfdGV4dHVyZV9jb21w
cmVzc2lvbl9wdnJ0YyAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0
YworI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCisgKiBOViBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKy8qIEdMX05WX2ZlbmNlICovCisjaWZuZGVmIEdMX05WX2ZlbmNlCisjZGVm
aW5lIEdMX05WX2ZlbmNlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVGZW5jZXNOViAoR0xzaXplaSwgY29uc3QgR0x1aW50
ICopOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2VuRmVuY2VzTlYgKEdMc2l6ZWks
IEdMdWludCAqKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsSXNGZW5jZU5W
IChHTHVpbnQpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xUZXN0RmVuY2VO
ViAoR0x1aW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldEZlbmNlaXZOViAo
R0x1aW50LCBHTGVudW0sIEdMaW50ICopOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
RmluaXNoRmVuY2VOViAoR0x1aW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFNl
dEZlbmNlTlYgKEdMdWludCwgR0xlbnVtKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xERUxFVEVGRU5DRVNOVlBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAq
ZmVuY2VzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VORkVOQ0VTTlZQUk9D
KSAoR0xzaXplaSBuLCBHTHVpbnQgKmZlbmNlcyk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJ
RU5UUllQIFBGTkdMSVNGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Cit0eXBlZGVmIEdMYm9v
bGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMVEVTVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VURkVOQ0VJVk5WUFJPQykgKEdMdWlu
dCBmZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMRklOSVNIRkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwg
R0xlbnVtIGNvbmRpdGlvbik7CisjZW5kaWYKKworLyogR0xfTlZfY292ZXJhZ2Vfc2FtcGxlICov
CisjaWZuZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBHTF9OVl9jb3ZlcmFnZV9z
YW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbENvdmVyYWdlTWFza05WIChHTGJvb2xlYW4gbWFzayk7CitHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xDb3ZlcmFnZU9wZXJhdGlvbk5WIChHTGVudW0gb3BlcmF0aW9uKTsK
KyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT1ZFUkFHRU1BU0tOVlBS
T0MpIChHTGJvb2xlYW4gbWFzayk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENP
VkVSQUdFT1BFUkFUSU9OTlZQUk9DKSAoR0xlbnVtIG9wZXJhdGlvbik7CisjZW5kaWYKKworLyog
R0xfTlZfZGVwdGhfbm9ubGluZWFyICovCisjaWZuZGVmIEdMX05WX2RlcHRoX25vbmxpbmVhcgor
I2RlZmluZSBHTF9OVl9kZXB0aF9ub25saW5lYXIgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgorICogUUNPTSBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisK
Ky8qIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9kcml2ZXJfY29u
dHJvbAorI2RlZmluZSBHTF9RQ09NX2RyaXZlcl9jb250cm9sIDEKKyNpZmRlZiBHTF9HTEVYVF9Q
Uk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9s
c1FDT00gKEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpkcml2ZXJDb250cm9scyk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9sU3RyaW5nUUNP
TSAoR0x1aW50IGRyaXZlckNvbnRyb2wsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBHTGNoYXIgKmRyaXZlckNvbnRyb2xTdHJpbmcpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRW5hYmxlRHJpdmVyQ29udHJvbFFDT00gKEdMdWludCBkcml2ZXJDb250cm9sKTsKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERpc2FibGVEcml2ZXJDb250cm9sUUNPTSAoR0x1
aW50IGRyaXZlckNvbnRyb2wpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVERSSVZFUkNPTlRST0xTUUNPTVBST0MpIChHTGludCAqbnVtLCBHTHNpemVpIHNpemUs
IEdMdWludCAqZHJpdmVyQ29udHJvbHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xHRVREUklWRVJDT05UUk9MU1RSSU5HUUNPTVBST0MpIChHTHVpbnQgZHJpdmVyQ29udHJvbCwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZHJpdmVyQ29udHJvbFN0
cmluZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVOQUJMRURSSVZFUkNPTlRS
T0xRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9sKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMRElTQUJMRURSSVZFUkNPTlRST0xRQ09NUFJPQykgKEdMdWludCBkcml2ZXJD
b250cm9sKTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldCAqLworI2lmbmRlZiBH
TF9RQ09NX2V4dGVuZGVkX2dldAorI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldCAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0
R2V0VGV4dHVyZXNRQ09NIChHTHVpbnQgKnRleHR1cmVzLCBHTGludCBtYXhUZXh0dXJlcywgR0xp
bnQgKm51bVRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEJ1
ZmZlcnNRQ09NIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdMaW50ICpudW1C
dWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFJlbmRlcmJ1ZmZl
cnNRQ09NIChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdMaW50IG1heFJlbmRlcmJ1ZmZlcnMsIEdM
aW50ICpudW1SZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4
dEdldEZyYW1lYnVmZmVyc1FDT00gKEdMdWludCAqZnJhbWVidWZmZXJzLCBHTGludCBtYXhGcmFt
ZWJ1ZmZlcnMsIEdMaW50ICpudW1GcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsRXh0R2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdlFDT00gKEdMdWludCB0ZXh0dXJlLCBH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRUZXhPYmplY3RTdGF0ZU92ZXJyaWRlaVFD
T00gKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4U3ViSW1hZ2VRQ09NIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQgKnRleGVscyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xFeHRHZXRCdWZmZXJQb2ludGVydlFDT00gKEdMZW51bSB0YXJnZXQsIEdMdm9p
ZCAqKnBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhU
R0VUVEVYVFVSRVNRQ09NUFJPQykgKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRleHR1cmVz
LCBHTGludCAqbnVtVGV4dHVyZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xF
WFRHRVRCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMs
IEdMaW50ICpudW1CdWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhU
R0VUUkVOREVSQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpyZW5kZXJidWZmZXJzLCBHTGludCBt
YXhSZW5kZXJidWZmZXJzLCBHTGludCAqbnVtUmVuZGVyYnVmZmVycyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVEZSQU1FQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpm
cmFtZWJ1ZmZlcnMsIEdMaW50IG1heEZyYW1lYnVmZmVycywgR0xpbnQgKm51bUZyYW1lYnVmZmVy
cyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFRFWExFVkVMUEFSQU1F
VEVSSVZRQ09NUFJPQykgKEdMdWludCB0ZXh0dXJlLCBHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWws
IEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEVYVFRFWE9CSkVDVFNUQVRFT1ZFUlJJREVJUUNPTVBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMRVhUR0VUVEVYU1VCSU1BR0VRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRVhUR0VUQlVGRkVSUE9JTlRFUlZRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAq
KnBhcmFtcyk7CisjZW5kaWYKKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQyICovCisjaWZuZGVm
IEdMX1FDT01fZXh0ZW5kZWRfZ2V0MgorI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldDIgMQor
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEV4dEdldFNoYWRlcnNRQ09NIChHTHVpbnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdM
aW50ICpudW1TaGFkZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFBy
b2dyYW1zUUNPTSAoR0x1aW50ICpwcm9ncmFtcywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpu
dW1Qcm9ncmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbEV4dElzUHJv
Z3JhbUJpbmFyeVFDT00gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbEV4dEdldFByb2dyYW1CaW5hcnlTb3VyY2VRQ09NIChHTHVpbnQgcHJvZ3JhbSwgR0xl
bnVtIHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKKyNlbmRpZgor
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRTSEFERVJTUUNPTVBST0MpIChH
THVpbnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50ICpudW1TaGFkZXJzKTsKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUFJPR1JBTVNRQ09NUFJPQykgKEdM
dWludCAqcHJvZ3JhbXMsIEdMaW50IG1heFByb2dyYW1zLCBHTGludCAqbnVtUHJvZ3JhbXMpOwor
dHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTEVYVElTUFJPR1JBTUJJTkFSWVFD
T01QUk9DKSAoR0x1aW50IHByb2dyYW0pOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xFWFRHRVRQUk9HUkFNQklOQVJZU09VUkNFUUNPTVBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xl
bnVtIHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKKyNlbmRpZgor
CisvKiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUgKi8KKyNpZm5kZWYgR0xfUUNPTV9wZXJm
bW9uX2dsb2JhbF9tb2RlCisjZGVmaW5lIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAxCisj
ZW5kaWYKKworLyogR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nICovCisjaWZuZGVmIEdMX1FD
T01fd3JpdGVvbmx5X3JlbmRlcmluZworI2RlZmluZSBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJp
bmcgMQorI2VuZGlmCisKKy8qIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nICovCisjaWZuZGVmIEdM
X1FDT01fdGlsZWRfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nIDEK
KyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xTdGFydFRpbGluZ1FDT00gKEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVp
bnQgaGVpZ2h0LCBHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xFbmRUaWxpbmdRQ09NIChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CisjZW5k
aWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU1RBUlRUSUxJTkdRQ09NUFJPQykg
KEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTGJpdGZp
ZWxkIHByZXNlcnZlTWFzayk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJ
TElOR1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOworI2VuZGlmCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2dsMmV4dF9oXyAqLwpJbmRl
eDogQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L2luY2x1ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1
ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorI2lm
bmRlZiBfX2dsMnBsYXRmb3JtX2hfCisjZGVmaW5lIF9fZ2wycGxhdGZvcm1faF8KKworLyogJFJl
dmlzaW9uOiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAq
LworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUg
U29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRw
Oi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisvKiBQbGF0Zm9ybS1zcGVj
aWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9wZW5HTCBFUyAyLlggIGdsMi5oCisgKgor
ICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3Vp
dCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1v
ZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAorICogdGhleSBjYW4gYmUg
aW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQg
Y2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxs
YSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmlsaW5nIGEgYnVnIGFnYWlu
c3QgcHJvZHVjdCAiT3BlbkdMLUVTIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5j
bHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmluZSBH
TF9BUElDQUxMICBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisjaWZuZGVmIEdMX0FQSUVOVFJZ
CisjZGVmaW5lIEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJRU5UUlkKKyNlbmRpZgorCisjZW5kaWYg
LyogX19nbDJwbGF0Zm9ybV9oXyAqLwpJbmRleDogQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291
cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNl
TGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VM
aW1pdHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXworI2RlZmluZSBfUkVTT1VSQ0Vf
TElNSVRTX0lOQ0xVREVEXworCitzdHJ1Y3QgVEJ1aWx0SW5SZXNvdXJjZQoreworCWludCBtYXhW
ZXJ0ZXhBdHRyaWJzOworCWludCBtYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yczsKKwlpbnQgbWF4VmFy
eWluZ1ZlY3RvcnM7CisJaW50IG1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhUZXh0dXJlSW1hZ2VVbml0czsKKwlp
bnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKKwlpbnQgbWF4RHJhd0J1ZmZlcnM7Cit9Owor
I2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCkluZGV4OiBBTkdMRS9pbmNsdWRl
L0dMU0xBTkcvU2hhZGVyTGFuZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hh
ZGVyTGFuZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKyNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTVBJ
TEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KKworI2luY2x1ZGUgIlJlc291cmNlTGltaXRzLmgiCisK
Ky8vCisvLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2Vl
biBhbiBPR0wgZHJpdmVyCisvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCisv
LworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisvLworLy8gRHJp
dmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyCisv
LyBjb21waWxlciBvcGVyYXRpb25zLgorLy8KK2ludCBTaEluaXRpYWxpemUoKTsKKy8vCisvLyBE
cml2ZXIgc2hvdWxkIGNhbGwgdGhpcyBhdCBzaHV0ZG93bi4KKy8vCitpbnQgU2hGaW5hbGl6ZSgp
OworLy8KKy8vIFR5cGVzIG9mIGxhbmd1YWdlcyB0aGUgY29tcGlsZXIgY2FuIGNvbnN1bWUuCisv
LwordHlwZWRlZiBlbnVtIHsKKyAgICBFU2hMYW5nVmVydGV4LAorICAgIEVTaExhbmdGcmFnbWVu
dCwKKyAgICBFU2hMYW5nQ291bnQsCit9IEVTaExhbmd1YWdlOworCisvLworLy8gVGhlIGxhbmd1
YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMgdG8uCisvLyBJdCBjdXJyZW50bHkg
c3VwcG9ydHMgT3BlbkdMIEVTIGFuZCBXZWJHTCBzcGVjaWZpY2F0aW9ucy4KKy8vCit0eXBlZGVm
IGVudW0geworICAgIEVTaFNwZWNHTEVTMiwKKyAgICBFU2hTcGVjV2ViR0wsCit9IEVTaFNwZWM7
CisKKy8vCisvLyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIHRoZSBjb21waWxlci4KKy8vCit0eXBl
ZGVmIGVudW0geworICAgIEVTaE9wdE5vR2VuZXJhdGlvbiwKKyAgICBFU2hPcHROb25lLAorICAg
IEVTaE9wdFNpbXBsZSwgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IGNhbiBiZSBkb25lIHF1
aWNrbHkKKyAgICBFU2hPcHRGdWxsLCAgICAgICAgIC8vIE9wdGltaXphdGlvbnMgdGhhdCB3aWxs
IHRha2UgbW9yZSB0aW1lCit9IEVTaE9wdGltaXphdGlvbkxldmVsOworCitlbnVtIFREZWJ1Z09w
dGlvbnMgeworICAgIEVEZWJ1Z09wTm9uZSAgICAgICAgICAgICAgID0gMHgwMDAsCisgICAgRURl
YnVnT3BJbnRlcm1lZGlhdGUgICAgICAgPSAweDAwMSwgIC8vIFdyaXRlcyBpbnRlcm1lZGlhdGUg
dHJlZSBpbnRvIGluZm8tbG9nLgorfTsKKworLy8KKy8vIFNoSGFuZGxlIGhlbGQgYnkgYnV0IG9w
YXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAorLy8gbWFuYWdlZCwgYW5kIGRl
LWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMgCisvLyBhcmUgZGVmaW5l
ZCBieSBhbmQgdXNlZCBieSB0aGUgY29tcGlsZXIuCisvLworLy8gSWYgaGFuZGxlIGNyZWF0aW9u
IGZhaWxzLCAwIHdpbGwgYmUgcmV0dXJuZWQuCisvLwordHlwZWRlZiB2b2lkKiBTaEhhbmRsZTsK
KworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGls
ZXIgb2JqZWN0cy4KKy8vCitTaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdl
LCBFU2hTcGVjKTsgIC8vIG9uZSBwZXIgc2hhZGVyCit2b2lkIFNoRGVzdHJ1Y3QoU2hIYW5kbGUp
OworCisvLworLy8gVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgYm9vbGVhbiwgaW5k
aWNhdGluZworLy8gc3VjY2VzcyBvciBmYWlsdXJlLgorLy8KKy8vIFRoZSBpbmZvLWxvZyBzaG91
bGQgYmUgd3JpdHRlbiBieSBTaENvbXBpbGUgaW50byAKKy8vIFNoSGFuZGxlLCBzbyBpdCBjYW4g
YW5zd2VyIGZ1dHVyZSBxdWVyaWVzLgorLy8KK2ludCBTaENvbXBpbGUoCisgICAgY29uc3QgU2hI
YW5kbGUsCisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIGNvbnN0
IGludCBudW1TdHJpbmdzLAorICAgIGNvbnN0IEVTaE9wdGltaXphdGlvbkxldmVsLAorICAgIGNv
bnN0IFRCdWlsdEluUmVzb3VyY2UgKnJlc291cmNlcywKKyAgICBpbnQgZGVidWdPcHRpb25zCisg
ICAgKTsKKworLy8KKy8vIEFsbCB0aGUgZm9sbG93aW5nIHJldHVybiAwIGlmIHRoZSBpbmZvcm1h
dGlvbiBpcyBub3QKKy8vIGF2YWlsYWJsZSBpbiB0aGUgb2JqZWN0IHBhc3NlZCBkb3duLCBvciB0
aGUgb2JqZWN0IGlzIGJhZC4KKy8vCitjb25zdCBjaGFyKiBTaEdldEluZm9Mb2coY29uc3QgU2hI
YW5kbGUpOworY29uc3QgY2hhciogU2hHZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlKTsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9DT01QSUxFUl9JTlRF
UkZBQ0VfSU5DTFVERURfCkluZGV4OiBBTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI2OSBAQAorI2lmbmRlZiBfX2tocnBsYXRmb3JtX2hfCisjZGVmaW5lIF9fa2hycGxhdGZv
cm1faF8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFRoZSBLaHJvbm9zIEdyb3Vw
IEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn
ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu
ZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIp
LCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n
CisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg
bWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj
b3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwg
Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiog
VEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1Ig
T1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qIEtocm9ub3MgcGxhdGZv
cm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zLgorICoKKyAqICRSZXZpc2lvbjogOTM1
NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUyOjI1IC0wNzAwIChXZWQsIDIxIE9jdCAyMDA5
KSAkCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBw
bGF0Zm9ybS4gQWRvcHRlcnMgYXJlCisgKiBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBwbGF0Zm9ybSBz
cGVjaWZpYyBtb2RpZmljYXRpb25zIHRvIHRoZSBLaHJvbm9zCisgKiBncm91cCBzbyB0aGF0IHRo
ZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuCisgKiBQ
bGVhc2Ugc3VibWl0IGNoYW5nZXMgYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25v
cyBCdWd6aWxsYQorICogKGh0dHA6Ly9raHJvbm9zLm9yZy9idWd6aWxsYSkgYnkgZmlsaW5nIGEg
YnVnIGFnYWluc3QgcHJvZHVjdAorICogIktocm9ub3MgKGdlbmVyYWwpIiBjb21wb25lbnQgIlJl
Z2lzdHJ5Ii4KKyAqCisgKiBBIHByZWRlZmluZWQgdGVtcGxhdGUgd2hpY2ggZmlsbHMgaW4gc29t
ZSBvZiB0aGUgYnVnIGZpZWxkcyBjYW4gYmUKKyAqIHJlYWNoZWQgdXNpbmcgaHR0cDovL3Rpbnl1
cmwuY29tL2tocnBsYXRmb3JtLWgtYnVncmVwb3J0LCBidXQgeW91CisgKiBtdXN0IGNyZWF0ZSBh
IEJ1Z3ppbGxhIGxvZ2luIGZpcnN0LgorICoKKyAqCisgKiBTZWUgdGhlIEltcGxlbWVudGVyJ3Mg
R3VpZGVsaW5lcyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhpcyBmaWxlCisgKiBzaG91
bGQgYmUgbG9jYXRlZCBvbiB5b3VyIHN5c3RlbSBhbmQgZm9yIG1vcmUgZGV0YWlscyBvZiBpdHMg
dXNlOgorICogICAgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9pbXBsZW1lbnRlcnNf
Z3VpZGUucGRmCisgKgorICogVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBhcworICogICAg
ICAgICNpbmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKyAqIGJ5IEtocm9ub3MgY2xpZW50IEFQ
SSBoZWFkZXIgZmlsZXMgdGhhdCB1c2UgaXRzIHR5cGVzIGFuZCBkZWZpbmVzLgorICoKKyAqIFRo
ZSB0eXBlcyBpbiBraHJwbGF0Zm9ybS5oIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gZGVmaW5lIEFQ
SS1zcGVjaWZpYyB0eXBlcy4KKyAqCisgKiBUeXBlcyBkZWZpbmVkIGluIGtocnBsYXRmb3JtLmg6
CisgKiAgICBraHJvbm9zX2ludDhfdCAgICAgICAgICAgICAgc2lnbmVkICAgOCAgYml0CisgKiAg
ICBraHJvbm9zX3VpbnQ4X3QgICAgICAgICAgICAgdW5zaWduZWQgOCAgYml0CisgKiAgICBraHJv
bm9zX2ludDE2X3QgICAgICAgICAgICAgc2lnbmVkICAgMTYgYml0CisgKiAgICBraHJvbm9zX3Vp
bnQxNl90ICAgICAgICAgICAgdW5zaWduZWQgMTYgYml0CisgKiAgICBraHJvbm9zX2ludDMyX3Qg
ICAgICAgICAgICAgc2lnbmVkICAgMzIgYml0CisgKiAgICBraHJvbm9zX3VpbnQzMl90ICAgICAg
ICAgICAgdW5zaWduZWQgMzIgYml0CisgKiAgICBraHJvbm9zX2ludDY0X3QgICAgICAgICAgICAg
c2lnbmVkICAgNjQgYml0CisgKiAgICBraHJvbm9zX3VpbnQ2NF90ICAgICAgICAgICAgdW5zaWdu
ZWQgNjQgYml0CisgKiAgICBraHJvbm9zX2ludHB0cl90ICAgICAgICAgICAgc2lnbmVkICAgc2Ft
ZSBudW1iZXIgb2YgYml0cyBhcyBhIHBvaW50ZXIKKyAqICAgIGtocm9ub3NfdWludHB0cl90ICAg
ICAgICAgICB1bnNpZ25lZCBzYW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlcgorICogICAg
a2hyb25vc19zc2l6ZV90ICAgICAgICAgICAgIHNpZ25lZCAgIHNpemUKKyAqICAgIGtocm9ub3Nf
dXNpemVfdCAgICAgICAgICAgICB1bnNpZ25lZCBzaXplCisgKiAgICBraHJvbm9zX2Zsb2F0X3Qg
ICAgICAgICAgICAgc2lnbmVkICAgMzIgYml0IGZsb2F0aW5nIHBvaW50CisgKiAgICBraHJvbm9z
X3RpbWVfbnNfdCAgICAgICAgICAgdW5zaWduZWQgNjQgYml0IHRpbWUgaW4gbmFub3NlY29uZHMK
KyAqICAgIGtocm9ub3NfdXRpbWVfbmFub3NlY29uZHNfdCB1bnNpZ25lZCB0aW1lIGludGVydmFs
IG9yIGFic29sdXRlIHRpbWUgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW5vc2Vjb25kcworICogICAga2hyb25vc19zdGltZV9uYW5vc2Vjb25kc190IHNp
Z25lZCB0aW1lIGludGVydmFsIGluIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9zX2Jvb2xlYW5f
ZW51bV90ICAgICAgZW51bWVyYXRlZCBib29sZWFuIHR5cGUuIFRoaXMgc2hvdWxkCisgKiAgICAg
IG9ubHkgYmUgdXNlZCBhcyBhIGJhc2UgdHlwZSB3aGVuIGEgY2xpZW50IEFQSSdzIGJvb2xlYW4g
dHlwZSBpcworICogICAgICBhbiBlbnVtLiBDbGllbnQgQVBJcyB3aGljaCB1c2UgYW4gaW50ZWdl
ciBvciBvdGhlciB0eXBlIGZvcgorICogICAgICBib29sZWFucyBjYW5ub3QgdXNlIHRoaXMgYXMg
dGhlIGJhc2UgdHlwZSBmb3IgdGhlaXIgYm9vbGVhbi4KKyAqCisgKiBUb2tlbnMgZGVmaW5lZCBp
biBraHJwbGF0Zm9ybS5oOgorICoKKyAqICAgIEtIUk9OT1NfRkFMU0UsIEtIUk9OT1NfVFJVRSBF
bnVtZXJhdGVkIGJvb2xlYW4gZmFsc2UvdHJ1ZSB2YWx1ZXMuCisgKgorICogICAgS0hST05PU19T
VVBQT1JUX0lOVDY0IGlzIDEgaWYgNjQgYml0IGludGVnZXJzIGFyZSBzdXBwb3J0ZWQ7IG90aGVy
d2lzZSAwLgorICogICAgS0hST05PU19TVVBQT1JUX0ZMT0FUIGlzIDEgaWYgZmxvYXRzIGFyZSBz
dXBwb3J0ZWQ7IG90aGVyd2lzZSAwLgorICoKKyAqIENhbGxpbmcgY29udmVudGlvbiBtYWNyb3Mg
ZGVmaW5lZCBpbiB0aGlzIGZpbGU6CisgKiAgICBLSFJPTk9TX0FQSUNBTEwKKyAqICAgIEtIUk9O
T1NfQVBJRU5UUlkKKyAqICAgIEtIUk9OT1NfQVBJQVRUUklCVVRFUworICoKKyAqIFRoZXNlIG1h
eSBiZSB1c2VkIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXM6CisgKgorICogICAgICBLSFJPTk9T
X0FQSUNBTEwgdm9pZCBLSFJPTk9TX0FQSUVOVFJZIGZ1bmNuYW1lKAorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsCisgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYXJnMikgS0hST05PU19BUElBVFRSSUJVVEVTOworICovCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUNBTEwKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICogVGhpcyBwcmVjZWRlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0
aW9uIGluIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikg
JiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKyMgICBkZWZpbmUgS0hST05PU19BUElDQUxM
IF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VsaWYgZGVmaW5lZCAoX19TWU1CSUFOMzJfXykKKyMg
ICBkZWZpbmUgS0hST05PU19BUElDQUxMIElNUE9SVF9DCisjZWxzZQorIyAgIGRlZmluZSBLSFJP
Tk9TX0FQSUNBTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERlZmluaXRpb24g
b2YgS0hST05PU19BUElFTlRSWQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3Mg
dGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiAgYW5kIHByZWNlZGVzIHRoZSBmdW5jdGlv
bgorICogbmFtZSBpbiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlLgorICovCisjaWYgZGVmaW5lZChf
V0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQ
X18pCisgICAgLyogV2luMzIgYnV0IG5vdCBXaW5DRSAqLworIyAgIGRlZmluZSBLSFJPTk9TX0FQ
SUVOVFJZIF9fc3RkY2FsbAorI2Vsc2UKKyMgICBkZWZpbmUgS0hST05PU19BUElFTlRSWQorI2Vu
ZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUFU
VFJJQlVURVMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmb2xsb3dzIHRoZSBjbG9zaW5n
IHBhcmVudGhlc2lzIG9mIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgYXJndW1lbnRzLgorICovCisj
aWYgZGVmaW5lZCAoX19BUk1DQ18yX18pCisjZGVmaW5lIEtIUk9OT1NfQVBJQVRUUklCVVRFUyBf
X3NvZnRmcAorI2Vsc2UKKyNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVTCisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBiYXNpYyB0eXBlIGRlZmluaXRpb25zCisgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKyNpZiAoZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lP
Tl9fID49IDE5OTkwMUwpIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19TQ09fXykg
fHwgZGVmaW5lZChfX1VTTENfXykKKworCisvKgorICogVXNpbmcgPHN0ZGludC5oPgorICovCisj
aW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9u
b3NfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAga2hyb25vc191aW50
MzJfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90Owor
dHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmlu
ZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9B
VCAgIDEKKworI2VsaWYgZGVmaW5lZChfX1ZNUyApIHx8IGRlZmluZWQoX19zZ2kpCisKKy8qCisg
KiBVc2luZyA8aW50dHlwZXMuaD4KKyAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVm
IGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdWludDMy
X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAg
ICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAg
ICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAx
CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5lZChfV0lO
MzIpICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18pCisKKy8qCisgKiBXaW4zMgorICovCit0
eXBlZGVmIF9faW50MzIgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYg
dW5zaWduZWQgX19pbnQzMiAgICAgICAga2hyb25vc191aW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2
NCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2lu
dDY0ICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5U
NjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEKKworI2VsaWYgZGVmaW5l
ZChfX3N1bl9fKSB8fCBkZWZpbmVkKF9fZGlnaXRhbF9fKQorCisvKgorICogU3VuIG9yIERpZ2l0
YWwKKyAqLwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7CisjaWYg
ZGVmaW5lZChfX2FyY2g2NF9fKSB8fCBkZWZpbmVkKF9MUDY0KQordHlwZWRlZiBsb25nIGludCAg
ICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
ICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgaW50ICAg
ICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
IGtocm9ub3NfdWludDY0X3Q7CisjZW5kaWYgLyogX19hcmNoNjRfXyAqLworI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEK
KworI2VsaWYgMAorCisvKgorICogSHlwb3RoZXRpY2FsIHBsYXRmb3JtIHdpdGggbm8gZmxvYXQg
b3IgaW50NjQgc3VwcG9ydAorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGto
cm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191
aW50MzJfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMAorI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfRkxPQVQgICAwCisKKyNlbHNlCisKKy8qCisgKiBHZW5lcmljIGZhbGxiYWNr
CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAg
ICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJv
bm9zX3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2lu
dDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7
CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQ
T1JUX0ZMT0FUICAgMQorCisjZW5kaWYKKworCisvKgorICogVHlwZXMgdGhhdCBhcmUgKHNvIGZh
cikgdGhlIHNhbWUgb24gYWxsIHBsYXRmb3JtcworICovCit0eXBlZGVmIHNpZ25lZCAgIGNoYXIg
ICAgICAgICAga2hyb25vc19pbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAg
a2hyb25vc191aW50OF90OwordHlwZWRlZiBzaWduZWQgICBzaG9ydCBpbnQgICAgIGtocm9ub3Nf
aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50ICAgICBraHJvbm9zX3VpbnQxNl90
OwordHlwZWRlZiBzaWduZWQgICBsb25nICBpbnQgICAgIGtocm9ub3NfaW50cHRyX3Q7Cit0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgIGludCAgICAga2hyb25vc191aW50cHRyX3Q7Cit0eXBlZGVmIHNp
Z25lZCAgIGxvbmcgIGludCAgICAga2hyb25vc19zc2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBpbnQgICAgIGtocm9ub3NfdXNpemVfdDsKKworI2lmIEtIUk9OT1NfU1VQUE9SVF9GTE9B
VAorLyoKKyAqIEZsb2F0IHR5cGUKKyAqLwordHlwZWRlZiAgICAgICAgICBmbG9hdCAgICAgICAg
IGtocm9ub3NfZmxvYXRfdDsKKyNlbmRpZgorCisjaWYgS0hST05PU19TVVBQT1JUX0lOVDY0Cisv
KiBUaW1lIHR5cGVzCisgKgorICogVGhlc2UgdHlwZXMgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50
IGEgdGltZSBpbnRlcnZhbCBpbiBuYW5vc2Vjb25kcyBvcgorICogYW4gYWJzb2x1dGUgVW5hZGp1
c3RlZCBTeXN0ZW0gVGltZS4gIFVuYWRqdXN0ZWQgU3lzdGVtIFRpbWUgaXMgdGhlIG51bWJlcgor
ICogb2YgbmFub3NlY29uZHMgc2luY2Ugc29tZSBhcmJpdHJhcnkgc3lzdGVtIGV2ZW50IChlLmcu
IHNpbmNlIHRoZSBsYXN0CisgKiB0aW1lIHRoZSBzeXN0ZW0gYm9vdGVkKS4gIFRoZSBVbmFkanVz
dGVkIFN5c3RlbSBUaW1lIGlzIGFuIHVuc2lnbmVkCisgKiA2NCBiaXQgdmFsdWUgdGhhdCB3cmFw
cyBiYWNrIHRvIDAgZXZlcnkgNTg0IHllYXJzLiAgVGltZSBpbnRlcnZhbHMKKyAqIG1heSBiZSBl
aXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkLgorICovCit0eXBlZGVmIGtocm9ub3NfdWludDY0X3Qg
ICAgICAga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190OwordHlwZWRlZiBraHJvbm9zX2ludDY0
X3QgICAgICAgIGtocm9ub3Nfc3RpbWVfbmFub3NlY29uZHNfdDsKKyNlbmRpZgorCisvKgorICog
RHVtbXkgdmFsdWUgdXNlZCB0byBwYWQgZW51bSB0eXBlcyB0byAzMiBiaXRzLgorICovCisjaWZu
ZGVmIEtIUk9OT1NfTUFYX0VOVU0KKyNkZWZpbmUgS0hST05PU19NQVhfRU5VTSAweDdGRkZGRkZG
CisjZW5kaWYKKworLyoKKyAqIEVudW1lcmF0ZWQgYm9vbGVhbiB0eXBlCisgKgorICogVmFsdWVz
IG90aGVyIHRoYW4gemVybyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSB0cnVlLiAgVGhlcmVm
b3JlCisgKiBjb21wYXJpc29ucyBzaG91bGQgbm90IGJlIG1hZGUgYWdhaW5zdCBLSFJPTk9TX1RS
VUUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgS0hST05PU19GQUxTRSA9IDAsCisgICAgS0hS
T05PU19UUlVFICA9IDEsCisgICAgS0hST05PU19CT09MRUFOX0VOVU1fRk9SQ0VfU0laRSA9IEtI
Uk9OT1NfTUFYX0VOVU0KK30ga2hyb25vc19ib29sZWFuX2VudW1fdDsKKworI2VuZGlmIC8qIF9f
a2hycGxhdGZvcm1faF8gKi8KSW5kZXg6IEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cGF1bHMubW9kZTF2Mwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVw
cm9qL3BhdWxzLm1vZGUxdjMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvYnVpbGRfYW5nbGUu
eGNvZGVwcm9qL3BhdWxzLm1vZGUxdjMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2OSBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQ
VUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29t
L0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGlj
dD4KKwk8a2V5PkFjdGl2ZVBlcnNwZWN0aXZlTmFtZTwva2V5PgorCTxzdHJpbmc+UHJvamVjdDwv
c3RyaW5nPgorCTxrZXk+QWxsb3dlZE1vZHVsZXM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0Pgor
CQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxr
ZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9k
dWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJpbmc+CisJ
CQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+R3JvdXBzIGFuZCBGaWxlcyBPdXRsaW5lIFZp
ZXc8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8
L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5Pgor
CQkJPHN0cmluZz5uPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5Q
QlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PkVkaXRvcjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2Fk
UGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9r
ZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3Ry
aW5nPlhDVGFza0xpc3RNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0
cmluZz5UYXNrIExpc3Q8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVu
ZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3Rh
bmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5Pgor
CQkJPHN0cmluZz5YQ0RldGFpbE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJ
CQk8c3RyaW5nPkZpbGUgYW5kIFNtYXJ0IEdyb3VwIERldGFpbCBWaWV3ZXI8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz4xPC9z
dHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhCdWlsZFJlc3VsdHNN
b2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZXRhaWxlZCBC
dWlsZCBSZXN1bHRzIFZpZXdlcjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtl
eT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4
SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9r
ZXk+CisJCQk8c3RyaW5nPlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdCBCYXRjaCBGaW5kIFRvb2w8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9z
dHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5YQ1Byb2plY3RGb3JtYXRD
b25mbGljdHNNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Q
cm9qZWN0IEZvcm1hdCBDb25mbGljdHMgTGlzdDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0
PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJ
CTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+
TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3RyaW5nPgorCQkJ
PGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkJvb2ttYXJrcyBUb29sPC9zdHJpbmc+CisJCTwv
ZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5n
Pjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3Ry
aW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQ2xhc3NCcm93c2VyTW9k
dWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Q2xhc3MgQnJvd3Nl
cjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwv
a2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJ
CQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBC
WENWU01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNvdXJj
ZSBDb2RlIENvbnRyb2wgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtl
eT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4
SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9r
ZXk+CisJCQk8c3RyaW5nPlBCWERlYnVnQnJlYWtwb2ludHNNb2R1bGU8L3N0cmluZz4KKwkJCTxr
ZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBCcmVha3BvaW50cyBUb29sPC9zdHJpbmc+
CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8
c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+
bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENEb2NrYWJsZUlu
c3BlY3Rvcjwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkluc3BlY3Rv
cjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwv
a2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJ
CQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBC
WE9wZW5RdWlja2x5TW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJp
bmc+T3BlbiBRdWlja2x5IFRvb2w8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxr
ZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1h
eEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz4xPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwv
a2V5PgorCQkJPHN0cmluZz5QQlhEZWJ1Z1Nlc3Npb25Nb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1Z2dlcjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4K
KwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWERlYnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJ
CQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RGVidWcgQ29uc29sZTwvc3RyaW5nPgorCQk8
L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmlu
Zz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0
cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDU25hcHNob3RNb2R1bGU8
L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5TbmFwc2hvdHMgVG9vbDwv
c3RyaW5nPgorCQk8L2RpY3Q+CisJPC9hcnJheT4KKwk8a2V5PkJ1bmRsZVBhdGg8L2tleT4KKwk8
c3RyaW5nPi9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZUb29sc0ludGVy
ZmFjZS5mcmFtZXdvcmsvUmVzb3VyY2VzPC9zdHJpbmc+CisJPGtleT5EZXNjcmlwdGlvbjwva2V5
PgorCTxzdHJpbmc+RGVmYXVsdERlc2NyaXB0aW9uS2V5PC9zdHJpbmc+CisJPGtleT5Eb2NraW5n
U3lzdGVtVmlzaWJsZTwva2V5PgorCTxmYWxzZS8+CisJPGtleT5FeHRlbnNpb248L2tleT4KKwk8
c3RyaW5nPm1vZGUxdjM8L3N0cmluZz4KKwk8a2V5PkZhdkJhckNvbmZpZzwva2V5PgorCTxkaWN0
PgorCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCTxzdHJpbmc+RkJDNzZCNTgx
MUY2MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtTmFtZXM8L2tl
eT4KKwkJPGRpY3QvPgorCQk8a2V5PlhDQmFyTW9kdWxlSXRlbXM8L2tleT4KKwkJPGFycmF5Lz4K
Kwk8L2RpY3Q+CisJPGtleT5GaXJzdFRpbWVXaW5kb3dEaXNwbGF5ZWQ8L2tleT4KKwk8ZmFsc2Uv
PgorCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCTxzdHJpbmc+Y29tLmFwcGxlLnBlcnNwZWN0aXZl
cy5wcm9qZWN0Lm1vZGUxdjM8L3N0cmluZz4KKwk8a2V5Pk1ham9yVmVyc2lvbjwva2V5PgorCTxp
bnRlZ2VyPjMzPC9pbnRlZ2VyPgorCTxrZXk+TWlub3JWZXJzaW9uPC9rZXk+CisJPGludGVnZXI+
MDwvaW50ZWdlcj4KKwk8a2V5Pk5hbWU8L2tleT4KKwk8c3RyaW5nPkRlZmF1bHQ8L3N0cmluZz4K
Kwk8a2V5Pk5vdGlmaWNhdGlvbnM8L2tleT4KKwk8YXJyYXkvPgorCTxrZXk+T3BlbkVkaXRvcnM8
L2tleT4KKwk8YXJyYXkvPgorCTxrZXk+UGVyc3BlY3RpdmVXaWR0aHM8L2tleT4KKwk8YXJyYXk+
CisJCTxpbnRlZ2VyPi0xPC9pbnRlZ2VyPgorCQk8aW50ZWdlcj4tMTwvaW50ZWdlcj4KKwk8L2Fy
cmF5PgorCTxrZXk+UGVyc3BlY3RpdmVzPC9rZXk+CisJPGFycmF5PgorCQk8ZGljdD4KKwkJCTxr
ZXk+Q2hvc2VuVG9vbGJhckl0ZW1zPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5hY3Rp
dmUtY29tYm8tcG9wdXA8L3N0cmluZz4KKwkJCQk8c3RyaW5nPmFjdGlvbjwvc3RyaW5nPgorCQkJ
CTxzdHJpbmc+TlNUb29sYmFyRmxleGlibGVTcGFjZUl0ZW08L3N0cmluZz4KKwkJCQk8c3RyaW5n
PmRlYnVnZ2VyLWVuYWJsZS1icmVha3BvaW50czwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YnVpbGQt
YW5kLWdvPC9zdHJpbmc+CisJCQkJPHN0cmluZz5jb20uYXBwbGUuaWRlLlBCWFRvb2xiYXJTdG9w
QnV0dG9uPC9zdHJpbmc+CisJCQkJPHN0cmluZz5nZXQtaW5mbzwvc3RyaW5nPgorCQkJCTxzdHJp
bmc+TlNUb29sYmFyRmxleGlibGVTcGFjZUl0ZW08L3N0cmluZz4KKwkJCQk8c3RyaW5nPmNvbS5h
cHBsZS5wYngudG9vbGJhci5zZWFyY2hmaWVsZDwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+Q29udHJvbGxlckNsYXNzQmFzZU5hbWU8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJ
CQk8a2V5Pkljb25OYW1lPC9rZXk+CisJCQk8c3RyaW5nPldpbmRvd09mUHJvamVjdFdpdGhFZGl0
b3I8L3N0cmluZz4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz5wZXJzcGVj
dGl2ZS5wcm9qZWN0PC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxmYWxz
ZS8+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8
a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQk8dHJ1ZS8+CisJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PlBCWEJvdHRvbVNtYXJ0
R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz4xQzM3RkJBQzA0
NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQUFDMDQ1MDlDRDAw
MDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAy
PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8L3N0cmlu
Zz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5nPgorCQkJ
CQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJCQkJPHN0
cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFD
QzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJCTxr
ZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3
MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwv
a2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5QQlhQcm9qZWN0
U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJPGRp
Y3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldpZHRoc0tleTwv
a2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+MjI2PC9yZWFsPgorCQkJCQkJCTwv
YXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8
L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5n
PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3Jv
dXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9r
ZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjVCQkVGRjlCOTE3MzgyOTdCOTVD
NTY4RDwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4Njwv
c3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjQ2NkUxRDA1MzFBNzlCNTgxM0U4QTdGODwvc3RyaW5n
PgorCQkJCQkJCQk8c3RyaW5nPkUwRURDNDEzMEU3RDM3NDMxOENFNzJCRTwvc3RyaW5nPgorCQkJ
CQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQk8
c3RyaW5nPkZCMzlENkYzMTIwMEZEQTEwMDA4OEU2OTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5n
PkZCMzlENkY0MTIwMEZEQTEwMDA4OEU2OTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPkZCMzlE
NkY1MTIwMEZEQTEwMDA4OEU2OTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1
MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhT
bWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJ
CTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+Njk8L2ludGVnZXI+
CisJCQkJCQkJCQk8aW50ZWdlcj42NzwvaW50ZWdlcj4KKwkJCQkJCQkJCTxpbnRlZ2VyPjYxPC9p
bnRlZ2VyPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5Q
QlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVZpc2libGVSZWN0S2V5PC9rZXk+CisJ
CQkJCQkJPHN0cmluZz57ezAsIDU2Nn0sIHsyMjYsIDc2MH19PC9zdHJpbmc+CisJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXkv
PgorCQkJCQkJPGtleT5YQ0luY2x1ZGVQZXJzcGVjdGl2ZXNTd2l0Y2g8L2tleT4KKwkJCQkJCTx0
cnVlLz4KKwkJCQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4KKwkJCQkJCTxzdHJpbmc+Y29t
LmFwcGxlLlhjb2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJ
PGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5
PkZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsyNDMsIDc3OH19PC9zdHJpbmc+
CisJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJPGFy
cmF5PgorCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTxyZWFsPjIy
NjwvcmVhbD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9r
ZXk+CisJCQkJCQk8c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJ
CQkJCTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJPHN0cmluZz5QQlhTbWFy
dEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJ
CQkJPHN0cmluZz4yNDNwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCQk8ZGljdD4KKwkJCQkJ
PGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+
Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5Q
QlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRTBCMjAzMDY0NzFF
MDYwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPk91dHB1dEdMU0wuaDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlBCWFNwbGl0TW9kdWxlSW5OYXZpZ2F0b3JLZXk8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJCQk8a2V5PlNwbGl0MDwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5Q
QlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDQwNjQ3
MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFi
ZWw8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPk91dHB1dEdMU0wuaDwvc3RyaW5nPgorCQkJCQkJ
CQkJCTxrZXk+X2hpc3RvcnlDYXBhY2l0eTwva2V5PgorCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2lu
dGVnZXI+CisJCQkJCQkJCQkJPGtleT5ib29rbWFyazwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+
RkIzOUQ2RjYxMjAwRkRBMjAwMDg4RTY5PC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5oaXN0b3J5
PC9rZXk+CisJCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI0MTFG
Nzk1N0EwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI1MTFGNzk1
N0EwMDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEI2MTFGNzk1N0Ew
MDgxRjVCQTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPkZCM0M1MEM5MTFGNzlCMjMwMDgx
RjVCQTwvc3RyaW5nPgorCQkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJ
CQkJCQk8a2V5PlNwbGl0Q291bnQ8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+MTwvc3RyaW5nPgor
CQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTxrZXk+U3RhdHVzQmFyVmlzaWJpbGl0eTwva2V5Pgor
CQkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NDcyLCA1NTV9fTwvc3RyaW5nPgorCQkJCQkJCQk8
a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5
IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz41NTVwdDwvc3RyaW5nPgor
CQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVH
VUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDUwNjQ3MUUwNjAwOTdBNUY0PC9zdHJp
bmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+RGV0YWlsPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0
cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8
L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDU2MH0sIHs0NzIsIDIxOH19PC9zdHJpbmc+CisJ
CQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4wIDU5
IDcyMCA4MTkgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4K
KwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjIxOHB0PC9zdHJp
bmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwv
a2V5PgorCQkJCQk8c3RyaW5nPjQ3MnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJh
eT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Qcm9qZWN0PC9zdHJpbmc+CisJCQk8
a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5YQ01vZHVs
ZURvY2s8L3N0cmluZz4KKwkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJp
bmc+CisJCQkJPHN0cmluZz5YQ01vZHVsZURvY2s8L3N0cmluZz4KKwkJCQk8c3RyaW5nPlBCWE5h
dmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJPHN0cmluZz5YQ0RldGFpbE1vZHVsZTwvc3RyaW5n
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+
CisJCQkJPHN0cmluZz5GQjM5RDZGNzEyMDBGREEyMDAwODhFNjk8L3N0cmluZz4KKwkJCQk8c3Ry
aW5nPjFDRTBCMUZFMDY0NzFERUQwMDk3QTVGNDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+RkIzOUQ2
RjgxMjAwRkRBMjAwMDg4RTY5PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjIwMzA2NDcxRTA2
MDA5N0E1RjQ8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDRTBCMjA1MDY0NzFFMDYwMDk3QTVGNDwv
c3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ1VzZXJEZWZhdWx0c01p
bm9yVmVyc2lvbjwva2V5PgorCQkJPHN0cmluZz4yPC9zdHJpbmc+CisJCQk8a2V5PlRvb2xiYXJD
b25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmRlZmF1
bHRWMzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5Db250cm9sbGVyQ2xh
c3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+SWNvbk5hbWU8
L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9qZWN0PC9zdHJpbmc+CisJCQk8a2V5PklkZW50
aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+cGVyc3BlY3RpdmUubW9ycGg8L3N0cmluZz4KKwkJCTxr
ZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+TGF5
b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+QmVjb21lQWN0aXZl
PC9rZXk+CisJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCTxrZXk+Q29udGVudENvbmZp
Z3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PlBCWEJvdHRvbVNtYXJ0R3Jv
dXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz4xQzM3RkJBQzA0NTA5
Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQUFDMDQ1MDlDRDAwMDAw
MDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMwOEU3N0MwNDU0OTYxMDAwQzkxNEJEPC9z
dHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4K
KwkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MzlDRDExMjExMDEwMjwvc3RyaW5nPgorCQkJCQkJ
CTxzdHJpbmc+RTI2NDRCMzUwNTNCNjlCMjAwMjExMjU2PC9zdHJpbmc+CisJCQkJCQkJPHN0cmlu
Zz4xQzM3RkFCQzA0NTA5Q0QwMDAxMDAxMDQ8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDQzBF
QTQwMDQzNTBFRjkwMDQ0NDEwQjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUNDMEVBNDAwNDM1
MEVGOTAwNDExMTBCPC9zdHJpbmc+CisJCQkJCQk8L2FycmF5PgorCQkJCQkJPGtleT5QQlhQcm9q
ZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJPHN0cmluZz4xMUUwQjFGRTA2NDcxREVEMDA5N0E1
RjQ8L3N0cmluZz4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJ
CQk8c3RyaW5nPkZpbGVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RTdHJ1Y3R1cmVQ
cm92aWRlZDwva2V5PgorCQkJCQkJPHN0cmluZz55ZXM8L3N0cmluZz4KKwkJCQkJCTxrZXk+UEJY
U21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5EYXRhPC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uV2lkdGhzS2V5PC9rZXk+CisJCQkJ
CQkJPGFycmF5PgorCQkJCQkJCQk8cmVhbD4xODY8L3JlYWw+CisJCQkJCQkJPC9hcnJheT4KKwkJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uc0tleV92NDwva2V5PgorCQkJ
CQkJCTxhcnJheT4KKwkJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1uPC9zdHJpbmc+CisJCQkJCQkJ
PC9hcnJheT4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1
bGVPdXRsaW5lU3RhdGVLZXlfdjc8L2tleT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+UEJY
U21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVFeHBhbnNpb25LZXk8L2tleT4KKwkJCQkJ
CQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+MjlCOTczMTRGRENGQTM5NDExQ0EyQ0VBPC9zdHJp
bmc+CisJCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJ
CQkJCQkJPC9hcnJheT4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGlu
ZVN0YXRlU2VsZWN0aW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8YXJyYXk+
CisJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJ
CTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0
ZVZpc2libGVSZWN0S2V5PC9rZXk+CisJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MTg2LCAzMzd9
fTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGtleT5QQlhUb3BTbWFydEdyb3VwR0lE
czwva2V5PgorCQkJCQkJPGFycmF5Lz4KKwkJCQkJCTxrZXk+WENJbmNsdWRlUGVyc3BlY3RpdmVz
U3dpdGNoPC9rZXk+CisJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJPGtleT5YQ1No
YXJpbmdUb2tlbjwva2V5PgorCQkJCQkJPHN0cmluZz5jb20uYXBwbGUuWGNvZGUuR0ZTaGFyaW5n
VG9rZW48L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQk8ZGljdD4KKwkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCTxz
dHJpbmc+e3swLCAwfSwgezIwMywgMzU1fX08L3N0cmluZz4KKwkJCQkJCTxrZXk+R3JvdXBUcmVl
VGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz5N
YWluQ29sdW1uPC9zdHJpbmc+CisJCQkJCQkJPHJlYWw+MTg2PC9yZWFsPgorCQkJCQkJPC9hcnJh
eT4KKwkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+Mzcz
IDI2OSA2OTAgMzk3IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8
a2V5Pk1vZHVsZTwva2V5PgorCQkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9z
dHJpbmc+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0
cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8
c3RyaW5nPk1vcnBoPC9zdHJpbmc+CisJCQk8a2V5PlByZWZlcnJlZFdpZHRoPC9rZXk+CisJCQk8
aW50ZWdlcj4zMDA8L2ludGVnZXI+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPHN0cmluZz5YQ01vZHVsZURvY2s8L3N0cmluZz4KKwkJCQk8c3RyaW5nPlBC
WFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5UYWJs
ZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjExRTBCMUZFMDY0NzFE
RUQwMDk3QTVGNDwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3Vy
YXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuZGVmYXVsdC5zaG9y
dFYzPC9zdHJpbmc+CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+UGVyc3BlY3RpdmVzQmFy
VmlzaWJsZTwva2V5PgorCTxmYWxzZS8+CisJPGtleT5TaGVsZklzVmlzaWJsZTwva2V5PgorCTxm
YWxzZS8+CisJPGtleT5Tb3VyY2VEZXNjcmlwdGlvbjwva2V5PgorCTxzdHJpbmc+ZmlsZSBhdCAn
L0RldmVsb3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RldlRvb2xzSW50ZXJmYWNlLmZy
YW1ld29yay9SZXNvdXJjZXMvWENQZXJzcGVjdGl2ZXNTcGVjaWZpY2F0aW9uTW9kZTEueGNwZXJz
cGVjJzwvc3RyaW5nPgorCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJPHRydWUvPgor
CTxrZXk+VGltZVN0YW1wPC9rZXk+CisJPHJlYWw+MC4wPC9yZWFsPgorCTxrZXk+VG9vbGJhckNv
bmZpZ1VzZXJEZWZhdWx0c01pbm9yVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Mjwvc3RyaW5nPgor
CTxrZXk+VG9vbGJhckRpc3BsYXlNb2RlPC9rZXk+CisJPGludGVnZXI+MTwvaW50ZWdlcj4KKwk8
a2V5PlRvb2xiYXJJc1Zpc2libGU8L2tleT4KKwk8dHJ1ZS8+CisJPGtleT5Ub29sYmFyU2l6ZU1v
ZGU8L2tleT4KKwk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCTxrZXk+VHlwZTwva2V5PgorCTxzdHJp
bmc+UGVyc3BlY3RpdmVzPC9zdHJpbmc+CisJPGtleT5VcGRhdGVNZXNzYWdlPC9rZXk+CisJPHN0
cmluZz5UaGUgRGVmYXVsdCBXb3Jrc3BhY2UgaW4gdGhpcyB2ZXJzaW9uIG9mIFhjb2RlIG5vdyBp
bmNsdWRlcyBzdXBwb3J0IHRvIGhpZGUgYW5kIHNob3cgdGhlIGRldGFpbCB2aWV3ICh3aGF0IGhh
cyBiZWVuIHJlZmVycmVkIHRvIGFzIHRoZSAiTWV0cm8tTW9ycGgiIGZlYXR1cmUpLiAgWW91IG11
c3QgZGlzY2FyZCB5b3VyIGN1cnJlbnQgRGVmYXVsdCBXb3Jrc3BhY2Ugc2V0dGluZ3MgYW5kIHVw
ZGF0ZSB0byB0aGUgbGF0ZXN0IERlZmF1bHQgV29ya3NwYWNlIGluIG9yZGVyIHRvIGdhaW4gdGhp
cyBmZWF0dXJlLiAgRG8geW91IHdpc2ggdG8gdXBkYXRlIHRvIHRoZSBsYXRlc3QgV29ya3NwYWNl
IGRlZmF1bHRzIGZvciBwcm9qZWN0ICclQCc/PC9zdHJpbmc+CisJPGtleT5XaW5kb3dKdXN0aWZp
Y2F0aW9uPC9rZXk+CisJPGludGVnZXI+NTwvaW50ZWdlcj4KKwk8a2V5PldpbmRvd09yZGVyTGlz
dDwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0
cmluZz4KKwkJPHN0cmluZz4vVm9sdW1lcy9EQVRBL3BhdWxzL3NyYy9TYWZhcmkvT3BlblNvdXJj
ZS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8
a2V5PldpbmRvd1N0cmluZzwva2V5PgorCTxzdHJpbmc+MCA1OSA3MjAgODE5IDAgMCAxNDQwIDg3
OCA8L3N0cmluZz4KKwk8a2V5PldpbmRvd1Rvb2xzVjM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0
PgorCQkJPGtleT5GaXJzdFRpbWVXaW5kb3dEaXNwbGF5ZWQ8L2tleT4KKwkJCTxmYWxzZS8+CisJ
CQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5idWlsZDwvc3Ry
aW5nPgorCQkJPGtleT5Jc1ZlcnRpY2FsPC9rZXk+CisJCQk8dHJ1ZS8+CisJCQk8a2V5PkxheW91
dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJ
CQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlv
bjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlE
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNEMDUyOEYwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+U3RhdHVzQmFyVmlzaWJpbGl0eTwva2V5PgorCQkJ
CQkJCQk8dHJ1ZS8+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1
cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MTMwMCwgMjk0fX08L3N0cmluZz4KKwkJCQkJCQkJPGtl
eT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1
NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1v
ZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJ
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjI5NHB0PC9zdHJpbmc+
CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1
cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVs
ZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5YQ01haW5CdWlsZFJlc3VsdHNNb2R1bGVHVUlE
PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlhDQnVpbGRS
ZXN1bHRzVHJpZ2dlcl9Db2xsYXBzZTwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xMDIxPC9pbnRl
Z2VyPgorCQkJCQkJCQk8a2V5PlhDQnVpbGRSZXN1bHRzVHJpZ2dlcl9PcGVuPC9rZXk+CisJCQkJ
CQkJCTxpbnRlZ2VyPjEwMTE8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+
R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+
RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDI5OX0sIHsxMzAwLCAyMzZ9fTwvc3Ry
aW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+MTQwIDI3OCAxMzAwIDU3NiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhCdWlsZFJlc3Vs
dHNNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8
c3RyaW5nPjIzNnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJ
CTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjUzNXB0PC9zdHJpbmc+CisJCQkJ
PC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5CdWls
ZCBSZXN1bHRzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJy
YXk+CisJCQkJPHN0cmluZz5QQlhCdWlsZFJlc3VsdHNNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJy
YXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPHRydWUvPgorCQkJPGtl
eT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPkZCQzc2QjU5
MTFGNjI2MjAwMEJGQjAzNzwvc3RyaW5nPgorCQkJCTxzdHJpbmc+RkIzOUQ2RjkxMjAwRkRBMjAw
MDg4RTY5PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI4RjA2MjM3MDcyMDAxNjY2NzU8L3N0
cmluZz4KKwkJCQk8c3RyaW5nPlhDTWFpbkJ1aWxkUmVzdWx0c01vZHVsZUdVSUQ8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3Ry
aW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmJ1aWxkVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93
Q29udGVudE1pblNpemU8L2tleT4KKwkJCTxzdHJpbmc+NDg2IDMwMDwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MTQwIDI3OCAxMzAwIDU3NiAwIDAgMTQ0
MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5n
PkZCQzc2QjU5MTFGNjI2MjAwMEJGQjAzNzwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNW
aXNpYmxlPC9rZXk+CisJCQk8ZmFsc2UvPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5J
ZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdnZXI8L3N0cmluZz4K
KwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+
RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkNvbnRl
bnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RGVidWdn
ZXI8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5Pkhvcml6b250YWxTcGxpdFZp
ZXc8L2tleT4KKwkJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJCTxrZXk+X2NvbGxhcHNpbmdGcmFt
ZURpbWVuc2lvbjwva2V5PgorCQkJCQkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KKwkJCQkJCQkJCQk8
a2V5Pl9pbmRleE9mQ29sbGFwc2VkVmlldzwva2V5PgorCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2lu
dGVnZXI+CisJCQkJCQkJCQkJPGtleT5fcGVyY2VudGFnZU9mQ29sbGFwc2VkVmlldzwva2V5Pgor
CQkJCQkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KKwkJCQkJCQkJCQk8a2V5PmlzQ29sbGFwc2VkPC9r
ZXk+CisJCQkJCQkJCQkJPHN0cmluZz55ZXM8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PnNpemVz
PC9rZXk+CisJCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsz
MTcsIDE2NH19PC9zdHJpbmc+CisJCQkJCQkJCQkJCTxzdHJpbmc+e3szMTcsIDB9LCB7Mzc3LCAx
NjR9fTwvc3RyaW5nPgorCQkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJ
CQkJCQk8a2V5PlZlcnRpY2FsU3BsaXRWaWV3PC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJ
CQkJCQk8a2V5Pl9jb2xsYXBzaW5nRnJhbWVEaW1lbnNpb248L2tleT4KKwkJCQkJCQkJCQk8cmVh
bD4wLjA8L3JlYWw+CisJCQkJCQkJCQkJPGtleT5faW5kZXhPZkNvbGxhcHNlZFZpZXc8L2tleT4K
KwkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+X3BlcmNlbnRh
Z2VPZkNvbGxhcHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CisJCQkJ
CQkJCQkJPGtleT5pc0NvbGxhcHNlZDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+eWVzPC9zdHJp
bmc+CisJCQkJCQkJCQkJPGtleT5zaXplczwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4KKwkJCQkJ
CQkJCQkJPHN0cmluZz57ezAsIDB9LCB7Njk0LCAxNjR9fTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8
c3RyaW5nPnt7MCwgMTY0fSwgezY5NCwgMjE2fX08L3N0cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTxrZXk+TGF1bmNo
ZXJDb25maWdWZXJzaW9uPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+ODwvc3RyaW5nPgorCQkJCQkJ
CQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUMxNjI5
ODQwNjRDMTBENDAwQjk1QTcyPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVs
ZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+RGVidWcgLSBHTFVURXhhbXBsZXMgKFVuZGVy
d2F0ZXIpPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RGVidWdDb25zb2xl
RHJhd2VyU2l6ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnsxMDAsIDEyMH08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5EZWJ1Z0NvbnNvbGVWaXNpYmxlPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+Tm9u
ZTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnQ29uc29sZVdpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+e3syMDAsIDIwMH0sIHs1MDAsIDMwMH19PC9zdHJpbmc+CisJCQkJCQkJ
CTxrZXk+RGVidWdTVERJT1dpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3syMDAs
IDIwMH0sIHs1MDAsIDMwMH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz57ezAsIDB9LCB7Njk0LCAzODB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MzIxIDIzOCA2OTQgNDIy
IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgor
CQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5n
PgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1Z2dlcjwvc3RyaW5nPgorCQkJPGtl
eT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYRGVidWdT
ZXNzaW9uTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zp
c2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQk8a2V5PlRhYmxlT2ZDb250
ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+MUNEMTBBOTkwNjlFRjhCQTAwQjA2
NzIwPC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzBBRDJBQjA2OUYxRTlCMDBGQUJDRTY8L3N0cmlu
Zz4KKwkJCQk8c3RyaW5nPjFDMTYyOTg0MDY0QzEwRDQwMEI5NUE3Mjwvc3RyaW5nPgorCQkJCTxz
dHJpbmc+MUMwQUQyQUMwNjlGMUU5QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFy
LmNvbmZpZy5kZWJ1Z1YzPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJ
PHN0cmluZz4zMjEgMjM4IDY5NCA0MjIgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5X
aW5kb3dUb29sR1VJRDwva2V5PgorCQkJPHN0cmluZz4xQ0QxMEE5OTA2OUVGOEJBMDBCMDY3MjA8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+
MDwvaW50ZWdlcj4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+Rmlyc3RUaW1lV2luZG93
RGlzcGxheWVkPC9rZXk+CisJCQk8ZmFsc2UvPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJ
CQk8c3RyaW5nPndpbmRvd1Rvb2wuZmluZDwvc3RyaW5nPgorCQkJPGtleT5Jc1ZlcnRpY2FsPC9r
ZXk+CisJCQk8dHJ1ZS8+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJCQk8c3Ry
aW5nPjFDREQ1MjhDMDYyMjIwNzIwMDEzNDY3NTwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+UEJY
UHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz5TaGFkZXJMYW5nLmNw
cDwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+U3RhdHVzQmFyVmlzaWJpbGl0eTwva2V5PgorCQkJ
CQkJCQkJCTx0cnVlLz4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+R2VvbWV0cnlD
b25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PkZyYW1l
PC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NzgxLCAyMTJ9fTwvc3RyaW5nPgor
CQkJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5n
Pjc3NSA2MjkgNzgxIDQ3MCAwIDAgMTkyMCAxMTc4IDwvc3RyaW5nPgorCQkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+UEJYTmF2aWdh
dG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJ
CQkJPHN0cmluZz43ODFwdDwvc3RyaW5nPgorCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPC9hcnJh
eT4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjIxMnB0PC9z
dHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkJlY29tZUFj
dGl2ZTwva2V5PgorCQkJCQkJCTx0cnVlLz4KKwkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0
aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdV
SUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xQ0QwNTI4RTA2MjM3MDcyMDAxNjY2NzU8L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJPHN0
cmluZz5Qcm9qZWN0IEZpbmQ8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5H
ZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5G
cmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMjE3fSwgezc4MSwgMjEyfX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
Pjc3NSA2MjkgNzgxIDQ3MCAwIDAgMTkyMCAxMTc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYUHJvamVjdEZpbmRN
b2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3Ry
aW5nPjIxMnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxr
ZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjQyOXB0PC9zdHJpbmc+CisJCQkJPC9k
aWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Qcm9qZWN0
IEZpbmQ8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4K
KwkJCQk8c3RyaW5nPlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5Pgor
CQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTx0cnVlLz4KKwkJCTxrZXk+VGFi
bGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQzUzMEQ1NzA2OUYx
Q0UxMDAwQ0ZDRUU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCM0M1MEREMTFGNzlEMjcwMDgxRjVC
QTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+RkIzQzUwREUxMUY3OUQyNzAwODFGNUJBPC9zdHJpbmc+
CisJCQkJPHN0cmluZz4xQ0RENTI4QzA2MjIyMDcyMDAxMzQ2NzU8L3N0cmluZz4KKwkJCQk8c3Ry
aW5nPjFDRDA1MjhFMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjc3NSA2MjkgNzgxIDQ3MCAwIDAgMTky
MCAxMTc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwva2V5PgorCQkJPHN0cmlu
Zz4xQzUzMEQ1NzA2OUYxQ0UxMDAwQ0ZDRUU8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElz
VmlzaWJsZTwva2V5PgorCQkJPGZhbHNlLz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+
SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz5NRU5VU0VQQVJBVE9SPC9zdHJpbmc+CisJCTwv
ZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2lu
ZG93VG9vbC5kZWJ1Z2dlckNvbnNvbGU8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJ
CQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+
CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQkJCTxp
bnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5
PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+
CisJCQkJCQkJCTxzdHJpbmc+MUM3OEVBQUMwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJ
CQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+RGVi
dWdnZXIgQ29uc29sZTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21l
dHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1l
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY1MCwgMjUwfX08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjUxNiA2
MzIgNjUwIDI1MCAwIDAgMTY4MCAxMDI3IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJ
CQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0
cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjIwOXB0
PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9y
dGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjIwOXB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1Z2dlciBDb25zb2xl
PC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz5QQlhEZWJ1Z0NMSU1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+
U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtl
eT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDNzhFQUFE
MDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUM3OEVBQUUwNjVENDkyNjAw
QjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzc4RUFBQzA2NUQ0OTI2MDBCMDcwOTU8L3N0
cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmNvbnNvbGVWMzwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+NjUwIDQxIDY1MCAyNTAgMCAwIDEyODAg
MTAwMiA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+
MUM3OEVBQUQwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zp
c2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJPGRpY3Q+
CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5zbmFwc2hv
dHM8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+
CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJ
CQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVsZTwvc3Ry
aW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwv
c3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9h
cnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5TbmFwc2hvdHM8L3N0cmluZz4K
KwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlhD
U25hcHNob3RNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2Jhcklz
VmlzaWJsZTwva2V5PgorCQkJPHN0cmluZz5ZZXM8L3N0cmluZz4KKwkJCTxrZXk+VG9vbGJhckNv
bmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuc25hcHNo
b3RzPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4zMTUg
ODI0IDMwMCA1NTAgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNW
aXNpYmxlPC9rZXk+CisJCQk8c3RyaW5nPlllczwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0
PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuc2NtPC9z
dHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJ
CQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtl
eT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUM3OEVBQjIwNjVE
NDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVs
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+Jmx0O05vIEVkaXRvciZndDs8L3N0cmluZz4KKwkJCQkJ
CQkJPGtleT5QQlhTcGxpdE1vZHVsZUluTmF2aWdhdG9yS2V5PC9rZXk+CisJCQkJCQkJCTxkaWN0
PgorCQkJCQkJCQkJPGtleT5TcGxpdDA8L2tleT4KKwkJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJ
CTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPjFDNzhF
QUIzMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJ
PGtleT5TcGxpdENvdW50PC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCQkJ
CQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJ
CQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9t
ZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs0NTIsIDB9fTwvc3RyaW5nPgorCQkJ
CQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+NzQzIDM3
OSA0NTIgMzA4IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJ
CTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3Ry
aW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MHB0PC9z
dHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkJlY29tZUFj
dGl2ZTwva2V5PgorCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPGtleT5Db250
ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNEMDUyOTIwNjIzNzA3MjAw
MTY2Njc1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+
CisJCQkJCQkJCTxzdHJpbmc+U0NNPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxr
ZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxr
ZXk+Q29uc29sZUZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAyNTl9LCB7NDUyLCAw
fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7
MCwgN30sIHs0NTIsIDI1OX19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz43NDMgMzc5IDQ1MiAzMDggMCAwIDEyODAgMTAwMiA8
L3N0cmluZz4KKwkJCQkJCQkJPGtleT5UYWJsZUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQkJ
PGFycmF5PgorCQkJCQkJCQkJPHN0cmluZz5TdGF0dXM8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFs
PjMwPC9yZWFsPgorCQkJCQkJCQkJPHN0cmluZz5GaWxlTmFtZTwvc3RyaW5nPgorCQkJCQkJCQkJ
PHJlYWw+MTk5PC9yZWFsPgorCQkJCQkJCQkJPHN0cmluZz5QYXRoPC9zdHJpbmc+CisJCQkJCQkJ
CQk8cmVhbD4xOTcuMDk1MDAxMjIwNzAzMTwvcmVhbD4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJ
CQkJPGtleT5UYWJsZUZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezQ1Miwg
MjUwfX08L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCQkJCQk8c3RyaW5nPlBCWENWU01vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9y
dGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MjYycHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4K
KwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+
MjY2cHQ8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9r
ZXk+CisJCQk8c3RyaW5nPlNDTTwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5
PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYQ1ZTTW9kdWxlPC9zdHJpbmc+CisJCQk8L2Fy
cmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjE8L2lu
dGVnZXI+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxz
dHJpbmc+MUM3OEVBQjQwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzc4
RUFCNTA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDNzhFQUIyMDY1RDQ5
MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNEMDUyOTIwNjIzNzA3MjAwMTY2Njc1
PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5
PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5zY208L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAwIDAgMTI4MCAx
MDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYnJlYWtwb2ludHM8L3N0cmluZz4KKwkJCTxrZXk+
SXNWZXJ0aWNhbDwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+TGF5b3V0
PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJ
CQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5Pgor
CQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWEJvdHRvbVNtYXJ0R3Jv
dXBHSURzPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCTxzdHJpbmc+MUM3N0ZBQkMw
NDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+
UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcx
REVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8
L2tleT4KKwkJCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RTdHJ1Y3R1cmVQcm92aWRlZDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPm5vPC9zdHJpbmc+
CisJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5EYXRhPC9rZXk+CisJ
CQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVt
bldpZHRoc0tleTwva2V5PgorCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCTxyZWFsPjE2ODwv
cmVhbD4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVl
TW9kdWxlQ29sdW1uc0tleV92NDwva2V5PgorCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCTxz
dHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJPC9k
aWN0PgorCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5
X3Y3PC9rZXk+CisJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZU91dGxpbmVTdGF0ZUV4cGFuc2lvbktleTwva2V5PgorCQkJCQkJCQkJPGFycmF5Pgor
CQkJCQkJCQkJCTxzdHJpbmc+MUM3N0ZBQkMwNDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJ
CQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxp
bmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJCTxh
cnJheT4KKwkJCQkJCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1
bGVPdXRsaW5lU3RhdGVWaXNpYmxlUmVjdEtleTwva2V5PgorCQkJCQkJCQkJPHN0cmluZz57ezAs
IDB9LCB7MTY4LCAzNTB9fTwvc3RyaW5nPgorCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCTxrZXk+
UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCQkJPGFycmF5Lz4KKwkJCQkJCQkJPGtl
eT5YQ0luY2x1ZGVQZXJzcGVjdGl2ZXNTd2l0Y2g8L2tleT4KKwkJCQkJCQkJPGludGVnZXI+MDwv
aW50ZWdlcj4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRp
b248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPnt7MCwgMH0sIHsxODUsIDM2OH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+R3Jv
dXBUcmVlVGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJ
CTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MTY4PC9yZWFsPgor
CQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+MzE1IDQyNCA3NDQgNDA5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJ
CQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBC
WFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9r
ZXk+CisJCQkJCQkJPHN0cmluZz4xODVwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJ
PGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+MUNBMUFFRDcwNjM5OEVCRDAwNTg5MTQ3PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJY
UHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+RGV0YWlsPC9zdHJpbmc+
CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+
CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz57ezE5MCwgMH0sIHs1NTQsIDM2OH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2lu
ZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4zMTUgNDI0IDc0NCA0MDkgMCAwIDE0NDAg
ODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5Pgor
CQkJCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3Bv
cnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjU1NHB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+
CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5n
PjM2OHB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TWFqb3JW
ZXJzaW9uPC9rZXk+CisJCQk8aW50ZWdlcj4zPC9pbnRlZ2VyPgorCQkJPGtleT5NaW5vclZlcnNp
b248L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+QnJlYWtwb2ludHM8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tl
eT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJp
bmc+CisJCQkJPHN0cmluZz5YQ0RldGFpbE1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJ
CTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgor
CQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFD
RERCNjY4MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNEREI2NjkwN0Y5
OEQ5ODAwQkI1ODE3PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcxREVEMDA5N0E1
RjQ8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDQTFBRUQ3MDYzOThFQkQwMDU4OTE0Nzwvc3RyaW5n
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxz
dHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuYnJlYWtwb2ludHNWMzwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzE1IDQyNCA3NDQgNDA5IDAgMCAxNDQw
IDg3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+
MUNEREI2NjgwN0Y5OEQ5ODAwQkI1ODE3PC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zp
c2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJPGRpY3Q+
CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5kZWJ1Z0Fu
aW1hdG9yPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3Vw
PC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4x
MDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJv
cG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJ
CQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnIFZpc3VhbGl6
ZXI8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJ
CQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtl
eT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQk8
a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIu
Y29uZmlnLmRlYnVnQW5pbWF0b3JWMzwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tl
eT4KKwkJCTxzdHJpbmc+MTAwIDEwMCA3MDAgNTAwIDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJ
CTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+
d2luZG93VG9vbC5ib29rbWFya3M8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJ
CQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJY
Qm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJ
CQkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+
CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4K
KwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PkJvb2ttYXJrczwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5
PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVn
ZXI+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz41MzggNDIgNDAxIDE4
NyAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5J
ZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wucHJvamVjdEZvcm1hdENvbmZs
aWN0czwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGlj
dD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJ
CQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5YQ1Byb2plY3RGb3JtYXRDb25m
bGljdHNNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJ
CTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJv
amVjdCBGb3JtYXQgQ29uZmxpY3RzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5YQ1Byb2plY3RGb3JtYXRDb25mbGljdHNNb2R1
bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5
PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+V2luZG93Q29udGVudE1pblNpemU8
L2tleT4KKwkJCTxzdHJpbmc+NDUwIDMwMDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8
L2tleT4KKwkJCTxzdHJpbmc+NTAgODUwIDQ3MiAzMDcgMCAwIDE0NDAgODc3PC9zdHJpbmc+CisJ
CTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+
d2luZG93VG9vbC5jbGFzc0Jyb3dzZXI8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJ
CQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+
CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQkJCTxp
bnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5
PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5Pk9wdGlvbnNTZXROYW1lPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+SGllcmFyY2h5LCBhbGwgY2xhc3Nlczwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNBNjQ1NkUwNjNC
NDVCNDAwMTM3OUQ4PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVs
PC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+Q2xhc3MgQnJvd3NlciAtIE5TT2JqZWN0PC9zdHJpbmc+
CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+
CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+Q2xhc3Nlc0ZyYW1lPC9rZXk+CisJCQkJCQkJ
CTxzdHJpbmc+e3swLCAwfSwgezM3NCwgOTZ9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkNsYXNz
ZXNUcmVlVGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJ
CTxzdHJpbmc+UEJYQ2xhc3NOYW1lQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJ
PHJlYWw+MjA4PC9yZWFsPgorCQkJCQkJCQkJPHN0cmluZz5QQlhDbGFzc0Jvb2tDb2x1bW5JZGVu
dGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD4yMjwvcmVhbD4KKwkJCQkJCQkJPC9hcnJh
eT4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs2
MzAsIDMzMX19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+TWVtYmVyc0ZyYW1lPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+e3swLCAxMDV9LCB7Mzc0LCAzOTV9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
Pk1lbWJlcnNUcmVlVGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJ
CQkJCQkJCTxzdHJpbmc+UEJYTWVtYmVyVHlwZUljb25Db2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+
CisJCQkJCQkJCQk8cmVhbD4yMjwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UEJYTWVtYmVyTmFt
ZUNvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIxNjwvcmVhbD4KKwkJ
CQkJCQkJCTxzdHJpbmc+UEJYTWVtYmVyVHlwZUNvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJ
CQkJCQkJCTxyZWFsPjk3PC9yZWFsPgorCQkJCQkJCQkJPHN0cmluZz5QQlhNZW1iZXJCb29rQ29s
dW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+CisJCQkJCQkJ
CTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+UEJYTW9kdWxlV2luZG93U3RhdHVzQmFySGlkZGVuMjwv
a2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldp
bmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+Mzg1IDE3OSA2MzAgMzUyIDAgMCAxNDQw
IDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCQkJCQk8c3RyaW5nPlBCWENsYXNzQnJvd3Nlck1vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxr
ZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MzMycHQ8L3N0cmluZz4KKwkJCQkJ
CTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJ
CTxzdHJpbmc+MzMycHQ8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtl
eT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkNsYXNzIEJyb3dzZXI8L3N0cmluZz4KKwkJCTxrZXk+
U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWENsYXNzQnJv
d3Nlck1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNp
YmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29udGVu
dHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDMEFEMkFGMDY5RjFFOUIwMEZBQkNF
Njwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUMwQUQyQjAwNjlGMUU5QjAwRkFCQ0U2PC9zdHJpbmc+
CisJCQkJPHN0cmluZz4xQ0E2NDU2RTA2M0I0NUI0MDAxMzc5RDg8L3N0cmluZz4KKwkJCTwvYXJy
YXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2Rl
LnRvb2xiYXIuY29uZmlnLmNsYXNzYnJvd3Nlcjwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJp
bmc8L2tleT4KKwkJCTxzdHJpbmc+Mzg1IDE3OSA2MzAgMzUyIDAgMCAxNDQwIDg3OCA8L3N0cmlu
Zz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+MUMwQUQyQUYwNjlG
MUU5QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4K
KwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5Pklk
ZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+d2luZG93VG9vbC5yZWZhY3RvcmluZzwvc3RyaW5n
PgorCQkJPGtleT5JbmNsdWRlSW5Ub29sc01lbnU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVn
ZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8
a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5C
ZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxr
ZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxr
ZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57MCwgMH0sIHs1MDAsIDMzNX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PnswLCAwfSwgezUwMCwgMzM1fTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5
Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+WENSZWZhY3RvcmluZ01vZHVsZTwvc3RyaW5n
PgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3Ry
aW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248
L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJh
eT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5SZWZhY3RvcmluZzwvc3RyaW5nPgor
CQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENS
ZWZhY3RvcmluZ01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+V2luZG93U3Ry
aW5nPC9rZXk+CisJCQk8c3RyaW5nPjIwMCAyMDAgNTAwIDM1NiAwIDAgMTkyMCAxMjAwIDwvc3Ry
aW5nPgorCQk8L2RpY3Q+CisJPC9hcnJheT4KKzwvZGljdD4KKzwvcGxpc3Q+CkluZGV4OiBBTkdM
RS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3BhdWxzLnBieHVzZXIKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5wYnh1c2VyCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5wYnh1c2VyCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIzNyBAQAorLy8gISQqVVRGOCokIQoreworCTE1NjNEOTkxNkJG
REFEODUzMDMyQ0UxQSAvKiBBbGwgKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07CisJMzEz
NDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi8gPSB7CisJCWFjdGl2ZUV4
ZWMgPSAwOworCX07CisJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3Bw
ICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0s
IHs1NDQsIDkxMzl9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2
VmlzUmFuZ2UgPSAiezAsIDk4Mn0iOworCQl9OworCX07CisJNTZDN0U5OUJBNTAwQTg0QzM1MjE2
RkUwIC8qIFNoYWRlckxhbmcuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRC
b3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5NzEsIDQ3ODR9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9
ICJ7MjM2MywgMTl9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInsxODYyLCA5Mjh9IjsKKwkJfTsK
Kwl9OworCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9
IHsKKwkJYWN0aXZlRXhlYyA9IDA7CisJfTsKKwk5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyog
T3V0cHV0R0xTTC5oICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0
ID0gInt7MCwgMH0sIHs2OTEsIDY1MH19IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7
CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgMTQzNX0iOworCQl9OworCX07CisJQTUzRDE2OUNC
ODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0gewor
CQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7OTI2LCA2MzA3Nn19IjsKKwkJCXNl
cE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgMTc0Nn0i
OworCQl9OworCX07CisJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNw
cCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9
LCB7OTI2LCA0ODN9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2
VmlzUmFuZ2UgPSAiezAsIDYwOH0iOworCQl9OworCX07CisJRDJDOUM4RUI0QTdFRkY1QjY3RkY5
REJGIC8qIHBhcnNlQ29uc3QuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRC
b3VuZHNSZWN0ID0gInt7MCwgMH0sIHsxMjE2LCAyOTUxfX0iOworCQkJc2VwTmF2U2VsUmFuZ2Ug
PSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxMzc1fSI7CisJCX07CisJfTsK
KwlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCWFj
dGl2ZUJ1aWxkQ29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQlhY3RpdmVUYXJnZXQgPSAx
NTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovOworCQljb2RlU2Vuc2VNYW5hZ2VyID0g
RkJDNzZBRjcxMUY2MjAzQzAwQkZCMDM3IC8qIENvZGUgc2Vuc2UgKi87CisJCXBlclVzZXJEaWN0
aW9uYXJ5ID0geworCQkJUEJYQ29uZmlndXJhdGlvbi5QQlhGaWxlVGFibGVEYXRhU291cmNlMy5Q
QlhFeGVjdXRhYmxlc0RhdGFTb3VyY2UgPSB7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNv
bHVtblNvcnRpbmdEaXJlY3Rpb25LZXkgPSAiLTEiOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3Vy
Y2VDb2x1bW5Tb3J0aW5nS2V5ID0gUEJYRXhlY3V0YWJsZXNEYXRhU291cmNlX05hbWVJRDsKKwkJ
CQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMiwKKwkJ
CQkJMzAwLAorCQkJCQk2MzYsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29s
dW1uc0tleSA9ICgKKwkJCQkJUEJYRXhlY3V0YWJsZXNEYXRhU291cmNlX0FjdGl2ZUZsYWdJRCwK
KwkJCQkJUEJYRXhlY3V0YWJsZXNEYXRhU291cmNlX05hbWVJRCwKKwkJCQkJUEJYRXhlY3V0YWJs
ZXNEYXRhU291cmNlX0NvbW1lbnRzSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhDb25maWd1cmF0
aW9uLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UzLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UgPSB7CisJ
CQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdEaXJlY3Rpb25LZXkgPSAxOwor
CQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5Tb3J0aW5nS2V5ID0gUEJYRmlsZURhdGFT
b3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQ7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVt
bldpZHRoc0tleSA9ICgKKwkJCQkJMjAsCisJCQkJCTIzMywKKwkJCQkJMjAsCisJCQkJCTQ4LAor
CQkJCQk0MywKKwkJCQkJNDMsCisJCQkJCTIwLAorCQkJCSk7CisJCQkJUEJYRmlsZVRhYmxlRGF0
YVNvdXJjZUNvbHVtbnNLZXkgPSAoCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGV0eXBlSUQs
CisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGVuYW1lX0NvbHVtbklELAorCQkJCQlQQlhGaWxl
RGF0YVNvdXJjZV9CdWlsdF9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfT2JqZWN0
U2l6ZV9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRXJyb3JzX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9XYXJuaW5nc19Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURh
dGFTb3VyY2VfVGFyZ2V0X0NvbHVtbklELAorCQkJCSk7CisJCQl9OworCQkJUEJYQ29uZmlndXJh
dGlvbi5QQlhGaWxlVGFibGVEYXRhU291cmNlMy5YQ1NDTURhdGFTb3VyY2UgPSB7CisJCQkJUEJY
RmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdEaXJlY3Rpb25LZXkgPSAiLTEiOworCQkJ
CVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5Tb3J0aW5nS2V5ID0gUEJYRmlsZURhdGFTb3Vy
Y2VfRmlsZW5hbWVfQ29sdW1uSUQ7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtbldp
ZHRoc0tleSA9ICgKKwkJCQkJMjAsCisJCQkJCTIwLAorCQkJCQkyMDksCisJCQkJCTIwLAorCQkJ
CQk0OC4xNjI1OTc2NTYyNSwKKwkJCQkJNDMsCisJCQkJCTQzLAorCQkJCQkyMCwKKwkJCQkpOwor
CQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5zS2V5ID0gKAorCQkJCQlQQlhGaWxlRGF0
YVNvdXJjZV9TQ01fQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGV0eXBlSUQs
CisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGVuYW1lX0NvbHVtbklELAorCQkJCQlQQlhGaWxl
RGF0YVNvdXJjZV9CdWlsdF9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfT2JqZWN0
U2l6ZV9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRXJyb3JzX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9XYXJuaW5nc19Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURh
dGFTb3VyY2VfVGFyZ2V0X0NvbHVtbklELAorCQkJCSk7CisJCQl9OworCQkJUEJYQ29uZmlndXJh
dGlvbi5QQlhUYXJnZXREYXRhU291cmNlLlBCWFRhcmdldERhdGFTb3VyY2UgPSB7CisJCQkJUEJY
RmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdEaXJlY3Rpb25LZXkgPSAiLTEiOworCQkJ
CVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5Tb3J0aW5nS2V5ID0gUEJYRmlsZURhdGFTb3Vy
Y2VfRmlsZW5hbWVfQ29sdW1uSUQ7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtbldp
ZHRoc0tleSA9ICgKKwkJCQkJMjAsCisJCQkJCTE5MywKKwkJCQkJNjAsCisJCQkJCTIwLAorCQkJ
CQk0OCwKKwkJCQkJNDMsCisJCQkJCTQzLAorCQkJCSk7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNv
dXJjZUNvbHVtbnNLZXkgPSAoCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGV0eXBlSUQsCisJ
CQkJCVBCWEZpbGVEYXRhU291cmNlX0ZpbGVuYW1lX0NvbHVtbklELAorCQkJCQlQQlhUYXJnZXRE
YXRhU291cmNlX1ByaW1hcnlBdHRyaWJ1dGUsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0J1aWx0
X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9PYmplY3RTaXplX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRh
U291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCSk7CisJCQl9OworCQkJUEJYUGVyUHJvamVj
dFRlbXBsYXRlU3RhdGVTYXZlRGF0ZSA9IDMwMjA1NTA2MDsKKwkJCVBCWFdvcmtzcGFjZVN0YXRl
U2F2ZURhdGUgPSAzMDIwNTUwNjA7CisJCX07CisJCXBlclVzZXJQcm9qZWN0SXRlbXMgPSB7CisJ
CQlGQjM5RDZGNjEyMDBGREEyMDAwODhFNjkgPSBGQjM5RDZGNjEyMDBGREEyMDAwODhFNjkgLyog
UEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQjQxMUY3OTU3QTAwODFGNUJBID0gRkIzQzUw
QjQxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJCUZCM0M1MEI1MTFG
Nzk1N0EwMDgxRjVCQSA9IEZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21h
cmsgKi87CisJCQlGQjNDNTBCNjExRjc5NTdBMDA4MUY1QkEgPSBGQjNDNTBCNjExRjc5NTdBMDA4
MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQzkxMUY3OUIyMzAwODFGNUJB
ID0gRkIzQzUwQzkxMUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJfTsK
KwkJc291cmNlQ29udHJvbE1hbmFnZXIgPSBGQkM3NkFGNjExRjYyMDNDMDBCRkIwMzcgLyogU291
cmNlIENvbnRyb2wgKi87CisJCXVzZXJCdWlsZFNldHRpbmdzID0geworCQkJU1lNUk9PVCA9IC4u
OworCQl9OworCX07CisJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAw
fSwgezkyNiwgNDgzfX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5h
dlZpc1JhbmdlID0gInswLCA0Nzh9IjsKKwkJfTsKKwl9OworCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJ
bnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDQ4M319IjsKKwkJCXNlcE5hdlNlbFJhbmdl
ID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgNDc4fSI7CisJCX07CisJfTsK
KwlGQjM5RDZGNjEyMDBGREEyMDAwODhFNjkgLyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlp
c2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSA5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAg
LyogT3V0cHV0R0xTTC5oICovOworCQluYW1lID0gIk91dHB1dEdMU0wuaDogMSI7CisJCXJMZW4g
PSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDE0MzY7CisJCXZyTG9j
ID0gMDsKKwl9OworCUZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQSAvKiBhbmdsZSAqLyA9IHsKKwkJ
YWN0aXZlRXhlYyA9IDA7CisJfTsKKwlGQjNDNTBCNDExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4
dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSBCN0Ix
MTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovOworCQluYW1lID0gIkNv
ZGVHZW5HTFNMLmNwcDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAw
OworCQl2ckxlbiA9IDYwODsKKwkJdnJMb2MgPSAwOworCX07CisJRkIzQzUwQjUxMUY3OTU3QTAw
ODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJr
OworCQlmUmVmID0gRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmgg
Ki87CisJCW5hbWUgPSAiVHJhbnNsYXRvckhMU0wuaDogMSI7CisJCXJMZW4gPSAwOworCQlyTG9j
ID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDQ3ODsKKwkJdnJMb2MgPSAwOworCX07CisJ
RkIzQzUwQjYxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNh
ID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi87CisJCW5hbWUgPSAiVHJhbnNsYXRvckdMU0wuaDogMSI7CisJ
CXJMZW4gPSAwOworCQlyTG9jID0gMDsKKwkJclR5cGUgPSAwOworCQl2ckxlbiA9IDQ3ODsKKwkJ
dnJMb2MgPSAwOworCX07CisJRkIzQzUwQzkxMUY3OUIyMzAwODFGNUJBIC8qIFBCWFRleHRCb29r
bWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gOTNENjFDQjBC
Q0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLzsKKwkJbmFtZSA9ICJPdXRwdXRHTFNM
Lmg6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4g
PSAxMzc2OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQkM3NkFGNjExRjYyMDNDMDBCRkIwMzcgLyog
U291cmNlIENvbnRyb2wgKi8gPSB7CisJCWlzYSA9IFBCWFNvdXJjZUNvbnRyb2xNYW5hZ2VyOwor
CQlmYWxsYmFja0lzYSA9IFhDU291cmNlQ29udHJvbE1hbmFnZXI7CisJCWlzU0NNRW5hYmxlZCA9
IDA7CisJCXNjbUNvbmZpZ3VyYXRpb24gPSB7CisJCQlyZXBvc2l0b3J5TmFtZXNGb3JSb290cyA9
IHsKKwkJCQkiIiA9ICIiOworCQkJfTsKKwkJfTsKKwl9OworCUZCQzc2QUY3MTFGNjIwM0MwMEJG
QjAzNyAvKiBDb2RlIHNlbnNlICovID0geworCQlpc2EgPSBQQlhDb2RlU2Vuc2VNYW5hZ2VyOwor
CQlpbmRleFRlbXBsYXRlUGF0aCA9ICIiOworCX07Cit9CkluZGV4OiBBTkdMRS9zcmMvYnVpbGRf
YW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
YnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYxMyBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0g
MTsKKwljbGFzc2VzID0geworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQ1OworCW9iamVjdHMgPSB7
CisKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCisJCTE1NjNEOTkxNkJG
REFEODUzMDMyQ0UxQSAvKiBBbGwgKi8gPSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gNzdDRUZCN0I0MEYwNUIwQTgwNEU2QjJCIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJBbGwiICov
OworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCUZC
M0M1MDY0MTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsK
KwkJCW5hbWUgPSBBbGw7CisJCQlwcm9kdWN0TmFtZSA9IEFsbDsKKwkJfTsKKwkJMzEzNDlENjY1
RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi8gPSB7CisJCQlpc2EgPSBQQlhBZ2dy
ZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEFBNTQ4MjVCRjVERjBB
M0ZCQTkyQjYwIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYQWdncmVnYXRlVGFy
Z2V0ICJBTkdMRSBTdXBwb3J0IiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUZBMEQ3MTI1
REIwNkE3QTc3MTZBNTkxMCAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8sCisJCQkJMEQ1MTNG
OEI5MjM5NDlDMTU2REIwMkM1IC8qIEFjdGlvbiAiYmlzb25fZ2xzbGFuZyIgKi8sCisJCQkpOwor
CQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiQU5HTEUgU3VwcG9ydCI7CisJ
CQlwcm9kdWN0TmFtZSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJfTsKKy8qIEVu
ZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLworCQkwNTU2M0FERkVBMTUxMTZENzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDg1N0Ux
ODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLzsgfTsKKwkJMEEyMTY5
NDkxMDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8q
IEluaXRpYWxpemVEbGwuY3BwICovOyB9OworCQkwRDQwNjQxNjczOThBNjg5MjgwOUEwOUUgLyog
Z2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsK
KwkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0RTlF
RUVBIC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQkzMkIxREJDRDZCODNGMjE0NkQ3ODdBNjIg
LyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLzsgfTsKKwkJMzVCRTFCQkVFNjEz
NUExQ0IwNjA4RUE4IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5j
ICovOyB9OworCQkzQTk2RTlDQUM4QTI1QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1NUYx
MkEyOEUgLyogbWVtb3J5LmMgKi87IH07CisJCTQwRkMxODlCOEEyNDZFREYxNEMyRkRFMyAvKiBp
bnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi87IH07CisJCTUw
REYwMDAwNUNDNDIxMkY2RkIxMjkxRCAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBG
IC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07CisJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAv
KiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9
OworCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZC
IC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQlBQkE1
QzYxQjFCNzhCOUE4RDY5RjZBRUMgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xz
bGFuZy5jcHAgKi87IH07CisJCUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZF
RkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKKwkJQUQ4NTUxN0Yw
ODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMg
Ki87IH07CisJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAw
NUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OworCQlCOEJEMjY4NUEx
NkIxODhDQ0RGQjA1MkIgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVy
TGFuZy5jcHAgKi87IH07CisJCUJFQkJGNEYwODE5RUEzRDAzOTc3QThGQyAvKiBJbmZvU2luay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdC
RTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQlDQjdGMEVGMEQ2QTg5
RkE4QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi87IH07CisJCUUx
QzdDNURGRjBCMkRGRUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8q
IFBvb2xBbGxvYy5jcHAgKi87IH07CisJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tl
bnMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3
NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKKwkJRjA5OEY0NjNFREFCQ0Yw
NzY5MDA3Njc4IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVBODEzMjM0RCAvKiBzY2FubmVyLmMgKi87IH07
CisJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlGNkFCRDU4RjhDQUI3NjQx
RDhCRkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxl
LmNwcCAqLzsgfTsKKwkJRkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8qIENvZGVHZW5HTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdD
NzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CisJCUZCM0M1MDU4MTFG
NzkyNEEwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRH
TFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTkxMUY3OTI0QTAwODFGNUJBIC8qIFRyYW5zbGF0b3JH
TFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
QjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07CisJCUZC
M0M1MDhFMTFGNzk0OUUwMDgxRjVCQSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBn
bHNsYW5nLmNwcCAqLzsgfTsKKwkJRkIzQzUwOEYxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdf
dGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJCUZCM0M1
MDkyMTFGNzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcu
Y3BwICovOyB9OworCQlGQjNDNTA5MzExRjc5NENFMDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2OTI3QkU1RDND
MkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTQxMUY3OTRDRTAw
ODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3Bw
ICovOyB9OworCQlGQjNDNTA5NTExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZURsbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlD
RTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCUZCM0M1MDk2MTFG
Nzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVy
bWVkaWF0ZS5jcHAgKi87IH07CisJCUZCM0M1MDk3MTFGNzk0Q0UwMDgxRjVCQSAvKiBpbnRlcm1P
dXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVB
RjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi87IH07CisJCUZCM0M1MDk4
MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyog
SW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlGQjNDNTA5QTExRjc5NENFMDA4MUY1QkEgLyog
b3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAq
LzsgfTsKKwkJRkIzQzUwOUIxMUY3OTRDRTAwODFGNUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1
QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovOyB9OworCQlGQjNDNTA5QzExRjc5NENFMDA4
MUY1QkEgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNw
cCAqLzsgfTsKKwkJRkIzQzUwOUQxMUY3OTRDRTAwODFGNUJBIC8qIFBvb2xBbGxvYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2
NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUUxMUY3OTRDRTAw
ODFGNUJBIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZpZXJB
bGl2ZS5jcHAgKi87IH07CisJCUZCM0M1MDlGMTFGNzk0Q0UwMDgxRjVCQSAvKiBSZW1vdmVUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZF
RkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKKwkJRkIzQzUwQTAx
MUY3OTRDRTAwODFGNUJBIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRl
ckxhbmcuY3BwICovOyB9OworCQlGQjNDNTBBMTExRjc5NENFMDA4MUY1QkEgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdF
NUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKKwkJRkIzQzUw
QTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0b20uYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMgKi87
IH07CisJCUZCM0M1MEE1MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAv
KiBjcHAuYyAqLzsgfTsKKwkJRkIzQzUwQTYxMUY3OTRGRjAwODFGNUJBIC8qIGNwcHN0cnVjdC5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA1OEEwQTJB
MEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovOyB9OworCQlGQjNDNTBBNzExRjc5NEZG
MDA4MUY1QkEgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi87IH07CisJ
CUZCM0M1MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyog
c2Nhbm5lci5jICovOyB9OworCQlGQjNDNTBBOTExRjc5NEZGMDA4MUY1QkEgLyogc3ltYm9scy5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQw
QkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKKwkJRkIzQzUwQUExMUY3OTRGRjAw
ODFGNUJBIC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlG
QjNDNTBBQjExRjc5NTFCMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuaCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERERDNCN0UzQjdCMzVBMEI4NDY5QUI4
NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovOyB9OworCQlGQjNDNTBBQzExRjc5NTFCMDA4MUY1QkEg
LyogT3V0cHV0R0xTTC5oIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLzsgfTsKKy8q
IEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVt
UHJveHkgc2VjdGlvbiAqLworCQlFNjlCRkJFMkQxMjcyNjIwRTQ2QzNGOEEgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJ
Y29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2Jq
ZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMzEz
NDlENjY1RkFFNjQyQUVCNDkxMzVFOworCQkJcmVtb3RlSW5mbyA9ICJ0cmFuc2xhdG9yX2NvbW1v
biBTdXBwb3J0IjsKKwkJfTsKKwkJRkIzQzUwNjMxMUY3OTI5NzAwODFGNUJBIC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJ
CWNvbnRhaW5lclBvcnRhbCA9IERBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9i
amVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEZC
M0M1MDU1MTFGNzkyNEEwMDgxRjVCQTsKKwkJCXJlbW90ZUluZm8gPSBhbmdsZTsKKwkJfTsKKwkJ
RkIzQzUwRDAxMUY3OUNDQzAwODFGNUJBIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
KwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlw
ZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1
RTsKKwkJCXJlbW90ZUluZm8gPSAiQU5HTEUgU3VwcG9ydCI7CisJCX07CisvKiBFbmQgUEJYQ29u
dGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCisJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2FubmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM5QjQ2
MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9v
bEFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5IC8qIEJhc2VUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjk0
RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnku
Yzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3
IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vu
cy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFy
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZGVidWcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MjhGRjIwMTgzOUM2RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NkM3RTk5QkE1
MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFk
ZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTgwQjJBMzFGN0M1MUE1
OUI0MEYxMUEzIC8qIGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0
SExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMgLyogcHJlcHJvY2Vzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
NjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQjcwREM3NEEy
MUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
cmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5OURDOTYx
MUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNkJCMTJBQjA5OTU1NkNG
Mzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3RDlDRjM3NkRDNTc5OUI0QzZCMzMzMUUgLyog
c3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTM5
OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbWVtb3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1MTNGQUM2OTlEQjE1NThEMUQ0OUE0OCAv
KiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODU4NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8qIEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OUE2RjdCMUFEMzkxOEU2NERGNzZFQjEgLyog
c2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4QzMyMjVDMkY4QzM1NzNDRDk3MjVFNjYgLyogZ2xzbGFuZy55ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS55
YWNjOyBwYXRoID0gZ2xzbGFuZy55OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0Q2
MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRw
dXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk1Mjc2QUE2QjM2RkMxQjFE
OTEzRkNFNCAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5RDQ3QjFBQzgyRTRFRTg1
OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxp
dmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3
QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzE1M0Q1OEY0QkJCRDk4QTg0RTQyMTAgLyog
Z2xzbGFuZy5sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IGdsc2xhbmcubDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0
RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNTNCNjYz
MkM3NkY5MDVERjA4RTU2NCAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hI
YW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSB1bmlzdGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJGNUNBMTFFRUE5
MkRGMjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRV
bmlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNDM2RUZGMDY5MTNGQ0IxOUMz
NTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQy
IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3Bw
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
N0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCN0U1
QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzY2RDZC
NDdEOUFGMzI4NjY0NEJCRTEgLyogZ2xzbGFuZ190YWIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFu
Z190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkUyNTg0ODYwMDVGNjY5NkND
MDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNl
X3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzNEQUZGNkJGMTJCQjdG
NDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ5NTQ5RENDQUY0
NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVH
ZW5ITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzRGRTk4OEVGOUEyOTM4
NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVy
bVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzhCRDU5QkQ3MDU2
RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8q
IGdsc2xhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQYXJzZUhlbHBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDRjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IGJ1aWxkX2FuZ2xlLmd5cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0ZEMTJDNkU0
NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRBIC8qIHRv
a2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gcGFyc2VDb25zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQ0MEY3OENCOUJBMEM4OTkyMUZBMzE5RCAvKiBSZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREREM0I3RTNCN0Iz
NUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0
b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURFQUY2RjMxMjZDMkVDNDM5
Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2
IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUzQTI5QjZFOUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBz
eW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY3NDYxOEYxOEZFNTQ0ODEx
NTAxN0M0NCAvKiBDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyogbGliYW5nbGUuYSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gbGliYW5nbGUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworLyogRW5kIFBCWEZp
bGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCisJCUE1Qzk5NEU3NERCMUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICov
ID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUZCM0M1MDVBMTFGNzkyNEEwMDgxRjVC
QSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7
CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOwor
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQg
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhHcm91cCBz
ZWN0aW9uICovCisJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBDOUI0NjE2QTY1
QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMgKi8sCisJCQkJOUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2
IC8qIGF0b20uaCAqLywKKwkJCQk1ODBCMkEzMUY3QzUxQTU5QjQwRjExQTMgLyogY29tcGlsZS5o
ICovLAorCQkJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLywKKwkJCQk1MjhG
RjIwMTgzOUM2RjIzM0UyNkZGREEgLyogY3BwLmggKi8sCisJCQkJODA1OEEwQTJBMEEwMjM4Njg2
NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovLAorCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAv
KiBtZW1vcnkuYyAqLywKKwkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8sCisJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5oICovLAorCQkJCTZC
QkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8sCisJCQkJRkYzQUE2OTRE
RjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKKwkJCQkwNTZGRUFEQzdEOTVDNkQ0QzlD
RjExMTMgLyogc2Nhbm5lci5oICovLAorCQkJCTg5QTZGN0IxQUQzOTE4RTY0REY3NkVCMSAvKiBz
bGdsb2JhbHMuaCAqLywKKwkJCQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5j
ICovLAorCQkJCTdEOUNGMzc2REM1Nzk5QjRDNkIzMzMxRSAvKiBzeW1ib2xzLmggKi8sCisJCQkJ
MkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovLAorCQkJCUQxM0MzNjkzQjlF
NDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gcHJlcHJvY2Vz
c29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMTk2REI2QUIwMDZCQjgz
NTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywK
KwkJCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCisJCQkJQjdC
MTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLywKKwkJCQlDNDk1NDlE
Q0NBRjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovLAorCQkJCUY3NDYxOEYxOEZF
NTQ0ODExNTAxN0M0NCAvKiBDb21tb24uaCAqLywKKwkJCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZE
OTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAv
KiBJbmZvU2luay5jcHAgKi8sCisJCQkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9T
aW5rLmggKi8sCisJCQkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3Bw
ICovLAorCQkJCTg1MTNGQUM2OTlEQjE1NThEMUQ0OUE0OCAvKiBJbml0aWFsaXplLmggKi8sCisJ
CQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAorCQkJ
CUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8sCisJCQkJMkU3
QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCisJCQkJODU4
NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKKwkJ
CQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAorCQkJ
CTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAorCQkJCURF
RUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCisJCQkJNDhCNzQwMkNDMDdBMDU5
RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLAorCQkJCTkzRDYxQ0IwQkNFNTRFMDY5RDcx
RjkyMCAvKiBPdXRwdXRHTFNMLmggKi8sCisJCQkJOUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkzIC8q
IE91dHB1dEhMU0wuY3BwICovLAorCQkJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBPdXRw
dXRITFNMLmggKi8sCisJCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVy
LmNwcCAqLywKKwkJCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LywKKwkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJ
CQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCisJCQkJNDg1N0Ux
ODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLywKKwkJCQk5RDQ3QjFB
QzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywKKwkJCQlCNDM2RUZGMDY5
MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCisJCQkJRDQwRjc4Q0I5QkEwQzg5
OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1
QjEgLyogU2hIYW5kbGUuaCAqLywKKwkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCisJCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRh
YmxlLmNwcCAqLywKKwkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUu
aCAqLywKKwkJCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdMU0wuY3Bw
ICovLAorCQkJCURERDNCN0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICov
LAorCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8s
CisJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCisJ
CQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8sCisJCQkJRTM3MTFBNDhB
MEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCisJCQkJMkE3NjVCODZDQkFG
MEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8q
IGRlYnVnLmggKi8sCisJCQkJQTMxNTNENThGNEJCQkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcubCAq
LywKKwkJCQk4QzMyMjVDMkY4QzM1NzNDRDk3MjVFNjYgLyogZ2xzbGFuZy55ICovLAorCQkJCURF
QUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCTc5OURDOTYx
MUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2
RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKKwkJCQlDOEJENTlCRDcwNTZG
RkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMx
NjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlE
QkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJQUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8q
IHVuaXN0ZC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlwYXRoID0gY29tcGls
ZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk0NjZFMUQwNTMxQTc5QjU4
MTNFOEE3RjggLyogSW50ZXJtZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3Bw
ICovLAorCQkJCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8s
CisJCQkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUxIC8qIGdsc2xhbmdfdGFiLmggKi8sCisJCQkp
OworCQkJbmFtZSA9IEludGVybWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gSU5URVJNRURJQVRF
X0RJUjsKKwkJfTsKKwkJNUJCRUZGOUI5MTczODI5N0I5NUM1NjhEID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovLAorCQkJCTQ2NkUxRDA1MzFBNzlCNTgxM0U4QTdGOCAvKiBJbnRlcm1lZGlhdGVz
ICovLAorCQkJCUUwRURDNDEzMEU3RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLywKKwkJCQlC
MkMxODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8sCisJCQkpOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxk
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDRjJCNjJF
MDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAorCQkJKTsKKwkJCW5hbWUg
PSBCdWlsZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUUwRURDNDEzMEU3
RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0
b3JfY29tbW9uLmEgKi8sCisJCQkJRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFuZ2xl
LmEgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFu
c2xhdG9yX2NvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAq
LzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBT
b3VyY2VzICovLAorCQkJCUE1Qzk5NEU3NERCMUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAor
CQkJCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAor
CQkJKTsKKwkJCW5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3ROYW1lID0gdHJh
bnNsYXRvcl9jb21tb247CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUx
ODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsKKwkJRkIzQzUwNTUx
MUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0
OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZCM0M1MDVCMTFGNzkyNEEwMDgxRjVCQSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICov
OworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkIzQzUwNTYxMUY3OTI0QTAwODFGNUJBIC8qIFNv
dXJjZXMgKi8sCisJCQkJRkIzQzUwNUExMUY3OTI0QTAwODFGNUJBIC8qIEZyYW1ld29ya3MgKi8s
CisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJ
CQkJRkIzQzUwRDExMUY3OUNDQzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJ
CQkpOworCQkJbmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7
CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFu
Z2xlLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKKwkJfTsKKy8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisv
KiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKwkJREExODhEOEM2QkY4MDczMTIyNTM5MTMx
IC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJp
YnV0ZXMgPSB7CisJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVTOwor
CQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRD
RTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmds
ZSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJaGFzU2Nh
bm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1
QzU2OEQ7CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJ
CXRhcmdldHMgPSAoCisJCQkJMTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKKwkJ
CQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCisJCQkJ
MzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi8sCisJCQkJRkIzQzUw
NTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KKwkJMEQ1MTNGOEI5MjM5NDlDMTU2REIwMkM1IC8qIEFjdGlvbiAiYmlzb25fZ2xz
bGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQ
YXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5nLnksCisJCQkpOworCQkJbmFtZSA9ICJBY3Rp
b24gXCJiaXNvbl9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJN
RURJQVRFX0RJUikvZ2xzbGFuZ190YWIuY3BwIiwKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9n
bHNsYW5nX3RhYi5oIiwKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJlY2hv
IG5vdGU6IFwiRXhlY3V0aW5nIGJpc29uIG9uIGNvbXBpbGVyL2dsc2xhbmcueVwiXG5leGVjIGJp
c29uIC0tbm8tbGluZXMgXCItLWRlZmluZXM9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3Rh
Yi5oXCIgXCItLXNrZWxldG9uPXlhY2MuY1wiIFwiLS1vdXRwdXQ9JHtJTlRFUk1FRElBVEVfRElS
fS9nbHNsYW5nX3RhYi5jcHBcIiBjb21waWxlci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNo
b3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyog
QWN0aW9uICJmbGV4X2dsc2xhbmciICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGlsZXIvZ2xzbGFuZy5sLAorCQkJKTsK
KwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAo
CisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5jcHAiLAorCQkJKTsKKwkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9z
aDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBjb21w
aWxlci9nbHNsYW5nLmxcIlxuZXhlYyBmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgXCItLW91dGZp
bGU9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcubFxu
ZXhpdCAxXG4iOworCQkJc2hvd0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU2hl
bGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLworCQlFQUEyMkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFD
OCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4
RkMgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzA2NUQyOUU5N0ZBQzZFMTI3
Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEEyMTY5NDkxMDNF
MUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTBE
RjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25z
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFy
c2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDN0M1REZGMEIyREZFQzA5Mzg3RjRF
IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwNTU2M0FERkVBMTUxMTZENzIz
MzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUMyM0Y1OEZE
RDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjhC
RDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LywKKwkJCQlDQjdGMEVGMEQ2QTg5RkE4QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywK
KwkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAq
LywKKwkJCQkzQTk2RTlDQUM4QTI1QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAq
LywKKwkJCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMg
Ki8sCisJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2Vz
ICovLAorCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovLAorCQkJCUFCQTVDNjFCMUI3OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBENDA2NDE2NzM5OEE2ODkyODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUZCM0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAvKiBT
b3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJRkIzQzUwQUIxMUY3OTUx
QjAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBB
QzExRjc5NTFCMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5oIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwQTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0b20uYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEE1MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHAuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE2
MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTBBOTExRjc5NEZGMDA4MUY1QkEgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwQUExMUY3OTRGRjAwODFGNUJBIC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCM0M1MDkyMTFGNzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjNDNTA5MzExRjc5NENFMDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzQzUwOTQxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTUxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemVE
bGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTYxMUY3OTRDRTAwODFGNUJBIC8qIElu
dGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NzExRjc5NENFMDA4MUY1
QkEgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk4MTFGNzk0Q0Uw
MDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5
QTExRjc5NENFMDA4MUY1QkEgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzQzUwNTgxMUY3OTI0QTAwODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzQzUwOUIxMUY3OTRDRTAwODFGNUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzQzUwOUMxMUY3OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlEMTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29sQWxs
b2MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUUxMUY3OTRDRTAwODFGNUJBIC8qIFF1
YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlGMTFGNzk0Q0UwMDgx
RjVCQSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEEwMTFGNzk0
Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEEx
MTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
QjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzQzUwOEYxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyog
QmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTI5MUVFMDQyMDJFQzc5Njc4
MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0
RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdM
RSBTdXBwb3J0ICovOworCQkJdGFyZ2V0UHJveHkgPSBFNjlCRkJFMkQxMjcyNjIwRTQ2QzNGOEEg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworCQlGQjNDNTA2NDExRjc5Mjk3MDA4
MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERl
cGVuZGVuY3k7CisJCQl0YXJnZXQgPSBGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUg
Ki87CisJCQl0YXJnZXRQcm94eSA9IEZCM0M1MDYzMTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCUZCM0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAvKiBQ
QlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsK
KwkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICov
OworCQkJdGFyZ2V0UHJveHkgPSBGQjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlv
biAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTAwQkYy
RUJDQkRGNTY3OEY0QkEyRkE5MiAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0
cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJ
fTsKKwkJMUExMkFBNUQ2NUFDREU3MUFFMDg5RUUzIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVD
VF9OQU1FID0gQWxsOworCQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworCQkxRjNGMTIx
OEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9
IGxpYjsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkuLAorCQkJCQkuLi9pbmNs
dWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1FID0gdHJhbnNsYXRvcl9jb21tb247CisJCQl9
OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUJDNTc5M0M5QTFGRjAyMUE4MUM2NjU1OSAv
KiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWls
ZFNldHRpbmdzID0geworCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKSI7CisJ
CQkJQ09ORklHVVJBVElPTl9CVUlMRF9ESVIgPSAiJChCVUlMRF9ESVIpLyQoQ09ORklHVVJBVElP
TikkKEVGRkVDVElWRV9QTEFURk9STV9OQU1FKSI7CisJCQkJSU5URVJNRURJQVRFX0RJUiA9ICIk
KFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7CisJCQkJT0JKUk9P
VCA9ICIiOworCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBZRVM7CisJCQkJU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04pIjsK
KwkJCQlTWU1ST09UID0gIiQoQlVJTERfRElSKSI7CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7
CisJCX07CisJCUZCM0M1MDVDMTFGNzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0ICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUVY
RUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJ
CS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSBhbmdsZTsK
KwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJh
dGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAq
LworCQkwQUE1NDgyNUJGNURGMEEzRkJBOTJCNjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFOR0xFIFN1cHBvcnQiICovID0geworCQkJaXNhID0g
WENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMDBC
RjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVmYXVsdDsKKwkJfTsKKwkJMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
QkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gRGVmYXVsdDsKKwkJfTsKKwkJMzRCQjM4RTNBNzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIg
Ki8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0
aW9ucyA9ICgKKwkJCQkxRjNGMTIxOEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVsdCAqLywKKwkJ
CSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZC
MkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFs
bCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKKwkJCQkxQTEyQUE1RDY1QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLywK
KwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQlGQjNDNTA1QjExRjc5MjRBMDA4
MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImFu
Z2xlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZp
Z3VyYXRpb25zID0gKAorCQkJCUZCM0M1MDVDMTFGNzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0ICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisvKiBFbmQgWENDb25maWd1cmF0
aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2JqZWN0ID0gREExODhEOEM2QkY4MDczMTIy
NTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpJbmRleDogQU5HTEUvc3JjL2NvbW1vbi9h
bmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gYW5nbGV1dGlscy5o
OiBDb21tb24gQU5HTEUgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTU1PTl9BTkdMRVVUSUxTX0hf
CisjZGVmaW5lIENPTU1PTl9BTkdMRVVUSUxTX0hfCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cg
dGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVz
dCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKyNkZWZp
bmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0
IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBl
TmFtZSYpCisKKyNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpJbmRleDogQU5HTEUvc3Jj
L2NvbW1vbi9kZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBE
ZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitzdGF0aWMgYm9vbCB0cmFjZV9v
biA9IHRydWU7CisKK25hbWVzcGFjZSBnbAorewordm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKK3sKKyAgICBpZiAodHJhY2Vfb24pCisgICAgeworICAgICAgICBpZiAoZm9ybWF0
KQorICAgICAgICB7CisgICAgICAgICAgICBGSUxFICpmaWxlID0gZm9wZW4oImRlYnVnLnR4dCIs
ICJhIik7CisKKyAgICAgICAgICAgIGlmIChmaWxlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHZhX2xpc3QgdmFyYXJnOworICAgICAgICAgICAgICAgIHZhX3N0YXJ0KHZhcmFyZywg
Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7
CisgICAgICAgICAgICAgICAgdmFfZW5kKHZhcmFyZyk7CisKKyAgICAgICAgICAgICAgICBmY2xv
c2UoZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cit9CkluZGV4OiBB
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5oOiBE
ZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTU1PTl9ERUJVR19IXworI2RlZmluZSBD
T01NT05fREVCVUdfSF8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+
CisKK25hbWVzcGFjZSBnbAoreworICAgIC8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWdnaW5n
IGxvZworICAgIHZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworfQorCisvLyBB
IG1hY3JvIHRvIG91dHB1dCBhIHRyYWNlIG9mIGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3Vt
ZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZworI2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFRS
QUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJ0cmFjZTogJXMibWVzc2FnZSJcbiIsIF9fRlVO
Q1RJT05fXywgX19WQV9BUkdTX18pCisjZWxzZQorICAgICNkZWZpbmUgVFJBQ0UoLi4uKSAoKHZv
aWQpMCkKKyNlbmRpZgorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5k
IGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIHRvIGRlbm90ZSBhbiBpdGVtIGlu
IG5lZWQgb2YgZml4aW5nLiBXaWxsIG9jY3VyIGV2ZW4gaW4gcmVsZWFzZSBtb2RlLgorI2RlZmlu
ZSBGSVhNRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZml4bWU6ICVzIm1lc3NhZ2UiXG4iLCBf
X0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0
aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ug
b2YgZXJyb3IuIFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUuCisjZGVmaW5lIEVSUiht
ZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZXJyOiAlcyJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9f
LCBfX1ZBX0FSR1NfXykKKworLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91
dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZworI2RlZmluZSBBU1NFUlQoZXhwcmVz
c2lvbikgZG8geyBcCisgICAgaWYoIShleHByZXNzaW9uKSkgXAorICAgICAgICBFUlIoIlx0ISBB
c3NlcnQgZmFpbGVkIGluICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKKyAgICB9IHdoaWxlKDApCisK
KworLy8gQSBtYWNybyB0byBpbmRpY2F0ZSB1bmltcGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkKKyNp
Zm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCisgICAgICAg
IEZJWE1FKCJcdCEgVW5pbXBsZW1lbnRlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElO
RV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgICAgIH0gd2hpbGUoMCkKKyNl
bHNlCisgICAgI2RlZmluZSBVTklNUExFTUVOVEVEKCkgRklYTUUoIlx0ISBVbmltcGxlbWVudGVk
OiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZW5kaWYKKworLy8gQSBtYWNy
byBmb3IgY29kZSB3aGljaCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcmVhY2hlZCB1bmRlciB2YWxp
ZCBhc3N1bXB0aW9ucworI2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkg
ZG8geyBcCisgICAgICAgIEVSUigiXHQhIFVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsgXAorICAg
ICAgICB9IHdoaWxlKDApCisjZWxzZQorICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0
ISBVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18p
CisjZW5kaWYKKworLy8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3Nl
cnQgdG8gdmFsaWRhdGUgY29uc3RhbnQgY29uZGl0aW9ucworI2RlZmluZSBNRVRBX0FTU0VSVChj
b25kaXRpb24pIHR5cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0
aWNfY2FzdDxib29sPihjb25kaXRpb24pPzE6LTFdCisKKyNlbmRpZiAgIC8vIENPTU1PTl9ERUJV
R19IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5l
IF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworCisvLworLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8v
CitlbnVtIFRQcmVjaXNpb24KK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVk
CisgICAgRWJwVW5kZWZpbmVkLAorICAgIEVicExvdywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJw
SGlnaCwKK307CisKK19faW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJl
Y2lzaW9uIHApCit7CisgICAgc3dpdGNoKHApCisgICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJl
dHVybiAiaGlnaHAiOwkJYnJlYWs7CisgICAgY2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1
bXAiOwlicmVhazsKKyAgICBjYXNlIEVicExvdzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAg
ICBkZWZhdWx0OgkJCXJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxi
YWNrCisgICAgfQorfQorCisvLworLy8gQmFzaWMgdHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRj
LiwgYXJlIG9ydGhvZ29uYWwgdG8gdGhpcy4KKy8vCitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBF
YnRWb2lkLAorICAgIEVidEZsb2F0LAorICAgIEVidEludCwKKyAgICBFYnRCb29sLAorICAgIEVi
dEd1YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2Yg
SXNTYW1wbGVyKCkKKyAgICBFYnRTYW1wbGVyMkQsCisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAg
RWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBv
ZiBJc1NhbXBsZXIoKQorICAgIEVidFN0cnVjdCwKKyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAg
IC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KK307CisKK19faW5saW5lIGJvb2wgSXNTYW1wbGVy
KFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJl
Z2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7Cit9CisKKy8vCisvLyBRdWFsaWZpZXJz
IGFuZCBidWlsdC1pbnMuICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJl
IHJlYWQKKy8vIG9yIHdyaXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNs
YXRvciB0byBrbm93IHdoaWNoIHJlZ2lzdGVycworLy8gdG8gYWxsb2NhdGUgdmFyaWFibGVzIGlu
LiAgU2luY2UgYnVpbHQtaW5zIHRlbmQgdG8gZ28gdG8gZGlmZmVyZW50IHJlZ2lzdGVycworLy8g
dGhhbiB2YXJ5aW5nIG9yIHVuaWZvcm0sIGl0IG1ha2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJzLCBu
b3Qgc3ViLWNsYXNzZXMuCisvLworZW51bSBUUXVhbGlmaWVyCit7CisgICAgRXZxVGVtcG9yYXJ5
LCAgICAgLy8gRm9yIHRlbXBvcmFyaWVzICh3aXRoaW4gYSBmdW5jdGlvbiksIHJlYWQvd3JpdGUK
KyAgICBFdnFHbG9iYWwsICAgICAgICAvLyBGb3IgZ2xvYmFscyByZWFkL3dyaXRlCisgICAgRXZx
Q29uc3QsICAgICAgICAgLy8gVXNlciBkZWZpbmVkIGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBw
YXJhbWV0ZXJzIGluIGZ1bmN0aW9ucworICAgIEV2cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5
CisgICAgRXZxVmFyeWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25s
eQorICAgIEV2cVZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3Jp
dGUKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQg
c2hhZGVycyBvbmx5CisgICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNo
YWRlcnMgb25seSAgcmVhZC93cml0ZQorICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5
LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CisKKyAgICAvLyBwYWNrL3VucGFjayBpbnB1dCBhbmQgb3V0
cHV0CisgICAgRXZxSW5wdXQsCisgICAgRXZxT3V0cHV0LAorCisgICAgLy8gcGFyYW1ldGVycwor
ICAgIEV2cUluLAorICAgIEV2cU91dCwKKyAgICBFdnFJbk91dCwKKyAgICBFdnFDb25zdFJlYWRP
bmx5LAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgdmVydGV4IHNoYWRlcgorICAgIEV2
cVBvc2l0aW9uLAorICAgIEV2cVBvaW50U2l6ZSwKKworICAgIC8vIGJ1aWx0LWlucyByZWFkIGJ5
IGZyYWdtZW50IHNoYWRlcgorICAgIEV2cUZyYWdDb29yZCwKKyAgICBFdnFGcm9udEZhY2luZywK
KyAgICBFdnFQb2ludENvb3JkLAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0ZW4gYnkgZnJhZ21l
bnQgc2hhZGVyCisgICAgRXZxRnJhZ0NvbG9yLAorICAgIEV2cUZyYWdEYXRhLAorCisgICAgLy8g
ZW5kIG9mIGxpc3QKKyAgICBFdnFMYXN0LAorfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCBmb3Ig
ZGVidWcgcHJpbnQgb3V0LCBjYXJyaWVkIGFsb25nIHdpdGggdGhlIGRlZmluaXRpb25zIGFib3Zl
LgorLy8KK19faW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVy
IHEpCit7CisgICAgc3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAg
IHJldHVybiAiVGVtcG9yYXJ5IjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAg
ICAgICByZXR1cm4gIkdsb2JhbCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDog
ICAgICAgICAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29u
c3RSZWFkT25seTogIHJldHVybiAiY29uc3QiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cUF0dHJpYnV0ZTogICAgICByZXR1cm4gImF0dHJpYnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFWYXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxVmFyeWluZ091dDogICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWlu
ZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFy
aWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJu
ICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJl
dHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dDogICAgICAgICAg
ICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbk91dDogICAg
ICAgICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5wdXQ6
ICAgICAgICAgIHJldHVybiAiaW5wdXQiOyAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91
dHB1dDogICAgICAgICByZXR1cm4gIm91dHB1dCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFQb3NpdGlvbjogICAgICAgcmV0dXJuICJQb3NpdGlvbiI7ICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxUG9pbnRTaXplOiAgICAgIHJldHVybiAiUG9pbnRTaXplIjsgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24g
cXVhbGlmaWVyIjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBfQkFTSUNUWVBFU19JTkNMVURFRF8K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xT
TC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSB0
aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAg
SXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENvbXBpbGVyKiBD
b25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQorewor
ICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wobGFuZ3VhZ2UsIHNwZWMpOworfQorCisvLwor
Ly8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVyCisvLwordm9p
ZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQoreworICAgIGRlbGV0ZSBjb21w
aWxlcjsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFu
c2xhdG9ySExTTC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRv
IGNyZWF0ZSB0aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZl
bCBjb2RlLiAgSXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENv
bXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBz
cGVjKQoreworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wobGFuZ3VhZ2UsIHNwZWMpOwor
fQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVy
CisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNvbXBpbGVyKQoreworICAgIGRl
bGV0ZSBjb21waWxlcjsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0NPTU1PTl9JTkNMVURFRF8KKyNkZWZpbmUg
X0NPTU1PTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
I2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21waWxl
ci9Qb29sQWxsb2MuaCIKKwordHlwZWRlZiBpbnQgVFNvdXJjZUxvYzsKK2NvbnN0IHVuc2lnbmVk
IGludCBTb3VyY2VMb2NMaW5lTWFzayA9IDB4ZmZmZjsKK2NvbnN0IHVuc2lnbmVkIGludCBTb3Vy
Y2VMb2NTdHJpbmdTaGlmdCA9IDE2OworCisvLworLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19E
RUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCisvLwor
I2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEEpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJu
IChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSAgICAgXAorICAgIHZvaWQg
b3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIHZvaWQgKikgeyB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHMp
IHsgcmV0dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAoX1doZXJlKTsJfSBcCisgICAg
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsg
fQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0cmluZy4KKy8vCit0eXBlZGVmIHBvb2xfYWxs
b2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7Cit0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5n
IDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5n
OwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0
czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKK2lubGluZSBUU3RyaW5n
KiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBzKQoreworCXZvaWQqIG1lbW9yeSA9IEdsb2Jh
bFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1l
bW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8vIFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4g
IFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmluZ3MgdGhhdCBzdXJ2aXZlCisvLyBhY3Jvc3Mg
Y29tcGlsZXMuCisvLworI2RlZmluZSBUUGVyc2lzdFN0cmluZyBzdGQ6OnN0cmluZworI2RlZmlu
ZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9zdHJpbmdzdHJlYW0KKworLy8KKy8vIFBvb2wg
YWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMsIGxpc3RzLCBhbmQgbWFwcworLy8KK3RlbXBs
YXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDogcHVibGljIHN0ZDo6dmVjdG9yPFQsIHBvb2xf
YWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0
b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICBUVmVj
dG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KCkge30KKyAgICBUVmVj
dG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBhKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxs
b2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9yKHNpemVfdHlwZSBpKTogc3RkOjp2ZWN0b3I8
VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEssIGNs
YXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxLPiA+IAorY2xhc3MgVE1hcCA6IHB1YmxpYyBz
dGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+
ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0
IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRNYXAoKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwg
dEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBjb3JyZWN0IHR3by1zdGFnZSBuYW1lIGxvb2t1
cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJvdmUKKyAgICBUTWFwKGNvbnN0IHRBbGxvY2F0
b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPihzdGQ6Om1hcDxLLCBELCBD
TVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgpLCBhKSB7fQorfTsKKwordHlwZWRlZiBUTWFw
PFRTdHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJsZTsKKworI2VuZGlmIC8vIF9DT01NT05fSU5D
TFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI4OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQ09OU1RBTlRfVU5JT05f
SU5DTFVERURfCisjZGVmaW5lIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KKworI2luY2x1ZGUg
PGFzc2VydC5oPgorCitjbGFzcyBDb25zdGFudFVuaW9uIHsKK3B1YmxpYzoKKworICAgIFBPT0xf
QUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikgICAgICAgIAorICAgIHZv
aWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZv
aWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3QgPSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KKyAg
ICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29uc3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQor
CisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZD
b25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4g
YkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQor
ICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wg
Z2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaSA9PSBpQ29uc3QpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoZiA9PSBmQ29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChiID09IGJDb25zdCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgIGlmIChjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAg
ICAgICAgICAgIGlmIChjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0KQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRCb29s
OgorICAgICAgICAgICAgaWYgKGNvbnN0YW50LmJDb25zdCA9PSBiQ29uc3QpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
bnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShpKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhb3BlcmF0b3I9PShmKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGIp
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShjb25zdGFudCk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3Rh
bnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgIGlmIChpQ29uc3QgPiBjb25zdGFudC5pQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPiBjb25zdGFudC5mQ29uc3QpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29uc3RhbnRVbmlvbiYg
Y29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDoKKyAg
ICAgICAgICAgIGlmIChpQ29uc3QgPCBjb25zdGFudC5pQ29uc3QpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBF
YnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPCBjb25zdGFudC5mQ29uc3QpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNz
aW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3Qg
Q29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRV
bmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFs
dWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsK
KyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1
cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRV
bmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAg
eyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5
cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3Qo
ZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAorICAgICAgICBkZWZhdWx0OiBhc3Nl
cnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0
YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5
cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVy
blZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3Rh
bnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAor
ICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRl
ZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVu
aW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVy
blZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAg
ICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJh
dG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAg
ICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25z
dGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50
OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Npbmci
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAg
ICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkg
Y29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAg
ICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNl
ICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25z
dGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9u
IHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZh
dWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9u
IG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAK
KyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUg
PT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNl
IEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25zdChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0
KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAg
IH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVl
OworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJD
b25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29u
c3QgeyByZXR1cm4gdHlwZTsgfQorcHJpdmF0ZToKKworICAgIHVuaW9uICB7CisgICAgICAgIGlu
dCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBzY2FsYXIgaW50cworICAgICAgICBib29sIGJD
b25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25z
dDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cworICAgIH0gOworCisgICAg
VEJhc2ljVHlwZSB0eXBlOworfTsKKworI2VuZGlmIC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURF
RF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9JbmZvU2luay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCit2b2lk
IFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4VHlwZSBtZXNzYWdlKSB7CisgICAgc3dpdGNo
KG1lc3NhZ2UpIHsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm9uZToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVQcmVmaXhXYXJuaW5nOgorICAgICAgICAgICAgc2luay5hcHBlbmQo
IldBUk5JTkc6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEVy
cm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIkVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhJbnRlcm5hbEVycm9yOgorICAgICAgICAgICAgc2lu
ay5hcHBlbmQoIklOVEVSTkFMIEVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVQcmVmaXhVbmltcGxlbWVudGVkOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVO
SU1QTEVNRU5URUQ6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZp
eE5vdGU6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiTk9URTogIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04g
RVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRJbmZvU2lu
a0Jhc2U6OmxvY2F0aW9uKFRTb3VyY2VMb2MgbG9jKSB7CisgICAgaW50IHN0cmluZyA9IGxvYyA+
PiBTb3VyY2VMb2NTdHJpbmdTaGlmdDsKKyAgICBpbnQgbGluZSA9IGxvYyAmIFNvdXJjZUxvY0xp
bmVNYXNrOworCisgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIGlmIChsaW5l
KQorICAgICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6IiA8PCBsaW5lOworICAgIGVsc2UKKyAg
ICAgICAgc3RyZWFtIDw8IHN0cmluZyA8PCAiOj8gIjsKKyAgICBzdHJlYW0gPDwgIjogIjsKKwor
ICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6
bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKSB7CisgICAgcHJlZml4
KG1lc3NhZ2UpOworICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOwor
fQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29u
c3QgY2hhciogcywgVFNvdXJjZUxvYyBsb2MpIHsKKyAgICBwcmVmaXgobWVzc2FnZSk7CisgICAg
bG9jYXRpb24obG9jKTsKKyAgICBzaW5rLmFwcGVuZChzKTsKKyAgICBzaW5rLmFwcGVuZCgiXG4i
KTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9JTkZPU0lOS19JTkNMVURFRF8KKyNkZWZpbmUgX0lO
Rk9TSU5LX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImNvbXBpbGVy
L0NvbW1vbi5oIgorCisvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGdpdmVu
IGZsb2F0aW5nLXBvaW50IG51bWJlci4KK2lubGluZSBmbG9hdCBmcmFjdGlvbmFsUGFydChmbG9h
dCBmKSB7CisgIGZsb2F0IGludFBhcnQgPSAwLjBmOworICByZXR1cm4gbW9kZmYoZiwgJmludFBh
cnQpOworfQorCisvLworLy8gVFByZWZpeFR5cGUgaXMgdXNlZCB0byBjZW50cmFsaXplIGhvdyBp
bmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KKy8vIFNlZSBiZWxvdy4KKy8vCitlbnVtIFRQcmVmaXhU
eXBlIHsKKyAgICBFUHJlZml4Tm9uZSwKKyAgICBFUHJlZml4V2FybmluZywKKyAgICBFUHJlZml4
RXJyb3IsCisgICAgRVByZWZpeEludGVybmFsRXJyb3IsCisgICAgRVByZWZpeFVuaW1wbGVtZW50
ZWQsCisgICAgRVByZWZpeE5vdGUKK307CisKKy8vCisvLyBFbmNhcHN1bGF0ZSBpbmZvIGxvZ3Mg
Zm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVtLgorLy8KKy8vIFRoZSBtZXRob2RzIGFyZSBh
IGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0aW5nIGEgdmFyaWV0eSBvZgorLy8gbWVzc2Fn
ZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhlIGxvZy4KKy8vCitjbGFzcyBUSW5mb1NpbmtC
YXNlIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtCYXNlKCkge30KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkgewor
ICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB0
OworICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIC8vIE92ZXJyaWRlIDw8IG9wZXJhdG9yIGZvciBzcGVjaWZpYyB0eXBl
cy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJpbmdzCisgICAgLy8gYW5kIGNoYXJhY3RlcnMg
ZGlyZWN0bHkgdG8gdGhlIHNpbmsuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjaGFy
IGMpIHsKKyAgICAgICAgc2luay5hcHBlbmQoMSwgYyk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBjaGFyKiBzdHIpIHsK
KyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIp
IHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IFRTdHJpbmcmIHN0cikgewor
ICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGZsb2F0cyBhcmUgd3JpdHRlbiB3aXRoIGNvcnJlY3Qg
cHJlY2lzaW9uLgorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoZmxvYXQgZikgeworICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgZGVjaW1hbCBwb2ludCBpcyB3cml0
dGVuLiBJZiBhIG51bWJlcgorICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEgZnJhY3Rpb25hbCBw
YXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9ybWF0IGRvZXMKKyAgICAgICAgLy8gbm90IHdy
aXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2ggZ2V0cyBpbnRlcnByZXRlZCBhcyBpbnRlZ2Vy
IGJ5CisgICAgICAgIC8vIHRoZSBjb21waWxlci4KKyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJl
YW0gc3RyZWFtOworICAgICAgICBpZiAoZnJhY3Rpb25hbFBhcnQoZikgPT0gMC4wZikgeworICAg
ICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCBzdGQ6
OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpmaXhlZCk7CisgICAgICAgICAgICBzdHJlYW0u
dW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsKKyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNp
b24oOCk7CisgICAgICAgICAgICBzdHJlYW0gPDwgZjsKKyAgICAgICAgfQorICAgICAgICBzaW5r
LmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAg
IC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRoZWlyIG5hbWVzIGluc3RlYWQgb2YgaW50ZWdy
YWwgdmFsdWUuCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChib29sIGIpIHsKKyAgICAg
ICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisgICAgICAgIHNpbmsu
YXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkIGVy
YXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KKworICAgIGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIo
KSBjb25zdCB7IHJldHVybiBzaW5rOyB9CisgICAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7
IHJldHVybiBzaW5rLmNfc3RyKCk7IH0KKworICAgIHZvaWQgcHJlZml4KFRQcmVmaXhUeXBlIG1l
c3NhZ2UpOworICAgIHZvaWQgbG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpOworICAgIHZvaWQgbWVz
c2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzKTsKKyAgICB2b2lkIG1lc3Nh
Z2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcywgVFNvdXJjZUxvYyBsb2MpOwor
Citwcml2YXRlOgorICAgIFRQZXJzaXN0U3RyaW5nIHNpbms7Cit9OworCitjbGFzcyBUSW5mb1Np
bmsgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jhc2UgaW5mbzsKKyAgICBUSW5mb1NpbmtCYXNl
IGRlYnVnOworICAgIFRJbmZvU2lua0Jhc2Ugb2JqOworfTsKKworI2VuZGlmIC8vIF9JTkZPU0lO
S19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQ3JlYXRlIHN0cmluZ3Mg
dGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8v
IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdz
IGJldHdlZW4gCisvLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKKwordm9pZCBUQnVpbHRJbnM6OmluaXRpYWxpemUoKQoreworICAgIC8vCisg
ICAgLy8gSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1aWx0LWluIHN0cmluZ3MgZm9yIHBhcnNpbmcuCisg
ICAgLy8KKyAgICBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbnM7CisgICAgVFN0cmluZyBCdWlsdElu
RnVuY3Rpb25zVmVydGV4OworICAgIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50Owor
ICAgIFRTdHJpbmcgU3RhbmRhcmRVbmlmb3JtczsKKyAgICBUU3RyaW5nIFZlcnRleERlZmF1bHRQ
cmVjaXNpb247CisgICAgVFN0cmluZyBGcmFnbWVudERlZmF1bHRQcmVjaXNpb247CisKKyAgICB7
CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBQ
cm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSBib3RoIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IEJ1aWx0SW5GdW5jdGlvbnM7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAg
ICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCByYWRpYW5zKGZsb2F0IGRlZ3Jl
ZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgcmFkaWFucyh2ZWMyICBk
ZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJhZGlhbnModmVj
MyAgZGVncmVlcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICByYWRpYW5z
KHZlYzQgIGRlZ3JlZXMpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBk
ZWdyZWVzKGZsb2F0IHJhZGlhbnMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgZGVncmVlcyh2ZWMyICByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGRlZ3JlZXModmVjMyAgcmFkaWFucyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBkZWdyZWVzKHZlYzQgIHJhZGlhbnMpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBzaW4oZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMiAgc2luKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIHNpbih2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBzaW4odmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBjb3MoZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgY29zKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGNvcyh2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBjb3ModmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJm
bG9hdCB0YW4oZmxvYXQgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgdGFuKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
IHRhbih2ZWMzICBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICB0
YW4odmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBh
c2luKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXNpbih2
ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFzaW4odmVjMyAg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhc2luKHZlYzQgIHgpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhY29zKGZsb2F0IHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWNvcyh2ZWMyICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFjb3ModmVjMyAgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhY29zKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0IHksIGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2ZWMyICB5LCB2ZWMyICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGF0YW4odmVjMyAgeSwgdmVjMyAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHksIHZlYzQgIHgpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0IHlfb3Zlcl94
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGF0YW4odmVjMiAgeV9vdmVy
X3gpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXRhbih2ZWMzICB5X292
ZXJfeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHlf
b3Zlcl94KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rp
b25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBwb3coZmxv
YXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBwb3co
dmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBw
b3codmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBwb3codmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGV4cChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIg
IGV4cCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGV4cCh2
ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGV4cCh2ZWM0ICB4
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbG9nKGZsb2F0IHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbG9nKHZlYzIgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbG9nKHZlYzMgIHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgbG9nKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBleHAyKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMiAgZXhwMih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzMgIGV4cDIodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBleHAyKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBsb2cyKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbG9n
Mih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGxvZzIodmVj
MyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2cyKHZlYzQgIHgp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzcXJ0KGZsb2F0IHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3FydCh2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNxcnQodmVjMyAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzcXJ0KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBpbnZlcnNlc3FydChmbG9hdCB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGludmVyc2VzcXJ0KHZlYzIgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgaW52ZXJzZXNxcnQodmVjMyAgeCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBpbnZlcnNlc3FydCh2ZWM0ICB4KTsiKSk7CisK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYWJzKGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWJzKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgYWJzKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgYWJzKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBzaWduKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgc2lnbih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNp
Z24odmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzaWduKHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmbG9vcihmbG9h
dCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGZsb29yKHZlYzIgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZmxvb3IodmVjMyAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmbG9vcih2ZWM0ICB4KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgY2VpbChmbG9hdCB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNlaWwodmVjMiAgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBjZWlsKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgY2VpbCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiZmxvYXQgZnJhY3QoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBmcmFjdCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGZyYWN0KHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgZnJhY3QodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IG1vZChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIG1vZCh2ZWMyICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIG1vZCh2ZWMzICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIG1vZCh2ZWM0ICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWluKGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWluKHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWluKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIGZsb2F0IHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWluKHZlYzIgIHgsIHZlYzIgIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWluKHZlYzMgIHgsIHZlYzMg
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIHZl
YzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtYXgoZmxvYXQg
eCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtYXgodmVj
MiAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgo
dmVjMyAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBt
YXgodmVjNCAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBtYXgodmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzICBtYXgodmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0ICBtYXgodmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImZsb2F0IGNsYW1wKGZsb2F0IHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIGZsb2F0
IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGNsYW1wKHZlYzMgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNsYW1wKHZlYzQgIHgsIGZsb2F0IG1pblZhbCwg
ZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1w
KHZlYzIgIHgsIHZlYzIgIG1pblZhbCwgdmVjMiAgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1wKHZlYzMgIHgsIHZlYzMgIG1pblZhbCwgdmVjMyAgbWF4
VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNsYW1wKHZlYzQgIHgs
IHZlYzQgIG1pblZhbCwgdmVjNCAgbWF4VmFsKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgbWl4KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWl4KHZlYzIgIHgsIHZlYzIgIHksIGZsb2F0IGEpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWl4KHZlYzMgIHgsIHZlYzMgIHks
IGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQg
IHgsIHZlYzQgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgbWl4KHZlYzIgIHgsIHZlYzIgIHksIHZlYzIgIGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgbWl4KHZlYzMgIHgsIHZlYzMgIHksIHZlYzMgIGEpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHksIHZlYzQgIGEp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzdGVwKGZsb2F0IGVkZ2Us
IGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3RlcCh2ZWMy
ICBlZGdlLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0
ZXAodmVjMyAgZWRnZSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBzdGVwKHZlYzQgIGVkZ2UsIHZlYzQgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgc3RlcChmbG9hdCBlZGdlLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjMyAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzQgIHgpOyIpKTsK
KworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzbW9vdGhzdGVwKGZsb2F0IGVkZ2Uw
LCBmbG9hdCBlZGdlMSwgZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMyICBzbW9vdGhzdGVwKHZlYzIgIGVkZ2UwLCB2ZWMyICBlZGdlMSwgdmVjMiAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzbW9vdGhzdGVwKHZlYzMgIGVkZ2UwLCB2
ZWMzICBlZGdlMSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBzbW9vdGhzdGVwKHZlYzQgIGVkZ2UwLCB2ZWM0ICBlZGdlMSwgdmVjNCAgeCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9h
dCBlZGdlMSwgdmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBz
bW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjMyAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBl
ZGdlMSwgdmVjNCAgeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEdlb21ldHJpYyBG
dW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxl
bmd0aChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0
aCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2
ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWM0
ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UoZmxv
YXQgcDAsIGZsb2F0IHAxKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRp
c3RhbmNlKHZlYzIgIHAwLCB2ZWMyICBwMSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBkaXN0YW5jZSh2ZWMzICBwMCwgdmVjMyAgcDEpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UodmVjNCAgcDAsIHZlYzQgIHAxKTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzIgIHgsIHZlYzIgIHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzMgIHgsIHZlYzMgIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzQgIHgsIHZlYzQg
IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIGNyb3NzKHZlYzMgeCwg
dmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vcm1hbGl6ZShm
bG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG5vcm1hbGl6ZSh2
ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG5vcm1hbGl6ZSh2
ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG5vcm1hbGl6ZSh2
ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZmFjZWZvcndh
cmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBmYWNlZm9yd2FyZCh2ZWMyICBOLCB2ZWMyICBJLCB2ZWMyICBOcmVmKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZhY2Vmb3J3YXJkKHZlYzMgIE4s
IHZlYzMgIEksIHZlYzMgIE5yZWYpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgZmFjZWZvcndhcmQodmVjNCAgTiwgdmVjNCAgSSwgdmVjNCAgTnJlZik7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJlZmxlY3QoZmxvYXQgSSwgZmxvYXQgTik7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByZWZsZWN0KHZlYzIgIEksIHZlYzIg
IE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmVmbGVjdCh2ZWMzICBJ
LCB2ZWMzICBOKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJlZmxlY3Qo
dmVjNCAgSSwgdmVjNCAgTik7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IHJlZnJhY3QoZmxvYXQgSSwgZmxvYXQgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgIHJlZnJhY3QodmVjMiAgSSwgdmVjMiAgTiwgZmxvYXQgZXRhKTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJlZnJhY3QodmVjMyAgSSwgdmVj
MyAgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJl
ZnJhY3QodmVjNCAgSSwgdmVjNCAgTiwgZmxvYXQgZXRhKTsiKSk7CisKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gTWF0cml4IEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygibWF0MiBtYXRyaXhDb21wTXVsdChtYXQyIHgsIG1hdDIgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJtYXQzIG1hdHJpeENvbXBNdWx0KG1hdDMgeCwgbWF0MyB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIm1hdDQgbWF0cml4Q29tcE11bHQobWF0NCB4
LCBtYXQ0IHkpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBWZWN0b3IgcmVsYXRpb25h
bCBmdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMy
IGxlc3NUaGFuKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJ2ZWMzIGxlc3NUaGFuKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWM0IGxlc3NUaGFuKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW4oaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbihpdmVjMyB4LCBpdmVjMyB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuKGl2ZWM0IHgsIGl2
ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbkVx
dWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMz
IGxlc3NUaGFuRXF1YWwodmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzQgbGVzc1RoYW5FcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuRXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbkVxdWFsKGl2ZWMz
IHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1Ro
YW5FcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzIgZ3JlYXRlclRoYW4odmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW4odmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3JlYXRlclRoYW4odmVjNCB4LCB2ZWM0IHkpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbihpdmVjMiB4
LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJU
aGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzQgZ3JlYXRlclRoYW4oaXZlYzQgeCwgaXZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuRXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW5FcXVhbCh2ZWMzIHgsIHZl
YzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbkVx
dWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzIgZ3JlYXRlclRoYW5FcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbkVxdWFsKGl2ZWM0
IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVh
bCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBl
cXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
NCBlcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJ2ZWMyIGVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzMgZXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjNCBlcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbCh2ZWMyIHgs
IHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbCh2
ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RF
cXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2
ZWMyIG5vdEVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzMgbm90RXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjNCBub3RFcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90RXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbChidmVjMyB4LCBi
dmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKGJ2
ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFu
eShidmVjMiB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYW55KGJ2ZWMz
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbnkoYnZlYzQgeCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWMyIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzMgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVjNCB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzIgbm90KGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzMgbm90KGJ2ZWMzIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
YnZlYzQgbm90KGJ2ZWM0IHgpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBUZXh0dXJl
IEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0
ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMz
IGNvb3JkKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBjb29yZCk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29y
ZCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vaXNlIGZ1bmN0aW9ucy4KKyAgICAg
ICAgLy8KKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEoZmxvYXQgeCk7Iikp
OworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWMyICB4KTsiKSk7Cisg
ICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzMgIHgpOyIpKTsKKyAgICAv
LwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVjNCAgeCk7IikpOworCisgICAgLy8J
cy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiBub2lzZTIodmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygi
dmVjMyBub2lzZTMoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
bm9pc2UzKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNl
Myh2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBub2lzZTModmVj
NCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQoZmxvYXQg
eCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzIgIHgpOyIp
KTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWMzICB4KTsiKSk7Cisg
ICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjNCAgeCk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBi
dWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSB2ZXJ0ZXggc2hhZGVycyBvbmx5LgorICAgICAgICAv
LworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0g
QnVpbHRJbkZ1bmN0aW9uc1ZlcnRleDsKKworICAgICAgICAvLworICAgICAgICAvLyBHZW9tZXRy
aWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
IGZ0cmFuc2Zvcm0oKTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5j
dGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVy
ZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
YW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3Jk
LCBmbG9hdCBsb2QpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1
cmVDdWJlTG9kKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAg
ICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5
cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSBmcmFnbWVudCBzaGFkZXJzIG9ubHku
CisgICAgICAgIC8vCisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRT
dHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQ7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9h
dCBiaWFzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIs
IHZlYzQgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0
IGJpYXMpOyIpKTsKKworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRGZHgoZmxvYXQg
cCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGRGZHgodmVjMiAgcCk7Iikp
OworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHgodmVjMyAgcCk7IikpOworICAg
IC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRGZHgodmVjNCAgcCk7IikpOworCisgICAgLy8J
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeShmbG9hdCBwKTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgZEZkeSh2ZWMyICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgZEZkeSh2ZWMzICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygi
dmVjNCAgZEZkeSh2ZWM0ICBwKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgZndpZHRoKGZsb2F0IHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
ZndpZHRoKHZlYzIgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZndp
ZHRoKHZlYzMgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZndpZHRo
KHZlYzQgIHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9
CisgICAgeworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gU3RhbmRhcmQgVW5pZm9ybXMKKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IFN0YW5kYXJkVW5pZm9ybXM7CisKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCisg
ICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVycyB7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCIgICAgaGlnaHAgZmxv
YXQgbmVhcjsiKSk7ICAgICAgICAvLyBuCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBo
aWdocCBmbG9hdCBmYXI7IikpOyAgICAgICAgIC8vIGYKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiICAgIGhpZ2hwIGZsb2F0IGRpZmY7IikpOyAgICAgICAgLy8gZiAtIG4KKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygifTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInVuaWZvcm0g
Z2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIERlZmF1bHQgcHJlY2lzaW9uIGZvciB2
ZXJ0ZXggc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisKKyAgICAgICAgVFN0cmluZyYgcyA9IFZlcnRleERlZmF1bHRQcmVjaXNpb247CisKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIGhpZ2hwIGludDsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdocCBmbG9hdDsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZnJh
Z21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgICAgICAgIAorICAgICAgICBUU3RyaW5nJiBzID0gRnJhZ21lbnREZWZhdWx0UHJlY2lzaW9u
OworICAgICAgICAKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIG1lZGl1bXAg
aW50OyIpKTsKKyAgICAgICAgLy8gTm8gZGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IGluIGZy
YWdtZW50IHNoYWRlcnMKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQor
CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soRnJhZ21lbnRE
ZWZhdWx0UHJlY2lzaW9uKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1
c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zLmNfc3RyKCkpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VT
aExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCk7CisgICAg
YnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jt
cyk7CisgICAgCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKFZl
cnRleERlZmF1bHRQcmVjaXNpb24pOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhd
LnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5n
VmVydGV4XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCk7CisgICAgYnVpbHRJblN0
cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKFN0YW5kYXJkVW5pZm9ybXMpOworfQorCit2
b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShjb25zdCBUQnVpbHRJblJlc291cmNlICZyZXNvdXJj
ZXMpCit7CisgICAgVFN0cmluZ1N0cmVhbSBidWlsdEluczsKKworICAgIC8vIEltcGxlbWVudGF0
aW9uIGRlcGVuZGVudCBjb25zdGFudHMKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01h
eFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsK
KyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzID0g
IiA8PCByZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPDwgIjsiOworCisgICAgYnVp
bHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5nVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2Vz
Lm1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGds
X01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLm1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4
VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA8
PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7
CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVz
b3VyY2VzLm1heERyYXdCdWZmZXJzIDw8ICI7IjsKKworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExh
bmdGcmFnbWVudF0ucHVzaF9iYWNrKGJ1aWx0SW5zLnN0cigpKTsKKyAgICBidWlsdEluU3RyaW5n
c1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soYnVpbHRJbnMuc3RyKCkpOworfQorCit2b2lkIElk
ZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpCit7CisgICAgLy8KKyAgICAvLyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWls
dC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFk
ZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKKworICAgIGNhc2UgRVNo
TGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmlu
ZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAg
ICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQs
ICAyKSkpOworCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVTaExhbmdW
ZXJ0ZXg6CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBv
c2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5leHQsIGlkZW50aWZ5IHdoaWNoIGJ1
aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFkZXJzIGhhdmUKKyAgICAvLyBhIG1h
cHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFyZSBub3QgaWRlbnRpZmllZCBhcyBz
dWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29sdmVkIHRocm91Z2ggYSBsaWJyYXJ5
IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAgLy8gb3BlcmF0aW9ucy4KKyAgICAvLworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgICAgICBFT3BWZWN0
b3JMb2dpY2FsTm90KTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJp
eENvbXBNdWx0IiwgICBFT3BNdWwpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BM
ZXNzVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4i
LCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwp
OworICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAg
IEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMi
LCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNp
biIsICAgICAgICAgIEVPcFNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
Y29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9nMik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNx
cnQpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAg
RU9wQWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAg
ICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAg
ICAgICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIs
ICAgICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJh
Y3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im1vZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOworCisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5j
ZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAgICAgRU9w
RG90KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBF
T3BDcm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwg
ICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNl
Zm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAgCisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOworCisgICAg
c3dpdGNoKGxhbmd1YWdlKQorICAgIHsKKyAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgorICAgIC8vCXN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgICAgICAgIEVPcERQZHgpOyAgICAgLy8gT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImRGZHkiLCAgICAgICAgIEVPcERQZHkpOyAgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3
aWR0aCIsICAgICAgIEVPcEZ3aWR0aCk7ICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4
dGVuc2lvbgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxh
bmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9Cit9CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElu
cyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3Qg
VEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQoreworICAgIC8vCisgICAgLy8gRmlyc3QsIGlu
c2VydCBzb21lIHNwZWNpYWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAg
ICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVzLgorICAgIC8vCisgICAgc3dpdGNoKGxhbmd1
YWdlKSB7CisKKyAgICBjYXNlIEVTaExhbmdGcmFnbWVudDogeworICAgICAgICAgICAgLy8gU2V0
IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCisgICAgICAgICAgICBUVHlwZSBmcmFn
RGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCwgZmFsc2UsIHRydWUp
OworICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5tYXhEcmF3QnVm
ZmVycyk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9Cit9CisKK2NvbnN0IGNo
YXIqIEdldFByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmcoKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyICpQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5nID0gIiI7CisKKyAgICByZXR1cm4gUHJlcHJv
Y2Vzc29yQnVpbHRpblN0cmluZzsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0lOSVRJQUxJ
WkVfSU5DTFVERURfCisjZGVmaW5lIF9JTklUSUFMSVpFX0lOQ0xVREVEXworCisjaW5jbHVkZSAi
R0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1i
b2xUYWJsZS5oIgorCit0eXBlZGVmIFRWZWN0b3I8VFN0cmluZz4gVEJ1aWx0SW5TdHJpbmdzOwor
CitjbGFzcyBUQnVpbHRJbnMgeworcHVibGljOgorCVBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
R2xvYmFsUG9vbEFsbG9jYXRvcikKKwl2b2lkIGluaXRpYWxpemUoKTsKKwl2b2lkIGluaXRpYWxp
emUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKTsKKwlUQnVpbHRJblN0cmluZ3Mq
IGdldEJ1aWx0SW5TdHJpbmdzKCkgeyByZXR1cm4gYnVpbHRJblN0cmluZ3M7IH0KK3Byb3RlY3Rl
ZDoKKwlUQnVpbHRJblN0cmluZ3MgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0NvdW50XTsKK307CisK
K3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxlJik7Cit2b2lk
IElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UsIFRTeW1ib2xUYWJsZSYsIGNvbnN0IFRCdWls
dEluUmVzb3VyY2UgJnJlc291cmNlcyk7Citib29sIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxl
KGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywgVEluZm9TaW5rJiwgVFN5bWJvbFRh
YmxlKiwgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBFU2hMYW5nQ291bnQpOworYm9vbCBJbml0aWFs
aXplU3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3Vh
Z2UgbGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2Ug
KnJlc291cmNlcywgVFN5bWJvbFRhYmxlKik7Citjb25zdCBjaGFyKiBHZXRQcmVwcm9jZXNzb3JC
dWlsdGluU3RyaW5nKCk7CitleHRlcm4gIkMiIGludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpOwor
ZXh0ZXJuICJDIiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisKKyNlbmRpZiAvLyBf
SU5JVElBTElaRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
RGxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKworT1NfVExTSW5kZXgg
VGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5p
dFByb2Nlc3MoKQoreworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggIT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpIHsKKwkJLy8KKwkJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudC4KKwkJLy8K
KyAgICAgICAgcmV0dXJuIHRydWU7CisJfQorCisgICAgVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0g
T1NfQWxsb2NUTFNJbmRleCgpOworCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBP
U19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3Mo
KTogRmFpbGVkIHRvIGFsbG9jYXRlIFRMUyBhcmVhIGZvciBpbml0IGZsYWciKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCX0KKworCisgICAgaWYgKCFJbml0aWFsaXplUG9vbEluZGV4KCkpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUg
Z2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIGlmICghSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQ
cm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29udGV4dCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisJfQorCisJSW5pdFRocmVhZCgpOworICAgIHJldHVybiB0cnVlOworfQor
CisKK2Jvb2wgSW5pdFRocmVhZCgpCit7CisJLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHJl
LWVudHJhbnQKKwkvLworICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTogUHJvY2VzcyBoYXNu
J3QgYmVlbiBpbml0YWxpc2VkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAg
aWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCkgIT0gMCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKwlJbml0aWFsaXplR2xvYmFsUG9vbHMoKTsKKworCWlmICghSW5pdGlh
bGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCwgKHZvaWQgKikxKSkgewor
CQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBVbmFibGUgdG8gc2V0IGluaXQgZmxhZy4iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jv
b2wgRGV0YWNoVGhyZWFkKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgaWYg
KFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKwkvLworCS8vIEZ1bmN0aW9uIGlzIHJlLWVudHJhbnQgYW5kIHRoaXMg
dGhyZWFkIG1heSBub3QgaGF2ZSBiZWVuIGluaXRhbGlzZWQuCisJLy8KKyAgICBpZiAoT1NfR2V0
VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKSB7CisgICAgICAgIGlmICghT1Nf
U2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTApKSB7CisJCQlhc3Nl
cnQoMCAmJiAiRGV0YWNoVGhyZWFkKCk6IFVuYWJsZSB0byBjbGVhciBpbml0IGZsYWcuIik7Cisg
ICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisJCX0KKworCQlGcmVlR2xvYmFsUG9vbHMoKTsK
KworCQlpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKwl9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBEZXRhY2hQcm9jZXNzKCkK
K3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBTaEZpbmFsaXplKCk7CisKKyAgICBzdWNjZXNzID0gRGV0YWNoVGhyZWFkKCk7CisKKwlGcmVl
UG9vbEluZGV4KCk7CisKKwlpZiAoIUZyZWVQYXJzZUNvbnRleHRJbmRleCgpKQorICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisKKyAgICBPU19GcmVlVExTSW5kZXgoVGhyZWFkSW5pdGlhbGl6ZUlu
ZGV4KTsKKyAgICBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsK
KworICAgIHJldHVybiBzdWNjZXNzOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemVEbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURs
bC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYg
X19JTklUSUFMSVpFRExMX0gKKyNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKKworCisjaW5jbHVk
ZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKKworYm9vbCBJbml0UHJvY2VzcygpOworYm9vbCBJ
bml0VGhyZWFkKCk7Citib29sIERldGFjaFRocmVhZCgpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7
CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExfSAorCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZUdsb2JhbHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXworI2Rl
ZmluZSBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KKwordm9pZCBJbml0aWFsaXplR2xv
YmFsUG9vbHMoKTsKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCk7Citib29sIEluaXRpYWxpemVQb29s
SW5kZXgoKTsKK3ZvaWQgRnJlZVBvb2xJbmRleCgpOworCisjZW5kaWYgLy8gX19JTklUSUFMSVpF
X0dMT0JBTFNfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVE
XworI2RlZmluZSBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KKyNpbmNsdWRl
ICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5k
ZXgoKTsKK2Jvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOworYm9vbCBGcmVlUGFy
c2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOworCisKKyNlbmRpZiAv
LyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8v
CisvLyBUcmF2ZXJzZSB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAor
Ly8gY2FsbCBhIG5vZGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgZWFjaCBub2RlLgorLy8g
RG9uZSByZWN1cnNpdmVseSB0aHJvdWdoIHRoZSBtZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4K
Ky8vIE5vZGUgdHlwZXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBp
cyAwLAorLy8gYnV0IHRoZWlyIHN1YnRyZWUgd2lsbCBzdGlsbCBiZSB0cmF2ZXJzZWQuCisvLyBO
b2RlcyB3aXRoIGNoaWxkcmVuIGNhbiBoYXZlIHRoZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAor
Ly8gaWYgcHJlVmlzaXQgaXMgdHVybmVkIG9uIGFuZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlv
bgorLy8gcmV0dXJucyBmYWxzZS4KKy8vCisvLyBwcmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmln
aHRUb0xlZnQgY29udHJvbCB3aGF0IG9yZGVyCisvLyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KKy8v
CisKKy8vCisvLyBUcmF2ZXJzYWwgZnVuY3Rpb25zIGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hm
b3J3YXJkLi4uLgorLy8KK3ZvaWQgVEludGVybVN5bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciogaXQpCit7CisJaXQtPnZpc2l0U3ltYm9sKHRoaXMpOworfQorCit2b2lkIFRJbnRlcm1D
b25zdGFudFVuaW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlpdC0+dmlz
aXRDb25zdGFudFVuaW9uKHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9k
ZS4KKy8vCit2b2lkIFRJbnRlcm1CaW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0
KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJLy8KKwkvLyB2aXNpdCB0aGUgbm9kZSBiZWZv
cmUgY2hpbGRyZW4gaWYgcHJlLXZpc2l0aW5nLgorCS8vCisJaWYoaXQtPnByZVZpc2l0KQorCXsK
KwkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOworCX0KKwkKKwkvLwor
CS8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgorCS8vCisJaWYodmlz
aXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQp
IAorCQl7CisJCQlpZihyaWdodCkKKwkJCXsKKwkJCQlyaWdodC0+dHJhdmVyc2UoaXQpOworCQkJ
fQorCQkJCisJCQlpZihpdC0+aW5WaXNpdCkKKwkJCXsKKwkJCQl2aXNpdCA9IGl0LT52aXNpdEJp
bmFyeShJblZpc2l0LCB0aGlzKTsKKwkJCX0KKworCQkJaWYodmlzaXQgJiYgbGVmdCkKKwkJCXsK
KwkJCQlsZWZ0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihs
ZWZ0KQorCQkJeworCQkJCWxlZnQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJCQorCQkJaWYoaXQt
PmluVmlzaXQpCisJCQl7CisJCQkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhp
cyk7CisJCQl9CisKKwkJCWlmKHZpc2l0ICYmIHJpZ2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2
ZXJzZShpdCk7CisJCQl9CisJCX0KKworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwkv
LworCS8vIFZpc2l0IHRoZSBub2RlIGFmdGVyIHRoZSBjaGlsZHJlbiwgaWYgcmVxdWVzdGVkIGFu
ZCB0aGUgdHJhdmVyc2FsCisJLy8gaGFzbid0IGJlZW4gY2FuY2VsbGVkIHlldC4KKwkvLworCWlm
KHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJeworCQlpdC0+dmlzaXRCaW5hcnkoUG9zdFZpc2l0
LCB0aGlzKTsKKwl9Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNv
bW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6
OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOwor
CisJaWYgKGl0LT5wcmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+dmlzaXRVbmFyeShQcmVWaXNpdCwg
dGhpcyk7CisKKwlpZiAodmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisJCW9wZXJh
bmQtPnRyYXZlcnNlKGl0KTsKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCQorCWlmICh2
aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMp
OworfQorCisvLworLy8gVHJhdmVyc2UgYW4gYWdncmVnYXRlIG5vZGUuICBTYW1lIGNvbW1lbnRz
IGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKwkK
KwlpZihpdC0+cHJlVmlzaXQpCisJeworCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVW
aXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRo
KCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlmb3IoVEludGVybVNlcXVlbmNl
OjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLnJiZWdpbigpOyBzaXQgIT0gc2VxdWVu
Y2UucmVuZCgpOyBzaXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworCQkJ
CWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYoKnNpdCAhPSBzZXF1ZW5j
ZS5mcm9udCgpKQorCQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZp
c2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWZv
cihUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAh
PSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisJCQl7CisJCQkJKCpzaXQpLT50cmF2ZXJzZShpdCk7
CisKKwkJCQlpZih2aXNpdCAmJiBpdC0+aW5WaXNpdCkKKwkJCQl7CisJCQkJCWlmKCpzaXQgIT0g
c2VxdWVuY2UuYmFjaygpKQorCQkJCQl7CisJCQkJCQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0
ZShJblZpc2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJaXQtPmRl
Y3JlbWVudERlcHRoKCk7CisJfQorCisJaWYodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwl7CisJ
CWl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8KKy8vIFRy
YXZlcnNlIGEgc2VsZWN0aW9uIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFw
cGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQp
CisJCXZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAo
dmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisJCWlmIChpdC0+cmlnaHRUb0xlZnQp
IHsKKwkJCWlmIChmYWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJ
CWlmICh0cnVlQmxvY2spCisJCQkJdHJ1ZUJsb2NrLT50cmF2ZXJzZShpdCk7CisJCQljb25kaXRp
b24tPnRyYXZlcnNlKGl0KTsKKwkJfSBlbHNlIHsKKwkJCWNvbmRpdGlvbi0+dHJhdmVyc2UoaXQp
OworCQkJaWYgKHRydWVCbG9jaykKKwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWlm
IChmYWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJfQorCQlpdC0+
ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJ
aXQtPnZpc2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJz
ZSBhIGxvb3Agbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4K
Ky8vCit2b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sK
Kwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmKGl0LT5wcmVWaXNpdCkKKwl7CisJCXZpc2l0ID0g
aXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJ
aXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlp
Zih0ZXJtaW5hbCkKKwkJCXsKKwkJCQl0ZXJtaW5hbC0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJ
CQlpZihib2R5KQorCQkJeworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYo
dGVzdCkKKwkJCXsKKwkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQor
CQl7CisJCQlpZih0ZXN0KQorCQkJeworCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwor
CQkJaWYoYm9keSkKKwkJCXsKKwkJCQlib2R5LT50cmF2ZXJzZShpdCk7CisJCQl9CisKKwkJCWlm
KHRlcm1pbmFsKQorCQkJeworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0K
KworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZp
c2l0KQorCXsKKwkJaXQtPnZpc2l0TG9vcChQb3N0VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8K
Ky8vIFRyYXZlcnNlIGEgYnJhbmNoIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2Rl
IGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtQnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQp
CisJCXZpc2l0ID0gaXQtPnZpc2l0QnJhbmNoKFByZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAodmlz
aXQgJiYgZXhwcmVzc2lvbikgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJZXhwcmVzc2lv
bi0+dHJhdmVyc2UoaXQpOworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZiAodmlz
aXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZpc2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7
Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQwNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEJ1aWxkIHRoZSBpbnRl
cm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCisvLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNs
dWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVm
dE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24q
IGxlZnRVbmlvbkFycmF5KTsKKworVFByZWNpc2lvbiBHZXRIaWdoZXN0UHJlY2lzaW9uKCBUUHJl
Y2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKKyAgICByZXR1cm4gbGVmdCA+IHJpZ2h0
ID8gbGVmdCA6IHJpZ2h0OworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZpcnN0IHNl
dCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IG1lbWJlciBmdW5jdGlvbnMgb2Yg
dGhlIG5vZGVzLgorLy8gVGhleSBhcmUgY2FsbGVkIGZyb20gcGFyc2VyIHByb2R1Y3Rpb25zLgor
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBBZGQgYSB0ZXJtaW5hbCBub2RlIGZv
ciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Npb24uCisvLworLy8gUmV0dXJucyB0aGUgYWRk
ZWQgbm9kZS4KKy8vCitUSW50ZXJtU3ltYm9sKiBUSW50ZXJtZWRpYXRlOjphZGRTeW1ib2woaW50
IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25zdCBUVHlwZSYgdHlwZSwgVFNvdXJjZUxvYyBs
aW5lKQoreworICAgIFRJbnRlcm1TeW1ib2wqIG5vZGUgPSBuZXcgVEludGVybVN5bWJvbChpZCwg
bmFtZSwgdHlwZSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2Rl
OworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBwYXJlbnQgdGhhdCBk
b2VzIGEgYmluYXJ5IG9wZXJhdGlvbiBvbiB0aGUgbm9kZXMuCisvLworLy8gUmV0dXJucyB0aGUg
YWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1h
dGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQs
IFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBF
T3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5pc01h
dHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlz
VmVjdG9yKCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICBjYXNlIEVPcExvZ2lj
YWxYb3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5nZXRUeXBlKCku
aXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGxlZnQtPmdldFR5cGUo
KS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2Ug
RU9wU3ViOgorICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAg
ICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8
fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBGaXJzdCB0cnkgY29udmVydGluZyB0aGUgY2hpbGRyZW4gdG8gY29tcGF0aWJsZSB0
eXBlcy4KKyAgICAvLworCisgICAgaWYgKCEobGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpICYm
IHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpKSB7CisgICAgICAgIFRJbnRlcm1UeXBlZCog
Y2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKKyAgICAg
ICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmlnaHQgPSBjaGlsZDsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIHJpZ2h0LT5nZXRUeXBlKCks
IGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAgIGxlZnQgPSBj
aGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQt
PmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworCisgICAgLy8KKyAg
ICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0aGluZ3MgdG9nZXRoZXIgdGhlbi4gIE1ha2UK
KyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8gdGhlIHJpZ2h0IHR5cGUuCisgICAgLy8KKyAg
ICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOworICAgIGlmIChs
aW5lID09IDApCisgICAgICAgIGxpbmUgPSByaWdodC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNl
dExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOworICAgIG5vZGUtPnNldFJp
Z2h0KHJpZ2h0KTsKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBDb25zdGFudCA9
IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpy
aWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgIGlm
IChsZWZ0VGVtcENvbnN0YW50KQorICAgICAgICBsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBpZiAocmlnaHRUZW1wQ29uc3RhbnQpCisgICAgICAg
IHJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAg
Ly8KKyAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgorICAgIC8vCisKKyAgICBU
SW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CisgICAgaWYgKCBsZWZ0VGVtcENvbnN0
YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7CisgICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9IGxl
ZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGlu
Zm9TaW5rKTsKKworICAgICAgICBpZiAodHlwZWRSZXR1cm5Ob2RlKQorICAgICAgICAgICAgcmV0
dXJuIHR5cGVkUmV0dXJuTm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8K
Ky8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gYXNzaWdubWVudC4KKy8vCisvLyBSZXR1
cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRk
QXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJp
Z2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBMaWtlIGFkZGluZyBiaW5h
cnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9uIGNhbiBvbmx5IGdvCisgICAgLy8gZnJvbSBy
aWdodCB0byBsZWZ0LgorICAgIC8vCisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50
ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0gbGVmdC0+
Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBUSW50ZXJtVHlwZWQq
IGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodCk7CisgICAg
aWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgbm9kZS0+c2V0TGVmdChs
ZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGlsZCk7CisgICAgaWYgKCEgbm9kZS0+cHJvbW90
ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisK
Ky8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJvdWdoIGFuIGluZGV4IG9wZXJhdG9yLCB3aGVy
ZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisvLyBvZiBhbiBhcnJheSBvciBzdHJ1Y3QsIGFu
ZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBvZmZzZXQuCisvLworLy8g
UmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRoZSBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlw
ZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQq
IGluZGV4LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5l
dyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0g
aW5kZXgtPmdldExpbmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNl
dExlZnQoYmFzZSk7CisgICAgbm9kZS0+c2V0UmlnaHQoaW5kZXgpOworCisgICAgLy8gY2FsbGVy
IHNob3VsZCBzZXQgdGhlIHR5cGUKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQWRk
IG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2YgYW5vdGhlciB0aGF0IGl0IG9wZXJhdGVzIG9uLgor
Ly8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2Rl
LCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7CisgICAgVElu
dGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdl
dEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0
aCIsIGxpbmUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01h
dHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCku
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50
OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAv
LyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9wZXJhbmQ/CisgICAgLy8KKyAgICAvLyBOb3Rl
OiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAg
ICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0Rmxv
YXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBpZiAobmV3
VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5
cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCisgICAgICAg
ICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKKyAgICAgICAgICAgIGNoaWxkLT5pc01hdHJp
eCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJyYXkoKSksCisgICAgICAgICAgICBjaGlsZCk7
CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3Mg
YWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIGNoaWxk
OworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOworICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVy
YXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcgVEludGVybVVuYXJ5KG9wKTsKKyAgICBpZiAo
bGluZSA9PSAwKQorICAgICAgICBsaW5lID0gY2hpbGQtPmdldExpbmUoKTsKKyAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9wZXJhbmQoY2hpbGQpOworCisgICAgaWYgKCEg
bm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGNo
aWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hp
bGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAobmV3
Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgfQorCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9w
ZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQKKy8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVj
a2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBmb3IgZXN0YWJsaXNoaW5nCisvLyBhIGZ1bmN0
aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNl
cworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3Qg
ZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0b3IgdG8gRU9wU2VxdWVuY2UuCisvLworLy8g
UmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQg
aW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFnZ3JlZ2F0ZS4KKy8vCitUSW50ZXJtQWdncmVn
YXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9k
ZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWdncmVn
YXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUuCisgICAgLy8KKyAgICBpZiAobm9kZSkgewor
ICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgaWYgKGFn
Z05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFnZ3JlZ2F0ZSBjb250YWluaW5nIHRoaXMgbm9k
ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dy
ZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5v
ZGUpOworICAgICAgICAgICAgaWYgKGxpbmUgPT0gMCkKKyAgICAgICAgICAgICAgICBsaW5lID0g
bm9kZS0+Z2V0TGluZSgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGFnZ05vZGUg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG9wZXJh
dG9yLgorICAgIC8vCisgICAgYWdnTm9kZS0+c2V0T3BlcmF0b3Iob3ApOworICAgIGlmIChsaW5l
ICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdn
Tm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQgb25lIHR5cGUgdG8gYW5vdGhlci4KKy8vCisvLyBS
ZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiwgd2hpY2ggY291bGQg
YmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2VkIGluIGlmIG5vIGNvbnZlcnNpb24gd2FzIG5lZWRl
ZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNpb24gY2FuJ3QgYmUgZG9uZS4KKy8vCitU
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpb24oVE9wZXJhdG9yIG9wLCBj
b25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBub2RlKQoreworICAgIC8vCisgICAgLy8g
RG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KKyAgICAvLworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlkZW50aWNhbCwgbm8gcHJvYmxlbQorICAg
IC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlwZSgpKQorICAgICAgICByZXR1cm4gbm9k
ZTsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3MgYSBzdHJ1Y3R1cmUsIHRoZW4gbm8gY29udmVy
c2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5nZXRTdHJ1Y3QoKSB8fCBub2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8KKyAgICAvLyBJZiBv
bmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9ucy4KKyAgICAvLworICAgIGlmICh0eXBl
LmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOworCisgICAgc3dpdGNoIChvcCkgeworICAg
ICAgICAvLworICAgICAgICAvLyBFeHBsaWNpdCBjb252ZXJzaW9ucworICAgICAgICAvLworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRC
b29sOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6
CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9hdDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgICAgIHByb21vdGVUbyA9IEVi
dEludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9t
IHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2l6ZSBhbmQg
c3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0IHRoYXQncworICAgICAgICAgICAgLy8g
aGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEFzQ29uc3RhbnRVbmlv
bigpKSB7CisKKyAgICAgICAgcmV0dXJuIChwcm9tb3RlQ29uc3RhbnRVbmlvbihwcm9tb3RlVG8s
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7CisgICAgfSBlbHNlIHsKKworICAgICAgICAv
LworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBmb3IgdGhlIGNvbnZlcnNpb24uCisgICAg
ICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFyeSogbmV3Tm9kZSA9IDA7CisKKyAgICAgICAgVE9w
ZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdP
cCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUt
PmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJv
b2w6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9w
Q29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlv
biBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiB0eXBlIiwgbm9kZS0+Z2V0TGluZSgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIFRUeXBlIHR5
cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5n
ZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2RlLT5pc0FycmF5KCkpOworICAg
ICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwgdHlwZSk7CisgICAgICAgIG5l
d05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0T3Bl
cmFuZChub2RlKTsKKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9Cit9CisKKy8vCisv
LyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBpbnRvIGFuIGFnZ3JlZ2F0ZS4gIFdvcmtz
IHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEgbm9kZSB0aGF0J3Mgbm90IGEgYWdncmVnYXRlIHll
dCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyBhZ2dyZWdhdGUsIHVubGVzcyAw
IHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3RoIGV4aXN0aW5nIG5vZGVzLgorLy8KK1RJbnRlcm1B
Z2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQs
IFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChsZWZ0ID09
IDAgJiYgcmlnaHQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVn
YXRlKiBhZ2dOb2RlID0gMDsKKyAgICBpZiAobGVmdCkKKyAgICAgICAgYWdnTm9kZSA9IGxlZnQt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKCFhZ2dOb2RlIHx8IGFnZ05vZGUtPmdldE9wKCkg
IT0gRU9wTnVsbCkgeworICAgICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Cisg
ICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNo
X2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYgKHJpZ2h0KQorICAgICAgICBhZ2dOb2RlLT5n
ZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdodCk7CisKKyAgICBpZiAobGluZSAhPSAwKQorICAg
ICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisK
Ky8vCisvLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUgaW50byBhbiBhZ2dyZWdhdGUuCisvLworLy8g
UmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yIHRoZSBleGlz
dGluZyBub2RlLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Om1ha2VBZ2dy
ZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBpZiAobm9k
ZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1
c2hfYmFjayhub2RlKTsKKworICAgIGlmIChsaW5lICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNl
dExpbmUobGluZSk7CisgICAgZWxzZQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKG5vZGUtPmdl
dExpbmUoKSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIEZvciAiaWYiIHRl
c3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRyZW47IGEgY29uZGl0aW9uLAorLy8gYSB0
cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUgdHdvIHBhdGhzIGFyZSBpbiB0aGUKKy8v
IG5vZGVQYWlyLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQuCisv
LworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQq
IGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IC8vCisgICAgLy8gRm9yIGNvbXBpbGUgdGltZSBjb25zdGFudCBzZWxlY3Rpb25zLCBwcnVuZSB0
aGUgY29kZSBhbmQKKyAgICAvLyB0ZXN0IG5vdy4KKyAgICAvLworCisgICAgaWYgKGNvbmQtPmdl
dEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7
CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlUGFpci5ub2RlMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWly
Lm5vZGUyOworICAgIH0KKworICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVy
bVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwgbm9kZVBhaXIubm9kZTIpOworICAgIG5v
ZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworCitUSW50ZXJtVHlw
ZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5
cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChsZWZ0LT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgcmlnaHQtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVEludGVybVR5cGVkICpjb21tYUFnZ3JlZ2F0ZSA9IGdyb3dBZ2dyZWdhdGUobGVm
dCwgcmlnaHQsIGxpbmUpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0QXNBZ2dyZWdhdGUo
KS0+c2V0T3BlcmF0b3IoRU9wQ29tbWEpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+c2V0VHlw
ZShyaWdodC0+Z2V0VHlwZSgpKTsKKyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdldFR5cGVQb2lu
dGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICByZXR1cm4gY29t
bWFBZ2dyZWdhdGU7CisgICAgfQorfQorCisvLworLy8gRm9yICI/OiIgdGVzdCBub2Rlcy4gIFRo
ZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCisvLyBhIHRydWUgcGF0aCwgYW5k
IGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIHNwZWNpZmllZAorLy8gYXMgc2VwYXJh
dGUgcGFyYW1ldGVycy4KKy8vCisvLyBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gbm9kZSBjcmVhdGVk
LCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVC
bG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAg
Ly8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBl
ZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUo
KSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICBmYWxzZUJsb2NrID0gY2hp
bGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5j
ZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOworICAgICAgICBpZiAoY2hpbGQp
CisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVy
YW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ugbm90LgorICAgIC8vCisK
KyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0Nv
bnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeworICAg
ICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVy
KCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWVCbG9jazsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7CisgICAgfQorCisgICAgLy8KKyAg
ICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisgICAgLy8KKyAgICBUSW50ZXJtU2VsZWN0aW9u
KiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2Nr
LCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAg
IHJldHVybiBub2RlOworfQorCisvLworLy8gQ29uc3RhbnQgdGVybWluYWwgbm9kZXMuICBIYXMg
YSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBjb25zdGFudHMKKy8vCisv
LyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQuCisvLworCitUSW50ZXJt
Q29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIFRTb3VyY2VMb2MgbGluZSkK
K3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKwor
ICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFN3
aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUU291cmNlTG9jIGxpbmUpCit7CisKKyAgICBU
SW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2Up
OworCisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Y29uc3RJbnROb2RlOworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2Rl
LT5nZXRTZXF1ZW5jZSgpOworICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgeworICAgICAgICB1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChm
aWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgIGNvbnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGlu
ZSk7CisgICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25zdEludE5vZGUpOworICAg
IH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCisv
LworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVEludGVybU5vZGUgKmluaXQs
IFRJbnRlcm1Ob2RlKiBib2R5LCBUSW50ZXJtVHlwZWQqIHRlc3QsIFRJbnRlcm1UeXBlZCogdGVy
bWluYWwsIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybU5v
ZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AoaW5pdCwgYm9keSwgdGVzdCwgdGVybWluYWwsIHRl
c3RGaXJzdCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOwor
fQorCisvLworLy8gQWRkIGJyYW5jaGVzLgorLy8KK1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlh
dGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAg
ICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsKK30KKworVEludGVybUJyYW5j
aCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgVEludGVybVR5
cGVkKiBleHByZXNzaW9uLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybUJyYW5jaCog
bm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJyYW5jaE9wLCBleHByZXNzaW9uKTsKKyAgICBub2Rl
LT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlz
IHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZpbmFsIHJvb3QgaXMgcHV0IG9uIHRvcCBieSB0aGUg
cGFyc2luZworLy8gcHJvY2Vzcy4KKy8vCitib29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKiByb290LCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAgICBpZiAocm9v
dCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vCisgICAgLy8gRmlyc3QsIGZp
bmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55CisgICAgLy8KKyAgICBUSW50
ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAo
YWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCisgICAgICAgIGFnZ1Jvb3Qt
PnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLwor
Ly8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8KK3ZvaWQgVEludGVybWVkaWF0ZTo6cmVtb3Zl
KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290KQorICAgICAgICBSZW1vdmVBbGxU
cmVlTm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNZW1iZXIgZnVuY3Rpb25zIG9m
IHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KKy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8v
CisvLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFs
dWUgb2YgYSB2YXJpYWJsZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgc3RhdGUgaXMgbW9kaWZp
ZWQuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0b3I6Om1vZGlmaWVzU3RhdGUoKSBjb25zdAorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAgICAg
ICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAg
ICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRy
aXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCisvLworLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBvcGVyYXRvciBp
cyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKKy8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6
aXNDb25zdHJ1Y3RvcigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RNYXQ0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKy8vCisvLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2YgYSB1bmFyeSBv
cGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCisvLyBjb21iaW5hdGlvbiBvZiBvcGVyYXRp
b24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGluIG5vdGhpbmcgbWFr
ZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5rJikKK3sK
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAg
ICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9w
UG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNh
c2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlw
ZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQtaW5zIGFyZSBh
bHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQorICAgICAgICBjYXNl
IEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9n
aWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNldFR5cGUob3BlcmFuZC0+
Z2V0VHlwZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRXN0YWJsaXNoZXMg
dGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKKy8vIG1ha2Vz
IHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KKy8vCisvLyBS
ZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMuCisvLworYm9v
bCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCit7CisgICAgaW50
IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOworICAgIGlmIChyaWdodC0+Z2V0Tm9taW5h
bFNpemUoKSA+IHNpemUpCisgICAgICAgIHNpemUgPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKTsK
KworICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOworCisgICAgLy8K
KyAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgorICAgIC8vCisgICAgaWYg
KChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgJiYgKGxlZnQtPmdldFR5cGUo
KSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8K
KyAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMg
dGhlIGxlZnQKKyAgICAvLyBvcGVyYW5kLiAgVGhlbiBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlz
IG5lZWQgYmUgY29kZWQuCisgICAgLy8KKyAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CisK
KyAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJlY2lzaW9uKGxl
ZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQ
b2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKworICAgIC8vCisg
ICAgLy8gQXJyYXkgb3BlcmF0aW9ucy4KKyAgICAvLworICAgIGlmIChsZWZ0LT5pc0FycmF5KCkp
IHsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Y2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNldCBhcnJheSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcEFzc2lnbjoK
KyAgICAgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAgICBnZXRUeXBl
UG9pbnRlcigpLT5zZXRBcnJheVNpemUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheUluZm9ybWF0aW9uVHlw
ZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBBbGwgc2NhbGFycy4gIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMg
dGhpcyBjYXNlIGlzIHJlbW92ZWQhCisgICAgLy8KKyAgICBpZiAoc2l6ZSA9PSAxKSB7CisKKyAg
ICAgICAgc3dpdGNoIChvcCkgeworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gUHJv
bW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9w
RXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFu
RXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBjb25kaXRpb25hbHMKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6CisgICAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjoKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Qm9vbCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2Ugc2hvdWxkIGhhdmUgbWF0Y2hpbmcg
dHlwZXMKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgbGVmdC0+aXNNYXRyaXgoKSAgICAgIT0gcmlnaHQtPmlzTWF0
cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gQXJlIHRoZSBzaXpl
cyBjb21wYXRpYmxlPworICAgIC8vCisgICAgaWYgKCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9
IHNpemUgJiYgIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSB8fAorICAgICAgICByaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vCisgICAgLy8gQ2FuIHRoZXNlIHR3byBv
cGVyYW5kcyBiZSBjb21iaW5lZD8KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAg
Y2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxh
cjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lz
aW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7CisgICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXpl
LCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Cisg
ICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsKKyAg
ICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4
KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNW
ZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeEFz
c2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+
aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0
cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNl
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5n
IGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21p
bmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIEVP
cEFkZDoKKyAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAg
ICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAg
IGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1ZlY3RvcigpICYm
IHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+Z2V0QmFzaWNUeXBl
KCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZx
VGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICBj
YXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJp
eCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0
b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAorICAgICAgICAgICAgICAgIGxlZnQtPmdldEJh
c2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE9uZSBtb3JlIGNoZWNrIGZv
ciBhc3NpZ25tZW50LiAgVGhlIFJlc3VsdGluZyB0eXBlIGhhcyB0byBtYXRjaCB0aGUgbGVmdCBv
cGVyYW5kLgorICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcEFzc2ln
bjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWdu
OgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkg
IT0gbGVmdC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdChjb25zdCBUVHlw
ZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50
VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIFRUeXBlTGlzdCogZmllbGRzID0gbGVmdE5v
ZGVUeXBlLmdldFN0cnVjdCgpOworCisgICAgc2l6ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMtPnNp
emUoKTsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBz
dHJ1Y3RTaXplOyBqKyspIHsKKyAgICAgICAgaW50IHNpemUgPSAoKmZpZWxkcylbal0udHlwZS0+
Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtqXS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUoKigqZmll
bGRzKVtqXS50eXBlLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2lu
ZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRVbmlvbkFycmF5W2luZGV4XSAhPSByaWdo
dFVuaW9uQXJyYXlbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5
cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFu
dFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sKKyAgICBpZiAobGVmdE5vZGVUeXBlLmlzQXJyYXko
KSkgeworICAgICAgICBUVHlwZSB0eXBlV2l0aG91dEFycmF5bmVzcyA9IGxlZnROb2RlVHlwZTsK
KyAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5lc3MuY2xlYXJBcnJheW5lc3MoKTsKKworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gbGVmdE5vZGVUeXBlLmdldEFycmF5U2l6ZSgpOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGludCBv
ZmZzZXQgPSB0eXBlV2l0aG91dEFycmF5bmVzcy5nZXRPYmplY3RTaXplKCkgKiBpOworICAgICAg
ICAgICAgaWYgKCFDb21wYXJlU3RydWN0KHR5cGVXaXRob3V0QXJyYXluZXNzLCAmcmlnaHRVbmlv
bkFycmF5W29mZnNldF0sICZsZWZ0VW5pb25BcnJheVtvZmZzZXRdKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIENv
bXBhcmVTdHJ1Y3QobGVmdE5vZGVUeXBlLCByaWdodFVuaW9uQXJyYXksIGxlZnRVbmlvbkFycmF5
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gVGhlIGZvbGQgZnVuY3Rpb25zIHNl
ZSBpZiBhbiBvcGVyYXRpb24gb24gYSBjb25zdGFudCBjYW4gYmUgZG9uZSBpbiBwbGFjZSwKKy8v
IHdpdGhvdXQgZ2VuZXJhdGluZyBydW4tdGltZSBjb2RlLgorLy8KKy8vIFJldHVybnMgdGhlIG5v
ZGUgdG8ga2VlcCB1c2luZywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIG5vZGUgcGFzc2Vk
IGluLgorLy8KKworVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6Zm9sZChUT3Bl
cmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3RhbnROb2RlLCBUSW5mb1NpbmsmIGluZm9TaW5r
KQoreworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRVbmlvbkFycmF5UG9pbnRl
cigpOworICAgIGludCBvYmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKwor
ICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRpb25zCisgICAgICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29uc3RhbnROb2RlLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgVFR5cGUgcmV0dXJuVHlwZSA9IGdldFR5cGUo
KTsKKworICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwz
LDQsNSk7CisgICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG9iamVjdFNpemU7ICsraSkKKyAgICAgICAgICAgICAgICByaWdodFVuaW9uQXJy
YXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVy
blR5cGUgPSBnZXRUeXBlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpIHsKKyAgICAgICAg
ICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKKyAg
ICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCldOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAg
ICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgb2JqZWN0U2l6
ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gMDsKKyAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gKnRlbXBOb2RlOworCisgICAgICAgIGJvb2wgYm9vbE5vZGVGbGFn
ID0gZmFsc2U7CisgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgY2FzZSBFT3BBZGQ6
CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmpl
Y3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcE11bDoK
KyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAgICAgICBjYXNl
IEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0g
PSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNN
YXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJD
b25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlwbHkiLCBnZXRM
aW5lKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAg
ICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgc2l6ZTsgY29sdW1u
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICog
Y29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0
KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgpICsgdW5pb25B
cnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVt
biAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RU9wRGl2OgorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBpZiAocmln
aHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QoRkxUX01BWCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFy
cmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIkRpdmlkZSBieSB6ZXJv
IGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJ
Q29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIiwgZ2V0TGluZSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3Rv
ciIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6
ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNv
bnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlv
bkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0
ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+
Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5u
b3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIsIGdldExpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07
CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXpl
OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0u
Z2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
RU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVy
ZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1
dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9y
dCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSA/IGZh
bHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlv
bkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXpl
ID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25B
cnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAg
ICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQu
Z2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVh
bDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RT
aXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50Owor
ICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmln
aHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fz
ZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1
cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLCB1bmlvbkFy
cmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlv
bkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0g
bmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExp
bmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAg
ICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
Q29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFn
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0
ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRl
bXBOb2RlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkludmFsaWQgb3BlcmF0b3IgZm9y
IGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKKyAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKworICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucworICAgICAgICAvLworICAg
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CisgICAgICAgIENvbnN0YW50
VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9u
QXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBj
b25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRl
biBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRs
eQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlb
aV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYXJ5IG9wZXJhdGlv
biBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG5ld05v
ZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7
CisgICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIG5l
d05vZGU7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXM7Cit9CisKK1RJbnRlcm1UeXBlZCogVElu
dGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5p
b25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgaW50IHNpemUgPSBu
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgQ29uc3RhbnRVbmlvbiAqbGVm
dFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplXTsKKworICAgIGZvciAoaW50IGk9
MDsgaSA8IHNpemU7IGkrKykgeworCisgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0
YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJv
b2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0
VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5n
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGlj
X2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRp
Y19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgIT0gMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgIT0gMC4wZik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJJbmNvcnJlY3QgZGF0
YSB0eXBlIGZvdW5kIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgY29uc3QgVFR5cGUmIHQgPSBub2RlLT5nZXRU
eXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5
cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5v
bWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkp
OworfQorCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFBy
YWdtYVRhYmxlJiBwVGFibGUpCit7CisgICAgYXNzZXJ0KCFwcmFnbWFUYWJsZSk7CisgICAgcHJh
Z21hVGFibGUgPSBuZXcgVFByYWdtYVRhYmxlKCk7CisgICAgKnByYWdtYVRhYmxlID0gcFRhYmxl
OworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvTU1hcC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L01NYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfTU1BUF9JTkNMVURFRF8KKyNkZWZpbmUgX01NQVBfSU5DTFVERURfCisKKy8v
CisvLyBFbmNhcHN1bGF0ZSBtZW1vcnkgbWFwcGVkIGZpbGVzCisvLworCitjbGFzcyBUTU1hcCB7
CitwdWJsaWM6CisgICAgVE1NYXAoY29uc3QgY2hhciogZmlsZU5hbWUpIDogCisgICAgICAgIGZT
aXplKC0xKSwgLy8gLTEgaXMgdGhlIGVycm9yIHZhbHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXpl
KCkKKyAgICAgICAgZnAoTlVMTCksCisgICAgICAgIGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJy
b3IgdmFsdWUgcmV0dXJuZWQgYnkgTWFwVmlld09mRmlsZSgpCisgICAgeworICAgICAgICBpZiAo
KGZwID0gZm9wZW4oZmlsZU5hbWUsICJyIikpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNoYXIgYyA9IGdldGMoZnApOworICAgICAgICBmU2l6ZSA9IDA7CisgICAgICAg
IHdoaWxlIChjICE9IEVPRikgeworICAgICAgICAgICAgZlNpemUrKzsKKyAgICAgICAgICAgIGMg
PSBnZXRjKGZwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PSBFT0YpCisgICAgICAgICAg
ICBmU2l6ZSsrOworICAgICAgICByZXdpbmQoZnApOworICAgICAgICBmQnVmZiA9IChjaGFyKilt
YWxsb2Moc2l6ZW9mKGNoYXIpICogZlNpemUpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAg
ICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIHdoaWxlIChjICE9IEVPRikgeworICAgICAgICAg
ICAgZkJ1ZmZbY291bnQrK10gPSBjOworICAgICAgICAgICAgYyA9IGdldGMoZnApOworICAgICAg
ICB9CisgICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKKyAgICB9CisKKyAgICBjaGFyKiBnZXRE
YXRhKCkgeyByZXR1cm4gZkJ1ZmY7IH0KKyAgICBpbnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNp
emU7IH0KKworICAgIH5UTU1hcCgpIHsKKyAgICAgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAg
ICAgICBmY2xvc2UoZnApOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50ICAgICAgICAg
ICAgIGZTaXplOyAgICAgIC8vIHNpemUgb2YgZmlsZSB0byBtYXAgaW4KKyAgICBGSUxFICpmcDsK
KyAgICBjaGFyKiAgICAgICAgICAgZkJ1ZmY7ICAgICAgLy8gdGhlIGFjdHVhbCBkYXRhOworfTsK
KworI2VuZGlmIC8vIF9NTUFQX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNM
LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci9PdXRwdXRHTFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIK
KworbmFtZXNwYWNlCit7CitUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQor
eworICAgIFRJbmZvU2lua0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAg
eworICAgICAgICBvdXQgPDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxT
aXplKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSBFYnRGbG9hdDogb3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0
SW50OiBvdXQgPDwgIml2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0
IDw8ICJidmVjIjsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpCisgICAgICAgICAgICBvdXQgPDwgdHlwZS5nZXRUeXBlTmFtZSgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAg
IH0KKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Cit9CisKK1RTdHJpbmcgYXJyYXlC
cmFja2V0cyhjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkp
OworICAgIFRJbmZvU2lua0Jhc2Ugb3V0OworICAgIG91dCA8PCAiWyIgPDwgdHlwZS5nZXRBcnJh
eVNpemUoKSA8PCAiXSI7CisgICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCiti
b29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlKiBub2RlKSB7CisgICAgaWYgKGNvbnN0
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlvbikg
JiYKKyAgICAgICAgICAgICAgIChhZ2dyZWdhdGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjb25zdCBUSW50ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBu
b2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRlcm5hcnkgb3Bl
cmF0b3JzIGFyZSB1c3VhbGx5IHBhcnQgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gVGhpcyBoYW5kbGVzIHRob3NlIHJhcmUgY2FzZXMgaW4gd2hpY2ggdGhleSBhcmUgYWxs
IGJ5IHRoZW1zZWx2ZXMuCisgICAgICAgIHJldHVybiBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5T3Bl
cmF0b3IoKTsKKyAgICB9CisgICAgZWxzZSBpZiAobm9kZS0+Z2V0QXNMb29wTm9kZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KK30g
IC8vIG5hbWVzcGFjZQorCitUT3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYg
b2JqU2luaykKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgICAg
ICBtT2JqU2luayhvYmpTaW5rKSwKKyAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpCit7
Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OndyaXRlVHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3Qg
Y2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0ciwgY29uc3QgY2hhciogcG9zdFN0cikKK3sK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgaWYgKHZpc2l0ID09IFBy
ZVZpc2l0ICYmIHByZVN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHI7CisgICAgfQor
ICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQgJiYgaW5TdHIpCisgICAgeworICAgICAgICBv
dXQgPDwgaW5TdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCAmJiBw
b3N0U3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHBvc3RTdHI7CisgICAgfQorfQorCit2b2lk
IFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOworICAgIC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBx
dWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKyAgICBpZiAoKHF1YWxpZmllciAh
PSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSkKKyAgICAgICAgb3V0
IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiOworCisgICAgLy8gRGVjbGFyZSB0
aGUgc3RydWN0IGlmIHdlIGhhdmUgbm90IGRvbmUgc28gYWxyZWFkeS4KKyAgICBpZiAoKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSAmJgorICAgICAgICAobURlY2xhcmVkU3RydWN0
cy5maW5kKHR5cGUuZ2V0VHlwZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCisg
ICAgeworICAgICAgICBvdXQgPDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAi
e1xuIjsKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVj
dCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IE5VTEwpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUgPSAoKnN0cnVjdHVyZSlbaV0udHlwZTsKKyAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CisgICAgICAgICAgICBvdXQgPDwg
Z2V0VHlwZU5hbWUoKmZpZWxkVHlwZSkgPDwgIiAiIDw8IGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCk7CisgICAgICAgICAgICBpZiAoZmllbGRUeXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgb3V0IDw8IGFycmF5QnJhY2tldHMoKmZpZWxkVHlwZSk7CisgICAgICAgICAgICBvdXQgPDwg
IjtcbiI7CisgICAgICAgIH0KKyAgICAgICAgb3V0IDw8ICJ9IjsKKyAgICAgICAgbURlY2xhcmVk
U3RydWN0cy5pbnNlcnQodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpOworICAgIH0KK30KKwordm9pZCBU
T3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNl
JiBhcmdzKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFyZ3MuYmVnaW4oKTsKKyAg
ICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAg
IEFTU0VSVChhcmcgIT0gTlVMTCk7CisKKyAgICAgICAgY29uc3QgVFR5cGUmIHR5cGUgPSBhcmct
PmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxp
ZmllcigpOworICAgICAgICAvLyBUT0RPKGFsb2twKTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciBm
dW5jdGlvbiBhcmd1bWVudHMuCisgICAgICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFy
eSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICAgICAgb3V0IDw8IHR5cGUu
Z2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiOworCisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFt
ZSh0eXBlKTsKKworICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lID0gYXJnLT5nZXRTeW1ib2wo
KTsKKyAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8
IG5hbWU7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG91dCA8PCBh
cnJheUJyYWNrZXRzKHR5cGUpOworCisgICAgICAgIC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMgaXMg
bm90IHRoZSBsYXN0IGFyZ3VtZW50LgorICAgICAgICBpZiAoaXRlciAhPSAtLWFyZ3MuZW5kKCkp
CisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICB9Cit9CisKK2NvbnN0IENvbnN0YW50VW5p
b24qIFRPdXRwdXRHTFNMOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkK
KyAgICB7CisgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOworICAgICAg
ICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworICAgICAgICAgICAgQVNT
RVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAgICAgICAgIHBDb25zdFVuaW9uID0gd3JpdGVD
b25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIHBDb25zdFVuaW9uKTsKKyAgICAgICAgICAgIGlmIChp
ICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAg
ICAgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IHNpemUg
PSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4g
MTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpIDw8ICIo
IjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2ksICsrcENvbnN0VW5pb24p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocENvbnN0VW5pb24tPmdldFR5cGUoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgcENv
bnN0VW5pb24tPmdldEZDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDogb3V0IDw8IHBDb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpIG91dCA8PCAiLCAiOworICAgICAgICB9Cisg
ICAgICAgIGlmICh3cml0ZVR5cGUpIG91dCA8PCAiKSI7CisgICAgfQorICAgIHJldHVybiBwQ29u
c3RVbmlvbjsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgb3V0
IDw8IG5vZGUtPmdldFN5bWJvbCgpOworCisgICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYg
bm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMo
bm9kZS0+Z2V0VHlwZSgpKTsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRDb25zdGFudFVu
aW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIHdyaXRlQ29uc3RhbnRVbmlv
bihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworfQorCiti
b29sIFRPdXRwdXRHTFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSog
bm9kZSkKK3sKKyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAg
ICAgICAgICAgICAgLy8gUkhTIG9mIGluaXRpYWxpemUgaXMgbm90IGJlaW5nIGRlY2xhcmVkLgor
ICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzc2lnbjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFN1YkFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiAvPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxs
LXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxh
ckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6
CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAg
ICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIuIjsKKyAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCisg
ICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAg
ICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICAg
ICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIuIjsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiByaWdodENoaWxk
ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gcmlnaHRDaGlsZC0+Z2V0U2VxdWVuY2UoKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVu
Y2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyArK3NpdCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBlbGVtZW50ID0g
KCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGVsZW1lbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb25zdGFudFVuaW9uJiBkYXRhID0gZWxlbWVudC0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKVswXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRhdGEuZ2V0VHlwZSgpID09
IEVidEludCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5nZXRJQ29uc3QoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBv
dXQgPDwgIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8
ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wQWRkOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAr
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1Yjogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvICIsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVh
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIo
IiwgIiA8ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIigiLCAiID49ICIsICIpIik7IGJyZWFrOworCisgICAgICAgIC8vIE5vdGljZSB0aGUgZmFs
bC10aHJvdWdoLgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVj
dG9yOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKiAiLCAiKSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIF5eICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiICYmICIsICIpIik7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30KKwor
Ym9vbCBUT3V0cHV0R0xTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKworICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigtIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibm90KCIsIE5VTEwsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwg
IighIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgTlVMTCwgIisrKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BQb3N0RGVjcmVtZW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgTlVMTCwgIi0t
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigrKyIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZURlY3Jl
bWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKC0tIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgorICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImJvb2woIiwgTlVMTCwgIikiKTsgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzIoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJi
dmVjMygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICAgIGNhc2UgRU9w
Q29udkludFRvRmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+
Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQodmlzaXQsICJmbG9hdCgiLCBOVUxMLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIs
IE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogd3JpdGVUcmlwbGV0
KHZpc2l0LCAidmVjMygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OgorICAgICAgICBj
YXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJh
bmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwgTlVMTCwgIikiKTsg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZl
YzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJpdmVjMygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFJhZGlhbnM6IHdyaXRlVHJp
cGxldCh2aXNpdCwgInJhZGlhbnMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRGVncmVlczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BTaW46IHdyaXRlVHJpcGxldCh2aXNpdCwgInNpbigiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb3M6IHdyaXRlVHJpcGxldCh2aXNp
dCwgImNvcygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BUYW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgInRhbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BBc2luOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhc2luKCIsIE5VTEwsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEFjb3M6IHdyaXRlVHJpcGxldCh2aXNpdCwgImFjb3MoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
YXRhbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEV4cDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiZXhwKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cExvZzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibG9nKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEV4cDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImV4cDIoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibG9n
MigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTcXJ0OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJzcXJ0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcElu
dmVyc2VTcXJ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnZlcnNlc3FydCgiLCBOVUxMLCAiKSIp
OyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWJz
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpZ246IHdyaXRlVHJpcGxl
dCh2aXNpdCwgInNpZ24oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxv
b3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb29yKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENlaWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNlaWwoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJhY3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZy
YWN0KCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTm9ybWFsaXplOiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3JtYWxpemUoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBbnk6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImFueSgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbGw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImFsbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBUT3V0cHV0R0xTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisg
ICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKSkKKyAgICB7CisgICAgICAgIG91dCA8
PCAiKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgb3V0IDw8ICIpID8gKCI7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIDogKCI7CisgICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAiaWYgKCI7CisgICAgICAgIG5vZGUtPmdl
dENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworCisg
ICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdl
dFRydWVCbG9jaygpKTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVsc2VcbiI7CisgICAgICAgICAgICB2aXNpdENv
ZGVCbG9jayhub2RlLT5nZXRGYWxzZUJsb2NrKCkpOworICAgICAgICB9CisgICAgICAgIGRlY3Jl
bWVudERlcHRoKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0
R0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUp
Cit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKKyAgICBUSW5mb1NpbmtCYXNlJiBv
dXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAg
ICAgY2FzZSBFT3BTZXF1ZW5jZTogeworICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNl
cyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNjb3BlLgorICAgICAgICAgICAgaWYgKGRlcHRo
ID4gMCkgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICBpbmNyZW1lbnREZXB0aCgpOworICAg
ICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ZXIgIT0gc2VxdWVu
Y2UuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
Tm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlICE9IE5VTEwp
OworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAg
ICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwor
CisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBn
bG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEVPcFByb3RvdHlwZTogeworICAgICAgICAgICAgLy8gRnVu
Y3Rpb24gZGVjbGFyYXRpb24uCisgICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQp
OworICAgICAgICAgICAgVFN0cmluZyByZXR1cm5UeXBlID0gZ2V0VHlwZU5hbWUobm9kZS0+Z2V0
VHlwZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCByZXR1cm5UeXBlIDw8ICIgIiA8PCBub2RlLT5n
ZXROYW1lKCk7CisKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB3cml0ZUZ1
bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAgIG91dCA8
PCAiKSI7CisKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKKyAgICAgICAg
ICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24uCisgICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0g
UHJlVmlzaXQpOworICAgICAgICAgICAgVFN0cmluZyByZXR1cm5UeXBlID0gZ2V0VHlwZU5hbWUo
bm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIFRTdHJpbmcgZnVuY3Rpb25OYW1lID0gVEZ1
bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAgIG91dCA8
PCByZXR1cm5UeXBlIDw8ICIgIiA8PCBmdW5jdGlvbk5hbWU7CisKKyAgICAgICAgICAgIGluY3Jl
bWVudERlcHRoKCk7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uIG5vZGUgY29u
dGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2RlcworICAgICAgICAgICAgLy8gcmVwcmVzZW50
aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIGJvZHkuIFRoZSBsYXR0ZXIKKyAg
ICAgICAgICAgIC8vIGlzIG5vdCBwcmVzZW50IGluIGNhc2Ugb2YgZW1wdHkgZnVuY3Rpb24gYm9k
aWVzLgorICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAx
KSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09IDIpKTsKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3Igc2VxSXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisKKyAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJhbXMgPSAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtcyAhPSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMt
PmdldE9wKCkgPT0gRU9wUGFyYW1ldGVycyk7CisgICAgICAgICAgICBwYXJhbXMtPnRyYXZlcnNl
KHRoaXMpOworCisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBib2R5LgorICAgICAg
ICAgICAgVEludGVybUFnZ3JlZ2F0ZSogYm9keSA9ICsrc2VxSXRlciAhPSBzZXF1ZW5jZS5lbmQo
KSA/CisgICAgICAgICAgICAgICAgKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKSA6IE5VTEw7
CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhib2R5KTsKKyAgICAgICAgICAgIGRlY3JlbWVu
dERlcHRoKCk7CisgCisgICAgICAgICAgICAvLyBGdWxseSBwcm9jZXNzZWQ7IG5vIG5lZWQgdG8g
dmlzaXQgY2hpbGRyZW4uCisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoK
KyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwuCisgICAgICAgICAgICBpZiAodmlzaXQgPT0g
UHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlv
bk5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAg
ICAgICAgICAgIG91dCA8PCBmdW5jdGlvbk5hbWUgPDwgIigiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogeworICAg
ICAgICAgICAgLy8gRnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNp
dCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICAgICAgd3Jp
dGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBv
dXQgPDwgIikiOworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAg
ICAgICAgICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICAgICAgICBpZiAodmlzaXQg
PT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVEludGVybVR5cGVkKiB2YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFz
VHlwZWQoKTsKKyAgICAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAiOworICAgICAgICAgICAgICAgIG1E
ZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJmbG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJp
cGxldCh2aXNpdCwgInZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJib29sKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEludDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Iml2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1h
dDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAi
LCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRy
aXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdl
dFR5cGUoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpOworICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwg
IigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFT3BMZXNzVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW4oIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2
aXNpdCwgImdyZWF0ZXJUaGFuKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImxlc3NUaGFuRXF1YWwoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiZ3JlYXRlclRoYW5FcXVhbCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXF1YWwoIiwg
IiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIm5vdEVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbW1hOiB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICIsICIsIE5VTEwpOyBicmVh
azsKKworICAgICAgICBjYXNlIEVPcE1vZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvdzogd3JpdGVUcmlwbGV0KHZpc2l0
LCAicG93KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgImF0YW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTWluOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTWF4OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNs
YW1wKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1peDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAibWl4KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN0
ZXA6IHdyaXRlVHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU21vb3RoU3RlcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgi
LCAiLCAiLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJkaXN0YW5jZSgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BEb3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDcm9zczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImZhY2Vmb3J3YXJkKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFJlZmxlY3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgInJlZmxlY3QoIiwgIiwgIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVm
cmFjdCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1hdHJpeENvbXBNdWx0KCIsICIsICIsICIpIik7IGJyZWFrOworCisgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlz
aXRDaGlsZHJlbjsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7CisKKyAgICBpbmNyZW1lbnREZXB0aCgpOworICAgIC8vIExvb3AgaGVhZGVyLgorICAgIGlm
IChub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIGZvciBsb29wCisgICAgeworICAgICAgICBvdXQgPDwg
ImZvciAoIjsKKyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgICAgIG5vZGUt
PmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiOyAiOworCisgICAg
ICAgIEFTU0VSVChub2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRl
c3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiOyAiOworCisgICAgICAgIGlm
IChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICAgICAgbm9kZS0+Z2V0VGVybWluYWwoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKVxuIjsKKyAgICB9CisgICAgZWxzZSAg
Ly8gZG8td2hpbGUgbG9vcAorICAgIHsKKyAgICAgICAgb3V0IDw8ICJkb1xuIjsKKyAgICB9CisK
KyAgICAvLyBMb29wIGJvZHkuCisgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsK
KworICAgIC8vIExvb3AgZm9vdGVyLgorICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpICAvLyB3
aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndoaWxlICgiOworICAgICAgICBBU1NF
UlQobm9kZS0+Z2V0VGVzdCgpICE9IE5VTEwpOworICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIik7XG4iOworICAgIH0KKyAgICBkZWNyZW1l
bnREZXB0aCgpOworCisgICAgLy8gTm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZl
IGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQgaW4KKyAgICAvLyB0aGlzIGZ1bmN0aW9uLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2Jq
U2luaygpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKKyAgICB7CisgICAgICAg
IGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2FyZCIsIE5VTEwsIE5VTEwp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnJl
YWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJuICIsIE5VTEwsIE5VTEwp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OnZpc2l0Q29kZUJsb2Nr
KFRJbnRlcm1Ob2RlKiBub2RlKSB7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygp
OworICAgIGlmIChub2RlICE9IE5VTEwpCisgICAgeworICAgICAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgLy8gU2luZ2xlIHN0YXRlbWVudHMgbm90IHBhcnQgb2YgYSBzZXF1ZW5j
ZSBuZWVkIHRvIGJlIHRlcm1pbmF0ZWQKKyAgICAgICAgLy8gd2l0aCBzZW1pLWNvbG9uLgorICAg
ICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICBvdXQgPDwgIjtc
biI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8PCAie1xufVxuIjsgIC8v
IEVtcHR5IGNvZGUgYmxvY2suCisgICAgfQorfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDUk9T
U0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisjZGVmaW5lIENST1NTQ09NUElMRVJHTFNMX09V
VFBVVEdMU0xfSF8KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK2NsYXNzIFRP
dXRwdXRHTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBUT3V0
cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKworcHJvdGVjdGVkOgorICAgIFRJbmZv
U2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQorICAgIHZvaWQgd3JpdGVU
cmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3Ry
LCBjb25zdCBjaGFyKiBwb3N0U3RyKTsKKyAgICB2b2lkIHdyaXRlVmFyaWFibGVUeXBlKGNvbnN0
IFRUeXBlJiB0eXBlKTsKKyAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJ
bnRlcm1TZXF1ZW5jZSYgYXJncyk7CisgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogd3JpdGVDb25z
dGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RV
bmlvbik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUp
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCogbm9kZSk7CisKKyAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKTsK
KworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKKyAgICBib29sIG1EZWNs
YXJpbmdWYXJpYWJsZXM7CisKKyAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJlZCBhcyB0aGUgdHJl
ZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAorICAgIC8vIHRoZSBzdHJ1Y3Rz
IGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBhIHN0cnVjdCBpcwor
ICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+
IERlY2xhcmVkU3RydWN0czsKKyAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVkU3RydWN0czsK
K307CisKKyNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTYwIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBzaAoreworLy8gSW50ZWdlciB0byBU
U3RyaW5nIGNvbnZlcnNpb24KK1RTdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVy
WzIwXTsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsK
K30KKworT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJ
bnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpCit7Cisg
ICAgbVVuZm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRTZWxlY3QoY29udGV4dCwgdGhpcyk7CisgICAg
bUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisKKyAgICBtVXNlc1RleHR1cmUyRCA9IGZhbHNlOwor
ICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2og
PSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IGZhbHNlOworICAgIG1Vc2Vz
VGV4dHVyZUN1YmUgPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsK
KyAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKKyAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNl
OworICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOworICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBm
YWxzZTsKKyAgICBtVXNlc1BvaW50U2l6ZSA9IGZhbHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7
CisgICAgbVVzZXNNb2QxID0gZmFsc2U7CisgICAgbVVzZXNNb2QyID0gZmFsc2U7CisgICAgbVVz
ZXNNb2QzID0gZmFsc2U7CisgICAgbVVzZXNNb2Q0ID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9y
d2FyZDEgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9IGZhbHNlOworICAgIG1Vc2Vz
RmFjZWZvcndhcmQzID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKKyAg
ICBtVXNlc0VxdWFsTWF0MiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxNYXQzID0gZmFsc2U7Cisg
ICAgbVVzZXNFcXVhbE1hdDQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjMiA9IGZhbHNlOwor
ICAgIG1Vc2VzRXF1YWxWZWMzID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbFZlYzQgPSBmYWxzZTsK
KyAgICBtVXNlc0VxdWFsSVZlYzIgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsSVZlYzMgPSBmYWxz
ZTsKKyAgICBtVXNlc0VxdWFsSVZlYzQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzIgPSBm
YWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzQg
PSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yID0gZmFsc2U7CisKKyAgICBtU2NvcGVEZXB0aCA9IDA7
CisKKyAgICBtQXJndW1lbnRJbmRleCA9IDA7Cit9CisKK091dHB1dEhMU0w6On5PdXRwdXRITFNM
KCkKK3sKKyAgICBkZWxldGUgbVVuZm9sZFNlbGVjdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpv
dXRwdXQoKQoreworICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBP
dXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBo
ZWFkZXIKKyAgICBoZWFkZXIoKTsKKworICAgIG1Db250ZXh0LmluZm9TaW5rLm9iaiA8PCBtSGVh
ZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1Cb2R5LmNfc3RyKCk7
Cit9CisKK1RJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQoreworICAg
IHJldHVybiBtQm9keTsKK30KKworaW50IE91dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5
cGUgJnR5cGUpIGNvbnN0Cit7CisgICAgaW50IGVsZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgp
ID8gdHlwZS5nZXROb21pbmFsU2l6ZSgpIDogMTsKKyAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5p
c0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKworICAgIHJldHVybiBlbGVtZW50
U2l6ZSAqIGFycmF5U2l6ZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQoreworICAg
IEVTaExhbmd1YWdlIGxhbmd1YWdlID0gbUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUhlYWRlcjsKKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVy
YXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3Ry
dWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFy
YXRpb24rKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAg
fQorCisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0
cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25z
dHJ1Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisK
KyAgICBpZiAobGFuZ3VhZ2UgPT0gRVNoTGFuZ0ZyYWdtZW50KQorICAgIHsKKyAgICAgICAgVFN0
cmluZyB1bmlmb3JtczsKKyAgICAgICAgVFN0cmluZyB2YXJ5aW5nczsKKworICAgICAgICBUU3lt
Ym9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExl
dmVsKCk7CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKworICAgICAgICBmb3IgKFRT
eW1ib2xUYWJsZUxldmVsOjpjb25zdF9pdGVyYXRvciBuYW1lZFN5bWJvbCA9IHN5bWJvbHMtPmJl
Z2luKCk7IG5hbWVkU3ltYm9sICE9IHN5bWJvbHMtPmVuZCgpOyBuYW1lZFN5bWJvbCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1ib2wgPSAoKm5hbWVkU3ltYm9s
KS5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gc3ltYm9sLT5nZXRO
YW1lKCk7CisKKyAgICAgICAgICAgIGlmIChzeW1ib2wtPmlzVmFyaWFibGUoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAmdHlwZSA9IHZhcmlhYmxlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOworCisgICAgICAgICAgICAgICAg
aWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVW5pZm9ybXMuZmluZChuYW1lLmNfc3RyKCkpICE9
IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5
cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICI7XG4iOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtUmVmZXJlbmNlZFZhcnlpbmdzLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNl
ZFZhcnlpbmdzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0g
IiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbWFudGljSW5kZXggKz0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDog
MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFU
ZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBHbG9i
YWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
Q29uc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDb25zdGFu
dHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8
ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAgICAgICJzdGF0aWMg
ZmxvYXQ0IGdsX0NvbG9yWzFdID0ge2Zsb2F0NCgwLCAwLCAwLCAwKX07XG4iOworCisgICAgICAg
IGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0
aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7
XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzRnJvbnRGYWNpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxz
ZTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAo
bVVzZXNGcmFnQ29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBm
bG9hdDQgZHhfV2luZG93O1xuIgorICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGZsb2F0MiBk
eF9EZXB0aDtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGJvb2wgZHhfUG9pbnRzT3JM
aW5lcztcbiIKKyAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBib29sIGR4X0Zyb250Q0NXO1xu
IjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgIG91
dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRF9iaWFzKQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9h
dCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgor
ICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0
MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCisgICAg
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEcHJvaihzLCB0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRi
aWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgYmlhcykpO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZs
b2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAw
LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJD
VUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZV9iaWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlh
cylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgICAvLyBWZXJ0ZXggc2hhZGVyCisgICAgeworICAgICAgICBU
U3RyaW5nIHVuaWZvcm1zOworICAgICAgICBUU3RyaW5nIGF0dHJpYnV0ZXM7CisgICAgICAgIFRT
dHJpbmcgdmFyeWluZ3M7CisKKyAgICAgICAgVFN5bWJvbFRhYmxlTGV2ZWwgKnN5bWJvbHMgPSBt
Q29udGV4dC5zeW1ib2xUYWJsZS5nZXRHbG9iYWxMZXZlbCgpOworCisgICAgICAgIGZvciAoVFN5
bWJvbFRhYmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVn
aW4oKTsgbmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wp
LnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5h
bWUoKTsKKworICAgICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlm
aWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlw
ZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZmluZChuYW1lLmNf
c3RyKCkpICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091
dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNl
ZFZhcnlpbmdzLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9n
cmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiAr
IGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVy
KHR5cGUpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUdsb2JhbCB8fCBxdWFs
aWZpZXIgPT0gRXZxVGVtcG9yYXJ5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gR2xvYmFscyBhcmUgZGVjbGFyZWQgYW5kIGludGlhbGl6ZWQgYXMgYW4gYWdncmVn
YXRlIG5vZGUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ29uc3RhbnRzIGFyZSByZXBlYXRlZCBhcyBsaXRlcmFscyB3aGVyZSB1c2VkCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiLy8gQXR0cmlidXRlc1xuIjsK
KyAgICAgICAgb3V0IDw8ICBhdHRyaWJ1dGVzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAg
ICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfUG9zaXRpb24gPSBmbG9hdDQoMCwgMCwgMCwgMCk7
XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKG1Vc2VzUG9pbnRTaXplKQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9Qb2ludFNpemUgPSBmbG9hdCgxKTtc
biI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIi8v
IFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOworICAgICAgICBvdXQgPDwg
IlxuIgorICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4X0hhbGZQaXhlbFNpemU7XG4i
CisgICAgICAgICAgICAgICAiXG4iOworICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOworICAgICAg
ICBvdXQgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgewor
ICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19GUkFHX0NPT1JEXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUg
R0xfVVNFU19QT0lOVF9DT09SRFxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGcm9udEZhY2lu
ZykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lOR1xu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgeworICAgICAgICBvdXQg
PDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpFXG4iOworICAgIH0KKworICAgIGlmIChtVXNl
c0RlcHRoUmFuZ2UpCisgICAgeworICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVyc1xuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
ZmxvYXQgbmVhcjtcbiIKKyAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgorICAgICAgICAgICAgICAgIn07XG4iCisgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFy
YW1ldGVycyBnbF9EZXB0aFJhbmdlO1xuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNYb3IpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgeG9yKGJvb2wg
cCwgYm9vbCBxKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIChwIHx8IHEpICYmICEocCAmJiBxKTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisg
ICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDEpCisgICAgewor
ICAgICAgICBvdXQgPDwgImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAv
IHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAg
fQorICAgIAorICAgIGlmIChtVXNlc01vZDIpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0
MiBtb2QoZmxvYXQyIHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAg
ICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisgICAgCisgICAgaWYgKG1V
c2VzTW9kMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxv
YXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVy
biB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc01vZDQpCisgICAgeworICAgICAg
ICBvdXQgPDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7
XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDEpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0
IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0IEksIGZsb2F0IE5yZWYpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIK
KyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJu
IC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVs
c2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAg
cmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9
XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3
YXJkMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIGZhY2Vmb3J3YXJkKGZsb2F0MiBO
LCBmbG9hdDIgSSwgZmxvYXQyIE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIg
ICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAg
ICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAg
ICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAg
ICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAg
ICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMykKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiZmxvYXQzIGZhY2Vmb3J3YXJkKGZsb2F0MyBOLCBmbG9hdDMgSSwgZmxvYXQz
IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihk
b3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisg
ICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAg
ICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1c
biIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGZhY2Vmb3J3YXJkKGZsb2F0NCBOLCBmbG9hdDQgSSwgZmxvYXQ0IE5yZWYpXG4iCisgICAgICAg
ICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClc
biIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0
dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAg
IGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAg
ICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFs
TWF0MikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDJ4MiBtLCBmbG9h
dDJ4MiBuKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiZcbiIKKyAgICAg
ICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsxXVswXSAmJiBtWzFdWzFdID09IG5b
MV1bMV07XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNF
cXVhbE1hdDMpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQzeDMgbSwg
ZmxvYXQzeDMgbilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0gJiYgbVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1b
Ml0gPT0gblswXVsyXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9
PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsxXVsxXSAmJiBtWzFdWzJdID09IG5bMV1bMl0gJiZc
biIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMl1bMF0gPT0gblsyXVswXSAmJiBtWzJd
WzFdID09IG5bMl1bMV0gJiYgbVsyXVsyXSA9PSBuWzJdWzJdO1xuIgorICAgICAgICAgICAgICAg
In1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxNYXQ0KQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJib29sIGVxdWFsKGZsb2F0NHg0IG0sIGZsb2F0NHg0IG4pXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbVswXVswXSA9PSBuWzBdWzBd
ICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJiBtWzBdWzJdID09IG5bMF1bMl0gJiYgbVswXVszXSA9
PSBuWzBdWzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09IG5b
MV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJiBtWzFd
WzNdID09IG5bMV1bM10gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMl1bMF0g
PT0gblsyXVswXSAmJiBtWzJdWzFdID09IG5bMl1bMV0gJiYgbVsyXVsyXSA9PSBuWzJdWzJdICYm
IG1bMl1bM10gPT0gblsyXVszXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsz
XVswXSA9PSBuWzNdWzBdICYmIG1bM11bMV0gPT0gblszXVsxXSAmJiBtWzNdWzJdID09IG5bM11b
Ml0gJiYgbVszXVszXSA9PSBuWzNdWzNdO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAg
fQorCisgICAgaWYgKG1Vc2VzRXF1YWxWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29s
IGVxdWFsKGZsb2F0MiB2LCBmbG9hdDIgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1Lnk7XG4iCisgICAg
ICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzMpCisgICAg
eworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQzIHYsIGZsb2F0MyB1KVxuIgorICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1Lngg
JiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJi
b29sIGVxdWFsKGZsb2F0NCB2LCBmbG9hdDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56
ID09IHUueiAmJiB2LncgPT0gdS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQor
CisgICAgaWYgKG1Vc2VzRXF1YWxJVmVjMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBl
cXVhbChpbnQyIHYsIGludDIgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1Lnk7XG4iCisgICAgICAgICAg
ICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbElWZWMzKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDMgdiwgaW50MyB1KVxuIgorICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09
IHUueSAmJiB2LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzRXF1YWxJVmVjNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVh
bChpbnQ0IHYsIGludDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2
LncgPT0gdS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1V
c2VzRXF1YWxCVmVjMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sMiB2
LCBib29sMiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsQlZlYzMpCisgICAgeworICAgICAgICBvdXQg
PDwgImJvb2wgZXF1YWwoYm9vbDMgdiwgYm9vbDMgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYg
di56ID09IHUuejtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmICht
VXNlc0VxdWFsQlZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoYm9vbDQg
diwgYm9vbDQgdSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAg
IHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0g
dS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRh
bjIpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGF0YW55eChmbG9hdCB5LCBmbG9hdCB4
KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYoeCA9PSAw
ICYmIHkgPT0gMCkgeCA9IDE7XG4iICAgLy8gQXZvaWQgcHJvZHVjaW5nIGEgTmFOCisgICAgICAg
ICAgICAgICAiICAgIHJldHVybiBhdGFuMih5LCB4KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4i
OworICAgIH0KK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgVFN0cmlu
ZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Nv
bG9yIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0iOworICAgIH0KKyAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAgeworICAgICAgICBvdXQgPDwgImds
X0NvbG9yIjsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisg
ICAgeworICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFt
ZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKyAgICB7Cisg
ICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAg
fQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQorICAgIHsKKyAgICAgICAg
bVVzZXNQb2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX0Zyb250RmFjaW5nIikKKyAgICB7CisgICAgICAgIG1Vc2Vz
RnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRTaXplIikKKyAgICB7CisgICAgICAgIG1Vc2VzUG9pbnRT
aXplID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7CisK
KyAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQorICAgICAgICB7CisgICAgICAg
ICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zLmluc2VydChuYW1lLmNfc3RyKCkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1SZWZlcmVuY2VkQXR0cmlidXRlcy5pbnNlcnQobmFtZS5jX3N0cigpKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8
fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3MuaW5zZXJ0KG5hbWUuY19zdHIoKSk7
CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7CisgICAgfQorfQor
Citib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5
ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7ICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIiLCAiID0gIiwgIiIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAr
PSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNT
Y2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIoIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9IG11bCgiOworICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiLCB0cmFuc3Bv
c2UoIjsgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiKSkpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
IiA9IG11bCgiOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgICAgIG91dCA8PCAiLCAiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIpKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAi
XSIpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6ICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBpZiAodmlz
aXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUt
PmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgor
ICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICIuIjsKKworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUt
PmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7CisKKyAgICAgICAgICAgIGlmIChzd2l6emxl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1
ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVudCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpID0gZWxlbWVudC0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAwOiBvdXQgPDwgIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6IG91dCA8PCAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvdXQgPDwgInciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVP
cFN1YjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIp
OyBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BEaXY6ICAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYg
KG5vZGUtPmdldExlZnQoKS0+aXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID09ICIsICIpIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVP
cEVxdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIhKCI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBl
TGlzdCAqZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLT5zaXplKCk7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0g
KCpmaWVsZHMpW2ldLnR5cGU7CisKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdl
dEZpZWxkTmFtZSgpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCkt
PnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUt
PmdldEZpZWxkTmFtZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUo
KSAtIDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAm
JiAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0
IDw8ICIpIjsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNNYXRy
aXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExl
ZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMiAqIDI6IG1Vc2VzRXF1YWxNYXQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDMgKiAzOiBtVXNlc0VxdWFsTWF0MyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSA0ICogNDogbVVzZXNFcXVhbE1hdDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1ZlY3Rv
cigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVm
dCgpLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExl
ZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbFZlYzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRXF1YWxWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+
Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBtVXNlc0VxdWFsSVZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxJVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbElWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdl
dFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogbVVzZXNFcXVhbEJWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBtVXNlc0VxdWFsQlZlYzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG1Vc2VzRXF1YWxCVmVjNCA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9w
KCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImVxdWFsKCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIiFlcXVhbCgiLCAiLCAiLCAiKSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW46ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgPD0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bkVxdWFsOiAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICBicmVhazsK
KyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAi
LCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Zl
Y3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7
IGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIp
OyBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxY
b3I6CisgICAgICAgIG1Vc2VzWG9yID0gdHJ1ZTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgInhvcigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9n
aWNhbEFuZDogICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKwor
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIs
ICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBv
c3RJbmNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJl
YWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiIsICItLSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIiki
KTsgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvQm9vbDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5
cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAg
IGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAi
IiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYm9vbDQoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZCb29s
VG9GbG9hdDoKKyAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIi
LCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiZmxvYXQyKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJmbG9hdDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNh
c2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZC
b29sVG9JbnQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImludCgiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
MjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOworICAg
ICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7
IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQo
IiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVl
cygiLCAiIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcENvczogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwg
IiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAidGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wQXNpbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwg
IiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJhY29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BBdGFuOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAi
IiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImV4cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcExvZzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIs
ICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTG9nMjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIs
ICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJzcXJ0KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BJbnZlcnNlU3FydDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIs
ICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImFicygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFNpZ246ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAi
KSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgIiIsICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ2VpbDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIp
Iik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJmcmFjKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BMZW5ndGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAi
KSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCAiIiwgIikiKTsgYnJlYWs7CisvLyAgICBjYXNlIEVP
cERQZHg6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZGR5KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRU9w
RndpZHRoOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIiki
KTsgICAgYnJlYWs7ICAgICAgICAKKyAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIs
ICIpIik7ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0
ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKK3sKKyAgICBFU2hMYW5ndWFn
ZSBsYW5ndWFnZSA9IG1Db250ZXh0Lmxhbmd1YWdlOworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1Cb2R5OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2Ug
RU9wU2VxdWVuY2U6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAg
ICAgICAgICAgbVNjb3BlRGVwdGgrKzsKKworICAgICAgICAgICAgICAgIGlmIChtU2NvcGVCcmFj
a2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2JhY2soMCk7ICAgLy8gTmV3IHNjb3BlIGxldmVs
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29wZUJyYWNrZXRbbVNjb3BlRGVwdGggLSAxXSsr
OyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBsZXZlbAorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9y
IHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgc2l0ICE9IG5vZGUtPmdldFNlcXVl
bmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChp
c1NpbmdsZVN0YXRlbWVudCgqc2l0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKCpzaXQpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSW5z
aWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4i
OworCisgICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgtLTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0
aW9uOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAg
ICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVk
KCk7CisgICAgICAgICAgICBib29sIHZpc2l0ID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKHZh
cmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZh
cmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUo
KSksIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdmFy
aWFibGUtPmdldEFzU3ltYm9sTm9kZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+
Z2V0U3ltYm9sKCkgIT0gIiIpICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAi
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcodmFyaWFibGUtPmdldFR5cGUoKSkgKyAiICI7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7
IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lt
Ym9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
YXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2aXNpdCAmJiB0aGlzLT5pblZpc2l0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNl
cXVlbmNlLmJhY2soKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ID0gdGhpcy0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNp
dCwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZpc2l0ICYmIHRoaXMtPnBvc3RWaXNpdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dmlzaXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCBub2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgJiYgdmFyaWFibGUtPmdl
dEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSA9PSAiIikgICAvLyBUeXBlIChzdHJ1Y3QpIGRl
Y2xhcmF0aW9uCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBBbHJl
YWR5IGFkZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2
aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAg
ICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCB0
eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5h
bWUoKSkgPDwgIigiOworCisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9
IG5vZGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIik7
XG4iOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIiLCAiLCAiLCAiIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5j
dGlvbjoKKyAgICAgICAgeworICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1
bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKKworICAgICAgICAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3Ry
aW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiOworCisgICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT0gIm1haW4iKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF9tYWluKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1l
KSA8PCAiKCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUo
KS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRB
c1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRT
dHJpbmcoc3ltYm9sKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVu
dHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uo
c2VxdWVuY2UuYmVnaW4oKSk7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0g
UG9zdFZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAifVxuIjsK
KworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xl
TmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNl
ckRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8
PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1l
ID09ICJ0ZXh0dXJlMkQiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJEX2JpYXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2ogPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
MkRMb2QiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBz
YW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIFJl
cXVpcmVzIHRoZSB2ZXJ0ZXggc2hhZGVyIHRleHR1cmUgc2FtcGxpbmcgZXh0ZW5zaW9uCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZUN1YmVMb2QiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIg
dGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiki
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BQYXJhbWV0ZXJzOiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57
XG4iKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0Ogor
ICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdl
dFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwg
IikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIp
Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAg
ICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVl
bmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAg
YWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5j
ZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IAorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCku
Z2V0VHlwZU5hbWUoKSksICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgc3RydWN0TG9va3VwKG5vZGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSAr
ICJfY3RvcigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVz
c1RoYW46ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiA8PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiAhPSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTW9k
OgorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0t
PmdldEFzVHlwZWQoKS0+Z2V0U2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRo
ZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG1V
c2VzTW9kMSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzTW9kMiA9
IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzTW9kMyA9IHRydWU7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzTW9kNCA9IHRydWU7IGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQXRhbjoKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDIpOyAgIC8vIGF0YW4oeCkgaXMgYSB1bmFyeSBvcGVyYXRvcgorICAgICAgICBt
VXNlc0F0YW4yID0gdHJ1ZTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgi
LCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJt
YXgoIiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDog
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWl4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImxlcnAoIiwgIiwgIiwgIikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0
ZXA6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzdGVwKCIsICIsICIsICIpIik7ICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAiLCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wRGlzdGFuY2U6ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIs
ICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJkb3QoIiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDcm9zczogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwg
IiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNU
eXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0
IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDE6IG1Vc2VzRmFjZWZv
cndhcmQxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRmFjZWZvcndh
cmQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRmFjZWZvcndhcmQz
ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRmFjZWZvcndhcmQ0ID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZmxlY3Qo
IiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIsICIpIik7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKiAiLCAiKSIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5h
cnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ0IiA8PCBtVW5mb2xkU2VsZWN0
LT5nZXRUZW1wb3JhcnlJbmRleCgpOworICAgIH0KKyAgICBlbHNlICAvLyBpZi9lbHNlIHN0YXRl
bWVudAorICAgIHsKKyAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29u
ZGl0aW9uKCkpOworCisgICAgICAgIG91dCA8PCAiaWYoIjsKKworICAgICAgICBub2RlLT5nZXRD
b25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAg
ICAgICAgICAgICAie1xuIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiO31cbiI7CisKKyAgICAgICAgaWYgKG5v
ZGUtPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJlbHNl
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgICAgIG5vZGUtPmdldEZh
bHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgIG91dCA8PCAiO31cbiI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0
SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlKQorewor
ICAgIHdyaXRlQ29uc3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCkpOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNp
dCwgVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgaWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Aobm9k
ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJkb1xuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldEluaXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5nZXRUZXN0KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlc3QoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRUZXJt
aW5hbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiZm9yKCI7CisgICAgICAgIAor
ICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBub2Rl
LT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8
ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG91dCA8PCAiOyAiOworCisgICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7
CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICB7CisgICAgICAgIG5vZGUt
PmdldEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgb3V0IDw8ICJ9XG4iOwor
CisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hp
bGUoXG4iOworCisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisKKyAg
ICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisKKyAgICBvdXQgPDwgIjtcbiI7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9w
S2lsbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgIiIsICIiKTsgIGJyZWFr
OworICAgICAgY2FzZSBFT3BCcmVhazogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJyZWFrIiwg
IiIsICIiKTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnRpbnVlOiBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiY29udGludWUiLCAiIiwgIiIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUmV0dXJu
OgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICJyZXR1cm4gIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVybjtcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1O
b2RlICpub2RlKQoreworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdl
dEFzQWdncmVnYXRlKCk7CisKKyAgICBpZiAoYWdncmVnYXRlKQorICAgIHsKKyAgICAgICAgaWYg
KGFnZ3JlZ2F0ZS0+Z2V0T3AoKSA9PSBFT3BTZXF1ZW5jZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+
Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVu
ZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xl
U3RhdGVtZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gSGFuZGxlIGxvb3BzIHdpdGggbW9yZSB0aGFuIDI1NSBpdGVyYXRpb25zICh1bnN1
cHBvcnRlZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcgdGhlbQorYm9vbCBPdXRwdXRITFNMOjpoYW5k
bGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgLy8gUGFyc2UgbG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8g
Zm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXgg
Kz0gaW5jcmVtZW50KQorICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3Bl
cmF0b3IgY29tcGFyYXRvciA9IEVPcE51bGw7CisgICAgaW50IGluaXRpYWwgPSAwOworICAgIGlu
dCBsaW1pdCA9IDA7CisgICAgaW50IGluY3JlbWVudCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRl
eCBuYW1lIGFuZCBpbnRpYWwgdmFsdWUKKyAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsK
KyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNB
Z2dyZWdhdGUoKTsKKworICAgICAgICBpZiAoaW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAg
VEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IGluaXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsK
KworICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybUJp
bmFyeSAqYXNzaWduID0gdmFyaWFibGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgICAgICAg
ICAgICAgaWYgKGFzc2lnbi0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWdu
LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBhc3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29u
c3RhbnRVbmlvbigpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3Rh
bnQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkg
PT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCA9IHN5bWJvbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFs
ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBj
b21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQorICAgIGlmIChpbmRleCAhPSBOVUxMICYmIG5vZGUt
PmdldFRlc3QoKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5n
ZXRUZXN0KCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHRlc3Qg
JiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+
Z2V0SWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNv
bnN0YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAg
ICAgICAgIGlmIChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgp
ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9y
ID0gdGVzdC0+Z2V0T3AoKTsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBjb25zdGFudC0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBpbmNyZW1l
bnQKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9k
ZS0+Z2V0VGVybWluYWwoKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeVRl
cm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAg
IFRJbnRlcm1VbmFyeSAqdW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldFRlcm1pbmFsKCktPmdldEFz
VW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYmluYXJ5VGVybWluYWwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgp
OworICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVy
bWluYWwtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gY29uc3Rh
bnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiBpbmNyZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiBpbmNyZW1lbnQgPSAtdmFs
dWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh1bmFyeVRlcm1pbmFsKQorICAgICAgICB7
CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSB1bmFyeVRlcm1pbmFsLT5nZXRPcCgpOworCisg
ICAgICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEVPcFBvc3RJbmNyZW1lbnQ6IGluY3JlbWVudCA9IDE7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFT3BQb3N0RGVjcmVtZW50OiBpbmNyZW1lbnQgPSAtMTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogIGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBF
T3BOdWxsICYmIGluY3JlbWVudCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGNvbXBhcmF0b3Ig
PT0gRU9wTGVzc1RoYW5FcXVhbCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcGFyYXRvciA9
IEVPcExlc3NUaGFuOworICAgICAgICAgICAgbGltaXQgKz0gMTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjb21wYXJhdG9yID09IEVPcExlc3NUaGFuKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGluaXRpYWwgKyAxKSAvIGluY3JlbWVudDsKKwor
ICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0gMjU1KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdGlvbnMgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGludCByZW1haW5kZXIgPSAobGltaXQgLSBpbml0aWFsICsg
MSkgJSBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRp
YWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbigyNTUsIGl0ZXJhdGlvbnMpIC0gMSAtIHJlbWFpbmRl
cjsKKworICAgICAgICAgICAgICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8
IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICJmb3IoaW50ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgaW5p
dGlhbDsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOworICAgICAgICAgICAgICAgIGlu
ZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiA8ICI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8IGNsYW1wZWRMaW1pdDsKKworICAgICAgICAgICAgICAgIG91dCA8
PCAiOyAiOworICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiArPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbmNyZW1lbnQ7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwor
CisgICAgICAgICAgICAgICAgaW5pdGlhbCArPSAyNTUgKiBpbmNyZW1lbnQ7CisgICAgICAgICAg
ICAgICAgaXRlcmF0aW9ucyAtPSAyNTU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgVU5JTVBMRU1FTlRFRCgpOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaGFuZGxlZCBhcyBhbiBleGNlc3NpdmUg
bG9vcAorfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNv
bnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRT
dHJpbmcgJnBvc3RTdHJpbmcpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisK
KyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcHJlU3Ry
aW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgIHsKKyAgICAg
ICAgb3V0IDw8IGluU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0Vmlz
aXQpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cmluZzsKKyAgICB9Cit9CisKK1RTdHJp
bmcgT3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9s
KQoreworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZpZXIoKTsK
KyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgIFRTdHJpbmcg
bmFtZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobmFtZS5lbXB0eSgpKSAgIC8v
IEhMU0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMKKyAgICB7
CisgICAgICAgIG5hbWUgPSAieCIgKyBzdHIobUFyZ3VtZW50SW5kZXgrKyk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG5hbWUgPSBkZWNvcmF0ZShuYW1lKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5
cGUpICsgIiAiICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OnF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0
Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJu
ICJpbiI7CisgICAgICBjYXNlIEV2cU91dDogICAgICAgICAgIHJldHVybiAib3V0IjsKKyAgICAg
IGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgcmV0dXJuICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNv
bnN0UmVhZE9ubHk6IHJldHVybiAiY29uc3QiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gIiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlw
ZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRUeXBlTmFtZSgpICE9
ICIiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGUuZ2V0
VHlwZU5hbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0cnVj
dHVyZSwgZGVmaW5lIGluIHBsYWNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBl
TGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcg
c3RyaW5nID0gInN0cnVjdFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxk
ID0gKmZpZWxkc1tpXS50eXBlOworCisgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiAr
IHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0
cmluZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyaW5n
ICs9ICJ9ICI7CisKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDI6IHJldHVy
biAiZmxvYXQyeDIiOworICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7CisgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdl
dE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0
dXJuICJmbG9hdCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDIiOworICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImludCI7CisgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuICJpbnQyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImludDMi
OworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJi
b29sIjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImJvb2wyIjsKKyAgICAgICAgICAg
ICAgY2FzZSAzOiByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
ImJvb2w0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAg
ICAgICByZXR1cm4gInZvaWQiOworICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6
CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgIHJldHVybiAiPHVua25vd24gdHlw
ZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0
eXBlKQoreworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4g
IiI7CisgICAgfQorCisgICAgcmV0dXJuICJbIiArIHN0cih0eXBlLmdldEFycmF5U2l6ZSgpKSAr
ICJdIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbml0aWFsaXplcihjb25zdCBUVHlwZSAm
dHlwZSkKK3sKKyAgICBUU3RyaW5nIHN0cmluZzsKKworICAgIGZvciAoaW50IGNvbXBvbmVudCA9
IDA7IGNvbXBvbmVudCA8IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOyBjb21wb25lbnQrKykKKyAgICB7
CisgICAgICAgIHN0cmluZyArPSAiMCI7CisKKyAgICAgICAgaWYgKGNvbXBvbmVudCA8IHR5cGUu
Z2V0T2JqZWN0U2l6ZSgpIC0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9ICIs
ICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwor
fQorCit2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBj
b25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7
CisgICAgaWYgKG5hbWUgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxl
c3Mgc3RydWN0dXJlcyBkb24ndCBoYXZlIGNvbnN0cnVjdG9ycworICAgIH0KKworICAgIFRUeXBl
IGN0b3JUeXBlID0gdHlwZTsKKyAgICBjdG9yVHlwZS5jbGVhckFycmF5bmVzcygpOworICAgIGN0
b3JUeXBlLmNoYW5nZVByZWNpc2lvbihFYnBIaWdoKTsKKyAgICBjdG9yVHlwZS5jaGFuZ2VRdWFs
aWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIFRTdHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0
cnVjdCgpID8gZGVjb3JhdGUobmFtZSkgOiBuYW1lOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUVHlwZT4gUGFyYW1ldGVyQXJyYXk7CisgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRl
cnM7CisKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICB7CisgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBw
YXJhbWV0ZXIgIT0gcGFyYW1ldGVycy0+ZW5kKCk7IHBhcmFtZXRlcisrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5
cGVkKCktPmdldFR5cGUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5n
ZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUo
bmFtZSkpOworCisgICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOworICAgICAgICBzdHJ1Y3R1cmUg
Kz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCisgICAgICAgICAgICAgICAgICAg
ICAie1xuIjsKKworICAgICAgICBjb25zdCBUVHlwZUxpc3QgJmZpZWxkcyA9ICp0eXBlLmdldFN0
cnVjdCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNp
emUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAq
ZmllbGRzW2ldLnR5cGU7CisKKyAgICAgICAgICAgIHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBl
U3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdldEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmco
ZmllbGQpICsgIjtcbiI7CisgICAgICAgIH0KKworICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4i
OworCisgICAgICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBt
U3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3R1cmUpID09IG1TdHJ1Y3REZWNsYXJhdGlv
bnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVz
aF9iYWNrKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0udHlwZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgVFN0cmluZyBjb25zdHJ1Y3RvcjsK
KworICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVj
dG9yICs9IGN0b3JOYW1lICsgIiAiICsgY3Rvck5hbWUgKyAiX2N0b3IoIjsKKyAgICB9CisgICAg
ZWxzZSAgIC8vIEJ1aWx0LWluIHR5cGUKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5
cGVTdHJpbmcoY3RvclR5cGUpICsgIiAiICsgY3Rvck5hbWUgKyAiKCI7CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0gMDsgcGFyYW1ldGVyIDwgY3RvclBhcmFtZXRl
cnMuc2l6ZSgpOyBwYXJhbWV0ZXIrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVyXTsKKworICAgICAgICBjb25zdHJ1Y3RvciArPSB0
eXBlU3RyaW5nKHR5cGUpICsgIiB4IiArIHN0cihwYXJhbWV0ZXIpICsgYXJyYXlTdHJpbmcodHlw
ZSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlciA8IGN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBjb25zdHJ1Y3RvciArPSAiKVxuIgorICAgICAgICAgICAgICAgICAgICJ7
XG4iOworCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29u
c3RydWN0b3IgKz0gIiAgICAiICsgY3Rvck5hbWUgKyAiIHN0cnVjdHVyZSA9IHsiOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAgIHJldHVybiAiICsg
dHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiKCI7CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmlz
TWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCisgICAgeworICAgICAgICBp
bnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBdOworCisgICAgICAgIGlmIChwYXJhbWV0ZXIu
aXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93
IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBj
b2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAu
MCIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8
IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21p
bmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3Ry
aW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRT
dHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0g
LSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IHJlbWFpbmluZ0NvbXBvbmVudHMg
PSBjdG9yVHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGludCBwYXJhbWV0ZXJJbmRleCA9
IDA7CisKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ0NvbXBvbmVudHMgPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbcGFy
YW1ldGVySW5kZXhdOworICAgICAgICAgICAgYm9vbCBtb3JlUGFyYW1ldGVycyA9IHBhcmFtZXRl
ckluZGV4IDwgKGludCljdG9yUGFyYW1ldGVycy5zaXplKCkgLSAxOworCisgICAgICAgICAgICBj
b25zdHJ1Y3RvciArPSAieCIgKyBzdHIocGFyYW1ldGVySW5kZXgpOworCisgICAgICAgICAgICBp
ZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFy
YW1ldGVyLmdldE9iamVjdFNpemUoKSB8fCBtb3JlUGFyYW1ldGVycykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVy
LmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdD
b21wb25lbnRzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBjb25zdHJ1Y3RvciArPSAiLngiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IGNvbnN0cnVjdG9yICs9ICIueHkiOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogY29uc3RydWN0b3IgKz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBjb25zdHJ1Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgp
IHx8IHBhcmFtZXRlci5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgp
IHx8IG1vcmVQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlm
IChtb3JlUGFyYW1ldGVycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJJbmRleCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29t
cG9uZW50cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAi
LCAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBl
LmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIn07XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisK
KyAgICBtQ29uc3RydWN0b3JzLmluc2VydChjb25zdHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0
YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlw
ZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNl
ICZvdXQgPSBtQm9keTsKKworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCkKKyAgICB7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAodHlwZS5nZXRUeXBlTmFtZSgp
KSArICJfY3RvcigiOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0ICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RydWN0dXJlLT5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5
cGUgKmZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworCisgICAgICAgICAgICBjb25z
dFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5pb24pOworCisg
ICAgICAgICAgICBpZiAoaSAhPSBzdHJ1Y3R1cmUtPnNpemUoKSAtIDEpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBp
bnQgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9
IHNpemUgPiAxOworICAgICAgICAKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodHlwZSkgPDwgIigiOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjb25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBjb25zdFVuaW9u
LT5nZXRGQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8
PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpICE9IHNpemUgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHdyaXRlVHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBjb25zdFVuaW9uOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3Bl
U3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KQoreworICAgIFRTdHJpbmcgc3RyaW5nOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtU2NvcGVCcmFja2V0LnNpemUoKSAm
JiBpIDwgZGVwdGhMaW1pdDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RyaW5nICs9ICJfIiArIHN0
cihpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OnNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBpZiAodHlw
ZU5hbWUgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZU5hbWU7CisgICAgfQorCisg
ICAgcmV0dXJuIHR5cGVOYW1lICsgc2NvcGVTdHJpbmcobVNjb3BlRGVwdGgpOworfQorCitUU3Ry
aW5nIE91dHB1dEhMU0w6OnN0cnVjdExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sK
KyAgICBmb3IgKGludCBkZXB0aCA9IG1TY29wZURlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKQor
ICAgIHsKKyAgICAgICAgVFN0cmluZyBzY29wZWROYW1lID0gZGVjb3JhdGUodHlwZU5hbWUgKyBz
Y29wZVN0cmluZyhkZXB0aCkpOworCisgICAgICAgIGZvciAoU3RydWN0TmFtZXM6Oml0ZXJhdG9y
IHN0cnVjdE5hbWUgPSBtU3RydWN0TmFtZXMuYmVnaW4oKTsgc3RydWN0TmFtZSAhPSBtU3RydWN0
TmFtZXMuZW5kKCk7IHN0cnVjdE5hbWUrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCpz
dHJ1Y3ROYW1lID09IHNjb3BlZE5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNjb3BlZE5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBVTlJFQUNIQUJMRSgpOyAgIC8vIFNob3VsZCBoYXZlIGZvdW5kIGEgbWF0Y2hpbmcgY29uc3Ry
dWN0b3IKKworICAgIHJldHVybiB0eXBlTmFtZTsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpk
ZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIo
MCwgMykgIT0gImdsXyIgJiYgc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAiXyIgKyBzdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorfQorfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExT
TC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfT1VUUFVUSExTTF9IXworI2RlZmluZSBDT01QSUxFUl9PVVRQVVRITFNMX0hfCisK
KyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBzaAoreworY2xhc3MgVW5mb2xkU2VsZWN0OworCitjbGFzcyBPdXRwdXRITFNMIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IE91dHB1dEhM
U0woVFBhcnNlQ29udGV4dCAmY29udGV4dCk7CisgICAgfk91dHB1dEhMU0woKTsKKworICAgIHZv
aWQgb3V0cHV0KCk7CisKKyAgICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7CisKKyAg
ICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3Ry
aW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGljIFRT
dHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5n
IGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZSB0
byBhdm9pZCBuYW1pbmcgY2xhc2hlcworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIGhlYWRlcigp
OworCisgICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFuZCBvdXRwdXQgdGhlaXIgY29kZSB0byB0aGUg
Ym9keSBzdHJlYW0KKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2
b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3Ao
VmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2
aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50
ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCBoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29w
ICpub2RlKTsKKyAgICB2b2lkIG91dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJp
bmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBv
c3RTdHJpbmcpOworICAgIFRTdHJpbmcgYXJndW1lbnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJv
bCAqc3ltYm9sKTsKKyAgICBpbnQgdmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7
CisKKyAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3Ry
aW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpOworICAgIGNvbnN0
IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29u
c3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7CisKKyAgICBUU3RyaW5nIHNjb3BlU3RyaW5n
KHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKKyAgICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25z
dCBUU3RyaW5nICZ0eXBlTmFtZSk7CisgICAgVFN0cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0
cmluZyAmdHlwZU5hbWUpOworCisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgVW5m
b2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAgIGJvb2wgbUluc2lkZUZ1bmN0aW9uOworCisg
ICAgLy8gT3V0cHV0IHN0cmVhbXMKKyAgICBUSW5mb1NpbmtCYXNlIG1IZWFkZXI7CisgICAgVElu
Zm9TaW5rQmFzZSBtQm9keTsKKyAgICBUSW5mb1NpbmtCYXNlIG1Gb290ZXI7CisKKyAgICBzdGQ6
OnNldDxzdGQ6OnN0cmluZz4gbVJlZmVyZW5jZWRVbmlmb3JtczsKKyAgICBzdGQ6OnNldDxzdGQ6
OnN0cmluZz4gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzOworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5n
PiBtUmVmZXJlbmNlZFZhcnlpbmdzOworCisgICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3
aGF0IGdvZXMgaW4gdGhlIGhlYWRlciBvdXRwdXQKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEOwor
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRfYmlhczsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJv
ajsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKKyAgICBib29sIG1Vc2Vz
RGVwdGhSYW5nZTsKKyAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJvb2wgbVVzZXNQb2lu
dENvb3JkOworICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAgICBib29sIG1Vc2VzUG9pbnRT
aXplOworICAgIGJvb2wgbVVzZXNYb3I7CisgICAgYm9vbCBtVXNlc01vZDE7CisgICAgYm9vbCBt
VXNlc01vZDI7CisgICAgYm9vbCBtVXNlc01vZDM7CisgICAgYm9vbCBtVXNlc01vZDQ7CisgICAg
Ym9vbCBtVXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQyOworICAg
IGJvb2wgbVVzZXNGYWNlZm9yd2FyZDM7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsKKyAg
ICBib29sIG1Vc2VzRXF1YWxNYXQyOworICAgIGJvb2wgbVVzZXNFcXVhbE1hdDM7CisgICAgYm9v
bCBtVXNlc0VxdWFsTWF0NDsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWMyOworICAgIGJvb2wgbVVz
ZXNFcXVhbFZlYzM7CisgICAgYm9vbCBtVXNlc0VxdWFsVmVjNDsKKyAgICBib29sIG1Vc2VzRXF1
YWxJVmVjMjsKKyAgICBib29sIG1Vc2VzRXF1YWxJVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxJ
VmVjNDsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjMjsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVj
MzsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjNDsKKyAgICBib29sIG1Vc2VzQXRhbjI7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IENvbnN0cnVjdG9yczsKKyAgICBDb25zdHJ1Y3Rv
cnMgbUNvbnN0cnVjdG9yczsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RydWN0
TmFtZXM7CisgICAgU3RydWN0TmFtZXMgbVN0cnVjdE5hbWVzOworCisgICAgdHlwZWRlZiBzdGQ6
Omxpc3Q8VFN0cmluZz4gU3RydWN0RGVjbGFyYXRpb25zOworICAgIFN0cnVjdERlY2xhcmF0aW9u
cyBtU3RydWN0RGVjbGFyYXRpb25zOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxpbnQ+IFNj
b3BlQnJhY2tldDsKKyAgICBTY29wZUJyYWNrZXQgbVNjb3BlQnJhY2tldDsKKyAgICB1bnNpZ25l
ZCBpbnQgbVNjb3BlRGVwdGg7CisKKyAgICBpbnQgbUFyZ3VtZW50SW5kZXg7ICAgLy8gRm9yIGNy
ZWF0aW5nIHVuaXF1ZSBhcmd1bWVudCBuYW1lcworfTsKK30KKworI2VuZGlmICAgLy8gQ09NUElM
RVJfT1VUUFVUSExTTF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDc1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
U3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8K
Ky8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50
byBvZmZzZXRzCisvLyBmb3IgYSB2ZWN0b3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJz
ZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZl
Y3RvckZpZWxkcyYgZmllbGRzLCBpbnQgbGluZSkKK3sKKyAgICBmaWVsZHMubnVtID0gKGludCkg
Y29tcFN0cmluZy5zaXplKCk7CisgICAgaWYgKGZpZWxkcy5udW0gPiA0KSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGVudW0gewor
ICAgICAgICBleHl6dywKKyAgICAgICAgZXJnYmEsCisgICAgICAgIGVzdHBxLAorICAgIH0gZmll
bGRTZXRbNF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgewor
ICAgICAgICBzd2l0Y2ggKGNvbXBTdHJpbmdbaV0pICB7CisgICAgICAgIGNhc2UgJ3gnOiAKKyAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ld
ID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncic6IAorICAgICAg
ICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBl
cmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAneSc6IAorICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdnJzogCisgICAgICAgICAgICBmaWVsZHMu
b2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICd6JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tp
XSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ2InOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7Cisg
ICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgICAgICBjYXNlICd3JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9
IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ2EnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsK
KyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAg
ICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQg
c2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxk
cy5udW07ICsraSkgeworICAgICAgICBpZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gdmVjU2l6ZSkg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgInZlY3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9m
IHJhbmdlIiwgIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBpZiAo
ZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkgeworICAgICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVudCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUg
c2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBj
aGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSBtYXRyaXguCisvLworYm9vbCBUUGFyc2VD
b250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQg
bWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBpbnQgbGluZSkKK3sKKyAgICBmaWVsZHMu
d2hvbGVSb3cgPSBmYWxzZTsKKyAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICBmaWVs
ZHMucm93ID0gLTE7CisgICAgZmllbGRzLmNvbCA9IC0xOworCisgICAgaWYgKGNvbXBTdHJpbmcu
c2l6ZSgpICE9IDIpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjb21wU3RyaW5nWzBdID09ICdfJykgewor
ICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9u
IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlQ29sID0gdHJ1ZTsKKyAgICAgICAgZmllbGRz
LmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfSBlbHNlIGlmIChjb21wU3RyaW5nWzFd
ID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5n
WzBdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmll
bGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKKyAg
ICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcgfHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAor
ICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcwJyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9u
IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdbMF0gLSAnMCc7CisgICAg
ICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAnOworICAgIH0KKworICAgIGlmIChm
aWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRXJyb3JzCisvLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKKy8vCisvLyBUcmFjayB3aGV0aGVyIGVycm9ycyBoYXZlIG9jY3VycmVk
LgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6cmVjb3ZlcigpCit7CisgICAgcmVjb3ZlcmVkRnJv
bUVycm9yID0gdHJ1ZTsKK30KKworLy8KKy8vIFVzZWQgYnkgZmxleC9iaXNvbiB0byBvdXRwdXQg
YWxsIHN5bnRheCBhbmQgcGFyc2luZyBlcnJvcnMuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojpl
cnJvcihUU291cmNlTG9jIG5MaW5lLCBjb25zdCBjaGFyICpzelJlYXNvbiwgY29uc3QgY2hhciAq
c3pUb2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN6RXh0cmFJ
bmZvRm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBzekV4dHJhSW5mb1s0MDBdOworICAgIHZhX2xp
c3QgbWFya2VyOworCisgICAgdmFfc3RhcnQobWFya2VyLCBzekV4dHJhSW5mb0Zvcm1hdCk7CisK
KyAgICB2c25wcmludGYoc3pFeHRyYUluZm8sIHNpemVvZihzekV4dHJhSW5mbyksIHN6RXh0cmFJ
bmZvRm9ybWF0LCBtYXJrZXIpOworCisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgaW5mb1NpbmsuaW5mby5wcmVm
aXgoRVByZWZpeEVycm9yKTsKKyAgICBpbmZvU2luay5pbmZvLmxvY2F0aW9uKG5MaW5lKTsKKyAg
ICBpbmZvU2luay5pbmZvIDw8ICInIiA8PCBzelRva2VuIDw8ICAiJyA6ICIgPDwgc3pSZWFzb24g
PDwgIiAiIDw8IHN6RXh0cmFJbmZvIDw8ICJcbiI7CisKKyAgICB2YV9lbmQobWFya2VyKTsKKwor
ICAgICsrbnVtRXJyb3JzOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwg
cGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojph
c3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmlu
ZyByaWdodCkKK3sKKyAgICBlcnJvcihsaW5lLCAiIiwgb3AsICJjYW5ub3QgY29udmVydCBmcm9t
ICclcycgdG8gJyVzJyIsCisgICAgICAgICAgcmlnaHQuY19zdHIoKSwgbGVmdC5jX3N0cigpKTsK
K30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVy
YXRpb25zIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3Io
aW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpCit7CisgICBlcnJvcihs
aW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9wLCAKKyAgICAgICAgICAibm8gb3BlcmF0aW9u
ICclcycgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3BlcmFuZCBvZiB0eXBlICVzIChvciB0aGVyZSBp
cyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwKKyAgICAgICAgICBvcCwgb3BlcmFuZC5jX3N0
cigpKTsKK30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2FnZSBmb3IgYWxsIGJpbmFyeSBvcGVy
YXRpb25zIGRvbid0IHdvcmsuCisvLwordm9pZCBUUGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9y
KGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQor
eworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlcyAiLCBvcCwgCisgICAgICAg
ICAgICAibm8gb3BlcmF0aW9uICclcycgZXhpc3RzIHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3Bl
cmFuZCBvZiB0eXBlICclcycgYW5kICIKKyAgICAgICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2Yg
dHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwgCisgICAg
ICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCByaWdodC5jX3N0cigpKTsKK30KKworYm9vbCBUUGFy
c2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNp
c2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKKyAgICBzd2l0Y2goIHR5cGUgKXsKKyAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCApeworICAgICAg
ICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwg
IiIsICIiICk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVidEludDoKKyAgICAgICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRl
ZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBsaW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmll
ZCAoaW50KSIsICIiLCAiIiApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIEJv
dGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRo
ZSBub2RlIGlzIHJlYWxseQorLy8gYW4gbC12YWx1ZSB0aGF0IGNhbiBiZSBvcGVyYXRlZCBvbiB0
aGlzIHdheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIq
IG9wLCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgVEludGVybVN5bWJvbCogc3ltTm9kZSA9
IG5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIFRJbnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUg
PSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5hcnlOb2RlKSB7CisgICAg
ICAgIGJvb2wgZXJyb3JSZXR1cm47CisKKyAgICAgICAgc3dpdGNoKGJpbmFyeU5vZGUtPmdldE9w
KCkpIHsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRl
eEluZGlyZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAg
ICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQo
KSk7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKKyAgICAgICAgICAgIGVycm9yUmV0
dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsK
KyAgICAgICAgICAgIGlmICghZXJyb3JSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0WzRdID0gezAsMCwwLDB9OworCisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiByaWdo
dE5vZGUgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1B
Z2dyZWdhdGUgKmFnZ3JOb2RlID0gcmlnaHROb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRv
ciBwID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gYWdnck5vZGUtPmdldFNlcXVlbmNl
KCkuZW5kKCk7IHArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5n
ZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXRbdmFsdWVdID4gMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhh
dmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCwgIiIsICIiKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IAorCisgICAgICAgICAgICByZXR1cm4gZXJyb3JSZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIiLCAiIik7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICBjb25zdCBjaGFyKiBzeW1ib2wgPSAwOwor
ICAgIGlmIChzeW1Ob2RlICE9IDApCisgICAgICAgIHN5bWJvbCA9IHN5bU5vZGUtPmdldFN5bWJv
bCgpLmNfc3RyKCk7CisKKyAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gMDsKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVz
c2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9k
aWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAg
bWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHZhcnlpbmciOyAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5wdXQ6ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGFuIGlucHV0IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAg
ICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfRnJhZ0Nvb3JkIjsgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9Gcm9udEZh
Y2luZyI7IGJyZWFrOworICAgIGNhc2UgRXZxUG9pbnRDb29yZDogICAgIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAgYnJlYWs7CisgICAgZGVmYXVsdDoKKworICAgICAg
ICAvLworICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3JpdHRlbiB0bz8KKyAgICAgICAg
Ly8KKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICBjYXNl
IEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
Znkgdm9pZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtZXNzYWdlID09IDAgJiYg
YmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKworICAgIC8vCisgICAgLy8gRXZlcnl0aGluZyBlbHNlIGlzIG9rYXksIG5vIGVy
cm9yLgorICAgIC8vCisgICAgaWYgKG1lc3NhZ2UgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8KKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhbiBlcnJvciBhbmQg
YSBtZXNzYWdlLgorICAgIC8vCisgICAgaWYgKHN5bU5vZGUpCisgICAgICAgIGVycm9yKGxpbmUs
ICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiXCIlc1wiICglcykiLCBzeW1ib2wsIG1lc3NhZ2Up
OworICAgIGVsc2UKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3As
ICIoJXMpIiwgbWVzc2FnZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGgg
dGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBu
b2RlIGlzIHJlYWxseQorLy8gYSBjb25zdGFudC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayhU
SW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihub2RlLT5nZXRMaW5l
KCksICJjb25zdGFudCBleHByZXNzaW9uIHJlcXVpcmVkIiwgIiIsICIiKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0
IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhbiBpbnRlZ2VyLgor
Ly8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNl
Q29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFy
KiB0b2tlbikKK3sKKyAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5v
ZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9r
ZW4sICIiKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQg
aWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgd2UgYXJlIGN1cnJlbnRs
eQorLy8gZ2xvYmFsbHkgc2NvcGVkLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFu
IGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Z2xvYmFsRXJyb3JDaGVjayhpbnQgbGlu
ZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIGlmIChnbG9iYWwpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQg
Z2xvYmFsIHNjb3BlIiwgdG9rZW4sICIiKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLwor
Ly8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBpZiBpdCBzdGFydHMgImdsXyIsIGl0J3MgcmVz
ZXJ2ZWQsIGluZGVwZW5kZW50CisvLyBvZiBzY29wZS4gIEV4Y2VwdCwgaWYgdGhlIHN5bWJvbCB0
YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1sZXZlbCwKKy8vIHdoaWNoIGlzIHdoZW4gd2Ug
YXJlIHBhcnNpbmcgYnVpbHQtaW5zLgorLy8gQWxzbyBjaGVja3MgZm9yICJ3ZWJnbF8iIGFuZCAi
X3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgaWYgcGFyc2luZyBhCisvLyB3ZWJnbCBzaGFk
ZXIuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmlu
ZyYgaWRlbnRpZmllcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cg
PSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0
SW5MZXZlbCgpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyLnN1YnN0cigwLCAzKSA9PSBUU3Ry
aW5nKCJnbF8iKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJn
bF8iLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoc3BlYyA9PSBFU2hTcGVjV2ViR0wpIHsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLnN1
YnN0cigwLCA2KSA9PSBUU3RyaW5nKCJ3ZWJnbF8iKSkgeworICAgICAgICAgICAgICAgIGVycm9y
KGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vi
c3RyKDAsIDcpID09IFRTdHJpbmcoIl93ZWJnbF8iKSkgeworICAgICAgICAgICAgICAgIGVycm9y
KGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmdsXyIsICIiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaWRlbnRp
Zmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIC8vZXJyb3Io
bGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIiwgIiIpOworICAgICAgICAgICAgLy9yZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fybmlu
ZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuIiwgbGluZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5v
dWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIGJ1aWxkCisvLyBzb21ldGhp
bmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVjdG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBl
IG9mCisvLyB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdh
cyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25z
dHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24m
IGZ1bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBlKiB0eXBlKQoreworICAgICp0eXBlID0gZnVu
Y3Rpb24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAgYm9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBm
YWxzZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAg
ICAgY29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDogCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTm90ZTogSXQncyBv
a2F5IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0
byBoYXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUg
d2hlbiBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vlbi4gIElmIHdlIGxvb3AKKyAgICAvLyBhZ2Fp
biwgdGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQsIHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUg
dHJ1ZS4KKyAgICAvLworCisgICAgaW50IHNpemUgPSAwOworICAgIGJvb2wgY29uc3RUeXBlID0g
dHJ1ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7
CisgICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZhbHNlOworICAgIGJvb2wgYXJyYXlBcmcgPSBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsg
KytpKSB7CisgICAgICAgIHNpemUgKz0gZnVuY3Rpb25baV0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgp
OworICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBmdW5jdGlvbltp
XS50eXBlLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOwor
ICAgICAgICBpZiAoZnVsbCkKKyAgICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAg
aWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUg
Pj0gdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKQorICAgICAgICAgICAgZnVsbCA9IHRydWU7CisgICAg
ICAgIGlmIChmdW5jdGlvbltpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAg
ICAgICAgICAgIGNvbnN0VHlwZSA9IGZhbHNlOworICAgICAgICBpZiAoZnVuY3Rpb25baV0udHlw
ZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgYXJyYXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICBpZiAoY29uc3RUeXBlKQorICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29u
c3QpOworCisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAh
PSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5
IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGFy
cmF5QXJnICYmIG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5l
LCAiY29uc3RydWN0aW5nIGZyb20gYSBub24tZGVyZWZlcmVuY2VkIGFycmF5IiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobWF0cml4
SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0
UGFyYW1Db3VudCgpICE9IDEpIHsKKyAgICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5n
IG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChvdmVyRnVsbCkgeworICAgICAgICBlcnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1l
bnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgp
ICYmIHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkgIT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgp
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1iZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVy
cyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3Ry
dWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghdHlw
ZS0+aXNNYXRyaXgoKSkgeworICAgICAgICBpZiAoKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiBzaXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkgfHwKKyAgICAgICAg
ICAgIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNp
emUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlk
ZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkKiB0eXBlZCA9
IG5vZGUtPmdldEFzVHlwZWQoKTsKKyAgICBpZiAodHlwZWQgPT0gMCkgeworICAgICAgICBlcnJv
cihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29u
c3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAob3Ag
IT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkp
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29u
c3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlw
ZWQtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNh
bm5vdCBjb252ZXJ0IGEgdm9pZCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCBy
YWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNoIGEgY2FzZQorLy8KKy8vIHJldHVybnMgdHJ1
ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5
cGUmIHB1YlR5cGUpCit7CisgICAgaWYgKHB1YlR5cGUudHlwZSA9PSBFYnRWb2lkKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUg
KGZvciB0aGUgZXhwcmVzc2lvbikgY29udGFpbnMgYSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9u
IG9yIG5vdAorLy8KKy8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9v
bCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5
cGVkKiB0eXBlKQoreworICAgIGlmICh0eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8
IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01hdHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIi
LCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRo
ZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Npb24gb3Igbm90
CisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJz
ZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5
cGUpCit7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBw
VHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgICAgICBlcnJvcihsaW5lLCAi
Ym9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0
OjpzYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBj
b25zdCBjaGFyKiByZWFzb24pCit7CisgICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7
CisgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKnBUeXBlLnVzZXJEZWYpKSB7CisgICAgICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBl
KSwgIihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1wbGVyKSIpOworICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIocFR5cGUudHlwZSkpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgcmVhc29uLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIiKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwg
Y29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQoreworICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09
IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlw
ZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgorICAgICAgICBwVHlwZS50eXBlID09IEVi
dFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0
cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlm
aWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1w
bGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9y
Q2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkK
K3sKKyAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0
KSAmJiAKKyAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJ
c1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInNh
bXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmco
KSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKQor
eworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Cisg
ICAgICAgIFRUeXBlTGlzdCYgc3RydWN0dXJlID0gKnR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc3RydWN0dXJlLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpzdHJ1Y3R1cmVbaV0udHlwZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vCisvLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mg
c2l6ZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jv
b2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5
cGVkKiBleHByLCBpbnQmIHNpemUpCit7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0
YW50ID0gZXhwci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGNvbnN0YW50ID09IDAg
fHwgY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgeworICAgICAgICBlcnJvcihs
aW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwg
IiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2l6ZSA9IGNvbnN0
YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKKworICAgIGlmIChzaXpl
IDw9IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0
aXZlIGludGVnZXIiLCAiIiwgIiIpOworICAgICAgICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRo
aXMgcXVhbGlmaWVyIGNhbiBiZSBhbiBhcnJheS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhl
cmUgaXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmllckVy
cm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUucXVh
bGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRl
Y2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVT
dHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBleHRlbnNpb25FcnJvckNoZWNrKGxp
bmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFNlZSBpZiB0aGlzIHR5cGUgY2FuIGJlIGFuIGFy
cmF5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBl
IHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJyYXk/CisgICAg
Ly8KKyAgICBpZiAodHlwZS5hcnJheSkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRl
Y2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCku
Y19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vCisvLyBEbyBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNs
YXJpbmcgYW4gYXJyYXksIHdpdGggYW5kIAorLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRo
ZSByaWdodCBjaGFuZ2VzIHRvIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1l
YW5zIG5vIHNwZWNpZmllZCBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMg
YW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQg
dXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKKyAg
ICAvLyBiZWNhdXNlIHJlc2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KKyAgICAvLwor
CisgICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAorICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7
CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVp
bHRJbiwgJnNhbWVTY29wZSk7CisgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsK
KyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICAgICAgaWYgKHR5cGUuYXJy
YXlTaXplKQorICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlw
ZS5hcnJheVNpemUpOworCisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFi
bGUpKSB7CisgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJs
ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlh
YmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVk
ZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFyaWFibGUt
PmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwg
IiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5cGUp
KSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0
aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRUeXBlKiB0ID0gdmFyaWFibGUt
PmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CisgICAgICAgIHdoaWxlICh0ICE9IDApIHsKKyAg
ICAgICAgICAgIGlmICh0LT5nZXRNYXhBcnJheVNpemUoKSA+IHR5cGUuYXJyYXlTaXplKSB7Cisg
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVz
ZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdC0+c2V0QXJyYXlT
aXplKHR5cGUuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIHQgPSB0LT5nZXRBcnJheUluZm9ybWF0
aW9uVHlwZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQorICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUp
OworICAgIH0gCisKKyAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllciwgdHlw
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlw
ZSogdHlwZSwgaW50IHNpemUsIGJvb2wgdXBkYXRlRmxhZywgVFNvdXJjZUxvYyBsaW5lKQorewor
ICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRh
YmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZidWlsdEluKTsKKyAgICBpZiAoc3ltYm9sID09
IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2Rl
LT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9s
KTsKKworICAgIHR5cGUtPnNldEFycmF5SW5mb3JtYXRpb25UeXBlKHZhcmlhYmxlLT5nZXRBcnJh
eUluZm9ybWF0aW9uVHlwZSgpKTsKKyAgICB2YXJpYWJsZS0+dXBkYXRlQXJyYXlJbmZvcm1hdGlv
blR5cGUodHlwZSk7CisKKyAgICAvLyBzcGVjaWFsIGNhc2luZyB0byB0ZXN0IGluZGV4IHZhbHVl
IG9mIGdsX0ZyYWdEYXRhLiBJZiB0aGUgYWNjZXNzZWQgaW5kZXggaXMgPj0gZ2xfTWF4RHJhd0J1
ZmZlcnMKKyAgICAvLyBpdHMgYW4gZXJyb3IKKyAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0g
ImdsX0ZyYWdEYXRhIikgeworICAgICAgICBUU3ltYm9sKiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxl
LmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1aWx0SW4pOworICAgICAgICBpZiAoZnJhZ0Rh
dGEgPT0gMCkgeworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMgbm90IGRlZmluZWQiLCBsaW5lKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGZyYWdEYXRhVmFs
dWUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigp
WzBdLmdldElDb25zdCgpOworICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2
ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB3ZSBkb250
IHdhbnQgdG8gdXBkYXRlIHRoZSBtYXhBcnJheVNpemUgd2hlbiB0aGlzIGZsYWcgaXMgbm90IHNl
dCwgd2UganVzdCB3YW50IHRvIGluY2x1ZGUgdGhpcyAKKyAgICAvLyBub2RlIHR5cGUgaW4gdGhl
IGNoYWluIG9mIG5vZGUgdHlwZXMgc28gdGhhdCBpdHMgdXBkYXRlZCB3aGVuIGEgaGlnaGVyIG1h
eEFycmF5U2l6ZSBjb21lcyBpbi4KKyAgICBpZiAoIXVwZGF0ZUZsYWcpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHNpemUrKzsKKyAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldE1heEFy
cmF5U2l6ZShzaXplKTsKKyAgICB0eXBlLT5zZXRNYXhBcnJheVNpemUoc2l6ZSk7CisgICAgVFR5
cGUqIHR0ID0gdHlwZTsKKworICAgIHdoaWxlKHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgp
ICE9IDApIHsKKyAgICAgICAgdHQgPSB0dC0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAg
ICAgICAgdHQtPnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vCisvLyBFbmZvcmNlIG5vbi1pbml0aWFsaXplciB0eXBlL3F1YWxpZmllciBy
dWxlcy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jv
b2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmlu
ZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBNYWtl
IHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KKyAgICAvLworICAgIGlmICh0eXBlLnF1YWxpZmll
ciA9PSBFdnFDb25zdCkgeworICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11
c3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gRG8gc2Vt
YW50aWMgY2hlY2tpbmcgZm9yIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5p
dGlhbGl6ZXIsCisvLyBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUuCisvLworLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6Om5v
bkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlw
ZSYgdHlwZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIp
KQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOworCisgICAgaWYgKCEgc3ltYm9sVGFi
bGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlv
biIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICBkZWxldGUgdmFy
aWFibGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2b2lkRXJyb3JD
aGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNr
KGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmll
ciwgVFR5cGUqIHR5cGUpCit7ICAgIAorICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYg
cXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlm
aWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0cmlu
ZyhxdWFsaWZpZXIpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
cXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocXVhbGlmaWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZx
Q29uc3QpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsK
KyAgICBlbHNlCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9u
RXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogZXh0ZW5zaW9uKQoreyAgICAgICAKKyAg
ICBpZiAoZXh0ZW5zaW9uQmVoYXZpb3JbZXh0ZW5zaW9uXSA9PSBFQmhXYXJuKSB7CisgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgKCJleHRlbnNpb24gIiArIFRT
dHJpbmcoZXh0ZW5zaW9uKSArICIgaXMgYmVpbmcgdXNlZCIpLmNfc3RyKCksIGxpbmUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChleHRlbnNpb25CZWhhdmlvcltleHRl
bnNpb25dID09IEVCaERpc2FibGUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIs
IGV4dGVuc2lvbiwgImlzIGRpc2FibGVkIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwor
Ly8gTm9uLUVycm9ycy4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExv
b2sgdXAgYSBmdW5jdGlvbiBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUg
aXQgaXMgYSBmdW5jdGlvbi4KKy8vCisvLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBm
b3VuZCwgb3RoZXJ3aXNlIDAuCisvLworY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0Ojpm
aW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKK3sK
KyAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1h
bmdsZWROYW1lKCksIGJ1aWx0SW4pOworCisgICAgaWYgKHN5bWJvbCA9PSAwKSB7ICAgICAgICAK
KyAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNoaW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91
bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAoISBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICBlcnJvcihs
aW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAi
Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBjb25zdCBURnVuY3Rpb24q
IGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICAK
KyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKKy8vCisvLyBJbml0aWFsaXplcnMgc2hvdyB1cCBp
biBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhhdmUgb25lIHNldCBvZgorLy8gY29k
ZSB0byBoYW5kbGUgdGhlbSBoZXJlLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUlu
aXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHBUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxl
KiB2YXJpYWJsZSkKK3sKKyAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5cGUpOworCisgICAgaWYg
KHZhcmlhYmxlID09IDApIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2b2lk
RXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBwVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICAvLworICAgICAgICAvLyBhZGQgdmFyaWFibGUgdG8gc3ltYm9sIHRh
YmxlCisgICAgICAgIC8vCisgICAgICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRp
ZmllciwgdHlwZSk7CisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUp
KSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5
LCBhbmQgdGhlIHBvb2wgCisgICAgICAgICAgICAvLyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhl
IG1lbW9yeQorICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11
c3QgYmUgb2YgdHlwZSBjb25zdGFudCwgYSBnbG9iYWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8K
KyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyKCk7CisgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVy
ICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZh
cmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIC8vCisgICAgLy8gdGVzdCBmb3IgYW5kIHByb3BhZ2F0ZSBj
b25zdGFudAorICAgIC8vCisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAg
ICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRv
IiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5j
X3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVy
KEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwg
CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmco
KSwgIiIpOworICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCisgICAgICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigp
OworCisgICAgICAgICAgICBpZiAodHlwZS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiB0eXBlLmdl
dEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgICp1bmlvbkFycmF5
ID0gKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKSlbMF07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgVFN5
bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xO
b2RlKCktPmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9
IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisKKyAgICAgICAgICAgIENv
bnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihjb25zdEFycmF5KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9
IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIo
KSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1YWxpZmllcihFdnFU
ZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
CisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgeworICAgICAgICBUSW50ZXJtU3ltYm9s
KiBpbnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCBsaW5lKTsK
KyAgICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVkaWF0ZS5hZGRBc3NpZ24oRU9wSW5pdGlhbGl6
ZSwgaW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwgbGluZSk7CisgICAgICAgIGlmIChpbnRlcm1O
b2RlID09IDApIHsKKyAgICAgICAgICAgIGFzc2lnbkVycm9yKGxpbmUsICI9IiwgaW50ZXJtU3lt
Ym9sLT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0aWFsaXplci0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAg
ICAgICAgaW50ZXJtTm9kZSA9IDA7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBh
cnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSkK
K3sKKyAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgYWxsQ29uc3RhbnQgPSB0cnVlOworCisgICAgLy8gY2hlY2sgaWYg
YWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5z
ZXJ0ZWQgaW50byAKKyAgICAvLyB0aGUgcGFyZW50IG5vZGUKKyAgICBpZiAoYWdnck5vZGUpIHsK
KyAgICAgICAgVEludGVybVNlcXVlbmNlICZjaGlsZFNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkgOworICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Ig
cCA9IGNoaWxkU2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwICE9IGNoaWxkU2VxdWVuY2VWZWN0b3IuZW5kKCk7IHArKykgeworICAg
ICAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBhbGxDb25zdGFudDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlc3Qg
Zm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91cyBj
b25zdHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUgcmln
aHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAorLy8KKy8vIFJldHVy
bnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBvciB0
eXBlZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRk
Q29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0
b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKG5v
ZGUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dy
Tm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgCisgICAgVFR5cGVMaXN0OjppdGVy
YXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAg
ICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5iZWdpbigpOworICAgIAorICAg
IFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAg
ICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJn
OworICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0g
RU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAg
ICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFy
ZyA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAg
VEludGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8g
SWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNh
bGxlZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVj
dHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAg
ICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVj
dFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOwor
ICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBu
ZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLnR5cGUsIDEsIG5v
ZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxz
ZSk7CisKKyAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkg
eworICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0
Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAg
ICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29u
c3RydWN0b3I7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9Cisg
ICAgCisgICAgLy8KKyAgICAvLyBIYW5kbGUgbGlzdCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAg
ICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNl
KCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8g
dGhlIGNvbnN0cnVjdG9yCisgICAgLy8gaWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250
YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNo
IHBhcmFtZXRlcgorICAgIAorICAgIGludCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJh
Y2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAK
KyAgICAKKyAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGws
IGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVt
IAorICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisg
ICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0
IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5l
bmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkK
KyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwg
cGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlIGlmIChv
cCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0
U3RydWN0KCpwLCAobWVtYmVyVHlwZXNbcGFyYW1Db3VudF0pLnR5cGUsIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9k
ZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUp
OworICAgICAgICAKKyAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3
Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3Ig
PSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsK
KyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rv
cihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgIGlmIChjb25zdENv
bnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVy
biBjb25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29u
c3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5
cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUp
OworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkgewor
ICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOworICAgICAgICBDb25zdGFudFVuaW9uKiB1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworICAg
ICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAgICAg
ICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdl
dExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xU
YWJsZSwgIHR5cGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRM
aW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFi
bGUsICB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0dXJuVmFsKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2RlLT5nZXRMaW5lKCkpOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBmb3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRp
b24uIENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVPcCB2YWx1ZQorLy8gZm9y
IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNzZWQgdG8gdGhpcyBmdW5jdGlv
bikuIEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cworLy8gdGhlIHBhcmFtZXRlciB0eXBlcyBjb3Jy
ZWN0bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFuZCBp
cyBwYXNzZWQgYSAKKy8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZlcnRlZCB0byBpbnQuCisv
LworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZS4KKy8v
CitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5
cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGlu
ZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBuZXdOb2RlOworICAgIFRPcGVy
YXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBu
ZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RW
ZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9h
dDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVj
MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0SW50
OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50OworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoK
KyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoK
KyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEJvb2w7CisgICAgICAgIGJyZWFrOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlv
biIsICIiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9k
ZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkg
eworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIsICIi
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRo
ZXJlIHN0aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQg
d2UgbmVlZCBvbmUsIGFkZCBvbmUuCisgICAgLy8KKyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNr
aXAgb3V0IGVhcmx5LgorICAgIGlmIChzdWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdO
b2RlLT5nZXRUeXBlKCkgPT0gKnR5cGUpKQorICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAg
IC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBj
b25zdHJ1Y3RvciwgYXMgbmVlZGVkLgorICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVn
YXRlT3BlcmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRl
c3RzIGZvciB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25z
dHJ1Y3RvcnMuIFJhaXNlcworLy8gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlw
ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Iu
CisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYg
aWYgdGhlIGV4cGVjdGVkIGFuZCB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8K
K1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2Rl
KiBub2RlLCBUVHlwZSogdHlwZSwgaW50IHBhcmFtQ291bnQsIFRTb3VyY2VMb2MgbGluZSwgYm9v
bCBzdWJzZXQpCit7CisgICAgaWYgKCp0eXBlID09IG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlw
ZSgpKSB7CisgICAgICAgIGlmIChzdWJzZXQpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+Z2V0
QXNUeXBlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdldEFzVHlwZWQoKSwgRU9wQ29uc3RydWN0U3Ry
dWN0LCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0
cnVjdG9yIiwgImNhbm5vdCBjb252ZXJ0IHBhcmFtZXRlciAlZCBmcm9tICclcycgdG8gJyVzJyIs
IHBhcmFtQ291bnQsCisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkuZ2V0QmFzaWNTdHJpbmcoKSwgdHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSk7CisgICAgICAgIHJl
Y292ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZlY3RvciBmaWVsZChz
KSBiZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQgdmVjdG9yLgorLy8gSWYgb25seSBvbmUgY29t
cG9uZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAodi54IG9yIHZbMF0gd2hlcmUgdiBpcyBhIGNv
bnRhbnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQgbm9kZSBpcworLy8gcmV0dXJuZWQsIGVsc2Ug
YW4gYWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQgKGZvciB2Lnh5KS4gVGhlIGlucHV0IHRvIHRo
aXMgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRoZSBzeW1ib2wKKy8vIG5vZGUgb3IgaXQgY291
bGQgYmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIGFjY2Vzc2luZyBm
aWVsZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUgb3IgY29sdW1uIG9mIAorLy8gYSBjb25zdGFu
dCBtYXRyaXguCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFZlY3Rv
ck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VM
b2MgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheTsKKyAgICBpZiAodGVtcENvbnN0YW50
Tm9kZSkgeworICAgICAgICB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKworICAgICAgICBpZiAoIXVuaW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJy
b3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFpc2VkCisgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudFVuaW9uIG5vdCBpbml0
aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUgZnVuY3Rpb24iLCBsaW5lKTsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8gYmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3Ig
YW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29uc3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVy
cm9yCisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltmaWVsZHMubnVtXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsr
KSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0
T2JqZWN0U2l6ZSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9y
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3RBcnJheVtpXSA9IHVuaW9uQXJy
YXlbZmllbGRzLm9mZnNldHNbaV1dOworCisgICAgfSAKKyAgICB0eXBlZE5vZGUgPSBpbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCksIGxpbmUp
OworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBmcm9tIGEgY29uc3RhbnQgbWF0cml4LiBUaGUg
dmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2Ut
dHJlZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVhY2ggY29sdW1uIG9mIGEgbWF0cml4IGlzIGEg
dmVjdG9yKS4gVGhlIGlucHV0IAorLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBh
IHN5bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMgYSBjb25zdGFudCBtYXRyaXgpdGhhdCByZXBy
ZXNlbnRzIGEgCisvLyBjb25zdGFudCBtYXRyaXggb3IgaXQgY291bGQgYmUgdGhlIHRyZWUgcmVw
cmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1hdHJpeCAocy5tMVswXSB3aGVyZSBzIGlzIGEg
Y29uc3RhbnQgc3RydWN0dXJlKQorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRk
Q29uc3RNYXRyaXhOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9j
IGxpbmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0
YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRl
eCA9IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIENv
bnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIsICIiKTsKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiB0eXBlZE5v
ZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbGVtZW50IG9mIGFu
IGFycmF5IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBhcnJheS4gVGhlIHZhbHVlcyBhcmUgcmV0
cmlldmVkIGZyb20KKy8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQg
Zm9yIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rp
b24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKGFbMF0gd2hlcmUgYSBpcyBhIGNvbnN0
YW50IGFycmF5KXRoYXQgcmVwcmVzZW50cyBhIAorLy8gY29uc3RhbnQgYXJyYXkgb3IgaXQgY291
bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IGFycmF5IChzLmEx
WzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBU
UGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CisgICAgVFR5cGUgYXJyYXlFbGVtZW50VHlwZSA9IG5vZGUtPmdldFR5
cGUoKTsKKyAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisKKyAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICIiLCAiWyIsICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCci
LCBpbmRleCk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0K
KworICAgIGludCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RT
aXplKCk7CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRV
bmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigm
dW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVy
KCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsK
K30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRp
Y3VsYXIgZmllbGQgaW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0
YWJsZS4gCisvLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHBy
b3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJv
bUFnZ3IKKy8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZh
bHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1U
eXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRUeXBlTGlzdCogZmllbGRzID0g
bm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2Rl
OworICAgIGludCBpbnN0YW5jZVNpemUgPSAwOworICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7
CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKworICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMt
PnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoKCpmaWVsZHMpW2luZGV4XS50eXBlLT5n
ZXRGaWVsZE5hbWUoKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSAoKmZpZWxkcylbaW5kZXhd
LnR5cGUtPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0ZW1w
Q29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICAgdHlwZWRO
b2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNp
emUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBj
aGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIiwgIiIp
OworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYWxsIHN1cHBvcnRlZCBl
eHRlbnNpb25zIHRvIGRpc2FibGUKKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmluaXRpYWxpemVF
eHRlbnNpb25CZWhhdmlvcigpCit7CisgICAgLy8KKyAgICAvLyBleGFtcGxlIGNvZGU6IGV4dGVu
c2lvbkJlaGF2aW9yWyJ0ZXN0Il0gPSBFQmhEaXNhYmxlOyAvLyB3aGVyZSAidGVzdCIgaXMgdGhl
IG5hbWUgb2YgCisgICAgLy8gc3VwcG9ydGVkIGV4dGVuc2lvbgorICAgIC8vCisgICAgZXh0ZW5z
aW9uQmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSJdID0gRUJoUmVxdWlyZTsKKyAg
ICBleHRlbnNpb25CZWhhdmlvclsiR0xfM0RMX2FycmF5X29iamVjdHMiXSA9IEVCaERpc2FibGU7
Cit9CisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9U
TFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBp
ZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBD
b250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBhIFRMUyBpbmRleC4KKyAgICAvLworICAgIEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworICAgIAorICAgIGlm
IChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250
ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVl
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDAp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQ
YXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRU
aHJlYWRQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAobHBUaHJlYWREYXRhID09IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRv
IGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbHBUaHJlYWREYXRhLT5scEdsb2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAg
T1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBh
cnNlQ29udGV4dCgpCit7CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZv
ciBzcGVlZAorICAgIC8vCisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4
dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKworICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBH
bG9iYWxQYXJzZUNvbnRleHQ7Cit9CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dCgpCit7CisgICAg
aWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Cisg
ICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5k
ZXggbm90IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVh
ZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkp
OworICAgIGlmIChscFBhcnNlQ29udGV4dCkKKyAgICAgICAgZGVsZXRlIGxwUGFyc2VDb250ZXh0
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkK
K3sKKyAgICBPU19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsK
KworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRF
WCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNl
IENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5E
RVg7CisKKyAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7Cit9CkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKyNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisjZGVmaW5lIF9QQVJT
RVJfSEVMUEVSX0lOQ0xVREVEXworCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL2xvY2Fs
aW50ZXJtZWRpYXRlLmgiCisKK3N0cnVjdCBUTWF0cml4RmllbGRzIHsKKyAgICBib29sIHdob2xl
Um93OworICAgIGJvb2wgd2hvbGVDb2w7CisgICAgaW50IHJvdzsKKyAgICBpbnQgY29sOworfTsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBFQmhSZXF1aXJlLAorICAgIEVCaEVuYWJsZSwKKyAgICBF
QmhXYXJuLAorICAgIEVCaERpc2FibGUKK30gVEJlaGF2aW9yOworCitzdHJ1Y3QgVFByYWdtYSB7
CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9
CisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29sIGRlYnVnOworICAgIFRQcmFnbWFUYWJsZSBw
cmFnbWFUYWJsZTsKK307CisKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJs
ZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCisvLyB0aGV5IGNh
biBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCisvLwor
c3RydWN0IFRQYXJzZUNvbnRleHQgeworICAgIFRQYXJzZUNvbnRleHQoVFN5bWJvbFRhYmxlJiBz
eW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcywgVElu
Zm9TaW5rJiBpcykgOgorICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVybSksIHN5bWJvbFRh
YmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1YWdlKGwpLCBzcGVjKHMpLCB0cmVlUm9vdCgw
KSwKKyAgICAgICAgICAgIHJlY292ZXJlZEZyb21FcnJvcihmYWxzZSksIG51bUVycm9ycygwKSwg
bGV4QWZ0ZXJUeXBlKGZhbHNlKSwgbG9vcE5lc3RpbmdMZXZlbCgwKSwKKyAgICAgICAgICAgIGlu
VHlwZVBhcmVuKGZhbHNlKSwgY29udGV4dFByYWdtYSh0cnVlLCBmYWxzZSkgeyAgfQorICAgIFRJ
bnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0
cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhh
dCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBUSW5m
b1NpbmsmIGluZm9TaW5rOworICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlOyAgICAgICAgLy8gdmVy
dGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQorICAgIEVT
aFNwZWMgc3BlYzsgICAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24g
Y29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KKyAgICBUSW50ZXJtTm9kZSog
dHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVkCisgICAg
Ym9vbCByZWNvdmVyZWRGcm9tRXJyb3I7ICAgICAvLyB0cnVlIGlmIGEgcGFyc2UgZXJyb3IgaGFz
IG9jY3VycmVkLCBidXQgd2UgY29udGludWUgdG8gcGFyc2UKKyAgICBpbnQgbnVtRXJyb3JzOwor
ICAgIGJvb2wgbGV4QWZ0ZXJUeXBlOyAgICAgICAgICAgLy8gdHJ1ZSBpZiB3ZSd2ZSByZWNvZ25p
emVkIGEgdHlwZSwgc28gY2FuIG9ubHkgYmUgbG9va2luZyBmb3IgYW4gaWRlbnRpZmllcgorICAg
IGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAgLy8gMCBpZiBvdXRzaWRlIGFsbCBsb29wcwor
ICAgIGJvb2wgaW5UeXBlUGFyZW47ICAgICAgICAgICAgLy8gdHJ1ZSBpZiBpbiBwYXJlbnRoZXNl
cywgbG9va2luZyBvbmx5IGZvciBhbiBpZGVudGlmaWVyCisgICAgY29uc3QgVFR5cGUqIGN1cnJl
bnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQn
cyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCisgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsg
ICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCisgICAgVE1hcDxU
U3RyaW5nLCBUQmVoYXZpb3I+IGV4dGVuc2lvbkJlaGF2aW9yOworICAgIHZvaWQgaW5pdGlhbGl6
ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MsIGNvbnN0
IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpzelRva2VuLAorICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgYm9vbCByZXNlcnZlZEVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOworICAgIHZvaWQgcmVj
b3ZlcigpOworCisgICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50
IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7CisgICAgYm9vbCBwYXJzZU1hdHJp
eEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBpbnQg
bGluZSk7CisgICAgdm9pZCBhc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRT
dHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CisgICAgdm9pZCB1bmFyeU9wRXJyb3IoaW50IGxp
bmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpOworICAgIHZvaWQgYmluYXJ5T3BF
cnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdo
dCk7CisgICAgYm9vbCBwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHBy
ZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKTsKKyAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2soaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqKTsKKyAgICBib29sIGNvbnN0RXJy
b3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOworICAgIGJvb2wgaW50ZWdlckVycm9yQ2hlY2so
VEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbik7CisgICAgYm9vbCBnbG9iYWxF
cnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pOworICAg
IGJvb2wgY29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9kZSosIFRGdW5j
dGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKKyAgICBib29sIGFycmF5U2l6ZUVycm9yQ2hlY2so
aW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKKyAgICBib29sIGFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7CisgICAgYm9v
bCBhcnJheVR5cGVFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKKyAgICBi
b29sIGFycmF5RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgdm9pZEVycm9yQ2hl
Y2soaW50LCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIGJv
b2xFcnJvckNoZWNrKGludCwgY29uc3QgVEludGVybVR5cGVkKik7CisgICAgYm9vbCBib29sRXJy
b3JDaGVjayhpbnQsIGNvbnN0IFRQdWJsaWNUeXBlJik7CisgICAgYm9vbCBzYW1wbGVyRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFz
b24pOworICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3Qg
VFB1YmxpY1R5cGUmIHBUeXBlKTsKKyAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNr
KGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOworICAg
IGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKKyAgICBib29sIG5vbkluaXRDb25z
dEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlKTsKKyAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVu
dGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7CisgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soaW50
IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBU
VHlwZSogdHlwZSk7CisgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBjaGFyKik7CisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRG
dW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUlu
aXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5p
dGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDApOworICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9k
ZSk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0
IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24qLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJt
VHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBj
b25zdCBUVHlwZSYgdHlwZSk7CisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVElu
dGVybU5vZGUqLCBUVHlwZSosIGludCwgVFNvdXJjZUxvYywgYm9vbCBzdWJzZXQpOworICAgIFRJ
bnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSosIFRPcGVyYXRvciwgVElu
dGVybU5vZGUqLCBUU291cmNlTG9jLCBib29sIHN1YnNldCk7CisgICAgVEludGVybVR5cGVkKiBh
ZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VM
b2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAsIFRJbnRlcm1U
eXBlZCosIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUo
aW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSk7CisgICAgVElu
dGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIFRTb3Vy
Y2VMb2MpOworICAgIGJvb2wgYXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wqLCBUVHlwZSos
IGludCwgYm9vbCwgVFNvdXJjZUxvYyk7CisgICAgc3RydWN0IFRQcmFnbWEgY29udGV4dFByYWdt
YTsKKyAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CisgICAgYm9vbCBBZnRlckVPRjsKK307CisKK2lu
dCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQ
YXJzZUNvbnRleHQmKTsKK3ZvaWQgUGFSZXNlcnZlZFdvcmQoKTsKK2ludCBQYUlkZW50T3JUeXBl
KFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiwgVFN5bWJvbComKTsKK2ludCBQYVBhcnNlQ29t
bWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYpOwordm9pZCBzZXRJbml0aWFsU3RhdGUo
KTsKKwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVy
biBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5l
IEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0
cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9i
YWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJzZUNvbnRleHQ7CisKKyNlbmRpZiAvLyBfUEFS
U0VSX0hFTFBFUl9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvUG9vbEFsbG9jLmgiCisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQuaD4K
KyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFs
aXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCitPU19UTFNJ
bmRleCBQb29sSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKwordm9pZCBJbml0aWFsaXpl
R2xvYmFsUG9vbHMoKQoreworICAgIFRUaHJlYWRHbG9iYWxQb29scyogZ2xvYmFsUG9vbHM9IHN0
YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkp
OyAgICAKKyAgICBpZiAoZ2xvYmFsUG9vbHMpCisgICAgICAgIHJldHVybjsKKworICAgIFRQb29s
QWxsb2NhdG9yICpnbG9iYWxQb29sQWxsb2NhdG9yID0gbmV3IFRQb29sQWxsb2NhdG9yKHRydWUp
OworCisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWREYXRhID0gbmV3IFRUaHJlYWRHbG9i
YWxQb29scygpOworICAgIAorICAgIHRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBn
bG9iYWxQb29sQWxsb2NhdG9yOworICAgICAgICAKKyAgICBPU19TZXRUTFNWYWx1ZShQb29sSW5k
ZXgsIHRocmVhZERhdGEpOyAgICAgCisgICAgZ2xvYmFsUG9vbEFsbG9jYXRvci0+cHVzaCgpOwor
fQorCit2b2lkIEZyZWVHbG9iYWxQb29scygpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgYWxsb2Nh
dGVkIG1lbW9yeSBmb3IgdGhpcyB0aHJlYWQuCisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiBnbG9i
YWxQb29scz0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUo
UG9vbEluZGV4KSk7ICAgIAorICAgIGlmICghZ2xvYmFsUG9vbHMpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnBvcEFsbCgpOworICAgIGRlbGV0ZSAmR2xv
YmFsUG9vbEFsbG9jYXRvcjsgICAgICAgCisgICAgZGVsZXRlIGdsb2JhbFBvb2xzOworfQorCiti
b29sIEluaXRpYWxpemVQb29sSW5kZXgoKQoreworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4
LgorICAgIGlmICgoUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpKSA9PSBPU19JTlZBTElE
X1RMU19JTkRFWCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgRnJlZVBvb2xJbmRleCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgVExTIGluZGV4
LgorICAgIE9TX0ZyZWVUTFNJbmRleChQb29sSW5kZXgpOworfQorCitUUG9vbEFsbG9jYXRvciYg
R2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCit7CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJl
YWREYXRhID0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUo
UG9vbEluZGV4KSk7CisKKyAgICByZXR1cm4gKnRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0
b3I7Cit9CisKK3ZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihUUG9vbEFsbG9jYXRvciog
cG9vbEFsbG9jYXRvcikKK3sKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBz
dGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgp
KTsKKworICAgIHRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBwb29sQWxsb2NhdG9y
OworfQorCisvLworLy8gSW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBUUG9vbEFs
bG9jYXRvciBjbGFzcywgd2hpY2gKKy8vIGlzIGRvY3VtZW50ZWQgaW4gUG9vbEFsbG9jLmguCisv
LworVFBvb2xBbGxvY2F0b3I6OlRQb29sQWxsb2NhdG9yKGJvb2wgZywgaW50IGdyb3d0aEluY3Jl
bWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQpIDogCisgICAgZ2xvYmFsKGcpLAorICAgIHBh
Z2VTaXplKGdyb3d0aEluY3JlbWVudCksCisgICAgYWxpZ25tZW50KGFsbG9jYXRpb25BbGlnbm1l
bnQpLAorICAgIGZyZWVMaXN0KDApLAorICAgIGluVXNlTGlzdCgwKSwKKyAgICBudW1DYWxscygw
KQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBz
bWFsbGVyIHRoYW4gYWxsIGNvbW1vbgorICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCisgICAgLy8KKyAg
ICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCisgICAgICAgIHBhZ2VTaXplID0gNCoxMDI0OworCisg
ICAgLy8KKyAgICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBw
YWdlIG5lZWRzIHRvCisgICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgorICAg
IC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKKworICAgIC8vCisgICAgLy8g
QWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQgYW5kCisgICAg
Ly8gcG93ZXIgb2YgMi4KKyAgICAvLworICAgIHNpemVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lk
Kik7CisgICAgYWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKKyAgICBpZiAoYWxpZ25tZW50
IDwgbWluQWxpZ24pCisgICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOworICAgIHNpemVfdCBh
ID0gMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkKKyAgICAgICAgYSA8PD0gMTsKKyAgICBh
bGlnbm1lbnQgPSBhOworICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKKworICAgIC8vCisgICAg
Ly8gQWxpZ24gaGVhZGVyIHNraXAKKyAgICAvLworICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsK
KyAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgeworICAgICAgICBoZWFkZXJT
a2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7
CisgICAgfQorfQorCitUUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBp
ZiAoIWdsb2JhbCkgeworICAgICAgICAvLworICAgICAgICAvLyBUaGVuIHdlIGtub3cgdGhhdCB0
aGlzIG9iamVjdCBpcyBub3QgYmVpbmcgCisgICAgICAgIC8vIGFsbG9jYXRlZCBhZnRlciBvdGhl
ciwgZ2xvYmFsbHkgc2NvcGVkIG9iamVjdHMKKyAgICAgICAgLy8gdGhhdCBkZXBlbmQgb24gaXQu
ICBTbyB3ZSBjYW4gZGVsZXRlIHRoZSAiaW4gdXNlIiBtZW1vcnkuCisgICAgICAgIC8vCisgICAg
ICAgIHdoaWxlIChpblVzZUxpc3QpIHsKKyAgICAgICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVz
ZUxpc3QtPm5leHRQYWdlOworICAgICAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAg
ICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7Cisg
ICAgICAgICAgICBpblVzZUxpc3QgPSBuZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBmcmVlIGxpc3QgbWVtb3J5IC0gaXQgY2FuJ3QgYmUg
YmVpbmcKKyAgICAvLyAoY29ycmVjdGx5KSByZWZlcmVuY2VkLCB3aGV0aGVyIHRoZSBwb29sIGFs
bG9jYXRvciB3YXMKKyAgICAvLyBnbG9iYWwgb3Igbm90LiAgV2Ugc2hvdWxkIG5vdCBjaGVjayB0
aGUgZ3VhcmQgYmxvY2tzCisgICAgLy8gaGVyZSwgYmVjYXVzZSB3ZSBkaWQgaXQgYWxyZWFkeSB3
aGVuIHRoZSBibG9jayB3YXMKKyAgICAvLyBwbGFjZWQgaW50byB0aGUgZnJlZSBsaXN0LgorICAg
IC8vCisgICAgd2hpbGUgKGZyZWVMaXN0KSB7CisgICAgICAgIHRIZWFkZXIqIG5leHQgPSBmcmVl
TGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIq
PihmcmVlTGlzdCk7CisgICAgICAgIGZyZWVMaXN0ID0gbmV4dDsKKyAgICB9Cit9CisKKy8vIFN1
cHBvcnQgTVNWQysrIDYuMAorY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRC
bG9ja0JlZ2luVmFsID0gMHhmYjsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1
YXJkQmxvY2tFbmRWYWwgICA9IDB4ZmU7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9u
Ojp1c2VyRGF0YUZpbGwgICAgICAgPSAweGNkOworCisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAg
Y29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDE2OworI2Vsc2UKKyAg
ICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMDsKKyNlbmRpZgor
CisvLworLy8gQ2hlY2sgYSBzaW5nbGUgZ3VhcmQgYmxvY2sgZm9yIGRhbWFnZQorLy8KK3ZvaWQg
VEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5z
aWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0Cit7CisgICAgZm9yIChz
aXplX3QgeCA9IDA7IHggPCBndWFyZEJsb2NrU2l6ZTsgeCsrKSB7CisgICAgICAgIGlmIChibG9j
a01lbVt4XSAhPSB2YWwpIHsKKyAgICAgICAgICAgIGNoYXIgYXNzZXJ0TXNnWzgwXTsKKworICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhlIGFzc2VydCBtZXNzYWdlLiAgSXQncyBoZXJl
IGp1c3QgdG8gYmUgaGVscGZ1bC4KKyAgICAgICAgICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9v
bEFsbG9jOiBEYW1hZ2UgJXMgJXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAg
ICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7CisgICAgICAgICAgICBhc3NlcnQo
MCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3VhcmQgYmxvY2siKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKK3sKKyAgICB0QWxsb2NTdGF0
ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OworCisgICAgc3RhY2su
cHVzaF9iYWNrKHN0YXRlKTsKKyAgICAgICAgCisgICAgLy8KKyAgICAvLyBJbmRpY2F0ZSB0aGVy
ZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIGN1cnJl
bnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Cit9CisKKy8vCisvLyBEbyBhIG1hc3MtZGVhbGxvY2F0
aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhhdCBoYXZlIG9jY3Vy
cmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCisvLyBsYXN0IHBvcCgpLCBv
ciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24uCisvLworLy8gVGhlIGRlYWxsb2NhdGVkIHBh
Z2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgorLy8KK3ZvaWQgVFBvb2xBbGxv
Y2F0b3I6OnBvcCgpCit7CisgICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKKyAgICBjdXJyZW50
UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7CisKKyAgICB3aGlsZSAoaW5Vc2VMaXN0
ICE9IHBhZ2UpIHsKKyAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0
aW9uIGxpc3QKKyAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAgICAgICAKKyAgICAg
ICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaWYg
KGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKKyAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKKyAgICAgICAgICAgIGZyZWVMaXN0ID0g
aW5Vc2VMaXN0OworICAgICAgICB9CisgICAgICAgIGluVXNlTGlzdCA9IG5leHRJblVzZTsKKyAg
ICB9CisKKyAgICBzdGFjay5wb3BfYmFjaygpOworfQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxs
b2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBv
Y2N1cnJlZC4KKy8vCit2b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQoreworICAgIHdoaWxl
IChzdGFjay5zaXplKCkgPiAwKQorICAgICAgICBwb3AoKTsKK30KKwordm9pZCogVFBvb2xBbGxv
Y2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRlcykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgdXNp
bmcgZ3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBieQorICAgIC8v
IHRoZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlz
IGhvdworICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlv
blNpemUgaXMgdGhlIHRvdGFsCisgICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAg
SW4gcmVsZWFzZSBidWlsZCwKKyAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBn
ZXRzIG9wdGltaXplZCBhd2F5LgorICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0
aW9uOjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7CisgICAgCisgICAgLy8KKyAgICAvLyBKdXN0
IGtlZXAgc29tZSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgorICAgIC8vCisgICAgKytudW1DYWxs
czsKKyAgICB0b3RhbEJ5dGVzICs9IG51bUJ5dGVzOworCisgICAgLy8KKyAgICAvLyBEbyB0aGUg
YWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBmaXJzdCwgZm9yIGVmZmljaWVuY3kuCisgICAg
Ly8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRvIGJlIGlubGluZSBzb21ldGltZS4KKyAgICAv
LworICAgIGlmIChjdXJyZW50UGFnZU9mZnNldCArIGFsbG9jYXRpb25TaXplIDw9IHBhZ2VTaXpl
KSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNhZmUgdG8gYWxsb2NhdGUgZnJvbSBjdXJyZW50
UGFnZU9mZnNldC4KKyAgICAgICAgLy8KKyAgICAgICAgdW5zaWduZWQgY2hhciogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBjdXJyZW50UGFn
ZU9mZnNldDsKKyAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgKz0gYWxsb2NhdGlvblNpemU7Cisg
ICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1cnJlbnRQYWdlT2Zmc2V0ICsgYWxpZ25tZW50
TWFzaykgJiB+YWxpZ25tZW50TWFzazsKKworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9j
YXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5dGVzKTsKKyAgICB9CisKKyAgICBpZiAoYWxs
b2NhdGlvblNpemUgKyBoZWFkZXJTa2lwID4gcGFnZVNpemUpIHsKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRpb24uICBEb24ndCBtaXggdGhlc2Ugd2l0aCB0
aGUgb3RoZXJzLgorICAgICAgICAvLyBUaGUgT1MgaXMgZWZmaWNpZW50IGFuZCBhbGxvY2F0aW5n
IGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4KKyAgICAgICAgLy8KKyAgICAgICAgc2l6ZV90
IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25TaXplICsgaGVhZGVyU2tpcDsKKyAgICAgICAg
dEhlYWRlciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltu
dW1CeXRlc1RvQWxsb2NdKTsKKyAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBo
ZWFkZXIKKyAgICAgICAgbmV3KG1lbW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIChudW1CeXRlc1Rv
QWxsb2MgKyBwYWdlU2l6ZSAtIDEpIC8gcGFnZVNpemUpOworICAgICAgICBpblVzZUxpc3QgPSBt
ZW1vcnk7CisKKyAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsgIC8vIG1ha2Ug
bmV4dCBhbGxvY2F0aW9uIGNvbWUgZnJvbSBhIG5ldyBwYWdlCisKKyAgICAgICAgLy8gTm8gZ3Vh
cmQgYmxvY2tzIGZvciBtdWx0aS1wYWdlIGFsbG9jYXRpb25zICh5ZXQpCisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWVt
b3J5KSArIGhlYWRlclNraXApOworICAgIH0KKworICAgIC8vCisgICAgLy8gTmVlZCBhIHNpbXBs
ZSBwYWdlIHRvIGFsbG9jYXRlIGZyb20uCisgICAgLy8KKyAgICB0SGVhZGVyKiBtZW1vcnk7Cisg
ICAgaWYgKGZyZWVMaXN0KSB7CisgICAgICAgIG1lbW9yeSA9IGZyZWVMaXN0OworICAgICAgICBm
cmVlTGlzdCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1v
cnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW3BhZ2VTaXplXSk7Cisg
ICAgICAgIGlmIChtZW1vcnkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCisgICAgbmV3KG1l
bW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIDEpOworICAgIGluVXNlTGlzdCA9IG1lbW9yeTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBjaGFyKiByZXQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIgKj4oaW5Vc2VMaXN0KSArIGhlYWRlclNraXA7CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSAo
aGVhZGVyU2tpcCArIGFsbG9jYXRpb25TaXplICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50
TWFzazsKKworICAgIHJldHVybiBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxpc3QsIHJldCwg
bnVtQnl0ZXMpOworfQorCisKKy8vCisvLyBDaGVjayBhbGwgYWxsb2NhdGlvbnMgaW4gYSBsaXN0
IGZvciBkYW1hZ2UgYnkgY2FsbGluZyBjaGVjayBvbiBlYWNoLgorLy8KK3ZvaWQgVEFsbG9jYXRp
b246OmNoZWNrQWxsb2NMaXN0KCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IFRBbGxvY2F0aW9u
KiBhbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPnByZXZBbGxvYykKKyAg
ICAgICAgYWxsb2MtPmNoZWNrKCk7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI5NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfUE9PTEFMTE9D
X0lOQ0xVREVEXworI2RlZmluZSBfUE9PTEFMTE9DX0lOQ0xVREVEXworCisjaWZkZWYgX0RFQlVH
CisjZGVmaW5lIEdVQVJEX0JMT0NLUyAgLy8gZGVmaW5lIHRvIGVuYWJsZSBndWFyZCBibG9jayBz
YW5pdHkgY2hlY2tpbmcKKyNlbmRpZgorCisvLworLy8gVGhpcyBoZWFkZXIgZGVmaW5lcyBhbiBh
bGxvY2F0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBlZmZpY2llbnRseQorLy8gYWxsb2NhdGUgYSBs
YXJnZSBudW1iZXIgb2Ygc21hbGwgcmVxdWVzdHMgZm9yIGhlYXAgbWVtb3J5LCB3aXRoIHRoZSAK
Ky8vIGludGVudGlvbiB0aGF0IHRoZXkgYXJlIG5vdCBpbmRpdmlkdWFsbHkgZGVhbGxvY2F0ZWQs
IGJ1dCByYXRoZXIgCisvLyBjb2xsZWN0aXZlbHkgZGVhbGxvY2F0ZWQgYXQgb25lIHRpbWUuCisv
LworLy8gVGhpcyBzaW11bHRhbmVvdXNseQorLy8KKy8vICogTWFrZXMgZWFjaCBpbmRpdmlkdWFs
IGFsbG9jYXRpb24gbXVjaCBtb3JlIGVmZmljaWVudDsgdGhlCisvLyAgICAgdHlwaWNhbCBhbGxv
Y2F0aW9uIGlzIHRyaXZpYWwuCisvLyAqIENvbXBsZXRlbHkgYXZvaWRzIHRoZSBjb3N0IG9mIGRv
aW5nIGluZGl2aWR1YWwgZGVhbGxvY2F0aW9uLgorLy8gKiBTYXZlcyB0aGUgdHJvdWJsZSBvZiB0
cmFja2luZyBkb3duIGFuZCBwbHVnZ2luZyBhIGxhcmdlIGNsYXNzIG9mIGxlYWtzLgorLy8KKy8v
IEluZGl2aWR1YWwgY2xhc3NlcyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHN1cHBseWluZyB0
aGVpciBvd24KKy8vIG5ldyBhbmQgZGVsZXRlIG1ldGhvZHMuCisvLworLy8gU1RMIGNvbnRhaW5l
cnMgY2FuIHVzZSB0aGlzIGFsbG9jYXRvciBieSB1c2luZyB0aGUgcG9vbF9hbGxvY2F0b3IKKy8v
IGNsYXNzIGFzIHRoZSBhbGxvY2F0b3IgKHNlY29uZCkgdGVtcGxhdGUgYXJndW1lbnQuCisvLwor
CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisvLyBJZiB3ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCB3ZSBtdXN0IHRyYWNrIGVh
Y2ggaW5kaXZ1YWwKKy8vIGFsbG9jYXRpb24uICBJZiB3ZSBhcmVuJ3QgdXNpbmcgZ3VhcmQgYmxv
Y2tzLCB0aGVzZQorLy8gbmV2ZXIgZ2V0IGluc3RhbnRpYXRlZCwgc28gd29uJ3QgaGF2ZSBhbnkg
aW1wYWN0LgorLy8gCisKK2NsYXNzIFRBbGxvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBUQWxsb2Nh
dGlvbihzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hhciogbWVtLCBUQWxsb2NhdGlvbiogcHJldiA9
IDApIDoKKyAgICAgICAgc2l6ZShzaXplKSwgbWVtKG1lbSksIHByZXZBbGxvYyhwcmV2KSB7Cisg
ICAgICAgIC8vIEFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQ6CisgICAgICAgIC8vICAgIFthbGxv
Y2F0aW9uSGVhZGVyXVtpbml0aWFsR3VhcmRCbG9ja11bdXNlckRhdGFdW2ZpbmFsR3VhcmRCbG9j
a10KKyAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSBjbGVhbmVyIHdpdGggaWYgKGd1YXJkQmxvY2tT
aXplKS4uLiwgYnV0IHRoYXQKKyAgICAgICAgLy8gbWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHdh
cm5pbmdzIGFib3V0IDAgbGVuZ3RoIG1lbXNldHMsCisgICAgICAgIC8vIGV2ZW4gd2l0aCB0aGUg
aWYoKSBwcm90ZWN0aW5nIHRoZW0uCisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgIG1lbXNl
dChwcmVHdWFyZCgpLCBndWFyZEJsb2NrQmVnaW5WYWwsIGd1YXJkQmxvY2tTaXplKTsKKyAgICAg
ICAgbWVtc2V0KGRhdGEoKSwgICAgICB1c2VyRGF0YUZpbGwsICAgICAgIHNpemUpOworICAgICAg
ICBtZW1zZXQocG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgZ3VhcmRCbG9ja1NpemUp
OworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBjaGVjaygpIGNvbnN0IHsKKyAgICAgICAgY2hl
Y2tHdWFyZEJsb2NrKHByZUd1YXJkKCksICBndWFyZEJsb2NrQmVnaW5WYWwsICJiZWZvcmUiKTsK
KyAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBndWFyZEJsb2NrRW5kVmFsLCAg
ICJhZnRlciIpOworICAgIH0KKworICAgIHZvaWQgY2hlY2tBbGxvY0xpc3QoKSBjb25zdDsKKwor
ICAgIC8vIFJldHVybiB0b3RhbCBzaXplIG5lZWRlZCB0byBhY2NvbW9kYXRlIHVzZXIgYnVmZmVy
IG9mICdzaXplJywKKyAgICAvLyBwbHVzIG91ciB0cmFja2luZyBkYXRhLgorICAgIGlubGluZSBz
dGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBzaXplKSB7CisgICAgICAgIHJldHVy
biBzaXplICsgMiAqIGd1YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgpOworICAgIH0KKworICAg
IC8vIE9mZnNldCBmcm9tIHN1cnJvdW5kaW5nIGJ1ZmZlciB0byBnZXQgdG8gdXNlciBkYXRhIGJ1
ZmZlci4KKyAgICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGNoYXIqIG9mZnNldEFsbG9jYXRpb24o
dW5zaWduZWQgY2hhciogbSkgeworICAgICAgICByZXR1cm4gbSArIGd1YXJkQmxvY2tTaXplICsg
aGVhZGVyU2l6ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrR3VhcmRCbG9j
ayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIq
IGxvY1RleHQpIGNvbnN0OworCisgICAgLy8gRmluZCBvZmZzZXRzIHRvIHByZSBhbmQgcG9zdCBn
dWFyZCBibG9ja3MsIGFuZCB1c2VyIGRhdGEgYnVmZmVyCisgICAgdW5zaWduZWQgY2hhciogcHJl
R3VhcmQoKSAgY29uc3QgeyByZXR1cm4gbWVtICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgdW5zaWdu
ZWQgY2hhciogZGF0YSgpICAgICAgY29uc3QgeyByZXR1cm4gcHJlR3VhcmQoKSArIGd1YXJkQmxv
Y2tTaXplOyB9CisgICAgdW5zaWduZWQgY2hhciogcG9zdEd1YXJkKCkgY29uc3QgeyByZXR1cm4g
ZGF0YSgpICsgc2l6ZTsgfQorCisgICAgc2l6ZV90IHNpemU7ICAgICAgICAgICAgICAgICAgLy8g
c2l6ZSBvZiB0aGUgdXNlciBkYXRhIGFyZWEKKyAgICB1bnNpZ25lZCBjaGFyKiBtZW07ICAgICAg
ICAgICAvLyBiZWdpbm5pbmcgb2Ygb3VyIGFsbG9jYXRpb24gKHB0cyB0byBoZWFkZXIpCisgICAg
VEFsbG9jYXRpb24qIHByZXZBbGxvYzsgICAgICAgLy8gcHJpb3IgYWxsb2NhdGlvbiBpbiB0aGUg
Y2hhaW4KKworICAgIC8vIFN1cHBvcnQgTVNWQysrIDYuMAorICAgIGNvbnN0IHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGd1YXJkQmxvY2tCZWdpblZhbDsKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQg
Y2hhciBndWFyZEJsb2NrRW5kVmFsOworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIHVz
ZXJEYXRhRmlsbDsKKworICAgIGNvbnN0IHN0YXRpYyBzaXplX3QgZ3VhcmRCbG9ja1NpemU7Cisj
aWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgp
IHsgcmV0dXJuIHNpemVvZihUQWxsb2NhdGlvbik7IH0KKyNlbHNlCisgICAgaW5saW5lIHN0YXRp
YyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorfTsKKworLy8KKy8v
IFRoZXJlIGFyZSBzZXZlcmFsIHN0YWNrcy4gIE9uZSBpcyB0byB0cmFjayB0aGUgcHVzaGluZyBh
bmQgcG9wcGluZworLy8gb2YgdGhlIHVzZXIsIGFuZCBub3QgeWV0IGltcGxlbWVudGVkLiAgVGhl
IG90aGVycyBhcmUgc2ltcGx5IGEgCisvLyByZXBvc2l0b3JpZXMgb2YgZnJlZSBwYWdlcyBvciB1
c2VkIHBhZ2VzLgorLy8KKy8vIFBhZ2Ugc3RhY2tzIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aCBh
IHNpbXBsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZworLy8gb2YgZWFjaCBhbGxvY2F0aW9uIG9i
dGFpbmVkIGZyb20gdGhlIHVuZGVybHlpbmcgT1MuICBNdWx0aS1wYWdlIGFsbG9jYXRpb25zCisv
LyBhcmUgcmV0dXJuZWQgdG8gdGhlIE9TLiAgSW5kaXZpZHVhbCBwYWdlIGFsbG9jYXRpb25zIGFy
ZSBrZXB0IGZvciBmdXR1cmUKKy8vIHJlLXVzZS4KKy8vCisvLyBUaGUgInBhZ2Ugc2l6ZSIgdXNl
ZCBpcyBub3QsIG5vciBtdXN0IGl0IG1hdGNoLCB0aGUgdW5kZXJseWluZyBPUworLy8gcGFnZSBz
aXplLiAgQnV0LCBoYXZpbmcgaXQgYmUgYWJvdXQgdGhhdCBzaXplIG9yIGVxdWFsIHRvIGEgc2V0
IG9mIAorLy8gcGFnZXMgaXMgbGlrZWx5IG1vc3Qgb3B0aW1hbC4KKy8vCitjbGFzcyBUUG9vbEFs
bG9jYXRvciB7CitwdWJsaWM6CisgICAgVFBvb2xBbGxvY2F0b3IoYm9vbCBnbG9iYWwgPSBmYWxz
ZSwgaW50IGdyb3d0aEluY3JlbWVudCA9IDgqMTAyNCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQg
PSAxNik7CisKKyAgICAvLworICAgIC8vIERvbid0IGNhbGwgdGhlIGRlc3RydWN0b3IganVzdCB0
byBmcmVlIHVwIHRoZSBtZW1vcnksIGNhbGwgcG9wKCkKKyAgICAvLworICAgIH5UUG9vbEFsbG9j
YXRvcigpOworCisgICAgLy8KKyAgICAvLyBDYWxsIHB1c2goKSB0byBlc3RhYmxpc2ggYSBuZXcg
cGxhY2UgdG8gcG9wIG1lbW9yeSB0b28uICBEb2VzIG5vdAorICAgIC8vIGhhdmUgdG8gYmUgY2Fs
bGVkIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KKyAgICAvLworICAgIHZvaWQgcHVzaCgpOworCisg
ICAgLy8KKyAgICAvLyBDYWxsIHBvcCgpIHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgc2lu
Y2UgdGhlIGxhc3QgY2FsbCB0byBwdXNoKCksCisgICAgLy8gb3IgaWYgbm8gbGFzdCBjYWxsIHRv
IHB1c2gsIGZyZWVzIGFsbCBtZW1vcnkgc2luY2UgZmlyc3QgYWxsb2NhdGlvbi4KKyAgICAvLwor
ICAgIHZvaWQgcG9wKCk7CisKKyAgICAvLworICAgIC8vIENhbGwgcG9wQWxsKCkgdG8gZnJlZSBh
bGwgbWVtb3J5IGFsbG9jYXRlZC4KKyAgICAvLworICAgIHZvaWQgcG9wQWxsKCk7CisKKyAgICAv
LworICAgIC8vIENhbGwgYWxsb2NhdGUoKSB0byBhY3R1YWxseSBhY3F1aXJlIG1lbW9yeS4gIFJl
dHVybnMgMCBpZiBubyBtZW1vcnkKKyAgICAvLyBhdmFpbGFibGUsIG90aGVyd2lzZSBhIHByb3Bl
cmx5IGFsaWduZWQgcG9pbnRlciB0byAnbnVtQnl0ZXMnIG9mIG1lbW9yeS4KKyAgICAvLworICAg
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBudW1CeXRlcyk7CisKKyAgICAvLworICAgIC8vIFRoZXJl
IGlzIG5vIGRlYWxsb2NhdGUuICBUaGUgcG9pbnQgb2YgdGhpcyBjbGFzcyBpcyB0aGF0CisgICAg
Ly8gZGVhbGxvY2F0aW9uIGNhbiBiZSBza2lwcGVkIGJ5IHRoZSB1c2VyIG9mIGl0LCBhcyB0aGUg
bW9kZWwKKyAgICAvLyBvZiB1c2UgaXMgdG8gc2ltdWx0YW5lb3VzbHkgZGVhbGxvY2F0ZSBldmVy
eXRoaW5nIGF0IG9uY2UKKyAgICAvLyBieSBjYWxsaW5nIHBvcCgpLCBhbmQgdG8gbm90IGhhdmUg
dG8gc29sdmUgbWVtb3J5IGxlYWsgcHJvYmxlbXMuCisgICAgLy8KKworcHJvdGVjdGVkOgorICAg
IGZyaWVuZCBzdHJ1Y3QgdEhlYWRlcjsKKyAgICAKKyAgICBzdHJ1Y3QgdEhlYWRlciB7CisgICAg
ICAgIHRIZWFkZXIodEhlYWRlciogbmV4dFBhZ2UsIHNpemVfdCBwYWdlQ291bnQpIDoKKyNpZmRl
ZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9uKDApLAorI2VuZGlmCisg
ICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCisgICAgICAgICAgICBwYWdlQ291bnQocGFn
ZUNvdW50KSB7IH0KKworICAgICAgICB+dEhlYWRlcigpIHsKKyNpZmRlZiBHVUFSRF9CTE9DS1MK
KyAgICAgICAgICAgIGlmIChsYXN0QWxsb2NhdGlvbikKKyAgICAgICAgICAgICAgICBsYXN0QWxs
b2NhdGlvbi0+Y2hlY2tBbGxvY0xpc3QoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAg
dEhlYWRlciogbmV4dFBhZ2U7CisgICAgICAgIHNpemVfdCBwYWdlQ291bnQ7CisjaWZkZWYgR1VB
UkRfQkxPQ0tTCisgICAgICAgIFRBbGxvY2F0aW9uKiBsYXN0QWxsb2NhdGlvbjsKKyNlbmRpZgor
ICAgIH07CisKKyAgICBzdHJ1Y3QgdEFsbG9jU3RhdGUgeworICAgICAgICBzaXplX3Qgb2Zmc2V0
OworICAgICAgICB0SGVhZGVyKiBwYWdlOworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjx0QWxsb2NTdGF0ZT4gdEFsbG9jU3RhY2s7CisKKyAgICAvLyBUcmFjayBhbGxvY2F0aW9ucyBp
ZiBhbmQgb25seSBpZiB3ZSdyZSB1c2luZyBndWFyZCBibG9ja3MKKyAgICB2b2lkKiBpbml0aWFs
aXplQWxsb2NhdGlvbih0SGVhZGVyKiBibG9jaywgdW5zaWduZWQgY2hhciogbWVtb3J5LCBzaXpl
X3QgbnVtQnl0ZXMpIHsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgbmV3KG1lbW9yeSkg
VEFsbG9jYXRpb24obnVtQnl0ZXMsIG1lbW9yeSwgYmxvY2stPmxhc3RBbGxvY2F0aW9uKTsKKyAg
ICAgICAgYmxvY2stPmxhc3RBbGxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxUQWxsb2NhdGlv
bio+KG1lbW9yeSk7CisjZW5kaWYKKyAgICAgICAgLy8gVGhpcyBpcyBvcHRpbWl6ZWQgZW50aXJl
bHkgYXdheSBpZiBHVUFSRF9CTE9DS1MgaXMgbm90IGRlZmluZWQuCisgICAgICAgIHJldHVybiBU
QWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2NhdGlvbihtZW1vcnkpOworICAgIH0KKworICAgIGJvb2wg
Z2xvYmFsOyAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIGds
b2JhbGx5IHNjb3BlZAorICAgIHNpemVfdCBwYWdlU2l6ZTsgICAgICAgIC8vIGdyYW51bGFyaXR5
IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKKyAgICBzaXplX3QgYWxpZ25tZW50OyAgICAgICAv
LyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVkIGF0IAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3JhbnVsYXJpdHksIHdoaWNoIHdpbGwgYmUgYSBw
b3dlciBvZiAyCisgICAgc2l6ZV90IGFsaWdubWVudE1hc2s7CisgICAgc2l6ZV90IGhlYWRlclNr
aXA7ICAgICAgLy8gYW1vdW50IG9mIG1lbW9yeSB0byBza2lwIHRvIG1ha2Ugcm9vbSBmb3IgdGhl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBoZWFkZXIgKGJhc2ljYWxseSwg
c2l6ZSBvZiBoZWFkZXIsIHJvdW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgIHVwIHRvIG1ha2UgaXQgYWxpZ25lZAorICAgIHNpemVfdCBjdXJyZW50UGFnZU9mZnNldDsg
IC8vIG5leHQgb2Zmc2V0IGluIHRvcCBvZiBpblVzZUxpc3QgdG8gYWxsb2NhdGUgZnJvbQorICAg
IHRIZWFkZXIqIGZyZWVMaXN0OyAgICAgIC8vIGxpc3Qgb2YgcG9wcGVkIG1lbW9yeQorICAgIHRI
ZWFkZXIqIGluVXNlTGlzdDsgICAgIC8vIGxpc3Qgb2YgYWxsIG1lbW9yeSBjdXJyZW50bHkgYmVp
bmcgdXNlZAorICAgIHRBbGxvY1N0YWNrIHN0YWNrOyAgICAgIC8vIHN0YWNrIG9mIHdoZXJlIHRv
IGFsbG9jYXRlIGZyb20sIHRvIHBhcnRpdGlvbiBwb29sCisKKyAgICBpbnQgbnVtQ2FsbHM7ICAg
ICAgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5nIHN0YXRpc3RpYworICAgIHNpemVfdCB0b3Rh
bEJ5dGVzOyAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGljCitwcml2YXRlOgor
ICAgIFRQb29sQWxsb2NhdG9yJiBvcGVyYXRvcj0oY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8v
IGRvbnQgYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRQb29sQWxsb2NhdG9yKGNvbnN0
IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFsbG93IGRlZmF1bHQgY29weSBjb25zdHJ1Y3Rv
cgorfTsKKworCisvLworLy8gVGhlcmUgY291bGQgcG90ZW50aWFsbHkgYmUgbWFueSBwb29scyB3
aXRoIHBvcHMgaGFwcGVuaW5nIGF0CisvLyBkaWZmZXJlbnQgdGltZXMuICBCdXQgYSBzaW1wbGUg
dXNlIGlzIHRvIGhhdmUgYSBnbG9iYWwgcG9wCisvLyB3aXRoIGV2ZXJ5b25lIHVzaW5nIHRoZSBz
YW1lIGdsb2JhbCBhbGxvY2F0b3IuCisvLwordHlwZWRlZiBUUG9vbEFsbG9jYXRvciogUG9vbEFs
bG9jYXRvclBvaW50ZXI7CitleHRlcm4gVFBvb2xBbGxvY2F0b3ImIEdldEdsb2JhbFBvb2xBbGxv
Y2F0b3IoKTsKKyNkZWZpbmUgR2xvYmFsUG9vbEFsbG9jYXRvciBHZXRHbG9iYWxQb29sQWxsb2Nh
dG9yKCkKKworCitzdHJ1Y3QgVFRocmVhZEdsb2JhbFBvb2xzCit7CisgICAgVFBvb2xBbGxvY2F0
b3IqIGdsb2JhbFBvb2xBbGxvY2F0b3I7Cit9OworCit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0
b3JQdHIoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpOworCisvLworLy8gVGhpcyBTVEwg
Y29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2Nh
dG9yCisvLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVj
dG9yIGFuZCBtYXAuCisvLworLy8gSXQgd2lsbCB1c2UgdGhlIHBvb2xzIGZvciBhbGxvY2F0aW9u
LCBhbmQgbm90CisvLyBkbyBhbnkgZGVhbGxvY2F0aW9uLCBidXQgd2lsbCBzdGlsbCBkbyBkZXN0
cnVjdGlvbi4KKy8vCit0ZW1wbGF0ZTxjbGFzcyBUPgorY2xhc3MgcG9vbF9hbGxvY2F0b3Igewor
cHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBUKiBwb2ludGVyOworICAgIHR5cGVk
ZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKKyAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKKyAg
ICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIFQgdmFsdWVf
dHlwZTsKKworICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPiAKKyAgICBzdHJ1Y3QgcmViaW5kIHsK
KyAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxPdGhlcj4gb3RoZXI7CisgICAgfTsKKyAg
ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9CisgICAg
Y29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAm
eDsgfQorCisgICAgcG9vbF9hbGxvY2F0b3IoKSA6IGFsbG9jYXRvcihHbG9iYWxQb29sQWxsb2Nh
dG9yKSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihUUG9vbEFsbG9jYXRvciYgYSkgOiBhbGxvY2F0
b3IoYSkgeyB9CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHAp
IDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIE90aGVy
PgorICAgIHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBh
bGxvY2F0b3IocC5nZXRBbGxvY2F0b3IoKSkgeyB9CisKKyAgICBwb2ludGVyIGFsbG9jYXRlKHNp
emVfdHlwZSBuKSB7IAorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihn
ZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CisgICAgfQorICAgIHBvaW50
ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqKSB7IAorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6
ZW9mKFQpKSk7CisgICAgfQorCisgICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqLCBzaXplX3R5cGUp
IHsgfQorICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUpIHsgfQorCisgICAg
cG9pbnRlciBfQ2hhcmFsbG9jKHNpemVfdCBuKSB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICop
cCkgVCh2YWwpOyB9CisgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3Qg
eyByZXR1cm4gJmdldEFsbG9jYXRvcigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4g
JmdldEFsbG9jYXRvcigpICE9ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KKworICAgIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8g
c2l6ZW9mKFQpOyB9CisgICAgc2l6ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemU7IH0KKworICAgIHZvaWQgc2V0
QWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBhKSB7IGFsbG9jYXRvciA9ICphOyB9CisgICAgVFBv
b2xBbGxvY2F0b3ImIGdldEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcjsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVFBvb2xBbGxvY2F0b3ImIGFsbG9jYXRvcjsKK307CisKKyNlbmRp
ZiAvLyBfUE9PTEFMTE9DX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxp
ZmllckFsaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVy
QWxpdmUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFs
aXZlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCitjbGFzcyBUQWxpdmVUcmF2
ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVEFsaXZlVHJh
dmVyc2VyKFRRdWFsaWZpZXIgcSkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxz
ZSwgdHJ1ZSksIGZvdW5kKGZhbHNlKSwgcXVhbGlmaWVyKHEpCisgICAgeworICAgIH0KKworCWJv
b2wgd2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBm
b3VuZDsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKK307CisKKy8vCisvLyBSZXBvcnQgd2hldGhlciBvciBub3QgYSB2YXJpYWJs
ZSBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVyIHR5cGUKKy8vIGlzIGd1YXJhbnRlZWQgd3JpdHRlbi4g
IE5vdCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmCisvLyBpdCBpcyB3cml0dGVuIGNv
bmRpdGlvbmFsbHkuCisvLworLy8gPz8gSXQgZG9lcyBub3QgZG8gdGhpcyB3ZWxsIHlldCwgdGhp
cyBpcyBqdXN0IGEgcGxhY2UgaG9sZGVyCisvLyB0aGF0IHNpbXBseSBkZXRlcm1pbmVzIGlmIGl0
IHdhcyByZWZlcmVuY2UgYXQgYWxsLCBhbnl3aGVyZS4KKy8vCitib29sIFF1YWxpZmllcldyaXR0
ZW4oVEludGVybU5vZGUqIG5vZGUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIFRBbGl2
ZVRyYXZlcnNlciBpdChxdWFsaWZpZXIpOworCisgICAgaWYgKG5vZGUpCisgICAgICAgIG5vZGUt
PnRyYXZlcnNlKCZpdCk7CisKKyAgICByZXR1cm4gaXQud2FzRm91bmQoKTsKK30KKwordm9pZCBU
QWxpdmVUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAg
Ly8KKyAgICAvLyBJZiBpdCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IsIHJlY29yZCBpdC4KKyAg
ICAvLworICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBxdWFsaWZpZXIpCisgICAgICAg
IGZvdW5kID0gdHJ1ZTsKK30KKworYm9vbCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHByZVZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIGlmICh3YXNG
b3VuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2Rl
KiByb290LCBUUXVhbGlmaWVyKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCisK
Ky8vCisvLyBDb2RlIHRvIHJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUu
CisvLworCitjbGFzcyBSZW1vdmVUcmVlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1
YmxpYzoKKwlSZW1vdmVUcmVlKCkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1
ZSkKKwl7CisJfQorCitwcm90ZWN0ZWQ6CisJdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
Kik7CisJdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKwli
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisJYm9vbCB2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKwlib29sIHZpc2l0U2VsZWN0aW9u
KFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisJYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworfTsKKwordm9pZCBSZW1vdmVUcmVlOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQorCiti
b29sIFJlbW92ZVRyZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBu
b2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3Zl
VHJlZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAg
IGRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisJZGVs
ZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKwlkZWxldGUg
bm9kZTsKKworCXJldHVybiB0cnVlOworfQorCit2b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKK30K
KworLy8KKy8vIEVudHJ5IHBvaW50LgorLy8KK3ZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRl
cm1Ob2RlKiByb290KQoreworICAgIFJlbW92ZVRyZWUgaXQ7CisKKyAgICByb290LT50cmF2ZXJz
ZSgmaXQpOworfQorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK3ZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRl
cm1Ob2RlKik7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TSEhBTkRMRV9JTkNMVURFRF8KKyNkZWZpbmUg
X1NISEFORExFX0lOQ0xVREVEXworCisvLworLy8gTWFjaGluZSBpbmRlcGVuZGVudCBwYXJ0IG9m
IHRoZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMKKy8vIHNlbnQgYXMgU2hIYW5kbGUgdG8gdGhl
IGRyaXZlci4KKy8vCisvLyBUaGlzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNv
ZGUuCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBUQ29tcGlsZXI7CitjbGFzcyBUSW50ZXJtTm9k
ZTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVk
IHRvIHRoZSBkcml2ZXIuCisvLworY2xhc3MgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAg
VFNoSGFuZGxlQmFzZSgpIHsgfQorICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2UoKSB7IH0KKyAg
ICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIDA7IH0KK307CisK
Ky8vCisvLyBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVy
IHRvIGRlcml2ZSBmcm9tCisvLyBmb3IgbWFuYWdpbmcgb2JqZWN0IGNvZGUgZnJvbSB0aGUgY29t
cGlsZS4KKy8vCitjbGFzcyBUQ29tcGlsZXIgOiBwdWJsaWMgVFNoSGFuZGxlQmFzZSB7CitwdWJs
aWM6CisgICAgVENvbXBpbGVyKEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcykgOiBsYW5ndWFnZShs
KSwgc3BlYyhzKSB7IH0KKyAgICB2aXJ0dWFsIH5UQ29tcGlsZXIoKSB7IH0KKworICAgIEVTaExh
bmd1YWdlIGdldExhbmd1YWdlKCkgeyByZXR1cm4gbGFuZ3VhZ2U7IH0KKyAgICBFU2hTcGVjIGdl
dFNwZWMoKSB7IHJldHVybiBzcGVjOyB9CisgICAgdmlydHVhbCBUSW5mb1NpbmsmIGdldEluZm9T
aW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21waWxlKFRJ
bnRlcm1Ob2RlKiByb290KSA9IDA7CisKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21w
aWxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIFRJbmZvU2luayBpbmZvU2luazsKK3Byb3Rl
Y3RlZDoKKyAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZTsKKyAgICBFU2hTcGVjIHNwZWM7Cit9Owor
CisvLworLy8gVGhpcyBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBl
bmRlbnQgY29kZQorLy8gYW5kIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLgorLy8KKy8vIFRo
ZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlIHNob3VsZCBkZXJpdmUgZnJvbSB0aGUgY2xhc3Nlcwor
Ly8gYWJvdmUuIFRoZW4gQ29uc3RydWN0KigpIGFuZCBEZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5k
IAorLy8gZGVzdHJveSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFp
biB0aGUKKy8vIGFib3ZlIG1hY2hpbmUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24uCisvLworVENv
bXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSwgRVNoU3BlYyk7Cit2b2lkIERl
bGV0ZUNvbXBpbGVyKFRDb21waWxlciopOworCisjZW5kaWYgLy8gX1NISEFORExFX0lOQ0xVREVE
XwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBJbXBsZW1lbnQgdGhlIHRvcC1sZXZlbCBv
ZiBpbnRlcmZhY2UgdG8gdGhlIGNvbXBpbGVyLAorLy8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5n
LmgKKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL0luaXRpYWxpemUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9T
aEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKKy8vCisvLyBB
IHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsYW5ndWFnZS4gIEVhY2ggaGFzIGEgZGlmZmVyZW50Cisv
LyBzZXQgb2YgYnVpbHQtaW5zLCBhbmQgd2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGF0IGZyb20KKy8v
IGNvbXBpbGUgdG8gY29tcGlsZS4KKy8vCitUU3ltYm9sVGFibGUqIFN5bWJvbFRhYmxlc1tFU2hM
YW5nQ291bnRdOworCisKK1RQb29sQWxsb2NhdG9yKiBQZXJQcm9jZXNzR1BBID0gMDsKKy8vCisv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCisvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCisvLworCisv
LworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55
IG90aGVyCisvLyBjb21waWxlciBvcGVyYXRpb25zLgorLy8KK2ludCBTaEluaXRpYWxpemUoKQor
eworICAgIFRJbmZvU2luayBpbmZvU2luazsKKyAgICBib29sIHJldCA9IHRydWU7CisKKyAgICBp
ZiAoIUluaXRQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlciBwcm9jZXNzLiBJZiBpdHMgY2FsbGVkIGJ5IG11
bHRpcGxlIHRocmVhZHMsIHRoZW4gCisgICAgLy8gd2UgbmVlZCB0byBoYXZlIHRocmVhZCBzeW5j
aHJvbml6YXRpb24gY29kZSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHBlciBwcm9jZXNz
CisgICAgLy8gZ2xvYmFsIHBvb2wgYWxsb2NhdG9yCisgICAgaWYgKCFQZXJQcm9jZXNzR1BBKSB7
IAorICAgICAgICBUUG9vbEFsbG9jYXRvciAqYnVpbHRJblBvb2xBbGxvY2F0b3IgPSBuZXcgVFBv
b2xBbGxvY2F0b3IodHJ1ZSk7CisgICAgICAgIGJ1aWx0SW5Qb29sQWxsb2NhdG9yLT5wdXNoKCk7
CisgICAgICAgIFRQb29sQWxsb2NhdG9yKiBnUG9vbEFsbG9jYXRvciA9ICZHbG9iYWxQb29sQWxs
b2NhdG9yOworICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKGJ1aWx0SW5Qb29sQWxs
b2NhdG9yKTsKKworICAgICAgICBUU3ltYm9sVGFibGUgc3ltVGFibGVzW0VTaExhbmdDb3VudF07
CisgICAgICAgIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKDAsIGluZm9TaW5rLCBzeW1UYWJs
ZXMpOworCisgICAgICAgIFBlclByb2Nlc3NHUEEgPSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7
CisgICAgICAgIFBlclByb2Nlc3NHUEEtPnB1c2goKTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFs
bG9jYXRvclB0cihQZXJQcm9jZXNzR1BBKTsKKworICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFu
Z1ZlcnRleF0gPSBuZXcgVFN5bWJvbFRhYmxlOworICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFu
Z1ZlcnRleF0tPmNvcHlUYWJsZShzeW1UYWJsZXNbRVNoTGFuZ1ZlcnRleF0pOworICAgICAgICBT
eW1ib2xUYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAg
IFN5bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdLT5jb3B5VGFibGUoc3ltVGFibGVzW0VTaExh
bmdGcmFnbWVudF0pOworCisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoZ1Bvb2xB
bGxvY2F0b3IpOworCisgICAgICAgIHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XS5wb3AoKTsKKyAg
ICAgICAgc3ltVGFibGVzW0VTaExhbmdGcmFnbWVudF0ucG9wKCk7CisKKyAgICAgICAgYnVpbHRJ
blBvb2xBbGxvY2F0b3ItPnBvcEFsbCgpOworICAgICAgICBkZWxldGUgYnVpbHRJblBvb2xBbGxv
Y2F0b3I7ICAgICAgICAKKworICAgIH0KKworICAgIHJldHVybiByZXQgPyAxIDogMDsKK30KKwor
Ly8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIg
b2JqZWN0cy4KKy8vCisKK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYykKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNo
SGFuZGxlQmFzZSo+KENvbnN0cnVjdENvbXBpbGVyKGxhbmd1YWdlLCBzcGVjKSk7CisgICAgCisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVz
dHJ1Y3QoU2hIYW5kbGUgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRs
ZUJhc2UqPihoYW5kbGUpOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAg
ICAgRGVsZXRlQ29tcGlsZXIoYmFzZS0+Z2V0QXNDb21waWxlcigpKTsKK30KKworLy8KKy8vIENs
ZWFudXAgc3ltYm9sIHRhYmxlcworLy8KK2ludCBTaEZpbmFsaXplKCkKK3sgIAorICBpZiAoUGVy
UHJvY2Vzc0dQQSkgeworICAgIFBlclByb2Nlc3NHUEEtPnBvcEFsbCgpOworICAgIGRlbGV0ZSBQ
ZXJQcm9jZXNzR1BBOworICAgIFBlclByb2Nlc3NHUEEgPSAwOworICB9CisgIGZvciAoaW50IGkg
PSAwOyBpIDwgRVNoTGFuZ0NvdW50OyArK2kpIHsKKyAgICBkZWxldGUgU3ltYm9sVGFibGVzW2ld
OworICAgIFN5bWJvbFRhYmxlc1tpXSA9IDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2Jvb2wg
R2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3Vy
Y2VzLCBUSW5mb1NpbmsmIGluZm9TaW5rLCBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlcywgRVNo
TGFuZ3VhZ2UgbGFuZ3VhZ2UpCit7CisgICAgVEJ1aWx0SW5zIGJ1aWx0SW5zOworICAgIAorCWlm
IChyZXNvdXJjZXMpIHsKKwkJYnVpbHRJbnMuaW5pdGlhbGl6ZSgqcmVzb3VyY2VzKTsKKwkJSW5p
dGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJpbmdzKCksIGxhbmd1YWdl
LCBpbmZvU2luaywgcmVzb3VyY2VzLCBzeW1ib2xUYWJsZXMpOworCX0gZWxzZSB7CisJCWJ1aWx0
SW5zLmluaXRpYWxpemUoKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1
aWx0SW5TdHJpbmdzKCksIEVTaExhbmdWZXJ0ZXgsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJv
bFRhYmxlcyk7CisJCUluaXRpYWxpemVTeW1ib2xUYWJsZShidWlsdElucy5nZXRCdWlsdEluU3Ry
aW5ncygpLCBFU2hMYW5nRnJhZ21lbnQsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxl
cyk7CisJfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZVN5bWJvbFRh
YmxlKFRCdWlsdEluU3RyaW5ncyogQnVpbHRJblN0cmluZ3MsIEVTaExhbmd1YWdlIGxhbmd1YWdl
LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMs
IFRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVzKQoreworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJt
ZWRpYXRlKGluZm9TaW5rKTsJCisgICAgVFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZTsKKwkKKwlp
ZiAocmVzb3VyY2VzKQorCQlzeW1ib2xUYWJsZSA9IHN5bWJvbFRhYmxlczsKKwllbHNlCisJCXN5
bWJvbFRhYmxlID0gJnN5bWJvbFRhYmxlc1tsYW5ndWFnZV07CisKKyAgICAvLyBUT0RPKGFsb2tw
KTogSW52ZXN0aWdhdGUgaWYgYSBwYXJzZS1jb250ZXh0IGlzIG5lY2Vzc2FyeSBoZXJlIGFuZAor
ICAgIC8vIGlmIHN5bWJvbC10YWJsZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gR0xFUzIgYW5kIFdl
YkdMIHNwZWNzLgorICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KCpzeW1ib2xUYWJsZSwg
aW50ZXJtZWRpYXRlLCBsYW5ndWFnZSwgRVNoU3BlY0dMRVMyLCBpbmZvU2luayk7CisKKyAgICBH
bG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OworICAgIAorICAgIHNldEluaXRpYWxT
dGF0ZSgpOworCisgICAgYXNzZXJ0KHN5bWJvbFRhYmxlLT5pc0VtcHR5KCkgfHwgc3ltYm9sVGFi
bGUtPmF0U2hhcmVkQnVpbHRJbkxldmVsKCkpOworICAgICAgIAorICAgIC8vCisgICAgLy8gUGFy
c2UgdGhlIGJ1aWx0LWlucy4gIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UgcGVyCisgICAg
Ly8gbGFuZ3VhZ2Ugc3ltYm9sIHRhYmxlLgorICAgIC8vCisgICAgLy8gUHVzaCB0aGUgc3ltYm9s
IHRhYmxlIHRvIGdpdmUgaXQgYW4gaW5pdGlhbCBzY29wZS4gIFRoaXMKKyAgICAvLyBwdXNoIHNo
b3VsZCBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcG9wLCBzbyB0aGF0IGJ1aWx0LWlucworICAg
IC8vIGFyZSBwcmVzZXJ2ZWQsIGFuZCB0aGUgdGVzdCBmb3IgYW4gZW1wdHkgdGFibGUgZmFpbHMu
CisgICAgLy8KKworICAgIHN5bWJvbFRhYmxlLT5wdXNoKCk7CisgICAgCisgICAgLy9Jbml0aWFs
aXplIHRoZSBQcmVwcm9jZXNzb3IKKyAgICBpbnQgcmV0ID0gSW5pdFByZXByb2Nlc3NvcigpOwor
ICAgIGlmIChyZXQpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAgIlVuYWJsZSB0byBpbnRpYWxpemUgdGhlIFByZXByb2Nlc3NvciIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAoVEJ1aWx0SW5TdHJpbmdz
OjppdGVyYXRvciBpICA9IEJ1aWx0SW5TdHJpbmdzW3BhcnNlQ29udGV4dC5sYW5ndWFnZV0uYmVn
aW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gQnVpbHRJblN0
cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1YWdlXS5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsraSkgeworICAgICAgICBjb25zdCBjaGFyKiBidWlsdEluU2hhZGVy
c1sxXTsKKyAgICAgICAgaW50IGJ1aWx0SW5MZW5ndGhzWzFdOworCisgICAgICAgIGJ1aWx0SW5T
aGFkZXJzWzBdID0gKCppKS5jX3N0cigpOworICAgICAgICBidWlsdEluTGVuZ3Roc1swXSA9IChp
bnQpICgqaSkuc2l6ZSgpOworCisgICAgICAgIGlmIChQYVBhcnNlU3RyaW5ncyhjb25zdF9jYXN0
PGNoYXIqKj4oYnVpbHRJblNoYWRlcnMpLCBidWlsdEluTGVuZ3RocywgMSwgcGFyc2VDb250ZXh0
KSAhPSAwKSB7CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsICJVbmFibGUgdG8gcGFyc2UgYnVpbHQtaW5zIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKwlpZiAocmVzb3VyY2VzKSB7CisJCUlkZW50
aWZ5QnVpbHRJbnMocGFyc2VDb250ZXh0Lmxhbmd1YWdlLCAqc3ltYm9sVGFibGUsICpyZXNvdXJj
ZXMpOworCX0gZWxzZSB7CQkJCQkJCQkJICAgCisJCUlkZW50aWZ5QnVpbHRJbnMocGFyc2VDb250
ZXh0Lmxhbmd1YWdlLCAqc3ltYm9sVGFibGUpOworCX0KKworICAgIEZpbmFsaXplUHJlcHJvY2Vz
c29yKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8KKy8vIERvIGFuIGFjdHVhbCBjb21w
aWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAorLy8gaW4gdGhl
IGdpdmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8vIFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUg
b2YgU2hDb21waWxlIGlzIHJlYWxseSBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9y
IGZhaWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSBoYW5kbGUs
CisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAorICAgIGNvbnN0IGludCBu
dW1TdHJpbmdzLAorICAgIGNvbnN0IEVTaE9wdGltaXphdGlvbkxldmVsIG9wdExldmVsLAorICAg
IGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywKKyAgICBpbnQgZGVidWdPcHRpb25z
CisgICAgKQoreworICAgIGlmICghSW5pdFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVC
YXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAg
ICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmIChj
b21waWxlciA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBHbG9iYWxQb29sQWxs
b2NhdG9yLnB1c2goKTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmluZm9T
aW5rOworICAgIGluZm9TaW5rLmluZm8uZXJhc2UoKTsKKyAgICBpbmZvU2luay5kZWJ1Zy5lcmFz
ZSgpOworICAgIGluZm9TaW5rLm9iai5lcmFzZSgpOworCisgICAgaWYgKG51bVN0cmluZ3MgPT0g
MCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShp
bmZvU2luayk7CisgICAgVFN5bWJvbFRhYmxlIHN5bWJvbFRhYmxlKCpTeW1ib2xUYWJsZXNbY29t
cGlsZXItPmdldExhbmd1YWdlKCldKTsKKyAgICAKKyAgICBHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xU
YWJsZShyZXNvdXJjZXMsIGluZm9TaW5rLCAmc3ltYm9sVGFibGUsIGNvbXBpbGVyLT5nZXRMYW5n
dWFnZSgpKTsKKworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBp
bnRlcm1lZGlhdGUsIGNvbXBpbGVyLT5nZXRMYW5ndWFnZSgpLCBjb21waWxlci0+Z2V0U3BlYygp
LCBpbmZvU2luayk7CisgICAgcGFyc2VDb250ZXh0LmluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlv
cigpOworCisgICAgR2xvYmFsUGFyc2VDb250ZXh0ID0gJnBhcnNlQ29udGV4dDsKKyAgICAKKyAg
ICBzZXRJbml0aWFsU3RhdGUoKTsKKworICAgIEluaXRQcmVwcm9jZXNzb3IoKTsgICAgCisgICAg
Ly8KKyAgICAvLyBQYXJzZSB0aGUgYXBwbGljYXRpb24ncyBzaGFkZXJzLiAgQWxsIHRoZSBmb2xs
b3dpbmcgc3ltYm9sIHRhYmxlCisgICAgLy8gd29yayB3aWxsIGJlIHRocm93LWF3YXksIHNvIHB1
c2ggYSBuZXcgYWxsb2NhdGlvbiBzY29wZSB0aGF0IGNhbgorICAgIC8vIGJlIHRocm93biBhd2F5
LCB0aGVuIHB1c2ggYSBzY29wZSBmb3IgdGhlIGN1cnJlbnQgc2hhZGVyJ3MgZ2xvYmFscy4KKyAg
ICAvLworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgCisgICAgc3ltYm9sVGFibGUucHVz
aCgpOworICAgIGlmICghc3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKQorICAgICAgICBwYXJz
ZUNvbnRleHQuaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiV3Jv
bmcgc3ltYm9sIHRhYmxlIGxldmVsIik7CisKKyAgICBpbnQgcmV0ID0gUGFQYXJzZVN0cmluZ3Mo
Y29uc3RfY2FzdDxjaGFyKio+KHNoYWRlclN0cmluZ3MpLCAwLCBudW1TdHJpbmdzLCBwYXJzZUNv
bnRleHQpOworICAgIGlmIChyZXQpCisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGlm
IChzdWNjZXNzICYmIHBhcnNlQ29udGV4dC50cmVlUm9vdCkgeworICAgICAgICBpZiAob3B0TGV2
ZWwgPT0gRVNoT3B0Tm9HZW5lcmF0aW9uKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LmluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4Tm9uZSwgIk5vIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJh
dGlvbiB3YXMgcmVxdWVzdGVkLiIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN1Y2Nl
c3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3MocGFyc2VDb250ZXh0LnRyZWVSb290LCBwYXJz
ZUNvbnRleHQubGFuZ3VhZ2UpOworCisgICAgICAgICAgICBpZiAoc3VjY2VzcykgeworCisgICAg
ICAgICAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQorICAg
ICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJl
ZVJvb3QpOworCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBDYWxsIHRo
ZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlcgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgaWYgKCFjb21waWxlci0+Y29tcGlsZShwYXJzZUNvbnRleHQudHJlZVJvb3QpKQor
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIHBhcnNlQ29udGV4dC5p
bmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgICAgICBwYXJzZUNvbnRleHQu
aW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8ICIgY29tcGlsYXRpb24g
ZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQorICAg
ICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0LnRyZWVSb290KTsK
KyAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKKyAgICAgICAgcGFyc2VD
b250ZXh0LmVycm9yKDEsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiIsICIiLCAiIik7CisgICAg
ICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMg
PDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsKKyAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJ
bnRlcm1lZGlhdGUpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNv
bnRleHQudHJlZVJvb3QpOworICAgIH0KKworICAgIGludGVybWVkaWF0ZS5yZW1vdmUocGFyc2VD
b250ZXh0LnRyZWVSb290KTsKKworICAgIC8vCisgICAgLy8gRW5zdXJlIHN5bWJvbCB0YWJsZSBp
cyByZXR1cm5lZCB0byB0aGUgYnVpbHQtaW4gbGV2ZWwsCisgICAgLy8gdGhyb3dpbmcgYXdheSBh
bGwgYnV0IHRoZSBidWlsdC1pbnMuCisgICAgLy8KKyAgICB3aGlsZSAoISBzeW1ib2xUYWJsZS5h
dFNoYXJlZEJ1aWx0SW5MZXZlbCgpKQorICAgICAgICBzeW1ib2xUYWJsZS5wb3AoKTsKKworICAg
IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisgICAgLy8KKyAgICAvLyBUaHJvdyBhd2F5IGFsbCB0
aGUgdGVtcG9yYXJ5IG1lbW9yeSB1c2VkIGJ5IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgorICAg
IC8vCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wb3AoKTsKKworICAgIHJldHVybiBzdWNjZXNz
ID8gMSA6IDA7Cit9CisKKy8vCisvLyBSZXR1cm4gYW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdl
cyBmb3IgdGhlIGFwcGxpY2F0aW9uLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25z
dCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxl
KTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5rID0gMDsKKworICAgIGlmIChiYXNlLT5nZXRBc0Nv
bXBpbGVyKCkpCisgICAgICAgIGluZm9TaW5rID0gJihiYXNlLT5nZXRBc0NvbXBpbGVyKCktPmdl
dEluZm9TaW5rKCkpOworCisgICAgaW5mb1NpbmstPmluZm8gPDwgaW5mb1NpbmstPmRlYnVnLmNf
c3RyKCk7CisgICAgcmV0dXJuIGluZm9TaW5rLT5pbmZvLmNfc3RyKCk7Cit9CisKKy8vCisvLyBS
ZXR1cm4gYW55IG9iamVjdCBjb2RlLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0T2JqZWN0Q29kZShj
b25zdCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFu
ZGxlKTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5rOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29t
cGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0
SW5mb1NpbmsoKSk7CisKKyAgICByZXR1cm4gaW5mb1NpbmstPm9iai5jX3N0cigpOworfQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBN
b3N0IGZ1bmN0aW9uYWxpeSBhbmQgbWFpbiBpZGVhcworLy8gYXJlIGRvY3VtZW50ZWQgaW4gdGhl
IGhlYWRlciBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorCisvLworLy8gVFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRz
IGEgcGxhY2UgdG8gbGl2ZS4KKy8vCisKKy8vCisvLyBSZWN1cnNpdmVseSBnZW5lcmF0ZSBtYW5n
bGVkIG5hbWVzLgorLy8KK3ZvaWQgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoVFN0cmluZyYgbWFu
Z2xlZE5hbWUpCit7CisgICAgaWYgKGlzTWF0cml4KCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9
ICdtJzsKKyAgICBlbHNlIGlmIChpc1ZlY3RvcigpKQorICAgICAgICBtYW5nbGVkTmFtZSArPSAn
dic7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50OiAgICAg
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRC
b29sOiAgICAgICAgICAgICAgIG1hbmdsZWROYW1lICs9ICdiJzsgICAgICBicmVhazsKKyAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFr
OworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgIG1hbmdsZWROYW1lICs9ICJz
dHJ1Y3QtIjsKKyAgICAgICAgaWYgKHR5cGVOYW1lKQorICAgICAgICAgICAgbWFuZ2xlZE5hbWUg
Kz0gKnR5cGVOYW1lOworICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIG1hbmdsZWROYW1lICs9ICctJzsKKyAgICAgICAgICAgICAgICAoKnN0
cnVjdHVyZSlbaV0udHlwZS0+YnVpbGRNYW5nbGVkTmFtZShtYW5nbGVkTmFtZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6
ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7CisgICAgICAgIGNoYXIgYnVmWzIwXTsKKyAgICAg
ICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6ZSk7CisgICAgICAgIG1hbmdsZWROYW1lICs9
ICdbJzsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gYnVmOworICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnXSc7CisgICAgfQorfQorCitpbnQgVFR5cGU6OmdldFN0cnVjdFNpemUoKSBjb25zdAorewor
ICAgIGlmICghZ2V0U3RydWN0KCkpIHsKKyAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJOb3QgYSBz
dHJ1Y3QiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHN0cnVjdHVyZVNp
emUgPT0gMCkKKyAgICAgICAgZm9yIChUVHlwZUxpc3Q6Oml0ZXJhdG9yIHRsID0gZ2V0U3RydWN0
KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgpLT5lbmQoKTsgdGwrKykKKyAgICAgICAgICAg
IHN0cnVjdHVyZVNpemUgKz0gKCgqdGwpLnR5cGUpLT5nZXRPYmplY3RTaXplKCk7CisKKyAgICBy
ZXR1cm4gc3RydWN0dXJlU2l6ZTsKK30KKworLy8KKy8vIER1bXAgZnVuY3Rpb25zLgorLy8KKwor
dm9pZCBUVmFyaWFibGU6OmR1bXAoVEluZm9TaW5rJiBpbmZvU2luaykgY29uc3QKK3sKKyAgICBp
bmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8IHR5cGUuZ2V0UXVh
bGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAi
IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAg
ICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIlswXSI7CisgICAgfQorICAgIGluZm9TaW5rLmRlYnVn
IDw8ICJcbiI7Cit9CisKK3ZvaWQgVEZ1bmN0aW9uOjpkdW1wKFRJbmZvU2luayAmaW5mb1Npbmsp
IGNvbnN0Cit7CisgICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjog
IiA8PCAgcmV0dXJuVHlwZS5nZXRCYXNpY1N0cmluZygpIDw8ICIgIiA8PCBnZXRNYW5nbGVkTmFt
ZSgpLmNfc3RyKCkgPDwgIlxuIjsKK30KKwordm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6ZHVtcChU
SW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAoreworICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3Ig
aXQ7CisgICAgZm9yIChpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0
KQorICAgICAgICAoKml0KS5zZWNvbmQtPmR1bXAoaW5mb1NpbmspOworfQorCit2b2lkIFRTeW1i
b2xUYWJsZTo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAoreworICAgIGZvciAoaW50
IGxldmVsID0gY3VycmVudExldmVsKCk7IGxldmVsID49IDA7IC0tbGV2ZWwpIHsKKyAgICAgICAg
aW5mb1NpbmsuZGVidWcgPDwgIkxFVkVMICIgPDwgbGV2ZWwgPDwgIlxuIjsKKyAgICAgICAgdGFi
bGVbbGV2ZWxdLT5kdW1wKGluZm9TaW5rKTsKKyAgICB9Cit9CisKKy8vCisvLyBGdW5jdGlvbnMg
aGF2ZSBidXJpZWQgcG9pbnRlcnMgdG8gZGVsZXRlLgorLy8KK1RGdW5jdGlvbjo6flRGdW5jdGlv
bigpCit7CisgICAgZm9yIChUUGFyYW1MaXN0OjppdGVyYXRvciBpID0gcGFyYW1ldGVycy5iZWdp
bigpOyBpICE9IHBhcmFtZXRlcnMuZW5kKCk7ICsraSkKKyAgICAgICAgZGVsZXRlICgqaSkudHlw
ZTsKK30KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBsZXZlbHMgYXJlIGEgbWFwIG9mIHBvaW50ZXJz
IHRvIHN5bWJvbHMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuCisvLworVFN5bWJvbFRhYmxlTGV2
ZWw6On5UU3ltYm9sVGFibGVMZXZlbCgpCit7CisgICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0
ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCisgICAgICAgIGRlbGV0
ZSAoKml0KS5zZWNvbmQ7Cit9CisKKy8vCisvLyBDaGFuZ2UgYWxsIGZ1bmN0aW9uIGVudHJpZXMg
aW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUKKy8vIHRvIGJlIHJlbGF0ZWQg
dG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIG9wZXJhdGlvbi4gIFRoaXMgaXMgYSBsb3cKKy8vIHBl
cmZvcm1hbmNlIG9wZXJhdGlvbiwgYW5kIG9ubHkgaW50ZW5kZWQgZm9yIHN5bWJvbCB0YWJsZXMg
dGhhdAorLy8gbGl2ZSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgY29tcGlsZXMuCisvLwordm9p
ZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBU
T3BlcmF0b3Igb3ApCit7CisgICAgdExldmVsOjppdGVyYXRvciBpdDsKKyAgICBmb3IgKGl0ID0g
bGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCgq
aXQpLnNlY29uZC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oKCppdCkuc2Vjb25kKTsKKyAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24tPnJlbGF0ZVRvT3BlcmF0b3Iob3ApOworICAgICAgICB9CisgICAgfQorfQorCisKK1RTeW1i
b2w6OlRTeW1ib2woY29uc3QgVFN5bWJvbCYgY29weU9mKQoreworICAgIG5hbWUgPSBOZXdQb29s
VFN0cmluZyhjb3B5T2YubmFtZS0+Y19zdHIoKSk7CisgICAgdW5pcXVlSWQgPSBjb3B5T2YudW5p
cXVlSWQ7Cit9CisKK1RWYXJpYWJsZTo6VFZhcmlhYmxlKGNvbnN0IFRWYXJpYWJsZSYgY29weU9m
LCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgOiBUU3ltYm9sKGNvcHlPZikKK3sKKyAgICB0eXBl
LmNvcHlUeXBlKGNvcHlPZi50eXBlLCByZW1hcHBlcik7CisgICAgdXNlclR5cGUgPSBjb3B5T2Yu
dXNlclR5cGU7CisgICAgLy8gZm9yIGJ1aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVsLCB1bmlvbkFy
cmF5IGFuZCBhcnJheUluZm9ybWF0aW9uIHBvaW50ZXJzIHNob3VsZCBiZSBOVUxMCisgICAgYXNz
ZXJ0KGNvcHlPZi5hcnJheUluZm9ybWF0aW9uVHlwZSA9PSAwKTsKKyAgICBhcnJheUluZm9ybWF0
aW9uVHlwZSA9IDA7CisKKyAgICBpZiAoY29weU9mLnVuaW9uQXJyYXkpIHsKKyAgICAgICAgYXNz
ZXJ0KCFjb3B5T2YudHlwZS5nZXRTdHJ1Y3QoKSk7CisgICAgICAgIGFzc2VydChjb3B5T2YudHlw
ZS5nZXRPYmplY3RTaXplKCkgPT0gMSk7CisgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheVswXSA9IGNvcHlPZi51bmlvbkFycmF5WzBd
OworICAgIH0gZWxzZQorICAgICAgICB1bmlvbkFycmF5ID0gMDsKK30KKworVFZhcmlhYmxlKiBU
VmFyaWFibGU6OmNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQoreworICAgIFRWYXJpYWJs
ZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCp0aGlzLCByZW1hcHBlcik7CisKKyAgICByZXR1
cm4gdmFyaWFibGU7Cit9CisKK1RGdW5jdGlvbjo6VEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiYg
Y29weU9mLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgOiBUU3ltYm9sKGNvcHlPZikKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5wYXJhbWV0ZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgIHBhcmFtZXRlcnMucHVz
aF9iYWNrKHBhcmFtKTsKKyAgICAgICAgcGFyYW1ldGVycy5iYWNrKCkuY29weVBhcmFtKGNvcHlP
Zi5wYXJhbWV0ZXJzW2ldLCByZW1hcHBlcik7CisgICAgfQorCisgICAgcmV0dXJuVHlwZS5jb3B5
VHlwZShjb3B5T2YucmV0dXJuVHlwZSwgcmVtYXBwZXIpOworICAgIG1hbmdsZWROYW1lID0gY29w
eU9mLm1hbmdsZWROYW1lOworICAgIG9wID0gY29weU9mLm9wOworICAgIGRlZmluZWQgPSBjb3B5
T2YuZGVmaW5lZDsKK30KKworVEZ1bmN0aW9uKiBURnVuY3Rpb246OmNsb25lKFRTdHJ1Y3R1cmVN
YXAmIHJlbWFwcGVyKQoreworICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KCp0aGlzLCByZW1hcHBlcik7CisKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK1RTeW1ib2xU
YWJsZUxldmVsKiBUU3ltYm9sVGFibGVMZXZlbDo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBw
ZXIpCit7CisgICAgVFN5bWJvbFRhYmxlTGV2ZWwgKnN5bVRhYmxlTGV2ZWwgPSBuZXcgVFN5bWJv
bFRhYmxlTGV2ZWwoKTsKKyAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0ZXI7CisgICAgZm9yIChpdGVy
ID0gbGV2ZWwuYmVnaW4oKTsgaXRlciAhPSBsZXZlbC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IHN5bVRhYmxlTGV2ZWwtPmluc2VydCgqaXRlci0+c2Vjb25kLT5jbG9uZShyZW1hcHBlcikpOwor
ICAgIH0KKworICAgIHJldHVybiBzeW1UYWJsZUxldmVsOworfQorCit2b2lkIFRTeW1ib2xUYWJs
ZTo6Y29weVRhYmxlKGNvbnN0IFRTeW1ib2xUYWJsZSYgY29weU9mKQoreworICAgIFRTdHJ1Y3R1
cmVNYXAgcmVtYXBwZXI7CisgICAgdW5pcXVlSWQgPSBjb3B5T2YudW5pcXVlSWQ7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5T2YudGFibGUuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgdGFibGUucHVzaF9iYWNrKGNvcHlPZi50YWJsZVtpXS0+Y2xvbmUocmVtYXBwZXIpKTsK
KyAgICB9CisgICAgZm9yKCB1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5T2YucHJlY2lzaW9u
U3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKCBj
b3B5T2YucHJlY2lzaW9uU3RhY2tbaV0gKTsKKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU3lt
Ym9sVGFibGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXworI2RlZmluZSBfU1lNQk9MX1RBQkxFX0lO
Q0xVREVEXworCisvLworLy8gU3ltYm9sIHRhYmxlIGZvciBwYXJzaW5nLiAgSGFzIHRoZXNlIGRl
c2lnbiBjaGFyYWN0ZXJpc3RpY3M6CisvLworLy8gKiBTYW1lIHN5bWJvbCB0YWJsZSBjYW4gYmUg
dXNlZCB0byBjb21waWxlIG1hbnkgc2hhZGVycywgdG8gcHJlc2VydmUKKy8vICAgZWZmb3J0IG9m
IGNyZWF0aW5nIGFuZCBsb2FkaW5nIHdpdGggdGhlIGxhcmdlIG51bWJlcnMgb2YgYnVpbHQtaW4K
Ky8vICAgc3ltYm9scy4KKy8vCisvLyAqIE5hbWUgbWFuZ2xpbmcgd2lsbCBiZSB1c2VkIHRvIGdp
dmUgZWFjaCBmdW5jdGlvbiBhIHVuaXF1ZSBuYW1lCisvLyAgIHNvIHRoYXQgc3ltYm9sIHRhYmxl
IGxvb2t1cHMgYXJlIG5ldmVyIGFtYmlndW91cy4gIFRoaXMgYWxsb3dzCisvLyAgIGEgc2ltcGxl
ciBzeW1ib2wgdGFibGUgc3RydWN0dXJlLgorLy8KKy8vICogUHVzaGluZyBhbmQgcG9wcGluZyBv
ZiBzY29wZSwgc28gc3ltYm9sIHRhYmxlIHdpbGwgcmVhbGx5IGJlIGEgc3RhY2sgCisvLyAgIG9m
IHN5bWJvbCB0YWJsZXMuICBTZWFyY2hlZCBmcm9tIHRoZSB0b3AsIHdpdGggbmV3IGluc2VydHMg
Z29pbmcgaW50bworLy8gICB0aGUgdG9wLgorLy8KKy8vICogQ29uc3RhbnRzOiAgQ29tcGlsZSB0
aW1lIGNvbnN0YW50IHN5bWJvbHMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlcworLy8gICBpbiB0aGUg
c3ltYm9sIHRhYmxlLiAgVGhlIHBhcnNlciBjYW4gc3Vic3RpdHV0ZSBjb25zdGFudHMgYXQgcGFy
c2UKKy8vICAgdGltZSwgaW5jbHVkaW5nIGRvaW5nIGNvbnN0YW50IGZvbGRpbmcgYW5kIGNvbnN0
YW50IHByb3BhZ2F0aW9uLgorLy8KKy8vICogTm8gdGVtcG9yYXJpZXM6ICBUZW1wb3JhcmllcyBt
YWRlIGZyb20gb3BlcmF0aW9ucyAoKywgLS0sIC54eSwgZXRjLikKKy8vICAgYXJlIHRyYWNrZWQg
aW4gdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiwgbm90IHRoZSBzeW1ib2wgdGFibGUu
CisvLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
SW5mb1NpbmsuaCIKKworLy8KKy8vIFN5bWJvbCBiYXNlIGNsYXNzLiAgKENhbiBidWlsZCBmdW5j
dGlvbnMgb3IgdmFyaWFibGVzIG91dCBvZiB0aGVzZS4uLikKKy8vCitjbGFzcyBUU3ltYm9sIHsg
ICAgCitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxs
b2NhdG9yKQorICAgIFRTeW1ib2woY29uc3QgVFN0cmluZyAqbikgOiAgbmFtZShuKSB7IH0KKyAg
ICB2aXJ0dWFsIH5UU3ltYm9sKCkgeyAvKiBkb24ndCBkZWxldGUgbmFtZSwgaXQncyBmcm9tIHRo
ZSBwb29sICovIH0KKyAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4g
Km5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29u
c3QgeyByZXR1cm4gZ2V0TmFtZSgpOyB9CisgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldFVuaXF1ZUlkKGludCBpZCkgeyB1bmlx
dWVJZCA9IGlkOyB9CisgICAgaW50IGdldFVuaXF1ZUlkKCkgY29uc3QgeyByZXR1cm4gdW5pcXVl
SWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdCA9
IDA7CQorICAgIFRTeW1ib2woY29uc3QgVFN5bWJvbCYpOworICAgIHZpcnR1YWwgVFN5bWJvbCog
Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpID0gMDsKKworcHJvdGVjdGVkOgorICAgIGNv
bnN0IFRTdHJpbmcgKm5hbWU7CisgICAgdW5zaWduZWQgaW50IHVuaXF1ZUlkOyAgICAgIC8vIEZv
ciByZWFsIGNvbXBhcmluZyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uCit9OworCisvLworLy8gVmFy
aWFibGUgY2xhc3MsIG1lYW5pbmcgYSBzeW1ib2wgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8g
CisvLyBUaGVyZSBjb3VsZCBiZSBhIHNlcGFyYXRlIGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3Rh
bnQgdmFyaWFibGVzOworLy8gT25seSBvbmUgb2YgaW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5v
bmUpIGlzIGNvcnJlY3QgZm9yCisvLyBhbnkgcGFydGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kg
dG8gZG8gdGhpcyB3YXksIGFuZCBkb2Vzbid0CisvLyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0
ZSBjbGFzc2VzLCBhbmQgImdldENvbnN0IiBjYW4ndCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJl
bnQgdmFsdWVzIGZvciBkaWZmZXJlbnQgdHlwZXMgcG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlz
IAorLy8ganVzdCBzaW1wbGUgYW5kIHByYWdtYXRpYy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBw
dWJsaWMgVFN5bWJvbCB7CitwdWJsaWM6CisgICAgVFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5h
bWUsIGNvbnN0IFRUeXBlJiB0LCBib29sIHVUID0gZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5
cGUodCksIHVzZXJUeXBlKHVUKSwgdW5pb25BcnJheSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUo
MCkgeyB9CisgICAgdmlydHVhbCB+VFZhcmlhYmxlKCkgeyB9CisgICAgdmlydHVhbCBib29sIGlz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorICAgIFRUeXBlJiBnZXRUeXBl
KCkgeyByZXR1cm4gdHlwZTsgfSAgICAKKyAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBib29sIGlzVXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1
c2VyVHlwZTsgfQorICAgIHZvaWQgY2hhbmdlUXVhbGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVy
KSB7IHR5cGUuY2hhbmdlUXVhbGlmaWVyKHF1YWxpZmllcik7IH0KKyAgICB2b2lkIHVwZGF0ZUFy
cmF5SW5mb3JtYXRpb25UeXBlKFRUeXBlICp0KSB7IGFycmF5SW5mb3JtYXRpb25UeXBlID0gdDsg
fQorICAgIFRUeXBlKiBnZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpIHsgcmV0dXJuIGFycmF5SW5m
b3JtYXRpb25UeXBlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdDsKKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCisgICAg
eyAKKyAgICAgICAgaWYgKCF1bmlvbkFycmF5KQorICAgICAgICAgICAgdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKKworICAgICAgICByZXR1cm4g
dW5pb25BcnJheTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIo
KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5OyB9CisKKyAgICB2b2lkIHNoYXJlQ29uc3RQb2lu
dGVyKCBDb25zdGFudFVuaW9uICpjb25zdEFycmF5KQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVu
aW9uQXJyYXk7CisgICAgICAgIHVuaW9uQXJyYXkgPSBjb25zdEFycmF5OyAgCisgICAgfQorICAg
IFRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUmLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7IC8v
IGNvcHkgY29uc3RydWN0b3IKKyAgICB2aXJ0dWFsIFRWYXJpYWJsZSogY2xvbmUoVFN0cnVjdHVy
ZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKKyAgICBib29s
IHVzZXJUeXBlOworICAgIC8vIHdlIGFyZSBhc3N1bWluZyB0aGF0IFBvb2wgQWxsb2NhdG9yIHdp
bGwgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byB1bmlvbkFycmF5CisgICAgLy8gd2hlbiB0
aGlzIG9iamVjdCBpcyBkZXN0cm95ZWQKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5Owor
ICAgIFRUeXBlICphcnJheUluZm9ybWF0aW9uVHlwZTsgIC8vIHRoaXMgaXMgdXNlZCBmb3IgdXBk
YXRpbmcgbWF4QXJyYXlTaXplIGluIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBhIGdpdmVuIHN5bWJv
bAorfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWItY2xhc3Mgb2Ygc3ltYm9scyBhbmQgdGhl
IHBhcnNlciB3aWxsIG5lZWQgdG8KKy8vIHNoYXJlIHRoaXMgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0
aW9uIHBhcmFtZXRlci4KKy8vCitzdHJ1Y3QgVFBhcmFtZXRlciB7CisgICAgVFN0cmluZyAqbmFt
ZTsKKyAgICBUVHlwZSogdHlwZTsKKyAgICB2b2lkIGNvcHlQYXJhbShjb25zdCBUUGFyYW1ldGVy
JiBwYXJhbSwgVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCisgICAgeworICAgICAgICBuYW1lID0g
TmV3UG9vbFRTdHJpbmcocGFyYW0ubmFtZS0+Y19zdHIoKSk7CisgICAgICAgIHR5cGUgPSBwYXJh
bS50eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAgfQorfTsKKworLy8KKy8vIFRoZSBmdW5jdGlv
biBzdWItY2xhc3Mgb2YgYSBzeW1ib2wuICAKKy8vCitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMg
VFN5bWJvbCB7CitwdWJsaWM6CisgICAgVEZ1bmN0aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAg
IFRTeW1ib2woMCksCisgICAgICAgIHJldHVyblR5cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKSksCisgICAgICAgIG9wKG8pLAorICAgICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBU
RnVuY3Rpb24oY29uc3QgVFN0cmluZyAqbmFtZSwgVFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0
T3AgPSBFT3BOdWxsKSA6IAorICAgICAgICBUU3ltYm9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJu
VHlwZShyZXRUeXBlKSwKKyAgICAgICAgbWFuZ2xlZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1l
KCpuYW1lKSksCisgICAgICAgIG9wKHRPcCksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQor
ICAgIHZpcnR1YWwgflRGdW5jdGlvbigpOworICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAKKworICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5h
bWUoY29uc3QgVFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRp
YyBUU3RyaW5nIHVubWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBUU3RyaW5nKG1hbmdsZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1l
LmZpbmRfZmlyc3Rfb2YoJygnKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBh
cmFtZXRlciYgcCkgCisgICAgeyAKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socCk7Cisg
ICAgICAgIG1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1l
KCk7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7
IHJldHVybiBtYW5nbGVkTmFtZTsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkg
Y29uc3QgeyByZXR1cm4gcmV0dXJuVHlwZTsgfQorICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihU
T3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKyAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29u
c3QgeyByZXR1cm4gb3A7IH0KKyAgICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVl
OyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisKKyAgICBpbnQg
Z2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGFyYW1ldGVy
cy5zaXplKCkpOyB9ICAgIAorICAgIFRQYXJhbWV0ZXImIG9wZXJhdG9yIFtdKGludCBpKSAgICAg
ICB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9CisgICAgY29uc3QgVFBhcmFtZXRlciYgb3BlcmF0
b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KKworICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworICAgIFRGdW5jdGlvbihj
b25zdCBURnVuY3Rpb24mLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7CisgICAgdmlydHVhbCBU
RnVuY3Rpb24qIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKworcHJvdGVjdGVkOgor
ICAgIHR5cGVkZWYgVFZlY3RvcjxUUGFyYW1ldGVyPiBUUGFyYW1MaXN0OworICAgIFRQYXJhbUxp
c3QgcGFyYW1ldGVyczsKKyAgICBUVHlwZSByZXR1cm5UeXBlOworICAgIFRTdHJpbmcgbWFuZ2xl
ZE5hbWU7CisgICAgVE9wZXJhdG9yIG9wOworICAgIGJvb2wgZGVmaW5lZDsKK307CisKKworY2xh
c3MgVFN5bWJvbFRhYmxlTGV2ZWwgeworcHVibGljOgorICAgIHR5cGVkZWYgVE1hcDxUU3RyaW5n
LCBUU3ltYm9sKj4gdExldmVsOworICAgIHR5cGVkZWYgdExldmVsOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIGNvbnN0IHRMZXZlbDo6dmFsdWVfdHlwZSB0TGV2
ZWxQYWlyOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPHRMZXZlbDo6aXRlcmF0b3IsIGJvb2w+IHRJ
bnNlcnRSZXN1bHQ7CisKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xB
bGxvY2F0b3IpCisgICAgVFN5bWJvbFRhYmxlTGV2ZWwoKSB7IH0KKyAgICB+VFN5bWJvbFRhYmxl
TGV2ZWwoKTsKKworICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5bWJvbCkgCisgICAgeworICAg
ICAgICAvLworICAgICAgICAvLyByZXR1cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVk
IHRvIHRoZSB0YWJsZQorICAgICAgICAvLworICAgICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0ID0gbGV2ZWwuaW5zZXJ0KHRMZXZlbFBhaXIoc3ltYm9sLmdldE1hbmds
ZWROYW1lKCksICZzeW1ib2wpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAg
ICB9CisKKyAgICBUU3ltYm9sKiBmaW5kKGNvbnN0IFRTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAg
eworICAgICAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGV2ZWwuZmluZChuYW1lKTsK
KyAgICAgICAgaWYgKGl0ID09IGxldmVsLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CisgICAgfQorCisg
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxl
dmVsLmJlZ2luKCk7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBsZXZlbC5lbmQoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGF0
ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKKyAgICB2b2lkIGR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGNs
b25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKworcHJvdGVjdGVkOgorICAgIHRMZXZlbCBs
ZXZlbDsKK307CisKK2NsYXNzIFRTeW1ib2xUYWJsZSB7CitwdWJsaWM6CisgICAgVFN5bWJvbFRh
YmxlKCkgOiB1bmlxdWVJZCgwKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKKyAg
ICAgICAgLy8gdGhlIGxhY2sgb2YgYW4gaW5pdGlhbCBjYWxsIHRvIHB1c2goKSBjYW4gYmUgdXNl
ZCB0byBkZXRlY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgc3ltYm9sIHRhYmxlIGhhcyBub3QgYmVl
biBwcmVsb2FkZWQgd2l0aCBidWlsdC1pbnMuCisgICAgICAgIC8vCisgICAgfQorCisgICAgVFN5
bWJvbFRhYmxlKFRTeW1ib2xUYWJsZSYgc3ltVGFibGUpCisgICAgeworICAgICAgICB0YWJsZS5w
dXNoX2JhY2soc3ltVGFibGUudGFibGVbMF0pOworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNo
X2JhY2soIHN5bVRhYmxlLnByZWNpc2lvblN0YWNrWzBdICk7CisgICAgICAgIHVuaXF1ZUlkID0g
c3ltVGFibGUudW5pcXVlSWQ7CisgICAgfQorCisgICAgflRTeW1ib2xUYWJsZSgpCisgICAgewor
ICAgICAgICAvLyBsZXZlbCAwIGlzIGFsd2F5cyBidWlsdCBJbiBzeW1ib2xzLCBzbyB3ZSBuZXZl
ciBwb3AgdGhhdCBvdXQKKyAgICAgICAgd2hpbGUgKHRhYmxlLnNpemUoKSA+IDEpCisgICAgICAg
ICAgICBwb3AoKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJs
ZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBidWlsdC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8v
ICdwdXNoJyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBz
aGFkZXIKKyAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBp
c0VtcHR5KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJ
bkxldmVsKCkgeyByZXR1cm4gYXRTaGFyZWRCdWlsdEluTGV2ZWwoKSB8fCBhdER5bmFtaWNCdWls
dEluTGV2ZWwoKTsgfQorICAgIGJvb2wgYXRTaGFyZWRCdWlsdEluTGV2ZWwoKSB7IHJldHVybiB0
YWJsZS5zaXplKCkgPT0gMTsgfQkKKyAgICBib29sIGF0R2xvYmFsTGV2ZWwoKSB7IHJldHVybiB0
YWJsZS5zaXplKCkgPD0gMzsgfQorICAgIHZvaWQgcHVzaCgpCisgICAgeyAKKyAgICAgICAgdGFi
bGUucHVzaF9iYWNrKG5ldyBUU3ltYm9sVGFibGVMZXZlbCk7CisgICAgICAgIHByZWNpc2lvblN0
YWNrLnB1c2hfYmFjayggUHJlY2lzaW9uU3RhY2tMZXZlbCgpICk7CisgICAgfQorCisgICAgdm9p
ZCBwb3AoKQorICAgIHsgCisgICAgICAgIGRlbGV0ZSB0YWJsZVtjdXJyZW50TGV2ZWwoKV07IAor
ICAgICAgICB0YWJsZS5wb3BfYmFjaygpOyAKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucG9wX2Jh
Y2soKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpCisgICAgewor
ICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisgICAgICAgIHJldHVybiB0
YWJsZVtjdXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgIH0KKworICAgIFRTeW1i
b2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNh
bWVTY29wZSA9IDApIAorICAgIHsKKyAgICAgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7
CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3lt
Ym9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgICAgICAgICAgLS1sZXZlbDsKKyAg
ICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7CisgICAgICAgIGxldmVs
Kys7CisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9
PSAwOworICAgICAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxl
dmVsID09IGN1cnJlbnRMZXZlbCgpOworICAgICAgICByZXR1cm4gc3ltYm9sOworICAgIH0KKwor
ICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRHbG9iYWxMZXZlbCgpIHsgYXNzZXJ0KHRhYmxlLnNp
emUoKSA+PSAzKTsgcmV0dXJuIHRhYmxlWzJdOyB9CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9y
KGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgeyB0YWJsZVswXS0+cmVsYXRlVG9PcGVy
YXRvcihuYW1lLCBvcCk7IH0KKyAgICBpbnQgZ2V0TWF4U3ltYm9sSWQoKSB7IHJldHVybiB1bmlx
dWVJZDsgfQorICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICB2
b2lkIGNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlPZik7CisKKyAgICB2b2lkIHNl
dERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUgdHlwZSwgVFByZWNpc2lvbiBwcmVjICl7Cisg
ICAgICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYmIHR5cGUgIT0gRWJ0SW50ICkgcmV0dXJuOyAv
LyBPbmx5IHNldCBkZWZhdWx0IHByZWNpc2lvbiBmb3IgaW50L2Zsb2F0CisgICAgICAgIGludCBp
bmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUo
KSkgLSAxOworICAgICAgICBwcmVjaXNpb25TdGFja1tpbmRleE9mTGFzdEVsZW1lbnRdW3R5cGVd
ID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQg
dmFsdWUKKyAgICB9CisKKyAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBm
b3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKKyAg
ICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUgdHlwZSl7CisgICAg
ICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYmIHR5cGUgIT0gRWJ0SW50ICkgcmV0dXJuIEVicFVu
ZGVmaW5lZDsKKyAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25T
dGFjay5zaXplKCkpIC0gMTsKKyAgICAgICAgYXNzZXJ0KCBsZXZlbCA+PSAwKTsgLy8gSnVzdCB0
byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZl
bDo6aXRlcmF0b3IgaXQ7CisgICAgICAgIFRQcmVjaXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsg
Ly8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5nIHdlIHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJy
b3IgY2hlY2sgdGhpcz8KKyAgICAgICAgd2hpbGUoIGxldmVsID49IDAgKXsKKyAgICAgICAgICAg
IGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLmZpbmQoIHR5cGUgKTsKKyAgICAgICAgICAgIGlm
KCBpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0uZW5kKCkgKXsKKyAgICAgICAgICAgICAgICBw
cmVjID0gKCppdCkuc2Vjb25kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbGV2ZWwtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJlYzsK
KyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAgaW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6ZSgpKSAtIDE7IH0KKyAgICBib29sIGF0
RHluYW1pY0J1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAyOyB9CisKKyAg
ICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOworICAgIHR5cGVkZWYgc3Rk
OjptYXA8IFRCYXNpY1R5cGUsIFRQcmVjaXNpb24gPiBQcmVjaXNpb25TdGFja0xldmVsOworICAg
IHN0ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xldmVsID4gcHJlY2lzaW9uU3RhY2s7CisgICAg
aW50IHVuaXF1ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdl
bmVyYXRpb24KK307CisKKyNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMLmgiCisKK1RyYW5zbGF0b3JH
TFNMOjpUcmFuc2xhdG9yR0xTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpCisgICAg
OiBUQ29tcGlsZXIobGFuZywgc3BlYykgeworfQorCitib29sIFRyYW5zbGF0b3JHTFNMOjpjb21w
aWxlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChpbmZv
U2luay5vYmopOworICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKKworICAgIHJldHVy
biB0cnVlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SR0xTTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXworCisj
aW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKworY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBw
dWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBUcmFuc2xhdG9yR0xTTChFU2hMYW5ndWFn
ZSBsYW5nLCBFU2hTcGVjIHNwZWMpOworICAgIHZpcnR1YWwgYm9vbCBjb21waWxlKFRJbnRlcm1O
b2RlKiByb290KTsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9UcmFu
c2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCitUcmFu
c2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVj
KQorICAgIDogVENvbXBpbGVyKGxhbmcsIHNwZWMpCit7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckhM
U0w6OmNvbXBpbGUoVEludGVybU5vZGUgKnJvb3QpCit7CisgICAgVFBhcnNlQ29udGV4dCYgcGFy
c2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29udGV4dCgpOworICAgIHNoOjpPdXRwdXRITFNM
IG91dHB1dEhMU0wocGFyc2VDb250ZXh0KTsKKworICAgIG91dHB1dEhMU0wub3V0cHV0KCk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFu
c2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5zbGF0b3JI
TFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYyk7CisgICAgdmlydHVhbCBib29sIGNv
bXBpbGUoVEludGVybU5vZGUqIHJvb3QpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SSExTTF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDggQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1RZUEVTX0lOQ0xVREVECisjZGVmaW5lIF9UWVBFU19J
TkNMVURFRAorCisjaW5jbHVkZSAiY29tcGlsZXIvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKworLy8KKy8vIE5l
ZWQgdG8gaGF2ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0
IGZvciBidWlsZGluZyBzdHJ1Y3RzLgorLy8KK2NsYXNzIFRUeXBlOworc3RydWN0IFRUeXBlTGlu
ZSB7CisgICAgVFR5cGUqIHR5cGU7CisgICAgaW50IGxpbmU7Cit9OwordHlwZWRlZiBUVmVjdG9y
PFRUeXBlTGluZT4gVFR5cGVMaXN0OworCitpbmxpbmUgVFR5cGVMaXN0KiBOZXdQb29sVFR5cGVM
aXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBHbG9iYWxQb29sQWxsb2NhdG9yLmFsbG9jYXRl
KHNpemVvZihUVHlwZUxpc3QpKTsKKyAgICByZXR1cm4gbmV3KG1lbW9yeSkgVFR5cGVMaXN0Owor
fQorCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5
YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBu
b24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGls
ZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVycwor
Ly8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5
IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhl
cmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBv
ciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworY2xhc3MgVFB1
YmxpY1R5cGUgeworcHVibGljOgorICAgIFRCYXNpY1R5cGUgdHlwZTsKKyAgICBUUXVhbGlmaWVy
IHF1YWxpZmllcjsKKyAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICBpbnQgc2l6ZTsgICAg
ICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAg
IGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJyYXk7CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBU
VHlwZSogdXNlckRlZjsKKyAgICBpbnQgbGluZTsKKworICAgIHZvaWQgc2V0QmFzaWMoVEJhc2lj
VHlwZSBidCwgVFF1YWxpZmllciBxLCBpbnQgbG4gPSAwKQorICAgIHsKKyAgICAgICAgdHlwZSA9
IGJ0OworICAgICAgICBxdWFsaWZpZXIgPSBxOworICAgICAgICBwcmVjaXNpb24gPSBFYnBVbmRl
ZmluZWQ7CisgICAgICAgIHNpemUgPSAxOworICAgICAgICBtYXRyaXggPSBmYWxzZTsKKyAgICAg
ICAgYXJyYXkgPSBmYWxzZTsKKyAgICAgICAgYXJyYXlTaXplID0gMDsKKyAgICAgICAgdXNlckRl
ZiA9IDA7CisgICAgICAgIGxpbmUgPSBsbjsKKyAgICB9CisKKyAgICB2b2lkIHNldEFnZ3JlZ2F0
ZShpbnQgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAgICAgICBzaXplID0gczsKKyAgICAg
ICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMg
PSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAgICAgICBhcnJheVNpemUgPSBzOwor
ICAgIH0KK307CisKK3R5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPiBUU3RydWN0
dXJlTWFwOwordHlwZWRlZiBUTWFwPFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+OjppdGVyYXRvciBU
U3RydWN0dXJlTWFwSXRlcmF0b3I7CisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQg
aGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVFR5cGUgeworcHVibGljOgorICAgIFBPT0xfQUxMT0NB
VE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKyAgICBleHBsaWNpdCBUVHlwZShU
QmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5LCBp
bnQgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEpLCBzaXpl
KHMpLCBtYXRyaXgobSksIGFycmF5KGEpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUo
MCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5
cGVOYW1lKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB9CisgICAgZXhwbGljaXQg
VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1YWxp
ZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSksIGFy
cmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRp
b25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1lKDApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHAudXNlckRlZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhwLnVzZXJEZWYtPmdldFR5cGVOYW1lKCku
Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwg
Y29uc3QgVFN0cmluZyYgbiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxp
ZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSks
IGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUodXNl
ckRlZiksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlv
blR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgZXhwbGljaXQgVFR5cGUoKSB7fQorICAgIHZp
cnR1YWwgflRUeXBlKCkge30KKworICAgIFRUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKSB7ICp0aGlz
ID0gdHlwZTsgfQorCisgICAgdm9pZCBjb3B5VHlwZShjb25zdCBUVHlwZSYgY29weU9mLCBUU3Ry
dWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAgIHR5cGUgPSBjb3B5T2YudHlwZTsK
KyAgICAgICAgcHJlY2lzaW9uID0gY29weU9mLnByZWNpc2lvbjsKKyAgICAgICAgcXVhbGlmaWVy
ID0gY29weU9mLnF1YWxpZmllcjsKKyAgICAgICAgc2l6ZSA9IGNvcHlPZi5zaXplOworICAgICAg
ICBtYXRyaXggPSBjb3B5T2YubWF0cml4OworICAgICAgICBhcnJheSA9IGNvcHlPZi5hcnJheTsK
KyAgICAgICAgYXJyYXlTaXplID0gY29weU9mLmFycmF5U2l6ZTsKKworICAgICAgICBUU3RydWN0
dXJlTWFwSXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaWYgKGNvcHlPZi5zdHJ1Y3R1cmUpIHsKKyAg
ICAgICAgICAgIGlmICgoaXRlciA9IHJlbWFwcGVyLmZpbmQoc3RydWN0dXJlKSkgPT0gcmVtYXBw
ZXIuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIG5ldyBzdHJ1Y3R1cmUg
aGVyZQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5zdHJ1Y3R1
cmUtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIFRUeXBlTGluZSB0eXBlTGlu
ZTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUxpbmUubGluZSA9ICgqY29weU9mLnN0cnVjdHVy
ZSlbaV0ubGluZTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUxpbmUudHlwZSA9ICgqY29weU9m
LnN0cnVjdHVyZSlbaV0udHlwZS0+Y2xvbmUocmVtYXBwZXIpOworICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPnB1c2hfYmFjayh0eXBlTGluZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBpdGVyLT5zZWNv
bmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJl
ID0gMDsKKworICAgICAgICBmaWVsZE5hbWUgPSAwOworICAgICAgICBpZiAoY29weU9mLmZpZWxk
TmFtZSkKKyAgICAgICAgICAgIGZpZWxkTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5maWVs
ZE5hbWUtPmNfc3RyKCkpOworICAgICAgICB0eXBlTmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5
T2YudHlwZU5hbWUpCisgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlP
Zi50eXBlTmFtZS0+Y19zdHIoKSk7CisKKyAgICAgICAgbWFuZ2xlZCA9IDA7CisgICAgICAgIGlm
IChjb3B5T2YubWFuZ2xlZCkKKyAgICAgICAgICAgIG1hbmdsZWQgPSBOZXdQb29sVFN0cmluZyhj
b3B5T2YubWFuZ2xlZC0+Y19zdHIoKSk7CisKKyAgICAgICAgc3RydWN0dXJlU2l6ZSA9IGNvcHlP
Zi5zdHJ1Y3R1cmVTaXplOworICAgICAgICBtYXhBcnJheVNpemUgPSBjb3B5T2YubWF4QXJyYXlT
aXplOworICAgICAgICBhc3NlcnQoY29weU9mLmFycmF5SW5mb3JtYXRpb25UeXBlID09IDApOwor
ICAgICAgICBhcnJheUluZm9ybWF0aW9uVHlwZSA9IDA7IC8vIGFycmF5SW5mb3JtYXRpb25UeXBl
IHNob3VsZCBub3QgYmUgc2V0IGZvciBidWlsdEluIHN5bWJvbCB0YWJsZSBsZXZlbAorICAgIH0K
KworICAgIFRUeXBlKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAg
ICAgIFRUeXBlICpuZXdUeXBlID0gbmV3IFRUeXBlKCk7CisgICAgICAgIG5ld1R5cGUtPmNvcHlU
eXBlKCp0aGlzLCByZW1hcHBlcik7CisKKyAgICAgICAgcmV0dXJuIG5ld1R5cGU7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0LCBpbnQgcywgYm9vbCBtLCBi
b29sIGEsIGludCBhUyA9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlID0g
dDsgc2l6ZSA9IHM7IG1hdHJpeCA9IG07IGFycmF5ID0gYTsgYXJyYXlTaXplID0gYVM7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBib29sIG0sIFRUeXBl
KiB1c2VyRGVmID0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGUgPSB0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHM7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRyaXggPSBtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHVzZXJEZWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
ID0gdXNlckRlZi0+Z2V0U3RydWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBsZWF2ZSBhcnJheSBpbmZvcm1hdGlvbiBpbnRhY3QuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7
IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaWVsZE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBmaWVsZE5hbWUgPSBOZXdQb29sVFN0
cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRUeXBlTmFt
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3NlcnQodHlwZU5hbWUpOworICAgICAgICByZXR1
cm4gKnR5cGVOYW1lOworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0Rmll
bGROYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydChmaWVsZE5hbWUpOworICAgICAg
ICByZXR1cm4gKmZpZWxkTmFtZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFRCYXNpY1R5cGUgZ2V0
QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIHZpcnR1YWwgVFByZWNpc2lv
biBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBwcmVjaXNpb247IH0KKyAgICB2aXJ0dWFs
IFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVyOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNoYW5nZVByZWNpc2lvbihUUHJlY2lzaW9uIHApIHsgcHJlY2lzaW9u
ID0gcDsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1YWxpZmllciBxKSB7
IHF1YWxpZmllciA9IHE7IH0KKworICAgIC8vIE9uZS1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmds
ZSBpbnN0YW5jZSB0eXBlCisgICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7
IHJldHVybiBzaXplOyB9CisKKyAgICAvLyBGdWxsLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xl
IGluc3RhbmNlIG9mIHR5cGUKKyAgICB2aXJ0dWFsIGludCBnZXRJbnN0YW5jZVNpemUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1hdHJpeCkKKyAgICAgICAgICAgIHJldHVybiBzaXplICog
c2l6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJy
YXkgPyB0cnVlIDogZmFsc2U7IH0KKyAgICBib29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBm
aWVsZE5hbWUgIT0gMDsgfQorICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiBh
cnJheVNpemU7IH0KKyAgICB2b2lkIHNldEFycmF5U2l6ZShpbnQgcykgeyBhcnJheSA9IHRydWU7
IGFycmF5U2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNldE1heEFycmF5U2l6ZSAoaW50IHMpIHsgbWF4
QXJyYXlTaXplID0gczsgfQorICAgIGludCBnZXRNYXhBcnJheVNpemUgKCkgY29uc3QgeyByZXR1
cm4gbWF4QXJyYXlTaXplOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBm
YWxzZTsgYXJyYXlTaXplID0gMDsgbWF4QXJyYXlTaXplID0gMDsgfQorICAgIHZvaWQgc2V0QXJy
YXlJbmZvcm1hdGlvblR5cGUoVFR5cGUqIHQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9
CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gYXJy
YXlJbmZvcm1hdGlvblR5cGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7
IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9CisgICAgdmlydHVhbCBib29sIGlzU2NhbGFy
KCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBlIHQpIHsKKyAg
ICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJl
dHVybiAidm9pZCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDog
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0
dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidFNhbXBsZXJD
dWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5
cGUiOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gVFR5cGU6OmdldEJhc2ljU3RyaW5nKHR5cGUpOyB9CisgICAgY29uc3Qg
Y2hhciogZ2V0UHJlY2lzaW9uU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRQcmVjaXNpb25T
dHJpbmcocHJlY2lzaW9uKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIDo6Z2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcik7IH0KKyAgICBU
VHlwZUxpc3QqIGdldFN0cnVjdCgpIHsgcmV0dXJuIHN0cnVjdHVyZTsgfQorCisgICAgaW50IGdl
dE9iamVjdFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IHRvdGFsU2l6ZTsKKworICAg
ICAgICBpZiAoZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgdG90YWxT
aXplID0gZ2V0U3RydWN0U2l6ZSgpOworICAgICAgICBlbHNlIGlmIChtYXRyaXgpCisgICAgICAg
ICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dG90YWxTaXplID0gc2l6ZTsKKworICAgICAgICBpZiAoaXNBcnJheSgpKQorICAgICAgICAgICAg
dG90YWxTaXplICo9IHN0ZDo6bWF4KGdldEFycmF5U2l6ZSgpLCBnZXRNYXhBcnJheVNpemUoKSk7
CisKKyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKKyAgICB9CisKKyAgICBUVHlwZUxpc3QqIGdl
dFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQorICAgIFRTdHJpbmcmIGdldE1h
bmdsZWROYW1lKCkgeworICAgICAgICBpZiAoIW1hbmdsZWQpIHsKKyAgICAgICAgICAgIG1hbmds
ZWQgPSBOZXdQb29sVFN0cmluZygiIik7CisgICAgICAgICAgICBidWlsZE1hbmdsZWROYW1lKCpt
YW5nbGVkKTsKKyAgICAgICAgICAgICptYW5nbGVkICs9ICc7JyA7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gKm1hbmdsZWQ7CisgICAgfQorICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNv
bnN0IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJp
Z2h0LnR5cGUgICAmJgorICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAm
JgorICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAg
ICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4gICAgICB0
eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0
LnNpemUgICAmJgorICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgor
ICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOworICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVy
LCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0ocmlnaHQpOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlw
ZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJu
IHR5cGUgPCByaWdodC50eXBlOworICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1
cm4gc2l6ZSA8IHJpZ2h0LnNpemU7CisgICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4
KSByZXR1cm4gbWF0cml4IDwgcmlnaHQubWF0cml4OworICAgICAgICBpZiAoYXJyYXkgIT0gcmln
aHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0LmFycmF5OworICAgICAgICBpZiAoYXJyYXlT
aXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6
ZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1
Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGJ1aWxkTWFuZ2xlZE5hbWUoVFN0cmluZyYpOworICAgIGludCBnZXRTdHJ1Y3RTaXpl
KCkgY29uc3Q7CisKKyAgICBUQmFzaWNUeXBlIHR5cGUgICAgICA6IDY7CisgICAgVFByZWNpc2lv
biBwcmVjaXNpb247CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgOiA3OworICAgIGludCBzaXpl
ICAgICAgICAgICAgIDogODsgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBv
ZiBhcnJheQorICAgIHVuc2lnbmVkIGludCBtYXRyaXggIDogMTsKKyAgICB1bnNpZ25lZCBpbnQg
YXJyYXkgICA6IDE7CisgICAgaW50IGFycmF5U2l6ZTsKKworICAgIFRUeXBlTGlzdCogc3RydWN0
dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAgICBtdXRhYmxlIGludCBz
dHJ1Y3R1cmVTaXplOworICAgIGludCBtYXhBcnJheVNpemU7CisgICAgVFR5cGUqIGFycmF5SW5m
b3JtYXRpb25UeXBlOworICAgIFRTdHJpbmcgKmZpZWxkTmFtZTsgICAgICAgICAvLyBmb3Igc3Ry
dWN0dXJlIGZpZWxkIG5hbWVzCisgICAgVFN0cmluZyAqbWFuZ2xlZDsKKyAgICBUU3RyaW5nICp0
eXBlTmFtZTsgICAgICAgICAgLy8gZm9yIHN0cnVjdHVyZSBmaWVsZCB0eXBlIG5hbWUKK307CisK
KyNlbmRpZiAvLyBfVFlQRVNfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2Vs
ZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3Qu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNl
IHNoCit7CitVbmZvbGRTZWxlY3Q6OlVuZm9sZFNlbGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0
LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExT
TChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3JhcnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5m
b2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBtVGVtcG9yYXJ5
SW5kZXgrKzsKKyAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKK30KKworYm9vbCBVbmZvbGRTZWxl
Y3Q6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQor
eworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1PdXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7
CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAg
aW50IGkgPSBtVGVtcG9yYXJ5SW5kZXgrKzsKKworICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wt
PnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiIHQiIDw8IGkgPDwgIjtcbiI7CisKKyAg
ICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQg
PDwgImlmKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0
SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAg
ICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8
ICIgICAgdCIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRy
YXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICI7XG4iCisgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgImVsc2VcbiIKKyAgICAgICAgICAgICAgICJ7XG4iOwor
ICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91
dCA8PCAiICAgIHQiIDw8IGkgPDwgIiA9ICI7CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2so
KS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAg
ICAgICAgICJ9XG4iOworCisgICAgICAgIG1UZW1wb3JhcnlJbmRleC0tOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW50IFVuZm9sZFNlbGVjdDo6Z2V0VGVtcG9yYXJ5SW5kZXgo
KQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5kZXg7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L1VuZm9sZFNlbGVjdC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNlbGVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXworI2RlZmluZSBDT01QSUxFUl9V
TkZPTERTRUxFQ1RfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3Mg
T3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2VsZWN0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNlbGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0
LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5v
ZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24gKm5vZGUpOworCisgICAgaW50IGdldFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJv
dGVjdGVkOgorICAgIFRQYXJzZUNvbnRleHQgJm1Db250ZXh0OworICAgIE91dHB1dEhMU0wgKmNv
bnN0IG1PdXRwdXRITFNMOworCisgICAgaW50IG1UZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNl
bmRpZiAgIC8vIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3Bw
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBE
ZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKworI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxl
ci9QYXJzZUhlbHBlci5oIgorCitzdGF0aWMgY29uc3QgaW50IGtUcmFjZUJ1ZmZlckxlbiA9IDEw
MjQ7CisKKyNpZmRlZiBUUkFDRV9FTkFCTEVECitleHRlcm4gIkMiIHsKK3ZvaWQgVHJhY2UoY29u
c3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKyAgICBpZiAoIWZvcm1hdCkgcmV0dXJuOworCisgICAg
VFBhcnNlQ29udGV4dCogcGFyc2VDb250ZXh0ID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Cisg
ICAgaWYgKHBhcnNlQ29udGV4dCkgeworICAgICAgICBjaGFyIGJ1ZltrVHJhY2VCdWZmZXJMZW5d
OworICAgICAgICB2YV9saXN0IGFyZ3M7CisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7
CisgICAgICAgIHZzbnByaW50ZihidWYsIGtUcmFjZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsK
KyAgICAgICAgdmFfZW5kKGFyZ3MpOworCisgICAgICAgIHBhcnNlQ29udGV4dC0+aW5mb1Npbmsu
ZGVidWcgPDwgYnVmOworICAgIH0KK30KK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gVFJB
Q0VfRU5BQkxFRAorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9kZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZuZGVm
IENPTVBJTEVSX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX0RFQlVHX0hfCisKKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKworI2lmZGVmIF9ERUJVRworI2RlZmluZSBUUkFDRV9FTkFCTEVEICAvLyBk
ZWZpbmUgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2UgdHJhY2luZworI2VuZGlmICAvLyBfREVCVUcK
KworLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1ZyBsb2cKKyNpZmRlZiBUUkFDRV9FTkFCTEVE
CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmICAvLyBfX2NwbHVz
cGx1cwordm9pZCBUcmFjZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisjaWZkZWYgIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCisKKyNlbHNlICAgLy8gVFJBQ0VfRU5B
QkxFRAorCisjZGVmaW5lIFRyYWNlKC4uLikgKCh2b2lkKTApCisKKyNlbmRpZiAgLy8gVFJBQ0Vf
RU5BQkxFRAorCisvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGlu
ZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCisjZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSBk
byB7IFwKKyAgICBpZighKGV4cHJlc3Npb24pKSBcCisgICAgICAgIFRyYWNlKCJBc3NlcnQgZmFp
bGVkOiAlcyglZCk6ICIjZXhwcmVzc2lvbiJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBc
CisgICAgYXNzZXJ0KGV4cHJlc3Npb24pOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgVU5JTVBM
RU1FTlRFRCgpIGRvIHsgXAorICAgIFRyYWNlKCJVbmltcGxlbWVudGVkIGludm9rZWQ6ICVzKCVk
KVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZmFsc2UpOyBcCit9
IHdoaWxlKDApCisKKyNkZWZpbmUgVU5SRUFDSEFCTEUoKSBkbyB7IFwKKyAgICBUcmFjZSgiVW5y
ZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAor
ICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUoMCkKKworI2VuZGlmICAgLy8gQ09NUElMRVJf
REVCVUdfSF8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MDAgQEAKKy8q
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworKi8KKy8qIEJhc2VkIG9uCitBTlNJIEMgZ3JhbW1hciwgTGV4
IHNwZWNpZmljYXRpb24KKworSW4gMTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIHRoaXMgTGV4IHNw
ZWNpZmljYXRpb24gdG9nZXRoZXIgd2l0aCBhIFlhY2MgCitncmFtbWFyIGZvciB0aGUgQXByaWwg
MzAsIDE5ODUgQU5TSSBDIGRyYWZ0LiAgVG9tIFN0b2NrZmlzY2ggcmVwb3N0ZWQgCitib3RoIHRv
IG5ldC5zb3VyY2VzIGluIDE5ODc7IHRoYXQgb3JpZ2luYWwsIGFzIG1lbnRpb25lZCBpbiB0aGUg
YW5zd2VyIAordG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAubGFuZy5jIEZBUSwgY2FuIGJl
IGZ0cCdlZCBmcm9tIGZ0cC51dS5uZXQsIAorZmlsZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5zaS5j
LmdyYW1tYXIuWi4gCisKK0kgaW50ZW5kIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGFzIGNsb3NlIHRv
IHRoZSBjdXJyZW50IEMgU3RhbmRhcmQgZ3JhbW1hciAKK2FzIHBvc3NpYmxlOyBwbGVhc2UgbGV0
IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMuIAorCitKdXR0YSBEZWdlbmVy
LCAxOTk1IAorKi8KKworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAgICAgIFthLXpBLVpfXQor
SCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1bKy1dP3tEfSsKK08gICAg
ICAgICAgIFswLTddCisKKyVvcHRpb24gbm91bnB1dCAKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93cyBvbmx5IHByYWdtYSAqLwor
I2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDIpCisjZW5kaWYK
KworaW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplKTsKKworZXh0ZXJuIGludCB5
eXBhcnNlKHZvaWQqKTsKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZh
bCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKigoVFBh
cnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkpCisgCisjZGVmaW5lIFlZX0lOUFVUKGJ1
ZixyZXN1bHQsbWF4X3NpemUpIChyZXN1bHQgPSB5eV9pbnB1dChidWYsIG1heF9zaXplKSkKKwor
JX0KKworLyoKK1RPRE8oYWxva3ApOiB5eWxpbmVubyBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBv
bGQgZmxleC5leGUgaW4gY29tcGlsZXIvdG9vbHMuCitSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhj
bHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyVvcHRpb24geXlsaW5lbm8KKwor
JW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQorJXggRklFTERTCisK
KworJSUKKzwqPiIvLyJbXlxuXSoiXG4iICAgICB7IC8qID8/IGNhcnJpYWdlIGFuZC9vciBsaW5l
LWZlZWQ/ICovIH07CisKKyJpbnZhcmlhbnQiICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihJTlZBUklBTlQpOyB9CisiaGlnaHAiICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSElHSF9QUkVDSVNJT04pOyB9CisibWVkaXVtcCIg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTUVESVVNX1BSRUNJ
U0lPTik7IH0KKyJsb3dwIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihMT1dfUFJFQ0lTSU9OKTsgfQorInByZWNpc2lvbiIgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBSRUNJU0lPTik7IH0KKworImF0dHJpYnV0ZSIgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFUVFJJQlVURSk7IH0KKyJj
b25zdCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT05T
VF9RVUFMKTsgfQorInVuaWZvcm0iICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFVOSUZPUk0pOyB9CisidmFyeWluZyIgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oVkFSWUlORyk7IH0KKworImJyZWFrIiAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJSRUFLKTsgfQorImNvbnRpbnVlIiAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlRJTlVFKTsgfQor
ImRvIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERP
KTsgfQorImZvciIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKEZPUik7IH0KKyJ3aGlsZSIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihXSElMRSk7IH0KKworImlmIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKElGKTsgfQorImVsc2UiICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVMU0UpOyB9CisKKyJpbiIgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTl9RVUFMKTsgfQorIm91dCIg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE9VVF9RVUFM
KTsgfQorImlub3V0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKElOT1VUX1FVQUwpOyB9CisKKyJmbG9hdCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oRkxP
QVRfVFlQRSk7IH0KKyJpbnQiICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oSU5UX1RZUEUpOyB9
Cisidm9pZCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFZPSURfVFlQRSk7IH0KKyJib29sIiAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oQk9PTF9UWVBFKTsgfQorInRydWUiICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0
dXJuKEJPT0xDT05TVEFOVCk7IH0KKyJmYWxzZSIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybihCT09MQ09OU1RBTlQp
OyB9CisKKyJkaXNjYXJkIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihESVNDQVJEKTsgfQorInJldHVybiIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFJFVFVSTik7IH0KKworIm1hdDIiICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybihNQVRSSVgyKTsgfQorIm1hdDMiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihNQVRSSVgz
KTsgfQorIm1hdDQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihNQVRSSVg0KTsgfQorCisidmVj
MiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQu
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMyKTsgfQorInZlYzMiICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9
IHRydWU7IHJldHVybiAoVkVDMyk7IH0KKyJ2ZWM0IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4g
KFZFQzQpOyB9CisiaXZlYzIiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDMik7IH0KKyJp
dmVjMyIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4
dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMzKTsgfQorIml2ZWM0IiAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybiAoSVZFQzQpOyB9CisiYnZlYzIiICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0
dXJuIChCVkVDMik7IH0KKyJidmVjMyIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMzKTsg
fQorImJ2ZWM0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzQpOyB9CisKKyJzYW1wbGVy
MkQiICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUjJEOyB9Cisic2FtcGxlckN1YmUiICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9CisKKyJzdHJ1Y3QiICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4oU1RSVUNUKTsgfQorCisiYXNtIiAgICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorCisiY2xhc3MiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorInVuaW9uIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJlbnVtIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidHlw
ZWRlZiIgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInRlbXBsYXRlIiAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ0aGlzIiAgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisicGFja2VkIiAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCisiZ290byIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorInN3aXRjaCIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKyJkZWZhdWx0IiAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisK
KyJpbmxpbmUiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisibm9pbmxp
bmUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInZvbGF0aWxlIiAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJwdWJsaWMiICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic3RhdGljIiAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImV4dGVybiIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJleHRlcm5hbCIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiaW50ZXJmYWNlIiAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisibG9u
ZyIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInNob3J0IiAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkb3VibGUiICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaGFsZiIgICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorImZpeGVkIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJ1bnNpZ25lZCIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisKKyJpbnB1dCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
b3V0cHV0IiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisiaHZlYzIi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImh2ZWMzIiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJodmVjNCIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZnZlYzIiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImZ2ZWMzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJmdmVjNCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZHZlYzIiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImR2ZWMz
IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkdmVjNCIgICAgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJzaXplb2YiICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiY2FzdCIgICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCisibmFtZXNwYWNlIiAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorInVzaW5nIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKwore0x9KHtMfXx7RH0pKiAgICAgICB7ICAKKyAgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IAorICAgcHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4
dCk7IAorICAgcmV0dXJuIFBhSWRlbnRPclR5cGUoKnB5eWx2YWwtPmxleC5zdHJpbmcsIHBhcnNl
Q29udGV4dCwgcHl5bHZhbC0+bGV4LnN5bWJvbCk7IAorfQorCiswW3hYXXtIfSsgICAgICAgICB7
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5
dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKzB7T30rICAgICAgICAgICAgIHsg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0
ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorMHtEfSsgICAgICAgICAgICAgeyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQuZXJyb3IoeXlsaW5lbm8s
ICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IHBhcnNlQ29udGV4dC5y
ZWNvdmVyKCk7IHJldHVybiAwO30KK3tEfSsgICAgICAgICAgICAgIHsgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0
dXJuKElOVENPTlNUQU5UKTsgfQorCit7RH0re0V9ICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2Yo
eXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQore0R9KyIuIntEfSooe0V9KT8geyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0
PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKyIuIntEfSso
e0V9KT8gICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQp
OyB9CisKKyIvKiIgICAgICAgICAgICB7ICBpbnQgcmV0ID0gUGFQYXJzZUNvbW1lbnQocHl5bHZh
bC0+bGV4LmxpbmUsIHBhcnNlQ29udGV4dCk7IGlmICghcmV0KSByZXR1cm4gcmV0OyB9ICAgCisK
KyIrPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
QUREX0FTU0lHTik7IH0KKyItPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oU1VCX0FTU0lHTik7IH0KKyIqPSIgICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTVVMX0FTU0lHTik7IH0KKyIvPSIgICAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRElWX0FTU0lHTik7
IH0KKyIlPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oTU9EX0FTU0lHTik7IH0KKyI8PD0iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BU1NJR04pOyB9CisiPj49IiAgICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KKyImPSIg
ICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQU5EX0FT
U0lHTik7IH0KKyJePSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oWE9SX0FTU0lHTik7IH0KKyJ8PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1JfQVNTSUdOKTsgfQorCisiKysiICAgICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOQ19PUCk7IH0KKyItLSIg
ICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oREVDX09Q
KTsgfQorIiYmIiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihBTkRfT1ApOyB9CisifHwiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKE9SX09QKTsgfQorIl5eIiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfT1ApOyB9CisiPD0iICAgICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFX09QKTsgfQorIj49IiAgICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihHRV9PUCk7IH0K
KyI9PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
RVFfT1ApOyB9CisiIT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKE5FX09QKTsgfQorIjw8IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihMRUZUX09QKTsgfQorIj4+IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9PUCk7IH0KKyI7IiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KKygieyJ8IjwlIikgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQorKCJ9InwiJT4iKSAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9CUkFDRSk7IH0KKyIsIiAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IGlmIChwYXJzZUNvbnRleHQuaW5UeXBlUGFy
ZW4pIHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKENPTU1BKTsgfQor
IjoiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTE9O
KTsgfQorIj0iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oRVFVQUwpOyB9CisiKCIgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gZmFsc2U7IHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbiA9IHRydWU7IHJldHVybihMRUZU
X1BBUkVOKTsgfQorIikiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0K
KygiWyJ8Ijw6IikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
TEVGVF9CUkFDS0VUKTsgfQorKCJdInwiOj4iKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihSSUdIVF9CUkFDS0VUKTsgfQorIi4iICAgICAgICAgeyBCRUdJTihG
SUVMRFMpOyAgcmV0dXJuKERPVCk7IH0KKyIhIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihCQU5HKTsgfQorIi0iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERBU0gpOyB9CisifiIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVElMREUpOyB9CisiKyIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUExVUyk7IH0KKyIqIiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVEFSKTsgfQorIi8iICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNMQVNIKTsgfQor
IiUiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBFUkNF
TlQpOyB9CisiPCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oTEVGVF9BTkdMRSk7IH0KKyI+IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihSSUdIVF9BTkdMRSk7IH0KKyJ8IiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihWRVJUSUNBTF9CQVIpOyB9CisiXiIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ0FSRVQpOyB9CisiJiIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQU1QRVJTQU5EKTsg
fQorIj8iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFFV
RVNUSU9OKTsgfQorCis8RklFTERTPntMfSh7TH18e0R9KSogeyAKK0JFR0lOKElOSVRJQUwpOyAg
ICAgIAorICAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87ICAgICAKKyAgICBweXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICAgcmV0dXJuIEZJRUxE
X1NFTEVDVElPTjsgfQorPEZJRUxEUz5bIFx0XHZcZlxyXSB7fQorCitbIFx0XHZcblxmXHJdICAg
eyAgfQorPCo+PDxFT0Y+PiB7ICgmcGFyc2VDb250ZXh0KS0+QWZ0ZXJFT0YgPSB0cnVlOyB5eV9k
ZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsgeXl0ZXJtaW5hdGUoKTt9Cis8Kj4uICAg
IHsgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8gPDwgIkZMRVg6IFVua25vd24gY2hhciAiIDw8
IHl5dGV4dCA8PCAiXG4iOworICAgICAgICAgIHJldHVybiAwOyB9CisKKyUlCisKKworLy9JbmNs
dWRpbmcgUHJlLXByb2Nlc3Nvci4KK2V4dGVybiAiQyIgeworICAjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKK30gCisKKy8vCisvLyBUaGUgWVlfSU5QVVQgbWFj
cm8ganVzdCBjYWxscyB0aGlzLiAgTWF5YmUgdGhpcyBjb3VsZCBiZSBqdXN0IHB1dCBpbnRvCisv
LyB0aGUgbWFjcm8gZGlyZWN0bHkuCisvLworCitpbnQgeXlfaW5wdXQoY2hhciogYnVmLCBpbnQg
bWF4X3NpemUpCit7CisgICAgaW50IGxlbjsKKworICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1
ZiwgbWF4X3NpemUpKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuID49IG1h
eF9zaXplKSAKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBidWZmZXIgb3ZlcmZsb3cs
IGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIgKTsKKwor
ICAgIGJ1ZltsZW5dID0gJyAnOworCXJldHVybiBsZW4rMTsKK30KKworCisvLworLy8gUGFyc2Ug
YW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNlLiAgV2Ugc2V0IHVwIGdsb2JhbHMgdXNl
ZCBieQorLy8geXl3cmFwLgorLy8KKy8vIFJldHVybnMgMCBmb3Igc3VjY2VzcywgYXMgcGVyIHl5
cGFyc2UoKS4KKy8vCitpbnQgUGFQYXJzZVN0cmluZ3MoY2hhciogYXJndltdLCBpbnQgc3RyTGVu
W10sIGludCBhcmdjLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCkKK3sKKyAgICBp
bnQgYXJndjBsZW47CisgICAgCisgICAgU2NhbkZyb21TdHJpbmcoYXJndlswXSk7IAorICAgIAor
ICAgIC8vU3RvcmluZyB0aGUgQ3VycmVudCBDb21waWxlciBQYXJzZSBjb250ZXh0IGludG8gdGhl
IGNwcCBzdHJ1Y3R1cmUuCisJY3BwLT5wQyA9ICh2b2lkKikmcGFyc2VDb250ZXh0TG9jYWw7CisJ
CisJaWYgKCFhcmd2IHx8IGFyZ2MgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kpIHsKKyAgICAgICAgaWYgKCFhcmd2W2ldKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcigwLCAiTnVsbCBzaGFkZXIgc291
cmNlIHN0cmluZyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5yZWNv
dmVyKCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoIXN0ckxlbikgeworICAgICAgICBhcmd2MGxlbiA9IChpbnQpIHN0cmxlbihhcmd2WzBd
KTsKKyAgICAgICAgc3RyTGVuICAgPSAmYXJndjBsZW47CisgICAgfQorICAgIHl5cmVzdGFydCgw
KTsKKyAgICAoJnBhcnNlQ29udGV4dExvY2FsKS0+QWZ0ZXJFT0YgPSBmYWxzZTsKKyAgICBjcHAt
PlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IGFyZ3Y7CisgICAgY3BwLT5Q
YUFyZ2MgICAgID0gYXJnYzsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBzdHJMZW47CisgICAgY3Bw
LT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOworICAgIHl5bGluZW5vICAgPSAxOworICAgCisgICAg
aWYgKCpjcHAtPlBhU3RyTGVuID49IDApIHsgICAgCisgICAgICAgIGludCByZXQgPSB5eXBhcnNl
KCh2b2lkKikoJnBhcnNlQ29udGV4dExvY2FsKSk7CisgICAgICAgIGlmIChjcHAtPkNvbXBpbGVF
cnJvciA9PSAxIHx8IHBhcnNlQ29udGV4dExvY2FsLnJlY292ZXJlZEZyb21FcnJvciB8fCBwYXJz
ZUNvbnRleHRMb2NhbC5udW1FcnJvcnMgPiAwKQorICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeXllcnJvcihjaGFyICpzKSAKK3sKKyAgICBpZiAoKChU
UGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkFmdGVyRU9GKSB7CisgICAgICAgIGlmIChjcHAtPnRv
a2Vuc0JlZm9yZUVPRiA9PSAxKSB7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCAic3ludGF4IGVycm9yIiwgInByZS1tYXR1cmUgRU9GIiwgcywgIiIpOwor
ICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
c3ludGF4IGVycm9yIiwgeXl0ZXh0LCBzLCAiIik7CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgIH0gICAgICAgICAgICAKK30KKwordm9pZCBQYVJlc2VydmVkV29y
ZCgpCit7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5lcnJvcih5eWxpbmVubywgIlJlc2VydmVk
IHdvcmQuIiwgeXl0ZXh0LCAiIiwgIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworfQorCitpbnQgUGFJZGVudE9yVHlwZShUU3RyaW5nJiBpZCwgVFBhcnNlQ29udGV4dCYg
cGFyc2VDb250ZXh0TG9jYWwsIFRTeW1ib2wqJiBzeW1ib2wpCit7CisgICAgc3ltYm9sID0gcGFy
c2VDb250ZXh0TG9jYWwuc3ltYm9sVGFibGUuZmluZChpZCk7CisgICAgaWYgKHBhcnNlQ29udGV4
dExvY2FsLmxleEFmdGVyVHlwZSA9PSBmYWxzZSAmJiBzeW1ib2wgJiYgc3ltYm9sLT5pc1Zhcmlh
YmxlKCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJp
YWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5sZXhBZnRlclR5cGUgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIFRZUEVfTkFNRTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gSURFTlRJRklFUjsKK30KKworaW50IFBhUGFyc2VDb21tZW50KGludCAmbGluZW5vLCBUUGFy
c2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCkKK3sKKyAgICBpbnQgdHJhbnNpdGlvbkZsYWcg
PSAwOworICAgIGludCBuZXh0Q2hhcjsKKyAgICAKKyAgICB3aGlsZSAodHJhbnNpdGlvbkZsYWcg
IT0gMikgeworICAgICAgICBuZXh0Q2hhciA9IHl5aW5wdXQoKTsKKyAgICAgICAgaWYgKG5leHRD
aGFyID09ICdcbicpCisgICAgICAgICAgICAgbGluZW5vKys7CisgICAgICAgIHN3aXRjaCAobmV4
dENoYXIpIHsKKyAgICAgICAgY2FzZSAnKicgOgorICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcg
PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy8nIDogIC8qIGlmIHN0YXIg
aXMgdGhlIHByZXZpb3VzIGNoYXJhY3RlciwgdGhlbiBpdCBpcyB0aGUgZW5kIG9mIGNvbW1lbnQg
Ki8KKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uRmxhZyA9PSAxKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDEgOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9GIDoKKyAgICAgICAgICAgIC8qIFJhaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSAqLwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwuZXJyb3IoeXlsaW5lbm8sICJFbmQgb2Ygc2hh
ZGVyIGZvdW5kIGJlZm9yZSBlbmQgb2YgY29tbWVudC4iLCAiIiwgIiIsICIiKTsKKyAgICAgICAg
ICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgcmV0dXJuIFlZ
X05VTEw7IAorICAgICAgICBkZWZhdWx0IDogIC8qIEFueSBvdGhlciBjaGFyYWN0ZXIgd2lsbCBi
ZSBhIHBhcnQgb2YgdGhlIGNvbW1lbnQgKi8KKyAgICAgICAgICAgIHRyYW5zaXRpb25GbGFnID0g
MDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworZXh0ZXJuICJDIiB7CisK
K3ZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQoreworICAgICgoVFBhcnNlQ29u
dGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cp
OworfQorCit2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQoreworICAg
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eFdhcm5pbmcsIG1zZywgeXlsaW5lbm8pOyAKK30KKwordm9pZCBDUFBTaEluZm9Mb2dNc2coY29u
c3QgY2hhciAqbXNnKQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5lcnJvcih5
eWxpbmVubywiIiwgIiIsbXNnLCIiKTsKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKK30KKwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCit7CisgICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCJzeW50YXggZXJyb3IiLCAiIixt
c2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworfQorCit2b2lkIFNl
dExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgeXlsaW5lbm8gJj0gflNvdXJjZUxvY0xpbmVN
YXNrOworICAgIHl5bGluZW5vIHw9IGxpbmU7Cit9CisKK3ZvaWQgU2V0U3RyaW5nTnVtYmVyKGlu
dCBzdHJpbmcpCit7CisgICAgeXlsaW5lbm8gPSAoc3RyaW5nIDw8IFNvdXJjZUxvY1N0cmluZ1No
aWZ0KSB8ICh5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrKTsKK30KKworaW50IEdldFN0cmlu
Z051bWJlcih2b2lkKQoreworICAgIHJldHVybiB5eWxpbmVubyA+PiAxNjsKK30KKworaW50IEdl
dExpbmVOdW1iZXIodm9pZCkKK3sKKyAgICByZXR1cm4geXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5l
TWFzazsKK30KKwordm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpCit7CisgICAgaWYgKCh5eWxpbmVu
byAmIFNvdXJjZUxvY0xpbmVNYXNrKSA8PSBTb3VyY2VMb2NMaW5lTWFzaykKKyAgICAgICAgKyt5
eWxpbmVubzsKK30KKwordm9pZCBEZWNMaW5lTnVtYmVyKHZvaWQpCit7CisgICAgaWYgKCh5eWxp
bmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrKSA+IDApCisgICAgICAgIC0teXlsaW5lbm87Cit9CisK
K3ZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBudW1Ub2tlbnMpCit7
ICAgIAorICAgIGlmICghc3RyY21wKHRva2Vuc1swXSwgIm9wdGltaXplIikpIHsKKyAgICAgICAg
aWYgKG51bVRva2VucyAhPSA0KSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGlt
aXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7
CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRp
bWl6ZScga2V5d29yZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKKyAgICAgICAgICAg
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1
ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKKyAgICAgICAg
ICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0g
ZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9u
XCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChz
dHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
KVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVn
IikpIHsKKyAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7CisgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAodG9rZW5z
WzFdLCAiKCIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVk
IGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKKyAg
ICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVn
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKKyAg
ICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVn
ID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJc
Im9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChz
dHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
KVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKworI2lmZGVmIFBSQUdNQV9UQUJMRQorICAgICAg
ICAvLworICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwcmFnbWEKKyAgICAgICAg
Ly8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEKKyAgICAgICAgLy8gRm9y
IG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5u
b3QgcmVjb2duaXplCisgICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50
YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UKKyAgICAgICAgLy8gI3By
YWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQorICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFt
ZSBpbiBwcmFnbWFUYWJsZS4KKyAgICAgICAgLy8gICAgICAgIAorICAgICAgICBpZiAobnVtVG9r
ZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10s
ICIpIikpIHsgICAgICAgICAgICAgIAorICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFU
YWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRh
YmxlOworICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOworICAgICAgICAg
ICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKKyAgICAgICAg
ICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaXRl
ci0+c2Vjb25kID0gdG9rZW5zWzJdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9
ICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0gMikgeworICAgICAgICAg
ICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMp
LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOworICAgICAgICAgICAgVFByYWdtYVRhYmxlOjpp
dGVyYXRvciBpdGVyOworICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmlu
Zyh0b2tlbnNbMF0pKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgp
KSB7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzFdOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0
b2tlbnNbMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvLyBQUkFHTUFfVEFC
TEUKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmVTdHIoY2hhciAqc3RyaW5nKQoreworICAgIFRTdHJp
bmcgc3RyU3JjOworICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsKKworICAgICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPkhhc2hFcnJNc2cgKyAiICIgKyBzdHJTcmM7Cit9CisKK2NvbnN0IGNoYXIqIEdldFN0cmZy
b21UU3RyKHZvaWQpCit7CisgICAgY3BwLT5FcnJNc2cgPSAoKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPkhhc2hFcnJNc2cpLmNfc3RyKCk7CisgICAgcmV0dXJuIGNwcC0+RXJyTXNnOworfQor
Cit2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5IYXNoRXJyTXNnID0gIiI7Cit9CisKK1RCZWhhdmlvciBHZXRCZWhhdmlvcihjb25zdCBj
aGFyKiBiZWhhdmlvcikKK3sKKyAgICBpZiAoIXN0cmNtcCgicmVxdWlyZSIsIGJlaGF2aW9yKSkK
KyAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgiZW5hYmxl
IiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoRW5hYmxlOworICAgIGVsc2UgaWYgKCFz
dHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOwor
ICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBF
QmhXYXJuOworICAgIGVsc2UgeworICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImJl
aGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICB9ICAgICAgICAKK30KKwordm9pZCAgdXBk
YXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVo
YXZpb3IpCit7CisgICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZp
b3IpOworICAgIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7CisgICAg
VFN0cmluZyBtc2c7CisgICAgCisgICAgLy8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lv
bgorICAgIGlmICghc3RyY21wKGV4dE5hbWUsICJhbGwiKSkgeworICAgICAgICBpZiAoYmVoYXZp
b3JWYWwgPT0gRUJoUmVxdWlyZSB8fCBiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsKKyAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1
aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlvciIpOyAgCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGl0ZXIgPSAgKChUUGFyc2VDb250ZXh0ICop
Y3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0gKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAg
ICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAgIH0gICAgICAgIAor
ICAgIH0gZWxzZSB7CisgICAgICAgIGl0ZXIgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+
ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5nKGV4dE5hbWUpKTsKKyAgICAgICAgaWYgKGl0
ZXIgPT0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CisgICAgICAgICAgICBjYXNl
IEVCaFJlcXVpcmU6CisgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJl
eHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsg
IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFQmhFbmFibGU6Cisg
ICAgICAgICAgICBjYXNlIEVCaFdhcm46CisgICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6Cisg
ICAgICAgICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAi
JyBpcyBub3Qgc3VwcG9ydGVkIjsKKyAgICAgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIo
KSwgeXlsaW5lbm8pOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNv
bmQgPSBiZWhhdmlvclZhbDsKKyAgICB9Cit9CisgICAgICAgIAorfSAgLy8gZXh0ZXJuICJDIgor
Cit2b2lkIHNldEluaXRpYWxTdGF0ZSgpCit7CisgICAgeXlfc3RhcnQgPSAxOworfQpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xh
bmcueQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTczIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvKioKKyAqIFRoaXMgaXMgYmlzb24gZ3JhbW1hciBhbmQgcHJvZHVjdGlvbiBjb2RlIGZvciBw
YXJzaW5nIHRoZSBPcGVuR0wgMi4wIHNoYWRpbmcKKyAqIGxhbmd1YWdlcy4KKyAqLworJXsKKwor
LyogQmFzZWQgb246CitBTlNJIEMgWWFjYyBncmFtbWFyCisKK0luIDE5ODUsIEplZmYgTGVlIHB1
Ymxpc2hlZCBoaXMgWWFjYyBncmFtbWFyICh3aGljaCBpcyBhY2NvbXBhbmllZCBieSBhCittYXRj
aGluZyBMZXggc3BlY2lmaWNhdGlvbikgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBkcmFmdCB2ZXJz
aW9uIG9mIHRoZQorQU5TSSBDIHN0YW5kYXJkLiAgVG9tIFN0b2NrZmlzY2ggcmVwb3N0ZWQgaXQg
dG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdAorb3JpZ2luYWwsIGFzIG1lbnRpb25lZCBpbiB0
aGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21wLmxhbmcuYworRkFRLCBjYW4g
YmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgZmlsZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5zaS5j
LmdyYW1tYXIuWi4KKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8g
dGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIGFzCitwb3NzaWJsZTsgcGxlYXNlIGxldCBt
ZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLgorCitKdXR0YSBEZWdlbmVyLCAx
OTk1CisqLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKy8qCitUT0RPKGFsb2tw
KTogWVlQQVJTRV9QQVJBTV9ERUNMIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9sZCBiaXNvbi5l
eGUgaW4KK2NvbXBpbGVyL3Rvb2xzLiBSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZlbHkg
dXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZv
aWQqCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRM
b2NhbCkpCisjZGVmaW5lIFlZTEVYX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCisjZGVmaW5lIFlZ
X0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2Fs
KQorZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7CisKKyNkZWZpbmUgRlJBR19WRVJUX09OTFko
UywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdGcmFnbWVudCAmJiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmxhbmd1
YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFn
bWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICBcCisgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5l
IFZFUlRFWF9PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hM
YW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIs
IFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBGUkFHX09OTFko
UywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUEFDS19PTkxZKFMsIEwpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdQYWNrKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIg
c3VwcG9ydGVkIGluIHBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAg
ICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorfQorCisjZGVmaW5lIFVOUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VD
b250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBp
biB1bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKworI2RlZmluZSBQQUNLX1VOUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFu
Z3VhZ2UgIT0gRVNoTGFuZ1VucGFjayAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
TCwgIiBzdXBwb3J0ZWQgaW4gcGFjay91bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7
ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCit9CislfQorJXVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBU
U291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0
cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAg
ICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0g
bGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9w
ZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVj
aXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRG
dW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAg
ICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlz
dDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKK30KKworJXsKKyAgICBleHRlcm4gaW50IHl5
bGV4KFlZU1RZUEUqLCB2b2lkKik7CislfQorCislcHVyZV9wYXJzZXIgLyogSnVzdCBpbiBjYXNl
IGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgKi8KKyVleHBlY3QgMSAvKiBPbmUgc2hp
ZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCisldG9rZW4gPGxleD4g
SU5WQVJJQU5UIEhJR0hfUFJFQ0lTSU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQ
UkVDSVNJT04KKyV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxP
QVRfVFlQRSBJTlRfVFlQRQorJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9S
IElGIERJU0NBUkQgUkVUVVJOCisldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIg
SVZFQzMgSVZFQzQgVkVDMiBWRUMzIFZFQzQKKyV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJWDMg
TUFUUklYNCBJTl9RVUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCisldG9r
ZW4gPGxleD4gU1RSVUNUIFZPSURfVFlQRSBXSElMRQorJXRva2VuIDxsZXg+IFNBTVBMRVIyRCBT
QU1QTEVSQ1VCRQorCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxPQVRDT05T
VEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJ
T04KKyV0b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hUX09QCisldG9rZW4gPGxleD4gSU5DX09QIERF
Q19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9PUAorJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBY
T1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdOIEFERF9BU1NJR04KKyV0b2tlbiA8bGV4PiBNT0Rf
QVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FTU0lHTiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1Jf
QVNTSUdOCisldG9rZW4gPGxleD4gU1VCX0FTU0lHTgorCisldG9rZW4gPGxleD4gTEVGVF9QQVJF
TiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hU
X0JSQUNFIERPVAorJXRva2VuIDxsZXg+IENPTU1BIENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5H
IERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNIIFBFUkNFTlQKKyV0b2tlbiA8bGV4PiBMRUZUX0FO
R0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JBUiBDQVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KKwor
JXR5cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVyYXRvciB1bmFyeV9vcGVyYXRvcgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlhYmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHBy
ZXNzaW9uIHBvc3RmaXhfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+
IGV4cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9uIGFzc2lnbm1lbnRfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVuYXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9uIGVxdWFsaXR5X2V4cHJlc3Npb24KKyV0eXBl
IDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25kaXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50
X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4
cHJlc3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lvbiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCisl
dHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gc2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVz
c2lvbiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29u
ZGl0aW9uIGNvbmRpdGlvbm9wdAorCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0
aW9uX3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBz
dGF0ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+
ICBzdGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJt
Tm9kZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNlbGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lv
bl9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJu
YWxfZGVjbGFyYXRpb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVt
ZW50IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0ubm9kZVBh
aXI+IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQKKyV0eXBlIDxp
bnRlcm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlCisldHlwZSA8aW50ZXJtPiBzaW5nbGVfZGVjbGFyYXRpb24gaW5p
dF9kZWNsYXJhdG9yX2xpc3QKKworJXR5cGUgPGludGVybT4gcGFyYW1ldGVyX2RlY2xhcmF0aW9u
IHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllcgorJXR5cGUgPGlu
dGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIKKworJXR5cGUgPGludGVybS5wcmVj
aXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFs
aWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9ub25hcnJheQorJXR5
cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnR5cGVMaW5l
PiBzdHJ1Y3RfZGVjbGFyYXRvcgorJXR5cGUgPGludGVybS50eXBlTGlzdD4gc3RydWN0X2RlY2xh
cmF0b3JfbGlzdCBzdHJ1Y3RfZGVjbGFyYXRpb24gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKKyV0
eXBlIDxpbnRlcm0uZnVuY3Rpb24+IGZ1bmN0aW9uX2hlYWRlciBmdW5jdGlvbl9kZWNsYXJhdG9y
IGZ1bmN0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpbnRlcm0uZnVuY3Rpb24+IGZ1bmN0aW9uX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9oZWFkZXIKKyV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUK
KyV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCisKKyVzdGFydCB0cmFuc2xh
dGlvbl91bml0CislJQorCit2YXJpYWJsZV9pZGVudGlmaWVyCisgICAgOiBJREVOVElGSUVSIHsK
KyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGlj
YWwgcGhhc2UKKyAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOworICAg
ICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICBpZiAoc3ltYm9sID09IDAp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQg
aWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gZmFr
ZVZhcmlhYmxlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlm
aWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlwZSBzeW1ib2wKKyAgICAgICAgICAgIGlmICgh
IHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4o
c3ltYm9sKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5zdHJpbmcs
IGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sCisgICAgICAgIC8vIHBv
cCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorCisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgeworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAg
ICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgJDEu
bGluZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpOworICAgIH0KKyAgICA7CisKK3ByaW1h
cnlfZXhwcmVzc2lvbgorICAgIDogdmFyaWFibGVfaWRlbnRpZmllciB7CisgICAgICAgICQkID0g
JDE7CisgICAgfQorICAgIHwgSU5UQ09OU1RBTlQgeworICAgICAgICAvLworICAgICAgICAvLyBJ
TlRfVFlQRSBpcyBvbmx5IDE2LWJpdCBwbHVzIHNpZ24gYml0IGZvciB2ZXJ0ZXgvZnJhZ21lbnQg
c2hhZGVycywKKyAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKKyAg
ICAgICAgLy8KKyAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJm
bG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCQxLmkpOworICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAg
fQorICAgIHwgRkxPQVRDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0
KCQxLmYpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBCT09MQ09OU1RBTlQgeworICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdCgkMS5iKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBMRUZUX1BBUkVO
IGV4cHJlc3Npb24gUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7
CisKK3Bvc3RmaXhfZXhwcmVzc2lvbgorICAgIDogcHJpbWFyeV9leHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VU
IGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKCEkMS0+aXNB
cnJheSgpICYmICEkMS0+aXNNYXRyaXgoKSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAg
ICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBt
YXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0KSB7CisgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgeyAvLyBjb25zdGFudCBmb2xk
aW5nIGZvciBhcnJheXMKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29u
c3RBcnJheU5vZGUoJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpLT5nZXRJQ29uc3QoKSwgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgk
MS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAg
ICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5u
dW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsgLy8gbmVl
ZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJy
YXkKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2Rl
KGZpZWxkcywgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRy
aXgoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBtYXRyaWNlcworICAgICAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdE1hdHJpeE5vZGUoJDMtPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgJDEsICQyLmxpbmUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCQzLT5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgIGlmICgoJDEtPmlz
VmVjdG9yKCkgfHwgJDEtPmlzTWF0cml4KCkpICYmICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpICYmICEkMS0+aXNBcnJheSgpICkgeworICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0
IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRNYXhBcnJheVNpemUoKSA8PSAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2V0TWF4
U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2RlKCksICQxLT5nZXRUeXBlUG9pbnRlcigpLCAkMy0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCB0
cnVlLCAkMi5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5
U2V0TWF4U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2RlKCksICQxLT5nZXRUeXBlUG9pbnRlcigpLCAw
LCBmYWxzZSwgJDIubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICQxLT5nZXRUeXBlKCku
Z2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyVk
JyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0
SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCAkMywgJDIubGluZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXko
KSAmJiAkMS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgbXVzdCBi
ZSByZWRlY2xhcmVkIHdpdGggYSBzaXplIGJlZm9yZSBiZWluZyBpbmRleGVkIHdpdGggYSB2YXJp
YWJsZSIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5kaXJlY3QsICQxLCAkMywgJDIubGluZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBl
bHNlIGlmICgkMS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpLCAkMS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNU
eXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNp
emUoKSwgJDEtPmlzTWF0cml4KCkpKTsKKworICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQ
b2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgIH0gZWxzZSBpZiAo
JDEtPmlzTWF0cml4KCkgJiYgJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25z
dCkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEt
PmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAg
ICAgZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlw
ZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAk
MS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICBlbHNlIGlmICgkMS0+aXNWZWN0b3IoKSAm
JiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCks
IEV2cUNvbnN0KSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpKQorICAgICAgICAg
ICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAkJC0+c2V0VHlw
ZSgkMS0+Z2V0VHlwZSgpKTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsIHsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVD
VElPTiB7CisgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFy
cmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgVFZl
Y3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNl
VmVjdG9yRmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICQz
LmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAg
ICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2
ZWN0b3IgZmllbGRzCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0
VmVjdG9yTm9kZShmaWVsZHMsICQxLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0
QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3Ry
aW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KGZpZWxkcy5udW0gPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7CisgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQzLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUp
OworICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQzLnN0cmluZzsKKyAgICAg
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxl
LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7CisgICAgICAgICAg
ICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+
cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxk
cywgJDMubGluZSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMucm93ID0gMDsKKyAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKKyAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKKyAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVs
ZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7CisgICAgICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERp
cmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3Jhcnks
ICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICQxLT5n
ZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICAgICAgVEludGVybVR5
cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGlu
ZSk7CisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwor
ICAgICAgICAgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
OworICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJu
YWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqZmllbGRz
KVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAqJDMuc3RyaW5nKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKiQzLnN0cmluZywgJDEsICQy
LmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0
aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhl
IHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJl
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hh
bmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksICooKmZpZWxkcylbaV0udHlwZSwgJDMubGluZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0
cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVp
cmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5z
dHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24ndCBkZWxl
dGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gSU5DX09QIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JD
aGVjaygkMi5saW5lLCAiKysiLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUG9zdEluY3JlbWVudCwgJDEsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51
bmFyeU9wRXJyb3IoJDIubGluZSwgIisrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERFQ19PUCB7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgIi0tIiwgJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQx
LCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQyLmxpbmUsICIt
LSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7
CisKK2ludGVnZXJfZXhwcmVzc2lvbgorICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCQxLCAiW10iKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisK
K2Z1bmN0aW9uX2NhbGwKKyAgICA6IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIHsKKyAgICAgICAg
VEZ1bmN0aW9uKiBmbkNhbGwgPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0g
Zm5DYWxsLT5nZXRCdWlsdEluT3AoKTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQg
YmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5
bWJvbCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1l
dGVycyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhp
cyB0byBnZXQgdGhlIHR5cGUgYmFjaworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y29u
c3RydWN0b3JFcnJvckNoZWNrKCQxLmxpbmUsICQxLmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAm
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSXQncyBhIGNvbnN0cnVjdG9y
LCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdHJ1Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3As
IGZuQ2FsbCwgJDEubGluZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcigwLCBvcCwgJDEubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkJC0+c2V0
VHlwZSh0eXBlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQgaXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwor
ICAgICAgICAgICAgYm9vbCBidWlsdEluOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBwYXJz
ZUNvbnRleHQtPmZpbmRGdW5jdGlvbigkMS5saW5lLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAg
ICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4gIEJ1dCwgaXQgbWlnaHQgc3RpbGwgbWFwIHRv
IGEgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24uCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsK
KyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBt
YXBwZWQgdG8gYSBidWlsdC1pbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDAp
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5p
bnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVy
cm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWx0IGluIHVuYXJ5IG9w
ZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9S
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAkMS5saW5lKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uIGNhbGwKKworICAgICAgICAg
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25DYWxsLCAkMS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUo
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVy
IHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIGJ1aWx0SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmlu
ZWQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwg
aXQncyBhIHVzZXJEZWZpbmVkIC0+IGNvdWxkIGJlIGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5j
dGlvbiBhbHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQn
cyBkZWZpbml0ZWx5IGEgYnVpbHRJbiBmdW5jdGlvbiB3aXRoIEVPcE51bGwKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFidWlsdEluKQorICAgICAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFz
QWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgICQkLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKGZuQ2FuZGlkYXRlLT5nZXRNYW5nbGVkTmFtZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWw7CisgICAgICAgICAgICAgICAg
ICAgIFRRdWFsaWZpZXJMaXN0JiBxdWFsaWZpZXJMaXN0ID0gJCQtPmdldEFzQWdncmVnYXRlKCkt
PmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcXVhbCA9ICgqZm5DYW5kaWRhdGUpW2ldLnR5cGUtPmdldFF1YWxpZmllcigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5P
dXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUo
KS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUo
KSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcg
cGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHF1
YWxpZmllckxpc3QucHVzaF9iYWNrKHF1YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5n
ZXRSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBlcnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAg
ICAgICAgICAvLyBQdXQgb24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQorICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEu
bGluZSk7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGZuQ2FsbDsKKyAgICB9CisgICAgOwor
CitmdW5jdGlvbl9jYWxsX29yX21ldGhvZAorICAgIDogZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGZ1
bmN0aW9uX2NhbGxfZ2VuZXJpYyB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMubGlu
ZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitmdW5j
dGlvbl9jYWxsX2dlbmVyaWMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1l
dGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAk
Mi5saW5lOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMg
UklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5saW5lID0gJDIubGlu
ZTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzCisg
ICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBWT0lEX1RZUEUgeworICAgICAgICAkJC5mdW5jdGlv
biA9ICQxOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gMDsKKyAgICB9CisgICAgfCBmdW5jdGlv
bl9jYWxsX2hlYWRlciB7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmlu
dGVybU5vZGUgPSAwOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhf
cGFyYW1ldGVycworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXIgYXNzaWdubWVudF9leHByZXNz
aW9uIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQyLT5nZXRU
eXBlKCkpIH07CisgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAkJC5m
dW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gJDI7CisgICAgfQorICAgIHwg
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMy0+
Z2V0VHlwZSgpKSB9OworICAgICAgICAkMS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsK
KyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgJCQuaW50ZXJtTm9k
ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9k
ZSwgJDMsICQyLmxpbmUpOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyCisg
ICAgOiBmdW5jdGlvbl9pZGVudGlmaWVyIExFRlRfUEFSRU4geworICAgICAgICAkJCA9ICQxOwor
ICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2Ug
ZnVuY3Rpb25zLCBidXQgYXJlIHJlY29nbml6ZWQgYXMgdHlwZXMuCisKK2Z1bmN0aW9uX2lkZW50
aWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29u
c3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExf
YXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKKyAgICAgICAgICAgIFRTdHJp
bmcgdGVtcFN0cmluZyA9ICIiOworICAgICAgICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAg
ICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlw
ZSwgRU9wQ29uc3RydWN0U3RydWN0KTsKKyAgICAgICAgICAgICQkID0gZnVuY3Rpb247CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgICAg
ICAgICAgc3dpdGNoICgkMS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAg
ICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMy
OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAg
RlJBR19WRVJUX09OTFkoIml2ZWMyIiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoIml2
ZWMzIiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgNDogICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWM0IiwgJDEubGluZSk7IG9w
ID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMyIiwg
JDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMzIiwgJDEubGluZSk7IG9wID0gRU9w
Q29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgRlJB
R19WRVJUX09OTFkoImJ2ZWM0IiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUi
LCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSksICIiKTsKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0Rmxv
YXQ7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZyA9ICIiOworICAgICAgICAgICAgVFR5
cGUgdHlwZSgkMSk7CisgICAgICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5j
dGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAgICAgICAgJCQgPSBmdW5jdGlvbjsK
KyAgICAgICAgfQorICAgIH0KKyAgICB8IElERU5USUZJRVIgeworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5j
dGlvbigkMS5zdHJpbmcsIHR5cGUpOworICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAg
ICB8IEZJRUxEX1NFTEVDVElPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywg
dHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAgIDsKKwordW5hcnlfZXhw
cmVzc2lvbgorICAgIDogcG9zdGZpeF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAg
ICB9CisgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGluZSwgIisrIiwgJDIpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsICQxLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIisrIiwgJDItPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwgREVDX09QIHVuYXJ5X2V4
cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQx
LmxpbmUsICItLSIsICQyKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
cmVEZWNyZW1lbnQsICQyLCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVy
cm9yKCQxLmxpbmUsICItLSIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAg
ICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCAkMS5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCgk
MS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICIt
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0g
IiEiOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGlu
ZSwgZXJyb3JPcCwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkID0gJDI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAg
OworLy8gR3JhbW1hciBOb3RlOiAgTm8gdHJhZGl0aW9uYWwgc3R5bGUgdHlwZSBjYXN0cy4KKwor
dW5hcnlfb3BlcmF0b3IKKyAgICA6IFBMVVMgIHsgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0g
RU9wTnVsbDsgfQorICAgIHwgREFTSCAgeyAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BO
ZWdhdGl2ZTsgfQorICAgIHwgQkFORyAgeyAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BM
b2dpY2FsTm90OyB9CisgICAgOworLy8gR3JhbW1hciBOb3RlOiAgTm8gJyonIG9yICcmJyB1bmFy
eSBvcHMuICBQb2ludGVycyBhcmUgbm90IHN1cHBvcnRlZC4KKworbXVsdGlwbGljYXRpdmVfZXhw
cmVzc2lvbgorICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgRlJB
R19WRVJUX09OTFkoIioiLCAkMi5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiKiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9
CisgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIFNMQVNIIHVuYXJ5X2V4cHJlc3Npb24g
eworICAgICAgICBGUkFHX1ZFUlRfT05MWSgiLyIsICQyLmxpbmUpOworICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsICQy
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIvIiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICA7CisKK2FkZGl0aXZlX2V4cHJlc3Npb24KKyAgICA6IG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNz
aW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgJDIubGlu
ZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIisiLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAg
ICB9CisgICAgfQorICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZl
X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICItIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3No
aWZ0X2V4cHJlc3Npb24KKyAgICA6IGFkZGl0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgOworCityZWxhdGlvbmFsX2V4cHJlc3Npb24KKyAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9l
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsK
KyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
JDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24g
UklHSFRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgJDIu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIj4iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9uICB7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhh
bkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCQyLmxpbmUsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAg
ICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4
cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIj49IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitlcXVhbGl0eV9l
eHByZXNzaW9uCisgICAgOiByZWxhdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
fCBlcXVhbGl0eV9leHByZXNzaW9uIEVRX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiAgeworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1
YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
JDIubGluZSwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250
ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgZXF1
YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24geworICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWws
ICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIu
bGluZSwgIiE9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0
LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsKKworYW5k
X2V4cHJlc3Npb24KKyAgICA6IGVxdWFsaXR5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAg
OworCitleGNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogYW5kX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CisgICAgOworCitpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorICAgIDogZXhjbHVzaXZl
X29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitsb2dpY2FsX2FuZF9leHByZXNz
aW9uCisgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxBbmQsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoJDIubGluZSwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dpY2FsX3hvcl9leHByZXNzaW9uCisgICAgOiBs
b2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF94b3JfZXhw
cmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgJDEs
ICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQk
ID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5l
LCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICA7CisKK2xvZ2ljYWxfb3JfZXhwcmVzc2lvbgorICAgIDogbG9naWNhbF94b3JfZXhw
cmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBPUl9PUCBs
b2dpY2FsX3hvcl9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQxLCAkMywgJDIubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgInx8IiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitjb25k
aXRpb25hbF9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xP
TiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xF
cnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0
aW9uKCQxLCAkMywgJDUsICQyLmxpbmUpOworICAgICAgICBpZiAoJDMtPmdldFR5cGUoKSAhPSAk
NS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgJCQgPSAwOworCisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjoi
LCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDUtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQ1Owor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9leHByZXNzaW9uCisgICAgOiBj
b25kaXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgdW5hcnlfZXhwcmVzc2lv
biBhc3NpZ25tZW50X29wZXJhdG9yIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgImFzc2lnbiIsICQxKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigkMi5vcCwgJDEsICQzLCAkMi5saW5lKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YXNzaWdu
RXJyb3IoJDIubGluZSwgImFzc2lnbiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkg
fHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQy
LmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsKKworYXNzaWdubWVudF9vcGVyYXRvcgorICAgIDog
RVFVQUwgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5saW5l
ID0gJDEubGluZTsgJCQub3AgPSBFT3BBc3NpZ247IH0KKyAgICB8IE1VTF9BU1NJR04gICB7IEZS
QUdfVkVSVF9PTkxZKCIqPSIsICQxLmxpbmUpOyAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9w
ID0gRU9wTXVsQXNzaWduOyB9CisgICAgfCBESVZfQVNTSUdOICAgeyBGUkFHX1ZFUlRfT05MWSgi
Lz0iLCAkMS5saW5lKTsgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcERpdkFzc2ln
bjsgfQorICAgIHwgQUREX0FTU0lHTiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BBZGRBc3NpZ247IH0KKyAgICB8IFNV
Ql9BU1NJR04gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubGluZSA9
ICQxLmxpbmU7ICQkLm9wID0gRU9wU3ViQXNzaWduOyB9CisgICAgOworCitleHByZXNzaW9uCisg
ICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAg
ICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgkMSwgJDMsICQyLmxpbmUpOwor
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlP
cEVycm9yKCQyLmxpbmUsICIsIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2NvbnN0YW50X2V4
cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5jb25zdEVycm9yQ2hlY2soJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworZGVjbGFyYXRp
b24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBTRU1JQ09MT04gICB7CisgICAgICAgIFRGdW5j
dGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIFRJbnRl
cm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBw
cm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcHJv
dG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uW2ldOworICAgICAg
ICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0u
dHlwZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFy
aWFibGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSksICQxLmxpbmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsICpwYXJhbS50eXBlLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RvdHlwZS0+c2V0T3BlcmF0b3IoRU9wUHJvdG90
eXBlKTsKKyAgICAgICAgJCQgPSBwcm90b3R5cGU7CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKKyAg
ICAgICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3BlcmF0b3IoRU9wRGVjbGFyYXRpb24p
OworICAgICAgICAkJCA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICB9CisgICAgfCBQUkVDSVNJ
T04gcHJlY2lzaW9uX3F1YWxpZmllciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIFNFTUlDT0xPTiB7
CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbigg
JDMudHlwZSwgJDIgKTsKKyAgICAgICAgJCQgPSAwOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9u
X3Byb3RvdHlwZQorICAgIDogZnVuY3Rpb25fZGVjbGFyYXRvciBSSUdIVF9QQVJFTiAgeworICAg
ICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVu
Y3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBk
ZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3Ig
cmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlm
IGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZGVj
bGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBx
dWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
ZmluZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAg
ICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJuVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3Zl
cmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCgqcHJldkRlYylbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gKCokMSlbaV0u
dHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1l
IHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKCokMSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5n
KCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUg
YSBkZWZpbml0aW9uLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0
aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncwor
ICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xh
cmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAg
ICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5saW5lID0gJDIubGluZTsKKworICAg
ICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqJCQuZnVuY3Rpb24pOworICAg
IH0KKyAgICA7CisKK2Z1bmN0aW9uX2RlY2xhcmF0b3IKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciB7
CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworCitmdW5jdGlvbl9o
ZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAgOiBmdW5jdGlvbl9oZWFkZXIgcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9uIHsKKyAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgaWYgKCQyLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQp
CisgICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKCQyLnBhcmFtKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGVsZXRlICQyLnBhcmFtLnR5cGU7CisgICAgfQorICAgIHwgZnVuY3Rpb25f
aGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBwYXJhbWV0ZXJfZGVjbGFyYXRpb24geworICAg
ICAgICAvLworICAgICAgICAvLyBPbmx5IGZpcnN0IHBhcmFtZXRlciBvZiBvbmUtcGFyYW1ldGVy
IGZ1bmN0aW9ucyBjYW4gYmUgdm9pZAorICAgICAgICAvLyBUaGUgY2hlY2sgZm9yIG5hbWVkIHBh
cmFtZXRlcnMgbm90IGJlaW5nIHZvaWQgaXMgZG9uZSBpbiBwYXJhbWV0ZXJfZGVjbGFyYXRvcgor
ICAgICAgICAvLworICAgICAgICBpZiAoJDMucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0Vm9pZCkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVy
ID4gZmlyc3QgaXMgdm9pZAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3Ig
Jyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgZGVsZXRlICQzLnBhcmFtLnR5cGU7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAgICAgJCQgPSAkMTsK
KyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDMucGFyYW0pOworICAgICAgICB9CisgICAg
fQorICAgIDsKKworZnVuY3Rpb25faGVhZGVyCisgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfUEFSRU4geworICAgICAgICBpZiAoJDEucXVhbGlmaWVyICE9IEV2cUds
b2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0
aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBt
YWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRo
ZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3Vw
cG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRU
eXBlIHR5cGUoJDEpOworICAgICAgICBmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDIuc3RyaW5n
LCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCitwYXJhbWV0
ZXJfZGVjbGFyYXRvcgorICAgIC8vIFR5cGUgKyBuYW1lCisgICAgOiB0eXBlX3NwZWNpZmllciBJ
REVOVElGSUVSIHsKKyAgICAgICAgaWYgKCQxLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9p
ZCciLCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyQyLnN0cmluZywgbmV3
IFRUeXBlKCQxKX07CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworICAgICAgICAkJC5wYXJh
bSA9IHBhcmFtOworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVyIElERU5USUZJRVIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0LCBzaXplKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkMS5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKKworICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7Cisg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICQyLnN0cmluZywgdHlwZSB9OworICAgICAgICAk
JC5saW5lID0gJDIubGluZTsKKyAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAg
OworCitwYXJhbWV0ZXJfZGVjbGFyYXRpb24KKyAgICAvLworICAgIC8vIFRoZSBvbmx5IHBhcmFt
ZXRlciBxdWFsaWZpZXIgYSBwYXJhbWV0ZXIgY2FuIGhhdmUgYXJlCisgICAgLy8gSU5fUVVBTCwg
T1VUX1FVQUwsIElOT1VUX1FVQUwsIG9yIENPTlNULgorICAgIC8vCisKKyAgICAvLworICAgIC8v
IFR5cGUgKyBuYW1lCisgICAgLy8KKyAgICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFs
aWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9ICQzOworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDMubGluZSwgJDEucXVhbGlmaWVyLCAk
MiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsK
KyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1ldGVyU2Ft
cGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgLy8KKyAgICAv
LyBPbmx5IHR5cGUKKyAgICAvLworICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxp
ZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQzOworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDMubGluZSwgJDEucXVhbGlmaWVy
LCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNp
ZmllciB7CisgICAgICAgICQkID0gJDI7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFt
ZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUsIEV2cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5
cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsK
KworcGFyYW1ldGVyX3F1YWxpZmllcgorICAgIDogLyogZW1wdHkgKi8geworICAgICAgICAkJCA9
IEV2cUluOworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAgICAgICAkJCA9IEV2cUluOworICAg
IH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFPdXQ7CisgICAgfQorICAgIHwg
SU5PVVRfUVVBTCB7CisgICAgICAgICQkID0gRXZxSW5PdXQ7CisgICAgfQorICAgIDsKKworcGFy
YW1ldGVyX3R5cGVfc3BlY2lmaWVyCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMSkgfTsKKyAgICAgICAgJCQucGFyYW0g
PSBwYXJhbTsKKyAgICB9CisgICAgOworCitpbml0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc2lu
Z2xlX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgCisgICAgICAgIGlm
ICgkJC50eXBlLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICQkLnR5
cGUucHJlY2lzaW9uID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lz
aW9uKCQxLnR5cGUudHlwZSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wcmVjaXNp
b25FcnJvckNoZWNrKCQxLmxpbmUsICQkLnR5cGUucHJlY2lzaW9uLCAkMS50eXBlLnR5cGUpKSB7
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVO
VElGSUVSIHsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSksICQzLmxpbmUp
LCAkMy5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9u
SW5pdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3Jf
bGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAk
MS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0
cmluZywgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5
KHRydWUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50
eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVO
VElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxp
bmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAq
JDMuc3RyaW5nLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOwor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkNC5saW5l
LCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZh
cmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJy
b3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBUVHlwZSB0eXBl
ID0gVFR5cGUoJDEudHlwZSk7CisgICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsK
KyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIHR5cGUsICQzLmxpbmUpLCAkMy5saW5lKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJ
RVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQx
LnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
JCQgPSAkMTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBw
YXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgJDctPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQu
bGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkJC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMi
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgaWYgKCFw
YXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50
eXBlLCAkNywgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNi5saW5lKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8
IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0
YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEu
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAk
JCA9ICQxOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBh
cnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6
ZSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGlu
ZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkJC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgaWYgKCFwYXJz
ZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCAkOCwgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNy5saW5lKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxp
bmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgJCQgPSAkMTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAg
ICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAqJDMuc3Ry
aW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJt
Tm9kZSwgaW50ZXJtTm9kZSwgJDQubGluZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2lu
Z2xlX2RlY2xhcmF0aW9uCisgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CisgICAgICAgICQk
LnR5cGUgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgIiIsIFRUeXBlKCQxKSwgJDEubGluZSksICQxLmxpbmUpOworICAgIH0KKyAgICB8
IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgeworICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQy
LmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJCQudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
ICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JD
aGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQy
LmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkgfHwgcGFy
c2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgJDEuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQzLmxpbmUsICok
Mi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
eworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEpOworICAgICAgICBpbnQgc2l6ZTsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkNCwg
c2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlw
ZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIHR5cGUsICQyLmxpbmUpLCAkMi5saW5lKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5s
aW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1
YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0
LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNr
KCQzLmxpbmUsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBmdWxseV9zcGVj
aWZpZWRfdHlwZSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7
CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VD
b250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDIubGluZSwgKiQyLnN0cmluZywgJDEsICQ0LCBp
bnRlcm1Ob2RlKSkgeworICAgICAgICAvLworICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUg
cmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgICAgIGlmKGludGVybU5vZGUpCisg
ICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAkMy5saW5lKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHwgSU5WQVJJQU5U
IElERU5USUZJRVIgeworICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9u
IiwgJDEubGluZSk7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cUludmFyaWFudFZhcnlpbmdP
dXQ7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgfQorCisvLworLy8gUGxh
Y2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8vICAgIHwgYnVm
ZmVyX3NwZWNpZmllciB7CisvLyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKy8vICAg
IH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdlbnVtJywgb3IgJ3R5cGVkZWYnLgor
CisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8K
Ky8vJXR5cGUgPGludGVybT4gYnVmZmVyX2RlY2xhcmF0aW9uCisvLyV0eXBlIDxpbnRlcm0udHlw
ZT4gYnVmZmVyX3NwZWNpZmllciBpbnB1dF9vcl9vdXRwdXQgYnVmZmVyX2RlY2xhcmF0aW9uX2xp
c3QKKy8vYnVmZmVyX3NwZWNpZmllcgorLy8gICAgOiBpbnB1dF9vcl9vdXRwdXQgTEVGVF9CUkFD
RSBidWZmZXJfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7CisvLyAgICB9CisvLyAgICA7
CisvLworLy9pbnB1dF9vcl9vdXRwdXQKKy8vICAgIDogSU5QVVQgeworLy8gICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnB1dCIpKQorLy8gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICBVTlBBQ0tfT05MWSgiaW5wdXQiLCAkMS5saW5l
KTsKKy8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFJbnB1dDsKKy8vICAgIH0KKy8vICAgIHwg
T1VUUFVUIHsKKy8vICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQx
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAib3V0cHV0
IikpCisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIFBB
Q0tfT05MWSgib3V0cHV0IiwgJDEubGluZSk7CisvLyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZx
T3V0cHV0OworLy8gICAgfQorLy8gICAgOworCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUg
cGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8vYnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QKKy8v
ICAgIDogYnVmZmVyX2RlY2xhcmF0aW9uIHsKKy8vICAgIH0KKy8vICAgIHwgYnVmZmVyX2RlY2xh
cmF0aW9uX2xpc3QgYnVmZmVyX2RlY2xhcmF0aW9uIHsKKy8vICAgIH0KKy8vICAgIDsKKworLy8K
Ky8vIElucHV0L291dHB1dCBzZW1hbnRpY3M6CisvLyAgIGZsb2F0IG11c3QgYmUgMTYgb3IgMzIg
Yml0cworLy8gICBmbG9hdCBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zPworLy8gICBjaGVjayBmb3Ig
b25seSBvbmUgaW5wdXQgYW5kIG9ubHkgb25lIG91dHB1dAorLy8gICBzdW0gb2YgYml0ZmllbGRz
IGhhcyB0byBiZSBtdWx0aXBsZSBvZiAzMgorLy8KKworLy8KKy8vIFBsYWNlIGhvbGRlciBmb3Ig
dGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KKy8vCisvL2J1ZmZlcl9kZWNsYXJhdGlvbgorLy8g
ICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIENPTE9OIGNvbnN0YW50X2V4cHJlc3Npb24g
U0VNSUNPTE9OIHsKKy8vICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soJDIubGluZSwgKiQyLnN0cmluZywgcGFyc2VDb250ZXh0KSkKKy8vICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgJCQudmFyaWFibGUgPSBuZXcgVFZhcmlh
YmxlKCQyLnN0cmluZywgJDEpOworLy8gICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCokJC52YXJpYWJsZSkpIHsKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5j
X3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8g
ICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhlIHBvb2wg
cG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CisvLyAgICAgICAgfQorLy8gICAgfQorLy8gICAgOwor
CitmdWxseV9zcGVjaWZpZWRfdHlwZQorICAgIDogdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAk
JCA9ICQxOworCisgICAgICAgIGlmICgkMS5hcnJheSkgeworICAgICAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVj
dHMiKSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICQxLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyICB7CisgICAgICAgIGlm
ICgkMi5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwg
IkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisgICAg
ICAgIGlmICgkMi5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
aygkMi5saW5lLCAkMSkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKKyAgICAgICAgICAgICgkMi50eXBlID09
IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWlu
Z0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAgICAgKCQy
LnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9ICQyOworICAgICAgICAkJC5x
dWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7CisgICAgfQorICAgIDsKKwordHlwZV9xdWFsaWZpZXIK
KyAgICA6IENPTlNUX1FVQUwgeworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25z
dCwgJDEubGluZSk7CisgICAgfQorICAgIHwgQVRUUklCVVRFIHsKKyAgICAgICAgVkVSVEVYX09O
TFkoImF0dHJpYnV0ZSIsICQxLmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpLCAiYXR0cmlidXRlIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAkMS5saW5lKTsK
KyAgICB9CisgICAgfCBWQVJZSU5HIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAg
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgJDEubGluZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgJDEubGluZSk7CisgICAgfQorICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDEubGluZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgJDEu
bGluZSk7CisgICAgfQorICAgIHwgVU5JRk9STSB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgJDEubGluZSk7
CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25v
X3ByZWMgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHByZWNpc2lvbl9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB7CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQk
LnByZWNpc2lvbiA9ICQxOworICAgIH0KKyAgICA7CisKK3ByZWNpc2lvbl9xdWFsaWZpZXIKKyAg
ICA6IEhJR0hfUFJFQ0lTSU9OIHsKKyAgICAgICAgJCQgPSBFYnBIaWdoOworICAgIH0KKyAgICB8
IE1FRElVTV9QUkVDSVNJT04geworICAgICAgICAkJCA9IEVicE1lZGl1bTsKKyAgICB9CisgICAg
fCBMT1dfUFJFQ0lTSU9OICB7CisgICAgICAgICQkID0gRWJwTG93OworICAgIH0KKyAgICA7CisK
K3R5cGVfc3BlY2lmaWVyX25vX3ByZWMKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBM
RUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAg
JCQgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNr
KCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkMywgc2l6ZSkpCisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVy
X25vbmFycmF5CisgICAgOiBWT0lEX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgJDEubGluZSk7
CisgICAgfQorICAgIHwgRkxPQVRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7
CisgICAgfQorICAgIHwgSU5UX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAg
ICB9CisgICAgfCBCT09MX1RZUEUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAg
fQorLy8gICAgfCBVTlNJR05FRCBJTlRfVFlQRSB7CisvLyAgICAgICAgUEFDS19VTlBBQ0tfT05M
WSgidW5zaWduZWQiLCAkMS5saW5lKTsKKy8vICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKy8vICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOwor
Ly8gICAgfQorICAgIHwgVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgfCBWRUMzIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAg
ICB8IFZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgQlZFQzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEu
bGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgfCBCVkVDMyB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMp
OworICAgIH0KKyAgICB8IEJWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAg
ICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgSVZFQzIgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50
LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAg
ICB8IElWRUMzIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBJVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxp
bmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgTUFUUklYMiB7
CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQyIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICB9
CisgICAgfCBNQVRSSVgzIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDMiLCAkMS5saW5l
KTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDMsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDQgeworICAgICAgICBGUkFHX1ZFUlRfT05M
WSgibWF0NCIsICQxLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEIHsKKyAg
ICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRCIsICQxLmxpbmUpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJELCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRSB7CisgICAgICAg
IEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICQxLmxpbmUpOworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1
YmUsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IHN0cnVjdF9zcGVjaWZpZXIgeworICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgic3RydWN0IiwgJDEubGluZSk7CisgICAgICAgICQkID0gJDE7
CisgICAgICAgICQkLnF1YWxpZmllciA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIH0KKyAgICB8IFRZUEVf
TkFNRSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0
eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9va2VkIHVwIHRoZQorICAgICAgICAvLyB0
eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oJDEuc3ltYm9sKS0+Z2V0VHlwZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAk
MS5saW5lKTsKKyAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsK
Kworc3RydWN0X3NwZWNpZmllcgorICAgIDogU1RSVUNUIElERU5USUZJRVIgTEVGVF9CUkFDRSBz
dHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUg
PSBuZXcgVFR5cGUoJDQsICokMi5zdHJpbmcpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBl
RGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOworICAgICAg
ICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5cGVEZWYpKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24i
LCAkMi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwg
RXZxVGVtcG9yYXJ5LCAkMS5saW5lKTsKKyAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsK
KyAgICB9CisgICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBS
SUdIVF9CUkFDRSB7CisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUoJDMsIFRT
dHJpbmcoIiIpKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3Jhcnks
ICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOworICAgIH0KKyAgICA7
CisKK3N0cnVjdF9kZWNsYXJhdGlvbl9saXN0CisgICAgOiBzdHJ1Y3RfZGVjbGFyYXRpb24gewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IHN0
cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgJDItPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8ICQkLT5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAg
IGlmICgoKiQkKVtqXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAoKiQyKVtpXS50eXBlLT5nZXRG
aWVsZE5hbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCgq
JDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVj
dCIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAkJC0+cHVzaF9iYWNrKCgqJDIpW2ldKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdGlvbgorICAgIDogdHlwZV9zcGVjaWZp
ZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICAkJCA9ICQyOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnZvaWRFcnJvckNoZWNrKCQxLmxpbmUsICgqJDIp
WzBdLnR5cGUtPmdldEZpZWxkTmFtZSgpLCAkMSkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgJCQtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
Q2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3cgYXNwZWN0cyBvZiB0eXBlLCBsaWtl
IGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5z
ZXRUeXBlKCQxLnR5cGUsICQxLnNpemUsICQxLm1hdHJpeCwgJDEudXNlckRlZik7CisKKyAgICAg
ICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKKyAgICAgICAgICAgIGlmICgo
KiQkKVtpXS50eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQxLmxpbmUsICQxKSkKKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoJDEuYXJyYXkpCisgICAgICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0QXJyYXlTaXpl
KCQxLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoJDEudXNlckRlZikKKyAgICAgICAgICAg
ICAgICAoKiQkKVtpXS50eXBlLT5zZXRUeXBlTmFtZSgkMS51c2VyRGVmLT5nZXRUeXBlTmFtZSgp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yX2xpc3QKKyAg
ICA6IHN0cnVjdF9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQgPSBOZXdQb29sVFR5cGVMaXN0KCk7
CisgICAgICAgICQkLT5wdXNoX2JhY2soJDEpOworICAgIH0KKyAgICB8IHN0cnVjdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgc3RydWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJC0+cHVzaF9iYWNr
KCQzKTsKKyAgICB9CisgICAgOworCitzdHJ1Y3RfZGVjbGFyYXRvcgorICAgIDogSURFTlRJRklF
UiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5l
LCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAg
ICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAgICAgICQkLnR5cGUtPnNldEZpZWxkTmFtZSgqJDEu
c3RyaW5nKTsKKyAgICB9CisgICAgfCBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9l
eHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CisgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOworICAgICAgICAkJC50
eXBlLT5zZXRGaWVsZE5hbWUoKiQxLnN0cmluZyk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDMsIHNp
emUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkLnR5
cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKyAgICB9CisgICAgOworCitpbml0aWFsaXplcgorICAg
IDogYXNzaWdubWVudF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworZGVjbGFyYXRp
b25fc3RhdGVtZW50CisgICAgOiBkZWNsYXJhdGlvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3N0
YXRlbWVudAorICAgIDogY29tcG91bmRfc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNp
bXBsZV9zdGF0ZW1lbnQgICAgeyAkJCA9ICQxOyB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6
ICBObyBsYWJlbGVkIHN0YXRlbWVudHM7ICdnb3RvJyBpcyBub3Qgc3VwcG9ydGVkLgorCitzaW1w
bGVfc3RhdGVtZW50CisgICAgOiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgeyAkJCA9ICQxOyB9Cisg
ICAgfCBleHByZXNzaW9uX3N0YXRlbWVudCAgeyAkJCA9ICQxOyB9CisgICAgfCBzZWxlY3Rpb25f
c3RhdGVtZW50ICAgeyAkJCA9ICQxOyB9CisgICAgfCBpdGVyYXRpb25fc3RhdGVtZW50ICAgeyAk
JCA9ICQxOyB9CisgICAgfCBqdW1wX3N0YXRlbWVudCAgICAgICAgeyAkJCA9ICQxOyB9CisgICAg
OworCitjb21wb3VuZF9zdGF0ZW1lbnQKKyAgICA6IExFRlRfQlJBQ0UgUklHSFRfQlJBQ0UgeyAk
JCA9IDA7IH0KKyAgICB8IExFRlRfQlJBQ0UgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgfSBzdGF0ZW1lbnRfbGlzdCB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
IH0gUklHSFRfQlJBQ0UgeworICAgICAgICBpZiAoJDMgIT0gMCkKKyAgICAgICAgICAgICQzLT5z
ZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisgICAgICAgICQkID0gJDM7CisgICAgfQorICAgIDsK
Kworc3RhdGVtZW50X25vX25ld19zY29wZQorICAgIDogY29tcG91bmRfc3RhdGVtZW50X25vX25l
d19zY29wZSB7ICQkID0gJDE7IH0KKyAgICB8IHNpbXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAg
ICAgeyAkJCA9ICQxOyB9CisgICAgOworCitjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3Bl
CisgICAgLy8gU3RhdGVtZW50IHRoYXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBz
ZWxlY3Rpb25fc3RhdGVtZW50LCBpdGVyYXRpb25fc3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNF
IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgJCQgPSAwOworICAgIH0KKyAgICB8IExFRlRfQlJBQ0Ug
c3RhdGVtZW50X2xpc3QgUklHSFRfQlJBQ0UgeworICAgICAgICBpZiAoJDIpCisgICAgICAgICAg
ICAkMi0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAkJCA9ICQyOworICAgIH0K
KyAgICA7CisKK3N0YXRlbWVudF9saXN0CisgICAgOiBzdGF0ZW1lbnQgeworICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoJDEsIDApOworICAgIH0K
KyAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIDApOworICAgIH0KKyAgICA7
CisKK2V4cHJlc3Npb25fc3RhdGVtZW50CisgICAgOiBTRU1JQ09MT04gIHsgJCQgPSAwOyB9Cisg
ICAgfCBleHByZXNzaW9uIFNFTUlDT0xPTiAgeyAkJCA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2Rl
Kj4oJDEpOyB9CisgICAgOworCitzZWxlY3Rpb25fc3RhdGVtZW50CisgICAgOiBJRiBMRUZUX1BB
UkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDEubGluZSwgJDMpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgJDEubGluZSk7CisgICAgfQor
ICAgIDsKKworc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBzdGF0ZW1lbnQgRUxTRSBz
dGF0ZW1lbnQgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQz
OworICAgIH0KKyAgICB8IHN0YXRlbWVudCB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAg
ICAgICQkLm5vZGUyID0gMDsKKyAgICB9CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBObyAn
c3dpdGNoJy4gIFN3aXRjaCBzdGF0ZW1lbnRzIG5vdCBzdXBwb3J0ZWQuCisKK2NvbmRpdGlvbgor
ICAgIC8vIEluIDE5OTYgYysrIGRyYWZ0LCBjb25kaXRpb25zIGNhbiBpbmNsdWRlIHNpbmdsZSBk
ZWNsYXJhdGlvbnMKKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS0+Z2V0TGluZSgpLCAkMSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBmdWxseV9z
cGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQy
LmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDIubGluZSwgKiQyLnN0
cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkKKyAgICAgICAgICAgICQkID0gJDQ7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitpdGVyYXRpb25fc3RhdGVtZW50
CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGNvbmRpdGlvbiBSSUdIVF9Q
QVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKDAsICQ2LCAkNCwgMCwgdHJ1ZSwgJDEubGluZSk7CisgICAgICAgIC0tcGFyc2VDb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICB8IERPIHsgKytwYXJzZUNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWw7IH0gc3RhdGVtZW50IFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lv
biBSSUdIVF9QQVJFTiBTRU1JQ09MT04geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29s
RXJyb3JDaGVjaygkOC5saW5lLCAkNikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3Ao
MCwgJDMsICQ2LCAwLCBmYWxzZSwgJDQubGluZSk7CisgICAgICAgIC0tcGFyc2VDb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICB8IEZPUiBMRUZUX1BBUkVOIHsgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVs
OyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVzdF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3Rh
dGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
cG9wKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgk
NCwgJDcsIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTEpLCByZWludGVy
cHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUyKSwgdHJ1ZSwgJDEubGluZSk7CisgICAg
ICAgIC0tcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICA7CisKK2Zv
cl9pbml0X3N0YXRlbWVudAorICAgIDogZXhwcmVzc2lvbl9zdGF0ZW1lbnQgeworICAgICAgICAk
JCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIDsKKworY29uZGl0aW9ub3B0CisgICAgOiBjb25kaXRpb24gewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IC8qIE1heSBiZSBudWxsICovIHsKKyAgICAg
ICAgJCQgPSAwOworICAgIH0KKyAgICA7CisKK2Zvcl9yZXN0X3N0YXRlbWVudAorICAgIDogY29u
ZGl0aW9ub3B0IFNFTUlDT0xPTiB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQk
Lm5vZGUyID0gMDsKKyAgICB9CisgICAgfCBjb25kaXRpb25vcHQgU0VNSUNPTE9OIGV4cHJlc3Np
b24gIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAkMzsKKyAg
ICB9CisgICAgOworCitqdW1wX3N0YXRlbWVudAorICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQg
b25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRpbnVlLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBC
UkVBSyBTRU1JQ09MT04geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJy
ZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICQxLmxpbmUpOworICAg
IH0KKyAgICB8IFJFVFVSTiBTRU1JQ09MT04geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQxLmxpbmUpOworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub24tdm9p
ZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgUkVU
VVJOIGV4cHJlc3Npb24gU0VNSUNPTE9OIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMiwgJDEubGluZSk7CisgICAgICAgIHBh
cnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lk
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0
aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmICgqKHBhcnNlQ29udGV4
dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDItPmdldFR5cGUoKSkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRj
aGluZyB0eXBlOiIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IERJU0NBUkQgU0VNSUNPTE9OIHsKKyAg
ICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwgJDEubGluZSk7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICQxLmxpbmUpOworICAgIH0K
KyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdnb3RvJy4gIEdvdG9zIGFyZSBub3Qgc3Vw
cG9ydGVkLgorCit0cmFuc2xhdGlvbl91bml0CisgICAgOiBleHRlcm5hbF9kZWNsYXJhdGlvbiB7
CisgICAgICAgICQkID0gJDE7CisgICAgICAgIHBhcnNlQ29udGV4dC0+dHJlZVJvb3QgPSAkJDsK
KyAgICB9CisgICAgfCB0cmFuc2xhdGlvbl91bml0IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAk
MiwgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAg
OworCitleHRlcm5hbF9kZWNsYXJhdGlvbgorICAgIDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb24geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2RlZmluaXRpb24KKyAgICA6IGZ1bmN0aW9u
X3Byb3RvdHlwZSB7CisgICAgICAgIFRGdW5jdGlvbiYgZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4o
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLmdldE1hbmdsZWROYW1lKCkp
KTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVu
Y3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgorICAg
ICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJs
ZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAorICAgICAgICAvLyBhbiBlYXJsaWVyIG9j
Y3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVh
ZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi5n
ZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAg
IC8vCisgICAgICAgIC8vIFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtl
cyBhbnkgcGFyYW1ldGVycyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAg
ICAgIC8vCisgICAgICAgIGlmIChmdW5jdGlvbi5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFu
eSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIiwg
ZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9u
IGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gTmV3IHN5bWJvbCB0YWJsZSBzY29wZSBmb3IgYm9keSBvZiBmdW5jdGlvbiBwbHVzIGl0
cyBhcmd1bWVudHMKKyAgICAgICAgLy8KKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJldHVybiB0
eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVUVVJOIHN0YXRlbWVudHMuCisgICAgICAgIC8v
CisgICAgICAgIHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+
Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNW
YWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJz
IGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMg
bm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAg
IC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCisgICAgICAgIC8vCisgICAgICAg
IC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUws
IHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJh
bWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVz
ID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXImIHBh
cmFtID0gZnVuY3Rpb25baV07CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7Cisg
ICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0u
bmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2ZlciBv
d25lcnNoaXAgb2YgbmFtZSBwb2ludGVyIHRvIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIHBhcmFtLm5hbWUgPSAwOworCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciB0byB0aGUgSElMCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEubGluZSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAk
MS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0
ZXJzLCAkMS5saW5lKTsKKyAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsK
KyAgICAgICAgcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAgICB9CisgICAg
Y29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhh
dCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAg
ICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJt
ZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlw
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25S
ZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwg
ImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlvbi0+Z2V0
TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVy
bUFnZ3JlZ2F0ZSwgJDMsIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVuY3Rpb24sICQxLmxpbmUpOworICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgkMS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUo
KS5jX3N0cigpKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldFR5cGUoJDEuZnVu
Y3Rpb24tPmdldFJldHVyblR5cGUoKSk7CisKKyAgICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBp
bmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lm
aWMKKyAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJp
ZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQorICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
T3B0aW1pemUocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKKyAgICAgICAg
JCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVnKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdt
YS5kZWJ1Zyk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxl
KHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CisgICAgfQorICAgIDsK
KworJSUKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDE3
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1l
ZGlhdGUuaCIKKworLy8KKy8vIFR3byBwdXJwb3NlczoKKy8vIDEuICBTaG93IGFuIGV4YW1wbGUg
b2YgaG93IHRvIGl0ZXJhdGUgdHJlZS4gIEZ1bmN0aW9ucyBjYW4KKy8vICAgICBhbHNvIGRpcmVj
dGx5IGNhbGwgVHJhdmVyc2UoKSBvbiBjaGlsZHJlbiB0aGVtc2VsdmVzIHRvCisvLyAgICAgaGF2
ZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgcHJvY2VzcyB0aGFuIHNob3duIGhlcmUu
CisvLyAgICAgU2VlIHRoZSBsYXN0IGZ1bmN0aW9uIGZvciBob3cgdG8gZ2V0IHN0YXJ0ZWQuCisv
LyAyLiAgUHJpbnQgb3V0IGEgdGV4dCBiYXNlZCBkZXNjcmlwdGlvbiBvZiB0aGUgdHJlZS4KKy8v
CisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20gbm9kZSB0
byBub2RlIGluCisvLyB0aGUgdHJhdmVyc2FsCisvLworY2xhc3MgVE91dHB1dFRyYXZlcnNlciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUT3V0cHV0VHJhdmVyc2Vy
KFRJbmZvU2luayYgaSkgOiBpbmZvU2luayhpKSB7IH0KKyAgICBUSW5mb1NpbmsmIGluZm9TaW5r
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Cisg
ICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAgICBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIGJvb2wgdmlzaXRM
b29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKK307CisKK1RTdHJpbmcgVFR5cGU6OmdldENvbXBs
ZXRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKKworICAgIGlm
IChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5ICYmIHF1YWxpZmllciAhPSBFdnFHbG9iYWwpCisg
ICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgZ2V0UHJlY2lz
aW9uU3RyaW5nKCkgPDwgIiAiOworICAgIGlmIChhcnJheSkKKyAgICAgICAgc3RyZWFtIDw8ICJh
cnJheSBvZiAiOworICAgIGlmIChtYXRyaXgpCisgICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJY
IiA8PCBzaXplIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoc2l6ZSA+IDEpCisgICAg
ICAgIHN0cmVhbSA8PCBzaXplIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOworCisgICAgc3Ry
ZWFtIDw8IGdldEJhc2ljU3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKK30KKwor
Ly8KKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJz
aW5nLgorLy8KKwordm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmsmIGluZm9TaW5rLCBUSW50
ZXJtTm9kZSogbm9kZSwgY29uc3QgaW50IGRlcHRoKQoreworICAgIGludCBpOworCisgICAgaW5m
b1NpbmsuZGVidWcubG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKworICAgIGZvciAoaSA9IDA7
IGkgPCBkZXB0aDsgKytpKQorICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiICAiOworfQorCisv
LworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAg
VGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisv
LworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5h
bCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3Mg
Y2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lkIFRPdXRwdXRU
cmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgT3V0cHV0
VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKworICAgIGluZm9TaW5rLmRlYnVnIDw8
ICInIiA8PCBub2RlLT5nZXRTeW1ib2woKSA8PCAiJyAiOworICAgIGluZm9TaW5rLmRlYnVnIDw8
ICIoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworfQorCitib29sIFRP
dXRwdXRUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBu
b2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVl
VGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewor
ICAgICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJt
b3ZlIHNlY29uZCBjaGlsZCB0byBmaXJzdCBjaGlsZCI7ICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiaW5pdGlh
bGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29uZCBjaGlsZCI7ICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgImFkZCBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxB
c3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibXVsdGlwbHkgc2Vjb25kIGNoaWxk
IGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNNYXRyaXhBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBp
bnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2Nh
bGFyQXNzaWduOiAgb3V0LmRlYnVnIDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0
IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgICBvdXQu
ZGVidWcgPDwgImRpdmlkZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0
IGluZGV4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQuZGVi
dWcgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3Q6ICAgb3V0LmRlYnVnIDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogb3V0LmRlYnVnIDw8ICJ2ZWN0
b3Igc3dpenpsZSI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWRkOiAgICBvdXQuZGVidWcg
PDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3Vi
OiAgICBvdXQuZGVidWcgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTXVsOiAgICBvdXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQuZGVidWcgPDwgImRpdmlkZSI7
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBO
b3QgRXF1YWwiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjog
ICAgICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21w
YXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwg
IkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0LmRlYnVnIDw8ICJ2ZWN0b3Itc2NhbGUiOyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0LmRlYnVnIDw8
ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1ZlY3Rvcjogb3V0LmRlYnVnIDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0LmRlYnVnIDw8ICJtYXRyaXgt
c2NhbGUiOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJp
eDogb3V0LmRlYnVnIDw8ICJtYXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxPcjogIG91dC5kZWJ1ZyA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogb3V0LmRlYnVnIDw8ICJsb2dpY2FsLXhvciI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG91dC5kZWJ1ZyA8PCAibG9naWNh
bC1hbmQiOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnIDw8ICI8dW5rbm93biBv
cD4iOworICAgIH0KKworICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRl
U3RyaW5nKCkgPDwgIikiOworCisgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsK
KworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgIG91dC5kZWJ1
ZyA8PCAiTmVnYXRlIHZhbHVlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0
b3JMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQuZGVidWcg
PDwgIk5lZ2F0ZSBjb25kaXRpb25hbCI7ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0
SW5jcmVtZW50OiAgb3V0LmRlYnVnIDw8ICJQb3N0LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6ICBvdXQuZGVidWcgPDwgIlBvc3QtRGVjcmVt
ZW50IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dC5k
ZWJ1ZyA8PCAiUHJlLUluY3JlbWVudCI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQ
cmVEZWNyZW1lbnQ6ICAgb3V0LmRlYnVnIDw8ICJQcmUtRGVjcmVtZW50IjsgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29udmVy
dCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6
b3V0LmRlYnVnIDw8ICJDb252ZXJ0IGZsb2F0IHRvIGJvb2wiO2JyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnZCb29sVG9GbG9hdDpvdXQuZGVidWcgPDwgIkNvbnZlcnQgYm9vbCB0byBmbG9hdCI7
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29u
dmVydCBpbnQgdG8gZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0lu
dDogb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGZsb2F0IHRvIGludCI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQuZGVidWcgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQi
OyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0LmRlYnVnIDw8
ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6
ICAgICAgICBvdXQuZGVidWcgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic2luZSI7ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjog
ICAgICAgICAgICBvdXQuZGVidWcgPDwgInRhbmdlbnQiOyAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHNpbmUiOyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBY29zOiAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0
YW46ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFyYyB0YW5nZW50IjsgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJleHAiOyAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzogICAgICAgICAgICBv
dXQuZGVidWcgPDwgImxvZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRXhwMjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZXhwMiI7ICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2cy
IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAg
ICBvdXQuZGVidWcgPDwgInNxcnQiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dC5kZWJ1ZyA8PCAiaW52ZXJzZSBzcXJ0IjsgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFiczogICAgICAgICAgICBvdXQuZGVidWcgPDwg
IkFic29sdXRlIHZhbHVlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lnbjogICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiU2lnbiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJGbG9vciI7ICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBvdXQuZGVidWcg
PDwgIkNlaWxpbmciOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJhY3Q6
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiRnJhY3Rpb24iOyAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQuZGVidWcgPDwgImxlbmd0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dC5k
ZWJ1ZyA8PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vCWNh
c2UgRU9wRFBkeDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZFBkeCI7ICAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiZFBkeSI7ICAgICAgICAgICAgICAgICBicmVhazsgICAKKyAg
ICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZndpZHRo
IjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgY2Fz
ZSBFT3BBbnk6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhbnkiOyAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQuZGVidWcgPDwgImFs
bCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVn
Lm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIHVuYXJ5IG9wIik7CisgICAgfQorCisgICAgb3V0
LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAg
ICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRw
dXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7CisgICAgICAgIG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVm
aXhFcnJvciwgIm5vZGUgaXMgc3RpbGwgRU9wTnVsbCEiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBv
dXQuZGVidWcgPDwgIlNlcXVlbmNlXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BD
b21tYTogICAgICAgICBvdXQuZGVidWcgPDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBFT3BGdW5jdGlvbjogICAgICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9uIERlZmluaXRp
b246ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bkNhbGw6ICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9uIENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICBvdXQuZGVidWcgPDwgIkZ1
bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEZsb2F0OiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVj
dCB2ZWMyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6ICBvdXQuZGVi
dWcgPDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzQ6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCB2ZWM0IjsgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJvb2w6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiBvdXQuZGVidWcgPDwgIkNvbnN0
cnVjdCBidmVjMiI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQu
ZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjMyI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEJWZWM0OiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjNCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpbnQiOyAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQuZGVidWcgPDwgIkNv
bnN0cnVjdCBpdmVjMiI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBv
dXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjMyI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWM0OiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQy
IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQuZGVidWcgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdFN0cnVjdDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBi
cmVhazsKKworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
Q29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BH
cmVhdGVyVGhhbjogICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0LmRlYnVn
IDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4g
b3IgRXF1YWwiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXQu
ZGVidWcgPDwgIkVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0LmRlYnVnIDw8ICJOb3RFcXVhbCI7ICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTW9kOiAgICAgICAgICAg
b3V0LmRlYnVnIDw8ICJtb2QiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvdzog
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAicG93IjsgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVPcEF0YW46ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsK
KworICAgICAgICBjYXNlIEVPcE1pbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibWluIjsgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXg6ICAgICAgICAgICBvdXQuZGVidWcgPDwg
Im1heCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0
LmRlYnVnIDw8ICJjbGFtcCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1peDogICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAibWl4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BTdGVwOiAgICAgICAgICBvdXQuZGVidWcgPDwgInN0ZXAiOyAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0LmRlYnVnIDw8ICJzbW9vdGhzdGVwIjsgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0LmRlYnVnIDw8ICJkaXN0
YW5jZSI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERvdDogICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiZG90LXByb2R1Y3QiOyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXQuZGVidWcgPDwgImNyb3NzLXByb2R1Y3QiOyAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6ICAgb3V0LmRlYnVn
IDw8ICJmYWNlLWZvcndhcmQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJl
ZmxlY3Q6ICAgICAgIG91dC5kZWJ1ZyA8PCAicmVmbGVjdCI7ICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiAgICAgICBvdXQuZGVidWcgPDwgInJlZnJhY3Qi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAg
b3V0LmRlYnVnIDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIkJhZCBhZ2dyZWdhdGlv
biBvcCIpOworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYm
IG5vZGUtPmdldE9wKCkgIT0gRU9wUGFyYW1ldGVycykKKyAgICAgICAgb3V0LmRlYnVnIDw8ICIg
KCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcg
PDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQorewor
ICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQs
IG5vZGUsIGRlcHRoKTsKKworICAgIG91dC5kZWJ1ZyA8PCAiVGVzdCBjb25kaXRpb24gYW5kIHNl
bGVjdCI7CisgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiKVxuIjsKKworICAgICsrZGVwdGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2lu
aywgbm9kZSwgZGVwdGgpOworICAgIG91dC5kZWJ1ZyA8PCAiQ29uZGl0aW9uXG4iOworICAgIG5v
ZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIE91dHB1dFRyZWVUZXh0
KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7
CisgICAgICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRU
cnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5kZWJ1
ZyA8PCAidHJ1ZSBjYXNlIGlzIG51bGxcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7Cisg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiZmFsc2UgY2FzZVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRV
bmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9
IGluZm9TaW5rOworCisgICAgaW50IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgT3V0
cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtp
XS5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIjsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
ZmFsc2UiOworCisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgImNvbnN0IGJv
b2wiIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIlxuIjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAg
ICAgb3V0LmRlYnVnIDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0RkNvbnN0
KCk7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKGNvbnN0IGZsb2F0KVxuIjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldElD
b25zdCgpOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiIChjb25zdCBpbnQpXG4iOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBvdXQuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5rbm93biBjb25z
dGFudCIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZp
c2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5r
OworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBvdXQuZGVi
dWcgPDwgIkxvb3Agd2l0aCBjb25kaXRpb24gIjsKKyAgICBpZiAoISBub2RlLT50ZXN0Rmlyc3Qo
KSkKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJub3QgIjsKKyAgICBvdXQuZGVidWcgPDwgInRlc3Rl
ZCBmaXJzdFxuIjsKKworICAgICsrZGVwdGg7CisKKyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2lu
aywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2RlLT5nZXRUZXN0KCkpIHsKKyAgICAgICAgb3V0
LmRlYnVnIDw8ICJMb29wIENvbmRpdGlvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJObyBsb29w
IGNvbmRpdGlvblxuIjsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0
aCk7CisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgIkxv
b3AgQm9keVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJObyBsb29wIGJvZHlcbiI7CisKKyAgICBp
ZiAobm9kZS0+Z2V0VGVybWluYWwoKSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2lu
aywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQuZGVidWcgPDwgIkxvb3AgVGVybWluYWwgRXhw
cmVzc2lvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0VGVybWluYWwoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgfQorCisgICAgLS1kZXB0aDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBU
T3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCog
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAgT3V0cHV0VHJl
ZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgp
KSB7CisgICAgICAgIGNhc2UgRU9wS2lsbDogICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogS2ls
bCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogICAgIG91dC5kZWJ1
ZyA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnRpbnVlOiAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IENvbnRpbnVlIjsgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogUmV0dXJuIjsg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
QnJhbmNoOiBVbmtub3duIEJyYW5jaCI7IGJyZWFrOworICAgIH0KKworICAgIGlmIChub2RlLT5n
ZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICIgd2l0aCBleHByZXNzaW9u
XG4iOworICAgICAgICArK2RlcHRoOworICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAtLWRlcHRoOworICAgIH0gZWxzZQorICAgICAgICBvdXQu
ZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVu
Y3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNh
bC4KKy8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNr
aXAgcHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdp
bGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8KK3ZvaWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJl
ZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBUT3V0cHV0VHJhdmVyc2VyIGl0KGluZm9TaW5rKTsKKworICAgIHJvb3QtPnRy
YXZlcnNlKCZpdCk7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIERlZmluaXRpb24g
b2YgdGhlIGluLW1lbW9yeSBoaWdoLWxldmVsIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgor
Ly8gb2Ygc2hhZGVycy4gIFRoaXMgaXMgYSB0cmVlIHRoYXQgcGFyc2VyIGNyZWF0ZXMuCisvLwor
Ly8gTm9kZXMgaW4gdGhlIHRyZWUgYXJlIGRlZmluZWQgYXMgYSBoaWVyYXJjaHkgb2YgY2xhc3Nl
cyBkZXJpdmVkIGZyb20gCisvLyBUSW50ZXJtTm9kZS4gRWFjaCBpcyBhIG5vZGUgaW4gYSB0cmVl
LiAgVGhlcmUgaXMgbm8gcHJlc2V0IGJyYW5jaGluZyBmYWN0b3I7CisvLyBlYWNoIG5vZGUgY2Fu
IGhhdmUgaXQncyBvd24gdHlwZSBvZiBsaXN0IG9mIGNoaWxkcmVuLgorLy8KKworI2lmbmRlZiBf
X0lOVEVSTUVESUFURV9ICisjZGVmaW5lIF9fSU5URVJNRURJQVRFX0gKKworI2luY2x1ZGUgImNv
bXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIgorCisvLworLy8gT3BlcmF0b3JzIHVzZWQgYnkgdGhl
IGhpZ2gtbGV2ZWwgKHBhcnNlIHRyZWUpIHJlcHJlc2VudGF0aW9uLgorLy8KK2VudW0gVE9wZXJh
dG9yIHsKKyAgICBFT3BOdWxsLCAgICAgICAgICAgIC8vIGlmIGluIGEgbm9kZSwgc2hvdWxkIG9u
bHkgbWVhbiBhIG5vZGUgaXMgc3RpbGwgYmVpbmcgYnVpbHQKKyAgICBFT3BTZXF1ZW5jZSwgICAg
ICAgIC8vIGRlbm90ZXMgYSBsaXN0IG9mIHN0YXRlbWVudHMsIG9yIHBhcmFtZXRlcnMsIGV0Yy4K
KyAgICBFT3BGdW5jdGlvbkNhbGwsICAgIAorICAgIEVPcEZ1bmN0aW9uLCAgICAgICAgLy8gRm9y
IGZ1bmN0aW9uIGRlZmluaXRpb24KKyAgICBFT3BQYXJhbWV0ZXJzLCAgICAgIC8vIGFuIGFnZ3Jl
Z2F0ZSBsaXN0aW5nIHRoZSBwYXJhbWV0ZXJzIHRvIGEgZnVuY3Rpb24KKworICAgIEVPcERlY2xh
cmF0aW9uLAorICAgIEVPcFByb3RvdHlwZSwKKworICAgIC8vCisgICAgLy8gVW5hcnkgb3BlcmF0
b3JzCisgICAgLy8KKworICAgIEVPcE5lZ2F0aXZlLAorICAgIEVPcExvZ2ljYWxOb3QsCisgICAg
RU9wVmVjdG9yTG9naWNhbE5vdCwKKworICAgIEVPcFBvc3RJbmNyZW1lbnQsCisgICAgRU9wUG9z
dERlY3JlbWVudCwKKyAgICBFT3BQcmVJbmNyZW1lbnQsCisgICAgRU9wUHJlRGVjcmVtZW50LAor
CisgICAgRU9wQ29udkludFRvQm9vbCwKKyAgICBFT3BDb252RmxvYXRUb0Jvb2wsCisgICAgRU9w
Q29udkJvb2xUb0Zsb2F0LAorICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVPcENvbnZGbG9h
dFRvSW50LAorICAgIEVPcENvbnZCb29sVG9JbnQsCisKKyAgICAvLworICAgIC8vIGJpbmFyeSBv
cGVyYXRpb25zCisgICAgLy8KKworICAgIEVPcEFkZCwKKyAgICBFT3BTdWIsCisgICAgRU9wTXVs
LAorICAgIEVPcERpdiwKKyAgICBFT3BFcXVhbCwKKyAgICBFT3BOb3RFcXVhbCwKKyAgICBFT3BW
ZWN0b3JFcXVhbCwKKyAgICBFT3BWZWN0b3JOb3RFcXVhbCwKKyAgICBFT3BMZXNzVGhhbiwKKyAg
ICBFT3BHcmVhdGVyVGhhbiwKKyAgICBFT3BMZXNzVGhhbkVxdWFsLAorICAgIEVPcEdyZWF0ZXJU
aGFuRXF1YWwsCisgICAgRU9wQ29tbWEsCisKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxhciwKKyAg
ICBFT3BWZWN0b3JUaW1lc01hdHJpeCwKKyAgICBFT3BNYXRyaXhUaW1lc1ZlY3RvciwKKyAgICBF
T3BNYXRyaXhUaW1lc1NjYWxhciwKKworICAgIEVPcExvZ2ljYWxPciwKKyAgICBFT3BMb2dpY2Fs
WG9yLAorICAgIEVPcExvZ2ljYWxBbmQsCisKKyAgICBFT3BJbmRleERpcmVjdCwKKyAgICBFT3BJ
bmRleEluZGlyZWN0LAorICAgIEVPcEluZGV4RGlyZWN0U3RydWN0LAorCisgICAgRU9wVmVjdG9y
U3dpenpsZSwKKworICAgIC8vCisgICAgLy8gQnVpbHQtaW4gZnVuY3Rpb25zIHBvdGVudGlhbGx5
IG1hcHBlZCB0byBvcGVyYXRvcnMKKyAgICAvLworCisgICAgRU9wUmFkaWFucywKKyAgICBFT3BE
ZWdyZWVzLAorICAgIEVPcFNpbiwKKyAgICBFT3BDb3MsCisgICAgRU9wVGFuLAorICAgIEVPcEFz
aW4sCisgICAgRU9wQWNvcywKKyAgICBFT3BBdGFuLAorCisgICAgRU9wUG93LAorICAgIEVPcEV4
cCwKKyAgICBFT3BMb2csCisgICAgRU9wRXhwMiwKKyAgICBFT3BMb2cyLAorICAgIEVPcFNxcnQs
CisgICAgRU9wSW52ZXJzZVNxcnQsCisKKyAgICBFT3BBYnMsCisgICAgRU9wU2lnbiwKKyAgICBF
T3BGbG9vciwKKyAgICBFT3BDZWlsLAorICAgIEVPcEZyYWN0LAorICAgIEVPcE1vZCwKKyAgICBF
T3BNaW4sCisgICAgRU9wTWF4LAorICAgIEVPcENsYW1wLAorICAgIEVPcE1peCwKKyAgICBFT3BT
dGVwLAorICAgIEVPcFNtb290aFN0ZXAsCisKKyAgICBFT3BMZW5ndGgsCisgICAgRU9wRGlzdGFu
Y2UsCisgICAgRU9wRG90LAorICAgIEVPcENyb3NzLAorICAgIEVPcE5vcm1hbGl6ZSwKKyAgICBF
T3BGYWNlRm9yd2FyZCwKKyAgICBFT3BSZWZsZWN0LAorICAgIEVPcFJlZnJhY3QsCisKKyAgICAv
L0VPcERQZHgsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vRU9wRFBkeSwgICAgICAgICAgICAvLyBGcmFnbWVudCBv
bmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy9FT3BGd2lkdGgs
ICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRl
bnNpb24KKworICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAorCisgICAgRU9wQW55LAorICAgIEVP
cEFsbCwKKworICAgIC8vCisgICAgLy8gQnJhbmNoCisgICAgLy8KKworICAgIEVPcEtpbGwsICAg
ICAgICAgICAgLy8gRnJhZ21lbnQgb25seQorICAgIEVPcFJldHVybiwKKyAgICBFT3BCcmVhaywK
KyAgICBFT3BDb250aW51ZSwKKworICAgIC8vCisgICAgLy8gQ29uc3RydWN0b3JzCisgICAgLy8K
KworICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BDb25zdHJ1Y3RCb29sLAorICAgIEVPcENv
bnN0cnVjdEZsb2F0LAorICAgIEVPcENvbnN0cnVjdFZlYzIsCisgICAgRU9wQ29uc3RydWN0VmVj
MywKKyAgICBFT3BDb25zdHJ1Y3RWZWM0LAorICAgIEVPcENvbnN0cnVjdEJWZWMyLAorICAgIEVP
cENvbnN0cnVjdEJWZWMzLAorICAgIEVPcENvbnN0cnVjdEJWZWM0LAorICAgIEVPcENvbnN0cnVj
dElWZWMyLAorICAgIEVPcENvbnN0cnVjdElWZWMzLAorICAgIEVPcENvbnN0cnVjdElWZWM0LAor
ICAgIEVPcENvbnN0cnVjdE1hdDIsCisgICAgRU9wQ29uc3RydWN0TWF0MywKKyAgICBFT3BDb25z
dHJ1Y3RNYXQ0LAorICAgIEVPcENvbnN0cnVjdFN0cnVjdCwKKworICAgIC8vCisgICAgLy8gbW92
ZXMKKyAgICAvLworCisgICAgRU9wQXNzaWduLAorICAgIEVPcEluaXRpYWxpemUsCisgICAgRU9w
QWRkQXNzaWduLAorICAgIEVPcFN1YkFzc2lnbiwKKyAgICBFT3BNdWxBc3NpZ24sCisgICAgRU9w
VmVjdG9yVGltZXNNYXRyaXhBc3NpZ24sCisgICAgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ24s
CisgICAgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ24sCisgICAgRU9wTWF0cml4VGltZXNNYXRy
aXhBc3NpZ24sCisgICAgRU9wRGl2QXNzaWduLAorfTsKKworY2xhc3MgVEludGVybVRyYXZlcnNl
cjsKK2NsYXNzIFRJbnRlcm1BZ2dyZWdhdGU7CitjbGFzcyBUSW50ZXJtQmluYXJ5OworY2xhc3Mg
VEludGVybVVuYXJ5OworY2xhc3MgVEludGVybUNvbnN0YW50VW5pb247CitjbGFzcyBUSW50ZXJt
U2VsZWN0aW9uOworY2xhc3MgVEludGVybVR5cGVkOworY2xhc3MgVEludGVybVN5bWJvbDsKK2Ns
YXNzIFRJbnRlcm1Mb29wOworY2xhc3MgVEluZm9TaW5rOworCisvLworLy8gQmFzZSBjbGFzcyBm
b3IgdGhlIHRyZWUgbm9kZXMKKy8vCitjbGFzcyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAg
UE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorCisgICAgVElu
dGVybU5vZGUoKSA6IGxpbmUoMCkge30KKyAgICB2aXJ0dWFsIFRTb3VyY2VMb2MgZ2V0TGluZSgp
IGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZShUU291cmNl
TG9jIGwpIHsgbGluZSA9IGw7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciopID0gMDsKKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0
YW50VW5pb24oKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBn
ZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkq
IGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1VbmFy
eSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtU2Vs
ZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBU
SW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IH5USW50ZXJtTm9kZSgpIHsgfQorcHJvdGVjdGVkOgorICAgIFRTb3VyY2VMb2MgbGluZTsKK307
CisKKy8vCisvLyBUaGlzIGlzIGp1c3QgdG8gaGVscCB5YWNjLgorLy8KK3N0cnVjdCBUSW50ZXJt
Tm9kZVBhaXIgeworICAgIFRJbnRlcm1Ob2RlKiBub2RlMTsKKyAgICBUSW50ZXJtTm9kZSogbm9k
ZTI7Cit9OworCisvLworLy8gSW50ZXJtZWRpYXRlIGNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmUg
YSB0eXBlLgorLy8KK2NsYXNzIFRJbnRlcm1UeXBlZCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7Citw
dWJsaWM6CisgICAgVEludGVybVR5cGVkKGNvbnN0IFRUeXBlJiB0KSA6IHR5cGUodCkgIHsgfQor
ICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVkKCkgICAgICAgICB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9
IHQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRUeXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4g
dHlwZTsgfQorICAgIHZpcnR1YWwgVFR5cGUqIGdldFR5cGVQb2ludGVyKCkgeyByZXR1cm4gJnR5
cGU7IH0KKworICAgIHZpcnR1YWwgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgdmlydHVhbCBUUXVhbGlmaWVyIGdldFF1
YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KKyAgICB2aXJ0
dWFsIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVj
aXNpb24oKTsgfQorICAgIHZpcnR1YWwgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXROb21pbmFsU2l6ZSgpOyB9CisgICAgdmlydHVhbCBpbnQgZ2V0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuZ2V0SW5zdGFuY2VTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNWZWN0b3IoKTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIo
KTsgfQorICAgIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgICAgICBjb25zdCB7IHJldHVy
biB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJT
dHJpbmcoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQorICAg
IFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBs
ZXRlU3RyaW5nKCk7IH0KKworcHJvdGVjdGVkOgorICAgIFRUeXBlIHR5cGU7Cit9OworCisvLwor
Ly8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBsb29wcy4KKy8vCitjbGFzcyBUSW50
ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybUxvb3Ao
VEludGVybU5vZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBhQm9keSwgVEludGVybVR5cGVkKiBhVGVz
dCwgVEludGVybVR5cGVkKiBhVGVybWluYWwsIGJvb2wgdGVzdEZpcnN0KSA6IAorICAgICAgICAg
ICAgaW5pdChpbml0KSwKKyAgICAgICAgICAgIGJvZHkoYUJvZHkpLAorICAgICAgICAgICAgdGVz
dChhVGVzdCksCisgICAgICAgICAgICB0ZXJtaW5hbChhVGVybWluYWwpLAorICAgICAgICAgICAg
Zmlyc3QodGVzdEZpcnN0KSB7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BO
b2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7CisgICAgVEludGVybU5vZGUgKmdldEluaXQoKSB7IHJldHVybiBpbml0OyB9
CisgICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9CisgICAgVEludGVy
bVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVzdDsgfQorICAgIFRJbnRlcm1UeXBlZCAqZ2V0
VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsgfQorICAgIGJvb2wgdGVzdEZpcnN0KCkgeyBy
ZXR1cm4gZmlyc3Q7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtTm9kZSAqaW5pdDsKKyAgICBU
SW50ZXJtTm9kZSAqYm9keTsgICAgICAgLy8gY29kZSB0byBsb29wIG92ZXIKKyAgICBUSW50ZXJt
VHlwZWQgKnRlc3Q7ICAgICAgLy8gZXhpdCBjb25kaXRpb24gYXNzb2NpYXRlZCB3aXRoIGxvb3As
IGNvdWxkIGJlIDAgZm9yICdmb3InIGxvb3BzCisgICAgVEludGVybVR5cGVkICp0ZXJtaW5hbDsg
IC8vIGV4aXN0cyBmb3IgZm9yLWxvb3BzCisgICAgYm9vbCBmaXJzdDsgICAgICAgICAgICAgIC8v
IHRydWUgZm9yIHdoaWxlIGFuZCBmb3IsIG5vdCBmb3IgZG8td2hpbGUKK307CisKKy8vCisvLyBI
YW5kbGUgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4sIGFuZCBraWxsLgorLy8KK2NsYXNzIFRJbnRl
cm1CcmFuY2ggOiBwdWJsaWMgVEludGVybU5vZGUgeworcHVibGljOgorICAgIFRJbnRlcm1CcmFu
Y2goVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGUpIDoKKyAgICAgICAgICAgIGZsb3dPcChv
cCksCisgICAgICAgICAgICBleHByZXNzaW9uKGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2
ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0
dXJuIGZsb3dPcDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJu
IGV4cHJlc3Npb247IH0KK3Byb3RlY3RlZDoKKyAgICBUT3BlcmF0b3IgZmxvd09wOworICAgIFRJ
bnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4Y2VwdCBmb3IgInJldHVybiBl
eHA7IiBzdGF0ZW1lbnRzCit9OworCisvLworLy8gTm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN5
bWJvbHMgb3IgY29uc3RhbnRzIGluIHRoZSBzb3VyY2UgY29kZS4KKy8vCitjbGFzcyBUSW50ZXJt
U3ltYm9sIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgLy8gaWYgc3ltYm9s
IGlzIGluaXRpYWxpemVkIGFzIHN5bWJvbChzeW0pLCB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhl
IHBvb2xhbGxvY2F0b3Igb2Ygc3ltLiBJZiBzeW0gY29tZXMgZnJvbQorICAgIC8vIHBlciBwcm9j
ZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1c2VzIGluY3JlYXNlZCBtZW1vcnkg
dXNhZ2UgcGVyIGNvbXBpbGUKKyAgICAvLyBpdCBpcyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wg
PSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKKyAgICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25z
dCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAorICAgICAgICAgICAgVEludGVybVR5
cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07fSAKKyAgICB2aXJ0dWFsIGludCBnZXRJZCgp
IGNvbnN0IHsgcmV0dXJuIGlkOyB9CisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRTeW1i
b2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7ICB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3lt
Ym9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KK3Byb3RlY3RlZDoKKyAgICBpbnQgaWQ7CisgICAg
VFN0cmluZyBzeW1ib2w7Cit9OworCitjbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1Ymxp
YyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKENvbnN0
YW50VW5pb24gKnVuaW9uUG9pbnRlciwgY29uc3QgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQp
LCB1bmlvbkFycmF5UG9pbnRlcih1bmlvblBvaW50ZXIpIHsgfQorICAgIENvbnN0YW50VW5pb24q
IGdldFVuaW9uQXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7
IH0KKyAgICB2b2lkIHNldFVuaW9uQXJyYXlQb2ludGVyKENvbnN0YW50VW5pb24gKmMpIHsgdW5p
b25BcnJheVBvaW50ZXIgPSBjOyB9CisgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Z2V0QXNDb25zdGFudFVuaW9uKCkgIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogKTsKKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCog
Zm9sZChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOworcHJvdGVjdGVkOgor
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOworfTsKKworLy8KKy8vIEludGVy
bWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBlcyB0aGF0IGhvbGQgb3BlcmF0b3JzLgorLy8KK2Ns
YXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAg
IFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9CisgICAgYm9vbCBtb2RpZmll
c1N0YXRlKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJikgeyByZXR1cm4gdHJ1ZTsgfQorcHJvdGVjdGVk
OgorICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3IgbykgOiBUSW50ZXJtVHlwZWQoVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCkpLCBvcChvKSB7fQorICAgIFRJbnRlcm1PcGVyYXRvcihU
T3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCBvcChvKSB7fSAgIAorICAg
IFRPcGVyYXRvciBvcDsKK307CisKKy8vCisvLyBOb2RlcyBmb3IgYWxsIHRoZSBiYXNpYyBiaW5h
cnkgbWF0aCBvcGVyYXRvcnMuCisvLworY2xhc3MgVEludGVybUJpbmFyeSA6IHB1YmxpYyBUSW50
ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yIG8pIDog
VEludGVybU9wZXJhdG9yKG8pIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGVmdChUSW50ZXJtVHlwZWQqIG4pIHsg
bGVmdCA9IG47IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmlnaHQoVEludGVybVR5cGVkKiBuKSB7
IHJpZ2h0ID0gbjsgfQorICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gbGVmdDsgfQorICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0Jp
bmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIHByb21vdGUoVElu
Zm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBsZWZ0OworICAgIFRJbnRl
cm1UeXBlZCogcmlnaHQ7Cit9OworCisvLworLy8gTm9kZXMgZm9yIHVuYXJ5IG1hdGggb3BlcmF0
b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1VbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3Igewor
cHVibGljOgorICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVy
bU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5kKDApIHt9CisgICAgVEludGVybVVuYXJ5KFRPcGVyYXRv
ciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgb3BlcmFuZCgwKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJh
bmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQgPSBvOyB9CisgICAgdmlydHVhbCBUSW50ZXJt
VHlwZWQqIGdldE9wZXJhbmQoKSB7IHJldHVybiBvcGVyYW5kOyB9CisgICAgdmlydHVhbCBUSW50
ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
Ym9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworcHJvdGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCog
b3BlcmFuZDsKK307CisKK3R5cGVkZWYgVFZlY3RvcjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1
ZW5jZTsKK3R5cGVkZWYgVFZlY3RvcjxpbnQ+IFRRdWFsaWZpZXJMaXN0OworLy8KKy8vIE5vZGVz
IHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgorLy8K
K2NsYXNzIFRJbnRlcm1BZ2dyZWdhdGUgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBUSW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVz
ZXJEZWZpbmVkKGZhbHNlKSwgcHJhZ21hVGFibGUoMCkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0
ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3IobyksIHByYWdtYVRhYmxlKDApIHsgfQor
ICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyBkZWxldGUgcHJhZ21hVGFibGU7IH0KKyAgICB2aXJ0
dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKyAg
ICB2aXJ0dWFsIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5j
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9
IG47IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVy
biBuYW1lOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7
IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZpZXJMaXN0JiBnZXRRdWFsaWZpZXIoKSB7IHJldHVybiBx
dWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87
IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KKyAgICBib29sIGdl
dE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KKyAgICBib29sIGdldERlYnVnKCkgeyBy
ZXR1cm4gZGVidWc7IH0KKyAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRh
YmxlJiBwVGFibGUpOworICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBj
b25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtQWdn
cmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgY29weSBjb25zdHJ1
Y3RvcgorICAgIFRJbnRlcm1BZ2dyZWdhdGUmIG9wZXJhdG9yPShjb25zdCBUSW50ZXJtQWdncmVn
YXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICBUSW50ZXJtU2VxdWVu
Y2Ugc2VxdWVuY2U7CisgICAgVFF1YWxpZmllckxpc3QgcXVhbGlmaWVyOworICAgIFRTdHJpbmcg
bmFtZTsKKyAgICBib29sIHVzZXJEZWZpbmVkOyAvLyB1c2VkIGZvciB1c2VyIGRlZmluZWQgZnVu
Y3Rpb24gbmFtZXMKKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7CisgICAgVFBy
YWdtYVRhYmxlICpwcmFnbWFUYWJsZTsKK307CisKKy8vCisvLyBGb3IgaWYgdGVzdHMuICBTaW1w
bGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3aXRjaCBzdGF0ZW1lbnQuCisvLworY2xhc3MgVElu
dGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAgIFRJbnRl
cm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRl
cm1Ob2RlKiBmYWxzZUIpIDoKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZChUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxz
ZUJsb2NrKGZhbHNlQikge30KKyAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29u
ZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCLCBjb25zdCBUVHlwZSYg
dHlwZSkgOgorICAgICAgICAgICAgVEludGVybVR5cGVkKHR5cGUpLCBjb25kaXRpb24oY29uZCks
IHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgYm9vbCB1c2VzVGVybmFyeU9wZXJh
dG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZDsgfQorICAgIHZp
cnR1YWwgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlv
bjsgfQorICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIHRydWVCbG9jazsgfQorICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldEZhbHNlQmxvY2so
KSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9CisgICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0
aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9Citwcm90ZWN0ZWQ6Cisg
ICAgVEludGVybVR5cGVkKiBjb25kaXRpb247CisgICAgVEludGVybU5vZGUqIHRydWVCbG9jazsK
KyAgICBUSW50ZXJtTm9kZSogZmFsc2VCbG9jazsKK307CisKK2VudW0gVmlzaXQKK3sKKyAgICBQ
cmVWaXNpdCwKKyAgICBJblZpc2l0LAorICAgIFBvc3RWaXNpdAorfTsKKworLy8KKy8vIEZvciB0
cmF2ZXJzaW5nIHRoZSB0cmVlLiAgVXNlciBzaG91bGQgZGVyaXZlIGZyb20gdGhpcywgCisvLyBw
dXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRhdGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MKKy8v
IGl0IHRvIGEgVHJhdmVyc2UgbWV0aG9kLgorLy8KKy8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBm
aWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5b3Ugd2FudCB2aXNpdGVkLgorLy8gUmV0dXJu
IGZhbHNlIGZyb20gYSBwcmUtdmlzaXQgdG8gc2tpcCB2aXNpdGluZyB0aGF0IG5vZGUncyBzdWJ0
cmVlLgorLy8KK2NsYXNzIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisKKyAgICBUSW50ZXJtVHJh
dmVyc2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBib29sIGluVmlzaXQgPSBmYWxzZSwgYm9vbCBw
b3N0VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRvTGVmdCA9IGZhbHNlKSA6IAorICAgICAgICAg
ICAgcHJlVmlzaXQocHJlVmlzaXQpLAorICAgICAgICAgICAgaW5WaXNpdChpblZpc2l0KSwKKyAg
ICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQpLAorICAgICAgICAgICAgcmlnaHRUb0xlZnQo
cmlnaHRUb0xlZnQpLAorICAgICAgICAgICAgZGVwdGgoMCkge30KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKikge30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikge30KKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7cmV0dXJuIHRydWU7fQor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKSB7
cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNp
dCwgVEludGVybVNlbGVjdGlvbiopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKikge3JldHVybiB0cnVl
O30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCop
IHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoKikge3JldHVybiB0cnVlO30KKworICAgIHZvaWQgaW5jcmVtZW50RGVw
dGgoKSB7ZGVwdGgrKzt9CisgICAgdm9pZCBkZWNyZW1lbnREZXB0aCgpIHtkZXB0aC0tO30KKwor
ICAgIGNvbnN0IGJvb2wgcHJlVmlzaXQ7CisgICAgY29uc3QgYm9vbCBpblZpc2l0OworICAgIGNv
bnN0IGJvb2wgcG9zdFZpc2l0OworICAgIGNvbnN0IGJvb2wgcmlnaHRUb0xlZnQ7CisKK3Byb3Rl
Y3RlZDoKKyAgICBpbnQgZGVwdGg7Cit9OworCisjZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfTE9DQUxfSU5URVJN
RURJQVRFX0lOQ0xVREVEXworI2RlZmluZSBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwor
CisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKworc3RydWN0
IFRWZWN0b3JGaWVsZHMgeworICAgIGludCBvZmZzZXRzWzRdOworICAgIGludCBudW07Cit9Owor
CisvLworLy8gU2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgdG8gaGVscCBwYXJzZSBhbmQgYnVpbGQg
dGhlIHRyZWUuCisvLworY2xhc3MgVEluZm9TaW5rOworY2xhc3MgVEludGVybWVkaWF0ZSB7Citw
dWJsaWM6ICAgIAorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9j
YXRvcikKKworICAgIFRJbnRlcm1lZGlhdGUoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsg
fQorICAgIFRJbnRlcm1TeW1ib2wqIGFkZFN5bWJvbChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBj
b25zdCBUVHlwZSYsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lv
bihUT3BlcmF0b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7CisgICAgVEludGVybVR5
cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jLCBUU3ltYm9sVGFibGUmKTsKKyAgICBUSW50ZXJt
VHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRJbmRleChU
T3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgVFNv
dXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtTm9kZSogY2hpbGQsIFRTb3VyY2VMb2MsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGdyb3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2Rl
KiByaWdodCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogbWFrZUFnZ3JlZ2F0
ZShUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSog
c2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIFRTb3VyY2VMb2Mp
OworICAgIFRJbnRlcm1Ob2RlKiAgYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybU5vZGVQYWlyIGNvZGUsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkU2Vs
ZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRl
cm1UeXBlZCogZmFsc2VCbG9jaywgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRD
b21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2Mp
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5p
b24qLCBjb25zdCBUVHlwZSYsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogcHJvbW90
ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5pb24qKSA7CisgICAg
Ym9vbCBwYXJzZUNvbnN0VHJlZShUU291cmNlTG9jLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5p
b24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50
UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUSW50ZXJt
Tm9kZSosIFRJbnRlcm1Ob2RlKiwgVEludGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgYm9vbCB0
ZXN0Rmlyc3QsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3Bl
cmF0b3IsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0
b3IsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkU3dp
enpsZShUVmVjdG9yRmllbGRzJiwgVFNvdXJjZUxvYyk7CisgICAgYm9vbCBwb3N0UHJvY2VzcyhU
SW50ZXJtTm9kZSosIEVTaExhbmd1YWdlKTsKKwl2b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOwor
ICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOworICAgIAorcHJvdGVjdGVkOgorICAg
IFRJbmZvU2luayYgaW5mb1Npbms7CisKK3ByaXZhdGU6CisgICAgdm9pZCBvcGVyYXRvcj0oVElu
dGVybWVkaWF0ZSYpOyAvLyBwcmV2ZW50IGFzc2lnbm1lbnRzCit9OworCisjZW5kaWYgLy8gX0xP
Q0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc2lu
Y2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19PU0lOQ0xV
REVfSAorI2RlZmluZSBfX09TSU5DTFVERV9ICisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMg
Y29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGRhdGF0eXBlcyBhbmQKKy8vIGRlY2xhcmVz
IGFueSB3aW5kb3dzIHNwZWNpZmljIGZ1bmN0aW9ucy4KKy8vCisKKyNpZiBkZWZpbmVkKF9XSU4z
MikgfHwgZGVmaW5lZChfV0lONjQpCisjZGVmaW5lIEFOR0xFX09TX1dJTgorI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9f
c3VuKQorI2RlZmluZSBBTkdMRV9PU19QT1NJWAorI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBw
bGF0Zm9ybS4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZGVmaW5lIFNU
UklDVAorI2RlZmluZSBWQ19FWFRSQUxFQU4gMQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlm
IGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUg
PHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJ
TgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKworLy8KKy8vIFRocmVhZCBMb2NhbCBT
dG9yYWdlIE9wZXJhdGlvbnMKKy8vCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCit0eXBlZGVm
IERXT1JEIE9TX1RMU0luZGV4OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAoVExTX09V
VF9PRl9JTkRFWEVTKQorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKK3R5cGVkZWYgdW5z
aWduZWQgaW50IE9TX1RMU0luZGV4OworI2RlZmluZSBPU19JTlZBTElEX1RMU19JTkRFWCAweEZG
RkZGRkZGCisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorCitPU19UTFNJbmRleCBPU19BbGxvY1RM
U0luZGV4KCk7Citib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAq
bHB2VmFsdWUpOworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KTsKKwor
aW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICBh
c3NlcnQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKKyAgICByZXR1cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKKyNlbGlmIGRlZmluZWQo
QU5HTEVfT1NfUE9TSVgpCisgICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsK
KyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCit9CisKKyNlbmRpZiAvLyBfX09TSU5DTFVERV9ICklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9zaXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBwb3NpeCBzcGVjaWZpYyBmdW5jdGlvbnMKKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCisKKyNpZiAhZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNlcnJvciBUcnlpbmcg
dG8gYnVpbGQgYSBwb3NpeCBzcGVjaWZpYyBmaWxlIGluIGEgbm9uLXBvc2l4IGJ1aWxkLgorI2Vu
ZGlmCisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCisvLworT1NfVExT
SW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7CisgICAgcHRocmVhZF9rZXlfdCBwUG9vbEluZGV4
OworCisgICAgLy8KKyAgICAvLyBDcmVhdGUgZ2xvYmFsIHBvb2wga2V5LgorICAgIC8vCisgICAg
aWYgKChwdGhyZWFkX2tleV9jcmVhdGUoJnBQb29sSW5kZXgsIE5VTEwpKSAhPSAwKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBU
aHJlYWQgTG9jYWwgU3RvcmFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICByZXR1cm4gcFBvb2xJbmRleDsKKyAgICB9Cit9CisKKworYm9vbCBP
U19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQoreworICAg
IGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHRocmVhZF9zZXRzcGVjaWZpYyhuSW5kZXgsIGxw
dlZhbHVlKSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBmYWxzZTsKK30KKworCitib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5k
ZXgpCit7CisgICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAg
ICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gRGVsZXRlIHRoZSBn
bG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBpZiAocHRocmVhZF9rZXlfZGVsZXRlKG5JbmRl
eCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
ZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2Vfd2luLmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
b3NpbmNsdWRlLmgiCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5k
b3cncyBzcGVjaWZpYyBmdW5jdGlvbnMKKy8vCisKKyNpZiAhZGVmaW5lZChBTkdMRV9PU19XSU4p
CisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgd2luZG93cyBzcGVjaWZpYyBmaWxlIGluIGEgbm9u
IHdpbmRvd3MgYnVpbGQuCisjZW5kaWYKKworCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2Ug
T3BlcmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworCURXT1JE
IGR3SW5kZXggPSBUbHNBbGxvYygpOworCWlmIChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhF
UykgeworCQlhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2Nh
dGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVY
OworCX0KKworCXJldHVybiBkd0luZGV4OworfQorCisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1Nf
VExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZh
bGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVl
KG5JbmRleCwgbHB2VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxz
ZTsKK30KKworCitib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCit7CisJ
aWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1Nf
U2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K
KworCWlmIChUbHNGcmVlKG5JbmRleCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJu
IGZhbHNlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUhlbHBlci5oIgorCisvLworLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0YSBm
cm9tIG5vZGUgdG8gbm9kZSBpbiAKKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUQ29uc3RU
cmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVENvbnN0
VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBU
T3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5
bVRhYmxlLCBUVHlwZSYgdCkgOiB1bmlvbkFycmF5KGNVbmlvbiksIHR5cGUodCksCisgICAgICAg
IGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwgc2luZ2xlQ29uc3RhbnRQYXJhbShzaW5n
bGVDb25zdFBhcmFtKSwgaW5mb1Npbmsoc2luayksIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwgZXJy
b3IoZmFsc2UpLCBpc01hdHJpeChmYWxzZSksIG1hdHJpeFNpemUoMCkKKwl7CisJCWluZGV4ID0g
MDsKKwl9CisKKwlib29sIGVycm9yOworCitwcm90ZWN0ZWQ6CisJdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKik7CisJdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKTsKKwlib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
CisJYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKwlib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisJYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworCWJvb2wgdmlzaXRM
b29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOworCWJvb2wgdmlzaXRCcmFuY2goVmlzaXQg
dmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKKworICAgIGludCBpbmRleDsKKyAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5OworICAgIFRUeXBlIHR5cGU7CisgICAgVE9wZXJhdG9yIGNvbnN0cnVj
dG9yVHlwZTsKKyAgICBib29sIHNpbmdsZUNvbnN0YW50UGFyYW07CisgICAgVEluZm9TaW5rJiBp
bmZvU2luazsKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOworICAgIGludCBzaXplOyAv
LyBzaXplIG9mIHRoZSBjb25zdHJ1Y3RvciAoIDQgZm9yIHZlYzQpCisgICAgYm9vbCBpc01hdHJp
eDsKKyAgICBpbnQgbWF0cml4U2l6ZTsgLy8gZGltZW5zaW9uIG9mIHRoZSBtYXRyaXggKG5vbWlu
YWwgc2l6ZSBhbmQgbm90IHRoZSBpbnN0YW5jZSBzaXplKQorfTsKKworLy8KKy8vIFRoZSByZXN0
IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQor
Ly8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgorLy8KKy8vIFJldHVybiB0
cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisv
LyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJz
ZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwordm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiU3ltYm9sIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29u
c3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIHJldHVybjsKKworfQorCitib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5v
ZGUpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyKCk7CisgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCkgeworICAgICAg
ICBUU3RyaW5nIGJ1ZjsKKyAgICAgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2ln
bmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJv
ciwgYnVmLmNfc3RyKCksIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgIGVycm9yID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAgCisgICAgfQorCisgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCaW5hcnkgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBj
b25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcgYnVmOworICAgIGJ1Zi5hcHBlbmQoIidjb25z
dHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgIGJ1Zi5hcHBlbmQo
dHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9IHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOyAgCit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUtPmlzQ29uc3RydWN0b3IoKSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcENvbW1hKSB7
CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3In
IDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBl
LmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3Ig
PSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisKKyAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMCkgeworICAgICAgICBlcnJvciA9IHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGZsYWcgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAxICYmIG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQo
KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGZsYWcpIAorICAgIHsKKyAgICAgICAg
c2luZ2xlQ29uc3RhbnRQYXJhbSA9IHRydWU7IAorICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBu
b2RlLT5nZXRPcCgpOworICAgICAgICBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgIGlzTWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgCisKKyAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IG5vZGUtPmdldFNlcXVlbmNlKCku
YmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gbm9kZS0+
Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkg
PT0gRU9wQ29tbWEpCisgICAgICAgICAgICBpbmRleCA9IDA7ICAgICAgICAgICAKKworICAgICAg
ICAoKnApLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9ICAgCisgICAgaWYgKGZsYWcpIAorICAgIHsK
KyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlOyAgIAorICAgICAgICBjb25zdHJ1
Y3RvclR5cGUgPSBFT3BOdWxsOworICAgICAgICBzaXplID0gMDsKKyAgICAgICAgaXNNYXRyaXgg
PSBmYWxzZTsKKyAgICAgICAgbWF0cml4U2l6ZSA9IDA7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgIlNlbGVjdGlvbiBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNv
bnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9u
KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIENvbnN0YW50VW5pb24qIGxlZnRV
bmlvbkFycmF5ID0gdW5pb25BcnJheTsKKyAgICBpbnQgaW5zdGFuY2VTaXplID0gdHlwZS5nZXRP
YmplY3RTaXplKCk7CisKKyAgICBpZiAoaW5kZXggPj0gaW5zdGFuY2VTaXplKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKKyAgICAgICAgaW50IHNp
emUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgIAorICAgICAgICBDb25z
dGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
OworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOworCisgICAg
ICAgICAgICAoaW5kZXgpKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQg
dG90YWxTaXplID0gaW5kZXggKyBzaXplOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVu
aW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBpZiAoIWlz
TWF0cml4KSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
aSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKwor
ICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAg
ICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAvLyBm
b3IgbWF0cml4IGNvbnN0cnVjdG9ycworICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAg
ICAgICAgIGludCBlbGVtZW50ID0gaW5kZXg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gaW5k
ZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID49IGluc3Rh
bmNlU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09
IDAgKQorICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25B
cnJheVtjb3VudF07CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworCisgICAgICAgICAgICAgICAgKGlu
ZGV4KSsrOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RT
aXplKCkgPiAxKQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUQ29uc3RUcmF2ZXJz
ZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCit7CisgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiTG9vcCBOb2RlIGZvdW5k
IGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlz
aXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7CisgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQnJhbmNoIE5vZGUgZm91bmQg
aW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRo
ZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRp
dmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Np
bmcgb2YgdGhhdAorLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJl
IHByb2Nlc3NlZC4KKy8vCitib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKFRTb3Vy
Y2VMb2MgbGluZSwgVEludGVybU5vZGUqIHJvb3QsIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXks
IFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFRU
eXBlIHQsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25BcnJh
eSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgc3ltYm9s
VGFibGUsIHQpOworCisgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKKyAgICBpZiAoaXQuZXJyb3Ip
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
fQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfY29tbW9uLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvcl9jb21tb24udmNwcm9qCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfY29tbW9uLnZjcHJv
agkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RU
eXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJ0cmFuc2xhdG9yX2Nv
bW1vbiINCisJUHJvamVjdEdVSUQ9Ins1QjNBNkRCOC0xRTdFLTQwRDctOTJCOS1EQThBQUU2MTlG
QUR9Ig0KKwlSb290TmFtZXNwYWNlPSJjb21waWxlciINCisJS2V5d29yZD0iV2luMzJQcm9qIg0K
KwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJ
CTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJPC9QbGF0Zm9ybXM+DQorCTxU
b29sRmlsZXM+DQorCTwvVG9vbEZpbGVzPg0KKwk8Q29uZmlndXJhdGlvbnM+DQorCQk8Q29uZmln
dXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rv
cnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpXGNvbW1vbiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0i
NCINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
UHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3Rv
bUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVy
YXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94
eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29s
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJ
T3B0aW1pemF0aW9uPSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFBy
b2plY3REaXIpOyQoUHJvamVjdERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGUiDQor
CQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VS
RV9OT19ERVBSRUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJ
CQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlV
c2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRl
Y3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9u
Rm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3Vy
Y2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNl
Q29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZl
bnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhD
b3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRv
b2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJ
TmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZp
Z3VyYXRpb25OYW1lKVxjb21tb24iDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hh
cmFjdGVyU2V0PSIwIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0
aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFBy
b2plY3REaXIpOyQoUHJvamVjdERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGUiDQor
CQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VS
RV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCINCisJCQkJUnVudGltZUxpYnJh
cnk9IjAiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9
IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJCURl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xp
YnJhcmlhblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bv
c3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwk8L0NvbmZp
Z3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2VzPg0KKwk8RmlsZXM+DQor
CQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZpbHRlcj0iY3BwO2M7Y2M7
Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0i
ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQorCQkJPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxkZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGdsc2xhbmcubCINCisJCQkJPg0KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJPg0KKwkJ
CQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkJCQlEZXNjcmlw
dGlvbj0iRXhlY3V0aW5nIGZsZXggb24gJChJbnB1dFBhdGgpIg0KKwkJCQkJCUNvbW1hbmRMaW5l
PSJAZWNobyBvbiYjeDBEOyYjeDBBO2lmIEVYSVNUICZxdW90OyQoSW5wdXREaXIpR2VuX2dsc2xh
bmcuY3BwJnF1b3Q7IGRlbCAmcXVvdDskKElucHV0RGlyKUdlbl9nbHNsYW5nLmNwcCZxdW90OyYj
eDBEOyYjeDBBOyZxdW90OyQoSW5wdXREaXIpdG9vbHNcZmxleC5leGUmcXVvdDsgJnF1b3Q7JChJ
bnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7cmVuYW1lICZxdW90OyQoSW5wdXREaXIpbGV4Lnl5
LmMmcXVvdDsgR2VuXyQoSW5wdXROYW1lKS5jcHAmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiDQorCQkJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xzbGFuZ190YWIuaCINCisJ
CQkJCQlPdXRwdXRzPSIkKElucHV0RGlyKUdlbl9nbHNsYW5nLmNwcCINCisJCQkJCS8+DQorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkND
dXN0b21CdWlsZFRvb2wiDQorCQkJCQkJRGVzY3JpcHRpb249IkV4ZWN1dGluZyBmbGV4IG9uICQo
SW5wdXRQYXRoKSINCisJCQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtpZiBF
WElTVCAmcXVvdDskKElucHV0RGlyKUdlbl9nbHNsYW5nLmNwcCZxdW90OyBkZWwgJnF1b3Q7JChJ
bnB1dERpcilHZW5fZ2xzbGFuZy5jcHAmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKElucHV0RGly
KXRvb2xzXGZsZXguZXhlJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBB
O3JlbmFtZSAmcXVvdDskKElucHV0RGlyKWxleC55eS5jJnF1b3Q7IEdlbl8kKElucHV0TmFtZSku
Y3BwJiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCQkJCUFkZGl0aW9uYWxE
ZXBlbmRlbmNpZXM9Imdsc2xhbmdfdGFiLmgiDQorCQkJCQkJT3V0cHV0cz0iJChJbnB1dERpcilH
ZW5fZ2xzbGFuZy5jcHAiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2xzbGFuZy55Ig0KKwkJ
CQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQor
CQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJ
CQkJCURlc2NyaXB0aW9uPSJFeGVjdXRpbmcgQmlzb24gb24gJChJbnB1dFBhdGgpIg0KKwkJCQkJ
CUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO1NFVCBCSVNPTl9TSU1QTEU9dG9vbHNc
Ymlzb24uc2ltcGxlJiN4MEQ7JiN4MEE7U0VUIEJJU09OX0hBSVJZPXRvb2xzXGJpc29uLnNpbXBs
ZSYjeDBEOyYjeDBBO2lmIEVYSVNUICZxdW90OyQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1lKV90
YWIuY3BwJnF1b3Q7IGRlbCAmcXVvdDskKElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFiLmNw
cCZxdW90OyYjeDBEOyYjeDBBO3Rvb2xzXGJpc29uLmV4ZSAtZCAtdCAtdiAkKElucHV0TmFtZSku
eSYjeDBEOyYjeDBBO3JlbmFtZSAmcXVvdDskKElucHV0RGlyKSQoSW5wdXROYW1lKV90YWIuYyZx
dW90OyBHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiDQorCQkJCQkJT3V0cHV0cz0iJChJbnB1dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5j
cHAiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCQk8VG9v
bA0KKwkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCQkJCURlc2NyaXB0aW9uPSJF
eGVjdXRpbmcgQmlzb24gb24gJChJbnB1dFBhdGgpIg0KKwkJCQkJCUNvbW1hbmRMaW5lPSJAZWNo
byBvbiYjeDBEOyYjeDBBO1NFVCBCSVNPTl9TSU1QTEU9dG9vbHNcYmlzb24uc2ltcGxlJiN4MEQ7
JiN4MEE7U0VUIEJJU09OX0hBSVJZPXRvb2xzXGJpc29uLnNpbXBsZSYjeDBEOyYjeDBBO2lmIEVY
SVNUICZxdW90OyQoSW5wdXREaXIpR2VuXyQoSW5wdXROYW1lKV90YWIuY3BwJnF1b3Q7IGRlbCAm
cXVvdDskKElucHV0RGlyKUdlbl8kKElucHV0TmFtZSlfdGFiLmNwcCZxdW90OyYjeDBEOyYjeDBB
O3Rvb2xzXGJpc29uLmV4ZSAtZCAtdCAtdiAkKElucHV0TmFtZSkueSYjeDBEOyYjeDBBO3JlbmFt
ZSAmcXVvdDskKElucHV0RGlyKSQoSW5wdXROYW1lKV90YWIuYyZxdW90OyBHZW5fJChJbnB1dE5h
bWUpX3RhYi5jcHAmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJCQkJT3V0
cHV0cz0iJChJbnB1dERpcilHZW5fJChJbnB1dE5hbWUpX3RhYi5jcHAiDQorCQkJCQkvPg0KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cSW5mb1NpbmsuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplLmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZURsbC5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEludGVy
bWVkaWF0ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXGludGVybU91dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXEludGVybVRyYXZlcnNlLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cb3Nzb3VyY2Vfd2luLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccGFy
c2VDb25zdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFBhcnNlSGVscGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUG9vbEFsbG9jLmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVhbGlmaWVyQWxpdmUuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW1v
dmVUcmVlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cU2hhZGVyTGFuZy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFN5bWJvbFRhYmxlLmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9InByZXByb2Nlc3NvciINCisJCQkJPg0KKwkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxhdG9tLmMiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9j
ZXNzb3JcY3BwLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJl
bGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcY3Bwc3RydWN0LmMiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3JcbWVt
b3J5LmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLlxwcmVwcm9jZXNzb3Jcc2Nhbm5lci5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQor
CQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHN5bWJvbHMuYyIN
CisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
XHByZXByb2Nlc3Nvclx0b2tlbnMuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmls
dGVyPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0iZ2VuZXJhdGVkIg0KKwkJCQk+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cR2VuX2dsc2xhbmcuY3BwIg0KKwkJCQkJPg0KKwkJ
CQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cR2VuX2dsc2xhbmdf
dGFiLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0
ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDto
cHA7aHh4O2htO2lubDtpbmM7eHNkIg0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04
OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQmFzZVR5cGVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbW1vbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25zdGFudFVuaW9uLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXGRlYnVnLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluZm9TaW5r
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
XEluaXRpYWxpemUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cSW5pdGlhbGl6ZURsbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplR2xvYmFscy5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbml0aWFsaXplUGFy
c2VDb250ZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXGludGVybWVkaWF0ZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxsb2NhbGludGVybWVkaWF0ZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxNTWFwLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXG9zaW5jbHVkZS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxQ
YXJzZUhlbHBlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxQb29sQWxsb2MuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVhbGlmaWVyQWxpdmUuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVtb3ZlVHJlZS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVk
ZVxHTFNMQU5HXFJlc291cmNlTGltaXRzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMU0xBTkdcU2hhZGVyTGFuZy5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxT
aEhhbmRsZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxTeW1ib2xUYWJsZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxUeXBlcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlx1bmlzdGQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsdGVyDQorCQkJCU5hbWU9InByZXByb2Nlc3NvciINCisJCQkJPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHByZXByb2Nlc3NvclxhdG9tLmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNz
b3JcY29tcGlsZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXGNwcC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXG1lbW9yeS5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5ccHJlcHJvY2Vzc29yXHBhcnNlci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHByZXByb2Nlc3MuaCINCisJ
CQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXHBy
ZXByb2Nlc3NvclxzY2FubmVyLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9jZXNzb3Jcc2xnbG9iYWxzLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxwcmVwcm9j
ZXNzb3Jcc3ltYm9scy5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5ccHJlcHJvY2Vzc29yXHRva2Vucy5oIg0KKwkJCQkJPg0KKwkJCQk8
L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJnZW5lcmF0ZWQi
DQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnbHNsYW5nX3RhYi5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQk8L0ZpbHRlcj4NCisJ
PC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2pl
Y3Q+DQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfaGxzbC52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3JfaGxzbC52Y3Byb2oJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvcl9obHNsLnZjcHJvagko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBl
PSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJ0cmFuc2xhdG9yX2hsc2wi
DQorCVByb2plY3RHVUlEPSJ7NTYyMEYwRTQtNkM0My00OUJDLUExNzgtQjgwNEUxQTBDM0E3fSIN
CisJUm9vdE5hbWVzcGFjZT0iQ3Jvc3NDb21waWxlckhMU0wiDQorCUtleXdvcmQ9IldpbjMyUHJv
aiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KKwk+DQorCTxQbGF0Zm9ybXM+
DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0K
Kwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENv
bmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9
IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGly
ZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKVxobHNsIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBl
PSI0Ig0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3Vz
dG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2Vu
ZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVBy
b3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJ
CQlPcHRpbWl6YXRpb249IjAiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQo
UHJvamVjdERpcikuLi87JChQcm9qZWN0RGlyKS4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nl
c3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5H
UztOT01JTk1BWCINCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiDQorCQkJCUJhc2ljUnVudGlt
ZUNoZWNrcz0iMyINCisJCQkJUnVudGltZUxpYnJhcnk9IjEiDQorCQkJCVVzZVByZWNvbXBpbGVk
SGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURlYnVnSW5mb3JtYXRpb25G
b3JtYXQ9IjQiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJj
ZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VD
b21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVu
dFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENv
cFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9v
bCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlO
YW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikk
KENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmln
dXJhdGlvbk5hbWUpXGhsc2wiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiDQorCQkJQ2hhcmFj
dGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9u
RXhwYW5zaW9uPSIyIg0KKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQorCQkJ
CUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikuLi87JChQcm9qZWN0
RGlyKS4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtO
REVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztOT01JTk1BWDtfU0VDVVJFX1NDTD0w
Ig0KKwkJCQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtp
bmc9InRydWUiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2
ZWw9IjMiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0
aW9uPg0KKwk8L0NvbmZpZ3VyYXRpb25zPg0KKwk8UmVmZXJlbmNlcz4NCisJPC9SZWZlcmVuY2Vz
Pg0KKwk8RmlsZXM+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KKwkJCUZp
bHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQorCQkJVW5p
cXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQor
CQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb2RlR2VuSExTTC5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXE91dHB1
dEhMU0wuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxUcmFuc2xhdG9ySExTTC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFVuZm9sZFNlbGVjdC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMi
DQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJVW5pcXVlSWRlbnRp
Zmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQorCQkJPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxPdXRwdXRITFNMLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRyYW5zbGF0b3JITFNMLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFVu
Zm9sZFNlbGVjdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmls
ZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvdW5pc3RkLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
dW5pc3RkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKy8vIFRoaXMgaXMgYSBOVUxMIGZp
bGUgYW5kIGlzIG1lYW50IHRvIGJlIGVtcHR5CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0MCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
KworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQ
Uk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisKKy8vCisvLyBhdG9tLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIu
aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAi
Y29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9i
YWxzLmgiCisKKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiByZWFsbG9jCisjdW5kZWYgZnJlZQorCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN0cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCB2YWw7CisgICAgY29uc3QgY2hh
ciAqc3RyOworfSB0b2tlbnNbXSA9IHsKKyAgICB7IENQUF9BTkRfT1AsICAgICAgICAgIiYmIiB9
LAorICAgIHsgQ1BQX0FORF9BU1NJR04sICAgICAiJj0iIH0sCisgICAgeyBDUFBfU1VCX0FTU0lH
TiwgICAgICItPSIgfSwKKyAgICB7IENQUF9NT0RfQVNTSUdOLCAgICAgIiU9IiB9LAorICAgIHsg
Q1BQX0FERF9BU1NJR04sICAgICAiKz0iIH0sCisgICAgeyBDUFBfRElWX0FTU0lHTiwgICAgICIv
PSIgfSwKKyAgICB7IENQUF9NVUxfQVNTSUdOLCAgICAgIio9IiB9LAorICAgIHsgQ1BQX1JJR0hU
X0JSQUNLRVQsICAiOj4iIH0sCisgICAgeyBDUFBfRVFfT1AsICAgICAgICAgICI9PSIgfSwKKyAg
ICB7IENQUF9YT1JfT1AsICAgICAgICAgIl5eIiB9LCAKKyAgICB7IENQUF9YT1JfQVNTSUdOLCAg
ICAgIl49IiB9LCAKKyAgICB7IENQUF9GTE9BVENPTlNUQU5ULCAgIjxmbG9hdC1jb25zdD4iIH0s
CisgICAgeyBDUFBfR0VfT1AsICAgICAgICAgICI+PSIgfSwKKyAgICB7IENQUF9SSUdIVF9PUCwg
ICAgICAgIj4+IiB9LAorICAgIHsgQ1BQX1JJR0hUX0FTU0lHTiwgICAiPj49IiB9LCAKKyAgICB7
IENQUF9JREVOVElGSUVSLCAgICAgIjxpZGVudD4iIH0sCisgICAgeyBDUFBfSU5UQ09OU1RBTlQs
ICAgICI8aW50LWNvbnN0PiIgfSwKKyAgICB7IENQUF9MRV9PUCwgICAgICAgICAgIjw9IiB9LAor
ICAgIHsgQ1BQX0xFRlRfT1AsICAgICAgICAiPDwiIH0sCisgICAgeyBDUFBfTEVGVF9BU1NJR04s
ICAgICI8PD0iIH0sCisgICAgeyBDUFBfTEVGVF9CUkFDS0VULCAgICI8OiIgfSwKKyAgICB7IENQ
UF9MRUZUX0JSQUNFLCAgICAgIjwlIiB9LCAKKyAgICB7IENQUF9ERUNfT1AsICAgICAgICAgIi0t
IiB9LAorICAgIHsgQ1BQX1JJR0hUX0JSQUNFLCAgICAiJT4iIH0sIAorICAgIHsgQ1BQX05FX09Q
LCAgICAgICAgICAiIT0iIH0sCisgICAgeyBDUFBfT1JfT1AsICAgICAgICAgICJ8fCIgfSwKKyAg
ICB7IENQUF9PUl9BU1NJR04sICAgICAgInw9IiB9LCAKKyAgICB7IENQUF9JTkNfT1AsICAgICAg
ICAgIisrIiB9LAorICAgIHsgQ1BQX1NUUkNPTlNUQU5ULCAgICAiPHN0cmluZy1jb25zdD4iIH0s
CisgICAgeyBDUFBfVFlQRUlERU5USUZJRVIsICI8dHlwZS1pZGVudD4iIH0sCit9OworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vIFN0cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKKyNkZWZpbmUgSU5JVF9TVFJJTkdfVEFCTEVfU0laRSAxNjM4NAorCit0eXBlZGVmIHN0cnVj
dCBTdHJpbmdUYWJsZV9SZWMgeworICAgIGNoYXIgKnN0cmluZ3M7CisgICAgaW50IG5leHRGcmVl
OworICAgIGludCBzaXplOworfSBTdHJpbmdUYWJsZTsKKworLyoKKyAqIEluaXRTdHJpbmdUYWJs
ZSgpIC0gSW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHRhYmxlLgorICoKKyAqLworCitzdGF0aWMgaW50
IEluaXRTdHJpbmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQoreworICAgIHN0YWJsZS0+c3Ry
aW5ncyA9IChjaGFyICopIG1hbGxvYyhJTklUX1NUUklOR19UQUJMRV9TSVpFKTsKKyAgICBpZiAo
IXN0YWJsZS0+c3RyaW5ncykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gWmVyby10aCBvZmZz
ZXQgbWVhbnMgImVtcHR5IiBzbyBkb24ndCB1c2UgaXQuCisgICAgc3RhYmxlLT5uZXh0RnJlZSA9
IDE7CisgICAgc3RhYmxlLT5zaXplID0gSU5JVF9TVFJJTkdfVEFCTEVfU0laRTsKKyAgICByZXR1
cm4gMTsKK30gLy8gSW5pdFN0cmluZ1RhYmxlCisKKy8qCisgKiBGcmVlU3RyaW5nVGFibGUoKSAt
IEZyZWUgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKi8KKworc3RhdGljIHZvaWQgRnJlZVN0cmlu
Z1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCit7CisgICAgaWYgKHN0YWJsZS0+c3RyaW5ncykK
KyAgICAgICAgZnJlZShzdGFibGUtPnN0cmluZ3MpOworICAgIHN0YWJsZS0+c3RyaW5ncyA9IE5V
TEw7CisgICAgc3RhYmxlLT5uZXh0RnJlZSA9IDA7CisgICAgc3RhYmxlLT5zaXplID0gMDsKK30g
Ly8gRnJlZVN0cmluZ1RhYmxlCisKKy8qCisgKiBIYXNoU3RyaW5nKCkgLSBIYXNoIGEgc3RyaW5n
IHdpdGggdGhlIGJhc2UgaGFzaCBmdW5jdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGludCBIYXNo
U3RyaW5nKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGh2YWwgPSAwOworCisgICAgd2hpbGUg
KCpzKSB7CisgICAgICAgIGh2YWwgPSAoaHZhbCoxMzUwNyArICpzKjE5NykgXiAoaHZhbCA+PiAy
KTsKKyAgICAgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gaHZhbCAmIDB4N2ZmZmZmZmY7Cit9
IC8vIEhhc2hTdHJpbmcKKworLyoKKyAqIEhhc2hTdHJpbmcyKCkgLSBIYXNoIGEgc3RyaW5nIHdp
dGggdGhlIGluY3JpbWVudGluZyBoYXNoIGZ1bmN0aW9uLgorICoKKyAqLworCitzdGF0aWMgaW50
IEhhc2hTdHJpbmcyKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGh2YWwgPSAwOworCisgICAg
d2hpbGUgKCpzKSB7CisgICAgICAgIGh2YWwgPSAoaHZhbCo3MjkgKyAqcyozNykgXiAoaHZhbCA+
PiAxKTsKKyAgICAgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gaHZhbDsKK30gLy8gSGFzaFN0
cmluZzIKKworLyoKKyAqIEFkZFN0cmluZygpIC0gQWRkIGEgc3RyaW5nIHRvIGEgc3RyaW5nIHRh
YmxlLiAgUmV0dXJuIGl0J3Mgb2Zmc2V0LgorICoKKyAqLworCitzdGF0aWMgaW50IEFkZFN0cmlu
ZyhTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBsZW4sIGxv
YzsKKyAgICBjaGFyICpzdHI7CisKKyAgICBsZW4gPSAoaW50KSBzdHJsZW4ocyk7CisgICAgaWYg
KHN0YWJsZS0+bmV4dEZyZWUgKyBsZW4gKyAxID49IHN0YWJsZS0+c2l6ZSkgeworICAgICAgICBh
c3NlcnQoc3RhYmxlLT5zaXplIDwgMTAwMDAwMCk7CisgICAgICAgIHN0ciA9IChjaGFyICopIG1h
bGxvYyhzdGFibGUtPnNpemUqMik7CisgICAgICAgIG1lbWNweShzdHIsIHN0YWJsZS0+c3RyaW5n
cywgc3RhYmxlLT5zaXplKTsKKyAgICAgICAgZnJlZShzdGFibGUtPnN0cmluZ3MpOworICAgICAg
ICBzdGFibGUtPnN0cmluZ3MgPSBzdHI7CisgICAgfQorICAgIGxvYyA9IHN0YWJsZS0+bmV4dEZy
ZWU7CisgICAgc3RyY3B5KCZzdGFibGUtPnN0cmluZ3NbbG9jXSwgcyk7CisgICAgc3RhYmxlLT5u
ZXh0RnJlZSArPSBsZW4gKyAxOworICAgIHJldHVybiBsb2M7Cit9IC8vIEFkZFN0cmluZworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBIYXNoIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyNkZWZpbmUgSU5JVF9IQVNIX1RBQkxFX1NJWkUgMjA0NworI2RlZmluZSBIQVNIX1RB
QkxFX01BWF9DT0xMSVNJT05TIDMKKwordHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5X1JlYyB7Cisg
ICAgaW50IGluZGV4OyAgICAgIC8vIFN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc3RyaW5nIHJlcHJl
c2VudGF0aW9uCisgICAgaW50IHZhbHVlOyAgICAgIC8vIEF0b20gKHN5bWJvbCkgdmFsdWUKK30g
SGFzaEVudHJ5OworCit0eXBlZGVmIHN0cnVjdCBIYXNoVGFibGVfUmVjIHsKKyAgICBIYXNoRW50
cnkgKmVudHJ5OworICAgIGludCBzaXplOworICAgIGludCBlbnRyaWVzOworICAgIGludCBjb3Vu
dHNbSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOworfSBIYXNoVGFibGU7CisKKy8qCisg
KiBJbml0SGFzaFRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqLwor
CitzdGF0aWMgaW50IEluaXRIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUsIGludCBmc2l6ZSkK
K3sKKyAgICBpbnQgaWk7CisKKyAgICBodGFibGUtPmVudHJ5ID0gKEhhc2hFbnRyeSAqKSBtYWxs
b2Moc2l6ZW9mKEhhc2hFbnRyeSkqZnNpemUpOworICAgIGlmICghaHRhYmxlLT5lbnRyeSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaHRhYmxlLT5zaXplID0gZnNpemU7CisgICAgZm9yIChpaSA9
IDA7IGlpIDwgZnNpemU7IGlpKyspIHsKKyAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0uaW5kZXgg
PSAwOworICAgICAgICBodGFibGUtPmVudHJ5W2lpXS52YWx1ZSA9IDA7CisgICAgfQorICAgIGh0
YWJsZS0+ZW50cmllcyA9IDA7CisgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFY
X0NPTExJU0lPTlM7IGlpKyspCisgICAgICAgIGh0YWJsZS0+Y291bnRzW2lpXSA9IDA7CisgICAg
cmV0dXJuIDE7Cit9IC8vIEluaXRIYXNoVGFibGUKKworLyoKKyAqIEZyZWVIYXNoVGFibGUoKSAt
IEZyZWUgdGhlIGhhc2ggdGFibGUuCisgKgorICovCisKK3N0YXRpYyB2b2lkIEZyZWVIYXNoVGFi
bGUoSGFzaFRhYmxlICpodGFibGUpCit7CisgICAgaWYgKGh0YWJsZS0+ZW50cnkpCisgICAgICAg
IGZyZWUoaHRhYmxlLT5lbnRyeSk7CisgICAgaHRhYmxlLT5lbnRyeSA9IE5VTEw7CisgICAgaHRh
YmxlLT5zaXplID0gMDsKKyAgICBodGFibGUtPmVudHJpZXMgPSAwOworfSAvLyBGcmVlSGFzaFRh
YmxlCisKKy8qCisgKiBFbXB0eSgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0
eS4KKyAqCisgKi8KKworc3RhdGljIGludCBFbXB0eShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGhh
c2hsb2MpCit7CisgICAgYXNzZXJ0KGhhc2hsb2MgPj0gMCAmJiBoYXNobG9jIDwgaHRhYmxlLT5z
aXplKTsKKyAgICBpZiAoaHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleCA9PSAwKSB7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30g
Ly8gRW1wdHkKKworLyoKKyAqIE1hdGNoKCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlz
IG1hdGNoZXMgYSBzdHJpbmcuCisgKgorICovCisKK3N0YXRpYyBpbnQgTWF0Y2goSGFzaFRhYmxl
ICpodGFibGUsIFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBoYXNobG9j
KQoreworICAgIGludCBzdHJsb2M7CisKKyAgICBzdHJsb2MgPSBodGFibGUtPmVudHJ5W2hhc2hs
b2NdLmluZGV4OworICAgIGlmICghc3RyY21wKHMsICZzdGFibGUtPnN0cmluZ3Nbc3RybG9jXSkp
IHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfSAvLyBNYXRjaAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBBdG9tIHRhYmxl
OiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgSU5JVF9BVE9NX1RBQkxFX1NJWkUg
MTAyNAorCisKK3N0cnVjdCBBdG9tVGFibGVfUmVjIHsKKyAgICBTdHJpbmdUYWJsZSBzdGFibGU7
IC8vIFN0cmluZyB0YWJsZS4KKyAgICBIYXNoVGFibGUgaHRhYmxlOyAgIC8vIEhhc2hlcyBzdHJp
bmcgdG8gYXRvbSBudW1iZXIgYW5kIHRva2VuIHZhbHVlLiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgdG9rZW4gdmFsdWUgYnV0
IGVhY2ggdW5pcXVlIHN0cmluZyBpcyBhIHVuaXF1ZSBhdG9tLgorICAgIGludCAqYW1hcDsgICAg
ICAgICAgLy8gTWFwcyBhdG9tIHZhbHVlIHRvIG9mZnNldCBpbiBzdHJpbmcgdGFibGUuICBBdG9t
cyBhbGwgbWFwIHRvIHVuaXF1ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5ncyBl
eGNlcHQgZm9yIHNvbWUgdW5kZWZpbmVkIHZhbHVlcyBpbiB0aGUgbG93ZXIsIGZpeGVkIHBhcnQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBhdG9tIHRhYmxlIHRoYXQgbWFwIHRv
ICI8dW5kZWZpbmVkPiIuICBUaGUgbG93ZXN0IDI1NiBhdG9tcworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY29ycmVzcG9uZCB0byBzaW5nbGUgY2hhcmFjdGVyIEFTQ0lJIHZhbHVlcyBleGNl
cHQgZm9yIGFscGhhbnVtZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVy
cyBhbmQgJ18nLCB3aGljaCBjYW4gYmUgb3RoZXIgdG9rZW5zLiAgTmV4dCBjb21lIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2UgdG9rZW5zIHdpdGggdGhlaXIgYXRvbSB2
YWx1ZXMgZXF1YWwgdG8gdGhlIHRva2VuIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlbiBjb21lIHByZWRlZmluZWQgYXRvbXMsIGZvbGxvd2VkIGJ5IHVzZXIgc3BlY2lmaWVk
IGlkZW50aWZpZXJzLgorICAgIGludCAqYXJldjsgICAgICAgICAgLy8gUmV2ZXJzZWQgYXRvbSBm
b3Igc3ltYm9sIHRhYmxlIHVzZS4KKyAgICBpbnQgbmV4dEZyZWU7CisgICAgaW50IHNpemU7Cit9
OworCitzdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgMCB9IH07CitBdG9tVGFibGUgKmF0
YWJsZSA9ICZsYXRhYmxlOworCitzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0
YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOworCisvKgorICogR3Jvd0F0b21UYWJsZSgp
IC0gR3JvdyB0aGUgYXRvbSB0YWJsZSB0byBhdCBsZWFzdCAic2l6ZSIgaWYgaXQncyBzbWFsbGVy
LgorICoKKyAqLworCitzdGF0aWMgaW50IEdyb3dBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUs
IGludCBzaXplKQoreworICAgIGludCAqbmV3bWFwLCAqbmV3cmV2OworCisgICAgaWYgKGF0YWJs
ZS0+c2l6ZSA8IHNpemUpIHsKKyAgICAgICAgaWYgKGF0YWJsZS0+YW1hcCkgeworICAgICAgICAg
ICAgbmV3bWFwID0gcmVhbGxvYyhhdGFibGUtPmFtYXAsIHNpemVvZihpbnQpKnNpemUpOworICAg
ICAgICAgICAgbmV3cmV2ID0gcmVhbGxvYyhhdGFibGUtPmFyZXYsIHNpemVvZihpbnQpKnNpemUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3bWFwID0gbWFsbG9jKHNpemVvZihp
bnQpKnNpemUpOworICAgICAgICAgICAgbmV3cmV2ID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUp
OworICAgICAgICAgICAgYXRhYmxlLT5zaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IW5ld21hcCB8fCAhbmV3cmV2KSB7CisgICAgICAgICAgICAvKiBmYWlsZWQgdG8gZ3JvdyAtLSBl
cnJvciAqLworICAgICAgICAgICAgaWYgKG5ld21hcCkKKyAgICAgICAgICAgICAgICBhdGFibGUt
PmFtYXAgPSBuZXdtYXA7CisgICAgICAgICAgICBpZiAobmV3cmV2KQorICAgICAgICAgICAgICAg
IGF0YWJsZS0+YW1hcCA9IG5ld3JldjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
fQorICAgICAgICBtZW1zZXQoJm5ld21hcFthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJs
ZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbXNldCgmbmV3cmV2W2F0YWJsZS0+
c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKKyAgICAgICAg
YXRhYmxlLT5hbWFwID0gbmV3bWFwOworICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7Cisg
ICAgICAgIGF0YWJsZS0+c2l6ZSA9IHNpemU7CisgICAgfQorICAgIHJldHVybiAwOworfSAvLyBH
cm93QXRvbVRhYmxlCisKKy8qCisgKiBsUmV2ZXJzZSgpIC0gUmV2ZXJzZSB0aGUgYm90dG9tIDIw
IGJpdHMgb2YgYSAzMiBiaXQgaW50LgorICoKKyAqLworCitzdGF0aWMgaW50IGxSZXZlcnNlKGlu
dCBmdmFsKQoreworICAgIHVuc2lnbmVkIGludCBpbiA9IGZ2YWw7CisgICAgaW50IHJlc3VsdCA9
IDAsIGNudCA9IDA7CisKKyAgICB3aGlsZShpbikgeworICAgICAgICByZXN1bHQgPDw9IDE7Cisg
ICAgICAgIHJlc3VsdCB8PSBpbiYxOworICAgICAgICBpbiA+Pj0gMTsKKyAgICAgICAgY250Kys7
CisgICAgfQorCisgICAgLy8gRG9uJ3QgdXNlIGFsbCAzMSBiaXRzLiAgT25lIG1pbGxpb24gYXRv
bXMgaXMgcGxlbnR5IGFuZCBzb21ldGltZXMgdGhlCisgICAgLy8gdXBwZXIgYml0cyBhcmUgdXNl
ZCBmb3Igb3RoZXIgdGhpbmdzLgorCisgICAgaWYgKGNudCA8IDIwKQorICAgICAgICByZXN1bHQg
PDw9IDIwIC0gY250OworICAgIHJldHVybiByZXN1bHQ7Cit9IC8vIGxSZXZlcnNlCisKKy8qCisg
KiBBbGxvY2F0ZUF0b20oKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20uICBBc3NvY2lhdGVkIHdpdGgg
dGhlICJ1bmRlZmluZWQiIHZhbHVlIG9mIC0xLgorICoKKyAqLworCitzdGF0aWMgaW50IEFsbG9j
YXRlQXRvbShBdG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+
PSBhdGFibGUtPnNpemUpCisgICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBhdGFibGUtPm5l
eHRGcmVlKjIpOworICAgIGF0YWJsZS0+YW1hcFthdGFibGUtPm5leHRGcmVlXSA9IC0xOworICAg
IGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZy
ZWUpOworICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKKyAgICByZXR1cm4gYXRhYmxlLT5uZXh0RnJl
ZSAtIDE7Cit9IC8vIEFsbG9jYXRlQXRvbQorCisvKgorICogU2V0QXRvbVZhbHVlKCkgLSBBbGxv
Y2F0ZSBhIG5ldyBhdG9tIGFzc29jaWF0ZWQgd2l0aCAiaGFzaGluZGV4Ii4KKyAqCisgKi8KKwor
c3RhdGljIHZvaWQgU2V0QXRvbVZhbHVlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbW51bWJl
ciwgaW50IGhhc2hpbmRleCkKK3sKKyAgICBhdGFibGUtPmFtYXBbYXRvbW51bWJlcl0gPSBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4OworICAgIGF0YWJsZS0+aHRhYmxlLmVu
dHJ5W2hhc2hpbmRleF0udmFsdWUgPSBhdG9tbnVtYmVyOworfSAvLyBTZXRBdG9tVmFsdWUKKwor
LyoKKyAqIEZpbmRIYXNoTG9jKCkgLSBGaW5kIHRoZSBoYXNoIGxvY2F0aW9uIGZvciB0aGlzIHN0
cmluZy4gIFJldHVybiAtMSBpdCBoYXNoIHRhYmxlIGlzIGZ1bGwuCisgKgorICovCisKK3N0YXRp
YyBpbnQgRmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7Cisg
ICAgaW50IGhhc2hsb2MsIGhhc2hkZWx0YSwgY291bnQ7CisgICAgaW50IEZvdW5kRW1wdHlTbG90
ID0gMDsKKyAgICBpbnQgY29sbGlzaW9uW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsK
KworICAgIGhhc2hsb2MgPSBIYXNoU3RyaW5nKHMpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKKyAg
ICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKKyAgICAgICAgaWYgKE1h
dGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkKKyAgICAg
ICAgICAgIHJldHVybiBoYXNobG9jOworICAgICAgICBjb2xsaXNpb25bMF0gPSBoYXNobG9jOwor
ICAgICAgICBoYXNoZGVsdGEgPSBIYXNoU3RyaW5nMihzKTsKKyAgICAgICAgY291bnQgPSAwOwor
ICAgICAgICB3aGlsZSAoY291bnQgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKSB7CisgICAg
ICAgICAgICBoYXNobG9jID0gKChoYXNobG9jICsgaGFzaGRlbHRhKSAmIDB4N2ZmZmZmZmYpICUg
YXRhYmxlLT5odGFibGUuc2l6ZTsKKyAgICAgICAgICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRh
YmxlLCBoYXNobG9jKSkgeworICAgICAgICAgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFi
bGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxvYykpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGhhc2hsb2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBGb3VuZEVtcHR5U2xvdCA9IDE7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgY29s
bGlzaW9uW2NvdW50XSA9IGhhc2hsb2M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIUZvdW5k
RW1wdHlTbG90KSB7CisgICAgICAgICAgICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFibGUp
IHsKKyAgICAgICAgICAgICAgICBpbnQgaWk7CisgICAgICAgICAgICAgICAgY2hhciBzdHJbMjAw
XTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBIYXNoIGZhaWxlZCB3aXRoIG1v
cmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3JlYXNlIGhhc2ggdGFibGUgc2l6ZS4gKioq
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyk7Cisg
ICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisKKyAgICAgICAgICAgICAgICBz
cHJpbnRmKHN0ciwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFzaD0lMDR4LCBkZWx0YT0lMDR4
IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOworICAgICAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZyhzdHIpOworICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNIX1RB
QkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVudHJ5ICUwNHggd2l0aCBcIiVz
XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgKyAxLCBjb2xsaXNpb25baWldLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFibGUuZW50cnlbY29sbGlzaW9uW2lpXV0u
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuY291bnRzW2NvdW50XSsr
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBoYXNobG9jOworfSAvLyBGaW5kSGFzaExv
YworCisvKgorICogSW5jcmVhc2VIYXNoVGFibGVTaXplKCkKKyAqCisgKi8KKworc3RhdGljIGlu
dCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaW50IGlp
LCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXplOworICAgIEF0b21UYWJsZSBvbGR0YWJs
ZTsKKyAgICBjaGFyICpzOworCisgICAgLy8gU2F2ZSB0aGUgb2xkIGF0b20gdGFibGUgYW5kIGNy
ZWF0ZSBhIG5ldyBvbmU6CisKKyAgICBvbGR0YWJsZSA9ICphdGFibGU7CisgICAgc2l6ZSA9IG9s
ZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOworICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUs
IHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEFkZCBhbGwgdGhlIGV4aXN0aW5n
IHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJlc2VydmluZyB0aGVpciBhdG9tIHZhbHVl
czoKKworICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRGcmVlOyBpaSA8IG9sZHRhYmxlLm5leHRG
cmVlOyBpaSsrKSB7CisgICAgICAgIHN0cmxvYyA9IG9sZHRhYmxlLmFtYXBbaWldOworICAgICAg
ICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0cmxvY107CisgICAgICAgIG9sZGhhc2hs
b2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOworICAgICAgICBhc3NlcnQob2xkaGFzaGxv
YyA+PSAwKTsKKyAgICAgICAgdmFsdWUgPSBvbGR0YWJsZS5odGFibGUuZW50cnlbb2xkaGFzaGxv
Y10udmFsdWU7CisgICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHMsIHZhbHVlKTsKKyAgICB9
CisgICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOworICAgIHJldHVybiAxOworfSAvLyBJbmNy
ZWFzZUhhc2hUYWJsZVNpemUKKworLyoKKyAqIExvb2tVcEFkZFN0cmluZ0hhc2goKSAtIExvb2t1
cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQg
YW5kCisgKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJs
ZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGluZGV4LgorICovCisKK3N0YXRpYyBpbnQg
TG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sK
KyAgICBpbnQgaGFzaGxvYywgc3RybG9jOworCisgICAgd2hpbGUoMSkgeworICAgICAgICBoYXNo
bG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKKyAgICAgICAgaWYgKGhhc2hsb2MgPj0gMCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBJbmNyZWFzZUhhc2hUYWJsZVNpemUoYXRhYmxl
KTsKKyAgICB9CisKKyAgICBpZiAoRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewor
ICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7CisgICAgICAgIHN0cmxvYyA9IEFkZFN0
cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOworICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVto
YXNobG9jXS5pbmRleCA9IHN0cmxvYzsKKyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFz
aGxvY10udmFsdWUgPSAwOworICAgIH0KKyAgICByZXR1cm4gaGFzaGxvYzsKK30gLy8gTG9va1Vw
QWRkU3RyaW5nSGFzaAorCisvKgorICogTG9va1VwQWRkU3RyaW5nKCkgLSBMb29rdXAgYSBzdHJp
bmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0IGFuZAorICog
ICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUgdG8gdGhl
IG5leHQgYXRvbSBudW1iZXIuCisgKiAgICAgICAgUmV0dXJuIHRoZSBhdG9tIHZhbHVlIG9mIHN0
cmluZy4KKyAqLworCitpbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25z
dCBjaGFyICpzKQoreworICAgIGludCBoYXNoaW5kZXgsIGF0b207CisKKyAgICBoYXNoaW5kZXgg
PSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7CisgICAgYXRvbSA9IGF0YWJsZS0+aHRh
YmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7CisgICAgaWYgKGF0b20gPT0gMCkgeworICAgICAg
ICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7CisgICAgICAgIFNldEF0b21WYWx1ZShhdGFi
bGUsIGF0b20sIGhhc2hpbmRleCk7CisgICAgfQorICAgIHJldHVybiBhdG9tOworfSAvLyBMb29r
VXBBZGRTdHJpbmcKKworLyoKKyAqIEdldEF0b21TdHJpbmcoKQorICoKKyAqLworCitjb25zdCAg
Y2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisgICAg
aW50IHNvZmZzZXQ7CisKKyAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZy
ZWUpIHsKKyAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+YW1hcFthdG9tXTsKKyAgICAgICAgaWYg
KHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUtPnN0YWJsZS5uZXh0RnJlZSkgeworICAg
ICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW3NvZmZzZXRdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICI8aW50ZXJuYWwgZXJyb3I6IGJhZCBzb2Zm
c2V0PiI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXRvbSA9PSAwKSB7
CisgICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+IjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChhdG9tID09IEVPRikgeworICAgICAgICAgICAgICAgIHJldHVybiAiPEVP
Rj4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxpbnZh
bGlkIGF0b20+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30gLy8gR2V0QXRv
bVN0cmluZworCisvKgorICogR2V0UmV2ZXJzZWRBdG9tKCkKKyAqCisgKi8KKworaW50IEdldFJl
dmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisgICAgaWYgKGF0b20g
PiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7CisgICAgICAgIHJldHVybiBhdGFibGUt
PmFyZXZbYXRvbV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfSAv
LyBHZXRSZXZlcnNlZEF0b20KKworLyoKKyAqIEFkZEF0b20oKSAtIEFkZCBhIHN0cmluZyB0byB0
aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJl
LgorICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGluZGV4LgorICovCisKK2ludCBBZGRBdG9t
KEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBhdG9tOworCisg
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHMpOworICAgIHJldHVybiBhdG9tOwor
fSAvLyBBZGRBdG9tCisKKy8qCisgKiBBZGRBdG9tRml4ZWQoKSAtIEFkZCBhbiBhdG9tIHRvIHRo
ZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCisgKiAg
ICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBvZiAiYXRvbSIuCisgKi8KKworc3RhdGlj
IGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBh
dG9tKQoreworICAgIGludCBoYXNoaW5kZXgsIGxzaXplOworCisgICAgaGFzaGluZGV4ID0gTG9v
a1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOworICAgIGlmIChhdGFibGUtPm5leHRGcmVlID49
IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+c2l6ZSkgeworICAgICAgICBsc2l6ZSA9
IGF0YWJsZS0+c2l6ZSoyOworICAgICAgICBpZiAobHNpemUgPD0gYXRvbSkKKyAgICAgICAgICAg
IGxzaXplID0gYXRvbSArIDE7CisgICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBsc2l6ZSk7
CisgICAgfQorICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hh
c2hpbmRleF0uaW5kZXg7CisgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1
ZSA9IGF0b207CisgICAgLy9pZiAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKQorICAgIC8vICAg
IGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKKyAgICB3aGlsZSAoYXRvbSA+PSBhdGFibGUt
Pm5leHRGcmVlKSB7CisgICAgICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9IGxS
ZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOworICAgICAgICBhdGFibGUtPm5leHRGcmVlKys7Cisg
ICAgfQorICAgIHJldHVybiBhdG9tOworfSAvLyBBZGRBdG9tRml4ZWQKKworLyoKKyAqIEluaXRB
dG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20gdGFibGUuCisgKgorICovCisKK2ludCBJ
bml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKQoreworICAgIGludCBp
aTsKKworICAgIGh0c2l6ZSA9IGh0c2l6ZSA8PSAwID8gSU5JVF9IQVNIX1RBQkxFX1NJWkUgOiBo
dHNpemU7CisgICAgaWYgKCFJbml0U3RyaW5nVGFibGUoJmF0YWJsZS0+c3RhYmxlKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFJbml0SGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSwgaHRz
aXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdGFibGUtPm5leHRGcmVlID0gMDsKKyAg
ICBhdGFibGUtPmFtYXAgPSBOVUxMOworICAgIGF0YWJsZS0+c2l6ZSA9IDA7CisgICAgR3Jvd0F0
b21UYWJsZShhdGFibGUsIElOSVRfQVRPTV9UQUJMRV9TSVpFKTsKKyAgICBpZiAoIWF0YWJsZS0+
YW1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJbml0aWFsaXplIGxvd2VyIHBhcnQg
b2YgYXRvbSB0YWJsZSB0byAiPHVuZGVmaW5lZD4iIGF0b206CisKKyAgICBBZGRBdG9tRml4ZWQo
YXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAwKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBGSVJTVF9V
U0VSX1RPS0VOX1NZOyBpaSsrKQorICAgICAgICBhdGFibGUtPmFtYXBbaWldID0gYXRhYmxlLT5h
bWFwWzBdOworCisgICAgLy8gQWRkIHNpbmdsZSBjaGFyYWN0ZXIgdG9rZW5zIHRvIHRoZSBhdG9t
IHRhYmxlOgorCisgICAgeworCQljb25zdCBjaGFyICpzID0gIn4hJV4mKigpLSs9fCwuPD4vPzs6
W117fSMiOworICAgICAgICBjaGFyIHRbMl07CisKKyAgICAgICAgdFsxXSA9ICdcMCc7CisgICAg
ICAgIHdoaWxlICgqcykgeworICAgICAgICAgICAgdFswXSA9ICpzOworICAgICAgICAgICAgQWRk
QXRvbUZpeGVkKGF0YWJsZSwgdCwgc1swXSk7CisgICAgICAgICAgICBzKys7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBBZGQgbXVsdGlwbGUgY2hhcmFjdGVyIHNjYW5uZXIgdG9rZW5zIDoK
KworICAgIGZvciAoaWkgPSAwOyBpaSA8IHNpemVvZih0b2tlbnMpL3NpemVvZih0b2tlbnNbMF0p
OyBpaSsrKQorICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0b2tlbnNbaWldLnN0ciwgdG9r
ZW5zW2lpXS52YWwpOworCisgICAgLy8gQWRkIGVycm9yIHN5bWJvbCBpZiBydW5uaW5nIGluIGVy
cm9yIG1vZGU6CisKKyAgICBpZiAoY3BwLT5vcHRpb25zLkVycm9yTW9kZSkKKyAgICAgICAgQWRk
QXRvbUZpeGVkKGF0YWJsZSwgImVycm9yIiwgRVJST1JfU1kpOworCisgICAgQWRkQXRvbShhdGFi
bGUsICI8KioqIGVuZCBmaXhlZCBhdG9tcyAqKio+Iik7CisKKyAgICByZXR1cm4gMTsKK30gLy8g
SW5pdEF0b21UYWJsZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBEZWJ1ZyBQcmludGluZyBGdW5jdGlv
bnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qCisgKiBQcmludEF0b21UYWJsZSgpCisgKgorICov
CisKK3ZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaW50IGlp
OworICAgIGNoYXIgc3RyWzIwMF07CisKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5l
eHRGcmVlOyBpaSsrKSB7CisgICAgICAgIHNwcmludGYoc3RyLCAiJWQ6IFwiJXNcIiIsIGlpLCAm
YXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWldXSk7CisgICAgICAgIENQUERl
YnVnTG9nTXNnKHN0cik7CisgICAgfQorICAgIHNwcmludGYoc3RyLCAiSGFzaCB0YWJsZTogc2l6
ZT0lZCwgZW50cmllcz0lZCwgY29sbGlzaW9ucz0iLAorICAgICAgICAgICBhdGFibGUtPmh0YWJs
ZS5zaXplLCBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKTsKKyAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIp
OworICAgIGZvciAoaWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKysp
IHsKKyAgICAgICAgc3ByaW50ZihzdHIsICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWld
KTsKKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9CisKK30gLy8gUHJpbnRBdG9t
VGFibGUKKworCisvKgorICogR2V0U3RyaW5nT2ZBdG9tKCkKKyAqCisgKi8KKworY2hhciogR2V0
U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKK3sKKwkgY2hhciogY2hy
X3N0cjsKKwkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbYXRv
bV1dOworCSByZXR1cm4gY2hyX3N0cjsKK30gLy8gR2V0U3RyaW5nT2ZBdG9tCisKKy8qCisgKiBG
cmVlQXRvbVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFuZCBhc3NvY2lhdGVkIG1lbW9y
eQorICoKKyAqLworCit2b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCit7Cisg
ICAgRnJlZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7CisgICAgRnJlZUhhc2hUYWJsZSgm
YXRhYmxlLT5odGFibGUpOworICAgIGlmIChhdGFibGUtPmFtYXApCisgICAgICAgIGZyZWUoYXRh
YmxlLT5hbWFwKTsKKyAgICBpZiAoYXRhYmxlLT5hcmV2KQorICAgICAgICBmcmVlKGF0YWJsZS0+
YXJldik7CisgICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKKyAgICBhdGFibGUtPmFyZXYgPSBOVUxM
OworICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIGF0YWJsZS0+c2l6ZSA9IDA7Cit9IC8v
IEZyZWVBdG9tVGFibGUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBhdG9tLmMg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNv
ZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlv
biBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMg
YWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVz
ZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmli
dXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8g
dGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUK
K2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklE
SUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwg
bW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0
aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3Zp
ZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVz
dAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5k
IHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJp
YnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVt
YXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQor
TlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
IGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2Us
IG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3Jh
bnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkg
cGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3
b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBi
ZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitU
SEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMs
IFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVY
UFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJ
TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBP
UEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RV
Q1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lB
TCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBX
QVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElT
VFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hF
VEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8vCisvLyBhdG9tLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0FUT01fSCkK
KyNkZWZpbmUgX19BVE9NX0ggMQorCit0eXBlZGVmIHN0cnVjdCBBdG9tVGFibGVfUmVjIEF0b21U
YWJsZTsKKworZXh0ZXJuIEF0b21UYWJsZSAqYXRhYmxlOworCitpbnQgSW5pdEF0b21UYWJsZShB
dG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Cit2b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRh
YmxlICphdGFibGUpOworaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIg
KnMpOwordm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7CitpbnQgTG9va1Vw
QWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKTsKK2NvbnN0IGNoYXIg
KkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKK2ludCBHZXRSZXZl
cnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKK2NoYXIqIEdldFN0cmluZ09m
QXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOworI2VuZGlmIC8vICFkZWZpbmVkKF9f
QVRPTV9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUg
dG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJl
ZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRh
bmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJt
cywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhp
cyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50
IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0
ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5z
ZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0
d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkg
YW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1v
ZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhh
dCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRh
aW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZv
bGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25z
IG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBz
ZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEg
U29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBO
VklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3Ro
ZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5
IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQg
cmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9y
IGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNv
cnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklE
SUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9V
VAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP
UiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElP
TiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisK
K0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJ
UkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VU
IE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJ
T04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVO
REVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RS
SUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLy8KKy8vIGNvbXBpbGUuaAorLy8KKworI2lmICFkZWZpbmVkKF9fQ09NUElMRV9IKQor
I2RlZmluZSBfX0NPTVBJTEVfSCAxCisKK2ludCBJbml0Q1BQU3RydWN0KHZvaWQpOworCit0eXBl
ZGVmIHN0cnVjdCBPcHRpb25zX1JlY3sKKyAgICBjb25zdCBjaGFyICpwcm9maWxlU3RyaW5nOwor
ICAgIGludCBFcnJvck1vZGU7CisgICAgaW50IFF1aWV0OworCQorICAgIC8vIERlYnVnIFRoZSBD
b21waWxlciBvcHRpb25zOgorICAgIGludCBEdW1wQXRvbVRhYmxlOworfSBPcHRpb25zOworCitz
dHJ1Y3QgQ1BQU3RydWN0X1JlYyB7CisgICAgLy8gUHVibGljIG1lbWJlcnMKKyAgICBTb3VyY2VM
b2MgKnBMYXN0U291cmNlTG9jOyAgLy8gU2V0IGF0IHRoZSBzdGFydCBvZiBlYWNoIHN0YXRlbWVu
dCBieSB0aGUgdHJlZSB3YWxrZXJzCisgICAgT3B0aW9ucyBvcHRpb25zOyAgICAgICAgICAgIC8v
IENvbXBpbGUgb3B0aW9ucyBhbmQgcGFyYW1ldGVycworCisgICAgLy8gUHJpdmF0ZSBtZW1iZXJz
CisgICAgU291cmNlTG9jIGxhc3RTb3VyY2VMb2M7CisKKyAgICAvLyBTY2FubmVyIGRhdGE6CisK
KyAgICBTb3VyY2VMb2MgKnRva2VuTG9jOyAgICAgICAgLy8gU291cmNlIGxvY2F0aW9uIG9mIG1v
c3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKKyAgICBpbnQgbW9zdFJlY2VudFRv
a2VuOyAgICAgICAgLy8gTW9zdCByZWNlbnQgdG9rZW4gc2VlbiBieSB0aGUgc2Nhbm5lcgorICAg
IElucHV0U3JjICpjdXJyZW50SW5wdXQ7CisgICAgaW50IHByZXZpb3VzX3Rva2VuOworICAgIGlu
dCBwYXN0Rmlyc3RTdGF0ZW1lbnQ7ICAgICAvLyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0ICN2ZXJz
aW9uIGlzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgc2VlbiBpbiB0aGUgZmlsZSwgaWYgcHJlc2VudAor
ICAgIAorCXZvaWQgKnBDOyAgICAgICAgICAgICAgICAgICAvLyBzdG9yaW5nIHRoZSBwYXJzZUNv
bnRleHQgb2YgdGhlIGNvbXBpbGUgb2JqZWN0IGluIGNwcC4gIAorICAgICAKKyAgICAvLyBQcml2
YXRlIG1lbWJlcnM6CisgICAgU291cmNlTG9jIGx0b2tlbkxvYzsKKwlpbnQgaWZkZXB0aDsgICAg
ICAgICAgICAgICAgLy9jdXJyZW50ICNpZi0jZWxzZS0jZW5kaWYgbmVzdGluZyBpbiB0aGUgY3Bw
LmMgZmlsZSAocHJlLXByb2Nlc3NvcikgICAgCisgICAgaW50IGVsc2VkZXB0aFs2NF07ICAgICAg
ICAgIC8vS2VlcCBhIHRyYWNrIG9mICNpZiBkZXB0aC4uTWF4IGFsbG93ZWQgaXMgNjQuICAgCisg
ICAgaW50IGVsc2V0cmFja2VyOyAgICAgICAgICAgIC8vI2lmLSNlbHNlIGFuZCAjZW5kaWYgY29u
c3RydWN0cy4uLkNvdW50ZXIuCisgICAgY29uc3QgY2hhciAqRXJyTXNnOworICAgIGludCBDb21w
aWxlRXJyb3I7ICAgICAgICAgICAvL0luZGljYXRlIGNvbXBpbGUgZXJyb3Igd2hlbiAjZXJyb3Is
ICNlbHNlLCNlbGlmIG1pc21hdGNoLgorCisgICAgLy8KKyAgICAvLyBHbG9iYWxzIHVzZWQgdG8g
Y29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3RyaW5ncygpIGFuZCB5eV9pbnB1dCgpYW5kIAor
ICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4oZ2VuX2dsc2xhbmcuY3BwIGFuZCBzY2FubmVy
LmMpCisgICAgLy8KKyAgICBpbnQgICAgUGFXaGljaFN0cjsgICAgICAgICAgICAvLyB3aGljaCBz
dHJpbmcgd2UncmUgcGFyc2luZworICAgIGludCogICBQYVN0ckxlbjsgICAgICAgICAgICAgIC8v
IGFycmF5IG9mIGxlbmd0aHMgb2YgdGhlIFBhQXJndiBzdHJpbmdzCisgICAgaW50ICAgIFBhQXJn
YzsgICAgICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5ncyBpbiB0aGUgYXJyYXkKKyAgICBj
aGFyKiogUGFBcmd2OyAgICAgICAgICAgICAgICAvLyBvdXIgYXJyYXkgb2Ygc3RyaW5ncyB0byBw
YXJzZSAgICAKKyAgICB1bnNpZ25lZCBpbnQgdG9rZW5zQmVmb3JlRU9GIDogMTsKK307CisKKyNl
bmRpZiAvLyAhZGVmaW5lZChfX0NPTVBJTEVfSCkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyOSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
KworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQ
Uk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvLworLy8gY3BwLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgiCisKK3N0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHAp
OworCisvKiBEb24ndCB1c2UgbWVtb3J5LmMncyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVw
IHByb3Blcmx5IGhlcmUgKi8KKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBmcmVlCisKK3N0YXRpYyBp
bnQgYmluZEF0b20gPSAwOworc3RhdGljIGludCBjb25zdEF0b20gPSAwOworc3RhdGljIGludCBk
ZWZhdWx0QXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmluZUF0b20gPSAwOworc3RhdGljIGludCBk
ZWZpbmVkQXRvbSA9IDA7CitzdGF0aWMgaW50IGVsc2VBdG9tID0gMDsKK3N0YXRpYyBpbnQgZWxp
ZkF0b20gPSAwOworc3RhdGljIGludCBlbmRpZkF0b20gPSAwOworc3RhdGljIGludCBpZkF0b20g
PSAwOworc3RhdGljIGludCBpZmRlZkF0b20gPSAwOworc3RhdGljIGludCBpZm5kZWZBdG9tID0g
MDsKK3N0YXRpYyBpbnQgaW5jbHVkZUF0b20gPSAwOworc3RhdGljIGludCBsaW5lQXRvbSA9IDA7
CitzdGF0aWMgaW50IHByYWdtYUF0b20gPSAwOworc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7
CitzdGF0aWMgaW50IHVuZGVmQXRvbSA9IDA7CitzdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Citz
dGF0aWMgaW50IF9fTElORV9fQXRvbSA9IDA7CitzdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7
CitzdGF0aWMgaW50IF9fVkVSU0lPTl9fQXRvbSA9IDA7CitzdGF0aWMgaW50IHZlcnNpb25BdG9t
ID0gMDsKK3N0YXRpYyBpbnQgZXh0ZW5zaW9uQXRvbSA9IDA7CisKK3N0YXRpYyBTY29wZSAqbWFj
cm9zID0gMDsKKyNkZWZpbmUgTUFYX01BQ1JPX0FSR1MgIDY0CisjZGVmaW5lIE1BWF9JRl9ORVNU
SU5HICA2NAorCitzdGF0aWMgU291cmNlTG9jIGlmbG9jOyAvKiBvdXRlcm1vc3QgI2lmICovCisK
K2ludCBJbml0Q1BQKHZvaWQpCit7CisgICAgY2hhciAgICAgICAgYnVmZmVyWzY0XSwgKnQ7Cisg
ICAgY29uc3QgY2hhciAgKmY7CisKKyAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkg
dGhlIENQUCBsaW5lIHNjYW5uZXI6CisgICAgYmluZEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCAiYmluZCIpOworICAgIGNvbnN0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJj
b25zdCIpOworICAgIGRlZmF1bHRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmF1
bHQiKTsKKyAgICBkZWZpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZSIp
OworICAgIGRlZmluZWRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZWQiKTsK
KyAgICBlbGlmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbGlmIik7CisgICAgZWxz
ZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxzZSIpOworICAgIGVuZGlmQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbmRpZiIpOworICAgIGlmQXRvbSA9IExvb2tVcEFk
ZFN0cmluZyhhdGFibGUsICJpZiIpOworICAgIGlmZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhh
dGFibGUsICJpZmRlZiIpOworICAgIGlmbmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCAiaWZuZGVmIik7CisgICAgaW5jbHVkZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
aW5jbHVkZSIpOworICAgIGxpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImxpbmUi
KTsKKyAgICBwcmFnbWFBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInByYWdtYSIpOwor
ICAgIHRleHVuaXRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInRleHVuaXQiKTsKKyAg
ICB1bmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidW5kZWYiKTsKKwllcnJvckF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZXJyb3IiKTsKKyAgICBfX0xJTkVfX0F0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19MSU5FX18iKTsKKyAgICBfX0ZJTEVfX0F0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19GSUxFX18iKTsKKwlfX1ZFUlNJT05fX0F0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19WRVJTSU9OX18iKTsKKyAgICB2ZXJzaW9uQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ2ZXJzaW9uIik7CisgICAgZXh0ZW5zaW9uQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJleHRlbnNpb24iKTsKKyAgICBtYWNyb3MgPSBO
ZXdTY29wZUluUG9vbChtZW1fQ3JlYXRlUG9vbCgwLCAwKSk7CisgICAgc3RyY3B5KGJ1ZmZlciwg
IlBST0ZJTEVfIik7CisgICAgdCA9IGJ1ZmZlciArIHN0cmxlbihidWZmZXIpOworICAgIGYgPSBj
cHAtPm9wdGlvbnMucHJvZmlsZVN0cmluZzsKKyAgICB3aGlsZSAoKGlzYWxudW0oKmYpIHx8ICpm
ID09ICdfJykgJiYgdCA8IGJ1ZmZlciArIHNpemVvZihidWZmZXIpIC0gMSkKKyAgICAgICAgKnQr
KyA9IHRvdXBwZXIoKmYrKyk7CisgICAgKnQgPSAwOworCisgICAgUHJlZGVmaW5lSW50TWFjcm8o
IkdMX0VTIiwgMSk7CisgICAgUHJlZGVmaW5lSW50TWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lP
Tl9ISUdIIiwgMSk7CisKKwlyZXR1cm4gMTsKK30gLy8gSW5pdENQUAorCitpbnQgRnJlZUNQUCh2
b2lkKQoreworICAgIGlmIChtYWNyb3MpCisgICAgeworICAgICAgICBtZW1fRnJlZVBvb2wobWFj
cm9zLT5wb29sKTsKKyAgICAgICAgbWFjcm9zID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsK
K30KKworaW50IEZpbmFsQ1BQKHZvaWQpCit7CisJaWYgKGNwcC0+aWZkZXB0aCkKKwkJQ1BQRXJy
b3JUb0luZm9Mb2coIiNpZiBtaXNtYXRjaCIpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMg
aW50IENQUGRlZmluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4sIG5h
bWUsIGFyZ3NbTUFYX01BQ1JPX0FSR1NdLCBhcmdjOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7
CisgICAgTWFjcm9TeW1ib2wgbWFjOworICAgIFN5bWJvbCAqc3ltYjsKKyAgICBTb3VyY2VMb2Mg
ZHVtbXlMb2M7CisgICAgbWVtc2V0KCZtYWMsIDAsIHNpemVvZihtYWMpKTsKKyAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7CisgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCIjZGVmaW5lIik7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgbmFtZSA9
IHl5bHZhbHBwLT5zY19pZGVudDsKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuID09ICcoJyAmJiAh
eXlsdmFscHAtPnNjX2ludCkgeworICAgICAgICAvLyBnYXRoZXIgYXJndW1lbnRzCisgICAgICAg
IGFyZ2MgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBp
ZiAoYXJnYyA9PSAwICYmIHRva2VuID09ICcpJykgYnJlYWs7CisgICAgICAgICAgICBpZiAodG9r
ZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKwkJCQlDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIp
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChhcmdjIDwgTUFYX01BQ1JPX0FSR1MpCisgICAgICAgICAgICAgICAgYXJnc1thcmdj
KytdID0geXlsdmFscHAtPnNjX2lkZW50OworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9IHdo
aWxlICh0b2tlbiA9PSAnLCcpOworICAgICAgICBpZiAodG9rZW4gIT0gJyknKSB7CisgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOworICAgICAgICAgICAgcmV0dXJuIHRv
a2VuOworICAgICAgICB9CisgICAgICAgIG1hYy5hcmdjID0gYXJnYzsKKyAgICAgICAgbWFjLmFy
Z3MgPSBtZW1fQWxsb2MobWFjcm9zLT5wb29sLCBhcmdjICogc2l6ZW9mKGludCkpOworICAgICAg
ICBtZW1jcHkobWFjLmFyZ3MsIGFyZ3MsIGFyZ2MgKiBzaXplb2YoaW50KSk7CisgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKwl9CisgICAgbWFjLmJvZHkgPSBOZXdUb2tlblN0cmVhbShHZXRBdG9tU3RyaW5nKGF0YWJs
ZSwgbmFtZSksIG1hY3Jvcy0+cG9vbCk7CisgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKKyAg
ICAgICAgaWYgKHRva2VuID09ICdcXCcpIHsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJUaGUgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhl
IE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIik7CisgICAgICAgICAgICByZXR1cm4gdG9rZW47
CisgICAgICAgIH0KKyAgICAgICAgUmVjb3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxw
cCk7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9OworCisgICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNy
b3MsIG5hbWUpOworICAgIGlmIChzeW1iKSB7CisgICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5t
YWMudW5kZWYpIHsKKyAgICAgICAgICAgIC8vIGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGV5IGFyZSBpZGVudGljYWwKKyAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxz
Lm1hYy5hcmdjICE9IG1hYy5hcmdjKSBnb3RvIGVycm9yOworICAgICAgICAgICAgZm9yIChhcmdj
PTA7IGFyZ2MgPCBtYWMuYXJnYzsgYXJnYysrKQorICAgICAgICAgICAgICAgIGlmIChzeW1iLT5k
ZXRhaWxzLm1hYy5hcmdzW2FyZ2NdICE9IG1hYy5hcmdzW2FyZ2NdKQorICAgICAgICAgICAgICAg
ICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0
YWlscy5tYWMuYm9keSk7CisgICAgICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9r
ZW47CisgICAgICAgICAgICAgICAgb2xkX3Rva2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMu
bWFjLmJvZHksIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBw
LT5zY19pbnQ7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZh
bHBwLT5zY19pbnQgIT0gb2xkX2x2YWwpIHsgCisgICAgICAgICAgICAgICAgZXJyb3I6CisgICAg
ICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJNYWNybyBSZWRlZmluZWQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxuYW1lKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgRGVjTGluZU51bWJlcigpOworICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9
CisgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiA+IDApOworICAgICAgICB9CisgICAgICAgIC8v
RnJlZU1hY3JvKCZzeW1iLT5kZXRhaWxzLm1hYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHVt
bXlMb2MuZmlsZSA9IDA7CisgICAgICAgIGR1bW15TG9jLmxpbmUgPSAwOworICAgICAgICBzeW1i
ID0gQWRkU3ltYm9sKCZkdW1teUxvYywgbWFjcm9zLCBuYW1lLCBNQUNST19TKTsKKyAgICB9Cisg
ICAgc3ltYi0+ZGV0YWlscy5tYWMgPSBtYWM7CisgICAgcmV0dXJuICdcbic7Cit9IC8vIENQUGRl
ZmluZQorCitzdGF0aWMgaW50IENQUHVuZGVmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAg
IGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgU3ltYm9sICpzeW1iOworCWlmKHRva2VuID09ICdcbicpeworCQlDUFBF
cnJvclRvSW5mb0xvZygiI3VuZGVmIik7CisJICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAg
aWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQorICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAg
c3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCk7CisgICAgaWYg
KHN5bWIpIHsKKyAgICAgICAgc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYgPSAxOworICAgIH0KKyAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICBlcnJvcjoKKyAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOworICAgIH0KKyAgICByZXR1cm4gdG9rZW47Cit9IC8v
IENQUHVuZGVmCisKKy8qIENQUGVsc2UgLS0gc2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNw
b3QuICBUaGlzIGlzIGFjdHVhbGx5IHVzZWQKKyoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRl
ciBzZWVpbmcgYW4gI2Vsc2UsIEFORCB0byBza2lwIHRvIGEgI2Vsc2UsCisqKiAjZWxpZiwgb3Ig
I2VuZGlmIGFmdGVyIGEgI2lmLyNpZmRlZi8jaWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCisq
LworCitzdGF0aWMgaW50IENQUGVsc2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFs
cHApCit7CisgICAgaW50IGF0b20sZGVwdGg9MDsKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQorCXdoaWxlICh0
b2tlbiA+IDApIHsKKyAgICAgICAgaWYgKHRva2VuICE9ICcjJykgeworCQkgICAgd2hpbGUgKHRv
a2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCQlpZiAoKHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkg
IT0gQ1BQX0lERU5USUZJRVIpCisJCQljb250aW51ZTsKKyAgICAgICAgYXRvbSA9IHl5bHZhbHBw
LT5zY19pZGVudDsKKyAgICAgICAgaWYgKGF0b20gPT0gaWZBdG9tIHx8IGF0b20gPT0gaWZkZWZB
dG9tIHx8IGF0b20gPT0gaWZuZGVmQXRvbSl7CisgICAgICAgICAgICBkZXB0aCsrOyBjcHAtPmlm
ZGVwdGgrKzsgY3BwLT5lbHNldHJhY2tlcisrOworICAgICAgICAgICAgY3BwLT5lbHNlZGVwdGhb
Y3BwLT5lbHNldHJhY2tlcl0gPSAwOworCQl9CisJCWVsc2UgaWYgKGF0b20gPT0gZW5kaWZBdG9t
KSB7CisgICAgICAgICAgICBpZigtLWRlcHRoPDApeworCQkJICAgIC0tY3BwLT5lbHNldHJhY2tl
cjsKKyAgICAgICAgICAgICAgICBpZiAoY3BwLT5pZmRlcHRoKSAKKyAgICAgICAgICAgICAgICAg
ICAgLS1jcHAtPmlmZGVwdGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKyAgICAg
ICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoKChpbnQpKG1hdGNoZWxzZSkgIT0gMCkmJiBkZXB0aD09MCkgeworCQkJaWYgKGF0b20gPT0g
ZWxzZUF0b20gKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0
b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2co
InVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tl
biAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAg
IH0gCisJCQkJYnJlYWs7CisJCQl9IAorCQkJZWxzZSBpZiAoYXRvbSA9PSBlbGlmQXRvbSkgewor
ICAgICAgICAgICAgICAgIC8qIHdlIGRlY3JlbWVudCBjcHAtPmlmZGVwdGggaGVyZSwgYmVjYXVz
ZSBDUFBpZiB3aWxsIGluY3JlbWVudAorICAgICAgICAgICAgICAgICAqIGl0IGFuZCB3ZSByZWFs
bHkgd2FudCB0byBsZWF2ZSBpdCBhbG9uZSAqLworCQkJCWlmIChjcHAtPmlmZGVwdGgpeworCQkJ
CQktLWNwcC0+aWZkZXB0aDsKKwkJCQkgICAgLS1jcHAtPmVsc2V0cmFja2VyOworCQkJCX0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQaWYoeXlsdmFscHApOworICAgICAgICAgICAgfQorCQl9
CisgICAgICAgIGVsc2UgaWYoKGF0b209PWVsc2VBdG9tKSAmJiAoIUNoa0NvcnJlY3RFbHNlTmVz
dGluZygpKSl7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAj
ZWxzZSIpOworICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAgICAgfQorCX07
CisgICAgcmV0dXJuIHRva2VuOworfQorCitlbnVtIGV2YWxfcHJlYyB7CisgICAgTUlOX1BSRUMs
CisgICAgQ09ORCwgTE9HT1IsIExPR0FORCwgT1IsIFhPUiwgQU5ELCBFUVVBTCwgUkVMQVRJT04s
IFNISUZULCBBREQsIE1VTCwgVU5BUlksCisgICAgTUFYX1BSRUMKK307CisKK3N0YXRpYyBpbnQg
b3BfbG9nb3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIHx8IGI7IH0KK3N0YXRpYyBpbnQgb3Bf
bG9nYW5kKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAmJiBiOyB9CitzdGF0aWMgaW50IG9wX29y
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8IGI7IH0KK3N0YXRpYyBpbnQgb3BfeG9yKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSBeIGI7IH0KK3N0YXRpYyBpbnQgb3BfYW5kKGludCBhLCBpbnQg
YikgeyByZXR1cm4gYSAmIGI7IH0KK3N0YXRpYyBpbnQgb3BfZXEoaW50IGEsIGludCBiKSB7IHJl
dHVybiBhID09IGI7IH0KK3N0YXRpYyBpbnQgb3BfbmUoaW50IGEsIGludCBiKSB7IHJldHVybiBh
ICE9IGI7IH0KK3N0YXRpYyBpbnQgb3BfZ2UoaW50IGEsIGludCBiKSB7IHJldHVybiBhID49IGI7
IH0KK3N0YXRpYyBpbnQgb3BfbGUoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw9IGI7IH0KK3N0
YXRpYyBpbnQgb3BfZ3QoaW50IGEsIGludCBiKSB7IHJldHVybiBhID4gYjsgfQorc3RhdGljIGlu
dCBvcF9sdChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPCBiOyB9CitzdGF0aWMgaW50IG9wX3No
bChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPDwgYjsgfQorc3RhdGljIGludCBvcF9zaHIoaW50
IGEsIGludCBiKSB7IHJldHVybiBhID4+IGI7IH0KK3N0YXRpYyBpbnQgb3BfYWRkKGludCBhLCBp
bnQgYikgeyByZXR1cm4gYSArIGI7IH0KK3N0YXRpYyBpbnQgb3Bfc3ViKGludCBhLCBpbnQgYikg
eyByZXR1cm4gYSAtIGI7IH0KK3N0YXRpYyBpbnQgb3BfbXVsKGludCBhLCBpbnQgYikgeyByZXR1
cm4gYSAqIGI7IH0KK3N0YXRpYyBpbnQgb3BfZGl2KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAv
IGI7IH0KK3N0YXRpYyBpbnQgb3BfbW9kKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAlIGI7IH0K
K3N0YXRpYyBpbnQgb3BfcG9zKGludCBhKSB7IHJldHVybiBhOyB9CitzdGF0aWMgaW50IG9wX25l
ZyhpbnQgYSkgeyByZXR1cm4gLWE7IH0KK3N0YXRpYyBpbnQgb3BfY21wbChpbnQgYSkgeyByZXR1
cm4gfmE7IH0KK3N0YXRpYyBpbnQgb3Bfbm90KGludCBhKSB7IHJldHVybiAhYTsgfQorCitzdHJ1
Y3QgeworICAgIGludCB0b2tlbiwgcHJlYywgKCpvcCkoaW50LCBpbnQpOworfSBiaW5vcFtdID0g
eworICAgIHsgQ1BQX09SX09QLCBMT0dPUiwgb3BfbG9nb3IgfSwKKyAgICB7IENQUF9BTkRfT1As
IExPR0FORCwgb3BfbG9nYW5kIH0sCisgICAgeyAnfCcsIE9SLCBvcF9vciB9LAorICAgIHsgJ14n
LCBYT1IsIG9wX3hvciB9LAorICAgIHsgJyYnLCBBTkQsIG9wX2FuZCB9LAorICAgIHsgQ1BQX0VR
X09QLCBFUVVBTCwgb3BfZXEgfSwKKyAgICB7IENQUF9ORV9PUCwgRVFVQUwsIG9wX25lIH0sCisg
ICAgeyAnPicsIFJFTEFUSU9OLCBvcF9ndCB9LAorICAgIHsgQ1BQX0dFX09QLCBSRUxBVElPTiwg
b3BfZ2UgfSwKKyAgICB7ICc8JywgUkVMQVRJT04sIG9wX2x0IH0sCisgICAgeyBDUFBfTEVfT1As
IFJFTEFUSU9OLCBvcF9sZSB9LAorICAgIHsgQ1BQX0xFRlRfT1AsIFNISUZULCBvcF9zaGwgfSwK
KyAgICB7IENQUF9SSUdIVF9PUCwgU0hJRlQsIG9wX3NociB9LAorICAgIHsgJysnLCBBREQsIG9w
X2FkZCB9LAorICAgIHsgJy0nLCBBREQsIG9wX3N1YiB9LAorICAgIHsgJyonLCBNVUwsIG9wX211
bCB9LAorICAgIHsgJy8nLCBNVUwsIG9wX2RpdiB9LAorICAgIHsgJyUnLCBNVUwsIG9wX21vZCB9
LAorfTsKKworc3RydWN0IHsKKyAgICBpbnQgdG9rZW4sICgqb3ApKGludCk7Cit9IHVub3BbXSA9
IHsKKyAgICB7ICcrJywgb3BfcG9zIH0sCisgICAgeyAnLScsIG9wX25lZyB9LAorICAgIHsgJ34n
LCBvcF9jbXBsIH0sCisgICAgeyAnIScsIG9wX25vdCB9LAorfTsKKworI2RlZmluZSBBTEVOKEEp
IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKQorCitzdGF0aWMgaW50IGV2YWwoaW50IHRva2VuLCBp
bnQgcHJlYywgaW50ICpyZXMsIGludCAqZXJyLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAg
ICBpbnQgICAgICAgICBpLCB2YWw7CisgICAgU3ltYm9sICAgICAgKnM7CisgICAgaWYgKHRva2Vu
ID09IENQUF9JREVOVElGSUVSKSB7CisgICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0g
ZGVmaW5lZEF0b20pIHsKKyAgICAgICAgICAgIGludCBuZWVkY2xvc2UgPSAwOworICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgeworICAgICAgICAgICAgICAg
IG5lZWRjbG9zZSA9IDE7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQorICAgICAgICAgICAgICAgIGdv
dG8gZXJyb3I7CisgICAgICAgICAgICAqcmVzID0gKHMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5
eWx2YWxwcC0+c2NfaWRlbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgPyAhcy0+ZGV0YWls
cy5tYWMudW5kZWYgOiAwOworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKG5lZWRj
bG9zZSkgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnKScpCisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgfQor
CQl9IGVsc2UgaWYgKE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKSB7
CisJCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICByZXR1cm4gZXZhbCh0b2tlbiwgcHJlYywgcmVzLCBlcnIs
IHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7Cisg
ICAgICAgIH0KKwl9IGVsc2UgaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgeworICAgICAg
ICAqcmVzID0geXlsdmFscHAtPnNjX2ludDsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH0gZWxzZSBpZiAo
dG9rZW4gPT0gJygnKSB7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4gPSBldmFsKHRva2Vu
LCBNSU5fUFJFQywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKCEqZXJyKSB7Cisg
ICAgICAgICAgICBpZiAodG9rZW4gIT0gJyknKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7
CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig
KGkgPSBBTEVOKHVub3ApIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh1bm9w
W2ldLnRva2VuID09IHRva2VuKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpID49IDApIHsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHRva2Vu
ID0gZXZhbCh0b2tlbiwgVU5BUlksIHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAq
cmVzID0gdW5vcFtpXS5vcCgqcmVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdv
dG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKCEqZXJyKSB7CisgICAgICAg
IGlmICh0b2tlbiA9PSAnKScgfHwgdG9rZW4gPT0gJ1xuJykgYnJlYWs7CisgICAgICAgIGZvciAo
aSA9IEFMRU4oYmlub3ApIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChiaW5v
cFtpXS50b2tlbiA9PSB0b2tlbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaSA8IDAgfHwgYmlub3BbaV0ucHJlYyA8PSBwcmVjKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHZhbCA9ICpyZXM7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4g
PSBldmFsKHRva2VuLCBiaW5vcFtpXS5wcmVjLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAg
ICAqcmVzID0gYmlub3BbaV0ub3AodmFsLCAqcmVzKTsKKyAgICB9CisgICAgcmV0dXJuIHRva2Vu
OworZXJyb3I6CisgICAgQ1BQRXJyb3JUb0luZm9Mb2coImluY29ycmVjdCBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlIik7CisgICAgKmVyciA9IDE7CisgICAgKnJlcyA9IDA7CisgICAgcmV0dXJuIHRv
a2VuOworfSAvLyBldmFsCisKK3N0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHAp
IHsKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgIGludCByZXMgPSAwLCBlcnIgPSAwOworCWNwcC0+ZWxzZXRy
YWNrZXIrKzsKKyAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7CisgICAg
aWYgKCFjcHAtPmlmZGVwdGgrKykKKyAgICAgICAgaWZsb2MgPSAqY3BwLT50b2tlbkxvYzsKKwlp
ZihjcHAtPmlmZGVwdGggPk1BWF9JRl9ORVNUSU5HKXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIm1heCAjaWYgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOworCQlyZXR1cm4gMDsKKwl9CisJ
dG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgJnJlcywgJmVyciwgeXlsdmFscHApOworICAg
IGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhw
ZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVj
dGVkIGEgbmV3bGluZSIpOworICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICB9IAorICAgIGlmICghcmVzICYmICFlcnIpIHsKKyAgICAgICAgdG9rZW4g
PSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9IC8v
IENQUGlmCisKK3N0YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaW50IG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRl
bnQ7CisJaWYoKytjcHAtPmlmZGVwdGggPk1BWF9JRl9ORVNUSU5HKXsKKwkgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIm1heCAjaWYgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOworCQlyZXR1cm4gMDsK
Kwl9CisJY3BwLT5lbHNldHJhY2tlcisrOworICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRy
YWNrZXJdID0gMDsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAg
ICAgIGRlZmluZWQgPyBDUFBFcnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRvSW5mb0xv
ZygiaWZuZGVmIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3ltYm9sICpzID0gTG9va1VwU3lt
Ym9sKG1hY3JvcywgbmFtZSk7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKHRva2VuICE9ICdc
bicpIHsKKyAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5z
IGZvbGxvd2luZyAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3
bGluZSIpOworICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICB9CisgICAgICAgIGlmICgoKHMgJiYgIXMtPmRldGFpbHMubWFjLnVu
ZGVmKSA/IDEgOiAwKSAhPSBkZWZpbmVkKQorICAgICAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEs
IHl5bHZhbHBwKTsKKyAgICB9CisgICAgcmV0dXJuIHRva2VuOworfSAvLyBDUFBpZmRlZgorCitz
dGF0aWMgaW50IENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApIAoreworICAgIGludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisJaWYodG9rZW49PSdcbicpeworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjbGluZSIpOworICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVybiB0
b2tlbjsKKwl9CisJZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7CisJCXl5bHZh
bHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQlTZXRMaW5lTnVtYmVy
KHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIAorCQlpZiAodG9rZW4g
PT0gQ1BQX0lOVENPTlNUQU5UKSB7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2ko
eXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkJCVNldFN0cmluZ051bWJlcih5eWx2YWxwcC0+c2Nf
aW50KTsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJCWlmKHRva2VuIT0nXG4nKQorCQkJCUNQUEVycm9y
VG9JbmZvTG9nKCIjbGluZSIpOworICAgICAgICB9CisJCWVsc2UgaWYgKHRva2VuID09ICdcbicp
eworCQkJcmV0dXJuIHRva2VuOworCQl9CisJCWVsc2V7CisgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiI2xpbmUiKTsKKwkJfQorCX0KKwllbHNleworICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjbGluZSIpOworCX0KKyAgICByZXR1cm4gdG9rZW47Cit9CisKK3N0YXRpYyBpbnQg
Q1BQZXJyb3IoeXlzdHlwZXBwICogeXlsdmFscHApIHsKKworCWludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZTsKKwkKKyAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworCQlpZiAodG9r
ZW4gPT0gQ1BQX0ZMT0FUQ09OU1RBTlQgfHwgdG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsKKyAg
ICAgICAgICAgIFN0b3JlU3RyKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisJCX1lbHNlIGlmKHRv
a2VuID09IENQUF9JREVOVElGSUVSIHx8IHRva2VuID09IENQUF9TVFJDT05TVEFOVCl7CisJCQlT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOworCQl9
ZWxzZSB7CisJCSAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKSk7CisJ
CX0KKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworCX0KKwlEZWNMaW5lTnVtYmVyKCk7CisJLy9zdG9yZSB0aGlzIG1zZyBpbnRv
IHRoZSBzaGFkZXIncyBpbmZvcm1hdGlvbiBsb2cuLnNldCB0aGUgQ29tcGlsZSBFcnJvciBmbGFn
ISEhIQorCW1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICBDUFBTaEluZm9Mb2dNc2cobWVz
c2FnZSk7CisgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAg
ICBJbmNMaW5lTnVtYmVyKCk7CisgICAgcmV0dXJuICdcbic7Cit9Ly9DUFBlcnJvcgorCitzdGF0
aWMgaW50IENQUHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKwljaGFyIFNyY1N0ck5h
bWVbMl07CisJY2hhcioqIGFsbFRva2VuczsKKwlpbnQgdG9rZW5Db3VudCA9IDA7CisJaW50IG1h
eFRva2VuQ291bnQgPSAxMDsKKwljb25zdCBjaGFyKiBTcmNTdHI7CisJaW50IGk7CisKKwlpbnQg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworCQorCWlmICh0b2tlbj09J1xuJykgeworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCIjcHJhZ21hIik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsK
KwkgICAgcmV0dXJuIHRva2VuOworCX0KKwkKKwlhbGxUb2tlbnMgPSAoY2hhcioqKW1hbGxvYyhz
aXplb2YoY2hhciopICogbWF4VG9rZW5Db3VudCk7CQorCisJd2hpbGUgKHRva2VuICE9ICdcbicp
IHsKKwkJaWYgKHRva2VuQ291bnQgPj0gbWF4VG9rZW5Db3VudCkgeworCQkJbWF4VG9rZW5Db3Vu
dCAqPSAyOworCQkJYWxsVG9rZW5zID0gKGNoYXIqKilyZWFsbG9jKChjaGFyKiopYWxsVG9rZW5z
LCBzaXplb2YoY2hhciopICogbWF4VG9rZW5Db3VudCk7CisJCX0KKwkJc3dpdGNoICh0b2tlbikg
eworCQljYXNlIENQUF9JREVOVElGSUVSOgorCQkJU3JjU3RyID0gR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCk7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hh
ciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2Vu
Q291bnQrK10sIFNyY1N0cik7CisJCQlicmVhazsKKwkJY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisJ
CQlTcmNTdHIgPSB5eWx2YWxwcC0+c3ltYm9sX25hbWU7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3Vu
dF0gPSAoY2hhciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7CisJCQlzdHJjcHkoYWxsVG9r
ZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0cik7CisJCQlicmVhazsKKwkJY2FzZSBDUFBfRkxPQVRD
T05TVEFOVDoKKwkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKKwkJCWFsbFRva2Vu
c1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKKwkJCXN0
cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKKwkJCWJyZWFrOworCQljYXNl
IC0xOgorICAgICAgICAgICAgLy8gRU9GCisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNw
cmFnbWEgZGlyZWN0aXZlIG11c3QgZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCisJCQlyZXR1cm4g
dG9rZW47CisJCWRlZmF1bHQ6CisJCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47CisJCQlTcmNTdHJO
YW1lWzFdID0gJ1wwJzsKKwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Mo
Mik7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0ck5hbWUpOworCQl9
CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKwl9CisKKwljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgdG9rZW4sIHl5bHZhbHBwKTsKKwlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxU
b2tlbnMsIHRva2VuQ291bnQpOworCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3Vu
dDsgKytpKSB7CisJCWZyZWUgKGFsbFRva2Vuc1tpXSk7CisJfQorCWZyZWUgKGFsbFRva2Vucyk7
CQorCisJcmV0dXJuIHRva2VuOyAgICAKK30gLy8gQ1BQcHJhZ21hCisKKyNkZWZpbmUgRVNTTF9W
RVJTSU9OX05VTUJFUiAxMDAKKyNkZWZpbmUgRVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgorCitz
dGF0aWMgaW50IENQUHZlcnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCit7CisKKyAgICBpbnQg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworCisgICAgaWYgKGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID09IDEpCisgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiI3ZlcnNpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRl
bWVudCBpbiB0aGUgcHJvZ3JhbSIpOworCisgICAgaWYodG9rZW49PSdcbicpeworCQlEZWNMaW5l
TnVtYmVyKCk7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOworICAgICAg
ICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVybiB0b2tlbjsKKwl9CisgICAgaWYgKHRva2VuICE9
IENQUF9JTlRDT05TVEFOVCkKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7
CisJCisgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisJ
Ly9TZXRWZXJzaW9uTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOworICAgIAorICAgIGlmICh5eWx2
YWxwcC0+c2NfaW50ICE9IEVTU0xfVkVSU0lPTl9OVU1CRVIpCisgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiVmVyc2lvbiBudW1iZXIgbm90IHN1cHBvcnRlZCBieSBFU1NMIik7CisKKyAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgCisJaWYgKHRva2VuID09ICdcbicpeworCQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2V7
CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOworCX0KKyAgICByZXR1cm4g
dG9rZW47Cit9IC8vIENQUHZlcnNpb24KKworc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGNoYXIgZXh0ZW5zaW9uTmFt
ZVs4MF07CisKKyAgICBpZih0b2tlbj09J1xuJyl7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lmaWVkIik7CisgICAg
ICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0dXJuIHRva2VuOworCX0KKworICAgIGlmICh0b2tl
biAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNp
b24iKTsKKyAgICAKKyAgICBzdHJjcHkoZXh0ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworCSAgICAKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2Vu
ICE9ICc6JykgeworICAgICAgICBDUFBTaEluZm9Mb2dNc2coIic6JyBtaXNzaW5nIGFmdGVyIGV4
dGVuc2lvbiBuYW1lIik7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgCisgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coImJlaGF2aW9yIGZvciBleHRlbnNpb24gbm90IHNwZWNpZmllZCIpOworICAgICAg
ICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoZXh0
ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwor
CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworCWlmICh0b2tlbiA9PSAnXG4nKXsKKwkJcmV0dXJuIHRva2VuOworCX0KKwll
bHNleworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOworCX0KKyAgICBy
ZXR1cm4gdG9rZW47Cit9IC8vIENQUGV4dGVuc2lvbgorCitpbnQgcmVhZENQUGxpbmUoeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdl
OworICAgIGludCBpc1ZlcnNpb24gPSAwOworCisgICAgaWYgKHRva2VuID09IENQUF9JREVOVElG
SUVSKSB7CisgICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lQXRvbSkgewor
ICAgICAgICAgICAgIHRva2VuID0gQ1BQZGVmaW5lKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNl
IGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxzZUF0b20pIHsKKwkJCSBpZihDaGtDb3JyZWN0
RWxzZU5lc3RpbmcoKSl7CisgICAgICAgICAgICAgICAgIGlmICghY3BwLT5pZmRlcHRoICl7Cisg
ICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgbWlzbWF0Y2giKTsK
KyAgICAgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICBpZiAodG9rZW4g
IT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5l
eHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBl
eHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAh
PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
fQorCQkJICAgICB0b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOworICAgICAgICAgICAgIH1l
bHNleworICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAj
ZWxzZSIpOworICAgICAgICAgICAgICAgICBjcHAtPmlmZGVwdGg9MDsKKyAgICAgICAgICAgICAg
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVs
aWZBdG9tKSB7CisgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7CisgICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxpZiBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAg
ICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIC8vIHRo
aXMgdG9rZW4gaXMgcmVhbGx5IGEgZG9udCBjYXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBlYXQg
dGhlIHRva2VucworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOyAKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAh
PSAnXG4nKQorICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5
eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVuZGlm
QXRvbSkgeworCQkgICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKyAgICAgICAgICAgICBpZiAoIWNw
cC0+aWZkZXB0aCl7CisgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYg
bWlzbWF0Y2giKTsKKyAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgZWxzZQorCQkJICAJIC0tY3BwLT5pZmRlcHRoOworCSAg
ICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZkF0b20pIHsKKyAgICAgICAgICAg
ICB0b2tlbiA9IENQUGlmKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+
c2NfaWRlbnQgPT0gaWZkZWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigx
LCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlm
bmRlZkF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDAsIHl5bHZhbHBwKTsK
KyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gbGluZUF0b20pIHsKKyAg
ICAgICAgICAgICB0b2tlbiA9IENQUGxpbmUoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSBwcmFnbWFBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4g
PSBDUFBwcmFnbWEoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSB1bmRlZkF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUHVuZGVmKHl5bHZh
bHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXJyb3JBdG9t
KSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxwcCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9tKSB7CisgICAgICAgICAg
ICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHApOworICAgICAgICAgICAgaXNWZXJzaW9uID0g
MTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRv
bSkgeworICAgICAgICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgU3RvcmVTdHIoIkludmFsaWQgRGlyZWN0aXZlIik7Cisg
ICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19p
ZGVudCkpOworICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKHRva2VuICE9ICdcbicgJiYgdG9rZW4gIT0g
MCAmJiB0b2tlbiAhPSBFT0YpIHsKKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKyAgICAgICAgCisgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAxOworCisgICAgcmV0dXJuIHRva2VuOworfSAvLyByZWFkQ1BQbGlu
ZQorCit2b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAqcykgeworICAgIERlbGV0ZVRva2VuU3Ry
ZWFtKHMtPmJvZHkpOworfQorCit2b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5h
bWUsIGludCB2YWx1ZSkgeworICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswfTsKKyAgICBTeW1i
b2wgKnN5bWJvbCA9IE5VTEw7CisgICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07CisgICAgeXlz
dHlwZXBwIHZhbCA9IHswfTsKKyAgICBpbnQgYXRvbSA9IDA7CisKKyAgICBtYWNyby5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0obmFtZSwgbWFjcm9zLT5wb29sKTsKKyAgICB2YWwuc2NfaW50ID0gdmFs
dWU7CisgICAgc3ByaW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKKyAgICBSZWNv
cmRUb2tlbihtYWNyby5ib2R5LCBDUFBfSU5UQ09OU1RBTlQsICZ2YWwpOworICAgIGF0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCBuYW1lKTsKKyAgICBzeW1ib2wgPSBBZGRTeW1ib2woJmxv
Y2F0aW9uLCBtYWNyb3MsIGF0b20sIE1BQ1JPX1MpOworICAgIHN5bWJvbC0+ZGV0YWlscy5tYWMg
PSBtYWNybzsKK30KKworc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKSB7IHJldHVybiAtMTsgfQorc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAq
aW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgfQorCitzdGF0aWMgdm9pZCBQdXNo
RW9mU3JjKCkgeworICAgIElucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoSW5wdXRTcmMpKTsK
KyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyYykpOworICAgIGluLT5zY2FuID0gZW9m
X3NjYW47CisgICAgaW4tPmdldGNoID0gZW9mX3NjYW47CisgICAgaW4tPnVuZ2V0Y2ggPSBub29w
OworICAgIGluLT5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgY3BwLT5jdXJyZW50SW5w
dXQgPSBpbjsKK30KKworc3RhdGljIHZvaWQgUG9wRW9mU3JjKCkgeworICAgIGlmIChjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbiA9PSBlb2Zfc2NhbikgeworICAgICAgICBJbnB1dFNyYyAqaW4gPSBj
cHAtPmN1cnJlbnRJbnB1dDsKKyAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+cHJldjsK
KyAgICAgICAgZnJlZShpbik7CisgICAgfQorfQorCitzdGF0aWMgVG9rZW5TdHJlYW0gKlByZXNj
YW5NYWNyb0FyZyhUb2tlblN0cmVhbSAqYSwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBp
bnQgdG9rZW47CisgICAgVG9rZW5TdHJlYW0gKm47CisgICAgUmV3aW5kVG9rZW5TdHJlYW0oYSk7
CisgICAgZG8geworICAgICAgICB0b2tlbiA9IFJlYWRUb2tlbihhLCB5eWx2YWxwcCk7CisgICAg
ICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBMb29rVXBTeW1ib2wobWFjcm9zLCB5
eWx2YWxwcC0+c2NfaWRlbnQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAodG9r
ZW4gPiAwKTsKKyAgICBpZiAodG9rZW4gPD0gMCkgcmV0dXJuIGE7CisgICAgbiA9IE5ld1Rva2Vu
U3RyZWFtKCJtYWNybyBhcmciLCAwKTsKKyAgICBQdXNoRW9mU3JjKCk7CisgICAgUmVhZEZyb21U
b2tlblN0cmVhbShhLCAwLCAwKTsKKyAgICB3aGlsZSAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkgPiAwKSB7CisgICAgICAgIGlm
ICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRl
bnQsIHl5bHZhbHBwKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWNvcmRUb2tl
bihuLCB0b2tlbiwgeXlsdmFscHApOworICAgIH0KKyAgICBQb3BFb2ZTcmMoKTsKKyAgICBEZWxl
dGVUb2tlblN0cmVhbShhKTsKKyAgICByZXR1cm4gbjsKK30gLy8gUHJlc2Nhbk1hY3JvQXJnCisK
K3R5cGVkZWYgc3RydWN0IE1hY3JvSW5wdXRTcmMgeworICAgIElucHV0U3JjICAgIGJhc2U7Cisg
ICAgTWFjcm9TeW1ib2wgKm1hYzsKKyAgICBUb2tlblN0cmVhbSAqKmFyZ3M7Cit9IE1hY3JvSW5w
dXRTcmM7CisKKy8qIG1hY3JvX3NjYW4gLS0tCisqKiByZXR1cm4gdGhlIG5leHQgdG9rZW4gZm9y
IGEgbWFjcm8gZXhwYW5pb24sIGhhbmRsaW5nIG1hY3JvIGFyZ3MgCisqLworc3RhdGljIGludCBt
YWNyb19zY2FuKE1hY3JvSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAg
IGludCBpOworICAgIGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+bWFjLT5ib2R5LCB5eWx2YWxw
cCk7CisgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7CisgICAgICAgIGZvciAoaSA9
IGluLT5tYWMtPmFyZ2MtMTsgaT49MDsgaS0tKQorICAgICAgICAgICAgaWYgKGluLT5tYWMtPmFy
Z3NbaV0gPT0geXlsdmFscHAtPnNjX2lkZW50KSBicmVhazsKKyAgICAgICAgaWYgKGkgPj0gMCkg
eworICAgICAgICAgICAgUmVhZEZyb21Ub2tlblN0cmVhbShpbi0+YXJnc1tpXSwgeXlsdmFscHAt
PnNjX2lkZW50LCAwKTsKKyAgICAgICAgICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKKyAgICBpbi0+bWFjLT5idXN5ID0gMDsKKyAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7CisgICAgaWYgKGluLT5hcmdzKSB7Cisg
ICAgICAgIGZvciAoaT1pbi0+bWFjLT5hcmdjLTE7IGk+PTA7IGktLSkKKyAgICAgICAgICAgIERl
bGV0ZVRva2VuU3RyZWFtKGluLT5hcmdzW2ldKTsKKyAgICAgICAgZnJlZShpbi0+YXJncyk7Cisg
ICAgfQorICAgIGZyZWUoaW4pOworICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworfSAvLyBtYWNyb19zY2FuCisKKy8qIE1hY3Jv
RXhwYW5kCisqKiBjaGVjayBhbiBpZGVudGlmaWVyIChhdG9tKSB0byBzZWUgaWYgaXQgYSBtYWNy
byB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4KKyoqIElmIGl0IGlzLCBwdXNoIGFuIElucHV0U3Jj
IHRoYXQgd2lsbCBwcm9kdWNlIHRoZSBhcHByb3ByaWF0ZSBleHBhbnNpb24KKyoqIGFuZCByZXR1
cm4gVFJVRS4gIElmIG5vdCwgcmV0dXJuIEZBTFNFLgorKi8KKworaW50IE1hY3JvRXhwYW5kKGlu
dCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBTeW1ib2wgICAgICAgICAgICAg
ICpzeW0gPSBMb29rVXBTeW1ib2wobWFjcm9zLCBhdG9tKTsKKyAgICBNYWNyb0lucHV0U3JjICAg
ICAgICppbjsKKyAgICBpbnQgaSxqLCB0b2tlbiwgZGVwdGg9MDsKKyAgICBjb25zdCBjaGFyICpt
ZXNzYWdlOworCWlmIChhdG9tID09IF9fTElORV9fQXRvbSkgeworICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gR2V0TGluZU51bWJlcigpOworICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICBVbmdldFRva2VuKENQUF9J
TlRDT05TVEFOVCwgeXlsdmFscHApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYg
KGF0b20gPT0gX19GSUxFX19BdG9tKSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRT
dHJpbmdOdW1iZXIoKTsKKyAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVk
Iix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQs
IHl5bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCWlmIChhdG9tID09IF9fVkVS
U0lPTl9fQXRvbSkgeworICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLEVTU0xf
VkVSU0lPTl9TVFJJTkcpOworICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYXRvaSh5eWx2YWxw
cC0+c3ltYm9sX25hbWUpOworICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXls
dmFscHApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKCFzeW0gfHwgc3ltLT5k
ZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7CisgICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVz
eSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyByZWN1cnNpdmUgZXhwYW5zaW9ucworICAgIGluID0g
bWFsbG9jKHNpemVvZigqaW4pKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZigqaW4pKTsKKyAg
ICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKiltYWNyb19zY2FuOworICAgIGluLT5iYXNlLmxpbmUg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKKyAgICBpbi0+YmFzZS5uYW1lID0gY3BwLT5jdXJy
ZW50SW5wdXQtPm5hbWU7CisgICAgaW4tPm1hYyA9ICZzeW0tPmRldGFpbHMubWFjOworICAgIGlm
IChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQlpZiAodG9rZW4gIT0g
JygnKSB7CisgICAgICAgICAgICBVbmdldFRva2VuKHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBhdG9tOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICAgICAgaW4tPmFyZ3MgPSBtYWxsb2MoaW4tPm1hYy0+YXJnYyAqIHNpemVv
ZihUb2tlblN0cmVhbSAqKSk7CisgICAgICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkr
KykKKyAgICAgICAgICAgIGluLT5hcmdzW2ldID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIs
IDApOworCQlpPTA7aj0wOworICAgICAgICBkb3sKKyAgICAgICAgICAgIGRlcHRoID0gMDsKKwkJ
CXdoaWxlKDEpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRv
a2VuIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAi
KTsKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxh
dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0wKSAm
JiAodG9rZW4hPScpJykpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwICYm
ICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0gJyknKSkgYnJlYWs7CisgICAgICAgICAgICAgICAg
aWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JyknKSBkZXB0aC0tOworICAgICAgICAgICAgICAgIFJlY29yZFRva2VuKGluLT5hcmdzW2ldLCB0
b2tlbiwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGo9MTsKKwkJCX0KKyAgICAgICAgICAg
IGlmICh0b2tlbiA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09
MSkgJiZqPT0wKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBp
Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
Kys7CisJCX13aGlsZShpIDwgaW4tPm1hYy0+YXJnYyk7CisKKyAgICAgICAgaWYgKGkgPCBpbi0+
bWFjLT5hcmdjKSB7CisgICAgICAgICAgICBTdG9yZVN0cigiVG9vIGZldyBhcmdzIGluIE1hY3Jv
ICIpOworICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7
CisgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScpIHsKKyAgICAgICAgICAgIGRlcHRoPTA7CisJCQl3
aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGggPiAwIHx8IHRva2VuICE9ICcpJykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOworICAgICAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsrOworICAgICAgICAg
ICAgfQorCQkJCisgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeworICAgICAgICAgICAgICAg
IFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7CisgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0
U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRT
dHJmcm9tVFN0cigpOworICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0b3JlU3RyKCJUb28gbWFueSBhcmdzIGlu
IE1hY3JvICIpOworICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxh
dG9tKSk7CisgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
KwkJfQorCQlmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspIHsKKyAgICAgICAgICAgIGlu
LT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJnKGluLT5hcmdzW2ldLCB5eWx2YWxwcCk7CisgICAg
ICAgIH0KKyAgICB9CisjaWYgMAorICAgIHByaW50ZigiICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNc
biIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBsb2MuZmlsZSksCisgICAgICAgICAgIGxvYy5saW5l
LCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRvbSkpOworICAgIGZvciAoaT0wOyBpPGluLT5tYWMt
PmFyZ2M7IGkrKykgeworICAgICAgICBwcmludGYoIlx0YXJnICVzID0gJyIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ldKSk7CisgICAgICAgIER1bXBUb2tlblN0cmVhbShz
dGRvdXQsIGluLT5hcmdzW2ldKTsKKyAgICAgICAgcHJpbnRmKCInXG4iKTsKKyAgICB9CisjZW5k
aWYKKwkvKnJldGFpbiB0aGUgaW5wdXQgc291cmNlKi8KKyAgICBpbi0+YmFzZS5wcmV2ID0gY3Bw
LT5jdXJyZW50SW5wdXQ7CisgICAgc3ltLT5kZXRhaWxzLm1hYy5idXN5ID0gMTsKKyAgICBSZXdp
bmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMubWFjLmJvZHkpOworICAgIGNwcC0+Y3VycmVudElu
cHV0ID0gJmluLT5iYXNlOworICAgIHJldHVybiAxOworfSAvLyBNYWNyb0V4cGFuZAorCitpbnQg
Q2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpCit7CisgICAgaWYoY3BwLT5lbHNlZGVwdGhbY3Bw
LT5lbHNldHJhY2tlcl09PTApeworCSAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09
MTsKKyAgICAgIHJldHVybiAxOyAgICAgICAgICAKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
KwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAor
Q29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3Jh
dGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIg
dXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhp
cyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMu
ICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVz
ZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUu
CisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRz
IHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBj
b3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEg
U29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRo
ZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291
cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1
dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5v
dGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBk
aXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0
d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxv
Z29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBl
eHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5z
ZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5j
bHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUg
aW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4g
d2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdh
cmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlO
RyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUs
CitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJ
TiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwg
TlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwg
RVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9E
VUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBT
T0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRS
QUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9U
SEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3BwLmgK
Ky8vCisKKyNpZiAhZGVmaW5lZChfX0NQUF9IKQorI2RlZmluZSBfX0NQUF9IIDEKKworI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmgiCisKK2ludCBJbml0Q1BQKHZvaWQpOworaW50IEZpbmFsQ1BQ
KHZvaWQpOworaW50ICByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQgTWFj
cm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBDaGtDb3JyZWN0
RWxzZU5lc3Rpbmcodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0IE1hY3JvU3ltYm9sIHsKKyAgICBp
bnQgYXJnYzsKKyAgICBpbnQgKmFyZ3M7CisgICAgVG9rZW5TdHJlYW0gKmJvZHk7CisgICAgdW5z
aWduZWQgYnVzeToxOworICAgIHVuc2lnbmVkIHVuZGVmOjE7Cit9IE1hY3JvU3ltYm9sOworCit2
b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAqKTsKK3ZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29u
c3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKKwordm9pZCAgQ1BQRGVidWdMb2dNc2coY29uc3Qg
Y2hhciAqbXNnKTsgICAgICAvLyBQcmludHMgaW5mb3JtYXRpb24gaW50byBkZWJ1ZyBsb2cKK3Zv
aWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVy
ciBNc2cgaW50byBTaC5JbmZvLkxvZwordm9pZCAgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBj
aGFyICptc2cpOyAvLyBQcmludHMgd2FybmluZyBtZXNzYWdlcyBpbnRvIGluZm8gbG9nCit2b2lk
ICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioqLCBpbnQgbnVtVG9rZW5zKTsgIC8vICNwcmFnbWEg
ZGlyZWN0aXZlIGNvbnRhaW5lci4KK3ZvaWQgIFJlc2V0VFN0cmluZyh2b2lkKTsgICAgICAgICAg
ICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2UgYXMgVFN0cmluZy4KK3ZvaWQgIENQUEVycm9yVG9J
bmZvTG9nKGNoYXIqKTsgICAgICAgICAgICAgLy8gU3RpY2sgYWxsIGNwcCBlcnJvcnMgaW50byBT
aC5JbmZvLmxvZyAgIC4KK3ZvaWQgIFN0b3JlU3RyKGNoYXIqKTsgICAgICAgICAgICAgICAgICAg
ICAgLy8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFyc2UgQ29udGV4dC4KK3ZvaWQgIFNldExpbmVO
dW1iZXIoaW50KTsgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxpbmUgbnVtYmVyLiAgCit2b2lk
ICBTZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgIC8vIFNldCBzdHJpbmcgbnVt
YmVyLiAgICAKK2ludCAgIEdldExpbmVOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgICAgLy8g
R2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAoraW50ICAgR2V0U3RyaW5nTnVtYmVyKHZv
aWQpOyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCitj
b25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKTsgICAgICAgICAgIC8vIENvbnZlcnQgVFN0
cmluZyB0byBTdHJpbmcuICAKK3ZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNo
YXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKK2ludCAgIEZyZWVDUFAodm9pZCk7
CisKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19DUFBfSCkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTU3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmln
aHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJO
VklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBv
ZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitp
bnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJ
QSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlv
dSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0
YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4g
Y29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEg
cGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdo
dHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2Fy
ZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklE
SUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5k
L29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUg
TlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9m
IE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWlt
ZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgor
TmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2Yg
TlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3Ns
eSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhw
cmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcg
YnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5n
ZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0
aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBs
aWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJ
REVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRI
T1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1J
TkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJ
TkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEg
QkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExB
UlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RP
LCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04s
IE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJF
LCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNF
LCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHBzdHJ1Y3QuYwor
Ly8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKK0NQUFN0cnVjdCAgKmNwcCAg
ICAgID0gTlVMTDsKK3N0YXRpYyBpbnQgIHJlZkNvdW50ID0gMDsKKworaW50IEluaXRQcmVwcm9j
ZXNzb3Iodm9pZCk7CitpbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCk7CitpbnQgRnJlZUNQUFN0
cnVjdCh2b2lkKTsKK2ludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKKworLyoKKyAqIElu
aXRDUFBTdHJ1Y3QoKSAtIEluaXRpbGFpemUgdGhlIENQUCBzdHJ1Y3R1cmUuCisgKgorICovCisK
K2ludCBJbml0Q1BQU3RydWN0KHZvaWQpCit7CisgICAgaW50IGxlbjsKKyAgICBjaGFyICpwOwor
CisgICAgY3BwID0gKENQUFN0cnVjdCAqKSBtYWxsb2Moc2l6ZW9mKENQUFN0cnVjdCkpOworICAg
IGlmIChjcHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZWZDb3VudCsrOwor
CisgICAgLy8gSW5pdGlhbGl6ZSBwdWJsaWMgbWVtYmVyczoKKyAgICBjcHAtPnBMYXN0U291cmNl
TG9jID0gJmNwcC0+bGFzdFNvdXJjZUxvYzsKKyAgICAKKwlwID0gKGNoYXIgKikgJmNwcC0+b3B0
aW9uczsKKyAgICBsZW4gPSBzaXplb2YoY3BwLT5vcHRpb25zKTsKKyAgICB3aGlsZSAoLS1sZW4g
Pj0gMCkKKyAgICAgICAgcFtsZW5dID0gMDsKKyAgICAgCisgICAgUmVzZXRQcmVwcm9jZXNzb3Io
KTsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5pdENQUFN0cnVjdAorCitpbnQgUmVzZXRQcmVwcm9j
ZXNzb3Iodm9pZCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHByaXZhdGUgbWVtYmVyczoKKworICAg
IGNwcC0+bGFzdFNvdXJjZUxvYy5maWxlID0gMDsKKyAgICBjcHAtPmxhc3RTb3VyY2VMb2MubGlu
ZSA9IDA7CisJY3BwLT5wQz0wOworICAgIGNwcC0+Q29tcGlsZUVycm9yPTA7IAorCWNwcC0+aWZk
ZXB0aD0wOworICAgIGZvcihjcHAtPmVsc2V0cmFja2VyPTA7IGNwcC0+ZWxzZXRyYWNrZXI8NjQ7
IGNwcC0+ZWxzZXRyYWNrZXIrKykKKwkJY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09
MDsgCisJY3BwLT5lbHNldHJhY2tlcj0wOworICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMDsK
KyAgICByZXR1cm4gMTsKK30KKworLy9JbnRpYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgorCitp
bnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIyAgZGVmaW5lIENQUF9TVFVGRiB0cnVl
CisgICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgorICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgp
OworICAgICAgICAgICAgSW5pdENQUFN0cnVjdCgpOworICAgICAgICAgICAgY3BwLT5vcHRpb25z
LlF1aWV0ID0gMTsKKyAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nID0gImdl
bmVyaWMiOworICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgMCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBpZiAoIUluaXRTY2FubmVyKGNwcCkp
CisJICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIyAgZW5kaWYKKyAgcmV0dXJuIDA7IAor
fQorCisvL0ZyZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBzdHJ1Y3R1cmUuCisKK2ludCBG
cmVlQ1BQU3RydWN0KHZvaWQpCit7CisgICAgaWYgKHJlZkNvdW50KQorICAgIHsKKyAgICAgICBm
cmVlKGNwcCk7CisgICAgICAgcmVmQ291bnQtLTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDE7
Cit9CisKKy8vRmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgorCitpbnQgRmluYWxpemVQcmVw
cm9jZXNzb3Iodm9pZCkKK3sKKyAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1ZQorICAgICAgICAj
ICBpZmRlZiBDUFBfU1RVRkYKKyAgICAgICAgICAgIEZyZWVBdG9tVGFibGUoYXRhYmxlKTsKKyAg
ICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEZyZWVTY2FubmVyKCk7Cisg
ICAgICAgIyAgZW5kaWYKKyAgcmV0dXJuIDA7IAorfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBFbmQgb2YgY3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAor
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0lu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
K05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitU
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAor
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworI2luY2x1ZGUgPHN0ZGRl
Zi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVm
IF9NU0NfVkVSCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKKworLy8gZGVmYXVsdCBhbGlnbm1lbnQgYW5kIGNo
dW5rc2l6ZSwgaWYgY2FsbGVkIHdpdGggMCBhcmd1bWVudHMKKyNkZWZpbmUgQ0hVTktTSVpFICAg
ICAgICg2NCoxMDI0KQorI2RlZmluZSBBTElHTiAgICAgICAgICAgOAorCisvLyB3ZSBuZWVkIHRv
IGNhbGwgdGhlIGByZWFsJyBtYWxsb2MgYW5kIGZyZWUsIG5vdCBvdXIgcmVwbGFjZW1lbnRzCisj
dW5kZWYgbWFsbG9jCisjdW5kZWYgZnJlZQorCitzdHJ1Y3QgY2h1bmsgeworICAgIHN0cnVjdCBj
aHVuayAgICAgICAgKm5leHQ7Cit9OworCitzdHJ1Y3QgY2xlYW51cCB7CisgICAgc3RydWN0IGNs
ZWFudXAgICAgICAqbmV4dDsKKyAgICB2b2lkICAgICAgICAgICAgICAgICgqZm4pKHZvaWQgKik7
CisgICAgdm9pZCAgICAgICAgICAgICAgICAqYXJnOworfTsKKworc3RydWN0IE1lbW9yeVBvb2xf
cmVjIHsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpuZXh0OworICAgIHVpbnRwdHJfdCAgICAg
ICAgICAgZnJlZSwgZW5kOworICAgIHNpemVfdCAgICAgICAgICAgICAgY2h1bmtzaXplOworICAg
IHVpbnRwdHJfdCAgICAgICAgICAgYWxpZ25tYXNrOworICAgIHN0cnVjdCBjbGVhbnVwICAgICAg
KmNsZWFudXA7Cit9OworCitNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtz
aXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCit7CisgICAgTWVtb3J5UG9vbCAgKnBvb2w7CisKKyAg
ICBpZiAoYWxpZ24gPT0gMCkgYWxpZ24gPSBBTElHTjsKKyAgICBpZiAoY2h1bmtzaXplID09IDAp
IGNodW5rc2l6ZSA9IENIVU5LU0laRTsKKyAgICBpZiAoYWxpZ24gJiAoYWxpZ24tMSkpIHJldHVy
biAwOworICAgIGlmIChjaHVua3NpemUgPCBzaXplb2YoTWVtb3J5UG9vbCkpIHJldHVybiAwOwor
ICAgIGlmIChjaHVua3NpemUgJiAoYWxpZ24tMSkpIHJldHVybiAwOworICAgIGlmICghKHBvb2wg
PSBtYWxsb2MoY2h1bmtzaXplKSkpIHJldHVybiAwOworICAgIHBvb2wtPm5leHQgPSAwOworICAg
IHBvb2wtPmNodW5rc2l6ZSA9IGNodW5rc2l6ZTsKKyAgICBwb29sLT5hbGlnbm1hc2sgPSAodWlu
dHB0cl90KShhbGlnbiktMTsgIAorICAgIHBvb2wtPmZyZWUgPSAoKHVpbnRwdHJfdCkocG9vbCAr
IDEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2s7CisgICAgcG9vbC0+ZW5k
ID0gKHVpbnRwdHJfdClwb29sICsgY2h1bmtzaXplOworICAgIHBvb2wtPmNsZWFudXAgPSAwOwor
ICAgIHJldHVybiBwb29sOworfQorCit2b2lkIG1lbV9GcmVlUG9vbChNZW1vcnlQb29sICpwb29s
KQoreworICAgIHN0cnVjdCBjbGVhbnVwICAgICAgKmNsZWFudXA7CisgICAgc3RydWN0IGNodW5r
ICAgICAgICAqcCwgKm5leHQ7CisKKyAgICBmb3IgKGNsZWFudXAgPSBwb29sLT5jbGVhbnVwOyBj
bGVhbnVwOyBjbGVhbnVwID0gY2xlYW51cC0+bmV4dCkgeworICAgICAgICBjbGVhbnVwLT5mbihj
bGVhbnVwLT5hcmcpOworICAgIH0KKyAgICBmb3IgKHAgPSAoc3RydWN0IGNodW5rICopcG9vbDsg
cDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIGZyZWUocCk7
CisgICAgfQorfQorCit2b2lkICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcG9vbCwgc2l6ZV90IHNp
emUpCit7CisgICAgc3RydWN0IGNodW5rICpjaDsKKyAgICB2b2lkICpydiA9ICh2b2lkICopcG9v
bC0+ZnJlZTsKKyAgICBzaXplID0gKHNpemUgKyBwb29sLT5hbGlnbm1hc2spICYgfnBvb2wtPmFs
aWdubWFzazsKKyAgICBpZiAoc2l6ZSA8PSAwKSBzaXplID0gcG9vbC0+YWxpZ25tYXNrOworICAg
IHBvb2wtPmZyZWUgKz0gc2l6ZTsKKyAgICBpZiAocG9vbC0+ZnJlZSA+IHBvb2wtPmVuZCB8fCBw
b29sLT5mcmVlIDwgKHVpbnRwdHJfdClydikgeworICAgICAgICBzaXplX3QgbWlucmVxID0gKHNp
emUgKyBzaXplb2Yoc3RydWN0IGNodW5rKSArIHBvb2wtPmFsaWdubWFzaykKKyAgICAgICAgICAg
ICAgICAgICAgICAmIH5wb29sLT5hbGlnbm1hc2s7CisgICAgICAgIHBvb2wtPmZyZWUgPSAodWlu
dHB0cl90KXJ2OworICAgICAgICBpZiAobWlucmVxID49IHBvb2wtPmNodW5rc2l6ZSkgeworICAg
ICAgICAgICAgLy8gcmVxdWVzdCBzaXplIGlzIHRvbyBiaWcgZm9yIHRoZSBjaHVua3NpemUsIHNv
IGFsbG9jYXRlIGl0IGFzCisgICAgICAgICAgICAvLyBhIHNpbmdsZSBjaHVuayBvZiB0aGUgcmln
aHQgc2l6ZQorICAgICAgICAgICAgY2ggPSBtYWxsb2MobWlucmVxKTsKKyAgICAgICAgICAgIGlm
ICghY2gpIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2ggPSBtYWxs
b2MocG9vbC0+Y2h1bmtzaXplKTsKKyAgICAgICAgICAgIGlmICghY2gpIHJldHVybiAwOworICAg
ICAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpY2ggKyBtaW5yZXE7CisgICAgICAgICAg
ICBwb29sLT5lbmQgPSAodWludHB0cl90KWNoICsgcG9vbC0+Y2h1bmtzaXplOworICAgICAgICB9
CisgICAgICAgIGNoLT5uZXh0ID0gcG9vbC0+bmV4dDsKKyAgICAgICAgcG9vbC0+bmV4dCA9IGNo
OworICAgICAgICBydiA9ICh2b2lkICopKCgodWludHB0cl90KShjaCsxKSArIHBvb2wtPmFsaWdu
bWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworfQorCitp
bnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcG9vbCwgdm9pZCAoKmZuKSh2b2lkICopLCB2
b2lkICphcmcpIHsKKyAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKworICAgIHBvb2wtPmZy
ZWUgPSAocG9vbC0+ZnJlZSArIHNpemVvZih2b2lkICopIC0gMSkgJiB+KHNpemVvZih2b2lkICop
LTEpOworICAgIGNsZWFudXAgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKHN0cnVjdCBjbGVhbnVw
KSk7CisgICAgaWYgKCFjbGVhbnVwKSByZXR1cm4gLTE7CisgICAgY2xlYW51cC0+bmV4dCA9IHBv
b2wtPmNsZWFudXA7CisgICAgY2xlYW51cC0+Zm4gPSBmbjsKKyAgICBjbGVhbnVwLT5hcmcgPSBh
cmc7CisgICAgcG9vbC0+Y2xlYW51cCA9IGNsZWFudXA7CisgICAgcmV0dXJuIDA7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2Fy
ZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisjaWZuZGVm
IF9fTUVNT1JZX0gKKyNkZWZpbmUgX19NRU1PUllfSAorCit0eXBlZGVmIHN0cnVjdCBNZW1vcnlQ
b29sX3JlYyBNZW1vcnlQb29sOworCitleHRlcm4gTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2wo
c2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKK2V4dGVybiB2b2lkIG1lbV9G
cmVlUG9vbChNZW1vcnlQb29sICopOworZXh0ZXJuIHZvaWQgKm1lbV9BbGxvYyhNZW1vcnlQb29s
ICpwLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqbWVtX1JlYWxsb2MoTWVtb3J5UG9vbCAq
cCwgdm9pZCAqb2xkLCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IG5ld3NpemUpOworZXh0ZXJuIGlu
dCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29sICpwLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQg
KmFyZyk7CisKKyNlbmRpZiAvKiBfX01FTU9SWV9IICovCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitD
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAor
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
CitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
CitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBCSVNPTl9QQVJTRVJfSAorIyBk
ZWZpbmUgQklTT05fUEFSU0VSX0gKKworI2lmbmRlZiB5eXN0eXBlcHAKK3R5cGVkZWYgc3RydWN0
IHsKKyAgICBpbnQgICAgc2NfaW50OworICAgIGZsb2F0ICBzY19mdmFsOworICAgIGludCAgICBz
Y19pZGVudDsKKwljaGFyICAgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTisxXTsKK30g
eXlzdHlwZXBwOworCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisjIGRl
ZmluZQlDUFBfQU5EX09QCSAgICAgICAgMjU3CisjIGRlZmluZQlDUFBfU1VCX0FTU0lHTgkgICAg
MjU5CisjIGRlZmluZQlDUFBfTU9EX0FTU0lHTgkgICAgMjYwCisjIGRlZmluZQlDUFBfQUREX0FT
U0lHTgkyNjEKKyMgZGVmaW5lCUNQUF9ESVZfQVNTSUdOCTI2MgorIyBkZWZpbmUJQ1BQX01VTF9B
U1NJR04JMjYzCisjIGRlZmluZQlDUFBfRVFfT1AJICAgICAgICAyNjQKKyMgZGVmaW5lICAgIENQ
UF9YT1JfT1AgICAgICAgICAyNjUgCisjIGRlZmluZQlFUlJPUl9TWQkgICAgMjY2CisjIGRlZmlu
ZQlDUFBfRkxPQVRDT05TVEFOVAkyNjcKKyMgZGVmaW5lCUNQUF9HRV9PUAkgICAgICAgIDI2OAor
IyBkZWZpbmUJQ1BQX1JJR0hUX09QICAgICAgICAyNjkKKyMgZGVmaW5lCUNQUF9JREVOVElGSUVS
CSAgICAyNzAKKyMgZGVmaW5lCUNQUF9JTlRDT05TVEFOVAkgICAgMjcxCisjIGRlZmluZQlDUFBf
TEVfT1AJICAgICAgICAyNzIKKyMgZGVmaW5lCUNQUF9MRUZUX09QCSAgICAgICAgMjczCisjIGRl
ZmluZQlDUFBfREVDX09QCTI3NAorIyBkZWZpbmUJQ1BQX05FX09QCSAgICAgICAgMjc1CisjIGRl
ZmluZQlDUFBfT1JfT1AJICAgICAgICAyNzYKKyMgZGVmaW5lCUNQUF9JTkNfT1AJICAgIDI3Nwor
IyBkZWZpbmUJQ1BQX1NUUkNPTlNUQU5UCSAgICAyNzgKKyMgZGVmaW5lCUNQUF9UWVBFSURFTlRJ
RklFUgkyNzkKKworIyBkZWZpbmUJRklSU1RfVVNFUl9UT0tFTl9TWQkyODkKKworIyBkZWZpbmUJ
Q1BQX1JJR0hUX0FTU0lHTgkgICAgMjgwCisjIGRlZmluZQlDUFBfTEVGVF9BU1NJR04JICAgIDI4
MQorIyBkZWZpbmUJQ1BQX0FORF9BU1NJR04JMjgyCisjIGRlZmluZQlDUFBfT1JfQVNTSUdOICAJ
MjgzCisjIGRlZmluZQlDUFBfWE9SX0FTU0lHTgkyODQKKyMgZGVmaW5lCUNQUF9MRUZUX0JSQUNL
RVQJMjg1CisjIGRlZmluZQlDUFBfUklHSFRfQlJBQ0tFVAkyODYKKyMgZGVmaW5lCUNQUF9MRUZU
X0JSQUNFCTI4NworIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNFCTI4OAorCisjZW5kaWYgLyogbm90
IEJJU09OX1BBUlNFUl9IICovCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3ByZXByb2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBw
bGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24s
IG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQor
Y29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdy
ZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQK
K3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5v
bi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBv
cmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2Us
IHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQor
Zm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3
YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhp
cyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBz
dWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUg
bmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jw
b3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4g
dGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBs
aWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGlt
aXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBk
ZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNv
ZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJl
dW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJB
UyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJ
T04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQs
IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJ
VFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEgg
T1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZP
UiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJ
VFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YK
K1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklT
SU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElP
TiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENB
VVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitO
VklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKworIyBpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgiCitleHRlcm4gQ1BQU3RydWN0ICpjcHA7CitpbnQgSW5pdENQUFN0cnVj
dCh2b2lkKTsKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CitpbnQgSW5pdEF0b21U
YWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7CitpbnQgU2NhbkZyb21TdHJpbmco
Y2hhciAqcyk7CitjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBh
dG9tKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzY0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
KworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRv
IHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRp
c3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5j
ZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMs
IHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMg
TlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVy
bXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2Us
IHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdh
cmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFu
ZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2Rp
ZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQg
aWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWlu
IHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xs
b3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBv
ZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2Vy
dmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJ
RElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVy
IHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBO
VklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJp
Z2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBi
eSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jw
b3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElB
IFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQK
K1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1Ig
SU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04g
RUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJ
TiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJF
Q1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBP
RiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9O
IE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRF
UiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklD
VCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8vCisvLyBzY2FubmVyLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisj
aWYgMAorICAgICNpbmNsdWRlIDxpZWVlZnAuaD4KKyAgICAjZWxzZQorICAgICNkZWZpbmUgaXNp
bmZmKHgpICgoKCooaW50ICopJih4KSAmIDB4N2Y4MDAwMDBMKT09MHg3ZjgwMDAwMEwpICYmIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgKCgqKGludCAqKSYoeCkgJiAweDAwN2ZmZmZmTCk9PTAw
MDAwMDAwMDBMKSkKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Ns
Z2xvYmFscy5oIgorCisKK3R5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKKyAgICBJbnB1
dFNyYyBiYXNlOworICAgIGNoYXIgKnA7Cit9IFN0cmluZ0lucHV0U3JjOworCitzdGF0aWMgaW50
IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgcmV0
dXJuIEVPRjsKK30gLy8gZW9mX3NjYW4KKworc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4s
IGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9CisKK3N0YXRpYyBJbnB1dFNyYyBlb2Zf
aW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCB9OworCitzdGF0aWMg
aW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNkZWZp
bmUgRU9MX1NZICdcbicKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBEQkdf
QlJFQUtQT0lOVCgpIF9fYXNtIGludCAzCisjZWxpZiBkZWZpbmVkKF9NX0FNRDY0KQorICAgICNk
ZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBhc3NlcnQoISJEYmdfQnJlYWtwb2ludCIpOworI2Vsc2UK
KyAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVND
X1ZFUikgJiYgIWRlZmluZWQoX01fQU1ENjQpCisgICAgX19pbnQ2NCBSRFRTQyAoIHZvaWQgKSB7
CisKKyAgICAgICAgX19pbnQ2NCB2OworICAgIAorICAgICAgICBfX2FzbSBfX2VtaXQgMHgwZgor
ICAgICAgICBfX2FzbSBfX2VtaXQgMHgzMQorICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYs
IGVheAorICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYrNCwgZWR4CisgICAgCisgICAgICAg
IHJldHVybiB2OworICAgIH0KKyNlbmRpZgorCisKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3Qg
KmNwcCkKK3sKKyAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhlIENQUCBsaW5l
IHNjYW5uZXI6CisgICAgaWYgKCFJbml0Q1BQKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Y3BwLT5tb3N0UmVjZW50VG9rZW4gPSAwOworICAgIGNwcC0+dG9rZW5Mb2MgPSAmY3BwLT5sdG9r
ZW5Mb2M7CisKKyAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gMDsKKyAgICBjcHAtPmx0b2tlbkxv
Yy5saW5lID0gMDsKKworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmVvZl9pbnB1dHNyYzsKKyAg
ICBjcHAtPnByZXZpb3VzX3Rva2VuID0gJ1xuJzsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVu
dCA9IDA7CisKKyAgICByZXR1cm4gMTsKK30gLy8gSW5pdFNjYW5uZXIKKworaW50IEZyZWVTY2Fu
bmVyKHZvaWQpCit7CisgICAgcmV0dXJuIChGcmVlQ1BQKCkpOworfQorCisvKgorICogc3RyX2dl
dGNoKCkKKyAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCisg
KiByZXR1cm5zIHRoZSBuZXh0LWNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgorICogcmV0dXJu
cyBFT0Ygd2hlbiB0aGUgY29tcGxldGUgc2hhZGVyIGlzIHBhcnNlZC4KKyAqLworc3RhdGljIGlu
dCBzdHJfZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluKQoreworCWZvcig7Oyl7CisJICAgaWYgKCpp
bi0+cCl7CisJICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgaW4tPmJh
c2UubGluZSsrOworICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgcmV0dXJuICppbi0+cCsrOworCSAgIH0KKwkgICBpZigrKyhjcHAtPlBhV2hpY2hT
dHIpIDwgY3BwLT5QYUFyZ2MpeworCQkgIGZyZWUoaW4pOworCQkgIFNldFN0cmluZ051bWJlcihj
cHAtPlBhV2hpY2hTdHIpOworICAgIAkgIFNldExpbmVOdW1iZXIoMSk7CisJCSAgU2NhbkZyb21T
dHJpbmcoY3BwLT5QYUFyZ3ZbY3BwLT5QYVdoaWNoU3RyXSk7CisJCSAgaW49KFN0cmluZ0lucHV0
U3JjKiljcHAtPmN1cnJlbnRJbnB1dDsKKwkgICAgICBjb250aW51ZTsgICAgICAgICAgICAgCisJ
ICAgfQorCSAgIGVsc2V7CisJICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2
OworCSAgICAgIGNwcC0+UGFXaGljaFN0cj0wOworICAgICAgICAgIGZyZWUoaW4pOworICAgICAg
ICAgIHJldHVybiBFT0Y7CisgICAgICAgfSAgCisJfQorfSAvLyBzdHJfZ2V0Y2gKKworc3RhdGlj
IHZvaWQgc3RyX3VuZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAq
dHlwZSkgeworICAgIGlmIChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKKwllbHNlIHsKKwkJKihp
bi0+cCk9J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBzaGlmdGluZyB0byB0aGUgcHJl
dmlvdXMgc3RyaW5nLgorCSAgICBjcHAtPlBhV2hpY2hTdHItLTsKKwl9ICAKKwlpZiAoY2ggPT0g
J1xuJykgeworICAgICAgICBpbi0+YmFzZS5saW5lLS07CisgICAgICAgIERlY0xpbmVOdW1iZXIo
KTsKKyAgICB9Cit9IC8vIHN0cl91bmdldGNoCisKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICpz
KQoreworICAgIAorCVN0cmluZ0lucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoU3RyaW5nSW5w
dXRTcmMpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihTdHJpbmdJbnB1dFNyYykpOworCWlu
LT5wID0gczsKKyAgICBpbi0+YmFzZS5saW5lID0gMTsKKyAgICBpbi0+YmFzZS5zY2FuID0gYnl0
ZV9zY2FuOworICAgIGluLT5iYXNlLmdldGNoID0gKGludCAoKikoSW5wdXRTcmMgKiwgeXlzdHlw
ZXBwICopKXN0cl9nZXRjaDsKKyAgICBpbi0+YmFzZS51bmdldGNoID0gKHZvaWQgKCopKElucHV0
U3JjICosIGludCwgeXlzdHlwZXBwICopKXN0cl91bmdldGNoOworICAgIGluLT5iYXNlLnByZXYg
PSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsK
KworICAgIHJldHVybiAxOworfSAvLyBTY2FuRnJvbVN0cmluZzsKKworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8gRmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICog
bEJ1aWxkRmxvYXRWYWx1ZSgpIC0gUXVpY2sgYW5kIGRpcnR5IGNvbnZlcnNpb24gdG8gZmxvYXRp
bmcgcG9pbnQuICBTaW5jZSBhbGwKKyAqICAgICAgICAgd2UgbmVlZCBpcyBzaW5nbGUgcHJlY2lz
aW9uIHRoaXMgc2hvdWxkIGJlIHF1aXRlIHByZWNpc2UuCisgKi8KKworc3RhdGljIGZsb2F0IGxC
dWlsZEZsb2F0VmFsdWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgZXhwKQoreworICAg
IGRvdWJsZSB2YWwsIGV4cHZhbCwgdGVuOworICAgIGludCBpaSwgbGxlbiwgYWJzZXhwOworICAg
IGZsb2F0IHJ2OworCisgICAgdmFsID0gMC4wOworICAgIGxsZW4gPSBsZW47CisgICAgZm9yIChp
aSA9IDA7IGlpIDwgbGVuOyBpaSsrKQorICAgICAgICB2YWwgPSB2YWwqMTAuMCArIChzdHJbaWld
IC0gJzAnKTsKKyAgICBpZiAoZXhwICE9IDApIHsKKyAgICAgICAgYWJzZXhwID0gZXhwID4gMCA/
IGV4cCA6IC1leHA7CisgICAgICAgIGV4cHZhbCA9IDEuMGY7CisgICAgICAgIHRlbiA9IDEwLjA7
CisgICAgICAgIHdoaWxlIChhYnNleHApIHsKKyAgICAgICAgICAgIGlmIChhYnNleHAgJiAxKQor
ICAgICAgICAgICAgICAgIGV4cHZhbCAqPSB0ZW47CisgICAgICAgICAgICB0ZW4gKj0gdGVuOwor
ICAgICAgICAgICAgYWJzZXhwID4+PSAxOworICAgICAgICB9CisgICAgICAgIGlmIChleHAgPj0g
MCkgeworICAgICAgICAgICAgdmFsICo9IGV4cHZhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhbCAvPSBleHB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgcnYgPSAoZmxvYXQp
dmFsOworICAgIGlmIChpc2luZmYocnYpKSB7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIgRVJST1Jf
X19GUF9DT05TVF9PVkVSRkxPVyIpOworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9IC8vIGxCdWls
ZEZsb2F0VmFsdWUKKworCisvKgorICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBw
b2ludCBjb25zdGFudC4gIEFzc3VtZXMgdGhhdCB0aGUgc2Nhbm5lcgorICogICAgICAgICBoYXMg
c2VlbiBhdCBsZWFzdCBvbmUgZGlnaXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4n
IG9yIHRoZQorICogICAgICAgICBsZXR0ZXIgJ2UnLgorICovCisKK3N0YXRpYyBpbnQgbEZsb2F0
Q29uc3QoY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQor
eworICAgIGludCBIYXNEZWNpbWFsLCBkZWNsZW4sIGV4cCwgRXhwU2lnbjsKKyAgICBpbnQgc3Ry
X2xlbjsKKyAgICBmbG9hdCBsdmFsOworICAgIAorICAgIEhhc0RlY2ltYWwgPSAwOworICAgIGRl
Y2xlbiA9IDA7CisgICAgZXhwID0gMDsKKwkKKyAgICBzdHJfbGVuPWxlbjsKKyAgICBpZiAoY2gg
PT0gJy4nKSB7CisJCXN0cltsZW4rK109Y2g7CisgICAgICAgIEhhc0RlY2ltYWwgPSAxOworICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAg
ICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICBk
ZWNsZW4rKzsKKyAgICAgICAgICAgICAgICBpZiAobGVuID4gMCB8fCBjaCAhPSAnMCcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RyW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVu
Kys7c3RyX2xlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJS
T1JfX19GUF9DT05TVF9UT09fTE9ORyIpOworICAgICAgICAgICAgICAgIGxlbiA9IDEsc3RyX2xl
bj0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXhwb25lbnQ6
CisKKyAgICBpZiAoY2ggPT0gJ2UnIHx8IGNoID09ICdFJykgeworICAgICAgICBFeHBTaWduID0g
MTsKKwkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKGNoID09ICcrJykg
eworICAgICAgICAgICAgc3RyW2xlbisrXT1jaDsgIAorCQkJY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgIEV4cFNpZ24gPSAtMTsKKwkJCXN0cltsZW4rK109
Y2g7CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisgICAgICAgIGlmIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7CisgICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykg
eworICAgICAgICAgICAgICAgIGV4cCA9IGV4cCoxMCArIGNoIC0gJzAnOworCQkJCXN0cltsZW4r
K109Y2g7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VSUk9SX0lOX0VYUE9O
RU5UIik7CisgICAgICAgIH0KKyAgICAgICAgZXhwICo9IEV4cFNpZ247CisgICAgfQorICAgICAg
CisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIGx2YWwgPSAwLjBmOworCQlzdHJjcHkoc3Ry
LCIwLjAiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJbbGVuXT0nXDAnOyAgICAgIAorICAg
ICAgICBsdmFsID0gbEJ1aWxkRmxvYXRWYWx1ZShzdHIsIHN0cl9sZW4sIGV4cCAtIGRlY2xlbik7
CisgICAgfQorICAgIC8vIFN1ZmZpeDoKKyAgICAKKyAgICB5eWx2YWxwcC0+c2NfZnZhbCA9IGx2
YWw7CisgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzdHIpOworICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOyAgICAg
ICAgICAgIAorICAgIHJldHVybiBDUFBfRkxPQVRDT05TVEFOVDsKK30gLy8gbEZsb2F0Q29uc3QK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIE5vcm1hbCBTY2FubmVyIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworICAgIAorc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjaGFyIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9M
RU4gKyAxXTsKKyAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKKyAgICBp
bnQgQWxyZWFkeUNvbXBsYWluZWQ7CisgICAgaW50IGxlbiwgY2gsIGlpLCBpdmFsID0gMDsKKwor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDA7CisgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisJCQorICAgICAgICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xy
JykgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDE7CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICB9CisJCQorICAgICAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50
SW5wdXQtPm5hbWU7CisgICAgICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bGluZTsKKyAgICAgICAgbGVuID0gMDsKKyAgICAgICAgc3dpdGNoIChjaCkgeworICAg
ICAgICBkZWZhdWx0OgorCQkJcmV0dXJuIGNoOyAvLyBTaW5nbGUgY2hhcmFjdGVyIHRva2VuCisg
ICAgICAgIGNhc2UgRU9GOgorICAgICAgICAgICAgcmV0dXJuIC0xOworCQljYXNlICdBJzogY2Fz
ZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6CisgICAgICAgIGNhc2UgJ0YnOiBj
YXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzoKKyAgICAgICAgY2FzZSAnSyc6
IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOgorICAgICAgICBjYXNlICdQ
JzogY2FzZSAnUSc6IGNhc2UgJ1InOiBjYXNlICdTJzogY2FzZSAnVCc6CisgICAgICAgIGNhc2Ug
J1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOiBjYXNlICdZJzoKKyAgICAgICAgY2Fz
ZSAnWic6IGNhc2UgJ18nOgorICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBj
YXNlICdkJzogY2FzZSAnZSc6CisgICAgICAgIGNhc2UgJ2YnOiBjYXNlICdnJzogY2FzZSAnaCc6
IGNhc2UgJ2knOiBjYXNlICdqJzoKKyAgICAgICAgY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdt
JzogY2FzZSAnbic6IGNhc2UgJ28nOgorICAgICAgICBjYXNlICdwJzogY2FzZSAncSc6IGNhc2Ug
J3InOiBjYXNlICdzJzogY2FzZSAndCc6CisgICAgICAgIGNhc2UgJ3UnOiBjYXNlICd2JzogY2Fz
ZSAndyc6IGNhc2UgJ3gnOiBjYXNlICd5JzoKKyAgICAgICAgY2FzZSAneic6ICAgICAgICAgICAg
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOwor
ICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsJCQkJCQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicp
IHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAg
ICAgICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgY2ggPT0gJ18nKTsKKyAgICAgICAgICAgIGlmIChsZW4gPj0gTUFYX1NZTUJP
TF9OQU1FX0xFTikKKyAgICAgICAgICAgICAgICBsZW4gPSBNQVhfU1lNQk9MX05BTUVfTEVOIC0g
MTsKKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgY3Bw
LT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7
CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gQ1BQX0lERU5USUZJRVI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICB5eWx2YWxwcC0+
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYg
KGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKKwkJCQl5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVu
KytdID0gY2g7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAoKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdm
JykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxh
aW5lZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAg
ICAgICBkbyB7CisJCQkJCQl5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXZhbCA8PSAweDBmZmZmZmZmKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICdBJyArIDEwOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlpID0gY2ggLSAnYScgKyAxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXZhbCA9IChpdmFsIDw8IDQpIHwgaWk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghQWxyZWFkeUNvbXBsYWluZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0hFWF9DT05TVF9PVkVSRkxPVyIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1Jf
X19FUlJPUl9JTl9IRVhfQ09OU1RBTlQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJCXl5
bHZhbHBwLT5zY19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09O
U1RBTlQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsg
Ly8gb2N0YWwgaW50ZWdlciBjb25zdGFudHMKKyAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxh
aW5lZCA9IDA7CisgICAgICAgICAgICAgICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgZG8g
eworICAgICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdmFsIDw9IDB4MWZmZmZmZmYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBp
dmFsID0gKGl2YWwgPDwgMykgfCBpaTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWluZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19PQ1RfQ09OU1RfT1ZF
UkZMT1ciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpOworICAgICAgICAgICAgICAg
IGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdmJyB8fCBjaCA9PSAnaCcgfHwg
Y2ggPT0gJ3gnfHwgY2ggPT0gJ0UnKSAKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsRmxv
YXRDb25zdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgY2gsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisJCQkJY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJ
CQkJeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9J
TlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJY2ggPSAnMCc7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guLi4KKyAgICAgICAg
Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUn
OiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobGVuID4gMCB8fCBjaCAhPSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAg
ICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcg
JiYgY2ggPD0gJzknKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8
IGNoID09ICdmJyB8fCBjaCA9PSAnaCcgfHwgY2ggPT0gJ3gnfHwgY2ggPT0gJ0UnKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVu
LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5
eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOworICAg
ICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGxlbjsgaWkrKykgeworICAgICAgICAgICAg
ICAgICAgICBjaCA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwgKGl2YWwgPT0gMjE0NzQ4MzY0ICYm
IGNoID49IDgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFp
bmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9S
X19fSU5URUdFUl9DT05TVF9PVkVSRkxPVyIpOworICAgICAgICAgICAgICAgICAgICAgICAgQWxy
ZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGl2YWwgPSBpdmFsKjEwICsgY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIGlmKGl2YWw9
PTApCisgICAgICAgICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiMCIp
OworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgaWYgKGNoID09ICctJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
REVDX09QOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX1NVQl9BU1NJR047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnLSc7CisgICAgICAgICAgICB9
CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9
PSAnKycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOQ19PUDsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BRERf
QVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJysnOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcqJzoK
KyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9NVUxfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyonOworICAgICAgICAgICAg
fQorICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2gg
PT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9NT0RfQVNTSUdOOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPicpeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
UklHSFRfQlJBQ0U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgIHJldHVybiAnJSc7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
JzonOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX0JSQUNLRVQ7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnOic7CisgICAg
ICAgICAgICB9CisgICAgICAgIGNhc2UgJ14nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
IGlmIChjaCA9PSAnXicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9PUDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9YT1JfQVNTSUdOOworICAgICAgICAgICAgICAgIGVs
c2V7CisgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAnXic7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2Fz
ZSAnPSc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfRVFfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnPSc7CisgICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgJyEnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChj
aCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX05FX09QOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyEnOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICBpZiAoY2ggPT0gJ3wnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9P
Ul9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9
JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9PUl9BU1NJR047CisgICAgICAgICAg
ICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgcmV0
dXJuICd8JzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
JyYnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnJicpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0FORF9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09ICc9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9BTkRfQVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAnJic7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBp
ZihjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9BU1NJR047
CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9PUDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRV9PUDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJyUnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9MRUZUX0JSQUNFOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChjaCA9PSAnOicpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJB
Q0tFVDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAn
Pic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYoY2ggPT0gJz0nKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNlewor
ICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9S
SUdIVF9PUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9HRV9PUDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc+JzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwg
MCwgJy4nLCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChjaCA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVj
aWFsIEVPRiBoYWNrCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICBpZiAoY2ggPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2gg
IT0gRU9GKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuICdcbic7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNoID09ICcqJykgeworICAgICAgICAgICAgICAgIGludCBubGNvdW50ID0g
MDsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKGNoICE9ICcqJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID09ICdcbicpIG5sY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
RVJST1JfX19FT0ZfSU5fQ09NTUVOVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ggPSBj
cHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09IEVPRikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRU9GX0lOX0NPTU1FTlQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICcvJyk7CisgICAgICAgICAgICAgICAgaWYgKG5sY291
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcbic7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIEdvIHRyeSBpdCBhZ2Fpbi4uLgorICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0RJVl9BU1NJ
R047CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAg
ICAgICAgIHJldHVybiAnLyc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgd2hpbGUgKGNoICE9
ICciJyAmJiBjaCAhPSAnXG4nICYmIGNoICE9IEVPRikgeworICAgICAgICAgICAgICAgIGlmIChj
aCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJUaGUg
bGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhlIE9wZW5H
TCBFUyBTaGFkaW5nIExhbmd1YWdlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdf
TEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IGNoOworICAgICAg
ICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gJ1ww
JzsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX1NUUkNPTlNUQU5UOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19DUFBfRU9MX0lOX1NU
UklORyIpOworICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9TWTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30gLy8gYnl0ZV9zY2FuCisKK2ludCB5eWxleF9DUFAoY2hhciog
YnVmLCBpbnQgbWF4U2l6ZSkKK3sgICAgCisJeXlzdHlwZXBwIHl5bHZhbHBwOworICAgIGludCB0
b2tlbiA9ICdcbic7ICAgCisKKyAgICBmb3IoOzspIHsKKworICAgICAgICBjaGFyKiB0b2tlblN0
cmluZyA9IDA7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsICZ5eWx2YWxwcCk7CisJCWlmKGNoZWNrX0VPRih0b2tlbikpCisJCSAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKHRva2VuID09ICcjJykgeworICAgICAgICAgICAgaWYgKGNw
cC0+cHJldmlvdXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gMCkgewor
CQkJICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBp
ZihjaGVja19FT0YodG9rZW4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJCSAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coInByZXByb2Nlc3NvciBjb21tYW5kIG11c3Qgbm90IGJlIHByZWNlZGVkIGJ5
IGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhhdCBsaW5lIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY3BwLT5wcmV2aW91c190
b2tlbiA9IHRva2VuOworICAgICAgICAvLyBleHBhbmQgbWFjcm9zCisgICAgICAgIGlmICh0b2tl
biA9PSBDUFBfSURFTlRJRklFUiAmJiBNYWNyb0V4cGFuZCh5eWx2YWxwcC5zY19pZGVudCwgJnl5
bHZhbHBwKSkgeworICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0b2tl
biA9PSAnXG4nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIGlm
ICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0g
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC5zY19pZGVudCk7CisgICAgICAgIH0gZWxz
ZSBpZiAodG9rZW4gPT0gQ1BQX0ZMT0FUQ09OU1RBTlR8fHRva2VuID09IENQUF9JTlRDT05TVEFO
VCl7ICAgICAgICAgICAgIAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAx
OyAgICAgICAgICAgIAorICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSB5eWx2YWxwcC5zeW1ib2xf
bmFtZTsKKwkJfSBlbHNlIHsgICAgICAgICAgICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0
U3RhdGVtZW50ID0gMTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0gR2V0
U3RyaW5nT2ZBdG9tKGF0YWJsZSx0b2tlbik7CisJICAgIH0KKworICAgICAgICBpZiAodG9rZW5T
dHJpbmcpIHsKKyAgICAgICAgICAgIGlmICgoc2lnbmVkKXN0cmxlbih0b2tlblN0cmluZykgPj0g
bWF4U2l6ZSkgeworICAgICAgICAgICAgICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWF4U2l6ZTsgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0gZWxzZSAgaWYgKHN0cmxlbih0b2tlblN0cmluZykgPiAwKSB7CisJCQkgICAgc3RyY3B5KGJ1
ZiwgdG9rZW5TdHJpbmcpOworICAgICAgICAgICAgICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0g
MTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludClzdHJsZW4odG9rZW5TdHJpbmcpOworICAg
ICAgICAgICAgfSAgCisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9IC8vIHl5bGV4CisKKy8vQ2hlY2tzIGlmIHRoZSB0b2tlbiBqdXN0
IHJlYWQgaXMgRU9GIG9yIG5vdC4KK2ludCBjaGVja19FT0YoaW50IHRva2VuKQoreworICAgaWYo
dG9rZW49PS0xKXsKKyAgICAgICBpZihjcHAtPmlmZGVwdGggPjApeworCQlDUFBFcnJvclRvSW5m
b0xvZygiI2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9wcGVkIik7CisgICAgICAgIGNw
cC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgfQorICAgICAgcmV0dXJuIDE7CisgICB9CisgICBy
ZXR1cm4gMDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2Ygc2Nhbm5lci5jIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NjYW5uZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0
aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlm
aWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3Rp
dHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0
aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVk
aXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1Ympl
Y3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNs
dXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5h
bCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJv
ZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGgg
b3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7
IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5
b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3Rp
Y2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJl
ZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwg
dHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlv
biBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBu
b3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBh
cmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0
byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0
aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJl
IG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIu
IAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIg
QkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlU
SEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNI
QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNF
IEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIK
K1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkg
U1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElO
IEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQv
T1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBB
TkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEg
SEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8vCisvLyBzY2FubmVyLmgKKy8vCisKKyNpZiAhZGVmaW5lZChf
X1NDQU5ORVJfSCkKKyNkZWZpbmUgX19TQ0FOTkVSX0ggMQorCisjZGVmaW5lIE1BWF9TWU1CT0xf
TkFNRV9MRU4gMTI4CisjZGVmaW5lIE1BWF9TVFJJTkdfTEVOIDUxMgorCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgorCisvLyBOb3QgcmVhbGx5IGF0b20gdGFibGUg
c3R1ZmYgYnV0IG5lZWRlZCBmaXJzdC4uLgorCit0eXBlZGVmIHN0cnVjdCBTb3VyY2VMb2NfUmVj
IHsKKyAgICB1bnNpZ25lZCBzaG9ydCBmaWxlLCBsaW5lOworfSBTb3VyY2VMb2M7CisKK2ludCB5
eXBhcnNlICh2b2lkKTsKKworaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKTsK
KwordHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgeworICAgIHN0cnVjdCBJbnB1dFNyYwkqcHJldjsK
KyAgICBpbnQJCQkoKnNjYW4pKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7CisgICAg
aW50CQkJKCpnZXRjaCkoc3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKKyAgICB2b2lk
CQkoKnVuZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKTsKKyAgICBp
bnQJCQluYW1lOyAgLyogYXRvbSAqLworICAgIGludAkJCWxpbmU7Cit9IElucHV0U3JjOworCitp
bnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNj
YW5uZXIuIAoraW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKik7ICAgICAgLy8gU3RhcnQgc2Nhbm5p
bmcgdGhlIGlucHV0IGZyb20gdGhlIHN0cmluZyBtZW50aW9uZWQuCitpbnQgY2hlY2tfRU9GKGlu
dCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCit2b2lk
IENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGlu
dG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCit2b2lkIFNldExpbmVOdW1iZXIoaW50KTsKK3ZvaWQg
U2V0U3RyaW5nTnVtYmVyKGludCk7Cit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Cit2b2lkIERl
Y0xpbmVOdW1iZXIodm9pZCk7CitpbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAgICAgICAg
ICAvLyBGcmVlIHRoZSBjcHAgc2Nhbm5lcgorI2VuZGlmIC8vICEoZGVmaW5lZChfX1NDQU5ORVJf
SCkKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2Fy
ZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3Ig
cmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2Vw
dGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rl
cm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0
aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNl
IHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNl
bnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNv
ZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlm
eSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0
aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3Jl
dGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlv
bnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3Ms
IHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9t
IE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBv
dGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQg
YnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVu
dCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mg
b3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2lu
Y29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5W
SURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRI
T1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT
IE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFU
SU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4K
KworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO
RElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitP
VVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJV
VElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIg
VU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBT
VFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvLworLy8gc2xnbG9iYWxzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1NMR0xPQkFM
U19IKQorI2RlZmluZSBfX1NMR0xPQkFMU19IIDEKKwordHlwZWRlZiBzdHJ1Y3QgQ1BQU3RydWN0
X1JlYyBDUFBTdHJ1Y3Q7CisKK2V4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKKworI3VuZGVmICBDUFBD
X0RFQlVHX1RIRV9DT01QSUxFUgorI2lmIGRlZmluZWQoX0RFQlVHKQorI2RlZmluZSBDUFBDX0RF
QlVHX1RIRV9DT01QSUxFUiAxCisjZW5kaWYKKworI3VuZGVmICBDUFBDX0VOQUJMRV9UT09MUwor
I2RlZmluZSBDUFBDX0VOQUJMRV9UT09MUyAxCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvbWVtb3J5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCIK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIgorI2lmICFkZWZpbmVk
KE5PX1BBUlNFUikKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisj
ZW5kaWYKKworI2lmICFkZWZpbmVkKE5VTEwpCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKyNl
bmRpZiAvLyAhKGRlZmluZWQoX19TTEdMT0JBTFNfSCkKKworCisgICAgCisKSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjg5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitD
b3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0
aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1
c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlz
IE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4g
IElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNl
LCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4K
KworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMg
eW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNv
cHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBT
b2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhl
CitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3Vy
Y2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0
ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90
aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRp
c2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3
YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9n
b3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4
cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNl
cworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNs
dWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBp
bmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3
aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2Fy
ZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5H
IFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElO
RyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwK
K05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElO
IENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBO
VklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBF
WEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RV
Q1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNP
RlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJB
Q1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RI
RVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzeW1ib2xz
LmMKKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFs
cy5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3ltYm9sIFRhYmxlIFZhcmlhYmxlczogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKK1Njb3BlICpTY29wZUxpc3QgPSBOVUxMOworU2NvcGUgKkN1cnJlbnRT
Y29wZSA9IE5VTEw7CitTY29wZSAqR2xvYmFsU2NvcGUgPSBOVUxMOworCitzdGF0aWMgdm9pZCB1
bmxpbmtTY29wZSh2b2lkICpfc2NvcGUpIHsKKyAgICBTY29wZSAqc2NvcGUgPSBfc2NvcGU7CisK
KyAgICBpZiAoc2NvcGUtPm5leHQpCisgICAgICAgIHNjb3BlLT5uZXh0LT5wcmV2ID0gc2NvcGUt
PnByZXY7CisgICAgaWYgKHNjb3BlLT5wcmV2KQorICAgICAgICBzY29wZS0+cHJldi0+bmV4dCA9
IHNjb3BlLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgU2NvcGVMaXN0ID0gc2NvcGUtPm5leHQ7
Cit9CisKKy8qCisgKiBOZXdTY29wZSgpCisgKgorICovCitTY29wZSAqTmV3U2NvcGVJblBvb2wo
TWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBTY29wZSAqbFNjb3BlOworCisgICAgbFNjb3BlID0g
bWVtX0FsbG9jKHBvb2wsIHNpemVvZihTY29wZSkpOworICAgIGxTY29wZS0+cG9vbCA9IHBvb2w7
CisgICAgbFNjb3BlLT5wYXJlbnQgPSBOVUxMOworICAgIGxTY29wZS0+ZnVuU2NvcGUgPSBOVUxM
OworICAgIGxTY29wZS0+c3ltYm9scyA9IE5VTEw7CisgICAgCisgICAgbFNjb3BlLT5sZXZlbCA9
IDA7CisKKyAgICBsU2NvcGUtPnByb2dyYW1zID0gTlVMTDsKKyAgICBpZiAoKGxTY29wZS0+bmV4
dCA9IFNjb3BlTGlzdCkpCisgICAgICAgIFNjb3BlTGlzdC0+cHJldiA9IGxTY29wZTsKKyAgICBs
U2NvcGUtPnByZXYgPSAwOworICAgIFNjb3BlTGlzdCA9IGxTY29wZTsKKyAgICBtZW1fQWRkQ2xl
YW51cChwb29sLCB1bmxpbmtTY29wZSwgbFNjb3BlKTsKKyAgICByZXR1cm4gbFNjb3BlOworfSAv
LyBOZXdTY29wZQorCisvKgorICogUHVzaFNjb3BlKCkKKyAqCisgKi8KKwordm9pZCBQdXNoU2Nv
cGUoU2NvcGUgKmZTY29wZSkKK3sKKyAgICBTY29wZSAqbFNjb3BlOworCisgICAgaWYgKEN1cnJl
bnRTY29wZSkgeworICAgICAgICBmU2NvcGUtPmxldmVsID0gQ3VycmVudFNjb3BlLT5sZXZlbCAr
IDE7CisgICAgICAgIGlmIChmU2NvcGUtPmxldmVsID09IDEpIHsKKyAgICAgICAgICAgIGlmICgh
R2xvYmFsU2NvcGUpIHsKKyAgICAgICAgICAgICAgICAvKiBIQUNLIC0gQ1REIC0tIGlmIEdsb2Jh
bFNjb3BlPT1OVUxMIGFuZCBsZXZlbD09MSwgd2UncmUKKyAgICAgICAgICAgICAgICAgKiBkZWZp
bmluZyBhIGZ1bmN0aW9uIGluIHRoZSBzdXBlcmdsb2JhbCBzY29wZS4gIFRoaW5ncworICAgICAg
ICAgICAgICAgICAqIHdpbGwgYnJlYWsgaWYgd2UgbGVhdmUgdGhlIGxldmVsIGFzIDEsIHNvIHdl
IGFyYml0cmFyaWx5CisgICAgICAgICAgICAgICAgICogc2V0IGl0IHRvIDIgKi8KKyAgICAgICAg
ICAgICAgICBmU2NvcGUtPmxldmVsID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAoZlNjb3BlLT5sZXZlbCA+PSAyKSB7CisgICAgICAgICAgICBsU2NvcGUgPSBmU2Nv
cGU7CisgICAgICAgICAgICB3aGlsZSAobFNjb3BlLT5sZXZlbCA+IDIpCisgICAgICAgICAgICAg
ICAgbFNjb3BlID0gbFNjb3BlLT5uZXh0OworICAgICAgICAgICAgZlNjb3BlLT5mdW5TY29wZSA9
IGxTY29wZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZTY29wZS0+bGV2ZWwg
PSAwOworICAgIH0KKyAgICBmU2NvcGUtPnBhcmVudCA9IEN1cnJlbnRTY29wZTsKKyAgICBDdXJy
ZW50U2NvcGUgPSBmU2NvcGU7Cit9IC8vIFB1c2hTY29wZQorCisvKgorICogUG9wU2NvcGUoKQor
ICoKKyAqLworCitTY29wZSAqUG9wU2NvcGUodm9pZCkKK3sKKyAgICBTY29wZSAqbFNjb3BlOwor
CisgICAgbFNjb3BlID0gQ3VycmVudFNjb3BlOworICAgIGlmIChDdXJyZW50U2NvcGUpCisgICAg
ICAgIEN1cnJlbnRTY29wZSA9IEN1cnJlbnRTY29wZS0+cGFyZW50OworICAgIHJldHVybiBsU2Nv
cGU7Cit9IC8vIFBvcFNjb3BlCisKKy8qCisgKiBOZXdTeW1ib2woKSAtIEFsbG9jYXRlIGEgbmV3
IHN5bWJvbCBub2RlOworICoKKyAqLworCitTeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxv
YywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCkKK3sKKyAgICBTeW1i
b2wgKmxTeW1iOworICAgIGNoYXIgKnBjaDsKKyAgICBpbnQgaWk7CisKKyAgICBsU3ltYiA9IChT
eW1ib2wgKikgbWVtX0FsbG9jKGZTY29wZS0+cG9vbCwgc2l6ZW9mKFN5bWJvbCkpOworICAgIGxT
eW1iLT5sZWZ0ID0gTlVMTDsKKyAgICBsU3ltYi0+cmlnaHQgPSBOVUxMOworICAgIGxTeW1iLT5u
ZXh0ID0gTlVMTDsKKyAgICBsU3ltYi0+bmFtZSA9IG5hbWU7CisgICAgbFN5bWItPmxvYyA9ICps
b2M7CisgICAgbFN5bWItPmtpbmQgPSBraW5kOworICAgIAorICAgIC8vIENsZWFyIHVuaW9uIGFy
ZWE6CisKKyAgICBwY2ggPSAoY2hhciAqKSAmbFN5bWItPmRldGFpbHM7CisgICAgZm9yIChpaSA9
IDA7IGlpIDwgc2l6ZW9mKGxTeW1iLT5kZXRhaWxzKTsgaWkrKykKKyAgICAgICAgKnBjaCsrID0g
MDsKKyAgICByZXR1cm4gbFN5bWI7Cit9IC8vIE5ld1N5bWJvbAorCisvKgorICogbEFkZFRvVHJl
ZSgpIC0gVXNpbmcgYSBiaW5hcnkgdHJlZSBpcyBub3QgYSBnb29kIGlkZWEgZm9yIGJhc2ljIGF0
b20gdmFsdWVzIGJlY2F1c2UgdGhleQorICogICAgICAgICBhcmUgZ2VuZXJhdGVkIGluIG9yZGVy
LiAgV2UnbGwgZml4IHRoaXMgbGF0ZXIgKGJ5IHJldmVyc2luZyB0aGUgYml0IHBhdHRlcm4pLgor
ICovCisKK3N0YXRpYyB2b2lkIGxBZGRUb1RyZWUoU3ltYm9sICoqZlN5bWJvbHMsIFN5bWJvbCAq
ZlN5bWIpCit7CisgICAgU3ltYm9sICpsU3ltYjsKKyAgICBpbnQgbHJldiwgZnJldjsKKworICAg
IGxTeW1iID0gKmZTeW1ib2xzOworICAgIGlmIChsU3ltYikgeworICAgICAgICBmcmV2ID0gR2V0
UmV2ZXJzZWRBdG9tKGF0YWJsZSwgZlN5bWItPm5hbWUpOworICAgICAgICB3aGlsZSAobFN5bWIp
IHsKKyAgICAgICAgICAgIGxyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFt
ZSk7CisgICAgICAgICAgICBpZiAobHJldiA9PSBmcmV2KSB7CisgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIkdldEF0b21TdHJpbmcoYXRhYmxlLCBmU3ltYi0+bmFtZSkiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGxyZXYgPiBmcmV2KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsU3ltYi0+bGVm
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+bGVmdDsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1iLT5s
ZWZ0ID0gZlN5bWI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChsU3ltYi0+cmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5
bWItPnJpZ2h0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbFN5bWItPnJpZ2h0ID0gZlN5bWI7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICpmU3ltYm9scyA9IGZTeW1i
OworICAgIH0KK30gLy8gbEFkZFRvVHJlZQorCisKKy8qCisgKiBBZGRTeW1ib2woKSAtIEFkZCBh
IHZhcmlhYmxlLCB0eXBlLCBvciBmdW5jdGlvbiBuYW1lIHRvIGEgc2NvcGUuCisgKgorICovCisK
K1N5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRv
bSwgc3ltYm9sa2luZCBraW5kKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisKKyAgICBpZiAoIWZT
Y29wZSkKKyAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOworICAgIGxTeW1iID0gTmV3U3lt
Ym9sKGxvYywgZlNjb3BlLCBhdG9tLCBraW5kKTsKKyAgICBsQWRkVG9UcmVlKCZmU2NvcGUtPnN5
bWJvbHMsIGxTeW1iKTsKKyAgICByZXR1cm4gbFN5bWI7Cit9IC8vIEFkZFN5bWJvbAorCisKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqIFN5bWJvbCBTZW1hbnRpYyBGdW5jdGlvbnMgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKworLyoKKyAqIExvb2tVcExvY2FsU3ltYm9sKCkKKyAqCisgKi8KKworU3ltYm9sICpMb29r
VXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKK3sKKyAgICBTeW1ib2wgKmxT
eW1iOworICAgIGludCBybmFtZSwgcmF0b207CisKKyAgICByYXRvbSA9IEdldFJldmVyc2VkQXRv
bShhdGFibGUsIGF0b20pOworICAgIGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBDdXJy
ZW50U2NvcGU7CisgICAgbFN5bWIgPSBmU2NvcGUtPnN5bWJvbHM7CisgICAgd2hpbGUgKGxTeW1i
KSB7CisgICAgICAgIHJuYW1lID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgbFN5bWItPm5hbWUp
OworICAgICAgICBpZiAocm5hbWUgPT0gcmF0b20pIHsKKyAgICAgICAgICAgIHJldHVybiBsU3lt
YjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChybmFtZSA+IHJhdG9tKSB7Cisg
ICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+bGVmdDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9IC8vIExvb2tVcExvY2FsU3ltYm9s
CisKKy8qCisgKiBMb29rVXBTeW1ib2woKQorICoKKyAqLworCitTeW1ib2wgKkxvb2tVcFN5bWJv
bChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKK3sKKyAgICBTeW1ib2wgKmxTeW1iOworCisgICAg
aWYgKCFmU2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICB3aGlsZSAo
ZlNjb3BlKSB7CisgICAgICAgIGxTeW1iID0gTG9va1VwTG9jYWxTeW1ib2woZlNjb3BlLCBhdG9t
KTsKKyAgICAgICAgaWYgKGxTeW1iKQorICAgICAgICAgICAgcmV0dXJuIGxTeW1iOworICAgICAg
ICBmU2NvcGUgPSBmU2NvcGUtPnBhcmVudDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9IC8v
IExvb2tVcFN5bWJvbAorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBz
b2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRp
b24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVz
IGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhl
c2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRv
IHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZl
CitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJ
RElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2Us
IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92
aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11
c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3Ry
aWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRl
bWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUK
K05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
biBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNl
LCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdy
YW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55
IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQor
d29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkg
YmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKwor
VEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF
WFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQg
T1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9E
VUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkg
V0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJ
U1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdI
RVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvLworLy8gc3ltYm9scy5oCisvLworCisjaWYgIWRlZmluZWQoX19TWU1C
T0xTX0gpCisjZGVmaW5lIF9fU1lNQk9MU19IIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuaCIKKwordHlwZWRlZiBlbnVtIHN5bWJvbGtpbmQgeworICAgTUFDUk9f
UworfSBzeW1ib2xraW5kOworCisvLyBUeXBlZGVmcyBmb3IgdGhpbmdzIGRlZmluZWQgaGVyZSBp
biAic3ltYm9scy5oIjoKKwordHlwZWRlZiBzdHJ1Y3QgU2NvcGVfUmVjIFNjb3BlOwordHlwZWRl
ZiBzdHJ1Y3QgU3ltYm9sX1JlYyBTeW1ib2w7CisKK3R5cGVkZWYgc3RydWN0IFN5bWJvbExpc3Rf
UmVjIHsKKyAgICBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgKm5leHQ7CisgICAgU3ltYm9sICpzeW1i
OworfSBTeW1ib2xMaXN0OworCitzdHJ1Y3QgU2NvcGVfUmVjIHsKKyAgICBTY29wZSAqbmV4dCwg
KnByZXY7ICAgICAvLyBkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIHNjb3BlcworICAgIFNjb3Bl
ICpwYXJlbnQ7CisgICAgU2NvcGUgKmZ1blNjb3BlOyAgICAgICAgLy8gUG9pbnRzIHRvIGJhc2Ug
c2NvcGUgb2YgZW5jbG9zaW5nIGZ1bmN0aW9uCisgICAgTWVtb3J5UG9vbCAqcG9vbDsgICAgICAg
Ly8gcG9vbCB1c2VkIGZvciBhbGxvY2F0aW9uIGluIHRoaXMgc2NvcGUKKyAgICBTeW1ib2wgKnN5
bWJvbHM7CisgICAgCisJaW50IGxldmVsOyAgICAgICAgICAgICAgLy8gMCA9IHN1cGVyIGdsb2Jh
bHMsIDEgPSBnbG9iYWxzLCBldGMuCisKKyAgICAvLyBPbmx5IHVzZWQgYXQgZ2xvYmFsIHNjb3Bl
IChsZXZlbCAxKToKKyAgICBTeW1ib2xMaXN0ICpwcm9ncmFtczsgICAvLyBMaXN0IG9mIHByb2dy
YW1zIGZvciB0aGlzIGNvbXBpbGF0aW9uLgorfTsKKworCisvLyBTeW1ib2wgdGFibGUgaXMgYSBz
aW1wbGUgYmluYXJ5IHRyZWUuCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgiICAgICAgICAvLyB0byBnZXQgTWFjcm9TeW1ib2wgZGVmCisKK3N0cnVjdCBTeW1ib2xfUmVj
IHsKKyAgICBTeW1ib2wgKmxlZnQsICpyaWdodDsKKyAgICBTeW1ib2wgKm5leHQ7CisgICAgaW50
IG5hbWU7ICAgICAgIC8vIE5hbWUgYXRvbQorICAgIFNvdXJjZUxvYyBsb2M7CisgICAgc3ltYm9s
a2luZCBraW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgTWFjcm9TeW1ib2wgbWFjOworICAgIH0g
ZGV0YWlsczsKK307CisKK2V4dGVybiBTY29wZSAqQ3VycmVudFNjb3BlOworZXh0ZXJuIFNjb3Bl
ICpHbG9iYWxTY29wZTsKK2V4dGVybiBTY29wZSAqU2NvcGVMaXN0OworCitTY29wZSAqTmV3U2Nv
cGVJblBvb2woTWVtb3J5UG9vbCAqKTsKKyNkZWZpbmUgTmV3U2NvcGUoKSAgICAgIE5ld1Njb3Bl
SW5Qb29sKEN1cnJlbnRTY29wZS0+cG9vbCkKK3ZvaWQgUHVzaFNjb3BlKFNjb3BlICpmU2NvcGUp
OworU2NvcGUgKlBvcFNjb3BlKHZvaWQpOworU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICps
b2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpOworU3ltYm9sICpB
ZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xr
aW5kIGtpbmQpOworU3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQg
YXRvbSk7CitTeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Cit2
b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7CisKKworI2VuZGlmIC8vICFkZWZpbmVkKF9f
U1lNQk9MU19IKQorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2Fy
ZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3Ig
cmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2Vw
dGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rl
cm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0
aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNl
IHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNl
bnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNv
ZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlm
eSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0
aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3Jl
dGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlv
bnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3Ms
IHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9t
IE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBv
dGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQg
YnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVu
dCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mg
b3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2lu
Y29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5W
SURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRI
T1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT
IE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFU
SU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4K
KworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO
RElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitP
VVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJV
VElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIg
VU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBT
VFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvLworLy8gdG9rZW5zLmMKKy8vCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisK
KyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zbGdsb2JhbHMuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5kIFRva2VuIFJlY29y
ZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKgorICogaWRzdHIoKQorICogQ29weSBhIHN0
cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRvIHNvbWV0aGluZyBz
dWl0YWJsZQorICogZm9yIGFuIElECisgKgorICovCisKK3N0YXRpYyBjaGFyICppZHN0cihjb25z
dCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQoreworICAgIHNpemVfdCBsZW47CisgICAg
Y2hhciAqc3RyLCAqdDsKKyAgICBjb25zdCBjaGFyICpmOworCisgICAgbGVuID0gc3RybGVuKGZz
dHIpOworICAgIGlmICghcG9vbCkKKyAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9jKGxlbiAr
IDEpOworICAgIGVsc2UKKyAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0FsbG9jKHBvb2wsIGxl
biArIDEpOworICAgIAorICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYrKykgeworICAgICAg
ICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKKyAgICAgICAgZWxzZSBpZiAoKmYgPT0gJy4n
IHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKKyAgICB9CisgICAgKnQgPSAwOworICAgIHJldHVy
biBzdHI7Cit9IC8vIGlkc3RyCisKKworLyoKKyAqIGxOZXdCbG9jaygpCisgKgorICovCisKK3N0
YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ssIE1lbW9yeVBvb2wg
KnBvb2wpCit7CisgICAgVG9rZW5CbG9jayAqbEJsb2NrOworCisgICAgaWYgKCFwb29sKQorICAg
ICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRva2VuQmxvY2spICsg
MjU2KTsKKyAgICBlbHNlCisgICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2NrICopIG1lbV9BbGxv
Yyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOworICAgIGxCbG9jay0+Y291bnQgPSAw
OworICAgIGxCbG9jay0+Y3VycmVudCA9IDA7CisgICAgbEJsb2NrLT5kYXRhID0gKHVuc2lnbmVk
IGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOworICAgIGxCbG9jay0+bWF4ID0g
MjU2OworICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7CisgICAgaWYgKGZUb2stPmhlYWQpIHsKKyAg
ICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKKyAgICB9IGVsc2UgeworICAgICAg
ICBmVG9rLT5oZWFkID0gbEJsb2NrOworICAgIH0KKyAgICBmVG9rLT5jdXJyZW50ID0gbEJsb2Nr
OworICAgIHJldHVybiBsQmxvY2s7Cit9IC8vIGxOZXdCbG9jaworCisvKgorICogbEFkZEJ5dGUo
KQorICoKKyAqLworCitzdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVhbSAqZlRvaywgdW5z
aWduZWQgY2hhciBmVmFsKQoreworICAgIFRva2VuQmxvY2sgKmxCbG9jazsKKyAgICBsQmxvY2sg
PSBmVG9rLT5jdXJyZW50OworICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxCbG9jay0+bWF4KQor
ICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywgMCk7CisgICAgbEJsb2NrLT5kYXRhW2xC
bG9jay0+Y291bnQrK10gPSBmVmFsOworfSAvLyBsQWRkQnl0ZQorCisKKworLyoKKyAqIGxSZWFk
Qnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KKyAqCisgKi8KKworc3Rh
dGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCit7CisgICAgVG9rZW5CbG9jayAq
bEJsb2NrOworICAgIGludCBsdmFsID0gLTE7CisKKyAgICBsQmxvY2sgPSBwVG9rLT5jdXJyZW50
OworICAgIGlmIChsQmxvY2spIHsKKyAgICAgICAgaWYgKGxCbG9jay0+Y3VycmVudCA+PSBsQmxv
Y2stPmNvdW50KSB7CisgICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5leHQ7CisgICAgICAg
ICAgICBpZiAobEJsb2NrKQorICAgICAgICAgICAgICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Cisg
ICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2NrOworICAgICAgICB9CisgICAgICAgIGlm
IChsQmxvY2spCisgICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xCbG9jay0+Y3VycmVu
dCsrXTsKKyAgICB9CisgICAgcmV0dXJuIGx2YWw7Cit9IC8vIGxSZWFkQnl0ZQorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0aW9uczovLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKgorICogTmV3VG9rZW5TdHJlYW0o
KQorICoKKyAqLworCitUb2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFt
ZSwgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBUb2tlblN0cmVhbSAqcFRvazsKKworICAgIGlm
ICghcG9vbCkKKyAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxsb2Moc2l6ZW9mKFRv
a2VuU3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICBwVG9rID0gKFRva2VuU3RyZWFtKiltZW1f
QWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7CisgICAgcFRvay0+bmV4dCA9IE5VTEw7
CisgICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOworICAgIHBUb2stPmhlYWQgPSBO
VUxMOworICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOworICAgIGxOZXdCbG9jayhwVG9rLCBwb29s
KTsKKyAgICByZXR1cm4gcFRvazsKK30gLy8gTmV3VG9rZW5TdHJlYW0KKworLyoKKyAqIERlbGV0
ZVRva2VuU3RyZWFtKCkKKyAqCisgKi8KKwordm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0
cmVhbSAqcFRvaykKK3sKKyAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxvY2s7CisKKyAgICBp
ZiAocFRvaykgeworICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOworICAgICAgICB3aGlsZSAo
cEJsb2NrKSB7CisgICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7CisgICAgICAgICAg
ICBmcmVlKHBCbG9jayk7CisgICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBUb2stPm5hbWUpCisgICAgICAgICAgICBmcmVlKHBUb2stPm5hbWUpOwor
ICAgICAgICBmcmVlKHBUb2spOworICAgIH0KK30gLy8gRGVsZXRlVG9rZW5TdHJlYW0KKworLyoK
KyAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9mIGEgbGlzdCBmb3Ig
bGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCisgKgorICovCisKK3ZvaWQgUmVjb3JkVG9rZW4o
VG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApCit7Cisg
ICAgY29uc3QgY2hhciAqczsKKyAgICB1bnNpZ25lZCBjaGFyICpzdHI9TlVMTDsKKworICAgIGlm
ICh0b2tlbiA+IDI1NikKKyAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKCh0
b2tlbiAmIDB4N2YpICsgMHg4MCkpOworICAgIGVsc2UKKyAgICAgICAgbEFkZEJ5dGUocFRvaywg
KHVuc2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICBjYXNlIENQUF9JREVOVElGSUVSOgorICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgorICAg
IGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFibGUs
IHl5bHZhbHBwLT5zY19pZGVudCk7CisgICAgICAgIHdoaWxlICgqcykKKyAgICAgICAgICAgIGxB
ZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysrKTsKKyAgICAgICAgbEFkZEJ5dGUocFRv
aywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CisgICAg
Y2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9uYW1l
OworICAgICAgICAgd2hpbGUgKCpzdHIpeworICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywodW5z
aWduZWQgY2hhcikgKnN0cik7CisgICAgICAgICAgICAqc3RyKys7CisgICAgICAgICB9CisgICAg
ICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKKyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgJygnOgor
ICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoeXlsdmFscHAtPnNjX2ludCA/
IDEgOiAwKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfSAvLyBSZWNv
cmRUb2tlbgorCisvKgorICogUmV3aW5kVG9rZW5TdHJlYW0oKSAtIFJlc2V0IGEgdG9rZW4gc3Ry
ZWFtIGluIHByZXBlcmF0aW9uIGZvciByZWFkaW5nLgorICoKKyAqLworCit2b2lkIFJld2luZFRv
a2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIGlmIChwVG9rLT5oZWFkKSB7Cisg
ICAgICAgIHBUb2stPmN1cnJlbnQgPSBwVG9rLT5oZWFkOworICAgICAgICBwVG9rLT5jdXJyZW50
LT5jdXJyZW50ID0gMDsKKyAgICB9Cit9IC8vIFJld2luZFRva2VuU3RyZWFtCisKKy8qCisgKiBS
ZWFkVG9rZW4oKSAtIFJlYWQgdGhlIG5leHQgdG9rZW4gZnJvbSBhIHN0cmVhbS4KKyAqCisgKi8K
KworaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHAp
Cit7CisgICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07CisgICAg
Y2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CisgICAgaW50IGx0b2tlbiwgbGVu
OworICAgIGNoYXIgY2g7CisKKyAgICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7CisgICAgaWYg
KGx0b2tlbiA+PSAwKSB7CisgICAgICAgIGlmIChsdG9rZW4gPiAxMjcpCisgICAgICAgICAgICBs
dG9rZW4gKz0gMTI4OworICAgICAgICBzd2l0Y2ggKGx0b2tlbikgeworICAgICAgICBjYXNlIENQ
UF9JREVOVElGSUVSOgorICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAgICAgICAg
ICAgIGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAg
ICAgIHdoaWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwKKyAgICAgICAgICAgICAgICAg
ICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFN
RV9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAg
ICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5
dGUocFRvayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7
CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCBzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gQ1BQX0lERU5USUZJRVI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6CisgICAgICAgICAg
ICBsZW4gPSAwOworICAgICAgICAgICAgd2hpbGUgKChjaCA9IGxSZWFkQnl0ZShwVG9rKSkgIT0g
MCkKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NUUklOR19MRU4pCisgICAgICAgICAg
ICAgICAgICAgIHN0cmluZ192YWxbbGVuKytdID0gY2g7CisgICAgICAgICAgICBzdHJpbmdfdmFs
W2xlbl0gPSAwOworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBj
aCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNo
IDw9ICc5Jyl8fChjaD09J2UnfHxjaD09J0UnfHxjaD09Jy4nKXx8KGNoPT0nKyd8fGNoPT0nLScp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05B
TUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAg
ICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRC
eXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcp
OworICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7
CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfZnZhbD0oZmxvYXQpYXRvZih5eWx2YWxwcC0+c3lt
Ym9sX25hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX0lOVENPTlNU
QU5UOgorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBU
b2spOworICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikg
eworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAg
ICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9r
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKKyAgICAg
ICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOworICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGx0b2tlbjsKKyAgICB9CisgICAgcmV0dXJuIEVPRl9TWTsKK30gLy8g
UmVhZFRva2VuCisKK3R5cGVkZWYgc3RydWN0IFRva2VuSW5wdXRTcmMgeworICAgIElucHV0U3Jj
ICAgICAgICAgICAgYmFzZTsKKyAgICBUb2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7CisgICAg
aW50ICAgICAgICAgICAgICAgICAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Cit9IFRva2VuSW5wdXRT
cmM7CisKK3N0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlwZXBw
ICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMsIHl5
bHZhbHBwKTsKKyAgICBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopOworICAgIGNwcC0+dG9rZW5M
b2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICBjcHAtPnRva2VuTG9jLT5s
aW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgaWYgKHRva2VuID09ICdcbicpIHsK
KyAgICAgICAgaW4tPmJhc2UubGluZSsrOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQor
ICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9
IGluLT5iYXNlLnByZXY7CisgICAgZmluYWwgPSBpbi0+ZmluYWw7CisgICAgZnJlZShpbik7Cisg
ICAgaWYgKGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cit9CisKK2lu
dCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAoKmZp
bmFsKShDUFBTdHJ1Y3QgKikpCit7CisgICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6
ZW9mKFRva2VuSW5wdXRTcmMpKTsKKyAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklucHV0
U3JjKSk7CisgICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7CisgICAgaW4tPmJhc2UucHJldiA9IGNw
cC0+Y3VycmVudElucHV0OworICAgIGluLT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNyYyAq
LCB5eXN0eXBlcHAgKikpc2Nhbl90b2tlbjsKKyAgICBpbi0+YmFzZS5saW5lID0gMTsKKyAgICBp
bi0+dG9rZW5zID0gdHM7CisgICAgaW4tPmZpbmFsID0gZmluYWw7CisgICAgUmV3aW5kVG9rZW5T
dHJlYW0odHMpOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOworICAgIHJldHVy
biAxOworfQorCit0eXBlZGVmIHN0cnVjdCBVbmdvdFRva2VuIHsKKyAgICBJbnB1dFNyYyAgICBi
YXNlOworICAgIGludCAgICAgICAgIHRva2VuOworICAgIHl5c3R5cGVwcCAgICAgbHZhbDsKK30g
VW5nb3RUb2tlbjsKKworc3RhdGljIGludCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKKyAgICAqeXls
dmFscHAgPSB0LT5sdmFsOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2Owor
ICAgIGZyZWUodCk7CisgICAgcmV0dXJuIHRva2VuOworfQorCit2b2lkIFVuZ2V0VG9rZW4oaW50
IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIFVuZ290VG9rZW4gKnQgPSBtYWxs
b2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsKKyAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9r
ZW4pKTsKKyAgICB0LT50b2tlbiA9IHRva2VuOworICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7Cisg
ICAgdC0+YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90b2tlbjsKKyAgICB0LT5iYXNlLnByZXYg
PSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1
dC0+bmFtZTsKKyAgICB0LT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKKyAg
ICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOworfQorCisKK3ZvaWQgRHVtcFRva2VuU3Ry
ZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAg
ICBpbnQgdG9rZW47CisgICAgY2hhciBzdHJbMTAwXTsKKworICAgIGlmIChmcCA9PSAwKSBmcCA9
IHN0ZG91dDsKKyAgICBSZXdpbmRUb2tlblN0cmVhbShzKTsKKyAgICB3aGlsZSAoKHRva2VuID0g
UmVhZFRva2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7CisgICAgICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKKyAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5U
SUZJRVI6CisgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRh
YmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wiIiwg
R2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CisgICAgICAgICAgICAvL3By
aW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgorICAgICAgICAgICAgLy9wcmludGYoIiVkICIs
IHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQorICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlYyIsIHRva2VuKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CisgICAg
fQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiB0b2tlbnMuYyAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgor
CitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8vCisvLyB0b2tlbnMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCisj
ZGVmaW5lIF9fVE9LRU5TX0ggMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Bh
cnNlci5oIgorCisjZGVmaW5lIEVPRl9TWSAoLTEpCisKK3R5cGVkZWYgc3RydWN0IFRva2VuQmxv
Y2tfUmVjIFRva2VuQmxvY2s7CisKK3R5cGVkZWYgc3RydWN0IFRva2VuU3RyZWFtX1JlYyB7Cisg
ICAgc3RydWN0IFRva2VuU3RyZWFtX1JlYyAqbmV4dDsKKyAgICBjaGFyICpuYW1lOworICAgIFRv
a2VuQmxvY2sgKmhlYWQ7CisgICAgVG9rZW5CbG9jayAqY3VycmVudDsKK30gVG9rZW5TdHJlYW07
CisKK3N0cnVjdCBUb2tlbkJsb2NrX1JlYyB7CisgICAgVG9rZW5CbG9jayAqbmV4dDsKKyAgICBp
bnQgY3VycmVudDsKKyAgICBpbnQgY291bnQ7CisgICAgaW50IG1heDsKKyAgICB1bnNpZ25lZCBj
aGFyICpkYXRhOworfTsKKworZXh0ZXJuIFRva2VuU3RyZWFtIHN0ZGxpYl9jcHBfc3RyZWFtOwor
CisKK1Rva2VuU3RyZWFtICpOZXdUb2tlblN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQ
b29sICpwb29sKTsKK3ZvaWQgRGVsZXRlVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOyAK
K3ZvaWQgUmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBw
ICogeXlsdmFscHApOwordm9pZCBSZXdpbmRUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7
CitpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7
CitpbnQgUmVhZEZyb21Ub2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaywgaW50IG5hbWUsIGlu
dCAoKmZpbmFsKShDUFBTdHJ1Y3QgKikpOwordm9pZCBVbmdldFRva2VuKGludCwgeXlzdHlwZXBw
ICogeXlsdmFscHApOworCisjaWYgZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKKwordm9pZCBE
dW1wVG9rZW5TdHJlYW0oRklMRSAqLCBUb2tlblN0cmVhbSAqLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCk7CisKKyNlbmRpZiAvLyBkZWZpbmVkKENQUENfRU5BQkxFX1RPT0xTKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoX19UT0tFTlNfSCkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci90b29scy9DT1BZ
SU5HLmJpc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci90b29scy9DT1BZSU5H
LmJpc29uCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcu
Ymlzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQ
VUJMSUMgTElDRU5TRQ0KKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxDQorDQorIENvcHly
aWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwg
VVNBDQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJh
dGltIGNvcGllcw0KKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBp
cyBub3QgYWxsb3dlZC4NCisNCisJCQkgICAgUHJlYW1ibGUNCisNCisgIFRoZSBsaWNlbnNlcyBm
b3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXINCitmcmVlZG9t
IHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYw0KK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBz
aGFyZSBhbmQgY2hhbmdlIGZyZWUNCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2Fy
ZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcw0KK0dlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlDQorRm91bmRhdGlvbidzIHNv
ZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bw0K
K3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJl
IGlzIGNvdmVyZWQgYnkNCit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBp
bnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8NCit5b3VyIHByb2dyYW1zLCB0b28uDQorDQor
ICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJl
ZWRvbSwgbm90DQorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2ln
bmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQ0KK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0
ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3INCit0aGlzIHNlcnZpY2Ug
aWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQN
CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNl
IHBpZWNlcyBvZiBpdA0KK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5
b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4NCisNCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdl
IG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQNCithbnlvbmUgdG8gZGVueSB5
b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuDQor
VGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMg
Zm9yIHlvdSBpZiB5b3UNCitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlm
IHlvdSBtb2RpZnkgaXQuDQorDQorICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29w
aWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyDQorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91
IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0DQoreW91IGhhdmUu
ICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0
aGUNCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28g
dGhleSBrbm93IHRoZWlyDQorcmlnaHRzLg0KKw0KKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3
aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZA0KKygyKSBvZmZl
ciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNv
cHksDQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4NCisNCisgIEFsc28s
IGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBj
ZXJ0YWluDQordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJh
bnR5IGZvciB0aGlzIGZyZWUNCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmll
ZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UNCit3YW50IGl0cyByZWNpcGllbnRz
IHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbw0KK3Ro
YXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24g
dGhlIG9yaWdpbmFsDQorYXV0aG9ycycgcmVwdXRhdGlvbnMuDQorDQorICBGaW5hbGx5LCBhbnkg
ZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQ0KK3BhdGVu
dHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBh
IGZyZWUNCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMs
IGluIGVmZmVjdCBtYWtpbmcgdGhlDQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQg
dGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55DQorcGF0ZW50IG11c3QgYmUgbGlj
ZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4NCisN
CisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmli
dXRpb24gYW5kDQorbW9kaWZpY2F0aW9uIGZvbGxvdy4NCisMDQorCQkgICAgR05VIEdFTkVSQUwg
UFVCTElDIExJQ0VOU0UNCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElT
VFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04NCisNCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVz
IHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMNCithIG5vdGljZSBw
bGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRl
ZA0KK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUg
IlByb2dyYW0iLCBiZWxvdywNCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBh
bmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSINCittZWFucyBlaXRoZXIgdGhlIFByb2dy
YW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Og0KK3RoYXQgaXMg
dG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQs
DQorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRl
ZCBpbnRvIGFub3RoZXINCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMg
aW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluDQordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIu
KSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuDQorDQorQWN0aXZpdGllcyBv
dGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QN
Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBU
aGUgYWN0IG9mDQorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRo
ZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQ0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVu
dHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQg
b2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4NCitXaGV0aGVyIHRo
YXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4NCisNCisgIDEuIFlv
dSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0n
cw0KK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRl
ZCB0aGF0IHlvdQ0KK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBl
YWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUNCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVy
IG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlDQorbm90aWNlcyB0aGF0IHJlZmVyIHRv
IHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5Ow0KK2FuZCBn
aXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExp
Y2Vuc2UNCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLg0KKw0KK1lvdSBtYXkgY2hhcmdlIGEgZmVl
IGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZA0KK3lvdSBt
YXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBm
b3IgYSBmZWUuDQorDQorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9m
IHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uDQorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsg
YmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZA0KK2Rpc3RyaWJ1dGUgc3VjaCBtb2Rp
ZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQ0KK2Fib3ZlLCBw
cm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6DQorDQor
ICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5l
bnQgbm90aWNlcw0KKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0
aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLg0KKw0KKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29y
ayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4NCisgICAgd2hvbGUgb3Ig
aW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55DQor
ICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2Ug
dG8gYWxsIHRoaXJkDQorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5z
ZS4NCisNCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29t
bWFuZHMgaW50ZXJhY3RpdmVseQ0KKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdo
ZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoDQorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUg
bW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4NCisgICAgYW5ub3VuY2Vt
ZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhDQorICAg
IG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5
b3UgcHJvdmlkZQ0KKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmli
dXRlIHRoZSBwcm9ncmFtIHVuZGVyDQorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5n
IHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzDQorICAgIExpY2Vuc2UuICAoRXhj
ZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0DQorICAgIGRv
ZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFz
ZWQgb24NCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91
bmNlbWVudC4pDQorDA0KK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQg
d29yayBhcyBhIHdob2xlLiAgSWYNCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3Jr
IGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLA0KK2FuZCBjYW4gYmUgcmVhc29uYWJs
eSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbg0KK3RoZW1zZWx2
ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhv
c2UNCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3Mu
ICBCdXQgd2hlbiB5b3UNCitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2Yg
YSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQNCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3Ry
aWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YNCit0aGlzIExpY2Vu
c2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQ0K
K2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNz
IG9mIHdobyB3cm90ZSBpdC4NCisNCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlz
IHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QNCit5b3VyIHJpZ2h0cyB0byB3b3Jr
IHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8NCitleGVy
Y2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUg
b3INCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLg0KKw0KK0luIGFkZGl0
aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFBy
b2dyYW0NCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJv
Z3JhbSkgb24gYSB2b2x1bWUgb2YNCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBk
b2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcg0KK3RoZSBzY29wZSBvZiB0aGlzIExp
Y2Vuc2UuDQorDQorICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0g
KG9yIGEgd29yayBiYXNlZCBvbiBpdCwNCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2Rl
IG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YNCitTZWN0aW9ucyAxIGFuZCAy
IGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6DQor
DQorICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1h
Y2hpbmUtcmVhZGFibGUNCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zDQorICAgIDEgYW5kIDIgYWJvdmUgb24gYSBt
ZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0KKw0K
KyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBs
ZWFzdCB0aHJlZQ0KKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNo
YXJnZSBubyBtb3JlIHRoYW4geW91cg0KKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWlu
ZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlDQorICAgIG1hY2hpbmUtcmVhZGFibGUg
Y29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUNCisgICAgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRp
dW0NCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLA0K
Kw0KKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVk
IGFzIHRvIHRoZSBvZmZlcg0KKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNl
IGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcw0KKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNv
bW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQ0KKyAgICByZWNlaXZlZCB0aGUg
cHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoDQorICAg
IGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQ0KKw0KK1RoZSBz
b3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29y
ayBmb3INCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdv
cmssIGNvbXBsZXRlIHNvdXJjZQ0KK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3Ig
YWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55DQorYXNzb2NpYXRlZCBpbnRlcmZhY2Ug
ZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvDQorY29udHJvbCBjb21w
aWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMg
YQ0KK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBu
b3QgaW5jbHVkZQ0KK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVp
dGhlciBzb3VyY2Ugb3IgYmluYXJ5DQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAo
Y29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUNCitvcGVyYXRpbmcgc3lzdGVtIG9u
IHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudA0KK2l0c2Vs
ZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4NCisNCitJZiBkaXN0cmlidXRpb24gb2YgZXhl
Y3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nDQorYWNjZXNzIHRvIGNv
cHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudA0KK2Fj
Y2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBh
cw0KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBh
cnRpZXMgYXJlIG5vdA0KK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0
aGUgb2JqZWN0IGNvZGUuDQorDA0KKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJs
aWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtDQorZXhjZXB0IGFzIGV4cHJlc3NseSBw
cm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdA0KK290aGVyd2lzZSB0byBj
b3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcw0KK3Zv
aWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRo
aXMgTGljZW5zZS4NCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywg
b3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcg0KK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRo
ZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoDQorcGFydGllcyByZW1haW4g
aW4gZnVsbCBjb21wbGlhbmNlLg0KKw0KKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNj
ZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90DQorc2lnbmVkIGl0LiAgSG93ZXZl
ciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3INCitkaXN0
cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9u
cyBhcmUNCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vu
c2UuICBUaGVyZWZvcmUsIGJ5DQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3Jh
bSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3Vy
IGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQNCithbGwgaXRzIHRlcm1z
IGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nDQor
dGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuDQorDQorICA2LiBFYWNoIHRpbWUgeW91
IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQorUHJv
Z3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJv
bSB0aGUNCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0
aGUgUHJvZ3JhbSBzdWJqZWN0IHRvDQordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3Ug
bWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXINCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVu
dHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uDQorWW91IGFyZSBub3Qg
cmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8N
Cit0aGlzIExpY2Vuc2UuDQorDQorICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0
IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50DQoraW5mcmluZ2VtZW50IG9yIGZvciBh
bnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwNCitjb25kaXRp
b25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50
IG9yDQorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBM
aWNlbnNlLCB0aGV5IGRvIG5vdA0KK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0
aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90DQorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5
IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcw0KK0xpY2Vuc2UgYW5k
IGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5
b3UNCittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUs
IGlmIGEgcGF0ZW50DQorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRp
c3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQ0KK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3Bp
ZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbg0KK3RoZSBvbmx5IHdh
eSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8N
CityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLg0KKw0K
K0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZv
cmNlYWJsZSB1bmRlcg0KK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ug
b2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8NCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMg
YSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcg0KK2NpcmN1bXN0YW5jZXMuDQor
DQorSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRv
IGluZnJpbmdlIGFueQ0KK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9y
IHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55DQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBo
YXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQ0KK2ludGVncml0eSBvZiB0aGUg
ZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcw0KK2ltcGxlbWVudGVk
IGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQ0KK2dl
bmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJp
YnV0ZWQNCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBw
bGljYXRpb24gb2YgdGhhdA0KK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0
byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcNCit0byBkaXN0cmlidXRlIHNvZnR3YXJl
IHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QNCitpbXBvc2Ug
dGhhdCBjaG9pY2UuDQorDQorVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91
Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvDQorYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUg
cmVzdCBvZiB0aGlzIExpY2Vuc2UuDQorDA0KKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQv
b3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4NCitjZXJ0YWluIGNvdW50cmll
cyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUNCitv
cmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhp
cyBMaWNlbnNlDQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9u
IGxpbWl0YXRpb24gZXhjbHVkaW5nDQordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1
dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZw0KK2NvdW50cmllcyBub3QgdGh1cyBl
eGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcw0KK3RoZSBs
aW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLg0KKw0K
KyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFu
ZC9vciBuZXcgdmVyc2lvbnMNCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRp
bWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwNCitiZSBzaW1pbGFyIGluIHNwaXJp
dCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8NCith
ZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4NCisNCitFYWNoIHZlcnNpb24gaXMgZ2l2
ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtDQorc3Bl
Y2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8g
aXQgYW5kICJhbnkNCitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xs
b3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zDQorZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBv
ciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2FyZSBG
b3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVt
YmVyIG9mDQordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQ0KK0ZvdW5kYXRpb24uDQorDQorICAxMC4gSWYg
eW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBm
cmVlDQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVu
dCwgd3JpdGUgdG8gdGhlIGF1dGhvcg0KK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0
d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRp
b24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcw0K
K21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBi
eSB0aGUgdHdvIGdvYWxzDQorb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRl
cml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZA0KK29mIHByb21vdGluZyB0aGUgc2hh
cmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5Lg0KKw0KKwkJCSAgICBOTyBXQVJS
QU5UWQ0KKw0KKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBD
SEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZDQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhU
RU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVODQorT1RIRVJXSVNF
IFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFS
VElFUw0KK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEDQorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCitNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFT
DQorVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEgg
WU9VLiAgU0hPVUxEIFRIRQ0KK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRI
RSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLA0KK1JFUEFJUiBPUiBDT1JSRUNUSU9O
Lg0KKw0KKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExB
VyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORw0KK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9S
IEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1INCitSRURJU1RSSUJVVEUgVEhF
IFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VT
LA0KK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgQVJJU0lORw0KK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBV
U0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQNCitUTyBMT1NTIE9GIERB
VEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQg
QlkNCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8g
T1BFUkFURSBXSVRIIEFOWSBPVEhFUg0KK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBP
UiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQ0KK1BPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFUy4NCisNCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TDQorDA0K
KwlBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1z
DQorDQorICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8g
YmUgb2YgdGhlIGdyZWF0ZXN0DQorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0
IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdA0KK2ZyZWUgc29mdHdhcmUgd2hpY2gg
ZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLg0K
Kw0KKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dy
YW0uICBJdCBpcyBzYWZlc3QNCit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBz
b3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5DQorY29udmV5IHRoZSBleGNsdXNpb24gb2Yg
d2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QNCit0aGUgImNvcHly
aWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3Vu
ZC4NCisNCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJy
aWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4NCisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFt
ZSBvZiBhdXRob3I+DQorDQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yDQorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQor
ICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQor
ICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwg
VVNBLg0KKw0KK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBl
bGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLg0KKw0KK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0
aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMNCit3aGVuIGl0IHN0
YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOg0KKw0KKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9u
IDY5LCBDb3B5cmlnaHQgKEMpIDE5eXkgbmFtZSBvZiBhdXRob3INCisgICAgR25vbW92aXNpb24g
Y29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93
IHcnLg0KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8g
cmVkaXN0cmlidXRlIGl0DQorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hv
dyBjJyBmb3IgZGV0YWlscy4NCisNCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcn
IGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUNCitwYXJ0cyBvZiB0aGUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2Ug
bWF5DQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBj
JzsgdGhleSBjb3VsZCBldmVuIGJlDQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRl
dmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4NCisNCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1w
bG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cg0KK3NjaG9vbCwgaWYg
YW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlm
DQorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOg0KKw0KKyAg
WW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBp
biB0aGUgcHJvZ3JhbQ0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNv
bXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuDQorDQorICA8c2lnbmF0dXJlIG9mIFR5
IENvb24+LCAxIEFwcmlsIDE5ODkNCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlDQorDQor
VGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5n
IHlvdXIgcHJvZ3JhbSBpbnRvDQorcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dy
YW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkNCitjb25zaWRlciBpdCBtb3JlIHVz
ZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUN
CitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwNCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4N
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci90b29scy9DT1BZSU5HLmZsZXgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM4IEBACitGbGV4IGNhcnJpZXMgdGhlIGNvcHlyaWdodCB1c2VkIGZvciBCU0Qgc29m
dHdhcmUsIHNsaWdodGx5IG1vZGlmaWVkDQorYmVjYXVzZSBpdCBvcmlnaW5hdGVkIGF0IHRoZSBM
YXdyZW5jZSBCZXJrZWxleSAobm90IExpdmVybW9yZSEpIExhYm9yYXRvcnksDQord2hpY2ggb3Bl
cmF0ZXMgdW5kZXIgYSBjb250cmFjdCB3aXRoIHRoZSBEZXBhcnRtZW50IG9mIEVuZXJneToNCisN
CisJQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh
bGlmb3JuaWEuDQorCUFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorCVRoaXMgY29kZSBpcyBkZXJp
dmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkNCisJVmVybiBQYXhz
b24uDQorDQorCVRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgaGFzIHJpZ2h0cyBpbiB0aGlz
IHdvcmsgcHVyc3VhbnQNCisJdG8gY29udHJhY3Qgbm8uIERFLUFDMDMtNzZTRjAwMDk4IGJldHdl
ZW4gdGhlIFVuaXRlZCBTdGF0ZXMNCisJRGVwYXJ0bWVudCBvZiBFbmVyZ3kgYW5kIHRoZSBVbml2
ZXJzaXR5IG9mIENhbGlmb3JuaWEuDQorDQorCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZA0KKwlwcm92aWRlZCB0aGF0OiAoMSkg
c291cmNlIGRpc3RyaWJ1dGlvbnMgcmV0YWluIHRoaXMgZW50aXJlDQorCWNvcHlyaWdodCBub3Rp
Y2UgYW5kIGNvbW1lbnQsIGFuZCAoMikgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcNCisJYmluYXJp
ZXMgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogIGBgVGhpcyBwcm9kdWN0
DQorCWluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp
Zm9ybmlhLA0KKwlCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycycnIGluIHRoZSBkb2N1bWVu
dGF0aW9uIG9yIG90aGVyDQorCW1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24gYW5kIGluIGFsbCBhZHZlcnRpc2luZw0KKwltYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4gIE5laXRoZXIgdGhlDQorCW5hbWUgb2YgdGhlIFVu
aXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQ0KKwl1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZQ0KKwl3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisJVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1Mg
T1INCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
VEhFIElNUExJRUQNCisJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUg0KKwlQVVJQT1NFLg0KKw0KK1RoaXMgYmFzaWNhbGx5IHNheXMgImRv
IHdoYXRldmVyIHlvdSBwbGVhc2Ugd2l0aCB0aGlzIHNvZnR3YXJlIGV4Y2VwdA0KK3JlbW92ZSB0
aGlzIG5vdGljZSBvciB0YWtlIGFkdmFudGFnZSBvZiB0aGUgVW5pdmVyc2l0eSdzIChvciB0aGUg
ZmxleA0KK2F1dGhvcnMnKSBuYW1lIi4NCisNCitOb3RlIHRoYXQgdGhlICJmbGV4LnNrbCIgc2Nh
bm5lciBza2VsZXRvbiBjYXJyaWVzIG5vIGNvcHlyaWdodCBub3RpY2UuDQorWW91IGFyZSBmcmVl
IHRvIGRvIHdoYXRldmVyIHlvdSBwbGVhc2Ugd2l0aCBzY2FubmVycyBnZW5lcmF0ZWQgdXNpbmcg
ZmxleDsNCitmb3IgdGhlbSwgeW91IGFyZSBub3QgZXZlbiBib3VuZCBieSB0aGUgYWJvdmUgY29w
eXJpZ2h0Lg0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci90b29scy9SRUFETUUKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL1JFQURNRQkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci90b29scy9SRUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQg
QEAKK1RoZSBzdGFuZGFsb25lIEJpc29uIGFuZCBGbGV4IHdpbjMyIGV4ZWN1dGFibGVzDQord2Vy
ZSBjcmVhdGVkIGJ5IFdpbGJ1ciBTdHJlZXR0IGFuZCBjYW4gYmUgb2J0YWluZWQgZnJvbToNCito
dHRwOi8vdXNlcnBhZ2VzLm1vbm1vdXRoLmNvbS9+d3N0cmVldHQvbGV4LXlhY2MvbGV4LXlhY2Mu
aHRtbA0KKw0KK0Jpc29uIHZlcnNpb24gMS4yNDoNCitTZWUgQ09QWUlORy5iaXNvbiBmb3IgbGlj
ZW5zZSBpbmZvcm1hdGlvbi4NCitUaGUgb3JpZ2luYWwgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3Ig
Ymlzb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoNCitodHRw
Oi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL2Jpc29uLnppcA0KKw0KK0ZsZXgg
dmVyc2lvbiAyLjUuMg0KK1NlZSBDT1BZSU5HLmZsZXggZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24u
DQorVGhlIG9yaWdpbmFsIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIGZsZXggY2FuIGJlIG9idGFp
bmVkIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoNCitodHRwOi8vYW5nbGVwcm9qZWN0Lmdv
b2dsZWNvZGUuY29tL2ZpbGVzL2ZsZXguemlwDQorDQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L3Rvb2xzL2Jpc29uLmhhaXJ5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci90b29s
cy9iaXNvbi5oYWlyeQkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29scy9i
aXNvbi5oYWlyeQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzQgQEAKKworZXh0ZXJuIGludCB0
aW1lY2xvY2s7CisKKworaW50IHl5ZXJyb3I7CQkvKiAgWXllcnJvciBhbmQgeXljb3N0IGFyZSBz
ZXQgYnkgZ3VhcmRzLgkqLworaW50IHl5Y29zdDsJCS8qICBJZiB5eWVycm9yIGlzIHNldCB0byBh
IG5vbnplcm8gdmFsdWUgYnkgYQkqLworCQkJLyogIGd1YXJkLCB0aGUgcmVkdWN0aW9uIHdpdGgg
d2hpY2ggdGhlIGd1YXJkCSovCisJCQkvKiAgaXMgYXNzb2NpYXRlZCBpcyBub3QgcGVyZm9ybWVk
LCBhbmQgdGhlCSovCisJCQkvKiAgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGludm9rZWQu
CSovCisJCQkvKiAgWXljb3N0IGluZGljYXRlcyB0aGUgY29zdCBvZiBwZXJmb3JtaW5nCSovCisJ
CQkvKiAgdGhlIHJlZHVjdGlvbiBnaXZlbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUJKi8KKwkJCS8q
ICBzeW1ib2xzLgkJCQkJKi8KKworCisvKiAgWVlNQVhERVBUSCBpbmRpY2F0ZXMgdGhlIHNpemUg
b2YgdGhlIHBhcnNlcidzIHN0YXRlIGFuZCB2YWx1ZQkqLworLyogIHN0YWNrcy4JCQkJCQkJCSov
CisKKyNpZm5kZWYJWVlNQVhERVBUSAorI2RlZmluZQlZWU1BWERFUFRICTUwMAorI2VuZGlmCisK
Ky8qICBZWU1BWFJVTEVTIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIG51bWJlciBv
ZiBydWxlcyB0aGF0CSovCisvKiAgY291bGQgYmUgcGxhY2VkIGluIHRoZSBydWxlIHF1ZXVlLiAg
VGhhdCBudW1iZXIgY291bGQgYmUgZGV0ZXJtaW5lZAkqLworLyogIGZyb20gdGhlIGdyYW1tYXIg
YW5kIHRoZSBzaXplIG9mIHRoZSBzdGFjaywgYnV0LCBhcyB5ZXQsIGl0IGlzIG5vdC4JKi8KKwor
I2lmbmRlZglZWU1BWFJVTEVTCisjZGVmaW5lCVlZTUFYUlVMRVMJMTAwCisjZW5kaWYKKworI2lm
bmRlZglZWU1BWEJBQ0tVUAorI2RlZmluZSBZWU1BWEJBQ0tVUAkxMDAKKyNlbmRpZgorCisKK3No
b3J0CXl5c3NbWVlNQVhERVBUSF07CS8qICB0aGUgc3RhdGUgc3RhY2sJCQkqLworWVlTVFlQRQl5
eXZzW1lZTUFYREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLworWVlMVFlQ
RSB5eWxzW1lZTUFYREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0YWNrCQkJKi8KK3Nob3J0CXl5
cnFbWVlNQVhSVUxFU107CS8qICB0aGUgcnVsZSBxdWV1ZQkJCSovCitpbnQJeXljaGFyOwkJCS8q
ICB0aGUgbG9va2FoZWFkIHN5bWJvbAkJKi8KKworWVlTVFlQRQl5eWx2YWw7CQkJLyogIHRoZSBz
ZW1hbnRpYyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2thaGVhZCBzeW1ib2wJCQkqLwor
CitZWVNUWVBFIHl5dHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIGZvciB0aGUgc3RhdGUJ
Ki8KKwkJCQkvKiAgYXQgdGhlIHRvcCBvZiB0aGUgc3RhdGUgc3RhY2suCSovCisKK1lZU1RZUEUg
eXl2YWw7CQkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8KKwkJCQkvKiAgc2Vt
YW50aWMgdmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0aW5lcwkJCQkqLwor
CitZWUxUWVBFIHl5bGxvYzsJCS8qICBsb2NhdGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkCSov
CisJCQkJLyogIHN5bWJvbAkJCQkqLworCitZWUxUWVBFIHl5dGxvYzsJCS8qICBsb2NhdGlvbiBk
YXRhIGZvciB0aGUgc3RhdGUgYXQgdGhlCSovCisJCQkJLyogIHRvcCBvZiB0aGUgc3RhdGUgc3Rh
Y2sJCSovCisKKworaW50CXl5bnVubGV4ZWQ7CitzaG9ydAl5eXVuY2hhcltZWU1BWEJBQ0tVUF07
CitZWVNUWVBFCXl5dW52YWxbWVlNQVhCQUNLVVBdOworWVlMVFlQRSB5eXVubG9jW1lZTUFYQkFD
S1VQXTsKKworc2hvcnQgKnl5Z3NzcDsJCQkvKiAgYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhl
IHN0YXRlCSovCisJCQkJLyogIHN0YWNrOyBvbmx5IHNldCBkdXJpbmcgZXJyb3IJKi8KKwkJCQkv
KiAgcmVjb3ZlcnkuCQkJCSovCisKK1lZU1RZUEUgKnl5Z3ZzcDsJCS8qICBhIHBvaW50ZXIgdG8g
dGhlIHRvcCBvZiB0aGUgdmFsdWUJKi8KKwkJCQkvKiAgc3RhY2s7IG9ubHkgc2V0IGR1cmluZyBl
cnJvcgkqLworCQkJCS8qICByZWNvdmVyeS4JCQkJKi8KKworWVlMVFlQRSAqeXlnbHNwOwkJLyog
IGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZQkJKi8KKwkJCQkvKiAgbG9jYXRpb24gc3RhY2s7
IG9ubHkgc2V0IGR1cmluZwkqLworCQkJCS8qICBlcnJvciByZWNvdmVyeS4JCQkqLworCisKKy8q
ICBZeWdldCBpcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcGFyc2VyIGFuZCB0aGUgbGV4aWNh
bCBhbmFseXplci4JKi8KKy8qICBJdCBpcyBjb3N0bHkgdG8gcHJvdmlkZSBzdWNoIGFuIGludGVy
ZmFjZSwgYnV0IGl0IGF2b2lkcyByZXF1aXJpbmcJKi8KKy8qICB0aGUgbGV4aWNhbCBhbmFseXpl
ciB0byBiZSBhYmxlIHRvIGJhY2sgdXAgdGhlIHNjYW4uCQkqLworCit5eWdldCgpCit7CisgIGlm
ICh5eW51bmxleGVkID4gMCkKKyAgICB7CisgICAgICB5eW51bmxleGVkLS07CisgICAgICB5eWNo
YXIgPSB5eXVuY2hhclt5eW51bmxleGVkXTsKKyAgICAgIHl5bHZhbCA9IHl5dW52YWxbeXludW5s
ZXhlZF07CisgICAgICB5eWxsb2MgPSB5eXVubG9jW3l5bnVubGV4ZWRdOworICAgIH0KKyAgZWxz
ZSBpZiAoeXljaGFyIDw9IDApCisgICAgeXljaGFyID0gMDsKKyAgZWxzZQorICAgIHsKKyAgICAg
IHl5Y2hhciA9IHl5bGV4KCk7CisgICAgICBpZiAoeXljaGFyIDwgMCkKKwl5eWNoYXIgPSAwOwor
ICAgICAgZWxzZSB5eWNoYXIgPSBZWVRSQU5TTEFURSh5eWNoYXIpOworICAgIH0KK30KKworCisK
K3l5dW5sZXgoY2hyLCB2YWwsIGxvYykKK2ludCBjaHI7CitZWVNUWVBFIHZhbDsKK1lZTFRZUEUg
bG9jOworeworICB5eXVuY2hhclt5eW51bmxleGVkXSA9IGNocjsKKyAgeXl1bnZhbFt5eW51bmxl
eGVkXSA9IHZhbDsKKyAgeXl1bmxvY1t5eW51bmxleGVkXSA9IGxvYzsKKyAgeXludW5sZXhlZCsr
OworfQorCisKKworeXlyZXN0b3JlKGZpcnN0LCBsYXN0KQorcmVnaXN0ZXIgc2hvcnQgKmZpcnN0
OworcmVnaXN0ZXIgc2hvcnQgKmxhc3Q7Cit7CisgIHJlZ2lzdGVyIHNob3J0ICpzc3A7CisgIHJl
Z2lzdGVyIHNob3J0ICpycDsKKyAgcmVnaXN0ZXIgaW50IHN5bWJvbDsKKyAgcmVnaXN0ZXIgaW50
IHN0YXRlOworICByZWdpc3RlciBpbnQgdHZhbHNhdmVkOworCisgIHNzcCA9IHl5Z3NzcDsKKyAg
eXl1bmxleCh5eWNoYXIsIHl5bHZhbCwgeXlsbG9jKTsKKworICB0dmFsc2F2ZWQgPSAwOworICB3
aGlsZSAoZmlyc3QgIT0gbGFzdCkKKyAgICB7CisgICAgICBzeW1ib2wgPSB5eXN0b3NbKnNzcF07
CisgICAgICBpZiAoc3ltYm9sIDwgWVlOVEJBU0UpCisJeworCSAgeXl1bmxleChzeW1ib2wsIHl5
dHZhbCwgeXl0bG9jKTsKKwkgIHR2YWxzYXZlZCA9IDE7CisJICBzc3AtLTsKKwl9CisKKyAgICAg
IHNzcC0tOworCisgICAgICBpZiAoZmlyc3QgPT0geXlycSkKKwlmaXJzdCA9IHl5cnEgKyBZWU1B
WFJVTEVTOworCisgICAgICBmaXJzdC0tOworCisgICAgICBmb3IgKHJwID0geXlyaHMgKyB5eXBy
aHNbKmZpcnN0XTsgc3ltYm9sID0gKnJwOyBycCsrKQorCXsKKwkgIGlmIChzeW1ib2wgPCBZWU5U
QkFTRSkKKwkgICAgc3RhdGUgPSB5eXRhYmxlW3l5cGFjdFsqc3NwXSArIHN5bWJvbF07CisJICBl
bHNlCisJICAgIHsKKwkgICAgICBzdGF0ZSA9IHl5cGdvdG9bc3ltYm9sIC0gWVlOVEJBU0VdICsg
KnNzcDsKKworCSAgICAgIGlmIChzdGF0ZSA+PSAwICYmIHN0YXRlIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3N0YXRlXSA9PSAqc3NwKQorCQlzdGF0ZSA9IHl5dGFibGVbc3RhdGVdOworCSAgICAgIGVs
c2UKKwkJc3RhdGUgPSB5eWRlZmdvdG9bc3ltYm9sIC0gWVlOVEJBU0VdOworCSAgICB9CisKKwkg
ICorK3NzcCA9IHN0YXRlOworCX0KKyAgICB9CisKKyAgaWYgKCAhIHR2YWxzYXZlZCAmJiBzc3Ag
PiB5eXNzKQorICAgIHsKKyAgICAgIHl5dW5sZXgoeXlzdG9zWypzc3BdLCB5eXR2YWwsIHl5dGxv
Yyk7CisgICAgICBzc3AtLTsKKyAgICB9CisKKyAgeXlnc3NwID0gc3NwOworfQorCisKKworaW50
Cit5eXBhcnNlKCkKK3sKKyAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CisgIHJlZ2lzdGVyIGludCB5
eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5cnEwOwor
ICByZWdpc3RlciBzaG9ydCAqeXlwdHI7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworCisg
IGludCB5eWxlbjsKKyAgWVlMVFlQRSAqeXlsc3A7CisgIHNob3J0ICp5eXJxMTsKKyAgc2hvcnQg
Knl5cnEyOworCisgIHl5c3RhdGUgPSAwOworICB5eXNzcCA9IHl5c3MgLSAxOworICB5eXZzcCA9
IHl5dnMgLSAxOworICB5eWxzcCA9IHl5bHMgLSAxOworICB5eXJxMCA9IHl5cnE7CisgIHl5cnEx
ID0geXlycTA7CisgIHl5cnEyID0geXlycTA7CisKKyAgeXljaGFyID0geXlsZXgoKTsKKyAgaWYg
KHl5Y2hhciA8IDApCisgICAgeXljaGFyID0gMDsKKyAgZWxzZSB5eWNoYXIgPSBZWVRSQU5TTEFU
RSh5eWNoYXIpOworCit5eW5ld3N0YXRlOgorCisgIGlmICh5eXNzcCA+PSB5eXNzICsgWVlNQVhE
RVBUSCAtIDEpCisgICAgeworICAgICAgeXlhYm9ydCgiUGFyc2VyIFN0YWNrIE92ZXJmbG93Iik7
CisgICAgICBZWUFCT1JUOworICAgIH0KKworICAqKyt5eXNzcCA9IHl5c3RhdGU7CisKK3l5cmVz
dW1lOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisg
ICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXluICs9IHl5Y2hhcjsKKyAgaWYgKHl5biA8IDAgfHwg
eXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIpCisgICAgZ290byB5eWRlZmF1
bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAg
ICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5
biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKworICB5eXB0
ciA9IHl5cnEyOworICB3aGlsZSAoeXlwdHIgIT0geXlycTEpCisgICAgeworICAgICAgeXluID0g
Knl5cHRyKys7CisgICAgICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgICAgIHl5dnNwIC09IHl5bGVu
OworICAgICAgeXlsc3AgLT0geXlsZW47CisKKyAgICAgIHl5Z3VhcmQoeXluLCB5eXZzcCwgeXls
c3ApOworICAgICAgaWYgKHl5ZXJyb3IpCisJZ290byB5eXNlbWVycjsKKworICAgICAgeXlhY3Rp
b24oeXluLCB5eXZzcCwgeXlsc3ApOworICAgICAgKisreXl2c3AgPSB5eXZhbDsKKworICAgICAg
eXlsc3ArKzsKKyAgICAgIGlmICh5eWxlbiA9PSAwKQorCXsKKwkgIHl5bHNwLT50aW1lc3RhbXAg
PSB0aW1lY2xvY2s7CisJICB5eWxzcC0+Zmlyc3RfbGluZSA9IHl5dGxvYy5maXJzdF9saW5lOwor
CSAgeXlsc3AtPmZpcnN0X2NvbHVtbiA9IHl5dGxvYy5maXJzdF9jb2x1bW47CisJICB5eWxzcC0+
bGFzdF9saW5lID0gKHl5bHNwLTEpLT5sYXN0X2xpbmU7CisJICB5eWxzcC0+bGFzdF9jb2x1bW4g
PSAoeXlsc3AtMSktPmxhc3RfY29sdW1uOworCSAgeXlsc3AtPnRleHQgPSAwOworCX0KKyAgICAg
IGVsc2UKKwl7CisJICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2xp
bmU7CisJICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfY29sdW1u
OworCX0KKwkgIAorICAgICAgaWYgKHl5cHRyID09IHl5cnEgKyBZWU1BWFJVTEVTKQorICAgICAg
ICB5eXB0ciA9IHl5cnE7CisgICAgfQorCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgeXlycTIgPSB5eXB0cjsKKyAgeXlycTEgPSB5eXJxMDsKKworICAqKyt5
eXZzcCA9IHl5dHZhbDsKKyAgKisreXlsc3AgPSB5eXRsb2M7CisgIHl5dHZhbCA9IHl5bHZhbDsK
KyAgeXl0bG9jID0geXlsbG9jOworICB5eWdldCgpOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
eXlkZWZhdWx0OgorCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDAp
CisgICAgZ290byB5eWVycmxhYjsKKworeXlyZWR1Y2U6CisKKyAgKnl5cnEwKysgPSB5eW47CisK
KyAgaWYgKHl5cnEwID09IHl5cnEgKyBZWU1BWFJVTEVTKQorICAgIHl5cnEwID0geXlycTsKKwor
ICBpZiAoeXlycTAgPT0geXlycTIpCisgICAgeworICAgICAgeXlhYm9ydCgiUGFyc2VyIFJ1bGUg
UXVldWUgT3ZlcmZsb3ciKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQorCisgIHl5c3NwIC09IHl5
cjJbeXluXTsKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAt
IFlZTlRCQVNFXSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZ
TEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJs
ZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJB
U0VdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworeXlzZW1lcnI6CisgICotLXl5cHRyID0geXlu
OworICB5eXJxMiA9IHl5cHRyOworICB5eXZzcCArPSB5eXIyW3l5bl07CisKK3l5ZXJybGFiOgor
CisgIHl5Z3NzcCA9IHl5c3NwOworICB5eWd2c3AgPSB5eXZzcDsKKyAgeXlnbHNwID0geXlsc3A7
CisgIHl5cmVzdG9yZSh5eXJxMCwgeXlycTIpOworICB5eXJlY292ZXIoKTsKKyAgeXlzdGF0ZSA9
ICp5eWdzc3A7CisgIHl5c3NwID0geXlnc3NwOworICB5eXZzcCA9IHl5Z3ZzcDsKKyAgeXlycTAg
PSB5eXJxOworICB5eXJxMSA9IHl5cnEwOworICB5eXJxMiA9IHl5cnEwOworICBnb3RvIHl5cmVz
dW1lOworfQorCiskCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uc2ltcGxl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGUJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uc2ltcGxlCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY5OSBAQAorLyogLSotQy0qLSAgTm90ZSBzb21lIGNvbXBpbGVy
cyBjaG9rZSBvbiBjb21tZW50cyBvbiBgI2xpbmUnIGxpbmVzLiAgKi8KKworLyogU2tlbGV0b24g
b3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5
OTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5j
LiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLworCisvKiBBcyBh
IHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50
byBhCisgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3
aXRob3V0IHJlc3RyaWN0aW9uLgorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJp
c29uLiAgKi8KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxs
b2NhCisjZWxzZSAvKiBub3QgX19HTlVDX18gKi8KKyNpZiBIQVZFX0FMTE9DQV9ICisjaW5jbHVk
ZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3QgSEFWRV9BTExPQ0FfSCAqLworI2lmZGVmIF9BSVgK
KyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IF9BSVggKi8KK2NoYXIgKmFsbG9jYSAoKTsK
KyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5vdCBIQVZFX0FMTE9DQV9IICovCisj
ZW5kaWYgLyogbm90IF9fR05VQ19fICovCisKK2V4dGVybiB2b2lkIHl5ZXJyb3IoY2hhciogcyk7
CisKKyNpZm5kZWYgYWxsb2NhCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgYWxsb2NhIF9fYnVp
bHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBHTlUgQy4gICovCisjaWYgKCFkZWZpbmVkIChfX1NU
RENfXykgJiYgZGVmaW5lZCAoc3BhcmMpKSB8fCBkZWZpbmVkIChfX3NwYXJjX18pIHx8IGRlZmlu
ZWQgKF9fc3BhcmMpIHx8IGRlZmluZWQgKF9fc2dpKQorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2Vs
c2UgLyogbm90IHNwYXJjICovCisjaWYgKGRlZmluZWQgKE1TRE9TKSAmJiAhZGVmaW5lZCAoX19U
VVJCT0NfXykpIHx8IGRlZmluZWQgKFdJTjMyKQorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2Ug
Lyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjaWYgZGVmaW5lZChfQUlYKQorI2luY2x1
ZGUgPG1hbGxvYy5oPgorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAvKiBub3QgTVNET1MsIF9fVFVS
Qk9DX18sIG9yIF9BSVggKi8KKyNpZmRlZiBfX2hwdXgKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7Cit2b2lkICphbGxvY2EgKHVuc2lnbmVkIGludCk7Cit9OworI2Vsc2UgLyogbm90
IF9fY3BsdXNwbHVzICovCit2b2lkICphbGxvY2EgKCk7CisjZW5kaWYgLyogbm90IF9fY3BsdXNw
bHVzICovCisjZW5kaWYgLyogX19ocHV4ICovCisjZW5kaWYgLyogbm90IF9BSVggKi8KKyNlbmRp
ZiAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18gKi8KKyNlbmRpZiAvKiBub3Qgc3BhcmMuICAq
LworI2VuZGlmIC8qIG5vdCBHTlUgQy4gICovCisjZW5kaWYgLyogYWxsb2NhIG5vdCBkZWZpbmVk
LiAgKi8KKworLyogVGhpcyBpcyB0aGUgcGFyc2VyIGNvZGUgdGhhdCBpcyB3cml0dGVuIGludG8g
ZWFjaCBiaXNvbiBwYXJzZXIKKyAgd2hlbiB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlv
biBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorICBJdCB3YXMgd3JpdHRlbiBieSBS
aWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKyAgdXNlZCB3
aGVuICVzZW1hbnRpY19wYXJzZXIgaXMgc3BlY2lmaWVkLiAgKi8KKworLyogTm90ZTogdGhlcmUg
bXVzdCBiZSBvbmx5IG9uZSBkb2xsYXIgc2lnbiBpbiB0aGlzIGZpbGUuCisgICBJdCBpcyByZXBs
YWNlZCBieSB0aGUgbGlzdCBvZiBhY3Rpb25zLCBlYWNoIGFjdGlvbgorICAgYXMgb25lIGNhc2Ug
b2YgdGhlIHN3aXRjaC4gICovCisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkK
KyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkt
MgorI2RlZmluZSBZWUVPRgkJMAorI2RlZmluZSBZWUFDQ0VQVAlyZXR1cm4oMCkKKyNkZWZpbmUg
WVlBQk9SVCAJcmV0dXJuKDEpCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisvKiBM
aWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4KKyAgIFRoaXMgcmVtYWlucyBoZXJl
IHRlbXBvcmFyaWx5IHRvIGVhc2UgdGhlCisgICB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmlu
ZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFu
dGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2RlZmluZSBZWUZBSUwJCWdvdG8geXll
cnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorI2RlZmluZSBZ
WUJBQ0tVUCh0b2tlbiwgdmFsdWUpIFwKK2RvCQkJCQkJCQlcCisgIGlmICh5eWNoYXIgPT0gWVlF
TVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgeyB5eWNoYXIgPSAodG9rZW4pLCB5eWx2YWwg
PSAodmFsdWUpOwkJCVwKKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJ
XAorICAgICAgWVlQT1BTVEFDSzsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwK
KyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7IHl5ZXJyb3IgKCJzeW50YXgg
ZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7IFlZRVJST1I7IH0JXAord2hpbGUgKDApCisKKyNkZWZp
bmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKyNpZm5kZWYgWVlQVVJFCisj
ZGVmaW5lIFlZTEVYCQl5eWxleCgpCisjZW5kaWYKKworI2lmZGVmIFlZUFVSRQorI2lmZGVmIFlZ
TFNQX05FRURFRAorI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXls
dmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgm
eXlsdmFsLCAmeXlsbG9jKQorI2VuZGlmCisjZWxzZSAvKiBub3QgWVlMU1BfTkVFREVEICovCisj
aWZkZWYgWVlMRVhfUEFSQU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsIFlZTEVYX1BB
UkFNKQorI2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwpCisjZW5kaWYKKyNlbmRp
ZiAvKiBub3QgWVlMU1BfTkVFREVEICovCisjZW5kaWYKKworLyogSWYgbm9ucmVlbnRyYW50LCBn
ZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUgKi8KKworI2lmbmRlZiBZWVBVUkUKKworaW50CXl5
Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSovCitZWVNUWVBFCXl5bHZhbDsJCQkv
KiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8KKwkJCQkvKiAgbG9va2FoZWFkIHN5bWJv
bAkJCSovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKK1lZTFRZUEUgeXlsbG9jOwkJCS8qICBsb2Nh
dGlvbiBkYXRhIGZvciB0aGUgbG9va2FoZWFkCSovCisJCQkJLyogIHN5bWJvbAkJCQkqLworI2Vu
ZGlmCisKK2ludCB5eW5lcnJzOwkJCS8qICBudW1iZXIgb2YgcGFyc2UgZXJyb3JzIHNvIGZhciAg
ICAgICAqLworI2VuZGlmICAvKiBub3QgWVlQVVJFICovCisKKyNpZiBZWURFQlVHICE9IDAKK2lu
dCB5eWRlYnVnOwkJCS8qICBub256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlCSovCisvKiBT
aW5jZSB0aGlzIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGRvZXMgbm90IHN0b3AgbXVsdGlwbGUgcGFy
c2VycworICAgZnJvbSBjb2V4aXN0aW5nLiAgKi8KKyNlbmRpZgorCisvKiAgWVlJTklUREVQVEgg
aW5kaWNhdGVzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcwkqLworCisj
aWZuZGVmCVlZSU5JVERFUFRICisjZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8q
ICBZWU1BWERFUFRIIGlzIHRoZSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0bwor
ICAgIChlZmZlY3RpdmUgb25seSBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhv
ZCBpcyB1c2VkKS4gICovCisKKyNpZiBZWU1BWERFUFRIID09IDAKKyN1bmRlZiBZWU1BWERFUFRI
CisjZW5kaWYKKworI2lmbmRlZiBZWU1BWERFUFRICisjZGVmaW5lIFlZTUFYREVQVEggMTAwMDAK
KyNlbmRpZgorCisvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICov
CisjaWZkZWYgX19HTlVDX18KK2ludCB5eXBhcnNlICh2b2lkKTsKKyNlbmRpZgorDAorI2lmIF9f
R05VQ19fID4gMQkJLyogR05VIEMgYW5kIEdOVSBDKysgZGVmaW5lIHRoaXMuICAqLworI2RlZmlu
ZSBfX3l5X21lbWNweShGUk9NLFRPLENPVU5UKQlfX2J1aWx0aW5fbWVtY3B5KFRPLEZST00sQ09V
TlQpCisjZWxzZQkJCQkvKiBub3QgR05VIEMgb3IgQysrICovCisjaWZuZGVmIF9fY3BsdXNwbHVz
CisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJp
bGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lz
dGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkgKGZyb20sIHRvLCBjb3VudCkKKyAg
ICAgY2hhciAqZnJvbTsKKyAgICAgY2hhciAqdG87CisgICAgIHNpemVfdCBjb3VudDsKK3sKKyAg
cmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVn
aXN0ZXIgc2l6ZV90IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0g
KmYrKzsKK30KKworI2Vsc2UgLyogX19jcGx1c3BsdXMgKi8KKworLyogVGhpcyBpcyB0aGUgbW9z
dCByZWxpYWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJs
ZSBidWlsdC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lk
CitfX3l5X21lbWNweSAoY2hhciAqZnJvbSwgY2hhciAqdG8sIHNpemVfdCBjb3VudCkKK3sKKyAg
cmVnaXN0ZXIgY2hhciAqZiA9IGZyb207CisgIHJlZ2lzdGVyIGNoYXIgKnQgPSB0bzsKKyAgcmVn
aXN0ZXIgc2l6ZV90IGkgPSBjb3VudDsKKworICB3aGlsZSAoaS0tID4gMCkKKyAgICAqdCsrID0g
KmYrKzsKK30KKworI2VuZGlmCisjZW5kaWYKKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBB
UlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorICAgaW50
byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorICAgSXQg
c2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKyAgIEdyYW1tYXIgYWN0aW9ucyBj
YW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisgICB0byB0aGUgcHJvcGVyIHBv
aW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWZuZGVmIFlZUEFSU0Vf
UEFSQU1fREVDTAorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCAqWVlQQVJTRV9QQVJB
TTsKKyNlbmRpZiAKKyNlbHNlCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0KKyNkZWZpbmUgWVlQQVJT
RV9QQVJBTV9ERUNMCisjZW5kaWYKKworZXh0ZXJuIFlZX0RFQ0w7CisKK2ludAoreXlwYXJzZShZ
WVBBUlNFX1BBUkFNX0RFQ0wgWVlQQVJTRV9QQVJBTSkgeworICByZWdpc3RlciBpbnQgeXlzdGF0
ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworICByZWdp
c3RlciBZWVNUWVBFICp5eXZzcDsKKyAgaW50IHl5ZXJyc3RhdHVzOwkvKiAgbnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZCAqLworICBpbnQgeXlj
aGFyMSA9IDA7CQkvKiAgbG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVk
KSB0b2tlbiBudW1iZXIgKi8KKworICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CS8qICB0aGUg
c3RhdGUgc3RhY2sJCQkqLworICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBz
ZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KKworICBzaG9ydCAqeXlzcyA9IHl5c3NhOwkJLyogIHJl
ZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycyAqLworICBZWVNUWVBFICp5
eXZzID0geXl2c2E7CS8qICB0byBhbGxvdyB5eW92ZXJmbG93IHRvIHJlYWxsb2NhdGUgdGhlbSBl
bHNld2hlcmUgKi8KKworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bHNhW1lZSU5J
VERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSovCisgIFlZTFRZUEUgKnl5bHMgPSB5
eWxzYTsKKyAgWVlMVFlQRSAqeXlsc3A7CisKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0t
LCB5eXNzcC0tLCB5eWxzcC0tKQorI2Vsc2UKKyNkZWZpbmUgWVlQT1BTVEFDSyAgICh5eXZzcC0t
LCB5eXNzcC0tKQorI2VuZGlmCisKKyAgc2l6ZV90IHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7
CisKKyNpZmRlZiBZWVBVUkUKKyAgaW50IHl5Y2hhcjsKKyAgWVlTVFlQRSB5eWx2YWw7CisgIGlu
dCB5eW5lcnJzOworI2lmZGVmIFlZTFNQX05FRURFRAorICBZWUxUWVBFIHl5bGxvYzsKKyNlbmRp
ZgorI2VuZGlmCisKKyAgWVlTVFlQRSB5eXZhbDsJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byBy
ZXR1cm4JCSovCisJCQkJLyogIHNlbWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KKwkJ
CQkvKiAgcm91dGluZXMJCQkJKi8KKworICBpbnQgeXlsZW47CisKKyNpZiBZWURFQlVHICE9IDAK
KyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIik7
CisjZW5kaWYKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJz
ID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4g
ICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2FzdGUgb25lIGVs
ZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQgdGhleSBzdGF5
IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhlIHdhc3RlZCBl
bGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5c3NwID0geXlzcyAtIDE7
CisgIHl5dnNwID0geXl2czsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgPSB5eWxzOwor
I2VuZGlmCisKKy8qIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluICB5eXN0YXRl
ICAuICAqLworLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFu
ZCBsb2NhdGlvbiBzdGFja3MKKyAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gc28gcHVzaGluZyBh
IHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCit5eW5ld3N0YXRlOgorCisgICorK3l5
c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkK
KyAgICB7CisgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3Rh
Y2sgKi8KKyAgICAgIC8qIFVzZSBjb3BpZXMgb2YgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0
IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50byBtZW1vcnkuICovCisgICAgICBZWVNUWVBFICp5eXZz
MSA9IHl5dnM7CisgICAgICBzaG9ydCAqeXlzczEgPSB5eXNzOworI2lmZGVmIFlZTFNQX05FRURF
RAorICAgICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOworI2VuZGlmCisKKyAgICAgIC8qIEdldCB0
aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAq
LworICAgICAgc2l6ZV90IHNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVy
ZmxvdworICAgICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkg
dGhlIHNpemUgb2YKKwkgdGhlIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAg
Ki8KKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIC8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRp
dGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKwkgYnV0IHRoYXQgbWlnaHQg
YmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisgICAgICB5eW92ZXJm
bG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6ZW9mICgq
eXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5bHMxLCBz
aXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgJnl5c3RhY2tzaXplKTsKKyNlbHNlCisgICAgICB5
eW92ZXJmbG93KCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorCQkgJnl5c3MxLCBzaXplICogc2l6
ZW9mICgqeXlzc3ApLAorCQkgJnl5dnMxLCBzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgJnl5
c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICB5eXNzID0geXlzczE7IHl5dnMgPSB5eXZzMTsK
KyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSB5eWxzMTsKKyNlbmRpZgorI2Vsc2Ug
Lyogbm8geXlvdmVyZmxvdyAqLworICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdh
eS4gICovCisgICAgICBpZiAoeXlzdGFja3NpemUgPj0gWVlNQVhERVBUSCkKKwl7CisJICB5eWVy
cm9yKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKwkgIHJldHVybiAyOworCX0KKyAgICAgIHl5
c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorCXl5
c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKyAgICAgIHl5c3MgPSAoc2hvcnQgKikgYWxsb2NhICh5
eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIg
Kil5eXNzMSwgKGNoYXIgKil5eXNzLCBzaXplICogc2l6ZW9mICgqeXlzc3ApKTsKKyAgICAgIHl5
dnMgPSAoWVlTVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXl2c3ApKTsK
KyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5dnMxLCAoY2hhciAqKXl5dnMsIHNpemUgKiBz
aXplb2YgKCp5eXZzcCkpOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlscyA9IChZWUxU
WVBFICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eWxzcCkpOworICAgICAgX195
eV9tZW1jcHkgKChjaGFyICopeXlsczEsIChjaGFyICopeXlscywgc2l6ZSAqIHNpemVvZiAoKnl5
bHNwKSk7CisjZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3Nw
ID0geXlzcyArIHNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgc2l6ZSAtIDE7CisjaWZk
ZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzcCA9IHl5bHMgKyBzaXplIC0gMTsKKyNlbmRpZgor
CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwg
IlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVkXG4iLCB5eXN0YWNrc2l6ZSk7CisjZW5kaWYKKwor
ICAgICAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisJWVlBQk9SVDsKKyAg
ICB9CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRl
cnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSk7CisjZW5kaWYKKworICBnb3RvIHl5
YmFja3VwOworIHl5YmFja3VwOgorCisvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVu
IHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKy8qIFJlYWQgYSBsb29rYWhlYWQgdG9rZW4gaWYgd2Ug
bmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworLyogeXlyZXN1bWU6ICov
CisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNl
IHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBp
ZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24g
PT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwor
CisgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorICAgICBvciBhIHZhbGlk
IHRva2VuIGluIGV4dGVybmFsIGZvcm0uICAqLworCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkK
KyAgICB7CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0
ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIik7CisjZW5kaWYKKyAgICAgIHl5Y2hhciA9IFlZTEVY
OworICAgIH0KKworICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hh
cjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworCisgIGlmICh5eWNoYXIgPD0gMCkJCS8q
IFRoaXMgbWVhbnMgZW5kIG9mIGlucHV0LiAqLworICAgIHsKKyAgICAgIHl5Y2hhcjEgPSAwOwor
ICAgICAgeXljaGFyID0gWVlFT0Y7CQkvKiBEb24ndCBjYWxsIFlZTEVYIGFueSBtb3JlICovCisK
KyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAi
Tm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpOworI2VuZGlmCisgICAgfQorICBlbHNlCisgICAgewor
ICAgICAgeXljaGFyMSA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKKyNpZiBZWURFQlVHICE9IDAK
KyAgICAgIGlmICh5eWRlYnVnKQorCXsKKwkgIGZwcmludGYgKHN0ZGVyciwgIk5leHQgdG9rZW4g
aXMgJWQgKCVzIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKwkgIC8qIEdpdmUgdGhlIGlu
ZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlIG1lYW5pbmcKKwkgICAg
IG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyNpZmRlZiBZWVBS
SU5UCisJICBZWVBSSU5UIChzdGRlcnIsIHl5Y2hhciwgeXlsdmFsKTsKKyNlbmRpZgorCSAgZnBy
aW50ZiAoc3RkZXJyLCAiKVxuIik7CisJfQorI2VuZGlmCisgICAgfQorCisgIHl5biArPSB5eWNo
YXIxOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5
Y2hhcjEpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworCisg
IC8qIHl5biBpcyB3aGF0IHRvIGRvIGZvciB0aGlzIHRva2VuIHR5cGUgaW4gdGhpcyBzdGF0ZS4K
KyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorICAgICBQb3Np
dGl2ZSA9PiBzaGlmdCwgeXluIGlzIG5ldyBzdGF0ZS4KKyAgICAgICBOZXcgc3RhdGUgaXMgZmlu
YWwgc3RhdGUgPT4gZG9uJ3QgYm90aGVyIHRvIHNoaWZ0LAorICAgICAgIGp1c3QgcmV0dXJuIHN1
Y2Nlc3MuCisgICAgIDAsIG9yIG1vc3QgbmVnYXRpdmUgbnVtYmVyID0+IGVycm9yLiAgKi8KKwor
ICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5
ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQor
ICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisgIGlmICh5eW4gPT0g
WVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2Vu
LiAgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIx
XSk7CisjZW5kaWYKKworICAvKiBEaXNjYXJkIHRoZSB0b2tlbiBiZWluZyBzaGlmdGVkIHVubGVz
cyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZ
RU1QVFk7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICor
K3l5bHNwID0geXlsbG9jOworI2VuZGlmCisKKyAgLyogY291bnQgdG9rZW5zIHNoaWZ0ZWQgc2lu
Y2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvciBzdGF0dXMuICAqLworICBpZiAo
eXllcnJzdGF0dXMpIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5
eW5ld3N0YXRlOworCisvKiBEbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0
YXRlLiAgKi8KK3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYg
KHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKKy8qIERvIGEgcmVkdWN0aW9uLiAgeXlu
IGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KK3l5cmVkdWNlOgor
ICB5eWxlbiA9IHl5cjJbeXluXTsKKyAgaWYgKHl5bGVuID4gMCkKKyAgICB5eXZhbCA9IHl5dnNw
WzEteXlsZW5dOyAvKiBpbXBsZW1lbnQgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uICovCisK
KyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgaW50IGk7CisK
KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJlZHVjaW5nIHZpYSBydWxlICVkIChsaW5lICVkKSwg
IiwKKwkgICAgICAgeXluLCB5eXJsaW5lW3l5bl0pOworCisgICAgICAvKiBQcmludCB0aGUgc3lt
Ym9scyBiZWluZyByZWR1Y2VkLCBhbmQgdGhlaXIgcmVzdWx0LiAgKi8KKyAgICAgIGZvciAoaSA9
IHl5cHJoc1t5eW5dOyB5eXJoc1tpXSA+IDA7IGkrKykKKwlmcHJpbnRmIChzdGRlcnIsICIlcyAi
LCB5eXRuYW1lW3l5cmhzW2ldXSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgLT4gJXNcbiIs
IHl5dG5hbWVbeXlyMVt5eW5dXSk7CisgICAgfQorI2VuZGlmCisKKyQgICAvKiB0aGUgYWN0aW9u
IGZpbGUgZ2V0cyBjb3BpZWQgaW4gaW4gcGxhY2Ugb2YgdGhpcyBkb2xsYXJzaWduICovCisgIHl5
dnNwIC09IHl5bGVuOworICB5eXNzcCAtPSB5eWxlbjsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAg
eXlsc3AgLT0geXlsZW47CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1
ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAgICAgZnByaW50ZiAo
c3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkK
KwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKKyAgKisreXl2c3AgPSB5eXZhbDsKKworI2lmZGVm
IFlZTFNQX05FRURFRAorICB5eWxzcCsrOworICBpZiAoeXlsZW4gPT0gMCkKKyAgICB7CisgICAg
ICB5eWxzcC0+Zmlyc3RfbGluZSA9IHl5bGxvYy5maXJzdF9saW5lOworICAgICAgeXlsc3AtPmZp
cnN0X2NvbHVtbiA9IHl5bGxvYy5maXJzdF9jb2x1bW47CisgICAgICB5eWxzcC0+bGFzdF9saW5l
ID0gKHl5bHNwLTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXls
c3AtMSktPmxhc3RfY29sdW1uOworICAgICAgeXlsc3AtPnRleHQgPSAwOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AreXlsZW4tMSktPmxhc3Rf
bGluZTsKKyAgICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9j
b2x1bW47CisgICAgfQorI2VuZGlmCisKKyAgLyogTm93ICJzaGlmdCIgdGhlIHJlc3VsdCBvZiB0
aGUgcmVkdWN0aW9uLgorICAgICBEZXRlcm1pbmUgd2hhdCBzdGF0ZSB0aGF0IGdvZXMgdG8sCisg
ICAgIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0bworICAgICBhbmQgdGhlIHJ1
bGUgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0
YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49
IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisg
ICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlk
ZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKK3l5ZXJybGFi
OiAgIC8qIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yICovCisKKyAgaWYgKCEgeXllcnJzdGF0dXMp
CisgICAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQg
dGhpcyBlcnJvci4gICovCisgICAgeworICAgICAgKyt5eW5lcnJzOworCisjaWZkZWYgWVlFUlJP
Ul9WRVJCT1NFCisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgICAgIGlmICh5eW4g
PiBZWUZMQUcgJiYgeXluIDwgWVlMQVNUKQorCXsKKwkgIGludCBzaXplID0gMDsKKwkgIGNoYXIg
Km1zZzsKKwkgIGludCB4LCBjb3VudDsKKworCSAgY291bnQgPSAwOworCSAgLyogU3RhcnQgWCBh
dCAteXluIGlmIG5lYyB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluIHl5Y2hlY2suICAqLwor
CSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJICAgICAgIHggPCAoc2l6ZW9mKHl5
dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJICAgIGlmICh5eWNoZWNrW3ggKyB5eW5d
ID09IHgpCisJICAgICAgc2l6ZSArPSBzdHJsZW4oeXl0bmFtZVt4XSkgKyAxNSwgY291bnQrKzsK
KwkgIG1zZyA9IChjaGFyICopIG1hbGxvYyhzaXplICsgMTUpOworCSAgaWYgKG1zZyAhPSAwKQor
CSAgICB7CisJICAgICAgc3RyY3B5KG1zZywgInBhcnNlIGVycm9yIik7CisKKwkgICAgICBpZiAo
Y291bnQgPCA1KQorCQl7CisJCSAgY291bnQgPSAwOworCQkgIGZvciAoeCA9ICh5eW4gPCAwID8g
LXl5biA6IDApOworCQkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAq
KSk7IHgrKykKKwkJICAgIGlmICh5eWNoZWNrW3ggKyB5eW5dID09IHgpCisJCSAgICAgIHsKKwkJ
CXN0cmNhdChtc2csIGNvdW50ID09IDAgPyAiLCBleHBlY3RpbmcgYCIgOiAiIG9yIGAiKTsKKwkJ
CXN0cmNhdChtc2csIHl5dG5hbWVbeF0pOworCQkJc3RyY2F0KG1zZywgIiciKTsKKwkJCWNvdW50
Kys7CisJCSAgICAgIH0KKwkJfQorCSAgICAgIHl5ZXJyb3IobXNnKTsKKwkgICAgICBmcmVlKG1z
Zyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZp
cnR1YWwgbWVtb3J5IGV4Y2VlZGVkIik7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFlZRVJS
T1JfVkVSQk9TRSAqLworCXl5ZXJyb3IoInBhcnNlIGVycm9yIik7CisgICAgfQorCisgIGdvdG8g
eXllcnJsYWIxOworeXllcnJsYWIxOiAgIC8qIGhlcmUgb24gZXJyb3IgcmFpc2VkIGV4cGxpY2l0
bHkgYnkgYW4gYWN0aW9uICovCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAg
ICAgLyogaWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBh
ZnRlciBhbiBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIC8qIHJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dCAqLworICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwlZWUFC
T1JUOworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0
ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsIHl5Y2hhciwgeXl0bmFtZVt5eWNo
YXIxXSk7CisjZW5kaWYKKworICAgICAgeXljaGFyID0gWVlFTVBUWTsKKyAgICB9CisKKyAgLyog
RWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4KKyAgICAgYWZ0ZXIgc2hpZnRp
bmcgdGhlIGVycm9yIHRva2VuLiAgKi8KKworICB5eWVycnN0YXR1cyA9IDM7CQkvKiBFYWNoIHJl
YWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMgKi8KKworICBnb3RvIHl5ZXJyaGFuZGxl
OworCit5eWVycmRlZmF1bHQ6ICAvKiBjdXJyZW50IHN0YXRlIGRvZXMgbm90IGRvIGFueXRoaW5n
IHNwZWNpYWwgZm9yIHRoZSBlcnJvciB0b2tlbi4gKi8KKworI2lmIDAKKyAgLyogVGhpcyBpcyB3
cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdhbnQgZXJyb3IgdG9rZW5zCisgICAg
IHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07ICAvKiBJ
ZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2VuLCBvay4gIE90aGVyd2lzZSBwb3Ag
aXQuKi8KKyAgaWYgKHl5bikgZ290byB5eWRlZmF1bHQ7CisjZW5kaWYKKworeXllcnJwb3A6ICAg
LyogcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJy
b3IgdG9rZW4gKi8KKworICBpZiAoeXlzc3AgPT0geXlzcykgWVlBQk9SVDsKKyAgeXl2c3AtLTsK
KyAgeXlzdGF0ZSA9ICotLXl5c3NwOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcC0tOwor
I2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAg
c2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVycm9yOiBz
dGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYg
KHN0ZGVyciwgIiAlZCIsICorK3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsK
KyAgICB9CisjZW5kaWYKKworeXllcnJoYW5kbGU6CisKKyAgeXluID0geXlwYWN0W3l5c3RhdGVd
OworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4g
Kz0gWVlURVJST1I7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5
bl0gIT0gWVlURVJST1IpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJs
ZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykK
Kwlnb3RvIHl5ZXJycG9wOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7
CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJycG9wOworCisgIGlm
ICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworI2lmIFlZREVCVUcgIT0gMAorICBp
ZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAi
KTsKKyNlbmRpZgorCisgICorK3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05FRURFRAor
ICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8g
eXluZXdzdGF0ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nLmNwcAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjk1OCBAQAorCisjbGluZSAzICJzcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcu
Y3BwIgorCisjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2Fs
IHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNk
ZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJT
SU9OIDUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJz
dCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBp
c3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXgg
aW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5l
IEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBz
eXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05f
XykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmlu
ZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5
b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLwor
I2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg
MQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9p
bnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50
MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxz
ZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZs
ZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50
MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisjZW5kaWYgLyogISBD
OTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVzLiAqLworI2lmbmRlZiBJTlQ4X01J
TgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorI2VuZGlmCisjaWZuZGVm
IElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKKyNl
bmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAo
LTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4X01BWAorI2RlZmluZSBJTlQ4X01B
WCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUFYCisjZGVmaW5l
IElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01B
WAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorI2VuZGlmCisj
aWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQor
I2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAg
ICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01B
WCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYKKworI2VuZGlmIC8qICEgRkxFWElO
VF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNs
YXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2Vsc2UJ
LyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVm
aW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQorCisjZGVmaW5lIFlZX1VTRV9D
T05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2Nw
bHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisjZGVmaW5lIHl5Y29uc3QgY29uc3QK
KyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1v
Zi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBu
ZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIg
Zm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2
ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBj
aGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJ
KGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogRW50ZXIgYSBzdGFy
dCBjb25kaXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVy
LAorICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVz
IGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJF
R0lOICh5eV9zdGFydCkgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFy
dCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJ
TiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAor
ICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAx
KSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3Ig
RU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9G
KHN0YXRlKSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rp
b24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlf
TkVXX0ZJTEUgeXlyZXN0YXJ0KHl5aW4gICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9C
VUZfU0laRQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisKKy8qIFRoZSBzdGF0
ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3Rl
ciBpbiB0aGUgbWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAo
KFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisKKyNpZm5kZWYgWVlf
VFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RB
VEUKK3R5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworI2Vu
ZGlmCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCitleHRlcm4geXlf
c2l6ZV90IHl5bGVuZzsKKworZXh0ZXJuIEZJTEUgKnl5aW4sICp5eW91dDsKKworI2RlZmluZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNk
ZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgIC8qIE5vdGU6IFdlIHNwZWNpZmljYWxs
eSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9lb2wgYmVjYXVzZSBpdCByZXF1
aXJlcworICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBT
aW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaworICAgICAqICAgICAgIGV4
aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguIAor
ICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xv
YmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNl
IGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcworICAgICAq
ICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUtLSBzbyBpdCBp
cyBub3Qgd29ydGggaXQuCisgICAgICovCisgICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikg
XAorICAgICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgaW50IHl5bDtcCisgICAgICAg
ICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAorICAgICAgICAg
ICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC0teXlsaW5lbm87XAorICAgICAgICAgICAgfXdoaWxlKDApCisgICAgCisvKiBSZXR1
cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBp
bnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyog
VW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxl
c3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNy
b19hcmcpO1wKKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVCBcCisJCSh5eV9jX2J1Zl9wKSA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFj
cm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQo
YykgeXl1bnB1dCggYywgKHl5dGV4dF9wdHIpICApCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9i
dWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBw
b3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGlu
IGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICov
CisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh
ZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAq
LworCXl5X3NpemVfdCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVm
ZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygp
IGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0Lgor
CSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJp
bnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcg
c3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQg
b2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkg
KiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hl
dGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgor
CSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90
aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2Jz
X2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAv
Kio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmls
bCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAq
LworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVm
aW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVu
IGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2Vz
cworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRp
Y2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNv
dXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2Vu
cyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4K
KwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3Rh
dHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2Fu
IGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlu
cHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9Owor
I2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFN0YWNrIG9mIGlu
cHV0IGJ1ZmZlcnMuICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3AgPSAwOyAv
Kio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KK3N0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0
YWNrX21heCA9IDA7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCitzdGF0aWMgWVlfQlVGRkVS
X1NUQVRFICogeXlfYnVmZmVyX3N0YWNrID0gMDsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8K
KworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNh
c2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4g
YSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0
b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVS
ICggKHl5X2J1ZmZlcl9zdGFjaykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh5eV9i
dWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0gXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwg
d2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hl
biB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5l
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0
YWNrX3RvcCldCisKKy8qIHl5X2hvbGRfY2hhciBob2xkcyB0aGUgY2hhcmFjdGVyIGxvc3Qgd2hl
biB5eXRleHQgaXMgZm9ybWVkLiAqLworc3RhdGljIGNoYXIgeXlfaG9sZF9jaGFyOworc3RhdGlj
IHl5X3NpemVfdCB5eV9uX2NoYXJzOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRv
IHl5X2NoX2J1ZiAqLworeXlfc2l6ZV90IHl5bGVuZzsKKworLyogUG9pbnRzIHRvIGN1cnJlbnQg
Y2hhcmFjdGVyIGluIGJ1ZmZlci4gKi8KK3N0YXRpYyBjaGFyICp5eV9jX2J1Zl9wID0gKGNoYXIg
KikgMDsKK3N0YXRpYyBpbnQgeXlfaW5pdCA9IDA7CQkvKiB3aGV0aGVyIHdlIG5lZWQgdG8gaW5p
dGlhbGl6ZSAqLworc3RhdGljIGludCB5eV9zdGFydCA9IDA7CS8qIHN0YXJ0IHN0YXRlIG51bWJl
ciAqLworCisvKiBGbGFnIHdoaWNoIGlzIHVzZWQgdG8gYWxsb3cgeXl3cmFwKCkncyB0byBkbyBi
dWZmZXIgc3dpdGNoZXMKKyAqIGluc3RlYWQgb2Ygc2V0dGluZyB1cCBhIGZyZXNoIHl5aW4uICBB
IGJpdCBvZiBhIGhhY2sgLi4uCisgKi8KK3N0YXRpYyBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mOworCit2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsKK3ZvaWQgeXlf
c3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7CitZWV9CVUZG
RVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAgKTsKK3ZvaWQg
eXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5X2ZsdXNoX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZ
X0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZv
aWQgKTsKKworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkICk7CitzdGF0
aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOworc3RhdGljIHZvaWQgeXlfaW5p
dF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7CisKKyNkZWZpbmUgWVlf
RkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApCisKK1lZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAgKTsK
K1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7
CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9z
aXplX3QgbGVuICApOworCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgICk7Cit2b2lkICp5eXJl
YWxsb2MgKHZvaWQgKix5eV9zaXplX3QgICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICApOworCisj
ZGVmaW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9p
bnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JV
RkZFUiApeyBcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRf
Ym9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAg
ICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICgpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAp
OyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKG4p
IDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NI
QVI7CisKK0ZJTEUgKnl5aW4gPSAoRklMRSAqKSAwLCAqeXlvdXQgPSAoRklMRSAqKSAwOworCit0
eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCitleHRlcm4gaW50IHl5bGluZW5vOworCitpbnQg
eXlsaW5lbm8gPSAxOworCitleHRlcm4gY2hhciAqeXl0ZXh0OworI2RlZmluZSB5eXRleHRfcHRy
IHl5dGV4dAorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZv
aWQgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5
cGUgY3VycmVudF9zdGF0ZSAgKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lk
ICk7CitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICApOwor
CisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQg
YmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAq
LworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwkoeXl0ZXh0X3B0cikgPSB5eV9icDsg
XAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCSh5eV9ob2xkX2NoYXIp
ID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOwor
CisjZGVmaW5lIFlZX05VTV9SVUxFUyAxNDIKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDMK
Ky8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMg
cHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxl
eF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQwN10gPQorICAgIHsgICAwLAorICAgICAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTQzLCAgMTQxLCAgMTQwLCAgMTQwLCAgMTI1LCAgMTMx
LAorICAgICAgMTM2LCAgMTIwLCAgMTIxLCAgMTI5LCAgMTI4LCAgMTE3LCAgMTI2LCAgMTI0LCAg
MTMwLCAgIDg4LAorICAgICAgIDg4LCAgMTE4LCAgMTE0LCAgMTMyLCAgMTE5LCAgMTMzLCAgMTM3
LCAgIDg0LCAgMTIyLCAgMTIzLAorICAgICAgMTM1LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgMTE1LCAg
MTM0LCAgMTE2LCAgMTI3LCAgMTM5LCAgMTQyLCAgMTQxLCAgMTM4LCAgMTExLAorICAgICAgIDk3
LCAgMTE2LCAgMTA1LCAgMTAwLCAgIDk1LCAgMTAzLCAgIDkzLCAgMTA0LCAgIDk0LCAgIDkxLAor
ICAgICAgIDkyLCAgICAwLCAgIDk2LCAgIDkwLCAgIDg2LCAgIDg3LCAgICAwLCAgICAwLCAgIDg4
LCAgMTIzLAorICAgICAgMTE1LCAgMTIyLCAgMTEyLCAgMTA4LCAgMTEwLCAgMTA5LCAgMTEzLCAg
IDg0LCAgMTAxLCAgMTA3LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorCisgICAgICAgMTMsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAg
ODQsICAgODQsICAgMTYsICAgMTgsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisg
ICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsCisgICAgICAgODQsICAgODQsICAxMDIsICAxMDYsICAxMzgsICAgIDAsICAgIDAsICAg
IDEsICAgOTAsICAgIDAsCisgICAgICAgIDAsICAgODksICAgODUsICAgOTgsICAgOTksICAgNDQs
ICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQs
ICAgMTQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAg
ODQsICAgMjIsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAg
ICAgODQsICAgMTksICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODQsCisKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICAgMCwgICA5MSwg
ICAgMCwgICA5MCwgICA4NCwgICAyNCwKKyAgICAgICA4NCwgICA4NCwgICA4MSwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICAxNywgICA0NywgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA1MiwgICA2NiwgICA4NCwKKyAgICAgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA2MywgICAgNSwgICAyOSwKKyAgICAg
ICAzMCwgICAzMSwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA1MCwg
ICAyNSwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICAzMiwgICAz
MywgICAzNCwgICAyMywgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICAxMSwgICAzOCwgICAzOSwg
ICA0MCwgICA0NSwgICAgOCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA3NywgICA3
OCwgICA3OSwgICA4NCwgICAyNiwgICA2NywgICAyMSwgICA3NCwKKworICAgICAgIDc1LCAgIDc2
LCAgICAzLCAgIDcxLCAgIDcyLCAgIDczLCAgIDg0LCAgIDIwLCAgIDY5LCAgIDg0LAorICAgICAg
IDg0LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDY0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDQ2LCAgIDg0LCAgIDgzLCAgIDg0LCAgIDg0LCAgIDE1
LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDY1LCAgIDYwLCAgIDU1LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDcwLAorICAgICAgIDUxLCAgIDg0LCAgIDU4LCAgIDI4
LCAgIDg0LCAgIDgwLCAgIDU5LCAgIDQzLCAgIDUzLCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDU0LCAgIDI3LCAgIDg0LAorICAgICAgIDg0
LCAgIDg0LCAgICA0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDQ4LCAgICA5LAor
ICAgICAgIDg0LCAgIDEwLCAgIDg0LCAgIDg0LCAgIDEyLCAgIDYxLCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDU2LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDQ5LCAgIDY4LCAgIDU3LCAgICA3LCAg
IDYyLCAgICAyLCAgIDgyLAorCisgICAgICAgIDYsICAgNDEsICAgODQsICAgODQsICAgNDIsICAg
IDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQor
ICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAg
ICA0LCAgICAxLCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAorICAgICAgICA4
LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAor
ICAgICAgIDE4LCAgIDE5LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIy
LCAgIDIzLAorICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgICAxLCAgIDI3LCAgIDI3LCAgIDI4LCAg
IDI5LCAgIDMwLCAgIDI3LAorICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMx
LCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAorICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAg
IDMxLCAgIDMxLCAgIDMxLCAgIDMyLCAgIDMxLCAgIDMxLAorICAgICAgIDMzLCAgICAxLCAgIDM0
LCAgIDM1LCAgIDMxLCAgICAxLCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LAorCisgICAgICAgNDAs
ICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgMzEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisg
ICAgICAgNDksICAgNTAsICAgMzEsICAgNTEsICAgNTIsICAgNTMsICAgNTQsICAgNTUsICAgNTYs
ICAgNTcsCisgICAgICAgNTgsICAgNTksICAgNjAsICAgNjEsICAgNjIsICAgNjMsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOwor
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2NF0gPQorICAgIHsgICAwLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLCAg
ICAyLCAgICAyLCAgICAyLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAzLCAgICAzLCAgICAxLCAgICAxLCAg
ICAxLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAorICAgICAgICAyLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAg
ICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9iYXNlWzQxMV0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDYzLCAgICAw
LCAgNjAwLCAgNjAxLCAgNjAxLCAgNjAxLCAgNTc1LCAgMTAzLAorICAgICAgMTIzLCAgNjAxLCAg
NjAxLCAgNTc0LCAgMTIwLCAgNjAxLCAgMTE5LCAgMTE3LCAgMTMxLCAgMTQzLAorICAgICAgMTUx
LCAgNTcyLCAgNjAxLCAgMTY5LCAgNTcyLCAgMTE0LCAgNjAxLCAgICAwLCAgNjAxLCAgNjAxLAor
ICAgICAgMTE3LCAgIDk2LCAgMTAyLCAgMTM2LCAgMTQwLCAgMTMwLCAgMTUwLCAgNTQ2LCAgMTEw
LCAgMTU2LAorICAgICAgNTQ1LCAgMTYyLCAgMTUyLCAgNTM5LCAgMTY3LCAgNTUyLCAgMTcwLCAg
MTY5LCAgMTY3LCAgMTg4LAorICAgICAgNTQ4LCAgNjAxLCAgMTE4LCAgNjAxLCAgNjAxLCAgNjAx
LCAgNjAxLCAgNTc2LCAgICAwLCAgNjAxLAorICAgICAgNjAxLCAgNjAxLCAgNjAxLCAgNjAxLCAg
NjAxLCAgNjAxLCAgNjAxLCAgNjAxLCAgNjAxLCAgMjE0LAorICAgICAgNjAxLCAgNTg2LCAgNjAx
LCAgMjIzLCAgMjMyLCAgMjUxLCAgMjY3LCAgICAwLCAgMjc3LCAgNjAxLAorICAgICAgNjAxLCAg
NjAxLCAgNTY0LCAgNjAxLCAgNjAxLCAgNjAxLCAgNTYzLCAgICAwLCAgNjAxLCAgNjAxLAorICAg
ICAgNTM5LCAgNTMyLCAgNTM1LCAgNTQzLCAgNTQyLCAgNTI5LCAgNTQ0LCAgNTMxLCAgNTM3LCAg
NTI1LAorCisgICAgICA1MjIsICA1MzUsICA1MjIsICA1MTksICA1MTksICA1MjUsICA1MTMsICA1
MjAsICA1MTcsICA1MjcsCisgICAgICA1MTMsICA1MTksICA1MjIsICA1MjMsICAgIDAsICAyNTMs
ICA1MjIsICAxNjAsICA1MDgsICA1MjEsCisgICAgICA1MTIsICA1MTQsICA1MDQsICA1MTgsICA1
MTUsICA1MTcsICA1MDAsICA1MDUsICA1MDIsICA0OTEsCisgICAgICAxNzEsICA1MDUsICA1MDEs
ICA1MDMsICA0OTIsICA0OTUsICAxNzMsICA1MDAsICA0OTIsICA1MDQsCisgICAgICAyMTEsICA0
OTcsICA2MDEsICA2MDEsICAgIDAsICAzMDMsICA1MzcsICA2MDEsICAzMDksICAzMjUsCisgICAg
ICAzMzUsICAzNDEsICAgIDAsICA2MDEsICA2MDEsICAgIDAsICA0ODgsICA0OTIsICA1MDEsICA0
OTgsCisgICAgICA0ODIsICA0ODIsICAxODMsICA0OTcsICA0OTQsICA0OTQsICA0OTIsICA0ODks
ICA0ODEsICA0ODcsCisgICAgICA0NzQsICA0ODUsICA0ODgsICAgIDAsICA0ODUsICA0NzMsICA0
ODAsICA0NzcsICA0ODEsICA0NzQsCisgICAgICA0NjMsICA0NjIsICA0NzUsICA0NzgsICA0NzUs
ICA0NzAsICA0NjEsICAyNDEsICA0NjYsICA0NjksCisgICAgICA0NjAsICA0NTcsICA0NjEsICA0
NjcsICA0NTgsICA0NDksICA0NTIsICA0NTAsICA0NjAsICA0NDYsCisKKyAgICAgIDQ0NCwgIDQ0
NCwgIDQ0NiwgIDQ0MywgIDQ1NCwgIDQ1MywgIDIyNCwgIDQ0OCwgIDQ0MywgIDQzMiwKKyAgICAg
IDI1NywgIDQ1MCwgIDQ1MiwgIDQ0MSwgIDM0NywgIDM1MywgIDM1OSwgIDM2NSwgIDQ0MiwgICAg
MCwKKyAgICAgIDQ0MCwgIDI5MiwgICAgMCwgIDQzMiwgIDQzMCwgIDQzOCwgIDQyNywgIDQ0NCwg
IDQzMywgIDMxMywKKyAgICAgICAgMCwgICAgMCwgIDQyNywgIDQzNywgIDQzNywgIDQyMiwgIDMy
OSwgICAgMCwgICAgMCwgIDQyNCwKKyAgICAgIDM2OSwgIDQyNSwgIDQxOSwgIDQxOCwgIDQxOSwg
IDQxOCwgIDM3MiwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDQxNCwgIDQx
NSwgIDQyMCwgIDQxMSwgIDQyNCwgIDQxOSwgIDQxOCwgIDQxMCwKKyAgICAgIDQxNCwgIDQwNiwg
IDQwOSwgIDQxMywgIDQxOCwgIDQxNywgIDQwOCwgICAgMCwgICAgMCwgIDQxNCwKKyAgICAgIDQw
MywgIDQwMywgIDQwOCwgIDQwNywgIDQwNCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5NCwK
KyAgICAgIDQwNiwgIDQwOCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5
NiwgIDM5NywKKyAgICAgIDM5MSwgIDQwMSwgICAgMCwgICAgMCwgICAgMCwgIDM5MiwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKKworICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgMzk5LCAgICAwLCAgICAwLCAgMzk3LAorICAgICAgMzkzLCAgICAwLCAgICAwLCAgICAw
LCAgMzg5LCAgMzg1LCAgMzkwLCAgMzgwLCAgMzkzLCAgMzc5LAorICAgICAgMzkyLCAgMzgxLCAg
Mzg4LCAgICAwLCAgMzg2LCAgMzg4LCAgMzcyLCAgMzgxLCAgMzg3LCAgMzgyLAorICAgICAgMzcw
LCAgICAwLCAgMzcyLCAgICAwLCAgMzcxLCAgMzc0LCAgICAwLCAgMzYzLCAgMzYyLCAgMzYyLAor
ICAgICAgMzc1LCAgICAwLCAgMzc3LCAgICAwLCAgMzc2LCAgMzc1LCAgMzYwLCAgMzczLCAgMzYw
LCAgICAwLAorICAgICAgICAwLCAgMzYzLCAgICAwLCAgICAwLCAgMzU1LCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgMzUyLAorICAgICAgMzYzLCAgMzU2LCAgMzYyLCAgMzU5LCAgMzU0LCAgMzQ2
LCAgMjk4LCAgICAwLCAgICAwLCAgMjkwLAorICAgICAgMjk2LCAgMjg1LCAgICAwLCAgMjc4LCAg
Mjc0LCAgMjYzLCAgMjYxLCAgMjY1LCAgICAwLCAgICAwLAorICAgICAgMjY1LCAgICAwLCAgMjYx
LCAgMjYwLCAgICAwLCAgICAwLCAgMjU4LCAgMjM1LCAgMjQwLCAgICAwLAorICAgICAgMjEzLCAg
MjI3LCAgMTkyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorCisg
ICAgICAgIDAsICAgIDAsICAxNzMsICAxMzcsICAgIDAsICA2MDEsICAzOTAsICAzOTIsICAzOTUs
ICAxNDgKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0MTFd
ID0KKyAgICB7ICAgMCwKKyAgICAgIDQwNiwgICAgMSwgIDQwNiwgICAgMywgIDQwNiwgIDQwNiwg
IDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwg
IDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNywgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywKKyAgICAgIDQwNywgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwg
IDQwOCwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwOSwgIDQwNiwgIDQwNiwgIDQwNiwg
IDQwNiwgIDQwNiwgIDQxMCwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNywgIDQwNiwgIDQwNiwKKyAgICAgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKworICAgICAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA2LCAgNDA2
LCAgNDA4LCAgNDA2LCAgNDA5LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAg
NDEwLCAgNDA2LCAgNDA2LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAor
ICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDcsICA0MDcsCisgICAgICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisg
ICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAg
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsCisKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKworICAgICAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgICAwLCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2CisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjY1XSA9CisgICAgeyAgIDAs
CisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAg
MTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEs
ICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAg
MjcsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCisgICAgICAgMjgsICAgMjgsICAgMjksICAgMzAs
ICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsCisgICAgICAgMzcsICAgMzgsICAg
MzksICAgNDAsICAgMjgsICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsCisgICAgICAgNDYs
ICAgNDcsICAgNDgsICAgNDksICAgNTAsICAgNTEsICAgMjgsICAgMjgsICAgMjgsICAgNTIsCisg
ICAgICAgNTMsICAgNTQsICAgNTUsICAgIDYsICAgNTYsICAgNTcsICAgIDYsICAgIDYsICAgIDYs
ICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgNTgsICAg
IDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYs
ICAgIDYsICAgIDYsICAgIDYsICAgNTksCisgICAgICAgNTksICAgNTksICAgNTksICAgNTksICAg
NTksICAgIDYsICAgIDYsICAgIDYsICAgNTksICAgNTksCisKKyAgICAgICA1OSwgICA1OSwgICA1
OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwKKyAgICAgICA1OSwg
ICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwgICA1OSwKKyAg
ICAgICA1OSwgICA1OSwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICA2MSwgICA2MiwgICA2Mywg
ICA2NiwKKyAgICAgICA2OCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA4
NiwgICA4NywgICA3MSwKKyAgICAgICA4OSwgIDE0MywgICA2OSwgICA2NywgICA3MiwgIDExMiwg
ICA2NCwgICA5MSwgICA5MiwgIDE1MywKKyAgICAgICA5MywgICA5MCwgICA5NCwgIDExMywgICA3
MywgICA3NCwgICA5NSwgICA3NSwgICA3NSwgICA3NSwKKyAgICAgICA3NSwgICA3NSwgICA3Niwg
ICA3NCwgIDExNCwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA5
NiwgICA3NywgICA4MSwgICA3OCwgIDEwMywgIDQwNSwgIDEwNCwgIDE0NCwgICA5OSwKKyAgICAg
ICA3NywgICA5NywgICA3NywgIDEwMCwgICA5OCwgIDEwNiwgIDEwNSwgIDEyMSwgIDEwMSwgICA4
MiwKKyAgICAgICA3NywgICA4MywgICA4NCwgIDEwNywgIDEwMiwgIDEwOCwgIDExNSwgIDExOSwg
IDEwOSwgICA3OCwKKworICAgICAgMTIyLCAgMTIwLCAgMTI0LCAgMTE2LCAgMTEwLCAgMTI4LCAg
MjAwLCAgMTg2LCAgMTMzLCAgNDA0LAorICAgICAgMTE3LCAgMTM0LCAgMTI5LCAgMTMwLCAgMTM3
LCAgMTg3LCAgMjA3LCAgMTI1LCAgMTM4LCAgMTM1LAorICAgICAgMTI2LCAgMjAxLCAgMTMxLCAg
MTM5LCAgMjA4LCAgMTMyLCAgMTM2LCAgMTQwLCAgIDcwLCAgIDcwLAorICAgICAgIDcwLCAgIDcw
LCAgIDcwLCAgIDcwLCAgMjI1LCAgMjI2LCAgMTQxLCAgMTQ5LCAgMTQ5LCAgMTQ5LAorICAgICAg
MTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ2LCAgIDc0LCAgNDAzLCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1
LAorICAgICAgIDc1LCAgIDc2LCAgMTUwLCAgMTQ2LCAgMjEyLCAgNDAyLCAgMjEzLCAgMjUwLCAg
MjUxLCAgMjUyLAorICAgICAgNDAxLCAgIDc3LCAgMTUwLCAgIDc0LCAgMjcxLCAgIDc2LCAgIDc2
LCAgIDc2LCAgIDc2LCAgIDc2LAorICAgICAgIDc2LCAgIDc3LCAgMjcyLCAgMjc2LCAgMjc3LCAg
Mjc4LCAgMTUxLCAgMzkyLCAgMTUxLCAgNDAwLAorICAgICAgIDc3LCAgMTUyLCAgMTUyLCAgMTUy
LCAgMTUyLCAgMTUyLCAgMTUyLCAgMzk5LCAgMzkzLCAgIDc0LAorICAgICAgIDc3LCAgIDc5LCAg
IDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgMzk4LCAgMTgwLCAgMzk3LAorCisgICAgICAz
OTYsICAxODEsICAxODIsICAzOTUsICAzOTQsICAxODMsICAgNzcsICAxODQsICAyODQsICAyODUs
CisgICAgICAyODYsICAzOTEsICAyMTUsICAzOTAsICAyMTUsICAzODksICAgNzcsICAyMTYsICAy
MTYsICAyMTYsCisgICAgICAyMTYsICAyMTYsICAyMTYsICAxNDksICAxNDksICAxNDksICAxNDks
ICAxNDksICAxNDksICAyOTMsCisgICAgICAyOTQsICAyOTUsICAzODgsICAzODcsICAyMTcsICAz
ODYsICAyMTcsICAzODUsICAxNTAsICAyMTgsCisgICAgICAyMTgsICAyMTgsICAyMTgsICAyMTgs
ICAyMTgsICAzMDAsICAzMDEsICAzMDIsICAxNTAsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsCisgICAgICAxNTIs
ICAyMTYsICAyMTYsICAyMTYsICAyMTYsICAyMTYsICAyMTYsICAyMTYsICAyMTYsICAyMTYsCisg
ICAgICAyMTYsICAyMTYsICAyMTYsICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAyMTgs
ICAyMTgsCisgICAgICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAzMDQsICAzMDUsICAz
MDYsICAzMTIsICAzMTMsCisgICAgICAzMTQsICAgODgsICAgODgsICAxNDUsICAxNDUsICAxNDcs
ICAxNDcsICAxNDcsICAzODQsICAzODMsCisKKyAgICAgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwg
IDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwgIDM3MywKKyAgICAgIDM3MiwgIDM3MSwgIDM3
MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwgIDM2NCwgIDM2MywKKyAgICAgIDM2Miwg
IDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywKKyAg
ICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwg
IDM0MywKKyAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMz
NSwgIDMzNCwgIDMzMywKKyAgICAgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywg
IDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKKyAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMx
OCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxMSwgIDMxMCwKKyAgICAgIDMwOSwgIDMwOCwgIDMwNywg
IDMwMywgIDI5OSwgIDI5OCwgIDI5NywgIDI5NiwgIDI5MiwgIDI5MSwKKyAgICAgIDI5MCwgIDI4
OSwgIDI4OCwgIDI4NywgIDI4MywgIDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3NSwKKyAgICAg
IDI3NCwgIDI3MywgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2
MywKKworICAgICAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1
LCAgMjU0LCAgMjUzLAorICAgICAgMjQ5LCAgMjQ4LCAgMjQ3LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAg
MjQzLCAgMjQyLCAgMjQxLCAgMjQwLAorICAgICAgMjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1
LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAorICAgICAgMjI5LCAgMjI4LCAgMjI3LCAg
MjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLCAgMjE5LCAgMTQ4LAorICAgICAgMjE0LCAgMjEx
LCAgMjEwLCAgMjA5LCAgMjA2LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAyLCAgMTk5LAorICAgICAg
MTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5
LAorICAgICAgMTg4LCAgMTg1LCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LCAg
MTczLCAgMTcyLAorICAgICAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1
LCAgMTY0LCAgMTYzLCAgMTYyLAorICAgICAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAg
MTU2LCAgMTU1LCAgMTU0LCAgMTQ4LCAgIDcyLAorICAgICAgMTQyLCAgMTI3LCAgMTIzLCAgMTE4
LCAgMTExLCAgIDg1LCAgIDgwLCAgIDY1LCAgIDYwLCAgNDA2LAorCisgICAgICAgIDUsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
CisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0
MDYsICA0MDYKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2
NjVdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKworICAg
ICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
IDEwLCAgIDEwLCAgIDExLCAgIDE1LAorICAgICAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4
LCAgIDE4LCAgIDE4LCAgIDI2LCAgIDI2LCAgIDE5LAorICAgICAgIDMxLCAgIDUzLCAgIDE3LCAg
IDE1LCAgIDE5LCAgIDM5LCAgIDExLCAgIDMyLCAgIDMyLCAgNDEwLAorICAgICAgIDMzLCAgIDMx
LCAgIDMzLCAgIDM5LCAgIDE5LCAgIDIwLCAgIDMzLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDM5LCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIx
LAorICAgICAgIDIxLCAgIDM0LCAgIDIwLCAgIDI0LCAgIDIwLCAgIDM2LCAgNDA0LCAgIDM2LCAg
IDUzLCAgIDM1LAorICAgICAgIDIxLCAgIDM0LCAgIDIwLCAgIDM1LCAgIDM0LCAgIDM3LCAgIDM2
LCAgIDQzLCAgIDM1LCAgIDI0LAorICAgICAgIDIxLCAgIDI0LCAgIDI0LCAgIDM3LCAgIDM1LCAg
IDM3LCAgIDQwLCAgIDQyLCAgIDM3LCAgIDIwLAorCisgICAgICAgNDMsICAgNDIsICAgNDUsICAg
NDAsICAgMzcsICAgNDcsICAxMzEsICAxMTgsICAgNDgsICA0MDMsCisgICAgICAgNDAsICAgNDgs
ICAgNDcsICAgNDcsICAgNDksICAxMTgsICAxMzcsICAgNDUsICAgNDksICAgNDgsCisgICAgICAg
NDUsICAxMzEsICAgNDcsICAgNTAsICAxMzcsICAgNDcsICAgNDgsICAgNTAsICAgNzAsICAgNzAs
CisgICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAxNjMsICAxNjMsICAgNTAsICAgNzQsICAg
NzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzAsICAgNzUsICAzOTMsICAgNzUs
ICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgNzUsICAgNzUsICAgNzQsICAgNzAsICAxNDEsICAz
OTIsICAxNDEsICAxODgsICAxODgsICAxODgsCisgICAgICAzOTEsICAgNzUsICAgNzQsICAgNzYs
ICAyMDcsICAgNzYsICAgNzYsICAgNzYsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgNzUsICAy
MDcsICAyMTEsICAyMTEsICAyMTEsICAgNzcsICAzNzcsICAgNzcsICAzODksCisgICAgICAgNzYs
ICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAzODgsICAzNzcsICAgNzksCisg
ICAgICAgNzYsICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAzODcsICAxMTYs
ICAzODQsCisKKyAgICAgIDM4MywgIDExNiwgIDExNiwgIDM4MSwgIDM3OCwgIDExNiwgICA3OSwg
IDExNiwgIDIyMiwgIDIyMiwKKyAgICAgIDIyMiwgIDM3NiwgIDE0NiwgIDM3NSwgIDE0NiwgIDM3
NCwgICA3OSwgIDE0NiwgIDE0NiwgIDE0NiwKKyAgICAgIDE0NiwgIDE0NiwgIDE0NiwgIDE0OSwg
IDE0OSwgIDE0OSwgIDE0OSwgIDE0OSwgIDE0OSwgIDIzMCwKKyAgICAgIDIzMCwgIDIzMCwgIDM3
MiwgIDM3MSwgIDE1MCwgIDM3MCwgIDE1MCwgIDM2NywgIDE0OSwgIDE1MCwKKyAgICAgIDE1MCwg
IDE1MCwgIDE1MCwgIDE1MCwgIDE1MCwgIDIzNywgIDIzNywgIDIzNywgIDE0OSwgIDE1MSwKKyAg
ICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1Miwg
IDE1MiwKKyAgICAgIDE1MiwgIDIxNSwgIDIxNSwgIDIxNSwgIDIxNSwgIDIxNSwgIDIxNSwgIDIx
NiwgIDIxNiwgIDIxNiwKKyAgICAgIDIxNiwgIDIxNiwgIDIxNiwgIDIxNywgIDIxNywgIDIxNywg
IDIxNywgIDIxNywgIDIxNywgIDIxOCwKKyAgICAgIDIxOCwgIDIxOCwgIDIxOCwgIDIxOCwgIDIx
OCwgIDI0MSwgIDI0MSwgIDI0MSwgIDI0NywgIDI0NywKKyAgICAgIDI0NywgIDQwNywgIDQwNywg
IDQwOCwgIDQwOCwgIDQwOSwgIDQwOSwgIDQwOSwgIDM2NiwgIDM2NSwKKworICAgICAgMzY0LCAg
MzYzLCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU1LCAgMzUyLCAgMzQ5LCAgMzQ4LCAgMzQ3LAorICAg
ICAgMzQ2LCAgMzQ1LCAgMzQzLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM2LCAgMzM1LCAg
MzMzLAorICAgICAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzIz
LCAgMzIyLCAgMzIxLAorICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAg
MzExLCAgMzEwLCAgMzA3LCAgMjk2LAorICAgICAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjgy
LCAgMjgxLCAgMjgwLCAgMjc1LCAgMjc0LCAgMjczLAorICAgICAgMjcyLCAgMjcxLCAgMjcwLCAg
MjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLAorICAgICAgMjYwLCAgMjU5
LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjQ2LCAgMjQ1LAorICAgICAg
MjQ0LCAgMjQzLCAgMjQyLCAgMjQwLCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjI5LCAgMjI4
LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIxLCAgMjE5LCAgMjE0LCAgMjEzLCAg
MjEyLCAgMjEwLAorICAgICAgMjA5LCAgMjA4LCAgMjA2LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAy
LCAgMjAxLCAgMjAwLCAgMTk5LAorCisgICAgICAxOTgsICAxOTcsICAxOTYsICAxOTUsICAxOTQs
ICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksCisgICAgICAxODcsICAxODYsICAxODUsICAx
ODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsCisgICAgICAxNzcsICAxNzYs
ICAxNzUsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgsICAxNjcsCisgICAgICAx
NjYsICAxNjUsICAxNjQsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAxNTgsICAxNTcsICAxNDcs
CisgICAgICAxNDIsICAxNDAsICAxMzksICAxMzgsICAxMzYsICAxMzUsICAxMzQsICAxMzMsICAx
MzIsICAxMzAsCisgICAgICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMs
ICAxMjIsICAxMjEsICAxMjAsCisgICAgICAxMTksICAxMTcsICAxMTQsICAxMTMsICAxMTIsICAx
MTEsICAxMTAsICAxMDksICAxMDgsICAxMDcsCisgICAgICAxMDYsICAxMDUsICAxMDQsICAxMDMs
ICAxMDIsICAxMDEsICAxMDAsICAgOTksICAgOTgsICAgOTcsCisgICAgICAgOTYsICAgOTUsICAg
OTQsICAgOTMsICAgOTIsICAgOTEsICAgODcsICAgODMsICAgNzIsICAgNTgsCisgICAgICAgNTEs
ICAgNDYsICAgNDQsICAgNDEsICAgMzgsICAgMjUsICAgMjIsICAgMTQsICAgIDksICAgIDUsCisK
KyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwg
IDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwg
IDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQw
NiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwg
IDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNiwKKyAg
ICAgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNgorICAgIH0gOworCisvKiBUYWJsZSBvZiBib29sZWFu
cywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQzXSA9CisgICAgeyAgIDAsCisxLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAw
LCAwLCAgICAgfTsKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7CitzdGF0aWMgY2hhciAqeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworZXh0ZXJuIGludCB5
eV9mbGV4X2RlYnVnOworaW50IHl5X2ZsZXhfZGVidWcgPSAwOworCisvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3RfdXNl
ZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9ub3Rf
ZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCitjaGFyICp5eXRleHQ7CisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyovCisvKiBC
YXNlZCBvbgorQU5TSSBDIGdyYW1tYXIsIExleCBzcGVjaWZpY2F0aW9uCisKK0luIDE5ODUsIEpl
ZmYgTGVlIHB1Ymxpc2hlZCB0aGlzIExleCBzcGVjaWZpY2F0aW9uIHRvZ2V0aGVyIHdpdGggYSBZ
YWNjIAorZ3JhbW1hciBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IEFOU0kgQyBkcmFmdC4gIFRvbSBT
dG9ja2Zpc2NoIHJlcG9zdGVkIAorYm90aCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0IG9y
aWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhlIGFuc3dlciAKK3RvIHF1ZXN0aW9uIDE3LjI1IG9m
IHRoZSBjb21wLmxhbmcuYyBGQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCAKK2Zp
bGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5ncmFtbWFyLlouIAorCitJIGludGVuZCB0byBr
ZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1t
YXIgCithcyBwb3NzaWJsZTsgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNj
cmVwYW5jaWVzLiAKKworSnV0dGEgRGVnZW5lciwgMTk5NSAKKyovCisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVy
LmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKKworLyogd2luZG93cyBvbmx5IHByYWdtYSAq
LworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDIpCisjZW5k
aWYKKworaW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplKTsKKworZXh0ZXJuIGlu
dCB5eXBhcnNlKHZvaWQqKTsKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5
bHZhbCx2b2lkKiBwYXJzZUNvbnRleHRMb2NhbCkKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgqKChU
UGFyc2VDb250ZXh0KikocGFyc2VDb250ZXh0TG9jYWwpKSkKKyAKKyNkZWZpbmUgWVlfSU5QVVQo
YnVmLHJlc3VsdCxtYXhfc2l6ZSkgKHJlc3VsdCA9IHl5X2lucHV0KGJ1ZiwgbWF4X3NpemUpKQor
CisvKgorVE9ETyhhbG9rcCk6IHl5bGluZW5vIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9sZCBm
bGV4LmV4ZSBpbiBjb21waWxlci90b29scy4KK1JlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNp
dmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworCisjZGVmaW5lIElOSVRJQUwgMAorI2Rl
ZmluZSBGSUVMRFMgMQorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFf
VFlQRSB2b2lkICoKKyNlbmRpZgorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCAp
OworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2
aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitp
bnQgeXlsZXhfZGVzdHJveSAodm9pZCApOworCitpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKKwor
dm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7CisKK1lZX0VYVFJBX1RZUEUgeXln
ZXRfZXh0cmEgKHZvaWQgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQgICk7CisKK0ZJTEUgKnl5Z2V0X2luICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfaW4g
IChGSUxFICogaW5fc3RyICApOworCitGSUxFICp5eWdldF9vdXQgKHZvaWQgKTsKKwordm9pZCB5
eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAgKTsKKworeXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHZv
aWQgKTsKKworY2hhciAqeXlnZXRfdGV4dCAodm9pZCApOworCitpbnQgeXlnZXRfbGluZW5vICh2
b2lkICk7CisKK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgICk7CisKKy8qIE1h
Y3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmlu
aXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAgKHZvaWQgKTsKKyNlbHNl
CitleHRlcm4gaW50IHl5d3JhcCAodm9pZCApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiB5
eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNo
YXIgKixpbnQgKTsKKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQg
eXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICk7CisjZW5kaWYKKworI2lmbmRlZiBZWV9O
T19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCAp
OworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHZvaWQgKTsKKyNlbmRpZgorCisjZW5kaWYKKwor
LyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRl
ZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlm
CisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFy
ZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygp
LCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVz
ZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEs
IHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVm
Ii4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5l
ZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZWV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChi
dWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJeXlfc2l6ZV90
IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0
YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hh
cikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwK
KwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJ
CX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBm
cmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7
IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9S
KCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJ
fSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCitc
CisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2Fn
ZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0
cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29t
ZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAq
LworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9O
VUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0
aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5l
IFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJv
ci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNn
KSB5eV9mYXRhbF9lcnJvciggbXNnICkKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6
YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0
aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBl
YXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9E
RUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHl5bGV4ICh2b2lkKTsKKworI2RlZmluZSBZWV9E
RUNMIGludCB5eWxleCAodm9pZCkKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4
ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5
bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgor
I2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhl
IGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFL
IGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJ
T04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdv
cmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRf
c3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlf
YWN0OworICAgIAorCWlmICggISh5eV9pbml0KSApCisJCXsKKwkJKHl5X2luaXQpID0gMTsKKwor
I2lmZGVmIFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEg
KHl5X3N0YXJ0KSApCisJCQkoeXlfc3RhcnQpID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8K
KworCQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkK
KwkJCXl5b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJ
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
CisJCQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7CisJCX0KKworCQl5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSggKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGls
IGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsK
KworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7
CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhl
IHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7
CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9zdGFydCk7Cit5eV9tYXRjaDoKKwkJZG8KKwkJ
CXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
OworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQkoeXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQkoeXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcykgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJewor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJ
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQwNyApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5
eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDQwNiApOworCQl5eV9j
cCA9ICh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKTsKKwkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZSk7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworCQlp
ZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5
eV9hY3RdICkKKwkJCXsKKwkJCWludCB5eWw7CisJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxl
bmc7ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQorCQkJCQkgICAKKyAg
ICB5eWxpbmVubysrOworOworCQkJfQorCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNl
ZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQor
CXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBi
YWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04g
Ki8KKwkJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCQkJeXlfY3AgPSAoeXlfbGFzdF9hY2Nl
cHRpbmdfY3Bvcyk7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlKTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKKy8qIHJ1bGUgMSBjYW4g
bWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7IC8qID8/IGNhcnJpYWdlIGFuZC9vciBsaW5l
LWZlZWQ/ICovIH07CisJWVlfQlJFQUsKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTlZBUklBTlQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVMRV9T
RVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1FRElVTV9QUkVD
SVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMT1dfUFJFQ0lTSU9OKTsgfQorCVlZX0JSRUFL
CitjYXNlIDY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUFJFQ0lTSU9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRFKTsgfQor
CVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQ09OU1RfUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSA5OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFVOSUZP
Uk0pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkFSWUlORyk7IH0KKwlZWV9CUkVBSworY2FzZSAx
MToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihCUkVBSyk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT05USU5VRSk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihETyk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihGT1IpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oV0hJTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSUYpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTc6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oRUxTRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTl9RVUFMKTsgfQorCVlZX0JSRUFL
CitjYXNlIDE5OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKE9VVF9RVUFMKTsgfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOT1VUX1FVQUwpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEZM
T0FUX1RZUEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCit7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuKElOVF9UWVBFKTsgfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihWT0lEX1RZUEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZ
WV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRl
eHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybihCT09MQ09OU1RBTlQpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBweXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKERJU0NBUkQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxF
X1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUkVUVVJOKTsg
fQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihN
QVRSSVgyKTsgfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybihNQVRSSVgzKTsgfQorCVlZX0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAor
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybihNQVRSSVg0KTsgfQorCVlZX0JSRUFLCitjYXNlIDMyOgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDMik7IH0KKwlZWV9CUkVBSworY2FzZSAzMzoK
K1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzMpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
YXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUM0KTsgfQorCVlZX0JS
RUFLCitjYXNlIDM1OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJ
VkVDMyk7IH0KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4gKElWRUM0KTsgfQorCVlZX0JSRUFLCitjYXNlIDM4OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9
IHRydWU7IHJldHVybiAoQlZFQzIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0KKwlZWV9CUkVBSworY2FzZSA0MDoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4
dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUM0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDQxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9C
UkVBSworY2FzZSA0MjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUkNV
QkU7IH0KKwlZWV9CUkVBSworY2FzZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4oU1RSVUNUKTsgfQorCVlZX0JSRUFLCitjYXNlIDQ0OgorWVlfUlVMRV9TRVRVUAoreyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA0NToKK1lZX1JVTEVf
U0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NDY6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZ
X0JSRUFLCitjYXNlIDQ3OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA0ODoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDk6CitZWV9SVUxFX1NFVFVQ
Cit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDUwOgor
WVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVB
SworY2FzZSA1MToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNTI6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDUzOgorWVlfUlVMRV9TRVRVUAoreyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1NDoKK1lZX1JV
TEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNTU6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQor
CVlZX0JSRUFLCitjYXNlIDU2OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTg6CitZWV9SVUxFX1NF
VFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDU5
OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9C
UkVBSworY2FzZSA2MDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjE6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDYyOgorWVlfUlVMRV9TRVRVUAor
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2MzoKK1lZ
X1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNjQ6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQorCVlZX0JSRUFLCitjYXNlIDY1OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2NjoKK1lZX1JVTEVfU0VUVVAKK3sgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjc6CitZWV9SVUxF
X1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNl
IDY4OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZ
WV9CUkVBSworY2FzZSA2OToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzA6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDcxOgorWVlfUlVMRV9TRVRV
UAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3MjoK
K1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNzM6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4g
MDsgfQorCVlZX0JSRUFLCitjYXNlIDc0OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3NToKK1lZX1JVTEVfU0VUVVAKK3sg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzY6CitZWV9S
VUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitj
YXNlIDc3OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KwlZWV9CUkVBSworY2FzZSA3ODoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7
IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzk6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDgwOgorWVlfUlVMRV9T
RVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4
MToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlf
QlJFQUsKK2Nhc2UgODI6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDgzOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZl
ZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4NDoKK1lZX1JVTEVfU0VUVVAK
K3sgIAorICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgCisgICBweXlsdmFsLT5sZXgu
c3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4gUGFJZGVudE9yVHlw
ZSgqcHl5bHZhbC0+bGV4LnN0cmluZywgcGFyc2VDb250ZXh0LCBweXlsdmFsLT5sZXguc3ltYm9s
KTsgCit9CisJWVlfQlJFQUsKK2Nhc2UgODU6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7
IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA4NjoKK1lZX1JVTEVfU0VU
VVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0
b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNl
IDg3OgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJz
ZUNvbnRleHQuZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQs
ICIiLCAiIik7IHBhcnNlQ29udGV4dC5yZWNvdmVyKCk7IHJldHVybiAwO30KKwlZWV9CUkVBSwor
Y2FzZSA4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQorCVlZX0JSRUFLCitjYXNlIDg5OgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5MDoK
K1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+
bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09O
U1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNl
IDkyOgorWVlfUlVMRV9TRVRVUAoreyAgaW50IHJldCA9IFBhUGFyc2VDb21tZW50KHB5eWx2YWwt
PmxleC5saW5lLCBwYXJzZUNvbnRleHQpOyBpZiAoIXJldCkgcmV0dXJuIHJldDsgfSAgIAorCVlZ
X0JSRUFLCitjYXNlIDkzOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKEFERF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTQ6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU1VCX0FT
U0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSA5NToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNVUxfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitj
YXNlIDk2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKERJVl9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTc6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTU9EX0FTU0lHTik7IH0K
KwlZWV9CUkVBSworY2FzZSA5ODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihMRUZUX0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSA5OToK
K1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihS
SUdIVF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAwOgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9BU1NJR04pOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTAxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFhPUl9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAyOgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX0FT
U0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5DX09QKTsgfQorCVlZX0JSRUFLCitjYXNl
IDEwNDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihERUNfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA1OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9PUCk7IH0KKwlZWV9CUkVB
SworY2FzZSAxMDY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oT1JfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA3OgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFhPUl9PUCk7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMDg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTEVfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA5OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEdFX09QKTsg
fQorCVlZX0JSRUFLCitjYXNlIDExMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihFUV9PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTE6CitZ
WV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTkVf
T1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTEyOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFRlRfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTEzOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKFJJR0hUX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDExNDoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMTU6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQu
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQorCVlZX0JSRUFLCitj
YXNlIDExNjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihSSUdIVF9CUkFDRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTc6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBpZiAocGFyc2VDb250ZXh0Lmlu
VHlwZVBhcmVuKSBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01N
QSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09MT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE5
OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oRVFVQUwpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTIwOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyBwYXJzZUNvbnRleHQuaW5UeXBl
UGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMjE6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQuaW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQorCVlZX0JS
RUFLCitjYXNlIDEyMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihMRUZUX0JSQUNLRVQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIzOgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hU
X0JSQUNLRVQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI0OgorWVlfUlVMRV9TRVRVUAoreyBCRUdJ
TihGSUVMRFMpOyAgcmV0dXJuKERPVCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjU6CitZWV9SVUxF
X1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQkFORyk7IH0K
KwlZWV9CUkVBSworY2FzZSAxMjY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oREFTSCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjc6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVElMREUp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBMVVMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI5Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNU
QVIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMwOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNMQVNIKTsgfQorCVlZX0JSRUFLCitjYXNlIDEz
MToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihQRVJDRU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FOR0xFKTsgfQorCVlZX0JS
RUFLCitjYXNlIDEzMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihSSUdIVF9BTkdMRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzQ6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkVSVElD
QUxfQkFSKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDQVJFVCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxMzY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oQU1QRVJTQU5EKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNzoKK1lZX1JVTEVfU0VUVVAK
K3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihRVUVTVElPTik7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMzg6CitZWV9SVUxFX1NFVFVQCit7IAorQkVHSU4oSU5JVElBTCk7ICAg
ICAgCisgICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgICAgIAorICAgIHB5eWx2YWwt
PmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgICByZXR1cm4gRklFTERf
U0VMRUNUSU9OOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM5OgorWVlfUlVMRV9TRVRVUAore30KKwlZ
WV9CUkVBSworY2FzZSAxNDA6CisvKiBydWxlIDE0MCBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxF
X1NFVFVQCit7ICB9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgorY2Fz
ZSBZWV9TVEFURV9FT0YoRklFTERTKToKK3sgKCZwYXJzZUNvbnRleHQpLT5BZnRlckVPRiA9IHRy
dWU7IHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOyB5eXRlcm1pbmF0ZSgpO30K
KwlZWV9CUkVBSworY2FzZSAxNDE6CitZWV9SVUxFX1NFVFVQCit7IHBhcnNlQ29udGV4dC5pbmZv
U2luay5pbmZvIDw8ICJGTEVYOiBVbmtub3duIGNoYXIgIiA8PCB5eXRleHQgPDwgIlxuIjsKKyAg
ICAgICAgICByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDE0MjoKK1lZX1JVTEVfU0VUVVAK
K0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBB
bW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlp
bnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtICh5eXRleHRfcHRy
KSkgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4g
Ki8KKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZT
RVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUg
b3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVk
IGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJj
ZSBhbmQgY2FsbGVkCisJCQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1
cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgor
CQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNl
CisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQor
CQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4K
KwkJCSAqLworCQkJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlp
bjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JV
RkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlf
Y19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRo
ZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBp
bmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChzaW5jZSBhbGwgc3RhdGVz
IG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQtb2YtYnVmZmVyIHN0YXRl
KS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBpbnB1dCgpLgorCQkgKi8K
KwkJaWYgKCAoeXlfY19idWZfcCkgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmWyh5eV9uX2NoYXJzKV0gKQorCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJ
CQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRl
eHRfcHRyKSArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cg
cG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4n
dCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQK
KwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICog
d2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50
IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVu
IG1vcmUgc2xvd2x5KS4KKwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90
cmFucyggeXlfY3VycmVudF9zdGF0ZSApOworCisJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZ
X01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25z
dW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArKyh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKwor
CQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9ICh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKTsKKwkJ
CQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKTsKKwkJCQlnb3Rv
IHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9u
ZXh0X2J1ZmZlciggICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJ
CXsKKwkJCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDA7CisKKwkJCQlpZiAoIHl5
d3JhcCggKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAq
IHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlm
IHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJ
CQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9O
VUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0
IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsg
WVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJ
CQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAo
ICEgKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJ
CQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FO
OgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJCSh5eXRleHRfcHRyKSArIHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCAgKTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4
dF9wdHIpICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0Jf
QUNUX0xBU1RfTUFUQ0g6CisJCQkJKHl5X2NfYnVmX3ApID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXTsKKworCQkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOworCisJCQkJeXlfY3AgPSAoeXlfY19idWZf
cCk7CisJCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFU
QUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rp
b24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBv
ZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dl
dF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVy
bnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0gg
LQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJy
ZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLwor
c3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpCit7CisgICAgCXJlZ2lzdGVyIGNo
YXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3Rl
ciBjaGFyICpzb3VyY2UgPSAoeXl0ZXh0X3B0cik7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19t
b3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCAoeXlfY19idWZfcCkgPiAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gKQorCQlZWV9GQVRB
TF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1
ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmls
bF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28g
dGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpIC0g
WVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJh
Y3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkg
Ki8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsK
KwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkg
KiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJ
fQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3Zl
IGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGlu
dCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSkgLSAxOworCisJZm9yICggaSA9IDA7IGkg
PCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZG
RVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFu
dGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpID0gMDsK
KworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hp
bGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUg
Y3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZG
RVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKCh5eV9jX2J1Zl9w
KSAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJ
eworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlm
ICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXpl
IC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9j
aF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJz
LiAqLworCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXpl
ICsgMiAgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qg
b3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9i
dWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5w
dXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQkoeXlfY19idWZfcCkgPSAmYi0+eXlfY2hfYnVm
W3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJ
fQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJ
WVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3Rv
X21vdmVdKSwKKwkJCSh5eV9uX2NoYXJzKSwgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCWlmICgg
KHl5X25fY2hhcnMpID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9S
RV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5eXJl
c3RhcnQoeXlpbiAgKTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FD
VF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJ
cmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoKHl5
X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVt
YmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSAoeXlfbl9jaGFy
cykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4gMSk7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICopIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICApOworCQlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQor
CisJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwkoeXl0ZXh0X3B0cikgPSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNo
YXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2
aW91c19zdGF0ZSAodm9pZCkKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRf
c3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisgICAgCisJeXlfY3VycmVudF9zdGF0ZSA9
ICh5eV9zdGFydCk7CisKKwlmb3IgKCB5eV9jcCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURK
OyB5eV9jcCA8ICh5eV9jX2J1Zl9wKTsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hB
UiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlm
ICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCSh5eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZSkgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3MpID0geXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRf
c3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gNDA3ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9j
XTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50
X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0
aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlICkKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIAlyZWdpc3RlciBjaGFyICp5
eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYg
KCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCSh5eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZSkgPSB5eV9jdXJyZW50X3N0YXRlOworCQkoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcykg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gNDA3ICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDA2
KTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lm
bmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlu
cHV0ICh2b2lkKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAodm9pZCkKKyNlbmRpZgor
Cit7CisJaW50IGM7CisgICAgCisJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOworCisJ
aWYgKCAqKHl5X2NfYnVmX3ApID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyog
eXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4u
CisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBp
dCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gKQorCQkJLyogVGhpcyB3YXMgcmVh
bGx5IGEgTlVMLiAqLworCQkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSAoeXlfY19idWZfcCkg
LSAoeXl0ZXh0X3B0cik7CisJCQkrKyh5eV9jX2J1Zl9wKTsKKworCQkJc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCAgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgor
CQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhh
dCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJv
Y2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0
byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJ
CQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0
IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICk7CisKKwkJCQkJLypGQUxM
VEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJ
aWYgKCB5eXdyYXAoICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhICh5eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3Bs
dXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KCk7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQo
KTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJ
CQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHl5X2NfYnVmX3ApOwkv
KiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJl
c2VydmUgeXl0ZXh0ICovCisJKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZfcCk7CisKKwlp
ZiAoIGMgPT0gJ1xuJyApCisJCSAgIAorICAgIHl5bGluZW5vKys7Cis7CisKKwlyZXR1cm4gYzsK
K30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3
aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBB
IHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBy
ZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCB5
eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApCit7CisgICAgCisJaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZ
WV9CVUZfU0laRSApOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlu
cHV0X2ZpbGUgKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFN3aXRjaCB0
byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3
IGlucHV0IGJ1ZmZlci4KKyAqIAorICovCisgICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAo
WVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkKK3sKKyAgICAKKwkvKiBUT0RPLiBXZSBzaG91
bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRo
CisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVyX3N0YXRlKG5l
d19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBi
dWZmZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUo
ICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dp
dGNoIGR1cmluZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0
aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxs
ZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAq
LworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworc3RhdGljIHZvaWQg
eXlfbG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQoreworICAgIAkoeXlfbl9jaGFycykgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJKHl5dGV4dF9wdHIpID0gKHl5X2Nf
YnVmX3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJKHl5X2hvbGRfY2hhcikg
PSAqKHl5X2NfYnVmX3ApOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5w
dXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBA
cGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRv
dWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiAKKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAor
CWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBz
aXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4g
dGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1
ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2Mo
Yi0+eXlfYnVmX3NpemUgKyAyICApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7
CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAp
OworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0g
YiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCisgKiAKKyAqLworICAg
IHZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAKKwlp
ZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8q
IE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7CisKKwl5eWZyZWUoKHZvaWQg
KikgYiAgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4K
KyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0
aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVP
Ri4KKyAqLworICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRF
ICBiLCBGSUxFICogZmlsZSApCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgCisJeXlf
Zmx1c2hfYnVmZmVyKGIgKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2Zp
bGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVu
IHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0
YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNl
LCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLwor
ICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5v
ID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+
eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiog
RGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5Q
VVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZs
dXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiAKKyAqLworICAgIHZvaWQg
eXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgKQoreworICAgIAlpZiAoICEgYiAp
CisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQg
dHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRy
YW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwor
CSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9s
ID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9
PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworfQorCisv
KiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVj
b21lcworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUg
dGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBu
ZXcgc3RhdGUuCisgKiAgCisgKi8KK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgKQoreworICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQly
ZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsKKworCS8qIFRoaXMgYmxvY2sgaXMg
Y29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICov
CisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCS8qIE9ubHkgcHVzaCBp
ZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5U
X0JVRkZFUikKKwkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZm
ZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJKHl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZikgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRo
ZSBzdGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5l
dyB0b3AuCisgKiAgCisgKi8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkKQoreworICAg
IAlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwlpZiAoKHl5X2J1ZmZlcl9zdGFja190b3ApID4gMCkKKwkJLS0oeXlfYnVmZmVyX3N0YWNrX3Rv
cCk7CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUo
ICk7CisJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKKwl9Cit9CisKKy8qIEFs
bG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBz
cGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayAodm9pZCkKK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgIAorCWlm
ICghKHl5X2J1ZmZlcl9zdGFjaykpIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3Qg
Zm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVy
IHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBh
bgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8K
KwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3Rh
Y2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoKHl5X2J1ZmZlcl9z
dGFjayksIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OworCQkJCQorCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CisJCSh5eV9i
dWZmZXJfc3RhY2tfdG9wKSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHl5X2J1ZmZlcl9z
dGFja190b3ApID49ICgoeXlfYnVmZmVyX3N0YWNrX21heCkpIC0gMSl7CisKKwkJLyogSW5jcmVh
c2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBn
cm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9j
ID0gKHl5X2J1ZmZlcl9zdGFja19tYXgpICsgZ3Jvd19zaXplOworCQkoeXlfYnVmZmVyX3N0YWNr
KSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCisJCQkJCQkJCSgoeXlfYnVm
ZmVyX3N0YWNrKSwKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVy
X3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0
KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJKHl5X2J1ZmZlcl9zdGFja19t
YXgpID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIg
c3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1
ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6
ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogCisgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUg
KQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAg
IGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6
ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2
ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7CisJaWYg
KCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9z
Y2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIg
dG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9
IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7
CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZl
ID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55
eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIo
YiAgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2Nh
biBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWlu
YXRlZCBzdHJpbmcgdG8gc2NhbgorICogCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMg
dGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9i
eXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3Ry
LHN0cmxlbih5eXN0cikgKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUg
dG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisg
KiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBi
eXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4g
dGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogCisgKiBAcmV0dXJuIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5
dGVzX2xlbiApCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVf
dCBuLCBpOworICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcg
c3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1
ZiA9IChjaGFyICopIHl5YWxsb2MobiAgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9y
ICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07
CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gKTsKKwlpZiAoICEgYiAp
CisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisK
KwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRo
cm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNk
ZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9l
cnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVm
IHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZm
ZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3Jv
X2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtc
CisJCXl5dGV4dFt5eWxlbmddID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJKHl5X2NfYnVmX3ApID0g
eXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19i
dWZfcCk7IFwKKwkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21h
Y3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAo
Z2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSBj
dXJyZW50IGxpbmUgbnVtYmVyLgorICogCisgKi8KK2ludCB5eWdldF9saW5lbm8gICh2b2lkKQor
eworICAgICAgICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0
IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp5eWdldF9pbiAgKHZvaWQpCit7CisgICAgICAgIHJl
dHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogCisgKi8KK0ZJ
TEUgKnl5Z2V0X291dCAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eW91dDsKK30KKworLyoq
IEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogCisgKi8KK3l5X3NpemVf
dCB5eWdldF9sZW5nICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5bGVuZzsKK30KKworLyoq
IEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCisKK2NoYXIgKnl5Z2V0X3RleHQgICh2
b2lkKQoreworICAgICAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSBjdXJyZW50
IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiAKKyAqLwordm9pZCB5eXNl
dF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgKQoreworICAgIAorICAgIHl5bGluZW5vID0gbGlu
ZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBk
aXNjYXJkIHRoZSBjdXJyZW50CisgKiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEg
cmVhZGFibGUgc3RyZWFtLgorICogCisgKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKKyAqLwor
dm9pZCB5eXNldF9pbiAoRklMRSAqICBpbl9zdHIgKQoreworICAgICAgICB5eWluID0gaW5fc3Ry
IDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciApCit7CisgICAgICAgIHl5
b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCB5eWdldF9kZWJ1ZyAgKHZvaWQpCit7CisgICAgICAg
IHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgIGJkZWJ1
ZyApCit7CisgICAgICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCitzdGF0aWMgaW50
IHl5X2luaXRfZ2xvYmFscyAodm9pZCkKK3sKKyAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gaXMg
dGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRl
IGhlcmUuCisgICAgICovCisKKyAgICAvKiBXZSBkbyBub3QgdG91Y2ggeXlsaW5lbm8gdW5sZXNz
IHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gKi8KKyAgICB5eWxpbmVubyA9ICAxOworICAgIAorICAg
ICh5eV9idWZmZXJfc3RhY2spID0gMDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOwor
ICAgICh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IDA7CisgICAgKHl5X2NfYnVmX3ApID0gKGNoYXIg
KikgMDsKKyAgICAoeXlfaW5pdCkgPSAwOworICAgICh5eV9zdGFydCkgPSAwOworCisvKiBEZWZp
bmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47Cisg
ICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5
b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6
IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5bGV4
X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95IGlz
IGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5
eWxleF9kZXN0cm95ICAodm9pZCkKK3sKKyAgICAKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFj
aywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIp
eworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICApOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwl9CisKKwkv
KiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKCh5eV9idWZmZXJfc3RhY2sp
ICk7CisJKHl5X2J1ZmZlcl9zdGFjaykgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2Jh
bHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBu
ZXh0IHRpbWUKKyAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBv
Y2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoICk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
LyoKKyAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRf
cHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIg
KiBzMiwgaW50IG4gKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsg
KytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJM
RU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgKQoreworCXJl
Z2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4g
bjsKK30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgKQoreworCXJl
dHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqeXlyZWFsbG9jICAodm9p
ZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICkKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBp
biB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRo
YXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZv
aWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNh
dXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJ
ICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252
ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVy
biAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCB5eWZy
ZWUgKHZvaWQgKiBwdHIgKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKKworLy9JbmNsdWRpbmcgUHJlLXByb2Nlc3Nvci4KK2V4dGVybiAiQyIgeworICAj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKK30gCisKKy8vCisv
LyBUaGUgWVlfSU5QVVQgbWFjcm8ganVzdCBjYWxscyB0aGlzLiAgTWF5YmUgdGhpcyBjb3VsZCBi
ZSBqdXN0IHB1dCBpbnRvCisvLyB0aGUgbWFjcm8gZGlyZWN0bHkuCisvLworCitpbnQgeXlfaW5w
dXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUpCit7CisgICAgaW50IGxlbjsKKworICAgIGlmICgo
bGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAobGVuID49IG1heF9zaXplKSAKKyAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1
dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1
c2VzIFJFSkVDVCIgKTsKKworICAgIGJ1ZltsZW5dID0gJyAnOworCXJldHVybiBsZW4rMTsKK30K
KworLy8KKy8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4gIFdlIHNl
dCB1cCBnbG9iYWxzIHVzZWQgYnkKKy8vIHl5d3JhcC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIHN1
Y2Nlc3MsIGFzIHBlciB5eXBhcnNlKCkuCisvLworaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFy
Z3ZbXSwgaW50IHN0ckxlbltdLCBpbnQgYXJnYywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0
TG9jYWwpCit7CisgICAgaW50IGFyZ3YwbGVuOworICAgIAorICAgIFNjYW5Gcm9tU3RyaW5nKGFy
Z3ZbMF0pOyAKKyAgICAKKyAgICAvL1N0b3JpbmcgdGhlIEN1cnJlbnQgQ29tcGlsZXIgUGFyc2Ug
Y29udGV4dCBpbnRvIHRoZSBjcHAgc3RydWN0dXJlLgorCWNwcC0+cEMgPSAodm9pZCopJnBhcnNl
Q29udGV4dExvY2FsOworCQorCWlmICghYXJndiB8fCBhcmdjID09IDApCisgICAgICAgIHJldHVy
biAxOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAg
IGlmICghYXJndltpXSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwuZXJyb3IoMCwg
Ik51bGwgc2hhZGVyIHNvdXJjZSBzdHJpbmciLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0TG9jYWwucmVjb3ZlcigpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKCFzdHJMZW4pIHsKKyAgICAgICAgYXJndjBsZW4gPSAoaW50
KSBzdHJsZW4oYXJndlswXSk7CisgICAgICAgIHN0ckxlbiAgID0gJmFyZ3YwbGVuOworICAgIH0K
KyAgICB5eXJlc3RhcnQoMCk7CisgICAgKCZwYXJzZUNvbnRleHRMb2NhbCktPkFmdGVyRU9GID0g
ZmFsc2U7CisgICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBh
cmd2OworICAgIGNwcC0+UGFBcmdjICAgICA9IGFyZ2M7CisgICAgY3BwLT5QYVN0ckxlbiAgID0g
c3RyTGVuOworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKyAgICB5eWxpbmVubyAg
ID0gMTsKKyAgIAorICAgIGlmICgqY3BwLT5QYVN0ckxlbiA+PSAwKSB7ICAgIAorICAgICAgICBp
bnQgcmV0ID0geXlwYXJzZSgodm9pZCopKCZwYXJzZUNvbnRleHRMb2NhbCkpOworICAgICAgICBp
ZiAoY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRG
cm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkKKyAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoY2hhciAqcykg
Cit7CisgICAgaWYgKCgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5BZnRlckVPRikgeworICAg
ICAgICBpZiAoY3BwLT50b2tlbnNCZWZvcmVFT0YgPT0gMSkgeworICAgICAgICAgICAgR2xvYmFs
UGFyc2VDb250ZXh0LT5lcnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsICJwcmUtbWF0dXJl
IEVPRiIsIHMsICIiKTsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5l
cnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsIHl5dGV4dCwgcywgIiIpOworICAgICAgICBH
bG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9ICAgICAgICAgICAgCit9CisKK3Zv
aWQgUGFSZXNlcnZlZFdvcmQoKQoreworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sICJSZXNlcnZlZCB3b3JkLiIsIHl5dGV4dCwgIiIsICIiKTsKKyAgICBHbG9iYWxQYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IFBhSWRlbnRPclR5cGUoVFN0cmluZyYgaWQs
IFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsLCBUU3ltYm9sKiYgc3ltYm9sKQorewor
ICAgIHN5bWJvbCA9IHBhcnNlQ29udGV4dExvY2FsLnN5bWJvbFRhYmxlLmZpbmQoaWQpOworICAg
IGlmIChwYXJzZUNvbnRleHRMb2NhbC5sZXhBZnRlclR5cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYm
IHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBz
dGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlz
VXNlclR5cGUoKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBUWVBFX05BTUU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIElERU5USUZJRVI7Cit9CisKK2ludCBQYVBhcnNlQ29tbWVudChp
bnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCit7CisgICAgaW50
IHRyYW5zaXRpb25GbGFnID0gMDsKKyAgICBpbnQgbmV4dENoYXI7CisgICAgCisgICAgd2hpbGUg
KHRyYW5zaXRpb25GbGFnICE9IDIpIHsKKyAgICAgICAgbmV4dENoYXIgPSB5eWlucHV0KCk7Cisg
ICAgICAgIGlmIChuZXh0Q2hhciA9PSAnXG4nKQorICAgICAgICAgICAgIGxpbmVubysrOworICAg
ICAgICBzd2l0Y2ggKG5leHRDaGFyKSB7CisgICAgICAgIGNhc2UgJyonIDoKKyAgICAgICAgICAg
IHRyYW5zaXRpb25GbGFnID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcv
JyA6ICAvKiBpZiBzdGFyIGlzIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIsIHRoZW4gaXQgaXMgdGhl
IGVuZCBvZiBjb21tZW50ICovCisgICAgICAgICAgICBpZiAodHJhbnNpdGlvbkZsYWcgPT0gMSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAxIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPRiA6CisgICAgICAgICAgICAvKiBSYWlzZSBlcnJvciBt
ZXNzYWdlIGhlcmUgKi8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKHl5bGlu
ZW5vLCAiRW5kIG9mIHNoYWRlciBmb3VuZCBiZWZvcmUgZW5kIG9mIGNvbW1lbnQuIiwgIiIsICIi
LCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBZWV9OVUxMOyAKKyAgICAgICAgZGVmYXVsdCA6ICAvKiBBbnkgb3RoZXIg
Y2hhcmFjdGVyIHdpbGwgYmUgYSBwYXJ0IG9mIHRoZSBjb21tZW50ICovCisgICAgICAgICAgICB0
cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisK
K2V4dGVybiAiQyIgeworCit2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sK
KyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuZGVidWcubWVzc2FnZShF
UHJlZml4Tm9uZSwgbXNnKTsKK30KKwordm9pZCBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNo
YXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2csIHl5bGluZW5vKTsgCit9CisKK3ZvaWQgQ1BQ
U2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sIiIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNn
KQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5lcnJvcih5eWxpbmVubywic3lu
dGF4IGVycm9yIiwgIiIsbXNnLCIiKTsKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKK30KKwordm9pZCBTZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5bGluZW5vICY9
IH5Tb3VyY2VMb2NMaW5lTWFzazsKKyAgICB5eWxpbmVubyB8PSBsaW5lOworfQorCit2b2lkIFNl
dFN0cmluZ051bWJlcihpbnQgc3RyaW5nKQoreworICAgIHl5bGluZW5vID0gKHN0cmluZyA8PCBT
b3VyY2VMb2NTdHJpbmdTaGlmdCkgfCAoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzayk7Cit9
CisKK2ludCBHZXRTdHJpbmdOdW1iZXIodm9pZCkKK3sKKyAgICByZXR1cm4geXlsaW5lbm8gPj4g
MTY7Cit9CisKK2ludCBHZXRMaW5lTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5v
ICYgU291cmNlTG9jTGluZU1hc2s7Cit9CisKK3ZvaWQgSW5jTGluZU51bWJlcih2b2lkKQorewor
ICAgIGlmICgoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPD0gU291cmNlTG9jTGluZU1h
c2spCisgICAgICAgICsreXlsaW5lbm87Cit9CisKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKQor
eworICAgIGlmICgoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPiAwKQorICAgICAgICAt
LXl5bGluZW5vOworfQorCit2b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBp
bnQgbnVtVG9rZW5zKQoreyAgICAKKyAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6
ZSIpKSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJvcHRpbWl6ZSBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKHRv
a2Vuc1sxXSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBl
Y3RlZCBhZnRlciAnb3B0aW1pemUnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9u
IikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdt
YS5vcHRpbWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAi
b2ZmIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFBy
YWdtYS5vcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0
aW1pemUnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0
b2tlbnNbMF0sICJkZWJ1ZyIpKSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVj
dCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RyY21wKHRva2Vuc1sxXSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KCJcIihcIiBleHBlY3RlZCBhZnRlciAnZGVidWcnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9uIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29u
dGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5z
WzJdLCAib2ZmIikpCisgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29u
dGV4dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAn
ZGVidWcnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisKKyNpZmRlZiBQUkFH
TUFfVEFCTEUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMg
cHJhZ21hCisgICAgICAgIC8vIHVzZSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4
dFByYWdtYS5wcmFnbWFUYWJsZSB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJhZ21h
CisgICAgICAgIC8vIEZvciBub3csIGp1c3QgaWdub3JlIHRoZSBwcmFnbWEgdGhhdCB0aGUgaW1w
bGVtZW50YXRpb24gY2Fubm90IHJlY29nbml6ZQorICAgICAgICAvLyBBbiBFeGFtcGxlIG9mIG9u
ZSBzdWNoIGltcGxlbWVudGF0aW9uIGZvciBhIHByYWdtYSB0aGF0IGhhcyBhIHN5bnRheCBsaWtl
CisgICAgICAgIC8vICNwcmFnbWEgcHJhZ21hbmFtZShwcmFnbWF2YWx1ZSkKKyAgICAgICAgLy8g
VGhpcyBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgcHJhZ21hdmFsdWUgYWdhaW5z
dCB0aGUgcHJhZ21hIG5hbWUgaW4gcHJhZ21hVGFibGUuCisgICAgICAgIC8vICAgICAgICAKKyAg
ICAgICAgaWYgKG51bVRva2VucyA9PSA0ICYmICFzdHJjbXAodG9rZW5zWzFdLCAiKCIpICYmICFz
dHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFRQcmFn
bWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4
dFByYWdtYS5wcmFnbWFUYWJsZTsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZTo6aXRlcmF0b3Ig
aXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFUYWJsZS5maW5kKFRTdHJpbmcodG9rZW5z
WzBdKSk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBwcmFnbWFUYWJsZS5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcHJhZ21hVGFibGVbIHRva2Vuc1swXSBdID0gdG9rZW5zWzJd
OworICAgICAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAobnVtVG9rZW5zID49
IDIpIHsKKyAgICAgICAgICAgIFRQcmFnbWFUYWJsZSYgcHJhZ21hVGFibGUgPSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZTsKKyAgICAgICAgICAg
IFRQcmFnbWFUYWJsZTo6aXRlcmF0b3IgaXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBwcmFnbWFU
YWJsZS5maW5kKFRTdHJpbmcodG9rZW5zWzBdKSk7CisgICAgICAgICAgICBpZiAoaXRlciAhPSBw
cmFnbWFUYWJsZS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRva2Vu
c1sxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJhZ21hVGFibGVb
IHRva2Vuc1swXSBdID0gdG9rZW5zWzFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k
aWYgLy8gUFJBR01BX1RBQkxFCisgICAgfQorfQorCit2b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmlu
ZykKK3sKKyAgICBUU3RyaW5nIHN0clNyYzsKKyAgICBzdHJTcmMgPSBUU3RyaW5nKHN0cmluZyk7
CisKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyA9ICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnICsgIiAiICsgc3RyU3JjOworfQorCitjb25z
dCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQoreworICAgIGNwcC0+RXJyTXNnID0gKCgoVFBh
cnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnKS5jX3N0cigpOworICAgIHJldHVybiBj
cHAtPkVyck1zZzsKK30KKwordm9pZCBSZXNldFRTdHJpbmcodm9pZCkKK3sKKyAgICAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyA9ICIiOworfQorCitUQmVoYXZpb3IgR2V0
QmVoYXZpb3IoY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgaWYgKCFzdHJjbXAoInJlcXVp
cmUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhSZXF1aXJlOworICAgIGVsc2UgaWYg
KCFzdHJjbXAoImVuYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaEVuYWJsZTsK
KyAgICBlbHNlIGlmICghc3RyY21wKCJkaXNhYmxlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1
cm4gRUJoRGlzYWJsZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJ3YXJuIiwgYmVoYXZpb3IpKQor
ICAgICAgICByZXR1cm4gRUJoV2FybjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKChUU3RyaW5nKCJiZWhhdmlvciAnIikgKyBiZWhhdmlvciArICInIGlzIG5vdCBzdXBwb3J0
ZWQiKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgfSAgICAgICAg
Cit9CisKK3ZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUs
IGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIFRCZWhhdmlvciBiZWhhdmlvclZhbCA9IEdl
dEJlaGF2aW9yKGJlaGF2aW9yKTsKKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj46OiBpdGVy
YXRvciBpdGVyOworICAgIFRTdHJpbmcgbXNnOworICAgIAorICAgIC8vIHNwZWNpYWwgY2FzZWQg
Zm9yIGFsbCBleHRlbnNpb24KKyAgICBpZiAoIXN0cmNtcChleHROYW1lLCAiYWxsIikpIHsKKyAg
ICAgICAgaWYgKGJlaGF2aW9yVmFsID09IEVCaFJlcXVpcmUgfHwgYmVoYXZpb3JWYWwgPT0gRUJo
RW5hYmxlKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiAnYWxsJyBj
YW5ub3QgaGF2ZSAncmVxdWlyZScgb3IgJ2VuYWJsZScgYmVoYXZpb3IiKTsgIAorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpdGVyID0gICgo
VFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVy
ICE9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKQorICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAg
ICAgICB9ICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBpdGVyID0gKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhleHROYW1lKSk7
CisgICAgICAgIGlmIChpdGVyID09ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNp
b25CZWhhdmlvci5lbmQoKSkgeworICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewor
ICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9y
dGVkIikuY19zdHIoKSk7ICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRUJoRW5hYmxlOgorICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgorICAgICAgICAgICAgY2Fz
ZSBFQmhEaXNhYmxlOgorICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgKChU
UGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fy
bmluZywgbXNnLmNfc3RyKCksIHl5bGluZW5vKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgfQorfQorICAgICAgICAKK30g
IC8vIGV4dGVybiAiQyIKKwordm9pZCBzZXRJbml0aWFsU3RhdGUoKQoreworICAgIHl5X3N0YXJ0
ID0gMTsKK30KKwpJbmRleDogQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmdfdGFiLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0ODMwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBH
TlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29u
J3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODks
IDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9y
IChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFy
Z2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNl
ciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlv
dXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2Vy
IGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJl
b2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5
IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGlj
aCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0
cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAg
IExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNp
YWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGlu
CisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tl
bGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhl
IG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1i
b2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisg
ICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZl
biBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhw
YW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNl
cHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJh
cnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQ
QUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5l
IFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJT
SU9OICIyLjMiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05B
TUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKwor
LyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworCisKKy8q
IFRva2Vucy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQor
ICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBh
bmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5
eXRva2VudHlwZSB7CisgICAgIElOVkFSSUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04g
PSAyNTksCisgICAgIE1FRElVTV9QUkVDSVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04g
PSAyNjEsCisgICAgIFBSRUNJU0lPTiA9IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAg
ICBDT05TVF9RVUFMID0gMjY0LAorICAgICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZ
UEUgPSAyNjYsCisgICAgIElOVF9UWVBFID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAg
Q09OVElOVUUgPSAyNjksCisgICAgIERPID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBG
T1IgPSAyNzIsCisgICAgIElGID0gMjczLAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRV
Uk4gPSAyNzUsCisgICAgIEJWRUMyID0gMjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZF
QzQgPSAyNzgsCisgICAgIElWRUMyID0gMjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZF
QzQgPSAyODEsCisgICAgIFZFQzIgPSAyODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQg
PSAyODQsCisgICAgIE1BVFJJWDIgPSAyODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1B
VFJJWDQgPSAyODcsCisgICAgIElOX1FVQUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAor
ICAgICBJTk9VVF9RVUFMID0gMjkwLAorICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5H
ID0gMjkyLAorICAgICBTVFJVQ1QgPSAyOTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAg
V0hJTEUgPSAyOTUsCisgICAgIFNBTVBMRVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAy
OTcsCisgICAgIElERU5USUZJRVIgPSAyOTgsCisgICAgIFRZUEVfTkFNRSA9IDI5OSwKKyAgICAg
RkxPQVRDT05TVEFOVCA9IDMwMCwKKyAgICAgSU5UQ09OU1RBTlQgPSAzMDEsCisgICAgIEJPT0xD
T05TVEFOVCA9IDMwMiwKKyAgICAgRklFTERfU0VMRUNUSU9OID0gMzAzLAorICAgICBMRUZUX09Q
ID0gMzA0LAorICAgICBSSUdIVF9PUCA9IDMwNSwKKyAgICAgSU5DX09QID0gMzA2LAorICAgICBE
RUNfT1AgPSAzMDcsCisgICAgIExFX09QID0gMzA4LAorICAgICBHRV9PUCA9IDMwOSwKKyAgICAg
RVFfT1AgPSAzMTAsCisgICAgIE5FX09QID0gMzExLAorICAgICBBTkRfT1AgPSAzMTIsCisgICAg
IE9SX09QID0gMzEzLAorICAgICBYT1JfT1AgPSAzMTQsCisgICAgIE1VTF9BU1NJR04gPSAzMTUs
CisgICAgIERJVl9BU1NJR04gPSAzMTYsCisgICAgIEFERF9BU1NJR04gPSAzMTcsCisgICAgIE1P
RF9BU1NJR04gPSAzMTgsCisgICAgIExFRlRfQVNTSUdOID0gMzE5LAorICAgICBSSUdIVF9BU1NJ
R04gPSAzMjAsCisgICAgIEFORF9BU1NJR04gPSAzMjEsCisgICAgIFhPUl9BU1NJR04gPSAzMjIs
CisgICAgIE9SX0FTU0lHTiA9IDMyMywKKyAgICAgU1VCX0FTU0lHTiA9IDMyNCwKKyAgICAgTEVG
VF9QQVJFTiA9IDMyNSwKKyAgICAgUklHSFRfUEFSRU4gPSAzMjYsCisgICAgIExFRlRfQlJBQ0tF
VCA9IDMyNywKKyAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOCwKKyAgICAgTEVGVF9CUkFDRSA9IDMy
OSwKKyAgICAgUklHSFRfQlJBQ0UgPSAzMzAsCisgICAgIERPVCA9IDMzMSwKKyAgICAgQ09NTUEg
PSAzMzIsCisgICAgIENPTE9OID0gMzMzLAorICAgICBFUVVBTCA9IDMzNCwKKyAgICAgU0VNSUNP
TE9OID0gMzM1LAorICAgICBCQU5HID0gMzM2LAorICAgICBEQVNIID0gMzM3LAorICAgICBUSUxE
RSA9IDMzOCwKKyAgICAgUExVUyA9IDMzOSwKKyAgICAgU1RBUiA9IDM0MCwKKyAgICAgU0xBU0gg
PSAzNDEsCisgICAgIFBFUkNFTlQgPSAzNDIsCisgICAgIExFRlRfQU5HTEUgPSAzNDMsCisgICAg
IFJJR0hUX0FOR0xFID0gMzQ0LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNDUsCisgICAgIENBUkVU
ID0gMzQ2LAorICAgICBBTVBFUlNBTkQgPSAzNDcsCisgICAgIFFVRVNUSU9OID0gMzQ4CisgICB9
OworI2VuZGlmCisvKiBUb2tlbnMuICAqLworI2RlZmluZSBJTlZBUklBTlQgMjU4CisjZGVmaW5l
IEhJR0hfUFJFQ0lTSU9OIDI1OQorI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIDI2MAorI2RlZmlu
ZSBMT1dfUFJFQ0lTSU9OIDI2MQorI2RlZmluZSBQUkVDSVNJT04gMjYyCisjZGVmaW5lIEFUVFJJ
QlVURSAyNjMKKyNkZWZpbmUgQ09OU1RfUVVBTCAyNjQKKyNkZWZpbmUgQk9PTF9UWVBFIDI2NQor
I2RlZmluZSBGTE9BVF9UWVBFIDI2NgorI2RlZmluZSBJTlRfVFlQRSAyNjcKKyNkZWZpbmUgQlJF
QUsgMjY4CisjZGVmaW5lIENPTlRJTlVFIDI2OQorI2RlZmluZSBETyAyNzAKKyNkZWZpbmUgRUxT
RSAyNzEKKyNkZWZpbmUgRk9SIDI3MgorI2RlZmluZSBJRiAyNzMKKyNkZWZpbmUgRElTQ0FSRCAy
NzQKKyNkZWZpbmUgUkVUVVJOIDI3NQorI2RlZmluZSBCVkVDMiAyNzYKKyNkZWZpbmUgQlZFQzMg
Mjc3CisjZGVmaW5lIEJWRUM0IDI3OAorI2RlZmluZSBJVkVDMiAyNzkKKyNkZWZpbmUgSVZFQzMg
MjgwCisjZGVmaW5lIElWRUM0IDI4MQorI2RlZmluZSBWRUMyIDI4MgorI2RlZmluZSBWRUMzIDI4
MworI2RlZmluZSBWRUM0IDI4NAorI2RlZmluZSBNQVRSSVgyIDI4NQorI2RlZmluZSBNQVRSSVgz
IDI4NgorI2RlZmluZSBNQVRSSVg0IDI4NworI2RlZmluZSBJTl9RVUFMIDI4OAorI2RlZmluZSBP
VVRfUVVBTCAyODkKKyNkZWZpbmUgSU5PVVRfUVVBTCAyOTAKKyNkZWZpbmUgVU5JRk9STSAyOTEK
KyNkZWZpbmUgVkFSWUlORyAyOTIKKyNkZWZpbmUgU1RSVUNUIDI5MworI2RlZmluZSBWT0lEX1RZ
UEUgMjk0CisjZGVmaW5lIFdISUxFIDI5NQorI2RlZmluZSBTQU1QTEVSMkQgMjk2CisjZGVmaW5l
IFNBTVBMRVJDVUJFIDI5NworI2RlZmluZSBJREVOVElGSUVSIDI5OAorI2RlZmluZSBUWVBFX05B
TUUgMjk5CisjZGVmaW5lIEZMT0FUQ09OU1RBTlQgMzAwCisjZGVmaW5lIElOVENPTlNUQU5UIDMw
MQorI2RlZmluZSBCT09MQ09OU1RBTlQgMzAyCisjZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDMK
KyNkZWZpbmUgTEVGVF9PUCAzMDQKKyNkZWZpbmUgUklHSFRfT1AgMzA1CisjZGVmaW5lIElOQ19P
UCAzMDYKKyNkZWZpbmUgREVDX09QIDMwNworI2RlZmluZSBMRV9PUCAzMDgKKyNkZWZpbmUgR0Vf
T1AgMzA5CisjZGVmaW5lIEVRX09QIDMxMAorI2RlZmluZSBORV9PUCAzMTEKKyNkZWZpbmUgQU5E
X09QIDMxMgorI2RlZmluZSBPUl9PUCAzMTMKKyNkZWZpbmUgWE9SX09QIDMxNAorI2RlZmluZSBN
VUxfQVNTSUdOIDMxNQorI2RlZmluZSBESVZfQVNTSUdOIDMxNgorI2RlZmluZSBBRERfQVNTSUdO
IDMxNworI2RlZmluZSBNT0RfQVNTSUdOIDMxOAorI2RlZmluZSBMRUZUX0FTU0lHTiAzMTkKKyNk
ZWZpbmUgUklHSFRfQVNTSUdOIDMyMAorI2RlZmluZSBBTkRfQVNTSUdOIDMyMQorI2RlZmluZSBY
T1JfQVNTSUdOIDMyMgorI2RlZmluZSBPUl9BU1NJR04gMzIzCisjZGVmaW5lIFNVQl9BU1NJR04g
MzI0CisjZGVmaW5lIExFRlRfUEFSRU4gMzI1CisjZGVmaW5lIFJJR0hUX1BBUkVOIDMyNgorI2Rl
ZmluZSBMRUZUX0JSQUNLRVQgMzI3CisjZGVmaW5lIFJJR0hUX0JSQUNLRVQgMzI4CisjZGVmaW5l
IExFRlRfQlJBQ0UgMzI5CisjZGVmaW5lIFJJR0hUX0JSQUNFIDMzMAorI2RlZmluZSBET1QgMzMx
CisjZGVmaW5lIENPTU1BIDMzMgorI2RlZmluZSBDT0xPTiAzMzMKKyNkZWZpbmUgRVFVQUwgMzM0
CisjZGVmaW5lIFNFTUlDT0xPTiAzMzUKKyNkZWZpbmUgQkFORyAzMzYKKyNkZWZpbmUgREFTSCAz
MzcKKyNkZWZpbmUgVElMREUgMzM4CisjZGVmaW5lIFBMVVMgMzM5CisjZGVmaW5lIFNUQVIgMzQw
CisjZGVmaW5lIFNMQVNIIDM0MQorI2RlZmluZSBQRVJDRU5UIDM0MgorI2RlZmluZSBMRUZUX0FO
R0xFIDM0MworI2RlZmluZSBSSUdIVF9BTkdMRSAzNDQKKyNkZWZpbmUgVkVSVElDQUxfQkFSIDM0
NQorI2RlZmluZSBDQVJFVCAzNDYKKyNkZWZpbmUgQU1QRVJTQU5EIDM0NworI2RlZmluZSBRVUVT
VElPTiAzNDgKKworCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0
aW9ucy4gICovCisKKworCisvKiBCYXNlZCBvbjoKK0FOU0kgQyBZYWNjIGdyYW1tYXIKKworSW4g
MTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNjIGdyYW1tYXIgKHdoaWNoIGlzIGFjY29t
cGFuaWVkIGJ5IGEKK21hdGNoaW5nIExleCBzcGVjaWZpY2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMw
LCAxOTg1IGRyYWZ0IHZlcnNpb24gb2YgdGhlCitBTlNJIEMgc3RhbmRhcmQuICBUb20gU3RvY2tm
aXNjaCByZXBvc3RlZCBpdCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0CitvcmlnaW5hbCwg
YXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAu
bGFuZy5jCitGQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCBmaWxlIHVzZW5ldC9u
ZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLgorCitJIGludGVuZCB0byBrZWVwIHRoaXMgdmVy
c2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgYXMKK3Bvc3Np
YmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMuCisK
K0p1dHRhIERlZ2VuZXIsIDE5OTUKKyovCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJs
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2Nh
bAorLyoKK1RPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1
cHBvcnQgb2xkIGJpc29uLmV4ZSBpbgorY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdl
IGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworI2RlZmluZSBZWVBB
UlNFX1BBUkFNX0RFQ0wgdm9pZCoKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4
dCopKHBhcnNlQ29udGV4dExvY2FsKSkKKyNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0
TG9jYWwKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCog
cGFyc2VDb250ZXh0TG9jYWwpCitleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIqKTsKKworI2RlZmlu
ZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNo
TGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBh
cnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgIFwKKyAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit9CisKKyNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQt
Pmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisj
ZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAh
PSBFU2hMYW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNL
X09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1Bh
Y2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVU5QQUNLX09OTFkoUywg
TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2spIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KEwsICIgc3VwcG9ydGVkIGluIHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAg
ICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywgTCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAo
cGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hM
YW5nUGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFkZXJzIG9u
bHkgIiwgUywgIiIsICIiKTsgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworCisvKiBFbmFibGluZyB0cmFj
ZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisv
KiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZF
UkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0Ug
MQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxp
bmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUg
WVlUT0tFTl9UQUJMRSAwCisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVm
aW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHVuaW9uIFlZU1RZUEUKKworeworICAg
IHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgVFN0cmluZyAqc3RyaW5nOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAgICAg
ICAgIGludCBpOworICAgICAgICAgICAgYm9vbCBiOworICAgICAgICB9OworICAgICAgICBUU3lt
Ym9sKiBzeW1ib2w7CisgICAgfSBsZXg7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxv
YyBsaW5lOworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQYWly
IG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7Cisg
ICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH07
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgICAg
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW07CisgICAgICAgICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7CisgICAgICAgICAg
ICBUVHlwZUxpc3QqIHR5cGVMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworfQorLyog
TGluZSAxOTMgb2YgeWFjYy5jLiAgKi8KKworCVlZU1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZ
U1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNU
WVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYK
KworCisKKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8K
KworCisgICAgZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiwgdm9pZCopOworCisKKy8qIExpbmUg
MjE2IG9mIHlhY2MuYy4gICovCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5k
aWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3Vp
bnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Owor
I2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWdu
ZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBl
X3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9J
TlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2
OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAg
ZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisj
ZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRl
ZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjICBpZiBF
TkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50
aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUg
WVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12
YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8
IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UK
KyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVu
Y3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9u
cy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGlu
dCBpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZSUQgKGkpCisgICAgaW50IGk7CisjZW5kaWYKK3sK
KyAgcmV0dXJuIGk7Cit9CisjZW5kaWYKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZ
RVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsg
ZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0Vf
QUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAg
ICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVk
IF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisj
ICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVk
IF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAg
ICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAg
ZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRl
ZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5p
bmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0g
d2hpbGUgKFlZSUQgKDApKQorIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8q
IFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9t
IG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFz
IDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAo
TikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAg
ICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNr
IHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVh
c29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFD
S19BTExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVN
IFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYg
ISBkZWZpbmVkIF9TVERMSUJfSCBcCisgICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwg
ZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZy
ZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisj
ICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxM
T0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9I
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAo
WVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYK
KyMgIGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAg
aWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNl
bmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisj
aWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1
cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJ
QUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNr
IG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzOworICBZ
WVNUWVBFIHl5dnM7CisgIH07CisKKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3
ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNL
X0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUg
b2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRo
CisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAo
KE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAg
ICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJP
TSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4g
ICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05V
Q19fCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRp
bl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UK
KyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJ
ewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChD
b3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJ
CVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9j
YXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAg
bG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBu
ZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0
aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJv
cGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAg
ICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5
cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7
CQkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZ
U1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlw
dHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2Vu
ZGlmCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0
ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDY5CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZ
WVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTM3OAorCisvKiBZWU5UT0tFTlMgLS0gTnVt
YmVyIG9mIHRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTlRPS0VOUyAgOTQKKy8qIFlZTk5UUyAt
LSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOTlRTICA3OAorLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDE5NQorLyog
WVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgMzAw
CisKKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLworI2RlZmluZSBZWVVOREVGVE9LICAyCisjZGVmaW5lIFlZTUFY
VVRPSyAgIDM0OAorCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCisgICgodW5zaWdu
ZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRP
SykKKworLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVz
cG9uZGluZyB0byBZWUxFWC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNs
YXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAg
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1
LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAgICA2
NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0
LAorICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAg
IDgyLCAgICA4MywgICAgODQsCisgICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODks
ICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhT
W1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlO
IGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9
Cit7CisgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE3LCAgICAxOSwKKyAgICAgIDI0LCAgICAyNiwgICAgMzAsICAgIDMzLCAgICAz
NiwgICAgMzgsICAgIDQwLCAgICA0MiwgICAgNDYsICAgIDQ5LAorICAgICAgNTIsICAgIDU1LCAg
ICA1NywgICAgNjAsICAgIDY0LCAgICA2NywgICAgNjksICAgIDcxLCAgICA3MywgICAgNzUsCisg
ICAgICA3OCwgICAgODEsICAgIDg0LCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTYs
ICAgMTAwLCAgIDEwMiwKKyAgICAgMTA2LCAgIDExMCwgICAxMTIsICAgMTE0LCAgIDExOCwgICAx
MjIsICAgMTI2LCAgIDEzMCwgICAxMzIsICAgMTM2LAorICAgICAxNDAsICAgMTQyLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MiwgICAxNTQsICAgMTU4LCAgIDE2MCwgICAxNjQsCisgICAgIDE2
NiwgICAxNzIsICAgMTc0LCAgIDE3OCwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKKyAgICAgMTk0LCAgIDE5NiwgICAxOTksICAgMjAyLCAgIDIwNywgICAyMTAsICAg
MjEyLCAgIDIxNCwgICAyMTcsICAgMjIxLAorICAgICAyMjUsICAgMjI4LCAgIDIzNCwgICAyMzgs
ICAgMjQxLCAgIDI0NSwgICAyNDgsICAgMjQ5LCAgIDI1MSwgICAyNTMsCisgICAgIDI1NSwgICAy
NTcsICAgMjU5LCAgIDI2MywgICAyNjksICAgMjc2LCAgIDI4NCwgICAyOTMsICAgMjk5LCAgIDMw
MSwKKyAgICAgMzA0LCAgIDMwOSwgICAzMTUsICAgMzIwLCAgIDMyMywgICAzMjUsICAgMzI4LCAg
IDMzMCwgICAzMzIsICAgMzM0LAorICAgICAzMzcsICAgMzM5LCAgIDM0MSwgICAzNDQsICAgMzQ2
LCAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NywgICAzNTksCisgICAgIDM2MSwgICAzNjMsICAg
MzY1LCAgIDM2NywgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc3LCAgIDM3OSwKKyAg
ICAgMzgxLCAgIDM4MywgICAzODUsICAgMzg3LCAgIDM4OSwgICAzOTEsICAgMzkzLCAgIDM5NSwg
ICAzOTcsICAgNDAzLAorICAgICA0MDgsICAgNDEwLCAgIDQxMywgICA0MTcsICAgNDE5LCAgIDQy
MywgICA0MjUsICAgNDMwLCAgIDQzMiwgICA0MzQsCisgICAgIDQzNiwgICA0MzgsICAgNDQwLCAg
IDQ0MiwgICA0NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTEsICAgNDUyLCAgIDQ1MywKKyAgICAgNDU5
LCAgIDQ2MSwgICA0NjMsICAgNDY2LCAgIDQ3MCwgICA0NzIsICAgNDc1LCAgIDQ3NywgICA0ODAs
ICAgNDg2LAorICAgICA0OTAsICAgNDkyLCAgIDQ5NCwgICA0OTksICAgNTAwLCAgIDUwNywgICA1
MDgsICAgNTE3LCAgIDUxOCwgICA1MjYsCisgICAgIDUyOCwgICA1MzAsICAgNTMyLCAgIDUzMywg
ICA1MzYsICAgNTQwLCAgIDU0MywgICA1NDYsICAgNTQ5LCAgIDU1MywKKyAgICAgNTU2LCAgIDU1
OCwgICA1NjEsICAgNTYzLCAgIDU2NSwgICA1NjYKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1z
ZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cmhzW10gPQoreworICAgICAxNjgsICAgICAwLCAgICAtMSwgICAgNDMsICAgIC0x
LCAgICA5NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDUsCisgICAgICAtMSwgICAgNDcsICAg
IC0xLCAgICA3MCwgICAxMjIsICAgIDcxLCAgICAtMSwgICAgOTYsICAgIC0xLCAgICA5NywKKyAg
ICAgIDcyLCAgICA5OCwgICAgNzMsICAgIC0xLCAgICA5OSwgICAgLTEsICAgIDk3LCAgICA3Niwg
ICAgNDgsICAgIC0xLAorICAgICAgOTcsICAgIDUxLCAgICAtMSwgICAgOTcsICAgIDUyLCAgICAt
MSwgICAxMjIsICAgIC0xLCAgIDEwMCwgICAgLTEsCisgICAgIDEwMSwgICAgLTEsICAgIDk3LCAg
ICA3NiwgICAxMDEsICAgIC0xLCAgIDEwMywgICAgNzEsICAgIC0xLCAgIDEwMiwKKyAgICAgIDcx
LCAgICAtMSwgICAxMDQsICAgIDM5LCAgICAtMSwgICAxMDQsICAgIC0xLCAgIDEwNCwgICAxMjAs
ICAgIC0xLAorICAgICAxMDMsICAgIDc3LCAgIDEyMCwgICAgLTEsICAgMTA1LCAgICA3MCwgICAg
LTEsICAgMTM3LCAgICAtMSwgICAgNDMsCisgICAgICAtMSwgICAgNDgsICAgIC0xLCAgICA5Nywg
ICAgLTEsICAgIDUxLCAgIDEwNiwgICAgLTEsICAgIDUyLCAgIDEwNiwKKyAgICAgIC0xLCAgIDEw
NywgICAxMDYsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgODEsICAgIC0x
LAorICAgICAxMDYsICAgIC0xLCAgIDEwOCwgICAgODUsICAgMTA2LCAgICAtMSwgICAxMDgsICAg
IDg2LCAgIDEwNiwgICAgLTEsCisgICAgIDEwOCwgICAgLTEsICAgMTA5LCAgICA4NCwgICAxMDgs
ICAgIC0xLCAgIDEwOSwgICAgODIsICAgMTA4LCAgICAtMSwKKyAgICAgMTA5LCAgICAtMSwgICAx
MTAsICAgIC0xLCAgIDExMSwgICAgODgsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg5LAorICAg
ICAxMTAsICAgIC0xLCAgIDExMSwgICAgNTMsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDU0LCAg
IDExMCwgICAgLTEsCisgICAgIDExMSwgICAgLTEsICAgMTEyLCAgICA1NSwgICAxMTEsICAgIC0x
LCAgIDExMiwgICAgNTYsICAgMTExLCAgICAtMSwKKyAgICAgMTEyLCAgICAtMSwgICAxMTMsICAg
IC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIDU3LAorICAgICAxMTUs
ICAgIC0xLCAgIDExNiwgICAgLTEsICAgMTE3LCAgICA1OSwgICAxMTYsICAgIC0xLCAgIDExNywg
ICAgLTEsCisgICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAgIC0xLCAgIDEx
OCwgICAgOTMsICAgMTIyLCAgICA3OCwKKyAgICAgMTIwLCAgICAtMSwgICAxMTksICAgIC0xLCAg
IDEwNiwgICAxMjEsICAgMTIwLCAgICAtMSwgICAgNzksICAgIC0xLAorICAgICAgNjAsICAgIC0x
LCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjksICAgIC0xLCAgIDEyMCwgICAgLTEs
CisgICAgIDEyMiwgICAgNzcsICAgMTIwLCAgICAtMSwgICAxMTksICAgIC0xLCAgIDEyNSwgICAg
ODAsICAgIC0xLCAgIDEzMywKKyAgICAgIDgwLCAgICAtMSwgICAgIDcsICAgMTM4LCAgIDEzOSwg
ICAgODAsICAgIC0xLCAgIDEyNiwgICAgNzEsICAgIC0xLAorICAgICAxMjgsICAgIC0xLCAgIDEy
NywgICAgLTEsICAgMTI4LCAgIDEzMCwgICAgLTEsICAgMTI3LCAgICA3NywgICAxMzAsCisgICAg
ICAtMSwgICAxMzUsICAgIDQzLCAgICA3MCwgICAgLTEsICAgMTM3LCAgICA0MywgICAgLTEsICAg
MTM3LCAgICA0MywKKyAgICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0xLCAgIDEzNiwgICAxMzEs
ICAgMTI5LCAgICAtMSwgICAxMzEsICAgMTI5LAorICAgICAgLTEsICAgMTM2LCAgIDEzMSwgICAx
MzIsICAgIC0xLCAgIDEzMSwgICAxMzIsICAgIC0xLCAgICAtMSwgICAgMzMsCisgICAgICAtMSwg
ICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgMTM3LCAgICAtMSwgICAxMzQsICAgIC0xLCAg
IDEzMywKKyAgICAgIDc3LCAgICA0MywgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcy
LCAgICA3MywgICAgLTEsICAgMTMzLAorICAgICAgNzcsICAgIDQzLCAgICA3MiwgICAxMjMsICAg
IDczLCAgICAtMSwgICAxMzMsICAgIDc3LCAgICA0MywgICAgNzIsCisgICAgICA3MywgICAgNzks
ICAgMTQ2LCAgICAtMSwgICAxMzMsICAgIDc3LCAgICA0MywgICAgNzIsICAgMTIzLCAgICA3MywK
KyAgICAgIDc5LCAgIDE0NiwgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDc5LCAgIDE0
NiwgICAgLTEsICAgMTM1LAorICAgICAgLTEsICAgMTM1LCAgICA0MywgICAgLTEsICAgMTM1LCAg
ICA0MywgICAgNzIsICAgIDczLCAgICAtMSwgICAxMzUsCisgICAgICA0MywgICAgNzIsICAgMTIz
LCAgICA3MywgICAgLTEsICAgMTM1LCAgICA0MywgICAgNzksICAgMTQ2LCAgICAtMSwKKyAgICAg
ICAzLCAgICA0MywgICAgLTEsICAgMTM3LCAgICAtMSwgICAxMzYsICAgMTM3LCAgICAtMSwgICAg
IDksICAgIC0xLAorICAgICAgIDgsICAgIC0xLCAgICAzNywgICAgLTEsICAgICAzLCAgICAzNywg
ICAgLTEsICAgIDM2LCAgICAtMSwgICAxMzksCisgICAgICAtMSwgICAxMzgsICAgMTM5LCAgICAt
MSwgICAgIDQsICAgIC0xLCAgICAgNSwgICAgLTEsICAgICA2LCAgICAtMSwKKyAgICAgMTQwLCAg
ICAtMSwgICAxNDAsICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0xLCAgICAzOSwgICAgLTEsICAg
IDExLAorICAgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTAsICAgIC0xLCAgICAyNywgICAgLTEs
ICAgIDI4LCAgICAtMSwgICAgMjksCisgICAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyMiwgICAg
LTEsICAgIDIzLCAgICAtMSwgICAgMjQsICAgIC0xLCAgICAyNSwKKyAgICAgIC0xLCAgICAyNiwg
ICAgLTEsICAgIDMwLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAzMiwgICAgLTEsICAgIDQxLAor
ICAgICAgLTEsICAgIDQyLCAgICAtMSwgICAxNDEsICAgIC0xLCAgICA0NCwgICAgLTEsICAgIDM4
LCAgICA0MywgICAgNzQsCisgICAgIDE0MiwgICAgNzUsICAgIC0xLCAgICAzOCwgICAgNzQsICAg
MTQyLCAgICA3NSwgICAgLTEsICAgMTQzLCAgICAtMSwKKyAgICAgMTQyLCAgIDE0MywgICAgLTEs
ICAgMTM3LCAgIDE0NCwgICAgODAsICAgIC0xLCAgIDE0NSwgICAgLTEsICAgMTQ0LAorICAgICAg
NzcsICAgMTQ1LCAgICAtMSwgICAgNDMsICAgIC0xLCAgICA0MywgICAgNzIsICAgMTIzLCAgICA3
MywgICAgLTEsCisgICAgIDEyMCwgICAgLTEsICAgMTI0LCAgICAtMSwgICAxNTAsICAgIC0xLCAg
IDE0OSwgICAgLTEsICAgMTQ3LCAgICAtMSwKKyAgICAgMTU2LCAgICAtMSwgICAxNTcsICAgIC0x
LCAgIDE2MCwgICAgLTEsICAgMTY3LCAgICAtMSwgICAgNzQsICAgIDc1LAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzQsICAgMTUxLCAgIDE1NSwgICAxNTIsICAgIDc1LCAgICAtMSwgICAx
NTQsCisgICAgICAtMSwgICAxNDksICAgIC0xLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NCwg
ICAxNTUsICAgIDc1LCAgICAtMSwKKyAgICAgMTQ4LCAgICAtMSwgICAxNTUsICAgMTQ4LCAgICAt
MSwgICAgODAsICAgIC0xLCAgIDEyMiwgICAgODAsICAgIC0xLAorICAgICAgMTgsICAgIDcwLCAg
IDEyMiwgICAgNzEsICAgMTU4LCAgICAtMSwgICAxNDgsICAgIDE2LCAgIDE0OCwgICAgLTEsCisg
ICAgIDE0OCwgICAgLTEsICAgMTIyLCAgICAtMSwgICAxMzUsICAgIDQzLCAgICA3OSwgICAxNDYs
ICAgIC0xLCAgICAtMSwKKyAgICAgIDQwLCAgICA3MCwgICAxNjEsICAgMTU5LCAgICA3MSwgICAx
NTMsICAgIC0xLCAgICAtMSwgICAgMTUsICAgMTYyLAorICAgICAxNDgsICAgIDQwLCAgICA3MCwg
ICAxMjIsICAgIDcxLCAgICA4MCwgICAgLTEsICAgIC0xLCAgICAxNywgICAgNzAsCisgICAgIDE2
MywgICAxNjQsICAgMTY2LCAgICA3MSwgICAxNTMsICAgIC0xLCAgIDE1NiwgICAgLTEsICAgMTQ3
LCAgICAtMSwKKyAgICAgMTU5LCAgICAtMSwgICAgLTEsICAgMTY1LCAgICA4MCwgICAgLTEsICAg
MTY1LCAgICA4MCwgICAxMjIsICAgIC0xLAorICAgICAgMTQsICAgIDgwLCAgICAtMSwgICAgMTMs
ICAgIDgwLCAgICAtMSwgICAgMjAsICAgIDgwLCAgICAtMSwgICAgMjAsCisgICAgIDEyMiwgICAg
ODAsICAgIC0xLCAgICAxOSwgICAgODAsICAgIC0xLCAgIDE2OSwgICAgLTEsICAgMTY4LCAgIDE2
OSwKKyAgICAgIC0xLCAgIDE3MCwgICAgLTEsICAgMTI0LCAgICAtMSwgICAgLTEsICAgMTI1LCAg
IDE3MSwgICAxNTQsICAgIC0xCit9OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUg
d2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDE2IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAxODMsICAgMTgzLCAgIDIxOCwg
ICAyMjEsICAgMjM0LCAgIDIzOSwgICAyNDQsICAgMjUwLCAgIDI1MywKKyAgICAgMzI2LCAgIDMy
OSwgICA0MzgsICAgNDQ4LCAgIDQ2MSwgICA0NjksICAgNTY3LCAgIDU3MCwgICA1NzgsICAgNTgy
LAorICAgICA1ODksICAgNTkzLCAgIDYwMCwgICA2MDYsICAgNjE1LCAgIDYyMywgICA2ODcsICAg
Njk0LCAgIDcwNCwgICA3MDcsCisgICAgIDcxNywgICA3MjcsICAgNzQ4LCAgIDc0OSwgICA3NTAs
ICAgNzU1LCAgIDc1NiwgICA3NjUsICAgNzc3LCAgIDc3OCwKKyAgICAgNzg2LCAgIDc5NywgICA4
MDEsICAgODAyLCAgIDgxMiwgICA4MjIsICAgODMyLCAgIDg0NSwgICA4NDYsICAgODU3LAorICAg
ICA4NzEsICAgODc1LCAgIDg3OSwgICA4ODMsICAgODg0LCAgIDg5NywgICA4OTgsICAgOTExLCAg
IDkxMiwgICA5MjUsCisgICAgIDkyNiwgICA5NDMsICAgOTQ0LCAgIDk1OCwgICA5NTksICAgOTYw
LCAgIDk2MSwgICA5NjIsICAgOTY2LCAgIDk2OSwKKyAgICAgOTgwLCAgIDk4OCwgIDEwMTMsICAx
MDE4LCAgMTAyNSwgIDEwNjEsICAxMDY0LCAgMTA3MSwgIDEwNzksICAxMTAwLAorICAgIDExMTks
ICAxMTMwLCAgMTE1OSwgIDExNjQsICAxMTc0LCAgMTE3OSwgIDExODksICAxMTkyLCAgMTE5NSwg
IDExOTgsCisgICAgMTIwNCwgIDEyMTEsICAxMjIxLCAgMTIzMywgIDEyNTEsICAxMjc1LCAgMTMw
OCwgIDEzNDQsICAxMzY3LCAgMTM3MSwKKyAgICAxMzg1LCAgMTQwNSwgIDE0MzQsICAxNDU0LCAg
MTUzMCwgIDE1NDAsICAxNTY2LCAgMTU2OSwgIDE1NzUsICAxNTgzLAorICAgIDE1OTEsICAxNTk5
LCAgMTYwMiwgIDE2MDksICAxNjEyLCAgMTYxNSwgIDE2MjEsICAxNjI0LCAgMTYzOSwgIDE2NDMs
CisgICAgMTY0NywgIDE2NTEsICAxNjYwLCAgMTY2NSwgIDE2NzAsICAxNjc1LCAgMTY4MCwgIDE2
ODUsICAxNjkwLCAgMTY5NSwKKyAgICAxNzAwLCAgMTcwNSwgIDE3MTEsICAxNzE3LCAgMTcyMywg
IDE3MjgsICAxNzMzLCAgMTczOCwgIDE3NTEsICAxNzY0LAorICAgIDE3NzIsICAxNzc1LCAgMTc5
MCwgIDE4MTYsICAxODIwLCAgMTgyNiwgIDE4MzQsICAxODUwLCAgMTg1NCwgIDE4NTgsCisgICAg
MTg1OSwgIDE4NjUsICAxODY2LCAgMTg2NywgIDE4NjgsICAxODY5LCAgMTg3MywgIDE4NzQsICAx
ODc0LCAgMTg3NCwKKyAgICAxODgyLCAgMTg4MywgIDE4ODgsICAxODkxLCAgMTg5OSwgIDE5MDIs
ICAxOTA4LCAgMTkwOSwgIDE5MTMsICAxOTIxLAorICAgIDE5MjUsICAxOTM1LCAgMTk0MCwgIDE5
NTcsICAxOTU3LCAgMTk2MiwgIDE5NjIsICAxOTY5LCAgMTk2OSwgIDE5NzcsCisgICAgMTk4MCwg
IDE5ODYsICAxOTg5LCAgMTk5NSwgIDE5OTksICAyMDA2LCAgMjAxMywgIDIwMjAsICAyMDI3LCAg
MjAzOCwKKyAgICAyMDQ3LCAgMjA1MSwgIDIwNTgsICAyMDYxLCAgMjA2NywgIDIwNjcKK307Cisj
ZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUK
Ky8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1C
T0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRP
S0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1l
W10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJI
SUdIX1BSRUNJU0lPTiIsCisgICJNRURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAi
UFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCisgICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJG
TE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKKyAgIkRPIiwgIkVM
U0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwK
KyAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJW
RUM0IiwgIk1BVFJJWDIiLAorICAiTUFUUklYMyIsICJNQVRSSVg0IiwgIklOX1FVQUwiLCAiT1VU
X1FVQUwiLCAiSU5PVVRfUVVBTCIsICJVTklGT1JNIiwKKyAgIlZBUllJTkciLCAiU1RSVUNUIiwg
IlZPSURfVFlQRSIsICJXSElMRSIsICJTQU1QTEVSMkQiLCAiU0FNUExFUkNVQkUiLAorICAiSURF
TlRJRklFUiIsICJUWVBFX05BTUUiLCAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisg
ICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAiUklHSFRfT1Ai
LCAiSU5DX09QIiwKKyAgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9PUCIsICJORV9P
UCIsICJBTkRfT1AiLCAiT1JfT1AiLAorICAiWE9SX09QIiwgIk1VTF9BU1NJR04iLCAiRElWX0FT
U0lHTiIsICJBRERfQVNTSUdOIiwgIk1PRF9BU1NJR04iLAorICAiTEVGVF9BU1NJR04iLCAiUklH
SFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsICJPUl9BU1NJR04iLAorICAi
U1VCX0FTU0lHTiIsICJMRUZUX1BBUkVOIiwgIlJJR0hUX1BBUkVOIiwgIkxFRlRfQlJBQ0tFVCIs
CisgICJSSUdIVF9CUkFDS0VUIiwgIkxFRlRfQlJBQ0UiLCAiUklHSFRfQlJBQ0UiLCAiRE9UIiwg
IkNPTU1BIiwgIkNPTE9OIiwKKyAgIkVRVUFMIiwgIlNFTUlDT0xPTiIsICJCQU5HIiwgIkRBU0gi
LCAiVElMREUiLCAiUExVUyIsICJTVEFSIiwgIlNMQVNIIiwKKyAgIlBFUkNFTlQiLCAiTEVGVF9B
TkdMRSIsICJSSUdIVF9BTkdMRSIsICJWRVJUSUNBTF9CQVIiLCAiQ0FSRVQiLAorICAiQU1QRVJT
QU5EIiwgIlFVRVNUSU9OIiwgIiRhY2NlcHQiLCAidmFyaWFibGVfaWRlbnRpZmllciIsCisgICJw
cmltYXJ5X2V4cHJlc3Npb24iLCAicG9zdGZpeF9leHByZXNzaW9uIiwgImludGVnZXJfZXhwcmVz
c2lvbiIsCisgICJmdW5jdGlvbl9jYWxsIiwgImZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIiwgImZ1
bmN0aW9uX2NhbGxfZ2VuZXJpYyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0
ZXJzIiwKKyAgImZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlv
bl9jYWxsX2hlYWRlciIsCisgICJmdW5jdGlvbl9pZGVudGlmaWVyIiwgInVuYXJ5X2V4cHJlc3Np
b24iLCAidW5hcnlfb3BlcmF0b3IiLAorICAibXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiIsICJh
ZGRpdGl2ZV9leHByZXNzaW9uIiwgInNoaWZ0X2V4cHJlc3Npb24iLAorICAicmVsYXRpb25hbF9l
eHByZXNzaW9uIiwgImVxdWFsaXR5X2V4cHJlc3Npb24iLCAiYW5kX2V4cHJlc3Npb24iLAorICAi
ZXhjbHVzaXZlX29yX2V4cHJlc3Npb24iLCAiaW5jbHVzaXZlX29yX2V4cHJlc3Npb24iLAorICAi
bG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9leHByZXNzaW9uIiwKKyAgImxv
Z2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHByZXNzaW9uIiwKKyAgImFzc2ln
bm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9yIiwgImV4cHJlc3Npb24iLAor
ICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIsICJmdW5jdGlvbl9wcm90b3R5
cGUiLAorICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIiwKKyAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJw
YXJhbWV0ZXJfZGVjbGFyYXRpb24iLAorICAicGFyYW1ldGVyX3F1YWxpZmllciIsICJwYXJhbWV0
ZXJfdHlwZV9zcGVjaWZpZXIiLAorICAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2Rl
Y2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKKyAgInR5cGVfcXVhbGlmaWVyIiwg
InR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVy
IiwKKyAgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCisg
ICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRpYWxp
emVyIiwKKyAgImRlY2xhcmF0aW9uX3N0YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxlX3N0
YXRlbWVudCIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnQiLCAiQDEiLCAiQDIiLCAic3RhdGVtZW50
X25vX25ld19zY29wZSIsCisgICJjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwgInN0
YXRlbWVudF9saXN0IiwKKyAgImV4cHJlc3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0
ZW1lbnQiLAorICAic2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVy
YXRpb25fc3RhdGVtZW50IiwgIkAzIiwKKyAgIkA0IiwgIkA1IiwgImZvcl9pbml0X3N0YXRlbWVu
dCIsICJjb25kaXRpb25vcHQiLCAiZm9yX3Jlc3Rfc3RhdGVtZW50IiwKKyAgImp1bXBfc3RhdGVt
ZW50IiwgInRyYW5zbGF0aW9uX3VuaXQiLCAiZXh0ZXJuYWxfZGVjbGFyYXRpb24iLAorICAiZnVu
Y3Rpb25fZGVmaW5pdGlvbiIsICJANiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5U
CisvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAy
NTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwKKyAgICAgMjY1LCAgIDI2Niwg
ICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAor
ICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgy
LCAgIDI4MywgICAyODQsCisgICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAg
MjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwKKyAgICAgMjk1LCAgIDI5NiwgICAyOTcs
ICAgMjk4LCAgIDI5OSwgICAzMDAsICAgMzAxLCAgIDMwMiwgICAzMDMsICAgMzA0LAorICAgICAz
MDUsICAgMzA2LCAgIDMwNywgICAzMDgsICAgMzA5LCAgIDMxMCwgICAzMTEsICAgMzEyLCAgIDMx
MywgICAzMTQsCisgICAgIDMxNSwgICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAg
IDMyMSwgICAzMjIsICAgMzIzLCAgIDMyNCwKKyAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4
LCAgIDMyOSwgICAzMzAsICAgMzMxLCAgIDMzMiwgICAzMzMsICAgMzM0LAorICAgICAzMzUsICAg
MzM2LCAgIDMzNywgICAzMzgsICAgMzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAz
NDQsCisgICAgIDM0NSwgICAzNDYsICAgMzQ3LCAgIDM0OAorfTsKKyMgZW5kaWYKKworLyogWVlS
MVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAg
OTQsICAgIDk1LCAgICA5NiwgICAgOTYsICAgIDk2LCAgICA5NiwgICAgOTYsICAgIDk3LCAgICA5
NywKKyAgICAgIDk3LCAgICA5NywgICAgOTcsICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAg
IDEwMCwgICAxMDEsICAgMTAxLAorICAgICAxMDIsICAgMTAyLCAgIDEwMywgICAxMDMsICAgMTA0
LCAgIDEwNSwgICAxMDUsICAgMTA1LCAgIDEwNiwgICAxMDYsCisgICAgIDEwNiwgICAxMDYsICAg
MTA3LCAgIDEwNywgICAxMDcsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA5LCAgIDEwOSwKKyAg
ICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTExLCAgIDExMSwgICAxMTEsICAgMTExLCAgIDExMiwg
ICAxMTIsICAgMTEyLAorICAgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE2LCAgIDEx
NywgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksCisgICAgIDExOSwgICAxMjAsICAgMTIwLCAg
IDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwKKyAgICAgMTIz
LCAgIDEyNCwgICAxMjQsICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNywgICAxMjcs
ICAgMTI4LAorICAgICAxMjksICAgMTI5LCAgIDEzMCwgICAxMzAsICAgMTMwLCAgIDEzMCwgICAx
MzEsICAgMTMxLCAgIDEzMSwgICAxMzEsCisgICAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEzMywg
ICAxMzMsICAgMTMzLCAgIDEzMywgICAxMzMsICAgMTM0LCAgIDEzNCwKKyAgICAgMTM0LCAgIDEz
NCwgICAxMzQsICAgMTM0LCAgIDEzNSwgICAxMzUsICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM2
LAorICAgICAxMzYsICAgMTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzksICAg
MTM5LCAgIDE0MCwgICAxNDAsCisgICAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAs
ICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwKKyAgICAgMTQwLCAgIDE0MCwgICAx
NDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDEsICAgMTQxLAorICAg
ICAxNDIsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDUsICAgMTQ2LCAg
IDE0NywgICAxNDgsCisgICAgIDE0OCwgICAxNDksICAgMTQ5LCAgIDE0OSwgICAxNDksICAgMTQ5
LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MCwKKyAgICAgMTUzLCAgIDE1MywgICAxNTQsICAg
MTU0LCAgIDE1NSwgICAxNTUsICAgMTU2LCAgIDE1NiwgICAxNTcsICAgMTU4LAorICAgICAxNTgs
ICAgMTU5LCAgIDE1OSwgICAxNjEsICAgMTYwLCAgIDE2MiwgICAxNjAsICAgMTYzLCAgIDE2MCwg
ICAxNjQsCisgICAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsICAgMTY3LCAgIDE2
NywgICAxNjcsICAgMTY3LCAgIDE2NywKKyAgICAgMTY4LCAgIDE2OCwgICAxNjksICAgMTY5LCAg
IDE3MSwgICAxNzAKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21w
b3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAorICAgICAgIDEsICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLAorICAgICAgIDMsICAgICAxLCAgICAgMSwg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICAz
LCAgICAgMSwKKyAgICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAzLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDMsCisgICAgICAgMiwgICAg
IDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAg
MSwKKyAgICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgNSwgICAgIDEsICAgICAyLAorICAgICAgIDQsICAgICA1LCAgICAgNCwgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCisgICAgICAgMSwgICAgIDEsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwKKyAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgNSwgICAgIDQsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAg
ICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAs
ICAgICA1LAorICAgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMiwgICAg
IDEsICAgICAyLCAgICAgNSwgICAgIDMsCisgICAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMCwg
ICAgIDYsICAgICAwLCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwKKyAgICAgICAxLCAgICAg
MSwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAy
LAorICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMworfTsKKworLyog
WVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0
YXRlCisgICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcg
ZWxzZSB0byBkby4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAg
IDAsICAgMTEzLCAgIDExNCwgICAxMTUsICAgICAwLCAgIDEwNywgICAxMDYsICAgMTIxLCAgIDEx
OSwKKyAgICAgMTIwLCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAg
IDEyMiwgICAxMjMsICAgMTI0LAorICAgICAxMzEsICAgMTMyLCAgIDEzMywgICAxMTAsICAgMTA4
LCAgICAgMCwgICAxMTgsICAgMTM0LCAgIDEzNSwgICAxMzcsCisgICAgIDE5MywgICAxOTQsICAg
ICAwLCAgICA3NiwgICAgODYsICAgICAwLCAgICA5MSwgICAgOTgsICAgICAwLCAgIDEwNCwKKyAg
ICAgICAwLCAgIDExMSwgICAxMTYsICAgMTM2LCAgICAgMCwgICAxOTAsICAgMTkyLCAgIDEwOSwg
ICAxMDMsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA3MSwgICAgIDAsICAgIDc0LCAgICA4
NiwgICAgIDAsICAgIDg3LCAgICA4OCwgICAgODksCisgICAgICA3NywgICAgIDAsICAgIDg2LCAg
ICAgMCwgICAgNzIsICAgIDk5LCAgIDEwNSwgICAxMTIsICAgICAwLCAgICAgMSwKKyAgICAgMTkx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDAsICAgICAwLCAgIDE5NSwgICAgNzgs
ICAgIDgzLAorICAgICAgODUsICAgIDkwLCAgICAgMCwgICAgOTIsICAgIDc5LCAgICAgMCwgICAg
IDAsICAgICAyLCAgICAgNSwgICAgIDQsCisgICAgICAgNiwgICAgMjcsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDM0LCAgICAzMywgICAgMzIsICAgICAzLCAgICAgOCwKKyAgICAgIDI4LCAgICAx
MCwgICAgMTUsICAgIDE2LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAgMCwgICAgMzUsICAgICAw
LAorICAgICAgMzgsICAgIDQxLCAgICA0MiwgICAgNDcsICAgIDUwLCAgICA1MSwgICAgNTIsICAg
IDUzLCAgICA1NSwgICAgNTcsCisgICAgICA1OSwgICAgNzAsICAgICAwLCAgICAyNSwgICAgNzMs
ICAgICAwLCAgIDE0NSwgICAgIDAsICAgMTQzLCAgIDEzOSwKKyAgICAgMTQxLCAgICAgMCwgICAg
IDAsICAgMTc1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTU3LAorICAg
ICAxNjIsICAgMTY2LCAgICAzNSwgICAgNjEsICAgIDY4LCAgICAgMCwgICAxNDgsICAgICAwLCAg
IDEwNCwgICAxNTEsCisgICAgIDE2NCwgICAxNTAsICAgMTQ5LCAgICAgMCwgICAxNTIsICAgMTUz
LCAgIDE1NCwgICAxNTUsICAgIDgwLCAgICA4MiwKKyAgICAgIDg0LCAgICAgMCwgICAgIDAsICAg
MTAwLCAgICAgMCwgICAxNDcsICAgMTAyLCAgICAyOSwgICAgMzAsICAgICAwLAorICAgICAgMTIs
ICAgIDEzLCAgICAgMCwgICAgIDAsICAgIDE5LCAgICAxOCwgICAgIDAsICAgMTE4LCAgICAyMiwg
ICAgMjQsCisgICAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxMTcsICAgMTM4LCAgICAgMCwgICAgIDAsICAgMTQyLAorICAgICAxODYsICAgMTg1
LCAgICAgMCwgICAxNzcsICAgICAwLCAgIDE4OSwgICAxODcsICAgICAwLCAgIDE3MywgICAxNTYs
CisgICAgICAgMCwgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDYzLCAgICAgMCwgICAg
IDAsICAgMTY3LCAgIDE2MywKKyAgICAgMTY1LCAgICAgMCwgICAgOTMsICAgICAwLCAgICA5Nywg
ICAxMDEsICAgICA3LCAgICAgMCwgICAgMTQsICAgIDI2LAorICAgICAgMTEsICAgIDE3LCAgICAy
MywgICAgMzYsICAgIDM3LCAgICA0MCwgICAgMzksICAgIDQ1LCAgICA0NiwgICAgNDMsCisgICAg
ICA0NCwgICAgNDgsICAgIDQ5LCAgICA1NCwgICAgNTYsICAgIDU4LCAgICAgMCwgICAgIDAsICAg
MTQ0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxODgsICAgICAwLCAgIDE1OCwgICAgNjIs
ICAgIDY5LCAgICAgMCwgICAgIDAsICAgIDk0LAorICAgICAgIDksICAgICAwLCAgIDE0NiwgICAg
IDAsICAgMTgwLCAgIDE3OSwgICAxODIsICAgICAwLCAgIDE3MSwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgIDgxLCAgICA5NSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAxODEsICAgICAwLCAg
ICAgMCwKKyAgICAgMTcwLCAgIDE2OCwgICAgIDAsICAgICAwLCAgIDE1OSwgICAgOTYsICAgICAw
LCAgIDE4MywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTYxLCAgIDE3NCwgICAxNjAsICAg
ICAwLCAgIDE4NCwgICAxNzgsICAgMTY5LCAgIDE3MiwgICAxNzYKK307CisKKy8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10g
PQoreworICAgICAgLTEsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMjI3LCAgIDEwMSwgICAxMDIs
ICAgMTAzLCAgIDEwNCwgICAxMDUsCisgICAgIDEwNiwgICAxMDcsICAgMTQyLCAgIDEwOSwgICAx
MTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwKKyAgICAgMTE2LCAgIDExNywg
ICAxMTgsICAgMTE5LCAgIDEyMCwgICAxNDMsICAgMTQ0LCAgIDIxNiwgICAxNDUsICAgMTIyLAor
ICAgICAxNDYsICAgMTQ3LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICA3OSwgICAgNjAsICAgIDYx
LCAgICA4MCwgICAgMzUsCisgICAgICAzNiwgICAgMzcsICAgIDM4LCAgIDEyMywgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDc0LCAgICA3NSwKKyAgICAgMTI3LCAgIDEyOCwgICAxNjYs
ICAgMTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDIxMCwgICAyNzEsICAgMjkyLAorICAgICAy
OTMsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMjgxLCAgIDI3MCwgICAxNTYsICAgMjUzLCAgIDIw
MiwgICAyNTAsCisgICAgIDI2NiwgICAyNzgsICAgMjc5LCAgIDE1NywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNTMKK307CisKKy8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFC
TEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUg
WVlQQUNUX05JTkYgLTI1Mworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7
CisgICAgMTI2OSwgICAtMTEsICAtMjUzLCAgLTI1MywgIC0yNTMsICAgMTI0LCAgLTI1MywgIC0y
NTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1Mywg
IC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAtMjUzLCAgLTI1
MywgIC0yNTMsICAtMjUzLCAgIC00MCwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAg
LTI1MywgICAtNjUsICAgLTUyLCAgIC01MCwgICAgMjEsICAgIDE2LCAgLTI1MywgICAtMTAsICAx
MzEwLCAgLTI1MywKKyAgICAxMzM0LCAgLTI1MywgICAtMTIsICAtMjUzLCAgMTE4MiwgIC0yNTMs
ICAtMjUzLCAgLTI1MywgIC0yNTMsICAxMzM0LAorICAgICAgLTMsICAxMzEwLCAgLTI1MywgICAg
MTAsICAtMjUzLCAgICAzMiwgICAgNjgsICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1Mywg
IDEzMTAsICAgMTIyLCAgICA3OCwgIC0yNTMsICAgIDExLCAgLTI1MywgIC0yNTMsICAgOTkzLCAg
LTI1MywKKyAgICAtMjUzLCAgICAzMSwgIDEzMTAsICAgIDgzLCAgIDIwMiwgIC0yNTMsICAgMjg3
LCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAgIDkxLCAgMTMxMCwgICAtNjMsICAt
MjUzLCAgIDc2NCwgICA5OTMsICAgIDgwLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMs
ICAgOTkzLCAgIDk5MywgICA5OTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywK
KyAgICAgIDI3LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgICA4MSwgICAtMzQsICAxMDYwLCAgICA5
MCwgIC0yNTMsICAgOTkzLAorICAgICAgMTIsICAgIC05LCAgLTI1MywgICAtMzYsICAgMTAzLCAg
LTI1MywgIC0yNTMsICAtMjUzLCAgIDExMSwgICAxMTAsCisgICAgIC00NCwgIC0yNTMsICAgIDk3
LCAgLTI1MywgIC0yNTMsICAxMTI3LCAgICA5OSwgICAgMzYsICAtMjUzLCAgLTI1MywKKyAgICAt
MjUzLCAgICA5MiwgICAxMDAsICAtMjUzLCAgIDEwNywgICAxMDksICAgMTAxLCAgIDg0NSwgICAx
MTIsICAgMTA4LAorICAgIC0yNTMsICAtMjUzLCAgICAyNSwgIC0yNTMsICAtMjUzLCAgICA0Miwg
IC0yNTMsICAgLTY1LCAgIDExNSwgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDM2
OSwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAgMTE0LCAgLTI1MywKKyAgICAtMjUzLCAg
IDkxMiwgICA5OTMsICAtMjUzLCAgIDExNywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAg
IC03LAorICAgIC0yNTMsICAtMjUzLCAgIDk5MywgIDEyMjMsICAtMjUzLCAgLTI1MywgICA5OTMs
ICAgMTE2LCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgICA5OTMsICAgOTkzLCAgIDk5MywgICA5
OTMsICAgOTkzLCAgIDk5MywgICA5OTMsICAgOTkzLCAgIDk5MywKKyAgICAgOTkzLCAgIDk5Mywg
ICA5OTMsICAgOTkzLCAgIDk5MywgIC0yNTMsICAtMjUzLCAgIDk5MywgICAgODMsICAtMjUzLAor
ICAgIC0yNTMsICAtMjUzLCAgIDQ1MSwgIC0yNTMsICAgOTkzLCAgLTI1MywgIC0yNTMsICAgIDQz
LCAgLTI1MywgIC0yNTMsCisgICAgIDQ1MSwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAt
MjUzLCAgIDk5MywgICA5OTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgIDk5MywgICAxMTMs
ICAgMTE4LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEyMCwgICAxMTksICAtMjUzLAorICAgICAx
MjcsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgICAxMiwgICAgMTIsICAtMjUzLCAgLTI1
MywgIC0yNTMsCisgICAgLTI1MywgICAtMzYsICAgLTM2LCAgLTI1MywgICAxMTEsICAgMTEwLCAg
ICA4NSwgICAxMjEsICAtMjUzLCAgIDE0OCwKKyAgICAgNjE1LCAgICAxOCwgIC0yNTMsICAgNjk3
LCAgIDQ1MSwgIC0yNTMsICAtMjUzLCAgIDEyNSwgICA5OTMsICAgMTMwLAorICAgIC0yNTMsICAg
OTkzLCAgLTI1MywgICAxMjksICAtMjUzLCAgLTI1MywgICA2OTcsICAgNDUxLCAgIDExOSwgICAx
NTcsCisgICAgIDEzMiwgICAxMjYsICAtMjUzLCAgLTI1MywgICA5OTMsICAtMjUzLCAgIDk5Mywg
IC0yNTMsICAgMTMxLCAgIDEzMywKKyAgICAgMTk5LCAgLTI1MywgICAxMzcsICAgNTMzLCAgLTI1
MywgIC0yNTMsICAgIDI5LCAgIDk5MywgICA1MzMsICAgNDUxLAorICAgICA5OTMsICAtMjUzLCAg
LTI1MywgIC0yNTMsICAgMTM4LCAgIDExOSwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMKK307
CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2
IHl5cGdvdG9bXSA9Cit7CisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAt
MjUzLCAgLTI1MywgICAgNDQsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgICAtNDYs
ICAtMjUzLCAgIC0xOSwgIC0yNTMsICAgLTc4LCAgIC0yMywgIC0yNTMsICAtMjUzLAorICAgIC0y
NTMsICAgIDI4LCAgICAzMCwgICAgNDUsICAtMjUzLCAgIC00MywgICAtODUsICAtMjUzLCAgIC05
MiwgICAtNzMsCisgICAgICAgNCwgICAgIDYsICAtMjUzLCAgLTI1MywgIC0yNTMsICAgMTM5LCAg
IDE2NSwgICAxNzMsICAgMTU0LCAgLTI1MywKKyAgICAtMjUzLCAgLTI0MywgICAtMjcsICAgICAw
LCAgIDIzMiwgICAtMjksICAtMjUzLCAgLTI1MywgICAxNjcsICAgLTY2LAorICAgIC0yNTMsICAg
IDQ3LCAgLTE1NywgICAgLTgsICAtMTQwLCAgLTI1MiwgIC0yNTMsICAtMjUzLCAgLTI1MywgICAt
NDEsCisgICAgIDE5NSwgICAgMzksICAgICAxLCAgLTI1MywgIC0yNTMsICAgLTE0LCAgLTI1Mywg
IC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1
MywgICAyMTEsICAtMjUzLCAgLTI1MworfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVN
XV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2ZSwgc2hp
ZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKKyAgIG51
bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCisg
ICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFCTEVfTklO
RiAtNzYKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KK3sKKyAgICAgIDM5
LCAgIDE2NSwgICAxNjksICAgIDUwLCAgICAzMCwgICAyMjQsICAgIDMxLCAgICA2MiwgICAxMzAs
ICAgMTYxLAorICAgICAyNjksICAgIDY3LCAgIDE2NCwgICAyMjAsICAgMTkzLCAgICA1MiwgICAx
NjIsICAgMTg1LCAgIDE4NiwgICAgNTQsCisgICAgICA3MSwgICAxNzgsICAgMTA4LCAgIDI2OSwg
ICAgNTYsICAgMTIxLCAgICA0NywgICAgNTUsICAgIDYyLCAgICAgNiwKKyAgICAgICA3LCAgIDI5
MSwgICAgNDgsICAgIDY1LCAgICA1MSwgICAgNTYsICAgMjkxLCAgIDE3NSwgICAgNjYsICAgMTA4
LAorICAgICAgIDYsICAgICA3LCAgIDEyMSwgICAxNzYsICAgIDM5LCAgIDIwNywgICAxNjcsICAg
MTY4LCAgICAzMCwgICAxOTQsCisgICAgICAzMSwgICAgNzMsICAgMTg3LCAgIDE4OCwgICAgNTcs
ICAgIDU4LCAgICA1OSwgICAgMjMsICAgIDI0LCAgIDEzMCwKKyAgICAgIDY4LCAgICA4MSwgICAy
NDksICAgMTgwLCAgIDIyNiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgMjMsICAgIDI0LAorICAg
ICAyMTcsICAgIDcyLCAgICA3MywgICAxODMsICAgIDczLCAgIDE4NCwgICAxNDgsICAgMTY1LCAg
IDE3MCwgICAxNzEsCisgICAgIDIyOCwgICAgODQsICAgIDgxLCAgICA4NSwgICAgNzYsICAgMjEx
LCAgIDIxMiwgICAyMTMsICAgMjIzLCAgIDI2NywKKyAgICAgIDg2LCAgIDIzMiwgICAtNzUsICAg
IDYzLCAgIDIxNCwgICAyMTcsICAgIDY0LCAgIDE4MSwgICAxODIsICAgMTcyLAorICAgICAyOTQs
ICAgMjczLCAgIDI0NiwgICAxNzMsICAgMjE1LCAgICA0NywgICAyMTcsICAgMjM3LCAgIDIzOCwg
ICAyMzksCisgICAgIDI0MCwgICAxMjQsICAgMjUxLCAgIDE5OCwgICAyMjAsICAgMTA4LCAgIDE5
OSwgICAyODUsICAgMTIxLCAgIDIxNywKKyAgICAgMjE3LCAgICA4MywgICAyMTgsICAgMjUyLCAg
IDI0NywgICAgNzMsICAgMTI2LCAgIDI4MCwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgMjU1
LCAgIDI1NiwgICAyOTgsICAgMTU4LCAgIDIzMywgICAyMzQsICAgMTA4LCAgIDEwOCwgICAxMDgs
CisgICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAx
MDgsICAgMjU3LCAgIDI5NywKKyAgICAgLTI2LCAgIDEwOCwgICAxNzQsICAgMTQ4LCAgIDEyMSwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAxODksICAgMTkwLAorICAgICAxNzksICAgMjY4LCAgIDIx
NywgICAyNjEsICAgMjM1LCAgIDIzNiwgICAyNDEsICAgMjQyLCAgIDE5MSwgICAxOTIsCisgICAg
IDE5NSwgICAxOTcsICAgMjAwLCAgIDE2NSwgICAyNjgsICAgMTA4LCAgIDI3NSwgICAyMDMsICAg
MTIxLCAgIDIwNCwKKyAgICAgMjAxLCAgIDIwNSwgICAyMDgsICAgMjA5LCAgIDI4NiwgICAtMjUs
ICAgMjIxLCAgIC0yMCwgICAyNjMsICAgMTY1LAorICAgICAyMjUsICAgMjU5LCAgIDI1OCwgICAy
NjAsICAgMjYyLCAgIDI5NSwgICAyMTcsICAgLTI3LCAgIDI3MiwgICAyNzYsCisgICAgIDI4Miwg
ICAyODQsICAgMTQ4LCAgIDI4MywgICAyODgsICAgMTY1LCAgICAgMiwgICAgIDMsICAgICA0LCAg
IDI3NCwKKyAgICAgMTQ4LCAgIDI4NywgICAgIDgsICAgICA5LCAgICAxMCwgICAyODksICAgMjkw
LCAgIDIzMSwgICAyOTksICAgMjQzLAorICAgICAgNzgsICAgMTU5LCAgIDI0NCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDgyLCAgIDE2MCwgICAgNDksICAgMjQ1LCAgIDEyNSwK
KyAgICAgIDI1LCAgICAyNiwgICAyNjQsICAgIDI3LCAgICAyOCwgICAyNDgsICAgIDI5LCAgIDI5
NiwgICAgNzcsICAgMjU0LAorICAgICAxNDgsICAgMjY1LCAgIDI3NywgICAxNDgsICAgMTQ4LCAg
ICA3MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyOSwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0OCwgICAxNDgsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgMTMxLCAg
IDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAg
IDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwKKyAgICAgIDg3LCAgICAyOSwg
ICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDEzOSwgICAxNDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTUsICAgIDk2LAorICAgICAg
IDAsICAgIDk3LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAg
IDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAx
MzgsCisgICAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwg
ICAgOTEsICAgICAwLCAgICAgMCwKKyAgICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAyMTksICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0MSwKKyAgICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsCisgICAgIDEz
NiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgs
ICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsCisgICAgICAgMCwgICAg
IDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDEzOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDEsICAg
IDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAg
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwg
ICAxMzMsICAgICAwLAorICAgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKKyAgICAgIDI0
LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgs
ICAgIDg5LAorICAgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3NiwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk1LCAgICA5NiwgICAgIDAsICAg
IDk3LCAgICAgMSwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwKKyAgICAgIDg4LCAgICA4OSwgICAgOTAsICAg
IDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDEsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LAorICAgICAgNTYsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAg
ICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAg
IDkyLCAgICA5MywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMiwgICAgIDMsCisgICAgICAgNCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgIDk1LCAg
ICA5NiwKKyAgICAgICAwLCAgICA5NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwK
KyAgICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwgICAxNjMsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsICAgIDk2LCAgICAgMCwgICAg
OTcsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcs
ICAgIDI4LCAgICA4NywgICAgMjksCisgICAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAg
IDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDIsICAgICAz
LCAgICAgNCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAg
MjA2LCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAg
ICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwKKyAgICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDky
LCAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgMjIyLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5
NiwgICAgIDAsICAgIDk3LCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDI1LCAgICAyNiwg
ICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksCisgICAgICA5
MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsCisgICAgICAgMCwgICAgMjcsICAg
IDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwKKyAg
ICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA5NCwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgICAw
LCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEs
ICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAy
OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICA2OSwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAx
OTYsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAw
LCAgICAyOSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAyNywgICAgMjgsICAgMjI5LCAgICAyOSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMjMw
LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
CisgICAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsCisgICAg
ICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgIDI1LCAg
ICAyNiwKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5Cit9OworCitz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMCwgICAgODYs
ICAgIDk0LCAgICA0MywgICAgIDAsICAgMTYyLCAgICAgMCwgICAgMzQsICAgIDc0LCAgICA3MiwK
KyAgICAgMjUzLCAgICA0MCwgICAgODUsICAgMTUzLCAgICA1OCwgICAgODAsICAgIDc5LCAgICA1
MywgICAgNTQsICAgIDcxLAorICAgICAgNDksICAgMTA2LCAgICA2OCwgICAyNjYsICAgICAzLCAg
ICA2OCwgICAgMzcsICAgIDc3LCAgICA1NSwgICAgIDgsCisgICAgICAgOSwgICAyODMsICAgIDQz
LCAgICA0MywgICAgNzQsICAgICAzLCAgIDI4OCwgICAgNzEsICAgIDM4LCAgICA4NSwKKyAgICAg
ICA4LCAgICAgOSwgICAgODUsICAgIDc3LCAgICA0NCwgICAxMzcsICAgIDkyLCAgICA5MywgICAg
NDQsICAgIDkzLAorICAgICAgNDQsICAgIDUxLCAgICA4OCwgICAgODksICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAxMjUsCisgICAgICA3MiwgICAgNjEsICAgMjAyLCAgIDEw
OSwgICAgNzEsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDc3LCAg
ICA3NCwgICAgNzIsICAgIDgyLCAgICA3NCwgICAgODQsICAgIDc2LCAgIDE2MiwgICAgNTEsICAg
IDUyLAorICAgICAxNzIsICAgIDcwLCAgICA4MiwgICAgNzIsICAgIDc0LCAgICA2MCwgICAgNjEs
ICAgIDYyLCAgIDE2MSwgICAgNzEsCisgICAgICA3OSwgICAxNzYsICAgIDcxLCAgICA3NywgICAg
NjksICAgIDc3LCAgICA4MCwgICAgODUsICAgIDg2LCAgICA3MiwKKyAgICAgIDcxLCAgIDI1OCwg
ICAxOTQsICAgIDc2LCAgICA3OSwgICAgMzcsICAgIDc3LCAgIDE4NSwgICAxODYsICAgMTg3LAor
ICAgICAxODgsICAgIDgwLCAgIDIwNCwgICAgNzcsICAgMjU0LCAgIDE2MSwgICAgODAsICAgMjc0
LCAgIDE2MSwgICAgNzcsCisgICAgICA3NywgICAgNDMsICAgIDgwLCAgICA4MCwgICAxOTcsICAg
MTI1LCAgICA0MywgICAyNjcsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgIDIxNiwgICAyMTcs
ICAgMjkwLCAgICA0MywgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LAorICAgICAx
ODYsICAgMTg3LCAgIDE4OCwgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDIy
MSwgICAyODksCisgICAgICA3MCwgICAxOTcsICAgIDcxLCAgIDE1MywgICAxOTcsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDU1LCAgICA1NiwKKyAgICAgIDcwLCAgIDI1MywgICAgNzcsICAgIDc4
LCAgIDE4MywgICAxODQsICAgMTg5LCAgIDE5MCwgICAgNTcsICAgIDU5LAorICAgICAgNzMsICAg
IDcyLCAgICA4MCwgICAyNTgsICAgMjY2LCAgIDIyMSwgICAyNjEsICAgIDcwLCAgIDIyMSwgICAg
NzAsCisgICAgICA4MCwgICAgODAsICAgIDcwLCAgICA3NSwgICAyNzYsICAgIDcwLCAgICA3Miwg
ICAgNzEsICAgIDQwLCAgIDI3NCwKKyAgICAgIDczLCAgICA3MywgICAgNzksICAgIDczLCAgICA3
MywgICAyODcsICAgIDc3LCAgICA3MCwgICAgNzMsICAgIDcwLAorICAgICAgNDMsICAgIDc1LCAg
IDIwMiwgICAgNzEsICAgIDcxLCAgIDI5MCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgNzksCisg
ICAgIDIxMCwgICAgODAsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDE2LCAgICA3OSwgICAxNzMs
ICAgIDgwLCAgIDE5MSwKKyAgICAgIDU1LCAgICA4MiwgICAxOTIsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICA2MiwgICAgODIsICAgICA1LCAgIDE5MywgICAgNzIsCisgICAgICAz
OCwgICAgMzksICAgMjUwLCAgICA0MSwgICAgNDIsICAgMTk4LCAgICA0NCwgICAyODgsICAgIDUz
LCAgIDIxMCwKKyAgICAgMjUwLCAgIDI1MCwgICAyNjYsICAgMjUzLCAgIDI1NCwgICAgNDQsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAyNjYsICAgMjY3LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjgzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAyODgsICAgMjg5LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAg
IDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAg
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIDgxLCAgICA4MiwKKyAgICAgIC0xLCAgICA4
NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAg
ICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICAtMSwgICAgLTEsCisgICAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgODAsCisgICAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
CisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgLTEsICAgIC0xLCAgICA1
MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzQs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDgwLCAgICA4MSwgICAg
ODIsICAgIC0xLCAgICA4NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAtMSwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwK
KyAgICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzQsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAg
IDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEs
ICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
LTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDgwLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwKKyAgICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAg
NTIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICA4MSwgICAgODIsCisg
ICAgICAtMSwgICAgODQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCisgICAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcwLCAgICAtMSwgICAgLTEsICAgIDczLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAg
NCwKKyAgICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAt
MSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICA4MCwgICAg
ODEsICAgIDgyLCAgICAtMSwgICAgODQsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICA3MywgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0x
LCAgICA4NCwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4
LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsCisgICAgICAtMSwg
ICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgNzAsICAgICA0LCAgICAgNSwgICAgIDYsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAtMSwgICAgODEs
ICAgIDgyLCAgICAtMSwgICAgODQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwK
KyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCisgICAgICAtMSwgICAgNDQsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDc1LCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAg
IDM3LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQs
ICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA0OCwgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAg
MTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLAorICAgICAgNDEsICAg
IDQyLCAgICAtMSwgICAgNDQsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAzOCwgICAgMzksCisg
ICAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIC0xLCAgICA0NAorfTsKKworLyogWVlTVE9T
W1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAg
IHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0
MiwgICAgNDQsCisgICAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTMzLCAg
IDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywKKyAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQx
LCAgIDE2OCwgICAxNjksICAgMTcwLCAgICAzNywgICAgNDMsICAgMTM4LAorICAgICAgNDMsICAg
IDc0LCAgICA4MCwgICAxNzEsICAgIDcxLCAgICA3NywgICAgIDMsICAgIDMzLCAgICAzNCwgICAg
MzUsCisgICAgIDEzMCwgICAxMzEsICAgMTM2LCAgICA3NywgICAgODAsICAgIDQzLCAgIDEzNywg
ICAxMzksICAgIDcyLCAgICAgMCwKKyAgICAgMTY5LCAgIDEzOSwgICAgNzQsICAgMTM3LCAgIDE0
MiwgICAxNDMsICAgIDc0LCAgIDE1NCwgICAxMzAsICAgMTI5LAorICAgICAxMzIsICAgMTM3LCAg
IDEzMSwgICAgNDMsICAgIDcwLCAgICA3MiwgICAgNzksICAgIDQzLCAgICA0NSwgICAgNDYsCisg
ICAgICA0NywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNzAsICAgIDgxLCAgICA4MiwgICAgODQs
ICAgIDk1LCAgICA5NiwKKyAgICAgIDk3LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAx
MDMsICAgMTA0LCAgIDEwNSwgICAxMDYsICAgMTA3LAorICAgICAxMDgsICAgMTA5LCAgIDExMCwg
ICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCisgICAgIDEx
OCwgICAxMTksICAgMTIzLCAgIDEzNywgICAgODAsICAgMTQyLCAgICA0MywgICAxNDQsICAgMTQ1
LCAgICA3NSwKKyAgICAgMTQzLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgNDAsICAgIDc0LAorICAgICAgNzUsICAgIDgwLCAgIDEwNiwgICAxMTks
ICAgMTIwLCAgIDEyMiwgICAxMjQsICAgMTI1LCAgIDEzNywgICAxNDcsCisgICAgIDE0OCwgICAx
NDksICAgMTUwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE2MCwgICAxNjcsICAgIDQzLCAgIDEy
OSwKKyAgICAgMTMyLCAgICA3MiwgICAgNzksICAgIDczLCAgIDEyMywgICAxMjAsICAgMTQ2LCAg
IDEwNiwgICAxMDYsICAgMTIyLAorICAgICAgNTEsICAgIDUyLCAgICA3MiwgICAgNzYsICAgIDcx
LCAgICA3MSwgICAgNzcsICAgIDM5LCAgIDEyMCwgICAgNzAsCisgICAgIDEwNiwgICAgODUsICAg
IDg2LCAgICA4MiwgICAgODQsICAgIDUzLCAgICA1NCwgICAgODgsICAgIDg5LCAgICA1NSwKKyAg
ICAgIDU2LCAgICA1NywgICAgNTksICAgIDU4LCAgICA5MywgICAgNzMsICAgIDc1LCAgICA3Miwg
ICAgNzcsICAgIDgwLAorICAgICAgODAsICAgIDgwLCAgIDE2MiwgICAgNzAsICAgIDcwLCAgICA4
MCwgICAgODAsICAgMTIyLCAgICA3MCwgICAgNzUsCisgICAgIDE1MSwgICAgNjAsICAgIDYxLCAg
ICA2MiwgICAgNjksICAgIDc5LCAgIDEyMSwgICAgNzcsICAgIDgwLCAgICA3NSwKKyAgICAgMTQ4
LCAgICA3MiwgICAgNzMsICAgMTIzLCAgIDE0NiwgICAgNzMsICAgIDcxLCAgICA5OCwgICAxMjIs
ICAgIDQzLAorICAgICAgNDgsICAgMTAxLCAgIDEyMCwgICAxMDYsICAgMTA2LCAgIDEwOCwgICAx
MDgsICAgMTEwLCAgIDExMCwgICAxMTAsCisgICAgIDExMCwgICAxMTEsICAgMTExLCAgIDExNSwg
ICAxMTYsICAgMTE3LCAgIDEyMiwgICAxMjMsICAgMTQ1LCAgIDE0OCwKKyAgICAgMTYzLCAgIDEy
MiwgICAgODAsICAgMTYxLCAgIDE1NSwgICAxMjAsICAgMTIwLCAgIDEyMywgICAgNzksICAgIDcz
LAorICAgICAgNzMsICAgIDc4LCAgICA3MywgICAgNDAsICAgMTQ3LCAgIDE1NiwgICAxNjQsICAg
IDcxLCAgIDEyMiwgICAxMzUsCisgICAgIDE1OSwgICAxNTIsICAgIDczLCAgIDE0NiwgICAgNzks
ICAgMTIwLCAgICA3MCwgICAxNTksICAgMTY1LCAgIDE2NiwKKyAgICAgMTQ4LCAgIDE1OCwgICAg
NDMsICAgIDcxLCAgICA3NSwgICAxNDYsICAgMTIyLCAgICA4MCwgICAgNzEsICAgIDE2LAorICAg
ICAgNzksICAgMTQ5LCAgIDE1MywgICAxNTQsICAgIDcxLCAgIDEyMiwgICAxNTMsICAgMTQ4LCAg
IDE0NiwgICAgODAKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNk
ZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIp
CisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgor
I2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5
eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBU
aGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0
byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNp
b24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKworI2RlZmlu
ZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXll
cnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJ
CQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9
IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJ
CQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJ
CQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisg
ICAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAg
ICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJRCAoMCkpCisK
KworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKworCisvKiBZWUxM
T0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4K
KyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hp
Y2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCku
ICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorI2lmbmRlZiBZWUxM
T0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlc
CisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJCQkJCQlcCisJICAoQ3Vy
cmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAorCSAg
KEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJ
XAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGlu
ZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0
X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7CQkJCQkJCQlc
CisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwK
KwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3VycmVudCkuZmly
c3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlSSFNMT0MgKFJo
cywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDAp
KQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9u
IG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxs
eTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3
aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZuZGVmIFlZX0xP
Q0FUSU9OX1BSSU5UCisjIGlmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVf
SVNfVFJJVklBTAorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisg
ICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0
X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChM
b2MpLmxhc3RfY29sdW1uKQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmls
ZSwgTG9jKSAoKHZvaWQpIDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxs
aW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVY
X1BBUkFNCisjIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxz
ZQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwpCisjZW5kaWYKKworLyogRW5hYmxlIGRl
YnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJ
TlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlE
UFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAg
WVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9T
WU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJ
CQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisg
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlf
c3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUpOyBcCisgICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50
IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwKQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7
CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOworI2VuZGlmCit7CisgIGlmICgh
eXl2YWx1ZXApCisgICAgcmV0dXJuOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZ
WU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZh
bHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5
eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24g
WVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0
eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyNlbmRpZgoreworICBp
ZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAl
cyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwKTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwg
IikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBz
dGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCku
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVf
aW50MTYgKnRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwg
dG9wKQorICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqdG9wOwor
I2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7CisgIGZvciAoOyBi
b3R0b20gPD0gdG9wOyArK2JvdHRvbSkKKyAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpi
b3R0b20pOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NU
QUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVn
KQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30g
d2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJl
IHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlKQor
I2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUpCisgICAg
WVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyNlbmRpZgoreworICBpbnQgeXlucmhz
ID0geXlyMlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9
IHl5cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBi
eSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAv
KiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5
eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIs
IHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5
eXJ1bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQor
CQkgICAgICAgCQkgICAgICAgKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAg
fQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAg
aWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlKTsgXAor
fSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2Uu
ICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBj
YW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRl
ZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlw
ZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3Ap
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLwor
CisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tz
LiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2Vu
ZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cg
dG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1l
dGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRo
ZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZ
U1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVj
aXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRl
ZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVk
IF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVy
biB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0
cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25zdCBj
aGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9
IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5bGVu
OworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmlu
ZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UK
KyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZ
REVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisg
ICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3Jj
KQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgIGNo
YXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFyICp5
eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5
ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAx
OworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRv
IFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vz
c2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZv
ciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1
bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwg
YSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNo
KS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBk
byBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0
CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNo
YXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisg
ICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5
c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAn
XCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAg
Y2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rf
c3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkg
ICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNb
eXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlwX3F1
b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4gKHl5
c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30KKyMg
ZW5kaWYKKworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhl
IHVuZXhwZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0
dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5h
dGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKKyAgIGNvcHkgYW55
dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQorICAg
Y29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50
YXggZXJyb3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYg
b3ZlcmZsb3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCitzdGF0aWMg
WVlTSVpFX1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGlu
dCB5eWNoYXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgaWYgKCEgKFlZ
UEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVybiAwOworICBlbHNl
CisgICAgeworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAg
WVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgICAg
IFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5eXNpemUxOworICAg
ICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NF
X0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVS
Qk9TRV9BUkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAwCisgICAgICAvKiBU
aGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJl
CisJIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
LCBleHBlY3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
LCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVy
cm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKKyMg
ZW5kaWYKKyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAqeXlmOworICAgICAg
c3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBl
Y3RpbmcgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7Cisg
ICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAgICsgc2l6ZW9mIHl5
ZXhwZWN0aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAy
KQorCQkgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hhciBjb25zdCAqeXlw
cmVmaXggPSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVn
YXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNLLiAgKi8KKyAgICAg
IGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAgLyogU3RheSB3aXRo
aW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICBpbnQgeXlj
aGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xp
bSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICBpbnQgeXljb3Vu
dCA9IDE7CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOworICAgICAgeXlmbXQg
PSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAgIGZvciAoeXl4ID0g
eXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9
PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXljb3VudCA9PSBZWUVS
Uk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3VudCA9IDE7CisJCXl5
c2l6ZSA9IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdc
MCc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVb
eXl4XTsKKwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhd
KTsKKwkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKwkgICAgeXlz
aXplID0geXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsK
KwkgICAgeXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZWV8oeXlmb3JtYXQp
OworICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworICAgICAgeXlzaXpl
X292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
CisKKyAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0laRV9NQVhJTVVNOwor
CisgICAgICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBp
bmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9uJ3QgaGF2ZSB1bmRl
ZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAgIHByb2R1Y2VkIGEg
c3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJICBjaGFyICp5eXAg
PSB5eXJlc3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0g
J1wwJykKKwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYm
IHl5aSA8IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5
aSsrXSk7CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB5eXArKzsK
KwkJICB5eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAgICB9
Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBh
c3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0
IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKKyNlbHNlCitzdGF0
aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgY29uc3Qg
Y2hhciAqeXltc2c7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyNl
bmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworCisgIGlmICgheXltc2cpCisgICAgeXltc2cg
PSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZh
dWx0OgorCWJyZWFrOworICAgIH0KK30KKwwKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1X
bWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZ
WVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyog
ISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5k
aWYKKyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKworCisKKy8qLS0tLS0tLS0t
LS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2Ug
KHZvaWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFN
KQorICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9Q
QVJBTSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAor
eXlwYXJzZSAodm9pZCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKCkKKworI2VuZGlmCisjZW5kaWYK
K3sKKyAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5
eWx2YWw7CisKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXlu
ZXJyczsKKworICBpbnQgeXlzdGF0ZTsKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAv
KiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVk
LiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGlu
dGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbiA9IDA7
CisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFu
ZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIg
Knl5bXNnID0geXltc2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNn
YnVmOworI2VuZGlmCisKKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAg
YHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKKyAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFu
dGljIHZhbHVlcywKKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKworICAgICBS
ZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3Zl
cmZsb3cKKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgLyogVGhl
IHN0YXRlIHN0YWNrLiAgKi8KKyAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAg
eXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7CisgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAg
LyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRE
RVBUSF07CisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsKKyAgWVlTVFlQRSAqeXl2c3A7CisKKwor
CisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisK
KyAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICAvKiBUaGUgdmFyaWFi
bGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQor
ICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisKKyAgLyogVGhl
IG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAg
S2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQg
eXlsZW4gPSAwOworCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7
CisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7Cisg
IHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisg
IC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9m
IHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUg
c2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMg
YXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0g
eXl2czsKKworICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1
c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5
eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFs
dWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBw
dXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKwor
IHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNr
c2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQg
c2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVf
VCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAg
eworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwg
b25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRy
ZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRo
YXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBh
cm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5k
ZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJt
ZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3Nw
KSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCisJCSAgICAmeXlz
dGFja3NpemUpOworCisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNl
bHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sg
b3VyIG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJ
Z290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAo
WVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKwor
ICAgICAgeworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5
cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMg
KHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwor
CVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOworCisj
ICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFD
S19GUkVFICh5eXNzMSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxv
dyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5
eXZzICsgeXlzaXplIC0gMTsKKworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBz
aXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNr
c2l6ZSkpOworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZ
WUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAl
ZFxuIiwgeXlzdGF0ZSkpOworCisgIGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8
IHl5YmFja3VwLiAgfAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJv
cHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAg
bG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9u
ZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVm
ZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07
CisgIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyog
Tm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZl
IG9uZS4gICovCisKKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEg
dmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisg
ICAgeworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7Cisg
ICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAg
ICB7CisgICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9Q
UklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9
CisKKyAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMg
dG8gcmVkdWNlIG9yIHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4g
ICovCisgIHl5biArPSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwg
eXljaGVja1t5eW5dICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5
dGFibGVbeXluXTsKKyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gMCB8
fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXlu
OworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQor
ICAgIFlZQUNDRVBUOworCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBh
ZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJy
c3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQg
dG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0
IGlzIGVvZi4gICovCisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBU
WTsKKworICB5eXN0YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5
bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlv
biBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5
eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7Cisg
IGdvdG8geXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byBy
ZWR1Y2Ugd2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlz
IG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAg
ICBgJCQgPSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZ
WVZBTCB0byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQg
Qmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8g
WVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxl
ciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVz
ZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZ
WV9SRURVQ0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2Fz
ZSAyOgorCisgICAgeworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9u
ZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5bWJvbDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2
YXJpYWJsZTsKKyAgICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInVuZGVjbGFyZWQgaWRl
bnRpZmllciIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VW
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5
cGUpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VW
YXJpYWJsZSk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZh
cmlhYmxlIHR5cGUgc3ltYm9sCisgICAgICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUo
KSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2Fz
dDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9u
J3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhl
IHBvb2wKKyAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisKKyAgICAgICAg
aWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgKSB7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0
UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwgdCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRU
eXBlKCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA0OgorCisgICAgeworICAgICAgICAvLworICAgICAgICAv
LyBJTlRfVFlQRSBpcyBvbmx5IDE2LWJpdCBwbHVzIHNpZ24gYml0IGZvciB2ZXJ0ZXgvZnJhZ21l
bnQgc2hhZGVycywKKyAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMK
KyAgICAgICAgLy8KKyAgICAgICAgaWYgKGFicygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpID49
ICgxIDw8IDE2KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+
c2V0RkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuZik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA2OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDk6CisKKyAgICB7CisgICAgICAgIGlmICghKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3lt
Ym9sTm9kZSgpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBt
YXRyaXgsIG9yIHZlY3RvciAiLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwg
bWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0YW50
IGZvbGRpbmcgZm9yIGFycmF5cworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RBcnJheU5vZGUoKHl5dnNwWygzKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc1ZlY3RvcigpKSB7ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3JzCisgICAgICAg
ICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICAgICAgZmllbGRzLm51
bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAoeXl2c3BbKDMpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVu
aW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMgd2F5
IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQorICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RW
ZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7
IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdE1hdHJpeE5v
ZGUoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSB8fCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNpemUo
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0TWF4QXJyYXlTaXplKCkg
PD0gKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNp
emUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9s
Tm9kZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZVBvaW50ZXIoKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwg
dHJ1ZSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5U2V0TWF4U2l6ZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1ib2xOb2RlKCksICh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLCAwLCBmYWxzZSwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICh5eXZzcFsoMykgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAiIiwgIlsiLCAiYXJyYXkgbXVzdCBiZSByZWRlY2xhcmVkIHdpdGggYSBzaXplIGJlZm9yZSBi
ZWluZyBpbmRleGVkIHdpdGggYSB2YXJpYWJsZSIpOworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdo
LCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXko
KSkgeworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCksICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpKTsKKworICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZp
ZXIoRXZxQ29uc3QpOworICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cUNvbnN0LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNp
emUoKSkpOworICAgICAgICBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+aXNWZWN0b3IoKSAmJiAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZz
cFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBF
dnFDb25zdCkpOworICAgICAgICBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5KSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsK
KyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5p
c0FycmF5KCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIs
ICIuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAg
ICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCku
bGluZSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKKyAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5z
ZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN0cmluZykuc2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChmaWVsZHMubnVtID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLm9mZnNldHNbMF0pOworICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5
cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJh
c2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
ZzsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LmxpbmUpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxl
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50
KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsK
KyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUs
ICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3Jh
cnksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFs
U2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Cisg
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUp
OworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFz
aWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQ
cmVjaXNpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpIHsKKyAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAgICAgICAg
ICAgVFR5cGVMaXN0KiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKGZpZWxkcyA9
PSAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJv
ciIsICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg
aSA8IGZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqZmll
bGRzKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+
YWRkQ29uc3RTdHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBu
b3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0
cnVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3Qp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRl
eCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgKigqZmllbGRzKVtpXS50eXBlLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIg
bm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgZmllbGQgc2Vs
ZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5k
IHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBp
dCdzIGZyb20gdGhlIHBvb2wKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI6CisKKyAg
ICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAg
ICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgIltdIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE1OgorCisgICAgeworICAgICAgICBURnVuY3Rpb24qIGZuQ2FsbCA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuZnVuY3Rpb247CisgICAgICAgIFRPcGVyYXRvciBvcCA9IGZu
Q2FsbC0+Z2V0QnVpbHRJbk9wKCk7CisKKyAgICAgICAgaWYgKG9wICE9IEVPcE51bGwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgc2hvdWxkIGJl
IGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICAvLyBEb24ndCBnbyB0aHJvdWdoIHRoZSBzeW1i
b2wgdGFibGUgZm9yIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRl
cnMgd2lsbCBiZSB2ZXJpZmllZCBhbGdvcml0aG1pY2FsbHkuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMg
dG8gZ2V0IHRoZSB0eXBlIGJhY2sKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0
cnVjdG9yRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSXQn
cyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+YWRkQ29uc3RydWN0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAm
dHlwZSwgb3AsIGZuQ2FsbCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsICh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0
IGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAg
ICAgICAgIGZuQ2FuZGlkYXRlID0gcGFyc2VDb250ZXh0LT5maW5kRnVuY3Rpb24oKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKS5saW5lLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlm
IChmbkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
QSBkZWNsYXJlZCBmdW5jdGlvbi4gIEJ1dCwgaXQgbWlnaHQgc3RpbGwgbWFwIHRvIGEgYnVpbHQt
aW4KKyAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBtYXBwZWQgdG8g
YSBidWlsdC1pbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBp
dCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCks
ICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlw
ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50
ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJS
T1I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlv
biBjYWxsCisKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsIEVPcEZ1bmN0aW9uQ2FsbCwg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1
cm5UeXBlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgaG93IHdlIGtub3cg
d2hldGhlciB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBidWlsdEluIGZ1bmN0aW9uIG9yIGEgdXNl
ciBkZWZpbmVkIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIGJ1aWx0SW4gPT0g
ZmFsc2UsIGl0J3MgYSB1c2VyRGVmaW5lZCAtPiBjb3VsZCBiZSBhbiBvdmVybG9hZGVkIGJ1aWx0
SW4gZnVuY3Rpb24gYWxzbworICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IHRy
dWUsIGl0J3MgZGVmaW5pdGVseSBhIGJ1aWx0SW4gZnVuY3Rpb24gd2l0aCBFT3BOdWxsCisgICAg
ICAgICAgICAgICAgICAgIGlmICghYnVpbHRJbikKKyAgICAgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VXNlckRl
ZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKGZuQ2FuZGlkYXRlLT5nZXRNYW5nbGVkTmFt
ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWw7CisgICAgICAgICAg
ICAgICAgICAgIFRRdWFsaWZpZXJMaXN0JiBxdWFsaWZpZXJMaXN0ID0gKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1D
b3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWwgPSAoKmZuQ2FuZGlk
YXRlKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChxdWFsID09IEV2cU91dCB8fCBxdWFsID09IEV2cUluT3V0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgImFzc2lnbiIsICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0
QXNUeXBlZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBw
YXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcXVh
bGlmaWVyTGlzdC5wdXNoX2JhY2socXVhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5
IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1teSBub2Rl
IGZvciBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGZu
Q2FsbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBv
cnRlZCIsICIiLCAiIik7CisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMjI6CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAs
IG5ldyBUVHlwZSgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
VHlwZSgpKSB9OworICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5h
ZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybU5vZGUgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9OworICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAoeXl2YWwuaW50
ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb247CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgewor
ICAgICAgICAvLworICAgICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJE
ZWYpIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZyA9ICIiOworICAgICAgICAgICAg
VFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOworICAgICAgICAgICAg
VEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIEVP
cENvbnN0cnVjdFN0cnVjdCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
IGZ1bmN0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0g
RU9wTnVsbDsKKyAgICAgICAgICAgIHN3aXRjaCAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5tYXRyaXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25z
dHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVP
cENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0SW50
OyAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgRlJBR19WRVJUX09OTFko
Iml2ZWMyIiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENv
bnN0cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJpdmVjMyIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzQiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjMiIsICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzMiLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWM0
IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVj
dEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgeworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIFRUeXBlOjpnZXRCYXNpY1N0
cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIiKTsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgICAg
IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUU3Ry
aW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBu
ZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgICAgICB9CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAqKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1
bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsIHR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9u
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNzoKKworICAgIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjg6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAyOToKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MzA6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFy
eU9wRXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDMxOgorCisg
ICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxs
KSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
KS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MSkgLSAoMildLmludGVybSkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CisgICAgICAgICAgICAgICAgc3dp
dGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEVPcE5lZ2F0aXZlOiAgIGVycm9yT3AgPSAiLSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSwgZXJy
b3JPcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAzMjoKKworICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMzM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNDoKKworICAgIHsgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BM
b2dpY2FsTm90OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzU6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7CisgICAgICAg
IEZSQUdfVkVSVF9PTkxZKCIqIiwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiKiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDM3OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRf
T05MWSgiLyIsICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIi8i
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAzODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAzOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BB
ZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiKyIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDQwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICItIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDE6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDI6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDM6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAiPCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ0
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIj4iLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA0NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNz
VGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIjw9IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ3OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ4OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIj09IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSk7CisgICAgICAgIH0gZWxzZSBpZiAoKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgfHwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIkdMXzNETF9hcnJheV9vYmpl
Y3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIT0iLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfSBl
bHNlIGlmICgoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJy
YXkoKSB8fCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJh
eSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MDoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MToKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MjoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1MzoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NDoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiYmIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNTU6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNTY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJeXiIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDU3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDU4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJ8fCIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDU5OgorCisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDYwOgorCisgICAgeworICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZz
cFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSk7CisgICAgICAgIGlmICgoeXl2
c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpICE9ICh5eXZz
cFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworCisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgIjoiLCAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA2MToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA2MjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJhc3NpZ24iLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCh5eXZzcFsoMikgLSAo
MyldLmludGVybSkub3AsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmFzc2lnbkVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmludGVybSkubGluZSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9IGVsc2UgaWYgKCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpIHx8ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJHTF8zRExfYXJyYXlfb2Jq
ZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDYzOgorCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNjQ6CisKKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgO30KKyAgICBicmVhazsK
KworICBjYXNlIDY1OgorCisgICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA2NjoKKworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
OyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBj
YXNlIDY3OgorCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRl
cm0pLm9wID0gRU9wU3ViQXNzaWduOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjg6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIsIiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNzA6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0RXJy
b3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDcxOgorCisgICAgeworICAgICAgICBU
RnVuY3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBU
SW50ZXJtQWdncmVnYXRlOworICAgICAgICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0
UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5h
bWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdl
dFBhcmFtQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyICZw
YXJhbSA9IGZ1bmN0aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdl
dFR5cGUoKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKSwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
KS5saW5lKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcGVyYXRvcihFT3BQ
cm90b3R5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90eXBl
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MjoKKworICAgIHsKKyAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlKQorICAgICAgICAgICAg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wZXJhdG9yKEVP
cERlY2xhcmF0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA3MzoKKworICAgIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlw
ZSwgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDc0
OgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMg
b2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUg
d2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBh
dCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMg
YW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAgICAg
IFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5n
ZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7CisgICAgICAgICAgICBp
ZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlv
bnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCpwcmV2RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSAhPSAoKih5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikpW2ldLnR5cGUtPmdl
dFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBo
YXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKCooeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pKVtpXS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24s
CisgICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBu
YW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisgICAgICAgIC8vIGJl
aW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0
aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsK
KworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqKHl5dmFsLmludGVy
bSkuZnVuY3Rpb24pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uZnVuY3Rpb24pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NjoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uZnVuY3Rpb24pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NzoKKworICAgIHsK
KyAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5j
dGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICBpZiAo
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRWb2lkKQorICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+
YWRkUGFyYW1ldGVyKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkZWxldGUgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50
eXBlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3ODoKKworICAgIHsKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5j
dGlvbnMgY2FuIGJlIHZvaWQKKyAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0
ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAg
ICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAi
Y2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwg
IiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBk
ZWxldGUgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
KyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFt
ZXRlcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
Im5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBmdW5j
dGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCBy
ZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRUeXBlIHR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgZnVuY3Rpb24gPSBu
ZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUg
J3ZvaWQnIiwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZywgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKSl9OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgy
KV0ubGV4KS5saW5lOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4MToKKworICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5s
aW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWyg0KSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKKworICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZSgoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpOworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAo
eXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSB9OworICAgICAgICAoeXl2YWwuaW50
ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lOworICAgICAgICAoeXl2YWwu
aW50ZXJtKS5wYXJhbSA9IHBhcmFtOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4MjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVy
bSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
KS5saW5lLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKih5eXZzcFsoMikg
LSAoMildLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZz
cFsoMikgLSAoMildLmludGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgODQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZh
bC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg1OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMild
LmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDg2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikg
PSBFdnFJbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODc6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA4ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxT3V0OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4OToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDkwOgorCisgICAgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9OworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5wYXJhbSA9IHBhcmFtOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA5MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pOworICAgICAgICAKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0pLnR5cGUu
cHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgKHl5dmFsLmludGVybSku
dHlwZS5wcmVjaXNpb24gPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVj
aXNpb24oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS50eXBlLnR5cGUpOworICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0pLmxpbmUsICh5eXZhbC5pbnRlcm0pLnR5cGUucHJlY2lzaW9uLCAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLnR5cGUudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA5MjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybSkudHlwZSksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSks
ICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmxl
eCkubGluZSwgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MzoKKworICAgIHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGlu
ZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOworCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg1KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IHBhcnNlQ29udGV4
dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2so
KHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDk0OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoNildLmludGVybSk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NildLmludGVybSkudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNildLmxleCkubGluZSwgKHl5dnNw
Wyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlh
YmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JD
aGVjaygoeXl2c3BbKDQpIC0gKDYpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBUVHlwZSB0
eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsKKyAgICAgICAgICAg
IHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUs
ICh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSksICh5eXZzcFsoMykgLSAoNildLmxleCkubGlu
ZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTU6CisKKyAgICB7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
dnNwWygzKSAtICg3KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFs
LmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pOworCisgICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJv
ckNoZWNrKCh5eXZzcFsoNCkgLSAoNyldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg3KV0uaW50
ZXJtKS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2
c3BbKDQpIC0gKDcpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNyldLmludGVybSkudHlwZSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwg
KHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRB
cnJheVNpemUoKSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hl
Y2soKHl5dnNwWyg0KSAtICg3KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg3KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoNyldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtKS5saW5l
LCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOworICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigo
eXl2c3BbKDMpIC0gKDcpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDcpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDcpIC0gKDcpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJl
c2VudGF0aW9uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJt
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0g
KDcpXS5pbnRlcm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eXZzcFsoNikgLSAoNyldLmxl
eCkubGluZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDgpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoOCld
LmludGVybSk7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg4KV0ubGV4
KS5saW5lLCAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+
YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg4KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0g
KDgpXS5sZXgpLmxpbmUsICh5eXZzcFsoNSkgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXl2c3Bb
KDQpIC0gKDgpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDgpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygxKSAtICg4KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZhbC5pbnRlcm0pLmxpbmUsICJHTF8zRExf
YXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAg
ICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eXZzcFsoMykg
LSAoOCldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoOCldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUsICh5eXZzcFsoOCkgLSAoOCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbnRlcm1Ob2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoOCldLmludGVy
bSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5dnNwWyg3KSAtICg4KV0ubGV4KS5saW5lKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9ICh5eXZzcFsoMSkgLSAoOCldLmludGVybSkuaW50ZXJtQWdncmVn
YXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDk3OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsK
KworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNv
bnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50
eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9k
ZSkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVy
bU5vZGUpCisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAi
IiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLmxpbmUpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGlu
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk5OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSksICh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgKHl5dmFs
LmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2
YWwuaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbklu
aXRFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDA6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
KSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9u
SW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5p
bnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDQpXS5s
ZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkgfHwgcGFyc2VDb250ZXh0
LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygo
eXl2c3BbKDMpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTAxOgorCisgICAgeworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUo
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgaW50IHNpemU7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5saW5lLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
c2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlw
ZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgdHlwZSwgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lKSwgKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVy
cm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwg
KHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAo
NSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHZhcmlhYmxl
KSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDI6CisKKyAgICB7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKKworICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXpl
cigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAg
ICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
aW50ZXJtTm9kZSwgKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwMzoKKworICAgIHsKKyAgICAgICAgVkVS
VEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnF1YWxpZmllciA9IEV2cUludmFyaWFudFZh
cnlpbmdPdXQ7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKworICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgeworICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA1OgorCisgICAgeworICAg
ICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5ICYmIHBhcnNlQ29u
dGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
bGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLnR5cGUpLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0udHlwZSkpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKKyAgICAgICAgICAgICgoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3Qg
YmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAgICAgKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNzoKKworICAg
IHsKKyAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
QXR0cmlidXRlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMDg6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFn
ZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA5OgorCisgICAgeworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdP
dXQsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFy
eWluZ0luLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMTA6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2Jh
bEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFZvaWQsIEV2cVVuaWZvcm0sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTEyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnByZWNpc2lvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5wcmVjaXNpb24p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTM6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDExNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0g
RWJwTWVkaXVtOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTE2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6
ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExODoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9v
bCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTIyOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEy
MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDMpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTI2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI3
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSg0KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjk6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEzMDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTMxOgorCisg
ICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MiIsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSgyLCB0cnVlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTMyOgorCisgICAg
eworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgzLCB0cnVlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTMzOgorCisgICAgewor
ICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0NCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0
LCB0cnVlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM0OgorCisgICAgeworICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzU6CisK
KyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBp
cyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQg
dXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlJiBzdHJ1
Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN5
bWJvbCktPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnVzZXJEZWYgPSAmc3RydWN0dXJlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6
CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygo
eXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmlu
ZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBUVHlw
ZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCh5eXZzcFsoNCkgLSAoNSldLmludGVybS50eXBlTGlz
dCksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZyk7CisgICAgICAgIFRWYXJpYWJsZSog
dXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAqc3RydWN0dXJlLCB0cnVlKTsKKyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICJyZWRlZmluaXRpb24iLCAoeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg1
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3Ry
dWN0dXJlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAgICB7CisgICAg
ICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LnR5cGVMaXN0KSwgVFN0cmluZygiIikpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxp
bmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpc3QpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDE6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpc3QpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZUxpc3QpLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaiA9IDA7IGogPCAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbal0udHlwZS0+
Z2V0RmllbGROYW1lKCkgPT0gKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtp
XS50eXBlLT5nZXRGaWVsZE5hbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0ubGluZSwg
ImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCooeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlTGlzdCktPnB1c2hfYmFjaygoKih5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCkp
W2ldKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDI6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0gKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLnR5cGVMaXN0KTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT52b2lkRXJyb3JD
aGVjaygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubGluZSwgKCooeXl2c3BbKDIpIC0g
KDMpXS5pbnRlcm0udHlwZUxpc3QpKVswXS50eXBlLT5nZXRGaWVsZE5hbWUoKSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3Rz
IG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICgq
KHl5dmFsLmludGVybS50eXBlTGlzdCkpW2ldLnR5cGUtPnNldFR5cGUoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5zaXpl
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4LCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkudXNlckRlZik7CisKKyAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFy
cmF5cyBvZiBhcnJheXMKKyAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0udHlwZUxpc3Qp
KVtpXS50eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5saW5l
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCisgICAgICAgICAgICAgICAgKCoo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOworICAgICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQorICAgICAgICAgICAgICAgICgqKHl5dmFs
LmludGVybS50eXBlTGlzdCkpW2ldLnR5cGUtPnNldFR5cGVOYW1lKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS51c2VyRGVmLT5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZUxpc3QpID0gTmV3UG9vbFRUeXBlTGlzdCgpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlTGluZSkp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LnR5cGVMaW5lKSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0RmllbGROYW1l
KCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDE0NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoNCldLmxleCkubGluZSwgKih5eXZzcFsoMSkgLSAoNCld
LmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwg
RWJwVW5kZWZpbmVkKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGluZSA9ICh5
eXZzcFsoMSkgLSAoNCldLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlu
ZSkudHlwZS0+c2V0RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZyk7CisK
KyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0QXJy
YXlTaXplKHNpemUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDc6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ4OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ5OgorCisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTA6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNTI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNTM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTQ6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTU6CisKKyAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTY6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IDA7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTc6
CisKKyAgICB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTU4OgorCisgICAgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU5OgorCisgICAgeworICAgICAgICBpZiAoKHl5
dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkKKyAgICAgICAgICAg
ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcGVyYXRvcihF
T3BTZXF1ZW5jZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5
eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNjA6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjM6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSkKKyAgICAgICAgICAgICh5eXZzcFso
MikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5j
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTY0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKSwgMCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2
NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5v
ZGUpLCAwKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY2OgorCisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2NzoK
KworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1O
b2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTY4OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMykg
LSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAo
eXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLm5vZGVQYWlyKS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2Rl
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTcwOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTcyOgor
CisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgaW50ZXJtTm9kZSkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgICAgIH0KKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAgeyBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzQ6CisKKyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKDAsICh5eXZzcFsoNikgLSAoNildLmlu
dGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWyg0KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIDAsIHRydWUsICh5eXZzcFsoMSkgLSAoNildLmxleCkubGluZSk7CisgICAgICAgIC0tcGFy
c2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNzU6CisKKyAgICB7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTc2OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDgpIC0gKDgpXS5sZXgpLmxpbmUsICh5eXZzcFsoNikg
LSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKDAsICh5eXZzcFsoMykgLSAoOCldLmludGVy
bS5pbnRlcm1Ob2RlKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IDAsIGZhbHNlLCAoeXl2c3BbKDQpIC0gKDgpXS5sZXgpLmxpbmUpOworICAgICAgICAtLXBhcnNl
Q29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTc3OgorCisgICAgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzg6CisK
KyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKCh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWyg3KSAt
ICg3KV0uaW50ZXJtLmludGVybU5vZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+
KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9j
YXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9k
ZTIpLCB0cnVlLCAoeXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOworICAgICAgICAtLXBhcnNl
Q29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTc5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxODA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE4MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDE4MjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTgzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE4NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg1OgorCisgICAgewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcENvbnRpbnVlLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxODY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBh
bGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICh5eXZzcFsoMSkg
LSAoMildLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4NzoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMSkgLSAoMildLmxleCku
bGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdl
dEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCBy
ZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODg6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09
IEVidFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAt
ICgzKV0ubGV4KS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAi
cmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoKihwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0ubGV4KS5saW5l
LCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iLCAiIik7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODk6CisKKyAgICB7CisgICAgICAgIEZSQUdfT05MWSgi
ZGlzY2FyZCIsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wS2lsbCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTkwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgICAgICBwYXJz
ZUNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTkxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1Ob2RlKSwgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+dHJlZVJvb3QgPSAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
OTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE5MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTk0OgorCisgICAgeworICAgICAgICBURnVuY3Rpb24mIGZ1bmN0aW9uID0gKigo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kKGZ1bmN0aW9uLmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZp
cnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZl
IGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9v
a2luZyB1cAorICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAg
ICAgICAgaWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2Vz
IGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAg
ICAgLy8KKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJm
dW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24uZ2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiIiwgZnVuY3Rpb24uZ2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1
cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTmV3IHN5
bWJvbCB0YWJsZSBzY29wZSBmb3IgYm9keSBvZiBmdW5jdGlvbiBwbHVzIGl0cyBhcmd1bWVudHMK
KyAgICAgICAgLy8KKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7CisK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJldHVybiB0eXBlIGZvciBsYXRl
ciBjaGVja2luZyBmb3IgUkVUVVJOIHN0YXRlbWVudHMuCisgICAgICAgIC8vCisgICAgICAgIHBh
cnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlw
ZSgpKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNl
OworCisgICAgICAgIC8vCisgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5
bWJvbCB0YWJsZS4KKyAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQn
cyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBi
ZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFj
Y3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxl
dmVsIGNvZGUKKyAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAg
ICAgICAvLworICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRl
cm1BZ2dyZWdhdGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFy
YW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rp
b25baV07CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7CisgICAgICAgICAgICAg
ICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFt
LnR5cGUpOworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRo
ZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IFRyYW5zZmVyIG93bmVyc2hpcCBvZiBuYW1lIHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSA9IDA7CisKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRo
ZSBISUwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eXZzcFsoMSkg
LSAoMSldLmludGVybSkubGluZSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1ldGVycywgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBwYXJzZUNvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTU6
CisKKyAgICB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFs
dWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9u
ZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
Vm9pZCAmJiAhIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5saW5lLCAi
ZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcigoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLCBFT3BGdW5jdGlvbiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkuZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKSk7CisKKyAgICAgICAgLy8gc3RvcmUg
dGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGltaXplIGFuZCBvdGhlciB2
ZW5kb3Igc3BlY2lmaWMKKyAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRoaXMgaW5mb3JtYXRpb24g
Y2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQorICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShwYXJzZUNvbnRleHQt
PmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1ZyhwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFn
bWEuZGVidWcpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3Jl
Z2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5wcmFn
bWFUYWJsZSk7CisgICAgO30KKyAgICBicmVhazsKKworCisvKiBMaW5lIDEyNjcgb2YgeWFjYy5j
LiAgKi8KKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICBZWV9TWU1CT0xfUFJJTlQg
KCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BTVEFDSyAo
eXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisK
KyAgKisreXl2c3AgPSB5eXZhbDsKKworCisgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2Yg
dGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywg
YmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBu
dW1iZXIgcmVkdWNlZCBieS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUg
PSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUg
JiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAg
eXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZn
b3RvW3l5biAtIFlZTlRPS0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRl
dGVjdGluZyBlcnJvciB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXJybGFiOgorICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3Is
IHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAg
ICArK3l5bmVycnM7CisjaWYgISBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKFlZXygi
c3ludGF4IGVycm9yIikpOworI2Vsc2UKKyAgICAgIHsKKwlZWVNJWkVfVCB5eXNpemUgPSB5eXN5
bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKKwlpZiAoeXltc2dfYWxsb2MgPCB5eXNp
emUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCisJICB7CisJICAgIFlZ
U0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOworCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxs
b2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorCSAgICAgIHl5YWxsb2Mg
PSBZWVNUQUNLX0FMTE9DX01BWElNVU07CisJICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKwkg
ICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKwkgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNL
X0FMTE9DICh5eWFsbG9jKTsKKwkgICAgaWYgKHl5bXNnKQorCSAgICAgIHl5bXNnX2FsbG9jID0g
eXlhbGxvYzsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJeXltc2cgPSB5eW1zZ2J1ZjsKKwkJeXlt
c2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisJICAgICAgfQorCSAgfQorCisJaWYgKDAgPCB5
eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQorCSAgeworCSAgICAodm9pZCkgeXlzeW50
YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIpOworCSAgICB5eWVycm9yICh5eW1zZyk7
CisJICB9CisJZWxzZQorCSAgeworCSAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvciIpKTsK
KwkgICAgaWYgKHl5c2l6ZSAhPSAwKQorCSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJICB9
CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQor
ICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFo
ZWFkIHRva2VuIGFmdGVyIGFuCisJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYg
KHl5Y2hhciA8PSBZWUVPRikKKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2Yg
aW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9Cisg
ICAgICBlbHNlCisJeworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAg
ICAgeXl0b2tlbiwgJnl5bHZhbCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KKyAgICB9CisK
KyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0
aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4gICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJy
b3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNv
ZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0
aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypD
T05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xh
aW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0
aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290
byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9y
IGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgor
ICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMg
dGhpcy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0
ZV07CisgICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQorCXsKKwkgIHl5biArPSBZWVRFUlJP
UjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZ
WVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAo
MCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvcCB0aGUgY3VycmVu
dCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAg
ICAgIGlmICh5eXNzcCA9PSB5eXNzKQorCVlZQUJPUlQ7CisKKworICAgICAgeXlkZXN0cnVjdCAo
IkVycm9yOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwKTsKKyAgICAgIFlZ
UE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgICAgIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZ
WUFDQ0VQVDsKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworCisgIC8qIFNoaWZ0IHRoZSBlcnJv
ciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0s
IHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOwor
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2NlcHRs
YWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8geXly
ZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWJv
cnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5eXJl
dHVybjsKKworI2lmbmRlZiB5eW92ZXJmbG93CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhh
dXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3RlZGxhYjoKKyAgeXllcnJvciAoWVlfKCJtZW1v
cnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICov
CisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5eWNoYXIgIT0gWVlFT0YgJiYgeXljaGFyICE9
IFlZRU1QVFkpCisgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVh
ZCIsCisJCSB5eXRva2VuLCAmeXlsdmFsKTsKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJv
bHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZQUJPUlQg
b3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNLX1BSSU5U
ICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAgICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3Ap
OworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93CisgIGlm
ICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYKKyNpZiBZ
WUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RBQ0tfRlJF
RSAoeXltc2cpOworI2VuZGlmCisgIC8qIE1ha2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLworICBy
ZXR1cm4gWVlJRCAoeXlyZXN1bHQpOworfQorCisKKworCisKSW5kZXg6IEFOR0xFL3NyYy9pbnRl
cm1lZGlhdGUvZ2xzbGFuZ190YWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvaW50ZXJtZWRp
YXRlL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvaW50ZXJtZWRpYXRl
L2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc0IEBACisvKiBBIEJpc29u
IHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW50ZXJm
YWNlIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChD
KSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5
IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRo
ZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRl
ciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxm
IGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQg
dmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHks
IGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0
c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4
Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcK
KyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKwor
ICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBUb2tlbnMu
ICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1
dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVy
IGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5
cGUgeworICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAor
ICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAor
ICAgICBQUkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAgICAgQ09OU1Rf
UVVBTCA9IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9UWVBFID0gMjY2
LAorICAgICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAgIENPTlRJTlVF
ID0gMjY5LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAgRk9SID0gMjcy
LAorICAgICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1
LAorICAgICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJWRUM0ID0gMjc4
LAorICAgICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElWRUM0ID0gMjgx
LAorICAgICBWRUMyID0gMjgyLAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0ID0gMjg0LAor
ICAgICBNQVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBNQVRSSVg0ID0g
Mjg3LAorICAgICBJTl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwKKyAgICAgSU5P
VVRfUVVBTCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlORyA9IDI5MiwK
KyAgICAgU1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAgIFdISUxFID0g
Mjk1LAorICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0gMjk3LAorICAg
ICBJREVOVElGSUVSID0gMjk4LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAgIEZMT0FUQ09O
U1RBTlQgPSAzMDAsCisgICAgIElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09MQ09OU1RBTlQg
PSAzMDIsCisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9PUCA9IDMwNCwK
KyAgICAgUklHSFRfT1AgPSAzMDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAgREVDX09QID0g
MzA3LAorICAgICBMRV9PUCA9IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAgIEVRX09QID0g
MzEwLAorICAgICBORV9PUCA9IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAgICBPUl9PUCA9
IDMxMywKKyAgICAgWE9SX09QID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1LAorICAgICBE
SVZfQVNTSUdOID0gMzE2LAorICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBNT0RfQVNTSUdO
ID0gMzE4LAorICAgICBMRUZUX0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIw
LAorICAgICBBTkRfQVNTSUdOID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIyLAorICAgICBP
Ul9BU1NJR04gPSAzMjMsCisgICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExFRlRfUEFSRU4g
PSAzMjUsCisgICAgIFJJR0hUX1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjcs
CisgICAgIFJJR0hUX0JSQUNLRVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAzMjksCisgICAg
IFJJR0hUX0JSQUNFID0gMzMwLAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1BID0gMzMyLAor
ICAgICBDT0xPTiA9IDMzMywKKyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlDT0xPTiA9IDMz
NSwKKyAgICAgQkFORyA9IDMzNiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElMREUgPSAzMzgs
CisgICAgIFBMVVMgPSAzMzksCisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNIID0gMzQxLAor
ICAgICBQRVJDRU5UID0gMzQyLAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAgICBSSUdIVF9B
TkdMRSA9IDM0NCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJFVCA9IDM0NiwK
KyAgICAgQU1QRVJTQU5EID0gMzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAgfTsKKyNlbmRp
ZgorLyogVG9rZW5zLiAgKi8KKyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmluZSBISUdIX1BS
RUNJU0lPTiAyNTkKKyNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZpbmUgTE9XX1BS
RUNJU0lPTiAyNjEKKyNkZWZpbmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRSSUJVVEUgMjYz
CisjZGVmaW5lIENPTlNUX1FVQUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUKKyNkZWZpbmUg
RkxPQVRfVFlQRSAyNjYKKyNkZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJSRUFLIDI2OAor
I2RlZmluZSBDT05USU5VRSAyNjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVMU0UgMjcxCisj
ZGVmaW5lIEZPUiAyNzIKKyNkZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQgMjc0CisjZGVm
aW5lIFJFVFVSTiAyNzUKKyNkZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMzIDI3NworI2Rl
ZmluZSBCVkVDNCAyNzgKKyNkZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMzIDI4MAorI2Rl
ZmluZSBJVkVDNCAyODEKKyNkZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAyODMKKyNkZWZp
bmUgVkVDNCAyODQKKyNkZWZpbmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklYMyAyODYKKyNk
ZWZpbmUgTUFUUklYNCAyODcKKyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUgT1VUX1FVQUwg
Mjg5CisjZGVmaW5lIElOT1VUX1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkxCisjZGVmaW5l
IFZBUllJTkcgMjkyCisjZGVmaW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9UWVBFIDI5NAor
I2RlZmluZSBXSElMRSAyOTUKKyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmluZSBTQU1QTEVS
Q1VCRSAyOTcKKyNkZWZpbmUgSURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9OQU1FIDI5OQor
I2RlZmluZSBGTE9BVENPTlNUQU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAzMDEKKyNkZWZp
bmUgQk9PTENPTlNUQU5UIDMwMgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAzCisjZGVmaW5l
IExFRlRfT1AgMzA0CisjZGVmaW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNfT1AgMzA2Cisj
ZGVmaW5lIERFQ19PUCAzMDcKKyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdFX09QIDMwOQor
I2RlZmluZSBFUV9PUCAzMTAKKyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFORF9PUCAzMTIK
KyNkZWZpbmUgT1JfT1AgMzEzCisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUgTVVMX0FTU0lH
TiAzMTUKKyNkZWZpbmUgRElWX0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lHTiAzMTcKKyNk
ZWZpbmUgTU9EX0FTU0lHTiAzMTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5CisjZGVmaW5lIFJJ
R0hUX0FTU0lHTiAzMjAKKyNkZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUgWE9SX0FTU0lH
TiAzMjIKKyNkZWZpbmUgT1JfQVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdOIDMyNAorI2Rl
ZmluZSBMRUZUX1BBUkVOIDMyNQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNkZWZpbmUgTEVG
VF9CUkFDS0VUIDMyNworI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmluZSBMRUZUX0JS
QUNFIDMyOQorI2RlZmluZSBSSUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMzMQorI2RlZmlu
ZSBDT01NQSAzMzIKKyNkZWZpbmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMzNAorI2RlZmlu
ZSBTRU1JQ09MT04gMzM1CisjZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0ggMzM3CisjZGVm
aW5lIFRJTERFIDMzOAorI2RlZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0MAorI2RlZmlu
ZSBTTEFTSCAzNDEKKyNkZWZpbmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9BTkdMRSAzNDMK
KyNkZWZpbmUgUklHSFRfQU5HTEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDUKKyNkZWZp
bmUgQ0FSRVQgMzQ2CisjZGVmaW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVFU1RJT04gMzQ4
CisKKworCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19E
RUNMQVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBFCisKK3sKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcg
KnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAg
ICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAg
IH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAg
VE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSog
aW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBw
cmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAg
IFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAg
ICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBl
TGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKK30KKy8qIExpbmUgMTUyOSBvZiB5YWNj
LmMuICAqLworCisJWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVz
Y2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQg
MQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKwpJbmRleDogQU5H
TEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wv
Q29uZmlnLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENv
bmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRo
ZSBmb3JtYXQsIHR5cGUKKy8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVu
dHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCisvLyBbRUdMIDEuNF0gc2Vj
dGlvbiAzLjQgcGFnZSAxNS4KKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKworI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIGVnbAoreworQ29uZmln
OjpDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwg
RUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCisgICAgOiBtRGlzcGxh
eU1vZGUoZGlzcGxheU1vZGUpLCBtUmVuZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCksIG1EZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxl
KG11bHRpU2FtcGxlKQoreworICAgIHNldChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heElu
dGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1w
bGUpOworfQorCit2b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQoreworICAgIG1CdWZmZXJTaXpl
ID0gMDsKKyAgICBtUmVkU2l6ZSA9IDA7CisgICAgbUdyZWVuU2l6ZSA9IDA7CisgICAgbUJsdWVT
aXplID0gMDsKKyAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7CisgICAgbUFscGhhU2l6ZSA9IDA7Cisg
ICAgbUFscGhhTWFza1NpemUgPSAwOworICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db2xv
ckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RP
TlRfQ0FSRTsKKyAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db25mb3JtYW50
ID0gMDsKKyAgICBtRGVwdGhTaXplID0gMDsKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5h
dGl2ZVBpeG1hcCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1N
YXhQQnVmZmVySGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1h
eFN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IEVH
TF9ET05UX0NBUkU7CisgICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOworICAg
IG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9D
QVJFOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOworICAgIG1TYW1w
bGVCdWZmZXJzID0gMDsKKyAgICBtU2FtcGxlcyA9IDA7CisgICAgbVN0ZW5jaWxTaXplID0gMDsK
KyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKKyAgICBtVHJhbnNwYXJlbnRUeXBl
ID0gRUdMX05PTkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOwor
ICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFuc3Bh
cmVudEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Cit9CisKK3ZvaWQgQ29uZmlnOjpzZXQoRDNE
RElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgc3dpdGNoIChyZW5kZXJUYXJn
ZXRGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIG1C
dWZmZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6
ZSA9IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBt
QnVmZmVyU2l6ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDEwOworICAgICAgICBtR3JlZW5T
aXplID0gMTA7CisgICAgICAgIG1CbHVlU2l6ZSA9IDEwOworICAgICAgICBtQWxwaGFTaXplID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAg
bUJ1ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSA4OworICAgICAgICBtR3JlZW5T
aXplID0gODsKKyAgICAgICAgbUJsdWVTaXplID0gODsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDg7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBtQnVm
ZmVyU2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUg
PSA2OworICAgICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgbUJ1ZmZl
clNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0g
NTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIG1CdWZmZXJT
aXplID0gMzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDg7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3Ro
ZXIgZm9ybWF0cyBzaG91bGQgbm90IGJlIHZhbGlkCisgICAgfQorCisgICAgbUx1bWluYW5jZVNp
emUgPSAwOworICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9
IEVHTF9GQUxTRTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7CisgICAgbUNv
bG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIG1Db25maWdDYXZlYXQgPSAoZGlz
cGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9T
TE9XX0NPTkZJRzsKKyAgICBtQ29uZmlnSUQgPSAwOworICAgIG1Db25mb3JtYW50ID0gRUdMX09Q
RU5HTF9FUzJfQklUOworCisgICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCisgICAgewor
Ly8gICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMTY7
CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
M0RGTVRfRDMyOgorICAgICAgICBtRGVwdGhTaXplID0gMzI7CisgICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAg
IG1EZXB0aFNpemUgPSAxNTsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0Owor
ICAgICAgICBtU3RlbmNpbFNpemUgPSA4OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg4OgorICAgICAgICBtRGVwdGhTaXplID0gMjQ7CisgICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAg
ICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSA0OworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDE2Owor
ICAgICAgICBtU3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRDNE
Rk1UX0QzMkZfTE9DS0FCTEU6CisvLyAgICAgIG1EZXB0aFNpemUgPSAzMjsKKy8vICAgICAgbVN0
ZW5jaWxTaXplID0gMDsKKy8vICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6
CisvLyAgICAgIG1EZXB0aFNpemUgPSAyNDsKKy8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKKy8v
ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIG1MZXZlbCA9IDA7CisgICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7
CisgICAgbU1heFBCdWZmZXJXaWR0aCA9IDA7CisgICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwor
ICAgIG1NYXhQQnVmZmVyUGl4ZWxzID0gMDsKKyAgICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50
ZXJ2YWw7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIG1OYXRpdmVS
ZW5kZXJhYmxlID0gRUdMX0ZBTFNFOworICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5h
dGl2ZVZpc3VhbFR5cGUgPSAwOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMy
X0JJVDsKKyAgICBtU2FtcGxlQnVmZmVycyA9IG11bHRpU2FtcGxlID8gMSA6IDA7CisgICAgbVNh
bXBsZXMgPSBtdWx0aVNhbXBsZTsKKyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQg
fCBFR0xfV0lORE9XX0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7CisgICAg
bVRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0g
MDsKKyAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gMDsKKyAgICBtVHJhbnNwYXJlbnRCbHVl
VmFsdWUgPSAwOworfQorCitFR0xDb25maWcgQ29uZmlnOjpnZXRIYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiAoRUdMQ29uZmlnKShzaXplX3QpbUNvbmZpZ0lEOworfQorCitTb3J0Q29uZmln
OjpTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKKyAgICA6IG1XYW50UmVkKGZh
bHNlKSwgbVdhbnRHcmVlbihmYWxzZSksIG1XYW50Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFs
c2UpLCBtV2FudEx1bWluYW5jZShmYWxzZSkKK3sKKyAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50
cyhhdHRyaWJMaXN0KTsKK30KKwordm9pZCBTb3J0Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9u
ZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCit7CisgICAgLy8gW0VHTF0gc2VjdGlvbiAz
LjQuMSBwYWdlIDI0CisgICAgLy8gU29ydGluZyBydWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVt
YmVyIG9mIGNvbG9yIGJpdHMsIG5vdCBjb25zaWRlcmluZworICAgIC8vIGNvbXBvbmVudHMgdGhh
dCBhcmUgMCBvciBkb24ndC1jYXJlLgorICAgIGZvciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0
cmliTGlzdDsgYXR0clswXSAhPSBFR0xfTk9ORTsgYXR0ciArPSAyKQorICAgIHsKKyAgICAgICAg
aWYgKGF0dHJbMV0gIT0gMCAmJiBhdHRyWzFdICE9IEVHTF9ET05UX0NBUkUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoYXR0clswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgIG1XYW50UmVkID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50
QWxwaGEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJ
WkU6IG1XYW50THVtaW5hbmNlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0VHTGludCBTb3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShj
b25zdCBDb25maWcgJmNvbmZpZykgY29uc3QKK3sKKyAgICBFR0xpbnQgdG90YWwgPSAwOworCisg
ICAgaWYgKG1XYW50UmVkKSAgICAgICB0b3RhbCArPSBjb25maWcubVJlZFNpemU7CisgICAgaWYg
KG1XYW50R3JlZW4pICAgICB0b3RhbCArPSBjb25maWcubUdyZWVuU2l6ZTsKKyAgICBpZiAobVdh
bnRCbHVlKSAgICAgIHRvdGFsICs9IGNvbmZpZy5tQmx1ZVNpemU7CisgICAgaWYgKG1XYW50QWxw
aGEpICAgICB0b3RhbCArPSBjb25maWcubUFscGhhU2l6ZTsKKyAgICBpZiAobVdhbnRMdW1pbmFu
Y2UpIHRvdGFsICs9IGNvbmZpZy5tTHVtaW5hbmNlU2l6ZTsKKworICAgIHJldHVybiB0b3RhbDsK
K30KKworYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3Qg
Q29uZmlnICp5KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMpKCp4LCAqeSk7Cit9CisKK2Jv
b2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAm
eSkgY29uc3QKK3sKKyAgICAjZGVmaW5lIFNPUlQoYXR0cmlidXRlKSAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKHguYXR0cmlidXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAg
ICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHJldHVybiB4LmF0dHJpYnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwK
KyAgICAgICAgfQorCisgICAgTUVUQV9BU1NFUlQoRUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcg
JiYgRUdMX1NMT1dfQ09ORklHIDwgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRyk7CisgICAgU09S
VChtQ29uZmlnQ2F2ZWF0KTsKKworICAgIE1FVEFfQVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdM
X0xVTUlOQU5DRV9CVUZGRVIpOworICAgIFNPUlQobUNvbG9yQnVmZmVyVHlwZSk7CisKKyAgICAv
LyBCeSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcg
dGhvc2UgdGhhdCBhcmUgcmVxdWVzdGVkIHRvIGJlID4gMC4KKyAgICBFR0xpbnQgeENvbXBvbmVu
dHNTaXplID0gd2FudGVkQ29tcG9uZW50c1NpemUoeCk7CisgICAgRUdMaW50IHlDb21wb25lbnRz
U2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHkpOworICAgIGlmICh4Q29tcG9uZW50c1NpemUg
IT0geUNvbXBvbmVudHNTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6
ZSA+IHlDb21wb25lbnRzU2l6ZTsKKyAgICB9CisKKyAgICBTT1JUKG1CdWZmZXJTaXplKTsKKyAg
ICBTT1JUKG1TYW1wbGVCdWZmZXJzKTsKKyAgICBTT1JUKG1TYW1wbGVzKTsKKyAgICBTT1JUKG1E
ZXB0aFNpemUpOworICAgIFNPUlQobVN0ZW5jaWxTaXplKTsKKyAgICBTT1JUKG1BbHBoYU1hc2tT
aXplKTsKKyAgICBTT1JUKG1OYXRpdmVWaXN1YWxUeXBlKTsKKyAgICBTT1JUKG1Db25maWdJRCk7
CisKKyAgICAjdW5kZWYgU09SVAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBXZSdkIGxp
a2UgdG8gdXNlIFNvcnRDb25maWcgdG8gYWxzbyBlbGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3Mu
CisvLyBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2UgbmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRo
IGRpZmZlcmVudCBwZXItUkdCLWNvbXBvbmVudCBsYXlvdXRzLAorLy8gYnV0IHRoZSBzYW1lIHRv
dGFsLgorLy8gNTU1MSBhbmQgNTY1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZm
ZXJlbnQuCisvLyA1NTUxIGFuZCA1NTUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUg
aXMgZGlmZmVyZW50LgorY29uc3QgRUdMaW50IENvbmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQor
eworICAgIEVHTF9SRURfU0laRSwgMSwKKyAgICBFR0xfR1JFRU5fU0laRSwgMSwKKyAgICBFR0xf
QkxVRV9TSVpFLCAxLAorICAgIEVHTF9MVU1JTkFOQ0VfU0laRSwgMSwKKyAgICAvLyBCVVQgTk9U
IEFMUEhBCisgICAgRUdMX05PTkUKK307CisKK0NvbmZpZ1NldDo6Q29uZmlnU2V0KCkKKyAgICA6
IG1TZXQoU29ydENvbmZpZyhtU29ydEF0dHJpYnMpKQoreworfQorCit2b2lkIENvbmZpZ1NldDo6
YWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBF
R0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RG
T1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgQ29u
ZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWws
IHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSk7CisK
KyAgICBtU2V0Lmluc2VydChjb25maWcpOworfQorCitzaXplX3QgQ29uZmlnU2V0OjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVNldC5zaXplKCk7Cit9CisKK2Jvb2wgQ29uZmlnU2V0Ojpn
ZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBF
R0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgdmVjdG9yPGNvbnN0
IENvbmZpZyo+IHBhc3NlZDsKKyAgICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7CisKKyAg
ICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5k
KCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAg
IGNvbnN0IEVHTGludCAqYXR0cmlidXRlID0gYXR0cmliTGlzdDsKKworICAgICAgICB3aGlsZSAo
YXR0cmlidXRlWzBdICE9IEVHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KGF0dHJpYnV0ZVswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQlVG
RkVSX1NJWkU6ICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFT
aXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUJsdWVTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1HcmVlblNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpF
OiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
U1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29u
ZmlnQ2F2ZWF0ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1MZXZlbCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxF
OiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVf
VklTVUFMX1RZUEU6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49
IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
U2FtcGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9
IChjb25maWctPm1TdXJmYWNlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JM
VUVfVkFMVUU6ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFO
U1BBUkVOVF9HUkVFTl9WQUxVRTogICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5W
YWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3Bh
cmVudFJlZFZhbHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmln
LT5tQmluZFRvVGV4dHVyZVJHQiA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRj
aCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0JBID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lO
VEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9M
VU1JTkFOQ0VfU0laRTogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUg
Pj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBo
YU1hc2tTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tQ29sb3JCdWZmZXJUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBt
YXRjaCA9IChjb25maWctPm1SZW5kZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmli
dXRlWzFdOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1B
UDogICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1B
TlQ6ICAgICAgICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1
dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhc3NlZC5wdXNo
X2JhY2soJipjb25maWcpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3MpCisg
ICAgeworICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25m
aWcoYXR0cmliTGlzdCkpOworCisgICAgICAgIEVHTGludCBpbmRleDsKKyAgICAgICAgZm9yIChp
bmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGlu
dD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZp
Z3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAg
ICAgICAqbnVtQ29uZmlnID0gaW5kZXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
ICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitjb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hh
bmRsZSkKK3sKKyAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmln
ICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZy0+Z2V0
SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
JigqY29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorfQpJ
bmRleDogQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliRUdML0NvbmZpZy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IENvbmZpZy5oOiBEZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUg
Zm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRz
IEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNlY3Rp
b24gMy40IHBhZ2UgMTUuCisKKyNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8KKyNkZWZpbmUgSU5D
TFVERV9DT05GSUdfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+Cisj
aW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKKworY2xhc3Mg
Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1v
ZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZP
Uk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVH
TGludCBtdWx0aVNhbXBsZSk7CisKKyAgICB2b2lkIHNldERlZmF1bHRzKCk7CisgICAgdm9pZCBz
ZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVH
TGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZP
Uk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7CisgICAgRUdMQ29u
ZmlnIGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgY29uc3QgRDNERElTUExBWU1PREUgbURpc3Bs
YXlNb2RlOworICAgIGNvbnN0IEQzREZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgIGNv
bnN0IEQzREZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIGNvbnN0IEVHTGludCBtTXVs
dGlTYW1wbGU7CisKKyAgICBFR0xpbnQgbUJ1ZmZlclNpemU7ICAgICAgICAgICAgICAvLyBEZXB0
aCBvZiB0aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1SZWRTaXplOyAgICAgICAgICAgICAg
ICAgLy8gQml0cyBvZiBSZWQgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtR3JlZW5T
aXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgR3JlZW4gaW4gdGhlIGNvbG9yIGJ1ZmZlcgor
ICAgIEVHTGludCBtQmx1ZVNpemU7ICAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQmx1ZSBpbiB0
aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1MdW1pbmFuY2VTaXplOyAgICAgICAgICAgLy8g
Qml0cyBvZiBMdW1pbmFuY2UgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtQWxwaGFT
aXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgaW4gdGhlIGNvbG9yIGJ1ZmZlcgor
ICAgIEVHTGludCBtQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgTWFz
ayBpbiB0aGUgbWFzayBidWZmZXIKKyAgICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCOyAg
ICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQiB0ZXh0dXJlcy4KKyAgICBFR0xCb29sZWFuIG1C
aW5kVG9UZXh0dXJlUkdCQTsgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQkEgdGV4dHVyZXMu
CisgICAgRUdMZW51bSBtQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgLy8gQ29sb3IgYnVmZmVyIHR5
cGUKKyAgICBFR0xlbnVtIG1Db25maWdDYXZlYXQ7ICAgICAgICAgICAvLyBBbnkgY2F2ZWF0cyBm
b3IgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICBFR0xpbnQgbUNvbmZpZ0lEOyAgICAgICAgICAgICAg
ICAvLyBVbmlxdWUgRUdMQ29uZmlnIGlkZW50aWZpZXIKKyAgICBFR0xpbnQgbUNvbmZvcm1hbnQ7
ICAgICAgICAgICAgICAvLyBXaGV0aGVyIGNvbnRleHRzIGNyZWF0ZWQgd2l0aCB0aGlzIGNvbmZp
ZyBhcmUgY29uZm9ybWFudAorICAgIEVHTGludCBtRGVwdGhTaXplOyAgICAgICAgICAgICAgIC8v
IEJpdHMgb2YgWiBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgRUdMaW50IG1MZXZlbDsgICAgICAg
ICAgICAgICAgICAgLy8gRnJhbWUgYnVmZmVyIGxldmVsCisgICAgRUdMQm9vbGVhbiBtTWF0Y2hO
YXRpdmVQaXhtYXA7ICAgLy8gTWF0Y2ggdGhlIG5hdGl2ZSBwaXhtYXAgZm9ybWF0CisgICAgRUdM
aW50IG1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICAgLy8gTWF4aW11bSB3aWR0aCBvZiBwYnVmZmVy
CisgICAgRUdMaW50IG1NYXhQQnVmZmVySGVpZ2h0OyAgICAgICAgLy8gTWF4aW11bSBoZWlnaHQg
b2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlclBpeGVsczsgICAgICAgIC8vIE1heGlt
dW0gc2l6ZSBvZiBwYnVmZmVyCisgICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICAg
Ly8gTWF4aW11bSBzd2FwIGludGVydmFsCisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7ICAg
ICAgICAgLy8gTWluaW11bSBzd2FwIGludGVydmFsCisgICAgRUdMQm9vbGVhbiBtTmF0aXZlUmVu
ZGVyYWJsZTsgICAgLy8gRUdMX1RSVUUgaWYgbmF0aXZlIHJlbmRlcmluZyBBUElzIGNhbiByZW5k
ZXIgdG8gc3VyZmFjZQorICAgIEVHTGludCBtTmF0aXZlVmlzdWFsSUQ7ICAgICAgICAgIC8vIEhh
bmRsZSBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB2aXN1YWwKKyAgICBFR0xpbnQgbU5hdGl2ZVZp
c3VhbFR5cGU7ICAgICAgICAvLyBOYXRpdmUgdmlzdWFsIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQg
dmlzdWFsCisgICAgRUdMaW50IG1SZW5kZXJhYmxlVHlwZTsgICAgICAgICAgLy8gV2hpY2ggY2xp
ZW50IHJlbmRlcmluZyBBUElzIGFyZSBzdXBwb3J0ZWQuCisgICAgRUdMaW50IG1TYW1wbGVCdWZm
ZXJzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIG11bHRpc2FtcGxlIGJ1ZmZlcnMKKyAgICBFR0xp
bnQgbVNhbXBsZXM7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgcGl4
ZWwKKyAgICBFR0xpbnQgbVN0ZW5jaWxTaXplOyAgICAgICAgICAgICAvLyBCaXRzIG9mIFN0ZW5j
aWwgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgRUdMaW50IG1TdXJmYWNlVHlwZTsgICAgICAg
ICAgICAgLy8gV2hpY2ggdHlwZXMgb2YgRUdMIHN1cmZhY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAg
RUdMZW51bSBtVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgLy8gVHlwZSBvZiB0cmFuc3BhcmVuY3kg
c3VwcG9ydGVkCisgICAgRUdMaW50IG1UcmFuc3BhcmVudFJlZFZhbHVlOyAgICAgLy8gVHJhbnNw
YXJlbnQgcmVkIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEdyZWVuVmFsdWU7ICAgLy8g
VHJhbnNwYXJlbnQgZ3JlZW4gdmFsdWUKKyAgICBFR0xpbnQgbVRyYW5zcGFyZW50Qmx1ZVZhbHVl
OyAgICAvLyBUcmFuc3BhcmVudCBibHVlIHZhbHVlCit9OworCisvLyBGdW5jdGlvbiBvYmplY3Qg
dXNlZCBieSBTVEwgc29ydGluZyByb3V0aW5lcyBmb3Igb3JkZXJpbmcgQ29uZmlncyBhY2NvcmRp
bmcgdG8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0LgorY2xhc3MgU29ydENvbmZpZworewor
ICBwdWJsaWM6CisgICAgZXhwbGljaXQgU29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxp
c3QpOworCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmln
ICp5KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBD
b25maWcgJnkpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgdm9pZCBzY2FuRm9yV2FudGVkQ29t
cG9uZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOworICAgIEVHTGludCB3YW50ZWRDb21w
b25lbnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29uc3Q7CisKKyAgICBib29sIG1XYW50
UmVkOworICAgIGJvb2wgbVdhbnRHcmVlbjsKKyAgICBib29sIG1XYW50Qmx1ZTsKKyAgICBib29s
IG1XYW50QWxwaGE7CisgICAgYm9vbCBtV2FudEx1bWluYW5jZTsKK307CisKK2NsYXNzIENvbmZp
Z1NldAoreworICAgIGZyaWVuZCBEaXNwbGF5OworCisgIHB1YmxpYzoKKyAgICBDb25maWdTZXQo
KTsKKworICAgIHZvaWQgYWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWlu
U3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1w
bGUpOworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBnZXRDb25maWdzKEVHTENv
bmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6
ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdMQ29u
ZmlnIGNvbmZpZ0hhbmRsZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oQ29uZmlnU2V0KTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0Q29u
ZmlnPiBTZXQ7CisgICAgdHlwZWRlZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIFNldCBt
U2V0OworCisgICAgc3RhdGljIGNvbnN0IEVHTGludCBtU29ydEF0dHJpYnNbXTsKK307Cit9CisK
KyNlbmRpZiAgIC8vIElOQ0xVREVfQ09ORklHX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRGlzcGxheS5jcHA6IElt
cGxlbWVudHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFj
dAorLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdM
RGlzcGxheS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFp
bi5oIgorCisjZGVmaW5lIFJFRl9SQVNUIDAgICAvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRl
ZmluaW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MK
KworbmFtZXNwYWNlIGVnbAoreworRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkg
OiBtRGMoZGV2aWNlQ29udGV4dCkKK3sKKyAgICBtRDNkOSA9IE5VTEw7CisgICAgbURldmljZSA9
IE5VTEw7CisKKyAgICBtQWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVMVDsKKworICAgICNpZiBS
RUZfUkFTVCA9PSAxIHx8IGRlZmluZWQoRk9SQ0VfUkVGX1JBU1QpCisgICAgICAgIG1EZXZpY2VU
eXBlID0gRDNEREVWVFlQRV9SRUY7CisgICAgI2Vsc2UKKyAgICAgICAgbURldmljZVR5cGUgPSBE
M0RERVZUWVBFX0hBTDsKKyAgICAjZW5kaWYKKworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSAxOwor
ICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAxOworICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKK30KKwor
RGlzcGxheTo6fkRpc3BsYXkoKQoreworICAgIHRlcm1pbmF0ZSgpOworfQorCitib29sIERpc3Bs
YXk6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShE
M0RfU0RLX1ZFUlNJT04pOworCisgICAgaWYgKG1EM2Q5KQorICAgIHsKKyAgICAgICAgaWYgKG1E
YyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBj
b3JyZXNwb25kcyB0bworICAgICAgICB9CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNk
OS0+R2V0RGV2aWNlQ2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7CisK
KyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGV2aWNlQ2Fw
cy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUQzZDkgPSBOVUxMOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbU1pblN3YXBJ
bnRlcnZhbCA9IDQ7CisgICAgICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKKworICAgICAg
ICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfSU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2Fw
SW50ZXJ2YWwsIDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZh
bCwgMCk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFs
cyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgo
bU1heFN3YXBJbnRlcnZhbCwgMSk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNl
bnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKSAgICAgICB7bU1pblN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVy
dmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7fQorICAgICAgICAgICAgaWYgKG1E
ZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUUpICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMp
OyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQorICAg
ICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNF
TlRfSU5URVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5T
d2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRl
cnZhbCwgNCk7fQorCisgICAgICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9y
bWF0c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGTVRfQTFSNUc1QjUs
CisgICAgICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1w
IGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVz
aW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisg
ICAgICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgICAgIEQzREZNVF9S
NUc2QjUsCisgICAgICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgICAg
IEQzREZNVF9YOFI4RzhCOAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgRDNE
Rk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDMyLAor
ICAgICAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDI0
UzgsCisgICAgICAgICAgICAgICAgRDNERk1UX0QyNFg4LAorICAgICAgICAgICAgLy8gIEQzREZN
VF9EMjRYNFM0LAorICAgICAgICAgICAgICAgIEQzREZNVF9EMTYsCisgICAgICAgICAgICAvLyAg
RDNERk1UX0QzMkZfTE9DS0FCTEUsCisgICAgICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlN
b2RlOworICAgICAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwg
JmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAgICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7
CisKKyAgICAgICAgICAgIGZvciAoaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBz
aXplb2YocmVuZGVyVGFyZ2V0Rm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVu
Y2lsSW5kZXggPCBzaXplb2YoZGVwdGhTdGVuY2lsRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFU
KTsgZGVwdGhTdGVuY2lsSW5kZXgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNp
bEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQz
RFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQoY3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcElu
dGVydmFsLCBtTWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNp
bEZvcm1hdCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBh
IHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5CisgICAgICAgICAgICBFR0xpbnQg
aW5kZXggPSAxOworICAgICAgICAgICAgZm9yIChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9
IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsg
Y29uZmlnKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3Vy
YXRpb24gPSAqY29uZmlnOworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lE
ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgIG1D
b25maWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICB7CisgICAgICAg
IHRlcm1pbmF0ZSgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBEaXNwbGF5Ojp0ZXJtaW5hdGUoKQoreworICAgIGZvciAoU3Vy
ZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2Ug
IT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSAq
c3VyZmFjZTsKKyAgICB9CisKKyAgICBmb3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9yIGNvbnRleHQg
PSBtQ29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjb250
ZXh0KyspCisgICAgeworICAgICAgICBnbERlc3Ryb3lDb250ZXh0KCpjb250ZXh0KTsKKyAgICB9
CisKKyAgICBpZiAobURldmljZSkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgbURldmljZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EM2Q5KQorICAgIHsK
KyAgICAgICAgbUQzZDktPlJlbGVhc2UoKTsKKyAgICAgICAgbUQzZDkgPSBOVUxMOworICAgIH0K
K30KKwordm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0YXJ0
ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgbVNjZW5lU3RhcnRl
ZCA9IHRydWU7CisgICAgfQorfQorCit2b2lkIERpc3BsYXk6OmVuZFNjZW5lKCkKK3sKKyAgICBp
ZiAobVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURldmljZS0+
RW5kU2NlbmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAg
bVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgIH0KK30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25m
aWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQg
Y29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgcmV0dXJuIG1Db25maWdTZXQu
Z2V0Q29uZmlncyhjb25maWdzLCBhdHRyaWJMaXN0LCBjb25maWdTaXplLCBudW1Db25maWcpOwor
fQorCitib29sIERpc3BsYXk6OmdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xp
bnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKworICAgIHN3aXRjaCAoYXR0
cmlidXRlKQorICAgIHsKKyAgICAgIGNhc2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CdWZmZXJTaXplOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1BbHBoYVNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X0JMVUVfU0laRTogICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CbHVl
U2l6ZTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1HcmVlblNpemU7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZWRTaXplOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0RFUFRIX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1EZXB0aFNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NU
RU5DSUxfU0laRTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdGVuY2ls
U2l6ZTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAg
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25maWdDYXZlYXQ7ICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDogICAgICAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25maWdJRDsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1MZXZlbDsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElW
RV9SRU5ERVJBQkxFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVSZW5k
ZXJhYmxlOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTog
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1TYW1wbGVzOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1TYW1wbGVCdWZmZXJzOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NVUkZBQ0Vf
VFlQRTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZTsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFR5cGU7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudEJsdWVWYWx1ZTsgICBicmVhazsKKyAgICAgIGNhc2Ug
RUdMX1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVFOiAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1U
cmFuc3BhcmVudEdyZWVuVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5U
X1JFRF9WQUxVRTogICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFJlZFZh
bHVlOyAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCOyAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBOiAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X01JTl9TV0FQX0lOVEVSVkFMOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NaW5T
d2FwSW50ZXJ2YWw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVS
VkFMOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NYXhTd2FwSW50ZXJ2YWw7ICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiAgICAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1MdW1pbmFuY2VTaXplOyAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1BbHBoYU1hc2tTaXplOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NP
TE9SX0JVRkZFUl9UWVBFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db2xvckJ1
ZmZlclR5cGU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTog
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJhYmxlVHlwZTsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgICp2YWx1
ZSA9IGZhbHNlOyBVTklNUExFTUVOVEVEKCk7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1Db25mb3JtYW50OyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3VyZmFj
ZSAqRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNv
bmZpZykKK3sKKyAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0Lmdl
dChjb25maWcpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OworCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9
IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
Rm9ybWF0ID0gY29uZmlndXJhdGlvbi0+bVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJIZWlnaHQgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0
aFN0ZW5jaWwgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplID8gVFJVRSA6IEZBTFNFOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2
aWNlV2luZG93ID0gd2luZG93OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVh
bGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAg
IC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0
aW9uSW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfQ09QWTsKKyAgICBwcmVz
ZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7ICAgLy8gRklYTUUKKworICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAg
ICAgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RD
UkVBVEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFn
cyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVE
RVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworCisgICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWds
OjpTdXJmYWNlKilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZSht
QWRhcHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9T
T0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsK
KworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICBtU2NlbmVTdGFy
dGVkID0gZmFsc2U7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBD
aGFpbik7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0
aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBpZiAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFj
ZXMvd2luZG93cyBjdXJyZW50bHkgaW4gdXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICAg
ICAgLy8gYSBzZXBhcmF0ZSBzd2FwIGNoYWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KKyAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBD
aGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOworCisgICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICAgICAgLy8gQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlIGEgZGVwdGhzdGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKKyAgICAgICAg
ICAgIC8vIENyZWF0ZURldmljZSwgc28gd2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgorICAgICAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQ
YXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVR
dWFsaXR5LCBGQUxTRSwgJmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworCisgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3YXBDaGFpbi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5j
aWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW4uIE91dCBvZiBtZW1vcnkuIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYg
dGhlIGRldmljZSBhbHJlYWR5IGV4aXN0cywgYnV0IHRoZXJlIGFyZSBubyBzdXJmYWNlcyBpbiB1
c2UsIHRoZW4gYWxsIHRoZSBzdXJmYWNlcy93aW5kb3dzCisgICAgICAgICAgICAvLyBoYXZlIGJl
ZW4gZGVzdHJveWVkLCBhbmQgd2Ugc2hvdWxkIHJlcHVycG9zZSB0aGUgb3JpZ2luYWxseSBjcmVh
dGVkIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvcgorICAgICAgICAgICAgLy8gdXNlIHdpdGggdGhl
IG5ldyBzdXJmYWNlIHdlIGFyZSBjcmVhdGluZy4KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXNl
dCBwcmVzZW50YXRpb24gcGFyYW1ldGVycyBmb3IgZGV2aWNlLiBPdXQgb2YgbWVtb3J5LiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNl
KilOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1EZXZpY2UpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPkdldFN3YXBDaGFpbigwLCAmc3dhcENoYWluKTsKKyAgICAgICAgICAgICAgICBtRGV2aWNl
LT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBOVUxMOwor
CisgICAgaWYgKHN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFj
ZSh0aGlzLCBzd2FwQ2hhaW4sIGRlcHRoU3RlbmNpbFN1cmZhY2UsIGNvbmZpZ3VyYXRpb24pOwor
ICAgICAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7CisKKyAgICAgICAgc3dhcENoYWlu
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK0VHTENvbnRl
eHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQoreworICAg
IGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcgPSBtQ29uZmlnU2V0LmdldChjb25maWdIYW5kbGUp
OworCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY29uZmlnKTsK
KyAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CisKKyAgICByZXR1cm4gY29udGV4dDsK
K30KKwordm9pZCBEaXNwbGF5OjpkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
Cit7CisgICAgZGVsZXRlIHN1cmZhY2U7CisgICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7
Cit9CisKK3ZvaWQgRGlzcGxheTo6ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQp
Cit7CisgICAgZ2xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICBtQ29udGV4dFNldC5lcmFz
ZShjb250ZXh0KTsKK30KKworYm9vbCBEaXNwbGF5Ojppc0luaXRpYWxpemVkKCkKK3sKKyAgICBy
ZXR1cm4gbUQzZDkgIT0gTlVMTCAmJiBtQ29uZmlnU2V0LnNpemUoKSA+IDA7Cit9CisKK2Jvb2wg
RGlzcGxheTo6aXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKQoreworICAgIHJldHVybiBt
Q29uZmlnU2V0LmdldChjb25maWcpICE9IE5VTEw7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxp
ZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIG1Db250ZXh0U2V0
LmZpbmQoY29udGV4dCkgIT0gbUNvbnRleHRTZXQuZW5kKCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6
aXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIHJldHVybiBtU3Vy
ZmFjZVNldC5maW5kKHN1cmZhY2UpICE9IG1TdXJmYWNlU2V0LmVuZCgpOworfQorCitib29sIERp
c3BsYXk6Omhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdykKK3sKKyAgICBmb3Ig
KFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJm
YWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBpZiAo
KCpzdXJmYWNlKS0+Z2V0V2luZG93SGFuZGxlKCkgPT0gd2luZG93KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBEaXNwbGF5OjpzZXRTd2FwSW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCit7
CisgICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOworICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtU3dhcEludGVydmFsLCBtTWluU3dhcEludGVydmFsKTsKKyAgICBtU3dhcEludGVydmFs
ID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCk7CisKKyAgICBtUHJl
c2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOworfQorCitEV09S
RCBEaXNwbGF5OjpnZXRQcmVzZW50SW50ZXJ2YWwoKQoreworICAgIHJldHVybiBtUHJlc2VudElu
dGVydmFsOworfQorCitEV09SRCBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwoR0xpbnQgaW50ZXJ2
YWwpCit7CisgICAgc3dpdGNoKGludGVydmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUU7CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0RFRkFVTFQ7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERl
dmljZSgpCit7CisgICAgcmV0dXJuIG1EZXZpY2U7Cit9CisKK0QzRENBUFM5IERpc3BsYXk6Omdl
dERldmljZUNhcHMoKQoreworICAgIHJldHVybiBtRGV2aWNlQ2FwczsKK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3Bs
YXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFi
c3RyYWN0CisvLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50
cyBFR0xEaXNwbGF5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgorCisjaWZu
ZGVmIElOQ0xVREVfRElTUExBWV9IXworI2RlZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KKworI2lm
bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNl
bmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRl
IDxzZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGli
RUdML0NvbmZpZy5oIgorI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCisKK25hbWVzcGFjZSBl
Z2wKK3sKK2NsYXNzIERpc3BsYXkKK3sKKyAgcHVibGljOgorICAgIERpc3BsYXkoSERDIGRldmlj
ZUNvbnRleHQpOworCisgICAgfkRpc3BsYXkoKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwor
ICAgIHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY2VuZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmRTY2VuZSgpOworCisgICAgYm9vbCBnZXRDb25maWdzKEVHTENv
bmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6
ZSwgRUdMaW50ICpudW1Db25maWcpOworICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZp
ZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCisgICAgZWdsOjpT
dXJmYWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmln
KTsKKyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7
CisKKyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisgICAg
dm9pZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisKKyAgICBib29sIGlz
SW5pdGlhbGl6ZWQoKTsKKyAgICBib29sIGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZyk7
CisgICAgYm9vbCBpc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9v
bCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIGJvb2wgaGFzRXhp
c3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKKworICAgIHZvaWQgc2V0U3dhcEludGVy
dmFsKEdMaW50IGludGVydmFsKTsKKyAgICBEV09SRCBnZXRQcmVzZW50SW50ZXJ2YWwoKTsKKyAg
ICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGludGVydmFsKTsKKworICAgIHZp
cnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7CisgICAgdmlydHVhbCBEM0RDQVBT
OSBnZXREZXZpY2VDYXBzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRGlzcGxheSk7CisgICAgY29uc3QgSERDIG1EYzsKKworICAgIFVJTlQgbUFkYXB0ZXI7
CisgICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBJRGlyZWN0M0Q5ICptRDNkOTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOwor
CisgICAgYm9vbCBtU2NlbmVTdGFydGVkOworICAgIEdMaW50IG1Td2FwSW50ZXJ2YWw7CisgICAg
RUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7CisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7Cisg
ICAgRFdPUkQgbVByZXNlbnRJbnRlcnZhbDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFj
ZSo+IFN1cmZhY2VTZXQ7CisgICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKKworICAgIENvbmZp
Z1NldCBtQ29uZmlnU2V0OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENv
bnRleHRTZXQ7CisgICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKK307Cit9CisKKyNlbmRpZiAg
IC8vIElOQ0xVREVfRElTUExBWV9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzMDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRz
IHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQor
Ly8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFj
ayBidWZmZXJzLgorLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCisKKyNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJF
R0wvbWFpbi5oIgorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKK25hbWVzcGFjZSBlZ2wK
K3sKK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dhcENoYWlu
OSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsLCBjb25zdCBDb25m
aWcgKmNvbmZpZykgCisgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVN3YXBDaGFpbihzd2FwQ2hh
aW4pLCBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCksIG1Db25maWcoY29uZmlnKQoreworICAg
IG1CYWNrQnVmZmVyID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRmxp
cFRleHR1cmUgPSBOVUxMOworICAgIG1GbGlwU3RhdGUgPSBOVUxMOworICAgIG1QcmVGbGlwU3Rh
dGUgPSBOVUxMOworCisgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xf
RElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3Bl
Y3QgcmF0aW8KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOworICAgIG1Td2Fw
QmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKKworICAgIGlmIChtU3dhcENoYWluKQor
ICAgIHsKKyAgICAgICAgbVN3YXBDaGFpbi0+QWRkUmVmKCk7CisgICAgICAgIG1Td2FwQ2hhaW4t
PkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7
CisKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtQmFja0J1
ZmZlci0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0
aW9uLldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OworCisgICAg
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KG1XaWR0aCwg
bUhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUs
IGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBO
VUxMKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihF
R0xfQkFEX0FMTE9DKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
IGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUZsaXBUZXh0dXJlLCBOVUxM
KTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBlcnJvcihFR0xfQkFEX0FMTE9DKTsKKworICAg
ICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N1cmZhY2U6On5TdXJmYWNlKCkKK3sKKyAgICBpZiAo
bVN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVs
ZWFzZSgpOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
bVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2ls
KQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IGlmIChtRmxpcFRleHR1cmUpCisgICAgeworICAgICAgICBtRmxpcFRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1GbGlwU3Rh
dGUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVByZUZsaXBTdGF0ZSkKKyAgICB7Cisg
ICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0hXTkQgU3VyZmFj
ZTo6Z2V0V2luZG93SGFuZGxlKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICAgICAgbVN3
YXBDaGFpbi0+R2V0UHJlc2VudFBhcmFtZXRlcnMoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAg
ICAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdzsKKyAgICB9CisKKyAg
ICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3Rh
dGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQor
eworICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklU
RUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVF
TkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKE5VTEwpOworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwor
CisgICAgLy8gSnVzdCBzYW1wbGUgdGhlIHRleHR1cmUKKyAgICBkZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhU
VVJFKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9Q
LCBEM0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHNvdXJjZSk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZf
UE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVS
LCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X1NSR0JURVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8
IEQzREZWRl9URVgxKTsKKworICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsg
Ly8gRHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMgYWJvdXQgc3RyZWFtIDAsIG5vdCB0aGUgcmVz
dC4KK30KKwordm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit7CisgICAgSFJFU1VMVCBocjsKKwor
ICAgIGlmIChtRmxpcFN0YXRlID09IE5VTEwpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdHdv
IHN0YXRlIGJsb2NrcyBib3RoIHJlY29yZGluZyB0aGUgc3RhdGVzIHRoYXQgYXJlIGNoYW5nZWQg
d2hlbiBzd2FwcGluZy4KKworICAgICAgICAvLyBtUHJlRmxpcFN0YXRlIHdpbGwgcmVjb3JkIHRo
ZSBvcmlnaW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgorICAgICAgICBociA9IGRldmljZS0+QmVnaW5T
dGF0ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgd3Jp
dGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsKKyAgICAgICAgaHIgPSBkZXZp
Y2UtPkVuZFN0YXRlQmxvY2soJm1QcmVGbGlwU3RhdGUpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
bUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgc3RhdGUgZm9yIHRoZSBzd2FwIG9wZXJhdGlvbi4K
KyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmlj
ZSwgc291cmNlKTsKKworICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBT
dGF0ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICB7CisgICAgICAgICAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICAg
ICAgICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1QcmVGbGlwU3Rh
dGUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgaHIgPSBtRmxpcFN0YXRlLT5BcHBseSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhyID0g
bVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgIH0KKworICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtUHJl
RmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmbVBy
ZUZsaXBEZXB0aFN0ZW5jaWwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbUJh
Y2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKK30K
Kwordm9pZCBTdXJmYWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKQor
eworICAgIG1QcmVGbGlwU3RhdGUtPkFwcGx5KCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRh
cmdldCgwLCBtUHJlRmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2ls
U3VyZmFjZShtUHJlRmxpcERlcHRoU3RlbmNpbCk7CisKKyAgICBpZiAobVByZUZsaXBCYWNrQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBCYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAg
ICAgIG1QcmVGbGlwQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlw
RGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KK30KKwor
Ym9vbCBTdXJmYWNlOjpzd2FwKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAg
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKKwor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7CisgICAgICAgIG1GbGlw
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7CisKKyAgICAgICAg
bURpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QobVJlbmRl
clRhcmdldCwgTlVMTCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAg
ICAgICAgYXBwbHlGbGlwU3RhdGUoZGV2aWNlLCBtRmxpcFRleHR1cmUpOworCisgICAgICAgIC8v
IFJlbmRlciB0aGUgdGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRoZSBiYWNrIGJ1ZmZlcgorICAg
ICAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3sgICAgIDAgLSAwLjVmLCAgICAgICAwIC0gMC41Ziwg
MC4wZiwgMS4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge21X
aWR0aCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAxLjBmfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYs
IDAuMGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
ICAgIDAgLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgMC4wZiwgMC4wZn19OyAg
IC8vIHgsIHksIHosIHJodywgdSwgdgorCisgICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7
CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBx
dWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICAgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVh
c2UoKTsKKworICAgICAgICByZXN0b3JlU3RhdGUoZGV2aWNlKTsKKworICAgICAgICBtRGlzcGxh
eS0+ZW5kU2NlbmUoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVz
ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIG1EaXNwbGF5LT5nZXRQcmVzZW50SW50ZXJ2YWwo
KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFM
RVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJ
Q0VMT1NUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRf
TE9TVCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRUdMaW50IFN1cmZhY2U6Omdl
dFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitFR0xpbnQgU3VyZmFj
ZTo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworSURpcmVj
dDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1SZW5k
ZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlN1
cmZhY2U6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAg
eworICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJm
YWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhl
IGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8v
IEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEu
NF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaWZuZGVmIElOQ0xVREVfU1VSRkFDRV9IXworI2Rl
ZmluZSBJTkNMVURFX1NVUkZBQ0VfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKK2NsYXNzIENvbmZpZzsKKwor
Y2xhc3MgU3VyZmFjZQoreworICBwdWJsaWM6CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5
LCBJRGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBkZXB0
aFN0ZW5jaWwsIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworCisgICAgflN1cmZhY2UoKTsK
KworICAgIEhXTkQgZ2V0V2luZG93SGFuZGxlKCk7CisgICAgYm9vbCBzd2FwKCk7CisKKyAgICB2
aXJ0dWFsIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7
CisKKyAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45
ICpjb25zdCBtU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJl
OworCisgICAgdm9pZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElE
aXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSk7CisgICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICBJ
RGlyZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2Nr
OSAqbVByZUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBCYWNrQnVm
ZmVyOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKKworICAg
IGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2Fz
IGNyZWF0ZWQgd2l0aAorICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWln
aHQgb2Ygc3VyZmFjZQorICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0
aCBvZiBzdXJmYWNlCisvLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6
b250YWwgZG90IHBpdGNoCisvLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZl
cnRpY2FsIGRvdCBwaXRjaAorLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJ
ZiB0cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCisvLyAgRUdMQm9vbGVhbiBt
aXBtYXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcworLy8gIEVH
TGludCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRv
CisvLyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29s
dmUgYmVoYXZpb3IKKyAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxh
eSBhc3BlY3QgcmF0aW8KKyAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVu
ZGVyIGJ1ZmZlcgorICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIg
c3dhcCBiZWhhdmlvcgorLy8gIEVHTGVudW0gdGV4dHVyZUZvcm1hdDsgICAgICAgICAvLyBGb3Jt
YXQgb2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCisvLyAgRUdMZW51bSB0ZXh0
dXJlVGFyZ2V0OyAgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQor
Ly8gIEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9w
ZW5WRworLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBm
b3IgT3BlblZHCit9OworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KSW5kZXg6
IEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gbGliRUdMLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4KKwor
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgorI2lu
Y2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkpCit7CisgICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7CisgICAgfQorCisg
ICAgaWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmln
IGNvbmZpZykKK3sKKyAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbmZpZyhj
b25maWcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBmYWxz
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIXZhbGlk
YXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRT
dXJmYWNlKHN1cmZhY2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VS
RkFDRSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gIkMi
Cit7CitFR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigp
Iik7CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOworCisgICAg
aWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50
RXJyb3IoRUdMX1NVQ0NFU1MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworRUdM
RGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNw
bGF5X2lkKQoreworICAgIFRSQUNFKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCA9
IDB4JTAuOHApIiwgZGlzcGxheV9pZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBSZXR1cm4gdGhlIHNhbWUgRUdMRGlzcGxheSBoYW5kbGUgd2hlbiBkaXNwbGF5X2lkIGFs
cmVhZHkgY3JlYXRlZCBhIGRpc3BsYXkKKworICAgICAgICBpZiAoZGlzcGxheV9pZCA9PSBFR0xf
REVGQVVMVF9ESVNQTEFZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6
RGlzcGxheSgoSERDKU5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlfaWQgaXMgYSB2YWxpZCBkaXNw
bGF5IGRldmljZSBjb250ZXh0CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgZWdsOjpEaXNwbGF5
KChIREMpZGlzcGxheV9pZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19ESVNQTEFZKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisKK0VH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAq
bWFqb3IsIEVHTGludCAqbWlub3IpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4
JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44cCki
LAorICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOworICAgICAgICBpZiAo
bWlub3IpICptaW5vciA9IDQ7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdM
X0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUoRUdMRGlzcGxh
eSBkcHkpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHApIiwgZHB5KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZB
TFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgZGlzcGxheS0+dGVybWluYXRl
KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitj
b25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGlu
dCBuYW1lKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQg
bmFtZSA9ICVkKSIsIGRweSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKKyAgICAgICAgICAgIHJldHVybiBzdWNj
ZXNzKCJPcGVuR0xfRVMiKTsKKyAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgorICAgICAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoIiIpOworICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoKKyAg
ICAgICAgICAgIHJldHVybiBzdWNjZXNzKCJUcmFuc0dhbWluZyBJbmMuIik7CisgICAgICAgICAg
Y2FzZSBFR0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKGdpdC1k
ZXZlbCAiX19EQVRFX18iICIgX19USU1FX18iKSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIE5V
TEw7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBk
cHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9j
b25maWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZp
ZyAqY29uZmlncyA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXplID0g
JWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZp
Z3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFudW1fY29uZmln
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIs
IEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlz
dFtdID0gICAge0VHTF9OT05FfTsKKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ3Mo
Y29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7
Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRw
eSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQg
Y29uZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykKK3sKKyAgICBUUkFDRSgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIK
KyAgICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19z
aXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGF0dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghbnVtX2NvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYgKCFh
dHRyaWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBhdHRyaWJM
aXN0OworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdzLCBh
dHRyaWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
R2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQg
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkg
PSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9
ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29uZmlnLCBh
dHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBp
ZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENv
bmZpZ0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VH
TFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisgICAgICAg
IEhXTkQgd2luZG93ID0gKEhXTkQpd2luOworCisgICAgICAgIGlmICghSXNXaW5kb3cod2luZG93
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZFX1dJ
TkRPVywgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJpYl9s
aXN0KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmF0dHJpYl9saXN0ICE9IEVHTF9O
T05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3Rb
MF0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVS
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJfbGlzdFsxXSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JBQ0tf
QlVGRkVSOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVyaW5n
IGRpcmVjdGx5IHRvIGZyb250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdf
Q09MT1JTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhB
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gs
IEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0Up
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkaXNwbGF5LT5oYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNF
KTsKKyAgICAgICAgfQorCisgICAgICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IChFR0xTdXJmYWNl
KWRpc3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcpOworCisgICAgICAg
IHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NV
UkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMU3Vy
ZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0Uo
IihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29u
ZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEVHTF9OT19TVVJGQUNFOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQ
aXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBUUkFD
RSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAs
IEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFwLCBh
dHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVH
TF9OT19TVVJGQUNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3VyZmFj
ZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIFRSQUNFKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRw
eSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xf
RkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZhY2UoKGVn
bDo6U3VyZmFjZSopc3VyZmFjZSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50
ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3Vy
ZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZh
bHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShk
aXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3Vy
ZmFjZSopc3VyZmFjZTsKKworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBF
R0xfVkdfQ09MT1JTUEFDRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgorICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJm
YWNlLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdM
X0hPUklaT05UQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9Q
QlVGRkVSOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKKyAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NVUxU
SVNBTVBMRV9SRVNPTFZFOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1RfUkFU
SU86CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRUdMX1NXQVBfQkVIQVZJT1I6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVf
Rk9STUFUOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKKyAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBF
R0xfV0lEVEg6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKK3sKKyAgICBUUkFDRSgiKEVHTGVudW0g
YXBpID0gMHglWCkiLCBhcGkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGFw
aSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6CisgICAgICAgICAg
Y2FzZSBFR0xfT1BFTlZHX0FQSToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6c2V0Q3Vy
cmVudEFQSShhcGkpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxT
RTsKK30KKworRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKK3sKKyAgICBUUkFD
RSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6Omdl
dEN1cnJlbnRBUEkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOworICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOwor
fQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCit7CisgICAgVFJB
Q0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCit7CisgICAgVFJBQ0UoIigp
Iik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19ESVNQ
TEFZLCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsKKwor
ICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTFN1cmZh
Y2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3BsYXkg
ZHB5LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZpZyBj
b25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1ZmZl
ciBidWZmZXIgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAweCUw
LjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRw
eSwgYnVmdHlwZSwgYnVmZmVyLCBjb25maWcsIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQor
CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJG
QUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQoreworICAgIFRSQUNFKCIo
RUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBF
R0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAgZHB5
LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdM
aW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RS
VUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGV4SW1h
Z2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sK
KyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNl
ID0gMHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3Bs
YXkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9
CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBU
UkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQpIiwg
ZHB5LCBpbnRlcnZhbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPnNldFN3YXBJbnRlcnZhbChpbnRl
cnZhbCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQor
CitFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAq
YXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVH
TENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUw
LjhwLCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIs
IGRweSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CisgICAgICAgIH0K
KworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNv
bmZpZyk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19DT05U
RVhUOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNw
bGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjdHggPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICBkaXNwbGF5LT5kZXN0cm95Q29udGV4dCgoZ2w6OkNvbnRleHQqKWN0eCk7CisKKyAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBF
R0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJl
YWQgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGRyYXcsIHJlYWQsIGN0eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOworICAg
ICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKyAg
ICAgICAgRFdPUkQgcGFzc2VzOworCisgICAgICAgIGlmICghZGV2aWNlIHx8IGRldmljZS0+VmFs
aWRhdGVEZXZpY2UoJnBhc3NlcykgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGN0eCAhPSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRhdGUo
ZGlzcGxheSwgY29udGV4dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRyYXcgIT0gRUdMX05PX1NVUkZBQ0UgJiYg
IXZhbGlkYXRlKGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKSkgfHwK
KyAgICAgICAgICAgIChyZWFkICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZShkaXNwbGF5
LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYXcgIT0g
cmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7CisgICAg
ICAgIGVnbDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOworICAgICAgICBlZ2w6OnNldEN1
cnJlbnRSZWFkU3VyZmFjZShyZWFkKTsKKworICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQs
IGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKKworICAgICAgICBy
ZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0Up
OworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTENvbnRleHQgX19zdGRj
YWxsIGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGdsR2V0Q3VycmVudENv
bnRleHQoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9OT19DT05URVhUKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0NP
TlRFWFQ7Cit9CisKK0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVH
TGludCByZWFkZHJhdykKK3sKKyAgICBUUkFDRSgiKEVHTGludCByZWFkZHJhdyA9ICVkKSIsIHJl
YWRkcmF3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRkcmF3ID09IEVHTF9S
RUFEKQorICAgICAgICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIHJlYWQgPSBlZ2w6OmdldEN1
cnJlbnRSZWFkU3VyZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmVhZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVhZGRyYXcgPT0gRUdMX0RSQVcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVHTFN1cmZhY2UgZHJhdyA9IGVnbDo6Z2V0Q3VycmVudERyYXdTdXJm
YWNlKCk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhkcmF3KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwor
fQorCitFR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKQorewor
ICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBFR0xEaXNwbGF5IGRw
eSA9IGVnbDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhk
cHkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOworICAgIH0KKworICAg
IHJldHVybiBFR0xfTk9fRElTUExBWTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVl
cnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMaW50IGF0dHJpYnV0
ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGlu
dCAqdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjdHgsIGF0dHJpYnV0ZSwgdmFs
dWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUo
ZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAg
ICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICBy
ZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
V2FpdEdMKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNz
KDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1
cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0TmF0aXZlKEVH
TGludCBlbmdpbmUpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgZW5naW5lID0gJWQpIiwgZW5naW5l
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
c3VyZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4o
ZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6
OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisgICAgICAg
IGlmIChlZ2xTdXJmYWNlLT5zd2FwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzKEVHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xDb3B5QnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
LCBFR0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkg
ZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMTmF0aXZlUGl4
bWFwVHlwZSB0YXJnZXQgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSwgdGFyZ2V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJl
dHVybiBFR0xfRkFMU0U7Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUgX19zdGRjYWxsIGVnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQor
eworICAgIFRSQUNFKCIoY29uc3QgY2hhciAqcHJvY25hbWUgPSBcIiVzXCIpIiwgcHJvY25hbWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgICAgICBfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEV4dGVuc2lvbiBlZ2xFeHRlbnNpb25zW10gPQorICAgICAgICB7Cisg
ICAgICAgICAgICB7IiIsIE5VTEx9LAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGV4
dCA9IDA7IGV4dCA8IHNpemVvZihlZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBl
eHQrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZWdsRXh0
ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWVnbEV4dGVu
c2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGdsR2V0UHJvY0FkZHJlc3MocHJvY25hbWUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpTlVMTCk7CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM2IEBACitMSUJSQVJZCWxpYkVHTAorRVhQT1JUUworCWVnbEJpbmRBUEkgICAgICAgICAgICAg
ICAgICAgICAgQDE0CisJZWdsQmluZFRleEltYWdlICAgICAgICAgICAgICAgICBAMjAKKwllZ2xD
aG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3CisJZWdsQ29weUJ1ZmZlcnMgICAgICAgICAg
ICAgICAgICBAMzMKKwllZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgIEAyMworCWVnbENy
ZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAgICBAMTgKKwllZ2xDcmVhdGVQYnVmZmVy
U3VyZmFjZSAgICAgICAgIEAxMAorCWVnbENyZWF0ZVBpeG1hcFN1cmZhY2UgICAgICAgICAgQDEx
CisJZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAgICBAOQorCWVnbERlc3Ryb3lDb250ZXh0
ICAgICAgICAgICAgICAgQDI0CisJZWdsRGVzdHJveVN1cmZhY2UgICAgICAgICAgICAgICBAMTIK
KwllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAgIEA4CisJZWdsR2V0Q29uZmlncyAgICAg
ICAgICAgICAgICAgICBANgorCWVnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgQDI2CisJ
ZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBAMjgKKwllZ2xHZXRDdXJyZW50U3VyZmFj
ZSAgICAgICAgICAgIEAyNworCWVnbEdldERpc3BsYXkgICAgICAgICAgICAgICAgICAgQDIKKwll
Z2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAxCisJZWdsR2V0UHJvY0FkZHJlc3MgICAg
ICAgICAgICAgICBAMzQKKwllZ2xJbml0aWFsaXplICAgICAgICAgICAgICAgICAgIEAzCisJZWds
TWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUKKwllZ2xRdWVyeUFQSSAgICAgICAgICAg
ICAgICAgICAgIEAxNQorCWVnbFF1ZXJ5Q29udGV4dCAgICAgICAgICAgICAgICAgQDI5CisJZWds
UXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQorCWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAg
ICAgICAgICAgQDEzCisJZWdsUmVsZWFzZVRleEltYWdlICAgICAgICAgICAgICBAMjEKKwllZ2xS
ZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNworCWVnbFN1cmZhY2VBdHRyaWIgICAgICAg
ICAgICAgICAgQDE5CisJZWdsU3dhcEJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzIKKwllZ2xT
d2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgorCWVnbFRlcm1pbmF0ZSAgICAgICAgICAg
ICAgICAgICAgQDQKKwllZ2xXYWl0Q2xpZW50ICAgICAgICAgICAgICAgICAgIEAxNgorCWVnbFdh
aXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMwCisJZWdsV2FpdE5hdGl2ZSAgICAgICAgICAg
ICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMv
bGliRUdML2xpYkVHTC52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJF
R0wudmNwcm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9q
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5
cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkVHTCINCisJUHJv
amVjdEdVSUQ9IntFNzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlSb290
TmFtZXNwYWNlPSJsaWJFR0wiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3
b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJ
CQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8
L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChD
b25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3Vy
YXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9
IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJ
CQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2pl
Y3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4z
MjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19E
RVBSRUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNp
Y1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVj
b21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJp
dFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0
PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21w
aWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGls
ZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29s
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRp
dGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0K
KwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1
Z0luZm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6ZWRC
YXNlQWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRh
cmdldE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZp
ZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRv
b2wiDQorCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4
MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkg
JnF1b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gw
RDsmI3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9u
DQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIk
KENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFy
YWN0ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rp
b25FeHBhbnNpb249IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJv
amVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBP
UlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJ
CQlSdW50aW1lTGlicmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJ
CVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJm
YWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNk
OS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZp
bGU9ImxpYkVHTC5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJ
CQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJs
ZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJ
RGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFr
ZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNvbW1hbmRMaW5l
PSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJc
JChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERp
cilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVH
TC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25O
YW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4NCisJ
CTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQor
CTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBG
aWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTth
c214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMy
RDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmln
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXENvbW1vblxkZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1l
PSJIZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQor
CQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJG
Qn0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlzcGxh
eS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW5jbHVkZVxFR0xcZWdsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xleHQuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVc
RUdMXGVnbHBsYXRmb3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
PC9GaWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIg0KKwkJ
CT4NCisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8
L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML21haW4uY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQgYW5kIG1h
bmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5o
IgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK3N0YXRpYyBEV09SRCBjdXJyZW50VExT
ID0gVExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBp
bnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAgc3dpdGNoIChy
ZWFzb24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHsK
KyAgICAgICAgICAgICNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqZGVidWcg
PSBmb3BlbigiZGVidWcudHh0IiwgInJ0Iik7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVidWcp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOwor
ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAid3QiKTsgICAv
LyBFcmFzZQorICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjdXJyZW50VExTID0gVGxz
QWxsb2MoKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRF
WEVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxp
emUgaW5kZXgKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2Mo
TFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBj
dXJyZW50KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVycm9yID0gRUdMX1NVQ0NFU1M7
CisgICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09QRU5HTF9FU19BUEk7CisgICAg
ICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgICAgICAg
ICAgICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgICAg
ICAgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRB
Q0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFD
SDoKKyAgICAgICAgeworICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBUUlVFOworfQorCituYW1lc3BhY2UgZWdsCit7Cit2b2lkIHNldEN1cnJlbnRFcnJvcihFR0xp
bnQgZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmVycm9yID0gZXJyb3I7Cit9CisKK0VHTGlu
dCBnZXRDdXJyZW50RXJyb3IoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZXJyb3I7Cit9
CisKK3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKK3sKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+
QVBJID0gQVBJOworfQorCitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQoreworICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1
cm4gY3VycmVudC0+QVBJOworfQorCit2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkg
ZHB5KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZHB5OworfQorCitFR0xEaXNwbGF5
IGdldEN1cnJlbnREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7
Cit9CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sK
KyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OworCisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOworfQorCitFR0xTdXJmYWNl
IGdldEN1cnJlbnREcmF3U3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kcmF3
U3VyZmFjZTsKK30KKwordm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJm
YWNlKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IHN1cmZhY2U7Cit9CisKK0VH
TFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50
ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJl
bnQtPnJlYWRTdXJmYWNlOworfQorfQorCit2b2lkIGVycm9yKEVHTGludCBlcnJvckNvZGUpCit7
CisgICAgZWdsOjpzZXRDdXJyZW50RXJyb3IoZXJyb3JDb2RlKTsKK30KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVudCBv
ZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2lmbmRlZiBMSUJFR0xfTUFJTl9IXworI2RlZmluZSBM
SUJFR0xfTUFJTl9IXworCisjZGVmaW5lIEVHTEFQSQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKwor
bmFtZXNwYWNlIGVnbAoreworc3RydWN0IEN1cnJlbnQKK3sKKyAgICBFR0xpbnQgZXJyb3I7Cisg
ICAgRUdMZW51bSBBUEk7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5OworICAgIEVHTFN1cmZhY2Ug
ZHJhd1N1cmZhY2U7CisgICAgRUdMU3VyZmFjZSByZWFkU3VyZmFjZTsKK307CisKK3ZvaWQgc2V0
Q3VycmVudEVycm9yKEVHTGludCBlcnJvcik7CitFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCk7CisK
K3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSk7CitFR0xlbnVtIGdldEN1cnJlbnRBUEko
KTsKKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5IGRweSk7CitFR0xEaXNwbGF5
IGdldEN1cnJlbnREaXNwbGF5KCk7CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1
cmZhY2Ugc3VyZmFjZSk7CitFR0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFjZSgpOworCit2
b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFj
ZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JD
b2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEVHTGludCBlcnJvckNv
ZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZz
dWNjZXNzKGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVnbDo6c2V0Q3VycmVudEVycm9y
KEVHTF9TVUNDRVNTKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAv
LyBMSUJFR0xfTUFJTl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NjQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0
eSBjbGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKKyNpbmNsdWRlIDxkM2R4
OS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorCituYW1lc3BhY2UKK3sKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElu
cHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vu
b3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGlu
IHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90
dG9tIHJpZ2h0LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMw
LlkgbXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorY29uc3QgY2hh
ciBzdGFuZGFyZHZzW10gPQorInN0cnVjdCBWU19PVVRQVVRcbiIKKyJ7XG4iCisiICAgIGZsb2F0
NCBwb3NpdGlvbiA6IFBPU0lUSU9OO1xuIgorIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09S
RDA7XG4iCisifTtcbiIKKyJcbiIKKyJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7
XG4iCisiXG4iCisiVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04p
XG4iCisie1xuIgorIiAgICBWU19PVVRQVVQgT3V0O1xuIgorIlxuIgorIiAgICBPdXQucG9zaXRp
b24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCisiICAgIE91dC50ZXhjb29yZCA9IHBv
c2l0aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAw
LCAwKTtcbiIKKyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBGbGlwIFkg
VmVydGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8v
IE91dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4
IGNvb3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4g
YW5kICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxm
LXBpeGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNoYXIgZmxp
cHl2c1tdID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9hdDQgcG9zaXRp
b24gOiBQT1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgor
In07XG4iCisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgorIlxu
IgorIlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgorIntc
biIKKyIgICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0aW9uID0gcG9z
aXRpb24gKyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAq
IGZsb2F0NCgwLjUsIDAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIK
KyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBQYXNzdGhyb3VnaCBQaXhl
bCBTaGFkZXIKKy8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2Nv
bnN0IGNoYXIgcGFzc3Rocm91Z2hwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4i
CisiZmxvYXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCisi
e1xuIgorIglyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCisifVxuIjsKKworLy8g
THVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgw
LCB0YzApLnJycmEuCisvLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAu
WSA9IDAuCisvLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgor
Y29uc3QgY2hhciBsdW1pbmFuY2Vwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4i
CisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0
NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRtcCA9
IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAudyA9IHRtcC53ICogbW9kZS54ICsg
bW9kZS55O1xuIgorIglyZXR1cm4gdG1wLnh4eHc7XG4iCisifVxuIjsKKworLy8gUkdCL0EgQ29t
cG9uZW50IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdp
dGggb3B0aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZvcmNlIFJH
QiA9IDAsIHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9yY2UgQSA9
IDEsIHNldCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAu
Citjb25zdCBjaGFyIGNvbXBvbmVudG1hc2twc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4i
CisiXG4iCisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWlu
KGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0
IHRtcCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAueHl6ID0gdG1wLnh5eiAq
IG1vZGUueDtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudztcbiIKKyIJcmV0
dXJuIHRtcDtcbiIKKyJ9XG4iOworCit9CisKK25hbWVzcGFjZSBnbAoreworCitjb25zdCBjaGFy
ICogY29uc3QgQmxpdDo6bVNoYWRlclNvdXJjZVtdID0KK3sKKyAgICBzdGFuZGFyZHZzLAorICAg
IGZsaXB5dnMsCisgICAgcGFzc3Rocm91Z2hwcywKKyAgICBsdW1pbmFuY2VwcywKKyAgICBjb21w
b25lbnRtYXNrcHMKK307CisKK0JsaXQ6OkJsaXQoQ29udGV4dCAqY29udGV4dCkKKyAgOiBtQ29u
dGV4dChjb250ZXh0KSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFy
YXRpb24oTlVMTCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2ls
KE5VTEwpLCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7Cisg
ICAgbWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7
Cit9CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVk
U3RhdGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRW
ZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikg
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRTaGFk
ZXJzW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkK
K3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0xLCAt
MSwKKyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQorICAg
IH07CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQz
RFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIs
IE5VTEwpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2b2lkICps
b2NrUHRyOworICAgIG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsK
KyAgICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkg
ZWxlbWVudHNbXSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwg
RDNEREVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAg
ICAgRDNEREVDTF9FTkQoKQorICAgIH07CisKKyAgICBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4
RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChociA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5
cGU+Citib29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2
aWNlOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSoqKSwKKyAg
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0
U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAo
bUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIg
PSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSUQzRFhCdWZmZXIgKnNoYWRlckNvZGU7
CisgICAgICAgIEhSRVNVTFQgaHIgPSBEM0RYQ29tcGlsZVNoYWRlcihtU2hhZGVyU291cmNlW3Nv
dXJjZV0sIHN0cmxlbihtU2hhZGVyU291cmNlW3NvdXJjZV0pLCBOVUxMLCBOVUxMLCAibWFpbiIs
IHByb2ZpbGUsIDAsICZzaGFkZXJDb2RlLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY29tcGlsZSAl
cyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwg
KGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGhyID0gKGRldmljZS0+KmNyZWF0ZVNoYWRlcikoc3RhdGljX2Nhc3Q8Y29uc3Qg
RFdPUkQqPihzaGFkZXJDb2RlLT5HZXRCdWZmZXJQb2ludGVyKCkpLCAmc2hhZGVyKTsKKyAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlckNvZGUtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSAlcyBzaGFkZXIgZm9y
IGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClzb3VyY2Us
IGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNo
YWRlckNvZGUtPlJlbGVhc2UoKTsKKworICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0g
PSBzaGFkZXI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IChkZXZpY2UtPipzZXRTaGFkZXIp
KHNoYWRlcik7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHNldCAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFgu
IiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihT
aGFkZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5PihzaGFkZXIsIG1Db250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCksICZJRGly
ZWN0M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRW
ZXJ0ZXhTaGFkZXIpOworfQorCitib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNo
YWRlcikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hh
ZGVyLCBtQ29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0M0REZXZpY2U5
OjpDcmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsK
K30KKworUkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSkgY29uc3QKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXRE
ZXNjKCZkZXNjKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAwOworICAgIHJl
Y3QudG9wID0gMDsKKyAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRv
bSA9IGRlc2MuSGVpZ2h0OworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94
RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1
cmUoc291cmNlLCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmlj
ZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgw
LCBkZXN0KTsKKworICAgIHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworICAg
IHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19QQVNTVEhST1VHSCk7CisKKyAgICBzZXRDb21tb25C
bGl0U3RhdGUoKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJ
TFRFUiwgRDNEVEVYRl9MSU5FQVIpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CisKKyAgICBzZXRWaWV3cG9ydChnZXRT
dXJmYWNlUmVjdChkZXN0KSwgMCwgMCk7CisKKyAgICByZW5kZXIoKTsKKworICAgIHRleHR1cmUt
PlJlbGVhc2UoKTsKKworICAgIHJlc3RvcmVTdGF0ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNE
VGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJl
Y3QpOworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IHNhdmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0Vmlld3BvcnQoc291
cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCk7CisKKyAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsK
KyAgICBpZiAoc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoZGVzdEZvcm1hdCkpCisgICAgeworICAg
ICAgICByZW5kZXIoKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICBy
ZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldEZv
cm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KQoreworICAgIGJvb2wgb2theSA9
IHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworCisgICAgc3dpdGNoIChkZXN0
Rm9ybWF0KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNl
IEdMX1JHQkE6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAg
ICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNL
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hh
ZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoIW9rYXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51
bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAgICAvLyBUaGUgbWVhbmluZyBv
ZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4K
KyAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgor
ICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICBzd2l0Y2ggKGRl
c3RGb3JtYXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNh
c2UgR0xfUkdCQToKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFta
XSA9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgcHND
b25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAg
IGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBbWV0g
PSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZ2V0
RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VU
b1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QpCit7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9E
RVNDIHNvdXJjZURlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAg
ICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNE
VGV4dHVyZTkgKnRleHR1cmU7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0
b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNj
LkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAg
fQorCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgIHJlc3VsdCA9
IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRl
eHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisgICAgUkVDVCBkM2RTb3VyY2VS
ZWN0OworICAgIGQzZFNvdXJjZVJlY3QubGVmdCA9IHNvdXJjZVJlY3QubGVmdDsKKyAgICBkM2RT
b3VyY2VSZWN0LnJpZ2h0ID0gc291cmNlUmVjdC5yaWdodDsKKyAgICBkM2RTb3VyY2VSZWN0LnRv
cCA9IHNvdXJjZVJlY3QudG9wOworICAgIGQzZFNvdXJjZVJlY3QuYm90dG9tID0gc291cmNlUmVj
dC5ib3R0b207CisKKyAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJmQzZFNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBO
VUxMLCBEM0RURVhGX05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKwor
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiB0
ZXh0dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJl
Y3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkgdnA7CisgICAgdnAu
WCAgICAgID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OworICAgIHZwLldpZHRo
ICA9IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgdnAuSGVpZ2h0ID0g
c291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5NaW5aICAgPSAwLjBm
OworICAgIHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOwor
CisgICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92
cC5IZWlnaHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rigw
LCBoYWxmUGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0
ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklU
RUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVF
TkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7CisKKyAgICBkZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRF
WEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRF
WFRVUkUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQorICAgIHsKKyAgICAgICAgZGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgIH0KK30KKwordm9pZCBCbGl0Ojpy
ZW5kZXIoKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQg
aHIgPSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAq
IHNpemVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbiht
UXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAg
ICBociA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsK
K30KKwordm9pZCBCbGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOworCisgICAgSFJFU1VMVCBocjsKKworICAgIGRldmljZS0+R2V0
RGVwdGhTdGVuY2lsU3VyZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBkZXZpY2UtPkdl
dFJlbmRlclRhcmdldCgwLCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKworICAgIGlmIChtU2F2ZWRT
dGF0ZUJsb2NrID09IE5VTEwpCisgICAgeworICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0
ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHNldENv
bW1vbkJsaXRTdGF0ZSgpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0
WzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15
Q29uc3QsIDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAg
ICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOworCisg
ICAgICAgIEQzRFZJRVdQT1JUOSBkdW1teVZwOworICAgICAgICBkdW1teVZwLlggPSAwOworICAg
ICAgICBkdW1teVZwLlkgPSAwOworICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKKyAgICAgICAg
ZHVtbXlWcC5IZWlnaHQgPSAxOworICAgICAgICBkdW1teVZwLk1pblogPSAwOworICAgICAgICBk
dW1teVZwLk1heFogPSAxOworCisgICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnAp
OworCisgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAgICAgICBkZXZp
Y2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7CisKKyAgICAg
ICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsK
KworICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChtU2F2
ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVM
TCkKKyAgICB7CisgICAgICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlc3Rv
cmVTdGF0ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2ls
KTsKKyAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBt
U2F2ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2ls
ID0gTlVMTDsKKyAgICB9CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRS
ZW5kZXJUYXJnZXQpOworICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7
CisgICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRS
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2Nr
ICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL0JsaXQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0
LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0JM
SVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlIDxkM2Q5
Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sK
K2NsYXNzIENvbnRleHQ7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0
IEJsaXQoQ29udGV4dCAqY29udGV4dCk7CisgICAgfkJsaXQoKTsKKworICAgIC8vIENvcHkgZnJv
bSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8gc291cmNlUmVjdCwgeG9m
ZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkK
KyAgICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVj
aWZpZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3Jt
YXQgPSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCisgICAg
Ym9vbCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgICAvLyAyeDIgYm94IGZpbHRlciBz
YW1wbGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KKyAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBp
cyBSR0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCisgICAgYm9v
bCBib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QpOworCisgIHByaXZhdGU6CisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247CisKKyAgICB2b2lkIGluaXRH
ZW9tZXRyeSgpOworCisgICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVz
dEZvcm1hdCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUo
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOworICAg
IHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKKyAgICBSRUNU
IGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKKworICAg
IC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFk
ZXJTb3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAgICAgICAgU0hBREVSX1ZTX1NU
QU5EQVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAgICAgIFNIQURFUl9QU19QQVNT
VEhST1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKKyAgICAgICAgU0hBREVSX1BT
X0NPTVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAorICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2VbXTsKKworICAgIC8vIFRoaXMgYWN0
dWFsbHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgY2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJz
W1NIQURFUl9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAg
ICBib29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisg
ICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipjcmVh
dGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUgKiopLAorICAgICAgICAgICAg
ICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RT
aGFkZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVy
KTsKKyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7CisgICAgdm9pZCBy
ZW5kZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9pZCByZXN0b3JlU3RhdGUo
KTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptU2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxp
dCk7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpJbmRleDogQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvQnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gQnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50
aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgorLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBH
TCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCdWZmZXI6OkJ1ZmZlcigpCit7CisgICAgbUNv
bnRlbnRzID0gTlVMTDsKKyAgICBtU2l6ZSA9IDA7CisgICAgbVVzYWdlID0gR0xfRFlOQU1JQ19E
UkFXOworfQorCitCdWZmZXI6On5CdWZmZXIoKQoreworICAgIGRlbGV0ZVtdIG1Db250ZW50czsK
K30KKwordm9pZCBCdWZmZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0
ciBzaXplLCBHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZVtdIG1Db250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICB9
CisgICAgZWxzZSBpZiAoc2l6ZSAhPSBtU2l6ZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1D
b250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07CisgICAgICAg
IG1lbXNldChtQ29udGVudHMsIDAsIHNpemUpOworICAgIH0KKworICAgIGlmIChkYXRhICE9IE5V
TEwgJiYgc2l6ZSA+IDApCisgICAgeworICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBz
aXplKTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHNpemU7CisgICAgbVVzYWdlID0gdXNhZ2U7Cit9
CisKK3ZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlw
dHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZz
ZXQsIGRhdGEsIHNpemUpOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUg
Z2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgor
Ly8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEu
CisKKyNpZm5kZWYgTElCR0xFU1YyX0JVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVS
X0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQnVmZmVyCit7CisgIHB1Ymxp
YzoKKyAgICBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgfkJ1ZmZlcigpOworCisgICAgdm9pZCBi
dWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdl
KTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBz
aXplLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJuIG1Db250
ZW50czsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KKyAgICBH
TGVudW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOworCisgICAgR0x1Ynl0ZSAqbUNvbnRl
bnRzOworICAgIHNpemVfdCBtU2l6ZTsKKyAgICBHTGVudW0gbVVzYWdlOworfTsKKworfQorCisj
ZW5kaWYgICAvLyBMSUJHTEVTVjJfQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI5OTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRl
eHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdM
IHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhl
IEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAibGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1
ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVy
ZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2Vv
bWV0cnkvZHg5LmgiCisKKyN1bmRlZiBuZWFyCisjdW5kZWYgZmFyCisKK25hbWVzcGFjZSBnbAor
eworQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKQorICAgIDogbUNv
bmZpZyhjb25maWcpCit7CisgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBm
KTsKKworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOworICAgIG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IDA7CisKKyAgICBtU3RhdGUuY3VsbEZhY2UgPSBmYWxzZTsKKyAgICBt
U3RhdGUuY3VsbE1vZGUgPSBHTF9CQUNLOworICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7
CisgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBH
TF9MRVNTOworICAgIG1TdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIG1TdGF0ZS5zb3VyY2VCbGVu
ZFJHQiA9IEdMX09ORTsKKyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKKyAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsKKyAgICBtU3RhdGUuZGVzdEJsZW5kQWxw
aGEgPSBHTF9aRVJPOworICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7
CisgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIG1TdGF0
ZS5ibGVuZENvbG9yLnJlZCA9IDA7CisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOwor
ICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuc3Rl
bmNpbEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAwOworICAgIG1T
dGF0ZS5zdGVuY2lsTWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7
CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAwOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7CisgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gLTE7CisgICAgbVN0YXRlLnN0ZW5jaWxGYWls
ID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOwor
ICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdM
X0tFRVA7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7CisgICAgbVN0YXRl
LnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5p
dHMgPSAwLjBmOworICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKKyAg
ICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsKKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSA9IDEuMGY7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gZmFsc2U7
CisgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLmRpdGhlciA9IHRy
dWU7CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IEdMX0RPTlRfQ0FSRTsKKworICAg
IG1TdGF0ZS5saW5lV2lkdGggPSAxLjBmOworCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7Cisg
ICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBjb25m
aWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBjb25m
aWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7CisgICAgbVN0YXRlLnpOZWFyID0gMC4wZjsKKyAgICBt
U3RhdGUuekZhciA9IDEuMGY7CisKKyAgICBtU3RhdGUuc2Npc3NvclggPSAwOworICAgIG1TdGF0
ZS5zY2lzc29yWSA9IDA7CisgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IGNvbmZpZy0+bURpc3Bs
YXlNb2RlLldpZHRoOworICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxh
eU1vZGUuSGVpZ2h0OworCisgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHRydWU7CisgICAgbVN0
YXRlLmNvbG9yTWFza0dyZWVuID0gdHJ1ZTsKKyAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRy
dWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKKyAgICBtU3RhdGUuZGVwdGhN
YXNrID0gdHJ1ZTsKKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdl
IDgzOgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJF
X0NVQkVfTUFQIGhhdmUgdHdvZGltZW5zaW9uYWwKKyAgICAvLyBhbmQgY3ViZSBtYXAgdGV4dHVy
ZSBzdGF0ZSB2ZWN0b3JzIHJlc3BlY3RpdmVseSBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAgICAv
LyBJbiBvcmRlciB0aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBs
b3N0LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHRleHR1cmUKKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3
aG9zZSBuYW1lcyBhcmUgMC4KKworICAgIG1UZXh0dXJlMkRaZXJvID0gbmV3IFRleHR1cmUyRCh0
aGlzKTsKKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMp
OworCisgICAgbUNvbG9yYnVmZmVyWmVybyA9IE5VTEw7CisgICAgbURlcHRoYnVmZmVyWmVybyA9
IE5VTEw7CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKKworICAgIG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID0gMDsKKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKKyAgICBi
aW5kVGV4dHVyZTJEKDApOworICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5kUmVuZGVy
YnVmZmVyKDApOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVf
Q09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1w
bGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBF
X0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVd
ID0gTlVMTDsKKyAgICB9CisKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOworCisgICAg
bVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0
OworCisgICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxMOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9
IE5VTEw7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsK
KworICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsK
KyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNl
OworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKKworICAgIG1IYXNC
ZWVuQ3VycmVudCA9IGZhbHNlOworCisgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7
CisgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworQ29udGV4dDo6fkNvbnRleHQoKQorewor
ICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CisKKyAgICBmb3IgKGludCB0eXBlID0gMDsg
dHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgfQorCisgICAgZGVsZXRlIG1UZXh0dXJl
MkRaZXJvOworICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1D
b2xvcmJ1ZmZlclplcm87CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAgZGVsZXRl
IG1TdGVuY2lsYnVmZmVyWmVybzsKKworICAgIGRlbGV0ZSBtQnVmZmVyQmFja0VuZDsKKyAgICBk
ZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOworICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsK
KyAgICBkZWxldGUgbUJsaXQ7CisKKyAgICB3aGlsZSAoIW1CdWZmZXJNYXAuZW1wdHkoKSkKKyAg
ICB7CisgICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAg
ICB9CisKKyAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBk
ZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3
aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNoYWRlciht
U2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1GcmFtZWJ1
ZmZlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1l
YnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1SZW5kZXJi
dWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVu
ZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1UZXh0
dXJlTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFw
LmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSkKKyAgICB7CisgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPlJlbGVhc2UoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoIW1IYXNCZWVuQ3VycmVudCkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2VDYXBzID0gZGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOworCisg
ICAgICAgIG1CdWZmZXJCYWNrRW5kID0gbmV3IER4OUJhY2tFbmQodGhpcywgZGV2aWNlKTsKKyAg
ICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1C
dWZmZXJCYWNrRW5kKTsKKyAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRh
TWFuYWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1CbGl0ID0gbmV3IEJsaXQo
dGhpcyk7CisKKyAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOworCisgICAgICAgIG1TdGF0
ZS52aWV3cG9ydFggPSAwOworICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKKyAgICAgICAg
bVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOworICAgICAgICBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtU3Rh
dGUuc2Npc3NvclggPSAwOworICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOworICAgICAgICBt
U3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtSGFzQmVl
bkN1cnJlbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVj
dDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcw
JyBuYW1lcworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3Vy
ZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1ZmZlcigpOworICAgIENvbG9yYnVmZmVyICpjb2xv
cmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7CisgICAg
RGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyWmVybyA9IG5ldyBEZXB0aGJ1ZmZlcihkZXB0aFN0ZW5j
aWwpOworICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IFN0ZW5jaWxi
dWZmZXIoZGVwdGhTdGVuY2lsKTsKKworICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZl
clplcm8pOworICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOworICAgIHNl
dERlcHRoYnVmZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOworICAgIHNldFN0ZW5jaWxidWZmZXJa
ZXJvKHN0ZW5jaWxidWZmZXJaZXJvKTsKKworICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3Ji
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRo
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVu
Y2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisKKyAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0
LT5SZWxlYXNlKCk7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIGlmIChtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24gPT0gRDNEUFNfVkVSU0lPTigzLCAwKSkKKyAgICB7CisgICAgICAg
IG1Qc1Byb2ZpbGUgPSAicHNfM18wIjsKKyAgICAgICAgbVZzUHJvZmlsZSA9ICJ2c18zXzAiOwor
ICAgIH0KKyAgICBlbHNlICAvLyBlZ2w6OkRpc3BsYXkgZ3VhcmFudGVlcyBzdXBwb3J0IGZvciBh
dCBsZWFzdCAyLjAKKyAgICB7CisgICAgICAgIG1Qc1Byb2ZpbGUgPSAicHNfMl8wIjsKKyAgICAg
ICAgbVZzUHJvZmlsZSA9ICJ2c18yXzAiOworICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURpcnR5
KCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxh
dGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJl
LWRyYXcuCit2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKK3sKKyAgICBtQXBwbGll
ZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9
IDA7CisgICAgbUFwcGxpZWRQcm9ncmFtID0gMDsKKworICAgIG1DbGVhclN0YXRlRGlydHkgPSB0
cnVlOworICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURlcHRoU3RhdGVEaXJ0eSA9
IHRydWU7CisgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQmxlbmRTdGF0ZURpcnR5
ID0gdHJ1ZTsKKyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Qb2x5Z29uT2Zm
c2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAg
ICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVl
OworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVl
biwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCit7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5yZWQgPSByZWQ7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwor
ICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7CisgICAgbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVw
dGgoZmxvYXQgZGVwdGgpCit7CisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwor
fQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKK3sKKyAgICBt
U3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOworfQorCit2b2lkIENvbnRleHQ6OnNl
dEN1bGxGYWNlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVu
YWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOworICAgICAg
ICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0N1
bGxGYWNlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKK30K
Kwordm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAobVN0
YXRlLmN1bGxNb2RlICE9IG1vZGUpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBt
b2RlOworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQoreworICAgIGlmIChtU3RhdGUuZnJv
bnRGYWNlICE9IGZyb250KQorICAgIHsKKyAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250
OworICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhU
ZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxl
ZDsKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENv
bnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5k
ZXB0aFRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1
bmMpCit7CisgICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICAgICAgbURlcHRoU3RhdGVE
aXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxv
YXQgek5lYXIsIGZsb2F0IHpGYXIpCit7CisgICAgbVN0YXRlLnpOZWFyID0gek5lYXI7CisgICAg
bVN0YXRlLnpGYXIgPSB6RmFyOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCisgICAgeworICAgICAg
ICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1
ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUuYmxlbmQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0
b3JzKEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEs
IEdMZW51bSBkZXN0QWxwaGEpCit7CisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBz
b3VyY2VSR0IgfHwKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxw
aGEgfHwKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8CisgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCisgICAgeworICAgICAgICBtU3Rh
dGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRS
R0IgPSBkZXN0UkdCOworICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFs
cGhhOworICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7CisgICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRC
bGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhh
KQoreworICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8CisgICAgICAgIG1T
dGF0ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENv
bG9yLmJsdWUgIT0gYmx1ZSB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBh
bHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKKyAgICAg
ICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmJsZW5k
Q29sb3IuYmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxw
aGE7CisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhh
RXF1YXRpb24pCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0
aW9uIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlv
bikKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247
CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOworICAg
ICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbFRl
c3QgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJs
ZWQ7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29s
IENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLnN0ZW5jaWxUZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xl
bnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCit7
CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAorICAgICAgICBt
U3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2ls
TWFzayAhPSBzdGVuY2lsTWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9
IHN0ZW5jaWxGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4g
MCkgPyBzdGVuY2lsUmVmIDogMDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNp
bE1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMs
IEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQoreworICAgIGlm
IChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAorICAgICAgICBt
U3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCisgICAgeworICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOworICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKK3sKKyAgICBpZiAo
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKKyAgICB7CisgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKKyAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQoreworICAg
IGlmIChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2sp
CisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFj
a1dyaXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWls
LCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFz
cykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8CisgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8
fAorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0
aFBhc3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZh
aWw7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVw
dGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNr
RmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzcykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVu
Y2lsQmFja0ZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAh
PSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCisgICAgeworICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOworICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwor
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCit7Cisg
ICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKKyAgICAgICAgbVBvbHlnb25P
ZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucG9seWdv
bk9mZnNldEZpbGw7CisKK30KKwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1z
KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIGlmIChtU3RhdGUucG9seWdv
bk9mZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRV
bml0cyAhPSB1bml0cykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
ID0gZmFjdG9yOworICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Cisg
ICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7CisgICAg
ICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOworICAgICAgICBtU2Ft
cGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxl
QWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1w
bGVBbHBoYVRvQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2Uo
Ym9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxl
ZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7CisgICAg
ICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6
aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMo
R0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292
ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fAorICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZl
cnQgIT0gaW52ZXJ0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0Owor
ICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBl
bmFibGVkOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
Ym9vbCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdGF0ZS5zY2lzc29yVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBl
bmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCisgICAgeworICAg
ICAgICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkg
PSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOworfQorCit2b2lkIENvbnRleHQ6OnNldExp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKQoreworICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsK
K30KKwordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCit7
CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCit7CisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7CisgICAgbVN0YXRlLnZp
ZXdwb3J0WSA9IHk7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKKyAgICBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3Nv
clBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZICE9IHkg
fHwgCisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNz
b3JIZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0geDsK
KyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0
aCA9IHdpZHRoOworICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEp
Cit7CisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAhPSBibHVl
IHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tSZWQgPSByZWQ7CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IGdy
ZWVuOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOworICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQorewor
ICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCisgICAgeworICAgICAgICBtU3RhdGUu
ZGVwdGhNYXNrID0gbWFzazsKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKQoreworICAg
IG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuZnJhbWVidWZm
ZXI7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuYXJyYXlC
dWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25l
ZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1FbmFibGVkID0gZW5hYmxlZDsKK30KKworY29uc3QgQXR0cmlidXRl
U3RhdGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pCit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKK30K
Kwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtLCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tQm91bmRCdWZmZXIgPSBib3VuZEJ1ZmZlcjsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXplOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOworfQorCitjb25zdCB2b2lk
ICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
UG9pbnRlcjsKK30KKworLy8gcmV0dXJucyBlbnRpcmUgc2V0IG9mIGF0dHJpYnV0ZXMgYXMgYSBi
bG9jaworY29uc3QgQXR0cmlidXRlU3RhdGUgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkJsb2Nr
KCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKK3sKKyAgICBtU3RhdGUucGFj
a0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdu
bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworfQorCit2
b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAg
bVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6
Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFja0Fs
aWdubWVudDsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKK0dMdWludCBD
b250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwor
CisgICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5kKCkp
CisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtQnVmZmVyTWFwW2hhbmRs
ZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVz
ZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlICht
U2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpIHx8IG1Qcm9ncmFtTWFw
LmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFj
ZQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gR0xf
VkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBW
ZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBH
TF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBu
ZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQg
cHJvZ3JhbS9zaGFkZXIgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQorewor
ICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZp
bmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxl
KSAhPSBtU2hhZGVyTWFwLmVuZCgpKSAgIC8vIFNoYXJlZCBuYW1lIHNwYWNlCisgICAgeworICAg
ICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFBy
b2dyYW0oKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2Vk
IHRleHR1cmUgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHVu
c2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFu
ZGxlKSAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAg
IH0KKworICAgIG1UZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRs
ZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQorR0x1aW50IENv
bnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0g
MTsKKworICAgIHdoaWxlIChtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1GcmFtZWJ1
ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1G
cmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
Ky8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCitHTHVpbnQgQ29udGV4dDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKwor
ICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVyYnVmZmVy
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbVJlbmRl
cmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgQnVmZmVyTWFw
OjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKKworICAg
IGlmIChidWZmZXJPYmplY3QgIT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRl
dGFjaEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgIGRlbGV0ZSBidWZmZXJPYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJPYmplY3QpOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBTaGFkZXJN
YXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFkZXIpOworCisg
ICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
aWYgKCFzaGFkZXJPYmplY3QtPnNlY29uZC0+aXNBdHRhY2hlZCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2hhZGVy
TWFwLmVyYXNlKHNoYWRlck9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtT2JqZWN0ID0g
bVByb2dyYW1NYXAuZmluZChwcm9ncmFtKTsKKworICAgIGlmIChwcm9ncmFtT2JqZWN0ICE9IG1Q
cm9ncmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gIT0gbVN0YXRlLmN1
cnJlbnRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVj
dC0+c2Vjb25kOworICAgICAgICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgVGV4
dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZSk7CisKKyAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7
CisgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHRleHR1cmVPYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgfQorCisgICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3Qp
OworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpCit7CisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2Jq
ZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOworCisgICAgaWYgKGZyYW1l
YnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRl
dGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgZnJhbWVidWZm
ZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVm
ZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciBy
ZW5kZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsK
KworICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworCisgICAg
ICAgIGRlbGV0ZSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbVJlbmRlcmJ1
ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVm
ZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOworICAgIH0KKworICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ciA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVu
c2lnbmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIo
YnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIo
KTsKKyAgICB9CisKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gYnVmZmVyOworfQor
Cit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYg
KCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIG1U
ZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmUyRCh0aGlzKTsKKyAgICB9CisKKyAgICBt
U3RhdGUudGV4dHVyZTJEID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtT
QU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworfQorCit2b2lkIENv
bnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAoIWdl
dFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQorICAgIHsKKyAgICAgICAgbVRleHR1
cmVNYXBbdGV4dHVyZV0gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgfQorCisgICAg
bVN0YXRlLnRleHR1cmVDdWJlTWFwID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXSA9IHRleHR1cmU7Cit9CisK
K3ZvaWQgQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1GcmFt
ZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICB9CisKKyAg
ICBtU3RhdGUuZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0Ojpi
aW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKHJlbmRlcmJ1
ZmZlciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IG5ldyBSZW5kZXJidWZmZXIoKTsK
KyAgICB9CisKKyAgICBtU3RhdGUucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyOworfQorCit2
b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgUHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTHVpbnQgcHJpb3JQ
cm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0
byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KKworICAgIGlmIChwcm9n
cmFtT2JqZWN0ICYmIHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkpCisgICAg
eworICAgICAgICBkZWxldGVQcm9ncmFtKHByaW9yUHJvZ3JhbSk7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQoreworICAg
IGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVm
ZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yYnVmZmVyWmVybyhDb2xvcmJ1ZmZlciAq
YnVmZmVyKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJvOworICAgIG1Db2xvcmJ1ZmZl
clplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhidWZmZXJaZXJvKERl
cHRoYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAg
bURlcHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2ls
YnVmZmVyWmVybyhTdGVuY2lsYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1TdGVuY2ls
YnVmZmVyWmVybzsKKyAgICBtU3RlbmNpbGJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQg
Q29udGV4dDo6c2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRl
bGV0ZSBtUmVuZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdOworICAgIG1SZW5kZXJi
dWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl0gPSBidWZmZXI7Cit9CisKK0J1ZmZlciAqQ29u
dGV4dDo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgQnVmZmVyTWFwOjpp
dGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChidWZm
ZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7CisgICAg
fQorfQorCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQor
eworICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRs
ZSk7CisKKyAgICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNo
YWRlci0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbSh1
bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0g
PSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3Jh
bU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgIH0KK30KKworVGV4
dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGlm
IChoYW5kbGUgPT0gMCkgcmV0dXJuIE5VTEw7CisKKyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0
ZXh0dXJlID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHRleHR1cmUgPT0g
bVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsKKyAgICB9Cit9
CisKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFt
ZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1l
YnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOworICAgIH0K
K30KKworUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKK3sKKyAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9
IG1SZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHJlbmRlcmJ1ZmZlciA9
PSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29u
ZDsKKyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpDb250ZXh0OjpnZXRDb2xvcmJ1ZmZlcihHTHVp
bnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAg
ICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yYnVmZmVyKj4ocmVu
ZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gU3BlY2lhbCBjYXNl
OiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNlZCBvbiB0
aGUgYXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVyWmVy
bzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRGVwdGhidWZmZXIgKkNvbnRleHQ6
OmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSAhPSAwKQor
ICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVyYnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+
aXNEZXB0aGJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHJlbmRl
ciB0YXJnZXRzIGJhc2VkIG9uIHRoZSBhdHRhY2htZW50IHR5cGUKKyAgICB7CisgICAgICAgIHJl
dHVybiBtRGVwdGhidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitT
dGVuY2lsYnVmZmVyICpDb250ZXh0OjpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpCit7
CisgICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJidWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVy
YnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGVuY2lsYnVmZmVyKj4ocmVuZGVyYnVmZmVy
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbVN0
ZW5jaWxidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitCdWZmZXIg
KkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0
ZS5hcnJheUJ1ZmZlcik7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIp
OworfQorCitQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCit7CisgICAgcmV0
dXJuIGdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKK30KKworVGV4dHVyZTJEICpD
b250ZXh0OjpnZXRUZXh0dXJlMkQoKQoreworICAgIGlmIChtU3RhdGUudGV4dHVyZTJEID09IDAp
ICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJl
cyBiYXNlZCBvbiB0aGUgdGFyZ2V0CisgICAgeworICAgICAgICByZXR1cm4gbVRleHR1cmUyRFpl
cm87CisgICAgfQorCisgICAgcmV0dXJuIChUZXh0dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRl
eHR1cmUyRCk7Cit9CisKK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1h
cCgpCit7CisgICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9PSAwKSAgIC8vIFNwZWNpYWwg
Y2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhl
IHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAg
fQorCisgICAgcmV0dXJuIChUZXh0dXJlQ3ViZU1hcCopZ2V0VGV4dHVyZShtU3RhdGUudGV4dHVy
ZUN1YmVNYXApOworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNp
Z25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBHTHVpbnQgdGV4aWQg
PSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07CisKKyAgICBpZiAodGV4aWQg
PT0gMCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOiByZXR1
cm4gbVRleHR1cmUyRFplcm87CisgICAgICAgICAgY2FzZSBTQU1QTEVSX0NVQkU6IHJldHVybiBt
VGV4dHVyZUN1YmVNYXBaZXJvOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdldFRl
eHR1cmUodGV4aWQpOworfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIo
KQoreworICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUuZnJhbWVidWZmZXIpOworfQor
Citib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJh
bXMpCit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1NIQURFUl9D
T01QSUxFUjogICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNr
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoK
KyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKKyAgICAgICAgcGFyYW1z
WzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUu
Y29sb3JNYXNrQmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhh
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7CisgICAgICBj
YXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9U
RVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRl
c3Q7CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kZXB0aFRlc3Q7CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsKKyAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250
ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgLy8g
UGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5h
bCBnZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBh
cyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVz
CisgICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQg
d291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxk
IG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0
Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHln
b25PZmZzZXRGYWN0b3I7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5J
VFM6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0g
PSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1zWzFdID0g
Z2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICAgIHBhcmFtc1swXSA9IGds
OjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOworICAgICAgICBwYXJhbXNbMV0gPSBnbDo6
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0RFUFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7CisgICAg
ICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQ09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmdyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7
CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgcGFyYW1zWzBd
ID0gbVN0YXRlLmJsZW5kQ29sb3IucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxl
bmRDb2xvci5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1
ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBw
bmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJf
VkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1l
bnRhdGlvbgorICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUg
dGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKKyAgICAvLyBHZXRJbnRlZ2Vy
diBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZl
cnNpb24gaW4gYW55CisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNl
IHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCisgICAgLy8g
Q29udGV4dDo6Z2V0RmxvYXR2LgorICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVD
VE9SUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZBUllJTkdfVkVDVE9SUzsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzogKnBhcmFtcyA9IGdsOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAq
cGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJhbXMgPSBn
bDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdsOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJf
U0laRTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllf
Rk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAvKiBubyBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
cjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzog
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVidWZmZXI7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlBB
Q0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGln
bm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1B
UF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7
IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzog
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxl
bmRBbHBoYTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdC
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tX
cml0ZW1hc2s7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfU0laRTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGds
OjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFUzog
ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZ
UEU7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9S
TUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heCgoaW50KWdsOjpNQVhfUkVOREVSQlVGRkVS
X1NJWkUsIChpbnQpZ2w6Ok1BWF9URVhUVVJFX1NJWkUpOworICAgICAgICAgICAgcGFyYW1zWzBd
ID0gbWF4RGltZW5zaW9uOworICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAg
ICAgcGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0
YXRlLnZpZXdwb3J0WTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7
CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3Rh
dGUuc2Npc3Nvclg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKKyAgICAg
ICAgcGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsKKyAgICAgICAgcGFyYW1zWzNdID0g
bVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklU
UzoKKyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVl
blNpemUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpw
YXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhh
U2l6ZSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
UFRIX0JJVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworCisgICAgICAgICAg
ICBpZiAoZGVwdGhidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVy
ICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAg
ICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBt
U3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0
ZS5hY3RpdmVTYW1wbGVyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVu
dW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQoreworICAgIC8vIFBsZWFzZSBub3Rl
OiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBp
bXBsZW1lbnRhdGlvbgorICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQg
YmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUKKyAgICAvLyB0
byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBz
byB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KKyAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRl
eHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1l
bnRlZCAKKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRv
IHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFibGUsIHdlCisgICAgLy8gcGxhY2Ug
REVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRp
ZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKKyAgICAvLyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0Y2gg
KHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6
IC8qIG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gCisgICAg
ICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgICAgeworICAgICAgICAgICAg
KnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAg
Y2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZB
UllJTkdfVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJf
U0laRToKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgIGNh
c2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgY2FzZSBHTF9BUlJB
WV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVUlJFTlRf
UFJPR1JBTToKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX1VO
UEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgorICAg
ICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKKyAgICAgIGNh
c2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgorICAgICAgY2FzZSBH
TF9ERVBUSF9CSVRTOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6CisgICAgICBjYXNlIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVTExfRkFDRV9N
T0RFOgorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgorICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVY
VFVSRToKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1ZBTFVFX01BU0s6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOgorICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZVTkM6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfREVQ
VEhfRlVOQzoKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjoKKyAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOgorICAgICAgY2FzZSBH
TF9CTEVORF9EU1RfQUxQSEE6CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoKKyAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICBjYXNlIEdMX1NURU5DSUxf
V1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRT
OgorICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUzoKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9UWVBFOgorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgorICAgICAgY2FzZSBHTF9URVhUVVJF
X0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgIGNhc2UgR0xf
U0NJU1NPUl9CT1g6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAg
ICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjoKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
X0lOVkVSVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9D
VUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIC8vIENVTExfRkFDRSB0aHJvdWdoIERJVEhFUiBhcmUg
bmF0dXJhbCB0byBJc0VuYWJsZWQsCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVy
aWVzLgorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlz
IHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwKKyAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFOgorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDoKKyAgICAg
IGNhc2UgR0xfQkxFTkQ6CisgICAgICBjYXNlIEdMX0RJVEhFUjoKKyAgICAgICAgeworICAgICAg
ICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAg
ICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBh
cmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICAgIGNhc2UgR0xfREVQVEhf
Q0xFQVJfVkFMVUU6CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6CisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICBj
YXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZM
T0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9CTEVO
RF9DT0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKKyAgICAg
ICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5j
aWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAorLy8gc2Npc3NvciByZWN0YW5nbGUg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0
KGJvb2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7CisKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRG
cmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZl
ck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAg
eworICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aFN0ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAgaWYgKHJlbmRlclRh
cmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKKyAgICB7CisgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CisgICAgICAgIG1BcHBs
aWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIH0KKworICAg
IHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRE
ZXB0aGJ1ZmZlclNlcmlhbCgpOworICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7CisgICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJp
YWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB9CisKKyAgICBEM0RWSUVXUE9SVDkgdmlld3Bv
cnQ7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNj
KCZkZXNjKTsKKworICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKKyAgICB7CisgICAgICAgIHZpZXdw
b3J0LlggPSAwOworICAgICAgICB2aWV3cG9ydC5ZID0gMDsKKyAgICAgICAgdmlld3BvcnQuV2lk
dGggPSBkZXNjLldpZHRoOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXNjLkhlaWdodDsK
KyAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSAx
LjBmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2aWV3cG9ydC5YID0gc3RkOjpt
YXgobVN0YXRlLnZpZXdwb3J0WCwgMCk7CisgICAgICAgIHZpZXdwb3J0LlkgPSBzdGQ6Om1heCht
U3RhdGUudmlld3BvcnRZLCAwKTsKKyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbiht
U3RhdGUudmlld3BvcnRXaWR0aCwgKGludClkZXNjLldpZHRoIC0gKGludCl2aWV3cG9ydC5YKTsK
KyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0SGVpZ2h0
LCAoaW50KWRlc2MuSGVpZ2h0IC0gKGludCl2aWV3cG9ydC5ZKTsKKyAgICAgICAgdmlld3BvcnQu
TWluWiA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IGNs
YW1wMDEobVN0YXRlLnpGYXIpOworICAgIH0KKworICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAw
IHx8IHZpZXdwb3J0LkhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIE5vdGhpbmcgdG8gcmVuZGVyCisgICAgfQorCisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgm
dmlld3BvcnQpOworCisgICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAg
IGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1QgcmVj
dCA9IHttU3RhdGUuc2Npc3NvclgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNj
aXNzb3JZLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0
ZS5zY2lzc29yV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZ
ICsgbVN0YXRlLnNjaXNzb3JIZWlnaHR9OworCisgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNz
b3JSZWN0KCZyZWN0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVT
VEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtU2Npc3NvclN0
YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFt
KQorICAgIHsKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9n
cmFtKCk7CisKKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4w
ZiAvIHZpZXdwb3J0LldpZHRoLCAxLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKKyAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCAoR0xmbG9hdCopJnh5
KTsKKworICAgICAgICBHTGludCB3aW5kb3cgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFdpbmRvd0xv
Y2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0
aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRo
IC8gMi4wZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3Bv
cnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07CisgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm00ZnYod2luZG93LCAxLCAoR0xmbG9hdCopJndoeHkpOworCisgICAgICAg
IEdMaW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAg
ICAgIEdMZmxvYXQgZHpbMl0gPSB7KG1TdGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyKSAvIDIuMGYs
IChtU3RhdGUuek5lYXIgKyBtU3RhdGUuekZhcikgLyAyLjBmfTsKKyAgICAgICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgKEdMZmxvYXQqKSZkeik7CisKKyAgICAgICAg
R0xpbnQgbmVhciA9IHByb2dyYW1PYmplY3QtPmdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKTsK
KyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihuZWFyLCAxLCAmbVN0YXRlLnpO
ZWFyKTsKKworICAgICAgICBHTGludCBmYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdl
RmFyTG9jYXRpb24oKTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihmYXIs
IDEsICZtU3RhdGUuekZhcik7CisKKyAgICAgICAgR0xpbnQgZGlmZiA9IHByb2dyYW1PYmplY3Qt
PmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCB6RGlmZiA9IG1T
dGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyOworICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlm
b3JtMWZ2KGRpZmYsIDEsICZ6RGlmZik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0
LCBhbHBoYSBibGVuZGluZywgc3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZp
Y2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTGludCBmcm9udENDVyA9IHBy
b2dyYW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGNjdyA9ICht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7CisgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFpdihmcm9udENDVywgMSwgJmNjdyk7CisKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJv
Z3JhbU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBhbHdh
eXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7CisgICAgcHJvZ3JhbU9iamVjdC0+
c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworCisgICAgaWYg
KG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCisgICAgeworICAgICAgICBpZiAo
bVN0YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxs
TW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwg
RDNEQ1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IGZh
bHNlOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAg
aWYgKG1TdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24o
bVN0YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9G
QUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0
YXRlLmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAobVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVu
ZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0Qmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVz
MmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+KG1T
dGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENv
bG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNl
QmxlbmRSR0IpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVT
VEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVzMmR4OjpD
b252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOworCisgICAgICAgICAgICBp
ZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IAor
ICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RCbGVuZEFs
cGhhIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OworCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVO
REFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkp
OworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
QUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOwor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhB
LCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOworCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFC
TEUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFj
ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBoYXNTdGVu
Y2lsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOworCisgICAgICAgICAgICAvLyBG
SVhNRTogVW5zdXBwb3J0ZWQgYnkgRDNEOQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RB
VEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKKyAgICAgICAg
ICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RS
U19TVEVOQ0lMTUFTSzsKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RS
U19DQ1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7CisgICAgICAg
ICAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3Jp
dGVtYXNrIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5z
dGVuY2lsQmFja1JlZiB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0g
bVN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBF
UlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFs
dWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBz
dGVuY2lsIHJlZgorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1
ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBHTHVp
bnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0g
MTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxG
VU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwor
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRl
LnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1h
eFN0ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBE
M0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0
ZW5jaWxQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19D
Q1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJk
eDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKworICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NX
ID8gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBt
U3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBE
M0RSU19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
OiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxNQVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZB
SUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBB
U1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChtTWFza1N0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1T
dGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOwor
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgbVN0YXRl
LmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkKKyAgICB7
CisgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpLT5n
ZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVT
Q0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcikpOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsKKyAgICAgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQq
KSZkZXB0aEJpYXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVT
Q0FMRURFUFRIQklBUywgMCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0RFUFRIQklBUywgMCk7CisgICAgICAgIH0KKworICAgICAgICBtUG9seWdvbk9mZnNldFN0
YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobUNvbmZpZy0+bU11bHRpU2FtcGxl
ICE9IDAgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgRklYTUUoIlNhbXBs
ZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAg
RklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisK
KyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobURp
dGhlclN0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAg
ICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtRnJvbnRGYWNlRGly
dHkgPSBmYWxzZTsKK30KKworLy8gRmlsbCBpbiB0aGUgc2VtYW50aWNJbmRleCBmaWVsZCBvZiB0
aGUgYXJyYXkgb2YgVHJhbnNsYXRlZEF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBHTFNM
IHByb2dyYW0uCit2b2lkIENvbnRleHQ6Omxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJhbnNsYXRl
ZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5h
YmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4
ID0gZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0U2VtYW50aWNJbmRleChpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdMZW51bSBtb2Rl
LCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAqdXNlSW5kZXhpbmcsIFRyYW5zbGF0
ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5z
bGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGZpcnN0LCBjb3VudCwgdHJhbnNsYXRlZCk7Cisg
ICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgfQorCisgICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKKworICAgIG1C
dWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmICh0cmFuc2xhdGVkW2ldLmVuYWJsZWQgJiYgdHJhbnNsYXRlZFtpXS5ub25BcnJheSkK
KyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZVJlbmRl
clZhbGlkYXRlVW5pbmRleGVkKG1vZGUsIGNvdW50LCBpbmRleEluZm8pOworICAgICAgICAgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtQnVmZmVyQmFja0VuZC0+
c2V0dXBJbmRpY2VzUHJlRHJhdygqaW5kZXhJbmZvKTsKKworICAgICAgICAgICAgKnVzZUluZGV4
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgICp1c2VJbmRleGluZyA9IGZhbHNlOworICAgIHJldHVybiBHTF9OT19FUlJP
UjsKK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRyYW5zbGF0
ZWRJbmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5z
bGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZv
Lm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCB0cmFuc2xhdGVkKTsKKworICAgIGlmIChl
cnIgPT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICBsb29rdXBBdHRyaWJ1dGVNYXBwaW5n
KHRyYW5zbGF0ZWQpOworCisgICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQ
cmVEcmF3KHRyYW5zbGF0ZWQpOworICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKKy8vIEFw
cGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCitHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCB2b2lk
ICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5z
bGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0
YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1vZGUsIHR5cGUsIGNvdW50LCBnZXRCdWZmZXIo
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciksIGluZGljZXMsIGluZGV4SW5mbyk7CisKKyAgICBp
ZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlckJhY2tFbmQtPnNl
dHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisgICAgfQorCisgICAgcmV0dXJuIGVycjsK
K30KKworLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKK3sKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAg
ICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UGl4ZWxTaGFkZXIoKTsKKworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRl
cik7CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CisKKyAgICBpZiAo
cHJvZ3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtKQorICAgIHsKKyAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFt
T2JqZWN0LT5kaXJ0eUFsbFNhbXBsZXJzKCk7CisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbSA9IHBy
b2dyYW1PYmplY3QtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHByb2dyYW1PYmplY3QtPmFw
cGx5VW5pZm9ybXMoKTsKK30KKworLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIg
c3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAg
ICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNh
bXBsZXIrKykKKyAgICB7CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3Qt
PmdldFNhbXBsZXJNYXBwaW5nKHNhbXBsZXIpOworICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZXJUeXBlIHRleHR1cmVUeXBlID0gcHJv
Z3JhbU9iamVjdC0+Z2V0U2FtcGxlclR5cGUoc2FtcGxlcik7CisKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUp
OworCisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+aXNTYW1wbGVyRGlydHkoc2FtcGxl
cikgfHwgdGV4dHVyZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0
ZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1w
bGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7
CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNhbXBsZXIsIEQz
RFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKKworICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1Q
X01BR0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdGaWx0ZXIobWFnRmlsdGVyKSk7CisgICAgICAg
ICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmls
dGVyOworICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0
ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIpOworICAgICAgICAgICAgICAgICAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWlu
RmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXIsIHRleHR1cmUtPmdldFRleHR1cmUoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCBnZXRJ
bmNvbXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRT
YW1wbGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNh
bXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVy
ZShzYW1wbGVyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRTYW1w
bGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgCisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB2
b2lkKiBwaXhlbHMpCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVi
dWZmZXIoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZm
ZXItPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0
LT5HZXREZXNjKCZkZXNjKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNl
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZh
Y2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1F
TSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1V
TFRJU0FNUExFX05PTkUpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1w
bGVkIHJlbmRlciB0YXJnZXQKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRl
clRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKKworICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKwor
ICAgICAgICBzd2l0Y2ggKHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBEM0RF
UlJfRFJJVkVSSU5URVJOQUxFUlJPUjoKKyAgICAgICAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxP
U1Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAg
ICAgICB9CisgICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKKyAgICBSRUNUIHJlY3Qg
PSB7c3RkOjptYXgoeCwgMCksCisgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KHksIDApLAorICAg
ICAgICAgICAgICAgICBzdGQ6Om1pbih4ICsgd2lkdGgsIChpbnQpZGVzYy5XaWR0aCksCisgICAg
ICAgICAgICAgICAgIHN0ZDo6bWluKHkgKyBoZWlnaHQsIChpbnQpZGVzYy5IZWlnaHQpfTsKKwor
ICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9D
S19SRUFET05MWSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCisgICAgfQorCisg
ICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Cisg
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7CisgICAgdW5z
aWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOworCisgICAgR0xz
aXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3Rh
dGUucGFja0FsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9t
IC0gcmVjdC50b3A7IGorKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBy
OworICAgICAgICAgICAgZmxvYXQgZzsKKyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAg
ICBmbG9hdCBhOworCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNo
b3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAq
ICgxLjBmIC8gMHgwMDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTAp
ICogKDEuMGYgLyAweDA3RTApOworICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4Rjgw
MCkgKiAoMS4wZiAvIDB4RjgwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHhyZ2IgPSAqKHVuc2ln
bmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4
MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAm
IDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoeHJn
YiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2Ig
PSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisK
KyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwor
ICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYp
OworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAz
RTApOworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAw
eDdDMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChh
cmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOworICAgICAgICAgICAgICAg
ICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAg
ICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBG
RjAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4w
ZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50
Kikoc291cmNlICsgNCAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYp
ICogKDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgICAgICAgICBy
ID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9BMlIxMEcxMEIxMDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBs
b2NrLlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAw
KSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAm
IDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKKyAgICAgICAgICAgICAgICAgICAg
ZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOworICAgICAgICAg
ICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X1JHQkE6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIp
KDI1NSAqIHIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVm
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9GT1JNQVQKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAv
LyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUKKyAgICAgICAgICAgICAgICAgICAgZGVz
dDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAorICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwg
MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsg
MC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
MzEgKiByICsgMC41ZikgPDwgMTEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3lzdGVtU3VyZmFj
ZS0+VW5sb2NrUmVjdCgpOworCisgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworfQorCit2
b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1
ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBEV09SRCBmbGFncyA9IDA7CisKKyAgICBpZiAobWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgeworICAgICAgICBtYXNrICY9IH5HTF9DT0xP
Ul9CVUZGRVJfQklUOworCisgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0g
RDNEQ0xFQVJfVEFSR0VUOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1hc2sgJiBHTF9E
RVBUSF9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVS
X0JJVDsKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZsYWdzIHw9IEQzRENMRUFSX1pCVUZGRVI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRo
U3RlbmNpbCgpOworCisgICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKKworICAgIGlm
ICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZGVwdGhTdGVuY2lsKQorICAgIHsK
KyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzYyk7CisKKyAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwor
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUo
ZGVzYy5Gb3JtYXQpOworICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxT
aXplKSAtIDE7CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobWFzayAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1
ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90
IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEQzRENP
TE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmFscGhhKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
b3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUu
Z3JlZW4pLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5v
cm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgZmxvYXQgZGVwdGggPSBj
bGFtcDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUpOworICAgIGludCBzdGVuY2lsID0gbVN0YXRl
LnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisK
KyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRl
c2MpOworCisgICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGVzMmR4OjpHZXRBbHBoYVNpemUoZGVz
Yy5Gb3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKKworICAgIGNvbnN0IGJv
b2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7CisgICAgY29u
c3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShtU3RhdGUuY29sb3JN
YXNrUmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQp
OworCisgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xl
YXIpCisgICAgeworICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRo
cyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCisgICAgICAgIC8v
IFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwgYmUgZmxhZ2dl
ZCBkaXJ0eSBpbiB0aGUgY2FzZSB0aGF0CisgICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4u
CisgICAgICAgIEhSRVNVTFQgaHI7CisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRl
QmxvY2soKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOworICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZB
TFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUs
IEQzRENVTExfTk9ORSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
MCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFC
TEUsIEZBTFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7CisgICAgICAgICAg
ICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisKKyAgICAgICAgICAgIGhyID0g
ZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKKyAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgICAgIH0KKworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pXUklURUVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworCisg
ICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAobVN0YXRl
LmNvbG9yTWFza1JlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1T
dGF0ZS5jb2xvck1hc2tHcmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gOiAwKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChtU3RhdGUuY29sb3JNYXNrQmx1ZSAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVN0YXRlLmNvbG9yTWFza0FscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6
IDApKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RD
TEVBUl9TVEVOQ0lMKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYs
IHN0ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVO
Q0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFD
RSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxaRkFJ
TCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAg
ICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7CisgICAg
ICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKKworICAgICAgICBzdHJ1Y3Qg
VmVydGV4CisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHgsIHksIHosIHc7CisgICAgICAg
ICAgICBEM0RDT0xPUiBkaWZmdXNlOworICAgICAgICB9OworCisgICAgICAgIFZlcnRleCBxdWFk
WzRdOworICAgICAgICBxdWFkWzBdLnggPSAwLjBmOworICAgICAgICBxdWFkWzBdLnkgPSAoZmxv
YXQpZGVzYy5IZWlnaHQ7CisgICAgICAgIHF1YWRbMF0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRb
MF0udyA9IDEuMGY7CisgICAgICAgIHF1YWRbMF0uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAg
IHF1YWRbMV0ueCA9IChmbG9hdClkZXNjLldpZHRoOworICAgICAgICBxdWFkWzFdLnkgPSAoZmxv
YXQpZGVzYy5IZWlnaHQ7CisgICAgICAgIHF1YWRbMV0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRb
MV0udyA9IDEuMGY7CisgICAgICAgIHF1YWRbMV0uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAg
IHF1YWRbMl0ueCA9IDAuMGY7CisgICAgICAgIHF1YWRbMl0ueSA9IDAuMGY7CisgICAgICAgIHF1
YWRbMl0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRbMl0udyA9IDEuMGY7CisgICAgICAgIHF1YWRb
Ml0uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAgIHF1YWRbM10ueCA9IChmbG9hdClkZXNjLldp
ZHRoOworICAgICAgICBxdWFkWzNdLnkgPSAwLjBmOworICAgICAgICBxdWFkWzNdLnogPSAwLjBm
OworICAgICAgICBxdWFkWzNdLncgPSAxLjBmOworICAgICAgICBxdWFkWzNdLmRpZmZ1c2UgPSBj
b2xvcjsKKworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+
RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihWZXJ0
ZXgpKTsKKworICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9aQlVGRkVSKQorICAgICAgICB7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUp
OworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUs
IFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVG
RkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
IGlmIChmbGFncykKKyAgICB7CisgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgZmxhZ3Ms
IGNvbG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KQoreworICAgIGlm
ICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOworICAgIGludCBwcmltaXRp
dmVDb3VudDsKKworICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291
bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQo
ZmFsc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGUo
bW9kZSk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKKyAgICBib29sIHVz
ZUluZGV4aW5nOworICAgIEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihtb2RlLCBmaXJz
dCwgY291bnQsICZ1c2VJbmRleGluZywgJmluZGV4SW5mbyk7CisgICAgaWYgKGVyciAhPSBHTF9O
T19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOworICAgIH0KKworICAg
IGFwcGx5U2hhZGVycygpOworICAgIGFwcGx5VGV4dHVyZXMoKTsKKworICAgIGlmICghZ2V0Q3Vy
cmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBpZiAoIWN1bGxTa2lw
c0RyYXcobW9kZSkpCisgICAgeworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAg
ICAgIGlmICh1c2VJbmRleGluZykKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5EcmF3
SW5kZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgs
IGluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRl
eCsxLCBpbmRleEluZm8ub2Zmc2V0L2luZGV4SW5mby5pbmRleFNpemUsIHByaW1pdGl2ZUNvdW50
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmlj
ZS0+RHJhd1ByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCBwcmltaXRpdmVDb3VudCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogaW5kaWNlcykKK3sKKyAg
ICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKCFpbmRpY2VzICYmICFt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOworICAgIGludCBwcmltaXRp
dmVDb3VudDsKKworICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291
bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQorICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQo
ZmFsc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGUo
bW9kZSk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKKyAgICBHTGVudW0g
ZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4
SW5mbyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihlcnIpOworICAgIH0KKworICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4
SW5mbyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihlcnIpOworICAgIH0KKworICAgIGFwcGx5U2hhZGVycygpOworICAgIGFwcGx5VGV4
dHVyZXMoKTsKKworICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVy
cygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICB9CisKKyAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCisgICAgeworICAgICAgICBk
aXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+RHJhd0luZGV4ZWRQcmltaXRp
dmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWlu
SW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgaW5kZXhJbmZv
Lm9mZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmltaXRpdmVDb3VudCk7CisgICAgfQorfQor
Cit2b2lkIENvbnRleHQ6OmZpbmlzaCgpCit7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
Z2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworICAgIElEaXJlY3QzRFF1ZXJ5OSAqb2NjbHVzaW9uUXVlcnkgPSBOVUxMOworCisgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04s
ICZvY2NsdXNpb25RdWVyeSk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICBpZiAob2NjbHVzaW9uUXVlcnkpCisgICAgeworICAgICAgICBJRGly
ZWN0M0RTdGF0ZUJsb2NrOSAqc2F2ZWRTdGF0ZSA9IE5VTEw7CisgICAgICAgIGRldmljZS0+Q3Jl
YXRlU3RhdGVCbG9jayhEM0RTQlRfQUxMLCAmc2F2ZWRTdGF0ZSk7CisKKyAgICAgICAgb2NjbHVz
aW9uUXVlcnktPklzc3VlKEQzRElTU1VFX0JFR0lOKTsKKworICAgICAgICAvLyBSZW5kZXIgc29t
ZXRoaW5nIG91dHNpZGUgdGhlIHJlbmRlciB0YXJnZXQKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKDAsIDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwp
OworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNl
LT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7CisgICAgICAgIGZsb2F0IGRhdGFbNF0gPSB7LTEuMGYs
IC0xLjBmLCAtMS4wZiwgMS4wZn07CisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAg
ICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfUE9JTlRMSVNULCAxLCBkYXRhLCBz
aXplb2YoZGF0YSkpOworCisgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9F
TkQpOworCisgICAgICAgIHdoaWxlIChvY2NsdXNpb25RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBE
M0RHRVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBL
ZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2Vm
dWwgZmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDApOworICAgICAgICB9CisKKyAgICAgICAgb2Nj
bHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoc2F2ZWRTdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc2F2ZWRTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgICAgIHNhdmVk
U3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb250ZXh0Ojpm
bHVzaCgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Cisg
ICAgSURpcmVjdDNEUXVlcnk5ICpldmVudFF1ZXJ5ID0gTlVMTDsKKworICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVudFF1ZXJ5
KTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
IGlmIChldmVudFF1ZXJ5KQorICAgIHsKKyAgICAgICAgZXZlbnRRdWVyeS0+SXNzdWUoRDNESVNT
VUVfRU5EKTsKKworICAgICAgICB3aGlsZSAoZXZlbnRRdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBE
M0RHRVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBL
ZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2Vm
dWwgZmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDApOworICAgICAgICB9CisKKyAgICAgICAgZXZl
bnRRdWVyeS0+UmVsZWFzZSgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZh
bGlkRW51bSgpCit7CisgICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0
OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQoreworICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOworfQor
Cit2b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQoreworICAgIG1JbnZhbGlk
T3BlcmF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgp
Cit7CisgICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJ
bnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQoreworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJP
cGVyYXRpb24gPSB0cnVlOworfQorCisvLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMg
YW5kIGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAyLjUgcGFnZSAxMy4KK0dMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1J
bnZhbGlkRW51bSkKKyAgICB7CisgICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworCisgICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX0VOVU07CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkVmFs
dWUpCisgICAgeworICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7CisKKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfVkFMVUU7CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9u
KQorICAgIHsKKyAgICAgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCisgICAgaWYgKG1PdXRPZk1lbW9y
eSkKKyAgICB7CisgICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOworCisgICAgICAgIHJldHVy
biBHTF9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVy
T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9
IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TjsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIgKkNv
bnRleHQ6OmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpCit7CisgICAgcmV0dXJuIG1Qc1Byb2ZpbGU7
Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldFZlcnRleFNoYWRlclByb2ZpbGUoKQorewor
ICAgIHJldHVybiBtVnNQcm9maWxlOworfQorCit2b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihH
THVpbnQgYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBw
YWdlIDIyOgorICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0IGlz
IGJvdW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQgY29udGV4
dAorICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMp
IGFyZSByZXNldCB0byB6ZXJvLgorCisgICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlciA9PSBidWZm
ZXIpCisgICAgeworICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgIH0KKworICAg
IGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIH0KKworICAgIGZvciAoaW50IGF0
dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKysp
CisgICAgeworICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1C
b3VuZEJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIgPSAwOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7Cisg
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44IHBhZ2UgODQ6CisgICAgLy8gSWYg
YSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0
cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUKKyAgICAvLyByZWJv
dW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8KKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBl
IDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBmb3IgKGludCBz
YW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1b
c2FtcGxlcl0gPT0gdGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0gPSAwOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBh
Z2UgMTEyOgorICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMg
aW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhl
biBpdCBpcworICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxl
ZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGlj
aCB0aGlzCisgICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQg
ZnJhbWVidWZmZXIuCisKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1
ZmZlcigpOworCisgICAgaWYgKGZyYW1lYnVmZmVyKQorICAgIHsKKyAgICAgICAgZnJhbWVidWZm
ZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRl
dGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDc6CisgICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0
aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0
ZWQsIGl0IGlzIGFzIHRob3VnaAorICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVj
dXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHpl
cm8uCisKKyAgICBpZiAobVN0YXRlLmZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQorICAgIHsK
KyAgICAgICAgYmluZEZyYW1lYnVmZmVyKDApOworICAgIH0KK30KKwordm9pZCBDb250ZXh0Ojpk
ZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6CisgICAgLy8gSWYgYSByZW5kZXJidWZm
ZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0
IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCisgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQg
d2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgorCisgICAgaWYg
KG1TdGF0ZS5yZW5kZXJidWZmZXIgPT0gcmVuZGVyYnVmZmVyKQorICAgIHsKKyAgICAgICAgYmlu
ZFJlbmRlcmJ1ZmZlcigwKTsKKyAgICB9CisKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiA0LjQgcGFnZSAxMTE6CisgICAgLy8gSWYgYSByZW5kZXJidWZmZXIgb2JqZWN0IGlzIGRl
bGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQg
ZnJhbWVidWZmZXIsCisgICAgLy8gdGhlbiBpdCBpcyBhcyBpZiBGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSByZW5kZXJidWZmZXIgb2YgMCwgZm9yIGVhY2gg
YXR0YWNobWVudAorICAgIC8vIHBvaW50IHRvIHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFjaGVk
IGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCisKKyAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKGZyYW1lYnVmZmVyKQor
ICAgIHsKKyAgICAgICAgZnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpOworICAgIH0KK30KKworVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUo
U2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJl
c1t0eXBlXTsKKworICAgIGlmICh0ID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKKworICAgICAgICBzd2l0Y2gg
KHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsbHMgdGhyb3VnaCB0byBTQU1QTEVS
XzJECisKKyAgICAgICAgICBjYXNlIFNBTVBMRVJfMkQ6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKHRoaXMpOwor
ICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgR0xfUkdCQSwgMSwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIHQg
PSBpbmNvbXBsZXRlMmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgIGNhc2UgU0FNUExFUl9DVUJFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBU
ZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7
CisKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCBHTF9SR0JB
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VQb3NZKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdl
TmVnWSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgR0xfUkdC
QSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKworICAgICAgICAgICAgICB0ID0gaW5j
b21wbGV0ZUN1YmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0gPSB0OworICAgIH0KKworICAg
IHJldHVybiB0OworfQorCitib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdN
b2RlKQoreworICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09
IEdMX0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKK30KKworYm9v
bCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNo
IChkcmF3TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2Ug
R0xfVFJJQU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6
CisgICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29udGV4dDo6aGFzU3RlbmNpbCgpCit7
CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsK
KworICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIFN0ZW5jaWxidWZm
ZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlcigpOworCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2JqZWN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+
IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVz
KQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1sw
XTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0g
dmFsdWVzWzFdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFs
dWVbMl0gPSB2YWx1ZXNbMl07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1
cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsKKworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGly
dHlDdXJyZW50VmFsdWVzKCk7Cit9CisKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmlu
ZygpCit7CisgICAgaWYgKG1CdWZmZXJCYWNrRW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQorICAg
IHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWlu
dCAiOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lv
blN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CisgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsK
KyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKK30KKworfQorCitl
eHRlcm4gIkMiCit7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29u
ZmlnICpjb25maWcpCit7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcpOworfQor
Cit2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgZGVs
ZXRlIGNvbnRleHQ7CisKKyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQorICAg
IHsKKyAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KK30K
Kwordm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBnbDo6bWFrZUN1cnJlbnQo
Y29udGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7Cit9CisKK2dsOjpDb250ZXh0ICpnbEdldEN1cnJl
bnRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKK30KK30KSW5kZXg6
IEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDg3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBDb250ZXh0Lmg6IERlZmluZXMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2lu
ZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcKKy8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJ
dCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KKwor
I2lmbmRlZiBJTkNMVURFX0NPTlRFWFRfSF8KKyNkZWZpbmUgSU5DTFVERV9DT05URVhUX0hfCisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2RlZmluZSBFR0xB
UEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8
bWFwPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAor
eworY2xhc3MgRGlzcGxheTsKK2NsYXNzIFN1cmZhY2U7CitjbGFzcyBDb25maWc7Cit9CisKK25h
bWVzcGFjZSBnbAoreworc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CitzdHJ1Y3QgVHJhbnNs
YXRlZEluZGV4RGF0YTsKKworY2xhc3MgQnVmZmVyOworY2xhc3MgU2hhZGVyOworY2xhc3MgUHJv
Z3JhbTsKK2NsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcDsKK2NsYXNzIEZyYW1lYnVmZmVyOworY2xhc3MgUmVuZGVyYnVmZmVyOworY2xhc3MgQ29s
b3JidWZmZXI7CitjbGFzcyBEZXB0aGJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZmZXI7CitjbGFz
cyBWZXJ0ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7CitjbGFzcyBCdWZm
ZXJCYWNrRW5kOworY2xhc3MgQmxpdDsKKworZW51bQoreworICAgIE1BWF9WRVJURVhfQVRUUklC
UyA9IDEyLAorICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMTI4LAorICAgIE1BWF9W
QVJZSU5HX1ZFQ1RPUlMgPSA4LAorICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ID0gMTYsCisgICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMCwKKyAgICBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAorICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RP
UlMgPSAxNiwKKyAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgPSA0MDk2LCAgIC8vIEZJWE1FOiBW
ZXJpZnkKKyAgICBNQVhfRFJBV19CVUZGRVJTID0gMSwKKworICAgIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfRk9STUFUID0gR0xfUkdCLAorICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURf
VFlQRSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Cit9OworCitjb25zdCBmbG9hdCBBTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9X
SURUSF9SQU5HRV9NQVggPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFX01JTiA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFY
ID0gMS4wZjsKKworZW51bSBTYW1wbGVyVHlwZQoreworICAgIFNBTVBMRVJfMkQsCisgICAgU0FN
UExFUl9DVUJFLAorCisgICAgU0FNUExFUl9UWVBFX0NPVU5UCit9OworCitzdHJ1Y3QgQ29sb3IK
K3sKKyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQgZ3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAg
ICBmbG9hdCBhbHBoYTsKK307CisKKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNp
bmdsZSB2ZXJ0ZXggYXR0cmlidXRlCitjbGFzcyBBdHRyaWJ1dGVTdGF0ZQoreworICBwdWJsaWM6
CisgICAgQXR0cmlidXRlU3RhdGUoKQorICAgICAgICA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUo
MCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1Cb3Vu
ZEJ1ZmZlcigwKSwgbUVuYWJsZWQoZmFsc2UpCisgICAgeworICAgICAgICBtQ3VycmVudFZhbHVl
WzBdID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7CisgICAgICAgIG1DdXJyZW50
VmFsdWVbMl0gPSAwOworICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMTsKKyAgICB9CisKKyAg
ICAvLyBGcm9tIFZlcnRleEFycmF5UG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGlu
dCBtU2l6ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIEdMc2l6ZWkgbVN0cmlkZTsgLy8g
MCBtZWFucyBuYXR1cmFsIHN0cmlkZQorICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOworCisgICAg
R0x1aW50IG1Cb3VuZEJ1ZmZlcjsgLy8gQ2FwdHVyZWQgd2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIg
aXMgY2FsbGVkLgorCisgICAgYm9vbCBtRW5hYmxlZDsgLy8gRnJvbSBFbmFibGUvRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5CisKKyAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAvLyBGcm9tIFZl
cnRleEF0dHJpYjRmCit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcg
c3RhdGUKK3N0cnVjdCBTdGF0ZQoreworICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBH
TGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7CisgICAgaW50IHN0ZW5jaWxDbGVhclZhbHVlOworCisg
ICAgYm9vbCBjdWxsRmFjZTsKKyAgICBHTGVudW0gY3VsbE1vZGU7CisgICAgR0xlbnVtIGZyb250
RmFjZTsKKyAgICBib29sIGRlcHRoVGVzdDsKKyAgICBHTGVudW0gZGVwdGhGdW5jOworICAgIGJv
b2wgYmxlbmQ7CisgICAgR0xlbnVtIHNvdXJjZUJsZW5kUkdCOworICAgIEdMZW51bSBkZXN0Qmxl
bmRSR0I7CisgICAgR0xlbnVtIHNvdXJjZUJsZW5kQWxwaGE7CisgICAgR0xlbnVtIGRlc3RCbGVu
ZEFscGhhOworICAgIEdMZW51bSBibGVuZEVxdWF0aW9uUkdCOworICAgIEdMZW51bSBibGVuZEVx
dWF0aW9uQWxwaGE7CisgICAgQ29sb3IgYmxlbmRDb2xvcjsKKyAgICBib29sIHN0ZW5jaWxUZXN0
OworICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKKyAgICBHTGludCBzdGVuY2lsUmVmOworICAgIEdM
dWludCBzdGVuY2lsTWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEZhaWw7CisgICAgR0xlbnVtIHN0
ZW5jaWxQYXNzRGVwdGhGYWlsOworICAgIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKKyAg
ICBHTHVpbnQgc3RlbmNpbFdyaXRlbWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tGdW5jOwor
ICAgIEdMaW50IHN0ZW5jaWxCYWNrUmVmOworICAgIEdMdWludCBzdGVuY2lsQmFja01hc2s7Cisg
ICAgR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsOworICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7CisgICAgR0x1aW50
IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOworICAgIGJvb2wgcG9seWdvbk9mZnNldEZpbGw7CisgICAg
R0xmbG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOworICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldFVu
aXRzOworICAgIGJvb2wgc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgIGJvb2wgc2FtcGxlQ292
ZXJhZ2U7CisgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1ZTsKKyAgICBib29sIHNhbXBs
ZUNvdmVyYWdlSW52ZXJ0OworICAgIGJvb2wgc2Npc3NvclRlc3Q7CisgICAgYm9vbCBkaXRoZXI7
CisKKyAgICBHTGZsb2F0IGxpbmVXaWR0aDsKKworICAgIEdMZW51bSBnZW5lcmF0ZU1pcG1hcEhp
bnQ7CisKKyAgICBHTGludCB2aWV3cG9ydFg7CisgICAgR0xpbnQgdmlld3BvcnRZOworICAgIEdM
c2l6ZWkgdmlld3BvcnRXaWR0aDsKKyAgICBHTHNpemVpIHZpZXdwb3J0SGVpZ2h0OworICAgIGZs
b2F0IHpOZWFyOworICAgIGZsb2F0IHpGYXI7CisKKyAgICBHTGludCBzY2lzc29yWDsKKyAgICBH
TGludCBzY2lzc29yWTsKKyAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKKyAgICBHTHNpemVpIHNj
aXNzb3JIZWlnaHQ7CisKKyAgICBib29sIGNvbG9yTWFza1JlZDsKKyAgICBib29sIGNvbG9yTWFz
a0dyZWVuOworICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKKyAgICBib29sIGNvbG9yTWFza0FscGhh
OworICAgIGJvb2wgZGVwdGhNYXNrOworCisgICAgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0
aXZlIHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCisgICAgR0x1aW50IGFycmF5
QnVmZmVyOworICAgIEdMdWludCBlbGVtZW50QXJyYXlCdWZmZXI7CisgICAgR0x1aW50IHRleHR1
cmUyRDsKKyAgICBHTHVpbnQgdGV4dHVyZUN1YmVNYXA7CisgICAgR0x1aW50IGZyYW1lYnVmZmVy
OworICAgIEdMdWludCByZW5kZXJidWZmZXI7CisgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwor
CisgICAgQXR0cmlidXRlU3RhdGUgdmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107
CisgICAgR0x1aW50IHNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfVFlQRV9DT1VOVF1bTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOworCisgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OworICAgIEdMaW50
IHBhY2tBbGlnbm1lbnQ7Cit9OworCitjbGFzcyBDb250ZXh0Cit7CisgIHB1YmxpYzoKKyAgICBD
b250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworCisgICAgfkNvbnRleHQoKTsKKwor
ICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpOworCisgICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgLy8gU3Rh
dGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQg
Z3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKKworICAgIHZvaWQgc2V0Q2xlYXJEZXB0
aChmbG9hdCBkZXB0aCk7CisKKyAgICB2b2lkIHNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCk7
CisKKyAgICB2b2lkIHNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0N1bGxG
YWNlRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRDdWxsTW9kZShHTGVudW0gbW9kZSk7
CisKKyAgICB2b2lkIHNldEZyb250RmFjZShHTGVudW0gZnJvbnQpOworCisgICAgdm9pZCBzZXRE
ZXB0aFRlc3QoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzRGVwdGhUZXN0RW5hYmxlZCgpIGNv
bnN0OworCisgICAgdm9pZCBzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYyk7CisKKyAgICB2
b2lkIHNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpOworICAgIAorICAgIHZv
aWQgc2V0QmxlbmQoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzQmxlbmRFbmFibGVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0g
ZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKTsKKyAgICB2b2lk
IHNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQg
YWxwaGEpOworICAgIHZvaWQgc2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdM
ZW51bSBhbHBoYUVxdWF0aW9uKTsKKworICAgIHZvaWQgc2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFi
bGVkKTsKKyAgICBib29sIGlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBH
THVpbnQgc3RlbmNpbE1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tQYXJhbXMoR0xlbnVt
IHN0ZW5jaWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYsIEdMdWludCBzdGVuY2lsQmFj
a01hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRl
bWFzayk7CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQgc3RlbmNpbEJh
Y2tXcml0ZW1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5j
aWxGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0Rl
cHRoUGFzcyk7CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5j
aWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzcyk7CisKKyAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRGaWxsKGJv
b2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpIGNvbnN0
OworCisgICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZs
b2F0IHVuaXRzKTsKKworICAgIHZvaWQgc2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5h
YmxlZCk7CisgICAgYm9vbCBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsK
KworICAgIHZvaWQgc2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlz
U2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNhbXBsZUNvdmVy
YWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCk7CisKKyAgICB2b2lkIHNldFNj
aXNzb3JUZXN0KGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc1NjaXNzb3JUZXN0RW5hYmxlZCgp
IGNvbnN0OworCisgICAgdm9pZCBzZXREaXRoZXIoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlz
RGl0aGVyRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRMaW5lV2lkdGgoR0xmbG9hdCB3
aWR0aCk7CisKKyAgICB2b2lkIHNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCk7CisK
KyAgICB2b2lkIHNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIHZvaWQgc2V0U2Npc3NvclBhcmFtcyhHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2b2lkIHNl
dENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsK
KyAgICB2b2lkIHNldERlcHRoTWFzayhib29sIG1hc2spOworCisgICAgdm9pZCBzZXRBY3RpdmVT
YW1wbGVyKGludCBhY3RpdmUpOworCisgICAgR0x1aW50IGdldEZyYW1lYnVmZmVySGFuZGxlKCkg
Y29uc3Q7CisgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAg
R0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFZlcnRl
eEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKKyAg
ICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50
IGF0dHJpYk51bSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQg
YXR0cmliTnVtLCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgY29uc3Qgdm9pZCAqZ2V0VmVydGV4QXR0
cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKKworICAgIGNvbnN0IEF0
dHJpYnV0ZVN0YXRlICpnZXRWZXJ0ZXhBdHRyaWJCbG9jaygpOworCisgICAgdm9pZCBzZXRVbnBh
Y2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKKyAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1l
bnQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQp
OworICAgIEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBjb25zdDsKKworICAgIEdMdWludCBjcmVh
dGVCdWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKKyAgICBH
THVpbnQgY3JlYXRlUHJvZ3JhbSgpOworICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CisgICAg
R0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBk
ZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAg
IHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRl
bGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgYmluZEFy
cmF5QnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEVsZW1lbnRBcnJheUJ1ZmZl
cihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUp
OworICAgIHZvaWQgYmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lk
IGJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgYmluZFJlbmRl
cmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIHVzZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pOworCisgICAgdm9pZCBzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyKTsKKyAgICB2b2lkIHNldENvbG9yYnVmZmVyWmVybyhDb2xvcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyKTsKKyAgICB2b2lkIHNldERlcHRoYnVmZmVyWmVybyhEZXB0aGJ1ZmZlciAqZGVw
dGhCdWZmZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlclplcm8oU3RlbmNpbGJ1ZmZlciAq
c3RlbmNpbEJ1ZmZlcik7CisgICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoUmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXIpOworCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZXMpOworCisgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhh
bmRsZSk7CisgICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7CisgICAgUHJvZ3Jh
bSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdM
dWludCBoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQgaGFu
ZGxlKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsK
KyAgICBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRGVw
dGhidWZmZXIgKmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFN0ZW5jaWxidWZm
ZXIgKmdldFN0ZW5jaWxidWZmZXIoR0x1aW50IGhhbmRsZSk7CisKKyAgICBCdWZmZXIgKmdldEFy
cmF5QnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICBQ
cm9ncmFtICpnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFRleHR1cmUyRCAqZ2V0VGV4dHVyZTJE
KCk7CisgICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgVGV4dHVy
ZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5
cGUpOworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBnZXRG
bG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0SW50ZWdl
cnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBib29sIGdldEJvb2xlYW52KEdM
ZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpOworCisgICAgYm9vbCBnZXRRdWVyeVBhcmFt
ZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFy
YW1zKTsKKworICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCk7
CisgICAgdm9pZCBhcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7CisgICAgR0xlbnVtIGFwcGx5
VmVydGV4QnVmZmVyKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9v
bCAqdXNlSW5kZXhpbmcsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgR0xl
bnVtIGFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5m
byk7CisgICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICppbmRleEluZm8pOworICAgIEdMZW51bSBhcHBseUNvdW50aW5nSW5kZXhCdWZmZXIoR0xlbnVt
IG1vZGUsIEdMZW51bSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKyAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOworCisgICAg
dm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKTsKKyAgICB2
b2lkIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBt
b2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRp
Y2VzKTsKKyAgICB2b2lkIGZpbmlzaCgpOworICAgIHZvaWQgZmx1c2goKTsKKworICAgIHZvaWQg
cmVjb3JkSW52YWxpZEVudW0oKTsKKyAgICB2b2lkIHJlY29yZEludmFsaWRWYWx1ZSgpOworICAg
IHZvaWQgcmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOworICAgIHZvaWQgcmVjb3JkT3V0T2ZNZW1v
cnkoKTsKKyAgICB2b2lkIHJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOworCisg
ICAgR0xlbnVtIGdldEVycm9yKCk7CisKKyAgICBjb25zdCBjaGFyICpnZXRQaXhlbFNoYWRlclBy
b2ZpbGUoKTsKKyAgICBjb25zdCBjaGFyICpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7CisKKyAg
ICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKworICAgIEJsaXQgKmdl
dEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQorCisgICAgY29uc3QgRDNEQ0FQUzkgJmdldERl
dmljZUNhcHMoKSB7IHJldHVybiBtRGV2aWNlQ2FwczsgfQorCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbnRleHQpOworCisgICAgdm9pZCBsb29rdXBBdHRyaWJ1
dGVNYXBwaW5nKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpOworCisgICAgdm9pZCBk
ZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWlu
dCB0ZXh0dXJlKTsKKyAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CisgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisK
KyAgICBUZXh0dXJlICpnZXRJbmNvbXBsZXRlVGV4dHVyZShTYW1wbGVyVHlwZSB0eXBlKTsKKwor
ICAgIGJvb2wgY3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpOworICAgIGJvb2wgaXNUcmlh
bmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBib29sIGhhc1N0ZW5jaWwoKTsKKworICAg
IGNvbnN0IGVnbDo6Q29uZmlnICpjb25zdCBtQ29uZmlnOworCisgICAgU3RhdGUgICBtU3RhdGU7
CisKKyAgICBUZXh0dXJlMkQgKm1UZXh0dXJlMkRaZXJvOworICAgIFRleHR1cmVDdWJlTWFwICpt
VGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgQ29sb3JidWZmZXIgKm1Db2xvcmJ1ZmZlclplcm87
CisgICAgRGVwdGhidWZmZXIgKm1EZXB0aGJ1ZmZlclplcm87CisgICAgU3RlbmNpbGJ1ZmZlciAq
bVN0ZW5jaWxidWZmZXJaZXJvOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEJ1ZmZl
cio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKKworICAgIHR5cGVkZWYg
c3RkOjptYXA8R0x1aW50LCBTaGFkZXIqPiBTaGFkZXJNYXA7CisgICAgU2hhZGVyTWFwIG1TaGFk
ZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1N
YXA7CisgICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8
R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKKyAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFw
OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZm
ZXJNYXA7CisgICAgRnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOworCisgICAgdHlwZWRl
ZiBzdGQ6Om1hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKKyAgICBS
ZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKKworICAgIHZvaWQgaW5pdEV4dGVuc2lv
blN0cmluZygpOworICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7CisKKyAgICBCdWZm
ZXJCYWNrRW5kICptQnVmZmVyQmFja0VuZDsKKyAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRl
eERhdGFNYW5hZ2VyOworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOwor
CisgICAgQmxpdCAqbUJsaXQ7CisKKyAgICBUZXh0dXJlICptSW5jb21wbGV0ZVRleHR1cmVzW1NB
TVBMRVJfVFlQRV9DT1VOVF07CisKKyAgICAvLyBSZWNvcmRlZCBlcnJvcnMKKyAgICBib29sIG1J
bnZhbGlkRW51bTsKKyAgICBib29sIG1JbnZhbGlkVmFsdWU7CisgICAgYm9vbCBtSW52YWxpZE9w
ZXJhdGlvbjsKKyAgICBib29sIG1PdXRPZk1lbW9yeTsKKyAgICBib29sIG1JbnZhbGlkRnJhbWVi
dWZmZXJPcGVyYXRpb247CisKKyAgICBib29sIG1IYXNCZWVuQ3VycmVudDsKKworICAgIHVuc2ln
bmVkIGludCBtQXBwbGllZFByb2dyYW07CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVy
VGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFs
OworCisgICAgY29uc3QgY2hhciAqbVBzUHJvZmlsZTsKKyAgICBjb25zdCBjaGFyICptVnNQcm9m
aWxlOworCisgICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncworICAgIGJvb2wgbUNsZWFyU3RhdGVE
aXJ0eTsKKyAgICBib29sIG1DdWxsU3RhdGVEaXJ0eTsKKyAgICBib29sIG1EZXB0aFN0YXRlRGly
dHk7CisgICAgYm9vbCBtTWFza1N0YXRlRGlydHk7CisgICAgYm9vbCBtUGl4ZWxQYWNraW5nU3Rh
dGVEaXJ0eTsKKyAgICBib29sIG1CbGVuZFN0YXRlRGlydHk7CisgICAgYm9vbCBtU3RlbmNpbFN0
YXRlRGlydHk7CisgICAgYm9vbCBtUG9seWdvbk9mZnNldFN0YXRlRGlydHk7CisgICAgYm9vbCBt
U2Npc3NvclN0YXRlRGlydHk7CisgICAgYm9vbCBtU2FtcGxlU3RhdGVEaXJ0eTsKKyAgICBib29s
IG1Gcm9udEZhY2VEaXJ0eTsKKyAgICBib29sIG1EaXRoZXJTdGF0ZURpcnR5OworCisgICAgSURp
cmVjdDNEU3RhdGVCbG9jazkgKm1NYXNrZWRDbGVhclNhdmVkU3RhdGU7CisKKyAgICBEM0RDQVBT
OSBtRGV2aWNlQ2FwczsKK307Cit9CisKK2V4dGVybiAiQyIKK3sKKy8vIEV4cG9ydGVkIGZ1bmN0
aW9ucyBmb3IgdXNlIGJ5IEVHTAorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlnKTsKK3ZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAq
Y29udGV4dCk7Cit2b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6
RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKK2dsOjpDb250ZXh0ICpn
bEdldEN1cnJlbnRDb250ZXh0KCk7CitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKTsK
K30KKworI2VuZGlmICAgLy8gSU5DTFVERV9DT05URVhUX0hfCkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJh
bWVidWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwNSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gRnJhbWVidWZmZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RnJhbWVidWZm
ZXIgY2xhc3MuIEltcGxlbWVudHMgR0wgZnJhbWVidWZmZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA1
LgorCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKworbmFtZXNwYWNlIGdsCit7CitGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQoreworICAg
IG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7
CisKKyAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtRGVwdGhidWZmZXJIYW5k
bGUgPSAwOworCisgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtU3RlbmNp
bGJ1ZmZlckhhbmRsZSA9IDA7Cit9CisKK0ZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQorewor
fQorCit2b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IGNvbG9yYnVmZmVyKQoreworICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSB0eXBlOworICAgIG1Db2xv
cmJ1ZmZlckhhbmRsZSA9IGNvbG9yYnVmZmVyOworfQorCit2b2lkIEZyYW1lYnVmZmVyOjpzZXRE
ZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQoreworICAgIG1EZXB0
aGJ1ZmZlclR5cGUgPSB0eXBlOworICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IGRlcHRoYnVmZmVy
OworfQorCit2b2lkIEZyYW1lYnVmZmVyOjpzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBH
THVpbnQgc3RlbmNpbGJ1ZmZlcikKK3sKKyAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSB0eXBlOwor
ICAgIG1TdGVuY2lsYnVmZmVySGFuZGxlID0gc3RlbmNpbGJ1ZmZlcjsKK30KKwordm9pZCBGcmFt
ZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAobUNvbG9y
YnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5
cGUpKQorICAgIHsKKyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAg
IG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZlckhh
bmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKKyAg
ICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtRGVwdGhi
dWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9
PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgIHsK
KyAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbVN0ZW5jaWxi
dWZmZXJIYW5kbGUgPSAwOworICAgIH0KK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKG1Db2xvcmJ1ZmZlckhh
bmRsZSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgeworICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAg
bUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVySGFu
ZGxlID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBt
RGVwdGhidWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlckhh
bmRsZSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJV
RkZFUikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAg
ICAgIG1TdGVuY2lsYnVmZmVySGFuZGxlID0gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBG
cmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCkKK3sKKyAgICBSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBjb2xvcmJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0
UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29s
b3JidWZmZXIoKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5V
TEw7Cit9CisKK3Vuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwo
KQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBE
ZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhi
dWZmZXJIYW5kbGUpOworCisgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQorewor
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBEZXB0aGJ1
ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJI
YW5kbGUpOworCisgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
cHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKworQ29sb3JidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlcigpCit7CisgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIENvbG9yYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IE5VTEw7CisKKyAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9O
T05FKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgY29sb3JidWZmZXIg
PSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICB7CisgICAgICAgIGNvbG9yYnVmZmVyID0gY29udGV4dC0+Z2V0Q29sb3Ji
dWZmZXIobUNvbG9yYnVmZmVySGFuZGxlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKG1Db2xvcmJ1ZmZlckhhbmRsZSkt
PmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlclR5cGUpOworICAgIH0KKworICAgIGlmIChjb2xv
cmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbG9yYnVmZmVyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitEZXB0
aGJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVm
ZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAg
IGlmIChkZXB0aGJ1ZmZlciAmJiBkZXB0aGJ1ZmZlci0+aXNEZXB0aGJ1ZmZlcigpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOwor
fQorCitTdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCit7Cisg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIFN0ZW5jaWxi
dWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBjb250ZXh0LT5nZXRTdGVuY2lsYnVmZmVyKG1TdGVuY2ls
YnVmZmVySGFuZGxlKTsKKworICAgIGlmIChzdGVuY2lsYnVmZmVyICYmIHN0ZW5jaWxidWZmZXIt
PmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXI7
CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0
Q29sb3JidWZmZXJUeXBlKCkKK3sKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKK30KKwor
R0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKQoreworICAgIHJldHVybiBt
RGVwdGhidWZmZXJUeXBlOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZm
ZXJUeXBlKCkKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOworfQorCitHTHVpbnQg
RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKCkKK3sKKyAgICByZXR1cm4gbUNvbG9y
YnVmZmVySGFuZGxlOworfQorCitHTHVpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFu
ZGxlKCkKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVySGFuZGxlOworfQorCitHTHVpbnQgRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVybiBtU3RlbmNp
bGJ1ZmZlckhhbmRsZTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQor
eworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgIGlu
dCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBpZiAobUNvbG9yYnVmZmVy
VHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVy
ID0gZ2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpID09
IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
IH0KKworICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICBo
ZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgfQorCisgICAgaWYgKG1EZXB0
aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIERlcHRoYnVmZmVyICpkZXB0
aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisK
KyAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRlcHRoYnVmZmVyLT5nZXRI
ZWlnaHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRo
ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdp
ZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRo
KCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkK
KyAgICB7CisgICAgICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBjb250ZXh0LT5n
ZXRTdGVuY2lsYnVmZmVyKG1TdGVuY2lsYnVmZmVySGFuZGxlKTsKKworICAgICAgICBpZiAoIXN0
ZW5jaWxidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RlbmNp
bGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOwor
ICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8
fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Cit9Cit9
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBGcmFtZWJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6
RnJhbWVidWZmZXIgY2xhc3MuIEltcGxlbWVudHMgR0wgZnJhbWVidWZmZXIKKy8vIG9iamVjdHMg
YW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40
IHBhZ2UgMTA1LgorCisjaWZuZGVmIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXworI2RlZmluZSBM
SUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBDb2xvcmJ1ZmZlcjsKK2NsYXNzIERl
cHRoYnVmZmVyOworY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKKworY2xhc3MgRnJhbWVidWZmZXIKK3sK
KyAgcHVibGljOgorICAgIEZyYW1lYnVmZmVyKCk7CisKKyAgICB+RnJhbWVidWZmZXIoKTsKKwor
ICAgIHZvaWQgc2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7
CisgICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVy
KTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2ls
YnVmZmVyKTsKKworICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CisgICAg
dm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmdldERlcHRoU3RlbmNpbCgpOworCisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbCgpOworICAgIHVuc2lnbmVkIGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOworCisgICAg
Q29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7CisgICAgRGVwdGhidWZmZXIgKmdldERlcHRo
YnVmZmVyKCk7CisgICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworCisgICAg
R0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5
cGUoKTsKKyAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKworICAgIEdMdWludCBn
ZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOworICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgp
OworICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisKKyAgICBHTGVudW0gY29t
cGxldGVuZXNzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RnJhbWVidWZmZXIpOworCisgICAgR0x1aW50IG1Db2xvcmJ1ZmZlckhhbmRsZTsKKyAgICBHTGVu
dW0gbUNvbG9yYnVmZmVyVHlwZTsKKworICAgIEdMdWludCBtRGVwdGhidWZmZXJIYW5kbGU7Cisg
ICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7CisKKyAgICBHTHVpbnQgbVN0ZW5jaWxidWZmZXJI
YW5kbGU7CisgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKK307Cit9CisKKyNlbmRpZiAg
IC8vIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNzYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFt
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJv
Z3JhbSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7Cit1bnNpZ25lZCBpbnQgUHJvZ3Jh
bTo6bUN1cnJlbnRTZXJpYWwgPSAxOworCitzdGQ6OnN0cmluZyBzdHIoaW50IGkpCit7CisgICAg
Y2hhciBidWZmZXJbMjBdOworICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1
cm4gYnVmZmVyOworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkgOiB0eXBlKHR5cGUpLCBuYW1l
KG5hbWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1U
eXBlU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJb
Ynl0ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOwor
ICAgIGhhbmRsZXNTZXQgPSBmYWxzZTsKK30KKworVW5pZm9ybTo6flVuaWZvcm0oKQoreworICAg
IGRlbGV0ZVtdIGRhdGE7Cit9CisKK1VuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KSAKKyAgICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4
KQoreworfQorCitQcm9ncmFtOjpQcm9ncmFtKCkKK3sKKyAgICBtRnJhZ21lbnRTaGFkZXIgPSBO
VUxMOworICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9
IE5VTEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxl
UFMgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworCisgICAgbUluZm9Mb2cg
PSBOVUxMOworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIHVubGluaygpOworCisgICAg
bURlbGV0ZVN0YXR1cyA9IGZhbHNlOworCisgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Cit9
CisKK1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmsodHJ1ZSk7CisKKyAgICBpZiAo
bVZlcnRleFNoYWRlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0
YWNoKCk7CisgICAgfQorCisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICB9Cit9CisKK2Jvb2wgUHJv
Z3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdl
dFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhT
aGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7CisgICAgICAg
IG1WZXJ0ZXhTaGFkZXItPmF0dGFjaCgpOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdl
dFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBpZiAobUZyYWdt
ZW50U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsK
KyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hdHRhY2goKTsKKyAgICB9CisgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6ZGV0YWNo
U2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBH
TF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hh
ZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9
IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdN
RU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICBtRnJhZ21lbnRTaGFkZXIg
PSBOVUxMOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICB1bmxpbmsoKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJz
Q291bnQoKSBjb25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArICht
RnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJv
Z3JhbTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwor
fQorCitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQor
eworICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKwordm9pZCBQcm9ncmFtOjpiaW5k
QXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAg
IGlmIChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgbUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsKKyAgICB9Cit9CisKK0dM
dWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQorewor
ICAgIGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0
U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgaWYgKGF0dHJpYnV0ZUlu
ZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgewor
ICAgICAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworICAgIH0KKwor
ICAgIHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUg
dW5pdCBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCByZWZl
cmVuY2VkIGluIHRoZSBjb21waWxlZCBITFNMIHNoYWRlcgorR0xpbnQgUHJvZ3JhbTo6Z2V0U2Ft
cGxlck1hcHBpbmcodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBhc3NlcnQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworCisg
ICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBpZiAobVNhbXBsZXJzW3Nh
bXBsZXJJbmRleF0uYWN0aXZlKQorICAgIHsKKyAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0g
bVNhbXBsZXJzW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAg
IGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICB7
CisgICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCitTYW1wbGVyVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVHlwZSh1bnNpZ25lZCBp
bnQgc2FtcGxlckluZGV4KQoreworICAgIGFzc2VydChzYW1wbGVySW5kZXggPCBzaXplb2YobVNh
bXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisgICAgYXNzZXJ0KG1TYW1wbGVyc1tzYW1w
bGVySW5kZXhdLmFjdGl2ZSk7CisKKyAgICByZXR1cm4gbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0u
dHlwZTsKK30KKworYm9vbCBQcm9ncmFtOjppc1NhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4KSBjb25zdAoreworICAgIGlmIChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSkKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxl
cnNbc2FtcGxlckluZGV4XS5kaXJ0eTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFByb2dyYW06OnNldFNhbXBsZXJEaXJ0eSh1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4LCBib29sIGRpcnR5KQoreworICAgIGlmIChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSkKKyAgICB7Cisg
ICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gZGlydHk7CisgICAgfQorICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0
aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgZGVjb3JhdGVkKQoreworICAgIHN0ZDo6c3RyaW5n
IG5hbWVTdHIobmFtZSk7CisgICAgaW50IHN1YnNjcmlwdCA9IDA7CisgICAgc2l6ZV90IGJlZ2lu
QiA9IG5hbWVTdHIuZmluZCgnWycpOworICAgIHNpemVfdCBlbmRCID0gbmFtZVN0ci5maW5kKCdd
Jyk7CisgICAgaWYgKGJlZ2luQiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBlbmRCICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3Vic2NyU3RyID0gbmFt
ZVN0ci5zdWJzdHIoYmVnaW5CICsgMSwgYmVnaW5CIC0gZW5kQiAtIDEpOworICAgICAgICBuYW1l
U3RyLmVyYXNlKGJlZ2luQik7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2koc3Vic2NyU3RyLmNf
c3RyKCkpOworICAgIH0KKworICAgIGlmICghZGVjb3JhdGVkKQorICAgIHsKKyAgICAgICAgbmFt
ZVN0ciA9IGRlY29yYXRlKG5hbWVTdHIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7Cisg
ICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWVTdHIgJiYKKyAg
ICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQp
LAorICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnRdOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFu
KSwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIHNpemVvZihHTGJvb2xlYW4pICogY291bnQp
OworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAg
ICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAyLAorICAgICAgICAgICAg
ICAgdiwgMiAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDJdOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9v
bGVhbikgKiAyLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMiAqIHNpemVvZihHTGJvb2xl
YW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAg
ICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZM
T0FUX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMywK
KyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICog
M107CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xib29sZWFuKSAqIDMsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCAzICogc2l6
ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
CisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xm
bG9hdCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50
KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xl
YW5bY291bnQgKiA0XTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogNCwKKyAgICAgICAgICAgICAgIGJvb2xQYXJh
bXMsIDQgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10g
Ym9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlm
b3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICB2
YWx1ZSwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9G
TE9BVF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIG1lbWNweSh0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihH
TGZsb2F0KSAqIDksCisgICAgICAgICAgIHZhbHVlLCA5ICogc2l6ZW9mKEdMZmxvYXQpICogY291
bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1h
dHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYsCisgICAgICAgICAgIHZhbHVl
LCAxNiAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQpCisgICAgeworICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisK
KyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihH
TGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3
IEdMYm9vbGVhbltjb3VudF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGJvb2xlYW4pLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgc2l6
ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDIsCisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQg
KiAyXTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGJvb2xlYW4pICogMiwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXpl
b2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICog
MywKKyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0K
KyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAq
IDNdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMYm9vbGVhbikgKiAzLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMyAqIHNpemVv
ZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0
LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsK
KyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICog
NF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xib29sZWFuKSAqIDQsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCA0ICogc2l6ZW9m
KEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9j
YXRpb24sIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICBzd2l0
Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
TE9BVDoKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudCAqIHNpemVvZihHTGZsb2F0KSwKKyAg
ICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQgKmludFBhcmFt
cyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlv
biwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlm
b3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICBzd2l0Y2ggKFVu
aWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfQk9PTDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1z
ID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGlu
dClib29sUGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICBtZW1j
cHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIGNvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIGNvdW50ICog
c2l6ZW9mKEdMaW50KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtOjpkaXJ0
eUFsbFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9y
bXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1V
bmlmb3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxTYW1wbGVycygpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTOyArK2luZGV4KQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzW2luZGV4XS5kaXJ0
eSA9IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZv
ciB0aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBQcm9n
cmFtOjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBt
VW5pZm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7
IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAo
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAhPSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgICAg
IGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICAgICAgICAgIEdMZmxvYXQg
KmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICpp
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xib29sZWFuICpi
ID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKworICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybTFidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlm
b3JtMmJ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm0zYnYobG9jYXRpb24sIGFycmF5U2l6
ZSwgYik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFw
cGx5VW5pZm9ybTRidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgYXBwbHlVbmlmb3JtMWZ2KGxvY2F0aW9uLCBh
cnJheVNpemUsIGYpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiBhcHBseVVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IGFwcGx5VW5pZm9ybTNmdihsb2Nh
dGlvbiwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDNDogYXBwbHlVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBhcHBseVVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6IGFwcGx5VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXlT
aXplLCBmKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5
U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAg
IGFwcGx5VW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KGxvY2F0aW9u
LCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRf
VkVDNDogICBhcHBseVVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUg
b2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEWEJ1
ZmZlciAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNo
YXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAg
aWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgSUQz
RFhCdWZmZXIgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRFhCdWZmZXIgKmVycm9yTWVzc2FnZSA9
IE5VTEw7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhDb21waWxlU2hhZGVyKGhsc2wsIChV
SU5UKXN0cmxlbihobHNsKSwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCAwLCAmYmluYXJ5
LCAmZXJyb3JNZXNzYWdlLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaW5hcnk7CisgICAgfQorCisgICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSUQzRFhC
dWZmZXIqKU5VTEwpOworICAgIH0KKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAg
ICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0
QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1lc3Nh
Z2UpOworICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4lcyIs
IG1lc3NhZ2UpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvLyBQYWNrcyB2YXJ5
aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0g
ZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBB
IHNlY3Rpb24gNyBwYWdlIDExMQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWlu
ZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCitpbnQgUHJvZ3JhbTo6cGFja1Zhcnlp
bmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKK3sKKyAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAg
ICB7CisgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZh
cnlpbmctPnNpemU7CisgICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5n
LT50eXBlKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG0g
PT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCByID0gMDsgciA8PSBNQVhfVkFSWUlOR19WRUNUT1JTIC0gbiAmJiAhc3VjY2VzczsgcisrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hd
ID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9
PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBNQVhfVkFS
WUlOR19WRUNUT1JTIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcnlpbmctPmNvbCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBNQVhfVkFSWUlOR19WRUNUT1JTOyB5KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8g
MCA6IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
bnQgY29sdW1uID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4Kysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID4gbiAmJiBzcGFj
ZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPiBuKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgcisrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVt
bl0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlp
bmctPnJlZyA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5
IDwgciArIG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFy
eWluZy0+Y29sID0gY29sdW1uOworCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsK
KworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0
dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsK
KworICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgcisrKQorICAg
IHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5n
W3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVy
cysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9v
bCBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKQoreworICAgIGlmIChtUGl4ZWxITFNMLmVtcHR5KCkg
fHwgbVZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRd
ID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7CisK
KyAgICBpZiAocmVnaXN0ZXJzIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAocmVnaXN0ZXJzID09IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgJiYgbUZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGFwcGVuZFRvSW5mb0xv
ZygiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciBpbnB1dCA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQg
IT0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKKyAgICB7CisgICAg
ICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0
ZXJhdG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAh
PSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRw
dXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBu
b3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0
cigpKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOworICAgICAg
ICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKKworICAgICAgICAgICAgICAgIG1h
dGNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAgICAgICB7CisgICAgICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRj
aCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0g
InN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50
IHNlbWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAh
PSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQy
ICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBtVmVydGV4SExTTCAr
PSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDog
bVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7
IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogbVZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0ZXhITFNMICs9IGRlY29yYXRlKGF0dHJpYnV0ZS0+
bmFtZSkgKyAiIDogVEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisKKyAg
ICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7
CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlv
biA6IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyBy
KyspCisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQg
OiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7CisKKyAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIg
KyBzdHIocikgKyAiIDogVEVYQ09PUkQiICsgc3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBtVmVy
dGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiBURVhDT09SRCIgKyBzdHIocmVn
aXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4o
VlNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3Ig
KEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
ZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICAi
ICsgZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7
CisgICAgICAgICAgICBtVmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiKTtcbiI7CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxm
UGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXpl
LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGds
X1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2
YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVy
dGV4U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYg
KHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
OworICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0
cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7
ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5n
W3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIi4iOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlp
bmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogbVZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG1W
ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBtVmVydGV4SExTTCArPSAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogbVZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5h
cnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVZl
cnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAi
XSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIn1cbiI7CisKKyAgICBtUGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAg
ICAgICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6IFRFWENPT1JEIiArIG4gKyAiO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQg
OiBURVhDT09SRCIgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKyAgICAgICAgCisg
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKKyAgICB9CisKKyAg
ICBtUGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgorICAg
ICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAg
ICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQor
ICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0
LmdsX0ZyYWdDb29yZC53O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfV2luZG93LnggKyBkeF9X
aW5kb3cuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
KGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1dpbmRvdy55ICsgZHhfV2luZG93Lnc7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisK
KyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8
fCAoZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAw
LjApKTtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWlu
ZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21l
bnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAo
dmFyeWluZy0+cmVnID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAq
IHJvd3MgKyBqKTsKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2
YXJ5aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAi
ID0gaW5wdXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBt
UGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgor
ICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQg
b3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICBUUkFDRSgiXG4lcyIsIG1QaXhlbEhMU0wuY19zdHIoKSk7CisgICAg
VFJBQ0UoIlxuJXMiLCBtVmVydGV4SExTTC5jX3N0cigpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRl
ciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5ncywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8g
YmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0
aW5nCisvLyBhIGxpc3Qgb2YgdW5pZm9ybXMKK3ZvaWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAg
dW5saW5rKCk7CisKKyAgICBpZiAoIW1GcmFnbWVudFNoYWRlciB8fCAhbUZyYWdtZW50U2hhZGVy
LT5pc0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtVmVydGV4U2hhZGVyIHx8ICFtVmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+Z2V0VmVydGV4
U2hhZGVyUHJvZmlsZSgpOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQt
PmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpOworCisgICAgbVBpeGVsSExTTCA9IG1GcmFnbWVudFNo
YWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gbVZlcnRleFNoYWRlci0+Z2V0SExT
TCgpOworCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBJRDNEWEJ1ZmZlciAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5
KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsK
KyAgICBJRDNEWEJ1ZmZlciAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExT
TC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlmICh2
ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVm
ZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOworICAgICAgICBIUkVTVUxUIHBpeGVs
UmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5H
ZXRCdWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVy
dGV4UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHBpeGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKwor
ICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJl
bGVhc2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5h
cnkgPSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVj
dXRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
dGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2Ug
Z2xfIGFuZCBkeF8KKyAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRv
IG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgorICAgICAgICAgICAgbURlcHRoUmFu
Z2VOZWFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UubmVhciIs
IHRydWUpOworICAgICAgICAgICAgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5mYXIiLCB0cnVlKTsKKyAgICAgICAgICAgIG1EZXB0aFJh
bmdlRGlmZkxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLmRpZmYi
LCB0cnVlKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0RlcHRoIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhXaW5kb3dMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfV2luZG93IiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUi
LCB0cnVlKTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImR4X0Zyb250Q0NXIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhQb2ludHNPckxpbmVz
TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiLCB0cnVlKTsK
KworICAgICAgICAgICAgbUxpbmtlZCA9IHRydWU7ICAgLy8gU3VjY2VzcworICAgICAgICB9Cisg
ICAgfQorfQorCisvLyBEZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRl
cyBhbmQgRGlyZWN0M0QgOSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3Jh
bTo6bGlua0F0dHJpYnV0ZXMoKQoreworICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0g
MDsKKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9u
CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlv
biA9IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAo
bG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBh
dHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0
cmlidXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9M
b2coIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZp
dCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRM
b2NhdGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5k
aW5nIGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAg
IGludCBsb2NhdGlvbiA9IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKwor
ICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJM
b2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291
bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFs
bG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRS
SUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJs
ZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICgl
cykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1M
aW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IG1WZXJ0
ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRl
eF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudCht
TGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9y
IChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlQmluZGlu
Zyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7
IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAg
ICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1
dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitib29s
IFByb2dyYW06OmxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUp
Cit7CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247
CisgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICBVSU5UIGRl
c2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3Rh
bnRUYWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5k
ZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50
czsgY29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhh
bmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOworICAg
ICAgICBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25z
dGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91
bmQgaW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVy
bnMgdHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wg
UHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwg
Y29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5n
IG5hbWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNE
WFJTX1NBTVBMRVIpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0g
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OworCisgICAgICAgIGFzc2VydChzYW1w
bGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisKKyAg
ICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbVNh
bXBsZXJzW3NhbXBsZXJJbmRleF0udHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0g
RDNEWFBUX1NBTVBMRVJDVUJFKSA/IFNBTVBMRVJfQ1VCRSA6IFNBTVBMRVJfMkQ7CisgICAgICAg
IG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAg
IG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0
Y2goY29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19T
VFJVQ1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0g
MDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1D
b25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisKKyAg
ICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAg
ICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisKKyAgICAgICAgICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2Ny
aXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRlZmlu
ZVVuaWZvcm0oZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUgKyAiLiIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1ND
QUxBUjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJ
WF9DT0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVm
aW5lVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlv
bi5OYW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
Jm5hbWUpCit7CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnRE
ZXNjcmlwdGlvbiwgbmFtZSk7CisKKyAgICBpZighdW5pZm9ybSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKKyAg
ICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbihuYW1lLmNfc3RyKCksIHRydWUp
OworICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+
PSAwKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisKKyAgICAgICAgaWYgKG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5p
Zm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24obmFtZSwgaSwgdW5pZm9ybUluZGV4
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW06OmNy
ZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24s
IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3Mg
PT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBU
X1NBTVBMRVIyRDoKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKKyAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIG5hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9CT09MLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBu
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBuYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfQk9PTF9WRUM0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIG5hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBuYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6
CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVQsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBuYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfRkxPQVRfVkVDMywgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQs
IG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50
RGVzY3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Sb3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9GTE9BVF9NQVQyLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFU
MywgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIG5hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0
cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW06OmRlY29yYXRlKGNvbnN0IHN0
ZDo6c3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMykgIT0gImds
XyIgJiYgc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBzdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBz
dHJpbmc7CisgICAgfQorfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtOjp1bmRlY29yYXRlKGNvbnN0
IHN0ZDo6c3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMSkgPT0g
Il8iKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorfQorCitib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTFidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xib29sZWFuICp2KQoreworICAgIEJPT0wgKnZlY3RvciA9IG5ldyBCT09MW2NvdW50XTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAo
dltpXSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgIHZlY3RvcltpXSA9IDA7CisgICAgICAgIGVs
c2UgCisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAxOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsK
KyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25z
dGFudFZTKTsKKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
CisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5T
ZXRCb29sQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisK
KyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNl
dEJvb2xBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKwor
ICAgIGRlbGV0ZSBbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtOjphcHBseVVuaWZvcm0yYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMYm9vbGVhbiAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNU
T1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7
CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdMX0ZBTFNFID8gMC4w
ZiA6IDEuMGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsxXSA9PSBHTF9G
QUxTRSA/IDAuMGYgOiAxLjBmKSwgMCwgMCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5E
TEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNv
bnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNv
dW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25z
dGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBj
b3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2J2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3Rv
ciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgodlswXSA9
PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHZbMV0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodlsyXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwgMCk7CisKKyAg
ICAgICAgdiArPSAzOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhh
bmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBT
KQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNl
LCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRW
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmlj
ZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVj
dG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jt
NGJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7
CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgodlswXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbMV0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4w
ZiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsyXSA9PSBHTF9GQUxTRSA/
IDAuMGYgOiAxLjBmKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzNdID09
IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRM
RSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29u
c3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3Rh
bnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291
bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNv
dW50KTsKKyAgICB9CisKKyAgICBkZWxldGUgW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRD
b25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChj
b25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0RmxvYXRBcnJh
eShkZXZpY2UsIGNvbnN0YW50UFMsIHYsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3Rh
bnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldEZsb2F0QXJyYXkoZGV2
aWNlLCBjb25zdGFudFZTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBu
ZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQodlswXSwgdlsxXSwg
MCwgMCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAg
RDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBn
ZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZT
KTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlm
IChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9y
QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBp
ZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3Rv
ckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAg
ZGVsZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6
YXBwbHlVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291
bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQodlswXSwgdlsxXSwgdlsyXSwgMCk7CisKKyAgICAg
ICAgdiArPSAzOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25z
dGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRs
ZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBj
b25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9y
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0
YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCAoRDNEWFZFQ1RPUjQq
KXYsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgKEQz
RFhWRUNUT1I0Kil2LCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RYTUFUUklYICptYXRyaXgg
PSBuZXcgRDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFUUklYKHZhbHVlWzBdLCB2
YWx1ZVsyXSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXSwg
dmFsdWVbM10sIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAg
IDAsICAgICAgICAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg
ICAwLCAgICAgICAgMCwgMSk7CisKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNv
bnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFu
dFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2
aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRh
YmxlUFMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0cml4
LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBt
Q29uc3RhbnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50
VlMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgRDNEWE1BVFJJWCAqbWF0cml4ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0g
RDNEWE1BVFJJWCh2YWx1ZVswXSwgdmFsdWVbM10sIHZhbHVlWzZdLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVs0XSwgdmFsdWVbN10sIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMl0sIHZhbHVlWzVdLCB2YWx1ZVs4XSwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDAs
ICAgICAgICAxKTsKKworICAgICAgICB2YWx1ZSArPSA5OworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRW
UzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZj
b25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+
U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50
KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFu
dFRhYmxlVlMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0
cml4LCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gbWF0cml4OworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RY
TUFUUklYICptYXRyaXggPSBuZXcgRDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFU
UklYKHZhbHVlWzBdLCB2YWx1ZVs0XSwgdmFsdWVbOF0sICB2YWx1ZVsxMl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0sIHZhbHVlWzVdLCB2YWx1ZVs5XSwgIHZhbHVl
WzEzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsyXSwgdmFsdWVbNl0s
IHZhbHVlWzEwXSwgdmFsdWVbMTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlWzNdLCB2YWx1ZVs3XSwgdmFsdWVbMTFdLCB2YWx1ZVsxNV0pOworCisgICAgICAgIHZhbHVl
ICs9IDE2OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFu
dFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXMo
dGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAg
IHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2
aWNlLCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3Rh
bnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldE1hdHJpeFRyYW5zcG9z
ZUFycmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisgICAg
ZGVsZXRlW10gbWF0cml4OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6
YXBwbHlVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKK3sKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAg
ICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVu
aWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAg
ICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247CisgICAgICAgIFVJTlQg
ZGVzY3JpcHRpb25Db3VudCA9IDE7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50UFMsICZjb25zdGFudERlc2NyaXB0aW9u
LCAmZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSBtQ29uc3RhbnRU
YWJsZVBTLT5HZXRTYW1wbGVySW5kZXgoY29uc3RhbnRQUyk7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXg7IHNhbXBsZXJJbmRleCA8IGZp
cnN0SW5kZXggKyBjb3VudDsgc2FtcGxlckluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgR0xpbnQgbWFwcGVkU2FtcGxlciA9IHZbMF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckluZGV4ID49IDAgJiYgc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNh
bXBsZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gbWFwcGVkU2FtcGxlcjsKKyAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGlydHkgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlUFMtPlNldEludEFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdiwg
Y291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+U2V0SW50QXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2LCBjb3VudCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sK
KyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3Rvcltp
XSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7CisKKyAgICAg
ICAgdiArPSAyOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25z
dGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRs
ZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBj
b25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9y
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBE
M0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQz
RFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOworCisg
ICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRI
YW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQ
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmlj
ZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50
VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZl
Y3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9y
bTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0g
PSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxv
YXQpdlszXSk7CisKKyAgICAgICAgdiArPSA0OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAg
ICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFu
dFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAg
IGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVj
dG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAg
ICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZl
Y3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisg
ICAgZGVsZXRlIFtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dy
YW06OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpZiAo
IWZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyIGluZm9b
MTAyNF07CisKKyAgICB2YV9saXN0IHZhcmFyZzsKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1h
dCk7CisgICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOwor
ICAgIHZhX2VuZCh2YXJhcmcpOworCisgICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5m
byk7CisKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcg
Y2hhcltpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShtSW5mb0xvZywgaW5mbyk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJsZW4o
bUluZm9Mb2cpOworICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hhcltsb2dMZW5ndGggKyBp
bmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShuZXdMb2csIG1JbmZvTG9nKTsKKyAgICAg
ICAgc3RyY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCwgaW5mbyk7CisKKyAgICAgICAgZGVsZXRlW10g
bUluZm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gbmV3TG9nOworICAgIH0KK30KKwordm9pZCBQ
cm9ncmFtOjpyZXNldEluZm9Mb2coKQoreworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBbXSBtSW5mb0xvZzsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIHByb2dy
YW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBhZnRlciBkZXRhY2hpbmcgYSBzaGFkZXIs
IGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxp
bmsoYm9vbCBkZXN0cm95KQoreworICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBk
ZXN0cnVjdGVkCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbUZy
YWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVmVydGV4U2hh
ZGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAg
ICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIH0KKworICAg
IGlmIChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxl
LT5SZWxlYXNlKCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB9CisK
KyAgICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxl
UFMtPlJlbGVhc2UoKTsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVZTLT5SZWxlYXNlKCk7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworICAgIH0K
KworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGlu
ZGV4KyspCisgICAgeworICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFy
KCk7CisgICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOworICAgIH0KKworICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgr
KykKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAg
ICAgIG1TYW1wbGVyc1tpbmRleF0uZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIHdoaWxlICgh
bVVuaWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2so
KTsKKyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgbURlcHRoUmFu
Z2VEaWZmTG9jYXRpb24gPSAtMTsKKyAgICBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbiA9IC0xOwor
ICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSAtMTsKKyAgICBtRHhEZXB0aExvY2F0aW9uID0g
LTE7CisgICAgbUR4V2luZG93TG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9j
YXRpb24gPSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRz
T3JMaW5lc0xvY2F0aW9uID0gLTE7CisKKyAgICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7CisKKyAg
ICBtUGl4ZWxITFNMLmNsZWFyKCk7CisgICAgbVZlcnRleEhMU0wuY2xlYXIoKTsKKworICAgIGRl
bGV0ZVtdIG1JbmZvTG9nOworICAgIG1JbmZvTG9nID0gTlVMTDsKKworICAgIG1MaW5rZWQgPSBm
YWxzZTsKK30KKworYm9vbCBQcm9ncmFtOjppc0xpbmtlZCgpCit7CisgICAgcmV0dXJuIG1MaW5r
ZWQ7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1
cm4gbVZhbGlkYXRlZDsKK30KKwordW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpp
c3N1ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CisKK2ludCBQ
cm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1JbmZvTG9nKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
cmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQoreworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1J
bmZvTG9nKSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xv
Z1tpbmRleF07CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAg
fQorCisgICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAg
ICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291
bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCit7CisgICAgaW50IHRvdGFsID0g
MDsKKworICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwg
bWF4Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRl
eFNoYWRlci0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbCsrOworICAg
IH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwg
PCBtYXhDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJh
Z21lbnRTaGFkZXItPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsK
KyAgICB9CisKKyAgICBpZiAoY291bnQpCisgICAgeworICAgICAgICAqY291bnQgPSB0b3RhbDsK
KyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspCisgICAgeworICAg
ICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBhdHRyaWJ1dGUrKzsKKworICAgICAgICAg
ICAgQVNTRVJUKGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUyk7ICAgLy8gaW5kZXggbXVz
dCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQorICAgICAgICB9Cisg
ICAgICAgIHdoaWxlIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKTsK
KyAgICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBjb25zdCBjaGFy
ICpzdHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOworCisg
ICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZz
aXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAq
c2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQorCisgICAgKnR5
cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKworR0xpbnQgUHJvZ3Jh
bTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAg
ICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2Vk
QXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9
CisKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7CisgICAg
aW50IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0
dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAg
IHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQp
KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4
TGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisK
K3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm0gPSAwOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKKyAgICB7CisgICAgICAgIGRvCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVuaWZvcm0rKzsKKworICAgICAgICAgICAgQVNTRVJUKHVuaWZvcm0g
PCBtVW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChtVW5pZm9ybXNb
dW5pZm9ybV0tPm5hbWUuc3Vic3RyKDAsIDMpID09ICJkeF8iKTsKKyAgICB9CisKKyAgICBpZiAo
YnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmRlY29y
YXRlKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZSk7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1
bmlmb3JtXS0+YXJyYXlTaXplICE9IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyAr
PSAiWzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3Ry
KCksIGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAg
ICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihu
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1d
LT5hcnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKK30K
KworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKK3sKKyAgICBpbnQgY291
bnQgPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgICAgICB7
CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNv
dW50OworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKK3sK
KyAgICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9
IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICAgICAg
eworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkodW5kZWNvcmF0ZShtVW5p
Zm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZSkubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3Jh
bTo6ZmxhZ0ZvckRlbGV0aW9uKCkKK3sKKyAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EZWxldGVTdGF0dXM7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQoreworICAgIHJl
c2V0SW5mb0xvZygpOworCisgICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICB7CisgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4i
KTsKKyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBhcHBseVVuaWZvcm1zKCk7CisgICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycygp
KQorICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNv
bmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdC4iKTsK
KyAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorfQorCitib29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoKSBjb25zdAoreworICAg
IC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVy
ZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVu
aXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFt
IHdpbGwgZmFpbCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwg
aXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorICAgIHN0ZDo6bWFwPGludCwgU2Ft
cGxlclR5cGU+IHNhbXBsZXJNYXA7IAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxl
cnNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2FtcGxlck1hcC5maW5k
KG1TYW1wbGVyc1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQpICE9IHNhbXBsZXJNYXAuZW5kKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1tpXS50eXBlICE9IHNh
bXBsZXJNYXBbbVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdF0pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYW1wbGVyTWFwW21TYW1wbGVyc1tpXS5sb2dp
Y2FsVGV4dHVyZVVuaXRdID0gbVNhbXBsZXJzW2ldLnR5cGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRD
b25zdGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgRDNEWEhBTkRMRSAqY29uc3Rh
bnRQUywgRDNEWEhBTkRMRSAqY29uc3RhbnRWUykKK3sKKyAgICBpZiAoIXRhcmdldFVuaWZvcm0t
PmhhbmRsZXNTZXQpCisgICAgeworICAgICAgICB0YXJnZXRVbmlmb3JtLT5wc0hhbmRsZSA9IG1D
b25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPm5hbWUu
Y19zdHIoKSk7CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnZzSGFuZGxlID0gbUNvbnN0YW50VGFi
bGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+bmFtZS5jX3N0cigpKTsK
KyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+aGFuZGxlc1NldCA9IHRydWU7CisgICAgfQorCisgICAg
KmNvbnN0YW50UFMgPSB0YXJnZXRVbmlmb3JtLT5wc0hhbmRsZTsKKyAgICAqY29uc3RhbnRWUyA9
IHRhcmdldFVuaWZvcm0tPnZzSGFuZGxlOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJh
bmdlRGlmZkxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoUmFuZ2VEaWZmTG9j
YXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbjsKK30KKworR0xpbnQg
UHJvZ3JhbTo6Z2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bURlcHRoUmFuZ2VGYXJMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aExv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xp
bnQgUHJvZ3JhbTo6Z2V0RHhXaW5kb3dMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
eFdpbmRvd0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVM
b2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsK
K30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQ
b2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb247Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjIzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMgdGhl
IGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4z
IHBhZ2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1BST0dSQU1fSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
U2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGds
Cit7CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2NsYXNzIFZlcnRleFNoYWRlcjsKKworLy8gSGVs
cGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KK3N0cnVjdCBV
bmlmb3JtCit7CisgICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGNv
bnN0IEdMZW51bSB0eXBlOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAg
Ym9vbCBkaXJ0eTsKKworICAgIEQzRFhIQU5ETEUgdnNIYW5kbGU7CisgICAgRDNEWEhBTkRMRSBw
c0hhbmRsZTsKKyAgICBib29sIGhhbmRsZXNTZXQ7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBmb3Ig
Y29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxl
cworc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRl
eCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50Owor
ICAgIHVuc2lnbmVkIGludCBpbmRleDsKK307CisKK2NsYXNzIFByb2dyYW0KK3sKKyAgcHVibGlj
OgorICAgIFByb2dyYW0oKTsKKworICAgIH5Qcm9ncmFtKCk7CisKKyAgICBib29sIGF0dGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcik7CisgICAgYm9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFk
ZXIpOworICAgIGludCBnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0OworCisgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRl
eFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9j
YXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICBHTHVpbnQgZ2V0QXR0
cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5k
ZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKKworICAgIHZvaWQgZGlydHlBbGxTYW1wbGVycygpOwor
CisgICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7
CisgICAgU2FtcGxlclR5cGUgZ2V0U2FtcGxlclR5cGUodW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCk7CisgICAgYm9vbCBpc1NhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KSBj
b25zdDsKKyAgICB2b2lkIHNldFNhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4
LCBib29sIGRpcnR5KTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihjb25zdCBjaGFy
ICpuYW1lLCBib29sIGRlY29yYXRlZCk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVu
aWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
OworICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm1N
YXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRy
aXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKKyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29s
IHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0ICpw
YXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAqcGFy
YW1zKTsKKworICAgIEdMaW50IGdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdDsKKyAg
ICBHTGludCBnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0
RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhXaW5kb3dMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0
RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhQb2ludHNPckxpbmVz
TG9jYXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOworICAgIHZv
aWQgYXBwbHlVbmlmb3JtcygpOworCisgICAgdm9pZCBsaW5rKCk7CisgICAgYm9vbCBpc0xpbmtl
ZCgpOworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZv
TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAg
ICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3Vu
dCwgR0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRl
Q291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAg
IHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwor
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgYm9v
bCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OworCisgICAgdm9pZCB2YWxpZGF0ZSgpOwor
ICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycygpIGNvbnN0OworICAgIGJvb2wgaXNWYWxpZGF0ZWQo
KSBjb25zdDsKKworICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKKworICAgIElEM0RY
QnVmZmVyICpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJv
ZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CisgICAgdm9pZCB1bmxp
bmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBW
YXJ5aW5nICpwYWNraW5nW11bNF0pOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7CisKKyAgICBi
b29sIGxpbmtBdHRyaWJ1dGVzKCk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFu
dFRhYmxlICpjb25zdGFudFRhYmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNE
WEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFu
dERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOworICAgIGJvb2wgZGVmaW5lVW5p
Zm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpz
dHJpbmcgJm5hbWUpOworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybTFidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xib29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJidihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9y
bTNidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybTRidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xib29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYp
OworICAgIGJvb2wgYXBwbHlVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgYXBwbHlV
bmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wg
YXBwbHlVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIHZvaWQgZ2V0Q29uc3RhbnRIYW5kbGVzKFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEQzRFhIQU5ETEUgKmNvbnN0YW50UFMsIEQzRFhIQU5ETEUg
KmNvbnN0YW50VlMpOworCisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5m
bywgLi4uKTsKKyAgICB2b2lkIHJlc2V0SW5mb0xvZygpOworCisgICAgc3RhdGljIHN0ZDo6c3Ry
aW5nIGRlY29yYXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZzdHJpbmcpOyAgICAgLy8gUHJlcGVuZCBh
biB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGUoY29uc3Qgc3Rk
OjpzdHJpbmcgJnN0cmluZyk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOworCisgICAgRnJhZ21lbnRTaGFkZXIg
Km1GcmFnbWVudFNoYWRlcjsKKyAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CisKKyAg
ICBzdGQ6OnN0cmluZyBtUGl4ZWxITFNMOworICAgIHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNMOwor
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJl
Y3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOworICAgIElEM0RYQ29uc3RhbnRU
YWJsZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFu
dFRhYmxlVlM7CisKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdb
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhf
VkVSVEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJ
QlNdOworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0aXZlOwor
ICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFNhbXBsZXJUeXBlIHR5
cGU7CisgICAgICAgIGJvb2wgZGlydHk7CisgICAgfTsKKworICAgIFNhbXBsZXIgbVNhbXBsZXJz
W01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5
cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5p
Zm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRGVwdGhSYW5nZURpZmZMb2Nh
dGlvbjsKKyAgICBHTGludCBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbjsKKyAgICBHTGludCBtRGVw
dGhSYW5nZUZhckxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247CisgICAgR0xp
bnQgbUR4V2luZG93TG9jYXRpb247CisgICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9u
OworICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CisgICAgR0xpbnQgbUR4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uOworCisgICAgYm9vbCBtTGlua2VkOworICAgIGJvb2wgbURlbGV0ZVN0YXR1
czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQg
d2hlbiBubyBsb25nZXIgaW4gdXNlCisgICAgY2hhciAqbUluZm9Mb2c7CisgICAgYm9vbCBtVmFs
aWRhdGVkOworCisgICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IG1DdXJyZW50U2VyaWFsOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1BS
T0dSQU1fSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzU1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJidWZmZXIu
Y3BwOiB0aGUgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3Nlcwor
Ly8gQ29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRz
IEdMIHJlbmRlcmJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3Vuc2ln
bmVkIGludCBSZW5kZXJidWZmZXI6Om1DdXJyZW50U2VyaWFsID0gMTsKKworUmVuZGVyYnVmZmVy
OjpSZW5kZXJidWZmZXIoKQoreworICAgIG1XaWR0aCA9IDA7CisgICAgbUhlaWdodCA9IDA7Cisg
ICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAvLyBkZWZhdWx0IGZvcm1hdCwgbmVlZHMgdG8gYmUgb25l
IG9mIHRoZSBleHBlY3RlZCByZW5kZXJidWZmZXIgZm9ybWF0cworICAgIG1TZXJpYWwgPSBpc3N1
ZVNlcmlhbCgpOworfQorCitSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQoreworfQorCiti
b29sIFJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlcmJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJl
bmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9
CisKK2ludCBSZW5kZXJidWZmZXI6OmdldFdpZHRoKCkKK3sKKyAgICByZXR1cm4gbVdpZHRoOwor
fQorCitpbnQgUmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKQoreworICAgIHJldHVybiBtSGVpZ2h0
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdodDsKK30KKworCitH
TGVudW0gUmVuZGVyYnVmZmVyOjpnZXRGb3JtYXQoKQoreworICAgIHJldHVybiBtRm9ybWF0Owor
fQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAg
IHJldHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjppc3N1ZVNl
cmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CisKK0NvbG9yYnVmZmVy
OjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KSA6IG1SZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAg
ICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOworCisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBk
ZXNjcmlwdGlvbjsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7
CisKKyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0
KTsKKyAgICB9CisKK30KKworQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZXMyZHg6
OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxT
RSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAg
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0g
Zm9ybWF0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRTaXplKDAsIDApOwor
ICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7CisgICAgfQorfQorCitDb2xvcmJ1ZmZlcjo6fkNv
bG9yYnVmZmVyKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29sb3JidWZmZXI6Omlz
Q29sb3JidWZmZXIoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitHTHVpbnQgQ29sb3JidWZm
ZXI6OmdldFJlZFNpemUoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRSZWRTaXpl
KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0dMdWlu
dCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkK
KyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJk
eDo6R2V0R3JlZW5TaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUoKQoreworICAgIGlmICht
UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9u
OworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgcmV0dXJuIGVzMmR4OjpHZXRCbHVlU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEFscGhhU2l6ZSgp
Cit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0
aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldEFscGhhU2l6ZShkZXNjcmlwdGlvbi5G
b3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAq
Q29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXQ7Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVw
dGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChkZXB0
aFN0ZW5jaWwpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworCisgICAg
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5H
ZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0
aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBP
TkVOVDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRo
ZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBm
b3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGds
UmVuZGVyYnVmZmVyU3RvcmFnZQorICAgIH0KK30KKworRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVy
KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQs
IEQzREZNVF9EMjRTOCwgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVu
Y2lsLCAwKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgc2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVO
VDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBj
YWxsaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3Ig
dXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRTaXpl
KDAsIDApOworICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vZGVmYXVsdCBmb3JtYXQKKyAg
ICB9Cit9CisKK0RlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQoreworICAgIGlmIChtRGVwdGhT
dGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0K
K30KKworYm9vbCBEZXB0aGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0dMdWludCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkKK3sKKyAgICBpZiAo
bURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlv
bjsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAg
ICAgIHJldHVybiBlczJkeDo6R2V0RGVwdGhTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aGJ1ZmZlcjo6
Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KKworU3Rl
bmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
KSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChkZXB0aFN0ZW5jaWwp
CisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworCisgICAgICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZk
ZXNjcmlwdGlvbik7CisKKyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3Jp
cHRpb24uSGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJ
ZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1
bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBl
Y3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQorICAgIH0KK30KKworU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0Uzgs
IEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7CisKKyAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIHNldFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJl
bmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBv
ZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1h
dCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0CisgICAgfQorfQorCitTdGVuY2lsYnVmZmVy
Ojp+U3RlbmNpbGJ1ZmZlcigpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAg
ICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitHTHVpbnQgU3RlbmNp
bGJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpH
ZXRTdGVuY2lsU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitib29sIFN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpTdGVuY2lsYnVmZmVyOjpnZXREZXB0
aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOworfQorfQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB2aXJ0dWFsIGds
OjpSZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkCisvLyBjbGFzc2VzIENvbG9yYnVm
ZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJi
dWZmZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRF
UkJVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCisKKyNkZWZpbmUg
R0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
UmVuZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJidWZmZXIoKTsKKworICAgIHZp
cnR1YWwgflJlbmRlcmJ1ZmZlcigpOworCisgICAgdmlydHVhbCBib29sIGlzQ29sb3JidWZmZXIo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOworICAgIHZpcnR1YWwgYm9vbCBp
c1N0ZW5jaWxidWZmZXIoKTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbCgpOworCisgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKTsKKyAgICB2aXJ0dWFsIGludCBn
ZXRIZWlnaHQoKTsKKyAgICBHTGVudW0gZ2V0Rm9ybWF0KCk7CisgICAgdW5zaWduZWQgaW50IGdl
dFNlcmlhbCgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgp
OworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOworCisg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKKworICAgIGludCBtV2lkdGg7
CisgICAgaW50IG1IZWlnaHQ7Cit9OworCitjbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5k
ZXJidWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOworICAgIENvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCk7CisKKyAgICB+Q29sb3JidWZmZXIoKTsKKworICAgIGJv
b2wgaXNDb2xvcmJ1ZmZlcigpOworCisgICAgR0x1aW50IGdldFJlZFNpemUoKTsKKyAgICBHTHVp
bnQgZ2V0R3JlZW5TaXplKCk7CisgICAgR0x1aW50IGdldEJsdWVTaXplKCk7CisgICAgR0x1aW50
IGdldEFscGhhU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdl
dCgpOworCisgIHByb3RlY3RlZDoKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdl
dDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1ZmZl
cik7Cit9OworCitjbGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKK3sKKyAg
cHVibGljOgorICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0
aFN0ZW5jaWwpOworICAgIERlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAg
ICB+RGVwdGhidWZmZXIoKTsKKworICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOworCisgICAgR0x1
aW50IGdldERlcHRoU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRo
YnVmZmVyKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKK307CisKK2Ns
YXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwp
OworICAgIFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIH5TdGVu
Y2lsYnVmZmVyKCk7CisKKyAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpOworCisgICAgR0x1aW50
IGdldFN0ZW5jaWxTaXplKCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVu
Y2lsKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RlbmNp
bGJ1ZmZlcik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Cit9OworfQor
CisjZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
U2hhZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzICBkZXJp
dmVkIGNsYXNzZXMKKy8vIFZlcnRleFNoYWRlciBhbmQgRnJhZ21lbnRTaGFkZXIuIEltcGxlbWVu
dHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQKKy8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQgc2VjdGlvbiAzLjggcGFnZSA4
NC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2luY2x1ZGUgPHN0cmluZz4K
KworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK3ZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwordm9pZCAqU2hhZGVy
OjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOworCitTaGFkZXI6OlNoYWRlcihDb250ZXh0ICpjb250
ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IG1IYW5kbGUoaGFuZGxlKSwgbUNvbnRleHQoY29udGV4dCkK
K3sKKyAgICBtU291cmNlID0gTlVMTDsKKyAgICBtSGxzbCA9IE5VTEw7CisgICAgbUluZm9Mb2cg
PSBOVUxMOworCisgICAgLy8gUGVyZm9ybSBhIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRo
ZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFmdGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNv
bXBpbGVyKQorICAgIGlmICghbUZyYWdtZW50Q29tcGlsZXIpCisgICAgeworICAgICAgICBpbnQg
cmVzdWx0ID0gU2hJbml0aWFsaXplKCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
eworICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmdGcmFnbWVudCwgRVNoU3BlY0dMRVMyKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxl
ciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3BlY0dMRVMyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1BdHRhY2hDb3VudCA9IDA7CisgICAgbURlbGV0ZVN0YXR1
cyA9IGZhbHNlOworfQorCitTaGFkZXI6On5TaGFkZXIoKQoreworICAgIGRlbGV0ZVtdIG1Tb3Vy
Y2U7CisgICAgZGVsZXRlW10gbUhsc2w7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7Cit9CisKK0dM
dWludCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IYW5kbGU7Cit9
CisKK3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0
cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3sKKyAgICBkZWxldGVbXSBtU291cmNlOworICAg
IGludCB0b3RhbExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgeworICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSBsZW5ndGhbaV07CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSAoaW50KXN0
cmxlbihzdHJpbmdbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgbVNvdXJjZSA9IG5ldyBj
aGFyW3RvdGFsTGVuZ3RoICsgMV07CisgICAgY2hhciAqY29kZSA9IG1Tb3VyY2U7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpbnQgc3RyaW5n
TGVuZ3RoOworCisgICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IGxlbmd0aFtpXTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IChpbnQpc3Ry
bGVuKHN0cmluZ1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KGNvZGUsIHN0cmlu
Z1tpXSwgc3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgY29kZSArPSBzdHJpbmdMZW5ndGg7CisgICAg
fQorCisgICAgbVNvdXJjZVt0b3RhbExlbmd0aF0gPSAnXDAnOworfQorCitpbnQgU2hhZGVyOjpn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgcmV0dXJuIHN0
cmxlbihtSW5mb0xvZykgKyAxOworICAgIH0KK30KKwordm9pZCBTaGFkZXI6OmdldEluZm9Mb2co
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAg
aW50IGluZGV4ID0gMDsKKworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHdoaWxl
IChpbmRleCA8IGJ1ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obUluZm9Mb2cpKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nW2luZGV4XSA9IG1JbmZvTG9nW2luZGV4XTsK
KyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmU2l6
ZSkKKyAgICB7CisgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBp
ZiAobGVuZ3RoKQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKwor
aW50IFNoYWRlcjo6Z2V0U291cmNlTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1Tb3VyY2Up
CisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICByZXR1cm4gc3RybGVuKG1Tb3VyY2UpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpn
ZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKnNvdXJjZSkK
K3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKG1Tb3VyY2UpCisgICAgeworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1Tb3Vy
Y2UpKQorICAgICAgICB7CisgICAgICAgICAgICBzb3VyY2VbaW5kZXhdID0gbVNvdXJjZVtpbmRl
eF07CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1
ZlNpemUpCisgICAgeworICAgICAgICBzb3VyY2VbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAg
ICBpZiAobGVuZ3RoKQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30K
KworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQoreworICAgIHJldHVybiBtSGxzbCAhPSBOVUxM
OworfQorCitjb25zdCBjaGFyICpTaGFkZXI6OmdldEhMU0woKQoreworICAgIHJldHVybiBtSGxz
bDsKK30KKwordm9pZCBTaGFkZXI6OmF0dGFjaCgpCit7CisgICAgbUF0dGFjaENvdW50Kys7Cit9
CisKK3ZvaWQgU2hhZGVyOjpkZXRhY2goKQoreworICAgIG1BdHRhY2hDb3VudC0tOworCisgICAg
aWYgKG1BdHRhY2hDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCisgICAgeworICAgICAgICBt
Q29udGV4dC0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOworICAgIH0KK30KKworYm9vbCBTaGFkZXI6
OmlzQXR0YWNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtQXR0YWNoQ291bnQgPiAwOworfQor
Citib29sIFNoYWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtRGVsZXRlU3RhdHVzOworfQorCit2b2lkIFNoYWRlcjo6ZmxhZ0ZvckRlbGV0aW9uKCkKK3sK
KyAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKK30KKwordm9pZCBTaGFkZXI6OnJlbGVhc2VDb21w
aWxlcigpCit7CisgICAgU2hEZXN0cnVjdChtRnJhZ21lbnRDb21waWxlcik7CisgICAgU2hEZXN0
cnVjdChtVmVydGV4Q29tcGlsZXIpOworCisgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwor
ICAgIG1WZXJ0ZXhDb21waWxlciA9IE5VTEw7CisKKyAgICBTaEZpbmFsaXplKCk7Cit9CisKK3Zv
aWQgU2hhZGVyOjpwYXJzZVZhcnlpbmdzKCkKK3sKKyAgICBpZiAobUhsc2wpCisgICAgeworICAg
ICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAx
MjsKKworICAgICAgICB3aGlsZSh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHZh
cnlpbmdUeXBlWzI1Nl07CisgICAgICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07CisKKyAg
ICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICVzICVzIiwgdmFy
eWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKKworICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7CisgICAg
ICAgICAgICBpbnQgc2l6ZSA9IDE7CisKKyAgICAgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOworICAgICAgICAg
ICAgICAgICphcnJheSA9ICdcMCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhcnlp
bmdzLnB1c2hfYmFjayhWYXJ5aW5nKHBhcnNlVHlwZSh2YXJ5aW5nVHlwZSksIHZhcnlpbmdOYW1l
LCBzaXplLCBhcnJheSAhPSBOVUxMKSk7CisKKyAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlu
cHV0LCAiOyIpICsgMjsKKyAgICAgICAgfQorCisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ry
c3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPT1JEIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNG
cm9udEZhY2luZyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVM
TDsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVy
KQoreworICAgIGlmIChpc0NvbXBpbGVkKCkgfHwgIW1Tb3VyY2UpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVFJBQ0UoIlxuJXMiLCBtU291cmNlKTsKKworICAgIGRlbGV0
ZVtdIG1JbmZvTG9nOworICAgIG1JbmZvTG9nID0gTlVMTDsKKworICAgIFRCdWlsdEluUmVzb3Vy
Y2UgcmVzb3VyY2VzOworCisgICAgcmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPSBNQVhfVkVS
VEVYX0FUVFJJQlM7CisgICAgcmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3Jz
ID0gTUFYX1ZBUllJTkdfVkVDVE9SUzsKKyAgICByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMgPSBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAgcmVzb3VyY2Vz
Lm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzsKKyAgICByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUzsKKyAgICByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9
IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heERyYXdCdWZm
ZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKKworICAgIGludCByZXN1bHQgPSBTaENvbXBpbGUoY29t
cGlsZXIsICZtU291cmNlLCAxLCBFU2hPcHROb25lLCAmcmVzb3VyY2VzLCBFRGVidWdPcE5vbmUp
OworICAgIGNvbnN0IGNoYXIgKm9iaiA9IFNoR2V0T2JqZWN0Q29kZShjb21waWxlcik7CisgICAg
Y29uc3QgY2hhciAqaW5mbyA9IFNoR2V0SW5mb0xvZyhjb21waWxlcik7CisKKyAgICBpZiAocmVz
dWx0KQorICAgIHsKKyAgICAgICAgbUhsc2wgPSBuZXcgY2hhcltzdHJsZW4ob2JqKSArIDFdOwor
ICAgICAgICBzdHJjcHkobUhsc2wsIG9iaik7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSGxz
bCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJb
c3RybGVuKGluZm8pICsgMV07CisgICAgICAgIHN0cmNweShtSW5mb0xvZywgaW5mbyk7CisKKyAg
ICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgfQorfQorCitHTGVudW0gU2hhZGVy
OjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0g
ImZsb2F0IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICB9CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAiZmxvYXQyIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9W
RUMyOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZs
b2F0NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKKyAgICB9CisgICAg
ZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZM
T0FUX01BVDI7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikKKyAgICB7
CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBl
ID09ICJmbG9hdDR4NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAg
ICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIEdMX05PTkU7Cit9CisK
Ky8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRo
YW4geQorYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0
IFZhcnlpbmcgJnkpCit7CisgICAgaWYoeC50eXBlID09IHkudHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB4LnNpemUgPiB5LnNpemU7CisgICAgfQorCisgICAgc3dpdGNoICh4LnR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAg
IHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVy
biB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
cmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZh
bHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOworICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAgIHN3aXRj
aCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVy
biBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0
cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZXJ0ZXhTaGFkZXI6OlZl
cnRleFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihjb250
ZXh0LCBoYW5kbGUpCit7Cit9CisKK1ZlcnRleFNoYWRlcjo6flZlcnRleFNoYWRlcigpCit7Cit9
CisKK0dMZW51bSBWZXJ0ZXhTaGFkZXI6OmdldFR5cGUoKQoreworICAgIHJldHVybiBHTF9WRVJU
RVhfU0hBREVSOworfQorCit2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCit7CisgICAgY29t
cGlsZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOworICAgIHBhcnNlQXR0cmlidXRlcygpOworICAg
IHBhcnNlVmFyeWluZ3MoKTsKK30KKworaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRl
eChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoIWF0dHJpYnV0
ZU5hbWUuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAg
ICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRyaWJ1dGVO
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpY0luZGV4
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxl
Um93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKwordm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCit7CisgICAg
aWYgKG1IbHNsKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhs
c2wsICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKKworICAgICAgICB3aGlsZSh0cnVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKKyAgICAgICAgICAgIGNo
YXIgYXR0cmlidXRlTmFtZVsyNTZdOworCisgICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2Fu
ZihpbnB1dCwgInN0YXRpYyAlcyBfJXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsK
KworICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUF0dHJpYnV0ZXMu
cHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5h
bWUpKTsKKworICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOworICAg
ICAgICB9CisgICAgfQorfQorCitGcmFnbWVudFNoYWRlcjo6RnJhZ21lbnRTaGFkZXIoQ29udGV4
dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIoY29udGV4dCwgaGFuZGxlKQorewor
fQorCitGcmFnbWVudFNoYWRlcjo6fkZyYWdtZW50U2hhZGVyKCkKK3sKK30KKworR0xlbnVtIEZy
YWdtZW50U2hhZGVyOjpnZXRUeXBlKCkKK3sKKyAgICByZXR1cm4gR0xfRlJBR01FTlRfU0hBREVS
OworfQorCit2b2lkIEZyYWdtZW50U2hhZGVyOjpjb21waWxlKCkKK3sKKyAgICBjb21waWxlVG9I
TFNMKG1GcmFnbWVudENvbXBpbGVyKTsKKyAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgdmFyeWlu
Z3Muc29ydChjb21wYXJlVmFyeWluZyk7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2hhZGVyLmg6IERlZmlu
ZXMgdGhlIGFic3RyYWN0IGdsOjpTaGFkZXIgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVk
CisvLyBjbGFzc2VzIFZlcnRleFNoYWRlciBhbmQgRnJhZ21lbnRTaGFkZXIuIEltcGxlbWVudHMg
R0wgc2hhZGVyIG9iamVjdHMgYW5kCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQgc2VjdGlvbgorLy8gMy44IHBhZ2Ug
ODQuCisKKyNpZm5kZWYgTElCR0xFU1YyX1NIQURFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfU0hB
REVSX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2lu
Y2x1ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBW
YXJ5aW5nCit7CisgICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIGludCBzaXplLCBib29sIGFycmF5KQorICAgICAgICA6IHR5cGUodHlwZSksIG5hbWUobmFt
ZSksIHNpemUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwgY29sKC0xKQorICAgIHsKKyAg
ICB9CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIGludCBz
aXplOyAgIC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKKyAgICBib29sIGFycmF5OworCisg
ICAgaW50IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3RlciwgYXNzaWduZWQgZHVyaW5n
IGxpbmsKKyAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50LCBhc3NpZ25l
ZCBkdXJpbmcgbGluaworfTsKKwordHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xp
c3Q7CisKK2NsYXNzIFNoYWRlcgoreworICAgIGZyaWVuZCBQcm9ncmFtOworCisgIHB1YmxpYzoK
KyAgICBTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB2aXJ0
dWFsIH5TaGFkZXIoKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSA9IDA7CisgICAg
R0x1aW50IGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgdm9pZCBkZWxldGVTb3VyY2UoKTsKKyAg
ICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25z
dCBHTGludCAqbGVuZ3RoKTsKKyAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OworICAg
IHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAq
aW5mb0xvZyk7CisgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0
U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpzb3VyY2UpOwor
CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7CisgICAgYm9vbCBpc0NvbXBpbGVkKCk7
CisgICAgY29uc3QgY2hhciAqZ2V0SExTTCgpOworCisgICAgdm9pZCBhdHRhY2goKTsKKyAgICB2
b2lkIGRldGFjaCgpOworICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNvbnN0OworICAgIGJvb2wgaXNG
bGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwor
CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7CisKKyAgcHJvdGVjdGVkOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXIpOworCisgICAgdm9pZCBwYXJzZVZhcnlp
bmdzKCk7CisKKyAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOworCisgICAg
c3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOworICAgIHN0
YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcg
JnkpOworCisgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CisgICAgaW50IG1BdHRhY2hDb3VudDsg
ICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQg
dG8KKyAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCisKKyAgICBjaGFy
ICptU291cmNlOworICAgIGNoYXIgKm1IbHNsOworICAgIGNoYXIgKm1JbmZvTG9nOworCisgICAg
VmFyeWluZ0xpc3QgdmFyeWluZ3M7CisKKyAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJv
b2wgbVVzZXNGcm9udEZhY2luZzsKKworICAgIENvbnRleHQgKm1Db250ZXh0OworCisgICAgc3Rh
dGljIHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOworICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29t
cGlsZXI7Cit9OworCitzdHJ1Y3QgQXR0cmlidXRlCit7CisgICAgQXR0cmlidXRlKCkgOiB0eXBl
KEdMX05PTkUpLCBuYW1lKCIiKQorICAgIHsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUoR0xlbnVt
IHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkK
KyAgICB7CisgICAgfQorCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsK
K307CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKKwor
Y2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICAgIGZyaWVuZCBQcm9ncmFt
OworCisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50
IGhhbmRsZSk7CisKKyAgICB+VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTGVudW0gZ2V0VHlwZSgp
OworICAgIHZvaWQgY29tcGlsZSgpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0
ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOworCisgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZXMo
KTsKKworICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworfTsKKworY2xhc3MgRnJhZ21l
bnRTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCit7CisgIHB1YmxpYzoKKyAgICBGcmFnbWVudFNoYWRl
cihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKworICAgIH5GcmFnbWVudFNoYWRl
cigpOworCisgICAgR0xlbnVtIGdldFR5cGUoKTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7Cit9
OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfU0hBREVSX0hfCkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIFRleHR1cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRz
IGRlcml2ZWQgY2xhc3NlcworLy8gVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVt
ZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kIHJlbGF0ZWQKKy8vIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgorCisjaW5jbHVkZSAibGliR0xF
U3YyL1RleHR1cmUuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0JsaXQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1RleHR1cmU6Oklt
YWdlOjpJbWFnZSgpCisgIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHkoZmFsc2UpLCBzdXJm
YWNlKE5VTEwpCit7Cit9CisKK1RleHR1cmU6OkltYWdlOjp+SW1hZ2UoKQoreworICBpZiAoc3Vy
ZmFjZSkgc3VyZmFjZS0+UmVsZWFzZSgpOworfQorCitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHQg
KmNvbnRleHQpIDogbUNvbnRleHQoY29udGV4dCkKK3sKKyAgICBtTWluRmlsdGVyID0gR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSOworICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7CisgICAgbVdy
YXBTID0gR0xfUkVQRUFUOworICAgIG1XcmFwVCA9IEdMX1JFUEVBVDsKKworICAgIG1EaXJ0eU1l
dGFEYXRhID0gdHJ1ZTsKKyAgICBtRGlydHkgPSB0cnVlOworICAgIG1Jc1JlbmRlcmFibGUgPSBm
YWxzZTsKKyAgICBtQmFzZVRleHR1cmUgPSBOVUxMOworfQorCitUZXh0dXJlOjp+VGV4dHVyZSgp
Cit7Cit9CisKK0JsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQoreworICAgIHJldHVybiBtQ29u
dGV4dC0+Z2V0QmxpdHRlcigpOworfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBm
aWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6
c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit7CisgICAgc3dpdGNoIChmaWx0ZXIpCisgICAg
eworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICBj
YXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1N
aW5GaWx0ZXIgPSBmaWx0ZXI7CisgICAgICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikK
K2Jvb2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit7CisgICAgc3dpdGNo
IChmaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9M
SU5FQVI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOworICAg
ICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0
ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhH
TGVudW0gd3JhcCkKK3sKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9S
RVBFQVQ6CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6CisgICAgICBjYXNlIEdMX01JUlJP
UkVEX1JFUEVBVDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7CisgICAgICAgICAg
ICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0
ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3
cmFwKQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JFUEVBVDoK
KyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQ
RUFUOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKKyAgICAgICAgICAgICAgICBt
RGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK0dMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
TWluRmlsdGVyOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0TWFnRmlsdGVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbU1hZ0ZpbHRlcjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFdyYXBTKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVdyYXBTOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0V3Jh
cFQoKSBjb25zdAoreworICAgIHJldHVybiBtV3JhcFQ7Cit9CisKK0dMdWludCBUZXh0dXJlOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworR0x1aW50IFRleHR1
cmU6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKKy8vIFNl
bGVjdHMgYW4gaW50ZXJuYWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1hZ2UK
K0QzREZPUk1BVCBUZXh0dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gRDNERk1UX0E4UjhHOEI4OworfQorCitpbnQgVGV4dHVyZTo6aW1hZ2VQaXRjaChjb25z
dCBJbWFnZSAmaW1nKSBjb25zdAoreworICAgIHJldHVybiBpbWcud2lkdGggKiA0OworfQorCisv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
Ky8vIGludG8gdGhlIEJHUkE4IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQ
aXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KK3ZvaWQgVGV4dHVyZTo6bG9hZEltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSBpbnB1dFBp
dGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7
CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlMTYgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c291cmNlKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNl
dCAqIDQ7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHI7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGc7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7CisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgICAgICAgIGEgPSBzb3VyY2Vb
eF07CisgICAgICAgICAgICAgICAgciA9IDA7CisgICAgICAgICAgICAgICAgZyA9IDA7CisgICAg
ICAgICAgICAgICAgYiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4XTsKKyAg
ICAgICAgICAgICAgICBnID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIGIgPSBzb3VyY2Vb
eF07CisgICAgICAgICAgICAgICAgYSA9IDB4RkY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAgICAg
ciA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICAgICAgZyA9IHNvdXJjZVsyKngrMF07Cisg
ICAgICAgICAgICAgICAgYiA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICAgICAgYSA9IHNv
dXJjZVsyKngrMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAg
ICAgICAgICAgciA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAgICAgICAgICAgICAgICBnID0g
c291cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDMg
KyAyXTsKKyAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGEg
PSAweEZGOworICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDAxRikgPDwg
MykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgZyA9
ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEY4MDApID4+IDEzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAg
ICAgICAgICAgICAgIHIgPSBzb3VyY2VbeCAqIDQgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAg
ZyA9IHNvdXJjZVt4ICogNCArIDFdOworICAgICAgICAgICAgICAgICAgICBiID0gc291cmNlW3gg
KiA0ICsgMl07CisgICAgICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbeCAqIDQgKyAzXTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBhID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4
MDAwRikgPj4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMEYw
KSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBnID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgYSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgYiA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMp
OworICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAo
KHJnYmEgJiAweDA3QzApID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgocmdi
YSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IGI7CisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBnOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gcjsK
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IGE7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3Vy
ZmFjZSA9IE5VTEw7CisKKyAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCkKKyAgICB7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZU9mZnNjcmVlblBs
YWluU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBzZWxlY3RGb3JtYXQoZm9ybWF0KSwgRDNEUE9PTF9T
WVNURU1NRU0sICZuZXdTdXJmYWNlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGltZy0+c3VyZmFjZSkgaW1nLT5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgaW1nLT5zdXJmYWNl
ID0gbmV3U3VyZmFjZTsKKworICAgIGltZy0+d2lkdGggPSB3aWR0aDsKKyAgICBpbWctPmhlaWdo
dCA9IGhlaWdodDsKKyAgICBpbWctPmZvcm1hdCA9IGZvcm1hdDsKKworICAgIGlmIChwaXhlbHMg
IT0gTlVMTCAmJiBuZXdTdXJmYWNlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0RMT0NLRURf
UkVDVCBsb2NrZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbmV3U3VyZmFjZS0+TG9ja1Jl
Y3QoJmxvY2tlZCwgTlVMTCwgMCk7CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAg
ICAgICAgbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICB9CisKKyAgICAgICAgaW1n
LT5kaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSB0cnVlOworfQor
Cit2b2lkIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit7
CisgICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsgeW9mZnNl
dCA+IGltZy0+aGVpZ2h0KSByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisKKyAgICBE
M0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2Ut
PkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGxvYWRJ
bWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAg
ICAgICBpbWctPnN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICB9CisKKyAgICBpbWctPmRpcnR5
ID0gdHJ1ZTsKK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlOjpnZXRUZXh0dXJl
KCkKK3sKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIGlmIChtRGlydHlNZXRhRGF0YSkKKyAgICB7CisgICAgICAgIG1CYXNl
VGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNl
OworICAgIH0KKworICAgIGlmIChtRGlydHlNZXRhRGF0YSB8fCBkaXJ0eUltYWdlRGF0YSgpKQor
ICAgIHsKKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworICAgIH0KKworICAgIG1EaXJ0eU1ldGFE
YXRhID0gZmFsc2U7CisgICAgQVNTRVJUKCFkaXJ0eUltYWdlRGF0YSgpKTsKKworICAgIHJldHVy
biBtQmFzZVRleHR1cmU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNEaXJ0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtRGlydHkgfHwgbURpcnR5TWV0YURhdGEgfHwgZGlydHlJbWFnZURhdGEoKSk7
Cit9CisKKy8vIFJldHVybnMgdGhlIHRvcC1sZXZlbCB0ZXh0dXJlIHN1cmZhY2UgYXMgYSByZW5k
ZXIgdGFyZ2V0Cit2b2lkIFRleHR1cmU6Om5lZWRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmICgh
bUlzUmVuZGVyYWJsZSkKKyAgICB7CisgICAgICAgIG1CYXNlVGV4dHVyZSA9IGNvbnZlcnRUb1Jl
bmRlclRhcmdldCgpOworICAgICAgICBtSXNSZW5kZXJhYmxlID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoZGlydHlJbWFnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHVwZGF0ZVRleHR1cmUoKTsK
KyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmU6
OmRyb3BUZXh0dXJlKCkKK3sKKyAgICBpZiAobUJhc2VUZXh0dXJlKQorICAgIHsKKyAgICAgICAg
bUJhc2VUZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7
Cit9CisKK3ZvaWQgVGV4dHVyZTo6cHVzaFRleHR1cmUoSURpcmVjdDNEQmFzZVRleHR1cmU5ICpu
ZXdUZXh0dXJlLCBib29sIHJlbmRlcmFibGUpCit7CisgICAgbUJhc2VUZXh0dXJlID0gbmV3VGV4
dHVyZTsKKyAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOworICAgIG1Jc1JlbmRlcmFibGUgPSBy
ZW5kZXJhYmxlOworICAgIG1EaXJ0eSA9IHRydWU7Cit9CisKKworR0xpbnQgVGV4dHVyZTo6Y3Jl
YXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IG1heGxldmVs
KSBjb25zdAoreworICAgIGlmIChpc1BvdzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1heGxldmVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5v
dCBwZXJtaXQgTlBPVCBtaXBtYXBzLgorICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKK0dM
aW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSwgR0xpbnQgbWF4bGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNyZWF0aW9uTGV2ZWxzKHNpemUsIHNpemUsIG1heGxldmVs
KTsKK30KKworaW50IFRleHR1cmU6OmxldmVsQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
QmFzZVRleHR1cmUgPyBtQmFzZVRleHR1cmUtPkdldExldmVsQ291bnQoKSA6IDA7Cit9CisKK1Rl
eHR1cmUyRDo6VGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQor
eworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Cit9
CisKK1RleHR1cmUyRDo6flRleHR1cmUyRCgpCit7CisgICAgZGVsZXRlIG1Db2xvcmJ1ZmZlclBy
b3h5OworCisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KK30KKworR0xlbnVtIFRleHR1
cmUyRDo6Z2V0VGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKK30K
KworLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sgdGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRp
bCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21wbGV0ZSB0ZXh0dXJlCisvLyBmb3IgcmVu
ZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleEltYWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yg
a2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBsZXZlbHMuCisvLyBDYWxsIHRoaXMgd2hl
biBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1cmUgbXVzdCBiZSBkZWZpbmVkIHdpdGgg
YSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWlnaHQuCisvLworLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBleGlzdGluZyB0ZXh0dXJlIHdhcyB1bnN1aXRhYmxlIGhhZCB0byBiZSBkZXN0cm95
ZWQuIElmIHNvLCBpdCB3aWxsIGFsc28gc2V0CisvLyBhIG5ldyBoZWlnaHQgYW5kIHdpZHRoIGZv
ciB0aGUgdGV4dHVyZSBieSB3b3JraW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiB3aWR0aCBh
bmQgaGVpZ2h0LgorYm9vbCBUZXh0dXJlMkQ6OnJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sK
KyAgICBib29sIHdpZHRoT2theSA9IChtV2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOworICAgIGJv
b2wgaGVpZ2h0T2theSA9IChtSGVpZ2h0ID4+IGxldmVsID09IGhlaWdodCk7CisKKyAgICBib29s
IHNpemVPa2F5ID0gKCh3aWR0aE9rYXkgJiYgaGVpZ2h0T2theSkKKyAgICAgICAgICAgICAgICAg
ICAgIHx8ICh3aWR0aE9rYXkgJiYgbUhlaWdodCA+PiBsZXZlbCA9PSAwICYmIGhlaWdodCA9PSAx
KQorICAgICAgICAgICAgICAgICAgICAgfHwgKGhlaWdodE9rYXkgJiYgbVdpZHRoID4+IGxldmVs
ID09IDAgJiYgd2lkdGggPT0gMSkpOworCisgICAgYm9vbCB0ZXh0dXJlT2theSA9IChzaXplT2th
eSAmJiBpbnRlcm5hbEZvcm1hdCA9PSBtSW1hZ2VBcnJheVswXS5mb3JtYXQpOworCisgICAgaWYg
KCF0ZXh0dXJlT2theSkKKyAgICB7CisgICAgICAgIFRSQUNFKCJSZWRlZmluaW5nIDJEIHRleHR1
cmUgKCVkLCAweCUwNFgsICVkLCAlZCA9PiAweCUwNFgsICVkLCAlZCkuIiwgbGV2ZWwsCisgICAg
ICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LAorICAgICAg
ICAgICAgICBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgLy8gUHVy
Z2UgYWxsIHRoZSBsZXZlbHMgYW5kIHRoZSB0ZXh0dXJlLgorCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAg
ICAgICAgZHJvcFRleHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1XaWR0aCA9IHdpZHRo
IDw8IGxldmVsOworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0IDw8IGxldmVsOworICAgICAgICBt
SW1hZ2VBcnJheVswXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAgICB9CisKKyAgICByZXR1
cm4gIXRleHR1cmVPa2F5OworfQorCit2b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVts
ZXZlbF0pOworfQorCit2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit7CisgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5zdXJmYWNlICE9IE5VTEwpOworCisg
ICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3RMZXZlbCA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1
cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmRlc3RMZXZlbCk7CisKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOwor
CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSB4b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5b2Zmc2V0OworICAg
ICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKKworICAgICAgICAgICAgUE9J
TlQgZGVzdFBvaW50OworICAgICAgICAgICAgZGVzdFBvaW50LnggPSB4b2Zmc2V0OworICAgICAg
ICAgICAgZGVzdFBvaW50LnkgPSB5b2Zmc2V0OworCisgICAgICAgICAgICByZXN1bHQgPSBnZXRE
ZXZpY2UoKS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsICZzb3VyY2VSZWN0LCBkZXN0TGV2
ZWwsICZkZXN0UG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGltZy0+
ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OnN1
YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIFRleHR1cmU6OnN1
YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIGNvbW1pdFJl
Y3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFRl
eHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCkpCisgICAgeworICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgIH0KKworICAg
IGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIHsKKyAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4OworICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHk7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsK
KworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgSFJFU1VMVCBociA9
IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKworICAgICAgICBnZXRC
bGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNl
UmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7CisgICAgfQorCisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLndpZHRoID0gd2lkdGg7CisgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCA9IGhlaWdodDsKKyAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNv
dXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLndp
ZHRoIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uaGVpZ2h0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAg
IGlmIChyZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtSW1hZ2VBcnJh
eVswXS53aWR0aCwgbUltYWdlQXJyYXlbMF0uaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKyAg
ICB9CisKKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBSRUNU
IHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAg
ICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0OworICAgICAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbChsZXZlbCwgJmRlc3QpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29u
dmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVsw
XS5mb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7CisgICAgfQorfQorCisvLyBUZXN0cyBmb3IgR0wgdGV4dHVyZSBvYmplY3QgY29tcGxldGVu
ZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KK2Jvb2wgVGV4
dHVyZTJEOjppc0NvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gbUltYWdl
QXJyYXlbMF0ud2lkdGg7CisgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5oZWln
aHQ7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG1pcG1hcHBpbmcgPSBmYWxzZTsKKwor
ICAgIHN3aXRjaCAobU1pbkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6Cisg
ICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGluZyA9IGZhbHNlOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgorICAgICAgICBt
aXBtYXBwaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgaWYgKChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0Ug
JiYgIWlzUG93Mih3aWR0aCkpCisgICAgICAgIHx8IChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAobWlwbWFwcGluZykKKyAgICB7CisgICAgICAgIGlmICghaXNQb3cy
KHdpZHRoKSB8fCAhaXNQb3cyKGhlaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0
aCwgaGVpZ2h0KSk7CisKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBs
ZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmZv
cm1hdCAhPSBtSW1hZ2VBcnJheVswXS5mb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbbGV2ZWxdLndpZHRoICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uaGVpZ2h0ICE9IHN0ZDo6bWF4
KDEsIGhlaWdodCA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2Ug
ZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCitJRGly
ZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgSURp
cmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFn
ZUFycmF5WzBdLmZvcm1hdCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VGV4dHVyZShtV2lkdGgsIG1IZWlnaHQsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgbUhlaWdodCwg
MCksIDAsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5V
TEwpOworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSkgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAg
ICBtVGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK3ZvaWQgVGV4
dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKKworICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisKKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmxldmVsU3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZsZXZlbFN1cmZh
Y2UpOworCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKG1JbWFnZUFycmF5W2xldmVsXS5zdXJm
YWNlLCBOVUxMLCBsZXZlbFN1cmZhY2UsIE5VTEwpOworICAgICAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBsZXZlbFN1cmZhY2UtPlJlbGVh
c2UoKTsKKworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5kaXJ0eSA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBJRGlyZWN0
M0RUZXh0dXJlOSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhl
aWdodCAhPSAwKQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlz
cGxheSgpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KyAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXS5m
b3JtYXQpOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KG1XaWR0aCwgbUhlaWdodCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCBtSGVpZ2h0LCAwKSwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5V
TEwpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNv
dXJjZTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KGksICZzb3VyY2UpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilO
VUxMKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNl
TGV2ZWwoaSwgJmRlc3QpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVz
dCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworCisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJl
bGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1UZXh0dXJlICE9IE5VTEwpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwor
ICAgIH0KKworICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9
CisKK2Jvb2wgVGV4dHVyZTJEOjpkaXJ0eUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgaW50IHEg
PSBsb2cyKHN0ZDo6bWF4KG1XaWR0aCwgbUhlaWdodCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gcTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLmRpcnR5KSBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVy
ZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBd
LndpZHRoKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIC8vIFB1
cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQg
dGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihz
dGQ6Om1heChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBxOyBpKyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uc3VyZmFjZSAh
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlID0gTlVMTDsKKyAg
ICAgICAgfQorCisgICAgICAgIG1JbWFnZUFycmF5W2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAg
ICAgbUltYWdlQXJyYXlbaV0uZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZm9ybWF0OworICAgICAg
ICBtSW1hZ2VBcnJheVtpXS53aWR0aCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLndpZHRoID4+
IGksIDEpOworICAgICAgICBtSW1hZ2VBcnJheVtpXS5oZWlnaHQgPSBzdGQ6Om1heChtSW1hZ2VB
cnJheVswXS5oZWlnaHQgPj4gaSwgMSk7CisgICAgfQorCisgICAgbmVlZFJlbmRlclRhcmdldCgp
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIHsKKyAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gTlVMTDsKKyAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmxvd2VyID0gTlVMTDsKKworICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxl
dmVsKGktMSwgJnVwcGVyKTsKKyAgICAgICAgbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAm
bG93ZXIpOworCisgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dl
cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVh
c2UoKTsKKyAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAg
fQorfQorCitDb2xvcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0KQoreworICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7
CisgICAgfQorCisgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCisgICAgeworICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlz
LCB0YXJnZXQpOworICAgIH0KKworICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKK30KKwor
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpCit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKworICAgIG5lZWRS
ZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBO
VUxMOworICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnJlbmRlclRhcmdldCk7CisK
KyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1
YmVNYXAoQ29udGV4dCAqY29udGV4dCkgOiBUZXh0dXJlKGNvbnRleHQpCit7CisgICAgbVRleHR1
cmUgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAg
ICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZUN1YmVNYXA6
On5UZXh0dXJlQ3ViZU1hcCgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisg
ICAgeworICAgICAgICBkZWxldGUgbUZhY2VQcm94aWVzW2ldOworICAgIH0KKworICAgIGlmICht
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1U
ZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFy
Z2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKK30KKwordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7
CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0
SW1hZ2UoMSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoMiwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VO
ZWdZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwor
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQoreworICAgIGludCBmYWNlID0gZmFjZUluZGV4KGZhY2VUYXJnZXQpOworCisg
ICAgQVNTRVJUKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zdXJmYWNlICE9IE5VTEwpOworCisg
ICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3RMZXZlbCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAgICAg
ICAgQVNTRVJUKGRlc3RMZXZlbCAhPSBOVUxMKTsKKworICAgICAgICBpZiAoZGVzdExldmVsICE9
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlb
ZmFjZV1bbGV2ZWxdOworCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmxlZnQgPSB4b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC50b3Ag
PSB5b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0
aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKKwor
ICAgICAgICAgICAgUE9JTlQgZGVzdFBvaW50OworICAgICAgICAgICAgZGVzdFBvaW50LnggPSB4
b2Zmc2V0OworICAgICAgICAgICAgZGVzdFBvaW50LnkgPSB5b2Zmc2V0OworCisgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKGltZy0+c3VyZmFj
ZSwgJnNvdXJjZVJlY3QsIGRlc3RMZXZlbCwgJmRlc3RQb2ludCk7CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2Uo
KTsKKworICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBjb21taXRS
ZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
Ly8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCitib29sIFRleHR1cmVDdWJlTWFwOjppc0Nv
bXBsZXRlKCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLndpZHRo
OworCisgICAgaWYgKHNpemUgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIG1pcG1hcHBpbmc7CisKKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCisg
ICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAg
ICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVT
VDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBmb3Ig
KGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1h
Z2VBcnJheVtmYWNlXVswXS53aWR0aCAhPSBzaXplIHx8IG1JbWFnZUFycmF5W2ZhY2VdWzBdLmhl
aWdodCAhPSBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAobWlwbWFwcGluZykKKyAgICB7CisgICAgICAgIGlmICgh
aXNQb3cyKHNpemUpICYmIChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3Jh
cFQoKSAhPSBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHEgPSBsb2cyKHNpemUpOworCisgICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5mb3Jt
YXQgIT0gbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ud2lkdGggIT0gc3RkOjptYXgo
MSwgc2l6ZSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQVNT
RVJUKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5oZWlnaHQgPT0gbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLndpZHRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291
cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQor
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgpCit7
CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgRDNERk9S
TUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpOworCisg
ICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJlOworCisgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3JlYXRpb25MZXZlbHMobVdpZHRo
LCAwKSwgMCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSop
TlVMTCk7CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlKSBtVGV4dHVyZS0+UmVsZWFzZSgpOwor
CisgICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKKyAgICB7CisgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Cisg
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
OworCisgICAgICAgICAgICBpZiAoaW1nLT5kaXJ0eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbGV2ZWxTdXJmYWNlID0gZ2V0Q3ViZU1hcFN1cmZh
Y2UoZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZXZlbFN1cmZhY2UgIT0g
TlVMTCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxTdXJmYWNlICE9IE5VTEwpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsIE5VTEwsIGxldmVsU3VyZmFjZSwgTlVMTCk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgbGV2ZWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJl
Q3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBJRGlyZWN0M0RDdWJlVGV4
dHVyZTkgKnRleHR1cmUgPSBOVUxMOworCisgICAgaWYgKG1XaWR0aCAhPSAwKQorICAgIHsKKyAg
ICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgICAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgRDNERk9STUFUIGZv
cm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpOworCisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0
aW9uTGV2ZWxzKG1XaWR0aCwgMCksIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZm9ybWF0LCBEM0RQ
T09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgICAgICAgICBmb3Ig
KGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0PEQz
RENVQkVNQVBfRkFDRVM+KGYpLCBpLCAmc291cmNlKTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmKSwgaSwgJmRlc3QpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwg
TlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNl
VGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlICE9
IE5VTEwpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgIH0KKworICAg
IG1UZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQor
eworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoKTsKKwor
ICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0pOworfQorCit1bnNp
Z25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkKK3sKKyAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwor
ICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsKKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0g
NCk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOworCisgICAgcmV0dXJuIGZhY2UgLSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7Cit9CisKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmRpcnR5SW1hZ2VEYXRhKCkgY29uc3QKK3sKKyAgICBpbnQgcSA9IGxvZzIobVdpZHRoKTsKKwor
ICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPD0gcTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZl1baV0uZGlydHkpIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBXaGlsZSBPcGVuR0wgZG9lc24ndCBjaGVjayB0ZXh0dXJlIGNv
bnNpc3RlbmN5IHVudGlsIGRyYXctdGltZSwgRDNEOSByZXF1aXJlcyBhIGNvbXBsZXRlIHRleHR1
cmUKKy8vIGZvciByZW5kZXItdG8tdGV4dHVyZSAoc3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBXZSBo
YXZlIG5vIHdheSBvZiBrZWVwaW5nIGluZGl2aWR1YWwgaW5jb25zaXN0ZW50IGxldmVscyAmIGZh
Y2VzLgorLy8gQ2FsbCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFyIGxldmVsIG9mIHRoZSB0ZXh0dXJl
IG11c3QgYmUgZGVmaW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9ybWF0LCB3aWR0aCBhbmQgaGVpZ2h0
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVyZSB3YXMgdW5zdWl0
YWJsZSBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQgd2lsbCBhbHNvIHNldAorLy8gYSBu
ZXcgc2l6ZSBmb3IgdGhlIHRleHR1cmUgYnkgd29ya2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2
ZW4gc2l6ZS4KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKQoreworICAgIC8vIEFyZSB0
aGVzZSBzZXR0aW5ncyBjb21wYXRpYmxlIHdpdGggbGV2ZWwgMD8KKyAgICBib29sIHNpemVPa2F5
ID0gKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID4+IGxldmVsID09IHdpZHRoKTsKKworICAgIGJv
b2wgdGV4dHVyZU9rYXkgPSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxGb3JtYXQgPT0gbUltYWdlQXJy
YXlbMF1bMF0uZm9ybWF0KTsKKworICAgIGlmICghdGV4dHVyZU9rYXkpCisgICAgeworICAgICAg
ICBUUkFDRSgiUmVkZWZpbmluZyBjdWJlIHRleHR1cmUgKCVkLCAweCUwNFgsICVkID0+IDB4JTA0
WCwgJWQpLiIsIGxldmVsLAorICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQs
IG1JbWFnZUFycmF5WzBdWzBdLndpZHRoLAorICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgpOworCisgICAgICAgIC8vIFB1cmdlIGFsbCB0aGUgbGV2ZWxzIGFuZCB0aGUgdGV4dHVy
ZS4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZhY2Ug
IT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2ZdW2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJy
YXlbZl1baV0uc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1UZXh0dXJl
ID0gTlVMTDsKKyAgICAgICAgICAgIGRyb3BUZXh0dXJlKCk7CisgICAgICAgIH0KKworICAgICAg
ICBtV2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0ud2lk
dGggPSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUhlaWdodCA9IHdpZHRoIDw8IGxldmVsOwor
ICAgICAgICBtSW1hZ2VBcnJheVswXVswXS5oZWlnaHQgPSB3aWR0aCA8PCBsZXZlbDsKKworICAg
ICAgICBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAgICB9CisK
KyAgICByZXR1cm4gIXRleHR1cmVPa2F5OworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5
SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXIgKnNvdXJjZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KGZh
Y2UpOworCisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoKSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICBw
dXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgfQorCisgICAgQVNTRVJUKHdpZHRoID09
IGhlaWdodCk7CisKKyAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIHsKKyAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4OworICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHk7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsK
KworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZh
Y2UsIGxldmVsKTsKKworICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNl
LT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRl
c3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5k
ZXhdW2xldmVsXS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVts
ZXZlbF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQgaW50IGZhY2VJZGVudGlm
aWVyLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisgICAgdW5zaWduZWQgaW50IGZhY2VJbmRleDsK
KworICAgIGlmIChmYWNlSWRlbnRpZmllciA8IDYpCisgICAgeworICAgICAgICBmYWNlSW5kZXgg
PSBmYWNlSWRlbnRpZmllcjsKKyAgICB9CisgICAgZWxzZSBpZiAoZmFjZUlkZW50aWZpZXIgPj0g
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIGZhY2VJZGVudGlmaWVyIDw9IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWikKKyAgICB7CisgICAgICAgIGZhY2VJbmRleCA9IGZh
Y2VJZGVudGlmaWVyIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBmYWNlSW5kZXgg
PSAwOworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworCisgICAgSFJFU1VMVCBociA9IG1UZXh0dXJl
LT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmYWNlSW5k
ZXgpLCBsZXZlbCwgJnN1cmZhY2UpOworCisgICAgcmV0dXJuIChTVUNDRUVERUQoaHIpKSA/IHN1
cmZhY2UgOiBOVUxMOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xl
bnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVy
ICpzb3VyY2UpCit7CisgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KGZh
Y2UpXVtsZXZlbF0ud2lkdGg7CisKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5
b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFn
ZUFycmF5WzBdWzBdLmZvcm1hdCwgbUltYWdlQXJyYXlbMF1bMF0ud2lkdGgpKQorICAgIHsKKyAg
ICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0
dXJlLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2V0UmVuZGVyVGFy
Z2V0KGZhY2UpOworICAgIH0KKworICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7
CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsK
KyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVj
dC50b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBs
ZXZlbCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgeG9m
ZnNldCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9Cit9
CisKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBp
ZiAobUltYWdlQXJyYXlbMF1bMF0ud2lkdGggPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMTsgZiA8IDY7IGYrKykK
KyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVswXS53aWR0aCAhPSBtSW1hZ2VBcnJh
eVswXVswXS53aWR0aAorICAgICAgICAgICAgfHwgbUltYWdlQXJyYXlbZl1bMF0uZm9ybWF0ICE9
IG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgaWYgKCFpc1BvdzIobUlt
YWdlQXJyYXlbMF1bMF0ud2lkdGgpIHx8ICFpc0N1YmVDb21wbGV0ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
bUltYWdlQXJyYXlbMF1bMF0ud2lkdGgpOworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBm
IDwgNjsgZisrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0g
cTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uc3Vy
ZmFjZSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZdW2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
XVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1b
aV0uZm9ybWF0ID0gbUltYWdlQXJyYXlbZl1bMF0uZm9ybWF0OworICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0ud2lkdGggPSBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS53aWR0aCA+PiBp
LCAxKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmhlaWdodCA9IG1JbWFnZUFycmF5
W2ZdW2ldLndpZHRoOworICAgICAgICB9CisgICAgfQorCisgICAgbmVlZFJlbmRlclRhcmdldCgp
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1YmVNYXBTdXJmYWNlKGYs
IGktMSk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFw
U3VyZmFjZShmLCBpKTsKKworICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIg
IT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJv
eEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGlmIChsb3dlciAh
PSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCitDb2xvcmJ1
ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZlciAqKU5VTEwpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CisKKyAg
ICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgeworICAgICAgICBtRmFjZVBy
b3hpZXNbZmFjZV0gPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOworfQorCitJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQor
eworICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgbmVl
ZFJlbmRlclRhcmdldCgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IE5VTEw7CisgICAgbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENV
QkVNQVBfRkFDRVM+KGZhY2VJbmRleCh0YXJnZXQpKSwgMCwgJnJlbmRlclRhcmdldCk7CisKKyAg
ICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHkoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRh
cmdldCkKKyAgOiBDb2xvcmJ1ZmZlcihOVUxMKSwgbVRleHR1cmUodGV4dHVyZSksIG1UYXJnZXQo
dGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVt
YXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVy
ZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYg
KG1SZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgIG1SZW5kZXJU
YXJnZXQgPSBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworCisgICAgcmV0dXJu
IG1SZW5kZXJUYXJnZXQ7Cit9CisKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94
eTo6Z2V0V2lkdGgoKQoreworICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgoKTsKK30KKwor
aW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKQoreworICAg
IHJldHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KCk7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0
dXJlLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgY29u
Y3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJ
bXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQKKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCisKKyNpZm5kZWYgTElC
R0xFU1YyX1RFWFRVUkVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8KKworI2luY2x1
ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBDb250ZXh0OworY2xhc3MgQmxpdDsKKwor
ZW51bQoreworICAgIE1BWF9URVhUVVJFX1NJWkUgPSAyMDQ4LAorICAgIE1BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUgPSAyMDQ4LAorCisgICAgTUFYX1RFWFRVUkVfTEVWRUxTID0gMTIgICAvLyAx
K2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQorfTsKKworY2xhc3MgVGV4dHVyZQoreworICBwdWJs
aWM6CisgICAgZXhwbGljaXQgVGV4dHVyZShDb250ZXh0ICpjb250ZXh0KTsKKworICAgIHZpcnR1
YWwgflRleHR1cmUoKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0g
MDsKKworICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wgc2V0
TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXAp
OworICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOworCisgICAgR0xlbnVtIGdldE1pbkZp
bHRlcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKKworICAg
IEdMdWludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgPSAwOworCisgICAgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CisgICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAq
Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwcygpID0gMDsKKworICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworCisgIHBy
b3RlY3RlZDoKKyAgICBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eTsKKyAgICBmcmllbmQg
Y2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7CisgICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVm
ZmVyUHJveHkgOiBwdWJsaWMgQ29sb3JidWZmZXIKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAg
ICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJn
ZXQpOworICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgMkQtbGlrZSB0ZXh0dXJlIHRhcmdldCAo
R0xfVEVYVFVSRV8yRCBvciBvbmUgb2YgdGhlIGN1YmUgZmFjZSB0YXJnZXRzKQorCisgICAgICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworCisgICAgICAg
IHZpcnR1YWwgaW50IGdldFdpZHRoKCk7CisgICAgICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgp
OworCisgICAgICBwcml2YXRlOgorICAgICAgICBUZXh0dXJlICptVGV4dHVyZTsKKyAgICAgICAg
R0xlbnVtIG1UYXJnZXQ7CisgICAgfTsKKworICAgIC8vIEhlbHBlciBzdHJ1Y3R1cmUgcmVwcmVz
ZW50aW5nIGEgc2luZ2xlIGltYWdlIGxheWVyCisgICAgc3RydWN0IEltYWdlCisgICAgeworICAg
ICAgICBJbWFnZSgpOworICAgICAgICB+SW1hZ2UoKTsKKworICAgICAgICBHTHNpemVpIHdpZHRo
OworICAgICAgICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xlbnVtIGZvcm1hdDsKKworICAg
ICAgICBib29sIGRpcnR5OworCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlOwor
ICAgIH07CisKKyAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0
KTsKKyAgICBpbnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25zdDsKKworICAgIEdM
ZW51bSBtTWluRmlsdGVyOworICAgIEdMZW51bSBtTWFnRmlsdGVyOworICAgIEdMZW51bSBtV3Jh
cFM7CisgICAgR0xlbnVtIG1XcmFwVDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisgICAgdm9pZCBz
dWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKworICAgIHZvaWQgbmVlZFJl
bmRlclRhcmdldCgpOworCisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMaW50IG1heGxldmVsKSBjb25zdDsKKyAgICBHTGludCBjcmVhdGlv
bkxldmVscyhHTHNpemVpIHNpemUsIEdMaW50IG1heGxldmVsKSBjb25zdDsKKworICAgIC8vIFRo
ZSBwb2ludGVyIHJldHVybmVkIGlzIHdlYWsgYW5kIGl0IGlzIGFzc3VtZWQgdGhlIGRlcml2ZWQg
Y2xhc3Mgd2lsbCBrZWVwIGEgc3Ryb25nIHBvaW50ZXIgdW50aWwgdGhlIG5leHQgY3JlYXRlVGV4
dHVyZSgpIGNhbGwuCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRl
eHR1cmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKSA9IDA7CisgICAg
dmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0g
MDsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGRpcnR5SW1hZ2VEYXRhKCkgY29uc3Qg
PSAwOworCisgICAgdm9pZCBkcm9wVGV4dHVyZSgpOworICAgIHZvaWQgcHVzaFRleHR1cmUoSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpuZXdUZXh0dXJlLCBib29sIHJlbmRlcmFibGUpOworCisgICAg
QmxpdCAqZ2V0QmxpdHRlcigpOworCisgICAgdW5zaWduZWQgaW50IG1XaWR0aDsKKyAgICB1bnNp
Z25lZCBpbnQgbUhlaWdodDsKKworICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7CisKKyAgICBDb250
ZXh0ICptQ29udGV4dDsKKworICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbUJhc2VUZXh0dXJl
OyAvLyBUaGlzIGlzIGEgd2VhayBwb2ludGVyLiBUaGUgZGVyaXZlZCBjbGFzcyBpcyBhc3N1bWVk
IHRvIG93biBhIHN0cm9uZyBwb2ludGVyLgorICAgIGJvb2wgbURpcnR5TWV0YURhdGE7CisgICAg
Ym9vbCBtSXNSZW5kZXJhYmxlOworCisgICAgYm9vbCBtRGlydHk7CisKKyAgICB2b2lkIGxvYWRJ
bWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKK307CisKK2NsYXNzIFRleHR1
cmUyRCA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJl
MkQoQ29udGV4dCAqY29udGV4dCk7CisKKyAgICB+VGV4dHVyZTJEKCk7CisKKyAgICBHTGVudW0g
Z2V0VGFyZ2V0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJi
dWZmZXIgKnNvdXJjZSk7CisgICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisKKyAgICBib29sIGlzQ29t
cGxldGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKwor
ICAgIHZpcnR1YWwgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7CisK
KyAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCBib29sIGRp
cnR5SW1hZ2VEYXRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKworICAgIEltYWdlIG1JbWFnZUFycmF5W01BWF9URVhUVVJFX0xFVkVMU107CisKKyAg
ICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7CisKKyAgICBUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eSAqbUNvbG9yYnVmZmVyUHJveHk7CisKKyAgICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCk7Cit9OworCitjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0
dXJlCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChDb250ZXh0ICpj
b250ZXh0KTsKKworICAgIH5UZXh0dXJlQ3ViZU1hcCgpOworCisgICAgR0xlbnVtIGdldFRhcmdl
dCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7CisgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJ
bWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZVBvc1oo
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscyk7CisKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIGZhY2Us
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisgICAg
dm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworCisgICAgYm9vbCBpc0NvbXBsZXRlKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisKKyAgICB2aXJ0
dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CisKKyAg
ICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCBib29sIGRpcnR5
SW1hZ2VEYXRhKCkgY29uc3Q7CisKKyAgICAvLyBmYWNlSWRlbnRpZmllciBpcyAwLTUgb3Igb25l
IG9mIHRoZSBHTF9URVhUVVJFX0NVQkVfTUFQXyogZW51bWVyYW50cy4KKyAgICAvLyBSZXR1cm5z
IE5VTEwgaWYgdGhlIGNhbGwgdW5kZXJseWluZyBEaXJlY3QzRCBjYWxsIGZhaWxzLgorICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZSh1bnNpZ25lZCBpbnQgZmFjZUlkZW50
aWZpZXIsIHVuc2lnbmVkIGludCBsZXZlbCk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZh
Y2VJbmRleChHTGVudW0gZmFjZSk7CisKKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldEltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
KyAgICB2b2lkIGNvbW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisgICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCk7CisKKyAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtNQVhfVEVY
VFVSRV9MRVZFTFNdOworCisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKKwor
ICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptRmFjZVByb3hpZXNbNl07CisKKyAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Cit9
OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVYVFVSRV9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDQzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBsaWJHTEVTdjIuY3BwOiBJbXBsZW1lbnRzIHRoZSBleHBvcnRlZCBPcGVuR0wg
RVMgMi4wIGZ1bmN0aW9ucy4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlIDxleGNlcHRpb24+
CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKworZXh0ZXJuICJDIgoreworCit2
b2lkIF9fc3RkY2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCit7CisgICAgVFJB
Q0UoIihHTGVudW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmICh0ZXh0dXJlIDwgR0xfVEVYVFVSRTAgfHwgdGV4dHVyZSA+IEdMX1RFWFRV
UkUwICsgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIC0gMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEFjdGl2ZVNhbXBs
ZXIodGV4dHVyZSAtIEdMX1RFWFRVUkUwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEF0dGFjaFNoYWRlcihHTHVpbnQg
cHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0g
JWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAg
ICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmF0
dGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29u
c3QgR0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1
aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwg
aW5kZXgsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0dHJp
YnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEVsZW1lbnRBcnJheUJ1ZmZlcihidWZm
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVi
dWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGZyYW1l
YnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBmcmFtZWJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
ZnJhbWVidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBH
THVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+
YmluZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFRleHR1cmUoR0xl
bnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpU
ZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKwor
ICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QgJiYgdGV4dHVyZU9iamVjdC0+Z2V0VGFyZ2V0
KCkgIT0gdGFyZ2V0ICYmIHRleHR1cmUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0
dXJlMkQodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRl
eHR1cmVDdWJlTWFwKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBH
TGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7CisgICAgVFJB
Q0UoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1
ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCogY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kQ29sb3IoZ2w6OmNsYW1wMDEocmVkKSwgZ2w6
OmNsYW1wMDEoZ3JlZW4pLCBnbDo6Y2xhbXAwMShibHVlKSwgZ2w6OmNsYW1wMDEoYWxwaGEpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpCit7CisgICAgZ2xCbGVuZEVxdWF0
aW9uU2VwYXJhdGUobW9kZSwgbW9kZSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIG1vZGVSR0IgPSAweCVYLCBHTGVudW0gbW9kZUFscGhhID0gMHglWCkiLCBt
b2RlUkdCLCBtb2RlQWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1v
ZGVSR0IpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgorICAgICAgICAg
IGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9T
VUJUUkFDVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN3aXRjaCAobW9kZUFscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FE
RDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9G
VU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuYyhH
TGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpCit7CisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0
ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVu
dW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBzcmNS
R0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0gMHglWCwgR0xlbnVtIHNyY0FscGhhID0gMHglWCwg
R0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAorICAgICAgICAgIHNyY1JHQiwgZHN0UkdCLCBzcmNB
bHBoYSwgZHN0QWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHNyY1JH
QikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdM
X09ORToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6CisgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAgICAgICAgICBj
YXNlIEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6
CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAg
IGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkc3RSR0IpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBH
TF9TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAg
ICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RT
VF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6
CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAoc3JjQWxwaGEpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9T
UkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAg
ICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9D
T0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RB
TlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Cisg
ICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFU
RToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRj
aCAoZHN0QWxwaGEpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAg
ICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9S
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Cisg
ICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
RFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05T
VEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY29u
c3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNyY1JHQiA9
PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgZHN0UkdCID09IEdMX09O
RV9NSU5VU19DT05TVEFOVF9DT0xPUik7CisKKyAgICAgICAgYm9vbCBjb25zdGFudEFscGhhVXNl
ZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgc3JjUkdCID09IEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRz
dFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNU
QU5UX0FMUEhBKTsKKworICAgICAgICBpZiAoY29uc3RhbnRDb2xvclVzZWQgJiYgY29uc3RhbnRB
bHBoYVVzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiU2ltdWx0YW5lb3VzIHVzZSBv
ZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5kIEdMX0NP
TlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiBpbnZhbGlkIHVuZGVyIFdl
YkdMIik7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29u
c3QgR0x2b2lkKiBkYXRhLCBHTGVudW0gdXNhZ2UpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4
JTAuOHAsIEdMZW51bSB1c2FnZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBzaXplLCBkYXRh
LCB1c2FnZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3dpdGNoICh1c2FnZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfU1RSRUFNX0RSQVc6CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKKyAgICAgICAg
ICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqYnVmZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVm
ZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAg
ICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
YnVmZmVyLT5idWZmZXJEYXRhKGRhdGEsIHNpemUsIHVzYWdlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlclN1
YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUsIGNv
bnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCog
ZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgMCB8fCBvZmZzZXQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgor
ICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9C
VUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNp
emUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVy
U3ViRGF0YShkYXRhLCBzaXplLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdMZW51bSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCkiLCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZy
YW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFz
aykKK3sKKyAgICBUUkFDRSgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1hc2spOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmNsZWFyKG1hc2spOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xh
bXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBUUkFDRSgi
KEdMY2xhbXBmIHJlZCA9ICVmLCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0g
JWYsIEdMY2xhbXBmIGFscGhhID0gJWYpIiwKKyAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhckRlcHRoZihHTGNsYW1wZiBkZXB0aCkKK3sKKyAgICBUUkFDRSgiKEdM
Y2xhbXBmIGRlcHRoID0gJWYpIiwgZGVwdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyRGVwdGgoZGVw
dGgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdMaW50IHMpCit7CisgICAgVFJBQ0UoIihHTGlu
dCBzID0gJWQpIiwgcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUs
IEdMYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xi
b29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9
ICVkKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dENvbG9yTWFzayhyZWQgPT0gR0xfVFJVRSwgZ3JlZW4gPT0gR0xfVFJVRSwgYmx1ZSA9PSBHTF9U
UlVFLCBhbHBoYSA9PSBHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXBpbGVTaGFkZXIoR0x1aW50IHNo
YWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisg
ICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2Jq
ZWN0LT5jb21waWxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAg
ICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIgCisgICAgICAgICAg
IkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCBHTHNpemVpIGltYWdlU2l6
ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXpl
LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6SXNUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+
IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwg
KGxldmVsID4gMCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0gMCB8fCBpbWFn
ZVNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgLy8gdWx0aW1hdGVseSB3ZSBkb24ndCBzdXBwb3J0IGNvbXByZXNzZWQgdGV4dHVyZXMK
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBH
TGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNp
emVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTHNp
emVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWds
OjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwg
PCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIod2lkdGgpKSB8fCAobGV2ZWwgPiAwICYm
ICFnbDo6aXNQb3cyKGhlaWdodCkpIHx8IGltYWdlU2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh4b2Zmc2V0ICE9IDAgfHwgeW9mZnNldCAhPSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gVGhlIHRleHR1cmUg
YmVpbmcgb3BlcmF0ZWQgb24gaXMgbm90IGEgY29tcHJlc3NlZCB0ZXh0dXJlLgorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3Jk
ZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTGludCB4ID0g
JWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
LCBHTGludCBib3JkZXIgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobGV2ZWwgPiAwICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWds
Ojppc1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6
Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAg
ICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvcmRlciAhPSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnNvdXJjZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVm
ZmVyKCk7CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1
cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0g
JWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAg
IkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkg
aGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFn
bDo6SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVs
IDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNldCA8IDAgfHwg
eW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3
aWR0aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBo
ZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9
IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZShs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVQcm9n
cmFtKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0ZVBy
b2dyYW0oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0dMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVTaGFkZXIoR0xl
bnVtIHR5cGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdHlwZSA9IDB4JVgpIiwgdHlwZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQUdN
RU5UX1NIQURFUjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEN1bGxG
YWNlKEdMZW51bSBtb2RlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1v
ZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAg
ICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0Q3VsbE1vZGUobW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlQnVmZmVy
cyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6
ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVm
ZmVyKGJ1ZmZlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRnJhbWVidWZm
ZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7CisgICAgVFJBQ0Uo
IihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIs
IG4sIGZyYW1lYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZnJhbWVidWZmZXJzW2ldICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcnNbaV0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dy
YW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRTaGFkZXIocHJv
Z3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogcmVuZGVyYnVm
ZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHJlbmRl
cmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2hhZGVyKEdMdWludCBz
aGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlciA9PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVUZXh0
dXJlcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogdGV4dHVyZXMpCit7CisgICAgVFJBQ0UoIihH
THNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4
dHVyZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVz
W2ldICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5kZWxldGVUZXh0dXJlKHRleHR1cmVzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCit7CisgICAgVFJBQ0UoIihH
TGVudW0gZnVuYyA9IDB4JVgpIiwgZnVuYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoZnVuYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVWRVI6CisgICAgICAg
ICAgY2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgY2FzZSBHTF9MRVNTOgorICAgICAgICAgIGNh
c2UgR0xfTEVRVUFMOgorICAgICAgICAgIGNhc2UgR0xfRVFVQUw6CisgICAgICAgICAgY2FzZSBH
TF9HUkVBVEVSOgorICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xf
Tk9URVFVQUw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoRnVuYyhm
dW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKK3sKKyAgICBUUkFDRSgi
KEdMYm9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhNYXNrKGZs
YWcgIT0gR0xfRkFMU0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVwdGhSYW5nZWYoR0xjbGFtcGYgek5lYXIsIEdM
Y2xhbXBmIHpGYXIpCit7CisgICAgVFJBQ0UoIihHTGNsYW1wZiB6TmVhciA9ICVmLCBHTGNsYW1w
ZiB6RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoUmFuZ2Uoek5l
YXIsIHpGYXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRGV0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
c2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRl
ciA9ICVkKSIsIHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBnbDo6U2hhZGVy
ICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlckJ5UHJvZ3JhbUhhbmRsZTsKKyAgICAgICAgICAg
ICAgICBzaGFkZXJCeVByb2dyYW1IYW5kbGUgPSBjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSk7
CisgICAgICAgICAgICAgICAgaWYgKCFzaGFkZXJCeVByb2dyYW1IYW5kbGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbUJ5U2hhZGVySGFuZGxlID0gY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIp
OworICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbUJ5U2hhZGVySGFuZGxlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0LT5kZXRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGlzYWJsZShHTGVudW0gY2FwKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdv
bk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FN
UExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2Uo
ZmFsc2UpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAg
ICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+
c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChm
YWxzZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNU
OiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRo
ZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCit7
CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYkVuYWJsZWQoaW5kZXgsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdBcnJheXMo
R0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KQoreworICAgIFRSQUNFKCIo
R0xlbnVtIG1vZGUgPSAweCVYLCBHTGludCBmaXJzdCA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQp
IiwgbW9kZSwgZmlyc3QsIGNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNv
dW50IDwgMCB8fCBmaXJzdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1v
ZGUgPSAweCVYLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3Qg
R0x2b2lkKiBpbmRpY2VzID0gMHglMC44cCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBl
LCBpbmRpY2VzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Cisg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xFbmFibGUoR0xlbnVtIGNhcCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIs
IGNhcCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZSh0cnVlKTsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1ZSk7ICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRl
eHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3Zl
cmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1Jf
VEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0
aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JM
RU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShHTHVpbnQgaW5kZXgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBp
bmRleCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYkVuYWJsZWQoaW5kZXgsIHRydWUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsRmluaXNoKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Zmlu
aXNoKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xGbHVzaCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmZsdXNoKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50
IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVu
dW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQgPSAweCVYLCAi
CisgICAgICAgICAgIkdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiB8fCByZW5kZXJidWZmZXJ0YXJn
ZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FU
VEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZm
ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCkK
K3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9
IDB4JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMdWludCB0ZXh0
dXJlID0gJWQsIEdMaW50IGxldmVsID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmUsIGxldmVsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgorICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICBjYXNlIEdMX1NURU5D
SUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRleHR1cmUgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0YXJnZXQgPSBHTF9OT05FOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlICp0ZXggPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisg
ICAgICAgICAgICAgICAgaWYgKHRleCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkg
IT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxl
dmVsICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVm
ZmVySGFuZGxlKCkgPT0gMCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgZnJhbWVidWZmZXItPnNldENv
bG9yYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQVRUQUNITUVOVDogICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4
dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6IGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKHRleHRhcmdldCwgdGV4
dHVyZSk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJvbnRGYWNlKEdMZW51bSBt
b2RlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0NXOgorICAgICAgICAgIGNhc2UgR0xfQ0NXOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0RnJvbnRGYWNlKG1vZGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbkJ1
ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVp
IG4gPSAlZCwgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVh
dGVCdWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51
bSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5GcmFt
ZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGZyYW1lYnVmZmVycykKK3sKKyAgICBUUkFDRSgi
KEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgZnJh
bWVidWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVm
ZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZW5SZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJz
KQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogcmVuZGVyYnVmZmVycyA9
IDB4JTAuOHApIiwgbiwgcmVuZGVyYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4sIEdMdWlu
dCogdGV4dHVyZXMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0ZXh0
dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRleHR1cmVzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlQXR0cmliKEdMdWludCBwcm9ncmFtLCBHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwg
R0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkg
Kmxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiR0xpbnQgKnNpemUgPSAweCUwLjhwLCBH
TGVudW0gKnR5cGUgPSAlMC44cCwgR0xjaGFyICpuYW1lID0gJTAuOHApIiwKKyAgICAgICAgICBw
cm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9n
cmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4
LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZl
VW5pZm9ybShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdM
c2l6ZWkgYnVmc2l6ZSA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAu
OHAsIEdMaW50KiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0eXBlID0gMHglMC44cCwgR0xjaGFy
KiBuYW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZzaXplLCBs
ZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
YnVmc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZv
cm1Db3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9i
amVjdC0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBl
LCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSwgR0xz
aXplaSBtYXhjb3VudCwgR0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycykKK3sKKyAgICBU
UkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwgR0xzaXpl
aSogY291bnQgPSAweCUwLjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgbWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKG1heGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRl
eHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hh
ZGVycyhtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2ludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlv
bihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNFKCIoR0x1
aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gJXMpIiwgcHJvZ3JhbSwgbmFt
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFLCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAt
MSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5n
ZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgLTEpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xHZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xib29sZWFuKiBwYXJhbXMgPSAweCUwLjhwKSIs
ICBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgcGFy
YW1zKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVU
eXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMg
dmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAg
ICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJh
bXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZsb2F0UGFyYW1zW2ldID09IDAuMGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9
PSBHTF9JTlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAq
aW50UGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdM
aW50W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdl
cnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludFBhcmFtc1tpXSA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdM
X1RSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgW10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBw
YXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgor
ICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9C
VUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBIG51
bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVy
IHRhcmdldAorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0g
X19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgIGlmIChjb250ZXh0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldEVycm9yKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEZsb2F0dihH
TGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdl
dFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAg
ICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUg
YXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2
ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1z
W2ldID09IEdMX0ZBTFNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IDAuMGY7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwor
ICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKKwor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1z
KTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51
bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZS
QU1FQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gYXR0
YWNobWVudFR5cGU7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogICAgCisgICAgICAgICAgICAgICAgYXR0YWNobWVu
dFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gY29udGV4dC0+Z2V0RnJhbWVidWZm
ZXIoKS0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgIAorICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0RGVwdGhi
dWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgIAor
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIo
KS0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFu
ZGxlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xl
bnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8vIFR5cGUgY2F0ZWdvcnkKKyAgICAgICAgICAg
IGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2Jq
ZWN0VHlwZSA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoZ2w6OklzVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAg
ICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAg
ICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8
fCBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYg
KGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgLy8gRnJhbWVidWZmZXJUZXh0dXJlMkQg
d2lsbCBub3QgYWxsb3cgbGV2ZWwgdG8gYmUgc2V0IHRvIGFueXRoaW5nIGVsc2UgaW4gR0wgRVMg
Mi4wCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToK
KyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXNDdWJlbWFw
VGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVt
UGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1l
dGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgICAgIGlm
IChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBr
bm93biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8g
cmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1z
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5b
bnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihw
bmFtZSwgYm9vbFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJv
b2xQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0g
R0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwgcG5hbWUg
PT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09MT1IpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxvYXRQYXJhbXNbaV0gLSAx
LjBmKSAvIDIuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChH
TGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQYXJhbXNbaV0gKyAwLjUp
IDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3Jh
bSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgR0xlbnVtIHBuYW1lID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIs
IHByb2dyYW0sIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxl
dGlvbigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9M
SU5LX1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xf
VkFMSURBVEVfU1RBVFVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5pc1ZhbGlkYXRlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dy
YW1PYmplY3QtPmdldEluZm9Mb2dMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQVRUQUNIRURfU0hBREVSUzoKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVU
RVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JN
UzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBs
ZW5ndGgsIEdMY2hhciogaW5mb2xvZykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0g
JWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNo
YXIqIGluZm9sb2cgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmc2l6ZSwgbGVu
Z3RoLCBpbmZvbG9nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5ndGgs
IGluZm9sb2cpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJC
VUZGRVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRSZW5kZXJidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlcihjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKSk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJi
dWZmZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cmVuZGVyYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEZvcm1hdCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRToK
KyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0UmVkU2l6ZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJ
WkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19j
YXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEdyZWVuU2l6ZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JM
VUVfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVy
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3Rh
dGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0Qmx1ZVNpemUoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3Ji
dWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRBbHBoYVNp
emUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9ERVBUSF9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlz
RGVwdGhidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRE
ZXB0aFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1
ZmZlci0+aXNTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OlN0ZW5jaWxidWZmZXIqPihyZW5kZXJi
dWZmZXIpLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJpdihHTHVpbnQgc2hhZGVy
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hh
ZGVyID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBz
aGFkZXIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRl
eHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1RZUEU6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBJTEVfU1RB
VFVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlzQ29tcGlsZWQo
KSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2dMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0U291cmNlTGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRl
ciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwg
R0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwg
bGVuZ3RoLCBpbmZvbG9nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwor
CisgICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5ndGgsIGlu
Zm9sb2cpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0
eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9u
KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHNoYWRlcnR5cGUgPSAweCVYLCBHTGVudW0gcHJlY2lz
aW9udHlwZSA9IDB4JVgsIEdMaW50KiByYW5nZSA9IDB4JTAuOHAsIEdMaW50KiBwcmVjaXNpb24g
PSAweCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVydHlwZSwgcHJlY2lzaW9udHlwZSwgcmFuZ2Us
IHByZWNpc2lvbik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2hhZGVydHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKKyAgICAgICAg
ICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN3aXRjaCAocHJlY2lzaW9udHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfTE9XX0ZMT0FUOgorICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0ZMT0FU
OgorICAgICAgICAgIGNhc2UgR0xfSElHSF9GTE9BVDoKKyAgICAgICAgICAgIC8vIEFzc3VtZSBJ
RUVFIDc1NCBwcmVjaXNpb24KKyAgICAgICAgICAgIHJhbmdlWzBdID0gMTI3OworICAgICAgICAg
ICAgcmFuZ2VbMV0gPSAxMjc7CisgICAgICAgICAgICAqcHJlY2lzaW9uID0gMjM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0xPV19JTlQ6CisgICAgICAgICAgY2FzZSBH
TF9NRURJVU1fSU5UOgorICAgICAgICAgIGNhc2UgR0xfSElHSF9JTlQ6CisgICAgICAgICAgICAv
LyBTb21lIChtb3N0KSBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIHNpbmdsZS1wcmVjaXNpb24gZmxv
YXRpbmctcG9pbnQgbnVtYmVycywKKyAgICAgICAgICAgIC8vIHdoaWNoIGNhbiBhY2N1cmF0ZWx5
IHJlcHJlc2VudCBpbnRlZ2VycyB1cCB0byArLy0xNjc3NzIxNgorICAgICAgICAgICAgcmFuZ2Vb
MF0gPSAyNDsKKyAgICAgICAgICAgIHJhbmdlWzFdID0gMjQ7CisgICAgICAgICAgICAqcHJlY2lz
aW9uID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclNv
dXJjZShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xj
aGFyKiBzb3VyY2UpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkg
YnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIHNvdXJjZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRl
ck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAo
IXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
aGFkZXJPYmplY3QtPmdldFNvdXJjZShidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSog
X19zdGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBuYW1lKQoreworICAgIFRSQUNFKCIoR0xlbnVt
IG5hbWUgPSAweCVYKSIsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgc3dpdGNoIChuYW1l
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9WRU5ET1I6CisgICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSJUcmFuc0dhbWluZyBJbmMuIjsKKyAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkVSOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiQU5HTEUiOworICAgICAgICAgIGNh
c2UgR0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAy
LjAgKGdpdC1kZXZlbCAiX19EQVRFX18gIiAiIF9fVElNRV9fIikiOworICAgICAgICAgIGNhc2Ug
R0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoZ2l0LWRldmVsICJfX0RBVEVfXyAiICIgX19USU1F
X18iKSI7CisgICAgICAgICAgY2FzZSBHTF9FWFRFTlNJT05TOgorICAgICAgICAgICAgcmV0dXJu
IChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJp
bmcoKSA6ICIiKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUqKU5VTEwpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCAoR0x1Ynl0ZSopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44
cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
RklMVEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRN
aW5GaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4
dHVyZS0+Z2V0V3JhcFMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxv
YXQpdGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVS
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNaW5GaWx0ZXIoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBf
UzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dFVuaWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFt
cykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0g
JWQsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFt
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0
LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBwYXJhbXMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0s
IEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHAp
IiwgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZv
cm1pdihsb2NhdGlvbiwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2ludCBfX3N0ZGNhbGwg
Z2xHZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9
IDB4JTAuOHApIiwgcHJvZ3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoc3Ry
c3RyKG5hbWUsICJnbF8iKSA9PSBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKG5hbWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgLTEpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9h
dCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0g
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
KGF0dHJpYlN0YXRlLm1FbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXpl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClh
dHRyaWJTdGF0ZS5tU3RyaWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6
ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlcjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZF
UlRFWF9BVFRSSUI6CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhdHRy
aWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdM
dWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QXR0
cmlidXRlU3RhdGUgYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFM
U0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUubVNpemU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0
dHJpYlN0YXRlLm1TdHJpZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRyaWJTdGF0ZS5tVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9G
QUxTRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFs
dWVbaV07CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoY3VycmVudFZh
bHVlID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSArIDAuNWYpIDogY2VpbChjdXJyZW50VmFs
dWUgLSAwLjVmKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KEdMdWludCBpbmRl
eCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50
IGluZGV4ID0gJWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBvaW50ZXIgPSAweCUw
LjhwKSIsIGluZGV4LCBwbmFtZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5h
bWUgIT0gR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2b2lkKj4oY29udGV4dC0+
Z2V0VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCkpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsSGludChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gbW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGVudW0gbW9kZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0dFTkVS
QVRFX01JUE1BUF9ISU5UOgorICAgICAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX0ZBU1RFU1Q6CisgICAgICAgICAgICAgIGNhc2UgR0xf
TklDRVNUOgorICAgICAgICAgICAgICBjYXNlIEdMX0RPTlRfQ0FSRToKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQpCisgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0R2VuZXJhdGVNaXBtYXBIaW50KG1vZGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xJc0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IGJ1ZmZlciA9
ICVkKSIsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBidWZm
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNv
bnRleHQtPmdldEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGds
SXNFbmFibGVkKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCki
LCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VF
bmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAg
ICByZXR1cm4gY29udGV4dC0+aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5p
c1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdl
RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQtPmlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVu
Y2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5p
c0JsZW5kRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0s
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIFRSQUNF
KCIoR0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgZnJhbWVidWZmZXIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVj
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwor
ICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBn
bElzUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFt
ID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBw
cm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmIChwcm9n
cmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVF
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFD
RSgiKEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCByZW5kZXJidWZmZXIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgcmVuZGVyYnVmZmVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBjb250ZXh0LT5n
ZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlcmJ1
ZmZlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJV
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzU2hhZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
c2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
ICYmIHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmIChzaGFk
ZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZB
TFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1RleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
dGV4dHVyZSA9ICVkKSIsIHRleHR1cmUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQgJiYgdGV4dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1
cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICBp
ZiAodGV4dHVyZU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKK3sKKyAgICBUUkFDRSgiKEdMZmxv
YXQgd2lkdGggPSAlZikiLCB3aWR0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3
aWR0aCA8PSAwLjBmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldExpbmVXaWR0aCh3aWR0aCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xMaW5rUHJv
Z3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQp
IiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmxpbmsoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVp
KEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHBuYW1lLCBwYXJhbSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5U
OgorICAgICAgICAgICAgICAgIGlmIChwYXJhbSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0g
IT0gNCAmJiBwYXJhbSAhPSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFVucGFja0FsaWdubWVudChwYXJhbSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFt
ICE9IDQgJiYgcGFyYW0gIT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNrQWxpZ25tZW50KHBhcmFtKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsUG9seWdvbk9mZnNldChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBU
UkFDRSgiKEdMZmxvYXQgZmFjdG9yID0gJWYsIEdMZmxvYXQgdW5pdHMgPSAlZikiLCBmYWN0b3Is
IHVuaXRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKGZhY3RvciwgdW5pdHMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsUmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxz
KQoreworICAgIFRSQUNFKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lk
dGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgorICAgICAgICAgICJHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsICBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbGVhc2VTaGFkZXJDb21waWxlcih2b2lk
KQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6U2hh
ZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9SRU5ERVJCVUZGRVI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICBjYXNlIEdMX1JHQkE0OgorICAg
ICAgICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IHdpZHRo
ID4gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSB8fCBoZWlnaHQgPiBnbDo6TUFYX1JFTkRFUkJV
RkZFUl9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6RGVwdGhi
dWZmZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJl
bmRlcmJ1ZmZlcihuZXcgZ2w6OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9y
bWF0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5l
dyBnbDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFn
ZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKK3sKKyAgICBUUkFDRSgiKEdMY2xh
bXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhnbDo6Y2xhbXAwMSh2YWx1ZSksIGlu
dmVydCA9PSBHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVFJBQ0UoIihHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lk
dGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0KiBj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclBhcmFtcyh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFNoYWRlckJpbmFyeShHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
c2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgbGVuZ3RoKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCog
c2hhZGVycyA9IDB4JTAuOHAsIEdMZW51bSBiaW5hcnlmb3JtYXQgPSAweCVYLCAiCisgICAgICAg
ICAgImNvbnN0IEdMdm9pZCogYmluYXJ5ID0gMHglMC44cCwgR0xzaXplaSBsZW5ndGggPSAlZCki
LAorICAgICAgICAgIG4sIHNoYWRlcnMsIGJpbmFyeWZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICAvLyBObyBiaW5hcnkgc2hhZGVyIGZvcm1hdHMgYXJl
IHN1cHBvcnRlZC4KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVy
U291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0cmlu
ZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhwLCBj
b25zdCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlciwgY291bnQs
IHN0cmluZywgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKwor
ICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9i
amVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2ls
RnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaykKK3sKKyAgICBnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVt
IGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCit7CisgICAgVFJBQ0UoIihHTGVudW0gZmFj
ZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHglWCwgR0xpbnQgcmVmID0gJWQsIEdMdWludCBtYXNr
ID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChmYWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAg
ICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
ZnVuYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVWRVI6CisgICAgICAgICAgY2Fz
ZSBHTF9BTFdBWVM6CisgICAgICAgICAgY2FzZSBHTF9MRVNTOgorICAgICAgICAgIGNhc2UgR0xf
TEVRVUFMOgorICAgICAgICAgIGNhc2UgR0xfRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9HRVFV
QUw6CisgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgIGNhc2UgR0xfTk9URVFV
QUw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2Ug
PT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3RlbmNpbFBhcmFtcyhmdW5jLCByZWYsIG1hc2spOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5E
X0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNp
bEJhY2tQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0
ZW5jaWxNYXNrKEdMdWludCBtYXNrKQoreworICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9G
Uk9OVF9BTkRfQkFDSywgbWFzayk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spCit7CisgICAgVFJBQ0UoIihHTGVudW0g
ZmFjZSA9IDB4JVgsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgbWFzayk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJP
TlRfQU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05U
IHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFdyaXRlbWFzayhtYXNrKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FO
RF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5j
aWxCYWNrV3JpdGVtYXNrKG1hc2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE9w
KEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcykKK3sKKyAgICBnbFN0ZW5j
aWxPcFNlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0g
ZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCit7CisgICAgVFJBQ0UoIihHTGVudW0g
ZmFjZSA9IDB4JVgsIEdMZW51bSBmYWlsID0gMHglWCwgR0xlbnVtIHpmYWlsID0gMHglWCwgR0xl
bnVtIHpwYXMgPSAweCVYcykiLAorICAgICAgICAgIGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAg
IGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBzd2l0Y2ggKGZhaWwpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2UgR0xfUkVQ
TEFDRToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9ERUNSOgor
ICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgor
ICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh6ZmFpbCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX0tFRVA6CisgICAgICAgICAgY2FzZSBH
TF9SRVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xfSU5DUjoKKyAgICAgICAgICBjYXNlIEdMX0RF
Q1I6CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6CisgICAgICAgICAgY2FzZSBHTF9JTkNSX1dS
QVA6CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHpwYXNzKQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBj
YXNlIEdMX1JFUExBQ0U6CisgICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2Ug
R0xfREVDUjoKKyAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lO
Q1JfV1JBUDoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0
aW9ucyhmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25z
KGZhaWwsIHpmYWlsLCB6cGFzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkLCAiCisgICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9y
bWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9ICAw
eCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPiAwICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwg
IWdsOjppc1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAg
aWYgKHdpZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAo
Z2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgor
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VCRV9N
QVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW50ZXJuYWxmb3Jt
YXQgIT0gZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdC
OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV82XzU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6Cisg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvcmRl
ciAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlKGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5n
ZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NYKGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
SW1hZ2VOZWdZKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3Na
KGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250
ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRV
bnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIHBuYW1lLCAoR0xpbnQpcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFt
ZXRlcmZ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1z
KQoreworICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCAoR0xpbnQpKnBhcmFtcyk7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaShHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgdGFyZ2V0LCBwbmFt
ZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJE
OgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVy
ZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9XUkFQX1Q6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVt
KXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAg
ICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW1zKQoreworICAgIGdsVGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lLCAqcGFyYW1zKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBw
aXhlbHMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwg
PSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAg
ICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCog
cGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVW
RUxTIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWds
OjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQor
eworICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngpOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdMaW50IGxvY2F0
aW9uLCBHTGludCB4KQoreworICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwgJngpOworfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24s
IGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dy
YW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmYo
R0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAgIEdMZmxvYXQgeHlb
Ml0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIChHTGZsb2F0Kikm
eHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0x
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0
VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpCit7
CisgICAgR0xpbnQgeHlbNF0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24s
IDEsIChHTGludCopJnh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYg
PSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSwgR0xmbG9hdCB6KQoreworICAgIEdMZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OworCisgICAg
Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5eik7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQs
IHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2koR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCit7CisgICAgR0xpbnQgeHl6WzNd
ID0ge3gsIHksIHp9OworCisgICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4
eXopOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwg
bG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihs
b2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHos
IEdMZmxvYXQgdykKK3sKKyAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAg
ICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6dyk7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0o
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGkoR0xp
bnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit7CisgICAg
R0xpbnQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKKworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlv
biwgMSwgKEdMaW50KikmeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7CisgICAgVFJB
Q0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50
KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0g
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwg
Y291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
Y291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFu
c3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dy
YW0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFRS
QUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFs
aWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4
KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGlu
ZGV4LCB4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAwLCAxIH07CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIFRS
QUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHAp
IiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAw
LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwg
R0xmbG9hdCB5ID0gJWYpIiwgaW5kZXgsIHgsIHkpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgs
IHksIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwg
dmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZs
b2F0KiB2YWx1ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xm
bG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxz
WzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4
dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNm
KEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sKKyAgICBU
UkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYs
IEdMZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0g
eyB4LCB5LCB6LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5k
ZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3Qg
R0xmbG9hdCogdmFsdWVzKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQg
dmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjRmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQg
eiwgR0xmbG9hdCB3KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQg
eCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYsIEdMZmxvYXQgdyA9ICVmKSIs
IGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGlu
ZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6
ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRl
eCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAg
ICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBH
THZvaWQqIHB0ciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCBwdHIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNp
emUgPCAxIHx8IHNpemUgPiA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgorICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4
dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xpbnQgeCA9
ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1zKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVs
cykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVk
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lk
dGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBi
b3JkZXIgPSAlZCwgIgorICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5
cGUgPSAweCV4LCBjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwg
Z2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKK3sKKyAgICBzdHJ1Y3QgRXh0
ZW5zaW9uCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICBfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgfTsKKworICAg
IHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZ2xFeHRlbnNpb25zW10gPQorICAgIHsKKyAgICAgICAg
eyJnbFRleEltYWdlM0RPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbFRleEltYWdlM0RPRVN9LAorICAgIH07CisKKyAgICBmb3IgKGludCBleHQgPSAwOyBl
eHQgPCBzaXplb2YoZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKKyAg
ICB7CisgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGdsRXh0ZW5zaW9uc1tleHRdLm5hbWUp
ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEV4dGVuc2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5kZWYJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5kZWYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU0IEBACitMSUJSQVJZIGxpYkdMRVN2
MgorRVhQT1JUUworICAgIGdsQWN0aXZlVGV4dHVyZSAgICAgICAgICAgICAgICAgQDEKKyAgICBn
bEF0dGFjaFNoYWRlciAgICAgICAgICAgICAgICAgIEAyCisgICAgZ2xCaW5kQXR0cmliTG9jYXRp
b24gICAgICAgICAgICBAMworICAgIGdsQmluZEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgQDQK
KyAgICBnbEJpbmRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgIEA1CisgICAgZ2xCaW5kUmVuZGVy
YnVmZmVyICAgICAgICAgICAgICBANgorICAgIGdsQmluZFRleHR1cmUgICAgICAgICAgICAgICAg
ICAgQDcKKyAgICBnbEJsZW5kQ29sb3IgICAgICAgICAgICAgICAgICAgIEA4CisgICAgZ2xCbGVu
ZEVxdWF0aW9uICAgICAgICAgICAgICAgICBAOQorICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRl
ICAgICAgICAgQDEwCisgICAgZ2xCbGVuZEZ1bmMgICAgICAgICAgICAgICAgICAgICBAMTEKKyAg
ICBnbEJsZW5kRnVuY1NlcGFyYXRlICAgICAgICAgICAgIEAxMgorICAgIGdsQnVmZmVyRGF0YSAg
ICAgICAgICAgICAgICAgICAgQDEzCisgICAgZ2xCdWZmZXJTdWJEYXRhICAgICAgICAgICAgICAg
ICBAMTQKKyAgICBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgIEAxNQorICAgIGdsQ2xl
YXIgICAgICAgICAgICAgICAgICAgICAgICAgQDE2CisgICAgZ2xDbGVhckNvbG9yICAgICAgICAg
ICAgICAgICAgICBAMTcKKyAgICBnbENsZWFyRGVwdGhmICAgICAgICAgICAgICAgICAgIEAxOAor
ICAgIGdsQ2xlYXJTdGVuY2lsICAgICAgICAgICAgICAgICAgQDE5CisgICAgZ2xDb2xvck1hc2sg
ICAgICAgICAgICAgICAgICAgICBAMjAKKyAgICBnbENvbXBpbGVTaGFkZXIgICAgICAgICAgICAg
ICAgIEAyMQorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgICAgICAgICAgQDIyCisgICAgZ2xD
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCAgICAgICBAMjMKKyAgICBnbENvcHlUZXhJbWFnZTJEICAg
ICAgICAgICAgICAgIEAyNAorICAgIGdsQ29weVRleFN1YkltYWdlMkQgICAgICAgICAgICAgQDI1
CisgICAgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICBAMjYKKyAgICBnbENyZWF0ZVNo
YWRlciAgICAgICAgICAgICAgICAgIEAyNworICAgIGdsQ3VsbEZhY2UgICAgICAgICAgICAgICAg
ICAgICAgQDI4CisgICAgZ2xEZWxldGVCdWZmZXJzICAgICAgICAgICAgICAgICBAMjkKKyAgICBn
bERlbGV0ZUZyYW1lYnVmZmVycyAgICAgICAgICAgIEAzMAorICAgIGdsRGVsZXRlUHJvZ3JhbSAg
ICAgICAgICAgICAgICAgQDMyCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzICAgICAgICAgICBA
MzMKKyAgICBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgIEAzNAorICAgIGdsRGVsZXRl
VGV4dHVyZXMgICAgICAgICAgICAgICAgQDMxCisgICAgZ2xEZXB0aEZ1bmMgICAgICAgICAgICAg
ICAgICAgICBAMzYKKyAgICBnbERlcHRoTWFzayAgICAgICAgICAgICAgICAgICAgIEAzNworICAg
IGdsRGVwdGhSYW5nZWYgICAgICAgICAgICAgICAgICAgQDM4CisgICAgZ2xEZXRhY2hTaGFkZXIg
ICAgICAgICAgICAgICAgICBAMzUKKyAgICBnbERpc2FibGUgICAgICAgICAgICAgICAgICAgICAg
IEAzOQorICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgQDQwCisgICAgZ2xEcmF3
QXJyYXlzICAgICAgICAgICAgICAgICAgICBANDEKKyAgICBnbERyYXdFbGVtZW50cyAgICAgICAg
ICAgICAgICAgIEA0MgorICAgIGdsRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgQDQzCisg
ICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICBANDQKKyAgICBnbEZpbmlzaCAgICAg
ICAgICAgICAgICAgICAgICAgIEA0NQorICAgIGdsRmx1c2ggICAgICAgICAgICAgICAgICAgICAg
ICAgQDQ2CisgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAgICAgICBANDcKKyAgICBnbEZy
YW1lYnVmZmVyVGV4dHVyZTJEICAgICAgICAgIEA0OAorICAgIGdsRnJvbnRGYWNlICAgICAgICAg
ICAgICAgICAgICAgQDQ5CisgICAgZ2xHZW5CdWZmZXJzICAgICAgICAgICAgICAgICAgICBANTAK
KyAgICBnbEdlbkZyYW1lYnVmZmVycyAgICAgICAgICAgICAgIEA1MgorICAgIGdsR2VuUmVuZGVy
YnVmZmVycyAgICAgICAgICAgICAgQDUzCisgICAgZ2xHZW5UZXh0dXJlcyAgICAgICAgICAgICAg
ICAgICBANTQKKyAgICBnbEdlbmVyYXRlTWlwbWFwICAgICAgICAgICAgICAgIEA1MQorICAgIGds
R2V0QWN0aXZlQXR0cmliICAgICAgICAgICAgICAgQDU1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3Jt
ICAgICAgICAgICAgICBANTYKKyAgICBnbEdldEF0dGFjaGVkU2hhZGVycyAgICAgICAgICAgIEA1
NworICAgIGdsR2V0QXR0cmliTG9jYXRpb24gICAgICAgICAgICAgQDU4CisgICAgZ2xHZXRCb29s
ZWFudiAgICAgICAgICAgICAgICAgICBANTkKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2ICAg
ICAgICAgIEA2MAorICAgIGdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICAgQDYxCisgICAg
Z2xHZXRGbG9hdHYgICAgICAgICAgICAgICAgICAgICBANjIKKyAgICBnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2ICAgQDYzCisgICAgZ2xHZXRJbnRlZ2VydiAgICAgICAgICAg
ICAgICAgICBANjQKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nICAgICAgICAgICAgIEA2NgorICAg
IGdsR2V0UHJvZ3JhbWl2ICAgICAgICAgICAgICAgICAgQDY1CisgICAgZ2xHZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdiAgICBANjcKKyAgICBnbEdldFNoYWRlckluZm9Mb2cgICAgICAgICAgICAg
IEA2OQorICAgIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ICAgICAgQDcwCisgICAgZ2xHZXRT
aGFkZXJTb3VyY2UgICAgICAgICAgICAgICBANzEKKyAgICBnbEdldFNoYWRlcml2ICAgICAgICAg
ICAgICAgICAgIEA2OAorICAgIGdsR2V0U3RyaW5nICAgICAgICAgICAgICAgICAgICAgQDcyCisg
ICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICBANzMKKyAgICBnbEdldFRleFBhcmFt
ZXRlcml2ICAgICAgICAgICAgIEA3NAorICAgIGdsR2V0VW5pZm9ybUxvY2F0aW9uICAgICAgICAg
ICAgQDc3CisgICAgZ2xHZXRVbmlmb3JtZnYgICAgICAgICAgICAgICAgICBANzUKKyAgICBnbEdl
dFVuaWZvcm1pdiAgICAgICAgICAgICAgICAgIEA3NgorICAgIGdsR2V0VmVydGV4QXR0cmliUG9p
bnRlcnYgICAgICAgQDgwCisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAgICAgICAgICAgICBANzgK
KyAgICBnbEdldFZlcnRleEF0dHJpYml2ICAgICAgICAgICAgIEA3OQorICAgIGdsSGludCAgICAg
ICAgICAgICAgICAgICAgICAgICAgQDgxCisgICAgZ2xJc0J1ZmZlciAgICAgICAgICAgICAgICAg
ICAgICBAODIKKyAgICBnbElzRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIEA4MworICAgIGds
SXNGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgICAgQDg0CisgICAgZ2xJc1Byb2dyYW0gICAgICAg
ICAgICAgICAgICAgICBAODUKKyAgICBnbElzUmVuZGVyYnVmZmVyICAgICAgICAgICAgICAgIEA4
NgorICAgIGdsSXNTaGFkZXIgICAgICAgICAgICAgICAgICAgICAgQDg3CisgICAgZ2xJc1RleHR1
cmUgICAgICAgICAgICAgICAgICAgICBAODgKKyAgICBnbExpbmVXaWR0aCAgICAgICAgICAgICAg
ICAgICAgIEA4OQorICAgIGdsTGlua1Byb2dyYW0gICAgICAgICAgICAgICAgICAgQDkwCisgICAg
Z2xQaXhlbFN0b3JlaSAgICAgICAgICAgICAgICAgICBAOTEKKyAgICBnbFBvbHlnb25PZmZzZXQg
ICAgICAgICAgICAgICAgIEA5MgorICAgIGdsUmVhZFBpeGVscyAgICAgICAgICAgICAgICAgICAg
QDkzCisgICAgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgICAgICAgICBAOTQKKyAgICBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgICAgICAgICAgIEA5NQorICAgIGdsU2FtcGxlQ292ZXJhZ2UgICAgICAg
ICAgICAgICAgQDk2CisgICAgZ2xTY2lzc29yICAgICAgICAgICAgICAgICAgICAgICBAOTcKKyAg
ICBnbFNoYWRlckJpbmFyeSAgICAgICAgICAgICAgICAgIEA5OAorICAgIGdsU2hhZGVyU291cmNl
ICAgICAgICAgICAgICAgICAgQDk5CisgICAgZ2xTdGVuY2lsRnVuYyAgICAgICAgICAgICAgICAg
ICBAMTAwCisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlICAgICAgICAgICBAMTAxCisgICAgZ2xT
dGVuY2lsTWFzayAgICAgICAgICAgICAgICAgICBAMTAyCisgICAgZ2xTdGVuY2lsTWFza1NlcGFy
YXRlICAgICAgICAgICBAMTAzCisgICAgZ2xTdGVuY2lsT3AgICAgICAgICAgICAgICAgICAgICBA
MTA0CisgICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAgICAgICAgICAgICBAMTA1CisgICAgZ2xUZXhJ
bWFnZTJEICAgICAgICAgICAgICAgICAgICBAMTA2CisgICAgZ2xUZXhQYXJhbWV0ZXJmICAgICAg
ICAgICAgICAgICBAMTA3CisgICAgZ2xUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICAgICBAMTA4
CisgICAgZ2xUZXhQYXJhbWV0ZXJpICAgICAgICAgICAgICAgICBAMTA5CisgICAgZ2xUZXhQYXJh
bWV0ZXJpdiAgICAgICAgICAgICAgICBAMTEwCisgICAgZ2xUZXhTdWJJbWFnZTJEICAgICAgICAg
ICAgICAgICBAMTExCisgICAgZ2xVbmlmb3JtMWYgICAgICAgICAgICAgICAgICAgICBAMTEyCisg
ICAgZ2xVbmlmb3JtMWZ2ICAgICAgICAgICAgICAgICAgICBAMTEzCisgICAgZ2xVbmlmb3JtMWkg
ICAgICAgICAgICAgICAgICAgICBAMTE0CisgICAgZ2xVbmlmb3JtMWl2ICAgICAgICAgICAgICAg
ICAgICBAMTE1CisgICAgZ2xVbmlmb3JtMmYgICAgICAgICAgICAgICAgICAgICBAMTE2CisgICAg
Z2xVbmlmb3JtMmZ2ICAgICAgICAgICAgICAgICAgICBAMTE3CisgICAgZ2xVbmlmb3JtMmkgICAg
ICAgICAgICAgICAgICAgICBAMTE4CisgICAgZ2xVbmlmb3JtMml2ICAgICAgICAgICAgICAgICAg
ICBAMTE5CisgICAgZ2xVbmlmb3JtM2YgICAgICAgICAgICAgICAgICAgICBAMTIwCisgICAgZ2xV
bmlmb3JtM2Z2ICAgICAgICAgICAgICAgICAgICBAMTIxCisgICAgZ2xVbmlmb3JtM2kgICAgICAg
ICAgICAgICAgICAgICBAMTIyCisgICAgZ2xVbmlmb3JtM2l2ICAgICAgICAgICAgICAgICAgICBA
MTIzCisgICAgZ2xVbmlmb3JtNGYgICAgICAgICAgICAgICAgICAgICBAMTI0CisgICAgZ2xVbmlm
b3JtNGZ2ICAgICAgICAgICAgICAgICAgICBAMTI1CisgICAgZ2xVbmlmb3JtNGkgICAgICAgICAg
ICAgICAgICAgICBAMTI2CisgICAgZ2xVbmlmb3JtNGl2ICAgICAgICAgICAgICAgICAgICBAMTI3
CisgICAgZ2xVbmlmb3JtTWF0cml4MmZ2ICAgICAgICAgICAgICBAMTI4CisgICAgZ2xVbmlmb3Jt
TWF0cml4M2Z2ICAgICAgICAgICAgICBAMTI5CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2ICAgICAg
ICAgICAgICBAMTMwCisgICAgZ2xVc2VQcm9ncmFtICAgICAgICAgICAgICAgICAgICBAMTMxCisg
ICAgZ2xWYWxpZGF0ZVByb2dyYW0gICAgICAgICAgICAgICBAMTMyCisgICAgZ2xWZXJ0ZXhBdHRy
aWIxZiAgICAgICAgICAgICAgICBAMTMzCisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnYgICAgICAgICAg
ICAgICBAMTM0CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZiAgICAgICAgICAgICAgICBAMTM1CisgICAg
Z2xWZXJ0ZXhBdHRyaWIyZnYgICAgICAgICAgICAgICBAMTM2CisgICAgZ2xWZXJ0ZXhBdHRyaWIz
ZiAgICAgICAgICAgICAgICBAMTM3CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnYgICAgICAgICAgICAg
ICBAMTM4CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZiAgICAgICAgICAgICAgICBAMTM5CisgICAgZ2xW
ZXJ0ZXhBdHRyaWI0ZnYgICAgICAgICAgICAgICBAMTQwCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2lu
dGVyICAgICAgICAgICBAMTQxCisgICAgZ2xWaWV3cG9ydCAgICAgICAgICAgICAgICAgICAgICBA
MTQyCisKKyAgICA7IEV4dGVuc2lvbnMKKyAgICBnbFRleEltYWdlM0RPRVMJCQkJCUAxNDMKKyAg
ICAKKyAgICA7IEVHTCBkZXBlbmRlbmNpZXMKKyAgICBnbENyZWF0ZUNvbnRleHQJCQkJCUAxNDQg
Tk9OQU1FCisgICAgZ2xEZXN0cm95Q29udGV4dAkJCQlAMTQ1IE5PTkFNRQorICAgIGdsTWFrZUN1
cnJlbnQJCQkJCUAxNDYgTk9OQU1FCisgICAgZ2xHZXRDdXJyZW50Q29udGV4dAkJCQlAMTQ3IE5P
TkFNRQorICAgIGdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
dmNwcm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNw
cm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVj
dFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkdMRVN2MiIN
CisJUHJvamVjdEdVSUQ9IntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9Ig0K
KwlSb290TmFtZXNwYWNlPSJsaWJHTEVTdjIiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFy
Z2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxh
dGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZp
bGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRp
b24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIk
KENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFy
YWN0ZXJTZXQ9IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9u
PSIwIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4u
OyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRp
b25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JU
X1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVl
Ig0KKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0K
KwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJ
CQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2Vk
UmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jl
c291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVM
aW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29s
Ig0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJEM2R4OS5saWIiDQorCQkJCUxpbmtJbmNy
ZW1lbnRhbD0iMiINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiDQor
CQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0K
KwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50
aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlm
ZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gw
QTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUp
XCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVv
dDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVv
dDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRp
b24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUlu
dGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJh
dGlvblR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGlt
aXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249
IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRP
V1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9N
SU5NQVg7X1NFQ1VSRV9TQ0w9MCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0
Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNv
bXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21w
aWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFk
ZGl0aW9uYWxEZXBlbmRlbmNpZXM9IkQzZHg5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIx
Ig0KKwkJCQlJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPSJmYWxzZSINCisJCQkJTW9kdWxlRGVm
aW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlv
bj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIi
DQorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVz
cz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hp
bmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29w
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJ
CUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERp
cikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAm
cXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7
JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4N
CisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0K
KwkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2Rs
O2lkbDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1D
N0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQmxpdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbnRleHQuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGRlYnVnLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJh
bWVidWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxsaWJHTEVTdjIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNo
YWRlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXFRleHR1cmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWx0ZXINCisJCQkJTmFtZT0iR2VvbWV0cnkiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmNwcCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGR4OS5jcHAi
DQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
LlxnZW9tZXRyeVxJbmRleERhdGFNYW5hZ2VyLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XFZlcnRleERhdGFNYW5h
Z2VyLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0
ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDto
cHA7aHh4O2htO2lubDtpbmM7eHNkIg0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04
OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQmxpdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxCdWZmZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxH
TEVTMlxnbDIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMnBs
YXRmb3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbWF0aHV0aWwuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRleHR1cmUu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
dXRpbGl0aWVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1l
PSJHZW9tZXRyeSINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdl
b21ldHJ5XGJhY2tlbmQuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGR4OS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFu
YWdlci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cZ2VvbWV0cnlcdmVydGV4Y29udmVyc2lvbi5oIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcVmVydGV4RGF0
YU1hbmFnZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9G
aWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJHTEVTdjIuZGVmIg0KKwkJ
CT4NCisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8
L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9p
bnQgYW5kIG1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGli
RUdML1N1cmZhY2UuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCitz
dGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKKworQk9PTCBXSU5B
UEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2Vy
dmVkKQoreworICAgIHN3aXRjaCAocmVhc29uKQorICAgIHsKKyAgICAgIGNhc2UgRExMX1BST0NF
U1NfQVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICBjdXJyZW50VExTID0gVGxzQWxsb2Mo
KTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRFWEVTKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5k
ZXgKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNp
emVvZihnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsK
KworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRleHQgPSBOVUxMOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisg
ICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
b2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgICAgICB7Cisg
ICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExv
Y2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBU
bHNGcmVlKGN1cnJlbnRUTFMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK25h
bWVzcGFjZSBnbAorewordm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBDdXJyZW50ICpj
dXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVu
dC0+Y29udGV4dCA9IGNvbnRleHQ7CisgICAgY3VycmVudC0+ZGlzcGxheSA9IGRpc3BsYXk7CisK
KyAgICBpZiAoY29udGV4dCAmJiBkaXNwbGF5ICYmIHN1cmZhY2UpCisgICAgeworICAgICAgICBj
b250ZXh0LT5tYWtlQ3VycmVudChkaXNwbGF5LCBzdXJmYWNlKTsKKyAgICB9Cit9CisKK0NvbnRl
eHQgKmdldENvbnRleHQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+Y29udGV4dDsKK30K
KworZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQt
PmRpc3BsYXk7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpCit7CisgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworCisgICAgcmV0dXJuIGRpc3BsYXkt
PmdldERldmljZSgpOworfQorfQorCisvLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKK3ZvaWQgZXJy
b3IoR0xlbnVtIGVycm9yQ29kZSkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsR2V0
Q3VycmVudENvbnRleHQoKTsKKworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChlcnJvckNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRU5V
TToKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRFbnVtKCk7CisgICAgICAgICAg
ICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZW51bVxuIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfVkFMVUU6CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkVmFsdWUoKTsKKyAgICAgICAgICAgIGdsOjp0cmFj
ZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCB2YWx1ZVxuIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOworICAgICAgICAgICAgZ2w6OnRyYWNl
KCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvcmRPdXRPZk1lbW9yeSgpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEg
RXJyb3IgZ2VuZXJhdGVkOiBvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKKyAgICAg
ICAgICAgIGdsOjp0cmFjZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBmcmFtZWJ1ZmZl
ciBvcGVyYXRpb25cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJH
TEVTdjIvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVu
dCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2lmbmRlZiBMSUJHTEVTVjJfTUFJTl9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfTUFJTl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkVH
TC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK3N0cnVjdCBDdXJyZW50Cit7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXk7Cit9OworCit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNv
bnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKwor
Q29udGV4dCAqZ2V0Q29udGV4dCgpOworZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCk7CisKK0lE
aXJlY3QzRERldmljZTkgKmdldERldmljZSgpOworfQorCit2b2lkIGVycm9yKEdMZW51bSBlcnJv
ckNvZGUpOworCit0ZW1wbGF0ZTxjbGFzcyBUPgorY29uc3QgVCAmZXJyb3IoR0xlbnVtIGVycm9y
Q29kZSwgY29uc3QgVCAmcmV0dXJuVmFsdWUpCit7CisgICAgZXJyb3IoZXJyb3JDb2RlKTsKKwor
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX01BSU5f
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
bGliR0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24g
ZnVuY3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJH
TEVTVjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIGdsCit7
CitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAgcmV0dXJuICh4ICYgKHggLSAxKSkg
PT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBsb2cyKGludCB4KQoreworICAgIGlu
dCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSByKys7CisgICAgcmV0dXJuIHI7Cit9
CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5zaWduZWQgaW50IHgpCit7CisgICAg
aWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOworICAgIHggfD0geCA+PiAyOworICAg
IHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAgIHggfD0geCA+PiAxNjsKKyAgICB4
Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkK
K3sKKyAgICByZXR1cm4geCA8IDAgPyAwIDogKHggPiAxID8gMSA6IHgpOworfQorCit0ZW1wbGF0
ZTxjb25zdCBpbnQgbj4KK2lubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIgLSBuKTsKKworICAg
IGlmICh4ID4gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBtYXg7CisgICAgfQorICAgIGVsc2Ug
aWYgKHggPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KShtYXggKiB4ICsgMC41Zik7CisgICAg
fQorfQorfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KSW5kZXg6IEFOR0xF
L3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIK
KworI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5j
bHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIGdsCit7CisKK2ludCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVt
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDoK
KyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNh
c2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMzoKKyAgICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0
OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKKyAgICAgICAgICByZXR1cm4gOTsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZhdWx0OgorICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3Jt
Q29tcG9uZW50VHlwZShHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgICAgcmV0dXJu
IEdMX0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzM6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICAgIHJldHVybiBHTF9JTlQ7
CisgICAgICBkZWZhdWx0OgorICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cmV0dXJuIEdMX05PTkU7Cit9CisKK3NpemVfdCBVbmlmb3JtVHlwZVNpemUoR0xlbnVtIHR5cGUp
Cit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgcmV0dXJu
IHNpemVvZihHTGJvb2xlYW4pOworICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIHNpemVvZihH
TGZsb2F0KTsKKyAgICAgIGNhc2UgR0xfSU5UOiAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAg
IH0KKworICAgIHJldHVybiBVbmlmb3JtVHlwZVNpemUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlw
ZSkpICogVW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworfQorCitpbnQgVmFyaWFibGVSb3dD
b3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9OT05FOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9PTF9W
RUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoK
KyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAg
ICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHJldHVybiAyOworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgVmFyaWFibGVDb2x1
bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9OT05FOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAg
IHJldHVybiAyOworICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
OgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgQWxsb2NhdGVG
aXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25T
aXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXpl
IDw9IGJpdHNTaXplKTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAgewor
ICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
KmJpdHMgfD0gbWFzazsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAg
ICAgbWFzayA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK0dMc2l6ZWkgQ29t
cHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCBhbGlnbm1lbnQpCit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdu
bWVudCkpOworCisgICAgR0xzaXplaSByYXdQaXRjaCA9IENvbXB1dGVQaXhlbFNpemUoZm9ybWF0
LCB0eXBlKSAqIHdpZHRoOworICAgIHJldHVybiAocmF3UGl0Y2ggKyBhbGlnbm1lbnQgLSAxKSAm
IH4oYWxpZ25tZW50IC0gMSk7Cit9CisKKy8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBv
ZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQoraW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNp
Z25lZCBjaGFyKTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNp
emVvZih1bnNpZ25lZCBjaGFyKTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTog
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7CisgICAgICAgICAgY2FzZSBHTF9SR0I6
ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOworICAgICAgICAg
IGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICog
NDsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitib29s
IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICByZXR1cm4gKHRh
cmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWik7Cit9CisKK2Jvb2wgSXNUZXh0dXJlVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKK30KKworLy8gVmVyaWZ5IHRoYXQgZm9ybWF0
L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBD
aGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAg
ICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0JBKTsKKworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF81XzZfNToKKyAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKKworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfQorCituYW1l
c3BhY2UgZXMyZHgKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29t
cGFyaXNvbikKK3sKKyAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlTOworICAg
IHN3aXRjaCAoY29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBkM2RD
b21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMV0FZUzog
ICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xF
U1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVJF
UVVBTDsgYnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEQ01QX05P
VEVRVUFMOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBkM2RDb21wOworfQorCitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNv
bG9yIGNvbG9yKQoreworICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xv
ci5yZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVl
biksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJsdWUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkpOworfQor
CitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKK3sKKyAgICBEM0RCTEVO
RCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87CisKKyAgICBzd2l0Y2ggKGJsZW5kKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJM
RU5EX1pFUk87ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAgICAg
ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X1NSQ0NPTE9SOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xP
UjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RF
U1RDT0xPUjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FM
UEhBOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTogICAg
ICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RBTFBI
QTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9S
OyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOiBkM2RC
bGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9SOyAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVu
ZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FUOyAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGQzZEJsZW5kOworfQorCitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9w
KQoreworICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOworCisgICAg
c3dpdGNoIChibGVuZE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAg
ICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfU1VC
VFJBQ1Q7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6IGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kT3A7Cit9CisKK0Qz
RFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCit7CisgICAgRDNE
U1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOworCisgICAgc3dpdGNo
IChzdGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5jaWxP
cCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfS0VFUDogICAg
ICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7IGJyZWFr
OworICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9J
TkNSU0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBE
M0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9J
TkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVDUjsg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJl
dHVybiBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJl
V3JhcChHTGVudW0gd3JhcCkKK3sKKyAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFwID0gRDNE
VEFERFJFU1NfV1JBUDsKKworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19D
TEFNUDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNkV3JhcCA9
IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBkM2RXcmFwOworfQorCitEM0RDVUxMIENvbnZlcnRDdWxs
TW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCit7CisgICAgRDNEQ1VMTCBj
dWxsID0gRDNEQ1VMTF9DQ1c7CisgICAgc3dpdGNoIChjdWxsRmFjZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX0ZST05UOgorICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RD
VUxMX0NXIDogRDNEQ1VMTF9DQ1cpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkFD
SzoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DQ1cgOiBE
M0RDVUxMX0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNL
OgorICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUgaGFuZGxl
ZCBkdXJpbmcgZHJhdworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0RXT1JEIENvbnZlcnRDb2xvck1h
c2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKK3sKKyAgICBy
ZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKKyAgICAgICAg
ICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKKyAgICAgICAgICAg
KGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKKyAgICAgICAgICAgKGFs
cGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOworfQorCitEM0RURVhUVVJFRklM
VEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpCit7CisgICAgRDNEVEVY
VFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICBzd2l0Y2gg
KG1hZ0ZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9
IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmls
dGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkTWFnRmlsdGVyOworfQorCit2b2lkIENvbnZlcnRN
aW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZp
bHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcikKK3sKKyAgICBzd2l0Y2gg
KG1pbkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICpkM2RN
aW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVY
Rl9OT05FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICAq
ZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBE
M0RURVhGX05PTkU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAg
ICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBE
M0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAg
ICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVy
ID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVJf
TUlQTUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwor
ICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Cisg
ICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0
ZW5jaWxGb3JtYXQpCit7CisgICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCisgICAgeworICAgICAg
Y2FzZSBEM0RGTVRfRDI0RlM4OgorICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIHJl
dHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBjYXNlIEQzREZNVF9EMTVTMToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQz
REZNVF9EMTZfTE9DS0FCTEU6CisgICAgICBjYXNlIEQzREZNVF9EMzI6CisgICAgICBjYXNlIEQz
REZNVF9EMjRYODoKKyAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6CisgICAgICBjYXNl
IEQzREZNVF9EMTY6CisgICAgICAgIHJldHVybiAwOworLy8gICAgICBjYXNlIEQzREZNVF9EMzJf
TE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5CisvLyAgICAgIGNhc2Ug
RDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAg
ICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICByZXR1cm4g
MTsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1
QjU6CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgIHJldHVybiAwOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2ln
bmVkIGludCBHZXRSZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2gg
KGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAg
ICAgICByZXR1cm4gMTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0Ex
UjVHNUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgY2FzZSBEM0RGTVRfWDFS
NUc1QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBHZXRHcmVlblNpemUoRDNE
Rk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCisgICAgewor
ICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAxMDsKKyAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAg
ICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICBjYXNlIEQz
REZNVF9YMVI1RzVCNToKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBjYXNlIEQzREZNVF9SNUc2
QjU6CisgICAgICAgIHJldHVybiA2OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JN
QVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAg
ICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDEwOworICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAg
cmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAgICByZXR1cm4gNTsK
KyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQor
Cit1bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCkKK3sKKyAg
ICBzd2l0Y2ggKGRlcHRoRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NL
QUJMRTogIHJldHVybiAxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QzMjogICAgICAgICAgIHJldHVy
biAzMjsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOiAgICAgICAgIHJldHVybiAxNTsKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1U
X0QyNFg4OiAgICAgICAgIHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6ICAg
ICAgIHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjogICAgICAgICAgIHJldHVybiAx
NjsKKyAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6IHJldHVybiAzMjsKKyAgICAgIGNh
c2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVybiAyNDsKKy8vICAgICAgY2FzZSBEM0RGTVRf
RDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDMyOyAgIC8vIEQzRDlFeCBvbmx5CisvLyAgICAgIGNhc2Ug
RDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiAwOyAgICAvLyBEM0Q5RXggb25seQorICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6
ZWkgcHJpbWl0aXZlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElW
RVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpCit7CisgICAg
c3dpdGNoIChwcmltaXRpdmVUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAg
ICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MSU5FUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsK
KyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLyAyOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOgorICAgICAgICAqZDNkUHJpbWl0aXZl
VHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJp
bWl0aXZlQ291bnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgor
ICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgKmQz
ZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAxOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBU
X1RSSUFOR0xFTElTVDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291
bnQgLyAzOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Cisg
ICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKKyAgICAgICAg
KmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAyOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9
IEQzRFBUX1RSSUFOR0xFRkFOOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRp
dmVDb3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitEM0RGT1JNQVQgQ29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6
ICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBHTF9SR0I1
NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7CisgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgcmV0
dXJuIEQzREZNVF9EMjRTODsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJl
dHVybiBEM0RGTVRfQThSOEc4Qjg7CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1
dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGlu
ZXMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9V
VElMSVRJRVNfSAorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
KyNpbmNsdWRlIDxkM2Q5Lmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgQ29sb3I7CisK
K2ludCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOworR0xlbnVtIFVuaWZvcm1D
b21wb25lbnRUeXBlKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtVHlwZVNpemUoR0xlbnVt
IHR5cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxl
Q29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVu
c2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBp
bnQgYml0c1NpemUpOworCitpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSk7CitHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKK2Jvb2wgSXNDdWJlbWFwVGV4dHVy
ZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgSXNUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOworYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKTsKKworfQorCituYW1lc3BhY2UgZXMyZHgKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29t
cGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNv
bG9yIGNvbG9yKTsKK0QzREJMRU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKTsKK0Qz
REJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApOworRDNEU1RFTkNJTE9QIENv
bnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CitEM0RURVhUVVJFQUREUkVTUyBDb252
ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xl
bnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKTsKK0RXT1JEIENvbnZlcnRDb2xvck1hc2so
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CitEM0RURVhUVVJF
RklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpOwordm9pZCBDb252
ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RN
aW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpOwordW5zaWduZWQg
aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdl
dFJlZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRHcmVlblNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RG
T1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQg
ZGVwdGhGb3JtYXQpOwordW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVu
Y2lsRm9ybWF0KTsKK2Jvb2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5
cGUsIEdMc2l6ZWkgcHJpbWl0aXZlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQp
OworRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CisK
K30KKworI2VuZGlmICAvLyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBn
ZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdl
ciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBm
b3IgaW5kZXggYnVmZmVycy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERh
dGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorCituYW1lc3BhY2UKK3sKKyAgICBl
bnVtIHsgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSA9IDQwOTYgKiBzaXplb2YoR0x1aW50KSB9
OworfQorCituYW1lc3BhY2UgZ2wKK3sKKworSW5kZXhEYXRhTWFuYWdlcjo6SW5kZXhEYXRhTWFu
YWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNrZW5kKQorICA6IG1Db250
ZXh0KGNvbnRleHQpLCBtQmFja2VuZChiYWNrZW5kKSwgbUludEluZGljZXNTdXBwb3J0ZWQoYmFj
a2VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKK3sKKyAgICBtQ291bnRpbmdCdWZmZXIgPSBOVUxM
OworICAgIG1Db3VudGluZ0J1ZmZlclNpemUgPSAwOworCisgICAgbUxpbmVMb29wQnVmZmVyID0g
TlVMTDsKKworICAgIG1TdHJlYW1CdWZmZXJTaG9ydCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1
ZmZlcihJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAg
ICBpZiAobUludEluZGljZXNTdXBwb3J0ZWQpCisgICAgeworICAgICAgICBtU3RyZWFtQnVmZmVy
SW50ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJ
WkUsIEdMX1VOU0lHTkVEX0lOVCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1T
dHJlYW1CdWZmZXJJbnQgPSBOVUxMOworICAgIH0KK30KKworSW5kZXhEYXRhTWFuYWdlcjo6fklu
ZGV4RGF0YU1hbmFnZXIoKQoreworICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyU2hvcnQ7CisgICAg
ZGVsZXRlIG1TdHJlYW1CdWZmZXJJbnQ7CisgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKKyAg
ICBkZWxldGUgbUxpbmVMb29wQnVmZmVyOworfQorCituYW1lc3BhY2UKK3sKKwordGVtcGxhdGUg
PGNsYXNzIElucHV0SW5kZXhUeXBlLCBjbGFzcyBPdXRwdXRJbmRleFR5cGU+Cit2b2lkIGNvcHlJ
bmRpY2VzKGNvbnN0IElucHV0SW5kZXhUeXBlICppbiwgR0xzaXplaSBjb3VudCwgT3V0cHV0SW5k
ZXhUeXBlICpvdXQsIEdMdWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5kZXgpCit7CisgICAg
SW5wdXRJbmRleFR5cGUgZmlyc3QgPSAqaW47CisgICAgR0x1aW50IG1pbkluZGV4U29GYXIgPSBm
aXJzdDsKKyAgICBHTHVpbnQgbWF4SW5kZXhTb0ZhciA9IGZpcnN0OworCisgICAgZm9yIChHTHNp
emVpIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtaW5JbmRleFNv
RmFyID4gKmluKSBtaW5JbmRleFNvRmFyID0gKmluOworICAgICAgICBpZiAobWF4SW5kZXhTb0Zh
ciA8ICppbikgbWF4SW5kZXhTb0ZhciA9ICppbjsKKworICAgICAgICAqb3V0KysgPSAqaW4rKzsK
KyAgICB9CisKKyAgICAvLyBJdCBtaWdodCBiZSBhIGxpbmUgbG9vcCwgc28gY29weSB0aGUgbG9v
cCBpbmRleC4KKyAgICAqb3V0ID0gZmlyc3Q7CisKKyAgICAqbWluSW5kZXggPSBtaW5JbmRleFNv
RmFyOworICAgICptYXhJbmRleCA9IG1heEluZGV4U29GYXI7Cit9CisKK30KKworR0xlbnVtIElu
ZGV4RGF0YU1hbmFnZXI6OnByZVJlbmRlclZhbGlkYXRlKEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBjb3VudCwgQnVmZmVyICphcnJheUVsZW1lbnRCdWZmZXIsIGNvbnN0IHZvaWQg
KmluZGljZXMsIFRyYW5zbGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpCit7CisgICAgQVNTRVJU
KHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFIHx8
IHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKTsKKyAgICBBU1NFUlQoY291bnQgPiAwKTsKKworICAg
IGlmIChhcnJheUVsZW1lbnRCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkg
b2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNpemVpPihpbmRpY2VzKTsKKworICAgICAgICBp
ZiAodHlwZVNpemUodHlwZSkgKiBjb3VudCArIG9mZnNldCA+IHN0YXRpY19jYXN0PHN0ZDo6c2l6
ZV90PihhcnJheUVsZW1lbnRCdWZmZXItPnNpemUoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorCisgICAgICAgIGluZGlj
ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oYXJyYXlFbGVtZW50QnVmZmVyLT5kYXRh
KCkpICsgb2Zmc2V0OworICAgIH0KKworICAgIHRyYW5zbGF0ZWQtPmNvdW50ID0gY291bnQ7CisK
KyAgICBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlID0gc3BhY2VSZXF1aXJlZCh0eXBlLCBjb3Vu
dCk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnN0cmVhbUliID0gcHJlcGFyZUluZGV4
QnVmZmVyKHR5cGUsIHJlcXVpcmVkU3BhY2UpOworCisgICAgc2l6ZV90IG9mZnNldDsKKyAgICB2
b2lkICpvdXRwdXQgPSBzdHJlYW1JYi0+bWFwKHJlcXVpcmVkU3BhY2UsICZvZmZzZXQpOworCisg
ICAgdHJhbnNsYXRlZC0+YnVmZmVyID0gc3RyZWFtSWI7CisgICAgdHJhbnNsYXRlZC0+b2Zmc2V0
ID0gb2Zmc2V0OworICAgIHRyYW5zbGF0ZWQtPmluZGV4U2l6ZSA9IGluZGV4U2l6ZSh0eXBlKTsK
KworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICBjb25z
dCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKTsKKyAg
ICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKwor
ICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4
LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdM
X1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdWludCAqaW4gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKTsKKworICAgICAgICBpZiAobUludEluZGljZXNT
dXBwb3J0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdWludCAqb3V0ID0gc3RhdGljX2Nh
c3Q8R0x1aW50Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50
LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gMzIt
Yml0IGluZGljZXMgYXJlIHVuc3VwcG9ydGVkLCBmYWtlIHRoZW0gYnkgdHJ1bmNhdGluZyB0byAx
Ni1iaXQuCisKKyAgICAgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9y
dCo+KG91dHB1dCk7CisKKyAgICAgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAm
dHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgR0x1c2hvcnQgKmluID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKTsKKyAgICAgICAgR0x1c2hvcnQgKm91
dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKworICAgICAgICBjb3B5SW5kaWNl
cyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4
SW5kZXgpOworICAgIH0KKworICAgIHN0cmVhbUliLT51bm1hcCgpOworCisgICAgcmV0dXJuIEdM
X05PX0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUo
R0xlbnVtIHR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09IEdMX1VOU0lHTkVEX0lO
VCAmJiBtSW50SW5kaWNlc1N1cHBvcnRlZCkgPyBzaXplb2YoR0x1aW50KSA6IHNpemVvZihHTHVz
aG9ydCk7Cit9CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51
bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdM
dWJ5dGUpOworICAgIH0KK30KKworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6c3BhY2VS
ZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KGNvdW50ICsgMSkgKiBpbmRleFNpemUodHlwZSk7IC8vICsxIGJlY2F1c2Ugd2UgYWx3YXlzIGxl
YXZlIGFuIGV4dHJhIGZvciBsaW5lIGxvb3BzCit9CisKK1RyYW5zbGF0ZWRJbmRleEJ1ZmZlciAq
SW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4QnVmZmVyKEdMZW51bSB0eXBlLCBzdGQ6OnNp
emVfdCByZXF1aXJlZFNwYWNlKQoreworICAgIGJvb2wgdXNlMzIgPSAodHlwZSA9PSBHTF9VTlNJ
R05FRF9JTlQgJiYgbUludEluZGljZXNTdXBwb3J0ZWQpOworCisgICAgVHJhbnNsYXRlZEluZGV4
QnVmZmVyICpzdHJlYW1JYiA9IHVzZTMyID8gbVN0cmVhbUJ1ZmZlckludCA6IG1TdHJlYW1CdWZm
ZXJTaG9ydDsKKworICAgIGlmIChyZXF1aXJlZFNwYWNlID4gc3RyZWFtSWItPnNpemUoKSkKKyAg
ICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IG5ld1NpemUgPSBzdGQ6Om1heChyZXF1aXJlZFNwYWNl
LCAyICogc3RyZWFtSWItPnNpemUoKSk7CisKKyAgICAgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVy
ICpuZXdTdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIobmV3U2l6ZSwg
dXNlMzIgPyBHTF9VTlNJR05FRF9JTlQgOiBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAgICAgICAg
ZGVsZXRlIHN0cmVhbUliOworCisgICAgICAgIHN0cmVhbUliID0gbmV3U3RyZWFtQnVmZmVyOwor
CisgICAgICAgIGlmICh1c2UzMikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0cmVhbUJ1ZmZl
ckludCA9IHN0cmVhbUliOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0cmVhbUJ1ZmZlclNob3J0ID0gc3RyZWFtSWI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdHJlYW1JYi0+cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgcmV0
dXJuIHN0cmVhbUliOworfQorCitHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFs
aWRhdGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRl
eERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBpZiAoY291bnQgPj0gNjU1MzUpIHJldHVybiBHTF9P
VVRfT0ZfTUVNT1JZOworCisgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAg
ICAgICAgLy8gRm9yIGxpbmUgbG9vcHMsIGNyZWF0ZSBhIHNpbmdsZS11c2UgYnVmZmVyIHRoYXQg
cnVucyAwIC0gY291bnQtMSwgMC4KKyAgICAgICAgZGVsZXRlIG1MaW5lTG9vcEJ1ZmZlcjsKKyAg
ICAgICAgbUxpbmVMb29wQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKChjb3Vu
dCsxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAg
ICAgICB1bnNpZ25lZCBzaG9ydCAqaW5kaWNlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
ICo+KG1MaW5lTG9vcEJ1ZmZlci0+bWFwKCkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRpY2VzW2NvdW50XSA9IDA7CisKKyAgICAgICAgbUxpbmVM
b29wQnVmZmVyLT51bm1hcCgpOworCisgICAgICAgIGluZGV4SW5mby0+YnVmZmVyID0gbUxpbmVM
b29wQnVmZmVyOworICAgICAgICBpbmRleEluZm8tPmNvdW50ID0gY291bnQgKyAxOworICAgICAg
ICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKyAgICBlbHNlIGlmICht
Q291bnRpbmdCdWZmZXJTaXplIDwgY291bnQpCisgICAgeworICAgICAgICBtQ291bnRpbmdCdWZm
ZXJTaXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8R0xzaXplaT4oY2VpbFBvdzIoY291bnQpKSwg
bUNvdW50aW5nQnVmZmVyU2l6ZSoyKTsKKworICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVy
OworICAgICAgICBtQ291bnRpbmdCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIo
Y291bnQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAg
ICAgICAgdW5zaWduZWQgc2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dCAqPihtQ291bnRpbmdCdWZmZXItPm1hcCgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljZXNbaV0gPSBpOwor
ICAgICAgICB9CisKKyAgICAgICAgbUNvdW50aW5nQnVmZmVyLT51bm1hcCgpOworCisgICAgICAg
IGluZGV4SW5mby0+YnVmZmVyID0gbUNvdW50aW5nQnVmZmVyOworICAgICAgICBpbmRleEluZm8t
PmNvdW50ID0gY291bnQ7CisgICAgICAgIGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3VudCAtIDE7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4SW5mby0+YnVmZmVyID0gbUNv
dW50aW5nQnVmZmVyOworICAgICAgICBpbmRleEluZm8tPmNvdW50ID0gY291bnQ7CisgICAgICAg
IGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3VudCAtIDE7CisgICAgfQorCisgICAgaW5kZXhJbmZv
LT5pbmRleFNpemUgPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgIGluZGV4SW5mby0+bWlu
SW5kZXggPSAwOworICAgIGluZGV4SW5mby0+b2Zmc2V0ID0gMDsKKworICAgIHJldHVybiBHTF9O
T19FUlJPUjsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRl
eERhdGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRy
eS9JbmRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oOiBE
ZWZpbmVzIHRoZSBJbmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKKy8vIHJ1bnMgdGhlIEJ1
ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9HRU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9H
RU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVk
ZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgQnVmZmVyOworY2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIFRyYW5zbGF0ZWRJbmRl
eEJ1ZmZlcjsKK3N0cnVjdCBGb3JtYXRDb252ZXJ0ZXI7CisKK3N0cnVjdCBUcmFuc2xhdGVkSW5k
ZXhEYXRhCit7CisgICAgR0x1aW50IG1pbkluZGV4OworICAgIEdMdWludCBtYXhJbmRleDsKKyAg
ICBHTHVpbnQgY291bnQ7CisgICAgR0x1aW50IGluZGV4U2l6ZTsKKworICAgIFRyYW5zbGF0ZWRJ
bmRleEJ1ZmZlciAqYnVmZmVyOworICAgIEdMc2l6ZWkgb2Zmc2V0OworfTsKKworY2xhc3MgSW5k
ZXhEYXRhTWFuYWdlcgoreworICBwdWJsaWM6CisgICAgSW5kZXhEYXRhTWFuYWdlcihDb250ZXh0
ICpjb250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNrZW5kKTsKKyAgICB+SW5kZXhEYXRhTWFuYWdl
cigpOworCisgICAgR0xlbnVtIHByZVJlbmRlclZhbGlkYXRlKEdMZW51bSBtb2RlLCBHTGVudW0g
dHlwZSwgR0xzaXplaSBjb3VudCwgQnVmZmVyICphcnJheUVsZW1lbnRCdWZmZXIsIGNvbnN0IHZv
aWQgKmluZGljZXMsIFRyYW5zbGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpOworICAgIEdMZW51
bSBwcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
VHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6
c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKKyAg
ICBzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xlbnVtIHR5cGUpIGNv
bnN0OworICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
Y291bnQpIGNvbnN0OworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqcHJlcGFyZUluZGV4QnVm
ZmVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKTsKKworICAgIENvbnRl
eHQgKm1Db250ZXh0OworICAgIEJ1ZmZlckJhY2tFbmQgKm1CYWNrZW5kOworCisgICAgYm9vbCBt
SW50SW5kaWNlc1N1cHBvcnRlZDsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVh
bUJ1ZmZlclNob3J0OworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlcklu
dDsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbUNvdW50aW5nQnVmZmVyOworICAgIEdM
c2l6ZWkgbUNvdW50aW5nQnVmZmVyU2l6ZTsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAq
bUxpbmVMb29wQnVmZmVyOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVU
UllfSU5ERVhEQVRBTUFOQUdFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRy
eS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L1ZlcnRl
eERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRo
YXQKKy8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxsaW1p
dHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkv
SW5kZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3BhY2UKK3sKKyAgICBlbnVtIHsgSU5JVElBTF9T
VFJFQU1fQlVGRkVSX1NJWkUgPSAxMDI0KjEwMjQgfTsKK30KKworbmFtZXNwYWNlIGdsCit7CisK
K1ZlcnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBC
dWZmZXJCYWNrRW5kICpiYWNrZW5kKQorICAgIDogbUNvbnRleHQoY29udGV4dCksIG1CYWNrZW5k
KGJhY2tlbmQpLCBtRGlydHlDdXJyZW50VmFsdWVzKHRydWUpLCBtQ3VycmVudFZhbHVlT2Zmc2V0
KDApCit7CisgICAgbVN0cmVhbUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXIo
SU5JVElBTF9TVFJFQU1fQlVGRkVSX1NJWkUpOworICAgIHRyeQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRWYWx1ZUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVa
ZXJvKDQgKiBzaXplb2YoZmxvYXQpICogTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICB9CisgICAg
Y2F0Y2ggKC4uLikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOworICAgICAg
ICB0aHJvdzsKKyAgICB9Cit9CisKK1ZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1hbmFn
ZXIoKQoreworICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOworICAgIGRlbGV0ZSBtQ3VycmVudFZh
bHVlQnVmZmVyOworfQorCitzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IFZlcnRleERh
dGFNYW5hZ2VyOjpnZXRBY3RpdmVBdHRyaWJzKCkgY29uc3QKK3sKKyAgICBzdGQ6OmJpdHNldDxN
QVhfVkVSVEVYX0FUVFJJQlM+IGFjdGl2ZTsKKworICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4
ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4
KyspCisgICAgeworICAgICAgICBhY3RpdmVbYXR0cmlidXRlSW5kZXhdID0gKHByb2dyYW0tPmdl
dFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICB9CisKKyAgICByZXR1
cm4gYWN0aXZlOworfQorCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZVJlbmRlclZhbGlk
YXRlKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkKQorewor
ICAgIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0
dHJpYkJsb2NrKCk7CisgICAgY29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBh
Y3RpdmVBdHRyaWJzID0gZ2V0QWN0aXZlQXR0cmlicygpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghYWN0aXZl
QXR0cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkICYmIGF0dHJpYnNbaV0ubUJvdW5kQnVm
ZmVyICE9IDAgJiYgIW1Db250ZXh0LT5nZXRCdWZmZXIoYXR0cmlic1tpXS5tQm91bmRCdWZmZXIp
KQorICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAg
ICAgICB0cmFuc2xhdGVkW2ldLmVuYWJsZWQgPSBhY3RpdmVBdHRyaWJzW2ldOworICAgIH0KKwor
ICAgIGJvb2wgdXNlc0N1cnJlbnRWYWx1ZXMgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZl
QXR0cmlic1tpXSAmJiAhYXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdXNlc0N1cnJlbnRWYWx1ZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBIYW5kbGUgdGhlIGlkZW50aXR5LW1hcHBlZCBhdHRyaWJ1dGVz
LgorICAgIC8vIFByb2Nlc3MgYXJyYXkgYXR0cmlidXRlcy4KKworICAgIHN0ZDo6c2l6ZV90IHJl
cXVpcmVkU3BhY2UgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmIGF0dHJp
YnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVkU3BhY2UgKz0g
c3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocmVxdWlyZWRTcGFjZSA+IG1TdHJlYW1CdWZmZXItPnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHN0ZDo6c2l6ZV90IG5ld1NpemUgPSBzdGQ6Om1heChyZXF1aXJlZFNwYWNlLCAzICogbVN0
cmVhbUJ1ZmZlci0+c2l6ZSgpIC8gMik7IC8vIDEuNSB4IG1TdHJlYW1CdWZmZXItPnNpemUoKSBp
cyBhcmJpdHJhcnkgYW5kIHNob3VsZCBiZSBjaGVja2VkIHRvIHNlZSB3ZSBkb24ndCBoYXZlIHRv
byBtYW55IHJlYWxsb2NhdGlvbnMuCisKKyAgICAgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAq
bmV3U3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlcihuZXdTaXplKTsK
KworICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICAgICAgbVN0cmVhbUJ1ZmZlciA9
IG5ld1N0cmVhbUJ1ZmZlcjsKKyAgICB9CisKKyAgICBtU3RyZWFtQnVmZmVyLT5yZXNlcnZlU3Bh
Y2UocmVxdWlyZWRTcGFjZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYg
YXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9ybWF0Q29udmVy
dGVyIGZvcm1hdENvbnZlcnRlciA9IG1CYWNrZW5kLT5nZXRGb3JtYXRDb252ZXJ0ZXIoYXR0cmli
c1tpXS5tVHlwZSwgYXR0cmlic1tpXS5tU2l6ZSwgYXR0cmlic1tpXS5tTm9ybWFsaXplZCk7CisK
KyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkgPSBmYWxzZTsKKyAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0udHlwZSA9IGF0dHJpYnNbaV0ubVR5cGU7CisgICAgICAgICAgICB0cmFu
c2xhdGVkW2ldLnNpemUgPSBhdHRyaWJzW2ldLm1TaXplOworICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5ub3JtYWxpemVkID0gYXR0cmlic1tpXS5tTm9ybWFsaXplZDsKKyAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uc3RyaWRlID0gZm9ybWF0Q29udmVydGVyLm91dHB1dFZlcnRleFNpemU7Cisg
ICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmJ1ZmZlciA9IG1TdHJlYW1CdWZmZXI7CisKKyAgICAg
ICAgICAgIHNpemVfdCBpbnB1dFN0cmlkZSA9IGludGVycHJldEdsU3RyaWRlKGF0dHJpYnNbaV0p
OworICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRTaXplID0gdHlwZVNpemUoYXR0cmlic1tpXS5t
VHlwZSkgKiBhdHRyaWJzW2ldLm1TaXplOworCisgICAgICAgICAgICB2b2lkICpvdXRwdXQgPSBt
U3RyZWFtQnVmZmVyLT5tYXAoc3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCksICZ0cmFu
c2xhdGVkW2ldLm9mZnNldCk7CisKKyAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0OworICAg
ICAgICAgICAgaWYgKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gbUNvbnRleHQtPmdldEJ1ZmZlcihhdHRyaWJz
W2ldLm1Cb3VuZEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDxzaXplX3Q+KGF0dHJpYnNbaV0ubVBvaW50ZXIpOworCisgICAgICAgICAg
ICAgICAgLy8gQmVmb3JlIHdlIGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgc2l6ZSBiZWxvdywgbWFr
ZSBzdXJlIGl0IGNhbiBiZSBjb21wdXRlZCB3aXRob3V0IGludGVnZXIgb3ZlcmZsb3cuCisgICAg
ICAgICAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAt
IHN0YXJ0IDwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGNvdW50KQorICAgICAgICAgICAgICAg
ICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLyBpbnB1dFN0
cmlkZSA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGFydCArIGNvdW50IC0gMSkgLy8gaXQn
cyBhIHByZXJlcXVpc2l0ZSB0aGF0IGNvdW50ID49IDEsIHNvIHN0YXJ0K2NvdW50LTEgPj0gMC4K
KyAgICAgICAgICAgICAgICAgICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46
Om1heCgpIC0gb2Zmc2V0IDwgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgo
KSAtIGVsZW1lbnRTaXplIDwgb2Zmc2V0ICsgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAt
IDEpICsgZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtU3RyZWFtQnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKG9mZnNldCArIGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQgLSAxKSArIGVsZW1lbnRT
aXplID4gYnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBtU3RyZWFtQnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zm
c2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlucHV0ID0gYXR0cmlic1tpXS5tUG9pbnRlcjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsg
aW5wdXRTdHJpZGUgKiBzdGFydDsKKworICAgICAgICAgICAgaWYgKGZvcm1hdENvbnZlcnRlci5p
ZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9ybWF0Q29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUs
IGNvdW50LCBvdXRwdXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RyZWFtQnVm
ZmVyLT51bm1hcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzZXNDdXJyZW50VmFs
dWVzKQorICAgIHsKKyAgICAgICAgcHJvY2Vzc05vbkFycmF5QXR0cmlidXRlcyhhdHRyaWJzLCBh
Y3RpdmVBdHRyaWJzLCB0cmFuc2xhdGVkLCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIEdM
X05PX0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUo
R0xlbnVtIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfQllURTogY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7
CisgICAgICBjYXNlIEdMX1NIT1JUOiBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6
ZW9mKEdMc2hvcnQpOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIHNpemVvZihHTGZpeGVk
KTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIH0KK30K
Kworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OmludGVycHJldEdsU3RyaWRlKGNvbnN0
IEF0dHJpYnV0ZVN0YXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0dHJpYi5tU3Ry
aWRlID8gYXR0cmliLm1TdHJpZGUgOiB0eXBlU2l6ZShhdHRyaWIubVR5cGUpICogYXR0cmliLm1T
aXplOworfQorCisvLyBSb3VuZCB1cCB4ICg+PTApIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIG11
bHRpcGxlICg+MCkuCisvLyAwIHJvdW5kcyB1cCB0byAwLgorc3RkOjpzaXplX3QgVmVydGV4RGF0
YU1hbmFnZXI6OnJvdW5kVXAoc3RkOjpzaXplX3QgeCwgc3RkOjpzaXplX3QgbXVsdGlwbGUpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHggPj0gMCk7CisgICAgQVNTRVJUKG11bHRpcGxlID4gMCk7CisK
KyAgICBzdGQ6OnNpemVfdCByZW1haW5kZXIgPSB4ICUgbXVsdGlwbGU7CisgICAgaWYgKHJlbWFp
bmRlciAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHggKyBtdWx0aXBsZSAtIHJlbWFpbmRl
cjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfQor
CitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChjb25zdCBBdHRy
aWJ1dGVTdGF0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBtYXhWZXJ0ZXgpIGNvbnN0Cit7CisgICAg
c3RkOjpzaXplX3Qgc2l6ZSA9IG1CYWNrZW5kLT5nZXRGb3JtYXRDb252ZXJ0ZXIoYXR0cmliLm1U
eXBlLCBhdHRyaWIubVNpemUsIGF0dHJpYi5tTm9ybWFsaXplZCkub3V0cHV0VmVydGV4U2l6ZTsK
KyAgICBzaXplICo9IG1heFZlcnRleDsKKworICAgIHJldHVybiByb3VuZFVwKHNpemUsIDQgKiBz
aXplb2YoR0xmbG9hdCkpOworfQorCit2b2lkIFZlcnRleERhdGFNYW5hZ2VyOjpwcm9jZXNzTm9u
QXJyYXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBjb25zdCBzdGQ6
OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFuc2xhdGVkQXR0
cmlidXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCkKK3sKKyAgICBpZiAobURpcnR5
Q3VycmVudFZhbHVlcykKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHRvdGFsU2l6ZSA9IDQg
KiBzaXplb2YoZmxvYXQpICogTUFYX1ZFUlRFWF9BVFRSSUJTOworCisgICAgICAgIG1DdXJyZW50
VmFsdWVCdWZmZXItPnJlc2VydmVTcGFjZSh0b3RhbFNpemUpOworCisgICAgICAgIGZsb2F0KiBj
dXJyZW50VmFsdWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtQ3VycmVudFZhbHVlQnVmZmVyLT5t
YXAodG90YWxTaXplLCAmbUN1cnJlbnRWYWx1ZU9mZnNldCkpOworCisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHTF9GTE9BVHg0IGlzIHN1cHBvcnRlZCBieSB0
aGUgYmFjay1lbmQuIChGb3IgRDNEOSwgaXQgaXMgYSBtYW5kYXRvcnkgZm9ybWF0LikKKyAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBd
OworICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMV0gPSBhdHRyaWJzW2ldLm1DdXJyZW50
VmFsdWVbMV07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCsyXSA9IGF0dHJpYnNbaV0u
bUN1cnJlbnRWYWx1ZVsyXTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzNdID0gYXR0
cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICB9CisKKyAgICAgICAgbUN1cnJlbnRW
YWx1ZUJ1ZmZlci0+dW5tYXAoKTsKKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZl
QXR0cmlic1tpXSAmJiAhYXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdHJhbnNsYXRlZFtpXS5ub25BcnJheSA9IHRydWU7CisKKyAgICAgICAgICAgIHRyYW5zbGF0
ZWRbaV0uYnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKKworICAgICAgICAgICAgdHJhbnNs
YXRlZFtpXS50eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNpemUg
PSA0OworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5ub3JtYWxpemVkID0gZmFsc2U7CisgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CisgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXQgKyA0ICogc2l6ZW9mKGZsb2F0KSAqIGk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2Vv
bWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L1ZlcnRleERh
dGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQK
Ky8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgorCisjaWZuZGVmIExJQkdM
RVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VP
TUVUUllfVkVSVEVYREFUQU1BTkFHRVJfSF8KKworI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRl
IDxjc3RkZGVmPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitj
bGFzcyBCdWZmZXI7CitjbGFzcyBCdWZmZXJCYWNrRW5kOworY2xhc3MgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlcjsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworc3RydWN0IEZvcm1hdENvbnZl
cnRlcjsKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOworCitjbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcgoreworICBwdWJsaWM6CisgICAgVmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4
dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCk7CisgICAgflZlcnRleERhdGFNYW5hZ2VyKCk7CisK
KyAgICB2b2lkIGRpcnR5Q3VycmVudFZhbHVlcygpIHsgbURpcnR5Q3VycmVudFZhbHVlcyA9IHRy
dWU7IH0KKworICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGludCBzdGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicyk7CisKKyAgcHJpdmF0
ZToKKyAgICBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IGdldEFjdGl2ZUF0dHJpYnMo
KSBjb25zdDsKKworICAgIHZvaWQgcHJvY2Vzc05vbkFycmF5QXR0cmlidXRlcyhjb25zdCBBdHRy
aWJ1dGVTdGF0ZSAqYXR0cmlicywgY29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJT
PiAmYWN0aXZlQXR0cmlicywgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgc3RkOjpz
aXplX3QgY291bnQpOworCisgICAgc3RkOjpzaXplX3QgdHlwZVNpemUoR0xlbnVtIHR5cGUpIGNv
bnN0OworICAgIHN0ZDo6c2l6ZV90IGludGVycHJldEdsU3RyaWRlKGNvbnN0IEF0dHJpYnV0ZVN0
YXRlICZhdHRyaWIpIGNvbnN0OworCisgICAgc3RkOjpzaXplX3Qgcm91bmRVcChzdGQ6OnNpemVf
dCB4LCBzdGQ6OnNpemVfdCBtdWx0aXBsZSkgY29uc3Q7CisgICAgc3RkOjpzaXplX3Qgc3BhY2VS
ZXF1aXJlZChjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBtYXhWZXJ0
ZXgpIGNvbnN0OworCisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisgICAgQnVmZmVyQmFja0VuZCAq
bUJhY2tlbmQ7CisKKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICptU3RyZWFtQnVmZmVyOwor
CisgICAgYm9vbCBtRGlydHlDdXJyZW50VmFsdWVzOworICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50
VmFsdWVPZmZzZXQ7ICAgICAgICAgICAgLy8gT2Zmc2V0IHdpdGhpbiBtQ3VycmVudFZhbHVlQnVm
ZmVyIHRoYXQgdGhlIGN1cnJlbnQgYXR0cmlidXRlIHZhbHVlcyB3ZXJlIGxhc3QgbG9hZGVkIGF0
LgorICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1DdXJyZW50VmFsdWVCdWZmZXI7Cit9Owor
Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9I
XwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkv
YmFja2VuZC5oOiBBYnN0cmFjdCBjbGFzc2VzIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0
ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgorLy8gdGhhdCBtdXN0IGJlIGltcGxl
bWVudGVkIGJ5IGFueSBBUEktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgQU5HTEUuCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorCisjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCisKK25hbWVzcGFjZSBnbAoreworCit2b2lkICpUcmFuc2xhdGVkQnVmZmVyOjpt
YXAoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9mZnNldCkKK3sKKyAg
ICBBU1NFUlQocmVxdWlyZWRTcGFjZSA8PSBtQnVmZmVyU2l6ZSk7CisKKyAgICByZXNlcnZlU3Bh
Y2UocmVxdWlyZWRTcGFjZSk7CisKKyAgICAqb2Zmc2V0ID0gbUN1cnJlbnRQb2ludDsKKyAgICBt
Q3VycmVudFBvaW50ICs9IHJlcXVpcmVkU3BhY2U7CisKKyAgICByZXR1cm4gc3RyZWFtaW5nTWFw
KCpvZmZzZXQsIHJlcXVpcmVkU3BhY2UpOworfQorCit2b2lkIFRyYW5zbGF0ZWRCdWZmZXI6OnJl
c2VydmVTcGFjZShzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKQoreworICAgIGlmIChtQ3VycmVu
dFBvaW50ICsgcmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmVj
eWNsZSgpOworICAgICAgICBtQ3VycmVudFBvaW50ID0gMDsKKyAgICB9Cit9CisKK30KSW5kZXg6
IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9iYWNrZW5kLmg6IEFi
c3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQg
VHJhbnNsYXRlZEluZGV4QnVmZmVyCisvLyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYW55
IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KKworI2lmbmRlZiBMSUJHTEVT
VjJfR0VPTUVUUllfQkFDS0VORF9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfQkFDS0VO
RF9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1l
c3BhY2UgZ2wKK3sKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXI7CitjbGFzcyBUcmFuc2xh
dGVkSW5kZXhCdWZmZXI7CisKK3N0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKK3sKKyAgICBib29sIGlk
ZW50aXR5OworICAgIHN0ZDo6c2l6ZV90IG91dHB1dFZlcnRleFNpemU7CisgICAgdm9pZCAoKmNv
bnZlcnRBcnJheSkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXpl
X3Qgbiwgdm9pZCAqb3V0KTsKK307CisKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCit7Cisg
ICAgYm9vbCBlbmFibGVkOworICAgIGJvb2wgbm9uQXJyYXk7CisKKyAgICAvLyBUaGVzZSBhcmUg
dGhlIG9yaWdpbmFsIHVudHJhbnNsYXRlZCB2YWx1ZXMuIChPciBqdXN0IGhhdmUgc29tZSBzb3J0
IG9mIEJ1ZmZlckJhY2tFbmQ6OlRyYW5zbGF0ZWRUeXBlS2V5LikKKyAgICBHTGVudW0gdHlwZTsK
KyAgICBzdGQ6OnNpemVfdCBzaXplOworICAgIGJvb2wgbm9ybWFsaXplZDsKKworICAgIHN0ZDo6
c2l6ZV90IG9mZnNldDsKKworICAgIHN0ZDo6c2l6ZV90IHN0cmlkZTsgLy8gMCBtZWFucyBub3Qg
dG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAorCisgICAgc3RkOjpzaXplX3Qgc2Vt
YW50aWNJbmRleDsKKworICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmJ1ZmZlcjsKK307CisK
K2NsYXNzIEJ1ZmZlckJhY2tFbmQKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkJ1ZmZlckJh
Y2tFbmQoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0SW50SW5kaWNlcygpID0gMDsK
KworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVy
KHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZm
ZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSkgPSAw
OworICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcihz
dGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSkgPSAwOworICAgIHZpcnR1YWwgRm9ybWF0Q29u
dmVydGVyIGdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
Ym9vbCBub3JtYWxpemUpID0gMDsKKworICAgIC8vIEZvciBhbiBpZGVudGl0eS1tYXBwYWJsZSBz
dHJlYW0sIHZlcmlmeSB0aGF0IHRoZSBzdHJpZGUgYW5kIG9mZnNldCBhcmUgb2theS4KKyAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUs
IHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIEdMZW51bSBzZXR1cEluZGljZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRJbmRl
eERhdGEgJmluZGV4SW5mbykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwQXR0cmlidXRl
c1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykgPSAwOworfTsK
KworY2xhc3MgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJh
bnNsYXRlZEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IG1CdWZmZXJTaXplKHNpemUpLCBtQ3Vy
cmVudFBvaW50KDApIHsgfQorICAgIHZpcnR1YWwgflRyYW5zbGF0ZWRCdWZmZXIoKSB7IH0KKwor
ICAgIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyU2l6ZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkICptYXAoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAw
OworCisgICAgdm9pZCByZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSk7CisK
KyAgICB2b2lkICptYXAoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9m
ZnNldCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpz
aXplX3Qgc2l6ZSkgPSAwOworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgbUJ1ZmZlclNp
emU7CisgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRQb2ludDsKKworICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUcmFuc2xhdGVkQnVmZmVyKTsKK307CisKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0
ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhw
bGljaXQgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IFRyYW5zbGF0
ZWRCdWZmZXIoc2l6ZSkgeyB9Cit9OworCitjbGFzcyBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgOiBw
dWJsaWMgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNs
YXRlZEluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogVHJhbnNsYXRlZEJ1ZmZlcihzaXpl
KSB7IH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRf
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjEzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9keDkuaDogRGly
ZWN0M0QgOS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVk
VmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIuCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZ2VvbWV0cnkvZHg5LmgiCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCisjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9u
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKwor
bmFtZXNwYWNlCit7CisvLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlw
ZSB0byBEM0QgZGVjbCB0eXBlOgorLy8KKy8vIEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChD
YXN0KQorLy8gQllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJl
IGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKKy8vIFVOU0lHTkVEX0JZVEUgICAg
ICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQorLy8gVU5TSUdORURfQllURS1u
b3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBTSE9SVCAg
ICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCisvLyBTSE9SVC1ub3JtICAgICAgICAgICBT
SE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFVOU0lHTkVEX1NI
T1JUICAgICAgIEZMT0FUIChDYXN0KQorLy8gVU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5v
cm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gRklYRUQgKG5vdCBpbiBXZWJH
TCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKKy8vIEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJ
ZGVudGl0eSkKKworLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRv
IHRoZSBDIHR5cGVkZWYuIAordGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+IHN0cnVjdCBHTFRvQ1R5
cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0JZVEU+IHsgdHlwZWRl
ZiBHTGJ5dGUgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdO
RURfQllURT4geyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBH
TFRvQ1R5cGU8R0xfU0hPUlQ+IHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQg
dHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+IHsgdHlwZWRl
ZiBHTHVpbnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+
IHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7IH07CisKKy8vIFRoaXMgZGlmZmVycyBmcm9tIEQzRERF
Q0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUgZXhwYW5zaW9uIGlzIGFwcGxpZWQg
bGFzdC4pCitlbnVtIEQzRFZlcnRleFR5cGUKK3sKKyAgICBEM0RWVF9GTE9BVCwKKyAgICBEM0RW
VF9TSE9SVCwKKyAgICBEM0RWVF9TSE9SVF9OT1JNLAorICAgIEQzRFZUX1VCWVRFLAorICAgIEQz
RFZUX1VCWVRFX05PUk0sCisgICAgRDNEVlRfVVNIT1JUX05PUk0KK307CisKKy8vIEQzRFRvQ1R5
cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51bSBEM0RWZXJ0ZXhUeXBlKSB0byB0
aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IEQzRFR5cGU+
IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8
RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwordGVtcGxh
dGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRfTk9STT4geyB0eXBlZGVmIHNob3J0
IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURT4geyB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NU
eXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VU0hPUlRfTk9STT4geyB0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IHR5cGU7IH07CisKKy8vIEVuY29kZSB0aGUgdHlwZS9zaXplIGNvbWJp
bmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0eXBlL3NpemUgaXQgZXhwYW5kcyB0
byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIGZpbmFsIHNpemUu
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplPgorc3RydWN0IFdpZGVuUnVs
ZQoreworfTsKKwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX0ZM
T0FULCBzaXplPiAgICAgICAgICA6IGdsOjpOb1dpZGVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBn
bDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lk
ZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXpl
PiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEUs
IHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBn
bDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lk
ZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXpl
PiB7IH07CisKKy8vIFZlcnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5
cGUgZmxhZyBhbmQgdmVydGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0
eXBlICYgc2l6ZSBjb21iaW5hdGlvbi4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwg
aW50IHNpemU+CitzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzCit7Cit9OworCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGNhcGZsYWcsIHVuc2lnbmVkIGludCBkZWNsZmxhZz4KK3N0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXIKK3sKKyAgICBlbnVtIHsgY2FwZmxhZyA9IGNhcGZsYWcgfTsKKyAgICBl
bnVtIHsgZGVjbGZsYWcgPSBkZWNsZmxhZyB9OworfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQ
RV9GTE9BVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
RkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxE
M0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0
ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7
IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0s
IDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQ
RV9VQllURTROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JU
Mk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxE
M0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07CisKKworLy8gVmVy
dGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJl
ZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcyku
Cit0ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPgorc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nCit7Cit9OworCit0ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQs
IEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+CitzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmdCYXNlCit7CisgICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OworICAgIGVu
dW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRF
LCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZU
X0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAgICAg
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+
IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWRlbnRpdHkKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9T
SE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFs
aXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hP
UlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+
IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZpeGVkVG9GbG9hdAordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNl
PEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQorCisK
Ky8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lv
blJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUs
IElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgorLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNl
bHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCisKKy8vIEFsbW9zdCBhbGwg
Y2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVh
bGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBp
bmcpLgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25l
ZCBpbnQgdG9UeXBlPgorc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNhc3Q8dHlwZW5hbWUg
R0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0
eXBlPgoreworfTsKKworLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0
byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KK3RlbXBsYXRlIDxHTGVudW0gZnJv
bVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+
IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07
CisKKy8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVm
ZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9h
dCBydWxlcy4KK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1
ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9B
VD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKKworLy8gQSAyLXN0YWdlIGNv
bnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQg
bXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCisvLyB3aGV0aGVyIGl0IGlz
IG5vcm1hbGl6ZWQgb3Igbm90LgordGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4K
K3N0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyCit7Cit9OworCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgdHJ1ZT4gIDogZ2w6Ok5v
cm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
RGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBnbDo6U2ltcGxlRGVmYXVsdFZh
bHVlczxUPiB7IH07CisKKy8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEg
RDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQgCit0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgYm9vbCBub3JtYWxpemVkPgorc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0
VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8Ym9v
bCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXpl
ZD4gOiBnbDo6U2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OworCisvLyBQb2xpY3kgcnVs
ZXMgZm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIHRoZSBw
cmVmZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KKy8vIFRoZSBmYWxsYmFjayBjb252ZXJz
aW9uIHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVzdCBzdXBwb3J0
LgordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVtIHsgdHlwZSA9
IFQ6OnByZWZlcnJlZCB9OyB9OwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VGYWxsYmFj
ayB7IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKKworLy8gQ29udmVydGVyIHRpZXMg
aXQgYWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUgYW5kIGNob2lj
ZSBvZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKKy8vIGl0IHByb3ZpZGVzIGFsbCB0
aGUgbWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRlciwgdGhlIEQz
RENBUFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZworLy8gYW5kIHRoZSBEM0RERUNMVFlQ
RSBtZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRlY2xmbGFnLgor
dGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQgc2l6ZSwgdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgorc3RydWN0IENvbnZlcnRlcgor
ICAgIDogZ2w6OlZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBl
Pjo6dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVmZXJl
bmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUs
IHNpemU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJv
bVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Jt
YWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJl
ZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0
eXBlPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8
dHlwZW5hbWUgRDNEVG9DVHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJv
bVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgoreworcHJp
dmF0ZToKKyAgICBlbnVtIHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFw
cGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSB9OworICAgIGVudW0geyBkM2RzaXpl
ID0gV2lkZW5SdWxlPGQzZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07CisKK3B1YmxpYzoKKyAg
ICBlbnVtIHsgY2FwZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2Fw
ZmxhZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBk
M2RzaXplPjo6ZGVjbGZsYWcgfTsKK307CisKK30KKworbmFtZXNwYWNlIGdsCit7CitEeDlCYWNr
RW5kOjpEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmQzZGRl
dmljZSkKKyAgICA6IG1EZXZpY2UoZDNkZGV2aWNlKQoreworICAgIG1EZXZpY2UtPkFkZFJlZigp
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICsraSkKKyAg
ICB7CisgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IHRydWU7CisgICAgICAgIG1T
dHJlYW1GcmVxdWVuY3lbaV0gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOworICAgIH0K
KworICAgIG1TdHJlYW1GcmVxdWVuY3lbTUFYX1ZFUlRFWF9BVFRSSUJTXSA9IFNUUkVBTV9GUkVR
VUVOQ1lfVU5JTlNUQU5DRUQ7CisKKyAgICBEM0RDQVBTOSBjYXBzID0gY29udGV4dC0+Z2V0RGV2
aWNlQ2FwcygpOworCisgICAgSURpcmVjdDNEOSAqZDNkT2JqZWN0OworICAgIG1EZXZpY2UtPkdl
dERpcmVjdDNEKCZkM2RPYmplY3QpOworCisgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBpZGVu
dDsKKyAgICBkM2RPYmplY3QtPkdldEFkYXB0ZXJJZGVudGlmaWVyKGNhcHMuQWRhcHRlck9yZGlu
YWwsIDAsICZpZGVudCk7CisgICAgZDNkT2JqZWN0LT5SZWxlYXNlKCk7CisKKyAgICAvLyBJbnN0
YW5jaW5nIGlzIG1hbmRhdG9yeSBmb3IgYWxsIEhXIHdpdGggU00zIHZlcnRleCBzaGFkZXJzLCBi
dXQgYXZvaWQgaGFyZHdhcmUgd2hlcmUgaXQgZG9lcyBub3Qgd29yay4KKyAgICBtVXNlSW5zdGFu
Y2luZ0ZvclN0cmlkZVplcm8gPSAoY2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uID49IEQzRFZTX1ZF
UlNJT04oMywgMCkgJiYgaWRlbnQuVmVuZG9ySWQgIT0gMHg4MDg2KTsKKyAgICBtU3VwcG9ydElu
dEluZGljZXMgPSAoY2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNikpOworCisgICAgY2hl
Y2tWZXJ0ZXhDYXBzKGNhcHMuRGVjbFR5cGVzKTsKK30KKworRHg5QmFja0VuZDo6fkR4OUJhY2tF
bmQoKQoreworICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKK30KKworYm9vbCBEeDlCYWNrRW5kOjpz
dXBwb3J0SW50SW5kaWNlcygpCit7CisgICAgcmV0dXJuIG1TdXBwb3J0SW50SW5kaWNlczsKK30K
KworLy8gSW5pdGlhbGlzZSBhIFRyYW5zbGF0aW9uSW5mbworI2RlZmluZSBUUkFOU0xBVElPTih0
eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZl
cnJlZD46OmlkZW50aXR5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQ29u
dmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmZpbmFsU2l6ZSwgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHBy
ZWZlcnJlZD46OmNvbnZlcnRBcnJheSwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9LCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVy
dGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAorICAgIH0KKwor
I2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkg
ICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVy
cmVkPjo6Y2FwZmxhZywgXAorICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBV
c2VQcmVmZXJyZWQpLCAgICAgICAgXAorICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBz
aXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElP
TlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0
KSB9LCAgICAgXAorICAgIH0KKworY29uc3QgRHg5QmFja0VuZDo6VHJhbnNsYXRpb25EZXNjcmlw
dGlvbiBEeDlCYWNrRW5kOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRS
SUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4
KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KK3sKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
QllURSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUpLAorICAg
IFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfRklY
RUQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GTE9BVCkKK307CisKK3ZvaWQgRHg5
QmFja0VuZDo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBpKyspCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBrKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tp
XVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2libGVUcmFuc2xhdGlv
bnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlv
bnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2td
LmZhbGxiYWNrQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1RyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKkR4OUJhY2tFbmQ6
OmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHJldHVybiBuZXcg
RHg5VmVydGV4QnVmZmVyKG1EZXZpY2UsIHNpemUpOworfQorCitUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6
ZV90IHNpemUpCit7CisgICAgaWYgKG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybykKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyKG1EZXZpY2UsIHNpemUpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlclpl
cm9TdHJpZGVXb3JrYXJvdW5kKG1EZXZpY2UsIHNpemUpOworICAgIH0KK30KKworVHJhbnNsYXRl
ZEluZGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBz
aXplLCBHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gbmV3IER4OUluZGV4QnVmZmVyKG1EZXZp
Y2UsIHNpemUsIHR5cGUpOworfQorCisvLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJpYnV0
ZVR5cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCit1bnNpZ25lZCBpbnQgRHg5QmFja0Vu
ZDo6dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZJWEVEOiBy
ZXR1cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OworCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKKyAgICB9Cit9CisKK0Zvcm1hdENvbnZlcnRlciBE
eDlCYWNrRW5kOjpnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNp
emUsIGJvb2wgbm9ybWFsaXplKQoreworICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUlu
ZGV4KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZm9ybWF0Q29udmVydGVyOworfQorCitEM0RE
RUNMVFlQRSBEeDlCYWNrRW5kOjptYXBBdHRyaWJ1dGVUeXBlKEdMZW51bSB0eXBlLCBzdGQ6OnNp
emVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0
ZVR5cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFdLmQzZERlY2xUeXBlOwor
fQorCitib29sIER4OUJhY2tFbmQ6OnZhbGlkYXRlU3RyZWFtKEdMZW51bSB0eXBlLCBzdGQ6OnNp
emVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9mZnNldCkgY29uc3QK
K3sKKyAgICAvLyBEM0Q5IHJlcXVpcmVzIHRoZSBzdHJlYW0gb2Zmc2V0IGFuZCBzdHJpZGUgdG8g
YmUgYSBtdWx0aXBsZSBvZiBEV09SRC4KKyAgICByZXR1cm4gKHN0cmlkZSAlIHNpemVvZihEV09S
RCkgPT0gMCAmJiBvZmZzZXQgJSBzaXplb2YoRFdPUkQpID09IDApOworfQorCitJRGlyZWN0M0RW
ZXJ0ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyICp2YikgY29uc3QKK3sKKyAgICByZXR1cm4gdmIgPyBzdGF0aWNfY2FzdDxEeDlWZXJ0ZXhC
dWZmZXIqPih2YiktPmdldEJ1ZmZlcigpIDogTlVMTDsKK30KKworSURpcmVjdDNESW5kZXhCdWZm
ZXI5ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmliKSBj
b25zdAoreworICAgIHJldHVybiBpYiA/IHN0YXRpY19jYXN0PER4OUluZGV4QnVmZmVyKj4oaWIp
LT5nZXRCdWZmZXIoKSA6IE5VTEw7Cit9CisKK0dMZW51bSBEeDlCYWNrRW5kOjpzZXR1cEluZGlj
ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBt
RGV2aWNlLT5TZXRJbmRpY2VzKGdldER4QnVmZmVyKGluZGV4SW5mby5idWZmZXIpKTsKKyAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK0dMZW51bSBEeDlCYWNrRW5kOjpzZXR1cEF0dHJpYnV0
ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpCit7CisgICAg
SFJFU1VMVCBocjsKKworICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhf
QVRUUklCUysxXTsKKworICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICpuZXh0RWxlbWVudCA9ICZlbGVt
ZW50c1swXTsKKworICAgIGZvciAoQllURSBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlN0cmVhbSA9IGkgKyAxOyAgICAvLyBTdHJlYW0g
MCBpcyBza2lwcGVkIGJlY2F1c2UgRDNEIGRvZXMgbm90IHBlcm1pdCBpdCB0byBiZSBhbiBpbnN0
YW5jZWQgc3RyZWFtLgorICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk9mZnNldCA9IDA7CisgICAg
ICAgICAgICBuZXh0RWxlbWVudC0+VHlwZSA9IHN0YXRpY19jYXN0PEJZVEU+KG1hcEF0dHJpYnV0
ZVR5cGUoYXR0cmlidXRlc1tpXS50eXBlLCBhdHRyaWJ1dGVzW2ldLnNpemUsIGF0dHJpYnV0ZXNb
aV0ubm9ybWFsaXplZCkpOworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk1ldGhvZCA9IEQzRERF
Q0xNRVRIT0RfREVGQVVMVDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5Vc2FnZSA9IEQzRERF
Q0xVU0FHRV9URVhDT09SRDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5Vc2FnZUluZGV4ID0g
YXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4OworICAgICAgICAgICAgbmV4dEVsZW1lbnQrKzsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBl
bmQgPSBEM0RERUNMX0VORCgpOworICAgICpuZXh0RWxlbWVudCA9IGVuZDsKKworICAgIElEaXJl
Y3QzRFZlcnRleERlY2xhcmF0aW9uOSogdmVydGV4RGVjbGFyYXRpb247CisgICAgaHIgPSBtRGV2
aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJnZlcnRleERlY2xhcmF0aW9u
KTsKKyAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbih2ZXJ0ZXhEZWNsYXJhdGlvbik7
CisgICAgdmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIG1EZXZpY2UtPlNldFN0
cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKKworICAgIGJvb2wgbm9uQXJyYXlBdHRyaWJ1dGVz
ID0gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubm9uQXJyYXkpIG5vbkFycmF5QXR0
cmlidXRlcyA9IHRydWU7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZShp
ICsgMSwgZ2V0RHhCdWZmZXIoYXR0cmlidXRlc1tpXS5idWZmZXIpLCBhdHRyaWJ1dGVzW2ldLm9m
ZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAgICAgICAgICAgaWYgKCFtQXBwbGllZEF0
dHJpYkVuYWJsZWRbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRB
dHRyaWJFbmFibGVkW2ldID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQXBwbGllZEF0dHJpYkVuYWJsZWRb
aV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291
cmNlKGkgKyAxLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJs
ZWRbaV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8pCisgICAgeworICAgICAgICAvLyBXaGVuIHRo
ZXJlIGFyZSBubyBzdHJpZGUgemVybyBhdHRyaWJ1dGVzLCB3ZSBkaXNhYmxlIGluc3RhbmNpbmcg
c28gdGhhdCBEcmF3UHJpbWl0aXZlIGNhbiBiZSB1c2VkLgorCisgICAgICAgIGlmIChub25BcnJh
eUF0dHJpYnV0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5
WzBdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtU3RyZWFtRnJlcXVlbmN5WzBdID0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEOwor
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgRDNEU1RSRUFN
U09VUkNFX0lOREVYRUREQVRBIHwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLm5vbkFycmF5
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0
cmVhbUZyZXF1ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VEKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1G
cmVxdWVuY3lbaSsxXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VEOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSArIDEsIEQzRFNU
UkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVl
bmN5W2krMV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbaSsx
XSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RTVFJFQU1TT1VSQ0VfSU5E
RVhFRERBVEEgfCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTICsgMTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5W2ldICE9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5D
RUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVl
bmN5W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkLCBidXQgb3RoZXJ3aXNlIHRoZXJlIGlz
IGEgYnVnZ3kgZHJpdmVyIHRoYXQgd2lsbCBsZWF2ZSBpbnN0YW5jaW5nCisgICAgICAgICAgICAg
ICAgICAgIC8vIGVuYWJsZWQgZm9yIHRoZSBmaXJzdCBkcmF3IGFmdGVyIGl0IGhhcyBiZWVuIHR1
cm5lZCBvZmYuCisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoaSwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9f
RVJST1I7Cit9CisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6RHg5VmVydGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSkKKyAgICA6IFRyYW5z
bGF0ZWRWZXJ0ZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVh
dGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05M
WSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhy
ICE9IFNfT0spCisgICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBh
IHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6
YmFkX2FsbG9jKCk7CisgICAgfQorfQorCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OkR4
OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUs
IERXT1JEIHVzYWdlRmxhZ3MpCisgICAgOiBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHNpemUpCit7
CisgICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdl
RmxhZ3MsIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgIGlm
IChociAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRp
bmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0aHJvdyBz
dGQ6OmJhZF9hbGxvYygpOworICAgIH0KK30KKworCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZm
ZXI6On5EeDlWZXJ0ZXhCdWZmZXIoKQoreworICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsK
K30KKworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVy
OjpnZXRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtVmVydGV4QnVmZmVyOworfQorCit2
b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6Om1hcCgpCit7CisgICAgdm9pZCAqbWFw
UHRyOworCisgICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRyLCAwKTsKKworICAg
IHJldHVybiBtYXBQdHI7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjp1
bm1hcCgpCit7CisgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgRHg5QmFj
a0VuZDo6RHg5VmVydGV4QnVmZmVyOjpyZWN5Y2xlKCkKK3sKKyAgICB2b2lkICpkdW1teTsKKyAg
ICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAg
ICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5VmVy
dGV4QnVmZmVyOjpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBz
aXplKQoreworICAgIHZvaWQgKm1hcFB0cjsKKworICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zm
c2V0LCBzaXplLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKKworICAgIHJldHVybiBt
YXBQdHI7Cit9CisKKy8vIE5vcm1hbGx5IFZCcyBhcmUgY3JlYXRlZCB3aXRoIEQzRFVTQUdFX1dS
SVRFT05MWSB8IEQzRFVTQUdFX0RZTkFNSUMsIGJ1dCBzb21lIGhhcmR3YXJlICYgZHJpdmVycyB3
b24ndCByZW5kZXIKKy8vIGlmIGFueSBzdHJpZGUtemVybyBzdHJlYW1zIGFyZSBpbiBEM0RVU0FH
RV9EWU5BTUlDIFZCcywgc28gdGhpcyBwcm92aWRlcyBhIHdheSB0byBjcmVhdGUgc3VjaCBWQnMg
d2l0aCBvbmx5IEQzRFVTQUdFX1dSSVRFT05MWSBzZXQuCisvLyBEM0RMT0NLX0RJU0NBUkQgYW5k
IEQzRExPQ0tfTk9PVkVSV1JJVEUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIEQzRFVTQUdFX0RZTkFN
SUMgVkJzLCBzbyB3ZSBvdmVycmlkZSBtZXRob2RzIHRvIGF2b2lkIHVzaW5nIHRoZXNlIGZsYWdz
LgorRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OkR4OVZl
cnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
c3RkOjpzaXplX3Qgc2l6ZSkKKyAgICA6IER4OVZlcnRleEJ1ZmZlcihkZXZpY2UsIHNpemUsIEQz
RFVTQUdFX1dSSVRFT05MWSkKK3sKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZm
ZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6cmVjeWNsZSgpCit7Cit9CisKK3ZvaWQgKkR4OUJhY2tF
bmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpzdHJlYW1pbmdNYXAoc3Rk
OjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHZvaWQgKm1hcFB0cjsK
KworICAgIGdldEJ1ZmZlcigpLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgMCk7CisKKyAg
ICByZXR1cm4gbWFwUHRyOworfQorCitEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6RHg5SW5k
ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBHTGVu
dW0gdHlwZSkKKyAgICA6IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcihzaXplKQoreworICAgIEFTU0VS
VCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKTsK
KworICAgIEQzREZPUk1BVCBmb3JtYXQgPSAodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCkgPyBE
M0RGTVRfSU5ERVgxNiA6IEQzREZNVF9JTkRFWDMyOworCisgICAgSFJFU1VMVCBociA9IGRldmlj
ZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dS
SVRFT05MWSwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtSW5kZXhCdWZmZXIsIE5VTEwpOwor
ICAgIGlmIChociAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFs
bG9jYXRpbmcgYW4gaW5kZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0
aHJvdyBzdGQ6OmJhZF9hbGxvYygpOworICAgIH0KK30KKworRHg5QmFja0VuZDo6RHg5SW5kZXhC
dWZmZXI6On5EeDlJbmRleEJ1ZmZlcigpCit7CisgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7
Cit9CisKK0lEaXJlY3QzREluZGV4QnVmZmVyOSpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6
Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluZGV4QnVmZmVyOworfQorCit2b2lk
ICpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6bWFwKCkKK3sKKyAgICB2b2lkICptYXBQdHI7
CisKKyAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwgMCk7CisKKyAgICByZXR1
cm4gbWFwUHRyOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjp1bm1hcCgp
Cit7CisgICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpE
eDlJbmRleEJ1ZmZlcjo6cmVjeWNsZSgpCit7CisgICAgdm9pZCAqZHVtbXk7CisgICAgbUluZGV4
QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICBtSW5kZXhC
dWZmZXItPlVubG9jaygpOworfQorCit2b2lkICpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6
c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAg
ICB2b2lkICptYXBQdHI7CisKKyAgICBtSW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAm
bWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKKworICAgIHJldHVybiBtYXBQdHI7Cit9CisK
K30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTM3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9keDkuaDogRGlyZWN0M0Qg
OS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4
QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dF
T01FVFJZX0RYOV9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hfCisKKyNpbmNs
dWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNz
IER4OUJhY2tFbmQgOiBwdWJsaWMgQnVmZmVyQmFja0VuZAoreworICBwdWJsaWM6CisgICAgZXhw
bGljaXQgRHg5QmFja0VuZChDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkM2Rk
ZXZpY2UpOworICAgIH5EeDlCYWNrRW5kKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydElu
dEluZGljZXMoKTsKKworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRl
VmVydGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZl
cnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBz
aXplKTsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqY3JlYXRlSW5kZXhCdWZm
ZXIoc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgRm9ybWF0Q29u
dmVydGVyIGdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
Ym9vbCBub3JtYWxpemUpOworCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlU3RyZWFtKEdMZW51
bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90
IG9mZnNldCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEluZGljZXNQcmVEcmF3
KGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbyk7CisgICAgdmlydHVhbCBHTGVu
dW0gc2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRy
aWJ1dGVzKTsKKworICBwcml2YXRlOgorICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisK
KyAgICBib29sIG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybzsKKyAgICBib29sIG1TdXBwb3J0
SW50SW5kaWNlczsKKworICAgIGJvb2wgbUFwcGxpZWRBdHRyaWJFbmFibGVkW01BWF9WRVJURVhf
QVRUUklCU107CisKKyAgICBlbnVtIFN0cmVhbUZyZXF1ZW5jeQorICAgIHsKKyAgICAgICAgU1RS
RUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRCA9IDAsCisgICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lf
SU5ERVhFRCwKKyAgICAgICAgU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQKKyAgICB9OworCisg
ICAgU3RyZWFtRnJlcXVlbmN5IG1TdHJlYW1GcmVxdWVuY3lbTUFYX1ZFUlRFWF9BVFRSSUJTKzFd
OworCisgICAgc3RydWN0IFRyYW5zbGF0aW9uSW5mbworICAgIHsKKyAgICAgICAgRm9ybWF0Q29u
dmVydGVyIGZvcm1hdENvbnZlcnRlcjsKKyAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7
CisgICAgfTsKKworICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsK
KworICAgIFRyYW5zbGF0aW9uSW5mbyBtQXR0cmlidXRlVHlwZXNbTlVNX0dMX1ZFUlRFWF9BVFRS
SUJfVFlQRVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgo
KV1bbm9ybWFsaXplZF1bc2l6ZS0xXQorCisgICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRp
b24KKyAgICB7CisgICAgICAgIERXT1JEIGNhcHNGbGFnOworICAgICAgICBUcmFuc2xhdGlvbklu
Zm8gcHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgVHJhbnNsYXRpb25JbmZvIGZhbGxiYWNr
Q29udmVyc2lvbjsKKyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVy
YXRlIG1BdHRyaWJ1dGVUeXBlcy4KKyAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNjcmlw
dGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJd
WzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXpl
ZF1bc2l6ZS0xXQorCisgICAgdm9pZCBjaGVja1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKTsK
KworICAgIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUpIGNvbnN0OworCisgICAg
Y2xhc3MgRHg5VmVydGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIKKyAg
ICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIER4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpOworICAgICAgICB2aXJ0dWFsIH5EeDlWZXJ0
ZXhCdWZmZXIoKTsKKworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZmZXIo
KSBjb25zdDsKKworICAgICAgcHJvdGVjdGVkOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdz
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
dW5tYXAoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNp
emUpOworCisgICAgICBwcml2YXRlOgorICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpt
VmVydGV4QnVmZmVyOworICAgIH07CisKKyAgICBjbGFzcyBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3Ry
aWRlV29ya2Fyb3VuZCA6IHB1YmxpYyBEeDlWZXJ0ZXhCdWZmZXIKKyAgICB7CisgICAgICBwdWJs
aWM6CisgICAgICAgIER4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSk7CisKKyAgICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICpz
dHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKKyAgICB9
OworCisgICAgY2xhc3MgRHg5SW5kZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEluZGV4QnVm
ZmVyCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBEeDlJbmRleEJ1ZmZlcihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKTsKKyAgICAg
ICAgdmlydHVhbCB+RHg5SW5kZXhCdWZmZXIoKTsKKworICAgICAgICBJRGlyZWN0M0RJbmRleEJ1
ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZp
cnR1YWwgdm9pZCAqbWFwKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFt
aW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7CisKKyAgICAgIHBy
aXZhdGU6CisgICAgICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOworICAg
IH07CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXREeEJ1ZmZlcihUcmFuc2xhdGVk
VmVydGV4QnVmZmVyICp2YikgY29uc3Q7CisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRE
eEJ1ZmZlcihUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmliKSBjb25zdDsKKworICAgIEQzRERFQ0xU
WVBFIG1hcEF0dHJpYnV0ZVR5cGUoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wg
bm9ybWFsaXplZCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9N
RVRSWV9EWDlfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29u
dmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVy
dGV4Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9t
ZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGli
cmFyeSBvZiB2ZXJ0ZXggY29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVp
bGQKKy8vIHRoZSBGb3JtYXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29u
dmVyc2lvbiBzeXN0ZW0uCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWENPTlZF
UlNJT05fSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWENPTlZFUlNJT05fSF8K
KworI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIgLy8gRGVmaW5lcyBJbmRleAorCituYW1lc3BhY2UgZ2wKK3sKKwor
Ly8gQ29udmVyc2lvbiB0eXBlczoKKy8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVl
IGlmIHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtLCBmYWxzZSBvdGhlcndpc2UKKy8vIHN0
YXRpYyBVIGNvbnZlcnQoVCk6IGNvbnZlcnQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBpbnB1
dCB0eXBlIHRvIHRoZSBvdXRwdXQgdHlwZQorLy8gdHlwZWRlZiAuLi4gT3V0cHV0VHlwZTogdGhl
IHR5cGUgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJzaW9uCisKK3RlbXBsYXRlIDxjbGFzcyBUPgor
c3RydWN0IElkZW50aXR5Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVl
OworCisgICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgVCBjb252ZXJ0KFQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFz
cyBGcm9tVCwgY2xhc3MgVG9UPgorc3RydWN0IENhc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBpZGVudGl0eSA9IGZhbHNlOworCisgICAgdHlwZWRlZiBUb1QgT3V0cHV0VHlwZTsKKworICAg
IHN0YXRpYyBUb1QgY29udmVydChGcm9tVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFRvVD4oeCk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3Qg
Q2FzdDxULCBUPgoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1ZTsKKwor
ICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChUIHgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCk7CisgICAgfQorfTsKKwordGVt
cGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgTm9ybWFsaXplCit7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgaWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKwor
ICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAgIHR5cGVkZWYgc3Rk
OjpudW1lcmljX2xpbWl0czxUPiBOTDsKKyAgICAgICAgZmxvYXQgZiA9IHN0YXRpY19jYXN0PGZs
b2F0Pih4KTsKKworICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IGF0IGNvbXBpbGUgdGlt
ZQorICAgICAgICAgICAgLy8gc3RhdGljIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBp
dCB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgaGVyZSwgc3RvcmVzIGl0IHRvIG1lbW9yeSB3aXRoIHN0
YXRpYyBndWFyZCBhbmQgYWxsIHRoYXQuCisgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29y
ID0gMS4wZi8oMipzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSsxKTsKKyAgICAgICAgICAg
IHJldHVybiAoMipmKzEpKmRpdmlzb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZi9OTDo6bWF4KCk7CisgICAgICAgIH0KKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRnJvbVR5cGUsIHN0ZDo6c2l6ZV90IFNjYWxlQml0cz4KK3N0
cnVjdCBGaXhlZFRvRmxvYXQKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZh
bHNlOworCisgICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZsb2F0
IGNvbnZlcnQoRnJvbVR5cGUgeCkKKyAgICB7CisgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PEZyb21UeXBlPigxKSA8PCBT
Y2FsZUJpdHMpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpICogZGl2aXNv
cjsKKyAgICB9Cit9OworCisvLyBXaWRlbiB0eXBlczoKKy8vIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgaW5pdGlhbFdpZHRoOiBudW1iZXIgb2YgY29tcG9uZW50cyBiZWZvcmUgY29udmVyc2lv
bgorLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmaW5hbFdpZHRoOiBudW1iZXIgb2YgY29t
cG9uZW50cyBhZnRlciBjb252ZXJzaW9uCisKKy8vIEZsb2F0IGlzIHN1cHBvcnRlZCBhdCBhbnkg
c2l6ZS4KK3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IE5vV2lkZW4KK3sKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE47Cit9OworCisvLyBTSE9SVCwgbm9ybS1TSE9S
VCwgbm9ybS1VTlNJR05FRF9TSE9SVCBhcmUgc3VwcG9ydGVkIGJ1dCBvbmx5IHdpdGggMiBvciA0
IGNvbXBvbmVudHMKK3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9FdmVu
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOKyhOJjEpOworfTsKKwordGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0ZvdXIKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzaXplX3QgZmluYWxXaWR0aCA9IDQ7Cit9OworCisvLyBNb3N0IHR5cGVzIGhhdmUgMCBhbmQg
MSB0aGF0IGFyZSBqdXN0IHRoYXQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBTaW1wbGVE
ZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQgemVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMSk7
IH0KK307CisKKy8vIEJ1dCBub3JtYWxpc2VkIHR5cGVzIG9ubHkgc3RvcmUgWzAsMV0gb3IgWy0x
LDFdIHNvIDEuMCBpcyByZXByZXNlbnRlZCBieSB0aGUgbWF4IHZhbHVlLgordGVtcGxhdGUgPGNs
YXNzIFQ+CitzdHJ1Y3QgTm9ybWFsaXplZERlZmF1bHRWYWx1ZXMKK3sKKyAgICBzdGF0aWMgVCB6
ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAgICBzdGF0aWMgVCBvbmUoKSB7
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQorfTsKKworLy8gQ29udmVy
dGVyOgorLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBp
ZGVudGl0eSB0cmFuc2Zvcm0gKHdpdGggbm8gd2lkZW5pbmcpCisvLyBzdGF0aWMgY29uc3Qgc3Rk
OjpzaXplX3QgZmluYWxTaXplOiBudW1iZXIgb2YgYnl0ZXMgcGVyIG91dHB1dCB2ZXJ0ZXgKKy8v
IHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3Ry
aWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOiBjb252ZXJ0IGFuIGFycmF5IG9mIHZlcnRp
Y2VzLiBJbnB1dCBtYXkgYmUgc3RyaWRlZCwgYnV0IG91dHB1dCB3aWxsIGJlIHVuc3RyaWRlZC4K
KwordGVtcGxhdGUgPGNsYXNzIEluVCwgY2xhc3MgV2lkZW5SdWxlLCBjbGFzcyBDb252ZXJ0ZXIs
IGNsYXNzIERlZmF1bHRWYWx1ZVJ1bGUgPSBTaW1wbGVEZWZhdWx0VmFsdWVzPEluVD4gPgorc3Ry
dWN0IFZlcnRleERhdGFDb252ZXJ0ZXIKK3sKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnZlcnRl
cjo6T3V0cHV0VHlwZSBPdXRwdXRUeXBlOworICAgIHR5cGVkZWYgSW5UIElucHV0VHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gKFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRo
ID09IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCkgJiYgQ29udmVydGVyOjppZGVudGl0eTsKKyAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplID0gV2lkZW5SdWxlOjpmaW5hbFdpZHRo
ICogc2l6ZW9mKE91dHB1dFR5cGUpOworCisgICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNv
bnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3QgbiwgT3V0
cHV0VHlwZSAqb3V0KQorICAgIHsKKyAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8
IG47IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgSW5wdXRUeXBlICplaW4gPSBw
b2ludGVyQWRkQnl0ZXMoaW4sIGkgKiBzdHJpZGUpOworCisgICAgICAgICAgICBjb3B5Q29tcG9u
ZW50KG91dCwgZWluLCAwLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxl
Ojp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDEsIHN0YXRp
Y19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAg
ICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVm
YXVsdFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwg
ZWluLCAzLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjpvbmUoKSkp
OworCisgICAgICAgICAgICBvdXQgKz0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBz
dGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb252ZXJ0QXJyYXkoc3RhdGljX2Nhc3Q8Y29uc3QgSW5wdXRUeXBlKj4oaW4p
LCBzdHJpZGUsIG4sIHN0YXRpY19jYXN0PE91dHB1dFR5cGUqPihvdXQpKTsKKyAgICB9CisKKyAg
cHJpdmF0ZToKKyAgICAvLyBBZHZhbmNlIHRoZSBnaXZlbiBwb2ludGVyIGJ5IGEgbnVtYmVyIG9m
IGJ5dGVzIChub3QgcG9pbnRlZC10byBlbGVtZW50cykuCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+
CisgICAgc3RhdGljIFQgKnBvaW50ZXJBZGRCeXRlcyhUICpiYXNlUHRyLCBzdGQ6OnNpemVfdCBu
dW1CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQgKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VQdHIpICsgbnVtQnl0ZXMpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGNvcHlDb21wb25lbnQoT3V0cHV0VHlwZSAqb3V0LCBjb25zdCBJbnB1
dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBlbGVtZW50aW5kZXgsIE91dHB1dFR5cGUgZGVmYXVsdHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFdpZGVuUnVsZTo6ZmluYWxXaWR0aCA+IGVsZW1lbnRp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRo
ID4gZWxlbWVudGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dFtlbGVt
ZW50aW5kZXhdID0gQ29udmVydGVyOjpjb252ZXJ0KGluW2VsZW1lbnRpbmRleF0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dFtlbGVtZW50aW5kZXhdID0gZGVmYXVsdHZhbHVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfVkVS
VEVYQ09OVkVSU0lPTl9IXwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63268</attachid>
            <date>2010-08-02 15:23:09 -0700</date>
            <delta_ts>2010-08-02 15:40:24 -0700</delta_ts>
            <desc>ANGLE source code and xcodeproject. Contains no changes to WebCore.</desc>
            <filename>just_angle</filename>
            <type>text/plain</type>
            <size>1887003</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorMjAxMC0wOC0wMiAgUGF1bCBTYXdheWEgIDxwc2F3YXlhQGFwcGxlLmNvbT4KKworQWRkZWQg
QU5HTEUgc291cmNlIGZyb20gcmVwb3NpdG9yeS4gQ29udGFpbnMgbm8gbmV3IGNoYW5nZXMgZm9y
IHNoYWRlciB2YWxpZGF0aW9uLiBBZGRlZCBhIG5ldyBYY29kZSBwcm9qZWN0IGZvciBidWlsZGlu
ZyB3aXRoIHRoZSByZXN0IG9mIFdlYktpdC4KSW5kZXg6IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjI3IEBACisvLyAhJCpVVEY4KiQhCit7
CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9u
ID0gNDI7CisJb2JqZWN0cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
KwkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4
OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CisJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2
OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OworCQlGQjM5
RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIElu
Zm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxp
emUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQlGQjM5RDI3
RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyog
SW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07
CisJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzQxMjAwRjM1QTAwMDg4
RTY5IC8qIGludGVybU91dC5jcHAgKi87IH07CisJCUZCMzlEMjg0MTIwMEYzNUEwMDA4OEU2OSAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlGQjM5RDI4ODEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzkx
MjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJRkIzOUQyOEEx
MjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuY3BwICovOyB9OworCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25z
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUZCMzlEMjhG
MTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0MDEyMDBGMzVBMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovOyB9OworCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFs
bG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQlGQjM5RDI5
MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLzsg
fTsKKwkJRkIzOUQyOTYxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcC5jICovOyB9OworCQlGQjM5RDI5ODEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0QTEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCMzlEMjk5MTIwMEYzNUEw
MDA4OEU2OSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMjRCMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJ
RkIzOUQyOUQxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBz
Y2FubmVyLmMgKi87IH07CisJCUZCMzlEMkEwMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1MjEy
MDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovOyB9OworCQlGQjM5RDJBMjEyMDBGMzVBMDAw
ODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi87IH07CisJCUZC
MzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEyMDBGMzVBMDAwODhF
NjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhF
NjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi87
IH07CisJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKKwkJRkIzOUQyQUExMjAwRjM1QTAwMDg4
RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAg
Ki87IH07CisJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEy
MDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OworCQlGQjM5RDJCMTEy
MDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZv
bGRTZWxlY3QuY3BwICovOyB9OworCQlGQjM5RDJDMjEyMDBGM0VGMDAwODhFNjkgLyogUmVzb3Vy
Y2VMaW1pdHMuaCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZCMzlEMkJFMTIwMEYzRTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICovOyB9OworCQlG
QjM5RDJDMzEyMDBGM0VGMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8q
IFNoYWRlckxhbmcuaCAqLzsgfTsKKwkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xh
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovOyB9OworCQlGQjM5RDcyNDEy
MDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQ3MjIxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xh
bmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzOUQ3MjUxMjAxMDMyNDAwMDg4RTY5IC8qIGdsc2xhbmdf
dGFiLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDcyMTEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJRkIzOUQ3NkQx
MjAxMTBGQzAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRTEyMDBGM0U2MDAwODhFNjkgLyogUmVz
b3VyY2VMaW1pdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07
IH07CisJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAw
ODhFNjkgLyogU2hhZGVyTGFuZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8q
IGxpYmFuZ2xlLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFuZ2xlLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUZCMzlEMTg2MTIwMEYyNjIwMDA4
OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFz
ZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTg3MTIwMEYyNjIw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE4
QTEyMDBGMjYyMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVnLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRl
YnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5n
LmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xhbmcubDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8qIGdsc2xhbmcu
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5r
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5
MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4RTY5IC8qIElu
aXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5MzEyMDBGMjYyMDAwODhFNjkg
LyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0
aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFs
aXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5NjEyMDBG
MjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1
ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDE5ODEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUExMjAwRjI2MjAwMDg4
RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxpbnRlcm1l
ZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUMxMjAwRjI2MjAw
MDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RDEyMDBGMjYyMDAwODhFNjkg
Lyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVk
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RTEyMDBGMjYyMDAwODhF
NjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93
aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBvc3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBMTEyMDBGMjYyMDAwODhFNjkg
LyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRH
TFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEyMTIwMEYyNjIwMDA4
OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlQ29uc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1
ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQx
QTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBNjEyMDBGMjYyMDAwODhFNjkgLyog
UGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTcxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFFMTIw
MEYyNjIwMDA4OEU2OSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFGMTIwMEYyNjIwMDA4
OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bw
c3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIwMTIwMEYyNjIw
MDA4OEU2OSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVt
b3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIxMTIwMEYyNjIwMDA4
OEU2OSAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbWVtb3J5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIyMTIwMEYyNjIwMDA4OEU2
OSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIzMTIwMEYyNjIwMDA4OEU2OSAv
KiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHByZXByb2Nl
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjQxMjAwRjI2MjAwMDg4
RTY5IC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2Nhbm5l
ci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhF
NjkgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2
OSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2xnbG9i
YWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI3MTIwMEYyNjIwMDA4
OEU2OSAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHN5bWJv
bHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjgxMjAwRjI2MjAwMDg4
RTY5IC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3ltYm9s
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQTEyMDBGMjYyMDAwODhFNjkg
LyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyog
UXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhFNjkgLyogUmVt
b3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBTaGFkZXJM
YW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzAxMjAwRjI2MjAw
MDg4RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUMxMTIwMEYyNjIw
MDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFu
c2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IHRyYW5zbGF0
b3JfY29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0Mx
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5J
bmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFD
RTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMDEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMzEyMDBGMjYyMDAwODhF
NjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
Zm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFENDEyMDBG
MjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyMTEyMDBGMzVB
MDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMjIxMjAw
RjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5sZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxp
emUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJEMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0
aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJFMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2Jh
bHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVy
bWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50ZXJtZWRpYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2
OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
aW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzUxMjAw
RjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhFNjkgLyog
TU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNs
dWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nz
b3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nz
b3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQTEy
MDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xT
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFy
c2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNv
bnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDAxMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QTEyMDBG
MzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QjEy
MDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QzEyMDBG
MzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RDEyMDBGMzVB
MDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RTEyMDBGMzVBMDAw
ODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBw
cmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjRGMTIwMEYz
NUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTAxMjAwRjM1
QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
c2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1MTEyMDBGMzVB
MDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1MjEyMDBG
MzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGgg
PSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjUzMTIwMEYz
NUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTQxMjAwRjM1
QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSB0
b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTUxMjAwRjM1QTAw
MDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB0b2tl
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJl
bW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjVCMTIw
MEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUMx
MjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjZD
MTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkQxMjAw
RjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0ZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZXNvdXJjZUxpbWl0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDcyMDEyMDEwMzIwMDAwODhFNjkg
LyogZ2xzbGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBnbHNs
YW5nLmNwcDsgcGF0aCA9IHNyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3Rh
Yi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRo
ID0gc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZ190YWIuY3BwOyBwYXRoID0g
c3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0YxMjAwRjBFMzAwMDg4RTY5
IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNl
Y3Rpb24gKi8KKwkJRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29t
cGlsZXIgKi8sCisJCQkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLywKKwkJ
CQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLywKKwkJCQlGQjM5
RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJj
ZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQy
QkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xBTkcgKi8sCisJCQkJRkIzOUQxODUxMjAwRjI2MjAw
MDg4RTY5IC8qIGNvbXBpbGVyICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyog
SW50ZXJtZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovLAorCQkJCUZC
MzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJCUZCMzlENzIy
MTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9
IEludGVybWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5
RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJh
bmdsZS5hICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQxODYx
MjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUZCMzlEMTg3MTIwMEYyNjIw
MDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxODgxMjAwRjI2MjAwMDg4
RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKKwkJCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkg
LyogQ29tbW9uLmggKi8sCisJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50
VW5pb24uaCAqLywKKwkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuY3BwICov
LAorCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlE
MThEMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQxOEUxMjAwRjI2
MjAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkg
LyogSW5mb1NpbmsuY3BwICovLAorCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZv
U2luay5oICovLAorCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNw
cCAqLywKKwkJCQlGQjM5RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAor
CQkJCUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJ
CQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZC
MzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZC
MzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJ
CQkJRkIzOUQxOTcxMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJ
RkIzOUQxOTgxMjAwRjI2MjAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlE
MTk5MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMTlBMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQxOUIxMjAw
RjI2MjAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQxOUMxMjAw
RjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDE5RDEyMDBGMjYyMDAwODhFNjkg
Lyogb3NpbmNsdWRlLmggKi8sCisJCQkJRkIzOUQxOUUxMjAwRjI2MjAwMDg4RTY5IC8qIG9zc291
cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlGQjM5RDE5RjEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3Vy
Y2Vfd2luLmNwcCAqLywKKwkJCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xT
TC5jcHAgKi8sCisJCQkJRkIzOUQxQTExMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAq
LywKKwkJCQlGQjM5RDFBMjEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0SExTTC5jcHAgKi8sCisJ
CQkJRkIzOUQxQTMxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlGQjM5
RDFBNDEyMDBGMjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQxQTUx
MjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDFBNjEyMDBG
MjYyMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDFBNzEyMDBGMjYyMDAw
ODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDFBODEyMDBGMjYyMDAwODhFNjkg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJRkIzOUQxQTkxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKKwkJCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAorCQkJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAorCQkJCUZCMzlEMUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKKwkJCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5
RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDFDMTEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMUMyMTIwMEYyNjIw
MDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0MxMjAwRjI2MjAw
MDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0QxMjAwRjI2
MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDFDRTEyMDBGMjYy
MDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDFDRjEyMDBGMjYyMDAw
ODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4
OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAorCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2
OSAvKiBUeXBlcy5oICovLAorCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRT
ZWxlY3QuY3BwICovLAorCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxl
Y3QuaCAqLywKKwkJCQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCisJ
CQkpOworCQkJaW5jbHVkZUluSW5kZXggPSAwOworCQkJbmFtZSA9IGNvbXBpbGVyOworCQkJcGF0
aCA9IHNyYy9jb21waWxlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZC
MzlEMUE5MTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAv
KiBhdG9tLmMgKi8sCisJCQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLywK
KwkJCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovLAorCQkJCUZCMzlE
MUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLywKKwkJCQlGQjM5RDFBRTEyMDBGMjYyMDAw
ODhFNjkgLyogY3BwLmggKi8sCisJCQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0
cnVjdC5jICovLAorCQkJCUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLywK
KwkJCQlGQjM5RDFCMTEyMDBGMjYyMDAwODhFNjkgLyogbWVtb3J5LmggKi8sCisJCQkJRkIzOUQx
QjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovLAorCQkJCUZCMzlEMUIzMTIwMEYyNjIw
MDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8sCisJCQkJRkIzOUQxQjQxMjAwRjI2MjAwMDg4RTY5
IC8qIHNjYW5uZXIuYyAqLywKKwkJCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5l
ci5oICovLAorCQkJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLywK
KwkJCQlGQjM5RDFCNzEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5jICovLAorCQkJCUZCMzlE
MUI4MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8sCisJCQkJRkIzOUQxQjkxMjAwRjI2
MjAwMDg4RTY5IC8qIHRva2Vucy5jICovLAorCQkJCUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAv
KiB0b2tlbnMuaCAqLywKKwkJCSk7CisJCQlpbmNsdWRlSW5JbmRleCA9IDA7CisJCQlwYXRoID0g
cHJlcHJvY2Vzc29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQy
MjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5
cGVzLmggKi8sCisJCQkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNw
cCAqLywKKwkJCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8sCisJCQkJ
RkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQlGQjM5
RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlEMjI3MTIwMEYz
NUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMjI4MTIwMEYzNUEwMDA4OEU2OSAv
KiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQyMjkxMjAwRjM1QTAwMDg4RTY5IC8qIGdsc2xhbmcu
eSAqLywKKwkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAor
CQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAorCQkJCUZCMzlE
MjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5RDIyRDEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMjJFMTIwMEYzNUEw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDIyRjEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQyMzIxMjAwRjM1QTAw
MDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4
RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRl
cm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2Fs
aW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAu
aCAqLywKKwkJCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCisJ
CQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJ
CQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlG
QjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJRkIzOUQy
M0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5RDIzRjEyMDBG
MzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQyNDAxMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDI0MTEyMDBGMzVBMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFs
bG9jLmggKi8sCisJCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAq
LywKKwkJCQlGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICov
LAorCQkJCUZCMzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAor
CQkJCUZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlG
QjM5RDI1OTEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUZCMzlEMjVB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5RDI1QjEyMDBG
MzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhF
NjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAv
KiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5z
bGF0b3JHTFNMLmggKi8sCisJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmgg
Ki8sCisJCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8s
CisJCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJ
CUZCMzlEMjZGMTIwMEYzNUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLywKKwkJCSk7CisJCQluYW1l
ID0gY29tcGlsZXI7CisJCQlwYXRoID0gc3JjL2NvbXBpbGVyOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3Nv
ciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQy
NDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLywKKwkJCQlGQjM5RDI0NjEyMDBGMzVBMDAw
ODhFNjkgLyogYXRvbS5oICovLAorCQkJCUZCMzlEMjQ3MTIwMEYzNUEwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8sCisJCQkJRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jICovLAorCQkJ
CUZCMzlEMjQ5MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuaCAqLywKKwkJCQlGQjM5RDI0QTEyMDBG
MzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJRkIzOUQyNEIxMjAwRjM1QTAwMDg4
RTY5IC8qIG1lbW9yeS5jICovLAorCQkJCUZCMzlEMjRDMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1v
cnkuaCAqLywKKwkJCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCisJ
CQkJRkIzOUQyNEUxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlGQjM5
RDI0RjEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jICovLAorCQkJCUZCMzlEMjUwMTIwMEYz
NUEwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8sCisJCQkJRkIzOUQyNTExMjAwRjM1QTAwMDg4RTY5
IC8qIHNsZ2xvYmFscy5oICovLAorCQkJCUZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1i
b2xzLmMgKi8sCisJCQkJRkIzOUQyNTMxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywK
KwkJCQlGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi8sCisJCQkJRkIzOUQy
NTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBwcmVw
cm9jZXNzb3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDJCRDEy
MDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGlt
aXRzLmggKi8sCisJCQkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAq
LywKKwkJCSk7CisJCQluYW1lID0gR0xTTEFORzsKKwkJCXBhdGggPSBpbmNsdWRlL0dMU0xBTkc7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rp
b24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlGQjM5
RDc3QjEyMDExMTBDMDAwODhFNjkgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEhlYWRl
cnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJCUZCMzlENzZEMTIwMTEwRkMwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcu
aCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJRkIzOUQwRDAxMjAwRjBF
MzAwMDg4RTY5IC8qIGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZCMzlEMEQ2MTIwMEYxMUUwMDA4OEU2OSAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovOworCQkJ
YnVpbGRQaGFzZXMgPSAoCisJCQkJRkIzOUQ3N0IxMjAxMTEwQzAwMDg4RTY5IC8qIEhlYWRlcnMg
Ki8sCisJCQkJRkIzOUQwREUxMjAwRjE5MTAwMDg4RTY5IC8qIEFjdGlvbiAiZmxleF9nbHNsYW5n
IiAqLywKKwkJCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogQWN0aW9uICJiaXNvbl9nbHNs
YW5nIiAqLywKKwkJCQlGQjM5RDBDRTEyMDBGMEUzMDAwODhFNjkgLyogU291cmNlcyAqLywKKwkJ
CQlGQjM5RDBDRjEyMDBGMEUzMDAwODhFNjkgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQli
dWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1l
ID0gYW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9
IEZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICovOworCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CisvKiBF
bmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0
aW9uICovCisJCUZCMzlEMDcwMTIwMEVEOTIwMDA4OEU2OSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9
IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIz
OUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
UHJvamVjdCAiQU5HTEUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40
IjsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJbWFpbkdyb3VwID0gRkIzOUQw
NkUxMjAwRUQ5MjAwMDg4RTY5OworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXByb2plY3RS
b290ID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCUZCMzlEMEQwMTIwMEYwRTMwMDA4OEU2OSAv
KiBhbmdsZSAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCisK
Ky8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUZCMzlEMERF
MTIwMEYxOTEwMDA4OEU2OSAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7CisJCQlpc2Eg
PSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKKwkJ
CWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGlsZXIvZ2xzbGFu
Zy5sLAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIiOworCQkJb3V0
cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5jcHAiLAorCQkJ
KTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQ
YXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcg
ZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxuZWNobyBub3RlOiAke0lOVEVSTUVESUFURV9E
SVJ9XG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0ke0lOVEVSTUVE
SUFURV9ESVJ9L2dsc2xhbmcuY3BwXCIgc3JjL2NvbXBpbGVyL2dsc2xhbmcubFxuZXhpdCAxIjsK
KwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhF
NjkgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2Ny
aXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJCWNvbXBpbGVyL2dsc2xhbmcueSwK
KwkJCSk7CisJCQluYW1lID0gIkFjdGlvbiBcImJpc29uX2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQ
YXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5jcHAiLAorCQkJ
CSIkKElOVEVSTUVESUFURV9ESVIpL2dsc2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsK
KwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgYmlzb24gb24gY29tcGls
ZXIvZ2xzbGFuZy55XCJcbmV4ZWMgYmlzb24gLS1uby1saW5lcyBcIi0tZGVmaW5lcz0ke0lOVEVS
TUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0b249eWFjYy5jXCIgXCItLW91
dHB1dD0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNwcFwiIHNyYy9jb21waWxlci9n
bHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworLyog
RW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFNv
dXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0UxMjAwRjBFMzAwMDg4RTY5IC8q
IFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjM5RDJDMjEyMDBG
M0VGMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlE
NzIzMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZC
MzlENzI1MTIwMTAzMjQwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZCMzlEMkMzMTIwMEYzRUYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gU291
cmNlcyAqLywKKwkJCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2lu
ay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3QjEyMDBGMzVBMDAwODhFNjkgLyogSW5p
dGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4MTEyMDBGMzVB
MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjgz
MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
OUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VD
b25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RjEyMDBGMzVBMDAwODhFNjkgLyog
UGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTExMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI5MzEyMDBGMzVB
MDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTYxMjAwRjM1QTAw
MDg4RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTgxMjAwRjM1QTAwMDg4
RTY5IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTkxMjAwRjM1QTAw
MDg4RTY5IC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOUQxMjAwRjM1QTAw
MDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkEwMTIwMEYzNUEw
MDA4OEU2OSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJBMjEyMDBGMzVB
MDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJBNDEyMDBGMzVB
MDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQy
QTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xk
U2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCQlG
QjM5RDA3MTEyMDBFRDkyMDAwODhFNjkgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAiJChBUkNI
U19TVEFOREFSRF82NF9CSVRfUFJFX1hDT0RFXzNfMSkiOworCQkJCUFSQ0hTX1NUQU5EQVJEXzY0
X0JJVF9QUkVfWENPREVfM18xID0geDg2XzY0OworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsK
KwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNST09UKS9pbmNsdWRlIiwK
KwkJCQkJIiQoU1JDUk9PVCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFURV9ESVIgPSBz
cmMvaW50ZXJtZWRpYXRlOworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRIID0gIiI7CisJ
CQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQlGQjM5RDA3MjEyMDBFRDkyMDAwODhFNjkg
LyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVF9QUkVf
WENPREVfM18xKSI7CisJCQkJQVJDSFNfU1RBTkRBUkRfNjRfQklUX1BSRV9YQ09ERV8zXzEgPSB4
ODZfNjQ7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAorCQkJCQkiJChTUkNST09UKS9pbmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9PVCkvc3Jj
IiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFURV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRlOworCQkJ
CVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRIID0gIiI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVh
c2U7CisJCX07CisJCUZCMzlEMEQyMTIwMEYwRTQwMDA4OEU2OSAvKiBEZWJ1ZyAqLyA9IHsKKwkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlB
TFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87
CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NP
TlRJTlVFID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1J
WkFUSU9OX0xFVkVMID0gMDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKKwkJ
CQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJCQl9OworCQkJ
bmFtZSA9IERlYnVnOworCQl9OworCQlGQjM5RDBEMzEyMDBGMEU0MDAwODhFNjkgLyogUmVsZWFz
ZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5n
cyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNF
X1NUUklQID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRo
LWRzeW0iOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IE5POworCQkJCUdDQ19N
T0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKKwkJ
CQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJCQkJWkVST19M
SU5LID0gTk87CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENCdWls
ZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0
IHNlY3Rpb24gKi8KKwkJRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovID0geworCQkJaXNhID0gWENDb25m
aWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzOUQwNzEx
MjAwRUQ5MjAwMDg4RTY5IC8qIERlYnVnICovLAorCQkJCUZCMzlEMDcyMTIwMEVEOTIwMDA4OEU2
OSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxl
ID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCUZC
MzlEMEQ2MTIwMEYxMUUwMDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAiYW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlz
dDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzOUQwRDIxMjAwRjBFNDAwMDg4
RTY5IC8qIERlYnVnICovLAorCQkJCUZCMzlEMEQzMTIwMEYwRTQwMDA4OEU2OSAvKiBSZWxlYXNl
ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENDb25maWd1
cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2JqZWN0ID0gRkIzOUQwNzAxMjAwRUQ5
MjAwMDg4RTY5IC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpJbmRleDogQU5HTEUvaW5jbHVkZS9F
R0wvZWdsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MjkgQEAKKy8qIC0qLSBtb2RlOiBjOyB0YWItd2lkdGg6IDg7IC0qLSAqLworLyogdmk6IHNldCBz
dz00IHRzPTg6ICovCisvKiBSZWZlcmVuY2UgdmVyc2lvbiBvZiBlZ2wuaCBmb3IgRUdMIDEuNC4K
KyAqICRSZXZpc2lvbjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUyOjI1IC0wNzAw
IChXZWQsIDIxIE9jdCAyMDA5KSAkCisgKi8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0y
MDA5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29w
eSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg
KHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCBy
ZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0
byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJs
aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBw
ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo
ZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwg
V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5D
TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN
RU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lT
RSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFU
RVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyov
CisKKyNpZm5kZWYgX19lZ2xfaF8KKyNkZWZpbmUgX19lZ2xfaF8KKworLyogQWxsIHBsYXRmb3Jt
LWRlcGVuZGVudCB0eXBlcyBhbmQgbWFjcm8gYm9pbGVycGxhdGUgKHN1Y2ggYXMgRUdMQVBJCisg
KiBhbmQgRUdMQVBJRU5UUlkpIHNob3VsZCBnbyBpbiBlZ2xwbGF0Zm9ybS5oLgorICovCisjaW5j
bHVkZSA8RUdML2VnbHBsYXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CisjZW5kaWYKKworLyogRUdMIFR5cGVzICovCisvKiBFR0xpbnQgaXMgZGVmaW5lZCBpbiBl
Z2xwbGF0Zm9ybS5oICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBFR0xCb29sZWFuOwordHlwZWRl
ZiB1bnNpZ25lZCBpbnQgRUdMZW51bTsKK3R5cGVkZWYgdm9pZCAqRUdMQ29uZmlnOwordHlwZWRl
ZiB2b2lkICpFR0xDb250ZXh0OwordHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5OwordHlwZWRlZiB2
b2lkICpFR0xTdXJmYWNlOwordHlwZWRlZiB2b2lkICpFR0xDbGllbnRCdWZmZXI7CisKKy8qIEVH
TCBWZXJzaW9uaW5nICovCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMAkJCTEKKyNkZWZpbmUgRUdM
X1ZFUlNJT05fMV8xCQkJMQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzIJCQkxCisjZGVmaW5lIEVH
TF9WRVJTSU9OXzFfMwkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV80CQkJMQorCisvKiBFR0wg
RW51bWVyYW50cy4gQml0bWFza3MgYW5kIG90aGVyIGV4Y2VwdGlvbmFsIGNhc2VzIGFzaWRlLCBt
b3N0CisgKiBlbnVtcyBhcmUgYXNzaWduZWQgdW5pcXVlIHZhbHVlcyBzdGFydGluZyBhdCAweDMw
MDAuCisgKi8KKworLyogRUdMIGFsaWFzZXMgKi8KKyNkZWZpbmUgRUdMX0ZBTFNFCQkJMAorI2Rl
ZmluZSBFR0xfVFJVRQkJCTEKKworLyogT3V0LW9mLWJhbmQgaGFuZGxlIHZhbHVlcyAqLworI2Rl
ZmluZSBFR0xfREVGQVVMVF9ESVNQTEFZCQkoKEVHTE5hdGl2ZURpc3BsYXlUeXBlKTApCisjZGVm
aW5lIEVHTF9OT19DT05URVhUCQkJKChFR0xDb250ZXh0KTApCisjZGVmaW5lIEVHTF9OT19ESVNQ
TEFZCQkJKChFR0xEaXNwbGF5KTApCisjZGVmaW5lIEVHTF9OT19TVVJGQUNFCQkJKChFR0xTdXJm
YWNlKTApCisKKy8qIE91dC1vZi1iYW5kIGF0dHJpYnV0ZSB2YWx1ZSAqLworI2RlZmluZSBFR0xf
RE9OVF9DQVJFCQkJKChFR0xpbnQpLTEpCisKKy8qIEVycm9ycyAvIEdldEVycm9yIHJldHVybiB2
YWx1ZXMgKi8KKyNkZWZpbmUgRUdMX1NVQ0NFU1MJCQkweDMwMDAKKyNkZWZpbmUgRUdMX05PVF9J
TklUSUFMSVpFRAkJMHgzMDAxCisjZGVmaW5lIEVHTF9CQURfQUNDRVNTCQkJMHgzMDAyCisjZGVm
aW5lIEVHTF9CQURfQUxMT0MJCQkweDMwMDMKKyNkZWZpbmUgRUdMX0JBRF9BVFRSSUJVVEUJCTB4
MzAwNAorI2RlZmluZSBFR0xfQkFEX0NPTkZJRwkJCTB4MzAwNQorI2RlZmluZSBFR0xfQkFEX0NP
TlRFWFQJCQkweDMwMDYKKyNkZWZpbmUgRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UJCTB4MzAwNwor
I2RlZmluZSBFR0xfQkFEX0RJU1BMQVkJCQkweDMwMDgKKyNkZWZpbmUgRUdMX0JBRF9NQVRDSAkJ
CTB4MzAwOQorI2RlZmluZSBFR0xfQkFEX05BVElWRV9QSVhNQVAJCTB4MzAwQQorI2RlZmluZSBF
R0xfQkFEX05BVElWRV9XSU5ET1cJCTB4MzAwQgorI2RlZmluZSBFR0xfQkFEX1BBUkFNRVRFUgkJ
MHgzMDBDCisjZGVmaW5lIEVHTF9CQURfU1VSRkFDRQkJCTB4MzAwRAorI2RlZmluZSBFR0xfQ09O
VEVYVF9MT1NUCQkweDMwMEUJLyogRUdMIDEuMSAtIElNR19wb3dlcl9tYW5hZ2VtZW50ICovCisK
Ky8qIFJlc2VydmVkIDB4MzAwRi0weDMwMUYgZm9yIGFkZGl0aW9uYWwgZXJyb3JzICovCisKKy8q
IENvbmZpZyBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEVHTF9CVUZGRVJfU0laRQkJCTB4MzAyMAor
I2RlZmluZSBFR0xfQUxQSEFfU0laRQkJCTB4MzAyMQorI2RlZmluZSBFR0xfQkxVRV9TSVpFCQkJ
MHgzMDIyCisjZGVmaW5lIEVHTF9HUkVFTl9TSVpFCQkJMHgzMDIzCisjZGVmaW5lIEVHTF9SRURf
U0laRQkJCTB4MzAyNAorI2RlZmluZSBFR0xfREVQVEhfU0laRQkJCTB4MzAyNQorI2RlZmluZSBF
R0xfU1RFTkNJTF9TSVpFCQkweDMwMjYKKyNkZWZpbmUgRUdMX0NPTkZJR19DQVZFQVQJCTB4MzAy
NworI2RlZmluZSBFR0xfQ09ORklHX0lECQkJMHgzMDI4CisjZGVmaW5lIEVHTF9MRVZFTAkJCTB4
MzAyOQorI2RlZmluZSBFR0xfTUFYX1BCVUZGRVJfSEVJR0hUCQkweDMwMkEKKyNkZWZpbmUgRUdM
X01BWF9QQlVGRkVSX1BJWEVMUwkJMHgzMDJCCisjZGVmaW5lIEVHTF9NQVhfUEJVRkZFUl9XSURU
SAkJMHgzMDJDCisjZGVmaW5lIEVHTF9OQVRJVkVfUkVOREVSQUJMRQkJMHgzMDJECisjZGVmaW5l
IEVHTF9OQVRJVkVfVklTVUFMX0lECQkweDMwMkUKKyNkZWZpbmUgRUdMX05BVElWRV9WSVNVQUxf
VFlQRQkJMHgzMDJGCisjZGVmaW5lIEVHTF9TQU1QTEVTCQkJMHgzMDMxCisjZGVmaW5lIEVHTF9T
QU1QTEVfQlVGRkVSUwkJMHgzMDMyCisjZGVmaW5lIEVHTF9TVVJGQUNFX1RZUEUJCTB4MzAzMwor
I2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfVFlQRQkJMHgzMDM0CisjZGVmaW5lIEVHTF9UUkFOU1BB
UkVOVF9CTFVFX1ZBTFVFCTB4MzAzNQorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFM
VUUJMHgzMDM2CisjZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUUJMHgzMDM3CisjZGVm
aW5lIEVHTF9OT05FCQkJMHgzMDM4CS8qIEF0dHJpYiBsaXN0IHRlcm1pbmF0b3IgKi8KKyNkZWZp
bmUgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0IJCTB4MzAzOQorI2RlZmluZSBFR0xfQklORF9UT19U
RVhUVVJFX1JHQkEJMHgzMDNBCisjZGVmaW5lIEVHTF9NSU5fU1dBUF9JTlRFUlZBTAkJMHgzMDNC
CisjZGVmaW5lIEVHTF9NQVhfU1dBUF9JTlRFUlZBTAkJMHgzMDNDCisjZGVmaW5lIEVHTF9MVU1J
TkFOQ0VfU0laRQkJMHgzMDNECisjZGVmaW5lIEVHTF9BTFBIQV9NQVNLX1NJWkUJCTB4MzAzRQor
I2RlZmluZSBFR0xfQ09MT1JfQlVGRkVSX1RZUEUJCTB4MzAzRgorI2RlZmluZSBFR0xfUkVOREVS
QUJMRV9UWVBFCQkweDMwNDAKKyNkZWZpbmUgRUdMX01BVENIX05BVElWRV9QSVhNQVAJCTB4MzA0
MQkvKiBQc2V1ZG8tYXR0cmlidXRlIChub3QgcXVlcnlhYmxlKSAqLworI2RlZmluZSBFR0xfQ09O
Rk9STUFOVAkJCTB4MzA0MgorCisvKiBSZXNlcnZlZCAweDMwNDEtMHgzMDRGIGZvciBhZGRpdGlv
bmFsIGNvbmZpZyBhdHRyaWJ1dGVzICovCisKKy8qIENvbmZpZyBhdHRyaWJ1dGUgdmFsdWVzICov
CisjZGVmaW5lIEVHTF9TTE9XX0NPTkZJRwkJCTB4MzA1MAkvKiBFR0xfQ09ORklHX0NBVkVBVCB2
YWx1ZSAqLworI2RlZmluZSBFR0xfTk9OX0NPTkZPUk1BTlRfQ09ORklHCTB4MzA1MQkvKiBFR0xf
Q09ORklHX0NBVkVBVCB2YWx1ZSAqLworI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfUkdCCQkweDMw
NTIJLyogRUdMX1RSQU5TUEFSRU5UX1RZUEUgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1JHQl9CVUZG
RVIJCQkweDMwOEUJLyogRUdMX0NPTE9SX0JVRkZFUl9UWVBFIHZhbHVlICovCisjZGVmaW5lIEVH
TF9MVU1JTkFOQ0VfQlVGRkVSCQkweDMwOEYJLyogRUdMX0NPTE9SX0JVRkZFUl9UWVBFIHZhbHVl
ICovCisKKy8qIE1vcmUgY29uZmlnIGF0dHJpYnV0ZSB2YWx1ZXMsIGZvciBFR0xfVEVYVFVSRV9G
T1JNQVQgKi8KKyNkZWZpbmUgRUdMX05PX1RFWFRVUkUJCQkweDMwNUMKKyNkZWZpbmUgRUdMX1RF
WFRVUkVfUkdCCQkJMHgzMDVECisjZGVmaW5lIEVHTF9URVhUVVJFX1JHQkEJCTB4MzA1RQorI2Rl
ZmluZSBFR0xfVEVYVFVSRV8yRAkJCTB4MzA1RgorCisvKiBDb25maWcgYXR0cmlidXRlIG1hc2sg
Yml0cyAqLworI2RlZmluZSBFR0xfUEJVRkZFUl9CSVQJCQkweDAwMDEJLyogRUdMX1NVUkZBQ0Vf
VFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1BJWE1BUF9CSVQJCQkweDAwMDIJLyogRUdM
X1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1dJTkRPV19CSVQJCQkweDAw
MDQJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9S
U1BBQ0VfTElORUFSX0JJVAkweDAwMjAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8K
KyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkVfQklUCTB4MDA0MAkvKiBFR0xfU1VSRkFD
RV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRV9CT1hf
QklUIDB4MDIwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xf
U1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIDB4MDQwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1h
c2sgYml0cyAqLworCisjZGVmaW5lIEVHTF9PUEVOR0xfRVNfQklUCQkweDAwMDEJLyogRUdMX1JF
TkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5WR19CSVQJCQkweDAw
MDIJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5H
TF9FUzJfQklUCQkweDAwMDQJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNk
ZWZpbmUgRUdMX09QRU5HTF9CSVQJCQkweDAwMDgJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNr
IGJpdHMgKi8KKworLyogUXVlcnlTdHJpbmcgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfVkVORE9S
CQkJMHgzMDUzCisjZGVmaW5lIEVHTF9WRVJTSU9OCQkJMHgzMDU0CisjZGVmaW5lIEVHTF9FWFRF
TlNJT05TCQkJMHgzMDU1CisjZGVmaW5lIEVHTF9DTElFTlRfQVBJUwkJCTB4MzA4RAorCisvKiBR
dWVyeVN1cmZhY2UgLyBTdXJmYWNlQXR0cmliIC8gQ3JlYXRlUGJ1ZmZlclN1cmZhY2UgdGFyZ2V0
cyAqLworI2RlZmluZSBFR0xfSEVJR0hUCQkJMHgzMDU2CisjZGVmaW5lIEVHTF9XSURUSAkJCTB4
MzA1NworI2RlZmluZSBFR0xfTEFSR0VTVF9QQlVGRkVSCQkweDMwNTgKKyNkZWZpbmUgRUdMX1RF
WFRVUkVfRk9STUFUCQkweDMwODAKKyNkZWZpbmUgRUdMX1RFWFRVUkVfVEFSR0VUCQkweDMwODEK
KyNkZWZpbmUgRUdMX01JUE1BUF9URVhUVVJFCQkweDMwODIKKyNkZWZpbmUgRUdMX01JUE1BUF9M
RVZFTAkJMHgzMDgzCisjZGVmaW5lIEVHTF9SRU5ERVJfQlVGRkVSCQkweDMwODYKKyNkZWZpbmUg
RUdMX1ZHX0NPTE9SU1BBQ0UJCTB4MzA4NworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUCQkw
eDMwODgKKyNkZWZpbmUgRUdMX0hPUklaT05UQUxfUkVTT0xVVElPTgkweDMwOTAKKyNkZWZpbmUg
RUdMX1ZFUlRJQ0FMX1JFU09MVVRJT04JCTB4MzA5MQorI2RlZmluZSBFR0xfUElYRUxfQVNQRUNU
X1JBVElPCQkweDMwOTIKKyNkZWZpbmUgRUdMX1NXQVBfQkVIQVZJT1IJCTB4MzA5MworI2RlZmlu
ZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRQkJMHgzMDk5CisKKy8qIEVHTF9SRU5ERVJfQlVGRkVS
IHZhbHVlcyAvIEJpbmRUZXhJbWFnZSAvIFJlbGVhc2VUZXhJbWFnZSBidWZmZXIgdGFyZ2V0cyAq
LworI2RlZmluZSBFR0xfQkFDS19CVUZGRVIJCQkweDMwODQKKyNkZWZpbmUgRUdMX1NJTkdMRV9C
VUZGRVIJCTB4MzA4NQorCisvKiBPcGVuVkcgY29sb3Igc3BhY2VzICovCisjZGVmaW5lIEVHTF9W
R19DT0xPUlNQQUNFX3NSR0IJCTB4MzA4OQkvKiBFR0xfVkdfQ09MT1JTUEFDRSB2YWx1ZSAqLwor
I2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVIJMHgzMDhBCS8qIEVHTF9WR19DT0xPUlNQ
QUNFIHZhbHVlICovCisKKy8qIE9wZW5WRyBhbHBoYSBmb3JtYXRzICovCisjZGVmaW5lIEVHTF9W
R19BTFBIQV9GT1JNQVRfTk9OUFJFCTB4MzA4QgkvKiBFR0xfQUxQSEFfRk9STUFUIHZhbHVlICov
CisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFCQkweDMwOEMJLyogRUdMX0FMUEhBX0ZP
Uk1BVCB2YWx1ZSAqLworCisvKiBDb25zdGFudCBzY2FsZSBmYWN0b3IgYnkgd2hpY2ggZnJhY3Rp
b25hbCBkaXNwbGF5IHJlc29sdXRpb25zICYKKyAqIGFzcGVjdCByYXRpbyBhcmUgc2NhbGVkIHdo
ZW4gcXVlcmllZCBhcyBpbnRlZ2VyIHZhbHVlcy4KKyAqLworI2RlZmluZSBFR0xfRElTUExBWV9T
Q0FMSU5HCQkxMDAwMAorCisvKiBVbmtub3duIGRpc3BsYXkgcmVzb2x1dGlvbi9hc3BlY3QgcmF0
aW8gKi8KKyNkZWZpbmUgRUdMX1VOS05PV04JCQkoKEVHTGludCktMSkKKworLyogQmFjayBidWZm
ZXIgc3dhcCBiZWhhdmlvcnMgKi8KKyNkZWZpbmUgRUdMX0JVRkZFUl9QUkVTRVJWRUQJCTB4MzA5
NAkvKiBFR0xfU1dBUF9CRUhBVklPUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfQlVGRkVSX0RFU1RS
T1lFRAkJMHgzMDk1CS8qIEVHTF9TV0FQX0JFSEFWSU9SIHZhbHVlICovCisKKy8qIENyZWF0ZVBi
dWZmZXJGcm9tQ2xpZW50QnVmZmVyIGJ1ZmZlciB0eXBlcyAqLworI2RlZmluZSBFR0xfT1BFTlZH
X0lNQUdFCQkweDMwOTYKKworLyogUXVlcnlDb250ZXh0IHRhcmdldHMgKi8KKyNkZWZpbmUgRUdM
X0NPTlRFWFRfQ0xJRU5UX1RZUEUJCTB4MzA5NworCisvKiBDcmVhdGVDb250ZXh0IGF0dHJpYnV0
ZXMgKi8KKyNkZWZpbmUgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04JMHgzMDk4CisKKy8qIE11
bHRpc2FtcGxlIHJlc29sdXRpb24gYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBM
RV9SRVNPTFZFX0RFRkFVTFQgMHgzMDlBCS8qIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFIHZhbHVl
ICovCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFX0JPWAkweDMwOUIJLyogRUdMX01V
TFRJU0FNUExFX1JFU09MVkUgdmFsdWUgKi8KKworLyogQmluZEFQSS9RdWVyeUFQSSB0YXJnZXRz
ICovCisjZGVmaW5lIEVHTF9PUEVOR0xfRVNfQVBJCQkweDMwQTAKKyNkZWZpbmUgRUdMX09QRU5W
R19BUEkJCQkweDMwQTEKKyNkZWZpbmUgRUdMX09QRU5HTF9BUEkJCQkweDMwQTIKKworLyogR2V0
Q3VycmVudFN1cmZhY2UgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfRFJBVwkJCTB4MzA1OQorI2Rl
ZmluZSBFR0xfUkVBRAkJCTB4MzA1QQorCisvKiBXYWl0TmF0aXZlIGVuZ2luZXMgKi8KKyNkZWZp
bmUgRUdMX0NPUkVfTkFUSVZFX0VOR0lORQkJMHgzMDVCCisKKy8qIEVHTCAxLjIgdG9rZW5zIHJl
bmFtZWQgZm9yIGNvbnNpc3RlbmN5IGluIEVHTCAxLjMgKi8KKyNkZWZpbmUgRUdMX0NPTE9SU1BB
Q0UJCQlFR0xfVkdfQ09MT1JTUEFDRQorI2RlZmluZSBFR0xfQUxQSEFfRk9STUFUCQlFR0xfVkdf
QUxQSEFfRk9STUFUCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFX3NSR0IJCUVHTF9WR19DT0xPUlNQ
QUNFX3NSR0IKKyNkZWZpbmUgRUdMX0NPTE9SU1BBQ0VfTElORUFSCQlFR0xfVkdfQ09MT1JTUEFD
RV9MSU5FQVIKKyNkZWZpbmUgRUdMX0FMUEhBX0ZPUk1BVF9OT05QUkUJCUVHTF9WR19BTFBIQV9G
T1JNQVRfTk9OUFJFCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRfUFJFCQlFR0xfVkdfQUxQSEFf
Rk9STUFUX1BSRQorCisvKiBFR0wgZXh0ZW5zaW9ucyBtdXN0IHJlcXVlc3QgZW51bSBibG9ja3Mg
ZnJvbSB0aGUgS2hyb25vcworICogQVBJIFJlZ2lzdHJhciwgd2hvIG1haW50YWlucyB0aGUgZW51
bWVyYW50IHJlZ2lzdHJ5LiBTdWJtaXQKKyAqIGEgYnVnIGluIEtocm9ub3MgQnVnemlsbGEgYWdh
aW5zdCB0YXNrICJSZWdpc3RyeSIuCisgKi8KKworCisKKy8qIEVHTCBGdW5jdGlvbnMgKi8KKwor
RUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xHZXRFcnJvcih2b2lkKTsKKworRUdMQVBJIEVH
TERpc3BsYXkgRUdMQVBJRU5UUlkgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBk
aXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEluaXRpYWxpemUo
RUdMRGlzcGxheSBkcHksIEVHTGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsVGVybWluYXRlKEVHTERpc3BsYXkgZHB5KTsKKworRUdM
QVBJIGNvbnN0IGNoYXIgKiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRw
eSwgRUdMaW50IG5hbWUpOworCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRD
b25maWdzKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgKmNvbmZpZ3MsCisJCQkgRUdMaW50IGNv
bmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJ
RU5UUlkgZWdsQ2hvb3NlQ29uZmlnKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0LAorCQkJICAgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3NpemUsCisJ
CQkgICBFR0xpbnQgKm51bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkg
ZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJ
ICAgICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xTdXJm
YWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TENvbmZpZyBjb25maWcsCisJCQkJICBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwKKwkJCQkgIGNv
bnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkg
ZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcs
CisJCQkJICAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMU3VyZmFjZSBF
R0xBUElFTlRSWSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25m
aWcgY29uZmlnLAorCQkJCSAgRUdMTmF0aXZlUGl4bWFwVHlwZSBwaXhtYXAsCisJCQkJICBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bERlc3Ryb3lTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdXJmYWNlKEVHTERpc3BsYXkgZHB5
LCBFR0xTdXJmYWNlIHN1cmZhY2UsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZh
bHVlKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQmluZEFQSShFR0xlbnVt
IGFwaSk7CitFR0xBUEkgRUdMZW51bSBFR0xBUElFTlRSWSBlZ2xRdWVyeUFQSSh2b2lkKTsKKwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdENsaWVudCh2b2lkKTsKKworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUmVsZWFzZVRocmVhZCh2b2lkKTsKKworRUdM
QVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZm
ZXIoCisJICAgICAgRUdMRGlzcGxheSBkcHksIEVHTGVudW0gYnVmdHlwZSwgRUdMQ2xpZW50QnVm
ZmVyIGJ1ZmZlciwKKwkgICAgICBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3VyZmFjZUF0dHJp
YihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgIEVHTGludCBhdHRy
aWJ1dGUsIEVHTGludCB2YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xC
aW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1
ZmZlcik7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xSZWxlYXNlVGV4SW1hZ2Uo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcik7CisKKwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3dhcEludGVydmFsKEVHTERpc3BsYXkg
ZHB5LCBFR0xpbnQgaW50ZXJ2YWwpOworCisKK0VHTEFQSSBFR0xDb250ZXh0IEVHTEFQSUVOVFJZ
IGVnbENyZWF0ZUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkg
ICAgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0LAorCQkJICAgIGNvbnN0IEVHTGludCAqYXR0cmli
X2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveUNvbnRleHQo
RUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbE1ha2VDdXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcsCisJ
CQkgIEVHTFN1cmZhY2UgcmVhZCwgRUdMQ29udGV4dCBjdHgpOworCitFR0xBUEkgRUdMQ29udGV4
dCBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKTsKK0VHTEFQSSBFR0xTdXJm
YWNlIEVHTEFQSUVOVFJZIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGludCByZWFkZHJhdyk7CitF
R0xBUEkgRUdMRGlzcGxheSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5Q29udGV4dChFR0xEaXNwbGF5
IGRweSwgRUdMQ29udGV4dCBjdHgsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZh
bHVlKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdEdMKHZvaWQpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdE5hdGl2ZShFR0xpbnQgZW5naW5l
KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3YXBCdWZmZXJzKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5U
UlkgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwKKwkJ
CSAgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpOworCisvKiBUaGlzIGlzIGEgZ2VuZXJpYyBm
dW5jdGlvbiBwb2ludGVyIHR5cGUsIHdob3NlIG5hbWUgaW5kaWNhdGVzIGl0IG11c3QKKyAqIGJl
IGNhc3QgdG8gdGhlIHByb3BlciB0eXBlICphbmQgY2FsbGluZyBjb252ZW50aW9uKiBiZWZvcmUg
dXNlLgorICovCit0eXBlZGVmIHZvaWQgKCpfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKSh2b2lkKTsKKworLyogTm93LCBkZWZpbmUgZWdsR2V0UHJvY0FkZHJlc3MgdXNp
bmcgdGhlIGdlbmVyaWMgZnVuY3Rpb24gcHRyLiB0eXBlICovCitFR0xBUEkgX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBFR0xBUElFTlRSWQorICAgICAgIGVnbEdldFBy
b2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZWdsX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0VH
TC9lZ2xleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIyMiBAQAorI2lmbmRlZiBfX2VnbGV4dF9oXworI2RlZmluZSBfX2VnbGV4dF9oXwor
CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisqKiBDb3B5
cmlnaHQgKGMpIDIwMDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiogUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0
ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBsaW1pdGF0
aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorKiog
ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBNYXRlcmlh
bHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBm
dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
czoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh
bCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMgQVJFIFBS
T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBFWFBSRVNT
IE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg
T0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9S
IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFNQUdFUyBP
UiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiog
VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g
V0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI
RSBNQVRFUklBTFMuCisqLworCisjaW5jbHVkZSA8RUdML2VnbHBsYXRmb3JtLmg+CisKKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworCisvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLworLyogQ3VycmVudCB2ZXJzaW9u
IGF0IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLworLyogJFJldmlzaW9u
OiAxMDc5NSAkIG9uICREYXRlOiAyMDEwLTAzLTE5IDE3OjA0OjE3IC0wNzAwIChGcmksIDE5IE1h
ciAyMDEwKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiA1CisKKyNpZm5kZWYgRUdM
X0tIUl9jb25maWdfYXR0cmlicworI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKKyNk
ZWZpbmUgRUdMX0NPTkZPUk1BTlRfS0hSCQkJMHgzMDQyCS8qIEVHTENvbmZpZyBhdHRyaWJ1dGUg
Ki8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSX0JJVF9LSFIJMHgwMDIwCS8qIEVH
TF9TVVJGQUNFX1RZUEUgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9Q
UkVfQklUX0tIUgkJMHgwMDQwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0ZmllbGQgKi8KKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9LSFJfbG9ja19zdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfbG9ja19z
dXJmYWNlIDEKKyNkZWZpbmUgRUdMX1JFQURfU1VSRkFDRV9CSVRfS0hSCQkweDAwMDEJLyogRUdM
X0xPQ0tfVVNBR0VfSElOVF9LSFIgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1dSSVRFX1NVUkZB
Q0VfQklUX0tIUgkJMHgwMDAyCS8qIEVHTF9MT0NLX1VTQUdFX0hJTlRfS0hSIGJpdGZpZWxkICov
CisjZGVmaW5lIEVHTF9MT0NLX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDgwCS8qIEVHTF9TVVJGQUNF
X1RZUEUgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX09QVElNQUxfRk9STUFUX0JJVF9LSFIJCTB4
MDEwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9NQVRDSF9G
T1JNQVRfS0hSCQkJMHgzMDQzCS8qIEVHTENvbmZpZyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdM
X0ZPUk1BVF9SR0JfNTY1X0VYQUNUX0tIUgkJMHgzMEMwCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hS
IHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCXzU2NV9LSFIJCQkweDMwQzEJLyogRUdM
X01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9SR0JBXzg4ODhf
RVhBQ1RfS0hSCQkweDMwQzIJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZp
bmUgRUdMX0ZPUk1BVF9SR0JBXzg4ODhfS0hSCQkweDMwQzMJLyogRUdMX01BVENIX0ZPUk1BVF9L
SFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX01BUF9QUkVTRVJWRV9QSVhFTFNfS0hSCQkweDMwQzQJ
LyogZWdsTG9ja1N1cmZhY2VLSFIgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9MT0NLX1VTQUdF
X0hJTlRfS0hSCQkJMHgzMEM1CS8qIGVnbExvY2tTdXJmYWNlS0hSIGF0dHJpYnV0ZSAqLworI2Rl
ZmluZSBFR0xfQklUTUFQX1BPSU5URVJfS0hSCQkJMHgzMEM2CS8qIGVnbFF1ZXJ5U3VyZmFjZSBh
dHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVRDSF9LSFIJCQkweDMwQzcJLyogZWds
UXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX09SSUdJTl9LSFIJ
CQkweDMwQzgJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklU
TUFQX1BJWEVMX1JFRF9PRkZTRVRfS0hSCQkweDMwQzkJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJp
YnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0dSRUVOX09GRlNFVF9LSFIJMHgzMENB
CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhF
TF9CTFVFX09GRlNFVF9LSFIJMHgzMENCCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8K
KyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9BTFBIQV9PRkZTRVRfS0hSCTB4MzBDQwkvKiBlZ2xR
dWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfTFVNSU5B
TkNFX09GRlNFVF9LSFIJMHgzMENECS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNk
ZWZpbmUgRUdMX0xPV0VSX0xFRlRfS0hSCQkJMHgzMENFCS8qIEVHTF9CSVRNQVBfT1JJR0lOX0tI
UiB2YWx1ZSAqLworI2RlZmluZSBFR0xfVVBQRVJfTEVGVF9LSFIJCQkweDMwQ0YJLyogRUdMX0JJ
VE1BUF9PUklHSU5fS0hSIHZhbHVlICovCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xMb2NrU3VyZmFjZUtIUiAoRUdMRGlzcGxh
eSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsVW5sb2NrU3VyZmFjZUtIUiAoRUdM
RGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdM
TE9DS1NVUkZBQ0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMVU5MT0NLU1VSRkFDRUtIUlBST0MpIChFR0xEaXNwbGF5IGRpc3BsYXks
IEVHTFN1cmZhY2Ugc3VyZmFjZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdlCisj
ZGVmaW5lIEVHTF9LSFJfaW1hZ2UgMQorI2RlZmluZSBFR0xfTkFUSVZFX1BJWE1BUF9LSFIJCQkw
eDMwQjAJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCit0eXBlZGVmIHZvaWQgKkVHTElt
YWdlS0hSOworI2RlZmluZSBFR0xfTk9fSU1BR0VfS0hSCQkJKChFR0xJbWFnZUtIUikwKQorI2lm
ZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEltYWdlS0hSIEVHTEFQSUVOVFJZ
IGVnbENyZWF0ZUltYWdlS0hSIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGVu
dW0gdGFyZ2V0LCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lJbWFnZUtIUiAo
RUdMRGlzcGxheSBkcHksIEVHTEltYWdlS0hSIGltYWdlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMSW1hZ2VLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xD
UkVBVEVJTUFHRUtIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGVu
dW0gdGFyZ2V0LCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lJTUFH
RUtIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMSW1hZ2VLSFIgaW1hZ2UpOworI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0tIUl92Z19wYXJlbnRfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl92Z19wYXJl
bnRfaW1hZ2UgMQorI2RlZmluZSBFR0xfVkdfUEFSRU5UX0lNQUdFX0tIUgkJCTB4MzBCQQkvKiBl
Z2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xf
dGV4dHVyZV8yRF9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfMkRfaW1hZ2UgMQor
I2RlZmluZSBFR0xfR0xfVEVYVFVSRV8yRF9LSFIJCQkweDMwQjEJLyogZWdsQ3JlYXRlSW1hZ2VL
SFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0xFVkVMX0tIUgkJMHgzMEJDCS8q
IGVnbENyZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tI
Ul9nbF90ZXh0dXJlX2N1YmVtYXBfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9nbF90ZXh0dXJlX2N1
YmVtYXBfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
X0tIUgkweDMwQjMJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9H
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1hfS0hSCTB4MzBCNAkvKiBlZ2xDcmVhdGVJbWFn
ZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WV9LSFIJMHgzMEI1CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xf
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZX0tIUgkweDMwQjYJLyogZWdsQ3JlYXRlSW1h
Z2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1pfS0hSCTB4MzBCNwkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdM
X0dMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWl9LSFIJMHgzMEI4CS8qIGVnbENyZWF0ZUlt
YWdlS0hSIHRhcmdldCAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF90ZXh0dXJlXzNE
X2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9pbWFnZSAxCisjZGVmaW5lIEVH
TF9HTF9URVhUVVJFXzNEX0tIUgkJCTB4MzBCMgkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQg
Ki8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfWk9GRlNFVF9LSFIJCTB4MzBCRAkvKiBlZ2xDcmVh
dGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfcmVu
ZGVyYnVmZmVyX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfcmVuZGVyYnVmZmVyX2ltYWdlIDEK
KyNkZWZpbmUgRUdMX0dMX1JFTkRFUkJVRkZFUl9LSFIJCQkweDMwQjkJLyogZWdsQ3JlYXRlSW1h
Z2VLSFIgdGFyZ2V0ICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3JldXNhYmxlX3N5bmMK
KyNkZWZpbmUgRUdMX0tIUl9yZXVzYWJsZV9zeW5jIDEKKwordHlwZWRlZiB2b2lkKiBFR0xTeW5j
S0hSOwordHlwZWRlZiBraHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3QgRUdMVGltZUtIUjsKKwor
I2RlZmluZSBFR0xfU1lOQ19TVEFUVVNfS0hSCQkJMHgzMEYxCisjZGVmaW5lIEVHTF9TSUdOQUxF
RF9LSFIJCQkweDMwRjIKKyNkZWZpbmUgRUdMX1VOU0lHTkFMRURfS0hSCQkJMHgzMEYzCisjZGVm
aW5lIEVHTF9USU1FT1VUX0VYUElSRURfS0hSCQkJMHgzMEY1CisjZGVmaW5lIEVHTF9DT05ESVRJ
T05fU0FUSVNGSUVEX0tIUgkJMHgzMEY2CisjZGVmaW5lIEVHTF9TWU5DX1RZUEVfS0hSCQkJMHgz
MEY3CisjZGVmaW5lIEVHTF9TWU5DX1JFVVNBQkxFX0tIUgkJCTB4MzBGQQorI2RlZmluZSBFR0xf
U1lOQ19GTFVTSF9DT01NQU5EU19CSVRfS0hSCQkweDAwMDEJLyogZWdsQ2xpZW50V2FpdFN5bmNL
SFIgPGZsYWdzPiBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfRk9SRVZFUl9LSFIJCQkJMHhGRkZG
RkZGRkZGRkZGRkZGdWxsCisjZGVmaW5lIEVHTF9OT19TWU5DX0tIUgkJCQkoKEVHTFN5bmNLSFIp
MCkKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTeW5jS0hSIEVHTEFQ
SUVOVFJZIGVnbENyZWF0ZVN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlwZSwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xEZXN0cm95U3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jKTsKK0VHTEFQ
SSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsQ2xpZW50V2FpdFN5bmNLSFIoRUdMRGlzcGxheSBkcHks
IEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzLCBFR0xUaW1lS0hSIHRpbWVvdXQpOworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU2lnbmFsU3luY0tIUihFR0xEaXNwbGF5IGRw
eSwgRUdMU3luY0tIUiBzeW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsR2V0U3luY0F0dHJpYktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBz
eW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdM
RVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3luY0tIUiAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlwZSwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQ
Rk5FR0xERVNUUk9ZU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5j
KTsKK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZORUdMQ0xJRU5UV0FJVFNZTkNLSFJQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzLCBFR0xU
aW1lS0hSIHRpbWVvdXQpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdM
U0lHTkFMU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xl
bnVtIG1vZGUpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMR0VUU1lO
Q0FUVFJJQktIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQg
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfaW1h
Z2VfYmFzZQorI2RlZmluZSBFR0xfS0hSX2ltYWdlX2Jhc2UgMQorLyogTW9zdCBpbnRlcmZhY2Vz
IGRlZmluZWQgYnkgRUdMX0tIUl9pbWFnZV9waXhtYXAgYWJvdmUgKi8KKyNkZWZpbmUgRUdMX0lN
QUdFX1BSRVNFUlZFRF9LSFIJCQkweDMwRDIJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgYXR0cmlidXRl
ICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdlX3BpeG1hcAorI2RlZmluZSBFR0xf
S0hSX2ltYWdlX3BpeG1hcCAxCisvKiBJbnRlcmZhY2VzIGRlZmluZWQgYnkgRUdMX0tIUl9pbWFn
ZSBhYm92ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0lNR19jb250ZXh0X3ByaW9yaXR5Cisj
ZGVmaW5lIEVHTF9JTUdfY29udGV4dF9wcmlvcml0eSAxCisjZGVmaW5lIEVHTF9DT05URVhUX1BS
SU9SSVRZX0xFVkVMX0lNRwkJMHgzMTAwCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX0hJ
R0hfSU1HCQkweDMxMDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfTUVESVVNX0lNRwkJ
MHgzMTAyCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX0xPV19JTUcJCTB4MzEwMworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBFR0xfTlZfY292
ZXJhZ2Vfc2FtcGxlIDEKKyNkZWZpbmUgRUdMX0NPVkVSQUdFX0JVRkZFUlNfTlYgMHgzMEUwCisj
ZGVmaW5lIEVHTF9DT1ZFUkFHRV9TQU1QTEVTX05WIDB4MzBFMQorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX05WX2RlcHRoX25vbmxpbmVhcgorI2RlZmluZSBFR0xfTlZfZGVwdGhfbm9ubGluZWFyIDEK
KyNkZWZpbmUgRUdMX0RFUFRIX0VOQ09ESU5HX05WIDB4MzBFMgorI2RlZmluZSBFR0xfREVQVEhf
RU5DT0RJTkdfTk9ORV9OViAwCisjZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OT05MSU5FQVJf
TlYgMHgzMEUzCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfc3luYworI2RlZmluZSBFR0xfTlZf
c3luYyAxCisjZGVmaW5lIEVHTF9TWU5DX1BSSU9SX0NPTU1BTkRTX0NPTVBMRVRFX05WCTB4MzBF
NgorI2RlZmluZSBFR0xfU1lOQ19TVEFUVVNfTlYJCQkweDMwRTcKKyNkZWZpbmUgRUdMX1NJR05B
TEVEX05WCQkJCTB4MzBFOAorI2RlZmluZSBFR0xfVU5TSUdOQUxFRF9OVgkJCTB4MzBFOQorI2Rl
ZmluZSBFR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfTlYJCTB4MDAwMQorI2RlZmluZSBFR0xf
Rk9SRVZFUl9OVgkJCQkweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNkZWZpbmUgRUdMX0FMUkVBRFlf
U0lHTkFMRURfTlYJCQkweDMwRUEKKyNkZWZpbmUgRUdMX1RJTUVPVVRfRVhQSVJFRF9OVgkJCTB4
MzBFQgorI2RlZmluZSBFR0xfQ09ORElUSU9OX1NBVElTRklFRF9OVgkJMHgzMEVDCisjZGVmaW5l
IEVHTF9TWU5DX1RZUEVfTlYJCQkweDMwRUQKKyNkZWZpbmUgRUdMX1NZTkNfQ09ORElUSU9OX05W
CQkJMHgzMEVFCisjZGVmaW5lIEVHTF9TWU5DX0ZFTkNFX05WCQkJMHgzMEVGCisjZGVmaW5lIEVH
TF9OT19TWU5DX05WCQkJCSgoRUdMU3luY05WKTApCit0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsK
K3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIEVHTFRpbWVOVjsKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBk
cHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEJv
b2xlYW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOworRUdMQm9vbGVhbiBlZ2xG
ZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdM
U3luY05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOworRUdMQm9vbGVh
biBlZ2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQm9v
bGVhbiBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRl
LCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5
cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9D
KSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lT
WU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElF
TlRSWVAgUEZORUdMRkVOQ0VOVlBST0MpIChFR0xTeW5jTlYgc3luYyk7Cit0eXBlZGVmIEVHTGlu
dCAoRUdMQVBJRU5UUllQIFBGTkVHTENMSUVOVFdBSVRTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5
bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwordHlwZWRlZiBFR0xCb29sZWFu
IChFR0xBUElFTlRSWVAgUEZORUdMU0lHTkFMU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBF
R0xlbnVtIG1vZGUpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMR0VU
U1lOQ0FUVFJJQk5WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisj
ZW5kaWYKSW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBA
CisjaWZuZGVmIF9fZWdscGxhdGZvcm1faF8KKyNkZWZpbmUgX19lZ2xwbGF0Zm9ybV9oXworCisv
KgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioK
KyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29j
aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwg
aW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhv
dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi
bGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0
aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVy
aWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg
cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Ig
c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJ
QUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAor
KiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX
QVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0s
IERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U
UkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM
SU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMg
YW5kIGRlZmluaXRpb25zIGZvciBlZ2wuaAorICogJFJldmlzaW9uOiA5NzI0ICQgb24gJERhdGU6
IDIwMDktMTItMDIgMDI6MDU6MzMgLTA4MDAgKFdlZCwgMDIgRGVjIDIwMDkpICQKKyAqCisgKiBB
ZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0IHRo
ZWlyIHBsYXRmb3JtLgorICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9kaWZp
Y2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0aGV5IGNhbiBiZSBpbmNs
dWRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHN1Ym1pdCBjaGFu
Z2VzCisgKiBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhICho
dHRwOi8va2hyb25vcy5vcmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcgYSBidWcgYWdhaW5zdCBw
cm9kdWN0ICJFR0wiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgorICovCisKKyNpbmNsdWRlIDxLSFIv
a2hycGxhdGZvcm0uaD4KKworLyogTWFjcm9zIHVzZWQgaW4gRUdMIGZ1bmN0aW9uIHByb3RvdHlw
ZSBkZWNsYXJhdGlvbnMuCisgKgorICogRUdMIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHJvdG90eXBl
ZCBhczoKKyAqCisgKiBFR0xBUEkgcmV0dXJuLXR5cGUgRUdMQVBJRU5UUlkgZWdsRnVuY3Rpb24o
YXJndW1lbnRzKTsKKyAqIHR5cGVkZWYgcmV0dXJuLXR5cGUgKEVYUEFQSUVOVFJZUCBQRk5FR0xG
VU5DVElPTlBST0MpIChhcmd1bWVudHMpOworICoKKyAqIEtIUk9OT1NfQVBJQ0FMTCBhbmQgS0hS
T05PU19BUElFTlRSWSBhcmUgZGVmaW5lZCBpbiBLSFIva2hycGxhdGZvcm0uaAorICovCisKKyNp
Zm5kZWYgRUdMQVBJCisjZGVmaW5lIEVHTEFQSSBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisj
aWZuZGVmIEVHTEFQSUVOVFJZCisjZGVmaW5lIEVHTEFQSUVOVFJZICBLSFJPTk9TX0FQSUVOVFJZ
CisjZW5kaWYKKyNkZWZpbmUgRUdMQVBJRU5UUllQIEVHTEFQSUVOVFJZKgorCisvKiBUaGUgdHlw
ZXMgTmF0aXZlRGlzcGxheVR5cGUsIE5hdGl2ZVdpbmRvd1R5cGUsIGFuZCBOYXRpdmVQaXhtYXBU
eXBlCisgKiBhcmUgYWxpYXNlcyBvZiB3aW5kb3ctc3lzdGVtLWRlcGVuZGVudCB0eXBlcywgc3Vj
aCBhcyBYIERpc3BsYXkgKiBvcgorICogV2luZG93cyBEZXZpY2UgQ29udGV4dC4gVGhleSBtdXN0
IGJlIGRlZmluZWQgaW4gcGxhdGZvcm0tc3BlY2lmaWMKKyAqIGNvZGUgYmVsb3cuIFRoZSBFR0wt
cHJlZml4ZWQgdmVyc2lvbnMgb2YgTmF0aXZlKlR5cGUgYXJlIHRoZSBzYW1lCisgKiB0eXBlcywg
cmVuYW1lZCBpbiBFR0wgMS4zIHNvIGFsbCB0eXBlcyBpbiB0aGUgQVBJIHN0YXJ0IHdpdGggIkVH
TCIuCisgKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVkMzMl9fKSAmJiAh
ZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9fKSAvKiBXaW4z
MiBhbmQgV2luQ0UgKi8KKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4z
Ml9MRUFOX0FORF9NRUFOIDEKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordHlwZWRl
ZiBIREMgICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBIQklUTUFQIEVHTE5hdGl2
ZVBpeG1hcFR5cGU7Cit0eXBlZGVmIEhXTkQgICAgRUdMTmF0aXZlV2luZG93VHlwZTsKKworI2Vs
aWYgZGVmaW5lZChfX1dJTlNDV19fKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18pICAvKiBTeW1i
aWFuICovCisKK3R5cGVkZWYgaW50ICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Cit0eXBlZGVmIHZv
aWQgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Cit0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVBpeG1hcFR5
cGU7CisKKyNlbGlmIGRlZmluZWQoX191bml4X18pCisKKy8qIFgxMSAodGVudGF0aXZlKSAgKi8K
KyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorCit0eXBlZGVm
IERpc3BsYXkgKkVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBQaXhtYXAgICBFR0xOYXRp
dmVQaXhtYXBUeXBlOwordHlwZWRlZiBXaW5kb3cgICBFR0xOYXRpdmVXaW5kb3dUeXBlOworCisj
ZWxzZQorI2Vycm9yICJQbGF0Zm9ybSBub3QgcmVjb2duaXplZCIKKyNlbmRpZgorCisvKiBFR0wg
MS4yIHR5cGVzLCByZW5hbWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICovCit0eXBlZGVm
IEVHTE5hdGl2ZURpc3BsYXlUeXBlIE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBFR0xOYXRp
dmVQaXhtYXBUeXBlICBOYXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBFR0xOYXRpdmVXaW5kb3dU
eXBlICBOYXRpdmVXaW5kb3dUeXBlOworCisKKy8qIERlZmluZSBFR0xpbnQuIFRoaXMgbXVzdCBi
ZSBhIHNpZ25lZCBpbnRlZ3JhbCB0eXBlIGxhcmdlIGVub3VnaCB0byBjb250YWluCisgKiBhbGwg
bGVnYWwgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgcGFzc2VkIGludG8gYW5kIG91dCBvZiBF
R0wsIHdoZXRoZXIKKyAqIHRoZWlyIHR5cGUgaXMgYm9vbGVhbiwgYml0bWFzaywgZW51bWVyYW50
IChzeW1ib2xpYyBjb25zdGFudCksIGludGVnZXIsCisgKiBoYW5kbGUsIG9yIG90aGVyLiAgV2hp
bGUgaW4gZ2VuZXJhbCBhIDMyLWJpdCBpbnRlZ2VyIHdpbGwgc3VmZmljZSwgaWYKKyAqIGhhbmRs
ZXMgYXJlIDY0IGJpdCB0eXBlcywgdGhlbiBFR0xpbnQgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBz
aWduZWQgNjQtYml0CisgKiBpbnRlZ2VyIHR5cGUuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQz
Ml90IEVHTGludDsKKworI2VuZGlmIC8qIF9fZWdscGxhdGZvcm1faCAqLwpJbmRleDogQU5HTEUv
aW5jbHVkZS9HTEVTMi9nbDIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMRVMyL2ds
Mi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MjEgQEAKKyNpZm5kZWYgX19nbDJfaF8KKyNkZWZpbmUgX19nbDJfaF8K
KworLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAt
MDgwMCAjJCAqLworCisjaW5jbHVkZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBkb2N1bWVudCBp
cyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24K
KyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJl
ZUIvIC4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGEgdHlwZSBkZWZpbml0aW9u
cworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgdm9pZCAgICAgICAgICAgICBHTHZvaWQ7
Cit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgR0xjaGFyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQg
ICAgIEdMZW51bTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICBHTGJvb2xlYW47Cit0eXBlZGVm
IHVuc2lnbmVkIGludCAgICAgR0xiaXRmaWVsZDsKK3R5cGVkZWYga2hyb25vc19pbnQ4X3QgICBH
TGJ5dGU7Cit0eXBlZGVmIHNob3J0ICAgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgaW50ICAg
ICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTHNpemVpOwordHlw
ZWRlZiBraHJvbm9zX3VpbnQ4X3QgIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAg
R0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0x1aW50OwordHlwZWRlZiBraHJv
bm9zX2Zsb2F0X3QgIEdMZmxvYXQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xjbGFtcGY7
Cit0eXBlZGVmIGtocm9ub3NfaW50MzJfdCAgR0xmaXhlZDsKKworLyogR0wgdHlwZXMgZm9yIGhh
bmRsaW5nIGxhcmdlIHZlcnRleCBidWZmZXIgb2JqZWN0cyAqLwordHlwZWRlZiBraHJvbm9zX2lu
dHB0cl90IEdMaW50cHRyOwordHlwZWRlZiBraHJvbm9zX3NzaXplX3QgIEdMc2l6ZWlwdHI7CisK
Ky8qIE9wZW5HTCBFUyBjb3JlIHZlcnNpb25zICovCisjZGVmaW5lIEdMX0VTX1ZFUlNJT05fMl8w
ICAgICAgICAgICAgICAgICAxCisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworI2RlZmluZSBHTF9E
RVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTF9DT0xPUl9C
VUZGRVJfQklUICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBCb29sZWFuICovCisjZGVm
aW5lIEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX1RSVUUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJlZ2luTW9kZSAqLworI2RlZmluZSBH
TF9QT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEdMX0xJTkVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTElORV9MT09QICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9MSU5FX1NUUklQICAgICAgICAg
ICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDQKKyNkZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDB4
MDAwNQorI2RlZmluZSBHTF9UUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgMHgwMDA2CisK
Ky8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgR0xf
TkVWRVIgKi8KKy8qICAgICAgR0xfTEVTUyAqLworLyogICAgICBHTF9FUVVBTCAqLworLyogICAg
ICBHTF9MRVFVQUwgKi8KKy8qICAgICAgR0xfR1JFQVRFUiAqLworLyogICAgICBHTF9OT1RFUVVB
TCAqLworLyogICAgICBHTF9HRVFVQUwgKi8KKy8qICAgICAgR0xfQUxXQVlTICovCisKKy8qIEJs
ZW5kaW5nRmFjdG9yRGVzdCAqLworI2RlZmluZSBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMAorI2RlZmluZSBHTF9PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2Rl
ZmluZSBHTF9TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEdM
X09ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgR0xfU1JDX0FM
UEhBICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBICAgICAgICAgICAgMHgwMzAzCisjZGVmaW5lIEdMX0RTVF9BTFBIQSAgICAgICAgICAg
ICAgICAgICAgICAweDAzMDQKKyNkZWZpbmUgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAg
ICAgIDB4MDMwNQorCisvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworLyogICAgICBHTF9aRVJPICov
CisvKiAgICAgIEdMX09ORSAqLworI2RlZmluZSBHTF9EU1RfQ09MT1IgICAgICAgICAgICAgICAg
ICAgICAgMHgwMzA2CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICAw
eDAzMDcKKyNkZWZpbmUgR0xfU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDB4MDMwOAor
LyogICAgICBHTF9TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAq
LworLyogICAgICBHTF9EU1RfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX0RTVF9BTFBI
QSAqLworCisvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8KKyNkZWZpbmUgR0xfRlVOQ19BREQg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNgorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTiAg
ICAgICAgICAgICAgICAgMHg4MDA5CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OX1JHQiAgICAg
ICAgICAgICAweDgwMDkgICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworI2RlZmluZSBH
TF9CTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgMHg4ODNECisKKy8qIEJsZW5kU3VidHJh
Y3QgKi8KKyNkZWZpbmUgR0xfRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDB4ODAwQQor
I2RlZmluZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgMHg4MDBCCisKKy8qIFNl
cGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworI2RlZmluZSBHTF9CTEVORF9EU1RfUkdCICAgICAg
ICAgICAgICAgICAgMHg4MEM4CisjZGVmaW5lIEdMX0JMRU5EX1NSQ19SR0IgICAgICAgICAgICAg
ICAgICAweDgwQzkKKyNkZWZpbmUgR0xfQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDB4
ODBDQQorI2RlZmluZSBHTF9CTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgMHg4MENCCisj
ZGVmaW5lIEdMX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAweDgwMDEKKyNkZWZpbmUg
R0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDB4ODAwMgorI2RlZmluZSBHTF9DT05T
VEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgMHg4MDAzCisjZGVmaW5lIEdMX09ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSAgICAgICAweDgwMDQKKyNkZWZpbmUgR0xfQkxFTkRfQ09MT1IgICAgICAg
ICAgICAgICAgICAgIDB4ODAwNQorCisvKiBCdWZmZXIgT2JqZWN0cyAqLworI2RlZmluZSBHTF9B
UlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgMHg4ODkyCisjZGVmaW5lIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSICAgICAgICAgICAweDg4OTMKKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSX0JJ
TkRJTkcgICAgICAgICAgIDB4ODg5NAorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HICAgMHg4ODk1CisKKyNkZWZpbmUgR0xfU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAg
ICAgIDB4ODhFMAorI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgMHg4
OEU0CisjZGVmaW5lIEdMX0RZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICAweDg4RTgKKwor
I2RlZmluZSBHTF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjZGVmaW5l
IEdMX0JVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICAweDg3NjUKKworI2RlZmluZSBHTF9D
VVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgMHg4NjI2CisKKy8qIEN1bGxGYWNlTW9kZSAq
LworI2RlZmluZSBHTF9GUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA0CisjZGVm
aW5lIEdMX0JBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDUKKyNkZWZpbmUgR0xf
RlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgIDB4MDQwOAorCisvKiBEZXB0aEZ1bmN0aW9u
ICovCisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAgICAgR0xf
RVFVQUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIgKi8KKy8q
ICAgICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAgIEdMX0FM
V0FZUyAqLworCisvKiBFbmFibGVDYXAgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV8yRCAgICAgICAg
ICAgICAgICAgICAgIDB4MERFMQorI2RlZmluZSBHTF9DVUxMX0ZBQ0UgICAgICAgICAgICAgICAg
ICAgICAgMHgwQjQ0CisjZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBCRTIKKyNkZWZpbmUgR0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJEMAor
I2RlZmluZSBHTF9TVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgMHgwQjkwCisjZGVmaW5l
IEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICAweDBCNzEKKyNkZWZpbmUgR0xfU0NJ
U1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDB4MEMxMQorI2RlZmluZSBHTF9QT0xZR09OX09G
RlNFVF9GSUxMICAgICAgICAgICAgMHg4MDM3CisjZGVmaW5lIEdMX1NBTVBMRV9BTFBIQV9UT19D
T1ZFUkFHRSAgICAgICAweDgwOUUKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFICAgICAgICAg
ICAgICAgIDB4ODBBMAorCisvKiBFcnJvckNvZGUgKi8KKyNkZWZpbmUgR0xfTk9fRVJST1IgICAg
ICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9FTlVNICAgICAgICAgICAg
ICAgICAgIDB4MDUwMAorI2RlZmluZSBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAg
MHgwNTAxCisjZGVmaW5lIEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICAweDA1MDIK
KyNkZWZpbmUgR0xfT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgIDB4MDUwNQorCisvKiBG
cm9udEZhY2VEaXJlY3Rpb24gKi8KKyNkZWZpbmUgR0xfQ1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDkwMAorI2RlZmluZSBHTF9DQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwOTAxCisKKy8qIEdldFBOYW1lICovCisjZGVmaW5lIEdMX0xJTkVfV0lEVEggICAgICAgICAg
ICAgICAgICAgICAweDBCMjEKKyNkZWZpbmUgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAg
ICAgIDB4ODQ2RAorI2RlZmluZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgMHg4
NDZFCisjZGVmaW5lIEdMX0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICAweDBCNDUKKyNk
ZWZpbmUgR0xfRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDB4MEI0NgorI2RlZmluZSBH
TF9ERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgMHgwQjcwCisjZGVmaW5lIEdMX0RFUFRI
X1dSSVRFTUFTSyAgICAgICAgICAgICAgICAweDBCNzIKKyNkZWZpbmUgR0xfREVQVEhfQ0xFQVJf
VkFMVUUgICAgICAgICAgICAgIDB4MEI3MworI2RlZmluZSBHTF9ERVBUSF9GVU5DICAgICAgICAg
ICAgICAgICAgICAgMHgwQjc0CisjZGVmaW5lIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAg
ICAgICAweDBCOTEKKyNkZWZpbmUgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDB4
MEI5MgorI2RlZmluZSBHTF9TVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgMHgwQjk0Cisj
ZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICAweDBCOTUKKyNkZWZpbmUg
R0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDB4MEI5NgorI2RlZmluZSBHTF9TVEVO
Q0lMX1JFRiAgICAgICAgICAgICAgICAgICAgMHgwQjk3CisjZGVmaW5lIEdMX1NURU5DSUxfVkFM
VUVfTUFTSyAgICAgICAgICAgICAweDBCOTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9XUklURU1BU0sg
ICAgICAgICAgICAgIDB4MEI5OAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAg
ICAgICAgMHg4ODAwCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICAw
eDg4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDB4ODgwMgor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgMHg4ODAzCisjZGVmaW5l
IEdMX1NURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICAweDhDQTMKKyNkZWZpbmUgR0xfU1RF
TkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDB4OENBNAorI2RlZmluZSBHTF9TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLICAgICAgICAgMHg4Q0E1CisjZGVmaW5lIEdMX1ZJRVdQT1JUICAgICAgICAg
ICAgICAgICAgICAgICAweDBCQTIKKyNkZWZpbmUgR0xfU0NJU1NPUl9CT1ggICAgICAgICAgICAg
ICAgICAgIDB4MEMxMAorLyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8KKyNkZWZpbmUgR0xfQ09M
T1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDB4MEMyMgorI2RlZmluZSBHTF9DT0xPUl9XUklU
RU1BU0sgICAgICAgICAgICAgICAgMHgwQzIzCisjZGVmaW5lIEdMX1VOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAweDBDRjUKKyNkZWZpbmUgR0xfUEFDS19BTElHTk1FTlQgICAgICAgICAg
ICAgICAgIDB4MEQwNQorI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAg
MHgwRDMzCisjZGVmaW5lIEdMX01BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICAweDBEM0EK
KyNkZWZpbmUgR0xfU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgIDB4MEQ1MAorI2RlZmlu
ZSBHTF9SRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUyCisjZGVmaW5lIEdMX0dS
RUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICAweDBENTMKKyNkZWZpbmUgR0xfQkxVRV9CSVRT
ICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NAorI2RlZmluZSBHTF9BTFBIQV9CSVRTICAgICAg
ICAgICAgICAgICAgICAgMHgwRDU1CisjZGVmaW5lIEdMX0RFUFRIX0JJVFMgICAgICAgICAgICAg
ICAgICAgICAweDBENTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAg
IDB4MEQ1NworI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgMHgyQTAw
CisvKiAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyNkZWZpbmUgR0xfUE9MWUdPTl9P
RkZTRVRfRkFDVE9SICAgICAgICAgIDB4ODAzOAorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdf
MkQgICAgICAgICAgICAgMHg4MDY5CisjZGVmaW5lIEdMX1NBTVBMRV9CVUZGRVJTICAgICAgICAg
ICAgICAgICAweDgwQTgKKyNkZWZpbmUgR0xfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODBBOQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgMHg4MEFB
CisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICAweDgwQUIKKworLyog
R2V0VGV4dHVyZVBhcmFtZXRlciAqLworLyogICAgICBHTF9URVhUVVJFX01BR19GSUxURVIgKi8K
Ky8qICAgICAgR0xfVEVYVFVSRV9NSU5fRklMVEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JB
UF9TICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9UICovCisKKyNkZWZpbmUgR0xfTlVNX0NP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIDB4ODZBMgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1RF
WFRVUkVfRk9STUFUUyAgICAgMHg4NkEzCisKKy8qIEhpbnRNb2RlICovCisjZGVmaW5lIEdMX0RP
TlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgR0xfRkFTVEVTVCAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMQorI2RlZmluZSBHTF9OSUNFU1QgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgxMTAyCisKKy8qIEhpbnRUYXJnZXQgKi8KKyNkZWZpbmUgR0xfR0VO
RVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNk
ZWZpbmUgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVmaW5lIEdMX1NIT1JU
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlQgICAgICAgICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisK
Ky8qIFBpeGVsRm9ybWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAg
ICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3Cisj
ZGVmaW5lIEdMX1JHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUg
R0xfTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBHTF9MVU1J
TkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgMHgxOTBBCisKKy8qIFBpeGVsVHlwZSAqLworLyog
ICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQgICAgICAgICAweDgwMzMKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAg
ICAgIDB4ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgMHg4
MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgMHg4QjMwCisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAg
ICAgIDB4OEIzMQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICAw
eDg4NjkKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgMHg4REZC
CisjZGVmaW5lIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgIDB4OERGQworI2Rl
ZmluZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAweDhCNEQKKyNkZWZpbmUg
R0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgMHg4QjRDCisjZGVmaW5lIEdMX01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgIDB4ODg3MgorI2RlZmluZSBHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTICAgICAweDhERkQKKyNkZWZpbmUgR0xfU0hBREVSX1RZUEUg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjRGCisjZGVmaW5lIEdMX0RFTEVURV9TVEFUVVMgICAg
ICAgICAgICAgICAgICAgIDB4OEI4MAorI2RlZmluZSBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAg
ICAgICAgICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAg
ICAgICAgMHg4QjgzCisjZGVmaW5lIEdMX0FUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAg
IDB4OEI4NQorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICAweDhC
ODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAgICAgMHg4Qjg3Cisj
ZGVmaW5lIEdMX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDB4OEI4OQorI2RlZmlu
ZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgICAweDhCOEEKKyNkZWZpbmUgR0xf
U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgMHg4QjhDCisjZGVmaW5lIEdMX0NVUlJF
TlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDB4OEI4RAorCisvKiBTdGVuY2lsRnVuY3Rpb24g
Ki8KKyNkZWZpbmUgR0xfTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2Rl
ZmluZSBHTF9MRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCisjZGVmaW5lIEdM
X0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDIKKyNkZWZpbmUgR0xfTEVRVUFM
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMworI2RlZmluZSBHTF9HUkVBVEVSICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMjA0CisjZGVmaW5lIEdMX05PVEVRVUFMICAgICAgICAgICAg
ICAgICAgICAgICAweDAyMDUKKyNkZWZpbmUgR0xfR0VRVUFMICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwNgorI2RlZmluZSBHTF9BTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MjA3CisKKy8qIFN0ZW5jaWxPcCAqLworLyogICAgICBHTF9aRVJPICovCisjZGVmaW5lIEdMX0tF
RVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDAKKyNkZWZpbmUgR0xfUkVQTEFDRSAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMQorI2RlZmluZSBHTF9JTkNSICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgxRTAyCisjZGVmaW5lIEdMX0RFQ1IgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDFFMDMKKyNkZWZpbmUgR0xfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTUwQQorI2RlZmluZSBHTF9JTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgMHg4NTA3
CisjZGVmaW5lIEdMX0RFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAweDg1MDgKKworLyog
U3RyaW5nTmFtZSAqLworI2RlZmluZSBHTF9WRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxRjAwCisjZGVmaW5lIEdMX1JFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICAweDFGMDEK
KyNkZWZpbmUgR0xfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMgorI2RlZmlu
ZSBHTF9FWFRFTlNJT05TICAgICAgICAgICAgICAgICAgICAgMHgxRjAzCisKKy8qIFRleHR1cmVN
YWdGaWx0ZXIgKi8KKyNkZWZpbmUgR0xfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4
MjYwMAorI2RlZmluZSBHTF9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjAxCisK
Ky8qIFRleHR1cmVNaW5GaWx0ZXIgKi8KKy8qICAgICAgR0xfTkVBUkVTVCAqLworLyogICAgICBH
TF9MSU5FQVIgKi8KKyNkZWZpbmUgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDB4
MjcwMAorI2RlZmluZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgMHgyNzAxCisj
ZGVmaW5lIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICAweDI3MDIKKyNkZWZpbmUg
R0xfTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDB4MjcwMworCisvKiBUZXh0dXJlUGFy
YW1ldGVyTmFtZSAqLworI2RlZmluZSBHTF9URVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAg
MHgyODAwCisjZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICAweDI4MDEK
KyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgIDB4MjgwMgorI2RlZmlu
ZSBHTF9URVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgMHgyODAzCisKKy8qIFRleHR1cmVU
YXJnZXQgKi8KKy8qICAgICAgR0xfVEVYVFVSRV8yRCAqLworI2RlZmluZSBHTF9URVhUVVJFICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxNzAyCisKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01B
UCAgICAgICAgICAgICAgIDB4ODUxMworI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVAgICAgICAgMHg4NTE0CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAg
ICAweDg1MTUKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDB4ODUx
NgorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgMHg4NTE3CisjZGVm
aW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICAweDg1MTgKKyNkZWZpbmUgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDB4ODUxOQorI2RlZmluZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1ogICAgMHg4NTFBCisjZGVmaW5lIEdMX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUgICAgICAweDg1MUMKKworLyogVGV4dHVyZVVuaXQgKi8KKyNkZWZpbmUgR0xf
VEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMAorI2RlZmluZSBHTF9URVhUVVJF
MSAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMxCisjZGVmaW5lIEdMX1RFWFRVUkUyICAgICAg
ICAgICAgICAgICAgICAgICAweDg0QzIKKyNkZWZpbmUgR0xfVEVYVFVSRTMgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRDMworI2RlZmluZSBHTF9URVhUVVJFNCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM0CisjZGVmaW5lIEdMX1RFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzUKKyNkZWZpbmUgR0xfVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNgorI2Rl
ZmluZSBHTF9URVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM3CisjZGVmaW5lIEdM
X1RFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzgKKyNkZWZpbmUgR0xfVEVYVFVS
RTkgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDOQorI2RlZmluZSBHTF9URVhUVVJFMTAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NENBCisjZGVmaW5lIEdMX1RFWFRVUkUxMSAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0IKKyNkZWZpbmUgR0xfVEVYVFVSRTEyICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDQworI2RlZmluZSBHTF9URVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgMHg4
NENECisjZGVmaW5lIEdMX1RFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICAweDg0Q0UKKyNk
ZWZpbmUgR0xfVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRgorI2RlZmluZSBH
TF9URVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgMHg4NEQwCisjZGVmaW5lIEdMX1RFWFRV
UkUxNyAgICAgICAgICAgICAgICAgICAgICAweDg0RDEKKyNkZWZpbmUgR0xfVEVYVFVSRTE4ICAg
ICAgICAgICAgICAgICAgICAgIDB4ODREMgorI2RlZmluZSBHTF9URVhUVVJFMTkgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEQzCisjZGVmaW5lIEdMX1RFWFRVUkUyMCAgICAgICAgICAgICAgICAg
ICAgICAweDg0RDQKKyNkZWZpbmUgR0xfVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDB4
ODRENQorI2RlZmluZSBHTF9URVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ2Cisj
ZGVmaW5lIEdMX1RFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICAweDg0RDcKKyNkZWZpbmUg
R0xfVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDB4ODREOAorI2RlZmluZSBHTF9URVhU
VVJFMjUgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ5CisjZGVmaW5lIEdMX1RFWFRVUkUyNiAg
ICAgICAgICAgICAgICAgICAgICAweDg0REEKKyNkZWZpbmUgR0xfVEVYVFVSRTI3ICAgICAgICAg
ICAgICAgICAgICAgIDB4ODREQgorI2RlZmluZSBHTF9URVhUVVJFMjggICAgICAgICAgICAgICAg
ICAgICAgMHg4NERDCisjZGVmaW5lIEdMX1RFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAgICAw
eDg0REQKKyNkZWZpbmUgR0xfVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDB4ODRERQor
I2RlZmluZSBHTF9URVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgMHg4NERGCisjZGVmaW5l
IEdMX0FDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICAweDg0RTAKKworLyogVGV4dHVyZVdy
YXBNb2RlICovCisjZGVmaW5lIEdMX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI5
MDEKKyNkZWZpbmUgR0xfQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDB4ODEyRgorI2Rl
ZmluZSBHTF9NSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgMHg4MzcwCisKKy8qIFVuaWZv
cm0gVHlwZXMgKi8KKyNkZWZpbmUgR0xfRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MAorI2RlZmluZSBHTF9GTE9BVF9WRUMzICAgICAgICAgICAgICAgICAgICAgMHg4QjUxCisj
ZGVmaW5lIEdMX0ZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICAweDhCNTIKKyNkZWZpbmUg
R0xfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1MworI2RlZmluZSBHTF9JTlRf
VkVDMyAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU0CisjZGVmaW5lIEdMX0lOVF9WRUM0ICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNTUKKyNkZWZpbmUgR0xfQk9PTCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1NgorI2RlZmluZSBHTF9CT09MX1ZFQzIgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjU3CisjZGVmaW5lIEdMX0JPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICAw
eDhCNTgKKyNkZWZpbmUgR0xfQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OQor
I2RlZmluZSBHTF9GTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgMHg4QjVBCisjZGVmaW5l
IEdMX0ZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICAweDhCNUIKKyNkZWZpbmUgR0xfRkxP
QVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDB4OEI1QworI2RlZmluZSBHTF9TQU1QTEVSXzJE
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVFCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VCRSAgICAg
ICAgICAgICAgICAgICAweDhCNjAKKworLyogVmVydGV4IEFycmF5cyAqLworI2RlZmluZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDB4ODYyMgorI2RlZmluZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgIDB4ODYyNAorI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX1RZUEUgICAgICAgICAgIDB4ODYyNQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX05PUk1BTElaRUQgICAgIDB4ODg2QQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIgICAgICAgIDB4ODY0NQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HIDB4ODg5RgorCisvKiBSZWFkIEZvcm1hdCAqLworI2RlZmluZSBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgICAweDhCOUEKKyNkZWZpbmUgR0xfSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgMHg4QjlCCisKKy8qIFNoYWRlciBTb3VyY2UgKi8K
KyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4OEI4MQorI2RlZmlu
ZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NI
QURFUl9TT1VSQ0VfTEVOR1RIICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NP
TVBJTEVSICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIgQmluYXJ5ICovCisjZGVm
aW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xf
TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lz
aW9uLVNwZWNpZmllZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAg
ICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDB4OERG
MgorI2RlZmluZSBHTF9MT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVm
aW5lIEdMX01FRElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZpbmUgR0xf
SElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNQorCisvKiBGcmFtZWJ1ZmZlciBP
YmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICAweDhE
NDAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisj
ZGVmaW5lIEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYKKyNkZWZpbmUg
R0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmluZSBHTF9SR0I1
NjUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBP
TkVOVDE2ICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAgICAg
ICAgICAgICAgICAgIDB4MTkwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAg
ICAgICAgMHg4RDQ4CisKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAg
IDB4OEQ0MgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgMHg4RDQz
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICAweDhENDQKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDB4OEQ1MAorI2RlZmluZSBHTF9S
RU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgMHg4RDUxCisjZGVmaW5lIEdMX1JFTkRFUkJV
RkZFUl9CTFVFX1NJWkUgICAgICAgICAweDhENTIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0FM
UEhBX1NJWkUgICAgICAgIDB4OEQ1MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0la
RSAgICAgICAgMHg4RDU0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAg
ICAweDhENTUKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBF
ICAgICAgICAgICAweDhDRDAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfTkFNRSAgICAgICAgICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDB4OENEMgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSAweDhDRDMKKworI2RlZmluZSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgMHg4Q0UwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFD
SE1FTlQgICAgICAgICAgICAgICAweDhEMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
ICAgICAgICAgICAgIDB4OEQyMAorCisjZGVmaW5lIEdMX05PTkUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwCisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAg
ICAgICAgICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVCAgICAgICAgIDB4OENENgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01J
U1NJTkdfQVRUQUNITUVOVCAweDhDRDcKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9ESU1FTlNJT05TICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEICAgICAgICAgICAgICAgICAgIDB4OENERAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0JJTkRJTkcgICAgICAgICAgICAweDhDQTYKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JJTkRJ
TkcgICAgICAgICAgIDB4OENBNworI2RlZmluZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgICAg
ICAgICAgMHg4NEU4CisKKyNkZWZpbmUgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
IDB4MDUwNgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdMIGNvcmUgZnVuY3Rpb25zLgorICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
QWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xBdHRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVy
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEF0dHJpYkxvY2F0
aW9uIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVyIChHTGVudW0g
dGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQmluZEZyYW1lYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZmZXIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kUmVuZGVyYnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdMZW51bSB0YXJnZXQsIEdMdWludCB0
ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRDb2xv
ciAoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYg
YWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0
aW9uICggR0xlbnVtIG1vZGUgKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBo
YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuYyAoR0xl
bnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmxlbmRGdW5jU2VwYXJhdGUgKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RS
R0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0
ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJ1ZmZlclN1YkRhdGEgKEdMZW51bSB0YXJnZXQsIEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xf
QVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
IChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
Q2xlYXIgKEdMYml0ZmllbGQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbENsZWFyQ29sb3IgKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBm
IGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQ2xlYXJEZXB0aGYgKEdMY2xhbXBmIGRlcHRoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJTdGVuY2lsIChHTGludCBzKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xl
YW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21waWxlU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdl
MkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleEltYWdl
MkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3Jk
ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4U3ViSW1h
Z2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K0dMX0FQSUNBTEwgR0x1aW50ICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9p
ZCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICBHTF9BUElFTlRSWSBnbENyZWF0ZVNoYWRlciAo
R0xlbnVtIHR5cGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDdWxs
RmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUZyYW1lYnVmZmVycyAoR0xz
aXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAoR0xz
aXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUZXh0dXJlcyAoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbERlcHRoTWFzayAoR0xib29sZWFuIGZsYWcpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aFJhbmdlZiAoR0xjbGFtcGYgek5lYXIsIEdM
Y2xhbXBmIHpGYXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXRh
Y2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGlzYWJsZSAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1
aW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0Fy
cmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzIChHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZSAoR0xlbnVtIGNhcCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xGaW5pc2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xG
bHVzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEIChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1
cmUsIEdMaW50IGxldmVsKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
RnJvbnRGYWNlIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuZXJhdGVNaXBtYXAgKEdMZW51bSB0YXJn
ZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5GcmFtZWJ1ZmZl
cnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCog
cmVuZGVyYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
blRleHR1cmVzIChHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6
ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGlu
ZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51
bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QXR0YWNoZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3Vu
dCwgR0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycyk7CitHTF9BUElDQUxMIGludCAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29u
c3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xlbnVt
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VydiAoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChHTHVp
bnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUluZm9Mb2cgKEdMdWludCBwcm9ncmFt
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChHTHVpbnQgc2hh
ZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFkZXJJbmZvTG9nIChHTHVpbnQgc2hhZGVyLCBHTHNpemVp
IGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVu
dW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQq
IHByZWNpc2lvbik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNo
YWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1Ynl0ZSogR0xfQVBJRU5U
UlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZv
cm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdMdWlu
dCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIGlu
dCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJ
c0J1ZmZlciAoR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElF
TlRSWSBnbElzRW5hYmxlZCAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBH
TF9BUElFTlRSWSBnbElzRnJhbWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElD
QUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0p
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1JlbmRlcmJ1ZmZlciAo
R0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRS
WSBnbElzU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdM
X0FQSUVOVFJZIGdsSXNUZXh0dXJlIChHTHVpbnQgdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbExpbmVXaWR0aCAoR0xmbG9hdCB3aWR0aCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3Jh
bSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFBpeGVsU3RvcmVpIChH
TGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsUG9seWdvbk9mZnNldCAoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdlIChH
TGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
U2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVtIGJp
bmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQgc2hh
ZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50KiBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVu
YyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChHTGVudW0gZmFjZSwg
R0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAoR0x1aW50IG1hc2spOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFza1NlcGFyYXRlIChHTGVudW0g
ZmFjZSwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcFNlcGFyYXRlIChH
TGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQg
cGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0
ZXJmdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJpIChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFmIChHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTFmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWkg
KEdMaW50IGxvY2F0aW9uLCBHTGludCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTFpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTJmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmZ2IChHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFVuaWZvcm0yaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2YgKEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybTNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xV
bmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNpdiAoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtNGkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTRpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDJmdiAoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybU1hdHJpeDNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVXNlUHJvZ3JhbSAoR0x1aW50IHByb2dy
YW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWYWxpZGF0ZVByb2dy
YW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmVydGV4QXR0cmliMWYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xWZXJ0ZXhBdHRyaWIyZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmZ2IChH
THVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgs
IEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliM2Z2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGYg
KEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYg
KEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIChHTHVpbnQgaW5keCwgR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3QgR0x2b2lkKiBwdHIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xWaWV3cG9ydCAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19n
bDJfaF8gKi8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzczIEBACisjaWZu
ZGVmIF9fZ2wyZXh0X2hfCisjZGVmaW5lIF9fZ2wyZXh0X2hfCisKKy8qICRSZXZpc2lvbjogMTA3
OTggJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMTkgMTc6MzQ6MzAgLTA3MDAgIyQgKi8KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBkb2N1bWVu
dCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNp
b24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIvIC4KKyAqLworCisjaWZuZGVmIEdMX0FQSUVOVFJZUAorIyAgIGRlZmluZSBHTF9BUElF
TlRSWVAgR0xfQVBJRU5UUlkqCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBPRVMg
ZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9PRVNfY29tcHJl
c3NlZF9FVEMxX1JHQjhfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfY29tcHJlc3NlZF9FVEMx
X1JHQjhfdGV4dHVyZQorI2RlZmluZSBHTF9FVEMxX1JHQjhfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2NAorI2VuZGlmCisKKy8qIEdMX09FU19jb21wcmVz
c2VkX3BhbGV0dGVkX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0
ZWRfdGV4dHVyZQorI2RlZmluZSBHTF9QQUxFVFRFNF9SR0I4X09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI5MAorI2RlZmluZSBHTF9QQUxFVFRFNF9SR0JBOF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5MQorI2RlZmluZSBHTF9QQUxF
VFRFNF9SNV9HNl9CNV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5Mgor
I2RlZmluZSBHTF9QQUxFVFRFNF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEI5MworI2RlZmluZSBHTF9QQUxFVFRFNF9SR0I1X0ExX09FUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NAorI2RlZmluZSBHTF9QQUxFVFRFOF9SR0I4X09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NQorI2RlZmluZSBHTF9Q
QUxFVFRFOF9SR0JBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5
NgorI2RlZmluZSBHTF9QQUxFVFRFOF9SNV9HNl9CNV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEI5NworI2RlZmluZSBHTF9QQUxFVFRFOF9SR0JBNF9PRVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5OAorI2RlZmluZSBHTF9QQUxFVFRFOF9SR0I1
X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5OQorI2VuZGlmCisK
Ky8qIEdMX09FU19kZXB0aDI0ICovCisjaWZuZGVmIEdMX09FU19kZXB0aDI0CisjZGVmaW5lIEdM
X0RFUFRIX0NPTVBPTkVOVDI0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MUE2CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoMzIgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRo
MzIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxQTcKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGhfdGV4dHVyZSAqLwor
LyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBH
TF9PRVNfRUdMX2ltYWdlICovCisjaWZuZGVmIEdMX09FU19FR0xfaW1hZ2UKK3R5cGVkZWYgdm9p
ZCogR0xlZ2xJbWFnZU9FUzsKKyNlbmRpZgorCisvKiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50
ICovCisjaWZuZGVmIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQKKyNkZWZpbmUgR0xfVU5TSUdO
RURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNl
bmRpZgorCisvKiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX09FU19n
ZXRfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NDEKKyNkZWZpbmUgR0xfTlVNX1BST0dSQU1f
QklOQVJZX0ZPUk1BVFNfT0VTICAgICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUg
R0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg3RkYKKyNlbmRpZgorCisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisjaWZuZGVmIEdMX09FU19t
YXBidWZmZXIKKyNkZWZpbmUgR0xfV1JJVEVfT05MWV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4QjkKKyNkZWZpbmUgR0xfQlVGRkVSX0FDQ0VTU19PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkIKKyNkZWZpbmUgR0xfQlVGRkVS
X01BUFBFRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMKKyNk
ZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4QkQKKyNlbmRpZgorCisvKiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKi8K
KyNpZm5kZWYgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsCisjZGVmaW5lIEdMX0RFUFRIX1NU
RU5DSUxfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY5CisjZGVm
aW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEZBCisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4OEYwCisjZW5kaWYKKworLyogR0xfT0VTX3JnYjhfcmdiYTgg
Ki8KKyNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKKyNkZWZpbmUgR0xfUkdCOF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTEKKyNkZWZpbmUgR0xf
UkdCQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NTgKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgKi8KKyNpZm5kZWYg
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTICAgICAgICAgICAgICAgICAgMHg4QjhCCisjZW5kaWYKKworLyog
R0xfT0VTX3N0ZW5jaWwxICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsMQorI2RlZmluZSBHTF9T
VEVOQ0lMX0lOREVYMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0
NgorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsNCAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNp
bDQKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDRfT0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhENDcKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV8zRCAqLworI2lm
bmRlZiBHTF9PRVNfdGV4dHVyZV8zRAorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfUl9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MgorI2RlZmluZSBHTF9URVhUVVJF
XzNEX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA2RgorI2Rl
ZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfM0RfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2QQorI2RlZmluZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFX09FUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9TQU1QTEVSXzNEX09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1RgorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfM0RfWk9GRlNFVF9PRVMgICAgICAgIDB4OENENAor
I2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0ICovCisvKiBObyBuZXcgdG9rZW5zIGlu
dHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0
X2xpbmVhciAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9u
LiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQKKyNkZWZpbmUgR0xfSEFMRl9GTE9BVF9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENjEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5
IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9ucG90ICovCisvKiBObyBu
ZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
CisjZGVmaW5lIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NUI1CisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0ICov
CisvKiBHTF9IQUxGX0ZMT0FUX09FUyBkZWZpbmVkIGluIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQgYWxyZWFkeS4gKi8KKworLyogR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgKi8KKyNp
Zm5kZWYgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIKKyNkZWZpbmUgR0xfVU5TSUdORURf
SU5UXzEwXzEwXzEwXzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjYKKyNkZWZp
bmUgR0xfSU5UXzEwXzEwXzEwXzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhERjcKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFNRCBleHRlbnNpb24g
dG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190
ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlCisjZGVmaW5l
IEdMXzNEQ19YX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4N0Y5CisjZGVmaW5lIEdMXzNEQ19YWV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4N0ZBCisjZW5kaWYKKworLyogR0xfQU1EX2NvbXByZXNzZWRfQVRD
X3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUKKyNkZWZp
bmUgR0xfQVRDX1JHQl9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDOTIKKyNkZWZpbmUgR0xfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDOTMKKyNkZWZpbmUgR0xfQVRDX1JHQkFfSU5URVJQT0xBVEVE
X0FMUEhBX0FNRCAgICAgICAgICAgICAgICAgICAgICAweDg3RUUKKyNlbmRpZgorCisvKiBHTF9B
TURfcGVyZm9ybWFuY2VfbW9uaXRvciAqLworI2lmbmRlZiBHTF9BTURfcGVyZm9ybWFuY2VfbW9u
aXRvcgorI2RlZmluZSBHTF9DT1VOVEVSX1RZUEVfQU1EICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEJDMAorI2RlZmluZSBHTF9DT1VOVEVSX1JBTkdFX0FNRCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMQorI2RlZmluZSBHTF9VTlNJR05FRF9J
TlQ2NF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMgorI2RlZmlu
ZSBHTF9QRVJDRU5UQUdFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEJDMworI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VMVF9BVkFJTEFCTEVfQU1EICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEJDNAorI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VMVF9TSVpFX0FN
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDNQorI2RlZmluZSBHTF9QRVJGTU9O
X1JFU1VMVF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDNgorI2Vu
ZGlmCisKKy8qIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwICovCisjaWZuZGVmIEdMX0FNRF9w
cm9ncmFtX2JpbmFyeV9aNDAwCisjZGVmaW5lIEdMX1o0MDBfQklOQVJZX0FNRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQwCisjZW5kaWYKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qCisgKiBFWFQgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisv
KiBHTF9FWFRfYmxlbmRfbWlubWF4ICovCisjaWZuZGVmIEdMX0VYVF9ibGVuZF9taW5tYXgKKyNk
ZWZpbmUgR0xfTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFYX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDgKKyNlbmRpZgorCisvKiBHTF9FWFRfZGlzY2FyZF9m
cmFtZWJ1ZmZlciAqLworI2lmbmRlZiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlcgorI2RlZmlu
ZSBHTF9DT0xPUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTgwMAorI2RlZmluZSBHTF9ERVBUSF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTgwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgorI2VuZGlmCisKKy8qIEdMX0VY
VF9tdWx0aV9kcmF3X2FycmF5cyAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAqLworI2lmbmRl
ZiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQorI2RlZmluZSBHTF9CR1JBX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQorI2RlZmluZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgIDB4ODM2NQor
I2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODM2NgorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyNkZWZp
bmUgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RkYKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODggKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Cisj
ZGVmaW5lIEdMX0JHUkFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MEUxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEw
X1JFViAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWCisjZGVm
aW5lIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVl9FWFQgICAgICAgICAgICAgICAgICAg
ICAgMHg4MzY4CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJTUcgZXh0ZW5zaW9u
IHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkg
Ki8KKyNpZm5kZWYgR0xfSU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1NHWF9QUk9HUkFN
X0JJTkFSWV9JTUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMwCisjZW5kaWYK
KworLyogR0xfSU1HX3JlYWRfZm9ybWF0ICovCisjaWZuZGVmIEdMX0lNR19yZWFkX2Zvcm1hdAor
I2RlZmluZSBHTF9CR1JBX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODBFMQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9JTUcg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODM2NQorI2VuZGlmCisKKy8qIEdMX0lNR19zaGFkZXJf
YmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5CisjZGVmaW5lIEdMX1NHWF9C
SU5BUllfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzBBCisj
ZW5kaWYKKworLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMgKi8KKyNpZm5kZWYg
R0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JfUFZSVENfNEJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgICAweDhDMDAKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgICAw
eDhDMDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcgICAgICAg
ICAgICAgICAgICAgICAweDhDMDIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJC
UFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAweDhDMDMKKyNlbmRpZgorCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSoKKyAqIE5WIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyogR0xfTlZfZmVuY2UgKi8KKyNpZm5kZWYgR0xfTlZfZmVuY2UKKyNkZWZpbmUgR0xfQUxMX0NP
TVBMRVRFRF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjIKKyNk
ZWZpbmUgR0xfRkVOQ0VfU1RBVFVTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg0RjMKKyNkZWZpbmUgR0xfRkVOQ0VfQ09ORElUSU9OX05WICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0RjQKKyNlbmRpZgorCisvKiBHTF9OVl9jb3ZlcmFnZV9z
YW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEdMX0NPVkVS
QUdFX0NPTVBPTkVOVF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQwCisj
ZGVmaW5lIEdMX0NPVkVSQUdFX0NPTVBPTkVOVDRfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RUQxCisjZGVmaW5lIEdMX0NPVkVSQUdFX0FUVEFDSE1FTlRfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RUQyCisjZGVmaW5lIEdMX0NPVkVSQUdFX0JVRkZFUlNf
TlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQzCisjZGVmaW5lIEdMX0NP
VkVSQUdFX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ0
CisjZGVmaW5lIEdMX0NPVkVSQUdFX0FMTF9GUkFHTUVOVFNfTlYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RUQ1CisjZGVmaW5lIEdMX0NPVkVSQUdFX0VER0VfRlJBR01FTlRTX05WICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ2CisjZGVmaW5lIEdMX0NPVkVSQUdFX0FVVE9N
QVRJQ19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ3CisjZGVmaW5lIEdM
X0NPVkVSQUdFX0JVRkZFUl9CSVRfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MDAwCisjZW5kaWYKKworLyogR0xfTlZfZGVwdGhfbm9ubGluZWFyICovCisjaWZuZGVmIEdMX05W
X2RlcHRoX25vbmxpbmVhcgorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9OT05MSU5FQVJf
TlYgICAgICAgICAgICAgICAgICAgICAgIDB4OEUyQworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgorICogUUNPTSBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBi
eSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQgKi8KKyNpZm5k
ZWYgR0xfUUNPTV9leHRlbmRlZF9nZXQKKyNkZWZpbmUgR0xfVEVYVFVSRV9XSURUSF9RQ09NICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDIKKyNkZWZpbmUgR0xfVEVYVFVS
RV9IRUlHSFRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDMKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9ERVBUSF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCRDQKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCRDUKKyNkZWZpbmUgR0xfVEVYVFVSRV9GT1JNQVRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDYKKyNkZWZpbmUgR0xfVEVY
VFVSRV9UWVBFX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDcK
KyNkZWZpbmUgR0xfVEVYVFVSRV9JTUFHRV9WQUxJRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCRDgKKyNkZWZpbmUgR0xfVEVYVFVSRV9OVU1fTEVWRUxTX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhCRDkKKyNkZWZpbmUgR0xfVEVYVFVSRV9UQVJHRVRf
UUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCREEKKyNkZWZpbmUgR0xf
VEVYVFVSRV9PQkpFQ1RfVkFMSURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
REIKKyNkZWZpbmUgR0xfU1RBVEVfUkVTVE9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCREMKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldDIgKi8K
Ky8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyog
R0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlICovCisjaWZuZGVmIEdMX1FDT01fcGVyZm1vbl9n
bG9iYWxfbW9kZQorI2RlZmluZSBHTF9QRVJGTU9OX0dMT0JBTF9NT0RFX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEZBMAorI2VuZGlmCisKKy8qIEdMX1FDT01fd3JpdGVvbmx5
X3JlbmRlcmluZyAqLworI2lmbmRlZiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcKKyNkZWZp
bmUgR0xfV1JJVEVPTkxZX1JFTkRFUklOR19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MjMKKyNlbmRpZgorCisvKiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZyAqLworI2lmbmRl
ZiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZworI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUMF9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xf
Q09MT1JfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDAwMDAyCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUM19R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR0xf
Q09MT1JfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDAwMDEwCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUNl9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR0xf
Q09MT1JfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDAwMDgwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQwX1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUMV9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDAwNDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQzX1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUNF9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDAyMDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ2X1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUN19R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR0xf
U1RFTkNJTF9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDEwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQy
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR0xf
U1RFTkNJTF9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
MDgwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ1
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR0xf
U1RFTkNJTF9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAw
NDAwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJf
QklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR0xf
TVVMVElTQU1QTEVfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJf
QklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR0xf
TVVMVElTQU1QTEVfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDEw
MDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJf
QklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR0xf
TVVMVElTQU1QTEVfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
MDAwMDAwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFbmQgb2YgZXh0ZW5zaW9u
IHRva2Vucywgc3RhcnQgb2YgY29ycmVzcG9uZGluZyBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogT0VTIGV4dGVuc2lvbiBm
dW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfT0VTX2NvbXByZXNzZWRfRVRD
MV9SR0I4X3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3Rl
eHR1cmUKKyNkZWZpbmUgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgMQorI2Vu
ZGlmCisKKy8qIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUgKi8KKyNpZm5kZWYg
R0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4dHVyZQorI2RlZmluZSBHTF9PRVNfY29tcHJl
c3NlZF9wYWxldHRlZF90ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGgyNCAqLwor
I2lmbmRlZiBHTF9PRVNfZGVwdGgyNAorI2RlZmluZSBHTF9PRVNfZGVwdGgyNCAxCisjZW5kaWYK
KworLyogR0xfT0VTX2RlcHRoMzIgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMzIKKyNkZWZpbmUg
R0xfT0VTX2RlcHRoMzIgMQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aF90ZXh0dXJlICovCisj
aWZuZGVmIEdMX09FU19kZXB0aF90ZXh0dXJlCisjZGVmaW5lIEdMX09FU19kZXB0aF90ZXh0dXJl
IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfRUdMX2ltYWdlICovCisjaWZuZGVmIEdMX09FU19FR0xf
aW1hZ2UKKyNkZWZpbmUgR0xfT0VTX0VHTF9pbWFnZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJl
MkRPRVMgKEdMZW51bSB0YXJnZXQsIEdMZWdsSW1hZ2VPRVMgaW1hZ2UpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJnZXRSZW5kZXJidWZmZXJTdG9yYWdlT0VTIChH
TGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xFR0xJTUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRUdMSU1BR0VUQVJHRVRSRU5ERVJCVUZGRVJTVE9SQUdFT0VTUFJPQykgKEdMZW51
bSB0YXJnZXQsIEdMZWdsSW1hZ2VPRVMgaW1hZ2UpOworI2VuZGlmCisKKy8qIEdMX09FU19lbGVt
ZW50X2luZGV4X3VpbnQgKi8KKyNpZm5kZWYgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludAorI2Rl
ZmluZSBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZmJv
X3JlbmRlcl9taXBtYXAgKi8KKyNpZm5kZWYgR0xfT0VTX2Zib19yZW5kZXJfbWlwbWFwCisjZGVm
aW5lIEdMX09FU19mYm9fcmVuZGVyX21pcG1hcCAxCisjZW5kaWYKKworLyogR0xfT0VTX2ZyYWdt
ZW50X3ByZWNpc2lvbl9oaWdoICovCisjaWZuZGVmIEdMX09FU19mcmFnbWVudF9wcmVjaXNpb25f
aGlnaAorI2RlZmluZSBHTF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hpZ2ggMQorI2VuZGlmCisK
Ky8qIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfT0VTX2dldF9wcm9n
cmFtX2JpbmFyeQorI2RlZmluZSBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5IDEKKyNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQcm9n
cmFtQmluYXJ5T0VTIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtQmluYXJ5T0VTIChHTHVpbnQgcHJvZ3JhbSwgR0xl
bnVtIGJpbmFyeUZvcm1hdCwgY29uc3QgR0x2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCk7Cisj
ZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTUJJTkFSWU9F
U1BST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMZW51bSAqYmluYXJ5Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTFBST0dSQU1CSU5BUllPRVNQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdM
ZW51bSBiaW5hcnlGb3JtYXQsIGNvbnN0IEdMdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOwor
I2VuZGlmCisKKy8qIEdMX09FU19tYXBidWZmZXIgKi8KKyNpZm5kZWYgR0xfT0VTX21hcGJ1ZmZl
cgorI2RlZmluZSBHTF9PRVNfbWFwYnVmZmVyIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVT
CitHTF9BUElDQUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyT0VTIChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYWNjZXNzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGds
VW5tYXBCdWZmZXJPRVMgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsR2V0QnVmZmVyUG9pbnRlcnZPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0x2b2lkKiogcGFyYW1zKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5UUllQIFBG
TkdMTUFQQlVGRkVST0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nlc3MpOwordHlw
ZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTFVOTUFQQlVGRkVST0VTUFJPQykgKEdM
ZW51bSB0YXJnZXQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRCVUZGRVJQ
T0lOVEVSVk9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBh
cmFtcyk7CisjZW5kaWYKKworLyogR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICovCisjaWZu
ZGVmIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorI2RlZmluZSBHTF9PRVNfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwgMQorI2VuZGlmCisKKy8qIEdMX09FU19yZ2I4X3JnYmE4ICovCisjaWZuZGVm
IEdMX09FU19yZ2I4X3JnYmE4CisjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEKKyNlbmRpZgor
CisvKiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgKi8KKyNpZm5kZWYgR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzCisjZGVmaW5lIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAxCisj
ZW5kaWYKKworLyogR0xfT0VTX3N0ZW5jaWwxICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsMQor
I2RlZmluZSBHTF9PRVNfc3RlbmNpbDEgMQorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsNCAq
LworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDQKKyNkZWZpbmUgR0xfT0VTX3N0ZW5jaWw0IDEKKyNl
bmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV8zRCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8z
RAorI2RlZmluZSBHTF9PRVNfdGV4dHVyZV8zRCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UzRE9FUyAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbFRleFN1YkltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbENvcHlUZXhTdWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBH
THZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRl
eFN1YkltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51
bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7
CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYSU1BR0UzRE9FU1BS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVy
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFNVQklNQUdFM0RPRVNQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09NUFJFU1NFRFRFWElNQUdF
M0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50
IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPTVBSRVNTRURURVhTVUJJTUFHRTNET0VTUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0
YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTNE
T0VTKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7CisjZW5kaWYKKwor
LyogR0xfT0VTX3RleHR1cmVfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfZmxvYXQK
KyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0
dXJlX2Zsb2F0X2xpbmVhciAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIK
KyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIDEKKyNlbmRpZgorCisvKiBHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAxCisjZW5kaWYKKworLyogR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdF9saW5lYXIKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX25wb3QgKi8KKyNpZm5kZWYgR0xfT0VT
X3RleHR1cmVfbnBvdAorI2RlZmluZSBHTF9PRVNfdGV4dHVyZV9ucG90IDEKKyNlbmRpZgorCisv
KiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdAorI2RlZmluZSBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmluZFZl
cnRleEFycmF5T0VTIChHTHVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqYXJyYXlz
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFycmF5c09FUyAoR0xz
aXplaSBuLCBHTHVpbnQgKmFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRS
WSBnbElzVmVydGV4QXJyYXlPRVMgKEdMdWludCBhcnJheSk7CisjZW5kaWYKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQykgKEdMdWludCBhcnJh
eSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09F
U1BST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqYXJyYXlzKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQykgKEdMc2l6ZWkgbiwgR0x1
aW50ICphcnJheXMpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTVkVS
VEVYQVJSQVlPRVNQUk9DKSAoR0x1aW50IGFycmF5KTsKKyNlbmRpZgorCisvKiBHTF9PRVNfdmVy
dGV4X2hhbGZfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0CisjZGVm
aW5lIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdCAxCisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRl
eF90eXBlXzEwXzEwXzEwXzIgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEw
XzIKKyNkZWZpbmUgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgMQorI2VuZGlmCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKgorICogQU1EIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLyogR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgKi8KKyNpZm5kZWYg
R0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUKKyNkZWZpbmUgR0xfQU1EX2NvbXByZXNzZWRf
M0RDX3RleHR1cmUgMQorI2VuZGlmCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJl
ICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FN
RF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBBTURfcGVyZm9ybWFuY2Vf
bW9uaXRvciAqLworI2lmbmRlZiBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvcgorI2RlZmluZSBH
TF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvciAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cHNBTUQgKEdM
aW50ICpudW1Hcm91cHMsIEdMc2l6ZWkgZ3JvdXBzU2l6ZSwgR0x1aW50ICpncm91cHMpOworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVyc0FNRCAoR0x1
aW50IGdyb3VwLCBHTGludCAqbnVtQ291bnRlcnMsIEdMaW50ICptYXhBY3RpdmVDb3VudGVycywg
R0xzaXplaSBjb3VudGVyU2l6ZSwgR0x1aW50ICpjb3VudGVycyk7CitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckdyb3VwU3RyaW5nQU1EIChHTHVpbnQgZ3JvdXAs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmdyb3VwU3RyaW5nKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlclN0cmlu
Z0FNRCAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMY2hhciAqY291bnRlclN0cmluZyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJJbmZvQU1EIChHTHVpbnQgZ3JvdXAsIEdM
dWludCBjb3VudGVyLCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7CitHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xHZW5QZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50ICpt
b25pdG9ycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVQZXJmTW9uaXRv
cnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xTZWxlY3RQZXJmTW9uaXRvckNvdW50ZXJzQU1EIChHTHVpbnQgbW9uaXRvciwg
R0xib29sZWFuIGVuYWJsZSwgR0x1aW50IGdyb3VwLCBHTGludCBudW1Db3VudGVycywgR0x1aW50
ICpjb3VudGVyc0xpc3QpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmVnaW5QZXJm
TW9uaXRvckFNRCAoR0x1aW50IG1vbml0b3IpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRW5kUGVyZk1vbml0b3JBTUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlckRhdGFBTUQgKEdMdWludCBtb25pdG9y
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgZGF0YVNpemUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5
dGVzV3JpdHRlbik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
UEVSRk1PTklUT1JHUk9VUFNBTURQUk9DKSAoR0xpbnQgKm51bUdyb3VwcywgR0xzaXplaSBncm91
cHNTaXplLCBHTHVpbnQgKmdyb3Vwcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVFBFUkZNT05JVE9SQ09VTlRFUlNBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTGludCAqbnVt
Q291bnRlcnMsIEdMaW50ICptYXhBY3RpdmVDb3VudGVycywgR0xzaXplaSBjb3VudGVyU2l6ZSwg
R0x1aW50ICpjb3VudGVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBF
UkZNT05JVE9SR1JPVVBTVFJJTkdBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpncm91cFN0cmluZyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUlNUUklOR0FNRFBST0MpIChH
THVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgR0xjaGFyICpjb3VudGVyU3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMR0VUUEVSRk1PTklUT1JDT1VOVEVSSU5GT0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdM
dWludCBjb3VudGVyLCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEdFTlBFUkZNT05JVE9SU0FNRFBST0MpIChHTHNpemVpIG4sIEdM
dWludCAqbW9uaXRvcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVQ
RVJGTU9OSVRPUlNBTURQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKm1vbml0b3JzKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU0VMRUNUUEVSRk1PTklUT1JDT1VOVEVSU0FNRFBS
T0MpIChHTHVpbnQgbW9uaXRvciwgR0xib29sZWFuIGVuYWJsZSwgR0x1aW50IGdyb3VwLCBHTGlu
dCBudW1Db3VudGVycywgR0x1aW50ICpjb3VudGVyc0xpc3QpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xCRUdJTlBFUkZNT05JVE9SQU1EUFJPQykgKEdMdWludCBtb25pdG9yKTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EUEVSRk1PTklUT1JBTURQUk9DKSAo
R0x1aW50IG1vbml0b3IpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJG
TU9OSVRPUkNPVU5URVJEQVRBQU1EUFJPQykgKEdMdWludCBtb25pdG9yLCBHTGVudW0gcG5hbWUs
IEdMc2l6ZWkgZGF0YVNpemUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3JpdHRlbik7Cisj
ZW5kaWYKKworLyogR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgKi8KKyNpZm5kZWYgR0xfQU1E
X3Byb2dyYW1fYmluYXJ5X1o0MDAKKyNkZWZpbmUgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAg
MQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRVhUIGV4dGVuc2lvbiBmdW5jdGlv
bnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRVhUX2JsZW5kX21pbm1heCAqLworI2lm
bmRlZiBHTF9FWFRfYmxlbmRfbWlubWF4CisjZGVmaW5lIEdMX0VYVF9ibGVuZF9taW5tYXggMQor
I2VuZGlmCisKKy8qIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyICovCisjaWZuZGVmIEdMX0VY
VF9kaXNjYXJkX2ZyYW1lYnVmZmVyCisjZGVmaW5lIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVy
IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xEaXNjYXJkRnJhbWVidWZmZXJFWFQgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0
YWNobWVudHMsIGNvbnN0IEdMZW51bSAqYXR0YWNobWVudHMpOworI2VuZGlmCit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0g
dGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRz
KTsKKyNlbmRpZgorCisjaWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cworI2RlZmluZSBH
TF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBH
TGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsTXVsdGlEcmF3RWxlbWVudHNFWFQgKEdMZW51bSwgY29uc3QgR0xzaXplaSAqLCBHTGVudW0s
IGNvbnN0IEdMdm9pZCogKiwgR0xzaXplaSk7CisjZW5kaWYgLyogR0xfR0xFWFRfUFJPVE9UWVBF
UyAqLwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xNVUxUSURSQVdBUlJBWVNFWFRQ
Uk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50ICpmaXJzdCwgR0xzaXplaSAqY291bnQsIEdMc2l6ZWkg
cHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXRUxF
TUVOVFNFWFRQUk9DKSAoR0xlbnVtIG1vZGUsIGNvbnN0IEdMc2l6ZWkgKmNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworI2VuZGlm
CisKKy8qIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICovCisjaWZuZGVmIEdMX0VYVF9yZWFkX2Zv
cm1hdF9iZ3JhCisjZGVmaW5lIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIDEKKyNlbmRpZgorCisv
KiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgKi8KKyNpZm5kZWYgR0xfRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisjZGVmaW5lIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyAxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorI2RlZmluZSBHTF9F
WFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJl
X3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEw
XzEwXzEwX1JFVgorI2RlZmluZSBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWIDEK
KyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIElNRyBleHRlbnNpb24gZnVuY3Rpb25z
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAqLworI2lm
bmRlZiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfSU1HX3Byb2dyYW1fYmluYXJ5
IDEKKyNlbmRpZgorCisvKiBHTF9JTUdfcmVhZF9mb3JtYXQgKi8KKyNpZm5kZWYgR0xfSU1HX3Jl
YWRfZm9ybWF0CisjZGVmaW5lIEdMX0lNR19yZWFkX2Zvcm1hdCAxCisjZW5kaWYKKworLyogR0xf
SU1HX3NoYWRlcl9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfSU1HX3NoYWRlcl9iaW5hcnkKKyNkZWZp
bmUgR0xfSU1HX3NoYWRlcl9iaW5hcnkgMQorI2VuZGlmCisKKy8qIEdMX0lNR190ZXh0dXJlX2Nv
bXByZXNzaW9uX3B2cnRjICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2
cnRjCisjZGVmaW5lIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIDEKKyNlbmRpZgor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE5WIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworLyogR0xfTlZfZmVuY2UgKi8KKyNpZm5kZWYgR0xfTlZfZmVuY2UKKyNk
ZWZpbmUgR0xfTlZfZmVuY2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbERlbGV0ZUZlbmNlc05WIChHTHNpemVpLCBjb25zdCBHTHVp
bnQgKik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5GZW5jZXNOViAoR0xzaXpl
aSwgR0x1aW50ICopOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc0ZlbmNl
TlYgKEdMdWludCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbFRlc3RGZW5j
ZU5WIChHTHVpbnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0RmVuY2Vpdk5W
IChHTHVpbnQsIEdMZW51bSwgR0xpbnQgKik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xGaW5pc2hGZW5jZU5WIChHTHVpbnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
U2V0RmVuY2VOViAoR0x1aW50LCBHTGVudW0pOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTERFTEVURUZFTkNFU05WUFJPQykgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
ICpmZW5jZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRU5GRU5DRVNOVlBS
T0MpIChHTHNpemVpIG4sIEdMdWludCAqZmVuY2VzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9B
UElFTlRSWVAgUEZOR0xJU0ZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5cGVkZWYgR0xi
b29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xURVNURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2Up
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRGRU5DRUlWTlZQUk9DKSAoR0x1
aW50IGZlbmNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNFVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNl
LCBHTGVudW0gY29uZGl0aW9uKTsKKyNlbmRpZgorCisvKiBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUg
Ki8KKyNpZm5kZWYgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEdMX05WX2NvdmVyYWdl
X3NhbXBsZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsQ292ZXJhZ2VNYXNrTlYgKEdMYm9vbGVhbiBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbENvdmVyYWdlT3BlcmF0aW9uTlYgKEdMZW51bSBvcGVyYXRpb24p
OworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVSQUdFTUFTS05W
UFJPQykgKEdMYm9vbGVhbiBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
Q09WRVJBR0VPUEVSQVRJT05OVlBST0MpIChHTGVudW0gb3BlcmF0aW9uKTsKKyNlbmRpZgorCisv
KiBHTF9OVl9kZXB0aF9ub25saW5lYXIgKi8KKyNpZm5kZWYgR0xfTlZfZGVwdGhfbm9ubGluZWFy
CisjZGVmaW5lIEdMX05WX2RlcHRoX25vbmxpbmVhciAxCisjZW5kaWYKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qCisgKiBRQ09NIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9j
b250cm9sCisjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldERyaXZlckNvbnRy
b2xzUUNPTSAoR0xpbnQgKm51bSwgR0xzaXplaSBzaXplLCBHTHVpbnQgKmRyaXZlckNvbnRyb2xz
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldERyaXZlckNvbnRyb2xTdHJpbmdR
Q09NIChHTHVpbnQgZHJpdmVyQ29udHJvbCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMY2hhciAqZHJpdmVyQ29udHJvbFN0cmluZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xFbmFibGVEcml2ZXJDb250cm9sUUNPTSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGlzYWJsZURyaXZlckNvbnRyb2xRQ09NIChH
THVpbnQgZHJpdmVyQ29udHJvbCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMR0VURFJJVkVSQ09OVFJPTFNRQ09NUFJPQykgKEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6
ZSwgR0x1aW50ICpkcml2ZXJDb250cm9scyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVERSSVZFUkNPTlRST0xTVFJJTkdRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9s
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpkcml2ZXJDb250cm9s
U3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5BQkxFRFJJVkVSQ09O
VFJPTFFDT01QUk9DKSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xESVNBQkxFRFJJVkVSQ09OVFJPTFFDT01QUk9DKSAoR0x1aW50IGRyaXZl
ckNvbnRyb2wpOworI2VuZGlmCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0ICovCisjaWZuZGVm
IEdMX1FDT01fZXh0ZW5kZWRfZ2V0CisjZGVmaW5lIEdMX1FDT01fZXh0ZW5kZWRfZ2V0IDEKKyNp
ZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xF
eHRHZXRUZXh0dXJlc1FDT00gKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRleHR1cmVzLCBH
TGludCAqbnVtVGV4dHVyZXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0
QnVmZmVyc1FDT00gKEdMdWludCAqYnVmZmVycywgR0xpbnQgbWF4QnVmZmVycywgR0xpbnQgKm51
bUJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0UmVuZGVyYnVm
ZmVyc1FDT00gKEdMdWludCAqcmVuZGVyYnVmZmVycywgR0xpbnQgbWF4UmVuZGVyYnVmZmVycywg
R0xpbnQgKm51bVJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
RXh0R2V0RnJhbWVidWZmZXJzUUNPTSAoR0x1aW50ICpmcmFtZWJ1ZmZlcnMsIEdMaW50IG1heEZy
YW1lYnVmZmVycywgR0xpbnQgKm51bUZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xFeHRHZXRUZXhMZXZlbFBhcmFtZXRlcml2UUNPTSAoR0x1aW50IHRleHR1cmUs
IEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dFRleE9iamVjdFN0YXRlT3ZlcnJpZGVp
UUNPTSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRUZXhTdWJJbWFnZVFDT00gKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbEV4dEdldEJ1ZmZlclBvaW50ZXJ2UUNPTSAoR0xlbnVtIHRhcmdldCwgR0x2
b2lkICoqcGFyYW1zKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xF
WFRHRVRURVhUVVJFU1FDT01QUk9DKSAoR0x1aW50ICp0ZXh0dXJlcywgR0xpbnQgbWF4VGV4dHVy
ZXMsIEdMaW50ICpudW1UZXh0dXJlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEVYVEdFVEJVRkZFUlNRQ09NUFJPQykgKEdMdWludCAqYnVmZmVycywgR0xpbnQgbWF4QnVmZmVy
cywgR0xpbnQgKm51bUJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xF
WFRHRVRSRU5ERVJCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdMaW50
IG1heFJlbmRlcmJ1ZmZlcnMsIEdMaW50ICpudW1SZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VURlJBTUVCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQg
KmZyYW1lYnVmZmVycywgR0xpbnQgbWF4RnJhbWVidWZmZXJzLCBHTGludCAqbnVtRnJhbWVidWZm
ZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVYTEVWRUxQQVJB
TUVURVJJVlFDT01QUk9DKSAoR0x1aW50IHRleHR1cmUsIEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRVhUVEVYT0JKRUNUU1RBVEVPVkVSUklERUlRQ09NUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xFWFRHRVRURVhTVUJJTUFHRVFDT01QUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0x2b2lkICp0ZXhlbHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xFWFRHRVRCVUZGRVJQT0lOVEVSVlFDT01QUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x2b2lk
ICoqcGFyYW1zKTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldDIgKi8KKyNpZm5k
ZWYgR0xfUUNPTV9leHRlbmRlZF9nZXQyCisjZGVmaW5lIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MiAx
CisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRXh0R2V0U2hhZGVyc1FDT00gKEdMdWludCAqc2hhZGVycywgR0xpbnQgbWF4U2hhZGVycywg
R0xpbnQgKm51bVNoYWRlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0
UHJvZ3JhbXNRQ09NIChHTHVpbnQgKnByb2dyYW1zLCBHTGludCBtYXhQcm9ncmFtcywgR0xpbnQg
Km51bVByb2dyYW1zKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsRXh0SXNQ
cm9ncmFtQmluYXJ5UUNPTSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsRXh0R2V0UHJvZ3JhbUJpbmFyeVNvdXJjZVFDT00gKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gc2hhZGVydHlwZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFNIQURFUlNRQ09NUFJPQykg
KEdMdWludCAqc2hhZGVycywgR0xpbnQgbWF4U2hhZGVycywgR0xpbnQgKm51bVNoYWRlcnMpOwor
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRQUk9HUkFNU1FDT01QUk9DKSAo
R0x1aW50ICpwcm9ncmFtcywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Qcm9ncmFtcyk7
Cit0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMRVhUSVNQUk9HUkFNQklOQVJZ
UUNPTVBST0MpIChHTHVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEVYVEdFVFBST0dSQU1CSU5BUllTT1VSQ0VRQ09NUFJPQykgKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gc2hhZGVydHlwZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgpOworI2VuZGlm
CisKKy8qIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lmbmRlZiBHTF9RQ09NX3Bl
cmZtb25fZ2xvYmFsX21vZGUKKyNkZWZpbmUgR0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlIDEK
KyNlbmRpZgorCisvKiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xf
UUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRl
cmluZyAxCisjZW5kaWYKKworLyogR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgKi8KKyNpZm5kZWYg
R0xfUUNPTV90aWxlZF9yZW5kZXJpbmcKKyNkZWZpbmUgR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbFN0YXJ0VGlsaW5nUUNPTSAoR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgd2lkdGgsIEdM
dWludCBoZWlnaHQsIEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbEVuZFRpbGluZ1FDT00gKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKKyNl
bmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTElOR1FDT01QUk9D
KSAoR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5E
VElMSU5HUUNPTVBST0MpIChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CisjZW5kaWYKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wyZXh0X2hfICovCklu
ZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMnBsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvaW5jbHVkZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisj
aWZuZGVmIF9fZ2wycGxhdGZvcm1faF8KKyNkZWZpbmUgX19nbDJwbGF0Zm9ybV9oXworCisvKiAk
UmV2aXNpb246IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIyOjM1OjM0IC0wODAwICMk
ICovCisKKy8qCisgKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBTR0kgRnJl
ZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgorICogMi4wLiBGb3IgZGV0YWlscywgc2VlIGh0
dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgorICovCisKKy8qIFBsYXRmb3JtLXNw
ZWNpZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgT3BlbkdMIEVTIDIuWCAgZ2wyLmgKKyAq
CisgKiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBz
dWl0IHRoZWlyIHBsYXRmb3JtLgorICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwg
bW9kaWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0aGV5IGNhbiBi
ZSBpbmNsdWRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHN1Ym1p
dCBjaGFuZ2VzCisgKiBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3pp
bGxhIChodHRwOi8va2hyb25vcy5vcmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcgYSBidWcgYWdh
aW5zdCBwcm9kdWN0ICJPcGVuR0wtRVMiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgorICovCisKKyNp
bmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKworI2lmbmRlZiBHTF9BUElDQUxMCisjZGVmaW5l
IEdMX0FQSUNBTEwgIEtIUk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKyNpZm5kZWYgR0xfQVBJRU5U
UlkKKyNkZWZpbmUgR0xfQVBJRU5UUlkgS0hST05PU19BUElFTlRSWQorI2VuZGlmCisKKyNlbmRp
ZiAvKiBfX2dsMnBsYXRmb3JtX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvUmVz
b3VyY2VMaW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvUmVzb3Vy
Y2VMaW1pdHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9SZXNvdXJj
ZUxpbWl0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCisjZGVmaW5lIF9SRVNPVVJD
RV9MSU1JVFNfSU5DTFVERURfCisKK3N0cnVjdCBUQnVpbHRJblJlc291cmNlCit7CisJaW50IG1h
eFZlcnRleEF0dHJpYnM7CisJaW50IG1heFZlcnRleFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhW
YXJ5aW5nVmVjdG9yczsKKwlpbnQgbWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1heFRleHR1cmVJbWFnZVVuaXRzOwor
CWludCBtYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhEcmF3QnVmZmVyczsKK307
CisjZW5kaWYgLy8gX1JFU09VUkNFX0xJTUlUU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL2luY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTFNM
QU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9T
aGFkZXJMYW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworI2lmbmRlZiBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworI2RlZmluZSBfQ09N
UElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiUmVzb3VyY2VMaW1pdHMuaCIK
KworLy8KKy8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3
ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4K
Ky8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8vCisvLyBE
cml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIK
Ky8vIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpOworLy8KKy8v
IERyaXZlciBzaG91bGQgY2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8KK2ludCBTaEZpbmFsaXpl
KCk7CisvLworLy8gVHlwZXMgb2YgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4gY29uc3VtZS4K
Ky8vCit0eXBlZGVmIGVudW0geworICAgIEVTaExhbmdWZXJ0ZXgsCisgICAgRVNoTGFuZ0ZyYWdt
ZW50LAorICAgIEVTaExhbmdDb3VudCwKK30gRVNoTGFuZ3VhZ2U7CisKKy8vCisvLyBUaGUgbGFu
Z3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0by4KKy8vIEl0IGN1cnJlbnRs
eSBzdXBwb3J0cyBPcGVuR0wgRVMgYW5kIFdlYkdMIHNwZWNpZmljYXRpb25zLgorLy8KK3R5cGVk
ZWYgZW51bSB7CisgICAgRVNoU3BlY0dMRVMyLAorICAgIEVTaFNwZWNXZWJHTCwKK30gRVNoU3Bl
YzsKKworLy8KKy8vIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLgorLy8KK3R5
cGVkZWYgZW51bSB7CisgICAgRVNoT3B0Tm9HZW5lcmF0aW9uLAorICAgIEVTaE9wdE5vbmUsCisg
ICAgRVNoT3B0U2ltcGxlLCAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUg
cXVpY2tseQorICAgIEVTaE9wdEZ1bGwsICAgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IHdp
bGwgdGFrZSBtb3JlIHRpbWUKK30gRVNoT3B0aW1pemF0aW9uTGV2ZWw7CisKK2VudW0gVERlYnVn
T3B0aW9ucyB7CisgICAgRURlYnVnT3BOb25lICAgICAgICAgICAgICAgPSAweDAwMCwKKyAgICBF
RGVidWdPcEludGVybWVkaWF0ZSAgICAgICA9IDB4MDAxLCAgLy8gV3JpdGVzIGludGVybWVkaWF0
ZSB0cmVlIGludG8gaW5mby1sb2cuCit9OworCisvLworLy8gU2hIYW5kbGUgaGVsZCBieSBidXQg
b3BhcXVlIHRvIHRoZSBkcml2ZXIuICBJdCBpcyBhbGxvY2F0ZWQsCisvLyBtYW5hZ2VkLCBhbmQg
ZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250ZW50cyAKKy8vIGFyZSBkZWZp
bmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KKy8vCisvLyBJZiBoYW5kbGUgY3JlYXRp
b24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KKy8vCit0eXBlZGVmIHZvaWQqIFNoSGFuZGxl
OworCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21w
aWxlciBvYmplY3RzLgorLy8KK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3Vh
Z2UsIEVTaFNwZWMpOyAgLy8gb25lIHBlciBzaGFkZXIKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRs
ZSk7CisKKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBib29sZWFuLCBp
bmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworLy8gVGhlIGluZm8tbG9nIHNo
b3VsZCBiZSB3cml0dGVuIGJ5IFNoQ29tcGlsZSBpbnRvIAorLy8gU2hIYW5kbGUsIHNvIGl0IGNh
biBhbnN3ZXIgZnV0dXJlIHF1ZXJpZXMuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBT
aEhhbmRsZSwKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29u
c3QgaW50IG51bVN0cmluZ3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwsCisgICAg
Y29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAqcmVzb3VyY2VzLAorICAgIGludCBkZWJ1Z09wdGlvbnMK
KyAgICApOworCisvLworLy8gQWxsIHRoZSBmb2xsb3dpbmcgcmV0dXJuIDAgaWYgdGhlIGluZm9y
bWF0aW9uIGlzIG5vdAorLy8gYXZhaWxhYmxlIGluIHRoZSBvYmplY3QgcGFzc2VkIGRvd24sIG9y
IHRoZSBvYmplY3QgaXMgYmFkLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBT
aEhhbmRsZSk7Citjb25zdCBjaGFyKiBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUpOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX0NPTVBJTEVSX0lO
VEVSRkFDRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjY5IEBACisjaWZuZGVmIF9fa2hycGxhdGZvcm1faF8KKyNkZWZpbmUgX19raHJwbGF0
Zm9ybV9oXworCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhlIEtocm9ub3MgR3Jv
dXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh
cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg
YW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxz
IiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp
bmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs
IGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisq
KiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO
WQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD
VElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9V
VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBP
UiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyogS2hyb25vcyBwbGF0
Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMuCisgKgorICogJFJldmlzaW9uOiA5
MzU2ICQgb24gJERhdGU6IDIwMDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIw
MDkpICQKKyAqCisgKiBBZG9wdGVycyBtYXkgbW9kaWZ5IHRoaXMgZmlsZSB0byBzdWl0IHRoZWly
IHBsYXRmb3JtLiBBZG9wdGVycyBhcmUKKyAqIGVuY291cmFnZWQgdG8gc3VibWl0IHBsYXRmb3Jt
IHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MKKyAqIGdyb3VwIHNvIHRoYXQg
dGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4KKyAq
IFBsZWFzZSBzdWJtaXQgY2hhbmdlcyBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJv
bm9zIEJ1Z3ppbGxhCisgKiAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKSBieSBmaWxpbmcg
YSBidWcgYWdhaW5zdCBwcm9kdWN0CisgKiAiS2hyb25vcyAoZ2VuZXJhbCkiIGNvbXBvbmVudCAi
UmVnaXN0cnkiLgorICoKKyAqIEEgcHJlZGVmaW5lZCB0ZW1wbGF0ZSB3aGljaCBmaWxscyBpbiBz
b21lIG9mIHRoZSBidWcgZmllbGRzIGNhbiBiZQorICogcmVhY2hlZCB1c2luZyBodHRwOi8vdGlu
eXVybC5jb20va2hycGxhdGZvcm0taC1idWdyZXBvcnQsIGJ1dCB5b3UKKyAqIG11c3QgY3JlYXRl
IGEgQnVnemlsbGEgbG9naW4gZmlyc3QuCisgKgorICoKKyAqIFNlZSB0aGUgSW1wbGVtZW50ZXIn
cyBHdWlkZWxpbmVzIGZvciBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGlzIGZpbGUKKyAqIHNo
b3VsZCBiZSBsb2NhdGVkIG9uIHlvdXIgc3lzdGVtIGFuZCBmb3IgbW9yZSBkZXRhaWxzIG9mIGl0
cyB1c2U6CisgKiAgICBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2ltcGxlbWVudGVy
c19ndWlkZS5wZGYKKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzCisgKiAg
ICAgICAgI2luY2x1ZGUgPEtIUi9raHJwbGF0Zm9ybS5oPgorICogYnkgS2hyb25vcyBjbGllbnQg
QVBJIGhlYWRlciBmaWxlcyB0aGF0IHVzZSBpdHMgdHlwZXMgYW5kIGRlZmluZXMuCisgKgorICog
VGhlIHR5cGVzIGluIGtocnBsYXRmb3JtLmggc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBkZWZpbmUg
QVBJLXNwZWNpZmljIHR5cGVzLgorICoKKyAqIFR5cGVzIGRlZmluZWQgaW4ga2hycGxhdGZvcm0u
aDoKKyAqICAgIGtocm9ub3NfaW50OF90ICAgICAgICAgICAgICBzaWduZWQgICA4ICBiaXQKKyAq
ICAgIGtocm9ub3NfdWludDhfdCAgICAgICAgICAgICB1bnNpZ25lZCA4ICBiaXQKKyAqICAgIGto
cm9ub3NfaW50MTZfdCAgICAgICAgICAgICBzaWduZWQgICAxNiBiaXQKKyAqICAgIGtocm9ub3Nf
dWludDE2X3QgICAgICAgICAgICB1bnNpZ25lZCAxNiBiaXQKKyAqICAgIGtocm9ub3NfaW50MzJf
dCAgICAgICAgICAgICBzaWduZWQgICAzMiBiaXQKKyAqICAgIGtocm9ub3NfdWludDMyX3QgICAg
ICAgICAgICB1bnNpZ25lZCAzMiBiaXQKKyAqICAgIGtocm9ub3NfaW50NjRfdCAgICAgICAgICAg
ICBzaWduZWQgICA2NCBiaXQKKyAqICAgIGtocm9ub3NfdWludDY0X3QgICAgICAgICAgICB1bnNp
Z25lZCA2NCBiaXQKKyAqICAgIGtocm9ub3NfaW50cHRyX3QgICAgICAgICAgICBzaWduZWQgICBz
YW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlcgorICogICAga2hyb25vc191aW50cHRyX3Qg
ICAgICAgICAgIHVuc2lnbmVkIHNhbWUgbnVtYmVyIG9mIGJpdHMgYXMgYSBwb2ludGVyCisgKiAg
ICBraHJvbm9zX3NzaXplX3QgICAgICAgICAgICAgc2lnbmVkICAgc2l6ZQorICogICAga2hyb25v
c191c2l6ZV90ICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUKKyAqICAgIGtocm9ub3NfZmxvYXRf
dCAgICAgICAgICAgICBzaWduZWQgICAzMiBiaXQgZmxvYXRpbmcgcG9pbnQKKyAqICAgIGtocm9u
b3NfdGltZV9uc190ICAgICAgICAgICB1bnNpZ25lZCA2NCBiaXQgdGltZSBpbiBuYW5vc2Vjb25k
cworICogICAga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IHVuc2lnbmVkIHRpbWUgaW50ZXJ2
YWwgb3IgYWJzb2x1dGUgdGltZSBpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9zX3N0aW1lX25hbm9zZWNvbmRzX3Qg
c2lnbmVkIHRpbWUgaW50ZXJ2YWwgaW4gbmFub3NlY29uZHMKKyAqICAgIGtocm9ub3NfYm9vbGVh
bl9lbnVtX3QgICAgICBlbnVtZXJhdGVkIGJvb2xlYW4gdHlwZS4gVGhpcyBzaG91bGQKKyAqICAg
ICAgb25seSBiZSB1c2VkIGFzIGEgYmFzZSB0eXBlIHdoZW4gYSBjbGllbnQgQVBJJ3MgYm9vbGVh
biB0eXBlIGlzCisgKiAgICAgIGFuIGVudW0uIENsaWVudCBBUElzIHdoaWNoIHVzZSBhbiBpbnRl
Z2VyIG9yIG90aGVyIHR5cGUgZm9yCisgKiAgICAgIGJvb2xlYW5zIGNhbm5vdCB1c2UgdGhpcyBh
cyB0aGUgYmFzZSB0eXBlIGZvciB0aGVpciBib29sZWFuLgorICoKKyAqIFRva2VucyBkZWZpbmVk
IGluIGtocnBsYXRmb3JtLmg6CisgKgorICogICAgS0hST05PU19GQUxTRSwgS0hST05PU19UUlVF
IEVudW1lcmF0ZWQgYm9vbGVhbiBmYWxzZS90cnVlIHZhbHVlcy4KKyAqCisgKiAgICBLSFJPTk9T
X1NVUFBPUlRfSU5UNjQgaXMgMSBpZiA2NCBiaXQgaW50ZWdlcnMgYXJlIHN1cHBvcnRlZDsgb3Ro
ZXJ3aXNlIDAuCisgKiAgICBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgaXMgMSBpZiBmbG9hdHMgYXJl
IHN1cHBvcnRlZDsgb3RoZXJ3aXNlIDAuCisgKgorICogQ2FsbGluZyBjb252ZW50aW9uIG1hY3Jv
cyBkZWZpbmVkIGluIHRoaXMgZmlsZToKKyAqICAgIEtIUk9OT1NfQVBJQ0FMTAorICogICAgS0hS
T05PU19BUElFTlRSWQorICogICAgS0hST05PU19BUElBVFRSSUJVVEVTCisgKgorICogVGhlc2Ug
bWF5IGJlIHVzZWQgaW4gZnVuY3Rpb24gcHJvdG90eXBlcyBhczoKKyAqCisgKiAgICAgIEtIUk9O
T1NfQVBJQ0FMTCB2b2lkIEtIUk9OT1NfQVBJRU5UUlkgZnVuY25hbWUoCisgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBhcmcyKSBLSFJPTk9TX0FQSUFUVFJJQlVURVM7CisgKi8KKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQ0FMTAorICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgKiBUaGlzIHByZWNlZGVzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVu
Y3Rpb24gaW4gdGhlIGZ1bmN0aW9uIHByb3RvdHlwZS4KKyAqLworI2lmIGRlZmluZWQoX1dJTjMy
KSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9fKQorIyAgIGRlZmluZSBLSFJPTk9TX0FQSUNB
TEwgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxpZiBkZWZpbmVkIChfX1NZTUJJQU4zMl9fKQor
IyAgIGRlZmluZSBLSFJPTk9TX0FQSUNBTEwgSU1QT1JUX0MKKyNlbHNlCisjICAgZGVmaW5lIEtI
Uk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlv
biBvZiBLSFJPTk9TX0FQSUVOVFJZCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZm9sbG93
cyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uICBhbmQgcHJlY2VkZXMgdGhlIGZ1bmN0
aW9uCisgKiBuYW1lIGluIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNpZiBkZWZpbmVk
KF9XSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NO
QVBfXykKKyAgICAvKiBXaW4zMiBidXQgbm90IFdpbkNFICovCisjICAgZGVmaW5lIEtIUk9OT1Nf
QVBJRU5UUlkgX19zdGRjYWxsCisjZWxzZQorIyAgIGRlZmluZSBLSFJPTk9TX0FQSUVOVFJZCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJ
QVRUUklCVVRFUworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3MgdGhlIGNsb3Np
bmcgcGFyZW50aGVzaXMgb2YgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBhcmd1bWVudHMuCisgKi8K
KyNpZiBkZWZpbmVkIChfX0FSTUNDXzJfXykKKyNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVT
IF9fc29mdGZwCisjZWxzZQorI2RlZmluZSBLSFJPTk9TX0FQSUFUVFJJQlVURVMKKyNlbmRpZgor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworI2lmIChkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJT
SU9OX18gPj0gMTk5OTAxTCkgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX1NDT19f
KSB8fCBkZWZpbmVkKF9fVVNMQ19fKQorCisKKy8qCisgKiBVc2luZyA8c3RkaW50Lmg+CisgKi8K
KyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAga2hy
b25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJvbm9zX3Vp
bnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7
Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVm
aW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZM
T0FUICAgMQorCisjZWxpZiBkZWZpbmVkKF9fVk1TICkgfHwgZGVmaW5lZChfX3NnaSkKKworLyoK
KyAqIFVzaW5nIDxpbnR0eXBlcy5oPgorICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVk
ZWYgaW50MzJfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50
MzJfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAg
ICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAg
ICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBkZWZpbmVkKF9X
SU4zMikgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKworLyoKKyAqIFdpbjMyCisgKi8K
K3R5cGVkZWYgX19pbnQzMiAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRl
ZiB1bnNpZ25lZCBfX2ludDMyICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBfX2lu
dDY0ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9f
aW50NjQgICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBkZWZp
bmVkKF9fc3VuX18pIHx8IGRlZmluZWQoX19kaWdpdGFsX18pCisKKy8qCisgKiBTdW4gb3IgRGln
aXRhbAorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJf
dDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKKyNp
ZiBkZWZpbmVkKF9fYXJjaDY0X18pIHx8IGRlZmluZWQoX0xQNjQpCit0eXBlZGVmIGxvbmcgaW50
ICAgICAgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgICAgICAga2hyb25vc191aW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQg
ICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu
dCAga2hyb25vc191aW50NjRfdDsKKyNlbmRpZiAvKiBfX2FyY2g2NF9fICovCisjZGVmaW5lIEtI
Uk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAg
MQorCisjZWxpZiAwCisKKy8qCisgKiBIeXBvdGhldGljYWwgcGxhdGZvcm0gd2l0aCBubyBmbG9h
dCBvciBpbnQ2NCBzdXBwb3J0CisgKi8KK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAg
a2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICBraHJvbm9z
X3VpbnQzMl90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAwCisjZGVmaW5lIEtI
Uk9OT1NfU1VQUE9SVF9GTE9BVCAgIDAKKworI2Vsc2UKKworLyoKKyAqIEdlbmVyaWMgZmFsbGJh
Y2sKKyAqLworI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAg
ICAgICBraHJvbm9zX2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGto
cm9ub3NfdWludDMyX3Q7Cit0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgICAgIGtocm9ub3Nf
aW50NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50NjRf
dDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMQorI2RlZmluZSBLSFJPTk9TX1NV
UFBPUlRfRkxPQVQgICAxCisKKyNlbmRpZgorCisKKy8qCisgKiBUeXBlcyB0aGF0IGFyZSAoc28g
ZmFyKSB0aGUgc2FtZSBvbiBhbGwgcGxhdGZvcm1zCisgKi8KK3R5cGVkZWYgc2lnbmVkICAgY2hh
ciAgICAgICAgICBraHJvbm9zX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAg
ICBraHJvbm9zX3VpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCAgIHNob3J0IGludCAgICAga2hyb25v
c19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgICAgIGtocm9ub3NfdWludDE2
X3Q7Cit0eXBlZGVmIHNpZ25lZCAgIGxvbmcgIGludCAgICAga2hyb25vc19pbnRwdHJfdDsKK3R5
cGVkZWYgdW5zaWduZWQgbG9uZyAgaW50ICAgICBraHJvbm9zX3VpbnRwdHJfdDsKK3R5cGVkZWYg
c2lnbmVkICAgbG9uZyAgaW50ICAgICBraHJvbm9zX3NzaXplX3Q7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgIGludCAgICAga2hyb25vc191c2l6ZV90OworCisjaWYgS0hST05PU19TVVBQT1JUX0ZM
T0FUCisvKgorICogRmxvYXQgdHlwZQorICovCit0eXBlZGVmICAgICAgICAgIGZsb2F0ICAgICAg
ICAga2hyb25vc19mbG9hdF90OworI2VuZGlmCisKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQK
Ky8qIFRpbWUgdHlwZXMKKyAqCisgKiBUaGVzZSB0eXBlcyBjYW4gYmUgdXNlZCB0byByZXByZXNl
bnQgYSB0aW1lIGludGVydmFsIGluIG5hbm9zZWNvbmRzIG9yCisgKiBhbiBhYnNvbHV0ZSBVbmFk
anVzdGVkIFN5c3RlbSBUaW1lLiAgVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSBpcyB0aGUgbnVtYmVy
CisgKiBvZiBuYW5vc2Vjb25kcyBzaW5jZSBzb21lIGFyYml0cmFyeSBzeXN0ZW0gZXZlbnQgKGUu
Zy4gc2luY2UgdGhlIGxhc3QKKyAqIHRpbWUgdGhlIHN5c3RlbSBib290ZWQpLiAgVGhlIFVuYWRq
dXN0ZWQgU3lzdGVtIFRpbWUgaXMgYW4gdW5zaWduZWQKKyAqIDY0IGJpdCB2YWx1ZSB0aGF0IHdy
YXBzIGJhY2sgdG8gMCBldmVyeSA1ODQgeWVhcnMuICBUaW1lIGludGVydmFscworICogbWF5IGJl
IGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc191aW50NjRf
dCAgICAgICBraHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3Q7Cit0eXBlZGVmIGtocm9ub3NfaW50
NjRfdCAgICAgICAga2hyb25vc19zdGltZV9uYW5vc2Vjb25kc190OworI2VuZGlmCisKKy8qCisg
KiBEdW1teSB2YWx1ZSB1c2VkIHRvIHBhZCBlbnVtIHR5cGVzIHRvIDMyIGJpdHMuCisgKi8KKyNp
Zm5kZWYgS0hST05PU19NQVhfRU5VTQorI2RlZmluZSBLSFJPTk9TX01BWF9FTlVNIDB4N0ZGRkZG
RkYKKyNlbmRpZgorCisvKgorICogRW51bWVyYXRlZCBib29sZWFuIHR5cGUKKyAqCisgKiBWYWx1
ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHRydWUuICBUaGVy
ZWZvcmUKKyAqIGNvbXBhcmlzb25zIHNob3VsZCBub3QgYmUgbWFkZSBhZ2FpbnN0IEtIUk9OT1Nf
VFJVRS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBLSFJPTk9TX0ZBTFNFID0gMCwKKyAgICBL
SFJPTk9TX1RSVUUgID0gMSwKKyAgICBLSFJPTk9TX0JPT0xFQU5fRU5VTV9GT1JDRV9TSVpFID0g
S0hST05PU19NQVhfRU5VTQorfSBraHJvbm9zX2Jvb2xlYW5fZW51bV90OworCisjZW5kaWYgLyog
X19raHJwbGF0Zm9ybV9oXyAqLwpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJv
ai9wYXVscy5tb2RlMXYzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmds
ZS54Y29kZXByb2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzYyIEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0
IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5j
b20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxk
aWN0PgorCTxrZXk+QWN0aXZlUGVyc3BlY3RpdmVOYW1lPC9rZXk+CisJPHN0cmluZz5Qcm9qZWN0
PC9zdHJpbmc+CisJPGtleT5BbGxvd2VkTW9kdWxlczwva2V5PgorCTxhcnJheT4KKwkJPGRpY3Q+
CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJ
PGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5N
b2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8L3N0cmluZz4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Hcm91cHMgYW5kIEZpbGVzIE91dGxpbmUg
Vmlldzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0
aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+
CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5n
PlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJp
bmc+RWRpdG9yPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxv
YWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8
L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxz
dHJpbmc+WENUYXNrTGlzdE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8
c3RyaW5nPlRhc2sgTGlzdDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5C
dW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5z
dGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+
CisJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+RmlsZSBhbmQgU21hcnQgR3JvdXAgRGV0YWlsIFZpZXdlcjwvc3RyaW5nPgor
CQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0
cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8
L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJ1aWxkUmVzdWx0
c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRldGFpbGVk
IEJ1aWxkIFJlc3VsdHMgVmlld2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8
a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5N
YXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8
L2tleT4KKwkJCTxzdHJpbmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5Qcm9qZWN0IEJhdGNoIEZpbmQgVG9vbDwvc3RyaW5nPgor
CQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0
cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48
L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDUHJvamVjdEZvcm1h
dENvbmZsaWN0c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PlByb2plY3QgRm9ybWF0IENvbmZsaWN0cyBMaXN0PC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgor
CQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJ
CQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzIFRvb2w8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9z
dHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJN
b2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93
c2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRo
PC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4K
KwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+
UEJYQ1ZTTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U291
cmNlIENvZGUgQ29udHJvbCBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8
a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5N
YXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8
L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdCcmVha3BvaW50c01vZHVsZTwvc3RyaW5nPgorCQkJ
PGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnIEJyZWFrcG9pbnRzIFRvb2w8L3N0cmlu
Zz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJ
CTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmlu
Zz5uPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5YQ0RvY2thYmxl
SW5zcGVjdG9yPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+SW5zcGVj
dG9yPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRo
PC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4K
KwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+
UEJYT3BlblF1aWNrbHlNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0
cmluZz5PcGVuIFF1aWNrbHkgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJ
PGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+
TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxl
PC9rZXk+CisJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPGtl
eT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnZ2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJ
PGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5n
PgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJ
PGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBDb25zb2xlPC9zdHJpbmc+CisJ
CTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3Ry
aW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwv
c3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVs
ZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBzaG90cyBUb29s
PC9zdHJpbmc+CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+QnVuZGxlUGF0aDwva2V5Pgor
CTxzdHJpbmc+L0RldmVsb3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RldlRvb2xzSW50
ZXJmYWNlLmZyYW1ld29yay9SZXNvdXJjZXM8L3N0cmluZz4KKwk8a2V5PkRlc2NyaXB0aW9uPC9r
ZXk+CisJPHN0cmluZz5EZWZhdWx0RGVzY3JpcHRpb25LZXk8L3N0cmluZz4KKwk8a2V5PkRvY2tp
bmdTeXN0ZW1WaXNpYmxlPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PkV4dGVuc2lvbjwva2V5Pgor
CTxzdHJpbmc+bW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+RmF2QmFyQ29uZmlnPC9rZXk+CisJPGRp
Y3Q+CisJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJPHN0cmluZz5GQkM3NkI1
ODExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJPGtleT5YQ0Jhck1vZHVsZUl0ZW1OYW1lczwv
a2V5PgorCQk8ZGljdC8+CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtczwva2V5PgorCQk8YXJyYXkv
PgorCTwvZGljdD4KKwk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCTxmYWxz
ZS8+CisJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUucGVyc3BlY3Rp
dmVzLnByb2plY3QubW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+TWFqb3JWZXJzaW9uPC9rZXk+CisJ
PGludGVnZXI+MzM8L2ludGVnZXI+CisJPGtleT5NaW5vclZlcnNpb248L2tleT4KKwk8aW50ZWdl
cj4wPC9pbnRlZ2VyPgorCTxrZXk+TmFtZTwva2V5PgorCTxzdHJpbmc+RGVmYXVsdDwvc3RyaW5n
PgorCTxrZXk+Tm90aWZpY2F0aW9uczwva2V5PgorCTxhcnJheS8+CisJPGtleT5PcGVuRWRpdG9y
czwva2V5PgorCTxhcnJheS8+CisJPGtleT5QZXJzcGVjdGl2ZVdpZHRoczwva2V5PgorCTxhcnJh
eT4KKwkJPGludGVnZXI+LTE8L2ludGVnZXI+CisJCTxpbnRlZ2VyPi0xPC9pbnRlZ2VyPgorCTwv
YXJyYXk+CisJPGtleT5QZXJzcGVjdGl2ZXM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0PgorCQkJ
PGtleT5DaG9zZW5Ub29sYmFySXRlbXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPmFj
dGl2ZS1jb21iby1wb3B1cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YWN0aW9uPC9zdHJpbmc+CisJ
CQkJPHN0cmluZz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJp
bmc+ZGVidWdnZXItZW5hYmxlLWJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQkJPHN0cmluZz5idWls
ZC1hbmQtZ288L3N0cmluZz4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5pZGUuUEJYVG9vbGJhclN0
b3BCdXR0b248L3N0cmluZz4KKwkJCQk8c3RyaW5nPmdldC1pbmZvPC9zdHJpbmc+CisJCQkJPHN0
cmluZz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+Y29t
LmFwcGxlLnBieC50b29sYmFyLnNlYXJjaGZpZWxkPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5Db250cm9sbGVyQ2xhc3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4K
KwkJCTxrZXk+SWNvbk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9qZWN0V2l0aEVk
aXRvcjwvc3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNw
ZWN0aXZlLnByb2plY3Q8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPGZh
bHNlLz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJ
CTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5
PlBCWEJvdHRvbVNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0
cmluZz4xQzM3RkJBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFD
MzdGQUFDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMw
NTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0Qx
MTIxMTAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1
Njwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJp
bmc+CisJCQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJ
CQkJCQk8c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9h
cnJheT4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJp
bmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2pl
Y3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJ
PGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVz
PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwv
a2V5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNv
bHVtbldpZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+MjI2PC9y
ZWFsPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVs
ZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFp
bkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8
a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJ
CQk8ZGljdD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRl
RXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjVCQkVG
RjlCOTE3MzgyOTdCOTVDNTY4RDwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjE5NkRCNkFCMDA2
QkI4MzUwM0M3RDc4Njwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjQ2NkUxRDA1MzFBNzlCNTgx
M0U4QTdGODwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPkUwRURDNDEzMEU3RDM3NDMxOENFNzJC
RTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAwMDAwMDEwMjwvc3Ry
aW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgor
CQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxp
bmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5
PgorCQkJCQkJCQkJPGludGVnZXI+NjE8L2ludGVnZXI+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJ
CQkJPC9hcnJheT4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0
YXRlVmlzaWJsZVJlY3RLZXk8L2tleT4KKwkJCQkJCQk8c3RyaW5nPnt7MCwgNDc5fSwgezIyNiwg
NzYwfX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9wU21hcnRHcm91
cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0
aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPHRydWUvPgorCQkJCQkJPGtleT5YQ1NoYXJpbmdUb2tl
bjwva2V5PgorCQkJCQkJPHN0cmluZz5jb20uYXBwbGUuWGNvZGUuR0ZTaGFyaW5nVG9rZW48L3N0
cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5
PgorCQkJCQk8ZGljdD4KKwkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+e3sw
LCAwfSwgezI0MywgNzc4fX08L3N0cmluZz4KKwkJCQkJCTxrZXk+R3JvdXBUcmVlVGFibGVDb25m
aWd1cmF0aW9uPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1u
PC9zdHJpbmc+CisJCQkJCQkJPHJlYWw+MjI2PC9yZWFsPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJ
CTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5
IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pk1vZHVsZTwv
a2V5PgorCQkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJpbmc+CisJCQkJ
CTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjI0M3B0PC9zdHJpbmc+CisJCQkJ
PC9kaWN0PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5Pgor
CQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCTxr
ZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+VHJhbnNsYXRv
ckhMU0wuaDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNwbGl0TW9kdWxlSW5OYXZpZ2F0b3JL
ZXk8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0MDwva2V5PgorCQkJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5Pgor
CQkJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDQwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5n
PlRyYW5zbGF0b3JITFNMLmg8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5Pl9oaXN0b3J5Q2FwYWNp
dHk8L2tleT4KKwkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+
Ym9va21hcms8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPkZCMzlENzVEMTIwMTBFM0QwMDA4OEU2
OTwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+aGlzdG9yeTwva2V5PgorCQkJCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTBCNDExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4K
KwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTBCNTExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJ
CQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5TcGxpdENv
dW50PC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgor
CQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5Pgor
CQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+
e3swLCAwfSwgezQ3MiwgNTQ5fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dG
cmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0MCA4NzggPC9z
dHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlv
bjwva2V5PgorCQkJCQkJCTxzdHJpbmc+NTQ5cHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJ
CQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPHRydWUv
PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PjFDRTBCMjA1MDY0NzFFMDYwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2pl
Y3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3RyaW5nPgorCQkJ
CQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3sw
LCA1NTR9LCB7NDcyLCAyMjR9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0Zy
YW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5IDAgMCAxNDQwIDg3OCA8L3N0
cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8
c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9r
ZXk+CisJCQkJCQkJPHN0cmluZz4yMjRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8
L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz40NzJwdDwv
c3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+UHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5Pgor
CQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENNb2R1bGVE
b2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJ
CTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRh
YmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+RkIzOUQ3NUUxMjAx
MEUzRDAwMDg4RTY5PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcxREVEMDA5N0E1
RjQ8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCMzlENzVGMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5n
PgorCQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0
cmluZz4xQ0UwQjIwNTA2NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8
a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwkJCTxzdHJp
bmc+Mjwvc3RyaW5nPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0
cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWZhdWx0VjM8L3N0cmluZz4KKwkJPC9kaWN0Pgor
CQk8ZGljdD4KKwkJCTxrZXk+Q29udHJvbGxlckNsYXNzQmFzZU5hbWU8L2tleT4KKwkJCTxzdHJp
bmc+PC9zdHJpbmc+CisJCQk8a2V5Pkljb25OYW1lPC9rZXk+CisJCQk8c3RyaW5nPldpbmRvd09m
UHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBl
cnNwZWN0aXZlLm1vcnBoPC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxp
bnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJ
CTxkaWN0PgorCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQk8aW50ZWdlcj4xPC9p
bnRlZ2VyPgorCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCTxkaWN0
PgorCQkJCQkJPGtleT5QQlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJPGFycmF5
PgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZCQUMwNDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJ
CQkJPHN0cmluZz4xQzM3RkFBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3Ry
aW5nPjFDMDhFNzdDMDQ1NDk2MTAwMEM5MTRCRDwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMz
N0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1
NTM5Q0QxMTIxMTAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIw
MDIxMTI1Njwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0
PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmlu
Zz4KKwkJCQkJCQk8c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJ
CQkJPC9hcnJheT4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJ
CTxzdHJpbmc+MTFFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgor
CQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJp
bmc+eWVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1u
RGF0YTwva2V5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1v
ZHVsZUNvbHVtbldpZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+
MTg2PC9yZWFsPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJp
bmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+
CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGlu
ZVN0YXRlRXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5n
PjI5Qjk3MzE0RkRDRkEzOTQxMUNBMkNFQTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdG
QUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtl
eT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5Pgor
CQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+MDwvaW50
ZWdlcj4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTxrZXk+UEJY
U21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVWaXNpYmxlUmVjdEtleTwva2V5PgorCQkJ
CQkJCTxzdHJpbmc+e3swLCAwfSwgezE4NiwgMzM3fX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4K
KwkJCQkJCTxrZXk+UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJ
CQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPGludGVn
ZXI+MTwvaW50ZWdlcj4KKwkJCQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4KKwkJCQkJCTxz
dHJpbmc+Y29tLmFwcGxlLlhjb2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJCQkJCTwvZGlj
dD4KKwkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJ
CQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsyMDMsIDM1NX19
PC9zdHJpbmc+CisJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5Pgor
CQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJ
CTxyZWFsPjE4NjwvcmVhbD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRv
d0ZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPjM3MyAyNjkgNjkwIDM5NyAwIDAgMTQ0MCA4Nzgg
PC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJPHN0
cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9h
cnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Nb3JwaDwvc3RyaW5nPgorCQkJ
PGtleT5QcmVmZXJyZWRXaWR0aDwva2V5PgorCQkJPGludGVnZXI+MzAwPC9pbnRlZ2VyPgorCQkJ
PGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1
bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3Ry
aW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJy
YXk+CisJCQkJPHN0cmluZz4xMUUwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhj
b2RlLnRvb2xiYXIuY29uZmlnLmRlZmF1bHQuc2hvcnRWMzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJ
PC9hcnJheT4KKwk8a2V5PlBlcnNwZWN0aXZlc0JhclZpc2libGU8L2tleT4KKwk8ZmFsc2UvPgor
CTxrZXk+U2hlbGZJc1Zpc2libGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U291cmNlRGVzY3Jp
cHRpb248L2tleT4KKwk8c3RyaW5nPmZpbGUgYXQgJy9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRl
RnJhbWV3b3Jrcy9EZXZUb29sc0ludGVyZmFjZS5mcmFtZXdvcmsvUmVzb3VyY2VzL1hDUGVyc3Bl
Y3RpdmVzU3BlY2lmaWNhdGlvbk1vZGUxLnhjcGVyc3BlYyc8L3N0cmluZz4KKwk8a2V5PlN0YXR1
c2JhcklzVmlzaWJsZTwva2V5PgorCTx0cnVlLz4KKwk8a2V5PlRpbWVTdGFtcDwva2V5PgorCTxy
ZWFsPjAuMDwvcmVhbD4KKwk8a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNp
b248L2tleT4KKwk8c3RyaW5nPjI8L3N0cmluZz4KKwk8a2V5PlRvb2xiYXJEaXNwbGF5TW9kZTwv
a2V5PgorCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJPGtleT5Ub29sYmFySXNWaXNpYmxlPC9rZXk+
CisJPHRydWUvPgorCTxrZXk+VG9vbGJhclNpemVNb2RlPC9rZXk+CisJPGludGVnZXI+MTwvaW50
ZWdlcj4KKwk8a2V5PlR5cGU8L2tleT4KKwk8c3RyaW5nPlBlcnNwZWN0aXZlczwvc3RyaW5nPgor
CTxrZXk+VXBkYXRlTWVzc2FnZTwva2V5PgorCTxzdHJpbmc+VGhlIERlZmF1bHQgV29ya3NwYWNl
IGluIHRoaXMgdmVyc2lvbiBvZiBYY29kZSBub3cgaW5jbHVkZXMgc3VwcG9ydCB0byBoaWRlIGFu
ZCBzaG93IHRoZSBkZXRhaWwgdmlldyAod2hhdCBoYXMgYmVlbiByZWZlcnJlZCB0byBhcyB0aGUg
Ik1ldHJvLU1vcnBoIiBmZWF0dXJlKS4gIFlvdSBtdXN0IGRpc2NhcmQgeW91ciBjdXJyZW50IERl
ZmF1bHQgV29ya3NwYWNlIHNldHRpbmdzIGFuZCB1cGRhdGUgdG8gdGhlIGxhdGVzdCBEZWZhdWx0
IFdvcmtzcGFjZSBpbiBvcmRlciB0byBnYWluIHRoaXMgZmVhdHVyZS4gIERvIHlvdSB3aXNoIHRv
IHVwZGF0ZSB0byB0aGUgbGF0ZXN0IFdvcmtzcGFjZSBkZWZhdWx0cyBmb3IgcHJvamVjdCAnJUAn
Pzwvc3RyaW5nPgorCTxrZXk+V2luZG93SnVzdGlmaWNhdGlvbjwva2V5PgorCTxpbnRlZ2VyPjU8
L2ludGVnZXI+CisJPGtleT5XaW5kb3dPcmRlckxpc3Q8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJp
bmc+RkJDNzZCNTkxMUY2MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCTxzdHJpbmc+L1ZvbHVtZXMv
REFUQS9wYXVscy9zcmMvU2FmYXJpL09wZW5Tb3VyY2UvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhj
b2RlcHJvajwvc3RyaW5nPgorCTwvYXJyYXk+CisJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwk8
c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJPGtleT5XaW5kb3dU
b29sc1YzPC9rZXk+CisJPGFycmF5PgorCQk8ZGljdD4KKwkJCTxrZXk+Rmlyc3RUaW1lV2luZG93
RGlzcGxheWVkPC9rZXk+CisJCQk8ZmFsc2UvPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJ
CQk8c3RyaW5nPndpbmRvd1Rvb2wuYnVpbGQ8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwv
a2V5PgorCQkJPHRydWUvPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8
ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0Pgor
CQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFD
RDA1MjhGMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJCQkJCTwvZGlj
dD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0
PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezEz
MDAsIDI5NH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz4xNDAgMjc4IDEzMDAgNTc2IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4K
KwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5n
PlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+
CisJCQkJCQkJPHN0cmluZz4yOTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRp
Y3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0
PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+WENNYWluQnVpbGRSZXN1bHRzTW9kdWxlR1VJRDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkJ1aWxkIFJlc3VsdHM8
L3N0cmluZz4KKwkJCQkJCQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJfQ29sbGFwc2U8L2tl
eT4KKwkJCQkJCQkJPGludGVnZXI+MTAyMTwvaW50ZWdlcj4KKwkJCQkJCQkJPGtleT5YQ0J1aWxk
UmVzdWx0c1RyaWdnZXJfT3Blbjwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xMDExPC9pbnRlZ2Vy
PgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5
PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+e3swLCAyOTl9LCB7MTMwMCwgMjM2fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJX
aW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1NzYgMCAwIDE0
NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5
PgorCQkJCQkJCTxzdHJpbmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJ
PGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMzZwdDwvc3RyaW5nPgorCQkJ
CQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJ
CQkJPHN0cmluZz41MzVwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8
a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJPGtl
eT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYQnVpbGRS
ZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zp
c2libGU8L2tleT4KKwkJCTx0cnVlLz4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJ
CQk8YXJyYXk+CisJCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4K
KwkJCQk8c3RyaW5nPkZCMzlENzYwMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5nPgorCQkJCTxzdHJp
bmc+MUNEMDUyOEYwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz5YQ01haW5C
dWlsZFJlc3VsdHNNb2R1bGVHVUlEPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29s
YmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5i
dWlsZFYzPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8
c3RyaW5nPjQ4NiAzMDA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8
c3RyaW5nPjE0MCAyNzggMTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5X
aW5kb3dUb29sR1VJRDwva2V5PgorCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGZhbHNlLz4K
KwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmlu
Zz53aW5kb3dUb29sLmRlYnVnZ2VyPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJ
PGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5Pgor
CQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkRlYnVnZ2VyPC9rZXk+CisJCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQkJPGtleT5Ib3Jpem9udGFsU3BsaXRWaWV3PC9rZXk+CisJCQkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJCQk8a2V5Pl9jb2xsYXBzaW5nRnJhbWVEaW1lbnNpb248L2tleT4KKwkJCQkJCQkJ
CQk8cmVhbD4wLjA8L3JlYWw+CisJCQkJCQkJCQkJPGtleT5faW5kZXhPZkNvbGxhcHNlZFZpZXc8
L2tleT4KKwkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+X3Bl
cmNlbnRhZ2VPZkNvbGxhcHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3JlYWw+
CisJCQkJCQkJCQkJPGtleT5pc0NvbGxhcHNlZDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+eWVz
PC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5zaXplczwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4K
KwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MzE3LCAxNjR9fTwvc3RyaW5nPgorCQkJCQkJ
CQkJCQk8c3RyaW5nPnt7MzE3LCAwfSwgezM3NywgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQk8
L2FycmF5PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5WZXJ0aWNhbFNwbGl0Vmll
dzwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5fY29sbGFwc2luZ0ZyYW1l
RGltZW5zaW9uPC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxr
ZXk+X2luZGV4T2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPGludGVnZXI+MDwvaW50
ZWdlcj4KKwkJCQkJCQkJCQk8a2V5Pl9wZXJjZW50YWdlT2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJ
CQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+aXNDb2xsYXBzZWQ8L2tl
eT4KKwkJCQkJCQkJCQk8c3RyaW5nPnllczwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+c2l6ZXM8
L2tleT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5
NCwgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDE2NH0sIHs2OTQsIDIx
Nn19PC9zdHJpbmc+CisJCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJ
CQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PkxhdW5jaGVyQ29uZmlnVmVyc2lvbjwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPjg8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJ
RDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDMTYyOTg0MDY0QzEwRDQwMEI5NUE3Mjwvc3RyaW5n
PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3Ry
aW5nPkRlYnVnIC0gR0xVVEV4YW1wbGVzIChVbmRlcndhdGVyKTwvc3RyaW5nPgorCQkJCQkJCTwv
ZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PkRlYnVnQ29uc29sZURyYXdlclNpemU8L2tleT4KKwkJCQkJCQkJ
PHN0cmluZz57MTAwLCAxMjB9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RGVidWdDb25zb2xlVmlz
aWJsZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5E
ZWJ1Z0NvbnNvbGVXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MjAwLCAyMDB9
LCB7NTAwLCAzMDB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnU1RESU9XaW5kb3dGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwvc3RyaW5n
PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5
NCwgMzgwfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPjMyMSAyMzggNjk0IDQyMiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhEZWJ1Z1Nlc3Npb25Nb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9h
cnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3Ry
aW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxz
dHJpbmc+RGVidWdnZXI8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4x
PC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJ
CQk8c3RyaW5nPjFDRDEwQTk5MDY5RUY4QkEwMEIwNjcyMDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+
MUMwQUQyQUIwNjlGMUU5QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzE2Mjk4NDA2
NEMxMEQ0MDBCOTVBNzI8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkFDMDY5RjFFOUIwMEZB
QkNFNjwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248
L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuZGVidWdWMzwvc3RyaW5nPgor
CQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzIxIDIzOCA2OTQgNDIyIDAg
MCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxz
dHJpbmc+MUNEMTBBOTkwNjlFRjhCQTAwQjA2NzIwPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rv
b2xJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJ
PGRpY3Q+CisJCQk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCQkJPGZhbHNl
Lz4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmZpbmQ8
L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUvPgorCQkJPGtleT5M
YXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+
CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJ
CQkJCTxhcnJheT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1
cmF0aW9uPC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz4xQ0RENTI4QzA2MjIyMDcyMDAxMzQ2
NzU8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5Pgor
CQkJCQkJCQkJCTxzdHJpbmc+U2hhZGVyTGFuZy5jcHA8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5
PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJCQk8
L2RpY3Q+CisJCQkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+
e3swLCAwfSwgezc4MSwgMjEyfX08L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRv
d0ZyYW1lPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAg
MTE3OCA8L3N0cmluZz4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+TW9kdWxlPC9r
ZXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJ
CQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+NzgxcHQ8L3N0cmluZz4K
KwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9u
PC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8dHJ1ZS8+
CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+
MUNEMDUyOEUwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVj
dE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+
CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+
CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz57ezAsIDIxN30sIHs3ODEsIDIxMn19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2lu
ZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAg
MTE3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCQkJCQk8c3RyaW5nPlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtl
eT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJ
PC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
PHN0cmluZz40MjlwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJCQk8a2V5PlNl
cnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhQcm9qZWN0Rmlu
ZE1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxl
PC9rZXk+CisJCQk8dHJ1ZS8+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJCQkJ
PHN0cmluZz5GQjNDNTBERDExRjc5RDI3MDA4MUY1QkE8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZC
M0M1MERFMTFGNzlEMjcwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNERDUyOEMwNjIy
MjA3MjAwMTM0Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI4RTA2MjM3MDcyMDAxNjY2
NzU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJ
PHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VF
PC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxmYWxzZS8+
CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJp
bmc+TUVOVVNFUEFSQVRPUjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5J
ZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdnZXJDb25zb2xlPC9z
dHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJ
CQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtl
eT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJ
CTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJ
PGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDNzhFQUFD
MDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVM
YWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRlYnVnZ2VyIENvbnNvbGU8L3N0cmluZz4KKwkJ
CQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJ
CQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7
MCwgMH0sIHs2NTAsIDI1MH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz41MTYgNjMyIDY1MCAyNTAgMCAwIDE2ODAgMTAyNyA8
L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPlBCWERlYnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0
aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0Pgor
CQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4y
MDlwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tl
eT4KKwkJCTxzdHJpbmc+RGVidWdnZXIgQ29uc29sZTwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNl
Q2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8
L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5Pgor
CQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJ
CQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQzc4RUFBRDA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4K
KwkJCQk8c3RyaW5nPjFDNzhFQUFFMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJp
bmc+MUM3OEVBQUMwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtl
eT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNv
bmZpZy5jb25zb2xlVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8
c3RyaW5nPjY1MCA0MSA2NTAgMjUwIDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQk8a2V5Pldp
bmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDNzhFQUFEMDY1RDQ5MjYwMEIwNzA5NTwv
c3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4w
PC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+
CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuc25hcHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PkxheW91
dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJ
CQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPlhDU25hcHNob3RNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJ
CQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAw
JTwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+U25hcHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5YQ1NuYXBzaG90TW9kdWxlPC9zdHJpbmc+CisJ
CQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxzdHJpbmc+
WWVzPC9zdHJpbmc+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3Ry
aW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLnNuYXBzaG90czwvc3RyaW5nPgorCQkJPGtleT5XaW5k
b3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzE1IDgyNCAzMDAgNTUwIDAgMCAxNDQwIDg3OCA8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPHN0cmluZz5Z
ZXM8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5
PgorCQkJPHN0cmluZz53aW5kb3dUb29sLnNjbTwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tl
eT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxh
cnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tl
eT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjFDNzhFQUIyMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJ
CQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPiZs
dDtObyBFZGl0b3ImZ3Q7PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYU3BsaXRNb2R1bGVJbk5h
dmlnYXRvcktleTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXQwPC9r
ZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlE
PC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz4xQzc4RUFCMzA2NUQ0OTI2MDBCMDcwOTU8L3N0cmlu
Zz4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXRDb3VudDwva2V5PgorCQkJ
CQkJCQkJPHN0cmluZz4xPC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5T
dGF0dXNCYXJWaXNpYmlsaXR5PC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57
ezAsIDB9LCB7NDUyLCAwfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAwIDAgMTI4MCAxMDAyIDwv
c3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJ
CTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjBwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdl
cj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJ
CQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPjFDRDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8
a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPlNDTTwvc3Ry
aW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkNvbnNvbGVGcmFtZTwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPnt7MCwgMjU5fSwgezQ1MiwgMH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+
RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDd9LCB7NDUyLCAyNTl9fTwvc3RyaW5n
PgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+
NzQzIDM3OSA0NTIgMzA4IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+VGFi
bGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCTxzdHJpbmc+
U3RhdHVzPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD4zMDwvcmVhbD4KKwkJCQkJCQkJCTxzdHJp
bmc+RmlsZU5hbWU8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE5OTwvcmVhbD4KKwkJCQkJCQkJ
CTxzdHJpbmc+UGF0aDwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MTk3LjA5NTAwMTIyMDcwMzE8
L3JlYWw+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+VGFibGVGcmFtZTwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs0NTIsIDI1MH19PC9zdHJpbmc+CisJCQkJCQkJPC9k
aWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDVlNNb2R1
bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5n
PjI2MnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+
UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjI2NnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5TQ008L3N0cmlu
Zz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5n
PlBCWENWU01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNW
aXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29u
dGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDNzhFQUI0MDY1RDQ5MjYwMEIw
NzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUM3OEVBQjUwNjVENDkyNjAwQjA3MDk1PC9zdHJp
bmc+CisJCQkJPHN0cmluZz4xQzc4RUFCMjA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8
c3RyaW5nPjFDRDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJ
CTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJh
ci5jb25maWcuc2NtPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0
cmluZz43NDMgMzc5IDQ1MiAzMDggMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJPC9kaWN0Pgor
CQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29s
LmJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxpbnRl
Z2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2Vy
PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJPGtleT5QQlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJCQk8YXJy
YXk+CisJCQkJCQkJCQk8c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgor
CQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+
CisJCQkJCQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJ
CQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+Rmls
ZXM8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tl
eT4KKwkJCQkJCQkJPHN0cmluZz5ubzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3Jv
dXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxr
ZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5XaWR0aHNLZXk8L2tleT4KKwkJCQkJCQkJ
CTxhcnJheT4KKwkJCQkJCQkJCQk8cmVhbD4xNjg8L3JlYWw+CisJCQkJCQkJCQk8L2FycmF5Pgor
CQkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4K
KwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmluZz4K
KwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5QQlhTbWFy
dEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZUtleV92Nzwva2V5PgorCQkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVFeHBhbnNp
b25LZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5nPjFDNzdGQUJD
MDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTxr
ZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVTZWxlY3Rpb25LZXk8L2tleT4K
KwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxpbnRlZ2Vy
PjA8L2ludGVnZXI+CisJCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlVmlzaWJsZVJlY3RL
ZXk8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezE2OCwgMzUwfX08L3N0cmluZz4K
KwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBHSURzPC9rZXk+
CisJCQkJCQkJCTxhcnJheS8+CisJCQkJCQkJCTxrZXk+WENJbmNsdWRlUGVyc3BlY3RpdmVzU3dp
dGNoPC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MTg1LCAz
Njh9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmlu
Zz4KKwkJCQkJCQkJCTxyZWFsPjE2ODwvcmVhbD4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJ
PGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMxNSA0MjQgNzQ0
IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+
TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3Ry
aW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTg1cHQ8
L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVu
dENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9q
ZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDQTFBRUQ3MDYzOThFQkQwMDU4
OTE0Nzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8
a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3sxOTAsIDB9LCB7NTU0LCAzNjh9fTwv
c3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+MzE1IDQyNCA3NDQgNDA5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9k
dWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmlu
Zz41NTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4zNjhwdDwvc3RyaW5nPgorCQkJCTwvZGlj
dD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk1ham9yVmVyc2lvbjwva2V5PgorCQkJPGludGVnZXI+
MzwvaW50ZWdlcj4KKwkJCTxrZXk+TWlub3JWZXJzaW9uPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9p
bnRlZ2VyPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkJyZWFrcG9pbnRzPC9zdHJp
bmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmlu
Zz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxN
b2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwv
a2V5PgorCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQ0REQjY2ODA3Rjk4RDk4MDBCQjU4MTc8L3N0
cmluZz4KKwkJCQk8c3RyaW5nPjFDRERCNjY5MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJ
CTxzdHJpbmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0cmluZz4x
Q0ExQUVENzA2Mzk4RUJEMDA1ODkxNDc8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRv
b2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmln
LmJyZWFrcG9pbnRzVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8
c3RyaW5nPjMxNSA0MjQgNzQ0IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5Pldp
bmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDRERCNjY4MDdGOThEOTgwMEJCNTgxNzwv
c3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4x
PC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+
CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdBbmltYXRvcjwvc3RyaW5nPgorCQkJPGtleT5M
YXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+
CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJ
CQkJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJv
cG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0
PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmlu
Zz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBWaXN1YWxpemVyPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZp
Y2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91
cDwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+
CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwv
a2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWJ1Z0FuaW1hdG9yVjM8L3N0
cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjEwMCAxMDAgNzAw
IDUwMCAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtl
eT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYm9va21hcmtzPC9zdHJp
bmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8
a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5N
b2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3RyaW5nPgor
CQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5n
PgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Cb29rbWFya3M8L3N0cmluZz4KKwkJCTxr
ZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWEJvb2tt
YXJrc01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNp
YmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8
L2tleT4KKwkJCTxzdHJpbmc+NTM4IDQyIDQwMSAxODcgMCAwIDEyODAgMTAwMiA8L3N0cmluZz4K
KwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmlu
Zz53aW5kb3dUb29sLnByb2plY3RGb3JtYXRDb25mbGljdHM8L3N0cmluZz4KKwkJCTxrZXk+TGF5
b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5Pgor
CQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJ
CQkJCTxzdHJpbmc+WENQcm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJ
CQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5Pgor
CQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlByb2plY3QgRm9ybWF0IENvbmZsaWN0czwvc3Ry
aW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJp
bmc+WENQcm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5Pgor
CQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+
CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ1MCAzMDA8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjUwIDg1MCA0
NzIgMzA3IDAgMCAxNDQwIDg3Nzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtl
eT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuY2xhc3NCcm93c2VyPC9z
dHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJ
CQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtl
eT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJ
CTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJ
PGtleT5PcHRpb25zU2V0TmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkhpZXJhcmNoeSwgYWxs
IGNsYXNzZXM8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjFDQTY0NTZFMDYzQjQ1QjQwMDEzNzlEODwvc3RyaW5nPgorCQkJ
CQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkNs
YXNzIEJyb3dzZXIgLSBOU09iamVjdDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8
a2V5PkNsYXNzZXNGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHszNzQsIDk2
fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5DbGFzc2VzVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWENsYXNzTmFtZUNvbHVt
bklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIwODwvcmVhbD4KKwkJCQkJCQkJ
CTxzdHJpbmc+UEJYQ2xhc3NCb29rQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJ
PHJlYWw+MjI8L3JlYWw+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tl
eT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NjMwLCAzMzF9fTwvc3RyaW5nPgorCQkJCQkJ
CQk8a2V5Pk1lbWJlcnNGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMTA1fSwgezM3
NCwgMzk1fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5NZW1iZXJzVHJlZVRhYmxlQ29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5
cGVJY29uQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+
CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlck5hbWVDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+
CisJCQkJCQkJCQk8cmVhbD4yMTY8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5
cGVDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD45NzwvcmVhbD4KKwkJ
CQkJCQkJCTxzdHJpbmc+UEJYTWVtYmVyQm9va0NvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJ
CQkJCQkJCTxyZWFsPjIyPC9yZWFsPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlBC
WE1vZHVsZVdpbmRvd1N0YXR1c0JhckhpZGRlbjI8L2tleT4KKwkJCQkJCQkJPGludGVnZXI+MTwv
aW50ZWdlcj4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8
c3RyaW5nPjM4NSAxNzkgNjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9k
aWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDbGFzc0Jy
b3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjMzMnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJ
CQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjMzMnB0PC9zdHJpbmc+CisJ
CQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5D
bGFzcyBCcm93c2VyPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MDwv
aW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz4xQzBBRDJBRjA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFD
MEFEMkIwMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNBNjQ1NkUwNjNC
NDVCNDAwMTM3OUQ4PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5jbGFzc2Jyb3dz
ZXI8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjM4NSAx
NzkgNjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlE
PC9rZXk+CisJCQk8c3RyaW5nPjFDMEFEMkFGMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJ
PGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgor
CQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5n
PndpbmRvd1Rvb2wucmVmYWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+SW5jbHVkZUluVG9vbHNN
ZW51PC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5MYXlvdXQ8L2tleT4K
KwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJh
eT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJ
PGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+ezAsIDB9LCB7NTAwLCAzMzV9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2lu
ZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57MCwgMH0sIHs1MDAsIDMzNX08L3N0cmlu
Zz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3Ry
aW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248
L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJ
PC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwv
c3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+UmVmYWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tl
eT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4yMDAg
MjAwIDUwMCAzNTYgMCAwIDE5MjAgMTIwMCA8L3N0cmluZz4KKwkJPC9kaWN0PgorCTwvYXJyYXk+
Cis8L2RpY3Q+Cis8L3BsaXN0PgpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJv
ai9wYXVscy5wYnh1c2VyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcGF1bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmds
ZS54Y29kZXByb2ovcGF1bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAK
Ky8vICEkKlVURjgqJCEKK3sKKwkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovID0g
eworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBB
TkdMRSBTdXBwb3J0ICovID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTQ4Qjc0MDJDQzA3
QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJ
c2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7NTQ0LCA5MTM5fX0iOworCQkJc2VwTmF2
U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA5ODJ9IjsKKwkJ
fTsKKwl9OworCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9
IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7OTcx
LCA0Nzg0fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezIzNjMsIDE5fSI7CisJCQlzZXBOYXZW
aXNSYW5nZSA9ICJ7MTg2MiwgOTI4fSI7CisJCX07CisJfTsKKwk2MEMzOTk4QzlDRTY2REUwQzVC
MEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5h
dkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezU3MiwgMTQ2OX19IjsKKwkJCXNlcE5hdlNlbFJh
bmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgMTAyNX0iOworCQl9Owor
CX07CisJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovID0g
eworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBP
dXRwdXRHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3Qg
PSAie3swLCAwfSwgezY5MSwgNjUwfX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsK
KwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxNDM1fSI7CisJCX07CisJfTsKKwlBNTNEMTY5Q0I4
NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJ
CQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDYzMDc2fX0iOworCQkJc2Vw
TmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxNzQ2fSI7
CisJCX07CisJfTsKKwlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3Bw
ICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0s
IHs5MjYsIDQ4M319IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZW
aXNSYW5nZSA9ICJ7MCwgNjA4fSI7CisJCX07CisJfTsKKwlEMkM5QzhFQjRBN0VGRjVCNjdGRjlE
QkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJv
dW5kc1JlY3QgPSAie3swLCAwfSwgezEyMTYsIDI5NTF9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9
ICJ7MCwgMH0iOworCQkJc2VwTmF2VmlzUmFuZ2UgPSAiezAsIDEzNzV9IjsKKwkJfTsKKwl9Owor
CURBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJYWN0
aXZlQnVpbGRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCWFjdGl2ZVRhcmdldCA9IDE1
NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi87CisJCWNvZGVTZW5zZU1hbmFnZXIgPSBG
QkM3NkFGNzExRjYyMDNDMDBCRkIwMzcgLyogQ29kZSBzZW5zZSAqLzsKKwkJcGVyVXNlckRpY3Rp
b25hcnkgPSB7CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UzLlBC
WEV4ZWN1dGFibGVzRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29s
dW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJj
ZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlEOworCQkJ
CVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5XaWR0aHNLZXkgPSAoCisJCQkJCTIyLAorCQkJ
CQkzMDAsCisJCQkJCTYzNiwKKwkJCQkpOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1
bW5zS2V5ID0gKAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQWN0aXZlRmxhZ0lELAor
CQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlELAorCQkJCQlQQlhFeGVjdXRhYmxl
c0RhdGFTb3VyY2VfQ29tbWVudHNJRCwKKwkJCQkpOworCQkJfTsKKwkJCVBCWENvbmZpZ3VyYXRp
b24uUEJYRmlsZVRhYmxlRGF0YVNvdXJjZTMuUEJYRmlsZVRhYmxlRGF0YVNvdXJjZSA9IHsKKwkJ
CQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9IDE7CisJ
CQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNv
dXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1u
V2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjMzLAorCQkJCQkyMCwKKwkJCQkJNDgsCisJ
CQkJCTQzLAorCQkJCQk0MywKKwkJCQkJMjAsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFibGVEYXRh
U291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwK
KwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVE
YXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9PYmplY3RT
aXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29sdW1uSUQsCisJ
CQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0
YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhDb25maWd1cmF0
aW9uLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UzLlhDU0NNRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhG
aWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJ
UEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNvdXJj
ZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lk
dGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjAsCisJCQkJCTIwOSwKKwkJCQkJMjAsCisJCQkJ
CTQ4LjE2MjU5NzY1NjI1LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJCTIwLAorCQkJCSk7CisJ
CQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtbnNLZXkgPSAoCisJCQkJCVBCWEZpbGVEYXRh
U291cmNlX1NDTV9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwK
KwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVE
YXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9PYmplY3RT
aXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29sdW1uSUQsCisJ
CQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0
YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhDb25maWd1cmF0
aW9uLlBCWFRhcmdldERhdGFTb3VyY2UuUEJYVGFyZ2V0RGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhG
aWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJ
UEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNvdXJj
ZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lk
dGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMTkzLAorCQkJCQk2MCwKKwkJCQkJMjAsCisJCQkJ
CTQ4LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291
cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwKKwkJ
CQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWFRhcmdldERh
dGFTb3VyY2VfUHJpbWFyeUF0dHJpYnV0ZSwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfQnVpbHRf
Q29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX09iamVjdFNpemVfQ29sdW1uSUQsCisJ
CQkJCVBCWEZpbGVEYXRhU291cmNlX0Vycm9yc19Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFT
b3VyY2VfV2FybmluZ3NfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhQZXJQcm9qZWN0
VGVtcGxhdGVTdGF0ZVNhdmVEYXRlID0gMzAyMDU1MDYwOworCQkJUEJYV29ya3NwYWNlU3RhdGVT
YXZlRGF0ZSA9IDMwMjA1NTA2MDsKKwkJfTsKKwkJcGVyVXNlclByb2plY3RJdGVtcyA9IHsKKwkJ
CUZCMzlENzVEMTIwMTBFM0QwMDA4OEU2OSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjM5RDc1
RDEyMDEwRTNEMDAwODhFNjkgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQjQxMUY3
OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MEI0MTFGNzk1N0EwMDgx
RjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBCNTExRjc5NTdBMDA4MUY1QkEg
LyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRl
eHRCb29rbWFyayAqLzsKKwkJfTsKKwkJc291cmNlQ29udHJvbE1hbmFnZXIgPSBGQkM3NkFGNjEx
RjYyMDNDMDBCRkIwMzcgLyogU291cmNlIENvbnRyb2wgKi87CisJCXVzZXJCdWlsZFNldHRpbmdz
ID0geworCQkJU1lNUk9PVCA9IC4uOworCQl9OworCX07CisJREREM0I3RTNCN0IzNUEwQjg0NjlB
Qjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdklu
dEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezUzMCwgNTE3fX0iOworCQkJc2VwTmF2U2VsUmFuZ2Ug
PSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA0Nzh9IjsKKwkJfTsKKwl9Owor
CUUzQTI5QjZFOUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0geworCQl1
aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs1MzAsIDUxN319
IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7
MCwgNDc4fSI7CisJCX07CisJfTsKKwlGQjM5RDc1RDEyMDEwRTNEMDAwODhFNjkgLyogUEJYVGV4
dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSBFM0Ey
OUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLzsKKwkJbmFtZSA9ICJU
cmFuc2xhdG9ySExTTC5oOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9
IDA7CisJCXZyTGVuID0gNDc4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTA1NTExRjc5MjRB
MDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07CisJRkIzQzUw
QjQxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJY
VGV4dEJvb2ttYXJrOworCQlmUmVmID0gQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVH
ZW5HTFNMLmNwcCAqLzsKKwkJbmFtZSA9ICJDb2RlR2VuR0xTTC5jcHA6IDEiOworCQlyTGVuID0g
MDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA2MDg7CisJCXZyTG9jID0g
MDsKKwl9OworCUZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8g
PSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IEUzQTI5QjZFOUMyMUI2N0My
NUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovOworCQluYW1lID0gIlRyYW5zbGF0b3JITFNM
Lmg6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4g
PSA0Nzg7CisJCXZyTG9jID0gMDsKKwl9OworCUZCQzc2QUY2MTFGNjIwM0MwMEJGQjAzNyAvKiBT
b3VyY2UgQ29udHJvbCAqLyA9IHsKKwkJaXNhID0gUEJYU291cmNlQ29udHJvbE1hbmFnZXI7CisJ
CWZhbGxiYWNrSXNhID0gWENTb3VyY2VDb250cm9sTWFuYWdlcjsKKwkJaXNTQ01FbmFibGVkID0g
MDsKKwkJc2NtQ29uZmlndXJhdGlvbiA9IHsKKwkJCXJlcG9zaXRvcnlOYW1lc0ZvclJvb3RzID0g
eworCQkJCSIiID0gIiI7CisJCQl9OworCQl9OworCX07CisJRkJDNzZBRjcxMUY2MjAzQzAwQkZC
MDM3IC8qIENvZGUgc2Vuc2UgKi8gPSB7CisJCWlzYSA9IFBCWENvZGVTZW5zZU1hbmFnZXI7CisJ
CWluZGV4VGVtcGxhdGVQYXRoID0gIiI7CisJfTsKK30KSW5kZXg6IEFOR0xFL3NyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9i
dWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjEzIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAx
OworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDU7CisJb2JqZWN0cyA9IHsK
KworLyogQmVnaW4gUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJMTU2M0Q5OTE2QkZE
QUQ4NTMwMzJDRTFBIC8qIEFsbCAqLyA9IHsKKwkJCWlzYSA9IFBCWEFnZ3JlZ2F0ZVRhcmdldDsK
KwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi87
CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJRkIz
QzUwNjQxMUY3OTI5NzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOwor
CQkJbmFtZSA9IEFsbDsKKwkJCXByb2R1Y3ROYW1lID0gQWxsOworCQl9OworCQkzMTM0OUQ2NjVG
QUU2NDJBRUI0OTEzNUUgLyogQU5HTEUgU3VwcG9ydCAqLyA9IHsKKwkJCWlzYSA9IFBCWEFnZ3Jl
Z2F0ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwQUE1NDgyNUJGNURGMEEz
RkJBOTJCNjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJn
ZXQgIkFOR0xFIFN1cHBvcnQiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkEwRDcxMjVE
QjA2QTdBNzcxNkE1OTEwIC8qIEFjdGlvbiAiZmxleF9nbHNsYW5nIiAqLywKKwkJCQkwRDUxM0Y4
QjkyMzk0OUMxNTZEQjAyQzUgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLywKKwkJCSk7CisJ
CQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJBTkdMRSBTdXBwb3J0IjsKKwkJ
CXByb2R1Y3ROYW1lID0gInRyYW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQl9OworLyogRW5k
IFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCisJCTA1NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZpZXJBbGl2ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0ODU3RTE4
Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQkwQTIxNjk0
OTEwM0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyog
SW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCTBENDA2NDE2NzM5OEE2ODkyODA5QTA5RSAvKiBn
bHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9Owor
CQkzMDY1RDI5RTk3RkFDNkUxMjczODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVF
RUEgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07CisJCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
QzlCNDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovOyB9OworCQkzNUJFMUJCRUU2MTM1
QTFDQjA2MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMg
Ki87IH07CisJCTNBOTZFOUNBQzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEy
QTI4RSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJNDBGQzE4OUI4QTI0NkVERjE0QzJGREUzIC8qIGlu
dGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJNTBE
RjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYg
LyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKKwkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CisJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovOyB9OworCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VD
b25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUFCQTVD
NjFCMUI3OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNs
YW5nLmNwcCAqLzsgfTsKKwkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVG
RjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlBRDg1NTE3RjA4
NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAq
LzsgfTsKKwkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1
RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CisJCUI4QkQyNjg1QTE2
QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJM
YW5nLmNwcCAqLzsgfTsKKwkJQkVCQkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIEluZm9TaW5rLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjkyN0JF
NUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAgKi87IH07CisJCUNCN0YwRUYwRDZBODlG
QThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLzsgfTsKKwkJRTFD
N0M1REZGMEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyog
UG9vbEFsbG9jLmNwcCAqLzsgfTsKKwkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vu
cy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwMDc0
NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsK
KwkJRjVBRTJBMjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3
RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUY2QUJENThGOENBQjc2NDFE
OEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUu
Y3BwICovOyB9OworCQlGQjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdCMTEyN0M3
NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTgxMUY3
OTI0QTAwODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdM
U0wuY3BwICovOyB9OworCQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJhbnNsYXRvckdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKKwkJRkIz
QzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGds
c2xhbmcuY3BwICovOyB9OworCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190
YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUz
RDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzQzUw
OTIxMUY3OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5j
cHAgKi87IH07CisJCUZCM0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdCRTVEM0My
QzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQlGQjNDNTA5NDExRjc5NENFMDA4
MUY1QkEgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07CisJCUZCM0M1MDk1MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbml0aWFsaXplRGxsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYwQzM5OThDOUNF
NjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTYxMUY3
OTRDRTAwODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJt
ZWRpYXRlLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTcxMUY3OTRDRTAwODFGNUJBIC8qIGludGVybU91
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUFG
NkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJRkIzQzUwOTgx
MUY3OTRDRTAwODFGNUJBIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJ
bnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUZCM0M1MDlBMTFGNzk0Q0UwMDgxRjVCQSAvKiBv
c3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICov
OyB9OworCQlGQjNDNTA5QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVC
NjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUZCM0M1MDlDMTFGNzk0Q0UwMDgx
RjVCQSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3Bw
ICovOyB9OworCQlGQjNDNTA5RDExRjc5NENFMDA4MUY1QkEgLyogUG9vbEFsbG9jLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NEVBQkU3MzhGQzY2
NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQlGQjNDNTA5RTExRjc5NENFMDA4
MUY1QkEgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUYxMUY3OTRDRTAwODFGNUJBIC8qIFJlbW92ZVRyZWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVG
RjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlGQjNDNTBBMDEx
Rjc5NENFMDA4MUY1QkEgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVy
TGFuZy5jcHAgKi87IH07CisJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCN0U1
QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OworCQlGQjNDNTBB
NDExRjc5NEZGMDA4MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLzsg
fTsKKwkJRkIzQzUwQTUxMUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8q
IGNwcC5jICovOyB9OworCQlGQjNDNTBBNjExRjc5NEZGMDA4MUY1QkEgLyogY3Bwc3RydWN0LmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4QTBBMkEw
QTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCM0M1MEE3MTFGNzk0RkYw
MDgxRjVCQSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJ
RkIzQzUwQTgxMUY3OTRGRjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVBODEzMjM0RCAvKiBz
Y2FubmVyLmMgKi87IH07CisJCUZCM0M1MEE5MTFGNzk0RkYwMDgxRjVCQSAvKiBzeW1ib2xzLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBC
REFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovOyB9OworCQlGQjNDNTBBQTExRjc5NEZGMDA4
MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi87IH07CisJCUZC
M0M1MEFCMTFGNzk1MUIwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3
IC8qIFRyYW5zbGF0b3JHTFNMLmggKi87IH07CisJCUZCM0M1MEFDMTFGNzk1MUIwMDgxRjVCQSAv
KiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovOyB9OworLyog
RW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Q
cm94eSBzZWN0aW9uICovCisJCUU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQlj
b250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmpl
Y3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAzMTM0
OUQ2NjVGQUU2NDJBRUI0OTEzNUU7CisJCQlyZW1vdGVJbmZvID0gInRyYW5zbGF0b3JfY29tbW9u
IFN1cHBvcnQiOworCQl9OworCQlGQjNDNTA2MzExRjc5Mjk3MDA4MUY1QkEgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJ
Y29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2Jq
ZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRkIz
QzUwNTUxMUY3OTI0QTAwODFGNUJBOworCQkJcmVtb3RlSW5mbyA9IGFuZ2xlOworCQl9OworCQlG
QjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewor
CQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gREEx
ODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBl
ID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVF
OworCQkJcmVtb3RlSW5mbyA9ICJBTkdMRSBTdXBwb3J0IjsKKwkJfTsKKy8qIEVuZCBQQlhDb250
YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNl
Y3Rpb24gKi8KKwkJMDU2RkVBREM3RDk1QzZENEM5Q0YxMTEzIC8qIHNjYW5uZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQzlCNDYx
NkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29s
QWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOTRG
NDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcg
LyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5z
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYw
RiAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3
IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDhCNzQwMkNDMDdBMDU5RkVGNUVD
MzUxIC8qIE91dHB1dEdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAv
KiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU2QzdFOTlCQTUw
MEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRl
ckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1ODBCMkEzMUY3QzUxQTU5
QjQwRjExQTMgLyogY29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRI
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2
OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluZm9TaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZCNzBEQzc0QTIx
RkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRy
YW5zbGF0b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5REM5NjEx
RUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBpbnRlcm1l
ZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M2QkIxMkFCMDk5NTU2Q0Yz
NzlENzhGIC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdEOUNGMzc2REM1Nzk5QjRDNkIzMzMxRSAvKiBz
eW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODMxMzk5
REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8q
IEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5QTZGN0IxQUQzOTE4RTY0REY3NkVCMSAvKiBz
bGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCThDMzIyNUMyRjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5nLnkgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlh
Y2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDYx
Q0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1
dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTUyNzZBQTZCMzZGQzFCMUQ5
MTNGQ0U0IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBhdG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlENDdCMUFDODJFNEVFODU5
QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMENFNDM2MzE4NDkyNzZBMzExODdD
N0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMTUzRDU4RjRCQkJEOThBODRFNDIxMCAvKiBn
bHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gZ2xzbGFuZy5sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gZ2xzbGFuZ190YWIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTRG
MkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbml0aWFsaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUE1M0I2NjMy
Qzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkY1Q0ExMUVFQTky
REYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVu
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1
MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIg
LyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAu
YyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3
QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3RTVC
MEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNjZENkI0
N0Q5QUYzMjg2NjQ0QkJFMSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5n
X3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCRTI1ODQ4NjAwNUY2Njk2Q0Mw
MzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2Vf
cG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDM0RBRkY2QkYxMkJCN0Y0
Nzg0RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDk1NDlEQ0NBRjQ1
MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdl
bkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJt
VHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDOEJENTlCRDcwNTZG
RkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyog
Z2xzbGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0VFMEM5MERGNkQ1MDREMUYzNjI5NzExIC8qIFBhcnNlSGVscGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNGMkI2MkUwODIwQzgzMUFGODEyRDAwMCAvKiBidWlsZF9hbmdsZS5neXAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
YnVpbGRfYW5nbGUuZ3lwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRkQxMkM2RTQ2
RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMTNDMzY5M0I5RTQwRDM3RjJGQUIzNEEgLyogdG9r
ZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3ZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEREQzQjdFM0I3QjM1
QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRv
ckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVBRjZGMzEyNkMyRUM0Mzk3
Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYg
LyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHN5
bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjc0NjE4RjE4RkU1NDQ4MTE1
MDE3QzQ0IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5rLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCM0M1MDVEMTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSBsaWJhbmdsZS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OworCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBh
dGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmls
ZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KKwkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8g
PSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNUExMUY3OTI0QTAwODFGNUJB
IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNl
Y3Rpb24gKi8KKwkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEM5QjQ2MTZBNjVB
NUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKKwkJCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYg
LyogYXRvbS5oICovLAorCQkJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmgg
Ki8sCisJCQkJQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAorCQkJCTUyOEZG
MjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLywKKwkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3
NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8q
IG1lbW9yeS5jICovLAorCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnkuaCAq
LywKKwkJCQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCisJCQkJNkJC
QzgyMjRCOUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlGRjNBQTY5NERG
OUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovLAorCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNG
MTExMyAvKiBzY2FubmVyLmggKi8sCisJCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNs
Z2xvYmFscy5oICovLAorCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMg
Ki8sCisJCQkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKKwkJCQky
RDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCisJCQkJRDEzQzM2OTNCOUU0
MEQzN0YyRkFCMzRBIC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBwcmVwcm9jZXNz
b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxOTZEQjZBQjAwNkJCODM1
MDNDN0Q3ODYgLyogU291cmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovLAor
CQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQlCN0Ix
MTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAorCQkJCUM0OTU0OURD
Q0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCisJCQkJRjc0NjE4RjE4RkU1
NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAorCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5
MyAvKiBDb25zdGFudFVuaW9uLmggKi8sCisJCQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8q
IEluZm9TaW5rLmNwcCAqLywKKwkJCQlGN0IyOTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1Np
bmsuaCAqLywKKwkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki8sCisJCQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRpYWxpemUuaCAqLywKKwkJ
CQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCisJCQkJ
QTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKKwkJCQkyRTdD
OUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQk4NTg0
NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAorCQkJ
CUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJ
M0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJREVF
QUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk0OEI3NDAyQ0MwN0EwNTlG
RUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFG
OTIwIC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyog
T3V0cHV0SExTTC5jcHAgKi8sCisJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1
dEhMU0wuaCAqLywKKwkJCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIu
Y3BwICovLAorCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQYXJzZUhlbHBlci5oICov
LAorCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovLAorCQkJ
CTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLywKKwkJCQk0ODU3RTE4
Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCTlENDdCMUFD
ODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUI0MzZFRkYwNjkx
M0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlENDBGNzhDQjlCQTBDODk5
MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVC
MSAvKiBTaEhhbmRsZS5oICovLAorCQkJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFk
ZXJMYW5nLmNwcCAqLywKKwkJCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFi
bGUuY3BwICovLAorCQkJCTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5o
ICovLAorCQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCisJCQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8s
CisJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywK
KwkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKKwkJ
CQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKKwkJCQlFMzcxMUE0OEEw
QkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKKwkJCQkyQTc2NUI4NkNCQUYw
RDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMw
RTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKKwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyog
ZGVidWcuaCAqLywKKwkJCQlBMzE1M0Q1OEY0QkJCRDk4QTg0RTQyMTAgLyogZ2xzbGFuZy5sICov
LAorCQkJCThDMzIyNUMyRjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5nLnkgKi8sCisJCQkJREVB
RjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJNzk5REM5NjEx
RUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCTE1M0JGMDZCRjEyQzZG
NTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUM4QkQ1OUJENzA1NkZG
QzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKKwkJCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2
MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAorCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURC
RiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKKwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyog
dW5pc3RkLmggKi8sCisJCQkpOworCQkJbmFtZSA9IFNvdXJjZTsKKwkJCXBhdGggPSBjb21waWxl
cjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTQ2NkUxRDA1MzFBNzlCNTgx
M0U4QTdGOCAvKiBJbnRlcm1lZGlhdGVzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQlDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5jcHAg
Ki8sCisJCQkJQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywK
KwkJCQlCQzY2RDZCNDdEOUFGMzI4NjY0NEJCRTEgLyogZ2xzbGFuZ190YWIuaCAqLywKKwkJCSk7
CisJCQluYW1lID0gSW50ZXJtZWRpYXRlczsKKwkJCXNvdXJjZVRyZWUgPSBJTlRFUk1FRElBVEVf
RElSOworCQl9OworCQk1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQgPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBT
b3VyY2UgKi8sCisJCQkJNDY2RTFEMDUzMUE3OUI1ODEzRThBN0Y4IC8qIEludGVybWVkaWF0ZXMg
Ki8sCisJCQkJRTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICovLAorCQkJCUIy
QzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLywKKwkJCSk7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUNGMkI2MkUw
ODIwQzgzMUFGODEyRDAwMCAvKiBidWlsZF9hbmdsZS5neXAgKi8sCisJCQkpOworCQkJbmFtZSA9
IEJ1aWxkOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRTBFREM0MTMwRTdE
Mzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQkzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRv
cl9jb21tb24uYSAqLywKKwkJCQlGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyogbGliYW5nbGUu
YSAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0
aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5z
bGF0b3JfY29tbW9uICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRD
b25maWd1cmF0aW9uTGlzdCA9IDM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9jb21tb24iICov
OworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRUFBMjJDQTYzRkQ1NzJGQ0NCOTEzRDIyIC8qIFNv
dXJjZXMgKi8sCisJCQkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8s
CisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJ
CQkJMjkxRUUwNDIwMkVDNzk2NzgzNUZDQzM4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJ
CQkpOworCQkJbmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVjdE5hbWUgPSB0cmFu
c2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAzREREQzc3MjE2MjAyQTRERTE4
MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworCQlGQjNDNTA1NTEx
Rjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7
CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzQzUwNUIxMUY3OTI0QTAwODFGNUJBIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJhbmdsZSIgKi87
CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlGQjNDNTA1NjExRjc5MjRBMDA4MUY1QkEgLyogU291
cmNlcyAqLywKKwkJCQlGQjNDNTA1QTExRjc5MjRBMDA4MUY1QkEgLyogRnJhbWV3b3JrcyAqLywK
KwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJ
CQlGQjNDNTBEMTExRjc5Q0NDMDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJ
CSk7CisJCQluYW1lID0gYW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfZ2xzbDsK
KwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyogbGliYW5n
bGUuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFy
eS5zdGF0aWMiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisKKy8q
IEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEg
LyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYXR0cmli
dXRlcyA9IHsKKwkJCQlCdWlsZEluZGVwZW5kZW50VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7CisJ
CQl9OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENF
NyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xl
IiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJCQloYXNTY2Fu
bmVkRm9yRW5jb2RpbmdzID0gMTsKKwkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVD
NTY4RDsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7CisJCQlwcm9qZWN0Um9vdCA9ICIiOworCQkJ
dGFyZ2V0cyA9ICgKKwkJCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovLAorCQkJ
CTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLywKKwkJCQkz
MTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUUgLyogQU5HTEUgU3VwcG9ydCAqLywKKwkJCQlGQjNDNTA1
NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFBy
b2plY3Qgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2Vj
dGlvbiAqLworCQkwRDUxM0Y4QjkyMzk0OUMxNTZEQjAyQzUgLyogQWN0aW9uICJiaXNvbl9nbHNs
YW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBh
dGhzID0gKAorCQkJCWNvbXBpbGVyL2dsc2xhbmcueSwKKwkJCSk7CisJCQluYW1lID0gIkFjdGlv
biBcImJpc29uX2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1F
RElBVEVfRElSKS9nbHNsYW5nX3RhYi5jcHAiLAorCQkJCSIkKElOVEVSTUVESUFURV9ESVIpL2ds
c2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8g
bm90ZTogXCJFeGVjdXRpbmcgYmlzb24gb24gY29tcGlsZXIvZ2xzbGFuZy55XCJcbmV4ZWMgYmlz
b24gLS1uby1saW5lcyBcIi0tZGVmaW5lcz0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFi
LmhcIiBcIi0tc2tlbGV0b249eWFjYy5jXCIgXCItLW91dHB1dD0ke0lOVEVSTUVESUFURV9ESVJ9
L2dsc2xhbmdfdGFiLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcueVxuZXhpdCAxXG4iOworCQkJc2hv
d0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisJCUZBMEQ3MTI1REIwNkE3QTc3MTZBNTkxMCAvKiBB
Y3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5nLmwsCisJCQkpOwor
CQkJbmFtZSA9ICJBY3Rpb24gXCJmbGV4X2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgK
KwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nLmNwcCIsCisJCQkpOworCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3No
OworCQkJc2hlbGxTY3JpcHQgPSAiZWNobyBub3RlOiBcIkV4ZWN1dGluZyBmbGV4IG9uIGNvbXBp
bGVyL2dsc2xhbmcubFwiXG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0Zmls
ZT0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmcuY3BwXCIgY29tcGlsZXIvZ2xzbGFuZy5sXG5l
eGl0IDFcbiI7CisJCQlzaG93RW52VmFyc0luTG9nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTaGVs
bFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCisJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICov
ID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJODg4RjEzODI0OThFMkQ3NEFGMjgwMUM4
IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJFQkJGNEYwODE5RUEzRDAzOTc3QThG
QyAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwQTIxNjk0OTEwM0Ux
RTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MERG
MDAwMDVDQzQyMTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTQwRkMxODlCOEEyNDZFREYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRjVBRTJBMjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAvKiBQYXJz
ZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUM3QzVERkYwQjJERkVDMDkzODdGNEUg
LyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA1NTYzQURGRUExNTExNkQ3MjMz
MzMyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQzIzRjU4RkRE
M0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCOEJE
MjY4NUExNkIxODhDQ0RGQjA1MkIgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGNkFCRDU4RjhDQUI3NjQxRDhCRkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzJCMURCQ0Q2QjgzRjIxNDZENzg3QTYyIC8qIGF0b20uYyBpbiBTb3VyY2VzICov
LAorCQkJCUNCN0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovLAor
CQkJCTM1QkUxQkJFRTYxMzVBMUNCMDYwOEVBOCAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICov
LAorCQkJCTNBOTZFOUNBQzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICov
LAorCQkJCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LywKKwkJCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMg
Ki8sCisJCQkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5jIGluIFNvdXJjZXMg
Ki8sCisJCQkJQUJBNUM2MUIxQjc4QjlBOEQ2OUY2QUVDIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEQ0MDY0MTY3Mzk4QTY4OTI4MDlBMDlFIC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9w
b3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNTYxMUY3OTI0QTAwODFGNUJBIC8qIFNv
dXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjNDNTBBQjExRjc5NTFC
MDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuaCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEFD
MTFGNzk1MUIwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTBBNDExRjc5NEZGMDA4MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUw
QTUxMUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTYx
MUY3OTRGRjAwODFGNUJBIC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUw
QTcxMUY3OTRGRjAwODFGNUJBIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUw
QTgxMUY3OTRGRjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1
MEE5MTFGNzk0RkYwMDgxRjVCQSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTBBQTExRjc5NEZGMDA4MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTA4RTExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
QjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzQzUwOTIxMUY3OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCM0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjNDNTA5NDExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjNDNTA5NTExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZURs
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NjExRjc5NENFMDA4MUY1QkEgLyogSW50
ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk3MTFGNzk0Q0UwMDgxRjVC
QSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTgxMUY3OTRDRTAw
ODFGNUJBIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlB
MTFGNzk0Q0UwMDgxRjVCQSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGQjNDNTA1ODExRjc5MjRBMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjNDNTA5QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlGQjNDNTA5QzExRjc5NENFMDA4MUY1QkEgLyogUGFyc2VIZWxwZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUQxMUY3OTRDRTAwODFGNUJBIC8qIFBvb2xBbGxv
Yy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5RTExRjc5NENFMDA4MUY1QkEgLyogUXVh
bGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUYxMUY3OTRDRTAwODFG
NUJBIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTAxMUY3OTRD
RTAwODFGNUJBIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTEx
MUY3OTRDRTAwODFGNUJBIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZC
M0M1MDU5MTFGNzkyNEEwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBC
ZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJMjkxRUUwNDIwMkVDNzk2Nzgz
NUZDQzM4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXRE
ZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xF
IFN1cHBvcnQgKi87CisJCQl0YXJnZXRQcm94eSA9IEU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCUZCM0M1MDY0MTFGNzkyOTcwMDgx
RjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKKwkJCXRhcmdldCA9IEZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQSAvKiBhbmdsZSAq
LzsKKwkJCXRhcmdldFByb3h5ID0gRkIzQzUwNjMxMUY3OTI5NzAwODFGNUJBIC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKKwkJRkIzQzUwRDExMUY3OUNDQzAwODFGNUJBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owor
CQkJdGFyZ2V0ID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi87
CisJCQl0YXJnZXRQcm94eSA9IEZCM0M1MEQwMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMDBCRjJF
QkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gInRy
YW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9
OworCQkxQTEyQUE1RDY1QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNU
X05BTUUgPSBBbGw7CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCTFGM0YxMjE4
QjUxMzVGQkIwNjdERTgwOSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0g
bGliOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1
ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCX07
CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8q
IERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxk
U2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF82NF9CSVQpIjsKKwkJ
CQlDT05GSUdVUkFUSU9OX0JVSUxEX0RJUiA9ICIkKEJVSUxEX0RJUikvJChDT05GSUdVUkFUSU9O
KSQoRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUpIjsKKwkJCQlJTlRFUk1FRElBVEVfRElSID0gIiQo
UFJPSkVDVF9ERVJJVkVEX0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJT04pIjsKKwkJCQlPQkpST09U
ID0gIiI7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTSEFSRURfSU5URVJNRURJ
QVRFX0RJUiA9ICIkKFNZTVJPT1QpL0Rlcml2ZWRTb3VyY2VzLyQoQ09ORklHVVJBVElPTikiOwor
CQkJCVNZTVJPT1QgPSAiJChCVUlMRF9ESVIpIjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsK
KwkJfTsKKwkJRkIzQzUwNUMxMUY3OTI0QTAwODFGNUJBIC8qIERlZmF1bHQgKi8gPSB7CisJCQlp
c2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhF
Q1VUQUJMRV9QUkVGSVggPSBsaWI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJ
LiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9IGFuZ2xlOwor
CQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworLyogRW5kIFhDQnVpbGRDb25maWd1cmF0
aW9uIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICov
CisJCTBBQTU0ODI1QkY1REYwQTNGQkE5MkI2MCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQU5HTEUgU3VwcG9ydCIgKi8gPSB7CisJCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwMEJG
MkVCQ0JERjU2NzhGNEJBMkZBOTIgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBE
ZWZhdWx0OworCQl9OworCQkwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi8gPSB7CisJCQlpc2Eg
PSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlC
QzU3OTNDOUExRkYwMjFBODFDNjY1NTkgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0
Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUg
PSBEZWZhdWx0OworCQl9OworCQkzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAq
LyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKAorCQkJCTFGM0YxMjE4QjUxMzVGQkIwNjdERTgwOSAvKiBEZWZhdWx0ICovLAorCQkJ
KTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRDb25m
aWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisJCTc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIy
QiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxs
IiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25zID0gKAorCQkJCTFBMTJBQTVENjVBQ0RFNzFBRTA4OUVFMyAvKiBEZWZhdWx0ICovLAor
CQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUZCM0M1MDVCMTFGNzkyNEEwMDgx
RjVCQSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5n
bGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCisJCQkJRkIzQzUwNUMxMUY3OTI0QTAwODFGNUJBIC8qIERlZmF1bHQgKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRp
b25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1
MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmdsZXV0aWxzLmg6
IENvbW1vbiBBTkdMRSB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NTU9OX0FOR0xFVVRJTFNfSF8K
KyNkZWZpbmUgQ09NTU9OX0FOR0xFVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0
aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0
IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcworI2RlZmlu
ZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3Qg
VHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVO
YW1lJikKKworI2VuZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBBTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNw
cAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5jcHA6IERl
YnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK3N0YXRpYyBib29sIHRyYWNlX29u
ID0gdHJ1ZTsKKworbmFtZXNwYWNlIGdsCit7Cit2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQoreworICAgIGlmICh0cmFjZV9vbikKKyAgICB7CisgICAgICAgIGlmIChmb3JtYXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZJTEUgKmZpbGUgPSBmb3BlbigiZGVidWcudHh0Iiwg
ImEiKTsKKworICAgICAgICAgICAgaWYgKGZpbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgICAgICAgICAgICAgdmFfc3RhcnQodmFyYXJnLCBm
b3JtYXQpOworICAgICAgICAgICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwgdmFyYXJnKTsK
KyAgICAgICAgICAgICAgICB2YV9lbmQodmFyYXJnKTsKKworICAgICAgICAgICAgICAgIGZjbG9z
ZShmaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9jb21tb24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmg6IERl
YnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NTU9OX0RFQlVHX0hfCisjZGVmaW5lIENP
TU1PTl9ERUJVR19IXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KworbmFtZXNwYWNlIGdsCit7CisgICAgLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1Z2dpbmcg
bG9nCisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cit9CisKKy8vIEEg
bWFjcm8gdG8gb3V0cHV0IGEgdHJhY2Ugb2YgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1l
bnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nCisjaWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgVFJB
Q0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoInRyYWNlOiAlcyJtZXNzYWdlIlxuIiwgX19GVU5D
VElPTl9fLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisgICAgI2RlZmluZSBUUkFDRSguLi4pICgodm9p
ZCkwKQorI2VuZGlmCisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQg
aXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4g
bmVlZCBvZiBmaXhpbmcuIFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUuCisjZGVmaW5l
IEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJmaXhtZTogJXMibWVzc2FnZSJcbiIsIF9f
RlVOQ1RJT05fXywgX19WQV9BUkdTX18pCisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rp
b24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgaW4gY2FzZSBv
ZiBlcnJvci4gV2lsbCBvY2N1ciBldmVuIGluIHJlbGVhc2UgbW9kZS4KKyNkZWZpbmUgRVJSKG1l
c3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJlcnI6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18s
IF9fVkFfQVJHU19fKQorCisvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0
cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCisjZGVmaW5lIEFTU0VSVChleHByZXNz
aW9uKSBkbyB7IFwKKyAgICBpZighKGV4cHJlc3Npb24pKSBcCisgICAgICAgIEVSUigiXHQhIEFz
c2VydCBmYWlsZWQgaW4gJXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9f
TElORV9fKTsgXAorICAgIGFzc2VydChleHByZXNzaW9uKTsgXAorICAgIH0gd2hpbGUoMCkKKwor
CisvLyBBIG1hY3JvIHRvIGluZGljYXRlIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25hbGl0eQorI2lm
bmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKKyAgICAgICAg
RklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5F
X18pOyBcCisgICAgICAgIGFzc2VydChmYWxzZSk7IFwKKyAgICAgICAgfSB3aGlsZSgwKQorI2Vs
c2UKKyAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6
ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisvLyBBIG1hY3Jv
IGZvciBjb2RlIHdoaWNoIGlzIG5vdCBleHBlY3RlZCB0byBiZSByZWFjaGVkIHVuZGVyIHZhbGlk
IGFzc3VtcHRpb25zCisjaWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBk
byB7IFwKKyAgICAgICAgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBf
X0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAg
ICAgIH0gd2hpbGUoMCkKKyNlbHNlCisgICAgI2RlZmluZSBVTlJFQUNIQUJMRSgpIEVSUigiXHQh
IFVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykK
KyNlbmRpZgorCisvLyBBIG1hY3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2Vy
dCB0byB2YWxpZGF0ZSBjb25zdGFudCBjb25kaXRpb25zCisjZGVmaW5lIE1FVEFfQVNTRVJUKGNv
bmRpdGlvbikgdHlwZWRlZiBpbnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRp
Y19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKworI2VuZGlmICAgLy8gQ09NTU9OX0RFQlVH
X0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNMVURFRF8KKyNkZWZpbmUg
X0JBU0lDVFlQRVNfSU5DTFVERURfCisKKy8vCisvLyBQcmVjaXNpb24gcXVhbGlmaWVycworLy8K
K2VudW0gVFByZWNpc2lvbgoreworICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUga2VwdCBzb3J0ZWQK
KyAgICBFYnBVbmRlZmluZWQsCisgICAgRWJwTG93LAorICAgIEVicE1lZGl1bSwKKyAgICBFYnBI
aWdoLAorfTsKKworX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5nKFRQcmVj
aXNpb24gcCkKK3sKKyAgICBzd2l0Y2gocCkKKyAgICB7CisgICAgY2FzZSBFYnBIaWdoOgkJcmV0
dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJCXJldHVybiAibWVkaXVt
cCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJCWJyZWFrOworICAg
IGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJh
Y2sKKyAgICB9Cit9CisKKy8vCisvLyBCYXNpYyB0eXBlLiAgQXJyYXlzLCB2ZWN0b3JzLCBldGMu
LCBhcmUgb3J0aG9nb25hbCB0byB0aGlzLgorLy8KK2VudW0gVEJhc2ljVHlwZQoreworICAgIEVi
dFZvaWQsCisgICAgRWJ0RmxvYXQsCisgICAgRWJ0SW50LAorICAgIEVidEJvb2wsCisgICAgRWJ0
R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJ
c1NhbXBsZXIoKQorICAgIEVidFNhbXBsZXIyRCwKKyAgICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBF
YnRHdWFyZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9m
IElzU2FtcGxlcigpCisgICAgRWJ0U3RydWN0LAorICAgIEVidEFkZHJlc3MsICAgICAgICAgICAg
Ly8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PworfTsKKworX19pbmxpbmUgYm9vbCBJc1NhbXBsZXIo
VEJhc2ljVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVn
aW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKK30KKworLy8KKy8vIFF1YWxpZmllcnMg
YW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUg
cmVhZAorLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xh
dG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCisvLyB0byBhbGxvY2F0ZSB2YXJpYWJsZXMgaW4u
ICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzCisvLyB0
aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUgcGVlcnMsIG5v
dCBzdWItY2xhc3Nlcy4KKy8vCitlbnVtIFRRdWFsaWZpZXIKK3sKKyAgICBFdnFUZW1wb3Jhcnks
ICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVhZC93cml0ZQor
ICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUKKyAgICBFdnFD
b25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24tb3V0cHV0IHBh
cmFtZXRlcnMgaW4gZnVuY3Rpb25zCisgICAgRXZxQXR0cmlidXRlLCAgICAgLy8gUmVhZG9ubHkK
KyAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5
CisgICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0
ZQorICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBmcmFnbWVudCBz
aGFkZXJzIG9ubHkKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0ZXggc2hh
ZGVycyBvbmx5ICByZWFkL3dyaXRlCisgICAgRXZxVW5pZm9ybSwgICAgICAgLy8gUmVhZG9ubHks
IHZlcnRleCBhbmQgZnJhZ21lbnQKKworICAgIC8vIHBhY2svdW5wYWNrIGlucHV0IGFuZCBvdXRw
dXQKKyAgICBFdnFJbnB1dCwKKyAgICBFdnFPdXRwdXQsCisKKyAgICAvLyBwYXJhbWV0ZXJzCisg
ICAgRXZxSW4sCisgICAgRXZxT3V0LAorICAgIEV2cUluT3V0LAorICAgIEV2cUNvbnN0UmVhZE9u
bHksCisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSB2ZXJ0ZXggc2hhZGVyCisgICAgRXZx
UG9zaXRpb24sCisgICAgRXZxUG9pbnRTaXplLAorCisgICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkg
ZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJhZ0Nvb3JkLAorICAgIEV2cUZyb250RmFjaW5nLAor
ICAgIEV2cVBvaW50Q29vcmQsCisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVu
dCBzaGFkZXIKKyAgICBFdnFGcmFnQ29sb3IsCisgICAgRXZxRnJhZ0RhdGEsCisKKyAgICAvLyBl
bmQgb2YgbGlzdAorICAgIEV2cUxhc3QsCit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IGZvciBk
ZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUu
CisvLworX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIg
cSkKK3sKKyAgICBzd2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFUZW1wb3Jhcnk6ICAgICAg
cmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxR2xvYmFsOiAgICAg
ICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNvbnN0OiAg
ICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25z
dFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsJYnJlYWs7CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOwlicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4g
InVuaWZvcm0iOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbjogICAgICAgICAgICAgcmV0
dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAg
IHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUluT3V0OiAgICAg
ICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnB1dDog
ICAgICAgICAgcmV0dXJuICJpbnB1dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxT3V0
cHV0OiAgICAgICAgIHJldHVybiAib3V0cHV0IjsgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cVBvc2l0aW9uOiAgICAgICByZXR1cm4gIlBvc2l0aW9uIjsgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFQb2ludFNpemU6ICAgICAgcmV0dXJuICJQb2ludFNpemUiOyAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAg
IGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBx
dWFsaWZpZXIiOworICAgIH0KK30KKworI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JHTFNM
LmgiCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRo
ZSBhY3R1YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJ
dCByZXR1cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitUQ29tcGlsZXIqIENv
bnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCit7Cisg
ICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yR0xTTChsYW5ndWFnZSwgc3BlYyk7Cit9CisKKy8vCisv
LyBEZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKKy8vCit2b2lk
IERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVsZXRlIGNvbXBp
bGVyOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkhMU0wuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmgiCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8g
Y3JlYXRlIHRoZSBhY3R1YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVs
IGNvZGUuICBJdCByZXR1cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitUQ29t
cGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNw
ZWMpCit7CisgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9ySExTTChsYW5ndWFnZSwgc3BlYyk7Cit9
CisKKy8vCisvLyBEZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIK
Ky8vCit2b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVs
ZXRlIGNvbXBpbGVyOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXworI2RlZmluZSBf
Q09NTU9OX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNzdHJlYW0+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNvbXBpbGVy
L1Bvb2xBbGxvYy5oIgorCit0eXBlZGVmIGludCBUU291cmNlTG9jOworY29uc3QgdW5zaWduZWQg
aW50IFNvdXJjZUxvY0xpbmVNYXNrID0gMHhmZmZmOworY29uc3QgdW5zaWduZWQgaW50IFNvdXJj
ZUxvY1N0cmluZ1NoaWZ0ID0gMTY7CisKKy8vCisvLyBQdXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSBpbiBiYXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVtZS4KKy8vCisj
ZGVmaW5lIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoQSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyByZXR1cm4g
KEEpLmFsbG9jYXRlKHMpOyB9ICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9ICAgICBcCisgICAgdm9pZCBv
cGVyYXRvciBkZWxldGUodm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7IH0gICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgcykg
eyByZXR1cm4gKEEpLmFsbG9jYXRlKHMpOyB9ICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3Ig
bmV3W10oc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9IFwKKyAgICB2
b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIHZvaWQgKikgeyB9
CisKKy8vCisvLyBQb29sIHZlcnNpb24gb2Ygc3RyaW5nLgorLy8KK3R5cGVkZWYgcG9vbF9hbGxv
Y2F0b3I8Y2hhcj4gVFN0cmluZ0FsbG9jYXRvcjsKK3R5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcg
PGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmc7
Cit0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRz
PGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOworaW5saW5lIFRTdHJpbmcq
IE5ld1Bvb2xUU3RyaW5nKGNvbnN0IGNoYXIqIHMpCit7CisJdm9pZCogbWVtb3J5ID0gR2xvYmFs
UG9vbEFsbG9jYXRvci5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOworCXJldHVybiBuZXcobWVt
b3J5KSBUU3RyaW5nKHMpOworfQorCisvLworLy8gUGVyc2lzdGVudCBzdHJpbmcgbWVtb3J5LiAg
U2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZpdmUKKy8vIGFjcm9zcyBj
b21waWxlcy4KKy8vCisjZGVmaW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6c3RyaW5nCisjZGVmaW5l
IFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQorCisvLworLy8gUG9vbCBh
bGxvY2F0b3IgdmVyc2lvbnMgb2YgdmVjdG9ycywgbGlzdHMsIGFuZCBtYXBzCisvLwordGVtcGxh
dGUgPGNsYXNzIFQ+IGNsYXNzIFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCwgcG9vbF9h
bGxvY2F0b3I8VD4gPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3Rv
cjxULCBwb29sX2FsbG9jYXRvcjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgIFRWZWN0
b3IoKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oKSB7fQorICAgIFRWZWN0
b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxv
Y2F0b3I8VD4gPihhKSB7fQorICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkpOiBzdGQ6OnZlY3RvcjxU
LCBwb29sX2FsbG9jYXRvcjxUPiA+KGkpIHt9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xh
c3MgRCwgY2xhc3MgQ01QID0gc3RkOjpsZXNzPEs+ID4gCitjbGFzcyBUTWFwIDogcHVibGljIHN0
ZDo6bWFwPEssIEQsIENNUCwgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4g
PiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3Qg
SywgRD4gPiB0QWxsb2NhdG9yOworCisgICAgVE1hcCgpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0
QWxsb2NhdG9yPigpIHt9CisgICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0YWdlIG5hbWUgbG9va3Vw
IHN1cHBvcnRlZCBpbiBnY2MgMy40IGFuZCBhYm92ZQorICAgIFRNYXAoY29uc3QgdEFsbG9jYXRv
ciYgYSkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENN
UCwgdEFsbG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9Cit9OworCit0eXBlZGVmIFRNYXA8
VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCisjZW5kaWYgLy8gX0NPTU1PTl9JTkNM
VURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjg4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05TVEFOVF9VTklPTl9J
TkNMVURFRF8KKyNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworCisjaW5jbHVkZSA8
YXNzZXJ0Lmg+CisKK2NsYXNzIENvbnN0YW50VW5pb24geworcHVibGljOgorCisgICAgUE9PTF9B
TExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKSAgICAgICAgCisgICAgdm9p
ZCBzZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9CisgICAgdm9p
ZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQorICAg
IHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CisK
KyAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNv
bnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBi
Q29uc3Q7IH0KKyAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9Cisg
ICAgZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBn
ZXRCQ29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29uc3Q7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpID09IGlDb25zdCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmID09IGZDb25zdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgYm9vbCBiKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGIgPT0gYkNvbnN0KQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChjb25zdGFudC50eXBlICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAg
ICAgaWYgKGNvbnN0YW50LmlDb25zdCA9PSBpQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAg
ICAgICAgICAgaWYgKGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3QpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEJvb2w6
CisgICAgICAgICAgICBpZiAoY29uc3RhbnQuYkNvbnN0ID09IGJDb25zdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlu
dCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBib29sIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAg
ICAgaWYgKGlDb25zdCA+IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgaWYgKGZDb25zdCA+IGNvbnN0YW50LmZDb25zdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50
eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAg
ICAgICAgICAgaWYgKGlDb25zdCA8IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgaWYgKGZDb25zdCA8IGNvbnN0YW50LmZDb25zdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKyhjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5mQ29u
c3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9
CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwor
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0
IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVy
blZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVu
aW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNvbnN0
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChm
Q29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBicmVhazsgCisgICAgICAgIGRlZmF1bHQ6IGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciUoY29u
c3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAg
ICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Cisg
ICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5p
Q29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJu
VmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25z
dChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAg
IENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAg
IGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29u
c3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2Ug
JiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3JeKGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5z
ZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBjb25zdGFudC5iQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENvbnN0YW50VW5pb24mIGNv
bnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7
CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3QoYkNv
bnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNz
ZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9Citwcml2YXRlOgorCisgICAgdW5pb24gIHsKKyAgICAgICAgaW50
IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIGJvb2wgYkNv
bnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKKyAgICAgICAgZmxvYXQgZkNvbnN0
OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCisgICAgfSA7CisKKyAgICBU
QmFzaWNUeXBlIHR5cGU7Cit9OworCisjZW5kaWYgLy8gX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVE
XwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0luZm9TaW5rLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK3ZvaWQg
VEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIG1lc3NhZ2UpIHsKKyAgICBzd2l0Y2go
bWVzc2FnZSkgeworICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRVByZWZpeFdhcm5pbmc6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgi
V0FSTklORzogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4RXJy
b3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6CisgICAgICAgICAgICBzaW5r
LmFwcGVuZCgiSU5URVJOQUwgRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRVByZWZpeFVuaW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5J
TVBMRU1FTlRFRDogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4
Tm90ZToKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBF
UlJPUjogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVEluZm9TaW5r
QmFzZTo6bG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpIHsKKyAgICBpbnQgc3RyaW5nID0gbG9jID4+
IFNvdXJjZUxvY1N0cmluZ1NoaWZ0OworICAgIGludCBsaW5lID0gbG9jICYgU291cmNlTG9jTGlu
ZU1hc2s7CisKKyAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgaWYgKGxpbmUp
CisgICAgICAgIHN0cmVhbSA8PCBzdHJpbmcgPDwgIjoiIDw8IGxpbmU7CisgICAgZWxzZQorICAg
ICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6PyAiOworICAgIHN0cmVhbSA8PCAiOiAiOworCisg
ICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKK30KKwordm9pZCBUSW5mb1NpbmtCYXNlOjpt
ZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpIHsKKyAgICBwcmVmaXgo
bWVzc2FnZSk7CisgICAgc2luay5hcHBlbmQocyk7CisgICAgc2luay5hcHBlbmQoIlxuIik7Cit9
CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25z
dCBjaGFyKiBzLCBUU291cmNlTG9jIGxvYykgeworICAgIHByZWZpeChtZXNzYWdlKTsKKyAgICBs
b2NhdGlvbihsb2MpOworICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBwZW5kKCJcbiIp
OworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvSW5mb1NpbmsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2RlZmluZSBfSU5G
T1NJTktfSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiY29tcGlsZXIv
Q29tbW9uLmgiCisKKy8vIFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZ2l2ZW4g
ZmxvYXRpbmctcG9pbnQgbnVtYmVyLgoraW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQYXJ0KGZsb2F0
IGYpIHsKKyAgZmxvYXQgaW50UGFydCA9IDAuMGY7CisgIHJldHVybiBtb2RmZihmLCAmaW50UGFy
dCk7Cit9CisKKy8vCisvLyBUUHJlZml4VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxpemUgaG93IGlu
Zm8gbG9nIG1lc3NhZ2VzIHN0YXJ0LgorLy8gU2VlIGJlbG93LgorLy8KK2VudW0gVFByZWZpeFR5
cGUgeworICAgIEVQcmVmaXhOb25lLAorICAgIEVQcmVmaXhXYXJuaW5nLAorICAgIEVQcmVmaXhF
cnJvciwKKyAgICBFUHJlZml4SW50ZXJuYWxFcnJvciwKKyAgICBFUHJlZml4VW5pbXBsZW1lbnRl
ZCwKKyAgICBFUHJlZml4Tm90ZQorfTsKKworLy8KKy8vIEVuY2Fwc3VsYXRlIGluZm8gbG9ncyBm
b3IgYWxsIG9iamVjdHMgdGhhdCBoYXZlIHRoZW0uCisvLworLy8gVGhlIG1ldGhvZHMgYXJlIGEg
Z2VuZXJhbCBzZXQgb2YgdG9vbHMgZm9yIGdldHRpbmcgYSB2YXJpZXR5IG9mCisvLyBtZXNzYWdl
cyBhbmQgdHlwZXMgaW5zZXJ0ZWQgaW50byB0aGUgbG9nLgorLy8KK2NsYXNzIFRJbmZvU2lua0Jh
c2UgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jhc2UoKSB7fQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUJiB0KSB7Cisg
ICAgICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8IHQ7
CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgLy8gT3ZlcnJpZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNpZmljIHR5cGVz
LiBJdCBpcyBmYXN0ZXIgdG8gYXBwZW5kIHN0cmluZ3MKKyAgICAvLyBhbmQgY2hhcmFjdGVycyBk
aXJlY3RseSB0byB0aGUgc2luay4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNoYXIg
YykgeworICAgICAgICBzaW5rLmFwcGVuZCgxLCBjKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cikgewor
ICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
ICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cikg
eworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFN0cmluZyYgc3RyKSB7Cisg
ICAgICAgIHNpbmsuYXBwZW5kKHN0ci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKyAgICAvLyBNYWtlIHN1cmUgZmxvYXRzIGFyZSB3cml0dGVuIHdpdGggY29ycmVjdCBw
cmVjaXNpb24uCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChmbG9hdCBmKSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50IGlzIHdyaXR0
ZW4uIElmIGEgbnVtYmVyCisgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBmcmFjdGlvbmFsIHBh
cnQsIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBmb3JtYXQgZG9lcworICAgICAgICAvLyBub3Qgd3Jp
dGUgdGhlIGRlY2ltYWwgcG9ydGlvbiB3aGljaCBnZXRzIGludGVycHJldGVkIGFzIGludGVnZXIg
YnkKKyAgICAgICAgLy8gdGhlIGNvbXBpbGVyLgorICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydChmKSA9PSAwLjBmKSB7CisgICAg
ICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDEpOworICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6
c2hvd3BvaW50IDw8IHN0ZDo6Zml4ZWQgPDwgZjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OmZpeGVkKTsKKyAgICAgICAgICAgIHN0cmVhbS51
bnNldGYoc3RkOjppb3M6OnNjaWVudGlmaWMpOworICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lv
big4KTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCBmOworICAgICAgICB9CisgICAgICAgIHNpbmsu
YXBwZW5kKHN0cmVhbS5zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
Ly8gV3JpdGUgYm9vbGVhbiB2YWx1ZXMgYXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ3Jh
bCB2YWx1ZS4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGJvb2wgYikgeworICAgICAg
ICBjb25zdCBjaGFyKiBzdHIgPSBiID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgc2luay5h
cHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQgZXJh
c2UoKSB7IHNpbmsuY2xlYXIoKTsgfQorCisgICAgY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cigp
IGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KKyAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0IHsg
cmV0dXJuIHNpbmsuY19zdHIoKTsgfQorCisgICAgdm9pZCBwcmVmaXgoVFByZWZpeFR5cGUgbWVz
c2FnZSk7CisgICAgdm9pZCBsb2NhdGlvbihUU291cmNlTG9jIGxvYyk7CisgICAgdm9pZCBtZXNz
YWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpOworICAgIHZvaWQgbWVzc2Fn
ZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzLCBUU291cmNlTG9jIGxvYyk7CisK
K3ByaXZhdGU6CisgICAgVFBlcnNpc3RTdHJpbmcgc2luazsKK307CisKK2NsYXNzIFRJbmZvU2lu
ayB7CitwdWJsaWM6CisgICAgVEluZm9TaW5rQmFzZSBpbmZvOworICAgIFRJbmZvU2lua0Jhc2Ug
ZGVidWc7CisgICAgVEluZm9TaW5rQmFzZSBvYmo7Cit9OworCisjZW5kaWYgLy8gX0lORk9TSU5L
X0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBDcmVhdGUgc3RyaW5ncyB0
aGF0IGRlY2xhcmUgYnVpbHQtaW4gZGVmaW5pdGlvbnMsIGFkZCBidWlsdC1pbnMgdGhhdAorLy8g
Y2Fubm90IGJlIGV4cHJlc3NlZCBpbiB0aGUgZmlsZXMsIGFuZCBlc3RhYmxpc2ggbWFwcGluZ3Mg
YmV0d2VlbiAKKy8vIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorCit2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZSgpCit7CisgICAgLy8KKyAg
ICAvLyBJbml0aWFsaXplIGFsbCB0aGUgYnVpbHQtaW4gc3RyaW5ncyBmb3IgcGFyc2luZy4KKyAg
ICAvLworICAgIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uczsKKyAgICBUU3RyaW5nIEJ1aWx0SW5G
dW5jdGlvbnNWZXJ0ZXg7CisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQ7Cisg
ICAgVFN0cmluZyBTdGFuZGFyZFVuaWZvcm1zOworICAgIFRTdHJpbmcgVmVydGV4RGVmYXVsdFBy
ZWNpc2lvbjsKKyAgICBUU3RyaW5nIEZyYWdtZW50RGVmYXVsdFByZWNpc2lvbjsKKworICAgIHsK
KyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFBy
b3RvdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IGJvdGggdmVydGV4IGFuZCBm
cmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uczsKKworICAgICAgICAv
LworICAgICAgICAvLyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAg
IC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJhZGlhbnMoZmxvYXQgZGVncmVl
cyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByYWRpYW5zKHZlYzIgIGRl
Z3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmFkaWFucyh2ZWMz
ICBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJhZGlhbnMo
dmVjNCAgZGVncmVlcyk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRl
Z3JlZXMoZmxvYXQgcmFkaWFucyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBkZWdyZWVzKHZlYzIgIHJhZGlhbnMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgZGVncmVlcyh2ZWMzICByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIGRlZ3JlZXModmVjNCAgcmFkaWFucyk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IHNpbihmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBzaW4odmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgc2luKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHNpbih2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IGNvcyhmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBjb3ModmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgY29zKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIGNvcyh2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IHRhbihmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICB0YW4odmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
dGFuKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHRh
bih2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFz
aW4oZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhc2luKHZl
YzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXNpbih2ZWMzICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFzaW4odmVjNCAgeCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFjb3MoZmxvYXQgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhY29zKHZlYzIgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWNvcyh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgIGFjb3ModmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQgeSwgZmxvYXQgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhdGFuKHZlYzIgIHksIHZlYzIgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXRhbih2ZWMzICB5LCB2ZWMzICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGF0YW4odmVjNCAgeSwgdmVjNCAgeCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQgeV9vdmVyX3gp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2ZWMyICB5X292ZXJf
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhdGFuKHZlYzMgIHlfb3Zl
cl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGF0YW4odmVjNCAgeV9v
dmVyX3gpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBFeHBvbmVudGlhbCBGdW5jdGlv
bnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHBvdyhmbG9h
dCB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHBvdyh2
ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHBv
dyh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
IHBvdyh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgZXhwKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
ZXhwKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZXhwKHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZXhwKHZlYzQgIHgp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsb2coZmxvYXQgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBsb2codmVjMiAgeCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBsb2codmVjMyAgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2codmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImZsb2F0IGV4cDIoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBleHAyKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyAgZXhwMih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIGV4cDIodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IGxvZzIoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBsb2cy
KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbG9nMih2ZWMz
ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGxvZzIodmVjNCAgeCk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNxcnQoZmxvYXQgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzcXJ0KHZlYzIgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc3FydCh2ZWMzICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNxcnQodmVjNCAgeCk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGludmVyc2VzcXJ0KGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgaW52ZXJzZXNxcnQodmVjMiAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBpbnZlcnNlc3FydCh2ZWMzICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGludmVyc2VzcXJ0KHZlYzQgIHgpOyIpKTsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBDb21tb24gRnVuY3Rpb25zLgorICAgICAgICAvLworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhYnMoZmxvYXQgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhYnModmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMzICBhYnModmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBhYnModmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IHNpZ24oZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBzaWduKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc2ln
bih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNpZ24odmVj
NCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGZsb29yKGZsb2F0
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZmxvb3IodmVjMiAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmbG9vcih2ZWMzICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGZsb29yKHZlYzQgIHgpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBjZWlsKGZsb2F0IHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2VpbCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIGNlaWwodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0ICBjZWlsKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBmcmFjdChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIGZyYWN0KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgZnJhY3QodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBmcmFjdCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
bW9kKGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgbW9kKHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgbW9kKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCAgbW9kKHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgbW9kKHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgbW9kKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgbW9kKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtaW4oZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAgeCwgZmxvYXQgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVjNCAgeCwgZmxvYXQgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgdmVjMiAgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAgeCwgdmVjMyAg
eSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVjNCAgeCwgdmVj
NCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1heChmbG9hdCB4
LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1heCh2ZWMy
ICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1heCh2
ZWMzICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1h
eCh2ZWM0ICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIg
IG1heCh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIG1heCh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIG1heCh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgY2xhbXAoZmxvYXQgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2xhbXAodmVjMiAgeCwgZmxvYXQg
bWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgY2xhbXAodmVjMyAgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2xhbXAodmVjNCAgeCwgZmxvYXQgbWluVmFsLCBm
bG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2xhbXAo
dmVjMiAgeCwgdmVjMiAgbWluVmFsLCB2ZWMyICBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgY2xhbXAodmVjMyAgeCwgdmVjMyAgbWluVmFsLCB2ZWMzICBtYXhW
YWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2xhbXAodmVjNCAgeCwg
dmVjNCAgbWluVmFsLCB2ZWM0ICBtYXhWYWwpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBtaXgoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgZmxvYXQgYSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaXgodmVjMyAgeCwgdmVjMyAgeSwg
ZmxvYXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaXgodmVjNCAg
eCwgdmVjNCAgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgdmVjMiAgYSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBtaXgodmVjMyAgeCwgdmVjMyAgeSwgdmVjMyAgYSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaXgodmVjNCAgeCwgdmVjNCAgeSwgdmVjNCAgYSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHN0ZXAoZmxvYXQgZWRnZSwg
ZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzdGVwKHZlYzIg
IGVkZ2UsIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc3Rl
cCh2ZWMzICBlZGdlLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIHN0ZXAodmVjNCAgZWRnZSwgdmVjNCAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgc3RlcChmbG9hdCBlZGdlLCB2ZWMzICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjNCAgeCk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNtb290aHN0ZXAoZmxvYXQgZWRnZTAs
IGZsb2F0IGVkZ2UxLCBmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIHNtb290aHN0ZXAodmVjMiAgZWRnZTAsIHZlYzIgIGVkZ2UxLCB2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNtb290aHN0ZXAodmVjMyAgZWRnZTAsIHZl
YzMgIGVkZ2UxLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
IHNtb290aHN0ZXAodmVjNCAgZWRnZTAsIHZlYzQgIGVkZ2UxLCB2ZWM0ICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0
IGVkZ2UxLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNt
b290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWMzICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVk
Z2UxLCB2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2VvbWV0cmljIEZ1
bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVu
Z3RoKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3Ro
KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZlYzQg
IHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZShmbG9h
dCBwMCwgZmxvYXQgcDEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlz
dGFuY2UodmVjMiAgcDAsIHZlYzIgIHAxKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGRpc3RhbmNlKHZlYzMgIHAwLCB2ZWMzICBwMSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWM0ICBwMCwgdmVjNCAgcDEpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QoZmxvYXQgeCwgZmxvYXQgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMiAgeCwgdmVjMiAgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMyAgeCwgdmVjMyAgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjNCAgeCwgdmVjNCAg
eSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgY3Jvc3ModmVjMyB4LCB2
ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9ybWFsaXplKGZs
b2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbm9ybWFsaXplKHZl
YzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbm9ybWFsaXplKHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbm9ybWFsaXplKHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmYWNlZm9yd2Fy
ZChmbG9hdCBOLCBmbG9hdCBJLCBmbG9hdCBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIGZhY2Vmb3J3YXJkKHZlYzIgIE4sIHZlYzIgIEksIHZlYzIgIE5yZWYpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZmFjZWZvcndhcmQodmVjMyAgTiwg
dmVjMyAgSSwgdmVjMyAgTnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBmYWNlZm9yd2FyZCh2ZWM0ICBOLCB2ZWM0ICBJLCB2ZWM0ICBOcmVmKTsiKSk7CisKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgcmVmbGVjdChmbG9hdCBJLCBmbG9hdCBOKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJlZmxlY3QodmVjMiAgSSwgdmVjMiAg
Tik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICByZWZsZWN0KHZlYzMgIEks
IHZlYzMgIE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmVmbGVjdCh2
ZWM0ICBJLCB2ZWM0ICBOKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
cmVmcmFjdChmbG9hdCBJLCBmbG9hdCBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgcmVmcmFjdCh2ZWMyICBJLCB2ZWMyICBOLCBmbG9hdCBldGEpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmVmcmFjdCh2ZWMzICBJLCB2ZWMz
ICBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmVm
cmFjdCh2ZWM0ICBJLCB2ZWM0ICBOLCBmbG9hdCBldGEpOyIpKTsKKworICAgICAgICAvLworICAg
ICAgICAvLyBNYXRyaXggRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJtYXQyIG1hdHJpeENvbXBNdWx0KG1hdDIgeCwgbWF0MiB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoIm1hdDMgbWF0cml4Q29tcE11bHQobWF0MyB4LCBtYXQzIHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygibWF0NCBtYXRyaXhDb21wTXVsdChtYXQ0IHgs
IG1hdDQgeSk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFZlY3RvciByZWxhdGlvbmFs
IGZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIg
bGVzc1RoYW4odmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
YnZlYzMgbGVzc1RoYW4odmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzQgbGVzc1RoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbihpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4oaXZlYzQgeCwgaXZl
YzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuRXF1
YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMg
bGVzc1RoYW5FcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjNCBsZXNzVGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW5FcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwoaXZlYzMg
eCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhh
bkVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMiBncmVhdGVyVGhhbih2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbih2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbih2ZWM0IHgsIHZlYzQgeSk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuKGl2ZWMyIHgs
IGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRo
YW4oaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
NCBncmVhdGVyVGhhbihpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW5FcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbkVxdWFsKHZlYzMgeCwgdmVj
MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1
YWwodmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
MiBncmVhdGVyVGhhbkVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW5FcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzQg
eCwgaXZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFs
KHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGVx
dWFsKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0
IGVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
YnZlYzIgZXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMyBlcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWM0IGVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbChidmVjMiB4LCBidmVjMiB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGVxdWFsKGJ2ZWMzIHgsIGJ2ZWMzIHkpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFsKHZlYzIgeCwg
dmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKHZl
YzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVx
dWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzIgbm90RXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMyBub3RFcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbChidmVjMiB4LCBidmVjMiB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKGJ2ZWMzIHgsIGJ2
ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90RXF1YWwoYnZl
YzQgeCwgYnZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYW55
KGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbnkoYnZlYzMg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVjNCB4KTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzIgeCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVjMyB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWM0IHgpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMiBub3QoYnZlYzIgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMyBub3QoYnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjNCBub3QoYnZlYzQgeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFRleHR1cmUg
RnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRl
eHR1cmUyRChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMiBjb29yZCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMg
Y29vcmQpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3Jk
KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm9pc2UgZnVuY3Rpb25zLgorICAgICAg
ICAvLworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMShmbG9hdCB4KTsiKSk7
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzIgIHgpOyIpKTsKKyAg
ICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVjMyAgeCk7IikpOworICAgIC8v
CXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMihmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjMiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgbm9pc2UyKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyIG5vaXNlMih2ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzIG5vaXNlMyhmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBu
b2lzZTModmVjMiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2Uz
KHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNlMyh2ZWM0
ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNChmbG9hdCB4
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjMiAgeCk7Iikp
OworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzMgIHgpOyIpKTsKKyAg
ICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWM0ICB4KTsiKSk7CisKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlwZXMgZm9yIGJ1
aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IHZlcnRleCBzaGFkZXJzIG9ubHkuCisgICAgICAgIC8v
CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBC
dWlsdEluRnVuY3Rpb25zVmVydGV4OworCisgICAgICAgIC8vCisgICAgICAgIC8vIEdlb21ldHJp
YyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
ZnRyYW5zZm9ybSgpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBUZXh0dXJlIEZ1bmN0
aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJl
MkRMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNh
bXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQs
IGZsb2F0IGxvZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVy
ZUN1YmVMb2Qoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgbG9kKTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlw
ZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IGZyYWdtZW50IHNoYWRlcnMgb25seS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0
cmluZyYgcyA9IEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudDsKKworICAgICAgICAvLworICAgICAg
ICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0
IGJpYXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwg
dmVjNCBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgdGV4dHVyZUN1YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQg
Ymlhcyk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeChmbG9hdCBw
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeCh2ZWMyICBwKTsiKSk7
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZEZkeCh2ZWMzICBwKTsiKSk7CisgICAg
Ly8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZEZkeCh2ZWM0ICBwKTsiKSk7CisKKyAgICAvLwlz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkRmR5KGZsb2F0IHApOyIpKTsKKyAgICAvLwlzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyICBkRmR5KHZlYzIgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMzICBkRmR5KHZlYzMgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBkRmR5KHZlYzQgIHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBmd2lkdGgoZmxvYXQgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBm
d2lkdGgodmVjMiAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmd2lk
dGgodmVjMyAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmd2lkdGgo
dmVjNCAgcCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0K
KyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAg
ICAvLyBTdGFuZGFyZCBVbmlmb3JtcworICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gU3RhbmRhcmRVbmlmb3JtczsKKworICAg
ICAgICAvLworICAgICAgICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cgY29vcmRpbmF0ZXMKKyAg
ICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygic3RydWN0IGdsX0RlcHRoUmFuZ2VQ
YXJhbWV0ZXJzIHsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9h
dCBuZWFyOyIpKTsgICAgICAgIC8vIG4KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiICAgIGhp
Z2hwIGZsb2F0IGZhcjsiKSk7ICAgICAgICAgLy8gZgorICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCIgICAgaGlnaHAgZmxvYXQgZGlmZjsiKSk7ICAgICAgICAvLyBmIC0gbgorICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ9OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidW5pZm9ybSBn
bF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVmYXVsdCBwcmVjaXNpb24gZm9yIHZl
cnRleCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KworICAgICAgICBUU3RyaW5nJiBzID0gVmVydGV4RGVmYXVsdFByZWNpc2lvbjsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gaGlnaHAgaW50OyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygicHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmcmFn
bWVudCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KyAgICAgICAgCisgICAgICAgIFRTdHJpbmcmIHMgPSBGcmFnbWVudERlZmF1bHRQcmVjaXNpb247
CisgICAgICAgIAorICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gbWVkaXVtcCBp
bnQ7IikpOworICAgICAgICAvLyBObyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgaW4gZnJh
Z21lbnQgc2hhZGVycworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisK
KyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhGcmFnbWVudERl
ZmF1bHRQcmVjaXNpb24pOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVz
aF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnMuY19zdHIoKSk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNo
TGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50KTsKKyAgICBi
dWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhTdGFuZGFyZFVuaWZvcm1z
KTsKKyAgICAKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soVmVy
dGV4RGVmYXVsdFByZWNpc2lvbik7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0u
cHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnMpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdW
ZXJ0ZXhdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zVmVydGV4KTsKKyAgICBidWlsdEluU3Ry
aW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jtcyk7Cit9CisKK3Zv
aWQgVEJ1aWx0SW5zOjppbml0aWFsaXplKGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgJnJlc291cmNl
cykKK3sKKyAgICBUU3RyaW5nU3RyZWFtIGJ1aWx0SW5zOworCisgICAgLy8gSW1wbGVtZW50YXRp
b24gZGVwZW5kZW50IGNvbnN0YW50cworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4
VmVydGV4QXR0cmlicyA9ICIgPDwgcmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPDwgIjsiOwor
ICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAi
IDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisKKyAgICBidWls
dElucyA8PCAiY29uc3QgaW50IGdsX01heFZhcnlpbmdWZWN0b3JzID0gIiA8PCByZXNvdXJjZXMu
bWF4VmFyeWluZ1ZlY3RvcnMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xf
TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhU
ZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzIDw8
ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsK
KyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNv
dXJjZXMubWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFu
Z0ZyYWdtZW50XS5wdXNoX2JhY2soYnVpbHRJbnMuc3RyKCkpOworICAgIGJ1aWx0SW5TdHJpbmdz
W0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhidWlsdElucy5zdHIoKSk7Cit9CisKK3ZvaWQgSWRl
bnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSkKK3sKKyAgICAvLworICAgIC8vIEZpcnN0LCBpbnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0
LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW4gCisgICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRl
ciBmaWxlcy4KKyAgICAvLworICAgIHN3aXRjaChsYW5ndWFnZSkgeworCisgICAgY2FzZSBFU2hM
YW5nRnJhZ21lbnQ6IHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9G
cm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0
cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBF
YnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwg
IDIpKSk7CisKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVNoTGFuZ1Zl
cnRleDoKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9z
aXRpb24sICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1l
ZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTmV4dCwgaWRlbnRpZnkgd2hpY2ggYnVp
bHQtaW5zIGZyb20gdGhlIGFscmVhZHkgbG9hZGVkIGhlYWRlcnMgaGF2ZQorICAgIC8vIGEgbWFw
cGluZyB0byBhbiBvcGVyYXRvci4gIFRob3NlIHRoYXQgYXJlIG5vdCBpZGVudGlmaWVkIGFzIHN1
Y2ggYXJlCisgICAgLy8gZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkg
b2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKKyAgICAvLyBvcGVyYXRpb25zLgorICAgIC8vCisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgICAgIEVPcFZlY3Rv
ckxvZ2ljYWxOb3QpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF0cml4
Q29tcE11bHQiLCAgIEVPcE11bCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJlcXVhbCIsICAgICAgICAgICAgRU9wVmVjdG9yRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW4iLCAgICAgICAgIEVPcExl
c3NUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbiIs
ICAgICAgRU9wR3JlYXRlclRoYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Imxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbkVxdWFsIiwgRU9wR3JlYXRlclRoYW5FcXVhbCk7
CisgICAgCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmFkaWFucyIsICAgICAg
RU9wUmFkaWFucyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGVncmVlcyIs
ICAgICAgRU9wRGVncmVlcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic2lu
IiwgICAgICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJj
b3MiLCAgICAgICAgICBFT3BDb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
InRhbiIsICAgICAgICAgIEVPcFRhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiYXNpbiIsICAgICAgICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiYWNvcyIsICAgICAgICAgRU9wQWNvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiYXRhbiIsICAgICAgICAgRU9wQXRhbik7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAgICAgIEVPcEV4cDIpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAgICAgICAgIEVPcExvZyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cyIiwgICAgICAgICBFT3BMb2cyKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzcXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3Fy
dCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAgICBF
T3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAgICAg
IEVPcFNpZ24pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwgICAg
ICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWlsIiwg
ICAgICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmcmFj
dCIsICAgICAgICBFT3BGcmFjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJtaW4iLCAgICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZW5ndGgiLCAgICAgICBFT3BMZW5ndGgpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRpc3RhbmNlIiwgICAgIEVPcERpc3RhbmNl
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkb3QiLCAgICAgICAgICBFT3BE
b3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNyb3NzIiwgICAgICAgIEVP
cENyb3NzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3JtYWxpemUiLCAg
ICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZhY2Vm
b3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJyZWZsZWN0IiwgICAgICBFT3BSZWZsZWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKKyAgICAKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7CisKKyAgICBz
d2l0Y2gobGFuZ3VhZ2UpCisgICAgeworICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6CisgICAgLy8Jc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZEZkeCIsICAgICAgICAgRU9wRFBkeCk7ICAgICAvLyBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZEZkeSIsICAgICAgICAgRU9wRFBkeSk7ICAgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgZXh0ZW5zaW9uCisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZndp
ZHRoIiwgICAgICAgRU9wRndpZHRoKTsgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0
ZW5zaW9uCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFu
Z3VhZ2Ugbm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5z
KEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBU
QnVpbHRJblJlc291cmNlICZyZXNvdXJjZXMpCit7CisgICAgLy8KKyAgICAvLyBGaXJzdCwgaW5z
ZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAorICAg
IC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0Y2gobGFuZ3Vh
Z2UpIHsKKworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAgICAvLyBTZXQg
dXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KKyAgICAgICAgICAgIFRUeXBlIGZyYWdE
YXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0LCBmYWxzZSwgdHJ1ZSk7
CisgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLm1heERyYXdCdWZm
ZXJzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKworY29uc3QgY2hh
ciogR2V0UHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZygpCit7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIgKlByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmcgPSAiIjsKKworICAgIHJldHVybiBQcmVwcm9j
ZXNzb3JCdWlsdGluU3RyaW5nOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5JVElBTEla
RV9JTkNMVURFRF8KKyNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNpbmNsdWRlICJH
TFNMQU5HL1Jlc291cmNlTGltaXRzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIK
KyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJv
bFRhYmxlLmgiCisKK3R5cGVkZWYgVFZlY3RvcjxUU3RyaW5nPiBUQnVpbHRJblN0cmluZ3M7CisK
K2NsYXNzIFRCdWlsdElucyB7CitwdWJsaWM6CisJUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShH
bG9iYWxQb29sQWxsb2NhdG9yKQorCXZvaWQgaW5pdGlhbGl6ZSgpOworCXZvaWQgaW5pdGlhbGl6
ZShjb25zdCBUQnVpbHRJblJlc291cmNlJiByZXNvdXJjZXMpOworCVRCdWlsdEluU3RyaW5ncyog
Z2V0QnVpbHRJblN0cmluZ3MoKSB7IHJldHVybiBidWlsdEluU3RyaW5nczsgfQorcHJvdGVjdGVk
OgorCVRCdWlsdEluU3RyaW5ncyBidWlsdEluU3RyaW5nc1tFU2hMYW5nQ291bnRdOworfTsKKwor
dm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlLCBUU3ltYm9sVGFibGUmKTsKK3ZvaWQg
SWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiwgY29uc3QgVEJ1aWx0
SW5SZXNvdXJjZSAmcmVzb3VyY2VzKTsKK2Jvb2wgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUo
Y29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLCBUSW5mb1NpbmsmLCBUU3ltYm9sVGFi
bGUqLCBFU2hMYW5ndWFnZSBsYW5ndWFnZSA9IEVTaExhbmdDb3VudCk7Citib29sIEluaXRpYWxp
emVTeW1ib2xUYWJsZShUQnVpbHRJblN0cmluZ3MqIEJ1aWx0SW5TdHJpbmdzLCBFU2hMYW5ndWFn
ZSBsYW5ndWFnZSwgVEluZm9TaW5rJiBpbmZvU2luaywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAq
cmVzb3VyY2VzLCBUU3ltYm9sVGFibGUqKTsKK2NvbnN0IGNoYXIqIEdldFByZXByb2Nlc3NvckJ1
aWx0aW5TdHJpbmcoKTsKK2V4dGVybiAiQyIgaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Citl
eHRlcm4gIkMiIGludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKKworI2VuZGlmIC8vIF9J
TklUSUFMSVpFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVE
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNw
cAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCitPU19UTFNJbmRleCBU
aHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0
UHJvY2VzcygpCit7CisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCAhPSBPU19JTlZBTElE
X1RMU19JTkRFWCkgeworCQkvLworCQkvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50LgorCQkvLwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKwl9CisKKyAgICBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBP
U19BbGxvY1RMU0luZGV4KCk7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2Vzcygp
OiBGYWlsZWQgdG8gYWxsb2NhdGUgVExTIGFyZWEgZm9yIGluaXQgZmxhZyIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisJfQorCisKKyAgICBpZiAoIUluaXRpYWxpemVQb29sSW5kZXgoKSkgewor
ICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBn
bG9iYWwgcG9vbCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgaWYgKCFJbml0
aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKSkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFBy
b2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwl9CisKKwlJbml0VGhyZWFkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KworYm9vbCBJbml0VGhyZWFkKCkKK3sKKwkvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUt
ZW50cmFudAorCS8vCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElE
X1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBQcm9jZXNzIGhhc24n
dCBiZWVuIGluaXRhbGlzZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICBp
ZiAoT1NfR2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworCUluaXRpYWxpemVHbG9iYWxQb29scygpOworCisJaWYgKCFJbml0aWFs
aXplR2xvYmFsUGFyc2VDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghT1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTEpKSB7CisJ
CWFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9v
bCBEZXRhY2hUaHJlYWQoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAo
VGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworCS8vCisJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBhbmQgdGhpcyB0
aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KKwkvLworICAgIGlmIChPU19HZXRU
TFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApIHsKKyAgICAgICAgaWYgKCFPU19T
ZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMCkpIHsKKwkJCWFzc2Vy
dCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxhZy4iKTsKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCisJCUZyZWVHbG9iYWxQb29scygpOwor
CisJCWlmICghRnJlZVBhcnNlQ29udGV4dCgpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworCX0KKworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIERldGFjaFByb2Nlc3MoKQor
eworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUlu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IFNoRmluYWxpemUoKTsKKworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsKKworCUZyZWVQ
b29sSW5kZXgoKTsKKworCWlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCisgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKworICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJbml0aWFsaXplSW5k
ZXgpOworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwor
CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxs
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBf
X0lOSVRJQUxJWkVETExfSAorI2RlZmluZSBfX0lOSVRJQUxJWkVETExfSAorCisKKyNpbmNsdWRl
ICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworCitib29sIEluaXRQcm9jZXNzKCk7Citib29sIElu
aXRUaHJlYWQoKTsKK2Jvb2wgRGV0YWNoVGhyZWFkKCk7Citib29sIERldGFjaFByb2Nlc3MoKTsK
KworI2VuZGlmIC8vIF9fSU5JVElBTElaRURMTF9ICisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplR2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVHbG9iYWxzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCisjZGVm
aW5lIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXworCit2b2lkIEluaXRpYWxpemVHbG9i
YWxQb29scygpOwordm9pZCBGcmVlR2xvYmFsUG9vbHMoKTsKK2Jvb2wgSW5pdGlhbGl6ZVBvb2xJ
bmRleCgpOwordm9pZCBGcmVlUG9vbEluZGV4KCk7CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVf
R0xPQkFMU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFy
c2VDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURf
CisjZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXworI2luY2x1ZGUg
ImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCitib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRl
eCgpOworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJz
ZUNvbnRleHQoKTsKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7CisKKworI2VuZGlmIC8v
IF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTMgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8K
Ky8vIFRyYXZlcnNlIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCisv
LyBjYWxsIGEgbm9kZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCisvLyBE
b25lIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgor
Ly8gTm9kZSB0eXBlcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlz
IDAsCisvLyBidXQgdGhlaXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KKy8vIE5v
ZGVzIHdpdGggY2hpbGRyZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCisv
LyBpZiBwcmVWaXNpdCBpcyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9u
CisvLyByZXR1cm5zIGZhbHNlLgorLy8KKy8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdo
dFRvTGVmdCBjb250cm9sIHdoYXQgb3JkZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgorLy8K
KworLy8KKy8vIFRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZv
cndhcmQuLi4uCisvLwordm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVy
c2VyKiBpdCkKK3sKKwlpdC0+dmlzaXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQgVEludGVybUNv
bnN0YW50VW5pb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWl0LT52aXNp
dENvbnN0YW50VW5pb24odGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2Rl
LgorLy8KK3ZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQp
Cit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwkvLworCS8vIHZpc2l0IHRoZSBub2RlIGJlZm9y
ZSBjaGlsZHJlbiBpZiBwcmUtdmlzaXRpbmcuCisJLy8KKwlpZihpdC0+cHJlVmlzaXQpCisJewor
CQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCS8vCisJ
Ly8gVmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCisJLy8KKwlpZih2aXNp
dCkKKwl7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCisJCWlmKGl0LT5yaWdodFRvTGVmdCkg
CisJCXsKKwkJCWlmKHJpZ2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2ZXJzZShpdCk7CisJCQl9
CisJCQkKKwkJCWlmKGl0LT5pblZpc2l0KQorCQkJeworCQkJCXZpc2l0ID0gaXQtPnZpc2l0Qmlu
YXJ5KEluVmlzaXQsIHRoaXMpOworCQkJfQorCisJCQlpZih2aXNpdCAmJiBsZWZ0KQorCQkJewor
CQkJCWxlZnQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKGxl
ZnQpCisJCQl7CisJCQkJbGVmdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQkJCisJCQlpZihpdC0+
aW5WaXNpdCkKKwkJCXsKKwkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlz
KTsKKwkJCX0KKworCQkJaWYodmlzaXQgJiYgcmlnaHQpCisJCQl7CisJCQkJcmlnaHQtPnRyYXZl
cnNlKGl0KTsKKwkJCX0KKwkJfQorCisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCS8v
CisJLy8gVmlzaXQgdGhlIG5vZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5k
IHRoZSB0cmF2ZXJzYWwKKwkvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgorCS8vCisJaWYo
dmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdEJpbmFyeShQb3N0VmlzaXQs
IHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNlIGEgdW5hcnkgbm9kZS4gIFNhbWUgY29t
bWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1VbmFyeTo6
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisK
KwlpZiAoaXQtPnByZVZpc2l0KQorCQl2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0
aGlzKTsKKworCWlmICh2aXNpdCkgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJb3BlcmFu
ZC0+dHJhdmVyc2UoaXQpOworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisJCisJaWYgKHZp
c2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJCWl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7
Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMg
aW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCQor
CWlmKGl0LT5wcmVWaXNpdCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKFByZVZp
c2l0LCB0aGlzKTsKKwl9CisJCisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgo
KTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpCisJCXsKKwkJCWZvcihUSW50ZXJtU2VxdWVuY2U6
OnJldmVyc2VfaXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5j
ZS5yZW5kKCk7IHNpdCsrKQorCQkJeworCQkJCSgqc2l0KS0+dHJhdmVyc2UoaXQpOworCisJCQkJ
aWYodmlzaXQgJiYgaXQtPmluVmlzaXQpCisJCQkJeworCQkJCQlpZigqc2l0ICE9IHNlcXVlbmNl
LmZyb250KCkpCisJCQkJCXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlz
aXQsIHRoaXMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZm9y
KFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9
IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZlcnNlKGl0KTsK
KworCQkJCWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYoKnNpdCAhPSBz
ZXF1ZW5jZS5iYWNrKCkpCisJCQkJCXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRl
KEluVmlzaXQsIHRoaXMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCQorCQlpdC0+ZGVj
cmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCXsKKwkJ
aXQtPnZpc2l0QWdncmVnYXRlKFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisvLworLy8gVHJh
dmVyc2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBw
bHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkK
KwkJdmlzaXQgPSBpdC0+dmlzaXRTZWxlY3Rpb24oUHJlVmlzaXQsIHRoaXMpOworCQorCWlmICh2
aXNpdCkgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJaWYgKGl0LT5yaWdodFRvTGVmdCkg
eworCQkJaWYgKGZhbHNlQmxvY2spCisJCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOworCQkJ
aWYgKHRydWVCbG9jaykKKwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWNvbmRpdGlv
bi0+dHJhdmVyc2UoaXQpOworCQl9IGVsc2UgeworCQkJY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7
CisJCQlpZiAodHJ1ZUJsb2NrKQorCQkJCXRydWVCbG9jay0+dHJhdmVyc2UoaXQpOworCQkJaWYg
KGZhbHNlQmxvY2spCisJCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOworCQl9CisJCWl0LT5k
ZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlp
dC0+dmlzaXRTZWxlY3Rpb24oUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNl
IGEgbG9vcCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgor
Ly8KK3ZvaWQgVEludGVybUxvb3A6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQorewor
CWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJdmlzaXQgPSBp
dC0+dmlzaXRMb29wKFByZVZpc2l0LCB0aGlzKTsKKwl9CisJCisJaWYodmlzaXQpCisJeworCQlp
dC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpCisJCXsKKwkJCWlm
KHRlcm1pbmFsKQorCQkJeworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJCQl9CisKKwkJ
CWlmKGJvZHkpCisJCQl7CisJCQkJYm9keS0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJCQlpZih0
ZXN0KQorCQkJeworCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJ
CXsKKwkJCWlmKHRlc3QpCisJCQl7CisJCQkJdGVzdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJ
CQlpZihib2R5KQorCQkJeworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYo
dGVybWluYWwpCisJCQl7CisJCQkJdGVybWluYWwtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQor
CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmKHZpc2l0ICYmIGl0LT5wb3N0Vmlz
aXQpCisJeworCQlpdC0+dmlzaXRMb29wKFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisvLwor
Ly8gVHJhdmVyc2UgYSBicmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUg
YXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkK
KwkJdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworCQorCWlmICh2aXNp
dCAmJiBleHByZXNzaW9uKSB7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCQlleHByZXNzaW9u
LT50cmF2ZXJzZShpdCk7CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmICh2aXNp
dCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRCcmFuY2goUG9zdFZpc2l0LCB0aGlzKTsK
K30KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1
ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIK
KyNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1JlbW92ZVRyZWUuaCIKKworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0
Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiog
bGVmdFVuaW9uQXJyYXkpOworCitUUHJlY2lzaW9uIEdldEhpZ2hlc3RQcmVjaXNpb24oIFRQcmVj
aXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCApeworICAgIHJldHVybiBsZWZ0ID4gcmlnaHQg
PyBsZWZ0IDogcmlnaHQ7Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRmlyc3Qgc2V0
IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2Vu
dGF0aW9uLgorLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0
aGUgbm9kZXMuCisvLyBUaGV5IGFyZSBjYWxsZWQgZnJvbSBwYXJzZXIgcHJvZHVjdGlvbnMuCisv
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIEFkZCBhIHRlcm1pbmFsIG5vZGUgZm9y
IGFuIGlkZW50aWZpZXIgaW4gYW4gZXhwcmVzc2lvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRl
ZCBub2RlLgorLy8KK1RJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbChpbnQg
aWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGNvbnN0IFRUeXBlJiB0eXBlLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBu
YW1lLCB0eXBlKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRv
ZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBSZXR1cm5zIHRoZSBh
ZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwg
VFNvdXJjZUxvYyBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIHN3aXRj
aCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbjoKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmlzTWF0
cml4KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNW
ZWN0b3IoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNh
bFhvcjoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKGxlZnQt
PmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IGxlZnQtPmdldFR5cGUoKS5p
c01hdHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0VHlwZSgp
LmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2FzZSBF
T3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAg
ICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8
IGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5
cGVzLgorICAgIC8vCisKKyAgICBpZiAoIShsZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkgJiYg
cmlnaHQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkpIHsKKyAgICAgICAgVEludGVybVR5cGVkKiBj
aGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgICAg
ICBpZiAoY2hpbGQpCisgICAgICAgICAgICByaWdodCA9IGNoaWxkOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgcmlnaHQtPmdldFR5cGUoKSwg
bGVmdCk7CisgICAgICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICAgICAgbGVmdCA9IGNo
aWxkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+
Z2V0VHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisKKyAgICAvLworICAg
IC8vIE5lZWQgYSBuZXcgbm9kZSBob2xkaW5nIHRoaW5ncyB0b2dldGhlciB0aGVuLiAgTWFrZQor
ICAgIC8vIG9uZSBhbmQgcHJvbW90ZSBpdCB0byB0aGUgcmlnaHQgdHlwZS4KKyAgICAvLworICAg
IFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgaWYgKGxp
bmUgPT0gMCkKKyAgICAgICAgbGluZSA9IHJpZ2h0LT5nZXRMaW5lKCk7CisgICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKKworICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9kZS0+c2V0Umln
aHQocmlnaHQpOworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0g
bGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnJp
Z2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYg
KGxlZnRUZW1wQ29uc3RhbnQpCisgICAgICAgIGxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKworICAgIGlmIChyaWdodFRlbXBDb25zdGFudCkKKyAgICAgICAg
cmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAv
LworICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8KKworICAgIFRJ
bnRlcm1UeXBlZCogdHlwZWRSZXR1cm5Ob2RlID0gMDsKKyAgICBpZiAoIGxlZnRUZW1wQ29uc3Rh
bnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKKyAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVm
dFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5m
b1NpbmspOworCisgICAgICAgIGlmICh0eXBlZFJldHVybk5vZGUpCisgICAgICAgICAgICByZXR1
cm4gdHlwZWRSZXR1cm5Ob2RlOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLwor
Ly8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50LgorLy8KKy8vIFJldHVy
bnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRB
c3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmln
aHQsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICAvLworICAgIC8vIExpa2UgYWRkaW5nIGJpbmFy
eSBtYXRoLCBleGNlcHQgdGhlIGNvbnZlcnNpb24gY2FuIG9ubHkgZ28KKyAgICAvLyBmcm9tIHJp
Z2h0IHRvIGxlZnQuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRl
cm1CaW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSBsZWZ0LT5n
ZXRMaW5lKCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIFRJbnRlcm1UeXBlZCog
Y2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKKyAgICBp
ZiAoY2hpbGQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxl
ZnQpOworICAgIG5vZGUtPnNldFJpZ2h0KGNoaWxkKTsKKyAgICBpZiAoISBub2RlLT5wcm9tb3Rl
KGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKwor
Ly8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gaW5kZXggb3BlcmF0b3IsIHdoZXJl
IHRoZSBsZWZ0IG5vZGUgaXMgdGhlIGJhc2UKKy8vIG9mIGFuIGFycmF5IG9yIHN0cnVjdCwgYW5k
IHRoZSByaWdodCBub2RlIGlzIGEgZGlyZWN0IG9yIGluZGlyZWN0IG9mZnNldC4KKy8vCisvLyBS
ZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8gVGhlIGNhbGxlciBzaG91bGQgc2V0IHRoZSB0eXBl
IG9mIHRoZSByZXR1cm5lZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6
YWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1UeXBlZCog
aW5kZXgsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3
IFRJbnRlcm1CaW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSBp
bmRleC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0
TGVmdChiYXNlKTsKKyAgICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAvLyBjYWxsZXIg
c2hvdWxkIHNldCB0aGUgdHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQg
b25lIG5vZGUgYXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCisv
LworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUs
IFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICBUSW50
ZXJtVW5hcnkqIG5vZGU7CisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGNoaWxkTm9kZS0+Z2V0
QXNUeXBlZCgpOworCisgICAgaWYgKGNoaWxkID09IDApIHsKKyAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHR5cGUgaW4gQWRkVW5hcnlNYXRo
IiwgbGluZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzTWF0
cml4KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5p
c1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6
CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0IHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IERvIHdlIG5lZWQgdG8gcHJvbW90ZSB0aGUgb3BlcmFuZD8KKyAgICAvLworICAgIC8vIE5vdGU6
IEltcGxpY2l0IHByb21vdGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgorICAg
IC8vCisgICAgVEJhc2ljVHlwZSBuZXdUeXBlID0gRWJ0Vm9pZDsKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG5ld1R5cGUgPSBFYnRJbnQ7ICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG5ld1R5cGUgPSBFYnRCb29sOyAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG5ld1R5cGUgPSBFYnRGbG9h
dDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIGlmIChuZXdU
eXBlICE9IEVidFZvaWQpIHsKKyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBUVHlw
ZShuZXdUeXBlLCBjaGlsZC0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwKKyAgICAgICAg
ICAgIGNoaWxkLT5nZXROb21pbmFsU2l6ZSgpLAorICAgICAgICAgICAgY2hpbGQtPmlzTWF0cml4
KCksCisgICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKKyAgICAgICAgICAgIGNoaWxkKTsK
KyAgICAgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHdlIGFyZSBub3cgZG9uZSwgaXQncyBh
bGwgaW4gdGhlIGNvbnZlcnNpb24uCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7
CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIFRJbnRlcm1Db25zdGFudFVu
aW9uICpjaGlsZFRlbXBDb25zdGFudCA9IDA7CisgICAgaWYgKGNoaWxkLT5nZXRBc0NvbnN0YW50
VW5pb24oKSkKKyAgICAgICAgY2hpbGRUZW1wQ29uc3RhbnQgPSBjaGlsZC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CisKKyAgICAvLworICAgIC8vIE1ha2UgYSBuZXcgbm9kZSBmb3IgdGhlIG9wZXJh
dG9yLgorICAgIC8vCisgICAgbm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkob3ApOworICAgIGlmIChs
aW5lID09IDApCisgICAgICAgIGxpbmUgPSBjaGlsZC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNl
dExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0T3BlcmFuZChjaGlsZCk7CisKKyAgICBpZiAoISBu
b2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoY2hp
bGRUZW1wQ29uc3RhbnQpICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbmV3Q2hpbGQgPSBjaGls
ZFRlbXBDb25zdGFudC0+Zm9sZChvcCwgMCwgaW5mb1NpbmspOworCisgICAgICAgIGlmIChuZXdD
aGlsZCkKKyAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4g
bm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMgdGhlIHNhZmUgd2F5IHRvIGNoYW5nZSB0aGUgb3Bl
cmF0b3Igb24gYW4gYWdncmVnYXRlLCBhcyBpdAorLy8gZG9lcyBsb3RzIG9mIGVycm9yIGNoZWNr
aW5nIGFuZCBmaXhpbmcuICBFc3BlY2lhbGx5IGZvciBlc3RhYmxpc2hpbmcKKy8vIGEgZnVuY3Rp
b24gY2FsbCdzIG9wZXJhdGlvbiBvbiBpdCdzIHNldCBvZiBwYXJhbWV0ZXJzLiAgU2VxdWVuY2Vz
CisvLyBvZiBpbnN0cnVjdGlvbnMgYXJlIGFsc28gYWdncmVnYXRlcywgYnV0IHRoZXkganVzdCBk
aXJlbmN0bHkgc2V0CisvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KKy8vCisvLyBS
ZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBp
biBpZgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8KK1RJbnRlcm1BZ2dyZWdh
dGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2Rl
LCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQWdncmVnYXRl
KiBhZ2dOb2RlOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhZ2dyZWdh
dGUuICBJZiBub3QgdHVybiBpdCBpbnRvIG9uZS4KKyAgICAvLworICAgIGlmIChub2RlKSB7Cisg
ICAgICAgIGFnZ05vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICBpZiAoYWdn
Tm9kZSA9PSAwIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIE1ha2UgYW4gYWdncmVnYXRlIGNvbnRhaW5pbmcgdGhpcyBub2Rl
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3Jl
Z2F0ZSgpOworICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobm9k
ZSk7CisgICAgICAgICAgICBpZiAobGluZSA9PSAwKQorICAgICAgICAgICAgICAgIGxpbmUgPSBu
b2RlLT5nZXRMaW5lKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYWdnTm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgb3BlcmF0
b3IuCisgICAgLy8KKyAgICBhZ2dOb2RlLT5zZXRPcGVyYXRvcihvcCk7CisgICAgaWYgKGxpbmUg
IT0gMCkKKyAgICAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBhZ2dO
b2RlOworfQorCisvLworLy8gQ29udmVydCBvbmUgdHlwZSB0byBhbm90aGVyLgorLy8KKy8vIFJl
dHVybnMgdGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uLCB3aGljaCBjb3VsZCBi
ZSB0aGUgc2FtZQorLy8gbm9kZSBwYXNzZWQgaW4gaWYgbm8gY29udmVyc2lvbiB3YXMgbmVlZGVk
LgorLy8KKy8vIFJldHVybiAwIGlmIGEgY29udmVyc2lvbiBjYW4ndCBiZSBkb25lLgorLy8KK1RJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2lvbihUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlJiB0eXBlLCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgLy8KKyAgICAvLyBE
b2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9uPworICAgIC8vCisgICAgc3dpdGNoIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vCisg
ICAgLy8gT3RoZXJ3aXNlLCBpZiB0eXBlcyBhcmUgaWRlbnRpY2FsLCBubyBwcm9ibGVtCisgICAg
Ly8KKyAgICBpZiAodHlwZSA9PSBub2RlLT5nZXRUeXBlKCkpCisgICAgICAgIHJldHVybiBub2Rl
OworCisgICAgLy8KKyAgICAvLyBJZiBvbmUncyBhIHN0cnVjdHVyZSwgdGhlbiBubyBjb252ZXJz
aW9ucy4KKyAgICAvLworICAgIGlmICh0eXBlLmdldFN0cnVjdCgpIHx8IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLworICAgIC8vIElmIG9u
ZSdzIGFuIGFycmF5LCB0aGVuIG5vIGNvbnZlcnNpb25zLgorICAgIC8vCisgICAgaWYgKHR5cGUu
aXNBcnJheSgpIHx8IG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgVEJhc2ljVHlwZSBwcm9tb3RlVG87CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIEV4cGxpY2l0IGNvbnZlcnNpb25zCisgICAgICAgIC8vCisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEJv
b2w7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoK
KyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEZsb2F0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0
SW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVkIGZyb20g
dGhlIGxhbmd1YWdlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpICE9IG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaXplIGFuZCBz
dHJ1Y3R1cmUgY291bGQgc3RpbGwgZGlmZmVyLCBidXQgdGhhdCdzCisgICAgICAgICAgICAvLyBo
YW5kbGVkIGJ5IG9wZXJhdG9yIHByb21vdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkpIHsKKworICAgICAgICByZXR1cm4gKHByb21vdGVDb25zdGFudFVuaW9uKHByb21vdGVUbywg
bm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpKTsKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8v
CisgICAgICAgIC8vIEFkZCBhIG5ldyBuZXdOb2RlIGZvciB0aGUgY29udmVyc2lvbi4KKyAgICAg
ICAgLy8KKyAgICAgICAgVEludGVybVVuYXJ5KiBuZXdOb2RlID0gMDsKKworICAgICAgICBUT3Bl
cmF0b3IgbmV3T3AgPSBFT3BOdWxsOworICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgeworICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09w
ID0gRU9wQ29udkludFRvRmxvYXQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiAgbmV3T3AgPSBFT3BDb252Qm9vbFRvRmxvYXQ7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRvQm9vbDsg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3AgPSBFT3BD
b252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0ludDsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQgcHJvbW90aW9u
IG5vZGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsICJCYWQgcHJvbW90aW9uIHR5cGUiLCBub2RlLT5nZXRMaW5lKCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgVFR5cGUgdHlw
ZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdl
dE5vbWluYWxTaXplKCksIG5vZGUtPmlzTWF0cml4KCksIG5vZGUtPmlzQXJyYXkoKSk7CisgICAg
ICAgIG5ld05vZGUgPSBuZXcgVEludGVybVVuYXJ5KG5ld09wLCB0eXBlKTsKKyAgICAgICAgbmV3
Tm9kZS0+c2V0TGluZShub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBuZXdOb2RlLT5zZXRPcGVy
YW5kKG5vZGUpOworCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KK30KKworLy8KKy8v
IFNhZmUgd2F5IHRvIGNvbWJpbmUgdHdvIG5vZGVzIGludG8gYW4gYWdncmVnYXRlLiAgV29ya3Mg
d2l0aCBudWxsIHBvaW50ZXJzLAorLy8gYSBub2RlIHRoYXQncyBub3QgYSBhZ2dyZWdhdGUgeWV0
LCBldGMuCisvLworLy8gUmV0dXJucyB0aGUgcmVzdWx0aW5nIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAg
d2FzIHBhc3NlZCBpbiBmb3IKKy8vIGJvdGggZXhpc3Rpbmcgbm9kZXMuCisvLworVEludGVybUFn
Z3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6Z3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwg
VEludGVybU5vZGUqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKGxlZnQgPT0g
MCAmJiByaWdodCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ05vZGUgPSAwOworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2RlID0gbGVmdC0+
Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAh
PSBFT3BOdWxsKSB7CisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hf
YmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFnZ05vZGUtPmdl
dFNlcXVlbmNlKCkucHVzaF9iYWNrKHJpZ2h0KTsKKworICAgIGlmIChsaW5lICE9IDApCisgICAg
ICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKwor
Ly8KKy8vIFR1cm4gYW4gZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4KKy8vCisvLyBS
ZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0
aW5nIG5vZGUuCisvLworVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZ3Jl
Z2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChub2Rl
ID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9k
ZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVz
aF9iYWNrKG5vZGUpOworCisgICAgaWYgKGxpbmUgIT0gMCkKKyAgICAgICAgYWdnTm9kZS0+c2V0
TGluZShsaW5lKTsKKyAgICBlbHNlCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobm9kZS0+Z2V0
TGluZSgpKTsKKworICAgIHJldHVybiBhZ2dOb2RlOworfQorCisvLworLy8gRm9yICJpZiIgdGVz
dCBub2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCisvLyBhIHRy
dWUgcGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIGluIHRoZQorLy8g
bm9kZVBhaXIuCisvLworLy8gUmV0dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3JlYXRlZC4KKy8v
CitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCog
Y29uZCwgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAg
Ly8KKyAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMsIHBydW5lIHRo
ZSBjb2RlIGFuZAorICAgIC8vIHRlc3Qgbm93LgorICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0
QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsK
KyAgICAgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGVQYWlyLm5vZGUxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIu
bm9kZTI7CisgICAgfQorCisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJt
U2VsZWN0aW9uKGNvbmQsIG5vZGVQYWlyLm5vZGUxLCBub2RlUGFpci5ub2RlMik7CisgICAgbm9k
ZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisKK1RJbnRlcm1UeXBl
ZCogVEludGVybWVkaWF0ZTo6YWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlw
ZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
cigpID09IEV2cUNvbnN0KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0
LCByaWdodCwgbGluZSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5zZXRPcGVyYXRvcihFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBl
KHJpZ2h0LT5nZXRUeXBlKCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50
ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiBjb21t
YUFnZ3JlZ2F0ZTsKKyAgICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhl
cmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQg
YSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBhcyBzZXBhcmF0
ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQs
IG9yIDAgaWYgb25lIGNvdWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJs
b2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICAv
LworICAgIC8vIEdldCBjb21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisgICAgVEludGVybVR5cGVk
KiBjaGlsZCA9IGFkZENvbnZlcnNpb24oRU9wU2VxdWVuY2UsIHRydWVCbG9jay0+Z2V0VHlwZSgp
LCBmYWxzZUJsb2NrKTsKKyAgICBpZiAoY2hpbGQpCisgICAgICAgIGZhbHNlQmxvY2sgPSBjaGls
ZDsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNl
LCBmYWxzZUJsb2NrLT5nZXRUeXBlKCksIHRydWVCbG9jayk7CisgICAgICAgIGlmIChjaGlsZCkK
KyAgICAgICAgICAgIHRydWVCbG9jayA9IGNoaWxkOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNlZSBpZiBhbGwgdGhlIG9wZXJh
bmRzIGFyZSBjb25zdGFudCwgdGhlbiBmb2xkIGl0IG90aGVyd2lzZSBub3QuCisgICAgLy8KKwor
ICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiB0cnVlQmxvY2stPmdldEFzQ29u
c3RhbnRVbmlvbigpICYmIGZhbHNlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisgICAg
ICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0QkNvbnN0KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZUJsb2NrOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2VCbG9jazsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIE1ha2UgYSBzZWxlY3Rpb24gbm9kZS4KKyAgICAvLworICAgIFRJbnRlcm1TZWxlY3Rpb24q
IG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCB0cnVlQmxvY2ssIGZhbHNlQmxvY2ss
IHRydWVCbG9jay0+Z2V0VHlwZSgpKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAg
cmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25zdGFudCB0ZXJtaW5hbCBub2Rlcy4gIEhhcyBh
IHVuaW9uIHRoYXQgY29udGFpbnMgYm9vbCwgZmxvYXQgb3IgaW50IGNvbnN0YW50cworLy8KKy8v
IFJldHVybnMgdGhlIGNvbnN0YW50IHVuaW9uIG5vZGUgY3JlYXRlZC4KKy8vCisKK1RJbnRlcm1D
b25zdGFudFVuaW9uKiBUSW50ZXJtZWRpYXRlOjphZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5p
b24qIHVuaW9uQXJyYXlQb2ludGVyLCBjb25zdCBUVHlwZSYgdCwgVFNvdXJjZUxvYyBsaW5lKQor
eworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHVuaW9uQXJyYXlQb2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dp
enpsZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRTb3VyY2VMb2MgbGluZSkKK3sKKworICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7
CisKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBj
b25zdEludE5vZGU7CisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CisgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIHVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZp
ZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgY29uc3RJbnROb2RlID0gYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBsaW5l
KTsKKyAgICAgICAgc2VxdWVuY2VWZWN0b3IucHVzaF9iYWNrKGNvbnN0SW50Tm9kZSk7CisgICAg
fQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDcmVhdGUgbG9vcCBub2Rlcy4KKy8v
CitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkTG9vcChUSW50ZXJtTm9kZSAqaW5pdCwg
VEludGVybU5vZGUqIGJvZHksIFRJbnRlcm1UeXBlZCogdGVzdCwgVEludGVybVR5cGVkKiB0ZXJt
aW5hbCwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtTm9k
ZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9vcChpbml0LCBib2R5LCB0ZXN0LCB0ZXJtaW5hbCwgdGVz
dEZpcnN0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9
CisKKy8vCisvLyBBZGQgYnJhbmNoZXMuCisvLworVEludGVybUJyYW5jaCogVEludGVybWVkaWF0
ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IHJldHVybiBhZGRCcmFuY2goYnJhbmNoT3AsIDAsIGxpbmUpOworfQorCitUSW50ZXJtQnJhbmNo
KiBUSW50ZXJtZWRpYXRlOjphZGRCcmFuY2goVE9wZXJhdG9yIGJyYW5jaE9wLCBUSW50ZXJtVHlw
ZWQqIGV4cHJlc3Npb24sIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQnJhbmNoKiBu
b2RlID0gbmV3IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOworICAgIG5vZGUt
PnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMg
dG8gYmUgZXhlY3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBw
YXJzaW5nCisvLyBwcm9jZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3Mo
VEludGVybU5vZGUqIHJvb3QsIEVTaExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGlmIChyb290
ID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgZmlu
aXNoIG9mZiB0aGUgdG9wIGxldmVsIHNlcXVlbmNlLCBpZiBhbnkKKyAgICAvLworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ1Jvb3QgPSByb290LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmIChh
Z2dSb290ICYmIGFnZ1Jvb3QtPmdldE9wKCkgPT0gRU9wTnVsbCkKKyAgICAgICAgYWdnUm9vdC0+
c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisv
LyBUaGlzIGRlbGV0ZXMgdGhlIHRyZWUuCisvLwordm9pZCBUSW50ZXJtZWRpYXRlOjpyZW1vdmUo
VEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QpCisgICAgICAgIFJlbW92ZUFsbFRy
ZWVOb2Rlcyhyb290KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1lbWJlciBmdW5jdGlvbnMgb2Yg
dGhlIG5vZGVzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSB0cmVlLgorLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8K
Ky8vIFNheSB3aGV0aGVyIG9yIG5vdCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1
ZSBvZiBhIHZhcmlhYmxlLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiBzdGF0ZSBpcyBtb2RpZmll
ZC4KKy8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6bW9kaWZpZXNTdGF0ZSgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Cisg
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAg
ICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyByZXR1cm5zIHRydWUgaWYgdGhlIG9wZXJhdG9yIGlz
IGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycworLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjpp
c0NvbnN0cnVjdG9yKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50Ogor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorLy8KKy8vIE1ha2Ugc3VyZSB0aGUgdHlwZSBvZiBhIHVuYXJ5IG9w
ZXJhdG9yIGlzIGFwcHJvcHJpYXRlIGZvciBpdHMKKy8vIGNvbWJpbmF0aW9uIG9mIG9wZXJhdGlv
biBhbmQgb3BlcmFuZCB0eXBlLgorLy8KKy8vIFJldHVybnMgZmFsc2UgaW4gbm90aGluZyBtYWtl
cyBzZW5zZS4KKy8vCitib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgorICAgICAgICAg
ICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTmVn
YXRpdmU6CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQ
b3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2Fz
ZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgLy8gb3BlcmF0b3JzIGZvciBidWlsdC1pbnMgYXJlIGFs
cmVhZHkgdHlwZSBjaGVja2VkIGFnYWluc3QgdGhlaXIgcHJvdG90eXBlCisgICAgICAgIGNhc2Ug
RU9wQW55OgorICAgICAgICBjYXNlIEVPcEFsbDoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dp
Y2FsTm90OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc2V0VHlwZShvcGVyYW5kLT5n
ZXRUeXBlKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBFc3RhYmxpc2hlcyB0
aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcworLy8gbWFrZXMg
dGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgorLy8KKy8vIFJl
dHVybnMgZmFsc2UgaWYgb3BlcmF0b3IgY2FuJ3Qgd29yayBvbiBvcGVyYW5kcy4KKy8vCitib29s
IFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICBpbnQg
c2l6ZSA9IGxlZnQtPmdldE5vbWluYWxTaXplKCk7CisgICAgaWYgKHJpZ2h0LT5nZXROb21pbmFs
U2l6ZSgpID4gc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpOwor
CisgICAgVEJhc2ljVHlwZSB0eXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7CisKKyAgICAvLwor
ICAgIC8vIEFycmF5cyBoYXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCisgICAgLy8KKyAgICBpZiAo
KGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSAmJiAobGVmdC0+Z2V0VHlwZSgp
ICE9IHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLwor
ICAgIC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3QgbWFrZSB0aGUgdHlwZSB0aGUgc2FtZSBhcyB0
aGUgbGVmdAorICAgIC8vIG9wZXJhbmQuICBUaGVuIG9ubHkgZGV2aWF0aW9ucyBmcm9tIHRoaXMg
bmVlZCBiZSBjb2RlZC4KKyAgICAvLworICAgIHNldFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKKwor
ICAgIFRQcmVjaXNpb24gaGlnaGVzdFByZWNpc2lvbiA9IEdldEhpZ2hlc3RQcmVjaXNpb24obGVm
dC0+Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7CisgICAgZ2V0VHlwZVBv
aW50ZXIoKS0+Y2hhbmdlUHJlY2lzaW9uKGhpZ2hlc3RQcmVjaXNpb24pOworCisgICAgLy8KKyAg
ICAvLyBBcnJheSBvcGVyYXRpb25zLgorICAgIC8vCisgICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkg
eworCisgICAgICAgIHN3aXRjaCAob3ApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBj
YXNlIEVPcEVxdWFsOgorICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IGFycmF5IGlu
Zm9ybWF0aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wQXNzaWduOgor
ICAgICAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgICAgIGdldFR5cGVQ
b2ludGVyKCktPnNldEFycmF5U2l6ZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpOwor
ICAgICAgICAgICAgICAgIGdldFR5cGVQb2ludGVyKCktPnNldEFycmF5SW5mb3JtYXRpb25UeXBl
KGxlZnQtPmdldFR5cGUoKS5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICAvLworICAgIC8vIEFsbCBzY2FsYXJzLiAgQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0
aGlzIGNhc2UgaXMgcmVtb3ZlZCEKKyAgICAvLworICAgIGlmIChzaXplID09IDEpIHsKKworICAg
ICAgICBzd2l0Y2ggKG9wKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBQcm9t
b3RlIHRvIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BF
cXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOgorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5F
cXVhbDoKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gQW5kIGFuZCBPciBvcGVyYXRlIG9uIGNvbmRpdGlvbmFscworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAgIGNhc2UgRU9wTG9n
aWNhbE9yOgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRC
b29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgaGF2ZSBtYXRjaGluZyB0
eXBlcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSB8fAor
ICAgICAgICAgICAgICAgICAgICBsZWZ0LT5pc01hdHJpeCgpICAgICAhPSByaWdodC0+aXNNYXRy
aXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBcmUgdGhlIHNpemVz
IGNvbXBhdGlibGU/CisgICAgLy8KKyAgICBpZiAoIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0g
c2l6ZSAmJiAgbGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxIHx8CisgICAgICAgIHJpZ2h0LT5n
ZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgcmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBDYW4gdGhlc2UgdHdvIG9w
ZXJhbmRzIGJlIGNvbWJpbmVkPworICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIEVPcE11bDoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+
aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4OworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFy
OworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNp
b24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAg
c2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OworICAgICAgICAgICAgfSBl
bHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyOworICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2
cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgIk1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgo
KSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4QXNz
aWduOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5p
c01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChy
aWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAg
ICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOworICAgICAgICAgICAgfSBl
bHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoISBsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2Up
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1pc3Npbmcg
ZWxzZXMiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAg
ICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldE5vbWlu
YWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIGNhc2UgRU9w
QWRkOgorICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAg
IGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAg
Y2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNWZWN0b3IoKSB8fAorICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzTWF0cml4KCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUo
KSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNh
c2UgRU9wTm90RXF1YWw6CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1ZlY3Rv
cigpICYmIHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+Z2V0QmFz
aWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gT25lIG1vcmUgY2hlY2sgZm9y
IGFzc2lnbm1lbnQuICBUaGUgUmVzdWx0aW5nIHR5cGUgaGFzIHRvIG1hdGNoIHRoZSBsZWZ0IG9w
ZXJhbmQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQXNzaWdu
OgorICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246
CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGdldFR5cGUoKSAh
PSBsZWZ0LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb21wYXJlU3RydWN0KGNvbnN0IFRUeXBl
JiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRV
bmlvbiogbGVmdFVuaW9uQXJyYXkpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSBsZWZ0Tm9k
ZVR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICBzaXplX3Qgc3RydWN0U2l6ZSA9IGZpZWxkcy0+c2l6
ZSgpOworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0
cnVjdFNpemU7IGorKykgeworICAgICAgICBpbnQgc2l6ZSA9ICgqZmllbGRzKVtqXS50eXBlLT5n
ZXRPYmplY3RTaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoKCpmaWVsZHMpW2pdLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKCpmaWVs
ZHMpW2pdLnR5cGUsICZyaWdodFVuaW9uQXJyYXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJyYXlbaW5k
ZXhdKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9IHJpZ2h0
VW5pb25BcnJheVtpbmRleF0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlw
ZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50
VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgp
KSB7CisgICAgICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOwor
ICAgICAgICB0eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOworCisgICAgICAg
IGludCBhcnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7CisKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAgICAgaW50IG9m
ZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7CisgICAgICAg
ICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZyaWdodFVuaW9u
QXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gQ29t
cGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVuaW9uQXJyYXkp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGUgZm9sZCBmdW5jdGlvbnMgc2Vl
IGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBsYWNlLAorLy8g
d2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCisvLworLy8gUmV0dXJucyB0aGUgbm9k
ZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9kZSBwYXNzZWQg
aW4uCisvLworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpmb2xkKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYgaW5mb1Npbmsp
Cit7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CisgICAgaW50IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisg
ICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29uc3RhbnRVbmlv
bigpOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0gZ2V0VHlwZSgp
OworCisgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsgdmVjNCgyLDMs
NCw1KTsKKyAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAgICAgICByaWdodFVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJh
eVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJu
VHlwZSA9IGdldFR5cGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5vZGUtPmdldFR5
cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgeworICAgICAgICAg
ICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4yOworICAg
ICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKV07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBvYmplY3RTaXpl
ID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisK
KyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOworICAgICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7CisKKyAgICAgICAgYm9vbCBib29sTm9kZUZsYWcg
PSBmYWxzZTsKKyAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICBjYXNlIEVPcEFkZDoK
KyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJpZ2h0
VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTXVsOgor
ICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9y
dCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01h
dHJpeDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVi
dEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNv
bnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0aXBseSIsIGdldExp
bmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAg
ICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4r
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBj
b2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFy
cmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1u
ICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
T3BEaXY6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmIChyaWdo
dFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcg
Y29uc3RhbnQgZm9sZGluZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5W2ldLnNldEZDb25zdChGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJy
YXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHplcm8g
ZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElD
b25zdCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElD
b25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiLCBnZXRMaW5lKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9y
IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bZ2V0Tm9taW5hbFNpemUoKV07CisKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXpl
KCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29u
c3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9u
QXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBub2RlLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5v
dCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4IiwgZ2V0TGluZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsK
KyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3Qo
MC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7
IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNvbnN0KCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBF
T3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJl
IHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0
dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAg
ICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtpXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5
W2ldLnNldEJDb25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFs
c2UgOiB0cnVlKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYg
IkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExlc3NU
aGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9u
QXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUg
PT0gMSk7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFy
cmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5n
ZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNp
emUgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdo
dFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0
QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
blR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNl
IEVPcEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVy
ZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJy
YXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9u
QXJyYXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBu
ZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGlu
ZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAg
ICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChD
b21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiSW52YWxpZCBvcGVyYXRvciBmb3Ig
Y29uc3RhbnQgZm9sZGluZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24o
dGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOworICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShn
ZXRMaW5lKCkpOworCisgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLworICAgICAgICAvLyBEbyB1bmFyeSBvcGVyYXRpb25zCisgICAgICAgIC8vCisgICAg
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpuZXdOb2RlID0gMDsKKyAgICAgICAgQ29uc3RhbnRV
bmlvbiogdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAg
IHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29u
c3QoLXVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCgtdW5pb25B
cnJheVtpXS5nZXRJQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNv
bnN0YW50IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVu
IGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0ZW1wQ29uc3RBcnJheVtp
XS5zZXRCQ29uc3QoIXVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9u
IG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3Tm9k
ZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsK
KyAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworICAgICAgICByZXR1cm4gbmV3
Tm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKK30KKworVEludGVybVR5cGVkKiBUSW50
ZXJtZWRpYXRlOjpwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVElu
dGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlv
bkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBpbnQgc2l6ZSA9IG5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25zdGFudFVuaW9uICpsZWZ0
VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworCisgICAgZm9yIChpbnQgaT0w
OyBpIDwgc2l6ZTsgaSsrKSB7CisKKyAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKKyAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChz
dGF0aWNfY2FzdDxmbG9hdD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEJDb25zdCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRV
bmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDYW5ub3QgcHJvbW90ZSIsIG5vZGUtPmdl
dExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNf
Y2FzdDxpbnQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGlj
X2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
QkNvbnN0KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAhPSAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0uc2V0QkNvbnN0KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSAhPSAwLjBmKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkluY29ycmVjdCBkYXRh
IHR5cGUgZm91bmQiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5
cGUoKTsKKworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlw
ZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9t
aW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7
Cit9CisKK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6YWRkVG9QcmFnbWFUYWJsZShjb25zdCBUUHJh
Z21hVGFibGUmIHBUYWJsZSkKK3sKKyAgICBhc3NlcnQoIXByYWdtYVRhYmxlKTsKKyAgICBwcmFn
bWFUYWJsZSA9IG5ldyBUUHJhZ21hVGFibGUoKTsKKyAgICAqcHJhZ21hVGFibGUgPSBwVGFibGU7
Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9NTWFwLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
TU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIF9NTUFQX0lOQ0xVREVEXworI2RlZmluZSBfTU1BUF9JTkNMVURFRF8KKworLy8K
Ky8vIEVuY2Fwc3VsYXRlIG1lbW9yeSBtYXBwZWQgZmlsZXMKKy8vCisKK2NsYXNzIFRNTWFwIHsK
K3B1YmxpYzoKKyAgICBUTU1hcChjb25zdCBjaGFyKiBmaWxlTmFtZSkgOiAKKyAgICAgICAgZlNp
emUoLTEpLCAvLyAtMSBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgR2V0RmlsZVNpemUo
KQorICAgICAgICBmcChOVUxMKSwKKyAgICAgICAgZkJ1ZmYoMCkgICAvLyAwIGlzIHRoZSBlcnJv
ciB2YWx1ZSByZXR1cm5lZCBieSBNYXBWaWV3T2ZGaWxlKCkKKyAgICB7CisgICAgICAgIGlmICgo
ZnAgPSBmb3BlbihmaWxlTmFtZSwgInIiKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2hhciBjID0gZ2V0YyhmcCk7CisgICAgICAgIGZTaXplID0gMDsKKyAgICAgICAg
d2hpbGUgKGMgIT0gRU9GKSB7CisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAgICAgICAgYyA9
IGdldGMoZnApOworICAgICAgICB9CisgICAgICAgIGlmIChjID09IEVPRikKKyAgICAgICAgICAg
IGZTaXplKys7CisgICAgICAgIHJld2luZChmcCk7CisgICAgICAgIGZCdWZmID0gKGNoYXIqKW1h
bGxvYyhzaXplb2YoY2hhcikgKiBmU2l6ZSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAg
ICAgIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7CisgICAgICAgICAg
ICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAg
IH0KKyAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBjOworICAgIH0KKworICAgIGNoYXIqIGdldERh
dGEoKSB7IHJldHVybiBmQnVmZjsgfQorICAgIGludCAgIGdldFNpemUoKSB7IHJldHVybiBmU2l6
ZTsgfQorCisgICAgflRNTWFwKCkgeworICAgICAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAg
ICAgIGZjbG9zZShmcCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgICAgICAgICAg
ICAgZlNpemU7ICAgICAgLy8gc2l6ZSBvZiBmaWxlIHRvIG1hcCBpbgorICAgIEZJTEUgKmZwOwor
ICAgIGNoYXIqICAgICAgICAgICBmQnVmZjsgICAgICAvLyB0aGUgYWN0dWFsIGRhdGE7Cit9Owor
CisjZW5kaWYgLy8gX01NQVBfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wu
Y3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgor
CituYW1lc3BhY2UKK3sKK1RTdHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpCit7
CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7
CisgICAgICAgIG91dCA8PCAibWF0IjsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiBvdXQg
PDwgImJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAg
fQorICAgIHJldHVybiBUU3RyaW5nKG91dC5jX3N0cigpKTsKK30KKworVFN0cmluZyBhcnJheUJy
YWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7
CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgb3V0IDw8ICJbIiA8PCB0eXBlLmdldEFycmF5
U2l6ZSgpIDw8ICJdIjsKKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Cit9CisKK2Jv
b2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBpZiAoY29uc3Qg
VEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1bmN0aW9uKSAm
JgorICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5jZSk7Cisg
ICAgfQorICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5v
ZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpKQorICAgIHsKKyAgICAgICAgLy8gVGVybmFyeSBvcGVy
YXRvcnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAg
ICAvLyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5IGFyZSBhbGwg
YnkgdGhlbXNlbHZlcy4KKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rlcm5hcnlPcGVy
YXRvcigpOworICAgIH0KKyAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2RlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorfSAg
Ly8gbmFtZXNwYWNlCisKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAg
IG1PYmpTaW5rKG9ialNpbmspLAorICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKK3sK
K30KKwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBj
aGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKQorewor
ICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAodmlzaXQgPT0gUHJl
VmlzaXQgJiYgcHJlU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHByZVN0cjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAmJiBpblN0cikKKyAgICB7CisgICAgICAgIG91
dCA8PCBpblN0cjsKKyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0ICYmIHBv
c3RTdHIpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cjsKKyAgICB9Cit9CisKK3ZvaWQg
VE91dHB1dEdMU0w6OndyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAg
IFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmll
ciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1
YWxpZmllciBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9
IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQg
PDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAvLyBEZWNsYXJlIHRo
ZSBzdHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgorICAgIGlmICgodHlwZS5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmCisgICAgICAgIChtRGVjbGFyZWRTdHJ1Y3Rz
LmZpbmQodHlwZS5nZXRUeXBlTmFtZSgpKSA9PSBtRGVjbGFyZWRTdHJ1Y3RzLmVuZCgpKSkKKyAg
ICB7CisgICAgICAgIG91dCA8PCAic3RydWN0ICIgPDwgdHlwZS5nZXRUeXBlTmFtZSgpIDw8ICJ7
XG4iOworICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworICAg
ICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAgICAgICAgIG91dCA8PCBn
ZXRUeXBlTmFtZSgqZmllbGRUeXBlKSA8PCAiICIgPDwgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUo
KTsKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKKyAgICAgICAgICAgIG91dCA8PCAi
O1xuIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIn0iOworICAgICAgICBtRGVjbGFyZWRT
dHJ1Y3RzLmluc2VydCh0eXBlLmdldFR5cGVOYW1lKCkpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7CisgICAgfQorfQorCit2b2lkIFRP
dXRwdXRHTFNMOjp3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2Um
IGFyZ3MpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAg
ICAgICAgaXRlciAhPSBhcmdzLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBhcmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAg
QVNTRVJUKGFyZyAhPSBOVUxMKTsKKworICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+
Z2V0VHlwZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlm
aWVyKCk7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIGZ1
bmN0aW9uIGFyZ3VtZW50cy4KKyAgICAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkpCisgICAgICAgICAgICBvdXQgPDwgdHlwZS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1l
KHR5cGUpOworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgp
OworICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwg
bmFtZTsKKyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgICAgICAgICAgb3V0IDw8IGFy
cmF5QnJhY2tldHModHlwZSk7CisKKyAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhpcyBpcyBu
b3QgdGhlIGxhc3QgYXJndW1lbnQuCisgICAgICAgIGlmIChpdGVyICE9IC0tYXJncy5lbmQoKSkK
KyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29uc3RhbnRVbmlv
biogVE91dHB1dEdMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0g
b2JqU2luaygpOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7CisgICAgICAg
IGNvbnN0IFRUeXBlTGlzdCogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBU
VHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAgICAgICBBU1NF
UlQoZmllbGRUeXBlICE9IE5VTEwpOworICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNv
bnN0YW50VW5pb24oKmZpZWxkVHlwZSwgcENvbnN0VW5pb24pOworICAgICAgICAgICAgaWYgKGkg
IT0gc3RydWN0dXJlLT5zaXplKCkgLSAxKSBvdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAg
ICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9
IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAx
OworICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigi
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBwQ29u
c3RVbmlvbi0+Z2V0RkNvbnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50
OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgcmV0dXJuIHBDb25z
dFVuaW9uOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBvdXQg
PDwgbm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBu
b2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhu
b2RlLT5nZXRUeXBlKCkpOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdENvbnN0YW50VW5p
b24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9u
KG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jv
b2wgVE91dHB1dEdMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBu
b2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7Cisg
ICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZp
c2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAg
ICAgICAgICAgICAvLyBSSFMgb2YgaW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisg
ICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFz
c2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wU3ViQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNp
dCwgIigiLCAiIC89ICIsICIpIik7IGJyZWFrOworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwt
dGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246IAorICAgICAgICBjYXNlIEVPcFZl
Y3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
QXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoK
KyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAg
ICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBBU1NFUlQKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworICAg
ICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgICAg
ICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIi4iOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQg
PSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdodENoaWxkLT5nZXRTZXF1ZW5jZSgpOworICAg
ICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5j
ZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAo
KnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpWzBdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0g
RWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLmdldElDb25zdCgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG91
dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwg
InkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEVxdWFs
OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigi
LCAiIDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxs
LXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiAqICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2lj
YWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCiti
b29sIFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5v
ZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKC0iLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JMb2dpY2FsTm90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3QoIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCEiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiKyspIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcFBvc3REZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiLS0p
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKCsrIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLS0iLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9C
b29sOgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2
ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAgY2FzZSBFT3BD
b252SW50VG9GbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7ICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwg
TlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJ2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICAgIGNh
c2UgRU9wQ29udkJvb2xUb0ludDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFu
ZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVj
MigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIml2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogd3JpdGVUcmlw
bGV0KHZpc2l0LCAicmFkaWFucygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BEZWdyZWVzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsIE5VTEwsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAic2luKCIsIE5V
TEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiY29zKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAidGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEFzaW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImFzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQWNvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCBOVUxMLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJh
dGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJleHAoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TG9nOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2coIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRXhwMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2cy
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgInNxcnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52
ZXJzZVNxcnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludmVyc2VzcXJ0KCIsIE5VTEwsICIpIik7
IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhYnMo
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lnbjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAic2lnbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9v
cjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ2VpbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZnJh
Y3QoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImxlbmd0aCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BOb3JtYWxpemU6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCBOVUxMLCAi
KSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
YW55KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYWxsKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFRPdXRwdXRHTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAg
ICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICIoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICBvdXQgPDwgIikgPyAoIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0
Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilcbiI7CisKKyAg
ICAgICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0
VHJ1ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgICAgIHZpc2l0Q29k
ZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisgICAgICAgIH0KKyAgICAgICAgZGVjcmVt
ZW50RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRH
TFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkK
K3sKKyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2UmIG91
dCA9IG9ialNpbmsoKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAg
ICBjYXNlIEVPcFNlcXVlbmNlOiB7CisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2Vz
IGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVwdGgg
PiAwKSBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAg
ICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBzZXF1ZW5j
ZS5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1O
b2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7
CisgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisK
KyAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGds
b2JhbCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxuIjsKKyAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAgICAvLyBGdW5j
dGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7
CisgICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShub2RlLT5nZXRU
eXBlKCkpOworICAgICAgICAgICAgb3V0IDw8IHJldHVyblR5cGUgPDwgIiAiIDw8IG5vZGUtPmdl
dE5hbWUoKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIHdyaXRlRnVu
Y3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIpIjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAg
ICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQ
cmVWaXNpdCk7CisgICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShu
b2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgb3V0IDw8
IHJldHVyblR5cGUgPDwgIiAiIDw8IGZ1bmN0aW9uTmFtZTsKKworICAgICAgICAgICAgaW5jcmVt
ZW50RGVwdGgoKTsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250
YWlucyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCisgICAgICAgICAgICAvLyByZXByZXNlbnRp
bmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgZnVuY3Rpb24gYm9keS4gVGhlIGxhdHRlcgorICAg
ICAgICAgICAgLy8gaXMgbm90IHByZXNlbnQgaW4gY2FzZSBvZiBlbXB0eSBmdW5jdGlvbiBib2Rp
ZXMuCisgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEp
IHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBzZXFJdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKworICAgICAgICAg
ICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIFRJbnRlcm1B
Z2dyZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAg
ICAgICBBU1NFUlQocGFyYW1zICE9IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtcy0+
Z2V0T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHBhcmFtcy0+dHJhdmVyc2Uo
dGhpcyk7CisKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIGJvZHkuCisgICAgICAg
ICAgICBUSW50ZXJtQWdncmVnYXRlKiBib2R5ID0gKytzZXFJdGVyICE9IHNlcXVlbmNlLmVuZCgp
ID8KKyAgICAgICAgICAgICAgICAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogTlVMTDsK
KyAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKGJvZHkpOworICAgICAgICAgICAgZGVjcmVtZW50
RGVwdGgoKTsKKyAKKyAgICAgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZDsgbm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgor
ICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGZ1bmN0aW9u
TmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAg
ICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7CisgICAg
ICAgICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKHZpc2l0
ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB3cml0
ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAgIG91
dCA8PCAiKSI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAg
ICAgICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJt
U2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNU
eXBlZCgpOworICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlhYmxlLT5nZXRU
eXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgbURl
Y2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogd3JpdGVUcmlw
bGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImJvb2woIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMygi
LCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
aXZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0gbm9kZS0+Z2V0
VHlwZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAi
KCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZXNzVGhhbigiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiZ3JlYXRlclRoYW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW5FcXVhbCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJncmVhdGVyVGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJlcXVhbCgiLCAi
LCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAibm90RXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29tbWE6IHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wTW9kOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJwb3coIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BNaW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNYXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2xh
bXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJtaXgoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3Rl
cDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BTbW9vdGhTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzbW9vdGhzdGVwKCIs
ICIsICIsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcERvdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENyb3NzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wUmVmbGVjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZWZy
YWN0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAibWF0cml4Q29tcE11bHQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisKKyAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB2aXNp
dENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmso
KTsKKworICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgLy8gTG9vcCBoZWFkZXIuCisgICAgaWYg
KG5vZGUtPnRlc3RGaXJzdCgpKSAgLy8gZm9yIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Zm9yICgiOworICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICAgICAgbm9kZS0+
Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAg
ICAgQVNTRVJUKG5vZGUtPmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAgICAgbm9kZS0+Z2V0VGVz
dCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYg
KG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50
cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgIH0KKyAgICBlbHNlICAv
LyBkby13aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgImRvXG4iOworICAgIH0KKwor
ICAgIC8vIExvb3AgYm9keS4KKyAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOwor
CisgICAgLy8gTG9vcCBmb290ZXIuCisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIHdo
aWxlIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUgKCI7CisgICAgICAgIEFTU0VS
VChub2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVu
dERlcHRoKCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUg
YmVlbiBhbHJlYWR5IHByb2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNp
dCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpT
aW5rKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgICAg
Y2FzZSBFT3BLaWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVh
ayIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiY29udGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wUmV0dXJuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRDb2RlQmxvY2so
VEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7
CisgICAgaWYgKG5vZGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVlbmNl
IG5lZWQgdG8gYmUgdGVybWluYXRlZAorICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCisgICAg
ICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKKyAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8g
RW1wdHkgY29kZSBibG9jay4KKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENST1NT
Q09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTF9IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJt
ZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworY2xhc3MgVE91
dHB1dEdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFRPdXRw
dXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworCitwcm90ZWN0ZWQ6CisgICAgVEluZm9T
aW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CisgICAgdm9pZCB3cml0ZVRy
aXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIs
IGNvbnN0IGNoYXIqIHBvc3RTdHIpOworICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5cGUoY29uc3Qg
VFR5cGUmIHR5cGUpOworICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVElu
dGVybVNlcXVlbmNlJiBhcmdzKTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uKiB3cml0ZUNvbnN0
YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVu
aW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVu
aW9uKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSk7CisgICAgdmlydHVhbCBib29s
IHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSk7
CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNo
KiBub2RlKTsKKworICAgIHZvaWQgdmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwor
Citwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOworICAgIGJvb2wgbURlY2xh
cmluZ1ZhcmlhYmxlczsKKworICAgIC8vIFN0cnVjdHMgYXJlIGRlY2xhcmVkIGFzIHRoZSB0cmVl
IGlzIHRyYXZlcnNlZC4gVGhpcyBzZXQgY29udGFpbnMgYWxsCisgICAgLy8gdGhlIHN0cnVjdHMg
YWxyZWFkeSBkZWNsYXJlZC4gSXQgaXMgbWFpbnRhaW5lZCBzbyB0aGF0IGEgc3RydWN0IGlzCisg
ICAgLy8gZGVjbGFyZWQgb25seSBvbmNlLgorICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4g
RGVjbGFyZWRTdHJ1Y3RzOworICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3RzOwor
fTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNjAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKKyNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIHNoCit7CisvLyBJbnRlZ2VyIHRvIFRT
dHJpbmcgY29udmVyc2lvbgorVFN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJb
MjBdOworICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOwor
fQorCitPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKK3sKKyAg
ICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBt
SW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKworICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9
IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNU
ZXh0dXJlQ3ViZSA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwor
ICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7
CisgICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7CisgICAgbVVzZXNGcm9udEZhY2luZyA9IGZh
bHNlOworICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbVVzZXNYb3IgPSBmYWxzZTsK
KyAgICBtVXNlc01vZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDIgPSBmYWxzZTsKKyAgICBtVXNl
c01vZDMgPSBmYWxzZTsKKyAgICBtVXNlc01vZDQgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3
YXJkMSA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNG
YWNlZm9yd2FyZDMgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAg
IG1Vc2VzRXF1YWxNYXQyID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDMgPSBmYWxzZTsKKyAg
ICBtVXNlc0VxdWFsTWF0NCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMyID0gZmFsc2U7Cisg
ICAgbVVzZXNFcXVhbFZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjNCA9IGZhbHNlOwor
ICAgIG1Vc2VzRXF1YWxJVmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjMyA9IGZhbHNl
OworICAgIG1Vc2VzRXF1YWxJVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMiA9IGZh
bHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjNCA9
IGZhbHNlOworICAgIG1Vc2VzQXRhbjIgPSBmYWxzZTsKKworICAgIG1TY29wZURlcHRoID0gMDsK
KworICAgIG1Bcmd1bWVudEluZGV4ID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhMU0wo
KQoreworICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworfQorCit2b2lkIE91dHB1dEhMU0w6Om91
dHB1dCgpCit7CisgICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91
dHB1dCB0aGUgYm9keSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhl
YWRlcgorICAgIGhlYWRlcigpOworCisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFk
ZXIuY19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsK
K30KKworVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCit7CisgICAg
cmV0dXJuIG1Cb2R5OworfQorCitpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlw
ZSAmdHlwZSkgY29uc3QKK3sKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkg
PyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBhcnJheVNpemUgPSB0eXBlLmlz
QXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworCisgICAgcmV0dXJuIGVsZW1lbnRT
aXplICogYXJyYXlTaXplOworfQorCit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCit7CisgICAg
RVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBUSW5mb1NpbmtC
YXNlICZvdXQgPSBtSGVhZGVyOworCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJh
dG9yIHN0cnVjdERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1
Y3REZWNsYXJhdGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJh
dGlvbisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9
CisKKyAgICBmb3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3Ry
dWN0b3JzLmJlZ2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0
cnVjdG9yKyspCisgICAgeworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKwor
ICAgIGlmIChsYW5ndWFnZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgeworICAgICAgICBUU3Ry
aW5nIHVuaWZvcm1zOworICAgICAgICBUU3RyaW5nIHZhcnlpbmdzOworCisgICAgICAgIFRTeW1i
b2xUYWJsZUxldmVsICpzeW1ib2xzID0gbUNvbnRleHQuc3ltYm9sVGFibGUuZ2V0R2xvYmFsTGV2
ZWwoKTsKKyAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworCisgICAgICAgIGZvciAoVFN5
bWJvbFRhYmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVn
aW4oKTsgbmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wp
LnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5h
bWUoKTsKKworICAgICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlm
aWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlw
ZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52
YXJpYW50VmFyeWluZ0luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1SZWZlcmVuY2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2Vk
VmFyeWluZ3MuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5n
KHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAi
ICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
c2VtYW50aWNJbmRleCArPSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAx
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFHbG9iYWwgfHwgcXVhbGlmaWVyID09IEV2cVRl
bXBvcmFyeSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdsb2Jh
bHMgYXJlIGRlY2xhcmVkIGFuZCBpbnRpYWxpemVkIGFzIGFuIGFnZ3JlZ2F0ZSBub2RlCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFD
b25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0YW50
cyBhcmUgcmVwZWF0ZWQgYXMgbGl0ZXJhbHMgd2hlcmUgdXNlZAorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwg
IHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBm
bG9hdDQgZ2xfQ29sb3JbMV0gPSB7ZmxvYXQ0KDAsIDAsIDAsIDApfTtcbiI7CisKKyAgICAgICAg
aWYgKG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRp
YyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtc
biI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZhbHNl
O1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmICht
VXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZs
b2F0NCBkeF9XaW5kb3c7XG4iCisgICAgICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4
X0RlcHRoO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gYm9vbCBkeF9Qb2ludHNPckxp
bmVzO1xuIgorICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGJvb2wgZHhfRnJvbnRDQ1c7XG4i
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgb3V0
IDw8ICB1bmlmb3JtczsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0
IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQz
IHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxu
IgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RFByb2pfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJp
YXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxv
YXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAs
IGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFz
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICB7CisgICAgICAgIFRT
dHJpbmcgdW5pZm9ybXM7CisgICAgICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAgICAgICAgVFN0
cmluZyB2YXJ5aW5nczsKKworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1D
b250ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7CisKKyAgICAgICAgZm9yIChUU3lt
Ym9sVGFibGVMZXZlbDo6Y29uc3RfaXRlcmF0b3IgbmFtZWRTeW1ib2wgPSBzeW1ib2xzLT5iZWdp
bigpOyBuYW1lZFN5bWJvbCAhPSBzeW1ib2xzLT5lbmQoKTsgbmFtZWRTeW1ib2wrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gKCpuYW1lZFN5bWJvbCku
c2Vjb25kOworICAgICAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHN5bWJvbC0+Z2V0TmFt
ZSgpOworCisgICAgICAgICAgICBpZiAoc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnR5cGUgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIGlm
IChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFVuaWZvcm1zLmZpbmQobmFtZS5jX3N0cigpKSAhPSBt
UmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBl
KSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiO1xuIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkQXR0cmlidXRlcy5maW5kKG5hbWUuY19z
dHIoKSkgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2Vk
VmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dy
YW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
ZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIo
dHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxp
ZmllciA9PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdh
dGUgbm9kZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFs
aWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOwor
ICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAg
ICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtc
biI7CisgICAgICAgIAorICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xu
IjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8g
VmFyeWluZ3NcbiI7CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAi
XG4iCisgICAgICAgICAgICAgICAidW5pZm9ybSBmbG9hdDIgZHhfSGFsZlBpeGVsU2l6ZTtcbiIK
KyAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAg
IG91dCA8PCAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBH
TF9VU0VTX1BPSU5UX0NPT1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5n
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8
PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
RGVwdGhSYW5nZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQ
YXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBuZWFyO1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAg
ICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJh
bWV0ZXJzIGdsX0RlcHRoUmFuZ2U7XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBw
LCBib29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAg
ICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8g
eSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9
CisgICAgCisgICAgaWYgKG1Vc2VzTW9kMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQy
IG1vZChmbG9hdDIgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVz
ZXNNb2QzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9h
dCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNCkKKyAgICB7CisgICAgICAg
IG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtc
biIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQg
ZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKKyAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgor
ICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4g
LU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxz
ZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndh
cmQyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4s
IGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAg
ICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAg
ICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAg
ICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAg
ICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAg
ICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMg
TnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRv
dChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAg
ICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAg
ICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxu
IgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQg
ZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKKyAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxu
IgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1
cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAg
ZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxN
YXQyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0MngyIG0sIGZsb2F0
MngyIG4pXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gbVswXVswXSA9PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJlxuIgorICAgICAg
ICAgICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsx
XVsxXTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Vx
dWFsTWF0MykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDN4MyBtLCBm
bG9hdDN4MyBuKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiYgbVswXVsy
XSA9PSBuWzBdWzJdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09
IG5bMV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJlxu
IgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1b
MV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl07XG4iCisgICAgICAgICAgICAgICAi
fVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbE1hdDQpCisgICAgeworICAgICAgICBv
dXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0eDQgbilcbiIKKyAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0g
JiYgbVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJiBtWzBdWzNdID09
IG5bMF1bM10gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsx
XVswXSAmJiBtWzFdWzFdID09IG5bMV1bMV0gJiYgbVsxXVsyXSA9PSBuWzFdWzJdICYmIG1bMV1b
M10gPT0gblsxXVszXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9
PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl0gJiYg
bVsyXVszXSA9PSBuWzJdWzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzNd
WzBdID09IG5bM11bMF0gJiYgbVszXVsxXSA9PSBuWzNdWzFdICYmIG1bM11bMl0gPT0gblszXVsy
XSAmJiBtWzNdWzNdID09IG5bM11bM107XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzIpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wg
ZXF1YWwoZmxvYXQyIHYsIGZsb2F0MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAg
ICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsVmVjMykKKyAgICB7
CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDMgdiwgZmxvYXQzIHUpXG4iCisgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAm
JiB2LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAg
ICB9CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJv
b2wgZXF1YWwoZmxvYXQ0IHYsIGZsb2F0NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2Lnog
PT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNFcXVhbElWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVx
dWFsKGludDIgdiwgaW50MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsSVZlYzMpCisgICAgeworICAg
ICAgICBvdXQgPDwgImJvb2wgZXF1YWwoaW50MyB2LCBpbnQzIHUpXG4iCisgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0g
dS55ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNFcXVhbElWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFs
KGludDQgdiwgaW50NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYu
dyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVz
ZXNFcXVhbEJWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGJvb2wyIHYs
IGJvb2wyIHUpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7
CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVjMykKKyAgICB7CisgICAgICAgIG91dCA8
PCAiYm9vbCBlcXVhbChib29sMyB2LCBib29sMyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2
LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1V
c2VzRXF1YWxCVmVjNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sNCB2
LCBib29sNCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1
Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFu
MikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgp
XG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAg
JiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KKyAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7
CisgICAgfQorfQorCit2b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wg
Km5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBUU3RyaW5n
IG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29s
b3IiKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAgfQorICAgIGVs
c2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xf
Q29sb3IiOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKKyAg
ICB7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1l
OworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQorICAgIHsKKyAg
ICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9
CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgeworICAgICAgICBt
VXNlc1BvaW50Q29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQorICAgIHsKKyAgICAgICAgbVVzZXNG
cm9udEZhY2luZyA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNl
IGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludFNp
emUgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKwor
ICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZWZlcmVuY2VkVW5pZm9ybXMuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmluc2VydChuYW1lLmNfc3RyKCkpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8
IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFW
YXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5aW5ncy5pbnNlcnQobmFtZS5jX3N0cigpKTsK
KyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICB9Cit9CisK
K2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkg
Km5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIiIsICIgPSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICs9
ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
IigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5n
ZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRyYW5zcG9z
ZSgiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
ID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJd
Iik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlmICh2aXNp
dCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgbm9kZS0+
Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6Cisg
ICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgIi4iOworCisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxlID0gbm9kZS0+
Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICAgICAgaWYgKHN3aXp6bGUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5j
ZSA9IHN3aXp6bGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVl
bmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50LT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9w
U3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7
IGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdjogICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAg
ICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBpZiAo
bm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9w
RXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiEoIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgVFR5cGVM
aXN0ICpmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSAo
KmZpZWxkcylbaV0udHlwZTsKKworICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0
RmllbGROYW1lKCkgKyAiID09ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+
Z2V0RmllbGROYW1lKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgp
IC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICYm
ICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQg
PDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc01hdHJp
eCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVm
dCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2Fz
ZSAyICogMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMyAqIDM6IG1Vc2VzRXF1YWxNYXQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDQgKiA0OiBtVXNlc0VxdWFsTWF0NCA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmlzVmVjdG9y
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0
KCktPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVm
dCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG1Vc2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbFZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5n
ZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6IG1Vc2VzRXF1YWxJVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogbVVzZXNFcXVhbElWZWMzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSA0OiBtVXNlc0VxdWFsSVZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0
U2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbEJWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3Ao
KSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiZXF1YWwoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiIWVxdWFsKCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbjogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFu
RXF1YWw6ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICogIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIs
IHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVj
dG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsg
YnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7
IGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiIHx8ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhv
cjoKKyAgICAgICAgbVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAieG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dp
Y2FsQW5kOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7ICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybVVuYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTmVnYXRpdmU6
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwg
IiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG9z
dEluY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisrKSIpOyBicmVh
azsKKyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIiwgIi0tKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2Ug
RU9wUHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIp
OyBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9Cb29sOgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlw
ZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIpIik7IGJyZWFr
OworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wzKCIsICIi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJib29sNCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgIiIs
ICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJmbG9hdDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0ludDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAy
OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAiIiwgIikiKTsg
YnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50NCgi
LCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVz
KCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wQ29zOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNvcygiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BBc2luOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXNpbigiLCAi
IiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcEF0YW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIi
LCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTG9nOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZygiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BMb2cyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9nMigiLCAiIiwg
IikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEludmVyc2VTcXJ0OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3FydCgiLCAiIiwg
IikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wU2lnbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24oIiwgIiIsICIp
Iik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJmbG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDZWlsOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCAiIiwgIiki
KTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cExlbmd0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgIiIsICIp
Iik7ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKKy8vICAgIGNhc2UgRU9w
RFBkeDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsg
ICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BG
d2lkdGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIp
OyAgICBicmVhazsgICAgICAgIAorICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIEVTaExhbmd1YWdl
IGxhbmd1YWdlID0gbUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBF
T3BTZXF1ZW5jZToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAg
ICAgICAgICBtU2NvcGVEZXB0aCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1TY29wZUJyYWNr
ZXQuc2l6ZSgpIDwgbVNjb3BlRGVwdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtU2NvcGVCcmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2NvcGUgbGV2ZWwK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0aCAtIDFdKys7
ICAgLy8gTmV3IHNjb3BlIGF0IGV4aXN0aW5nIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Ig
c2l0ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlz
U2luZ2xlU3RhdGVtZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2UoKnNpdCk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1JbnNp
ZGVGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7
CisKKyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRp
b246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQo
KTsKKyAgICAgICAgICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAodmFy
aWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkgfHwgdmFy
aWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUdsb2JhbCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2YXJpYWJsZS0+
Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgp
KSwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCF2YXJp
YWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5n
ZXRTeW1ib2woKSAhPSAiIikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVuY3Rpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdHlw
ZVN0cmluZyh2YXJpYWJsZS0+Z2V0VHlwZSgpKSArICIgIjsKKworICAgICAgICAgICAgICAgICAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsg
c2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRB
c1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1i
b2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBh
cnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQp
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHRoaXMtPmluVmlzaXQpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2Vx
dWVuY2UuYmFjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0
LCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZiAodmlzaXQgJiYgdGhpcy0+cG9zdFZpc2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIG5vZGUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0
QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVj
bGFyYXRpb24KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVh
ZHkgYWRkZWQgdG8gY29uc3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQcm90b3R5cGU6CisgICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5
cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFt
ZSgpKSA8PCAiKCI7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0g
bm9kZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKTtc
biI7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IiIsICIsICIsICIiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0
aW9uOgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVu
bWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAodmlzaXQgPT0g
UHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJp
bmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAibWFpbiIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
ImdsX21haW4oIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUp
IDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFz
U3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0
cmluZyhzeW1ib2wpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50
cy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShz
ZXF1ZW5jZS5iZWdpbigpKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlv
biA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQ
b3N0VmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwor
CisgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVO
YW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2Vy
RGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
MkRQcm9qKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUy
RExvZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNh
bXBsaW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVx
dWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlQ3ViZUxvZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0
ZXh0dXJlIHNhbXBsaW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIilcbntc
biIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Cisg
ICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzEiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMxKCIsICIiLCAi
KSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAg
ICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMiIsICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIiki
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAg
IGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVu
Y2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBh
ZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMSgiLCAiIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMSgiLCAiIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkp
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogCisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7
CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIpIik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgIGFkZENv
bnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KG5vZGUtPmdldFR5cGUoKS5n
ZXRUeXBlTmFtZSgpKSwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpICsg
Il9jdG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNz
VGhhbjogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiIDw9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbkVxdWFsOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICE9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+
Z2V0QXNUeXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhl
IGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogbVVz
ZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNNb2QyID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNNb2QzID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNNb2Q0ID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BBdGFuOgorICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCisgICAgICAgIG1V
c2VzQXRhbjIgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIs
ICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1h
eCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENsYW1wOiAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3Rl
cDogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BEaXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwg
IikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAi
LCAiKSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5
cGVkKCktPmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3Qg
YXJndW1lbnQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9y
d2FyZDEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2Fy
ZDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNlZm9yd2FyZDMg
PSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9yd2FyZDQgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
YWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgi
LCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwg
IiAqICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFy
eU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZvbGRTZWxlY3Qt
PmdldFRlbXBvcmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVt
ZW50CisgICAgeworICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25k
aXRpb24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZigiOworCisgICAgICAgIG5vZGUtPmdldENv
bmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iOworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAgICBpZiAobm9k
ZS0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVsc2Vc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBPdXRwdXRI
TFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7Cisg
ICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2Rl
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW5mb1NpbmtC
YXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgewor
ICAgICAgICBvdXQgPDwgImRvXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1p
bmFsKCkpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAgCisg
ICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUt
PmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwg
IjsgIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VGVzdCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsK
KyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+
Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBvdXQgPDwgIn1cbiI7CisK
KyAgICBpZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGls
ZShcbiI7CisKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
ICAgICBvdXQgPDwgIikiOworICAgIH0KKworICAgIG91dCA8PCAiO1xuIjsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwg
VEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsK
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BL
aWxsOiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIpOyAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCAi
IiwgIiIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQo
dmlzaXQsICJjb250aW51ZSIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46
CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgInJldHVybiAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAgICAgICBpZiAo
YWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdncmVnYXRlLT5n
ZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuZW5k
KCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghaXNTaW5nbGVT
dGF0ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3Vw
cG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCitib29sIE91dHB1dEhMU0w6OmhhbmRs
ZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gbUJvZHk7CisKKyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKKyAgICAvLyBm
b3IoaW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBpbmRleCAr
PSBpbmNyZW1lbnQpCisgICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOworICAgIFRPcGVy
YXRvciBjb21wYXJhdG9yID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7CisgICAgaW50
IGxpbWl0ID0gMDsKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBhcnNlIGluZGV4
IG5hbWUgYW5kIGludGlhbCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgewor
ICAgICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpOworCisgICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOwor
CisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09
IEV2cVRlbXBvcmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmlu
YXJ5ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhc3NpZ24t
PmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFu
dCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9
PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gc3ltYm9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwg
PSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGNv
bXBhcmF0b3IgYW5kIGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+
Z2V0VGVzdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdl
dFRlc3QoKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAodGVzdCAm
JiB0ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGluZGV4LT5n
ZXRJZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29u
c3RhbnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgICAg
ICAgICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkg
PT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3Ig
PSB0ZXN0LT5nZXRPcCgpOworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGluY3JlbWVu
dAorICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2Rl
LT5nZXRUZXJtaW5hbCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVy
bWluYWwgPSBub2RlLT5nZXRUZXJtaW5hbCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICAgICAg
VEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNV
bmFyeU5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7
CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJt
aW5hbC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgIGlm
IChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQt
PmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFu
dC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1
ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7CisKKyAg
ICAgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
RU9wUG9zdEluY3JlbWVudDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVPcFBvc3REZWNyZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVP
cE51bGwgJiYgaW5jcmVtZW50ICE9IDApCisgICAgeworICAgICAgICBpZiAoY29tcGFyYXRvciA9
PSBFT3BMZXNzVGhhbkVxdWFsKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJhdG9yID0g
RU9wTGVzc1RoYW47CisgICAgICAgICAgICBsaW1pdCArPSAxOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW4pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8gaW5jcmVtZW50OworCisg
ICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1pdCAtIGluaXRpYWwgKyAx
KSAlIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlh
bCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykgLSAxIC0gcmVtYWluZGVy
OworCisgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwg
Y2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAgICAgICBvdXQg
PDwgImZvcihpbnQgIjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0
aWFsOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5k
ZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8
ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntc
biI7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisK
KyAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKKyAgICAgICAgICAg
ICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBs
b29wCit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29u
c3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0
cmluZyAmcG9zdFN0cmluZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKwor
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJp
bmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAg
ICBvdXQgPDwgaW5TdHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNp
dCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wp
Cit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOwor
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgVFN0cmluZyBu
YW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lLmVtcHR5KCkpICAgLy8g
SExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJvdG90eXBlcworICAgIHsK
KyAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKworICAg
IHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlw
ZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisKK1RTdHJpbmcgT3V0cHV0
SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRj
aChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFJbjogICAgICAgICAgICByZXR1cm4g
ImluIjsKKyAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJvdXQiOworICAgICAg
Y2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKKyAgICAgIGNhc2UgRXZxQ29u
c3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjp0eXBl
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldFR5cGVOYW1lKCkgIT0g
IiIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlwZS5nZXRU
eXBlTmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0
dXJlLCBkZWZpbmUgaW4gcGxhY2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGVM
aXN0ICZmaWVsZHMgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgVFN0cmluZyBz
dHJpbmcgPSAic3RydWN0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQg
PSAqZmllbGRzW2ldLnR5cGU7CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsg
dHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3Ry
aW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmcg
Kz0gIn0gIjsKKworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjogcmV0dXJu
ICJmbG9hdDJ4MiI7CisgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKKyAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0eDQiOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gImZsb2F0IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MiI7CisgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiAiZmxvYXQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiaW50IjsKKyAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gImludDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7
CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJv
b2wiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiYm9vbDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAi
Ym9vbDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAg
ICAgIHJldHVybiAidm9pZCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOworICAgICAgICB9CisgICAgfQorCisg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgcmV0dXJuICI8dW5rbm93biB0eXBl
PiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5
cGUpCit7CisgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAi
IjsKKyAgICB9CisKKyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsg
Il0iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0
eXBlKQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yIChpbnQgY29tcG9uZW50ID0g
MDsgY29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBvbmVudCsrKQorICAgIHsK
KyAgICAgICAgc3RyaW5nICs9ICIwIjsKKworICAgICAgICBpZiAoY29tcG9uZW50IDwgdHlwZS5n
ZXRPYmplY3RTaXplKCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIiwg
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7Cit9
CisKK3ZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKK3sK
KyAgICBpZiAobmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBOYW1lbGVz
cyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisgICAgVFR5cGUg
Y3RvclR5cGUgPSB0eXBlOworICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3Rv
clR5cGUuY2hhbmdlUHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLmNoYW5nZVF1YWxp
ZmllcihFdnFUZW1wb3JhcnkpOworCisgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3Ry
dWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKKyAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVy
czsKKworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgZm9yIChUSW50ZXJtU2Vx
dWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBh
cmFtZXRlciAhPSBwYXJhbWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlw
ZWQoKS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdl
dFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShu
YW1lKSk7CisKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSAr
PSAic3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3Ry
dWN0KCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpm
aWVsZHNbaV0udHlwZTsKKworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVT
dHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhm
aWVsZCkgKyAiO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7
CisKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1T
dHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9u
cy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNo
X2JhY2soc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBj
dG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICBUU3RyaW5nIGNvbnN0cnVjdG9yOwor
CisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0
b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOworICAgIH0KKyAgICBl
bHNlICAgLy8gQnVpbHQtaW4gdHlwZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlw
ZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9yUGFyYW1ldGVy
cy5zaXplKCk7IHBhcmFtZXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOworCisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5
cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0cmluZyh0eXBl
KTsKKworICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpIC0gMSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntc
biI7CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25z
dHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0dXJuICIgKyB0
eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuaXNN
YXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKKyAgICB7CisgICAgICAgIGlu
dCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAm
cGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07CisKKyAgICAgICAgaWYgKHBhcmFtZXRlci5p
c1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNv
bCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4MCIgOiAiMC4w
Iik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwg
ZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldE5vbWlu
YWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJp
bmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0
cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgcmVtYWluaW5nQ29tcG9uZW50cyA9
IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgaW50IHBhcmFtZXRlckluZGV4ID0g
MDsKKworICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1twYXJh
bWV0ZXJJbmRleF07CisgICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVy
SW5kZXggPCAoaW50KWN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGNv
bnN0cnVjdG9yICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlm
IChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJh
bWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIu
Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChyZW1haW5pbmdDb21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0Nv
bXBvbmVudHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6IGNvbnN0cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogY29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkg
fHwgcGFyYW1ldGVyLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChyZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCkg
fHwgbW9yZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJl
bWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYg
KG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtZXRl
ckluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21w
b25lbnRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIs
ICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUu
Z2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Ry
dWN0b3IgKz0gIik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKwor
ICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29uc3QgQ29uc3Rh
bnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBl
LCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0
KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5cGVOYW1lKCkp
ICsgIl9jdG9yKCI7CisgICAgICAgIAorICAgICAgICBjb25zdCBUVHlwZUxpc3QgKnN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dHJ1Y3R1cmUtPnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlw
ZSAqZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisKKyAgICAgICAgICAgIGNvbnN0
VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbik7CisKKyAg
ICAgICAgICAgIGlmIChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlu
dCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3JpdGVUeXBlID0g
c2l6ZSA+IDE7CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlvbisrKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNvbnN0VW5pb24t
PmdldEZDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVUeXBl
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVT
dHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgpICYm
IGkgPCBkZXB0aExpbWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsgc3Ry
KGkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExT
TDo6c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0eXBl
TmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RTdHJp
bmcgT3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQorewor
ICAgIGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pCisg
ICAgeworICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSArIHNj
b3BlU3RyaW5nKGRlcHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0b3Ig
c3RydWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1Y3RO
YW1lcy5lbmQoKTsgc3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnN0
cnVjdE5hbWUgPT0gc2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2NvcGVkTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IFVOUkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25zdHJ1
Y3RvcgorCisgICAgcmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRl
Y29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigw
LCAzKSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0cmluZzsKKyAgICB9Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNM
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9PVVRQVVRITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKwor
I2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNw
YWNlIHNoCit7CitjbGFzcyBVbmZvbGRTZWxlY3Q7CisKK2NsYXNzIE91dHB1dEhMU0wgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgT3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0KTsKKyAgICB+T3V0cHV0SExTTCgpOworCisgICAgdm9p
ZCBvdXRwdXQoKTsKKworICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0oKTsKKworICAg
IFRTdHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJp
bmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBzdGF0aWMgVFN0
cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcg
aW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29y
YXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlIHRv
IGF2b2lkIG5hbWluZyBjbGFzaGVzCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQgaGVhZGVyKCk7
CisKKyAgICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2RlIHRvIHRoZSBi
b2R5IHN0cmVhbQorICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZv
aWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlv
bihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQnJhbmNoKik7CisKKyAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlICpub2RlKTsKKyAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpOworICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmlu
ZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9z
dFN0cmluZyk7CisgICAgVFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpOworICAgIGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdDsK
KworICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJp
bmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycyk7CisgICAgY29uc3Qg
Q29uc3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25z
dCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsKKworICAgIFRTdHJpbmcgc2NvcGVTdHJpbmco
dW5zaWduZWQgaW50IGRlcHRoTGltaXQpOworICAgIFRTdHJpbmcgc2NvcGVkU3RydWN0KGNvbnN0
IFRTdHJpbmcgJnR5cGVOYW1lKTsKKyAgICBUU3RyaW5nIHN0cnVjdExvb2t1cChjb25zdCBUU3Ry
aW5nICZ0eXBlTmFtZSk7CisKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBVbmZv
bGRTZWxlY3QgKm1VbmZvbGRTZWxlY3Q7CisgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CisKKyAg
ICAvLyBPdXRwdXQgc3RyZWFtcworICAgIFRJbmZvU2lua0Jhc2UgbUhlYWRlcjsKKyAgICBUSW5m
b1NpbmtCYXNlIG1Cb2R5OworICAgIFRJbmZvU2lua0Jhc2UgbUZvb3RlcjsKKworICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIHN0ZDo6c2V0PHN0ZDo6
c3RyaW5nPiBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+
IG1SZWZlcmVuY2VkVmFyeWluZ3M7CisKKyAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWluaW5nIHdo
YXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAorICAgIGJvb2wgbVVzZXNUZXh0dXJlMkQ7Cisg
ICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9q
OworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJvb2wgbVVzZXNE
ZXB0aFJhbmdlOworICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBtVXNlc1BvaW50
Q29vcmQ7CisgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVzZXNQb2ludFNp
emU7CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAgICBib29sIG1V
c2VzTW9kMjsKKyAgICBib29sIG1Vc2VzTW9kMzsKKyAgICBib29sIG1Vc2VzTW9kNDsKKyAgICBi
b29sIG1Vc2VzRmFjZWZvcndhcmQxOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7CisgICAg
Ym9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OworICAg
IGJvb2wgbVVzZXNFcXVhbE1hdDI7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0MzsKKyAgICBib29s
IG1Vc2VzRXF1YWxNYXQ0OworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7CisgICAgYm9vbCBtVXNl
c0VxdWFsVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWM0OworICAgIGJvb2wgbVVzZXNFcXVh
bElWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWMzOworICAgIGJvb2wgbVVzZXNFcXVhbElW
ZWM0OworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMz
OworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWM0OworICAgIGJvb2wgbVVzZXNBdGFuMjsKKworICAg
IHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9y
cyBtQ29uc3RydWN0b3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3RO
YW1lczsKKyAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6
bGlzdDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25z
IG1TdHJ1Y3REZWNsYXJhdGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2Nv
cGVCcmFja2V0OworICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVk
IGludCBtU2NvcGVEZXB0aDsKKworICAgIGludCBtQXJndW1lbnRJbmRleDsgICAvLyBGb3IgY3Jl
YXRpbmcgdW5pcXVlIGFyZ3VtZW50IG5hbWVzCit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxF
Ul9PVVRQVVRITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE0NzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9QYXJzZUhlbHBlci5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBT
dWItIHZlY3RvciBhbmQgbWF0cml4IGZpZWxkcworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLwor
Ly8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRv
IG9mZnNldHMKKy8vIGZvciBhIHZlY3Rvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNl
VmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCB2ZWNTaXplLCBUVmVj
dG9yRmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy5udW0gPSAoaW50KSBj
b21wU3RyaW5nLnNpemUoKTsKKyAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7Cisg
ICAgICAgIGV4eXp3LAorICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEsCisgICAgfSBmaWVs
ZFNldFs0XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Cisg
ICAgICAgIHN3aXRjaCAoY29tcFN0cmluZ1tpXSkgIHsKKyAgICAgICAgY2FzZSAneCc6IAorICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzogCisgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVy
Z2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAg
ZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd5JzogCisgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5v
ZmZzZXRzW2ldID0gMTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0
c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ3onOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ld
ID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnYic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAy
OworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAg
ICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgICAgIGNhc2UgJ3cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnYSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdxJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAg
ICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBz
ZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRz
Lm51bTsgKytpKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2Yg
cmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChm
aWVsZFNldFtpXSAhPSBmaWVsZFNldFtpLTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGlu
ZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBz
ZXQiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworCisvLworLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNo
YW5nZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZvciBhIG1hdHJpeC4KKy8vCitib29sIFRQYXJzZUNv
bnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBt
YXRTaXplLCBUTWF0cml4RmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy53
aG9sZVJvdyA9IGZhbHNlOworICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgIGZpZWxk
cy5yb3cgPSAtMTsKKyAgICBmaWVsZHMuY29sID0gLTE7CisKKyAgICBpZiAoY29tcFN0cmluZy5z
aXplKCkgIT0gMikgeworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0
cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7Cisg
ICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24i
LCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOworICAgICAgICBmaWVsZHMu
Y29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKKyAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0g
PT0gJ18nKSB7CisgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdb
MF0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOworICAg
ICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8Cisg
ICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24i
LCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAg
ICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfQorCisgICAgaWYgKGZp
ZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNpemUpIHsKKyAgICAgICAg
ZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0
cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFcnJvcnMKKy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKworLy8KKy8vIFRyYWNrIHdoZXRoZXIgZXJyb3JzIGhhdmUgb2NjdXJyZWQu
CisvLwordm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKK3sKKyAgICByZWNvdmVyZWRGcm9t
RXJyb3IgPSB0cnVlOworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBh
bGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVy
cm9yKFRTb3VyY2VMb2MgbkxpbmUsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpz
elRva2VuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pFeHRyYUlu
Zm9Gb3JtYXQsIC4uLikKK3sKKyAgICBjaGFyIHN6RXh0cmFJbmZvWzQwMF07CisgICAgdmFfbGlz
dCBtYXJrZXI7CisKKyAgICB2YV9zdGFydChtYXJrZXIsIHN6RXh0cmFJbmZvRm9ybWF0KTsKKwor
ICAgIHZzbnByaW50ZihzekV4dHJhSW5mbywgc2l6ZW9mKHN6RXh0cmFJbmZvKSwgc3pFeHRyYUlu
Zm9Gb3JtYXQsIG1hcmtlcik7CisKKyAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6
IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8KKyAgICBpbmZvU2luay5pbmZvLnByZWZp
eChFUHJlZml4RXJyb3IpOworICAgIGluZm9TaW5rLmluZm8ubG9jYXRpb24obkxpbmUpOworICAg
IGluZm9TaW5rLmluZm8gPDwgIiciIDw8IHN6VG9rZW4gPDwgICInIDogIiA8PCBzelJlYXNvbiA8
PCAiICIgPDwgc3pFeHRyYUluZm8gPDwgIlxuIjsKKworICAgIHZhX2VuZChtYXJrZXIpOworCisg
ICAgKytudW1FcnJvcnM7Cit9CisKKy8vCisvLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBw
bGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmFz
c2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5n
IHJpZ2h0KQoreworICAgIGVycm9yKGxpbmUsICIiLCBvcCwgImNhbm5vdCBjb252ZXJ0IGZyb20g
JyVzJyB0byAnJXMnIiwKKyAgICAgICAgICByaWdodC5jX3N0cigpLCBsZWZ0LmNfc3RyKCkpOwor
fQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJh
dGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihp
bnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKK3sKKyAgIGVycm9yKGxp
bmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAorICAgICAgICAgICJubyBvcGVyYXRpb24g
JyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlz
IG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAorICAgICAgICAgIG9wLCBvcGVyYW5kLmNfc3Ry
KCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgYmluYXJ5IG9wZXJh
dGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3Io
aW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7
CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAKKyAgICAgICAg
ICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVy
YW5kIG9mIHR5cGUgJyVzJyBhbmQgIgorICAgICAgICAgICAgImEgcmlnaHQgb3BlcmFuZCBvZiB0
eXBlICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLCAKKyAgICAg
ICAgICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworfQorCitib29sIFRQYXJz
ZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lz
aW9uLCBUQmFzaWNUeXBlIHR5cGUpeworICAgIHN3aXRjaCggdHlwZSApeworICAgIGNhc2UgRWJ0
RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7CisgICAgICAg
ICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAi
IiwgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRWJ0SW50OgorICAgICAgICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVm
aW5lZCApeworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVk
IChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gQm90
aCB0ZXN0IGFuZCBpZiBuZWNlc3NhcnksIHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhl
IG5vZGUgaXMgcmVhbGx5CisvLyBhbiBsLXZhbHVlIHRoYXQgY2FuIGJlIG9wZXJhdGVkIG9uIHRo
aXMgd2F5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jv
b2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciog
b3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0g
bm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9
IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgaWYgKGJpbmFyeU5vZGUpIHsKKyAgICAg
ICAgYm9vbCBlcnJvclJldHVybjsKKworICAgICAgICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3Ao
KSkgeworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4
SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAg
ICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgp
KTsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICAgICAgZXJyb3JSZXR1
cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwor
ICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikgeworICAgICAgICAgICAgICAgIGludCBvZmZz
ZXRbNF0gPSB7MCwwLDAsMH07CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0
Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7CisgICAgICAgICAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9y
IHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2Uo
KS5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdl
dEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2
ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHJldHVybiBlcnJvclJldHVybjsK
KyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7Cisg
ICAgaWYgKHN5bU5vZGUgIT0gMCkKKyAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9s
KCkuY19zdHIoKTsKKworICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
Q29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnB1dDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOworICAgIGNh
c2UgRXZxRnJvbnRGYWNpbmc6ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0Zyb250RmFj
aW5nIjsgYnJlYWs7CisgICAgY2FzZSBFdnFQb2ludENvb3JkOiAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgZ2xfUG9pbnRDb29yZCI7ICBicmVhazsKKyAgICBkZWZhdWx0OgorCisgICAgICAg
IC8vCisgICAgICAgIC8vIFR5cGUgdGhhdCBjYW4ndCBiZSB3cml0dGVuIHRvPworICAgICAgICAv
LworICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAg
bWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlm
eSB2b2lkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBi
aW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIg
bC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworCisgICAgLy8KKyAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJy
b3IuCisgICAgLy8KKyAgICBpZiAobWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLworICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBh
IG1lc3NhZ2UuCisgICAgLy8KKyAgICBpZiAoc3ltTm9kZSkKKyAgICAgICAgZXJyb3IobGluZSwg
IiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7
CisgICAgZWxzZQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwg
IiglcykiLCBtZXNzYWdlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gQm90aCB0
ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5v
ZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0YW50LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
d2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJ
bnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUo
KSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQg
YW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGludGVnZXIuCisv
LworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VD
b250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIq
IHRva2VuKQoreworICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9k
ZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBl
cnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tl
biwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBp
ZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVudGx5
CisvLyBnbG9iYWxseSBzY29wZWQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4g
ZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5l
LCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBn
bG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisv
LyBGb3Igbm93LCBrZWVwIGl0IHNpbXBsZTogIGlmIGl0IHN0YXJ0cyAiZ2xfIiwgaXQncyByZXNl
cnZlZCwgaW5kZXBlbmRlbnQKKy8vIG9mIHNjb3BlLiAgRXhjZXB0LCBpZiB0aGUgc3ltYm9sIHRh
YmxlIGlzIGF0IHRoZSBidWlsdC1pbiBwdXNoLWxldmVsLAorLy8gd2hpY2ggaXMgd2hlbiB3ZSBh
cmUgcGFyc2luZyBidWlsdC1pbnMuCisvLyBBbHNvIGNoZWNrcyBmb3IgIndlYmdsXyIgYW5kICJf
d2ViZ2xfIiByZXNlcnZlZCBpZGVudGlmaWVycyBpZiBwYXJzaW5nIGEKKy8vIHdlYmdsIHNoYWRl
ci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5n
JiBpZGVudGlmaWVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9
ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKKyAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJ
bkxldmVsKCkpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDMpID09IFRTdHJp
bmcoImdsXyIpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImds
XyIsICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChzcGVjID09IEVTaFNwZWNXZWJHTCkgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vi
c3RyKDAsIDYpID09IFRTdHJpbmcoIndlYmdsXyIpKSB7CisgICAgICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5zdWJz
dHIoMCwgNykgPT0gVFN0cmluZygiX3dlYmdsXyIpKSB7CisgICAgICAgICAgICAgICAgZXJyb3Io
bGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpZGVudGlm
aWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgLy9lcnJvcihs
aW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJl
IHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7CisgICAgICAgICAgICAvL3JldHVy
biB0cnVlOworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5n
LCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVz
ZS4iLCBsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91
Z2ggZGF0YSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQKKy8vIHNvbWV0aGlu
ZyBvZiB0aGUgdHlwZSBvZiB0aGUgY29uc3RydWN0b3IuICBBbHNvIHJldHVybnMgdGhlIHR5cGUg
b2YKKy8vIHRoZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2Fz
IGFuIGVycm9yIGluIGNvbnN0cnVjdGlvbi4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0
cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYg
ZnVuY3Rpb24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5cGUpCit7CisgICAgKnR5cGUgPSBmdW5j
dGlvbi5nZXRSZXR1cm5UeXBlKCk7CisKKyAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZh
bHNlOworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBj
YXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgICAg
ICBjb25zdHJ1Y3RpbmdNYXRyaXggPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OiAKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3RlOiBJdCdzIG9r
YXkgdG8gaGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRv
IGhhdmUgdW51c2VkCisgICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3
aGVuIGVub3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAorICAgIC8vIGFnYWlu
LCB0aGVyZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0
cnVlLgorICAgIC8vCisKKyAgICBpbnQgc2l6ZSA9IDA7CisgICAgYm9vbCBjb25zdFR5cGUgPSB0
cnVlOworICAgIGJvb2wgZnVsbCA9IGZhbHNlOworICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsK
KyAgICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFsc2U7CisgICAgYm9vbCBhcnJheUFyZyA9IGZh
bHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyAr
K2kpIHsKKyAgICAgICAgc2l6ZSArPSBmdW5jdGlvbltpXS50eXBlLT5nZXRPYmplY3RTaXplKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIGZ1bmN0aW9uW2ld
LnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7Cisg
ICAgICAgIGlmIChmdWxsKQorICAgICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOworICAgICAgICBp
ZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+
PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCisgICAgICAgICAgICBmdWxsID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKGZ1bmN0aW9uW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQorICAg
ICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlvbltpXS50eXBl
LT5pc0FycmF5KCkpCisgICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChjb25zdFR5cGUpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25z
dCk7CisKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6ZSgpICE9
IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkg
Y29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0
cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJy
YXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtYXRyaXhJ
bk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQ
YXJhbUNvdW50KCkgIT0gMSkgeworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rpbmcg
bWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKG92ZXJGdWxsKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVu
dHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkg
JiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJz
IGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCF0eXBl
LT5pc01hdHJpeCgpKSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYm
IHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAorICAgICAgICAg
ICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6
ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92aWRl
ZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkID0g
bm9kZS0+Z2V0QXNUeXBlZCgpOworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChvcCAh
PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25z
dHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0eXBl
ZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fu
bm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24g
Y2hlY2tzIHRvIHNlZSBpZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJh
aXNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCisvLworLy8gcmV0dXJucyB0cnVl
IGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5j
X3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9kZSAo
Zm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Npb24g
b3Igbm90CisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlw
ZWQqIHR5cGUpCit7CisgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwg
dHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0b3IoKSkg
eworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIs
ICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhl
IGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QK
Ky8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJvcgorLy8KK2Jvb2wgVFBhcnNl
Q29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlw
ZSkKK3sKKyAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBU
eXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJi
b29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6
OnNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNv
bnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsK
KyAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUp
LCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CisgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgeworICAgICAgICBlcnJv
cihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIpOwor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUUHVibGljVHlwZSYgcFR5cGUpCit7CisgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0g
RXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBl
LnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCisgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0
U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3Ry
dWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwVHlwZS5xdWFsaWZp
ZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVjayhsaW5lLCBwVHlwZSwgInNhbXBs
ZXJzIG11c3QgYmUgdW5pZm9ybSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JD
aGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQor
eworICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQp
ICYmIAorICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElz
U2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAic2Ft
cGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygp
LCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCit7
CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAg
ICAgICAgVFR5cGVMaXN0JiBzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKnN0cnVjdHVyZVtpXS50eXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5IHR5cGUncyBz
aXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlw
ZWQqIGV4cHIsIGludCYgc2l6ZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3Rh
bnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoY29uc3RhbnQgPT0gMCB8
fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAi
IiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplID0gY29uc3Rh
bnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOworCisgICAgaWYgKHNpemUg
PD0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRp
dmUgaW50ZWdlciIsICIiLCAiIik7CisgICAgICAgIHNpemUgPSAxOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTZWUgaWYgdGhp
cyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVy
ZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIGV4dGVuc2lvbkVycm9yQ2hlY2sobGlu
ZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJy
YXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUg
dHlwZSkKK3sKKyAgICAvLworICAgIC8vIENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KKyAgICAv
LworICAgIGlmICh0eXBlLmFycmF5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5j
X3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIERvIGFsbCB0aGUgc2VtYW50aWMgY2hlY2tpbmcgZm9yIGRlY2xh
cmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6ZSwgYW5kIG1ha2UgdGhl
IHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBzaXplID09IDAgbWVh
bnMgbm8gc3BlY2lmaWVkIHNpemUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBh
biBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFy
aWFibGUpCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCB1
c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorICAg
IC8vIGJlY2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8vCisK
KyAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsK
KyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWls
dEluLCAmc2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgewor
ICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5hcnJh
eVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBl
LmFycmF5U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJs
ZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICAgICAg
ZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhcmlhYmxl
ID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKCEgdmFyaWFi
bGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRl
Y2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkp
KSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRo
IGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+
Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAgICAgICAgd2hpbGUgKHQgIT0gMCkgeworICAg
ICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKKyAg
ICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNl
ZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0LT5zZXRBcnJheVNp
emUodHlwZS5hcnJheVNpemUpOworICAgICAgICAgICAgdCA9IHQtPmdldEFycmF5SW5mb3JtYXRp
b25UeXBlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCisgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7
CisgICAgfSAKKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBl
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwgYm9vbCB1cGRhdGVGbGFnLCBUU291cmNlTG9jIGxpbmUpCit7Cisg
ICAgYm9vbCBidWlsdEluID0gZmFsc2U7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFi
bGUuZmluZChub2RlLT5nZXRTeW1ib2woKSwgJmJ1aWx0SW4pOworICAgIGlmIChzeW1ib2wgPT0g
MCkgeworICAgICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUt
PmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wp
OworCisgICAgdHlwZS0+c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUodmFyaWFibGUtPmdldEFycmF5
SW5mb3JtYXRpb25UeXBlKCkpOworICAgIHZhcmlhYmxlLT51cGRhdGVBcnJheUluZm9ybWF0aW9u
VHlwZSh0eXBlKTsKKworICAgIC8vIHNwZWNpYWwgY2FzaW5nIHRvIHRlc3QgaW5kZXggdmFsdWUg
b2YgZ2xfRnJhZ0RhdGEuIElmIHRoZSBhY2Nlc3NlZCBpbmRleCBpcyA+PSBnbF9NYXhEcmF3QnVm
ZmVycworICAgIC8vIGl0cyBhbiBlcnJvcgorICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAi
Z2xfRnJhZ0RhdGEiKSB7CisgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3ltYm9sVGFibGUu
ZmluZCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCAmYnVpbHRJbik7CisgICAgICAgIGlmIChmcmFnRGF0
YSA9PSAwKSB7CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsICJnbF9NYXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZnJhZ0RhdGFWYWx1
ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0Q29uc3RQb2ludGVyKClb
MF0uZ2V0SUNvbnN0KCk7CisgICAgICAgIGlmIChmcmFnRGF0YVZhbHVlIDw9IHNpemUpIHsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZl
IGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiLCAiIik7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHdlIGRvbnQg
d2FudCB0byB1cGRhdGUgdGhlIG1heEFycmF5U2l6ZSB3aGVuIHRoaXMgZmxhZyBpcyBub3Qgc2V0
LCB3ZSBqdXN0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIAorICAgIC8vIG5vZGUgdHlwZSBpbiB0aGUg
Y2hhaW4gb2Ygbm9kZSB0eXBlcyBzbyB0aGF0IGl0cyB1cGRhdGVkIHdoZW4gYSBoaWdoZXIgbWF4
QXJyYXlTaXplIGNvbWVzIGluLgorICAgIGlmICghdXBkYXRlRmxhZykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc2l6ZSsrOworICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0TWF4QXJy
YXlTaXplKHNpemUpOworICAgIHR5cGUtPnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICBUVHlw
ZSogdHQgPSB0eXBlOworCisgICAgd2hpbGUodHQtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkg
IT0gMCkgeworICAgICAgICB0dCA9IHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpOworICAg
ICAgICB0dC0+c2V0TWF4QXJyYXlTaXplKHNpemUpOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5cGUvcXVhbGlmaWVyIHJ1
bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSkKK3sKKyAgICAvLworICAgIC8vIE1ha2Ug
dGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgorICAgIC8vCisgICAgaWYgKHR5cGUucXVhbGlmaWVy
ID09IEV2cUNvbnN0KSB7CisgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9yYXJ5Owor
ICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVz
dCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBEbyBzZW1h
bnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBubyBpbml0
aWFsaXplciwKKy8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBSZXR1cm5z
IHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9u
SW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
JiB0eXBlKQoreworICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikp
CisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJs
ZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9u
IiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGRlbGV0ZSB2YXJp
YWJsZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZvaWRFcnJvckNo
ZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2so
aW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVy
LCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCAmJiBx
dWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZp
ZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KHF1YWxpZmllciksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChx
dWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmll
clN0cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFD
b25zdCkKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOwor
ICAgIGVsc2UKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25F
cnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHRlbnNpb24pCit7ICAgICAgIAorICAg
IGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNpb25dID09IEVCaFdhcm4pIHsKKyAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAoImV4dGVuc2lvbiAiICsgVFN0
cmluZyhleHRlbnNpb24pICsgIiBpcyBiZWluZyB1c2VkIikuY19zdHIoKSwgbGluZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGV4dGVuc2lvbkJlaGF2aW9yW2V4dGVu
c2lvbl0gPT0gRUJoRGlzYWJsZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwg
ZXh0ZW5zaW9uLCAiaXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisv
LyBOb24tRXJyb3JzLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gTG9v
ayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYW5kIG1ha2Ugc3VyZSBp
dCBpcyBhIGZ1bmN0aW9uLgorLy8KKy8vIFJldHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZv
dW5kLCBvdGhlcndpc2UgMC4KKy8vCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZp
bmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQorewor
ICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFu
Z2xlZE5hbWUoKSwgYnVpbHRJbik7CisKKyAgICBpZiAoc3ltYm9sID09IDApIHsgICAgICAgIAor
ICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3Vu
ZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGlmICghIHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIGVycm9yKGxp
bmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIi
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGNvbnN0IFRGdW5jdGlvbiog
ZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOworICAgIAor
ICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBzaG93IHVwIGlu
IHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCisvLyBjb2Rl
IHRvIGhhbmRsZSB0aGVtIGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5p
dGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlw
ZSYgcFR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUq
IHZhcmlhYmxlKQoreworICAgIFRUeXBlIHR5cGUgPSBUVHlwZShwVHlwZSk7CisKKyAgICBpZiAo
dmFyaWFibGUgPT0gMCkgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlk
ZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZvaWRF
cnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHBUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIGFkZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFi
bGUKKyAgICAgICAgLy8KKyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlm
aWVyLCB0eXBlKTsKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkp
IHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3Zlcnks
IGFuZCB0aGUgcG9vbCAKKyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUg
bWVtb3J5CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50aWZpZXIgbXVz
dCBiZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkKKyAgICAvLwor
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKTsKKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIg
IT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAgICAgICBlcnJv
cihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFy
aWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8KKyAgICAvLyB0ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNv
bnN0YW50CisgICAgLy8KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAg
ICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigp
KSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8i
LCAiPSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCkpOworICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICh0eXBlICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICIgbm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAK
KyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygp
LCAiIik7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7
CisKKyAgICAgICAgICAgIGlmICh0eXBlLmdldE9iamVjdFNpemUoKSA9PSAxICYmIHR5cGUuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgKnVuaW9uQXJyYXkg
PSAoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpKVswXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
aW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpKSB7CisgICAgICAgICAgICBjb25zdCBUU3lt
Ym9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5v
ZGUoKS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOworICAgICAg
ICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0i
LCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRl
bXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAK
KyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wq
IGludGVybVN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOwor
ICAgICAgICBpbnRlcm1Ob2RlID0gaW50ZXJtZWRpYXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXpl
LCBpbnRlcm1TeW1ib2wsIGluaXRpYWxpemVyLCBsaW5lKTsKKyAgICAgICAgaWYgKGludGVybU5v
ZGUgPT0gMCkgeworICAgICAgICAgICAgYXNzaWduRXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1i
b2wtPmdldENvbXBsZXRlU3RyaW5nKCksIGluaXRpYWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAg
ICAgICBpbnRlcm1Ob2RlID0gMDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFy
c2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQor
eworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBjaGVjayBpZiBh
bGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbnNl
cnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIGlmIChhZ2dyTm9kZSkgewor
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmNoaWxkU2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+
Z2V0U2VxdWVuY2UoKSA7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBw
ID0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAgIT0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrKSB7CisgICAg
ICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGFsbENvbnN0YW50OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBm
b3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNv
bnN0cnVjdG9yIGZ1bmN0aW9ucworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdo
dCBkYXRhdHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJu
cyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5
cGVkKSBmb3Igbm8gZXJyb3IuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdHJ1Y3RvcihUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRv
ciBvcCwgVEZ1bmN0aW9uKiBmbkNhbGwsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBpZiAobm9k
ZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JO
b2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBUVHlwZUxpc3Q6Oml0ZXJh
dG9yIG1lbWJlclR5cGVzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAg
ICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmJlZ2luKCk7CisgICAgCisgICAg
VFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAg
ICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOworCisgICAgYm9vbCBzaW5nbGVBcmc7
CisgICAgaWYgKGFnZ3JOb2RlKSB7CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0T3AoKSAhPSBF
T3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKQorICAgICAgICAg
ICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2luZ2xlQXJn
ID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisKKyAgICBU
SW50ZXJtVHlwZWQgKm5ld05vZGU7CisgICAgaWYgKHNpbmdsZUFyZykgeworICAgICAgICAvLyBJ
ZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3IgaXMgYmVpbmcgY2Fs
bGVkIAorICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lkZSB0aGUgc3RydWN0
dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9uIG9uY2UuCisgICAg
ICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0
U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Cisg
ICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5l
d05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBlcykudHlwZSwgMSwgbm9k
ZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNl
KTsKKworICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7
CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RD
b25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAg
ICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25z
dHJ1Y3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAg
ICAKKyAgICAvLworICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2Uo
KSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0
aGUgY29uc3RydWN0b3IKKyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRh
aW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2gg
cGFyYW1ldGVyCisgICAgCisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFj
ayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAor
ICAgIAorICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwg
Y2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0g
CisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAg
ICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQg
dHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVu
ZCgpOyBwKyssIHBhcmFtQ291bnQrKykgeworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQor
ICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBw
YXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9w
ID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSkudHlwZSwgcGFyYW1Db3VudCsxLCBu
b2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7
CisgICAgICAgIAorICAgICAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAgKnAgPSBuZXdO
b2RlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9
IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOwor
ICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9y
KGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgaWYgKGNvbnN0Q29u
c3RydWN0b3IpCisgICAgICAgIHJldHVybiBjb25zdENvbnN0cnVjdG9yOworCisgICAgcmV0dXJu
IGNvbnN0cnVjdG9yOworfQorCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25z
dENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlw
ZSkKK3sKKyAgICBib29sIGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7
CisgICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7CisgICAgaWYgKGNhbkJlRm9sZGVkKSB7Cisg
ICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7CisgICAgICAgIENvbnN0YW50VW5pb24qIHVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07CisgICAg
ICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsKKyAgICAgICAg
ICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0
TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRh
YmxlLCAgdHlwZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExp
bmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJs
ZSwgIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlv
bi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCisvLyBmb3Ig
dGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9u
KS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJl
Y3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlz
IHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KKy8v
CisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgorLy8K
K1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlw
ZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5l
LCBib29sIHN1YnNldCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJh
dG9yIGJhc2ljT3A7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5l
ZWRlZC4KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQz
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0
OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6
CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgor
ICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgor
ICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9u
IiwgIiIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2Rl
LCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKKyAgICBpZiAobmV3Tm9kZSA9PSAwKSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIiwgIiIp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhl
cmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3
ZSBuZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tp
cCBvdXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05v
ZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAg
Ly8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNv
bnN0cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVz
dHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0
cnVjdG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBl
IGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4K
Ky8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBp
ZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCisvLwor
VEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUq
IG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgVFNvdXJjZUxvYyBsaW5lLCBib29s
IHN1YnNldCkKK3sKKyAgICBpZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBl
KCkpIHsKKyAgICAgICAgaWYgKHN1YnNldCkKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRB
c1R5cGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QsIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3Ry
dWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwg
cGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUo
KS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLworLy8gVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVjdG9yIGZpZWxkKHMp
IGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBvbmx5IG9uZSBjb21w
b25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVyZSB2IGlzIGEgY29u
dGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlzCisvLyByZXR1cm5lZCwgZWxzZSBh
biBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUgaW5wdXQgdG8gdGhp
cyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9kZSBvciBpdCBjb3Vs
ZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWNjZXNzaW5nIGZp
ZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisvLyBhIGNvbnN0YW50
IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9y
Tm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxv
YyBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1wQ29uc3RhbnRO
b2RlKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOworCisgICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBlcnJv
ciBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSByYWlzZWQKKyAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGluaXRp
YWxpemVkIGluIGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7IC8vIFRoZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBh
biBhZ2dyZWdhdGUgbm9kZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJy
b3IKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwg
IkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W2ZpZWxkcy5udW1dOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKysp
IHsKKyAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3Ig
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAw
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJh
eVtmaWVsZHMub2Zmc2V0c1tpXV07CisKKyAgICB9IAorICAgIHR5cGVkTm9kZSA9IGludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7
CisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJu
cyB0aGUgY29sdW1uIGJlaW5nIGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2
YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10
cmVlIGlzIGJ1aWx0IGZvciBhIHZlY3RvciAoZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2
ZWN0b3IpLiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEg
c3ltYm9sIG5vZGUgKG1bMF0gd2hlcmUgbSBpcyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJl
c2VudHMgYSAKKy8vIGNvbnN0YW50IG1hdHJpeCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgbWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBj
b25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2Mg
bGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
CisgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7Cisg
ICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBv
ZiByYW5nZSAnJWQnIiwgaW5kZXgpOworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4
ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUt
PmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNh
bm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNv
dmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9k
ZTsKK30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVsZW1lbnQgb2YgYW4g
YXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUgdmFsdWVzIGFyZSByZXRy
aWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBm
b3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKKy8vIHRvIHRoZSBmdW5jdGlv
biBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVyZSBhIGlzIGEgY29uc3Rh
bnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBhcnJheSBvciBpdCBjb3Vs
ZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgYXJyYXkgKHMuYTFb
MF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkKKy8vCitUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBu
b2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Cisg
ICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlw
ZSgpOworICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIs
IGluZGV4KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9IDA7CisgICAgfQor
CisgICAgaW50IGFycmF5RWxlbWVudFNpemUgPSBhcnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNp
emUoKTsKKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1
bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdl
dFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5v
dCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292ZXIo
KTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOwor
fQorCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGlj
dWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRh
YmxlLiAKKy8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJv
cHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9t
QWdncgorLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFs
dWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBh
cnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5
cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSBu
b2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgVEludGVybVR5cGVkICp0eXBlZE5vZGU7
CisgICAgaW50IGluc3RhbmNlU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsK
KyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFz
Q29uc3RhbnRVbmlvbigpOworCisgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy0+
c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmICgoKmZpZWxkcylbaW5kZXhdLnR5cGUtPmdl
dEZpZWxkTmFtZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9ICgqZmllbGRzKVtpbmRleF0u
dHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRlbXBD
b25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1w
Q29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAgICB0eXBlZE5v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6
ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNo
YW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICB9IGVsc2UgeworICAgICAgICBlcnJv
cihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiLCAiIik7
CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHlwZWROb2RlOworfQorCisvLworLy8gSW5pdGlhbGl6ZSBhbGwgc3VwcG9ydGVkIGV4
dGVuc2lvbnMgdG8gZGlzYWJsZQorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6aW5pdGlhbGl6ZUV4
dGVuc2lvbkJlaGF2aW9yKCkKK3sKKyAgICAvLworICAgIC8vIGV4YW1wbGUgY29kZTogZXh0ZW5z
aW9uQmVoYXZpb3JbInRlc3QiXSA9IEVCaERpc2FibGU7IC8vIHdoZXJlICJ0ZXN0IiBpcyB0aGUg
bmFtZSBvZiAKKyAgICAvLyBzdXBwb3J0ZWQgZXh0ZW5zaW9uCisgICAgLy8KKyAgICBleHRlbnNp
b25CZWhhdmlvclsiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhSZXF1aXJlOworICAg
IGV4dGVuc2lvbkJlaGF2aW9yWyJHTF8zRExfYXJyYXlfb2JqZWN0cyJdID0gRUJoRGlzYWJsZTsK
K30KKworT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RM
U19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIGlm
IChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENv
bnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisgICAgR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisgICAgaWYg
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29u
dGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRl
eHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RM
U19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29u
dGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29u
dGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUo
R2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkg
eworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBh
cnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRo
cmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgeworICAgICAg
ICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8g
Y3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKKyAgICBP
U19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFy
c2VDb250ZXh0KCkKK3sKKyAgICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9y
IHNwZWVkCisgICAgLy8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCkpOworCisgICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEds
b2JhbFBhcnNlQ29udGV4dDsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBp
ZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAg
ICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRl
eCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFk
UGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7
CisgICAgaWYgKGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQor
eworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4Owor
CisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVY
KSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2Ug
Q29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRF
WDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1BBUlNF
Ul9IRUxQRVJfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxp
bnRlcm1lZGlhdGUuaCIKKworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVS
b3c7CisgICAgYm9vbCB3aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9Owor
Cit0eXBlZGVmIGVudW0geworICAgIEVCaFJlcXVpcmUsCisgICAgRUJoRW5hYmxlLAorICAgIEVC
aFdhcm4sCisgICAgRUJoRGlzYWJsZQorfSBUQmVoYXZpb3I7CisKK3N0cnVjdCBUUHJhZ21hIHsK
KyAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0K
KyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdtYVRhYmxlIHBy
YWdtYVRhYmxlOworfTsKKworLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxl
cyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KKy8vIHRoZXkgY2Fu
IGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KKy8vCitz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CisgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5
bXQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzLCBUSW5m
b1NpbmsmIGlzKSA6CisgICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwgc3ltYm9sVGFi
bGUoc3ltdCksIGluZm9TaW5rKGlzKSwgbGFuZ3VhZ2UobCksIHNwZWMocyksIHRyZWVSb290KDAp
LAorICAgICAgICAgICAgcmVjb3ZlcmVkRnJvbUVycm9yKGZhbHNlKSwgbnVtRXJyb3JzKDApLCBs
ZXhBZnRlclR5cGUoZmFsc2UpLCBsb29wTmVzdGluZ0xldmVsKDApLAorICAgICAgICAgICAgaW5U
eXBlUGFyZW4oZmFsc2UpLCBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSB7ICB9CisgICAgVElu
dGVybWVkaWF0ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNlIHRy
ZWUKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0aGF0
IGdvZXMgd2l0aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIFRJbmZv
U2luayYgaW5mb1Npbms7CisgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2U7ICAgICAgICAvLyB2ZXJ0
ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCisgICAgRVNo
U3BlYyBzcGVjOyAgICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBj
b21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgorICAgIFRJbnRlcm1Ob2RlKiB0
cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBi
b29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAgIC8vIHRydWUgaWYgYSBwYXJzZSBlcnJvciBoYXMg
b2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0byBwYXJzZQorICAgIGludCBudW1FcnJvcnM7Cisg
ICAgYm9vbCBsZXhBZnRlclR5cGU7ICAgICAgICAgICAvLyB0cnVlIGlmIHdlJ3ZlIHJlY29nbml6
ZWQgYSB0eXBlLCBzbyBjYW4gb25seSBiZSBsb29raW5nIGZvciBhbiBpZGVudGlmaWVyCisgICAg
aW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUgYWxsIGxvb3BzCisg
ICAgYm9vbCBpblR5cGVQYXJlbjsgICAgICAgICAgICAvLyB0cnVlIGlmIGluIHBhcmVudGhlc2Vz
LCBsb29raW5nIG9ubHkgZm9yIGFuIGlkZW50aWZpZXIKKyAgICBjb25zdCBUVHlwZSogY3VycmVu
dEZ1bmN0aW9uVHlwZTsgIC8vIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdz
IGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAg
IC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAgICBUTWFwPFRT
dHJpbmcsIFRCZWhhdmlvcj4gZXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgdm9pZCBpbml0aWFsaXpl
RXh0ZW5zaW9uQmVoYXZpb3IoKTsKKworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYywgY29uc3Qg
Y2hhciAqc3pSZWFzb24sIGNvbnN0IGNoYXIgKnN6VG9rZW4sCisgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpzekV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICBib29sIHJlc2VydmVkRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCByZWNv
dmVyKCk7CisKKyAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQg
dmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4
RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYsIGludCBs
aW5lKTsKKyAgICB2b2lkIGFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0
cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKKyAgICB2b2lkIHVuYXJ5T3BFcnJvcihpbnQgbGlu
ZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9pZCBiaW5hcnlPcEVy
cm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0
KTsKKyAgICBib29sIHByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJl
Y2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpOworICAgIGJvb2wgbFZhbHVlRXJyb3JDaGVjayhpbnQg
bGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgY29uc3RFcnJv
ckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJyb3JDaGVjayhU
SW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGdsb2JhbEVy
cm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbik7CisgICAg
Ym9vbCBjb25zdHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiwgVEZ1bmN0
aW9uJiwgVE9wZXJhdG9yLCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhp
bnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJvb2wgYXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKKyAgICBib29s
IGFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJv
b2wgYXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCB2b2lkRXJyb3JDaGVj
ayhpbnQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOworICAgIGJvb2wgYm9v
bEVycm9yQ2hlY2soaW50LCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKKyAgICBib29sIGJvb2xFcnJv
ckNoZWNrKGludCwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNhbXBsZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNv
bik7CisgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
UHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2so
aW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7CisgICAg
Ym9vbCBjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0
RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5
cGUpOworICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKTsKKyAgICBib29sIHBhcmFtRXJyb3JDaGVjayhpbnQg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKTsKKyAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IGNoYXIqKTsKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1
bmN0aW9uKiBwZm5DYWxsLCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5p
dGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlw
ZSYgcFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0
aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlID0g
MCk7CisgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2Rl
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29uc3Qg
VFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1U
eXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNv
bnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdFN0cnVjdChUSW50
ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBUU291cmNlTG9jLCBib29sIHN1YnNldCk7CisgICAgVElu
dGVybVR5cGVkKiBjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBUSW50
ZXJtTm9kZSosIFRTb3VyY2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFk
ZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5
cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShp
bnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5cGVkKiwgVFNvdXJj
ZUxvYyk7CisgICAgYm9vbCBhcnJheVNldE1heFNpemUoVEludGVybVN5bWJvbCosIFRUeXBlKiwg
aW50LCBib29sLCBUU291cmNlTG9jKTsKKyAgICBzdHJ1Y3QgVFByYWdtYSBjb250ZXh0UHJhZ21h
OworICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKKyAgICBib29sIEFmdGVyRU9GOworfTsKKworaW50
IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltdLCBpbnQgYXJnYywgVFBh
cnNlQ29udGV4dCYpOwordm9pZCBQYVJlc2VydmVkV29yZCgpOworaW50IFBhSWRlbnRPclR5cGUo
VFN0cmluZyYgaWQsIFRQYXJzZUNvbnRleHQmLCBUU3ltYm9sKiYpOworaW50IFBhUGFyc2VDb21t
ZW50KGludCAmbGluZW5vLCBUUGFyc2VDb250ZXh0Jik7Cit2b2lkIHNldEluaXRpYWxTdGF0ZSgp
OworCit0eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOworZXh0ZXJu
IFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyNkZWZpbmUg
R2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCisKK3R5cGVkZWYgc3Ry
dWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKK3sKKyAgICBUUGFyc2VDb250ZXh0ICpscEdsb2Jh
bFBhcnNlQ29udGV4dDsKK30gVFRocmVhZFBhcnNlQ29udGV4dDsKKworI2VuZGlmIC8vIF9QQVJT
RVJfSEVMUEVSX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9Qb29sQWxsb2MuaCIKKworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0ZGludC5oPgor
I2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emVHbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0lu
ZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCit2b2lkIEluaXRpYWxpemVH
bG9iYWxQb29scygpCit7CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiBnbG9iYWxQb29scz0gc3Rh
dGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7
ICAgIAorICAgIGlmIChnbG9iYWxQb29scykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFBvb2xB
bGxvY2F0b3IgKmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7
CisKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBuZXcgVFRocmVhZEdsb2Jh
bFBvb2xzKCk7CisgICAgCisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvciA9IGds
b2JhbFBvb2xBbGxvY2F0b3I7CisgICAgICAgIAorICAgIE9TX1NldFRMU1ZhbHVlKFBvb2xJbmRl
eCwgdGhyZWFkRGF0YSk7ICAgICAKKyAgICBnbG9iYWxQb29sQWxsb2NhdG9yLT5wdXNoKCk7Cit9
CisKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBhbGxvY2F0
ZWQgbWVtb3J5IGZvciB0aGlzIHRocmVhZC4KKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIGdsb2Jh
bFBvb2xzPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQ
b29sSW5kZXgpKTsgICAgCisgICAgaWYgKCFnbG9iYWxQb29scykKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucG9wQWxsKCk7CisgICAgZGVsZXRlICZHbG9i
YWxQb29sQWxsb2NhdG9yOyAgICAgICAKKyAgICBkZWxldGUgZ2xvYmFsUG9vbHM7Cit9CisKK2Jv
b2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpCit7CisgICAgLy8gQWxsb2NhdGUgYSBUTFMgaW5kZXgu
CisgICAgaWYgKChQb29sSW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCkpID09IE9TX0lOVkFMSURf
VExTX0lOREVYKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBGcmVlUG9vbEluZGV4KCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBUTFMgaW5kZXgu
CisgICAgT1NfRnJlZVRMU0luZGV4KFBvb2xJbmRleCk7Cit9CisKK1RQb29sQWxsb2NhdG9yJiBH
ZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVh
ZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQ
b29sSW5kZXgpKTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRv
cjsKK30KKwordm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFRQb29sQWxsb2NhdG9yKiBw
b29sQWxsb2NhdG9yKQoreworICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IHN0
YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkp
OworCisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvciA9IHBvb2xBbGxvY2F0b3I7
Cit9CisKKy8vCisvLyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxs
b2NhdG9yIGNsYXNzLCB3aGljaAorLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KKy8v
CitUUG9vbEFsbG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoYm9vbCBnLCBpbnQgZ3Jvd3RoSW5jcmVt
ZW50LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKKyAgICBnbG9iYWwoZyksCisgICAgcGFn
ZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1lbnQoYWxsb2NhdGlvbkFsaWdubWVu
dCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0KDApLAorICAgIG51bUNhbGxzKDAp
Cit7CisgICAgLy8KKyAgICAvLyBEb24ndCBhbGxvdyBwYWdlIHNpemVzIHdlIGtub3cgYXJlIHNt
YWxsZXIgdGhhbiBhbGwgY29tbW9uCisgICAgLy8gT1MgcGFnZSBzaXplcy4KKyAgICAvLworICAg
IGlmIChwYWdlU2l6ZSA8IDQqMTAyNCkKKyAgICAgICAgcGFnZVNpemUgPSA0KjEwMjQ7CisKKyAg
ICAvLworICAgIC8vIEEgbGFyZ2UgY3VycmVudFBhZ2VPZmZzZXQgaW5kaWNhdGVzIGEgbmV3IHBh
Z2UgbmVlZHMgdG8KKyAgICAvLyBiZSBvYnRhaW5lZCB0byBhbGxvY2F0ZSBtZW1vcnkuCisgICAg
Ly8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOworCisgICAgLy8KKyAgICAvLyBB
ZGp1c3QgYWxpZ25tZW50IHRvIGJlIGF0IGxlYXN0IHBvaW50ZXIgYWxpZ25lZCBhbmQKKyAgICAv
LyBwb3dlciBvZiAyLgorICAgIC8vCisgICAgc2l6ZV90IG1pbkFsaWduID0gc2l6ZW9mKHZvaWQq
KTsKKyAgICBhbGlnbm1lbnQgJj0gfihtaW5BbGlnbiAtIDEpOworICAgIGlmIChhbGlnbm1lbnQg
PCBtaW5BbGlnbikKKyAgICAgICAgYWxpZ25tZW50ID0gbWluQWxpZ247CisgICAgc2l6ZV90IGEg
PSAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KQorICAgICAgICBhIDw8PSAxOworICAgIGFs
aWdubWVudCA9IGE7CisgICAgYWxpZ25tZW50TWFzayA9IGEgLSAxOworCisgICAgLy8KKyAgICAv
LyBBbGlnbiBoZWFkZXIgc2tpcAorICAgIC8vCisgICAgaGVhZGVyU2tpcCA9IG1pbkFsaWduOwor
ICAgIGlmIChoZWFkZXJTa2lwIDwgc2l6ZW9mKHRIZWFkZXIpKSB7CisgICAgICAgIGhlYWRlclNr
aXAgPSAoc2l6ZW9mKHRIZWFkZXIpICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsK
KyAgICB9Cit9CisKK1RQb29sQWxsb2NhdG9yOjp+VFBvb2xBbGxvY2F0b3IoKQoreworICAgIGlm
ICghZ2xvYmFsKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZW4gd2Uga25vdyB0aGF0IHRo
aXMgb2JqZWN0IGlzIG5vdCBiZWluZyAKKyAgICAgICAgLy8gYWxsb2NhdGVkIGFmdGVyIG90aGVy
LCBnbG9iYWxseSBzY29wZWQgb2JqZWN0cworICAgICAgICAvLyB0aGF0IGRlcGVuZCBvbiBpdC4g
IFNvIHdlIGNhbiBkZWxldGUgdGhlICJpbiB1c2UiIG1lbW9yeS4KKyAgICAgICAgLy8KKyAgICAg
ICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAgICAgICAgdEhlYWRlciogbmV4dCA9IGluVXNl
TGlzdC0+bmV4dFBhZ2U7CisgICAgICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAg
ICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0KTsKKyAg
ICAgICAgICAgIGluVXNlTGlzdCA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGZyZWUgbGlzdCBtZW1vcnkgLSBpdCBjYW4ndCBiZSBi
ZWluZworICAgIC8vIChjb3JyZWN0bHkpIHJlZmVyZW5jZWQsIHdoZXRoZXIgdGhlIHBvb2wgYWxs
b2NhdG9yIHdhcworICAgIC8vIGdsb2JhbCBvciBub3QuICBXZSBzaG91bGQgbm90IGNoZWNrIHRo
ZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHdlIGRpZCBpdCBhbHJlYWR5IHdo
ZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBsYWNlZCBpbnRvIHRoZSBmcmVlIGxpc3QuCisgICAg
Ly8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsKKyAgICAgICAgdEhlYWRlciogbmV4dCA9IGZyZWVM
aXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxpc3QgPSBuZXh0OworICAgIH0KK30KKworLy8gU3Vw
cG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJs
b2NrQmVnaW5WYWwgPSAweGZiOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3Vh
cmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246
OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7CisKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBj
b25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMTY7CisjZWxzZQorICAg
IGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAwOworI2VuZGlmCisK
Ky8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFyZCBibG9jayBmb3IgZGFtYWdlCisvLwordm9pZCBU
QWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNp
Z25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkgY29uc3QKK3sKKyAgICBmb3IgKHNp
emVfdCB4ID0gMDsgeCA8IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAgaWYgKGJsb2Nr
TWVtW3hdICE9IHZhbCkgeworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOworCisgICAg
ICAgICAgICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUg
anVzdCB0byBiZSBoZWxwZnVsLgorICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29s
QWxsb2M6IERhbWFnZSAlcyAldSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAg
ICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKKyAgICAgICAgICAgIGFzc2VydCgw
ICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOworICAgICAgICB9CisgICAg
fQorfQorCisKK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnB1c2goKQoreworICAgIHRBbGxvY1N0YXRl
IHN0YXRlID0geyBjdXJyZW50UGFnZU9mZnNldCwgaW5Vc2VMaXN0IH07CisKKyAgICBzdGFjay5w
dXNoX2JhY2soc3RhdGUpOworICAgICAgICAKKyAgICAvLworICAgIC8vIEluZGljYXRlIHRoZXJl
IGlzIG5vIGN1cnJlbnQgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgIC8vCisgICAgY3VycmVu
dFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRp
b24gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJy
ZWQgc2luY2UgdGhlIGxhc3QgcHVzaCgpLCBvciBzaW5jZSB0aGUKKy8vIGxhc3QgcG9wKCksIG9y
IHNpbmNlIHRoZSBvYmplY3QncyBjcmVhdGlvbi4KKy8vCisvLyBUaGUgZGVhbGxvY2F0ZWQgcGFn
ZXMgYXJlIHNhdmVkIGZvciBmdXR1cmUgYWxsb2NhdGlvbnMuCisvLwordm9pZCBUUG9vbEFsbG9j
YXRvcjo6cG9wKCkKK3sKKyAgICBpZiAoc3RhY2suc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdEhlYWRlciogcGFnZSA9IHN0YWNrLmJhY2soKS5wYWdlOworICAgIGN1cnJlbnRQ
YWdlT2Zmc2V0ID0gc3RhY2suYmFjaygpLm9mZnNldDsKKworICAgIHdoaWxlIChpblVzZUxpc3Qg
IT0gcGFnZSkgeworICAgICAgICAvLyBpbnZva2UgZGVzdHJ1Y3RvciB0byBmcmVlIGFsbG9jYXRp
b24gbGlzdAorICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAgICAgIAorICAgICAg
ICB0SGVhZGVyKiBuZXh0SW5Vc2UgPSBpblVzZUxpc3QtPm5leHRQYWdlOworICAgICAgICBpZiAo
aW5Vc2VMaXN0LT5wYWdlQ291bnQgPiAxKQorICAgICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aW5Vc2VMaXN0LT5uZXh0UGFnZSA9IGZyZWVMaXN0OworICAgICAgICAgICAgZnJlZUxpc3QgPSBp
blVzZUxpc3Q7CisgICAgICAgIH0KKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dEluVXNlOworICAg
IH0KKworICAgIHN0YWNrLnBvcF9iYWNrKCk7Cit9CisKKy8vCisvLyBEbyBhIG1hc3MtZGVhbGxv
Y2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhhdCBoYXZlIG9j
Y3VycmVkLgorLy8KK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnBvcEFsbCgpCit7CisgICAgd2hpbGUg
KHN0YWNrLnNpemUoKSA+IDApCisgICAgICAgIHBvcCgpOworfQorCit2b2lkKiBUUG9vbEFsbG9j
YXRvcjo6YWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKQoreworICAgIC8vIElmIHdlIGFyZSB1c2lu
ZyBndWFyZCBibG9ja3MsIGFsbCBhbGxvY2F0aW9ucyBhcmUgYnJhY2tldGVkIGJ5CisgICAgLy8g
dGhlbTogW2d1YXJkYmxvY2tdW2FsbG9jYXRpb25dW2d1YXJkYmxvY2tdLiAgbnVtQnl0ZXMgaXMg
aG93CisgICAgLy8gbXVjaCBtZW1vcnkgdGhlIGNhbGxlciBhc2tlZCBmb3IuICBhbGxvY2F0aW9u
U2l6ZSBpcyB0aGUgdG90YWwKKyAgICAvLyBzaXplIGluY2x1ZGluZyBndWFyZCBibG9ja3MuICBJ
biByZWxlYXNlIGJ1aWxkLAorICAgIC8vIGd1YXJkQmxvY2tTaXplPTAgYW5kIHRoaXMgYWxsIGdl
dHMgb3B0aW1pemVkIGF3YXkuCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gVEFsbG9jYXRp
b246OmFsbG9jYXRpb25TaXplKG51bUJ5dGVzKTsKKyAgICAKKyAgICAvLworICAgIC8vIEp1c3Qg
a2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgICAgLy8KKyAgICArK251bUNhbGxz
OworICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7CisKKyAgICAvLworICAgIC8vIERvIHRoZSBh
bGxvY2F0aW9uLCBtb3N0IGxpa2VseSBjYXNlIGZpcnN0LCBmb3IgZWZmaWNpZW5jeS4KKyAgICAv
LyBUaGlzIHN0ZXAgY291bGQgYmUgbW92ZWQgdG8gYmUgaW5saW5lIHNvbWV0aW1lLgorICAgIC8v
CisgICAgaWYgKGN1cnJlbnRQYWdlT2Zmc2V0ICsgYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUp
IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2FmZSB0byBhbGxvY2F0ZSBmcm9tIGN1cnJlbnRQ
YWdlT2Zmc2V0LgorICAgICAgICAvLworICAgICAgICB1bnNpZ25lZCBjaGFyKiBtZW1vcnkgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGN1cnJlbnRQYWdl
T2Zmc2V0OworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCArPSBhbGxvY2F0aW9uU2l6ZTsKKyAg
ICAgICAgY3VycmVudFBhZ2VPZmZzZXQgPSAoY3VycmVudFBhZ2VPZmZzZXQgKyBhbGlnbm1lbnRN
YXNrKSAmIH5hbGlnbm1lbnRNYXNrOworCisgICAgICAgIHJldHVybiBpbml0aWFsaXplQWxsb2Nh
dGlvbihpblVzZUxpc3QsIG1lbW9yeSwgbnVtQnl0ZXMpOworICAgIH0KKworICAgIGlmIChhbGxv
Y2F0aW9uU2l6ZSArIGhlYWRlclNraXAgPiBwYWdlU2l6ZSkgeworICAgICAgICAvLworICAgICAg
ICAvLyBEbyBhIG11bHRpLXBhZ2UgYWxsb2NhdGlvbi4gIERvbid0IG1peCB0aGVzZSB3aXRoIHRo
ZSBvdGhlcnMuCisgICAgICAgIC8vIFRoZSBPUyBpcyBlZmZpY2llbnQgYW5kIGFsbG9jYXRpbmcg
YW5kIGZyZWUtaW5nIG11bHRpcGxlIHBhZ2VzLgorICAgICAgICAvLworICAgICAgICBzaXplX3Qg
bnVtQnl0ZXNUb0FsbG9jID0gYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwOworICAgICAgICB0
SGVhZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW251
bUJ5dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhl
YWRlcgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5dGVzVG9B
bGxvYyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNlTGlzdCA9IG1l
bW9yeTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8gbWFrZSBu
ZXh0IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAvLyBObyBndWFy
ZCBibG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtZW1v
cnkpICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEgc2ltcGxl
IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1lbW9yeTsKKyAg
ICBpZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7CisgICAgICAgIGZy
ZWVMaXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbW9y
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVdKTsKKyAg
ICAgICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICBuZXcobWVt
b3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworICAg
IAorICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
ciAqPihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9mZnNldCA9ICho
ZWFkZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRN
YXNrOworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgcmV0LCBu
dW1CeXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBhIGxpc3Qg
Zm9yIGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBUQWxsb2NhdGlv
bjo6Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFsbG9jYXRpb24q
IGFsbG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9jKQorICAg
ICAgICBhbGxvYy0+Y2hlY2soKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjk2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9QT09MQUxMT0Nf
SU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisKKyNpZmRlZiBfREVCVUcK
KyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2NrIHNh
bml0eSBjaGVja2luZworI2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFuIGFs
bG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5CisvLyBhbGxvY2F0ZSBhIGxh
cmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhlIAor
Ly8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRlZCwg
YnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4KKy8v
CisvLyBUaGlzIHNpbXVsdGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1YWwg
YWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAgICB0eXBpY2FsIGFsbG9j
YXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2YgZG9p
bmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9mIHRy
YWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCisvLworLy8g
SW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5nIHRo
ZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisvLyBTVEwgY29udGFpbmVy
cyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgorLy8g
Y2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KKy8vCisK
KyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sgZWFj
aCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBibG9j
a3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFueSBp
bXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9jYXRpb24geworcHVibGljOgorICAgIFRBbGxvY2F0
aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2ID0g
MCkgOgorICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsKKyAg
ICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAgICAgLy8gICAgW2FsbG9j
YXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJsb2Nr
XQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9ja1Np
emUpLi4uLCBidXQgdGhhdAorICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgd2Fy
bmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8gZXZlbiB3aXRoIHRoZSBp
ZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgbWVtc2V0
KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOworICAgICAg
ICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7CisgICAgICAg
IG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6ZSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3QgeworICAgICAgICBjaGVj
a0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIpOwor
ICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAg
ImFmdGVyIik7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0OworCisg
ICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZmZXIg
b2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCisgICAgaW5saW5lIHN0
YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmV0dXJu
IHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCisgICAg
Ly8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEgYnVm
ZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlvbih1
bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUgKyBo
ZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tHdWFyZEJsb2Nr
KHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciog
bG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0IGd1
YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNpZ25lZCBjaGFyKiBwcmVH
dWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KKyAgICB1bnNpZ25l
ZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRCbG9j
a1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVybiBk
YXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAvLyBz
aXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAgICAg
ICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikKKyAgICBU
QWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRoZSBj
aGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29uc3Qgc3RhdGljIHVuc2ln
bmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXNl
ckRhdGFGaWxsOworCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsKKyNp
ZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkg
eyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAgICBpbmxpbmUgc3RhdGlj
IHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCit9OworCisvLworLy8g
VGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5nIGFu
ZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBUaGUg
b3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9yIHVz
ZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGEg
c2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNoIGFsbG9jYXRpb24gb2J0
YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMKKy8v
IGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMgYXJl
IGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAicGFnZSBzaXplIiB1c2Vk
IGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCisvLyBwYWdlIHNp
emUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBzZXQg
b2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8KK2NsYXNzIFRQb29sQWxs
b2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9vbEFsbG9jYXRvcihib29sIGdsb2JhbCA9IGZhbHNl
LCBpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9
IDE2KTsKKworICAgIC8vCisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRv
IGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2Nh
dG9yKCk7CisKKyAgICAvLworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBw
bGFjZSB0byBwb3AgbWVtb3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxs
ZWQgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAg
ICAvLworICAgIC8vIENhbGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5j
ZSB0aGUgbGFzdCBjYWxsIHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8g
cHVzaCwgZnJlZXMgYWxsIG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisg
ICAgdm9pZCBwb3AoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFs
bCBtZW1vcnkgYWxsb2NhdGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8v
CisgICAgLy8gQ2FsbCBhbGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0
dXJucyAwIGlmIG5vIG1lbW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVy
bHkgYWxpZ25lZCBwb2ludGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUg
aXMgbm8gZGVhbGxvY2F0ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAv
LyBkZWFsbG9jYXRpb24gY2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBt
b2RlbAorICAgIC8vIG9mIHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5
dGhpbmcgYXQgb25jZQorICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0
byBzb2x2ZSBtZW1vcnkgbGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIHN0cnVjdCB0SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAg
ICAgdEhlYWRlcih0SGVhZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorI2lmZGVm
IEdVQVJEX0JMT0NLUworICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24oMCksCisjZW5kaWYKKyAg
ICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwKKyAgICAgICAgICAgIHBhZ2VDb3VudChwYWdl
Q291bnQpIHsgfQorCisgICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJEX0JMT0NLUwor
ICAgICAgICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RBbGxv
Y2F0aW9uLT5jaGVja0FsbG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB0
SGVhZGVyKiBuZXh0UGFnZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRlZiBHVUFS
RF9CTE9DS1MKKyAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOworI2VuZGlmCisg
ICAgfTsKKworICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQ7
CisgICAgICAgIHRIZWFkZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PHRBbGxvY1N0YXRlPiB0QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlm
IGFuZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQqIGluaXRpYWxp
emVBbGxvY2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVf
dCBudW1CeXRlcykgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXcobWVtb3J5KSBU
QWxsb2NhdGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOworICAg
ICAgICBibG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9u
Kj4obWVtb3J5KTsKKyNlbmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVs
eSBhd2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAgcmV0dXJuIFRB
bGxvY2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisgICAgYm9vbCBn
bG9iYWw7ICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHRydWUgaWYgdGhpcyBvYmplY3QgaXMgZ2xv
YmFsbHkgc2NvcGVkCisgICAgc2l6ZV90IHBhZ2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkg
b2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUworICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8v
IGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBv
d2VyIG9mIDIKKyAgICBzaXplX3QgYWxpZ25tZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tp
cDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBz
aXplIG9mIGhlYWRlciwgcm91bmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCisgICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAg
Ly8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGluVXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAg
dEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8gbGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhl
YWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlzdCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWlu
ZyB1c2VkCisgICAgdEFsbG9jU3RhY2sgc3RhY2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8g
YWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9uIHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAg
ICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFs
Qnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6Cisg
ICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9yPShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8g
ZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3Qg
VFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9y
Cit9OworCisKKy8vCisvLyBUaGVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdp
dGggcG9wcyBoYXBwZW5pbmcgYXQKKy8vIGRpZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1
c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AKKy8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNh
bWUgZ2xvYmFsIGFsbG9jYXRvci4KKy8vCit0eXBlZGVmIFRQb29sQWxsb2NhdG9yKiBQb29sQWxs
b2NhdG9yUG9pbnRlcjsKK2V4dGVybiBUUG9vbEFsbG9jYXRvciYgR2V0R2xvYmFsUG9vbEFsbG9j
YXRvcigpOworI2RlZmluZSBHbG9iYWxQb29sQWxsb2NhdG9yIEdldEdsb2JhbFBvb2xBbGxvY2F0
b3IoKQorCisKK3N0cnVjdCBUVGhyZWFkR2xvYmFsUG9vbHMKK3sKKyAgICBUUG9vbEFsbG9jYXRv
ciogZ2xvYmFsUG9vbEFsbG9jYXRvcjsKK307CisKK3ZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRv
clB0cihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcik7CisKKy8vCisvLyBUaGlzIFNUTCBj
b21wYXRpYmxlIGFsbG9jYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxvY2F0
b3IKKy8vIHBhcmFtZXRlciB0byB0ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2ZWN0
b3IgYW5kIG1hcC4KKy8vCisvLyBJdCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRpb24s
IGFuZCBub3QKKy8vIGRvIGFueSBkZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRlc3Ry
dWN0aW9uLgorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBwb29sX2FsbG9jYXRvciB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CisgICAgdHlwZWRl
ZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOworICAg
IHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90
eXBlOworCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+IAorICAgIHN0cnVjdCByZWJpbmQgewor
ICAgICAgICB0eXBlZGVmIHBvb2xfYWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKKyAgICB9OworICAg
IHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKyAgICBj
b25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4
OyB9CisKKyAgICBwb29sX2FsbG9jYXRvcigpIDogYWxsb2NhdG9yKEdsb2JhbFBvb2xBbGxvY2F0
b3IpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRv
cihhKSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgcCkg
OiBhbGxvY2F0b3IocC5hbGxvY2F0b3IpIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+
CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6IGFs
bG9jYXRvcihwLmdldEFsbG9jYXRvcigpKSB7IH0KKworICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6
ZV90eXBlIG4pIHsgCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdl
dEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKKyAgICB9CisgICAgcG9pbnRl
ciBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsgCisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXpl
b2YoVCkpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkg
eyB9CisgICAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIsIHNpemVfdHlwZSkgeyB9CisKKyAgICBw
b2ludGVyIF9DaGFyYWxsb2Moc2l6ZV90IG4pIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobikpOworICAgIH0KKworICAg
IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilw
KSBUKHZhbCk7IH0KKyAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7
IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAm
Z2V0QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorCisgICAgc2l6ZV90eXBl
IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLyBz
aXplb2YoVCk7IH0KKyAgICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQorCisgICAgdm9pZCBzZXRB
bGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEpIHsgYWxsb2NhdG9yID0gKmE7IH0KKyAgICBUUG9v
bEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBUUG9vbEFsbG9jYXRvciYgYWxsb2NhdG9yOworfTsKKworI2VuZGlm
IC8vIF9QT09MQUxMT0NfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlm
aWVyQWxpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJB
bGl2ZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxp
dmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRBbGl2ZVRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUQWxpdmVUcmF2
ZXJzZXIoVFF1YWxpZmllciBxKSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNl
LCB0cnVlKSwgZm91bmQoZmFsc2UpLCBxdWFsaWZpZXIocSkKKyAgICB7CisgICAgfQorCisJYm9v
bCB3YXNGb3VuZCgpIHsgcmV0dXJuIGZvdW5kOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGZv
dW5kOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworCisgICAgdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNl
bGVjdGlvbiopOworfTsKKworLy8KKy8vIFJlcG9ydCB3aGV0aGVyIG9yIG5vdCBhIHZhcmlhYmxl
IG9mIHRoZSBnaXZlbiBxdWFsaWZpZXIgdHlwZQorLy8gaXMgZ3VhcmFudGVlZCB3cml0dGVuLiAg
Tm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgaWYKKy8vIGl0IGlzIHdyaXR0ZW4gY29u
ZGl0aW9uYWxseS4KKy8vCisvLyA/PyBJdCBkb2VzIG5vdCBkbyB0aGlzIHdlbGwgeWV0LCB0aGlz
IGlzIGp1c3QgYSBwbGFjZSBob2xkZXIKKy8vIHRoYXQgc2ltcGx5IGRldGVybWluZXMgaWYgaXQg
d2FzIHJlZmVyZW5jZSBhdCBhbGwsIGFueXdoZXJlLgorLy8KK2Jvb2wgUXVhbGlmaWVyV3JpdHRl
bihUSW50ZXJtTm9kZSogbm9kZSwgVFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgVEFsaXZl
VHJhdmVyc2VyIGl0KHF1YWxpZmllcik7CisKKyAgICBpZiAobm9kZSkKKyAgICAgICAgbm9kZS0+
dHJhdmVyc2UoJml0KTsKKworICAgIHJldHVybiBpdC53YXNGb3VuZCgpOworfQorCit2b2lkIFRB
bGl2ZVRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICAv
LworICAgIC8vIElmIGl0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgcmVjb3JkIGl0LgorICAg
IC8vCisgICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IHF1YWxpZmllcikKKyAgICAgICAg
Zm91bmQgPSB0cnVlOworfQorCitib29sIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgcHJlVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaWYgKHdhc0Zv
dW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCitib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUq
IHJvb3QsIFRRdWFsaWZpZXIpOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKKwor
Ly8KKy8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4K
Ky8vCisKK2NsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVi
bGljOgorCVJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
KQorCXsKKwl9CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jv
b2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5v
ZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVU
cmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAg
ZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxl
dGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2Vs
ZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBu
b2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQor
CisvLworLy8gRW50cnkgcG9pbnQuCisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVy
bU5vZGUqIHJvb3QpCit7CisgICAgUmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNl
KCZpdCk7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVy
bU5vZGUqKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1NISEFORExFX0lOQ0xVREVEXworI2RlZmluZSBf
U0hIQU5ETEVfSU5DTFVERURfCisKKy8vCisvLyBNYWNoaW5lIGluZGVwZW5kZW50IHBhcnQgb2Yg
dGhlIGNvbXBpbGVyIHByaXZhdGUgb2JqZWN0cworLy8gc2VudCBhcyBTaEhhbmRsZSB0byB0aGUg
ZHJpdmVyLgorLy8KKy8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29k
ZS4KKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFRJbnRlcm1Ob2Rl
OworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQg
dG8gdGhlIGRyaXZlci4KKy8vCitjbGFzcyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBU
U2hIYW5kbGVCYXNlKCkgeyB9CisgICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsgfQorICAg
IHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQorfTsKKwor
Ly8KKy8vIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIg
dG8gZGVyaXZlIGZyb20KKy8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21w
aWxlLgorLy8KK2NsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1Ymxp
YzoKKyAgICBUQ29tcGlsZXIoRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzKSA6IGxhbmd1YWdlKGwp
LCBzcGVjKHMpIHsgfQorICAgIHZpcnR1YWwgflRDb21waWxlcigpIHsgfQorCisgICAgRVNoTGFu
Z3VhZ2UgZ2V0TGFuZ3VhZ2UoKSB7IHJldHVybiBsYW5ndWFnZTsgfQorICAgIEVTaFNwZWMgZ2V0
U3BlYygpIHsgcmV0dXJuIHNwZWM7IH0KKyAgICB2aXJ0dWFsIFRJbmZvU2luayYgZ2V0SW5mb1Np
bmsoKSB7IHJldHVybiBpbmZvU2luazsgfQorCisgICAgdmlydHVhbCBib29sIGNvbXBpbGUoVElu
dGVybU5vZGUqIHJvb3QpID0gMDsKKworICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBp
bGVyKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgVEluZm9TaW5rIGluZm9TaW5rOworcHJvdGVj
dGVkOgorICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlOworICAgIEVTaFNwZWMgc3BlYzsKK307CisK
Ky8vCisvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbWFjaGluZSBpbmRlcGVu
ZGVudCBjb2RlCisvLyBhbmQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUuCisvLworLy8gVGhl
IG1hY2hpbmUgZGVwZW5kZW50IGNvZGUgc2hvdWxkIGRlcml2ZSBmcm9tIHRoZSBjbGFzc2VzCisv
LyBhYm92ZS4gVGhlbiBDb25zdHJ1Y3QqKCkgYW5kIERlbGV0ZSooKSB3aWxsIGNyZWF0ZSBhbmQg
CisvLyBkZXN0cm95IHRoZSBtYWNoaW5lIGRlcGVuZGVudCBvYmplY3RzLCB3aGljaCBjb250YWlu
IHRoZQorLy8gYWJvdmUgbWFjaGluZSBpbmRlcGVuZGVudCBpbmZvcm1hdGlvbi4KKy8vCitUQ29t
cGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsKK3ZvaWQgRGVs
ZXRlQ29tcGlsZXIoVENvbXBpbGVyKik7CisKKyNlbmRpZiAvLyBfU0hIQU5ETEVfSU5DTFVERURf
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9m
IGludGVyZmFjZSB0byB0aGUgY29tcGlsZXIsCisvLyBhcyBkZWZpbmVkIGluIFNoYWRlckxhbmcu
aAorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVEbGwuaCIK
KyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKworLy8KKy8vIEEg
c3ltYm9sIHRhYmxlIGZvciBlYWNoIGxhbmd1YWdlLiAgRWFjaCBoYXMgYSBkaWZmZXJlbnQKKy8v
IHNldCBvZiBidWlsdC1pbnMsIGFuZCB3ZSB3YW50IHRvIHByZXNlcnZlIHRoYXQgZnJvbQorLy8g
Y29tcGlsZSB0byBjb21waWxlLgorLy8KK1RTeW1ib2xUYWJsZSogU3ltYm9sVGFibGVzW0VTaExh
bmdDb3VudF07CisKKworVFBvb2xBbGxvY2F0b3IqIFBlclByb2Nlc3NHUEEgPSAwOworLy8KKy8v
IFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9H
TCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4KKy8vCisKKy8v
CisvLyBEcml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkg
b3RoZXIKKy8vIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpCit7
CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGlm
ICghSW5pdFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgcGVyIHByb2Nlc3MuIElmIGl0cyBjYWxsZWQgYnkgbXVs
dGlwbGUgdGhyZWFkcywgdGhlbiAKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgdGhyZWFkIHN5bmNo
cm9uaXphdGlvbiBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGVyIHByb2Nlc3MK
KyAgICAvLyBnbG9iYWwgcG9vbCBhbGxvY2F0b3IKKyAgICBpZiAoIVBlclByb2Nlc3NHUEEpIHsg
CisgICAgICAgIFRQb29sQWxsb2NhdG9yICpidWlsdEluUG9vbEFsbG9jYXRvciA9IG5ldyBUUG9v
bEFsbG9jYXRvcih0cnVlKTsKKyAgICAgICAgYnVpbHRJblBvb2xBbGxvY2F0b3ItPnB1c2goKTsK
KyAgICAgICAgVFBvb2xBbGxvY2F0b3IqIGdQb29sQWxsb2NhdG9yID0gJkdsb2JhbFBvb2xBbGxv
Y2F0b3I7CisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoYnVpbHRJblBvb2xBbGxv
Y2F0b3IpOworCisgICAgICAgIFRTeW1ib2xUYWJsZSBzeW1UYWJsZXNbRVNoTGFuZ0NvdW50XTsK
KyAgICAgICAgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoMCwgaW5mb1NpbmssIHN5bVRhYmxl
cyk7CisKKyAgICAgICAgUGVyUHJvY2Vzc0dQQSA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsK
KyAgICAgICAgUGVyUHJvY2Vzc0dQQS0+cHVzaCgpOworICAgICAgICBTZXRHbG9iYWxQb29sQWxs
b2NhdG9yUHRyKFBlclByb2Nlc3NHUEEpOworCisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5n
VmVydGV4XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5n
VmVydGV4XS0+Y29weVRhYmxlKHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XSk7CisgICAgICAgIFN5
bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdID0gbmV3IFRTeW1ib2xUYWJsZTsKKyAgICAgICAg
U3ltYm9sVGFibGVzW0VTaExhbmdGcmFnbWVudF0tPmNvcHlUYWJsZShzeW1UYWJsZXNbRVNoTGFu
Z0ZyYWdtZW50XSk7CisKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihnUG9vbEFs
bG9jYXRvcik7CisKKyAgICAgICAgc3ltVGFibGVzW0VTaExhbmdWZXJ0ZXhdLnBvcCgpOworICAg
ICAgICBzeW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XS5wb3AoKTsKKworICAgICAgICBidWlsdElu
UG9vbEFsbG9jYXRvci0+cG9wQWxsKCk7CisgICAgICAgIGRlbGV0ZSBidWlsdEluUG9vbEFsbG9j
YXRvcjsgICAgICAgIAorCisgICAgfQorCisgICAgcmV0dXJuIHJldCA/IDEgOiAwOworfQorCisv
LworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBv
YmplY3RzLgorLy8KKworU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBs
YW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIGlmICghSW5pdFRocmVhZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hI
YW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIobGFuZ3VhZ2UsIHNwZWMpKTsKKyAgICAKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK3ZvaWQgU2hEZXN0
cnVjdChTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxl
QmFzZSo+KGhhbmRsZSk7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAg
ICBEZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOworfQorCisvLworLy8gQ2xl
YW51cCBzeW1ib2wgdGFibGVzCisvLworaW50IFNoRmluYWxpemUoKQoreyAgCisgIGlmIChQZXJQ
cm9jZXNzR1BBKSB7CisgICAgUGVyUHJvY2Vzc0dQQS0+cG9wQWxsKCk7CisgICAgZGVsZXRlIFBl
clByb2Nlc3NHUEE7CisgICAgUGVyUHJvY2Vzc0dQQSA9IDA7CisgIH0KKyAgZm9yIChpbnQgaSA9
IDA7IGkgPCBFU2hMYW5nQ291bnQ7ICsraSkgeworICAgIGRlbGV0ZSBTeW1ib2xUYWJsZXNbaV07
CisgICAgU3ltYm9sVGFibGVzW2ldID0gMDsKKyAgfQorICByZXR1cm4gMTsKK30KKworYm9vbCBH
ZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJj
ZXMsIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVzLCBFU2hM
YW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7CisgICAgCisJaWYg
KHJlc291cmNlcykgeworCQlidWlsdElucy5pbml0aWFsaXplKCpyZXNvdXJjZXMpOworCQlJbml0
aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgbGFuZ3VhZ2Us
IGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfSBlbHNlIHsKKwkJYnVpbHRJ
bnMuaW5pdGlhbGl6ZSgpOworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVp
bHRJblN0cmluZ3MoKSwgRVNoTGFuZ1ZlcnRleCwgaW5mb1NpbmssIHJlc291cmNlcywgc3ltYm9s
VGFibGVzKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJp
bmdzKCksIEVTaExhbmdGcmFnbWVudCwgaW5mb1NpbmssIHJlc291cmNlcywgc3ltYm9sVGFibGVz
KTsKKwl9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXplU3ltYm9sVGFi
bGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2Us
IFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywg
VFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZXMpCit7CisgICAgVEludGVybWVkaWF0ZSBpbnRlcm1l
ZGlhdGUoaW5mb1NpbmspOwkKKyAgICBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlOworCQorCWlm
IChyZXNvdXJjZXMpCisJCXN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGVzOworCWVsc2UKKwkJc3lt
Ym9sVGFibGUgPSAmc3ltYm9sVGFibGVzW2xhbmd1YWdlXTsKKworICAgIC8vIFRPRE8oYWxva3Ap
OiBJbnZlc3RpZ2F0ZSBpZiBhIHBhcnNlLWNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmUgYW5kCisg
ICAgLy8gaWYgc3ltYm9sLXRhYmxlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBHTEVTMiBhbmQgV2Vi
R0wgc3BlY3MuCisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoKnN5bWJvbFRhYmxlLCBp
bnRlcm1lZGlhdGUsIGxhbmd1YWdlLCBFU2hTcGVjR0xFUzIsIGluZm9TaW5rKTsKKworICAgIEds
b2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisgICAgc2V0SW5pdGlhbFN0
YXRlKCk7CisKKyAgICBhc3NlcnQoc3ltYm9sVGFibGUtPmlzRW1wdHkoKSB8fCBzeW1ib2xUYWJs
ZS0+YXRTaGFyZWRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgCisgICAgLy8KKyAgICAvLyBQYXJz
ZSB0aGUgYnVpbHQtaW5zLiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZSBwZXIKKyAgICAv
LyBsYW5ndWFnZSBzeW1ib2wgdGFibGUuCisgICAgLy8KKyAgICAvLyBQdXNoIHRoZSBzeW1ib2wg
dGFibGUgdG8gZ2l2ZSBpdCBhbiBpbml0aWFsIHNjb3BlLiAgVGhpcworICAgIC8vIHB1c2ggc2hv
dWxkIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBwb3AsIHNvIHRoYXQgYnVpbHQtaW5zCisgICAg
Ly8gYXJlIHByZXNlcnZlZCwgYW5kIHRoZSB0ZXN0IGZvciBhbiBlbXB0eSB0YWJsZSBmYWlscy4K
KyAgICAvLworCisgICAgc3ltYm9sVGFibGUtPnB1c2goKTsKKyAgICAKKyAgICAvL0luaXRpYWxp
emUgdGhlIFByZXByb2Nlc3NvcgorICAgIGludCByZXQgPSBJbml0UHJlcHJvY2Vzc29yKCk7Cisg
ICAgaWYgKHJldCkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsICAiVW5hYmxlIHRvIGludGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yIChUQnVpbHRJblN0cmluZ3M6
Oml0ZXJhdG9yIGkgID0gQnVpbHRJblN0cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1YWdlXS5iZWdp
bigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBCdWlsdEluU3Ry
aW5nc1twYXJzZUNvbnRleHQubGFuZ3VhZ2VdLmVuZCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKytpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1aWx0SW5TaGFkZXJz
WzFdOworICAgICAgICBpbnQgYnVpbHRJbkxlbmd0aHNbMV07CisKKyAgICAgICAgYnVpbHRJblNo
YWRlcnNbMF0gPSAoKmkpLmNfc3RyKCk7CisgICAgICAgIGJ1aWx0SW5MZW5ndGhzWzBdID0gKGlu
dCkgKCppKS5zaXplKCk7CisKKyAgICAgICAgaWYgKFBhUGFyc2VTdHJpbmdzKGNvbnN0X2Nhc3Q8
Y2hhcioqPihidWlsdEluU2hhZGVycyksIGJ1aWx0SW5MZW5ndGhzLCAxLCBwYXJzZUNvbnRleHQp
ICE9IDApIHsKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgIlVuYWJsZSB0byBwYXJzZSBidWlsdC1pbnMiKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworCWlmIChyZXNvdXJjZXMpIHsKKwkJSWRlbnRp
ZnlCdWlsdElucyhwYXJzZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSwgKnJlc291cmNl
cyk7CisJfSBlbHNlIHsJCQkJCQkJCQkgICAKKwkJSWRlbnRpZnlCdWlsdElucyhwYXJzZUNvbnRl
eHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSk7CisJfQorCisgICAgRmluYWxpemVQcmVwcm9jZXNz
b3IoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRG8gYW4gYWN0dWFsIGNvbXBp
bGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQgCisvLyBpbiB0aGUg
Z2l2ZW4gY29tcGlsZSBvYmplY3QuCisvLworLy8gUmV0dXJuOiAgVGhlIHJldHVybiB2YWx1ZSBv
ZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3Ig
ZmFpbHVyZS4KKy8vCitpbnQgU2hDb21waWxlKAorICAgIGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwK
KyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29uc3QgaW50IG51
bVN0cmluZ3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwgb3B0TGV2ZWwsCisgICAg
Y29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLAorICAgIGludCBkZWJ1Z09wdGlvbnMK
KyAgICApCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJh
c2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAg
IFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNv
bXBpbGVyID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEdsb2JhbFBvb2xBbGxv
Y2F0b3IucHVzaCgpOworICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+aW5mb1Np
bms7CisgICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOworICAgIGluZm9TaW5rLmRlYnVnLmVyYXNl
KCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisKKyAgICBpZiAobnVtU3RyaW5ncyA9PSAw
KQorICAgICAgICByZXR1cm4gMTsKKworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGlu
Zm9TaW5rKTsKKyAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGUoKlN5bWJvbFRhYmxlc1tjb21w
aWxlci0+Z2V0TGFuZ3VhZ2UoKV0pOworICAgIAorICAgIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRh
YmxlKHJlc291cmNlcywgaW5mb1NpbmssICZzeW1ib2xUYWJsZSwgY29tcGlsZXItPmdldExhbmd1
YWdlKCkpOworCisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGlu
dGVybWVkaWF0ZSwgY29tcGlsZXItPmdldExhbmd1YWdlKCksIGNvbXBpbGVyLT5nZXRTcGVjKCks
IGluZm9TaW5rKTsKKyAgICBwYXJzZUNvbnRleHQuaW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9y
KCk7CisKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OworICAgIAorICAg
IHNldEluaXRpYWxTdGF0ZSgpOworCisgICAgSW5pdFByZXByb2Nlc3NvcigpOyAgICAKKyAgICAv
LworICAgIC8vIFBhcnNlIHRoZSBhcHBsaWNhdGlvbidzIHNoYWRlcnMuICBBbGwgdGhlIGZvbGxv
d2luZyBzeW1ib2wgdGFibGUKKyAgICAvLyB3b3JrIHdpbGwgYmUgdGhyb3ctYXdheSwgc28gcHVz
aCBhIG5ldyBhbGxvY2F0aW9uIHNjb3BlIHRoYXQgY2FuCisgICAgLy8gYmUgdGhyb3duIGF3YXks
IHRoZW4gcHVzaCBhIHNjb3BlIGZvciB0aGUgY3VycmVudCBzaGFkZXIncyBnbG9iYWxzLgorICAg
IC8vCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5wdXNo
KCk7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCisgICAgICAgIHBhcnNl
Q29udGV4dC5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJXcm9u
ZyBzeW1ib2wgdGFibGUgbGV2ZWwiKTsKKworICAgIGludCByZXQgPSBQYVBhcnNlU3RyaW5ncyhj
b25zdF9jYXN0PGNoYXIqKj4oc2hhZGVyU3RyaW5ncyksIDAsIG51bVN0cmluZ3MsIHBhcnNlQ29u
dGV4dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYg
KHN1Y2Nlc3MgJiYgcGFyc2VDb250ZXh0LnRyZWVSb290KSB7CisgICAgICAgIGlmIChvcHRMZXZl
bCA9PSBFU2hPcHROb0dlbmVyYXRpb24pCisgICAgICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhOb25lLCAiTm8gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0
aW9uIHdhcyByZXF1ZXN0ZWQuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3VjY2Vz
cyA9IGludGVybWVkaWF0ZS5wb3N0UHJvY2VzcyhwYXJzZUNvbnRleHQudHJlZVJvb3QsIHBhcnNl
Q29udGV4dC5sYW5ndWFnZSk7CisKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisKKyAgICAg
ICAgICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAg
ICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29udGV4dC50cmVl
Um9vdCk7CisKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIENhbGwgdGhl
IG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbXBpbGVyLT5jb21waWxlKHBhcnNlQ29udGV4dC50cmVlUm9vdCkpCisg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgcGFyc2VDb250ZXh0Lmlu
Zm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIHBhcnNlQ29udGV4dC5p
bmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21waWxhdGlvbiBl
cnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAg
ICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOwor
ICAgIH0gZWxzZSBpZiAoIXBhcnNlQ29udGV4dC50cmVlUm9vdCkgeworICAgICAgICBwYXJzZUNv
bnRleHQuZXJyb3IoMSwgIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwgIiIsICIiKTsKKyAgICAg
ICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8gPDwgcGFyc2VDb250ZXh0Lm51bUVycm9ycyA8
PCAiIGNvbXBpbGF0aW9uIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGVkLlxuXG4iOworICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBFRGVidWdPcElu
dGVybWVkaWF0ZSkKKyAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29u
dGV4dC50cmVlUm9vdCk7CisgICAgfQorCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNv
bnRleHQudHJlZVJvb3QpOworCisgICAgLy8KKyAgICAvLyBFbnN1cmUgc3ltYm9sIHRhYmxlIGlz
IHJldHVybmVkIHRvIHRoZSBidWlsdC1pbiBsZXZlbCwKKyAgICAvLyB0aHJvd2luZyBhd2F5IGFs
bCBidXQgdGhlIGJ1aWx0LWlucy4KKyAgICAvLworICAgIHdoaWxlICghIHN5bWJvbFRhYmxlLmF0
U2hhcmVkQnVpbHRJbkxldmVsKCkpCisgICAgICAgIHN5bWJvbFRhYmxlLnBvcCgpOworCisgICAg
RmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKyAgICAvLworICAgIC8vIFRocm93IGF3YXkgYWxsIHRo
ZSB0ZW1wb3JhcnkgbWVtb3J5IHVzZWQgYnkgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisgICAg
Ly8KKyAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnBvcCgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3Mg
PyAxIDogMDsKK30KKworLy8KKy8vIFJldHVybiBhbnkgY29tcGlsZXIgbG9nIG9mIG1lc3NhZ2Vz
IGZvciB0aGUgYXBwbGljYXRpb24uCisvLworY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0
IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAg
VFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUp
OworICAgIFRJbmZvU2luayogaW5mb1NpbmsgPSAwOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29t
cGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0
SW5mb1NpbmsoKSk7CisKKyAgICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2luay0+ZGVidWcuY19z
dHIoKTsKKyAgICByZXR1cm4gaW5mb1NpbmstPmluZm8uY19zdHIoKTsKK30KKworLy8KKy8vIFJl
dHVybiBhbnkgb2JqZWN0IGNvZGUuCisvLworY29uc3QgY2hhciogU2hHZXRPYmplY3RDb2RlKGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisg
ICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5k
bGUpOworICAgIFRJbmZvU2luayogaW5mb1Npbms7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21w
aWxlcigpKQorICAgICAgICBpbmZvU2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJ
bmZvU2luaygpKTsKKworICAgIHJldHVybiBpbmZvU2luay0+b2JqLmNfc3RyKCk7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNiBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1v
c3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCisvLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUg
aGVhZGVyIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vCisvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMg
YSBwbGFjZSB0byBsaXZlLgorLy8KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdlbmVyYXRlIG1hbmds
ZWQgbmFtZXMuCisvLwordm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5n
bGVkTmFtZSkKK3sKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
J20nOworICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2
JzsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAg
ICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6ICAgICAg
ICAgICAgICAgIG1hbmdsZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidEJv
b2w6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgIG1hbmdsZWROYW1lICs9ICJzQyI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEVidFN0cnVjdDoKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInN0
cnVjdC0iOworICAgICAgICBpZiAodHlwZU5hbWUpCisgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAqdHlwZU5hbWU7CisgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOworICAgICAgICAgICAgICAgICgqc3Ry
dWN0dXJlKVtpXS50eXBlLT5idWlsZE1hbmdsZWROYW1lKG1hbmdsZWROYW1lKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXpl
KCkpOworICAgIGlmIChpc0FycmF5KCkpIHsKKyAgICAgICAgY2hhciBidWZbMjBdOworICAgICAg
ICBzcHJpbnRmKGJ1ZiwgIiVkIiwgYXJyYXlTaXplKTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
J1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7CisgICAgICAgIG1hbmdsZWROYW1lICs9
ICddJzsKKyAgICB9Cit9CisKK2ludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFnZXRTdHJ1Y3QoKSkgeworICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIk5vdCBhIHN0
cnVjdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RydWN0dXJlU2l6
ZSA9PSAwKQorICAgICAgICBmb3IgKFRUeXBlTGlzdDo6aXRlcmF0b3IgdGwgPSBnZXRTdHJ1Y3Qo
KS0+YmVnaW4oKTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQorICAgICAgICAgICAg
c3RydWN0dXJlU2l6ZSArPSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsKKworICAgIHJl
dHVybiBzdHJ1Y3R1cmVTaXplOworfQorCisvLworLy8gRHVtcCBmdW5jdGlvbnMuCisvLworCit2
b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAoreworICAgIGlu
Zm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIg
PDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAg
ICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKKyAgICB9CisgICAgaW5mb1NpbmsuZGVidWcg
PDwgIlxuIjsKK30KKwordm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QKK3sKKyAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAi
IDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1l
KCkuY19zdHIoKSA8PCAiXG4iOworfQorCit2b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJ
bmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBp
dDsKKyAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQp
CisgICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Cit9CisKK3ZvaWQgVFN5bWJv
bFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgZm9yIChpbnQg
bGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgeworICAgICAgICBp
bmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOworICAgICAgICB0YWJs
ZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOworICAgIH0KK30KKworLy8KKy8vIEZ1bmN0aW9ucyBo
YXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCisvLworVEZ1bmN0aW9uOjp+VEZ1bmN0aW9u
KCkKK3sKKyAgICBmb3IgKFRQYXJhbUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2lu
KCk7IGkgIT0gcGFyYW1ldGVycy5lbmQoKTsgKytpKQorICAgICAgICBkZWxldGUgKCppKS50eXBl
OworfQorCisvLworLy8gU3ltYm9sIHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMg
dG8gc3ltYm9scyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KKy8vCitUU3ltYm9sVGFibGVMZXZl
bDo6flRTeW1ib2xUYWJsZUxldmVsKCkKK3sKKyAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQg
PSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVsZXRl
ICgqaXQpLnNlY29uZDsKK30KKworLy8KKy8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBp
biB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQgbmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0
byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxvdworLy8gcGVy
Zm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0
aGF0CisvLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KKy8vCit2b2lk
IFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRP
cGVyYXRvciBvcCkKK3sKKyAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0OworICAgIGZvciAoaXQgPSBs
ZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoKCpp
dCkuc2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rp
b24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPigoKml0KS5zZWNvbmQpOworICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bi0+cmVsYXRlVG9PcGVyYXRvcihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworVFN5bWJv
bDo6VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xU
U3RyaW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlx
dWVJZDsKK30KKworVFZhcmlhYmxlOjpUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiBjb3B5T2Ys
IFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAgIHR5cGUu
Y29weVR5cGUoY29weU9mLnR5cGUsIHJlbWFwcGVyKTsKKyAgICB1c2VyVHlwZSA9IGNvcHlPZi51
c2VyVHlwZTsKKyAgICAvLyBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWwsIHVuaW9uQXJy
YXkgYW5kIGFycmF5SW5mb3JtYXRpb24gcG9pbnRlcnMgc2hvdWxkIGJlIE5VTEwKKyAgICBhc3Nl
cnQoY29weU9mLmFycmF5SW5mb3JtYXRpb25UeXBlID09IDApOworICAgIGFycmF5SW5mb3JtYXRp
b25UeXBlID0gMDsKKworICAgIGlmIChjb3B5T2YudW5pb25BcnJheSkgeworICAgICAgICBhc3Nl
cnQoIWNvcHlPZi50eXBlLmdldFN0cnVjdCgpKTsKKyAgICAgICAgYXNzZXJ0KGNvcHlPZi50eXBl
LmdldE9iamVjdFNpemUoKSA9PSAxKTsKKyAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5WzBdID0gY29weU9mLnVuaW9uQXJyYXlbMF07
CisgICAgfSBlbHNlCisgICAgICAgIHVuaW9uQXJyYXkgPSAwOworfQorCitUVmFyaWFibGUqIFRW
YXJpYWJsZTo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAgVFZhcmlhYmxl
ICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKnRoaXMsIHJlbWFwcGVyKTsKKworICAgIHJldHVy
biB2YXJpYWJsZTsKK30KKworVEZ1bmN0aW9uOjpURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiBj
b3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgcGFyYW1ldGVycy5wdXNo
X2JhY2socGFyYW0pOworICAgICAgICBwYXJhbWV0ZXJzLmJhY2soKS5jb3B5UGFyYW0oY29weU9m
LnBhcmFtZXRlcnNbaV0sIHJlbWFwcGVyKTsKKyAgICB9CisKKyAgICByZXR1cm5UeXBlLmNvcHlU
eXBlKGNvcHlPZi5yZXR1cm5UeXBlLCByZW1hcHBlcik7CisgICAgbWFuZ2xlZE5hbWUgPSBjb3B5
T2YubWFuZ2xlZE5hbWU7CisgICAgb3AgPSBjb3B5T2Yub3A7CisgICAgZGVmaW5lZCA9IGNvcHlP
Zi5kZWZpbmVkOworfQorCitURnVuY3Rpb24qIFRGdW5jdGlvbjo6Y2xvbmUoVFN0cnVjdHVyZU1h
cCYgcmVtYXBwZXIpCit7CisgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24o
KnRoaXMsIHJlbWFwcGVyKTsKKworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworVFN5bWJvbFRh
YmxlTGV2ZWwqIFRTeW1ib2xUYWJsZUxldmVsOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBl
cikKK3sKKyAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltVGFibGVMZXZlbCA9IG5ldyBUU3ltYm9s
VGFibGVMZXZlbCgpOworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXRlcjsKKyAgICBmb3IgKGl0ZXIg
PSBsZXZlbC5iZWdpbigpOyBpdGVyICE9IGxldmVsLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
c3ltVGFibGVMZXZlbC0+aW5zZXJ0KCppdGVyLT5zZWNvbmQtPmNsb25lKHJlbWFwcGVyKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN5bVRhYmxlTGV2ZWw7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxl
Ojpjb3B5VGFibGUoY29uc3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpCit7CisgICAgVFN0cnVjdHVy
ZU1hcCByZW1hcHBlcjsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi50YWJsZS5zaXplKCk7ICsraSkgeworICAg
ICAgICB0YWJsZS5wdXNoX2JhY2soY29weU9mLnRhYmxlW2ldLT5jbG9uZShyZW1hcHBlcikpOwor
ICAgIH0KKyAgICBmb3IoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5wcmVjaXNpb25T
dGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIGNv
cHlPZi5wcmVjaXNpb25TdGFja1tpXSApOworICAgIH0KK30KSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1i
b2xUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5D
TFVERURfCisKKy8vCisvLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVz
aWduIGNoYXJhY3RlcmlzdGljczoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1
c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2Yg
Y3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgor
Ly8gICBzeW1ib2xzLgorLy8KKy8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2
ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUg
bG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVy
IHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9m
IHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Yg
c3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBn
b2luZyBpbnRvCisvLyAgIHRoZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRp
bWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBz
eW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJz
ZQorLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3Rh
bnQgcHJvcGFnYXRpb24uCisvLworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1h
ZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBp
biB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4K
Ky8vCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgorCisvLworLy8gU3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0
aW9ucyBvciB2YXJpYWJsZXMgb3V0IG9mIHRoZXNlLi4uKQorLy8KK2NsYXNzIFRTeW1ib2wgeyAg
ICAKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxv
Y2F0b3IpCisgICAgVFN5bWJvbChjb25zdCBUU3RyaW5nICpuKSA6ICBuYW1lKG4pIHsgfQorICAg
IHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhl
IHBvb2wgKi8gfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAq
bmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25z
dCB7IHJldHVybiBnZXROYW1lKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1
ZUlkID0gaWQ7IH0KKyAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJ
ZDsgfQorICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0g
MDsJCisgICAgVFN5bWJvbChjb25zdCBUU3ltYm9sJik7CisgICAgdmlydHVhbCBUU3ltYm9sKiBj
bG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgY29u
c3QgVFN0cmluZyAqbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9y
IHJlYWwgY29tcGFyaW5nIGR1cmluZyBjb2RlIGdlbmVyYXRpb24KK307CisKKy8vCisvLyBWYXJp
YWJsZSBjbGFzcywgbWVhbmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24uCisvLyAK
Ky8vIFRoZXJlIGNvdWxkIGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZvciBDb25zdGFu
dCB2YXJpYWJsZXM7CisvLyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0LCAob3Igbm9u
ZSkgaXMgY29ycmVjdCBmb3IKKy8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0J3MgZWFzeSB0
byBkbyB0aGlzIHdheSwgYW5kIGRvZXNuJ3QKKy8vIHNlZW0gd29ydGggaGF2aW5nIHNlcGFyYXRl
IGNsYXNzZXMsIGFuZCAiZ2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KKy8vIGRpZmZlcmVu
dCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNvIHRoaXMgaXMg
CisvLyBqdXN0IHNpbXBsZSBhbmQgcHJhZ21hdGljLgorLy8KK2NsYXNzIFRWYXJpYWJsZSA6IHB1
YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBUVmFyaWFibGUoY29uc3QgVFN0cmluZyAqbmFt
ZSwgY29uc3QgVFR5cGUmIHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChuYW1lKSwgdHlw
ZSh0KSwgdXNlclR5cGUodVQpLCB1bmlvbkFycmF5KDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgw
KSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5cGUmIGdldFR5cGUo
KSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVz
ZXJUeXBlOyB9CisgICAgdm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIp
IHsgdHlwZS5jaGFuZ2VRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorICAgIHZvaWQgdXBkYXRlQXJy
YXlJbmZvcm1hdGlvblR5cGUoVFR5cGUgKnQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9
CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgeyByZXR1cm4gYXJyYXlJbmZv
cm1hdGlvblR5cGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0OworCisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkKKyAgICB7
IAorICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCisgICAgICAgICAgICB1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworCisgICAgICAgIHJldHVybiB1
bmlvbkFycmF5OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigp
IGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KKworICAgIHZvaWQgc2hhcmVDb25zdFBvaW50
ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCisgICAgeworICAgICAgICBkZWxldGUgdW5p
b25BcnJheTsKKyAgICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisgICAg
VFZhcmlhYmxlKGNvbnN0IFRWYXJpYWJsZSYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsgLy8g
Y29weSBjb25zdHJ1Y3RvcgorICAgIHZpcnR1YWwgVFZhcmlhYmxlKiBjbG9uZShUU3RydWN0dXJl
TWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0eXBlOworICAgIGJvb2wg
dXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0b3Igd2ls
bCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAvLyB3aGVuIHRo
aXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Cisg
ICAgVFR5cGUgKmFycmF5SW5mb3JtYXRpb25UeXBlOyAgLy8gdGhpcyBpcyB1c2VkIGZvciB1cGRh
dGluZyBtYXhBcnJheVNpemUgaW4gYWxsIHRoZSByZWZlcmVuY2VzIHRvIGEgZ2l2ZW4gc3ltYm9s
Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0aGUg
cGFyc2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVuY3Rp
b24gcGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5nICpuYW1l
OworICAgIFRUeXBlKiB0eXBlOworICAgIHZvaWQgY29weVBhcmFtKGNvbnN0IFRQYXJhbWV0ZXIm
IHBhcmFtLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAgIG5hbWUgPSBO
ZXdQb29sVFN0cmluZyhwYXJhbS5uYW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IHBhcmFt
LnR5cGUtPmNsb25lKHJlbWFwcGVyKTsKKyAgICB9Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9u
IHN1Yi1jbGFzcyBvZiBhIHN5bWJvbC4gIAorLy8KK2NsYXNzIFRGdW5jdGlvbiA6IHB1YmxpYyBU
U3ltYm9sIHsKK3B1YmxpYzoKKyAgICBURnVuY3Rpb24oVE9wZXJhdG9yIG8pIDoKKyAgICAgICAg
VFN5bWJvbCgwKSwKKyAgICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmlu
ZWQpKSwKKyAgICAgICAgb3AobyksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIFRG
dW5jdGlvbihjb25zdCBUU3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlwZSwgVE9wZXJhdG9yIHRP
cCA9IEVPcE51bGwpIDogCisgICAgICAgIFRTeW1ib2wobmFtZSksIAorICAgICAgICByZXR1cm5U
eXBlKHJldFR5cGUpLAorICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rpb246Om1hbmdsZU5hbWUo
Km5hbWUpKSwKKyAgICAgICAgb3AodE9wKSwKKyAgICAgICAgZGVmaW5lZChmYWxzZSkgeyB9Cisg
ICAgdmlydHVhbCB+VEZ1bmN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorCisgICAgc3RhdGljIFRTdHJpbmcgbWFuZ2xlTmFt
ZShjb25zdCBUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygnOyB9CisgICAgc3RhdGlj
IFRTdHJpbmcgdW5tYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWROYW1lKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIoKSwgbWFuZ2xlZE5hbWUu
ZmluZF9maXJzdF9vZignKCcpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFBhcmFtZXRlcihUUGFy
YW1ldGVyJiBwKSAKKyAgICB7IAorICAgICAgICBwYXJhbWV0ZXJzLnB1c2hfYmFjayhwKTsKKyAg
ICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+Z2V0TWFuZ2xlZE5hbWUo
KTsKKyAgICB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1hbmdsZWROYW1lOyB9CisgICAgY29uc3QgVFR5cGUmIGdldFJldHVyblR5cGUoKSBj
b25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRP
cGVyYXRvciBvKSB7IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25z
dCB7IHJldHVybiBvcDsgfQorICAgIHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7
IH0KKyAgICBib29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKworICAgIGludCBn
ZXRQYXJhbUNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwYXJhbWV0ZXJz
LnNpemUoKSk7IH0gICAgCisgICAgVFBhcmFtZXRlciYgb3BlcmF0b3IgW10oaW50IGkpICAgICAg
IHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KKyAgICBjb25zdCBUUGFyYW1ldGVyJiBvcGVyYXRv
ciBbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgVEZ1bmN0aW9uKGNv
bnN0IFRGdW5jdGlvbiYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKyAgICB2aXJ0dWFsIFRG
dW5jdGlvbiogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAgVFBhcmFtTGlz
dCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmluZyBtYW5nbGVk
TmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsKKworCitjbGFz
cyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFwPFRTdHJpbmcs
IFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90eXBlIHRMZXZl
bFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwgYm9vbD4gdElu
c2VydFJlc3VsdDsKKworICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFs
bG9jYXRvcikKKyAgICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQorICAgIH5UU3ltYm9sVGFibGVM
ZXZlbCgpOworCisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKSAKKyAgICB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQg
dG8gdGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHRJbnNlcnRSZXN1bHQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihzeW1ib2wuZ2V0TWFuZ2xl
ZE5hbWUoKSwgJnN5bWJvbCkpOworCisgICAgICAgIHJldHVybiByZXN1bHQuc2Vjb25kOworICAg
IH0KKworICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7
CisgICAgICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOwor
ICAgICAgICBpZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAg
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2
ZWwuYmVnaW4oKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRl
VG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgZHVt
cChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICBUU3ltYm9sVGFibGVMZXZlbCogY2xv
bmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAgdExldmVsIGxl
dmVsOworfTsKKworY2xhc3MgVFN5bWJvbFRhYmxlIHsKK3B1YmxpYzoKKyAgICBUU3ltYm9sVGFi
bGUoKSA6IHVuaXF1ZUlkKDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGUgc3lt
Ym9sIHRhYmxlIGNhbm5vdCBiZSB1c2VkIHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAorICAg
ICAgICAvLyB0aGUgbGFjayBvZiBhbiBpbml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2Vk
IHRvIGRldGVjdAorICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVu
IHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KKyAgICAgICAgLy8KKyAgICB9CisKKyAgICBUU3lt
Ym9sVGFibGUoVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSkKKyAgICB7CisgICAgICAgIHRhYmxlLnB1
c2hfYmFjayhzeW1UYWJsZS50YWJsZVswXSk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hf
YmFjayggc3ltVGFibGUucHJlY2lzaW9uU3RhY2tbMF0gKTsKKyAgICAgICAgdW5pcXVlSWQgPSBz
eW1UYWJsZS51bmlxdWVJZDsKKyAgICB9CisKKyAgICB+VFN5bWJvbFRhYmxlKCkKKyAgICB7Cisg
ICAgICAgIC8vIGxldmVsIDAgaXMgYWx3YXlzIGJ1aWx0IEluIHN5bWJvbHMsIHNvIHdlIG5ldmVy
IHBvcCB0aGF0IG91dAorICAgICAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMSkKKyAgICAgICAg
ICAgIHBvcCgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gV2hlbiB0aGUgc3ltYm9sIHRhYmxl
IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1aWx0LWlucywgdGhlcmUgc2hvdWxkCisgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgorICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCisgICAgLy8KKyAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQorICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHx8IGF0RHluYW1pY0J1aWx0
SW5MZXZlbCgpOyB9CisgICAgYm9vbCBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA9PSAxOyB9CQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA8PSAzOyB9CisgICAgdm9pZCBwdXNoKCkKKyAgICB7IAorICAgICAgICB0YWJs
ZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJlY2lzaW9uU3Rh
Y2sucHVzaF9iYWNrKCBQcmVjaXNpb25TdGFja0xldmVsKCkgKTsKKyAgICB9CisKKyAgICB2b2lk
IHBvcCgpCisgICAgeyAKKyAgICAgICAgZGVsZXRlIHRhYmxlW2N1cnJlbnRMZXZlbCgpXTsgCisg
ICAgICAgIHRhYmxlLnBvcF9iYWNrKCk7IAorICAgICAgICBwcmVjaXNpb25TdGFjay5wb3BfYmFj
aygpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5bWJvbCkKKyAgICB7Cisg
ICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKKyAgICAgICAgcmV0dXJuIHRh
YmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgfQorCisgICAgVFN5bWJv
bCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwgYm9vbCAqc2Ft
ZVNjb3BlID0gMCkgCisgICAgeworICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsK
KyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzeW1i
b2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisgICAgICAgICAgICAtLWxldmVsOworICAg
ICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKKyAgICAgICAgbGV2ZWwr
KzsKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09
IDA7CisgICAgICAgIGlmIChzYW1lU2NvcGUpCisgICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2
ZWwgPT0gY3VycmVudExldmVsKCk7CisgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisg
ICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldEdsb2JhbExldmVsKCkgeyBhc3NlcnQodGFibGUuc2l6
ZSgpID49IDMpOyByZXR1cm4gdGFibGVbMl07IH0KKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3Io
Y29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7IHRhYmxlWzBdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsgfQorICAgIGludCBnZXRNYXhTeW1ib2xJZCgpIHsgcmV0dXJuIHVuaXF1
ZUlkOyB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworICAgIHZv
aWQgY29weVRhYmxlKGNvbnN0IFRTeW1ib2xUYWJsZSYgY29weU9mKTsKKworICAgIHZvaWQgc2V0
RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlLCBUUHJlY2lzaW9uIHByZWMgKXsKKyAg
ICAgICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm47IC8v
IE9ubHkgc2V0IGRlZmF1bHQgcHJlY2lzaW9uIGZvciBpbnQvZmxvYXQKKyAgICAgICAgaW50IGlu
ZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgp
KSAtIDE7CisgICAgICAgIHByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF1bdHlwZV0g
PSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2
YWx1ZQorICAgIH0KKworICAgIC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZv
ciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAg
IFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlKXsKKyAgICAg
ICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm4gRWJwVW5k
ZWZpbmVkOworICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0
YWNrLnNpemUoKSkgLSAxOworICAgICAgICBhc3NlcnQoIGxldmVsID49IDApOyAvLyBKdXN0IHRv
IGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICBQcmVjaXNpb25TdGFja0xldmVs
OjppdGVyYXRvciBpdDsKKyAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAv
LyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJv
ciBjaGVjayB0aGlzPworICAgICAgICB3aGlsZSggbGV2ZWwgPj0gMCApeworICAgICAgICAgICAg
aXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0uZmluZCggdHlwZSApOworICAgICAgICAgICAgaWYo
IGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVsXS5lbmQoKSApeworICAgICAgICAgICAgICAgIHBy
ZWMgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVjOwor
ICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICBpbnQgY3VycmVudExldmVsKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQorICAgIGJvb2wgYXRE
eW5hbWljQnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDI7IH0KKworICAg
IHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CisgICAgdHlwZWRlZiBzdGQ6
Om1hcDwgVEJhc2ljVHlwZSwgVFByZWNpc2lvbiA+IFByZWNpc2lvblN0YWNrTGV2ZWw7CisgICAg
c3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwgPiBwcmVjaXNpb25TdGFjazsKKyAgICBp
bnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2Vu
ZXJhdGlvbgorfTsKKworI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIw
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckdM
U0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKworVHJhbnNsYXRvckdM
U0w6OlRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykKKyAgICA6
IFRDb21waWxlcihsYW5nLCBzcGVjKSB7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckdMU0w6OmNvbXBp
bGUoVEludGVybU5vZGUqIHJvb3QpIHsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKGluZm9T
aW5rLm9iaik7CisgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JHTFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCisKKyNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFuc2xhdG9yR0xTTCA6IHB1
YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdl
IGxhbmcsIEVTaFNwZWMgc3BlYyk7CisgICAgdmlydHVhbCBib29sIGNvbXBpbGUoVEludGVybU5v
ZGUqIHJvb3QpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKK1RyYW5z
bGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMp
CisgICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykKK3sKK30KKworYm9vbCBUcmFuc2xhdG9ySExT
TDo6Y29tcGlsZShUSW50ZXJtTm9kZSAqcm9vdCkKK3sKKyAgICBUUGFyc2VDb250ZXh0JiBwYXJz
ZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisgICAgc2g6Ok91dHB1dEhMU0wg
b3V0cHV0SExTTChwYXJzZUNvbnRleHQpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9ySExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExT
TC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
UkhMU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNzIFRyYW5z
bGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNsYXRvckhM
U0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29t
cGlsZShUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZUEVTX0lO
Q0xVREVECisKKyNpbmNsdWRlICJjb21waWxlci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gTmVl
ZCB0byBoYXZlIGFzc29jaWF0aW9uIG9mIGxpbmUgbnVtYmVycyB0byB0eXBlcyBpbiBhIGxpc3Qg
Zm9yIGJ1aWxkaW5nIHN0cnVjdHMuCisvLworY2xhc3MgVFR5cGU7CitzdHJ1Y3QgVFR5cGVMaW5l
IHsKKyAgICBUVHlwZSogdHlwZTsKKyAgICBpbnQgbGluZTsKK307Cit0eXBlZGVmIFRWZWN0b3I8
VFR5cGVMaW5lPiBUVHlwZUxpc3Q7CisKK2lubGluZSBUVHlwZUxpc3QqIE5ld1Bvb2xUVHlwZUxp
c3QoKQoreworICAgIHZvaWQqIG1lbW9yeSA9IEdsb2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUo
c2l6ZW9mKFRUeXBlTGlzdCkpOworICAgIHJldHVybiBuZXcobWVtb3J5KSBUVHlwZUxpc3Q7Cit9
CisKKy8vCisvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlh
Y2Mgc3RhY2ssICBJdCBjYW4ndCBoYXZlCisvLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5v
bi10cml2aWFsIGNvbnN0cnVjdG9ycy4gIEl0IHNob3VsZAorLy8ganVzdCBiZSB1c2VkIHdoaWxl
IHJlY29nbml6aW5nIHRoZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCisv
LyBjb3VsZCBiZSB1c2VkLCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkg
bWFuYWdlbWVudCBvdmVyaGVhZC4KKy8vCisvLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVy
ZSBpcyBubyBhY3R1YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKKy8vIG1hdGNoIHVwIG9y
IGFyZSBuYW1lIHRoZSBzYW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KKy8vCitjbGFzcyBUUHVi
bGljVHlwZSB7CitwdWJsaWM6CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAg
ICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAg
Ym9vbCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRU
eXBlKiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNU
eXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0g
YnQ7CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVm
aW5lZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAg
ICBhcnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVm
ID0gMDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRl
KGludCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAg
ICBtYXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9
IDApCisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7Cisg
ICAgfQorfTsKKwordHlwZWRlZiBUTWFwPFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+IFRTdHJ1Y3R1
cmVNYXA7Cit0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0ZXJhdG9yIFRT
dHJ1Y3R1cmVNYXBJdGVyYXRvcjsKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGluZ3MgdGhhdCBo
YXZlIGEgdHlwZS4KKy8vCitjbGFzcyBUVHlwZSB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorICAgIGV4cGxpY2l0IFRUeXBlKFRC
YXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIGlu
dCBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUo
cyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgw
KSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlw
ZU5hbWUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBleHBsaWNpdCBU
VHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlm
aWVyKSwgc2l6ZShwLnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJy
YXlTaXplKHAuYXJyYXlTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlv
blR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cC51c2VyRGVmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
ID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+Z2V0VHlwZU5hbWUoKS5j
X3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgZXhwbGljaXQgVFR5cGUoVFR5cGVMaXN0KiB1c2VyRGVmLCBj
b25zdCBUU3RyaW5nJiBuLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwg
YXJyYXlTaXplKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9u
VHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBleHBsaWNpdCBUVHlwZSgpIHt9CisgICAgdmly
dHVhbCB+VFR5cGUoKSB7fQorCisgICAgVFR5cGUoY29uc3QgVFR5cGUmIHR5cGUpIHsgKnRoaXMg
PSB0eXBlOyB9CisKKyAgICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1
Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgdHlwZSA9IGNvcHlPZi50eXBlOwor
ICAgICAgICBwcmVjaXNpb24gPSBjb3B5T2YucHJlY2lzaW9uOworICAgICAgICBxdWFsaWZpZXIg
PSBjb3B5T2YucXVhbGlmaWVyOworICAgICAgICBzaXplID0gY29weU9mLnNpemU7CisgICAgICAg
IG1hdHJpeCA9IGNvcHlPZi5tYXRyaXg7CisgICAgICAgIGFycmF5ID0gY29weU9mLmFycmF5Owor
ICAgICAgICBhcnJheVNpemUgPSBjb3B5T2YuYXJyYXlTaXplOworCisgICAgICAgIFRTdHJ1Y3R1
cmVNYXBJdGVyYXRvciBpdGVyOworICAgICAgICBpZiAoY29weU9mLnN0cnVjdHVyZSkgeworICAg
ICAgICAgICAgaWYgKChpdGVyID0gcmVtYXBwZXIuZmluZChzdHJ1Y3R1cmUpKSA9PSByZW1hcHBl
ci5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbmV3IHN0cnVjdHVyZSBo
ZXJlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gTmV3UG9vbFRUeXBlTGlzdCgpOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnN0cnVjdHVy
ZS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5l
OworICAgICAgICAgICAgICAgICAgICB0eXBlTGluZS5saW5lID0gKCpjb3B5T2Yuc3RydWN0dXJl
KVtpXS5saW5lOworICAgICAgICAgICAgICAgICAgICB0eXBlTGluZS50eXBlID0gKCpjb3B5T2Yu
c3RydWN0dXJlKVtpXS50eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+cHVzaF9iYWNrKHR5cGVMaW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGl0ZXItPnNlY29u
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSAwOworCisgICAgICAgIGZpZWxkTmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5T2YuZmllbGRO
YW1lKQorICAgICAgICAgICAgZmllbGROYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLmZpZWxk
TmFtZS0+Y19zdHIoKSk7CisgICAgICAgIHR5cGVOYW1lID0gMDsKKyAgICAgICAgaWYgKGNvcHlP
Zi50eXBlTmFtZSkKKyAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9m
LnR5cGVOYW1lLT5jX3N0cigpKTsKKworICAgICAgICBtYW5nbGVkID0gMDsKKyAgICAgICAgaWYg
KGNvcHlPZi5tYW5nbGVkKQorICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3RyaW5nKGNv
cHlPZi5tYW5nbGVkLT5jX3N0cigpKTsKKworICAgICAgICBzdHJ1Y3R1cmVTaXplID0gY29weU9m
LnN0cnVjdHVyZVNpemU7CisgICAgICAgIG1heEFycmF5U2l6ZSA9IGNvcHlPZi5tYXhBcnJheVNp
emU7CisgICAgICAgIGFzc2VydChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7Cisg
ICAgICAgIGFycmF5SW5mb3JtYXRpb25UeXBlID0gMDsgLy8gYXJyYXlJbmZvcm1hdGlvblR5cGUg
c2hvdWxkIG5vdCBiZSBzZXQgZm9yIGJ1aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVsCisgICAgfQor
CisgICAgVFR5cGUqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAg
ICAgVFR5cGUgKm5ld1R5cGUgPSBuZXcgVFR5cGUoKTsKKyAgICAgICAgbmV3VHlwZS0+Y29weVR5
cGUoKnRoaXMsIHJlbWFwcGVyKTsKKworICAgICAgICByZXR1cm4gbmV3VHlwZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBib29sIG0sIGJv
b2wgYSwgaW50IGFTID0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGUgPSB0
OyBzaXplID0gczsgbWF0cml4ID0gbTsgYXJyYXkgPSBhOyBhcnJheVNpemUgPSBhUzsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRUeXBlKFRCYXNpY1R5cGUgdCwgaW50IHMsIGJvb2wgbSwgVFR5cGUq
IHVzZXJEZWYgPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZSA9IHQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gczsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdHJpeCA9IG07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodXNlckRlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSB1c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGxlYXZlIGFycmF5IGluZm9ybWF0aW9uIGludGFjdC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgdmlydHVhbCB2b2lkIHNldFR5cGVOYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsg
dHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldEZpZWxkTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IGZpZWxkTmFtZSA9IE5ld1Bvb2xUU3Ry
aW5nKG4uY19zdHIoKSk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1l
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVy
biAqdHlwZU5hbWU7CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRGaWVs
ZE5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZpZWxkTmFtZSk7CisgICAgICAg
IHJldHVybiAqZmllbGROYW1lOworICAgIH0KKworICAgIHZpcnR1YWwgVEJhc2ljVHlwZSBnZXRC
YXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBUUHJlY2lzaW9u
IGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZpcnR1YWwg
VFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2hhbmdlUHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBwcmVjaXNpb24g
PSBwOyB9CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsg
cXVhbGlmaWVyID0gcTsgfQorCisgICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xl
IGluc3RhbmNlIHR5cGUKKyAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemU7IH0KKworICAgIC8vIEZ1bGwtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUg
aW5zdGFuY2Ugb2YgdHlwZQorICAgIHZpcnR1YWwgaW50IGdldEluc3RhbmNlU2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobWF0cml4KQorICAgICAgICAgICAgcmV0dXJuIHNpemUgKiBz
aXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDog
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJldHVybiBhcnJh
eSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZp
ZWxkTmFtZSAhPSAwOyB9CisgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFy
cmF5U2l6ZTsgfQorICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsg
YXJyYXlTaXplID0gczsgfQorICAgIHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhB
cnJheVNpemUgPSBzOyB9CisgICAgaW50IGdldE1heEFycmF5U2l6ZSAoKSBjb25zdCB7IHJldHVy
biBtYXhBcnJheVNpemU7IH0KKyAgICB2b2lkIGNsZWFyQXJyYXluZXNzKCkgeyBhcnJheSA9IGZh
bHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNpemUgPSAwOyB9CisgICAgdm9pZCBzZXRBcnJh
eUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0K
KyAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBhcnJh
eUluZm9ybWF0aW9uVHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsYXIo
KSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0dXJlOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5cGUgdCkgeworICAg
ICAgICBzd2l0Y2ggKHQpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0
dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1
cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlw
ZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAgICBjb25zdCBj
aGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0
cmluZyhwcmVjaXNpb24pOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQorICAgIFRU
eXBlTGlzdCogZ2V0U3RydWN0KCkgeyByZXR1cm4gc3RydWN0dXJlOyB9CisKKyAgICBpbnQgZ2V0
T2JqZWN0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgdG90YWxTaXplOworCisgICAg
ICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgICAgICB0b3RhbFNp
emUgPSBnZXRTdHJ1Y3RTaXplKCk7CisgICAgICAgIGVsc2UgaWYgKG1hdHJpeCkKKyAgICAgICAg
ICAgIHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
b3RhbFNpemUgPSBzaXplOworCisgICAgICAgIGlmIChpc0FycmF5KCkpCisgICAgICAgICAgICB0
b3RhbFNpemUgKj0gc3RkOjptYXgoZ2V0QXJyYXlTaXplKCksIGdldE1heEFycmF5U2l6ZSgpKTsK
KworICAgICAgICByZXR1cm4gdG90YWxTaXplOworICAgIH0KKworICAgIFRUeXBlTGlzdCogZ2V0
U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgVFN0cmluZyYgZ2V0TWFu
Z2xlZE5hbWUoKSB7CisgICAgICAgIGlmICghbWFuZ2xlZCkgeworICAgICAgICAgICAgbWFuZ2xl
ZCA9IE5ld1Bvb2xUU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIGJ1aWxkTWFuZ2xlZE5hbWUoKm1h
bmdsZWQpOworICAgICAgICAgICAgKm1hbmdsZWQgKz0gJzsnIDsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiAqbWFuZ2xlZDsKKyAgICB9CisgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
CisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgIH0KKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5
cGUgPT0gcmlnaHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQu
c2l6ZSAgICYmCisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisg
ICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJy
YXlTaXplID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9
PSByaWdodC5zdHJ1Y3R1cmU7CisgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBxdWFsaWZpZXIs
IGl0J3Mgbm90IGV2ZXIgd2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgorICAgIH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAh
b3BlcmF0b3I9PShyaWdodCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRUeXBl
JiByaWdodCkgY29uc3QgeworICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1cm4g
dHlwZSA8IHJpZ2h0LnR5cGU7CisgICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJldHVy
biBzaXplIDwgcmlnaHQuc2l6ZTsKKyAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRyaXgp
IHJldHVybiBtYXRyaXggPCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChhcnJheSAhPSByaWdo
dC5hcnJheSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7CisgICAgICAgIGlmIChhcnJheVNp
emUgIT0gcmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlTaXpl
OworICAgICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0cnVj
dHVyZSA8IHJpZ2h0LnN0cnVjdHVyZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgYnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJik7CisgICAgaW50IGdldFN0cnVjdFNpemUo
KSBjb25zdDsKKworICAgIFRCYXNpY1R5cGUgdHlwZSAgICAgIDogNjsKKyAgICBUUHJlY2lzaW9u
IHByZWNpc2lvbjsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA6IDc7CisgICAgaW50IHNpemUg
ICAgICAgICAgICAgOiA4OyAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9m
IGFycmF5CisgICAgdW5zaWduZWQgaW50IG1hdHJpeCAgOiAxOworICAgIHVuc2lnbmVkIGludCBh
cnJheSAgIDogMTsKKyAgICBpbnQgYXJyYXlTaXplOworCisgICAgVFR5cGVMaXN0KiBzdHJ1Y3R1
cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIG11dGFibGUgaW50IHN0
cnVjdHVyZVNpemU7CisgICAgaW50IG1heEFycmF5U2l6ZTsKKyAgICBUVHlwZSogYXJyYXlJbmZv
cm1hdGlvblR5cGU7CisgICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZvciBzdHJ1
Y3R1cmUgZmllbGQgbmFtZXMKKyAgICBUU3RyaW5nICptYW5nbGVkOworICAgIFRTdHJpbmcgKnR5
cGVOYW1lOyAgICAgICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQorfTsKKwor
I2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTZWxlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxlY3QuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ug
c2gKK3sKK1VuZm9sZFNlbGVjdDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQs
IE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNM
KG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30KKwordm9pZCBVbmZv
bGRTZWxlY3Q6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1UZW1wb3JhcnlJ
bmRleCsrOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworfQorCitib29sIFVuZm9sZFNlbGVj
dDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7
CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsK
KworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBp
bnQgaSA9IG1UZW1wb3JhcnlJbmRleCsrOworCisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+
dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgdCIgPDwgaSA8PCAiO1xuIjsKKworICAg
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiaWYoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRI
TFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwg
IiAgICB0IiA8PCBpIDw8ICIgPSAiOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJh
dmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0
IDw8ICIgICAgdCIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAg
ICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4LS07CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2VsZWN0OjpnZXRUZW1wb3JhcnlJbmRleCgp
Cit7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9VbmZvbGRTZWxlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2VsZWN0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xk
U2VsZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VO
Rk9MRFNFTEVDVF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBP
dXRwdXRITFNMOworCitjbGFzcyBVbmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworICBwdWJsaWM6CisgICAgVW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQs
IE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNl
bGVjdGlvbiAqbm9kZSk7CisKKyAgICBpbnQgZ2V0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29u
c3QgbU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2Vu
ZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5jcHA6IERl
YnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L1BhcnNlSGVscGVyLmgiCisKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAy
NDsKKworI2lmZGVmIFRSQUNFX0VOQUJMRUQKK2V4dGVybiAiQyIgewordm9pZCBUcmFjZShjb25z
dCBjaGFyICpmb3JtYXQsIC4uLikgeworICAgIGlmICghZm9ybWF0KSByZXR1cm47CisKKyAgICBU
UGFyc2VDb250ZXh0KiBwYXJzZUNvbnRleHQgPSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyAg
ICBpZiAocGFyc2VDb250ZXh0KSB7CisgICAgICAgIGNoYXIgYnVmW2tUcmFjZUJ1ZmZlckxlbl07
CisgICAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsK
KyAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1RyYWNlQnVmZmVyTGVuLCBmb3JtYXQsIGFyZ3MpOwor
ICAgICAgICB2YV9lbmQoYXJncyk7CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbmZvU2luay5k
ZWJ1ZyA8PCBidWY7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmICAvLyBUUkFD
RV9FTkFCTEVECisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYg
Q09NUElMRVJfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUg
PGFzc2VydC5oPgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRl
ZmluZSB0byBlbmFibGUgZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRwor
CisvLyBPdXRwdXRzIHRleHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQK
KworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNw
bHVzCit2b2lkIFRyYWNlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1
c3BsdXMKK30KKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFC
TEVECisKKyNkZWZpbmUgVHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9F
TkFCTEVECisKKy8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5n
IGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRv
IHsgXAorICAgIGlmKCEoZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWls
ZWQ6ICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwK
KyAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExF
TUVOVEVEKCkgZG8geyBcCisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQp
XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30g
d2hpbGUoMCkKKworI2RlZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJl
YWNoYWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisg
ICAgYXNzZXJ0KGZhbHNlKTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9E
RUJVR19IXworCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwMCBAQAorLyoK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisqLworLyogQmFzZWQgb24KK0FOU0kgQyBncmFtbWFyLCBMZXgg
c3BlY2lmaWNhdGlvbgorCitJbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgdGhpcyBMZXggc3Bl
Y2lmaWNhdGlvbiB0b2dldGhlciB3aXRoIGEgWWFjYyAKK2dyYW1tYXIgZm9yIHRoZSBBcHJpbCAz
MCwgMTk4NSBBTlNJIEMgZHJhZnQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCAKK2JvdGggdG8g
bmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdCBvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBh
bnN3ZXIgCit0byBxdWVzdGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMgRkFRLCBjYW4gYmUg
ZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgCitmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMu
Z3JhbW1hci5aLiAKKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8g
dGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIAorYXMgcG9zc2libGU7IHBsZWFzZSBsZXQg
bWUga25vdyBpZiB5b3UgZGlzY292ZXIgZGlzY3JlcGFuY2llcy4gCisKK0p1dHRhIERlZ2VuZXIs
IDE5OTUgCisqLworCitEICAgICAgICAgICBbMC05XQorTCAgICAgICAgICAgW2EtekEtWl9dCitI
ICAgICAgICAgICBbYS1mQS1GMC05XQorRSAgICAgICAgICAgW0VlXVsrLV0/e0R9KworTyAgICAg
ICAgICAgWzAtN10KKworJW9wdGlvbiBub3VucHV0IAorJXsKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
KyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisj
aWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgor
CitpbnQgeXlfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUpOworCitleHRlcm4gaW50IHl5
cGFyc2Uodm9pZCopOworI2RlZmluZSBZWV9ERUNMIGludCB5eWxleChZWVNUWVBFKiBweXlsdmFs
LCB2b2lkKiBwYXJzZUNvbnRleHRMb2NhbCkKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgqKChUUGFy
c2VDb250ZXh0KikocGFyc2VDb250ZXh0TG9jYWwpKSkKKyAKKyNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgKHJlc3VsdCA9IHl5X2lucHV0KGJ1ZiwgbWF4X3NpemUpKQorCisl
fQorCisvKgorVE9ETyhhbG9rcCk6IHl5bGluZW5vIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9s
ZCBmbGV4LmV4ZSBpbiBjb21waWxlci90b29scy4KK1JlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNs
dXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworJW9wdGlvbiB5eWxpbmVubworCisl
b3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCisleCBGSUVMRFMKKwor
CislJQorPCo+Ii8vIlteXG5dKiJcbiIgICAgIHsgLyogPz8gY2FycmlhZ2UgYW5kL29yIGxpbmUt
ZmVlZD8gKi8gfTsKKworImludmFyaWFudCIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKElOVkFSSUFOVCk7IH0KKyJoaWdocCIgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KKyJtZWRpdW1wIiAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJFQ0lT
SU9OKTsgfQorImxvd3AiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKExPV19QUkVDSVNJT04pOyB9CisicHJlY2lzaW9uIiAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUFJFQ0lTSU9OKTsgfQorCisiYXR0cmlidXRlIiAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRFKTsgfQorImNv
bnN0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlNU
X1FVQUwpOyB9CisidW5pZm9ybSIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oVU5JRk9STSk7IH0KKyJ2YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihWQVJZSU5HKTsgfQorCisiYnJlYWsiICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQlJFQUspOyB9CisiY29udGludWUiICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9Cisi
ZG8iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRE8p
OyB9CisiZm9yIiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oRk9SKTsgfQorIndoaWxlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFdISUxFKTsgfQorCisiaWYiICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oSUYpOyB9CisiZWxzZSIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRUxTRSk7IH0KKworImluIiAgICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOX1FVQUwpOyB9Cisib3V0IiAg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1VUX1FVQUwp
OyB9CisiaW5vdXQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oSU5PVVRfUVVBTCk7IH0KKworImZsb2F0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9B
VF9UWVBFKTsgfQorImludCIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0K
KyJ2b2lkIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQorImJvb2wiICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFm
dGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisidHJ1ZSIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1
cm4oQk9PTENPTlNUQU5UKTsgfQorImZhbHNlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7
IH0KKworImRpc2NhcmQiICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKERJU0NBUkQpOyB9CisicmV0dXJuIiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUkVUVVJOKTsgfQorCisibWF0MiIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0
dXJuKE1BVFJJWDIpOyB9CisibWF0MyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDMp
OyB9CisibWF0NCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJz
ZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9CisKKyJ2ZWMy
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9CisidmVjMyIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQorInZlYzQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAo
VkVDNCk7IH0KKyJpdmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsgfQorIml2
ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzMpOyB9CisiaXZlYzQiICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKyJidmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4gKEJWRUMyKTsgfQorImJ2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9
CisiYnZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKworInNhbXBsZXIy
RCIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiBTQU1QTEVSMkQ7IH0KKyJzYW1wbGVyQ3ViZSIgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUkNVQkU7IH0KKworInN0cnVjdCIgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybihTVFJVQ1QpOyB9CisKKyJhc20iICAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisKKyJjbGFzcyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9CisidW5pb24iICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQorImVudW0iICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ0eXBl
ZGVmIiAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidGVtcGxhdGUiICAg
ICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInRoaXMiICAgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJwYWNrZWQiICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisKKyJnb3RvIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7
IHJldHVybiAwOyB9Cisic3dpdGNoIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4g
MDsgfQorImRlZmF1bHQiICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwor
ImlubGluZSIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJub2lubGlu
ZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisidm9sYXRpbGUiICAgICB7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInB1YmxpYyIgICAgICAgeyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJzdGF0aWMiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisiZXh0ZXJuIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorImV4dGVybmFsIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJpbnRlcmZhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJsb25n
IiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic2hvcnQiICAgICAg
ICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImRvdWJsZSIgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJoYWxmIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisiZml4ZWQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorInVuc2lnbmVkIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKworImlucHV0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJv
dXRwdXQiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJodmVjMiIg
ICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaHZlYzMiICAgICAgICB7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImh2ZWM0IiAgICAgICAgeyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJmdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisiZnZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorImZ2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJkdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZHZlYzMi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImR2ZWM0IiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworInNpemVvZiIgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJjYXN0IiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7
IHJldHVybiAwOyB9CisidXNpbmciICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4g
MDsgfQorCit7TH0oe0x9fHtEfSkqICAgICAgIHsgIAorICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgCisgICBweXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0
KTsgCisgICByZXR1cm4gUGFJZGVudE9yVHlwZSgqcHl5bHZhbC0+bGV4LnN0cmluZywgcGFyc2VD
b250ZXh0LCBweXlsdmFsLT5sZXguc3ltYm9sKTsgCit9CisKKzBbeFhde0h9KyAgICAgICAgIHsg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0
ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorMHtPfSsgICAgICAgICAgICAgeyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRl
eHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ciswe0R9KyAgICAgICAgICAgICB7IHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5lcnJvcih5eWxpbmVubywg
IkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgcGFyc2VDb250ZXh0LnJl
Y292ZXIoKTsgcmV0dXJuIDA7fQore0R9KyAgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1
cm4oSU5UQ09OU1RBTlQpOyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5
eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pPyB7IHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorIi4ie0R9Kyh7
RX0pPyAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9
IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7
IH0KKworIi8qIiAgICAgICAgICAgIHsgIGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFs
LT5sZXgubGluZSwgcGFyc2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKKwor
Iis9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihB
RERfQVNTSUdOKTsgfQorIi09IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihTVUJfQVNTSUdOKTsgfQorIio9IiAgICAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNVUxfQVNTSUdOKTsgfQorIi89IiAgICAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihESVZfQVNTSUdOKTsg
fQorIiU9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihNT0RfQVNTSUdOKTsgfQorIjw8PSIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihMRUZUX0FTU0lHTik7IH0KKyI+Pj0iICAgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQorIiY9IiAg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNT
SUdOKTsgfQorIl49IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihYT1JfQVNTSUdOKTsgfQorInw9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihPUl9BU1NJR04pOyB9CisKKyIrKyIgICAgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5DX09QKTsgfQorIi0tIiAg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihERUNfT1Ap
OyB9CisiJiYiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKEFORF9PUCk7IH0KKyJ8fCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oT1JfT1ApOyB9CisiXl4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFhPUl9PUCk7IH0KKyI8PSIgICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVfT1ApOyB9CisiPj0iICAgICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEdFX09QKTsgfQor
Ij09IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihF
UV9PUCk7IH0KKyIhPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oTkVfT1ApOyB9CisiPDwiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKExFRlRfT1ApOyB9CisiPj4iICAgICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX09QKTsgfQorIjsiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IGZhbHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQorKCJ7InwiPCUiKSAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxz
ZTsgcmV0dXJuKExFRlRfQlJBQ0UpOyB9CisoIn0ifCIlPiIpICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQorIiwiICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5pblR5cGVQYXJl
bikgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9Cisi
OiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09MT04p
OyB9CisiPSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KKyIoIiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSBmYWxzZTsgcGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRf
UEFSRU4pOyB9CisiKSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
YXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQor
KCJbInwiPDoiKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihM
RUZUX0JSQUNLRVQpOyB9CisoIl0ifCI6PiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CisiLiIgICAgICAgICB7IEJFR0lOKEZJ
RUxEUyk7ICByZXR1cm4oRE9UKTsgfQorIiEiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKEJBTkcpOyB9CisiLSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oREFTSCk7IH0KKyJ+IiAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihUSUxERSk7IH0KKyIrIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQTFVTKTsgfQorIioiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNUQVIpOyB9CisiLyIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU0xBU0gpOyB9Cisi
JSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUEVSQ0VO
VCk7IH0KKyI8IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihMRUZUX0FOR0xFKTsgfQorIj4iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQorInwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZFUlRJQ0FMX0JBUik7IH0KKyJeIiAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDQVJFVCk7IH0KKyImIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTVBFUlNBTkQpOyB9
CisiPyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVF
U1RJT04pOyB9CisKKzxGSUVMRFM+e0x9KHtMfXx7RH0pKiB7IAorQkVHSU4oSU5JVElBTCk7ICAg
ICAgCisgICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgICAgIAorICAgIHB5eWx2YWwt
PmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgICByZXR1cm4gRklFTERf
U0VMRUNUSU9OOyB9Cis8RklFTERTPlsgXHRcdlxmXHJdIHt9CisKK1sgXHRcdlxuXGZccl0gICB7
ICB9Cis8Kj48PEVPRj4+IHsgKCZwYXJzZUNvbnRleHQpLT5BZnRlckVPRiA9IHRydWU7IHl5X2Rl
bGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOyB5eXRlcm1pbmF0ZSgpO30KKzwqPi4gICAg
eyBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCAiRkxFWDogVW5rbm93biBjaGFyICIgPDwg
eXl0ZXh0IDw8ICJcbiI7CisgICAgICAgICAgcmV0dXJuIDA7IH0KKworJSUKKworCisvL0luY2x1
ZGluZyBQcmUtcHJvY2Vzc29yLgorZXh0ZXJuICJDIiB7CisgICNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgorfSAKKworLy8KKy8vIFRoZSBZWV9JTlBVVCBtYWNy
byBqdXN0IGNhbGxzIHRoaXMuICBNYXliZSB0aGlzIGNvdWxkIGJlIGp1c3QgcHV0IGludG8KKy8v
IHRoZSBtYWNybyBkaXJlY3RseS4KKy8vCisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBt
YXhfc2l6ZSkKK3sKKyAgICBpbnQgbGVuOworCisgICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVm
LCBtYXhfc2l6ZSkpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPj0gbWF4
X3NpemUpIAorICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGJ1ZmZlciBvdmVyZmxvdywg
Y2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIiApOworCisg
ICAgYnVmW2xlbl0gPSAnICc7CisJcmV0dXJuIGxlbisxOworfQorCisKKy8vCisvLyBQYXJzZSBh
biBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuICBXZSBzZXQgdXAgZ2xvYmFscyB1c2Vk
IGJ5CisvLyB5eXdyYXAuCisvLworLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLCBhcyBwZXIgeXlw
YXJzZSgpLgorLy8KK2ludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5b
XSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGlu
dCBhcmd2MGxlbjsKKyAgICAKKyAgICBTY2FuRnJvbVN0cmluZyhhcmd2WzBdKTsgCisgICAgCisg
ICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50IENvbXBpbGVyIFBhcnNlIGNvbnRleHQgaW50byB0aGUg
Y3BwIHN0cnVjdHVyZS4KKwljcHAtPnBDID0gKHZvaWQqKSZwYXJzZUNvbnRleHRMb2NhbDsKKwkK
KwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIWFyZ3ZbaV0pIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKDAsICJOdWxsIHNoYWRlciBzb3Vy
Y2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLnJlY292
ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGlmICghc3RyTGVuKSB7CisgICAgICAgIGFyZ3YwbGVuID0gKGludCkgc3RybGVuKGFyZ3ZbMF0p
OworICAgICAgICBzdHJMZW4gICA9ICZhcmd2MGxlbjsKKyAgICB9CisgICAgeXlyZXN0YXJ0KDAp
OworICAgICgmcGFyc2VDb250ZXh0TG9jYWwpLT5BZnRlckVPRiA9IGZhbHNlOworICAgIGNwcC0+
UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gYXJndjsKKyAgICBjcHAtPlBh
QXJnYyAgICAgPSBhcmdjOworICAgIGNwcC0+UGFTdHJMZW4gICA9IHN0ckxlbjsKKyAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisgICAgeXlsaW5lbm8gICA9IDE7CisgICAKKyAgICBp
ZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAKKyAgICAgICAgaW50IHJldCA9IHl5cGFyc2Uo
KHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsKKyAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVy
cm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNl
Q29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKGNoYXIgKnMpIAoreworICAgIGlmICgoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKKyAgICAgICAgaWYgKGNwcC0+dG9r
ZW5zQmVmb3JlRU9GID09IDEpIHsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJy
b3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAicHJlLW1hdHVyZSBFT0YiLCBzLCAiIik7Cisg
ICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJz
eW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgfSAgICAgICAgICAgIAorfQorCit2b2lkIFBhUmVzZXJ2ZWRXb3Jk
KCkKK3sKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiUmVzZXJ2ZWQg
d29yZC4iLCB5eXRleHQsICIiLCAiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7Cit9CisKK2ludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiBw
YXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5bWJvbCkKK3sKKyAgICBzeW1ib2wgPSBwYXJz
ZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5kKGlkKTsKKyAgICBpZiAocGFyc2VDb250ZXh0
TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFi
bGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gVFlQRV9OQU1FOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBJREVOVElGSUVSOworfQorCitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5lbm8sIFRQYXJz
ZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGludCB0cmFuc2l0aW9uRmxhZyA9
IDA7CisgICAgaW50IG5leHRDaGFyOworICAgIAorICAgIHdoaWxlICh0cmFuc2l0aW9uRmxhZyAh
PSAyKSB7CisgICAgICAgIG5leHRDaGFyID0geXlpbnB1dCgpOworICAgICAgICBpZiAobmV4dENo
YXIgPT0gJ1xuJykKKyAgICAgICAgICAgICBsaW5lbm8rKzsKKyAgICAgICAgc3dpdGNoIChuZXh0
Q2hhcikgeworICAgICAgICBjYXNlICcqJyA6CisgICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLycgOiAgLyogaWYgc3RhciBp
cyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRoZSBlbmQgb2YgY29tbWVudCAq
LworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25GbGFnID09IDEpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMSA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT0YgOgorICAgICAgICAgICAgLyogUmFpc2UgZXJyb3IgbWVzc2FnZSBoZXJlICovCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcih5eWxpbmVubywgIkVuZCBvZiBzaGFk
ZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50LiIsICIiLCAiIiwgIiIpOworICAgICAgICAg
ICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICByZXR1cm4gWVlf
TlVMTDsgCisgICAgICAgIGRlZmF1bHQgOiAgLyogQW55IG90aGVyIGNoYXJhY3RlciB3aWxsIGJl
IGEgcGFydCBvZiB0aGUgY29tbWVudCAqLworICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcgPSAw
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitleHRlcm4gIkMiIHsKKwor
dm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7
Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCit7CisgICAg
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorfQorCit2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5
bGluZW5vLCIiLCAiIixtc2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBlcnJvciIsICIiLG1z
ZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgU2V0
TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eWxpbmVubyAmPSB+U291cmNlTG9jTGluZU1h
c2s7CisgICAgeXlsaW5lbm8gfD0gbGluZTsKK30KKwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50
IHN0cmluZykKK3sKKyAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNlTG9jU3RyaW5nU2hp
ZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOworfQorCitpbnQgR2V0U3RyaW5n
TnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5vID4+IDE2OworfQorCitpbnQgR2V0
TGluZU51bWJlcih2b2lkKQoreworICAgIHJldHVybiB5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVN
YXNrOworfQorCit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5v
ICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQorICAgICAgICArK3l5
bGluZW5vOworfQorCit2b2lkIERlY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGlu
ZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkKKyAgICAgICAgLS15eWxpbmVubzsKK30KKwor
dm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKK3sg
ICAgCisgICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgeworICAgICAgICBp
ZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1p
emUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsK
KyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGlt
aXplJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAg
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVl
OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAg
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBm
YWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25c
IiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIp
XCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWci
KSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
MV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQg
YWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAg
ICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcg
PSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAg
ICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcg
PSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
b25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIp
XCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisjaWZkZWYgUFJBR01BX1RBQkxFCisgICAgICAg
IC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQorICAgICAgICAv
LyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQorICAgICAgICAvLyBGb3Ig
bm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5v
dCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRh
dGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQorICAgICAgICAvLyAjcHJh
Z21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRp
b24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1l
IGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAgICAgICAgCisgICAgICAgIGlmIChudW1Ub2tl
bnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwg
IikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRh
YmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAg
ICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAg
ICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVy
LT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0g
ICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7CisgICAgICAgICAg
ICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQykt
PmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0
ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5n
KHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRv
a2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8vIFBSQUdNQV9UQUJM
RQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit7CisgICAgVFN0cmlu
ZyBzdHJTcmM7CisgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOworCisgICAgKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBD
KS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKK30KKworY29uc3QgY2hhciogR2V0U3RyZnJv
bVRTdHIodm9pZCkKK3sKKyAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9CisK
K3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNo
YXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQor
ICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUi
LCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAoIXN0
cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7Cisg
ICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVC
aFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVo
YXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7Cisg
ICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIH0gICAgICAgIAorfQorCit2b2lkICB1cGRh
dGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhh
dmlvcikKK3sKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihiZWhhdmlv
cik7CisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsKKyAgICBU
U3RyaW5nIG1zZzsKKyAgICAKKyAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5zaW9u
CisgICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7CisgICAgICAgIGlmIChiZWhhdmlv
clZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkgeworICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVp
cmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
ICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfSAgICAgICAgCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5l
eHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRl
ciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKKyAgICAgICAgICAgIGNhc2Ug
RUJoUmVxdWlyZToKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4
dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAg
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKKyAg
ICAgICAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKKyAg
ICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICIn
IGlzIG5vdCBzdXBwb3J0ZWQiOworICAgICAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigp
LCB5eWxpbmVubyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29u
ZCA9IGJlaGF2aW9yVmFsOworICAgIH0KK30KKyAgICAgICAgCit9ICAvLyBleHRlcm4gIkMiCisK
K3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKK3sKKyAgICB5eV9zdGFydCA9IDE7Cit9CkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8qKgorICogVGhpcyBpcyBiaXNvbiBncmFtbWFyIGFuZCBwcm9kdWN0aW9uIGNvZGUgZm9yIHBh
cnNpbmcgdGhlIE9wZW5HTCAyLjAgc2hhZGluZworICogbGFuZ3VhZ2VzLgorICovCisleworCisv
KiBCYXNlZCBvbjoKK0FOU0kgQyBZYWNjIGdyYW1tYXIKKworSW4gMTk4NSwgSmVmZiBMZWUgcHVi
bGlzaGVkIGhpcyBZYWNjIGdyYW1tYXIgKHdoaWNoIGlzIGFjY29tcGFuaWVkIGJ5IGEKK21hdGNo
aW5nIExleCBzcGVjaWZpY2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IGRyYWZ0IHZlcnNp
b24gb2YgdGhlCitBTlNJIEMgc3RhbmRhcmQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCBpdCB0
byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0CitvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRo
ZSBhbnN3ZXIgdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAubGFuZy5jCitGQVEsIGNhbiBi
ZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCBmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMu
Z3JhbW1hci5aLgorCitJIGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0
aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgYXMKK3Bvc3NpYmxlOyBwbGVhc2UgbGV0IG1l
IGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMuCisKK0p1dHRhIERlZ2VuZXIsIDE5
OTUKKyovCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisK
KyNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorLyoKK1RPRE8oYWxva3Ap
OiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xkIGJpc29uLmV4
ZSBpbgorY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNpdmVseSB1
c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9p
ZCoKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExv
Y2FsKSkKKyNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKyNkZWZpbmUgWVlf
REVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwp
CitleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIqKTsKKworI2RlZmluZSBGUkFHX1ZFUlRfT05MWShT
LCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3Vh
Z2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUg
VkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExh
bmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwg
UywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNLX09OTFkoUywgTCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
aWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBz
dXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICAg
IFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit9CisKKyNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNv
bnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
fQorCisjZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5n
dWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihM
LCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsg
ICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK30KKyV9CisldW5pb24geworICAgIHN0cnVjdCB7CisgICAgICAgIFRT
b3VyY2VMb2MgbGluZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFN0cmluZyAqc3Ry
aW5nOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAg
ICAgYm9vbCBiOworICAgICAgICB9OworICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CisgICAgfSBs
ZXg7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAgICAgICBUT3Bl
cmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdn
cmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAg
ICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNp
c2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1
bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAg
ICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7CisgICAgICAgICAgICBUVHlwZUxpc3QqIHR5cGVMaXN0
OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworfQorCisleworICAgIGV4dGVybiBpbnQgeXls
ZXgoWVlTVFlQRSosIHZvaWQqKTsKKyV9CisKKyVwdXJlX3BhcnNlciAvKiBKdXN0IGluIGNhc2Ug
aXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyAqLworJWV4cGVjdCAxIC8qIE9uZSBzaGlm
dCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KKyV0b2tlbiA8bGV4PiBJ
TlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBS
RUNJU0lPTgorJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9B
VF9UWVBFIElOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1Ig
SUYgRElTQ0FSRCBSRVRVUk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJ
VkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBN
QVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tl
biA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNB
TVBMRVJDVUJFCisKKyV0b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNU
QU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IEZJRUxEX1NFTEVDVElP
TgorJXRva2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AKKyV0b2tlbiA8bGV4PiBJTkNfT1AgREVD
X09QIExFX09QIEdFX09QIEVRX09QIE5FX09QCisldG9rZW4gPGxleD4gQU5EX09QIE9SX09QIFhP
Ul9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FTU0lHTgorJXRva2VuIDxsZXg+IE1PRF9B
U1NJR04gTEVGVF9BU1NJR04gUklHSFRfQVNTSUdOIEFORF9BU1NJR04gWE9SX0FTU0lHTiBPUl9B
U1NJR04KKyV0b2tlbiA8bGV4PiBTVUJfQVNTSUdOCisKKyV0b2tlbiA8bGV4PiBMRUZUX1BBUkVO
IFJJR0hUX1BBUkVOIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIExFRlRfQlJBQ0UgUklHSFRf
QlJBQ0UgRE9UCisldG9rZW4gPGxleD4gQ09NTUEgQ09MT04gRVFVQUwgU0VNSUNPTE9OIEJBTkcg
REFTSCBUSUxERSBQTFVTIFNUQVIgU0xBU0ggUEVSQ0VOVAorJXRva2VuIDxsZXg+IExFRlRfQU5H
TEUgUklHSFRfQU5HTEUgVkVSVElDQUxfQkFSIENBUkVUIEFNUEVSU0FORCBRVUVTVElPTgorCisl
dHlwZSA8aW50ZXJtPiBhc3NpZ25tZW50X29wZXJhdG9yIHVuYXJ5X29wZXJhdG9yCisldHlwZSA8
aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdmFyaWFibGVfaWRlbnRpZmllciBwcmltYXJ5X2V4cHJl
c3Npb24gcG9zdGZpeF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4g
ZXhwcmVzc2lvbiBpbnRlZ2VyX2V4cHJlc3Npb24gYXNzaWdubWVudF9leHByZXNzaW9uCisldHlw
ZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdW5hcnlfZXhwcmVzc2lvbiBtdWx0aXBsaWNhdGl2
ZV9leHByZXNzaW9uIGFkZGl0aXZlX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlw
ZWROb2RlPiByZWxhdGlvbmFsX2V4cHJlc3Npb24gZXF1YWxpdHlfZXhwcmVzc2lvbgorJXR5cGUg
PGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gY29uc3RhbnRf
ZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGxvZ2ljYWxfb3JfZXhw
cmVzc2lvbiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KKyV0
eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBzaGlmdF9leHByZXNzaW9uIGFuZF9leHByZXNz
aW9uIGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uCisldHlw
ZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZnVuY3Rpb25fY2FsbCBpbml0aWFsaXplciBjb25k
aXRpb24gY29uZGl0aW9ub3B0CisKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gdHJhbnNsYXRp
b25fdW5pdCBmdW5jdGlvbl9kZWZpbml0aW9uCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHN0
YXRlbWVudCBzaW1wbGVfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybUFnZ3JlZ2F0ZT4g
IHN0YXRlbWVudF9saXN0IGNvbXBvdW5kX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1O
b2RlPiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgc2VsZWN0aW9uX3N0YXRlbWVudCBleHByZXNzaW9u
X3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbiBleHRlcm5h
bF9kZWNsYXJhdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBmb3JfaW5pdF9zdGF0ZW1l
bnQgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQorJXR5cGUgPGludGVybS5ub2RlUGFp
cj4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudAorJXR5cGUgPGlu
dGVybS5pbnRlcm1Ob2RlPiBpdGVyYXRpb25fc3RhdGVtZW50IGp1bXBfc3RhdGVtZW50IHN0YXRl
bWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlvbiBpbml0
X2RlY2xhcmF0b3JfbGlzdAorCisldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFyYXRpb24g
cGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50
ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgorCisldHlwZSA8aW50ZXJtLnByZWNp
c2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxp
ZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS50
eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CisldHlw
ZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZUxpbmU+
IHN0cnVjdF9kZWNsYXJhdG9yCisldHlwZSA8aW50ZXJtLnR5cGVMaXN0PiBzdHJ1Y3RfZGVjbGFy
YXRvcl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorJXR5
cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3Ig
ZnVuY3Rpb25faWRlbnRpZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVh
ZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUgPGludGVybT4g
ZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVy
X25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQor
JXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0IHRyYW5zbGF0
aW9uX3VuaXQKKyUlCisKK3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5USUZJRVIgewor
ICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNh
bCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7CisgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1ib2wgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBp
ZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtl
VmFyaWFibGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZp
ZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEg
c3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihz
eW1ib2wpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wKKyAgICAgICAgLy8gcG9w
IHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBl
KCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgKSB7CisgICAgICAgICAgICBDb25zdGFudFVu
aW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAg
ICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAkMS5s
aW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSk7CisgICAgfQorICAgIDsKKworcHJpbWFy
eV9leHByZXNzaW9uCisgICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgfCBJTlRDT05TVEFOVCB7CisgICAgICAgIC8vCisgICAgICAgIC8vIElO
VF9UWVBFIGlzIG9ubHkgMTYtYml0IHBsdXMgc2lnbiBiaXQgZm9yIHZlcnRleC9mcmFnbWVudCBz
aGFkZXJzLAorICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cworICAg
ICAgICAvLworICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZs
b3ciLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICB9
CisgICAgfCBGTE9BVENPTlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3Qo
JDEuZik7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJPT0xDT05TVEFOVCB7CisgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KCQxLmIpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IExFRlRfUEFSRU4g
ZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsK
KworcG9zdGZpeF9leHByZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4cHJlc3Npb24geworICAgICAg
ICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQg
aW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoISQxLT5pc0Fy
cmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1h
dHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19z
dHIoKSwgIiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0
cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpIHsKKyAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0YW50IGZvbGRp
bmcgZm9yIGFycmF5cworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25z
dEFycmF5Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVy
KCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQx
LT5pc1ZlY3RvcigpKSB7ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3JzCisgICAgICAg
ICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICAgICAgZmllbGRzLm51
bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOyAvLyBuZWVk
IHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJh
eQorICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJp
eCgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0TWF0cml4Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoJDMtPmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgkMS0+aXNW
ZWN0b3IoKSB8fCAkMS0+aXNNYXRyaXgoKSkgJiYgJDEtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+
Z2V0SUNvbnN0KCkgJiYgISQxLT5pc0FycmF5KCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoJDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5n
ZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhT
aXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksICQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRy
dWUsICQyLmxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlT
ZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksIDAs
IGZhbHNlLCAkMi5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdldFR5cGUoKS5n
ZXRBcnJheVNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQn
IiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJ
Q29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgp
ICYmICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBtdXN0IGJl
IHJlZGVjbGFyZWQgd2l0aCBhIHNpemUgYmVmb3JlIGJlaW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlh
YmxlIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVs
c2UgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpKQorICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCksICQxLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6
ZSgpLCAkMS0+aXNNYXRyaXgoKSkpOworCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBv
aW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgk
MS0+aXNNYXRyaXgoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+
Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAg
ICBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBl
KCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQx
LT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpICYm
ICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAk
JC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwg
RXZxQ29uc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSwgRXZxVGVtcG9yYXJ5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLT5zZXRUeXBl
KCQxLT5nZXRUeXBlKCkpOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGwgeworICAgICAgICAk
JCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNU
SU9OIHsKKyAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJy
YXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBUVmVj
dG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VW
ZWN0b3JGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgJDMu
bGluZSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZl
Y3RvciBmaWVsZHMKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RW
ZWN0b3JOb2RlKGZpZWxkcywgJDEsICQzLmxpbmUpOworICAgICAgICAgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRC
YXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCokMy5zdHJp
bmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmllbGRzLm51bSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGluZSk7
CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUo
KSwgJDEtPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOworICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUs
ICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
IChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAg
IFRNYXRyaXhGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5w
YXJzZU1hdHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRz
LCAkMy5saW5lKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBub24tc2NhbGFyIGZpZWxk
cyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwg
JDEtPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdl
dE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5l
KTsKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAg
ICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Cisg
ICAgICAgICAgICBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7
CisgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5h
bCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCpmaWVsZHMp
W2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgJDIu
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
JC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRo
ZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUg
c3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVz
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFu
Z2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAkMy5saW5lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3Ry
dWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWly
ZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBvc3RmaXhfZXhw
cmVzc2lvbiBJTkNfT1AgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNo
ZWNrKCQyLmxpbmUsICIrKyIsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVu
YXJ5T3BFcnJvcigkMi5saW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiLS0iLCAkMSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEs
ICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDIubGluZSwgIi0t
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsK
KworaW50ZWdlcl9leHByZXNzaW9uCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKwor
ZnVuY3Rpb25fY2FsbAorICAgIDogZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QgeworICAgICAgICBU
RnVuY3Rpb24qIGZuQ2FsbCA9ICQxLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBm
bkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBi
ZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3lt
Ym9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0
ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlz
IHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25z
dHJ1Y3RvckVycm9yQ2hlY2soJDEubGluZSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0
eXBlKSkgeworICAgICAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3Is
IG9mIHR5cGUgJ3R5cGUnLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCQxLmludGVybU5vZGUsICZ0eXBlLCBvcCwg
Zm5DYWxsLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKDAsIG9wLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5zZXRU
eXBlKHR5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7Cisg
ICAgICAgICAgICBib29sIGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNl
Q29udGV4dC0+ZmluZEZ1bmN0aW9uKCQxLmxpbmUsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAg
ICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLiAgQnV0LCBpdCBtaWdodCBzdGlsbCBtYXAgdG8g
YSBidWlsdC1pbgorICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOwor
ICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1h
cHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmlu
dGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJy
b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3Bl
cmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3AsICQxLmxpbmUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAg
ICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICQxLmxpbmUpOworICAg
ICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgp
KTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIg
dGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5l
ZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBp
dCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0
aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdz
IGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNB
Z2dyZWdhdGUoKS0+c2V0VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPmdl
dEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllckxpc3QmIHF1YWxpZmllckxpc3QgPSAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+
Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Zm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBxdWFsID0gKCpmbkNhbmRpZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBw
YXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcXVh
bGlmaWVyTGlzdC5wdXNoX2JhY2socXVhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQorICAgICAgICAg
ICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5CisgICAgICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5s
aW5lKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAgICA7CisK
K2Z1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVu
Y3Rpb25fY2FsbF9nZW5lcmljIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5l
LCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7CisKK2Z1bmN0
aW9uX2NhbGxfZ2VuZXJpYworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0
ZXJzIFJJR0hUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQy
LmxpbmU7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBS
SUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5l
OworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKKyAg
ICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIFZPSURfVFlQRSB7CisgICAgICAgICQkLmZ1bmN0aW9u
ID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUgPSAwOworICAgIH0KKyAgICB8IGZ1bmN0aW9u
X2NhbGxfaGVhZGVyIHsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50
ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9w
YXJhbWV0ZXJzCisgICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Np
b24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5
cGUoKSkgfTsKKyAgICAgICAgJDEtPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1
bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUgPSAkMjsKKyAgICB9CisgICAgfCBm
dW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5n
ZXRUeXBlKCkpIH07CisgICAgICAgICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwor
ICAgICAgICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0aW9uOworICAgICAgICAkJC5pbnRlcm1Ob2Rl
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2Rl
LCAkMywgJDIubGluZSk7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXIKKyAg
ICA6IGZ1bmN0aW9uX2lkZW50aWZpZXIgTEVGVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgQ29uc3RydWN0b3JzIGxvb2sgbGlrZSBm
dW5jdGlvbnMsIGJ1dCBhcmUgcmVjb2duaXplZCBhcyB0eXBlcy4KKworZnVuY3Rpb25faWRlbnRp
ZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAvLworICAgICAgICAvLyBDb25z
dHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBpZiAoJDEuYXJyYXkpIHsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9h
cnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoJDEudXNlckRlZikgeworICAgICAgICAgICAgVFN0cmlu
ZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAg
ICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBl
LCBFT3BDb25zdHJ1Y3RTdHJ1Y3QpOworICAgICAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgICAg
ICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAg
ICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
TWF0NDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzI7
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBG
UkFHX1ZFUlRfT05MWSgiaXZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZl
YzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzQiLCAkMS5saW5lKTsgb3Ag
PSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAg
IHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAk
MS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzMiLCAkMS5saW5lKTsgb3AgPSBFT3BD
b25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICBGUkFH
X1ZFUlRfT05MWSgiYnZlYzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIs
IFRUeXBlOjpnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9h
dDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlw
ZSB0eXBlKCQxKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgSURFTlRJRklFUiB7CisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAg
IHwgRklFTERfU0VMRUNUSU9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
KyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0
eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1bmFyeV9leHBy
ZXNzaW9uCisgICAgOiBwb3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5saW5lLCAiKysiLCAkMikpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBERUNfT1AgdW5hcnlfZXhw
cmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEu
bGluZSwgIi0tIiwgJDIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZURlY3JlbWVudCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJy
b3IoJDEubGluZSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9
CisgICAgfQorICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAg
IGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CisgICAgICAgICAgICAgICAgc3dpdGNoKCQx
Lm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0i
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAi
ISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5l
LCBlcnJvck9wLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7
CisvLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3RzLgorCit1
bmFyeV9vcGVyYXRvcgorICAgIDogUExVUyAgeyAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBF
T3BOdWxsOyB9CisgICAgfCBEQVNIICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcE5l
Z2F0aXZlOyB9CisgICAgfCBCQU5HICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcExv
Z2ljYWxOb3Q7IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYnIHVuYXJ5
IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uCisgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBGUkFH
X1ZFUlRfT05MWSgiKiIsICQyLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7
CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCIvIiwgJDIubGluZSk7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgJDIu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi8iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAg
ICAgICB9CisgICAgfQorICAgIDsKKworYWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Np
b24gUExVUyBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCAkMi5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiKyIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVf
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hp
ZnRfZXhwcmVzc2lvbgorICAgIDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAg
ICA7CisKK3JlbGF0aW9uYWxfZXhwcmVzc2lvbgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4
cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
Mi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBS
SUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPiIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIHwg
cmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
RXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoJDIubGluZSwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhw
cmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2VxdWFsaXR5X2V4
cHJlc3Npb24KKyAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8
IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uICB7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVh
bCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigk
Mi5saW5lLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAg
fSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRl
eHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBlcXVh
bGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwg
JDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5s
aW5lLCAiIT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBl
bHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQt
PmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCithbmRf
ZXhwcmVzc2lvbgorICAgIDogZXF1YWxpdHlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7
CisKK2V4Y2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBhbmRfZXhwcmVzc2lvbiB7ICQkID0g
JDE7IH0KKyAgICA7CisKK2luY2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBleGNsdXNpdmVf
b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2xvZ2ljYWxfYW5kX2V4cHJlc3Np
b24KKyAgICA6IGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiBBTkRfT1AgaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbEFuZCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BF
cnJvcigkMi5saW5lLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4cHJlc3Npb24KKyAgICA6IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX3hvcl9leHBy
ZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwg
JDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUs
ICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAg
fQorICAgIDsKKworbG9naWNhbF9vcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX3hvcl9leHBy
ZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxv
Z2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5saW5lLCBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAifHwiLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2NvbmRp
dGlvbmFsX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7
IH0KKyAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBRVUVTVElPTiBleHByZXNzaW9uIENPTE9O
IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rp
b24oJDEsICQzLCAkNSwgJDIubGluZSk7CisgICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1
LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAkJCA9IDA7CisKKyAgICAgICAgaWYgKCQkID09IDAp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiOiIs
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Npb24KKyAgICA6IGNv
bmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFyeV9leHByZXNzaW9u
IGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQyLmxpbmUpOwor
ICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3NpZ25F
cnJvcigkMi5saW5lLCAiYXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8
fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIu
bGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCithc3NpZ25tZW50X29wZXJhdG9yCisgICAgOiBF
UVVBTCAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUg
PSAkMS5saW5lOyAkJC5vcCA9IEVPcEFzc2lnbjsgfQorICAgIHwgTVVMX0FTU0lHTiAgIHsgRlJB
R19WRVJUX09OTFkoIio9IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3Ag
PSBFT3BNdWxBc3NpZ247IH0KKyAgICB8IERJVl9BU1NJR04gICB7IEZSQUdfVkVSVF9PTkxZKCIv
PSIsICQxLmxpbmUpOyAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wRGl2QXNzaWdu
OyB9CisgICAgfCBBRERfQVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcEFkZEFzc2lnbjsgfQorICAgIHwgU1VC
X0FTU0lHTiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5saW5lID0g
JDEubGluZTsgJCQub3AgPSBFT3BTdWJBc3NpZ247IH0KKyAgICA7CisKK2V4cHJlc3Npb24KKyAg
ICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIubGluZSk7Cisg
ICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoJDIubGluZSwgIiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJCA9ICQzOworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhw
cmVzc2lvbgorICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitkZWNsYXJhdGlv
bgorICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAgICAgICAgVEZ1bmN0
aW9uICZmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIHBy
b3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwcm90
b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAg
ICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50
eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwgJDEubGluZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAi
IiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcGVyYXRvcihFT3BQcm90b3R5
cGUpOworICAgICAgICAkJCA9IHByb3RvdHlwZTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0
b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQorICAg
ICAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNsYXJhdGlvbik7
CisgICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8IFBSRUNJU0lP
TiBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsK
KyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAk
My50eXBlLCAkMiApOworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25f
cHJvdG90eXBlCisgICAgOiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVOICB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5j
dGlvbiBhcmUgYWxsb3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRl
ZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciBy
ZWRlZmluaXRpb25zCisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYg
aXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNs
YXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1
YWxpZmllcnMgbXVzdCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5m
aW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7CisgICAg
ICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVy
bG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKCpwcmV2RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoKiQxKVtpXS50
eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUg
cGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmco
KSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLwor
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBh
IGRlZmluaXRpb24sCisgICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRo
ZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisg
ICAgICAgIC8vIGJlaW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFy
YXRpb24sIG5vdCB0aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAg
ICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworCisgICAg
ICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC5mdW5jdGlvbik7CisgICAg
fQorICAgIDsKKworZnVuY3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rpb25faGVhZGVyIHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisKK2Z1bmN0aW9uX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBwYXJhbWV0ZXJfZGVj
bGFyYXRpb24geworICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAkJCA9ICQx
OworICAgICAgICBpZiAoJDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkK
KyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkZWxldGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9o
ZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIg
ZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFy
YW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisg
ICAgICAgIC8vCisgICAgICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRWb2lkKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIg
PiBmaXJzdCBpcyB2b2lkCisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAn
KHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAkJCA9ICQxOwor
ICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRlcigkMy5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgOworCitmdW5jdGlvbl9oZWFkZXIKKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElE
RU5USUZJRVIgTEVGVF9QQVJFTiB7CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xv
YmFsICYmICQxLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rp
b24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1h
a2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhl
IGZ1bmN0aW9uIGFzIGEgcHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBw
b3J0IHJlY3Vyc2lvbikKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5
cGUgdHlwZSgkMSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcs
IHR5cGUpOworICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRl
cl9kZWNsYXJhdG9yCisgICAgLy8gVHlwZSArIG5hbWUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIElE
RU5USUZJRVIgeworICAgICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lk
JyIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7JDIuc3RyaW5nLCBuZXcg
VFR5cGUoJDEpfTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgICAgICQkLnBhcmFt
ID0gcGFyYW07CisgICAgfQorICAgIHwgdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBMRUZUX0JS
QUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQsIHNpemUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQxLnNldEFycmF5
KHRydWUsIHNpemUpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCQxKTsKKyAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgJDIuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICQk
LmxpbmUgPSAkMi5saW5lOworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7
CisKK3BhcmFtZXRlcl9kZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9ubHkgcGFyYW1l
dGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJTl9RVUFMLCBP
VVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8vCisgICAgLy8g
VHlwZSArIG5hbWUKKyAgICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxp
ZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQy
LCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3Igewor
ICAgICAgICAkJCA9ICQyOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFt
RXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICAvLworICAgIC8v
IE9ubHkgdHlwZQorICAgIC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlm
aWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIs
ICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1l
dGVyU2FtcGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlw
ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOwor
CitwYXJhbWV0ZXJfcXVhbGlmaWVyCisgICAgOiAvKiBlbXB0eSAqLyB7CisgICAgICAgICQkID0g
RXZxSW47CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgICQkID0gRXZxSW47CisgICAg
fQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICAkJCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJ
Tk9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJbk91dDsKKyAgICB9CisgICAgOworCitwYXJh
bWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBh
cmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9
IHBhcmFtOworICAgIH0KKyAgICA7CisKK2luaXRfZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5n
bGVfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgICAgICAKKyAgICAgICAgaWYg
KCQkLnR5cGUucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCQudHlw
ZS5wcmVjaXNpb24gPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNp
b24oJDEudHlwZS50eXBlKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lv
bkVycm9yQ2hlY2soJDEubGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUudHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5U
SUZJRVIgeworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgJDMubGluZSks
ICQzLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25J
bml0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9s
aXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQx
LnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3Ry
aW5nLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVy
RXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXko
dHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5
cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGlu
ZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICok
My5zdHJpbmcsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUs
ICQ1LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJv
ckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUg
PSBUVHlwZSgkMS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwor
ICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgdHlwZSwgJDMubGluZSksICQzLmxpbmUpOworICAg
ICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklF
UiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEu
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAk
JCA9ICQxOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBh
cnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCAkNy0+Z2V0VHlwZSgpLmdldEFycmF5U2l6
ZSgpKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5s
aW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBh
cnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5
cGUsICQ3LCBpbnRlcm1Ob2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAg
ICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ2LmxpbmUpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwg
aW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3Rh
bnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQk
ID0gJDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFy
c2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soJDQubGluZSwgJDUsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5l
LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5leHRlbnNpb25FcnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBhcnNl
Q29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUs
ICQ4LCBpbnRlcm1Ob2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAg
ICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ3LmxpbmUpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgaW5p
dF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGlu
ZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICAkJCA9ICQxOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAg
ICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJp
bmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCBpbnRlcm1Ob2RlLCAkNC5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzaW5n
bGVfZGVjbGFyYXRpb24KKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKKyAgICAgICAgJCQu
dHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgVFR5cGUoJDEpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgfQorICAgIHwg
ZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiB7CisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIu
bGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbklu
aXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
JCQudHlwZSA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJ
RklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIu
bGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJz
ZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAkMS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Cisg
ICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQy
LnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElE
RU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7
CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQ0LCBz
aXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBl
LnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgdHlwZSwgJDIubGluZSksICQyLmxpbmUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxp
bmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQs
IHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2so
JDMubGluZSwgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNp
ZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsK
KworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNv
bnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGlu
dGVybU5vZGUpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSBy
ZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAg
ICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICQzLmxpbmUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQg
SURFTlRJRklFUiB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24i
LCAkMS5saW5lKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW52YXJpYW50VmFyeWluZ091
dDsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICB9CisKKy8vCisvLyBQbGFj
ZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8gICAgfCBidWZm
ZXJfc3BlY2lmaWVyIHsKKy8vICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworLy8gICAg
fQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2VudW0nLCBvciAndHlwZWRlZicuCisK
Ky8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLwor
Ly8ldHlwZSA8aW50ZXJtPiBidWZmZXJfZGVjbGFyYXRpb24KKy8vJXR5cGUgPGludGVybS50eXBl
PiBidWZmZXJfc3BlY2lmaWVyIGlucHV0X29yX291dHB1dCBidWZmZXJfZGVjbGFyYXRpb25fbGlz
dAorLy9idWZmZXJfc3BlY2lmaWVyCisvLyAgICA6IGlucHV0X29yX291dHB1dCBMRUZUX0JSQUNF
IGJ1ZmZlcl9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKy8vICAgIH0KKy8vICAgIDsK
Ky8vCisvL2lucHV0X29yX291dHB1dAorLy8gICAgOiBJTlBVVCB7CisvLyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlucHV0IikpCisvLyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIFVOUEFDS19PTkxZKCJpbnB1dCIsICQxLmxpbmUp
OworLy8gICAgICAgICQkLnF1YWxpZmllciA9IEV2cUlucHV0OworLy8gICAgfQorLy8gICAgfCBP
VVRQVVQgeworLy8gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJvdXRwdXQi
KSkKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgUEFD
S19PTkxZKCJvdXRwdXQiLCAkMS5saW5lKTsKKy8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFP
dXRwdXQ7CisvLyAgICB9CisvLyAgICA7CisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBw
YWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb25fbGlzdAorLy8g
ICAgOiBidWZmZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAgfCBidWZmZXJfZGVjbGFy
YXRpb25fbGlzdCBidWZmZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAgOworCisvLwor
Ly8gSW5wdXQvb3V0cHV0IHNlbWFudGljczoKKy8vICAgZmxvYXQgbXVzdCBiZSAxNiBvciAzMiBi
aXRzCisvLyAgIGZsb2F0IGFsaWdubWVudCByZXN0cmljdGlvbnM/CisvLyAgIGNoZWNrIGZvciBv
bmx5IG9uZSBpbnB1dCBhbmQgb25seSBvbmUgb3V0cHV0CisvLyAgIHN1bSBvZiBiaXRmaWVsZHMg
aGFzIHRvIGJlIG11bHRpcGxlIG9mIDMyCisvLworCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0
aGUgcGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8vYnVmZmVyX2RlY2xhcmF0aW9uCisvLyAg
ICA6IHR5cGVfc3BlY2lmaWVyIElERU5USUZJRVIgQ09MT04gY29uc3RhbnRfZXhwcmVzc2lvbiBT
RU1JQ09MT04geworLy8gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVj
aygkMi5saW5lLCAqJDIuc3RyaW5nLCBwYXJzZUNvbnRleHQpKQorLy8gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFi
bGUoJDIuc3RyaW5nLCAkMSk7CisvLyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgeworLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAg
ICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBw
b3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKKy8vICAgICAgICB9CisvLyAgICB9CisvLyAgICA7CisK
K2Z1bGx5X3NwZWNpZmllZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgICQk
ID0gJDE7CisKKyAgICAgICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0
cyIpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYg
KCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAi
R0xfM0RMX2FycmF5X29iamVjdHMiKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCQyLmxpbmUsICQxKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
JDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0g
RWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0
cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
SW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCisgICAgICAgICAgICAoJDIu
dHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnF1
YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1YWxpZmllcgor
ICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0
LCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBBVFRSSUJVVEUgeworICAgICAgICBWRVJURVhfT05M
WSgiYXR0cmlidXRlIiwgJDEubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2Jh
bEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICQxLmxpbmUpOwor
ICAgIH0KKyAgICB8IFZBUllJTkcgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxF
cnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAg
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0lu
LCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAkMS5s
aW5lKTsKKyAgICB9CisgICAgfCBVTklGT1JNIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAkMS5saW5lKTsK
KyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcHJlY2lzaW9uX3F1YWxpZmll
ciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQu
cHJlY2lzaW9uID0gJDE7CisgICAgfQorICAgIDsKKworcHJlY2lzaW9uX3F1YWxpZmllcgorICAg
IDogSElHSF9QUkVDSVNJT04geworICAgICAgICAkJCA9IEVicEhpZ2g7CisgICAgfQorICAgIHwg
TUVESVVNX1BSRUNJU0lPTiB7CisgICAgICAgICQkID0gRWJwTWVkaXVtOworICAgIH0KKyAgICB8
IExPV19QUkVDSVNJT04gIHsKKyAgICAgICAgJCQgPSBFYnBMb3c7CisgICAgfQorICAgIDsKKwor
dHlwZV9zcGVjaWZpZXJfbm9fcHJlYworICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IExF
RlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAk
JCA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
JDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXJf
bm9uYXJyYXkKKyAgICA6IFZPSURfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAkMS5saW5lKTsK
KyAgICB9CisgICAgfCBGTE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsK
KyAgICB9CisgICAgfCBJTlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAg
IH0KKyAgICB8IEJPT0xfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICB9
CisvLyAgICB8IFVOU0lHTkVEIElOVF9UWVBFIHsKKy8vICAgICAgICBQQUNLX1VOUEFDS19PTkxZ
KCJ1bnNpZ25lZCIsICQxLmxpbmUpOworLy8gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworLy8gICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7Cisv
LyAgICB9CisgICAgfCBWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAg
ICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAg
IHwgVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5s
aW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IEJWRUMzIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7
CisgICAgfQorICAgIHwgQlZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVDMiB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQs
IHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAg
IHwgSVZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdn
cmVnYXRlKDMpOworICAgIH0KKyAgICB8IElWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGlu
ZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsK
KyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDIiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIH0K
KyAgICB8IE1BVFJJWDMgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIsICQxLmxpbmUp
OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUo
MywgdHJ1ZSk7CisgICAgfQorICAgIHwgTUFUUklYNCB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZ
KCJtYXQ0IiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkQgeworICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
MkQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsKKyAgICAgICAg
RlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJlIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3Vi
ZSwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSAkMTsK
KyAgICAgICAgJCQucXVhbGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgfQorICAgIHwgVFlQRV9O
QU1FIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5
cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5
cGUuCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxU
VmFyaWFibGUqPigkMS5zeW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICQx
LmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICB9CisgICAgOwor
CitzdHJ1Y3Rfc3BlY2lmaWVyCisgICAgOiBTVFJVQ1QgSURFTlRJRklFUiBMRUZUX0JSQUNFIHN0
cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9
IG5ldyBUVHlwZSgkNCwgKiQyLnN0cmluZyk7CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVE
ZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAg
IGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIs
ICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBF
dnFUZW1wb3JhcnksICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwor
ICAgIH0KKyAgICB8IFNUUlVDVCBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJ
R0hUX0JSQUNFIHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgkMywgVFN0
cmluZygiIikpOworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwg
JDEubGluZSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsK
Kworc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3Ry
dWN0X2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
aWYgKCgqJCQpW2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqJDIpW2ldLnR5cGUtPmdldEZp
ZWxkTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKCok
MilbaV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0
IiwgKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICQkLT5wdXNoX2JhY2soKCokMilbaV0pOworICAgICAgICB9
CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBlX3NwZWNpZmll
ciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gJDI7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+dm9pZEVycm9yQ2hlY2soJDEubGluZSwgKCokMilb
MF0udHlwZS0+Z2V0RmllbGROYW1lKCksICQxKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBD
YXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3RzIG9mIHR5cGUsIGxpa2Ug
YXJyYXktbmVzcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNl
dFR5cGUoJDEudHlwZSwgJDEuc2l6ZSwgJDEubWF0cml4LCAkMS51c2VyRGVmKTsKKworICAgICAg
ICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAgICAgaWYgKCgq
JCQpW2ldLnR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDEubGluZSwgJDEpKQorICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKKyAgICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRBcnJheVNpemUo
JDEuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAg
ICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkp
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3JfbGlzdAorICAg
IDogc3RydWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsK
KyAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0
b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkLT5wdXNoX2JhY2so
JDMpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAgOiBJREVOVElGSUVS
IHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUs
ICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgJCQudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAg
ICAkJC5saW5lID0gJDEubGluZTsKKyAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5z
dHJpbmcpOworICAgIH0KKyAgICB8IElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4
cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2Vy
dmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwg
RWJwVW5kZWZpbmVkKTsKKyAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAgICAgICQkLnR5
cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5nKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkMywgc2l6
ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQudHlw
ZS0+c2V0QXJyYXlTaXplKHNpemUpOworICAgIH0KKyAgICA7CisKK2luaXRpYWxpemVyCisgICAg
OiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitkZWNsYXJhdGlv
bl9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworc3Rh
dGVtZW50CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAgIHwgc2lt
cGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTog
IE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBwb3J0ZWQuCisKK3NpbXBs
ZV9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7ICQkID0gJDE7IH0KKyAg
ICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNlbGVjdGlvbl9z
dGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9zdGF0ZW1lbnQgICB7ICQk
ID0gJDE7IH0KKyAgICB8IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQkID0gJDE7IH0KKyAgICA7
CisKK2NvbXBvdW5kX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7ICQk
ID0gMDsgfQorICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVz
aCgpOyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsg
fSBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMyAhPSAwKQorICAgICAgICAgICAgJDMtPnNl
dE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOwor
CitzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3
X3Njb3BlIHsgJCQgPSAkMTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAgICAg
ICB7ICQkID0gJDE7IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUK
KyAgICAvLyBTdGF0ZW1lbnQgdGhhdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBzY29wZSwgZm9yIHNl
bGVjdGlvbl9zdGF0ZW1lbnQsIGl0ZXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IExFRlRfQlJBQ0Ug
UklHSFRfQlJBQ0UgeworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIHwgTEVGVF9CUkFDRSBz
dGF0ZW1lbnRfbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMikKKyAgICAgICAgICAg
ICQyLT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisgICAgICAgICQkID0gJDI7CisgICAgfQor
ICAgIDsKKworc3RhdGVtZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgMCk7CisgICAgfQor
ICAgIHwgc3RhdGVtZW50X2xpc3Qgc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAgfQorICAgIDsK
KworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9IDA7IH0KKyAg
ICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElGIExFRlRfUEFS
RU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgeworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS5saW5lLCAkMykpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCAkMS5saW5lKTsKKyAgICB9Cisg
ICAgOworCitzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6IHN0YXRlbWVudCBFTFNFIHN0
YXRlbWVudCB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gJDM7
CisgICAgfQorICAgIHwgc3RhdGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAg
ICAgJCQubm9kZTIgPSAwOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdz
d2l0Y2gnLiAgU3dpdGNoIHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29uZGl0aW9uCisg
ICAgLy8gSW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xlIGRl
Y2xhcmF0aW9ucworICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQxKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGZ1bGx5X3Nw
ZWNpZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIu
bGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIuc3Ry
aW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICAgICAgJCQgPSAkNDsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2l0ZXJhdGlvbl9zdGF0ZW1lbnQK
KyAgICA6IFdISUxFIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2go
KTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJR0hUX1BB
UkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZExvb3AoMCwgJDYsICQ0LCAwLCB0cnVlLCAkMS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRE8geyArK3BhcnNlQ29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBleHByZXNzaW9u
IFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xF
cnJvckNoZWNrKCQ4LmxpbmUsICQ2KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgw
LCAkMywgJDYsIDAsIGZhbHNlLCAkNC5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4geyBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7
IH0gZm9yX2luaXRfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudCBSSUdIVF9QQVJFTiBzdGF0
ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKCQ0
LCAkNywgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJw
cmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCB0cnVlLCAkMS5saW5lKTsKKyAgICAg
ICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIDsKKworZm9y
X2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRpdGlvbiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8geworICAgICAg
ICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBjb25k
aXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQu
bm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gZXhwcmVzc2lv
biAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOworICAg
IH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBv
bmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJS
RUFLIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWwgPD0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiYnJl
YWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CisgICAg
fQorICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZv
aWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lk
IGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBSRVRV
Uk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rp
b24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNo
aW5nIHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09MT04geworICAg
ICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgJDEubGluZSk7CisgICAgfQor
ICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBw
b3J0ZWQuCisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsK
KyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOwor
ICAgIH0KKyAgICB8IHRyYW5zbGF0aW9uX3VuaXQgZXh0ZXJuYWxfZGVjbGFyYXRpb24geworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQy
LCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAgIH0KKyAgICA7
CisKK2V4dGVybmFsX2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9kZWZpbml0aW9uIHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBkZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0g
JDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVmaW5pdGlvbgorICAgIDogZnVuY3Rpb25f
cHJvdG90eXBlIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24p
OworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24uZ2V0TWFuZ2xlZE5hbWUoKSkp
OworICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5j
dGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCisgICAg
ICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxl
LiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCisgICAgICAgIC8vIGFuIGVhcmxpZXIgb2Nj
dXJhbmNlLgorICAgICAgICAvLworICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZpbmVkKCkpIHsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFk
eSBoYXMgYSBib2R5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2Vz
IGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAg
ICAgLy8KKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55
IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZv
aWQpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIiLCBm
dW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4gZnVuY3Rpb24g
Y2Fubm90IHJldHVybiBhIHZhbHVlIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAg
ICAvLyBOZXcgc3ltYm9sIHRhYmxlIHNjb3BlIGZvciBib2R5IG9mIGZ1bmN0aW9uIHBsdXMgaXRz
IGFyZ3VtZW50cworICAgICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUgcmV0dXJuIHR5
cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAgICAgICAgLy8K
KyAgICAgICAgcGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5n
ZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1Zh
bHVlID0gZmFsc2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5zZXJ0IHBhcmFtZXRlcnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGhhcyBu
byBuYW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQgaXQKKyAgICAgICAg
Ly8gKGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8gdGhlIEhJTCwg
c28gbG93ZXIgbGV2ZWwgY29kZQorICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBmaW5kIHBhcmFt
ZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtTm9kZXMg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgVFBhcmFtZXRlciYgcGFy
YW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAg
ICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5u
YW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1l
KCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRyYW5zZmVyIG93
bmVyc2hpcCBvZiBuYW1lIHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSA9IDA7CisKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRO
YW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5saW5lKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEubGluZSksICQx
LmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRl
cnMsICQxLmxpbmUpOworICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOwor
ICAgICAgICBwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAgICBj
b21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgLy8/PyBDaGVjayB0aGF0
IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAgICAg
ICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1l
ZGlhdGUgY29kZQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJl
dHVybnNWYWx1ZSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
ZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJt
QWdncmVnYXRlLCAkMywgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7CisgICAgICAgICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5mdW5j
dGlvbi0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGlu
Zm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZp
YworICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmll
ZCBmcm9tIHRoZSBwYXJzZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRP
cHRpbWl6ZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21h
LmRlYnVnKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUo
cGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICB9CisgICAgOwor
CislJQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTcg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVybWVk
aWF0ZS5oIgorCisvLworLy8gVHdvIHB1cnBvc2VzOgorLy8gMS4gIFNob3cgYW4gZXhhbXBsZSBv
ZiBob3cgdG8gaXRlcmF0ZSB0cmVlLiAgRnVuY3Rpb25zIGNhbgorLy8gICAgIGFsc28gZGlyZWN0
bHkgY2FsbCBUcmF2ZXJzZSgpIG9uIGNoaWxkcmVuIHRoZW1zZWx2ZXMgdG8KKy8vICAgICBoYXZl
IGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBwcm9jZXNzIHRoYW4gc2hvd24gaGVyZS4K
Ky8vICAgICBTZWUgdGhlIGxhc3QgZnVuY3Rpb24gZm9yIGhvdyB0byBnZXQgc3RhcnRlZC4KKy8v
IDIuICBQcmludCBvdXQgYSB0ZXh0IGJhc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSB0cmVlLgorLy8K
KworLy8KKy8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRv
IG5vZGUgaW4KKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUT3V0cHV0VHJhdmVyc2VyIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRPdXRwdXRUcmF2ZXJzZXIo
VEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQorICAgIFRJbmZvU2luayYgaW5mb1Npbms7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAg
ICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCB2aXNpdCwgVEludGVybUJyYW5jaCopOworfTsKKworVFN0cmluZyBUVHlwZTo6Z2V0Q29tcGxl
dGVTdHJpbmcoKSBjb25zdAoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworCisgICAgaWYg
KHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUdsb2JhbCkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNp
b25TdHJpbmcoKSA8PCAiICI7CisgICAgaWYgKGFycmF5KQorICAgICAgICBzdHJlYW0gPDwgImFy
cmF5IG9mICI7CisgICAgaWYgKG1hdHJpeCkKKyAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIlgi
IDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXplID4gMSkKKyAgICAg
ICAgc3RyZWFtIDw8IHNpemUgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CisKKyAgICBzdHJl
YW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisv
LworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0IG9mIHRyYXZlcnNp
bmcuCisvLworCit2b2lkIE91dHB1dFRyZWVUZXh0KFRJbmZvU2luayYgaW5mb1NpbmssIFRJbnRl
cm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVwdGgpCit7CisgICAgaW50IGk7CisKKyAgICBpbmZv
U2luay5kZWJ1Zy5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAgZm9yIChpID0gMDsg
aSA8IGRlcHRoOyArK2kpCisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICIgICI7Cit9CisKKy8v
CisvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBmdW5jdGlvbnMuICBU
aGUgbGFzdCBvbmUKKy8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRyYXZlcnNhbC4KKy8v
CisvLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUgdGhlIGV4dGVybmFs
IHRyYXZlcnNhbAorLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5b3UgcHJvY2VzcyBj
aGlsZHJlbiB5b3Vyc2VsZiwKKy8vIHJldHVybiBmYWxzZS4KKy8vCisKK3ZvaWQgVE91dHB1dFRy
YXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBPdXRwdXRU
cmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworCisgICAgaW5mb1NpbmsuZGVidWcgPDwg
IiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7CisgICAgaW5mb1NpbmsuZGVidWcgPDwg
IigiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Cit9CisKK2Jvb2wgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5v
ZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVU
ZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Cisg
ICAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1v
dmUgc2Vjb25kIGNoaWxkIHRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEluaXRpYWxpemU6ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJpbml0aWFs
aXplIGZpcnN0IGNoaWxkIHdpdGggc2Vjb25kIGNoaWxkIjsgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWRkIHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
U3ViQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInN1YnRyYWN0IHNlY29uZCBj
aGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bEFz
c2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtdWx0aXBseSBzZWNvbmQgY2hpbGQg
aW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGlu
dG8gZmlyc3QgY2hpbGQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2Fs
YXJBc3NpZ246ICBvdXQuZGVidWcgPDwgInZlY3RvciBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBm
aXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNz
aWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3Qg
Y2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjog
IG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQi
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiZGl2aWRlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0LmRlYnVnIDw8ICJkaXJlY3Qg
aW5kZXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dC5kZWJ1
ZyA8PCAiaW5kaXJlY3QgaW5kZXgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVj
dFN0cnVjdDogICBvdXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiBvdXQuZGVidWcgPDwgInZlY3Rv
ciBzd2l6emxlIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6ICAgIG91dC5kZWJ1ZyA8
PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWI6
ICAgIG91dC5kZWJ1ZyA8PCAic3VidHJhY3QiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNdWw6ICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHki
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6ICAgIG91dC5kZWJ1ZyA8PCAiZGl2aWRlIjsg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVhbDogICAgICAgICAg
ICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgRXF1YWwiOyAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTm90RXF1YWw6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIE5v
dCBFcXVhbCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQuZGVidWcgPDwgIkNvbXBh
cmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDogICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dC5kZWJ1ZyA8PCAi
Q29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKworICAgICAgICBjYXNlIEVP
cFZlY3RvclRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwgInZlY3Rvci1zY2FsZSI7ICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXQuZGVidWcgPDwg
InZlY3Rvci10aW1lcy1tYXRyaXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzVmVjdG9yOiBvdXQuZGVidWcgPDwgIm1hdHJpeC10aW1lcy12ZWN0b3IiOyAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwgIm1hdHJpeC1z
Y2FsZSI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
OiBvdXQuZGVidWcgPDwgIm1hdHJpeC1tdWx0aXBseSI7ICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wTG9naWNhbE9yOiAgb3V0LmRlYnVnIDw8ICJsb2dpY2FsLW9yIjsgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiBvdXQuZGVidWcgPDwgImxvZ2ljYWwteG9yIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogb3V0LmRlYnVnIDw8ICJsb2dpY2Fs
LWFuZCI7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcgPDwgIjx1bmtub3duIG9w
PiI7CisgICAgfQorCisgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOwor
CisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAgb3V0LmRlYnVn
IDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3Rv
ckxvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgIG91dC5kZWJ1ZyA8
PCAiTmVnYXRlIGNvbmRpdGlvbmFsIjsgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJ
bmNyZW1lbnQ6ICBvdXQuZGVidWcgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1EZWNyZW1l
bnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgb3V0LmRl
YnVnIDw8ICJQcmUtSW5jcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0LmRlYnVnIDw8ICJDb252ZXJ0
IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpv
dXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0Zsb2F0Om91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0Ijti
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0LmRlYnVnIDw8ICJDb252
ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50
OiBvdXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29udkJvb2xUb0ludDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGludCI7
ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICBvdXQuZGVidWcgPDwg
InJhZGlhbnMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczog
ICAgICAgIG91dC5kZWJ1ZyA8PCAiZGVncmVlcyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzaW5lIjsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogICAgICAgICAgICBvdXQuZGVidWcg
PDwgImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVGFuOiAg
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAidGFuZ2VudCI7ICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgc2luZSI7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICBvdXQuZGVi
dWcgPDwgImFyYyBjb3NpbmUiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRh
bjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEVPcEV4cDogICAgICAgICAgICBvdXQuZGVidWcgPDwgImV4cCI7ICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiAgICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAibG9nIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BFeHAyOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJleHAyIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImxvZzIi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAic3FydCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BJbnZlcnNlU3FydDogICAgb3V0LmRlYnVnIDw8ICJpbnZlcnNlIHNxcnQiOyAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
QWJzb2x1dGUgdmFsdWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaWduOiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJTaWduIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEZsb29yOiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZsb29yIjsgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiQ2VpbGluZyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDog
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJGcmFjdGlvbiI7ICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAibGVuZ3RoIjsgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgb3V0LmRl
YnVnIDw8ICJub3JtYWxpemUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8JY2Fz
ZSBFT3BEUGR4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkUGR4IjsgICAgICAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR5OiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAorICAg
ICAgICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJmd2lkdGgi
OyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAKKworICAgICAgICBjYXNl
IEVPcEFueTogICAgICAgICAgICBvdXQuZGVidWcgPDwgImFueSI7ICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWxs
IjsgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcu
bWVzc2FnZShFUHJlZml4RXJyb3IsICJCYWQgdW5hcnkgb3AiKTsKKyAgICB9CisKKyAgICBvdXQu
ZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAg
IG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1
dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUq
IG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIGlmIChub2Rl
LT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAgICAgb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZp
eEVycm9yLCAibm9kZSBpcyBzdGlsbCBFT3BOdWxsISIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiAgICAgIG91
dC5kZWJ1ZyA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEVPcENv
bW1hOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tbWFcbiI7IHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gRGVmaW5pdGlv
bjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9u
Q2FsbDogIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5nZXROYW1lKCk7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dC5kZWJ1ZyA8PCAiRnVu
Y3Rpb24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0RmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0
IHZlYzIiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogIG91dC5kZWJ1
ZyA8PCAiQ29uc3RydWN0IHZlYzMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjNDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJvb2wiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IG91dC5kZWJ1ZyA8PCAiQ29uc3Ry
dWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IG91dC5k
ZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGludCI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dC5kZWJ1ZyA8PCAiQ29u
c3RydWN0IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91
dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SVZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDIi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91dC5kZWJ1ZyA8PCAi
Q29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDog
IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0U3RydWN0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qgc3RydWN0dXJlIjsgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJD
b21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOiAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcg
PDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBv
ciBFcXVhbCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dC5k
ZWJ1ZyA8PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXQuZGVidWcgPDwgIk5vdEVxdWFsIjsgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAgICAgICAgICBv
dXQuZGVidWcgPDwgIm1vZCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJwb3ciOyAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wQXRhbjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2VudCI7IGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtaW4iOyAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
bWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXQu
ZGVidWcgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFN0ZXA6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3RlcCI7ICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQuZGVidWcgPDwgInNtb290aHN0ZXAiOyAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQuZGVidWcgPDwgImRpc3Rh
bmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY3Jvc3MtcHJvZHVjdCI7ICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogICBvdXQuZGVidWcg
PDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVm
bGVjdDogICAgICAgb3V0LmRlYnVnIDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dC5kZWJ1ZyA8PCAicmVmcmFjdCI7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBv
dXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisKKyAgICAgICAg
ZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIGFnZ3JlZ2F0aW9u
IG9wIik7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UgJiYg
bm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJhbWV0ZXJzKQorICAgICAgICBvdXQuZGVidWcgPDwgIiAo
IiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8
PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7Cisg
ICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwg
bm9kZSwgZGVwdGgpOworCisgICAgb3V0LmRlYnVnIDw8ICJUZXN0IGNvbmRpdGlvbiBhbmQgc2Vs
ZWN0IjsKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygp
IDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5r
LCBub2RlLCBkZXB0aCk7CisgICAgb3V0LmRlYnVnIDw8ICJDb25kaXRpb25cbiI7CisgICAgbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworCisgICAgT3V0cHV0VHJlZVRleHQo
aW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpIHsK
KyAgICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2VcbiI7CisgICAgICAgIG5vZGUtPmdldFRy
dWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LmRlYnVn
IDw8ICJ0cnVlIGNhc2UgaXMgbnVsbFxuIjsKKworICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2Nr
KCkpIHsKKyAgICAgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAg
ICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRGYWxz
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVu
aW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0g
aW5mb1Npbms7CisKKyAgICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBPdXRw
dXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ld
LmdldEJDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInRydWUiOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJm
YWxzZSI7CisKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCAiY29uc3QgYm9v
bCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRGQ29uc3Qo
KTsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAg
ICAgICAgb3V0LmRlYnVnIDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0SUNv
bnN0KCk7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKGNvbnN0IGludClcbiI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIG91dC5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJVbmtub3duIGNvbnN0
YW50Iiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlz
aXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7
CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIG91dC5kZWJ1
ZyA8PCAiTG9vcCB3aXRoIGNvbmRpdGlvbiAiOworICAgIGlmICghIG5vZGUtPnRlc3RGaXJzdCgp
KQorICAgICAgICBvdXQuZGVidWcgPDwgIm5vdCAiOworICAgIG91dC5kZWJ1ZyA8PCAidGVzdGVk
IGZpcnN0XG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5r
LCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkgeworICAgICAgICBvdXQu
ZGVidWcgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRy
YXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3Ag
Y29uZGl0aW9uXG4iOworCisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRo
KTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9v
cCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgYm9keVxuIjsKKworICAgIGlm
IChub2RlLT5nZXRUZXJtaW5hbCgpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5r
LCBub2RlLCBkZXB0aCk7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBUZXJtaW5hbCBFeHBy
ZXNzaW9uXG4iOworICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRP
dXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBu
b2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVl
VGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkp
IHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBLaWxs
IjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0LmRlYnVn
IDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
dGludWU6ICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBSZXR1cm4iOyAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJC
cmFuY2g6IFVua25vd24gQnJhbmNoIjsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdl
dEV4cHJlc3Npb24oKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgIiB3aXRoIGV4cHJlc3Npb25c
biI7CisgICAgICAgICsrZGVwdGg7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIC0tZGVwdGg7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gVGhpcyBmdW5j
dGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2Fs
LgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tp
cCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2ls
bCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwordm9pZCBUSW50ZXJtZWRpYXRlOjpvdXRwdXRUcmVl
KFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290ID09IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1NpbmspOworCisgICAgcm9vdC0+dHJh
dmVyc2UoJml0KTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDg2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gRGVmaW5pdGlvbiBv
ZiB0aGUgaW4tbWVtb3J5IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisv
LyBvZiBzaGFkZXJzLiAgVGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJzZXIgY3JlYXRlcy4KKy8vCisv
LyBOb2RlcyBpbiB0aGUgdHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhpZXJhcmNoeSBvZiBjbGFzc2Vz
IGRlcml2ZWQgZnJvbSAKKy8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlzIGEgbm9kZSBpbiBhIHRyZWUu
ICBUaGVyZSBpcyBubyBwcmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsKKy8vIGVhY2ggbm9kZSBjYW4g
aGF2ZSBpdCdzIG93biB0eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4uCisvLworCisjaWZuZGVmIF9f
SU5URVJNRURJQVRFX0gKKyNkZWZpbmUgX19JTlRFUk1FRElBVEVfSAorCisjaW5jbHVkZSAiY29t
cGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVHlwZXMuaCIKKyNpbmNsdWRlICJj
b21waWxlci9Db25zdGFudFVuaW9uLmgiCisKKy8vCisvLyBPcGVyYXRvcnMgdXNlZCBieSB0aGUg
aGlnaC1sZXZlbCAocGFyc2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCisvLworZW51bSBUT3BlcmF0
b3IgeworICAgIEVPcE51bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBzaG91bGQgb25s
eSBtZWFuIGEgbm9kZSBpcyBzdGlsbCBiZWluZyBidWlsdAorICAgIEVPcFNlcXVlbmNlLCAgICAg
ICAgLy8gZGVub3RlcyBhIGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVycywgZXRjLgor
ICAgIEVPcEZ1bmN0aW9uQ2FsbCwgICAgCisgICAgRU9wRnVuY3Rpb24sICAgICAgICAvLyBGb3Ig
ZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8gYW4gYWdncmVn
YXRlIGxpc3RpbmcgdGhlIHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgorCisgICAgRU9wRGVjbGFy
YXRpb24sCisgICAgRU9wUHJvdG90eXBlLAorCisgICAgLy8KKyAgICAvLyBVbmFyeSBvcGVyYXRv
cnMKKyAgICAvLworCisgICAgRU9wTmVnYXRpdmUsCisgICAgRU9wTG9naWNhbE5vdCwKKyAgICBF
T3BWZWN0b3JMb2dpY2FsTm90LAorCisgICAgRU9wUG9zdEluY3JlbWVudCwKKyAgICBFT3BQb3N0
RGVjcmVtZW50LAorICAgIEVPcFByZUluY3JlbWVudCwKKyAgICBFT3BQcmVEZWNyZW1lbnQsCisK
KyAgICBFT3BDb252SW50VG9Cb29sLAorICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKKyAgICBFT3BD
b252Qm9vbFRvRmxvYXQsCisgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9wQ29udkZsb2F0
VG9JbnQsCisgICAgRU9wQ29udkJvb2xUb0ludCwKKworICAgIC8vCisgICAgLy8gYmluYXJ5IG9w
ZXJhdGlvbnMKKyAgICAvLworCisgICAgRU9wQWRkLAorICAgIEVPcFN1YiwKKyAgICBFT3BNdWws
CisgICAgRU9wRGl2LAorICAgIEVPcEVxdWFsLAorICAgIEVPcE5vdEVxdWFsLAorICAgIEVPcFZl
Y3RvckVxdWFsLAorICAgIEVPcFZlY3Rvck5vdEVxdWFsLAorICAgIEVPcExlc3NUaGFuLAorICAg
IEVPcEdyZWF0ZXJUaGFuLAorICAgIEVPcExlc3NUaGFuRXF1YWwsCisgICAgRU9wR3JlYXRlclRo
YW5FcXVhbCwKKyAgICBFT3BDb21tYSwKKworICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyLAorICAg
IEVPcFZlY3RvclRpbWVzTWF0cml4LAorICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9yLAorICAgIEVP
cE1hdHJpeFRpbWVzU2NhbGFyLAorCisgICAgRU9wTG9naWNhbE9yLAorICAgIEVPcExvZ2ljYWxY
b3IsCisgICAgRU9wTG9naWNhbEFuZCwKKworICAgIEVPcEluZGV4RGlyZWN0LAorICAgIEVPcElu
ZGV4SW5kaXJlY3QsCisgICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisKKyAgICBFT3BWZWN0b3JT
d2l6emxlLAorCisgICAgLy8KKyAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90ZW50aWFsbHkg
bWFwcGVkIHRvIG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BSYWRpYW5zLAorICAgIEVPcERl
Z3JlZXMsCisgICAgRU9wU2luLAorICAgIEVPcENvcywKKyAgICBFT3BUYW4sCisgICAgRU9wQXNp
biwKKyAgICBFT3BBY29zLAorICAgIEVPcEF0YW4sCisKKyAgICBFT3BQb3csCisgICAgRU9wRXhw
LAorICAgIEVPcExvZywKKyAgICBFT3BFeHAyLAorICAgIEVPcExvZzIsCisgICAgRU9wU3FydCwK
KyAgICBFT3BJbnZlcnNlU3FydCwKKworICAgIEVPcEFicywKKyAgICBFT3BTaWduLAorICAgIEVP
cEZsb29yLAorICAgIEVPcENlaWwsCisgICAgRU9wRnJhY3QsCisgICAgRU9wTW9kLAorICAgIEVP
cE1pbiwKKyAgICBFT3BNYXgsCisgICAgRU9wQ2xhbXAsCisgICAgRU9wTWl4LAorICAgIEVPcFN0
ZXAsCisgICAgRU9wU21vb3RoU3RlcCwKKworICAgIEVPcExlbmd0aCwKKyAgICBFT3BEaXN0YW5j
ZSwKKyAgICBFT3BEb3QsCisgICAgRU9wQ3Jvc3MsCisgICAgRU9wTm9ybWFsaXplLAorICAgIEVP
cEZhY2VGb3J3YXJkLAorICAgIEVPcFJlZmxlY3QsCisgICAgRU9wUmVmcmFjdCwKKworICAgIC8v
RU9wRFBkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgZXh0ZW5zaW9uCisgICAgLy9FT3BEUGR5LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9u
bHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvL0VPcEZ3aWR0aCwg
ICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVu
c2lvbgorCisgICAgRU9wTWF0cml4VGltZXNNYXRyaXgsCisKKyAgICBFT3BBbnksCisgICAgRU9w
QWxsLAorCisgICAgLy8KKyAgICAvLyBCcmFuY2gKKyAgICAvLworCisgICAgRU9wS2lsbCwgICAg
ICAgICAgICAvLyBGcmFnbWVudCBvbmx5CisgICAgRU9wUmV0dXJuLAorICAgIEVPcEJyZWFrLAor
ICAgIEVPcENvbnRpbnVlLAorCisgICAgLy8KKyAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAvLwor
CisgICAgRU9wQ29uc3RydWN0SW50LAorICAgIEVPcENvbnN0cnVjdEJvb2wsCisgICAgRU9wQ29u
c3RydWN0RmxvYXQsCisgICAgRU9wQ29uc3RydWN0VmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RWZWMz
LAorICAgIEVPcENvbnN0cnVjdFZlYzQsCisgICAgRU9wQ29uc3RydWN0QlZlYzIsCisgICAgRU9w
Q29uc3RydWN0QlZlYzMsCisgICAgRU9wQ29uc3RydWN0QlZlYzQsCisgICAgRU9wQ29uc3RydWN0
SVZlYzIsCisgICAgRU9wQ29uc3RydWN0SVZlYzMsCisgICAgRU9wQ29uc3RydWN0SVZlYzQsCisg
ICAgRU9wQ29uc3RydWN0TWF0MiwKKyAgICBFT3BDb25zdHJ1Y3RNYXQzLAorICAgIEVPcENvbnN0
cnVjdE1hdDQsCisgICAgRU9wQ29uc3RydWN0U3RydWN0LAorCisgICAgLy8KKyAgICAvLyBtb3Zl
cworICAgIC8vCisKKyAgICBFT3BBc3NpZ24sCisgICAgRU9wSW5pdGlhbGl6ZSwKKyAgICBFT3BB
ZGRBc3NpZ24sCisgICAgRU9wU3ViQXNzaWduLAorICAgIEVPcE11bEFzc2lnbiwKKyAgICBFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbiwK
KyAgICBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbiwKKyAgICBFT3BEaXZBc3NpZ24sCit9OworCitjbGFzcyBUSW50ZXJtVHJhdmVyc2Vy
OworY2xhc3MgVEludGVybUFnZ3JlZ2F0ZTsKK2NsYXNzIFRJbnRlcm1CaW5hcnk7CitjbGFzcyBU
SW50ZXJtVW5hcnk7CitjbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbjsKK2NsYXNzIFRJbnRlcm1T
ZWxlY3Rpb247CitjbGFzcyBUSW50ZXJtVHlwZWQ7CitjbGFzcyBUSW50ZXJtU3ltYm9sOworY2xh
c3MgVEludGVybUxvb3A7CitjbGFzcyBUSW5mb1Npbms7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZv
ciB0aGUgdHJlZSBub2RlcworLy8KK2NsYXNzIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBQ
T09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisKKyAgICBUSW50
ZXJtTm9kZSgpIDogbGluZSgwKSB7fQorICAgIHZpcnR1YWwgVFNvdXJjZUxvYyBnZXRMaW5lKCkg
Y29uc3QgeyByZXR1cm4gbGluZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKFRTb3VyY2VM
b2MgbCkgeyBsaW5lID0gbDsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKikgPSAwOworICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVkKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3Rh
bnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdl
dEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUJpbmFyeSog
Z2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVVuYXJ5
KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TZWxl
Y3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
flRJbnRlcm1Ob2RlKCkgeyB9Citwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxvYyBsaW5lOworfTsK
KworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3RydWN0IFRJbnRlcm1O
b2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRlcm1Ob2RlKiBub2Rl
MjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRoYXQgaGF2ZSBh
IHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1
YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9Cisg
ICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0g
dDsgfQorICAgIHZpcnR1YWwgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0
eXBlOyB9CisgICAgdmlydHVhbCBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlw
ZTsgfQorCisgICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVh
bGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQorICAgIHZpcnR1
YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNp
c2lvbigpOyB9CisgICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVy
biB0eXBlLmdldE5vbWluYWxTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGludCBnZXRTaXplKCkgY29u
c3QgeyByZXR1cm4gdHlwZS5nZXRJbnN0YW5jZVNpemUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9CisgICAgdmly
dHVhbCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigp
OyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0IHsgcmV0dXJu
IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0
cmluZygpICBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CisgICAg
VFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29tcGxl
dGVTdHJpbmcoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307CisKKy8vCisv
LyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRJbnRl
cm1Mb29wIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtTG9vcChU
SW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGFCb2R5LCBUSW50ZXJtVHlwZWQqIGFUZXN0
LCBUSW50ZXJtVHlwZWQqIGFUZXJtaW5hbCwgYm9vbCB0ZXN0Rmlyc3QpIDogCisgICAgICAgICAg
ICBpbml0KGluaXQpLAorICAgICAgICAgICAgYm9keShhQm9keSksCisgICAgICAgICAgICB0ZXN0
KGFUZXN0KSwKKyAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJtaW5hbCksCisgICAgICAgICAgICBm
aXJzdCh0ZXN0Rmlyc3QpIHsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5v
ZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIqKTsKKyAgICBUSW50ZXJtTm9kZSAqZ2V0SW5pdCgpIHsgcmV0dXJuIGluaXQ7IH0K
KyAgICBUSW50ZXJtTm9kZSAqZ2V0Qm9keSgpIHsgcmV0dXJuIGJvZHk7IH0KKyAgICBUSW50ZXJt
VHlwZWQgKmdldFRlc3QoKSB7IHJldHVybiB0ZXN0OyB9CisgICAgVEludGVybVR5cGVkICpnZXRU
ZXJtaW5hbCgpIHsgcmV0dXJuIHRlcm1pbmFsOyB9CisgICAgYm9vbCB0ZXN0Rmlyc3QoKSB7IHJl
dHVybiBmaXJzdDsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlICppbml0OworICAgIFRJ
bnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBjb2RlIHRvIGxvb3Agb3ZlcgorICAgIFRJbnRlcm1U
eXBlZCAqdGVzdDsgICAgICAvLyBleGl0IGNvbmRpdGlvbiBhc3NvY2lhdGVkIHdpdGggbG9vcCwg
Y291bGQgYmUgMCBmb3IgJ2ZvcicgbG9vcHMKKyAgICBUSW50ZXJtVHlwZWQgKnRlcm1pbmFsOyAg
Ly8gZXhpc3RzIGZvciBmb3ItbG9vcHMKKyAgICBib29sIGZpcnN0OyAgICAgICAgICAgICAgLy8g
dHJ1ZSBmb3Igd2hpbGUgYW5kIGZvciwgbm90IGZvciBkby13aGlsZQorfTsKKworLy8KKy8vIEhh
bmRsZSBicmVhaywgY29udGludWUsIHJldHVybiwgYW5kIGtpbGwuCisvLworY2xhc3MgVEludGVy
bUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybUJyYW5j
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogZSkgOgorICAgICAgICAgICAgZmxvd09wKG9w
KSwKKyAgICAgICAgICAgIGV4cHJlc3Npb24oZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1
cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4g
ZXhwcmVzc2lvbjsgfQorcHJvdGVjdGVkOgorICAgIFRPcGVyYXRvciBmbG93T3A7CisgICAgVElu
dGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4
cDsiIHN0YXRlbWVudHMKK307CisKKy8vCisvLyBOb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3lt
Ym9scyBvciBjb25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLy8KK2NsYXNzIFRJbnRlcm1T
eW1ib2wgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICAvLyBpZiBzeW1ib2wg
aXMgaW5pdGlhbGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUg
cG9vbGFsbG9jYXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCisgICAgLy8gcGVyIHByb2Nl
c3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1
c2FnZSBwZXIgY29tcGlsZQorICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9
IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAorICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0
IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTt9IAorICAgIHZpcnR1YWwgaW50IGdldElkKCkg
Y29uc3QgeyByZXR1cm4gaWQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJv
bCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgIH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1i
b2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorcHJvdGVjdGVkOgorICAgIGludCBpZDsKKyAgICBU
U3RyaW5nIHN5bWJvbDsKK307CisKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGlj
IFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVybUNvbnN0YW50VW5pb24oQ29uc3Rh
bnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCks
IHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9CisgICAgQ29uc3RhbnRVbmlvbiog
Z2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlcjsg
fQorICAgIHZvaWQgc2V0VW5pb25BcnJheVBvaW50ZXIoQ29uc3RhbnRVbmlvbiAqYykgeyB1bmlv
bkFycmF5UG9pbnRlciA9IGM7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBn
ZXRBc0NvbnN0YW50VW5pb24oKSAgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiApOworICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBm
b2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6Cisg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7Cit9OworCisvLworLy8gSW50ZXJt
ZWRpYXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMuCisvLworY2xh
c3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAg
VE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAgICBib29sIG1vZGlmaWVz
U3RhdGUoKSBjb25zdDsKKyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKSB7IHJldHVybiB0cnVlOyB9Citwcm90ZWN0ZWQ6
CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlwZShF
YnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVybU9wZXJhdG9yKFRP
cGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9ICAgCisgICAg
VE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwgdGhlIGJhc2ljIGJpbmFy
eSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGljIFRJbnRl
cm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJpbmFyeShUT3BlcmF0b3IgbykgOiBU
SW50ZXJtT3BlcmF0b3Iobykge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRlcm1UeXBlZCogbikgeyBs
ZWZ0ID0gbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsg
cmlnaHQgPSBuOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBjb25zdCB7
IHJldHVybiBsZWZ0OyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29u
c3QgeyByZXR1cm4gcmlnaHQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmlu
YXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5m
b1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CisgICAgVEludGVy
bVR5cGVkKiByaWdodDsKK307CisKKy8vCisvLyBOb2RlcyBmb3IgdW5hcnkgbWF0aCBvcGVyYXRv
cnMuCisvLworY2xhc3MgVEludGVybVVuYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7Citw
dWJsaWM6CisgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJt
T3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCkge30KKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9y
IG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBvcGVyYW5kKDApIHt9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmFu
ZChUSW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1U
eXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJhbmQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRl
cm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBi
b29sIHByb21vdGUoVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBv
cGVyYW5kOworfTsKKwordHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVl
bmNlOwordHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7CisvLworLy8gTm9kZXMg
dGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCisvLwor
Y2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGlj
OgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNl
ckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSB7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRl
KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9Cisg
ICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorICAgIHZpcnR1
YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQorICAg
IHZpcnR1YWwgVEludGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNl
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0g
bjsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG5hbWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsg
fQorICAgIHZpcnR1YWwgVFF1YWxpZmllckxpc3QmIGdldFF1YWxpZmllcigpIHsgcmV0dXJuIHF1
YWxpZmllcjsgfQorICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsg
fQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQorICAgIGJvb2wgZ2V0
T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAgIGJvb2wgZ2V0RGVidWcoKSB7IHJl
dHVybiBkZWJ1ZzsgfQorICAgIHZvaWQgYWRkVG9QcmFnbWFUYWJsZShjb25zdCBUUHJhZ21hVGFi
bGUmIHBUYWJsZSk7CisgICAgY29uc3QgVFByYWdtYVRhYmxlJiBnZXRQcmFnbWFUYWJsZSgpIGNv
bnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1BZ2dy
ZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVj
dG9yCisgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRlcm1TZXF1ZW5j
ZSBzZXF1ZW5jZTsKKyAgICBUUXVhbGlmaWVyTGlzdCBxdWFsaWZpZXI7CisgICAgVFN0cmluZyBu
YW1lOworICAgIGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBmdW5j
dGlvbiBuYW1lcworICAgIGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKKyAgICBUUHJh
Z21hVGFibGUgKnByYWdtYVRhYmxlOworfTsKKworLy8KKy8vIEZvciBpZiB0ZXN0cy4gIFNpbXBs
aWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVudC4KKy8vCitjbGFzcyBUSW50
ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVy
bVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwgVEludGVy
bU5vZGUqIGZhbHNlQikgOgorICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNl
QmxvY2soZmFsc2VCKSB7fQorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25k
LCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0IFRUeXBlJiB0
eXBlKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlvbihjb25kKSwg
dHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CisgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBib29sIHVzZXNUZXJuYXJ5T3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkOyB9CisgICAgdmly
dHVhbCBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9u
OyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0VHJ1ZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZUJsb2NrOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TZWxlY3Rp
b24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KK3Byb3RlY3RlZDoKKyAg
ICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOwor
ICAgIFRJbnRlcm1Ob2RlKiBmYWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAoreworICAgIFBy
ZVZpc2l0LAorICAgIEluVmlzaXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLworLy8gRm9yIHRy
YXZlcnNpbmcgdGhlIHRyZWUuICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLCAKKy8vIHB1
dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcworLy8g
aXQgdG8gYSBUcmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZp
bGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLyBSZXR1cm4g
ZmFsc2UgZnJvbSBhIHByZS12aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9kZSdzIHN1YnRy
ZWUuCisvLworY2xhc3MgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKworICAgIFRJbnRlcm1UcmF2
ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9IGZhbHNlLCBib29sIHBv
c3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2UpIDogCisgICAgICAgICAg
ICBwcmVWaXNpdChwcmVWaXNpdCksCisgICAgICAgICAgICBpblZpc2l0KGluVmlzaXQpLAorICAg
ICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCisgICAgICAgICAgICByaWdodFRvTGVmdChy
aWdodFRvTGVmdCksCisgICAgICAgICAgICBkZXB0aCgwKSB7fQorCisgICAgdmlydHVhbCB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQorICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHtyZXR1cm4gdHJ1ZTt9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopIHty
ZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7cmV0dXJuIHRydWU7
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikg
e3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQs
IFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQorCisgICAgdm9pZCBpbmNyZW1lbnREZXB0
aCgpIHtkZXB0aCsrO30KKyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRoLS07fQorCisg
ICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKKyAgICBjb25zdCBib29sIGluVmlzaXQ7CisgICAgY29u
c3QgYm9vbCBwb3N0VmlzaXQ7CisgICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsKKworcHJvdGVj
dGVkOgorICAgIGludCBkZXB0aDsKK307CisKKyNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9MT0NBTF9JTlRFUk1F
RElBVEVfSU5DTFVERURfCisjZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisK
KyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1Y3Qg
VFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9mZnNldHNbNF07CisgICAgaW50IG51bTsKK307CisK
Ky8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBoZWxwIHBhcnNlIGFuZCBidWlsZCB0
aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Npbms7CitjbGFzcyBUSW50ZXJtZWRpYXRlIHsKK3B1
YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2Nh
dG9yKQorCisgICAgVEludGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9
CisgICAgVEludGVybVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNv
bnN0IFRUeXBlJiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJzaW9u
KFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKKyAgICBUSW50ZXJtVHlw
ZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJt
VHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRP
cGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBUU291
cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJ
bnRlcm1Ob2RlKiBjaGlsZCwgVFNvdXJjZUxvYywgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUq
IHJpZ2h0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRl
KFRJbnRlcm1Ob2RlKiBub2RlLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgVFNvdXJjZUxvYyk7
CisgICAgVEludGVybU5vZGUqICBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtTm9kZVBhaXIgY29kZSwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTZWxl
Y3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVy
bVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENv
bW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyk7
CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlv
biosIGNvbnN0IFRUeXBlJiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3Rl
Q29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBi
b29sIHBhcnNlQ29uc3RUcmVlKFRTb3VyY2VMb2MsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlv
biosIFRPcGVyYXRvciwgVFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQ
YXJhbSA9IGZhbHNlKTsgICAgICAgIAorICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRJbnRlcm1O
b2RlKiwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBib29sIHRl
c3RGaXJzdCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVy
YXRvciwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRv
ciwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTd2l6
emxlKFRWZWN0b3JGaWVsZHMmLCBUU291cmNlTG9jKTsKKyAgICBib29sIHBvc3RQcm9jZXNzKFRJ
bnRlcm1Ob2RlKiwgRVNoTGFuZ3VhZ2UpOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7Cisg
ICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
VEluZm9TaW5rJiBpbmZvU2luazsKKworcHJpdmF0ZToKKyAgICB2b2lkIG9wZXJhdG9yPShUSW50
ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKK307CisKKyNlbmRpZiAvLyBfTE9D
QUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5j
bHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX09TSU5DTFVE
RV9ICisjZGVmaW5lIF9fT1NJTkNMVURFX0gKKworLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBj
b250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMg
YW55IHdpbmRvd3Mgc3BlY2lmaWMgZnVuY3Rpb25zLgorLy8KKworI2lmIGRlZmluZWQoX1dJTjMy
KSB8fCBkZWZpbmVkKF9XSU42NCkKKyNkZWZpbmUgQU5HTEVfT1NfV0lOCisjZWxpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19z
dW4pCisjZGVmaW5lIEFOR0xFX09TX1BPU0lYCisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIHBs
YXRmb3JtLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNkZWZpbmUgU1RS
SUNUCisjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYg
ZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8
c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lO
CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0
b3JhZ2UgT3BlcmF0aW9ucworLy8KKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYg
RFdPUkQgT1NfVExTSW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VU
X09GX0lOREVYRVMpCisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiB1bnNp
Z25lZCBpbnQgT1NfVExTSW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIDB4RkZG
RkZGRkYKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9TX0FsbG9jVExT
SW5kZXgoKTsKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICps
cHZWYWx1ZSk7Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOworCitp
bmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGFz
c2VydChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmluZWQoQU5HTEVf
T1NfV0lOKQorICAgIHJldHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYgZGVmaW5lZChB
TkdMRV9PU19QT1NJWCkKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOwor
I2VuZGlmICAvLyBBTkdMRV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNwcAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21waWxlci9vc2lu
Y2x1ZGUuaCIKKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9yIFRyeWluZyB0
byBidWlsZCBhIHBvc2l4IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVpbGQuCisjZW5k
aWYKKworLy8KKy8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJ
bmRleCBPU19BbGxvY1RMU0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQb29sSW5kZXg7
CisKKyAgICAvLworICAgIC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBp
ZiAoKHB0aHJlYWRfa2V5X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDApIHsKKyAgICAg
ICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRo
cmVhZCBMb2NhbCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKworCitib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisgICAg
aWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAm
JiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwgbHB2
VmFsdWUpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAg
IGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxldGUgdGhlIGds
b2JhbCBwb29sIGtleS4KKyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxldGUobkluZGV4
KSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBm
YWxzZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9v
c2luY2x1ZGUuaCIKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRv
dydzIHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1dJTikK
KyNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNpZmljIGZpbGUgaW4gYSBub24g
d2luZG93cyBidWlsZC4KKyNlbmRpZgorCisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBP
cGVyYXRpb25zCisvLworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7CisJRFdPUkQg
ZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVT
KSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0
ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
CisJfQorCisJcmV0dXJuIGR3SW5kZXg7Cit9CisKKworYm9vbCBPU19TZXRUTFNWYWx1ZShPU19U
TFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQoreworCWlmIChuSW5kZXggPT0gT1NfSU5W
QUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFs
aWQgVExTIEluZGV4Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzU2V0VmFsdWUo
bkluZGV4LCBscHZWYWx1ZSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNl
OworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKwlp
ZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19T
ZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor
CisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g
ZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIzMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
SGVscGVyLmgiCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZy
b20gbm9kZSB0byBub2RlIGluIAorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNzIFRDb25zdFRy
YXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUQ29uc3RU
cmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRP
cGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3lt
VGFibGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0KSwKKyAgICAgICAg
Y29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmds
ZUNvbnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3ltVGFibGUpLCBlcnJv
cihmYWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQorCXsKKwkJaW5kZXggPSAw
OworCX0KKworCWJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsK
Kwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisJYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisJYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2
aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgaW50IGluZGV4OworICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXk7CisgICAgVFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3IgY29uc3RydWN0
b3JUeXBlOworICAgIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7CisgICAgaW50IHNpemU7IC8v
IHNpemUgb2YgdGhlIGNvbnN0cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29sIGlzTWF0cml4
OworICAgIGludCBtYXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5h
bCBzaXplIGFuZCBub3QgdGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8gVGhlIHJlc3Qg
b2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisv
LyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRy
dWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8v
IGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNl
bGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25z
dHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuOworCit9CisKK2Jvb2wgVENv
bnN0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9k
ZSkKK3sKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKTsKKyAgICAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAg
IFRTdHJpbmcgYnVmOworICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWdu
aW5nIG5vbi1jb25zdGFudCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9y
LCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNv
bnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
VW5hcnkqIG5vZGUpCit7CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVuZCgiJ2NvbnN0
cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVmLmFwcGVuZCh0
eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGlm
ICghbm9kZS0+aXNDb25zdHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29tbWEpIHsK
KyAgICAgICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3Rvcicg
OiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBwZW5kKHR5cGUu
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBlcnJvciA9
IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgp
LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBz
aW5nbGVDb25zdGFudFBhcmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IG5v
ZGUtPmdldE9wKCk7CisgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOworCisgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgeworICAgICAg
ICAgICAgaXNNYXRyaXggPSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAg
IGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5i
ZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBub2RlLT5n
ZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BDb21tYSkKKyAgICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAorCisgICAgICAg
ICgqcCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykgCisgICAgewor
ICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAgIGNvbnN0cnVj
dG9yVHlwZSA9IEVPcE51bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBpc01hdHJpeCA9
IGZhbHNlOworICAgICAgICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29u
c3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkgPSB1bmlvbkFycmF5OworICAgIGludCBpbnN0YW5jZVNpemUgPSB0eXBlLmdldE9i
amVjdFNpemUoKTsKKworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAgICBpbnQgc2l6
ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAgICAgIENvbnN0
YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYg
KGluZGV4ID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CisKKyAgICAg
ICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCB0
b3RhbFNpemUgPSBpbmRleCArIHNpemU7CisgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5p
b25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIGlmICghaXNN
YXRyaXgpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChp
ID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworCisg
ICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAg
ICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgIC8vIGZv
ciBtYXRyaXggY29uc3RydWN0b3JzCisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAg
ICAgICAgaW50IGVsZW1lbnQgPSBpbmRleDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBpbmRl
eDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFu
Y2VTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBlbGVtZW50KSAlIChtYXRyaXhTaXplICsgMSkgPT0g
MCApCisgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFy
cmF5W2NvdW50XTsKKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisKKyAgICAgICAgICAgICAgICAoaW5k
ZXgpKys7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNp
emUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitib29sIFRDb25zdFRyYXZlcnNl
cjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJMb29wIE5vZGUgZm91bmQg
aW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNp
dEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCcmFuY2ggTm9kZSBmb3VuZCBp
biBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgZXJyb3IgPSB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdGhl
IG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KKy8vIEluZGl2
aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2lu
ZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUg
cHJvY2Vzc2VkLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cGFyc2VDb25zdFRyZWUoVFNvdXJj
ZUxvYyBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwg
VE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5
cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQoreworICAgIGlmIChyb290ID09IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5
LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xU
YWJsZSwgdCk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworICAgIGlmIChpdC5lcnJvcikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL3VuaXN0ZC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L3VuaXN0ZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisvLyBUaGlzIGlzIGEgTlVMTCBm
aWxlIGFuZCBpcyBtZWFudCB0byBiZSBlbXB0eQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9hdG9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NDAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworCisvLworLy8gYXRvbS5jCisvLworCisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUg
ImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xv
YmFscy5oIgorCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgcmVhbGxvYworI3VuZGVmIGZyZWUKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBpbnQgdmFsOworICAgIGNvbnN0IGNo
YXIgKnN0cjsKK30gdG9rZW5zW10gPSB7CisgICAgeyBDUFBfQU5EX09QLCAgICAgICAgICImJiIg
fSwKKyAgICB7IENQUF9BTkRfQVNTSUdOLCAgICAgIiY9IiB9LAorICAgIHsgQ1BQX1NVQl9BU1NJ
R04sICAgICAiLT0iIH0sCisgICAgeyBDUFBfTU9EX0FTU0lHTiwgICAgICIlPSIgfSwKKyAgICB7
IENQUF9BRERfQVNTSUdOLCAgICAgIis9IiB9LAorICAgIHsgQ1BQX0RJVl9BU1NJR04sICAgICAi
Lz0iIH0sCisgICAgeyBDUFBfTVVMX0FTU0lHTiwgICAgICIqPSIgfSwKKyAgICB7IENQUF9SSUdI
VF9CUkFDS0VULCAgIjo+IiB9LAorICAgIHsgQ1BQX0VRX09QLCAgICAgICAgICAiPT0iIH0sCisg
ICAgeyBDUFBfWE9SX09QLCAgICAgICAgICJeXiIgfSwgCisgICAgeyBDUFBfWE9SX0FTU0lHTiwg
ICAgICJePSIgfSwgCisgICAgeyBDUFBfRkxPQVRDT05TVEFOVCwgICI8ZmxvYXQtY29uc3Q+IiB9
LAorICAgIHsgQ1BQX0dFX09QLCAgICAgICAgICAiPj0iIH0sCisgICAgeyBDUFBfUklHSFRfT1As
ICAgICAgICI+PiIgfSwKKyAgICB7IENQUF9SSUdIVF9BU1NJR04sICAgIj4+PSIgfSwgCisgICAg
eyBDUFBfSURFTlRJRklFUiwgICAgICI8aWRlbnQ+IiB9LAorICAgIHsgQ1BQX0lOVENPTlNUQU5U
LCAgICAiPGludC1jb25zdD4iIH0sCisgICAgeyBDUFBfTEVfT1AsICAgICAgICAgICI8PSIgfSwK
KyAgICB7IENQUF9MRUZUX09QLCAgICAgICAgIjw8IiB9LAorICAgIHsgQ1BQX0xFRlRfQVNTSUdO
LCAgICAiPDw9IiB9LAorICAgIHsgQ1BQX0xFRlRfQlJBQ0tFVCwgICAiPDoiIH0sCisgICAgeyBD
UFBfTEVGVF9CUkFDRSwgICAgICI8JSIgfSwgCisgICAgeyBDUFBfREVDX09QLCAgICAgICAgICIt
LSIgfSwKKyAgICB7IENQUF9SSUdIVF9CUkFDRSwgICAgIiU+IiB9LCAKKyAgICB7IENQUF9ORV9P
UCwgICAgICAgICAgIiE9IiB9LAorICAgIHsgQ1BQX09SX09QLCAgICAgICAgICAifHwiIH0sCisg
ICAgeyBDUFBfT1JfQVNTSUdOLCAgICAgICJ8PSIgfSwgCisgICAgeyBDUFBfSU5DX09QLCAgICAg
ICAgICIrKyIgfSwKKyAgICB7IENQUF9TVFJDT05TVEFOVCwgICAgIjxzdHJpbmctY29uc3Q+IiB9
LAorICAgIHsgQ1BQX1RZUEVJREVOVElGSUVSLCAiPHR5cGUtaWRlbnQ+IiB9LAorfTsKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCisjZGVmaW5lIElOSVRfU1RSSU5HX1RBQkxFX1NJWkUgMTYzODQKKwordHlwZWRlZiBzdHJ1
Y3QgU3RyaW5nVGFibGVfUmVjIHsKKyAgICBjaGFyICpzdHJpbmdzOworICAgIGludCBuZXh0RnJl
ZTsKKyAgICBpbnQgc2l6ZTsKK30gU3RyaW5nVGFibGU7CisKKy8qCisgKiBJbml0U3RyaW5nVGFi
bGUoKSAtIEluaXRpYWxpemUgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKi8KKworc3RhdGljIGlu
dCBJbml0U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKK3sKKyAgICBzdGFibGUtPnN0
cmluZ3MgPSAoY2hhciAqKSBtYWxsb2MoSU5JVF9TVFJJTkdfVEFCTEVfU0laRSk7CisgICAgaWYg
KCFzdGFibGUtPnN0cmluZ3MpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIFplcm8tdGggb2Zm
c2V0IG1lYW5zICJlbXB0eSIgc28gZG9uJ3QgdXNlIGl0LgorICAgIHN0YWJsZS0+bmV4dEZyZWUg
PSAxOworICAgIHN0YWJsZS0+c2l6ZSA9IElOSVRfU1RSSU5HX1RBQkxFX1NJWkU7CisgICAgcmV0
dXJuIDE7Cit9IC8vIEluaXRTdHJpbmdUYWJsZQorCisvKgorICogRnJlZVN0cmluZ1RhYmxlKCkg
LSBGcmVlIHRoZSBzdHJpbmcgdGFibGUuCisgKgorICovCisKK3N0YXRpYyB2b2lkIEZyZWVTdHJp
bmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQoreworICAgIGlmIChzdGFibGUtPnN0cmluZ3Mp
CisgICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKKyAgICBzdGFibGUtPnN0cmluZ3MgPSBO
VUxMOworICAgIHN0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIHN0YWJsZS0+c2l6ZSA9IDA7Cit9
IC8vIEZyZWVTdHJpbmdUYWJsZQorCisvKgorICogSGFzaFN0cmluZygpIC0gSGFzaCBhIHN0cmlu
ZyB3aXRoIHRoZSBiYXNlIGhhc2ggZnVuY3Rpb24uCisgKgorICovCisKK3N0YXRpYyBpbnQgSGFz
aFN0cmluZyhjb25zdCBjaGFyICpzKQoreworICAgIGludCBodmFsID0gMDsKKworICAgIHdoaWxl
ICgqcykgeworICAgICAgICBodmFsID0gKGh2YWwqMTM1MDcgKyAqcyoxOTcpIF4gKGh2YWwgPj4g
Mik7CisgICAgICAgIHMrKzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWwgJiAweDdmZmZmZmZmOwor
fSAvLyBIYXNoU3RyaW5nCisKKy8qCisgKiBIYXNoU3RyaW5nMigpIC0gSGFzaCBhIHN0cmluZyB3
aXRoIHRoZSBpbmNyaW1lbnRpbmcgaGFzaCBmdW5jdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGlu
dCBIYXNoU3RyaW5nMihjb25zdCBjaGFyICpzKQoreworICAgIGludCBodmFsID0gMDsKKworICAg
IHdoaWxlICgqcykgeworICAgICAgICBodmFsID0gKGh2YWwqNzI5ICsgKnMqMzcpIF4gKGh2YWwg
Pj4gMSk7CisgICAgICAgIHMrKzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWw7Cit9IC8vIEhhc2hT
dHJpbmcyCisKKy8qCisgKiBBZGRTdHJpbmcoKSAtIEFkZCBhIHN0cmluZyB0byBhIHN0cmluZyB0
YWJsZS4gIFJldHVybiBpdCdzIG9mZnNldC4KKyAqCisgKi8KKworc3RhdGljIGludCBBZGRTdHJp
bmcoU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgbGVuLCBs
b2M7CisgICAgY2hhciAqc3RyOworCisgICAgbGVuID0gKGludCkgc3RybGVuKHMpOworICAgIGlm
IChzdGFibGUtPm5leHRGcmVlICsgbGVuICsgMSA+PSBzdGFibGUtPnNpemUpIHsKKyAgICAgICAg
YXNzZXJ0KHN0YWJsZS0+c2l6ZSA8IDEwMDAwMDApOworICAgICAgICBzdHIgPSAoY2hhciAqKSBt
YWxsb2Moc3RhYmxlLT5zaXplKjIpOworICAgICAgICBtZW1jcHkoc3RyLCBzdGFibGUtPnN0cmlu
Z3MsIHN0YWJsZS0+c2l6ZSk7CisgICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKKyAgICAg
ICAgc3RhYmxlLT5zdHJpbmdzID0gc3RyOworICAgIH0KKyAgICBsb2MgPSBzdGFibGUtPm5leHRG
cmVlOworICAgIHN0cmNweSgmc3RhYmxlLT5zdHJpbmdzW2xvY10sIHMpOworICAgIHN0YWJsZS0+
bmV4dEZyZWUgKz0gbGVuICsgMTsKKyAgICByZXR1cm4gbG9jOworfSAvLyBBZGRTdHJpbmcKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSGFzaCB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCisjZGVmaW5lIElOSVRfSEFTSF9UQUJMRV9TSVpFIDIwNDcKKyNkZWZpbmUgSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUyAzCisKK3R5cGVkZWYgc3RydWN0IEhhc2hFbnRyeV9SZWMgewor
ICAgIGludCBpbmRleDsgICAgICAvLyBTdHJpbmcgdGFibGUgb2Zmc2V0IG9mIHN0cmluZyByZXBy
ZXNlbnRhdGlvbgorICAgIGludCB2YWx1ZTsgICAgICAvLyBBdG9tIChzeW1ib2wpIHZhbHVlCit9
IEhhc2hFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxlX1JlYyB7CisgICAgSGFzaEVu
dHJ5ICplbnRyeTsKKyAgICBpbnQgc2l6ZTsKKyAgICBpbnQgZW50cmllczsKKyAgICBpbnQgY291
bnRzW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKK30gSGFzaFRhYmxlOworCisvKgor
ICogSW5pdEhhc2hUYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKi8K
Kworc3RhdGljIGludCBJbml0SGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlLCBpbnQgZnNpemUp
Cit7CisgICAgaW50IGlpOworCisgICAgaHRhYmxlLT5lbnRyeSA9IChIYXNoRW50cnkgKikgbWFs
bG9jKHNpemVvZihIYXNoRW50cnkpKmZzaXplKTsKKyAgICBpZiAoIWh0YWJsZS0+ZW50cnkpCisg
ICAgICAgIHJldHVybiAwOworICAgIGh0YWJsZS0+c2l6ZSA9IGZzaXplOworICAgIGZvciAoaWkg
PSAwOyBpaSA8IGZzaXplOyBpaSsrKSB7CisgICAgICAgIGh0YWJsZS0+ZW50cnlbaWldLmluZGV4
ID0gMDsKKyAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0udmFsdWUgPSAwOworICAgIH0KKyAgICBo
dGFibGUtPmVudHJpZXMgPSAwOworICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNIX1RBQkxFX01B
WF9DT0xMSVNJT05TOyBpaSsrKQorICAgICAgICBodGFibGUtPmNvdW50c1tpaV0gPSAwOworICAg
IHJldHVybiAxOworfSAvLyBJbml0SGFzaFRhYmxlCisKKy8qCisgKiBGcmVlSGFzaFRhYmxlKCkg
LSBGcmVlIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBGcmVlSGFzaFRh
YmxlKEhhc2hUYWJsZSAqaHRhYmxlKQoreworICAgIGlmIChodGFibGUtPmVudHJ5KQorICAgICAg
ICBmcmVlKGh0YWJsZS0+ZW50cnkpOworICAgIGh0YWJsZS0+ZW50cnkgPSBOVUxMOworICAgIGh0
YWJsZS0+c2l6ZSA9IDA7CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKK30gLy8gRnJlZUhhc2hU
YWJsZQorCisvKgorICogRW1wdHkoKSAtIFNlZSBpZiBhIGhhc2ggdGFibGUgZW50cnkgaXMgZW1w
dHkuCisgKgorICovCisKK3N0YXRpYyBpbnQgRW1wdHkoSGFzaFRhYmxlICpodGFibGUsIGludCBo
YXNobG9jKQoreworICAgIGFzc2VydChoYXNobG9jID49IDAgJiYgaGFzaGxvYyA8IGh0YWJsZS0+
c2l6ZSk7CisgICAgaWYgKGh0YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXggPT0gMCkgeworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
IC8vIEVtcHR5CisKKy8qCisgKiBNYXRjaCgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBp
cyBtYXRjaGVzIGEgc3RyaW5nLgorICoKKyAqLworCitzdGF0aWMgaW50IE1hdGNoKEhhc2hUYWJs
ZSAqaHRhYmxlLCBTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgaGFzaGxv
YykKK3sKKyAgICBpbnQgc3RybG9jOworCisgICAgc3RybG9jID0gaHRhYmxlLT5lbnRyeVtoYXNo
bG9jXS5pbmRleDsKKyAgICBpZiAoIXN0cmNtcChzLCAmc3RhYmxlLT5zdHJpbmdzW3N0cmxvY10p
KSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30gLy8gTWF0Y2gKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQXRvbSB0YWJs
ZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIElOSVRfQVRPTV9UQUJMRV9TSVpF
IDEwMjQKKworCitzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CisgICAgU3RyaW5nVGFibGUgc3RhYmxl
OyAvLyBTdHJpbmcgdGFibGUuCisgICAgSGFzaFRhYmxlIGh0YWJsZTsgICAvLyBIYXNoZXMgc3Ry
aW5nIHRvIGF0b20gbnVtYmVyIGFuZCB0b2tlbiB2YWx1ZS4gIE11bHRpcGxlIHN0cmluZ3MgY2Fu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHRva2VuIHZhbHVlIGJ1
dCBlYWNoIHVuaXF1ZSBzdHJpbmcgaXMgYSB1bmlxdWUgYXRvbS4KKyAgICBpbnQgKmFtYXA7ICAg
ICAgICAgIC8vIE1hcHMgYXRvbSB2YWx1ZSB0byBvZmZzZXQgaW4gc3RyaW5nIHRhYmxlLiAgQXRv
bXMgYWxsIG1hcCB0byB1bmlxdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZ3Mg
ZXhjZXB0IGZvciBzb21lIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIGxvd2VyLCBmaXhlZCBwYXJ0
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYXRvbSB0YWJsZSB0aGF0IG1hcCB0
byAiPHVuZGVmaW5lZD4iLiAgVGhlIGxvd2VzdCAyNTYgYXRvbXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gc2luZ2xlIGNoYXJhY3RlciBBU0NJSSB2YWx1ZXMgZXhj
ZXB0IGZvciBhbHBoYW51bWVyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rl
cnMgYW5kICdfJywgd2hpY2ggY2FuIGJlIG90aGVyIHRva2Vucy4gIE5leHQgY29tZSB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlIHRva2VucyB3aXRoIHRoZWlyIGF0b20g
dmFsdWVzIGVxdWFsIHRvIHRoZSB0b2tlbiB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZW4gY29tZSBwcmVkZWZpbmVkIGF0b21zLCBmb2xsb3dlZCBieSB1c2VyIHNwZWNpZmll
ZCBpZGVudGlmaWVycy4KKyAgICBpbnQgKmFyZXY7ICAgICAgICAgIC8vIFJldmVyc2VkIGF0b20g
Zm9yIHN5bWJvbCB0YWJsZSB1c2UuCisgICAgaW50IG5leHRGcmVlOworICAgIGludCBzaXplOwor
fTsKKworc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9OworQXRvbVRhYmxlICph
dGFibGUgPSAmbGF0YWJsZTsKKworc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICph
dGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKKworLyoKKyAqIEdyb3dBdG9tVGFibGUo
KSAtIEdyb3cgdGhlIGF0b20gdGFibGUgdG8gYXQgbGVhc3QgInNpemUiIGlmIGl0J3Mgc21hbGxl
ci4KKyAqCisgKi8KKworc3RhdGljIGludCBHcm93QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxl
LCBpbnQgc2l6ZSkKK3sKKyAgICBpbnQgKm5ld21hcCwgKm5ld3JldjsKKworICAgIGlmIChhdGFi
bGUtPnNpemUgPCBzaXplKSB7CisgICAgICAgIGlmIChhdGFibGUtPmFtYXApIHsKKyAgICAgICAg
ICAgIG5ld21hcCA9IHJlYWxsb2MoYXRhYmxlLT5hbWFwLCBzaXplb2YoaW50KSpzaXplKTsKKyAg
ICAgICAgICAgIG5ld3JldiA9IHJlYWxsb2MoYXRhYmxlLT5hcmV2LCBzaXplb2YoaW50KSpzaXpl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5ld21hcCA9IG1hbGxvYyhzaXplb2Yo
aW50KSpzaXplKTsKKyAgICAgICAgICAgIG5ld3JldiA9IG1hbGxvYyhzaXplb2YoaW50KSpzaXpl
KTsKKyAgICAgICAgICAgIGF0YWJsZS0+c2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFuZXdtYXAgfHwgIW5ld3JldikgeworICAgICAgICAgICAgLyogZmFpbGVkIHRvIGdyb3cgLS0g
ZXJyb3IgKi8KKyAgICAgICAgICAgIGlmIChuZXdtYXApCisgICAgICAgICAgICAgICAgYXRhYmxl
LT5hbWFwID0gbmV3bWFwOworICAgICAgICAgICAgaWYgKG5ld3JldikKKyAgICAgICAgICAgICAg
ICBhdGFibGUtPmFtYXAgPSBuZXdyZXY7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IH0KKyAgICAgICAgbWVtc2V0KCZuZXdtYXBbYXRhYmxlLT5zaXplXSwgMCwgKHNpemUgLSBhdGFi
bGUtPnNpemUpICogc2l6ZW9mKGludCkpOworICAgICAgICBtZW1zZXQoJm5ld3JldlthdGFibGUt
PnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7CisgICAgICAg
IGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKKyAgICAgICAgYXRhYmxlLT5hcmV2ID0gbmV3cmV2Owor
ICAgICAgICBhdGFibGUtPnNpemUgPSBzaXplOworICAgIH0KKyAgICByZXR1cm4gMDsKK30gLy8g
R3Jvd0F0b21UYWJsZQorCisvKgorICogbFJldmVyc2UoKSAtIFJldmVyc2UgdGhlIGJvdHRvbSAy
MCBiaXRzIG9mIGEgMzIgYml0IGludC4KKyAqCisgKi8KKworc3RhdGljIGludCBsUmV2ZXJzZShp
bnQgZnZhbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW4gPSBmdmFsOworICAgIGludCByZXN1bHQg
PSAwLCBjbnQgPSAwOworCisgICAgd2hpbGUoaW4pIHsKKyAgICAgICAgcmVzdWx0IDw8PSAxOwor
ICAgICAgICByZXN1bHQgfD0gaW4mMTsKKyAgICAgICAgaW4gPj49IDE7CisgICAgICAgIGNudCsr
OworICAgIH0KKworICAgIC8vIERvbid0IHVzZSBhbGwgMzEgYml0cy4gIE9uZSBtaWxsaW9uIGF0
b21zIGlzIHBsZW50eSBhbmQgc29tZXRpbWVzIHRoZQorICAgIC8vIHVwcGVyIGJpdHMgYXJlIHVz
ZWQgZm9yIG90aGVyIHRoaW5ncy4KKworICAgIGlmIChjbnQgPCAyMCkKKyAgICAgICAgcmVzdWx0
IDw8PSAyMCAtIGNudDsKKyAgICByZXR1cm4gcmVzdWx0OworfSAvLyBsUmV2ZXJzZQorCisvKgor
ICogQWxsb2NhdGVBdG9tKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tLiAgQXNzb2NpYXRlZCB3aXRo
IHRoZSAidW5kZWZpbmVkIiB2YWx1ZSBvZiAtMS4KKyAqCisgKi8KKworc3RhdGljIGludCBBbGxv
Y2F0ZUF0b20oQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaWYgKGF0YWJsZS0+bmV4dEZyZWUg
Pj0gYXRhYmxlLT5zaXplKQorICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgYXRhYmxlLT5u
ZXh0RnJlZSoyKTsKKyAgICBhdGFibGUtPmFtYXBbYXRhYmxlLT5uZXh0RnJlZV0gPSAtMTsKKyAg
ICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFibGUtPm5leHRG
cmVlKTsKKyAgICBhdGFibGUtPm5leHRGcmVlKys7CisgICAgcmV0dXJuIGF0YWJsZS0+bmV4dEZy
ZWUgLSAxOworfSAvLyBBbGxvY2F0ZUF0b20KKworLyoKKyAqIFNldEF0b21WYWx1ZSgpIC0gQWxs
b2NhdGUgYSBuZXcgYXRvbSBhc3NvY2lhdGVkIHdpdGggImhhc2hpbmRleCIuCisgKgorICovCisK
K3N0YXRpYyB2b2lkIFNldEF0b21WYWx1ZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b21udW1i
ZXIsIGludCBoYXNoaW5kZXgpCit7CisgICAgYXRhYmxlLT5hbWFwW2F0b21udW1iZXJdID0gYXRh
YmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFibGUtPmh0YWJsZS5l
bnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbW51bWJlcjsKK30gLy8gU2V0QXRvbVZhbHVlCisK
Ky8qCisgKiBGaW5kSGFzaExvYygpIC0gRmluZCB0aGUgaGFzaCBsb2NhdGlvbiBmb3IgdGhpcyBz
dHJpbmcuICBSZXR1cm4gLTEgaXQgaGFzaCB0YWJsZSBpcyBmdWxsLgorICoKKyAqLworCitzdGF0
aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQorewor
ICAgIGludCBoYXNobG9jLCBoYXNoZGVsdGEsIGNvdW50OworICAgIGludCBGb3VuZEVtcHR5U2xv
dCA9IDA7CisgICAgaW50IGNvbGxpc2lvbltIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TICsgMV07
CisKKyAgICBoYXNobG9jID0gSGFzaFN0cmluZyhzKSAlIGF0YWJsZS0+aHRhYmxlLnNpemU7Cisg
ICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgIGlmIChN
YXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxvYykpCisgICAg
ICAgICAgICByZXR1cm4gaGFzaGxvYzsKKyAgICAgICAgY29sbGlzaW9uWzBdID0gaGFzaGxvYzsK
KyAgICAgICAgaGFzaGRlbHRhID0gSGFzaFN0cmluZzIocyk7CisgICAgICAgIGNvdW50ID0gMDsK
KyAgICAgICAgd2hpbGUgKGNvdW50IDwgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUykgeworICAg
ICAgICAgICAgaGFzaGxvYyA9ICgoaGFzaGxvYyArIGhhc2hkZWx0YSkgJiAweDdmZmZmZmZmKSAl
IGF0YWJsZS0+aHRhYmxlLnNpemU7CisgICAgICAgICAgICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0
YWJsZSwgaGFzaGxvYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoTWF0Y2goJmF0YWJsZS0+aHRh
YmxlLCAmYXRhYmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBoYXNobG9jOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgRm91bmRFbXB0eVNsb3QgPSAxOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIGNv
bGxpc2lvbltjb3VudF0gPSBoYXNobG9jOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFGb3Vu
ZEVtcHR5U2xvdCkgeworICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1wQXRvbVRhYmxl
KSB7CisgICAgICAgICAgICAgICAgaW50IGlpOworICAgICAgICAgICAgICAgIGNoYXIgc3RyWzIw
MF07CisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWlsZWQgd2l0aCBt
b3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoq
KiIsCisgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOwor
ICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOworCisgICAgICAgICAgICAgICAg
c3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0
eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coc3RyKTsKKyAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRm
KHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIl
c1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlzaW9uW2lpXSwg
R2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lvbltpaV1d
LnZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tjb3VudF0r
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGFzaGxvYzsKK30gLy8gRmluZEhhc2hM
b2MKKworLyoKKyAqIEluY3JlYXNlSGFzaFRhYmxlU2l6ZSgpCisgKgorICovCisKK3N0YXRpYyBp
bnQgSW5jcmVhc2VIYXNoVGFibGVTaXplKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIGludCBp
aSwgc3RybG9jLCBvbGRoYXNobG9jLCB2YWx1ZSwgc2l6ZTsKKyAgICBBdG9tVGFibGUgb2xkdGFi
bGU7CisgICAgY2hhciAqczsKKworICAgIC8vIFNhdmUgdGhlIG9sZCBhdG9tIHRhYmxlIGFuZCBj
cmVhdGUgYSBuZXcgb25lOgorCisgICAgb2xkdGFibGUgPSAqYXRhYmxlOworICAgIHNpemUgPSBv
bGR0YWJsZS5odGFibGUuc2l6ZSoyICsgMTsKKyAgICBpZiAoIUluaXRBdG9tVGFibGUoYXRhYmxl
LCBzaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBBZGQgYWxsIHRoZSBleGlzdGlu
ZyB2YWx1ZXMgdG8gdGhlIG5ldyBhdG9tIHRhYmxlIHByZXNlcnZpbmcgdGhlaXIgYXRvbSB2YWx1
ZXM6CisKKyAgICBmb3IgKGlpID0gYXRhYmxlLT5uZXh0RnJlZTsgaWkgPCBvbGR0YWJsZS5uZXh0
RnJlZTsgaWkrKykgeworICAgICAgICBzdHJsb2MgPSBvbGR0YWJsZS5hbWFwW2lpXTsKKyAgICAg
ICAgcyA9ICZvbGR0YWJsZS5zdGFibGUuc3RyaW5nc1tzdHJsb2NdOworICAgICAgICBvbGRoYXNo
bG9jID0gRmluZEhhc2hMb2MoJm9sZHRhYmxlLCBzKTsKKyAgICAgICAgYXNzZXJ0KG9sZGhhc2hs
b2MgPj0gMCk7CisgICAgICAgIHZhbHVlID0gb2xkdGFibGUuaHRhYmxlLmVudHJ5W29sZGhhc2hs
b2NdLnZhbHVlOworICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCBzLCB2YWx1ZSk7CisgICAg
fQorICAgIEZyZWVBdG9tVGFibGUoJm9sZHRhYmxlKTsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5j
cmVhc2VIYXNoVGFibGVTaXplCisKKy8qCisgKiBMb29rVXBBZGRTdHJpbmdIYXNoKCkgLSBMb29r
dXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0
IGFuZAorICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFi
bGUgdG8gMC4gIFJldHVybiB0aGUgaGFzaCB0YWJsZSBpbmRleC4KKyAqLworCitzdGF0aWMgaW50
IExvb2tVcEFkZFN0cmluZ0hhc2goQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7
CisgICAgaW50IGhhc2hsb2MsIHN0cmxvYzsKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgaGFz
aGxvYyA9IEZpbmRIYXNoTG9jKGF0YWJsZSwgcyk7CisgICAgICAgIGlmIChoYXNobG9jID49IDAp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSW5jcmVhc2VIYXNoVGFibGVTaXplKGF0YWJs
ZSk7CisgICAgfQorCisgICAgaWYgKEVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsK
KyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cmllcysrOworICAgICAgICBzdHJsb2MgPSBBZGRT
dHJpbmcoJmF0YWJsZS0+c3RhYmxlLCBzKTsKKyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlb
aGFzaGxvY10uaW5kZXggPSBzdHJsb2M7CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hh
c2hsb2NdLnZhbHVlID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hsb2M7Cit9IC8vIExvb2tV
cEFkZFN0cmluZ0hhc2gKKworLyoKKyAqIExvb2tVcEFkZFN0cmluZygpIC0gTG9va3VwIGEgc3Ry
aW5nIGluIHRoZSBoYXNoIHRhYmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKKyAq
ICAgICAgICBpbml0aWFsaXplIHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIHRo
ZSBuZXh0IGF0b20gbnVtYmVyLgorICogICAgICAgIFJldHVybiB0aGUgYXRvbSB2YWx1ZSBvZiBz
dHJpbmcuCisgKi8KKworaW50IExvb2tVcEFkZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29u
c3QgY2hhciAqcykKK3sKKyAgICBpbnQgaGFzaGluZGV4LCBhdG9tOworCisgICAgaGFzaGluZGV4
ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOworICAgIGF0b20gPSBhdGFibGUtPmh0
YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlOworICAgIGlmIChhdG9tID09IDApIHsKKyAgICAg
ICAgYXRvbSA9IEFsbG9jYXRlQXRvbShhdGFibGUpOworICAgICAgICBTZXRBdG9tVmFsdWUoYXRh
YmxlLCBhdG9tLCBoYXNoaW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gYXRvbTsKK30gLy8gTG9v
a1VwQWRkU3RyaW5nCisKKy8qCisgKiBHZXRBdG9tU3RyaW5nKCkKKyAqCisgKi8KKworY29uc3Qg
IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQoreworICAg
IGludCBzb2Zmc2V0OworCisgICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRG
cmVlKSB7CisgICAgICAgIHNvZmZzZXQgPSBhdGFibGUtPmFtYXBbYXRvbV07CisgICAgICAgIGlm
IChzb2Zmc2V0ID4gMCAmJiBzb2Zmc2V0IDwgYXRhYmxlLT5zdGFibGUubmV4dEZyZWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1tzb2Zmc2V0XTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAiPGludGVybmFsIGVycm9yOiBiYWQgc29m
ZnNldD4iOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0b20gPT0gMCkg
eworICAgICAgICAgICAgcmV0dXJuICI8bnVsbCBhdG9tPiI7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoYXRvbSA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxF
T0Y+IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8aW52
YWxpZCBhdG9tPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9IC8vIEdldEF0
b21TdHJpbmcKKworLyoKKyAqIEdldFJldmVyc2VkQXRvbSgpCisgKgorICovCisKK2ludCBHZXRS
ZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQoreworICAgIGlmIChhdG9t
ID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICByZXR1cm4gYXRhYmxl
LT5hcmV2W2F0b21dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30g
Ly8gR2V0UmV2ZXJzZWRBdG9tCisKKy8qCisgKiBBZGRBdG9tKCkgLSBBZGQgYSBzdHJpbmcgdG8g
dGhlIGF0b20sIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVy
ZS4KKyAqICAgICAgICAgUmV0dXJuIGl0J3MgYXRvbSBpbmRleC4KKyAqLworCitpbnQgQWRkQXRv
bShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgYXRvbTsKKwor
ICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzKTsKKyAgICByZXR1cm4gYXRvbTsK
K30gLy8gQWRkQXRvbQorCisvKgorICogQWRkQXRvbUZpeGVkKCkgLSBBZGQgYW4gYXRvbSB0byB0
aGUgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLgorICog
ICAgICAgICBBc3NpZ24gaXQgdGhlIGF0b20gdmFsdWUgb2YgImF0b20iLgorICovCisKK3N0YXRp
YyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQg
YXRvbSkKK3sKKyAgICBpbnQgaGFzaGluZGV4LCBsc2l6ZTsKKworICAgIGhhc2hpbmRleCA9IExv
b2tVcEFkZFN0cmluZ0hhc2goYXRhYmxlLCBzKTsKKyAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+
PSBhdGFibGUtPnNpemUgfHwgYXRvbSA+PSBhdGFibGUtPnNpemUpIHsKKyAgICAgICAgbHNpemUg
PSBhdGFibGUtPnNpemUqMjsKKyAgICAgICAgaWYgKGxzaXplIDw9IGF0b20pCisgICAgICAgICAg
ICBsc2l6ZSA9IGF0b20gKyAxOworICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgbHNpemUp
OworICAgIH0KKyAgICBhdGFibGUtPmFtYXBbYXRvbV0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVto
YXNoaW5kZXhdLmluZGV4OworICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFs
dWUgPSBhdG9tOworICAgIC8vaWYgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkKKyAgICAvLyAg
ICBhdGFibGUtPm5leHRGcmVlID0gYXRvbSArIDE7CisgICAgd2hpbGUgKGF0b20gPj0gYXRhYmxl
LT5uZXh0RnJlZSkgeworICAgICAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBs
UmV2ZXJzZShhdGFibGUtPm5leHRGcmVlKTsKKyAgICAgICAgYXRhYmxlLT5uZXh0RnJlZSsrOwor
ICAgIH0KKyAgICByZXR1cm4gYXRvbTsKK30gLy8gQWRkQXRvbUZpeGVkCisKKy8qCisgKiBJbml0
QXRvbVRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBhdG9tIHRhYmxlLgorICoKKyAqLworCitpbnQg
SW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSkKK3sKKyAgICBpbnQg
aWk7CisKKyAgICBodHNpemUgPSBodHNpemUgPD0gMCA/IElOSVRfSEFTSF9UQUJMRV9TSVpFIDog
aHRzaXplOworICAgIGlmICghSW5pdFN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICghSW5pdEhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUsIGh0
c2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7Cisg
ICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKKyAgICBhdGFibGUtPnNpemUgPSAwOworICAgIEdyb3dB
dG9tVGFibGUoYXRhYmxlLCBJTklUX0FUT01fVEFCTEVfU0laRSk7CisgICAgaWYgKCFhdGFibGUt
PmFtYXApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gSW5pdGlhbGl6ZSBsb3dlciBwYXJ0
IG9mIGF0b20gdGFibGUgdG8gIjx1bmRlZmluZWQ+IiBhdG9tOgorCisgICAgQWRkQXRvbUZpeGVk
KGF0YWJsZSwgIjx1bmRlZmluZWQ+IiwgMCk7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgRklSU1Rf
VVNFUl9UT0tFTl9TWTsgaWkrKykKKyAgICAgICAgYXRhYmxlLT5hbWFwW2lpXSA9IGF0YWJsZS0+
YW1hcFswXTsKKworICAgIC8vIEFkZCBzaW5nbGUgY2hhcmFjdGVyIHRva2VucyB0byB0aGUgYXRv
bSB0YWJsZToKKworICAgIHsKKwkJY29uc3QgY2hhciAqcyA9ICJ+ISVeJiooKS0rPXwsLjw+Lz87
Oltde30jIjsKKyAgICAgICAgY2hhciB0WzJdOworCisgICAgICAgIHRbMV0gPSAnXDAnOworICAg
ICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgIHRbMF0gPSAqczsKKyAgICAgICAgICAgIEFk
ZEF0b21GaXhlZChhdGFibGUsIHQsIHNbMF0pOworICAgICAgICAgICAgcysrOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gQWRkIG11bHRpcGxlIGNoYXJhY3RlciBzY2FubmVyIHRva2VucyA6
CisKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YodG9rZW5zKS9zaXplb2YodG9rZW5zWzBd
KTsgaWkrKykKKyAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdG9rZW5zW2lpXS5zdHIsIHRv
a2Vuc1tpaV0udmFsKTsKKworICAgIC8vIEFkZCBlcnJvciBzeW1ib2wgaWYgcnVubmluZyBpbiBl
cnJvciBtb2RlOgorCisgICAgaWYgKGNwcC0+b3B0aW9ucy5FcnJvck1vZGUpCisgICAgICAgIEFk
ZEF0b21GaXhlZChhdGFibGUsICJlcnJvciIsIEVSUk9SX1NZKTsKKworICAgIEFkZEF0b20oYXRh
YmxlLCAiPCoqKiBlbmQgZml4ZWQgYXRvbXMgKioqPiIpOworCisgICAgcmV0dXJuIDE7Cit9IC8v
IEluaXRBdG9tVGFibGUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRGVidWcgUHJpbnRpbmcgRnVuY3Rp
b25zOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKgorICogUHJpbnRBdG9tVGFibGUoKQorICoKKyAq
LworCit2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIGludCBp
aTsKKyAgICBjaGFyIHN0clsyMDBdOworCisgICAgZm9yIChpaSA9IDA7IGlpIDwgYXRhYmxlLT5u
ZXh0RnJlZTsgaWkrKykgeworICAgICAgICBzcHJpbnRmKHN0ciwgIiVkOiBcIiVzXCIiLCBpaSwg
JmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOworICAgICAgICBDUFBE
ZWJ1Z0xvZ01zZyhzdHIpOworICAgIH0KKyAgICBzcHJpbnRmKHN0ciwgIkhhc2ggdGFibGU6IHNp
emU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKKyAgICAgICAgICAgYXRhYmxlLT5odGFi
bGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CisgICAgQ1BQRGVidWdMb2dNc2coc3Ry
KTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsr
KSB7CisgICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lp
XSk7CisgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CisgICAgfQorCit9IC8vIFByaW50QXRv
bVRhYmxlCisKKworLyoKKyAqIEdldFN0cmluZ09mQXRvbSgpCisgKgorICovCisKK2NoYXIqIEdl
dFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisJIGNoYXIqIGNo
cl9zdHI7CisJIGNocl9zdHI9JmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2F0
b21dXTsKKwkgcmV0dXJuIGNocl9zdHI7Cit9IC8vIEdldFN0cmluZ09mQXRvbQorCisvKgorICog
RnJlZUF0b21UYWJsZSgpIC0gRnJlZSB0aGUgYXRvbSB0YWJsZSBhbmQgYXNzb2NpYXRlZCBtZW1v
cnkKKyAqCisgKi8KKwordm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQorewor
ICAgIEZyZWVTdHJpbmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpOworICAgIEZyZWVIYXNoVGFibGUo
JmF0YWJsZS0+aHRhYmxlKTsKKyAgICBpZiAoYXRhYmxlLT5hbWFwKQorICAgICAgICBmcmVlKGF0
YWJsZS0+YW1hcCk7CisgICAgaWYgKGF0YWJsZS0+YXJldikKKyAgICAgICAgZnJlZShhdGFibGUt
PmFyZXYpOworICAgIGF0YWJsZS0+YW1hcCA9IE5VTEw7CisgICAgYXRhYmxlLT5hcmV2ID0gTlVM
TDsKKyAgICBhdGFibGUtPm5leHRGcmVlID0gMDsKKyAgICBhdGFibGUtPnNpemUgPSAwOworfSAv
LyBGcmVlQXRvbVRhYmxlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgYXRvbS5j
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBz
b2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRp
b24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVz
IGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhl
c2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRv
IHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZl
CitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJ
RElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2Us
IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92
aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11
c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3Ry
aWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRl
bWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUK
K05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
biBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNl
LCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdy
YW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55
IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQor
d29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkg
YmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKwor
VEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF
WFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQg
T1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9E
VUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkg
V0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJ
U1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdI
RVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvLworLy8gYXRvbS5oCisvLworCisjaWYgIWRlZmluZWQoX19BVE9NX0gp
CisjZGVmaW5lIF9fQVRPTV9IIDEKKwordHlwZWRlZiBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyBBdG9t
VGFibGU7CisKK2V4dGVybiBBdG9tVGFibGUgKmF0YWJsZTsKKworaW50IEluaXRBdG9tVGFibGUo
QXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwordm9pZCBGcmVlQXRvbVRhYmxlKEF0b21U
YWJsZSAqYXRhYmxlKTsKK2ludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFy
ICpzKTsKK3ZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOworaW50IExvb2tV
cEFkZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Citjb25zdCBjaGFy
ICpHZXRBdG9tU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CitpbnQgR2V0UmV2
ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CitjaGFyKiBHZXRTdHJpbmdP
ZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKKyNlbmRpZiAvLyAhZGVmaW5lZChf
X0FUT01fSCkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgor
CitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8vCisvLyBjb21waWxlLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0NPTVBJTEVfSCkK
KyNkZWZpbmUgX19DT01QSUxFX0ggMQorCitpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKKwordHlw
ZWRlZiBzdHJ1Y3QgT3B0aW9uc19SZWN7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZVN0cmluZzsK
KyAgICBpbnQgRXJyb3JNb2RlOworICAgIGludCBRdWlldDsKKwkKKyAgICAvLyBEZWJ1ZyBUaGUg
Q29tcGlsZXIgb3B0aW9uczoKKyAgICBpbnQgRHVtcEF0b21UYWJsZTsKK30gT3B0aW9uczsKKwor
c3RydWN0IENQUFN0cnVjdF9SZWMgeworICAgIC8vIFB1YmxpYyBtZW1iZXJzCisgICAgU291cmNl
TG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzdGF0ZW1l
bnQgYnkgdGhlIHRyZWUgd2Fsa2VycworICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAgICAgICAv
LyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKKworICAgIC8vIFByaXZhdGUgbWVtYmVy
cworICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOworCisgICAgLy8gU2Nhbm5lciBkYXRhOgor
CisgICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlvbiBvZiBt
b3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCisgICAgaW50IG1vc3RSZWNlbnRU
b2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKKyAg
ICBJbnB1dFNyYyAqY3VycmVudElucHV0OworICAgIGludCBwcmV2aW91c190b2tlbjsKKyAgICBp
bnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhhdCAjdmVy
c2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHByZXNlbnQK
KyAgICAKKwl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUgcGFyc2VD
b250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKKyAgICAgCisgICAgLy8gUHJp
dmF0ZSBtZW1iZXJzOgorICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7CisJaW50IGlmZGVwdGg7ICAg
ICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4gdGhlIGNw
cC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAorICAgIGludCBlbHNlZGVwdGhbNjRdOyAgICAg
ICAgICAvL0tlZXAgYSB0cmFjayBvZiAjaWYgZGVwdGguLk1heCBhbGxvd2VkIGlzIDY0LiAgIAor
ICAgIGludCBlbHNldHJhY2tlcjsgICAgICAgICAgICAvLyNpZi0jZWxzZSBhbmQgI2VuZGlmIGNv
bnN0cnVjdHMuLi5Db3VudGVyLgorICAgIGNvbnN0IGNoYXIgKkVyck1zZzsKKyAgICBpbnQgQ29t
cGlsZUVycm9yOyAgICAgICAgICAgLy9JbmRpY2F0ZSBjb21waWxlIGVycm9yIHdoZW4gI2Vycm9y
LCAjZWxzZSwjZWxpZiBtaXNtYXRjaC4KKworICAgIC8vCisgICAgLy8gR2xvYmFscyB1c2VkIHRv
IGNvbW11bmljYXRlIGJldHdlZW4gUGFQYXJzZVN0cmluZ3MoKSBhbmQgeXlfaW5wdXQoKWFuZCAK
KyAgICAvLyBhbHNvIGFjcm9zcyB0aGUgZmlsZXMuKGdlbl9nbHNsYW5nLmNwcCBhbmQgc2Nhbm5l
ci5jKQorICAgIC8vCisgICAgaW50ICAgIFBhV2hpY2hTdHI7ICAgICAgICAgICAgLy8gd2hpY2gg
c3RyaW5nIHdlJ3JlIHBhcnNpbmcKKyAgICBpbnQqICAgUGFTdHJMZW47ICAgICAgICAgICAgICAv
LyBhcnJheSBvZiBsZW5ndGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5ncworICAgIGludCAgICBQYUFy
Z2M7ICAgICAgICAgICAgICAgIC8vIGNvdW50IG9mIHN0cmluZ3MgaW4gdGhlIGFycmF5CisgICAg
Y2hhcioqIFBhQXJndjsgICAgICAgICAgICAgICAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8g
cGFyc2UgICAgCisgICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Cit9OworCisj
ZW5kaWYgLy8gIWRlZmluZWQoX19DT01QSUxFX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3BwLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMjkgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKy8vIGNwcC5jCisvLworCisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KTsKKworLyogRG9uJ3QgdXNlIG1lbW9yeS5jJ3MgcmVwbGFjZW1lbnRzLCBhcyB3ZSBjbGVhbiB1
cCBwcm9wZXJseSBoZXJlICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgZnJlZQorCitzdGF0aWMg
aW50IGJpbmRBdG9tID0gMDsKK3N0YXRpYyBpbnQgY29uc3RBdG9tID0gMDsKK3N0YXRpYyBpbnQg
ZGVmYXVsdEF0b20gPSAwOworc3RhdGljIGludCBkZWZpbmVBdG9tID0gMDsKK3N0YXRpYyBpbnQg
ZGVmaW5lZEF0b20gPSAwOworc3RhdGljIGludCBlbHNlQXRvbSA9IDA7CitzdGF0aWMgaW50IGVs
aWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgZW5kaWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZBdG9t
ID0gMDsKK3N0YXRpYyBpbnQgaWZkZWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZuZGVmQXRvbSA9
IDA7CitzdGF0aWMgaW50IGluY2x1ZGVBdG9tID0gMDsKK3N0YXRpYyBpbnQgbGluZUF0b20gPSAw
Oworc3RhdGljIGludCBwcmFnbWFBdG9tID0gMDsKK3N0YXRpYyBpbnQgdGV4dW5pdEF0b20gPSAw
Oworc3RhdGljIGludCB1bmRlZkF0b20gPSAwOworc3RhdGljIGludCBlcnJvckF0b20gPSAwOwor
c3RhdGljIGludCBfX0xJTkVfX0F0b20gPSAwOworc3RhdGljIGludCBfX0ZJTEVfX0F0b20gPSAw
Oworc3RhdGljIGludCBfX1ZFUlNJT05fX0F0b20gPSAwOworc3RhdGljIGludCB2ZXJzaW9uQXRv
bSA9IDA7CitzdGF0aWMgaW50IGV4dGVuc2lvbkF0b20gPSAwOworCitzdGF0aWMgU2NvcGUgKm1h
Y3JvcyA9IDA7CisjZGVmaW5lIE1BWF9NQUNST19BUkdTICA2NAorI2RlZmluZSBNQVhfSUZfTkVT
VElORyAgNjQKKworc3RhdGljIFNvdXJjZUxvYyBpZmxvYzsgLyogb3V0ZXJtb3N0ICNpZiAqLwor
CitpbnQgSW5pdENQUCh2b2lkKQoreworICAgIGNoYXIgICAgICAgIGJ1ZmZlcls2NF0sICp0Owor
ICAgIGNvbnN0IGNoYXIgICpmOworCisgICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5
IHRoZSBDUFAgbGluZSBzY2FubmVyOgorICAgIGJpbmRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0
YWJsZSwgImJpbmQiKTsKKyAgICBjb25zdEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
Y29uc3QiKTsKKyAgICBkZWZhdWx0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZh
dWx0Iik7CisgICAgZGVmaW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmUi
KTsKKyAgICBkZWZpbmVkQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmVkIik7
CisgICAgZWxpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxpZiIpOworICAgIGVs
c2VBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVsc2UiKTsKKyAgICBlbmRpZkF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZW5kaWYiKTsKKyAgICBpZkF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiaWYiKTsKKyAgICBpZmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCAiaWZkZWYiKTsKKyAgICBpZm5kZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgImlmbmRlZiIpOworICAgIGluY2x1ZGVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
ImluY2x1ZGUiKTsKKyAgICBsaW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJsaW5l
Iik7CisgICAgcHJhZ21hQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJwcmFnbWEiKTsK
KyAgICB0ZXh1bml0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ0ZXh1bml0Iik7Cisg
ICAgdW5kZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInVuZGVmIik7CisJZXJyb3JB
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVycm9yIik7CisgICAgX19MSU5FX19BdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fTElORV9fIik7CisgICAgX19GSUxFX19BdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fRklMRV9fIik7CisJX19WRVJTSU9OX19BdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fVkVSU0lPTl9fIik7CisgICAgdmVyc2lvbkF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidmVyc2lvbiIpOworICAgIGV4dGVuc2lvbkF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZXh0ZW5zaW9uIik7CisgICAgbWFjcm9zID0g
TmV3U2NvcGVJblBvb2wobWVtX0NyZWF0ZVBvb2woMCwgMCkpOworICAgIHN0cmNweShidWZmZXIs
ICJQUk9GSUxFXyIpOworICAgIHQgPSBidWZmZXIgKyBzdHJsZW4oYnVmZmVyKTsKKyAgICBmID0g
Y3BwLT5vcHRpb25zLnByb2ZpbGVTdHJpbmc7CisgICAgd2hpbGUgKChpc2FsbnVtKCpmKSB8fCAq
ZiA9PSAnXycpICYmIHQgPCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgICp0
KysgPSB0b3VwcGVyKCpmKyspOworICAgICp0ID0gMDsKKworICAgIFByZWRlZmluZUludE1hY3Jv
KCJHTF9FUyIsIDEpOworICAgIFByZWRlZmluZUludE1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJ
T05fSElHSCIsIDEpOworCisJcmV0dXJuIDE7Cit9IC8vIEluaXRDUFAKKworaW50IEZyZWVDUFAo
dm9pZCkKK3sKKyAgICBpZiAobWFjcm9zKQorICAgIHsKKyAgICAgICAgbWVtX0ZyZWVQb29sKG1h
Y3Jvcy0+cG9vbCk7CisgICAgICAgIG1hY3JvcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7
Cit9CisKK2ludCBGaW5hbENQUCh2b2lkKQoreworCWlmIChjcHAtPmlmZGVwdGgpCisJCUNQUEVy
cm9yVG9JbmZvTG9nKCIjaWYgbWlzbWF0Y2giKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGlj
IGludCBDUFBkZWZpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuLCBu
YW1lLCBhcmdzW01BWF9NQUNST19BUkdTXSwgYXJnYzsKKyAgICBjb25zdCBjaGFyICptZXNzYWdl
OworICAgIE1hY3JvU3ltYm9sIG1hYzsKKyAgICBTeW1ib2wgKnN5bWI7CisgICAgU291cmNlTG9j
IGR1bW15TG9jOworICAgIG1lbXNldCgmbWFjLCAwLCBzaXplb2YobWFjKSk7CisgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiI2RlZmluZSIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIG5hbWUg
PSB5eWx2YWxwcC0+c2NfaWRlbnQ7CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiA9PSAnKCcgJiYg
IXl5bHZhbHBwLT5zY19pbnQpIHsKKyAgICAgICAgLy8gZ2F0aGVyIGFyZ3VtZW50cworICAgICAg
ICBhcmdjID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAg
aWYgKGFyZ2MgPT0gMCAmJiB0b2tlbiA9PSAnKScpIGJyZWFrOworICAgICAgICAgICAgaWYgKHRv
a2VuICE9IENQUF9JREVOVElGSUVSKSB7CisJCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXJnYyA8IE1BWF9NQUNST19BUkdTKQorICAgICAgICAgICAgICAgIGFyZ3NbYXJn
YysrXSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfSB3
aGlsZSAodG9rZW4gPT0gJywnKTsKKyAgICAgICAgaWYgKHRva2VuICE9ICcpJykgeworICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgICAgIHJldHVybiB0
b2tlbjsKKyAgICAgICAgfQorICAgICAgICBtYWMuYXJnYyA9IGFyZ2M7CisgICAgICAgIG1hYy5h
cmdzID0gbWVtX0FsbG9jKG1hY3Jvcy0+cG9vbCwgYXJnYyAqIHNpemVvZihpbnQpKTsKKyAgICAg
ICAgbWVtY3B5KG1hYy5hcmdzLCBhcmdzLCBhcmdjICogc2l6ZW9mKGludCkpOworICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisJfQorICAgIG1hYy5ib2R5ID0gTmV3VG9rZW5TdHJlYW0oR2V0QXRvbVN0cmluZyhhdGFi
bGUsIG5hbWUpLCBtYWNyb3MtPnBvb2wpOworICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Cisg
ICAgICAgIGlmICh0b2tlbiA9PSAnXFwnKSB7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygiVGhlIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRo
ZSBPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSIpOworICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OworICAgICAgICB9CisgICAgICAgIFJlY29yZFRva2VuKG1hYy5ib2R5LCB0b2tlbiwgeXlsdmFs
cHApOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgfTsKKworICAgIHN5bWIgPSBMb29rVXBTeW1ib2wobWFj
cm9zLCBuYW1lKTsKKyAgICBpZiAoc3ltYikgeworICAgICAgICBpZiAoIXN5bWItPmRldGFpbHMu
bWFjLnVuZGVmKSB7CisgICAgICAgICAgICAvLyBhbHJlYWR5IGRlZmluZWQgLS0gbmVlZCB0byBt
YWtlIHN1cmUgdGhleSBhcmUgaWRlbnRpY2FsCisgICAgICAgICAgICBpZiAoc3ltYi0+ZGV0YWls
cy5tYWMuYXJnYyAhPSBtYWMuYXJnYykgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGZvciAoYXJn
Yz0wOyBhcmdjIDwgbWFjLmFyZ2M7IGFyZ2MrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYi0+
ZGV0YWlscy5tYWMuYXJnc1thcmdjXSAhPSBtYWMuYXJnc1thcmdjXSkKKyAgICAgICAgICAgICAg
ICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFJld2luZFRva2VuU3RyZWFtKHN5bWItPmRl
dGFpbHMubWFjLmJvZHkpOworICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0obWFjLmJvZHkp
OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGludCBvbGRfbHZhbCwgb2xkX3Rv
a2VuOworICAgICAgICAgICAgICAgIG9sZF90b2tlbiA9IFJlYWRUb2tlbihzeW1iLT5kZXRhaWxz
Lm1hYy5ib2R5LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgb2xkX2x2YWwgPSB5eWx2YWxw
cC0+c2NfaW50OworICAgICAgICAgICAgICAgIHRva2VuID0gUmVhZFRva2VuKG1hYy5ib2R5LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IG9sZF90b2tlbiB8fCB5eWx2
YWxwcC0+c2NfaW50ICE9IG9sZF9sdmFsKSB7IAorICAgICAgICAgICAgICAgIGVycm9yOgorICAg
ICAgICAgICAgICAgICAgICBTdG9yZVN0cigiTWFjcm8gUmVkZWZpbmVkIik7CisgICAgICAgICAg
ICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsbmFtZSkpOworICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIERlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsg
fQorICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gPiAwKTsKKyAgICAgICAgfQorICAgICAgICAv
L0ZyZWVNYWNybygmc3ltYi0+ZGV0YWlscy5tYWMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGR1
bW15TG9jLmZpbGUgPSAwOworICAgICAgICBkdW1teUxvYy5saW5lID0gMDsKKyAgICAgICAgc3lt
YiA9IEFkZFN5bWJvbCgmZHVtbXlMb2MsIG1hY3JvcywgbmFtZSwgTUFDUk9fUyk7CisgICAgfQor
ICAgIHN5bWItPmRldGFpbHMubWFjID0gbWFjOworICAgIHJldHVybiAnXG4nOworfSAvLyBDUFBk
ZWZpbmUKKworc3RhdGljIGludCBDUFB1bmRlZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAg
ICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgIFN5bWJvbCAqc3ltYjsKKwlpZih0b2tlbiA9PSAnXG4nKXsKKwkJQ1BQ
RXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOworCSAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAg
IGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAgICBnb3RvIGVycm9yOworICAg
IHN5bWIgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQpOworICAgIGlm
IChzeW1iKSB7CisgICAgICAgIHN5bWItPmRldGFpbHMubWFjLnVuZGVmID0gMTsKKyAgICB9Cisg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgZXJyb3I6CisgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsKKyAgICB9CisgICAgcmV0dXJuIHRva2VuOworfSAv
LyBDUFB1bmRlZgorCisvKiBDUFBlbHNlIC0tIHNraXAgZm9yd2FyZCB0byBhcHByb3ByaWF0ZSBz
cG90LiAgVGhpcyBpcyBhY3R1YWxseSB1c2VkCisqKiB0byBza2lwIHRvIGFuZCAjZW5kaWYgYWZ0
ZXIgc2VlaW5nIGFuICNlbHNlLCBBTkQgdG8gc2tpcCB0byBhICNlbHNlLAorKiogI2VsaWYsIG9y
ICNlbmRpZiBhZnRlciBhICNpZi8jaWZkZWYvI2lmbmRlZi8jZWxpZiB0ZXN0IHdhcyBmYWxzZQor
Ki8KKworc3RhdGljIGludCBDUFBlbHNlKGludCBtYXRjaGVsc2UsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQoreworICAgIGludCBhdG9tLGRlcHRoPTA7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkKKwl3aGlsZSAo
dG9rZW4gPiAwKSB7CisgICAgICAgIGlmICh0b2tlbiAhPSAnIycpIHsKKwkJICAgIHdoaWxlICh0
b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwkJaWYgKCh0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCkp
ICE9IENQUF9JREVOVElGSUVSKQorCQkJY29udGludWU7CisgICAgICAgIGF0b20gPSB5eWx2YWxw
cC0+c2NfaWRlbnQ7CisgICAgICAgIGlmIChhdG9tID09IGlmQXRvbSB8fCBhdG9tID09IGlmZGVm
QXRvbSB8fCBhdG9tID09IGlmbmRlZkF0b20peworICAgICAgICAgICAgZGVwdGgrKzsgY3BwLT5p
ZmRlcHRoKys7IGNwcC0+ZWxzZXRyYWNrZXIrKzsKKyAgICAgICAgICAgIGNwcC0+ZWxzZWRlcHRo
W2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKKwkJfQorCQllbHNlIGlmIChhdG9tID09IGVuZGlmQXRv
bSkgeworICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKKwkJCSAgICAtLWNwcC0+ZWxzZXRyYWNr
ZXI7CisgICAgICAgICAgICAgICAgaWYgKGNwcC0+aWZkZXB0aCkgCisgICAgICAgICAgICAgICAg
ICAgIC0tY3BwLT5pZmRlcHRoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fSAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAg
ICAgICAgICAgICAgLS1jcHAtPmlmZGVwdGg7CisgICAgICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKCgoaW50KShtYXRjaGVsc2UpICE9IDApJiYgZGVwdGg9PTApIHsKKwkJCWlmIChhdG9tID09
IGVsc2VBdG9tICkgeworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAo
dG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9n
KCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9r
ZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICB9IAorCQkJCWJyZWFrOworCQkJfSAKKwkJCWVsc2UgaWYgKGF0b20gPT0gZWxpZkF0b20pIHsK
KyAgICAgICAgICAgICAgICAvKiB3ZSBkZWNyZW1lbnQgY3BwLT5pZmRlcHRoIGhlcmUsIGJlY2F1
c2UgQ1BQaWYgd2lsbCBpbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgKiBpdCBhbmQgd2UgcmVh
bGx5IHdhbnQgdG8gbGVhdmUgaXQgYWxvbmUgKi8KKwkJCQlpZiAoY3BwLT5pZmRlcHRoKXsKKwkJ
CQkJLS1jcHAtPmlmZGVwdGg7CisJCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKwkJCQl9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUGlmKHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKwkJ
fQorICAgICAgICBlbHNlIGlmKChhdG9tPT1lbHNlQXRvbSkgJiYgKCFDaGtDb3JyZWN0RWxzZU5l
c3RpbmcoKSkpeworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIGFmdGVyIGEg
I2Vsc2UiKTsKKyAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgIH0KKwl9
OworICAgIHJldHVybiB0b2tlbjsKK30KKworZW51bSBldmFsX3ByZWMgeworICAgIE1JTl9QUkVD
LAorICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBYT1IsIEFORCwgRVFVQUwsIFJFTEFUSU9O
LCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAorICAgIE1BWF9QUkVDCit9OworCitzdGF0aWMgaW50
IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8fCBiOyB9CitzdGF0aWMgaW50IG9w
X2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiYgYjsgfQorc3RhdGljIGludCBvcF9v
cihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9CitzdGF0aWMgaW50IG9wX3hvcihpbnQg
YSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9CitzdGF0aWMgaW50IG9wX2FuZChpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgJiBiOyB9CitzdGF0aWMgaW50IG9wX2VxKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CitzdGF0aWMgaW50IG9wX25lKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSAhPSBiOyB9CitzdGF0aWMgaW50IG9wX2dlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PSBi
OyB9CitzdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8PSBiOyB9Citz
dGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+IGI7IH0KK3N0YXRpYyBp
bnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDwgYjsgfQorc3RhdGljIGludCBvcF9z
aGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7IH0KK3N0YXRpYyBpbnQgb3Bfc2hyKGlu
dCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9CitzdGF0aWMgaW50IG9wX2FkZChpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9CitzdGF0aWMgaW50IG9wX3N1YihpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgLSBiOyB9CitzdGF0aWMgaW50IG9wX211bChpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgKiBiOyB9CitzdGF0aWMgaW50IG9wX2RpdihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
LyBiOyB9CitzdGF0aWMgaW50IG9wX21vZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJSBiOyB9
CitzdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1cm4gYTsgfQorc3RhdGljIGludCBvcF9u
ZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9CitzdGF0aWMgaW50IG9wX2NtcGwoaW50IGEpIHsgcmV0
dXJuIH5hOyB9CitzdGF0aWMgaW50IG9wX25vdChpbnQgYSkgeyByZXR1cm4gIWE7IH0KKworc3Ry
dWN0IHsKKyAgICBpbnQgdG9rZW4sIHByZWMsICgqb3ApKGludCwgaW50KTsKK30gYmlub3BbXSA9
IHsKKyAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xvZ29yIH0sCisgICAgeyBDUFBfQU5EX09Q
LCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAorICAgIHsgJ3wnLCBPUiwgb3Bfb3IgfSwKKyAgICB7ICde
JywgWE9SLCBvcF94b3IgfSwKKyAgICB7ICcmJywgQU5ELCBvcF9hbmQgfSwKKyAgICB7IENQUF9F
UV9PUCwgRVFVQUwsIG9wX2VxIH0sCisgICAgeyBDUFBfTkVfT1AsIEVRVUFMLCBvcF9uZSB9LAor
ICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKKyAgICB7IENQUF9HRV9PUCwgUkVMQVRJT04s
IG9wX2dlIH0sCisgICAgeyAnPCcsIFJFTEFUSU9OLCBvcF9sdCB9LAorICAgIHsgQ1BQX0xFX09Q
LCBSRUxBVElPTiwgb3BfbGUgfSwKKyAgICB7IENQUF9MRUZUX09QLCBTSElGVCwgb3Bfc2hsIH0s
CisgICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9zaHIgfSwKKyAgICB7ICcrJywgQURELCBv
cF9hZGQgfSwKKyAgICB7ICctJywgQURELCBvcF9zdWIgfSwKKyAgICB7ICcqJywgTVVMLCBvcF9t
dWwgfSwKKyAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwKKyAgICB7ICclJywgTVVMLCBvcF9tb2Qg
fSwKK307CisKK3N0cnVjdCB7CisgICAgaW50IHRva2VuLCAoKm9wKShpbnQpOworfSB1bm9wW10g
PSB7CisgICAgeyAnKycsIG9wX3BvcyB9LAorICAgIHsgJy0nLCBvcF9uZWcgfSwKKyAgICB7ICd+
Jywgb3BfY21wbCB9LAorICAgIHsgJyEnLCBvcF9ub3QgfSwKK307CisKKyNkZWZpbmUgQUxFTihB
KSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKKworc3RhdGljIGludCBldmFsKGludCB0b2tlbiwg
aW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlzdHlwZXBwICogeXlsdmFscHApCit7Cisg
ICAgaW50ICAgICAgICAgaSwgdmFsOworICAgIFN5bWJvbCAgICAgICpzOworICAgIGlmICh0b2tl
biA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IGRlZmluZWRBdG9tKSB7CisgICAgICAgICAgICBpbnQgbmVlZGNsb3NlID0gMDsKKyAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAgICAgICAgICAg
ICBuZWVkY2xvc2UgPSAxOworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBn
b3RvIGVycm9yOworICAgICAgICAgICAgKnJlcyA9IChzID0gTG9va1VwU3ltYm9sKG1hY3Jvcywg
eXlsdmFscHAtPnNjX2lkZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gIXMtPmRldGFp
bHMubWFjLnVuZGVmIDogMDsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChuZWVk
Y2xvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJyknKQorICAgICAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0K
KwkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkg
eworCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgcmV0dXJuIGV2YWwodG9rZW4sIHByZWMsIHJlcywgZXJy
LCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOwor
ICAgICAgICB9CisJfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKyAgICAg
ICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9IGVsc2UgaWYg
KHRva2VuID09ICcoJykgeworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHRva2VuID0gZXZhbCh0b2tl
biwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgIGlmICghKmVycikgewor
ICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9y
OworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9y
IChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAodW5v
cFtpXS50b2tlbiA9PSB0b2tlbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB0b2tl
biA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICAgICAg
KnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBn
b3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICghKmVycikgeworICAgICAg
ICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdcbicpIGJyZWFrOworICAgICAgICBmb3Ig
KGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoYmlu
b3BbaV0udG9rZW4gPT0gdG9rZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnByZWMgPD0gcHJlYykKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB2YWwgPSAqcmVzOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHRva2Vu
ID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKKyAgICAg
ICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJlcyk7CisgICAgfQorICAgIHJldHVybiB0b2tl
bjsKK2Vycm9yOgorICAgIENQUEVycm9yVG9JbmZvTG9nKCJpbmNvcnJlY3QgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZSIpOworICAgICplcnIgPSAxOworICAgICpyZXMgPSAwOworICAgIHJldHVybiB0
b2tlbjsKK30gLy8gZXZhbAorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KSB7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpbnQgcmVzID0gMCwgZXJyID0gMDsKKwljcHAtPmVsc2V0
cmFja2VyKys7CisgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworICAg
IGlmICghY3BwLT5pZmRlcHRoKyspCisgICAgICAgIGlmbG9jID0gKmNwcC0+dG9rZW5Mb2M7CisJ
aWYoY3BwLT5pZmRlcHRoID5NQVhfSUZfTkVTVElORyl7CisgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJcmV0dXJuIDA7CisJfQor
CXRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsICZyZXMsICZlcnIsIHl5bHZhbHBwKTsKKyAg
ICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4
cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBl
Y3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgfSAKKyAgICBpZiAoIXJlcyAmJiAhZXJyKSB7CisgICAgICAgIHRva2Vu
ID0gQ1BQZWxzZSgxLCB5eWx2YWxwcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfSAv
LyBDUFBpZgorCitzdGF0aWMgaW50IENQUGlmZGVmKGludCBkZWZpbmVkLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGludCBuYW1lID0geXlsdmFscHAtPnNjX2lk
ZW50OworCWlmKCsrY3BwLT5pZmRlcHRoID5NQVhfSUZfTkVTVElORyl7CisJICAgIENQUEVycm9y
VG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJcmV0dXJuIDA7
CisJfQorCWNwcC0+ZWxzZXRyYWNrZXIrKzsKKyAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0
cmFja2VyXSA9IDA7CisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7CisgICAgICAg
ICAgICBkZWZpbmVkID8gQ1BQRXJyb3JUb0luZm9Mb2coImlmZGVmIik6Q1BQRXJyb3JUb0luZm9M
b2coImlmbmRlZiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5bWJvbCAqcyA9IExvb2tVcFN5
bWJvbChtYWNyb3MsIG5hbWUpOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmICh0b2tlbiAhPSAn
XG4nKSB7CisgICAgICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2Vu
cyBmb2xsb3dpbmcgI2lmZGVmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5l
d2xpbmUiKTsKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKChzICYmICFzLT5kZXRhaWxzLm1hYy51
bmRlZikgPyAxIDogMCkgIT0gZGVmaW5lZCkKKyAgICAgICAgICAgIHRva2VuID0gQ1BQZWxzZSgx
LCB5eWx2YWxwcCk7CisgICAgfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQaWZkZWYKKwor
c3RhdGljIGludCBDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSAKK3sKKyAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworCWlmKHRva2VuPT0nXG4nKXsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiI2xpbmUiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1cm4g
dG9rZW47CisJfQorCWVsc2UgaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgeworCQl5eWx2
YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkJU2V0TGluZU51bWJl
cih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAKKwkJaWYgKHRva2Vu
ID09IENQUF9JTlRDT05TVEFOVCkgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9p
KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisJCQlTZXRTdHJpbmdOdW1iZXIoeXlsdmFscHAtPnNj
X2ludCk7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCQlpZih0b2tlbiE9J1xuJykKKwkJCQlDUFBFcnJv
clRvSW5mb0xvZygiI2xpbmUiKTsKKyAgICAgICAgfQorCQllbHNlIGlmICh0b2tlbiA9PSAnXG4n
KXsKKwkJCXJldHVybiB0b2tlbjsKKwkJfQorCQllbHNleworICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIiNsaW5lIik7CisJCX0KKwl9CisJZWxzZXsKKyAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiI2xpbmUiKTsKKwl9CisgICAgcmV0dXJuIHRva2VuOworfQorCitzdGF0aWMgaW50
IENQUGVycm9yKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisKKwlpbnQgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGNvbnN0
IGNoYXIgKm1lc3NhZ2U7CisJCisgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKKwkJaWYgKHRv
a2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7Cisg
ICAgICAgICAgICBTdG9yZVN0cih5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQl9ZWxzZSBpZih0
b2tlbiA9PSBDUFBfSURFTlRJRklFUiB8fCB0b2tlbiA9PSBDUFBfU1RSQ09OU1RBTlQpeworCQkJ
U3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKwkJ
fWVsc2UgeworCQkgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0b2tlbikpOwor
CQl9CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKwl9CisJRGVjTGluZU51bWJlcigpOworCS8vc3RvcmUgdGhpcyBtc2cgaW50
byB0aGUgc2hhZGVyJ3MgaW5mb3JtYXRpb24gbG9nLi5zZXQgdGhlIENvbXBpbGUgRXJyb3IgZmxh
ZyEhISEKKwltZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgQ1BQU2hJbmZvTG9nTXNnKG1l
c3NhZ2UpOworICAgIFJlc2V0VFN0cmluZygpOworICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Cisg
ICAgSW5jTGluZU51bWJlcigpOworICAgIHJldHVybiAnXG4nOworfS8vQ1BQZXJyb3IKKworc3Rh
dGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisJY2hhciBTcmNTdHJO
YW1lWzJdOworCWNoYXIqKiBhbGxUb2tlbnM7CisJaW50IHRva2VuQ291bnQgPSAwOworCWludCBt
YXhUb2tlbkNvdW50ID0gMTA7CisJY29uc3QgY2hhciogU3JjU3RyOworCWludCBpOworCisJaW50
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKwkKKwlpZiAodG9rZW49PSdcbicpIHsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI3ByYWdtYSIpOworICAgICAgICBJbmNMaW5lTnVtYmVyKCk7
CisJICAgIHJldHVybiB0b2tlbjsKKwl9CisJCisJYWxsVG9rZW5zID0gKGNoYXIqKiltYWxsb2Mo
c2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291bnQpOwkKKworCXdoaWxlICh0b2tlbiAhPSAnXG4n
KSB7CisJCWlmICh0b2tlbkNvdW50ID49IG1heFRva2VuQ291bnQpIHsKKwkJCW1heFRva2VuQ291
bnQgKj0gMjsKKwkJCWFsbFRva2VucyA9IChjaGFyKiopcmVhbGxvYygoY2hhcioqKWFsbFRva2Vu
cywgc2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291bnQpOworCQl9CisJCXN3aXRjaCAodG9rZW4p
IHsKKwkJY2FzZSBDUFBfSURFTlRJRklFUjoKKwkJCVNyY1N0ciA9IEdldEF0b21TdHJpbmcoYXRh
YmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNo
YXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tl
bkNvdW50KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BQX0lOVENPTlNUQU5UOgor
CQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJvbF9uYW1lOworCQkJYWxsVG9rZW5zW3Rva2VuQ291
bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRv
a2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BQX0ZMT0FU
Q09OU1RBTlQ6CisJCQlTcmNTdHIgPSB5eWx2YWxwcC0+c3ltYm9sX25hbWU7CisJCQlhbGxUb2tl
bnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7CisJCQlz
dHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0cik7CisJCQlicmVhazsKKwkJY2Fz
ZSAtMToKKyAgICAgICAgICAgIC8vIEVPRgorICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIj
cHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQorCQkJcmV0dXJu
IHRva2VuOworCQlkZWZhdWx0OgorCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOworCQkJU3JjU3Ry
TmFtZVsxXSA9ICdcMCc7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9j
KDIpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHJOYW1lKTsKKwkJ
fQorCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisJfQorCisJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHRva2VuLCB5eWx2YWxwcCk7CisJSGFuZGxlUHJhZ21hKChjb25zdCBjaGFyKiopYWxs
VG9rZW5zLCB0b2tlbkNvdW50KTsKKwl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCisJZm9yIChpID0gMDsgaSA8IHRva2VuQ291
bnQ7ICsraSkgeworCQlmcmVlIChhbGxUb2tlbnNbaV0pOworCX0KKwlmcmVlIChhbGxUb2tlbnMp
OwkKKworCXJldHVybiB0b2tlbjsgICAgCit9IC8vIENQUHByYWdtYQorCisjZGVmaW5lIEVTU0xf
VkVSU0lPTl9OVU1CRVIgMTAwCisjZGVmaW5lIEVTU0xfVkVSU0lPTl9TVFJJTkcgIjEwMCIKKwor
c3RhdGljIGludCBDUFB2ZXJzaW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworCisgICAgaW50
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKworICAgIGlmIChjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9PSAxKQorICAgICAgICBD
UFBTaEluZm9Mb2dNc2coIiN2ZXJzaW9uIG11c3Qgb2NjdXIgYmVmb3JlIGFueSBvdGhlciBzdGF0
ZW1lbnQgaW4gdGhlIHByb2dyYW0iKTsKKworICAgIGlmKHRva2VuPT0nXG4nKXsKKwkJRGVjTGlu
ZU51bWJlcigpOworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKyAgICAg
ICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1cm4gdG9rZW47CisJfQorICAgIGlmICh0b2tlbiAh
PSBDUFBfSU5UQ09OU1RBTlQpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIp
OworCQorICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwor
CS8vU2V0VmVyc2lvbk51bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAKKyAgICBpZiAoeXls
dmFscHAtPnNjX2ludCAhPSBFU1NMX1ZFUlNJT05fTlVNQkVSKQorICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlZlcnNpb24gbnVtYmVyIG5vdCBzdXBwb3J0ZWQgYnkgRVNTTCIpOworCisgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgIAorCWlmICh0b2tlbiA9PSAnXG4nKXsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNl
eworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwl9CisgICAgcmV0dXJu
IHRva2VuOworfSAvLyBDUFB2ZXJzaW9uCisKK3N0YXRpYyBpbnQgQ1BQZXh0ZW5zaW9uKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQoreworCisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjaGFyIGV4dGVuc2lvbk5h
bWVbODBdOworCisgICAgaWYodG9rZW49PSdcbicpeworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiZXh0ZW5zaW9uIG5hbWUgbm90IHNwZWNpZmllZCIpOworICAg
ICAgICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVybiB0b2tlbjsKKwl9CisKKyAgICBpZiAodG9r
ZW4gIT0gQ1BQX0lERU5USUZJRVIpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZXh0ZW5z
aW9uIik7CisgICAgCisgICAgc3RyY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRh
YmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKwkgICAgCisgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tl
biAhPSAnOicpIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCInOicgbWlzc2luZyBhZnRlciBl
eHRlbnNpb24gbmFtZSIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIAorICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9uIG5vdCBzcGVjaWZpZWQiKTsKKyAgICAg
ICAgcmV0dXJuIHRva2VuOworICAgIH0KKworICAgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGV4
dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
KworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKwlpZiAodG9rZW4gPT0gJ1xuJyl7CisJCXJldHVybiB0b2tlbjsKKwl9CisJ
ZWxzZXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKKwl9CisgICAg
cmV0dXJuIHRva2VuOworfSAvLyBDUFBleHRlbnNpb24KKworaW50IHJlYWRDUFBsaW5lKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKKyAgICBpbnQgaXNWZXJzaW9uID0gMDsKKworICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgeworICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsK
KyAgICAgICAgICAgICB0b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsc2VBdG9tKSB7CisJCQkgaWYoQ2hrQ29ycmVj
dEVsc2VOZXN0aW5nKCkpeworICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApewor
ICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7
CisgICAgICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgaWYgKHRva2Vu
ICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVu
ZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0g
ZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4g
IT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
IH0KKwkJCSAgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICB9
ZWxzZXsKKyAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIGFmdGVyIGEg
I2Vsc2UiKTsKKyAgICAgICAgICAgICAgICAgY3BwLT5pZmRlcHRoPTA7CisgICAgICAgICAgICAg
ICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgfQorCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBl
bGlmQXRvbSkgeworICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpeworICAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKKyAgICAgICAgICAgICAg
ICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAvLyB0
aGlzIHRva2VuIGlzIHJlYWxseSBhIGRvbnQgY2FyZSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZWF0
IHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsgCisgICAgICAgICAgICB3aGlsZSAodG9rZW4g
IT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCSAgICB0b2tlbiA9IENQUGVsc2UoMCwg
eXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbmRp
ZkF0b20pIHsKKwkJICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAgICAgICAgICAgaWYgKCFj
cHAtPmlmZGVwdGgpeworICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlm
IG1pc21hdGNoIik7CisgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UKKwkJCSAgCSAtLWNwcC0+aWZkZXB0aDsKKwkg
ICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZBdG9tKSB7CisgICAgICAgICAg
ICAgdG9rZW4gPSBDUFBpZih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAt
PnNjX2lkZW50ID09IGlmZGVmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQaWZkZWYo
MSwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBp
Zm5kZWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigwLCB5eWx2YWxwcCk7
CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGxpbmVBdG9tKSB7Cisg
ICAgICAgICAgICAgdG9rZW4gPSBDUFBsaW5lKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gcHJhZ21hQXRvbSkgeworICAgICAgICAgICAgIHRva2Vu
ID0gQ1BQcHJhZ21hKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2Nf
aWRlbnQgPT0gdW5kZWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFB1bmRlZih5eWx2
YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVycm9yQXRv
bSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOworICAgICAgICB9
IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgeworICAgICAgICAg
ICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlzVmVyc2lvbiA9
IDE7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0
b20pIHsKKyAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0b3JlU3RyKCJJbnZhbGlkIERpcmVjdGl2ZSIpOwor
ICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2Nf
aWRlbnQpKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgIFJlc2V0VFN0cmluZygp
OworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nICYmIHRva2VuICE9
IDAgJiYgdG9rZW4gIT0gRU9GKSB7CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9CisgICAgICAgIAorICAgIGNwcC0+cGFz
dEZpcnN0U3RhdGVtZW50ID0gMTsKKworICAgIHJldHVybiB0b2tlbjsKK30gLy8gcmVhZENQUGxp
bmUKKwordm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKKyAgICBEZWxldGVUb2tlblN0
cmVhbShzLT5ib2R5KTsKK30KKwordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpu
YW1lLCBpbnQgdmFsdWUpIHsKKyAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07CisgICAgU3lt
Ym9sICpzeW1ib2wgPSBOVUxMOworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezB9OworICAgIHl5
c3R5cGVwcCB2YWwgPSB7MH07CisgICAgaW50IGF0b20gPSAwOworCisgICAgbWFjcm8uYm9keSA9
IE5ld1Rva2VuU3RyZWFtKG5hbWUsIG1hY3Jvcy0+cG9vbCk7CisgICAgdmFsLnNjX2ludCA9IHZh
bHVlOworICAgIHNwcmludGYodmFsLnN5bWJvbF9uYW1lLCAiJWQiLCB2YWx1ZSk7CisgICAgUmVj
b3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKKyAgICBhdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CisgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZs
b2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKKyAgICBzeW1ib2wtPmRldGFpbHMubWFj
ID0gbWFjcm87Cit9CisKK3N0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMg
KmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7IH0KKworc3RhdGljIHZvaWQgUHVz
aEVvZlNyYygpIHsKKyAgICBJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKElucHV0U3JjKSk7
CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoSW5wdXRTcmMpKTsKKyAgICBpbi0+c2NhbiA9IGVv
Zl9zY2FuOworICAgIGluLT5nZXRjaCA9IGVvZl9zY2FuOworICAgIGluLT51bmdldGNoID0gbm9v
cDsKKyAgICBpbi0+cHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIGNwcC0+Y3VycmVudElu
cHV0ID0gaW47Cit9CisKK3N0YXRpYyB2b2lkIFBvcEVvZlNyYygpIHsKKyAgICBpZiAoY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4gPT0gZW9mX3NjYW4pIHsKKyAgICAgICAgSW5wdXRTcmMgKmluID0g
Y3BwLT5jdXJyZW50SW5wdXQ7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPnByZXY7
CisgICAgICAgIGZyZWUoaW4pOworICAgIH0KK30KKworc3RhdGljIFRva2VuU3RyZWFtICpQcmVz
Y2FuTWFjcm9BcmcoVG9rZW5TdHJlYW0gKmEsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAg
aW50IHRva2VuOworICAgIFRva2VuU3RyZWFtICpuOworICAgIFJld2luZFRva2VuU3RyZWFtKGEp
OworICAgIGRvIHsKKyAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4oYSwgeXlsdmFscHApOworICAg
ICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTG9va1VwU3ltYm9sKG1hY3Jvcywg
eXlsdmFscHAtPnNjX2lkZW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0gd2hpbGUgKHRv
a2VuID4gMCk7CisgICAgaWYgKHRva2VuIDw9IDApIHJldHVybiBhOworICAgIG4gPSBOZXdUb2tl
blN0cmVhbSgibWFjcm8gYXJnIiwgMCk7CisgICAgUHVzaEVvZlNyYygpOworICAgIFJlYWRGcm9t
VG9rZW5TdHJlYW0oYSwgMCwgMCk7CisgICAgd2hpbGUgKCh0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCkpID4gMCkgeworICAgICAgICBp
ZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAtPnNjX2lk
ZW50LCB5eWx2YWxwcCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVjb3JkVG9r
ZW4obiwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICB9CisgICAgUG9wRW9mU3JjKCk7CisgICAgRGVs
ZXRlVG9rZW5TdHJlYW0oYSk7CisgICAgcmV0dXJuIG47Cit9IC8vIFByZXNjYW5NYWNyb0FyZwor
Cit0eXBlZGVmIHN0cnVjdCBNYWNyb0lucHV0U3JjIHsKKyAgICBJbnB1dFNyYyAgICBiYXNlOwor
ICAgIE1hY3JvU3ltYm9sICptYWM7CisgICAgVG9rZW5TdHJlYW0gKiphcmdzOworfSBNYWNyb0lu
cHV0U3JjOworCisvKiBtYWNyb19zY2FuIC0tLQorKiogcmV0dXJuIHRoZSBuZXh0IHRva2VuIGZv
ciBhIG1hY3JvIGV4cGFuaW9uLCBoYW5kbGluZyBtYWNybyBhcmdzIAorKi8KK3N0YXRpYyBpbnQg
bWFjcm9fc2NhbihNYWNyb0lucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAg
ICBpbnQgaTsKKyAgICBpbnQgdG9rZW4gPSBSZWFkVG9rZW4oaW4tPm1hYy0+Ym9keSwgeXlsdmFs
cHApOworICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBmb3IgKGkg
PSBpbi0+bWFjLT5hcmdjLTE7IGk+PTA7IGktLSkKKyAgICAgICAgICAgIGlmIChpbi0+bWFjLT5h
cmdzW2ldID09IHl5bHZhbHBwLT5zY19pZGVudCkgYnJlYWs7CisgICAgICAgIGlmIChpID49IDAp
IHsKKyAgICAgICAgICAgIFJlYWRGcm9tVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0sIHl5bHZhbHBw
LT5zY19pZGVudCwgMCk7CisgICAgICAgICAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAodG9rZW4gPiAwKSByZXR1cm4gdG9rZW47CisgICAgaW4tPm1hYy0+YnVzeSA9IDA7CisgICAg
Y3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OworICAgIGlmIChpbi0+YXJncykgewor
ICAgICAgICBmb3IgKGk9aW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCisgICAgICAgICAgICBE
ZWxldGVUb2tlblN0cmVhbShpbi0+YXJnc1tpXSk7CisgICAgICAgIGZyZWUoaW4tPmFyZ3MpOwor
ICAgIH0KKyAgICBmcmVlKGluKTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKK30gLy8gbWFjcm9fc2NhbgorCisvKiBNYWNy
b0V4cGFuZAorKiogY2hlY2sgYW4gaWRlbnRpZmllciAoYXRvbSkgdG8gc2VlIGlmIGl0IGEgbWFj
cm8gdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuCisqKiBJZiBpdCBpcywgcHVzaCBhbiBJbnB1dFNy
YyB0aGF0IHdpbGwgcHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgZXhwYW5zaW9uCisqKiBhbmQgcmV0
dXJuIFRSVUUuICBJZiBub3QsIHJldHVybiBGQUxTRS4KKyovCisKK2ludCBNYWNyb0V4cGFuZChp
bnQgYXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgU3ltYm9sICAgICAgICAgICAg
ICAqc3ltID0gTG9va1VwU3ltYm9sKG1hY3JvcywgYXRvbSk7CisgICAgTWFjcm9JbnB1dFNyYyAg
ICAgICAqaW47CisgICAgaW50IGksaiwgdG9rZW4sIGRlcHRoPTA7CisgICAgY29uc3QgY2hhciAq
bWVzc2FnZTsKKwlpZiAoYXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKKyAgICAgICAgeXlsdmFscHAt
PnNjX2ludCA9IEdldExpbmVOdW1iZXIoKTsKKyAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBf
SU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlm
IChhdG9tID09IF9fRklMRV9fQXRvbSkgeworICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0
U3RyaW5nTnVtYmVyKCk7CisgICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIl
ZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5U
LCB5eWx2YWxwcCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwlpZiAoYXRvbSA9PSBfX1ZF
UlNJT05fX0F0b20pIHsKKyAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxFU1NM
X1ZFUlNJT05fU1RSSU5HKTsKKyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2koeXlsdmFs
cHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5
bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICghc3ltIHx8IHN5bS0+
ZGV0YWlscy5tYWMudW5kZWYpIHJldHVybiAwOworICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmJ1
c3kpIHJldHVybiAwOyAgICAgICAgLy8gbm8gcmVjdXJzaXZlIGV4cGFuc2lvbnMKKyAgICBpbiA9
IG1hbGxvYyhzaXplb2YoKmluKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoKmluKSk7Cisg
ICAgaW4tPmJhc2Uuc2NhbiA9ICh2b2lkICopbWFjcm9fc2NhbjsKKyAgICBpbi0+YmFzZS5saW5l
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgaW4tPmJhc2UubmFtZSA9IGNwcC0+Y3Vy
cmVudElucHV0LT5uYW1lOworICAgIGluLT5tYWMgPSAmc3ltLT5kZXRhaWxzLm1hYzsKKyAgICBp
ZiAoc3ltLT5kZXRhaWxzLm1hYy5hcmdzKSB7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJaWYgKHRva2VuICE9
ICcoJykgeworICAgICAgICAgICAgVW5nZXRUb2tlbih0b2tlbiwgeXlsdmFscHApOworICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gYXRvbTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIGluLT5hcmdzID0gbWFsbG9jKGluLT5tYWMtPmFyZ2MgKiBzaXpl
b2YoVG9rZW5TdHJlYW0gKikpOworICAgICAgICBmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBp
KyspCisgICAgICAgICAgICBpbi0+YXJnc1tpXSA9IE5ld1Rva2VuU3RyZWFtKCJtYWNybyBhcmci
LCAwKTsKKwkJaT0wO2o9MDsKKyAgICAgICAgZG97CisgICAgICAgICAgICBkZXB0aCA9IDA7CisJ
CQl3aGlsZSgxKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8g
Iik7CisgICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUs
YXRvbSkpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09MCkg
JiYgKHRva2VuIT0nKScpKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCAm
JiAodG9rZW4gPT0gJywnIHx8IHRva2VuID09ICcpJykpIGJyZWFrOworICAgICAgICAgICAgICAg
IGlmICh0b2tlbiA9PSAnKCcpIGRlcHRoKys7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09
ICcpJykgZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBSZWNvcmRUb2tlbihpbi0+YXJnc1tpXSwg
dG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBqPTE7CisJCQl9CisgICAgICAgICAg
ICBpZiAodG9rZW4gPT0gJyknKSB7CisgICAgICAgICAgICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9
PTEpICYmaj09MCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
aSsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aSsrOworCQl9d2hpbGUoaSA8IGluLT5tYWMtPmFyZ2MpOworCisgICAgICAgIGlmIChpIDwgaW4t
Pm1hYy0+YXJnYykgeworICAgICAgICAgICAgU3RvcmVTdHIoIlRvbyBmZXcgYXJncyBpbiBNYWNy
byAiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkp
OworICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAg
ICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gJyknKSB7CisgICAgICAgICAgICBkZXB0aD0wOworCQkJ
d2hpbGUgKHRva2VuID49IDAgJiYgKGRlcHRoID4gMCB8fCB0b2tlbiAhPSAnKScpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgZGVwdGgtLTsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKKyAgICAgICAg
ICAgIH0KKwkJCQorICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKKyAgICAgICAgICAgICAg
ICBTdG9yZVN0cigiRU9GIGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdl
dFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0
U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7
CisgICAgICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdG9yZVN0cigiVG9vIG1hbnkgYXJncyBp
biBNYWNybyAiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUs
YXRvbSkpOworICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7
CisJCX0KKwkJZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAgICAgICAgICBp
bi0+YXJnc1tpXSA9IFByZXNjYW5NYWNyb0FyZyhpbi0+YXJnc1tpXSwgeXlsdmFscHApOworICAg
ICAgICB9CisgICAgfQorI2lmIDAKKyAgICBwcmludGYoIiAgPCVzOiVkPmZvdW5kIG1hY3JvICVz
XG4iLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgbG9jLmZpbGUpLAorICAgICAgICAgICBsb2MubGlu
ZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0b20pKTsKKyAgICBmb3IgKGk9MDsgaTxpbi0+bWFj
LT5hcmdjOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCJcdGFyZyAlcyA9ICciLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgaW4tPm1hYy0+YXJnc1tpXSkpOworICAgICAgICBEdW1wVG9rZW5TdHJlYW0o
c3Rkb3V0LCBpbi0+YXJnc1tpXSk7CisgICAgICAgIHByaW50ZigiJ1xuIik7CisgICAgfQorI2Vu
ZGlmCisJLypyZXRhaW4gdGhlIGlucHV0IHNvdXJjZSovCisgICAgaW4tPmJhc2UucHJldiA9IGNw
cC0+Y3VycmVudElucHV0OworICAgIHN5bS0+ZGV0YWlscy5tYWMuYnVzeSA9IDE7CisgICAgUmV3
aW5kVG9rZW5TdHJlYW0oc3ltLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9ICZpbi0+YmFzZTsKKyAgICByZXR1cm4gMTsKK30gLy8gTWFjcm9FeHBhbmQKKworaW50
IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKQoreworICAgIGlmKGNwcC0+ZWxzZWRlcHRoW2Nw
cC0+ZWxzZXRyYWNrZXJdPT0wKXsKKwkgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJd
PTE7CisgICAgICByZXR1cm4gMTsgICAgICAgICAgCisgICAgfQorICAgIHJldHVybiAwOworfQor
CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
K0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJl
LgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGNwcC5o
CisvLworCisjaWYgIWRlZmluZWQoX19DUFBfSCkKKyNkZWZpbmUgX19DUFBfSCAxCisKKyNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3Rva2Vucy5oIgorCitpbnQgSW5pdENQUCh2b2lkKTsKK2ludCBGaW5hbENQ
UCh2b2lkKTsKK2ludCAgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApOworaW50IE1h
Y3JvRXhwYW5kKGludCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQgQ2hrQ29ycmVj
dEVsc2VOZXN0aW5nKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCBNYWNyb1N5bWJvbCB7CisgICAg
aW50IGFyZ2M7CisgICAgaW50ICphcmdzOworICAgIFRva2VuU3RyZWFtICpib2R5OworICAgIHVu
c2lnbmVkIGJ1c3k6MTsKKyAgICB1bnNpZ25lZCB1bmRlZjoxOworfSBNYWNyb1N5bWJvbDsKKwor
dm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKik7Cit2b2lkIFByZWRlZmluZUludE1hY3JvKGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7CisKK3ZvaWQgIENQUERlYnVnTG9nTXNnKGNvbnN0
IGNoYXIgKm1zZyk7ICAgICAgLy8gUHJpbnRzIGluZm9ybWF0aW9uIGludG8gZGVidWcgbG9nCit2
b2lkICBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciopOyAgICAgICAgIC8vIFN0b3JlIGNwcCBF
cnIgTXNnIGludG8gU2guSW5mby5Mb2cKK3ZvaWQgIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZvIGxvZwordm9p
ZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAvLyAjcHJhZ21h
IGRpcmVjdGl2ZSBjb250YWluZXIuCit2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7ICAgICAgICAg
ICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCit2b2lkICBDUFBFcnJvclRv
SW5mb0xvZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8g
U2guSW5mby5sb2cgICAuCit2b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lkICBTZXRMaW5l
TnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAordm9p
ZCAgU2V0U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51
bWJlci4gICAgCitpbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKK2ludCAgIEdldFN0cmluZ051bWJlcih2
b2lkKTsgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAor
Y29uc3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCk7ICAgICAgICAgICAvLyBDb252ZXJ0IFRT
dHJpbmcgdG8gU3RyaW5nLiAgCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBj
aGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CitpbnQgICBGcmVlQ1BQKHZvaWQp
OworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fQ1BQX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAor
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0lu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
K05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitU
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAor
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3Bwc3RydWN0LmMK
Ky8vCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCitDUFBTdHJ1Y3QgICpjcHAg
ICAgICA9IE5VTEw7CitzdGF0aWMgaW50ICByZWZDb3VudCA9IDA7CisKK2ludCBJbml0UHJlcHJv
Y2Vzc29yKHZvaWQpOworaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpOworaW50IEZyZWVDUFBT
dHJ1Y3Qodm9pZCk7CitpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisKKy8qCisgKiBJ
bml0Q1BQU3RydWN0KCkgLSBJbml0aWxhaXplIHRoZSBDUFAgc3RydWN0dXJlLgorICoKKyAqLwor
CitpbnQgSW5pdENQUFN0cnVjdCh2b2lkKQoreworICAgIGludCBsZW47CisgICAgY2hhciAqcDsK
KworICAgIGNwcCA9IChDUFBTdHJ1Y3QgKikgbWFsbG9jKHNpemVvZihDUFBTdHJ1Y3QpKTsKKyAg
ICBpZiAoY3BwID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVmQ291bnQrKzsK
KworICAgIC8vIEluaXRpYWxpemUgcHVibGljIG1lbWJlcnM6CisgICAgY3BwLT5wTGFzdFNvdXJj
ZUxvYyA9ICZjcHAtPmxhc3RTb3VyY2VMb2M7CisgICAgCisJcCA9IChjaGFyICopICZjcHAtPm9w
dGlvbnM7CisgICAgbGVuID0gc2l6ZW9mKGNwcC0+b3B0aW9ucyk7CisgICAgd2hpbGUgKC0tbGVu
ID49IDApCisgICAgICAgIHBbbGVuXSA9IDA7CisgICAgIAorICAgIFJlc2V0UHJlcHJvY2Vzc29y
KCk7CisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRDUFBTdHJ1Y3QKKworaW50IFJlc2V0UHJlcHJv
Y2Vzc29yKHZvaWQpCit7CisgICAgLy8gSW5pdGlhbGl6ZSBwcml2YXRlIG1lbWJlcnM6CisKKyAg
ICBjcHAtPmxhc3RTb3VyY2VMb2MuZmlsZSA9IDA7CisgICAgY3BwLT5sYXN0U291cmNlTG9jLmxp
bmUgPSAwOworCWNwcC0+cEM9MDsKKyAgICBjcHAtPkNvbXBpbGVFcnJvcj0wOyAKKwljcHAtPmlm
ZGVwdGg9MDsKKyAgICBmb3IoY3BwLT5lbHNldHJhY2tlcj0wOyBjcHAtPmVsc2V0cmFja2VyPDY0
OyBjcHAtPmVsc2V0cmFja2VyKyspCisJCWNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJd
PTA7IAorCWNwcC0+ZWxzZXRyYWNrZXI9MDsKKyAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDA7
CisgICAgcmV0dXJuIDE7Cit9CisKKy8vSW50aWFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KKwor
aW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCkKK3sKKyAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1
ZQorICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKKyAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3Qo
KTsKKyAgICAgICAgICAgIEluaXRDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNwcC0+b3B0aW9u
cy5RdWlldCA9IDE7CisgICAgICAgICAgICBjcHAtPm9wdGlvbnMucHJvZmlsZVN0cmluZyA9ICJn
ZW5lcmljIjsKKyAgICAgICAgICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUsIDApKQorICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgaWYgKCFJbml0U2Nhbm5lcihjcHAp
KQorCSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICMgIGVuZGlmCisgIHJldHVybiAwOyAK
K30KKworLy9GcmVlQ1BQU3RydWN0KCkgLSBGcmVlIHRoZSBDUFAgc3RydWN0dXJlLgorCitpbnQg
RnJlZUNQUFN0cnVjdCh2b2lkKQoreworICAgIGlmIChyZWZDb3VudCkKKyAgICB7CisgICAgICAg
ZnJlZShjcHApOworICAgICAgIHJlZkNvdW50LS07CisgICAgfQorICAgIAorICAgIHJldHVybiAx
OworfQorCisvL0ZpbmFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KKworaW50IEZpbmFsaXplUHJl
cHJvY2Vzc29yKHZvaWQpCit7CisgICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKKyAgICAgICAg
IyAgaWZkZWYgQ1BQX1NUVUZGCisgICAgICAgICAgICBGcmVlQXRvbVRhYmxlKGF0YWJsZSk7Cisg
ICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7CisgICAgICAgICAgICBGcmVlU2Nhbm5lcigpOwor
ICAgICAgICMgIGVuZGlmCisgIHJldHVybiAwOyAKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8gRW5kIG9mIGNwcHN0cnVjdC5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
K2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJ
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
CitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitl
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAor
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
K1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKyNpbmNsdWRlIDxzdGRk
ZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRl
ZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCisKKy8vIGRlZmF1bHQgYWxpZ25tZW50IGFuZCBj
aHVua3NpemUsIGlmIGNhbGxlZCB3aXRoIDAgYXJndW1lbnRzCisjZGVmaW5lIENIVU5LU0laRSAg
ICAgICAoNjQqMTAyNCkKKyNkZWZpbmUgQUxJR04gICAgICAgICAgIDgKKworLy8gd2UgbmVlZCB0
byBjYWxsIHRoZSBgcmVhbCcgbWFsbG9jIGFuZCBmcmVlLCBub3Qgb3VyIHJlcGxhY2VtZW50cwor
I3VuZGVmIG1hbGxvYworI3VuZGVmIGZyZWUKKworc3RydWN0IGNodW5rIHsKKyAgICBzdHJ1Y3Qg
Y2h1bmsgICAgICAgICpuZXh0OworfTsKKworc3RydWN0IGNsZWFudXAgeworICAgIHN0cnVjdCBj
bGVhbnVwICAgICAgKm5leHQ7CisgICAgdm9pZCAgICAgICAgICAgICAgICAoKmZuKSh2b2lkICop
OworICAgIHZvaWQgICAgICAgICAgICAgICAgKmFyZzsKK307CisKK3N0cnVjdCBNZW1vcnlQb29s
X3JlYyB7CisgICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKKyAgICB1aW50cHRyX3QgICAg
ICAgICAgIGZyZWUsIGVuZDsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGNodW5rc2l6ZTsKKyAg
ICB1aW50cHRyX3QgICAgICAgICAgIGFsaWdubWFzazsKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAg
ICpjbGVhbnVwOworfTsKKworTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5r
c2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQoreworICAgIE1lbW9yeVBvb2wgICpwb29sOworCisg
ICAgaWYgKGFsaWduID09IDApIGFsaWduID0gQUxJR047CisgICAgaWYgKGNodW5rc2l6ZSA9PSAw
KSBjaHVua3NpemUgPSBDSFVOS1NJWkU7CisgICAgaWYgKGFsaWduICYgKGFsaWduLTEpKSByZXR1
cm4gMDsKKyAgICBpZiAoY2h1bmtzaXplIDwgc2l6ZW9mKE1lbW9yeVBvb2wpKSByZXR1cm4gMDsK
KyAgICBpZiAoY2h1bmtzaXplICYgKGFsaWduLTEpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwb29s
ID0gbWFsbG9jKGNodW5rc2l6ZSkpKSByZXR1cm4gMDsKKyAgICBwb29sLT5uZXh0ID0gMDsKKyAg
ICBwb29sLT5jaHVua3NpemUgPSBjaHVua3NpemU7CisgICAgcG9vbC0+YWxpZ25tYXNrID0gKHVp
bnRwdHJfdCkoYWxpZ24pLTE7ICAKKyAgICBwb29sLT5mcmVlID0gKCh1aW50cHRyX3QpKHBvb2wg
KyAxKSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgIHBvb2wtPmVu
ZCA9ICh1aW50cHRyX3QpcG9vbCArIGNodW5rc2l6ZTsKKyAgICBwb29sLT5jbGVhbnVwID0gMDsK
KyAgICByZXR1cm4gcG9vbDsKK30KKwordm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqcG9v
bCkKK3sKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpjbGVhbnVwOworICAgIHN0cnVjdCBjaHVu
ayAgICAgICAgKnAsICpuZXh0OworCisgICAgZm9yIChjbGVhbnVwID0gcG9vbC0+Y2xlYW51cDsg
Y2xlYW51cDsgY2xlYW51cCA9IGNsZWFudXAtPm5leHQpIHsKKyAgICAgICAgY2xlYW51cC0+Zm4o
Y2xlYW51cC0+YXJnKTsKKyAgICB9CisgICAgZm9yIChwID0gKHN0cnVjdCBjaHVuayAqKXBvb2w7
IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAgICBmcmVlKHAp
OworICAgIH0KK30KKwordm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnBvb2wsIHNpemVfdCBz
aXplKQoreworICAgIHN0cnVjdCBjaHVuayAqY2g7CisgICAgdm9pZCAqcnYgPSAodm9pZCAqKXBv
b2wtPmZyZWU7CisgICAgc2l6ZSA9IChzaXplICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5h
bGlnbm1hc2s7CisgICAgaWYgKHNpemUgPD0gMCkgc2l6ZSA9IHBvb2wtPmFsaWdubWFzazsKKyAg
ICBwb29sLT5mcmVlICs9IHNpemU7CisgICAgaWYgKHBvb2wtPmZyZWUgPiBwb29sLT5lbmQgfHwg
cG9vbC0+ZnJlZSA8ICh1aW50cHRyX3QpcnYpIHsKKyAgICAgICAgc2l6ZV90IG1pbnJlcSA9IChz
aXplICsgc2l6ZW9mKHN0cnVjdCBjaHVuaykgKyBwb29sLT5hbGlnbm1hc2spCisgICAgICAgICAg
ICAgICAgICAgICAgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgICAgICBwb29sLT5mcmVlID0gKHVp
bnRwdHJfdClydjsKKyAgICAgICAgaWYgKG1pbnJlcSA+PSBwb29sLT5jaHVua3NpemUpIHsKKyAg
ICAgICAgICAgIC8vIHJlcXVlc3Qgc2l6ZSBpcyB0b28gYmlnIGZvciB0aGUgY2h1bmtzaXplLCBz
byBhbGxvY2F0ZSBpdCBhcworICAgICAgICAgICAgLy8gYSBzaW5nbGUgY2h1bmsgb2YgdGhlIHJp
Z2h0IHNpemUKKyAgICAgICAgICAgIGNoID0gbWFsbG9jKG1pbnJlcSk7CisgICAgICAgICAgICBp
ZiAoIWNoKSByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoID0gbWFs
bG9jKHBvb2wtPmNodW5rc2l6ZSk7CisgICAgICAgICAgICBpZiAoIWNoKSByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHBvb2wtPmZyZWUgPSAodWludHB0cl90KWNoICsgbWlucmVxOworICAgICAgICAg
ICAgcG9vbC0+ZW5kID0gKHVpbnRwdHJfdCljaCArIHBvb2wtPmNodW5rc2l6ZTsKKyAgICAgICAg
fQorICAgICAgICBjaC0+bmV4dCA9IHBvb2wtPm5leHQ7CisgICAgICAgIHBvb2wtPm5leHQgPSBj
aDsKKyAgICAgICAgcnYgPSAodm9pZCAqKSgoKHVpbnRwdHJfdCkoY2grMSkgKyBwb29sLT5hbGln
bm1hc2spICYgfnBvb2wtPmFsaWdubWFzayk7CisgICAgfQorICAgIHJldHVybiBydjsKK30KKwor
aW50IG1lbV9BZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnBvb2wsIHZvaWQgKCpmbikodm9pZCAqKSwg
dm9pZCAqYXJnKSB7CisgICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CisKKyAgICBwb29sLT5m
cmVlID0gKHBvb2wtPmZyZWUgKyBzaXplb2Yodm9pZCAqKSAtIDEpICYgfihzaXplb2Yodm9pZCAq
KS0xKTsKKyAgICBjbGVhbnVwID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihzdHJ1Y3QgY2xlYW51
cCkpOworICAgIGlmICghY2xlYW51cCkgcmV0dXJuIC0xOworICAgIGNsZWFudXAtPm5leHQgPSBw
b29sLT5jbGVhbnVwOworICAgIGNsZWFudXAtPmZuID0gZm47CisgICAgY2xlYW51cC0+YXJnID0g
YXJnOworICAgIHBvb2wtPmNsZWFudXAgPSBjbGVhbnVwOworICAgIHJldHVybiAwOworfQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdh
cmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworI2lmbmRl
ZiBfX01FTU9SWV9ICisjZGVmaW5lIF9fTUVNT1JZX0gKKwordHlwZWRlZiBzdHJ1Y3QgTWVtb3J5
UG9vbF9yZWMgTWVtb3J5UG9vbDsKKworZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29s
KHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CitleHRlcm4gdm9pZCBtZW1f
RnJlZVBvb2woTWVtb3J5UG9vbCAqKTsKK2V4dGVybiB2b2lkICptZW1fQWxsb2MoTWVtb3J5UG9v
bCAqcCwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKm1lbV9SZWFsbG9jKE1lbW9yeVBvb2wg
KnAsIHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBuZXdzaXplKTsKK2V4dGVybiBp
bnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lk
ICphcmcpOworCisjZW5kaWYgLyogX19NRU1PUllfSCAqLwpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAy
MDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikg
c3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0
aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdh
cmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90
IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFs
LCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRo
aXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8g
dXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3
YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5h
cnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBT
b2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEs
IHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBh
bGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIg
dGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQor
Q29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVk
IGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3Ig
aW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QK
K2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlv
dXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJ
QSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQg
aGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBB
TiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VN
RU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBP
UgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBX
SVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJM
RSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQ
Uk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1Ig
QVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklD
QVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZF
UiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJ
RgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQklTT05fUEFSU0VSX0gKKyMg
ZGVmaW5lIEJJU09OX1BBUlNFUl9ICisKKyNpZm5kZWYgeXlzdHlwZXBwCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgaW50ICAgIHNjX2ludDsKKyAgICBmbG9hdCAgc2NfZnZhbDsKKyAgICBpbnQgICAg
c2NfaWRlbnQ7CisJY2hhciAgIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4rMV07Cit9
IHl5c3R5cGVwcDsKKworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorIyBk
ZWZpbmUJQ1BQX0FORF9PUAkgICAgICAgIDI1NworIyBkZWZpbmUJQ1BQX1NVQl9BU1NJR04JICAg
IDI1OQorIyBkZWZpbmUJQ1BQX01PRF9BU1NJR04JICAgIDI2MAorIyBkZWZpbmUJQ1BQX0FERF9B
U1NJR04JMjYxCisjIGRlZmluZQlDUFBfRElWX0FTU0lHTgkyNjIKKyMgZGVmaW5lCUNQUF9NVUxf
QVNTSUdOCTI2MworIyBkZWZpbmUJQ1BQX0VRX09QCSAgICAgICAgMjY0CisjIGRlZmluZSAgICBD
UFBfWE9SX09QICAgICAgICAgMjY1IAorIyBkZWZpbmUJRVJST1JfU1kJICAgIDI2NgorIyBkZWZp
bmUJQ1BQX0ZMT0FUQ09OU1RBTlQJMjY3CisjIGRlZmluZQlDUFBfR0VfT1AJICAgICAgICAyNjgK
KyMgZGVmaW5lCUNQUF9SSUdIVF9PUCAgICAgICAgMjY5CisjIGRlZmluZQlDUFBfSURFTlRJRklF
UgkgICAgMjcwCisjIGRlZmluZQlDUFBfSU5UQ09OU1RBTlQJICAgIDI3MQorIyBkZWZpbmUJQ1BQ
X0xFX09QCSAgICAgICAgMjcyCisjIGRlZmluZQlDUFBfTEVGVF9PUAkgICAgICAgIDI3MworIyBk
ZWZpbmUJQ1BQX0RFQ19PUAkyNzQKKyMgZGVmaW5lCUNQUF9ORV9PUAkgICAgICAgIDI3NQorIyBk
ZWZpbmUJQ1BQX09SX09QCSAgICAgICAgMjc2CisjIGRlZmluZQlDUFBfSU5DX09QCSAgICAyNzcK
KyMgZGVmaW5lCUNQUF9TVFJDT05TVEFOVAkgICAgMjc4CisjIGRlZmluZQlDUFBfVFlQRUlERU5U
SUZJRVIJMjc5CisKKyMgZGVmaW5lCUZJUlNUX1VTRVJfVE9LRU5fU1kJMjg5CisKKyMgZGVmaW5l
CUNQUF9SSUdIVF9BU1NJR04JICAgIDI4MAorIyBkZWZpbmUJQ1BQX0xFRlRfQVNTSUdOCSAgICAy
ODEKKyMgZGVmaW5lCUNQUF9BTkRfQVNTSUdOCTI4MgorIyBkZWZpbmUJQ1BQX09SX0FTU0lHTiAg
CTI4MworIyBkZWZpbmUJQ1BQX1hPUl9BU1NJR04JMjg0CisjIGRlZmluZQlDUFBfTEVGVF9CUkFD
S0VUCTI4NQorIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNLRVQJMjg2CisjIGRlZmluZQlDUFBfTEVG
VF9CUkFDRQkyODcKKyMgZGVmaW5lCUNQUF9SSUdIVF9CUkFDRQkyODgKKworI2VuZGlmIC8qIG5v
dCBCSVNPTl9QQVJTRVJfSCAqLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcmVwcm9jZXNzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAy
LCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3Vw
cGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3Jl
ZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9u
LCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUK
K2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFn
cmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5
IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRp
b24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBu
b24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMg
b3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNl
LCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJl
LCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkK
K2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0
d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRo
aXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwg
c3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhl
IG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29y
cG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGlu
IHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1w
bGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xp
bWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIg
ZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBT
b2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVy
ZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAi
QVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFU
SU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5U
LCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgor
SVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRI
IE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBG
T1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9G
SVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
CitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJ
U0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJ
T04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBD
QVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgor
TlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgorZXh0ZXJuIENQUFN0cnVjdCAqY3BwOworaW50IEluaXRDUFBTdHJ1
Y3Qodm9pZCk7CitpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOworaW50IEluaXRBdG9t
VGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOworaW50IFNjYW5Gcm9tU3RyaW5n
KGNoYXIgKnMpOworY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQg
YXRvbSk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5j
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
CisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0
byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVk
aXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFu
Y2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1z
LCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlz
IE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRl
cm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNl
LCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3
YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBh
bmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9k
aWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0
IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFp
biB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9s
bG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMg
b2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNl
cnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBT
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5W
SURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhl
ciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkg
TlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCBy
aWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3Ig
Ynkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29y
cG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJ
QSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU
CitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S
IElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9O
IEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKwor
SU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS
RUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQg
T0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElP
TiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5E
RVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJ
Q1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvLworLy8gc2Nhbm5lci5jCisvLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor
I2lmIDAKKyAgICAjaW5jbHVkZSA8aWVlZWZwLmg+CisgICAgI2Vsc2UKKyAgICAjZGVmaW5lIGlz
aW5mZih4KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBc
CisgICAgICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0w
MDAwMDAwMDAwTCkpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKKworCit0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CisgICAgSW5w
dXRTcmMgYmFzZTsKKyAgICBjaGFyICpwOworfSBTdHJpbmdJbnB1dFNyYzsKKworc3RhdGljIGlu
dCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIHJl
dHVybiBFT0Y7Cit9IC8vIGVvZl9zY2FuCisKK3N0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmlu
LCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7fQorCitzdGF0aWMgSW5wdXRTcmMgZW9m
X2lucHV0c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsKKworc3RhdGlj
IGludCBieXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOworCisjZGVm
aW5lIEVPTF9TWSAnXG4nCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgREJH
X0JSRUFLUE9JTlQoKSBfX2FzbSBpbnQgMworI2VsaWYgZGVmaW5lZChfTV9BTUQ2NCkKKyAgICAj
ZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgYXNzZXJ0KCEiRGJnX0JyZWFrcG9pbnQiKTsKKyNlbHNl
CisgICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX01T
Q19WRVIpICYmICFkZWZpbmVkKF9NX0FNRDY0KQorICAgIF9faW50NjQgUkRUU0MgKCB2b2lkICkg
eworCisgICAgICAgIF9faW50NjQgdjsKKyAgICAKKyAgICAgICAgX19hc20gX19lbWl0IDB4MGYK
KyAgICAgICAgX19hc20gX19lbWl0IDB4MzEKKyAgICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2
LCBlYXgKKyAgICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2KzQsIGVkeAorICAgIAorICAgICAg
ICByZXR1cm4gdjsKKyAgICB9CisjZW5kaWYKKworCitpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0
ICpjcHApCit7CisgICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRoZSBDUFAgbGlu
ZSBzY2FubmVyOgorICAgIGlmICghSW5pdENQUCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGNwcC0+bW9zdFJlY2VudFRva2VuID0gMDsKKyAgICBjcHAtPnRva2VuTG9jID0gJmNwcC0+bHRv
a2VuTG9jOworCisgICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IDA7CisgICAgY3BwLT5sdG9rZW5M
b2MubGluZSA9IDA7CisKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZlb2ZfaW5wdXRzcmM7Cisg
ICAgY3BwLT5wcmV2aW91c190b2tlbiA9ICdcbic7CisgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1l
bnQgPSAwOworCisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRTY2FubmVyCisKK2ludCBGcmVlU2Nh
bm5lcih2b2lkKQoreworICAgIHJldHVybiAoRnJlZUNQUCgpKTsKK30KKworLyoKKyAqIHN0cl9n
ZXRjaCgpCisgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBzdHJpbmdzLgor
ICogcmV0dXJucyB0aGUgbmV4dC1jaGFyIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KKyAqIHJldHVy
bnMgRU9GIHdoZW4gdGhlIGNvbXBsZXRlIHNoYWRlciBpcyBwYXJzZWQuCisgKi8KK3N0YXRpYyBp
bnQgc3RyX2dldGNoKFN0cmluZ0lucHV0U3JjICppbikKK3sKKwlmb3IoOzspeworCSAgIGlmICgq
aW4tPnApeworCSAgICAgIGlmICgqaW4tPnAgPT0gJ1xuJykgeworICAgICAgICAgICAgIGluLT5i
YXNlLmxpbmUrKzsKKyAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAgICAgICAgfQor
ICAgICAgICAgIHJldHVybiAqaW4tPnArKzsKKwkgICB9CisJICAgaWYoKysoY3BwLT5QYVdoaWNo
U3RyKSA8IGNwcC0+UGFBcmdjKXsKKwkJICBmcmVlKGluKTsKKwkJICBTZXRTdHJpbmdOdW1iZXIo
Y3BwLT5QYVdoaWNoU3RyKTsKKyAgICAJICBTZXRMaW5lTnVtYmVyKDEpOworCQkgIFNjYW5Gcm9t
U3RyaW5nKGNwcC0+UGFBcmd2W2NwcC0+UGFXaGljaFN0cl0pOworCQkgIGluPShTdHJpbmdJbnB1
dFNyYyopY3BwLT5jdXJyZW50SW5wdXQ7CisJICAgICAgY29udGludWU7ICAgICAgICAgICAgIAor
CSAgIH0KKwkgICBlbHNleworCSAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJl
djsKKwkgICAgICBjcHAtPlBhV2hpY2hTdHI9MDsKKyAgICAgICAgICBmcmVlKGluKTsKKyAgICAg
ICAgICByZXR1cm4gRU9GOworICAgICAgIH0gIAorCX0KK30gLy8gc3RyX2dldGNoCisKK3N0YXRp
YyB2b2lkIHN0cl91bmdldGNoKFN0cmluZ0lucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAg
KnR5cGUpIHsKKyAgICBpZiAoaW4tPnBbLTFdID09IGNoKWluLT5wLS07CisJZWxzZSB7CisJCSoo
aW4tPnApPSdcMCc7IC8vdGhpcyB3b3VsZCB0YWtlIGNhcmUgb2Ygc2hpZnRpbmcgdG8gdGhlIHBy
ZXZpb3VzIHN0cmluZy4KKwkgICAgY3BwLT5QYVdoaWNoU3RyLS07CisJfSAgCisJaWYgKGNoID09
ICdcbicpIHsKKyAgICAgICAgaW4tPmJhc2UubGluZS0tOworICAgICAgICBEZWNMaW5lTnVtYmVy
KCk7CisgICAgfQorfSAvLyBzdHJfdW5nZXRjaAorCitpbnQgU2NhbkZyb21TdHJpbmcoY2hhciAq
cykKK3sKKyAgICAKKwlTdHJpbmdJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFN0cmluZ0lu
cHV0U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKKwlp
bi0+cCA9IHM7CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGJ5
dGVfc2NhbjsKKyAgICBpbi0+YmFzZS5nZXRjaCA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5
cGVwcCAqKSlzdHJfZ2V0Y2g7CisgICAgaW4tPmJhc2UudW5nZXRjaCA9ICh2b2lkICgqKShJbnB1
dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKSlzdHJfdW5nZXRjaDsKKyAgICBpbi0+YmFzZS5wcmV2
ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7
CisKKyAgICByZXR1cm4gMTsKK30gLy8gU2NhbkZyb21TdHJpbmc7CisKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50czogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAq
IGxCdWlsZEZsb2F0VmFsdWUoKSAtIFF1aWNrIGFuZCBkaXJ0eSBjb252ZXJzaW9uIHRvIGZsb2F0
aW5nIHBvaW50LiAgU2luY2UgYWxsCisgKiAgICAgICAgIHdlIG5lZWQgaXMgc2luZ2xlIHByZWNp
c2lvbiB0aGlzIHNob3VsZCBiZSBxdWl0ZSBwcmVjaXNlLgorICovCisKK3N0YXRpYyBmbG9hdCBs
QnVpbGRGbG9hdFZhbHVlKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGV4cCkKK3sKKyAg
ICBkb3VibGUgdmFsLCBleHB2YWwsIHRlbjsKKyAgICBpbnQgaWksIGxsZW4sIGFic2V4cDsKKyAg
ICBmbG9hdCBydjsKKworICAgIHZhbCA9IDAuMDsKKyAgICBsbGVuID0gbGVuOworICAgIGZvciAo
aWkgPSAwOyBpaSA8IGxlbjsgaWkrKykKKyAgICAgICAgdmFsID0gdmFsKjEwLjAgKyAoc3RyW2lp
XSAtICcwJyk7CisgICAgaWYgKGV4cCAhPSAwKSB7CisgICAgICAgIGFic2V4cCA9IGV4cCA+IDAg
PyBleHAgOiAtZXhwOworICAgICAgICBleHB2YWwgPSAxLjBmOworICAgICAgICB0ZW4gPSAxMC4w
OworICAgICAgICB3aGlsZSAoYWJzZXhwKSB7CisgICAgICAgICAgICBpZiAoYWJzZXhwICYgMSkK
KyAgICAgICAgICAgICAgICBleHB2YWwgKj0gdGVuOworICAgICAgICAgICAgdGVuICo9IHRlbjsK
KyAgICAgICAgICAgIGFic2V4cCA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwID49
IDApIHsKKyAgICAgICAgICAgIHZhbCAqPSBleHB2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YWwgLz0gZXhwdmFsOworICAgICAgICB9CisgICAgfQorICAgIHJ2ID0gKGZsb2F0
KXZhbDsKKyAgICBpZiAoaXNpbmZmKHJ2KSkgeworCQlDUFBFcnJvclRvSW5mb0xvZygiIEVSUk9S
X19fRlBfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworfSAvLyBsQnVp
bGRGbG9hdFZhbHVlCisKKworLyoKKyAqIGxGbG9hdENvbnN0KCkgLSBTY2FuIGEgZmxvYXRpbmcg
cG9pbnQgY29uc3RhbnQuICBBc3N1bWVzIHRoYXQgdGhlIHNjYW5uZXIKKyAqICAgICAgICAgaGFz
IHNlZW4gYXQgbGVhc3Qgb25lIGRpZ2l0LCBmb2xsb3dlZCBieSBlaXRoZXIgYSBkZWNpbWFsICcu
JyBvciB0aGUKKyAqICAgICAgICAgbGV0dGVyICdlJy4KKyAqLworCitzdGF0aWMgaW50IGxGbG9h
dENvbnN0KGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
K3sKKyAgICBpbnQgSGFzRGVjaW1hbCwgZGVjbGVuLCBleHAsIEV4cFNpZ247CisgICAgaW50IHN0
cl9sZW47CisgICAgZmxvYXQgbHZhbDsKKyAgICAKKyAgICBIYXNEZWNpbWFsID0gMDsKKyAgICBk
ZWNsZW4gPSAwOworICAgIGV4cCA9IDA7CisJCisgICAgc3RyX2xlbj1sZW47CisgICAgaWYgKGNo
ID09ICcuJykgeworCQlzdHJbbGVuKytdPWNoOworICAgICAgICBIYXNEZWNpbWFsID0gMTsKKyAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAg
ICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAg
ZGVjbGVuKys7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0cltsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxl
bisrO3N0cl9sZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ggPSBj
cHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVS
Uk9SX19fRlBfQ09OU1RfVE9PX0xPTkciKTsKKyAgICAgICAgICAgICAgICBsZW4gPSAxLHN0cl9s
ZW49MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cG9uZW50
OgorCisgICAgaWYgKGNoID09ICdlJyB8fCBjaCA9PSAnRScpIHsKKyAgICAgICAgRXhwU2lnbiA9
IDE7CisJCXN0cltsZW4rK109Y2g7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmIChjaCA9PSAnKycp
IHsKKyAgICAgICAgICAgIHN0cltsZW4rK109Y2g7ICAKKwkJCWNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICBFeHBTaWduID0gLTE7CisJCQlzdHJbbGVuKytd
PWNoOworICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPj0gJzAnICYm
IGNoIDw9ICc5JykgeworICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScp
IHsKKyAgICAgICAgICAgICAgICBleHAgPSBleHAqMTAgKyBjaCAtICcwJzsKKwkJCQlzdHJbbGVu
KytdPWNoOworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FUlJPUl9JTl9FWFBP
TkVOVCIpOworICAgICAgICB9CisgICAgICAgIGV4cCAqPSBFeHBTaWduOworICAgIH0KKyAgICAg
IAorICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICBsdmFsID0gMC4wZjsKKwkJc3RyY3B5KHN0
ciwiMC4wIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyW2xlbl09J1wwJzsgICAgICAKKyAg
ICAgICAgbHZhbCA9IGxCdWlsZEZsb2F0VmFsdWUoc3RyLCBzdHJfbGVuLCBleHAgLSBkZWNsZW4p
OworICAgIH0KKyAgICAvLyBTdWZmaXg6CisgICAgCisgICAgeXlsdmFscHAtPnNjX2Z2YWwgPSBs
dmFsOworICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3RyKTsKKyAgICBjcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsgICAg
ICAgICAgICAKKyAgICByZXR1cm4gQ1BQX0ZMT0FUQ09OU1RBTlQ7Cit9IC8vIGxGbG9hdENvbnN0
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBOb3JtYWwgU2Nhbm5lciAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKyAgICAKK3N0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICppbiwgeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisgICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVf
TEVOICsgMV07CisgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CisgICAg
aW50IEFscmVhZHlDb21wbGFpbmVkOworICAgIGludCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7CisK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOworICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworCQkKKyAgICAgICAgd2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdc
cicpIHsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAxOworICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgfQorCQkKKyAgICAgICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IGNwcC0+Y3VycmVu
dElucHV0LT5uYW1lOworICAgICAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gY3BwLT5jdXJyZW50
SW5wdXQtPmxpbmU7CisgICAgICAgIGxlbiA9IDA7CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAg
ICAgICAgZGVmYXVsdDoKKwkJCXJldHVybiBjaDsgLy8gU2luZ2xlIGNoYXJhY3RlciB0b2tlbgor
ICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwkJY2FzZSAnQSc6IGNh
c2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICBjYXNlICdGJzog
Y2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6CisgICAgICAgIGNhc2UgJ0sn
OiBjYXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKKyAgICAgICAgY2FzZSAn
UCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgorICAgICAgICBjYXNl
ICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6CisgICAgICAgIGNh
c2UgJ1onOiBjYXNlICdfJzoKKyAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzog
Y2FzZSAnZCc6IGNhc2UgJ2UnOgorICAgICAgICBjYXNlICdmJzogY2FzZSAnZyc6IGNhc2UgJ2gn
OiBjYXNlICdpJzogY2FzZSAnaic6CisgICAgICAgIGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAn
bSc6IGNhc2UgJ24nOiBjYXNlICdvJzoKKyAgICAgICAgY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNl
ICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOgorICAgICAgICBjYXNlICd1JzogY2FzZSAndic6IGNh
c2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6CisgICAgICAgIGNhc2UgJ3onOiAgICAgICAgICAg
IAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9M
X05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsK
KyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CQkJCQkK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3on
KSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAgICAg
ICAgICAgICAgICAgIGNoID09ICdfJyk7CisgICAgICAgICAgICBpZiAobGVuID49IE1BWF9TWU1C
T0xfTkFNRV9MRU4pCisgICAgICAgICAgICAgICAgbGVuID0gTUFYX1NZTUJPTF9OQU1FX0xFTiAt
IDE7CisgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVSOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICAgICAgeXlsdmFscHAt
PnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlm
IChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7CisJCQkJeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYm
IGNoIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAn
ZicpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBs
YWluZWQgPSAwOworICAgICAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgZG8geworCQkJCQkJeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl2YWwgPD0gMHgwZmZmZmZmZikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnQScgKyAxMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpaSA9IGNoIC0gJ2EnICsgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCA0KSB8IGlpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFscmVhZHlDb21wbGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19IRVhfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAg
ICAgICB9IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9S
X19fRVJST1JfSU5fSEVYX0NPTlNUQU5UIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQl5
eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENP
TlNUQU5UOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7
IC8vIG9jdGFsIGludGVnZXIgY29uc3RhbnRzCisgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBs
YWluZWQgPSAwOworICAgICAgICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNo
OworICAgICAgICAgICAgICAgICAgICBpZiAoaXZhbCA8PSAweDFmZmZmZmZmKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAg
aXZhbCA9IChpdmFsIDw8IDMpIHwgaWk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fT0NUX0NPTlNUX09W
RVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8
IGNoID09ICd4J3x8IGNoID09ICdFJykgCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbEZs
b2F0Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwor
CQkJCXl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
SU5UQ09OU1RBTlQ7CisgICAgICAgICAgICB9IGVsc2UgeworCQkJCWNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJCWNoID0gJzAn
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4uCisgICAgICAg
IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1
JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0gJzAnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAg
ICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAn
ICYmIGNoIDw9ICc5Jyk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8
fCBjaCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxl
biwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
eXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAg
ICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2ggPSB5eWx2YWxwcC0+c3ltYm9sX25hbWVbaWldIC0gJzAnOworICAgICAgICAg
ICAgICAgICAgICBpZiAoKGl2YWwgPiAyMTQ3NDgzNjQpIHx8IChpdmFsID09IDIxNDc0ODM2NCAm
JiBjaCA+PSA4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxh
aW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJP
Ul9fX0lOVEVHRVJfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFs
cmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpdmFsID0gaXZhbCoxMCArIGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAgICBpZihpdmFs
PT0wKQorICAgICAgICAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIjAi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0RFQ19PUDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9TVUJfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJy0nOworICAgICAgICAgICAg
fQorICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2gg
PT0gJysnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTkNfT1A7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQURE
X0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJy
ZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICcrJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnKic6
CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfTVVMX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcqJzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNo
ID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTU9EX0FTU0lHTjsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X1JJR0hUX0JSQUNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAt
PmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJyUnOworICAgICAgICAgICAgfQorICAgICAgICBjYXNl
ICc6JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDS0VUOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJzonOworICAg
ICAgICAgICAgfQorICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJ14nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9YT1JfT1A7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfWE9SX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBl
bHNleworICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ14n
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNh
c2UgJz0nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX0VRX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJz0nOworICAgICAgICAg
ICAgfQorICAgICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAo
Y2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ORV9PUDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICchJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgaWYgKGNoID09ICd8JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
T1JfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAn
PScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfT1JfQVNTSUdOOworICAgICAgICAg
ICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgIHJl
dHVybiAnfCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBjYXNl
ICcmJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyYnKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9BTkRfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfQU5EX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAg
ICAgaWYgKGNoID09ICc8JykgeworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
aWYoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQVNTSUdO
OworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfT1A7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVfT1A7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICclJykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDRTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2ggPT0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0JS
QUNLRVQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPCc7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
Jz4nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsK
KyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
UklHSFRfT1A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfR0VfT1A7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPic7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IDAsICcuJywgeXlsdmFscHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gU3Bl
Y2lhbCBFT0YgaGFjaworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy4nOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgaWYgKGNoID09ICcvJykgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAnXG4nICYmIGNo
ICE9IEVPRik7CisgICAgICAgICAgICAgICAgaWYgKGNoID09IEVPRikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAnXG4nOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChjaCA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBpbnQgbmxjb3VudCA9
IDA7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChjaCAhPSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnXG4nKSBubGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IkVSUk9SX19fRU9GX0lOX0NPTU1FTlQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAnLycpOworICAgICAgICAgICAgICAgIGlmIChubGNv
dW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXG4nOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBHbyB0cnkgaXQgYWdhaW4uLi4KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ESVZfQVNT
SUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJ
bnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJy8nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHdoaWxlIChjaCAh
PSAnIicgJiYgY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhl
IGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVu
R0wgRVMgU2hhZGluZyBMYW5ndWFnZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5H
X0xFTikgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSBjaDsKKyAgICAg
ICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9ICdc
MCc7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyInKSB7CisgICAgICAgICAgICAgICAgeXlsdmFs
cHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9TVFJDT05TVEFOVDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fQ1BQX0VPTF9JTl9T
VFJJTkciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfU1k7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9IC8vIGJ5dGVfc2NhbgorCitpbnQgeXlsZXhfQ1BQKGNoYXIq
IGJ1ZiwgaW50IG1heFNpemUpCit7ICAgIAorCXl5c3R5cGVwcCB5eWx2YWxwcDsKKyAgICBpbnQg
dG9rZW4gPSAnXG4nOyAgIAorCisgICAgZm9yKDs7KSB7CisKKyAgICAgICAgY2hhciogdG9rZW5T
dHJpbmcgPSAwOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCAmeXlsdmFscHApOworCQlpZihjaGVja19FT0YodG9rZW4pKQorCQkgICAg
cmV0dXJuIDA7CisgICAgICAgIGlmICh0b2tlbiA9PSAnIycpIHsKKyAgICAgICAgICAgIGlmIChj
cHAtPnByZXZpb3VzX3Rva2VuID09ICdcbid8fCBjcHAtPnByZXZpb3VzX3Rva2VuID09IDApIHsK
KwkJCSAgICB0b2tlbiA9IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
aWYoY2hlY2tfRU9GKHRva2VuKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCQkg
ICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNzb3IgY29tbWFuZCBtdXN0IG5vdCBiZSBwcmVjZWRlZCBi
eSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoYXQgbGluZSIpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNwcC0+cHJldmlvdXNf
dG9rZW4gPSB0b2tlbjsKKyAgICAgICAgLy8gZXhwYW5kIG1hY3JvcworICAgICAgICBpZiAodG9r
ZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAuc2NfaWRlbnQsICZ5
eWx2YWxwcCkpIHsKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodG9r
ZW4gPT0gJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIAorICAgICAgICBp
ZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisgICAgICAgICAgICB0b2tlblN0cmluZyA9
IEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOworICAgICAgICB9IGVs
c2UgaWYgKHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UfHx0b2tlbiA9PSBDUFBfSU5UQ09OU1RB
TlQpeyAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0g
MTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0geXlsdmFscHAuc3ltYm9s
X25hbWU7CisJCX0gZWxzZSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBjcHAtPnBhc3RGaXJz
dFN0YXRlbWVudCA9IDE7ICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlblN0cmluZyA9IEdl
dFN0cmluZ09mQXRvbShhdGFibGUsdG9rZW4pOworCSAgICB9CisKKyAgICAgICAgaWYgKHRva2Vu
U3RyaW5nKSB7CisgICAgICAgICAgICBpZiAoKHNpZ25lZClzdHJsZW4odG9rZW5TdHJpbmcpID49
IG1heFNpemUpIHsKKyAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1heFNpemU7ICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICB9IGVsc2UgIGlmIChzdHJsZW4odG9rZW5TdHJpbmcpID4gMCkgeworCQkJICAgIHN0cmNweShi
dWYsIHRva2VuU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9
IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpc3RybGVuKHRva2VuU3RyaW5nKTsKKyAg
ICAgICAgICAgIH0gIAorCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAwOworfSAvLyB5eWxleAorCisvL0NoZWNrcyBpZiB0aGUgdG9rZW4ganVz
dCByZWFkIGlzIEVPRiBvciBub3QuCitpbnQgY2hlY2tfRU9GKGludCB0b2tlbikKK3sKKyAgIGlm
KHRva2VuPT0tMSl7CisgICAgICAgaWYoY3BwLT5pZmRlcHRoID4wKXsKKwkJQ1BQRXJyb3JUb0lu
Zm9Mb2coIiNlbmRpZiBtaXNzaW5nISEgQ29tcGlsYXRpb24gc3RvcHBlZCIpOworICAgICAgICBj
cHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgIH0KKyAgICAgIHJldHVybiAxOworICAgfQorICAg
cmV0dXJuIDA7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHNjYW5uZXIuYyAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NjYW5uZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklE
SUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMg
dGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2Rp
ZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0
aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdp
dGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJq
ZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhj
bHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2lu
YWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXBy
b2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1z
OyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwg
eW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCBy
ZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUs
IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRp
b24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMg
bm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwg
YXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQg
dG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZh
dGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2Fy
ZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVy
LiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMi
IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJ
VEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVT
RSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVS
CitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5Z
IFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJ
TiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5E
L09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQg
QU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvLworLy8gc2Nhbm5lci5oCisvLworCisjaWYgIWRlZmluZWQo
X19TQ0FOTkVSX0gpCisjZGVmaW5lIF9fU0NBTk5FUl9IIDEKKworI2RlZmluZSBNQVhfU1lNQk9M
X05BTUVfTEVOIDEyOAorI2RlZmluZSBNQVhfU1RSSU5HX0xFTiA1MTIKKworI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKworLy8gTm90IHJlYWxseSBhdG9tIHRhYmxl
IHN0dWZmIGJ1dCBuZWVkZWQgZmlyc3QuLi4KKwordHlwZWRlZiBzdHJ1Y3QgU291cmNlTG9jX1Jl
YyB7CisgICAgdW5zaWduZWQgc2hvcnQgZmlsZSwgbGluZTsKK30gU291cmNlTG9jOworCitpbnQg
eXlwYXJzZSAodm9pZCk7CisKK2ludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7
CisKK3R5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKKyAgICBzdHJ1Y3QgSW5wdXRTcmMJKnByZXY7
CisgICAgaW50CQkJKCpzY2FuKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopOworICAg
IGludAkJCSgqZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7CisgICAgdm9p
ZAkJKCp1bmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKik7CisgICAg
aW50CQkJbmFtZTsgIC8qIGF0b20gKi8KKyAgICBpbnQJCQlsaW5lOworfSBJbnB1dFNyYzsKKwor
aW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBz
Y2FubmVyLiAKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5u
aW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IGNoZWNrX0VPRihp
bnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAordm9p
ZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBp
bnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwordm9pZCBTZXRMaW5lTnVtYmVyKGludCk7Cit2b2lk
IFNldFN0cmluZ051bWJlcihpbnQpOwordm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwordm9pZCBE
ZWNMaW5lTnVtYmVyKHZvaWQpOworaW50IEZyZWVTY2FubmVyKHZvaWQpOyAgICAgICAgICAgICAg
ICAgLy8gRnJlZSB0aGUgY3BwIHNjYW5uZXIKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19TQ0FOTkVS
X0gpCisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9i
YWxzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0
aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdh
cmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9y
IHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2Nl
cHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0
ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUg
dGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVz
ZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGlj
ZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBz
b2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2Rp
ZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQg
dGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0City
ZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhl
IGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRp
b25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtz
LCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklE
SUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJv
bSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8g
b3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVk
IGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRl
bnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtz
IG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitp
bmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBO
VklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lU
SE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT
UyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZ
LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJB
VElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMu
CisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJ
TkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQor
T1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklC
VVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVS
IFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwg
U1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLy8KKy8vIHNsZ2xvYmFscy5oCisvLworCisjaWYgIWRlZmluZWQoX19TTEdMT0JB
TFNfSCkKKyNkZWZpbmUgX19TTEdMT0JBTFNfSCAxCisKK3R5cGVkZWYgc3RydWN0IENQUFN0cnVj
dF9SZWMgQ1BQU3RydWN0OworCitleHRlcm4gQ1BQU3RydWN0ICpjcHA7CisKKyN1bmRlZiAgQ1BQ
Q19ERUJVR19USEVfQ09NUElMRVIKKyNpZiBkZWZpbmVkKF9ERUJVRykKKyNkZWZpbmUgQ1BQQ19E
RUJVR19USEVfQ09NUElMRVIgMQorI2VuZGlmCisKKyN1bmRlZiAgQ1BQQ19FTkFCTEVfVE9PTFMK
KyNkZWZpbmUgQ1BQQ19FTkFCTEVfVE9PTFMgMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCIKKyNpZiAhZGVmaW5l
ZChOT19QQVJTRVIpCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChOVUxMKQorI2RlZmluZSBOVUxMIDAKKyNlbmRpZgorCisj
ZW5kaWYgLy8gIShkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCisKKworICAgIAorCkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI4OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAor
Q29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3Jh
dGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIg
dXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhp
cyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMu
ICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVz
ZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUu
CisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRz
IHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBj
b3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEg
U29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRo
ZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291
cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1
dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5v
dGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBk
aXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0
d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxv
Z29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBl
eHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5z
ZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5j
bHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUg
aW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4g
d2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdh
cmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlO
RyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUs
CitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJ
TiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwg
TlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwg
RVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9E
VUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBT
T0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRS
QUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9U
SEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gc3ltYm9s
cy5jCisvLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN5bWJvbCBUYWJsZSBWYXJpYWJsZXM6IC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCitTY29wZSAqU2NvcGVMaXN0ID0gTlVMTDsKK1Njb3BlICpDdXJyZW50
U2NvcGUgPSBOVUxMOworU2NvcGUgKkdsb2JhbFNjb3BlID0gTlVMTDsKKworc3RhdGljIHZvaWQg
dW5saW5rU2NvcGUodm9pZCAqX3Njb3BlKSB7CisgICAgU2NvcGUgKnNjb3BlID0gX3Njb3BlOwor
CisgICAgaWYgKHNjb3BlLT5uZXh0KQorICAgICAgICBzY29wZS0+bmV4dC0+cHJldiA9IHNjb3Bl
LT5wcmV2OworICAgIGlmIChzY29wZS0+cHJldikKKyAgICAgICAgc2NvcGUtPnByZXYtPm5leHQg
PSBzY29wZS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIFNjb3BlTGlzdCA9IHNjb3BlLT5uZXh0
OworfQorCisvKgorICogTmV3U2NvcGUoKQorICoKKyAqLworU2NvcGUgKk5ld1Njb3BlSW5Qb29s
KE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAgIGxTY29wZSA9
IG1lbV9BbGxvYyhwb29sLCBzaXplb2YoU2NvcGUpKTsKKyAgICBsU2NvcGUtPnBvb2wgPSBwb29s
OworICAgIGxTY29wZS0+cGFyZW50ID0gTlVMTDsKKyAgICBsU2NvcGUtPmZ1blNjb3BlID0gTlVM
TDsKKyAgICBsU2NvcGUtPnN5bWJvbHMgPSBOVUxMOworICAgIAorICAgIGxTY29wZS0+bGV2ZWwg
PSAwOworCisgICAgbFNjb3BlLT5wcm9ncmFtcyA9IE5VTEw7CisgICAgaWYgKChsU2NvcGUtPm5l
eHQgPSBTY29wZUxpc3QpKQorICAgICAgICBTY29wZUxpc3QtPnByZXYgPSBsU2NvcGU7CisgICAg
bFNjb3BlLT5wcmV2ID0gMDsKKyAgICBTY29wZUxpc3QgPSBsU2NvcGU7CisgICAgbWVtX0FkZENs
ZWFudXAocG9vbCwgdW5saW5rU2NvcGUsIGxTY29wZSk7CisgICAgcmV0dXJuIGxTY29wZTsKK30g
Ly8gTmV3U2NvcGUKKworLyoKKyAqIFB1c2hTY29wZSgpCisgKgorICovCisKK3ZvaWQgUHVzaFNj
b3BlKFNjb3BlICpmU2NvcGUpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAgIGlmIChDdXJy
ZW50U2NvcGUpIHsKKyAgICAgICAgZlNjb3BlLT5sZXZlbCA9IEN1cnJlbnRTY29wZS0+bGV2ZWwg
KyAxOworICAgICAgICBpZiAoZlNjb3BlLT5sZXZlbCA9PSAxKSB7CisgICAgICAgICAgICBpZiAo
IUdsb2JhbFNjb3BlKSB7CisgICAgICAgICAgICAgICAgLyogSEFDSyAtIENURCAtLSBpZiBHbG9i
YWxTY29wZT09TlVMTCBhbmQgbGV2ZWw9PTEsIHdlJ3JlCisgICAgICAgICAgICAgICAgICogZGVm
aW5pbmcgYSBmdW5jdGlvbiBpbiB0aGUgc3VwZXJnbG9iYWwgc2NvcGUuICBUaGluZ3MKKyAgICAg
ICAgICAgICAgICAgKiB3aWxsIGJyZWFrIGlmIHdlIGxlYXZlIHRoZSBsZXZlbCBhcyAxLCBzbyB3
ZSBhcmJpdHJhcmlseQorICAgICAgICAgICAgICAgICAqIHNldCBpdCB0byAyICovCisgICAgICAg
ICAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZTY29wZS0+bGV2ZWwgPj0gMikgeworICAgICAgICAgICAgbFNjb3BlID0gZlNj
b3BlOworICAgICAgICAgICAgd2hpbGUgKGxTY29wZS0+bGV2ZWwgPiAyKQorICAgICAgICAgICAg
ICAgIGxTY29wZSA9IGxTY29wZS0+bmV4dDsKKyAgICAgICAgICAgIGZTY29wZS0+ZnVuU2NvcGUg
PSBsU2NvcGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmU2NvcGUtPmxldmVs
ID0gMDsKKyAgICB9CisgICAgZlNjb3BlLT5wYXJlbnQgPSBDdXJyZW50U2NvcGU7CisgICAgQ3Vy
cmVudFNjb3BlID0gZlNjb3BlOworfSAvLyBQdXNoU2NvcGUKKworLyoKKyAqIFBvcFNjb3BlKCkK
KyAqCisgKi8KKworU2NvcGUgKlBvcFNjb3BlKHZvaWQpCit7CisgICAgU2NvcGUgKmxTY29wZTsK
KworICAgIGxTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBpZiAoQ3VycmVudFNjb3BlKQorICAg
ICAgICBDdXJyZW50U2NvcGUgPSBDdXJyZW50U2NvcGUtPnBhcmVudDsKKyAgICByZXR1cm4gbFNj
b3BlOworfSAvLyBQb3BTY29wZQorCisvKgorICogTmV3U3ltYm9sKCkgLSBBbGxvY2F0ZSBhIG5l
dyBzeW1ib2wgbm9kZTsKKyAqCisgKi8KKworU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICps
b2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpCit7CisgICAgU3lt
Ym9sICpsU3ltYjsKKyAgICBjaGFyICpwY2g7CisgICAgaW50IGlpOworCisgICAgbFN5bWIgPSAo
U3ltYm9sICopIG1lbV9BbGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKKyAgICBs
U3ltYi0+bGVmdCA9IE5VTEw7CisgICAgbFN5bWItPnJpZ2h0ID0gTlVMTDsKKyAgICBsU3ltYi0+
bmV4dCA9IE5VTEw7CisgICAgbFN5bWItPm5hbWUgPSBuYW1lOworICAgIGxTeW1iLT5sb2MgPSAq
bG9jOworICAgIGxTeW1iLT5raW5kID0ga2luZDsKKyAgICAKKyAgICAvLyBDbGVhciB1bmlvbiBh
cmVhOgorCisgICAgcGNoID0gKGNoYXIgKikgJmxTeW1iLT5kZXRhaWxzOworICAgIGZvciAoaWkg
PSAwOyBpaSA8IHNpemVvZihsU3ltYi0+ZGV0YWlscyk7IGlpKyspCisgICAgICAgICpwY2grKyA9
IDA7CisgICAgcmV0dXJuIGxTeW1iOworfSAvLyBOZXdTeW1ib2wKKworLyoKKyAqIGxBZGRUb1Ry
ZWUoKSAtIFVzaW5nIGEgYmluYXJ5IHRyZWUgaXMgbm90IGEgZ29vZCBpZGVhIGZvciBiYXNpYyBh
dG9tIHZhbHVlcyBiZWNhdXNlIHRoZXkKKyAqICAgICAgICAgYXJlIGdlbmVyYXRlZCBpbiBvcmRl
ci4gIFdlJ2xsIGZpeCB0aGlzIGxhdGVyIChieSByZXZlcnNpbmcgdGhlIGJpdCBwYXR0ZXJuKS4K
KyAqLworCitzdGF0aWMgdm9pZCBsQWRkVG9UcmVlKFN5bWJvbCAqKmZTeW1ib2xzLCBTeW1ib2wg
KmZTeW1iKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgaW50IGxyZXYsIGZyZXY7CisKKyAg
ICBsU3ltYiA9ICpmU3ltYm9sczsKKyAgICBpZiAobFN5bWIpIHsKKyAgICAgICAgZnJldiA9IEdl
dFJldmVyc2VkQXRvbShhdGFibGUsIGZTeW1iLT5uYW1lKTsKKyAgICAgICAgd2hpbGUgKGxTeW1i
KSB7CisgICAgICAgICAgICBscmV2ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgbFN5bWItPm5h
bWUpOworICAgICAgICAgICAgaWYgKGxyZXYgPT0gZnJldikgeworICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCJHZXRBdG9tU3RyaW5nKGF0YWJsZSwgZlN5bWItPm5hbWUpIik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmIChscmV2ID4gZnJldikgeworICAgICAgICAgICAgICAgICAgICBpZiAobFN5bWItPmxl
ZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+
bGVmdCA9IGZTeW1iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobFN5bWItPnJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYiA9IGxT
eW1iLT5yaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxTeW1iLT5yaWdodCA9IGZTeW1iOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAqZlN5bWJvbHMgPSBmU3lt
YjsKKyAgICB9Cit9IC8vIGxBZGRUb1RyZWUKKworCisvKgorICogQWRkU3ltYm9sKCkgLSBBZGQg
YSB2YXJpYWJsZSwgdHlwZSwgb3IgZnVuY3Rpb24gbmFtZSB0byBhIHNjb3BlLgorICoKKyAqLwor
CitTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0
b20sIHN5bWJvbGtpbmQga2luZCkKK3sKKyAgICBTeW1ib2wgKmxTeW1iOworCisgICAgaWYgKCFm
U2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBsU3ltYiA9IE5ld1N5
bWJvbChsb2MsIGZTY29wZSwgYXRvbSwga2luZCk7CisgICAgbEFkZFRvVHJlZSgmZlNjb3BlLT5z
eW1ib2xzLCBsU3ltYik7CisgICAgcmV0dXJuIGxTeW1iOworfSAvLyBBZGRTeW1ib2wKKworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiBTeW1ib2wgU2VtYW50aWMgRnVuY3Rpb25zICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisKKy8qCisgKiBMb29rVXBMb2NhbFN5bWJvbCgpCisgKgorICovCisKK1N5bWJvbCAqTG9v
a1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pCit7CisgICAgU3ltYm9sICps
U3ltYjsKKyAgICBpbnQgcm5hbWUsIHJhdG9tOworCisgICAgcmF0b20gPSBHZXRSZXZlcnNlZEF0
b20oYXRhYmxlLCBhdG9tKTsKKyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNjb3BlID0gQ3Vy
cmVudFNjb3BlOworICAgIGxTeW1iID0gZlNjb3BlLT5zeW1ib2xzOworICAgIHdoaWxlIChsU3lt
YikgeworICAgICAgICBybmFtZSA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1l
KTsKKyAgICAgICAgaWYgKHJuYW1lID09IHJhdG9tKSB7CisgICAgICAgICAgICByZXR1cm4gbFN5
bWI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocm5hbWUgPiByYXRvbSkgewor
ICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPnJpZ2h0OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfSAvLyBMb29rVXBMb2NhbFN5bWJv
bAorCisvKgorICogTG9va1VwU3ltYm9sKCkKKyAqCisgKi8KKworU3ltYm9sICpMb29rVXBTeW1i
b2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pCit7CisgICAgU3ltYm9sICpsU3ltYjsKKworICAg
IGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7CisgICAgd2hpbGUg
KGZTY29wZSkgeworICAgICAgICBsU3ltYiA9IExvb2tVcExvY2FsU3ltYm9sKGZTY29wZSwgYXRv
bSk7CisgICAgICAgIGlmIChsU3ltYikKKyAgICAgICAgICAgIHJldHVybiBsU3ltYjsKKyAgICAg
ICAgZlNjb3BlID0gZlNjb3BlLT5wYXJlbnQ7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfSAv
LyBMb29rVXBTeW1ib2wKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
CitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
K3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisK
K1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJP
RFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLy8KKy8vIHN5bWJvbHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fU1lN
Qk9MU19IKQorI2RlZmluZSBfX1NZTUJPTFNfSCAxCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgiCisKK3R5cGVkZWYgZW51bSBzeW1ib2xraW5kIHsKKyAgIE1BQ1JP
X1MKK30gc3ltYm9sa2luZDsKKworLy8gVHlwZWRlZnMgZm9yIHRoaW5ncyBkZWZpbmVkIGhlcmUg
aW4gInN5bWJvbHMuaCI6CisKK3R5cGVkZWYgc3RydWN0IFNjb3BlX1JlYyBTY29wZTsKK3R5cGVk
ZWYgc3RydWN0IFN5bWJvbF9SZWMgU3ltYm9sOworCit0eXBlZGVmIHN0cnVjdCBTeW1ib2xMaXN0
X1JlYyB7CisgICAgc3RydWN0IFN5bWJvbExpc3RfUmVjICpuZXh0OworICAgIFN5bWJvbCAqc3lt
YjsKK30gU3ltYm9sTGlzdDsKKworc3RydWN0IFNjb3BlX1JlYyB7CisgICAgU2NvcGUgKm5leHQs
ICpwcmV2OyAgICAgLy8gZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBzY29wZXMKKyAgICBTY29w
ZSAqcGFyZW50OworICAgIFNjb3BlICpmdW5TY29wZTsgICAgICAgIC8vIFBvaW50cyB0byBiYXNl
IHNjb3BlIG9mIGVuY2xvc2luZyBmdW5jdGlvbgorICAgIE1lbW9yeVBvb2wgKnBvb2w7ICAgICAg
IC8vIHBvb2wgdXNlZCBmb3IgYWxsb2NhdGlvbiBpbiB0aGlzIHNjb3BlCisgICAgU3ltYm9sICpz
eW1ib2xzOworICAgIAorCWludCBsZXZlbDsgICAgICAgICAgICAgIC8vIDAgPSBzdXBlciBnbG9i
YWxzLCAxID0gZ2xvYmFscywgZXRjLgorCisgICAgLy8gT25seSB1c2VkIGF0IGdsb2JhbCBzY29w
ZSAobGV2ZWwgMSk6CisgICAgU3ltYm9sTGlzdCAqcHJvZ3JhbXM7ICAgLy8gTGlzdCBvZiBwcm9n
cmFtcyBmb3IgdGhpcyBjb21waWxhdGlvbi4KK307CisKKworLy8gU3ltYm9sIHRhYmxlIGlzIGEg
c2ltcGxlIGJpbmFyeSB0cmVlLgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5oIiAgICAgICAgLy8gdG8gZ2V0IE1hY3JvU3ltYm9sIGRlZgorCitzdHJ1Y3QgU3ltYm9sX1Jl
YyB7CisgICAgU3ltYm9sICpsZWZ0LCAqcmlnaHQ7CisgICAgU3ltYm9sICpuZXh0OworICAgIGlu
dCBuYW1lOyAgICAgICAvLyBOYW1lIGF0b20KKyAgICBTb3VyY2VMb2MgbG9jOworICAgIHN5bWJv
bGtpbmQga2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIE1hY3JvU3ltYm9sIG1hYzsKKyAgICB9
IGRldGFpbHM7Cit9OworCitleHRlcm4gU2NvcGUgKkN1cnJlbnRTY29wZTsKK2V4dGVybiBTY29w
ZSAqR2xvYmFsU2NvcGU7CitleHRlcm4gU2NvcGUgKlNjb3BlTGlzdDsKKworU2NvcGUgKk5ld1Nj
b3BlSW5Qb29sKE1lbW9yeVBvb2wgKik7CisjZGVmaW5lIE5ld1Njb3BlKCkgICAgICBOZXdTY29w
ZUluUG9vbChDdXJyZW50U2NvcGUtPnBvb2wpCit2b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3Bl
KTsKK1Njb3BlICpQb3BTY29wZSh2b2lkKTsKK1N5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAq
bG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKK1N5bWJvbCAq
QWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9s
a2luZCBraW5kKTsKK1N5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50
IGF0b20pOworU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwor
dm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOworCisKKyNlbmRpZiAvLyAhZGVmaW5lZChf
X1NZTUJPTFNfSCkKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5jCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0
aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdh
cmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9y
IHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2Nl
cHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0
ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUg
dGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVz
ZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGlj
ZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBz
b2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2Rp
ZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQg
dGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0City
ZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhl
IGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRp
b25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtz
LCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklE
SUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJv
bSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8g
b3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVk
IGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRl
bnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtz
IG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitp
bmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBO
VklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lU
SE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT
UyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZ
LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJB
VElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMu
CisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJ
TkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQor
T1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklC
VVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVS
IFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwg
U1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLy8KKy8vIHRva2Vucy5jCisvLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgor
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBUb2tlbiBSZWNv
cmRlciBhbmQgUGxheWJhY2s6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIGlkc3RyKCkKKyAqIENvcHkgYSBz
dHJpbmcgdG8gYSBtYWxsb2MnZWQgYmxvY2sgYW5kIGNvbnZlcnQgaXQgaW50byBzb21ldGhpbmcg
c3VpdGFibGUKKyAqIGZvciBhbiBJRAorICoKKyAqLworCitzdGF0aWMgY2hhciAqaWRzdHIoY29u
c3QgY2hhciAqZnN0ciwgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBzaXplX3QgbGVuOworICAg
IGNoYXIgKnN0ciwgKnQ7CisgICAgY29uc3QgY2hhciAqZjsKKworICAgIGxlbiA9IHN0cmxlbihm
c3RyKTsKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIHN0ciA9IChjaGFyICopIG1hbGxvYyhsZW4g
KyAxKTsKKyAgICBlbHNlCisgICAgICAgIHN0ciA9IChjaGFyICopIG1lbV9BbGxvYyhwb29sLCBs
ZW4gKyAxKTsKKyAgICAKKyAgICBmb3IgKGY9ZnN0ciwgdD1zdHI7ICpmOyBmKyspIHsKKyAgICAg
ICAgaWYgKGlzYWxudW0oKmYpKSAqdCsrID0gKmY7CisgICAgICAgIGVsc2UgaWYgKCpmID09ICcu
JyB8fCAqZiA9PSAnLycpICp0KysgPSAnXyc7CisgICAgfQorICAgICp0ID0gMDsKKyAgICByZXR1
cm4gc3RyOworfSAvLyBpZHN0cgorCisKKy8qCisgKiBsTmV3QmxvY2soKQorICoKKyAqLworCitz
dGF0aWMgVG9rZW5CbG9jayAqbE5ld0Jsb2NrKFRva2VuU3RyZWFtICpmVG9rLCBNZW1vcnlQb29s
ICpwb29sKQoreworICAgIFRva2VuQmxvY2sgKmxCbG9jazsKKworICAgIGlmICghcG9vbCkKKyAg
ICAgICAgbEJsb2NrID0gKFRva2VuQmxvY2sgKikgbWFsbG9jKHNpemVvZihUb2tlbkJsb2NrKSAr
IDI1Nik7CisgICAgZWxzZQorICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtZW1fQWxs
b2MocG9vbCwgc2l6ZW9mKFRva2VuQmxvY2spICsgMjU2KTsKKyAgICBsQmxvY2stPmNvdW50ID0g
MDsKKyAgICBsQmxvY2stPmN1cnJlbnQgPSAwOworICAgIGxCbG9jay0+ZGF0YSA9ICh1bnNpZ25l
ZCBjaGFyICopIGxCbG9jayArIHNpemVvZihUb2tlbkJsb2NrKTsKKyAgICBsQmxvY2stPm1heCA9
IDI1NjsKKyAgICBsQmxvY2stPm5leHQgPSBOVUxMOworICAgIGlmIChmVG9rLT5oZWFkKSB7Cisg
ICAgICAgIGZUb2stPmN1cnJlbnQtPm5leHQgPSBsQmxvY2s7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZlRvay0+aGVhZCA9IGxCbG9jazsKKyAgICB9CisgICAgZlRvay0+Y3VycmVudCA9IGxCbG9j
azsKKyAgICByZXR1cm4gbEJsb2NrOworfSAvLyBsTmV3QmxvY2sKKworLyoKKyAqIGxBZGRCeXRl
KCkKKyAqCisgKi8KKworc3RhdGljIHZvaWQgbEFkZEJ5dGUoVG9rZW5TdHJlYW0gKmZUb2ssIHVu
c2lnbmVkIGNoYXIgZlZhbCkKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7CisgICAgbEJsb2Nr
ID0gZlRvay0+Y3VycmVudDsKKyAgICBpZiAobEJsb2NrLT5jb3VudCA+PSBsQmxvY2stPm1heCkK
KyAgICAgICAgbEJsb2NrID0gbE5ld0Jsb2NrKGZUb2ssIDApOworICAgIGxCbG9jay0+ZGF0YVts
QmxvY2stPmNvdW50KytdID0gZlZhbDsKK30gLy8gbEFkZEJ5dGUKKworCisKKy8qCisgKiBsUmVh
ZEJ5dGUoKSAtIEdldCB0aGUgbmV4dCBieXRlIGZyb20gYSBzdHJlYW0uCisgKgorICovCisKK3N0
YXRpYyBpbnQgbFJlYWRCeXRlKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIFRva2VuQmxvY2sg
KmxCbG9jazsKKyAgICBpbnQgbHZhbCA9IC0xOworCisgICAgbEJsb2NrID0gcFRvay0+Y3VycmVu
dDsKKyAgICBpZiAobEJsb2NrKSB7CisgICAgICAgIGlmIChsQmxvY2stPmN1cnJlbnQgPj0gbEJs
b2NrLT5jb3VudCkgeworICAgICAgICAgICAgbEJsb2NrID0gbEJsb2NrLT5uZXh0OworICAgICAg
ICAgICAgaWYgKGxCbG9jaykKKyAgICAgICAgICAgICAgICBsQmxvY2stPmN1cnJlbnQgPSAwOwor
ICAgICAgICAgICAgcFRvay0+Y3VycmVudCA9IGxCbG9jazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobEJsb2NrKQorICAgICAgICAgICAgbHZhbCA9IGxCbG9jay0+ZGF0YVtsQmxvY2stPmN1cnJl
bnQrK107CisgICAgfQorICAgIHJldHVybiBsdmFsOworfSAvLyBsUmVhZEJ5dGUKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEdsb2JhbCBGdW5jdGlvbnM6Ly8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIE5ld1Rva2VuU3RyZWFt
KCkKKyAqCisgKi8KKworVG9rZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5h
bWUsIE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgVG9rZW5TdHJlYW0gKnBUb2s7CisKKyAgICBp
ZiAoIXBvb2wpCisgICAgICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0gKikgbWFsbG9jKHNpemVvZihU
b2tlblN0cmVhbSkpOworICAgIGVsc2UKKyAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSopbWVt
X0FsbG9jKHBvb2wsIHNpemVvZihUb2tlblN0cmVhbSkpOworICAgIHBUb2stPm5leHQgPSBOVUxM
OworICAgIHBUb2stPm5hbWUgPSBpZHN0cihuYW1lLCBwb29sKTsKKyAgICBwVG9rLT5oZWFkID0g
TlVMTDsKKyAgICBwVG9rLT5jdXJyZW50ID0gTlVMTDsKKyAgICBsTmV3QmxvY2socFRvaywgcG9v
bCk7CisgICAgcmV0dXJuIHBUb2s7Cit9IC8vIE5ld1Rva2VuU3RyZWFtCisKKy8qCisgKiBEZWxl
dGVUb2tlblN0cmVhbSgpCisgKgorICovCisKK3ZvaWQgRGVsZXRlVG9rZW5TdHJlYW0oVG9rZW5T
dHJlYW0gKnBUb2spCit7CisgICAgVG9rZW5CbG9jayAqcEJsb2NrLCAqbkJsb2NrOworCisgICAg
aWYgKHBUb2spIHsKKyAgICAgICAgcEJsb2NrID0gcFRvay0+aGVhZDsKKyAgICAgICAgd2hpbGUg
KHBCbG9jaykgeworICAgICAgICAgICAgbkJsb2NrID0gcEJsb2NrLT5uZXh0OworICAgICAgICAg
ICAgZnJlZShwQmxvY2spOworICAgICAgICAgICAgcEJsb2NrID0gbkJsb2NrOworICAgICAgICB9
CisgICAgICAgIGlmIChwVG9rLT5uYW1lKQorICAgICAgICAgICAgZnJlZShwVG9rLT5uYW1lKTsK
KyAgICAgICAgZnJlZShwVG9rKTsKKyAgICB9Cit9IC8vIERlbGV0ZVRva2VuU3RyZWFtCisKKy8q
CisgKiBSZWNvcmRUb2tlbigpIC0gQWRkIGEgdG9rZW4gdG8gdGhlIGVuZCBvZiBhIGxpc3QgZm9y
IGxhdGVyIHBsYXliYWNrIG9yIHByaW50b3V0LgorICoKKyAqLworCit2b2lkIFJlY29yZFRva2Vu
KFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQorewor
ICAgIGNvbnN0IGNoYXIgKnM7CisgICAgdW5zaWduZWQgY2hhciAqc3RyPU5VTEw7CisKKyAgICBp
ZiAodG9rZW4gPiAyNTYpCisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSgo
dG9rZW4gJiAweDdmKSArIDB4ODApKTsKKyAgICBlbHNlCisgICAgICAgIGxBZGRCeXRlKHBUb2ss
ICh1bnNpZ25lZCBjaGFyKSh0b2tlbiAmIDB4N2YpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgY2FzZSBDUFBfSURFTlRJRklFUjoKKyAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAg
ICBjYXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgcyA9IEdldEF0b21TdHJpbmcoYXRhYmxl
LCB5eWx2YWxwcC0+c2NfaWRlbnQpOworICAgICAgICB3aGlsZSAoKnMpCisgICAgICAgICAgICBs
QWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikgKnMrKyk7CisgICAgICAgIGxBZGRCeXRlKHBU
b2ssIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAg
IGNhc2UgQ1BQX0lOVENPTlNUQU5UOgorICAgICAgICAgc3RyPXl5bHZhbHBwLT5zeW1ib2xfbmFt
ZTsKKyAgICAgICAgIHdoaWxlICgqc3RyKXsKKyAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssKHVu
c2lnbmVkIGNoYXIpICpzdHIpOworICAgICAgICAgICAgKnN0cisrOworICAgICAgICAgfQorICAg
ICAgICAgbEFkZEJ5dGUocFRvaywgMCk7CisgICAgICAgICBicmVhazsKKyAgICBjYXNlICcoJzoK
KyAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHl5bHZhbHBwLT5zY19pbnQg
PyAxIDogMCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30gLy8gUmVj
b3JkVG9rZW4KKworLyoKKyAqIFJld2luZFRva2VuU3RyZWFtKCkgLSBSZXNldCBhIHRva2VuIHN0
cmVhbSBpbiBwcmVwZXJhdGlvbiBmb3IgcmVhZGluZy4KKyAqCisgKi8KKwordm9pZCBSZXdpbmRU
b2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaykKK3sKKyAgICBpZiAocFRvay0+aGVhZCkgewor
ICAgICAgICBwVG9rLT5jdXJyZW50ID0gcFRvay0+aGVhZDsKKyAgICAgICAgcFRvay0+Y3VycmVu
dC0+Y3VycmVudCA9IDA7CisgICAgfQorfSAvLyBSZXdpbmRUb2tlblN0cmVhbQorCisvKgorICog
UmVhZFRva2VuKCkgLSBSZWFkIHRoZSBuZXh0IHRva2VuIGZyb20gYSBzdHJlYW0uCisgKgorICov
CisKK2ludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQoreworICAgIGNoYXIgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiArIDFdOworICAg
IGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGludCBsdG9rZW4sIGxl
bjsKKyAgICBjaGFyIGNoOworCisgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOworICAgIGlm
IChsdG9rZW4gPj0gMCkgeworICAgICAgICBpZiAobHRva2VuID4gMTI3KQorICAgICAgICAgICAg
bHRva2VuICs9IDEyODsKKyAgICAgICAgc3dpdGNoIChsdG9rZW4pIHsKKyAgICAgICAgY2FzZSBD
UFBfSURFTlRJRklFUjoKKyAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgICAg
ICAgICBsZW4gPSAwOworICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAg
ICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ18n
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05B
TUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAg
ICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRC
eXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcp
OworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVSOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAgICAgICAg
ICAgbGVuID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPSBsUmVhZEJ5dGUocFRvaykpICE9
IDApCisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdfTEVOKQorICAgICAgICAg
ICAgICAgICAgICBzdHJpbmdfdmFsW2xlbisrXSA9IGNoOworICAgICAgICAgICAgc3RyaW5nX3Zh
bFtsZW5dID0gMDsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsIHN0cmluZ192YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAg
Y2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpfHwoY2g9PSdlJ3x8Y2g9PSdFJ3x8Y2g9PScuJyl8fChjaD09JysnfHxjaD09Jy0n
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9O
QU1FX0xFTikgeworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFk
Qnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAn
KTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUp
OworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2Z2YWw9KGZsb2F0KWF0b2YoeXlsdmFscHAtPnN5
bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9JTlRDT05T
VEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShw
VG9rKTsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4p
IHsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAg
ICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9s
X25hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAg
ICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKKyAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBsdG9rZW47CisgICAgfQorICAgIHJldHVybiBFT0ZfU1k7Cit9IC8v
IFJlYWRUb2tlbgorCit0eXBlZGVmIHN0cnVjdCBUb2tlbklucHV0U3JjIHsKKyAgICBJbnB1dFNy
YyAgICAgICAgICAgIGJhc2U7CisgICAgVG9rZW5TdHJlYW0gICAgICAgICAqdG9rZW5zOworICAg
IGludCAgICAgICAgICAgICAgICAgKCpmaW5hbCkoQ1BQU3RydWN0ICopOworfSBUb2tlbklucHV0
U3JjOworCitzdGF0aWMgaW50IHNjYW5fdG9rZW4oVG9rZW5JbnB1dFNyYyAqaW4sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+dG9rZW5zLCB5
eWx2YWxwcCk7CisgICAgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKTsKKyAgICBjcHAtPnRva2Vu
TG9jLT5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAgY3BwLT50b2tlbkxvYy0+
bGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGlmICh0b2tlbiA9PSAnXG4nKSB7
CisgICAgICAgIGluLT5iYXNlLmxpbmUrKzsKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH0K
KyAgICBpZiAodG9rZW4gPiAwKSByZXR1cm4gdG9rZW47CisgICAgY3BwLT5jdXJyZW50SW5wdXQg
PSBpbi0+YmFzZS5wcmV2OworICAgIGZpbmFsID0gaW4tPmZpbmFsOworICAgIGZyZWUoaW4pOwor
ICAgIGlmIChmaW5hbCAmJiAhZmluYWwoY3BwKSkgcmV0dXJuIC0xOworICAgIHJldHVybiBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworfQorCitp
bnQgUmVhZEZyb21Ub2tlblN0cmVhbShUb2tlblN0cmVhbSAqdHMsIGludCBuYW1lLCBpbnQgKCpm
aW5hbCkoQ1BQU3RydWN0ICopKQoreworICAgIFRva2VuSW5wdXRTcmMgKmluID0gbWFsbG9jKHNp
emVvZihUb2tlbklucHV0U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoVG9rZW5JbnB1
dFNyYykpOworICAgIGluLT5iYXNlLm5hbWUgPSBuYW1lOworICAgIGluLT5iYXNlLnByZXYgPSBj
cHAtPmN1cnJlbnRJbnB1dDsKKyAgICBpbi0+YmFzZS5zY2FuID0gKGludCAoKikoSW5wdXRTcmMg
KiwgeXlzdHlwZXBwICopKXNjYW5fdG9rZW47CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAg
aW4tPnRva2VucyA9IHRzOworICAgIGluLT5maW5hbCA9IGZpbmFsOworICAgIFJld2luZFRva2Vu
U3RyZWFtKHRzKTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsKKyAgICByZXR1
cm4gMTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVW5nb3RUb2tlbiB7CisgICAgSW5wdXRTcmMgICAg
YmFzZTsKKyAgICBpbnQgICAgICAgICB0b2tlbjsKKyAgICB5eXN0eXBlcHAgICAgIGx2YWw7Cit9
IFVuZ290VG9rZW47CisKK3N0YXRpYyBpbnQgcmVnZXRfdG9rZW4oVW5nb3RUb2tlbiAqdCwgeXlz
dHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gdC0+dG9rZW47CisgICAgKnl5
bHZhbHBwID0gdC0+bHZhbDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IHQtPmJhc2UucHJldjsK
KyAgICBmcmVlKHQpOworICAgIHJldHVybiB0b2tlbjsKK30KKwordm9pZCBVbmdldFRva2VuKGlu
dCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBVbmdvdFRva2VuICp0ID0gbWFs
bG9jKHNpemVvZihVbmdvdFRva2VuKSk7CisgICAgbWVtc2V0KHQsIDAsIHNpemVvZihVbmdvdFRv
a2VuKSk7CisgICAgdC0+dG9rZW4gPSB0b2tlbjsKKyAgICB0LT5sdmFsID0gKnl5bHZhbHBwOwor
ICAgIHQtPmJhc2Uuc2NhbiA9ICh2b2lkICopcmVnZXRfdG9rZW47CisgICAgdC0+YmFzZS5wcmV2
ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgdC0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5w
dXQtPm5hbWU7CisgICAgdC0+YmFzZS5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Cisg
ICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmdC0+YmFzZTsKK30KKworCit2b2lkIER1bXBUb2tlblN0
cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Cisg
ICAgaW50IHRva2VuOworICAgIGNoYXIgc3RyWzEwMF07CisKKyAgICBpZiAoZnAgPT0gMCkgZnAg
PSBzdGRvdXQ7CisgICAgUmV3aW5kVG9rZW5TdHJlYW0ocyk7CisgICAgd2hpbGUgKCh0b2tlbiA9
IFJlYWRUb2tlbihzLCB5eWx2YWxwcCkpID4gMCkgeworICAgICAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CisgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVO
VElGSUVSOgorICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDUFBfU1RSQ09OU1RBTlQ6CisgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIs
IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAgICAgICAgICAgLy9w
cmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlZCAi
LCB5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKKyAgICAgICAgICAgICAgICBzcHJpbnRm
KHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOworICAg
IH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgdG9rZW5zLmMgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2Fy
ZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3Ig
cmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2Vw
dGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rl
cm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0
aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNl
IHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNl
bnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNv
ZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlm
eSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0
aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3Jl
dGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlv
bnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3Ms
IHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9t
IE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBv
dGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQg
YnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVu
dCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mg
b3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2lu
Y29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5W
SURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRI
T1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT
IE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFU
SU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4K
KworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO
RElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitP
VVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJV
VElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIg
VU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBT
VFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvLworLy8gdG9rZW5zLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1RPS0VOU19IKQor
I2RlZmluZSBfX1RPS0VOU19IIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
YXJzZXIuaCIKKworI2RlZmluZSBFT0ZfU1kgKC0xKQorCit0eXBlZGVmIHN0cnVjdCBUb2tlbkJs
b2NrX1JlYyBUb2tlbkJsb2NrOworCit0eXBlZGVmIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgewor
ICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5leHQ7CisgICAgY2hhciAqbmFtZTsKKyAgICBU
b2tlbkJsb2NrICpoZWFkOworICAgIFRva2VuQmxvY2sgKmN1cnJlbnQ7Cit9IFRva2VuU3RyZWFt
OworCitzdHJ1Y3QgVG9rZW5CbG9ja19SZWMgeworICAgIFRva2VuQmxvY2sgKm5leHQ7CisgICAg
aW50IGN1cnJlbnQ7CisgICAgaW50IGNvdW50OworICAgIGludCBtYXg7CisgICAgdW5zaWduZWQg
Y2hhciAqZGF0YTsKK307CisKK2V4dGVybiBUb2tlblN0cmVhbSBzdGRsaWJfY3BwX3N0cmVhbTsK
KworCitUb2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5
UG9vbCAqcG9vbCk7Cit2b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsg
Cit2b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKTsKK3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2sp
OworaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHAp
OworaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2ssIGludCBuYW1lLCBp
bnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKK3ZvaWQgVW5nZXRUb2tlbihpbnQsIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKTsKKworI2lmIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCisKK3ZvaWQg
RHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5TdHJlYW0gKiwgeXlzdHlwZXBwICogeXlsdmFs
cHApOworCisjZW5kaWYgLy8gZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKKworI2VuZGlmIC8v
ICFkZWZpbmVkKF9fVE9LRU5TX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09Q
WUlORy5iaXNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlO
Ry5iaXNvbgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29scy9DT1BZSU5H
LmJpc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwg
UFVCTElDIExJQ0VOU0UNCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKw0KKyBDb3B5
cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzks
IFVTQQ0KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJi
YXRpbSBjb3BpZXMNCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQg
aXMgbm90IGFsbG93ZWQuDQorDQorCQkJICAgIFByZWFtYmxlDQorDQorICBUaGUgbGljZW5zZXMg
Zm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyDQorZnJlZWRv
bSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMNCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8g
c2hhcmUgYW5kIGNoYW5nZSBmcmVlDQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdh
cmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMNCitHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQ0KK0ZvdW5kYXRpb24ncyBz
b2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8N
Cit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2Fy
ZSBpcyBjb3ZlcmVkIGJ5DQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
aW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvDQoreW91ciBwcm9ncmFtcywgdG9vLg0KKw0K
KyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZy
ZWVkb20sIG5vdA0KK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNp
Z25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UNCitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1
dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yDQordGhpcyBzZXJ2aWNl
IGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0
DQoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVz
ZSBwaWVjZXMgb2YgaXQNCitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cg
eW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuDQorDQorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3
ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkDQorYW55b25lIHRvIGRlbnkg
eW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLg0K
K1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVz
IGZvciB5b3UgaWYgeW91DQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBp
ZiB5b3UgbW9kaWZ5IGl0Lg0KKw0KKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNv
cGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcg0KK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlv
dSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdA0KK3lvdSBoYXZl
LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQg
dGhlDQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNv
IHRoZXkga25vdyB0aGVpcg0KK3JpZ2h0cy4NCisNCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMg
d2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQNCisoMikgb2Zm
ZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBj
b3B5LA0KK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuDQorDQorICBBbHNv
LCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2Ug
Y2VydGFpbg0KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJy
YW50eSBmb3IgdGhpcyBmcmVlDQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZp
ZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlDQord2FudCBpdHMgcmVjaXBpZW50
cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28NCit0
aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9u
IHRoZSBvcmlnaW5hbA0KK2F1dGhvcnMnIHJlcHV0YXRpb25zLg0KKw0KKyAgRmluYWxseSwgYW55
IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUNCitwYXRl
bnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2Yg
YSBmcmVlDQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2Vz
LCBpbiBlZmZlY3QgbWFraW5nIHRoZQ0KK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50
IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQ0KK3BhdGVudCBtdXN0IGJlIGxp
Y2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuDQor
DQorICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJp
YnV0aW9uIGFuZA0KK21vZGlmaWNhdGlvbiBmb2xsb3cuDQorDA0KKwkJICAgIEdOVSBHRU5FUkFM
IFBVQkxJQyBMSUNFTlNFDQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJ
U1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9ODQorDQorICAwLiBUaGlzIExpY2Vuc2UgYXBwbGll
cyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zDQorYSBub3RpY2Ug
cGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0
ZWQNCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhl
ICJQcm9ncmFtIiwgYmVsb3csDQorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywg
YW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iDQorbWVhbnMgZWl0aGVyIHRoZSBQcm9n
cmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoNCit0aGF0IGlz
IHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0
LA0KK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0
ZWQgaW50byBhbm90aGVyDQorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlz
IGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbg0KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24i
LikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLg0KKw0KK0FjdGl2aXRpZXMg
b3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90
DQorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAg
VGhlIGFjdCBvZg0KK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0
aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0NCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRl
bnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0gKGluZGVwZW5kZW50
IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuDQorV2hldGhlciB0
aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuDQorDQorICAxLiBZ
b3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFt
J3MNCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlk
ZWQgdGhhdCB5b3UNCitjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24g
ZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlDQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1l
ciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQ0KK25vdGljZXMgdGhhdCByZWZlciB0
byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsNCithbmQg
Z2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBM
aWNlbnNlDQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4NCisNCitZb3UgbWF5IGNoYXJnZSBhIGZl
ZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQNCit5b3Ug
bWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2Ug
Zm9yIGEgZmVlLg0KKw0KKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBv
ZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbg0KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3Jr
IGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQNCitkaXN0cmlidXRlIHN1Y2ggbW9k
aWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDENCithYm92ZSwg
cHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOg0KKw0K
KyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWlu
ZW50IG5vdGljZXMNCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQg
dGhlIGRhdGUgb2YgYW55IGNoYW5nZS4NCisNCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdv
cmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluDQorICAgIHdob2xlIG9y
IGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQ0K
KyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdl
IHRvIGFsbCB0aGlyZA0KKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vu
c2UuDQorDQorICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNv
bW1hbmRzIGludGVyYWN0aXZlbHkNCisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3
aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaA0KKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhl
IG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuDQorICAgIGFubm91bmNl
bWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQ0KKyAg
ICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQg
eW91IHByb3ZpZGUNCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJp
YnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcg0KKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGlu
ZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcw0KKyAgICBMaWNlbnNlLiAgKEV4
Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dA0KKyAgICBk
b2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJh
c2VkIG9uDQorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5v
dW5jZW1lbnQuKQ0KKwwNCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVk
IHdvcmsgYXMgYSB3aG9sZS4gIElmDQoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29y
ayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwNCithbmQgY2FuIGJlIHJlYXNvbmFi
bHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4NCit0aGVtc2Vs
dmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRo
b3NlDQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtz
LiAgQnV0IHdoZW4geW91DQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9m
IGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkDQorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0
cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mDQordGhpcyBMaWNl
bnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUN
CitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVz
cyBvZiB3aG8gd3JvdGUgaXQuDQorDQorVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhp
cyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0DQoreW91ciByaWdodHMgdG8gd29y
ayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvDQorZXhl
cmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZl
IG9yDQorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4NCisNCitJbiBhZGRp
dGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQ
cm9ncmFtDQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFBy
b2dyYW0pIG9uIGEgdm9sdW1lIG9mDQorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0g
ZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXINCit0aGUgc2NvcGUgb2YgdGhpcyBM
aWNlbnNlLg0KKw0KKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFt
IChvciBhIHdvcmsgYmFzZWQgb24gaXQsDQordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29k
ZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mDQorU2VjdGlvbnMgMSBhbmQg
MiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOg0K
Kw0KKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBt
YWNoaW5lLXJlYWRhYmxlDQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucw0KKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEg
bWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwNCisN
CisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQg
bGVhc3QgdGhyZWUNCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBj
aGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXINCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1p
bmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQ0KKyAgICBtYWNoaW5lLXJlYWRhYmxl
IGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlDQorICAgIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVk
aXVtDQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwN
CisNCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZl
ZCBhcyB0byB0aGUgb2ZmZXINCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJj
ZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMNCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25j
b21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UNCisgICAgcmVjZWl2ZWQgdGhl
IHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaA0KKyAg
ICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikNCisNCitUaGUg
c291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdv
cmsgZm9yDQorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3
b3JrLCBjb21wbGV0ZSBzb3VyY2UNCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9y
IGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQ0KK2Fzc29jaWF0ZWQgaW50ZXJmYWNl
IGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bw0KK2NvbnRyb2wgY29t
cGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFz
IGENCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQg
bm90IGluY2x1ZGUNCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBl
aXRoZXIgc291cmNlIG9yIGJpbmFyeQ0KK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMg
KGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlDQorb3BlcmF0aW5nIHN5c3RlbSBv
biB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQNCitpdHNl
bGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuDQorDQorSWYgZGlzdHJpYnV0aW9uIG9mIGV4
ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZw0KK2FjY2VzcyB0byBj
b3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQNCith
Y2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMg
YXMNCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBw
YXJ0aWVzIGFyZSBub3QNCitjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGgg
dGhlIG9iamVjdCBjb2RlLg0KKwwNCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3Vi
bGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQ0KK2V4Y2VwdCBhcyBleHByZXNzbHkg
cHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQNCitvdGhlcndpc2UgdG8g
Y29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMNCit2
b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0
aGlzIExpY2Vuc2UuDQorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMs
IG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXINCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0
aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaA0KK3BhcnRpZXMgcmVtYWlu
IGluIGZ1bGwgY29tcGxpYW5jZS4NCisNCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFj
Y2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdA0KK3NpZ25lZCBpdC4gIEhvd2V2
ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yDQorZGlz
dHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlv
bnMgYXJlDQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNl
bnNlLiAgVGhlcmVmb3JlLCBieQ0KK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dy
YW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91
ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kDQorYWxsIGl0cyB0ZXJt
cyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZw0K
K3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0Lg0KKw0KKyAgNi4gRWFjaCB0aW1lIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1By
b2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZy
b20gdGhlDQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkg
dGhlIFByb2dyYW0gc3ViamVjdCB0bw0KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91
IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyDQorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGll
bnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLg0KK1lvdSBhcmUgbm90
IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRv
DQordGhpcyBMaWNlbnNlLg0KKw0KKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3Vy
dCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudA0KK2luZnJpbmdlbWVudCBvciBmb3Ig
YW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksDQorY29uZGl0
aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVu
dCBvcg0KK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMg
TGljZW5zZSwgdGhleSBkbyBub3QNCitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2Yg
dGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdA0KK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNm
eSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMNCitMaWNlbnNlIGFu
ZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2Ug
eW91DQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxl
LCBpZiBhIHBhdGVudA0KK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVk
aXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkNCithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29w
aWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4NCit0aGUgb25seSB3
YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRv
DQorcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4NCisN
CitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5m
b3JjZWFibGUgdW5kZXINCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNl
IG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvDQorYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFz
IGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXINCitjaXJjdW1zdGFuY2VzLg0K
Kw0KK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0
byBpbmZyaW5nZSBhbnkNCitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBv
ciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQ0KK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24g
aGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUNCitpbnRlZ3JpdHkgb2YgdGhl
IGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMNCitpbXBsZW1lbnRl
ZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUNCitn
ZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3Ry
aWJ1dGVkDQordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFw
cGxpY2F0aW9uIG9mIHRoYXQNCitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3Ig
dG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nDQordG8gZGlzdHJpYnV0ZSBzb2Z0d2Fy
ZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90DQoraW1wb3Nl
IHRoYXQgY2hvaWNlLg0KKw0KK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3Jv
dWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bw0KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhl
IHJlc3Qgb2YgdGhpcyBMaWNlbnNlLg0KKwwNCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5k
L29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluDQorY2VydGFpbiBjb3VudHJp
ZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlDQor
b3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRo
aXMgTGljZW5zZQ0KK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlv
biBsaW1pdGF0aW9uIGV4Y2x1ZGluZw0KK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmli
dXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcNCitjb3VudHJpZXMgbm90IHRodXMg
ZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMNCit0aGUg
bGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4NCisN
CisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBh
bmQvb3IgbmV3IHZlcnNpb25zDQorb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0
aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsDQorYmUgc2ltaWxhciBpbiBzcGly
aXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvDQor
YWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuDQorDQorRWFjaCB2ZXJzaW9uIGlzIGdp
dmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQ0KK3Nw
ZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRv
IGl0IGFuZCAiYW55DQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9s
bG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucw0KK2VpdGhlciBvZiB0aGF0IHZlcnNpb24g
b3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorU29mdHdhcmUg
Rm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51
bWJlciBvZg0KK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uLg0KKw0KKyAgMTAuIElm
IHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIg
ZnJlZQ0KK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJl
bnQsIHdyaXRlIHRvIHRoZSBhdXRob3INCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29m
dHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2FyZSBGb3VuZGF0
aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMN
CittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQg
YnkgdGhlIHR3byBnb2Fscw0KK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBk
ZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQNCitvZiBwcm9tb3RpbmcgdGhlIHNo
YXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4NCisNCisJCQkgICAgTk8gV0FS
UkFOVFkNCisNCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0Yg
Q0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQ0KK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVY
VEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTg0KK09USEVSV0lT
RSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBB
UlRJRVMNCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRA0KK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBB
Uw0KK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRI
IFlPVS4gIFNIT1VMRCBUSEUNCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBU
SEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywNCitSRVBBSVIgT1IgQ09SUkVDVElP
Ti4NCisNCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBM
QVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcNCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBP
UiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SDQorUkVESVNUUklCVVRFIFRI
RSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdF
UywNCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIEFSSVNJTkcNCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8g
VVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEDQorVE8gTE9TUyBPRiBE
QVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVE
IEJZDQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRP
IE9QRVJBVEUgV0lUSCBBTlkgT1RIRVINCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIg
T1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUNCitQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRVMuDQorDQorCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUw0KKwwN
CisJQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFt
cw0KKw0KKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRv
IGJlIG9mIHRoZSBncmVhdGVzdA0KK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVz
dCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQNCitmcmVlIHNvZnR3YXJlIHdoaWNo
IGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4N
CisNCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9n
cmFtLiAgSXQgaXMgc2FmZXN0DQordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2gg
c291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQ0KK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9m
IHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0DQordGhlICJjb3B5
cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91
bmQuDQorDQorICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBi
cmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+DQorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5h
bWUgb2YgYXV0aG9yPg0KKw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAgICBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvcg0KKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0K
KyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0K
KyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzks
IFVTQS4NCisNCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkg
ZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4NCisNCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFj
dGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzDQord2hlbiBpdCBz
dGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToNCisNCisgICAgR25vbW92aXNpb24gdmVyc2lv
biA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yDQorICAgIEdub21vdmlzaW9u
IGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hv
dyB3Jy4NCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRv
IHJlZGlzdHJpYnV0ZSBpdA0KKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNo
b3cgYycgZm9yIGRldGFpbHMuDQorDQorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3
JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlDQorcGFydHMgb2YgdGhl
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNl
IG1heQ0KK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cg
Yyc7IHRoZXkgY291bGQgZXZlbiBiZQ0KK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0
ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uDQorDQorWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVt
cGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXINCitzY2hvb2wsIGlm
IGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBp
Zg0KK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoNCisNCisg
IFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3Qg
aW4gdGhlIHByb2dyYW0NCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBj
b21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLg0KKw0KKyAgPHNpZ25hdHVyZSBvZiBU
eSBDb29uPiwgMSBBcHJpbCAxOTg5DQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQ0KKw0K
K1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGlu
ZyB5b3VyIHByb2dyYW0gaW50bw0KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9n
cmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5DQorY29uc2lkZXIgaXQgbW9yZSB1
c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhl
DQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsDQorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2Uu
DQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4CShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzOCBAQAorRmxleCBjYXJyaWVzIHRoZSBjb3B5cmlnaHQgdXNlZCBmb3IgQlNEIHNv
ZnR3YXJlLCBzbGlnaHRseSBtb2RpZmllZA0KK2JlY2F1c2UgaXQgb3JpZ2luYXRlZCBhdCB0aGUg
TGF3cmVuY2UgQmVya2VsZXkgKG5vdCBMaXZlcm1vcmUhKSBMYWJvcmF0b3J5LA0KK3doaWNoIG9w
ZXJhdGVzIHVuZGVyIGEgY29udHJhY3Qgd2l0aCB0aGUgRGVwYXJ0bWVudCBvZiBFbmVyZ3k6DQor
DQorCUNvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD
YWxpZm9ybmlhLg0KKwlBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKwlUaGlzIGNvZGUgaXMgZGVy
aXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5DQorCVZlcm4gUGF4
c29uLg0KKw0KKwlUaGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGhhcyByaWdodHMgaW4gdGhp
cyB3b3JrIHB1cnN1YW50DQorCXRvIGNvbnRyYWN0IG5vLiBERS1BQzAzLTc2U0YwMDA5OCBiZXR3
ZWVuIHRoZSBVbml0ZWQgU3RhdGVzDQorCURlcGFydG1lbnQgb2YgRW5lcmd5IGFuZCB0aGUgVW5p
dmVyc2l0eSBvZiBDYWxpZm9ybmlhLg0KKw0KKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQNCisJcHJvdmlkZWQgdGhhdDogKDEp
IHNvdXJjZSBkaXN0cmlidXRpb25zIHJldGFpbiB0aGlzIGVudGlyZQ0KKwljb3B5cmlnaHQgbm90
aWNlIGFuZCBjb21tZW50LCBhbmQgKDIpIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nDQorCWJpbmFy
aWVzIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICBgYFRoaXMgcHJvZHVj
dA0KKwlpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs
aWZvcm5pYSwNCisJQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMnJyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBvciBvdGhlcg0KKwltYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uIGFuZCBpbiBhbGwgYWR2ZXJ0aXNpbmcNCisJbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy
ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUuICBOZWl0aGVyIHRoZQ0KKwluYW1lIG9mIHRoZSBV
bml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUNCisJdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUNCisJd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorCVRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNT
IE9SDQorCUlNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04s
IFRIRSBJTVBMSUVEDQorCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVINCisJUFVSUE9TRS4NCisNCitUaGlzIGJhc2ljYWxseSBzYXlzICJk
byB3aGF0ZXZlciB5b3UgcGxlYXNlIHdpdGggdGhpcyBzb2Z0d2FyZSBleGNlcHQNCityZW1vdmUg
dGhpcyBub3RpY2Ugb3IgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFVuaXZlcnNpdHkncyAob3IgdGhl
IGZsZXgNCithdXRob3JzJykgbmFtZSIuDQorDQorTm90ZSB0aGF0IHRoZSAiZmxleC5za2wiIHNj
YW5uZXIgc2tlbGV0b24gY2FycmllcyBubyBjb3B5cmlnaHQgbm90aWNlLg0KK1lvdSBhcmUgZnJl
ZSB0byBkbyB3aGF0ZXZlciB5b3UgcGxlYXNlIHdpdGggc2Nhbm5lcnMgZ2VuZXJhdGVkIHVzaW5n
IGZsZXg7DQorZm9yIHRoZW0sIHlvdSBhcmUgbm90IGV2ZW4gYm91bmQgYnkgdGhlIGFib3ZlIGNv
cHlyaWdodC4NCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvUkVBRE1FCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci90b29scy9SRUFETUUJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvUkVBRE1FCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
IEBACitUaGUgc3RhbmRhbG9uZSBCaXNvbiBhbmQgRmxleCB3aW4zMiBleGVjdXRhYmxlcw0KK3dl
cmUgY3JlYXRlZCBieSBXaWxidXIgU3RyZWV0dCBhbmQgY2FuIGJlIG9idGFpbmVkIGZyb206DQor
aHR0cDovL3VzZXJwYWdlcy5tb25tb3V0aC5jb20vfndzdHJlZXR0L2xleC15YWNjL2xleC15YWNj
Lmh0bWwNCisNCitCaXNvbiB2ZXJzaW9uIDEuMjQ6DQorU2VlIENPUFlJTkcuYmlzb24gZm9yIGxp
Y2Vuc2UgaW5mb3JtYXRpb24uDQorVGhlIG9yaWdpbmFsIHNvdXJjZSBkaXN0cmlidXRpb24gZm9y
IGJpc29uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246DQoraHR0
cDovL2FuZ2xlcHJvamVjdC5nb29nbGVjb2RlLmNvbS9maWxlcy9iaXNvbi56aXANCisNCitGbGV4
IHZlcnNpb24gMi41LjINCitTZWUgQ09QWUlORy5mbGV4IGZvciBsaWNlbnNlIGluZm9ybWF0aW9u
Lg0KK1RoZSBvcmlnaW5hbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBmbGV4IGNhbiBiZSBvYnRh
aW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246DQoraHR0cDovL2FuZ2xlcHJvamVjdC5n
b29nbGVjb2RlLmNvbS9maWxlcy9mbGV4LnppcA0KKw0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci90b29scy9iaXNvbi5oYWlyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9v
bHMvYmlzb24uaGFpcnkJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMv
Ymlzb24uaGFpcnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisKK2V4dGVybiBpbnQg
dGltZWNsb2NrOworCisKK2ludCB5eWVycm9yOwkJLyogIFl5ZXJyb3IgYW5kIHl5Y29zdCBhcmUg
c2V0IGJ5IGd1YXJkcy4JKi8KK2ludCB5eWNvc3Q7CQkvKiAgSWYgeXllcnJvciBpcyBzZXQgdG8g
YSBub256ZXJvIHZhbHVlIGJ5IGEJKi8KKwkJCS8qICBndWFyZCwgdGhlIHJlZHVjdGlvbiB3aXRo
IHdoaWNoIHRoZSBndWFyZAkqLworCQkJLyogIGlzIGFzc29jaWF0ZWQgaXMgbm90IHBlcmZvcm1l
ZCwgYW5kIHRoZQkqLworCQkJLyogIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBpbnZva2Vk
LgkqLworCQkJLyogIFl5Y29zdCBpbmRpY2F0ZXMgdGhlIGNvc3Qgb2YgcGVyZm9ybWluZwkqLwor
CQkJLyogIHRoZSByZWR1Y3Rpb24gZ2l2ZW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlCSovCisJCQkv
KiAgc3ltYm9scy4JCQkJCSovCisKKworLyogIFlZTUFYREVQVEggaW5kaWNhdGVzIHRoZSBzaXpl
IG9mIHRoZSBwYXJzZXIncyBzdGF0ZSBhbmQgdmFsdWUJKi8KKy8qICBzdGFja3MuCQkJCQkJCQkq
LworCisjaWZuZGVmCVlZTUFYREVQVEgKKyNkZWZpbmUJWVlNQVhERVBUSAk1MDAKKyNlbmRpZgor
CisvKiAgWVlNQVhSVUxFUyBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBudW1iZXIg
b2YgcnVsZXMgdGhhdAkqLworLyogIGNvdWxkIGJlIHBsYWNlZCBpbiB0aGUgcnVsZSBxdWV1ZS4g
IFRoYXQgbnVtYmVyIGNvdWxkIGJlIGRldGVybWluZWQJKi8KKy8qICBmcm9tIHRoZSBncmFtbWFy
IGFuZCB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJ1dCwgYXMgeWV0LCBpdCBpcyBub3QuCSovCisK
KyNpZm5kZWYJWVlNQVhSVUxFUworI2RlZmluZQlZWU1BWFJVTEVTCTEwMAorI2VuZGlmCisKKyNp
Zm5kZWYJWVlNQVhCQUNLVVAKKyNkZWZpbmUgWVlNQVhCQUNLVVAJMTAwCisjZW5kaWYKKworCitz
aG9ydAl5eXNzW1lZTUFYREVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8KK1lZU1RZUEUJ
eXl2c1tZWU1BWERFUFRIXTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KK1lZTFRZ
UEUgeXlsc1tZWU1BWERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSovCitzaG9ydAl5
eXJxW1lZTUFYUlVMRVNdOwkvKiAgdGhlIHJ1bGUgcXVldWUJCQkqLworaW50CXl5Y2hhcjsJCQkv
KiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSovCisKK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUg
c2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8K
KworWVlTVFlQRSB5eXR2YWw7CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlIHN0YXRl
CSovCisJCQkJLyogIGF0IHRoZSB0b3Agb2YgdGhlIHN0YXRlIHN0YWNrLgkqLworCitZWVNUWVBF
IHl5dmFsOwkJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJCQkJLyogIHNl
bWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGluZXMJCQkJKi8K
KworWVlMVFlQRSB5eWxsb2M7CQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZAkq
LworCQkJCS8qICBzeW1ib2wJCQkJKi8KKworWVlMVFlQRSB5eXRsb2M7CQkvKiAgbG9jYXRpb24g
ZGF0YSBmb3IgdGhlIHN0YXRlIGF0IHRoZQkqLworCQkJCS8qICB0b3Agb2YgdGhlIHN0YXRlIHN0
YWNrCQkqLworCisKK2ludAl5eW51bmxleGVkOworc2hvcnQJeXl1bmNoYXJbWVlNQVhCQUNLVVBd
OworWVlTVFlQRQl5eXVudmFsW1lZTUFYQkFDS1VQXTsKK1lZTFRZUEUgeXl1bmxvY1tZWU1BWEJB
Q0tVUF07CisKK3Nob3J0ICp5eWdzc3A7CQkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRo
ZSBzdGF0ZQkqLworCQkJCS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9yCSovCisJCQkJ
LyogIHJlY292ZXJ5LgkJCQkqLworCitZWVNUWVBFICp5eWd2c3A7CQkvKiAgYSBwb2ludGVyIHRv
IHRoZSB0b3Agb2YgdGhlIHZhbHVlCSovCisJCQkJLyogIHN0YWNrOyBvbmx5IHNldCBkdXJpbmcg
ZXJyb3IJKi8KKwkJCQkvKiAgcmVjb3ZlcnkuCQkJCSovCisKK1lZTFRZUEUgKnl5Z2xzcDsJCS8q
ICBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUJCSovCisJCQkJLyogIGxvY2F0aW9uIHN0YWNr
OyBvbmx5IHNldCBkdXJpbmcJKi8KKwkJCQkvKiAgZXJyb3IgcmVjb3ZlcnkuCQkJKi8KKworCisv
KiAgWXlnZXQgaXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIHBhcnNlciBhbmQgdGhlIGxleGlj
YWwgYW5hbHl6ZXIuCSovCisvKiAgSXQgaXMgY29zdGx5IHRvIHByb3ZpZGUgc3VjaCBhbiBpbnRl
cmZhY2UsIGJ1dCBpdCBhdm9pZHMgcmVxdWlyaW5nCSovCisvKiAgdGhlIGxleGljYWwgYW5hbHl6
ZXIgdG8gYmUgYWJsZSB0byBiYWNrIHVwIHRoZSBzY2FuLgkJKi8KKworeXlnZXQoKQoreworICBp
ZiAoeXludW5sZXhlZCA+IDApCisgICAgeworICAgICAgeXludW5sZXhlZC0tOworICAgICAgeXlj
aGFyID0geXl1bmNoYXJbeXludW5sZXhlZF07CisgICAgICB5eWx2YWwgPSB5eXVudmFsW3l5bnVu
bGV4ZWRdOworICAgICAgeXlsbG9jID0geXl1bmxvY1t5eW51bmxleGVkXTsKKyAgICB9CisgIGVs
c2UgaWYgKHl5Y2hhciA8PSAwKQorICAgIHl5Y2hhciA9IDA7CisgIGVsc2UKKyAgICB7CisgICAg
ICB5eWNoYXIgPSB5eWxleCgpOworICAgICAgaWYgKHl5Y2hhciA8IDApCisJeXljaGFyID0gMDsK
KyAgICAgIGVsc2UgeXljaGFyID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKyAgICB9Cit9CisKKwor
Cit5eXVubGV4KGNociwgdmFsLCBsb2MpCitpbnQgY2hyOworWVlTVFlQRSB2YWw7CitZWUxUWVBF
IGxvYzsKK3sKKyAgeXl1bmNoYXJbeXludW5sZXhlZF0gPSBjaHI7CisgIHl5dW52YWxbeXludW5s
ZXhlZF0gPSB2YWw7CisgIHl5dW5sb2NbeXludW5sZXhlZF0gPSBsb2M7CisgIHl5bnVubGV4ZWQr
KzsKK30KKworCisKK3l5cmVzdG9yZShmaXJzdCwgbGFzdCkKK3JlZ2lzdGVyIHNob3J0ICpmaXJz
dDsKK3JlZ2lzdGVyIHNob3J0ICpsYXN0OworeworICByZWdpc3RlciBzaG9ydCAqc3NwOworICBy
ZWdpc3RlciBzaG9ydCAqcnA7CisgIHJlZ2lzdGVyIGludCBzeW1ib2w7CisgIHJlZ2lzdGVyIGlu
dCBzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHR2YWxzYXZlZDsKKworICBzc3AgPSB5eWdzc3A7Cisg
IHl5dW5sZXgoeXljaGFyLCB5eWx2YWwsIHl5bGxvYyk7CisKKyAgdHZhbHNhdmVkID0gMDsKKyAg
d2hpbGUgKGZpcnN0ICE9IGxhc3QpCisgICAgeworICAgICAgc3ltYm9sID0geXlzdG9zWypzc3Bd
OworICAgICAgaWYgKHN5bWJvbCA8IFlZTlRCQVNFKQorCXsKKwkgIHl5dW5sZXgoc3ltYm9sLCB5
eXR2YWwsIHl5dGxvYyk7CisJICB0dmFsc2F2ZWQgPSAxOworCSAgc3NwLS07CisJfQorCisgICAg
ICBzc3AtLTsKKworICAgICAgaWYgKGZpcnN0ID09IHl5cnEpCisJZmlyc3QgPSB5eXJxICsgWVlN
QVhSVUxFUzsKKworICAgICAgZmlyc3QtLTsKKworICAgICAgZm9yIChycCA9IHl5cmhzICsgeXlw
cmhzWypmaXJzdF07IHN5bWJvbCA9ICpycDsgcnArKykKKwl7CisJICBpZiAoc3ltYm9sIDwgWVlO
VEJBU0UpCisJICAgIHN0YXRlID0geXl0YWJsZVt5eXBhY3RbKnNzcF0gKyBzeW1ib2xdOworCSAg
ZWxzZQorCSAgICB7CisJICAgICAgc3RhdGUgPSB5eXBnb3RvW3N5bWJvbCAtIFlZTlRCQVNFXSAr
ICpzc3A7CisKKwkgICAgICBpZiAoc3RhdGUgPj0gMCAmJiBzdGF0ZSA8PSBZWUxBU1QgJiYgeXlj
aGVja1tzdGF0ZV0gPT0gKnNzcCkKKwkJc3RhdGUgPSB5eXRhYmxlW3N0YXRlXTsKKwkgICAgICBl
bHNlCisJCXN0YXRlID0geXlkZWZnb3RvW3N5bWJvbCAtIFlZTlRCQVNFXTsKKwkgICAgfQorCisJ
ICAqKytzc3AgPSBzdGF0ZTsKKwl9CisgICAgfQorCisgIGlmICggISB0dmFsc2F2ZWQgJiYgc3Nw
ID4geXlzcykKKyAgICB7CisgICAgICB5eXVubGV4KHl5c3Rvc1sqc3NwXSwgeXl0dmFsLCB5eXRs
b2MpOworICAgICAgc3NwLS07CisgICAgfQorCisgIHl5Z3NzcCA9IHNzcDsKK30KKworCisKK2lu
dAoreXlwYXJzZSgpCit7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQg
eXluOworICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIHNob3J0ICp5eXJxMDsK
KyAgcmVnaXN0ZXIgc2hvcnQgKnl5cHRyOworICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKwor
ICBpbnQgeXlsZW47CisgIFlZTFRZUEUgKnl5bHNwOworICBzaG9ydCAqeXlycTE7CisgIHNob3J0
ICp5eXJxMjsKKworICB5eXN0YXRlID0gMDsKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3Ag
PSB5eXZzIC0gMTsKKyAgeXlsc3AgPSB5eWxzIC0gMTsKKyAgeXlycTAgPSB5eXJxOworICB5eXJx
MSA9IHl5cnEwOworICB5eXJxMiA9IHl5cnEwOworCisgIHl5Y2hhciA9IHl5bGV4KCk7CisgIGlm
ICh5eWNoYXIgPCAwKQorICAgIHl5Y2hhciA9IDA7CisgIGVsc2UgeXljaGFyID0gWVlUUkFOU0xB
VEUoeXljaGFyKTsKKworeXluZXdzdGF0ZToKKworICBpZiAoeXlzc3AgPj0geXlzcyArIFlZTUFY
REVQVEggLSAxKQorICAgIHsKKyAgICAgIHl5YWJvcnQoIlBhcnNlciBTdGFjayBPdmVyZmxvdyIp
OworICAgICAgWVlBQk9SVDsKKyAgICB9CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCit5eXJl
c3VtZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQor
ICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biArPSB5eWNoYXI7CisgIGlmICh5eW4gPCAwIHx8
IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyKQorICAgIGdvdG8geXlkZWZh
dWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAg
ICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5
eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisgIHl5c3RhdGUgPSB5eW47CisKKyAgeXlw
dHIgPSB5eXJxMjsKKyAgd2hpbGUgKHl5cHRyICE9IHl5cnExKQorICAgIHsKKyAgICAgIHl5biA9
ICp5eXB0cisrOworICAgICAgeXlsZW4gPSB5eXIyW3l5bl07CisgICAgICB5eXZzcCAtPSB5eWxl
bjsKKyAgICAgIHl5bHNwIC09IHl5bGVuOworCisgICAgICB5eWd1YXJkKHl5biwgeXl2c3AsIHl5
bHNwKTsKKyAgICAgIGlmICh5eWVycm9yKQorCWdvdG8geXlzZW1lcnI7CisKKyAgICAgIHl5YWN0
aW9uKHl5biwgeXl2c3AsIHl5bHNwKTsKKyAgICAgICorK3l5dnNwID0geXl2YWw7CisKKyAgICAg
IHl5bHNwKys7CisgICAgICBpZiAoeXlsZW4gPT0gMCkKKwl7CisJICB5eWxzcC0+dGltZXN0YW1w
ID0gdGltZWNsb2NrOworCSAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eXRsb2MuZmlyc3RfbGluZTsK
KwkgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eXRsb2MuZmlyc3RfY29sdW1uOworCSAgeXlsc3At
Pmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworCSAgeXlsc3AtPmxhc3RfY29sdW1u
ID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKKwkgIHl5bHNwLT50ZXh0ID0gMDsKKwl9CisgICAg
ICBlbHNlCisJeworCSAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9s
aW5lOworCSAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVt
bjsKKwl9CisJICAKKyAgICAgIGlmICh5eXB0ciA9PSB5eXJxICsgWVlNQVhSVUxFUykKKyAgICAg
ICAgeXlwdHIgPSB5eXJxOworICAgIH0KKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAg
IFlZQUNDRVBUOworCisgIHl5cnEyID0geXlwdHI7CisgIHl5cnExID0geXlycTA7CisKKyAgKisr
eXl2c3AgPSB5eXR2YWw7CisgICorK3l5bHNwID0geXl0bG9jOworICB5eXR2YWwgPSB5eWx2YWw7
CisgIHl5dGxvYyA9IHl5bGxvYzsKKyAgeXlnZXQoKTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisK
K3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAw
KQorICAgIGdvdG8geXllcnJsYWI7CisKK3l5cmVkdWNlOgorCisgICp5eXJxMCsrID0geXluOwor
CisgIGlmICh5eXJxMCA9PSB5eXJxICsgWVlNQVhSVUxFUykKKyAgICB5eXJxMCA9IHl5cnE7CisK
KyAgaWYgKHl5cnEwID09IHl5cnEyKQorICAgIHsKKyAgICAgIHl5YWJvcnQoIlBhcnNlciBSdWxl
IFF1ZXVlIE92ZXJmbG93Iik7CisgICAgICBZWUFCT1JUOworICAgIH0KKworICB5eXNzcCAtPSB5
eXIyW3l5bl07CisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4g
LSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZ
WUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFi
bGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRC
QVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKK3l5c2VtZXJyOgorICAqLS15eXB0ciA9IHl5
bjsKKyAgeXlycTIgPSB5eXB0cjsKKyAgeXl2c3AgKz0geXlyMlt5eW5dOworCit5eWVycmxhYjoK
KworICB5eWdzc3AgPSB5eXNzcDsKKyAgeXlndnNwID0geXl2c3A7CisgIHl5Z2xzcCA9IHl5bHNw
OworICB5eXJlc3RvcmUoeXlycTAsIHl5cnEyKTsKKyAgeXlyZWNvdmVyKCk7CisgIHl5c3RhdGUg
PSAqeXlnc3NwOworICB5eXNzcCA9IHl5Z3NzcDsKKyAgeXl2c3AgPSB5eWd2c3A7CisgIHl5cnEw
ID0geXlycTsKKyAgeXlycTEgPSB5eXJxMDsKKyAgeXlycTIgPSB5eXJxMDsKKyAgZ290byB5eXJl
c3VtZTsKK30KKworJApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBs
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uc2ltcGxlCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OTkgQEAKKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxl
cnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisKKy8qIFNrZWxldG9u
IG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAx
OTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIElu
Yy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGlu
dG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUg
d2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBC
aXNvbi4gICovCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2Fs
bG9jYQorI2Vsc2UgLyogbm90IF9fR05VQ19fICovCisjaWYgSEFWRV9BTExPQ0FfSAorI2luY2x1
ZGUgPGFsbG9jYS5oPgorI2Vsc2UgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8KKyNpZmRlZiBfQUlY
CisgI3ByYWdtYSBhbGxvY2EKKyNlbHNlIC8qIG5vdCBfQUlYICovCitjaGFyICphbGxvY2EgKCk7
CisjZW5kaWYgLyogbm90IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgSEFWRV9BTExPQ0FfSCAqLwor
I2VuZGlmIC8qIG5vdCBfX0dOVUNfXyAqLworCitleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIqIHMp
OworCisjaWZuZGVmIGFsbG9jYQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGFsbG9jYSBfX2J1
aWx0aW5fYWxsb2NhCisjZWxzZSAvKiBub3QgR05VIEMuICAqLworI2lmICghZGVmaW5lZCAoX19T
VERDX18pICYmIGRlZmluZWQgKHNwYXJjKSkgfHwgZGVmaW5lZCAoX19zcGFyY19fKSB8fCBkZWZp
bmVkIChfX3NwYXJjKSB8fCBkZWZpbmVkIChfX3NnaSkKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNl
bHNlIC8qIG5vdCBzcGFyYyAqLworI2lmIChkZWZpbmVkIChNU0RPUykgJiYgIWRlZmluZWQgKF9f
VFVSQk9DX18pKSB8fCBkZWZpbmVkIChXSU4zMikKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbHNl
IC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2lmIGRlZmluZWQoX0FJWCkKKyNpbmNs
dWRlIDxtYWxsb2MuaD4KKyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IE1TRE9TLCBfX1RV
UkJPQ19fLCBvciBfQUlYICovCisjaWZkZWYgX19ocHV4CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgewordm9pZCAqYWxsb2NhICh1bnNpZ25lZCBpbnQpOworfTsKKyNlbHNlIC8qIG5v
dCBfX2NwbHVzcGx1cyAqLwordm9pZCAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5vdCBfX2NwbHVz
cGx1cyAqLworI2VuZGlmIC8qIF9faHB1eCAqLworI2VuZGlmIC8qIG5vdCBfQUlYICovCisjZW5k
aWYgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjZW5kaWYgLyogbm90IHNwYXJjLiAg
Ki8KKyNlbmRpZiAvKiBub3QgR05VIEMuICAqLworI2VuZGlmIC8qIGFsbG9jYSBub3QgZGVmaW5l
ZC4gICovCisKKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRv
IGVhY2ggYmlzb24gcGFyc2VyCisgIHdoZW4gdGhlICVzZW1hbnRpY19wYXJzZXIgZGVjbGFyYXRp
b24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci4KKyAgSXQgd2FzIHdyaXR0ZW4gYnkg
UmljaGFyZCBTdGFsbG1hbiBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2VyCisgIHVzZWQg
d2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIE5vdGU6IHRoZXJl
IG11c3QgYmUgb25seSBvbmUgZG9sbGFyIHNpZ24gaW4gdGhpcyBmaWxlLgorICAgSXQgaXMgcmVw
bGFjZWQgYnkgdGhlIGxpc3Qgb2YgYWN0aW9ucywgZWFjaCBhY3Rpb24KKyAgIGFzIG9uZSBjYXNl
IG9mIHRoZSBzd2l0Y2guICAqLworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDAp
CisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJ
LTIKKyNkZWZpbmUgWVlFT0YJCTAKKyNkZWZpbmUgWVlBQ0NFUFQJcmV0dXJuKDApCisjZGVmaW5l
IFlZQUJPUlQgCXJldHVybigxKQorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJybGFiMQorLyog
TGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuCisgICBUaGlzIHJlbWFpbnMgaGVy
ZSB0ZW1wb3JhcmlseSB0byBlYXNlIHRoZQorICAgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5p
bmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxh
bnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5
ZXJybGFiCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKyNkZWZpbmUg
WVlCQUNLVVAodG9rZW4sIHZhbHVlKSBcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZ
RU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsgeXljaGFyID0gKHRva2VuKSwgeXlsdmFs
ID0gKHZhbHVlKTsJCQlcCisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJ
CVwKKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlc
CisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgeyB5eWVycm9yICgic3ludGF4
IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpOyBZWUVSUk9SOyB9CVwKK3doaWxlICgwKQorCisjZGVm
aW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisjaWZuZGVmIFlZUFVSRQor
I2RlZmluZSBZWUxFWAkJeXlsZXgoKQorI2VuZGlmCisKKyNpZmRlZiBZWVBVUkUKKyNpZmRlZiBZ
WUxTUF9ORUVERUQKKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5
bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgo
Jnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorI2Vsc2UgLyogbm90IFlZTFNQX05FRURFRCAqLwor
I2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCBZWUxFWF9Q
QVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsKQorI2VuZGlmCisjZW5k
aWYgLyogbm90IFlZTFNQX05FRURFRCAqLworI2VuZGlmCisKKy8qIElmIG5vbnJlZW50cmFudCwg
Z2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlICovCisKKyNpZm5kZWYgWVlQVVJFCisKK2ludAl5
eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3ltYm9sCQkqLworWVlTVFlQRQl5eWx2YWw7CQkJ
LyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2thaGVhZCBzeW1i
b2wJCQkqLworCisjaWZkZWYgWVlMU1BfTkVFREVECitZWUxUWVBFIHl5bGxvYzsJCQkvKiAgbG9j
YXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZAkqLworCQkJCS8qICBzeW1ib2wJCQkJKi8KKyNl
bmRpZgorCitpbnQgeXluZXJyczsJCQkvKiAgbnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIg
ICAgICAgKi8KKyNlbmRpZiAgLyogbm90IFlZUFVSRSAqLworCisjaWYgWVlERUJVRyAhPSAwCitp
bnQgeXlkZWJ1ZzsJCQkvKiAgbm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZQkqLworLyog
U2luY2UgdGhpcyBpcyB1bmluaXRpYWxpemVkLCBpdCBkb2VzIG5vdCBzdG9wIG11bHRpcGxlIHBh
cnNlcnMKKyAgIGZyb20gY29leGlzdGluZy4gICovCisjZW5kaWYKKworLyogIFlZSU5JVERFUFRI
IGluZGljYXRlcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MJKi8KKwor
I2lmbmRlZglZWUlOSVRERVBUSAorI2RlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisv
KiAgWVlNQVhERVBUSCBpcyB0aGUgbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8K
KyAgICAoZWZmZWN0aXZlIG9ubHkgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRo
b2QgaXMgdXNlZCkuICAqLworCisjaWYgWVlNQVhERVBUSCA9PSAwCisjdW5kZWYgWVlNQVhERVBU
SAorI2VuZGlmCisKKyNpZm5kZWYgWVlNQVhERVBUSAorI2RlZmluZSBZWU1BWERFUFRIIDEwMDAw
CisjZW5kaWYKKworLyogUHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAq
LworI2lmZGVmIF9fR05VQ19fCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZW5kaWYKKwwKKyNpZiBf
X0dOVUNfXyA+IDEJCS8qIEdOVSBDIGFuZCBHTlUgQysrIGRlZmluZSB0aGlzLiAgKi8KKyNkZWZp
bmUgX195eV9tZW1jcHkoRlJPTSxUTyxDT1VOVCkJX19idWlsdGluX21lbWNweShUTyxGUk9NLENP
VU5UKQorI2Vsc2UJCQkJLyogbm90IEdOVSBDIG9yIEMrKyAqLworI2lmbmRlZiBfX2NwbHVzcGx1
cworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGli
aWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5
c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChmcm9tLCB0bywgY291bnQpCisg
ICAgIGNoYXIgKmZyb207CisgICAgIGNoYXIgKnRvOworICAgICBzaXplX3QgY291bnQ7Cit7Cisg
IHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJl
Z2lzdGVyIHNpemVfdCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9
ICpmKys7Cit9CisKKyNlbHNlIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFRoaXMgaXMgdGhlIG1v
c3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFi
bGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9p
ZAorX195eV9tZW1jcHkgKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBzaXplX3QgY291bnQpCit7Cisg
IHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJl
Z2lzdGVyIHNpemVfdCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9
ICpmKys7Cit9CisKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgWVlQ
QVJTRV9QQVJBTSBhcyB0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNzZWQKKyAgIGlu
dG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKyAgIEl0
IHNob3VsZCBhY3R1YWxseSBwb2ludCB0byBhbiBvYmplY3QuCisgICBHcmFtbWFyIGFjdGlvbnMg
Y2FuIGFjY2VzcyB0aGUgdmFyaWFibGUgYnkgY2FzdGluZyBpdAorICAgdG8gdGhlIHByb3BlciBw
b2ludGVyIHR5cGUuICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmbmRlZiBZWVBBUlNF
X1BBUkFNX0RFQ0wKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFS
QU07CisjZW5kaWYgCisjZWxzZQorI2RlZmluZSBZWVBBUlNFX1BBUkFNCisjZGVmaW5lIFlZUEFS
U0VfUEFSQU1fREVDTAorI2VuZGlmCisKK2V4dGVybiBZWV9ERUNMOworCitpbnQKK3l5cGFyc2Uo
WVlQQVJTRV9QQVJBTV9ERUNMIFlZUEFSU0VfUEFSQU0pIHsKKyAgcmVnaXN0ZXIgaW50IHl5c3Rh
dGU7CisgIHJlZ2lzdGVyIGludCB5eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgcmVn
aXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisgIGludCB5eWVycnN0YXR1czsJLyogIG51bWJlciBvZiB0
b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQgKi8KKyAgaW50IHl5
Y2hhcjEgPSAwOwkJLyogIGxvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRl
ZCkgdG9rZW4gbnVtYmVyICovCisKKyAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhdOwkvKiAgdGhl
IHN0YXRlIHN0YWNrCQkJKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CS8qICB0aGUg
c2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCisKKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsJCS8qICBy
ZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMgKi8KKyAgWVlTVFlQRSAq
eXl2cyA9IHl5dnNhOwkvKiAgdG8gYWxsb3cgeXlvdmVyZmxvdyB0byByZWFsbG9jYXRlIHRoZW0g
ZWxzZXdoZXJlICovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxzYVtZWUlO
SVRERVBUSF07CS8qICB0aGUgbG9jYXRpb24gc3RhY2sJCQkqLworICBZWUxUWVBFICp5eWxzID0g
eXlsc2E7CisgIFlZTFRZUEUgKnl5bHNwOworCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3At
LSwgeXlzc3AtLSwgeXlsc3AtLSkKKyNlbHNlCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3At
LSwgeXlzc3AtLSkKKyNlbmRpZgorCisgIHNpemVfdCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRI
OworCisjaWZkZWYgWVlQVVJFCisgIGludCB5eWNoYXI7CisgIFlZU1RZUEUgeXlsdmFsOworICBp
bnQgeXluZXJyczsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxsb2M7CisjZW5k
aWYKKyNlbmRpZgorCisgIFlZU1RZUEUgeXl2YWw7CQkvKiAgdGhlIHZhcmlhYmxlIHVzZWQgdG8g
cmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0aW9uCSovCisJ
CQkJLyogIHJvdXRpbmVzCQkJCSovCisKKyAgaW50IHl5bGVuOworCisjaWYgWVlERUJVRyAhPSAw
CisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIp
OworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJy
cyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQu
ICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBl
bGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3Rh
eSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQg
ZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3MgLSAx
OworICB5eXZzcCA9IHl5dnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwID0geXlsczsK
KyNlbmRpZgorCisvKiBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiAgeXlzdGF0
ZSAgLiAgKi8KKy8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2tzCisgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcg
YSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworeXluZXdzdGF0ZToKKworICAqKyt5
eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEp
CisgICAgeworICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0
YWNrICovCisgICAgICAvKiBVc2UgY29waWVzIG9mIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24n
dCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8gbWVtb3J5LiAqLworICAgICAgWVlTVFlQRSAqeXl2
czEgPSB5eXZzOworICAgICAgc2hvcnQgKnl5c3MxID0geXlzczsKKyNpZmRlZiBZWUxTUF9ORUVE
RUQKKyAgICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKyNlbmRpZgorCisgICAgICAvKiBHZXQg
dGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAg
Ki8KKyAgICAgIHNpemVfdCBzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3Zl
cmZsb3cKKyAgICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5
IHRoZSBzaXplIG9mCisJIHRoZSBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4g
ICovCisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICAvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25k
aXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisJIGJ1dCB0aGF0IG1pZ2h0
IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworICAgICAgeXlvdmVy
ZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAo
Knl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5eWxzMSwg
c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZWxzZQorICAgICAg
eXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNp
emVvZiAoKnl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5
eXN0YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgeXlzcyA9IHl5c3MxOyB5eXZzID0geXl2czE7
CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0geXlsczE7CisjZW5kaWYKKyNlbHNl
IC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3
YXkuICAqLworICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisJeworCSAgeXll
cnJvcigicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisJICByZXR1cm4gMjsKKwl9CisgICAgICB5
eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKHl5c3RhY2tzaXplID4gWVlNQVhERVBUSCkKKwl5
eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisgICAgICB5eXNzID0gKHNob3J0ICopIGFsbG9jYSAo
eXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFy
ICopeXlzczEsIChjaGFyICopeXlzcywgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICB5
eXZzID0gKFlZU1RZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7
CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXZzMSwgKGNoYXIgKil5eXZzLCBzaXplICog
c2l6ZW9mICgqeXl2c3ApKTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSAoWVlM
VFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyAgICAgIF9f
eXlfbWVtY3B5ICgoY2hhciAqKXl5bHMxLCAoY2hhciAqKXl5bHMsIHNpemUgKiBzaXplb2YgKCp5
eWxzcCkpOworI2VuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNz
cCA9IHl5c3MgKyBzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHNpemUgLSAxOworI2lm
ZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlsc3AgPSB5eWxzICsgc2l6ZSAtIDE7CisjZW5kaWYK
KworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIs
ICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlZFxuIiwgeXlzdGFja3NpemUpOworI2VuZGlmCisK
KyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorCVlZQUJPUlQ7Cisg
ICAgfQorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3Rk
ZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpOworI2VuZGlmCisKKyAgZ290byB5
eWJhY2t1cDsKKyB5eWJhY2t1cDoKKworLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZl
biB0aGUgY3VycmVudCBzdGF0ZS4gICovCisvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdl
IG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy8qIHl5cmVzdW1lOiAq
LworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5j
ZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAg
aWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3du
ID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8K
KworICAvKiB5eWNoYXIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0YKKyAgICAgb3IgYSB2YWxp
ZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKworICBpZiAoeXljaGFyID09IFlZRU1QVFkp
CisgICAgeworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50Zihz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpOworI2VuZGlmCisgICAgICB5eWNoYXIgPSBZWUxF
WDsKKyAgICB9CisKKyAgLyogQ29udmVydCB0b2tlbiB0byBpbnRlcm5hbCBmb3JtIChpbiB5eWNo
YXIxKSBmb3IgaW5kZXhpbmcgdGFibGVzIHdpdGggKi8KKworICBpZiAoeXljaGFyIDw9IDApCQkv
KiBUaGlzIG1lYW5zIGVuZCBvZiBpbnB1dC4gKi8KKyAgICB7CisgICAgICB5eWNoYXIxID0gMDsK
KyAgICAgIHl5Y2hhciA9IFlZRU9GOwkJLyogRG9uJ3QgY2FsbCBZWUxFWCBhbnkgbW9yZSAqLwor
CisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwg
Ik5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSh5eWNoYXIpOworCisjaWYgWVlERUJVRyAhPSAw
CisgICAgICBpZiAoeXlkZWJ1ZykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJOZXh0IHRva2Vu
IGlzICVkICglcyIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisJICAvKiBHaXZlIHRoZSBp
bmRpdmlkdWFsIHBhcnNlciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZSBtZWFuaW5nCisJICAg
ICBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisjaWZkZWYgWVlQ
UklOVAorCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjZW5kaWYKKwkgIGZw
cmludGYgKHN0ZGVyciwgIilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5eW4gKz0geXlj
aGFyMTsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5
eWNoYXIxKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKwor
ICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUu
CisgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKyAgICAgUG9z
aXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0YXRlIGlzIGZp
bmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0IHJldHVybiBz
dWNjZXNzLgorICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisK
KyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5
eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0K
KyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBpZiAoeXluID09
IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tl
bi4gICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50Zihz
dGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFy
MV0pOworI2VuZGlmCisKKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxl
c3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNoYXIgPSBZ
WUVNUFRZOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05FRURFRAorICAq
Kyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIC8qIGNvdW50IHRva2VucyBzaGlmdGVkIHNp
bmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3Igc3RhdHVzLiAgKi8KKyAgaWYg
KHl5ZXJyc3RhdHVzKSB5eWVycnN0YXR1cy0tOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8g
eXluZXdzdGF0ZTsKKworLyogRG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBz
dGF0ZS4gICovCit5eWRlZmF1bHQ6CisKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlm
ICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisvKiBEbyBhIHJlZHVjdGlvbi4gIHl5
biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCit5eXJlZHVjZToK
KyAgeXlsZW4gPSB5eXIyW3l5bl07CisgIGlmICh5eWxlbiA+IDApCisgICAgeXl2YWwgPSB5eXZz
cFsxLXl5bGVuXTsgLyogaW1wbGVtZW50IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbiAqLwor
CisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIGludCBpOwor
CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCks
ICIsCisJICAgICAgIHl5biwgeXlybGluZVt5eW5dKTsKKworICAgICAgLyogUHJpbnQgdGhlIHN5
bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCisgICAgICBmb3IgKGkg
PSB5eXByaHNbeXluXTsgeXlyaHNbaV0gPiAwOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiJXMg
IiwgeXl0bmFtZVt5eXJoc1tpXV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIC0+ICVzXG4i
LCB5eXRuYW1lW3l5cjFbeXluXV0pOworICAgIH0KKyNlbmRpZgorCiskICAgLyogdGhlIGFjdGlv
biBmaWxlIGdldHMgY29waWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2lnbiAqLworICB5
eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisjaWZkZWYgWVlMU1BfTkVFREVECisg
IHl5bHNwIC09IHl5bGVuOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVi
dWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYg
KHN0ZGVyciwgInN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3Ap
CisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRl
cnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisKKyNpZmRl
ZiBZWUxTUF9ORUVERUQKKyAgeXlsc3ArKzsKKyAgaWYgKHl5bGVuID09IDApCisgICAgeworICAg
ICAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKKyAgICAgIHl5bHNwLT5m
aXJzdF9jb2x1bW4gPSB5eWxsb2MuZmlyc3RfY29sdW1uOworICAgICAgeXlsc3AtPmxhc3RfbGlu
ZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5
bHNwLTEpLT5sYXN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT50ZXh0ID0gMDsKKyAgICB9CisgIGVs
c2UKKyAgICB7CisgICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0
X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3Rf
Y29sdW1uOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdyAic2hpZnQiIHRoZSByZXN1bHQgb2Yg
dGhlIHJlZHVjdGlvbi4KKyAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBnb2VzIHRvLAor
ICAgICBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KKyAgICAgYW5kIHRoZSBy
dWxlIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlz
dGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAoeXlzdGF0ZSA+
PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQor
ICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5
ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWVycmxh
YjogICAvKiBoZXJlIG9uIGRldGVjdGluZyBlcnJvciAqLworCisgIGlmICghIHl5ZXJyc3RhdHVz
KQorICAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLworICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJS
T1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXlu
ID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBpbnQgc2l6ZSA9IDA7CisJICBjaGFy
ICptc2c7CisJICBpbnQgeCwgY291bnQ7CisKKwkgIGNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFgg
YXQgLXl5biBpZiBuZWMgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNoZWNrLiAgKi8K
KwkgIGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCSAgICAgICB4IDwgKHNpemVvZih5
eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCSAgICBpZiAoeXljaGVja1t4ICsgeXlu
XSA9PSB4KQorCSAgICAgIHNpemUgKz0gc3RybGVuKHl5dG5hbWVbeF0pICsgMTUsIGNvdW50Kys7
CisJICBtc2cgPSAoY2hhciAqKSBtYWxsb2Moc2l6ZSArIDE1KTsKKwkgIGlmIChtc2cgIT0gMCkK
KwkgICAgeworCSAgICAgIHN0cmNweShtc2csICJwYXJzZSBlcnJvciIpOworCisJICAgICAgaWYg
KGNvdW50IDwgNSkKKwkJeworCQkgIGNvdW50ID0gMDsKKwkJICBmb3IgKHggPSAoeXluIDwgMCA/
IC15eW4gOiAwKTsKKwkJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIg
KikpOyB4KyspCisJCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkgICAgICB7CisJ
CQlzdHJjYXQobXNnLCBjb3VudCA9PSAwID8gIiwgZXhwZWN0aW5nIGAiIDogIiBvciBgIik7CisJ
CQlzdHJjYXQobXNnLCB5eXRuYW1lW3hdKTsKKwkJCXN0cmNhdChtc2csICInIik7CisJCQljb3Vu
dCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yKG1zZyk7CisJICAgICAgZnJlZSht
c2cpOworCSAgICB9CisJICBlbHNlCisJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2
aXJ0dWFsIG1lbW9yeSBleGNlZWRlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBZWUVS
Uk9SX1ZFUkJPU0UgKi8KKwl5eWVycm9yKCJwYXJzZSBlcnJvciIpOworICAgIH0KKworICBnb3Rv
IHl5ZXJybGFiMTsKK3l5ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNlZCBleHBsaWNp
dGx5IGJ5IGFuIGFjdGlvbiAqLworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAg
ICAgIC8qIGlmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4gZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVy
ZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlB
Qk9SVDsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50Zihz
dGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLCB5eWNoYXIsIHl5dG5hbWVbeXlj
aGFyMV0pOworI2VuZGlmCisKKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAgfQorCisgIC8q
IEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuCisgICAgIGFmdGVyIHNoaWZ0
aW5nIHRoZSBlcnJvciB0b2tlbi4gICovCisKKyAgeXllcnJzdGF0dXMgPSAzOwkJLyogRWFjaCBy
ZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzICovCisKKyAgZ290byB5eWVycmhhbmRs
ZTsKKworeXllcnJkZWZhdWx0OiAgLyogY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGlu
ZyBzcGVjaWFsIGZvciB0aGUgZXJyb3IgdG9rZW4uICovCisKKyNpZiAwCisgIC8qIFRoaXMgaXMg
d3Jvbmc7IG9ubHkgc3RhdGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRva2VucworICAg
ICBzaG91bGQgc2hpZnQgdGhlbS4gICovCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOyAgLyog
SWYgaXRzIGRlZmF1bHQgaXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhlcndpc2UgcG9w
IGl0LiovCisgIGlmICh5eW4pIGdvdG8geXlkZWZhdWx0OworI2VuZGlmCisKK3l5ZXJycG9wOiAg
IC8qIHBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVy
cm9yIHRva2VuICovCisKKyAgaWYgKHl5c3NwID09IHl5c3MpIFlZQUJPUlQ7CisgIHl5dnNwLS07
CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsK
KyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAg
IHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjog
c3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRm
IChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7
CisgICAgfQorI2VuZGlmCisKK3l5ZXJyaGFuZGxlOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXlu
ICs9IFlZVEVSUk9SOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5
eW5dICE9IFlZVEVSUk9SKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biA9IHl5dGFi
bGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcp
CisJZ290byB5eWVycnBvcDsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNl
OworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycnBvcDsKKworICBp
ZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAg
aWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwg
Iik7CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQK
KyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICB5eXN0YXRlID0geXluOworICBnb3Rv
IHl5bmV3c3RhdGU7Cit9CkluZGV4OiBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI5NTggQEAKKworI2xpbmUgMyAic3JjL2ludGVybWVkaWF0ZS9nbHNsYW5n
LmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNh
bCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhf
U1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmly
c3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMg
aXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4
IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmlu
ZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkg
c3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9O
X18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYg
eW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8K
KyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9T
IDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhf
aW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBm
bGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGlu
dDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vs
c2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBm
bGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWlu
dDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2VuZGlmIC8qICEg
Qzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9N
SU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRl
ZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAg
KC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9N
QVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmlu
ZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9N
QVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgor
I2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkK
KyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAg
ICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9N
QVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJ
TlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1j
bGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNl
CS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRl
ZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0Vf
Q09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19j
cGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0
CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQt
b2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkg
bmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2Vy
IGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRp
dmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQg
Y2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19V
SShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEVudGVyIGEgc3Rh
cnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRl
ciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1
cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBC
RUdJTiAoeXlfc3RhcnQpID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3Rh
cnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVH
SU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgK
KyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCgoeXlfc3RhcnQpIC0g
MSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9y
IEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VP
RihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0
aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZ
X05FV19GSUxFIHl5cmVzdGFydCh5eWluICApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9D
SEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlf
QlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3Rh
dGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0
ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAg
KChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZ
X1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NU
QVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNl
bmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZf
WVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworZXh0ZXJuIHl5
X3NpemVfdCB5eWxlbmc7CisKK2V4dGVybiBGSUxFICp5eWluLCAqeXlvdXQ7CisKKyNkZWZpbmUg
RU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisj
ZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2Fs
bHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVx
dWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4g
U2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKKyAgICAgKiAgICAgICBl
eGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHl5bGV4LiAK
KyAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGds
b2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5j
ZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKKyAgICAg
KiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQg
aXMgbm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4p
IFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGludCB5eWw7XAorICAgICAg
ICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAgICAgICAgICAg
ICAgICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgwKQorICAgIAorLyogUmV0
dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUg
aW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8q
IFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXls
ZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFj
cm9fYXJnKTtcCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCVlZX1JFU1RPUkVfWVlf
TU9SRV9PRkZTRVQgXAorCQkoeXlfY19idWZfcCkgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21h
Y3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0
KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hf
YnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQg
cG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBp
biBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAq
LworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJl
YWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkg
Ki8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1
ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2Mo
KSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4K
KwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAi
aW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5n
IHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFk
IG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJ
ICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdo
ZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4K
KwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBv
dGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9i
c19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsg
LyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZp
bGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkg
Ki8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2Rl
ZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hl
biBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nl
c3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5k
aWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBz
b3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tl
bnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAu
CisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0
YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNh
biBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBp
bnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsK
KyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBTdGFjayBvZiBp
bnB1dCBidWZmZXJzLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsg
LyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9z
dGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGljIFlZX0JVRkZF
Ul9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjayA9IDA7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICov
CisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBj
YXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGlu
IGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUg
dG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZF
UiAoICh5eV9idWZmZXJfc3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoeXlf
YnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVs
IHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdo
ZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmlu
ZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZlcl9z
dGFja190b3ApXQorCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdo
ZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0YXRp
YyB5eV9zaXplX3QgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYgKi8KK3l5X3NpemVfdCB5eWxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50
IGNoYXJhY3RlciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFy
ICopIDA7CitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGlu
aXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1i
ZXIgKi8KKworLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8g
YnVmZmVyIHN3aXRjaGVzCisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAg
QSBiaXQgb2YgYSBoYWNrIC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZjsKKwordm9pZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Cit2b2lkIHl5
X3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOworWVlfQlVG
RkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Cit2b2lk
IHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eV9mbHVzaF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZ
WV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2
b2lkICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOworc3Rh
dGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2lu
aXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisjZGVmaW5lIFlZ
X0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQorCitZWV9C
VUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7
CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICAp
OworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlf
c2l6ZV90IGxlbiAgKTsKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqeXly
ZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKKwor
I2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRf
aW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0
X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAg
ICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
KTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9s
OyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcChu
KSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9D
SEFSOworCitGSUxFICp5eWluID0gKEZJTEUgKikgMCwgKnl5b3V0ID0gKEZJTEUgKikgMDsKKwor
dHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworZXh0ZXJuIGludCB5eWxpbmVubzsKKworaW50
IHl5bGluZW5vID0gMTsKKworZXh0ZXJuIGNoYXIgKnl5dGV4dDsKKyNkZWZpbmUgeXl0ZXh0X3B0
ciB5eXRleHQKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2
b2lkICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90
eXBlIGN1cnJlbnRfc3RhdGUgICk7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9p
ZCApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAgKTsK
KworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5k
IGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisg
Ki8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJKHl5dGV4dF9wdHIpID0geXlfYnA7
IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwkoeXlfaG9sZF9jaGFy
KSA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsK
KworI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQyCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQz
CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRz
IHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZs
ZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0MDddID0KKyAgICB7ICAgMCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0MywgIDE0MSwgIDE0MCwgIDE0MCwgIDEyNSwgIDEz
MSwKKyAgICAgIDEzNiwgIDEyMCwgIDEyMSwgIDEyOSwgIDEyOCwgIDExNywgIDEyNiwgIDEyNCwg
IDEzMCwgICA4OCwKKyAgICAgICA4OCwgIDExOCwgIDExNCwgIDEzMiwgIDExOSwgIDEzMywgIDEz
NywgICA4NCwgIDEyMiwgIDEyMywKKyAgICAgIDEzNSwgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgIDExNSwg
IDEzNCwgIDExNiwgIDEyNywgIDEzOSwgIDE0MiwgIDE0MSwgIDEzOCwgIDExMSwKKyAgICAgICA5
NywgIDExNiwgIDEwNSwgIDEwMCwgICA5NSwgIDEwMywgICA5MywgIDEwNCwgICA5NCwgICA5MSwK
KyAgICAgICA5MiwgICAgMCwgICA5NiwgICA5MCwgICA4NiwgICA4NywgICAgMCwgICAgMCwgICA4
OCwgIDEyMywKKyAgICAgIDExNSwgIDEyMiwgIDExMiwgIDEwOCwgIDExMCwgIDEwOSwgIDExMywg
ICA4NCwgIDEwMSwgIDEwNywKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKworICAgICAgIDEzLCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDE2LCAgIDE4LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAor
ICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgMTAyLCAgMTA2LCAgMTM4LCAgICAwLCAgICAwLCAg
ICAxLCAgIDkwLCAgICAwLAorICAgICAgICAwLCAgIDg5LCAgIDg1LCAgIDk4LCAgIDk5LCAgIDQ0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0
LCAgIDE0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAg
IDg0LCAgIDIyLCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAg
ICAgIDg0LCAgIDE5LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LAorCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgIDAsICAgOTEs
ICAgIDAsICAgOTAsICAgODQsICAgMjQsCisgICAgICAgODQsICAgODQsICAgODEsICAgODQsICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgMTcsICAgNDcsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODQsICAgNTIsICAgNjYsICAgODQsCisgICAgICAgODQsICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNjMsICAgIDUsICAgMjksCisgICAg
ICAgMzAsICAgMzEsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNTAs
ICAgMjUsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgMzIsICAg
MzMsICAgMzQsICAgMjMsICAgODQsCisgICAgICAgODQsICAgODQsICAgMTEsICAgMzgsICAgMzks
ICAgNDAsICAgNDUsICAgIDgsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgNzcsICAg
NzgsICAgNzksICAgODQsICAgMjYsICAgNjcsICAgMjEsICAgNzQsCisKKyAgICAgICA3NSwgICA3
NiwgICAgMywgICA3MSwgICA3MiwgICA3MywgICA4NCwgICAyMCwgICA2OSwgICA4NCwKKyAgICAg
ICA4NCwgICAzNSwgICAzNiwgICAzNywgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA2NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA0NiwgICA4NCwgICA4MywgICA4NCwgICA4NCwgICAx
NSwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA2NSwgICA2MCwgICA1NSwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA3MCwKKyAgICAgICA1MSwgICA4NCwgICA1OCwgICAy
OCwgICA4NCwgICA4MCwgICA1OSwgICA0MywgICA1MywgICA4NCwKKyAgICAgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA1NCwgICAyNywgICA4NCwKKyAgICAgICA4
NCwgICA4NCwgICAgNCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA0OCwgICAgOSwK
KyAgICAgICA4NCwgICAxMCwgICA4NCwgICA4NCwgICAxMiwgICA2MSwgICA4NCwgICA4NCwgICA4
NCwgICA1NiwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA0OSwgICA2OCwgICA1NywgICAgNywg
ICA2MiwgICAgMiwgICA4MiwKKworICAgICAgICA2LCAgIDQxLCAgIDg0LCAgIDg0LCAgIDQyLCAg
ICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
KyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwg
ICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKKyAgICAgICAg
OCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywK
KyAgICAgICAxOCwgICAxOSwgICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAy
MiwgICAyMywKKyAgICAgICAyNCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwg
ICAyOSwgICAzMCwgICAyNywKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAzMSwgICAzMSwKKyAgICAgICAzMywgICAgMSwgICAz
NCwgICAzNSwgICAzMSwgICAgMSwgICAzNiwgICAzNywgICAzOCwgICAzOSwKKworICAgICAgIDQw
LCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDMxLCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LAor
ICAgICAgIDQ5LCAgIDUwLCAgIDMxLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU2
LCAgIDU3LAorICAgICAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLCAgIDYyLCAgIDYzLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsK
Kworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjRdID0KKyAgICB7ICAgMCwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwg
ICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMywgICAgMywgICAgMSwgICAgMSwg
ICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMiwgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYmFzZVs0MTFdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICA2MywgICAg
MCwgIDYwMCwgIDYwMSwgIDYwMSwgIDYwMSwgIDU3NSwgIDEwMywKKyAgICAgIDEyMywgIDYwMSwg
IDYwMSwgIDU3NCwgIDEyMCwgIDYwMSwgIDExOSwgIDExNywgIDEzMSwgIDE0MywKKyAgICAgIDE1
MSwgIDU3MiwgIDYwMSwgIDE2OSwgIDU3MiwgIDExNCwgIDYwMSwgICAgMCwgIDYwMSwgIDYwMSwK
KyAgICAgIDExNywgICA5NiwgIDEwMiwgIDEzNiwgIDE0MCwgIDEzMCwgIDE1MCwgIDU0NiwgIDEx
MCwgIDE1NiwKKyAgICAgIDU0NSwgIDE2MiwgIDE1MiwgIDUzOSwgIDE2NywgIDU1MiwgIDE3MCwg
IDE2OSwgIDE2NywgIDE4OCwKKyAgICAgIDU0OCwgIDYwMSwgIDExOCwgIDYwMSwgIDYwMSwgIDYw
MSwgIDYwMSwgIDU3NiwgICAgMCwgIDYwMSwKKyAgICAgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwg
IDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDIxNCwKKyAgICAgIDYwMSwgIDU4NiwgIDYw
MSwgIDIyMywgIDIzMiwgIDI1MSwgIDI2NywgICAgMCwgIDI3NywgIDYwMSwKKyAgICAgIDYwMSwg
IDYwMSwgIDU2NCwgIDYwMSwgIDYwMSwgIDYwMSwgIDU2MywgICAgMCwgIDYwMSwgIDYwMSwKKyAg
ICAgIDUzOSwgIDUzMiwgIDUzNSwgIDU0MywgIDU0MiwgIDUyOSwgIDU0NCwgIDUzMSwgIDUzNywg
IDUyNSwKKworICAgICAgNTIyLCAgNTM1LCAgNTIyLCAgNTE5LCAgNTE5LCAgNTI1LCAgNTEzLCAg
NTIwLCAgNTE3LCAgNTI3LAorICAgICAgNTEzLCAgNTE5LCAgNTIyLCAgNTIzLCAgICAwLCAgMjUz
LCAgNTIyLCAgMTYwLCAgNTA4LCAgNTIxLAorICAgICAgNTEyLCAgNTE0LCAgNTA0LCAgNTE4LCAg
NTE1LCAgNTE3LCAgNTAwLCAgNTA1LCAgNTAyLCAgNDkxLAorICAgICAgMTcxLCAgNTA1LCAgNTAx
LCAgNTAzLCAgNDkyLCAgNDk1LCAgMTczLCAgNTAwLCAgNDkyLCAgNTA0LAorICAgICAgMjExLCAg
NDk3LCAgNjAxLCAgNjAxLCAgICAwLCAgMzAzLCAgNTM3LCAgNjAxLCAgMzA5LCAgMzI1LAorICAg
ICAgMzM1LCAgMzQxLCAgICAwLCAgNjAxLCAgNjAxLCAgICAwLCAgNDg4LCAgNDkyLCAgNTAxLCAg
NDk4LAorICAgICAgNDgyLCAgNDgyLCAgMTgzLCAgNDk3LCAgNDk0LCAgNDk0LCAgNDkyLCAgNDg5
LCAgNDgxLCAgNDg3LAorICAgICAgNDc0LCAgNDg1LCAgNDg4LCAgICAwLCAgNDg1LCAgNDczLCAg
NDgwLCAgNDc3LCAgNDgxLCAgNDc0LAorICAgICAgNDYzLCAgNDYyLCAgNDc1LCAgNDc4LCAgNDc1
LCAgNDcwLCAgNDYxLCAgMjQxLCAgNDY2LCAgNDY5LAorICAgICAgNDYwLCAgNDU3LCAgNDYxLCAg
NDY3LCAgNDU4LCAgNDQ5LCAgNDUyLCAgNDUwLCAgNDYwLCAgNDQ2LAorCisgICAgICA0NDQsICA0
NDQsICA0NDYsICA0NDMsICA0NTQsICA0NTMsICAyMjQsICA0NDgsICA0NDMsICA0MzIsCisgICAg
ICAyNTcsICA0NTAsICA0NTIsICA0NDEsICAzNDcsICAzNTMsICAzNTksICAzNjUsICA0NDIsICAg
IDAsCisgICAgICA0NDAsICAyOTIsICAgIDAsICA0MzIsICA0MzAsICA0MzgsICA0MjcsICA0NDQs
ICA0MzMsICAzMTMsCisgICAgICAgIDAsICAgIDAsICA0MjcsICA0MzcsICA0MzcsICA0MjIsICAz
MjksICAgIDAsICAgIDAsICA0MjQsCisgICAgICAzNjksICA0MjUsICA0MTksICA0MTgsICA0MTks
ICA0MTgsICAzNzIsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICA0MTQsICA0
MTUsICA0MjAsICA0MTEsICA0MjQsICA0MTksICA0MTgsICA0MTAsCisgICAgICA0MTQsICA0MDYs
ICA0MDksICA0MTMsICA0MTgsICA0MTcsICA0MDgsICAgIDAsICAgIDAsICA0MTQsCisgICAgICA0
MDMsICA0MDMsICA0MDgsICA0MDcsICA0MDQsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTQs
CisgICAgICA0MDYsICA0MDgsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAz
OTYsICAzOTcsCisgICAgICAzOTEsICA0MDEsICAgIDAsICAgIDAsICAgIDAsICAzOTIsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsCisKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgIDM5OSwgICAgMCwgICAgMCwgIDM5NywKKyAgICAgIDM5MywgICAgMCwgICAgMCwgICAg
MCwgIDM4OSwgIDM4NSwgIDM5MCwgIDM4MCwgIDM5MywgIDM3OSwKKyAgICAgIDM5MiwgIDM4MSwg
IDM4OCwgICAgMCwgIDM4NiwgIDM4OCwgIDM3MiwgIDM4MSwgIDM4NywgIDM4MiwKKyAgICAgIDM3
MCwgICAgMCwgIDM3MiwgICAgMCwgIDM3MSwgIDM3NCwgICAgMCwgIDM2MywgIDM2MiwgIDM2MiwK
KyAgICAgIDM3NSwgICAgMCwgIDM3NywgICAgMCwgIDM3NiwgIDM3NSwgIDM2MCwgIDM3MywgIDM2
MCwgICAgMCwKKyAgICAgICAgMCwgIDM2MywgICAgMCwgICAgMCwgIDM1NSwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgIDM1MiwKKyAgICAgIDM2MywgIDM1NiwgIDM2MiwgIDM1OSwgIDM1NCwgIDM0
NiwgIDI5OCwgICAgMCwgICAgMCwgIDI5MCwKKyAgICAgIDI5NiwgIDI4NSwgICAgMCwgIDI3OCwg
IDI3NCwgIDI2MywgIDI2MSwgIDI2NSwgICAgMCwgICAgMCwKKyAgICAgIDI2NSwgICAgMCwgIDI2
MSwgIDI2MCwgICAgMCwgICAgMCwgIDI1OCwgIDIzNSwgIDI0MCwgICAgMCwKKyAgICAgIDIxMywg
IDIyNywgIDE5MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKwor
ICAgICAgICAwLCAgICAwLCAgMTczLCAgMTM3LCAgICAwLCAgNjAxLCAgMzkwLCAgMzkyLCAgMzk1
LCAgMTQ4CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDEx
XSA9CisgICAgeyAgIDAsCisgICAgICA0MDYsICAgIDEsICA0MDYsICAgIDMsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAg
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsCisgICAgICA0MDcsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDgsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDksICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MTAsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAgICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisKKyAgICAg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNiwgIDQw
NiwgIDQwOCwgIDQwNiwgIDQwOSwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwg
IDQxMCwgIDQwNiwgIDQwNiwgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywK
KyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKworICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA3LCAgNDA3LAorICAgICAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAor
ICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAg
ICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LAorCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAg
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisKKyAgICAgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgICAgMCwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNgorICAgIH0g
OworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY2NV0gPQorICAgIHsgICAw
LAorICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAg
IDE0LCAgIDE1LAorICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIx
LCAgIDIxLCAgIDIxLCAgIDIxLAorICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAg
IDI3LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LAorICAgICAgIDI4LCAgIDI4LCAgIDI5LCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2LAorICAgICAgIDM3LCAgIDM4LCAg
IDM5LCAgIDQwLCAgIDI4LCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDQ1LAorICAgICAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDI4LCAgIDI4LCAgIDI4LCAgIDUyLAor
ICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgICA2LCAgIDU2LCAgIDU3LCAgICA2LCAgICA2LCAgICA2
LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgIDU4LCAg
ICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2
LCAgICA2LCAgICA2LCAgICA2LCAgIDU5LAorICAgICAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAg
IDU5LCAgICA2LCAgICA2LCAgICA2LCAgIDU5LCAgIDU5LAorCisgICAgICAgNTksICAgNTksICAg
NTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisgICAgICAgNTks
ICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisg
ICAgICAgNTksICAgNTksICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgNjEsICAgNjIsICAgNjMs
ICAgNjYsCisgICAgICAgNjgsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAg
ODYsICAgODcsICAgNzEsCisgICAgICAgODksICAxNDMsICAgNjksICAgNjcsICAgNzIsICAxMTIs
ICAgNjQsICAgOTEsICAgOTIsICAxNTMsCisgICAgICAgOTMsICAgOTAsICAgOTQsICAxMTMsICAg
NzMsICAgNzQsICAgOTUsICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgNzUsICAgNzUsICAgNzYs
ICAgNzQsICAxMTQsICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAg
OTYsICAgNzcsICAgODEsICAgNzgsICAxMDMsICA0MDUsICAxMDQsICAxNDQsICAgOTksCisgICAg
ICAgNzcsICAgOTcsICAgNzcsICAxMDAsICAgOTgsICAxMDYsICAxMDUsICAxMjEsICAxMDEsICAg
ODIsCisgICAgICAgNzcsICAgODMsICAgODQsICAxMDcsICAxMDIsICAxMDgsICAxMTUsICAxMTks
ICAxMDksICAgNzgsCisKKyAgICAgIDEyMiwgIDEyMCwgIDEyNCwgIDExNiwgIDExMCwgIDEyOCwg
IDIwMCwgIDE4NiwgIDEzMywgIDQwNCwKKyAgICAgIDExNywgIDEzNCwgIDEyOSwgIDEzMCwgIDEz
NywgIDE4NywgIDIwNywgIDEyNSwgIDEzOCwgIDEzNSwKKyAgICAgIDEyNiwgIDIwMSwgIDEzMSwg
IDEzOSwgIDIwOCwgIDEzMiwgIDEzNiwgIDE0MCwgICA3MCwgICA3MCwKKyAgICAgICA3MCwgICA3
MCwgICA3MCwgICA3MCwgIDIyNSwgIDIyNiwgIDE0MSwgIDE0OSwgIDE0OSwgIDE0OSwKKyAgICAg
IDE0OSwgIDE0OSwgIDE0OSwgIDE0NiwgICA3NCwgIDQwMywgICA3NSwgICA3NSwgICA3NSwgICA3
NSwKKyAgICAgICA3NSwgICA3NiwgIDE1MCwgIDE0NiwgIDIxMiwgIDQwMiwgIDIxMywgIDI1MCwg
IDI1MSwgIDI1MiwKKyAgICAgIDQwMSwgICA3NywgIDE1MCwgICA3NCwgIDI3MSwgICA3NiwgICA3
NiwgICA3NiwgICA3NiwgICA3NiwKKyAgICAgICA3NiwgICA3NywgIDI3MiwgIDI3NiwgIDI3Nywg
IDI3OCwgIDE1MSwgIDM5MiwgIDE1MSwgIDQwMCwKKyAgICAgICA3NywgIDE1MiwgIDE1MiwgIDE1
MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDM5OSwgIDM5MywgICA3NCwKKyAgICAgICA3NywgICA3OSwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgIDM5OCwgIDE4MCwgIDM5NywKKworICAgICAg
Mzk2LCAgMTgxLCAgMTgyLCAgMzk1LCAgMzk0LCAgMTgzLCAgIDc3LCAgMTg0LCAgMjg0LCAgMjg1
LAorICAgICAgMjg2LCAgMzkxLCAgMjE1LCAgMzkwLCAgMjE1LCAgMzg5LCAgIDc3LCAgMjE2LCAg
MjE2LCAgMjE2LAorICAgICAgMjE2LCAgMjE2LCAgMjE2LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5
LCAgMTQ5LCAgMTQ5LCAgMjkzLAorICAgICAgMjk0LCAgMjk1LCAgMzg4LCAgMzg3LCAgMjE3LCAg
Mzg2LCAgMjE3LCAgMzg1LCAgMTUwLCAgMjE4LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4
LCAgMjE4LCAgMzAwLCAgMzAxLCAgMzAyLCAgMTUwLCAgMTUyLAorICAgICAgMTUyLCAgMTUyLCAg
MTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUy
LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LAor
ICAgICAgMjE2LCAgMjE2LCAgMjE2LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4
LCAgMjE4LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMzA0LCAgMzA1LCAg
MzA2LCAgMzEyLCAgMzEzLAorICAgICAgMzE0LCAgIDg4LCAgIDg4LCAgMTQ1LCAgMTQ1LCAgMTQ3
LCAgMTQ3LCAgMTQ3LCAgMzg0LCAgMzgzLAorCisgICAgICAzODIsICAzODEsICAzODAsICAzNzks
ICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCisgICAgICAzNzIsICAzNzEsICAz
NzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCisgICAgICAzNjIs
ICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsCisg
ICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQs
ICAzNDMsCisgICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAz
MzUsICAzMzQsICAzMzMsCisgICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcs
ICAzMjYsICAzMjUsICAzMjQsICAzMjMsCisgICAgICAzMjIsICAzMjEsICAzMjAsICAzMTksICAz
MTgsICAzMTcsICAzMTYsICAzMTUsICAzMTEsICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDcs
ICAzMDMsICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsCisgICAgICAyOTAsICAy
ODksICAyODgsICAyODcsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzUsCisgICAg
ICAyNzQsICAyNzMsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAy
NjMsCisKKyAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1
NSwgIDI1NCwgIDI1MywKKyAgICAgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwg
IDI0MywgIDI0MiwgIDI0MSwgIDI0MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIz
NSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKKyAgICAgIDIyOSwgIDIyOCwgIDIyNywg
IDIyNCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwgIDIxOSwgIDE0OCwKKyAgICAgIDIxNCwgIDIx
MSwgIDIxMCwgIDIwOSwgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDE5OSwKKyAgICAg
IDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4
OSwKKyAgICAgIDE4OCwgIDE4NSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwg
IDE3MywgIDE3MiwKKyAgICAgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2
NSwgIDE2NCwgIDE2MywgIDE2MiwKKyAgICAgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1Nywg
IDE1NiwgIDE1NSwgIDE1NCwgIDE0OCwgICA3MiwKKyAgICAgIDE0MiwgIDEyNywgIDEyMywgIDEx
OCwgIDExMSwgICA4NSwgICA4MCwgICA2NSwgICA2MCwgIDQwNiwKKworICAgICAgICA1LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtb
NjY1XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisKKyAg
ICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywg
ICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywg
ICAxMCwgICAxMCwgICAxMSwgICAxNSwKKyAgICAgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwgICAyNiwgICAyNiwgICAxOSwKKyAgICAgICAzMSwgICA1MywgICAxNywg
ICAxNSwgICAxOSwgICAzOSwgICAxMSwgICAzMiwgICAzMiwgIDQxMCwKKyAgICAgICAzMywgICAz
MSwgICAzMywgICAzOSwgICAxOSwgICAyMCwgICAzMywgICAyMCwgICAyMCwgICAyMCwKKyAgICAg
ICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAzOSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAy
MSwKKyAgICAgICAyMSwgICAzNCwgICAyMCwgICAyNCwgICAyMCwgICAzNiwgIDQwNCwgICAzNiwg
ICA1MywgICAzNSwKKyAgICAgICAyMSwgICAzNCwgICAyMCwgICAzNSwgICAzNCwgICAzNywgICAz
NiwgICA0MywgICAzNSwgICAyNCwKKyAgICAgICAyMSwgICAyNCwgICAyNCwgICAzNywgICAzNSwg
ICAzNywgICA0MCwgICA0MiwgICAzNywgICAyMCwKKworICAgICAgIDQzLCAgIDQyLCAgIDQ1LCAg
IDQwLCAgIDM3LCAgIDQ3LCAgMTMxLCAgMTE4LCAgIDQ4LCAgNDAzLAorICAgICAgIDQwLCAgIDQ4
LCAgIDQ3LCAgIDQ3LCAgIDQ5LCAgMTE4LCAgMTM3LCAgIDQ1LCAgIDQ5LCAgIDQ4LAorICAgICAg
IDQ1LCAgMTMxLCAgIDQ3LCAgIDUwLCAgMTM3LCAgIDQ3LCAgIDQ4LCAgIDUwLCAgIDcwLCAgIDcw
LAorICAgICAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgMTYzLCAgMTYzLCAgIDUwLCAgIDc0LCAg
IDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDcwLCAgIDc1LCAgMzkzLCAgIDc1
LCAgIDc1LCAgIDc1LCAgIDc1LAorICAgICAgIDc1LCAgIDc1LCAgIDc0LCAgIDcwLCAgMTQxLCAg
MzkyLCAgMTQxLCAgMTg4LCAgMTg4LCAgMTg4LAorICAgICAgMzkxLCAgIDc1LCAgIDc0LCAgIDc2
LCAgMjA3LCAgIDc2LCAgIDc2LCAgIDc2LCAgIDc2LCAgIDc2LAorICAgICAgIDc2LCAgIDc1LCAg
MjA3LCAgMjExLCAgMjExLCAgMjExLCAgIDc3LCAgMzc3LCAgIDc3LCAgMzg5LAorICAgICAgIDc2
LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgMzg4LCAgMzc3LCAgIDc5LAor
ICAgICAgIDc2LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgMzg3LCAgMTE2
LCAgMzg0LAorCisgICAgICAzODMsICAxMTYsICAxMTYsICAzODEsICAzNzgsICAxMTYsICAgNzks
ICAxMTYsICAyMjIsICAyMjIsCisgICAgICAyMjIsICAzNzYsICAxNDYsICAzNzUsICAxNDYsICAz
NzQsICAgNzksICAxNDYsICAxNDYsICAxNDYsCisgICAgICAxNDYsICAxNDYsICAxNDYsICAxNDks
ICAxNDksICAxNDksICAxNDksICAxNDksICAxNDksICAyMzAsCisgICAgICAyMzAsICAyMzAsICAz
NzIsICAzNzEsICAxNTAsICAzNzAsICAxNTAsICAzNjcsICAxNDksICAxNTAsCisgICAgICAxNTAs
ICAxNTAsICAxNTAsICAxNTAsICAxNTAsICAyMzcsICAyMzcsICAyMzcsICAxNDksICAxNTEsCisg
ICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTIsICAxNTIsICAxNTIsICAxNTIs
ICAxNTIsCisgICAgICAxNTIsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAy
MTYsICAyMTYsICAyMTYsCisgICAgICAyMTYsICAyMTYsICAyMTYsICAyMTcsICAyMTcsICAyMTcs
ICAyMTcsICAyMTcsICAyMTcsICAyMTgsCisgICAgICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAy
MTgsICAyNDEsICAyNDEsICAyNDEsICAyNDcsICAyNDcsCisgICAgICAyNDcsICA0MDcsICA0MDcs
ICA0MDgsICA0MDgsICA0MDksICA0MDksICA0MDksICAzNjYsICAzNjUsCisKKyAgICAgIDM2NCwg
IDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1NSwgIDM1MiwgIDM0OSwgIDM0OCwgIDM0NywKKyAg
ICAgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNiwgIDMzNSwg
IDMzMywKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMy
MywgIDMyMiwgIDMyMSwKKyAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwg
IDMxMSwgIDMxMCwgIDMwNywgIDI5NiwKKyAgICAgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4
MiwgIDI4MSwgIDI4MCwgIDI3NSwgIDI3NCwgIDI3MywKKyAgICAgIDI3MiwgIDI3MSwgIDI3MCwg
IDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwKKyAgICAgIDI2MCwgIDI1
OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI0NiwgIDI0NSwKKyAgICAg
IDI0NCwgIDI0MywgIDI0MiwgIDI0MCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIyOSwgIDIy
OCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMSwgIDIxOSwgIDIxNCwgIDIxMywg
IDIxMiwgIDIxMCwKKyAgICAgIDIwOSwgIDIwOCwgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIw
MiwgIDIwMSwgIDIwMCwgIDE5OSwKKworICAgICAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0
LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LAorICAgICAgMTg3LCAgMTg2LCAgMTg1LCAg
MTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAorICAgICAgMTc3LCAgMTc2
LCAgMTc1LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LAorICAgICAg
MTY2LCAgMTY1LCAgMTY0LCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAgMTQ3
LAorICAgICAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM2LCAgMTM1LCAgMTM0LCAgMTMzLCAg
MTMyLCAgMTMwLAorICAgICAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIz
LCAgMTIyLCAgMTIxLCAgMTIwLAorICAgICAgMTE5LCAgMTE3LCAgMTE0LCAgMTEzLCAgMTEyLCAg
MTExLCAgMTEwLCAgMTA5LCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAgMTA0LCAgMTAz
LCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LAorICAgICAgIDk2LCAgIDk1LCAg
IDk0LCAgIDkzLCAgIDkyLCAgIDkxLCAgIDg3LCAgIDgzLCAgIDcyLCAgIDU4LAorICAgICAgIDUx
LCAgIDQ2LCAgIDQ0LCAgIDQxLCAgIDM4LCAgIDI1LCAgIDIyLCAgIDE0LCAgICA5LCAgICA1LAor
CisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisg
ICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYKKyAgICB9IDsKKworLyogVGFibGUgb2YgYm9vbGVh
bnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0M10gPQorICAgIHsgICAwLAorMSwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwg
MCwgMCwgICAgIH07CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOworc3RhdGljIGNoYXIgKnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKK2V4dGVybiBpbnQg
eXlfZmxleF9kZWJ1ZzsKK2ludCB5eV9mbGV4X2RlYnVnID0gMDsKKworLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90
X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAorY2hhciAqeXl0ZXh0OworLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisqLworLyog
QmFzZWQgb24KK0FOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbgorCitJbiAxOTg1LCBK
ZWZmIExlZSBwdWJsaXNoZWQgdGhpcyBMZXggc3BlY2lmaWNhdGlvbiB0b2dldGhlciB3aXRoIGEg
WWFjYyAKK2dyYW1tYXIgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMgZHJhZnQuICBUb20g
U3RvY2tmaXNjaCByZXBvc3RlZCAKK2JvdGggdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdCBv
cmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgCit0byBxdWVzdGlvbiAxNy4yNSBv
ZiB0aGUgY29tcC5sYW5nLmMgRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgCitm
aWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLiAKKworSSBpbnRlbmQgdG8g
a2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFt
bWFyIAorYXMgcG9zc2libGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlzY292ZXIgZGlz
Y3JlcGFuY2llcy4gCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUgCisqLworI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mgb25seSBwcmFnbWEg
Ki8KKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQorI2Vu
ZGlmCisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7CisKK2V4dGVybiBp
bnQgeXlwYXJzZSh2b2lkKik7CisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5
eWx2YWwsdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKigo
VFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkpCisgCisjZGVmaW5lIFlZX0lOUFVU
KGJ1ZixyZXN1bHQsbWF4X3NpemUpIChyZXN1bHQgPSB5eV9pbnB1dChidWYsIG1heF9zaXplKSkK
KworLyoKK1RPRE8oYWxva3ApOiB5eWxpbmVubyBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQg
ZmxleC5leGUgaW4gY29tcGlsZXIvdG9vbHMuCitSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVz
aXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKworI2RlZmluZSBJTklUSUFMIDAKKyNk
ZWZpbmUgRklFTERTIDEKKworI2lmbmRlZiBZWV9FWFRSQV9UWVBFCisjZGVmaW5lIFlZX0VYVFJB
X1RZUEUgdm9pZCAqCisjZW5kaWYKKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQg
KTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUg
dmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKwor
aW50IHl5bGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2b2lkICk7CisK
K3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHl5
Z2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNl
cl9kZWZpbmVkICApOworCitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lkIHl5c2V0X2lu
ICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQg
eXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCB5eWdldF9sZW5nICh2
b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAo
dm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCisvKiBN
YWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZp
bml0aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAK
KyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh2b2lkICk7CisjZWxz
ZQorZXh0ZXJuIGludCB5eXdyYXAgKHZvaWQgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYg
eXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBj
aGFyICosaW50ICk7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiApOworI2VuZGlmCisKKyNpZm5kZWYgWVlf
Tk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQg
KTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh2b2lkICk7CisjZW5kaWYKKworI2VuZGlmCisK
Ky8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5k
ZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRp
ZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRh
cmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMo
KSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1
c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAx
LCB5eW91dCApCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1
ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJu
ZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQo
YnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXl5X3NpemVf
dCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdl
dGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNo
YXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBc
CisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJP
UiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAor
CQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0g
ZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJ
eyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJP
UiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJ
CX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAor
XAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNh
Z2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4
dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNv
bWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisg
Ki8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlf
TlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRp
dGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmlu
ZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJy
b3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1z
ZykgeXlfZmF0YWxfZXJyb3IoIG1zZyApCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxp
emF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJh
dGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICog
ZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlf
REVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB5eWxleCAodm9pZCk7CisKKyNkZWZpbmUgWVlf
REVDTCBpbnQgeXlsZXggKHZvaWQpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBl
eGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5
eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04K
KyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRo
ZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVB
SyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNU
SU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3
b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5
X2FjdDsKKyAgICAKKwlpZiAoICEoeXlfaW5pdCkgKQorCQl7CisJCSh5eV9pbml0KSA9IDE7CisK
KyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAh
ICh5eV9zdGFydCkgKQorCQkJKHl5X3N0YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICov
CisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCAp
CisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJ
CQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PQorCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOworCQl9CisKKwkJeXlf
bG9hZF9idWZmZXJfc3RhdGUoICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRp
bCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlfY19idWZfcCk7
CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIp
OworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2Nw
OworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCWRvCisJ
CQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3Ap
XTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJKHl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlKSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJKHl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MpID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsK
KwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwor
CQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MDcgKQorCQkJCQl5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsr
eXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0MDYgKTsKKwkJeXlf
Y3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGUpOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlf
YWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJ
aWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
eXlfYWN0XSApCisJCQl7CisJCQlpbnQgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXls
ZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAgCisg
ICAgeXlsaW5lbm8rKzsKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVz
ZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkK
Kwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3Qg
YmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9O
ICovCisJCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJCXl5X2NwID0gKHl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3MpOworCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19z
dGF0ZSk7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CisvKiBydWxlIDEgY2Fu
IG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyAvKiA/PyBjYXJyaWFnZSBhbmQvb3IgbGlu
ZS1mZWVkPyAqLyB9OworCVlZX0JSRUFLCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQorCVlZX0JSRUFL
CitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oSElHSF9QUkVDSVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJF
Q0lTSU9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKwlZWV9CUkVB
SworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFBSRUNJU0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFUVFJJQlVURSk7IH0K
KwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKENPTlNUX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihVTklG
T1JNKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZBUllJTkcpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTE6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oQlJFQUspOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCit7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oRE8pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQorCVlZX0JSRUFLCitj
YXNlIDE1OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFdISUxFKTsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElGKTsgfQorCVlZX0JSRUFLCitj
YXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKEVMU0UpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5fUVVBTCk7IH0KKwlZWV9CUkVB
SworY2FzZSAxOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihPVVRfUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VU
VVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTk9VVF9RVUFMKTsg
fQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihG
TE9BVF9UWVBFKTsgfQorCVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybihJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VU
VVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRl
clR5cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQorCVlZX0JSRUFLCitjYXNlIDI0Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorCVlZX0JS
RUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKwlZ
WV9CUkVBSworY2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihESVNDQVJEKTsgfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJFVFVSTik7
IH0KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4o
TUFUUklYMik7IH0KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4oTUFUUklYMyk7IH0KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZX1JVTEVfU0VUVVAK
K3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzMjoKK1lZX1JV
TEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzM6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQorCVlZX0JSRUFLCitj
YXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KKwlZWV9C
UkVBSworY2FzZSAzNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsg
fQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAo
SVZFQzMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsg
cmV0dXJuIChJVkVDNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQorCVlZX0JSRUFLCitjYXNlIDM5OgorWVlfUlVMRV9T
RVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFm
dGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDA6CitZ
WV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRl
eHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSA0MToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBh
cnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNDI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVJD
VUJFOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0
dXJuKFNUUlVDVCk7IH0KKwlZWV9CUkVBSworY2FzZSA0NDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDU6CitZWV9SVUxF
X1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNl
IDQ2OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZ
WV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDg6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDQ5OgorWVlfUlVMRV9TRVRV
UAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoK
K1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNTE6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4g
MDsgfQorCVlZX0JSRUFLCitjYXNlIDUyOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAKK3sg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTQ6CitZWV9S
VUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitj
YXNlIDU1OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7
IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTc6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDU4OgorWVlfUlVMRV9T
RVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1
OToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNjA6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDYxOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZl
ZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAK
K3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjM6CitZ
WV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFL
CitjYXNlIDY0OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKwlZWV9CUkVBSworY2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjY6CitZWV9SVUxFX1NFVFVQCit7ICBQ
YVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDY3OgorWVlfUlVM
RV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2Fz
ZSA2ODoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNjk6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZX1JVTEVfU0VU
VVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzI6
CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JS
RUFLCitjYXNlIDczOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzU6CitZWV9SVUxFX1NFVFVQCit7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDc2OgorWVlf
UlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSwor
Y2FzZSA3NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNzg6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDc5OgorWVlfUlVMRV9TRVRVUAoreyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVf
U0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
ODE6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZ
X0JSRUFLCitjYXNlIDgyOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgODQ6CitZWV9SVUxFX1NFVFVQ
Cit7ICAKKyAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IAorICAgcHl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIFBhSWRlbnRPclR5
cGUoKnB5eWx2YWwtPmxleC5zdHJpbmcsIHBhcnNlQ29udGV4dCwgcHl5bHZhbC0+bGV4LnN5bWJv
bCk7IAorfQorCVlZX0JSRUFLCitjYXNlIDg1OgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDAp
OyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODY6CitZWV9SVUxFX1NF
VFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3Ry
dG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSA4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0
LCAiIiwgIiIpOyBwYXJzZUNvbnRleHQucmVjb3ZlcigpOyByZXR1cm4gMDt9CisJWVlfQlJFQUsK
K2Nhc2UgODg6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFO
VCk7IH0KKwlZWV9CUkVBSworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRv
Zih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTA6
CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwt
PmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENP
TlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgIGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFs
LT5sZXgubGluZSwgcGFyc2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKKwlZ
WV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNVQl9B
U1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTVVMX0FTU0lHTik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihESVZfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1PRF9BU1NJR04pOyB9
CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTk6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
UklHSFRfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDEwMToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMjoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPUl9B
U1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAzOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOQ19PUCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxMDQ6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oREVDX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfT1ApOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTA2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKE9SX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNzoKK1lZX1JVTEVfU0VU
VVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfT1ApOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKExFX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwOToKK1lZX1JV
TEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihHRV9PUCk7
IH0KKwlZWV9CUkVBSworY2FzZSAxMTA6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oRVFfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTExOgor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE5F
X09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX09QKTsgfQorCVlZX0JSRUFLCitjYXNl
IDExMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihSSUdIVF9PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTQ6CitZWV9SVUxFX1NFVFVQCit7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE1OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE3OgorWVlfUlVMRV9T
RVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5p
blR5cGVQYXJlbikgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09N
TUEpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTE9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDEx
OToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQorCVlZX0JSRUFL
CitjYXNlIDEyMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VDb250ZXh0LmluVHlw
ZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIx
OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KKwlZWV9C
UkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oTEVGVF9CUkFDS0VUKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMzoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdI
VF9CUkFDS0VUKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyNDoKK1lZX1JVTEVfU0VUVVAKK3sgQkVH
SU4oRklFTERTKTsgIHJldHVybihET1QpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI1OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJBTkcpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKERBU0gpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI3OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERF
KTsgfQorCVlZX0JSRUFLCitjYXNlIDEyODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihQTFVTKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyOToK
K1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihT
VEFSKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTTEFTSCk7IH0KKwlZWV9CUkVBSworY2FzZSAx
MzE6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oUEVSQ0VOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzI6CitZWV9SVUxFX1NFVFVQCit7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KKwlZWV9C
UkVBSworY2FzZSAxMzM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM0OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZFUlRJ
Q0FMX0JBUik7IH0KKwlZWV9CUkVBSworY2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQCit7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ0FSRVQpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTM2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKEFNUEVSU0FORCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzc6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVFU1RJT04pOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTM4OgorWVlfUlVMRV9TRVRVUAoreyAKK0JFR0lOKElOSVRJQUwpOyAg
ICAgIAorICAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87ICAgICAKKyAgICBweXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICAgcmV0dXJuIEZJRUxE
X1NFTEVDVElPTjsgfQorCVlZX0JSRUFLCitjYXNlIDEzOToKK1lZX1JVTEVfU0VUVVAKK3t9CisJ
WVlfQlJFQUsKK2Nhc2UgMTQwOgorLyogcnVsZSAxNDAgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVM
RV9TRVRVUAoreyAgfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nh
c2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6Cit7ICgmcGFyc2VDb250ZXh0KS0+QWZ0ZXJFT0YgPSB0
cnVlOyB5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsgeXl0ZXJtaW5hdGUoKTt9
CisJWVlfQlJFQUsKK2Nhc2UgMTQxOgorWVlfUlVMRV9TRVRVUAoreyBwYXJzZUNvbnRleHQuaW5m
b1NpbmsuaW5mbyA8PCAiRkxFWDogVW5rbm93biBjaGFyICIgPDwgeXl0ZXh0IDw8ICJcbiI7Cisg
ICAgICAgICAgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSAxNDI6CitZWV9SVUxFX1NFVFVQ
CitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyog
QW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJ
aW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSAoeXl0ZXh0X3B0
cikpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04u
ICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZG
U0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxl
IG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5l
ZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3Vy
Y2UgYW5kIGNhbGxlZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIK
KwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVz
ZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEK
KwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2Uu
CisJCQkgKi8KKwkJCSh5eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5
aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5
X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0
aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4g
aW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRl
cyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0
ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICov
CisJCWlmICggKHl5X2NfYnVmX3ApIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwor
CQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQkoeXlfY19idWZfcCkgPSAoeXl0
ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93
IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRu
J3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0
CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAq
IHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2Fu
dCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1
biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxf
dHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgKTsKKworCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29u
c3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKysoeXlfY19idWZfcCk7CisJCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisK
KwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoICApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQl7CisJCQkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAwOworCisJCQkJaWYgKCB5
eXdyYXAoICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2Fy
ZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkg
KiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBp
ZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwor
CQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdl
dCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSAr
IFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJ
CQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYg
KCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOwor
CQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCQkoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRl
eHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV07CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVm
X3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5
eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZB
VEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0
aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQg
b2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiB5eWxleCAqLworCisvKiB5eV9n
ZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1
cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENI
IC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3Vy
cmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8K
K3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lkKQoreworICAgIAlyZWdpc3RlciBj
aGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0
ZXIgY2hhciAqc291cmNlID0gKHl5dGV4dF9wdHIpOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9f
bW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKworCWlmICggKHl5X2NfYnVmX3ApID4gJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdICkKKwkJWVlfRkFU
QUxfRVJST1IoCisJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBi
dWZmZXIgbWlzc2VkIiApOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2Zp
bGxfYnVmZmVyID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNv
IHRoaXMgaXMgYW4gRU9GLiAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAt
IFlZX01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFy
YWN0ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJ
ICovCisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7
CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJ
ICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJ
CX0KKwkJfQorCisJLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92
ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChp
bnQpICgoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCWZvciAoIGkgPSAwOyBp
IDwgbnVtYmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJh
bnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKSA9IDA7
CisKKwllbHNlCisJCXsKKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUg
YnVmZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhl
IGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVG
RkVSOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICgoeXlfY19idWZf
cCkgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJ
CXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlp
ZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6
ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlf
Y2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFy
cy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6
ZSArIDIgICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0
IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hf
YnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlu
cHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJKHl5X2NfYnVmX3ApID0gJmItPnl5X2NoX2J1
Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJ
CX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9f
cmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJ
CVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90
b19tb3ZlXSksCisJCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlpZiAo
ICh5eV9uX2NoYXJzKSA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01P
UkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXly
ZXN0YXJ0KHl5aW4gICk7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9B
Q1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0
YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJ
CXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKCh5
eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0gKHl5X25fY2hh
cnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0K
KworCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBj
aGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHZvaWQpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUg
PSAoeXlfc3RhcnQpOworCisJZm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FE
SjsgeXlfY3AgPCAoeXlfY19idWZfcCk7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlp
ZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQkoeXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCSh5eV9sYXN0X2FjY2VwdGluZ19j
cG9zKSA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50
X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJy
ZW50X3N0YXRlID49IDQwNyApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlf
Y107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVu
dF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNp
dGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRl
ID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZSApCit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICAJcmVnaXN0ZXIgY2hhciAq
eXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlm
ICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQkoeXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mp
ID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9
IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQwNyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQor
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQw
Nik7CisKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNp
Zm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlp
bnB1dCAodm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYK
KworeworCWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwor
CWlmICggKih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8q
IHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJu
LgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4g
aXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJl
YWxseSBhIE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsg
LyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5X2NfYnVmX3Ap
IC0gKHl5dGV4dF9wdHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoK
KwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRo
YXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBu
ZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHBy
b2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcg
dG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAor
CQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNl
dCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJCQkJCS8qRkFM
TFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJ
CWlmICggeXl3cmFwKCApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICggISAoeXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2Nw
bHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0
KCk7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJ
CQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJ
LyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHBy
ZXNlcnZlIHl5dGV4dCAqLworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOworCisJ
aWYgKCBjID09ICdcbicgKQorCQkgICAKKyAgICB5eWxpbmVubysrOworOworCisJcmV0dXJuIGM7
Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBz
d2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUg
QSByZWFkYWJsZSBzdHJlYW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
cmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQg
eXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApeworICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgKTsKKwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixp
bnB1dF9maWxlICk7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qKiBTd2l0Y2gg
dG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5l
dyBpbnB1dCBidWZmZXIuCisgKiAKKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAg
KFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9ETy4gV2Ugc2hv
dWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0
aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShu
ZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRl
KCApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3
aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkg
dGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2Fs
bGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkg
Ki8KKwkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0YXRpYyB2b2lk
IHl5X2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hhcnMpID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRyKSA9ICh5eV9j
X2J1Zl9wKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9ob2xkX2NoYXIp
ID0gKih5eV9jX2J1Zl9wKTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlu
cHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICog
QHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBk
b3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQg
YnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIg
IChGSUxFICogZmlsZSwgaW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAK
KwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUgKSAgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0g
c2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFu
IHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1i
dWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9j
KGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiAp
OworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZlcihiLGZpbGUg
KTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFt
IGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICogCisgKi8KKyAg
ICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7CisgICAgCisJ
aWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAv
KiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICApOworCisJeXlmcmVlKCh2b2lk
ICopIGIgICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIu
CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24g
dGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBF
T0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFU
RSAgYiwgRklMRSAqIGZpbGUgKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIAorCXl5
X2ZsdXNoX2J1ZmZlcihiICk7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9m
aWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhl
biB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHl5cmVz
dGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2Fz
ZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8K
KyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVu
byA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGIt
Pnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoq
IERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lO
UFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBm
bHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogCisgKi8KKyAgICB2b2lk
IHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAJaWYgKCAhIGIg
KQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVk
IHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0
cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMK
KwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2Jv
bCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIg
PT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKwor
LyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJl
Y29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRl
IHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUg
bmV3IHN0YXRlLgorICogIAorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZF
Ul9TVEFURSBuZXdfYnVmZmVyICkKK3sKKyAgICAJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJ
cmV0dXJuOworCisJeXllbnN1cmVfYnVmZmVyX3N0YWNrKCk7CisKKwkvKiBUaGlzIGJsb2NrIGlz
IGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwkvKiBPbmx5IHB1c2gg
aWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVO
VF9CVUZGRVIpCisJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSsrOworCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVm
ZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCSh5eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YpID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0
aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBu
ZXcgdG9wLgorICogIAorICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAodm9pZCkKK3sKKyAg
ICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJeXlfZGVsZXRlX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUiApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
CisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApCisJCS0tKHl5X2J1ZmZlcl9zdGFja190
b3ApOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRl
KCApOworCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7CisJfQorfQorCisvKiBB
bGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMg
c3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9i
dWZmZXJfc3RhY2sgKHZvaWQpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICAKKwlp
ZiAoISh5eV9idWZmZXJfc3RhY2spKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0
IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5l
ciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQg
YW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICov
CisJCW51bV90b19hbGxvYyA9IDE7CisJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSk7CisJCWlmICggISAoeXlfYnVmZmVyX3N0
YWNrKSApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVu
c3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KCh5eV9idWZmZXJf
c3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKKwkJCQkKKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCQkoeXlf
YnVmZmVyX3N0YWNrX3RvcCkgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCh5eV9idWZmZXJf
c3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJCS8qIEluY3Jl
YXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQg
Z3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxv
YyA9ICh5eV9idWZmZXJfc3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1ZmZlcl9zdGFj
aykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYworCQkJCQkJCQkoKHl5X2J1
ZmZlcl9zdGFjayksCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJ
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZl
cl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNl
dCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXpl
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZmZXJfc3RhY2tf
bWF4KSA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBi
dWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNp
emUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJl
dHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9C
VUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXpl
ICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAg
ICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3Np
emUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVh
dmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVS
X1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlm
ICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlf
c2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIi
IHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYg
PSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAw
OworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2
ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVy
KGIgICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3Rh
dGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKKyAqIHNj
YW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1p
bmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVz
IHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHl5X3NjYW5f
Ynl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5
Y29uc3QgY2hhciAqIHl5c3RyICkKK3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0
cixzdHJsZW4oeXlzdHIpICk7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRl
IHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAor
ICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUg
Ynl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIAorICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFU
RSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXli
eXRlc19sZW4gKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXpl
X3QgbiwgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5n
IHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwli
dWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCWZv
ciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ld
OworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICk7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwor
CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0
aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9i
dWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisj
ZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxf
ZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICkKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVy
ciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVk
ZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRl
ZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVm
ZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNy
b19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7
XAorCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCSh5eV9jX2J1Zl9wKSA9
IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2Nf
YnVmX3ApOyBcCisJCSooeXlfY19idWZfcCkgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19t
YWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMg
KGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4KKyAqIAorICovCitpbnQgeXlnZXRfbGluZW5vICAodm9pZCkK
K3sKKyAgICAgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBpbnB1
dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqeXlnZXRfaW4gICh2b2lkKQoreworICAgICAgICBy
ZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIAorICovCitG
SUxFICp5eWdldF9vdXQgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8q
KiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCit5eV9zaXpl
X3QgeXlnZXRfbGVuZyAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8q
KiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworCitjaGFyICp5eWdldF90ZXh0ICAo
dm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgY3VycmVu
dCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogCisgKi8KK3ZvaWQgeXlz
ZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICkKK3sKKyAgICAKKyAgICB5eWxpbmVubyA9IGxp
bmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3Qg
ZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBB
IHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8K
K3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICkKK3sKKyAgICAgICAgeXlpbiA9IGluX3N0
ciA7Cit9CisKK3ZvaWQgeXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgKQoreworICAgICAgICB5
eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh2b2lkKQoreworICAgICAg
ICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVi
dWcgKQoreworICAgICAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworc3RhdGljIGlu
dCB5eV9pbml0X2dsb2JhbHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlz
IHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0
ZSBoZXJlLgorICAgICAqLworCisgICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVz
cyB0aGUgb3B0aW9uIGlzIGVuYWJsZWQuICovCisgICAgeXlsaW5lbm8gPSAgMTsKKyAgICAKKyAg
ICAoeXlfYnVmZmVyX3N0YWNrKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsK
KyAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IChjaGFy
ICopIDA7CisgICAgKHl5X2luaXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVm
aW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOwor
ICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gKEZJTEUgKikgMDsKKyAgICB5
eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNl
OiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxl
eF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogeXlsZXhfZGVzdHJveSBp
cyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQg
eXlsZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAgCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3Rh
Y2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVS
KXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJ
LyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSgoeXlfYnVmZmVyX3N0YWNr
KSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9i
YWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUg
bmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwg
b2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCApOworCisgICAgcmV0dXJuIDA7Cit9CisK
Ky8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0
X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47
ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RS
TEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwly
ZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJu
IG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkKK3sKKwly
ZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnl5cmVhbGxvYyAgKHZv
aWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikg
aW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0
aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2
b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVj
YXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQor
CSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29u
dmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1
cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlm
cmVlICh2b2lkICogcHRyICkKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVh
bGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAi
eXl0YWJsZXMiCisKKy8vSW5jbHVkaW5nIFByZS1wcm9jZXNzb3IuCitleHRlcm4gIkMiIHsKKyAg
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCit9IAorCisvLwor
Ly8gVGhlIFlZX0lOUFVUIG1hY3JvIGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRoaXMgY291bGQg
YmUganVzdCBwdXQgaW50bworLy8gdGhlIG1hY3JvIGRpcmVjdGx5LgorLy8KKworaW50IHl5X2lu
cHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplKQoreworICAgIGludCBsZW47CisKKyAgICBpZiAo
KGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5w
dXQgYnVmZmVyIG92ZXJmbG93LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIg
dXNlcyBSRUpFQ1QiICk7CisKKyAgICBidWZbbGVuXSA9ICcgJzsKKwlyZXR1cm4gbGVuKzE7Cit9
CisKKy8vCisvLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuICBXZSBz
ZXQgdXAgZ2xvYmFscyB1c2VkIGJ5CisvLyB5eXdyYXAuCisvLworLy8gUmV0dXJucyAwIGZvciBz
dWNjZXNzLCBhcyBwZXIgeXlwYXJzZSgpLgorLy8KK2ludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBh
cmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4
dExvY2FsKQoreworICAgIGludCBhcmd2MGxlbjsKKyAgICAKKyAgICBTY2FuRnJvbVN0cmluZyhh
cmd2WzBdKTsgCisgICAgCisgICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50IENvbXBpbGVyIFBhcnNl
IGNvbnRleHQgaW50byB0aGUgY3BwIHN0cnVjdHVyZS4KKwljcHAtPnBDID0gKHZvaWQqKSZwYXJz
ZUNvbnRleHRMb2NhbDsKKwkKKwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAwKQorICAgICAgICByZXR1
cm4gMTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAg
ICBpZiAoIWFyZ3ZbaV0pIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKDAs
ICJOdWxsIHNoYWRlciBzb3VyY2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dExvY2FsLnJlY292ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmICghc3RyTGVuKSB7CisgICAgICAgIGFyZ3YwbGVuID0gKGlu
dCkgc3RybGVuKGFyZ3ZbMF0pOworICAgICAgICBzdHJMZW4gICA9ICZhcmd2MGxlbjsKKyAgICB9
CisgICAgeXlyZXN0YXJ0KDApOworICAgICgmcGFyc2VDb250ZXh0TG9jYWwpLT5BZnRlckVPRiA9
IGZhbHNlOworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0g
YXJndjsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBhcmdjOworICAgIGNwcC0+UGFTdHJMZW4gICA9
IHN0ckxlbjsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisgICAgeXlsaW5lbm8g
ICA9IDE7CisgICAKKyAgICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAKKyAgICAgICAg
aW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsKKyAgICAgICAg
aWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVk
RnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisgICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKGNoYXIgKnMp
IAoreworICAgIGlmICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKKyAg
ICAgICAgaWYgKGNwcC0+dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKKyAgICAgICAgICAgIEdsb2Jh
bFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAicHJlLW1hdHVy
ZSBFT0YiLCBzLCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsKKyAgICAgICAg
R2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfSAgICAgICAgICAgIAorfQorCit2
b2lkIFBhUmVzZXJ2ZWRXb3JkKCkKK3sKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5
bGluZW5vLCAiUmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7CisgICAgR2xvYmFsUGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlk
LCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5bWJvbCkKK3sK
KyAgICBzeW1ib2wgPSBwYXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5kKGlkKTsKKyAg
ICBpZiAocGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAm
JiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0g
c3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5p
c1VzZXJUeXBlKCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlw
ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gVFlQRV9OQU1FOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiBJREVOVElGSUVSOworfQorCitpbnQgUGFQYXJzZUNvbW1lbnQo
aW50ICZsaW5lbm8sIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGlu
dCB0cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgaW50IG5leHRDaGFyOworICAgIAorICAgIHdoaWxl
ICh0cmFuc2l0aW9uRmxhZyAhPSAyKSB7CisgICAgICAgIG5leHRDaGFyID0geXlpbnB1dCgpOwor
ICAgICAgICBpZiAobmV4dENoYXIgPT0gJ1xuJykKKyAgICAgICAgICAgICBsaW5lbm8rKzsKKyAg
ICAgICAgc3dpdGNoIChuZXh0Q2hhcikgeworICAgICAgICBjYXNlICcqJyA6CisgICAgICAgICAg
ICB0cmFuc2l0aW9uRmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
LycgOiAgLyogaWYgc3RhciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRo
ZSBlbmQgb2YgY29tbWVudCAqLworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25GbGFnID09IDEp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMSA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT0YgOgorICAgICAgICAgICAgLyogUmFpc2UgZXJyb3Ig
bWVzc2FnZSBoZXJlICovCisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcih5eWxp
bmVubywgIkVuZCBvZiBzaGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50LiIsICIiLCAi
IiwgIiIpOworICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICByZXR1cm4gWVlfTlVMTDsgCisgICAgICAgIGRlZmF1bHQgOiAgLyogQW55IG90aGVy
IGNoYXJhY3RlciB3aWxsIGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAqLworICAgICAgICAgICAg
dHJhbnNpdGlvbkZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQor
CitleHRlcm4gIkMiIHsKKwordm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7
CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2Uo
RVByZWZpeE5vbmUsIG1zZyk7Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBj
aGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorfQorCit2b2lkIENQ
UFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICop
Y3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOworICAgIEdsb2JhbFBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1z
ZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5
bnRheCBlcnJvciIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7Cit9CisKK3ZvaWQgU2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eWxpbmVubyAm
PSB+U291cmNlTG9jTGluZU1hc2s7CisgICAgeXlsaW5lbm8gfD0gbGluZTsKK30KKwordm9pZCBT
ZXRTdHJpbmdOdW1iZXIoaW50IHN0cmluZykKK3sKKyAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwg
U291cmNlTG9jU3RyaW5nU2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOwor
fQorCitpbnQgR2V0U3RyaW5nTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5vID4+
IDE2OworfQorCitpbnQgR2V0TGluZU51bWJlcih2b2lkKQoreworICAgIHJldHVybiB5eWxpbmVu
byAmIFNvdXJjZUxvY0xpbmVNYXNrOworfQorCit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCkKK3sK
KyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVN
YXNrKQorICAgICAgICArK3l5bGluZW5vOworfQorCit2b2lkIERlY0xpbmVOdW1iZXIodm9pZCkK
K3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkKKyAgICAgICAg
LS15eWxpbmVubzsKK30KKwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2Vucywg
aW50IG51bVRva2VucykKK3sgICAgCisgICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1p
emUiKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0
b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhw
ZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJv
biIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEub3B0aW1pemUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwg
Im9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQ
cmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29w
dGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAo
dG9rZW5zWzBdLCAiZGVidWciKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJl
Y3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tl
bnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNv
bnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNv
bnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3Ig
J2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisjaWZkZWYgUFJB
R01BX1RBQkxFCisgICAgICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmlj
IHByYWdtYQorICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRl
eHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdt
YQorICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGlt
cGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBv
bmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlr
ZQorICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisgICAgICAgIC8v
IFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWlu
c3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAgICAgICAgCisg
ICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAh
c3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICBUUHJh
Z21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRl
eHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9y
IGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vu
c1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sy
XTsKKyAgICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+
PSAyKSB7CisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAg
ICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21h
VGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
cHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tl
bnNbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxl
WyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vu
ZGlmIC8vIFBSQUdNQV9UQUJMRQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihjaGFyICpzdHJp
bmcpCit7CisgICAgVFN0cmluZyBzdHJTcmM7CisgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcp
OworCisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKK30KKworY29u
c3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCkKK3sKKyAgICBjcHAtPkVyck1zZyA9ICgoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICByZXR1cm4g
Y3BwLT5FcnJNc2c7Cit9CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7CisgICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJlaGF2aW9yIEdl
dEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3RyY21wKCJyZXF1
aXJlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlm
ICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhFbmFibGU7
CisgICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0
dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkK
KyAgICAgICAgcmV0dXJuIEVCaFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQUFNoSW5mb0xv
Z01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9y
dGVkIikuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIH0gICAgICAg
IAorfQorCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1l
LCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBH
ZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRl
cmF0b3IgaXRlcjsKKyAgICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAvLyBzcGVjaWFsIGNhc2Vk
IGZvciBhbGwgZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Cisg
ICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVC
aEVuYWJsZSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcg
Y2Fubm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaXRlciA9ICAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRl
ciAhPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAg
ICAgICAgfSAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29u
dGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkp
OworICAgICAgICBpZiAoaXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5z
aW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsK
KyAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBv
cnRlZCIpLmNfc3RyKCkpOyAgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVCaEVuYWJsZToKKyAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgICAgICAgIGNh
c2UgRUJoRGlzYWJsZToKKyAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24g
JyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOworICAgICAgICAgICAgICAgICgo
VFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdh
cm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgIH0KK30KKyAgICAgICAgCit9
ICAvLyBleHRlcm4gIkMiCisKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKK3sKKyAgICB5eV9zdGFy
dCA9IDE7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZ190YWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZ190YWIuY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDgzMCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuMy4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNv
bidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5
LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBv
ciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5
b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNl
ciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVy
ZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1h
eSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hp
Y2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91
dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg
ICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVj
aWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBp
bgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNr
ZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRo
ZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3lt
Ym9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAor
ICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2
ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4
cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhj
ZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJy
YXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBT
UEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmlu
ZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVS
U0lPTiAiMi4zIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9O
QU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisK
Ky8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKworCisv
KiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUK
KyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIg
YW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0g
eXl0b2tlbnR5cGUgeworICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9O
ID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9O
ID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAg
ICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9U
WVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAg
IENPTlRJTlVFID0gMjY5LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAg
Rk9SID0gMjcyLAorICAgICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVU
VVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJW
RUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElW
RUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgyLAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0
ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBN
QVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwK
KyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlO
RyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAg
IFdISUxFID0gMjk1LAorICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0g
Mjk3LAorICAgICBJREVOVElGSUVSID0gMjk4LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAg
IEZMT0FUQ09OU1RBTlQgPSAzMDAsCisgICAgIElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09M
Q09OU1RBTlQgPSAzMDIsCisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9P
UCA9IDMwNCwKKyAgICAgUklHSFRfT1AgPSAzMDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAg
REVDX09QID0gMzA3LAorICAgICBMRV9PUCA9IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAg
IEVRX09QID0gMzEwLAorICAgICBORV9PUCA9IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAg
ICBPUl9PUCA9IDMxMywKKyAgICAgWE9SX09QID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1
LAorICAgICBESVZfQVNTSUdOID0gMzE2LAorICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBN
T0RfQVNTSUdOID0gMzE4LAorICAgICBMRUZUX0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNT
SUdOID0gMzIwLAorICAgICBBTkRfQVNTSUdOID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIy
LAorICAgICBPUl9BU1NJR04gPSAzMjMsCisgICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExF
RlRfUEFSRU4gPSAzMjUsCisgICAgIFJJR0hUX1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNL
RVQgPSAzMjcsCisgICAgIFJJR0hUX0JSQUNLRVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAz
MjksCisgICAgIFJJR0hUX0JSQUNFID0gMzMwLAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1B
ID0gMzMyLAorICAgICBDT0xPTiA9IDMzMywKKyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlD
T0xPTiA9IDMzNSwKKyAgICAgQkFORyA9IDMzNiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElM
REUgPSAzMzgsCisgICAgIFBMVVMgPSAzMzksCisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNI
ID0gMzQxLAorICAgICBQRVJDRU5UID0gMzQyLAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAg
ICBSSUdIVF9BTkdMRSA9IDM0NCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJF
VCA9IDM0NiwKKyAgICAgQU1QRVJTQU5EID0gMzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAg
fTsKKyNlbmRpZgorLyogVG9rZW5zLiAgKi8KKyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmlu
ZSBISUdIX1BSRUNJU0lPTiAyNTkKKyNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZp
bmUgTE9XX1BSRUNJU0lPTiAyNjEKKyNkZWZpbmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRS
SUJVVEUgMjYzCisjZGVmaW5lIENPTlNUX1FVQUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUK
KyNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKKyNkZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJS
RUFLIDI2OAorI2RlZmluZSBDT05USU5VRSAyNjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVM
U0UgMjcxCisjZGVmaW5lIEZPUiAyNzIKKyNkZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQg
Mjc0CisjZGVmaW5lIFJFVFVSTiAyNzUKKyNkZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMz
IDI3NworI2RlZmluZSBCVkVDNCAyNzgKKyNkZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMz
IDI4MAorI2RlZmluZSBJVkVDNCAyODEKKyNkZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAy
ODMKKyNkZWZpbmUgVkVDNCAyODQKKyNkZWZpbmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklY
MyAyODYKKyNkZWZpbmUgTUFUUklYNCAyODcKKyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUg
T1VUX1FVQUwgMjg5CisjZGVmaW5lIElOT1VUX1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkx
CisjZGVmaW5lIFZBUllJTkcgMjkyCisjZGVmaW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9U
WVBFIDI5NAorI2RlZmluZSBXSElMRSAyOTUKKyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmlu
ZSBTQU1QTEVSQ1VCRSAyOTcKKyNkZWZpbmUgSURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9O
QU1FIDI5OQorI2RlZmluZSBGTE9BVENPTlNUQU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAz
MDEKKyNkZWZpbmUgQk9PTENPTlNUQU5UIDMwMgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAz
CisjZGVmaW5lIExFRlRfT1AgMzA0CisjZGVmaW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNf
T1AgMzA2CisjZGVmaW5lIERFQ19PUCAzMDcKKyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdF
X09QIDMwOQorI2RlZmluZSBFUV9PUCAzMTAKKyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFO
RF9PUCAzMTIKKyNkZWZpbmUgT1JfT1AgMzEzCisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUg
TVVMX0FTU0lHTiAzMTUKKyNkZWZpbmUgRElWX0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lH
TiAzMTcKKyNkZWZpbmUgTU9EX0FTU0lHTiAzMTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5Cisj
ZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjAKKyNkZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUg
WE9SX0FTU0lHTiAzMjIKKyNkZWZpbmUgT1JfQVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdO
IDMyNAorI2RlZmluZSBMRUZUX1BBUkVOIDMyNQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNk
ZWZpbmUgTEVGVF9CUkFDS0VUIDMyNworI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmlu
ZSBMRUZUX0JSQUNFIDMyOQorI2RlZmluZSBSSUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMz
MQorI2RlZmluZSBDT01NQSAzMzIKKyNkZWZpbmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMz
NAorI2RlZmluZSBTRU1JQ09MT04gMzM1CisjZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0gg
MzM3CisjZGVmaW5lIFRJTERFIDMzOAorI2RlZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0
MAorI2RlZmluZSBTTEFTSCAzNDEKKyNkZWZpbmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9B
TkdMRSAzNDMKKyNkZWZpbmUgUklHSFRfQU5HTEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAz
NDUKKyNkZWZpbmUgQ0FSRVQgMzQ2CisjZGVmaW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVF
U1RJT04gMzQ4CisKKworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJh
dGlvbnMuICAqLworCisKKworLyogQmFzZWQgb246CitBTlNJIEMgWWFjYyBncmFtbWFyCisKK0lu
IDE5ODUsIEplZmYgTGVlIHB1Ymxpc2hlZCBoaXMgWWFjYyBncmFtbWFyICh3aGljaCBpcyBhY2Nv
bXBhbmllZCBieSBhCittYXRjaGluZyBMZXggc3BlY2lmaWNhdGlvbikgZm9yIHRoZSBBcHJpbCAz
MCwgMTk4NSBkcmFmdCB2ZXJzaW9uIG9mIHRoZQorQU5TSSBDIHN0YW5kYXJkLiAgVG9tIFN0b2Nr
ZmlzY2ggcmVwb3N0ZWQgaXQgdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdAorb3JpZ2luYWws
IGFzIG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21w
LmxhbmcuYworRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgZmlsZSB1c2VuZXQv
bmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4KKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZl
cnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIGFzCitwb3Nz
aWJsZTsgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLgor
CitKdXR0YSBEZWdlbmVyLCAxOTk1CisqLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFi
bGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VDb250ZXh0TG9j
YWwKKy8qCitUT0RPKGFsb2twKTogWVlQQVJTRV9QQVJBTV9ERUNMIGlzIG9ubHkgaGVyZSB0byBz
dXBwb3J0IG9sZCBiaXNvbi5leGUgaW4KK2NvbXBpbGVyL3Rvb2xzLiBSZW1vdmUgaXQgd2hlbiB3
ZSBjYW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyNkZWZpbmUgWVlQ
QVJTRV9QQVJBTV9ERUNMIHZvaWQqCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQYXJzZUNvbnRl
eHQqKShwYXJzZUNvbnRleHRMb2NhbCkpCisjZGVmaW5lIFlZTEVYX1BBUkFNIHBhcnNlQ29udGV4
dExvY2FsCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQq
IHBhcnNlQ29udGV4dExvY2FsKQorZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7CisKKyNkZWZp
bmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVT
aExhbmdGcmFnbWVudCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBw
YXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9y
dGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICBcCisg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorfQorCisjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0
LT5sYW5ndWFnZSAhPSBFU2hMYW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0
ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKwor
I2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2Ug
IT0gRVNoTGFuZ0ZyYWdtZW50KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVy
cyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUEFD
S19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdQ
YWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVOUEFDS19PTkxZKFMs
IEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cihMLCAiIHN1cHBvcnRlZCBpbiB1bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAg
ICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNLX1VOUEFDS19PTkxZKFMsIEwpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYg
KHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1VucGFjayAmJiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNo
TGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjay91bnBhY2sgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworLyogRW5hYmxpbmcgdHJh
Y2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKwor
LyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJs
aW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5l
IFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRl
ZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBFCisKK3sKKyAg
ICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAg
ICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAg
ICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5
bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VM
b2MgbGluZTsKKyAgICAgICAgVE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFp
ciBub2RlUGFpcjsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOwor
ICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9
OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAg
ICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllcjsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtOworICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAg
ICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKK30KKy8q
IExpbmUgMTkzIG9mIHlhY2MuYy4gICovCisKKwlZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZ
WVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlT
VFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlm
CisKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
CisKKworICAgIGV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSosIHZvaWQqKTsKKworCisvKiBMaW5l
IDIxNiBvZiB5YWNjLmMuICAqLworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2Vu
ZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91
aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlm
CisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsK
KyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2ln
bmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2lu
dDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQx
NiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlw
ZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVf
SU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQx
NjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMg
IGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMg
IGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBz
aXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgor
I2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5k
ZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYg
RU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVu
dGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5l
IFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQt
dmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8
fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNl
CisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1
bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlv
bnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChp
bnQgaSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEIChpKQorICAgIGludCBpOworI2VuZGlmCit7
CisgIHJldHVybiBpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZ
WUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7
IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNF
X0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMg
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5l
ZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgor
IyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5l
ZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAg
ICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAg
IGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZk
ZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJu
aW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9
IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAv
KiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRv
bSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBh
cyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2Eg
KE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAg
ICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFj
ayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJl
YXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5k
ZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYm
ICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8
IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBm
cmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0ggMQor
IyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFM
TE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJf
SCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2Mg
KFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlm
CisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAg
IGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisj
ZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKwor
I2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3Bs
dXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklW
SUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFj
ayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzczsKKyAg
WVlTVFlQRSB5eXZzOworICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0
d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFD
S19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXpl
IG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0
aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAg
KChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAg
ICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZS
T00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAu
ICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dO
VUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0
aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNl
CisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAor
CXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAo
Q291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJ
CQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxv
Y2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAg
IGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQg
bmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMg
dGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHBy
b3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRl
ZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAg
ICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5
eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNr
OwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZ
WVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5
cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNl
bmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3Rh
dGUuICAqLworI2RlZmluZSBZWUZJTkFMICA2OQorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4g
WVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDEzNzgKKworLyogWVlOVE9LRU5TIC0tIE51
bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDk0CisvKiBZWU5OVFMg
LS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAgNzgKKy8qIFlZ
TlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAxOTUKKy8q
IFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDMw
MAorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1B
WFVUT0sgICAzNDgKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAorICAoKHVuc2ln
bmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZU
T0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJl
c3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5z
bGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCisgICAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisgICAgICA2NSwgICAg
NjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3
NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAg
ICA4MiwgICAgODMsICAgIDg0LAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5
LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MworfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJI
U1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZ
TiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlwcmhzW10g
PQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAgOSwgICAgMTEs
ICAgIDEzLCAgICAxNywgICAgMTksCisgICAgICAyNCwgICAgMjYsICAgIDMwLCAgICAzMywgICAg
MzYsICAgIDM4LCAgICA0MCwgICAgNDIsICAgIDQ2LCAgICA0OSwKKyAgICAgIDUyLCAgICA1NSwg
ICAgNTcsICAgIDYwLCAgICA2NCwgICAgNjcsICAgIDY5LCAgICA3MSwgICAgNzMsICAgIDc1LAor
ICAgICAgNzgsICAgIDgxLCAgICA4NCwgICAgODYsICAgIDg4LCAgICA5MCwgICAgOTIsICAgIDk2
LCAgIDEwMCwgICAxMDIsCisgICAgIDEwNiwgICAxMTAsICAgMTEyLCAgIDExNCwgICAxMTgsICAg
MTIyLCAgIDEyNiwgICAxMzAsICAgMTMyLCAgIDEzNiwKKyAgICAgMTQwLCAgIDE0MiwgICAxNDQs
ICAgMTQ2LCAgIDE0OCwgICAxNTIsICAgMTU0LCAgIDE1OCwgICAxNjAsICAgMTY0LAorICAgICAx
NjYsICAgMTcyLCAgIDE3NCwgICAxNzgsICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg2LCAgIDE4
OCwgICAxOTAsCisgICAgIDE5NCwgICAxOTYsICAgMTk5LCAgIDIwMiwgICAyMDcsICAgMjEwLCAg
IDIxMiwgICAyMTQsICAgMjE3LCAgIDIyMSwKKyAgICAgMjI1LCAgIDIyOCwgICAyMzQsICAgMjM4
LCAgIDI0MSwgICAyNDUsICAgMjQ4LCAgIDI0OSwgICAyNTEsICAgMjUzLAorICAgICAyNTUsICAg
MjU3LCAgIDI1OSwgICAyNjMsICAgMjY5LCAgIDI3NiwgICAyODQsICAgMjkzLCAgIDI5OSwgICAz
MDEsCisgICAgIDMwNCwgICAzMDksICAgMzE1LCAgIDMyMCwgICAzMjMsICAgMzI1LCAgIDMyOCwg
ICAzMzAsICAgMzMyLCAgIDMzNCwKKyAgICAgMzM3LCAgIDMzOSwgICAzNDEsICAgMzQ0LCAgIDM0
NiwgICAzNDgsICAgMzUwLCAgIDM1MiwgICAzNTcsICAgMzU5LAorICAgICAzNjEsICAgMzYzLCAg
IDM2NSwgICAzNjcsICAgMzY5LCAgIDM3MSwgICAzNzMsICAgMzc1LCAgIDM3NywgICAzNzksCisg
ICAgIDM4MSwgICAzODMsICAgMzg1LCAgIDM4NywgICAzODksICAgMzkxLCAgIDM5MywgICAzOTUs
ICAgMzk3LCAgIDQwMywKKyAgICAgNDA4LCAgIDQxMCwgICA0MTMsICAgNDE3LCAgIDQxOSwgICA0
MjMsICAgNDI1LCAgIDQzMCwgICA0MzIsICAgNDM0LAorICAgICA0MzYsICAgNDM4LCAgIDQ0MCwg
ICA0NDIsICAgNDQ0LCAgIDQ0NiwgICA0NDgsICAgNDUxLCAgIDQ1MiwgICA0NTMsCisgICAgIDQ1
OSwgICA0NjEsICAgNDYzLCAgIDQ2NiwgICA0NzAsICAgNDcyLCAgIDQ3NSwgICA0NzcsICAgNDgw
LCAgIDQ4NiwKKyAgICAgNDkwLCAgIDQ5MiwgICA0OTQsICAgNDk5LCAgIDUwMCwgICA1MDcsICAg
NTA4LCAgIDUxNywgICA1MTgsICAgNTI2LAorICAgICA1MjgsICAgNTMwLCAgIDUzMiwgICA1MzMs
ICAgNTM2LCAgIDU0MCwgICA1NDMsICAgNTQ2LCAgIDU0OSwgICA1NTMsCisgICAgIDU1NiwgICA1
NTgsICAgNTYxLCAgIDU2MywgICA1NjUsICAgNTY2Cit9OworCisvKiBZWVJIUyAtLSBBIGAtMSct
c2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV9pbnQxNiB5eXJoc1tdID0KK3sKKyAgICAgMTY4LCAgICAgMCwgICAgLTEsICAgIDQzLCAgICAt
MSwgICAgOTUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LAorICAgICAgLTEsICAgIDQ3LCAg
ICAtMSwgICAgNzAsICAgMTIyLCAgICA3MSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTcsCisg
ICAgICA3MiwgICAgOTgsICAgIDczLCAgICAtMSwgICAgOTksICAgIC0xLCAgICA5NywgICAgNzYs
ICAgIDQ4LCAgICAtMSwKKyAgICAgIDk3LCAgICA1MSwgICAgLTEsICAgIDk3LCAgICA1MiwgICAg
LTEsICAgMTIyLCAgICAtMSwgICAxMDAsICAgIC0xLAorICAgICAxMDEsICAgIC0xLCAgICA5Nywg
ICAgNzYsICAgMTAxLCAgICAtMSwgICAxMDMsICAgIDcxLCAgICAtMSwgICAxMDIsCisgICAgICA3
MSwgICAgLTEsICAgMTA0LCAgICAzOSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAxMDQsICAgMTIw
LCAgICAtMSwKKyAgICAgMTAzLCAgICA3NywgICAxMjAsICAgIC0xLCAgIDEwNSwgICAgNzAsICAg
IC0xLCAgIDEzNywgICAgLTEsICAgIDQzLAorICAgICAgLTEsICAgIDQ4LCAgICAtMSwgICAgOTcs
ICAgIC0xLCAgICA1MSwgICAxMDYsICAgIC0xLCAgICA1MiwgICAxMDYsCisgICAgICAtMSwgICAx
MDcsICAgMTA2LCAgICAtMSwgICAgODQsICAgIC0xLCAgICA4MiwgICAgLTEsICAgIDgxLCAgICAt
MSwKKyAgICAgMTA2LCAgICAtMSwgICAxMDgsICAgIDg1LCAgIDEwNiwgICAgLTEsICAgMTA4LCAg
ICA4NiwgICAxMDYsICAgIC0xLAorICAgICAxMDgsICAgIC0xLCAgIDEwOSwgICAgODQsICAgMTA4
LCAgICAtMSwgICAxMDksICAgIDgyLCAgIDEwOCwgICAgLTEsCisgICAgIDEwOSwgICAgLTEsICAg
MTEwLCAgICAtMSwgICAxMTEsICAgIDg4LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4OSwKKyAg
ICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDUzLCAgIDExMCwgICAgLTEsICAgMTExLCAgICA1NCwg
ICAxMTAsICAgIC0xLAorICAgICAxMTEsICAgIC0xLCAgIDExMiwgICAgNTUsICAgMTExLCAgICAt
MSwgICAxMTIsICAgIDU2LCAgIDExMSwgICAgLTEsCisgICAgIDExMiwgICAgLTEsICAgMTEzLCAg
ICAtMSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICA1NywKKyAgICAgMTE1
LCAgICAtMSwgICAxMTYsICAgIC0xLCAgIDExNywgICAgNTksICAgMTE2LCAgICAtMSwgICAxMTcs
ICAgIC0xLAorICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAx
MTgsICAgIDkzLCAgIDEyMiwgICAgNzgsCisgICAgIDEyMCwgICAgLTEsICAgMTE5LCAgICAtMSwg
ICAxMDYsICAgMTIxLCAgIDEyMCwgICAgLTEsICAgIDc5LCAgICAtMSwKKyAgICAgIDYwLCAgICAt
MSwgICAgNjEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDY5LCAgICAtMSwgICAxMjAsICAgIC0x
LAorICAgICAxMjIsICAgIDc3LCAgIDEyMCwgICAgLTEsICAgMTE5LCAgICAtMSwgICAxMjUsICAg
IDgwLCAgICAtMSwgICAxMzMsCisgICAgICA4MCwgICAgLTEsICAgICA3LCAgIDEzOCwgICAxMzks
ICAgIDgwLCAgICAtMSwgICAxMjYsICAgIDcxLCAgICAtMSwKKyAgICAgMTI4LCAgICAtMSwgICAx
MjcsICAgIC0xLCAgIDEyOCwgICAxMzAsICAgIC0xLCAgIDEyNywgICAgNzcsICAgMTMwLAorICAg
ICAgLTEsICAgMTM1LCAgICA0MywgICAgNzAsICAgIC0xLCAgIDEzNywgICAgNDMsICAgIC0xLCAg
IDEzNywgICAgNDMsCisgICAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAxMzYsICAgMTMx
LCAgIDEyOSwgICAgLTEsICAgMTMxLCAgIDEyOSwKKyAgICAgIC0xLCAgIDEzNiwgICAxMzEsICAg
MTMyLCAgICAtMSwgICAxMzEsICAgMTMyLCAgICAtMSwgICAgLTEsICAgIDMzLAorICAgICAgLTEs
ICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM0LCAgICAtMSwg
ICAxMzMsCisgICAgICA3NywgICAgNDMsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAgICA3
MiwgICAgNzMsICAgIC0xLCAgIDEzMywKKyAgICAgIDc3LCAgICA0MywgICAgNzIsICAgMTIzLCAg
ICA3MywgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLAorICAgICAgNzMsICAgIDc5
LCAgIDE0NiwgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLCAgIDEyMywgICAgNzMs
CisgICAgICA3OSwgICAxNDYsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAgICA3OSwgICAx
NDYsICAgIC0xLCAgIDEzNSwKKyAgICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIC0xLCAgIDEzNSwg
ICAgNDMsICAgIDcyLCAgICA3MywgICAgLTEsICAgMTM1LAorICAgICAgNDMsICAgIDcyLCAgIDEy
MywgICAgNzMsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIDc5LCAgIDE0NiwgICAgLTEsCisgICAg
ICAgMywgICAgNDMsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM2LCAgIDEzNywgICAgLTEsICAg
ICA5LCAgICAtMSwKKyAgICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywgICAgMzcs
ICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTM5LAorICAgICAgLTEsICAgMTM4LCAgIDEzOSwgICAg
LTEsICAgICA0LCAgICAtMSwgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsCisgICAgIDE0MCwg
ICAgLTEsICAgMTQwLCAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAgMzksICAgIC0xLCAg
ICAxMSwKKyAgICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwgICAgMjcsICAgIC0x
LCAgICAyOCwgICAgLTEsICAgIDI5LAorICAgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsICAg
IC0xLCAgICAyMywgICAgLTEsICAgIDI0LCAgICAtMSwgICAgMjUsCisgICAgICAtMSwgICAgMjYs
ICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0MSwK
KyAgICAgIC0xLCAgICA0MiwgICAgLTEsICAgMTQxLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAz
OCwgICAgNDMsICAgIDc0LAorICAgICAxNDIsICAgIDc1LCAgICAtMSwgICAgMzgsICAgIDc0LCAg
IDE0MiwgICAgNzUsICAgIC0xLCAgIDE0MywgICAgLTEsCisgICAgIDE0MiwgICAxNDMsICAgIC0x
LCAgIDEzNywgICAxNDQsICAgIDgwLCAgICAtMSwgICAxNDUsICAgIC0xLCAgIDE0NCwKKyAgICAg
IDc3LCAgIDE0NSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDMsICAgIDcyLCAgIDEyMywgICAg
NzMsICAgIC0xLAorICAgICAxMjAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTUwLCAgICAtMSwg
ICAxNDksICAgIC0xLCAgIDE0NywgICAgLTEsCisgICAgIDE1NiwgICAgLTEsICAgMTU3LCAgICAt
MSwgICAxNjAsICAgIC0xLCAgIDE2NywgICAgLTEsICAgIDc0LCAgICA3NSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDc0LCAgIDE1MSwgICAxNTUsICAgMTUyLCAgICA3NSwgICAgLTEsICAg
MTU0LAorICAgICAgLTEsICAgMTQ5LCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzQs
ICAgMTU1LCAgICA3NSwgICAgLTEsCisgICAgIDE0OCwgICAgLTEsICAgMTU1LCAgIDE0OCwgICAg
LTEsICAgIDgwLCAgICAtMSwgICAxMjIsICAgIDgwLCAgICAtMSwKKyAgICAgIDE4LCAgICA3MCwg
ICAxMjIsICAgIDcxLCAgIDE1OCwgICAgLTEsICAgMTQ4LCAgICAxNiwgICAxNDgsICAgIC0xLAor
ICAgICAxNDgsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgMTM1LCAgICA0MywgICAgNzksICAgMTQ2
LCAgICAtMSwgICAgLTEsCisgICAgICA0MCwgICAgNzAsICAgMTYxLCAgIDE1OSwgICAgNzEsICAg
MTUzLCAgICAtMSwgICAgLTEsICAgIDE1LCAgIDE2MiwKKyAgICAgMTQ4LCAgICA0MCwgICAgNzAs
ICAgMTIyLCAgICA3MSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDcwLAorICAgICAx
NjMsICAgMTY0LCAgIDE2NiwgICAgNzEsICAgMTUzLCAgICAtMSwgICAxNTYsICAgIC0xLCAgIDE0
NywgICAgLTEsCisgICAgIDE1OSwgICAgLTEsICAgIC0xLCAgIDE2NSwgICAgODAsICAgIC0xLCAg
IDE2NSwgICAgODAsICAgMTIyLCAgICAtMSwKKyAgICAgIDE0LCAgICA4MCwgICAgLTEsICAgIDEz
LCAgICA4MCwgICAgLTEsICAgIDIwLCAgICA4MCwgICAgLTEsICAgIDIwLAorICAgICAxMjIsICAg
IDgwLCAgICAtMSwgICAgMTksICAgIDgwLCAgICAtMSwgICAxNjksICAgIC0xLCAgIDE2OCwgICAx
NjksCisgICAgICAtMSwgICAxNzAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgIC0xLCAgIDEyNSwg
ICAxNzEsICAgMTU0LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5l
IHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQxNiB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTgzLCAgIDE4MywgICAyMTgs
ICAgMjIxLCAgIDIzNCwgICAyMzksICAgMjQ0LCAgIDI1MCwgICAyNTMsCisgICAgIDMyNiwgICAz
MjksICAgNDM4LCAgIDQ0OCwgICA0NjEsICAgNDY5LCAgIDU2NywgICA1NzAsICAgNTc4LCAgIDU4
MiwKKyAgICAgNTg5LCAgIDU5MywgICA2MDAsICAgNjA2LCAgIDYxNSwgICA2MjMsICAgNjg3LCAg
IDY5NCwgICA3MDQsICAgNzA3LAorICAgICA3MTcsICAgNzI3LCAgIDc0OCwgICA3NDksICAgNzUw
LCAgIDc1NSwgICA3NTYsICAgNzY1LCAgIDc3NywgICA3NzgsCisgICAgIDc4NiwgICA3OTcsICAg
ODAxLCAgIDgwMiwgICA4MTIsICAgODIyLCAgIDgzMiwgICA4NDUsICAgODQ2LCAgIDg1NywKKyAg
ICAgODcxLCAgIDg3NSwgICA4NzksICAgODgzLCAgIDg4NCwgICA4OTcsICAgODk4LCAgIDkxMSwg
ICA5MTIsICAgOTI1LAorICAgICA5MjYsICAgOTQzLCAgIDk0NCwgICA5NTgsICAgOTU5LCAgIDk2
MCwgICA5NjEsICAgOTYyLCAgIDk2NiwgICA5NjksCisgICAgIDk4MCwgICA5ODgsICAxMDEzLCAg
MTAxOCwgIDEwMjUsICAxMDYxLCAgMTA2NCwgIDEwNzEsICAxMDc5LCAgMTEwMCwKKyAgICAxMTE5
LCAgMTEzMCwgIDExNTksICAxMTY0LCAgMTE3NCwgIDExNzksICAxMTg5LCAgMTE5MiwgIDExOTUs
ICAxMTk4LAorICAgIDEyMDQsICAxMjExLCAgMTIyMSwgIDEyMzMsICAxMjUxLCAgMTI3NSwgIDEz
MDgsICAxMzQ0LCAgMTM2NywgIDEzNzEsCisgICAgMTM4NSwgIDE0MDUsICAxNDM0LCAgMTQ1NCwg
IDE1MzAsICAxNTQwLCAgMTU2NiwgIDE1NjksICAxNTc1LCAgMTU4MywKKyAgICAxNTkxLCAgMTU5
OSwgIDE2MDIsICAxNjA5LCAgMTYxMiwgIDE2MTUsICAxNjIxLCAgMTYyNCwgIDE2MzksICAxNjQz
LAorICAgIDE2NDcsICAxNjUxLCAgMTY2MCwgIDE2NjUsICAxNjcwLCAgMTY3NSwgIDE2ODAsICAx
Njg1LCAgMTY5MCwgIDE2OTUsCisgICAgMTcwMCwgIDE3MDUsICAxNzExLCAgMTcxNywgIDE3MjMs
ICAxNzI4LCAgMTczMywgIDE3MzgsICAxNzUxLCAgMTc2NCwKKyAgICAxNzcyLCAgMTc3NSwgIDE3
OTAsICAxODE2LCAgMTgyMCwgIDE4MjYsICAxODM0LCAgMTg1MCwgIDE4NTQsICAxODU4LAorICAg
IDE4NTksICAxODY1LCAgMTg2NiwgIDE4NjcsICAxODY4LCAgMTg2OSwgIDE4NzMsICAxODc0LCAg
MTg3NCwgIDE4NzQsCisgICAgMTg4MiwgIDE4ODMsICAxODg4LCAgMTg5MSwgIDE4OTksICAxOTAy
LCAgMTkwOCwgIDE5MDksICAxOTEzLCAgMTkyMSwKKyAgICAxOTI1LCAgMTkzNSwgIDE5NDAsICAx
OTU3LCAgMTk1NywgIDE5NjIsICAxOTYyLCAgMTk2OSwgIDE5NjksICAxOTc3LAorICAgIDE5ODAs
ICAxOTg2LCAgMTk4OSwgIDE5OTUsICAxOTk5LCAgMjAwNiwgIDIwMTMsICAyMDIwLCAgMjAyNywg
IDIwMzgsCisgICAgMjA0NywgIDIwNTEsICAyMDU4LCAgMjA2MSwgIDIwNjcsICAyMDY3Cit9Owor
I2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxF
CisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lN
Qk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5U
T0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFt
ZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZBUklBTlQiLCAi
SElHSF9QUkVDSVNJT04iLAorICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lTSU9OIiwg
IlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAorICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAi
RkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCisgICJETyIsICJF
TFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIsICJCVkVDMyIs
CisgICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAi
VkVDNCIsICJNQVRSSVgyIiwKKyAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9V
VF9RVUFMIiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCisgICJWQVJZSU5HIiwgIlNUUlVDVCIs
ICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKKyAgIklE
RU5USUZJRVIiLCAiVFlQRV9OQU1FIiwgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLAor
ICAiQk9PTENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09Q
IiwgIklOQ19PUCIsCisgICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVf
T1AiLCAiQU5EX09QIiwgIk9SX09QIiwKKyAgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9B
U1NJR04iLCAiQUREX0FTU0lHTiIsICJNT0RfQVNTSUdOIiwKKyAgIkxFRlRfQVNTSUdOIiwgIlJJ
R0hUX0FTU0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLCAiT1JfQVNTSUdOIiwKKyAg
IlNVQl9BU1NJR04iLCAiTEVGVF9QQVJFTiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQi
LAorICAiUklHSFRfQlJBQ0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIs
ICJDT01NQSIsICJDT0xPTiIsCisgICJFUVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNI
IiwgIlRJTERFIiwgIlBMVVMiLCAiU1RBUiIsICJTTEFTSCIsCisgICJQRVJDRU5UIiwgIkxFRlRf
QU5HTEUiLCAiUklHSFRfQU5HTEUiLCAiVkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKKyAgIkFNUEVS
U0FORCIsICJRVUVTVElPTiIsICIkYWNjZXB0IiwgInZhcmlhYmxlX2lkZW50aWZpZXIiLAorICAi
cHJpbWFyeV9leHByZXNzaW9uIiwgInBvc3RmaXhfZXhwcmVzc2lvbiIsICJpbnRlZ2VyX2V4cHJl
c3Npb24iLAorICAiZnVuY3Rpb25fY2FsbCIsICJmdW5jdGlvbl9jYWxsX29yX21ldGhvZCIsICJm
dW5jdGlvbl9jYWxsX2dlbmVyaWMiLAorICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1l
dGVycyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rp
b25fY2FsbF9oZWFkZXIiLAorICAiZnVuY3Rpb25faWRlbnRpZmllciIsICJ1bmFyeV9leHByZXNz
aW9uIiwgInVuYXJ5X29wZXJhdG9yIiwKKyAgIm11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24iLCAi
YWRkaXRpdmVfZXhwcmVzc2lvbiIsICJzaGlmdF9leHByZXNzaW9uIiwKKyAgInJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiIsICJlcXVhbGl0eV9leHByZXNzaW9uIiwgImFuZF9leHByZXNzaW9uIiwKKyAg
ImV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIiwgImluY2x1c2l2ZV9vcl9leHByZXNzaW9uIiwKKyAg
ImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVzc2lvbiIsCisgICJs
b2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lvbiIsCisgICJhc3Np
Z25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJleHByZXNzaW9uIiwK
KyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVuY3Rpb25fcHJvdG90
eXBlIiwKKyAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFy
YW1ldGVycyIsCisgICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2RlY2xhcmF0b3IiLCAi
cGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKKyAgInBhcmFtZXRlcl9xdWFsaWZpZXIiLCAicGFyYW1l
dGVyX3R5cGVfc3BlY2lmaWVyIiwKKyAgImluaXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9k
ZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCisgICJ0eXBlX3F1YWxpZmllciIs
ICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lm
aWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmll
ciIsCisgICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAor
ICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFs
aXplciIsCisgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9z
dGF0ZW1lbnQiLAorICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAxIiwgIkAyIiwgInN0YXRlbWVu
dF9ub19uZXdfc2NvcGUiLAorICAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsICJz
dGF0ZW1lbnRfbGlzdCIsCisgICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3Rh
dGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRl
cmF0aW9uX3N0YXRlbWVudCIsICJAMyIsCisgICJANCIsICJANSIsICJmb3JfaW5pdF9zdGF0ZW1l
bnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJqdW1wX3N0YXRl
bWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKKyAgImZ1
bmN0aW9uX2RlZmluaXRpb24iLCAiQDYiLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklO
VAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVz
cG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAg
MjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2NSwgICAyNjYs
ICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwK
KyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4
MiwgICAyODMsICAgMjg0LAorICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAg
IDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCisgICAgIDI5NSwgICAyOTYsICAgMjk3
LCAgIDI5OCwgICAyOTksICAgMzAwLCAgIDMwMSwgICAzMDIsICAgMzAzLCAgIDMwNCwKKyAgICAg
MzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDMwOSwgICAzMTAsICAgMzExLCAgIDMxMiwgICAz
MTMsICAgMzE0LAorICAgICAzMTUsICAgMzE2LCAgIDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwg
ICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQsCisgICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMy
OCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAzMzIsICAgMzMzLCAgIDMzNCwKKyAgICAgMzM1LCAg
IDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwgICAzNDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAg
MzQ0LAorICAgICAzNDUsICAgMzQ2LCAgIDM0NywgICAzNDgKK307CisjIGVuZGlmCisKKy8qIFlZ
UjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMu
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAg
IDk0LCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5NiwgICAgOTYsICAgIDk2LCAgICA5NywgICAg
OTcsCisgICAgICA5NywgICAgOTcsICAgIDk3LCAgICA5NywgICAgOTgsICAgIDk5LCAgIDEwMCwg
ICAxMDAsICAgMTAxLCAgIDEwMSwKKyAgICAgMTAyLCAgIDEwMiwgICAxMDMsICAgMTAzLCAgIDEw
NCwgICAxMDUsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA2LAorICAgICAxMDYsICAgMTA2LCAg
IDEwNywgICAxMDcsICAgMTA3LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksCisg
ICAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMSwgICAxMTEsICAgMTExLCAgIDExMSwgICAxMTIs
ICAgMTEyLCAgIDExMiwKKyAgICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNiwgICAx
MTcsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LAorICAgICAxMTksICAgMTIwLCAgIDEyMCwg
ICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIsCisgICAgIDEy
MywgICAxMjQsICAgMTI0LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI3
LCAgIDEyOCwKKyAgICAgMTI5LCAgIDEyOSwgICAxMzAsICAgMTMwLCAgIDEzMCwgICAxMzAsICAg
MTMxLCAgIDEzMSwgICAxMzEsICAgMTMxLAorICAgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMs
ICAgMTMzLCAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzNCwgICAxMzQsCisgICAgIDEzNCwgICAx
MzQsICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM2LCAgIDEz
NiwKKyAgICAgMTM2LCAgIDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM5LCAg
IDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQw
LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsCisgICAgIDE0MCwgICAxNDAsICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwKKyAg
ICAgMTQyLCAgIDE0MiwgICAxNDMsICAgMTQ0LCAgIDE0NCwgICAxNDUsICAgMTQ1LCAgIDE0Niwg
ICAxNDcsICAgMTQ4LAorICAgICAxNDgsICAgMTQ5LCAgIDE0OSwgICAxNDksICAgMTQ5LCAgIDE0
OSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAxNTAsCisgICAgIDE1MywgICAxNTMsICAgMTU0LCAg
IDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU3LCAgIDE1OCwKKyAgICAgMTU4
LCAgIDE1OSwgICAxNTksICAgMTYxLCAgIDE2MCwgICAxNjIsICAgMTYwLCAgIDE2MywgICAxNjAs
ICAgMTY0LAorICAgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LCAgIDE2NywgICAx
NjcsICAgMTY3LCAgIDE2NywgICAxNjcsCisgICAgIDE2OCwgICAxNjgsICAgMTY5LCAgIDE2OSwg
ICAxNzEsICAgMTcwCit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29t
cG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKKyAgICAgICAxLCAgICAgMywg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAzLAorICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAg
MywgICAgIDEsCisgICAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0
LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLAorICAgICAgIDIsICAg
ICA1LCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDUsICAgICAxLCAgICAgMiwKKyAgICAgICA0LCAgICAgNSwgICAgIDQsICAgICAyLCAgICAg
MSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDEsICAgICAxLCAg
ICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsCisg
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDUsICAgICA0LAorICAgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAw
LCAgICAgNSwKKyAgICAgICAxLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDIsICAg
ICAxLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDAs
ICAgICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsCisgICAgICAgMSwgICAg
IDEsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAg
MiwKKyAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDMKK307CisKKy8q
IFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBz
dGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5n
IGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAg
ICAwLCAgIDExMywgICAxMTQsICAgMTE1LCAgICAgMCwgICAxMDcsICAgMTA2LCAgIDEyMSwgICAx
MTksCisgICAgIDEyMCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwg
ICAxMjIsICAgMTIzLCAgIDEyNCwKKyAgICAgMTMxLCAgIDEzMiwgICAxMzMsICAgMTEwLCAgIDEw
OCwgICAgIDAsICAgMTE4LCAgIDEzNCwgICAxMzUsICAgMTM3LAorICAgICAxOTMsICAgMTk0LCAg
ICAgMCwgICAgNzYsICAgIDg2LCAgICAgMCwgICAgOTEsICAgIDk4LCAgICAgMCwgICAxMDQsCisg
ICAgICAgMCwgICAxMTEsICAgMTE2LCAgIDEzNiwgICAgIDAsICAgMTkwLCAgIDE5MiwgICAxMDks
ICAgMTAzLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNzEsICAgICAwLCAgICA3NCwgICAg
ODYsICAgICAwLCAgICA4NywgICAgODgsICAgIDg5LAorICAgICAgNzcsICAgICAwLCAgICA4Niwg
ICAgIDAsICAgIDcyLCAgICA5OSwgICAxMDUsICAgMTEyLCAgICAgMCwgICAgIDEsCisgICAgIDE5
MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQwLCAgICAgMCwgICAxOTUsICAgIDc4
LCAgICA4MywKKyAgICAgIDg1LCAgICA5MCwgICAgIDAsICAgIDkyLCAgICA3OSwgICAgIDAsICAg
ICAwLCAgICAgMiwgICAgIDUsICAgICA0LAorICAgICAgIDYsICAgIDI3LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAzNCwgICAgMzMsICAgIDMyLCAgICAgMywgICAgIDgsCisgICAgICAyOCwgICAg
MTAsICAgIDE1LCAgICAxNiwgICAgIDAsICAgICAwLCAgICAyMSwgICAgIDAsICAgIDM1LCAgICAg
MCwKKyAgICAgIDM4LCAgICA0MSwgICAgNDIsICAgIDQ3LCAgICA1MCwgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTUsICAgIDU3LAorICAgICAgNTksICAgIDcwLCAgICAgMCwgICAgMjUsICAgIDcz
LCAgICAgMCwgICAxNDUsICAgICAwLCAgIDE0MywgICAxMzksCisgICAgIDE0MSwgICAgIDAsICAg
ICAwLCAgIDE3NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1NywKKyAg
ICAgMTYyLCAgIDE2NiwgICAgMzUsICAgIDYxLCAgICA2OCwgICAgIDAsICAgMTQ4LCAgICAgMCwg
ICAxMDQsICAgMTUxLAorICAgICAxNjQsICAgMTUwLCAgIDE0OSwgICAgIDAsICAgMTUyLCAgIDE1
MywgICAxNTQsICAgMTU1LCAgICA4MCwgICAgODIsCisgICAgICA4NCwgICAgIDAsICAgICAwLCAg
IDEwMCwgICAgIDAsICAgMTQ3LCAgIDEwMiwgICAgMjksICAgIDMwLCAgICAgMCwKKyAgICAgIDEy
LCAgICAxMywgICAgIDAsICAgICAwLCAgICAxOSwgICAgMTgsICAgICAwLCAgIDExOCwgICAgMjIs
ICAgIDI0LAorICAgICAgMzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTE3LCAgIDEzOCwgICAgIDAsICAgICAwLCAgIDE0MiwKKyAgICAgMTg2LCAgIDE4
NSwgICAgIDAsICAgMTc3LCAgICAgMCwgICAxODksICAgMTg3LCAgICAgMCwgICAxNzMsICAgMTU2
LAorICAgICAgIDAsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2MywgICAgIDAsICAg
ICAwLCAgIDE2NywgICAxNjMsCisgICAgIDE2NSwgICAgIDAsICAgIDkzLCAgICAgMCwgICAgOTcs
ICAgMTAxLCAgICAgNywgICAgIDAsICAgIDE0LCAgICAyNiwKKyAgICAgIDExLCAgICAxNywgICAg
MjMsICAgIDM2LCAgICAzNywgICAgNDAsICAgIDM5LCAgICA0NSwgICAgNDYsICAgIDQzLAorICAg
ICAgNDQsICAgIDQ4LCAgICA0OSwgICAgNTQsICAgIDU2LCAgICA1OCwgICAgIDAsICAgICAwLCAg
IDE0NCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTg4LCAgICAgMCwgICAxNTgsICAgIDYy
LCAgICA2OSwgICAgIDAsICAgICAwLCAgICA5NCwKKyAgICAgICA5LCAgICAgMCwgICAxNDYsICAg
ICAwLCAgIDE4MCwgICAxNzksICAgMTgyLCAgICAgMCwgICAxNzEsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICA4MSwgICAgOTUsICAgICAwLCAgICA2MCwgICAgIDAsICAgMTgxLCAgICAgMCwg
ICAgIDAsCisgICAgIDE3MCwgICAxNjgsICAgICAwLCAgICAgMCwgICAxNTksICAgIDk2LCAgICAg
MCwgICAxODMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE2MSwgICAxNzQsICAgMTYwLCAg
ICAgMCwgICAxODQsICAgMTc4LCAgIDE2OSwgICAxNzIsICAgMTc2Cit9OworCisvKiBZWURFRkdP
VE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1td
ID0KK3sKKyAgICAgIC0xLCAgICA5OCwgICAgOTksICAgMTAwLCAgIDIyNywgICAxMDEsICAgMTAy
LCAgIDEwMywgICAxMDQsICAgMTA1LAorICAgICAxMDYsICAgMTA3LCAgIDE0MiwgICAxMDksICAg
MTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAxMTcs
ICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTQzLCAgIDE0NCwgICAyMTYsICAgMTQ1LCAgIDEyMiwK
KyAgICAgMTQ2LCAgIDE0NywgICAgMzIsICAgIDMzLCAgICAzNCwgICAgNzksICAgIDYwLCAgICA2
MSwgICAgODAsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAxMjMsICAgIDQwLCAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA3NCwgICAgNzUsCisgICAgIDEyNywgICAxMjgsICAgMTY2
LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAyMTAsICAgMjcxLCAgIDI5MiwKKyAgICAg
MjkzLCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDI4MSwgICAyNzAsICAgMTU2LCAgIDI1MywgICAy
MDIsICAgMjUwLAorICAgICAyNjYsICAgMjc4LCAgIDI3OSwgICAxNTcsICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDUzCit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRB
QkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5l
IFlZUEFDVF9OSU5GIC0yNTMKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQor
eworICAgIDEyNjksICAgLTExLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEyNCwgIC0yNTMsICAt
MjUzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgIC0y
NTMsICAtMjUzLCAgLTI1MywgICAtNDAsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAg
IC0yNTMsICAgLTY1LCAgIC01MiwgICAtNTAsICAgIDIxLCAgICAxNiwgIC0yNTMsICAgLTEwLCAg
MTMxMCwgIC0yNTMsCisgICAgMTMzNCwgIC0yNTMsICAgLTEyLCAgLTI1MywgIDExODIsICAtMjUz
LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgMTMzNCwKKyAgICAgIC0zLCAgMTMxMCwgIC0yNTMsICAg
IDEwLCAgLTI1MywgICAgMzIsICAgIDY4LCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMs
ICAxMzEwLCAgIDEyMiwgICAgNzgsICAtMjUzLCAgICAxMSwgIC0yNTMsICAtMjUzLCAgIDk5Mywg
IC0yNTMsCisgICAgLTI1MywgICAgMzEsICAxMzEwLCAgICA4MywgICAyMDIsICAtMjUzLCAgIDI4
NywgIC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgICA5MSwgIDEzMTAsICAgLTYzLCAg
LTI1MywgICA3NjQsICAgOTkzLCAgICA4MCwgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAtMjUz
LCAgIDk5MywgICA5OTMsICAgOTkzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMs
CisgICAgICAyNywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAgODEsICAgLTM0LCAgMTA2MCwgICAg
OTAsICAtMjUzLCAgIDk5MywKKyAgICAgIDEyLCAgICAtOSwgIC0yNTMsICAgLTM2LCAgIDEwMywg
IC0yNTMsICAtMjUzLCAgLTI1MywgICAxMTEsICAgMTEwLAorICAgICAtNDQsICAtMjUzLCAgICA5
NywgIC0yNTMsICAtMjUzLCAgMTEyNywgICAgOTksICAgIDM2LCAgLTI1MywgIC0yNTMsCisgICAg
LTI1MywgICAgOTIsICAgMTAwLCAgLTI1MywgICAxMDcsICAgMTA5LCAgIDEwMSwgICA4NDUsICAg
MTEyLCAgIDEwOCwKKyAgICAtMjUzLCAgLTI1MywgICAgMjUsICAtMjUzLCAgLTI1MywgICAgNDIs
ICAtMjUzLCAgIC02NSwgICAxMTUsICAtMjUzLAorICAgIC0yNTMsICAtMjUzLCAgLTI1MywgICAz
NjksICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDExNCwgIC0yNTMsCisgICAgLTI1Mywg
ICA5MTIsICAgOTkzLCAgLTI1MywgICAxMTcsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAg
ICAtNywKKyAgICAtMjUzLCAgLTI1MywgICA5OTMsICAxMjIzLCAgLTI1MywgIC0yNTMsICAgOTkz
LCAgIDExNiwgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAgOTkzLCAgIDk5MywgICA5OTMsICAg
OTkzLCAgIDk5MywgICA5OTMsICAgOTkzLCAgIDk5MywgICA5OTMsCisgICAgIDk5MywgICA5OTMs
ICAgOTkzLCAgIDk5MywgICA5OTMsICAtMjUzLCAgLTI1MywgICA5OTMsICAgIDgzLCAgLTI1MywK
KyAgICAtMjUzLCAgLTI1MywgICA0NTEsICAtMjUzLCAgIDk5MywgIC0yNTMsICAtMjUzLCAgICA0
MywgIC0yNTMsICAtMjUzLAorICAgICA0NTEsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAg
LTI1MywgICA5OTMsICAgOTkzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgICA5OTMsICAgMTEz
LCAgIDExOCwgIC0yNTMsICAtMjUzLCAgLTI1MywgICAxMjAsICAgMTE5LCAgLTI1MywKKyAgICAg
MTI3LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAgMTIsICAgIDEyLCAgLTI1MywgIC0y
NTMsICAtMjUzLAorICAgIC0yNTMsICAgLTM2LCAgIC0zNiwgIC0yNTMsICAgMTExLCAgIDExMCwg
ICAgODUsICAgMTIxLCAgLTI1MywgICAxNDgsCisgICAgIDYxNSwgICAgMTgsICAtMjUzLCAgIDY5
NywgICA0NTEsICAtMjUzLCAgLTI1MywgICAxMjUsICAgOTkzLCAgIDEzMCwKKyAgICAtMjUzLCAg
IDk5MywgIC0yNTMsICAgMTI5LCAgLTI1MywgIC0yNTMsICAgNjk3LCAgIDQ1MSwgICAxMTksICAg
MTU3LAorICAgICAxMzIsICAgMTI2LCAgLTI1MywgIC0yNTMsICAgOTkzLCAgLTI1MywgICA5OTMs
ICAtMjUzLCAgIDEzMSwgICAxMzMsCisgICAgIDE5OSwgIC0yNTMsICAgMTM3LCAgIDUzMywgIC0y
NTMsICAtMjUzLCAgICAyOSwgICA5OTMsICAgNTMzLCAgIDQ1MSwKKyAgICAgOTkzLCAgLTI1Mywg
IC0yNTMsICAtMjUzLCAgIDEzOCwgICAxMTksICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzCit9
OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eXBnb3RvW10gPQoreworICAgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAg
LTI1MywgIC0yNTMsICAgIDQ0LCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAgLTQ2
LCAgLTI1MywgICAtMTksICAtMjUzLCAgIC03OCwgICAtMjMsICAtMjUzLCAgLTI1MywKKyAgICAt
MjUzLCAgICAyOCwgICAgMzAsICAgIDQ1LCAgLTI1MywgICAtNDMsICAgLTg1LCAgLTI1MywgICAt
OTIsICAgLTczLAorICAgICAgIDQsICAgICA2LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEzOSwg
ICAxNjUsICAgMTczLCAgIDE1NCwgIC0yNTMsCisgICAgLTI1MywgIC0yNDMsICAgLTI3LCAgICAg
MCwgICAyMzIsICAgLTI5LCAgLTI1MywgIC0yNTMsICAgMTY3LCAgIC02NiwKKyAgICAtMjUzLCAg
ICA0NywgIC0xNTcsICAgIC04LCAgLTE0MCwgIC0yNTIsICAtMjUzLCAgLTI1MywgIC0yNTMsICAg
LTQxLAorICAgICAxOTUsICAgIDM5LCAgICAgMSwgIC0yNTMsICAtMjUzLCAgIC0xNCwgIC0yNTMs
ICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0y
NTMsICAgMjExLCAgLTI1MywgIC0yNTMKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5V
TV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNo
aWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBu
dW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgor
ICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05J
TkYgLTc2CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICAz
OSwgICAxNjUsICAgMTY5LCAgICA1MCwgICAgMzAsICAgMjI0LCAgICAzMSwgICAgNjIsICAgMTMw
LCAgIDE2MSwKKyAgICAgMjY5LCAgICA2NywgICAxNjQsICAgMjIwLCAgIDE5MywgICAgNTIsICAg
MTYyLCAgIDE4NSwgICAxODYsICAgIDU0LAorICAgICAgNzEsICAgMTc4LCAgIDEwOCwgICAyNjks
ICAgIDU2LCAgIDEyMSwgICAgNDcsICAgIDU1LCAgICA2MiwgICAgIDYsCisgICAgICAgNywgICAy
OTEsICAgIDQ4LCAgICA2NSwgICAgNTEsICAgIDU2LCAgIDI5MSwgICAxNzUsICAgIDY2LCAgIDEw
OCwKKyAgICAgICA2LCAgICAgNywgICAxMjEsICAgMTc2LCAgICAzOSwgICAyMDcsICAgMTY3LCAg
IDE2OCwgICAgMzAsICAgMTk0LAorICAgICAgMzEsICAgIDczLCAgIDE4NywgICAxODgsICAgIDU3
LCAgICA1OCwgICAgNTksICAgIDIzLCAgICAyNCwgICAxMzAsCisgICAgICA2OCwgICAgODEsICAg
MjQ5LCAgIDE4MCwgICAyMjYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDIzLCAgICAyNCwKKyAg
ICAgMjE3LCAgICA3MiwgICAgNzMsICAgMTgzLCAgICA3MywgICAxODQsICAgMTQ4LCAgIDE2NSwg
ICAxNzAsICAgMTcxLAorICAgICAyMjgsICAgIDg0LCAgICA4MSwgICAgODUsICAgIDc2LCAgIDIx
MSwgICAyMTIsICAgMjEzLCAgIDIyMywgICAyNjcsCisgICAgICA4NiwgICAyMzIsICAgLTc1LCAg
ICA2MywgICAyMTQsICAgMjE3LCAgICA2NCwgICAxODEsICAgMTgyLCAgIDE3MiwKKyAgICAgMjk0
LCAgIDI3MywgICAyNDYsICAgMTczLCAgIDIxNSwgICAgNDcsICAgMjE3LCAgIDIzNywgICAyMzgs
ICAgMjM5LAorICAgICAyNDAsICAgMTI0LCAgIDI1MSwgICAxOTgsICAgMjIwLCAgIDEwOCwgICAx
OTksICAgMjg1LCAgIDEyMSwgICAyMTcsCisgICAgIDIxNywgICAgODMsICAgMjE4LCAgIDI1Miwg
ICAyNDcsICAgIDczLCAgIDEyNiwgICAyODAsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDI1
NSwgICAyNTYsICAgMjk4LCAgIDE1OCwgICAyMzMsICAgMjM0LCAgIDEwOCwgICAxMDgsICAgMTA4
LAorICAgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAg
MTA4LCAgIDI1NywgICAyOTcsCisgICAgIC0yNiwgICAxMDgsICAgMTc0LCAgIDE0OCwgICAxMjEs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTg5LCAgIDE5MCwKKyAgICAgMTc5LCAgIDI2OCwgICAy
MTcsICAgMjYxLCAgIDIzNSwgICAyMzYsICAgMjQxLCAgIDI0MiwgICAxOTEsICAgMTkyLAorICAg
ICAxOTUsICAgMTk3LCAgIDIwMCwgICAxNjUsICAgMjY4LCAgIDEwOCwgICAyNzUsICAgMjAzLCAg
IDEyMSwgICAyMDQsCisgICAgIDIwMSwgICAyMDUsICAgMjA4LCAgIDIwOSwgICAyODYsICAgLTI1
LCAgIDIyMSwgICAtMjAsICAgMjYzLCAgIDE2NSwKKyAgICAgMjI1LCAgIDI1OSwgICAyNTgsICAg
MjYwLCAgIDI2MiwgICAyOTUsICAgMjE3LCAgIC0yNywgICAyNzIsICAgMjc2LAorICAgICAyODIs
ICAgMjg0LCAgIDE0OCwgICAyODMsICAgMjg4LCAgIDE2NSwgICAgIDIsICAgICAzLCAgICAgNCwg
ICAyNzQsCisgICAgIDE0OCwgICAyODcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMjg5LCAgIDI5
MCwgICAyMzEsICAgMjk5LCAgIDI0MywKKyAgICAgIDc4LCAgIDE1OSwgICAyNDQsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICA4MiwgICAxNjAsICAgIDQ5LCAgIDI0NSwgICAxMjUs
CisgICAgICAyNSwgICAgMjYsICAgMjY0LCAgICAyNywgICAgMjgsICAgMjQ4LCAgICAyOSwgICAy
OTYsICAgIDc3LCAgIDI1NCwKKyAgICAgMTQ4LCAgIDI2NSwgICAyNzcsICAgMTQ4LCAgIDE0OCwg
ICAgNzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjksICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNDgsICAgMTQ4LAorICAgICAgIDEsICAgICAyLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgIDEzMSwg
ICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAg
ICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsCisgICAgICA4NywgICAgMjks
ICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzksICAgMTQw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk1LCAgICA5NiwKKyAgICAg
ICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwg
ICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
MTM4LAorICAgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAs
ICAgIDkxLCAgICAgMCwgICAgIDAsCisgICAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgMjE5LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDEsCisgICAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LAorICAgICAx
MzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4
LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLAorICAgICAgIDAsICAg
ICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQxLCAg
ICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIs
ICAgMTMzLCAgICAgMCwKKyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4
LCAgICA4OSwKKyAgICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAg
ICA5NywgICAgIDEsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAg
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksCisgICAgICA4OCwgICAgODksICAgIDkwLCAg
ICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywKKyAgICAgIDU2LCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAorICAg
ICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAg
ICA5MiwgICAgOTMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDIsICAgICAzLAorICAgICAgIDQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NSwg
ICAgOTYsCisgICAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgs
CisgICAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgMTYzLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAg
IDk3LCAgICAgMiwKKyAgICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LCAgICAyOCwgICAgODcsICAgIDI5LAorICAgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAg
ICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAgICAyLCAgICAg
MywgICAgIDQsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAg
IDIwNiwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAgICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICA4Nywg
ICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsCisgICAgICA5MSwgICAgIDAsICAgICAwLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgIDIyMiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NSwgICAg
OTYsICAgICAwLCAgICA5NywgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LAorICAgICAg
OTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0
LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LAorICAgICAgIDAsICAgIDI3LCAg
ICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsCisg
ICAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTQsICAgICAyLCAgICAgMywg
ICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAg
MCwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEx
LCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAg
MjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgNjksICAgICAwLCAgICAgMCwgICAgIDEsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
MTk2LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAg
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAg
MCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgIDIyOSwgICAgMjksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDIz
MCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LAorICAgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLAorICAg
ICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAyNSwg
ICAgMjYsCisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOQorfTsKKwor
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAgIDAsICAgIDg2
LCAgICA5NCwgICAgNDMsICAgICAwLCAgIDE2MiwgICAgIDAsICAgIDM0LCAgICA3NCwgICAgNzIs
CisgICAgIDI1MywgICAgNDAsICAgIDg1LCAgIDE1MywgICAgNTgsICAgIDgwLCAgICA3OSwgICAg
NTMsICAgIDU0LCAgICA3MSwKKyAgICAgIDQ5LCAgIDEwNiwgICAgNjgsICAgMjY2LCAgICAgMywg
ICAgNjgsICAgIDM3LCAgICA3NywgICAgNTUsICAgICA4LAorICAgICAgIDksICAgMjgzLCAgICA0
MywgICAgNDMsICAgIDc0LCAgICAgMywgICAyODgsICAgIDcxLCAgICAzOCwgICAgODUsCisgICAg
ICAgOCwgICAgIDksICAgIDg1LCAgICA3NywgICAgNDQsICAgMTM3LCAgICA5MiwgICAgOTMsICAg
IDQ0LCAgICA5MywKKyAgICAgIDQ0LCAgICA1MSwgICAgODgsICAgIDg5LCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgMTI1LAorICAgICAgNzIsICAgIDYxLCAgIDIwMiwgICAx
MDksICAgIDcxLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICA3Nywg
ICAgNzQsICAgIDcyLCAgICA4MiwgICAgNzQsICAgIDg0LCAgICA3NiwgICAxNjIsICAgIDUxLCAg
ICA1MiwKKyAgICAgMTcyLCAgICA3MCwgICAgODIsICAgIDcyLCAgICA3NCwgICAgNjAsICAgIDYx
LCAgICA2MiwgICAxNjEsICAgIDcxLAorICAgICAgNzksICAgMTc2LCAgICA3MSwgICAgNzcsICAg
IDY5LCAgICA3NywgICAgODAsICAgIDg1LCAgICA4NiwgICAgNzIsCisgICAgICA3MSwgICAyNTgs
ICAgMTk0LCAgICA3NiwgICAgNzksICAgIDM3LCAgICA3NywgICAxODUsICAgMTg2LCAgIDE4NywK
KyAgICAgMTg4LCAgICA4MCwgICAyMDQsICAgIDc3LCAgIDI1NCwgICAxNjEsICAgIDgwLCAgIDI3
NCwgICAxNjEsICAgIDc3LAorICAgICAgNzcsICAgIDQzLCAgICA4MCwgICAgODAsICAgMTk3LCAg
IDEyNSwgICAgNDMsICAgMjY3LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAyMTYsICAgMjE3
LCAgIDI5MCwgICAgNDMsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwKKyAgICAg
MTg2LCAgIDE4NywgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAy
MjEsICAgMjg5LAorICAgICAgNzAsICAgMTk3LCAgICA3MSwgICAxNTMsICAgMTk3LCAgICAzMywg
ICAgMzQsICAgIDM1LCAgICA1NSwgICAgNTYsCisgICAgICA3MCwgICAyNTMsICAgIDc3LCAgICA3
OCwgICAxODMsICAgMTg0LCAgIDE4OSwgICAxOTAsICAgIDU3LCAgICA1OSwKKyAgICAgIDczLCAg
ICA3MiwgICAgODAsICAgMjU4LCAgIDI2NiwgICAyMjEsICAgMjYxLCAgICA3MCwgICAyMjEsICAg
IDcwLAorICAgICAgODAsICAgIDgwLCAgICA3MCwgICAgNzUsICAgMjc2LCAgICA3MCwgICAgNzIs
ICAgIDcxLCAgICA0MCwgICAyNzQsCisgICAgICA3MywgICAgNzMsICAgIDc5LCAgICA3MywgICAg
NzMsICAgMjg3LCAgICA3NywgICAgNzAsICAgIDczLCAgICA3MCwKKyAgICAgIDQzLCAgICA3NSwg
ICAyMDIsICAgIDcxLCAgICA3MSwgICAyOTAsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDc5LAor
ICAgICAyMTAsICAgIDgwLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxNiwgICAgNzksICAgMTcz
LCAgICA4MCwgICAxOTEsCisgICAgICA1NSwgICAgODIsICAgMTkyLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgNjIsICAgIDgyLCAgICAgNSwgICAxOTMsICAgIDcyLAorICAgICAg
MzgsICAgIDM5LCAgIDI1MCwgICAgNDEsICAgIDQyLCAgIDE5OCwgICAgNDQsICAgMjg4LCAgICA1
MywgICAyMTAsCisgICAgIDI1MCwgICAyNTAsICAgMjY2LCAgIDI1MywgICAyNTQsICAgIDQ0LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjY2LCAgIDI2NywgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI4MywgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgMjg4LCAgIDI4OSwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisg
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA3MCwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICA4MSwgICAgODIsCisgICAgICAtMSwgICAg
ODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAg
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgLTEsICAgIC0xLAorICAgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgwLAorICAgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIC0xLCAgICAtMSwgICAg
NTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4MCwgICAgODEsICAg
IDgyLCAgICAtMSwgICAgODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgLTEsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAorICAgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
CisgICAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAg
ICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsCisgICAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAg
IDUyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODEsICAgIDgyLAor
ICAgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAt
MSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA3MCwgICAgLTEsICAgIC0xLCAgICA3MywgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAg
IDQsCisgICAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAg
LTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgODAsICAg
IDgxLCAgICA4MiwgICAgLTEsICAgIDg0LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgNzMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICAt
MSwgICAgODQsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0
OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLAorICAgICAgLTEs
ICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDcwLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEsICAgIDgx
LCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIs
CisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgLTEsICAgIDQ0LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA3NSwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAg
ICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgLTEsICAgIDQ0
LCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwK
KyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNDgsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAg
IDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwKKyAgICAgIDQxLCAg
ICA0MiwgICAgLTEsICAgIDQ0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgMzgsICAgIDM5LAor
ICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQKK307CisKKy8qIFlZU1RP
U1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisg
ICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MSwgICAg
NDIsICAgIDQ0LAorICAgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEzMywg
ICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgIDEzOCwgICAxMzksICAgMTQwLCAgIDE0
MSwgICAxNjgsICAgMTY5LCAgIDE3MCwgICAgMzcsICAgIDQzLCAgIDEzOCwKKyAgICAgIDQzLCAg
ICA3NCwgICAgODAsICAgMTcxLCAgICA3MSwgICAgNzcsICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LAorICAgICAxMzAsICAgMTMxLCAgIDEzNiwgICAgNzcsICAgIDgwLCAgICA0MywgICAxMzcs
ICAgMTM5LCAgICA3MiwgICAgIDAsCisgICAgIDE2OSwgICAxMzksICAgIDc0LCAgIDEzNywgICAx
NDIsICAgMTQzLCAgICA3NCwgICAxNTQsICAgMTMwLCAgIDEyOSwKKyAgICAgMTMyLCAgIDEzNywg
ICAxMzEsICAgIDQzLCAgICA3MCwgICAgNzIsICAgIDc5LCAgICA0MywgICAgNDUsICAgIDQ2LAor
ICAgICAgNDcsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDcwLCAgICA4MSwgICAgODIsICAgIDg0
LCAgICA5NSwgICAgOTYsCisgICAgICA5NywgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAg
MTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywKKyAgICAgMTA4LCAgIDEwOSwgICAxMTAs
ICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LAorICAgICAx
MTgsICAgMTE5LCAgIDEyMywgICAxMzcsICAgIDgwLCAgIDE0MiwgICAgNDMsICAgMTQ0LCAgIDE0
NSwgICAgNzUsCisgICAgIDE0MywgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDQwLCAgICA3NCwKKyAgICAgIDc1LCAgICA4MCwgICAxMDYsICAgMTE5
LCAgIDEyMCwgICAxMjIsICAgMTI0LCAgIDEyNSwgICAxMzcsICAgMTQ3LAorICAgICAxNDgsICAg
MTQ5LCAgIDE1MCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNjAsICAgMTY3LCAgICA0MywgICAx
MjksCisgICAgIDEzMiwgICAgNzIsICAgIDc5LCAgICA3MywgICAxMjMsICAgMTIwLCAgIDE0Niwg
ICAxMDYsICAgMTA2LCAgIDEyMiwKKyAgICAgIDUxLCAgICA1MiwgICAgNzIsICAgIDc2LCAgICA3
MSwgICAgNzEsICAgIDc3LCAgICAzOSwgICAxMjAsICAgIDcwLAorICAgICAxMDYsICAgIDg1LCAg
ICA4NiwgICAgODIsICAgIDg0LCAgICA1MywgICAgNTQsICAgIDg4LCAgICA4OSwgICAgNTUsCisg
ICAgICA1NiwgICAgNTcsICAgIDU5LCAgICA1OCwgICAgOTMsICAgIDczLCAgICA3NSwgICAgNzIs
ICAgIDc3LCAgICA4MCwKKyAgICAgIDgwLCAgICA4MCwgICAxNjIsICAgIDcwLCAgICA3MCwgICAg
ODAsICAgIDgwLCAgIDEyMiwgICAgNzAsICAgIDc1LAorICAgICAxNTEsICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDY5LCAgICA3OSwgICAxMjEsICAgIDc3LCAgICA4MCwgICAgNzUsCisgICAgIDE0
OCwgICAgNzIsICAgIDczLCAgIDEyMywgICAxNDYsICAgIDczLCAgICA3MSwgICAgOTgsICAgMTIy
LCAgICA0MywKKyAgICAgIDQ4LCAgIDEwMSwgICAxMjAsICAgMTA2LCAgIDEwNiwgICAxMDgsICAg
MTA4LCAgIDExMCwgICAxMTAsICAgMTEwLAorICAgICAxMTAsICAgMTExLCAgIDExMSwgICAxMTUs
ICAgMTE2LCAgIDExNywgICAxMjIsICAgMTIzLCAgIDE0NSwgICAxNDgsCisgICAgIDE2MywgICAx
MjIsICAgIDgwLCAgIDE2MSwgICAxNTUsICAgMTIwLCAgIDEyMCwgICAxMjMsICAgIDc5LCAgICA3
MywKKyAgICAgIDczLCAgICA3OCwgICAgNzMsICAgIDQwLCAgIDE0NywgICAxNTYsICAgMTY0LCAg
ICA3MSwgICAxMjIsICAgMTM1LAorICAgICAxNTksICAgMTUyLCAgICA3MywgICAxNDYsICAgIDc5
LCAgIDEyMCwgICAgNzAsICAgMTU5LCAgIDE2NSwgICAxNjYsCisgICAgIDE0OCwgICAxNTgsICAg
IDQzLCAgICA3MSwgICAgNzUsICAgMTQ2LCAgIDEyMiwgICAgODAsICAgIDcxLCAgICAxNiwKKyAg
ICAgIDc5LCAgIDE0OSwgICAxNTMsICAgMTU0LCAgICA3MSwgICAxMjIsICAgMTUzLCAgIDE0OCwg
ICAxNDYsICAgIDgwCit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisj
ZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0y
KQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIK
KyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8g
eXllcnJvcmxhYgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAg
VGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24g
dG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJz
aW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZp
bmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5
ZXJyc3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJ
CQkJCQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAg
ewkJCQkJCQkJXAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwg
PSAoVmFsdWUpOwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJ
CQkJXAorICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJ
CQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAor
ICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisg
ICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQor
CisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
CisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlM
TE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJ
XAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1
cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkg
IChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47
CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xp
bmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFz
dF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJ
XAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlc
CisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChS
aHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgw
KSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlv
biBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFs
bHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTog
d2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9M
T0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBF
X0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAor
ICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJz
dF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAo
TG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZp
bGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2Fs
bGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxF
WF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vs
c2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsKQorI2VuZGlmCisKKy8qIEVuYWJsZSBk
ZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBS
SU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZ
RFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAg
IFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlf
U1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJ
CQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAor
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlKTsgXAorICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwK
K30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmlu
dCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZh
bHVlcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1
dCwgeXl0eXBlLCB5eXZhbHVlcCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBl
OworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyNlbmRpZgoreworICBpZiAo
IXl5dmFsdWVwKQorICAgIHJldHVybjsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2
YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAo
eXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9u
IFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9z
eW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5
dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisjZW5kaWYKK3sKKyAg
aWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4g
JXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3By
aW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUg
c3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQp
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBl
X2ludDE2ICp0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0b20s
IHRvcCkKKyAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRvcDsK
KyNlbmRpZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsg
Ym90dG9tIDw9IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAq
Ym90dG9tKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9T
VEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1
ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9
IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBi
ZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSkK
KyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlKQorICAg
IFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJo
cyA9IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8g
PSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sg
YnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAg
LyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwg
eXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAi
LCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkK
KwkJICAgICAgIAkJICAgICAgICk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAg
IH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisg
IGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSk7IFwK
K30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNl
LiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMg
Y2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBk
ZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5
cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9w
KQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8K
KworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNr
cy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNl
bmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93
IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBt
ZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0
aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZ
WVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJl
Y2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBk
ZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9T
RQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5l
ZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1
cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlz
dHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3Qg
Y2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4g
PSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxl
bjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZp
bmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNF
CisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZ
WURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgor
ICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNy
YykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBj
aGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAq
eXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5
eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0g
MTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0
byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNl
c3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBm
b3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMg
dW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUs
IGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFz
aCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwg
ZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3Vs
dAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChj
aGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQor
ICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5
eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2Ug
J1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkg
IGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90
X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJ
ICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJ
ICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVz
W3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9x
dW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5
eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9Cisj
IGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRo
ZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJl
dHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWlu
YXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFu
eXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAg
IGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3lu
dGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlm
IG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGlj
IFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBp
bnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZ
WVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxz
ZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAg
IFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAg
ICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAg
ICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9T
RV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZF
UkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyog
VGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFy
ZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7Cisj
IGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAg
IHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhw
ZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOwor
ICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5
eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0g
MikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5
cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5l
Z2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAg
ICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0
aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5
Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2ts
aW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291
bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10
ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9
IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0g
PT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5
eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAn
XDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1l
W3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4
XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5
c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7
CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0
KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6
ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUx
OworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsK
KworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQg
aW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5k
ZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBh
IHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlw
ID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9
ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAm
JiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5
eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7
CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAg
fQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkg
YXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25z
dCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXApCisjZWxzZQorc3Rh
dGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIGNvbnN0
IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7Cisj
ZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVm
YXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisKKy8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAt
V21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAq
WVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8q
ICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2Vu
ZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCisKKworCisKKworCisvKi0tLS0tLS0t
LS0uCit8IHl5cGFyc2UuICB8CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFN
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNl
ICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJB
TSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQK
K3l5cGFyc2UgKHZvaWQpCisjZWxzZQoraW50Cit5eXBhcnNlICgpCisKKyNlbmRpZgorI2VuZGlm
Cit7CisgIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBU
aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUg
eXlsdmFsOworCisvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5
bmVycnM7CisKKyAgaW50IHl5c3RhdGU7CisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAg
LyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxl
ZC4gICovCisgIGludCB5eWVycnN0YXR1czsKKyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBp
bnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAw
OworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBh
bmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFy
ICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1z
Z2J1ZjsKKyNlbmRpZgorCisgIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAg
IGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1h
bnRpYyB2YWx1ZXMsCisgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAg
UmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92
ZXJmbG93CisgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgIC8qIFRo
ZSBzdGF0ZSBzdGFjay4gICovCisgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Cisg
IHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOworICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisg
IC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklU
REVQVEhdOworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CisgIFlZU1RZUEUgKnl5dnNwOworCisK
KworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQor
CisgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgLyogVGhlIHZhcmlh
YmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUK
KyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworCisgIC8qIFRo
ZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAg
IEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50
IHl5bGVuID0gMDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikp
OworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOwor
ICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKwor
ICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBv
ZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhl
IHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRz
IGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9
IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQ
dXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisg
eXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZh
bHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28g
cHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisK
KyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFj
a3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2Vk
IHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpF
X1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAg
IHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2Ug
Y29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFs
IG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5
dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRk
cmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0
aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwg
YXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVu
ZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygi
bWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNz
cCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5
c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9Cisj
ZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAg
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNr
IG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQor
CWdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYg
KFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisK
KyAgICAgIHsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5
eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVT
ICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKwor
IyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RB
Q0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZs
b3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0g
eXl2cyArIHl5c2l6ZSAtIDE7CisKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sg
c2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFj
a3NpemUpKTsKKworICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJ
WVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUg
JWRcbiIsIHl5c3RhdGUpKTsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgor
fCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHBy
b3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAg
IGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBv
bmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJl
ZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVd
OworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8q
IE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2
ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBh
IHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQor
ICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwor
ICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisg
ICAgeworICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xf
UFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAg
fQorCisgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlz
IHRvIHJlZHVjZSBvciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24u
ICAqLworICB5eW4gKz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8
IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5
eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAg
fHwgeXluID09IFlZVEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5
bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkK
KyAgICBZWUFDQ0VQVDsKKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsg
YWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVy
cnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFk
IHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBp
dCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1Q
VFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5
eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rp
b24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0g
eXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOwor
ICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8g
cmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBp
cyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAg
ICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMg
WVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5k
IEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRv
IFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxs
ZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1
c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAg
WVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNh
c2UgMjoKKworICAgIHsKKyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRv
bmUgaW4gdGhlIGxleGljYWwgcGhhc2UKKyAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0g
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSog
dmFyaWFibGU7CisgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlk
ZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBUVHlwZSB0
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtl
VmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0
eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtl
VmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2
YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRv
bid0IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRo
ZSBwb29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorCisgICAgICAg
IGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25z
dFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gSU5UX1RZUEUgaXMgb25seSAxNi1iaXQgcGx1cyBzaWduIGJpdCBmb3IgdmVydGV4L2ZyYWdt
ZW50IHNoYWRlcnMsCisgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRz
CisgICAgICAgIC8vCisgICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKSA+
PSAoMSA8PCAxNikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXkt
PnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICBpZiAoISh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5
bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwg
bWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXks
IG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgeyAvLyBjb25zdGFu
dCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0QXJyYXlOb2RlKCh5eXZzcFsoMykg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAg
ICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5u
dW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gKHl5dnNwWygzKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdh
eSBiZWNhdXNlIHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKKyAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0
VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkg
eyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBtYXRyaWNlcworICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RNYXRyaXhO
b2RlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAo
eXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGlu
ZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZzcFso
MykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXpl
KCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldE1heEFycmF5U2l6ZSgp
IDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhT
aXplKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJv
bE5vZGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5
cGVQb2ludGVyKCksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCks
IHRydWUsICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNpemUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKSwgMCwgZmFsc2UsICh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxl
eCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigp
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGlu
ZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3aXRoIGEgc2l6ZSBiZWZvcmUg
YmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGln
aCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICB9IGVs
c2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5
KCkpIHsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSk7CisKKyAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlm
aWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRU
eXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5
cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNp
c2lvbigpLCBFdnFDb25zdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxT
aXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwg
RXZxQ29uc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5
cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7
CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
aXNBcnJheSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXki
LCAiLiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAg
ICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFso
MykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAg
ICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzLm51bSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
KyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenps
ZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGlu
dCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5saW5lKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOworICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgo
RU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9y
YXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5h
bFNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cpOwor
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5
cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJh
c2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CisgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZHMg
PT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJy
b3IiLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBmaWVsZHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKmZp
ZWxkcylbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmFkZENvbnN0U3RydWN0KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBz
dHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5k
ZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksICooKmZpZWxkcylbaV0udHlwZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAi
IG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZpZWxkIHNl
bGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFu
ZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywg
aXQncyBmcm9tIHRoZSBwb29sCisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisg
ICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJv
cigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgy
KV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNToKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBm
bkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBi
ZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3lt
Ym9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0
ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlz
IHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25z
dHJ1Y3RvckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAmdHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEl0
J3MgYSBjb25zdHJ1Y3Rvciwgb2YgdHlwZSAndHlwZScuCisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRl
eHQtPmFkZENvbnN0cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwg
JnR5cGUsIG9wLCBmbkNhbGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKHR5cGUpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBp
dCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnN0
IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBib29sIGJ1aWx0SW47CisgICAg
ICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBp
ZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IEEgZGVjbGFyZWQgZnVuY3Rpb24uICBCdXQsIGl0IG1pZ2h0IHN0aWxsIG1hcCB0byBhIGJ1aWx0
LWluCisgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRv
IGEgYnVpbHQtaW4gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQg
aXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAwLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgp
LCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5
cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VElu
dGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVS
Uk9SOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rp
b24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGws
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0
dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93
IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVz
ZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09
IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWls
dEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0
cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJE
ZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5h
bWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOworICAgICAgICAg
ICAgICAgICAgICBUUXVhbGlmaWVyTGlzdCYgcXVhbGlmaWVyTGlzdCA9ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFt
Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpmbkNhbmRp
ZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdl
dEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUo
KSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcg
cGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHF1
YWxpZmllckxpc3QucHVzaF9iYWNrKHF1YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBi
eSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9k
ZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBm
bkNhbGw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBw
b3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAw
LCBuZXcgVFR5cGUoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+
YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1Ob2RlID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgeworICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS51c2Vy
RGVmKSB7CisgICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAg
IFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgICAg
IFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBF
T3BDb25zdHJ1Y3RTdHJ1Y3QpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikg
PSBmdW5jdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9
IEVPcE51bGw7CisgICAgICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXpl
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdElu
dDsgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZ
KCJpdmVjMiIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFH
X1ZFUlRfT05MWSgiaXZlYzMiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7
IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDog
ICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWM0IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6Cisg
ICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXpl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMzIiwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVj
NCIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1
Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBUVHlwZTo6Z2V0QmFzaWNT
dHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpLCAiIik7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFN0
cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKSk7CisgICAgICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0g
bmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVz
ZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgKih5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRG
dW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlv
bjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjc6CisKKyAgICB7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRl
ZmluZWQpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
ZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI4Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMjk6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMild
LmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT51bmFyeU9wRXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDMwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5h
cnlPcEVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMToKKwor
ICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AgIT0gRU9wTnVs
bCkgeworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAgICAgIHN3
aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIGVy
cm9yT3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZl
OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxp
bmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
TG9naWNhbE5vdDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM2OgorCisgICAgeworICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgiKiIsICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgIioiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNzoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJU
X09OTFkoIi8iLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIv
IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMzg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMzk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
QWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIisiLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA0MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQyOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQzOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0
NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI+IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI8PSIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiPj0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NzoKKworICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsICI9PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpIHx8ICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9u
RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJHTF8zRExfYXJyYXlfb2Jq
ZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiE9Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0Fy
cmF5KCkgfHwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJy
YXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTA6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTE6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTM6CisK
KyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTQ6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDU1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDU2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxY
b3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiXl4iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsT3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAifHwi
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MDoKKworICAgIHsKKyAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAoKHl5
dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2
c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQorICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICI6Iiwg
KHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg1KSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNjE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNjI6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiYXNzaWduIiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0g
KDMpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikg
LSAoMyldLmludGVybSkubGluZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3NpZ25FcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKKyAgICAgICAgfSBlbHNlIGlmICgoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSB8fCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiR0xfM0RMX2FycmF5X29i
amVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA2MzoKKworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBj
YXNlIDY0OgorCisgICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA2NToKKworICAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNjY6CisKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2NzoKKworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY4OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiLCIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDcwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdEVy
cm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsKKyAgICAgICAg
VEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlv
bik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcg
VEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXRO
YW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5n
ZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciAm
cGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
dmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5n
ZXRUeXBlKCksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSksICh5eXZzcFsoMSkgLSAo
MildLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkubGluZSksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RvdHlwZS0+c2V0T3BlcmF0b3IoRU9w
UHJvdG90eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHByb3RvdHlw
ZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzI6CisKKyAgICB7CisgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAg
ICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihF
T3BEZWNsYXJhdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5
cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVjaXNpb24pICk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3
NDoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRpb25z
IG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLworICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBjb2Rl
IHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRvbid0IGtub3cg
YXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAgICAgICAvLwor
ICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVz
IGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAvLworICAgICAg
ICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAg
aWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7Cisg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqcHJldkRlYylbaV0udHlwZS0+Z2V0UXVhbGlm
aWVyKCkgIT0gKCooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKVtpXS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3Qg
aGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICgqKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
SWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZpbml0aW9u
LAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFyaWFibGUg
bmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAgICAgICAvLyBi
ZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9uLCBub3Qg
dGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAgICAgICAoeXl2YWwu
aW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7
CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKih5eXZhbC5pbnRl
cm0pLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzc6CisKKyAgICB7
CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVu
Y3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgaWYg
KCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0g
RWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0u
dHlwZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisKKyAgICB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVu
Y3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1l
dGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAg
ICAgIC8vCisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGUt
PmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
ImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIs
ICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7
CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJh
bWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIH0KKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUs
ICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmll
clN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgorICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVu
Y3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQg
cmVjdXJzaW9uKQorICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0
eXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSk7CisgICAgICAgIGZ1bmN0aW9uID0g
bmV3IFRGdW5jdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDgwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBl
ICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkpfTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisKKyAgICB7CisgICAgICAgIC8vIENoZWNr
IHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCku
bGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUp
XS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJy
YXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
KHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFs
LmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFso
MykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDgzOgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVy
bSkubGluZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDg0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAo
MyldLmludGVybSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2
YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3JhcnksICh5eXZzcFso
MSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxSW47CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgODg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVy
KSA9IEV2cU91dDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5MDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9
IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgOTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKTsKKyAgICAgICAgCisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtKS50eXBl
LnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LnR5cGUucHJlY2lzaW9uID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJl
Y2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkudHlwZS50eXBlKTsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBlLnByZWNpc2lvbiwgKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS50eXBlLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgOTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLmxpbmUsICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJy
b3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JD
aGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTM6CisKKyAgICB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNw
WygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxp
bmUsICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSld
LmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBwYXJzZUNvbnRl
eHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNr
KCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3Ry
aW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxl
eCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0g
KDYpXS5pbnRlcm0pLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eXZzcFsoNCkgLSAoNildLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZz
cFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
NildLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUg
dHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSk7CisgICAgICAgICAg
ICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
KHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBl
LCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxp
bmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk1OgorCisgICAg
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5
eXZzcFsoMykgLSAoNyldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKTsKKworICAgICAgICBUVmFyaWFi
bGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXl2c3BbKDQpIC0gKDcpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNyldLmlu
dGVybSkudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5
dnNwWyg0KSAtICg3KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUs
ICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0
QXJyYXlTaXplKCkpOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNo
ZWNrKCh5eXZzcFsoNCkgLSAoNyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNyldLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dmFsLmludGVybSkubGlu
ZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIo
KHl5dnNwWygzKSAtICg3KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg3KV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoNyldLmludGVybSkudHlwZSwgKHl5dnNwWyg3KSAtICg3KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKGludGVy
bU5vZGUpCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICg3KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXl2c3BbKDYpIC0gKDcpXS5s
ZXgpLmxpbmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgOTY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg4KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDgp
XS5pbnRlcm0pOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoOCldLmxl
eCkubGluZSwgKHl5dnNwWygxKSAtICg4KV0uaW50ZXJtKS50eXBlKSB8fCBwYXJzZUNvbnRleHQt
PmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDgpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAt
ICg4KV0ubGV4KS5saW5lLCAoeXl2c3BbKDUpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6
ZSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNw
Wyg0KSAtICg4KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg4KV0ubGV4KS5zdHJpbmcsICh5
eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtKS5saW5lLCAiR0xfM0RM
X2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAg
ICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXl2c3BbKDMp
IC0gKDgpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDgpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygxKSAtICg4KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDgpIC0gKDgpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9u
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDgpXS5pbnRl
cm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eXZzcFsoNykgLSAoOCldLmxleCkubGluZSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA5NzoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7
CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VD
b250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAq
KHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSku
dHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5v
ZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVk
aWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmIChpbnRl
cm1Ob2RlKQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVy
bSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfQor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxp
bmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICh5eXZh
bC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5
dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25J
bml0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGlu
ZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwu
aW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpIHx8IHBhcnNlQ29udGV4
dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2so
KHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDEwMToKKworICAgIHsKKyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBl
KCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7CisgICAgICAgIGludCBzaXplOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAo
NSldLmxleCkubGluZSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5
cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5z
dHJpbmcsIHR5cGUsICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSksICh5eXZzcFsoMikgLSAo
NSldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAgICAgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB2YXJpYWJs
ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgVEludGVybU5vZGUq
IGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6
ZXIoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAg
ICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KGludGVybU5vZGUsICh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDM6CisKKyAgICB7CisgICAgICAgIFZF
UlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5xdWFsaWZpZXIgPSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNToKKworICAgIHsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSAmJiBwYXJzZUNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBl
KS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXko
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDc6CisKKyAg
ICB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cUF0dHJpYnV0ZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTA4OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3Vh
Z2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZh
cnlpbmciKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5n
T3V0LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdJbiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTEwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDExMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9u
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9
IEVicE1lZGl1bTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTE3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJv
b2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDEyMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MjM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI0OgorCisgICAgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDEyNjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEy
NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoNCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMToKKwor
ICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDIiLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMiwgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAg
IHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMywgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMzoKKworICAgIHsK
KyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
NCwgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoKKworICAgIHsKKyAg
ICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1Ogor
CisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckN1YmUiLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM2OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic3RydWN0Iiwg
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMg
aXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9va2Vk
IHVwIHRoZQorICAgICAgICAvLyB0eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlwZSYgc3Ry
dWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
eW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM4
OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
KHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJp
bmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5
cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0udHlwZUxp
c3QpLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcpOworICAgICAgICBUVmFyaWFibGUq
IHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmlu
ZywgKnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAicmVkZWZpbml0aW9uIiwgKHl5dnNw
WygyKSAtICg1KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAo
NSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0
cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM5OgorCisgICAgeworICAg
ICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoNCldLmludGVy
bS50eXBlTGlzdCksIFRTdHJpbmcoIiIpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGVMaXN0KTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQxOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlTGlzdCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgaWYgKCgqKHl5dmFsLmludGVybS50eXBlTGlzdCkpW2pdLnR5cGUt
PmdldEZpZWxkTmFtZSgpID09ICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlb
aV0udHlwZS0+Z2V0RmllbGROYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigoKih5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUs
ICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19z
dHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3Qp
KVtpXSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQyOgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS50eXBlTGlzdCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+dm9pZEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmxpbmUsICgqKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLnR5cGVMaXN0KSlbMF0udHlwZS0+Z2V0RmllbGROYW1lKCksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
KHl5dmFsLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3cgYXNwZWN0
cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAo
Kih5eXZhbC5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuc2l6
ZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0
KSlbaV0udHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubGlu
ZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAgICAgICAgICgq
KHl5dmFsLmludGVybS50eXBlTGlzdCkpW2ldLnR5cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZikKKyAgICAgICAgICAgICAgICAoKih5eXZh
bC5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5zZXRUeXBlTmFtZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgIH0KKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpbmUp
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVy
bS50eXBlTGluZSkpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6CisKKyAgICB7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFt
ZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNDY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDQp
XS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAo
eXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
bmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpOwor
CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVF
cnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFy
cmF5U2l6ZShzaXplKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0ODoKKworICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1Ob2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0OToKKworICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUxOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTUzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU1OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU2OgorCisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU3
OgorCisgICAgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE1ODoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3Ao
KTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1OToKKworICAgIHsKKyAgICAgICAgaWYgKCh5
eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApCisgICAgICAgICAg
ICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3BlcmF0b3Io
RU9wU2VxdWVuY2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTYxOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYy
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkpCisgICAgICAgICAgICAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3BlcmF0b3IoRU9wU2VxdWVu
Y2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgz
KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE2NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1O
b2RlKSwgMCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKworICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBzdGF0aWNfY2FzdDxUSW50ZXJt
Tm9kZSo+KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE2ODoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwg
KHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MDoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTcxOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2so
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoK
KworICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xF
cnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGludGVybU5vZGUpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAgIHsgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTc0OgorCisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDYpIC0gKDYpXS5p
bnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAwLCB0cnVlLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOworICAgICAgICAtLXBh
cnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTc1OgorCisgICAgeyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWyg4KSAtICg4KV0ubGV4KS5saW5lLCAoeXl2c3BbKDYp
IC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRl
cm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAwLCBmYWxzZSwgKHl5dnNwWyg0KSAtICg4KV0ubGV4KS5saW5lKTsKKyAgICAgICAgLS1wYXJz
ZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE3NzoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VD
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc4Ogor
CisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkTG9vcCgoeXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNykg
LSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQq
PigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnByZXRf
Y2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5v
ZGUyKSwgdHJ1ZSwgKHl5dnNwWygxKSAtICg3KV0ubGV4KS5saW5lKTsKKyAgICAgICAgLS1wYXJz
ZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE3OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTgwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxODE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE4MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0g
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4NToKKworICAgIHsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwg
ImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTg2OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkg
YWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAoeXl2c3BbKDEp
IC0gKDIpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSk7Cisg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMyldLmxleCkubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwg
InJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg5OgorCisgICAgeworICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNo
KEVPcEtpbGwsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE5MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgcGFy
c2VDb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE5MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0g
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTkyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxOTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE5NDoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICoo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbik7CisgICAgICAgIFRGdW5jdGlvbiog
cHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuZmluZChmdW5jdGlvbi5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBm
aXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2
ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxv
b2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8vCisg
ICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi5n
ZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAg
IC8vCisgICAgICAgIC8vIFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtl
cyBhbnkgcGFyYW1ldGVycyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAg
ICAgIC8vCisgICAgICAgIGlmIChmdW5jdGlvbi5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAi
ZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgIiIsIGZ1bmN0aW9uLmdl
dFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0
dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5ldyBz
eW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBpdHMgYXJndW1lbnRz
CisgICAgICAgIC8vCisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwor
CisgICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0
ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBw
YXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5
cGUoKSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxz
ZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBz
eW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0
J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAvLyAoY291bGQg
YmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAvLyBBbHNvLCBh
Y2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBs
ZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KKyAg
ICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50
ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0
aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgeworICAgICAgICAgICAg
ICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJh
bS50eXBlKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEluc2VydCB0
aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
aW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBUcmFuc2ZlciBvd25lcnNoaXAgb2YgbmFtZSBwb2ludGVyIHRvIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtLm5hbWUgPSAwOworCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciB0byB0
aGUgSElMCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmxpbmUpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk1
OgorCisgICAgeworICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZh
bHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPworICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRv
bmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVi
dFZvaWQgJiYgISBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkubGluZSwg
ImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5v
ZGUpLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRl
T3BlcmF0b3IoKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSwgRU9wRnVuY3Rpb24sICh5eXZzcFso
MSkgLSAoMyldLmludGVybSkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5m
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3Jl
IHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIg
dmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9u
IGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUocGFyc2VDb250ZXh0
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJh
Z21hLmRlYnVnKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJh
Z21hVGFibGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3IG9mIHlhY2Mu
Yy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5U
ICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sg
KHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwor
CisgICorK3l5dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9m
IHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8s
IGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAg
bnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRl
ID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRl
ICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAg
IHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVm
Z290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBk
ZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9y
LCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAg
ICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChZWV8o
InN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlz
eW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlz
aXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZ
WVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFs
bG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9j
ID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJ
ICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFD
S19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9
IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5
bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwg
eXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3lu
dGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoeXltc2cp
OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7
CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAg
fQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykK
KyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1h
aGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlm
ICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9m
IGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQor
ICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAg
ICAgIHl5dG9rZW4sICZ5eWx2YWwpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQor
CisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlm
dGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVy
cm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBj
b2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIg
dGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8q
Q09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNs
YWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAg
dGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7Cisg
IFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdv
dG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZv
ciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToK
KyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRz
IHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3Rh
dGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJS
T1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0g
WVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYg
KDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJl
bnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisg
ICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3Qg
KCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7CisgICAgICBZ
WVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19Q
UklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJy
b3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5d
LCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsK
KworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0
bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5
cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFi
b3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXly
ZXR1cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXho
YXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKFlZXygibWVt
b3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAq
LworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAh
PSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhl
YWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JU
IG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5
eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBp
ZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYg
WVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAg
cmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCkluZGV4OiBBTkdMRS9zcmMvaW50
ZXJtZWRpYXRlL2dsc2xhbmdfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2ludGVybWVk
aWF0ZS9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2ludGVybWVkaWF0
ZS9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NCBAQAorLyogQSBCaXNv
biBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIFNrZWxldG9uIGludGVy
ZmFjZSBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAo
QykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
IHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1h
eSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0
aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5k
ZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2Vs
ZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVk
IHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5
LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBp
dHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBl
eGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5n
CisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisK
KyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogVG9rZW5z
LiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQ
dXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhl
ciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50
eXBlIHsKKyAgICAgSU5WQVJJQU5UID0gMjU4LAorICAgICBISUdIX1BSRUNJU0lPTiA9IDI1OSwK
KyAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKKyAgICAgTE9XX1BSRUNJU0lPTiA9IDI2MSwK
KyAgICAgUFJFQ0lTSU9OID0gMjYyLAorICAgICBBVFRSSUJVVEUgPSAyNjMsCisgICAgIENPTlNU
X1FVQUwgPSAyNjQsCisgICAgIEJPT0xfVFlQRSA9IDI2NSwKKyAgICAgRkxPQVRfVFlQRSA9IDI2
NiwKKyAgICAgSU5UX1RZUEUgPSAyNjcsCisgICAgIEJSRUFLID0gMjY4LAorICAgICBDT05USU5V
RSA9IDI2OSwKKyAgICAgRE8gPSAyNzAsCisgICAgIEVMU0UgPSAyNzEsCisgICAgIEZPUiA9IDI3
MiwKKyAgICAgSUYgPSAyNzMsCisgICAgIERJU0NBUkQgPSAyNzQsCisgICAgIFJFVFVSTiA9IDI3
NSwKKyAgICAgQlZFQzIgPSAyNzYsCisgICAgIEJWRUMzID0gMjc3LAorICAgICBCVkVDNCA9IDI3
OCwKKyAgICAgSVZFQzIgPSAyNzksCisgICAgIElWRUMzID0gMjgwLAorICAgICBJVkVDNCA9IDI4
MSwKKyAgICAgVkVDMiA9IDI4MiwKKyAgICAgVkVDMyA9IDI4MywKKyAgICAgVkVDNCA9IDI4NCwK
KyAgICAgTUFUUklYMiA9IDI4NSwKKyAgICAgTUFUUklYMyA9IDI4NiwKKyAgICAgTUFUUklYNCA9
IDI4NywKKyAgICAgSU5fUVVBTCA9IDI4OCwKKyAgICAgT1VUX1FVQUwgPSAyODksCisgICAgIElO
T1VUX1FVQUwgPSAyOTAsCisgICAgIFVOSUZPUk0gPSAyOTEsCisgICAgIFZBUllJTkcgPSAyOTIs
CisgICAgIFNUUlVDVCA9IDI5MywKKyAgICAgVk9JRF9UWVBFID0gMjk0LAorICAgICBXSElMRSA9
IDI5NSwKKyAgICAgU0FNUExFUjJEID0gMjk2LAorICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKKyAg
ICAgSURFTlRJRklFUiA9IDI5OCwKKyAgICAgVFlQRV9OQU1FID0gMjk5LAorICAgICBGTE9BVENP
TlNUQU5UID0gMzAwLAorICAgICBJTlRDT05TVEFOVCA9IDMwMSwKKyAgICAgQk9PTENPTlNUQU5U
ID0gMzAyLAorICAgICBGSUVMRF9TRUxFQ1RJT04gPSAzMDMsCisgICAgIExFRlRfT1AgPSAzMDQs
CisgICAgIFJJR0hUX09QID0gMzA1LAorICAgICBJTkNfT1AgPSAzMDYsCisgICAgIERFQ19PUCA9
IDMwNywKKyAgICAgTEVfT1AgPSAzMDgsCisgICAgIEdFX09QID0gMzA5LAorICAgICBFUV9PUCA9
IDMxMCwKKyAgICAgTkVfT1AgPSAzMTEsCisgICAgIEFORF9PUCA9IDMxMiwKKyAgICAgT1JfT1Ag
PSAzMTMsCisgICAgIFhPUl9PUCA9IDMxNCwKKyAgICAgTVVMX0FTU0lHTiA9IDMxNSwKKyAgICAg
RElWX0FTU0lHTiA9IDMxNiwKKyAgICAgQUREX0FTU0lHTiA9IDMxNywKKyAgICAgTU9EX0FTU0lH
TiA9IDMxOCwKKyAgICAgTEVGVF9BU1NJR04gPSAzMTksCisgICAgIFJJR0hUX0FTU0lHTiA9IDMy
MCwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMSwKKyAgICAgWE9SX0FTU0lHTiA9IDMyMiwKKyAgICAg
T1JfQVNTSUdOID0gMzIzLAorICAgICBTVUJfQVNTSUdOID0gMzI0LAorICAgICBMRUZUX1BBUkVO
ID0gMzI1LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNiwKKyAgICAgTEVGVF9CUkFDS0VUID0gMzI3
LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI4LAorICAgICBMRUZUX0JSQUNFID0gMzI5LAorICAg
ICBSSUdIVF9CUkFDRSA9IDMzMCwKKyAgICAgRE9UID0gMzMxLAorICAgICBDT01NQSA9IDMzMiwK
KyAgICAgQ09MT04gPSAzMzMsCisgICAgIEVRVUFMID0gMzM0LAorICAgICBTRU1JQ09MT04gPSAz
MzUsCisgICAgIEJBTkcgPSAzMzYsCisgICAgIERBU0ggPSAzMzcsCisgICAgIFRJTERFID0gMzM4
LAorICAgICBQTFVTID0gMzM5LAorICAgICBTVEFSID0gMzQwLAorICAgICBTTEFTSCA9IDM0MSwK
KyAgICAgUEVSQ0VOVCA9IDM0MiwKKyAgICAgTEVGVF9BTkdMRSA9IDM0MywKKyAgICAgUklHSFRf
QU5HTEUgPSAzNDQsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM0NSwKKyAgICAgQ0FSRVQgPSAzNDYs
CisgICAgIEFNUEVSU0FORCA9IDM0NywKKyAgICAgUVVFU1RJT04gPSAzNDgKKyAgIH07CisjZW5k
aWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIElOVkFSSUFOVCAyNTgKKyNkZWZpbmUgSElHSF9Q
UkVDSVNJT04gMjU5CisjZGVmaW5lIE1FRElVTV9QUkVDSVNJT04gMjYwCisjZGVmaW5lIExPV19Q
UkVDSVNJT04gMjYxCisjZGVmaW5lIFBSRUNJU0lPTiAyNjIKKyNkZWZpbmUgQVRUUklCVVRFIDI2
MworI2RlZmluZSBDT05TVF9RVUFMIDI2NAorI2RlZmluZSBCT09MX1RZUEUgMjY1CisjZGVmaW5l
IEZMT0FUX1RZUEUgMjY2CisjZGVmaW5lIElOVF9UWVBFIDI2NworI2RlZmluZSBCUkVBSyAyNjgK
KyNkZWZpbmUgQ09OVElOVUUgMjY5CisjZGVmaW5lIERPIDI3MAorI2RlZmluZSBFTFNFIDI3MQor
I2RlZmluZSBGT1IgMjcyCisjZGVmaW5lIElGIDI3MworI2RlZmluZSBESVNDQVJEIDI3NAorI2Rl
ZmluZSBSRVRVUk4gMjc1CisjZGVmaW5lIEJWRUMyIDI3NgorI2RlZmluZSBCVkVDMyAyNzcKKyNk
ZWZpbmUgQlZFQzQgMjc4CisjZGVmaW5lIElWRUMyIDI3OQorI2RlZmluZSBJVkVDMyAyODAKKyNk
ZWZpbmUgSVZFQzQgMjgxCisjZGVmaW5lIFZFQzIgMjgyCisjZGVmaW5lIFZFQzMgMjgzCisjZGVm
aW5lIFZFQzQgMjg0CisjZGVmaW5lIE1BVFJJWDIgMjg1CisjZGVmaW5lIE1BVFJJWDMgMjg2Cisj
ZGVmaW5lIE1BVFJJWDQgMjg3CisjZGVmaW5lIElOX1FVQUwgMjg4CisjZGVmaW5lIE9VVF9RVUFM
IDI4OQorI2RlZmluZSBJTk9VVF9RVUFMIDI5MAorI2RlZmluZSBVTklGT1JNIDI5MQorI2RlZmlu
ZSBWQVJZSU5HIDI5MgorI2RlZmluZSBTVFJVQ1QgMjkzCisjZGVmaW5lIFZPSURfVFlQRSAyOTQK
KyNkZWZpbmUgV0hJTEUgMjk1CisjZGVmaW5lIFNBTVBMRVIyRCAyOTYKKyNkZWZpbmUgU0FNUExF
UkNVQkUgMjk3CisjZGVmaW5lIElERU5USUZJRVIgMjk4CisjZGVmaW5lIFRZUEVfTkFNRSAyOTkK
KyNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDAKKyNkZWZpbmUgSU5UQ09OU1RBTlQgMzAxCisjZGVm
aW5lIEJPT0xDT05TVEFOVCAzMDIKKyNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwMworI2RlZmlu
ZSBMRUZUX09QIDMwNAorI2RlZmluZSBSSUdIVF9PUCAzMDUKKyNkZWZpbmUgSU5DX09QIDMwNgor
I2RlZmluZSBERUNfT1AgMzA3CisjZGVmaW5lIExFX09QIDMwOAorI2RlZmluZSBHRV9PUCAzMDkK
KyNkZWZpbmUgRVFfT1AgMzEwCisjZGVmaW5lIE5FX09QIDMxMQorI2RlZmluZSBBTkRfT1AgMzEy
CisjZGVmaW5lIE9SX09QIDMxMworI2RlZmluZSBYT1JfT1AgMzE0CisjZGVmaW5lIE1VTF9BU1NJ
R04gMzE1CisjZGVmaW5lIERJVl9BU1NJR04gMzE2CisjZGVmaW5lIEFERF9BU1NJR04gMzE3Cisj
ZGVmaW5lIE1PRF9BU1NJR04gMzE4CisjZGVmaW5lIExFRlRfQVNTSUdOIDMxOQorI2RlZmluZSBS
SUdIVF9BU1NJR04gMzIwCisjZGVmaW5lIEFORF9BU1NJR04gMzIxCisjZGVmaW5lIFhPUl9BU1NJ
R04gMzIyCisjZGVmaW5lIE9SX0FTU0lHTiAzMjMKKyNkZWZpbmUgU1VCX0FTU0lHTiAzMjQKKyNk
ZWZpbmUgTEVGVF9QQVJFTiAzMjUKKyNkZWZpbmUgUklHSFRfUEFSRU4gMzI2CisjZGVmaW5lIExF
RlRfQlJBQ0tFVCAzMjcKKyNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMjgKKyNkZWZpbmUgTEVGVF9C
UkFDRSAzMjkKKyNkZWZpbmUgUklHSFRfQlJBQ0UgMzMwCisjZGVmaW5lIERPVCAzMzEKKyNkZWZp
bmUgQ09NTUEgMzMyCisjZGVmaW5lIENPTE9OIDMzMworI2RlZmluZSBFUVVBTCAzMzQKKyNkZWZp
bmUgU0VNSUNPTE9OIDMzNQorI2RlZmluZSBCQU5HIDMzNgorI2RlZmluZSBEQVNIIDMzNworI2Rl
ZmluZSBUSUxERSAzMzgKKyNkZWZpbmUgUExVUyAzMzkKKyNkZWZpbmUgU1RBUiAzNDAKKyNkZWZp
bmUgU0xBU0ggMzQxCisjZGVmaW5lIFBFUkNFTlQgMzQyCisjZGVmaW5lIExFRlRfQU5HTEUgMzQz
CisjZGVmaW5lIFJJR0hUX0FOR0xFIDM0NAorI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ1CisjZGVm
aW5lIENBUkVUIDM0NgorI2RlZmluZSBBTVBFUlNBTkQgMzQ3CisjZGVmaW5lIFFVRVNUSU9OIDM0
OAorCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNf
REVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQorCit7CisgICAgc3RydWN0IHsKKyAgICAg
ICAgVFNvdXJjZUxvYyBsaW5lOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5n
ICpzdHJpbmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAg
ICAgICAgICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAg
ICB9IGxleDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAg
IFRPcGVyYXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUq
IGludGVybU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAg
ICBURnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAg
ICAgICAgICAgIFRUeXBlTGluZSB0eXBlTGluZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCogdHlw
ZUxpc3Q7CisgICAgICAgIH07CisgICAgfSBpbnRlcm07Cit9CisvKiBMaW5lIDE1Mjkgb2YgeWFj
Yy5jLiAgKi8KKworCVlZU1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xl
c2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVE
IDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisKSW5kZXg6IEFO
R0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L0NvbmZpZy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBD
b25maWcuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0
aGUgZm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1l
bnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNl
Y3Rpb24gMy40IHBhZ2UgMTUuCisKKyNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgiCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBlZ2wKK3sKK0NvbmZp
Zzo6Q29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWws
IEVHTGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9S
TUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQorICAgIDogbURpc3Bs
YXlNb2RlKGRpc3BsYXlNb2RlKSwgbVJlbmRlclRhcmdldEZvcm1hdChyZW5kZXJUYXJnZXRGb3Jt
YXQpLCBtRGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCksIG1NdWx0aVNhbXBs
ZShtdWx0aVNhbXBsZSkKK3sKKyAgICBzZXQoZGlzcGxheU1vZGUsIG1pbkludGVydmFsLCBtYXhJ
bnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIG11bHRpU2Ft
cGxlKTsKK30KKwordm9pZCBDb25maWc6OnNldERlZmF1bHRzKCkKK3sKKyAgICBtQnVmZmVyU2l6
ZSA9IDA7CisgICAgbVJlZFNpemUgPSAwOworICAgIG1HcmVlblNpemUgPSAwOworICAgIG1CbHVl
U2l6ZSA9IDA7CisgICAgbUx1bWluYW5jZVNpemUgPSAwOworICAgIG1BbHBoYVNpemUgPSAwOwor
ICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9ET05U
X0NBUkU7CisgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtQ29s
b3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7CisgICAgbUNvbmZpZ0NhdmVhdCA9IEVHTF9E
T05UX0NBUkU7CisgICAgbUNvbmZpZ0lEID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtQ29uZm9ybWFu
dCA9IDA7CisgICAgbURlcHRoU2l6ZSA9IDA7CisgICAgbUxldmVsID0gMDsKKyAgICBtTWF0Y2hO
YXRpdmVQaXhtYXAgPSBFR0xfTk9ORTsKKyAgICBtTWF4UEJ1ZmZlcldpZHRoID0gMDsKKyAgICBt
TWF4UEJ1ZmZlckhlaWdodCA9IDA7CisgICAgbU1heFBCdWZmZXJQaXhlbHMgPSAwOworICAgIG1N
YXhTd2FwSW50ZXJ2YWwgPSBFR0xfRE9OVF9DQVJFOworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBF
R0xfRE9OVF9DQVJFOworICAgIG1OYXRpdmVSZW5kZXJhYmxlID0gRUdMX0RPTlRfQ0FSRTsKKyAg
ICBtTmF0aXZlVmlzdWFsSUQgPSAwOworICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTX0JJVDsKKyAgICBtU2Ft
cGxlQnVmZmVycyA9IDA7CisgICAgbVNhbXBsZXMgPSAwOworICAgIG1TdGVuY2lsU2l6ZSA9IDA7
CisgICAgbVN1cmZhY2VUeXBlID0gRUdMX1dJTkRPV19CSVQ7CisgICAgbVRyYW5zcGFyZW50VHlw
ZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gRUdMX0RPTlRfQ0FSRTsK
KyAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtVHJhbnNw
YXJlbnRCbHVlVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworfQorCit2b2lkIENvbmZpZzo6c2V0KEQz
RERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVHTGludCBtYXhJ
bnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3Rl
bmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQoreworICAgIHN3aXRjaCAocmVuZGVyVGFy
Z2V0Rm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICBt
QnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNp
emUgPSA1OworICAgICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAg
bUJ1ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSAxMDsKKyAgICAgICAgbUdyZWVu
U2l6ZSA9IDEwOworICAgICAgICBtQmx1ZVNpemUgPSAxMDsKKyAgICAgICAgbUFscGhhU2l6ZSA9
IDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAg
IG1CdWZmZXJTaXplID0gMzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVu
U2l6ZSA9IDg7CisgICAgICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSA4
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgbUJ1
ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXpl
ID0gNjsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgIG1CdWZm
ZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9
IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICBtQnVmZmVy
U2l6ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDg7CisgICAgICAgIG1HcmVlblNpemUgPSA4
OworICAgICAgICBtQmx1ZVNpemUgPSA4OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIE90
aGVyIGZvcm1hdHMgc2hvdWxkIG5vdCBiZSB2YWxpZAorICAgIH0KKworICAgIG1MdW1pbmFuY2VT
aXplID0gMDsKKyAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7CisgICAgbUJpbmRUb1RleHR1cmVSR0Ig
PSBFR0xfRkFMU0U7CisgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0ZBTFNFOworICAgIG1D
b2xvckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gKGRp
c3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpID8gRUdMX05PTkUgOiBFR0xf
U0xPV19DT05GSUc7CisgICAgbUNvbmZpZ0lEID0gMDsKKyAgICBtQ29uZm9ybWFudCA9IEVHTF9P
UEVOR0xfRVMyX0JJVDsKKworICAgIHN3aXRjaCAoZGVwdGhTdGVuY2lsRm9ybWF0KQorICAgIHsK
Ky8vICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKKy8vICAgICAgbURlcHRoU2l6ZSA9IDE2
OworLy8gICAgICBtU3RlbmNpbFNpemUgPSAwOworLy8gICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RDNERk1UX0QzMjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDMyOworICAgICAgICBtU3RlbmNpbFNp
emUgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgorICAgICAg
ICBtRGVwdGhTaXplID0gMTU7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDE7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIG1EZXB0aFNpemUgPSAyNDsK
KyAgICAgICAgbVN0ZW5jaWxTaXplID0gODsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQz
REZNVF9EMjRYODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNp
emUgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAg
ICAgIG1EZXB0aFNpemUgPSAyNDsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gNDsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICAgIG1EZXB0aFNpemUgPSAxNjsK
KyAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKKyAgICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQz
REZNVF9EMzJGX0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMzI7CisvLyAgICAgIG1T
dGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworLy8gICAgY2FzZSBEM0RGTVRfRDI0RlM4
OgorLy8gICAgICBtRGVwdGhTaXplID0gMjQ7CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDg7Cisv
LyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2ZVBpeG1hcCA9IEVHTF9OT05F
OworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1NYXhQQnVmZmVySGVpZ2h0ID0gMDsK
KyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1heFN3YXBJbnRlcnZhbCA9IG1heElu
dGVydmFsOworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKKyAgICBtTmF0aXZl
UmVuZGVyYWJsZSA9IEVHTF9GQUxTRTsKKyAgICBtTmF0aXZlVmlzdWFsSUQgPSAwOworICAgIG1O
YXRpdmVWaXN1YWxUeXBlID0gMDsKKyAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VT
Ml9CSVQ7CisgICAgbVNhbXBsZUJ1ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEgOiAwOworICAgIG1T
YW1wbGVzID0gbXVsdGlTYW1wbGU7CisgICAgbVN1cmZhY2VUeXBlID0gRUdMX1BCVUZGRVJfQklU
IHwgRUdMX1dJTkRPV19CSVQgfCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOworICAg
IG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKKyAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9
IDA7CisgICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CisgICAgbVRyYW5zcGFyZW50Qmx1
ZVZhbHVlID0gMDsKK30KKworRUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKEVHTENvbmZpZykoc2l6ZV90KW1Db25maWdJRDsKK30KKworU29ydENvbmZp
Zzo6U29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCisgICAgOiBtV2FudFJlZChm
YWxzZSksIG1XYW50R3JlZW4oZmFsc2UpLCBtV2FudEJsdWUoZmFsc2UpLCBtV2FudEFscGhhKGZh
bHNlKSwgbVdhbnRMdW1pbmFuY2UoZmFsc2UpCit7CisgICAgc2NhbkZvcldhbnRlZENvbXBvbmVu
dHMoYXR0cmliTGlzdCk7Cit9CisKK3ZvaWQgU29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBv
bmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQoreworICAgIC8vIFtFR0xdIHNlY3Rpb24g
My40LjEgcGFnZSAyNAorICAgIC8vIFNvcnRpbmcgcnVsZSAjMzogYnkgbGFyZ2VyIHRvdGFsIG51
bWJlciBvZiBjb2xvciBiaXRzLCBub3QgY29uc2lkZXJpbmcKKyAgICAvLyBjb21wb25lbnRzIHRo
YXQgYXJlIDAgb3IgZG9uJ3QtY2FyZS4KKyAgICBmb3IgKGNvbnN0IEVHTGludCAqYXR0ciA9IGF0
dHJpYkxpc3Q7IGF0dHJbMF0gIT0gRUdMX05PTkU7IGF0dHIgKz0gMikKKyAgICB7CisgICAgICAg
IGlmIChhdHRyWzFdICE9IDAgJiYgYXR0clsxXSAhPSBFR0xfRE9OVF9DQVJFKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKGF0dHJbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICBtV2FudFJlZCA9IHRydWU7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgbVdhbnRHcmVlbiA9IHRydWU7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgbVdhbnRCbHVlID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICBtV2Fu
dEFscGhhID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9T
SVpFOiBtV2FudEx1bWluYW5jZSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCitFR0xpbnQgU29ydENvbmZpZzo6d2FudGVkQ29tcG9uZW50c1NpemUo
Y29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0Cit7CisgICAgRUdMaW50IHRvdGFsID0gMDsKKwor
ICAgIGlmIChtV2FudFJlZCkgICAgICAgdG90YWwgKz0gY29uZmlnLm1SZWRTaXplOworICAgIGlm
IChtV2FudEdyZWVuKSAgICAgdG90YWwgKz0gY29uZmlnLm1HcmVlblNpemU7CisgICAgaWYgKG1X
YW50Qmx1ZSkgICAgICB0b3RhbCArPSBjb25maWcubUJsdWVTaXplOworICAgIGlmIChtV2FudEFs
cGhhKSAgICAgdG90YWwgKz0gY29uZmlnLm1BbHBoYVNpemU7CisgICAgaWYgKG1XYW50THVtaW5h
bmNlKSB0b3RhbCArPSBjb25maWcubUx1bWluYW5jZVNpemU7CisKKyAgICByZXR1cm4gdG90YWw7
Cit9CisKK2Jvb2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0
IENvbmZpZyAqeSkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzKSgqeCwgKnkpOworfQorCiti
b29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcg
JnkpIGNvbnN0Cit7CisgICAgI2RlZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGlmICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJpYnV0ZSkgICAgICAg
ICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICByZXR1cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJpYnV0ZTsgICAgICBc
CisgICAgICAgIH0KKworICAgIE1FVEFfQVNTRVJUKEVHTF9OT05FIDwgRUdMX1NMT1dfQ09ORklH
ICYmIEVHTF9TTE9XX0NPTkZJRyA8IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcpOworICAgIFNP
UlQobUNvbmZpZ0NhdmVhdCk7CisKKyAgICBNRVRBX0FTU0VSVChFR0xfUkdCX0JVRkZFUiA8IEVH
TF9MVU1JTkFOQ0VfQlVGRkVSKTsKKyAgICBTT1JUKG1Db2xvckJ1ZmZlclR5cGUpOworCisgICAg
Ly8gQnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5IGNvbnNpZGVyaW5n
IHRob3NlIHRoYXQgYXJlIHJlcXVlc3RlZCB0byBiZSA+IDAuCisgICAgRUdMaW50IHhDb21wb25l
bnRzU2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHgpOworICAgIEVHTGludCB5Q29tcG9uZW50
c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6ZSh5KTsKKyAgICBpZiAoeENvbXBvbmVudHNTaXpl
ICE9IHlDb21wb25lbnRzU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB4Q29tcG9uZW50c1Np
emUgPiB5Q29tcG9uZW50c1NpemU7CisgICAgfQorCisgICAgU09SVChtQnVmZmVyU2l6ZSk7Cisg
ICAgU09SVChtU2FtcGxlQnVmZmVycyk7CisgICAgU09SVChtU2FtcGxlcyk7CisgICAgU09SVCht
RGVwdGhTaXplKTsKKyAgICBTT1JUKG1TdGVuY2lsU2l6ZSk7CisgICAgU09SVChtQWxwaGFNYXNr
U2l6ZSk7CisgICAgU09SVChtTmF0aXZlVmlzdWFsVHlwZSk7CisgICAgU09SVChtQ29uZmlnSUQp
OworCisgICAgI3VuZGVmIFNPUlQKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gV2UnZCBs
aWtlIHRvIHVzZSBTb3J0Q29uZmlnIHRvIGFsc28gZWxpbWluYXRlIGR1cGxpY2F0ZSBjb25maWdz
LgorLy8gVGhpcyB3b3JrcyBhcyBsb25nIGFzIHdlIG5ldmVyIGhhdmUgdHdvIGNvbmZpZ3Mgd2l0
aCBkaWZmZXJlbnQgcGVyLVJHQi1jb21wb25lbnQgbGF5b3V0cywKKy8vIGJ1dCB0aGUgc2FtZSB0
b3RhbC4KKy8vIDU1NTEgYW5kIDU2NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgUitHK0IgaXMgZGlm
ZmVyZW50LgorLy8gNTU1MSBhbmQgNTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBidWZmZXJTaXpl
IGlzIGRpZmZlcmVudC4KK2NvbnN0IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0QXR0cmlic1tdID0K
K3sKKyAgICBFR0xfUkVEX1NJWkUsIDEsCisgICAgRUdMX0dSRUVOX1NJWkUsIDEsCisgICAgRUdM
X0JMVUVfU0laRSwgMSwKKyAgICBFR0xfTFVNSU5BTkNFX1NJWkUsIDEsCisgICAgLy8gQlVUIE5P
VCBBTFBIQQorICAgIEVHTF9OT05FCit9OworCitDb25maWdTZXQ6OkNvbmZpZ1NldCgpCisgICAg
OiBtU2V0KFNvcnRDb25maWcobVNvcnRBdHRyaWJzKSkKK3sKK30KKwordm9pZCBDb25maWdTZXQ6
OmFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwg
RUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNE
Rk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQoreworICAgIENv
bmZpZyBjb25maWcoZGlzcGxheU1vZGUsIG1pblN3YXBJbnRlcnZhbCwgbWF4U3dhcEludGVydmFs
LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUpOwor
CisgICAgbVNldC5pbnNlcnQoY29uZmlnKTsKK30KKworc2l6ZV90IENvbmZpZ1NldDo6c2l6ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXQuc2l6ZSgpOworfQorCitib29sIENvbmZpZ1NldDo6
Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwg
RUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHZlY3Rvcjxjb25z
dCBDb25maWcqPiBwYXNzZWQ7CisgICAgcGFzc2VkLnJlc2VydmUobVNldC5zaXplKCkpOworCisg
ICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0LmVu
ZCgpOyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOworICAgICAg
ICBjb25zdCBFR0xpbnQgKmF0dHJpYnV0ZSA9IGF0dHJpYkxpc3Q7CisKKyAgICAgICAgd2hpbGUg
KGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
IChhdHRyaWJ1dGVbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0JV
RkZFUl9TSVpFOiAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQnVmZmVyU2l6ZSA+PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUFscGhh
U2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25m
aWctPm1CbHVlU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAgICAgIG1h
dGNoID0gY29uZmlnLT5tR3JlZW5TaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAg
ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVJlZFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfREVQVEhfU0la
RTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1EZXB0aFNpemUgPj0gYXR0cmlidXRl
WzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X1NURU5DSUxfU0laRTogICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU3RlbmNpbFNpemUg
Pj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNv
bmZpZ0NhdmVhdCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBj
b25maWctPm1Db25maWdJRCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAgICAg
IG1hdGNoID0gY29uZmlnLT5tTGV2ZWwgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJM
RTogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVJlbmRlcmFibGUgPT0gYXR0cmlidXRl
WzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTkFUSVZF
X1ZJU1VBTF9UWVBFOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1OYXRpdmVWaXN1YWxUeXBlID09
IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlcyA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bVNhbXBsZUJ1ZmZlcnMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAgICAgbWF0Y2gg
PSAoY29uZmlnLT5tU3VyZmFjZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9C
TFVFX1ZBTFVFOiAgICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50Qmx1ZVZhbHVlID09IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJB
TlNQQVJFTlRfR1JFRU5fVkFMVUU6ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudEdyZWVu
VmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNw
YXJlbnRSZWRWYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUJpbmRUb1RleHR1cmVSR0IgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6ICAgICAgbWF0
Y2ggPSBjb25maWctPm1CaW5kVG9UZXh0dXJlUkdCQSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVSVkFMOiAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWluU3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfU1dBUF9J
TlRFUlZBTDogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFN3YXBJbnRlcnZhbCA9PSBhdHRy
aWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
TFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MdW1pbmFuY2VTaXpl
ID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxw
aGFNYXNrU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bUNvbG9yQnVmZmVyVHlwZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAgICAgICAg
bWF0Y2ggPSAoY29uZmlnLT5tUmVuZGVyYWJsZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJp
YnV0ZVsxXTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9QSVhN
QVA6ICAgICAgIG1hdGNoID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9DT05GT1JN
QU5UOiAgICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1Db25mb3JtYW50ICYgYXR0cmli
dXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF0dHJpYnV0ZSArPSAyOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBwYXNzZWQucHVz
aF9iYWNrKCYqY29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb25maWdzKQor
ICAgIHsKKyAgICAgICAgc29ydChwYXNzZWQuYmVnaW4oKSwgcGFzc2VkLmVuZCgpLCBTb3J0Q29u
ZmlnKGF0dHJpYkxpc3QpKTsKKworICAgICAgICBFR0xpbnQgaW5kZXg7CisgICAgICAgIGZvciAo
aW5kZXggPSAwOyBpbmRleCA8IGNvbmZpZ1NpemUgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxFR0xp
bnQ+KHBhc3NlZC5zaXplKCkpOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25m
aWdzW2luZGV4XSA9IHBhc3NlZFtpbmRleF0tPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgKm51bUNvbmZpZyA9IGluZGV4OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICAqbnVtQ29uZmlnID0gcGFzc2VkLnNpemUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworY29uc3QgZWdsOjpDb25maWcgKkNvbmZpZ1NldDo6Z2V0KEVHTENvbmZpZyBjb25maWdI
YW5kbGUpCit7CisgICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZp
ZyAhPSBtU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGlmIChjb25maWctPmdl
dEhhbmRsZSgpID09IGNvbmZpZ0hhbmRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICYoKmNvbmZpZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KK30K
SW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkVHTC9Db25maWcuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmln
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBDb25maWcuaDogRGVmaW5lcyB0aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhl
IGZvcm1hdCwgdHlwZQorLy8gYW5kIHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50
cyBFR0xDb25maWcgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtFR0wgMS40XSBzZWN0
aW9uIDMuNCBwYWdlIDE1LgorCisjaWZuZGVmIElOQ0xVREVfQ09ORklHX0hfCisjZGVmaW5lIElO
Q0xVREVfQ09ORklHX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgor
I2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CisKK2NsYXNz
IENvbmZpZworeworICBwdWJsaWM6CisgICAgQ29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlN
b2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RG
T1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBF
R0xpbnQgbXVsdGlTYW1wbGUpOworCisgICAgdm9pZCBzZXREZWZhdWx0cygpOworICAgIHZvaWQg
c2V0KEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBF
R0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RG
T1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpOworICAgIEVHTENv
bmZpZyBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIGNvbnN0IEQzRERJU1BMQVlNT0RFIG1EaXNw
bGF5TW9kZTsKKyAgICBjb25zdCBEM0RGT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBj
b25zdCBEM0RGT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBjb25zdCBFR0xpbnQgbU11
bHRpU2FtcGxlOworCisgICAgRUdMaW50IG1CdWZmZXJTaXplOyAgICAgICAgICAgICAgLy8gRGVw
dGggb2YgdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtUmVkU2l6ZTsgICAgICAgICAgICAg
ICAgIC8vIEJpdHMgb2YgUmVkIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUdyZWVu
U2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEdyZWVuIGluIHRoZSBjb2xvciBidWZmZXIK
KyAgICBFR0xpbnQgbUJsdWVTaXplOyAgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEJsdWUgaW4g
dGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgIC8v
IEJpdHMgb2YgTHVtaW5hbmNlIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUFscGhh
U2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIGluIHRoZSBjb2xvciBidWZmZXIK
KyAgICBFR0xpbnQgbUFscGhhTWFza1NpemU7ICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIE1h
c2sgaW4gdGhlIG1hc2sgYnVmZmVyCisgICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4dHVyZVJHQjsg
ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0IgdGV4dHVyZXMuCisgICAgRUdMQm9vbGVhbiBt
QmluZFRvVGV4dHVyZVJHQkE7ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0JBIHRleHR1cmVz
LgorICAgIEVHTGVudW0gbUNvbG9yQnVmZmVyVHlwZTsgICAgICAgIC8vIENvbG9yIGJ1ZmZlciB0
eXBlCisgICAgRUdMZW51bSBtQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgLy8gQW55IGNhdmVhdHMg
Zm9yIHRoZSBjb25maWd1cmF0aW9uCisgICAgRUdMaW50IG1Db25maWdJRDsgICAgICAgICAgICAg
ICAgLy8gVW5pcXVlIEVHTENvbmZpZyBpZGVudGlmaWVyCisgICAgRUdMaW50IG1Db25mb3JtYW50
OyAgICAgICAgICAgICAgLy8gV2hldGhlciBjb250ZXh0cyBjcmVhdGVkIHdpdGggdGhpcyBjb25m
aWcgYXJlIGNvbmZvcm1hbnQKKyAgICBFR0xpbnQgbURlcHRoU2l6ZTsgICAgICAgICAgICAgICAv
LyBCaXRzIG9mIFogaW4gdGhlIGRlcHRoIGJ1ZmZlcgorICAgIEVHTGludCBtTGV2ZWw7ICAgICAg
ICAgICAgICAgICAgIC8vIEZyYW1lIGJ1ZmZlciBsZXZlbAorICAgIEVHTEJvb2xlYW4gbU1hdGNo
TmF0aXZlUGl4bWFwOyAgIC8vIE1hdGNoIHRoZSBuYXRpdmUgcGl4bWFwIGZvcm1hdAorICAgIEVH
TGludCBtTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgIC8vIE1heGltdW0gd2lkdGggb2YgcGJ1ZmZl
cgorICAgIEVHTGludCBtTWF4UEJ1ZmZlckhlaWdodDsgICAgICAgIC8vIE1heGltdW0gaGVpZ2h0
IG9mIHBidWZmZXIKKyAgICBFR0xpbnQgbU1heFBCdWZmZXJQaXhlbHM7ICAgICAgICAvLyBNYXhp
bXVtIHNpemUgb2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOyAgICAgICAg
IC8vIE1heGltdW0gc3dhcCBpbnRlcnZhbAorICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOyAg
ICAgICAgIC8vIE1pbmltdW0gc3dhcCBpbnRlcnZhbAorICAgIEVHTEJvb2xlYW4gbU5hdGl2ZVJl
bmRlcmFibGU7ICAgIC8vIEVHTF9UUlVFIGlmIG5hdGl2ZSByZW5kZXJpbmcgQVBJcyBjYW4gcmVu
ZGVyIHRvIHN1cmZhY2UKKyAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbElEOyAgICAgICAgICAvLyBI
YW5kbGUgb2YgY29ycmVzcG9uZGluZyBuYXRpdmUgdmlzdWFsCisgICAgRUdMaW50IG1OYXRpdmVW
aXN1YWxUeXBlOyAgICAgICAgLy8gTmF0aXZlIHZpc3VhbCB0eXBlIG9mIHRoZSBhc3NvY2lhdGVk
IHZpc3VhbAorICAgIEVHTGludCBtUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgIC8vIFdoaWNoIGNs
aWVudCByZW5kZXJpbmcgQVBJcyBhcmUgc3VwcG9ydGVkLgorICAgIEVHTGludCBtU2FtcGxlQnVm
ZmVyczsgICAgICAgICAgIC8vIE51bWJlciBvZiBtdWx0aXNhbXBsZSBidWZmZXJzCisgICAgRUdM
aW50IG1TYW1wbGVzOyAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHBp
eGVsCisgICAgRUdMaW50IG1TdGVuY2lsU2l6ZTsgICAgICAgICAgICAgLy8gQml0cyBvZiBTdGVu
Y2lsIGluIHRoZSBzdGVuY2lsIGJ1ZmZlcgorICAgIEVHTGludCBtU3VyZmFjZVR5cGU7ICAgICAg
ICAgICAgIC8vIFdoaWNoIHR5cGVzIG9mIEVHTCBzdXJmYWNlcyBhcmUgc3VwcG9ydGVkLgorICAg
IEVHTGVudW0gbVRyYW5zcGFyZW50VHlwZTsgICAgICAgIC8vIFR5cGUgb2YgdHJhbnNwYXJlbmN5
IHN1cHBvcnRlZAorICAgIEVHTGludCBtVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgIC8vIFRyYW5z
cGFyZW50IHJlZCB2YWx1ZQorICAgIEVHTGludCBtVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgIC8v
IFRyYW5zcGFyZW50IGdyZWVuIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEJsdWVWYWx1
ZTsgICAgLy8gVHJhbnNwYXJlbnQgYmx1ZSB2YWx1ZQorfTsKKworLy8gRnVuY3Rpb24gb2JqZWN0
IHVzZWQgYnkgU1RMIHNvcnRpbmcgcm91dGluZXMgZm9yIG9yZGVyaW5nIENvbmZpZ3MgYWNjb3Jk
aW5nIHRvIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNC4KK2NsYXNzIFNvcnRDb25maWcKK3sK
KyAgcHVibGljOgorICAgIGV4cGxpY2l0IFNvcnRDb25maWcoY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KTsKKworICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZp
ZyAqeSkgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAmeCwgY29uc3Qg
Q29uZmlnICZ5KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHZvaWQgc2NhbkZvcldhbnRlZENv
bXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKKyAgICBFR0xpbnQgd2FudGVkQ29t
cG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0OworCisgICAgYm9vbCBtV2Fu
dFJlZDsKKyAgICBib29sIG1XYW50R3JlZW47CisgICAgYm9vbCBtV2FudEJsdWU7CisgICAgYm9v
bCBtV2FudEFscGhhOworICAgIGJvb2wgbVdhbnRMdW1pbmFuY2U7Cit9OworCitjbGFzcyBDb25m
aWdTZXQKK3sKKyAgICBmcmllbmQgRGlzcGxheTsKKworICBwdWJsaWM6CisgICAgQ29uZmlnU2V0
KCk7CisKKyAgICB2b2lkIGFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1p
blN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRh
cmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2Ft
cGxlKTsKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xD
b25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1Np
emUsIEVHTGludCAqbnVtQ29uZmlnKTsKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqZ2V0KEVHTENv
bmZpZyBjb25maWdIYW5kbGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKENvbmZpZ1NldCk7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PENvbmZpZywgU29ydENv
bmZpZz4gU2V0OworICAgIHR5cGVkZWYgU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICBTZXQg
bVNldDsKKworICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgbVNvcnRBdHRyaWJzW107Cit9OworfQor
CisjZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19IXwpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9E
aXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3BsYXkuY3BwOiBJ
bXBsZW1lbnRzIHRoZSBlZ2w6OkRpc3BsYXkgY2xhc3MsIHJlcHJlc2VudGluZyB0aGUgYWJzdHJh
Y3QKKy8vIGRpc3BsYXkgb24gd2hpY2ggZ3JhcGhpY3MgYXJlIGRyYXduLiBJbXBsZW1lbnRzIEVH
TERpc3BsYXkuCisvLyBbRUdMIDEuNF0gc2VjdGlvbiAyLjEuMiBwYWdlIDMuCisKKyNpbmNsdWRl
ICJsaWJFR0wvRGlzcGxheS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZl
Y3Rvcj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliRUdML21h
aW4uaCIKKworI2RlZmluZSBSRUZfUkFTVCAwICAgLy8gQ2FuIGFsc28gYmUgZW5hYmxlZCBieSBk
ZWZpbmluZyBGT1JDRV9SRUZfUkFTVCBpbiB0aGUgcHJvamVjdCdzIHByZWRlZmluZWQgbWFjcm9z
CisKK25hbWVzcGFjZSBlZ2wKK3sKK0Rpc3BsYXk6OkRpc3BsYXkoSERDIGRldmljZUNvbnRleHQp
IDogbURjKGRldmljZUNvbnRleHQpCit7CisgICAgbUQzZDkgPSBOVUxMOworICAgIG1EZXZpY2Ug
PSBOVUxMOworCisgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICAjaWYg
UkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAgICBtRGV2aWNl
VHlwZSA9IEQzRERFVlRZUEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZpY2VUeXBlID0g
RDNEREVWVFlQRV9IQUw7CisgICAgI2VuZGlmCisKKyAgICBtTWluU3dhcEludGVydmFsID0gMTsK
KyAgICBtTWF4U3dhcEludGVydmFsID0gMTsKKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Cit9CisK
K0Rpc3BsYXk6On5EaXNwbGF5KCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKworYm9vbCBEaXNw
bGF5Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbUQzZDkgPSBEaXJlY3QzRENyZWF0ZTko
RDNEX1NES19WRVJTSU9OKTsKKworICAgIGlmIChtRDNkOSkKKyAgICB7CisgICAgICAgIGlmICht
RGMgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FOiBEZXRlcm1pbmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQg
Y29ycmVzcG9uZHMgdG8KKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQz
ZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwor
CisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURldmljZUNh
cHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUQzZDktPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1EM2Q5ID0gTlVMTDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSA0OworICAgICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7CisKKyAgICAg
ICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dh
cEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2
YWwsIDApO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZh
bHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBz
dGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAxKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4
KG1NYXhTd2FwSW50ZXJ2YWwsIDEpO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVz
ZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5T
d2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KKyAgICAgICAgICAgIGlmICht
RGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RI
UkVFKSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAz
KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KKyAg
ICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0ZPVVIpICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWlu
U3dhcEludGVydmFsLCA0KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50
ZXJ2YWwsIDQpO30KKworICAgICAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlclRhcmdldEZv
cm1hdHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1
LAorICAgICAgICAgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3JfcmFt
cCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1
c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVlLgor
ICAgICAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKKyAgICAgICAgICAgICAgICBEM0RGTVRf
UjVHNkI1LAorICAgICAgICAgICAgICAgIEQzREZNVF9YMVI1RzVCNSwKKyAgICAgICAgICAgICAg
ICBEM0RGTVRfWDhSOEc4QjgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IEQz
REZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCisgICAgICAgICAgICAgICAgRDNERk1UX0QzMiwK
KyAgICAgICAgICAgIC8vICBEM0RGTVRfRDE1UzEsCisgICAgICAgICAgICAgICAgRDNERk1UX0Qy
NFM4LAorICAgICAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAgICAgICAgIC8vICBEM0RG
TVRfRDI0WDRTNCwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDE2LAorICAgICAgICAgICAgLy8g
IEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgICAgICAgICAgLy8gIEQzREZNVF9EMjRGUzgKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5
TW9kZTsKKyAgICAgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIs
ICZjdXJyZW50RGlzcGxheU1vZGUpOworCisgICAgICAgICAgICBDb25maWdTZXQgY29uZmlnU2V0
OworCisgICAgICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwg
c2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdElu
ZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNERk9STUFUIHJlbmRlclRh
cmdldEZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3Rl
bmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1B
VCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBkZXB0aFN0ZW5j
aWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBE
M0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBFbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25maWdTZXQuYWRkKGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJ
bnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5j
aWxGb3JtYXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3Mg
YSB1bmlxdWUgSUQgYW5kIHN0b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICAgICAgRUdMaW50
IGluZGV4ID0gMTsKKyAgICAgICAgICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRvciBjb25maWcg
PSBjb25maWdTZXQubVNldC5iZWdpbigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7
IGNvbmZpZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmZpZyBjb25maWd1
cmF0aW9uID0gKmNvbmZpZzsKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLm1Db25maWdJ
RCA9IGluZGV4OworICAgICAgICAgICAgICAgIGluZGV4Kys7CisKKyAgICAgICAgICAgICAgICBt
Q29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAg
ICB0ZXJtaW5hdGUoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKK3sKKyAgICBmb3IgKFN1
cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNl
ICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBkZWxldGUg
KnN1cmZhY2U7CisgICAgfQorCisgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjb250ZXh0
ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4dFNldC5lbmQoKTsgY29u
dGV4dCsrKQorICAgIHsKKyAgICAgICAgZ2xEZXN0cm95Q29udGV4dCgqY29udGV4dCk7CisgICAg
fQorCisgICAgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7
CisgICAgICAgIG1EZXZpY2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRDNkOSkKKyAgICB7
CisgICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5ID0gTlVMTDsKKyAgICB9
Cit9CisKK3ZvaWQgRGlzcGxheTo6c3RhcnRTY2VuZSgpCit7CisgICAgaWYgKCFtU2NlbmVTdGFy
dGVkKQorICAgIHsKKyAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdpblNjZW5lKCk7
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIG1TY2VuZVN0YXJ0
ZWQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBEaXNwbGF5OjplbmRTY2VuZSgpCit7CisgICAg
aWYgKG1TY2VuZVN0YXJ0ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2Ut
PkVuZFNjZW5lKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAg
IG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxheTo6Z2V0Q29u
ZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50
IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHJldHVybiBtQ29uZmlnU2V0
LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnU2l6ZSwgbnVtQ29uZmlnKTsK
K30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdM
aW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAq
Y29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7CisKKyAgICBzd2l0Y2ggKGF0
dHJpYnV0ZSkKKyAgICB7CisgICAgICBjYXNlIEVHTF9CVUZGRVJfU0laRTogICAgICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQnVmZmVyU2l6ZTsgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVH
TF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmx1
ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAg
ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tR3JlZW5TaXplOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVkU2l6ZTsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9T
VEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3RlbmNp
bFNpemU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0OyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnSUQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9OQVRJ
VkVfUkVOREVSQUJMRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlUmVu
ZGVyYWJsZTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlVmlzdWFsVHlwZTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVHTF9TQU1QTEVTOiAgICAgICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9TVVJGQUNF
X1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3VyZmFjZVR5cGU7
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBFOiAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFOiAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgYnJlYWs7CisgICAgICBjYXNl
IEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
VHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVO
VF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRSZWRW
YWx1ZTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQjsgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkE7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVH
TF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWlu
U3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRF
UlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4U3dhcEludGVydmFsOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJWkU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9D
T0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29sb3JC
dWZmZXJUeXBlOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVuZGVyYWJsZVR5cGU7ICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQOiAgICAgICAqdmFs
dWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N1cmZh
Y2UgKkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBj
b25maWcpCit7CisgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKTsKKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVy
cyA9IHswfTsKKworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBjb25maWd1cmF0aW9uLT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckZvcm1hdCA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVySGVpZ2h0ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVw
dGhTdGVuY2lsID0gY29uZmlndXJhdGlvbi0+bURlcHRoU2l6ZSA/IFRSVUUgOiBGQUxTRTsKKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERl
dmljZVdpbmRvdyA9IHdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1
YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAg
cHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsg
ICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRh
dGlvbkludGVydmFsID0gY29udmVydEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwpOworICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7CisgICAgcHJl
c2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisKKyAgICBJRGlyZWN0
M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4gPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsKKworICAgIGlmICghbURldmljZSkKKyAgICB7Cisg
ICAgICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNE
Q1JFQVRFX05PV0lORE9XQ0hBTkdFUzsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5
LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxh
Z3MgfCBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENSRUFURV9QVVJF
REVWSUNFLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVn
bDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2Uo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVf
U09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgICAgICBpZiAobURldmljZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNjZW5lU3Rh
cnRlZCA9IGZhbHNlOworICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZzd2Fw
Q2hhaW4pOworICAgICAgICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVw
dGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaWYgKCFtU3VyZmFjZVNldC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBpZiB0aGUgZGV2aWNlIGFscmVhZHkgZXhpc3RzLCBhbmQgdGhlcmUgYXJlIG90aGVyIHN1cmZh
Y2VzL3dpbmRvd3MgY3VycmVudGx5IGluIHVzZSwgd2UgbmVlZCB0byBjcmVhdGUKKyAgICAgICAg
ICAgIC8vIGEgc2VwYXJhdGUgc3dhcCBjaGFpbiBmb3IgdGhlIG5ldyBkcmF3IHN1cmZhY2UuCisg
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2Fw
Q2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmc3dhcENoYWluKTsKKworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucy4gT3V0IG9mIG1lbW9yeS4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgICAgIC8vIENyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4gZG9lcyBub3QgYXV0b21h
dGljYWxseSBnZW5lcmF0ZSBhIGRlcHRoc3RlbmNpbCBzdXJmYWNlLCB1bmxpa2UgCisgICAgICAg
ICAgICAvLyBDcmVhdGVEZXZpY2UsIHNvIHdlIG11c3QgZG8gc28gZXhwbGljaXRseS4KKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50
UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxl
UXVhbGl0eSwgRkFMU0UsICZkZXB0aFN0ZW5jaWxTdXJmYWNlLCBOVUxMKTsKKworICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2FwQ2hhaW4tPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVu
Y2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxM
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlm
IHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3VyZmFjZXMgaW4g
dXNlLCB0aGVuIGFsbCB0aGUgc3VyZmFjZXMvd2luZG93cworICAgICAgICAgICAgLy8gaGF2ZSBi
ZWVuIGRlc3Ryb3llZCwgYW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdpbmFsbHkgY3Jl
YXRlZCBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IKKyAgICAgICAgICAgIC8vIHVzZSB3aXRoIHRo
ZSBuZXcgc3VyZmFjZSB3ZSBhcmUgY3JlYXRpbmcuCisgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVz
ZXQgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMgZm9yIGRldmljZS4gT3V0IG9mIG1lbW9yeS4iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFj
ZSopTlVMTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtRGV2
aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBDaGFpbik7CisgICAgICAgICAgICAgICAgbURldmlj
ZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdXJmYWNlICpzdXJmYWNlID0gTlVMTDsK
KworICAgIGlmIChzd2FwQ2hhaW4pCisgICAgeworICAgICAgICBzdXJmYWNlID0gbmV3IFN1cmZh
Y2UodGhpcywgc3dhcENoYWluLCBkZXB0aFN0ZW5jaWxTdXJmYWNlLCBjb25maWd1cmF0aW9uKTsK
KyAgICAgICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2UpOworCisgICAgICAgIHN3YXBDaGFp
bi0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitFR0xDb250
ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSkKK3sKKyAg
ICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnSGFuZGxl
KTsKKworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZpZyk7
CisgICAgbUNvbnRleHRTZXQuaW5zZXJ0KGNvbnRleHQpOworCisgICAgcmV0dXJuIGNvbnRleHQ7
Cit9CisKK3ZvaWQgRGlzcGxheTo6ZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNl
KQoreworICAgIGRlbGV0ZSBzdXJmYWNlOworICAgIG1TdXJmYWNlU2V0LmVyYXNlKHN1cmZhY2Up
OworfQorCit2b2lkIERpc3BsYXk6OmRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0
KQoreworICAgIGdsRGVzdHJveUNvbnRleHQoY29udGV4dCk7CisgICAgbUNvbnRleHRTZXQuZXJh
c2UoY29udGV4dCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNJbml0aWFsaXplZCgpCit7CisgICAg
cmV0dXJuIG1EM2Q5ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOworfQorCitib29s
IERpc3BsYXk6OmlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykKK3sKKyAgICByZXR1cm4g
bUNvbmZpZ1NldC5nZXQoY29uZmlnKSAhPSBOVUxMOworfQorCitib29sIERpc3BsYXk6OmlzVmFs
aWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBtQ29udGV4dFNl
dC5maW5kKGNvbnRleHQpICE9IG1Db250ZXh0U2V0LmVuZCgpOworfQorCitib29sIERpc3BsYXk6
OmlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICByZXR1cm4gbVN1
cmZhY2VTZXQuZmluZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKK30KKworYm9vbCBE
aXNwbGF5OjpoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCit7CisgICAgZm9y
IChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3Vy
ZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQorICAgIHsKKyAgICAgICAgaWYg
KCgqc3VyZmFjZSktPmdldFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgRGlzcGxheTo6c2V0U3dhcEludGVydmFsKEdMaW50IGludGVydmFsKQor
eworICAgIG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBtU3dhcEludGVydmFsID0gc3Rk
OjptYXgobVN3YXBJbnRlcnZhbCwgbU1pblN3YXBJbnRlcnZhbCk7CisgICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwpOworCisgICAgbVBy
ZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsKK30KKworRFdP
UkQgRGlzcGxheTo6Z2V0UHJlc2VudEludGVydmFsKCkKK3sKKyAgICByZXR1cm4gbVByZXNlbnRJ
bnRlcnZhbDsKK30KKworRFdPUkQgRGlzcGxheTo6Y29udmVydEludGVydmFsKEdMaW50IGludGVy
dmFsKQoreworICAgIHN3aXRjaChpbnRlcnZhbCkKKyAgICB7CisgICAgICBjYXNlIDA6IHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTogcmV0dXJuIEQz
RFBSRVNFTlRfSU5URVJWQUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9J
TlRFUlZBTF9UV087CisgICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RI
UkVFOworICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9ERUZBVUxUOworfQorCitJRGlyZWN0M0REZXZpY2U5ICpEaXNwbGF5OjpnZXRE
ZXZpY2UoKQoreworICAgIHJldHVybiBtRGV2aWNlOworfQorCitEM0RDQVBTOSBEaXNwbGF5Ojpn
ZXREZXZpY2VDYXBzKCkKK3sKKyAgICByZXR1cm4gbURldmljZUNhcHM7Cit9Cit9CkluZGV4OiBB
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBEaXNw
bGF5Lmg6IERlZmluZXMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBh
YnN0cmFjdAorLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVu
dHMgRUdMRGlzcGxheS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2lm
bmRlZiBJTkNMVURFX0RJU1BMQVlfSF8KKyNkZWZpbmUgSU5DTFVERV9ESVNQTEFZX0hfCisKKyNp
Zm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisj
ZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVk
ZSA8c2V0PgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2luY2x1ZGUgImxp
YkVHTC9Db25maWcuaCIKKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorCituYW1lc3BhY2Ug
ZWdsCit7CitjbGFzcyBEaXNwbGF5Cit7CisgIHB1YmxpYzoKKyAgICBEaXNwbGF5KEhEQyBkZXZp
Y2VDb250ZXh0KTsKKworICAgIH5EaXNwbGF5KCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsK
KyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2NlbmUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NlbmUoKTsKKworICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xD
b25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1Np
emUsIEVHTGludCAqbnVtQ29uZmlnKTsKKyAgICBib29sIGdldENvbmZpZ0F0dHJpYihFR0xDb25m
aWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKworICAgIGVnbDo6
U3VyZmFjZSAqY3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZp
Zyk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUp
OworCisgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAg
IHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOworCisgICAgYm9vbCBp
c0luaXRpYWxpemVkKCk7CisgICAgYm9vbCBpc1ZhbGlkQ29uZmlnKEVHTENvbmZpZyBjb25maWcp
OworICAgIGJvb2wgaXNWYWxpZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgIGJv
b2wgaXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKyAgICBib29sIGhhc0V4
aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdyk7CisKKyAgICB2b2lkIHNldFN3YXBJbnRl
cnZhbChHTGludCBpbnRlcnZhbCk7CisgICAgRFdPUkQgZ2V0UHJlc2VudEludGVydmFsKCk7Cisg
ICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChHTGludCBpbnRlcnZhbCk7CisKKyAgICB2
aXJ0dWFsIElEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOworICAgIHZpcnR1YWwgRDNEQ0FQ
UzkgZ2V0RGV2aWNlQ2FwcygpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKERpc3BsYXkpOworICAgIGNvbnN0IEhEQyBtRGM7CisKKyAgICBVSU5UIG1BZGFwdGVy
OworICAgIEQzRERFVlRZUEUgbURldmljZVR5cGU7CisgICAgSURpcmVjdDNEOSAqbUQzZDk7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKyAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsK
KworICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKKyAgICBHTGludCBtU3dhcEludGVydmFsOworICAg
IEVHTGludCBtTWF4U3dhcEludGVydmFsOworICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOwor
ICAgIERXT1JEIG1QcmVzZW50SW50ZXJ2YWw7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFN1cmZh
Y2UqPiBTdXJmYWNlU2V0OworICAgIFN1cmZhY2VTZXQgbVN1cmZhY2VTZXQ7CisKKyAgICBDb25m
aWdTZXQgbUNvbmZpZ1NldDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Z2w6OkNvbnRleHQqPiBD
b250ZXh0U2V0OworICAgIENvbnRleHRTZXQgbUNvbnRleHRTZXQ7Cit9OworfQorCisjZW5kaWYg
ICAvLyBJTkNMVURFX0RJU1BMQVlfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzAxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50
cyB0aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UK
Ky8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJh
Y2sgYnVmZmVycy4KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlv
bmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaW5jbHVkZSAibGliRUdM
L1N1cmZhY2UuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGli
RUdML21haW4uaCIKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCituYW1lc3BhY2UgZWds
Cit7CitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3YXBDaGFp
bjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwgY29uc3QgQ29u
ZmlnICpjb25maWcpIAorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hhaW4oc3dhcENo
YWluKSwgbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZpZykKK3sKKyAg
ICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgbUZs
aXBUZXh0dXJlID0gTlVMTDsKKyAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICBtUHJlRmxpcFN0
YXRlID0gTlVMTDsKKworICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdM
X0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNw
ZWN0IHJhdGlvCisgICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKKyAgICBtU3dh
cEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7CisKKyAgICBpZiAobVN3YXBDaGFpbikK
KyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPkFkZFJlZigpOworICAgICAgICBtU3dhcENoYWlu
LT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIp
OworCisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbUJhY2tC
dWZmZXItPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBtV2lkdGggPSBkZXNjcmlw
dGlvbi5XaWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKKworICAg
ICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldChtV2lkdGgs
IG1IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVUeXBl
LCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbVJlbmRlclRhcmdldCwg
TlVMTCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3Io
RUdMX0JBRF9BTExPQyk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlKG1XaWR0aCwgbUhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1GbGlwVGV4dHVyZSwgTlVM
TCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgZXJyb3IoRUdMX0JBRF9BTExPQyk7CisKKyAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorfQorCitTdXJmYWNlOjp+U3VyZmFjZSgpCit7CisgICAgaWYg
KG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAg
fQorCisgICAgaWYgKG1CYWNrQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJhY2tCdWZmZXItPlJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAg
IG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBpZiAobUZsaXBUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbUZsaXBUZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgfQorCisgICAgaWYgKG1GbGlwU3RhdGUpCisgICAgeworICAgICAgICBtRmxpcFN0
YXRlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlwU3RhdGUpCisgICAgewor
ICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitIV05EIFN1cmZh
Y2U6OmdldFdpbmRvd0hhbmRsZSgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAg
ICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7CisgICAgICAgIG1T
d2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVycyk7CisKKyAg
ICAgICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3c7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRhYmxlRmxpcFN0
YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJjZSkK
K3sKKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRF
RU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsK
KworICAgIC8vIEp1c3Qgc2FtcGxlIHRoZSB0ZXh0dXJlCisgICAgZGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgIGRl
dmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVY
VFVSRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JP
UCwgRDNEVE9QX0RJU0FCTEUpOworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBzb3VyY2UpOwor
ICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhG
X1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRF
UiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9TUkdCVEVYVFVSRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcg
fCBEM0RGVkZfVEVYMSk7CisKKyAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7
IC8vIERyYXdQcmltaXRpdmVVUCBvbmx5IGNhcmVzIGFib3V0IHN0cmVhbSAwLCBub3QgdGhlIHJl
c3QuCit9CisKK3ZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQoreworICAgIEhSRVNVTFQgaHI7CisK
KyAgICBpZiAobUZsaXBTdGF0ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIHR3
byBzdGF0ZSBibG9ja3MgYm90aCByZWNvcmRpbmcgdGhlIHN0YXRlcyB0aGF0IGFyZSBjaGFuZ2Vk
IHdoZW4gc3dhcHBpbmcuCisKKyAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0
aGUgb3JpZ2luYWwgc3RhdGUgZWFjaCBlbnRyeS4KKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2lu
U3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIHdy
aXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAgIGhyID0gZGV2
aWNlLT5FbmRTdGF0ZUJsb2NrKCZtUHJlRmxpcFN0YXRlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRP
Rk1FTU9SWSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1QcmVGbGlwU3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IG1GbGlwU3RhdGUgd2lsbCByZWNvcmQgdGhlIHN0YXRlIGZvciB0aGUgc3dhcCBvcGVyYXRpb24u
CisgICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOworCisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZp
Y2UsIHNvdXJjZSk7CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1GbGlw
U3RhdGUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZsaXBTdGF0ZSA9IE5VTEw7CisgICAg
ICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtUHJlRmxpcFN0
YXRlID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBociA9
IG1QcmVGbGlwU3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OworICAgICAgICBociA9IG1GbGlwU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmbVBy
ZUZsaXBCYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1Q
cmVGbGlwRGVwdGhTdGVuY2lsKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1C
YWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Cit9
CisKK3ZvaWQgU3VyZmFjZTo6cmVzdG9yZVN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSkK
K3sKKyAgICBtUHJlRmxpcFN0YXRlLT5BcHBseSgpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgbVByZUZsaXBCYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNp
bFN1cmZhY2UobVByZUZsaXBEZXB0aFN0ZW5jaWwpOworCisgICAgaWYgKG1QcmVGbGlwQmFja0J1
ZmZlcikKKyAgICB7CisgICAgICAgIG1QcmVGbGlwQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAg
ICAgICBtUHJlRmxpcEJhY2tCdWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUHJlRmxp
cERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1QcmVGbGlwRGVwdGhTdGVuY2lsLT5SZWxl
YXNlKCk7CisgICAgICAgIG1QcmVGbGlwRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9Cit9CisK
K2Jvb2wgU3VyZmFjZTo6c3dhcCgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAg
ICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CisK
KyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgICAgICBtRmxp
cFRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgICAg
IG1EaXNwbGF5LT5lbmRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KG1SZW5k
ZXJUYXJnZXQsIE5VTEwsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisg
ICAgICAgIGFwcGx5RmxpcFN0YXRlKGRldmljZSwgbUZsaXBUZXh0dXJlKTsKKworICAgICAgICAv
LyBSZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBidWZmZXIKKyAg
ICAgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAgMCAtIDAuNWYs
IDAuMGYsIDEuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtt
V2lkdGggLSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMS4wZiwgMS4wZn0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVm
LCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDAuMGZ9fTsg
ICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgp
OworICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwg
cXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOworCisgICAgICAgIHRleHR1cmVTdXJmYWNlLT5SZWxl
YXNlKCk7CisKKyAgICAgICAgcmVzdG9yZVN0YXRlKGRldmljZSk7CisKKyAgICAgICAgbURpc3Bs
YXktPmVuZFNjZW5lKCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJl
c2VudChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBtRGlzcGxheS0+Z2V0UHJlc2VudEludGVydmFs
KCkpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5B
TEVSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVW
SUNFTE9TVCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhU
X0xPU1QsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VHTGludCBTdXJmYWNlOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdMaW50IFN1cmZh
Y2U6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK0lEaXJl
Y3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisgICAg
fQorCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpT
dXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJu
IG1EZXB0aFN0ZW5jaWw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmg6IERlZmluZXMgdGhlIGVnbDo6U3Vy
ZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCisvLyBzdWNoIGFzIHRo
ZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMuCisv
LyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VHTCAx
LjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KKworI2lmbmRlZiBJTkNMVURFX1NVUkZBQ0VfSF8KKyNk
ZWZpbmUgSU5DTFVERV9TVVJGQUNFX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdM
L2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBDb25maWc7CisK
K2NsYXNzIFN1cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxh
eSwgSURpcmVjdDNEU3dhcENoYWluOSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSogZGVw
dGhTdGVuY2lsLCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5TdXJmYWNlKCk7
CisKKyAgICBIV05EIGdldFdpbmRvd0hhbmRsZSgpOworICAgIGJvb2wgc3dhcCgpOworCisgICAg
dmlydHVhbCBFR0xpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVHTGludCBnZXRI
ZWlnaHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRl
clRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN1cmZhY2Up
OworCisgICAgRGlzcGxheSAqY29uc3QgbURpc3BsYXk7CisgICAgSURpcmVjdDNEU3dhcENoYWlu
OSAqY29uc3QgbVN3YXBDaGFpbjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1GbGlwVGV4dHVy
ZTsKKworICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJ
RGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZShJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UpOworICAgIHZvaWQgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJjZSk7CisgICAg
SURpcmVjdDNEU3RhdGVCbG9jazkgKm1GbGlwU3RhdGU7CisgICAgSURpcmVjdDNEU3RhdGVCbG9j
azkgKm1QcmVGbGlwU3RhdGU7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1QcmVGbGlwQmFja0J1
ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBEZXB0aFN0ZW5jaWw7CisKKyAg
ICBjb25zdCBlZ2w6OkNvbmZpZyAqbUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdh
cyBjcmVhdGVkIHdpdGgKKyAgICBFR0xpbnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVp
Z2h0IG9mIHN1cmZhY2UKKyAgICBFR0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lk
dGggb2Ygc3VyZmFjZQorLy8gIEVHTGludCBob3Jpem9udGFsUmVzb2x1dGlvbjsgICAvLyBIb3Jp
em9udGFsIGRvdCBwaXRjaAorLy8gIEVHTGludCB2ZXJ0aWNhbFJlc29sdXRpb247ICAgICAvLyBW
ZXJ0aWNhbCBkb3QgcGl0Y2gKKy8vICBFR0xCb29sZWFuIGxhcmdlc3RQQnVmZmVyOyAgICAgLy8g
SWYgdHJ1ZSwgY3JlYXRlIGxhcmdlc3QgcGJ1ZmZlciBwb3NzaWJsZQorLy8gIEVHTEJvb2xlYW4g
bWlwbWFwVGV4dHVyZTsgICAgICAvLyBUcnVlIGlmIHRleHR1cmUgaGFzIG1pcG1hcHMKKy8vICBF
R0xpbnQgbWlwbWFwTGV2ZWw7ICAgICAgICAgICAgLy8gTWlwbWFwIGxldmVsIHRvIHJlbmRlciB0
bworLy8gIEVHTGVudW0gbXVsdGlzYW1wbGVSZXNvbHZlOyAgICAvLyBNdWx0aXNhbXBsZSByZXNv
bHZlIGJlaGF2aW9yCisgICAgRUdMaW50IG1QaXhlbEFzcGVjdFJhdGlvOyAgICAgIC8vIERpc3Bs
YXkgYXNwZWN0IHJhdGlvCisgICAgRUdMZW51bSBtUmVuZGVyQnVmZmVyOyAgICAgICAgIC8vIFJl
bmRlciBidWZmZXIKKyAgICBFR0xlbnVtIG1Td2FwQmVoYXZpb3I7ICAgICAgICAgLy8gQnVmZmVy
IHN3YXAgYmVoYXZpb3IKKy8vICBFR0xlbnVtIHRleHR1cmVGb3JtYXQ7ICAgICAgICAgLy8gRm9y
bWF0IG9mIHRleHR1cmU6IFJHQiwgUkdCQSwgb3Igbm8gdGV4dHVyZQorLy8gIEVHTGVudW0gdGV4
dHVyZVRhcmdldDsgICAgICAgICAvLyBUeXBlIG9mIHRleHR1cmU6IDJEIG9yIG5vIHRleHR1cmUK
Ky8vICBFR0xlbnVtIHZnQWxwaGFGb3JtYXQ7ICAgICAgICAgLy8gQWxwaGEgZm9ybWF0IGZvciBP
cGVuVkcKKy8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2Ug
Zm9yIE9wZW5WRworfTsKK30KKworI2VuZGlmICAgLy8gSU5DTFVERV9TVVJGQUNFX0hfCkluZGV4
OiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xp
YkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIGxpYkVHTC5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIEVHTCBmdW5jdGlvbnMuCisK
KyNpbmNsdWRlIDxleGNlcHRpb24+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKyNp
bmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5
ICpkaXNwbGF5KQoreworICAgIGlmIChkaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgZmFsc2UpOworICAgIH0KKwor
ICAgIGlmICghZGlzcGxheS0+aXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVHTENvbmZp
ZyBjb25maWcpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25maWco
Y29uZmlnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgZmFs
c2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6
RGlzcGxheSAqZGlzcGxheSwgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb250ZXh0KGNvbnRleHQpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQ09OVEVYVCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQoreworICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFkaXNwbGF5LT5pc1ZhbGlk
U3VyZmFjZShzdXJmYWNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NV
UkZBQ0UsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZXh0ZXJuICJD
IgoreworRUdMaW50IF9fc3RkY2FsbCBlZ2xHZXRFcnJvcih2b2lkKQoreworICAgIFRSQUNFKCIo
KSIpOworCisgICAgRUdMaW50IGVycm9yID0gZWdsOjpnZXRDdXJyZW50RXJyb3IoKTsKKworICAg
IGlmIChlcnJvciAhPSBFR0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGVnbDo6c2V0Q3VycmVu
dEVycm9yKEVHTF9TVUNDRVNTKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0VH
TERpc3BsYXkgX19zdGRjYWxsIGVnbEdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlz
cGxheV9pZCkKK3sKKyAgICBUUkFDRSgiKEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQg
PSAweCUwLjhwKSIsIGRpc3BsYXlfaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICAvLyBG
SVhNRTogUmV0dXJuIHRoZSBzYW1lIEVHTERpc3BsYXkgaGFuZGxlIHdoZW4gZGlzcGxheV9pZCBh
bHJlYWR5IGNyZWF0ZWQgYSBkaXNwbGF5CisKKyAgICAgICAgaWYgKGRpc3BsYXlfaWQgPT0gRUdM
X0RFRkFVTFRfRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBlZ2w6
OkRpc3BsYXkoKEhEQylOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5X2lkIGlzIGEgdmFsaWQgZGlz
cGxheSBkZXZpY2UgY29udGV4dAorCisgICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6RGlzcGxh
eSgoSERDKWRpc3BsYXlfaWQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
Tk9fRElTUExBWSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOworfQorCitF
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQg
Km1ham9yLCBFR0xpbnQgKm1pbm9yKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xpbnQgKm1ham9yID0gMHglMC44cCwgRUdMaW50ICptaW5vciA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBkcHksIG1ham9yLCBtaW5vcik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChkcHkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihk
cHkpOworCisgICAgICAgIGlmICghZGlzcGxheS0+aW5pdGlhbGl6ZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgRUdMX0ZBTFNFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtYWpvcikgKm1ham9yID0gMTsKKyAgICAgICAgaWYg
KG1pbm9yKSAqbWlub3IgPSA0OworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsK
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVH
TF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsVGVybWluYXRlKEVHTERpc3Bs
YXkgZHB5KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwKSIsIGRweSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJU1BMQVkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIEVHTF9G
QUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGRpc3BsYXktPnRlcm1pbmF0
ZSgpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKwor
Y29uc3QgY2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3BsYXkgZHB5LCBFR0xp
bnQgbmFtZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50
IG5hbWUgPSAlZCkiLCBkcHksIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisg
ICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChuYW1lKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBFR0xfQ0xJRU5UX0FQSVM6CisgICAgICAgICAgICByZXR1cm4gc3Vj
Y2VzcygiT3BlbkdMX0VTIik7CisgICAgICAgICAgY2FzZSBFR0xfRVhURU5TSU9OUzoKKyAgICAg
ICAgICAgIHJldHVybiBzdWNjZXNzKCIiKTsKKyAgICAgICAgICBjYXNlIEVHTF9WRU5ET1I6Cisg
ICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiVHJhbnNHYW1pbmcgSW5jLiIpOworICAgICAgICAg
IGNhc2UgRUdMX1ZFUlNJT046CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiMS40IChnaXQt
ZGV2ZWwgIl9fREFURV9fIiAiIF9fVElNRV9fIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgKGNvbnN0IGNoYXIqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiBO
VUxMOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xHZXRDb25maWdzKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgKmNvbmZpZ3MsIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1f
Y29uZmlnKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25m
aWcgKmNvbmZpZ3MgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTGludCBjb25maWdfc2l6ZSA9
ICVkLCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjb25m
aWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbnVtX2NvbmZp
ZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVS
LCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRUdMaW50IGF0dHJpYkxp
c3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5nZXRDb25maWdz
KGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0Up
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xDaG9vc2VDb25maWcoRUdMRGlzcGxheSBk
cHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QsIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50
IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwLCAi
CisgICAgICAgICAgIkVHTENvbmZpZyAqY29uZmlncyA9IDB4JTAuOHAsIEVHTGludCBjb25maWdf
c2l6ZSA9ICVkLCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5
LCBhdHRyaWJfbGlzdCwgY29uZmlncywgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxl
Z2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIW51bV9jb25maWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IEVHTGludCBhdHRyaWJMaXN0W10gPSAgICB7RUdMX05PTkV9OworCisgICAgICAgIGlmICgh
YXR0cmliX2xpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmli
TGlzdDsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywg
YXR0cmliX2xpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAg
IH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUg
PSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZpZywg
YXR0cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5nZXRD
b25maWdBdHRyaWIoY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitF
R0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKEVHTERpc3BsYXkgZHB5
LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwg
RUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luID0gMHgl
MC44cCwgIgorICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCki
LCBkcHksIGNvbmZpZywgd2luLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAg
ICBIV05EIHdpbmRvdyA9IChIV05EKXdpbjsKKworICAgICAgICBpZiAoIUlzV2luZG93KHdpbmRv
dykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX05BVElWRV9X
SU5ET1csIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdHRyaWJf
bGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCphdHRyaWJfbGlzdCAhPSBFR0xf
Tk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYl9saXN0
WzBdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1JFTkRF
Ul9CVUZGRVI6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3RbMV0pCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVHTF9CQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRUdMX1NJTkdMRV9CVUZGRVI6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8vIFJlbmRlcmlu
ZyBkaXJlY3RseSB0byBmcm9udCBidWZmZXIgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZH
X0NPTE9SU1BBQ0U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBI
QV9GT1JNQVQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENI
LCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZGlzcGxheS0+aGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFD
RSk7CisgICAgICAgIH0KKworICAgICAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSAoRUdMU3VyZmFj
ZSlkaXNwbGF5LT5jcmVhdGVXaW5kb3dTdXJmYWNlKHdpbmRvdywgY29uZmlnKTsKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19T
VVJGQUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTFN1
cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNF
KCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwg
Y29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNv
bmZpZywgYXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAg
IGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEVHTF9OT19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX0RJU1BMQVkp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJl
dHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRl
UGl4bWFwU3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZl
UGl4bWFwVHlwZSBwaXhtYXAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJB
Q0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhw
LCBFR0xOYXRpdmVQaXhtYXBUeXBlIHBpeG1hcCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHBpeG1hcCwg
YXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICgh
dmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEVHTF9OT19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX0RJU1BMQVkpOworICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBF
R0xfTk9fU1VSRkFDRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVzdHJveVN1cmZh
Y2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBUUkFDRSgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCkiLCBk
cHksIHN1cmZhY2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICgh
dmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChl
Z2w6OlN1cmZhY2UqKXN1cmZhY2UpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVF
KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJu
IEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlTdXJmYWNlKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGlu
dCAqdmFsdWUpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1
cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFs
dWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUo
ZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1
cmZhY2UqKXN1cmZhY2U7CisKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6CisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RUdMX1ZHX0NPTE9SU1BBQ0U6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDoKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3Vy
ZmFjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVH
TF9IT1JJWk9OVEFMX1JFU09MVVRJT046CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1Rf
UEJVRkZFUjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX1RFWFRVUkU6CisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRUdMX01JUE1BUF9MRVZFTDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTVVM
VElTQU1QTEVfUkVTT0xWRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfUElYRUxfQVNQRUNUX1JB
VElPOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgorICAgICAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEVHTF9TV0FQX0JFSEFWSU9SOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJF
X0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6CisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT046CisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
RUdMX1dJRFRIOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbEJpbmRBUEkoRUdMZW51bSBhcGkpCit7CisgICAgVFJBQ0UoIihFR0xlbnVt
IGFwaSA9IDB4JVgpIiwgYXBpKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChh
cGkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfQVBJOgorICAgICAgICAg
IGNhc2UgRUdMX09QRU5WR19BUEk6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9Q
QVJBTUVURVIsIEVHTF9GQUxTRSk7ICAgLy8gTm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVu
dGF0aW9uCisgICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0VTX0FQSToKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1
cnJlbnRBUEkoYXBpKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFM
U0U7Cit9CisKK0VHTGVudW0gX19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCit7CisgICAgVFJB
Q0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEVHTGVudW0gQVBJID0gZWdsOjpn
ZXRDdXJyZW50QVBJKCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsK
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdENsaWVudCh2b2lkKQoreworICAgIFRS
QUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRocmVhZCh2b2lkKQoreworICAgIFRSQUNFKCIo
KSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChFR0xfTk9fRElT
UExBWSwgRUdMX05PX0NPTlRFWFQsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSk7CisK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xTdXJm
YWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihFR0xEaXNwbGF5
IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBFR0xDb25maWcg
Y29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1ZnR5cGUgPSAweCVYLCBFR0xDbGllbnRCdWZm
ZXIgYnVmZmVyID0gMHglMC44cCwgIgorICAgICAgICAgICJFR0xDb25maWcgY29uZmlnID0gMHgl
MC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBk
cHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0K
KworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VS
RkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworfQorCitFR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNl
IHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSkKK3sKKyAgICBUUkFDRSgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwg
RUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIGRw
eSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxT
RTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVH
TGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9U
UlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRleElt
YWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7
CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFj
ZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNw
bGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAg
fQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwg
ZWdsU3dhcEludGVydmFsKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgaW50ZXJ2YWwpCit7CisgICAg
VFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCBpbnRlcnZhbCA9ICVkKSIs
IGRweSwgaW50ZXJ2YWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlm
ICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xf
RkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBkaXNwbGF5LT5zZXRTd2FwSW50ZXJ2YWwoaW50
ZXJ2YWwpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30K
KworRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsQ3JlYXRlQ29udGV4dChFR0xEaXNwbGF5IGRweSwg
RUdMQ29uZmlnIGNvbmZpZywgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0LCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0ID0gMHgl
MC44cCwgIgorICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCki
LCBkcHksIGNvbmZpZywgc2hhcmVfY29udGV4dCwgYXR0cmliX2xpc3QpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19DT05URVhUOworICAgICAgICB9
CisKKyAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChj
b25maWcpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX05PX0NPTlRFWFQpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fQ09O
VEVYVDsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVzdHJveUNvbnRleHQoRUdMRGlz
cGxheSBkcHksIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkg
PSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwgZHB5LCBjdHgpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxl
Z2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY3R4ID09IEVHTF9OT19DT05URVhUKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAg
ICAgICAgZGlzcGxheS0+ZGVzdHJveUNvbnRleHQoKGdsOjpDb250ZXh0KiljdHgpOworCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2UgZHJhdywg
RUdMU3VyZmFjZSByZWFkLCBFR0xDb250ZXh0IGN0eCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBkcmF3ID0gMHglMC44cCwgRUdMU3VyZmFjZSBy
ZWFkID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5
LCBkcmF3LCByZWFkLCBjdHgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oY3R4KTsKKyAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Cisg
ICAgICAgIERXT1JEIHBhc3NlczsKKworICAgICAgICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlZh
bGlkYXRlRGV2aWNlKCZwYXNzZXMpID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjdHggIT0gRUdMX05PX0NPTlRFWFQgJiYgIXZhbGlkYXRl
KGRpc3BsYXksIGNvbnRleHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZB
TFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNFICYm
ICF2YWxpZGF0ZShkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSkpIHx8
CisgICAgICAgICAgICAocmVhZCAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRhdGUoZGlzcGxh
eSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4ocmVhZCkpKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3ICE9
IHJlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICB9CisKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50RGlzcGxheShkcHkpOworICAg
ICAgICBlZ2w6OnNldEN1cnJlbnREcmF3U3VyZmFjZShkcmF3KTsKKyAgICAgICAgZWdsOjpzZXRD
dXJyZW50UmVhZFN1cmZhY2UocmVhZCk7CisKKyAgICAgICAgZ2xNYWtlQ3VycmVudChjb250ZXh0
LCBkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSk7CisKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xDb250ZXh0IF9fc3Rk
Y2FsbCBlZ2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBnbEdldEN1cnJlbnRD
b250ZXh0KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50U3VyZmFjZShF
R0xpbnQgcmVhZGRyYXcpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgcmVhZGRyYXcgPSAlZCkiLCBy
ZWFkZHJhdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChyZWFkZHJhdyA9PSBFR0xf
UkVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgRUdMU3VyZmFjZSByZWFkID0gZWdsOjpnZXRD
dXJyZW50UmVhZFN1cmZhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlYWQpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlYWRkcmF3ID09IEVHTF9EUkFXKQorICAgICAg
ICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIGRyYXcgPSBlZ2w6OmdldEN1cnJlbnREcmF3U3Vy
ZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHJhdyk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9Q
QVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsK
K30KKworRUdMRGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudERpc3BsYXkodm9pZCkKK3sK
KyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMRGlzcGxheSBk
cHkgPSBlZ2w6OmdldEN1cnJlbnREaXNwbGF5KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
ZHB5KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1
ZXJ5Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGludCBhdHRyaWJ1
dGUsIEVHTGludCAqdmFsdWUpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xp
bnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY3R4LCBhdHRyaWJ1dGUsIHZh
bHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRl
KGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAg
ICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAg
IH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bFdhaXRHTCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2Vz
cygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdE5hdGl2ZShF
R0xpbnQgZW5naW5lKQoreworICAgIFRSQUNFKCIoRUdMaW50IGVuZ2luZSA9ICVkKSIsIGVuZ2lu
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
YWNlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNl
IHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJm
YWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZWds
OjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFjZSopc3VyZmFjZTsKKworICAgICAg
ICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFj
ZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTE5hdGl2ZVBp
eG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRhcmdldCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworfQorCitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkK
K3sKKyAgICBUUkFDRSgiKGNvbnN0IGNoYXIgKnByb2NuYW1lID0gXCIlc1wiKSIsIHByb2NuYW1l
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3RydWN0IEV4dGVuc2lvbgorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICAgICAgX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAgICAgICB9OworCisgICAg
ICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZWdsRXh0ZW5zaW9uc1tdID0KKyAgICAgICAgewor
ICAgICAgICAgICAgeyIiLCBOVUxMfSwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBl
eHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsg
ZXh0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGVnbEV4
dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xFeHRl
bnNpb25zW2V4dF0uYWRkcmVzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5VTEwpOworICAgIH0K
KworICAgIHJldHVybiBOVUxMOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
ZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorTElCUkFSWQlsaWJFR0wKK0VYUE9SVFMKKwllZ2xCaW5kQVBJICAgICAgICAgICAg
ICAgICAgICAgIEAxNAorCWVnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAgQDIwCisJZWds
Q2hvb3NlQ29uZmlnICAgICAgICAgICAgICAgICBANworCWVnbENvcHlCdWZmZXJzICAgICAgICAg
ICAgICAgICAgQDMzCisJZWdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAgICBAMjMKKwllZ2xD
cmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciAgICAgICAgQDE4CisJZWdsQ3JlYXRlUGJ1ZmZl
clN1cmZhY2UgICAgICAgICBAMTAKKwllZ2xDcmVhdGVQaXhtYXBTdXJmYWNlICAgICAgICAgIEAx
MQorCWVnbENyZWF0ZVdpbmRvd1N1cmZhY2UgICAgICAgICAgQDkKKwllZ2xEZXN0cm95Q29udGV4
dCAgICAgICAgICAgICAgIEAyNAorCWVnbERlc3Ryb3lTdXJmYWNlICAgICAgICAgICAgICAgQDEy
CisJZWdsR2V0Q29uZmlnQXR0cmliICAgICAgICAgICAgICBAOAorCWVnbEdldENvbmZpZ3MgICAg
ICAgICAgICAgICAgICAgQDYKKwllZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgIEAyNgor
CWVnbEdldEN1cnJlbnREaXNwbGF5ICAgICAgICAgICAgQDI4CisJZWdsR2V0Q3VycmVudFN1cmZh
Y2UgICAgICAgICAgICBAMjcKKwllZ2xHZXREaXNwbGF5ICAgICAgICAgICAgICAgICAgIEAyCisJ
ZWdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICBAMQorCWVnbEdldFByb2NBZGRyZXNzICAg
ICAgICAgICAgICAgQDM0CisJZWdsSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICBAMworCWVn
bE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgQDI1CisJZWdsUXVlcnlBUEkgICAgICAgICAg
ICAgICAgICAgICBAMTUKKwllZ2xRdWVyeUNvbnRleHQgICAgICAgICAgICAgICAgIEAyOQorCWVn
bFF1ZXJ5U3RyaW5nICAgICAgICAgICAgICAgICAgQDUKKwllZ2xRdWVyeVN1cmZhY2UgICAgICAg
ICAgICAgICAgIEAxMworCWVnbFJlbGVhc2VUZXhJbWFnZSAgICAgICAgICAgICAgQDIxCisJZWds
UmVsZWFzZVRocmVhZCAgICAgICAgICAgICAgICBAMTcKKwllZ2xTdXJmYWNlQXR0cmliICAgICAg
ICAgICAgICAgIEAxOQorCWVnbFN3YXBCdWZmZXJzICAgICAgICAgICAgICAgICAgQDMyCisJZWds
U3dhcEludGVydmFsICAgICAgICAgICAgICAgICBAMjIKKwllZ2xUZXJtaW5hdGUgICAgICAgICAg
ICAgICAgICAgIEA0CisJZWdsV2FpdENsaWVudCAgICAgICAgICAgICAgICAgICBAMTYKKwllZ2xX
YWl0R0wgICAgICAgICAgICAgICAgICAgICAgIEAzMAorCWVnbFdhaXROYXRpdmUgICAgICAgICAg
ICAgICAgICAgQDMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3Jj
L2xpYkVHTC9saWJFR0wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGli
RUdMLnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJv
agkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RU
eXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJsaWJFR0wiDQorCVBy
b2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fSINCisJUm9v
dE5hbWVzcGFjZT0ibGliRUdMIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRhcmdldEZyYW1l
d29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQor
CQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJ
PC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJ
TmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQo
Q29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1
cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0
PSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJ
CQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9q
ZWN0RGlyKS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lO
MzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9f
REVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFz
aWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJVXNlUHJl
Y29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRC
aXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29t
cGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBp
bGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRk
aXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIN
CisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiDQorCQkJCUdlbmVyYXRlRGVi
dWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlSYW5kb21pemVk
QmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlU
YXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlm
aWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDsk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYj
eDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0
RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5
ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwu
LlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4
MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlv
bg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0
aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hh
cmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0
aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFBy
b2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nl
c3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQ
T1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCINCisJ
CQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJ
CQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0i
ZmFsc2UiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQz
ZDkubGliIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCU1vZHVsZURlZmluaXRpb25G
aWxlPSJsaWJFR0wuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQor
CQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFi
bGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJ
CURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01h
a2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGlu
ZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXRE
aXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJF
R0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9u
TmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQor
CQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0K
Kwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2Ug
RmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207
YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEz
MkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbmZp
Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxDb21tb25cZGVidWcuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxEaXNwbGF5LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFt
ZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIg0K
KwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVC
RkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmlnLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpc3Bs
YXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsZXh0LmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRl
XEVHTFxlZ2xwbGF0Zm9ybS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CTwvRmlsdGVyPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmRlZiINCisJ
CQk+DQorCQk8L0ZpbGU+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQor
PC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBt
YW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaW5jbHVkZSAibGliRUdML21haW4u
aCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCitzdGF0aWMgRFdPUkQgY3VycmVudFRM
UyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKKworQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0Ug
aW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQoreworICAgIHN3aXRjaCAo
cmVhc29uKQorICAgIHsKKyAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICB7
CisgICAgICAgICAgICAjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgIEZJTEUgKmRlYnVn
ID0gZm9wZW4oImRlYnVnLnR4dCIsICJydCIpOworCisgICAgICAgICAgICAgICAgaWYgKGRlYnVn
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbigiZGVidWcudHh0IiwgInd0Iik7ICAg
Ly8gRXJhc2UKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgY3VycmVudFRMUyA9IFRs
c0FsbG9jKCk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0ZfSU5E
RVhFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFs
aXplIGluZGV4CisgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgICAgICB7CisgICAg
ICAgICAgICBlZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilMb2NhbEFsbG9j
KExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywg
Y3VycmVudCk7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9IEVHTF9TVUNDRVNT
OworICAgICAgICAgICAgICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOworICAg
ICAgICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgICAgICAg
ICAgICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9USFJFQURfREVU
QUNIOgorICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUo
Y3VycmVudFRMUyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRB
Q0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gVFJVRTsKK30KKworbmFtZXNwYWNlIGVnbAorewordm9pZCBzZXRDdXJyZW50RXJyb3IoRUdM
aW50IGVycm9yKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5lcnJvciA9IGVycm9yOworfQorCitFR0xp
bnQgZ2V0Q3VycmVudEVycm9yKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmVycm9yOwor
fQorCit2b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpCit7CisgICAgQ3VycmVudCAqY3Vy
cmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQt
PkFQSSA9IEFQSTsKK30KKworRUdMZW51bSBnZXRDdXJyZW50QVBJKCkKK3sKKyAgICBDdXJyZW50
ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0
dXJuIGN1cnJlbnQtPkFQSTsKK30KKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5
IGRweSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKK30KKworRUdMRGlzcGxh
eSBnZXRDdXJyZW50RGlzcGxheSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50
KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kaXNwbGF5
OworfQorCit2b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCit7
CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExT
KTsKKworICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gc3VyZmFjZTsKK30KKworRUdMU3VyZmFj
ZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3Vy
cmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZHJh
d1N1cmZhY2U7Cit9CisKK3ZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVHTFN1cmZhY2Ugc3Vy
ZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJmYWNlOworfQorCitF
R0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJy
ZW50LT5yZWFkU3VyZmFjZTsKK30KK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JDb2RlKQor
eworICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKGVycm9yQ29kZSk7Cit9CkluZGV4OiBBTkdMRS9z
cmMvbGliRUdML21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML21haW4uaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6IE1hbmFnZW1lbnQg
b2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpZm5kZWYgTElCRUdMX01BSU5fSF8KKyNkZWZpbmUg
TElCRUdMX01BSU5fSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisK
K25hbWVzcGFjZSBlZ2wKK3sKK3N0cnVjdCBDdXJyZW50Cit7CisgICAgRUdMaW50IGVycm9yOwor
ICAgIEVHTGVudW0gQVBJOworICAgIEVHTERpc3BsYXkgZGlzcGxheTsKKyAgICBFR0xTdXJmYWNl
IGRyYXdTdXJmYWNlOworICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Cit9OworCit2b2lkIHNl
dEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpOworRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOwor
Cit2b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpOworRUdMZW51bSBnZXRDdXJyZW50QVBJ
KCk7CisKK3ZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOworRUdMRGlzcGxh
eSBnZXRDdXJyZW50RGlzcGxheSgpOworCit2b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xT
dXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKKwor
dm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTFN1cmZh
Y2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCk7Cit9CisKK3ZvaWQgZXJyb3IoRUdMaW50IGVycm9y
Q29kZSk7CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JD
b2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlcnJvcihlcnJvckNvZGUpOworCisg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPgorY29uc3QgVCAm
c3VjY2Vzcyhjb25zdCBUICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlZ2w6OnNldEN1cnJlbnRFcnJv
cihFR0xfU1VDQ0VTUyk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAg
Ly8gTElCRUdMX01BSU5fSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTY0
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxp
dHkgY2xhc3MuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorCisjaW5jbHVkZSA8ZDNk
eDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKKworbmFtZXNwYWNlCit7CisvLyBTdGFuZGFyZCBWZXJ0ZXggU2hhZGVyCisvLyBJ
bnB1dCAwIGlzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uLgorLy8gT3V0cHV0cyB0aGUgaG9tb2dl
bm91cyBwb3NpdGlvbiBhcy1pcy4KKy8vIE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwwKSBp
biB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkgaW4gdGhlIGJv
dHRvbSByaWdodC4KKy8vIEMwLlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVsIHdpZHRoLCBD
MC5ZIG11c3QgYmUgaGFsZi1waXhlbCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNo
YXIgc3RhbmRhcmR2c1tdID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9h
dDQgcG9zaXRpb24gOiBQT1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09P
UkQwO1xuIgorIn07XG4iCisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMw
O1xuIgorIlxuIgorIlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9O
KVxuIgorIntcbiIKKyIgICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0
aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBw
b3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwg
MCwgMCk7XG4iCisiXG4iCisiICAgIHJldHVybiBPdXQ7XG4iCisifVxuIjsKKworLy8gRmxpcCBZ
IFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisv
LyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRl
eCBjb29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVu
IGFuZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFs
Zi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitjb25zdCBjaGFyIGZs
aXB5dnNbXSA9Cisic3RydWN0IFZTX09VVFBVVFxuIgorIntcbiIKKyIgICAgZmxvYXQ0IHBvc2l0
aW9uIDogUE9TSVRJT047XG4iCisiICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDtcbiIK
KyJ9O1xuIgorIlxuIgorInVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDtcbiIKKyJc
biIKKyJWU19PVVRQVVQgbWFpbihpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTilcbiIKKyJ7
XG4iCisiICAgIFZTX09VVFBVVCBPdXQ7XG4iCisiXG4iCisiICAgIE91dC5wb3NpdGlvbiA9IHBv
c2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtcbiIKKyIgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24g
KiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4i
CisiXG4iCisiICAgIHJldHVybiBPdXQ7XG4iCisifVxuIjsKKworLy8gUGFzc3Rocm91Z2ggUGl4
ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCitj
b25zdCBjaGFyIHBhc3N0aHJvdWdocHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xuIgorIlxu
IgorImZsb2F0NCBtYWluKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgor
IntcbiIKKyIJcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIn1cbiI7CisKKy8v
IEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4
MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMw
LlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4K
K2NvbnN0IGNoYXIgbHVtaW5hbmNlcHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xuIgorIlxu
IgorInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJmbG9hdDQgbWFpbihmbG9h
dDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4iCisiCWZsb2F0NCB0bXAg
PSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueCAr
IG1vZGUueTtcbiIKKyIJcmV0dXJuIHRtcC54eHh3O1xuIgorIn1cbiI7CisKKy8vIFJHQi9BIENv
bXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3
aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCisvLyBUbyBmb3JjZSBS
R0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KKy8vIFRvIGZvcmNlIEEg
PSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAw
LgorY29uc3QgY2hhciBjb21wb25lbnRtYXNrcHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xu
IgorIlxuIgorInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJmbG9hdDQgbWFp
bihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4iCisiCWZsb2F0
NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKKyIJdG1wLnh5eiA9IHRtcC54eXog
KiBtb2RlLng7XG4iCisiCXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7XG4iCisiCXJl
dHVybiB0bXA7XG4iCisifVxuIjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY29uc3QgY2hh
ciAqIGNvbnN0IEJsaXQ6Om1TaGFkZXJTb3VyY2VbXSA9Cit7CisgICAgc3RhbmRhcmR2cywKKyAg
ICBmbGlweXZzLAorICAgIHBhc3N0aHJvdWdocHMsCisgICAgbHVtaW5hbmNlcHMsCisgICAgY29t
cG9uZW50bWFza3BzCit9OworCitCbGl0OjpCbGl0KENvbnRleHQgKmNvbnRleHQpCisgIDogbUNv
bnRleHQoY29udGV4dCksIG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xh
cmF0aW9uKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNp
bChOVUxMKSwgbVNhdmVkU3RhdGVCbG9jayhOVUxMKQoreworICAgIGluaXRHZW9tZXRyeSgpOwor
ICAgIG1lbXNldChtQ29tcGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykp
OworfQorCitCbGl0Ojp+QmxpdCgpCit7CisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZl
ZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFk
VmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24p
IG1RdWFkVmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgU0hBREVSX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNvbXBpbGVkU2hh
ZGVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVs
ZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgp
Cit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHF1YWRbXSA9CisgICAgeworICAgICAgICAtMSwg
LTEsCisgICAgICAgIC0xLCAgMSwKKyAgICAgICAgIDEsIC0xLAorICAgICAgICAgMSwgIDEKKyAg
ICB9OworCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9mKHF1YWQpLCBE
M0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVydGV4QnVmZmVy
LCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhy
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCAq
bG9ja1B0cjsKKyAgICBtUXVhZFZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbG9ja1B0ciwgMCk7
CisgICAgbWVtY3B5KGxvY2tQdHIsIHF1YWQsIHNpemVvZihxdWFkKSk7CisgICAgbVF1YWRWZXJ0
ZXhCdWZmZXItPlVubG9jaygpOworCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5
IGVsZW1lbnRzW10gPQorICAgIHsKKyAgICAgICAgeyAwLCAwLCBEM0RERUNMVFlQRV9GTE9BVDIs
IEQzRERFQ0xNRVRIT0RfREVGQVVMVCwgRDNEREVDTFVTQUdFX1BPU0lUSU9OLCAwIH0sCisgICAg
ICAgIEQzRERFQ0xfRU5EKCkKKyAgICB9OworCisgICAgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRl
eERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgaWYg
KEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJU
eXBlPgorYm9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpw
cm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERl
dmljZTk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUqKiksCisg
ICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNl
dFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOworCisgICAgaWYg
KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgc2hhZGVy
ID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIElEM0RYQnVmZmVyICpzaGFkZXJDb2Rl
OworICAgICAgICBIUkVTVUxUIGhyID0gRDNEWENvbXBpbGVTaGFkZXIobVNoYWRlclNvdXJjZVtz
b3VyY2VdLCBzdHJsZW4obVNoYWRlclNvdXJjZVtzb3VyY2VdKSwgTlVMTCwgTlVMTCwgIm1haW4i
LCBwcm9maWxlLCAwLCAmc2hhZGVyQ29kZSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNvbXBpbGUg
JXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUs
IChpbnQpc291cmNlLCBocik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBociA9IChkZXZpY2UtPipjcmVhdGVTaGFkZXIpKHN0YXRpY19jYXN0PGNvbnN0
IERXT1JEKj4oc2hhZGVyQ29kZS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgJnNoYWRlcik7CisgICAg
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJDb2RlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgJXMgc2hhZGVyIGZv
ciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQpc291cmNl
LCBocik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBz
aGFkZXJDb2RlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2Vd
ID0gc2hhZGVyOworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVy
KShzaGFkZXIpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBFUlIoIkZh
aWxlZCB0byBzZXQgJXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhY
LiIsIHByb2ZpbGUsIChpbnQpc291cmNlLCBocik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIo
U2hhZGVySWQgc2hhZGVyKQoreworICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVydGV4
U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpLCAmSURp
cmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0
VmVydGV4U2hhZGVyKTsKK30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBz
aGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNo
YWRlciwgbUNvbnRleHQtPmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNl
OTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7
Cit9CisKK1JFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpIGNvbnN0Cit7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0
RGVzYygmZGVzYyk7CisKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gMDsKKyAgICBy
ZWN0LnRvcCA9IDA7CisgICAgcmVjdC5yaWdodCA9IGRlc2MuV2lkdGg7CisgICAgcmVjdC5ib3R0
b20gPSBkZXNjLkhlaWdodDsKKworICAgIHJldHVybiByZWN0OworfQorCitib29sIEJsaXQ6OmJv
eEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCkKK3sKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0
dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291cmNlKSk7CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisKKyAgICBkZXZp
Y2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgZGVzdCk7CisKKyAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKyAg
ICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOworCisgICAgc2V0Q29tbW9u
QmxpdFN0YXRlKCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5G
SUxURVIsIEQzRFRFWEZfTElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBE
M0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAgc2V0Vmlld3BvcnQoZ2V0
U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOworCisgICAgcmVuZGVyKCk7CisKKyAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIElEaXJlY3Qz
RFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBzb3VyY2VS
ZWN0KTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAg
ICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZpZXdwb3J0KHNv
dXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7
CisgICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQorICAgIHsKKyAg
ICAgICAgcmVuZGVyKCk7CisgICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAg
cmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRG
b3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBib29sIG9rYXkg
PSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3aXRjaCAoZGVz
dEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2Fz
ZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAg
ICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfQ09NUE9ORU5UTUFT
Syk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNo
YWRlcihTSEFERVJfUFNfTFVNSU5BTkNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKCFva2F5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGVu
dW0geyBYID0gMCwgWSA9IDEsIFogPSAyLCBXID0gMyB9OworCisgICAgLy8gVGhlIG1lYW5pbmcg
b2YgdGhpcyBjb25zdGFudCBkZXBlbmRzIG9uIHRoZSBzaGFkZXIgdGhhdCB3YXMgc2VsZWN0ZWQu
CisgICAgLy8gU2VlIHRoZSBzaGFkZXIgYXNzZW1ibHkgY29kZSBhYm92ZSBmb3IgZGV0YWlscy4K
KyAgICBmbG9hdCBwc0NvbnN0MFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgc3dpdGNoIChk
ZXN0Rm9ybWF0KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBj
YXNlIEdMX1JHQkE6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBb
Wl0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgIHBz
Q29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBbV10gPSAxOworICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIHBzQ29uc3QwW1ld
ID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgor
ICAgICAgICBwc0NvbnN0MFtYXSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdl
dERldmljZSgpLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBwc0NvbnN0MCwgMSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworSURpcmVjdDNEVGV4dHVyZTkgKkJsaXQ6OmNvcHlTdXJmYWNl
VG9UZXh0dXJlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VS
ZWN0KQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0Vf
REVTQyBzb3VyY2VEZXNjOworICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOworCisg
ICAgLy8gQ29weSB0aGUgcmVuZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQorICAgIElEaXJlY3Qz
RFRleHR1cmU5ICp0ZXh0dXJlOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlKHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJjZVJlY3QuYm90
dG9tIC0gc291cmNlUmVjdC50b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgc291cmNlRGVz
Yy5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAg
IH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAgICByZXN1bHQg
PSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIFJFQ1QgZDNkU291cmNl
UmVjdDsKKyAgICBkM2RTb3VyY2VSZWN0LmxlZnQgPSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgZDNk
U291cmNlUmVjdC5yaWdodCA9IHNvdXJjZVJlY3QucmlnaHQ7CisgICAgZDNkU291cmNlUmVjdC50
b3AgPSBzb3VyY2VSZWN0LnRvcDsKKyAgICBkM2RTb3VyY2VSZWN0LmJvdHRvbSA9IHNvdXJjZVJl
Y3QuYm90dG9tOworCisgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICByZXN1bHQgPSBkZXZp
Y2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZkM2RTb3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwg
TlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7CisK
KyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAg
ICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dGV4dHVyZTsKK30KKwordm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VS
ZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEVklFV1BPUlQ5IHZwOworICAgIHZw
LlggICAgICA9IHhvZmZzZXQ7CisgICAgdnAuWSAgICAgID0geW9mZnNldDsKKyAgICB2cC5XaWR0
aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0OworICAgIHZwLkhlaWdodCA9
IHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3A7CisgICAgdnAuTWluWiAgID0gMC4w
ZjsKKyAgICB2cC5NYXhaICAgPSAxLjBmOworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsK
KworICAgIGZsb2F0IGhhbGZQaXhlbEFkanVzdFs0XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYv
dnAuSGVpZ2h0LCAwLCAwIH07CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
MCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsKK30KKwordm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3Rh
dGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisg
ICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJ
VEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRF
RU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQp
OworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RU
RVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JU
RVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9B
RERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTKzE7IGkrKykKKyAgICB7CisgICAgICAgIGRl
dmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6
cmVuZGVyKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxU
IGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIg
KiBzaXplb2YoZmxvYXQpKTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24o
bVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Cisg
ICAgaHIgPSBkZXZpY2UtPkRyYXdQcmltaXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7
Cit9CisKK3ZvaWQgQmxpdDo6c2F2ZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgaHI7CisKKyAgICBkZXZpY2UtPkdl
dERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAgZGV2aWNlLT5H
ZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7CisKKyAgICBpZiAobVNhdmVk
U3RhdGVCbG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3Rh
dGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBzZXRD
b21tb25CbGl0U3RhdGUoKTsKKworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25z
dFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVy
KE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1t
eUNvbnN0LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAg
ICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKwor
ICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKKyAgICAgICAgZHVtbXlWcC5YID0gMDsKKyAg
ICAgICAgZHVtbXlWcC5ZID0gMDsKKyAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7CisgICAgICAg
IGR1bW15VnAuSGVpZ2h0ID0gMTsKKyAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKKyAgICAgICAg
ZHVtbXlWcC5NYXhaID0gMTsKKworICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZw
KTsKKworICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7CisKKyAgICAgICAgZGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOworCisgICAg
ICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7
CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2sp
OworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQobVNh
dmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5V
TEwpCisgICAgeworICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZXN0
b3JlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNp
bCk7CisgICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAg
bVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1TYXZlZERlcHRoU3RlbmNp
bCA9IE5VTEw7CisgICAgfQorCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVk
UmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCisgICAg
eworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVk
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9j
ayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgewor
ICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOworICAgIH0KK30KKworfQpJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CbGl0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxp
dC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9C
TElUX0hfCisjZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCisKKyNpbmNsdWRlIDxtYXA+CisKKyNk
ZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSA8ZDNk
OS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7
CitjbGFzcyBDb250ZXh0OworCitjbGFzcyBCbGl0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNp
dCBCbGl0KENvbnRleHQgKmNvbnRleHQpOworICAgIH5CbGl0KCk7CisKKyAgICAvLyBDb3B5IGZy
b20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJjZVJlY3QsIHhv
ZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVwcGVyLWxlZnQp
CisgICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RGb3JtYXQgc3Bl
Y2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBpZiBkZXN0Rm9y
bWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0byAwLgorICAg
IGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJveCBmaWx0ZXIg
c2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhhdCBzb3VyY2Ug
aXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNlLgorICAgIGJv
b2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KTsKKworICBwcml2YXRlOgorICAgIENvbnRleHQgKm1Db250ZXh0OworCisgICAgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7CisgICAgSURpcmVjdDNEVmVy
dGV4RGVjbGFyYXRpb245ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOworCisgICAgdm9pZCBpbml0
R2VvbWV0cnkoKTsKKworICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRl
c3RGb3JtYXQpOworCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKmNvcHlTdXJmYWNlVG9UZXh0dXJl
KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0KTsKKyAg
ICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQpOworICAgIHZvaWQgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgUkVD
VCBnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3Q7CisKKyAg
ICAvLyBUaGlzIGVudW0gaXMgdXNlZCB0byBpbmRleCBtQ29tcGlsZWRTaGFkZXJzIGFuZCBtU2hh
ZGVyU291cmNlLgorICAgIGVudW0gU2hhZGVySWQKKyAgICB7CisgICAgICAgIFNIQURFUl9WU19T
VEFOREFSRCwKKyAgICAgICAgU0hBREVSX1ZTX0ZMSVBZLAorICAgICAgICBTSEFERVJfUFNfUEFT
U1RIUk9VR0gsCisgICAgICAgIFNIQURFUl9QU19MVU1JTkFOQ0UsCisgICAgICAgIFNIQURFUl9Q
U19DT01QT05FTlRNQVNLLAorICAgICAgICBTSEFERVJfQ09VTlQKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIgKiBjb25zdCBtU2hhZGVyU291cmNlW107CisKKyAgICAvLyBUaGlzIGFj
dHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KKyAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hhZGVy
c1tTSEFERVJfQ09VTlRdOworCisgICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Cisg
ICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAor
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3Jl
YXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlICoqKSwKKyAgICAgICAgICAg
ICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNE
U2hhZGVyVHlwZSopKTsKKworICAgIGJvb2wgc2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRl
cik7CisgICAgYm9vbCBzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOworICAgIHZvaWQg
cmVuZGVyKCk7CisKKyAgICB2b2lkIHNhdmVTdGF0ZSgpOworICAgIHZvaWQgcmVzdG9yZVN0YXRl
KCk7CisgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1TYXZlZFN0YXRlQmxvY2s7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKm1TYXZlZFJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbVNhdmVkRGVwdGhTdGVuY2lsOworCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJs
aXQpOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0JMSVRfSF8KSW5kZXg6IEFOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2Vu
dGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKKy8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMg
R0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1
ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworQnVmZmVyOjpCdWZmZXIoKQoreworICAgIG1D
b250ZW50cyA9IE5VTEw7CisgICAgbVNpemUgPSAwOworICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNf
RFJBVzsKK30KKworQnVmZmVyOjp+QnVmZmVyKCkKK3sKKyAgICBkZWxldGVbXSBtQ29udGVudHM7
Cit9CisKK3ZvaWQgQnVmZmVyOjpidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlw
dHIgc2l6ZSwgR0xlbnVtIHVzYWdlKQoreworICAgIGlmIChzaXplID09IDApCisgICAgeworICAg
ICAgICBkZWxldGVbXSBtQ29udGVudHM7CisgICAgICAgIG1Db250ZW50cyA9IE5VTEw7CisgICAg
fQorICAgIGVsc2UgaWYgKHNpemUgIT0gbVNpemUpCisgICAgeworICAgICAgICBkZWxldGVbXSBt
Q29udGVudHM7CisgICAgICAgIG1Db250ZW50cyA9IG5ldyBHTHVieXRlW3NpemVdOworICAgICAg
ICBtZW1zZXQobUNvbnRlbnRzLCAwLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YSAhPSBO
VUxMICYmIHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG1Db250ZW50cywgZGF0YSwg
c2l6ZSk7CisgICAgfQorCisgICAgbVNpemUgPSBzaXplOworICAgIG1Vc2FnZSA9IHVzYWdlOwor
fQorCit2b2lkIEJ1ZmZlcjo6YnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVp
cHRyIHNpemUsIEdMaW50cHRyIG9mZnNldCkKK3sKKyAgICBtZW1jcHkobUNvbnRlbnRzICsgb2Zm
c2V0LCBkYXRhLCBzaXplKTsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyLmg6IERlZmluZXMgdGhl
IGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IK
Ky8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIx
LgorCisjaWZuZGVmIExJQkdMRVNWMl9CVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JVRkZF
Ul9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUg
R0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcgoreworICBwdWJs
aWM6CisgICAgQnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKKworICAgIHZvaWQg
YnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2Fn
ZSk7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIg
c2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworICAgIHZvaWQgKmRhdGEoKSB7IHJldHVybiBtQ29u
dGVudHM7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisgICAg
R0xlbnVtIHVzYWdlKCkgY29uc3QgeyByZXR1cm4gbVVzYWdlOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyKTsKKworICAgIEdMdWJ5dGUgKm1Db250
ZW50czsKKyAgICBzaXplX3QgbVNpemU7CisgICAgR0xlbnVtIG1Vc2FnZTsKK307CisKK30KKwor
I2VuZGlmICAgLy8gTElCR0xFU1YyX0JVRkZFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyOTkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb250
ZXh0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBH
TCBzdGF0ZSBhbmQgcGVyZm9ybWluZworLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRo
ZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1
ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dl
b21ldHJ5L2R4OS5oIgorCisjdW5kZWYgbmVhcgorI3VuZGVmIGZhcgorCituYW1lc3BhY2UgZ2wK
K3sKK0NvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZykKKyAgICA6IG1D
b25maWcoY29uZmlnKQoreworICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4w
Zik7CisKKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKKyAgICBtU3RhdGUuc3Rl
bmNpbENsZWFyVmFsdWUgPSAwOworCisgICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7CisgICAg
bVN0YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKKyAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NX
OworICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuZGVwdGhGdW5jID0g
R0xfTEVTUzsKKyAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKKyAgICBtU3RhdGUuc291cmNlQmxl
bmRSR0IgPSBHTF9PTkU7CisgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Cisg
ICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87CisgICAgbVN0YXRlLmRlc3RCbGVuZEFs
cGhhID0gR0xfWkVSTzsKKyAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQURE
OworICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKKyAgICBtU3Rh
dGUuYmxlbmRDb2xvci5yZWQgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsK
KyAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsKKyAgICBtU3RhdGUuYmxlbmRDb2xvci5h
bHBoYSA9IDA7CisgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOworICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsKKyAgICBt
U3RhdGUuc3RlbmNpbE1hc2sgPSAtMTsKKyAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0x
OworICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOworICAg
IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsRmFp
bCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsK
KyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5z
dGVuY2lsQmFja0ZhaWwgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0
aEZhaWwgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBH
TF9LRUVQOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOworICAgIG1TdGF0
ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsKKyAgICBtU3RhdGUucG9seWdvbk9mZnNldFVu
aXRzID0gMC4wZjsKKyAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Cisg
ICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVy
YWdlVmFsdWUgPSAxLjBmOworICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNl
OworICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5kaXRoZXIgPSB0
cnVlOworICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7CisKKyAg
ICBtU3RhdGUubGluZVdpZHRoID0gMS4wZjsKKworICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwor
ICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOworICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29u
ZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7CisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29u
ZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OworICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7CisgICAg
bVN0YXRlLnpGYXIgPSAxLjBmOworCisgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKKyAgICBtU3Rh
dGUuc2Npc3NvclkgPSAwOworICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNw
bGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3Bs
YXlNb2RlLkhlaWdodDsKKworICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOworICAgIG1T
dGF0ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0
cnVlOworICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7CisgICAgbVN0YXRlLmRlcHRo
TWFzayA9IHRydWU7CisKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFn
ZSA4MzoKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVS
RV9DVUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1
cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgICAg
Ly8gSW4gb3JkZXIgdGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUg
bG9zdCwgdGhleSBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlCisgICAgLy8gb2JqZWN0cyBhbGwgb2Yg
d2hvc2UgbmFtZXMgYXJlIDAuCisKKyAgICBtVGV4dHVyZTJEWmVybyA9IG5ldyBUZXh0dXJlMkQo
dGhpcyk7CisgICAgbVRleHR1cmVDdWJlTWFwWmVybyA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0aGlz
KTsKKworICAgIG1Db2xvcmJ1ZmZlclplcm8gPSBOVUxMOworICAgIG1EZXB0aGJ1ZmZlclplcm8g
PSBOVUxMOworICAgIG1TdGVuY2lsYnVmZmVyWmVybyA9IE5VTEw7CisKKyAgICBtU3RhdGUuYWN0
aXZlU2FtcGxlciA9IDA7CisgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAgICBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7CisgICAg
YmluZFRleHR1cmUyRCgwKTsKKyAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAgYmluZFJlbmRl
cmJ1ZmZlcigwKTsKKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBF
X0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2Ft
cGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQ
RV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBl
XSA9IE5VTEw7CisgICAgfQorCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKKworICAg
IG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0g
NDsKKworICAgIG1CdWZmZXJCYWNrRW5kID0gTlVMTDsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIg
PSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBtQmxpdCA9IE5VTEw7
CisKKyAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKKyAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7
CisgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxz
ZTsKKyAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICBtSGFz
QmVlbkN1cnJlbnQgPSBmYWxzZTsKKworICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxM
OworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKK0NvbnRleHQ6On5Db250ZXh0KCkKK3sK
KyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7
IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGRlbGV0
ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOworICAgIH0KKworICAgIGRlbGV0ZSBtVGV4dHVy
ZTJEWmVybzsKKyAgICBkZWxldGUgbVRleHR1cmVDdWJlTWFwWmVybzsKKworICAgIGRlbGV0ZSBt
Q29sb3JidWZmZXJaZXJvOworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJaZXJvOworICAgIGRlbGV0
ZSBtU3RlbmNpbGJ1ZmZlclplcm87CisKKyAgICBkZWxldGUgbUJ1ZmZlckJhY2tFbmQ7CisgICAg
ZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7
CisgICAgZGVsZXRlIG1CbGl0OworCisgICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVtcHR5KCkpCisg
ICAgeworICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Cisg
ICAgfQorCisgICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAg
d2hpbGUgKCFtU2hhZGVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVTaGFkZXIo
bVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtRnJhbWVi
dWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFt
ZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtUmVuZGVy
YnVmZmVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJl
bmRlcmJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtVGV4
dHVyZU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1h
cC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUpCisgICAgeworICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Cisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGRpc3BsYXktPmdldERldmljZSgpOworCisgICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCisg
ICAgeworICAgICAgICBtRGV2aWNlQ2FwcyA9IGRpc3BsYXktPmdldERldmljZUNhcHMoKTsKKwor
ICAgICAgICBtQnVmZmVyQmFja0VuZCA9IG5ldyBEeDlCYWNrRW5kKHRoaXMsIGRldmljZSk7Cisg
ICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBt
QnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0
YU1hbmFnZXIodGhpcywgbUJ1ZmZlckJhY2tFbmQpOworICAgICAgICBtQmxpdCA9IG5ldyBCbGl0
KHRoaXMpOworCisgICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKKworICAgICAgICBtU3Rh
dGUudmlld3BvcnRYID0gMDsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgICAg
IG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgbVN0
YXRlLnNjaXNzb3JYID0gMDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKKyAgICAgICAg
bVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7CisgICAgICAgIG1TdGF0
ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgbUhhc0Jl
ZW5DdXJyZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBEaXJl
Y3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2lnbiB0aGVtIHRvIHRoZSAn
MCcgbmFtZXMKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRhcmdldCA9IHN1
cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0
ZW5jaWwgPSBzdXJmYWNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIEZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlclplcm8gPSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICBDb2xvcmJ1ZmZlciAqY29s
b3JidWZmZXJaZXJvID0gbmV3IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOworICAg
IERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhidWZmZXIoZGVwdGhTdGVu
Y2lsKTsKKyAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBTdGVuY2ls
YnVmZmVyKGRlcHRoU3RlbmNpbCk7CisKKyAgICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVidWZm
ZXJaZXJvKTsKKyAgICBzZXRDb2xvcmJ1ZmZlclplcm8oY29sb3JidWZmZXJaZXJvKTsKKyAgICBz
ZXREZXB0aGJ1ZmZlclplcm8oZGVwdGhidWZmZXJaZXJvKTsKKyAgICBzZXRTdGVuY2lsYnVmZmVy
WmVybyhzdGVuY2lsYnVmZmVyWmVybyk7CisKKyAgICBmcmFtZWJ1ZmZlclplcm8tPnNldENvbG9y
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJvLT5zZXREZXB0
aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworCisgICAgZGVmYXVsdFJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOworCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRl
cHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAobURldmljZUNhcHMu
UGl4ZWxTaGFkZXJWZXJzaW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCkpCisgICAgeworICAgICAg
ICBtUHNQcm9maWxlID0gInBzXzNfMCI7CisgICAgICAgIG1Wc1Byb2ZpbGUgPSAidnNfM18wIjsK
KyAgICB9CisgICAgZWxzZSAgLy8gZWdsOjpEaXNwbGF5IGd1YXJhbnRlZXMgc3VwcG9ydCBmb3Ig
YXQgbGVhc3QgMi4wCisgICAgeworICAgICAgICBtUHNQcm9maWxlID0gInBzXzJfMCI7CisgICAg
ICAgIG1Wc1Byb2ZpbGUgPSAidnNfMl8wIjsKKyAgICB9CisKKyAgICBtYXJrQWxsU3RhdGVEaXJ0
eSgpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVs
YXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0IHBy
ZS1kcmF3Lgordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7CisgICAgbUFwcGxp
ZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
PSAwOworICAgIG1BcHBsaWVkUHJvZ3JhbSA9IDA7CisKKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0g
dHJ1ZTsKKyAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EZXB0aFN0YXRlRGlydHkg
PSB0cnVlOworICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbUJsZW5kU3RhdGVEaXJ0
eSA9IHRydWU7CisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtUG9seWdvbk9m
ZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Cisg
ICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1
ZTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQoreworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWUucmVkID0gcmVkOworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsK
KyAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOworICAgIG1TdGF0ZS5jb2xv
ckNsZWFyVmFsdWUuYWxwaGEgPSBhbHBoYTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhckRl
cHRoKGZsb2F0IGRlcHRoKQoreworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0aDsK
K30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCit7CisgICAg
bVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNpbDsKK30KKwordm9pZCBDb250ZXh0Ojpz
ZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBl
bmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKKyAgICAg
ICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXND
dWxsRmFjZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKG1T
dGF0ZS5jdWxsTW9kZSAhPSBtb2RlKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0g
bW9kZTsKKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCkKK3sKKyAgICBpZiAobVN0YXRlLmZy
b250RmFjZSAhPSBmcm9udCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9u
dDsKKyAgICAgICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmRlcHRo
VGVzdCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJs
ZWQ7CisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBD
b250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUu
ZGVwdGhUZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhG
dW5jKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKKyAgICB7Cisg
ICAgICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7CisgICAgICAgIG1EZXB0aFN0YXRl
RGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdlKGZs
b2F0IHpOZWFyLCBmbG9hdCB6RmFyKQoreworICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOworICAg
IG1TdGF0ZS56RmFyID0gekZhcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29sIGVu
YWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN0YXRlLmJsZW5kOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kRmFj
dG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhh
LCBHTGVudW0gZGVzdEFscGhhKQoreworICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0g
c291cmNlUkdCIHx8CisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJjZUFs
cGhhIHx8CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAorICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQorICAgIHsKKyAgICAgICAgbVN0
YXRlLnNvdXJjZUJsZW5kUkdCID0gc291cmNlUkdCOworICAgICAgICBtU3RhdGUuZGVzdEJsZW5k
UkdCID0gZGVzdFJHQjsKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VB
bHBoYTsKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOworICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBo
YSkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAorICAgICAgICBt
U3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUuYmxlbmRD
b2xvci5ibHVlICE9IGJsdWUgfHwKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0g
YWxwaGEpCisgICAgeworICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7CisgICAg
ICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gZ3JlZW47CisgICAgICAgIG1TdGF0ZS5ibGVu
ZENvbG9yLmJsdWUgPSBibHVlOworICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IGFs
cGhhOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBo
YUVxdWF0aW9uKQoreworICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVh
dGlvbiB8fAorICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRp
b24pCisgICAgeworICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9u
OworICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsKKyAg
ICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxU
ZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFi
bGVkOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9v
bCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGF0ZS5zdGVuY2lsVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1zKEdM
ZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKQor
eworICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKKyAgICAgICAg
bVN0YXRlLnN0ZW5jaWxSZWYgIT0gc3RlbmNpbFJlZiB8fAorICAgICAgICBtU3RhdGUuc3RlbmNp
bE1hc2sgIT0gc3RlbmNpbE1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1bmMg
PSBzdGVuY2lsRnVuYzsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+
IDApID8gc3RlbmNpbFJlZiA6IDA7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5j
aWxNYXNrOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5j
LCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKK3sKKyAgICBp
ZiAobVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKKyAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8CisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQorICAgIHsKKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKKyAgICAgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7CisgICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCit7CisgICAgaWYg
KG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCisgICAgeworICAg
ICAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7CisgICAgICAg
IG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNl
dFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKK3sKKyAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNr
KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQor
fQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFp
bCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBh
c3MpCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAorICAg
ICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwg
fHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNzRGVw
dGhQYXNzKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVwdGhG
YWlsOworICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFzc0Rl
cHRoUGFzczsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFj
a0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3MpCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3Rl
bmNpbEJhY2tGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwg
IT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzczsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKKyAgICB7CisgICAg
ICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7CisgICAgICAgIG1Qb2x5Z29u
T2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzUG9s
eWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBvbHln
b25PZmZzZXRGaWxsOworCit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFt
cyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBpZiAobVN0YXRlLnBvbHln
b25PZmZzZXRGYWN0b3IgIT0gZmFjdG9yIHx8CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
VW5pdHMgIT0gdW5pdHMpCisgICAgeworICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rv
ciA9IGZhY3RvcjsKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOwor
ICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQoreworICAg
IGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCisgICAgeworICAg
ICAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKKyAgICAgICAgbVNh
bXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc1NhbXBs
ZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlOworfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdl
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVuYWJs
ZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOworICAg
ICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6
OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnNh
bXBsZUNvdmVyYWdlOworfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1z
KEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBpZiAobVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWUgIT0gdmFsdWUgfHwKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52
ZXJ0ICE9IGludmVydCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVl
ID0gdmFsdWU7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsK
KyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5zY2lz
c29yVGVzdCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0g
ZW5hYmxlZDsKKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K2Jvb2wgQ29udGV4dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtU3RhdGUuc2Npc3NvclRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLmRpdGhlciA9IGVuYWJsZWQ7CisgICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRM
aW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKK3sKKyAgICBtU3RhdGUubGluZVdpZHRoID0gd2lkdGg7
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KQor
eworICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OworfQorCit2b2lkIENvbnRl
eHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQoreworICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4OworICAgIG1TdGF0ZS52
aWV3cG9ydFkgPSB5OworICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lkdGg7CisgICAgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OworfQorCit2b2lkIENvbnRleHQ6OnNldFNjaXNz
b3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit7CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5zY2lzc29yWSAhPSB5
IHx8IAorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1TdGF0ZS5zY2lz
c29ySGVpZ2h0ICE9IGhlaWdodCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IHg7
CisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lk
dGggPSB3aWR0aDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhh
KQoreworICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gIT0gZ3JlZW4gfHwKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgIT0gYmx1
ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpCisgICAgeworICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrUmVkID0gcmVkOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSBn
cmVlbjsKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOworICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1
ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJvb2wgbWFzaykKK3sK
KyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQorICAgIHsKKyAgICAgICAgbVN0YXRl
LmRlcHRoTWFzayA9IG1hc2s7CisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAg
fQorfQorCit2b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2ZSkKK3sKKyAg
ICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKK30KKworR0x1aW50IENvbnRleHQ6Omdl
dEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmZyYW1lYnVm
ZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlcjsKK30KKworR0x1aW50IENvbnRleHQ6
OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5
QnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK2NvbnN0IEF0dHJpYnV0
ZVN0YXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtKQoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJp
Yk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBu
b3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKK3sKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyID0gYm91bmRCdWZmZXI7CisgICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7CisgICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKK30KKworY29uc3Qgdm9p
ZCAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVt
KSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0u
bVBvaW50ZXI7Cit9CisKKy8vIHJldHVybnMgZW50aXJlIHNldCBvZiBhdHRyaWJ1dGVzIGFzIGEg
YmxvY2sKK2NvbnN0IEF0dHJpYnV0ZVN0YXRlICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJCbG9j
aygpCit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAgbVN0YXRlLnBh
Y2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cit9CisKK0dMaW50IENvbnRleHQ6OmdldFBhY2tBbGln
bm1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsKK30KKwor
dm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQoreworICAg
IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cit9CisKK0dMaW50IENvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2tB
bGlnbm1lbnQ7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIGJ1ZmZlciBuYW1lCitHTHVpbnQg
Q29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsK
KworICAgIHdoaWxlIChtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtQnVmZmVyTWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbUJ1ZmZlck1hcFtoYW5k
bGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51
c2VkIHNoYWRlci9wcm9ncmFtIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xl
bnVtIHR5cGUpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAo
bVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQoKSB8fCBtUHJvZ3JhbU1h
cC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkpICAgLy8gU2hhcmVkIG5hbWUgc3Bh
Y2UKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIGlmICh0eXBlID09IEdM
X1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcg
VmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0g
R0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVdID0g
bmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2Vk
IHByb2dyYW0vc2hhZGVyIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKK3sK
KyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtUHJvZ3JhbU1hcC5m
aW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5maW5kKGhhbmRs
ZSkgIT0gbVNoYWRlck1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQorICAgIHsKKyAg
ICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQ
cm9ncmFtKCk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNl
ZCB0ZXh0dXJlIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICB1
bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtVGV4dHVyZU1hcC5maW5kKGhh
bmRsZSkgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAg
ICB9CisKKyAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5k
bGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKK0dMdWludCBD
b250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9
IDE7CisKKyAgICB3aGlsZSAobUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtRnJhbWVi
dWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBt
RnJhbWVidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQor
CisvLyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisK
KyAgICB3aGlsZSAobVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSkgIT0gbVJlbmRlcmJ1ZmZl
ck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1SZW5k
ZXJidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2
b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIEJ1ZmZlck1h
cDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7CisKKyAg
ICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBk
ZXRhY2hCdWZmZXIoYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgYnVmZmVyT2JqZWN0LT5zZWNv
bmQ7CisgICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAgU2hhZGVy
TWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hhZGVyKTsKKwor
ICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IGlmICghc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmlzQXR0YWNoZWQoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25kOworICAgICAgICAgICAgbVNoYWRl
ck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pCit7CisgICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVjdCA9
IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7CisKKyAgICBpZiAocHJvZ3JhbU9iamVjdCAhPSBt
UHJvZ3JhbU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlmIChwcm9ncmFtICE9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1PYmpl
Y3QtPnNlY29uZDsKKyAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1PYmplY3Qp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRl
eHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBtVGV4dHVyZU1hcC5maW5kKHRleHR1
cmUpOworCisgICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBkZXRhY2hUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0dXJl
ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2JqZWN0LT5zZWNv
bmQ7CisgICAgICAgIH0KKworICAgICAgICBtVGV4dHVyZU1hcC5lcmFzZSh0ZXh0dXJlT2JqZWN0
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9i
amVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKKworICAgIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdCAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBk
ZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgZGVsZXRlIGZyYW1lYnVm
ZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFzZShmcmFtZWJ1
ZmZlck9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3Ig
cmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKHJlbmRlcmJ1ZmZlcik7
CisKKyAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkp
CisgICAgeworICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKworICAg
ICAgICBkZWxldGUgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1SZW5kZXJi
dWZmZXJNYXAuZXJhc2UocmVuZGVyYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1
ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJN
YXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUuYXJyYXlCdWZm
ZXIgPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcih1
bnNpZ25lZCBpbnQgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVy
KGJ1ZmZlcikpCisgICAgeworICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBuZXcgQnVmZmVy
KCk7CisgICAgfQorCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKK30K
Kwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQoreworICAgIGlm
ICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCisgICAgeworICAgICAgICBt
VGV4dHVyZU1hcFt0ZXh0dXJlXSA9IG5ldyBUZXh0dXJlMkQodGhpcyk7CisgICAgfQorCisgICAg
bVN0YXRlLnRleHR1cmUyRCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVb
U0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdID0gdGV4dHVyZTsKK30KKwordm9pZCBD
b250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKCFn
ZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIG1UZXh0
dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAgIH0KKworICAg
IG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUuc2FtcGxlclRl
eHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworfQor
Cit2b2lkIENvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7Cisg
ICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCisgICAgeworICAgICAgICBtRnJh
bWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7CisgICAgfQorCisg
ICAgbVN0YXRlLmZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6
YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChyZW5kZXJi
dWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisgICAgeworICAg
ICAgICBtUmVuZGVyYnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSBuZXcgUmVuZGVyYnVmZmVyKCk7
CisgICAgfQorCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlcjsKK30KKwor
dm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgR0x1aW50IHByaW9y
UHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsKKyAgICBtU3RhdGUuY3VycmVudFByb2dy
YW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcg
dG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25seSBnZXRzIGZsYWdnZWQuCisKKyAgICBpZiAocHJv
Z3JhbU9iamVjdCAmJiBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpKQorICAg
IHsKKyAgICAgICAgZGVsZXRlUHJvZ3JhbShwcmlvclByb2dyYW0pOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKK3sKKyAg
ICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOworICAgIG1GcmFtZWJ1ZmZlck1hcFswXSA9IGJ1
ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3JidWZmZXIg
KmJ1ZmZlcikKK3sKKyAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKKyAgICBtQ29sb3JidWZm
ZXJaZXJvID0gYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoYnVmZmVyWmVybyhE
ZXB0aGJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJaZXJvOworICAg
IG1EZXB0aGJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bGJ1ZmZlclplcm8oU3RlbmNpbGJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtU3RlbmNp
bGJ1ZmZlclplcm87CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gYnVmZmVyOworfQorCit2b2lk
IENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlcihSZW5kZXJidWZmZXIgKmJ1ZmZlcikKK3sKKyAgICBk
ZWxldGUgbVJlbmRlcmJ1ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXTsKKyAgICBtUmVuZGVy
YnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdID0gYnVmZmVyOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIEJ1ZmZlck1hcDo6
aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoYnVm
ZmVyID09IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOworICAg
IH0KK30KKworU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIodW5zaWduZWQgaW50IGhhbmRsZSkK
K3sKKyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJNYXAuZmluZChoYW5k
bGUpOworCisgICAgaWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBz
aGFkZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0o
dW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFt
ID0gbVByb2dyYW1NYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHByb2dyYW0gPT0gbVByb2dy
YW1NYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW0tPnNlY29uZDsKKyAgICB9Cit9CisKK1Rl
eHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBp
ZiAoaGFuZGxlID09IDApIHJldHVybiBOVUxMOworCisgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3Ig
dGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmICh0ZXh0dXJlID09
IG1UZXh0dXJlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7CisgICAgfQor
fQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhh
bmRsZSkKK3sKKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJh
bWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFt
ZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKKyAgICB9
Cit9CisKK1JlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKHVuc2lnbmVkIGlu
dCBoYW5kbGUpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXIg
PSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChyZW5kZXJidWZmZXIg
PT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyYnVmZmVyLT5zZWNv
bmQ7CisgICAgfQorfQorCitDb2xvcmJ1ZmZlciAqQ29udGV4dDo6Z2V0Q29sb3JidWZmZXIoR0x1
aW50IGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlICE9IDApCisgICAgeworICAgICAgICBSZW5k
ZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworCisgICAg
ICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2xvcmJ1ZmZlcio+KHJl
bmRlcmJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAgIC8vIFNwZWNpYWwgY2Fz
ZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRhcmdldHMgYmFzZWQgb24g
dGhlIGF0dGFjaG1lbnQgdHlwZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclpl
cm87CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0RlcHRoYnVmZmVyICpDb250ZXh0
OjpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkK
KyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVm
ZmVyKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXIt
PmlzRGVwdGhidWZmZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PERlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5k
ZXIgdGFyZ2V0cyBiYXNlZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICBy
ZXR1cm4gbURlcHRoYnVmZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
U3RlbmNpbGJ1ZmZlciAqQ29udGV4dDo6Z2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQor
eworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQnVmZmVy
ICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEJ1ZmZlcihtU3Rh
dGUuYXJyYXlCdWZmZXIpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEJ1ZmZlcihtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVy
KTsKK30KKworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQoreworICAgIHJl
dHVybiBnZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Cit9CisKK1RleHR1cmUyRCAq
Q29udGV4dDo6Z2V0VGV4dHVyZTJEKCkKK3sKKyAgICBpZiAobVN0YXRlLnRleHR1cmUyRCA9PSAw
KSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVy
ZXMgYmFzZWQgb24gdGhlIHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlMkRa
ZXJvOworICAgIH0KKworICAgIHJldHVybiAoVGV4dHVyZTJEKilnZXRUZXh0dXJlKG1TdGF0ZS50
ZXh0dXJlMkQpOworfQorCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVN
YXAoKQoreworICAgIGlmIChtU3RhdGUudGV4dHVyZUN1YmVNYXAgPT0gMCkgICAvLyBTcGVjaWFs
IGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRo
ZSB0YXJnZXQKKyAgICB7CisgICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAg
IH0KKworICAgIHJldHVybiAoVGV4dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0YXRlLnRleHR1
cmVDdWJlTWFwKTsKK30KKworVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5z
aWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgR0x1aW50IHRleGlk
ID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdOworCisgICAgaWYgKHRleGlk
ID09IDApCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIGNhc2UgU0FNUExFUl8yRDogcmV0
dXJuIG1UZXh0dXJlMkRaZXJvOworICAgICAgICAgIGNhc2UgU0FNUExFUl9DVUJFOiByZXR1cm4g
bVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBnZXRU
ZXh0dXJlKHRleGlkKTsKK30KKworRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLmZyYW1lYnVmZmVyKTsKK30K
KworYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFy
YW1zKQoreworICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBHTF9TSEFERVJf
Q09NUElMRVI6ICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgKnBh
cmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFz
azsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6
CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7CisgICAgICAgIHBhcmFt
c1sxXSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRl
LmNvbG9yTWFza0JsdWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBo
YTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOworICAgICAg
Y2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
QWxwaGFUb0NvdmVyYWdlOworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NDSVNTT1Jf
VEVTVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxU
ZXN0OworICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhUZXN0OworICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQ7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29u
dGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIC8v
IFBsZWFzZSBub3RlOiBERVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBvdXIgaW50ZXJu
YWwgZ2V0RmxvYXR2IGltcGxlbWVudGF0aW9uCisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQg
YXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1l
cworICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0
IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkKKyAgICAvLyBjYXNlLCB0aGlzIHNob3Vs
ZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCisgICAgc3dp
dGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5saW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZVZhbHVlOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmFjdG9yOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VO
SVRTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcGFyYW1zWzBd
ID0gZ2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU47CisgICAgICAgIHBhcmFtc1sxXSA9
IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBn
bDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9ERVBUSF9SQU5HRToKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFyOworICAg
ICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JD
bGVhclZhbHVlLnJlZDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVl
OworICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CisgICAgICAgIHBhcmFtc1sw
XSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmJs
ZW5kQ29sb3IuZ3JlZW47CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJs
dWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0g
cG5hbWUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFS
X1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVt
ZW50YXRpb24KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRl
IHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCisgICAgLy8gR2V0SW50ZWdl
cnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252
ZXJzaW9uIGluIGFueQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5j
ZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIAorICAgIC8v
IENvbnRleHQ6OmdldEZsb2F0di4KKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZF
Q1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM7ICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM6ICpwYXJhbXMgPSBnbDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAg
KnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBnbDo6TUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUzsgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfUkVO
REVSQlVGRkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfUkVOREVSQlVGRkVS
X1NJWkU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTOiAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogLyogbm8gY29t
cHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5
IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlC
dWZmZXI7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyYW1lYnVmZmVyOyAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyOyAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5Q
QUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrQWxp
Z25tZW50OyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBN
QVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTAp
OyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tG
dW5jOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVG
OiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWls
OyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9GQUlMOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JM
RU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JH
QjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNr
V3JpdGVtYXNrOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9W
QUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX1NJWkU7ICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBn
bDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRVM6
ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAg
ICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoKGludClnbDo6TUFYX1JFTkRFUkJVRkZF
Ul9TSVpFLCAoaW50KWdsOjpNQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgIHBhcmFtc1sw
XSA9IG1heERpbWVuc2lvbjsKKyAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lvbjsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAg
ICAgIHBhcmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1T
dGF0ZS52aWV3cG9ydFk7CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRo
OworICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0
YXRlLnNjaXNzb3JYOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7CisgICAg
ICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7CisgICAgICAgIHBhcmFtc1szXSA9
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VM
TF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6CisgICAgICBjYXNlIEdMX0dSRUVOX0JJ
VFM6CisgICAgICBjYXNlIEdMX0JMVUVfQklUUzoKKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKmNvbG9yYnVmZmVy
ID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAg
KnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3Jl
ZW5TaXplKCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAq
cGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRBbHBo
YVNpemUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9E
RVBUSF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAq
ZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKworICAgICAgICAg
ICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfQklUUzoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZl
ciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisKKyAg
ICAgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnbDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwg
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgLSAxKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3Rh
dGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xl
bnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90
ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGluIHRoaXMg
aW1wbGVtZW50YXRpb24KKyAgICAvLyBpcyBGTE9BVCByYXRoZXIgdGhhbiBJTlQsIGFzIHdvdWxk
IGJlIHN1Z2dlc3RlZCBieSB0aGUgR0wgRVMgMi4wIHNwZWMuIFRoaXMgaXMgZHVlCisgICAgLy8g
dG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZsb2F0LCBhbmQg
c28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uCisgICAgLy8gaWYgcmV0dXJuZWQgZnJvbSBDb250
ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVhZHkgaW1wbGVt
ZW50ZWQgCisgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBvbmUgY2FsbHMgZ2xHZXRJbnRlZ2VydiB0
byByZXRyaWV2ZSBhIGZsb2F0LXR5cGVkIHN0YXRlIHZhcmlhYmxlLCB3ZQorICAgIC8vIHBsYWNl
IERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQgbWFrZSBubyBk
aWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nCisgICAgLy8gYXBwbGljYXRpb24uCisgICAgc3dpdGNo
IChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
OiAvKiBubyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovIAorICAg
ICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIHsKKyAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoKKyAgICAg
IGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9W
QVJZSU5HX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Cisg
ICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVS
X1NJWkU6CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICBj
YXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgIGNhc2UgR0xfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DVVJSRU5U
X1BST0dSQU06CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9V
TlBBQ0tfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoKKyAg
ICAgIGNhc2UgR0xfUkVEX0JJVFM6CisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6CisgICAgICBj
YXNlIEdMX0JMVUVfQklUUzoKKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKKyAgICAgIGNhc2Ug
R0xfREVQVEhfQklUUzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgorICAgICAgY2FzZSBH
TF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0Vf
TU9ERToKKyAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRToKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RF
WFRVUkU6CisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9WQUxVRV9NQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GQUlMOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6CisgICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19GVU5DOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICBjYXNlIEdMX0RF
UFRIX0ZVTkM6CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6CisgICAgICBjYXNlIEdMX0JM
RU5EX1NSQ19BTFBIQToKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoKKyAgICAgIGNhc2Ug
R0xfQkxFTkRfRFNUX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6Cisg
ICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOgorICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1dSSVRFTUFTSzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklU
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVM6CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfVFlQRToKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9CSU5ESU5HX0NVQkVfTUFQOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lO
VDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgeworICAgICAgICAg
ICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAgICBjYXNlIEdM
X1NDSVNTT1JfQk9YOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAg
ICAgICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RV9JTlZFUlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoKKyAgICAgIGNhc2UgR0xf
Q1VMTF9GQUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJl
IG5hdHVyYWwgdG8gSXNFbmFibGVkLAorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxM
OiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIEdldHtUeXBlfXYgcXVl
cmllcy4KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhp
cyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFsCisgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOgorICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6CisgICAg
ICBjYXNlIEdMX0JMRU5EOgorICAgICAgY2FzZSBHTF9ESVRIRVI6CisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GQUNUT1I6CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgICBjYXNlIEdMX0RFUFRI
X0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgorICAgICAgICB7CisgICAg
ICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURU
SF9SQU5HRToKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAg
Y2FzZSBHTF9ERVBUSF9SQU5HRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9G
TE9BVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgIGNhc2UgR0xfQkxF
TkRfQ09MT1I6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAg
ICAgICAgICAqbnVtUGFyYW1zID0gNDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVu
Y2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQKKy8vIHNjaXNzb3IgcmVjdGFuZ2xl
IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQorYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdl
dChib29sIGlnbm9yZVZpZXdwb3J0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0
RnJhbWVidWZmZXIoKTsKKworICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZm
ZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAg
IHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhTdGVuY2lsKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIGlmIChyZW5kZXJU
YXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCisgICAgeworICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXQpOworICAgICAgICBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
RGVwdGhidWZmZXJTZXJpYWwoKTsKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxp
ZWREZXB0aGJ1ZmZlclNlcmlhbCkKKyAgICB7CisgICAgICAgIGRldmljZS0+U2V0RGVwdGhTdGVu
Y2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOworICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2Vy
aWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgfQorCisgICAgRDNEVklFV1BPUlQ5IHZpZXdw
b3J0OworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVz
YygmZGVzYyk7CisKKyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICB2aWV3
cG9ydC5YID0gMDsKKyAgICAgICAgdmlld3BvcnQuWSA9IDA7CisgICAgICAgIHZpZXdwb3J0Lldp
ZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7
CisgICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOworICAgICAgICB2aWV3cG9ydC5NYXhaID0g
MS4wZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlld3BvcnQuWCA9IHN0ZDo6
bWF4KG1TdGF0ZS52aWV3cG9ydFgsIDApOworICAgICAgICB2aWV3cG9ydC5ZID0gc3RkOjptYXgo
bVN0YXRlLnZpZXdwb3J0WSwgMCk7CisgICAgICAgIHZpZXdwb3J0LldpZHRoID0gc3RkOjptaW4o
bVN0YXRlLnZpZXdwb3J0V2lkdGgsIChpbnQpZGVzYy5XaWR0aCAtIChpbnQpdmlld3BvcnQuWCk7
CisgICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IHN0ZDo6bWluKG1TdGF0ZS52aWV3cG9ydEhlaWdo
dCwgKGludClkZXNjLkhlaWdodCAtIChpbnQpdmlld3BvcnQuWSk7CisgICAgICAgIHZpZXdwb3J0
Lk1pblogPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSBj
bGFtcDAxKG1TdGF0ZS56RmFyKTsKKyAgICB9CisKKyAgICBpZiAodmlld3BvcnQuV2lkdGggPD0g
MCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBOb3RoaW5nIHRvIHJlbmRlcgorICAgIH0KKworICAgIGRldmljZS0+U2V0Vmlld3BvcnQo
JnZpZXdwb3J0KTsKKworICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkpCisgICAgeworICAgICAg
ICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHJl
Y3QgPSB7bVN0YXRlLnNjaXNzb3JYLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5z
Y2lzc29yWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3NvclggKyBtU3Rh
dGUuc2Npc3NvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29y
WSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0fTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRTY2lz
c29yUmVjdCgmcmVjdCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NDSVNTT1JURVNURU5BQkxFLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRF
U1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbVNjaXNzb3JT
dGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSkKKyAgICB7CisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOworCisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5n
ZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEu
MGYgLyB2aWV3cG9ydC5XaWR0aCwgMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07CisgICAgICAgIHBy
b2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgKEdMZmxvYXQqKSZ4
eSk7CisKKyAgICAgICAgR0xpbnQgd2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhXaW5kb3dM
b2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lk
dGggLyAyLjBmLCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0
aCAvIDIuMGYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdw
b3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OworICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5zZXRVbmlmb3JtNGZ2KHdpbmRvdywgMSwgKEdMZmxvYXQqKSZ3aHh5KTsKKworICAgICAg
ICBHTGludCBkZXB0aCA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhMb2NhdGlvbigpOworICAg
ICAgICBHTGZsb2F0IGR6WzJdID0geyhtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcikgLyAyLjBm
LCAobVN0YXRlLnpOZWFyICsgbVN0YXRlLnpGYXIpIC8gMi4wZn07CisgICAgICAgIHByb2dyYW1P
YmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIChHTGZsb2F0KikmZHopOworCisgICAgICAg
IEdMaW50IG5lYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCk7
CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYobmVhciwgMSwgJm1TdGF0ZS56
TmVhcik7CisKKyAgICAgICAgR0xpbnQgZmFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVwdGhSYW5n
ZUZhckxvY2F0aW9uKCk7CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYoZmFy
LCAxLCAmbVN0YXRlLnpGYXIpOworCisgICAgICAgIEdMaW50IGRpZmYgPSBwcm9ncmFtT2JqZWN0
LT5nZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgekRpZmYgPSBt
U3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcjsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5p
Zm9ybTFmdihkaWZmLCAxLCAmekRpZmYpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlvbiBzdGF0ZSAoY3VsbGluZywgZGVwdGggdGVz
dCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcsIGV0YykgdG8gdGhlIERpcmVjdDNEIDkgZGV2
aWNlCit2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQoreworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIFByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgR0xpbnQgZnJvbnRDQ1cgPSBw
cm9ncmFtT2JqZWN0LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKKyAgICBHTGludCBjY3cgPSAo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOworICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZv
cm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOworCisgICAgR0xpbnQgcG9pbnRzT3JMaW5lcyA9IHBy
b2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7CisgICAgR0xpbnQgYWx3
YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOworICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKKworICAgIGlm
IChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYg
KG1TdGF0ZS5jdWxsRmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUuY3Vs
bE1vZGUsIG1TdGF0ZS5mcm9udEZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUs
IEQzRENVTExfTk9ORSk7CisgICAgICAgIH0KKworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAg
IGlmIChtU3RhdGUuZGVwdGhUZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOworICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29u
KG1TdGF0ZS5kZXB0aEZ1bmMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJf
RkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1T
dGF0ZS5ibGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAgaWYgKG1TdGF0
ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuc291cmNlQmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAgICAgICAg
bVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuZGVzdEJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBl
czJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5ibGVuZENvbG9yKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4Piht
U3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
YmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRD
b2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5h
bHBoYSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJj
ZUJsZW5kUkdCKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RF
U1RCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZFJHQikpOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6
Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKKworICAgICAgICAgICAg
aWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCAK
KyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRB
bHBoYSB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBtU3Rh
dGUuYmxlbmRFcXVhdGlvbkFscGhhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVF
KTsKKworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxF
TkRBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEp
KTsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVO
REFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsK
KyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBI
QSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsKKwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9udEZh
Y2VEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgJiYgaGFzU3Rl
bmNpbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNU
QVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAg
ICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNE
UlNfU1RFTkNJTE1BU0s7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNE
UlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dy
aXRlbWFzayB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUu
c3RlbmNpbEJhY2tSZWYgfHwgCisgICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9
IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZh
bHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUg
c3RlbmNpbCByZWYKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBn
ZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OlN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgR0x1
aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAt
IDE7CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFj
ZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxX
UklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
RlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsK
KworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0
ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBt
YXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lM
TUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDog
RDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8g
RDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNf
Q0NXX1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7CisKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
VyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywg
bVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDog
RDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKKwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdM
X0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0
ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVm
IDogbWF4U3RlbmNpbCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVO
Q0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7CisKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkp
OworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9w
KG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQ
QVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0Rl
cHRoUGFzcykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENvbG9yTWFzayht
U3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsK
KyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0
ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOworCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCisgICAg
eworICAgICAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6RGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKS0+
Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BF
U0NBTEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsK
KyAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9m
ZnNldFVuaXRzLCAtKGludCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7CisgICAgICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JE
KikmZGVwdGhCaWFzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BF
U0NBTEVERVBUSEJJQVMsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19ERVBUSEJJQVMsIDApOworICAgICAgICB9CisKKyAgICAgICAgbVBvbHlnb25PZmZzZXRT
dGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1Db25maWctPm1NdWx0aVNhbXBs
ZSAhPSAwICYmIG1TYW1wbGVTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJWE1FKCJTYW1w
bGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEZJWE1FKCJTYW1wbGUgY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1E
aXRoZXJTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOworCisgICAg
ICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgbUZyb250RmFjZURp
cnR5ID0gZmFsc2U7Cit9CisKKy8vIEZpbGwgaW4gdGhlIHNlbWFudGljSW5kZXggZmllbGQgb2Yg
dGhlIGFycmF5IG9mIFRyYW5zbGF0ZWRBdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBhY3RpdmUgR0xT
TCBwcm9ncmFtLgordm9pZCBDb250ZXh0Ojpsb29rdXBBdHRyaWJ1dGVNYXBwaW5nKFRyYW5zbGF0
ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVu
YWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRl
eCA9IGdldEN1cnJlbnRQcm9ncmFtKCktPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5nLCBUcmFuc2xh
dGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFu
c2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERh
dGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShmaXJzdCwgY291bnQsIHRyYW5zbGF0ZWQpOwor
ICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKworICAgIGxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcodHJhbnNsYXRlZCk7CisKKyAgICBt
QnVmZmVyQmFja0VuZC0+c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xhdGVkKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAg
ICAgICBpZiAodHJhbnNsYXRlZFtpXS5lbmFibGVkICYmIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5k
ZXJWYWxpZGF0ZVVuaW5kZXhlZChtb2RlLCBjb3VudCwgaW5kZXhJbmZvKTsKKyAgICAgICAgICAg
IGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUJ1ZmZlckJhY2tFbmQt
PnNldHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisKKyAgICAgICAgICAgICp1c2VJbmRl
eGluZyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAqdXNlSW5kZXhpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gR0xfTk9fRVJS
T1I7Cit9CisKK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xh
dGVkSW5kZXhEYXRhICZpbmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFu
c2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERh
dGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5m
by5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgdHJhbnNsYXRlZCk7CisKKyAgICBpZiAo
ZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgbG9va3VwQXR0cmlidXRlTWFwcGlu
Zyh0cmFuc2xhdGVkKTsKKworICAgICAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBBdHRyaWJ1dGVz
UHJlRHJhdyh0cmFuc2xhdGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQorCisvLyBB
cHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJl
Y3QzRCA5IGRldmljZQorR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFu
c2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERh
dGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwgZ2V0QnVmZmVy
KG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAg
aWYgKGVyciA9PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIG1CdWZmZXJCYWNrRW5kLT5z
ZXR1cEluZGljZXNQcmVEcmF3KCppbmRleEluZm8pOworICAgIH0KKworICAgIHJldHVybiBlcnI7
Cit9CisKKy8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Cisg
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdl
dFBpeGVsU2hhZGVyKCk7CisKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOworICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworCisgICAgaWYg
KHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbSkKKyAgICB7Cisg
ICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+ZGlydHlBbGxTYW1wbGVycygpOworICAgICAgICBtQXBwbGllZFByb2dyYW0gPSBw
cm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICBwcm9ncmFtT2JqZWN0LT5h
cHBseVVuaWZvcm1zKCk7Cit9CisKKy8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVy
IHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0
dXJlcygpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Cisg
ICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBm
b3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBz
YW1wbGVyKyspCisgICAgeworICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0
LT5nZXRTYW1wbGVyTWFwcGluZyhzYW1wbGVyKTsKKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9
IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyVHlwZSB0ZXh0dXJlVHlwZSA9IHBy
b2dyYW1PYmplY3QtPmdldFNhbXBsZXJUeXBlKHNhbXBsZXIpOworCisgICAgICAgICAgICBUZXh0
dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBl
KTsKKworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNhbXBs
ZXIpIHx8IHRleHR1cmUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNDb21wbGV0ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwor
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gbWFnRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWFnRmls
dGVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2Ft
cGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykp
OworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBE
M0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FN
UF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1hZ0ZpbHRlcikpOworICAgICAg
ICAgICAgICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZp
bHRlcjsKKyAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmls
dGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1p
bkZpbHRlcik7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNh
bXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworCisgICAgICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCB0ZXh0dXJlLT5nZXRUZXh0dXJlKCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlciwgZ2V0
SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
U2FtcGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5pc1NhbXBsZXJEaXJ0eShz
YW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1
cmUoc2FtcGxlciwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0U2Ft
cGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgIAor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
dm9pZCogcGl4ZWxzKQoreworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1l
YnVmZmVyKCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVm
ZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdl
dC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFj
ZTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJm
YWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1N
RU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RN
VUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2Ft
cGxlZCByZW5kZXIgdGFyZ2V0CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5k
ZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3VyZmFjZSk7CisKKyAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisK
KyAgICAgICAgc3dpdGNoIChyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRDNE
RVJSX0RSSVZFUklOVEVSTkFMRVJST1I6CisgICAgICAgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VM
T1NUOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7CisgICAgUkVDVCByZWN0
ID0ge3N0ZDo6bWF4KHgsIDApLAorICAgICAgICAgICAgICAgICBzdGQ6Om1heCh5LCAwKSwKKyAg
ICAgICAgICAgICAgICAgc3RkOjptaW4oeCArIHdpZHRoLCAoaW50KWRlc2MuV2lkdGgpLAorICAg
ICAgICAgICAgICAgICBzdGQ6Om1pbih5ICsgaGVpZ2h0LCAoaW50KWRlc2MuSGVpZ2h0KX07CisK
KyAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExP
Q0tfUkVBRE9OTFkpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAg
ICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgIH0KKwor
ICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOwor
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOworICAgIHVu
c2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKKworICAgIEdM
c2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0
YXRlLnBhY2tBbGlnbm1lbnQpOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRv
bSAtIHJlY3QudG9wOyBqKyspCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQg
cjsKKyAgICAgICAgICAgIGZsb2F0IGc7CisgICAgICAgICAgICBmbG9hdCBiOworICAgICAgICAg
ICAgZmxvYXQgYTsKKworICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBz
aG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAg
ICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikg
KiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0Uw
KSAqICgxLjBmIC8gMHgwN0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4
MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4cmdiID0gKih1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAg
ICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAw
eDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2Ig
JiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAgICByID0gKHhy
Z2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdi
ID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOwor
CisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsK
KyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFG
KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBmIC8gMHgw
M0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8g
MHg3QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJj
ZSArIDQgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAo
YXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOworICAg
ICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAw
RkYwMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGlu
dCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAg
ICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZG
KSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAm
IDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfQTJSMTBHMTBCMTA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
bG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAw
MCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2Ig
JiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7CisgICAgICAgICAgICAgICAgICAg
IGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUK
KyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiByICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41
Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6ICAg
Ly8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFCisgICAgICAgICAgICAgICAgICAgIGRl
c3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8
IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyAr
IDAuNWYpIDw8IDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDMxICogciArIDAuNWYpIDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN5c3RlbVN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKKworICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKK30KKwor
dm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCit7CisgICAgRnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmICghZnJhbWVi
dWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworCisgICAgaWYgKG1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfQ09M
T1JfQlVGRkVSX0JJVDsKKworICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9y
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdzIHw9
IEQzRENMRUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXNrICYgR0xf
REVQVEhfQlVGRkVSX0JJVCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZF
Ul9CSVQ7CisgICAgICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICYmIGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAg
ICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgfQorCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aFN0ZW5jaWwoKTsKKworICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7CisKKyAgICBp
ZiAoKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGRlcHRoU3RlbmNpbCkKKyAgICB7
CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWwtPkdl
dERlc2MoJmRlc2MpOworCisgICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsK
KyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZXMyZHg6OkdldFN0ZW5jaWxTaXpl
KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2ls
U2l6ZSkgLSAxOworCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQorICAgICAg
ICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1hc2sgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRy
dWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5v
dCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RD
T0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5hbHBoYSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVl
LmdyZWVuKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
b3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGZsb2F0IGRlcHRoID0g
Y2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsKKyAgICBpbnQgc3RlbmNpbCA9IG1TdGF0
ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwor
CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZk
ZXNjKTsKKworICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChlczJkeDo6R2V0QWxwaGFTaXplKGRl
c2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGE7CisKKyAgICBjb25zdCBi
b29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUuc3RlbmNp
bFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworICAgIGNv
bnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0YXRlLmNvbG9y
TWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2Vk
KTsKKworICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENs
ZWFyKQorICAgIHsKKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0
aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxsIGlzIHNhdmVkLgorICAgICAgICAv
LyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRocyB3aWxsIGJlIGZsYWdn
ZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAorICAgICAgICAvLyAgdGhhdCBwYXRoIGlzIHRha2Vu
LgorICAgICAgICBIUkVTVUxUIGhyOworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0
ZUJsb2NrKCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdB
WVMpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBG
QUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5B
QkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOworCisgICAgICAgICAgICBociA9
IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCht
TWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOworCisgICAgICAgIGlmIChtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOworICAgICAgICB9CisKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKwor
ICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgKG1TdGF0
ZS5jb2xvck1hc2tSZWQgICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAwKSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
U3RhdGUuY29sb3JNYXNrR3JlZW4gPyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobVN0YXRlLmNvbG9yTWFza0JsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDAp
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEg
OiAwKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNE
Q0xFQVJfU1RFTkNJTCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdB
WVMpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVG
LCBzdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExB
Q0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZB
SUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5D
SUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxT
aGFkZXIoTlVMTCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAg
ICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAg
ICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisKKyAgICAgICAgc3RydWN0
IFZlcnRleAorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCB4LCB5LCB6LCB3OworICAgICAg
ICAgICAgRDNEQ09MT1IgZGlmZnVzZTsKKyAgICAgICAgfTsKKworICAgICAgICBWZXJ0ZXggcXVh
ZFs0XTsKKyAgICAgICAgcXVhZFswXS54ID0gMC4wZjsKKyAgICAgICAgcXVhZFswXS55ID0gKGZs
b2F0KWRlc2MuSGVpZ2h0OworICAgICAgICBxdWFkWzBdLnogPSAwLjBmOworICAgICAgICBxdWFk
WzBdLncgPSAxLjBmOworICAgICAgICBxdWFkWzBdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAg
ICBxdWFkWzFdLnggPSAoZmxvYXQpZGVzYy5XaWR0aDsKKyAgICAgICAgcXVhZFsxXS55ID0gKGZs
b2F0KWRlc2MuSGVpZ2h0OworICAgICAgICBxdWFkWzFdLnogPSAwLjBmOworICAgICAgICBxdWFk
WzFdLncgPSAxLjBmOworICAgICAgICBxdWFkWzFdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAg
ICBxdWFkWzJdLnggPSAwLjBmOworICAgICAgICBxdWFkWzJdLnkgPSAwLjBmOworICAgICAgICBx
dWFkWzJdLnogPSAwLjBmOworICAgICAgICBxdWFkWzJdLncgPSAxLjBmOworICAgICAgICBxdWFk
WzJdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAgICBxdWFkWzNdLnggPSAoZmxvYXQpZGVzYy5X
aWR0aDsKKyAgICAgICAgcXVhZFszXS55ID0gMC4wZjsKKyAgICAgICAgcXVhZFszXS56ID0gMC4w
ZjsKKyAgICAgICAgcXVhZFszXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFszXS5kaWZmdXNlID0g
Y29sb3I7CisKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZpY2Ut
PkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoVmVy
dGV4KSk7CisKKyAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikKKyAgICAgICAg
eworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVF
KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxF
LCBUUlVFKTsKKyAgICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJV
RkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
TWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZSBpZiAoZmxhZ3MpCisgICAgeworICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdz
LCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKK3sKKyAgICBp
ZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgcHJpbWl0
aXZlQ291bnQ7CisKKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNv
dW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRl
KG1vZGUpOworCisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87CisgICAgYm9vbCB1
c2VJbmRleGluZzsKKyAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIobW9kZSwgZmly
c3QsIGNvdW50LCAmdXNlSW5kZXhpbmcsICZpbmRleEluZm8pOworICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAg
ICBhcHBseVNoYWRlcnMoKTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisKKyAgICBpZiAoIWdldEN1
cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKCFjdWxsU2tp
cHNEcmF3KG1vZGUpKQorICAgIHsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAg
ICAgICBpZiAodXNlSW5kZXhpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+RHJh
d0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4
LCBpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5k
ZXgrMSwgaW5kZXhJbmZvLm9mZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmltaXRpdmVDb3Vu
dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZp
Y2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIGluZGljZXMpCit7Cisg
ICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghaW5kaWNlcyAmJiAh
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgcHJpbWl0
aXZlQ291bnQ7CisKKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNv
dW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRl
KG1vZGUpOworCisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87CisgICAgR0xlbnVt
IGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRl
eEluZm8pOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihpbmRl
eEluZm8pOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBhcHBseVNoYWRlcnMoKTsKKyAgICBhcHBseVRl
eHR1cmVzKCk7CisKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxl
cnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgfQorCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQorICAgIHsKKyAgICAgICAg
ZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0
aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1p
bkluZGV4LCBpbmRleEluZm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbkluZGV4KzEsIGluZGV4SW5m
by5vZmZzZXQvaW5kZXhJbmZvLmluZGV4U2l6ZSwgcHJpbWl0aXZlQ291bnQpOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpmaW5pc2goKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2Uo
KTsKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm9jY2x1c2lvblF1ZXJ5ID0gTlVMTDsKKworICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9O
LCAmb2NjbHVzaW9uUXVlcnkpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgaWYgKG9jY2x1c2lvblF1ZXJ5KQorICAgIHsKKyAgICAgICAgSURp
cmVjdDNEU3RhdGVCbG9jazkgKnNhdmVkU3RhdGUgPSBOVUxMOworICAgICAgICBkZXZpY2UtPkNy
ZWF0ZVN0YXRlQmxvY2soRDNEU0JUX0FMTCwgJnNhdmVkU3RhdGUpOworCisgICAgICAgIG9jY2x1
c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7CisKKyAgICAgICAgLy8gUmVuZGVyIHNv
bWV0aGluZyBvdXRzaWRlIHRoZSByZW5kZXIgdGFyZ2V0CisgICAgICAgIGRldmljZS0+U2V0U3Ry
ZWFtU291cmNlRnJlcSgwLCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxM
KTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgIGRldmlj
ZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOworICAgICAgICBmbG9hdCBkYXRhWzRdID0gey0xLjBm
LCAtMS4wZiwgLTEuMGYsIDEuMGZ9OworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Cisg
ICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1BPSU5UTElTVCwgMSwgZGF0YSwg
c2l6ZW9mKGRhdGEpKTsKKworICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNESVNTVUVf
RU5EKTsKKworICAgICAgICB3aGlsZSAob2NjbHVzaW9uUXVlcnktPkdldERhdGEoTlVMTCwgMCwg
RDNER0VUREFUQV9GTFVTSCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
S2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNl
ZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIG9j
Y2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKHNhdmVkU3RhdGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgICAgICBzYXZl
ZFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
Zmx1c2goKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
ICAgIElEaXJlY3QzRFF1ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7CisKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmZXZlbnRRdWVy
eSk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICBpZiAoZXZlbnRRdWVyeSkKKyAgICB7CisgICAgICAgIGV2ZW50UXVlcnktPklzc3VlKEQzRElT
U1VFX0VORCk7CisKKyAgICAgICAgd2hpbGUgKGV2ZW50UXVlcnktPkdldERhdGEoTlVMTCwgMCwg
RDNER0VUREFUQV9GTFVTSCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
S2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNl
ZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGV2
ZW50UXVlcnktPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52
YWxpZEVudW0oKQoreworICAgIG1JbnZhbGlkRW51bSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4
dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkKK3sKKyAgICBtSW52YWxpZFZhbHVlID0gdHJ1ZTsKK30K
Kwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCkKK3sKKyAgICBtSW52YWxp
ZE9wZXJhdGlvbiA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnko
KQoreworICAgIG1PdXRPZk1lbW9yeSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3Jk
SW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCkKK3sKKyAgICBtSW52YWxpZEZyYW1lYnVmZmVy
T3BlcmF0aW9uID0gdHJ1ZTsKK30KKworLy8gR2V0IG9uZSBvZiB0aGUgcmVjb3JkZWQgZXJyb3Jz
IGFuZCBjbGVhciBpdHMgZmxhZywgaWYgYW55LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMi41IHBhZ2UgMTMuCitHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQoreworICAgIGlmICht
SW52YWxpZEVudW0pCisgICAgeworICAgICAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9FTlVNOworICAgIH0KKworICAgIGlmIChtSW52YWxpZFZh
bHVlKQorICAgIHsKKyAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX1ZBTFVFOworICAgIH0KKworICAgIGlmIChtSW52YWxpZE9wZXJhdGlv
bikKKyAgICB7CisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAgIGlmIChtT3V0T2ZNZW1v
cnkpCisgICAgeworICAgICAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKKworICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24g
PSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T047CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitjb25zdCBjaGFyICpD
b250ZXh0OjpnZXRQaXhlbFNoYWRlclByb2ZpbGUoKQoreworICAgIHJldHVybiBtUHNQcm9maWxl
OworfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCkKK3sK
KyAgICByZXR1cm4gbVZzUHJvZmlsZTsKK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIo
R0x1aW50IGJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkg
cGFnZSAyMjoKKyAgICAvLyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBp
cyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRl
eHQKKyAgICAvLyAoaS5lLiBpbiB0aGUgdGhyZWFkIHRoYXQgY2FsbGVkIERlbGV0ZS1CdWZmZXJz
KSBhcmUgcmVzZXQgdG8gemVyby4KKworICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIgPT0gYnVm
ZmVyKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAg
ICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgeworICAgICAg
ICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBmb3IgKGludCBh
dHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsr
KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5t
Qm91bmRCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyID0gMDsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQorewor
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdlIDg0OgorICAgIC8vIElm
IGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCwgaXQgaXMgYXMgaWYgYWxsIHRleHR1cmUgdW5p
dHMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoYXQgdGV4dHVyZSBvYmplY3QgYXJlCisgICAgLy8gcmVi
b3VuZCB0byB0ZXh0dXJlIG9iamVjdCB6ZXJvCisKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlw
ZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQg
c2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisr
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdID09IHRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVN0
YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBw
YWdlIDExMjoKKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRz
IGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHRo
ZW4gaXQgaXMKKyAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQgYmVlbiBjYWxs
ZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hp
Y2ggdGhpcworICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyLgorCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVi
dWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGZyYW1lYnVm
ZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0Ojpk
ZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgLy8gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3OgorICAgIC8vIElmIGEgZnJhbWVidWZmZXIg
dGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFNRUJVRkZFUiBpcyBkZWxl
dGVkLCBpdCBpcyBhcyB0aG91Z2gKKyAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJlZW4gZXhl
Y3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZlciBvZiB6
ZXJvLgorCisgICAgaWYgKG1TdGF0ZS5mcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAgICB7
CisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5OgorICAgIC8vIElmIGEgcmVuZGVyYnVm
ZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxldGVkLCBp
dCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcgorICAgIC8vIGhhZCBiZWVuIGV4ZWN1dGVk
IHdpdGggdGhlIHRhcmdldCBSRU5ERVJCVUZGRVIgYW5kIG5hbWUgb2YgemVyby4KKworICAgIGlm
IChtU3RhdGUucmVuZGVyYnVmZmVyID09IHJlbmRlcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJp
bmRSZW5kZXJidWZmZXIoMCk7CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gNC40IHBhZ2UgMTExOgorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBk
ZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyLAorICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNo
IGF0dGFjaG1lbnQKKyAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdhcyBhdHRhY2hl
ZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgorCisgICAgRnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlcikK
KyAgICB7CisgICAgICAgIGZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKTsKKyAgICB9Cit9CisKK1RleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJl
KFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVy
ZXNbdHlwZV07CisKKyAgICBpZiAodCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisKKyAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gU0FNUExF
Ul8yRAorCisgICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRCh0aGlzKTsK
KyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIEdMX1JHQkEsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICB0
ID0gaW5jb21wbGV0ZTJkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIFNBTVBMRVJfQ1VCRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
VGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMp
OworCisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgR0xfUkdC
QSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlUG9zWSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFn
ZU5lZ1koMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIEdMX1JH
QkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCBHTF9SR0JBLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgdCA9IGlu
Y29tcGxldGVDdWJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gdDsKKyAgICB9CisKKyAg
ICByZXR1cm4gdDsKK30KKworYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3
TW9kZSkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9
PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Cit9CisKK2Jv
b2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQoreworICAgIHN3aXRj
aCAoZHJhd01vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICBjYXNl
IEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICBjYXNlIEdMX0xJTkVT
OgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENvbnRleHQ6Omhhc1N0ZW5jaWwoKQor
eworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldEZyYW1lYnVmZmVyKCk7
CisKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBTdGVuY2lsYnVm
ZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKKworICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlck9iamVjdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxTaXplKCkg
PiAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENv
bnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
cykKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAg
IG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNb
MF07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9
IHZhbHVlc1sxXTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZh
bHVlWzJdID0gdmFsdWVzWzJdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1D
dXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRp
cnR5Q3VycmVudFZhbHVlcygpOworfQorCit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJp
bmcoKQoreworICAgIGlmIChtQnVmZmVyQmFja0VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKKyAg
ICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3Vp
bnQgIjsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNp
b25TdHJpbmcuZmluZF9sYXN0X25vdF9vZignICcpOworICAgIGlmIChlbmQgIT0gc3RkOjpzdHJp
bmc6Om5wb3MpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7
CisgICAgfQorfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Cit9CisKK30KKwor
ZXh0ZXJuICJDIgoreworZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlnKQoreworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnKTsKK30K
Kwordm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGRl
bGV0ZSBjb250ZXh0OworCisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkKKyAg
ICB7CisgICAgICAgIGdsOjptYWtlQ3VycmVudChOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICB9Cit9
CisKK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgZ2w6Om1ha2VDdXJyZW50
KGNvbnRleHQsIGRpc3BsYXksIHN1cmZhY2UpOworfQorCitnbDo6Q29udGV4dCAqZ2xHZXRDdXJy
ZW50Q29udGV4dCgpCit7CisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7Cit9Cit9CkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4NyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gQ29udGV4dC5oOiBEZWZpbmVzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdp
bmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4g
SXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCisK
KyNpZm5kZWYgSU5DTFVERV9DT05URVhUX0hfCisjZGVmaW5lIElOQ0xVREVfQ09OVEVYVF9IXwor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNkZWZpbmUgRUdM
QVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUg
PG1hcD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBlZ2wK
K3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBTdXJmYWNlOworY2xhc3MgQ29uZmlnOworfQorCitu
YW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworc3RydWN0IFRyYW5z
bGF0ZWRJbmRleERhdGE7CisKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNoYWRlcjsKK2NsYXNzIFBy
b2dyYW07CitjbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1
YmVNYXA7CitjbGFzcyBGcmFtZWJ1ZmZlcjsKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIENv
bG9yYnVmZmVyOworY2xhc3MgRGVwdGhidWZmZXI7CitjbGFzcyBTdGVuY2lsYnVmZmVyOworY2xh
c3MgVmVydGV4RGF0YU1hbmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgQnVm
ZmVyQmFja0VuZDsKK2NsYXNzIEJsaXQ7CisKK2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX0FUVFJJ
QlMgPSAxMiwKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDEyOCwKKyAgICBNQVhf
VkFSWUlOR19WRUNUT1JTID0gOCwKKyAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UyA9IDE2LAorICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDAsCisgICAgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKKyAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTID0gMTYsCisgICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gNDA5NiwgICAvLyBGSVhNRTog
VmVyaWZ5CisgICAgTUFYX0RSQVdfQlVGRkVSUyA9IDEsCisKKyAgICBJTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX0ZPUk1BVCA9IEdMX1JHQiwKKyAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNQorfTsKKworY29uc3QgZmxvYXQgQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NSU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01B
WCA9IDEuMGY7CisKK2VudW0gU2FtcGxlclR5cGUKK3sKKyAgICBTQU1QTEVSXzJELAorICAgIFNB
TVBMRVJfQ1VCRSwKKworICAgIFNBTVBMRVJfVFlQRV9DT1VOVAorfTsKKworc3RydWN0IENvbG9y
Cit7CisgICAgZmxvYXQgcmVkOworICAgIGZsb2F0IGdyZWVuOworICAgIGZsb2F0IGJsdWU7Cisg
ICAgZmxvYXQgYWxwaGE7Cit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBz
aW5nbGUgdmVydGV4IGF0dHJpYnV0ZQorY2xhc3MgQXR0cmlidXRlU3RhdGUKK3sKKyAgcHVibGlj
OgorICAgIEF0dHJpYnV0ZVN0YXRlKCkKKyAgICAgICAgOiBtVHlwZShHTF9GTE9BVCksIG1TaXpl
KDApLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtQm91
bmRCdWZmZXIoMCksIG1FbmFibGVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRWYWx1
ZVswXSA9IDA7CisgICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwOworICAgICAgICBtQ3VycmVu
dFZhbHVlWzJdID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDE7CisgICAgfQorCisg
ICAgLy8gRnJvbSBWZXJ0ZXhBcnJheVBvaW50ZXIKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xp
bnQgbVNpemU7CisgICAgYm9vbCBtTm9ybWFsaXplZDsKKyAgICBHTHNpemVpIG1TdHJpZGU7IC8v
IDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKKyAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKworICAg
IEdMdWludCBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQb2ludGVy
IGlzIGNhbGxlZC4KKworICAgIGJvb2wgbUVuYWJsZWQ7IC8vIEZyb20gRW5hYmxlL0Rpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheQorCisgICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgLy8gRnJvbSBW
ZXJ0ZXhBdHRyaWI0ZgorfTsKKworLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9yZSBhbGwgcmF3
IHN0YXRlCitzdHJ1Y3QgU3RhdGUKK3sKKyAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAg
R0xjbGFtcGYgZGVwdGhDbGVhclZhbHVlOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKKwor
ICAgIGJvb2wgY3VsbEZhY2U7CisgICAgR0xlbnVtIGN1bGxNb2RlOworICAgIEdMZW51bSBmcm9u
dEZhY2U7CisgICAgYm9vbCBkZXB0aFRlc3Q7CisgICAgR0xlbnVtIGRlcHRoRnVuYzsKKyAgICBi
b29sIGJsZW5kOworICAgIEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKKyAgICBHTGVudW0gZGVzdEJs
ZW5kUkdCOworICAgIEdMZW51bSBzb3VyY2VCbGVuZEFscGhhOworICAgIEdMZW51bSBkZXN0Qmxl
bmRBbHBoYTsKKyAgICBHTGVudW0gYmxlbmRFcXVhdGlvblJHQjsKKyAgICBHTGVudW0gYmxlbmRF
cXVhdGlvbkFscGhhOworICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgYm9vbCBzdGVuY2lsVGVz
dDsKKyAgICBHTGVudW0gc3RlbmNpbEZ1bmM7CisgICAgR0xpbnQgc3RlbmNpbFJlZjsKKyAgICBH
THVpbnQgc3RlbmNpbE1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxGYWlsOworICAgIEdMZW51bSBz
dGVuY2lsUGFzc0RlcHRoRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7Cisg
ICAgR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYzsK
KyAgICBHTGludCBzdGVuY2lsQmFja1JlZjsKKyAgICBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrOwor
ICAgIEdMZW51bSBzdGVuY2lsQmFja0ZhaWw7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0Rl
cHRoRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOworICAgIEdMdWlu
dCBzdGVuY2lsQmFja1dyaXRlbWFzazsKKyAgICBib29sIHBvbHlnb25PZmZzZXRGaWxsOworICAg
IEdMZmxvYXQgcG9seWdvbk9mZnNldEZhY3RvcjsKKyAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRV
bml0czsKKyAgICBib29sIHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKKyAgICBib29sIHNhbXBsZUNv
dmVyYWdlOworICAgIEdMY2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7CisgICAgYm9vbCBzYW1w
bGVDb3ZlcmFnZUludmVydDsKKyAgICBib29sIHNjaXNzb3JUZXN0OworICAgIGJvb2wgZGl0aGVy
OworCisgICAgR0xmbG9hdCBsaW5lV2lkdGg7CisKKyAgICBHTGVudW0gZ2VuZXJhdGVNaXBtYXBI
aW50OworCisgICAgR0xpbnQgdmlld3BvcnRYOworICAgIEdMaW50IHZpZXdwb3J0WTsKKyAgICBH
THNpemVpIHZpZXdwb3J0V2lkdGg7CisgICAgR0xzaXplaSB2aWV3cG9ydEhlaWdodDsKKyAgICBm
bG9hdCB6TmVhcjsKKyAgICBmbG9hdCB6RmFyOworCisgICAgR0xpbnQgc2Npc3Nvclg7CisgICAg
R0xpbnQgc2Npc3Nvclk7CisgICAgR0xzaXplaSBzY2lzc29yV2lkdGg7CisgICAgR0xzaXplaSBz
Y2lzc29ySGVpZ2h0OworCisgICAgYm9vbCBjb2xvck1hc2tSZWQ7CisgICAgYm9vbCBjb2xvck1h
c2tHcmVlbjsKKyAgICBib29sIGNvbG9yTWFza0JsdWU7CisgICAgYm9vbCBjb2xvck1hc2tBbHBo
YTsKKyAgICBib29sIGRlcHRoTWFzazsKKworICAgIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFj
dGl2ZSB0ZXh0dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAorICAgIEdMdWludCBhcnJh
eUJ1ZmZlcjsKKyAgICBHTHVpbnQgZWxlbWVudEFycmF5QnVmZmVyOworICAgIEdMdWludCB0ZXh0
dXJlMkQ7CisgICAgR0x1aW50IHRleHR1cmVDdWJlTWFwOworICAgIEdMdWludCBmcmFtZWJ1ZmZl
cjsKKyAgICBHTHVpbnQgcmVuZGVyYnVmZmVyOworICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsK
KworICAgIEF0dHJpYnV0ZVN0YXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNd
OworICAgIEdMdWludCBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKKworICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKKyAgICBHTGlu
dCBwYWNrQWxpZ25tZW50OworfTsKKworY2xhc3MgQ29udGV4dAoreworICBwdWJsaWM6CisgICAg
Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5Db250ZXh0KCk7CisK
KyAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKTsKKworICAgIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIC8vIFN0
YXRlIG1hbmlwdWxhdGlvbgorICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0
IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7CisKKyAgICB2b2lkIHNldENsZWFyRGVw
dGgoZmxvYXQgZGVwdGgpOworCisgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwp
OworCisgICAgdm9pZCBzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNDdWxs
RmFjZUVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUp
OworCisgICAgdm9pZCBzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KTsKKworICAgIHZvaWQgc2V0
RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0RlcHRoVGVzdEVuYWJsZWQoKSBj
b25zdDsKKworICAgIHZvaWQgc2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpOworCisgICAg
dm9pZCBzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKKyAgICAKKyAgICB2
b2lkIHNldEJsZW5kKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0JsZW5kRW5hYmxlZCgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVt
IGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7CisgICAgdm9p
ZCBzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0
IGFscGhhKTsKKyAgICB2b2lkIHNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBH
TGVudW0gYWxwaGFFcXVhdGlvbik7CisKKyAgICB2b2lkIHNldFN0ZW5jaWxUZXN0KGJvb2wgZW5h
YmxlZCk7CisgICAgYm9vbCBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwg
R0x1aW50IHN0ZW5jaWxNYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51
bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJh
Y2tNYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0
ZW1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxC
YWNrV3JpdGVtYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVu
Y2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NE
ZXB0aFBhc3MpOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVu
Y2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVu
Y2lsQmFja1Bhc3NEZXB0aFBhc3MpOworCisgICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0RmlsbChi
b29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25z
dDsKKworICAgIHZvaWQgc2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xm
bG9hdCB1bml0cyk7CisKKyAgICB2b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVu
YWJsZWQpOworICAgIGJvb2wgaXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBp
c1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpOworCisgICAgdm9pZCBzZXRT
Y2lzc29yVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTY2lzc29yVGVzdEVuYWJsZWQo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBp
c0RpdGhlckVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TGluZVdpZHRoKEdMZmxvYXQg
d2lkdGgpOworCisgICAgdm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpOwor
CisgICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2b2lkIHNldFNjaXNzb3JQYXJhbXMoR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdm9pZCBz
ZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7
CisgICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKKworICAgIHZvaWQgc2V0QWN0aXZl
U2FtcGxlcihpbnQgYWN0aXZlKTsKKworICAgIEdMdWludCBnZXRGcmFtZWJ1ZmZlckhhbmRsZSgp
IGNvbnN0OworICAgIEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdDsKKworICAg
IEdMdWludCBnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRWZXJ0
ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCk7Cisg
ICAgY29uc3QgQXR0cmlidXRlU3RhdGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGlu
dCBhdHRyaWJOdW0pOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50
IGF0dHJpYk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBz
dHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOworICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0
dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisKKyAgICBjb25zdCBB
dHRyaWJ1dGVTdGF0ZSAqZ2V0VmVydGV4QXR0cmliQmxvY2soKTsKKworICAgIHZvaWQgc2V0VW5w
YWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25t
ZW50KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50
KTsKKyAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisKKyAgICBHTHVpbnQgY3Jl
YXRlQnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CisgICAg
R0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOworICAg
IEdMdWludCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQg
ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSk7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKKyAg
ICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBk
ZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICB2b2lkIGJpbmRB
cnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJl
KTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9p
ZCBiaW5kRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRSZW5k
ZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKKworICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlcik7CisgICAgdm9pZCBzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3JidWZmZXIgKnJl
bmRlcmJ1ZmZlcik7CisgICAgdm9pZCBzZXREZXB0aGJ1ZmZlclplcm8oRGVwdGhidWZmZXIgKmRl
cHRoQnVmZmVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIg
KnN0ZW5jaWxCdWZmZXIpOworICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKKworICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOworICAgIFByb2dy
YW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CisgICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShH
THVpbnQgaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhh
bmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7
CisgICAgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIERl
cHRoYnVmZmVyICpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTdGVuY2lsYnVm
ZmVyICpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpOworCisgICAgQnVmZmVyICpnZXRB
cnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAg
UHJvZ3JhbSAqZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUy
RCgpOworICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgIFRleHR1
cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1wbGVyVHlwZSB0
eXBlKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGJvb2wgZ2V0
RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdldEludGVn
ZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRCb29sZWFudihH
TGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBh
cmFtcyk7CisKKyAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQp
OworICAgIHZvaWQgYXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpOworICAgIEdMZW51bSBhcHBs
eVZlcnRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJv
b2wgKnVzZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIEdM
ZW51bSBhcHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleElu
Zm8pOworICAgIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IHZvaWQgKmluZGljZXMsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0
YSAqaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBwbHlDb3VudGluZ0luZGV4QnVmZmVyKEdMZW51
bSBtb2RlLCBHTGVudW0gY291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Cisg
ICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoKTsKKworICAg
IHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAg
dm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0g
bW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworICAgIHZvaWQgZHJhd0VsZW1lbnRz
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogaW5k
aWNlcyk7CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisKKyAgICB2b2lk
IHJlY29yZEludmFsaWRFbnVtKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkVmFsdWUoKTsKKyAg
ICB2b2lkIHJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICB2b2lkIHJlY29yZE91dE9mTWVt
b3J5KCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKKwor
ICAgIEdMZW51bSBnZXRFcnJvcigpOworCisgICAgY29uc3QgY2hhciAqZ2V0UGl4ZWxTaGFkZXJQ
cm9maWxlKCk7CisgICAgY29uc3QgY2hhciAqZ2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpOworCisg
ICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisKKyAgICBCbGl0ICpn
ZXRCbGl0dGVyKCkgeyByZXR1cm4gbUJsaXQ7IH0KKworICAgIGNvbnN0IEQzRENBUFM5ICZnZXRE
ZXZpY2VDYXBzKCkgeyByZXR1cm4gbURldmljZUNhcHM7IH0KKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0KTsKKworICAgIHZvaWQgbG9va3VwQXR0cmli
dXRlTWFwcGluZyhUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKTsKKworICAgIHZvaWQg
ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpOworICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
CisgICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoU2FtcGxlclR5cGUgdHlwZSk7CisK
KyAgICBib29sIGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBib29sIGlzVHJp
YW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisgICAgYm9vbCBoYXNTdGVuY2lsKCk7CisKKyAg
ICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKKworICAgIFN0YXRlICAgbVN0YXRl
OworCisgICAgVGV4dHVyZTJEICptVGV4dHVyZTJEWmVybzsKKyAgICBUZXh0dXJlQ3ViZU1hcCAq
bVRleHR1cmVDdWJlTWFwWmVybzsKKworICAgIENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJv
OworICAgIERlcHRoYnVmZmVyICptRGVwdGhidWZmZXJaZXJvOworICAgIFN0ZW5jaWxidWZmZXIg
Km1TdGVuY2lsYnVmZmVyWmVybzsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZm
ZXIqPiBCdWZmZXJNYXA7CisgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CisKKyAgICB0eXBlZGVm
IHN0ZDo6bWFwPEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIFNoYWRlck1hcCBtU2hh
ZGVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFt
TWFwOworICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFw
PEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CisgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1h
cDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOworICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKKworICAgIHR5cGVk
ZWYgc3RkOjptYXA8R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CisgICAg
UmVuZGVyYnVmZmVyTWFwIG1SZW5kZXJidWZmZXJNYXA7CisKKyAgICB2b2lkIGluaXRFeHRlbnNp
b25TdHJpbmcoKTsKKyAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOworCisgICAgQnVm
ZmVyQmFja0VuZCAqbUJ1ZmZlckJhY2tFbmQ7CisgICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0
ZXhEYXRhTWFuYWdlcjsKKyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsK
KworICAgIEJsaXQgKm1CbGl0OworCisgICAgVGV4dHVyZSAqbUluY29tcGxldGVUZXh0dXJlc1tT
QU1QTEVSX1RZUEVfQ09VTlRdOworCisgICAgLy8gUmVjb3JkZWQgZXJyb3JzCisgICAgYm9vbCBt
SW52YWxpZEVudW07CisgICAgYm9vbCBtSW52YWxpZFZhbHVlOworICAgIGJvb2wgbUludmFsaWRP
cGVyYXRpb247CisgICAgYm9vbCBtT3V0T2ZNZW1vcnk7CisgICAgYm9vbCBtSW52YWxpZEZyYW1l
YnVmZmVyT3BlcmF0aW9uOworCisgICAgYm9vbCBtSGFzQmVlbkN1cnJlbnQ7CisKKyAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRl
clRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlh
bDsKKworICAgIGNvbnN0IGNoYXIgKm1Qc1Byb2ZpbGU7CisgICAgY29uc3QgY2hhciAqbVZzUHJv
ZmlsZTsKKworICAgIC8vIHN0YXRlIGNhY2hpbmcgZmxhZ3MKKyAgICBib29sIG1DbGVhclN0YXRl
RGlydHk7CisgICAgYm9vbCBtQ3VsbFN0YXRlRGlydHk7CisgICAgYm9vbCBtRGVwdGhTdGF0ZURp
cnR5OworICAgIGJvb2wgbU1hc2tTdGF0ZURpcnR5OworICAgIGJvb2wgbVBpeGVsUGFja2luZ1N0
YXRlRGlydHk7CisgICAgYm9vbCBtQmxlbmRTdGF0ZURpcnR5OworICAgIGJvb2wgbVN0ZW5jaWxT
dGF0ZURpcnR5OworICAgIGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OworICAgIGJvb2wg
bVNjaXNzb3JTdGF0ZURpcnR5OworICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7CisgICAgYm9v
bCBtRnJvbnRGYWNlRGlydHk7CisgICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKKworICAgIElE
aXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOworCisgICAgRDNEQ0FQ
UzkgbURldmljZUNhcHM7Cit9OworfQorCitleHRlcm4gIkMiCit7CisvLyBFeHBvcnRlZCBmdW5j
dGlvbnMgZm9yIHVzZSBieSBFR0wKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3Qg
ZWdsOjpDb25maWcgKmNvbmZpZyk7Cit2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwordm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CitnbDo6Q29udGV4dCAq
Z2xHZXRDdXJyZW50Q29udGV4dCgpOworX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7
Cit9CisKKyNlbmRpZiAgIC8vIElOQ0xVREVfQ09OVEVYVF9IXwpJbmRleDogQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDUgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIEZyYW1lYnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVm
ZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxh
dGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEw
NS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCisjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCisKK25hbWVzcGFjZSBnbAoreworRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKCkKK3sKKyAg
ICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSAw
OworCisgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgbURlcHRoYnVmZmVySGFu
ZGxlID0gMDsKKworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgbVN0ZW5j
aWxidWZmZXJIYW5kbGUgPSAwOworfQorCitGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKK3sK
K30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBjb2xvcmJ1ZmZlcikKK3sKKyAgICBtQ29sb3JidWZmZXJUeXBlID0gdHlwZTsKKyAgICBtQ29s
b3JidWZmZXJIYW5kbGUgPSBjb2xvcmJ1ZmZlcjsKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3sKKyAgICBtRGVw
dGhidWZmZXJUeXBlID0gdHlwZTsKKyAgICBtRGVwdGhidWZmZXJIYW5kbGUgPSBkZXB0aGJ1ZmZl
cjsKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwg
R0x1aW50IHN0ZW5jaWxidWZmZXIpCit7CisgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gdHlwZTsK
KyAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IHN0ZW5jaWxidWZmZXI7Cit9CisKK3ZvaWQgRnJh
bWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKG1Db2xv
cmJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJU
eXBlKSkKKyAgICB7CisgICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAg
ICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJI
YW5kbGUgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisg
ICAgeworICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbURlcHRo
YnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJIYW5kbGUg
PT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICB7
CisgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1TdGVuY2ls
YnVmZmVySGFuZGxlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChtQ29sb3JidWZmZXJI
YW5kbGUgPT0gcmVuZGVyYnVmZmVyICYmIG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVG
RkVSKQorICAgIHsKKyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAg
IG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZlckhh
bmRsZSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAg
bURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJI
YW5kbGUgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJC
VUZGRVIpCisgICAgeworICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAg
ICAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQg
RnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCit7CisgICAgUmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIp
CisgICAgeworICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6Omdl
dFJlbmRlclRhcmdldCgpCit7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENv
bG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZXR1
cm4gY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAgIHJldHVybiBO
VUxMOworfQorCit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyU2VyaWFs
KCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAg
RGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRo
YnVmZmVySGFuZGxlKTsKKworICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sK
KyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgRGVwdGhi
dWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVy
SGFuZGxlKTsKKworICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK0NvbG9yYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIoKQoreworICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBDb2xvcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBOVUxMOworCisgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xf
Tk9ORSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGNvbG9yYnVmZmVy
ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIpCisgICAgeworICAgICAgICBjb2xvcmJ1ZmZlciA9IGNvbnRleHQtPmdldENvbG9y
YnVmZmVyKG1Db2xvcmJ1ZmZlckhhbmRsZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGNvbG9yYnVmZmVyID0gY29udGV4dC0+Z2V0VGV4dHVyZShtQ29sb3JidWZmZXJIYW5kbGUp
LT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3JidWZmZXJUeXBlKTsKKyAgICB9CisKKyAgICBpZiAoY29s
b3JidWZmZXIgJiYgY29sb3JidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBjb2xvcmJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRGVw
dGhidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCit7CisgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAg
ICBpZiAoZGVwdGhidWZmZXIgJiYgZGVwdGhidWZmZXItPmlzRGVwdGhidWZmZXIoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKworU3RlbmNpbGJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQorewor
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBTdGVuY2ls
YnVmZmVyICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZlcihtU3RlbmNp
bGJ1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVy
LT5pc1N0ZW5jaWxidWZmZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVy
OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6Omdl
dENvbG9yYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkKK3sKKyAgICByZXR1cm4g
bURlcHRoYnVmZmVyVHlwZTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKK30KKworR0x1aW50
IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlckhhbmRsZTsKK30KKworR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhh
bmRsZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlckhhbmRsZTsKK30KKworR0x1aW50IEZy
YW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkKK3sKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXJIYW5kbGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkK
K3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICBp
bnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworCisgICAgaWYgKG1Db2xvcmJ1ZmZl
clR5cGUgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgaWYgKCFjb2xvcmJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9
PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICB9CisKKyAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAg
aGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgIH0KKworICAgIGlmIChtRGVw
dGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBEZXB0aGJ1ZmZlciAqZGVw
dGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOwor
CisgICAgICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZGVwdGhidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0
aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRX
aWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUp
CisgICAgeworICAgICAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+
Z2V0U3RlbmNpbGJ1ZmZlcihtU3RlbmNpbGJ1ZmZlckhhbmRsZSk7CisKKyAgICAgICAgaWYgKCFz
dGVuY2lsYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZW5j
aWxidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSA9
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOworfQor
fQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6
OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3Rz
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQu
NCBwYWdlIDEwNS4KKworI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KKyNkZWZpbmUg
TElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQ29sb3JidWZmZXI7CitjbGFzcyBE
ZXB0aGJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZmZXI7CisKK2NsYXNzIEZyYW1lYnVmZmVyCit7
CisgIHB1YmxpYzoKKyAgICBGcmFtZWJ1ZmZlcigpOworCisgICAgfkZyYW1lYnVmZmVyKCk7CisK
KyAgICB2b2lkIHNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIp
OworICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZl
cik7CisgICAgdm9pZCBzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNp
bGJ1ZmZlcik7CisKKyAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAg
IHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKworICAg
IENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOworICAgIERlcHRoYnVmZmVyICpnZXREZXB0
aGJ1ZmZlcigpOworICAgIFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAg
IEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJU
eXBlKCk7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisKKyAgICBHTHVpbnQg
Z2V0Q29sb3JidWZmZXJIYW5kbGUoKTsKKyAgICBHTHVpbnQgZ2V0RGVwdGhidWZmZXJIYW5kbGUo
KTsKKyAgICBHTHVpbnQgZ2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworCisgICAgR0xlbnVtIGNv
bXBsZXRlbmVzcygpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEZyYW1lYnVmZmVyKTsKKworICAgIEdMdWludCBtQ29sb3JidWZmZXJIYW5kbGU7CisgICAgR0xl
bnVtIG1Db2xvcmJ1ZmZlclR5cGU7CisKKyAgICBHTHVpbnQgbURlcHRoYnVmZmVySGFuZGxlOwor
ICAgIEdMZW51bSBtRGVwdGhidWZmZXJUeXBlOworCisgICAgR0x1aW50IG1TdGVuY2lsYnVmZmVy
SGFuZGxlOworICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9OworfQorCisjZW5kaWYg
ICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNw
cAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjc2MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3Jh
bS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHBy
b2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJv
Z3JhbS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAorewordW5zaWduZWQgaW50IFByb2dy
YW06Om1DdXJyZW50U2VyaWFsID0gMTsKKworc3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAg
IGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpIDogdHlwZSh0eXBlKSwgbmFt
ZShuYW1lKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3Jt
VHlwZVNpemUodHlwZSkgKiBhcnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFy
W2J5dGVzXTsKKyAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsK
KyAgICBoYW5kbGVzU2V0ID0gZmFsc2U7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkKK3sKKyAg
ICBkZWxldGVbXSBkYXRhOworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGlu
dCBpbmRleCkgCisgICAgOiBuYW1lKG5hbWUpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRl
eCkKK3sKK30KKworUHJvZ3JhbTo6UHJvZ3JhbSgpCit7CisgICAgbUZyYWdtZW50U2hhZGVyID0g
TlVMTDsKKyAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJs
ZVBTID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9n
ID0gTlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICB1bmxpbmsoKTsKKworICAg
IG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKworICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwor
fQorCitQcm9ncmFtOjp+UHJvZ3JhbSgpCit7CisgICAgdW5saW5rKHRydWUpOworCisgICAgaWYg
KG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRl
dGFjaCgpOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKKyAgICB7
CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgfQorfQorCitib29sIFBy
b2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5n
ZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4
U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOworICAgICAg
ICBtVmVydGV4U2hhZGVyLT5hdHRhY2goKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5n
ZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1GcmFn
bWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7
CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+YXR0YWNoKCk7CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmRldGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0g
R0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNo
YWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXIg
PSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFH
TUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVy
ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgdW5saW5rKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVy
c0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAo
bUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlBy
b2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsK
K30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkK
K3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Ymlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAg
ICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgeworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CisgICAgfQorfQorCitH
THVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3sK
KyAgICBpZiAobmFtZSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworaW50IFByb2dyYW06Omdl
dFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQoreworICAgIGlmIChhdHRyaWJ1dGVJ
bmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJl
IHVuaXQgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8gaW5kZXggcmVm
ZXJlbmNlZCBpbiB0aGUgY29tcGlsZWQgSExTTCBzaGFkZXIKK0dMaW50IFByb2dyYW06OmdldFNh
bXBsZXJNYXBwaW5nKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgYXNzZXJ0KHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKTsKKwor
ICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgaWYgKG1TYW1wbGVyc1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICB7CisgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9
IG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICB9CisKKyAg
ICBpZiAobG9naWNhbFRleHR1cmVVbml0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAg
eworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworU2FtcGxlclR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclR5cGUodW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBhc3NlcnQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1T
YW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworICAgIGFzc2VydChtU2FtcGxlcnNbc2Ft
cGxlckluZGV4XS5hY3RpdmUpOworCisgICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhd
LnR5cGU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCkgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpCisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBs
ZXJzW3NhbXBsZXJJbmRleF0uZGlydHk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQcm9ncmFtOjpzZXRTYW1wbGVyRGlydHko
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBpZiAoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpCisgICAgewor
ICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IGRpcnR5OworICAgIH0KKyAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK0dMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2Nh
dGlvbihjb25zdCBjaGFyICpuYW1lLCBib29sIGRlY29yYXRlZCkKK3sKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lU3RyKG5hbWUpOworICAgIGludCBzdWJzY3JpcHQgPSAwOworICAgIHNpemVfdCBiZWdp
bkIgPSBuYW1lU3RyLmZpbmQoJ1snKTsKKyAgICBzaXplX3QgZW5kQiA9IG5hbWVTdHIuZmluZCgn
XScpOworICAgIGlmIChiZWdpbkIgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgZW5kQiAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YnNjclN0ciA9IG5h
bWVTdHIuc3Vic3RyKGJlZ2luQiArIDEsIGJlZ2luQiAtIGVuZEIgLSAxKTsKKyAgICAgICAgbmFt
ZVN0ci5lcmFzZShiZWdpbkIpOworICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKHN1YnNjclN0ci5j
X3N0cigpKTsKKyAgICB9CisKKyAgICBpZiAoIWRlY29yYXRlZCkKKyAgICB7CisgICAgICAgIG5h
bWVTdHIgPSBkZWNvcmF0ZShuYW1lU3RyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBs
b2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgewor
ICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lU3RyICYmCisg
ICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIC0xOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0
KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50XTsKKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVh
biksCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50
KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMiwKKyAgICAgICAgICAg
ICAgIHYsIDIgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAyXTsKKworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJV
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJv
b2xlYW4pICogMiwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXplb2YoR0xib29s
ZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9Cisg
ICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9G
TE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDMs
CisgICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0K
KyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAq
IDNdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMYm9vbGVhbikgKiAzLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMyAqIHNp
emVvZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1z
OworICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
ZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3Vu
dCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9W
RUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW2NvdW50ICogNF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDQsCisgICAgICAgICAgICAgICBib29sUGFy
YW1zLCA0ICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtd
IGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5p
Zm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAg
dmFsdWUsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xf
RkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xmbG9hdCkgKiA5LAorICAgICAgICAgICB2YWx1ZSwgOSAqIHNpemVvZihHTGZsb2F0KSAqIGNv
dW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKKworICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2LAorICAgICAgICAgICB2YWx1
ZSwgMTYgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UKQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICB2LCBzaXplb2Yo
R0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5l
dyBHTGJvb2xlYW5bY291bnRdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIHNp
emVvZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1z
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkg
KiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAg
fQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50
ICogMl07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xib29sZWFuKSAqIDIsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCAyICogc2l6
ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisg
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDMsCisgICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9
CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAg
eworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisg
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQg
KiAzXTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGJvb2xlYW4pICogMywKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDMgKiBzaXpl
b2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICog
NCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0K
KyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAq
IDRdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6
ZW9mKEdMYm9vbGVhbikgKiA0LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgNCAqIHNpemVv
ZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxv
Y2F0aW9uLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgdW5zaWduZWQgaW50IGNvdW50
ID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgc3dp
dGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RkxPQVQ6CisgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQgKiBzaXplb2YoR0xmbG9hdCksCisg
ICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50ICppbnRQYXJh
bXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRp
b24sIEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5p
Zm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgc3dpdGNoIChV
bmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7CisgICAgICBj
YXNlIEdMX0JPT0w6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xp
bnQpYm9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQg
KmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgbWVt
Y3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBjb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICBjb3VudCAq
IHNpemVvZihHTGludCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6ZGly
dHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZv
cm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
VW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0
eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmRpcnR5QWxsU2FtcGxlcnMoKQor
eworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUzsgKytpbmRleCkKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1tpbmRleF0uZGly
dHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBm
b3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgUHJv
Z3JhbTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1JbmRleC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYg
KG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgICAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZsb2F0
ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGludCAq
aSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAq
YiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm0xYnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5p
Zm9ybTJidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtM2J2KGxvY2F0aW9uLCBhcnJheVNp
emUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBh
cHBseVVuaWZvcm00YnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIGFwcGx5VW5pZm9ybTFmdihsb2NhdGlvbiwg
YXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogYXBwbHlVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBhcHBseVVuaWZvcm0zZnYobG9j
YXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IGFwcGx5VW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogYXBwbHlVbmlmb3Jt
TWF0cml4MmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOiBhcHBseVVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5
U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5
VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJh
eVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjog
ICBhcHBseVVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdihsb2NhdGlv
biwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5U
X1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2Rl
IG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRFhC
dWZmZXIgKlByb2dyYW06OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBj
aGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAg
IGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElE
M0RYQnVmZmVyICpiaW5hcnkgPSBOVUxMOworICAgIElEM0RYQnVmZmVyICplcnJvck1lc3NhZ2Ug
PSBOVUxMOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYQ29tcGlsZVNoYWRlcihobHNsLCAo
VUlOVClzdHJsZW4oaGxzbCksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJmJpbmFy
eSwgJmVycm9yTWVzc2FnZSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gYmluYXJ5OworICAgIH0KKworICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEM0RY
QnVmZmVyKilOVUxMKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdl
dEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtZXNz
YWdlKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMi
LCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLy8gUGFja3MgdmFy
eWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGht
IGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXgg
QSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlp
bmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW06OnBhY2tWYXJ5
aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCit7CisgICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsg
dmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisg
ICAgeworICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2
YXJ5aW5nLT5zaXplOworICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWlu
Zy0+dHlwZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmICht
ID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPD0gTUFYX1ZBUllJTkdfVkVDVE9SUyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5Kysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4
XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0g
PT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gTUFYX1ZB
UllJTkdfVkVDVE9SUyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
Y2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgeSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/
IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+IG4gJiYgc3Bh
Y2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID4gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1
bW5dKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsg
eSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZh
cnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7
CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJl
dHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7
CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKKyAg
ICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2lu
Z1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAgICB7CisgICAgICAgICAgICByZWdpc3Rl
cnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZWdpc3RlcnM7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKK3sKKyAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgp
IHx8IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTXVs0
XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwor
CisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHJlZ2lzdGVycyA9PSBNQVhfVkFSWUlOR19WRUNUT1JTICYmIG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBhcHBlbmRUb0luZm9M
b2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsK
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IGlucHV0
ICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAg
ICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQg
IT0gbVZlcnRleFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0
cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMg
bm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19z
dHIoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAg
ICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBt
YXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVudCB2YXJ5aW5nIHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0
Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9
ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlu
dCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBh
dHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUg
IT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0
MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6
IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAi
OyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQ0eDQgIjsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZShhdHRyaWJ1dGUt
Pm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOworCisg
ICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUp
OworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRp
b24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsg
cisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0
IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYi
ICsgc3RyKHIpICsgIiA6IFRFWENPT1JEIiArIHN0cihyKSArICI7XG4iOworICAgIH0KKworICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJl
Z2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAifTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWlu
KFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9y
IChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAg
IiArIGRlY29yYXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAg
eworICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAgICAgIH0KKwor
ICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZShhdHRyaWJ1dGUtPm5h
bWUpICsgIik7XG4iOworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisg
ICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFs
ZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6
ZS55ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQu
Z2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0
aW9uLnc7XG4iOworCisgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisg
ICAgeworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBn
bF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
dmFyeWluZyA9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZl
cnRleFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlm
ICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsg
ajsKKyAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBz
dHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNl
OyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9
ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBt
VmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsg
Il0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAiXG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAg
ICAgICAgICJ9XG4iOworCisgICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisg
ICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7Cisg
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiBURVhDT09SRCIgKyBuICsgIjtcbiI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3Jk
IDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisgICAgICAgIAor
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAg
ICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisg
ICAgbVBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAg
ICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAg
ICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1
dC5nbF9GcmFnQ29vcmQudztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1dpbmRvdy54ICsgZHhf
V2luZG93Lno7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9XaW5kb3cueSArIGR4X1dpbmRvdy53
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7CisgICAgfQor
CisgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMg
fHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0g
MC4wKSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdt
ZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYg
KHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkg
KiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsg
dmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhM
U0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
bVBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIK
KyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVU
IG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAg
ICAgICJ9XG4iOworCisgICAgVFJBQ0UoIlxuJXMiLCBtUGl4ZWxITFNMLmNfc3RyKCkpOworICAg
IFRSQUNFKCJcbiVzIiwgbVZlcnRleEhMU0wuY19zdHIoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFk
ZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCisvLyBjb21waWxpbmcgdGhlbSBpbnRv
IGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVj
dGluZworLy8gYSBsaXN0IG9mIHVuaWZvcm1zCit2b2lkIFByb2dyYW06OmxpbmsoKQoreworICAg
IHVubGluaygpOworCisgICAgaWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRl
ci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250
ZXh0KCk7CisgICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPmdldFZlcnRl
eFNoYWRlclByb2ZpbGUoKTsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0
LT5nZXRQaXhlbFNoYWRlclByb2ZpbGUoKTsKKworICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRT
aGFkZXItPmdldEhMU0woKTsKKyAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhM
U0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKCkpCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSUQzRFhCdWZmZXIgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFy
eShtVmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7
CisgICAgSUQzRFhCdWZmZXIgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhlbEhM
U0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAo
dmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhl
bFJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+
R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAgICAgICAgaWYgKHZl
cnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisK
KyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5S
ZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmlu
YXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhl
Y3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVQUykpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNl
IGdsXyBhbmQgZHhfCisgICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBk
byBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAgIG1EZXB0aFJh
bmdlTmVhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLm5lYXIi
LCB0cnVlKTsKKyAgICAgICAgICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRGVwdGhS
YW5nZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5kaWZm
IiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9EZXB0aCIsIHRydWUpOworICAgICAgICAgICAgbUR4V2luZG93TG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImR4X1dpbmRvdyIsIHRydWUpOworICAgICAgICAgICAgbUR4SGFs
ZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXpl
IiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9Gcm9udENDVyIsIHRydWUpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIiwgdHJ1ZSk7
CisKKyAgICAgICAgICAgIG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKKyAgICAgICAgfQor
ICAgIH0KK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0
ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFByb2dy
YW06OmxpbmtBdHRyaWJ1dGVzKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9
IDA7CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlv
bgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5t
QXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRp
b24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1w
dHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUg
YXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0
dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZv
TG9nKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBm
aXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2Vk
TG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmlu
ZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0
ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAg
ICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisK
KyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmli
TG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0Nv
dW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBB
bGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRU
UklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFi
bGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAo
JXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
TGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSBtVmVy
dGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5k
ZXhdLm5hbWUpOworICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworCisgICAgICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2Vt
YW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRp
bmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgZm9yIChpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKKyAgICB7CisgICAg
ICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmli
dXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9v
bCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxl
KQoreworICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9u
OworICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247CisgICAgVUlOVCBk
ZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0
YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudElu
ZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFu
dHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRI
YW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKKyAg
ICAgICAgY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29u
c3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZv
dW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBSZXR1
cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCitib29s
IFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUs
IGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyBuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKKworICAgICAgICBhc3NlcnQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworCisg
ICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgIG1T
YW1wbGVyc1tzYW1wbGVySW5kZXhdLnR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09
IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBTQU1QTEVSX0NVQkUgOiBTQU1QTEVSXzJEOworICAgICAg
ICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAg
ICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgc3dp
dGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENf
U1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9
IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOworCisg
ICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAg
bUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgICAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnRE
ZXNjcmlwdGlvbi5OYW1lICsgIi4iKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19T
Q0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRS
SVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRl
ZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRp
b24uTmFtZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0o
Y29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5n
ICZuYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50
RGVzY3JpcHRpb24sIG5hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisg
ICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24obmFtZS5jX3N0cigpLCB0cnVl
KTsKKyAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7CisKKyAgICBpZiAobG9jYXRpb24g
Pj0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlmb3JtOworCisgICAgICAgIGlmIChtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKKyAgICB1bnNpZ25lZCBpbnQgdW5p
Zm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQorICAgIHsKKyAgICAgICAgbVVu
aWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKG5hbWUsIGksIHVuaWZvcm1JbmRl
eCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtOjpj
cmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9u
LCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dz
ID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQ
VF9TQU1QTEVSMkQ6CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgRDNEWFBUX0JPT0w6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfQk9PTCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwg
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0JPT0xfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBuYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVu
aWZvcm0oR0xfSU5UX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwor
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FULCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0
LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFu
dERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBEM0RYUFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRp
b24uUm93cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01B
VDMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBuYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91
dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZShjb25zdCBz
dGQ6OnN0cmluZyAmc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJn
bF8iICYmIHN0cmluZy5zdWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgeworICAgICAgICByZXR1
cm4gIl8iICsgc3RyaW5nOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
c3RyaW5nOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZShjb25z
dCBzdGQ6OnN0cmluZyAmc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3RyKDAsIDEpID09
ICJfIikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDEpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KK30KKworYm9vbCBQ
cm9ncmFtOjphcHBseVVuaWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBCT09MICp2ZWN0b3IgPSBuZXcgQk9PTFtjb3VudF07
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYg
KHZbaV0gPT0gR0xfRkFMU0UpCisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAwOworICAgICAgICBl
bHNlIAorICAgICAgICAgICAgdmVjdG9yW2ldID0gMTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7
CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29u
c3RhbnRWUyk7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
KworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+
U2V0Qm9vbEFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQor
CisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5T
ZXRCb29sQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisK
KyAgICBkZWxldGUgW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJv
Z3JhbTo6YXBwbHlVbmlmb3JtMmJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGJvb2xlYW4gKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVD
VE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
eworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgodlswXSA9PSBHTF9GQUxTRSA/IDAu
MGYgOiAxLjBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbMV0gPT0gR0xf
RkFMU0UgPyAwLjBmIDogMS4wZiksIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisK
KyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFO
RExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZj
b25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25z
dGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBj
b3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29u
c3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3Rvciwg
Y291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNidihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0
b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKHZbMF0g
PT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHZbMl0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIDApOworCisg
ICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRI
YW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQ
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmlj
ZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50
VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZl
Y3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9y
bTRidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQor
eworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9y
W2ldID0gRDNEWFZFQ1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEu
MGYpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbMl0gPT0gR0xfRkFMU0Ug
PyAwLjBmIDogMS4wZiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlszXSA9
PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5E
TEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNv
bnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNv
dW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25z
dGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBj
b3VudCk7CisgICAgfQorCisgICAgZGVsZXRlIFtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQz
RFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0
Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7
CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAo
Y29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldEZsb2F0QXJy
YXkoZGV2aWNlLCBjb25zdGFudFBTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0
YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRGbG9hdEFycmF5KGRl
dmljZSwgY29uc3RhbnRWUywgdiwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0g
bmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KHZbMF0sIHZbMV0s
IDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAg
IEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAg
Z2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRW
Uyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBp
ZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3Rv
ckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAg
aWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0
b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAg
IGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2Nv
dW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KHZbMF0sIHZbMV0sIHZbMl0sIDApOworCisgICAg
ICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29u
c3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5k
bGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMp
CisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3Rv
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExF
IGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25z
dGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFu
dFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgKEQzRFhWRUNUT1I0
Kil2LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIChE
M0RYVkVDVE9SNCopdiwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgRDNEWE1BVFJJWCAqbWF0cml4
ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0gRDNEWE1BVFJJWCh2YWx1ZVswXSwg
dmFsdWVbMl0sIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0s
IHZhbHVlWzNdLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg
ICAwLCAgICAgICAgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAg
ICAgMCwgICAgICAgIDAsIDEpOworCisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3Rh
bnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJp
eCwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAg
bUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFu
dFZTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSBtYXRyaXg7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1NYXRyaXgzZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorewor
ICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1hdHJpeFtpXSA9
IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVlWzNdLCB2YWx1ZVs2XSwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXSwgdmFsdWVbNF0sIHZhbHVlWzddLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs1XSwgdmFsdWVbOF0s
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAsICAgICAgICAw
LCAgICAgICAgMSk7CisKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50
VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAm
Y29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMt
PlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0cml4LCBjb3Vu
dCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3Rh
bnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIG1h
dHJpeCwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgRDNE
WE1BVFJJWCAqbWF0cml4ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0gRDNEWE1B
VFJJWCh2YWx1ZVswXSwgdmFsdWVbNF0sIHZhbHVlWzhdLCAgdmFsdWVbMTJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVs1XSwgdmFsdWVbOV0sICB2YWx1
ZVsxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMl0sIHZhbHVlWzZd
LCB2YWx1ZVsxMF0sIHZhbHVlWzE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZVszXSwgdmFsdWVbN10sIHZhbHVlWzExXSwgdmFsdWVbMTVdKTsKKworICAgICAgICB2YWx1
ZSArPSAxNjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3Rh
bnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVz
KHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRl
dmljZSwgY29uc3RhbnRQUywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0
YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bv
c2VBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAg
IGRlbGV0ZVtdIG1hdHJpeDsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Cisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRV
bmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAg
ICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAgICBVSU5U
IGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFu
dFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhjb25zdGFudFBTLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gbUNvbnN0YW50
VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KGNvbnN0YW50UFMpOworCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4OyBzYW1wbGVySW5kZXggPCBm
aXJzdEluZGV4ICsgY291bnQ7IHNhbXBsZXJJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMaW50IG1hcHBlZFNhbXBsZXIgPSB2WzBdOworCisgICAgICAgICAgICAgICAg
aWYgKHNhbXBsZXJJbmRleCA+PSAwICYmIHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1T
YW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1hcHBlZFNhbXBsZXI7Cisg
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRJbnRBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHYs
IGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1D
b25zdGFudFRhYmxlVlMtPlNldEludEFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdiwgY291bnQp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5p
Zm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7
CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAg
ICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29u
c3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5k
bGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMp
CisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3Rv
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
RDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBE
M0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKwor
ICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExF
IGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50
SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50
UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFu
dFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2
aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2
ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZv
cm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQorewor
ICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZs
b2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKwor
ICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7Cisg
ICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3Rh
bnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZl
Y3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisg
ICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRW
ZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKwor
ICAgIGRlbGV0ZSBbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9n
cmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaWYg
KCFmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBpbmZv
WzEwMjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3Jt
YXQpOworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsK
KyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGlu
Zm8pOworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3
IGNoYXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVu
KG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsg
aW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7CisgICAg
ICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAgICAgIGRlbGV0ZVtd
IG1JbmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAg
ICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBwcm9n
cmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYWZ0ZXIgZGV0YWNoaW5nIGEgc2hhZGVy
LCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KK3ZvaWQgUHJvZ3JhbTo6dW5s
aW5rKGJvb2wgZGVzdHJveSkKK3sKKyAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcg
ZGVzdHJ1Y3RlZAorICAgIHsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgICAgIG1G
cmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVZlcnRleFNo
YWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNoKCk7Cisg
ICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+
UmVsZWFzZSgpOworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB9CisKKyAg
ICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgfQor
CisgICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVBTLT5SZWxlYXNlKCk7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOworICAgIH0K
KworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVWUy0+UmVsZWFzZSgpOworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKyAgICB9
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
bmRleCsrKQorICAgIHsKKyAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVh
cigpOworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4
KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAg
ICAgICBtU2FtcGxlcnNbaW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3aGlsZSAo
IW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNr
KCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIG1EZXB0aFJh
bmdlRGlmZkxvY2F0aW9uID0gLTE7CisgICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSAtMTsK
KyAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9
IC0xOworICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxv
Y2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBvaW50
c09yTGluZXNMb2NhdGlvbiA9IC0xOworCisgICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworCisg
ICAgbVBpeGVsSExTTC5jbGVhcigpOworICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisKKyAgICBk
ZWxldGVbXSBtSW5mb0xvZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBtTGlua2VkID0g
ZmFsc2U7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQoreworICAgIHJldHVybiBtTGlu
a2VkOworfQorCitib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7CisgICAgcmV0
dXJuIG1WYWxpZGF0ZWQ7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBj
b25zdAoreworICAgIHJldHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6
aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitpbnQg
UHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
IHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
ZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAg
ICAgICAgd2hpbGUgKGluZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbiht
SW5mb0xvZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gbUluZm9M
b2dbaW5kZXhdOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAg
IH0KKworICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7Cisg
ICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENv
dW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKQoreworICAgIGludCB0b3RhbCA9
IDA7CisKKyAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICB7CisgICAgICAgIGlmICh0b3RhbCA8
IG1heENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1WZXJ0
ZXhTaGFkZXItPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKKyAg
ICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFs
IDwgbWF4Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbUZy
YWdtZW50U2hhZGVyLT5nZXRIYW5kbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsKys7
CisgICAgfQorCisgICAgaWYgKGNvdW50KQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gdG90YWw7
CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVt
ICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZSA9IDA7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQorICAgIHsKKyAg
ICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmlidXRlKys7CisKKyAgICAgICAg
ICAgIEFTU0VSVChhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlMpOyAgIC8vIGluZGV4IG11
c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKKyAgICAgICAgfQor
ICAgICAgICB3aGlsZSAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSk7
CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKwor
ICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVm
c2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAg
KnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0
eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dy
YW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisg
ICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAg
IGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAg
ICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50
KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1h
eExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQor
Cit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKQoreworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtID0gMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspCisgICAgeworICAgICAgICBkbworICAgICAg
ICB7CisgICAgICAgICAgICB1bmlmb3JtKys7CisKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3Jt
IDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCkKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobVVuaWZvcm1z
W3VuaWZvcm1dLT5uYW1lLnN1YnN0cigwLCAzKSA9PSAiZHhfIik7CisgICAgfQorCisgICAgaWYg
KGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5kZWNv
cmF0ZShtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUpOworCisgICAgICAgIGlmIChtVW5pZm9ybXNb
dW5pZm9ybV0tPmFycmF5U2l6ZSAhPSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcg
Kz0gIlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0
cigpLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAg
ICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4o
bmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9
CisKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNv
dW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4
IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlm
b3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICAgICAg
eworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7
CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMg
PSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9
IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5p
Zm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5zdWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKHVuZGVjb3JhdGUobVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUpLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dy
YW06OmZsYWdGb3JEZWxldGlvbigpCit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtRGVsZXRlU3RhdHVzOworfQorCit2b2lkIFByb2dyYW06OnZhbGlkYXRlKCkKK3sKKyAgICBy
ZXNldEluZm9Mb2coKTsKKworICAgIGlmICghaXNMaW5rZWQoKSkgCisgICAgeworICAgICAgICBh
cHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQu
Iik7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgYXBwbHlVbmlmb3JtcygpOworICAgICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBj
b25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQuIik7
CisgICAgICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworYm9vbCBQcm9ncmFtOjp2YWxpZGF0ZVNhbXBsZXJzKCkgY29uc3QKK3sKKyAg
ICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZl
cmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1
bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3Jh
bSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxs
IGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKyAgICBzdGQ6Om1hcDxpbnQsIFNh
bXBsZXJUeXBlPiBzYW1wbGVyTWFwOyAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBs
ZXJzW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNhbXBsZXJNYXAuZmlu
ZChtU2FtcGxlcnNbaV0ubG9naWNhbFRleHR1cmVVbml0KSAhPSBzYW1wbGVyTWFwLmVuZCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNbaV0udHlwZSAhPSBz
YW1wbGVyTWFwW21TYW1wbGVyc1tpXS5sb2dpY2FsVGV4dHVyZVVuaXRdKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlck1hcFttU2FtcGxlcnNbaV0ubG9n
aWNhbFRleHR1cmVVbml0XSA9IG1TYW1wbGVyc1tpXS50eXBlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0
Q29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEQzRFhIQU5ETEUgKmNvbnN0
YW50UFMsIEQzRFhIQU5ETEUgKmNvbnN0YW50VlMpCit7CisgICAgaWYgKCF0YXJnZXRVbmlmb3Jt
LT5oYW5kbGVzU2V0KQorICAgIHsKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+cHNIYW5kbGUgPSBt
Q29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5uYW1l
LmNfc3RyKCkpOworICAgICAgICB0YXJnZXRVbmlmb3JtLT52c0hhbmRsZSA9IG1Db25zdGFudFRh
YmxlVlMtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPm5hbWUuY19zdHIoKSk7
CisgICAgICAgIHRhcmdldFVuaWZvcm0tPmhhbmRsZXNTZXQgPSB0cnVlOworICAgIH0KKworICAg
ICpjb25zdGFudFBTID0gdGFyZ2V0VW5pZm9ybS0+cHNIYW5kbGU7CisgICAgKmNvbnN0YW50VlMg
PSB0YXJnZXRVbmlmb3JtLT52c0hhbmRsZTsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RGVwdGhS
YW5nZURpZmZMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFJhbmdlRGlmZkxv
Y2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247Cit9CisKK0dMaW50
IFByb2dyYW06OmdldERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4RGVwdGhM
b2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dM
aW50IFByb2dyYW06OmdldER4V2luZG93TG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
RHhXaW5kb3dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247
Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRo
ZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAu
MyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0hfCisjZGVmaW5lIExJQkdM
RVNWMl9QUk9HUkFNX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBn
bAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhl
bHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3Qg
VW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKworICAgIH5Vbmlmb3JtKCk7CisKKyAgICBj
b25zdCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAg
IGJvb2wgZGlydHk7CisKKyAgICBEM0RYSEFORExFIHZzSGFuZGxlOworICAgIEQzRFhIQU5ETEUg
cHNIYW5kbGU7CisgICAgYm9vbCBoYW5kbGVzU2V0OworfTsKKworLy8gU3RydWN0IHVzZWQgZm9y
IGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRs
ZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsK
KyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCitjbGFzcyBQcm9ncmFtCit7CisgIHB1Ymxp
YzoKKyAgICBQcm9ncmFtKCk7CisKKyAgICB+UHJvZ3JhbSgpOworCisgICAgYm9vbCBhdHRhY2hT
aGFkZXIoU2hhZGVyICpzaGFkZXIpOworICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hh
ZGVyKTsKKyAgICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKKworICAgIElE
aXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxv
Y2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgR0x1aW50IGdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0lu
ZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICB2b2lkIGRpcnR5QWxsU2FtcGxlcnMoKTsK
KworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgp
OworICAgIFNhbXBsZXJUeXBlIGdldFNhbXBsZXJUeXBlKHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXgpOworICAgIGJvb2wgaXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCwgYm9vbCBkaXJ0eSk7CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3QgY2hh
ciAqbmFtZSwgYm9vbCBkZWNvcmF0ZWQpOworICAgIGJvb2wgc2V0VW5pZm9ybTFmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0
cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2l2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9v
bCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCAq
cGFyYW1zKTsKKyAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xpbnQgKnBh
cmFtcyk7CisKKyAgICBHTGludCBnZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCkgY29uc3Q7Cisg
ICAgR0xpbnQgZ2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdl
dERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RGVwdGhMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4V2luZG93TG9jYXRpb24oKSBjb25zdDsKKyAg
ICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdl
dER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2
b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIHZvaWQgbGluaygpOworICAgIGJvb2wgaXNMaW5r
ZWQoKTsKKyAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5m
b0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Cisg
ICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291
bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwg
R0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0
ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CisKKyAg
ICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsK
KyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOworICAgIGJv
b2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgdmFsaWRhdGUoKTsK
KyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRhdGVk
KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CisKKyAgICBJRDNE
WEJ1ZmZlciAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworICAgIHZvaWQgdW5s
aW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tdWzRdKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncygpOworCisgICAg
Ym9vbCBsaW5rQXR0cmlidXRlcygpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3Rh
bnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQz
RFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3Rh
bnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmluZVVu
aWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6
c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAg
Ym9vbCBhcHBseVVuaWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yYnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0zYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7
CisgICAgYm9vbCBhcHBseVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlV
bmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIGFwcGx5
VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICB2b2lkIGdldENvbnN0YW50SGFuZGxlcyhV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBEM0RYSEFORExF
ICpjb25zdGFudFZTKTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmlu
Zm8sIC4uLik7CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRpYyBzdGQ6OnN0
cmluZyBkZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKTsgICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlKGNvbnN0IHN0
ZDo6c3RyaW5nICZzdHJpbmcpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICAgIEZyYWdtZW50U2hhZGVy
ICptRnJhZ21lbnRTaGFkZXI7CisgICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOworCisg
ICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsK
KworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNEWENvbnN0YW50
VGFibGUgKm1Db25zdGFudFRhYmxlUFM7CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3Rh
bnRUYWJsZVZTOworCisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5n
W01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFY
X1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAgeworICAgICAgICBib29sIGFjdGl2ZTsK
KyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBTYW1wbGVyVHlwZSB0
eXBlOworICAgICAgICBib29sIGRpcnR5OworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVy
c1tNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVu
aWZvcm0qPiBVbmlmb3JtQXJyYXk7CisgICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKKyAgICB0
eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OworICAgIFVu
aWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworCisgICAgR0xpbnQgbURlcHRoUmFuZ2VEaWZmTG9j
YXRpb247CisgICAgR0xpbnQgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247CisgICAgR0xpbnQgbURl
cHRoUmFuZ2VGYXJMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOworICAgIEdM
aW50IG1EeFdpbmRvd0xvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09y
TGluZXNMb2NhdGlvbjsKKworICAgIGJvb2wgbUxpbmtlZDsKKyAgICBib29sIG1EZWxldGVTdGF0
dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVk
IHdoZW4gbm8gbG9uZ2VyIGluIHVzZQorICAgIGNoYXIgKm1JbmZvTG9nOworICAgIGJvb2wgbVZh
bGlkYXRlZDsKKworICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGludCBtQ3VycmVudFNlcmlhbDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9Q
Uk9HUkFNX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVy
LmNwcDogdGhlIGdsOjpSZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMK
Ky8vIENvbG9yYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50
cyBHTCByZW5kZXJidWZmZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7Cit1bnNp
Z25lZCBpbnQgUmVuZGVyYnVmZmVyOjptQ3VycmVudFNlcmlhbCA9IDE7CisKK1JlbmRlcmJ1ZmZl
cjo6UmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtV2lkdGggPSAwOworICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy8gZGVmYXVsdCBmb3JtYXQsIG5lZWRzIHRvIGJlIG9u
ZSBvZiB0aGUgZXhwZWN0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMKKyAgICBtU2VyaWFsID0gaXNz
dWVTZXJpYWwoKTsKK30KKworUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkKK3sKK30KKwor
Ym9vbCBSZW5kZXJidWZmZXI6OmlzQ29sb3JidWZmZXIoKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRS
ZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBOVUxMOworfQorCitJRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBOVUxMOwor
fQorCitpbnQgUmVuZGVyYnVmZmVyOjpnZXRXaWR0aCgpCit7CisgICAgcmV0dXJuIG1XaWR0aDsK
K30KKworaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gbUhlaWdo
dDsKK30KKwordm9pZCBSZW5kZXJidWZmZXI6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7Cit9CisKKwor
R0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0KCkKK3sKKyAgICByZXR1cm4gbUZvcm1hdDsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVNlcmlhbDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6aXNzdWVT
ZXJpYWwoKQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitDb2xvcmJ1ZmZl
cjo6Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkgOiBtUmVuZGVy
VGFyZ2V0KHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzY3JpcHRpb247CisgICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24p
OworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdo
dCk7CisgICAgfQorCit9CisKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGVzMmR4
OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFM
U0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAg
ICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9
IGZvcm1hdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSgwLCAwKTsK
KyAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OworICAgIH0KK30KKworQ29sb3JidWZmZXI6On5D
b2xvcmJ1ZmZlcigpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBt
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQorfQorCitib29sIENvbG9yYnVmZmVyOjpp
c0NvbG9yYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0x1aW50IENvbG9yYnVm
ZmVyOjpnZXRSZWRTaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAg
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+
R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6R2V0UmVkU2l6
ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTHVp
bnQgQ29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMy
ZHg6OkdldEdyZWVuU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkKK3sKKyAgICBpZiAo
bVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlv
bjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAg
ICAgIHJldHVybiBlczJkeDo6R2V0Qmx1ZVNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRBbHBoYVNpemUo
KQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlw
dGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRBbHBoYVNpemUoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkg
KkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtUmVuZGVyVGFy
Z2V0OworfQorCitEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKworICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGRlcHRoU3RlbmNpbC0+
R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lk
dGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01Q
T05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0
aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMg
Zm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZl
cihpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0
LCBEM0RGTVRfRDI0UzgsIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3Rl
bmNpbCwgMCk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIHNl
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05F
TlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUg
Y2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9y
IHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6
ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0Cisg
ICAgfQorfQorCitEZXB0aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKCkKK3sKKyAgICBpZiAobURlcHRo
U3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9
Cit9CisKK2Jvb2wgRGVwdGhidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAgIHJldHVybiB0
cnVlOworfQorCitHTHVpbnQgRGVwdGhidWZmZXI6OmdldERlcHRoU2l6ZSgpCit7CisgICAgaWYg
KG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRp
b247CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAg
ICAgICByZXR1cm4gZXMyZHg6OkdldERlcHRoU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAg
IH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhidWZmZXI6
OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKK1N0
ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNp
bCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVwdGhTdGVuY2ls
KQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKworICAgICAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygm
ZGVzY3JpcHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2Ny
aXB0aW9uLkhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8g
SWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBm
dW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhw
ZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UKKyAgICB9Cit9CisKK1N0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworCisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4
LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOworCisg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBzZXRTaXplKHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSBy
ZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUg
b2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldFNpemUoMCwgMCk7CisgICAgICAgIG1Gb3Jt
YXQgPSBHTF9SR0JBNDsgLy9kZWZhdWx0IGZvcm1hdAorICAgIH0KK30KKworU3RlbmNpbGJ1ZmZl
cjo6flN0ZW5jaWxidWZmZXIoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAg
ICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KK30KKworR0x1aW50IFN0ZW5j
aWxidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAg
ICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbURlcHRo
U3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6
R2V0U3RlbmNpbFNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworYm9vbCBTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQoreworICAgIHJl
dHVybiB0cnVlOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVw
dGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJidWZmZXIuaDogRGVmaW5lcyB0aGUgdmlydHVhbCBn
bDo6UmVuZGVyYnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVyaXZlZAorLy8gY2xhc3NlcyBDb2xvcmJ1
ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMgR0wgcmVuZGVy
YnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5E
RVJCVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXworCisjZGVmaW5l
IEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisK
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNz
IFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyKCk7CisKKyAgICB2
aXJ0dWFsIH5SZW5kZXJidWZmZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbG9yYnVmZmVy
KCk7CisgICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZmZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNTdGVuY2lsYnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0
ZW5jaWwoKTsKKworICAgIHZpcnR1YWwgaW50IGdldFdpZHRoKCk7CisgICAgdmlydHVhbCBpbnQg
Z2V0SGVpZ2h0KCk7CisgICAgR0xlbnVtIGdldEZvcm1hdCgpOworICAgIHVuc2lnbmVkIGludCBn
ZXRTZXJpYWwoKSBjb25zdDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwo
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKKwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CisKKyAgICBpbnQgbVdpZHRo
OworICAgIGludCBtSGVpZ2h0OworfTsKKworY2xhc3MgQ29sb3JidWZmZXIgOiBwdWJsaWMgUmVu
ZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKKyAgICBDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOworCisgICAgfkNvbG9yYnVmZmVyKCk7CisKKyAgICBi
b29sIGlzQ29sb3JidWZmZXIoKTsKKworICAgIEdMdWludCBnZXRSZWRTaXplKCk7CisgICAgR0x1
aW50IGdldEdyZWVuU2l6ZSgpOworICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpOworICAgIEdMdWlu
dCBnZXRBbHBoYVNpemUoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJn
ZXQoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJn
ZXQ7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29sb3JidWZm
ZXIpOworfTsKKworY2xhc3MgRGVwdGhidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCit7Cisg
IHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVw
dGhTdGVuY2lsKTsKKyAgICBEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisg
ICAgfkRlcHRoYnVmZmVyKCk7CisKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKTsKKworICAgIEdM
dWludCBnZXREZXB0aFNpemUoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0
ZW5jaWwoKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0
aGJ1ZmZlcik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Cit9OworCitj
bGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6Cisg
ICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
KTsKKyAgICBTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB+U3Rl
bmNpbGJ1ZmZlcigpOworCisgICAgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKTsKKworICAgIEdMdWlu
dCBnZXRTdGVuY2lsU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0ZW5j
aWxidWZmZXIpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOworfTsKK30K
KworI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNoYWRlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpTaGFkZXIgY2xhc3MgYW5kIGl0cyAgZGVy
aXZlZCBjbGFzc2VzCisvLyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1l
bnRzIEdMIHNoYWRlciBvYmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24gMy44IHBhZ2Ug
ODQuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+
CisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlcmxhbmcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGds
Cit7Cit2b2lkICpTaGFkZXI6Om1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsKK3ZvaWQgKlNoYWRl
cjo6bVZlcnRleENvbXBpbGVyID0gTlVMTDsKKworU2hhZGVyOjpTaGFkZXIoQ29udGV4dCAqY29u
dGV4dCwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRsZSksIG1Db250ZXh0KGNvbnRleHQp
Cit7CisgICAgbVNvdXJjZSA9IE5VTEw7CisgICAgbUhsc2wgPSBOVUxMOworICAgIG1JbmZvTG9n
ID0gTlVMTDsKKworICAgIC8vIFBlcmZvcm0gYSBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiB0
aGUgc2hhZGVyIGNvbXBpbGVyIChvciBhZnRlciBiZWluZyBkZXN0cnVjdGVkIGJ5IHJlbGVhc2VD
b21waWxlcikKKyAgICBpZiAoIW1GcmFnbWVudENvbXBpbGVyKQorICAgIHsKKyAgICAgICAgaW50
IHJlc3VsdCA9IFNoSW5pdGlhbGl6ZSgpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihF
U2hMYW5nRnJhZ21lbnQsIEVTaFNwZWNHTEVTMik7CisgICAgICAgICAgICBtVmVydGV4Q29tcGls
ZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNHTEVTMik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtQXR0YWNoQ291bnQgPSAwOworICAgIG1EZWxldGVTdGF0
dXMgPSBmYWxzZTsKK30KKworU2hhZGVyOjp+U2hhZGVyKCkKK3sKKyAgICBkZWxldGVbXSBtU291
cmNlOworICAgIGRlbGV0ZVtdIG1IbHNsOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitH
THVpbnQgU2hhZGVyOjpnZXRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtSGFuZGxlOwor
fQorCit2b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipz
dHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCit7CisgICAgZGVsZXRlW10gbVNvdXJjZTsKKyAg
ICBpbnQgdG90YWxMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gKGludClz
dHJsZW4oc3RyaW5nW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Tb3VyY2UgPSBuZXcg
Y2hhclt0b3RhbExlbmd0aCArIDFdOworICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IHN0cmlu
Z0xlbmd0aDsKKworICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0
cmxlbihzdHJpbmdbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShjb2RlLCBzdHJp
bmdbaV0sIHN0cmluZ0xlbmd0aCk7CisgICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOworICAg
IH0KKworICAgIG1Tb3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKK30KKworaW50IFNoYWRlcjo6
Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHJldHVybiBz
dHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQoreworICAg
IGludCBpbmRleCA9IDA7CisKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAgICB3aGls
ZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1JbmZvTG9nKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xvZ1tpbmRleF07
CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1ZlNp
emUpCisgICAgeworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisgICAg
aWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9CisK
K2ludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtU291cmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6
Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpzb3VyY2Up
Cit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChtU291cmNlKQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKGluZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtU291
cmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgc291cmNlW2luZGV4XSA9IG1Tb3VyY2VbaW5k
ZXhdOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChi
dWZTaXplKQorICAgIHsKKyAgICAgICAgc291cmNlW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisg
ICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9
CisKK2Jvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkKK3sKKyAgICByZXR1cm4gbUhsc2wgIT0gTlVM
TDsKK30KKworY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKK3sKKyAgICByZXR1cm4gbUhs
c2w7Cit9CisKK3ZvaWQgU2hhZGVyOjphdHRhY2goKQoreworICAgIG1BdHRhY2hDb3VudCsrOwor
fQorCit2b2lkIFNoYWRlcjo6ZGV0YWNoKCkKK3sKKyAgICBtQXR0YWNoQ291bnQtLTsKKworICAg
IGlmIChtQXR0YWNoQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsKKyAgICAgICAg
bUNvbnRleHQtPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKKyAgICB9Cit9CisKK2Jvb2wgU2hhZGVy
Ojppc0F0dGFjaGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUF0dGFjaENvdW50ID4gMDsKK30K
KworYm9vbCBTaGFkZXI6OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbURlbGV0ZVN0YXR1czsKK30KKwordm9pZCBTaGFkZXI6OmZsYWdGb3JEZWxldGlvbigpCit7
CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CisKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlQ29t
cGlsZXIoKQoreworICAgIFNoRGVzdHJ1Y3QobUZyYWdtZW50Q29tcGlsZXIpOworICAgIFNoRGVz
dHJ1Y3QobVZlcnRleENvbXBpbGVyKTsKKworICAgIG1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsK
KyAgICBtVmVydGV4Q29tcGlsZXIgPSBOVUxMOworCisgICAgU2hGaW5hbGl6ZSgpOworfQorCit2
b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCit7CisgICAgaWYgKG1IbHNsKQorICAgIHsKKyAg
ICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsg
MTI7CisKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciB2
YXJ5aW5nVHlwZVsyNTZdOworICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOworCisg
ICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlcyAlcyIsIHZh
cnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOworICAg
ICAgICAgICAgaW50IHNpemUgPSAxOworCisgICAgICAgICAgICBpZiAoYXJyYXkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKKyAgICAgICAg
ICAgICAgICAqYXJyYXkgPSAnXDAnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXJ5
aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFt
ZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOworCisgICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihp
bnB1dCwgIjsiKSArIDI7CisgICAgICAgIH0KKworICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0
cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7CisgICAgICAgIG1Vc2Vz
RnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5V
TEw7CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxl
cikKK3sKKyAgICBpZiAoaXNDb21waWxlZCgpIHx8ICFtU291cmNlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFRSQUNFKCJcbiVzIiwgbVNvdXJjZSk7CisKKyAgICBkZWxl
dGVbXSBtSW5mb0xvZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBUQnVpbHRJblJlc291
cmNlIHJlc291cmNlczsKKworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZF
UlRFWF9BVFRSSUJTOworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IE1B
WF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9y
cyA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgIHJlc291cmNl
cy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM7CisgICAgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7CisgICAgcmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMg
PSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhEcmF3QnVm
ZmVycyA9IE1BWF9EUkFXX0JVRkZFUlM7CisKKyAgICBpbnQgcmVzdWx0ID0gU2hDb21waWxlKGNv
bXBpbGVyLCAmbVNvdXJjZSwgMSwgRVNoT3B0Tm9uZSwgJnJlc291cmNlcywgRURlYnVnT3BOb25l
KTsKKyAgICBjb25zdCBjaGFyICpvYmogPSBTaEdldE9iamVjdENvZGUoY29tcGlsZXIpOworICAg
IGNvbnN0IGNoYXIgKmluZm8gPSBTaEdldEluZm9Mb2coY29tcGlsZXIpOworCisgICAgaWYgKHJl
c3VsdCkKKyAgICB7CisgICAgICAgIG1IbHNsID0gbmV3IGNoYXJbc3RybGVuKG9iaikgKyAxXTsK
KyAgICAgICAgc3RyY3B5KG1IbHNsLCBvYmopOworCisgICAgICAgIFRSQUNFKCJcbiVzIiwgbUhs
c2wpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFy
W3N0cmxlbihpbmZvKSArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworCisg
ICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cpOworICAgIH0KK30KKworR0xlbnVtIFNoYWRl
cjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKQoreworICAgIGlmICh0eXBlID09
ICJmbG9hdCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRf
VkVDMjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzIikKKyAgICB7CisgICAg
ICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJm
bG9hdDQiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7CisgICAgfQorICAg
IGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9G
TE9BVF9NQVQyOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDN4MyIpCisgICAg
eworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKKyAgICB9CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAiZmxvYXQ0eDQiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Cisg
ICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBHTF9OT05FOworfQor
CisvLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgaW4gcGFja2luZyB0
aGFuIHkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25z
dCBWYXJ5aW5nICZ5KQoreworICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgIH0KKworICAgIHN3aXRjaCAoeC50eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIHRydWU7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDog
cmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDog
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAg
ICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7
CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBm
YWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICBzd2l0
Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVydGV4U2hhZGVyOjpW
ZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIoY29u
dGV4dCwgaGFuZGxlKQoreworfQorCitWZXJ0ZXhTaGFkZXI6On5WZXJ0ZXhTaGFkZXIoKQorewor
fQorCitHTGVudW0gVmVydGV4U2hhZGVyOjpnZXRUeXBlKCkKK3sKKyAgICByZXR1cm4gR0xfVkVS
VEVYX1NIQURFUjsKK30KKwordm9pZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUoKQoreworICAgIGNv
bXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKKyAgICBwYXJzZUF0dHJpYnV0ZXMoKTsKKyAg
ICBwYXJzZVZhcnlpbmdzKCk7Cit9CisKK2ludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5k
ZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYgKCFhdHRyaWJ1
dGVOYW1lLmVtcHR5KCkpCisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Cisg
ICAgICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRl
TmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWNJbmRl
eDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7Cit9CisKK3ZvaWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0dHJpYnV0ZXMoKQoreworICAg
IGlmIChtSGxzbCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKG1I
bHNsLCAiLy8gQXR0cmlidXRlcyIpICsgMTQ7CisKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVUeXBlWzI1Nl07CisgICAgICAgICAgICBj
aGFyIGF0dHJpYnV0ZU5hbWVbMjU2XTsKKworICAgICAgICAgICAgaW50IG1hdGNoZXMgPSBzc2Nh
bmYoaW5wdXQsICJzdGF0aWMgJXMgXyVzIiwgYXR0cmlidXRlVHlwZSwgYXR0cmlidXRlTmFtZSk7
CisKKyAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1BdHRyaWJ1dGVz
LnB1c2hfYmFjayhBdHRyaWJ1dGUocGFyc2VUeXBlKGF0dHJpYnV0ZVR5cGUpLCBhdHRyaWJ1dGVO
YW1lKSk7CisKKyAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAiOyIpICsgMjsKKyAg
ICAgICAgfQorICAgIH0KK30KKworRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKENvbnRl
eHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRsZSkKK3sK
K30KKworRnJhZ21lbnRTaGFkZXI6On5GcmFnbWVudFNoYWRlcigpCit7Cit9CisKK0dMZW51bSBG
cmFnbWVudFNoYWRlcjo6Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURF
UjsKK30KKwordm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCit7CisgICAgY29tcGlsZVRv
SExTTChtRnJhZ21lbnRDb21waWxlcik7CisgICAgcGFyc2VWYXJ5aW5ncygpOworICAgIHZhcnlp
bmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlci5oOiBEZWZp
bmVzIHRoZSBhYnN0cmFjdCBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZl
ZAorLy8gY2xhc3NlcyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRz
IEdMIHNoYWRlciBvYmplY3RzIGFuZAorLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KKy8vIDMuOCBwYWdl
IDg0LgorCisjaWZuZGVmIExJQkdMRVNWMl9TSEFERVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1NI
QURFUl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNp
bmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8dmVjdG9yPgorCisj
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3Qg
VmFyeWluZworeworICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lLCBpbnQgc2l6ZSwgYm9vbCBhcnJheSkKKyAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5h
bWUpLCBzaXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKKyAgICB7Cisg
ICAgfQorCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBpbnQg
c2l6ZTsgICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCisgICAgYm9vbCBhcnJheTsKKwor
ICAgIGludCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmlu
ZyBsaW5rCisgICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWdu
ZWQgZHVyaW5nIGxpbmsKK307CisKK3R5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdM
aXN0OworCitjbGFzcyBTaGFkZXIKK3sKKyAgICBmcmllbmQgUHJvZ3JhbTsKKworICBwdWJsaWM6
CisgICAgU2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOworCisgICAgdmly
dHVhbCB+U2hhZGVyKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgPSAwOworICAg
IEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Cisg
ICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29u
c3QgR0xpbnQgKmxlbmd0aCk7CisgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAg
ICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIg
KmluZm9Mb2cpOworICAgIGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdl
dFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOworICAgIGJvb2wgaXNDb21waWxlZCgp
OworICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKKworICAgIHZvaWQgYXR0YWNoKCk7CisgICAg
dm9pZCBkZXRhY2goKTsKKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdDsKKyAgICBib29sIGlz
RmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsK
KworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOworCisgIHByb3RlY3RlZDoKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyKTsKKworICAgIHZvaWQgcGFyc2VWYXJ5
aW5ncygpOworCisgICAgdm9pZCBjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVyKTsKKworICAg
IHN0YXRpYyBHTGVudW0gcGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKTsKKyAgICBz
dGF0aWMgYm9vbCBjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5n
ICZ5KTsKKworICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOworICAgIGludCBtQXR0YWNoQ291bnQ7
ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmplY3RzIHRoaXMgc2hhZGVyIGlzIGF0dGFjaGVk
IHRvCisgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0
aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQorCisgICAgY2hh
ciAqbVNvdXJjZTsKKyAgICBjaGFyICptSGxzbDsKKyAgICBjaGFyICptSW5mb0xvZzsKKworICAg
IFZhcnlpbmdMaXN0IHZhcnlpbmdzOworCisgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKKyAgICBi
b29sIG1Vc2VzRnJvbnRGYWNpbmc7CisKKyAgICBDb250ZXh0ICptQ29udGV4dDsKKworICAgIHN0
YXRpYyB2b2lkICptRnJhZ21lbnRDb21waWxlcjsKKyAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENv
bXBpbGVyOworfTsKKworc3RydWN0IEF0dHJpYnV0ZQoreworICAgIEF0dHJpYnV0ZSgpIDogdHlw
ZShHTF9OT05FKSwgbmFtZSgiIikKKyAgICB7CisgICAgfQorCisgICAgQXR0cmlidXRlKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUp
CisgICAgeworICAgIH0KKworICAgIEdMZW51bSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7
Cit9OworCit0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7CisK
K2NsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKK3sKKyAgICBmcmllbmQgUHJvZ3Jh
bTsKKworICBwdWJsaWM6CisgICAgVmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWlu
dCBoYW5kbGUpOworCisgICAgflZlcnRleFNoYWRlcigpOworCisgICAgR0xlbnVtIGdldFR5cGUo
KTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBz
dGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKKworICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVz
KCk7CisKKyAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKK307CisKK2NsYXNzIEZyYWdt
ZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICBwdWJsaWM6CisgICAgRnJhZ21lbnRTaGFk
ZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB+RnJhZ21lbnRTaGFk
ZXIoKTsKKworICAgIEdMZW51bSBnZXRUeXBlKCk7CisgICAgdm9pZCBjb21waWxlKCk7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOwor
fTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDk3IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0
cyBkZXJpdmVkIGNsYXNzZXMKKy8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxl
bWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitUZXh0dXJlOjpJ
bWFnZTo6SW1hZ2UoKQorICA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRpcnR5KGZhbHNlKSwgc3Vy
ZmFjZShOVUxMKQoreworfQorCitUZXh0dXJlOjpJbWFnZTo6fkltYWdlKCkKK3sKKyAgaWYgKHN1
cmZhY2UpIHN1cmZhY2UtPlJlbGVhc2UoKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0
ICpjb250ZXh0KSA6IG1Db250ZXh0KGNvbnRleHQpCit7CisgICAgbU1pbkZpbHRlciA9IEdMX05F
QVJFU1RfTUlQTUFQX0xJTkVBUjsKKyAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOworICAgIG1X
cmFwUyA9IEdMX1JFUEVBVDsKKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7CisKKyAgICBtRGlydHlN
ZXRhRGF0YSA9IHRydWU7CisgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICBtSXNSZW5kZXJhYmxlID0g
ZmFsc2U7CisgICAgbUJhc2VUZXh0dXJlID0gTlVMTDsKK30KKworVGV4dHVyZTo6flRleHR1cmUo
KQoreworfQorCitCbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKK3sKKyAgICByZXR1cm4gbUNv
bnRleHQtPmdldEJsaXR0ZXIoKTsKK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwg
ZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6
OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQoreworICAgIHN3aXRjaCAoZmlsdGVyKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtTWluRmlsdGVyICE9IGZpbHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
TWluRmlsdGVyID0gZmlsdGVyOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
Citib29sIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQoreworICAgIHN3aXRj
aCAoZmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xf
TElORUFSOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKKyAg
ICAgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0V3JhcFMo
R0xlbnVtIHdyYXApCit7CisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
UkVQRUFUOgorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgorICAgICAgY2FzZSBHTF9NSVJS
T1JFRF9SRVBFQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOworICAgICAgICAg
ICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRh
dGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0g
d3JhcCkKK3sKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6
CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JF
UEVBVDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7CisgICAgICAgICAgICAgICAg
bURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bU1pbkZpbHRlcjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYWdGaWx0ZXI7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwUygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1XcmFwUzsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFdy
YXBUKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdyYXBUOworfQorCitHTHVpbnQgVGV4dHVyZTo6
Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtV2lkdGg7Cit9CisKK0dMdWludCBUZXh0
dXJlOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtSGVpZ2h0OworfQorCisvLyBT
ZWxlY3RzIGFuIGludGVybmFsIERpcmVjdDNEIDkgZm9ybWF0IGZvciBzdG9yaW5nIGFuIEltYWdl
CitEM0RGT1JNQVQgVGV4dHVyZTo6c2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAg
cmV0dXJuIEQzREZNVF9BOFI4RzhCODsKK30KKworaW50IFRleHR1cmU6OmltYWdlUGl0Y2goY29u
c3QgSW1hZ2UgJmltZykgY29uc3QKK3sKKyAgICByZXR1cm4gaW1nLndpZHRoICogNDsKK30KKwor
Ly8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNl
dCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0
CisvLyBpbnRvIHRoZSBCR1JBOCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0
UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCit2b2lkIFRleHR1cmU6OmxvYWRJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIEdMc2l6ZWkgaW5wdXRQ
aXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQp
OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZTE2ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHNvdXJjZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0OworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciByOworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBnOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiOworICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhOworCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgICAgICBhID0gc291cmNl
W3hdOworICAgICAgICAgICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGcgPSAwOworICAg
ICAgICAgICAgICAgIGIgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeF07Cisg
ICAgICAgICAgICAgICAgZyA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgICAgICBiID0gc291cmNl
W3hdOworICAgICAgICAgICAgICAgIGEgPSAweEZGOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgICAg
IHIgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbMip4KzBdOwor
ICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgICAgIGEgPSBz
b3VyY2VbMip4KzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAg
ICAgICAgICAgIHIgPSBzb3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IHNvdXJjZVt4ICogMyArIDFdOworICAgICAgICAgICAgICAgICAgICBiID0gc291cmNlW3ggKiAz
ICsgMl07CisgICAgICAgICAgICAgICAgICAgIGEgPSAweEZGOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAgICAgICAgICAgICAgICAgICBh
ID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwMUYpIDw8
IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcg
PSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYg
MHhGODAwKSA+PiAxMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgICAgICAgICAgICByID0gc291cmNlW3ggKiA0ICsgMF07CisgICAgICAgICAgICAgICAgICAg
IGcgPSBzb3VyY2VbeCAqIDQgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4
ICogNCArIDJdOworICAgICAgICAgICAgICAgICAgICBhID0gc291cmNlW3ggKiA0ICsgM107Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgYSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAw
eDAwMEYpID4+IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDBG
MCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZyA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJn
YmEgJiAweEYwMDApID4+IDEyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGEgPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGIgPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwg
KChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoKHJn
YmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBiOworICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gZzsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHI7
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBhOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1
cmZhY2UgPSBOVUxMOworCisgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDApCisgICAg
eworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVPZmZzY3JlZW5Q
bGFpblN1cmZhY2Uod2lkdGgsIGhlaWdodCwgc2VsZWN0Rm9ybWF0KGZvcm1hdCksIEQzRFBPT0xf
U1lTVEVNTUVNLCAmbmV3U3VyZmFjZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChpbWctPnN1cmZhY2UpIGltZy0+c3VyZmFjZS0+UmVsZWFzZSgpOworICAgIGltZy0+c3VyZmFj
ZSA9IG5ld1N1cmZhY2U7CisKKyAgICBpbWctPndpZHRoID0gd2lkdGg7CisgICAgaW1nLT5oZWln
aHQgPSBoZWlnaHQ7CisgICAgaW1nLT5mb3JtYXQgPSBmb3JtYXQ7CisKKyAgICBpZiAocGl4ZWxz
ICE9IE5VTEwgJiYgbmV3U3VyZmFjZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tS
ZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBsb2FkSW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAg
ICAgICAgIG5ld1N1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlt
Zy0+ZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKK30K
Kwordm9pZCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQor
eworICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWctPndpZHRoIHx8IGhlaWdodCArIHlvZmZz
ZXQgPiBpbWctPmhlaWdodCkgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworCisgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNl
LT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKKworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBsb2Fk
SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAg
ICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorCisgICAgaW1nLT5kaXJ0
eSA9IHRydWU7Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVy
ZSgpCit7CisgICAgaWYgKCFpc0NvbXBsZXRlKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKKyAgICBpZiAobURpcnR5TWV0YURhdGEpCisgICAgeworICAgICAgICBtQmFz
ZVRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobURpcnR5TWV0YURhdGEgfHwgZGlydHlJbWFnZURhdGEoKSkK
KyAgICB7CisgICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRh
RGF0YSA9IGZhbHNlOworICAgIEFTU0VSVCghZGlydHlJbWFnZURhdGEoKSk7CisKKyAgICByZXR1
cm4gbUJhc2VUZXh0dXJlOworfQorCitib29sIFRleHR1cmU6OmlzRGlydHkoKSBjb25zdAorewor
ICAgIHJldHVybiAobURpcnR5IHx8IG1EaXJ0eU1ldGFEYXRhIHx8IGRpcnR5SW1hZ2VEYXRhKCkp
OworfQorCisvLyBSZXR1cm5zIHRoZSB0b3AtbGV2ZWwgdGV4dHVyZSBzdXJmYWNlIGFzIGEgcmVu
ZGVyIHRhcmdldAordm9pZCBUZXh0dXJlOjpuZWVkUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAo
IW1Jc1JlbmRlcmFibGUpCisgICAgeworICAgICAgICBtQmFzZVRleHR1cmUgPSBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgbUlzUmVuZGVyYWJsZSA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKGRpcnR5SW1hZ2VEYXRhKCkpCisgICAgeworICAgICAgICB1cGRhdGVUZXh0dXJlKCk7
CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJl
Ojpkcm9wVGV4dHVyZSgpCit7CisgICAgaWYgKG1CYXNlVGV4dHVyZSkKKyAgICB7CisgICAgICAg
IG1CYXNlVGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNl
OworfQorCit2b2lkIFRleHR1cmU6OnB1c2hUZXh0dXJlKElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
bmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxlKQoreworICAgIG1CYXNlVGV4dHVyZSA9IG5ld1Rl
eHR1cmU7CisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsKKyAgICBtSXNSZW5kZXJhYmxlID0g
cmVuZGVyYWJsZTsKKyAgICBtRGlydHkgPSB0cnVlOworfQorCisKK0dMaW50IFRleHR1cmU6OmNy
ZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBtYXhsZXZl
bCkgY29uc3QKK3sKKyAgICBpZiAoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtYXhsZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgLy8gT3BlbkdMIEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3QgZG9lcyBu
b3QgcGVybWl0IE5QT1QgbWlwbWFwcy4KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCitH
TGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUsIEdMaW50IG1heGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplLCBtYXhsZXZl
bCk7Cit9CisKK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUJhc2VUZXh0dXJlID8gbUJhc2VUZXh0dXJlLT5HZXRMZXZlbENvdW50KCkgOiAwOworfQorCitU
ZXh0dXJlMkQ6OlRleHR1cmUyRChDb250ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkK
K3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwor
fQorCitUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJQ
cm94eTsKKworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0dMZW51bSBUZXh0
dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Cit9
CisKKy8vIFdoaWxlIE9wZW5HTCBkb2Vzbid0IGNoZWNrIHRleHR1cmUgY29uc2lzdGVuY3kgdW50
aWwgZHJhdy10aW1lLCBEM0Q5IHJlcXVpcmVzIGEgY29tcGxldGUgdGV4dHVyZQorLy8gZm9yIHJl
bmRlci10by10ZXh0dXJlIChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUgbm8gd2F5IG9m
IGtlZXBpbmcgaW5kaXZpZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzLgorLy8gQ2FsbCB0aGlzIHdo
ZW4gYSBwYXJ0aWN1bGFyIGxldmVsIG9mIHRoZSB0ZXh0dXJlIG11c3QgYmUgZGVmaW5lZCB3aXRo
IGEgc3BlY2lmaWMgZm9ybWF0LCB3aWR0aCBhbmQgaGVpZ2h0LgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVyZSB3YXMgdW5zdWl0YWJsZSBoYWQgdG8gYmUgZGVzdHJv
eWVkLiBJZiBzbywgaXQgd2lsbCBhbHNvIHNldAorLy8gYSBuZXcgaGVpZ2h0IGFuZCB3aWR0aCBm
b3IgdGhlIHRleHR1cmUgYnkgd29ya2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2ZW4gd2lkdGgg
YW5kIGhlaWdodC4KK2Jvb2wgVGV4dHVyZTJEOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgYm9vbCB3aWR0aE9rYXkgPSAobVdpZHRoID4+IGxldmVsID09IHdpZHRoKTsKKyAgICBi
b29sIGhlaWdodE9rYXkgPSAobUhlaWdodCA+PiBsZXZlbCA9PSBoZWlnaHQpOworCisgICAgYm9v
bCBzaXplT2theSA9ICgod2lkdGhPa2F5ICYmIGhlaWdodE9rYXkpCisgICAgICAgICAgICAgICAg
ICAgICB8fCAod2lkdGhPa2F5ICYmIG1IZWlnaHQgPj4gbGV2ZWwgPT0gMCAmJiBoZWlnaHQgPT0g
MSkKKyAgICAgICAgICAgICAgICAgICAgIHx8IChoZWlnaHRPa2F5ICYmIG1XaWR0aCA+PiBsZXZl
bCA9PSAwICYmIHdpZHRoID09IDEpKTsKKworICAgIGJvb2wgdGV4dHVyZU9rYXkgPSAoc2l6ZU9r
YXkgJiYgaW50ZXJuYWxGb3JtYXQgPT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKKworICAgIGlm
ICghdGV4dHVyZU9rYXkpCisgICAgeworICAgICAgICBUUkFDRSgiUmVkZWZpbmluZyAyRCB0ZXh0
dXJlICglZCwgMHglMDRYLCAlZCwgJWQgPT4gMHglMDRYLCAlZCwgJWQpLiIsIGxldmVsLAorICAg
ICAgICAgICAgICBtSW1hZ2VBcnJheVswXS5mb3JtYXQsIG1XaWR0aCwgbUhlaWdodCwKKyAgICAg
ICAgICAgICAgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8vIFB1
cmdlIGFsbCB0aGUgbGV2ZWxzIGFuZCB0aGUgdGV4dHVyZS4KKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE1BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobUltYWdlQXJyYXlbaV0uc3VyZmFjZSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAg
bUltYWdlQXJyYXlbaV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgICAgIGRyb3BUZXh0dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBtV2lkdGggPSB3aWR0
aCA8PCBsZXZlbDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodCA8PCBsZXZlbDsKKyAgICAgICAg
bUltYWdlQXJyYXlbMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgfQorCisgICAgcmV0
dXJuICF0ZXh0dXJlT2theTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCit7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlb
bGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQoreworICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0uc3VyZmFjZSAhPSBOVUxMKTsKKwor
ICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0TGV2ZWwgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0TGV2ZWwpOworCisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2xldmVsXTsK
KworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC5s
ZWZ0ID0geG9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geW9mZnNldDsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgICAgIFBP
SU5UIGRlc3RQb2ludDsKKyAgICAgICAgICAgIGRlc3RQb2ludC54ID0geG9mZnNldDsKKyAgICAg
ICAgICAgIGRlc3RQb2ludC55ID0geW9mZnNldDsKKworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0
RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCAmc291cmNlUmVjdCwgZGVzdExl
dmVsLCAmZGVzdFBvaW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisKKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICBpbWct
PmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpz
dWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBUZXh0dXJlOjpz
dWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKKyAgICBjb21taXRS
ZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBU
ZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQpKQorICAgIHsKKyAgICAgICAgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICB9CisKKyAg
ICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkK
KyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0
ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291
cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7
CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAgIEhSRVNVTFQgaHIg
PSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmZGVzdCk7CisKKyAgICAgICAgZ2V0
QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJj
ZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCA9IHdpZHRoOworICAg
IG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworfQorCit2b2lkIFRleHR1cmUyRDo6Y29weVN1
YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpz
b3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS53
aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICB9CisKKyAg
ICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbUltYWdlQXJy
YXlbMF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgeworICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7Cisg
ICAgfQorCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgUkVD
VCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICBzb3Vy
Y2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Cisg
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKworICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0dXJlLT5HZXRTdXJm
YWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKworICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENv
bnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlb
MF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFz
ZSgpOworICAgIH0KK30KKworLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNvbXBsZXRl
bmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCitib29sIFRl
eHR1cmUyRDo6aXNDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFn
ZUFycmF5WzBdLndpZHRoOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uaGVp
Z2h0OworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgor
ICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBj
YXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBN
QVBfTElORUFSOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAg
bWlwbWFwcGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdF
ICYmICFpc1BvdzIod2lkdGgpKQorICAgICAgICB8fCAoZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBpZiAoIWlzUG93
Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lk
dGgsIGhlaWdodCkpOworCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsg
bGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5m
b3JtYXQgIT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2xldmVsXS53aWR0aCAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCAhPSBzdGQ6Om1h
eCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNl
IGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQorSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIElE
aXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1h
Z2VBcnJheVswXS5mb3JtYXQpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQs
IDApLCAwLCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilO
VUxMKTsKKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUpIG1UZXh0dXJlLT5SZWxlYXNlKCk7Cisg
ICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIFRl
eHR1cmUyRDo6dXBkYXRlVGV4dHVyZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworCisgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAg
ICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpsZXZlbFN1cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmbGV2ZWxTdXJm
YWNlKTsKKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAg
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShtSW1hZ2VBcnJheVtsZXZlbF0uc3Vy
ZmFjZSwgTlVMTCwgbGV2ZWxTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgbGV2ZWxTdXJmYWNlLT5SZWxl
YXNlKCk7CisKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uZGlydHkgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworSURpcmVjdDNEQmFzZVRl
eHR1cmU5ICpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgSURpcmVj
dDNEVGV4dHVyZTkgKnRleHR1cmUgPSBOVUxMOworCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1I
ZWlnaHQgIT0gMCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERp
c3BsYXkoKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0u
Zm9ybWF0KTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZShtV2lkdGgsIG1IZWlnaHQsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgbUhlaWdodCwgMCksIEQz
RFVTQUdFX1JFTkRFUlRBUkdFVCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBO
VUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2U7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZl
bChpLCAmc291cmNlKTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSop
TlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3Q7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFj
ZUxldmVsKGksICZkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRl
c3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBkZXN0LT5S
ZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGRl
c3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtVGV4dHVyZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBtVGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOwor
fQorCitib29sIFRleHR1cmUyRDo6ZGlydHlJbWFnZURhdGEoKSBjb25zdAoreworICAgIGludCBx
ID0gbG9nMihzdGQ6Om1heChtV2lkdGgsIG1IZWlnaHQpKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDw9IHE7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5kaXJ0eSkg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1
cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVsw
XS53aWR0aCkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5oZWlnaHQpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
c3RkOjptYXgobVdpZHRoLCBtSGVpZ2h0KSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLnN1cmZhY2Ug
IT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZSA9IE5VTEw7Cisg
ICAgICAgIH0KKworICAgICAgICBtSW1hZ2VBcnJheVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAg
ICAgIG1JbWFnZUFycmF5W2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmZvcm1hdDsKKyAgICAg
ICAgbUltYWdlQXJyYXlbaV0ud2lkdGggPSBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS53aWR0aCA+
PiBpLCAxKTsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0uaGVpZ2h0ID0gc3RkOjptYXgobUltYWdl
QXJyYXlbMF0uaGVpZ2h0ID4+IGksIDEpOworICAgIH0KKworICAgIG5lZWRSZW5kZXJUYXJnZXQo
KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICB7Cisg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IE5VTEw7CisgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpsb3dlciA9IE5VTEw7CisKKyAgICAgICAgbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChpLTEsICZ1cHBlcik7CisgICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaSwg
Jmxvd2VyKTsKKworICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQor
ICAgICAgICB7CisgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxl
YXNlKCk7CisgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAg
IH0KK30KKworQ29sb3JidWZmZXIgKlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRh
cmdldCkKK3sKKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZlciAqKU5VTEwp
OworICAgIH0KKworICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhp
cywgdGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Cit9CisK
K0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICBuZWVk
UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0g
TlVMTDsKKyAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZyZW5kZXJUYXJnZXQpOwor
CisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQoreworICAgIG1UZXh0
dXJlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAg
ICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKKyAgICB9Cit9CisKK1RleHR1cmVDdWJlTWFw
Ojp+VGV4dHVyZUN1YmVNYXAoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlIG1GYWNlUHJveGllc1tpXTsKKyAgICB9CisKKyAgICBpZiAo
bVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBt
VGV4dHVyZSA9IE5VTEw7CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRh
cmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Cit9CisKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQor
eworICAgIHNldEltYWdlKDAsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNl
dEltYWdlKDEsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDIs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
TmVnWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDMsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisK
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBpbnQgZmFjZSA9IGZhY2VJbmRleChmYWNlVGFyZ2V0KTsKKwor
ICAgIEFTU0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc3VyZmFjZSAhPSBOVUxMKTsKKwor
ICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0TGV2ZWwgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCk7CisgICAg
ICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKGRlc3RMZXZlbCAh
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXTsKKworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAg
ICAgc291cmNlUmVjdC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9w
ID0geW9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lk
dGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisK
KyAgICAgICAgICAgIFBPSU5UIGRlc3RQb2ludDsKKyAgICAgICAgICAgIGRlc3RQb2ludC54ID0g
eG9mZnNldDsKKyAgICAgICAgICAgIGRlc3RQb2ludC55ID0geW9mZnNldDsKKworICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZh
Y2UsICZzb3VyY2VSZWN0LCBkZXN0TGV2ZWwsICZkZXN0UG9pbnQpOworICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNl
KCk7CisKKyAgICAgICAgICAgIGltZy0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgY29tbWl0
UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisK
Ky8vIFRlc3RzIGZvciBHTCB0ZXh0dXJlIG9iamVjdCBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXND
b21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS53aWR0
aDsKKworICAgIGlmIChzaXplIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgYm9vbCBtaXBtYXBwaW5nOworCisgICAgc3dpdGNoIChtTWluRmlsdGVyKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAg
ICAgICBtaXBtYXBwaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJF
U1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xf
TElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgZm9y
IChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgeworICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bMF0ud2lkdGggIT0gc2l6ZSB8fCBtSW1hZ2VBcnJheVtmYWNlXVswXS5o
ZWlnaHQgIT0gc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBpZiAo
IWlzUG93MihzaXplKSAmJiAoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdy
YXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBxID0gbG9nMihzaXplKTsKKworICAg
ICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZm9y
bWF0ICE9IG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLndpZHRoICE9IHN0ZDo6bWF4
KDEsIHNpemUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFT
U0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uaGVpZ2h0ID09IG1JbWFnZUFycmF5W2ZhY2Vd
W2xldmVsXS53aWR0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNv
dXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUK
K0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQor
eworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIEQzREZP
Uk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKwor
ICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqdGV4dHVyZTsKKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0
aCwgMCksIDAsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkq
KU5VTEwpOworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSkgbVRleHR1cmUtPlJlbGVhc2UoKTsK
KworICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2Ug
PCA2OyBmYWNlKyspCisgICAgeworICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwor
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XTsKKworICAgICAgICAgICAgaWYgKGltZy0+ZGlydHkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxldmVsU3VyZmFjZSA9IGdldEN1YmVNYXBTdXJm
YWNlKGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGV2ZWxTdXJmYWNlICE9
IE5VTEwpOworCisgICAgICAgICAgICAgICAgaWYgKGxldmVsU3VyZmFjZSAhPSBOVUxMKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCBOVUxMLCBsZXZlbFN1cmZhY2UsIE5VTEwp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgICAgICAgICAgICAgIGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAg
ICAgICAgIGltZy0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgSURpcmVjdDNEQ3ViZVRl
eHR1cmU5ICp0ZXh0dXJlID0gTlVMTDsKKworICAgIGlmIChtV2lkdGggIT0gMCkKKyAgICB7Cisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEQzREZPUk1BVCBm
b3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUobVdpZHRoLCBjcmVh
dGlvbkxldmVscyhtV2lkdGgsIDApLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGZvcm1hdCwgRDNE
UE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxM
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2U7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxE
M0RDVUJFTUFQX0ZBQ0VTPihmKSwgaSwgJnNvdXJjZSk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZh
Y2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNFUz4oZiksIGksICZkZXN0KTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2Us
IE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFz
ZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtVGV4dHVyZSAh
PSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBtVGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCk7CisK
KyAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdKTsKK30KKwordW5z
aWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCit7CisgICAg
TUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YID09IDEpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsK
KyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09
IDQpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKKworICAgIHJldHVybiBmYWNlIC0g
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworfQorCitib29sIFRleHR1cmVDdWJlTWFw
OjpkaXJ0eUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgaW50IHEgPSBsb2cyKG1XaWR0aCk7CisK
KyAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDw9IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2ZdW2ldLmRpcnR5KSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sgdGV4dHVyZSBj
b25zaXN0ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21wbGV0ZSB0ZXh0
dXJlCisvLyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleEltYWdlKS4gV2Ug
aGF2ZSBubyB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBsZXZlbHMgJiBm
YWNlcy4KKy8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGljdWxhciBsZXZlbCBvZiB0aGUgdGV4dHVy
ZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmljIGZvcm1hdCwgd2lkdGggYW5kIGhlaWdo
dC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4aXN0aW5nIHRleHR1cmUgd2FzIHVuc3Vp
dGFibGUgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28sIGl0IHdpbGwgYWxzbyBzZXQKKy8vIGEg
bmV3IHNpemUgZm9yIHRoZSB0ZXh0dXJlIGJ5IHdvcmtpbmcgYmFja3dhcmRzIGZyb20gdGhlIGdp
dmVuIHNpemUuCitib29sIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCkKK3sKKyAgICAvLyBBcmUg
dGhlc2Ugc2V0dGluZ3MgY29tcGF0aWJsZSB3aXRoIGxldmVsIDA/CisgICAgYm9vbCBzaXplT2th
eSA9IChtSW1hZ2VBcnJheVswXVswXS53aWR0aCA+PiBsZXZlbCA9PSB3aWR0aCk7CisKKyAgICBi
b29sIHRleHR1cmVPa2F5ID0gKHNpemVPa2F5ICYmIGludGVybmFsRm9ybWF0ID09IG1JbWFnZUFy
cmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICBpZiAoIXRleHR1cmVPa2F5KQorICAgIHsKKyAgICAg
ICAgVFJBQ0UoIlJlZGVmaW5pbmcgY3ViZSB0ZXh0dXJlICglZCwgMHglMDRYLCAlZCA9PiAweCUw
NFgsICVkKS4iLCBsZXZlbCwKKyAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0
LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCwKKyAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQs
IHdpZHRoKTsKKworICAgICAgICAvLyBQdXJnZSBhbGwgdGhlIGxldmVscyBhbmQgdGhlIHRleHR1
cmUuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNl
ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2ZdW2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgICAgICAgICBkcm9wVGV4dHVyZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgbVdpZHRoID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1JbWFnZUFycmF5WzBdWzBdLndp
ZHRoID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1IZWlnaHQgPSB3aWR0aCA8PCBsZXZlbDsK
KyAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0uaGVpZ2h0ID0gd2lkdGggPDwgbGV2ZWw7CisKKyAg
ICAgICAgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgfQor
CisgICAgcmV0dXJuICF0ZXh0dXJlT2theTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29w
eUltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleChm
YWNlKTsKKworICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCkpCisgICAgeworICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAg
cHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgIH0KKworICAgIEFTU0VSVCh3aWR0aCA9
PSBoZWlnaHQpOworCisgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkK
KyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0
ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291
cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7
CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBnZXRDdWJlTWFwU3VyZmFjZShm
YWNlLCBsZXZlbCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJj
ZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBk
ZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1JbWFnZUFycmF5
W2ZhY2VpbmRleF1bbGV2ZWxdLndpZHRoID0gd2lkdGg7CisgICAgbUltYWdlQXJyYXlbZmFjZWlu
ZGV4XVtsZXZlbF0uaGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1b
bGV2ZWxdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAq
VGV4dHVyZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKHVuc2lnbmVkIGludCBmYWNlSWRlbnRp
ZmllciwgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHVuc2lnbmVkIGludCBmYWNlSW5kZXg7
CisKKyAgICBpZiAoZmFjZUlkZW50aWZpZXIgPCA2KQorICAgIHsKKyAgICAgICAgZmFjZUluZGV4
ID0gZmFjZUlkZW50aWZpZXI7CisgICAgfQorICAgIGVsc2UgaWYgKGZhY2VJZGVudGlmaWVyID49
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiBmYWNlSWRlbnRpZmllciA8PSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opCisgICAgeworICAgICAgICBmYWNlSW5kZXggPSBm
YWNlSWRlbnRpZmllciAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZmFjZUluZGV4
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVy
ZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNFUz4oZmFjZUlu
ZGV4KSwgbGV2ZWwsICZzdXJmYWNlKTsKKworICAgIHJldHVybiAoU1VDQ0VFREVEKGhyKSkgPyBz
dXJmYWNlIDogTlVMTDsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdM
ZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZl
ciAqc291cmNlKQoreworICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleChm
YWNlKV1bbGV2ZWxdLndpZHRoOworCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwg
eW9mZnNldCArIGhlaWdodCA+IHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZSgwLCBtSW1h
Z2VBcnJheVswXVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKSkKKyAgICB7Cisg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNoVGV4dHVyZShtVGV4
dHVyZSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdldFJlbmRlclRh
cmdldChmYWNlKTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAg
eworICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7
CisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJl
Y3QudG9wID0geTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwg
bGV2ZWwpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdl
dFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIHhv
ZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgfQor
fQorCitib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID09IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDE7IGYgPCA2OyBmKysp
CisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1bMF0ud2lkdGggIT0gbUltYWdlQXJy
YXlbMF1bMF0ud2lkdGgKKyAgICAgICAgICAgIHx8IG1JbWFnZUFycmF5W2ZdWzBdLmZvcm1hdCAh
PSBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICghaXNQb3cyKG1J
bWFnZUFycmF5WzBdWzBdLndpZHRoKSB8fCAhaXNDdWJlQ29tcGxldGUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgLy8g
UHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2Vu
dCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cy
KG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsg
ZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9
IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLnN1
cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtmXVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlb
Zl1baV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZdW2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zd
W2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5W2ZdWzBdLmZvcm1hdDsKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZdW2ldLndpZHRoID0gc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0ud2lkdGggPj4g
aSwgMSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5oZWlnaHQgPSBtSW1hZ2VBcnJh
eVtmXVtpXS53aWR0aDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5lZWRSZW5kZXJUYXJnZXQo
KTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShm
LCBpLTEpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3ViZU1h
cFN1cmZhY2UoZiwgaSk7CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2Vy
ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5i
b3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBpZiAobG93ZXIg
IT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ29sb3Ji
dWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorewor
ICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOworCisg
ICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUZhY2VQ
cm94aWVzW2ZhY2VdID0gbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKK30KKworSURpcmVjdDNE
U3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkK
K3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAgIG5l
ZWRSZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBOVUxMOworICAgIG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RD
VUJFTUFQX0ZBQ0VTPihmYWNlSW5kZXgodGFyZ2V0KSksIDAsICZyZW5kZXJUYXJnZXQpOworCisg
ICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVy
UHJveHk6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpCisgIDogQ29sb3JidWZmZXIoTlVMTCksIG1UZXh0dXJlKHRleHR1cmUpLCBtVGFyZ2V0
KHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlm
IChtUmVuZGVyVGFyZ2V0KSBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICBtUmVuZGVy
VGFyZ2V0ID0gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKworICAgIHJldHVy
biBtUmVuZGVyVGFyZ2V0OworfQorCitpbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJv
eHk6OmdldFdpZHRoKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKCk7Cit9CisK
K2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0SGVpZ2h0KCkKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUtPmdldEhlaWdodCgpOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4
dHVyZS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNv
bmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4g
SW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxp
dHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9URVhUVVJFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hfCisKKyNpbmNs
dWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5o
PgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQ29udGV4dDsKK2NsYXNzIEJsaXQ7CisK
K2VudW0KK3sKKyAgICBNQVhfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBNQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFID0gMjA0OCwKKworICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9IDEyICAgLy8g
MStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKK307CisKK2NsYXNzIFRleHR1cmUKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IFRleHR1cmUoQ29udGV4dCAqY29udGV4dCk7CisKKyAgICB2aXJ0
dWFsIH5UZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9
IDA7CisKKyAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICBib29sIHNl
dE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFw
KTsKKyAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKKworICAgIEdMZW51bSBnZXRNaW5G
aWx0ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7CisgICAgR0xl
bnVtIGdldFdyYXBTKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CisKKyAg
ICBHTHVpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0ID0gMDsKKworICAgIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOworICAgIHZpcnR1YWwgQ29sb3JidWZmZXIg
KmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcHMoKSA9IDA7CisKKyAgICBib29sIGlzRGlydHkoKSBjb25zdDsKKworICBw
cm90ZWN0ZWQ6CisgICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7CisgICAgZnJpZW5k
IGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OworICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1
ZmZlclByb3h5IDogcHVibGljIENvbG9yYnVmZmVyCisgICAgeworICAgICAgcHVibGljOgorICAg
ICAgICBUZXh0dXJlQ29sb3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFy
Z2V0KTsKKyAgICAgICAgICAgIC8vIHRhcmdldCBpcyBhIDJELWxpa2UgdGV4dHVyZSB0YXJnZXQg
KEdMX1RFWFRVUkVfMkQgb3Igb25lIG9mIHRoZSBjdWJlIGZhY2UgdGFyZ2V0cykKKworICAgICAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAg
ICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpOworICAgICAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQo
KTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgVGV4dHVyZSAqbVRleHR1cmU7CisgICAgICAg
IEdMZW51bSBtVGFyZ2V0OworICAgIH07CisKKyAgICAvLyBIZWxwZXIgc3RydWN0dXJlIHJlcHJl
c2VudGluZyBhIHNpbmdsZSBpbWFnZSBsYXllcgorICAgIHN0cnVjdCBJbWFnZQorICAgIHsKKyAg
ICAgICAgSW1hZ2UoKTsKKyAgICAgICAgfkltYWdlKCk7CisKKyAgICAgICAgR0xzaXplaSB3aWR0
aDsKKyAgICAgICAgR0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdMZW51bSBmb3JtYXQ7CisKKyAg
ICAgICAgYm9vbCBkaXJ0eTsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZTsK
KyAgICB9OworCisgICAgc3RhdGljIEQzREZPUk1BVCBzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1h
dCk7CisgICAgaW50IGltYWdlUGl0Y2goY29uc3QgSW1hZ2UmIGltZykgY29uc3Q7CisKKyAgICBH
TGVudW0gbU1pbkZpbHRlcjsKKyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKKyAgICBHTGVudW0gbVdy
YXBTOworICAgIEdMZW51bSBtV3JhcFQ7CisKKyAgICB2b2lkIHNldEltYWdlKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQg
c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisKKyAgICB2b2lkIG5lZWRS
ZW5kZXJUYXJnZXQoKTsKKworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisgICAgR0xpbnQgY3JlYXRp
b25MZXZlbHMoR0xzaXplaSBzaXplLCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisKKyAgICAvLyBU
aGUgcG9pbnRlciByZXR1cm5lZCBpcyB3ZWFrIGFuZCBpdCBpcyBhc3N1bWVkIHRoZSBkZXJpdmVk
IGNsYXNzIHdpbGwga2VlcCBhIHN0cm9uZyBwb2ludGVyIHVudGlsIHRoZSBuZXh0IGNyZWF0ZVRl
eHR1cmUoKSBjYWxsLgorICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVU
ZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOworICAg
IHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9
IDA7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0
ID0gMDsKKworICAgIHZvaWQgZHJvcFRleHR1cmUoKTsKKyAgICB2b2lkIHB1c2hUZXh0dXJlKElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxlKTsKKworICAg
IEJsaXQgKmdldEJsaXR0ZXIoKTsKKworICAgIHVuc2lnbmVkIGludCBtV2lkdGg7CisgICAgdW5z
aWduZWQgaW50IG1IZWlnaHQ7CisKKyAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOworCisgICAgQ29u
dGV4dCAqbUNvbnRleHQ7CisKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm1CYXNlVGV4dHVy
ZTsgLy8gVGhpcyBpcyBhIHdlYWsgcG9pbnRlci4gVGhlIGRlcml2ZWQgY2xhc3MgaXMgYXNzdW1l
ZCB0byBvd24gYSBzdHJvbmcgcG9pbnRlci4KKyAgICBib29sIG1EaXJ0eU1ldGFEYXRhOworICAg
IGJvb2wgbUlzUmVuZGVyYWJsZTsKKworICAgIGJvb2wgbURpcnR5OworCisgICAgdm9pZCBsb2Fk
SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Cit9OworCitjbGFzcyBUZXh0
dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dHVy
ZTJEKENvbnRleHQgKmNvbnRleHQpOworCisgICAgflRleHR1cmUyRCgpOworCisgICAgR0xlbnVt
IGdldFRhcmdldCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVy
YnVmZmVyICpzb3VyY2UpOworICAgIHZvaWQgY29weVN1YkltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworCisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisK
KyAgICB2aXJ0dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwor
CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFz
ZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBk
aXJ0eUltYWdlRGF0YSgpIGNvbnN0OworCisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICBJbWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZFTFNdOworCisg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOworCisgICAgVGV4dHVyZUNvbG9yYnVmZmVy
UHJveHkgKm1Db2xvcmJ1ZmZlclByb3h5OworCisgICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpOworfTsKKworY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4
dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAoQ29udGV4dCAq
Y29udGV4dCk7CisKKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsKKworICAgIEdMZW51bSBnZXRUYXJn
ZXQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0
SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOworCisgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgY29weUltYWdlKEdMZW51bSBmYWNl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworICAg
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKworICAgIGJvb2wgaXNDb21wbGV0ZSgp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworCisgICAgdmly
dHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOworCisg
ICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRl
eHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXJ0
eUltYWdlRGF0YSgpIGNvbnN0OworCisgICAgLy8gZmFjZUlkZW50aWZpZXIgaXMgMC01IG9yIG9u
ZSBvZiB0aGUgR0xfVEVYVFVSRV9DVUJFX01BUF8qIGVudW1lcmFudHMuCisgICAgLy8gUmV0dXJu
cyBOVUxMIGlmIHRoZSBjYWxsIHVuZGVybHlpbmcgRGlyZWN0M0QgY2FsbCBmYWlscy4KKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQgaW50IGZhY2VJZGVu
dGlmaWVyLCB1bnNpZ25lZCBpbnQgbGV2ZWwpOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBm
YWNlSW5kZXgoR0xlbnVtIGZhY2UpOworCisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0
OworCisgICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CisgICAgdm9pZCBjb21taXRSZWN0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworICAgIGJvb2wgcmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgpOworCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bTUFYX1RF
WFRVUkVfTEVWRUxTXTsKKworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7CisK
KyAgICBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSAqbUZhY2VQcm94aWVzWzZdOworCisgICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwor
fTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTA0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gbGliR0xFU3YyLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgT3BlbkdM
IEVTIDIuMCBmdW5jdGlvbnMuCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorCisjaW5jbHVkZSA8ZXhjZXB0aW9u
PgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1
ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKK2V4dGVybiAiQyIKK3sKKwor
dm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIsIHRleHR1cmUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhU
VVJFMCArIGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRBY3RpdmVTYW1w
bGVyKHRleHR1cmUgLSBHTF9URVhUVVJFMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hTaGFkZXIoR0x1aW50
IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAg
ICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVy
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5h
dHRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQmluZEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIGNv
bnN0IEdMY2hhciogbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdM
dWludCBpbmRleCA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsIHByb2dyYW0s
IGluZGV4LCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9n
cmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzdHJuY21wKG5hbWUsICJnbF8iLCAzKSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0
YXJnZXQsIEdMdWludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYnVmZmVyKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1l
YnVmZmVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBmcmFt
ZWJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgZnJhbWVidWZmZXIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCByZW5kZXJidWZmZXIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRUZXh0dXJlKEdM
ZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMdWludCB0ZXh0dXJlID0gJWQpIiwgdGFyZ2V0LCB0ZXh0dXJlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CisK
KyAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVPYmplY3QtPmdldFRhcmdl
dCgpICE9IHRhcmdldCAmJiB0ZXh0dXJlICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4
dHVyZTJEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRU
ZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9yKEdMY2xhbXBmIHJlZCwg
R0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQoreworICAgIFRS
QUNFKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJs
dWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZikiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZENvbG9yKGdsOjpjbGFtcDAxKHJlZCksIGds
OjpjbGFtcDAxKGdyZWVuKSwgZ2w6OmNsYW1wMDEoYmx1ZSksIGdsOjpjbGFtcDAxKGFscGhhKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKQoreworICAgIGdsQmxlbmRFcXVh
dGlvblNlcGFyYXRlKG1vZGUsIG1vZGUpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSBtb2RlUkdCID0gMHglWCwgR0xlbnVtIG1vZGVBbHBoYSA9IDB4JVgpIiwg
bW9kZVJHQiwgbW9kZUFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoICht
b2RlUkdCKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKKyAgICAgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKG1vZGVBbHBoYSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRlVOQ19B
REQ6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgorICAgICAgICAgIGNhc2UgR0xf
RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRCbGVuZEVxdWF0aW9uKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmMo
R0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKQoreworICAgIGdsQmxlbmRGdW5jU2VwYXJh
dGUoc2ZhY3RvciwgZGZhY3Rvciwgc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xl
bnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gc3Jj
UkdCID0gMHglWCwgR0xlbnVtIGRzdFJHQiA9IDB4JVgsIEdMZW51bSBzcmNBbHBoYSA9IDB4JVgs
IEdMZW51bSBkc3RBbHBoYSA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNSR0IsIGRzdFJHQiwgc3Jj
QWxwaGEsIGRzdEFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzcmNS
R0IpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBH
TF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19B
TFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBI
QToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAg
ICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZHN0UkdCKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2Ug
R0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAg
ICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9S
OgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBzd2l0Y2ggKHNyY0FscGhhKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xf
U1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAg
ICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1Rf
Q09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNU
QU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJB
VEU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKGRzdEFscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAg
ICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xP
UjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2Fz
ZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgor
ICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNv
bnN0YW50Q29sb3JVc2VkID0gKHNyY1JHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBzcmNSR0Ig
PT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHN0UkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IGRzdFJHQiA9PSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpOworCisgICAgICAgIGJvb2wgY29uc3RhbnRBbHBoYVVz
ZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0FMUEhBIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
c3RSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSk7CisKKyAgICAgICAgaWYgKGNvbnN0YW50Q29sb3JVc2VkICYmIGNvbnN0YW50
QWxwaGFVc2VkKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlNpbXVsdGFuZW91cyB1c2Ug
b2YgR0xfQ09OU1RBTlRfQUxQSEEvR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIGFuZCBHTF9D
T05TVEFOVF9DT0xPUi9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgaW52YWxpZCB1bmRlciBX
ZWJHTCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNv
bnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAw
eCUwLjhwLCBHTGVudW0gdXNhZ2UgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgc2l6ZSwgZGF0
YSwgdXNhZ2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1NUUkVBTV9EUkFXOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6CisgICAgICAg
ICAgY2FzZSBHTF9EWU5BTUlDX0RSQVc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1
ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAg
ICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJ1ZmZlci0+YnVmZmVyRGF0YShkYXRhLCBzaXplLCB1c2FnZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJT
dWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplLCBj
b25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQq
IGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8IDAgfHwgb2Zmc2V0IDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoK
KyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoKHNpemVfdClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5z
aXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXItPmJ1ZmZl
clN1YkRhdGEoZGF0YSwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHTGVudW0gdGFyZ2V0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9GUkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSwgMCk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRG
cmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPmNvbXBsZXRl
bmVzcygpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihHTGJpdGZpZWxkIG1h
c2spCit7CisgICAgVFJBQ0UoIihHTGJpdGZpZWxkIG1hc2sgPSAlWCkiLCBtYXNrKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5jbGVhcihtYXNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNs
YW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7CisgICAgVFJBQ0Uo
IihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9
ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ2xlYXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgpCit7CisgICAgVFJBQ0UoIihH
TGNsYW1wZiBkZXB0aCA9ICVmKSIsIGRlcHRoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhckRlcHRoKGRl
cHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbENsZWFyU3RlbmNpbChHTGludCBzKQoreworICAgIFRSQUNFKCIoR0xp
bnQgcyA9ICVkKSIsIHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyU3RlbmNpbChzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bENvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVl
LCBHTGJvb2xlYW4gYWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdM
Ym9vbGVhbiBncmVlbiA9ICVkLCBHTGJvb2xlYW4gYmx1ZSA9ICVkLCBHTGJvb2xlYW4gYWxwaGEg
PSAlZCkiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUgPT0gR0xf
VFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdMdWludCBz
aGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKwor
ICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9i
amVjdC0+Y29tcGlsZSgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiIAorICAgICAgICAg
ICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNp
emUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6
ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRh
cmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwg
PiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8
IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1h
Z2VTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7IC8vIHVsdGltYXRlbHkgd2UgZG9uJ3Qgc3VwcG9ydCBjb21wcmVzc2VkIHRleHR1cmVz
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIFRSQUNFKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwg
R0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xz
aXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xz
aXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAg
ICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFn
bDo6SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVs
IDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4gMCAm
JiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBpbWFnZVNpemUgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoeG9mZnNldCAhPSAwIHx8IHlvZmZzZXQgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIFRoZSB0ZXh0dXJl
IGJlaW5nIG9wZXJhdGVkIG9uIGlzIG5vdCBhIGNvbXByZXNzZWQgdGV4dHVyZS4KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9y
ZGVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0g
JWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xpbnQgeCA9
ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xpbnQgYm9yZGVyID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFn
bDo6aXNQb3cyKGhlaWdodCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIGlm
ICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGds
OjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1
ZmZlcigpOworCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlU
ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9
ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAg
ICJHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICgh
Z2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZl
bCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTIHx8IHhvZmZzZXQgPCAwIHx8
IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwg
d2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwg
aGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2Ug
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworCisgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2Uo
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRh
cmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlUHJv
Z3JhbSh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVQ
cm9ncmFtKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlU2hhZGVyKEdM
ZW51bSB0eXBlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHR5cGUgPSAweCVYKSIsIHR5cGUpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFH
TUVOVF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0sIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDdWxs
RmFjZShHTGVudW0gbW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBt
b2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAg
ICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxNb2RlKG1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUJ1ZmZl
cnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNp
emVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJz
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1
ZmZlcihidWZmZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZyYW1lYnVm
ZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKQoreworICAgIFRSQUNF
KCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44cCki
LCBuLCBmcmFtZWJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGZyYW1lYnVmZmVyc1tpXSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1
ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5k
ZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJi
dWZmZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNoYWRlcihHTHVpbnQg
c2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXIgPT0gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVGV4
dHVyZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKQoreworICAgIFRSQUNFKCIo
R0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRl
eHR1cmVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
c1tpXSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQoreworICAgIFRSQUNFKCIo
R0xlbnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBz
d2l0Y2ggKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAg
ICAgIGNhc2UgR0xfQUxXQVlTOgorICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICBj
YXNlIEdMX0xFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgIGNhc2Ug
R0xfR1JFQVRFUjoKKyAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKyAgICAgICAgICBjYXNlIEdM
X05PVEVRVUFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aEZ1bmMo
ZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCit7CisgICAgVFJBQ0Uo
IihHTGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZsYWcpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoTWFzayhm
bGFnICE9IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlcHRoUmFuZ2VmKEdMY2xhbXBmIHpOZWFyLCBH
TGNsYW1wZiB6RmFyKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgek5lYXIgPSAlZiwgR0xjbGFt
cGYgekZhciA9ICVmKSIsIHpOZWFyLCB6RmFyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpO
ZWFyLCB6RmFyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERldGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50
IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFk
ZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgZ2w6OlNoYWRl
ciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7CisgICAgICAgICAg
ICAgICAgc2hhZGVyQnlQcm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
OworICAgICAgICAgICAgICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1CeVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVy
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRDdWxsRmFjZShmYWxzZSk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHln
b25PZmZzZXRGaWxsKGZhbHNlKTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdl
KGZhbHNlKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAg
ICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZShmYWxzZSk7ICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQt
PnNldFNjaXNzb3JUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3Qo
ZmFsc2UpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVT
VDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QoZmFsc2UpOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldEJsZW5kKGZhbHNlKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKGZhbHNlKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KQor
eworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5kZXgpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlz
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKK3sKKyAgICBUUkFDRSgi
KEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
KSIsIG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDAgfHwgZmlyc3QgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBt
b2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBtb2RlLCBjb3VudCwgdHlw
ZSwgaW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRW5hYmxlKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCki
LCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UodHJ1ZSk7
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKHRydWUpOyAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250
ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UodHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292
ZXJhZ2UodHJ1ZSk7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09S
X1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KHRydWUpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVw
dGhUZXN0KHRydWUpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
TEVORDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKHRydWUpOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIodHJ1ZSk7ICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0x1aW50IGluZGV4KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwg
aW5kZXgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCB0cnVlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEZpbmlzaCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmZp
bmlzaCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5mbHVzaCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xl
bnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0ID0gMHglWCwg
IgorICAgICAgICAgICJHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgfHwgcmVuZGVyYnVmZmVydGFy
Z2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRGcmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVi
dWZmZXJIYW5kbGUoKSA9PSAwIHx8ICFmcmFtZWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9B
VFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcihH
TF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwp
Cit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQg
PSAweCVYLCBHTGVudW0gdGV4dGFyZ2V0ID0gMHglWCwgIgorICAgICAgICAgICJHTHVpbnQgdGV4
dHVyZSA9ICVkLCBHTGludCBsZXZlbCA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJn
ZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKKyAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKwor
ICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgp
ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChs
ZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRD
b2xvcmJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRl
eHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0g
bW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9DVzoKKyAgICAgICAgICBjYXNlIEdMX0NDVzoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEZyb250RmFjZShtb2RlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5C
dWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXpl
aSBuID0gJWQsIEdMdWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBidWZmZXJzW2ldID0gY29udGV4dC0+Y3Jl
YXRlQnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVu
dW0gdGFyZ2V0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgor
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuRnJh
bWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7CisgICAgVFJBQ0Uo
IihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZy
YW1lYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1
ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVy
cykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMg
PSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVuZGVyYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVp
bnQqIHRleHR1cmVzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4
dHVyZXMgPSAgMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZUF0dHJpYihHTHVpbnQgcHJvZ3JhbSwgR0x1
aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUs
IEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dy
YW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVp
ICpsZW5ndGggPSAweCUwLjhwLCAiCisgICAgICAgICAgIkdMaW50ICpzaXplID0gMHglMC44cCwg
R0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAqbmFtZSA9ICUwLjhwKSIsCisgICAgICAgICAg
cHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJv
Z3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZShpbmRl
eCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBH
THNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSkK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBH
THNpemVpIGJ1ZnNpemUgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpKiBsZW5ndGggPSAweCUw
LjhwLCBHTGludCogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hh
ciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlm
b3JtQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1P
YmplY3QtPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlw
ZSwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50IHByb2dyYW0sIEdM
c2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIG1heGNvdW50ID0gJWQsIEdMc2l6
ZWkqIGNvdW50ID0gMHglMC44cCwgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCkiLAorICAgICAg
ICAgIHByb2dyYW0sIG1heGNvdW50LCBjb3VudCwgc2hhZGVycyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChtYXhjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRl
cihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNo
YWRlcnMobWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCitpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRp
b24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdM
dWludCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHByb2dyYW0sIG5h
bWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
LTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+
Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcykKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1zID0gMHglMC44cCki
LCAgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHBh
cmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBl
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisKKyAgICAgICAg
ICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNdOworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQg
KmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBH
TGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVn
ZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBH
TF9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIFtdIGludFBhcmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
aW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwg
cGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoK
KyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQSBu
dWxsIGJ1ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZl
ciB0YXJnZXQKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gYnVmZmVyLT51c2FnZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xlbnVt
IF9fc3RkY2FsbCBnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICBpZiAoY29udGV4
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRFcnJvcigpOworICAgIH0KKwor
ICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGbG9hdHYo
R0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghKGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5n
ZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJl
IGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0JPT0wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBib29s
UGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSAwLjBmOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFt
cyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBu
dW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQq
IHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1l
LCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9G
UkFNRUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xlbnVtIGF0
dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRIYW5kbGU7CisgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6ICAgIAorICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7
CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVm
ZmVyKCktPmdldENvbG9yYnVmZmVySGFuZGxlKCk7IAorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAKKyAgICAgICAgICAg
ICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRo
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0
LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVy
KCktPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhh
bmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdM
ZW51bSBhdHRhY2htZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5CisgICAgICAgICAg
ICBpZiAoYXR0YWNobWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudE9i
amVjdFR5cGUgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKGdsOjpJc1RleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfVEVYVFVSRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAg
ICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIg
fHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAgICAgICAgIGlm
IChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVyVGV4dHVyZTJE
IHdpbGwgbm90IGFsbG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNlIGluIEdMIEVT
IDIuMAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUgPSAweCVYLCBH
TGludCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFu
W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYo
cG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBi
b29sUGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBm
bG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBuYW1lID09
IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVFIHx8IHBuYW1l
ID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NPTE9SKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFyYW1zW2ldIC0g
MS4wZikgLyAyLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1zW2ldICsgMC41
KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBw
cm9ncmFtID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCki
LCBwcm9ncmFtLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVs
ZXRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xf
TElOS19TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdM
X1ZBTElEQVRFX1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVj
dC0+aXNWYWxpZGF0ZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
IGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9n
cmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0FUVEFDSEVEX1NIQURFUlM6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9BVFRSSUJV
VEVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVB
dHRyaWJ1dGVDb3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9S
TVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVu
aWZvcm1Db3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSog
bGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xj
aGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxl
bmd0aCwgaW5mb2xvZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3Ro
LCBpbmZvbG9nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVS
QlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9XSURUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVy
YnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHJlbmRlcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRGb3JtYXQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfUkVEX1NJWkU6
CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFJlZFNpemUoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9T
SVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRHcmVlblNpemUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9C
TFVFX1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZl
cigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0
YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEJsdWVTaXplKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9y
YnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0QWxwaGFT
aXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5E
RVJCVUZGRVJfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5p
c0RlcHRoYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkRlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0
RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJi
dWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpTdGVuY2lsYnVmZmVyKj4ocmVuZGVy
YnVmZmVyKS0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50IHNoYWRl
ciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNo
YWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
c2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250
ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9UWVBFOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT01QSUxFX1NU
QVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5pc0NvbXBpbGVk
KCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gc2hhZGVyT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldFNvdXJjZUxlbmd0aCgpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldFNoYWRlckluZm9Mb2coR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFk
ZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
IEdMY2hhciogaW5mb2xvZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUs
IGxlbmd0aCwgaW5mb2xvZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXpl
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsK
KworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBp
bmZvbG9nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVy
dHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lv
bikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBzaGFkZXJ0eXBlID0gMHglWCwgR0xlbnVtIHByZWNp
c2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFuZ2UgPSAweCUwLjhwLCBHTGludCogcHJlY2lzaW9u
ID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlcnR5cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdl
LCBwcmVjaXNpb24pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAg
ICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHByZWNpc2lvbnR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoKKyAgICAgICAgICBjYXNlIEdMX01FRElVTV9GTE9B
VDoKKyAgICAgICAgICBjYXNlIEdMX0hJR0hfRkxPQVQ6CisgICAgICAgICAgICAvLyBBc3N1bWUg
SUVFRSA3NTQgcHJlY2lzaW9uCisgICAgICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAgICAg
ICAgIHJhbmdlWzFdID0gMTI3OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDIzOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MT1dfSU5UOgorICAgICAgICAgIGNhc2Ug
R0xfTUVESVVNX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0hJR0hfSU5UOgorICAgICAgICAgICAg
Ly8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZs
b2F0aW5nLXBvaW50IG51bWJlcnMsCisgICAgICAgICAgICAvLyB3aGljaCBjYW4gYWNjdXJhdGVs
eSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8gKy8tMTY3NzcyMTYKKyAgICAgICAgICAgIHJhbmdl
WzBdID0gMjQ7CisgICAgICAgICAgICByYW5nZVsxXSA9IDI0OworICAgICAgICAgICAgKnByZWNp
c2lvbiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJT
b3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
Y2hhciogc291cmNlKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVp
IGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2Ug
PSAweCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFk
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYg
KCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c2hhZGVyT2JqZWN0LT5nZXRTb3VyY2UoYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2NvbnN0IEdMdWJ5dGUq
IF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGVudW0gbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51
bSBuYW1lID0gMHglWCkiLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAobmFt
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVORE9SOgorICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikiVHJhbnNHYW1pbmcgSW5jLiI7CisgICAgICAgICAgY2FzZSBHTF9SRU5E
RVJFUjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIkFOR0xFIjsKKyAgICAgICAgICBj
YXNlIEdMX1ZFUlNJT046CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMg
Mi4wIChnaXQtZGV2ZWwgIl9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKKyAgICAgICAgICBjYXNl
IEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0
ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKGdpdC1kZXZlbCAiX19EQVRFX18gIiAiIF9fVElN
RV9fIikiOworICAgICAgICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKKyAgICAgICAgICAgIHJldHVy
biAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0RXh0ZW5zaW9uU3Ry
aW5nKCkgOiAiIik7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0sIChHTHVieXRlKilOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKEdMdWJ5dGUqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiBOVUxM
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAu
OHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKwor
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUjoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0
TWluRmlsdGVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9XUkFQX1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFdyYXBTKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KXRleHR1cmUtPmdldFdyYXBUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsK
KworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UjoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBTKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRVbmlmb3JtZnYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJh
bXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlvbiA9
ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJv
Z3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgcGFyYW1zKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWl2KEdMdWludCBwcm9ncmFt
LCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBw
cm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhw
KSIsIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlm
b3JtaXYobG9jYXRpb24sIHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitpbnQgX19zdGRjYWxs
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUp
Cit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUg
PSAweCUwLjhwKSIsIHByb2dyYW0sIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKHN0
cnN0cihuYW1lLCAiZ2xfIikgPT0gbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0x
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdl
dFVuaWZvcm1Mb2NhdGlvbihuYW1lLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxv
YXQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0ZSBhdHRyaWJTdGF0ZSA9
IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KShhdHRyaWJTdGF0ZS5tRW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
SVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU2l6
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
YXR0cmliU3RhdGUubVN0cmlkZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1UeXBlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1Ob3JtYWxp
emVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9W
RVJURVhfQVRUUklCOgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0
cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1
aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihH
THVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkF0
dHJpYnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
aW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1FbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0
YXRlLm1TaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBh
dHRyaWJTdGF0ZS5tU3RyaWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0cmliU3RhdGUubVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xf
RkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZF
UlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBjdXJyZW50VmFsdWUgPSBhdHRyaWJTdGF0ZS5tQ3VycmVudFZh
bHVlW2ldOworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGN1cnJlbnRW
YWx1ZSA+IDAuMGYgPyBmbG9vcihjdXJyZW50VmFsdWUgKyAwLjVmKSA6IGNlaWwoY3VycmVudFZh
bHVlIC0gMC41ZikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihHTHVpbnQgaW5k
ZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWlu
dCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwb2ludGVyID0gMHgl
MC44cCkiLCBpbmRleCwgcG5hbWUsIHBvaW50ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBu
YW1lICE9IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgKnBvaW50ZXIgPSBjb25zdF9jYXN0PEdMdm9pZCo+KGNvbnRleHQt
PmdldFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEhpbnQoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIG1vZGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIG1vZGUgPSAweCVYKSIsIHRhcmdldCwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9HRU5F
UkFURV9NSVBNQVBfSElOVDoKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GQVNURVNUOgorICAgICAgICAgICAgICBjYXNlIEdM
X05JQ0VTVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ET05UX0NBUkU6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IAorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEdlbmVyYXRlTWlwbWFwSGludChtb2RlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19zdGRjYWxs
IGdsSXNCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBidWZmZXIg
PSAlZCkiLCBidWZmZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgYnVm
ZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXJPYmplY3QgPSBj
b250ZXh0LT5nZXRCdWZmZXIoYnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlck9iamVj
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwor
ICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBn
bElzRW5hYmxlZChHTGVudW0gY2FwKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGNhcCA9IDB4JVgp
IiwgY2FwKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxGYWNl
RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4dC0+
aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3ZlcmFn
ZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOworICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU3Rl
bmNpbFRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+
aXNCbGVuZEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
LCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dMYm9vbGVhbiBf
X3N0ZGNhbGwgZ2xJc0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIGZyYW1lYnVmZmVyKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0ICYmIGZyYW1lYnVmZmVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0RnJh
bWVidWZmZXIoZnJhbWVidWZmZXIpOworCisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xJc1Byb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYg
cHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAocHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJV
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHJlbmRlcmJ1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+
Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChyZW5kZXJi
dWZmZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RS
VUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBf
X3N0ZGNhbGwgZ2xJc1NoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCAmJiBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9i
amVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoc2hh
ZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVF
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHRleHR1cmUgPSAlZCkiLCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0ICYmIHRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0
dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAgICAgICAgICAg
aWYgKHRleHR1cmVPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsTGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCit7CisgICAgVFJBQ0UoIihHTGZs
b2F0IHdpZHRoID0gJWYpIiwgd2lkdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
d2lkdGggPD0gMC4wZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRMaW5lV2lkdGgod2lkdGgpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsTGlua1By
b2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVk
KSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3Jh
bSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5saW5rKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQaXhlbFN0b3Jl
aShHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1l
ID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFt
ICE9IDQgJiYgcGFyYW0gIT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJh
bSAhPSA0ICYmIHBhcmFtICE9IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpCit7CisgICAg
VFJBQ0UoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBHTGZsb2F0IHVuaXRzID0gJWYpIiwgZmFjdG9y
LCB1bml0cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldFBhcmFtcyhmYWN0b3IsIHVuaXRz
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVs
cykKK3sKKyAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKKyAgICAgICAgICAiR0xlbnVtIGZvcm1h
dCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIs
CisgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAgcGl4ZWxzKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoK
KyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIodm9p
ZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OlNo
YWRlcjo6cmVsZWFzZUNvbXBpbGVyKCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAg
ICAgICAgIHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKKyAg
ICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCB3aWR0
aCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUgfHwgaGVpZ2h0ID4gZ2w6Ok1BWF9SRU5ERVJC
VUZGRVJfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkRlcHRo
YnVmZmVyKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRS
ZW5kZXJidWZmZXIobmV3IGdsOjpDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZv
cm1hdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUxfSU5ERVg4OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihu
ZXcgZ2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJh
Z2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgVFJBQ0UoIihHTGNs
YW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoZ2w6OmNsYW1wMDEodmFsdWUpLCBp
bnZlcnQgPT0gR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xpbnQgeCA9ICVk
LCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCog
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JQYXJhbXMoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQq
IHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNp
emVpIGxlbmd0aCkKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQq
IHNoYWRlcnMgPSAweCUwLjhwLCBHTGVudW0gYmluYXJ5Zm9ybWF0ID0gMHglWCwgIgorICAgICAg
ICAgICJjb25zdCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQp
IiwKKyAgICAgICAgICBuLCBzaGFkZXJzLCBiaW5hcnlmb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgLy8gTm8gYmluYXJ5IHNoYWRlciBmb3JtYXRzIGFy
ZSBzdXBwb3J0ZWQuCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNoYWRl
clNvdXJjZShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJp
bmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0g
JWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiogc3RyaW5nID0gMHglMC44cCwg
Y29uc3QgR0xpbnQqIGxlbmd0aCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGNvdW50
LCBzdHJpbmcsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisK
KyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFkZXJP
YmplY3QtPnNldFNvdXJjZShjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNp
bEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCit7CisgICAgZ2xTdGVu
Y2lsRnVuY1NlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmdW5jLCByZWYsIG1hc2spOworfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51
bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGZh
Y2UgPSAweCVYLCBHTGVudW0gZnVuYyA9IDB4JVgsIEdMaW50IHJlZiA9ICVkLCBHTHVpbnQgbWFz
ayA9ICVkKSIsIGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Cisg
ICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgIGNh
c2UgR0xfQUxXQVlTOgorICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICBjYXNlIEdM
X0xFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfR0VR
VUFMOgorICAgICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKKyAgICAgICAgICBjYXNlIEdMX05PVEVR
VUFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNl
ID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldFN0ZW5jaWxQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FO
RF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5j
aWxCYWNrUGFyYW1zKGZ1bmMsIHJlZiwgbWFzayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
dGVuY2lsTWFzayhHTHVpbnQgbWFzaykKK3sKKyAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlRfQU5EX0JBQ0ssIG1hc2spOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNFKCIoR0xlbnVt
IGZhY2UgPSAweCVYLCBHTHVpbnQgbWFzayA9ICVkKSIsIGZhY2UsIG1hc2spOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZS
T05UX0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9O
VCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxXcml0ZW1hc2sobWFzayk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9B
TkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVu
Y2lsQmFja1dyaXRlbWFzayhtYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxP
cChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCit7CisgICAgZ2xTdGVu
Y2lsT3BTZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVt
IGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQoreworICAgIFRSQUNFKCIoR0xlbnVt
IGZhY2UgPSAweCVYLCBHTGVudW0gZmFpbCA9IDB4JVgsIEdMZW51bSB6ZmFpbCA9IDB4JVgsIEdM
ZW51bSB6cGFzID0gMHglWHMpIiwKKyAgICAgICAgICBmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3Mp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAg
ICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmYWlsKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBjYXNlIEdMX1JF
UExBQ0U6CisgICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2UgR0xfREVDUjoK
KyAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoK
KyAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoemZhaWwpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2Ug
R0xfUkVQTEFDRToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9E
RUNSOgorICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9X
UkFQOgorICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh6cGFzcykKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX0tFRVA6CisgICAgICAgICAg
Y2FzZSBHTF9SRVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xfSU5DUjoKKyAgICAgICAgICBjYXNl
IEdMX0RFQ1I6CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6CisgICAgICAgICAgY2FzZSBHTF9J
TkNSX1dSQVA6CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0sp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbE9wZXJh
dGlvbnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9u
cyhmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4
ZWxzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0g
JWQsIEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXpl
aSBoZWlnaHQgPSAlZCwgIgorICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZv
cm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAg
MHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIod2lkdGgpIHx8
ICFnbDo6aXNQb3cyKGhlaWdodCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAg
IGlmICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4g
KGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
KyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVybmFsZm9y
bWF0ICE9IGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JH
QjoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3Jk
ZXIgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlUG9zWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dEltYWdlTmVnWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9z
WihsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBnbFRleFBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSwgKEdMaW50KXBhcmFtKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJh
bWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFt
cykKK3sKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50KSpwYXJhbXMp
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmkoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTGludCBwYXJhbSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHRhcmdldCwgcG5h
bWUsIHBhcmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51
bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgorICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBnbFRleFBhcmFtZXRl
cmkodGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCog
cGl4ZWxzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVs
ID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAg
ICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1h
dCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJjb25zdCBHTHZvaWQq
IHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xF
VkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFn
bDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCkK
K3sKKyAgICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIDEsICZ4KTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9u
LCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xaXYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJm
KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3sKKyAgICBHTGZsb2F0IHh5
WzJdID0ge3gsIHl9OworCisgICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCop
Jnh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9j
YXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44
cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
Y291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNl
dFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTJpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQor
eworICAgIEdMaW50IHh5WzRdID0ge3gsIHl9OworCisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9u
LCAxLCAoR0xpbnQqKSZ4eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7CisgICAgVFJBQ0Uo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2
ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeikKK3sKKyAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAg
IGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3Vu
dCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50
LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KQoreworICAgIEdMaW50IHh5elsz
XSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50Kikm
eHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zaXYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHosIHd9OworCisg
ICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encpOworfQorCit2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBj
b3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNv
dW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQoreworICAg
IEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVuaWZvcm00aXYobG9jYXRp
b24sIDEsIChHTGludCopJnh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRS
QUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGlu
dCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29s
ZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dy
YW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGludCBs
b2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAl
ZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJh
bnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAg
IFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCAmJiBwcm9ncmFtICE9IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBU
UkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZh
bGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQg
eCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZikiLCBp
bmRleCwgeCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBU
UkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhw
KSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwg
MCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxz
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZs
b2F0IHkpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYs
IEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCB5LCAwLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCogdmFsdWVzKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIz
ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVm
LCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9
IHsgeCwgeSwgeiwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGlu
ZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIDEgfTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xW
ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0
IHosIEdMZmxvYXQgdykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0
IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcgPSAlZiki
LCBpbmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9
OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWIoaW5kZXgsIHZhbHVlcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBp
bmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5k
ZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAg
ICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3Qg
R0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHN0cmlkZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRl
eHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCksIHNpemUsIHR5cGUsIChub3JtYWxpemVkID09IEdM
X1RSVUUpLCBzdHJpZGUsIHB0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgiKEdMaW50IHgg
PSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0g
JWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgR0xpbnQg
Ym9yZGVyID0gJWQsICIKKyAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0
eXBlID0gMHgleCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAgICAgICAg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxs
IGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCit7CisgICAgc3RydWN0IEV4
dGVuc2lvbgorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAgIH07CisKKyAg
ICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KKyAgICB7CisgICAgICAg
IHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKKyAgICB9OworCisgICAgZm9yIChpbnQgZXh0ID0gMDsg
ZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCisg
ICAgeworICAgICAgICBpZiAoc3RyY21wKHByb2NuYW1lLCBnbEV4dGVuc2lvbnNbZXh0XS5uYW1l
KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIuZGVmCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorTElCUkFSWSBsaWJHTEVT
djIKK0VYUE9SVFMKKyAgICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAgIEAxCisgICAg
Z2xBdHRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMgorICAgIGdsQmluZEF0dHJpYkxvY2F0
aW9uICAgICAgICAgICAgQDMKKyAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAgICAgICAgIEA0
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIgICAgICAgICAgICAgICBANQorICAgIGdsQmluZFJlbmRl
cmJ1ZmZlciAgICAgICAgICAgICAgQDYKKyAgICBnbEJpbmRUZXh0dXJlICAgICAgICAgICAgICAg
ICAgIEA3CisgICAgZ2xCbGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAorICAgIGdsQmxl
bmRFcXVhdGlvbiAgICAgICAgICAgICAgICAgQDkKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0
ZSAgICAgICAgIEAxMAorICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAgICAgQDExCisg
ICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgICBAMTIKKyAgICBnbEJ1ZmZlckRhdGEg
ICAgICAgICAgICAgICAgICAgIEAxMworICAgIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAg
ICAgQDE0CisgICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUKKyAgICBnbENs
ZWFyICAgICAgICAgICAgICAgICAgICAgICAgIEAxNgorICAgIGdsQ2xlYXJDb2xvciAgICAgICAg
ICAgICAgICAgICAgQDE3CisgICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICBAMTgK
KyAgICBnbENsZWFyU3RlbmNpbCAgICAgICAgICAgICAgICAgIEAxOQorICAgIGdsQ29sb3JNYXNr
ICAgICAgICAgICAgICAgICAgICAgQDIwCisgICAgZ2xDb21waWxlU2hhZGVyICAgICAgICAgICAg
ICAgICBAMjEKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAyMgorICAgIGds
Q29tcHJlc3NlZFRleFN1YkltYWdlMkQgICAgICAgQDIzCisgICAgZ2xDb3B5VGV4SW1hZ2UyRCAg
ICAgICAgICAgICAgICBAMjQKKyAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAgICAgICAgIEAy
NQorICAgIGdsQ3JlYXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2CisgICAgZ2xDcmVhdGVT
aGFkZXIgICAgICAgICAgICAgICAgICBAMjcKKyAgICBnbEN1bGxGYWNlICAgICAgICAgICAgICAg
ICAgICAgIEAyOAorICAgIGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAgQDI5CisgICAg
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMgICAgICAgICAgICBAMzAKKyAgICBnbERlbGV0ZVByb2dyYW0g
ICAgICAgICAgICAgICAgIEAzMgorICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAgICAgICAgICAg
QDMzCisgICAgZ2xEZWxldGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKKyAgICBnbERlbGV0
ZVRleHR1cmVzICAgICAgICAgICAgICAgIEAzMQorICAgIGdsRGVwdGhGdW5jICAgICAgICAgICAg
ICAgICAgICAgQDM2CisgICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAgICBAMzcKKyAg
ICBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgIEAzOAorICAgIGdsRGV0YWNoU2hhZGVy
ICAgICAgICAgICAgICAgICAgQDM1CisgICAgZ2xEaXNhYmxlICAgICAgICAgICAgICAgICAgICAg
ICBAMzkKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAorICAgIGdsRHJh
d0FycmF5cyAgICAgICAgICAgICAgICAgICAgQDQxCisgICAgZ2xEcmF3RWxlbWVudHMgICAgICAg
ICAgICAgICAgICBANDIKKyAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIEA0Mwor
ICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICAgQDQ0CisgICAgZ2xGaW5pc2ggICAg
ICAgICAgICAgICAgICAgICAgICBANDUKKyAgICBnbEZsdXNoICAgICAgICAgICAgICAgICAgICAg
ICAgIEA0NgorICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRCAgICAgICAgICBANDgKKyAgICBnbEZyb250RmFjZSAgICAgICAg
ICAgICAgICAgICAgIEA0OQorICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAgICAgICAgQDUw
CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKKyAgICBnbEdlblJlbmRl
cmJ1ZmZlcnMgICAgICAgICAgICAgIEA1MworICAgIGdsR2VuVGV4dHVyZXMgICAgICAgICAgICAg
ICAgICAgQDU0CisgICAgZ2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBANTEKKyAgICBn
bEdldEFjdGl2ZUF0dHJpYiAgICAgICAgICAgICAgIEA1NQorICAgIGdsR2V0QWN0aXZlVW5pZm9y
bSAgICAgICAgICAgICAgQDU2CisgICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAgICAgICAgICBA
NTcKKyAgICBnbEdldEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAorICAgIGdsR2V0Qm9v
bGVhbnYgICAgICAgICAgICAgICAgICAgQDU5CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAg
ICAgICAgICBANjAKKyAgICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAgIEA2MQorICAg
IGdsR2V0RmxvYXR2ICAgICAgICAgICAgICAgICAgICAgQDYyCisgICAgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAgIEA2MworICAgIGdsR2V0SW50ZWdlcnYgICAgICAgICAg
ICAgICAgICAgQDY0CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAgICBANjYKKyAg
ICBnbEdldFByb2dyYW1pdiAgICAgICAgICAgICAgICAgIEA2NQorICAgIGdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYgICAgQDY3CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAgICAgICAgICAg
ICBANjkKKyAgICBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAorICAgIGdsR2V0
U2hhZGVyU291cmNlICAgICAgICAgICAgICAgQDcxCisgICAgZ2xHZXRTaGFkZXJpdiAgICAgICAg
ICAgICAgICAgICBANjgKKyAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAgICAgIEA3Mgor
ICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgQDczCisgICAgZ2xHZXRUZXhQYXJh
bWV0ZXJpdiAgICAgICAgICAgICBANzQKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlvbiAgICAgICAg
ICAgIEA3NworICAgIGdsR2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1CisgICAgZ2xH
ZXRVbmlmb3JtaXYgICAgICAgICAgICAgICAgICBANzYKKyAgICBnbEdldFZlcnRleEF0dHJpYlBv
aW50ZXJ2ICAgICAgIEA4MAorICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAgICAgICAgQDc4
CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKKyAgICBnbEhpbnQgICAg
ICAgICAgICAgICAgICAgICAgICAgIEA4MQorICAgIGdsSXNCdWZmZXIgICAgICAgICAgICAgICAg
ICAgICAgQDgyCisgICAgZ2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBAODMKKyAgICBn
bElzRnJhbWVidWZmZXIgICAgICAgICAgICAgICAgIEA4NAorICAgIGdsSXNQcm9ncmFtICAgICAg
ICAgICAgICAgICAgICAgQDg1CisgICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgICBA
ODYKKyAgICBnbElzU2hhZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NworICAgIGdsSXNUZXh0
dXJlICAgICAgICAgICAgICAgICAgICAgQDg4CisgICAgZ2xMaW5lV2lkdGggICAgICAgICAgICAg
ICAgICAgICBAODkKKyAgICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAgIEA5MAorICAg
IGdsUGl4ZWxTdG9yZWkgICAgICAgICAgICAgICAgICAgQDkxCisgICAgZ2xQb2x5Z29uT2Zmc2V0
ICAgICAgICAgICAgICAgICBAOTIKKyAgICBnbFJlYWRQaXhlbHMgICAgICAgICAgICAgICAgICAg
IEA5MworICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0CisgICAgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlICAgICAgICAgICBAOTUKKyAgICBnbFNhbXBsZUNvdmVyYWdlICAgICAg
ICAgICAgICAgIEA5NgorICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAgICAgQDk3Cisg
ICAgZ2xTaGFkZXJCaW5hcnkgICAgICAgICAgICAgICAgICBAOTgKKyAgICBnbFNoYWRlclNvdXJj
ZSAgICAgICAgICAgICAgICAgIEA5OQorICAgIGdsU3RlbmNpbEZ1bmMgICAgICAgICAgICAgICAg
ICAgQDEwMAorICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEwMQorICAgIGds
U3RlbmNpbE1hc2sgICAgICAgICAgICAgICAgICAgQDEwMgorICAgIGdsU3RlbmNpbE1hc2tTZXBh
cmF0ZSAgICAgICAgICAgQDEwMworICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAgICAgICAgICAg
QDEwNAorICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQorICAgIGdsVGV4
SW1hZ2UyRCAgICAgICAgICAgICAgICAgICAgQDEwNgorICAgIGdsVGV4UGFyYW1ldGVyZiAgICAg
ICAgICAgICAgICAgQDEwNworICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgICAgQDEw
OAorICAgIGdsVGV4UGFyYW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQorICAgIGdsVGV4UGFy
YW1ldGVyaXYgICAgICAgICAgICAgICAgQDExMAorICAgIGdsVGV4U3ViSW1hZ2UyRCAgICAgICAg
ICAgICAgICAgQDExMQorICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAgICAgQDExMgor
ICAgIGdsVW5pZm9ybTFmdiAgICAgICAgICAgICAgICAgICAgQDExMworICAgIGdsVW5pZm9ybTFp
ICAgICAgICAgICAgICAgICAgICAgQDExNAorICAgIGdsVW5pZm9ybTFpdiAgICAgICAgICAgICAg
ICAgICAgQDExNQorICAgIGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAgQDExNgorICAg
IGdsVW5pZm9ybTJmdiAgICAgICAgICAgICAgICAgICAgQDExNworICAgIGdsVW5pZm9ybTJpICAg
ICAgICAgICAgICAgICAgICAgQDExOAorICAgIGdsVW5pZm9ybTJpdiAgICAgICAgICAgICAgICAg
ICAgQDExOQorICAgIGdsVW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEyMAorICAgIGds
VW5pZm9ybTNmdiAgICAgICAgICAgICAgICAgICAgQDEyMQorICAgIGdsVW5pZm9ybTNpICAgICAg
ICAgICAgICAgICAgICAgQDEyMgorICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAgICAgICAgICAg
QDEyMworICAgIGdsVW5pZm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAorICAgIGdsVW5p
Zm9ybTRmdiAgICAgICAgICAgICAgICAgICAgQDEyNQorICAgIGdsVW5pZm9ybTRpICAgICAgICAg
ICAgICAgICAgICAgQDEyNgorICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAgICAgICAgQDEy
NworICAgIGdsVW5pZm9ybU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAorICAgIGdsVW5pZm9y
bU1hdHJpeDNmdiAgICAgICAgICAgICAgQDEyOQorICAgIGdsVW5pZm9ybU1hdHJpeDRmdiAgICAg
ICAgICAgICAgQDEzMAorICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgQDEzMQor
ICAgIGdsVmFsaWRhdGVQcm9ncmFtICAgICAgICAgICAgICAgQDEzMgorICAgIGdsVmVydGV4QXR0
cmliMWYgICAgICAgICAgICAgICAgQDEzMworICAgIGdsVmVydGV4QXR0cmliMWZ2ICAgICAgICAg
ICAgICAgQDEzNAorICAgIGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAgQDEzNQorICAg
IGdsVmVydGV4QXR0cmliMmZ2ICAgICAgICAgICAgICAgQDEzNgorICAgIGdsVmVydGV4QXR0cmli
M2YgICAgICAgICAgICAgICAgQDEzNworICAgIGdsVmVydGV4QXR0cmliM2Z2ICAgICAgICAgICAg
ICAgQDEzOAorICAgIGdsVmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEzOQorICAgIGds
VmVydGV4QXR0cmliNGZ2ICAgICAgICAgICAgICAgQDE0MAorICAgIGdsVmVydGV4QXR0cmliUG9p
bnRlciAgICAgICAgICAgQDE0MQorICAgIGdsVmlld3BvcnQgICAgICAgICAgICAgICAgICAgICAg
QDE0MgorCisgICAgOyBFeHRlbnNpb25zCisgICAgZ2xUZXhJbWFnZTNET0VTCQkJCQlAMTQzCisg
ICAgCisgICAgOyBFR0wgZGVwZW5kZW5jaWVzCisgICAgZ2xDcmVhdGVDb250ZXh0CQkJCQlAMTQ0
IE5PTkFNRQorICAgIGdsRGVzdHJveUNvbnRleHQJCQkJQDE0NSBOT05BTUUKKyAgICBnbE1ha2VD
dXJyZW50CQkJCQlAMTQ2IE5PTkFNRQorICAgIGdsR2V0Q3VycmVudENvbnRleHQJCQkJQDE0NyBO
T05BTUUKKyAgICBnbEdldFByb2NBZGRyZXNzICAgICAgICAgICAgICAgIEAxNDggTk9OQU1FClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZj
cHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2pl
Y3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJsaWJHTEVTdjIi
DQorCVByb2plY3RHVUlEPSJ7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSIN
CisJUm9vdE5hbWVzcGFjZT0ibGliR0xFU3YyIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRh
cmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBs
YXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xG
aWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0
aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0
aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hh
cmFjdGVyU2V0PSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZl
bnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlv
bj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8u
LjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NS
VF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1
ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSIN
CisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJ
CQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZv
cm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdl
ZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNS
ZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJl
TGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9v
bCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iRDNkeDkubGliIg0KKwkJCQlMaW5rSW5j
cmVtZW50YWw9IjIiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIg0K
KwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMiIN
CisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVu
dGlvbj0iMCINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5p
ZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4
MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1l
KVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1
b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1
b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAm
cXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYj
eDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0
aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91
dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJ
bnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3Vy
YXRpb25UeXBlPSIyIg0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQlXaG9sZVByb2dyYW1PcHRp
bWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9u
PSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJQWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9p
bmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5E
T1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05P
TUlOTUFYO19TRUNVUkVfU0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlVc2VQ
cmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2
NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9y
bWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VD
b21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29t
cGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlB
ZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJEM2R4OS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0i
MSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURl
ZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRp
b249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIy
Ig0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJl
c3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNo
aW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENv
cFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJ
CQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkg
JnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4u
XC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90
OyQoT3V0RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7
JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+
DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXIN
CisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29k
bDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEt
QzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXEJsaXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxCdWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250ZXh0LmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEZy
YW1lYnVmZmVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxT
aGFkZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxUZXh0dXJlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cdXRpbGl0aWVzLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsdGVyDQorCQkJCU5hbWU9Ikdlb21ldHJ5Ig0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcYmFja2VuZC5jcHAiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxkeDkuY3Bw
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFuYWdlci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxWZXJ0ZXhEYXRhTWFu
YWdlci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwvRmls
dGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7
aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXEJsaXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbnRleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVc
R0xFUzJcZ2wyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMmV4dC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJw
bGF0Zm9ybS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxtYWluLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXG1hdGh1dGlsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJl
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
XHV0aWxpdGllcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFt
ZT0iR2VvbWV0cnkiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxn
ZW9tZXRyeVxiYWNrZW5kLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxkeDkuaCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XEluZGV4RGF0YU1h
bmFnZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRp
dmVQYXRoPSIuXGdlb21ldHJ5XHZlcnRleGNvbnZlcnNpb24uaCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XFZlcnRleERh
dGFNYW5hZ2VyLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwv
RmlsdGVyPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiINCisJ
CQk+DQorCQk8L0ZpbGU+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQor
PC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmNwcDogRExMIGVudHJ5IHBv
aW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxp
YkVHTC9TdXJmYWNlLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKwor
c3RhdGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CisKK0JPT0wgV0lO
QVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNl
cnZlZCkKK3sKKyAgICBzd2l0Y2ggKHJlYXNvbikKKyAgICB7CisgICAgICBjYXNlIERMTF9QUk9D
RVNTX0FUVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgY3VycmVudFRMUyA9IFRsc0FsbG9j
KCk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0ZfSU5ERVhFUykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXplIGlu
ZGV4CisgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6Q3VycmVudCAqY3VycmVudCA9IChnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBz
aXplb2YoZ2w6OkN1cnJlbnQpKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7
CisKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50LT5kaXNwbGF5ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKwor
ICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
TG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKKyAgICAgICAgewor
ICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisg
ICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
b2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
VGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitu
YW1lc3BhY2UgZ2wKK3sKK3ZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgQ3VycmVudCAq
Y3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJl
bnQtPmNvbnRleHQgPSBjb250ZXh0OworICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkaXNwbGF5Owor
CisgICAgaWYgKGNvbnRleHQgJiYgZGlzcGxheSAmJiBzdXJmYWNlKQorICAgIHsKKyAgICAgICAg
Y29udGV4dC0+bWFrZUN1cnJlbnQoZGlzcGxheSwgc3VyZmFjZSk7CisgICAgfQorfQorCitDb250
ZXh0ICpnZXRDb250ZXh0KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmNvbnRleHQ7Cit9
CisKK2VnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9
IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50
LT5kaXNwbGF5OworfQorCitJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKQoreworICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKworICAgIHJldHVybiBkaXNwbGF5
LT5nZXREZXZpY2UoKTsKK30KK30KKworLy8gUmVjb3JkcyBhbiBlcnJvciBjb2RlCit2b2lkIGVy
cm9yKEdMZW51bSBlcnJvckNvZGUpCit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbEdl
dEN1cnJlbnRDb250ZXh0KCk7CisKKyAgICBpZiAoY29udGV4dCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoZXJyb3JDb2RlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX0VO
VU06CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRW51bSgpOworICAgICAgICAg
ICAgZ2w6OnRyYWNlKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGVudW1cbiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX1ZBTFVFOgorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZFZhbHVlKCk7CisgICAgICAgICAgICBnbDo6dHJh
Y2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICAgICAgICAgIGdsOjp0cmFj
ZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBvcGVyYXRpb25cbiIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3JkT3V0T2ZNZW1vcnkoKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgiXHQh
IEVycm9yIGdlbmVyYXRlZDogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7CisgICAg
ICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZm
ZXIgb3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6IE1hbmFnZW1l
bnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpZm5kZWYgTElCR0xFU1YyX01BSU5fSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX01BSU5fSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJF
R0wvRGlzcGxheS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNw
YWNlIGdsCit7CitzdHJ1Y3QgQ3VycmVudAoreworICAgIENvbnRleHQgKmNvbnRleHQ7CisgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5OworfTsKKwordm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpj
b250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisK
K0NvbnRleHQgKmdldENvbnRleHQoKTsKK2VnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpOworCitJ
RGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKTsKK30KKwordm9pZCBlcnJvcihHTGVudW0gZXJy
b3JDb2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEdMZW51bSBlcnJv
ckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9yQ29kZSk7CisK
KyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQUlO
X0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5oOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9u
IGZ1bmN0aW9ucy4KKworI2lmbmRlZiBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX01BVEhVVElMX0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAor
eworaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkp
ID09IDAgJiYgKHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBp
bnQgciA9IDA7CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOwor
fQorCitpbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAg
IGlmICh4ICE9IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAg
ICB4IHw9IHggPj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAg
eCsrOworCisgICAgcmV0dXJuIHg7Cit9CisKK2lubGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgp
Cit7CisgICAgcmV0dXJuIHggPCAwID8gMCA6ICh4ID4gMSA/IDEgOiB4KTsKK30KKwordGVtcGxh
dGU8Y29uc3QgaW50IG4+CitpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0IHgpCit7Cisg
ICAgY29uc3QgdW5zaWduZWQgaW50IG1heCA9IDB4RkZGRkZGRkYgPj4gKDMyIC0gbik7CisKKyAg
ICBpZiAoeCA+IDEpCisgICAgeworICAgICAgICByZXR1cm4gbWF4OworICAgIH0KKyAgICBlbHNl
IGlmICh4IDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkobWF4ICogeCArIDAuNWYpOworICAg
IH0KK30KK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xp
YkdMRVN2Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxMCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gdXRpbGl0aWVzLmNwcDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90
aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51
bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6
CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICBj
YXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBH
TF9CT09MX1ZFQzM6CisgICAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgcmV0dXJuIDk7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6CisgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVudW0gVW5pZm9y
bUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNl
IEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICAgIHJldHVy
biBHTF9CT09MOworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAg
ICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0lO
VF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgICByZXR1cm4gR0xfSU5U
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBHTF9OT05FOworfQorCitzaXplX3QgVW5pZm9ybVR5cGVTaXplKEdMZW51bSB0eXBl
KQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDogIHJldHVy
biBzaXplb2YoR0xib29sZWFuKTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2Yo
R0xmbG9hdCk7CisgICAgICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gVW5pZm9ybVR5cGVTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5
cGUpKSAqIFVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKK30KKworaW50IFZhcmlhYmxlUm93
Q291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAg
ICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX0JPT0xf
VkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIHJldHVy
biAxOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gMjsKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIHJldHVybiAx
OworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAg
ICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IEFsbG9jYXRl
Rmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9u
U2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKQoreworICAgIEFTU0VSVChhbGxvY2F0aW9uU2l6
ZSA8PSBiaXRzU2l6ZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgPj4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgaW50Pjo6ZGlnaXRzIC0gYWxsb2NhdGlvblNpemUpOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBiaXRzU2l6ZSAtIGFsbG9jYXRpb25TaXplICsgMTsgaSsrKQorICAgIHsK
KyAgICAgICAgaWYgKCgqYml0cyAmIG1hc2spID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpiaXRzIHw9IG1hc2s7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1hc2sgPDw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitHTHNpemVpIENv
bXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgYWxpZ25tZW50KQoreworICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGln
bm1lbnQpKTsKKworICAgIEdMc2l6ZWkgcmF3UGl0Y2ggPSBDb21wdXRlUGl4ZWxTaXplKGZvcm1h
dCwgdHlwZSkgKiB3aWR0aDsKKyAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25tZW50IC0gMSkg
JiB+KGFsaWdubWVudCAtIDEpOworfQorCisvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywg
b2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKK2ludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5z
aWduZWQgY2hhcik7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBz
aXplb2YodW5zaWduZWQgY2hhcik7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
IHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyOworICAgICAgICAgIGNhc2UgR0xfUkdC
OiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMzsKKyAgICAgICAg
ICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAq
IDQ7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuICh0
YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIHRhcmdldCA8PSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElzVGV4dHVyZVRhcmdldChH
TGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJ
c0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCk7Cit9CisKKy8vIFZlcmlmeSB0aGF0IGZvcm1h
dC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KK2Jvb2wg
Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToK
KyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAg
ICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSk7CisKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzU6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7CisKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworbmFt
ZXNwYWNlIGVzMmR4Cit7CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNv
bXBhcmlzb24pCit7CisgICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKKyAg
ICBzd2l0Y2ggKGNvbXBhcmlzb24pCisgICAgeworICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNk
Q29tcCA9IEQzRENNUF9ORVZFUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdBWVM6
ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9M
RVNTOiAgICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVS
RVFVQUw7IGJyZWFrOworICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9O
T1RFUVVBTDsgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZDNkQ29tcDsKK30KKworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpD
b2xvciBjb2xvcikKK3sKKyAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29s
b3IucmVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3Jl
ZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKK30K
KworRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCit7CisgICAgRDNEQkxF
TkQgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOworCisgICAgc3dpdGNoIChibGVuZCkKKyAgICB7
CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9aRVJPOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORTogICAgICAgICAg
ICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9TUkNDT0xPUjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09M
T1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9E
RVNUQ09MT1I7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6
ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNB
TFBIQTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAg
ICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQ
SEE7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0NPTlNUQU5UX0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RP
UjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNk
QmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxl
bmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19B
TFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBkM2RCbGVuZDsKK30KKworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRP
cCkKK3sKKyAgICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKKworICAg
IHN3aXRjaCAoYmxlbmRPcCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAg
ICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NV
QlRSQUNUOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBk
M2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQorCitE
M0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQoreworICAgIEQz
RFNURU5DSUxPUCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKKworICAgIHN3aXRj
aCAoc3RlbmNpbE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tFRVA6ICAg
ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVh
azsKKyAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1Bf
SU5DUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0g
RDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJyZWFrOworICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQz
ZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xf
SU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7
ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZDNkU3RlbmNpbE9wOworfQorCitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVy
ZVdyYXAoR0xlbnVtIHdyYXApCit7CisgICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQz
RFRBRERSRVNTX1dSQVA7CisKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBH
TF9SRVBFQVQ6ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1Nf
Q0xBTVA7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAg
PSBEM0RUQUREUkVTU19NSVJST1I7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkV3JhcDsKK30KKworRDNEQ1VMTCBDb252ZXJ0Q3Vs
bE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQoreworICAgIEQzRENVTEwg
Y3VsbCA9IEQzRENVTExfQ0NXOworICAgIHN3aXRjaCAoY3VsbEZhY2UpCisgICAgeworICAgICAg
Y2FzZSBHTF9GUk9OVDoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
Q1VMTF9DVyA6IEQzRENVTExfQ0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JB
Q0s6CisgICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDog
RDNEQ1VMTF9DVyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFD
SzoKKyAgICAgICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRs
ZWQgZHVyaW5nIGRyYXcKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiBjdWxsOworfQorCitEV09SRCBDb252ZXJ0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAg
cmV0dXJuIChyZWQgICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAwKSB8CisgICAgICAg
ICAgIChncmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gOiAwKSB8CisgICAgICAgICAg
IChibHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAwKSB8CisgICAgICAgICAgIChh
bHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgOiAwKTsKK30KKworRDNEVEVYVFVSRUZJ
TFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKQoreworICAgIEQzRFRF
WFRVUkVGSUxURVJUWVBFIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgc3dpdGNo
IChtYWdGaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkM2RNYWdGaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjogIGQzZE1hZ0Zp
bHRlciA9IEQzRFRFWEZfTElORUFSOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZE1hZ0ZpbHRlcjsKK30KKwordm9pZCBDb252ZXJ0
TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5G
aWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpCit7CisgICAgc3dpdGNo
IChtaW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgICAqZDNk
TWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRF
WEZfTk9ORTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAg
KmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0g
RDNEVEVYRl9OT05FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAg
ICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0g
RDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAg
ICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRl
ciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFS
X01JUE1BUF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsK
KyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwor
ICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBz
dGVuY2lsRm9ybWF0KQoreworICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQorICAgIHsKKyAgICAg
IGNhc2UgRDNERk1UX0QyNEZTODoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAgICAgIHJldHVybiA0Owor
ICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBE
M0RGTVRfRDE2X0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgY2FzZSBE
M0RGTVRfRDI0WDg6CisgICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorICAgICAgY2Fz
ZSBEM0RGTVRfRDE2OgorICAgICAgICByZXR1cm4gMDsKKy8vICAgICAgY2FzZSBEM0RGTVRfRDMy
X0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQorLy8gICAgICBjYXNl
IEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAg
c3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIx
MDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAg
ICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVH
NUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICByZXR1cm4gMDsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNp
Z25lZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNo
IChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAg
ICAgICAgcmV0dXJuIDEwOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9B
MVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgIGNhc2UgRDNERk1UX1gx
UjVHNUI1OgorICAgICAgICByZXR1cm4gNTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0R3JlZW5TaXplKEQz
REZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsK
KyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4gMTA7CisgICAg
ICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAg
ICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgY2FzZSBE
M0RGTVRfWDFSNUc1QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgY2FzZSBEM0RGTVRfUjVH
NkI1OgorICAgICAgICByZXR1cm4gNjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCisgICAgeworICAg
ICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAxMDsKKyAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAg
IHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICBjYXNlIEQzREZN
VF9SNUc2QjU6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgcmV0dXJuIDU7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30K
KwordW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChkZXB0aEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMTZfTE9D
S0FCTEU6ICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9EMzI6ICAgICAgICAgICByZXR1
cm4gMzI7CisgICAgICBjYXNlIEQzREZNVF9EMTVTMTogICAgICAgICByZXR1cm4gMTU7CisgICAg
ICBjYXNlIEQzREZNVF9EMjRTODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZN
VF9EMjRYODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OiAg
ICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICByZXR1cm4g
MTY7CisgICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOiByZXR1cm4gMzI7CisgICAgICBj
YXNlIEQzREZNVF9EMjRGUzg6ICAgICAgICByZXR1cm4gMjQ7CisvLyAgICAgIGNhc2UgRDNERk1U
X0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBEM0Q5RXggb25seQorLy8gICAgICBjYXNl
IEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gMDsgICAgLy8gRDNEOUV4IG9ubHkKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCitib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNp
emVpIHByaW1pdGl2ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJ
VkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KQoreworICAg
IHN3aXRjaCAocHJpbWl0aXZlVHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAg
ICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9QT0lOVExJU1Q7CisgICAgICAgICpkM2RQ
cmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50OworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTElORVM6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORUxJU1Q7
CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC8gMjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgICAgKmQzZFByaW1pdGl2
ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHBy
aW1pdGl2ZUNvdW50OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoK
KyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgICpk
M2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQ
VF9UUklBTkdMRUxJU1Q7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNv
dW50IC8gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgor
ICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7CisgICAgICAg
ICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUg
PSBEM0RQVF9UUklBTkdMRUZBTjsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0
aXZlQ291bnQgLSAyOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRDNERk9STUFUIENv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0Ex
OiAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNhc2UgR0xfUkdC
NTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OworICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIHJl
dHVybiBEM0RGTVRfRDI0Uzg7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICBy
ZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgIH0KK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xp
YkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
dXRpbGl0aWVzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRp
bmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9VVElMSVRJRVNfSAorI2RlZmluZSBMSUJHTEVTVjJf
VVRJTElUSUVTX0gKKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8ZDNkOS5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworc3RydWN0IENvbG9yOwor
CitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3Jt
Q29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybVR5cGVTaXplKEdMZW51
bSB0eXBlKTsKK2ludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKK2ludCBWYXJpYWJs
ZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKTsKKworaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1
bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwgdW5zaWduZWQg
aW50IGJpdHNTaXplKTsKKworaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpOworR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCk7Citib29sIElzQ3ViZW1hcFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Citib29sIElzVGV4dHVyZVRhcmdldChHTGVudW0gdGFy
Z2V0KTsKK2Jvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSk7CisKK30KKworbmFtZXNwYWNlIGVzMmR4Cit7CisKK0QzRENNUEZVTkMgQ29udmVydENv
bXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpD
b2xvciBjb2xvcik7CitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7CitE
M0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKK0QzRFNURU5DSUxPUCBD
b252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOworRDNEVEVYVFVSRUFERFJFU1MgQ29u
dmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdM
ZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7CitEV09SRCBDb252ZXJ0Q29sb3JNYXNr
KGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworRDNEVEVYVFVS
RUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKTsKK3ZvaWQgQ29u
dmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKTsKK3Vuc2lnbmVk
IGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBH
ZXRSZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0R3JlZW5T
aXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNE
Rk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXREZXB0aFNpemUoRDNERk9STUFU
IGRlcHRoRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3Rl
bmNpbEZvcm1hdCk7Citib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVU
eXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQUklNSVRJVkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50
KTsKK0QzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOwor
Cit9CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
Z2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHA6IERlZmluZXMgdGhlIEluZGV4RGF0YU1hbmFn
ZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3Mg
Zm9yIGluZGV4IGJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhE
YXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworbmFtZXNwYWNlCit7CisgICAg
ZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2ICogc2l6ZW9mKEdMdWludCkg
fTsKK30KKworbmFtZXNwYWNlIGdsCit7CisKK0luZGV4RGF0YU1hbmFnZXI6OkluZGV4RGF0YU1h
bmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCkKKyAgOiBtQ29u
dGV4dChjb250ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1JbnRJbmRpY2VzU3VwcG9ydGVkKGJh
Y2tlbmQtPnN1cHBvcnRJbnRJbmRpY2VzKCkpCit7CisgICAgbUNvdW50aW5nQnVmZmVyID0gTlVM
TDsKKyAgICBtQ291bnRpbmdCdWZmZXJTaXplID0gMDsKKworICAgIG1MaW5lTG9vcEJ1ZmZlciA9
IE5VTEw7CisKKyAgICBtU3RyZWFtQnVmZmVyU2hvcnQgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhC
dWZmZXIoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpOworCisg
ICAgaWYgKG1JbnRJbmRpY2VzU3VwcG9ydGVkKQorICAgIHsKKyAgICAgICAgbVN0cmVhbUJ1ZmZl
ckludCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihJTklUSUFMX0lOREVYX0JVRkZFUl9T
SVpFLCBHTF9VTlNJR05FRF9JTlQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
U3RyZWFtQnVmZmVySW50ID0gTlVMTDsKKyAgICB9Cit9CisKK0luZGV4RGF0YU1hbmFnZXI6On5J
bmRleERhdGFNYW5hZ2VyKCkKK3sKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlclNob3J0OworICAg
IGRlbGV0ZSBtU3RyZWFtQnVmZmVySW50OworICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7Cisg
ICAgZGVsZXRlIG1MaW5lTG9vcEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlCit7CisKK3RlbXBsYXRl
IDxjbGFzcyBJbnB1dEluZGV4VHlwZSwgY2xhc3MgT3V0cHV0SW5kZXhUeXBlPgordm9pZCBjb3B5
SW5kaWNlcyhjb25zdCBJbnB1dEluZGV4VHlwZSAqaW4sIEdMc2l6ZWkgY291bnQsIE91dHB1dElu
ZGV4VHlwZSAqb3V0LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQoreworICAg
IElucHV0SW5kZXhUeXBlIGZpcnN0ID0gKmluOworICAgIEdMdWludCBtaW5JbmRleFNvRmFyID0g
Zmlyc3Q7CisgICAgR0x1aW50IG1heEluZGV4U29GYXIgPSBmaXJzdDsKKworICAgIGZvciAoR0xz
aXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAobWluSW5kZXhT
b0ZhciA+ICppbikgbWluSW5kZXhTb0ZhciA9ICppbjsKKyAgICAgICAgaWYgKG1heEluZGV4U29G
YXIgPCAqaW4pIG1heEluZGV4U29GYXIgPSAqaW47CisKKyAgICAgICAgKm91dCsrID0gKmluKys7
CisgICAgfQorCisgICAgLy8gSXQgbWlnaHQgYmUgYSBsaW5lIGxvb3AsIHNvIGNvcHkgdGhlIGxv
b3AgaW5kZXguCisgICAgKm91dCA9IGZpcnN0OworCisgICAgKm1pbkluZGV4ID0gbWluSW5kZXhT
b0ZhcjsKKyAgICAqbWF4SW5kZXggPSBtYXhJbmRleFNvRmFyOworfQorCit9CisKK0dMZW51bSBJ
bmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5
cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lk
ICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQoreworICAgIEFTU0VS
VCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSB8
fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7CisgICAgQVNTRVJUKGNvdW50ID4gMCk7CisKKyAg
ICBpZiAoYXJyYXlFbGVtZW50QnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBHTHNpemVp
IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaXplaT4oaW5kaWNlcyk7CisKKyAgICAgICAg
aWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBvZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6OnNp
emVfdD4oYXJyYXlFbGVtZW50QnVmZmVyLT5zaXplKCkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKworICAgICAgICBpbmRp
Y2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGFycmF5RWxlbWVudEJ1ZmZlci0+ZGF0
YSgpKSArIG9mZnNldDsKKyAgICB9CisKKyAgICB0cmFuc2xhdGVkLT5jb3VudCA9IGNvdW50Owor
CisgICAgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9IHNwYWNlUmVxdWlyZWQodHlwZSwgY291
bnQpOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHByZXBhcmVJbmRl
eEJ1ZmZlcih0eXBlLCByZXF1aXJlZFNwYWNlKTsKKworICAgIHNpemVfdCBvZmZzZXQ7CisgICAg
dm9pZCAqb3V0cHV0ID0gc3RyZWFtSWItPm1hcChyZXF1aXJlZFNwYWNlLCAmb2Zmc2V0KTsKKwor
ICAgIHRyYW5zbGF0ZWQtPmJ1ZmZlciA9IHN0cmVhbUliOworICAgIHRyYW5zbGF0ZWQtPm9mZnNl
dCA9IG9mZnNldDsKKyAgICB0cmFuc2xhdGVkLT5pbmRleFNpemUgPSBpbmRleFNpemUodHlwZSk7
CisKKyAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAgICAgICAgY29u
c3QgR0x1Ynl0ZSAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcyk7Cisg
ICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisK
KyAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRl
eCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBH
TF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBjb25zdCBHTHVpbnQgKmluID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcyk7CisKKyAgICAgICAgaWYgKG1JbnRJbmRpY2Vz
U3VwcG9ydGVkKQorICAgICAgICB7CisgICAgICAgICAgICBHTHVpbnQgKm91dCA9IHN0YXRpY19j
YXN0PEdMdWludCo+KG91dHB1dCk7CisKKyAgICAgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3Vu
dCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXaGVuIDMy
LWJpdCBpbmRpY2VzIGFyZSB1bnN1cHBvcnRlZCwgZmFrZSB0aGVtIGJ5IHRydW5jYXRpbmcgdG8g
MTYtYml0LgorCisgICAgICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hv
cnQqPihvdXRwdXQpOworCisgICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwg
JnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdXNob3J0ICppbiA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyk7CisgICAgICAgIEdMdXNob3J0ICpv
dXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAgY29weUluZGlj
ZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1h
eEluZGV4KTsKKyAgICB9CisKKyAgICBzdHJlYW1JYi0+dW5tYXAoKTsKKworICAgIHJldHVybiBH
TF9OT19FUlJPUjsKK30KKworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXpl
KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQgJiYgbUludEluZGljZXNTdXBwb3J0ZWQpID8gc2l6ZW9mKEdMdWludCkgOiBzaXplb2YoR0x1
c2hvcnQpOworfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVu
dW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6IHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6IHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIHNpemVvZihH
THVieXRlKTsKKyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnNwYWNl
UmVxdWlyZWQoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChjb3VudCArIDEpICogaW5kZXhTaXplKHR5cGUpOyAvLyArMSBiZWNhdXNlIHdlIGFsd2F5cyBs
ZWF2ZSBhbiBleHRyYSBmb3IgbGluZSBsb29wcworfQorCitUcmFuc2xhdGVkSW5kZXhCdWZmZXIg
KkluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleEJ1ZmZlcihHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3QgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBib29sIHVzZTMyID0gKHR5cGUgPT0gR0xfVU5T
SUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKTsKKworICAgIFRyYW5zbGF0ZWRJbmRl
eEJ1ZmZlciAqc3RyZWFtSWIgPSB1c2UzMiA/IG1TdHJlYW1CdWZmZXJJbnQgOiBtU3RyZWFtQnVm
ZmVyU2hvcnQ7CisKKyAgICBpZiAocmVxdWlyZWRTcGFjZSA+IHN0cmVhbUliLT5zaXplKCkpCisg
ICAgeworICAgICAgICBzdGQ6OnNpemVfdCBuZXdTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFj
ZSwgMiAqIHN0cmVhbUliLT5zaXplKCkpOworCisgICAgICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZl
ciAqbmV3U3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKG5ld1NpemUs
IHVzZTMyID8gR0xfVU5TSUdORURfSU5UIDogR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgICAg
IGRlbGV0ZSBzdHJlYW1JYjsKKworICAgICAgICBzdHJlYW1JYiA9IG5ld1N0cmVhbUJ1ZmZlcjsK
KworICAgICAgICBpZiAodXNlMzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdHJlYW1CdWZm
ZXJJbnQgPSBzdHJlYW1JYjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1TdHJlYW1CdWZmZXJTaG9ydCA9IHN0cmVhbUliOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RyZWFtSWItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNlKTsKKworICAgIHJl
dHVybiBzdHJlYW1JYjsKK30KKworR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZVJlbmRlclZh
bGlkYXRlVW5pbmRleGVkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICppbmRleEluZm8pCit7CisgICAgaWYgKGNvdW50ID49IDY1NTM1KSByZXR1cm4gR0xf
T1VUX09GX01FTU9SWTsKKworICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7Cisg
ICAgICAgIC8vIEZvciBsaW5lIGxvb3BzLCBjcmVhdGUgYSBzaW5nbGUtdXNlIGJ1ZmZlciB0aGF0
IHJ1bnMgMCAtIGNvdW50LTEsIDAuCisgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7Cisg
ICAgICAgIG1MaW5lTG9vcEJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcigoY291
bnQrMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAg
ICAgICAgdW5zaWduZWQgc2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dCAqPihtTGluZUxvb3BCdWZmZXItPm1hcCgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljZXNbaV0gPSBpOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5kaWNlc1tjb3VudF0gPSAwOworCisgICAgICAgIG1MaW5l
TG9vcEJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICBpbmRleEluZm8tPmJ1ZmZlciA9IG1MaW5l
TG9vcEJ1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50ICsgMTsKKyAgICAg
ICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bUNvdW50aW5nQnVmZmVyU2l6ZSA8IGNvdW50KQorICAgIHsKKyAgICAgICAgbUNvdW50aW5nQnVm
ZmVyU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PEdMc2l6ZWk+KGNlaWxQb3cyKGNvdW50KSks
IG1Db3VudGluZ0J1ZmZlclNpemUqMik7CisKKyAgICAgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZl
cjsKKyAgICAgICAgbUNvdW50aW5nQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVy
KGNvdW50ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgR0xfVU5TSUdORURfU0hPUlQpOworCisg
ICAgICAgIHVuc2lnbmVkIHNob3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQgKj4obUNvdW50aW5nQnVmZmVyLT5tYXAoKSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsK
KyAgICAgICAgfQorCisgICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKKworICAgICAg
ICBpbmRleEluZm8tPmJ1ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZv
LT5jb3VudCA9IGNvdW50OworICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAx
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbmRleEluZm8tPmJ1ZmZlciA9IG1D
b3VudGluZ0J1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50OworICAgICAg
ICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKworICAgIGluZGV4SW5m
by0+aW5kZXhTaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICBpbmRleEluZm8tPm1p
bkluZGV4ID0gMDsKKyAgICBpbmRleEluZm8tPm9mZnNldCA9IDA7CisKKyAgICByZXR1cm4gR0xf
Tk9fRVJST1I7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5k
ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0
cnkvSW5kZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2
Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaDog
RGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBC
dWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4KKworI2lmbmRlZiBM
SUJHTEVTVjJfR0VPTUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXworI2RlZmluZSBMSUJHTEVTVjJf
R0VPTUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXworCisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1
ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5o
PgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CisK
K2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXI7CitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyOworCitzdHJ1Y3QgVHJhbnNsYXRlZElu
ZGV4RGF0YQoreworICAgIEdMdWludCBtaW5JbmRleDsKKyAgICBHTHVpbnQgbWF4SW5kZXg7Cisg
ICAgR0x1aW50IGNvdW50OworICAgIEdMdWludCBpbmRleFNpemU7CisKKyAgICBUcmFuc2xhdGVk
SW5kZXhCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHTHNpemVpIG9mZnNldDsKK307CisKK2NsYXNzIElu
ZGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVibGljOgorICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4
dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCk7CisgICAgfkluZGV4RGF0YU1hbmFn
ZXIoKTsKKworICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVt
IHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2
b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsKKyAgICBHTGVu
dW0gcHJlUmVuZGVyVmFsaWRhdGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6
OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7Cisg
ICAgc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKEdMZW51bSB0eXBlKSBj
b25zdDsKKyAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50KSBjb25zdDsKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnByZXBhcmVJbmRleEJ1
ZmZlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSk7CisKKyAgICBDb250
ZXh0ICptQ29udGV4dDsKKyAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKworICAgIGJvb2wg
bUludEluZGljZXNTdXBwb3J0ZWQ7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1TdHJl
YW1CdWZmZXJTaG9ydDsKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXJJ
bnQ7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1Db3VudGluZ0J1ZmZlcjsKKyAgICBH
THNpemVpIG1Db3VudGluZ0J1ZmZlclNpemU7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIg
Km1MaW5lTG9vcEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01F
VFJZX0lOREVYREFUQU1BTkFHRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0
cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjcxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9WZXJ0
ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0
aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSA8bGlt
aXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5
L0luZGV4RGF0YU1hbmFnZXIuaCIKKworbmFtZXNwYWNlCit7CisgICAgZW51bSB7IElOSVRJQUxf
U1RSRUFNX0JVRkZFUl9TSVpFID0gMTAyNCoxMDI0IH07Cit9CisKK25hbWVzcGFjZSBnbAorewor
CitWZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwg
QnVmZmVyQmFja0VuZCAqYmFja2VuZCkKKyAgICA6IG1Db250ZXh0KGNvbnRleHQpLCBtQmFja2Vu
ZChiYWNrZW5kKSwgbURpcnR5Q3VycmVudFZhbHVlcyh0cnVlKSwgbUN1cnJlbnRWYWx1ZU9mZnNl
dCgwKQoreworICAgIG1TdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVy
KElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFKTsKKyAgICB0cnkKKyAgICB7CisgICAgICAgIG1D
dXJyZW50VmFsdWVCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRl
WmVybyg0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgfQorICAg
IGNhdGNoICguLi4pCisgICAgeworICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICAg
ICAgdGhyb3c7CisgICAgfQorfQorCitWZXJ0ZXhEYXRhTWFuYWdlcjo6flZlcnRleERhdGFNYW5h
Z2VyKCkKK3sKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICBkZWxldGUgbUN1cnJlbnRW
YWx1ZUJ1ZmZlcjsKK30KKworc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBWZXJ0ZXhE
YXRhTWFuYWdlcjo6Z2V0QWN0aXZlQXR0cmlicygpIGNvbnN0Cit7CisgICAgc3RkOjpiaXRzZXQ8
TUFYX1ZFUlRFWF9BVFRSSUJTPiBhY3RpdmU7CisKKyAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRl
eCsrKQorICAgIHsKKyAgICAgICAgYWN0aXZlW2F0dHJpYnV0ZUluZGV4XSA9IChwcm9ncmFtLT5n
ZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgfQorCisgICAgcmV0
dXJuIGFjdGl2ZTsKK30KKworR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxp
ZGF0ZShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCkKK3sK
KyAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmlicyA9IG1Db250ZXh0LT5nZXRWZXJ0ZXhB
dHRyaWJCbG9jaygpOworICAgIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4g
YWN0aXZlQXR0cmlicyA9IGdldEFjdGl2ZUF0dHJpYnMoKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoIWFjdGl2
ZUF0dHJpYnNbaV0gJiYgYXR0cmlic1tpXS5tRW5hYmxlZCAmJiBhdHRyaWJzW2ldLm1Cb3VuZEJ1
ZmZlciAhPSAwICYmICFtQ29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVy
KSkKKyAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAg
ICAgICAgdHJhbnNsYXRlZFtpXS5lbmFibGVkID0gYWN0aXZlQXR0cmlic1tpXTsKKyAgICB9CisK
KyAgICBib29sIHVzZXNDdXJyZW50VmFsdWVzID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2
ZUF0dHJpYnNbaV0gJiYgIWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVzZXNDdXJyZW50VmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIHRoZSBpZGVudGl0eS1tYXBwZWQgYXR0cmlidXRl
cy4KKyAgICAvLyBQcm9jZXNzIGFycmF5IGF0dHJpYnV0ZXMuCisKKyAgICBzdGQ6OnNpemVfdCBy
ZXF1aXJlZFNwYWNlID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tpXSAmJiBhdHRy
aWJzW2ldLm1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlZFNwYWNlICs9
IHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtU3RyZWFtQnVmZmVyLT5zaXplKCkpCisgICAgeworICAg
ICAgICBzdGQ6OnNpemVfdCBuZXdTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFjZSwgMyAqIG1T
dHJlYW1CdWZmZXItPnNpemUoKSAvIDIpOyAvLyAxLjUgeCBtU3RyZWFtQnVmZmVyLT5zaXplKCkg
aXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgYmUgY2hlY2tlZCB0byBzZWUgd2UgZG9uJ3QgaGF2ZSB0
b28gbWFueSByZWFsbG9jYXRpb25zLgorCisgICAgICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIg
Km5ld1N0cmVhbUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXIobmV3U2l6ZSk7
CisKKyAgICAgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgICAgIG1TdHJlYW1CdWZmZXIg
PSBuZXdTdHJlYW1CdWZmZXI7CisgICAgfQorCisgICAgbVN0cmVhbUJ1ZmZlci0+cmVzZXJ2ZVNw
YWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYm
IGF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvcm1hdENvbnZl
cnRlciBmb3JtYXRDb252ZXJ0ZXIgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVyKGF0dHJp
YnNbaV0ubVR5cGUsIGF0dHJpYnNbaV0ubVNpemUsIGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQpOwor
CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vbkFycmF5ID0gZmFsc2U7CisgICAgICAgICAg
ICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBhdHRyaWJzW2ldLm1UeXBlOworICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5zaXplID0gYXR0cmlic1tpXS5tU2l6ZTsKKyAgICAgICAgICAgIHRyYW5zbGF0
ZWRbaV0ubm9ybWFsaXplZCA9IGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQ7CisgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLnN0cmlkZSA9IGZvcm1hdENvbnZlcnRlci5vdXRwdXRWZXJ0ZXhTaXplOwor
ICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIgPSBtU3RyZWFtQnVmZmVyOworCisgICAg
ICAgICAgICBzaXplX3QgaW5wdXRTdHJpZGUgPSBpbnRlcnByZXRHbFN0cmlkZShhdHRyaWJzW2ld
KTsKKyAgICAgICAgICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IHR5cGVTaXplKGF0dHJpYnNbaV0u
bVR5cGUpICogYXR0cmlic1tpXS5tU2l6ZTsKKworICAgICAgICAgICAgdm9pZCAqb3V0cHV0ID0g
bVN0cmVhbUJ1ZmZlci0+bWFwKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQpLCAmdHJh
bnNsYXRlZFtpXS5vZmZzZXQpOworCisgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dDsKKyAg
ICAgICAgICAgIGlmIChhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9IG1Db250ZXh0LT5nZXRCdWZmZXIoYXR0cmli
c1tpXS5tQm91bmRCdWZmZXIpOworCisgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihhdHRyaWJzW2ldLm1Qb2ludGVyKTsKKworICAgICAgICAg
ICAgICAgIC8vIEJlZm9yZSB3ZSBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHNpemUgYmVsb3csIG1h
a2Ugc3VyZSBpdCBjYW4gYmUgY29tcHV0ZWQgd2l0aG91dCBpbnRlZ2VyIG92ZXJmbG93LgorICAg
ICAgICAgICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkg
LSBzdGFydCA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihjb3VudCkKKyAgICAgICAgICAgICAg
ICAgICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC8gaW5wdXRT
dHJpZGUgPCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc3RhcnQgKyBjb3VudCAtIDEpIC8vIGl0
J3MgYSBwcmVyZXF1aXNpdGUgdGhhdCBjb3VudCA+PSAxLCBzbyBzdGFydCtjb3VudC0xID49IDAu
CisgICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+
OjptYXgoKSAtIG9mZnNldCA8IGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQgLSAxKQorICAg
ICAgICAgICAgICAgICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4
KCkgLSBlbGVtZW50U2l6ZSA8IG9mZnNldCArIGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQg
LSAxKSArIGVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50
U2l6ZSA+IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSArIG9m
ZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpbnB1dCA9IGF0dHJpYnNbaV0ubVBvaW50ZXI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSAr
IGlucHV0U3RyaWRlICogc3RhcnQ7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXRDb252ZXJ0ZXIu
aWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogaW5wdXRTdHJpZGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvcm1hdENvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRl
LCBjb3VudCwgb3V0cHV0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0cmVhbUJ1
ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1c2VzQ3VycmVudFZh
bHVlcykKKyAgICB7CisgICAgICAgIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoYXR0cmlicywg
YWN0aXZlQXR0cmlicywgdHJhbnNsYXRlZCwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiBH
TF9OT19FUlJPUjsKK30KKworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnR5cGVTaXpl
KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX0JZVEU6IGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIHNpemVvZihHTGJ5dGUp
OworICAgICAgY2FzZSBHTF9TSE9SVDogY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIHNp
emVvZihHTHNob3J0KTsKKyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiBzaXplb2YoR0xmaXhl
ZCk7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICB9Cit9
CisKK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjppbnRlcnByZXRHbFN0cmlkZShjb25z
dCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiBhdHRyaWIubVN0
cmlkZSA/IGF0dHJpYi5tU3RyaWRlIDogdHlwZVNpemUoYXR0cmliLm1UeXBlKSAqIGF0dHJpYi5t
U2l6ZTsKK30KKworLy8gUm91bmQgdXAgeCAoPj0wKSB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBt
dWx0aXBsZSAoPjApLgorLy8gMCByb3VuZHMgdXAgdG8gMC4KK3N0ZDo6c2l6ZV90IFZlcnRleERh
dGFNYW5hZ2VyOjpyb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6ZV90IG11bHRpcGxlKSBj
b25zdAoreworICAgIEFTU0VSVCh4ID49IDApOworICAgIEFTU0VSVChtdWx0aXBsZSA+IDApOwor
CisgICAgc3RkOjpzaXplX3QgcmVtYWluZGVyID0geCAlIG11bHRpcGxlOworICAgIGlmIChyZW1h
aW5kZXIgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB4ICsgbXVsdGlwbGUgLSByZW1haW5k
ZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KK30K
Kworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQoY29uc3QgQXR0
cmlidXRlU3RhdGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVydGV4KSBjb25zdAoreworICAg
IHN0ZDo6c2l6ZV90IHNpemUgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVyKGF0dHJpYi5t
VHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIubU5vcm1hbGl6ZWQpLm91dHB1dFZlcnRleFNpemU7
CisgICAgc2l6ZSAqPSBtYXhWZXJ0ZXg7CisKKyAgICByZXR1cm4gcm91bmRVcChzaXplLCA0ICog
c2l6ZW9mKEdMZmxvYXQpKTsKK30KKwordm9pZCBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJvY2Vzc05v
bkFycmF5QXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmlicywgY29uc3Qgc3Rk
OjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiAmYWN0aXZlQXR0cmlicywgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqdHJhbnNsYXRlZCwgc3RkOjpzaXplX3QgY291bnQpCit7CisgICAgaWYgKG1EaXJ0
eUN1cnJlbnRWYWx1ZXMpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCB0b3RhbFNpemUgPSA0
ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUzsKKworICAgICAgICBtQ3VycmVu
dFZhbHVlQnVmZmVyLT5yZXNlcnZlU3BhY2UodG90YWxTaXplKTsKKworICAgICAgICBmbG9hdCog
Y3VycmVudFZhbHVlcyA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obUN1cnJlbnRWYWx1ZUJ1ZmZlci0+
bWFwKHRvdGFsU2l6ZSwgJm1DdXJyZW50VmFsdWVPZmZzZXQpKTsKKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR0xfRkxPQVR4NCBpcyBzdXBwb3J0ZWQgYnkg
dGhlIGJhY2stZW5kLiAoRm9yIEQzRDksIGl0IGlzIGEgbWFuZGF0b3J5IGZvcm1hdC4pCisgICAg
ICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCswXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsw
XTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzFdID0gYXR0cmlic1tpXS5tQ3VycmVu
dFZhbHVlWzFdOworICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMl0gPSBhdHRyaWJzW2ld
Lm1DdXJyZW50VmFsdWVbMl07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCszXSA9IGF0
dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVszXTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJyZW50
VmFsdWVCdWZmZXItPnVubWFwKCk7CisgICAgfQorCisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2
ZUF0dHJpYnNbaV0gJiYgIWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkgPSB0cnVlOworCisgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXI7CisKKyAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0udHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zaXpl
ID0gNDsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9ybWFsaXplZCA9IGZhbHNlOworICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSAwOworICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0ICsgNCAqIHNpemVvZihmbG9hdCkgKiBp
OworICAgICAgICB9CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dl
b21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9WZXJ0ZXhE
YXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0
CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKworI2lmbmRlZiBMSUJH
TEVTVjJfR0VPTUVUUllfVkVSVEVYREFUQU1BTkFHRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dF
T01FVFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVk
ZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgQnVmZmVyOworY2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0
ZXhCdWZmZXI7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK3N0cnVjdCBGb3JtYXRDb252
ZXJ0ZXI7CitzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKKworY2xhc3MgVmVydGV4RGF0YU1h
bmFnZXIKK3sKKyAgcHVibGljOgorICAgIFZlcnRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRl
eHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpOworICAgIH5WZXJ0ZXhEYXRhTWFuYWdlcigpOwor
CisgICAgdm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZXMoKSB7IG1EaXJ0eUN1cnJlbnRWYWx1ZXMgPSB0
cnVlOyB9CisKKyAgICBHTGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMpOworCisgIHByaXZh
dGU6CisgICAgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBnZXRBY3RpdmVBdHRyaWJz
KCkgY29uc3Q7CisKKyAgICB2b2lkIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoY29uc3QgQXR0
cmlidXRlU3RhdGUgKmF0dHJpYnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklC
Uz4gJmFjdGl2ZUF0dHJpYnMsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIHN0ZDo6
c2l6ZV90IGNvdW50KTsKKworICAgIHN0ZDo6c2l6ZV90IHR5cGVTaXplKEdMZW51bSB0eXBlKSBj
b25zdDsKKyAgICBzdGQ6OnNpemVfdCBpbnRlcnByZXRHbFN0cmlkZShjb25zdCBBdHRyaWJ1dGVT
dGF0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHN0ZDo6c2l6ZV90IHJvdW5kVXAoc3RkOjpzaXpl
X3QgeCwgc3RkOjpzaXplX3QgbXVsdGlwbGUpIGNvbnN0OworICAgIHN0ZDo6c2l6ZV90IHNwYWNl
UmVxdWlyZWQoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVy
dGV4KSBjb25zdDsKKworICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIEJ1ZmZlckJhY2tFbmQg
Km1CYWNrZW5kOworCisgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlcjsK
KworICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlczsKKyAgICBzdGQ6OnNpemVfdCBtQ3VycmVu
dFZhbHVlT2Zmc2V0OyAgICAgICAgICAgIC8vIE9mZnNldCB3aXRoaW4gbUN1cnJlbnRWYWx1ZUJ1
ZmZlciB0aGF0IHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB2YWx1ZXMgd2VyZSBsYXN0IGxvYWRlZCBh
dC4KKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVmZmVyOworfTsK
KworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYREFUQU1BTkFHRVJf
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5
L2JhY2tlbmQuaDogQWJzdHJhY3QgY2xhc3NlcyBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIKKy8vIHRoYXQgbXVzdCBiZSBpbXBs
ZW1lbnRlZCBieSBhbnkgQVBJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEFOR0xFLgorCisj
aW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCAqVHJhbnNsYXRlZEJ1ZmZlcjo6
bWFwKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZzZXQpCit7Cisg
ICAgQVNTRVJUKHJlcXVpcmVkU3BhY2UgPD0gbUJ1ZmZlclNpemUpOworCisgICAgcmVzZXJ2ZVNw
YWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgKm9mZnNldCA9IG1DdXJyZW50UG9pbnQ7CisgICAg
bUN1cnJlbnRQb2ludCArPSByZXF1aXJlZFNwYWNlOworCisgICAgcmV0dXJuIHN0cmVhbWluZ01h
cCgqb2Zmc2V0LCByZXF1aXJlZFNwYWNlKTsKK30KKwordm9pZCBUcmFuc2xhdGVkQnVmZmVyOjpy
ZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBpZiAobUN1cnJl
bnRQb2ludCArIHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIHJl
Y3ljbGUoKTsKKyAgICAgICAgbUN1cnJlbnRQb2ludCA9IDA7CisgICAgfQorfQorCit9CkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvYmFja2VuZC5oOiBB
YnN0cmFjdCBjbGFzc2VzIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5k
IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgorLy8gdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFu
eSBBUEktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgQU5HTEUuCisKKyNpZm5kZWYgTElCR0xF
U1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tF
TkRfSF8KKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFt
ZXNwYWNlIGdsCit7CitjbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOworY2xhc3MgVHJhbnNs
YXRlZEluZGV4QnVmZmVyOworCitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyCit7CisgICAgYm9vbCBp
ZGVudGl0eTsKKyAgICBzdGQ6OnNpemVfdCBvdXRwdXRWZXJ0ZXhTaXplOworICAgIHZvaWQgKCpj
b252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6
ZV90IG4sIHZvaWQgKm91dCk7Cit9OworCitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZQorewor
ICAgIGJvb2wgZW5hYmxlZDsKKyAgICBib29sIG5vbkFycmF5OworCisgICAgLy8gVGhlc2UgYXJl
IHRoZSBvcmlnaW5hbCB1bnRyYW5zbGF0ZWQgdmFsdWVzLiAoT3IganVzdCBoYXZlIHNvbWUgc29y
dCBvZiBCdWZmZXJCYWNrRW5kOjpUcmFuc2xhdGVkVHlwZUtleS4pCisgICAgR0xlbnVtIHR5cGU7
CisgICAgc3RkOjpzaXplX3Qgc2l6ZTsKKyAgICBib29sIG5vcm1hbGl6ZWQ7CisKKyAgICBzdGQ6
OnNpemVfdCBvZmZzZXQ7CisKKyAgICBzdGQ6OnNpemVfdCBzdHJpZGU7IC8vIDAgbWVhbnMgbm90
IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRlciBhdCBhbGwKKworICAgIHN0ZDo6c2l6ZV90IHNl
bWFudGljSW5kZXg7CisKKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpidWZmZXI7Cit9Owor
CitjbGFzcyBCdWZmZXJCYWNrRW5kCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5CdWZmZXJC
YWNrRW5kKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydEludEluZGljZXMoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZl
cihzdGQ6OnNpemVfdCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6ZV90IHNpemUpID0g
MDsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIo
c3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIEZvcm1hdENv
bnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUs
IGJvb2wgbm9ybWFsaXplKSA9IDA7CisKKyAgICAvLyBGb3IgYW4gaWRlbnRpdHktbWFwcGFibGUg
c3RyZWFtLCB2ZXJpZnkgdGhhdCB0aGUgc3RyaWRlIGFuZCBvZmZzZXQgYXJlIG9rYXkuCisgICAg
dmlydHVhbCBib29sIHZhbGlkYXRlU3RyZWFtKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXpl
LCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9mZnNldCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICZpbmRleEluZm8pID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEF0dHJpYnV0
ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpID0gMDsKK307
CisKK2NsYXNzIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRy
YW5zbGF0ZWRCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBtQnVmZmVyU2l6ZShzaXplKSwgbUN1
cnJlbnRQb2ludCgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UcmFuc2xhdGVkQnVmZmVyKCkgeyB9CisK
KyAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCAqbWFwKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpID0g
MDsKKworICAgIHZvaWQgcmVzZXJ2ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpOwor
CisgICAgdm9pZCAqbWFwKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpv
ZmZzZXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6
c2l6ZV90IHNpemUpID0gMDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6c2l6ZV90IG1CdWZmZXJT
aXplOworICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50UG9pbnQ7CisKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVHJhbnNsYXRlZEJ1ZmZlcik7Cit9OworCitjbGFzcyBUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4
cGxpY2l0IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBUcmFuc2xh
dGVkQnVmZmVyKHNpemUpIHsgfQorfTsKKworY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyIDog
cHVibGljIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRyYW5z
bGF0ZWRJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IFRyYW5zbGF0ZWRCdWZmZXIoc2l6
ZSkgeyB9Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9CQUNLRU5E
X0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYxMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvZHg5Lmg6IERp
cmVjdDNEIDktYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRl
ZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L2R4OS5oIgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCisK
K25hbWVzcGFjZQoreworLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXggYXR0cmliIHR5
cGUgdG8gRDNEIGRlY2wgdHlwZToKKy8vCisvLyBCWVRFICAgICAgICAgICAgICAgICBTSE9SVCAo
Q2FzdCkKKy8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUpIChjYW4ndCBi
ZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCisvLyBVTlNJR05FRF9CWVRFICAg
ICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKKy8vIFVOU0lHTkVEX0JZVEUt
bm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gU0hPUlQg
ICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQorLy8gU0hPUlQtbm9ybSAgICAgICAgICAg
U0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBVTlNJR05FRF9T
SE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKKy8vIFVOU0lHTkVEX1NIT1JULW5vcm0gIFVTSE9SVC1u
b3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIEZJWEVEIChub3QgaW4gV2Vi
R0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCisvLyBGTE9BVCAgICAgICAgICAgICAgICBGTE9BVCAo
SWRlbnRpdHkpCisKKy8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMgR0xlbnVtKSB0
byB0aGUgQyB0eXBlZGVmLiAKK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NU
eXBlIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiB7IHR5cGVk
ZWYgR0xieXRlIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lH
TkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0
IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiB7IHR5cGVk
ZWYgR0x1aW50IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FU
PiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OworCisvLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RE
RUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVk
IGxhc3QuKQorZW51bSBEM0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQsCisgICAgRDNE
VlRfU0hPUlQsCisgICAgRDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllURSwKKyAgICBE
M0RWVF9VQllURV9OT1JNLAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisvLyBEM0RUb0NU
eXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBl
PiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9y
dCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21i
aW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMg
dG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXpl
LgordGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4KK3N0cnVjdCBXaWRlblJ1
bGUKK3sKK307CisKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9G
TE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8
aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDog
Z2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6
ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRF
LCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8
aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDog
Z2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6
ZT4geyB9OworCisvLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xU
eXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXgg
dHlwZSAmIHNpemUgY29tYmluYXRpb24uCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUs
IGludCBzaXplPgorc3RydWN0IFZlcnRleFR5cGVGbGFncworeworfTsKKwordGVtcGxhdGUgPHVu
c2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVjbGZsYWc+CitzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzSGVscGVyCit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBjYXBmbGFnIH07CisgICAg
ZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAs
IEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZ
UEVfRkxPQVQyPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+
IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JN
LCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZ
UEVfVUJZVEU0Tj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9S
VDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OworCisKKy8vIFZl
cnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJy
ZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMp
LgordGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4KK3N0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZworeworfTsKKwordGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVk
LCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgorc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nQmFzZQoreworICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKKyAgICBl
bnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OworfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDog
VmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllU
RSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8
RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNl
PiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RW
VF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAg
ICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElkZW50aXR5Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
U0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1h
bGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NI
T1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAg
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FU
PiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaXhlZFRvRmxvYXQKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKKwor
CisvLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNp
b25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXpl
LCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KKy8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1z
ZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgorCisvLyBBbG1vc3QgYWxs
IGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1
YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBw
aW5nKS4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWdu
ZWQgaW50IHRvVHlwZT4KK3N0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1l
IEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6
dHlwZT4KK3sKK307CisKKy8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMg
dG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3IuCit0ZW1wbGF0ZSA8R0xlbnVtIGZy
b21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9
OworCisvLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJl
ZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxv
YXQgcnVsZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRy
dWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxP
QVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07CisKKy8vIEEgMi1zdGFnZSBj
b25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0
IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hldGhlciBpdCBp
cyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+
CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMgoreworfTsKKwordGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6IGdsOjpO
b3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogZ2w6OlNpbXBsZURlZmF1bHRW
YWx1ZXM8VD4geyB9OworCisvLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBydWxlIGZvciBh
IEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kIAordGVtcGxhdGUgPGNsYXNz
IFQsIGJvb2wgbm9ybWFsaXplZD4KK3N0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVkPgoreworfTsKKwordGVtcGxhdGUgPGJv
b2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1hbGl6
ZWQ+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8gUG9saWN5IHJ1
bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUg
cHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJhY2sgY29udmVy
c2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9y
dC4KK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUg
PSBUOjpwcmVmZXJyZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJh
Y2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZlcnRlciB0aWVz
IGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9p
Y2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92aWRlcyBhbGwg
dGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBE
M0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUgRDNEREVDTFRZ
UEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4K
K3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRl
bXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBDb252ZXJ0ZXIK
KyAgICA6IGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlw
ZT46OnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
LCBzaXplPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZy
b21UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBy
ZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6
dHlwZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVz
PHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZy
b21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KK3sKK3By
aXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1h
cHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKKyAgICBlbnVtIHsgZDNkc2l6
ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OworCitwdWJsaWM6Cisg
ICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNh
cGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwg
ZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9OworCit9CisKK25hbWVzcGFjZSBnbAoreworRHg5QmFj
a0VuZDo6RHg5QmFja0VuZChDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkM2Rk
ZXZpY2UpCisgICAgOiBtRGV2aWNlKGQzZGRldmljZSkKK3sKKyAgICBtRGV2aWNlLT5BZGRSZWYo
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyArK2kpCisg
ICAgeworICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJsZWRbaV0gPSB0cnVlOworICAgICAgICBt
U3RyZWFtRnJlcXVlbmN5W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKKyAgICB9
CisKKyAgICBtU3RyZWFtRnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCU10gPSBTVFJFQU1fRlJF
UVVFTkNZX1VOSU5TVEFOQ0VEOworCisgICAgRDNEQ0FQUzkgY2FwcyA9IGNvbnRleHQtPmdldERl
dmljZUNhcHMoKTsKKworICAgIElEaXJlY3QzRDkgKmQzZE9iamVjdDsKKyAgICBtRGV2aWNlLT5H
ZXREaXJlY3QzRCgmZDNkT2JqZWN0KTsKKworICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgaWRl
bnQ7CisgICAgZDNkT2JqZWN0LT5HZXRBZGFwdGVySWRlbnRpZmllcihjYXBzLkFkYXB0ZXJPcmRp
bmFsLCAwLCAmaWRlbnQpOworICAgIGQzZE9iamVjdC0+UmVsZWFzZSgpOworCisgICAgLy8gSW5z
dGFuY2luZyBpcyBtYW5kYXRvcnkgZm9yIGFsbCBIVyB3aXRoIFNNMyB2ZXJ0ZXggc2hhZGVycywg
YnV0IGF2b2lkIGhhcmR3YXJlIHdoZXJlIGl0IGRvZXMgbm90IHdvcmsuCisgICAgbVVzZUluc3Rh
bmNpbmdGb3JTdHJpZGVaZXJvID0gKGNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbiA+PSBEM0RWU19W
RVJTSU9OKDMsIDApICYmIGlkZW50LlZlbmRvcklkICE9IDB4ODA4Nik7CisgICAgbVN1cHBvcnRJ
bnRJbmRpY2VzID0gKGNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpKTsKKworICAgIGNo
ZWNrVmVydGV4Q2FwcyhjYXBzLkRlY2xUeXBlcyk7Cit9CisKK0R4OUJhY2tFbmQ6On5EeDlCYWNr
RW5kKCkKK3sKKyAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Cit9CisKK2Jvb2wgRHg5QmFja0VuZDo6
c3VwcG9ydEludEluZGljZXMoKQoreworICAgIHJldHVybiBtU3VwcG9ydEludEluZGljZXM7Cit9
CisKKy8vIEluaXRpYWxpc2UgYSBUcmFuc2xhdGlvbkluZm8KKyNkZWZpbmUgVFJBTlNMQVRJT04o
dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVm
ZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+KENvbnZl
cnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKKyAgICB9CisK
KyNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0sIHNpemUp
ICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZl
cnJlZD46OmNhcGZsYWcsIFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwg
VXNlUHJlZmVycmVkKSwgICAgICAgIFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwg
c2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgVFJBTlNMQVRJ
T05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElP
Tl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKKyAgICAgICAgeyBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwg
NCkgfSwgICAgIFwKKyAgICB9CisKK2NvbnN0IER4OUJhY2tFbmQ6OlRyYW5zbGF0aW9uRGVzY3Jp
cHRpb24gRHg5QmFja0VuZDo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRU
UklCX1RZUEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRl
eCgpXVtub3JtYWxpemVkXVtzaXplLTFdCit7CisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdM
X0JZVEUpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKKyAg
ICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfU0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1Jf
VFlQRShHTF9VTlNJR05FRF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZJ
WEVEKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfRkxPQVQpCit9OworCit2b2lkIER4
OUJhY2tFbmQ6OmNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtr
XS5mYWxsYmFja0NvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCitUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpEeDlCYWNrRW5k
OjpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3
IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBzaXplKTsKK30KKworVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNp
emVfdCBzaXplKQoreworICAgIGlmIChtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8pCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBzaXplKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXJa
ZXJvU3RyaWRlV29ya2Fyb3VuZChtRGV2aWNlLCBzaXplKTsKKyAgICB9Cit9CisKK1RyYW5zbGF0
ZWRJbmRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qg
c2l6ZSwgR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIG5ldyBEeDlJbmRleEJ1ZmZlcihtRGV2
aWNlLCBzaXplLCB0eXBlKTsKK30KKworLy8gVGhpcyBpcyB1c2VkIHRvIGluZGV4IG1BdHRyaWJ1
dGVUeXBlcyBhbmQgbVBvc3NpYmxlVHJhbnNsYXRpb25zLgordW5zaWduZWQgaW50IER4OUJhY2tF
bmQ6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURTogcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDog
cmV0dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7CisgICAgfQorfQorCitGb3JtYXRDb252ZXJ0ZXIg
RHg5QmFja0VuZDo6Z2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBz
aXplLCBib29sIG5vcm1hbGl6ZSkKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0ZVR5cGVzW3R5cGVJ
bmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFdLmZvcm1hdENvbnZlcnRlcjsKK30KKworRDNE
REVDTFRZUEUgRHg5QmFja0VuZDo6bWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BdHRyaWJ1
dGVUeXBlc1t0eXBlSW5kZXgodHlwZSldW25vcm1hbGl6ZV1bc2l6ZS0xXS5kM2REZWNsVHlwZTsK
K30KKworYm9vbCBEeDlCYWNrRW5kOjp2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0
Cit7CisgICAgLy8gRDNEOSByZXF1aXJlcyB0aGUgc3RyZWFtIG9mZnNldCBhbmQgc3RyaWRlIHRv
IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkQuCisgICAgcmV0dXJuIChzdHJpZGUgJSBzaXplb2YoRFdP
UkQpID09IDAgJiYgb2Zmc2V0ICUgc2l6ZW9mKERXT1JEKSA9PSAwKTsKK30KKworSURpcmVjdDNE
VmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlciAqdmIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZiID8gc3RhdGljX2Nhc3Q8RHg5VmVydGV4
QnVmZmVyKj4odmIpLT5nZXRCdWZmZXIoKSA6IE5VTEw7Cit9CisKK0lEaXJlY3QzREluZGV4QnVm
ZmVyOSAqRHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVmZmVyICppYikg
Y29uc3QKK3sKKyAgICByZXR1cm4gaWIgPyBzdGF0aWNfY2FzdDxEeDlJbmRleEJ1ZmZlcio+KGli
KS0+Z2V0QnVmZmVyKCkgOiBOVUxMOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6c2V0dXBJbmRp
Y2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pCit7CisgICAg
bURldmljZS0+U2V0SW5kaWNlcyhnZXREeEJ1ZmZlcihpbmRleEluZm8uYnVmZmVyKSk7CisgICAg
cmV0dXJuIEdMX05PX0VSUk9SOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6c2V0dXBBdHRyaWJ1
dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKQoreworICAg
IEhSRVNVTFQgaHI7CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVY
X0FUVFJJQlMrMV07CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSAqbmV4dEVsZW1lbnQgPSAmZWxl
bWVudHNbMF07CisKKyAgICBmb3IgKEJZVEUgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5TdHJlYW0gPSBpICsgMTsgICAgLy8gU3RyZWFt
IDAgaXMgc2tpcHBlZCBiZWNhdXNlIEQzRCBkb2VzIG5vdCBwZXJtaXQgaXQgdG8gYmUgYW4gaW5z
dGFuY2VkIHN0cmVhbS4KKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5PZmZzZXQgPSAwOworICAg
ICAgICAgICAgbmV4dEVsZW1lbnQtPlR5cGUgPSBzdGF0aWNfY2FzdDxCWVRFPihtYXBBdHRyaWJ1
dGVUeXBlKGF0dHJpYnV0ZXNbaV0udHlwZSwgYXR0cmlidXRlc1tpXS5zaXplLCBhdHRyaWJ1dGVz
W2ldLm5vcm1hbGl6ZWQpKTsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5NZXRob2QgPSBEM0RE
RUNMTUVUSE9EX0RFRkFVTFQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNhZ2UgPSBEM0RE
RUNMVVNBR0VfVEVYQ09PUkQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNhZ2VJbmRleCA9
IGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50Kys7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkg
ZW5kID0gRDNEREVDTF9FTkQoKTsKKyAgICAqbmV4dEVsZW1lbnQgPSBlbmQ7CisKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkqIHZlcnRleERlY2xhcmF0aW9uOworICAgIGhyID0gbURl
dmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZ2ZXJ0ZXhEZWNsYXJhdGlv
bik7CisgICAgbURldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24odmVydGV4RGVjbGFyYXRpb24p
OworICAgIHZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7CisKKyAgICBtRGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7CisKKyAgICBib29sIG5vbkFycmF5QXR0cmlidXRl
cyA9IGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLm5vbkFycmF5KSBub25BcnJheUF0
dHJpYnV0ZXMgPSB0cnVlOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uo
aSArIDEsIGdldER4QnVmZmVyKGF0dHJpYnV0ZXNbaV0uYnVmZmVyKSwgYXR0cmlidXRlc1tpXS5v
ZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKKyAgICAgICAgICAgIGlmICghbUFwcGxpZWRB
dHRyaWJFbmFibGVkW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1BcHBsaWVk
QXR0cmliRW5hYmxlZFtpXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUFwcGxpZWRBdHRyaWJFbmFibGVk
W2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNv
dXJjZShpICsgMSwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRBdHRyaWJFbmFi
bGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB0
aGVyZSBhcmUgbm8gc3RyaWRlIHplcm8gYXR0cmlidXRlcywgd2UgZGlzYWJsZSBpbnN0YW5jaW5n
IHNvIHRoYXQgRHJhd1ByaW1pdGl2ZSBjYW4gYmUgdXNlZC4KKworICAgICAgICBpZiAobm9uQXJy
YXlBdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5j
eVswXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVswXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsK
KyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIEQzRFNUUkVB
TVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJh
eSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1T
dHJlYW1GcmVxdWVuY3lbaSsxXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RyZWFt
RnJlcXVlbmN5W2krMV0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RT
VFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1
ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2kr
MV0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpICsgMSwgRDNEU1RSRUFNU09VUkNFX0lO
REVYRUREQVRBIHwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUyArIDE7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpXSAhPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFO
Q0VEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1
ZW5jeVtpXSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCwgYnV0IG90aGVyd2lzZSB0aGVyZSBp
cyBhIGJ1Z2d5IGRyaXZlciB0aGF0IHdpbGwgbGVhdmUgaW5zdGFuY2luZworICAgICAgICAgICAg
ICAgICAgICAvLyBlbmFibGVkIGZvciB0aGUgZmlyc3QgZHJhdyBhZnRlciBpdCBoYXMgYmVlbiB0
dXJuZWQgb2ZmLgorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VG
cmVxKGksIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOworCisgICAgICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX05P
X0VSUk9SOworfQorCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OkR4OVZlcnRleEJ1ZmZl
cihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpCisgICAgOiBUcmFu
c2xhdGVkVmVydGV4QnVmZmVyKHNpemUpCit7CisgICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3Jl
YXRlVmVydGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9O
TFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgIGlmICho
ciAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg
YSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0aHJvdyBzdGQ6
OmJhZF9hbGxvYygpOworICAgIH0KK30KKworRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpE
eDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXpl
LCBEV09SRCB1c2FnZUZsYWdzKQorICAgIDogVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzaXplKQor
eworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplLCB1c2Fn
ZUZsYWdzLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICBp
ZiAoaHIgIT0gU19PSykKKyAgICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0
aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAgdGhyb3cg
c3RkOjpiYWRfYWxsb2MoKTsKKyAgICB9Cit9CisKKworRHg5QmFja0VuZDo6RHg5VmVydGV4QnVm
ZmVyOjp+RHg5VmVydGV4QnVmZmVyKCkKK3sKKyAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7
Cit9CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZl
cjo6Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKK30KKwor
dm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjptYXAoKQoreworICAgIHZvaWQgKm1h
cFB0cjsKKworICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwgMCk7CisKKyAg
ICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6
dW5tYXAoKQoreworICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOworfQorCit2b2lkIER4OUJh
Y2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6cmVjeWNsZSgpCit7CisgICAgdm9pZCAqZHVtbXk7Cisg
ICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Cisg
ICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6OkR4OVZl
cnRleEJ1ZmZlcjo6c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qg
c2l6ZSkKK3sKKyAgICB2b2lkICptYXBQdHI7CisKKyAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKG9m
ZnNldCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisKKyAgICByZXR1cm4g
bWFwUHRyOworfQorCisvLyBOb3JtYWxseSBWQnMgYXJlIGNyZWF0ZWQgd2l0aCBEM0RVU0FHRV9X
UklURU9OTFkgfCBEM0RVU0FHRV9EWU5BTUlDLCBidXQgc29tZSBoYXJkd2FyZSAmIGRyaXZlcnMg
d29uJ3QgcmVuZGVyCisvLyBpZiBhbnkgc3RyaWRlLXplcm8gc3RyZWFtcyBhcmUgaW4gRDNEVVNB
R0VfRFlOQU1JQyBWQnMsIHNvIHRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRlIHN1Y2ggVkJz
IHdpdGggb25seSBEM0RVU0FHRV9XUklURU9OTFkgc2V0LgorLy8gRDNETE9DS19ESVNDQVJEIGFu
ZCBEM0RMT0NLX05PT1ZFUldSSVRFIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBEM0RVU0FHRV9EWU5B
TUlDIFZCcywgc28gd2Ugb3ZlcnJpZGUgbWV0aG9kcyB0byBhdm9pZCB1c2luZyB0aGVzZSBmbGFn
cy4KK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpEeDlW
ZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IHNpemUpCisgICAgOiBEeDlWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXplLCBE
M0RVU0FHRV9XUklURU9OTFkpCit7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVm
ZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnJlY3ljbGUoKQoreworfQorCit2b2lkICpEeDlCYWNr
RW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6c3RyZWFtaW5nTWFwKHN0
ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICptYXBQdHI7
CisKKyAgICBnZXRCdWZmZXIoKS0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIDApOworCisg
ICAgcmV0dXJuIG1hcFB0cjsKK30KKworRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OkR4OUlu
ZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xl
bnVtIHR5cGUpCisgICAgOiBUcmFuc2xhdGVkSW5kZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBBU1NF
UlQodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7
CisKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpID8g
RDNERk1UX0lOREVYMTYgOiBEM0RGTVRfSU5ERVgzMjsKKworICAgIEhSRVNVTFQgaHIgPSBkZXZp
Y2UtPkNyZWF0ZUluZGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9X
UklURU9OTFksIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUluZGV4QnVmZmVyLCBOVUxMKTsK
KyAgICBpZiAoaHIgIT0gU19PSykKKyAgICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBh
bGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAg
dGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKKyAgICB9Cit9CisKK0R4OUJhY2tFbmQ6OkR4OUluZGV4
QnVmZmVyOjp+RHg5SW5kZXhCdWZmZXIoKQoreworICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgp
OworfQorCitJRGlyZWN0M0RJbmRleEJ1ZmZlcjkqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6
OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKK30KKwordm9p
ZCAqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6Om1hcCgpCit7CisgICAgdm9pZCAqbWFwUHRy
OworCisgICAgbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDApOworCisgICAgcmV0
dXJuIG1hcFB0cjsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6dW5tYXAo
KQoreworICAgIG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6
RHg5SW5kZXhCdWZmZXI6OnJlY3ljbGUoKQoreworICAgIHZvaWQgKmR1bW15OworICAgIG1JbmRl
eEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7CisgICAgbUluZGV4
QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6
OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpCit7Cisg
ICAgdm9pZCAqbWFwUHRyOworCisgICAgbUluZGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwg
Jm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisKKyAgICByZXR1cm4gbWFwUHRyOworfQor
Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvZHg5Lmg6IERpcmVjdDNE
IDktYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyLgorCisjaWZuZGVmIExJQkdMRVNWMl9H
RU9NRVRSWV9EWDlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0RYOV9IXworCisjaW5j
bHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFz
cyBEeDlCYWNrRW5kIDogcHVibGljIEJ1ZmZlckJhY2tFbmQKK3sKKyAgcHVibGljOgorICAgIGV4
cGxpY2l0IER4OUJhY2tFbmQoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZDNk
ZGV2aWNlKTsKKyAgICB+RHg5QmFja0VuZCgpOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRJ
bnRJbmRpY2VzKCk7CisKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0
ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKTsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRW
ZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qg
c2l6ZSk7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVm
ZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZvcm1hdENv
bnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUs
IGJvb2wgbm9ybWFsaXplKTsKKworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVN0cmVhbShHTGVu
dW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVf
dCBvZmZzZXQpIGNvbnN0OworCisgICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJlRHJh
dyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pOworICAgIHZpcnR1YWwgR0xl
bnVtIHNldHVwQXR0cmlidXRlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0
cmlidXRlcyk7CisKKyAgcHJpdmF0ZToKKyAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwor
CisgICAgYm9vbCBtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm87CisgICAgYm9vbCBtU3VwcG9y
dEludEluZGljZXM7CisKKyAgICBib29sIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtNQVhfVkVSVEVY
X0FUVFJJQlNdOworCisgICAgZW51bSBTdHJlYW1GcmVxdWVuY3kKKyAgICB7CisgICAgICAgIFNU
UkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQgPSAwLAorICAgICAgICBTVFJFQU1fRlJFUVVFTkNZ
X0lOREVYRUQsCisgICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VECisgICAgfTsKKwor
ICAgIFN0cmVhbUZyZXF1ZW5jeSBtU3RyZWFtRnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCUysx
XTsKKworICAgIHN0cnVjdCBUcmFuc2xhdGlvbkluZm8KKyAgICB7CisgICAgICAgIEZvcm1hdENv
bnZlcnRlciBmb3JtYXRDb252ZXJ0ZXI7CisgICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBl
OworICAgIH07CisKKyAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07
CisKKyAgICBUcmFuc2xhdGlvbkluZm8gbUF0dHJpYnV0ZVR5cGVzW05VTV9HTF9WRVJURVhfQVRU
UklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4
KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KKworICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0
aW9uCisgICAgeworICAgICAgICBEV09SRCBjYXBzRmxhZzsKKyAgICAgICAgVHJhbnNsYXRpb25J
bmZvIHByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgIFRyYW5zbGF0aW9uSW5mbyBmYWxsYmFj
a0NvbnZlcnNpb247CisgICAgfTsKKworICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5l
cmF0ZSBtQXR0cmlidXRlVHlwZXMuCisgICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3Jp
cHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6
ZWRdW3NpemUtMV0KKworICAgIHZvaWQgY2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7
CisKKyAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdDsKKworICAg
IGNsYXNzIER4OVZlcnRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyCisg
ICAgeworICAgICAgcHVibGljOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKKyAgICAgICAgdmlydHVhbCB+RHg5VmVy
dGV4QnVmZmVyKCk7CisKKyAgICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVy
KCkgY29uc3Q7CisKKyAgICAgIHByb3RlY3RlZDoKKyAgICAgICAgRHg5VmVydGV4QnVmZmVyKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFn
cyk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkICptYXAoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHVubWFwKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBz
aXplKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAq
bVZlcnRleEJ1ZmZlcjsKKyAgICB9OworCisgICAgY2xhc3MgRHg5VmVydGV4QnVmZmVyWmVyb1N0
cmlkZVdvcmthcm91bmQgOiBwdWJsaWMgRHg5VmVydGV4QnVmZmVyCisgICAgeworICAgICAgcHVi
bGljOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpOworCisgICAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAq
c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7CisgICAg
fTsKKworICAgIGNsYXNzIER4OUluZGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRJbmRleEJ1
ZmZlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgRHg5SW5kZXhCdWZmZXIoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSk7CisgICAg
ICAgIHZpcnR1YWwgfkR4OUluZGV4QnVmZmVyKCk7CisKKyAgICAgICAgSURpcmVjdDNESW5kZXhC
dWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICAgICAgcHJvdGVjdGVkOgorICAgICAgICB2
aXJ0dWFsIHZvaWQgKm1hcCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgKnN0cmVh
bWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOworCisgICAgICBw
cml2YXRlOgorICAgICAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRleEJ1ZmZlcjsKKyAg
ICB9OworCisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNsYXRl
ZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0OworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0
RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVmZmVyICppYikgY29uc3Q7CisKKyAgICBEM0RERUNM
VFlQRSBtYXBBdHRyaWJ1dGVUeXBlKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29s
IG5vcm1hbGl6ZWQpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VP
TUVUUllfRFg5X0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNv
bnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3Zl
cnRleGNvbnZlcnNpb24uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2Vv
bWV0cnkvdmVydGV4Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oOiBBIGxp
YnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1
aWxkCisvLyB0aGUgRm9ybWF0Q29udmVydGVyIG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNv
bnZlcnNpb24gc3lzdGVtLgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05W
RVJTSU9OX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9OX0hf
CisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9Db250ZXh0LmgiIC8vIERlZmluZXMgSW5kZXgKKworbmFtZXNwYWNlIGdsCit7CisK
Ky8vIENvbnZlcnNpb24gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1
ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCisvLyBz
dGF0aWMgVSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgaW5w
dXQgdHlwZSB0byB0aGUgb3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6IHRo
ZSB0eXBlIHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K3N0cnVjdCBJZGVudGl0eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1
ZTsKKworICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChU
IHgpCisgICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xh
c3MgRnJvbVQsIGNsYXNzIFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgaWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7CisKKyAg
ICBzdGF0aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUb1Q+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0
IENhc3Q8VCwgVD4KK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisK
KyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRpYyBjb25zdCBi
b29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisK
KyAgICBzdGF0aWMgZmxvYXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0eXBlZGVmIHN0
ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oeCk7CisKKyAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxlIHRp
bWUKKyAgICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMg
aXQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0aCBz
dGF0aWMgZ3VhcmQgYW5kIGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNv
ciA9IDEuMGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7CisgICAgICAgICAg
ICByZXR1cm4gKDIqZisxKSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9CisgICAgfQor
fTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+Citz
dHJ1Y3QgRml4ZWRUb0Zsb2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBm
YWxzZTsKKworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0KEZyb21UeXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29y
ID0gMS4wZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkgPDwg
U2NhbGVCaXRzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRpdmlz
b3I7CisgICAgfQorfTsKKworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgaW50IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZlcnNp
b24KKy8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9mIGNv
bXBvbmVudHMgYWZ0ZXIgY29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQgYW55
IHNpemUuCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVuCit7CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQsIG5vcm0tU0hP
UlQsIG5vcm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIgb3Ig
NCBjb21wb25lbnRzCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRXZl
bgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKK307CisKK3Rl
bXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBoYXZlIDAgYW5k
IDEgdGhhdCBhcmUganVzdCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgU2ltcGxl
RGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEp
OyB9Cit9OworCisvLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9yIFst
MSwxXSBzbyAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3RlbXBsYXRlIDxj
bGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQg
emVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkg
eyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisKKy8vIENvbnZl
cnRlcjoKKy8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4g
aWRlbnRpdHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4Cisv
LyBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0
cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2ZXJ0
aWNlcy4gSW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlkZWQu
CisKK3RlbXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVydGVy
LCBjbGFzcyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4KK3N0
cnVjdCBWZXJ0ZXhEYXRhQ29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb252ZXJ0
ZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxXaWR0
aCA9PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxXaWR0
aCAqIHNpemVvZihPdXRwdXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShj
b25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIE91
dHB1dFR5cGUgKm91dCkKKyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWluID0g
cG9pbnRlckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAgY29weUNvbXBv
bmVudChvdXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVs
ZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBzdGF0
aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAgICAg
ICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERl
ZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQs
IGVpbiwgMywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25lKCkp
KTsKKworICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwg
c3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+KGlu
KSwgc3RyaWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJlciBv
ZiBieXRlcyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRlIDxjbGFzcyBU
PgorICAgIHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXplX3Qg
bnVtQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3QgSW5w
dXRUeXBlICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1bHR2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVtZW50
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxXaWR0
aCA+IGVsZW1lbnRpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRbZWxl
bWVudGluZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRbZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX1ZF
UlRFWENPTlZFUlNJT05fSF8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63269</attachid>
            <date>2010-08-02 15:40:24 -0700</date>
            <delta_ts>2010-08-02 16:59:57 -0700</delta_ts>
            <desc>ANGLE source code and xcodeproject. Improvements to ChangeLog</desc>
            <filename>just_angle</filename>
            <type>text/plain</type>
            <size>1887159</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBA
QAorMjAxMC0wOC0wMiAgUGF1bCBTYXdheWEgIDxwc2F3YXlhQGFwcGxlLmNvbT4KKworICAgICAg
ICBVbnJldmlld2VkLCBudW1lcm91cyBmaWxlcyBhZGRlZCBmcm9tIEFOR0xFIHJlcG9zaXRvcnku
IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QKKworICAgICAgICBDb250YWlu
cyBubyBuZXcgY2hhbmdlcyBmb3Igc2hhZGVyIHZhbGlkYXRpb24uIEFkZGVkIGEgbmV3IFhjb2Rl
IHByb2plY3QgZm9yIGJ1aWxkaW5nIHdpdGggdGhlIHJlc3Qgb2YgV2ViS2l0LgorCisgICAgICAg
IEFOR0xFIGNvZGUgdGFrZW4gZnJvbSBuZXdlc3QgcmV2aXNpb24gYXZhaWxhYmxlIG9uIEp1bHkg
MjIsIDIwMTAuCisKSW5kZXg6IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMCkKKysrIEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjI3IEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNp
b24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0
cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJRkIzOUQyNzExMjAw
RjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2Vu
R0xTTC5jcHAgKi87IH07CisJCUZCMzlEMjc1MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEy
MDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9OworCQlGQjM5RDI3OTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsg
fTsKKwkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkMxMjAwRjM1QTAw
MDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQlGQjM5RDI3RDEyMDBGMzVBMDAwODhF
NjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5j
cHAgKi87IH07CisJCUZCMzlEMjgxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzIx
MjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07CisJCUZCMzlEMjgzMTIw
MEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzQxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91
dC5jcHAgKi87IH07CisJCUZCMzlEMjg0MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlGQjM5
RDI4ODEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJRkIzOUQyOEExMjAwRjM1QTAwMDg4RTY5
IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICovOyB9
OworCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzRjEyMDBGMzVBMDAw
ODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUZCMzlEMjhGMTIwMEYzNUEwMDA4OEU2
OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0MDEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuY3BwICov
OyB9OworCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjQyMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQlGQjM5RDI5MzEyMDBGMzVBMDAwODhF
NjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLzsgfTsKKwkJRkIzOUQyOTYx
MjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jICovOyB9Owor
CQlGQjM5RDI5ODEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkg
LyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCMzlEMjk5MTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1v
cnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjRCMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJRkIzOUQyOUQxMjAwRjM1
QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi87IH07
CisJCUZCMzlEMkEwMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkg
Lyogc3ltYm9scy5jICovOyB9OworCQlGQjM5RDJBMjEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5z
LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1
NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi87IH07CisJCUZCMzlEMkE0MTIwMEYzNUEw
MDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVy
QWxpdmUuY3BwICovOyB9OworCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJl
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07CisJCUZCMzlEMkE4
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFk
ZXJMYW5nLmNwcCAqLzsgfTsKKwkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRh
YmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CisJCUZCMzlE
MkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkg
LyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OworCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICov
OyB9OworCQlGQjM5RDJDMjEyMDBGM0VGMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJFMTIwMEYz
RTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICovOyB9OworCQlGQjM5RDJDMzEyMDBGM0VG
MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAq
LzsgfTsKKwkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQ3MjAxMjAxMDMyMDAw
MDg4RTY5IC8qIGdsc2xhbmcuY3BwICovOyB9OworCQlGQjM5RDcyNDEyMDEwMzIwMDAwODhFNjkg
LyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQ3MjIxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsg
fTsKKwkJRkIzOUQ3MjUxMjAxMDMyNDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmggaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDcyMTEyMDEwMzIwMDAw
ODhFNjkgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJRkIzOUQ3NkQxMjAxMTBGQzAwMDg4RTY5
IC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDJCRTEyMDBGM0U2MDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCUZCMzlENzZF
MTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVy
TGFuZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKy8q
IEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KKwkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYmFuZ2xlLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFuZ2xlLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhM
U0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE4OTEyMDBGMjYyMDAw
ODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE4QTEyMDBGMjYyMDAwODhF
NjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMThCMTIw
MEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4RTY5IC8qIGRlYnVnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xhbmcubDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1Npbmsu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5MDEyMDBGMjYyMDAwODhF
NjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Np
bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOTExMjAwRjI2MjAwMDg4
RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDE5MzEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5NjEyMDBGMjYyMDAwODhFNjkgLyog
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1lZGlh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5ODEyMDBGMjYyMDAw
ODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5OTEy
MDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUMxMjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDE5RDEyMDBGMjYyMDAwODhFNjkgLyogb3NpbmNsdWRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJj
ZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBMDEyMDBGMjYy
MDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDFBMTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEyMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRI
TFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTUxMjAwRjI2MjAwMDg4
RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDFBNjEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTcxMjAwRjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxv
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQUIx
MjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBQzEyMDBGMjYy
MDAwODhFNjkgLyogY29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
b21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFEMTIwMEYyNjIw
MDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY3BwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFGMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHBzdHJ1
Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1v
cnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbWVtb3J5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIyMTIwMEYyNjIwMDA4OEU2OSAvKiBwYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMUIzMTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHByZXByb2Nlc3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjQxMjAwRjI2MjAwMDg4RTY5IC8qIHNjYW5uZXIu
YyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xz
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHN5bWJvbHMuYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjgxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3ltYm9scy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhFNjkgLyogdG9rZW5zLmMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDFCQTEyMDBGMjYyMDAwODhFNjkgLyogdG9rZW5zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1
ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5k
ZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCRTEyMDBG
MjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUJG
MTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFu
ZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1i
b2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52
Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IHRyYW5zbGF0b3JfY29tbW9uLnZjcHJv
ajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5
IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gdHJh
bnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUQyMTIwMEYyNjIw
MDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2Vs
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyog
dW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFz
ZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBCYXNlVHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8q
IENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
ZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMjQxMjAw
RjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI1MTIwMEYz
NUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5s
ZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlh
Y2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRp
YWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyRjEyMDBG
MzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0
OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFs
aXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMy
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8q
IEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
MzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVF
bmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDIzNzEyMDBGMzVBMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkg
Lyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjNC
MTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBm
aWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNl
SGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVs
cGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDExMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0MjEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVu
Y29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDcx
MjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0ODEy
MDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0OTEyMDBGMzVBMDAw
ODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyog
Y3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkg
LyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyog
bWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJv
Y2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBz
Y2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNj
YW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xn
bG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyog
c3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRv
a2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmll
ckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTcxMjAwRjM1
QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7
IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hIYW5kbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5
IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUQx
MjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRv
ckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNM
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2
OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8q
IFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
bmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2RTEy
MDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0ZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVF
bmNvZGluZyA9IDQ7IHBhdGggPSBSZXNvdXJjZUxpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hhZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDcyMDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBnbHNsYW5nLmNwcDsgcGF0aCA9
IHNyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRoID0gc3JjL2ludGVybWVk
aWF0ZS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDcy
MjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZ190YWIuY3BwOyBwYXRoID0gc3JjL2ludGVybWVkaWF0
ZS9nbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0YxMjAwRjBFMzAwMDg4RTY5IC8qIEZyYW1ld29ya3Mg
Ki8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJRkIz
OUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8sCisJCQkJ
RkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLywKKwkJCQlGQjM5RDBDQjEyMDBF
Rjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLywKKwkJCQlGQjM5RDBDQzEyMDBFRjlCMDAw
ODhFNjkgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4
RTY5IC8qIEdMU0xBTkcgKi8sCisJCQkJRkIzOUQxODUxMjAwRjI2MjAwMDg4RTY5IC8qIGNvbXBp
bGVyICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQ3MjAx
MjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovLAorCQkJCUZCMzlENzIxMTIwMTAzMjAw
MDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJCUZCMzlENzIyMTIwMTAzMjAwMDA4OEU2
OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IEludGVybWVkaWF0ZXM7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDBDQzEyMDBFRjlCMDAw
ODhFNjkgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisJCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5
IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENvZGVHZW5I
TFNMLmNwcCAqLywKKwkJCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8s
CisJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJ
CQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlEMThD
MTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMThEMTIwMEYyNjIwMDA4
OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8qIGds
c2xhbmcueSAqLywKKwkJCQlGQjM5RDE4RjEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3Bw
ICovLAorCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAorCQkJ
CUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMTkzMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDE5NDEyMDBG
MjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMTk1MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMTk2MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQxOTcxMjAw
RjI2MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQxOTgxMjAwRjI2
MjAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMTk5MTIwMEYyNjIwMDA4
OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMTlBMTIwMEYyNjIwMDA4OEU2OSAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQxOUIxMjAwRjI2MjAwMDg4RTY5IC8q
IGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQxOUMxMjAwRjI2MjAwMDg4RTY5IC8q
IE1NYXAuaCAqLywKKwkJCQlGQjM5RDE5RDEyMDBGMjYyMDAwODhFNjkgLyogb3NpbmNsdWRlLmgg
Ki8sCisJCQkJRkIzOUQxOUUxMjAwRjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAq
LywKKwkJCQlGQjM5RDE5RjEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywK
KwkJCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJ
RkIzOUQxQTExMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5RDFB
MjEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0SExTTC5jcHAgKi8sCisJCQkJRkIzOUQxQTMxMjAw
RjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQlGQjM5RDFBNDEyMDBGMjYyMDAw
ODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5
IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDFBNjEyMDBGMjYyMDAwODhFNjkgLyog
UGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFs
bG9jLmNwcCAqLywKKwkJCQlGQjM5RDFBODEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmgg
Ki8sCisJCQkJRkIzOUQxQTkxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKKwkJ
CQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJ
CUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUZC
MzlEMUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlGQjM5RDFC
RTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUZCMzlEMUJGMTIwMEYy
NjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5RDFDMDEyMDBGMjYyMDAw
ODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDFDMTEyMDBGMjYyMDAwODhFNjkgLyog
U3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMUMyMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1i
b2xUYWJsZS5oICovLAorCQkJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9y
X2NvbW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5z
bGF0b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRy
YW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJh
bnNsYXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNs
YXRvckhMU0wuY3BwICovLAorCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xh
dG9ySExTTC5oICovLAorCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICov
LAorCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAor
CQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKKwkJCQlG
QjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCisJCQkpOworCQkJaW5jbHVk
ZUluSW5kZXggPSAwOworCQkJbmFtZSA9IGNvbXBpbGVyOworCQkJcGF0aCA9IHNyYy9jb21waWxl
cjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZCMzlEMUE5MTIwMEYyNjIw
MDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCisJ
CQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLywKKwkJCQlGQjM5RDFBQzEy
MDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovLAorCQkJCUZCMzlEMUFEMTIwMEYyNjIwMDA4
OEU2OSAvKiBjcHAuYyAqLywKKwkJCQlGQjM5RDFBRTEyMDBGMjYyMDAwODhFNjkgLyogY3BwLmgg
Ki8sCisJCQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovLAorCQkJ
CUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLywKKwkJCQlGQjM5RDFCMTEy
MDBGMjYyMDAwODhFNjkgLyogbWVtb3J5LmggKi8sCisJCQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4
RTY5IC8qIHBhcnNlci5oICovLAorCQkJCUZCMzlEMUIzMTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVw
cm9jZXNzLmggKi8sCisJCQkJRkIzOUQxQjQxMjAwRjI2MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAq
LywKKwkJCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5oICovLAorCQkJCUZC
MzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLywKKwkJCQlGQjM5RDFCNzEy
MDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5jICovLAorCQkJCUZCMzlEMUI4MTIwMEYyNjIwMDA4
OEU2OSAvKiBzeW1ib2xzLmggKi8sCisJCQkJRkIzOUQxQjkxMjAwRjI2MjAwMDg4RTY5IC8qIHRv
a2Vucy5jICovLAorCQkJCUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLywK
KwkJCSk7CisJCQlpbmNsdWRlSW5JbmRleCA9IDA7CisJCQlwYXRoID0gcHJlcHJvY2Vzc29yOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4
RTY5IC8qIGNvbXBpbGVyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCisJCQkJ
RkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLywKKwkJCQlGQjM5
RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8sCisJCQkJRkIzOUQyMjUxMjAwRjM1
QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywKKwkJCQlGQjM5RDIyNjEyMDBGMzVBMDAw
ODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBk
ZWJ1Zy5oICovLAorCQkJCUZCMzlEMjI4MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8s
CisJCQkJRkIzOUQyMjkxMjAwRjM1QTAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLywKKwkJCQlGQjM5
RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAorCQkJCUZCMzlEMjJCMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAorCQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5RDIyRDEyMDBGMzVBMDAwODhFNjkg
LyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0
aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5oICovLAorCQkJCUZCMzlEMjMwMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXpl
R2xvYmFscy5oICovLAorCQkJCUZCMzlEMjMxMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXpl
UGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVy
bWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybWVk
aWF0ZS5oICovLAorCQkJCUZCMzlEMjM0MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3Bw
ICovLAorCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCisJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmgg
Ki8sCisJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5
RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJRkIzOUQyMzkxMjAw
RjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlGQjM5RDIzQTEyMDBG
MzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlGQjM5RDIzQjEyMDBGMzVB
MDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4
RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyog
cGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNl
SGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDI0MTEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuaCAqLywKKwkJCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAq
LywKKwkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJ
RkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLywKKwkJCQlGQjM5RDI1
NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCUZCMzlEMjU3
MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUZCMzlEMjU4MTIw
MEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlGQjM5RDI1OTEyMDBGMzVB
MDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2
OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5RDI1QjEyMDBGMzVBMDAwODhFNjkgLyog
U2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDI1QzEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFi
bGUuY3BwICovLAorCQkJCUZCMzlEMjVEMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5o
ICovLAorCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCisJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8s
CisJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCisJCQkJRkIzOUQy
NkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCisJCQkJRkIzOUQyNkUx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovLAorCQkJCUZCMzlEMjZGMTIwMEYz
NUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY29tcGlsZXI7CisJ
CQlwYXRoID0gc3JjL2NvbXBpbGVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyNDUxMjAwRjM1QTAwMDg4
RTY5IC8qIGF0b20uYyAqLywKKwkJCQlGQjM5RDI0NjEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5o
ICovLAorCQkJCUZCMzlEMjQ3MTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCisJCQkJ
RkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jICovLAorCQkJCUZCMzlEMjQ5MTIwMEYz
NUEwMDA4OEU2OSAvKiBjcHAuaCAqLywKKwkJCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyog
Y3Bwc3RydWN0LmMgKi8sCisJCQkJRkIzOUQyNEIxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
ICovLAorCQkJCUZCMzlEMjRDMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKKwkJCQlG
QjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCisJCQkJRkIzOUQyNEUxMjAw
RjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlGQjM5RDI0RjEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jICovLAorCQkJCUZCMzlEMjUwMTIwMEYzNUEwMDA4OEU2OSAvKiBz
Y2FubmVyLmggKi8sCisJCQkJRkIzOUQyNTExMjAwRjM1QTAwMDg4RTY5IC8qIHNsZ2xvYmFscy5o
ICovLAorCQkJCUZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCisJCQkJ
RkIzOUQyNTMxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKKwkJCQlGQjM5RDI1NDEy
MDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi8sCisJCQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4
RTY5IC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBwcmVwcm9jZXNzb3I7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDJCRDEyMDBGM0U2MDAwODhFNjkg
LyogR0xTTEFORyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggKi8sCisJCQkJ
RkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLywKKwkJCSk7CisJCQlu
YW1lID0gR0xTTEFORzsKKwkJCXBhdGggPSBpbmNsdWRlL0dMU0xBTkc7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlGQjM5RDc3QjEyMDExMTBDMDAw
ODhFNjkgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCUZCMzlE
NzZEMTIwMTEwRkMwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJY
TmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJRkIzOUQwRDAxMjAwRjBFMzAwMDg4RTY5IC8qIGFu
Z2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IEZCMzlEMEQ2MTIwMEYxMUUwMDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovOworCQkJYnVpbGRQaGFzZXMgPSAo
CisJCQkJRkIzOUQ3N0IxMjAxMTEwQzAwMDg4RTY5IC8qIEhlYWRlcnMgKi8sCisJCQkJRkIzOUQw
REUxMjAwRjE5MTAwMDg4RTY5IC8qIEFjdGlvbiAiZmxleF9nbHNsYW5nIiAqLywKKwkJCQlGQjM5
RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLywKKwkJCQlG
QjM5RDBDRTEyMDBGMEUzMDAwODhFNjkgLyogU291cmNlcyAqLywKKwkJCQlGQjM5RDBDRjEyMDBG
MEUzMDAwODhFNjkgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAor
CQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gYW5nbGU7CisJCQlw
cm9kdWN0TmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEZCMzlEMEQxMTIwMEYw
RTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxl
LnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJCX07CisvKiBFbmQgUEJYTmF0aXZlVGFy
Z2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCisJCUZCMzlE
MDcwMTIwMEVEOTIwMDA4OEU2OSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJCWlzYSA9IFBC
WFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzOUQwNzMxMjAwRUQ5MjAw
MDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiQU5HTEUi
ICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJCWhhc1NjYW5u
ZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJbWFpbkdyb3VwID0gRkIzOUQwNkUxMjAwRUQ5MjAwMDg4
RTY5OworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJCXByb2plY3RSb290ID0gIiI7CisJCQl0
YXJnZXRzID0gKAorCQkJCUZCMzlEMEQwMTIwMEYwRTMwMDA4OEU2OSAvKiBhbmdsZSAqLywKKwkJ
CSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFNo
ZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUZCMzlEMERFMTIwMEYxOTEwMDA4OEU2
OSAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlw
dEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKKwkJCWZpbGVzID0gKAorCQkJ
KTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGlsZXIvZ2xzbGFuZy5sLAorCQkJKTsKKwkJ
CW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJ
CQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5jcHAiLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsK
KwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBjb21waWxl
ci9nbHNsYW5nLmxcIlxuZWNobyBub3RlOiAke0lOVEVSTUVESUFURV9ESVJ9XG5leGVjIGZsZXgg
LS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xh
bmcuY3BwXCIgc3JjL2NvbXBpbGVyL2dsc2xhbmcubFxuZXhpdCAxIjsKKwkJCXNob3dFbnZWYXJz
SW5Mb2cgPSAwOworCQl9OworCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogQWN0aW9uICJi
aXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJ
CQlpbnB1dFBhdGhzID0gKAorCQkJCWNvbXBpbGVyL2dsc2xhbmcueSwKKwkJCSk7CisJCQluYW1l
ID0gIkFjdGlvbiBcImJpc29uX2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQki
JChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5jcHAiLAorCQkJCSIkKElOVEVSTUVESUFU
RV9ESVIpL2dsc2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0
ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgYmlzb24gb24gY29tcGlsZXIvZ2xzbGFuZy55XCJc
bmV4ZWMgYmlzb24gLS1uby1saW5lcyBcIi0tZGVmaW5lcz0ke0lOVEVSTUVESUFURV9ESVJ9L2ds
c2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0b249eWFjYy5jXCIgXCItLW91dHB1dD0ke0lOVEVSTUVE
SUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNwcFwiIHNyYy9jb21waWxlci9nbHNsYW5nLnlcbmV4aXQg
MVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworLyogRW5kIFBCWFNoZWxsU2Ny
aXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0UxMjAwRjBFMzAwMDg4RTY5IC8qIFNvdXJjZXMgKi8gPSB7
CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjM5RDJDMjEyMDBGM0VGMDAwODhFNjkgLyog
UmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlENzIzMTIwMTAzMjAwMDA4
OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlENzI1MTIwMTAzMjQw
MDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQ3MjQxMjAx
MDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlE
MkMzMTIwMEYzRUYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gU291cmNlcyAqLywKKwkJCQlG
QjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjM5RDI3QjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4MTEyMDBGMzVBMDAwODhFNjkgLyogSW50
ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2
OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyODQxMjAwRjM1QTAw
MDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjg4
MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlGQjM5RDI4RjEyMDBGMzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTExMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxv
Yy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI5MzEyMDBGMzVBMDAwODhFNjkgLyogYXRv
bS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTYxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5j
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcHN0cnVj
dC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9y
eS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOUQxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5u
ZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkEwMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1i
b2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJBMjEyMDBGMzVBMDAwODhFNjkgLyogdG9r
ZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJBNDEyMDBGMzVBMDAwODhFNjkgLyogUXVh
bGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4
RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyQTgxMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyQUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZC
MzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyog
QmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCQlGQjM5RDA3MTEyMDBFRDky
MDAwODhFNjkgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
KwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF82NF9C
SVRfUFJFX1hDT0RFXzNfMSkiOworCQkJCUFSQ0hTX1NUQU5EQVJEXzY0X0JJVF9QUkVfWENPREVf
M18xID0geDg2XzY0OworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlIRUFERVJfU0VB
UkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNST09UKS9pbmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9P
VCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFURV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRl
OworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRIID0gIiI7CisJCQl9OworCQkJbmFtZSA9
IERlYnVnOworCQl9OworCQlGQjM5RDA3MjEyMDBFRDkyMDAwODhFNjkgLyogUmVsZWFzZSAqLyA9
IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsK
KwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVF9QUkVfWENPREVfM18xKSI7CisJ
CQkJQVJDSFNfU1RBTkRBUkRfNjRfQklUX1BSRV9YQ09ERV8zXzEgPSB4ODZfNjQ7CisJCQkJQ09Q
WV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQki
JChTUkNST09UKS9pbmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9PVCkvc3JjIiwKKwkJCQkpOworCQkJ
CUlOVEVSTUVESUFURV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRlOworCQkJCVBVQkxJQ19IRUFERVJT
X0ZPTERFUl9QQVRIID0gIiI7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCUZC
MzlEMEQyMTIwMEYwRTQwMDA4OEU2OSAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VT
RVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJR0NDX0RZTkFN
SUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gWUVTOwor
CQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0g
MDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKKwkJCQlQUkVCSU5ESU5HID0g
Tk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQlGQjM5RDBEMzEyMDBGMEU0MDAwODhFNjkgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdB
WVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOwor
CQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCUdD
Q19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBH
NTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKKwkJCQlQUkVCSU5ESU5HID0g
Tk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJCQkJWkVST19MSU5LID0gTk87CisJCQl9
OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24g
c2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJ
RkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiQU5HTEUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsK
KwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzOUQwNzExMjAwRUQ5MjAwMDg4RTY5
IC8qIERlYnVnICovLAorCQkJCUZCMzlEMDcyMTIwMEVEOTIwMDA4OEU2OSAvKiBSZWxlYXNlICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCUZCMzlEMEQ2MTIwMEYxMUUw
MDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
YW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzOUQwRDIxMjAwRjBFNDAwMDg4RTY5IC8qIERlYnVnICov
LAorCQkJCUZCMzlEMEQzMTIwMEYwRTQwMDA4OEU2OSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0
aW9uICovCisJfTsKKwlyb290T2JqZWN0ID0gRkIzOUQwNzAxMjAwRUQ5MjAwMDg4RTY5IC8qIFBy
b2plY3Qgb2JqZWN0ICovOworfQpJbmRleDogQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9p
bmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qIC0qLSBt
b2RlOiBjOyB0YWItd2lkdGg6IDg7IC0qLSAqLworLyogdmk6IHNldCBzdz00IHRzPTg6ICovCisv
KiBSZWZlcmVuY2UgdmVyc2lvbiBvZiBlZ2wuaCBmb3IgRUdMIDEuNC4KKyAqICRSZXZpc2lvbjog
OTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUyOjI1IC0wNzAwIChXZWQsIDIxIE9jdCAy
MDA5KSAkCisgKi8KKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFRoZSBLaHJvbm9z
IEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVy
aWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0
byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwor
KiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBp
biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisq
KgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB
TiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N
LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBV
U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKyNpZm5kZWYgX19l
Z2xfaF8KKyNkZWZpbmUgX19lZ2xfaF8KKworLyogQWxsIHBsYXRmb3JtLWRlcGVuZGVudCB0eXBl
cyBhbmQgbWFjcm8gYm9pbGVycGxhdGUgKHN1Y2ggYXMgRUdMQVBJCisgKiBhbmQgRUdMQVBJRU5U
UlkpIHNob3VsZCBnbyBpbiBlZ2xwbGF0Zm9ybS5oLgorICovCisjaW5jbHVkZSA8RUdML2VnbHBs
YXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwor
LyogRUdMIFR5cGVzICovCisvKiBFR0xpbnQgaXMgZGVmaW5lZCBpbiBlZ2xwbGF0Zm9ybS5oICov
Cit0eXBlZGVmIHVuc2lnbmVkIGludCBFR0xCb29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQg
RUdMZW51bTsKK3R5cGVkZWYgdm9pZCAqRUdMQ29uZmlnOwordHlwZWRlZiB2b2lkICpFR0xDb250
ZXh0OwordHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5OwordHlwZWRlZiB2b2lkICpFR0xTdXJmYWNl
OwordHlwZWRlZiB2b2lkICpFR0xDbGllbnRCdWZmZXI7CisKKy8qIEVHTCBWZXJzaW9uaW5nICov
CisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMAkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV8xCQkJ
MQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzIJCQkxCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMwkJ
CTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV80CQkJMQorCisvKiBFR0wgRW51bWVyYW50cy4gQml0
bWFza3MgYW5kIG90aGVyIGV4Y2VwdGlvbmFsIGNhc2VzIGFzaWRlLCBtb3N0CisgKiBlbnVtcyBh
cmUgYXNzaWduZWQgdW5pcXVlIHZhbHVlcyBzdGFydGluZyBhdCAweDMwMDAuCisgKi8KKworLyog
RUdMIGFsaWFzZXMgKi8KKyNkZWZpbmUgRUdMX0ZBTFNFCQkJMAorI2RlZmluZSBFR0xfVFJVRQkJ
CTEKKworLyogT3V0LW9mLWJhbmQgaGFuZGxlIHZhbHVlcyAqLworI2RlZmluZSBFR0xfREVGQVVM
VF9ESVNQTEFZCQkoKEVHTE5hdGl2ZURpc3BsYXlUeXBlKTApCisjZGVmaW5lIEVHTF9OT19DT05U
RVhUCQkJKChFR0xDb250ZXh0KTApCisjZGVmaW5lIEVHTF9OT19ESVNQTEFZCQkJKChFR0xEaXNw
bGF5KTApCisjZGVmaW5lIEVHTF9OT19TVVJGQUNFCQkJKChFR0xTdXJmYWNlKTApCisKKy8qIE91
dC1vZi1iYW5kIGF0dHJpYnV0ZSB2YWx1ZSAqLworI2RlZmluZSBFR0xfRE9OVF9DQVJFCQkJKChF
R0xpbnQpLTEpCisKKy8qIEVycm9ycyAvIEdldEVycm9yIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZp
bmUgRUdMX1NVQ0NFU1MJCQkweDMwMDAKKyNkZWZpbmUgRUdMX05PVF9JTklUSUFMSVpFRAkJMHgz
MDAxCisjZGVmaW5lIEVHTF9CQURfQUNDRVNTCQkJMHgzMDAyCisjZGVmaW5lIEVHTF9CQURfQUxM
T0MJCQkweDMwMDMKKyNkZWZpbmUgRUdMX0JBRF9BVFRSSUJVVEUJCTB4MzAwNAorI2RlZmluZSBF
R0xfQkFEX0NPTkZJRwkJCTB4MzAwNQorI2RlZmluZSBFR0xfQkFEX0NPTlRFWFQJCQkweDMwMDYK
KyNkZWZpbmUgRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UJCTB4MzAwNworI2RlZmluZSBFR0xfQkFE
X0RJU1BMQVkJCQkweDMwMDgKKyNkZWZpbmUgRUdMX0JBRF9NQVRDSAkJCTB4MzAwOQorI2RlZmlu
ZSBFR0xfQkFEX05BVElWRV9QSVhNQVAJCTB4MzAwQQorI2RlZmluZSBFR0xfQkFEX05BVElWRV9X
SU5ET1cJCTB4MzAwQgorI2RlZmluZSBFR0xfQkFEX1BBUkFNRVRFUgkJMHgzMDBDCisjZGVmaW5l
IEVHTF9CQURfU1VSRkFDRQkJCTB4MzAwRAorI2RlZmluZSBFR0xfQ09OVEVYVF9MT1NUCQkweDMw
MEUJLyogRUdMIDEuMSAtIElNR19wb3dlcl9tYW5hZ2VtZW50ICovCisKKy8qIFJlc2VydmVkIDB4
MzAwRi0weDMwMUYgZm9yIGFkZGl0aW9uYWwgZXJyb3JzICovCisKKy8qIENvbmZpZyBhdHRyaWJ1
dGVzICovCisjZGVmaW5lIEVHTF9CVUZGRVJfU0laRQkJCTB4MzAyMAorI2RlZmluZSBFR0xfQUxQ
SEFfU0laRQkJCTB4MzAyMQorI2RlZmluZSBFR0xfQkxVRV9TSVpFCQkJMHgzMDIyCisjZGVmaW5l
IEVHTF9HUkVFTl9TSVpFCQkJMHgzMDIzCisjZGVmaW5lIEVHTF9SRURfU0laRQkJCTB4MzAyNAor
I2RlZmluZSBFR0xfREVQVEhfU0laRQkJCTB4MzAyNQorI2RlZmluZSBFR0xfU1RFTkNJTF9TSVpF
CQkweDMwMjYKKyNkZWZpbmUgRUdMX0NPTkZJR19DQVZFQVQJCTB4MzAyNworI2RlZmluZSBFR0xf
Q09ORklHX0lECQkJMHgzMDI4CisjZGVmaW5lIEVHTF9MRVZFTAkJCTB4MzAyOQorI2RlZmluZSBF
R0xfTUFYX1BCVUZGRVJfSEVJR0hUCQkweDMwMkEKKyNkZWZpbmUgRUdMX01BWF9QQlVGRkVSX1BJ
WEVMUwkJMHgzMDJCCisjZGVmaW5lIEVHTF9NQVhfUEJVRkZFUl9XSURUSAkJMHgzMDJDCisjZGVm
aW5lIEVHTF9OQVRJVkVfUkVOREVSQUJMRQkJMHgzMDJECisjZGVmaW5lIEVHTF9OQVRJVkVfVklT
VUFMX0lECQkweDMwMkUKKyNkZWZpbmUgRUdMX05BVElWRV9WSVNVQUxfVFlQRQkJMHgzMDJGCisj
ZGVmaW5lIEVHTF9TQU1QTEVTCQkJMHgzMDMxCisjZGVmaW5lIEVHTF9TQU1QTEVfQlVGRkVSUwkJ
MHgzMDMyCisjZGVmaW5lIEVHTF9TVVJGQUNFX1RZUEUJCTB4MzAzMworI2RlZmluZSBFR0xfVFJB
TlNQQVJFTlRfVFlQRQkJMHgzMDM0CisjZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVF
CTB4MzAzNQorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFMVUUJMHgzMDM2CisjZGVm
aW5lIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUUJMHgzMDM3CisjZGVmaW5lIEVHTF9OT05FCQkJ
MHgzMDM4CS8qIEF0dHJpYiBsaXN0IHRlcm1pbmF0b3IgKi8KKyNkZWZpbmUgRUdMX0JJTkRfVE9f
VEVYVFVSRV9SR0IJCTB4MzAzOQorI2RlZmluZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkEJMHgz
MDNBCisjZGVmaW5lIEVHTF9NSU5fU1dBUF9JTlRFUlZBTAkJMHgzMDNCCisjZGVmaW5lIEVHTF9N
QVhfU1dBUF9JTlRFUlZBTAkJMHgzMDNDCisjZGVmaW5lIEVHTF9MVU1JTkFOQ0VfU0laRQkJMHgz
MDNECisjZGVmaW5lIEVHTF9BTFBIQV9NQVNLX1NJWkUJCTB4MzAzRQorI2RlZmluZSBFR0xfQ09M
T1JfQlVGRkVSX1RZUEUJCTB4MzAzRgorI2RlZmluZSBFR0xfUkVOREVSQUJMRV9UWVBFCQkweDMw
NDAKKyNkZWZpbmUgRUdMX01BVENIX05BVElWRV9QSVhNQVAJCTB4MzA0MQkvKiBQc2V1ZG8tYXR0
cmlidXRlIChub3QgcXVlcnlhYmxlKSAqLworI2RlZmluZSBFR0xfQ09ORk9STUFOVAkJCTB4MzA0
MgorCisvKiBSZXNlcnZlZCAweDMwNDEtMHgzMDRGIGZvciBhZGRpdGlvbmFsIGNvbmZpZyBhdHRy
aWJ1dGVzICovCisKKy8qIENvbmZpZyBhdHRyaWJ1dGUgdmFsdWVzICovCisjZGVmaW5lIEVHTF9T
TE9XX0NPTkZJRwkJCTB4MzA1MAkvKiBFR0xfQ09ORklHX0NBVkVBVCB2YWx1ZSAqLworI2RlZmlu
ZSBFR0xfTk9OX0NPTkZPUk1BTlRfQ09ORklHCTB4MzA1MQkvKiBFR0xfQ09ORklHX0NBVkVBVCB2
YWx1ZSAqLworI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfUkdCCQkweDMwNTIJLyogRUdMX1RSQU5T
UEFSRU5UX1RZUEUgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1JHQl9CVUZGRVIJCQkweDMwOEUJLyog
RUdMX0NPTE9SX0JVRkZFUl9UWVBFIHZhbHVlICovCisjZGVmaW5lIEVHTF9MVU1JTkFOQ0VfQlVG
RkVSCQkweDMwOEYJLyogRUdMX0NPTE9SX0JVRkZFUl9UWVBFIHZhbHVlICovCisKKy8qIE1vcmUg
Y29uZmlnIGF0dHJpYnV0ZSB2YWx1ZXMsIGZvciBFR0xfVEVYVFVSRV9GT1JNQVQgKi8KKyNkZWZp
bmUgRUdMX05PX1RFWFRVUkUJCQkweDMwNUMKKyNkZWZpbmUgRUdMX1RFWFRVUkVfUkdCCQkJMHgz
MDVECisjZGVmaW5lIEVHTF9URVhUVVJFX1JHQkEJCTB4MzA1RQorI2RlZmluZSBFR0xfVEVYVFVS
RV8yRAkJCTB4MzA1RgorCisvKiBDb25maWcgYXR0cmlidXRlIG1hc2sgYml0cyAqLworI2RlZmlu
ZSBFR0xfUEJVRkZFUl9CSVQJCQkweDAwMDEJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMg
Ki8KKyNkZWZpbmUgRUdMX1BJWE1BUF9CSVQJCQkweDAwMDIJLyogRUdMX1NVUkZBQ0VfVFlQRSBt
YXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1dJTkRPV19CSVQJCQkweDAwMDQJLyogRUdMX1NVUkZB
Q0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSX0JJ
VAkweDAwMjAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1ZH
X0FMUEhBX0ZPUk1BVF9QUkVfQklUCTB4MDA0MAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0
cyAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRV9CT1hfQklUIDB4MDIwMAkvKiBF
R0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfU1dBUF9CRUhBVklPUl9Q
UkVTRVJWRURfQklUIDB4MDQwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworCisj
ZGVmaW5lIEVHTF9PUEVOR0xfRVNfQklUCQkweDAwMDEJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBt
YXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5WR19CSVQJCQkweDAwMDIJLyogRUdMX1JFTkRF
UkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5HTF9FUzJfQklUCQkweDAw
MDQJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5H
TF9CSVQJCQkweDAwMDgJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKworLyog
UXVlcnlTdHJpbmcgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfVkVORE9SCQkJMHgzMDUzCisjZGVm
aW5lIEVHTF9WRVJTSU9OCQkJMHgzMDU0CisjZGVmaW5lIEVHTF9FWFRFTlNJT05TCQkJMHgzMDU1
CisjZGVmaW5lIEVHTF9DTElFTlRfQVBJUwkJCTB4MzA4RAorCisvKiBRdWVyeVN1cmZhY2UgLyBT
dXJmYWNlQXR0cmliIC8gQ3JlYXRlUGJ1ZmZlclN1cmZhY2UgdGFyZ2V0cyAqLworI2RlZmluZSBF
R0xfSEVJR0hUCQkJMHgzMDU2CisjZGVmaW5lIEVHTF9XSURUSAkJCTB4MzA1NworI2RlZmluZSBF
R0xfTEFSR0VTVF9QQlVGRkVSCQkweDMwNTgKKyNkZWZpbmUgRUdMX1RFWFRVUkVfRk9STUFUCQkw
eDMwODAKKyNkZWZpbmUgRUdMX1RFWFRVUkVfVEFSR0VUCQkweDMwODEKKyNkZWZpbmUgRUdMX01J
UE1BUF9URVhUVVJFCQkweDMwODIKKyNkZWZpbmUgRUdMX01JUE1BUF9MRVZFTAkJMHgzMDgzCisj
ZGVmaW5lIEVHTF9SRU5ERVJfQlVGRkVSCQkweDMwODYKKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BB
Q0UJCTB4MzA4NworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUCQkweDMwODgKKyNkZWZpbmUg
RUdMX0hPUklaT05UQUxfUkVTT0xVVElPTgkweDMwOTAKKyNkZWZpbmUgRUdMX1ZFUlRJQ0FMX1JF
U09MVVRJT04JCTB4MzA5MQorI2RlZmluZSBFR0xfUElYRUxfQVNQRUNUX1JBVElPCQkweDMwOTIK
KyNkZWZpbmUgRUdMX1NXQVBfQkVIQVZJT1IJCTB4MzA5MworI2RlZmluZSBFR0xfTVVMVElTQU1Q
TEVfUkVTT0xWRQkJMHgzMDk5CisKKy8qIEVHTF9SRU5ERVJfQlVGRkVSIHZhbHVlcyAvIEJpbmRU
ZXhJbWFnZSAvIFJlbGVhc2VUZXhJbWFnZSBidWZmZXIgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xf
QkFDS19CVUZGRVIJCQkweDMwODQKKyNkZWZpbmUgRUdMX1NJTkdMRV9CVUZGRVIJCTB4MzA4NQor
CisvKiBPcGVuVkcgY29sb3Igc3BhY2VzICovCisjZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX3NS
R0IJCTB4MzA4OQkvKiBFR0xfVkdfQ09MT1JTUEFDRSB2YWx1ZSAqLworI2RlZmluZSBFR0xfVkdf
Q09MT1JTUEFDRV9MSU5FQVIJMHgzMDhBCS8qIEVHTF9WR19DT0xPUlNQQUNFIHZhbHVlICovCisK
Ky8qIE9wZW5WRyBhbHBoYSBmb3JtYXRzICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRf
Tk9OUFJFCTB4MzA4QgkvKiBFR0xfQUxQSEFfRk9STUFUIHZhbHVlICovCisjZGVmaW5lIEVHTF9W
R19BTFBIQV9GT1JNQVRfUFJFCQkweDMwOEMJLyogRUdMX0FMUEhBX0ZPUk1BVCB2YWx1ZSAqLwor
CisvKiBDb25zdGFudCBzY2FsZSBmYWN0b3IgYnkgd2hpY2ggZnJhY3Rpb25hbCBkaXNwbGF5IHJl
c29sdXRpb25zICYKKyAqIGFzcGVjdCByYXRpbyBhcmUgc2NhbGVkIHdoZW4gcXVlcmllZCBhcyBp
bnRlZ2VyIHZhbHVlcy4KKyAqLworI2RlZmluZSBFR0xfRElTUExBWV9TQ0FMSU5HCQkxMDAwMAor
CisvKiBVbmtub3duIGRpc3BsYXkgcmVzb2x1dGlvbi9hc3BlY3QgcmF0aW8gKi8KKyNkZWZpbmUg
RUdMX1VOS05PV04JCQkoKEVHTGludCktMSkKKworLyogQmFjayBidWZmZXIgc3dhcCBiZWhhdmlv
cnMgKi8KKyNkZWZpbmUgRUdMX0JVRkZFUl9QUkVTRVJWRUQJCTB4MzA5NAkvKiBFR0xfU1dBUF9C
RUhBVklPUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfQlVGRkVSX0RFU1RST1lFRAkJMHgzMDk1CS8q
IEVHTF9TV0FQX0JFSEFWSU9SIHZhbHVlICovCisKKy8qIENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50
QnVmZmVyIGJ1ZmZlciB0eXBlcyAqLworI2RlZmluZSBFR0xfT1BFTlZHX0lNQUdFCQkweDMwOTYK
KworLyogUXVlcnlDb250ZXh0IHRhcmdldHMgKi8KKyNkZWZpbmUgRUdMX0NPTlRFWFRfQ0xJRU5U
X1RZUEUJCTB4MzA5NworCisvKiBDcmVhdGVDb250ZXh0IGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUg
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04JMHgzMDk4CisKKy8qIE11bHRpc2FtcGxlIHJlc29s
dXRpb24gYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFX0RFRkFV
TFQgMHgzMDlBCS8qIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFIHZhbHVlICovCisjZGVmaW5lIEVH
TF9NVUxUSVNBTVBMRV9SRVNPTFZFX0JPWAkweDMwOUIJLyogRUdMX01VTFRJU0FNUExFX1JFU09M
VkUgdmFsdWUgKi8KKworLyogQmluZEFQSS9RdWVyeUFQSSB0YXJnZXRzICovCisjZGVmaW5lIEVH
TF9PUEVOR0xfRVNfQVBJCQkweDMwQTAKKyNkZWZpbmUgRUdMX09QRU5WR19BUEkJCQkweDMwQTEK
KyNkZWZpbmUgRUdMX09QRU5HTF9BUEkJCQkweDMwQTIKKworLyogR2V0Q3VycmVudFN1cmZhY2Ug
dGFyZ2V0cyAqLworI2RlZmluZSBFR0xfRFJBVwkJCTB4MzA1OQorI2RlZmluZSBFR0xfUkVBRAkJ
CTB4MzA1QQorCisvKiBXYWl0TmF0aXZlIGVuZ2luZXMgKi8KKyNkZWZpbmUgRUdMX0NPUkVfTkFU
SVZFX0VOR0lORQkJMHgzMDVCCisKKy8qIEVHTCAxLjIgdG9rZW5zIHJlbmFtZWQgZm9yIGNvbnNp
c3RlbmN5IGluIEVHTCAxLjMgKi8KKyNkZWZpbmUgRUdMX0NPTE9SU1BBQ0UJCQlFR0xfVkdfQ09M
T1JTUEFDRQorI2RlZmluZSBFR0xfQUxQSEFfRk9STUFUCQlFR0xfVkdfQUxQSEFfRk9STUFUCisj
ZGVmaW5lIEVHTF9DT0xPUlNQQUNFX3NSR0IJCUVHTF9WR19DT0xPUlNQQUNFX3NSR0IKKyNkZWZp
bmUgRUdMX0NPTE9SU1BBQ0VfTElORUFSCQlFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVIKKyNkZWZp
bmUgRUdMX0FMUEhBX0ZPUk1BVF9OT05QUkUJCUVHTF9WR19BTFBIQV9GT1JNQVRfTk9OUFJFCisj
ZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRfUFJFCQlFR0xfVkdfQUxQSEFfRk9STUFUX1BSRQorCisv
KiBFR0wgZXh0ZW5zaW9ucyBtdXN0IHJlcXVlc3QgZW51bSBibG9ja3MgZnJvbSB0aGUgS2hyb25v
cworICogQVBJIFJlZ2lzdHJhciwgd2hvIG1haW50YWlucyB0aGUgZW51bWVyYW50IHJlZ2lzdHJ5
LiBTdWJtaXQKKyAqIGEgYnVnIGluIEtocm9ub3MgQnVnemlsbGEgYWdhaW5zdCB0YXNrICJSZWdp
c3RyeSIuCisgKi8KKworCisKKy8qIEVHTCBGdW5jdGlvbnMgKi8KKworRUdMQVBJIEVHTGludCBF
R0xBUElFTlRSWSBlZ2xHZXRFcnJvcih2b2lkKTsKKworRUdMQVBJIEVHTERpc3BsYXkgRUdMQVBJ
RU5UUlkgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5X2lkKTsKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHks
IEVHTGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJ
RU5UUlkgZWdsVGVybWluYXRlKEVHTERpc3BsYXkgZHB5KTsKKworRUdMQVBJIGNvbnN0IGNoYXIg
KiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUp
OworCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRDb25maWdzKEVHTERpc3Bs
YXkgZHB5LCBFR0xDb25maWcgKmNvbmZpZ3MsCisJCQkgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xp
bnQgKm51bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQ2hvb3Nl
Q29uZmlnKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0LAorCQkJICAg
RUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3NpemUsCisJCQkgICBFR0xpbnQgKm51
bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsR2V0Q29uZmlnQXR0
cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJICAgICAgRUdMaW50IGF0
dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZ
IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcs
CisJCQkJICBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwKKwkJCQkgIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QpOworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGJ1ZmZl
clN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkJICAgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xD
cmVhdGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLAorCQkJ
CSAgRUdMTmF0aXZlUGl4bWFwVHlwZSBwaXhtYXAsCisJCQkJICBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lTdXJmYWNl
KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsUXVlcnlTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1
cmZhY2UsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQmluZEFQSShFR0xlbnVtIGFwaSk7CitFR0xBUEkg
RUdMZW51bSBFR0xBUElFTlRSWSBlZ2xRdWVyeUFQSSh2b2lkKTsKKworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsV2FpdENsaWVudCh2b2lkKTsKKworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsUmVsZWFzZVRocmVhZCh2b2lkKTsKKworRUdMQVBJIEVHTFN1cmZhY2Ug
RUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoCisJICAgICAgRUdM
RGlzcGxheSBkcHksIEVHTGVudW0gYnVmdHlwZSwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwKKwkg
ICAgICBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3VyZmFjZUF0dHJpYihFR0xEaXNwbGF5IGRw
eSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCB2
YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xCaW5kVGV4SW1hZ2UoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcik7CitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xSZWxlYXNlVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHks
IEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcik7CisKKworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsU3dhcEludGVydmFsKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgaW50
ZXJ2YWwpOworCisKK0VHTEFQSSBFR0xDb250ZXh0IEVHTEFQSUVOVFJZIGVnbENyZWF0ZUNvbnRl
eHQoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkgICAgRUdMQ29udGV4dCBz
aGFyZV9jb250ZXh0LAorCQkJICAgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveUNvbnRleHQoRUdMRGlzcGxheSBkcHks
IEVHTENvbnRleHQgY3R4KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbE1ha2VD
dXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcsCisJCQkgIEVHTFN1cmZhY2Ug
cmVhZCwgRUdMQ29udGV4dCBjdHgpOworCitFR0xBUEkgRUdMQ29udGV4dCBFR0xBUElFTlRSWSBl
Z2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKTsKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZ
IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGludCByZWFkZHJhdyk7CitFR0xBUEkgRUdMRGlzcGxh
eSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKTsKK0VHTEFQSSBFR0xCb29s
ZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4
dCBjdHgsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdEdMKHZvaWQpOworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsV2FpdE5hdGl2ZShFR0xpbnQgZW5naW5lKTsKK0VHTEFQSSBFR0xC
b29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJm
YWNlIHN1cmZhY2UpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQ29weUJ1ZmZl
cnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwKKwkJCSAgRUdMTmF0aXZlUGl4
bWFwVHlwZSB0YXJnZXQpOworCisvKiBUaGlzIGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBwb2ludGVy
IHR5cGUsIHdob3NlIG5hbWUgaW5kaWNhdGVzIGl0IG11c3QKKyAqIGJlIGNhc3QgdG8gdGhlIHBy
b3BlciB0eXBlICphbmQgY2FsbGluZyBjb252ZW50aW9uKiBiZWZvcmUgdXNlLgorICovCit0eXBl
ZGVmIHZvaWQgKCpfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKSh2b2lk
KTsKKworLyogTm93LCBkZWZpbmUgZWdsR2V0UHJvY0FkZHJlc3MgdXNpbmcgdGhlIGdlbmVyaWMg
ZnVuY3Rpb24gcHRyLiB0eXBlICovCitFR0xBUEkgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSBFR0xBUElFTlRSWQorICAgICAgIGVnbEdldFByb2NBZGRyZXNzKGNvbnN0
IGNoYXIgKnByb2NuYW1lKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vu
ZGlmIC8qIF9fZWdsX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMiBAQAor
I2lmbmRlZiBfX2VnbGV4dF9oXworI2RlZmluZSBfX2VnbGV4dF9oXworCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDIwMDct
MjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiogUGVybWlzc2lvbiBpcyBoZXJlYnkg
Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyoqIGNv
cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz
ICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQg
cmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg
dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorKiogZGlzdHJpYnV0ZSwgc3Vi
bGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMsIGFuZCB0bworKiog
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgdG8gZG8g
c28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyoqCisqKiBUaGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi
ZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0
aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJUyIs
IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBFWFBSRVNTIE9SIElNUExJRUQsIElO
Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF
TUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE
RVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiogVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyoqIE1B
VEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRFUklBTFMuCisq
LworCisjaW5jbHVkZSA8RUdML2VnbHBsYXRmb3JtLmg+CisKKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBIZWFkZXIg
ZmlsZSB2ZXJzaW9uIG51bWJlciAqLworLyogQ3VycmVudCB2ZXJzaW9uIGF0IGh0dHA6Ly93d3cu
a2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLworLyogJFJldmlzaW9uOiAxMDc5NSAkIG9uICRE
YXRlOiAyMDEwLTAzLTE5IDE3OjA0OjE3IC0wNzAwIChGcmksIDE5IE1hciAyMDEwKSAkICovCisj
ZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiA1CisKKyNpZm5kZWYgRUdMX0tIUl9jb25maWdfYXR0
cmlicworI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKKyNkZWZpbmUgRUdMX0NPTkZP
Uk1BTlRfS0hSCQkJMHgzMDQyCS8qIEVHTENvbmZpZyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdM
X1ZHX0NPTE9SU1BBQ0VfTElORUFSX0JJVF9LSFIJMHgwMDIwCS8qIEVHTF9TVVJGQUNFX1RZUEUg
Yml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkVfQklUX0tIUgkJMHgw
MDQwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0ZmllbGQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVH
TF9LSFJfbG9ja19zdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfbG9ja19zdXJmYWNlIDEKKyNkZWZp
bmUgRUdMX1JFQURfU1VSRkFDRV9CSVRfS0hSCQkweDAwMDEJLyogRUdMX0xPQ0tfVVNBR0VfSElO
VF9LSFIgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1dSSVRFX1NVUkZBQ0VfQklUX0tIUgkJMHgw
MDAyCS8qIEVHTF9MT0NLX1VTQUdFX0hJTlRfS0hSIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9M
T0NLX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDgwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0ZmllbGQg
Ki8KKyNkZWZpbmUgRUdMX09QVElNQUxfRk9STUFUX0JJVF9LSFIJCTB4MDEwMAkvKiBFR0xfU1VS
RkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVHTF9NQVRDSF9GT1JNQVRfS0hSCQkJMHgz
MDQzCS8qIEVHTENvbmZpZyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9SR0JfNTY1
X0VYQUNUX0tIUgkJMHgzMEMwCS8qIEVHTF9NQVRDSF9GT1JNQVRfS0hSIHZhbHVlICovCisjZGVm
aW5lIEVHTF9GT1JNQVRfUkdCXzU2NV9LSFIJCQkweDMwQzEJLyogRUdMX01BVENIX0ZPUk1BVF9L
SFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9SR0JBXzg4ODhfRVhBQ1RfS0hSCQkweDMw
QzIJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9S
R0JBXzg4ODhfS0hSCQkweDMwQzMJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNk
ZWZpbmUgRUdMX01BUF9QUkVTRVJWRV9QSVhFTFNfS0hSCQkweDMwQzQJLyogZWdsTG9ja1N1cmZh
Y2VLSFIgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9MT0NLX1VTQUdFX0hJTlRfS0hSCQkJMHgz
MEM1CS8qIGVnbExvY2tTdXJmYWNlS0hSIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQ
X1BPSU5URVJfS0hSCQkJMHgzMEM2CS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNk
ZWZpbmUgRUdMX0JJVE1BUF9QSVRDSF9LSFIJCQkweDMwQzcJLyogZWdsUXVlcnlTdXJmYWNlIGF0
dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX09SSUdJTl9LSFIJCQkweDMwQzgJLyogZWds
UXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX1JFRF9P
RkZTRVRfS0hSCQkweDMwQzkJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmlu
ZSBFR0xfQklUTUFQX1BJWEVMX0dSRUVOX09GRlNFVF9LSFIJMHgzMENBCS8qIGVnbFF1ZXJ5U3Vy
ZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9CTFVFX09GRlNFVF9L
SFIJMHgzMENCCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJ
VE1BUF9QSVhFTF9BTFBIQV9PRkZTRVRfS0hSCTB4MzBDQwkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0
cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfTFVNSU5BTkNFX09GRlNFVF9LSFIJ
MHgzMENECS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0xPV0VS
X0xFRlRfS0hSCQkJMHgzMENFCS8qIEVHTF9CSVRNQVBfT1JJR0lOX0tIUiB2YWx1ZSAqLworI2Rl
ZmluZSBFR0xfVVBQRVJfTEVGVF9LSFIJCQkweDMwQ0YJLyogRUdMX0JJVE1BUF9PUklHSU5fS0hS
IHZhbHVlICovCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBlZ2xMb2NrU3VyZmFjZUtIUiAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xT
dXJmYWNlIHN1cmZhY2UsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsVW5sb2NrU3VyZmFjZUtIUiAoRUdMRGlzcGxheSBkaXNwbGF5
LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMTE9DS1NVUkZBQ0VLSFJQ
Uk9DKSAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIGNvbnN0IEVHTGlu
dCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdM
VU5MT0NLU1VSRkFDRUtIUlBST0MpIChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJf
aW1hZ2UgMQorI2RlZmluZSBFR0xfTkFUSVZFX1BJWE1BUF9LSFIJCQkweDMwQjAJLyogZWdsQ3Jl
YXRlSW1hZ2VLSFIgdGFyZ2V0ICovCit0eXBlZGVmIHZvaWQgKkVHTEltYWdlS0hSOworI2RlZmlu
ZSBFR0xfTk9fSU1BR0VfS0hSCQkJKChFR0xJbWFnZUtIUikwKQorI2lmZGVmIEVHTF9FR0xFWFRf
UFJPVE9UWVBFUworRUdMQVBJIEVHTEltYWdlS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZUltYWdl
S0hSIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGVudW0gdGFyZ2V0LCBFR0xD
bGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lJbWFnZUtIUiAoRUdMRGlzcGxheSBkcHks
IEVHTEltYWdlS0hSIGltYWdlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8K
K3R5cGVkZWYgRUdMSW1hZ2VLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVJTUFHRUtIUlBS
T0MpIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGVudW0gdGFyZ2V0LCBFR0xD
bGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK3R5cGVkZWYg
RUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lJTUFHRUtIUlBST0MpIChFR0xE
aXNwbGF5IGRweSwgRUdMSW1hZ2VLSFIgaW1hZ2UpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tI
Ul92Z19wYXJlbnRfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl92Z19wYXJlbnRfaW1hZ2UgMQorI2Rl
ZmluZSBFR0xfVkdfUEFSRU5UX0lNQUdFX0tIUgkJCTB4MzBCQQkvKiBlZ2xDcmVhdGVJbWFnZUtI
UiB0YXJnZXQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfdGV4dHVyZV8yRF9pbWFn
ZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfMkRfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xf
VEVYVFVSRV8yRF9LSFIJCQkweDMwQjEJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisj
ZGVmaW5lIEVHTF9HTF9URVhUVVJFX0xFVkVMX0tIUgkJMHgzMEJDCS8qIGVnbENyZWF0ZUltYWdl
S0hSIGF0dHJpYnV0ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF90ZXh0dXJlX2N1
YmVtYXBfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9nbF90ZXh0dXJlX2N1YmVtYXBfaW1hZ2UgMQor
I2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YX0tIUgkweDMwQjMJLyog
ZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1hfS0hSCTB4MzBCNAkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8K
KyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWV9LSFIJMHgzMEI1CS8q
IGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZX0tIUgkweDMwQjYJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICov
CisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1pfS0hSCTB4MzBCNwkv
KiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWl9LSFIJMHgzMEI4CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAq
LworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF90ZXh0dXJlXzNEX2ltYWdlCisjZGVmaW5l
IEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9pbWFnZSAxCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFXzNE
X0tIUgkJCTB4MzBCMgkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdM
X0dMX1RFWFRVUkVfWk9GRlNFVF9LSFIJCTB4MzBCRAkvKiBlZ2xDcmVhdGVJbWFnZUtIUiBhdHRy
aWJ1dGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfZ2xfcmVuZGVyYnVmZmVyX2ltYWdl
CisjZGVmaW5lIEVHTF9LSFJfZ2xfcmVuZGVyYnVmZmVyX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dM
X1JFTkRFUkJVRkZFUl9LSFIJCQkweDMwQjkJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICov
CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3JldXNhYmxlX3N5bmMKKyNkZWZpbmUgRUdMX0tI
Ul9yZXVzYWJsZV9zeW5jIDEKKwordHlwZWRlZiB2b2lkKiBFR0xTeW5jS0hSOwordHlwZWRlZiBr
aHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3QgRUdMVGltZUtIUjsKKworI2RlZmluZSBFR0xfU1lO
Q19TVEFUVVNfS0hSCQkJMHgzMEYxCisjZGVmaW5lIEVHTF9TSUdOQUxFRF9LSFIJCQkweDMwRjIK
KyNkZWZpbmUgRUdMX1VOU0lHTkFMRURfS0hSCQkJMHgzMEYzCisjZGVmaW5lIEVHTF9USU1FT1VU
X0VYUElSRURfS0hSCQkJMHgzMEY1CisjZGVmaW5lIEVHTF9DT05ESVRJT05fU0FUSVNGSUVEX0tI
UgkJMHgzMEY2CisjZGVmaW5lIEVHTF9TWU5DX1RZUEVfS0hSCQkJMHgzMEY3CisjZGVmaW5lIEVH
TF9TWU5DX1JFVVNBQkxFX0tIUgkJCTB4MzBGQQorI2RlZmluZSBFR0xfU1lOQ19GTFVTSF9DT01N
QU5EU19CSVRfS0hSCQkweDAwMDEJLyogZWdsQ2xpZW50V2FpdFN5bmNLSFIgPGZsYWdzPiBiaXRm
aWVsZCAqLworI2RlZmluZSBFR0xfRk9SRVZFUl9LSFIJCQkJMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEVHTF9OT19TWU5DX0tIUgkJCQkoKEVHTFN5bmNLSFIpMCkKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTeW5jS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlwZSwgY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3luY0tI
UihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jKTsKK0VHTEFQSSBFR0xpbnQgRUdMQVBJ
RU5UUlkgZWdsQ2xpZW50V2FpdFN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3lu
YywgRUdMaW50IGZsYWdzLCBFR0xUaW1lS0hSIHRpbWVvdXQpOworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsU2lnbmFsU3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBz
eW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsR2V0
U3luY0F0dHJpYktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMg
Ki8KK3R5cGVkZWYgRUdMU3luY0tIUiAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURVNZTkNLSFJQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlwZSwgY29uc3QgRUdMaW50ICphdHRyaWJf
bGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xERVNUUk9ZU1lO
Q0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jKTsKK3R5cGVkZWYgRUdM
aW50IChFR0xBUElFTlRSWVAgUEZORUdMQ0xJRU5UV0FJVFNZTkNLSFJQUk9DKSAoRUdMRGlzcGxh
eSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzLCBFR0xUaW1lS0hSIHRpbWVvdXQp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU0lHTkFMU1lOQ0tIUlBS
T0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xlbnVtIG1vZGUpOwordHlw
ZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMR0VUU1lOQ0FUVFJJQktIUlBST0Mp
IChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfaW1hZ2VfYmFzZQorI2RlZmlu
ZSBFR0xfS0hSX2ltYWdlX2Jhc2UgMQorLyogTW9zdCBpbnRlcmZhY2VzIGRlZmluZWQgYnkgRUdM
X0tIUl9pbWFnZV9waXhtYXAgYWJvdmUgKi8KKyNkZWZpbmUgRUdMX0lNQUdFX1BSRVNFUlZFRF9L
SFIJCQkweDMwRDIJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgYXR0cmlidXRlICovCisjZW5kaWYKKwor
I2lmbmRlZiBFR0xfS0hSX2ltYWdlX3BpeG1hcAorI2RlZmluZSBFR0xfS0hSX2ltYWdlX3BpeG1h
cCAxCisvKiBJbnRlcmZhY2VzIGRlZmluZWQgYnkgRUdMX0tIUl9pbWFnZSBhYm92ZSAqLworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX0lNR19jb250ZXh0X3ByaW9yaXR5CisjZGVmaW5lIEVHTF9JTUdf
Y29udGV4dF9wcmlvcml0eSAxCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX0xFVkVMX0lN
RwkJMHgzMTAwCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX0hJR0hfSU1HCQkweDMxMDEK
KyNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfTUVESVVNX0lNRwkJMHgzMTAyCisjZGVmaW5l
IEVHTF9DT05URVhUX1BSSU9SSVRZX0xPV19JTUcJCTB4MzEwMworI2VuZGlmCisKKyNpZm5kZWYg
RUdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBFR0xfTlZfY292ZXJhZ2Vfc2FtcGxlIDEK
KyNkZWZpbmUgRUdMX0NPVkVSQUdFX0JVRkZFUlNfTlYgMHgzMEUwCisjZGVmaW5lIEVHTF9DT1ZF
UkFHRV9TQU1QTEVTX05WIDB4MzBFMQorI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WX2RlcHRoX25v
bmxpbmVhcgorI2RlZmluZSBFR0xfTlZfZGVwdGhfbm9ubGluZWFyIDEKKyNkZWZpbmUgRUdMX0RF
UFRIX0VOQ09ESU5HX05WIDB4MzBFMgorI2RlZmluZSBFR0xfREVQVEhfRU5DT0RJTkdfTk9ORV9O
ViAwCisjZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OT05MSU5FQVJfTlYgMHgzMEUzCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfTlZfc3luYworI2RlZmluZSBFR0xfTlZfc3luYyAxCisjZGVmaW5l
IEVHTF9TWU5DX1BSSU9SX0NPTU1BTkRTX0NPTVBMRVRFX05WCTB4MzBFNgorI2RlZmluZSBFR0xf
U1lOQ19TVEFUVVNfTlYJCQkweDMwRTcKKyNkZWZpbmUgRUdMX1NJR05BTEVEX05WCQkJCTB4MzBF
OAorI2RlZmluZSBFR0xfVU5TSUdOQUxFRF9OVgkJCTB4MzBFOQorI2RlZmluZSBFR0xfU1lOQ19G
TFVTSF9DT01NQU5EU19CSVRfTlYJCTB4MDAwMQorI2RlZmluZSBFR0xfRk9SRVZFUl9OVgkJCQkw
eEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNkZWZpbmUgRUdMX0FMUkVBRFlfU0lHTkFMRURfTlYJCQkw
eDMwRUEKKyNkZWZpbmUgRUdMX1RJTUVPVVRfRVhQSVJFRF9OVgkJCTB4MzBFQgorI2RlZmluZSBF
R0xfQ09ORElUSU9OX1NBVElTRklFRF9OVgkJMHgzMEVDCisjZGVmaW5lIEVHTF9TWU5DX1RZUEVf
TlYJCQkweDMwRUQKKyNkZWZpbmUgRUdMX1NZTkNfQ09ORElUSU9OX05WCQkJMHgzMEVFCisjZGVm
aW5lIEVHTF9TWU5DX0ZFTkNFX05WCQkJMHgzMEVGCisjZGVmaW5lIEVHTF9OT19TWU5DX05WCQkJ
CSgoRUdMU3luY05WKTApCit0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKK3R5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIEVHTFRpbWVOVjsKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VH
TFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29u
ZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEJvb2xlYW4gZWdsRGVzdHJv
eVN5bmNOViAoRUdMU3luY05WIHN5bmMpOworRUdMQm9vbGVhbiBlZ2xGZW5jZU5WIChFR0xTeW5j
TlYgc3luYyk7CitFR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05WIHN5bmMsIEVH
TGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOworRUdMQm9vbGVhbiBlZ2xTaWduYWxTeW5j
TlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQm9vbGVhbiBlZ2xHZXRTeW5j
QXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVl
KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3luY05W
IChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9DKSAoRUdMRGlzcGxheSBk
cHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK3R5cGVk
ZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lTWU5DTlZQUk9DKSAoRUdM
U3luY05WIHN5bmMpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMRkVO
Q0VOVlBST0MpIChFR0xTeW5jTlYgc3luYyk7Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQ
IFBGTkVHTENMSUVOVFdBSVRTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMsIEVHTGludCBmbGFn
cywgRUdMVGltZU5WIHRpbWVvdXQpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAg
UEZORUdMU0lHTkFMU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMR0VUU1lOQ0FUVFJJQk5WUFJP
QykgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNl
bmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IEFO
R0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVk
ZS9FR0wvZWdscGxhdGZvcm0uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvRUdML2Vn
bHBsYXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9fZWds
cGxhdGZvcm1faF8KKyNkZWZpbmUgX19lZ2xwbGF0Zm9ybV9oXworCisvKgorKiogQ29weXJpZ2h0
IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
ZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRh
dGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFs
cyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0
aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3Ry
aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBh
bmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlz
aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cisq
KgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp
Y2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y
dGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisq
KiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZ
UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RI
RVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFU
RVJJQUxTLgorKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25z
IGZvciBlZ2wuaAorICogJFJldmlzaW9uOiA5NzI0ICQgb24gJERhdGU6IDIwMDktMTItMDIgMDI6
MDU6MzMgLTA4MDAgKFdlZCwgMDIgRGVjIDIwMDkpICQKKyAqCisgKiBBZG9wdGVycyBtYXkgbW9k
aWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0IHRoZWlyIHBsYXRmb3JtLgor
ICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUg
S2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBmdXR1cmUg
dmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHN1Ym1pdCBjaGFuZ2VzCisgKiBieSBzZW5k
aW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhIChodHRwOi8va2hyb25vcy5v
cmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcgYSBidWcgYWdhaW5zdCBwcm9kdWN0ICJFR0wiIGNv
bXBvbmVudCAiUmVnaXN0cnkiLgorICovCisKKyNpbmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4K
KworLyogTWFjcm9zIHVzZWQgaW4gRUdMIGZ1bmN0aW9uIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMu
CisgKgorICogRUdMIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHJvdG90eXBlZCBhczoKKyAqCisgKiBF
R0xBUEkgcmV0dXJuLXR5cGUgRUdMQVBJRU5UUlkgZWdsRnVuY3Rpb24oYXJndW1lbnRzKTsKKyAq
IHR5cGVkZWYgcmV0dXJuLXR5cGUgKEVYUEFQSUVOVFJZUCBQRk5FR0xGVU5DVElPTlBST0MpIChh
cmd1bWVudHMpOworICoKKyAqIEtIUk9OT1NfQVBJQ0FMTCBhbmQgS0hST05PU19BUElFTlRSWSBh
cmUgZGVmaW5lZCBpbiBLSFIva2hycGxhdGZvcm0uaAorICovCisKKyNpZm5kZWYgRUdMQVBJCisj
ZGVmaW5lIEVHTEFQSSBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisjaWZuZGVmIEVHTEFQSUVO
VFJZCisjZGVmaW5lIEVHTEFQSUVOVFJZICBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKyNkZWZp
bmUgRUdMQVBJRU5UUllQIEVHTEFQSUVOVFJZKgorCisvKiBUaGUgdHlwZXMgTmF0aXZlRGlzcGxh
eVR5cGUsIE5hdGl2ZVdpbmRvd1R5cGUsIGFuZCBOYXRpdmVQaXhtYXBUeXBlCisgKiBhcmUgYWxp
YXNlcyBvZiB3aW5kb3ctc3lzdGVtLWRlcGVuZGVudCB0eXBlcywgc3VjaCBhcyBYIERpc3BsYXkg
KiBvcgorICogV2luZG93cyBEZXZpY2UgQ29udGV4dC4gVGhleSBtdXN0IGJlIGRlZmluZWQgaW4g
cGxhdGZvcm0tc3BlY2lmaWMKKyAqIGNvZGUgYmVsb3cuIFRoZSBFR0wtcHJlZml4ZWQgdmVyc2lv
bnMgb2YgTmF0aXZlKlR5cGUgYXJlIHRoZSBzYW1lCisgKiB0eXBlcywgcmVuYW1lZCBpbiBFR0wg
MS4zIHNvIGFsbCB0eXBlcyBpbiB0aGUgQVBJIHN0YXJ0IHdpdGggIkVHTCIuCisgKi8KKworI2lm
IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVkMzMl9fKSAmJiAhZGVmaW5lZChfX0NZR1dJ
Tl9fKSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9fKSAvKiBXaW4zMiBhbmQgV2luQ0UgKi8K
KyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFO
IDEKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordHlwZWRlZiBIREMgICAgIEVHTE5h
dGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBIQklUTUFQIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Cit0
eXBlZGVmIEhXTkQgICAgRUdMTmF0aXZlV2luZG93VHlwZTsKKworI2VsaWYgZGVmaW5lZChfX1dJ
TlNDV19fKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18pICAvKiBTeW1iaWFuICovCisKK3R5cGVk
ZWYgaW50ICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Cit0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVdp
bmRvd1R5cGU7Cit0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVBpeG1hcFR5cGU7CisKKyNlbGlmIGRl
ZmluZWQoX191bml4X18pCisKKy8qIFgxMSAodGVudGF0aXZlKSAgKi8KKyNpbmNsdWRlIDxYMTEv
WGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorCit0eXBlZGVmIERpc3BsYXkgKkVHTE5h
dGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBQaXhtYXAgICBFR0xOYXRpdmVQaXhtYXBUeXBlOwor
dHlwZWRlZiBXaW5kb3cgICBFR0xOYXRpdmVXaW5kb3dUeXBlOworCisjZWxzZQorI2Vycm9yICJQ
bGF0Zm9ybSBub3QgcmVjb2duaXplZCIKKyNlbmRpZgorCisvKiBFR0wgMS4yIHR5cGVzLCByZW5h
bWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICovCit0eXBlZGVmIEVHTE5hdGl2ZURpc3Bs
YXlUeXBlIE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBFR0xOYXRpdmVQaXhtYXBUeXBlICBO
YXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBFR0xOYXRpdmVXaW5kb3dUeXBlICBOYXRpdmVXaW5k
b3dUeXBlOworCisKKy8qIERlZmluZSBFR0xpbnQuIFRoaXMgbXVzdCBiZSBhIHNpZ25lZCBpbnRl
Z3JhbCB0eXBlIGxhcmdlIGVub3VnaCB0byBjb250YWluCisgKiBhbGwgbGVnYWwgYXR0cmlidXRl
IG5hbWVzIGFuZCB2YWx1ZXMgcGFzc2VkIGludG8gYW5kIG91dCBvZiBFR0wsIHdoZXRoZXIKKyAq
IHRoZWlyIHR5cGUgaXMgYm9vbGVhbiwgYml0bWFzaywgZW51bWVyYW50IChzeW1ib2xpYyBjb25z
dGFudCksIGludGVnZXIsCisgKiBoYW5kbGUsIG9yIG90aGVyLiAgV2hpbGUgaW4gZ2VuZXJhbCBh
IDMyLWJpdCBpbnRlZ2VyIHdpbGwgc3VmZmljZSwgaWYKKyAqIGhhbmRsZXMgYXJlIDY0IGJpdCB0
eXBlcywgdGhlbiBFR0xpbnQgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzaWduZWQgNjQtYml0Cisg
KiBpbnRlZ2VyIHR5cGUuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQzMl90IEVHTGludDsKKwor
I2VuZGlmIC8qIF9fZWdscGxhdGZvcm1faCAqLwpJbmRleDogQU5HTEUvaW5jbHVkZS9HTEVTMi9n
bDIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MjEgQEAKKyNpZm5kZWYgX19nbDJfaF8KKyNkZWZpbmUgX19nbDJfaF8KKworLyogJFJldmlzaW9u
OiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworCisj
aW5jbHVkZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl
cm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRl
dGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGEgdHlwZSBkZWZpbml0aW9ucworICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKK3R5cGVkZWYgdm9pZCAgICAgICAgICAgICBHTHZvaWQ7Cit0eXBlZGVmIGNoYXIg
ICAgICAgICAgICAgR0xjaGFyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMZW51bTsKK3R5
cGVkZWYgdW5zaWduZWQgY2hhciAgICBHTGJvb2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIGludCAg
ICAgR0xiaXRmaWVsZDsKK3R5cGVkZWYga2hyb25vc19pbnQ4X3QgICBHTGJ5dGU7Cit0eXBlZGVm
IHNob3J0ICAgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTGlu
dDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTHNpemVpOwordHlwZWRlZiBraHJvbm9zX3Vp
bnQ4X3QgIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgR0x1c2hvcnQ7Cit0eXBl
ZGVmIHVuc2lnbmVkIGludCAgICAgR0x1aW50OwordHlwZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdM
ZmxvYXQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xjbGFtcGY7Cit0eXBlZGVmIGtocm9u
b3NfaW50MzJfdCAgR0xmaXhlZDsKKworLyogR0wgdHlwZXMgZm9yIGhhbmRsaW5nIGxhcmdlIHZl
cnRleCBidWZmZXIgb2JqZWN0cyAqLwordHlwZWRlZiBraHJvbm9zX2ludHB0cl90IEdMaW50cHRy
OwordHlwZWRlZiBraHJvbm9zX3NzaXplX3QgIEdMc2l6ZWlwdHI7CisKKy8qIE9wZW5HTCBFUyBj
b3JlIHZlcnNpb25zICovCisjZGVmaW5lIEdMX0VTX1ZFUlNJT05fMl8wICAgICAgICAgICAgICAg
ICAxCisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
ICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQg
ICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUICAgICAg
ICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBCb29sZWFuICovCisjZGVmaW5lIEdMX0ZBTFNFICAg
ICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX1RSVUUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxCisKKy8qIEJlZ2luTW9kZSAqLworI2RlZmluZSBHTF9QT0lOVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEdMX0xJTkVTICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTElORV9MT09QICAgICAgICAgICAgICAgICAg
ICAgIDB4MDAwMgorI2RlZmluZSBHTF9MSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgMHgw
MDAzCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNk
ZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBH
TF9UUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgMHgwMDA2CisKKy8qIEFscGhhRnVuY3Rp
b24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgR0xfTkVWRVIgKi8KKy8qICAg
ICAgR0xfTEVTUyAqLworLyogICAgICBHTF9FUVVBTCAqLworLyogICAgICBHTF9MRVFVQUwgKi8K
Ky8qICAgICAgR0xfR1JFQVRFUiAqLworLyogICAgICBHTF9OT1RFUVVBTCAqLworLyogICAgICBH
TF9HRVFVQUwgKi8KKy8qICAgICAgR0xfQUxXQVlTICovCisKKy8qIEJsZW5kaW5nRmFjdG9yRGVz
dCAqLworI2RlZmluZSBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmlu
ZSBHTF9PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHTF9TUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEdMX09ORV9NSU5VU19TUkNf
Q09MT1IgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgR0xfU1JDX0FMUEhBICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAg
ICAgMHgwMzAzCisjZGVmaW5lIEdMX0RTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAweDAz
MDQKKyNkZWZpbmUgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgIDB4MDMwNQorCisv
KiBCbGVuZGluZ0ZhY3RvclNyYyAqLworLyogICAgICBHTF9aRVJPICovCisvKiAgICAgIEdMX09O
RSAqLworI2RlZmluZSBHTF9EU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgMHgwMzA2Cisj
ZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICAweDAzMDcKKyNkZWZpbmUg
R0xfU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDB4MDMwOAorLyogICAgICBHTF9TUkNf
QUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAqLworLyogICAgICBHTF9E
U1RfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisvKiBCbGVu
ZEVxdWF0aW9uU2VwYXJhdGUgKi8KKyNkZWZpbmUgR0xfRlVOQ19BREQgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODAwNgorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAg
MHg4MDA5CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICAweDgwMDkg
ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworI2RlZmluZSBHTF9CTEVORF9FUVVBVElP
Tl9BTFBIQSAgICAgICAgICAgMHg4ODNECisKKy8qIEJsZW5kU3VidHJhY3QgKi8KKyNkZWZpbmUg
R0xfRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDB4ODAwQQorI2RlZmluZSBHTF9GVU5D
X1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgMHg4MDBCCisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1
bmN0aW9ucyAqLworI2RlZmluZSBHTF9CTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgMHg4
MEM4CisjZGVmaW5lIEdMX0JMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICAweDgwQzkKKyNk
ZWZpbmUgR0xfQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDB4ODBDQQorI2RlZmluZSBH
TF9CTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgMHg4MENCCisjZGVmaW5lIEdMX0NPTlNU
QU5UX0NPTE9SICAgICAgICAgICAgICAgICAweDgwMDEKKyNkZWZpbmUgR0xfT05FX01JTlVTX0NP
TlNUQU5UX0NPTE9SICAgICAgIDB4ODAwMgorI2RlZmluZSBHTF9DT05TVEFOVF9BTFBIQSAgICAg
ICAgICAgICAgICAgMHg4MDAzCisjZGVmaW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAg
ICAgICAweDgwMDQKKyNkZWZpbmUgR0xfQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgIDB4
ODAwNQorCisvKiBCdWZmZXIgT2JqZWN0cyAqLworI2RlZmluZSBHTF9BUlJBWV9CVUZGRVIgICAg
ICAgICAgICAgICAgICAgMHg4ODkyCisjZGVmaW5lIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSICAg
ICAgICAgICAweDg4OTMKKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
IDB4ODg5NAorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgMHg4ODk1
CisKKyNkZWZpbmUgR0xfU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgIDB4ODhFMAorI2Rl
ZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgMHg4OEU0CisjZGVmaW5lIEdM
X0RZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICAweDg4RTgKKworI2RlZmluZSBHTF9CVUZG
RVJfU0laRSAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjZGVmaW5lIEdMX0JVRkZFUl9VU0FH
RSAgICAgICAgICAgICAgICAgICAweDg3NjUKKworI2RlZmluZSBHTF9DVVJSRU5UX1ZFUlRFWF9B
VFRSSUIgICAgICAgICAgMHg4NjI2CisKKy8qIEN1bGxGYWNlTW9kZSAqLworI2RlZmluZSBHTF9G
Uk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIEdMX0JBQ0sgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDA0MDUKKyNkZWZpbmUgR0xfRlJPTlRfQU5EX0JBQ0sg
ICAgICAgICAgICAgICAgIDB4MDQwOAorCisvKiBEZXB0aEZ1bmN0aW9uICovCisvKiAgICAgIEdM
X05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAgICAgR0xfRVFVQUwgKi8KKy8qICAg
ICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIgKi8KKy8qICAgICAgR0xfTk9URVFV
QUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAgIEdMX0FMV0FZUyAqLworCisvKiBF
bmFibGVDYXAgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDB4
MERFMQorI2RlZmluZSBHTF9DVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ0Cisj
ZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRTIKKyNkZWZpbmUg
R0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJEMAorI2RlZmluZSBHTF9TVEVO
Q0lMX1RFU1QgICAgICAgICAgICAgICAgICAgMHgwQjkwCisjZGVmaW5lIEdMX0RFUFRIX1RFU1Qg
ICAgICAgICAgICAgICAgICAgICAweDBCNzEKKyNkZWZpbmUgR0xfU0NJU1NPUl9URVNUICAgICAg
ICAgICAgICAgICAgIDB4MEMxMQorI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMICAgICAg
ICAgICAgMHg4MDM3CisjZGVmaW5lIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICAw
eDgwOUUKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDB4ODBBMAor
CisvKiBFcnJvckNvZGUgKi8KKyNkZWZpbmUgR0xfTk9fRVJST1IgICAgICAgICAgICAgICAgICAg
ICAgIDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgIDB4MDUwMAor
I2RlZmluZSBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgMHgwNTAxCisjZGVmaW5l
IEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICAweDA1MDIKKyNkZWZpbmUgR0xfT1VU
X09GX01FTU9SWSAgICAgICAgICAgICAgICAgIDB4MDUwNQorCisvKiBGcm9udEZhY2VEaXJlY3Rp
b24gKi8KKyNkZWZpbmUgR0xfQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMAor
I2RlZmluZSBHTF9DQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOTAxCisKKy8qIEdl
dFBOYW1lICovCisjZGVmaW5lIEdMX0xJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAweDBC
MjEKKyNkZWZpbmUgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDB4ODQ2RAorI2Rl
ZmluZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgMHg4NDZFCisjZGVmaW5lIEdM
X0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICAweDBCNDUKKyNkZWZpbmUgR0xfRlJPTlRf
RkFDRSAgICAgICAgICAgICAgICAgICAgIDB4MEI0NgorI2RlZmluZSBHTF9ERVBUSF9SQU5HRSAg
ICAgICAgICAgICAgICAgICAgMHgwQjcwCisjZGVmaW5lIEdMX0RFUFRIX1dSSVRFTUFTSyAgICAg
ICAgICAgICAgICAweDBCNzIKKyNkZWZpbmUgR0xfREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAg
ICAgIDB4MEI3MworI2RlZmluZSBHTF9ERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgMHgw
Qjc0CisjZGVmaW5lIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICAweDBCOTEKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDB4MEI5MgorI2RlZmluZSBH
TF9TVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgMHgwQjk0CisjZGVmaW5lIEdMX1NURU5D
SUxfUEFTU19ERVBUSF9GQUlMICAgICAgICAweDBCOTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9QQVNT
X0RFUFRIX1BBU1MgICAgICAgIDB4MEI5NgorI2RlZmluZSBHTF9TVEVOQ0lMX1JFRiAgICAgICAg
ICAgICAgICAgICAgMHgwQjk3CisjZGVmaW5lIEdMX1NURU5DSUxfVkFMVUVfTUFTSyAgICAgICAg
ICAgICAweDBCOTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDB4
MEI5OAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgMHg4ODAwCisj
ZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICAweDg4MDEKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDB4ODgwMgorI2RlZmluZSBHTF9TVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgMHg4ODAzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFD
S19SRUYgICAgICAgICAgICAgICAweDhDQTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1ZBTFVF
X01BU0sgICAgICAgIDB4OENBNAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAg
ICAgICAgMHg4Q0E1CisjZGVmaW5lIEdMX1ZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICAw
eDBCQTIKKyNkZWZpbmUgR0xfU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDB4MEMxMAor
LyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8KKyNkZWZpbmUgR0xfQ09MT1JfQ0xFQVJfVkFMVUUg
ICAgICAgICAgICAgIDB4MEMyMgorI2RlZmluZSBHTF9DT0xPUl9XUklURU1BU0sgICAgICAgICAg
ICAgICAgMHgwQzIzCisjZGVmaW5lIEdMX1VOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAw
eDBDRjUKKyNkZWZpbmUgR0xfUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgIDB4MEQwNQor
I2RlZmluZSBHTF9NQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgMHgwRDMzCisjZGVmaW5l
IEdMX01BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICAweDBEM0EKKyNkZWZpbmUgR0xfU1VC
UElYRUxfQklUUyAgICAgICAgICAgICAgICAgIDB4MEQ1MAorI2RlZmluZSBHTF9SRURfQklUUyAg
ICAgICAgICAgICAgICAgICAgICAgMHgwRDUyCisjZGVmaW5lIEdMX0dSRUVOX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAweDBENTMKKyNkZWZpbmUgR0xfQkxVRV9CSVRTICAgICAgICAgICAgICAg
ICAgICAgIDB4MEQ1NAorI2RlZmluZSBHTF9BTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAg
MHgwRDU1CisjZGVmaW5lIEdMX0RFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICAweDBENTYK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgIDB4MEQ1NworI2RlZmlu
ZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgMHgyQTAwCisvKiAgICAgIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAg
ICAgICAgIDB4ODAzOAorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAg
MHg4MDY5CisjZGVmaW5lIEdMX1NBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICAweDgwQTgK
KyNkZWZpbmUgR0xfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBOQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgMHg4MEFBCisjZGVmaW5lIEdMX1NB
TVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICAweDgwQUIKKworLyogR2V0VGV4dHVyZVBhcmFt
ZXRlciAqLworLyogICAgICBHTF9URVhUVVJFX01BR19GSUxURVIgKi8KKy8qICAgICAgR0xfVEVY
VFVSRV9NSU5fRklMVEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9TICovCisvKiAgICAg
IEdMX1RFWFRVUkVfV1JBUF9UICovCisKKyNkZWZpbmUgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTIDB4ODZBMgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAg
ICAgMHg4NkEzCisKKy8qIEhpbnRNb2RlICovCisjZGVmaW5lIEdMX0RPTlRfQ0FSRSAgICAgICAg
ICAgICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgR0xfRkFTVEVTVCAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTEwMQorI2RlZmluZSBHTF9OSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxMTAyCisKKy8qIEhpbnRUYXJnZXQgKi8KKyNkZWZpbmUgR0xfR0VORVJBVEVfTUlQTUFQX0hJ
TlQgICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9VTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVmaW5lIEdMX1NIT1JUICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE0MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
NDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNk
ZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBH
TF9GSVhFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9ybWF0
ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAweDE5MDIKKyNk
ZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNgorI2RlZmluZSBH
TF9SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5BTkNFICAg
ICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBHTF9MVU1JTkFOQ0VfQUxQSEEgICAg
ICAgICAgICAgICAgMHgxOTBBCisKKy8qIFBpeGVsVHlwZSAqLworLyogICAgICBHTF9VTlNJR05F
RF9CWVRFICovCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICAweDgw
MzMKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgIDB4ODAzNAorI2Rl
ZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgMHg4MzYzCisKKy8qIFNoYWRl
cnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgMHg4QjMw
CisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAgICAgIDB4OEIzMQorI2Rl
ZmluZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICAweDg4NjkKKyNkZWZpbmUg
R0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgMHg4REZCCisjZGVmaW5lIEdMX01B
WF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgIDB4OERGQworI2RlZmluZSBHTF9NQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAweDhCNEQKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTICAgMHg4QjRDCisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0lNQUdF
X1VOSVRTICAgICAgICAgIDB4ODg3MgorI2RlZmluZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTICAgICAweDhERkQKKyNkZWZpbmUgR0xfU0hBREVSX1RZUEUgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjRGCisjZGVmaW5lIEdMX0RFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
IDB4OEI4MAorI2RlZmluZSBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAweDhC
ODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgMHg4QjgzCisj
ZGVmaW5lIEdMX0FUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgIDB4OEI4NQorI2RlZmlu
ZSBHTF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xf
QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAgICAgMHg4Qjg3CisjZGVmaW5lIEdMX0FDVElW
RV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDB4OEI4OQorI2RlZmluZSBHTF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEggICAgICAweDhCOEEKKyNkZWZpbmUgR0xfU0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OICAgICAgICAgMHg4QjhDCisjZGVmaW5lIEdMX0NVUlJFTlRfUFJPR1JBTSAgICAg
ICAgICAgICAgICAgIDB4OEI4RAorCisvKiBTdGVuY2lsRnVuY3Rpb24gKi8KKyNkZWZpbmUgR0xf
TkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBHTF9MRVNTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCisjZGVmaW5lIEdMX0VRVUFMICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAyMDIKKyNkZWZpbmUgR0xfTEVRVUFMICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDIwMworI2RlZmluZSBHTF9HUkVBVEVSICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMjA0CisjZGVmaW5lIEdMX05PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDUKKyNkZWZpbmUgR0xfR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNgorI2Rl
ZmluZSBHTF9BTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA3CisKKy8qIFN0ZW5j
aWxPcCAqLworLyogICAgICBHTF9aRVJPICovCisjZGVmaW5lIEdMX0tFRVAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDFFMDAKKyNkZWZpbmUgR0xfUkVQTEFDRSAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MUUwMQorI2RlZmluZSBHTF9JTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxRTAyCisjZGVmaW5lIEdMX0RFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDMK
KyNkZWZpbmUgR0xfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUwQQorI2RlZmlu
ZSBHTF9JTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgMHg4NTA3CisjZGVmaW5lIEdMX0RF
Q1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAweDg1MDgKKworLyogU3RyaW5nTmFtZSAqLwor
I2RlZmluZSBHTF9WRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAwCisjZGVmaW5l
IEdMX1JFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICAweDFGMDEKKyNkZWZpbmUgR0xfVkVS
U0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMgorI2RlZmluZSBHTF9FWFRFTlNJT05T
ICAgICAgICAgICAgICAgICAgICAgMHgxRjAzCisKKy8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KKyNk
ZWZpbmUgR0xfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYwMAorI2RlZmluZSBH
TF9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjAxCisKKy8qIFRleHR1cmVNaW5G
aWx0ZXIgKi8KKy8qICAgICAgR0xfTkVBUkVTVCAqLworLyogICAgICBHTF9MSU5FQVIgKi8KKyNk
ZWZpbmUgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDB4MjcwMAorI2RlZmluZSBH
TF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgMHgyNzAxCisjZGVmaW5lIEdMX05FQVJF
U1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICAweDI3MDIKKyNkZWZpbmUgR0xfTElORUFSX01JUE1B
UF9MSU5FQVIgICAgICAgICAgIDB4MjcwMworCisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLwor
I2RlZmluZSBHTF9URVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgMHgyODAwCisjZGVmaW5l
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICAweDI4MDEKKyNkZWZpbmUgR0xfVEVY
VFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgIDB4MjgwMgorI2RlZmluZSBHTF9URVhUVVJFX1dS
QVBfVCAgICAgICAgICAgICAgICAgMHgyODAzCisKKy8qIFRleHR1cmVUYXJnZXQgKi8KKy8qICAg
ICAgR0xfVEVYVFVSRV8yRCAqLworI2RlZmluZSBHTF9URVhUVVJFICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxNzAyCisKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAg
IDB4ODUxMworI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAgICAgICAgMHg4NTE0
CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAgICAweDg1MTUKKyNkZWZp
bmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDB4ODUxNgorI2RlZmluZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgMHg4NTE3CisjZGVmaW5lIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWSAgICAweDg1MTgKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aICAgIDB4ODUxOQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1ogICAgMHg4NTFBCisjZGVmaW5lIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAg
ICAweDg1MUMKKworLyogVGV4dHVyZVVuaXQgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRTAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRDMAorI2RlZmluZSBHTF9URVhUVVJFMSAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEMxCisjZGVmaW5lIEdMX1RFWFRVUkUyICAgICAgICAgICAgICAgICAgICAg
ICAweDg0QzIKKyNkZWZpbmUgR0xfVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
MworI2RlZmluZSBHTF9URVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM0CisjZGVm
aW5lIEdMX1RFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzUKKyNkZWZpbmUgR0xf
VEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNgorI2RlZmluZSBHTF9URVhUVVJF
NyAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM3CisjZGVmaW5lIEdMX1RFWFRVUkU4ICAgICAg
ICAgICAgICAgICAgICAgICAweDg0QzgKKyNkZWZpbmUgR0xfVEVYVFVSRTkgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRDOQorI2RlZmluZSBHTF9URVhUVVJFMTAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NENBCisjZGVmaW5lIEdMX1RFWFRVUkUxMSAgICAgICAgICAgICAgICAgICAgICAweDg0
Q0IKKyNkZWZpbmUgR0xfVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgIDB4ODRDQworI2Rl
ZmluZSBHTF9URVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgMHg4NENECisjZGVmaW5lIEdM
X1RFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICAweDg0Q0UKKyNkZWZpbmUgR0xfVEVYVFVS
RTE1ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRgorI2RlZmluZSBHTF9URVhUVVJFMTYgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQwCisjZGVmaW5lIEdMX1RFWFRVUkUxNyAgICAgICAgICAg
ICAgICAgICAgICAweDg0RDEKKyNkZWZpbmUgR0xfVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREMgorI2RlZmluZSBHTF9URVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgMHg4
NEQzCisjZGVmaW5lIEdMX1RFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICAweDg0RDQKKyNk
ZWZpbmUgR0xfVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDB4ODRENQorI2RlZmluZSBH
TF9URVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ2CisjZGVmaW5lIEdMX1RFWFRV
UkUyMyAgICAgICAgICAgICAgICAgICAgICAweDg0RDcKKyNkZWZpbmUgR0xfVEVYVFVSRTI0ICAg
ICAgICAgICAgICAgICAgICAgIDB4ODREOAorI2RlZmluZSBHTF9URVhUVVJFMjUgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEQ5CisjZGVmaW5lIEdMX1RFWFRVUkUyNiAgICAgICAgICAgICAgICAg
ICAgICAweDg0REEKKyNkZWZpbmUgR0xfVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgIDB4
ODREQgorI2RlZmluZSBHTF9URVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgMHg4NERDCisj
ZGVmaW5lIEdMX1RFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAgICAweDg0REQKKyNkZWZpbmUg
R0xfVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDB4ODRERQorI2RlZmluZSBHTF9URVhU
VVJFMzEgICAgICAgICAgICAgICAgICAgICAgMHg4NERGCisjZGVmaW5lIEdMX0FDVElWRV9URVhU
VVJFICAgICAgICAgICAgICAgICAweDg0RTAKKworLyogVGV4dHVyZVdyYXBNb2RlICovCisjZGVm
aW5lIEdMX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI5MDEKKyNkZWZpbmUgR0xf
Q0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDB4ODEyRgorI2RlZmluZSBHTF9NSVJST1JF
RF9SRVBFQVQgICAgICAgICAgICAgICAgMHg4MzcwCisKKy8qIFVuaWZvcm0gVHlwZXMgKi8KKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDB4OEI1MAorI2RlZmluZSBH
TF9GTE9BVF9WRUMzICAgICAgICAgICAgICAgICAgICAgMHg4QjUxCisjZGVmaW5lIEdMX0ZMT0FU
X1ZFQzQgICAgICAgICAgICAgICAgICAgICAweDhCNTIKKyNkZWZpbmUgR0xfSU5UX1ZFQzIgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1MworI2RlZmluZSBHTF9JTlRfVkVDMyAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjU0CisjZGVmaW5lIEdMX0lOVF9WRUM0ICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNTUKKyNkZWZpbmUgR0xfQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1NgorI2RlZmluZSBHTF9CT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgMHg4QjU3Cisj
ZGVmaW5lIEdMX0JPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICAweDhCNTgKKyNkZWZpbmUg
R0xfQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OQorI2RlZmluZSBHTF9GTE9B
VF9NQVQyICAgICAgICAgICAgICAgICAgICAgMHg4QjVBCisjZGVmaW5lIEdMX0ZMT0FUX01BVDMg
ICAgICAgICAgICAgICAgICAgICAweDhCNUIKKyNkZWZpbmUgR0xfRkxPQVRfTUFUNCAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QworI2RlZmluZSBHTF9TQU1QTEVSXzJEICAgICAgICAgICAgICAg
ICAgICAgMHg4QjVFCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICAw
eDhCNjAKKworLyogVmVydGV4IEFycmF5cyAqLworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQgICAgICAgIDB4ODYyMgorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkUgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NU
UklERSAgICAgICAgIDB4ODYyNAorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUg
ICAgICAgICAgIDB4ODYyNQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTEla
RUQgICAgIDB4ODg2QQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAg
ICAgIDB4ODY0NQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5H
IDB4ODg5RgorCisvKiBSZWFkIEZvcm1hdCAqLworI2RlZmluZSBHTF9JTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX1RZUEUgICAweDhCOUEKKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9GT1JNQVQgMHg4QjlCCisKKy8qIFNoYWRlciBTb3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09N
UElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4OEI4MQorI2RlZmluZSBHTF9JTkZPX0xPR19M
RU5HVEggICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NPTVBJTEVSICAgICAgICAg
ICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIgQmluYXJ5ICovCisjZGVmaW5lIEdMX1NIQURFUl9C
SU5BUllfRk9STUFUUyAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5B
UllfRk9STUFUUyAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBU
eXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgMHg4REYw
CisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAgICAweDhERjEKKyNkZWZp
bmUgR0xfSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9M
T1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01FRElVTV9J
TlQgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZpbmUgR0xfSElHSF9JTlQgICAgICAg
ICAgICAgICAgICAgICAgIDB4OERGNQorCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xf
UkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5lIEdMX1JHQkE0
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYKKyNkZWZpbmUgR0xfUkdCNV9BMSAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAg
ICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgIDB4
MTkwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgMHg4RDQ4CisK
KyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDB4OEQ0MgorI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgMHg4RDQzCisjZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICAweDhENDQKKyNkZWZpbmUgR0xfUkVOREVSQlVG
RkVSX1JFRF9TSVpFICAgICAgICAgIDB4OEQ1MAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfR1JF
RU5fU0laRSAgICAgICAgMHg4RDUxCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkUg
ICAgICAgICAweDhENTIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAg
IDB4OEQ1MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgMHg4RDU0
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICAweDhENTUKKworI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICAweDhD
RDAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAg
ICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TCAgICAgICAgIDB4OENEMgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRV
UkVfQ1VCRV9NQVBfRkFDRSAweDhDRDMKKworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAg
ICAgICAgICAgICAgMHg4Q0UwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlQgICAgICAgICAg
ICAgICAweDhEMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDB4
OEQyMAorCisjZGVmaW5lIEdMX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgMHg4Q0Q1
CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgIDB4
OENENgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVO
VCAweDhDRDcKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAg
ICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEICAgICAgICAg
ICAgICAgICAgIDB4OENERAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAweDhDQTYKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDB4
OENBNworI2RlZmluZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgMHg4NEU4CisK
KyNkZWZpbmUgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDB4MDUwNgorCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAqIEdMIGNvcmUgZnVuY3Rpb25zLgorICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAo
R0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xB
dHRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJv
Z3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
YnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEZyYW1l
YnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQmluZFRleHR1cmUgKEdMZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRDb2xvciAoR0xjbGFtcGYgcmVk
LCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uICggR0xlbnVtIG1v
ZGUgKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlv
blNlcGFyYXRlIChHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuYyAoR0xlbnVtIHNmYWN0b3IsIEdM
ZW51bSBkZmFjdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxl
bmRGdW5jU2VwYXJhdGUgKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNB
bHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQnVmZmVyRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBH
THZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEJ1ZmZlclN1YkRhdGEgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCBHTGVudW0g
ICAgICAgR0xfQVBJRU5UUlkgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzIChHTGVudW0gdGFyZ2V0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0Zmll
bGQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyQ29s
b3IgKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBm
IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0
aGYgKEdMY2xhbXBmIGRlcHRoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ2xlYXJTdGVuY2lsIChHTGludCBzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9v
bGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDb21waWxlU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZv
aWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleEltYWdlMkQgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgR0x1
aW50ICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9BUElDQUxM
IEdMdWludCAgICAgICBHTF9BUElFTlRSWSBnbENyZWF0ZVNoYWRlciAoR0xlbnVtIHR5cGUpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDdWxsRmFjZSAoR0xlbnVtIG1v
ZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVCdWZmZXJz
IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUZyYW1lYnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbERlbGV0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZWxldGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUZXh0dXJlcyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQq
IHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhG
dW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bERlcHRoTWFzayAoR0xib29sZWFuIGZsYWcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZXB0aFJhbmdlZiAoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXRhY2hTaGFkZXIgKEdMdWlu
dCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsRGlzYWJsZSAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1aW50IGluZGV4KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5cyAoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZSAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5k
ZXgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGaW5pc2ggKHZvaWQp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGbHVzaCAodm9pZCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEIChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
YXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVs
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJvbnRGYWNlIChHTGVu
dW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZl
cnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2VuZXJhdGVNaXBtYXAgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5GcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwg
R0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblRleHR1cmVzIChHTHNp
emVpIG4sIEdMdWludCogdGV4dHVyZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNo
ZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291
bnQsIEdMdWludCogc2hhZGVycyk7CitHTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdM
ZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0RXJyb3IgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRJbnRlZ2VydiAoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0UHJvZ3JhbUluZm9Mb2cgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChHTHVpbnQgc2hhZGVyLCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRTaGFkZXJJbmZvTG9nIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwg
R0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclNvdXJjZSAoR0x1
aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291
cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1Ynl0ZSogR0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcg
KEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
VGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1l
dGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHBy
b2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGlu
dCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIGludCAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYg
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc0J1ZmZlciAoR0x1aW50
IGJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzRW5hYmxl
ZCAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElz
RnJhbWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICBHTF9BUElFTlRSWSBnbElzUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCBH
TGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1JlbmRlcmJ1ZmZlciAoR0x1aW50IHJlbmRlcmJ1
ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVyIChH
THVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNU
ZXh0dXJlIChHTHVpbnQgdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbExpbmVXaWR0aCAoR0xmbG9hdCB3aWR0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFBpeGVsU3RvcmVpIChHTGVudW0gcG5hbWUsIEdM
aW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUG9seWdv
bk9mZnNldCAoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
dm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVs
ZWFzZVNoYWRlckNvbXBpbGVyICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdlIChHTGNsYW1wZiB2YWx1ZSwg
R0xib29sZWFuIGludmVydCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmluYXJ5IChH
THNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29u
c3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMs
IEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdM
aW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xTdGVuY2lsTWFzayAoR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFza1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0x1aW50IG1h
c2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdM
ZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcFNlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xl
bnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBw
aXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0
ZXJmIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJpIChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29u
c3QgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFmIChHTGludCBsb2NhdGlvbiwgR0xmbG9h
dCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFmdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWkgKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTFpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChHTGludCBsb2Nh
dGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVu
aWZvcm0yaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtM2YgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2kgKEdMaW50
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVW5pZm9ybTRmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdM
ZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGkg
KEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpdiAoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDJmdiAoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDNmdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
VW5pZm9ybU1hdHJpeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVXNlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWYWxpZGF0ZVByb2dyYW0gKEdMdWludCBwcm9n
cmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmli
MWYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2
YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRy
aWIyZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmZ2IChHTHVpbnQgaW5keCwgY29u
c3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmVydGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0
cmliM2Z2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGYgKEdMdWludCBpbmR4LCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIChHTHVpbnQgaW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVt
IHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lk
KiBwdHIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWaWV3cG9ydCAo
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisjaWZk
ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19nbDJfaF8gKi8KSW5kZXg6
IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVk
ZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wy
ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzczIEBACisjaWZuZGVmIF9fZ2wyZXh0X2hf
CisjZGVmaW5lIF9fZ2wyZXh0X2hfCisKKy8qICRSZXZpc2lvbjogMTA3OTggJCBvbiAkRGF0ZTo6
IDIwMTAtMDMtMTkgMTc6MzQ6MzAgLTA3MDAgIyQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9y
IGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLwor
CisjaWZuZGVmIEdMX0FQSUVOVFJZUAorIyAgIGRlZmluZSBHTF9BUElFTlRSWVAgR0xfQVBJRU5U
UlkqCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBPRVMgZXh0ZW5zaW9uIHRva2Vu
cworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhf
dGV4dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZQor
I2RlZmluZSBHTF9FVEMxX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEQ2NAorI2VuZGlmCisKKy8qIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3Rl
eHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4dHVyZQorI2Rl
ZmluZSBHTF9QQUxFVFRFNF9SR0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI5MAorI2RlZmluZSBHTF9QQUxFVFRFNF9SR0JBOF9PRVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI5MQorI2RlZmluZSBHTF9QQUxFVFRFNF9SNV9HNl9CNV9P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5MgorI2RlZmluZSBHTF9QQUxF
VFRFNF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5Mwor
I2RlZmluZSBHTF9QQUxFVFRFNF9SR0I1X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEI5NAorI2RlZmluZSBHTF9QQUxFVFRFOF9SR0I4X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NQorI2RlZmluZSBHTF9QQUxFVFRFOF9SR0JBOF9P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NgorI2RlZmluZSBHTF9Q
QUxFVFRFOF9SNV9HNl9CNV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5
NworI2RlZmluZSBHTF9QQUxFVFRFOF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEI5OAorI2RlZmluZSBHTF9QQUxFVFRFOF9SR0I1X0ExX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5OQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0
aDI0ICovCisjaWZuZGVmIEdMX09FU19kZXB0aDI0CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVO
VDI0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2CisjZW5kaWYKKwor
LyogR0xfT0VTX2RlcHRoMzIgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMzIKKyNkZWZpbmUgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgx
QTcKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGhfdGV4dHVyZSAqLworLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfRUdMX2ltYWdl
ICovCisjaWZuZGVmIEdMX09FU19FR0xfaW1hZ2UKK3R5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9F
UzsKKyNlbmRpZgorCisvKiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICovCisjaWZuZGVmIEdM
X09FU19lbGVtZW50X2luZGV4X3VpbnQKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNlbmRpZgorCisvKiBHTF9P
RVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5h
cnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg3NDEKKyNkZWZpbmUgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNf
T0VTICAgICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5B
UllfRk9STUFUU19PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3RkYKKyNlbmRpZgor
CisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisjaWZuZGVmIEdMX09FU19tYXBidWZmZXIKKyNkZWZp
bmUgR0xfV1JJVEVfT05MWV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4QjkKKyNkZWZpbmUgR0xfQlVGRkVSX0FDQ0VTU19PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4QkIKKyNkZWZpbmUgR0xfQlVGRkVSX01BUFBFRF9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMKKyNkZWZpbmUgR0xfQlVGRkVS
X01BUF9QT0lOVEVSX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkQKKyNl
bmRpZgorCisvKiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKi8KKyNpZm5kZWYgR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsCisjZGVmaW5lIEdMX0RFUFRIX1NURU5DSUxfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEZBCisjZGVm
aW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4OEYwCisjZW5kaWYKKworLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KKyNpZm5kZWYgR0xf
T0VTX3JnYjhfcmdiYTgKKyNkZWZpbmUgR0xfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgwNTEKKyNkZWZpbmUgR0xfUkdCQThfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTgKKyNlbmRpZgorCisv
KiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgKi8KKyNpZm5kZWYgR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTICAgICAgICAgICAgICAgICAgMHg4QjhCCisjZW5kaWYKKworLyogR0xfT0VTX3N0ZW5jaWwx
ICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsMQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYMV9P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0NgorI2VuZGlmCisKKy8q
IEdMX09FU19zdGVuY2lsNCAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDQKKyNkZWZpbmUgR0xf
U1RFTkNJTF9JTkRFWDRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
NDcKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV8zRCAqLworI2lmbmRlZiBHTF9PRVNfdGV4
dHVyZV8zRAorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfUl9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODA3MgorI2RlZmluZSBHTF9URVhUVVJFXzNEX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA2RgorI2RlZmluZSBHTF9URVhUVVJF
X0JJTkRJTkdfM0RfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA2QQorI2Rl
ZmluZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA3MworI2RlZmluZSBHTF9TQU1QTEVSXzNEX09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1RgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfM0RfWk9GRlNFVF9PRVMgICAgICAgIDB4OENENAorI2VuZGlmCisKKy8qIEdM
X09FU190ZXh0dXJlX2Zsb2F0ICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhp
cyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAqLworLyog
Tm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQKKyNkZWZpbmUgR0xfSEFMRl9GTE9BVF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhENjEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
X2xpbmVhciAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9u
LiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9ucG90ICovCisvKiBObyBuZXcgdG9rZW5zIGludHJv
ZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjZGVmaW5lIEdMX1ZF
UlRFWF9BUlJBWV9CSU5ESU5HX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NUI1
CisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0ICovCisvKiBHTF9IQUxGX0ZM
T0FUX09FUyBkZWZpbmVkIGluIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgYWxyZWFkeS4gKi8K
KworLyogR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgKi8KKyNpZm5kZWYgR0xfT0VTX3Zl
cnRleF90eXBlXzEwXzEwXzEwXzIKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzEwXzEwXzEwXzJf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjYKKyNkZWZpbmUgR0xfSU5UXzEwXzEw
XzEwXzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjcKKyNlbmRp
ZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFNRCBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlICovCisjaWZu
ZGVmIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJlCisjZGVmaW5lIEdMXzNEQ19YX0FNRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4N0Y5CisjZGVmaW5l
IEdMXzNEQ19YWV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4N0ZBCisjZW5kaWYKKworLyogR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUgKi8KKyNp
Zm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUKKyNkZWZpbmUgR0xfQVRDX1JHQl9B
TUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDOTIKKyNkZWZp
bmUgR0xfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDOTMKKyNkZWZpbmUgR0xfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRCAgICAg
ICAgICAgICAgICAgICAgICAweDg3RUUKKyNlbmRpZgorCisvKiBHTF9BTURfcGVyZm9ybWFuY2Vf
bW9uaXRvciAqLworI2lmbmRlZiBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvcgorI2RlZmluZSBH
TF9DT1VOVEVSX1RZUEVfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEJDMAorI2RlZmluZSBHTF9DT1VOVEVSX1JBTkdFX0FNRCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEJDMQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlQ2NF9BTUQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMgorI2RlZmluZSBHTF9QRVJDRU5UQUdF
X0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMworI2RlZmlu
ZSBHTF9QRVJGTU9OX1JFU1VMVF9BVkFJTEFCTEVfQU1EICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEJDNAorI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VMVF9TSVpFX0FNRCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEJDNQorI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VMVF9BTUQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDNgorI2VuZGlmCisKKy8qIEdMX0FN
RF9wcm9ncmFtX2JpbmFyeV9aNDAwICovCisjaWZuZGVmIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9a
NDAwCisjZGVmaW5lIEdMX1o0MDBfQklOQVJZX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NzQwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFWFQg
ZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9FWFRfYmxlbmRf
bWlubWF4ICovCisjaWZuZGVmIEdMX0VYVF9ibGVuZF9taW5tYXgKKyNkZWZpbmUgR0xfTUlOX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDcKKyNk
ZWZpbmUgR0xfTUFYX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwMDgKKyNlbmRpZgorCisvKiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciAqLwor
I2lmbmRlZiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlcgorI2RlZmluZSBHTF9DT0xPUl9FWFQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2RlZmlu
ZSBHTF9ERVBUSF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTgwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTgwMgorI2VuZGlmCisKKy8qIEdMX0VYVF9tdWx0aV9kcmF3X2Fy
cmF5cyAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAq
LworCisvKiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAqLworI2lmbmRlZiBHTF9FWFRfcmVhZF9m
b3JtYXRfYmdyYQorI2RlZmluZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODBFMQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80X1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgIDB4ODM2NQorI2RlZmluZSBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgIDB4ODM2Ngor
I2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAqLworI2lmbmRl
ZiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyNkZWZpbmUgR0xfVEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkUKKyNkZWZp
bmUgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkYKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8K
KyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisjZGVmaW5lIEdMX0JHUkFf
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEUxCisj
ZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFViAqLworI2lmbmRl
ZiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWCisjZGVmaW5lIEdMX1VOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgMHg4MzY4CisjZW5k
aWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJTUcgZXh0ZW5zaW9uIHRva2VucworICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xf
SU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1NHWF9QUk9HUkFNX0JJTkFSWV9JTUcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMwCisjZW5kaWYKKworLyogR0xfSU1HX3Jl
YWRfZm9ybWF0ICovCisjaWZuZGVmIEdMX0lNR19yZWFkX2Zvcm1hdAorI2RlZmluZSBHTF9CR1JB
X0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQor
I2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9JTUcgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODM2NQorI2VuZGlmCisKKy8qIEdMX0lNR19zaGFkZXJfYmluYXJ5ICovCisjaWZu
ZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5CisjZGVmaW5lIEdMX1NHWF9CSU5BUllfSU1HICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzBBCisjZW5kaWYKKworLyogR0xf
SU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMgKi8KKyNpZm5kZWYgR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYx
X0lNRyAgICAgICAgICAgICAgICAgICAgICAweDhDMDAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JfUFZSVENfMkJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgICAweDhDMDEKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAw
eDhDMDIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgICAgICAg
ICAgICAgICAgICAgICAweDhDMDMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE5W
IGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfTlZfZmVuY2Ug
Ki8KKyNpZm5kZWYgR0xfTlZfZmVuY2UKKyNkZWZpbmUgR0xfQUxMX0NPTVBMRVRFRF9OViAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjIKKyNkZWZpbmUgR0xfRkVOQ0Vf
U1RBVFVTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjMKKyNk
ZWZpbmUgR0xfRkVOQ0VfQ09ORElUSU9OX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg0RjQKKyNlbmRpZgorCisvKiBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUgKi8KKyNpZm5k
ZWYgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEdMX0NPVkVSQUdFX0NPTVBPTkVOVF9O
ViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQwCisjZGVmaW5lIEdMX0NPVkVS
QUdFX0NPTVBPTkVOVDRfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQxCisj
ZGVmaW5lIEdMX0NPVkVSQUdFX0FUVEFDSE1FTlRfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RUQyCisjZGVmaW5lIEdMX0NPVkVSQUdFX0JVRkZFUlNfTlYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RUQzCisjZGVmaW5lIEdMX0NPVkVSQUdFX1NBTVBMRVNf
TlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ0CisjZGVmaW5lIEdMX0NP
VkVSQUdFX0FMTF9GUkFHTUVOVFNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ1
CisjZGVmaW5lIEdMX0NPVkVSQUdFX0VER0VfRlJBR01FTlRTX05WICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RUQ2CisjZGVmaW5lIEdMX0NPVkVSQUdFX0FVVE9NQVRJQ19OViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ3CisjZGVmaW5lIEdMX0NPVkVSQUdFX0JVRkZF
Ul9CSVRfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZW5kaWYKKwor
LyogR0xfTlZfZGVwdGhfbm9ubGluZWFyICovCisjaWZuZGVmIEdMX05WX2RlcHRoX25vbmxpbmVh
cgorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9OT05MSU5FQVJfTlYgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEUyQworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogUUNPTSBl
eHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX1FDT01fZHJpdmVy
X2NvbnRyb2wgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lv
bi4gKi8KKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQgKi8KKyNpZm5kZWYgR0xfUUNPTV9leHRl
bmRlZF9nZXQKKyNkZWZpbmUgR0xfVEVYVFVSRV9XSURUSF9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCRDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9IRUlHSFRfUUNPTSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDMKKyNkZWZpbmUgR0xfVEVYVFVS
RV9ERVBUSF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDQKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCRDUKKyNkZWZpbmUgR0xfVEVYVFVSRV9GT1JNQVRfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCRDYKKyNkZWZpbmUgR0xfVEVYVFVSRV9UWVBFX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDcKKyNkZWZpbmUgR0xfVEVY
VFVSRV9JTUFHRV9WQUxJRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDgK
KyNkZWZpbmUgR0xfVEVYVFVSRV9OVU1fTEVWRUxTX1FDT00gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCRDkKKyNkZWZpbmUgR0xfVEVYVFVSRV9UQVJHRVRfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhCREEKKyNkZWZpbmUgR0xfVEVYVFVSRV9PQkpFQ1Rf
VkFMSURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCREIKKyNkZWZpbmUgR0xf
U1RBVEVfUkVTVE9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
REMKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldDIgKi8KKy8qIE5vIG5ldyB0b2tl
bnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfUUNPTV9wZXJmbW9u
X2dsb2JhbF9tb2RlICovCisjaWZuZGVmIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZQorI2Rl
ZmluZSBHTF9QRVJGTU9OX0dMT0JBTF9NT0RFX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEZBMAorI2VuZGlmCisKKy8qIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZyAqLwor
I2lmbmRlZiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcKKyNkZWZpbmUgR0xfV1JJVEVPTkxZ
X1JFTkRFUklOR19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjMKKyNlbmRp
ZgorCisvKiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZyAqLworI2lmbmRlZiBHTF9RQ09NX3RpbGVk
X3JlbmRlcmluZworI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJ
VDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5l
IEdMX0NPTE9SX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAwNAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJ
VDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5l
IEdMX0NPTE9SX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAyMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJ
VDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5l
IEdMX0RFUFRIX0JVRkZFUl9CSVQwX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDEwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUMV9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJ
VDJfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5l
IEdMX0RFUFRIX0JVRkZFUl9CSVQzX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDgwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUNF9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJ
VDVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5l
IEdMX0RFUFRIX0JVRkZFUl9CSVQ2X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwNDAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUN19RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJf
QklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5l
IEdMX1NURU5DSUxfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAyMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJf
QklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5l
IEdMX1NURU5DSUxfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDEwMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJf
QklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5l
IEdMX1NURU5DSUxfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDgwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUMF9RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVG
RkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5l
IEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
MHgwNDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUM19RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVG
RkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5l
IEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
MHgyMDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZGRVJfQklUNl9RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVG
RkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZW5kaWYK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFbmQgb2YgZXh0ZW5zaW9uIHRva2Vucywgc3RhcnQg
b2YgY29ycmVzcG9uZGluZyBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogT0VTIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyogR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUg
Ki8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKKyNkZWZpbmUg
R0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgMQorI2VuZGlmCisKKy8qIEdMX09F
U19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNz
ZWRfcGFsZXR0ZWRfdGV4dHVyZQorI2RlZmluZSBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90
ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGgyNCAqLworI2lmbmRlZiBHTF9PRVNf
ZGVwdGgyNAorI2RlZmluZSBHTF9PRVNfZGVwdGgyNCAxCisjZW5kaWYKKworLyogR0xfT0VTX2Rl
cHRoMzIgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMzIKKyNkZWZpbmUgR0xfT0VTX2RlcHRoMzIg
MQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19k
ZXB0aF90ZXh0dXJlCisjZGVmaW5lIEdMX09FU19kZXB0aF90ZXh0dXJlIDEKKyNlbmRpZgorCisv
KiBHTF9PRVNfRUdMX2ltYWdlICovCisjaWZuZGVmIEdMX09FU19FR0xfaW1hZ2UKKyNkZWZpbmUg
R0xfT0VTX0VHTF9pbWFnZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMgKEdMZW51bSB0
YXJnZXQsIEdMZWdsSW1hZ2VPRVMgaW1hZ2UpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRUdMSW1hZ2VUYXJnZXRSZW5kZXJidWZmZXJTdG9yYWdlT0VTIChHTGVudW0gdGFyZ2V0LCBH
TGVnbEltYWdlT0VTIGltYWdlKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xFR0xJTUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVn
bEltYWdlT0VTIGltYWdlKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRUdMSU1B
R0VUQVJHRVRSRU5ERVJCVUZGRVJTVE9SQUdFT0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZWds
SW1hZ2VPRVMgaW1hZ2UpOworI2VuZGlmCisKKy8qIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQg
Ki8KKyNpZm5kZWYgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludAorI2RlZmluZSBHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZmJvX3JlbmRlcl9taXBtYXAg
Ki8KKyNpZm5kZWYgR0xfT0VTX2Zib19yZW5kZXJfbWlwbWFwCisjZGVmaW5lIEdMX09FU19mYm9f
cmVuZGVyX21pcG1hcCAxCisjZW5kaWYKKworLyogR0xfT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9o
aWdoICovCisjaWZuZGVmIEdMX09FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaAorI2RlZmluZSBH
TF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hpZ2ggMQorI2VuZGlmCisKKy8qIEdMX09FU19nZXRf
cHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQorI2Rl
ZmluZSBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIChH
THVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMZW51bSAq
YmluYXJ5Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xQcm9ncmFtQmluYXJ5T0VTIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCk7CisjZW5kaWYKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTUJJTkFSWU9FU1BST0MpIChHTHVpbnQg
cHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMZW51bSAqYmluYXJ5
Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TFBST0dSQU1CSU5BUllPRVNQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3Jt
YXQsIGNvbnN0IEdMdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOworI2VuZGlmCisKKy8qIEdM
X09FU19tYXBidWZmZXIgKi8KKyNpZm5kZWYgR0xfT0VTX21hcGJ1ZmZlcgorI2RlZmluZSBHTF9P
RVNfbWFwYnVmZmVyIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZv
aWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyT0VTIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNj
ZXNzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsVW5tYXBCdWZmZXJPRVMg
KEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVy
UG9pbnRlcnZPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1z
KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5UUllQIFBGTkdMTUFQQlVGRkVST0VT
UFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nlc3MpOwordHlwZWRlZiBHTGJvb2xlYW4g
KEdMX0FQSUVOVFJZUCBQRk5HTFVOTUFQQlVGRkVST0VTUFJPQykgKEdMZW51bSB0YXJnZXQpOwor
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRCVUZGRVJQT0lOVEVSVk9FU1BST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBhcmFtcyk7CisjZW5kaWYK
KworLyogR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICovCisjaWZuZGVmIEdMX09FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbAorI2RlZmluZSBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgMQor
I2VuZGlmCisKKy8qIEdMX09FU19yZ2I4X3JnYmE4ICovCisjaWZuZGVmIEdMX09FU19yZ2I4X3Jn
YmE4CisjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgKi8KKyNpZm5kZWYgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
CisjZGVmaW5lIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAxCisjZW5kaWYKKworLyogR0xf
T0VTX3N0ZW5jaWwxICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsMQorI2RlZmluZSBHTF9PRVNf
c3RlbmNpbDEgMQorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsNCAqLworI2lmbmRlZiBHTF9P
RVNfc3RlbmNpbDQKKyNkZWZpbmUgR0xfT0VTX3N0ZW5jaWw0IDEKKyNlbmRpZgorCisvKiBHTF9P
RVNfdGV4dHVyZV8zRCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8zRAorI2RlZmluZSBHTF9P
RVNfdGV4dHVyZV8zRCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFRl
eFN1YkltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJ
bWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJl
c3NlZFRleEltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0RPRVMg
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0
YSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmUzRE9F
UyAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdM
dWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7CisjZW5kaWYKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYSU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMQ09QWVRFWFNVQklNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09NUFJFU1NFRFRFWElNQUdFM0RPRVNQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTENPTVBSRVNTRURURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Cit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTNET0VTKSAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJl
LCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7CisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1
cmVfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfZmxvYXQKKyNkZWZpbmUgR0xfT0VT
X3RleHR1cmVfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIKKyNkZWZpbmUgR0xfT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyNkZWZpbmUgR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCAxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgMQorI2VuZGlmCisK
Ky8qIEdMX09FU190ZXh0dXJlX25wb3QgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfbnBvdAor
I2RlZmluZSBHTF9PRVNfdGV4dHVyZV9ucG90IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdmVydGV4
X2FycmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorI2Rl
ZmluZSBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmluZFZlcnRleEFycmF5T0VTIChH
THVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlVmVydGV4
QXJyYXlzT0VTIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqYXJyYXlzKTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFycmF5c09FUyAoR0xzaXplaSBuLCBHTHVpbnQg
KmFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbElzVmVydGV4QXJy
YXlPRVMgKEdMdWludCBhcnJheSk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQykgKEdMdWludCBhcnJheSk7Cit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCAqYXJyYXlzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50ICphcnJheXMpOwor
dHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9D
KSAoR0x1aW50IGFycmF5KTsKKyNlbmRpZgorCisvKiBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQg
Ki8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0CisjZGVmaW5lIEdMX09FU192ZXJ0
ZXhfaGFsZl9mbG9hdCAxCisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEw
XzIgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIKKyNkZWZpbmUgR0xf
T0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KgorICogQU1EIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyog
R0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU1EX2NvbXByZXNz
ZWRfM0RDX3RleHR1cmUKKyNkZWZpbmUgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgMQor
I2VuZGlmCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlICovCisjaWZuZGVmIEdM
X0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisjZGVmaW5lIEdMX0FNRF9jb21wcmVzc2VkX0FU
Q190ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBBTURfcGVyZm9ybWFuY2VfbW9uaXRvciAqLworI2lm
bmRlZiBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvcgorI2RlZmluZSBHTF9BTURfcGVyZm9ybWFu
Y2VfbW9uaXRvciAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cHNBTUQgKEdMaW50ICpudW1Hcm91cHMs
IEdMc2l6ZWkgZ3JvdXBzU2l6ZSwgR0x1aW50ICpncm91cHMpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVyc0FNRCAoR0x1aW50IGdyb3VwLCBHTGlu
dCAqbnVtQ291bnRlcnMsIEdMaW50ICptYXhBY3RpdmVDb3VudGVycywgR0xzaXplaSBjb3VudGVy
U2l6ZSwgR0x1aW50ICpjb3VudGVycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xH
ZXRQZXJmTW9uaXRvckdyb3VwU3RyaW5nQU1EIChHTHVpbnQgZ3JvdXAsIEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmdyb3VwU3RyaW5nKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlclN0cmluZ0FNRCAoR0x1aW50IGdy
b3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqY291bnRlclN0cmluZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQ
ZXJmTW9uaXRvckNvdW50ZXJJbmZvQU1EIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBH
TGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xHZW5QZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVQZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkg
biwgR0x1aW50ICptb25pdG9ycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xTZWxl
Y3RQZXJmTW9uaXRvckNvdW50ZXJzQU1EIChHTHVpbnQgbW9uaXRvciwgR0xib29sZWFuIGVuYWJs
ZSwgR0x1aW50IGdyb3VwLCBHTGludCBudW1Db3VudGVycywgR0x1aW50ICpjb3VudGVyc0xpc3Qp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmVnaW5QZXJmTW9uaXRvckFNRCAoR0x1
aW50IG1vbml0b3IpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRW5kUGVyZk1vbml0
b3JBTUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdl
dFBlcmZNb25pdG9yQ291bnRlckRhdGFBTUQgKEdMdWludCBtb25pdG9yLCBHTGVudW0gcG5hbWUs
IEdMc2l6ZWkgZGF0YVNpemUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3JpdHRlbik7Cisj
ZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JHUk9V
UFNBTURQUk9DKSAoR0xpbnQgKm51bUdyb3VwcywgR0xzaXplaSBncm91cHNTaXplLCBHTHVpbnQg
Kmdyb3Vwcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9S
Q09VTlRFUlNBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTGludCAqbnVtQ291bnRlcnMsIEdMaW50
ICptYXhBY3RpdmVDb3VudGVycywgR0xzaXplaSBjb3VudGVyU2l6ZSwgR0x1aW50ICpjb3VudGVy
cyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SR1JPVVBT
VFJJTkdBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgR0xjaGFyICpncm91cFN0cmluZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUlNUUklOR0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdM
dWludCBjb3VudGVyLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpj
b3VudGVyU3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1P
TklUT1JDT1VOVEVSSU5GT0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBH
TGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFTlBFUkZNT05JVE9SU0FNRFBST0MpIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVQRVJGTU9OSVRPUlNBTURQ
Uk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKm1vbml0b3JzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMU0VMRUNUUEVSRk1PTklUT1JDT1VOVEVSU0FNRFBST0MpIChHTHVpbnQgbW9u
aXRvciwgR0xib29sZWFuIGVuYWJsZSwgR0x1aW50IGdyb3VwLCBHTGludCBudW1Db3VudGVycywg
R0x1aW50ICpjb3VudGVyc0xpc3QpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xC
RUdJTlBFUkZNT05JVE9SQU1EUFJPQykgKEdMdWludCBtb25pdG9yKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRU5EUEVSRk1PTklUT1JBTURQUk9DKSAoR0x1aW50IG1vbml0b3Ip
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNPVU5URVJE
QVRBQU1EUFJPQykgKEdMdWludCBtb25pdG9yLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgZGF0YVNp
emUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3JpdHRlbik7CisjZW5kaWYKKworLyogR0xf
QU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgKi8KKyNpZm5kZWYgR0xfQU1EX3Byb2dyYW1fYmluYXJ5
X1o0MDAKKyNkZWZpbmUgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgMQorI2VuZGlmCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKgorICogRVhUIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLyogR0xfRVhUX2JsZW5kX21pbm1heCAqLworI2lmbmRlZiBHTF9FWFRfYmxl
bmRfbWlubWF4CisjZGVmaW5lIEdMX0VYVF9ibGVuZF9taW5tYXggMQorI2VuZGlmCisKKy8qIEdM
X0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyICovCisjaWZuZGVmIEdMX0VYVF9kaXNjYXJkX2ZyYW1l
YnVmZmVyCisjZGVmaW5lIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIDEKKyNpZmRlZiBHTF9H
TEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJh
bWVidWZmZXJFWFQgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0
IEdMZW51bSAqYXR0YWNobWVudHMpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKKyNlbmRpZgorCisj
aWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cworI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJh
d19hcnJheXMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVp
ICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3RWxl
bWVudHNFWFQgKEdMZW51bSwgY29uc3QgR0xzaXplaSAqLCBHTGVudW0sIGNvbnN0IEdMdm9pZCog
KiwgR0xzaXplaSk7CisjZW5kaWYgLyogR0xfR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xNVUxUSURSQVdBUlJBWVNFWFRQUk9DKSAoR0xlbnVtIG1v
ZGUsIEdMaW50ICpmaXJzdCwgR0xzaXplaSAqY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXRUxFTUVOVFNFWFRQUk9DKSAo
R0xlbnVtIG1vZGUsIGNvbnN0IEdMc2l6ZWkgKmNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkKiAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworI2VuZGlmCisKKy8qIEdMX0VYVF9y
ZWFkX2Zvcm1hdF9iZ3JhICovCisjaWZuZGVmIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhCisjZGVm
aW5lIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIDEKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljCisjZGVmaW5lIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAxCisj
ZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICovCisjaWZuZGVmIEdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorI2RlZmluZSBHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODggMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8x
MF9SRVYgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFVgorI2Rl
ZmluZSBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWIDEKKyNlbmRpZgorCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSoKKyAqIElNRyBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisKKy8qIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9JTUdfcHJv
Z3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfSU1HX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCisv
KiBHTF9JTUdfcmVhZF9mb3JtYXQgKi8KKyNpZm5kZWYgR0xfSU1HX3JlYWRfZm9ybWF0CisjZGVm
aW5lIEdMX0lNR19yZWFkX2Zvcm1hdCAxCisjZW5kaWYKKworLyogR0xfSU1HX3NoYWRlcl9iaW5h
cnkgKi8KKyNpZm5kZWYgR0xfSU1HX3NoYWRlcl9iaW5hcnkKKyNkZWZpbmUgR0xfSU1HX3NoYWRl
cl9iaW5hcnkgMQorI2VuZGlmCisKKy8qIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRj
ICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCisjZGVmaW5lIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKKyAqIE5WIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyogR0xfTlZfZmVuY2UgKi8KKyNpZm5kZWYgR0xfTlZfZmVuY2UKKyNkZWZpbmUgR0xfTlZfZmVu
Y2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbERlbGV0ZUZlbmNlc05WIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5GZW5jZXNOViAoR0xzaXplaSwgR0x1aW50ICopOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc0ZlbmNlTlYgKEdMdWludCk7CitH
TF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbFRlc3RGZW5jZU5WIChHTHVpbnQpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0RmVuY2Vpdk5WIChHTHVpbnQsIEdMZW51
bSwgR0xpbnQgKik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGaW5pc2hGZW5jZU5W
IChHTHVpbnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsU2V0RmVuY2VOViAoR0x1
aW50LCBHTGVudW0pOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERF
TEVURUZFTkNFU05WUFJPQykgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICpmZW5jZXMpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRU5GRU5DRVNOVlBST0MpIChHTHNpemVpIG4s
IEdMdWludCAqZmVuY2VzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJ
U0ZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElF
TlRSWVAgUEZOR0xURVNURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xHRVRGRU5DRUlWTlZQUk9DKSAoR0x1aW50IGZlbmNlLCBHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGSU5JU0hGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTFNFVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlLCBHTGVudW0gY29uZGl0
aW9uKTsKKyNlbmRpZgorCisvKiBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUgKi8KKyNpZm5kZWYgR0xf
TlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEdMX05WX2NvdmVyYWdlX3NhbXBsZSAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ292
ZXJhZ2VNYXNrTlYgKEdMYm9vbGVhbiBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbENvdmVyYWdlT3BlcmF0aW9uTlYgKEdMZW51bSBvcGVyYXRpb24pOworI2VuZGlmCit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVSQUdFTUFTS05WUFJPQykgKEdMYm9vbGVh
biBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09WRVJBR0VPUEVSQVRJ
T05OVlBST0MpIChHTGVudW0gb3BlcmF0aW9uKTsKKyNlbmRpZgorCisvKiBHTF9OVl9kZXB0aF9u
b25saW5lYXIgKi8KKyNpZm5kZWYgR0xfTlZfZGVwdGhfbm9ubGluZWFyCisjZGVmaW5lIEdMX05W
X2RlcHRoX25vbmxpbmVhciAxCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBRQ09N
IGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfUUNPTV9k
cml2ZXJfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCisjZGVmaW5l
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldERyaXZlckNvbnRyb2xzUUNPTSAoR0xpbnQg
Km51bSwgR0xzaXplaSBzaXplLCBHTHVpbnQgKmRyaXZlckNvbnRyb2xzKTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldERyaXZlckNvbnRyb2xTdHJpbmdRQ09NIChHTHVpbnQgZHJp
dmVyQ29udHJvbCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZHJp
dmVyQ29udHJvbFN0cmluZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFbmFibGVE
cml2ZXJDb250cm9sUUNPTSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRGlzYWJsZURyaXZlckNvbnRyb2xRQ09NIChHTHVpbnQgZHJpdmVyQ29u
dHJvbCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VURFJJVkVS
Q09OVFJPTFNRQ09NUFJPQykgKEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpkcml2
ZXJDb250cm9scyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVERSSVZFUkNP
TlRST0xTVFJJTkdRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9sLCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpkcml2ZXJDb250cm9sU3RyaW5nKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5BQkxFRFJJVkVSQ09OVFJPTFFDT01QUk9DKSAo
R0x1aW50IGRyaXZlckNvbnRyb2wpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xE
SVNBQkxFRFJJVkVSQ09OVFJPTFFDT01QUk9DKSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOworI2Vu
ZGlmCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0ICovCisjaWZuZGVmIEdMX1FDT01fZXh0ZW5k
ZWRfZ2V0CisjZGVmaW5lIEdMX1FDT01fZXh0ZW5kZWRfZ2V0IDEKKyNpZmRlZiBHTF9HTEVYVF9Q
Uk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRUZXh0dXJlc1FD
T00gKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRleHR1cmVzLCBHTGludCAqbnVtVGV4dHVy
ZXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0QnVmZmVyc1FDT00gKEdM
dWludCAqYnVmZmVycywgR0xpbnQgbWF4QnVmZmVycywgR0xpbnQgKm51bUJ1ZmZlcnMpOworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0UmVuZGVyYnVmZmVyc1FDT00gKEdMdWlu
dCAqcmVuZGVyYnVmZmVycywgR0xpbnQgbWF4UmVuZGVyYnVmZmVycywgR0xpbnQgKm51bVJlbmRl
cmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0RnJhbWVidWZm
ZXJzUUNPTSAoR0x1aW50ICpmcmFtZWJ1ZmZlcnMsIEdMaW50IG1heEZyYW1lYnVmZmVycywgR0xp
bnQgKm51bUZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRH
ZXRUZXhMZXZlbFBhcmFtZXRlcml2UUNPTSAoR0x1aW50IHRleHR1cmUsIEdMZW51bSBmYWNlLCBH
TGludCBsZXZlbCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEV4dFRleE9iamVjdFN0YXRlT3ZlcnJpZGVpUUNPTSAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xFeHRHZXRUZXhTdWJJbWFnZVFDT00gKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4
dEdldEJ1ZmZlclBvaW50ZXJ2UUNPTSAoR0xlbnVtIHRhcmdldCwgR0x2b2lkICoqcGFyYW1zKTsK
KyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRURVhUVVJFU1FD
T01QUk9DKSAoR0x1aW50ICp0ZXh0dXJlcywgR0xpbnQgbWF4VGV4dHVyZXMsIEdMaW50ICpudW1U
ZXh0dXJlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVEJVRkZFUlNR
Q09NUFJPQykgKEdMdWludCAqYnVmZmVycywgR0xpbnQgbWF4QnVmZmVycywgR0xpbnQgKm51bUJ1
ZmZlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRSRU5ERVJCVUZG
RVJTUUNPTVBST0MpIChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdMaW50IG1heFJlbmRlcmJ1ZmZl
cnMsIEdMaW50ICpudW1SZW5kZXJidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMRVhUR0VURlJBTUVCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKmZyYW1lYnVmZmVycywg
R0xpbnQgbWF4RnJhbWVidWZmZXJzLCBHTGludCAqbnVtRnJhbWVidWZmZXJzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVYTEVWRUxQQVJBTUVURVJJVlFDT01QUk9D
KSAoR0x1aW50IHRleHR1cmUsIEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIHBuYW1l
LCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUVEVY
T0JKRUNUU1RBVEVPVkVSUklERUlRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQgcGFyYW0pOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRU
RVhTVUJJTUFHRVFDT01QUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2
b2lkICp0ZXhlbHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRCVUZG
RVJQT0lOVEVSVlFDT01QUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x2b2lkICoqcGFyYW1zKTsKKyNl
bmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldDIgKi8KKyNpZm5kZWYgR0xfUUNPTV9leHRl
bmRlZF9nZXQyCisjZGVmaW5lIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MiAxCisjaWZkZWYgR0xfR0xF
WFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0U2hhZGVy
c1FDT00gKEdMdWludCAqc2hhZGVycywgR0xpbnQgbWF4U2hhZGVycywgR0xpbnQgKm51bVNoYWRl
cnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0UHJvZ3JhbXNRQ09NIChH
THVpbnQgKnByb2dyYW1zLCBHTGludCBtYXhQcm9ncmFtcywgR0xpbnQgKm51bVByb2dyYW1zKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsRXh0SXNQcm9ncmFtQmluYXJ5UUNP
TSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0
UHJvZ3JhbUJpbmFyeVNvdXJjZVFDT00gKEdMdWludCBwcm9ncmFtLCBHTGVudW0gc2hhZGVydHlw
ZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFNIQURFUlNRQ09NUFJPQykgKEdMdWludCAqc2hhZGVy
cywgR0xpbnQgbWF4U2hhZGVycywgR0xpbnQgKm51bVNoYWRlcnMpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xFWFRHRVRQUk9HUkFNU1FDT01QUk9DKSAoR0x1aW50ICpwcm9ncmFt
cywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Qcm9ncmFtcyk7Cit0eXBlZGVmIEdMYm9v
bGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMRVhUSVNQUk9HUkFNQklOQVJZUUNPTVBST0MpIChHTHVp
bnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFBST0dS
QU1CSU5BUllTT1VSQ0VRQ09NUFJPQykgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gc2hhZGVydHlw
ZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgpOworI2VuZGlmCisKKy8qIEdMX1FDT01f
cGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lmbmRlZiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21v
ZGUKKyNkZWZpbmUgR0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlIDEKKyNlbmRpZgorCisvKiBH
TF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNPTV93cml0ZW9ubHlf
cmVuZGVyaW5nCisjZGVmaW5lIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZyAxCisjZW5kaWYK
KworLyogR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgKi8KKyNpZm5kZWYgR0xfUUNPTV90aWxlZF9y
ZW5kZXJpbmcKKyNkZWZpbmUgR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgMQorI2lmZGVmIEdMX0dM
RVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFN0YXJ0VGlsaW5n
UUNPTSAoR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdM
Yml0ZmllbGQgcHJlc2VydmVNYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVu
ZFRpbGluZ1FDT00gKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKKyNlbmRpZgordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTElOR1FDT01QUk9DKSAoR0x1aW50IHgsIEdM
dWludCB5LCBHTHVpbnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMYml0ZmllbGQgcHJlc2VydmVN
YXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EVElMSU5HUUNPTVBST0Mp
IChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wyZXh0X2hfICovCkluZGV4OiBBTkdMRS9pbmNs
dWRlL0dMRVMyL2dsMnBsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJw
bGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fZ2wycGxh
dGZvcm1faF8KKyNkZWZpbmUgX19nbDJwbGF0Zm9ybV9oXworCisvKiAkUmV2aXNpb246IDEwNjAy
ICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIyOjM1OjM0IC0wODAwICMkICovCisKKy8qCisgKiBU
aGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExp
Y2Vuc2UgVmVyc2lvbgorICogMi4wLiBGb3IgZGV0YWlscywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNv
bS9wcm9qZWN0cy9GcmVlQi8gLgorICovCisKKy8qIFBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFu
ZCBkZWZpbml0aW9ucyBmb3IgT3BlbkdMIEVTIDIuWCAgZ2wyLmgKKyAqCisgKiBBZG9wdGVycyBt
YXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0IHRoZWlyIHBsYXRm
b3JtLgorICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9kaWZpY2F0aW9ucyB0
byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBm
dXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHN1Ym1pdCBjaGFuZ2VzCisgKiBi
eSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhIChodHRwOi8va2hy
b25vcy5vcmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcgYSBidWcgYWdhaW5zdCBwcm9kdWN0ICJP
cGVuR0wtRVMiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgorICovCisKKyNpbmNsdWRlIDxLSFIva2hy
cGxhdGZvcm0uaD4KKworI2lmbmRlZiBHTF9BUElDQUxMCisjZGVmaW5lIEdMX0FQSUNBTEwgIEtI
Uk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKyNpZm5kZWYgR0xfQVBJRU5UUlkKKyNkZWZpbmUgR0xf
QVBJRU5UUlkgS0hST05PU19BUElFTlRSWQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2dsMnBsYXRm
b3JtX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9S
RVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCisjZGVmaW5lIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVE
RURfCisKK3N0cnVjdCBUQnVpbHRJblJlc291cmNlCit7CisJaW50IG1heFZlcnRleEF0dHJpYnM7
CisJaW50IG1heFZlcnRleFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhWYXJ5aW5nVmVjdG9yczsK
KwlpbnQgbWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHM7CisJaW50IG1heFRleHR1cmVJbWFnZVVuaXRzOworCWludCBtYXhGcmFnbWVu
dFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhEcmF3QnVmZmVyczsKK307CisjZW5kaWYgLy8gX1JF
U09VUkNFX0xJTUlUU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFk
ZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBf
Q09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworI2RlZmluZSBfQ09NUElMRVJfSU5URVJGQUNF
X0lOQ0xVREVEXworCisjaW5jbHVkZSAiUmVzb3VyY2VMaW1pdHMuaCIKKworLy8KKy8vIFRoaXMg
aXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2
ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4KKy8vCisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8vCisvLyBEcml2ZXIgbXVzdCBjYWxs
IHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIKKy8vIGNvbXBpbGVyIG9w
ZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpOworLy8KKy8vIERyaXZlciBzaG91bGQg
Y2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8KK2ludCBTaEZpbmFsaXplKCk7CisvLworLy8gVHlw
ZXMgb2YgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4gY29uc3VtZS4KKy8vCit0eXBlZGVmIGVu
dW0geworICAgIEVTaExhbmdWZXJ0ZXgsCisgICAgRVNoTGFuZ0ZyYWdtZW50LAorICAgIEVTaExh
bmdDb3VudCwKK30gRVNoTGFuZ3VhZ2U7CisKKy8vCisvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNh
dGlvbiBjb21waWxlciBjb25mb3JtcyB0by4KKy8vIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBPcGVu
R0wgRVMgYW5kIFdlYkdMIHNwZWNpZmljYXRpb25zLgorLy8KK3R5cGVkZWYgZW51bSB7CisgICAg
RVNoU3BlY0dMRVMyLAorICAgIEVTaFNwZWNXZWJHTCwKK30gRVNoU3BlYzsKKworLy8KKy8vIE9w
dGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLgorLy8KK3R5cGVkZWYgZW51bSB7Cisg
ICAgRVNoT3B0Tm9HZW5lcmF0aW9uLAorICAgIEVTaE9wdE5vbmUsCisgICAgRVNoT3B0U2ltcGxl
LCAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUgcXVpY2tseQorICAgIEVT
aE9wdEZ1bGwsICAgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IHdpbGwgdGFrZSBtb3JlIHRp
bWUKK30gRVNoT3B0aW1pemF0aW9uTGV2ZWw7CisKK2VudW0gVERlYnVnT3B0aW9ucyB7CisgICAg
RURlYnVnT3BOb25lICAgICAgICAgICAgICAgPSAweDAwMCwKKyAgICBFRGVidWdPcEludGVybWVk
aWF0ZSAgICAgICA9IDB4MDAxLCAgLy8gV3JpdGVzIGludGVybWVkaWF0ZSB0cmVlIGludG8gaW5m
by1sb2cuCit9OworCisvLworLy8gU2hIYW5kbGUgaGVsZCBieSBidXQgb3BhcXVlIHRvIHRoZSBk
cml2ZXIuICBJdCBpcyBhbGxvY2F0ZWQsCisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5
IHRoZSBjb21waWxlci4gSXQncyBjb250ZW50cyAKKy8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2Vk
IGJ5IHRoZSBjb21waWxlci4KKy8vCisvLyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2ls
bCBiZSByZXR1cm5lZC4KKy8vCit0eXBlZGVmIHZvaWQqIFNoSGFuZGxlOworCisvLworLy8gRHJp
dmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgor
Ly8KK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UsIEVTaFNwZWMpOyAg
Ly8gb25lIHBlciBzaGFkZXIKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRsZSk7CisKKy8vCisvLyBU
aGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBib29sZWFuLCBpbmRpY2F0aW5nCisvLyBz
dWNjZXNzIG9yIGZhaWx1cmUuCisvLworLy8gVGhlIGluZm8tbG9nIHNob3VsZCBiZSB3cml0dGVu
IGJ5IFNoQ29tcGlsZSBpbnRvIAorLy8gU2hIYW5kbGUsIHNvIGl0IGNhbiBhbnN3ZXIgZnV0dXJl
IHF1ZXJpZXMuCisvLworaW50IFNoQ29tcGlsZSgKKyAgICBjb25zdCBTaEhhbmRsZSwKKyAgICBj
b25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29uc3QgaW50IG51bVN0cmlu
Z3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwsCisgICAgY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSAqcmVzb3VyY2VzLAorICAgIGludCBkZWJ1Z09wdGlvbnMKKyAgICApOworCisvLwor
Ly8gQWxsIHRoZSBmb2xsb3dpbmcgcmV0dXJuIDAgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdAor
Ly8gYXZhaWxhYmxlIGluIHRoZSBvYmplY3QgcGFzc2VkIGRvd24sIG9yIHRoZSBvYmplY3QgaXMg
YmFkLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSk7Citjb25z
dCBjaGFyKiBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUpOworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURF
RF8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2lu
Y2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY5IEBACisj
aWZuZGVmIF9fa2hycGxhdGZvcm1faF8KKyNkZWZpbmUgX19raHJwbGF0Zm9ybV9oXworCisvKgor
KiogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoq
IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4g
dGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz
aCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg
TWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFs
cyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy
bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vi
c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxT
IEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiog
RVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD
VCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O
RUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyogS2hyb25vcyBwbGF0Zm9ybS1zcGVjaWZpYyB0
eXBlcyBhbmQgZGVmaW5pdGlvbnMuCisgKgorICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6
IDIwMDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqCisgKiBB
ZG9wdGVycyBtYXkgbW9kaWZ5IHRoaXMgZmlsZSB0byBzdWl0IHRoZWlyIHBsYXRmb3JtLiBBZG9w
dGVycyBhcmUKKyAqIGVuY291cmFnZWQgdG8gc3VibWl0IHBsYXRmb3JtIHNwZWNpZmljIG1vZGlm
aWNhdGlvbnMgdG8gdGhlIEtocm9ub3MKKyAqIGdyb3VwIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5j
bHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4KKyAqIFBsZWFzZSBzdWJtaXQg
Y2hhbmdlcyBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhCisg
KiAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKSBieSBmaWxpbmcgYSBidWcgYWdhaW5zdCBw
cm9kdWN0CisgKiAiS2hyb25vcyAoZ2VuZXJhbCkiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgorICoK
KyAqIEEgcHJlZGVmaW5lZCB0ZW1wbGF0ZSB3aGljaCBmaWxscyBpbiBzb21lIG9mIHRoZSBidWcg
ZmllbGRzIGNhbiBiZQorICogcmVhY2hlZCB1c2luZyBodHRwOi8vdGlueXVybC5jb20va2hycGxh
dGZvcm0taC1idWdyZXBvcnQsIGJ1dCB5b3UKKyAqIG11c3QgY3JlYXRlIGEgQnVnemlsbGEgbG9n
aW4gZmlyc3QuCisgKgorICoKKyAqIFNlZSB0aGUgSW1wbGVtZW50ZXIncyBHdWlkZWxpbmVzIGZv
ciBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGlzIGZpbGUKKyAqIHNob3VsZCBiZSBsb2NhdGVk
IG9uIHlvdXIgc3lzdGVtIGFuZCBmb3IgbW9yZSBkZXRhaWxzIG9mIGl0cyB1c2U6CisgKiAgICBo
dHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2ltcGxlbWVudGVyc19ndWlkZS5wZGYKKyAq
CisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzCisgKiAgICAgICAgI2luY2x1ZGUg
PEtIUi9raHJwbGF0Zm9ybS5oPgorICogYnkgS2hyb25vcyBjbGllbnQgQVBJIGhlYWRlciBmaWxl
cyB0aGF0IHVzZSBpdHMgdHlwZXMgYW5kIGRlZmluZXMuCisgKgorICogVGhlIHR5cGVzIGluIGto
cnBsYXRmb3JtLmggc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBkZWZpbmUgQVBJLXNwZWNpZmljIHR5
cGVzLgorICoKKyAqIFR5cGVzIGRlZmluZWQgaW4ga2hycGxhdGZvcm0uaDoKKyAqICAgIGtocm9u
b3NfaW50OF90ICAgICAgICAgICAgICBzaWduZWQgICA4ICBiaXQKKyAqICAgIGtocm9ub3NfdWlu
dDhfdCAgICAgICAgICAgICB1bnNpZ25lZCA4ICBiaXQKKyAqICAgIGtocm9ub3NfaW50MTZfdCAg
ICAgICAgICAgICBzaWduZWQgICAxNiBiaXQKKyAqICAgIGtocm9ub3NfdWludDE2X3QgICAgICAg
ICAgICB1bnNpZ25lZCAxNiBiaXQKKyAqICAgIGtocm9ub3NfaW50MzJfdCAgICAgICAgICAgICBz
aWduZWQgICAzMiBiaXQKKyAqICAgIGtocm9ub3NfdWludDMyX3QgICAgICAgICAgICB1bnNpZ25l
ZCAzMiBiaXQKKyAqICAgIGtocm9ub3NfaW50NjRfdCAgICAgICAgICAgICBzaWduZWQgICA2NCBi
aXQKKyAqICAgIGtocm9ub3NfdWludDY0X3QgICAgICAgICAgICB1bnNpZ25lZCA2NCBiaXQKKyAq
ICAgIGtocm9ub3NfaW50cHRyX3QgICAgICAgICAgICBzaWduZWQgICBzYW1lIG51bWJlciBvZiBi
aXRzIGFzIGEgcG9pbnRlcgorICogICAga2hyb25vc191aW50cHRyX3QgICAgICAgICAgIHVuc2ln
bmVkIHNhbWUgbnVtYmVyIG9mIGJpdHMgYXMgYSBwb2ludGVyCisgKiAgICBraHJvbm9zX3NzaXpl
X3QgICAgICAgICAgICAgc2lnbmVkICAgc2l6ZQorICogICAga2hyb25vc191c2l6ZV90ICAgICAg
ICAgICAgIHVuc2lnbmVkIHNpemUKKyAqICAgIGtocm9ub3NfZmxvYXRfdCAgICAgICAgICAgICBz
aWduZWQgICAzMiBiaXQgZmxvYXRpbmcgcG9pbnQKKyAqICAgIGtocm9ub3NfdGltZV9uc190ICAg
ICAgICAgICB1bnNpZ25lZCA2NCBiaXQgdGltZSBpbiBuYW5vc2Vjb25kcworICogICAga2hyb25v
c191dGltZV9uYW5vc2Vjb25kc190IHVuc2lnbmVkIHRpbWUgaW50ZXJ2YWwgb3IgYWJzb2x1dGUg
dGltZSBpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbm9z
ZWNvbmRzCisgKiAgICBraHJvbm9zX3N0aW1lX25hbm9zZWNvbmRzX3Qgc2lnbmVkIHRpbWUgaW50
ZXJ2YWwgaW4gbmFub3NlY29uZHMKKyAqICAgIGtocm9ub3NfYm9vbGVhbl9lbnVtX3QgICAgICBl
bnVtZXJhdGVkIGJvb2xlYW4gdHlwZS4gVGhpcyBzaG91bGQKKyAqICAgICAgb25seSBiZSB1c2Vk
IGFzIGEgYmFzZSB0eXBlIHdoZW4gYSBjbGllbnQgQVBJJ3MgYm9vbGVhbiB0eXBlIGlzCisgKiAg
ICAgIGFuIGVudW0uIENsaWVudCBBUElzIHdoaWNoIHVzZSBhbiBpbnRlZ2VyIG9yIG90aGVyIHR5
cGUgZm9yCisgKiAgICAgIGJvb2xlYW5zIGNhbm5vdCB1c2UgdGhpcyBhcyB0aGUgYmFzZSB0eXBl
IGZvciB0aGVpciBib29sZWFuLgorICoKKyAqIFRva2VucyBkZWZpbmVkIGluIGtocnBsYXRmb3Jt
Lmg6CisgKgorICogICAgS0hST05PU19GQUxTRSwgS0hST05PU19UUlVFIEVudW1lcmF0ZWQgYm9v
bGVhbiBmYWxzZS90cnVlIHZhbHVlcy4KKyAqCisgKiAgICBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
aXMgMSBpZiA2NCBiaXQgaW50ZWdlcnMgYXJlIHN1cHBvcnRlZDsgb3RoZXJ3aXNlIDAuCisgKiAg
ICBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgaXMgMSBpZiBmbG9hdHMgYXJlIHN1cHBvcnRlZDsgb3Ro
ZXJ3aXNlIDAuCisgKgorICogQ2FsbGluZyBjb252ZW50aW9uIG1hY3JvcyBkZWZpbmVkIGluIHRo
aXMgZmlsZToKKyAqICAgIEtIUk9OT1NfQVBJQ0FMTAorICogICAgS0hST05PU19BUElFTlRSWQor
ICogICAgS0hST05PU19BUElBVFRSSUJVVEVTCisgKgorICogVGhlc2UgbWF5IGJlIHVzZWQgaW4g
ZnVuY3Rpb24gcHJvdG90eXBlcyBhczoKKyAqCisgKiAgICAgIEtIUk9OT1NfQVBJQ0FMTCB2b2lk
IEtIUk9OT1NfQVBJRU5UUlkgZnVuY25hbWUoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgYXJnMSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhcmcyKSBLSFJPTk9TX0FQSUFUVFJJQlVURVM7CisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQ0FMTAorICotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
KiBUaGlzIHByZWNlZGVzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gaW4gdGhlIGZ1
bmN0aW9uIHByb3RvdHlwZS4KKyAqLworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChf
X1NDSVRFQ0hfU05BUF9fKQorIyAgIGRlZmluZSBLSFJPTk9TX0FQSUNBTEwgX19kZWNsc3BlYyhk
bGxpbXBvcnQpCisjZWxpZiBkZWZpbmVkIChfX1NZTUJJQU4zMl9fKQorIyAgIGRlZmluZSBLSFJP
Tk9TX0FQSUNBTEwgSU1QT1JUX0MKKyNlbHNlCisjICAgZGVmaW5lIEtIUk9OT1NfQVBJQ0FMTAor
I2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQ
SUVOVFJZCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZm9sbG93cyB0aGUgcmV0dXJuIHR5
cGUgb2YgdGhlIGZ1bmN0aW9uICBhbmQgcHJlY2VkZXMgdGhlIGZ1bmN0aW9uCisgKiBuYW1lIGlu
IHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKyAgICAvKiBX
aW4zMiBidXQgbm90IFdpbkNFICovCisjICAgZGVmaW5lIEtIUk9OT1NfQVBJRU5UUlkgX19zdGRj
YWxsCisjZWxzZQorIyAgIGRlZmluZSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQVRUUklCVVRFUworICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3MgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMg
b2YgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBhcmd1bWVudHMuCisgKi8KKyNpZiBkZWZpbmVkIChf
X0FSTUNDXzJfXykKKyNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVTIF9fc29mdGZwCisjZWxz
ZQorI2RlZmluZSBLSFJPTk9TX0FQSUFUVFJJQlVURVMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAqIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lm
IChkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAx
TCkgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX1NDT19fKSB8fCBkZWZpbmVkKF9f
VVNMQ19fKQorCisKKy8qCisgKiBVc2luZyA8c3RkaW50Lmg+CisgKi8KKyNpbmNsdWRlIDxzdGRp
bnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90Owor
dHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRl
ZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVpbnQ2
NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQ
UE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxp
ZiBkZWZpbmVkKF9fVk1TICkgfHwgZGVmaW5lZChfX3NnaSkKKworLyoKKyAqIFVzaW5nIDxpbnR0
eXBlcy5oPgorICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAg
ICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAg
ICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBr
aHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3Nf
dWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hS
T05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmlu
ZWQoX19TQ0lURUNIX1NOQVBfXykKKworLyoKKyAqIFdpbjMyCisgKi8KK3R5cGVkZWYgX19pbnQz
MiAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBfX2lu
dDMyICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAg
ICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgICAgIGto
cm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZp
bmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBkZWZpbmVkKF9fc3VuX18pIHx8
IGRlZmluZWQoX19kaWdpdGFsX18pCisKKy8qCisgKiBTdW4gb3IgRGlnaXRhbAorICovCit0eXBl
ZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKK3R5cGVkZWYgdW5z
aWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKKyNpZiBkZWZpbmVkKF9fYXJj
aDY0X18pIHx8IGRlZmluZWQoX0xQNjQpCit0eXBlZGVmIGxvbmcgaW50ICAgICAgICAgICAgICAg
IGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgICAgICAga2hyb25v
c191aW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgICAgICAgICAgIGtocm9u
b3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCAga2hyb25vc191aW50
NjRfdDsKKyNlbmRpZiAvKiBfX2FyY2g2NF9fICovCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiAwCisK
Ky8qCisgKiBIeXBvdGhldGljYWwgcGxhdGZvcm0gd2l0aCBubyBmbG9hdCBvciBpbnQ2NCBzdXBw
b3J0CisgKi8KK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90
OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OworI2Rl
ZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAwCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9G
TE9BVCAgIDAKKworI2Vsc2UKKworLyoKKyAqIEdlbmVyaWMgZmFsbGJhY2sKKyAqLworI2luY2x1
ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICBraHJvbm9zX2lu
dDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7
Cit0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVk
ZWYgdWludDY0X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50NjRfdDsKKyNkZWZpbmUgS0hS
T05PU19TVVBQT1JUX0lOVDY0ICAgMQorI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgICAx
CisKKyNlbmRpZgorCisKKy8qCisgKiBUeXBlcyB0aGF0IGFyZSAoc28gZmFyKSB0aGUgc2FtZSBv
biBhbGwgcGxhdGZvcm1zCisgKi8KK3R5cGVkZWYgc2lnbmVkICAgY2hhciAgICAgICAgICBraHJv
bm9zX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICBraHJvbm9zX3VpbnQ4
X3Q7Cit0eXBlZGVmIHNpZ25lZCAgIHNob3J0IGludCAgICAga2hyb25vc19pbnQxNl90OwordHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgICAgIGtocm9ub3NfdWludDE2X3Q7Cit0eXBlZGVmIHNp
Z25lZCAgIGxvbmcgIGludCAgICAga2hyb25vc19pbnRwdHJfdDsKK3R5cGVkZWYgdW5zaWduZWQg
bG9uZyAgaW50ICAgICBraHJvbm9zX3VpbnRwdHJfdDsKK3R5cGVkZWYgc2lnbmVkICAgbG9uZyAg
aW50ICAgICBraHJvbm9zX3NzaXplX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIGludCAgICAg
a2hyb25vc191c2l6ZV90OworCisjaWYgS0hST05PU19TVVBQT1JUX0ZMT0FUCisvKgorICogRmxv
YXQgdHlwZQorICovCit0eXBlZGVmICAgICAgICAgIGZsb2F0ICAgICAgICAga2hyb25vc19mbG9h
dF90OworI2VuZGlmCisKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQKKy8qIFRpbWUgdHlwZXMK
KyAqCisgKiBUaGVzZSB0eXBlcyBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYSB0aW1lIGludGVy
dmFsIGluIG5hbm9zZWNvbmRzIG9yCisgKiBhbiBhYnNvbHV0ZSBVbmFkanVzdGVkIFN5c3RlbSBU
aW1lLiAgVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSBpcyB0aGUgbnVtYmVyCisgKiBvZiBuYW5vc2Vj
b25kcyBzaW5jZSBzb21lIGFyYml0cmFyeSBzeXN0ZW0gZXZlbnQgKGUuZy4gc2luY2UgdGhlIGxh
c3QKKyAqIHRpbWUgdGhlIHN5c3RlbSBib290ZWQpLiAgVGhlIFVuYWRqdXN0ZWQgU3lzdGVtIFRp
bWUgaXMgYW4gdW5zaWduZWQKKyAqIDY0IGJpdCB2YWx1ZSB0aGF0IHdyYXBzIGJhY2sgdG8gMCBl
dmVyeSA1ODQgeWVhcnMuICBUaW1lIGludGVydmFscworICogbWF5IGJlIGVpdGhlciBzaWduZWQg
b3IgdW5zaWduZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc191aW50NjRfdCAgICAgICBraHJvbm9z
X3V0aW1lX25hbm9zZWNvbmRzX3Q7Cit0eXBlZGVmIGtocm9ub3NfaW50NjRfdCAgICAgICAga2hy
b25vc19zdGltZV9uYW5vc2Vjb25kc190OworI2VuZGlmCisKKy8qCisgKiBEdW1teSB2YWx1ZSB1
c2VkIHRvIHBhZCBlbnVtIHR5cGVzIHRvIDMyIGJpdHMuCisgKi8KKyNpZm5kZWYgS0hST05PU19N
QVhfRU5VTQorI2RlZmluZSBLSFJPTk9TX01BWF9FTlVNIDB4N0ZGRkZGRkYKKyNlbmRpZgorCisv
KgorICogRW51bWVyYXRlZCBib29sZWFuIHR5cGUKKyAqCisgKiBWYWx1ZXMgb3RoZXIgdGhhbiB6
ZXJvIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHRydWUuICBUaGVyZWZvcmUKKyAqIGNvbXBh
cmlzb25zIHNob3VsZCBub3QgYmUgbWFkZSBhZ2FpbnN0IEtIUk9OT1NfVFJVRS4KKyAqLwordHlw
ZWRlZiBlbnVtIHsKKyAgICBLSFJPTk9TX0ZBTFNFID0gMCwKKyAgICBLSFJPTk9TX1RSVUUgID0g
MSwKKyAgICBLSFJPTk9TX0JPT0xFQU5fRU5VTV9GT1JDRV9TSVpFID0gS0hST05PU19NQVhfRU5V
TQorfSBraHJvbm9zX2Jvb2xlYW5fZW51bV90OworCisjZW5kaWYgLyogX19raHJwbGF0Zm9ybV9o
XyAqLwpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5tb2RlMXYz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1bHMubW9k
ZTF2MwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1
bHMubW9kZTF2MwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzYyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBw
bGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0
eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+QWN0
aXZlUGVyc3BlY3RpdmVOYW1lPC9rZXk+CisJPHN0cmluZz5Qcm9qZWN0PC9zdHJpbmc+CisJPGtl
eT5BbGxvd2VkTW9kdWxlczwva2V5PgorCTxhcnJheT4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRs
ZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5j
ZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5Hcm91cHMgYW5kIEZpbGVzIE91dGxpbmUgVmlldzwvc3RyaW5nPgor
CQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0
cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48
L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdy
b3VwPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RWRpdG9yPC9zdHJp
bmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJ
CQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJp
bmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENUYXNrTGlz
dE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlRhc2sgTGlz
dDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwv
a2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJ
CQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhD
RGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Rmls
ZSBhbmQgU21hcnQgR3JvdXAgRGV0YWlsIFZpZXdlcjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4K
KwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJ1aWxkUmVzdWx0c01vZHVsZTwvc3RyaW5n
PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRldGFpbGVkIEJ1aWxkIFJlc3VsdHMg
Vmlld2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQ
YXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tl
eT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJp
bmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJ
PHN0cmluZz5Qcm9qZWN0IEJhdGNoIEZpbmQgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4K
KwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDUHJvamVjdEZvcm1hdENvbmZsaWN0c01vZHVs
ZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlByb2plY3QgRm9ybWF0
IENvbmZsaWN0cyBMaXN0PC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1
bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0
YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tl
eT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzIFRvb2w8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGlj
dD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJ
CQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJpbmc+CisJCQk8a2V5
Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyPC9zdHJpbmc+CisJ
CTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3Ry
aW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwv
c3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQ1ZTTW9kdWxlPC9z
dHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U291cmNlIENvZGUgQ29udHJv
bCBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQ
YXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tl
eT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJp
bmc+UEJYRGVidWdCcmVha3BvaW50c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+
CisJCQk8c3RyaW5nPkRlYnVnIEJyZWFrcG9pbnRzIFRvb2w8L3N0cmluZz4KKwkJPC9kaWN0Pgor
CQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJp
bmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0cmluZz5uPC9zdHJpbmc+CisJ
CQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5YQ0RvY2thYmxlSW5zcGVjdG9yPC9zdHJp
bmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+SW5zcGVjdG9yPC9zdHJpbmc+CisJ
CTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3Ry
aW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwv
c3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYT3BlblF1aWNrbHlN
b2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5PcGVuIFF1aWNr
bHkgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2Fk
UGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9r
ZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3Ry
aW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJ
CQk8c3RyaW5nPkRlYnVnZ2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5
PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJ
bnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tl
eT4KKwkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBDb25zb2xlPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgor
CQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENTbmFwc2hvdE1vZHVsZTwvc3RyaW5nPgorCQkJ
PGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBzaG90cyBUb29sPC9zdHJpbmc+CisJCTwv
ZGljdD4KKwk8L2FycmF5PgorCTxrZXk+QnVuZGxlUGF0aDwva2V5PgorCTxzdHJpbmc+L0RldmVs
b3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RldlRvb2xzSW50ZXJmYWNlLmZyYW1ld29y
ay9SZXNvdXJjZXM8L3N0cmluZz4KKwk8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CisJPHN0cmluZz5E
ZWZhdWx0RGVzY3JpcHRpb25LZXk8L3N0cmluZz4KKwk8a2V5PkRvY2tpbmdTeXN0ZW1WaXNpYmxl
PC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PkV4dGVuc2lvbjwva2V5PgorCTxzdHJpbmc+bW9kZTF2
Mzwvc3RyaW5nPgorCTxrZXk+RmF2QmFyQ29uZmlnPC9rZXk+CisJPGRpY3Q+CisJCTxrZXk+UEJY
UHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJPHN0cmluZz5GQkM3NkI1ODExRjYyNjIwMDBCRkIw
Mzc8L3N0cmluZz4KKwkJPGtleT5YQ0Jhck1vZHVsZUl0ZW1OYW1lczwva2V5PgorCQk8ZGljdC8+
CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtczwva2V5PgorCQk8YXJyYXkvPgorCTwvZGljdD4KKwk8
a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCTxmYWxzZS8+CisJPGtleT5JZGVu
dGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUucGVyc3BlY3RpdmVzLnByb2plY3QubW9k
ZTF2Mzwvc3RyaW5nPgorCTxrZXk+TWFqb3JWZXJzaW9uPC9rZXk+CisJPGludGVnZXI+MzM8L2lu
dGVnZXI+CisJPGtleT5NaW5vclZlcnNpb248L2tleT4KKwk8aW50ZWdlcj4wPC9pbnRlZ2VyPgor
CTxrZXk+TmFtZTwva2V5PgorCTxzdHJpbmc+RGVmYXVsdDwvc3RyaW5nPgorCTxrZXk+Tm90aWZp
Y2F0aW9uczwva2V5PgorCTxhcnJheS8+CisJPGtleT5PcGVuRWRpdG9yczwva2V5PgorCTxhcnJh
eS8+CisJPGtleT5QZXJzcGVjdGl2ZVdpZHRoczwva2V5PgorCTxhcnJheT4KKwkJPGludGVnZXI+
LTE8L2ludGVnZXI+CisJCTxpbnRlZ2VyPi0xPC9pbnRlZ2VyPgorCTwvYXJyYXk+CisJPGtleT5Q
ZXJzcGVjdGl2ZXM8L2tleT4KKwk8YXJyYXk+CisJCTxkaWN0PgorCQkJPGtleT5DaG9zZW5Ub29s
YmFySXRlbXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPmFjdGl2ZS1jb21iby1wb3B1
cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YWN0aW9uPC9zdHJpbmc+CisJCQkJPHN0cmluZz5OU1Rv
b2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+ZGVidWdnZXItZW5h
YmxlLWJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQkJPHN0cmluZz5idWlsZC1hbmQtZ288L3N0cmlu
Zz4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5pZGUuUEJYVG9vbGJhclN0b3BCdXR0b248L3N0cmlu
Zz4KKwkJCQk8c3RyaW5nPmdldC1pbmZvPC9zdHJpbmc+CisJCQkJPHN0cmluZz5OU1Rvb2xiYXJG
bGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnBieC50b29s
YmFyLnNlYXJjaGZpZWxkPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Db250cm9sbGVy
Q2xhc3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+SWNvbk5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9qZWN0V2l0aEVkaXRvcjwvc3RyaW5nPgor
CQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZlLnByb2plY3Q8
L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPGZhbHNlLz4KKwkJCTxrZXk+
TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PlBCWEJvdHRvbVNtYXJ0
R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz4xQzM3RkJBQzA0
NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMzdGQUFDMDQ1MDlDRDAw
MDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAy
PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8L3N0cmlu
Zz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5nPgorCQkJ
CQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJCQkJPHN0
cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFD
QzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJCTxr
ZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3
MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwv
a2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5QQlhQcm9qZWN0
U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJPGRp
Y3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldpZHRoc0tleTwv
a2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+MjI2PC9yZWFsPgorCQkJCQkJCTwv
YXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8
L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5n
PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3Jv
dXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJ
CQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9r
ZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjVCQkVGRjlCOTE3MzgyOTdCOTVD
NTY4RDwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4Njwv
c3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjQ2NkUxRDA1MzFBNzlCNTgxM0U4QTdGODwvc3RyaW5n
PgorCQkJCQkJCQk8c3RyaW5nPkUwRURDNDEzMEU3RDM3NDMxOENFNzJCRTwvc3RyaW5nPgorCQkJ
CQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQk8
c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+
CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlv
bktleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGlu
dGVnZXI+NjE8L2ludGVnZXI+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPC9hcnJheT4KKwkJ
CQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlVmlzaWJsZVJlY3RL
ZXk8L2tleT4KKwkJCQkJCQk8c3RyaW5nPnt7MCwgNDc5fSwgezIyNiwgNzYwfX08L3N0cmluZz4K
KwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJ
CQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5
PgorCQkJCQkJPHRydWUvPgorCQkJCQkJPGtleT5YQ1NoYXJpbmdUb2tlbjwva2V5PgorCQkJCQkJ
PHN0cmluZz5jb20uYXBwbGUuWGNvZGUuR0ZTaGFyaW5nVG9rZW48L3N0cmluZz4KKwkJCQkJPC9k
aWN0PgorCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQk8ZGljdD4K
KwkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezI0MywgNzc4
fX08L3N0cmluZz4KKwkJCQkJCTxrZXk+R3JvdXBUcmVlVGFibGVDb25maWd1cmF0aW9uPC9rZXk+
CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz5NYWluQ29sdW1uPC9zdHJpbmc+CisJCQkJ
CQkJPHJlYWw+MjI2PC9yZWFsPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJCTxrZXk+UnViYmVyV2lu
ZG93RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5IDAgMCAxNDQwIDg3OCA8
L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQk8c3Ry
aW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJpbmc+CisJCQkJCTxrZXk+UHJvcG9ydGlv
bjwva2V5PgorCQkJCQk8c3RyaW5nPjI0M3B0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJ
CQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNF
MEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1v
ZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+VHJhbnNsYXRvckhMU0wuaDwvc3RyaW5n
PgorCQkJCQkJCQk8a2V5PlBCWFNwbGl0TW9kdWxlSW5OYXZpZ2F0b3JLZXk8L2tleT4KKwkJCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0MDwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQkJCTxzdHJp
bmc+MUNFMEIyMDQwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5QQlhQ
cm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPlRyYW5zbGF0b3JITFNM
Lmg8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5Pl9oaXN0b3J5Q2FwYWNpdHk8L2tleT4KKwkJCQkJ
CQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+Ym9va21hcms8L2tleT4K
KwkJCQkJCQkJCQk8c3RyaW5nPkZCMzlENzVEMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5nPgorCQkJ
CQkJCQkJCTxrZXk+aGlzdG9yeTwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQkJ
PHN0cmluZz5GQjNDNTBCNDExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0
cmluZz5GQjNDNTBCNTExRjc5NTdBMDA4MUY1QkE8L3N0cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5TcGxpdENvdW50PC9rZXk+CisJCQkJ
CQkJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PlN0
YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezQ3Miwg
NTQ5fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJ
PC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhOYXZp
Z2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJ
CTxzdHJpbmc+NTQ5cHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJ
CQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPHRydWUvPgorCQkJCQkJCTxrZXk+
Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5Q
QlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRTBCMjA1MDY0NzFF
MDYwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJ
CQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJ
CQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCA1NTR9LCB7NDcyLCAy
MjR9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8
L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWls
TW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0
cmluZz4yMjRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8
a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz40NzJwdDwvc3RyaW5nPgorCQkJCTwv
ZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVj
dDwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJ
CTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJ
CQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRh
aWxNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwv
a2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+RkIzOUQ3NUUxMjAxMEUzRDAwMDg4RTY5PC9z
dHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJ
CQk8c3RyaW5nPkZCMzlENzVGMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+
MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjIwNTA2
NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25m
aWdVc2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwkJCTxzdHJpbmc+Mjwvc3RyaW5nPgor
CQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29s
YmFyLmNvbmZpZy5kZWZhdWx0VjM8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxr
ZXk+Q29udHJvbGxlckNsYXNzQmFzZU5hbWU8L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJ
CQk8a2V5Pkljb25OYW1lPC9rZXk+CisJCQk8c3RyaW5nPldpbmRvd09mUHJvamVjdDwvc3RyaW5n
PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPnBlcnNwZWN0aXZlLm1vcnBo
PC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVn
ZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8
a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQk8
a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCTxkaWN0PgorCQkJCQkJPGtleT5Q
QlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJp
bmc+MUMzN0ZCQUMwNDUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3
RkFBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDMDhFNzdDMDQ1
NDk2MTAwMEM5MTRCRDwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAw
MDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8
L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5n
PgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJ
CQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0cmluZz4KKwkJCQkJCQk8c3Ry
aW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgorCQkJCQkJPC9hcnJheT4KKwkJ
CQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+MTFFMEIx
RkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVM
YWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5nPgorCQkJCQkJPGtleT5QQlhQ
cm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+
CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbldpZHRo
c0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJlYWw+MTg2PC9yZWFsPgorCQkJ
CQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNL
ZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwv
c3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNt
YXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4K
KwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlRXhwYW5zaW9u
S2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3RyaW5nPjI5Qjk3MzE0RkRDRkEz
OTQxMUNBMkNFQTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAw
MDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJCTxhcnJheT4K
KwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJ
PC9hcnJheT4KKwkJCQkJCQk8L2FycmF5PgorCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVN
b2R1bGVPdXRsaW5lU3RhdGVWaXNpYmxlUmVjdEtleTwva2V5PgorCQkJCQkJCTxzdHJpbmc+e3sw
LCAwfSwgezE4NiwgMzM3fX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJY
VG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5j
bHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4K
KwkJCQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4KKwkJCQkJCTxzdHJpbmc+Y29tLmFwcGxl
Llhjb2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5H
ZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJCQkJCQk8a2V5PkZyYW1l
PC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsyMDMsIDM1NX19PC9zdHJpbmc+CisJCQkJ
CQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJPGFycmF5Pgor
CQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTxyZWFsPjE4NjwvcmVh
bD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQk8c3RyaW5nPjM3MyAyNjkgNjkwIDM5NyAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJ
CTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJPHN0cmluZz5QQlhTbWFydEdy
b3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
PHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+
TmFtZTwva2V5PgorCQkJPHN0cmluZz5Nb3JwaDwvc3RyaW5nPgorCQkJPGtleT5QcmVmZXJyZWRX
aWR0aDwva2V5PgorCQkJPGludGVnZXI+MzAwPC9pbnRlZ2VyPgorCQkJPGtleT5TZXJ2aWNlQ2xh
c3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+
CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJh
eT4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmlu
Zz4xMUUwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29u
ZmlnLmRlZmF1bHQuc2hvcnRWMzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJPC9hcnJheT4KKwk8a2V5
PlBlcnNwZWN0aXZlc0JhclZpc2libGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U2hlbGZJc1Zp
c2libGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U291cmNlRGVzY3JpcHRpb248L2tleT4KKwk8
c3RyaW5nPmZpbGUgYXQgJy9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZU
b29sc0ludGVyZmFjZS5mcmFtZXdvcmsvUmVzb3VyY2VzL1hDUGVyc3BlY3RpdmVzU3BlY2lmaWNh
dGlvbk1vZGUxLnhjcGVyc3BlYyc8L3N0cmluZz4KKwk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwv
a2V5PgorCTx0cnVlLz4KKwk8a2V5PlRpbWVTdGFtcDwva2V5PgorCTxyZWFsPjAuMDwvcmVhbD4K
Kwk8a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4KKwk8c3Ry
aW5nPjI8L3N0cmluZz4KKwk8a2V5PlRvb2xiYXJEaXNwbGF5TW9kZTwva2V5PgorCTxpbnRlZ2Vy
PjE8L2ludGVnZXI+CisJPGtleT5Ub29sYmFySXNWaXNpYmxlPC9rZXk+CisJPHRydWUvPgorCTxr
ZXk+VG9vbGJhclNpemVNb2RlPC9rZXk+CisJPGludGVnZXI+MTwvaW50ZWdlcj4KKwk8a2V5PlR5
cGU8L2tleT4KKwk8c3RyaW5nPlBlcnNwZWN0aXZlczwvc3RyaW5nPgorCTxrZXk+VXBkYXRlTWVz
c2FnZTwva2V5PgorCTxzdHJpbmc+VGhlIERlZmF1bHQgV29ya3NwYWNlIGluIHRoaXMgdmVyc2lv
biBvZiBYY29kZSBub3cgaW5jbHVkZXMgc3VwcG9ydCB0byBoaWRlIGFuZCBzaG93IHRoZSBkZXRh
aWwgdmlldyAod2hhdCBoYXMgYmVlbiByZWZlcnJlZCB0byBhcyB0aGUgIk1ldHJvLU1vcnBoIiBm
ZWF0dXJlKS4gIFlvdSBtdXN0IGRpc2NhcmQgeW91ciBjdXJyZW50IERlZmF1bHQgV29ya3NwYWNl
IHNldHRpbmdzIGFuZCB1cGRhdGUgdG8gdGhlIGxhdGVzdCBEZWZhdWx0IFdvcmtzcGFjZSBpbiBv
cmRlciB0byBnYWluIHRoaXMgZmVhdHVyZS4gIERvIHlvdSB3aXNoIHRvIHVwZGF0ZSB0byB0aGUg
bGF0ZXN0IFdvcmtzcGFjZSBkZWZhdWx0cyBmb3IgcHJvamVjdCAnJUAnPzwvc3RyaW5nPgorCTxr
ZXk+V2luZG93SnVzdGlmaWNhdGlvbjwva2V5PgorCTxpbnRlZ2VyPjU8L2ludGVnZXI+CisJPGtl
eT5XaW5kb3dPcmRlckxpc3Q8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJpbmc+RkJDNzZCNTkxMUY2
MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCTxzdHJpbmc+L1ZvbHVtZXMvREFUQS9wYXVscy9zcmMv
U2FmYXJpL09wZW5Tb3VyY2UvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvajwvc3RyaW5n
PgorCTwvYXJyYXk+CisJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwk8c3RyaW5nPjAgNTkgNzIw
IDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJPGtleT5XaW5kb3dUb29sc1YzPC9rZXk+CisJ
PGFycmF5PgorCQk8ZGljdD4KKwkJCTxrZXk+Rmlyc3RUaW1lV2luZG93RGlzcGxheWVkPC9rZXk+
CisJCQk8ZmFsc2UvPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRv
d1Rvb2wuYnVpbGQ8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUv
PgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtl
eT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29u
dGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQ
cm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRDA1MjhGMDYyMzcwNzIw
MDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2li
aWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5
Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5
PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezEzMDAsIDI5NH19PC9zdHJp
bmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmlu
Zz4xNDAgMjc4IDEzMDAgNTc2IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+
CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdy
b3VwPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmlu
Zz4yOTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtl
eT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+WENNYWluQnVpbGRS
ZXN1bHRzTW9kdWxlR1VJRDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVM
YWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkJ1aWxkIFJlc3VsdHM8L3N0cmluZz4KKwkJCQkJ
CQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJfQ29sbGFwc2U8L2tleT4KKwkJCQkJCQkJPGlu
dGVnZXI+MTAyMTwvaW50ZWdlcj4KKwkJCQkJCQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJf
T3Blbjwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xMDExPC9pbnRlZ2VyPgorCQkJCQkJCTwvZGlj
dD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0
PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAyOTl9LCB7
MTMwMCwgMjM2fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5
PgorCQkJCQkJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5n
PgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJp
bmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9u
PC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMzZwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJ
CQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz41MzVw
dDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nl
czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9z
dHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJ
CTx0cnVlLz4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZC
MzlENzYwMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNEMDUyOEYwNjIz
NzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz5YQ01haW5CdWlsZFJlc3VsdHNNb2R1
bGVHVUlEPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlv
bjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5idWlsZFYzPC9zdHJpbmc+
CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ4NiAzMDA8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjE0MCAyNzgg
MTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sR1VJRDwv
a2V5PgorCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPGZhbHNlLz4KKwkJPC9kaWN0PgorCQk8
ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmRl
YnVnZ2VyPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJ
CQkJCQk8a2V5PkRlYnVnZ2VyPC9rZXk+CisJCQkJCQkJCTxkaWN0PgorCQkJCQkJCQkJPGtleT5I
b3Jpem9udGFsU3BsaXRWaWV3PC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5
Pl9jb2xsYXBzaW5nRnJhbWVEaW1lbnNpb248L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3Jl
YWw+CisJCQkJCQkJCQkJPGtleT5faW5kZXhPZkNvbGxhcHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJ
CQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJCTxrZXk+X3BlcmNlbnRhZ2VPZkNvbGxh
cHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CisJCQkJCQkJCQkJPGtl
eT5pc0NvbGxhcHNlZDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJ
CQkJCQkJPGtleT5zaXplczwva2V5PgorCQkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQkJPHN0
cmluZz57ezAsIDB9LCB7MzE3LCAxNjR9fTwvc3RyaW5nPgorCQkJCQkJCQkJCQk8c3RyaW5nPnt7
MzE3LCAwfSwgezM3NywgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJ
CQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5WZXJ0aWNhbFNwbGl0Vmlldzwva2V5PgorCQkJCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5fY29sbGFwc2luZ0ZyYW1lRGltZW5zaW9uPC9rZXk+
CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+X2luZGV4T2ZDb2xs
YXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJ
CQk8a2V5Pl9wZXJjZW50YWdlT2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+
MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+aXNDb2xsYXBzZWQ8L2tleT4KKwkJCQkJCQkJCQk8
c3RyaW5nPnllczwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+c2l6ZXM8L2tleT4KKwkJCQkJCQkJ
CQk8YXJyYXk+CisJCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5NCwgMTY0fX08L3N0cmlu
Zz4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDE2NH0sIHs2OTQsIDIxNn19PC9zdHJpbmc+CisJ
CQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPC9kaWN0PgorCQkJ
CQkJCQk8a2V5PkxhdW5jaGVyQ29uZmlnVmVyc2lvbjwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjg8
L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPjFDMTYyOTg0MDY0QzEwRDQwMEI5NUE3Mjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRlYnVnIC0gR0xV
VEV4YW1wbGVzIChVbmRlcndhdGVyKTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8
a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8
a2V5PkRlYnVnQ29uc29sZURyYXdlclNpemU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57MTAwLCAx
MjB9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RGVidWdDb25zb2xlVmlzaWJsZTwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5EZWJ1Z0NvbnNvbGVXaW5k
b3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwv
c3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnU1RESU9XaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezY5NCwgMzgwfX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PjMyMSAyMzggNjk0IDQyMiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhEZWJ1Z1Nlc3Npb25N
b2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3Ry
aW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtl
eT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCTwvZGlj
dD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RGVidWdnZXI8
L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8
c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJ
PGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDRDEw
QTk5MDY5RUY4QkEwMEIwNjcyMDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUMwQUQyQUIwNjlGMUU5
QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzE2Mjk4NDA2NEMxMEQ0MDBCOTVBNzI8
L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkFDMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgor
CQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJp
bmc+eGNvZGUudG9vbGJhci5jb25maWcuZGVidWdWMzwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dT
dHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzIxIDIzOCA2OTQgNDIyIDAgMCAxNDQwIDg3OCA8L3N0
cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+MUNEMTBBOTkw
NjlFRjhCQTAwQjA2NzIwPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tl
eT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5
PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5PgorCQkJPGZhbHNlLz4KKwkJCTxrZXk+SWRl
bnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmZpbmQ8L3N0cmluZz4KKwkJCTxr
ZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUvPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4K
KwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJ
CQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+
CisJCQkJCQkJCQkJPHN0cmluZz4xQ0RENTI4QzA2MjIyMDcyMDAxMzQ2NzU8L3N0cmluZz4KKwkJ
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQkJCTxzdHJp
bmc+U2hhZGVyTGFuZy5jcHA8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2li
aWxpdHk8L2tleT4KKwkJCQkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJ
CQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezc4MSwg
MjEyfX08L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4K
KwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJCQk8
c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJCQk8a2V5PlByb3BvcnRp
b248L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+NzgxcHQ8L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8dHJ1ZS8+CisJCQkJCQkJPGtleT5D
b250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNEMDUyOEUwNjIzNzA3
MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9r
ZXk+CisJCQkJCQkJCTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+
CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDIxN30sIHs3
ODEsIDIxMn19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4K
KwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5n
PlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9r
ZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8
L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz40MjlwdDwv
c3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJ
CTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhQcm9qZWN0RmluZE1vZHVsZTwvc3RyaW5n
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8dHJ1
ZS8+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJp
bmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJCQkJPHN0cmluZz5GQjNDNTBE
RDExRjc5RDI3MDA4MUY1QkE8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCM0M1MERFMTFGNzlEMjcw
MDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNERDUyOEMwNjIyMjA3MjAwMTM0Njc1PC9z
dHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI4RTA2MjM3MDcyMDAxNjY2NzU8L3N0cmluZz4KKwkJ
CTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz43NzUgNjI5
IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8
L2tleT4KKwkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJpbmc+CisJCQk8
a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxmYWxzZS8+CisJCTwvZGljdD4KKwkJ
PGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4KKwkJCTxzdHJpbmc+TUVOVVNFUEFSQVRP
Ujwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+
CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdnZXJDb25zb2xlPC9zdHJpbmc+CisJCQk8a2V5
PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tl
eT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8
L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0
TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDNzhFQUFDMDY1RDQ5MjYwMEIwNzA5
NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPkRlYnVnZ2VyIENvbnNvbGU8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJ
CQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs2NTAsIDI1
MH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJ
CQkJPHN0cmluZz41MTYgNjMyIDY1MCAyNTAgMCAwIDE2ODAgMTAyNyA8L3N0cmluZz4KKwkJCQkJ
CQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWERl
YnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJ
CQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5Pgor
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgor
CQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+
RGVidWdnZXIgQ29uc29sZTwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5Pgor
CQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8L3N0cmluZz4KKwkJCTwv
YXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwv
aW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJ
PHN0cmluZz4xQzc4RUFBRDA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFD
NzhFQUFFMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUM3OEVBQUMwNjVE
NDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5jb25zb2xlVjM8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjY1MCA0MSA2
NTAgMjUwIDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9r
ZXk+CisJCQk8c3RyaW5nPjFDNzhFQUFEMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8
L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndp
bmRvd1Rvb2wuc25hcHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJ
CQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDU25h
cHNob3RNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJ
CQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJ
CTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+U25h
cHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+
CisJCQkJPHN0cmluZz5YQ1NuYXBzaG90TW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxzdHJpbmc+WWVzPC9zdHJpbmc+CisJ
CQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xi
YXIuY29uZmlnLnNuYXBzaG90czwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4K
KwkJCTxzdHJpbmc+MzE1IDgyNCAzMDAgNTUwIDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJPHN0cmluZz5ZZXM8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53
aW5kb3dUb29sLnNjbTwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4K
KwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxk
aWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGlj
dD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3Ry
aW5nPjFDNzhFQUIyMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPiZsdDtObyBFZGl0b3ImZ3Q7
PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYU3BsaXRNb2R1bGVJbk5hdmlnYXRvcktleTwva2V5
PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXQwPC9rZXk+CisJCQkJCQkJCQk8
ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJ
CQkJPHN0cmluZz4xQzc4RUFCMzA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQkJCQkJCTwv
ZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXRDb3VudDwva2V5PgorCQkJCQkJCQkJPHN0cmluZz4x
PC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5TdGF0dXNCYXJWaXNpYmls
aXR5PC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0Pgor
CQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NDUyLCAw
fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQkJCQkJ
CTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYTmF2
aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjBwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgor
CQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFD
RDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPlNDTTwvc3RyaW5nPgorCQkJCQkJCTwv
ZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PkNvbnNvbGVGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7
MCwgMjU5fSwgezQ1MiwgMH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJ
CQkJCQkJPHN0cmluZz57ezAsIDd9LCB7NDUyLCAyNTl9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+NzQzIDM3OSA0NTIgMzA4
IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+VGFibGVDb25maWd1cmF0aW9u
PC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCTxzdHJpbmc+U3RhdHVzPC9zdHJpbmc+
CisJCQkJCQkJCQk8cmVhbD4zMDwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+RmlsZU5hbWU8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE5OTwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UGF0aDwv
c3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MTk3LjA5NTAwMTIyMDcwMzE8L3JlYWw+CisJCQkJCQkJ
CTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+VGFibGVGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5n
Pnt7MCwgMH0sIHs0NTIsIDI1MH19PC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDVlNNb2R1bGU8L3N0cmluZz4KKwkJ
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjI2MnB0PC9zdHJpbmc+
CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5
PgorCQkJCQk8c3RyaW5nPjI2NnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5TQ008L3N0cmluZz4KKwkJCTxrZXk+U2Vy
dmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWENWU01vZHVsZTwv
c3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJ
CQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDNzhFQUI0MDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgor
CQkJCTxzdHJpbmc+MUM3OEVBQjUwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz4xQzc4RUFCMjA2NUQ0OTI2MDBCMDcwOTU8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDRDA1Mjky
MDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNv
bmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuc2NtPC9z
dHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz43NDMgMzc5IDQ1
MiAzMDggMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxr
ZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLmJyZWFrcG9pbnRzPC9z
dHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+
CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5
PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNv
bWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+
Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5Q
QlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8
c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQk8L2FycmF5
PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCTxzdHJp
bmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYUHJv
amVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+RmlsZXM8L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCQkJPHN0
cmluZz5ubzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29s
dW1uRGF0YTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91
cFRyZWVNb2R1bGVDb2x1bW5XaWR0aHNLZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJ
CQkJCQk8cmVhbD4xNjg8L3JlYWw+CisJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPGtleT5Q
QlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmluZz4KKwkJCQkJCQkJCTwvYXJy
YXk+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVs
ZU91dGxpbmVTdGF0ZUtleV92Nzwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+
UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVFeHBhbnNpb25LZXk8L2tleT4KKwkJ
CQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEw
Mjwvc3RyaW5nPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91
cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVTZWxlY3Rpb25LZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJh
eT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJ
CQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCQk8a2V5PlBCWFNt
YXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlVmlzaWJsZVJlY3RLZXk8L2tleT4KKwkJCQkJ
CQkJCTxzdHJpbmc+e3swLCAwfSwgezE2OCwgMzUwfX08L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0
PgorCQkJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQkJCTxhcnJh
eS8+CisJCQkJCQkJCTxrZXk+WENJbmNsdWRlUGVyc3BlY3RpdmVzU3dpdGNoPC9rZXk+CisJCQkJ
CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2Vv
bWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MTg1LCAzNjh9fTwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQk8
YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48L3N0cmluZz4KKwkJCQkJCQkJCTxy
ZWFsPjE2ODwvcmVhbD4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5k
b3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMxNSA0MjQgNzQ0IDQwOSAwIDAgMTQ0MCA4
NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJ
CQkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxr
ZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTg1cHQ8L3N0cmluZz4KKwkJCQkJ
CTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248
L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDQTFBRUQ3MDYzOThFQkQwMDU4OTE0Nzwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29u
ZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+
CisJCQkJCQkJCTxzdHJpbmc+e3sxOTAsIDB9LCB7NTU0LCAzNjh9fTwvc3RyaW5nPgorCQkJCQkJ
CQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MzE1IDQyNCA3
NDQgNDA5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJ
CQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz41NTRwdDwvc3RyaW5n
PgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJPHN0cmluZz4zNjhwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+
CisJCQk8a2V5Pk1ham9yVmVyc2lvbjwva2V5PgorCQkJPGludGVnZXI+MzwvaW50ZWdlcj4KKwkJ
CTxrZXk+TWlub3JWZXJzaW9uPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtl
eT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQk8a2V5PlNl
cnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4K
KwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVn
ZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+
CisJCQkJPHN0cmluZz4xQ0REQjY2ODA3Rjk4RDk4MDBCQjU4MTc8L3N0cmluZz4KKwkJCQk8c3Ry
aW5nPjFDRERCNjY5MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNFMEIx
RkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0ExQUVENzA2Mzk4RUJE
MDA1ODkxNDc8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0
aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmJyZWFrcG9pbnRzVjM8
L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjMxNSA0MjQg
NzQ0IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9r
ZXk+CisJCQk8c3RyaW5nPjFDRERCNjY4MDdGOThEOTgwMEJCNTgxNzwvc3RyaW5nPgorCQkJPGtl
eT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQk8
L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndp
bmRvd1Rvb2wuZGVidWdBbmltYXRvcjwvc3RyaW5nPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJ
CTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4K
KwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5Pgor
CQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5
PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+
CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmlu
Zz5EZWJ1ZyBWaXN1YWxpemVyPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+
CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4x
PC9pbnRlZ2VyPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmlu
Zz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWJ1Z0FuaW1hdG9yVjM8L3N0cmluZz4KKwkJCTxrZXk+
V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjEwMCAxMDAgNzAwIDUwMCAwIDAgMTI4MCAx
MDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYm9va21hcmtzPC9zdHJpbmc+CisJCQk8a2V5Pkxh
eW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4K
KwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CQkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJv
cG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0
PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmlu
Zz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwv
a2V5PgorCQkJPHN0cmluZz5Cb29rbWFya3M8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNz
ZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwvc3Ry
aW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8
aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJp
bmc+NTM4IDQyIDQwMSAxODcgMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8
ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLnBy
b2plY3RGb3JtYXRDb25mbGljdHM8L3N0cmluZz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8
YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9jazwva2V5PgorCQkJCQk8YXJyYXk+CisJ
CQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+WENQ
cm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0
aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJ
CQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjEw
MCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2FycmF5PgorCQkJPGtleT5OYW1lPC9rZXk+
CisJCQk8c3RyaW5nPlByb2plY3QgRm9ybWF0IENvbmZsaWN0czwvc3RyaW5nPgorCQkJPGtleT5T
ZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENQcm9qZWN0Rm9y
bWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNi
YXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PldpbmRv
d0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5nPjQ1MCAzMDA8L3N0cmluZz4KKwkJCTxr
ZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjUwIDg1MCA0NzIgMzA3IDAgMCAxNDQw
IDg3Nzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9r
ZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuY2xhc3NCcm93c2VyPC9zdHJpbmc+CisJCQk8a2V5
PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tl
eT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8
L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENv
bmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5PcHRpb25zU2V0
TmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkhpZXJhcmNoeSwgYWxsIGNsYXNzZXM8L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3Ry
aW5nPjFDQTY0NTZFMDYzQjQ1QjQwMDEzNzlEODwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFBy
b2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkNsYXNzIEJyb3dzZXIgLSBO
U09iamVjdDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29u
ZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkNsYXNzZXNGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHszNzQsIDk2fX08L3N0cmluZz4KKwkJ
CQkJCQkJPGtleT5DbGFzc2VzVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQk8
YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWENsYXNzTmFtZUNvbHVtbklkZW50aWZpZXI8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIwODwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UEJYQ2xh
c3NCb29rQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+
CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0
cmluZz57ezAsIDB9LCB7NjMwLCAzMzF9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5Pk1lbWJlcnNG
cmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMTA1fSwgezM3NCwgMzk1fX08L3N0cmlu
Zz4KKwkJCQkJCQkJPGtleT5NZW1iZXJzVHJlZVRhYmxlQ29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5cGVJY29uQ29sdW1uSWRl
bnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+CisJCQkJCQkJCQk8c3Ry
aW5nPlBCWE1lbWJlck5hbWVDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVh
bD4yMTY8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlclR5cGVDb2x1bW5JZGVudGlm
aWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD45NzwvcmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+
UEJYTWVtYmVyQm9va0NvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIy
PC9yZWFsPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlBCWE1vZHVsZVdpbmRvd1N0
YXR1c0JhckhpZGRlbjI8L2tleT4KKwkJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJ
CQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjM4NSAxNzkg
NjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0
cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjMzMnB0
PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9y
dGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjMzMnB0PC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5DbGFzcyBCcm93c2VyPC9z
dHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0
cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxr
ZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQzBBRDJB
RjA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkIwMDY5RjFFOUIw
MEZBQkNFNjwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNBNjQ1NkUwNjNCNDVCNDAwMTM3OUQ4PC9z
dHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5Pgor
CQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5jbGFzc2Jyb3dzZXI8L3N0cmluZz4KKwkJ
CTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjM4NSAxNzkgNjMwIDM1MiAwIDAg
MTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3Ry
aW5nPjFDMEFEMkFGMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29s
SXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wucmVm
YWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+SW5jbHVkZUluVG9vbHNNZW51PC9rZXk+CisJCQk8
aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJ
CQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0
PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJCQkJPGludGVnZXI+MTwvaW50
ZWdlcj4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxk
aWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+ezAsIDB9LCB7
NTAwLCAzMzV9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz57MCwgMH0sIHs1MDAsIDMzNX08L3N0cmluZz4KKwkJCQkJCQk8L2Rp
Y3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhDUmVmYWN0b3Jp
bmdNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8
c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJ
PGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCTwv
ZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UmVmYWN0
b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4K
KwkJCQk8c3RyaW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJ
CQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0cmluZz4yMDAgMjAwIDUwMCAzNTYgMCAw
IDE5MjAgMTIwMCA8L3N0cmluZz4KKwkJPC9kaWN0PgorCTwvYXJyYXk+Cis8L2RpY3Q+Cis8L3Bs
aXN0PgpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wYXVscy5wYnh1c2Vy
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1bHMucGJ4
dXNlcgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcGF1
bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAKKy8vICEkKlVURjgqJCEK
K3sKKwkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovID0geworCQlhY3RpdmVFeGVj
ID0gMDsKKwl9OworCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICov
ID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAv
KiBPdXRwdXRHTFNMLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRz
UmVjdCA9ICJ7ezAsIDB9LCB7NTQ0LCA5MTM5fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAs
IDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA5ODJ9IjsKKwkJfTsKKwl9OworCTU2QzdF
OTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0g
eworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7OTcxLCA0Nzg0fX0iOworCQkJ
c2VwTmF2U2VsUmFuZ2UgPSAiezIzNjMsIDE5fSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MTg2
MiwgOTI4fSI7CisJCX07CisJfTsKKwk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlh
bGl6ZURsbC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3Qg
PSAie3swLCAwfSwgezU3MiwgMTQ2OX19IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7
CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgMTAyNX0iOworCQl9OworCX07CisJNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICovID0geworCQlhY3RpdmVFeGVj
ID0gMDsKKwl9OworCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8g
PSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezY5
MSwgNjUwfX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1Jh
bmdlID0gInswLCAxNDM1fSI7CisJCX07CisJfTsKKwlBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEg
LyogZ2xzbGFuZ190YWIuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3Vu
ZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDYzMDc2fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAi
ezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxNzQ2fSI7CisJCX07CisJfTsKKwlC
N0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovID0geworCQl1aUN0
eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDQ4M319IjsK
KwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwg
NjA4fSI7CisJCX07CisJfTsKKwlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25z
dC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3sw
LCAwfSwgezEyMTYsIDI5NTF9fSI7CisJCQlzZXBOYXZTZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJ
c2VwTmF2VmlzUmFuZ2UgPSAiezAsIDEzNzV9IjsKKwkJfTsKKwl9OworCURBMTg4RDhDNkJGODA3
MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJYWN0aXZlQnVpbGRDb25maWd1
cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCWFjdGl2ZVRhcmdldCA9IDE1NjNEOTkxNkJGREFEODUz
MDMyQ0UxQSAvKiBBbGwgKi87CisJCWNvZGVTZW5zZU1hbmFnZXIgPSBGQkM3NkFGNzExRjYyMDND
MDBCRkIwMzcgLyogQ29kZSBzZW5zZSAqLzsKKwkJcGVyVXNlckRpY3Rpb25hcnkgPSB7CisJCQlQ
QlhDb25maWd1cmF0aW9uLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UzLlBCWEV4ZWN1dGFibGVzRGF0
YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVj
dGlvbktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdL
ZXkgPSBQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlEOworCQkJCVBCWEZpbGVUYWJsZURh
dGFTb3VyY2VDb2x1bW5XaWR0aHNLZXkgPSAoCisJCQkJCTIyLAorCQkJCQkzMDAsCisJCQkJCTYz
NiwKKwkJCQkpOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5zS2V5ID0gKAorCQkJ
CQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQWN0aXZlRmxhZ0lELAorCQkJCQlQQlhFeGVjdXRh
Ymxlc0RhdGFTb3VyY2VfTmFtZUlELAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQ29t
bWVudHNJRCwKKwkJCQkpOworCQkJfTsKKwkJCVBCWENvbmZpZ3VyYXRpb24uUEJYRmlsZVRhYmxl
RGF0YVNvdXJjZTMuUEJYRmlsZVRhYmxlRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVE
YXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9IDE7CisJCQkJUEJYRmlsZVRhYmxl
RGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9D
b2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAor
CQkJCQkyMCwKKwkJCQkJMjMzLAorCQkJCQkyMCwKKwkJCQkJNDgsCisJCQkJCTQzLAorCQkJCQk0
MywKKwkJCQkJMjAsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tl
eSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURh
dGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0J1aWx0
X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9PYmplY3RTaXplX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRh
U291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRf
Q29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWEZpbGVUYWJs
ZURhdGFTb3VyY2UzLlhDU0NNRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291
cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0
YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1
bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJ
CQkyMCwKKwkJCQkJMjAsCisJCQkJCTIwOSwKKwkJCQkJMjAsCisJCQkJCTQ4LjE2MjU5NzY1NjI1
LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJCTIwLAorCQkJCSk7CisJCQkJUEJYRmlsZVRhYmxl
RGF0YVNvdXJjZUNvbHVtbnNLZXkgPSAoCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX1NDTV9Db2x1
bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURh
dGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0J1aWx0
X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9PYmplY3RTaXplX0NvbHVtbklELAor
CQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRh
U291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRf
Q29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWFRhcmdldERh
dGFTb3VyY2UuUEJYVGFyZ2V0RGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291
cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0
YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1
bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJ
CQkyMCwKKwkJCQkJMTkzLAorCQkJCQk2MCwKKwkJCQkJMjAsCisJCQkJCTQ4LAorCQkJCQk0MywK
KwkJCQkJNDMsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9
ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFT
b3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBCWFRhcmdldERhdGFTb3VyY2VfUHJpbWFy
eUF0dHJpYnV0ZSwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfQnVpbHRfQ29sdW1uSUQsCisJCQkJ
CVBCWEZpbGVEYXRhU291cmNlX09iamVjdFNpemVfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRh
U291cmNlX0Vycm9yc19Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfV2FybmluZ3Nf
Q29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhQZXJQcm9qZWN0VGVtcGxhdGVTdGF0ZVNh
dmVEYXRlID0gMzAyMDU1MDYwOworCQkJUEJYV29ya3NwYWNlU3RhdGVTYXZlRGF0ZSA9IDMwMjA1
NTA2MDsKKwkJfTsKKwkJcGVyVXNlclByb2plY3RJdGVtcyA9IHsKKwkJCUZCMzlENzVEMTIwMTBF
M0QwMDA4OEU2OSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSBGQjM5RDc1RDEyMDEwRTNEMDAwODhF
NjkgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIzQzUwQjQxMUY3OTU3QTAwODFGNUJBIC8q
IFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MEI0MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0
Qm9va21hcmsgKi87CisJCQlGQjNDNTBCNTExRjc5NTdBMDA4MUY1QkEgLyogUEJYVGV4dEJvb2tt
YXJrICovID0gRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLzsK
KwkJfTsKKwkJc291cmNlQ29udHJvbE1hbmFnZXIgPSBGQkM3NkFGNjExRjYyMDNDMDBCRkIwMzcg
LyogU291cmNlIENvbnRyb2wgKi87CisJCXVzZXJCdWlsZFNldHRpbmdzID0geworCQkJU1lNUk9P
VCA9IC4uOworCQl9OworCX07CisJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0
b3JHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAi
e3swLCAwfSwgezUzMCwgNTE3fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJ
CXNlcE5hdlZpc1JhbmdlID0gInswLCA0Nzh9IjsKKwkJfTsKKwl9OworCUUzQTI5QjZFOUMyMUI2
N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0geworCQl1aUN0eHQgPSB7CisJCQlz
ZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs1MzAsIDUxN319IjsKKwkJCXNlcE5hdlNl
bFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgNDc4fSI7CisJCX07
CisJfTsKKwlGQjM5RDc1RDEyMDEwRTNEMDAwODhFNjkgLyogUEJYVGV4dEJvb2ttYXJrICovID0g
eworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZSZWYgPSBFM0EyOUI2RTlDMjFCNjdDMjVG
RjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLzsKKwkJbmFtZSA9ICJUcmFuc2xhdG9ySExTTC5o
OiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOworCQlyVHlwZSA9IDA7CisJCXZyTGVuID0g
NDc4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5n
bGUgKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07CisJRkIzQzUwQjQxMUY3OTU3QTAwODFG
NUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJaXNhID0gUEJYVGV4dEJvb2ttYXJrOwor
CQlmUmVmID0gQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLzsK
KwkJbmFtZSA9ICJDb2RlR2VuR0xTTC5jcHA6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7
CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA2MDg7CisJCXZyTG9jID0gMDsKKwl9OworCUZCM0M1
MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi8gPSB7CisJCWlzYSA9IFBC
WFRleHRCb29rbWFyazsKKwkJZlJlZiA9IEUzQTI5QjZFOUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFu
c2xhdG9ySExTTC5oICovOworCQluYW1lID0gIlRyYW5zbGF0b3JITFNMLmg6IDEiOworCQlyTGVu
ID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA0Nzg7CisJCXZyTG9j
ID0gMDsKKwl9OworCUZCQzc2QUY2MTFGNjIwM0MwMEJGQjAzNyAvKiBTb3VyY2UgQ29udHJvbCAq
LyA9IHsKKwkJaXNhID0gUEJYU291cmNlQ29udHJvbE1hbmFnZXI7CisJCWZhbGxiYWNrSXNhID0g
WENTb3VyY2VDb250cm9sTWFuYWdlcjsKKwkJaXNTQ01FbmFibGVkID0gMDsKKwkJc2NtQ29uZmln
dXJhdGlvbiA9IHsKKwkJCXJlcG9zaXRvcnlOYW1lc0ZvclJvb3RzID0geworCQkJCSIiID0gIiI7
CisJCQl9OworCQl9OworCX07CisJRkJDNzZBRjcxMUY2MjAzQzAwQkZCMDM3IC8qIENvZGUgc2Vu
c2UgKi8gPSB7CisJCWlzYSA9IFBCWENvZGVTZW5zZU1hbmFnZXI7CisJCWluZGV4VGVtcGxhdGVQ
YXRoID0gIiI7CisJfTsKK30KSW5kZXg6IEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2J1aWxkX2Fu
Z2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEz
IEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNsYXNzZXMgPSB7
CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDU7CisJb2JqZWN0cyA9IHsKKworLyogQmVnaW4gUEJY
QWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJMTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8q
IEFsbCAqLyA9IHsKKwkJCWlzYSA9IFBCWEFnZ3JlZ2F0ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSA3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi87CisJCQlidWlsZFBoYXNl
cyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJRkIzQzUwNjQxMUY3OTI5NzAw
ODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IEFsbDsK
KwkJCXByb2R1Y3ROYW1lID0gQWxsOworCQl9OworCQkzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUUg
LyogQU5HTEUgU3VwcG9ydCAqLyA9IHsKKwkJCWlzYSA9IFBCWEFnZ3JlZ2F0ZVRhcmdldDsKKwkJ
CWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwQUE1NDgyNUJGNURGMEEzRkJBOTJCNjAgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFOR0xFIFN1cHBv
cnQiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkEwRDcxMjVEQjA2QTdBNzcxNkE1OTEw
IC8qIEFjdGlvbiAiZmxleF9nbHNsYW5nIiAqLywKKwkJCQkwRDUxM0Y4QjkyMzk0OUMxNTZEQjAy
QzUgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLywKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMg
PSAoCisJCQkpOworCQkJbmFtZSA9ICJBTkdMRSBTdXBwb3J0IjsKKwkJCXByb2R1Y3ROYW1lID0g
InRyYW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQl9OworLyogRW5kIFBCWEFnZ3JlZ2F0ZVRh
cmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTA1
NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0ODU3RTE4Nzk5RDMzMkMzMEVGNDYw
QzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQkwQTIxNjk0OTEwM0UxRTIyOEY5QzEy
RjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5j
cHAgKi87IH07CisJCTBENDA2NDE2NzM5OEE2ODkyODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTNEMTY5Q0I4
NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9OworCQkzMDY1RDI5RTk3RkFD
NkUxMjczODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6
ZS5jcHAgKi87IH07CisJCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJF
RjkxRkQ2REMgLyogYXRvbS5jICovOyB9OworCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyog
Y3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCTNBOTZF
OUNBQzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnku
YyAqLzsgfTsKKwkJNDBGQzE4OUI4QTI0NkVERjE0QzJGREUzIC8qIGludGVybU91dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUFGNkYzMTI2QzJF
QzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJNTBERjAwMDA1Q0M0MjEyRjZG
QjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJtZWRpYXRl
LmNwcCAqLzsgfTsKKwkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFB
NzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07CisJCTg4OEYxMzgyNDk4
RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICov
OyB9OworCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVC
NjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUFCQTVDNjFCMUI3OEI5QThENjlG
NkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLzsgfTsK
KwkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUy
MkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMg
Lyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKKwkJQjQ4NTg0
MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAv
KiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CisJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAv
KiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsK
KwkJQkVCQkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjkyN0JFNUQzQzJDODJGODYxMTFE
RiAvKiBJbmZvU2luay5jcHAgKi87IH07CisJCUNCN0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBj
cHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcw
N0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLzsgfTsKKwkJRTFDN0M1REZGMEIyREZFQzA5
Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAq
LzsgfTsKKwkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5jIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwMDc0NURBOTkxNEZERTI3NEQw
M0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2NzggLyogc2Nh
bm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkYz
QUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsKKwkJRjVBRTJBMjkyREZB
RjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRl
cm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1i
b2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OworCQlG
QjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVE
IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTgxMUY3OTI0QTAwODFGNUJBIC8q
IE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovOyB9Owor
CQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZCNzBEQzc0QTIxRkJDRDY2
NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwOEUxMUY3OTQ5RTAw
ODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3BwICovOyB9
OworCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUx
NURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTIxMUY3OTRDRTAwODFG
NUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi87IH07CisJCUZC
M0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyog
SW5mb1NpbmsuY3BwICovOyB9OworCQlGQjNDNTA5NDExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlh
bGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07CisJCUZCM0M1
MDk1MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAv
KiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTYxMUY3OTRDRTAwODFGNUJBIC8q
IEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsg
fTsKKwkJRkIzQzUwOTcxMUY3OTRDRTAwODFGNUJBIC8qIGludGVybU91dC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERUFGNkYzMTI2QzJFQzQzOTc3
ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJRkIzQzUwOTgxMUY3OTRDRTAwODFGNUJB
IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5j
cHAgKi87IH07CisJCUZCM0M1MDlBMTFGNzk0Q0UwMDgxRjVCQSAvKiBvc3NvdXJjZV9wb3NpeC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4
NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovOyB9OworCQlGQjNDNTA5
QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFy
c2VDb25zdC5jcHAgKi87IH07CisJCUZCM0M1MDlDMTFGNzk0Q0UwMDgxRjVCQSAvKiBQYXJzZUhl
bHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQlGQjND
NTA5RDExRjc5NENFMDA4MUY1QkEgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovOyB9OworCQlGQjNDNTA5RTExRjc5NENFMDA4MUY1QkEgLyogUXVhbGlm
aWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLzsgfTsK
KwkJRkIzQzUwOUYxMUY3OTRDRTAwODFGNUJBIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUy
MkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlGQjNDNTBBMDExRjc5NENFMDA4MUY1QkEg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07
CisJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYw
REU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OworCQlGQjNDNTBBNDExRjc5NEZGMDA4MUY1
QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLzsgfTsKKwkJRkIzQzUwQTUx
MUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovOyB9Owor
CQlGQjNDNTBBNjExRjc5NEZGMDA4MUY1QkEgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEg
LyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCM0M1MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1v
cnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0
NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJRkIzQzUwQTgxMUY3OTRG
RjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVBODEzMjM0RCAvKiBzY2FubmVyLmMgKi87IH07
CisJCUZCM0M1MEE5MTFGNzk0RkYwMDgxRjVCQSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAg
Lyogc3ltYm9scy5jICovOyB9OworCQlGQjNDNTBBQTExRjc5NEZGMDA4MUY1QkEgLyogdG9rZW5z
LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDAwNzQ1
REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi87IH07CisJCUZCM0M1MEFCMTFGNzk1MUIw
MDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JH
TFNMLmggKi87IH07CisJCUZCM0M1MEFDMTFGNzk1MUIwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmgg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q2MUNCMEJD
RTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICov
CisJCUU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwg
PSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94
eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAzMTM0OUQ2NjVGQUU2NDJBRUI0
OTEzNUU7CisJCQlyZW1vdGVJbmZvID0gInRyYW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQl9
OworCQlGQjNDNTA2MzExRjc5Mjk3MDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFs
ID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJv
eHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gRkIzQzUwNTUxMUY3OTI0QTAw
ODFGNUJBOworCQkJcmVtb3RlSW5mbyA9IGFuZ2xlOworCQl9OworCQlGQjNDNTBEMDExRjc5Q0ND
MDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29u
dGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIy
NTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90
ZUdsb2JhbElEU3RyaW5nID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFOworCQkJcmVtb3RlSW5m
byA9ICJBTkdMRSBTdXBwb3J0IjsKKwkJfTsKKy8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkg
c2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMDU2
RkVBREM3RDk1QzZENEM5Q0YxMTEzIC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE1M0JG
MDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyN0U0
QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOTRGNDQyQTI2MDZGRUM1NUYx
MkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTdDOUI2RTZEQjc1
MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlh
bGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0REREM3NzIxNjIw
MkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CisJCTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlh
dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmllckFs
aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY3BwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAv
KiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1ODBCMkEzMUY3QzUxQTU5QjQwRjExQTMgLyogY29t
cGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRITFNMLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjBDMzk5
OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCQkM4
MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHByZXBy
b2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2OTI3QkU1RDNDMkM4MkY4
NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZm9TaW5rLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZCNzBEQzc0QTIxRkJDRDY2NUFCREY5IC8q
IFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3
IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBpbnRlcm1lZGlhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhGIC8qIFN5bWJv
bFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdEOUNGMzc2REM1Nzk5QjRDNkIzMzMxRSAvKiBzeW1ib2xzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODA1OEEw
QTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1
Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODMxMzk5REVFNURBQkEwOTU3MEZC
M0U3IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRpYWxpemUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg5QTZGN0IxQUQzOTE4RTY0REY3NkVCMSAvKiBzbGdsb2JhbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThD
MzIyNUMyRjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5nLnkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNs
YW5nLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRDYxQ0IwQkNFNTRFMDY5RDcx
RjkyMCAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8qIGRlYnVn
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE91dHB1dEhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5Q0VEM0FG
RjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFs
aWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6
ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUEzMTUzRDU4RjRCQkJEOThBODRFNDIxMCAvKiBnbHNsYW5nLmwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
Z2xzbGFuZy5sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTNEMTY5Q0I4NDlCODYx
RTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190
YWIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTRGMkVEMEQ4MkQ3QkJDQTRF
OUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXplLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0
IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRTc2NzRD
NTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVuaXN0ZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyog
Q29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVU
cmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3QjExMjdDNzVCNTc2RkMw
MEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuR0xT
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3RTVCMEYwNDYzNUU2MDkwRjBE
RThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW1ib2xUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNjZENkI0N0Q5QUYzMjg2NjQ0QkJF
MSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nX3RhYi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0VFMEM5MERGNkQ1MDREMUYzNjI5NzExIC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNGMkI2MkUw
ODIwQzgzMUFGODEyRDAwMCAvKiBidWlsZF9hbmdsZS5neXAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gYnVpbGRfYW5nbGUuZ3lw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUg
LyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlEMTNDMzY5M0I5RTQwRDM3RjJGQUIzNEEgLyogdG9rZW5zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMkM5QzhFQjRB
N0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJz
ZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDQwRjc4Q0I5QkEwQzg5
OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlVHJlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEREQzQjdFM0I3QjM1QTBCODQ2OUFCODcgLyog
VHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVy
bU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyogTU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNzExQTQ4
QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMjlCNkU5
QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5z
bGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYwMTNBNzI0MEJEQUU4
QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHN5bWJvbHMuYzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5rLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCM0M1MDVEMTFGNzky
NEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJhbmdsZS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlGRjNBQTY5
NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJ
QTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNUExMUY3OTI0QTAwODFGNUJBIC8qIEZyYW1ld29ya3Mg
Ki8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMEU4
RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8q
IGF0b20uYyAqLywKKwkJCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAor
CQkJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCisJCQkJQjc1NzA3
QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAorCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2
RkZEQSAvKiBjcHAuaCAqLywKKwkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3Ry
dWN0LmMgKi8sCisJCQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovLAor
CQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnkuaCAqLywKKwkJCQlDRkQxMkM2
RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCisJCQkJNkJCQzgyMjRCOUQ4RTIzNEQx
MTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQg
Lyogc2Nhbm5lci5jICovLAorCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2FubmVy
LmggKi8sCisJCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovLAor
CQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCisJCQkJN0Q5Q0Yz
NzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKKwkJCQkyRDAwNzQ1REE5OTE0RkRF
Mjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCisJCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRBIC8q
IHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBwcmVwcm9jZXNzb3I7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291
cmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRThE
NjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovLAorCQkJCTI3RTRDN0VEMEI4
MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywKKwkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBE
NzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAorCQkJCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBF
MSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCisJCQkJRjc0NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8q
IENvbW1vbi5oICovLAorCQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVu
aW9uLmggKi8sCisJCQkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAq
LywKKwkJCQlGN0IyOTcxRDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLywKKwkJCQlB
NTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCisJCQkJODUxM0ZB
QzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRpYWxpemUuaCAqLywKKwkJCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCisJCQkJQTBDRTQzNjMxODQ5Mjc2
QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywKKwkJCQkyRTdDOUI2RTZEQjc1MUUxMkEy
RjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKKwkJCQk4NTg0NUZGRjVBOEU2MzM2NDMw
ODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAorCQkJCUM0RkU5ODhFRjlBMjkz
ODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJM0Y3QzQ4NkMzNzBBNzI5
MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJREVFQUZDNjE4QTNCMzNGMUZC
RkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0
cHV0R0xTTC5jcHAgKi8sCisJCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdM
U0wuaCAqLywKKwkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAg
Ki8sCisJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJ
CQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAorCQkJCUNF
RTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQYXJzZUhlbHBlci5oICovLAorCQkJCUI2NEVBQkU3
MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovLAorCQkJCTEyRUFGMDI4MzExRUVB
NDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLywKKwkJCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYw
QzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJCTlENDdCMUFDODJFNEVFODU5QUM1NDI0
MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAv
KiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVt
b3ZlVHJlZS5oICovLAorCQkJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5o
ICovLAorCQkJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLywK
KwkJCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJ
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCTZGQjcw
REM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCisJCQkJREREM0I3
RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCisJCQkJQzNEQUZGNkJG
MTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKKwkJCQlFM0EyOUI2RTlD
MjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKKwkJCQlBQTUzQjY2MzJDNzZG
OTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKKwkJCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkg
LyogVW5mb2xkU2VsZWN0LmNwcCAqLywKKwkJCQkyQTc2NUI4NkNCQUYwRDRBM0U2OURDQTcgLyog
VW5mb2xkU2VsZWN0LmggKi8sCisJCQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVn
LmNwcCAqLywKKwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKKwkJ
CQlBMzE1M0Q1OEY0QkJCRDk4QTg0RTQyMTAgLyogZ2xzbGFuZy5sICovLAorCQkJCThDMzIyNUMy
RjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5nLnkgKi8sCisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3
Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJNzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3
IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBs
b2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUM4QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBv
c2luY2x1ZGUuaCAqLywKKwkJCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwICovLAorCQkJCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0
LmNwcCAqLywKKwkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8sCisJ
CQkpOworCQkJbmFtZSA9IFNvdXJjZTsKKwkJCXBhdGggPSBjb21waWxlcjsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTQ2NkUxRDA1MzFBNzlCNTgxM0U4QTdGOCAvKiBJbnRl
cm1lZGlhdGVzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQlDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5jcHAgKi8sCisJCQkJQTUzRDE2
OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLywKKwkJCQlCQzY2RDZCNDdE
OUFGMzI4NjY0NEJCRTEgLyogZ2xzbGFuZ190YWIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gSW50
ZXJtZWRpYXRlczsKKwkJCXNvdXJjZVRyZWUgPSBJTlRFUk1FRElBVEVfRElSOworCQl9OworCQk1
QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQgPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8sCisJCQkJ
NDY2RTFEMDUzMUE3OUI1ODEzRThBN0Y4IC8qIEludGVybWVkaWF0ZXMgKi8sCisJCQkJRTBFREM0
MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICovLAorCQkJCUIyQzE4NEMzNTQzMTk4QkE1
MTU5MkVBNCAvKiBCdWlsZCAqLywKKwkJCSk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OworCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVpbGQgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUNGMkI2MkUwODIwQzgzMUFGODEyRDAw
MCAvKiBidWlsZF9hbmdsZS5neXAgKi8sCisJCQkpOworCQkJbmFtZSA9IEJ1aWxkOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8q
IFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQkzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLywK
KwkJCQlGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyogbGliYW5nbGUuYSAqLywKKwkJCSk7CisJ
CQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyog
RW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rp
b24gKi8KKwkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
ID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9jb21tb24iICovOworCQkJYnVpbGRQaGFz
ZXMgPSAoCisJCQkJRUFBMjJDQTYzRkQ1NzJGQ0NCOTEzRDIyIC8qIFNvdXJjZXMgKi8sCisJCQkJ
QTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVp
bGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMjkxRUUwNDIwMkVD
Nzk2NzgzNUZDQzM4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9
IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsK
KwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGlidHJh
bnNsYXRvcl9jb21tb24uYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0
LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworCQlGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEg
LyogYW5nbGUgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gRkIzQzUwNUIxMUY3OTI0QTAwODFGNUJBIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJhbmdsZSIgKi87CisJCQlidWlsZFBoYXNl
cyA9ICgKKwkJCQlGQjNDNTA1NjExRjc5MjRBMDA4MUY1QkEgLyogU291cmNlcyAqLywKKwkJCQlG
QjNDNTA1QTExRjc5MjRBMDA4MUY1QkEgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWls
ZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQlGQjNDNTBEMTExRjc5
Q0NDMDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0g
YW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfZ2xzbDsKKwkJCXByb2R1Y3RSZWZl
cmVuY2UgPSBGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyogbGliYW5nbGUuYSAqLzsKKwkJCXBy
b2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9
OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFByb2pl
Y3Qgc2VjdGlvbiAqLworCQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmpl
Y3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYXR0cmlidXRlcyA9IHsKKwkJCQlC
dWlsZEluZGVwZW5kZW50VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7CisJCQl9OworCQkJYnVpbGRD
b25maWd1cmF0aW9uTGlzdCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKKwkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJCQloYXNTY2FubmVkRm9yRW5jb2Rpbmdz
ID0gMTsKKwkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDsKKwkJCXByb2pl
Y3REaXJQYXRoID0gIiI7CisJCQlwcm9qZWN0Um9vdCA9ICIiOworCQkJdGFyZ2V0cyA9ICgKKwkJ
CQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovLAorCQkJCTZGNEZEMzVDQjNERkM4
OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLywKKwkJCQkzMTM0OUQ2NjVGQUU2NDJB
RUI0OTEzNUUgLyogQU5HTEUgU3VwcG9ydCAqLywKKwkJCQlGQjNDNTA1NTExRjc5MjRBMDA4MUY1
QkEgLyogYW5nbGUgKi8sCisJCQkpOworCQl9OworLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAq
LworCisvKiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRDUx
M0Y4QjkyMzk0OUMxNTZEQjAyQzUgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJ
CWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJCWNv
bXBpbGVyL2dsc2xhbmcueSwKKwkJCSk7CisJCQluYW1lID0gIkFjdGlvbiBcImJpc29uX2dsc2xh
bmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNs
YW5nX3RhYi5jcHAiLAorCQkJCSIkKElOVEVSTUVESUFURV9ESVIpL2dsc2xhbmdfdGFiLmgiLAor
CQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hl
bGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRp
bmcgYmlzb24gb24gY29tcGlsZXIvZ2xzbGFuZy55XCJcbmV4ZWMgYmlzb24gLS1uby1saW5lcyBc
Ii0tZGVmaW5lcz0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0
b249eWFjYy5jXCIgXCItLW91dHB1dD0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNw
cFwiIGNvbXBpbGVyL2dsc2xhbmcueVxuZXhpdCAxXG4iOworCQkJc2hvd0VudlZhcnNJbkxvZyA9
IDA7CisJCX07CisJCUZBMEQ3MTI1REIwNkE3QTc3MTZBNTkxMCAvKiBBY3Rpb24gImZsZXhfZ2xz
bGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQ
YXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5nLmwsCisJCQkpOworCQkJbmFtZSA9ICJBY3Rp
b24gXCJmbGV4X2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1F
RElBVEVfRElSKS9nbHNsYW5nLmNwcCIsCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3Jp
cHQgPSAiZWNobyBub3RlOiBcIkV4ZWN1dGluZyBmbGV4IG9uIGNvbXBpbGVyL2dsc2xhbmcubFwi
XG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0ke0lOVEVSTUVESUFU
RV9ESVJ9L2dsc2xhbmcuY3BwXCIgY29tcGlsZXIvZ2xzbGFuZy5sXG5leGl0IDFcbiI7CisJCQlz
aG93RW52VmFyc0luTG9nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhh
c2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICov
CisJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0g
UEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owor
CQkJZmlsZXMgPSAoCisJCQkJODg4RjEzODI0OThFMkQ3NEFGMjgwMUM4IC8qIGRlYnVnLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUJFQkJGNEYwODE5RUEzRDAzOTc3QThGQyAvKiBJbmZvU2luay5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkzMDY1RDI5RTk3RkFDNkUxMjczODhEMTUgLyogSW5pdGlh
bGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwQTIxNjk0OTEwM0UxRTIyOEY5QzEyRjAgLyog
SW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MERGMDAwMDVDQzQyMTJGNkZC
MTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQwRkMxODlCOEEy
NDZFREYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjVBRTJB
MjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAvKiBQYXJzZUhlbHBlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMUM3QzVERkYwQjJERkVDMDkzODdGNEUgLyogUG9vbEFsbG9jLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTA1NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcg
LyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCOEJEMjY4NUExNkIxODhDQ0RG
QjA1MkIgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNkFCRDU4RjhDQUI3
NjQxRDhCRkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzJCMURC
Q0Q2QjgzRjIxNDZENzg3QTYyIC8qIGF0b20uYyBpbiBTb3VyY2VzICovLAorCQkJCUNCN0YwRUYw
RDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTM1QkUxQkJFRTYx
MzVBMUNCMDYwOEVBOCAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovLAorCQkJCTNBOTZFOUNB
QzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovLAorCQkJCUYwOThGNDYz
RURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAqLywKKwkJCQlBRDg1NTE3
RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRThDNzI3
QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8sCisJCQkJQUJBNUM2
MUIxQjc4QjlBOEQ2OUY2QUVDIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEQ0
MDY0MTY3Mzk4QTY4OTI4MDlBMDlFIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKKwkJfTsKKwkJRkIzQzUwNTYxMUY3OTI0QTAwODFGNUJBIC8qIFNvdXJjZXMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjNDNTBBQjExRjc5NTFCMDA4MUY1QkEgLyogVHJh
bnNsYXRvckdMU0wuaCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEFDMTFGNzk1MUIwMDgxRjVC
QSAvKiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBNDExRjc5NEZGMDA4
MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTUxMUY3OTRGRjAwODFG
NUJBIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTYxMUY3OTRGRjAwODFGNUJB
IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTcxMUY3OTRGRjAwODFG
NUJBIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTgxMUY3OTRGRjAwODFG
NUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE5MTFGNzk0RkYwMDgx
RjVCQSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBQTExRjc5NEZGMDA4
MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA4RTExRjc5NDlFMDA4
MUY1QkEgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA1NzExRjc5MjRB
MDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTIx
MUY3OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDkz
MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjND
NTA5NDExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGQjNDNTA5NTExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjNDNTA5NjExRjc5NENFMDA4MUY1QkEgLyogSW50ZXJtZWRpYXRlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk3MTFGNzk0Q0UwMDgxRjVCQSAvKiBpbnRlcm1PdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTgxMUY3OTRDRTAwODFGNUJBIC8qIEludGVy
bVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlBMTFGNzk0Q0UwMDgxRjVC
QSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA1ODExRjc5
MjRBMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5
QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
QjNDNTA5QzExRjc5NENFMDA4MUY1QkEgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzQzUwOUQxMUY3OTRDRTAwODFGNUJBIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjNDNTA5RTExRjc5NENFMDA4MUY1QkEgLyogUXVhbGlmaWVyQWxpdmUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUYxMUY3OTRDRTAwODFGNUJBIC8qIFJlbW92ZVRy
ZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTAxMUY3OTRDRTAwODFGNUJBIC8qIFNo
YWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTExMUY3OTRDRTAwODFGNUJB
IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDU5MTFGNzkyNEEw
MDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA4
RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkp
OworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisvKiBF
bmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhUYXJnZXRE
ZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJMjkxRUUwNDIwMkVDNzk2NzgzNUZDQzM4IC8qIFBCWFRh
cmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJ
dGFyZ2V0ID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi87CisJ
CQl0YXJnZXRQcm94eSA9IEU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAvKiBQQlhDb250YWluZXJJ
dGVtUHJveHkgKi87CisJCX07CisJCUZCM0M1MDY0MTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhUYXJn
ZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRh
cmdldCA9IEZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQSAvKiBhbmdsZSAqLzsKKwkJCXRhcmdldFBy
b3h5ID0gRkIzQzUwNjMxMUY3OTI5NzAwODFGNUJBIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LzsKKwkJfTsKKwkJRkIzQzUwRDExMUY3OUNDQzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMzEz
NDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBvcnQgKi87CisJCQl0YXJnZXRQcm94
eSA9IEZCM0M1MEQwMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87
CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisKKy8qIEJlZ2lu
IFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMDBCRjJFQkNCREY1Njc4RjRCQTJG
QTkyIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJ
CWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9u
IFN1cHBvcnQiOworCQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworCQkxQTEyQUE1RDY1
QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSBBbGw7CisJ
CQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCTFGM0YxMjE4QjUxMzVGQkIwNjdERTgw
OSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUhFQURF
Ul9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJ
CQlQUk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCX07CisJCQluYW1lID0gRGVm
YXVsdDsKKwkJfTsKKwkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8qIERlZmF1bHQgKi8gPSB7
CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF82NF9CSVQpIjsKKwkJCQlDT05GSUdVUkFUSU9O
X0JVSUxEX0RJUiA9ICIkKEJVSUxEX0RJUikvJChDT05GSUdVUkFUSU9OKSQoRUZGRUNUSVZFX1BM
QVRGT1JNX05BTUUpIjsKKwkJCQlJTlRFUk1FRElBVEVfRElSID0gIiQoUFJPSkVDVF9ERVJJVkVE
X0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJT04pIjsKKwkJCQlPQkpST09UID0gIiI7CisJCQkJT05M
WV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTSEFSRURfSU5URVJNRURJQVRFX0RJUiA9ICIkKFNZ
TVJPT1QpL0Rlcml2ZWRTb3VyY2VzLyQoQ09ORklHVVJBVElPTikiOworCQkJCVNZTVJPT1QgPSAi
JChCVUlMRF9ESVIpIjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJRkIzQzUw
NUMxMUY3OTI0QTAwODFGNUJBIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJRVhFQ1VUQUJMRV9QUkVGSVgg
PSBsaWI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5j
bHVkZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9IGFuZ2xlOworCQkJfTsKKwkJCW5hbWUg
PSBEZWZhdWx0OworCQl9OworLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8K
KworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTBBQTU0ODI1QkY1
REYwQTNGQkE5MkI2MCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0
ZVRhcmdldCAiQU5HTEUgU3VwcG9ydCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25M
aXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwMEJGMkVCQ0JERjU2NzhGNEJB
MkZBOTIgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9Owor
CQkwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRp
b25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlCQzU3OTNDOUExRkYwMjFB
ODFDNjY1NTkgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9
OworCQkzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTFG
M0YxMjE4QjUxMzVGQkIwNjdERTgwOSAvKiBEZWZhdWx0ICovLAorCQkJKTsKKwkJCWRlZmF1bHRD
b25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9
IERlZmF1bHQ7CisJCX07CisJCTc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLyA9IHsKKwkJCWlz
YSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJ
CTFBMTJBQTVENjVBQ0RFNzFBRTA4OUVFMyAvKiBEZWZhdWx0ICovLAorCQkJKTsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFt
ZSA9IERlZmF1bHQ7CisJCX07CisJCUZCM0M1MDVCMTFGNzkyNEEwMDgxRjVCQSAvKiBCdWlsZCBj
b25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovID0geworCQkJ
aXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJ
CQkJRkIzQzUwNUMxMUY3OTI0QTAwODFGNUJBIC8qIERlZmF1bHQgKi8sCisJCQkpOworCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25O
YW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24g
Ki8KKwl9OworCXJvb3RPYmplY3QgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVj
dCBvYmplY3QgKi87Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmdsZXV0aWxzLmg6IENvbW1vbiBBTkdMRSB1
dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NTU9OX0FOR0xFVVRJTFNfSF8KKyNkZWZpbmUgQ09NTU9O
X0FOR0xFVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgY29weSBjb25zdHJ1
Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0IGJlIHVzZWQgaW4gdGhl
IHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcworI2RlZmluZSBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAg
ICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlm
IC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRp
ZXMuCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkYXJnLmg+CisKK3N0YXRpYyBib29sIHRyYWNlX29uID0gdHJ1ZTsKKworbmFt
ZXNwYWNlIGdsCit7Cit2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAg
IGlmICh0cmFjZV9vbikKKyAgICB7CisgICAgICAgIGlmIChmb3JtYXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEZJTEUgKmZpbGUgPSBmb3BlbigiZGVidWcudHh0IiwgImEiKTsKKworICAgICAg
ICAgICAgaWYgKGZpbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFfbGlzdCB2
YXJhcmc7CisgICAgICAgICAgICAgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOworICAgICAg
ICAgICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICAgICAgICAgICAg
ICB2YV9lbmQodmFyYXJnKTsKKworICAgICAgICAgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK30KSW5kZXg6IEFOR0xFL3NyYy9jb21tb24v
ZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRp
ZXMuCisKKyNpZm5kZWYgQ09NTU9OX0RFQlVHX0hfCisjZGVmaW5lIENPTU1PTl9ERUJVR19IXwor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworbmFtZXNwYWNlIGds
Cit7CisgICAgLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1Z2dpbmcgbG9nCisgICAgdm9pZCB0
cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cit9CisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0
IGEgdHJhY2Ugb2YgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1
Z2dpbmcgbG9nCisjaWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4u
KSBnbDo6dHJhY2UoInRyYWNlOiAlcyJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBfX1ZBX0FS
R1NfXykKKyNlbHNlCisgICAgI2RlZmluZSBUUkFDRSguLi4pICgodm9pZCkwKQorI2VuZGlmCisK
Ky8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0
byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBvZiBmaXhpbmcu
IFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUuCisjZGVmaW5lIEZJWE1FKG1lc3NhZ2Us
IC4uLikgZ2w6OnRyYWNlKCJmaXhtZTogJXMibWVzc2FnZSJcbiIsIF9fRlVOQ1RJT05fXywgX19W
QV9BUkdTX18pCisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRz
IGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgaW4gY2FzZSBvZiBlcnJvci4gV2lsbCBv
Y2N1ciBldmVuIGluIHJlbGVhc2UgbW9kZS4KKyNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgZ2w6
OnRyYWNlKCJlcnI6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQor
CisvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJl
cyB0byB0aGUgZGVidWcgbG9nCisjZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSBkbyB7IFwKKyAg
ICBpZighKGV4cHJlc3Npb24pKSBcCisgICAgICAgIEVSUigiXHQhIEFzc2VydCBmYWlsZWQgaW4g
JXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAg
IGFzc2VydChleHByZXNzaW9uKTsgXAorICAgIH0gd2hpbGUoMCkKKworCisvLyBBIG1hY3JvIHRv
IGluZGljYXRlIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25hbGl0eQorI2lmbmRlZiBOREVCVUcKKyAg
ICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKKyAgICAgICAgRklYTUUoIlx0ISBVbmlt
cGxlbWVudGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgICAg
IGFzc2VydChmYWxzZSk7IFwKKyAgICAgICAgfSB3aGlsZSgwKQorI2Vsc2UKKyAgICAjZGVmaW5l
IFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19G
VU5DVElPTl9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisvLyBBIG1hY3JvIGZvciBjb2RlIHdoaWNo
IGlzIG5vdCBleHBlY3RlZCB0byBiZSByZWFjaGVkIHVuZGVyIHZhbGlkIGFzc3VtcHRpb25zCisj
aWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBkbyB7IFwKKyAgICAgICAg
RVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9f
TElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgICAgIH0gd2hpbGUoMCkK
KyNlbHNlCisgICAgI2RlZmluZSBVTlJFQUNIQUJMRSgpIEVSUigiXHQhIFVucmVhY2hhYmxlIHJl
YWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisvLyBB
IG1hY3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxpZGF0ZSBj
b25zdGFudCBjb25kaXRpb25zCisjZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgdHlwZWRl
ZiBpbnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJvb2w+KGNv
bmRpdGlvbik/MTotMV0KKworI2VuZGlmICAgLy8gQ09NTU9OX0RFQlVHX0hfCkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VU
eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNMVURFRF8KKyNkZWZpbmUgX0JBU0lDVFlQRVNfSU5D
TFVERURfCisKKy8vCisvLyBQcmVjaXNpb24gcXVhbGlmaWVycworLy8KK2VudW0gVFByZWNpc2lv
bgoreworICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUga2VwdCBzb3J0ZWQKKyAgICBFYnBVbmRlZmlu
ZWQsCisgICAgRWJwTG93LAorICAgIEVicE1lZGl1bSwKKyAgICBFYnBIaWdoLAorfTsKKworX19p
bmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5nKFRQcmVjaXNpb24gcCkKK3sKKyAg
ICBzd2l0Y2gocCkKKyAgICB7CisgICAgY2FzZSBFYnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQli
cmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJCXJldHVybiAibWVkaXVtcCI7CWJyZWFrOworICAg
IGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJCWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0
dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICB9Cit9CisK
Ky8vCisvLyBCYXNpYyB0eXBlLiAgQXJyYXlzLCB2ZWN0b3JzLCBldGMuLCBhcmUgb3J0aG9nb25h
bCB0byB0aGlzLgorLy8KK2VudW0gVEJhc2ljVHlwZQoreworICAgIEVidFZvaWQsCisgICAgRWJ0
RmxvYXQsCisgICAgRWJ0SW50LAorICAgIEVidEJvb2wsCisgICAgRWJ0R3VhcmRTYW1wbGVyQmVn
aW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAg
IEVidFNhbXBsZXIyRCwKKyAgICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBFYnRHdWFyZFNhbXBsZXJF
bmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCisg
ICAgRWJ0U3RydWN0LAorICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRl
cHJlY2F0ZWQ/PworfTsKKworX19pbmxpbmUgYm9vbCBJc1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVi
dEd1YXJkU2FtcGxlckVuZDsKK30KKworLy8KKy8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4g
IFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAorLy8gb3Igd3Jp
dHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hp
Y2ggcmVnaXN0ZXJzCisvLyB0byBhbGxvY2F0ZSB2YXJpYWJsZXMgaW4uICBTaW5jZSBidWlsdC1p
bnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzCisvLyB0aGFuIHZhcnlpbmcgb3Ig
dW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUgcGVlcnMsIG5vdCBzdWItY2xhc3Nlcy4K
Ky8vCitlbnVtIFRRdWFsaWZpZXIKK3sKKyAgICBFdnFUZW1wb3JhcnksICAgICAvLyBGb3IgdGVt
cG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVhZC93cml0ZQorICAgIEV2cUdsb2JhbCwg
ICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUKKyAgICBFdnFDb25zdCwgICAgICAgICAv
LyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24tb3V0cHV0IHBhcmFtZXRlcnMgaW4gZnVu
Y3Rpb25zCisgICAgRXZxQXR0cmlidXRlLCAgICAgLy8gUmVhZG9ubHkKKyAgICBFdnFWYXJ5aW5n
SW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5CisgICAgRXZxVmFyeWlu
Z091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQorICAgIEV2cUludmFy
aWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBmcmFnbWVudCBzaGFkZXJzIG9ubHkKKyAg
ICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFk
L3dyaXRlCisgICAgRXZxVW5pZm9ybSwgICAgICAgLy8gUmVhZG9ubHksIHZlcnRleCBhbmQgZnJh
Z21lbnQKKworICAgIC8vIHBhY2svdW5wYWNrIGlucHV0IGFuZCBvdXRwdXQKKyAgICBFdnFJbnB1
dCwKKyAgICBFdnFPdXRwdXQsCisKKyAgICAvLyBwYXJhbWV0ZXJzCisgICAgRXZxSW4sCisgICAg
RXZxT3V0LAorICAgIEV2cUluT3V0LAorICAgIEV2cUNvbnN0UmVhZE9ubHksCisKKyAgICAvLyBi
dWlsdC1pbnMgd3JpdHRlbiBieSB2ZXJ0ZXggc2hhZGVyCisgICAgRXZxUG9zaXRpb24sCisgICAg
RXZxUG9pbnRTaXplLAorCisgICAgLy8gYnVpbHQtaW5zIHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVy
CisgICAgRXZxRnJhZ0Nvb3JkLAorICAgIEV2cUZyb250RmFjaW5nLAorICAgIEV2cVBvaW50Q29v
cmQsCisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSBmcmFnbWVudCBzaGFkZXIKKyAgICBF
dnFGcmFnQ29sb3IsCisgICAgRXZxRnJhZ0RhdGEsCisKKyAgICAvLyBlbmQgb2YgbGlzdAorICAg
IEV2cUxhc3QsCit9OworCisvLworLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQs
IGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisvLworX19pbmxpbmUg
Y29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcSkKK3sKKyAgICBzd2l0
Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFUZW1wb3Jhcnk6ICAgICAgcmV0dXJuICJUZW1wb3Jh
cnkiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxR2xvYmFsOiAgICAgICAgIHJldHVybiAiR2xv
YmFsIjsgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICByZXR1cm4g
ImNvbnN0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgcmV0
dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAg
IHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjog
ICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5n
T3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW52
YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAg
Y2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwli
cmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbjogICAgICAgICAgICAgcmV0dXJuICJpbiI7ICAgICAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgIHJldHVybiAib3V0Ijsg
ICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUluT3V0OiAgICAgICAgICByZXR1cm4gImlu
b3V0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnB1dDogICAgICAgICAgcmV0dXJu
ICJpbnB1dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxT3V0cHV0OiAgICAgICAgIHJl
dHVybiAib3V0cHV0IjsgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVBvc2l0aW9uOiAgICAg
ICByZXR1cm4gIlBvc2l0aW9uIjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFQb2ludFNpemU6
ICAgICAgcmV0dXJuICJQb2ludFNpemUiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nv
b3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZy
b250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBxdWFsaWZpZXIiOworICAg
IH0KK30KKworI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvQ29kZUdlbkdMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
ZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgiCisKKy8vCisvLyBU
aGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwKKy8vIGNv
bXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJdCByZXR1cm5zCisvLyBh
IHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVy
KEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCit7CisgICAgcmV0dXJuIG5ldyBU
cmFuc2xhdG9yR0xTTChsYW5ndWFnZSwgc3BlYyk7Cit9CisKKy8vCisvLyBEZWxldGUgdGhlIGNv
bXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKKy8vCit2b2lkIERlbGV0ZUNvbXBpbGVy
KFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVsZXRlIGNvbXBpbGVyOworfQpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvQ29kZUdlbkhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCisK
Ky8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBhY3R1
YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJdCByZXR1
cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitUQ29tcGlsZXIqIENvbnN0cnVj
dENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCit7CisgICAgcmV0
dXJuIG5ldyBUcmFuc2xhdG9ySExTTChsYW5ndWFnZSwgc3BlYyk7Cit9CisKKy8vCisvLyBEZWxl
dGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKKy8vCit2b2lkIERlbGV0
ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVsZXRlIGNvbXBpbGVyOwor
fQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9Db21tb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXworI2RlZmluZSBfQ09NTU9OX0lOQ0xVREVE
XworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5oIgor
Cit0eXBlZGVmIGludCBUU291cmNlTG9jOworY29uc3QgdW5zaWduZWQgaW50IFNvdXJjZUxvY0xp
bmVNYXNrID0gMHhmZmZmOworY29uc3QgdW5zaWduZWQgaW50IFNvdXJjZUxvY1N0cmluZ1NoaWZ0
ID0gMTY7CisKKy8vCisvLyBQdXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSBpbiBiYXNlIGNs
YXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVtZS4KKy8vCisjZGVmaW5lIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyByZXR1cm4gKEEpLmFsbG9jYXRlKHMp
OyB9ICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpfV2hl
cmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9ICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUo
dm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQg
b3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7IH0gICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QgcykgeyByZXR1cm4gKEEpLmFs
bG9jYXRlKHMpOyB9ICAgICAgICBcCisgICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2
b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9IFwKKyAgICB2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIHZvaWQgKikgeyB9CisKKy8vCisvLyBQb29s
IHZlcnNpb24gb2Ygc3RyaW5nLgorLy8KK3R5cGVkZWYgcG9vbF9hbGxvY2F0b3I8Y2hhcj4gVFN0
cmluZ0FsbG9jYXRvcjsKK3R5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2hh
cl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmc7Cit0eXBlZGVmIHN0ZDo6
YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5n
QWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOworaW5saW5lIFRTdHJpbmcqIE5ld1Bvb2xUU3RyaW5n
KGNvbnN0IGNoYXIqIHMpCit7CisJdm9pZCogbWVtb3J5ID0gR2xvYmFsUG9vbEFsbG9jYXRvci5h
bGxvY2F0ZShzaXplb2YoVFN0cmluZykpOworCXJldHVybiBuZXcobWVtb3J5KSBUU3RyaW5nKHMp
OworfQorCisvLworLy8gUGVyc2lzdGVudCBzdHJpbmcgbWVtb3J5LiAgU2hvdWxkIG9ubHkgYmUg
dXNlZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZpdmUKKy8vIGFjcm9zcyBjb21waWxlcy4KKy8vCisj
ZGVmaW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6c3RyaW5nCisjZGVmaW5lIFRQZXJzaXN0U3RyaW5n
U3RyZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQorCisvLworLy8gUG9vbCBhbGxvY2F0b3IgdmVyc2lv
bnMgb2YgdmVjdG9ycywgbGlzdHMsIGFuZCBtYXBzCisvLwordGVtcGxhdGUgPGNsYXNzIFQ+IGNs
YXNzIFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPiB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9j
YXRvcjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgIFRWZWN0b3IoKSA6IHN0ZDo6dmVj
dG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oKSB7fQorICAgIFRWZWN0b3IoY29uc3QgcG9vbF9h
bGxvY2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihhKSB7
fQorICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkpOiBzdGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRv
cjxUPiA+KGkpIHt9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgRCwgY2xhc3MgQ01Q
ID0gc3RkOjpsZXNzPEs+ID4gCitjbGFzcyBUTWFwIDogcHVibGljIHN0ZDo6bWFwPEssIEQsIENN
UCwgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gPiB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywgRD4gPiB0QWxsb2Nh
dG9yOworCisgICAgVE1hcCgpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2NhdG9yPigpIHt9
CisgICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0YWdlIG5hbWUgbG9va3VwIHN1cHBvcnRlZCBpbiBn
Y2MgMy40IGFuZCBhYm92ZQorICAgIFRNYXAoY29uc3QgdEFsbG9jYXRvciYgYSkgOiBzdGQ6Om1h
cDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj46
OmtleV9jb21wYXJlKCksIGEpIHt9Cit9OworCit0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN0cmlu
Zz4gVFByYWdtYVRhYmxlOworCisjZW5kaWYgLy8gX0NPTU1PTl9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9Db25zdGFudFVuaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjg4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KKyNkZWZp
bmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK2Ns
YXNzIENvbnN0YW50VW5pb24geworcHVibGljOgorCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURShHbG9iYWxQb29sQWxsb2NhdG9yKSAgICAgICAgCisgICAgdm9pZCBzZXRJQ29uc3QoaW50
IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9CisgICAgdm9pZCBzZXRGQ29uc3QoZmxv
YXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQorICAgIHZvaWQgc2V0QkNvbnN0
KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CisKKyAgICBpbnQgZ2V0SUNv
bnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4g
ZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KKyAgICBp
bnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxvYXQgZ2V0RkNv
bnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSBjb25z
dCB7IHJldHVybiBiQ29uc3Q7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgaSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpID09IGlDb25zdCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmID09IGZDb25z
dCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGIgPT0gYkNvbnN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb25z
dGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChjb25zdGFudC50
eXBlICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgaWYgKGNvbnN0YW50
LmlDb25zdCA9PSBpQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKGNv
bnN0YW50LmZDb25zdCA9PSBmQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBp
ZiAoY29uc3RhbnQuYkNvbnN0ID09IGJDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGludCBpKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KGYpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBib29sIGIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgaWYgKGlDb25zdCA+
IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAg
aWYgKGZDb25zdCA+IGNvbnN0YW50LmZDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QK
KyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgaWYgKGlD
b25zdCA8IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgaWYgKGZDb25zdCA8IGNvbnN0YW50LmZDb25zdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKyhjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVl
OworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNv
bnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJl
dHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IC0gY29uc3RhbnQuaUNv
bnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25z
dChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNz
ZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKihj
b25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25z
dGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50
eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1
cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKiBjb25zdGFu
dC5mQ29uc3QpOyBicmVhazsgCisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciUoY29uc3QgQ29uc3RhbnRVbmlv
biYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAg
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9y
Pj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAg
Q29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3Rh
bnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDog
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAg
Q29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAg
IGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29u
c3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2Ug
JiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3ImKGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5z
ZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisg
ICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09
IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBF
YnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3RhbnQuaUNvbnN0KTsg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlz
c2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0K
KworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3JeKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Cisg
ICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0
IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQo
ZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3ImJihjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFu
dFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJu
VmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBjb25zdGFudC5iQ29uc3QpOyBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3Rh
bnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAor
ICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3QoYkNvbnN0IHx8IGNvbnN0YW50
LmJDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJE
ZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKKyAgICB9CisKKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBl
OyB9Citwcml2YXRlOgorCisgICAgdW5pb24gIHsKKyAgICAgICAgaW50IGlDb25zdDsgIC8vIHVz
ZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZv
ciBidmVjLCBzY2FsYXIgYm9vbHMKKyAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9y
IHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCisgICAgfSA7CisKKyAgICBUQmFzaWNUeXBlIHR5cGU7
Cit9OworCisjZW5kaWYgLy8gX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXwpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9T
aW5rLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6
cHJlZml4KFRQcmVmaXhUeXBlIG1lc3NhZ2UpIHsKKyAgICBzd2l0Y2gobWVzc2FnZSkgeworICAg
ICAgICBjYXNlIEVQcmVmaXhOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RVByZWZpeFdhcm5pbmc6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiV0FSTklORzogIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4RXJyb3I6CisgICAgICAgICAg
ICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRVByZWZpeEludGVybmFsRXJyb3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiSU5URVJO
QUwgRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFVu
aW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiVU5JTVBMRU1FTlRFRDogIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUHJlZml4Tm90ZToKKyAgICAgICAg
ICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOS09XTiBFUlJPUjogIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24o
VFNvdXJjZUxvYyBsb2MpIHsKKyAgICBpbnQgc3RyaW5nID0gbG9jID4+IFNvdXJjZUxvY1N0cmlu
Z1NoaWZ0OworICAgIGludCBsaW5lID0gbG9jICYgU291cmNlTG9jTGluZU1hc2s7CisKKyAgICBU
UGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAgaWYgKGxpbmUpCisgICAgICAgIHN0cmVh
bSA8PCBzdHJpbmcgPDwgIjoiIDw8IGxpbmU7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwg
c3RyaW5nIDw8ICI6PyAiOworICAgIHN0cmVhbSA8PCAiOiAiOworCisgICAgc2luay5hcHBlbmQo
c3RyZWFtLnN0cigpKTsKK30KKwordm9pZCBUSW5mb1NpbmtCYXNlOjptZXNzYWdlKFRQcmVmaXhU
eXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpIHsKKyAgICBwcmVmaXgobWVzc2FnZSk7CisgICAg
c2luay5hcHBlbmQocyk7CisgICAgc2luay5hcHBlbmQoIlxuIik7Cit9CisKK3ZvaWQgVEluZm9T
aW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzLCBUU291
cmNlTG9jIGxvYykgeworICAgIHByZWZpeChtZXNzYWdlKTsKKyAgICBsb2NhdGlvbihsb2MpOwor
ICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5mb1Np
bmsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2RlZmluZSBfSU5GT1NJTktfSU5DTFVERURf
CisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisKKy8v
IFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQg
bnVtYmVyLgoraW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQYXJ0KGZsb2F0IGYpIHsKKyAgZmxvYXQg
aW50UGFydCA9IDAuMGY7CisgIHJldHVybiBtb2RmZihmLCAmaW50UGFydCk7Cit9CisKKy8vCisv
LyBUUHJlZml4VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxpemUgaG93IGluZm8gbG9nIG1lc3NhZ2Vz
IHN0YXJ0LgorLy8gU2VlIGJlbG93LgorLy8KK2VudW0gVFByZWZpeFR5cGUgeworICAgIEVQcmVm
aXhOb25lLAorICAgIEVQcmVmaXhXYXJuaW5nLAorICAgIEVQcmVmaXhFcnJvciwKKyAgICBFUHJl
Zml4SW50ZXJuYWxFcnJvciwKKyAgICBFUHJlZml4VW5pbXBsZW1lbnRlZCwKKyAgICBFUHJlZml4
Tm90ZQorfTsKKworLy8KKy8vIEVuY2Fwc3VsYXRlIGluZm8gbG9ncyBmb3IgYWxsIG9iamVjdHMg
dGhhdCBoYXZlIHRoZW0uCisvLworLy8gVGhlIG1ldGhvZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2Yg
dG9vbHMgZm9yIGdldHRpbmcgYSB2YXJpZXR5IG9mCisvLyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5z
ZXJ0ZWQgaW50byB0aGUgbG9nLgorLy8KK2NsYXNzIFRJbmZvU2lua0Jhc2UgeworcHVibGljOgor
ICAgIFRJbmZvU2lua0Jhc2UoKSB7fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
VEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBUJiB0KSB7CisgICAgICAgIFRQZXJzaXN0
U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8IHQ7CisgICAgICAgIHNpbmsu
YXBwZW5kKHN0cmVhbS5zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
Ly8gT3ZlcnJpZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNpZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIg
dG8gYXBwZW5kIHN0cmluZ3MKKyAgICAvLyBhbmQgY2hhcmFjdGVycyBkaXJlY3RseSB0byB0aGUg
c2luay4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNoYXIgYykgeworICAgICAgICBz
aW5rLmFwcGVuZCgxLCBjKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBUSW5m
b1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHN0cikgeworICAgICAgICBzaW5rLmFw
cGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jh
c2UmIG9wZXJhdG9yPDwoY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cikgeworICAgICAgICBzaW5r
LmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFRJbmZvU2lu
a0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFN0cmluZyYgc3RyKSB7CisgICAgICAgIHNpbmsuYXBw
ZW5kKHN0ci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAvLyBN
YWtlIHN1cmUgZmxvYXRzIGFyZSB3cml0dGVuIHdpdGggY29ycmVjdCBwcmVjaXNpb24uCisgICAg
VEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChmbG9hdCBmKSB7CisgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGF0IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVy
CisgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0
IHByZWNpc2lvbiBmb3JtYXQgZG9lcworICAgICAgICAvLyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwg
cG9ydGlvbiB3aGljaCBnZXRzIGludGVycHJldGVkIGFzIGludGVnZXIgYnkKKyAgICAgICAgLy8g
dGhlIGNvbXBpbGVyLgorICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAg
ICAgIGlmIChmcmFjdGlvbmFsUGFydChmKSA9PSAwLjBmKSB7CisgICAgICAgICAgICBzdHJlYW0u
cHJlY2lzaW9uKDEpOworICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0
ZDo6Zml4ZWQgPDwgZjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cmVhbS51bnNl
dGYoc3RkOjppb3M6OmZpeGVkKTsKKyAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6
OnNjaWVudGlmaWMpOworICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbig4KTsKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCBmOworICAgICAgICB9CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5z
dHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgLy8gV3JpdGUgYm9vbGVh
biB2YWx1ZXMgYXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ3JhbCB2YWx1ZS4KKyAgICBU
SW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGJvb2wgYikgeworICAgICAgICBjb25zdCBjaGFyKiBz
dHIgPSBiID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xl
YXIoKTsgfQorCisgICAgY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cigpIGNvbnN0IHsgcmV0dXJu
IHNpbms7IH0KKyAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHNpbmsuY19z
dHIoKTsgfQorCisgICAgdm9pZCBwcmVmaXgoVFByZWZpeFR5cGUgbWVzc2FnZSk7CisgICAgdm9p
ZCBsb2NhdGlvbihUU291cmNlTG9jIGxvYyk7CisgICAgdm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBl
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpOworICAgIHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBt
ZXNzYWdlLCBjb25zdCBjaGFyKiBzLCBUU291cmNlTG9jIGxvYyk7CisKK3ByaXZhdGU6CisgICAg
VFBlcnNpc3RTdHJpbmcgc2luazsKK307CisKK2NsYXNzIFRJbmZvU2luayB7CitwdWJsaWM6Cisg
ICAgVEluZm9TaW5rQmFzZSBpbmZvOworICAgIFRJbmZvU2lua0Jhc2UgZGVidWc7CisgICAgVElu
Zm9TaW5rQmFzZSBvYmo7Cit9OworCisjZW5kaWYgLy8gX0lORk9TSU5LX0lOQ0xVREVEXwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MTkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBDcmVhdGUgc3RyaW5ncyB0aGF0IGRlY2xhcmUgYnVp
bHQtaW4gZGVmaW5pdGlvbnMsIGFkZCBidWlsdC1pbnMgdGhhdAorLy8gY2Fubm90IGJlIGV4cHJl
c3NlZCBpbiB0aGUgZmlsZXMsIGFuZCBlc3RhYmxpc2ggbWFwcGluZ3MgYmV0d2VlbiAKKy8vIGJ1
aWx0LWluIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L0luaXRpYWxpemUuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCit2
b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZSgpCit7CisgICAgLy8KKyAgICAvLyBJbml0aWFsaXpl
IGFsbCB0aGUgYnVpbHQtaW4gc3RyaW5ncyBmb3IgcGFyc2luZy4KKyAgICAvLworICAgIFRTdHJp
bmcgQnVpbHRJbkZ1bmN0aW9uczsKKyAgICBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbnNWZXJ0ZXg7
CisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQ7CisgICAgVFN0cmluZyBTdGFu
ZGFyZFVuaWZvcm1zOworICAgIFRTdHJpbmcgVmVydGV4RGVmYXVsdFByZWNpc2lvbjsKKyAgICBU
U3RyaW5nIEZyYWdtZW50RGVmYXVsdFByZWNpc2lvbjsKKworICAgIHsKKyAgICAgICAgLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlwZXMgZm9yIGJ1
aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJz
LgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICBU
U3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uczsKKworICAgICAgICAvLworICAgICAgICAvLyBB
bmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IHJhZGlhbnMoZmxvYXQgZGVncmVlcyk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByYWRpYW5zKHZlYzIgIGRlZ3JlZXMpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmFkaWFucyh2ZWMzICBkZWdyZWVzKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJhZGlhbnModmVjNCAgZGVncmVlcyk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRlZ3JlZXMoZmxvYXQgcmFk
aWFucyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBkZWdyZWVzKHZlYzIg
IHJhZGlhbnMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZGVncmVlcyh2
ZWMzICByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRlZ3Jl
ZXModmVjNCAgcmFkaWFucyk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IHNpbihmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBz
aW4odmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc2lu
KHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNpbih2
ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGNvcyhm
bG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBjb3ModmVj
MiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgY29zKHZlYzMg
IGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNvcyh2ZWM0ICBh
bmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHRhbihmbG9hdCBh
bmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICB0YW4odmVjMiAgYW5n
bGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgdGFuKHZlYzMgIGFuZ2xl
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHRhbih2ZWM0ICBhbmdsZSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFzaW4oZmxvYXQgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhc2luKHZlYzIgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXNpbih2ZWMzICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFzaW4odmVjNCAgeCk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGFjb3MoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyICBhY29zKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgYWNvcyh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIGFjb3ModmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IGF0YW4oZmxvYXQgeSwgZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBhdGFuKHZlYzIgIHksIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgYXRhbih2ZWMzICB5LCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIGF0YW4odmVjNCAgeSwgdmVjNCAgeCk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQgeV9vdmVyX3gpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2ZWMyICB5X292ZXJfeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhdGFuKHZlYzMgIHlfb3Zlcl94KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGF0YW4odmVjNCAgeV9vdmVyX3gpOyIpKTsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBFeHBvbmVudGlhbCBGdW5jdGlvbnMuCisgICAgICAgIC8v
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHBvdyhmbG9hdCB4LCBmbG9hdCB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHBvdyh2ZWMyICB4LCB2ZWMyICB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHBvdyh2ZWMzICB4LCB2ZWMz
ICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHBvdyh2ZWM0ICB4LCB2
ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZXhwKGZsb2F0
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwKHZlYzIgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZXhwKHZlYzMgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZXhwKHZlYzQgIHgpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsb2coZmxvYXQgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBsb2codmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBsb2codmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0ICBsb2codmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IGV4cDIoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBl
eHAyKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZXhwMih2
ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGV4cDIodmVjNCAg
eCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxvZzIoZmxvYXQgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBsb2cyKHZlYzIgIHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbG9nMih2ZWMzICB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGxvZzIodmVjNCAgeCk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNxcnQoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBzcXJ0KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgc3FydCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHNxcnQodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGludmVyc2VzcXJ0KGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgaW52ZXJzZXNxcnQodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMzICBpbnZlcnNlc3FydCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgIGludmVyc2VzcXJ0KHZlYzQgIHgpOyIpKTsKKworICAgICAgICAvLworICAg
ICAgICAvLyBDb21tb24gRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBhYnMoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBhYnModmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMz
ICBhYnModmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhYnMo
dmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNpZ24oZmxv
YXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzaWduKHZlYzIgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc2lnbih2ZWMzICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNpZ24odmVjNCAgeCk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGZsb29yKGZsb2F0IHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZmxvb3IodmVjMiAgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmbG9vcih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIGZsb29yKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBjZWlsKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgY2VpbCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGNlaWwodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBjZWlsKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBm
cmFjdChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGZyYWN0
KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZnJhY3QodmVj
MyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmcmFjdCh2ZWM0ICB4
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbW9kKGZsb2F0IHgsIGZs
b2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbW9kKHZlYzIgIHgs
IGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbW9kKHZlYzMg
IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbW9kKHZl
YzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbW9k
KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
bW9kKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgbW9kKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBtaW4oZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVjNCAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1heChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1heCh2ZWMyICB4LCBmbG9hdCB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1heCh2ZWMzICB4LCBmbG9hdCB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1heCh2ZWM0ICB4LCBmbG9h
dCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1heCh2ZWMyICB4LCB2
ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1heCh2ZWMzICB4
LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1heCh2ZWM0
ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgY2xh
bXAoZmxvYXQgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMiAgY2xhbXAodmVjMiAgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBt
YXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgY2xhbXAodmVjMyAg
eCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgY2xhbXAodmVjNCAgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2xhbXAodmVjMiAgeCwgdmVjMiAg
bWluVmFsLCB2ZWMyICBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgY2xhbXAodmVjMyAgeCwgdmVjMyAgbWluVmFsLCB2ZWMzICBtYXhWYWwpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2xhbXAodmVjNCAgeCwgdmVjNCAgbWluVmFsLCB2
ZWM0ICBtYXhWYWwpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtaXgo
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBtaXgodmVjMyAgeCwgdmVjMyAgeSwgZmxvYXQgYSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaXgodmVjNCAgeCwgdmVjNCAgeSwgZmxv
YXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaXgodmVjMiAgeCwg
dmVjMiAgeSwgdmVjMiAgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBt
aXgodmVjMyAgeCwgdmVjMyAgeSwgdmVjMyAgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBtaXgodmVjNCAgeCwgdmVjNCAgeSwgdmVjNCAgYSk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHN0ZXAoZmxvYXQgZWRnZSwgZmxvYXQgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzdGVwKHZlYzIgIGVkZ2UsIHZlYzIgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc3RlcCh2ZWMzICBlZGdlLCB2
ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHN0ZXAodmVjNCAg
ZWRnZSwgdmVjNCAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzdGVw
KGZsb2F0IGVkZ2UsIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgc3RlcChmbG9hdCBlZGdlLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImZsb2F0IHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBm
bG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNtb290aHN0ZXAo
dmVjMiAgZWRnZTAsIHZlYzIgIGVkZ2UxLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIHNtb290aHN0ZXAodmVjMyAgZWRnZTAsIHZlYzMgIGVkZ2UxLCB2ZWMz
ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNtb290aHN0ZXAodmVj
NCAgZWRnZTAsIHZlYzQgIGVkZ2UxLCB2ZWM0ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWMyICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNtb290aHN0ZXAoZmxvYXQg
ZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWM0ICB4KTsi
KSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2VvbWV0cmljIEZ1bmN0aW9ucy4KKyAgICAg
ICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKGZsb2F0IHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZlYzIgIHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZlYzMgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZlYzQgIHgpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZShmbG9hdCBwMCwgZmxvYXQgcDEp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UodmVjMiAgcDAs
IHZlYzIgIHAxKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRpc3RhbmNl
KHZlYzMgIHAwLCB2ZWMzICBwMSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBkaXN0YW5jZSh2ZWM0ICBwMCwgdmVjNCAgcDEpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBkb3QoZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjNCAgeCwgdmVjNCAgeSk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgY3Jvc3ModmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9ybWFsaXplKGZsb2F0IHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbm9ybWFsaXplKHZlYzIgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbm9ybWFsaXplKHZlYzMgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbm9ybWFsaXplKHZlYzQgIHgpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmYWNlZm9yd2FyZChmbG9hdCBOLCBmbG9h
dCBJLCBmbG9hdCBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGZh
Y2Vmb3J3YXJkKHZlYzIgIE4sIHZlYzIgIEksIHZlYzIgIE5yZWYpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMyAgZmFjZWZvcndhcmQodmVjMyAgTiwgdmVjMyAgSSwgdmVjMyAg
TnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmYWNlZm9yd2FyZCh2
ZWM0ICBOLCB2ZWM0ICBJLCB2ZWM0ICBOcmVmKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgcmVmbGVjdChmbG9hdCBJLCBmbG9hdCBOKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgIHJlZmxlY3QodmVjMiAgSSwgdmVjMiAgTik7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICByZWZsZWN0KHZlYzMgIEksIHZlYzMgIE4pOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmVmbGVjdCh2ZWM0ICBJLCB2ZWM0ICBO
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgcmVmcmFjdChmbG9hdCBJ
LCBmbG9hdCBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgcmVmcmFjdCh2ZWMyICBJLCB2ZWMyICBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMyAgcmVmcmFjdCh2ZWMzICBJLCB2ZWMzICBOLCBmbG9hdCBldGEp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmVmcmFjdCh2ZWM0ICBJLCB2
ZWM0ICBOLCBmbG9hdCBldGEpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBNYXRyaXgg
RnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQyIG1h
dHJpeENvbXBNdWx0KG1hdDIgeCwgbWF0MiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoIm1hdDMgbWF0cml4Q29tcE11bHQobWF0MyB4LCBtYXQzIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygibWF0NCBtYXRyaXhDb21wTXVsdChtYXQ0IHgsIG1hdDQgeSk7IikpOwor
CisgICAgICAgIC8vCisgICAgICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4KKyAg
ICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW4odmVjMiB4
LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbGVzc1RoYW4o
dmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVz
c1RoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMiBsZXNzVGhhbihpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWMzIGxlc3NUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4oaXZlYzQgeCwgaXZlYzQgeSk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuRXF1YWwodmVjMiB4LCB2ZWMy
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbGVzc1RoYW5FcXVhbCh2
ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNz
VGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzIgbGVzc1RoYW5FcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhhbkVxdWFsKGl2ZWM0IHgs
IGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBncmVhdGVy
VGhhbih2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
MyBncmVhdGVyVGhhbih2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjNCBncmVhdGVyVGhhbih2ZWM0IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW4oaXZlYzMgeCwgaXZl
YzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbihp
dmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIg
Z3JlYXRlclRoYW5FcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbkVxdWFsKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1YWwodmVjNCB4LCB2ZWM0
IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbkVx
dWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZl
YzMgZ3JlYXRlclRoYW5FcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzQgeCwgaXZlYzQgeSk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFsKHZlYzIgeCwgdmVjMiB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGVxdWFsKHZlYzMgeCwgdmVj
MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKHZlYzQgeCwg
dmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZXF1YWwoaXZl
YzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVh
bChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0
IGVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMiBlcXVhbChidmVjMiB4LCBidmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWMzIGVxdWFsKGJ2ZWMzIHgsIGJ2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzQgZXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKHZlYzMgeCwgdmVjMyB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKHZlYzQgeCwgdmVj
NCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90RXF1YWwoaXZl
YzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RF
cXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2
ZWM0IG5vdEVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMiBub3RFcXVhbChidmVjMiB4LCBidmVjMiB5KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKGJ2ZWMzIHgsIGJ2ZWMzIHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90RXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYW55KGJ2ZWMyIHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbnkoYnZlYzMgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVjNCB4KTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzIgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJib29sIGFsbChidmVjMyB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJvb2wgYWxsKGJ2ZWM0IHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
MiBub3QoYnZlYzIgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3Qo
YnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3QoYnZlYzQg
eCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zLgorICAg
ICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRChzYW1wbGVy
MkQgc2FtcGxlciwgdmVjMiBjb29yZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1w
bGVyLCB2ZWM0IGNvb3JkKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0
ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7CisKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm9pc2UgZnVuY3Rpb25zLgorICAgICAgICAvLworICAgIC8vCXMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMShmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBub2lzZTEodmVjMyAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IG5vaXNlMSh2ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyIG5vaXNlMihmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVj
MiBub2lzZTIodmVjMiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgbm9p
c2UyKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2
ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNlMyhmbG9h
dCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBub2lzZTModmVjMiAgeCk7
IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZlYzMgIHgpOyIpKTsK
KyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNlMyh2ZWM0ICB4KTsiKSk7CisKKyAg
ICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNChmbG9hdCB4KTsiKSk7CisgICAgLy8J
cy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjMiAgeCk7IikpOworICAgIC8vCXMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9u
cyBzZWVuIGJ5IHZlcnRleCBzaGFkZXJzIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rpb25z
VmVydGV4OworCisgICAgICAgIC8vCisgICAgICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisg
ICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgZnRyYW5zZm9ybSgpOyIp
KTsKKworICAgICAgICAvLworICAgICAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAg
Ly8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRMb2Qoc2FtcGxlcjJE
IHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMgY29v
cmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1
cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGxvZCk7Iikp
OworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmVMb2Qoc2FtcGxl
ckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgbG9kKTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlwZXMgZm9yIGJ1aWx0LWlu
IGZ1bmN0aW9ucyBzZWVuIGJ5IGZyYWdtZW50IHNoYWRlcnMgb25seS4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IEJ1aWx0
SW5GdW5jdGlvbnNGcmFnbWVudDsKKworICAgICAgICAvLworICAgICAgICAvLyBUZXh0dXJlIEZ1
bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0
dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1w
bGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBjb29yZCwgZmxv
YXQgYmlhcyk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1
YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworCisg
ICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeChmbG9hdCBwKTsiKSk7CisgICAgLy8J
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeCh2ZWMyICBwKTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgZEZkeCh2ZWMzICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgZEZkeCh2ZWM0ICBwKTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBkRmR5KGZsb2F0IHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBkRmR5KHZlYzIgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR5
KHZlYzMgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkRmR5KHZlYzQg
IHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmd2lkdGgoZmxvYXQg
cCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmd2lkdGgodmVjMyAgcCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmd2lkdGgodmVjNCAgcCk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAg
IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAvLyBTdGFuZGFyZCBV
bmlmb3JtcworICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAg
ICAgICBUU3RyaW5nJiBzID0gU3RhbmRhcmRVbmlmb3JtczsKKworICAgICAgICAvLworICAgICAg
ICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cgY29vcmRpbmF0ZXMKKyAgICAgICAgLy8KKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIHsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9hdCBuZWFyOyIpKTsgICAg
ICAgIC8vIG4KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiICAgIGhpZ2hwIGZsb2F0IGZhcjsi
KSk7ICAgICAgICAgLy8gZgorICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCIgICAgaGlnaHAgZmxv
YXQgZGlmZjsiKSk7ICAgICAgICAvLyBmIC0gbgorICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ9
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFy
YW1ldGVycyBnbF9EZXB0aFJhbmdlOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJc
biIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gRGVmYXVsdCBwcmVjaXNpb24gZm9yIHZlcnRleCBzaGFkZXJzLgor
ICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICBUU3Ry
aW5nJiBzID0gVmVydGV4RGVmYXVsdFByZWNpc2lvbjsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJwcmVjaXNpb24gaGlnaHAgaW50OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
cHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4i
KSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAg
IC8vCisgICAgICAgIC8vIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmcmFnbWVudCBzaGFkZXJzLgor
ICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgCisgICAg
ICAgIFRTdHJpbmcmIHMgPSBGcmFnbWVudERlZmF1bHRQcmVjaXNpb247CisgICAgICAgIAorICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gbWVkaXVtcCBpbnQ7IikpOworICAgICAg
ICAvLyBObyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgaW4gZnJhZ21lbnQgc2hhZGVycwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisKKyAgICBidWlsdEluU3Ry
aW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhGcmFnbWVudERlZmF1bHRQcmVjaXNpb24p
OworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKEJ1aWx0SW5G
dW5jdGlvbnMuY19zdHIoKSk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5w
dXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50KTsKKyAgICBidWlsdEluU3RyaW5nc1tF
U2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhTdGFuZGFyZFVuaWZvcm1zKTsKKyAgICAKKyAgICBi
dWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soVmVydGV4RGVmYXVsdFByZWNp
c2lvbik7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKEJ1aWx0
SW5GdW5jdGlvbnMpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFj
ayhCdWlsdEluRnVuY3Rpb25zVmVydGV4KTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVy
dGV4XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jtcyk7Cit9CisKK3ZvaWQgVEJ1aWx0SW5zOjpp
bml0aWFsaXplKGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgJnJlc291cmNlcykKK3sKKyAgICBUU3Ry
aW5nU3RyZWFtIGJ1aWx0SW5zOworCisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGNv
bnN0YW50cworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4QXR0cmlicyA9
ICIgPDwgcmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8
ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5t
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisKKyAgICBidWlsdElucyA8PCAiY29uc3Qg
aW50IGdsX01heFZhcnlpbmdWZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3Rv
cnMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA8
PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8
PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0
cyA9ICIgPDwgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBidWls
dElucyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJl
c291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKKyAgICBidWlsdElucyA8
PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMubWF4RHJhd0J1
ZmZlcnMgPDwgIjsiOworCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNo
X2JhY2soYnVpbHRJbnMuc3RyKCkpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhd
LnB1c2hfYmFjayhidWlsdElucy5zdHIoKSk7Cit9CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhF
U2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICAv
LworICAgIC8vIEZpcnN0LCBpbnNlcnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0
aGF0IGFyZSBub3QgaW4gCisgICAgLy8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KKyAgICAv
LworICAgIHN3aXRjaChsYW5ndWFnZSkgeworCisgICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6IHsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0
cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBF
YnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNp
bmcsIDEpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rh
dGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CisKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3Np
dGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRT
aXplLCAgIDEpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KworICAgIC8vCisgICAgLy8gTmV4dCwgaWRlbnRpZnkgd2hpY2ggYnVpbHQtaW5zIGZyb20gdGhl
IGFscmVhZHkgbG9hZGVkIGhlYWRlcnMgaGF2ZQorICAgIC8vIGEgbWFwcGluZyB0byBhbiBvcGVy
YXRvci4gIFRob3NlIHRoYXQgYXJlIG5vdCBpZGVudGlmaWVkIGFzIHN1Y2ggYXJlCisgICAgLy8g
ZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2
ZXJzdXMgYXMKKyAgICAvLyBvcGVyYXRpb25zLgorICAgIC8vCisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOwor
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVP
cE11bCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJlcXVhbCIsICAgICAg
ICAgICAgRU9wVmVjdG9yRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW4iLCAgICAgICAgIEVPcExlc3NUaGFuKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbiIsICAgICAgRU9wR3JlYXRl
clRoYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuRXF1YWwi
LCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJncmVhdGVyVGhhbkVxdWFsIiwgRU9wR3JlYXRlclRoYW5FcXVhbCk7CisgICAgCisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmFkaWFucyIsICAgICAgRU9wUmFkaWFucyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGVncmVlcyIsICAgICAgRU9wRGVncmVl
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic2luIiwgICAgICAgICAgRU9w
U2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjb3MiLCAgICAgICAgICBF
T3BDb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInRhbiIsICAgICAgICAg
IEVPcFRhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXNpbiIsICAgICAg
ICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWNvcyIsICAg
ICAgICAgRU9wQWNvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYXRhbiIs
ICAgICAgICAgRU9wQXRhbik7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJw
b3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImV4cDIiLCAgICAgICAgIEVPcEV4cDIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImxvZyIsICAgICAgICAgIEVPcExvZyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJsb2cyIiwgICAgICAgICBFT3BMb2cyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJzcXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAgICBFT3BBYnMpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAgICAgIEVPcFNpZ24pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWlsIiwgICAgICAgICBFT3BDZWls
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmcmFjdCIsICAgICAgICBFT3BG
cmFjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibW9kIiwgICAgICAgICAg
RU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaW4iLCAgICAgICAg
ICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1heCIsICAgICAg
ICAgIEVPcE1heCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2xhbXAiLCAg
ICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1peCIs
ICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3Rl
cCIsICAgICAgICAgRU9wU3RlcCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
c21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJsZW5ndGgiLCAgICAgICBFT3BMZW5ndGgpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImRpc3RhbmNlIiwgICAgIEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkb3QiLCAgICAgICAgICBFT3BEb3QpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNyb3NzIiwgICAgICAgIEVPcENyb3NzKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3JtYWxpemUiLCAgICBFT3BOb3JtYWxpemUp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZhY2Vmb3J3YXJkIiwgIEVPcEZh
Y2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZsZWN0Iiwg
ICAgICBFT3BSZWZsZWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZy
YWN0IiwgICAgICBFT3BSZWZyYWN0KTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7CisKKyAgICBzd2l0Y2gobGFuZ3VhZ2Up
CisgICAgeworICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFU2hMYW5nRnJhZ21lbnQ6CisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeCIsICAgICAgICAgRU9wRFBkeCk7ICAgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMg
ZXh0ZW5zaW9uCisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAg
ICAgICAgRU9wRFBkeSk7ICAgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9u
CisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZndpZHRoIiwgICAgICAgRU9w
RndpZHRoKTsgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBv
cnRlZCIpOworICAgIH0KK30KKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlIGxh
bmd1YWdlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBjb25zdCBUQnVpbHRJblJlc291cmNl
ICZyZXNvdXJjZXMpCit7CisgICAgLy8KKyAgICAvLyBGaXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lh
bCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAorICAgIC8vIHRoZSBidWlsdC1p
biBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKKworICAgIGNh
c2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEu
ICBUaGUgYXJyYXkgc2l6ZS4KKyAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBF
YnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBm
cmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLm1heERyYXdCdWZmZXJzKTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKworY29uc3QgY2hhciogR2V0UHJlcHJvY2Vz
c29yQnVpbHRpblN0cmluZygpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKlByZXByb2Nlc3Nv
ckJ1aWx0aW5TdHJpbmcgPSAiIjsKKworICAgIHJldHVybiBQcmVwcm9jZXNzb3JCdWlsdGluU3Ry
aW5nOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfSU5JVElBTElaRV9JTkNMVURFRF8KKyNk
ZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNpbmNsdWRlICJHTFNMQU5HL1Jlc291cmNl
TGltaXRzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKK3R5
cGVkZWYgVFZlY3RvcjxUU3RyaW5nPiBUQnVpbHRJblN0cmluZ3M7CisKK2NsYXNzIFRCdWlsdElu
cyB7CitwdWJsaWM6CisJUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2Nh
dG9yKQorCXZvaWQgaW5pdGlhbGl6ZSgpOworCXZvaWQgaW5pdGlhbGl6ZShjb25zdCBUQnVpbHRJ
blJlc291cmNlJiByZXNvdXJjZXMpOworCVRCdWlsdEluU3RyaW5ncyogZ2V0QnVpbHRJblN0cmlu
Z3MoKSB7IHJldHVybiBidWlsdEluU3RyaW5nczsgfQorcHJvdGVjdGVkOgorCVRCdWlsdEluU3Ry
aW5ncyBidWlsdEluU3RyaW5nc1tFU2hMYW5nQ291bnRdOworfTsKKwordm9pZCBJZGVudGlmeUJ1
aWx0SW5zKEVTaExhbmd1YWdlLCBUU3ltYm9sVGFibGUmKTsKK3ZvaWQgSWRlbnRpZnlCdWlsdElu
cyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiwgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVz
b3VyY2VzKTsKK2Jvb2wgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSogcmVzb3VyY2VzLCBUSW5mb1NpbmsmLCBUU3ltYm9sVGFibGUqLCBFU2hMYW5ndWFn
ZSBsYW5ndWFnZSA9IEVTaExhbmdDb3VudCk7Citib29sIEluaXRpYWxpemVTeW1ib2xUYWJsZShU
QnVpbHRJblN0cmluZ3MqIEJ1aWx0SW5TdHJpbmdzLCBFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVElu
Zm9TaW5rJiBpbmZvU2luaywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAqcmVzb3VyY2VzLCBUU3lt
Ym9sVGFibGUqKTsKK2NvbnN0IGNoYXIqIEdldFByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmcoKTsK
K2V4dGVybiAiQyIgaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7CitleHRlcm4gIkMiIGludCBG
aW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKKworI2VuZGlmIC8vIF9JTklUSUFMSVpFX0lOQ0xV
REVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9J
bml0aWFsaXplRGxsLmgiCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCitPU19UTFNJbmRleCBUaHJlYWRJbml0aWFsaXpl
SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0UHJvY2VzcygpCit7Cisg
ICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgewor
CQkvLworCQkvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50LgorCQkvLworICAgICAgICByZXR1cm4g
dHJ1ZTsKKwl9CisKKyAgICBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19BbGxvY1RMU0luZGV4
KCk7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gYWxs
b2NhdGUgVExTIGFyZWEgZm9yIGluaXQgZmxhZyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJ
fQorCisKKyAgICBpZiAoIUluaXRpYWxpemVQb29sSW5kZXgoKSkgeworICAgICAgICBhc3NlcnQo
MCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgaWYgKCFJbml0aWFsaXplUGFyc2VDb250
ZXh0SW5kZXgoKSkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVk
IHRvIGluaXRhbGl6ZSBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9
CisKKwlJbml0VGhyZWFkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJbml0VGhy
ZWFkKCkKK3sKKwkvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUtZW50cmFudAorCS8vCisg
ICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewor
CQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBQcm9jZXNzIGhhc24ndCBiZWVuIGluaXRhbGlz
ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICBpZiAoT1NfR2V0VExTVmFs
dWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
CUluaXRpYWxpemVHbG9iYWxQb29scygpOworCisJaWYgKCFJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghT1NfU2V0VExTVmFs
dWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTEpKSB7CisJCWFzc2VydCgwICYmICJJ
bml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisJfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBEZXRhY2hUaHJlYWQo
KQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6
ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
CS8vCisJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBhbmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBo
YXZlIGJlZW4gaW5pdGFsaXNlZC4KKwkvLworICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJ
bml0aWFsaXplSW5kZXgpICE9IDApIHsKKyAgICAgICAgaWYgKCFPU19TZXRUTFNWYWx1ZShUaHJl
YWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMCkpIHsKKwkJCWFzc2VydCgwICYmICJEZXRhY2hU
aHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxhZy4iKTsKKyAgICAgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKwkJfQorCisJCUZyZWVHbG9iYWxQb29scygpOworCisJCWlmICghRnJlZVBh
cnNlQ29udGV4dCgpKQorICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworCX0KKworICAgIHJl
dHVybiBzdWNjZXNzOworfQorCitib29sIERldGFjaFByb2Nlc3MoKQoreworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFM
SURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFNoRmluYWxpemUoKTsK
KworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsKKworCUZyZWVQb29sSW5kZXgoKTsKKwor
CWlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsK
KworICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJbml0aWFsaXplSW5kZXgpOworICAgIFRocmVh
ZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCisgICAgcmV0dXJuIHN1
Y2Nlc3M7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBfX0lOSVRJQUxJWkVETExf
SAorI2RlZmluZSBfX0lOSVRJQUxJWkVETExfSAorCisKKyNpbmNsdWRlICJjb21waWxlci9vc2lu
Y2x1ZGUuaCIKKworCitib29sIEluaXRQcm9jZXNzKCk7Citib29sIEluaXRUaHJlYWQoKTsKK2Jv
b2wgRGV0YWNoVGhyZWFkKCk7Citib29sIERldGFjaFByb2Nlc3MoKTsKKworI2VuZGlmIC8vIF9f
SU5JVElBTElaRURMTF9ICisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xv
YmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFs
cy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCisjZGVmaW5lIF9fSU5JVElBTEla
RV9HTE9CQUxTX0lOQ0xVREVEXworCit2b2lkIEluaXRpYWxpemVHbG9iYWxQb29scygpOwordm9p
ZCBGcmVlR2xvYmFsUG9vbHMoKTsKK2Jvb2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpOwordm9pZCBG
cmVlUG9vbEluZGV4KCk7CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURF
RF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCisjZGVmaW5lIF9fSU5J
VElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5j
bHVkZS5oIgorCitib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOworYm9vbCBJbml0
aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRleHQoKTsKK2Jv
b2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7CisKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRV9Q
QVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRy
YXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVy
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFRyYXZlcnNlIHRo
ZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCisvLyBjYWxsIGEgbm9kZSB0
eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCisvLyBEb25lIHJlY3Vyc2l2ZWx5
IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgorLy8gTm9kZSB0eXBlcyBj
YW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlzIDAsCisvLyBidXQgdGhl
aXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KKy8vIE5vZGVzIHdpdGggY2hpbGRy
ZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCisvLyBpZiBwcmVWaXNpdCBp
cyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uCisvLyByZXR1cm5zIGZh
bHNlLgorLy8KKy8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdodFRvTGVmdCBjb250cm9s
IHdoYXQgb3JkZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgorLy8KKworLy8KKy8vIFRyYXZl
cnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZvcndhcmQuLi4uCisvLwor
dm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlp
dC0+dmlzaXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQgVEludGVybUNvbnN0YW50VW5pb246OnRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWl0LT52aXNpdENvbnN0YW50VW5pb24o
dGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2RlLgorLy8KK3ZvaWQgVElu
dGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNp
dCA9IHRydWU7CisKKwkvLworCS8vIHZpc2l0IHRoZSBub2RlIGJlZm9yZSBjaGlsZHJlbiBpZiBw
cmUtdmlzaXRpbmcuCisJLy8KKwlpZihpdC0+cHJlVmlzaXQpCisJeworCQl2aXNpdCA9IGl0LT52
aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCS8vCisJLy8gVmlzaXQgdGhlIGNo
aWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCisJLy8KKwlpZih2aXNpdCkKKwl7CisJCWl0LT5p
bmNyZW1lbnREZXB0aCgpOworCisJCWlmKGl0LT5yaWdodFRvTGVmdCkgCisJCXsKKwkJCWlmKHJp
Z2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCQkKKwkJCWlmKGl0
LT5pblZpc2l0KQorCQkJeworCQkJCXZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRo
aXMpOworCQkJfQorCisJCQlpZih2aXNpdCAmJiBsZWZ0KQorCQkJeworCQkJCWxlZnQtPnRyYXZl
cnNlKGl0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKGxlZnQpCisJCQl7CisJCQkJ
bGVmdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQkJCisJCQlpZihpdC0+aW5WaXNpdCkKKwkJCXsK
KwkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKwkJCX0KKworCQkJ
aWYodmlzaXQgJiYgcmlnaHQpCisJCQl7CisJCQkJcmlnaHQtPnRyYXZlcnNlKGl0KTsKKwkJCX0K
KwkJfQorCisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCS8vCisJLy8gVmlzaXQgdGhl
IG5vZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5kIHRoZSB0cmF2ZXJzYWwK
KwkvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgorCS8vCisJaWYodmlzaXQgJiYgaXQtPnBv
c3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdEJpbmFyeShQb3N0VmlzaXQsIHRoaXMpOworCX0KK30K
KworLy8KKy8vIFRyYXZlcnNlIGEgdW5hcnkgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5
IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1VbmFyeTo6dHJhdmVyc2UoVEludGVy
bVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwlpZiAoaXQtPnByZVZp
c2l0KQorCQl2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0aGlzKTsKKworCWlmICh2
aXNpdCkgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJb3BlcmFuZC0+dHJhdmVyc2UoaXQp
OworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisJCisJaWYgKHZpc2l0ICYmIGl0LT5wb3N0
VmlzaXQpCisJCWl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKKy8vCisvLyBU
cmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUg
YXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCQorCWlmKGl0LT5wcmVWaXNp
dCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKFByZVZpc2l0LCB0aGlzKTsKKwl9
CisJCisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+
cmlnaHRUb0xlZnQpCisJCXsKKwkJCWZvcihUSW50ZXJtU2VxdWVuY2U6OnJldmVyc2VfaXRlcmF0
b3Igc2l0ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5yZW5kKCk7IHNpdCsr
KQorCQkJeworCQkJCSgqc2l0KS0+dHJhdmVyc2UoaXQpOworCisJCQkJaWYodmlzaXQgJiYgaXQt
PmluVmlzaXQpCisJCQkJeworCQkJCQlpZigqc2l0ICE9IHNlcXVlbmNlLmZyb250KCkpCisJCQkJ
CXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRoaXMpOworCQkJ
CQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZm9yKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgp
OyBzaXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZlcnNlKGl0KTsKKworCQkJCWlmKHZpc2l0
ICYmIGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYoKnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkp
CisJCQkJCXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQsIHRoaXMp
OworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCQorCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsK
Kwl9CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCXsKKwkJaXQtPnZpc2l0QWdncmVn
YXRlKFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisvLworLy8gVHJhdmVyc2UgYSBzZWxlY3Rp
b24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2
b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQorewor
CWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+
dmlzaXRTZWxlY3Rpb24oUHJlVmlzaXQsIHRoaXMpOworCQorCWlmICh2aXNpdCkgeworCQlpdC0+
aW5jcmVtZW50RGVwdGgoKTsKKwkJaWYgKGl0LT5yaWdodFRvTGVmdCkgeworCQkJaWYgKGZhbHNl
QmxvY2spCisJCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOworCQkJaWYgKHRydWVCbG9jaykK
KwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWNvbmRpdGlvbi0+dHJhdmVyc2UoaXQp
OworCQl9IGVsc2UgeworCQkJY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7CisJCQlpZiAodHJ1ZUJs
b2NrKQorCQkJCXRydWVCbG9jay0+dHJhdmVyc2UoaXQpOworCQkJaWYgKGZhbHNlQmxvY2spCisJ
CQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOworCQl9CisJCWl0LT5kZWNyZW1lbnREZXB0aCgp
OworCX0KKworCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRTZWxlY3Rp
b24oUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8vIFRyYXZlcnNlIGEgbG9vcCBub2RlLiAg
U2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgorLy8KK3ZvaWQgVEludGVy
bUxvb3A6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0
cnVlOworCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKKwl9CisJCisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVw
dGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpCisJCXsKKwkJCWlmKHRlcm1pbmFsKQorCQkJ
eworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJCQl9CisKKwkJCWlmKGJvZHkpCisJCQl7
CisJCQkJYm9keS0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJCQlpZih0ZXN0KQorCQkJeworCQkJ
CXRlc3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKHRlc3Qp
CisJCQl7CisJCQkJdGVzdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJCQlpZihib2R5KQorCQkJ
eworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYodGVybWluYWwpCisJCQl7
CisJCQkJdGVybWluYWwtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCisJCWl0LT5kZWNyZW1l
bnREZXB0aCgpOworCX0KKworCWlmKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJeworCQlpdC0+
dmlzaXRMb29wKFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisvLworLy8gVHJhdmVyc2UgYSBi
cmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8v
Cit2b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQorewor
CWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+
dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworCQorCWlmICh2aXNpdCAmJiBleHByZXNzaW9u
KSB7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCQlleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZp
c2l0KQorCQlpdC0+dmlzaXRCcmFuY2goUG9zdFZpc2l0LCB0aGlzKTsKK30KKwpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDA1IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbi4KKy8vCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor
CisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9RdWFsaWZpZXJBbGl2ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIK
KworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0
YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkp
OworCitUUHJlY2lzaW9uIEdldEhpZ2hlc3RQcmVjaXNpb24oIFRQcmVjaXNpb24gbGVmdCwgVFBy
ZWNpc2lvbiByaWdodCApeworICAgIHJldHVybiBsZWZ0ID4gcmlnaHQgPyBsZWZ0IDogcmlnaHQ7
Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBh
cmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorLy8gVGhl
c2UgZnVuY3Rpb25zIGFyZSBub3QgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMuCisvLyBU
aGV5IGFyZSBjYWxsZWQgZnJvbSBwYXJzZXIgcHJvZHVjdGlvbnMuCisvLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworLy8KKy8vIEFkZCBhIHRlcm1pbmFsIG5vZGUgZm9yIGFuIGlkZW50aWZpZXIg
aW4gYW4gZXhwcmVzc2lvbi4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJ
bnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbChpbnQgaWQsIGNvbnN0IFRTdHJp
bmcmIG5hbWUsIGNvbnN0IFRUeXBlJiB0eXBlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVElu
dGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBuYW1lLCB0eXBlKTsKKyAg
ICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBD
b25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRvZXMgYSBiaW5hcnkgb3Bl
cmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8K
K1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5l
LCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgbGVmdC0+
Z2V0VHlwZSgpLmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNWZWN0b3IoKSB8fCBsZWZ0
LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IGxlZnQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGxl
ZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzVmVjdG9yKCkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2FzZSBFT3BTdWI6CisgICAgICAg
IGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGxlZnQtPmdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEZpcnN0IHRy
eSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisK
KyAgICBpZiAoIShsZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkgJiYgcmlnaHQtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKSkpIHsKKyAgICAgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZl
cnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOworICAgICAgICBpZiAoY2hpbGQpCisg
ICAgICAgICAgICByaWdodCA9IGNoaWxkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNo
aWxkID0gYWRkQ29udmVyc2lvbihvcCwgcmlnaHQtPmdldFR5cGUoKSwgbGVmdCk7CisgICAgICAg
ICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICAgICAgbGVmdCA9IGNoaWxkOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIE5lZWQgYSBuZXcg
bm9kZSBob2xkaW5nIHRoaW5ncyB0b2dldGhlciB0aGVuLiAgTWFrZQorICAgIC8vIG9uZSBhbmQg
cHJvbW90ZSBpdCB0byB0aGUgcmlnaHQgdHlwZS4KKyAgICAvLworICAgIFRJbnRlcm1CaW5hcnkq
IG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7CisgICAgaWYgKGxpbmUgPT0gMCkKKyAgICAg
ICAgbGluZSA9IHJpZ2h0LT5nZXRMaW5lKCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKwor
ICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9kZS0+c2V0UmlnaHQocmlnaHQpOworICAg
IGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENvbnN0YW50
ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKGxlZnRUZW1wQ29uc3Rh
bnQpCisgICAgICAgIGxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKKworICAgIGlmIChyaWdodFRlbXBDb25zdGFudCkKKyAgICAgICAgcmlnaHRUZW1wQ29uc3Rh
bnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAvLworICAgIC8vIFNlZSBp
ZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8KKworICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWRSZXR1cm5Ob2RlID0gMDsKKyAgICBpZiAoIGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1w
Q29uc3RhbnQpIHsKKyAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+
Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworCisgICAg
ICAgIGlmICh0eXBlZFJldHVybk5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHlwZWRSZXR1cm5O
b2RlOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28g
bm9kZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50LgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5v
ZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRBc3NpZ24oVE9wZXJhdG9y
IG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2Mg
bGluZSkKK3sKKyAgICAvLworICAgIC8vIExpa2UgYWRkaW5nIGJpbmFyeSBtYXRoLCBleGNlcHQg
dGhlIGNvbnZlcnNpb24gY2FuIG9ubHkgZ28KKyAgICAvLyBmcm9tIHJpZ2h0IHRvIGxlZnQuCisg
ICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOwor
ICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSBsZWZ0LT5nZXRMaW5lKCk7CisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252
ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKKyAgICBpZiAoY2hpbGQgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOworICAgIG5vZGUt
PnNldFJpZ2h0KGNoaWxkKTsKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENvbm5lY3Qg
dHdvIG5vZGVzIHRocm91Z2ggYW4gaW5kZXggb3BlcmF0b3IsIHdoZXJlIHRoZSBsZWZ0IG5vZGUg
aXMgdGhlIGJhc2UKKy8vIG9mIGFuIGFycmF5IG9yIHN0cnVjdCwgYW5kIHRoZSByaWdodCBub2Rl
IGlzIGEgZGlyZWN0IG9yIGluZGlyZWN0IG9mZnNldC4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRl
ZCBub2RlLgorLy8gVGhlIGNhbGxlciBzaG91bGQgc2V0IHRoZSB0eXBlIG9mIHRoZSByZXR1cm5l
ZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkSW5kZXgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1UeXBlZCogaW5kZXgsIFRTb3VyY2VM
b2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJbnRlcm1CaW5hcnko
b3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSBpbmRleC0+Z2V0TGluZSgp
OworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0TGVmdChiYXNlKTsKKyAg
ICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAvLyBjYWxsZXIgc2hvdWxkIHNldCB0aGUg
dHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQgb25lIG5vZGUgYXMgdGhl
IHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0ZXMgb24uCisvLworLy8gUmV0dXJucyB0
aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIFRTb3VyY2VMb2MgbGlu
ZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICBUSW50ZXJtVW5hcnkqIG5vZGU7
CisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGNoaWxkTm9kZS0+Z2V0QXNUeXBlZCgpOworCisg
ICAgaWYgKGNoaWxkID09IDApIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCAiQmFkIHR5cGUgaW4gQWRkVW5hcnlNYXRoIiwgbGluZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBF
T3BMb2dpY2FsTm90OgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgY2hpbGQt
PmdldFR5cGUoKS5pc0FycmF5KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJl
SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICAgIGNhc2Ug
RU9wUHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAg
aWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGNoaWxk
LT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERvIHdlIG5lZWQgdG8g
cHJvbW90ZSB0aGUgb3BlcmFuZD8KKyAgICAvLworICAgIC8vIE5vdGU6IEltcGxpY2l0IHByb21v
dGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgorICAgIC8vCisgICAgVEJhc2lj
VHlwZSBuZXdUeXBlID0gRWJ0Vm9pZDsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SW50OiAgIG5ld1R5cGUgPSBFYnRJbnQ7ICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0Qm9vbDogIG5ld1R5cGUgPSBFYnRCb29sOyAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG5ld1R5cGUgPSBFYnRGbG9hdDsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIGlmIChuZXdUeXBlICE9IEVidFZvaWQp
IHsKKyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBUVHlwZShuZXdUeXBlLCBjaGls
ZC0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwKKyAgICAgICAgICAgIGNoaWxkLT5nZXRO
b21pbmFsU2l6ZSgpLAorICAgICAgICAgICAgY2hpbGQtPmlzTWF0cml4KCksCisgICAgICAgICAg
ICBjaGlsZC0+aXNBcnJheSgpKSwKKyAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgaWYgKGNo
aWxkID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8v
IEZvciBjb25zdHJ1Y3RvcnMsIHdlIGFyZSBub3cgZG9uZSwgaXQncyBhbGwgaW4gdGhlIGNvbnZl
cnNpb24uCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgIH0KKworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjaGlsZFRlbXBD
b25zdGFudCA9IDA7CisgICAgaWYgKGNoaWxkLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAg
ICAgY2hpbGRUZW1wQ29uc3RhbnQgPSBjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAg
ICAvLworICAgIC8vIE1ha2UgYSBuZXcgbm9kZSBmb3IgdGhlIG9wZXJhdG9yLgorICAgIC8vCisg
ICAgbm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAg
ICAgIGxpbmUgPSBjaGlsZC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7Cisg
ICAgbm9kZS0+c2V0T3BlcmFuZChjaGlsZCk7CisKKyAgICBpZiAoISBub2RlLT5wcm9tb3RlKGlu
Zm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoY2hpbGRUZW1wQ29uc3RhbnQp
ICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbmV3Q2hpbGQgPSBjaGlsZFRlbXBDb25zdGFudC0+
Zm9sZChvcCwgMCwgaW5mb1NpbmspOworCisgICAgICAgIGlmIChuZXdDaGlsZCkKKyAgICAgICAg
ICAgIHJldHVybiBuZXdDaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8K
Ky8vIFRoaXMgaXMgdGhlIHNhZmUgd2F5IHRvIGNoYW5nZSB0aGUgb3BlcmF0b3Igb24gYW4gYWdn
cmVnYXRlLCBhcyBpdAorLy8gZG9lcyBsb3RzIG9mIGVycm9yIGNoZWNraW5nIGFuZCBmaXhpbmcu
ICBFc3BlY2lhbGx5IGZvciBlc3RhYmxpc2hpbmcKKy8vIGEgZnVuY3Rpb24gY2FsbCdzIG9wZXJh
dGlvbiBvbiBpdCdzIHNldCBvZiBwYXJhbWV0ZXJzLiAgU2VxdWVuY2VzCisvLyBvZiBpbnN0cnVj
dGlvbnMgYXJlIGFsc28gYWdncmVnYXRlcywgYnV0IHRoZXkganVzdCBkaXJlbmN0bHkgc2V0Cisv
LyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3Jl
Z2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25lIHBhc3NlZCBpbiBpZgorLy8gaXQgd2Fz
IGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlh
dGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBUT3BlcmF0b3Igb3As
IFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dOb2RlOworCisg
ICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhZ2dyZWdhdGUuICBJZiBub3QgdHVy
biBpdCBpbnRvIG9uZS4KKyAgICAvLworICAgIGlmIChub2RlKSB7CisgICAgICAgIGFnZ05vZGUg
PSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICBpZiAoYWdnTm9kZSA9PSAwIHx8IGFn
Z05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIE1ha2UgYW4gYWdncmVnYXRlIGNvbnRhaW5pbmcgdGhpcyBub2RlLgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworICAgICAg
ICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobm9kZSk7CisgICAgICAgICAg
ICBpZiAobGluZSA9PSAwKQorICAgICAgICAgICAgICAgIGxpbmUgPSBub2RlLT5nZXRMaW5lKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdn
cmVnYXRlKCk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgb3BlcmF0b3IuCisgICAgLy8KKyAg
ICBhZ2dOb2RlLT5zZXRPcGVyYXRvcihvcCk7CisgICAgaWYgKGxpbmUgIT0gMCkKKyAgICAgICAg
YWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBhZ2dOb2RlOworfQorCisvLwor
Ly8gQ29udmVydCBvbmUgdHlwZSB0byBhbm90aGVyLgorLy8KKy8vIFJldHVybnMgdGhlIG5vZGUg
cmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uLCB3aGljaCBjb3VsZCBiZSB0aGUgc2FtZQorLy8g
bm9kZSBwYXNzZWQgaW4gaWYgbm8gY29udmVyc2lvbiB3YXMgbmVlZGVkLgorLy8KKy8vIFJldHVy
biAwIGlmIGEgY29udmVyc2lvbiBjYW4ndCBiZSBkb25lLgorLy8KK1RJbnRlcm1UeXBlZCogVElu
dGVybWVkaWF0ZTo6YWRkQ29udmVyc2lvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlJiB0eXBl
LCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgLy8KKyAgICAvLyBEb2VzIHRoZSBiYXNlIHR5
cGUgYWxsb3cgb3BlcmF0aW9uPworICAgIC8vCisgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5
cGUoKSkgeworICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
OgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3RoZXJ3aXNl
LCBpZiB0eXBlcyBhcmUgaWRlbnRpY2FsLCBubyBwcm9ibGVtCisgICAgLy8KKyAgICBpZiAodHlw
ZSA9PSBub2RlLT5nZXRUeXBlKCkpCisgICAgICAgIHJldHVybiBub2RlOworCisgICAgLy8KKyAg
ICAvLyBJZiBvbmUncyBhIHN0cnVjdHVyZSwgdGhlbiBubyBjb252ZXJzaW9ucy4KKyAgICAvLwor
ICAgIGlmICh0eXBlLmdldFN0cnVjdCgpIHx8IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLworICAgIC8vIElmIG9uZSdzIGFuIGFycmF5LCB0
aGVuIG5vIGNvbnZlcnNpb25zLgorICAgIC8vCisgICAgaWYgKHR5cGUuaXNBcnJheSgpIHx8IG5v
ZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVEJhc2lj
VHlwZSBwcm9tb3RlVG87CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIEV4cGxpY2l0IGNvbnZlcnNpb25zCisgICAgICAgIC8vCisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0Qm9vbDoKKyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEJvb2w7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgICAgIHBy
b21vdGVUbyA9IEVidEZsb2F0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SW50OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0SW50OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpICE9IG5v
ZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaXplIGFuZCBzdHJ1Y3R1cmUgY291bGQg
c3RpbGwgZGlmZmVyLCBidXQgdGhhdCdzCisgICAgICAgICAgICAvLyBoYW5kbGVkIGJ5IG9wZXJh
dG9yIHByb21vdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
KyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKKworICAgICAg
ICByZXR1cm4gKHByb21vdGVDb25zdGFudFVuaW9uKHByb21vdGVUbywgbm9kZS0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpKTsKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vCisgICAgICAgIC8vIEFk
ZCBhIG5ldyBuZXdOb2RlIGZvciB0aGUgY29udmVyc2lvbi4KKyAgICAgICAgLy8KKyAgICAgICAg
VEludGVybVVuYXJ5KiBuZXdOb2RlID0gMDsKKworICAgICAgICBUT3BlcmF0b3IgbmV3T3AgPSBF
T3BOdWxsOworICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgeworICAgICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRv
RmxvYXQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgbmV3T3Ag
PSBFT3BDb252Qm9vbFRvRmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRvQm9vbDsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3AgPSBFT3BDb252RmxvYXRUb0Jvb2w7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHBy
b21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09w
ID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0ludDsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQgcHJvbW90aW9uIG5vZGUiLCBub2RlLT5n
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJCYWQgcHJvbW90aW9uIHR5cGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5v
ZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCks
IG5vZGUtPmlzTWF0cml4KCksIG5vZGUtPmlzQXJyYXkoKSk7CisgICAgICAgIG5ld05vZGUgPSBu
ZXcgVEludGVybVVuYXJ5KG5ld09wLCB0eXBlKTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShu
b2RlLT5nZXRMaW5lKCkpOworICAgICAgICBuZXdOb2RlLT5zZXRPcGVyYW5kKG5vZGUpOworCisg
ICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KK30KKworLy8KKy8vIFNhZmUgd2F5IHRvIGNv
bWJpbmUgdHdvIG5vZGVzIGludG8gYW4gYWdncmVnYXRlLiAgV29ya3Mgd2l0aCBudWxsIHBvaW50
ZXJzLAorLy8gYSBub2RlIHRoYXQncyBub3QgYSBhZ2dyZWdhdGUgeWV0LCBldGMuCisvLworLy8g
UmV0dXJucyB0aGUgcmVzdWx0aW5nIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBm
b3IKKy8vIGJvdGggZXhpc3Rpbmcgbm9kZXMuCisvLworVEludGVybUFnZ3JlZ2F0ZSogVEludGVy
bWVkaWF0ZTo6Z3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUqIHJp
Z2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKGxlZnQgPT0gMCAmJiByaWdodCA9PSAw
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSAw
OworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2RlID0gbGVmdC0+Z2V0QXNBZ2dyZWdhdGUo
KTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsKSB7Cisg
ICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgaWYgKGxlZnQp
CisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhsZWZ0KTsKKyAg
ICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVz
aF9iYWNrKHJpZ2h0KTsKKworICAgIGlmIChsaW5lICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNl
dExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIFR1cm4gYW4g
ZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4KKy8vCisvLyBSZXR1cm5zIGFuIGFnZ3Jl
Z2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IgdGhlIGV4aXN0aW5nIG5vZGUuCisvLwor
VEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9k
ZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGlmIChub2RlID09IDApCisgICAgICAg
IHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJt
QWdncmVnYXRlOworICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOwor
CisgICAgaWYgKGxpbmUgIT0gMCkKKyAgICAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKyAg
ICBlbHNlCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKKworICAg
IHJldHVybiBhZ2dOb2RlOworfQorCisvLworLy8gRm9yICJpZiIgdGVzdCBub2Rlcy4gIFRoZXJl
IGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCisvLyBhIHRydWUgcGF0aCwgYW5kIGEg
ZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIGluIHRoZQorLy8gbm9kZVBhaXIuCisvLwor
Ly8gUmV0dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3JlYXRlZC4KKy8vCitUSW50ZXJtTm9kZSog
VEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5v
ZGVQYWlyIG5vZGVQYWlyLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBGb3Ig
Y29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMsIHBydW5lIHRoZSBjb2RlIGFuZAorICAg
IC8vIHRlc3Qgbm93LgorICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNUeXBlZCgpICYmIGNv
bmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsKKyAgICAgICAgaWYgKGNv
bmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUxOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbm9kZVBhaXIubm9kZTI7CisgICAgfQor
CisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5ldyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQs
IG5vZGVQYWlyLm5vZGUxLCBub2RlUGFpci5ub2RlMik7CisgICAgbm9kZS0+c2V0TGluZShsaW5l
KTsKKworICAgIHJldHVybiBub2RlOworfQorCisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291
cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICBUSW50ZXJt
VHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7
CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcGVyYXRvcihF
T3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBl
KCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiBjb21tYUFnZ3JlZ2F0ZTsKKyAg
ICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5vZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNo
aWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBwYXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAg
VGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBhcyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgor
Ly8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQsIG9yIDAgaWYgb25lIGNv
dWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlv
bihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlw
ZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICAvLworICAgIC8vIEdldCBj
b21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENv
bnZlcnNpb24oRU9wU2VxdWVuY2UsIHRydWVCbG9jay0+Z2V0VHlwZSgpLCBmYWxzZUJsb2NrKTsK
KyAgICBpZiAoY2hpbGQpCisgICAgICAgIGZhbHNlQmxvY2sgPSBjaGlsZDsKKyAgICBlbHNlIHsK
KyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCBmYWxzZUJsb2NrLT5n
ZXRUeXBlKCksIHRydWVCbG9jayk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgIHRy
dWVCbG9jayA9IGNoaWxkOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICAvLworICAgIC8vIFNlZSBpZiBhbGwgdGhlIG9wZXJhbmRzIGFyZSBjb25zdGFu
dCwgdGhlbiBmb2xkIGl0IG90aGVyd2lzZSBub3QuCisgICAgLy8KKworICAgIGlmIChjb25kLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSAmJiB0cnVlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpICYm
IGZhbHNlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZUJsb2NrOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2VCbG9jazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE1ha2UgYSBzZWxl
Y3Rpb24gbm9kZS4KKyAgICAvLworICAgIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUgPSBuZXcgVElu
dGVybVNlbGVjdGlvbihjb25kLCB0cnVlQmxvY2ssIGZhbHNlQmxvY2ssIHRydWVCbG9jay0+Z2V0
VHlwZSgpKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9
CisKKy8vCisvLyBDb25zdGFudCB0ZXJtaW5hbCBub2Rlcy4gIEhhcyBhIHVuaW9uIHRoYXQgY29u
dGFpbnMgYm9vbCwgZmxvYXQgb3IgaW50IGNvbnN0YW50cworLy8KKy8vIFJldHVybnMgdGhlIGNv
bnN0YW50IHVuaW9uIG5vZGUgY3JlYXRlZC4KKy8vCisKK1RJbnRlcm1Db25zdGFudFVuaW9uKiBU
SW50ZXJtZWRpYXRlOjphZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXlQ
b2ludGVyLCBjb25zdCBUVHlwZSYgdCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHVuaW9uQXJyYXlQ
b2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkU3dpenpsZShUVmVjdG9yRmll
bGRzJiBmaWVsZHMsIFRTb3VyY2VMb2MgbGluZSkKK3sKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUq
IG5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BTZXF1ZW5jZSk7CisKKyAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdEludE5vZGU7Cisg
ICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IG5vZGUtPmdldFNlcXVlbmNlKCk7
CisgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzW2ld
KTsKKyAgICAgICAgY29uc3RJbnROb2RlID0gYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBsaW5lKTsKKyAgICAgICAgc2Vx
dWVuY2VWZWN0b3IucHVzaF9iYWNrKGNvbnN0SW50Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKKy8vCisvLyBDcmVhdGUgbG9vcCBub2Rlcy4KKy8vCitUSW50ZXJtTm9kZSog
VEludGVybWVkaWF0ZTo6YWRkTG9vcChUSW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGJv
ZHksIFRJbnRlcm1UeXBlZCogdGVzdCwgVEludGVybVR5cGVkKiB0ZXJtaW5hbCwgYm9vbCB0ZXN0
Rmlyc3QsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtTm9kZSogbm9kZSA9IG5ldyBU
SW50ZXJtTG9vcChpbml0LCBib2R5LCB0ZXN0LCB0ZXJtaW5hbCwgdGVzdEZpcnN0KTsKKyAgICBu
b2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBBZGQg
YnJhbmNoZXMuCisvLworVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRP
cGVyYXRvciBicmFuY2hPcCwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIHJldHVybiBhZGRCcmFu
Y2goYnJhbmNoT3AsIDAsIGxpbmUpOworfQorCitUSW50ZXJtQnJhbmNoKiBUSW50ZXJtZWRpYXRl
OjphZGRCcmFuY2goVE9wZXJhdG9yIGJyYW5jaE9wLCBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb24s
IFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQnJhbmNoKiBub2RlID0gbmV3IFRJbnRl
cm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOworICAgIG5vZGUtPnNldExpbmUobGluZSk7
CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMgdG8gYmUgZXhlY3V0ZWQg
b25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9wIGJ5IHRoZSBwYXJzaW5nCisvLyBwcm9j
ZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MoVEludGVybU5vZGUqIHJv
b3QsIEVTaExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGlmIChyb290ID09IDApCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgZmluaXNoIG9mZiB0aGUgdG9w
IGxldmVsIHNlcXVlbmNlLCBpZiBhbnkKKyAgICAvLworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z1Jvb3QgPSByb290LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmIChhZ2dSb290ICYmIGFnZ1Jv
b3QtPmdldE9wKCkgPT0gRU9wTnVsbCkKKyAgICAgICAgYWdnUm9vdC0+c2V0T3BlcmF0b3IoRU9w
U2VxdWVuY2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGlzIGRlbGV0ZXMg
dGhlIHRyZWUuCisvLwordm9pZCBUSW50ZXJtZWRpYXRlOjpyZW1vdmUoVEludGVybU5vZGUqIHJv
b3QpCit7CisgICAgaWYgKHJvb3QpCisgICAgICAgIFJlbW92ZUFsbFRyZWVOb2Rlcyhyb290KTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8KKy8vIE1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIG5vZGVzIHVzZWQg
Zm9yIGJ1aWxkaW5nIHRoZSB0cmVlLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIFNheSB3aGV0aGVy
IG9yIG5vdCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxl
LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiBzdGF0ZSBpcyBtb2RpZmllZC4KKy8vCitib29sIFRJ
bnRlcm1PcGVyYXRvcjo6bW9kaWZpZXNTdGF0ZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUG9zdERl
Y3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BB
ZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIEVPcE11
bEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKKy8vCisvLyByZXR1cm5zIHRydWUgaWYgdGhlIG9wZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhl
IGNvbnN0cnVjdG9ycworLy8KK2Jvb2wgVEludGVybU9wZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdFZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMyOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorLy8KKy8vIE1ha2Ugc3VyZSB0aGUgdHlwZSBvZiBhIHVuYXJ5IG9wZXJhdG9yIGlzIGFwcHJv
cHJpYXRlIGZvciBpdHMKKy8vIGNvbWJpbmF0aW9uIG9mIG9wZXJhdGlvbiBhbmQgb3BlcmFuZCB0
eXBlLgorLy8KKy8vIFJldHVybnMgZmFsc2UgaW4gbm90aGluZyBtYWtlcyBzZW5zZS4KKy8vCiti
b29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQoreworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgorICAgICAgICAgICAgaWYgKG9wZXJhbmQt
PmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAgICAg
IGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50Ogor
ICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1l
bnQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgLy8gb3BlcmF0b3JzIGZvciBidWlsdC1pbnMgYXJlIGFscmVhZHkgdHlwZSBjaGVj
a2VkIGFnYWluc3QgdGhlaXIgcHJvdG90eXBlCisgICAgICAgIGNhc2UgRU9wQW55OgorICAgICAg
ICBjYXNlIEVPcEFsbDoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc2V0VHlwZShvcGVyYW5kLT5nZXRUeXBlKCkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUg
cmVzdWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcworLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRo
ZSBjb3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgorLy8KKy8vIFJldHVybnMgZmFsc2UgaWYg
b3BlcmF0b3IgY2FuJ3Qgd29yayBvbiBvcGVyYW5kcy4KKy8vCitib29sIFRJbnRlcm1CaW5hcnk6
OnByb21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykKK3sKKyAgICBpbnQgc2l6ZSA9IGxlZnQtPmdl
dE5vbWluYWxTaXplKCk7CisgICAgaWYgKHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpID4gc2l6ZSkK
KyAgICAgICAgc2l6ZSA9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpOworCisgICAgVEJhc2ljVHlw
ZSB0eXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7CisKKyAgICAvLworICAgIC8vIEFycmF5cyBo
YXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCisgICAgLy8KKyAgICBpZiAoKGxlZnQtPmlzQXJyYXko
KSB8fCByaWdodC0+aXNBcnJheSgpKSAmJiAobGVmdC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRU
eXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIEJhc2UgYXNz
dW1wdGlvbjogIGp1c3QgbWFrZSB0aGUgdHlwZSB0aGUgc2FtZSBhcyB0aGUgbGVmdAorICAgIC8v
IG9wZXJhbmQuICBUaGVuIG9ubHkgZGV2aWF0aW9ucyBmcm9tIHRoaXMgbmVlZCBiZSBjb2RlZC4K
KyAgICAvLworICAgIHNldFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKKworICAgIFRQcmVjaXNpb24g
aGlnaGVzdFByZWNpc2lvbiA9IEdldEhpZ2hlc3RQcmVjaXNpb24obGVmdC0+Z2V0UHJlY2lzaW9u
KCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7CisgICAgZ2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdl
UHJlY2lzaW9uKGhpZ2hlc3RQcmVjaXNpb24pOworCisgICAgLy8KKyAgICAvLyBBcnJheSBvcGVy
YXRpb25zLgorICAgIC8vCisgICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkgeworCisgICAgICAgIHN3
aXRjaCAob3ApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFByb21vdGUgdG8g
Y29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgor
ICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IGFycmF5IGluZm9ybWF0aW9uLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wQXNzaWduOgorICAgICAgICAgICAgY2Fz
ZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgICAgIGdldFR5cGVQb2ludGVyKCktPnNldEFy
cmF5U2l6ZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpOworICAgICAgICAgICAgICAg
IGdldFR5cGVQb2ludGVyKCktPnNldEFycmF5SW5mb3JtYXRpb25UeXBlKGxlZnQtPmdldFR5cGUo
KS5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFs
bCBzY2FsYXJzLiAgQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVt
b3ZlZCEKKyAgICAvLworICAgIGlmIChzaXplID09IDEpIHsKKworICAgICAgICBzd2l0Y2ggKG9w
KSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlv
bmFsCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAg
ICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAg
ICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAg
ICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIGFuZCBP
ciBvcGVyYXRlIG9uIGNvbmRpdGlvbmFscworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgaGF2ZSBtYXRjaGluZyB0eXBlcworICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmdl
dEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSB8fAorICAgICAgICAgICAgICAg
ICAgICBsZWZ0LT5pc01hdHJpeCgpICAgICAhPSByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Cisg
ICAgLy8KKyAgICBpZiAoIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gc2l6ZSAmJiAgbGVmdC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSAxIHx8CisgICAgICAgIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgp
ICE9IHNpemUgJiYgcmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8KKyAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJp
bmVkPworICAgIC8vCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcE11bDoKKyAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4OworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAgICAg
ICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFy
eSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BNYXRyaXhUaW1lc1ZlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0
eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBv
cCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OworICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+
aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6
ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Ik1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11
bEFzc2lnbjoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNN
YXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAg
ICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFy
aWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3Io
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlz
TWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOworICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+
aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoISBsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhp
Z2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1pc3NpbmcgZWxzZXMiLCBnZXRMaW5l
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BJ
bml0aWFsaXplOgorICAgICAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmln
aHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICBj
YXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgIGNhc2UgRU9wQWRkQXNz
aWduOgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3Np
Z246CisgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3Io
KSB8fAorICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0
QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
c2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6
CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46
CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlz
VmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5p
c01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmln
aHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vCisgICAgLy8gT25lIG1vcmUgY2hlY2sgZm9yIGFzc2lnbm1lbnQuICBU
aGUgUmVzdWx0aW5nIHR5cGUgaGFzIHRvIG1hdGNoIHRoZSBsZWZ0IG9wZXJhbmQuCisgICAgLy8K
KyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOgorICAgICAgICBjYXNl
IEVPcEluaXRpYWxpemU6CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAgICAgIGNhc2Ug
RU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGdldFR5cGUoKSAhPSBsZWZ0LT5nZXRUeXBl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDb21wYXJlU3RydWN0KGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUs
IENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9u
QXJyYXkpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0
KCk7CisKKyAgICBzaXplX3Qgc3RydWN0U2l6ZSA9IGZpZWxkcy0+c2l6ZSgpOworICAgIGludCBp
bmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN0cnVjdFNpemU7IGorKykg
eworICAgICAgICBpbnQgc2l6ZSA9ICgqZmllbGRzKVtqXS50eXBlLT5nZXRPYmplY3RTaXplKCk7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoKCpmaWVsZHMpW2pdLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKCpmaWVsZHMpW2pdLnR5cGUsICZy
aWdodFVuaW9uQXJyYXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJyYXlbaW5kZXhdKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRl
eF0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBl
LCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlv
bkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUuaXNBcnJheSgpKSB7CisgICAgICAgIFRU
eXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5vZGVUeXBlOworICAgICAgICB0eXBlV2l0
aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOworCisgICAgICAgIGludCBhcnJheVNpemUg
PSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAgICAgaW50IG9mZnNldCA9IHR5cGVXaXRo
b3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7CisgICAgICAgICAgICBpZiAoIUNvbXBh
cmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZyaWdodFVuaW9uQXJyYXlbb2Zmc2V0XSwg
JmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gQ29tcGFyZVN0cnVjdChsZWZ0
Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVuaW9uQXJyYXkpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vCisvLyBUaGUgZm9sZCBmdW5jdGlvbnMgc2VlIGlmIGFuIG9wZXJhdGlv
biBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBsYWNlLAorLy8gd2l0aG91dCBnZW5lcmF0
aW5nIHJ1bi10aW1lIGNvZGUuCisvLworLy8gUmV0dXJucyB0aGUgbm9kZSB0byBrZWVwIHVzaW5n
LCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9kZSBwYXNzZWQgaW4uCisvLworCitUSW50
ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpmb2xkKFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYgaW5mb1NpbmspCit7CisgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgaW50IG9i
amVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgaWYgKGNvbnN0YW50
Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAgICAgICAgVEludGVybUNvbnN0YW50VW5p
b24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBD
b25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOworICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOworCisgICAgICAgIC8v
IGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsgdmVjNCgyLDMsNCw1KTsKKyAgICAgICAg
aWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA9PSAxICYmIG9iamVj
dFNpemUgPiAxKSB7CisgICAgICAgICAgICByaWdodFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheVtpXSA9ICpub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IGdldFR5cGUo
KTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RT
aXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgeworICAgICAgICAgICAgLy8gZm9yIGEgY2Fz
ZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4yOworICAgICAgICAgICAgdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVj
dFNpemUoKV07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHVuaW9uQXJy
YXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVyblR5cGUg
PSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBvYmplY3RTaXplID0gY29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqdGVtcE5vZGU7CisKKyAgICAgICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKKyAgICAg
ICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEVPcFN1YjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJh
eVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTXVsOgorICAgICAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNT
Y2FsYXI6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0g
KiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAg
ICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUt
PmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50IEZvbGRpbmcg
Y2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0aXBseSIsIGdldExpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgaW50IHNpemUgPSBn
ZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4rKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNl
dEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
c2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kgKiBzaXplICsg
cm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogc2l6ZSArIGldLmdl
dEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsK
KyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0g
PT0gMC4wZikgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGlu
ZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdChGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBpZiAocmln
aHRVbmlvbkFycmF5W2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNv
bnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5
W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgZm9s
ZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xk
aW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9yIiwgZ2V0TGluZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNp
emUoKV07CisKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25B
cnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNv
bnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2
ZWN0b3IgdGltZXMgbWF0cml4IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgICAg
ICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6
ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29u
c3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqXS5nZXRGQ29uc3QoKSkgKiBy
aWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAv
LyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3Qg
Z2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0g
PSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9y
OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBu
b3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAgICAgey8vIHN1
cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNh
bFhvcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgo
dW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2lu
ZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICAg
ICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5p
b25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIENv
bnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJD
b25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwor
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFu
dC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgorICAg
ICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBl
KCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gIT0gcmln
aHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVG
bGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFr
IG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJvb2xO
b2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJl
KG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJh
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25B
cnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
ICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5l
KGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGlu
ZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXks
IHJldHVyblR5cGUpOworICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisg
ICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLworICAgICAg
ICAvLyBEbyB1bmFyeSBvcGVyYXRpb25zCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uICpuZXdOb2RlID0gMDsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaChvcCkgewor
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoLXVuaW9uQXJyYXlb
aV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCgtdW5pb25BcnJheVtpXS5nZXRJQ29u
c3QoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50IiwgZ2V0TGlu
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBm
dXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoIXVu
aW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50
byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKKyAgICAgICAgbmV3Tm9k
ZS0+c2V0TGluZShnZXRMaW5lKCkpOworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdGhpczsKK30KKworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9t
b3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVEludGVybUNvbnN0YW50VW5p
b24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW3NpemVdOworCisgICAgZm9yIChpbnQgaT0wOyBpIDwgc2l6ZTsgaSsr
KSB7CisKKyAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9h
dD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEJDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2ldOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsICJDYW5ub3QgcHJvbW90ZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KHJpZ2h0
VW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdo
dFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHBy
b21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KHJpZ2h0VW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSAhPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KHJp
Z2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSAhPSAwLjBmKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAi
Q2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkluY29ycmVjdCBkYXRhIHR5cGUgZm91bmQiLCBu
b2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisK
KyAgICB9CisKKyAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKKworICAgIHJl
dHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQu
Z2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5p
c01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7Cit9CisKK3ZvaWQgVElu
dGVybUFnZ3JlZ2F0ZTo6YWRkVG9QcmFnbWFUYWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJs
ZSkKK3sKKyAgICBhc3NlcnQoIXByYWdtYVRhYmxlKTsKKyAgICBwcmFnbWFUYWJsZSA9IG5ldyBU
UHJhZ21hVGFibGUoKTsKKyAgICAqcHJhZ21hVGFibGUgPSBwVGFibGU7Cit9CkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvTU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9N
TWFwLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9NTUFQ
X0lOQ0xVREVEXworI2RlZmluZSBfTU1BUF9JTkNMVURFRF8KKworLy8KKy8vIEVuY2Fwc3VsYXRl
IG1lbW9yeSBtYXBwZWQgZmlsZXMKKy8vCisKK2NsYXNzIFRNTWFwIHsKK3B1YmxpYzoKKyAgICBU
TU1hcChjb25zdCBjaGFyKiBmaWxlTmFtZSkgOiAKKyAgICAgICAgZlNpemUoLTEpLCAvLyAtMSBp
cyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgR2V0RmlsZVNpemUoKQorICAgICAgICBmcChO
VUxMKSwKKyAgICAgICAgZkJ1ZmYoMCkgICAvLyAwIGlzIHRoZSBlcnJvciB2YWx1ZSByZXR1cm5l
ZCBieSBNYXBWaWV3T2ZGaWxlKCkKKyAgICB7CisgICAgICAgIGlmICgoZnAgPSBmb3BlbihmaWxl
TmFtZSwgInIiKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2hhciBj
ID0gZ2V0YyhmcCk7CisgICAgICAgIGZTaXplID0gMDsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9G
KSB7CisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAgICAgICAgYyA9IGdldGMoZnApOworICAg
ICAgICB9CisgICAgICAgIGlmIChjID09IEVPRikKKyAgICAgICAgICAgIGZTaXplKys7CisgICAg
ICAgIHJld2luZChmcCk7CisgICAgICAgIGZCdWZmID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hh
cikgKiBmU2l6ZSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGMgPSBnZXRjKGZw
KTsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7CisgICAgICAgICAgICBmQnVmZltjb3VudCsr
XSA9IGM7CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIH0KKyAgICAgICAgZkJ1
ZmZbY291bnQrK10gPSBjOworICAgIH0KKworICAgIGNoYXIqIGdldERhdGEoKSB7IHJldHVybiBm
QnVmZjsgfQorICAgIGludCAgIGdldFNpemUoKSB7IHJldHVybiBmU2l6ZTsgfQorCisgICAgflRN
TWFwKCkgeworICAgICAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgICAgIGZjbG9zZShmcCk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgICAgICAgICAgICAgZlNpemU7ICAgICAg
Ly8gc2l6ZSBvZiBmaWxlIHRvIG1hcCBpbgorICAgIEZJTEUgKmZwOworICAgIGNoYXIqICAgICAg
ICAgICBmQnVmZjsgICAgICAvLyB0aGUgYWN0dWFsIGRhdGE7Cit9OworCisjZW5kaWYgLy8gX01N
QVBfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL091
dHB1dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCituYW1lc3BhY2UKK3sK
K1RTdHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgVEluZm9TaW5r
QmFzZSBvdXQ7CisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIG91dCA8
PCAibWF0IjsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
LmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBv
dXQgPDwgInZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZl
YyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOiBvdXQgPDwgImJ2ZWMiOyBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgICAgICB9
CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBU
U3RyaW5nKG91dC5jX3N0cigpKTsKK30KKworVFN0cmluZyBhcnJheUJyYWNrZXRzKGNvbnN0IFRU
eXBlJiB0eXBlKQoreworICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CisgICAgVEluZm9TaW5r
QmFzZSBvdXQ7CisgICAgb3V0IDw8ICJbIiA8PCB0eXBlLmdldEFycmF5U2l6ZSgpIDw8ICJdIjsK
KyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7Cit9CisKK2Jvb2wgaXNTaW5nbGVTdGF0
ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBpZiAoY29uc3QgVEludGVybUFnZ3JlZ2F0
ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1bmN0aW9uKSAmJgorICAgICAgICAgICAg
ICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1ZW5jZSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVjdGlvbiA9IG5vZGUtPmdldEFzU2VsZWN0
aW9uTm9kZSgpKQorICAgIHsKKyAgICAgICAgLy8gVGVybmFyeSBvcGVyYXRvcnMgYXJlIHVzdWFs
bHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICAvLyBUaGlzIGhhbmRs
ZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5IGFyZSBhbGwgYnkgdGhlbXNlbHZlcy4K
KyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpOworICAgIH0K
KyAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2RlKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorfSAgLy8gbmFtZXNwYWNlCisK
K1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKQorICAgIDog
VEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgIG1PYmpTaW5rKG9ialNp
bmspLAorICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKK3sKK30KKwordm9pZCBUT3V0
cHV0R0xTTDo6d3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNv
bnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKQoreworICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgcHJlU3Ry
KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHByZVN0cjsKKyAgICB9CisgICAgZWxzZSBpZiAodmlz
aXQgPT0gSW5WaXNpdCAmJiBpblN0cikKKyAgICB7CisgICAgICAgIG91dCA8PCBpblN0cjsKKyAg
ICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0ICYmIHBvc3RTdHIpCisgICAgewor
ICAgICAgICBvdXQgPDwgcG9zdFN0cjsKKyAgICB9Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6Ondy
aXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVh
bGlmaWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZhbGlkYXRlIHF1YWxpZmllciBmb3IgdmFy
aWFibGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkg
JiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAgICAgICBvdXQgPDwgdHlwZS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAvLyBEZWNsYXJlIHRoZSBzdHJ1Y3QgaWYgd2Ug
aGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgorICAgIGlmICgodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpICYmCisgICAgICAgIChtRGVjbGFyZWRTdHJ1Y3RzLmZpbmQodHlwZS5nZXRU
eXBlTmFtZSgpKSA9PSBtRGVjbGFyZWRTdHJ1Y3RzLmVuZCgpKSkKKyAgICB7CisgICAgICAgIG91
dCA8PCAic3RydWN0ICIgPDwgdHlwZS5nZXRUeXBlTmFtZSgpIDw8ICJ7XG4iOworICAgICAgICBj
b25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5
cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50eXBlOworICAgICAgICAgICAgQVNTRVJU
KGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAgICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSgqZmll
bGRUeXBlKSA8PCAiICIgPDwgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAgICAg
IGlmIChmaWVsZFR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlC
cmFja2V0cygqZmllbGRUeXBlKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgIn0iOworICAgICAgICBtRGVjbGFyZWRTdHJ1Y3RzLmluc2VydCh0
eXBlLmdldFR5cGVOYW1lKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdXQg
PDwgZ2V0VHlwZU5hbWUodHlwZSk7CisgICAgfQorfQorCit2b2lkIFRPdXRwdXRHTFNMOjp3cml0
ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJtU2VxdWVuY2UmIGFyZ3MpCit7CisgICAg
VEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIGZvciAoVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBh
cmdzLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBh
cmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGFyZyAhPSBO
VUxMKTsKKworICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IGFyZy0+Z2V0VHlwZSgpOworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgICAg
IC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50
cy4KKyAgICAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVy
ICE9IEV2cUdsb2JhbCkpCisgICAgICAgICAgICBvdXQgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJp
bmcoKSA8PCAiICI7CisKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKHR5cGUpOworCisgICAg
ICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOworICAgICAgICBpZiAo
IW5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFtZTsKKyAgICAgICAg
aWYgKHR5cGUuaXNBcnJheSgpKQorICAgICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHModHlw
ZSk7CisKKyAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgYXJn
dW1lbnQuCisgICAgICAgIGlmIChpdGVyICE9IC0tYXJncy5lbmQoKSkKKyAgICAgICAgICAgIG91
dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0w6
OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiog
cENvbnN0VW5pb24pCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisg
ICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAg
b3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7CisgICAgICAgIGNvbnN0IFRUeXBlTGlz
dCogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSAhPSBOVUxMKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNp
emUoKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRUeXBl
ID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9
IE5VTEwpOworICAgICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZp
ZWxkVHlwZSwgcENvbnN0VW5pb24pOworICAgICAgICAgICAgaWYgKGkgIT0gc3RydWN0dXJlLT5z
aXplKCkgLSAxKSBvdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIikiOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICBpZiAo
d3JpdGVUeXBlKSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0RkNv
bnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0
VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aSAhPSBzaXplIC0gMSkgb3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdyaXRl
VHlwZSkgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgcmV0dXJuIHBDb25zdFVuaW9uOworfQorCit2
b2lkIFRPdXRwdXRHTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQoreworICAg
IFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBvdXQgPDwgbm9kZS0+Z2V0U3lt
Ym9sKCk7CisKKyAgICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBub2RlLT5nZXRUeXBlKCku
aXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhub2RlLT5nZXRUeXBlKCkp
OworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0
YW50VW5pb24qIG5vZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUo
KSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIGJv
b2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2lu
aygpOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9w
SW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsKKyAgICAgICAgICAgICAgICAvLyBS
SFMgb2YgaW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCisgICAgICAgICAgICAgICAg
bURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiA9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3Vi
QXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIs
ICIpIik7IGJyZWFrOworICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KKyAgICAg
ICAgY2FzZSBFT3BNdWxBc3NpZ246IAorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4
QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKj0gIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgICAgIHdy
aXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOwor
ICAgICAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBBU1NFUlQKKyAgICAgICAgICAgICAgICBv
dXQgPDwgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAgICAgIHZp
c2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgICAgICBpZiAodmlzaXQgPT0g
SW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOworICAg
ICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdo
dCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYg
c2VxdWVuY2UgPSByaWdodENoaWxkLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQg
IT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29u
c3RhbnRVbmlvbigpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQt
PmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0
YW50VW5pb24mIGRhdGEgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLmdldElDb25zdCgpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJl
biA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgKiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTW9kOiBVTklN
UExFTUVOVEVEKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVh
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwg
IigiLCAiID4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwg
IikiKTsgYnJlYWs7CisKKyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCisgICAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNNYXRyaXg6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9n
aWNhbFhvcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYg
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNM
Ojp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KC0iLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3QoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCEiLCBOVUxMLCAiKSIp
OyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCBOVUxMLCAiKyspIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiLS0pIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCsrIiwgTlVM
TCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICIoLS0iLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgorICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAy
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
YnZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgTlVMTCwgIikiKTsgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIs
IE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0ludDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigiLCBOVUxMLCAiKSIp
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2
ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmFk
aWFucygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcFNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAic2luKCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY29zKCIsIE5VTEws
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
dGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzaW46IHdyaXRlVHJp
cGxldCh2aXNpdCwgImFzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QWNvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhdGFuKCIsIE5VTEwsICIp
Iik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJl
eHAoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJsb2coIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhw
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BMb2cyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2cyKCIsIE5VTEwsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInNxcnQo
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6IHdyaXRl
VHJpcGxldCh2aXNpdCwgImludmVyc2VzcXJ0KCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wQWJzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhYnMoIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAic2lnbigi
LCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiZmxvb3IoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2Vp
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BGcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZnJhY3QoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Imxlbmd0aCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCBOVUxMLCAiKSIpOyBicmVhazsKKwor
ICAgICAgICBjYXNlIEVPcEFueTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYW55KCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWxs
KCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRHTFNM
Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKK3sK
KyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpZiAobm9kZS0+dXNl
c1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIikg
PyAoIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilcbiI7CisKKyAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOwor
CisgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdl
dEZhbHNlQmxvY2soKSk7CisgICAgICAgIH0KKyAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBib29sIHZp
c2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsK
KyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcFNlcXVl
bmNlOiB7CisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0
IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIntc
biI7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgICAgICAgICBjb25zdCBU
SW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc2VxdWVuY2Uu
YmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBub2RlID0gKml0
ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNTaW5nbGVT
dGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAgICAgICAgICAgIC8v
IFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4gYXQgdGhlIGdsb2JhbCBzY29wZS4KKyAg
ICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAifVxuIjsKKyAgICAgICAgICAgIHZpc2l0
Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlv
bi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICBU
U3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShub2RlLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgb3V0IDw8IHJldHVyblR5cGUgPDwgIiAiIDw8IG5vZGUtPmdldE5hbWUoKTsKKworICAg
ICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJz
KG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAg
ICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24g
ZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAg
ICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShub2RlLT5nZXRUeXBlKCkp
OworICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xl
TmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgb3V0IDw8IHJldHVyblR5cGUgPDwg
IiAiIDw8IGZ1bmN0aW9uTmFtZTsKKworICAgICAgICAgICAgaW5jcmVtZW50RGVwdGgoKTsKKyAg
ICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlucyBvbmUgb3IgdHdv
IGNoaWxkcmVuIG5vZGVzCisgICAgICAgICAgICAvLyByZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFy
YW1ldGVycyBhbmQgZnVuY3Rpb24gYm9keS4gVGhlIGxhdHRlcgorICAgICAgICAgICAgLy8gaXMg
bm90IHByZXNlbnQgaW4gY2FzZSBvZiBlbXB0eSBmdW5jdGlvbiBib2RpZXMuCisgICAgICAgICAg
ICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5z
aXplKCkgPT0gMikpOworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRv
ciBzZXFJdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKworICAgICAgICAgICAgLy8gVHJhdmVyc2Ug
ZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFt
cyA9ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICBBU1NFUlQocGFy
YW1zICE9IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtcy0+Z2V0T3AoKSA9PSBFT3BQ
YXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHBhcmFtcy0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAg
ICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIGJvZHkuCisgICAgICAgICAgICBUSW50ZXJtQWdn
cmVnYXRlKiBib2R5ID0gKytzZXFJdGVyICE9IHNlcXVlbmNlLmVuZCgpID8KKyAgICAgICAgICAg
ICAgICAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogTlVMTDsKKyAgICAgICAgICAgIHZp
c2l0Q29kZUJsb2NrKGJvZHkpOworICAgICAgICAgICAgZGVjcmVtZW50RGVwdGgoKTsKKyAKKyAg
ICAgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZDsgbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4K
KyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAgICAgICAgICAgLy8g
RnVuY3Rpb24gY2FsbC4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlv
bjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiB7CisgICAgICAgICAgICAvLyBGdW5j
dGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0KTsK
KyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1l
dGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAg
ICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgICAgICAvLyBWYXJp
YWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVl
bmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJt
VHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAg
ICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxl
cyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJ
blZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAg
ICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZWNsYXJp
bmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVj
MygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiB3
cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJvb2woIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMyKCIs
ICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0Mjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQzKCIsICIsICIsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1h
dDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0
OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAg
ICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExlc3NUaGFu
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZXNzVGhhbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZ3JlYXRlclRo
YW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW5FcXVhbCgiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJn
cmVhdGVyVGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZl
Y3RvckVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJlcXVhbCgiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
bm90RXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29tbWE6IHdy
aXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVMTCk7IGJyZWFrOworCisgICAgICAgIGNh
c2UgRU9wTW9kOiB3cml0ZVRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wUG93OiB3cml0ZVRyaXBsZXQodmlzaXQsICJwb3coIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
YXRhbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNaW46IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BN
YXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDbGFtcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2xhbXAoIiwgIiwgIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtaXgo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3RlcDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTbW9v
dGhTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7IGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRp
c3RhbmNlKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERvdDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cENyb3NzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmFjZWZv
cndhcmQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmbGVjdDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BSZWZyYWN0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZWZyYWN0KCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0
cml4Q29tcE11bHQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQor
Citib29sIFRPdXRwdXRHTFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKworICAgIGluY3Jl
bWVudERlcHRoKCk7CisgICAgLy8gTG9vcCBoZWFkZXIuCisgICAgaWYgKG5vZGUtPnRlc3RGaXJz
dCgpKSAgLy8gZm9yIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAiZm9yICgiOworICAgICAg
ICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgQVNTRVJUKG5vZGUt
PmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1p
bmFsKCkpCisgICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgIH0KKyAgICBlbHNlICAvLyBkby13aGlsZSBsb29w
CisgICAgeworICAgICAgICBvdXQgPDwgImRvXG4iOworICAgIH0KKworICAgIC8vIExvb3AgYm9k
eS4KKyAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOworCisgICAgLy8gTG9vcCBm
b290ZXIuCisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIHdoaWxlIGxvb3AKKyAgICB7
CisgICAgICAgIG91dCA8PCAid2hpbGUgKCI7CisgICAgICAgIEFTU0VSVChub2RlLT5nZXRUZXN0
KCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAgIGRlY3JlbWVudERlcHRoKCk7CisKKyAg
ICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBUaGV5IGhhdmUgYmVlbiBhbHJlYWR5IHBy
b2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiB3
cml0ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlzaXQsICJicmVhayIsIE5VTEwsIE5VTEwp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb250aW51ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
Y29udGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJuOiB3
cml0ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVMTCwgTlVMTCk7IGJyZWFrOworICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5v
ZGUpIHsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBvYmpTaW5rKCk7CisgICAgaWYgKG5vZGUg
IT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAv
LyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBhIHNlcXVlbmNlIG5lZWQgdG8gYmUgdGVy
bWluYXRlZAorICAgICAgICAvLyB3aXRoIHNlbWktY29sb24uCisgICAgICAgIGlmIChpc1Npbmds
ZVN0YXRlbWVudChub2RlKSkKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8gRW1wdHkgY29kZSBibG9j
ay4KKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENST1NTQ09NUElMRVJHTFNMX09V
VFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXworCisj
aW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworY2xhc3MgVE91dHB1dEdMU0wgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmspOworCitwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rQmFzZSYgb2JqU2lu
aygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CisgICAgdm9pZCB3cml0ZVRyaXBsZXQoVmlzaXQgdmlz
aXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hhciogaW5TdHIsIGNvbnN0IGNoYXIqIHBv
c3RTdHIpOworICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpOwor
ICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3Qg
VFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKTsKKworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5v
ZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRl
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSk7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKTsKKworICAg
IHZvaWQgdmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOworCitwcml2YXRlOgorICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOworICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
KworICAgIC8vIFN0cnVjdHMgYXJlIGRlY2xhcmVkIGFzIHRoZSB0cmVlIGlzIHRyYXZlcnNlZC4g
VGhpcyBzZXQgY29udGFpbnMgYWxsCisgICAgLy8gdGhlIHN0cnVjdHMgYWxyZWFkeSBkZWNsYXJl
ZC4gSXQgaXMgbWFpbnRhaW5lZCBzbyB0aGF0IGEgc3RydWN0IGlzCisgICAgLy8gZGVjbGFyZWQg
b25seSBvbmNlLgorICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gRGVjbGFyZWRTdHJ1Y3Rz
OworICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3RzOworfTsKKworI2VuZGlmICAv
LyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9k
ZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvVW5mb2xkU2VsZWN0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIHNoCit7CisvLyBJbnRlZ2VyIHRvIFRTdHJpbmcgY29udmVyc2lv
bgorVFN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNwcmlu
dGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitPdXRwdXRITFNM
OjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRleHQpIDogVEludGVybVRyYXZlcnNlcih0
cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCkKK3sKKyAgICBtVW5mb2xkU2VsZWN0
ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlzKTsKKyAgICBtSW5zaWRlRnVuY3Rpb24g
PSBmYWxzZTsKKworICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJl
MkRfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOworICAgIG1V
c2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZh
bHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzRGVwdGhS
YW5nZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7CisgICAgbVVzZXNQb2lu
dENvb3JkID0gZmFsc2U7CisgICAgbVVzZXNGcm9udEZhY2luZyA9IGZhbHNlOworICAgIG1Vc2Vz
UG9pbnRTaXplID0gZmFsc2U7CisgICAgbVVzZXNYb3IgPSBmYWxzZTsKKyAgICBtVXNlc01vZDEg
PSBmYWxzZTsKKyAgICBtVXNlc01vZDIgPSBmYWxzZTsKKyAgICBtVXNlc01vZDMgPSBmYWxzZTsK
KyAgICBtVXNlc01vZDQgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkMSA9IGZhbHNlOwor
ICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDMgPSBm
YWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxNYXQy
ID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsTWF0
NCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMyID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbFZl
YzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJ
VmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1
YWxJVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMiA9IGZhbHNlOworICAgIG1Vc2Vz
RXF1YWxCVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjNCA9IGZhbHNlOworICAgIG1V
c2VzQXRhbjIgPSBmYWxzZTsKKworICAgIG1TY29wZURlcHRoID0gMDsKKworICAgIG1Bcmd1bWVu
dEluZGV4ID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQoreworICAgIGRlbGV0
ZSBtVW5mb2xkU2VsZWN0OworfQorCit2b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCit7CisgICAg
bUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMpOyAgIC8vIE91dHB1dCB0aGUgYm9keSBm
aXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28gaW4gdGhlIGhlYWRlcgorICAgIGhlYWRl
cigpOworCisgICAgbUNvbnRleHQuaW5mb1Npbmsub2JqIDw8IG1IZWFkZXIuY19zdHIoKTsKKyAg
ICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHkuY19zdHIoKTsKK30KKworVEluZm9TaW5r
QmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgpCit7CisgICAgcmV0dXJuIG1Cb2R5Owor
fQorCitpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3QK
K3sKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5vbWlu
YWxTaXplKCkgOiAxOworICAgIGludCBhcnJheVNpemUgPSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUu
Z2V0QXJyYXlTaXplKCkgOiAxOworCisgICAgcmV0dXJuIGVsZW1lbnRTaXplICogYXJyYXlTaXpl
OworfQorCit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCit7CisgICAgRVNoTGFuZ3VhZ2UgbGFu
Z3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVh
ZGVyOworCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVjdERlY2xh
cmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJhdGlvbiAh
PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisKKyAgICBmb3IgKENv
bnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJlZ2luKCk7
IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKyspCisgICAg
eworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKworICAgIGlmIChsYW5ndWFn
ZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgeworICAgICAgICBUU3RyaW5nIHVuaWZvcm1zOwor
ICAgICAgICBUU3RyaW5nIHZhcnlpbmdzOworCisgICAgICAgIFRTeW1ib2xUYWJsZUxldmVsICpz
eW1ib2xzID0gbUNvbnRleHQuc3ltYm9sVGFibGUuZ2V0R2xvYmFsTGV2ZWwoKTsKKyAgICAgICAg
aW50IHNlbWFudGljSW5kZXggPSAwOworCisgICAgICAgIGZvciAoVFN5bWJvbFRhYmxlTGV2ZWw6
OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVnaW4oKTsgbmFtZWRTeW1i
b2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wpLnNlY29uZDsKKyAgICAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5hbWUoKTsKKworICAgICAg
ICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFy
aWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFy
aWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9
IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVyID09
IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVyZW5jZWRVbmlm
b3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNv
cmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlm
aWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0lu
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2Vk
VmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dy
YW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsg
ZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIo
dHlwZSkgKyAiO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNJbmRleCAr
PSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFHbG9iYWwgfHwgcXVhbGlmaWVyID09IEV2cVRlbXBvcmFyeSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdsb2JhbHMgYXJlIGRlY2xhcmVk
IGFuZCBpbnRpYWxpemVkIGFzIGFuIGFnZ3JlZ2F0ZSBub2RlCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0YW50cyBhcmUgcmVwZWF0ZWQg
YXMgbGl0ZXJhbHMgd2hlcmUgdXNlZAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOworICAg
ICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3Jb
MV0gPSB7ZmxvYXQ0KDAsIDAsIDAsIDApfTtcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nv
b3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJh
Z0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGlj
IGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZhbHNlO1xuIjsKKyAgICAgICAg
fQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9XaW5kb3c7
XG4iCisgICAgICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQyIGR4X0RlcHRoO1xuIjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXQgPDwgInVuaWZvcm0gYm9vbCBkeF9Qb2ludHNPckxpbmVzO1xuIgorICAgICAg
ICAgICAgICAgICAgICJ1bmlmb3JtIGJvb2wgZHhfRnJvbnRDQ1c7XG4iOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsK
KyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJE
IHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCisgICAg
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgorICAgICAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMs
IHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlhcykKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1w
bGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQu
eCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1c
biIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKKyAg
ICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQp
XG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmVD
dWJlX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJp
YXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICB7CisgICAgICAgIFRTdHJpbmcgdW5pZm9ybXM7
CisgICAgICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAgICAgICAgVFN0cmluZyB2YXJ5aW5nczsK
KworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJvbFRh
YmxlLmdldEdsb2JhbExldmVsKCk7CisKKyAgICAgICAgZm9yIChUU3ltYm9sVGFibGVMZXZlbDo6
Y29uc3RfaXRlcmF0b3IgbmFtZWRTeW1ib2wgPSBzeW1ib2xzLT5iZWdpbigpOyBuYW1lZFN5bWJv
bCAhPSBzeW1ib2xzLT5lbmQoKTsgbmFtZWRTeW1ib2wrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gKCpuYW1lZFN5bWJvbCkuc2Vjb25kOworICAgICAg
ICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHN5bWJvbC0+Z2V0TmFtZSgpOworCisgICAgICAg
ICAgICBpZiAoc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJp
YWJsZSo+KHN5bWJvbCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB2YXJp
YWJsZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0g
dHlwZS5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIGlmIChxdWFsaWZpZXIgPT0g
RXZxVW5pZm9ybSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
UmVmZXJlbmNlZFVuaWZvcm1zLmZpbmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFVuaWZv
cm1zLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29y
YXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1SZWZlcmVuY2VkQXR0cmlidXRlcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVy
ZW5jZWRBdHRyaWJ1dGVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkg
KyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0
aWFsaXplcih0eXBlKSArICI7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
T3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVmFyeWluZ3MuZmluZChu
YW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBl
bmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5n
cyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkg
KyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFUZW1w
b3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWxz
IGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29u
c3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDb25zdGFudHMg
YXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1dGVzXG4iOworICAgICAgICBvdXQgPDwg
IGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAic3RhdGlj
IGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIAor
ICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKKyAgICAgICAgfQor
CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7Cisg
ICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAg
ICAgICAidW5pZm9ybSBmbG9hdDIgZHhfSGFsZlBpeGVsU2l6ZTtcbiIKKyAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzUG9p
bnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX0NP
T1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRfRkFDSU5HXG4iOworICAgIH0KKworICAg
IGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9V
U0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAg
ICB7CisgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgor
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRo
UmFuZ2U7XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc1hv
cikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4b3IoYm9vbCBwLCBib29sIHEpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gKHAgfHwgcSkg
JiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJc
biI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkKKyAgICB7CisgICAgICAgIG91dCA8PCAi
ZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAg
ICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsKKyAgICB9CisgICAgCisgICAgaWYg
KG1Vc2VzTW9kMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwg
ZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAgICBpZiAobVVzZXNNb2QzKQorICAgIHsK
KyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5KVxuIgorICAgICAg
ICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3Io
eCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQ0
IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAgICAgICAgICAg
ICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zh
Y2Vmb3J3YXJkMSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgZmFjZWZvcndhcmQoZmxv
YXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAg
IiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAg
ICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAg
ICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAg
ICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQyKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQoZmxvYXQyIE4sIGZsb2F0MiBJLCBmbG9h
dDIgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlm
KGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAg
ICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIK
KyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisg
ICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAg
fVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQor
CisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9h
dDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJLCBmbG9hdDMgTnJlZilcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAw
KVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICBy
ZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIg
ICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAg
ICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFj
ZWZvcndhcmQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDQgZmFjZWZvcndhcmQoZmxv
YXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisg
ICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAg
ICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAg
ICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAg
ICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIK
KyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxNYXQyKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0MngyIG0sIGZsb2F0MngyIG4pXG4iCisgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gbVswXVswXSA9PSBu
WzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAg
ICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsxXVsxXTtcbiIKKyAgICAg
ICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsTWF0MykKKyAgICB7
CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDN4MyBtLCBmbG9hdDN4MyBuKVxuIgor
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG1bMF1bMF0g
PT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0gJiYgbVswXVsyXSA9PSBuWzBdWzJdICYm
XG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzFdWzBdID09IG5bMV1bMF0gJiYgbVsx
XVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsxXVsyXSAmJlxuIgorICAgICAgICAgICAg
ICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAm
JiBtWzJdWzJdID09IG5bMl1bMl07XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisK
KyAgICBpZiAobVVzZXNFcXVhbE1hdDQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1
YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0eDQgbilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0gJiYgbVswXVsxXSA9PSBu
WzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJiBtWzBdWzNdID09IG5bMF1bM10gJiZcbiIK
KyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0gPT0gblsxXVswXSAmJiBtWzFdWzFd
ID09IG5bMV1bMV0gJiYgbVsxXVsyXSA9PSBuWzFdWzJdICYmIG1bMV1bM10gPT0gblsxXVszXSAm
JlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1b
Ml1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl0gJiYgbVsyXVszXSA9PSBuWzJd
WzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBtWzNdWzBdID09IG5bM11bMF0g
JiYgbVszXVsxXSA9PSBuWzNdWzFdICYmIG1bM11bMl0gPT0gblszXVsyXSAmJiBtWzNdWzNdID09
IG5bM11bM107XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVz
ZXNFcXVhbFZlYzIpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQyIHYs
IGZsb2F0MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4i
OworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsVmVjMykKKyAgICB7CisgICAgICAgIG91dCA8
PCAiYm9vbCBlcXVhbChmbG9hdDMgdiwgZmxvYXQzIHUpXG4iCisgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55ICYm
IHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNFcXVhbFZlYzQpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0
IHYsIGZsb2F0NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9
PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNF
cXVhbElWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDIgdiwgaW50
MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAg
IH0KKworICAgIGlmIChtVXNlc0VxdWFsSVZlYzMpCisgICAgeworICAgICAgICBvdXQgPDwgImJv
b2wgZXF1YWwoaW50MyB2LCBpbnQzIHUpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55ICYmIHYueiA9PSB1
Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVh
bElWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDQgdiwgaW50NCB1
KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYu
eCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCisg
ICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbEJWZWMyKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGJvb2wyIHYsIGJvb2wyIHUpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUu
eCAmJiB2LnkgPT0gdS55O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzRXF1YWxCVmVjMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChi
b29sMyB2LCBib29sMyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xuIgor
ICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVjNCkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sNCB2LCBib29sNCB1KVxuIgor
ICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1
LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAgICAg
ICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNBdGFuMikKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHksIGZsb2F0IHgpXG4iCisgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZih4ID09IDAgJiYgeSA9PSAwKSB4ID0g
MTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4KKyAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIGF0YW4yKHksIHgpO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorfQorCit2
b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5vZGUpCit7CisgICAg
VEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBUU3RyaW5nIG5hbWUgPSBub2RlLT5n
ZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9GcmFnQ29sb3IiKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0g
ImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAgIH0K
KyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKKyAgICB7CisgICAgICAgIG1V
c2VzRGVwdGhSYW5nZSA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNGcmFn
Q29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgeworICAgICAgICBtVXNlc1BvaW50Q29vcmQg
PSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9
PSAiZ2xfRnJvbnRGYWNpbmciKQorICAgIHsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRy
dWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJn
bF9Qb2ludFNpemUiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOworICAg
ICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICBpZiAocXVh
bGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWZlcmVuY2Vk
VW5pZm9ybXMuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
ZmVyZW5jZWRBdHRyaWJ1dGVzLmluc2VydChuYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVh
bGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgeworICAgICAgICAgICAg
bVJlZmVyZW5jZWRWYXJ5aW5ncy5pbnNlcnQobmFtZS5jX3N0cigpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAgICB9Cit9CisKK2Jvb2wgT3V0cHV0SExT
TDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCit7CisgICAg
VEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIg
PSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7ICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsIHRyYW5zcG9zZSgiOyAgIAorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIpKSkiOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09
IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAg
ICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0
IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAv
PSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0VHlwZSgpLmdldEZp
ZWxkTmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CisgICAgICAgIGlmICh2aXNp
dCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4iOworCisgICAg
ICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxlID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICAgICAgaWYgKHN3aXp6bGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IHN3aXp6bGUtPmdl
dFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRl
cmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
WzBdLmdldElDb25zdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQg
PDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2VkCisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViOiAgICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAg
Y2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICog
IiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdjogICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wRXF1
YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgp
LT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiEoIjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0ICpmaWVsZHMgPSBu
b2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUgPSAoKmZpZWxkcylbaV0udHlw
ZTsKKworICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCkgKyAi
ID09ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICYmICI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIikiOworCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc01hdHJpeCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyICogMjogbVVzZXNF
cXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMyAqIDM6IG1V
c2VzRXF1YWxNYXQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQgKiA0
OiBtVXNlc0VxdWFsTWF0NCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlw
ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1V
c2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogbVVzZXNFcXVhbFZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1
YWxJVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVz
ZXNFcXVhbElWZWMzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OiBtVXNlc0VxdWFsSVZlYzQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFs
QlZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2Vz
RXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDog
bVVzZXNFcXVhbEJWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXF1
YWwoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIWVxdWFsKCIs
ICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAi
LCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6ICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKCIsICIsIHRyYW5zcG9zZSgiLCAi
KSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwgIiwgIikiKTsgYnJlYWs7CisgICAgICBj
YXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidHJhbnNwb3Nl
KG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgiLCAiKSkpIik7IGJyZWFrOworICAgICAg
Y2FzZSBFT3BMb2dpY2FsT3I6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8
ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgbVVz
ZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAieG9yKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7ICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2Rl
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2Rl
LT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVj
dG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBicmVh
azsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisrKSIpOyBicmVhazsKKyAgICAgIGNhc2Ug
RU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIi0tKSIp
OyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50
OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBicmVhazsKKyAgICAg
IGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNh
c2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJvb2wzKCIsICIiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sNCgiLCAiIiwg
IikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAg
Y2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5k
KCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVhazsK
KyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDIoIiwgIiIs
ICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDoKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
aW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAg
ICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50NCgiLCAiIiwgIikiKTsgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERlZ3Jl
ZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29zOiAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNvcygiLCAiIiwgIikiKTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBc2luOiAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXNpbigiLCAiIiwgIikiKTsgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQWNvczogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEF0YW46ICAg
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFuKCIsICIiLCAiKSIpOyAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9nOiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZygiLCAiIiwgIikiKTsgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMb2cyOiAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9nMigiLCAiIiwgIikiKTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0
OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3FydCgiLCAiIiwgIikiKTsgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU2lnbjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJm
bG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDZWlsOiAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCAiIiwgIikiKTsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZy
YWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgIiIsICIpIik7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibm9y
bWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKKy8vICAgIGNhc2UgRU9wRFBkeDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Cisv
LyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkZHko
IiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BGd2lkdGg6ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOyAgICBicmVhazsgICAg
ICAgIAorICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWxsOiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFsbCgiLCAiIiwgIikiKTsgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlID0gbUNv
bnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BTZXF1ZW5jZToKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgICAgICBtU2NvcGVE
ZXB0aCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1TY29wZUJyYWNrZXQuc2l6ZSgpIDwgbVNj
b3BlRGVwdGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2NvcGVC
cmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2NvcGUgbGV2ZWwKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0aCAtIDFdKys7ICAgLy8gTmV3IHNjb3Bl
IGF0IGV4aXN0aW5nIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50
KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVVuZm9sZFNl
bGVjdC0+dHJhdmVyc2UoKnNpdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiO1xu
IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1JbnNpZGVGdW5jdGlvbikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAg
ICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246CisgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNlcXVl
bmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAg
IGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgKHZhcmlh
YmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkgfHwgdmFyaWFibGUtPmdldFF1YWxp
ZmllcigpID09IEV2cUdsb2JhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2YXJpYWJsZS0+Z2V0VHlwZSgpLCBzY29w
ZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgTlVMTCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+Z2V0QXNTeW1i
b2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSAhPSAi
IikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh2YXJpYWJs
ZS0+Z2V0VHlwZSgpKSArICIgIjsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNl
LmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpzaXQpLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wtPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcnJheVN0cmluZyhzeW1i
b2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAi
ICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZpc2l0ICYmIHRoaXMtPmluVmlzaXQpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXQgPSB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCBub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXQgJiYgdGhp
cy0+cG9zdFZpc2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQsIG5vZGUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZh
cmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkt
PmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0cnVjdCkgZGVjbGFyYXRpb24KKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYWRkZWQgdG8gY29u
c3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BQcm90b3R5cGU6CisgICAgICAgIGlmICh2aXNpdCA9PSBQ
cmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CisK
KyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVu
Y2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVN5
bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCAiKTtcbiI7CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIsICIsICIiKTsg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uOgorICAgICAgICB7
CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2Rl
LT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlw
ZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAibWFpbiIpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX21haW4oIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNl
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
JmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
OworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVu
dHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNbaV0tPmdldEFzU3ltYm9sTm9kZSgpOwor
CisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBhcmd1bWVudFN0cmluZyhzeW1ib2wpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigp
KTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIjsKKworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5jdGlvbiA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICAg
ICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5h
bWUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUp
IDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4
dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
Q3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNhbXBsaW5nIGV4dGVuc2lv
bgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRl
eCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0ZXh0dXJlIHNhbXBsaW5n
IGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiwgIiwgIilcbntcbiIpOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgIGFkZENvbnN0
cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0
b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9y
KG5vZGUtPmdldFR5cGUoKSwgInZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihu
b2RlLT5nZXRUeXBlKCksICJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCAiYnZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2Rl
LT5nZXRUeXBlKCksICJidmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCAiYnZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgImJ2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCAiaXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2Rl
LT5nZXRUeXBlKCksICJpdmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9k
ZS0+Z2V0VHlwZSgpLCAiaXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2Rl
LT5nZXRUeXBlKCksICJtYXQzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogCisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUt
PmdldFR5cGUoKSwgIm1hdDQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUt
PmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KG5vZGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1
Y3RMb29rdXAobm9kZS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpICsgIl9jdG9yKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDw9ICIsICIpIik7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
VmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNb2Q6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5n
ZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNNb2QxID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNNb2QyID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNNb2QzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgNDogbVVzZXNNb2Q0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BB
dGFuOgorICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMik7ICAg
Ly8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCisgICAgICAgIG1Vc2VzQXRhbjIgPSB0cnVl
OworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbnl4KCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIp
OyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENsYW1wOiAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibGVycCgiLCAiLCAi
LCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzbW9vdGhz
dGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2UoIiwgIiwgIiwgIikiKTsgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRv
dCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENyb3NzOiAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAiKSIpOyAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldFNpemUo
KSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNlZm9yd2FyZDMgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9yd2FyZDQgPSB0cnVlOyBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmYWNlZm9yd2FyZCgiLCAi
LCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BSZWZs
ZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAiLCAiKSIpOyAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
ICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisg
ICAgeworICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZvbGRTZWxlY3QtPmdldFRlbXBvcmFyeUlu
ZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50CisgICAgeworICAg
ICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24oKSk7CisKKyAg
ICAgICAgb3V0IDw8ICJpZigiOworCisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2
ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
OworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9j
aygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVsc2VcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgd3JpdGVDb25zdGFu
dFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9
CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAq
bm9kZSkKK3sKKyAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9k
eTsKKworICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgeworICAgICAgICBvdXQgPDwg
ImRvXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVuZm9s
ZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVu
Zm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1pbmFsKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAgICAgICAgCisgICAgICAgIGlmIChub2Rl
LT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIjsgIjsKKworICAgICAg
ICBpZiAobm9kZS0+Z2V0VGVzdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRU
ZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7ICI7
CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisKKyAgICBp
ZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBvdXQgPDwgIn1cbiI7CisKKyAgICBpZiAoIW5vZGUt
PnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7CisKKyAgICAg
ICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIiki
OworICAgIH0KKworICAgIG91dCA8PCAiO1xuIjsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAq
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BLaWxsOiAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCAiIiwgIiIpOyAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51
ZSIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BSZXR1cm46CisgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldEV4
cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInJldHVy
biAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5vZGUpCit7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAgICAgICBpZiAoYWdncmVnYXRlLT5nZXRP
cCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKFRJ
bnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJl
Z2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghaXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBIYW5kbGUg
bG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkp
IGJ5IHNwbGl0dGluZyB0aGVtCitib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3Ao
VEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisK
KyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKKyAgICAvLyBmb3IoaW50IGluZGV4ID0g
aW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisg
ICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOworICAgIFRPcGVyYXRvciBjb21wYXJhdG9y
ID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7CisgICAgaW50IGxpbWl0ID0gMDsKKyAg
ICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBhcnNlIGluZGV4IG5hbWUgYW5kIGludGlh
bCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgeworICAgICAgICBUSW50ZXJt
QWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisg
ICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
JnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOworCisgICAgICAgICAgICBp
ZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cVRlbXBvcmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ24gPSB2
YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYXNzaWdu
LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhc3NpZ24tPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
ICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFudCkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3lt
Ym9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGNvbXBhcmF0b3IgYW5kIGxp
bWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0VGVzdCgpKQorICAg
IHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldFRlc3QoKS0+Z2V0QXNC
aW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBpZiAodGVzdCAmJiB0ZXN0LT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09IGluZGV4LT5nZXRJZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSB0ZXN0LT5n
ZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgICAgICAgICAgaWYgKGNvbnN0
YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgp
OworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50LT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNlIGluY3JlbWVudAorICAgIGlmIChpbmRl
eCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVsbCAmJiBub2RlLT5nZXRUZXJtaW5hbCgp
KQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqYmluYXJ5VGVybWluYWwgPSBub2RlLT5n
ZXRUZXJtaW5hbCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5ICp1
bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+Z2V0QXNVbmFyeU5vZGUoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChiaW5hcnlUZXJtaW5hbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwtPmdldE9wKCk7CisgICAgICAgICAgICBU
SW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBiaW5hcnlUZXJtaW5hbC0+Z2V0UmlnaHQo
KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgIGlmIChjb25zdGFudCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgp
ID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG9wKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
T3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRP
cGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9wKCk7CisKKyAgICAgICAgICAgIHN3aXRj
aCAob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVu
dDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5jcmVt
ZW50ICE9IDApCisgICAgeworICAgICAgICBpZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbkVx
dWFsKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47Cisg
ICAgICAgICAgICBsaW1pdCArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbXBhcmF0
b3IgPT0gRU9wTGVzc1RoYW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpdGVyYXRpb25z
ID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8gaW5jcmVtZW50OworCisgICAgICAgICAgICBpZiAo
aXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9vcAorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1pdCAtIGluaXRpYWwgKyAxKSAlIGluY3JlbWVudDsK
KyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAq
IHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykgLSAxIC0gcmVtYWluZGVyOworCisgICAgICAgICAg
ICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4IDwgY2xhbXBlZExpbWl0OyBp
bmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAgICAgICBvdXQgPDwgImZvcihpbnQgIjsK
KyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91dCA8PCBpbml0aWFsOworCisgICAgICAg
ICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwgIjsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAg
ICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAi
ICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGluY3JlbWVudDsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7CisKKyAgICAgICAgICAgICAg
ICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpdGVyYXRpb25z
IC09IDI1NTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4Y2Vzc2l2ZSBsb29wCit9CisKK3ZvaWQg
T3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJl
U3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmlu
ZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwcmVTdHJpbmc7CisgICAgfQorICAg
IGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgaW5TdHJp
bmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICB7CisgICAg
ICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjph
cmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOworICAgIGNvbnN0IFRUeXBl
ICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5n
ZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lLmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5h
bWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJvdG90eXBlcworICAgIHsKKyAgICAgICAgbmFtZSA9
ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZp
ZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1l
ICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlmaWVy
U3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisg
ICAgeworICAgICAgY2FzZSBFdnFJbjogICAgICAgICAgICByZXR1cm4gImluIjsKKyAgICAgIGNh
c2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJvdXQiOworICAgICAgY2FzZSBFdnFJbk91dDog
ICAgICAgICByZXR1cm4gImlub3V0IjsKKyAgICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogcmV0
dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiAiIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkK
KyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldFR5cGVOYW1lKCkgIT0gIiIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4g
cGxhY2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0ICZmaWVsZHMgPSAq
dHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5
cGU7CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVs
ZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7
XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmcgKz0gIn0gIjsKKworICAg
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0
eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNp
emUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Cisg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gzIjsKKyAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiAiZmxvYXQ0eDQiOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiAiaW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImlu
dDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiaW50MyI7CisgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gImJvb2wiOworICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biAiYm9vbDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiYm9vbDQiOworICAgICAg
ICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgICAgIHJldHVybiAidm9p
ZCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4gInNh
bXBsZXIyRCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJl
dHVybiAic2FtcGxlckNVQkUiOworICAgICAgICB9CisgICAgfQorCisgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCisgICAgcmV0dXJuICI8dW5rbm93biB0eXBlPiI7Cit9CisKK1RTdHJp
bmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYg
KCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAg
ICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlTaXplKCkpICsgIl0iOworfQorCitUU3Ry
aW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIFRT
dHJpbmcgc3RyaW5nOworCisgICAgZm9yIChpbnQgY29tcG9uZW50ID0gMDsgY29tcG9uZW50IDwg
dHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBvbmVudCsrKQorICAgIHsKKyAgICAgICAgc3RyaW5n
ICs9ICIwIjsKKworICAgICAgICBpZiAoY29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCkg
LSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIiwgIjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7Cit9CisKK3ZvaWQgT3V0cHV0
SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKK3sKKyAgICBpZiAobmFtZSA9
PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmVzIGRv
bid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisgICAgVFR5cGUgY3RvclR5cGUgPSB0eXBl
OworICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisgICAgY3RvclR5cGUuY2hhbmdlUHJl
Y2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOworCisgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0
ZShuYW1lKSA6IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0
ZXJBcnJheTsKKyAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKKworICAgIGlmIChw
YXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0
ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJlZ2luKCk7IHBhcmFtZXRlciAhPSBwYXJh
bWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0b3JQ
YXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlciktPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1lKSk7CisKKyAgICAg
ICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVyZSArPSAic3RydWN0ICIgKyBk
ZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAg
ICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZCA9ICpmaWVsZHNbaV0udHlwZTsK
KworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsg
IiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7CisKKyAgICAgICAgaWYg
KHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJhdGlv
bnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0dXJl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmll
bGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5w
dXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisKKyAgICBUU3RyaW5nIGNvbnN0cnVjdG9yOworCisgICAgaWYgKGN0b3JU
eXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gY3Rvck5hbWUg
KyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOworICAgIH0KKyAgICBlbHNlICAgLy8gQnVpbHQt
aW4gdHlwZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlw
ZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9yUGFyYW1ldGVycy5zaXplKCk7IHBhcmFt
ZXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVy
c1twYXJhbWV0ZXJdOworCisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5cGVTdHJpbmcodHlwZSkg
KyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0cmluZyh0eXBlKTsKKworICAgICAgICBp
ZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpIC0gMSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNv
bnN0cnVjdG9yICs9ICIpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAo
Y3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAiICAg
ICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JU
eXBlKSArICIoIjsKKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9y
UGFyYW1ldGVycy5zaXplKCkgPT0gMSkKKyAgICB7CisgICAgICAgIGludCBkaW0gPSBjdG9yVHlw
ZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3Rv
clBhcmFtZXRlcnNbMF07CisKKyAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRp
bTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdHJ1
Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4MCIgOiAiMC4wIik7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wg
PCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhcmFt
ZXRlci5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAw
OyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkgJiYgY29s
IDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAiWyIg
KyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNv
bCkgPyAiMS4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAtIDEpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpbnQgcmVtYWluaW5nQ29tcG9uZW50cyA9IGN0b3JUeXBlLmdldE9i
amVjdFNpemUoKTsKKyAgICAgICAgaW50IHBhcmFtZXRlckluZGV4ID0gMDsKKworICAgICAgICB3
aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07Cisg
ICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0gcGFyYW1ldGVySW5kZXggPCAoaW50KWN0
b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICJ4
IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNT
Y2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25l
bnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA9PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0
U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW1haW5pbmdD
b21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlbWFpbmluZ0NvbXBvbmVudHMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNvbnN0cnVj
dG9yICs9ICIueCI7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY29u
c3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzID0gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkgfHwgcGFyYW1ldGVyLmdl
dFN0cnVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZW1haW5p
bmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCkgfHwgbW9yZVBhcmFtZXRl
cnMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVu
dHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgaWYgKG1vcmVQYXJhbWV0ZXJz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtZXRlckluZGV4Kys7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmdDb21wb25lbnRzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisg
ICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAifVxu
IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIik7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIG1Db25zdHJ1Y3Rv
cnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29uc3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0
SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBDb25zdGFu
dFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5Owor
CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAg
ICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5cGVOYW1lKCkpICsgIl9jdG9yKCI7Cisg
ICAgICAgIAorICAgICAgICBjb25zdCBUVHlwZUxpc3QgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3Ry
dWN0KCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUo
KTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0g
KCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisKKyAgICAgICAgICAgIGNvbnN0VW5pb24gPSB3cml0ZUNv
bnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbik7CisKKyAgICAgICAgICAgIGlmIChp
ICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91dCA8
PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBzaXplID0gdHlwZS5n
ZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3JpdGVUeXBlID0gc2l6ZSA+IDE7CisgICAg
ICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlvbisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24tPmdl
dElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgb3V0IDw8IGNv
bnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgIT0gc2l6ZSAt
IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGVUeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNv
bnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVTdHJpbmcodW5zaWduZWQg
aW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBzdHJpbmc7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQuc2l6ZSgpICYmIGkgPCBkZXB0aExpbWl0
OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0gIl8iICsgc3RyKGkpOworICAgIH0KKwor
ICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2NvcGVkU3RydWN0
KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGlmICh0eXBlTmFtZSA9PSAiIikKKyAg
ICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZU5h
bWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6
c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAgIGZvciAoaW50IGRl
cHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pCisgICAgeworICAgICAgICBU
U3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBlTmFtZSArIHNjb3BlU3RyaW5nKGRlcHRo
KSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6aXRlcmF0b3Igc3RydWN0TmFtZSA9IG1T
dHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9IG1TdHJ1Y3ROYW1lcy5lbmQoKTsgc3Ry
dWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnN0cnVjdE5hbWUgPT0gc2Nv
cGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGVkTmFt
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFVOUkVBQ0hBQkxFKCk7
ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGluZyBjb25zdHJ1Y3RvcgorCisgICAgcmV0
dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlKGNvbnN0IFRT
dHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZ2xfIiAm
JiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJf
IiArIHN0cmluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmlu
ZzsKKyAgICB9Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9PVVRQVVRI
TFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhMU0xfSF8KKworI2luY2x1ZGUgPGxpc3Q+
CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFz
cyBVbmZvbGRTZWxlY3Q7CisKK2NsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0
ICZjb250ZXh0KTsKKyAgICB+T3V0cHV0SExTTCgpOworCisgICAgdm9pZCBvdXRwdXQoKTsKKwor
ICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0oKTsKKworICAgIFRTdHJpbmcgdHlwZVN0
cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3Ry
aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmlu
Zyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJp
bmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBj
bGFzaGVzCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQgaGVhZGVyKCk7CisKKyAgICAvLyBWaXNp
dCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2RlIHRvIHRoZSBib2R5IHN0cmVhbQorICAg
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZvaWQgdmlzaXRDb25zdGFu
dFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKik7CisKKyAgICBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpOworICAgIHZv
aWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBj
b25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZyk7CisgICAg
VFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworICAg
IGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBlKSBjb25zdDsKKworICAgIHZvaWQgYWRk
Q29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0
IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycyk7CisgICAgY29uc3QgQ29uc3RhbnRVbmlvbiAq
d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9u
ICpjb25zdFVuaW9uKTsKKworICAgIFRTdHJpbmcgc2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRl
cHRoTGltaXQpOworICAgIFRTdHJpbmcgc2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVO
YW1lKTsKKyAgICBUU3RyaW5nIHN0cnVjdExvb2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7
CisKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsKKyAgICBVbmZvbGRTZWxlY3QgKm1VbmZv
bGRTZWxlY3Q7CisgICAgYm9vbCBtSW5zaWRlRnVuY3Rpb247CisKKyAgICAvLyBPdXRwdXQgc3Ry
ZWFtcworICAgIFRJbmZvU2lua0Jhc2UgbUhlYWRlcjsKKyAgICBUSW5mb1NpbmtCYXNlIG1Cb2R5
OworICAgIFRJbmZvU2lua0Jhc2UgbUZvb3RlcjsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5n
PiBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJl
bmNlZEF0dHJpYnV0ZXM7CisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1SZWZlcmVuY2VkVmFy
eWluZ3M7CisKKyAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUg
aGVhZGVyIG91dHB1dAorICAgIGJvb2wgbVVzZXNUZXh0dXJlMkQ7CisgICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qOworICAgIGJvb2wgbVVz
ZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOworICAgIGJv
b2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOworICAg
IGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBtVXNlc1BvaW50Q29vcmQ7CisgICAgYm9v
bCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVzZXNQb2ludFNpemU7CisgICAgYm9vbCBt
VXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAgICBib29sIG1Vc2VzTW9kMjsKKyAgICBi
b29sIG1Vc2VzTW9kMzsKKyAgICBib29sIG1Vc2VzTW9kNDsKKyAgICBib29sIG1Vc2VzRmFjZWZv
cndhcmQxOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDI7CisgICAgYm9vbCBtVXNlc0ZhY2Vm
b3J3YXJkMzsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQ0OworICAgIGJvb2wgbVVzZXNFcXVh
bE1hdDI7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0MzsKKyAgICBib29sIG1Vc2VzRXF1YWxNYXQ0
OworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7CisgICAgYm9vbCBtVXNlc0VxdWFsVmVjMzsKKyAg
ICBib29sIG1Vc2VzRXF1YWxWZWM0OworICAgIGJvb2wgbVVzZXNFcXVhbElWZWMyOworICAgIGJv
b2wgbVVzZXNFcXVhbElWZWMzOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWM0OworICAgIGJvb2wg
bVVzZXNFcXVhbEJWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMzOworICAgIGJvb2wgbVVz
ZXNFcXVhbEJWZWM0OworICAgIGJvb2wgbVVzZXNBdGFuMjsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENvbnN0cnVjdG9ycyBtQ29uc3RydWN0b3Jz
OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBTdHJ1Y3ROYW1lczsKKyAgICBTdHJ1
Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBlZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBT
dHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVjbGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJh
dGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPGludD4gU2NvcGVCcmFja2V0OworICAg
IFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0
aDsKKworICAgIGludCBtQXJndW1lbnRJbmRleDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIGFy
Z3VtZW50IG5hbWVzCit9OworfQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9PVVRQVVRITFNMX0hf
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
NzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBl
ci5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1
ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTdWItIHZlY3RvciBhbmQg
bWF0cml4IGZpZWxkcworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gTG9vayBhdCBhICcu
JyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZv
ciBhIHZlY3Rvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNv
bnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiBmaWVs
ZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUo
KTsKKyAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVn
YWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7CisgICAgICAgIGV4eXp3LAor
ICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEsCisgICAgfSBmaWVsZFNldFs0XTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIHN3aXRjaCAo
Y29tcFN0cmluZ1tpXSkgIHsKKyAgICAgICAgY2FzZSAneCc6IAorICAgICAgICAgICAgZmllbGRz
Lm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzogCisgICAgICAgICAgICBmaWVsZHMub2Zm
c2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNb
aV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICd5JzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9
IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4eXp3OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ2cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsK
KyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAg
ICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ3onOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAg
ICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnYic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAyOworICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdw
JzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxk
U2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNh
c2UgJ3cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAg
IGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
YSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAzOworICAgICAgICAgICAgZmll
bGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdxJzoK
KyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21w
U3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Cisg
ICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2ZWNTaXplKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0
cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBm
aWVsZFNldFtpLTFdKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2
ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5n
LmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisvLworLy8g
TG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9m
ZnNldHMKKy8vIGZvciBhIG1hdHJpeC4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0
cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTWF0cml4
RmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OworICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgIGZpZWxkcy5yb3cgPSAtMTsKKyAg
ICBmaWVsZHMuY29sID0gLTE7CisKKyAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgewor
ICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21w
U3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOworICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmlu
Z1sxXSAtICcwJzsKKyAgICB9IGVsc2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0gJ18nKSB7CisgICAg
ICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycpIHsKKyAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBj
b21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSB0cnVlOworICAgICAgICBmaWVsZHMucm93
ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29tcFN0
cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnIHx8CisgICAgICAgICAgICBjb21w
U3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0gPiAnMycpIHsKKyAgICAgICAgICAgIGVy
cm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICAgICAgZmllbGRzLmNvbCA9
IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfQorCisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0
U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNpemUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIm1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpLCAi
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFcnJvcnMKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
Ly8KKy8vIFRyYWNrIHdoZXRoZXIgZXJyb3JzIGhhdmUgb2NjdXJyZWQuCisvLwordm9pZCBUUGFy
c2VDb250ZXh0OjpyZWNvdmVyKCkKK3sKKyAgICByZWNvdmVyZWRGcm9tRXJyb3IgPSB0cnVlOwor
fQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4IGFuZCBw
YXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2Mg
bkxpbmUsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpzelRva2VuLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLikK
K3sKKyAgICBjaGFyIHN6RXh0cmFJbmZvWzQwMF07CisgICAgdmFfbGlzdCBtYXJrZXI7CisKKyAg
ICB2YV9zdGFydChtYXJrZXIsIHN6RXh0cmFJbmZvRm9ybWF0KTsKKworICAgIHZzbnByaW50Zihz
ekV4dHJhSW5mbywgc2l6ZW9mKHN6RXh0cmFJbmZvKSwgc3pFeHRyYUluZm9Gb3JtYXQsIG1hcmtl
cik7CisKKyAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KKyAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3Ip
OworICAgIGluZm9TaW5rLmluZm8ubG9jYXRpb24obkxpbmUpOworICAgIGluZm9TaW5rLmluZm8g
PDwgIiciIDw8IHN6VG9rZW4gPDwgICInIDogIiA8PCBzelJlYXNvbiA8PCAiICIgPDwgc3pFeHRy
YUluZm8gPDwgIlxuIjsKKworICAgIHZhX2VuZChtYXJrZXIpOworCisgICAgKytudW1FcnJvcnM7
Cit9CisKKy8vCisvLyBTYW1lIGVycm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVu
dHMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGludCBs
aW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQoreworICAg
IGVycm9yKGxpbmUsICIiLCBvcCwgImNhbm5vdCBjb252ZXJ0IGZyb20gJyVzJyB0byAnJXMnIiwK
KyAgICAgICAgICByaWdodC5jX3N0cigpLCBsZWZ0LmNfc3RyKCkpOworfQorCisvLworLy8gU2Ft
ZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29y
ay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3Qg
Y2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKK3sKKyAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlIiwgb3AsIAorICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhh
dCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUg
Y29udmVyc2lvbikiLAorICAgICAgICAgIG9wLCBvcGVyYW5kLmNfc3RyKCkpOworfQorCisvLwor
Ly8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29y
ay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0
IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcgcmlnaHQpCit7CisgICAgZXJyb3IobGlu
ZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAKKyAgICAgICAgICAgICJubyBvcGVyYXRp
b24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5kIG9mIHR5cGUgJyVz
JyBhbmQgIgorICAgICAgICAgICAgImEgcmlnaHQgb3BlcmFuZCBvZiB0eXBlICclcycgKG9yIHRo
ZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLCAKKyAgICAgICAgICAgIG9wLCBsZWZ0
LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OnByZWNp
c2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBl
IHR5cGUpeworICAgIHN3aXRjaCggdHlwZSApeworICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAg
IGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7CisgICAgICAgICAgICBlcnJvciggbGlu
ZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICBpZiggcHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCApeworICAgICAg
ICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIi
ICk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gQm90aCB0ZXN0IGFuZCBpZiBu
ZWNlc3NhcnksIHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5
CisvLyBhbiBsLXZhbHVlIHRoYXQgY2FuIGJlIG9wZXJhdGVkIG9uIHRoaXMgd2F5LgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4
dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBl
ZCogbm9kZSkKK3sKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmlu
YXJ5Tm9kZSgpOworCisgICAgaWYgKGJpbmFyeU5vZGUpIHsKKyAgICAgICAgYm9vbCBlcnJvclJl
dHVybjsKKworICAgICAgICBzd2l0Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAg
ICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgICAgICAgICAgaWYg
KCFlcnJvclJldHVybikgeworICAgICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAs
MH07CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5v
ZGUtPmdldFJpZ2h0KCk7CisgICAgICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5v
ZGUgPSByaWdodE5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+
Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVdKys7ICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29t
cG9uZW50cyIsIG9wLCAiIiwgIiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gCisKKyAgICAgICAgICAgIHJldHVybiBlcnJvclJldHVybjsKKyAgICAgICAgZGVmYXVs
dDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlcnJvcihsaW5lLCAi
IGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKworICAgIGNvbnN0IGNoYXIqIHN5bWJvbCA9IDA7CisgICAgaWYgKHN5bU5vZGUg
IT0gMCkKKyAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKTsKKwor
ICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOworICAgIHN3aXRjaCAobm9kZS0+Z2V0UXVhbGlm
aWVyKCkpIHsKKyAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1v
ZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTog
IG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmlidXRl
IjsgICBicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdlID0gImNhbid0
IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ0luOiAg
ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFJbnB1dDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQi
OyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJvbnRGYWNp
bmc6ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX0Zyb250RmFjaW5nIjsgYnJlYWs7Cisg
ICAgY2FzZSBFdnFQb2ludENvb3JkOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfUG9p
bnRDb29yZCI7ICBicmVhazsKKyAgICBkZWZhdWx0OgorCisgICAgICAgIC8vCisgICAgICAgIC8v
IFR5cGUgdGhhdCBjYW4ndCBiZSB3cml0dGVuIHRvPworICAgICAgICAvLworICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgYSBzYW1wbGVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVi
dFZvaWQ6CisgICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSB2b2lkIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAg
JiYgc3ltTm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJl
ZCIsIG9wLCAiIiwgIiIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAg
Ly8KKyAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCisgICAgLy8KKyAg
ICBpZiAobWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLworICAg
IC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCisgICAg
Ly8KKyAgICBpZiAoc3ltTm9kZSkKKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwgbWVzc2FnZSk7CisgICAgZWxzZQorICAg
ICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdl
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVj
ZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Cisv
LyBhIGNvbnN0YW50LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgor
Ly8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9k
ZSkKK3sKKyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4
cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
CisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNl
ZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGludGVnZXIuCisvLworLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2Vy
RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAg
IGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNp
emUoKSA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlcnJvcihub2RlLT5nZXRM
aW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tlbiwgIiIpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3Bp
dCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUgY3VycmVudGx5CisvLyBnbG9iYWxseSBz
Y29wZWQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwg
Y29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0
b2tlbiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBGb3Igbm93LCBrZWVw
IGl0IHNpbXBsZTogIGlmIGl0IHN0YXJ0cyAiZ2xfIiwgaXQncyByZXNlcnZlZCwgaW5kZXBlbmRl
bnQKKy8vIG9mIHNjb3BlLiAgRXhjZXB0LCBpZiB0aGUgc3ltYm9sIHRhYmxlIGlzIGF0IHRoZSBi
dWlsdC1pbiBwdXNoLWxldmVsLAorLy8gd2hpY2ggaXMgd2hlbiB3ZSBhcmUgcGFyc2luZyBidWls
dC1pbnMuCisvLyBBbHNvIGNoZWNrcyBmb3IgIndlYmdsXyIgYW5kICJfd2ViZ2xfIiByZXNlcnZl
ZCBpZGVudGlmaWVycyBpZiBwYXJzaW5nIGEKKy8vIHdlYmdsIHNoYWRlci4KKy8vCisvLyBSZXR1
cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6
cmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWls
dC1pbiBuYW1lIjsKKyAgICBpZiAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKKyAg
ICAgICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDMpID09IFRTdHJpbmcoImdsXyIpKSB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIsICIiKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzcGVjID09IEVTaFNw
ZWNXZWJHTCkgeworICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDYpID09IFRT
dHJpbmcoIndlYmdsXyIpKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRF
cnJNc2csICJ3ZWJnbF8iLCAiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5zdWJzdHIoMCwgNykgPT0gVFN0
cmluZygiX3dlYmdsXyIpKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRF
cnJNc2csICJfd2ViZ2xfIiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikg
IT0gVFN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNl
Y3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlm
aWVyLmNfc3RyKCksICIiLCAiIik7CisgICAgICAgICAgICAvL3JldHVybiB0cnVlOworICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0
aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggZGF0YSBwcm92aWRl
ZCB0byB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQKKy8vIHNvbWV0aGluZyBvZiB0aGUgdHlwZSBv
ZiB0aGUgY29uc3RydWN0b3IuICBBbHNvIHJldHVybnMgdGhlIHR5cGUgb2YKKy8vIHRoZSBjb25z
dHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGNv
bnN0cnVjdGlvbi4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVj
ayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVy
YXRvciBvcCwgVFR5cGUqIHR5cGUpCit7CisgICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5U
eXBlKCk7CisKKyAgICBib29sIGNvbnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOworICAgIHN3aXRj
aChvcCkgeworICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVj
dE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjb25zdHJ1Y3RpbmdN
YXRyaXggPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28g
bWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCisg
ICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdz
IGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAorICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBl
eHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgorICAgIC8vCisK
KyAgICBpbnQgc2l6ZSA9IDA7CisgICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOworICAgIGJvb2wg
ZnVsbCA9IGZhbHNlOworICAgIGJvb2wgb3ZlckZ1bGwgPSBmYWxzZTsKKyAgICBib29sIG1hdHJp
eEluTWF0cml4ID0gZmFsc2U7CisgICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAg
c2l6ZSArPSBmdW5jdGlvbltpXS50eXBlLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIGZ1bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4
KCkpCisgICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9IHRydWU7CisgICAgICAgIGlmIChmdWxs
KQorICAgICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOworICAgICAgICBpZiAob3AgIT0gRU9wQ29u
c3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmpl
Y3RTaXplKCkpCisgICAgICAgICAgICBmdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9u
W2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQorICAgICAgICAgICAgY29uc3RU
eXBlID0gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlvbltpXS50eXBlLT5pc0FycmF5KCkpCisg
ICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChjb25zdFR5
cGUpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdCk7CisKKyAgICBpZiAo
dHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVl
ZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0g
RU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3Rpbmcg
ZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtYXRyaXhJbk1hdHJpeCAmJiAhdHlw
ZS0+aXNBcnJheSgpKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgIT0g
MSkgeworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0
cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG92ZXJGdWxs
KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0
b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3Ry
dWN0KCktPnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNo
IHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpKSB7
CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBz
aXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAorICAgICAgICAgICAgKG9wID09IEVPcENv
bnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0
aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkID0gbm9kZS0+Z2V0QXNUeXBl
ZCgpOworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1
Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RT
dHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgZXJy
b3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2
b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBp
ZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1l
c3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKK3sK
KyAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQpIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8v
IFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNz
aW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4cHJlc3Npb24gb3Igbm90CisvLworLy8g
cmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6
OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCit7Cisg
ICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgp
IHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNWZWN0b3IoKSkgeworICAgICAgICBlcnJv
cihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyBm
dW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNv
bnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBub3QKKy8vCisvLyByZXR1cm5z
IHRydWUgaW4gY2FzZSBvZiBhbiBlcnJvcgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVy
cm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKK3sKKyAgICBpZiAo
cFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAo
cFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Np
b24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNv
bikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgaWYgKGNv
bnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUs
IHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBj
b250YWlucyBhIHNhbXBsZXIpIik7CisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2Ug
aWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgeworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24s
IFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIpOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250
ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlw
ZSYgcFR5cGUpCit7CisgICAgaWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8
IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUpICYmCisgICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9y
bSAmJiBzYW1wbGVyRXJyb3JDaGVjayhsaW5lLCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5p
Zm9ybSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwg
VFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIGlmICgocXVh
bGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIAorICAgICAgICAg
ICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0ICYmIElzU2FtcGxlcih0eXBlLmdl
dEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihsaW5lLCAic2FtcGxlcnMgY2Fubm90IGJl
IG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFy
c2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpCit7CisgICAgaWYgKElzU2Ft
cGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgVFR5cGVMaXN0
JiBzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChj
b250YWluc1NhbXBsZXIoKnN0cnVjdHVyZVtpXS50eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8K
Ky8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5IHR5cGUncyBzaXplLgorLy8KKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0
OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYg
c2l6ZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIiwgIiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXplID0gY29uc3RhbnQtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpOworCisgICAgaWYgKHNpemUgPD0gMCkgeworICAgICAg
ICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIi
LCAiIik7CisgICAgICAgIHNpemUgPSAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBTZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2Fu
IGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4K
Ky8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0
cmlidXRlKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
dGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUucXVhbGlm
aWVyID09IEV2cUNvbnN0ICYmIGV4dGVuc2lvbkVycm9yQ2hlY2sobGluZSwgIkdMXzNETF9hcnJh
eV9vYmplY3RzIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLworLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4gYmUgYW4gYXJyYXkuCisvLworLy8gUmV0
dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlUeXBlRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICAv
LworICAgIC8vIENhbiB0aGUgdHlwZSBiZSBhbiBhcnJheT8KKyAgICAvLworICAgIGlmICh0eXBl
LmFycmF5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2Yg
YXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8K
Ky8vIERvIGFsbCB0aGUgc2VtYW50aWMgY2hlY2tpbmcgZm9yIGRlY2xhcmluZyBhbiBhcnJheSwg
d2l0aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6ZSwgYW5kIG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMg
dG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBzaXplID09IDAgbWVhbnMgbm8gc3BlY2lmaWVk
IHNpemUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKy8vCiti
b29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRl
bnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCit7CisgICAg
Ly8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIg
d2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorICAgIC8vIGJlY2F1c2UgcmVz
ZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgorICAgIC8vCisKKyAgICBib29sIGJ1aWx0
SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKKyAgICBUU3ltYm9sKiBz
eW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3Bl
KTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgeworICAgICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZp
ZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCisgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisK
KyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBF
UlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInZh
cmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5p
c0FycmF5KCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmluZyBub24tYXJy
YXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFy
cmF5U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24g
b2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEgdmFyaWFi
bGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5cGUodHlwZSkpKSB7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBhcnJheSB3aXRoIGEgZGlmZmVyZW50IHR5
cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgVFR5cGUqIHQgPSB2YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1h
dGlvblR5cGUoKTsKKyAgICAgICAgd2hpbGUgKHQgIT0gMCkgeworICAgICAgICAgICAgaWYgKHQt
PmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNpemUpIHsKKyAgICAgICAgICAgICAgICBl
cnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFscmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5
IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0LT5zZXRBcnJheVNpemUodHlwZS5hcnJheVNp
emUpOworICAgICAgICAgICAgdCA9IHQtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisgICAgfSAKKworICAg
IGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6
YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6
ZSwgYm9vbCB1cGRhdGVGbGFnLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5n
ZXRTeW1ib2woKSwgJmJ1aWx0SW4pOworICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBl
cnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmllciIsIG5vZGUtPmdldFN5bWJvbCgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFRWYXJpYWJsZSog
dmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOworCisgICAgdHlwZS0+
c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUodmFyaWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBl
KCkpOworICAgIHZhcmlhYmxlLT51cGRhdGVBcnJheUluZm9ybWF0aW9uVHlwZSh0eXBlKTsKKwor
ICAgIC8vIHNwZWNpYWwgY2FzaW5nIHRvIHRlc3QgaW5kZXggdmFsdWUgb2YgZ2xfRnJhZ0RhdGEu
IElmIHRoZSBhY2Nlc3NlZCBpbmRleCBpcyA+PSBnbF9NYXhEcmF3QnVmZmVycworICAgIC8vIGl0
cyBhbiBlcnJvcgorICAgIGlmIChub2RlLT5nZXRTeW1ib2woKSA9PSAiZ2xfRnJhZ0RhdGEiKSB7
CisgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3ltYm9sVGFibGUuZmluZCgiZ2xfTWF4RHJh
d0J1ZmZlcnMiLCAmYnVpbHRJbik7CisgICAgICAgIGlmIChmcmFnRGF0YSA9PSAwKSB7CisgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJnbF9N
YXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZnJhZ0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0
PFRWYXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0Q29uc3RQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7
CisgICAgICAgIGlmIChmcmFnRGF0YVZhbHVlIDw9IHNpemUpIHsKKyAgICAgICAgICAgIGVycm9y
KGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBjYW4gb25seSBoYXZlIGEgbWF4IGFycmF5IHNp
emUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiLCAiIik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHdlIGRvbnQgd2FudCB0byB1cGRhdGUg
dGhlIG1heEFycmF5U2l6ZSB3aGVuIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCB3ZSBqdXN0IHdhbnQg
dG8gaW5jbHVkZSB0aGlzIAorICAgIC8vIG5vZGUgdHlwZSBpbiB0aGUgY2hhaW4gb2Ygbm9kZSB0
eXBlcyBzbyB0aGF0IGl0cyB1cGRhdGVkIHdoZW4gYSBoaWdoZXIgbWF4QXJyYXlTaXplIGNvbWVz
IGluLgorICAgIGlmICghdXBkYXRlRmxhZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c2l6ZSsrOworICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0TWF4QXJyYXlTaXplKHNpemUpOwor
ICAgIHR5cGUtPnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICBUVHlwZSogdHQgPSB0eXBlOwor
CisgICAgd2hpbGUodHQtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgIT0gMCkgeworICAgICAg
ICB0dCA9IHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpOworICAgICAgICB0dC0+c2V0TWF4
QXJyYXlTaXplKHNpemUpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8v
IEVuZm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5cGUvcXVhbGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0
Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBU
UHVibGljVHlwZSYgdHlwZSkKK3sKKyAgICAvLworICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBt
YWtlIHNlbnNlLgorICAgIC8vCisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSB7
CisgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9yYXJ5OworICAgICAgICBlcnJvcihs
aW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcgbXVzdCBiZSBpbml0aWFsaXpl
ZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBEbyBzZW1hbnRpYyBjaGVja2luZyBm
b3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhhcyBubyBpbml0aWFsaXplciwKKy8vIGFu
ZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
d2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2so
aW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKQoreworICAg
IGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCisgICAgICAgIHJlY292
ZXIoKTsKKworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlm
aWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlh
YmxlKSkgeworICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdl
dE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50
aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFs
aWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSkK
K3sgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25zdCAmJiBxdWFsaWZpZXIgIT0gRXZx
VGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQg
b24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllciksICIi
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChxdWFsaWZpZXIgPT0gRXZx
Q29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4pIHsKKyAgICAgICAgZXJyb3IobGluZSwg
InF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFsaWZpZXIpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkKKyAgICAgICAg
dHlwZS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOworICAgIGVsc2UKKyAgICAg
ICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBjaGFyKiBleHRlbnNpb24pCit7ICAgICAgIAorICAgIGlmIChleHRlbnNpb25C
ZWhhdmlvcltleHRlbnNpb25dID09IEVCaFdhcm4pIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAoImV4dGVuc2lvbiAiICsgVFN0cmluZyhleHRlbnNpb24p
ICsgIiBpcyBiZWluZyB1c2VkIikuY19zdHIoKSwgbGluZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKGV4dGVuc2lvbkJlaGF2aW9yW2V4dGVuc2lvbl0gPT0gRUJoRGlz
YWJsZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLCAiaXMg
ZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBOb24tRXJyb3JzLgor
Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLworLy8gTG9vayB1cCBhIGZ1bmN0aW9u
IG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9u
LgorLy8KKy8vIFJldHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2Ug
MC4KKy8vCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihpbnQg
bGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQoreworICAgIGNvbnN0IFRTeW1i
b2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVp
bHRJbik7CisKKyAgICBpZiAoc3ltYm9sID09IDApIHsgICAgICAgIAorICAgICAgICBlcnJvcihs
aW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5h
bWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgh
IHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBu
YW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIAorICAgIGNvbnN0IFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOworICAgIAorICAgIHJldHVybiBmdW5j
dGlvbjsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2Vz
IGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCisvLyBjb2RlIHRvIGhhbmRsZSB0aGVt
IGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJj
ZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFs
aXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQorewor
ICAgIFRUeXBlIHR5cGUgPSBUVHlwZShwVHlwZSk7CisKKyAgICBpZiAodmFyaWFibGUgPT0gMCkg
eworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZvaWRFcnJvckNoZWNrKGxpbmUs
IGlkZW50aWZpZXIsIHBUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IC8vCisgICAgICAgIC8vIGFkZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKKyAgICAgICAgLy8K
KyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKKyAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLy8gZG9uJ3QgZGVs
ZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAK
KyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbWVtb3J5CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNv
bnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkKKyAgICAvLworICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICBpZiAo
KHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAm
JiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5v
dCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZpZXIgIiwgdmFyaWFibGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgLy8KKyAgICAvLyB0ZXN0IGZvciBhbmQgcHJvcGFnYXRlIGNvbnN0YW50CisgICAgLy8K
KworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgaWYgKHF1YWxpZmll
ciAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAg
ICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwg
dmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAg
ICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9
IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIgbm9u
LW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFsaXplciAiLCAKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluaXRpYWxp
emVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24q
IHVuaW9uQXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CisKKyAgICAgICAgICAg
IGlmICh0eXBlLmdldE9iamVjdFNpemUoKSA9PSAxICYmIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0g
RWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgKnVuaW9uQXJyYXkgPSAoaW5pdGlhbGl6ZXIt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKVswXTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2lu
dGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpKSB7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkpOworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29u
c3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlh
YmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAocXVhbGlm
aWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIGludGVybVN5bWJvbCA9
IGludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxl
LT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBpbnRlcm1O
b2RlID0gaW50ZXJtZWRpYXRlLmFkZEFzc2lnbihFT3BJbml0aWFsaXplLCBpbnRlcm1TeW1ib2ws
IGluaXRpYWxpemVyLCBsaW5lKTsKKyAgICAgICAgaWYgKGludGVybU5vZGUgPT0gMCkgeworICAg
ICAgICAgICAgYXNzaWduRXJyb3IobGluZSwgIj0iLCBpbnRlcm1TeW1ib2wtPmdldENvbXBsZXRl
U3RyaW5nKCksIGluaXRpYWxpemVyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICBpbnRlcm1Ob2Rl
ID0gMDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjphcmVB
bGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQoreworICAgIGlmICghYWdn
ck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5v
ZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAorICAg
IC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBUSW50ZXJt
U2VxdWVuY2UgJmNoaWxkU2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7
CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gY2hpbGRTZXF1ZW5j
ZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg
IT0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICBpZiAoISgq
cCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFsbENvbnN0YW50
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3Ru
ZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0
aW9ucworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBp
dCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJv
ciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJy
b3IuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50
ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9u
KiBmbkNhbGwsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBUVHlwZUxpc3Q6Oml0ZXJhdG9yIG1lbWJlclR5cGVz
OworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgIG1lbWJlclR5cGVz
ID0gdHlwZS0+Z2V0U3RydWN0KCktPmJlZ2luKCk7CisgICAgCisgICAgVFR5cGUgZWxlbWVudFR5
cGUgPSAqdHlwZTsKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICBlbGVtZW50VHlw
ZS5jbGVhckFycmF5bmVzcygpOworCisgICAgYm9vbCBzaW5nbGVBcmc7CisgICAgaWYgKGFnZ3JO
b2RlKSB7CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JO
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgc2luZ2xlQXJnID0g
dHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7CisgICAg
fSBlbHNlCisgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5l
d05vZGU7CisgICAgaWYgKHNpbmdsZUFyZykgeworICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29u
c3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3IgaXMgYmVpbmcgY2FsbGVkIAorICAgICAgICAv
LyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lkZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRv
IGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9uIG9uY2UuCisgICAgICAgIGlmICh0eXBlLT5p
c0FycmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZl
bGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYg
KG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1
Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBlcykudHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBm
YWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWls
dEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBp
ZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdO
b2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25z
dHJ1Y3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAg
IC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5j
ZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3Jl
cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IK
KyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBv
bmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAg
CisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3Ry
dWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZv
ciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlm
IHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhl
IHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0
dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQs
IG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KKyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFt
Q291bnQrKykgeworICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5v
ZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVj
dFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIChtZW1i
ZXJUeXBlc1twYXJhbUNvdW50XSkudHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCks
IHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVp
bHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAgKnAgPSBuZXdOb2RlOworICAgICAgICB9
CisgICAgfQorCisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOworICAgIFRJbnRlcm1UeXBl
ZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAg
ICAgIHJldHVybiBjb25zdENvbnN0cnVjdG9yOworCisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwor
fQorCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBib29s
IGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9kZSk7CisgICAgYWdnck5vZGUt
PnNldFR5cGUodHlwZSk7CisgICAgaWYgKGNhbkJlRm9sZGVkKSB7CisgICAgICAgIGJvb2wgcmV0
dXJuVmFsID0gZmFsc2U7CisgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07CisgICAgICAgIGlmIChhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9
IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9k
ZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
dHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
Ky8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5h
cnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCisvLyBmb3IgdGhlIHBhcmFtZXRlciB0
byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHks
IGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25z
dHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBhIAorLy8g
ZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KKy8vCisvLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5lLCBib29sIHN1YnNldCkK
K3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9yIGJhc2ljT3A7CisK
KyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KKyAgICAvLwor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBiYXNp
Y09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgorICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGJhc2lj
T3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09w
ID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIsICIiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBuZXdOb2Rl
ID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5l
KCksIHN5bWJvbFRhYmxlKTsKKyAgICBpZiAobmV3Tm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3Qg
YW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRk
IG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCisg
ICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9
PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVnYXRl
T3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBu
ZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdO
b2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBl
IG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2Vz
CisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNo
IHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5z
IDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQg
YW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCisvLworVEludGVybVR5cGVkKiBU
UGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0
eXBlLCBpbnQgcGFyYW1Db3VudCwgVFNvdXJjZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sKKyAg
ICBpZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkpIHsKKyAgICAgICAg
aWYgKHN1YnNldCkKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5nZXRBc1R5cGVkKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QsIGxpbmUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiY29uc3RydWN0b3IiLCAiY2Fubm90
IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcGFyYW1Db3VudCwKKyAg
ICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1N0cmlu
ZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIHJldHVybiAwOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0
cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVjdG9yIGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2Vk
IGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBvbmx5IG9uZSBjb21wb25lbnQgb2YgdmVjdG9y
IGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVyZSB2IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0
aGVuIGEgY29udGFudCBub2RlIGlzCisvLyByZXR1cm5lZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9k
ZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBjb3Vs
ZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9kZSBvciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJt
ZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWNjZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0
YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisvLyBhIGNvbnN0YW50IG1hdHJpeC4KKy8vCitU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmll
bGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1w
Q29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAg
IHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwor
CisgICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8gdGhpcyBlcnJvciBtZXNzYWdlIHNob3Vs
ZCBuZXZlciBiZSByYWlzZWQKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24gbm90IGluaXRpYWxpemVkIGluIGFkZENv
bnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOworICAgICAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIFRo
ZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wgbm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9k
ZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBpdHMgYW4gZXJyb3IKKyAgICAgICAgZXJy
b3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgdmVjdG9yIiwgIkVycm9yIiwgIiIpOwor
ICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2ZpZWxkcy5udW1dOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubnVtOyBpKyspIHsKKyAgICAgICAgaWYg
KGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9u
IG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNldHNbaV0pOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBjb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtmaWVsZHMub2Zmc2V0
c1tpXV07CisKKyAgICB9IAorICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKGNvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgcmV0dXJuIHR5
cGVkTm9kZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29sdW1uIGJl
aW5nIGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBtYXRyaXguIFRoZSB2YWx1ZXMgYXJlIHJldHJp
ZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZv
ciBhIHZlY3RvciAoZWFjaCBjb2x1bW4gb2YgYSBtYXRyaXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5w
dXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1b
MF0gd2hlcmUgbSBpcyBhIGNvbnN0YW50IG1hdHJpeCl0aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNv
bnN0YW50IG1hdHJpeCBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0
aGUgY29uc3RhbnQgbWF0cml4IChzLm0xWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1
cmUpCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUo
aW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBU
SW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENv
bnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgaWYgKGluZGV4
ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgIGVycm9yKGxp
bmUsICIiLCAiWyIsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwg
aW5kZXgpOworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisK
KyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5p
b25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAg
ICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
JnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGlu
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50
byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQg
ZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8g
dGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgdGhlIHR5cGUgb2Yg
dGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKKy8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIg
YmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVyZSBhIGlzIGEgY29uc3RhbnQgYXJyYXkpdGhhdCBy
ZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBhcnJheSBvciBpdCBjb3VsZCBiZSB0aGUgdHJlZSBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgYXJyYXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBh
IGNvbnN0YW50IHN0cnVjdHVyZSkKKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9j
IGxpbmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0
YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KyAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgIGFycmF5
RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5n
ZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwg
ImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9IDA7CisgICAgfQorCisgICAgaW50IGFycmF5
RWxlbWVudFNpemUgPSBhcnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNpemUoKTsKKworICAgIGlm
ICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5
ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgIHR5
cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5
RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNp
ZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAKKy8vIElmIHRo
ZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMg
YWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdncgorLy8gZnVuY3Rp
b24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRk
Q29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBub2RlLCBUU291
cmNlTG9jIGxpbmUpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSBub2RlLT5nZXRUeXBlKCku
Z2V0U3RydWN0KCk7CisgICAgVEludGVybVR5cGVkICp0eXBlZE5vZGU7CisgICAgaW50IGluc3Rh
bmNlU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKyAgICBUSW50ZXJtQ29u
c3RhbnRVbmlvbiAqdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigp
OworCisgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy0+c2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgIGlmICgoKmZpZWxkcylbaW5kZXhdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09
IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaW5zdGFuY2VTaXplICs9ICgqZmllbGRzKVtpbmRleF0udHlwZS0+Z2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsK
KyAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50
Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNh
bGxpbmcgZnVuY3Rpb24KKyAgICB9IGVsc2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90
IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiLCAiIik7CisgICAgICAgIHJlY292
ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2Rl
OworfQorCisvLworLy8gSW5pdGlhbGl6ZSBhbGwgc3VwcG9ydGVkIGV4dGVuc2lvbnMgdG8gZGlz
YWJsZQorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6aW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9y
KCkKK3sKKyAgICAvLworICAgIC8vIGV4YW1wbGUgY29kZTogZXh0ZW5zaW9uQmVoYXZpb3JbInRl
c3QiXSA9IEVCaERpc2FibGU7IC8vIHdoZXJlICJ0ZXN0IiBpcyB0aGUgbmFtZSBvZiAKKyAgICAv
LyBzdXBwb3J0ZWQgZXh0ZW5zaW9uCisgICAgLy8KKyAgICBleHRlbnNpb25CZWhhdmlvclsiR0xf
QVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhSZXF1aXJlOworICAgIGV4dGVuc2lvbkJlaGF2
aW9yWyJHTF8zRExfYXJyYXlfb2JqZWN0cyJdID0gRUJoRGlzYWJsZTsKK30KKworT1NfVExTSW5k
ZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworYm9v
bCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNv
bnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAm
JiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBp
bml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8vCisgICAgR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAgCisgICAgaWYgKEdsb2JhbFBhcnNlQ29u
dGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYm
ICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGlu
aXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQoreworICAgIGlm
IChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBQYXJzZSBD
b250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19j
YXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRleHQgIT0gMCkgeworICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxy
ZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
VGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEgPSBuZXcgVFRocmVhZFBhcnNlQ29udGV4
dCgpOworICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAi
SW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBVbmFibGUgdG8gY3JlYXRlIHRocmVhZCBw
YXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBscFRo
cmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0gMDsKKyAgICBPU19TZXRUTFNWYWx1ZShH
bG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWREYXRhKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sK
KyAgICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8K
KworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCkpOworCisgICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4
dDsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+
KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7CisgICAgaWYgKGxwUGFy
c2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJzZUNvbnRleHQ7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0lu
ZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFz
c2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVy
biBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9QYXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworI2lmbmRl
ZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVE
RURfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIK
Kworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJvb2wgd2hvbGVSb3c7CisgICAgYm9vbCB3
aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBjb2w7Cit9OworCit0eXBlZGVmIGVudW0g
eworICAgIEVCaFJlcXVpcmUsCisgICAgRUJoRW5hYmxlLAorICAgIEVCaFdhcm4sCisgICAgRUJo
RGlzYWJsZQorfSBUQmVoYXZpb3I7CisKK3N0cnVjdCBUUHJhZ21hIHsKKyAgICBUUHJhZ21hKGJv
b2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1ZyhkKSB7IH0KKyAgICBib29sIG9wdGlt
aXplOworICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdtYVRhYmxlIHByYWdtYVRhYmxlOworfTsK
KworLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJhIHZhcmlhYmxlcyBuZWVkZWQgZHVyaW5n
IHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KKy8vIHRoZXkgY2FuIGJlIHBhc3NlZCB0byB0
aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2JhbC4KKy8vCitzdHJ1Y3QgVFBhcnNlQ29u
dGV4dCB7CisgICAgVFBhcnNlQ29udGV4dChUU3ltYm9sVGFibGUmIHN5bXQsIFRJbnRlcm1lZGlh
dGUmIGludGVybSwgRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzLCBUSW5mb1NpbmsmIGlzKSA6Cisg
ICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwgc3ltYm9sVGFibGUoc3ltdCksIGluZm9T
aW5rKGlzKSwgbGFuZ3VhZ2UobCksIHNwZWMocyksIHRyZWVSb290KDApLAorICAgICAgICAgICAg
cmVjb3ZlcmVkRnJvbUVycm9yKGZhbHNlKSwgbnVtRXJyb3JzKDApLCBsZXhBZnRlclR5cGUoZmFs
c2UpLCBsb29wTmVzdGluZ0xldmVsKDApLAorICAgICAgICAgICAgaW5UeXBlUGFyZW4oZmFsc2Up
LCBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSB7ICB9CisgICAgVEludGVybWVkaWF0ZSYgaW50
ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNlIHRyZWUKKyAgICBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUg
bGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorICAgIFRJbmZvU2luayYgaW5mb1Npbms7
CisgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2U7ICAgICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQg
bGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCisgICAgRVNoU3BlYyBzcGVjOyAgICAg
ICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3Jt
cyB0byAtIEdMRVMyIG9yIFdlYkdMLgorICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAg
Ly8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKKyAgICBib29sIHJlY292ZXJlZEZy
b21FcnJvcjsgICAgIC8vIHRydWUgaWYgYSBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3
ZSBjb250aW51ZSB0byBwYXJzZQorICAgIGludCBudW1FcnJvcnM7CisgICAgYm9vbCBsZXhBZnRl
clR5cGU7ICAgICAgICAgICAvLyB0cnVlIGlmIHdlJ3ZlIHJlY29nbml6ZWQgYSB0eXBlLCBzbyBj
YW4gb25seSBiZSBsb29raW5nIGZvciBhbiBpZGVudGlmaWVyCisgICAgaW50IGxvb3BOZXN0aW5n
TGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUgYWxsIGxvb3BzCisgICAgYm9vbCBpblR5cGVQ
YXJlbjsgICAgICAgICAgICAvLyB0cnVlIGlmIGluIHBhcmVudGhlc2VzLCBsb29raW5nIG9ubHkg
Zm9yIGFuIGlkZW50aWZpZXIKKyAgICBjb25zdCBUVHlwZSogY3VycmVudEZ1bmN0aW9uVHlwZTsg
IC8vIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBiZWlu
ZyBwYXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBu
b24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAgICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlv
cj4gZXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgdm9pZCBpbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZp
b3IoKTsKKworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYywgY29uc3QgY2hhciAqc3pSZWFzb24s
IGNvbnN0IGNoYXIgKnN6VG9rZW4sCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzekV4dHJh
SW5mb0Zvcm1hdCwgLi4uKTsKKyAgICBib29sIHJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwg
Y29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCByZWNvdmVyKCk7CisKKyAgICBi
b29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3Rv
ckZpZWxkcyYsIGludCBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRT
dHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYsIGludCBsaW5lKTsKKyAgICB2b2lk
IGFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3Ry
aW5nIHJpZ2h0KTsKKyAgICB2b2lkIHVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciog
b3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9pZCBiaW5hcnlPcEVycm9yKGludCBsaW5lLCBj
b25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKKyAgICBib29sIHBy
ZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNU
eXBlIHR5cGUpOworICAgIGJvb2wgbFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wgY29uc3RFcnJvckNoZWNrKFRJbnRlcm1U
eXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5v
ZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29sIGdsb2JhbEVycm9yQ2hlY2soaW50IGxp
bmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tlbik7CisgICAgYm9vbCBjb25zdHJ1Y3Rv
ckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1Ob2RlKiwgVEZ1bmN0aW9uJiwgVE9wZXJhdG9y
LCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVy
bVR5cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKKyAgICBib29sIGFycmF5VHlwZUVycm9y
Q2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOworICAgIGJvb2wgYXJyYXlFcnJvckNo
ZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFy
aWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCB2b2lkRXJyb3JDaGVjayhpbnQsIGNvbnN0IFRT
dHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOworICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soaW50
LCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKKyAgICBib29sIGJvb2xFcnJvckNoZWNrKGludCwgY29u
c3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisgICAgYm9vbCBz
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5
cGUpOworICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFs
aWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7CisgICAgYm9vbCBjb250YWluc1Nh
bXBsZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wg
bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlKTsKKyAgICBib29sIHBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmll
ciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAg
ICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqKTsKKyAgICBj
b25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxs
LCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJj
ZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVy
bU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7CisgICAgYm9vbCBh
cmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKKyAgICBUSW50ZXJt
VHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0
b3IsIFRGdW5jdGlvbiosIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogZm9sZENvbnN0
Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBl
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSosIFRUeXBl
KiwgaW50LCBUU291cmNlTG9jLCBib29sIHN1YnNldCk7CisgICAgVEludGVybVR5cGVkKiBjb25z
dHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBUSW50ZXJtTm9kZSosIFRTb3Vy
Y2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0VmVjdG9yTm9k
ZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVy
bVR5cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRl
cm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENv
bnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgYm9v
bCBhcnJheVNldE1heFNpemUoVEludGVybVN5bWJvbCosIFRUeXBlKiwgaW50LCBib29sLCBUU291
cmNlTG9jKTsKKyAgICBzdHJ1Y3QgVFByYWdtYSBjb250ZXh0UHJhZ21hOworICAgIFRTdHJpbmcg
SGFzaEVyck1zZzsKKyAgICBib29sIEFmdGVyRU9GOworfTsKKworaW50IFBhUGFyc2VTdHJpbmdz
KGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltdLCBpbnQgYXJnYywgVFBhcnNlQ29udGV4dCYpOwor
dm9pZCBQYVJlc2VydmVkV29yZCgpOworaW50IFBhSWRlbnRPclR5cGUoVFN0cmluZyYgaWQsIFRQ
YXJzZUNvbnRleHQmLCBUU3ltYm9sKiYpOworaW50IFBhUGFyc2VDb21tZW50KGludCAmbGluZW5v
LCBUUGFyc2VDb250ZXh0Jik7Cit2b2lkIHNldEluaXRpYWxTdGF0ZSgpOworCit0eXBlZGVmIFRQ
YXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVyOworZXh0ZXJuIFRQYXJzZUNvbnRleHRQ
b2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyNkZWZpbmUgR2xvYmFsUGFyc2VDb250
ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCisKK3R5cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJz
ZUNvbnRleHRSZWMKK3sKKyAgICBUUGFyc2VDb250ZXh0ICpscEdsb2JhbFBhcnNlQ29udGV4dDsK
K30gVFRocmVhZFBhcnNlQ29udGV4dDsKKworI2VuZGlmIC8vIF9QQVJTRVJfSEVMUEVSX0lOQ0xV
REVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2MuaCIK
KworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKK09TX1RMU0luZGV4IFBvb2xJbmRleCA9
IE9TX0lOVkFMSURfVExTX0lOREVYOworCit2b2lkIEluaXRpYWxpemVHbG9iYWxQb29scygpCit7
CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiBnbG9iYWxQb29scz0gc3RhdGljX2Nhc3Q8VFRocmVh
ZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7ICAgIAorICAgIGlmIChn
bG9iYWxQb29scykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFBvb2xBbGxvY2F0b3IgKmdsb2Jh
bFBvb2xBbGxvY2F0b3IgPSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7CisKKyAgICBUVGhyZWFk
R2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBuZXcgVFRocmVhZEdsb2JhbFBvb2xzKCk7CisgICAg
CisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvciA9IGdsb2JhbFBvb2xBbGxvY2F0
b3I7CisgICAgICAgIAorICAgIE9TX1NldFRMU1ZhbHVlKFBvb2xJbmRleCwgdGhyZWFkRGF0YSk7
ICAgICAKKyAgICBnbG9iYWxQb29sQWxsb2NhdG9yLT5wdXNoKCk7Cit9CisKK3ZvaWQgRnJlZUds
b2JhbFBvb2xzKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0
aGlzIHRocmVhZC4KKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIGdsb2JhbFBvb2xzPSBzdGF0aWNf
Y2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsgICAg
CisgICAgaWYgKCFnbG9iYWxQb29scykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEdsb2Jh
bFBvb2xBbGxvY2F0b3IucG9wQWxsKCk7CisgICAgZGVsZXRlICZHbG9iYWxQb29sQWxsb2NhdG9y
OyAgICAgICAKKyAgICBkZWxldGUgZ2xvYmFsUG9vbHM7Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZVBv
b2xJbmRleCgpCit7CisgICAgLy8gQWxsb2NhdGUgYSBUTFMgaW5kZXguCisgICAgaWYgKChQb29s
SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCkpID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmVlUG9v
bEluZGV4KCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBUTFMgaW5kZXguCisgICAgT1NfRnJlZVRM
U0luZGV4KFBvb2xJbmRleCk7Cit9CisKK1RQb29sQWxsb2NhdG9yJiBHZXRHbG9iYWxQb29sQWxs
b2NhdG9yKCkKK3sKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBzdGF0aWNf
Y2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKKwor
ICAgIHJldHVybiAqdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvcjsKK30KKwordm9pZCBT
ZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKQor
eworICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IHN0YXRpY19jYXN0PFRUaHJl
YWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOworCisgICAgdGhyZWFk
RGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvciA9IHBvb2xBbGxvY2F0b3I7Cit9CisKKy8vCisvLyBJ
bXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNsYXNzLCB3
aGljaAorLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KKy8vCitUUG9vbEFsbG9jYXRv
cjo6VFBvb2xBbGxvY2F0b3IoYm9vbCBnLCBpbnQgZ3Jvd3RoSW5jcmVtZW50LCBpbnQgYWxsb2Nh
dGlvbkFsaWdubWVudCkgOiAKKyAgICBnbG9iYWwoZyksCisgICAgcGFnZVNpemUoZ3Jvd3RoSW5j
cmVtZW50KSwKKyAgICBhbGlnbm1lbnQoYWxsb2NhdGlvbkFsaWdubWVudCksCisgICAgZnJlZUxp
c3QoMCksCisgICAgaW5Vc2VMaXN0KDApLAorICAgIG51bUNhbGxzKDApCit7CisgICAgLy8KKyAg
ICAvLyBEb24ndCBhbGxvdyBwYWdlIHNpemVzIHdlIGtub3cgYXJlIHNtYWxsZXIgdGhhbiBhbGwg
Y29tbW9uCisgICAgLy8gT1MgcGFnZSBzaXplcy4KKyAgICAvLworICAgIGlmIChwYWdlU2l6ZSA8
IDQqMTAyNCkKKyAgICAgICAgcGFnZVNpemUgPSA0KjEwMjQ7CisKKyAgICAvLworICAgIC8vIEEg
bGFyZ2UgY3VycmVudFBhZ2VPZmZzZXQgaW5kaWNhdGVzIGEgbmV3IHBhZ2UgbmVlZHMgdG8KKyAg
ICAvLyBiZSBvYnRhaW5lZCB0byBhbGxvY2F0ZSBtZW1vcnkuCisgICAgLy8KKyAgICBjdXJyZW50
UGFnZU9mZnNldCA9IHBhZ2VTaXplOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgYWxpZ25tZW50
IHRvIGJlIGF0IGxlYXN0IHBvaW50ZXIgYWxpZ25lZCBhbmQKKyAgICAvLyBwb3dlciBvZiAyLgor
ICAgIC8vCisgICAgc2l6ZV90IG1pbkFsaWduID0gc2l6ZW9mKHZvaWQqKTsKKyAgICBhbGlnbm1l
bnQgJj0gfihtaW5BbGlnbiAtIDEpOworICAgIGlmIChhbGlnbm1lbnQgPCBtaW5BbGlnbikKKyAg
ICAgICAgYWxpZ25tZW50ID0gbWluQWxpZ247CisgICAgc2l6ZV90IGEgPSAxOworICAgIHdoaWxl
IChhIDwgYWxpZ25tZW50KQorICAgICAgICBhIDw8PSAxOworICAgIGFsaWdubWVudCA9IGE7Cisg
ICAgYWxpZ25tZW50TWFzayA9IGEgLSAxOworCisgICAgLy8KKyAgICAvLyBBbGlnbiBoZWFkZXIg
c2tpcAorICAgIC8vCisgICAgaGVhZGVyU2tpcCA9IG1pbkFsaWduOworICAgIGlmIChoZWFkZXJT
a2lwIDwgc2l6ZW9mKHRIZWFkZXIpKSB7CisgICAgICAgIGhlYWRlclNraXAgPSAoc2l6ZW9mKHRI
ZWFkZXIpICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKKyAgICB9Cit9CisKK1RQ
b29sQWxsb2NhdG9yOjp+VFBvb2xBbGxvY2F0b3IoKQoreworICAgIGlmICghZ2xvYmFsKSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoZW4gd2Uga25vdyB0aGF0IHRoaXMgb2JqZWN0IGlzIG5v
dCBiZWluZyAKKyAgICAgICAgLy8gYWxsb2NhdGVkIGFmdGVyIG90aGVyLCBnbG9iYWxseSBzY29w
ZWQgb2JqZWN0cworICAgICAgICAvLyB0aGF0IGRlcGVuZCBvbiBpdC4gIFNvIHdlIGNhbiBkZWxl
dGUgdGhlICJpbiB1c2UiIG1lbW9yeS4KKyAgICAgICAgLy8KKyAgICAgICAgd2hpbGUgKGluVXNl
TGlzdCkgeworICAgICAgICAgICAgdEhlYWRlciogbmV4dCA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7
CisgICAgICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAgICAgICAgICBkZWxldGUg
W10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0KTsKKyAgICAgICAgICAgIGluVXNl
TGlzdCA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsd2F5cyBk
ZWxldGUgdGhlIGZyZWUgbGlzdCBtZW1vcnkgLSBpdCBjYW4ndCBiZSBiZWluZworICAgIC8vIChj
b3JyZWN0bHkpIHJlZmVyZW5jZWQsIHdoZXRoZXIgdGhlIHBvb2wgYWxsb2NhdG9yIHdhcworICAg
IC8vIGdsb2JhbCBvciBub3QuICBXZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MK
KyAgICAvLyBoZXJlLCBiZWNhdXNlIHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdh
cworICAgIC8vIHBsYWNlZCBpbnRvIHRoZSBmcmVlIGxpc3QuCisgICAgLy8KKyAgICB3aGlsZSAo
ZnJlZUxpc3QpIHsKKyAgICAgICAgdEhlYWRlciogbmV4dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsK
KyAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAg
ICAgICAgZnJlZUxpc3QgPSBuZXh0OworICAgIH0KK30KKworLy8gU3VwcG9ydCBNU1ZDKysgNi4w
Citjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrQmVnaW5WYWwgPSAw
eGZiOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAg
ID0gMHhmZTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9jYXRpb246OnVzZXJEYXRhRmlsbCAg
ICAgICA9IDB4Y2Q7CisKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBjb25zdCBzaXplX3QgVEFs
bG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMTY7CisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBU
QWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAwOworI2VuZGlmCisKKy8vCisvLyBDaGVjayBh
IHNpbmdsZSBndWFyZCBibG9jayBmb3IgZGFtYWdlCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hl
Y2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwg
Y29uc3QgY2hhciogbG9jVGV4dCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAgaWYgKGJsb2NrTWVtW3hdICE9IHZhbCkg
eworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBdOworCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJdCdzIGhlcmUganVzdCB0byBiZSBoZWxw
ZnVsLgorICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRNc2csICJQb29sQWxsb2M6IERhbWFnZSAl
cyAldSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbG9j
VGV4dCwgc2l6ZSwgZGF0YSgpKTsKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJQb29sQWxsb2M6
IERhbWFnZSBpbiBndWFyZCBibG9jayIpOworICAgICAgICB9CisgICAgfQorfQorCisKK3ZvaWQg
VFBvb2xBbGxvY2F0b3I6OnB1c2goKQoreworICAgIHRBbGxvY1N0YXRlIHN0YXRlID0geyBjdXJy
ZW50UGFnZU9mZnNldCwgaW5Vc2VMaXN0IH07CisKKyAgICBzdGFjay5wdXNoX2JhY2soc3RhdGUp
OworICAgICAgICAKKyAgICAvLworICAgIC8vIEluZGljYXRlIHRoZXJlIGlzIG5vIGN1cnJlbnQg
cGFnZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgIC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBw
YWdlU2l6ZTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1kZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBp
bmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQgc2luY2UgdGhlIGxh
c3QgcHVzaCgpLCBvciBzaW5jZSB0aGUKKy8vIGxhc3QgcG9wKCksIG9yIHNpbmNlIHRoZSBvYmpl
Y3QncyBjcmVhdGlvbi4KKy8vCisvLyBUaGUgZGVhbGxvY2F0ZWQgcGFnZXMgYXJlIHNhdmVkIGZv
ciBmdXR1cmUgYWxsb2NhdGlvbnMuCisvLwordm9pZCBUUG9vbEFsbG9jYXRvcjo6cG9wKCkKK3sK
KyAgICBpZiAoc3RhY2suc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdEhlYWRl
ciogcGFnZSA9IHN0YWNrLmJhY2soKS5wYWdlOworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gc3Rh
Y2suYmFjaygpLm9mZnNldDsKKworICAgIHdoaWxlIChpblVzZUxpc3QgIT0gcGFnZSkgeworICAg
ICAgICAvLyBpbnZva2UgZGVzdHJ1Y3RvciB0byBmcmVlIGFsbG9jYXRpb24gbGlzdAorICAgICAg
ICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAgICAgIAorICAgICAgICB0SGVhZGVyKiBuZXh0
SW5Vc2UgPSBpblVzZUxpc3QtPm5leHRQYWdlOworICAgICAgICBpZiAoaW5Vc2VMaXN0LT5wYWdl
Q291bnQgPiAxKQorICAgICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGluVXNlTGlzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5Vc2VMaXN0LT5uZXh0
UGFnZSA9IGZyZWVMaXN0OworICAgICAgICAgICAgZnJlZUxpc3QgPSBpblVzZUxpc3Q7CisgICAg
ICAgIH0KKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dEluVXNlOworICAgIH0KKworICAgIHN0YWNr
LnBvcF9iYWNrKCk7Cit9CisKKy8vCisvLyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0
aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhhdCBoYXZlIG9jY3VycmVkLgorLy8KK3Zv
aWQgVFBvb2xBbGxvY2F0b3I6OnBvcEFsbCgpCit7CisgICAgd2hpbGUgKHN0YWNrLnNpemUoKSA+
IDApCisgICAgICAgIHBvcCgpOworfQorCit2b2lkKiBUUG9vbEFsbG9jYXRvcjo6YWxsb2NhdGUo
c2l6ZV90IG51bUJ5dGVzKQoreworICAgIC8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3Ms
IGFsbCBhbGxvY2F0aW9ucyBhcmUgYnJhY2tldGVkIGJ5CisgICAgLy8gdGhlbTogW2d1YXJkYmxv
Y2tdW2FsbG9jYXRpb25dW2d1YXJkYmxvY2tdLiAgbnVtQnl0ZXMgaXMgaG93CisgICAgLy8gbXVj
aCBtZW1vcnkgdGhlIGNhbGxlciBhc2tlZCBmb3IuICBhbGxvY2F0aW9uU2l6ZSBpcyB0aGUgdG90
YWwKKyAgICAvLyBzaXplIGluY2x1ZGluZyBndWFyZCBibG9ja3MuICBJbiByZWxlYXNlIGJ1aWxk
LAorICAgIC8vIGd1YXJkQmxvY2tTaXplPTAgYW5kIHRoaXMgYWxsIGdldHMgb3B0aW1pemVkIGF3
YXkuCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gVEFsbG9jYXRpb246OmFsbG9jYXRpb25T
aXplKG51bUJ5dGVzKTsKKyAgICAKKyAgICAvLworICAgIC8vIEp1c3Qga2VlcCBzb21lIGludGVy
ZXN0aW5nIHN0YXRpc3RpY3MuCisgICAgLy8KKyAgICArK251bUNhbGxzOworICAgIHRvdGFsQnl0
ZXMgKz0gbnVtQnl0ZXM7CisKKyAgICAvLworICAgIC8vIERvIHRoZSBhbGxvY2F0aW9uLCBtb3N0
IGxpa2VseSBjYXNlIGZpcnN0LCBmb3IgZWZmaWNpZW5jeS4KKyAgICAvLyBUaGlzIHN0ZXAgY291
bGQgYmUgbW92ZWQgdG8gYmUgaW5saW5lIHNvbWV0aW1lLgorICAgIC8vCisgICAgaWYgKGN1cnJl
bnRQYWdlT2Zmc2V0ICsgYWxsb2NhdGlvblNpemUgPD0gcGFnZVNpemUpIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gU2FmZSB0byBhbGxvY2F0ZSBmcm9tIGN1cnJlbnRQYWdlT2Zmc2V0LgorICAg
ICAgICAvLworICAgICAgICB1bnNpZ25lZCBjaGFyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGN1cnJlbnRQYWdlT2Zmc2V0OworICAgICAg
ICBjdXJyZW50UGFnZU9mZnNldCArPSBhbGxvY2F0aW9uU2l6ZTsKKyAgICAgICAgY3VycmVudFBh
Z2VPZmZzZXQgPSAoY3VycmVudFBhZ2VPZmZzZXQgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1l
bnRNYXNrOworCisgICAgICAgIHJldHVybiBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxpc3Qs
IG1lbW9yeSwgbnVtQnl0ZXMpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU2l6ZSArIGhl
YWRlclNraXAgPiBwYWdlU2l6ZSkgeworICAgICAgICAvLworICAgICAgICAvLyBEbyBhIG11bHRp
LXBhZ2UgYWxsb2NhdGlvbi4gIERvbid0IG1peCB0aGVzZSB3aXRoIHRoZSBvdGhlcnMuCisgICAg
ICAgIC8vIFRoZSBPUyBpcyBlZmZpY2llbnQgYW5kIGFsbG9jYXRpbmcgYW5kIGZyZWUtaW5nIG11
bHRpcGxlIHBhZ2VzLgorICAgICAgICAvLworICAgICAgICBzaXplX3QgbnVtQnl0ZXNUb0FsbG9j
ID0gYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwOworICAgICAgICB0SGVhZGVyKiBtZW1vcnkg
PSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW251bUJ5dGVzVG9BbGxvY10p
OworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0aWFsaXplIGhlYWRlcgorICAgICAgICBu
ZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51bUJ5dGVzVG9BbGxvYyArIHBhZ2VTaXpl
IC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNlTGlzdCA9IG1lbW9yeTsKKworICAgICAg
ICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAgLy8gbWFrZSBuZXh0IGFsbG9jYXRpb24g
Y29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAvLyBObyBndWFyZCBibG9ja3MgZm9yIG11
bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtZW1vcnkpICsgaGVhZGVyU2tp
cCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVkIGEgc2ltcGxlIHBhZ2UgdG8gYWxsb2Nh
dGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1lbW9yeTsKKyAgICBpZiAoZnJlZUxpc3Qp
IHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7CisgICAgICAgIGZyZWVMaXN0ID0gZnJlZUxp
c3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbW9yeSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNpemVdKTsKKyAgICAgICAgaWYgKG1lbW9y
eSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gVXNlIHBsYWNl
bWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGlu
VXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVtb3J5OworICAgIAorICAgIHVuc2lnbmVk
IGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihpblVzZUxpc3Qp
ICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IChoZWFkZXJTa2lwICsgYWxs
b2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworCisgICAgcmV0
dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlzdCwgcmV0LCBudW1CeXRlcyk7Cit9CisK
KworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBpbiBhIGxpc3QgZm9yIGRhbWFnZSBieSBj
YWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tBbGxvY0xp
c3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFsbG9jYXRpb24qIGFsbG9jID0gdGhpczsg
YWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFsbG9jKQorICAgICAgICBhbGxvYy0+Y2hl
Y2soKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjk2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9QT09MQUxMT0NfSU5DTFVERURfCisjZGVm
aW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgR1VBUkRf
QkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJkIGJsb2NrIHNhbml0eSBjaGVja2luZwor
I2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRlciBkZWZpbmVzIGFuIGFsbG9jYXRvciB0aGF0IGNh
biBiZSB1c2VkIHRvIGVmZmljaWVudGx5CisvLyBhbGxvY2F0ZSBhIGxhcmdlIG51bWJlciBvZiBz
bWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdpdGggdGhlIAorLy8gaW50ZW50aW9uIHRo
YXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFsbG9jYXRlZCwgYnV0IHJhdGhlciAKKy8v
IGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUgdGltZS4KKy8vCisvLyBUaGlzIHNpbXVs
dGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBlYWNoIGluZGl2aWR1YWwgYWxsb2NhdGlvbiBtdWNo
IG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAgICB0eXBpY2FsIGFsbG9jYXRpb24gaXMgdHJpdmlh
bC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNvc3Qgb2YgZG9pbmcgaW5kaXZpZHVhbCBk
ZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRoZSB0cm91YmxlIG9mIHRyYWNraW5nIGRvd24gYW5k
IHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3MuCisvLworLy8gSW5kaXZpZHVhbCBjbGFz
c2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3VwcGx5aW5nIHRoZWlyIG93bgorLy8gbmV3
IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisvLyBTVEwgY29udGFpbmVycyBjYW4gdXNlIHRoaXMg
YWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9jYXRvcgorLy8gY2xhc3MgYXMgdGhlIGFs
bG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVudC4KKy8vCisKKyNpbmNsdWRlIDxzdGRk
ZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKy8vIElmIHdl
IGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3QgdHJhY2sgZWFjaCBpbmRpdnVhbAorLy8g
YWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBndWFyZCBibG9ja3MsIHRoZXNlCisvLyBu
ZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBoYXZlIGFueSBpbXBhY3QuCisvLyAKKwor
Y2xhc3MgVEFsbG9jYXRpb24geworcHVibGljOgorICAgIFRBbGxvY2F0aW9uKHNpemVfdCBzaXpl
LCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9uKiBwcmV2ID0gMCkgOgorICAgICAgICBz
aXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHByZXYpIHsKKyAgICAgICAgLy8gQWxsb2Nh
dGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAgICAgLy8gICAgW2FsbG9jYXRpb25IZWFkZXJdW2lu
aXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxHdWFyZEJsb2NrXQorICAgICAgICAvLyBU
aGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3VhcmRCbG9ja1NpemUpLi4uLCBidXQgdGhh
dAorICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgd2FybmluZ3MgYWJvdXQgMCBs
ZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8gZXZlbiB3aXRoIHRoZSBpZigpIHByb3RlY3Rpbmcg
dGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgbWVtc2V0KHByZUd1YXJkKCksIGd1
YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUpOworICAgICAgICBtZW1zZXQoZGF0YSgp
LCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7CisgICAgICAgIG1lbXNldChwb3N0R3Vh
cmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJsb2NrU2l6ZSk7CisjZW5kaWYKKyAgICB9
CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3QgeworICAgICAgICBjaGVja0d1YXJkQmxvY2socHJl
R3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICBjaGVja0d1
YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAgImFmdGVyIik7CisgICAg
fQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJuIHRv
dGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNlciBidWZmZXIgb2YgJ3NpemUnLAorICAg
IC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgYWxs
b2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAgICAgcmV0dXJuIHNpemUgKyAyICogZ3Vh
cmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCisgICAgLy8gT2Zmc2V0IGZyb20g
c3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2VyIGRhdGEgYnVmZmVyLgorICAgIGlubGlu
ZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxsb2NhdGlvbih1bnNpZ25lZCBjaGFyKiBt
KSB7CisgICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIq
IGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkgY29uc3Q7
CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFuZCBwb3N0IGd1YXJkIGJsb2NrcywgYW5k
IHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNpZ25lZCBjaGFyKiBwcmVHdWFyZCgpICBjb25zdCB7
IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkg
ICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsgZ3VhcmRCbG9ja1NpemU7IH0KKyAgICB1
bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXplOyB9
CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIHRoZSB1c2Vy
IGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNoYXIqIG1lbTsgICAgICAgICAgIC8vIGJlZ2lubmlu
ZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRlcikKKyAgICBUQWxsb2NhdGlvbiogcHJl
dkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9uIGluIHRoZSBjaGFpbgorCisgICAgLy8g
U3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRC
bG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tF
bmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXNlckRhdGFGaWxsOworCisg
ICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2NrU2l6ZTsKKyNpZmRlZiBHVUFSRF9CTE9D
S1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9m
KFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFkZXJT
aXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCit9OworCisvLworLy8gVGhlcmUgYXJlIHNldmVy
YWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBwdXNoaW5nIGFuZCBwb3BwaW5nCisvLyBv
ZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50ZWQuICBUaGUgb3RoZXJzIGFyZSBzaW1w
bHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBhZ2VzIG9yIHVzZWQgcGFnZXMuCisvLwor
Ly8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGEgc2ltcGxlIGhlYWRlciBh
dCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNoIGFsbG9jYXRpb24gb2J0YWluZWQgZnJvbSB0aGUg
dW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2NhdGlvbnMKKy8vIGFyZSByZXR1cm5lZCB0
byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGtlcHQgZm9yIGZ1dHVy
ZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAicGFnZSBzaXplIiB1c2VkIGlzIG5vdCwgbm9yIG11
c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCisvLyBwYWdlIHNpemUuICBCdXQsIGhhdmlu
ZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwgdG8gYSBzZXQgb2YgCisvLyBwYWdlcyBp
cyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8KK2NsYXNzIFRQb29sQWxsb2NhdG9yIHsKK3B1Ymxp
YzoKKyAgICBUUG9vbEFsbG9jYXRvcihib29sIGdsb2JhbCA9IGZhbHNlLCBpbnQgZ3Jvd3RoSW5j
cmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKKworICAgIC8v
CisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1l
bW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQb29sQWxsb2NhdG9yKCk7CisKKyAgICAv
LworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlzaCBhIG5ldyBwbGFjZSB0byBwb3AgbWVt
b3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5n
cyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNoKCk7CisKKyAgICAvLworICAgIC8vIENh
bGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxs
IHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxs
IG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgorICAgIC8vCisgICAgdm9pZCBwb3AoKTsK
KworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0byBmcmVlIGFsbCBtZW1vcnkgYWxsb2Nh
dGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBh
bGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVtb3J5LiAgUmV0dXJucyAwIGlmIG5vIG1l
bW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgcHJvcGVybHkgYWxpZ25lZCBwb2lu
dGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAgIC8vCisgICAgdm9pZCogYWxsb2NhdGUo
c2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0
ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRoYXQKKyAgICAvLyBkZWFsbG9jYXRpb24g
Y2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQsIGFzIHRoZSBtb2RlbAorICAgIC8vIG9m
IHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9jYXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQor
ICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBub3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkg
bGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCB0
SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVyIHsKKyAgICAgICAgdEhlYWRlcih0SGVh
ZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkgOgorI2lmZGVmIEdVQVJEX0JMT0NLUwor
ICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24oMCksCisjZW5kaWYKKyAgICAgICAgICAgIG5leHRQ
YWdlKG5leHRQYWdlKSwKKyAgICAgICAgICAgIHBhZ2VDb3VudChwYWdlQ291bnQpIHsgfQorCisg
ICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAgICAgaWYg
KGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RBbGxvY2F0aW9uLT5jaGVja0Fs
bG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICB0SGVhZGVyKiBuZXh0UGFn
ZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAg
ICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOworI2VuZGlmCisgICAgfTsKKworICAgIHN0
cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVfdCBvZmZzZXQ7CisgICAgICAgIHRIZWFk
ZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHRBbGxvY1N0YXRlPiB0
QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9jYXRpb25zIGlmIGFuZCBvbmx5IGlmIHdl
J3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQqIGluaXRpYWxpemVBbGxvY2F0aW9uKHRI
ZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1vcnksIHNpemVfdCBudW1CeXRlcykgewor
I2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXcobWVtb3J5KSBUQWxsb2NhdGlvbihudW1C
eXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRpb24pOworICAgICAgICBibG9jay0+bGFz
dEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRBbGxvY2F0aW9uKj4obWVtb3J5KTsKKyNl
bmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXplZCBlbnRpcmVseSBhd2F5IGlmIEdVQVJE
X0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAgcmV0dXJuIFRBbGxvY2F0aW9uOjpvZmZz
ZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisgICAgYm9vbCBnbG9iYWw7ICAgICAgICAg
ICAgLy8gc2hvdWxkIGJlIHRydWUgaWYgdGhpcyBvYmplY3QgaXMgZ2xvYmFsbHkgc2NvcGVkCisg
ICAgc2l6ZV90IHBhZ2VTaXplOyAgICAgICAgLy8gZ3JhbnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBm
cm9tIHRoZSBPUworICAgIHNpemVfdCBhbGlnbm1lbnQ7ICAgICAgIC8vIGFsbCByZXR1cm5lZCBh
bGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQgYXQgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBncmFudWxhcml0eSwgd2hpY2ggd2lsbCBiZSBhIHBvd2VyIG9mIDIKKyAgICBz
aXplX3QgYWxpZ25tZW50TWFzazsKKyAgICBzaXplX3QgaGVhZGVyU2tpcDsgICAgICAvLyBhbW91
bnQgb2YgbWVtb3J5IHRvIHNraXAgdG8gbWFrZSByb29tIGZvciB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgIGhlYWRlciAoYmFzaWNhbGx5LCBzaXplIG9mIGhlYWRlciwg
cm91bmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgdXAgdG8gbWFrZSBp
dCBhbGlnbmVkCisgICAgc2l6ZV90IGN1cnJlbnRQYWdlT2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQg
aW4gdG9wIG9mIGluVXNlTGlzdCB0byBhbGxvY2F0ZSBmcm9tCisgICAgdEhlYWRlciogZnJlZUxp
c3Q7ICAgICAgLy8gbGlzdCBvZiBwb3BwZWQgbWVtb3J5CisgICAgdEhlYWRlciogaW5Vc2VMaXN0
OyAgICAgLy8gbGlzdCBvZiBhbGwgbWVtb3J5IGN1cnJlbnRseSBiZWluZyB1c2VkCisgICAgdEFs
bG9jU3RhY2sgc3RhY2s7ICAgICAgLy8gc3RhY2sgb2Ygd2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwg
dG8gcGFydGl0aW9uIHBvb2wKKworICAgIGludCBudW1DYWxsczsgICAgICAgICAgIC8vIGp1c3Qg
YW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGljCisgICAgc2l6ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8g
anVzdCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKK3ByaXZhdGU6CisgICAgVFBvb2xBbGxvY2F0
b3ImIG9wZXJhdG9yPShjb25zdCBUUG9vbEFsbG9jYXRvciYpOyAgLy8gZG9udCBhbGxvdyBhc3Np
Z25tZW50IG9wZXJhdG9yCisgICAgVFBvb2xBbGxvY2F0b3IoY29uc3QgVFBvb2xBbGxvY2F0b3Im
KTsgIC8vIGRvbnQgYWxsb3cgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCit9OworCisKKy8vCisv
LyBUaGVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYW55IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5p
bmcgYXQKKy8vIGRpZmZlcmVudCB0aW1lcy4gIEJ1dCBhIHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBh
IGdsb2JhbCBwb3AKKy8vIHdpdGggZXZlcnlvbmUgdXNpbmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9j
YXRvci4KKy8vCit0eXBlZGVmIFRQb29sQWxsb2NhdG9yKiBQb29sQWxsb2NhdG9yUG9pbnRlcjsK
K2V4dGVybiBUUG9vbEFsbG9jYXRvciYgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpOworI2RlZmlu
ZSBHbG9iYWxQb29sQWxsb2NhdG9yIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKQorCisKK3N0cnVj
dCBUVGhyZWFkR2xvYmFsUG9vbHMKK3sKKyAgICBUUG9vbEFsbG9jYXRvciogZ2xvYmFsUG9vbEFs
bG9jYXRvcjsKK307CisKK3ZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihUUG9vbEFsbG9j
YXRvciogcG9vbEFsbG9jYXRvcik7CisKKy8vCisvLyBUaGlzIFNUTCBjb21wYXRpYmxlIGFsbG9j
YXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBhbGxvY2F0b3IKKy8vIHBhcmFtZXRl
ciB0byB0ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywgbGlrZSB2ZWN0b3IgYW5kIG1hcC4KKy8v
CisvLyBJdCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFsbG9jYXRpb24sIGFuZCBub3QKKy8vIGRv
IGFueSBkZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxsIGRvIGRlc3RydWN0aW9uLgorLy8KK3Rl
bXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBwb29sX2FsbG9jYXRvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKKyAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CisgICAgdHlwZWRlZiBjb25zdCBUKiBjb25z
dF9wb2ludGVyOworICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOworICAgIHR5cGVkZWYgY29uc3Qg
VCYgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOworCisgICAgdGVt
cGxhdGU8Y2xhc3MgT3RoZXI+IAorICAgIHN0cnVjdCByZWJpbmQgeworICAgICAgICB0eXBlZGVm
IHBvb2xfYWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKKyAgICB9OworICAgIHBvaW50ZXIgYWRkcmVz
cyhyZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7IH0KKyAgICBjb25zdF9wb2ludGVyIGFk
ZHJlc3MoY29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsgcmV0dXJuICZ4OyB9CisKKyAgICBwb29s
X2FsbG9jYXRvcigpIDogYWxsb2NhdG9yKEdsb2JhbFBvb2xBbGxvY2F0b3IpIHsgfQorICAgIHBv
b2xfYWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yJiBhKSA6IGFsbG9jYXRvcihhKSB7IH0KKyAgICBw
b29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRvcjxUPiYgcCkgOiBhbGxvY2F0b3IocC5h
bGxvY2F0b3IpIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+CisgICAgcG9vbF9hbGxv
Y2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6IGFsbG9jYXRvcihwLmdldEFs
bG9jYXRvcigpKSB7IH0KKworICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsgCisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFs
bG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKKyAgICB9CisgICAgcG9pbnRlciBhbGxvY2F0ZShzaXpl
X3R5cGUgbiwgY29uc3Qgdm9pZCopIHsgCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKKyAgICB9
CisKKyAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkgeyB9CisgICAgdm9pZCBk
ZWFsbG9jYXRlKHBvaW50ZXIsIHNpemVfdHlwZSkgeyB9CisKKyAgICBwb2ludGVyIF9DaGFyYWxs
b2Moc2l6ZV90IG4pIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4o
Z2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobikpOworICAgIH0KKworICAgIHZvaWQgY29uc3RydWN0
KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0KKyAg
ICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxs
b2NhdG9yKCkgPT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkg
IT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorCisgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSkgLyBzaXplb2YoVCk7IH0KKyAg
ICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQorCisgICAgdm9pZCBzZXRBbGxvY2F0b3IoVFBvb2xB
bGxvY2F0b3IqIGEpIHsgYWxsb2NhdG9yID0gKmE7IH0KKyAgICBUUG9vbEFsbG9jYXRvciYgZ2V0
QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBUUG9vbEFsbG9jYXRvciYgYWxsb2NhdG9yOworfTsKKworI2VuZGlmIC8vIF9QT09MQUxMT0Nf
SU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRBbGl2ZVRyYXZlcnNlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUQWxpdmVUcmF2ZXJzZXIoVFF1YWxpZmll
ciBxKSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgZm91bmQo
ZmFsc2UpLCBxdWFsaWZpZXIocSkKKyAgICB7CisgICAgfQorCisJYm9vbCB3YXNGb3VuZCgpIHsg
cmV0dXJuIGZvdW5kOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGZvdW5kOworICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOworCisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7
CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOworfTsK
KworLy8KKy8vIFJlcG9ydCB3aGV0aGVyIG9yIG5vdCBhIHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBx
dWFsaWZpZXIgdHlwZQorLy8gaXMgZ3VhcmFudGVlZCB3cml0dGVuLiAgTm90IGFsd2F5cyBwb3Nz
aWJsZSB0byBkZXRlcm1pbmUgaWYKKy8vIGl0IGlzIHdyaXR0ZW4gY29uZGl0aW9uYWxseS4KKy8v
CisvLyA/PyBJdCBkb2VzIG5vdCBkbyB0aGlzIHdlbGwgeWV0LCB0aGlzIGlzIGp1c3QgYSBwbGFj
ZSBob2xkZXIKKy8vIHRoYXQgc2ltcGx5IGRldGVybWluZXMgaWYgaXQgd2FzIHJlZmVyZW5jZSBh
dCBhbGwsIGFueXdoZXJlLgorLy8KK2Jvb2wgUXVhbGlmaWVyV3JpdHRlbihUSW50ZXJtTm9kZSog
bm9kZSwgVFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgVEFsaXZlVHJhdmVyc2VyIGl0KHF1
YWxpZmllcik7CisKKyAgICBpZiAobm9kZSkKKyAgICAgICAgbm9kZS0+dHJhdmVyc2UoJml0KTsK
KworICAgIHJldHVybiBpdC53YXNGb3VuZCgpOworfQorCit2b2lkIFRBbGl2ZVRyYXZlcnNlcjo6
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICAvLworICAgIC8vIElmIGl0
J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgcmVjb3JkIGl0LgorICAgIC8vCisgICAgaWYgKG5v
ZGUtPmdldFF1YWxpZmllcigpID09IHF1YWxpZmllcikKKyAgICAgICAgZm91bmQgPSB0cnVlOwor
fQorCitib29sIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgcHJlVmlzaXQs
IFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaWYgKHdhc0ZvdW5kKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L1F1YWxpZmllckFsaXZlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUXVh
bGlmaWVyQWxpdmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCitib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUqIHJvb3QsIFRRdWFsaWZp
ZXIpOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKKworLy8KKy8vIENvZGUgdG8g
cmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKy8vCisKK2NsYXNzIFJl
bW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorCVJlbW92ZVRy
ZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQorCXsKKwl9CisKK3By
b3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0
Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlz
aXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisJZGVsZXRl
IG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgZGVsZXRlIG5vZGU7CisK
KwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJl
dHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBub2RlOworfQorCisvLworLy8gRW50cnkg
cG9pbnQuCisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCit7
CisgICAgUmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cit9CisKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9SZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqKTsKSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1No
SGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgX1NISEFORExFX0lOQ0xVREVEXworI2RlZmluZSBfU0hIQU5ETEVfSU5DTFVE
RURfCisKKy8vCisvLyBNYWNoaW5lIGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGNvbXBpbGVyIHBy
aXZhdGUgb2JqZWN0cworLy8gc2VudCBhcyBTaEhhbmRsZSB0byB0aGUgZHJpdmVyLgorLy8KKy8v
IFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KKy8vCisKKyNpbmNs
dWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5r
LmgiCisKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFRJbnRlcm1Ob2RlOworCisvLworLy8gVGhl
IGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4K
Ky8vCitjbGFzcyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBUU2hIYW5kbGVCYXNlKCkg
eyB9CisgICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsgfQorICAgIHZpcnR1YWwgVENvbXBp
bGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQorfTsKKworLy8KKy8vIFRoZSBiYXNl
IGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGlsZXIgdG8gZGVyaXZlIGZyb20K
Ky8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBjb21waWxlLgorLy8KK2NsYXNz
IFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBUQ29tcGls
ZXIoRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzKSA6IGxhbmd1YWdlKGwpLCBzcGVjKHMpIHsgfQor
ICAgIHZpcnR1YWwgflRDb21waWxlcigpIHsgfQorCisgICAgRVNoTGFuZ3VhZ2UgZ2V0TGFuZ3Vh
Z2UoKSB7IHJldHVybiBsYW5ndWFnZTsgfQorICAgIEVTaFNwZWMgZ2V0U3BlYygpIHsgcmV0dXJu
IHNwZWM7IH0KKyAgICB2aXJ0dWFsIFRJbmZvU2luayYgZ2V0SW5mb1NpbmsoKSB7IHJldHVybiBp
bmZvU2luazsgfQorCisgICAgdmlydHVhbCBib29sIGNvbXBpbGUoVEludGVybU5vZGUqIHJvb3Qp
ID0gMDsKKworICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4g
dGhpczsgfQorCisgICAgVEluZm9TaW5rIGluZm9TaW5rOworcHJvdGVjdGVkOgorICAgIEVTaExh
bmd1YWdlIGxhbmd1YWdlOworICAgIEVTaFNwZWMgc3BlYzsKK307CisKKy8vCisvLyBUaGlzIGlz
IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbWFjaGluZSBpbmRlcGVuZGVudCBjb2RlCisvLyBh
bmQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUuCisvLworLy8gVGhlIG1hY2hpbmUgZGVwZW5k
ZW50IGNvZGUgc2hvdWxkIGRlcml2ZSBmcm9tIHRoZSBjbGFzc2VzCisvLyBhYm92ZS4gVGhlbiBD
b25zdHJ1Y3QqKCkgYW5kIERlbGV0ZSooKSB3aWxsIGNyZWF0ZSBhbmQgCisvLyBkZXN0cm95IHRo
ZSBtYWNoaW5lIGRlcGVuZGVudCBvYmplY3RzLCB3aGljaCBjb250YWluIHRoZQorLy8gYWJvdmUg
bWFjaGluZSBpbmRlcGVuZGVudCBpbmZvcm1hdGlvbi4KKy8vCitUQ29tcGlsZXIqIENvbnN0cnVj
dENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsKK3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENv
bXBpbGVyKik7CisKKyNlbmRpZiAvLyBfU0hIQU5ETEVfSU5DTFVERURfCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1No
YWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8KKy8vIEltcGxlbWVudCB0aGUgdG9wLWxldmVsIG9mIGludGVyZmFjZSB0byB0
aGUgY29tcGlsZXIsCisvLyBhcyBkZWZpbmVkIGluIFNoYWRlckxhbmcuaAorLy8KKworI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVEbGwuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKworLy8KKy8vIEEgc3ltYm9sIHRhYmxlIGZv
ciBlYWNoIGxhbmd1YWdlLiAgRWFjaCBoYXMgYSBkaWZmZXJlbnQKKy8vIHNldCBvZiBidWlsdC1p
bnMsIGFuZCB3ZSB3YW50IHRvIHByZXNlcnZlIHRoYXQgZnJvbQorLy8gY29tcGlsZSB0byBjb21w
aWxlLgorLy8KK1RTeW1ib2xUYWJsZSogU3ltYm9sVGFibGVzW0VTaExhbmdDb3VudF07CisKKwor
VFBvb2xBbGxvY2F0b3IqIFBlclByb2Nlc3NHUEEgPSAwOworLy8KKy8vIFRoaXMgaXMgdGhlIHBs
YXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFu
ZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4KKy8vCisKKy8vCisvLyBEcml2ZXIgbXVz
dCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIKKy8vIGNvbXBp
bGVyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgpCit7CisgICAgVEluZm9TaW5r
IGluZm9TaW5rOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGlmICghSW5pdFByb2Nlc3Mo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2Fs
bGVkIG9uY2UgcGVyIHByb2Nlc3MuIElmIGl0cyBjYWxsZWQgYnkgbXVsdGlwbGUgdGhyZWFkcywg
dGhlbiAKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBjb2Rl
IGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGVyIHByb2Nlc3MKKyAgICAvLyBnbG9iYWwg
cG9vbCBhbGxvY2F0b3IKKyAgICBpZiAoIVBlclByb2Nlc3NHUEEpIHsgCisgICAgICAgIFRQb29s
QWxsb2NhdG9yICpidWlsdEluUG9vbEFsbG9jYXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVl
KTsKKyAgICAgICAgYnVpbHRJblBvb2xBbGxvY2F0b3ItPnB1c2goKTsKKyAgICAgICAgVFBvb2xB
bGxvY2F0b3IqIGdQb29sQWxsb2NhdG9yID0gJkdsb2JhbFBvb2xBbGxvY2F0b3I7CisgICAgICAg
IFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoYnVpbHRJblBvb2xBbGxvY2F0b3IpOworCisgICAg
ICAgIFRTeW1ib2xUYWJsZSBzeW1UYWJsZXNbRVNoTGFuZ0NvdW50XTsKKyAgICAgICAgR2VuZXJh
dGVCdWlsdEluU3ltYm9sVGFibGUoMCwgaW5mb1NpbmssIHN5bVRhYmxlcyk7CisKKyAgICAgICAg
UGVyUHJvY2Vzc0dQQSA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKKyAgICAgICAgUGVyUHJv
Y2Vzc0dQQS0+cHVzaCgpOworICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFBlclBy
b2Nlc3NHUEEpOworCisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nVmVydGV4XSA9IG5ldyBU
U3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nVmVydGV4XS0+Y29weVRh
YmxlKHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XSk7CisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hM
YW5nRnJhZ21lbnRdID0gbmV3IFRTeW1ib2xUYWJsZTsKKyAgICAgICAgU3ltYm9sVGFibGVzW0VT
aExhbmdGcmFnbWVudF0tPmNvcHlUYWJsZShzeW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XSk7CisK
KyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihnUG9vbEFsbG9jYXRvcik7CisKKyAg
ICAgICAgc3ltVGFibGVzW0VTaExhbmdWZXJ0ZXhdLnBvcCgpOworICAgICAgICBzeW1UYWJsZXNb
RVNoTGFuZ0ZyYWdtZW50XS5wb3AoKTsKKworICAgICAgICBidWlsdEluUG9vbEFsbG9jYXRvci0+
cG9wQWxsKCk7CisgICAgICAgIGRlbGV0ZSBidWlsdEluUG9vbEFsbG9jYXRvcjsgICAgICAgIAor
CisgICAgfQorCisgICAgcmV0dXJuIHJldCA/IDEgOiAwOworfQorCisvLworLy8gRHJpdmVyIGNh
bGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgorLy8KKwor
U2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3Bl
YyBzcGVjKQoreworICAgIGlmICghSW5pdFRocmVhZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29u
c3RydWN0Q29tcGlsZXIobGFuZ3VhZ2UsIHNwZWMpKTsKKyAgICAKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRsZSBo
YW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBU
U2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7
CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAgICBEZWxldGVDb21waWxl
cihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOworfQorCisvLworLy8gQ2xlYW51cCBzeW1ib2wgdGFi
bGVzCisvLworaW50IFNoRmluYWxpemUoKQoreyAgCisgIGlmIChQZXJQcm9jZXNzR1BBKSB7Cisg
ICAgUGVyUHJvY2Vzc0dQQS0+cG9wQWxsKCk7CisgICAgZGVsZXRlIFBlclByb2Nlc3NHUEE7Cisg
ICAgUGVyUHJvY2Vzc0dQQSA9IDA7CisgIH0KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBFU2hMYW5n
Q291bnQ7ICsraSkgeworICAgIGRlbGV0ZSBTeW1ib2xUYWJsZXNbaV07CisgICAgU3ltYm9sVGFi
bGVzW2ldID0gMDsKKyAgfQorICByZXR1cm4gMTsKK30KKworYm9vbCBHZW5lcmF0ZUJ1aWx0SW5T
eW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMsIFRJbmZvU2luayYg
aW5mb1NpbmssIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVzLCBFU2hMYW5ndWFnZSBsYW5ndWFn
ZSkKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7CisgICAgCisJaWYgKHJlc291cmNlcykgewor
CQlidWlsdElucy5pbml0aWFsaXplKCpyZXNvdXJjZXMpOworCQlJbml0aWFsaXplU3ltYm9sVGFi
bGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgbGFuZ3VhZ2UsIGluZm9TaW5rLCByZXNv
dXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfSBlbHNlIHsKKwkJYnVpbHRJbnMuaW5pdGlhbGl6ZSgp
OworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwg
RVNoTGFuZ1ZlcnRleCwgaW5mb1NpbmssIHJlc291cmNlcywgc3ltYm9sVGFibGVzKTsKKwkJSW5p
dGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJpbmdzKCksIEVTaExhbmdG
cmFnbWVudCwgaW5mb1NpbmssIHJlc291cmNlcywgc3ltYm9sVGFibGVzKTsKKwl9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXplU3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJp
bmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5m
b1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcywgVFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZXMpCit7CisgICAgVEludGVybWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5mb1Npbmsp
OwkKKyAgICBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlOworCQorCWlmIChyZXNvdXJjZXMpCisJ
CXN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGVzOworCWVsc2UKKwkJc3ltYm9sVGFibGUgPSAmc3lt
Ym9sVGFibGVzW2xhbmd1YWdlXTsKKworICAgIC8vIFRPRE8oYWxva3ApOiBJbnZlc3RpZ2F0ZSBp
ZiBhIHBhcnNlLWNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmUgYW5kCisgICAgLy8gaWYgc3ltYm9s
LXRhYmxlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBHTEVTMiBhbmQgV2ViR0wgc3BlY3MuCisgICAg
VFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoKnN5bWJvbFRhYmxlLCBpbnRlcm1lZGlhdGUsIGxh
bmd1YWdlLCBFU2hTcGVjR0xFUzIsIGluZm9TaW5rKTsKKworICAgIEdsb2JhbFBhcnNlQ29udGV4
dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisgICAgc2V0SW5pdGlhbFN0YXRlKCk7CisKKyAgICBh
c3NlcnQoc3ltYm9sVGFibGUtPmlzRW1wdHkoKSB8fCBzeW1ib2xUYWJsZS0+YXRTaGFyZWRCdWls
dEluTGV2ZWwoKSk7CisgICAgICAgCisgICAgLy8KKyAgICAvLyBQYXJzZSB0aGUgYnVpbHQtaW5z
LiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZSBwZXIKKyAgICAvLyBsYW5ndWFnZSBzeW1i
b2wgdGFibGUuCisgICAgLy8KKyAgICAvLyBQdXNoIHRoZSBzeW1ib2wgdGFibGUgdG8gZ2l2ZSBp
dCBhbiBpbml0aWFsIHNjb3BlLiAgVGhpcworICAgIC8vIHB1c2ggc2hvdWxkIG5vdCBoYXZlIGEg
Y29ycmVzcG9uZGluZyBwb3AsIHNvIHRoYXQgYnVpbHQtaW5zCisgICAgLy8gYXJlIHByZXNlcnZl
ZCwgYW5kIHRoZSB0ZXN0IGZvciBhbiBlbXB0eSB0YWJsZSBmYWlscy4KKyAgICAvLworCisgICAg
c3ltYm9sVGFibGUtPnB1c2goKTsKKyAgICAKKyAgICAvL0luaXRpYWxpemUgdGhlIFByZXByb2Nl
c3NvcgorICAgIGludCByZXQgPSBJbml0UHJlcHJvY2Vzc29yKCk7CisgICAgaWYgKHJldCkgewor
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICAiVW5h
YmxlIHRvIGludGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChUQnVpbHRJblN0cmluZ3M6Oml0ZXJhdG9yIGkgID0g
QnVpbHRJblN0cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1YWdlXS5iZWdpbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBCdWlsdEluU3RyaW5nc1twYXJzZUNvbnRl
eHQubGFuZ3VhZ2VdLmVuZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KytpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1aWx0SW5TaGFkZXJzWzFdOworICAgICAgICBp
bnQgYnVpbHRJbkxlbmd0aHNbMV07CisKKyAgICAgICAgYnVpbHRJblNoYWRlcnNbMF0gPSAoKmkp
LmNfc3RyKCk7CisgICAgICAgIGJ1aWx0SW5MZW5ndGhzWzBdID0gKGludCkgKCppKS5zaXplKCk7
CisKKyAgICAgICAgaWYgKFBhUGFyc2VTdHJpbmdzKGNvbnN0X2Nhc3Q8Y2hhcioqPihidWlsdElu
U2hhZGVycyksIGJ1aWx0SW5MZW5ndGhzLCAxLCBwYXJzZUNvbnRleHQpICE9IDApIHsKKyAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYWJs
ZSB0byBwYXJzZSBidWlsdC1pbnMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworCWlmIChyZXNvdXJjZXMpIHsKKwkJSWRlbnRpZnlCdWlsdElucyhwYXJz
ZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSwgKnJlc291cmNlcyk7CisJfSBlbHNlIHsJ
CQkJCQkJCQkgICAKKwkJSWRlbnRpZnlCdWlsdElucyhwYXJzZUNvbnRleHQubGFuZ3VhZ2UsICpz
eW1ib2xUYWJsZSk7CisJfQorCisgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCisvLworLy8gRG8gYW4gYWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVu
IHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQgCisvLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBv
YmplY3QuCisvLworLy8gUmV0dXJuOiAgVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMg
cmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8vCitp
bnQgU2hDb21waWxlKAorICAgIGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKKyAgICBjb25zdCBjaGFy
KiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29uc3QgaW50IG51bVN0cmluZ3MsCisgICAg
Y29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwgb3B0TGV2ZWwsCisgICAgY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSogcmVzb3VyY2VzLAorICAgIGludCBkZWJ1Z09wdGlvbnMKKyAgICApCit7CisgICAg
aWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSByZWlu
dGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21waWxlciogY29t
cGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKGNvbXBpbGVyID09IDApCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucHVzaCgpOwor
ICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+aW5mb1Npbms7CisgICAgaW5mb1Np
bmsuaW5mby5lcmFzZSgpOworICAgIGluZm9TaW5rLmRlYnVnLmVyYXNlKCk7CisgICAgaW5mb1Np
bmsub2JqLmVyYXNlKCk7CisKKyAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1
cm4gMTsKKworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKKyAgICBU
U3ltYm9sVGFibGUgc3ltYm9sVGFibGUoKlN5bWJvbFRhYmxlc1tjb21waWxlci0+Z2V0TGFuZ3Vh
Z2UoKV0pOworICAgIAorICAgIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKHJlc291cmNlcywg
aW5mb1NpbmssICZzeW1ib2xUYWJsZSwgY29tcGlsZXItPmdldExhbmd1YWdlKCkpOworCisgICAg
VFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGludGVybWVkaWF0ZSwgY29t
cGlsZXItPmdldExhbmd1YWdlKCksIGNvbXBpbGVyLT5nZXRTcGVjKCksIGluZm9TaW5rKTsKKyAg
ICBwYXJzZUNvbnRleHQuaW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICBHbG9i
YWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OworICAgIAorICAgIHNldEluaXRpYWxTdGF0
ZSgpOworCisgICAgSW5pdFByZXByb2Nlc3NvcigpOyAgICAKKyAgICAvLworICAgIC8vIFBhcnNl
IHRoZSBhcHBsaWNhdGlvbidzIHNoYWRlcnMuICBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2wgdGFi
bGUKKyAgICAvLyB3b3JrIHdpbGwgYmUgdGhyb3ctYXdheSwgc28gcHVzaCBhIG5ldyBhbGxvY2F0
aW9uIHNjb3BlIHRoYXQgY2FuCisgICAgLy8gYmUgdGhyb3duIGF3YXksIHRoZW4gcHVzaCBhIHNj
b3BlIGZvciB0aGUgY3VycmVudCBzaGFkZXIncyBnbG9iYWxzLgorICAgIC8vCisgICAgYm9vbCBz
dWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisgICAgaWYgKCFz
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJXcm9uZyBzeW1ib2wgdGFibGUg
bGV2ZWwiKTsKKworICAgIGludCByZXQgPSBQYVBhcnNlU3RyaW5ncyhjb25zdF9jYXN0PGNoYXIq
Kj4oc2hhZGVyU3RyaW5ncyksIDAsIG51bVN0cmluZ3MsIHBhcnNlQ29udGV4dCk7CisgICAgaWYg
KHJldCkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKHN1Y2Nlc3MgJiYgcGFy
c2VDb250ZXh0LnRyZWVSb290KSB7CisgICAgICAgIGlmIChvcHRMZXZlbCA9PSBFU2hPcHROb0dl
bmVyYXRpb24pCisgICAgICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhOb25lLCAiTm8gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0aW9uIHdhcyByZXF1ZXN0
ZWQuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3VjY2VzcyA9IGludGVybWVkaWF0
ZS5wb3N0UHJvY2VzcyhwYXJzZUNvbnRleHQudHJlZVJvb3QsIHBhcnNlQ29udGV4dC5sYW5ndWFn
ZSk7CisKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisKKyAgICAgICAgICAgICAgICBpZiAo
ZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAgICAgICAgICAgICAgICAg
IGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7CisKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIG1hY2hpbmUgZGVwZW5k
ZW50IGNvbXBpbGVyCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoIWNv
bXBpbGVyLT5jb21waWxlKHBhcnNlQ29udGV4dC50cmVlUm9vdCkpCisgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8ucHJl
Zml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8
IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBjb2Rl
IGdlbmVyYXRlZC5cblxuIjsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBpZiAo
ZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAgICAgICAgICBpbnRlcm1l
ZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworICAgIH0gZWxzZSBpZiAo
IXBhcnNlQ29udGV4dC50cmVlUm9vdCkgeworICAgICAgICBwYXJzZUNvbnRleHQuZXJyb3IoMSwg
IlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwgIiIsICIiKTsKKyAgICAgICAgcGFyc2VDb250ZXh0
LmluZm9TaW5rLmluZm8gPDwgcGFyc2VDb250ZXh0Lm51bUVycm9ycyA8PCAiIGNvbXBpbGF0aW9u
IGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGVkLlxuXG4iOworICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBFRGVidWdPcEludGVybWVkaWF0ZSkKKyAg
ICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7
CisgICAgfQorCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNvbnRleHQudHJlZVJvb3Qp
OworCisgICAgLy8KKyAgICAvLyBFbnN1cmUgc3ltYm9sIHRhYmxlIGlzIHJldHVybmVkIHRvIHRo
ZSBidWlsdC1pbiBsZXZlbCwKKyAgICAvLyB0aHJvd2luZyBhd2F5IGFsbCBidXQgdGhlIGJ1aWx0
LWlucy4KKyAgICAvLworICAgIHdoaWxlICghIHN5bWJvbFRhYmxlLmF0U2hhcmVkQnVpbHRJbkxl
dmVsKCkpCisgICAgICAgIHN5bWJvbFRhYmxlLnBvcCgpOworCisgICAgRmluYWxpemVQcmVwcm9j
ZXNzb3IoKTsKKyAgICAvLworICAgIC8vIFRocm93IGF3YXkgYWxsIHRoZSB0ZW1wb3JhcnkgbWVt
b3J5IHVzZWQgYnkgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisgICAgLy8KKyAgICBHbG9iYWxQ
b29sQWxsb2NhdG9yLnBvcCgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3MgPyAxIDogMDsKK30KKwor
Ly8KKy8vIFJldHVybiBhbnkgY29tcGlsZXIgbG9nIG9mIG1lc3NhZ2VzIGZvciB0aGUgYXBwbGlj
YXRpb24uCisvLworY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFzZSog
YmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZvU2lu
ayogaW5mb1NpbmsgPSAwOworCisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAg
ICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisK
KyAgICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2luay0+ZGVidWcuY19zdHIoKTsKKyAgICByZXR1
cm4gaW5mb1NpbmstPmluZm8uY19zdHIoKTsKK30KKworLy8KKy8vIFJldHVybiBhbnkgb2JqZWN0
IGNvZGUuCisvLworY29uc3QgY2hhciogU2hHZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworICAgIFRJbmZv
U2luayogaW5mb1Npbms7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQorICAgICAg
ICBpbmZvU2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKwor
ICAgIHJldHVybiBpbmZvU2luay0+b2JqLmNfc3RyKCk7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9s
VGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5
IGFuZCBtYWluIGlkZWFzCisvLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisv
LworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKworI2luY2x1ZGUgPHN0ZGlv
Lmg+CisKKy8vCisvLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZl
LgorLy8KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMuCisvLwor
dm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkKK3sKKyAg
ICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOworICAgIGVsc2Ug
aWYgKGlzVmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKKworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnZic7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgIG1hbmds
ZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlcjJE
OiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZTogICAgICAgIG1hbmdsZWROYW1lICs9ICJzQyI7ICAgICBicmVhazsKKyAgICBj
YXNlIEVidFN0cnVjdDoKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInN0cnVjdC0iOworICAgICAg
ICBpZiAodHlwZU5hbWUpCisgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAqdHlwZU5hbWU7Cisg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
bWFuZ2xlZE5hbWUgKz0gJy0nOworICAgICAgICAgICAgICAgICgqc3RydWN0dXJlKVtpXS50eXBl
LT5idWlsZE1hbmdsZWROYW1lKG1hbmdsZWROYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1hbmdsZWROYW1l
ICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOworICAgIGlmIChp
c0FycmF5KCkpIHsKKyAgICAgICAgY2hhciBidWZbMjBdOworICAgICAgICBzcHJpbnRmKGJ1Ziwg
IiVkIiwgYXJyYXlTaXplKTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOworICAgICAgICBt
YW5nbGVkTmFtZSArPSBidWY7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKKyAgICB9Cit9
CisKK2ludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFnZXRTdHJ1
Y3QoKSkgeworICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIk5vdCBhIHN0cnVjdCIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3RydWN0dXJlU2l6ZSA9PSAwKQorICAgICAg
ICBmb3IgKFRUeXBlTGlzdDo6aXRlcmF0b3IgdGwgPSBnZXRTdHJ1Y3QoKS0+YmVnaW4oKTsgdGwg
IT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQorICAgICAgICAgICAgc3RydWN0dXJlU2l6ZSAr
PSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsKKworICAgIHJldHVybiBzdHJ1Y3R1cmVT
aXplOworfQorCisvLworLy8gRHVtcCBmdW5jdGlvbnMuCisvLworCit2b2lkIFRWYXJpYWJsZTo6
ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAoreworICAgIGluZm9TaW5rLmRlYnVnIDw8
IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8
PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNp
Y1N0cmluZygpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAgICBpbmZvU2luay5k
ZWJ1ZyA8PCAiWzBdIjsKKyAgICB9CisgICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKK30KKwor
dm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKK3sKKyAgICBp
bmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBl
LmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAi
XG4iOworfQorCit2b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0Cit7CisgICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKKyAgICBmb3IgKGl0
ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQp
LnNlY29uZC0+ZHVtcChpbmZvU2luayk7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJ
bmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50
TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgeworICAgICAgICBpbmZvU2luay5kZWJ1ZyA8
PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOworICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAo
aW5mb1NpbmspOworICAgIH0KK30KKworLy8KKy8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2lu
dGVycyB0byBkZWxldGUuCisvLworVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKK3sKKyAgICBmb3Ig
KFRQYXJhbUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGkgIT0gcGFyYW1l
dGVycy5lbmQoKTsgKytpKQorICAgICAgICBkZWxldGUgKCppKS50eXBlOworfQorCisvLworLy8g
U3ltYm9sIHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8gc3ltYm9scyB0aGF0
IGhhdmUgdG8gYmUgZGVsZXRlZC4KKy8vCitUU3ltYm9sVGFibGVMZXZlbDo6flRTeW1ib2xUYWJs
ZUxldmVsKCkKK3sKKyAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigp
OyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVsZXRlICgqaXQpLnNlY29uZDsK
K30KKworLy8KKy8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0aGUgdGFibGUgd2l0
aCB0aGUgbm9uLW1hbmdsZWQgbmFtZQorLy8gdG8gYmUgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQg
YnVpbHQtaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxvdworLy8gcGVyZm9ybWFuY2Ugb3BlcmF0
aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0CisvLyBsaXZlIGFj
cm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KKy8vCit2b2lkIFRTeW1ib2xUYWJsZUxl
dmVsOjpyZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkKK3sK
KyAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0OworICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBp
dCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkuc2Vjb25kLT5pc0Z1
bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2Fz
dDxURnVuY3Rpb24qPigoKml0KS5zZWNvbmQpOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5n
ZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi0+cmVsYXRlVG9PcGVy
YXRvcihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworVFN5bWJvbDo6VFN5bWJvbChjb25z
dCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5u
YW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30KKworVFZh
cmlhYmxlOjpUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAm
IHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAgIHR5cGUuY29weVR5cGUoY29weU9m
LnR5cGUsIHJlbWFwcGVyKTsKKyAgICB1c2VyVHlwZSA9IGNvcHlPZi51c2VyVHlwZTsKKyAgICAv
LyBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWwsIHVuaW9uQXJyYXkgYW5kIGFycmF5SW5m
b3JtYXRpb24gcG9pbnRlcnMgc2hvdWxkIGJlIE5VTEwKKyAgICBhc3NlcnQoY29weU9mLmFycmF5
SW5mb3JtYXRpb25UeXBlID09IDApOworICAgIGFycmF5SW5mb3JtYXRpb25UeXBlID0gMDsKKwor
ICAgIGlmIChjb3B5T2YudW5pb25BcnJheSkgeworICAgICAgICBhc3NlcnQoIWNvcHlPZi50eXBl
LmdldFN0cnVjdCgpKTsKKyAgICAgICAgYXNzZXJ0KGNvcHlPZi50eXBlLmdldE9iamVjdFNpemUo
KSA9PSAxKTsKKyAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICB1bmlvbkFycmF5WzBdID0gY29weU9mLnVuaW9uQXJyYXlbMF07CisgICAgfSBlbHNlCisg
ICAgICAgIHVuaW9uQXJyYXkgPSAwOworfQorCitUVmFyaWFibGUqIFRWYXJpYWJsZTo6Y2xvbmUo
VFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoKnRoaXMsIHJlbWFwcGVyKTsKKworICAgIHJldHVybiB2YXJpYWJsZTsKK30K
KworVEZ1bmN0aW9uOjpURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiBjb3B5T2YsIFRTdHJ1Y3R1
cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQoreworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY29weU9mLnBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgcGFyYW1ldGVycy5wdXNoX2JhY2socGFyYW0pOwor
ICAgICAgICBwYXJhbWV0ZXJzLmJhY2soKS5jb3B5UGFyYW0oY29weU9mLnBhcmFtZXRlcnNbaV0s
IHJlbWFwcGVyKTsKKyAgICB9CisKKyAgICByZXR1cm5UeXBlLmNvcHlUeXBlKGNvcHlPZi5yZXR1
cm5UeXBlLCByZW1hcHBlcik7CisgICAgbWFuZ2xlZE5hbWUgPSBjb3B5T2YubWFuZ2xlZE5hbWU7
CisgICAgb3AgPSBjb3B5T2Yub3A7CisgICAgZGVmaW5lZCA9IGNvcHlPZi5kZWZpbmVkOworfQor
CitURnVuY3Rpb24qIFRGdW5jdGlvbjo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7
CisgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKnRoaXMsIHJlbWFwcGVy
KTsKKworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworVFN5bWJvbFRhYmxlTGV2ZWwqIFRTeW1i
b2xUYWJsZUxldmVsOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKK3sKKyAgICBUU3lt
Ym9sVGFibGVMZXZlbCAqc3ltVGFibGVMZXZlbCA9IG5ldyBUU3ltYm9sVGFibGVMZXZlbCgpOwor
ICAgIHRMZXZlbDo6aXRlcmF0b3IgaXRlcjsKKyAgICBmb3IgKGl0ZXIgPSBsZXZlbC5iZWdpbigp
OyBpdGVyICE9IGxldmVsLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgc3ltVGFibGVMZXZlbC0+
aW5zZXJ0KCppdGVyLT5zZWNvbmQtPmNsb25lKHJlbWFwcGVyKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHN5bVRhYmxlTGV2ZWw7Cit9CisKK3ZvaWQgVFN5bWJvbFRhYmxlOjpjb3B5VGFibGUoY29u
c3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpCit7CisgICAgVFN0cnVjdHVyZU1hcCByZW1hcHBlcjsK
KyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvcHlPZi50YWJsZS5zaXplKCk7ICsraSkgeworICAgICAgICB0YWJsZS5wdXNo
X2JhY2soY29weU9mLnRhYmxlW2ldLT5jbG9uZShyZW1hcHBlcikpOworICAgIH0KKyAgICBmb3Io
IHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5wcmVjaXNpb25TdGFjay5zaXplKCk7IGkr
KykgeworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIGNvcHlPZi5wcmVjaXNpb25T
dGFja1tpXSApOworICAgIH0KK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9TWU1CT0xf
VEFCTEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisKKy8vCisv
LyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2UgZGVzaWduIGNoYXJhY3Rlcmlz
dGljczoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUg
bWFueSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBlZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxv
YWRpbmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1pbgorLy8gICBzeW1ib2xzLgor
Ly8KKy8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9u
IGEgdW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1ib2wgdGFibGUgbG9va3VwcyBhcmUgbmV2
ZXIgYW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAgYSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBz
dHJ1Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1i
b2wgdGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKKy8vICAgb2Ygc3ltYm9sIHRhYmxlcy4g
IFNlYXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0cyBnb2luZyBpbnRvCisvLyAg
IHRoZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBDb21waWxlIHRpbWUgY29uc3RhbnQgc3lt
Ym9scyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAgIGluIHRoZSBzeW1ib2wgdGFibGUuICBU
aGUgcGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBwYXJzZQorLy8gICB0aW1lLCBp
bmNsdWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29uc3RhbnQgcHJvcGFnYXRpb24u
CisvLworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRp
b25zICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUgdHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisKKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCisv
LworLy8gU3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1aWxkIGZ1bmN0aW9ucyBvciB2YXJpYWJs
ZXMgb3V0IG9mIHRoZXNlLi4uKQorLy8KK2NsYXNzIFRTeW1ib2wgeyAgICAKK3B1YmxpYzoKKyAg
ICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisgICAgVFN5
bWJvbChjb25zdCBUU3RyaW5nICpuKSA6ICBuYW1lKG4pIHsgfQorICAgIHZpcnR1YWwgflRTeW1i
b2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdzIGZyb20gdGhlIHBvb2wgKi8gfQorICAg
IGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiAqbmFtZTsgfQorICAgIHZp
cnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXRO
YW1lKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7IH0KKyAg
ICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQorICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0gMDsJCisgICAgVFN5bWJv
bChjb25zdCBUU3ltYm9sJik7CisgICAgdmlydHVhbCBUU3ltYm9sKiBjbG9uZShUU3RydWN0dXJl
TWFwJiByZW1hcHBlcikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgVFN0cmluZyAqbmFt
ZTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pcXVlSWQ7ICAgICAgLy8gRm9yIHJlYWwgY29tcGFyaW5n
IGR1cmluZyBjb2RlIGdlbmVyYXRpb24KK307CisKKy8vCisvLyBWYXJpYWJsZSBjbGFzcywgbWVh
bmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rpb24uCisvLyAKKy8vIFRoZXJlIGNvdWxk
IGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZvciBDb25zdGFudCB2YXJpYWJsZXM7Cisv
LyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0LCAob3Igbm9uZSkgaXMgY29ycmVjdCBm
b3IKKy8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0J3MgZWFzeSB0byBkbyB0aGlzIHdheSwg
YW5kIGRvZXNuJ3QKKy8vIHNlZW0gd29ydGggaGF2aW5nIHNlcGFyYXRlIGNsYXNzZXMsIGFuZCAi
Z2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KKy8vIGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRp
ZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNvIHRoaXMgaXMgCisvLyBqdXN0IHNpbXBs
ZSBhbmQgcHJhZ21hdGljLgorLy8KK2NsYXNzIFRWYXJpYWJsZSA6IHB1YmxpYyBUU3ltYm9sIHsK
K3B1YmxpYzoKKyAgICBUVmFyaWFibGUoY29uc3QgVFN0cmluZyAqbmFtZSwgY29uc3QgVFR5cGUm
IHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChuYW1lKSwgdHlwZSh0KSwgdXNlclR5cGUo
dVQpLCB1bmlvbkFycmF5KDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSB7IH0KKyAgICB2aXJ0
dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5cGUmIGdldFR5cGUoKSB7IHJldHVybiB0eXBl
OyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsg
fQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CisgICAg
dm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5jaGFuZ2VR
dWFsaWZpZXIocXVhbGlmaWVyKTsgfQorICAgIHZvaWQgdXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5
cGUoVFR5cGUgKnQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CisgICAgVFR5cGUqIGdl
dEFycmF5SW5mb3JtYXRpb25UeXBlKCkgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworCisg
ICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkKKyAgICB7IAorICAgICAgICBpZiAo
IXVuaW9uQXJyYXkpCisgICAgICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
dHlwZS5nZXRPYmplY3RTaXplKCldOworCisgICAgICAgIHJldHVybiB1bmlvbkFycmF5OworICAg
IH0KKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJu
IHVuaW9uQXJyYXk7IH0KKworICAgIHZvaWQgc2hhcmVDb25zdFBvaW50ZXIoIENvbnN0YW50VW5p
b24gKmNvbnN0QXJyYXkpCisgICAgeworICAgICAgICBkZWxldGUgdW5pb25BcnJheTsKKyAgICAg
ICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAgICB9CisgICAgVFZhcmlhYmxlKGNvbnN0
IFRWYXJpYWJsZSYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsgLy8gY29weSBjb25zdHJ1Y3Rv
cgorICAgIHZpcnR1YWwgVFZhcmlhYmxlKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7
CisKK3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0eXBlOworICAgIGJvb2wgdXNlclR5cGU7CisgICAg
Ly8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxvY2F0b3Igd2lsbCBmcmVlIHRoZSBtZW1v
cnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAvLyB3aGVuIHRoaXMgb2JqZWN0IGlzIGRl
c3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CisgICAgVFR5cGUgKmFycmF5
SW5mb3JtYXRpb25UeXBlOyAgLy8gdGhpcyBpcyB1c2VkIGZvciB1cGRhdGluZyBtYXhBcnJheVNp
emUgaW4gYWxsIHRoZSByZWZlcmVuY2VzIHRvIGEgZ2l2ZW4gc3ltYm9sCit9OworCisvLworLy8g
VGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xzIGFuZCB0aGUgcGFyc2VyIHdpbGwgbmVl
ZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24gcGFyYW1ldGVyLgor
Ly8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3RyaW5nICpuYW1lOworICAgIFRUeXBlKiB0
eXBlOworICAgIHZvaWQgY29weVBhcmFtKGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtLCBUU3RydWN0
dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAgIG5hbWUgPSBOZXdQb29sVFN0cmluZyhw
YXJhbS5uYW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlwZSA9IHBhcmFtLnR5cGUtPmNsb25lKHJl
bWFwcGVyKTsKKyAgICB9Cit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBh
IHN5bWJvbC4gIAorLy8KK2NsYXNzIFRGdW5jdGlvbiA6IHB1YmxpYyBUU3ltYm9sIHsKK3B1Ymxp
YzoKKyAgICBURnVuY3Rpb24oVE9wZXJhdG9yIG8pIDoKKyAgICAgICAgVFN5bWJvbCgwKSwKKyAg
ICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpKSwKKyAgICAgICAg
b3AobyksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIFRGdW5jdGlvbihjb25zdCBU
U3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlwZSwgVE9wZXJhdG9yIHRPcCA9IEVPcE51bGwpIDog
CisgICAgICAgIFRTeW1ib2wobmFtZSksIAorICAgICAgICByZXR1cm5UeXBlKHJldFR5cGUpLAor
ICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rpb246Om1hbmdsZU5hbWUoKm5hbWUpKSwKKyAgICAg
ICAgb3AodE9wKSwKKyAgICAgICAgZGVmaW5lZChmYWxzZSkgeyB9CisgICAgdmlydHVhbCB+VEZ1
bmN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9ICAgIAorCisgICAgc3RhdGljIFRTdHJpbmcgbWFuZ2xlTmFtZShjb25zdCBUU3RyaW5n
JiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygnOyB9CisgICAgc3RhdGljIFRTdHJpbmcgdW5tYW5n
bGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWROYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIoKSwgbWFuZ2xlZE5hbWUuZmluZF9maXJzdF9vZign
KCcpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFBhcmFtZXRlcihUUGFyYW1ldGVyJiBwKSAKKyAg
ICB7IAorICAgICAgICBwYXJhbWV0ZXJzLnB1c2hfYmFjayhwKTsKKyAgICAgICAgbWFuZ2xlZE5h
bWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+Z2V0TWFuZ2xlZE5hbWUoKTsKKyAgICB9CisKKyAg
ICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1hbmdsZWRO
YW1lOyB9CisgICAgY29uc3QgVFR5cGUmIGdldFJldHVyblR5cGUoKSBjb25zdCB7IHJldHVybiBy
ZXR1cm5UeXBlOyB9CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKFRPcGVyYXRvciBvKSB7IG9w
ID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdEluT3AoKSBjb25zdCB7IHJldHVybiBvcDsg
fQorICAgIHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5lZCA9IHRydWU7IH0KKyAgICBib29sIGlz
RGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKworICAgIGludCBnZXRQYXJhbUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwYXJhbWV0ZXJzLnNpemUoKSk7IH0gICAg
CisgICAgVFBhcmFtZXRlciYgb3BlcmF0b3IgW10oaW50IGkpICAgICAgIHsgcmV0dXJuIHBhcmFt
ZXRlcnNbaV07IH0KKyAgICBjb25zdCBUUGFyYW1ldGVyJiBvcGVyYXRvciBbXShpbnQgaSkgY29u
c3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoVElu
Zm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgVEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiYs
IFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKyAgICB2aXJ0dWFsIFRGdW5jdGlvbiogY2xvbmUo
VFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBUVmVj
dG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAgVFBhcmFtTGlzdCBwYXJhbWV0ZXJzOwor
ICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKKyAgICBUT3Bl
cmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsKKworCitjbGFzcyBUU3ltYm9sVGFibGVM
ZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFwPFRTdHJpbmcsIFRTeW1ib2wqPiB0TGV2
ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90eXBlIHRMZXZlbFBhaXI7CisgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwgYm9vbD4gdEluc2VydFJlc3VsdDsKKwor
ICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKyAgICBU
U3ltYm9sVGFibGVMZXZlbCgpIHsgfQorICAgIH5UU3ltYm9sVGFibGVMZXZlbCgpOworCisgICAg
Ym9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKSAKKyAgICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8gdGhlIHRhYmxlCisg
ICAgICAgIC8vCisgICAgICAgIHRJbnNlcnRSZXN1bHQgcmVzdWx0OworICAgICAgICByZXN1bHQg
PSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihzeW1ib2wuZ2V0TWFuZ2xlZE5hbWUoKSwgJnN5bWJv
bCkpOworCisgICAgICAgIHJldHVybiByZXN1bHQuc2Vjb25kOworICAgIH0KKworICAgIFRTeW1i
b2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRMZXZl
bDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQg
PT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGV2ZWwuYmVnaW4oKTsKKyAg
ICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25z
dCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmlu
Zm9TaW5rKSBjb25zdDsKKyAgICBUU3ltYm9sVGFibGVMZXZlbCogY2xvbmUoVFN0cnVjdHVyZU1h
cCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAgdExldmVsIGxldmVsOworfTsKKworY2xh
c3MgVFN5bWJvbFRhYmxlIHsKK3B1YmxpYzoKKyAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlk
KDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIGNhbm5v
dCBiZSB1c2VkIHVudGlsIHB1c2goKSBpcyBjYWxsZWQsIGJ1dAorICAgICAgICAvLyB0aGUgbGFj
ayBvZiBhbiBpbml0aWFsIGNhbGwgdG8gcHVzaCgpIGNhbiBiZSB1c2VkIHRvIGRldGVjdAorICAg
ICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRo
IGJ1aWx0LWlucy4KKyAgICAgICAgLy8KKyAgICB9CisKKyAgICBUU3ltYm9sVGFibGUoVFN5bWJv
bFRhYmxlJiBzeW1UYWJsZSkKKyAgICB7CisgICAgICAgIHRhYmxlLnB1c2hfYmFjayhzeW1UYWJs
ZS50YWJsZVswXSk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hfYmFjayggc3ltVGFibGUu
cHJlY2lzaW9uU3RhY2tbMF0gKTsKKyAgICAgICAgdW5pcXVlSWQgPSBzeW1UYWJsZS51bmlxdWVJ
ZDsKKyAgICB9CisKKyAgICB+VFN5bWJvbFRhYmxlKCkKKyAgICB7CisgICAgICAgIC8vIGxldmVs
IDAgaXMgYWx3YXlzIGJ1aWx0IEluIHN5bWJvbHMsIHNvIHdlIG5ldmVyIHBvcCB0aGF0IG91dAor
ICAgICAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHBvcCgpOworICAg
IH0KKworICAgIC8vCisgICAgLy8gV2hlbiB0aGUgc3ltYm9sIHRhYmxlIGlzIGluaXRpYWxpemVk
IHdpdGggdGhlIGJ1aWx0LWlucywgdGhlcmUgc2hvdWxkCisgICAgLy8gJ3B1c2gnIGNhbGxzLCBz
byB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNoYWRlcgorICAgIC8vIGds
b2JhbHMgYXJlIGF0IGxldmVsIDEuCisgICAgLy8KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biB0YWJsZS5zaXplKCkgPT0gMDsgfQorICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJldHVy
biBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHx8IGF0RHluYW1pY0J1aWx0SW5MZXZlbCgpOyB9Cisg
ICAgYm9vbCBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAx
OyB9CQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAz
OyB9CisgICAgdm9pZCBwdXNoKCkKKyAgICB7IAorICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3
IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKCBQ
cmVjaXNpb25TdGFja0xldmVsKCkgKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcCgpCisgICAgeyAK
KyAgICAgICAgZGVsZXRlIHRhYmxlW2N1cnJlbnRMZXZlbCgpXTsgCisgICAgICAgIHRhYmxlLnBv
cF9iYWNrKCk7IAorICAgICAgICBwcmVjaXNpb25TdGFjay5wb3BfYmFjaygpOworICAgIH0KKwor
ICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5bWJvbCkKKyAgICB7CisgICAgICAgIHN5bWJvbC5z
ZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKKyAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZl
bCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgfQorCisgICAgVFN5bWJvbCogZmluZChjb25zdCBU
U3RyaW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCisg
ICAgeworICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKKyAgICAgICAgVFN5bWJv
bCogc3ltYm9sOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZl
bF0tPmZpbmQobmFtZSk7CisgICAgICAgICAgICAtLWxldmVsOworICAgICAgICB9IHdoaWxlIChz
eW1ib2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKKyAgICAgICAgbGV2ZWwrKzsKKyAgICAgICAgaWYg
KGJ1aWx0SW4pCisgICAgICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7CisgICAgICAgIGlm
IChzYW1lU2NvcGUpCisgICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExl
dmVsKCk7CisgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisgICAgVFN5bWJvbFRhYmxl
TGV2ZWwqIGdldEdsb2JhbExldmVsKCkgeyBhc3NlcnQodGFibGUuc2l6ZSgpID49IDMpOyByZXR1
cm4gdGFibGVbMl07IH0KKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKSB7IHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsg
fQorICAgIGludCBnZXRNYXhTeW1ib2xJZCgpIHsgcmV0dXJuIHVuaXF1ZUlkOyB9CisgICAgdm9p
ZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OworICAgIHZvaWQgY29weVRhYmxlKGNv
bnN0IFRTeW1ib2xUYWJsZSYgY29weU9mKTsKKworICAgIHZvaWQgc2V0RGVmYXVsdFByZWNpc2lv
biggVEJhc2ljVHlwZSB0eXBlLCBUUHJlY2lzaW9uIHByZWMgKXsKKyAgICAgICAgaWYoIHR5cGUg
IT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm47IC8vIE9ubHkgc2V0IGRlZmF1
bHQgcHJlY2lzaW9uIGZvciBpbnQvZmxvYXQKKyAgICAgICAgaW50IGluZGV4T2ZMYXN0RWxlbWVu
dCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7CisgICAgICAg
IHByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF1bdHlwZV0gPSBwcmVjOyAvLyBVc2Vz
IG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQorICAgIH0KKwor
ICAgIC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBx
dWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQorICAgIFRQcmVjaXNpb24gZ2V0
RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlKXsKKyAgICAgICAgaWYoIHR5cGUgIT0g
RWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1cm4gRWJwVW5kZWZpbmVkOworICAgICAg
ICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAx
OworICAgICAgICBhc3NlcnQoIGxldmVsID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3Vs
ZCBub3QgaGFwcGVuLgorICAgICAgICBQcmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsK
KyAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZp
bmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwor
ICAgICAgICB3aGlsZSggbGV2ZWwgPj0gMCApeworICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25T
dGFja1tsZXZlbF0uZmluZCggdHlwZSApOworICAgICAgICAgICAgaWYoIGl0ICE9IHByZWNpc2lv
blN0YWNrW2xldmVsXS5lbmQoKSApeworICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs
ZXZlbC0tOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwcmVjOworICAgIH0KKworcHJvdGVj
dGVkOiAgICAKKyAgICBpbnQgY3VycmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQorICAgIGJvb2wgYXREeW5hbWljQnVpbHRJbkxl
dmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDI7IH0KKworICAgIHN0ZDo6dmVjdG9yPFRT
eW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CisgICAgdHlwZWRlZiBzdGQ6Om1hcDwgVEJhc2ljVHlw
ZSwgVFByZWNpc2lvbiA+IFByZWNpc2lvblN0YWNrTGV2ZWw7CisgICAgc3RkOjp2ZWN0b3I8IFBy
ZWNpc2lvblN0YWNrTGV2ZWwgPiBwcmVjaXNpb25TdGFjazsKKyAgICBpbnQgdW5pcXVlSWQ7ICAg
ICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlvbgorfTsKKwor
I2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKworVHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JH
TFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcihsYW5n
LCBzcGVjKSB7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckdMU0w6OmNvbXBpbGUoVEludGVybU5vZGUq
IHJvb3QpIHsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKGluZm9TaW5rLm9iaik7CisgICAg
cm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworCisgICAgcmV0dXJuIHRydWU7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFuc2xhdG9yR0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIg
eworcHVibGljOgorICAgIFRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMg
c3BlYyk7CisgICAgdmlydHVhbCBib29sIGNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpOworfTsK
KworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCisK
KyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgiCisKK1RyYW5zbGF0b3JITFNMOjpUcmFu
c2xhdG9ySExTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpCisgICAgOiBUQ29tcGls
ZXIobGFuZywgc3BlYykKK3sKK30KKworYm9vbCBUcmFuc2xhdG9ySExTTDo6Y29tcGlsZShUSW50
ZXJtTm9kZSAqcm9vdCkKK3sKKyAgICBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCk7CisgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJz
ZUNvbnRleHQpOworCisgICAgb3V0cHV0SExTTC5vdXRwdXQoKTsKKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUkhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVi
bGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJhbnNsYXRvckhMU0woRVNoTGFuZ3VhZ2Ug
bGFuZywgRVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9k
ZSogcm9vdCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UeXBl
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUgX1RZUEVTX0lOQ0xVREVECisKKyNpbmNs
dWRlICJjb21waWxlci9CYXNlVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIK
KyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gTmVlZCB0byBoYXZlIGFzc29j
aWF0aW9uIG9mIGxpbmUgbnVtYmVycyB0byB0eXBlcyBpbiBhIGxpc3QgZm9yIGJ1aWxkaW5nIHN0
cnVjdHMuCisvLworY2xhc3MgVFR5cGU7CitzdHJ1Y3QgVFR5cGVMaW5lIHsKKyAgICBUVHlwZSog
dHlwZTsKKyAgICBpbnQgbGluZTsKK307Cit0eXBlZGVmIFRWZWN0b3I8VFR5cGVMaW5lPiBUVHlw
ZUxpc3Q7CisKK2lubGluZSBUVHlwZUxpc3QqIE5ld1Bvb2xUVHlwZUxpc3QoKQoreworICAgIHZv
aWQqIG1lbW9yeSA9IEdsb2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRUeXBlTGlz
dCkpOworICAgIHJldHVybiBuZXcobWVtb3J5KSBUVHlwZUxpc3Q7Cit9CisKKy8vCisvLyBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlhY2Mgc3RhY2ssICBJdCBj
YW4ndCBoYXZlCisvLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5vbi10cml2aWFsIGNvbnN0
cnVjdG9ycy4gIEl0IHNob3VsZAorLy8ganVzdCBiZSB1c2VkIHdoaWxlIHJlY29nbml6aW5nIHRo
ZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCisvLyBjb3VsZCBiZSB1c2Vk
LCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBvdmVy
aGVhZC4KKy8vCisvLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVyZSBpcyBubyBhY3R1YWwg
YXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKKy8vIG1hdGNoIHVwIG9yIGFyZSBuYW1lIHRoZSBz
YW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KKy8vCitjbGFzcyBUUHVibGljVHlwZSB7CitwdWJs
aWM6CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAg
IFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAgICAvLyBzaXplIG9m
IHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9vbCBtYXRyaXg7Cisg
ICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBlKiB1c2VyRGVmOwor
ICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlm
aWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7CisgICAgICAgIHF1
YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKKyAgICAgICAg
c2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBhcnJheSA9IGZhbHNl
OworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0gMDsKKyAgICAgICAg
bGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGludCBzLCBib29sIG0g
PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBtYXRyaXggPSBtOwor
ICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCisgICAgeworICAg
ICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAgfQorfTsKKwordHlw
ZWRlZiBUTWFwPFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+IFRTdHJ1Y3R1cmVNYXA7Cit0eXBlZGVm
IFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0ZXJhdG9yIFRTdHJ1Y3R1cmVNYXBJdGVy
YXRvcjsKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGluZ3MgdGhhdCBoYXZlIGEgdHlwZS4KKy8v
CitjbGFzcyBUVHlwZSB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShH
bG9iYWxQb29sQWxsb2NhdG9yKQorICAgIGV4cGxpY2l0IFRUeXBlKFRCYXNpY1R5cGUgdCwgVFBy
ZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIGludCBzID0gMSwgYm9vbCBt
ID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwg
YXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1h
dGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBleHBsaWNpdCBUVHlwZShjb25zdCBUUHVi
bGljVHlwZSAmcCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUocC50eXBlKSwg
cHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNp
emUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlT
aXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVy
ZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxk
TmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC51c2VyRGVmKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSA9
IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgZXhwbGljaXQgVFR5cGUoVFR5cGVMaXN0KiB1c2VyRGVmLCBjb25zdCBUU3RyaW5nJiBu
LCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSh1c2VyRGVmKSwgc3RydWN0dXJl
U2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGRO
YW1lKDApLCBtYW5nbGVkKDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICBleHBsaWNpdCBUVHlwZSgpIHt9CisgICAgdmlydHVhbCB+VFR5cGUoKSB7
fQorCisgICAgVFR5cGUoY29uc3QgVFR5cGUmIHR5cGUpIHsgKnRoaXMgPSB0eXBlOyB9CisKKyAg
ICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFw
cGVyKQorICAgIHsKKyAgICAgICAgdHlwZSA9IGNvcHlPZi50eXBlOworICAgICAgICBwcmVjaXNp
b24gPSBjb3B5T2YucHJlY2lzaW9uOworICAgICAgICBxdWFsaWZpZXIgPSBjb3B5T2YucXVhbGlm
aWVyOworICAgICAgICBzaXplID0gY29weU9mLnNpemU7CisgICAgICAgIG1hdHJpeCA9IGNvcHlP
Zi5tYXRyaXg7CisgICAgICAgIGFycmF5ID0gY29weU9mLmFycmF5OworICAgICAgICBhcnJheVNp
emUgPSBjb3B5T2YuYXJyYXlTaXplOworCisgICAgICAgIFRTdHJ1Y3R1cmVNYXBJdGVyYXRvciBp
dGVyOworICAgICAgICBpZiAoY29weU9mLnN0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYgKChp
dGVyID0gcmVtYXBwZXIuZmluZChzdHJ1Y3R1cmUpKSA9PSByZW1hcHBlci5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbmV3IHN0cnVjdHVyZSBoZXJlCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlID0gTmV3UG9vbFRUeXBlTGlzdCgpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnN0cnVjdHVyZS0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAg
ICAgICAgICB0eXBlTGluZS5saW5lID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtpXS5saW5lOworICAg
ICAgICAgICAgICAgICAgICB0eXBlTGluZS50eXBlID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtpXS50
eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+cHVz
aF9iYWNrKHR5cGVMaW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSAwOworCisgICAgICAg
IGZpZWxkTmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5T2YuZmllbGROYW1lKQorICAgICAgICAg
ICAgZmllbGROYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLmZpZWxkTmFtZS0+Y19zdHIoKSk7
CisgICAgICAgIHR5cGVOYW1lID0gMDsKKyAgICAgICAgaWYgKGNvcHlPZi50eXBlTmFtZSkKKyAg
ICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLnR5cGVOYW1lLT5jX3N0
cigpKTsKKworICAgICAgICBtYW5nbGVkID0gMDsKKyAgICAgICAgaWYgKGNvcHlPZi5tYW5nbGVk
KQorICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5tYW5nbGVkLT5j
X3N0cigpKTsKKworICAgICAgICBzdHJ1Y3R1cmVTaXplID0gY29weU9mLnN0cnVjdHVyZVNpemU7
CisgICAgICAgIG1heEFycmF5U2l6ZSA9IGNvcHlPZi5tYXhBcnJheVNpemU7CisgICAgICAgIGFz
c2VydChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7CisgICAgICAgIGFycmF5SW5m
b3JtYXRpb25UeXBlID0gMDsgLy8gYXJyYXlJbmZvcm1hdGlvblR5cGUgc2hvdWxkIG5vdCBiZSBz
ZXQgZm9yIGJ1aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVsCisgICAgfQorCisgICAgVFR5cGUqIGNs
b25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgVFR5cGUgKm5ld1R5
cGUgPSBuZXcgVFR5cGUoKTsKKyAgICAgICAgbmV3VHlwZS0+Y29weVR5cGUoKnRoaXMsIHJlbWFw
cGVyKTsKKworICAgICAgICByZXR1cm4gbmV3VHlwZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBib29sIG0sIGJvb2wgYSwgaW50IGFTID0g
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGUgPSB0OyBzaXplID0gczsgbWF0
cml4ID0gbTsgYXJyYXkgPSBhOyBhcnJheVNpemUgPSBhUzsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRUeXBlKFRCYXNpY1R5cGUgdCwgaW50IHMsIGJvb2wgbSwgVFR5cGUqIHVzZXJEZWYgPSAwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZSA9IHQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dHJpeCA9IG07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlckRlZikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSB1c2VyRGVmLT5nZXRT
dHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFycmF5IGlu
Zm9ybWF0aW9uIGludGFjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgdmly
dHVhbCB2b2lkIHNldFR5cGVOYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgdHlwZU5hbWUgPSBOZXdQ
b29sVFN0cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpZWxkTmFtZShj
b25zdCBUU3RyaW5nJiBuKSB7IGZpZWxkTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVybiAqdHlwZU5hbWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRGaWVsZE5hbWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXNzZXJ0KGZpZWxkTmFtZSk7CisgICAgICAgIHJldHVybiAqZmllbGRO
YW1lOworICAgIH0KKworICAgIHZpcnR1YWwgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigp
IGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZpcnR1YWwgVFF1YWxpZmllciBnZXRR
dWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y2hhbmdlUHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBwcmVjaXNpb24gPSBwOyB9CisgICAgdmly
dHVhbCB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVyID0gcTsg
fQorCisgICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIHR5cGUK
KyAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7IH0K
KworICAgIC8vIEZ1bGwtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlw
ZQorICAgIHZpcnR1YWwgaW50IGdldEluc3RhbmNlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobWF0cml4KQorICAgICAgICAgICAgcmV0dXJuIHNpemUgKiBzaXplOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxz
ZTsgfQorICAgIGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9
CisgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQorICAg
IHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsg
fQorICAgIHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9
CisgICAgaW50IGdldE1heEFycmF5U2l6ZSAoKSBjb25zdCB7IHJldHVybiBtYXhBcnJheVNpemU7
IH0KKyAgICB2b2lkIGNsZWFyQXJyYXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUg
PSAwOyBtYXhBcnJheVNpemUgPSAwOyB9CisgICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9uVHlw
ZShUVHlwZSogdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KKyAgICBUVHlwZSogZ2V0
QXJyYXlJbmZvcm1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlw
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAx
ICYmICFtYXRyaXg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVy
biBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0dXJlOyB9CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5cGUgdCkgeworICAgICAgICBzd2l0Y2ggKHQp
IHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1
cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgICAg
ICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVy
biAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAg
ICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7CisgICAgICAgIH0K
KyAgICB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBU
VHlwZTo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNp
b25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24p
OyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
OjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQorICAgIFRUeXBlTGlzdCogZ2V0U3Ry
dWN0KCkgeyByZXR1cm4gc3RydWN0dXJlOyB9CisKKyAgICBpbnQgZ2V0T2JqZWN0U2l6ZSgpIGNv
bnN0CisgICAgeworICAgICAgICBpbnQgdG90YWxTaXplOworCisgICAgICAgIGlmIChnZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBnZXRTdHJ1Y3RT
aXplKCk7CisgICAgICAgIGVsc2UgaWYgKG1hdHJpeCkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSA9
IHNpemUgKiBzaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b3RhbFNpemUgPSBzaXpl
OworCisgICAgICAgIGlmIChpc0FycmF5KCkpCisgICAgICAgICAgICB0b3RhbFNpemUgKj0gc3Rk
OjptYXgoZ2V0QXJyYXlTaXplKCksIGdldE1heEFycmF5U2l6ZSgpKTsKKworICAgICAgICByZXR1
cm4gdG90YWxTaXplOworICAgIH0KKworICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7Cisg
ICAgICAgIGlmICghbWFuZ2xlZCkgeworICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3Ry
aW5nKCIiKTsKKyAgICAgICAgICAgIGJ1aWxkTWFuZ2xlZE5hbWUoKm1hbmdsZWQpOworICAgICAg
ICAgICAgKm1hbmdsZWQgKz0gJzsnIDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAqbWFu
Z2xlZDsKKyAgICB9CisgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29uc3QgVFR5cGUmIHJpZ2h0
KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICYmCisg
ICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCisgICAgICAgICAgICAg
ICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5
cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlw
ZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCisgICAg
ICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgICAgICAgICAg
ICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0
LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1
cmU7CisgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBxdWFsaWZpZXIsIGl0J3Mgbm90IGV2ZXIg
d2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgorICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShyaWdo
dCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qg
eworICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1cm4gdHlwZSA8IHJpZ2h0LnR5
cGU7CisgICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJldHVybiBzaXplIDwgcmlnaHQu
c2l6ZTsKKyAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRyaXgpIHJldHVybiBtYXRyaXgg
PCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChhcnJheSAhPSByaWdodC5hcnJheSkgcmV0dXJu
IGFycmF5IDwgcmlnaHQuYXJyYXk7CisgICAgICAgIGlmIChhcnJheVNpemUgIT0gcmlnaHQuYXJy
YXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlTaXplOworICAgICAgICBpZiAo
c3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0cnVjdHVyZSA8IHJpZ2h0LnN0
cnVjdHVyZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRTdHJpbmcgZ2V0
Q29tcGxldGVTdHJpbmcoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgYnVpbGRNYW5n
bGVkTmFtZShUU3RyaW5nJik7CisgICAgaW50IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKworICAg
IFRCYXNpY1R5cGUgdHlwZSAgICAgIDogNjsKKyAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAg
ICBUUXVhbGlmaWVyIHF1YWxpZmllciA6IDc7CisgICAgaW50IHNpemUgICAgICAgICAgICAgOiA4
OyAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgdW5z
aWduZWQgaW50IG1hdHJpeCAgOiAxOworICAgIHVuc2lnbmVkIGludCBhcnJheSAgIDogMTsKKyAg
ICBpbnQgYXJyYXlTaXplOworCisgICAgVFR5cGVMaXN0KiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1
bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIG11dGFibGUgaW50IHN0cnVjdHVyZVNpemU7Cisg
ICAgaW50IG1heEFycmF5U2l6ZTsKKyAgICBUVHlwZSogYXJyYXlJbmZvcm1hdGlvblR5cGU7Cisg
ICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgbmFt
ZXMKKyAgICBUU3RyaW5nICptYW5nbGVkOworICAgIFRTdHJpbmcgKnR5cGVOYW1lOyAgICAgICAg
ICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQorfTsKKworI2VuZGlmIC8vIF9UWVBF
U19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9VbmZvbGRTZWxlY3QuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCituYW1lc3BhY2Ugc2gKK3sKK1VuZm9sZFNl
bGVjdDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91
dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRITFNMKG91dHB1dEhMU0wpCit7
CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30KKwordm9pZCBVbmZvbGRTZWxlY3Q6OnRyYXZl
cnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1UZW1wb3JhcnlJbmRleCsrOworICAgIG5v
ZGUtPnRyYXZlcnNlKHRoaXMpOworfQorCitib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5r
QmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlTdHJlYW0oKTsKKworICAgIGlmIChub2Rl
LT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBpbnQgaSA9IG1UZW1wb3Jh
cnlJbmRleCsrOworCisgICAgICAgIG91dCA8PCBtT3V0cHV0SExTTC0+dHlwZVN0cmluZyhub2Rl
LT5nZXRUeXBlKCkpIDw8ICIgdCIgPDwgaSA8PCAiO1xuIjsKKworICAgICAgICBub2RlLT5nZXRD
b25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiaWYoIjsKKyAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAg
b3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1
ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIiAgICB0IiA8PCBpIDw8
ICIgPSAiOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhM
U0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAg
ICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG5vZGUtPmdl
dENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgdCIgPDwg
aSA8PCAiID0gIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0
cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisK
KyAgICAgICAgbVRlbXBvcmFyeUluZGV4LS07CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitpbnQgVW5mb2xkU2VsZWN0OjpnZXRUZW1wb3JhcnlJbmRleCgpCit7CisgICAgcmV0dXJu
IG1UZW1wb3JhcnlJbmRleDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
ZWxlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfVU5GT0xEU0VMRUNUX0hfCisjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
UGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBPdXRwdXRITFNMOworCitj
bGFzcyBVbmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6
CisgICAgVW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQgJmNvbnRleHQsIE91dHB1dEhMU0wgKm91
dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAg
Ym9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSk7
CisKKyAgICBpbnQgZ2V0VGVtcG9yYXJ5SW5kZXgoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVFBh
cnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0SExTTCAqY29uc3QgbU91dHB1dEhMU0w7
CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsKK30KKworI2VuZGlmICAgLy8gQ09NUElM
RVJfVU5GT0xEU0VMRUNUX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRp
ZXMuCisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CisKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVyTGVuID0gMTAyNDsKKworI2lmZGVmIFRS
QUNFX0VOQUJMRUQKK2V4dGVybiAiQyIgewordm9pZCBUcmFjZShjb25zdCBjaGFyICpmb3JtYXQs
IC4uLikgeworICAgIGlmICghZm9ybWF0KSByZXR1cm47CisKKyAgICBUUGFyc2VDb250ZXh0KiBw
YXJzZUNvbnRleHQgPSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAocGFyc2VDb250
ZXh0KSB7CisgICAgICAgIGNoYXIgYnVmW2tUcmFjZUJ1ZmZlckxlbl07CisgICAgICAgIHZhX2xp
c3QgYXJnczsKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICAgICAgdnNucHJp
bnRmKGJ1Ziwga1RyYWNlQnVmZmVyTGVuLCBmb3JtYXQsIGFyZ3MpOworICAgICAgICB2YV9lbmQo
YXJncyk7CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbmZvU2luay5kZWJ1ZyA8PCBidWY7Cisg
ICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9kZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVn
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NUElMRVJfREVCVUdf
SF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisj
aWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJMRUQgIC8vIGRlZmluZSB0byBlbmFibGUg
ZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8vIF9ERUJVRworCisvLyBPdXRwdXRzIHRl
eHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNFX0VOQUJMRUQKKworI2lmZGVmICBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCit2b2lkIFRyYWNl
KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBUUkFDRV9FTkFCTEVECisKKyNkZWZpbmUg
VHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAvLyBUUkFDRV9FTkFCTEVECisKKy8vIEEg
bWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRo
ZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgXAorICAgIGlmKCEo
ZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFzc2VydCBmYWlsZWQ6ICVzKCVkKTogIiNl
eHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhw
cmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBc
CisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9O
X18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUoMCkKKworI2Rl
ZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRyYWNlKCJVbnJlYWNoYWJsZSByZWFjaGVk
OiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGZhbHNl
KTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBDT01QSUxFUl9ERUJVR19IXworCkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy5sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwMCBAQAorLyoKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisqLworLyogQmFzZWQgb24KK0FOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbgor
CitJbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgdGhpcyBMZXggc3BlY2lmaWNhdGlvbiB0b2dl
dGhlciB3aXRoIGEgWWFjYyAKK2dyYW1tYXIgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMg
ZHJhZnQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCAKK2JvdGggdG8gbmV0LnNvdXJjZXMgaW4g
MTk4NzsgdGhhdCBvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgCit0byBxdWVz
dGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMgRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRw
LnV1Lm5ldCwgCitmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLiAKKwor
SSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBT
dGFuZGFyZCBncmFtbWFyIAorYXMgcG9zc2libGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3Ug
ZGlzY292ZXIgZGlzY3JlcGFuY2llcy4gCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUgCisqLworCitE
ICAgICAgICAgICBbMC05XQorTCAgICAgICAgICAgW2EtekEtWl9dCitIICAgICAgICAgICBbYS1m
QS1GMC05XQorRSAgICAgICAgICAgW0VlXVsrLV0/e0R9KworTyAgICAgICAgICAgWzAtN10KKwor
JW9wdGlvbiBub3VucHV0IAorJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJnbHNs
YW5nX3RhYi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikKKyNlbmRpZgorCitpbnQgeXlfaW5wdXQo
Y2hhciogYnVmLCBpbnQgbWF4X3NpemUpOworCitleHRlcm4gaW50IHl5cGFyc2Uodm9pZCopOwor
I2RlZmluZSBZWV9ERUNMIGludCB5eWxleChZWVNUWVBFKiBweXlsdmFsLCB2b2lkKiBwYXJzZUNv
bnRleHRMb2NhbCkKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgqKChUUGFyc2VDb250ZXh0KikocGFy
c2VDb250ZXh0TG9jYWwpKSkKKyAKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6
ZSkgKHJlc3VsdCA9IHl5X2lucHV0KGJ1ZiwgbWF4X3NpemUpKQorCislfQorCisvKgorVE9ETyhh
bG9rcCk6IHl5bGluZW5vIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9sZCBmbGV4LmV4ZSBpbiBj
b21waWxlci90b29scy4KK1JlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNpdmVseSB1c2UgdGhl
IG5ld2VyIHZlcnNpb24uCisqLworJW9wdGlvbiB5eWxpbmVubworCislb3B0aW9uIG5veXl3cmFw
Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCisleCBGSUVMRFMKKworCislJQorPCo+Ii8vIlte
XG5dKiJcbiIgICAgIHsgLyogPz8gY2FycmlhZ2UgYW5kL29yIGxpbmUtZmVlZD8gKi8gfTsKKwor
ImludmFyaWFudCIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElO
VkFSSUFOVCk7IH0KKyJoaWdocCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KKyJtZWRpdW1wIiAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJFQ0lTSU9OKTsgfQorImxvd3Ai
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExPV19QUkVD
SVNJT04pOyB9CisicHJlY2lzaW9uIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUFJFQ0lTSU9OKTsgfQorCisiYXR0cmlidXRlIiAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRFKTsgfQorImNvbnN0IiAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlNUX1FVQUwpOyB9CisidW5p
Zm9ybSIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVU5JRk9S
TSk7IH0KKyJ2YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihWQVJZSU5HKTsgfQorCisiYnJlYWsiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQlJFQUspOyB9CisiY29udGludWUiICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9CisiZG8iICAgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRE8pOyB9CisiZm9yIiAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQorIndo
aWxlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFdISUxF
KTsgfQorCisiaWYiICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oSUYpOyB9CisiZWxzZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oRUxTRSk7IH0KKworImluIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKElOX1FVQUwpOyB9Cisib3V0IiAgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1VUX1FVQUwpOyB9CisiaW5vdXQiICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5PVVRfUVVBTCk7
IH0KKworImZsb2F0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQorImlu
dCIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0KKyJ2b2lkIiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQorImJvb2wiICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybihCT09MX1RZUEUpOyB9CisidHJ1ZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5U
KTsgfQorImZhbHNlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5
bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKworImRpc2NhcmQi
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERJU0NBUkQpOyB9
CisicmV0dXJuIiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
UkVUVVJOKTsgfQorCisibWF0MiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDIpOyB9
CisibWF0MyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDMpOyB9CisibWF0NCIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9CisKKyJ2ZWMyIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKFZFQzIpOyB9CisidmVjMyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChW
RUMzKTsgfQorInZlYzQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KKyJpdmVj
MiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsgfQorIml2ZWMzIiAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9
IHRydWU7IHJldHVybiAoSVZFQzMpOyB9CisiaXZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
IChJVkVDNCk7IH0KKyJidmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQor
ImJ2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9CisiYnZlYzQiICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKworInNhbXBsZXIyRCIgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybiBTQU1QTEVSMkQ7IH0KKyJzYW1wbGVyQ3ViZSIgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4gU0FNUExFUkNVQkU7IH0KKworInN0cnVjdCIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihTVFJV
Q1QpOyB9CisKKyJhc20iICAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisKKyJjbGFzcyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidW5p
b24iICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImVudW0iICAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ0eXBlZGVmIiAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidGVtcGxhdGUiICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorInRoaXMiICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJwYWNrZWQiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisKKyJnb3RvIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
c3dpdGNoIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImRlZmF1bHQi
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImlubGluZSIgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJub2lubGluZSIgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisidm9sYXRpbGUiICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorInB1YmxpYyIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJzdGF0aWMiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZXh0ZXJuIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImV4dGVy
bmFsIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJpbnRlcmZhY2UiICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJsb25nIiAgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic2hvcnQiICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorImRvdWJsZSIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJoYWxmIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisiZml4ZWQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInVu
c2lnbmVkIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworImlucHV0IiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJvdXRwdXQiICAgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJodmVjMiIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImh2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJmdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZnZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZ2ZWM0
IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkdmVjMiIgICAgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZHZlYzMiICAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImR2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKworInNpemVvZiIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJjYXN0IiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisKKyJuYW1lc3BhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
dXNpbmciICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCit7TH0oe0x9
fHtEfSkqICAgICAgIHsgIAorICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgCisgICBw
eXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICByZXR1cm4g
UGFJZGVudE9yVHlwZSgqcHl5bHZhbC0+bGV4LnN0cmluZywgcGFyc2VDb250ZXh0LCBweXlsdmFs
LT5sZXguc3ltYm9sKTsgCit9CisKKzBbeFhde0h9KyAgICAgICAgIHsgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0
dXJuKElOVENPTlNUQU5UKTsgfQorMHtPfSsgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1
cm4oSU5UQ09OU1RBTlQpOyB9Ciswe0R9KyAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwg
bnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgcGFyc2VDb250ZXh0LnJlY292ZXIoKTsgcmV0dXJu
IDA7fQore0R9KyAgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
eXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQp
OyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJu
KEZMT0FUQ09OU1RBTlQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pPyB7IHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0
ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorIi4ie0R9Kyh7RX0pPyAgICAgeyBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZs
b2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKworIi8qIiAgICAg
ICAgICAgIHsgIGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFsLT5sZXgubGluZSwgcGFy
c2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKKworIis9IiAgICAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQor
Ii09IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihT
VUJfQVNTSUdOKTsgfQorIio9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihNVUxfQVNTSUdOKTsgfQorIi89IiAgICAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihESVZfQVNTSUdOKTsgfQorIiU9IiAgICAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNT0RfQVNTSUdOKTsg
fQorIjw8PSIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihMRUZUX0FTU0lHTik7IH0KKyI+Pj0iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQorIiY9IiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQorIl49IiAg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfQVNT
SUdOKTsgfQorInw9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihPUl9BU1NJR04pOyB9CisKKyIrKyIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5DX09QKTsgfQorIi0tIiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihERUNfT1ApOyB9CisiJiYiICAgICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9PUCk7IH0K
KyJ8fCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
T1JfT1ApOyB9CisiXl4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFhPUl9PUCk7IH0KKyI8PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oTEVfT1ApOyB9CisiPj0iICAgICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEdFX09QKTsgfQorIj09IiAgICAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihFUV9PUCk7IH0KKyIhPSIg
ICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTkVfT1Ap
OyB9CisiPDwiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKExFRlRfT1ApOyB9CisiPj4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFJJR0hUX09QKTsgfQorIjsiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1
cm4oU0VNSUNPTE9OKTsgfQorKCJ7InwiPCUiKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKExFRlRf
QlJBQ0UpOyB9CisoIn0ifCIlPiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQorIiwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbikgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CisiOiIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09MT04pOyB9CisiPSIgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KKyIoIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFy
c2VDb250ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CisiKSIg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQuaW5U
eXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQorKCJbInwiPDoiKSAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0JSQUNLRVQpOyB9
CisoIl0ifCI6PiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KFJJR0hUX0JSQUNLRVQpOyB9CisiLiIgICAgICAgICB7IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4o
RE9UKTsgfQorIiEiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKEJBTkcpOyB9CisiLSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oREFTSCk7IH0KKyJ+IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihUSUxERSk7IH0KKyIrIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihQTFVTKTsgfQorIioiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNUQVIpOyB9CisiLyIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU0xBU0gpOyB9CisiJSIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUEVSQ0VOVCk7IH0KKyI8IiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FOR0xFKTsg
fQorIj4iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJ
R0hUX0FOR0xFKTsgfQorInwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKFZFUlRJQ0FMX0JBUik7IH0KKyJeIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihDQVJFVCk7IH0KKyImIiAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTVBFUlNBTkQpOyB9CisiPyIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVFU1RJT04pOyB9CisKKzxG
SUVMRFM+e0x9KHtMfXx7RH0pKiB7IAorQkVHSU4oSU5JVElBTCk7ICAgICAgCisgICAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgICAgIAorICAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBO
ZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOyB9Cis8
RklFTERTPlsgXHRcdlxmXHJdIHt9CisKK1sgXHRcdlxuXGZccl0gICB7ICB9Cis8Kj48PEVPRj4+
IHsgKCZwYXJzZUNvbnRleHQpLT5BZnRlckVPRiA9IHRydWU7IHl5X2RlbGV0ZV9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIpOyB5eXRlcm1pbmF0ZSgpO30KKzwqPi4gICAgeyBwYXJzZUNvbnRleHQu
aW5mb1NpbmsuaW5mbyA8PCAiRkxFWDogVW5rbm93biBjaGFyICIgPDwgeXl0ZXh0IDw8ICJcbiI7
CisgICAgICAgICAgcmV0dXJuIDA7IH0KKworJSUKKworCisvL0luY2x1ZGluZyBQcmUtcHJvY2Vz
c29yLgorZXh0ZXJuICJDIiB7CisgICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcHJl
cHJvY2Vzcy5oIgorfSAKKworLy8KKy8vIFRoZSBZWV9JTlBVVCBtYWNybyBqdXN0IGNhbGxzIHRo
aXMuICBNYXliZSB0aGlzIGNvdWxkIGJlIGp1c3QgcHV0IGludG8KKy8vIHRoZSBtYWNybyBkaXJl
Y3RseS4KKy8vCisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSkKK3sKKyAg
ICBpbnQgbGVuOworCisgICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6ZSkpID09
IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPj0gbWF4X3NpemUpIAorICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBi
dWZmZXIgYmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIiApOworCisgICAgYnVmW2xlbl0gPSAn
ICc7CisJcmV0dXJuIGxlbisxOworfQorCisKKy8vCisvLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJp
bmdzIHVzaW5nIHl5cGFyc2UuICBXZSBzZXQgdXAgZ2xvYmFscyB1c2VkIGJ5CisvLyB5eXdyYXAu
CisvLworLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLCBhcyBwZXIgeXlwYXJzZSgpLgorLy8KK2lu
dCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQ
YXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGludCBhcmd2MGxlbjsKKyAg
ICAKKyAgICBTY2FuRnJvbVN0cmluZyhhcmd2WzBdKTsgCisgICAgCisgICAgLy9TdG9yaW5nIHRo
ZSBDdXJyZW50IENvbXBpbGVyIFBhcnNlIGNvbnRleHQgaW50byB0aGUgY3BwIHN0cnVjdHVyZS4K
KwljcHAtPnBDID0gKHZvaWQqKSZwYXJzZUNvbnRleHRMb2NhbDsKKwkKKwlpZiAoIWFyZ3YgfHwg
YXJnYyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIWFyZ3ZbaV0pIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dExvY2FsLmVycm9yKDAsICJOdWxsIHNoYWRlciBzb3VyY2Ugc3RyaW5nIiwgIiIs
ICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc3RyTGVuKSB7
CisgICAgICAgIGFyZ3YwbGVuID0gKGludCkgc3RybGVuKGFyZ3ZbMF0pOworICAgICAgICBzdHJM
ZW4gICA9ICZhcmd2MGxlbjsKKyAgICB9CisgICAgeXlyZXN0YXJ0KDApOworICAgICgmcGFyc2VD
b250ZXh0TG9jYWwpLT5BZnRlckVPRiA9IGZhbHNlOworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7
CisgICAgY3BwLT5QYUFyZ3YgICAgID0gYXJndjsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBhcmdj
OworICAgIGNwcC0+UGFTdHJMZW4gICA9IHN0ckxlbjsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRl
bWVudCA9IDA7CisgICAgeXlsaW5lbm8gICA9IDE7CisgICAKKyAgICBpZiAoKmNwcC0+UGFTdHJM
ZW4gPj0gMCkgeyAgICAKKyAgICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VD
b250ZXh0TG9jYWwpKTsKKyAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFy
c2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51
bUVycm9ycyA+IDApCisgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30K
Kwordm9pZCB5eWVycm9yKGNoYXIgKnMpIAoreworICAgIGlmICgoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+QWZ0ZXJFT0YpIHsKKyAgICAgICAgaWYgKGNwcC0+dG9rZW5zQmVmb3JlRU9GID09
IDEpIHsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJz
eW50YXggZXJyb3IiLCAicHJlLW1hdHVyZSBFT0YiLCBzLCAiIik7CisgICAgICAgICAgICBHbG9i
YWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCB5
eXRleHQsIHMsICIiKTsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgfSAgICAgICAgICAgIAorfQorCit2b2lkIFBhUmVzZXJ2ZWRXb3JkKCkKK3sKKyAgICBHbG9i
YWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiUmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQs
ICIiLCAiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBQ
YUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2Nh
bCwgVFN5bWJvbComIHN5bWJvbCkKK3sKKyAgICBzeW1ib2wgPSBwYXJzZUNvbnRleHRMb2NhbC5z
eW1ib2xUYWJsZS5maW5kKGlkKTsKKyAgICBpZiAocGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJU
eXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsK
KyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gVFlQ
RV9OQU1FOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBJREVOVElGSUVSOwor
fQorCitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5lbm8sIFRQYXJzZUNvbnRleHQmIHBhcnNl
Q29udGV4dExvY2FsKQoreworICAgIGludCB0cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgaW50IG5l
eHRDaGFyOworICAgIAorICAgIHdoaWxlICh0cmFuc2l0aW9uRmxhZyAhPSAyKSB7CisgICAgICAg
IG5leHRDaGFyID0geXlpbnB1dCgpOworICAgICAgICBpZiAobmV4dENoYXIgPT0gJ1xuJykKKyAg
ICAgICAgICAgICBsaW5lbm8rKzsKKyAgICAgICAgc3dpdGNoIChuZXh0Q2hhcikgeworICAgICAg
ICBjYXNlICcqJyA6CisgICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9IDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnLycgOiAgLyogaWYgc3RhciBpcyB0aGUgcHJldmlvdXMg
Y2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRoZSBlbmQgb2YgY29tbWVudCAqLworICAgICAgICAgICAg
aWYgKHRyYW5zaXRpb25GbGFnID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMSA7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT0YgOgorICAg
ICAgICAgICAgLyogUmFpc2UgZXJyb3IgbWVzc2FnZSBoZXJlICovCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHRMb2NhbC5lcnJvcih5eWxpbmVubywgIkVuZCBvZiBzaGFkZXIgZm91bmQgYmVmb3Jl
IGVuZCBvZiBjb21tZW50LiIsICIiLCAiIiwgIiIpOworICAgICAgICAgICAgR2xvYmFsUGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICByZXR1cm4gWVlfTlVMTDsgCisgICAgICAg
IGRlZmF1bHQgOiAgLyogQW55IG90aGVyIGNoYXJhY3RlciB3aWxsIGJlIGEgcGFydCBvZiB0aGUg
Y29tbWVudCAqLworICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcgPSAwOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAxOworfQorCitleHRlcm4gIkMiIHsKKwordm9pZCBDUFBEZWJ1Z0xv
Z01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQykt
PmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7Cit9CisKK3ZvaWQgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLCB5
eWxpbmVubyk7IAorfQorCit2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7
CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixt
c2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworfQorCit2b2lkIENQ
UEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBlcnJvciIsICIiLG1zZywiIik7CisgICAgR2xv
YmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgU2V0TGluZU51bWJlcihpbnQg
bGluZSkKK3sKKyAgICB5eWxpbmVubyAmPSB+U291cmNlTG9jTGluZU1hc2s7CisgICAgeXlsaW5l
bm8gfD0gbGluZTsKK30KKwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0cmluZykKK3sKKyAg
ICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNlTG9jU3RyaW5nU2hpZnQpIHwgKHl5bGluZW5v
ICYgU291cmNlTG9jTGluZU1hc2spOworfQorCitpbnQgR2V0U3RyaW5nTnVtYmVyKHZvaWQpCit7
CisgICAgcmV0dXJuIHl5bGluZW5vID4+IDE2OworfQorCitpbnQgR2V0TGluZU51bWJlcih2b2lk
KQoreworICAgIHJldHVybiB5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrOworfQorCit2b2lk
IEluY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGlu
ZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQorICAgICAgICArK3l5bGluZW5vOworfQorCit2
b2lkIERlY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9j
TGluZU1hc2spID4gMCkKKyAgICAgICAgLS15eWxpbmVubzsKK30KKwordm9pZCBIYW5kbGVQcmFn
bWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykKK3sgICAgCisgICAgaWYgKCFz
dHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9
IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRh
eCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBp
ZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVlOworICAgICAgICBlbHNl
IGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4
cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10s
ICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8g
ZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgeworICAgICAgICBp
ZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcg
cHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBr
ZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAg
ICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwi
IGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10s
ICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8g
ZW5kICdkZWJ1ZycgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworCisjaWZkZWYgUFJBR01BX1RBQkxFCisgICAgICAgIC8vCisgICAgICAgIC8v
IGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQorICAgICAgICAvLyB1c2UgKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhl
IGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQorICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9y
ZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKKyAg
ICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFn
bWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQorICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUo
cHJhZ21hdmFsdWUpCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBj
dXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxl
LgorICAgICAgICAvLyAgICAgICAgCisgICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3Ry
Y21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAg
ICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21h
VGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
cHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tl
bnNbMl07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxl
WyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gICAgICAgIAorICAgICAg
ICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7CisgICAgICAgICAgICBUUHJhZ21hVGFibGUm
IHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEu
cHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Cisg
ICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwor
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQorICAgIH0KK30KKwor
dm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit7CisgICAgVFN0cmluZyBzdHJTcmM7CisgICAg
c3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOworCisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyAr
ICIgIiArIHN0clNyYzsKK30KKworY29uc3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCkKK3sK
KyAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1z
ZykuY19zdHIoKTsKKyAgICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9CisKK3ZvaWQgUmVzZXRUU3Ry
aW5nKHZvaWQpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cg
PSAiIjsKK30KKworVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQor
eworICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4g
RUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCisg
ICAgICAgIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIs
IGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoIXN0
cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaFdhcm47CisgICAgZWxz
ZSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVo
YXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBF
QmhEaXNhYmxlOworICAgIH0gICAgICAgIAorfQorCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhh
dmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBU
QmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgVE1hcDxU
U3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsKKyAgICBUU3RyaW5nIG1zZzsKKyAg
ICAKKyAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJj
bXAoZXh0TmFtZSwgImFsbCIpKSB7CisgICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1
aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkgeworICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUn
IGJlaGF2aW9yIik7ICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5z
aW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+
ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5z
ZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfSAgICAgICAgCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlv
ci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRlciA9PSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKKyAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAg
ICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBl
eHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgICAgICAgIGNhc2Ug
RUJoV2FybjoKKyAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToKKyAgICAgICAgICAgICAgICBt
c2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0
ZWQiOworICAgICAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFs
OworICAgIH0KK30KKyAgICAgICAgCit9ICAvLyBleHRlcm4gIkMiCisKK3ZvaWQgc2V0SW5pdGlh
bFN0YXRlKCkKK3sKKyAgICB5eV9zdGFydCA9IDE7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIxNzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8qKgorICogVGhpcyBp
cyBiaXNvbiBncmFtbWFyIGFuZCBwcm9kdWN0aW9uIGNvZGUgZm9yIHBhcnNpbmcgdGhlIE9wZW5H
TCAyLjAgc2hhZGluZworICogbGFuZ3VhZ2VzLgorICovCisleworCisvKiBCYXNlZCBvbjoKK0FO
U0kgQyBZYWNjIGdyYW1tYXIKKworSW4gMTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNj
IGdyYW1tYXIgKHdoaWNoIGlzIGFjY29tcGFuaWVkIGJ5IGEKK21hdGNoaW5nIExleCBzcGVjaWZp
Y2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IGRyYWZ0IHZlcnNpb24gb2YgdGhlCitBTlNJ
IEMgc3RhbmRhcmQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCBpdCB0byBuZXQuc291cmNlcyBp
biAxOTg3OyB0aGF0CitvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVl
c3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAubGFuZy5jCitGQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBm
dHAudXUubmV0LCBmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLgorCitJ
IGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0
YW5kYXJkIGdyYW1tYXIgYXMKK3Bvc3NpYmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRp
c2NvdmVyIGRpc2NyZXBhbmNpZXMuCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUKKyovCisKKyNpbmNs
dWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVs
cGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlQQVJT
RV9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorLyoKK1RPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFN
X0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xkIGJpc29uLmV4ZSBpbgorY29tcGlsZXIv
dG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZl
cnNpb24uCisqLworI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wgdm9pZCoKKyNkZWZpbmUgcGFy
c2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkKKyNkZWZpbmUg
WVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgo
WVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCitleHRlcm4gdm9pZCB5
eWVycm9yKGNoYXIqKTsKKworI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNl
Q29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1Zl
cnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25s
eSAiLCBTLCAiIiwgIiIpOyAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVkVSVEVYX09OTFkoUywg
TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAg
ICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAo
cGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBQQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4
dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFj
ayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisK
KyNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdl
ICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHVucGFjayBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFBB
Q0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5n
VW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBp
biBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgXAorICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K30KKyV9CisldW5pb24geworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOworICAgICAgICAg
ICAgZmxvYXQgZjsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgYm9vbCBiOworICAg
ICAgICB9OworICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CisgICAgfSBsZXg7CisgICAgc3RydWN0
IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAgICAgICBUT3BlcmF0b3Igb3A7CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAg
ICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOworICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1B
Z2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRQdWJs
aWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlv
bjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CisgICAgICAgICAgICBUVHlwZUxpbmUg
dHlwZUxpbmU7CisgICAgICAgICAgICBUVHlwZUxpc3QqIHR5cGVMaXN0OworICAgICAgICB9Owor
ICAgIH0gaW50ZXJtOworfQorCisleworICAgIGV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSosIHZv
aWQqKTsKKyV9CisKKyVwdXJlX3BhcnNlciAvKiBKdXN0IGluIGNhc2UgaXMgY2FsbGVkIGZyb20g
bXVsdGlwbGUgdGhyZWFkcyAqLworJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxp
Y3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KKyV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9Q
UkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgorJXRva2Vu
IDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBF
CisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRV
Uk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMy
IFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwg
T1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tlbiA8bGV4PiBTVFJVQ1Qg
Vk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFCisKKyV0
b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5U
IEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IEZJRUxEX1NFTEVDVElPTgorJXRva2VuIDxsZXg+
IExFRlRfT1AgUklHSFRfT1AKKyV0b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExFX09QIEdFX09Q
IEVRX09QIE5FX09QCisldG9rZW4gPGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBNVUxfQVNTSUdO
IERJVl9BU1NJR04gQUREX0FTU0lHTgorJXRva2VuIDxsZXg+IE1PRF9BU1NJR04gTEVGVF9BU1NJ
R04gUklHSFRfQVNTSUdOIEFORF9BU1NJR04gWE9SX0FTU0lHTiBPUl9BU1NJR04KKyV0b2tlbiA8
bGV4PiBTVUJfQVNTSUdOCisKKyV0b2tlbiA8bGV4PiBMRUZUX1BBUkVOIFJJR0hUX1BBUkVOIExF
RlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIExFRlRfQlJBQ0UgUklHSFRfQlJBQ0UgRE9UCisldG9r
ZW4gPGxleD4gQ09NTUEgQ09MT04gRVFVQUwgU0VNSUNPTE9OIEJBTkcgREFTSCBUSUxERSBQTFVT
IFNUQVIgU0xBU0ggUEVSQ0VOVAorJXRva2VuIDxsZXg+IExFRlRfQU5HTEUgUklHSFRfQU5HTEUg
VkVSVElDQUxfQkFSIENBUkVUIEFNUEVSU0FORCBRVUVTVElPTgorCisldHlwZSA8aW50ZXJtPiBh
c3NpZ25tZW50X29wZXJhdG9yIHVuYXJ5X29wZXJhdG9yCisldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gdmFyaWFibGVfaWRlbnRpZmllciBwcmltYXJ5X2V4cHJlc3Npb24gcG9zdGZpeF9l
eHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZXhwcmVzc2lvbiBpbnRl
Z2VyX2V4cHJlc3Npb24gYXNzaWdubWVudF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVy
bVR5cGVkTm9kZT4gdW5hcnlfZXhwcmVzc2lvbiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIGFk
ZGl0aXZlX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiByZWxhdGlv
bmFsX2V4cHJlc3Npb24gZXF1YWxpdHlfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1U
eXBlZE5vZGU+IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gY29uc3RhbnRfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50
ZXJtVHlwZWROb2RlPiBzaGlmdF9leHByZXNzaW9uIGFuZF9leHByZXNzaW9uIGV4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVy
bVR5cGVkTm9kZT4gZnVuY3Rpb25fY2FsbCBpbml0aWFsaXplciBjb25kaXRpb24gY29uZGl0aW9u
b3B0CisKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gdHJhbnNsYXRpb25fdW5pdCBmdW5jdGlv
bl9kZWZpbml0aW9uCisldHlwZSA8aW50ZXJtLmludGVybU5vZGU+IHN0YXRlbWVudCBzaW1wbGVf
c3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybUFnZ3JlZ2F0ZT4gIHN0YXRlbWVudF9saXN0
IGNvbXBvdW5kX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlv
bl9zdGF0ZW1lbnQgc2VsZWN0aW9uX3N0YXRlbWVudCBleHByZXNzaW9uX3N0YXRlbWVudAorJXR5
cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbiBleHRlcm5hbF9kZWNsYXJhdGlvbgor
JXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBmb3JfaW5pdF9zdGF0ZW1lbnQgY29tcG91bmRfc3Rh
dGVtZW50X25vX25ld19zY29wZQorJXR5cGUgPGludGVybS5ub2RlUGFpcj4gc2VsZWN0aW9uX3Jl
c3Rfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2Rl
PiBpdGVyYXRpb25fc3RhdGVtZW50IGp1bXBfc3RhdGVtZW50IHN0YXRlbWVudF9ub19uZXdfc2Nv
cGUKKyV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlz
dAorCisldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xh
cmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4g
cGFyYW1ldGVyX3F1YWxpZmllcgorCisldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9u
X3F1YWxpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVj
aWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3NwZWNp
Zmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CisldHlwZSA8aW50ZXJtLnR5cGU+
IHN0cnVjdF9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZUxpbmU+IHN0cnVjdF9kZWNsYXJh
dG9yCisldHlwZSA8aW50ZXJtLnR5cGVMaXN0PiBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IHN0cnVj
dF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAorJXR5cGUgPGludGVybS5mdW5j
dGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3IgZnVuY3Rpb25faWRlbnRp
ZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1l
dGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9o
ZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMg
ZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQorJXR5cGUgPGludGVybT4g
ZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0IHRyYW5zbGF0aW9uX3VuaXQKKyUlCisK
K3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAvLyBUaGUg
c3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQorICAgICAg
ICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEu
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAg
ICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5n
LCB0eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpm
YWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUg
YSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1Zhcmlh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2
YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVy
cm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wKKyAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0
aGUgbWVtb3J5CisKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QgKSB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5
ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJp
YWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAkMS5saW5lKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKSwgJDEubGluZSk7CisgICAgfQorICAgIDsKKworcHJpbWFyeV9leHByZXNzaW9uCisg
ICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCBJTlRDT05TVEFOVCB7CisgICAgICAgIC8vCisgICAgICAgIC8vIElOVF9UWVBFIGlzIG9ubHkg
MTYtYml0IHBsdXMgc2lnbiBiaXQgZm9yIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzLAorICAgICAg
ICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cworICAgICAgICAvLworICAgICAg
ICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBGTE9BVENP
TlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwor
ICAgIH0KKyAgICB8IEJPT0xDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KCQxLmIpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdI
VF9QQVJFTiB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKworcG9zdGZpeF9leHBy
ZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNz
aW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkgJiYgISQxLT5p
c01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgaWYgKCQxLT5nZXRB
c1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9y
ICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3Ig
IiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cwor
ICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdEFycmF5Tm9kZSgkMy0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
LCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpKSB7
ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3JzCisgICAgICAgICAgICAgICAgVFZlY3Rv
ckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMg
d2F5IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQorICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgJDIu
bGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7IC8vIGNvbnN0
YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmFkZENvbnN0TWF0cml4Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoJDMtPmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgkMS0+aXNWZWN0b3IoKSB8fCAkMS0+
aXNNYXRyaXgoKSkgJiYgJDEtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYg
ISQxLT5pc0FycmF5KCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIs
ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJy
YXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0
VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5
bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksICQzLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUsICQyLmxpbmUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5n
ZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksIDAsIGZhbHNlLCAkMi5saW5l
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERp
cmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpICYmICQxLT5nZXRUeXBl
KCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0
aCBhIHNpemUgYmVmb3JlIGJlaW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlhYmxlIik7CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhJbmRpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCks
ICQxLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpLCAkMS0+aXNNYXRy
aXgoKSkpOworCisgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdl
UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSAm
JiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCks
IEV2cUNvbnN0LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICBlbHNlIGlmICgkMS0+
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6
ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpICYmICQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlw
ZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QpKTsKKyAg
ICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKCQxLT5nZXRUeXBlKCkp
OworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGwgeworICAgICAgICAkJCA9ICQxOworICAgIH0K
KyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKKyAgICAgICAg
aWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMu
bGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxk
czsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQz
LnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgJDMubGluZSkpIHsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0
c1swXSA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKKyAg
ICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxk
cywgJDEsICQzLmxpbmUpOworICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEt
PmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCokMy5zdHJpbmcpLnNpemUoKSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzLm51bSA9PSAx
KSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7
CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
VFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOworICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenps
ZShmaWVsZHMsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgJDIu
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0
cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMg
ZmllbGRzOworICAgICAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxk
cygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5saW5lKSkgewor
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAw
OworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmll
bGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50
ZWQgeWV0IiwgIi4iLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsK
KyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgs
ICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxT
aXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkg
KyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBUVHlw
ZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBp
ZiAoZmllbGRzID09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCpmaWVsZHMpW2ldLnR5cGUtPmdldEZp
ZWxkTmFtZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk
Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlm
aWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgJDIubGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpm
aWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmlu
aXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZx
Q29uc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3Ry
aW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2
ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAk
JCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0
J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Ag
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICIr
KyIsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAkMSwgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMi5s
aW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9
CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiLS0iLCAkMSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDIubGluZSwgIi0tIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworaW50ZWdlcl9leHBy
ZXNzaW9uCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+aW50
ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbAor
ICAgIDogZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QgeworICAgICAgICBURnVuY3Rpb24qIGZuQ2Fs
bCA9ICQxLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0
SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9y
LgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBj
b25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVy
aWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBl
IHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlw
ZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hl
Y2soJDEubGluZSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAg
ICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUn
LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmFkZENvbnN0cnVjdG9yKCQxLmludGVybU5vZGUsICZ0eXBlLCBvcCwgZm5DYWxsLCAkMS5saW5l
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAkMS5s
aW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0
cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBib29s
IGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1
bmN0aW9uKCQxLmxpbmUsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgaWYgKGZuQ2Fu
ZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBIGRlY2xh
cmVkIGZ1bmN0aW9uLiAgQnV0LCBpdCBtaWdodCBzdGlsbCBtYXAgdG8gYSBidWlsdC1pbgorICAg
ICAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAgICAgICAgICAg
IGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0
LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2Ug
YSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExp
bmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24u
ICBUeXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3AsICQxLmxpbmUpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJt
QWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICQxLmxpbmUpOworICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0
aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmlu
ZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBi
dWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllckxp
c3QmIHF1YWxpZmllckxpc3QgPSAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdl
dFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpm
bkNhbmRpZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQt
PmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgp
W2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFs
dWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJF
cnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyTGlzdC5wdXNo
X2JhY2socXVhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ug
d2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIC8vIFB1dCBv
biBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxf
b3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgeworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2FsbF9nZW5l
cmljIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUg
bm90IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfZ2VuZXJp
YworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIFJJR0hUX1BBUkVO
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgfQor
ICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworICAgIH0KKyAgICA7
CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2Nh
bGxfaGVhZGVyIFZPSURfVFlQRSB7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAg
ICQkLmludGVybU5vZGUgPSAwOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsK
KyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Cisg
ICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAg
OiBmdW5jdGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICBU
UGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkgfTsKKyAgICAg
ICAgJDEtPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7Cisg
ICAgICAgICQkLmludGVybU5vZGUgPSAkMjsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hl
YWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07Cisg
ICAgICAgICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAkJC5mdW5j
dGlvbiA9ICQxLmZ1bmN0aW9uOworICAgICAgICAkJC5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgJDIubGluZSk7
CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFkZXIKKyAgICA6IGZ1bmN0aW9uX2lk
ZW50aWZpZXIgTEVGVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKwor
Ly8gR3JhbW1hciBOb3RlOiAgQ29uc3RydWN0b3JzIGxvb2sgbGlrZSBmdW5jdGlvbnMsIGJ1dCBh
cmUgcmVjb2duaXplZCBhcyB0eXBlcy4KKworZnVuY3Rpb25faWRlbnRpZmllcgorICAgIDogdHlw
ZV9zcGVjaWZpZXIgeworICAgICAgICAvLworICAgICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAg
ICAvLworICAgICAgICBpZiAoJDEuYXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikp
IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICAkMS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoJDEudXNlckRlZikgeworICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0g
IiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAq
ZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBFT3BDb25zdHJ1Y3RT
dHJ1Y3QpOworICAgICAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgICAgICAgICBzd2l0Y2ggKCQx
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgaWYg
KCQxLm1hdHJpeCkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3Ry
dWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAx
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZs
b2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dFZlYzQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgi
aXZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzMiLCAkMS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJ
VmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXpl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAkMS5saW5lKTsgb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBG
UkFHX1ZFUlRfT05MWSgiYnZlYzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZl
YzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIFRUeXBlOjpnZXRCYXNp
Y1N0cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
VFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKKyAg
ICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5n
LCB0eXBlLCBvcCk7CisgICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICB9CisgICAg
fQorICAgIHwgSURFTlRJRklFUiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywg
dHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247CisgICAgfQorICAgIHwgRklFTERfU0VMRUNU
SU9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxp
bmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAg
JCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1bmFyeV9leHByZXNzaW9uCisgICAgOiBw
b3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IElOQ19P
UCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygkMS5saW5lLCAiKysiLCAkMikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDI7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGluZSwgIi0tIiwgJDIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgJDIs
ICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIi0t
IiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9CisgICAgfQorICAgIHwg
dW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMS5vcCAhPSBF
T3BOdWxsKSB7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aCgkMS5vcCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBlcnJvck9wID0gIiI7CisgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9wKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCBlcnJvck9wLCAkMi0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisvLyBHcmFtbWFyIE5v
dGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNhc3RzLgorCit1bmFyeV9vcGVyYXRvcgor
ICAgIDogUExVUyAgeyAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BOdWxsOyB9CisgICAg
fCBEQVNIICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcE5lZ2F0aXZlOyB9CisgICAg
fCBCQU5HICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KKyAg
ICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3IgJyYnIHVuYXJ5IG9wcy4gIFBvaW50ZXJz
IGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCisgICAgOiB1
bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBGUkFHX1ZFUlRfT05MWSgiKiIs
ICQyLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IG11bHRpcGxp
Y2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCIvIiwgJDIubGluZSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi8iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQor
ICAgIDsKKworYWRkaXRpdmVfZXhwcmVzc2lvbgorICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBs
aWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
fCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BT
dWIsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
JDIubGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc2hpZnRfZXhwcmVzc2lvbgor
ICAgIDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK3JlbGF0aW9u
YWxfZXhwcmVzc2lvbgorICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24geworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoJDIubGluZSwgIjwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlm
dF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPiIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywg
JDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjw9
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgeworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigkMi5saW5lLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5l
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2VxdWFsaXR5X2V4cHJlc3Npb24KKyAgICA6
IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGVxdWFsaXR5X2V4cHJl
c3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPT0iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEt
PmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVy
cm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCAkMi5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiIT0iLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlz
QXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9y
Q2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCithbmRfZXhwcmVzc2lvbgorICAg
IDogZXF1YWxpdHlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2V4Y2x1c2l2ZV9v
cl9leHByZXNzaW9uCisgICAgOiBhbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisK
K2luY2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KKyAgICA7CisKK2xvZ2ljYWxfYW5kX2V4cHJlc3Npb24KKyAgICA6IGluY2x1
c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9hbmRfZXhwcmVz
c2lvbiBBTkRfT1AgaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQz
LCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAi
JiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBs
b2dpY2FsX2FuZF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsICQyLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICJeXiIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworbG9n
aWNhbF9vcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJl
c3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
Mi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2NvbmRpdGlvbmFsX2V4cHJlc3Np
b24KKyAgICA6IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2lj
YWxfb3JfZXhwcmVzc2lvbiBRVUVTVElPTiBleHByZXNzaW9uIENPTE9OIGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiB7CisgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIubGlu
ZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwg
JDIubGluZSk7CisgICAgICAgIGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisg
ICAgICAgICAgICAkJCA9IDA7CisKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiOiIsICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDU7CisgICAgICAgIH0KKyAgICB9
CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3Bl
cmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICBpZiAoJCQg
PT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3NpZ25FcnJvcigkMi5saW5lLCAi
YXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgp
KSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9h
cnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICB9CisgICAgOworCithc3NpZ25tZW50X29wZXJhdG9yCisgICAgOiBFUVVBTCAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5v
cCA9IEVPcEFzc2lnbjsgfQorICAgIHwgTVVMX0FTU0lHTiAgIHsgRlJBR19WRVJUX09OTFkoIio9
IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BNdWxBc3NpZ247
IH0KKyAgICB8IERJVl9BU1NJR04gICB7IEZSQUdfVkVSVF9PTkxZKCIvPSIsICQxLmxpbmUpOyAg
ICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wRGl2QXNzaWduOyB9CisgICAgfCBBRERf
QVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmxpbmUgPSAk
MS5saW5lOyAkJC5vcCA9IEVPcEFkZEFzc2lnbjsgfQorICAgIHwgU1VCX0FTU0lHTiAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3Ag
PSBFT3BTdWJBc3NpZ247IH0KKyAgICA7CisKK2V4cHJlc3Npb24KKyAgICA6IGFzc2lnbm1lbnRf
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBD
T01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIubGluZSk7CisgICAgICAgIGlmICgkJCA9
PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwg
IiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQz
OworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIDog
Y29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0
RXJyb3JDaGVjaygkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitkZWNsYXJhdGlvbgorICAgIDogZnVuY3Rp
b25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJv
dG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIHByb3RvdHlwZS0+c2V0VHlw
ZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUo
ZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAgICAgICBpZiAocGFyYW0u
bmFtZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90
eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUs
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUs
ICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcHJvdG90eXBlLT5zZXRPcGVyYXRvcihFT3BQcm90b3R5cGUpOworICAgICAgICAk
JCA9IHByb3RvdHlwZTsKKyAgICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09M
T04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQorICAgICAgICAgICAgJDEuaW50
ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNsYXJhdGlvbik7CisgICAgICAgICQkID0g
JDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVh
bGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJlY2lzaW9uKCAkMy50eXBlLCAkMiApOwor
ICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fcHJvdG90eXBlCisgICAg
OiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVOICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dl
ZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBk
ZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCisg
ICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRp
b24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFs
bG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBt
YXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5n
bGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJl
dkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdl
dEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJl
dkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoKCpwcmV2
RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZp
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxp
ZmllcnMiLCAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJZiB0
aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCisg
ICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1l
cyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUgdGhhdCdzCisgICAgICAgIC8vIGJlaW5n
IHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUg
b25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vCisgICAgICAgICQkLmZ1bmN0aW9u
ID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworCisgICAgICAgIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC5mdW5jdGlvbik7CisgICAgfQorICAgIDsKKworZnVu
Y3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rpb25faGVhZGVyIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisKK2Z1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFt
ZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBwYXJhbWV0ZXJfZGVjbGFyYXRpb24geworICAg
ICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAgICAkJCA9ICQxOworICAgICAgICBpZiAo
JDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICQx
LT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxl
dGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJhdGlvbiB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBi
ZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVp
bmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAg
ICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBwYXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lk
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhjZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lk
IiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBkZWxldGUgJDMucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgJDEt
PmFkZFBhcmFtZXRlcigkMy5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitmdW5j
dGlvbl9oZWFkZXIKKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9Q
QVJFTiB7CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICQxLnF1YWxp
ZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
JDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBs
ZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEg
cHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikK
KyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7Cisg
ICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMi5zdHJpbmcsIHR5cGUpOworICAgICAg
ICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdG9yCisg
ICAgLy8gVHlwZSArIG5hbWUKKyAgICA6IHR5cGVfc3BlY2lmaWVyIElERU5USUZJRVIgeworICAg
ICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxp
bmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7JDIuc3RyaW5nLCBuZXcgVFR5cGUoJDEpfTsKKyAg
ICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgICAgICQkLnBhcmFtID0gcGFyYW07CisgICAg
fQorICAgIHwgdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4g
bWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQsIHNpemUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwor
CisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCQxKTsKKyAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbSA9IHsgJDIuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5l
OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7CisKK3BhcmFtZXRlcl9k
ZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9ubHkgcGFyYW1ldGVyIHF1YWxpZmllciBh
IHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJTl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRf
UVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8vCisgICAgLy8gVHlwZSArIG5hbWUKKyAg
ICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IHBh
cmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9ICQy
OworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygk
Mi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMi5s
aW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICAvLworICAgIC8vIE9ubHkgdHlwZQorICAg
IC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90
eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDM7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAg
JCQgPSAkMjsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9y
Q2hlY2soJDIubGluZSwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfcXVh
bGlmaWVyCisgICAgOiAvKiBlbXB0eSAqLyB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQor
ICAgIHwgSU5fUVVBTCB7CisgICAgICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgT1VUX1FV
QUwgeworICAgICAgICAkJCA9IEV2cU91dDsKKyAgICB9CisgICAgfCBJTk9VVF9RVUFMIHsKKyAg
ICAgICAgJCQgPSBFdnFJbk91dDsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfdHlwZV9zcGVj
aWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9
IHsgMCwgbmV3IFRUeXBlKCQxKSB9OworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0K
KyAgICA7CisKK2luaXRfZGVjbGFyYXRvcl9saXN0CisgICAgOiBzaW5nbGVfZGVjbGFyYXRpb24g
eworICAgICAgICAkJCA9ICQxOworICAgICAgICAKKyAgICAgICAgaWYgKCQkLnR5cGUucHJlY2lz
aW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgJCQudHlwZS5wcmVjaXNpb24gPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZS50eXBl
KTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soJDEu
bGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUudHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgeworICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgJDMubGluZSksICQzLmxpbmUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMu
bGluZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygk
My5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7
CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5l
LCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5s
aW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFD
S0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5
cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQg
PSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0
LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnR5
cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
OworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUs
ICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBl
KTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
KiQzLnN0cmluZywgdHlwZSwgJDMubGluZSksICQzLmxpbmUpOworICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQg
UklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAg
ICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJy
YXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEudHlw
ZS5zZXRBcnJheSh0cnVlLCAkNy0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKTsKKyAgICAgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ3LCBpbnRlcm1O
b2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ2LmxpbmUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJt
QWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9y
X2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDQu
bGluZSwgJDUsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJv
ckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVEludGVy
bU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0
ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ4LCBpbnRlcm1Ob2Rl
LCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIGJ1
aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ3LmxpbmUpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdn
cmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xp
c3QgQ09NTUEgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOwor
CisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIXBhcnNlQ29u
dGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1
LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGJ1aWxkIHRo
ZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2Rl
LCAkNC5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitzaW5nbGVfZGVjbGFyYXRpb24K
KyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKKyAgICAgICAgJCQudHlwZSA9ICQxOworICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtl
QWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5
cGUoJDEpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVk
X3R5cGUgSURFTlRJRklFUiB7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQyLmxpbmUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMi5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgJCQudHlwZSA9ICQxOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCQyLmxpbmUsICok
Mi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNL
RVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQyLmxpbmUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQy
LmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkMS5zZXRBcnJheSh0
cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0cmluZywgJDEsIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIFRUeXBl
IHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShz
aXplKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKiQyLnN0cmluZywgdHlwZSwgJDIubGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAk
MSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcs
ICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQk
LnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNo
ZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQsIHNpemUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICAgICAkMS5zZXRB
cnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0
cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5U
SUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgor
ICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKGludGVybU5vZGUsICQzLmxpbmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7Cisg
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAkMS5saW5lKTsKKyAg
ICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW52YXJpYW50VmFyeWluZ091dDsKKyAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICB9CisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRo
ZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8gICAgfCBidWZmZXJfc3BlY2lmaWVyIHsK
Ky8vICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworLy8gICAgfQorICAgIDsKKworLy8g
R3JhbW1hciBOb3RlOiAgTm8gJ2VudW0nLCBvciAndHlwZWRlZicuCisKKy8vCisvLyBQbGFjZSBo
b2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8ldHlwZSA8aW50ZXJt
PiBidWZmZXJfZGVjbGFyYXRpb24KKy8vJXR5cGUgPGludGVybS50eXBlPiBidWZmZXJfc3BlY2lm
aWVyIGlucHV0X29yX291dHB1dCBidWZmZXJfZGVjbGFyYXRpb25fbGlzdAorLy9idWZmZXJfc3Bl
Y2lmaWVyCisvLyAgICA6IGlucHV0X29yX291dHB1dCBMRUZUX0JSQUNFIGJ1ZmZlcl9kZWNsYXJh
dGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKy8vICAgIH0KKy8vICAgIDsKKy8vCisvL2lucHV0X29y
X291dHB1dAorLy8gICAgOiBJTlBVVCB7CisvLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSwgImlucHV0IikpCisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworLy8gICAgICAgIFVOUEFDS19PTkxZKCJpbnB1dCIsICQxLmxpbmUpOworLy8gICAgICAgICQk
LnF1YWxpZmllciA9IEV2cUlucHV0OworLy8gICAgfQorLy8gICAgfCBPVVRQVVQgeworLy8gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJvdXRwdXQiKSkKKy8vICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgUEFDS19PTkxZKCJvdXRwdXQi
LCAkMS5saW5lKTsKKy8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFPdXRwdXQ7CisvLyAgICB9
CisvLyAgICA7CisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5n
dWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb25fbGlzdAorLy8gICAgOiBidWZmZXJfZGVj
bGFyYXRpb24geworLy8gICAgfQorLy8gICAgfCBidWZmZXJfZGVjbGFyYXRpb25fbGlzdCBidWZm
ZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAgOworCisvLworLy8gSW5wdXQvb3V0cHV0
IHNlbWFudGljczoKKy8vICAgZmxvYXQgbXVzdCBiZSAxNiBvciAzMiBiaXRzCisvLyAgIGZsb2F0
IGFsaWdubWVudCByZXN0cmljdGlvbnM/CisvLyAgIGNoZWNrIGZvciBvbmx5IG9uZSBpbnB1dCBh
bmQgb25seSBvbmUgb3V0cHV0CisvLyAgIHN1bSBvZiBiaXRmaWVsZHMgaGFzIHRvIGJlIG11bHRp
cGxlIG9mIDMyCisvLworCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sg
bGFuZ3VhZ2VzLgorLy8KKy8vYnVmZmVyX2RlY2xhcmF0aW9uCisvLyAgICA6IHR5cGVfc3BlY2lm
aWVyIElERU5USUZJRVIgQ09MT04gY29uc3RhbnRfZXhwcmVzc2lvbiBTRU1JQ09MT04geworLy8g
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIu
c3RyaW5nLCBwYXJzZUNvbnRleHQpKQorLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKy8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAk
MSk7CisvLyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQk
LnZhcmlhYmxlKSkgeworLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKy8v
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAgICAgICAgIC8vIGRv
bid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNh
cmUgb2YgaXQKKy8vICAgICAgICB9CisvLyAgICB9CisvLyAgICA7CisKK2Z1bGx5X3NwZWNpZmll
ZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDE7CisKKyAgICAg
ICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJDEuc2V0
QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHwgdHlw
ZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAgICAgICAgaWYgKCQyLmFycmF5ICYmIHBh
cnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29i
amVjdHMiKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCQyLmFycmF5
ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMi5z
ZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09
IEV2cUF0dHJpYnV0ZSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50
eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlm
aWVyID09IEV2cVZhcnlpbmdPdXQpICYmCisgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29s
IHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQx
LnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1
YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAgIDogQ09OU1RfUVVB
TCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAkMS5saW5lKTsKKyAg
ICB9CisgICAgfCBBVFRSSUJVVEUgeworICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwg
JDEubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1
dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICQxLmxpbmUpOworICAgIH0KKyAgICB8IFZB
UllJTkcgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAkMS5saW5lKTsKKyAg
ICB9CisgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVT
aExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAkMS5saW5lKTsKKyAgICB9Cisg
ICAgfCBVTklGT1JNIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVj
aygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVu
aWZvcm0iKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAkMS5saW5lKTsKKyAgICB9CisgICAgOwor
Cit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgcHJlY2lzaW9uX3F1YWxpZmllciB0eXBlX3NwZWNpZmll
cl9ub19wcmVjIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgJCQucHJlY2lzaW9uID0gJDE7
CisgICAgfQorICAgIDsKKworcHJlY2lzaW9uX3F1YWxpZmllcgorICAgIDogSElHSF9QUkVDSVNJ
T04geworICAgICAgICAkJCA9IEVicEhpZ2g7CisgICAgfQorICAgIHwgTUVESVVNX1BSRUNJU0lP
TiB7CisgICAgICAgICQkID0gRWJwTWVkaXVtOworICAgIH0KKyAgICB8IExPV19QUkVDSVNJT04g
IHsKKyAgICAgICAgJCQgPSBFYnBMb3c7CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXJf
bm9fcHJlYworICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgeworICAgICAgICAkJCA9ICQx
OworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICAkJCA9ICQxOworCisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDIubGluZSwgJDEpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLnNldEFycmF5KHRydWUsIHNpemUpOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKKyAgICA6
IFZPSURfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBG
TE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBJ
TlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJPT0xf
VFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisvLyAgICB8IFVOU0lH
TkVEIElOVF9UWVBFIHsKKy8vICAgICAgICBQQUNLX1VOUEFDS19PTkxZKCJ1bnNpZ25lZCIsICQx
LmxpbmUpOworLy8gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworLy8gICAg
ICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisvLyAgICB9CisgICAgfCBW
RUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVn
YXRlKDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVkVDNCB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAg
ICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAg
JCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IEJWRUMzIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1
YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwg
QlZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUp
OworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgSVZFQzMgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAg
IH0KKyAgICB8IElWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBNQVRSSVgyIHsKKyAgICAgICAgRlJBR19W
RVJUX09OTFkoIm1hdDIiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsK
KyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJWDMg
eworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIsICQxLmxpbmUpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAg
fQorICAgIHwgTUFUUklYNCB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQ0IiwgJDEubGlu
ZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkQgeworICAgICAgICBGUkFHX1ZFUlRf
T05MWSgic2FtcGxlcjJEIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICQxLmxp
bmUpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFko
InNhbXBsZXJDdWJlIiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgJDEubGlu
ZSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmllciB7CisgICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJzdHJ1Y3QiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgfQorICAgIHwgVFlQRV9OQU1FIHsKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBkZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUg
bGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCisgICAgICAgIC8vIHR5cGUuCisgICAgICAgIC8v
CisgICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPigkMS5z
eW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICQxLmxpbmUpOworICAgICAg
ICAkJC51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICB9CisgICAgOworCitzdHJ1Y3Rfc3BlY2lm
aWVyCisgICAgOiBTVFJVQ1QgSURFTlRJRklFUiBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgkNCwg
KiQyLnN0cmluZyk7CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlh
YmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQyLnN0cmluZy0+Y19z
dHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICQx
LmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOworICAgIH0KKyAgICB8IFNU
UlVDVCBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAg
ICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgkMywgVFN0cmluZygiIikpOworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgJDEubGluZSk7CisgICAg
ICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xh
cmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9u
IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAw
OyBqIDwgJCQtPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqJCQpW2pdLnR5
cGUtPmdldEZpZWxkTmFtZSgpID09ICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKCokMilbaV0ubGluZSwgImR1
cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0IiwgKCokMilbaV0udHlw
ZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICQkLT5wdXNoX2JhY2soKCokMilbaV0pOworICAgICAgICB9CisgICAgfQorICAgIDsK
Kworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFy
YXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gJDI7CisKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+dm9pZEVycm9yQ2hlY2soJDEubGluZSwgKCokMilbMF0udHlwZS0+Z2V0Rmll
bGROYW1lKCksICQxKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byBy
ZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGUoJDEudHlwZSwg
JDEuc2l6ZSwgJDEubWF0cml4LCAkMS51c2VyRGVmKTsKKworICAgICAgICAgICAgLy8gZG9uJ3Qg
YWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAgICAgaWYgKCgqJCQpW2ldLnR5cGUtPmlz
QXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soJDEubGluZSwgJDEpKQorICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgkMS5hcnJheSkKKyAg
ICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsK
KyAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQorICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5
cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc3RydWN0X2RlY2xh
cmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAgJCQtPnB1
c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBz
dHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkLT5wdXNoX2JhY2soJDMpOworICAgIH0KKyAg
ICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAgOiBJREVOVElGSUVSIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQudHlwZSA9
IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICAkJC5saW5lID0gJDEu
bGluZTsKKyAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJpbmcpOworICAgIH0K
KyAgICB8IElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygk
MS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
KyAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAgICAgICQkLnR5cGUtPnNldEZpZWxkTmFt
ZSgqJDEuc3RyaW5nKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkMywgc2l6ZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQudHlwZS0+c2V0QXJyYXlTaXpl
KHNpemUpOworICAgIH0KKyAgICA7CisKK2luaXRpYWxpemVyCisgICAgOiBhc3NpZ25tZW50X2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitkZWNsYXJhdGlvbl9zdGF0ZW1lbnQKKyAg
ICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsgfQorICAgIDsKKworc3RhdGVtZW50CisgICAgOiBj
b21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAg
ICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vIGxhYmVsZWQgc3Rh
dGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBwb3J0ZWQuCisKK3NpbXBsZV9zdGF0ZW1lbnQKKyAg
ICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7ICQkID0gJDE7IH0KKyAgICB8IGV4cHJlc3Npb25f
c3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNlbGVjdGlvbl9zdGF0ZW1lbnQgICB7ICQk
ID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8
IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0
YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7ICQkID0gMDsgfQorICAgIHwg
TEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVu
dF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfSBSSUdIVF9CUkFDRSB7
CisgICAgICAgIGlmICgkMyAhPSAwKQorICAgICAgICAgICAgJDMtPnNldE9wZXJhdG9yKEVPcFNl
cXVlbmNlKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOworCitzdGF0ZW1lbnRfbm9f
bmV3X3Njb3BlCisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsgJCQgPSAk
MTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAgICAgICAgICAgICB7ICQkID0gJDE7IH0K
KyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKKyAgICAvLyBTdGF0ZW1l
bnQgdGhhdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBzY29wZSwgZm9yIHNlbGVjdGlvbl9zdGF0ZW1l
bnQsIGl0ZXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IExFRlRfQlJBQ0UgUklHSFRfQlJBQ0Ugewor
ICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIHwgTEVGVF9CUkFDRSBzdGF0ZW1lbnRfbGlzdCBS
SUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMikKKyAgICAgICAgICAgICQyLT5zZXRPcGVyYXRv
cihFT3BTZXF1ZW5jZSk7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICAgIDsKKworc3RhdGVt
ZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgMCk7CisgICAgfQorICAgIHwgc3RhdGVtZW50
X2xpc3Qgc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAgfQorICAgIDsKKworZXhwcmVzc2lvbl9z
dGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9IDA7IH0KKyAgICB8IGV4cHJlc3Npb24g
U0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigkMSk7IH0KKyAgICA7
CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElGIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBS
SUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQgeworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS5saW5lLCAkMykpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCAkMS5saW5lKTsKKyAgICB9CisgICAgOworCitzZWxlY3Rp
b25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6IHN0YXRlbWVudCBFTFNFIHN0YXRlbWVudCB7CisgICAg
ICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gJDM7CisgICAgfQorICAgIHwg
c3RhdGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAw
OworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5vICdzd2l0Y2gnLiAgU3dpdGNo
IHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29uZGl0aW9uCisgICAgLy8gSW4gMTk5NiBj
KysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xlIGRlY2xhcmF0aW9ucworICAg
IDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQxKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElE
RU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKCFwYXJzZUNv
bnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGlu
dGVybU5vZGUpKQorICAgICAgICAgICAgJCQgPSAkNDsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICA7CisKK2l0ZXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IFdISUxFIExF
RlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJR0hUX1BBUkVOIHN0YXRlbWVudF9u
b19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwor
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoMCwgJDYsICQ0
LCAwLCB0cnVlLCAkMS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7CisgICAgfQorICAgIHwgRE8geyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIFNF
TUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQ4Lmxp
bmUsICQ2KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAkMywgJDYsIDAsIGZh
bHNlLCAkNC5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7
CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gZm9yX2luaXRfc3Rh
dGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudCBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Nj
b3BlIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKCQ0LCAkNywgcmVpbnRlcnBy
ZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVy
bVR5cGVkKj4oJDUubm9kZTIpLCB0cnVlLCAkMS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIDsKKworZm9yX2luaXRfc3RhdGVtZW50
CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQor
ICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9Cisg
ICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRpdGlvbiB7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8geworICAgICAgICAkJCA9IDA7CisgICAg
fQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50CisgICAgOiBjb25kaXRpb25vcHQgU0VNSUNP
TE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAgICAgICAgJCQubm9kZTIgPSAwOworICAg
IH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gZXhwcmVzc2lvbiAgeworICAgICAgICAk
JC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOworICAgIH0KKyAgICA7CisKK2p1
bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1JQ09MT04geworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4g
bG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wQ29udGludWUsICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJSRUFLIFNFTUlDT0xPTiB7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGluZSk7CisgICAgfQorICAgIHwgUkVUVVJO
IFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3Qg
cmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBT
RU1JQ09MT04geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJy
YW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5mdW5j
dGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1cnJl
bnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVy
biBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rp
b25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJl
dHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09MT04geworICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgJDEubGluZSk7CisgICAgfQorICAgIDsKKworLy8gR3Jh
bW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK3RyYW5z
bGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAgIH0KKyAgICB8IHRy
YW5zbGF0aW9uX3VuaXQgZXh0ZXJuYWxfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAwKTsKKyAgICAgICAg
cGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAgIH0KKyAgICA7CisKK2V4dGVybmFsX2Rl
Y2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9kZWZpbml0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsK
KyAgICB9CisgICAgfCBkZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAg
IDsKKworZnVuY3Rpb25fZGVmaW5pdGlvbgorICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIHsKKyAg
ICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24pOworICAgICAgICBURnVu
Y3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24uZ2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICAvLwor
ICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBp
cyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCisgICAgICAgIC8vIGFzIGl0IHdv
dWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3
ZSdyZSBsb29raW5nIHVwCisgICAgICAgIC8vIGFuIGVhcmxpZXIgb2NjdXJhbmNlLgorICAgICAg
ICAvLworICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5Lgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwg
ImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
UmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJz
IG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKGZ1bmN0aW9uLmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIs
IGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIiLCBmdW5jdGlvbi5nZXRSZXR1
cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4gZnVuY3Rpb24gY2Fubm90IHJldHVybiBh
IHZhbHVlIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBOZXcgc3ltYm9s
IHRhYmxlIHNjb3BlIGZvciBib2R5IG9mIGZ1bmN0aW9uIHBsdXMgaXRzIGFyZ3VtZW50cworICAg
ICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsKKworICAg
ICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUgcmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNo
ZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAgICAgICAgLy8KKyAgICAgICAgcGFyc2VD
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkp
OworICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gZmFsc2U7CisK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5zZXJ0IHBhcmFtZXRlcnMgaW50byB0aGUgc3ltYm9s
IHRhYmxlLgorICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGhhcyBubyBuYW1lLCBpdCdzIG5v
dCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQgaXQKKyAgICAgICAgLy8gKGNvdWxkIGJlIHVz
ZWQgZm9yIHVudXNlZCBhcmdzKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxzbywgYWNjdW11
bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8gdGhlIEhJTCwgc28gbG93ZXIgbGV2ZWwg
Y29kZQorICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBmaW5kIHBhcmFtZXRlcnMuCisgICAgICAg
IC8vCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtTm9kZXMgPSBuZXcgVEludGVybUFn
Z3JlZ2F0ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNv
dW50KCk7IGkrKykgeworICAgICAgICAgICAgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbltp
XTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApIHsKKyAgICAgICAgICAgICAgICBU
VmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlw
ZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBh
cmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2Vy
dCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
JDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRyYW5zZmVyIG93bmVyc2hpcCBvZiBuYW1l
IHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgcGFyYW0ubmFtZSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5saW5lKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNl
dEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICQxLmxpbmUpOwor
ICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBwYXJzZUNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIH0KKyAgICBjb21wb3VuZF9zdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyByZXR1
cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KKyAgICAgICAgLy8gICBNYXkgYmUg
YmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQorICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRWb2lkICYmICEgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gZG9lcyBu
b3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtQWdncmVnYXRlLCAkMywg
MCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOworICAg
ICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5mdW5jdGlvbi0+Z2V0UmV0dXJu
VHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBk
ZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYworICAgICAgICAvLyBp
bmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJz
ZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShwYXJzZUNv
bnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsKKyAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUocGFyc2VDb250ZXh0LT5j
b250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICB9CisgICAgOworCislJQpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2Nv
bXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
aW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgorCisvLwor
Ly8gVHdvIHB1cnBvc2VzOgorLy8gMS4gIFNob3cgYW4gZXhhbXBsZSBvZiBob3cgdG8gaXRlcmF0
ZSB0cmVlLiAgRnVuY3Rpb25zIGNhbgorLy8gICAgIGFsc28gZGlyZWN0bHkgY2FsbCBUcmF2ZXJz
ZSgpIG9uIGNoaWxkcmVuIHRoZW1zZWx2ZXMgdG8KKy8vICAgICBoYXZlIGZpbmVyIGdyYWluZWQg
Y29udHJvbCBvdmVyIHRoZSBwcm9jZXNzIHRoYW4gc2hvd24gaGVyZS4KKy8vICAgICBTZWUgdGhl
IGxhc3QgZnVuY3Rpb24gZm9yIGhvdyB0byBnZXQgc3RhcnRlZC4KKy8vIDIuICBQcmludCBvdXQg
YSB0ZXh0IGJhc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSB0cmVlLgorLy8KKworLy8KKy8vIFVzZSB0
aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBub2RlIHRvIG5vZGUgaW4KKy8vIHRo
ZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUT3V0cHV0VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgeworcHVibGljOgorICAgIFRPdXRwdXRUcmF2ZXJzZXIoVEluZm9TaW5rJiBpKSA6
IGluZm9TaW5rKGkpIHsgfQorICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVy
bUJyYW5jaCopOworfTsKKworVFN0cmluZyBUVHlwZTo6Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25z
dAoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworCisgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUdsb2JhbCkKKyAgICAgICAgc3RyZWFtIDw8
IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAi
ICI7CisgICAgaWYgKGFycmF5KQorICAgICAgICBzdHJlYW0gPDwgImFycmF5IG9mICI7CisgICAg
aWYgKG1hdHJpeCkKKyAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIlgiIDw8IHNpemUgPDwgIiBt
YXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXplID4gMSkKKyAgICAgICAgc3RyZWFtIDw8IHNp
emUgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CisKKyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNT
dHJpbmcoKTsKKyAgICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisvLworLy8gSGVscGVyIGZ1
bmN0aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0IG9mIHRyYXZlcnNpbmcuCisvLworCit2b2lk
IE91dHB1dFRyZWVUZXh0KFRJbmZvU2luayYgaW5mb1NpbmssIFRJbnRlcm1Ob2RlKiBub2RlLCBj
b25zdCBpbnQgZGVwdGgpCit7CisgICAgaW50IGk7CisKKyAgICBpbmZvU2luay5kZWJ1Zy5sb2Nh
dGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAgZm9yIChpID0gMDsgaSA8IGRlcHRoOyArK2kp
CisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICIgICI7Cit9CisKKy8vCisvLyBUaGUgcmVzdCBv
ZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBmdW5jdGlvbnMuICBUaGUgbGFzdCBvbmUKKy8v
IGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRyYXZlcnNhbC4KKy8vCisvLyBSZXR1cm4gdHJ1
ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUgdGhlIGV4dGVybmFsIHRyYXZlcnNhbAorLy8g
Y29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5b3UgcHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2Vs
ZiwKKy8vIHJldHVybiBmYWxzZS4KKy8vCisKK3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2lu
aywgbm9kZSwgZGVwdGgpOworCisgICAgaW5mb1NpbmsuZGVidWcgPDwgIiciIDw8IG5vZGUtPmdl
dFN5bWJvbCgpIDw8ICInICI7CisgICAgaW5mb1NpbmsuZGVidWcgPDwgIigiIDw8IG5vZGUtPmdl
dENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgVElu
Zm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwg
ZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2UgRU9w
QXNzaWduOiAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1vdmUgc2Vjb25kIGNoaWxk
IHRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluaXRp
YWxpemU6ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJpbml0aWFsaXplIGZpcnN0IGNoaWxk
IHdpdGggc2Vjb25kIGNoaWxkIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246
ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWRkIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0
IGNoaWxkIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAg
ICAgICAgICAgICBvdXQuZGVidWcgPDwgInN1YnRyYWN0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0
IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJtdWx0aXBseSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGls
ZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjog
IG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246ICBvdXQu
ZGVidWcgPDwgInZlY3RvciBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOiAgb3V0LmRlYnVn
IDw8ICJtYXRyaXggc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAi
bWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZGl2aWRl
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0LmRlYnVnIDw8ICJkaXJlY3QgaW5kZXgiOyAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dC5kZWJ1ZyA8PCAiaW5kaXJlY3Qg
aW5kZXgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogICBvdXQu
ZGVidWcgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BWZWN0b3JTd2l6emxlOiBvdXQuZGVidWcgPDwgInZlY3RvciBzd2l6emxlIjsgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6ICAgIG91dC5kZWJ1ZyA8PCAiYWRkIjsgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdWI6ICAgIG91dC5kZWJ1ZyA8
PCAic3VidHJhY3QiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6
ICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHkiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BEaXY6ICAgIG91dC5kZWJ1ZyA8PCAiZGl2aWRlIjsgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVhbDogICAgICAgICAgICBvdXQuZGVidWcgPDwg
IkNvbXBhcmUgRXF1YWwiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Tm90RXF1YWw6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIE5vdCBFcXVhbCI7ICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgIG91dC5kZWJ1
ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFu
IjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0
LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVhbCI7ICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVy
IFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2Nh
bGFyOiBvdXQuZGVidWcgPDwgInZlY3Rvci1zY2FsZSI7ICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXQuZGVidWcgPDwgInZlY3Rvci10aW1lcy1t
YXRyaXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOiBvdXQu
ZGVidWcgPDwgIm1hdHJpeC10aW1lcy12ZWN0b3IiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwgIm1hdHJpeC1zY2FsZSI7ICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXQuZGVidWcgPDwg
Im1hdHJpeC1tdWx0aXBseSI7ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiAgb3V0LmRlYnVnIDw8ICJsb2dpY2FsLW9yIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMb2dpY2FsWG9yOiBvdXQuZGVidWcgPDwgImxvZ2ljYWwteG9yIjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTG9naWNhbEFuZDogb3V0LmRlYnVnIDw8ICJsb2dpY2FsLWFuZCI7IGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcgPDwgIjx1bmtub3duIG9wPiI7CisgICAgfQorCisg
ICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7
CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSog
bm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAgT3V0cHV0VHJl
ZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsK
KyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgdmFs
dWUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6Cisg
ICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgIG91dC5kZWJ1ZyA8PCAiTmVnYXRlIGNvbmRp
dGlvbmFsIjsgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICBvdXQu
ZGVidWcgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
UG9zdERlY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1EZWNyZW1lbnQiOyAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgb3V0LmRlYnVnIDw8ICJQcmUtSW5j
cmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBv
dXQuZGVidWcgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBFT3BDb252SW50VG9Cb29sOiAgb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGludCB0byBib29sIjsg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQuZGVidWcgPDwgIkNv
bnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zs
b2F0Om91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0IjticmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGludCB0byBmbG9h
dCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OiBvdXQuZGVidWcgPDwg
IkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0ludDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGludCI7ICBicmVhazsKKworICAg
ICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICBvdXQuZGVidWcgPDwgInJhZGlhbnMiOyAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgIG91dC5kZWJ1
ZyA8PCAiZGVncmVlcyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaW46
ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzaW5lIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvczogICAgICAgICAgICBvdXQuZGVidWcgPDwgImNvc2luZSI7ICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVGFuOiAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAidGFuZ2VudCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BB
c2luOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgc2luZSI7ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFyYyBjb3Np
bmUiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcEV4cDogICAgICAgICAgICBvdXQuZGVidWcgPDwgImV4cCI7ICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibG9n
IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJleHAyIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcExvZzI6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImxvZzIiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
c3FydCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbnZlcnNlU3Fy
dDogICAgb3V0LmRlYnVnIDw8ICJpbnZlcnNlIHNxcnQiOyAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQWJzb2x1dGUgdmFsdWUi
OyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJTaWduIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZsb29y
OiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZsb29yIjsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ2VpbGluZyI7ICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAgb3V0LmRl
YnVnIDw8ICJGcmFjdGlvbiI7ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9w
TGVuZ3RoOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAibGVuZ3RoIjsgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgb3V0LmRlYnVnIDw8ICJub3JtYWxp
emUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR4OiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJkUGR4IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAorICAgICAgICAgICAgLy8JY2Fz
ZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJmd2lkdGgiOyAgICAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgICAgICAKKworICAgICAgICBjYXNlIEVPcEFueTogICAgICAg
ICAgICBvdXQuZGVidWcgPDwgImFueSI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWxsIjsgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4
RXJyb3IsICJCYWQgdW5hcnkgb3AiKTsKKyAgICB9CisKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8PCAi
XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAg
VEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVP
cE51bGwpIHsKKyAgICAgICAgb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAibm9kZSBp
cyBzdGlsbCBFT3BOdWxsISIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBP
dXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3AoKSkgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiAgICAgIG91dC5kZWJ1ZyA8PCAiU2Vx
dWVuY2VcbiI7IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91
dC5kZWJ1ZyA8PCAiQ29tbWFcbiI7IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEVPcEZ1bmN0
aW9uOiAgICAgIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gRGVmaW5pdGlvbjogIiA8PCBub2RlLT5n
ZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogIG91dC5kZWJ1
ZyA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gUGFyYW1ldGVy
czogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Rmxv
YXQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjMjogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0
IHZlYzMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogIG91dC5kZWJ1
ZyA8PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJvb2wiOyAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0QlZlYzI6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3Ry
dWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dC5k
ZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SW50OiAgIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGludCI7ICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMyIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29u
c3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IG91
dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0MjogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDMi
OyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dC5kZWJ1ZyA8PCAi
Q29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0
OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qgc3RydWN0dXJlIjsgIGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhh
biI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAg
IG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVz
cyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5F
cXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAgICAgIG91dC5kZWJ1ZyA8PCAiRXF1YWwi
OyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JO
b3RFcXVhbDogICBvdXQuZGVidWcgPDwgIk5vdEVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1v
ZCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJwb3ciOyAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQXRhbjogICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2VudCI7IGJyZWFrOworCisgICAgICAgIGNhc2Ug
RU9wTWluOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtaW4iOyAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibWF4IjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXQuZGVidWcgPDwgImNsYW1w
IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAic3RlcCI7ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTbW9v
dGhTdGVwOiAgICBvdXQuZGVidWcgPDwgInNtb290aHN0ZXAiOyAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQuZGVidWcgPDwgImRpc3RhbmNlIjsgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3Nz
OiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogICBvdXQuZGVidWcgPDwgImZhY2UtZm9yd2Fy
ZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0
LmRlYnVnIDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFJlZnJhY3Q6ICAgICAgIG91dC5kZWJ1ZyA8PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImNv
bXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogb3V0LmRl
YnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIGFnZ3JlZ2F0aW9uIG9wIik7CisgICAgfQor
CisgICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9wU2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAh
PSBFT3BQYXJhbWV0ZXJzKQorICAgICAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBv
dXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwor
CisgICAgb3V0LmRlYnVnIDw8ICJUZXN0IGNvbmRpdGlvbiBhbmQgc2VsZWN0IjsKKyAgICBvdXQu
ZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworCisg
ICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7
CisgICAgb3V0LmRlYnVnIDw8ICJDb25kaXRpb25cbiI7CisgICAgbm9kZS0+Z2V0Q29uZGl0aW9u
KCktPnRyYXZlcnNlKHRoaXMpOworCisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUs
IGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpIHsKKyAgICAgICAgb3V0LmRl
YnVnIDw8ICJ0cnVlIGNhc2VcbiI7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2Ug
aXMgbnVsbFxuIjsKKworICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2NrKCkpIHsKKyAgICAgICAg
T3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0LmRlYnVn
IDw8ICJmYWxzZSBjYXNlXG4iOworICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZl
cnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25z
dGFudFVuaW9uKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAg
ICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChvdXQs
IG5vZGUsIGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpW2ldLmdldFR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgpKQor
ICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInRydWUiOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSI7CisKKyAgICAg
ICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAg
ICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRGQ29uc3QoKTsKKyAgICAgICAgICAg
ICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgb3V0LmRlYnVn
IDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0SUNvbnN0KCk7CisgICAgICAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKGNvbnN0IGludClcbiI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dC5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJVbmtub3duIGNvbnN0YW50Iiwgbm9kZS0+Z2V0
TGluZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ym9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRU
cmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCB3aXRo
IGNvbmRpdGlvbiAiOworICAgIGlmICghIG5vZGUtPnRlc3RGaXJzdCgpKQorICAgICAgICBvdXQu
ZGVidWcgPDwgIm5vdCAiOworICAgIG91dC5kZWJ1ZyA8PCAidGVzdGVkIGZpcnN0XG4iOworCisg
ICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7
CisgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgIkxvb3Ag
Q29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgY29uZGl0aW9uXG4iOwor
CisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9k
ZS0+Z2V0Qm9keSgpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBCb2R5XG4iOworICAg
ICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAg
ICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgYm9keVxuIjsKKworICAgIGlmIChub2RlLT5nZXRUZXJt
aW5hbCgpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7
CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBUZXJtaW5hbCBFeHByZXNzaW9uXG4iOworICAg
ICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICAt
LWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQoreworICAgIFRJ
bmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpIHsKKyAgICAgICAgY2Fz
ZSBFT3BLaWxsOiAgICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBLaWxsIjsgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IEJy
ZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udGludWU6ICBvdXQuZGVi
dWcgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BS
ZXR1cm46ICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IFVua25vd24g
QnJhbmNoIjsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkg
eworICAgICAgICBvdXQuZGVidWcgPDwgIiB3aXRoIGV4cHJlc3Npb25cbiI7CisgICAgICAgICsr
ZGVwdGg7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIC0tZGVwdGg7CisgICAgfSBlbHNlCisgICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgb25l
IHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgorLy8gSW5kaXZpZHVh
bCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9m
IHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9j
ZXNzZWQuCisvLwordm9pZCBUSW50ZXJtZWRpYXRlOjpvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiBy
b290KQoreworICAgIGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFRPdXRw
dXRUcmF2ZXJzZXIgaXQoaW5mb1NpbmspOworCisgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKK30K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDg2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gRGVmaW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5
IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisvLyBvZiBzaGFkZXJzLiAg
VGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJzZXIgY3JlYXRlcy4KKy8vCisvLyBOb2RlcyBpbiB0aGUg
dHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhpZXJhcmNoeSBvZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAK
Ky8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlzIGEgbm9kZSBpbiBhIHRyZWUuICBUaGVyZSBpcyBubyBw
cmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsKKy8vIGVhY2ggbm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0
eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4uCisvLworCisjaWZuZGVmIF9fSU5URVJNRURJQVRFX0gK
KyNkZWZpbmUgX19JTlRFUk1FRElBVEVfSAorCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvVHlwZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci9Db25zdGFu
dFVuaW9uLmgiCisKKy8vCisvLyBPcGVyYXRvcnMgdXNlZCBieSB0aGUgaGlnaC1sZXZlbCAocGFy
c2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCisvLworZW51bSBUT3BlcmF0b3IgeworICAgIEVPcE51
bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBzaG91bGQgb25seSBtZWFuIGEgbm9kZSBp
cyBzdGlsbCBiZWluZyBidWlsdAorICAgIEVPcFNlcXVlbmNlLCAgICAgICAgLy8gZGVub3RlcyBh
IGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVycywgZXRjLgorICAgIEVPcEZ1bmN0aW9u
Q2FsbCwgICAgCisgICAgRU9wRnVuY3Rpb24sICAgICAgICAvLyBGb3IgZnVuY3Rpb24gZGVmaW5p
dGlvbgorICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8gYW4gYWdncmVnYXRlIGxpc3RpbmcgdGhl
IHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgorCisgICAgRU9wRGVjbGFyYXRpb24sCisgICAgRU9w
UHJvdG90eXBlLAorCisgICAgLy8KKyAgICAvLyBVbmFyeSBvcGVyYXRvcnMKKyAgICAvLworCisg
ICAgRU9wTmVnYXRpdmUsCisgICAgRU9wTG9naWNhbE5vdCwKKyAgICBFT3BWZWN0b3JMb2dpY2Fs
Tm90LAorCisgICAgRU9wUG9zdEluY3JlbWVudCwKKyAgICBFT3BQb3N0RGVjcmVtZW50LAorICAg
IEVPcFByZUluY3JlbWVudCwKKyAgICBFT3BQcmVEZWNyZW1lbnQsCisKKyAgICBFT3BDb252SW50
VG9Cb29sLAorICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKKyAgICBFT3BDb252Qm9vbFRvRmxvYXQs
CisgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9wQ29udkZsb2F0VG9JbnQsCisgICAgRU9w
Q29udkJvb2xUb0ludCwKKworICAgIC8vCisgICAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAgICAv
LworCisgICAgRU9wQWRkLAorICAgIEVPcFN1YiwKKyAgICBFT3BNdWwsCisgICAgRU9wRGl2LAor
ICAgIEVPcEVxdWFsLAorICAgIEVPcE5vdEVxdWFsLAorICAgIEVPcFZlY3RvckVxdWFsLAorICAg
IEVPcFZlY3Rvck5vdEVxdWFsLAorICAgIEVPcExlc3NUaGFuLAorICAgIEVPcEdyZWF0ZXJUaGFu
LAorICAgIEVPcExlc3NUaGFuRXF1YWwsCisgICAgRU9wR3JlYXRlclRoYW5FcXVhbCwKKyAgICBF
T3BDb21tYSwKKworICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyLAorICAgIEVPcFZlY3RvclRpbWVz
TWF0cml4LAorICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9yLAorICAgIEVPcE1hdHJpeFRpbWVzU2Nh
bGFyLAorCisgICAgRU9wTG9naWNhbE9yLAorICAgIEVPcExvZ2ljYWxYb3IsCisgICAgRU9wTG9n
aWNhbEFuZCwKKworICAgIEVPcEluZGV4RGlyZWN0LAorICAgIEVPcEluZGV4SW5kaXJlY3QsCisg
ICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisKKyAgICBFT3BWZWN0b3JTd2l6emxlLAorCisgICAg
Ly8KKyAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90ZW50aWFsbHkgbWFwcGVkIHRvIG9wZXJh
dG9ycworICAgIC8vCisKKyAgICBFT3BSYWRpYW5zLAorICAgIEVPcERlZ3JlZXMsCisgICAgRU9w
U2luLAorICAgIEVPcENvcywKKyAgICBFT3BUYW4sCisgICAgRU9wQXNpbiwKKyAgICBFT3BBY29z
LAorICAgIEVPcEF0YW4sCisKKyAgICBFT3BQb3csCisgICAgRU9wRXhwLAorICAgIEVPcExvZywK
KyAgICBFT3BFeHAyLAorICAgIEVPcExvZzIsCisgICAgRU9wU3FydCwKKyAgICBFT3BJbnZlcnNl
U3FydCwKKworICAgIEVPcEFicywKKyAgICBFT3BTaWduLAorICAgIEVPcEZsb29yLAorICAgIEVP
cENlaWwsCisgICAgRU9wRnJhY3QsCisgICAgRU9wTW9kLAorICAgIEVPcE1pbiwKKyAgICBFT3BN
YXgsCisgICAgRU9wQ2xhbXAsCisgICAgRU9wTWl4LAorICAgIEVPcFN0ZXAsCisgICAgRU9wU21v
b3RoU3RlcCwKKworICAgIEVPcExlbmd0aCwKKyAgICBFT3BEaXN0YW5jZSwKKyAgICBFT3BEb3Qs
CisgICAgRU9wQ3Jvc3MsCisgICAgRU9wTm9ybWFsaXplLAorICAgIEVPcEZhY2VGb3J3YXJkLAor
ICAgIEVPcFJlZmxlY3QsCisgICAgRU9wUmVmcmFjdCwKKworICAgIC8vRU9wRFBkeCwgICAgICAg
ICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9u
CisgICAgLy9FT3BEUGR5LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvL0VPcEZ3aWR0aCwgICAgICAgICAgLy8gRnJh
Z21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorCisgICAgRU9w
TWF0cml4VGltZXNNYXRyaXgsCisKKyAgICBFT3BBbnksCisgICAgRU9wQWxsLAorCisgICAgLy8K
KyAgICAvLyBCcmFuY2gKKyAgICAvLworCisgICAgRU9wS2lsbCwgICAgICAgICAgICAvLyBGcmFn
bWVudCBvbmx5CisgICAgRU9wUmV0dXJuLAorICAgIEVPcEJyZWFrLAorICAgIEVPcENvbnRpbnVl
LAorCisgICAgLy8KKyAgICAvLyBDb25zdHJ1Y3RvcnMKKyAgICAvLworCisgICAgRU9wQ29uc3Ry
dWN0SW50LAorICAgIEVPcENvbnN0cnVjdEJvb2wsCisgICAgRU9wQ29uc3RydWN0RmxvYXQsCisg
ICAgRU9wQ29uc3RydWN0VmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RWZWMzLAorICAgIEVPcENvbnN0
cnVjdFZlYzQsCisgICAgRU9wQ29uc3RydWN0QlZlYzIsCisgICAgRU9wQ29uc3RydWN0QlZlYzMs
CisgICAgRU9wQ29uc3RydWN0QlZlYzQsCisgICAgRU9wQ29uc3RydWN0SVZlYzIsCisgICAgRU9w
Q29uc3RydWN0SVZlYzMsCisgICAgRU9wQ29uc3RydWN0SVZlYzQsCisgICAgRU9wQ29uc3RydWN0
TWF0MiwKKyAgICBFT3BDb25zdHJ1Y3RNYXQzLAorICAgIEVPcENvbnN0cnVjdE1hdDQsCisgICAg
RU9wQ29uc3RydWN0U3RydWN0LAorCisgICAgLy8KKyAgICAvLyBtb3ZlcworICAgIC8vCisKKyAg
ICBFT3BBc3NpZ24sCisgICAgRU9wSW5pdGlhbGl6ZSwKKyAgICBFT3BBZGRBc3NpZ24sCisgICAg
RU9wU3ViQXNzaWduLAorICAgIEVPcE11bEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhU
aW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBF
T3BEaXZBc3NpZ24sCit9OworCitjbGFzcyBUSW50ZXJtVHJhdmVyc2VyOworY2xhc3MgVEludGVy
bUFnZ3JlZ2F0ZTsKK2NsYXNzIFRJbnRlcm1CaW5hcnk7CitjbGFzcyBUSW50ZXJtVW5hcnk7Citj
bGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbjsKK2NsYXNzIFRJbnRlcm1TZWxlY3Rpb247CitjbGFz
cyBUSW50ZXJtVHlwZWQ7CitjbGFzcyBUSW50ZXJtU3ltYm9sOworY2xhc3MgVEludGVybUxvb3A7
CitjbGFzcyBUSW5mb1Npbms7CisKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGUgdHJlZSBub2Rl
cworLy8KK2NsYXNzIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisKKyAgICBUSW50ZXJtTm9kZSgpIDogbGlu
ZSgwKSB7fQorICAgIHZpcnR1YWwgVFNvdXJjZUxvYyBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4g
bGluZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkgeyBsaW5lID0g
bDsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKikgPSAwOwor
ICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2Rl
KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9k
ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2Vs
ZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdl
dEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBn
ZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgflRJbnRlcm1Ob2RlKCkg
eyB9Citwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxvYyBsaW5lOworfTsKKworLy8KKy8vIFRoaXMg
aXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3RydWN0IFRJbnRlcm1Ob2RlUGFpciB7CisgICAg
VEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRlcm1Ob2RlKiBub2RlMjsKK307CisKKy8vCisv
LyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRoYXQgaGF2ZSBhIHR5cGUuCisvLworY2xh
c3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50
ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9CisgICAgdmlydHVhbCBUSW50
ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQorICAgIHZpcnR1
YWwgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdmly
dHVhbCBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgdmly
dHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFz
aWNUeXBlKCk7IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQorICAgIHZpcnR1YWwgVFByZWNpc2lvbiBn
ZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigpOyB9CisgICAg
dmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldE5vbWlu
YWxTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGludCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRJbnN0YW5jZVNpemUoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5KCkg
IGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9CisgICAgdmlydHVhbCBib29sIGlzVmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9CisgICAgdmlydHVhbCBib29s
IGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgY29uc3Qg
Y2hhciogZ2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNT
dHJpbmcoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpICBjb25zdCB7
IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CisgICAgVFN0cmluZyBnZXRDb21w
bGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307CisKKy8vCisvLyBIYW5kbGUgZm9yLCBk
by13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2NsYXNzIFRJbnRlcm1Mb29wIDogcHVibGlj
IFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtTG9vcChUSW50ZXJtTm9kZSAqaW5p
dCwgVEludGVybU5vZGUqIGFCb2R5LCBUSW50ZXJtVHlwZWQqIGFUZXN0LCBUSW50ZXJtVHlwZWQq
IGFUZXJtaW5hbCwgYm9vbCB0ZXN0Rmlyc3QpIDogCisgICAgICAgICAgICBpbml0KGluaXQpLAor
ICAgICAgICAgICAgYm9keShhQm9keSksCisgICAgICAgICAgICB0ZXN0KGFUZXN0KSwKKyAgICAg
ICAgICAgIHRlcm1pbmFsKGFUZXJtaW5hbCksCisgICAgICAgICAgICBmaXJzdCh0ZXN0Rmlyc3Qp
IHsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAg
ICBUSW50ZXJtTm9kZSAqZ2V0SW5pdCgpIHsgcmV0dXJuIGluaXQ7IH0KKyAgICBUSW50ZXJtTm9k
ZSAqZ2V0Qm9keSgpIHsgcmV0dXJuIGJvZHk7IH0KKyAgICBUSW50ZXJtVHlwZWQgKmdldFRlc3Qo
KSB7IHJldHVybiB0ZXN0OyB9CisgICAgVEludGVybVR5cGVkICpnZXRUZXJtaW5hbCgpIHsgcmV0
dXJuIHRlcm1pbmFsOyB9CisgICAgYm9vbCB0ZXN0Rmlyc3QoKSB7IHJldHVybiBmaXJzdDsgfQor
cHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlICppbml0OworICAgIFRJbnRlcm1Ob2RlICpib2R5
OyAgICAgICAvLyBjb2RlIHRvIGxvb3Agb3ZlcgorICAgIFRJbnRlcm1UeXBlZCAqdGVzdDsgICAg
ICAvLyBleGl0IGNvbmRpdGlvbiBhc3NvY2lhdGVkIHdpdGggbG9vcCwgY291bGQgYmUgMCBmb3Ig
J2ZvcicgbG9vcHMKKyAgICBUSW50ZXJtVHlwZWQgKnRlcm1pbmFsOyAgLy8gZXhpc3RzIGZvciBm
b3ItbG9vcHMKKyAgICBib29sIGZpcnN0OyAgICAgICAgICAgICAgLy8gdHJ1ZSBmb3Igd2hpbGUg
YW5kIGZvciwgbm90IGZvciBkby13aGlsZQorfTsKKworLy8KKy8vIEhhbmRsZSBicmVhaywgY29u
dGludWUsIHJldHVybiwgYW5kIGtpbGwuCisvLworY2xhc3MgVEludGVybUJyYW5jaCA6IHB1Ymxp
YyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogZSkgOgorICAgICAgICAgICAgZmxvd09wKG9wKSwKKyAgICAgICAgICAg
IGV4cHJlc3Npb24oZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2
ZXJzZXIqKTsKKyAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9Cisg
ICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQor
cHJvdGVjdGVkOgorICAgIFRPcGVyYXRvciBmbG93T3A7CisgICAgVEludGVybVR5cGVkKiBleHBy
ZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRlbWVudHMK
K307CisKKy8vCisvLyBOb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3ltYm9scyBvciBjb25zdGFu
dHMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLy8KK2NsYXNzIFRJbnRlcm1TeW1ib2wgOiBwdWJsaWMg
VEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICAvLyBpZiBzeW1ib2wgaXMgaW5pdGlhbGl6ZWQg
YXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUgcG9vbGFsbG9jYXRvciBv
ZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCisgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFs
bG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGls
ZQorICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWdu
IHRvIHN5bWJvbAorICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwg
Y29uc3QgVFR5cGUmIHQpIDogCisgICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7
IHN5bWJvbCA9IHN5bTt9IAorICAgIHZpcnR1YWwgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4g
aWQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0
dXJuIHN5bWJvbDsgIH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciopOworICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1
cm4gdGhpczsgfQorcHJvdGVjdGVkOgorICAgIGludCBpZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsK
K307CisKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7
CitwdWJsaWM6CisgICAgVEludGVybUNvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Q
b2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2lu
dGVyKHVuaW9uUG9pbnRlcikgeyB9CisgICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlcjsgfQorICAgIHZvaWQgc2V0
VW5pb25BcnJheVBvaW50ZXIoQ29uc3RhbnRVbmlvbiAqYykgeyB1bmlvbkFycmF5UG9pbnRlciA9
IGM7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5p
b24oKSAgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKiApOworICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwg
VEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheVBvaW50ZXI7Cit9OworCisvLworLy8gSW50ZXJtZWRpYXRlIGNsYXNzIGZv
ciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMuCisvLworY2xhc3MgVEludGVybU9wZXJh
dG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVE9wZXJhdG9yIGdldE9w
KCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAgICBib29sIG1vZGlmaWVzU3RhdGUoKSBjb25zdDsK
KyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90
ZShUSW5mb1NpbmsmKSB7IHJldHVybiB0cnVlOyB9Citwcm90ZWN0ZWQ6CisgICAgVEludGVybU9w
ZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlwZShFYnRGbG9hdCwgRWJwVW5k
ZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvLCBUVHlw
ZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9ICAgCisgICAgVE9wZXJhdG9yIG9wOwor
fTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwgdGhlIGJhc2ljIGJpbmFyeSBtYXRoIG9wZXJhdG9y
cy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7Citw
dWJsaWM6CisgICAgVEludGVybUJpbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Io
bykge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAg
IHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRlcm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9Cisg
ICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0OyB9
CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcmln
aHQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKK3Byb3Rl
Y3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CisgICAgVEludGVybVR5cGVkKiByaWdodDsK
K307CisKKy8vCisvLyBOb2RlcyBmb3IgdW5hcnkgbWF0aCBvcGVyYXRvcnMuCisvLworY2xhc3Mg
VEludGVybVVuYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVElu
dGVybVVuYXJ5KFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCks
IG9wZXJhbmQoMCkge30KKyAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9w
ZXJhdG9yKG8pLCBvcGVyYW5kKDApIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRl
cm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlwZWQq
IG8pIHsgb3BlcmFuZCA9IG87IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFu
ZCgpIHsgcmV0dXJuIG9wZXJhbmQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNV
bmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIHByb21vdGUoVElu
Zm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBvcGVyYW5kOworfTsKKwor
dHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwordHlwZWRlZiBU
VmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7CisvLworLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9u
IGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCisvLworY2xhc3MgVEludGVybUFn
Z3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1B
Z2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2Up
LCBwcmFnbWFUYWJsZSgwKSB7IH0KKyAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6
IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9CisgICAgflRJbnRlcm1BZ2dy
ZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorICAgIHZpcnR1YWwgVEludGVybUFnZ3Jl
Z2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE9wZXJhdG9yKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQorICAgIHZpcnR1YWwgVEludGVy
bVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQorICAgIHZpcnR1
YWwgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIHZpcnR1YWwg
VFF1YWxpZmllckxpc3QmIGdldFF1YWxpZmllcigpIHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAg
IHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQorICAgIHZvaWQgc2V0
RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQorICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJl
dHVybiBvcHRpbWl6ZTsgfQorICAgIGJvb2wgZ2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQor
ICAgIHZvaWQgYWRkVG9QcmFnbWFUYWJsZShjb25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7Cisg
ICAgY29uc3QgVFByYWdtYVRhYmxlJiBnZXRQcmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpw
cmFnbWFUYWJsZTsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVElu
dGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCisgICAgVEludGVy
bUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxs
b3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXF1ZW5jZTsKKyAg
ICBUUXVhbGlmaWVyTGlzdCBxdWFsaWZpZXI7CisgICAgVFN0cmluZyBuYW1lOworICAgIGJvb2wg
dXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBuYW1lcworICAg
IGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsKKyAgICBUUHJhZ21hVGFibGUgKnByYWdt
YVRhYmxlOworfTsKKworLy8KKy8vIEZvciBpZiB0ZXN0cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhl
cmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVudC4KKy8vCitjbGFzcyBUSW50ZXJtU2VsZWN0aW9uIDog
cHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVybVNlbGVjdGlvbihUSW50
ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQikg
OgorICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkp
LCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7
fQorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSog
dHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0IFRUeXBlJiB0eXBlKSA6CisgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVC
KSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRl
cm1UcmF2ZXJzZXIqKTsKKyAgICBib29sIHVzZXNUZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJl
dHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9k
ZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtTm9kZSogZ2V0VHJ1ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9
CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlQmxvY2s7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0
aW9uTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQq
IGNvbmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOworICAgIFRJbnRlcm1Ob2Rl
KiBmYWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAoreworICAgIFByZVZpc2l0LAorICAgIElu
VmlzaXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRy
ZWUuICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlzLCAKKy8vIHB1dCB0aGVpciB0cmF2ZXJz
YWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4gcGFzcworLy8gaXQgdG8gYSBUcmF2ZXJz
ZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlzLCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhv
ZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisvLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHBy
ZS12aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9kZSdzIHN1YnRyZWUuCisvLworY2xhc3Mg
VEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxF
VEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKworICAgIFRJbnRlcm1UcmF2ZXJzZXIoYm9vbCBwcmVW
aXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9IGZhbHNlLCBib29sIHBvc3RWaXNpdCA9IGZhbHNl
LCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2UpIDogCisgICAgICAgICAgICBwcmVWaXNpdChwcmVW
aXNpdCksCisgICAgICAgICAgICBpblZpc2l0KGluVmlzaXQpLAorICAgICAgICAgICAgcG9zdFZp
c2l0KHBvc3RWaXNpdCksCisgICAgICAgICAgICByaWdodFRvTGVmdChyaWdodFRvTGVmdCksCisg
ICAgICAgICAgICBkZXB0aCgwKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqKSB7fQorICAgIHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVElu
dGVybUNvbnN0YW50VW5pb24qKSB7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29s
IHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopIHtyZXR1cm4gdHJ1ZTt9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwg
Ym9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikge3JldHVybiB0cnVlO30K
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gq
KSB7cmV0dXJuIHRydWU7fQorCisgICAgdm9pZCBpbmNyZW1lbnREZXB0aCgpIHtkZXB0aCsrO30K
KyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRoLS07fQorCisgICAgY29uc3QgYm9vbCBw
cmVWaXNpdDsKKyAgICBjb25zdCBib29sIGluVmlzaXQ7CisgICAgY29uc3QgYm9vbCBwb3N0Vmlz
aXQ7CisgICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsKKworcHJvdGVjdGVkOgorICAgIGludCBk
ZXB0aDsKK307CisKKyNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURf
CisjZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisKKyNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorCitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7
CisgICAgaW50IG9mZnNldHNbNF07CisgICAgaW50IG51bTsKK307CisKKy8vCisvLyBTZXQgb2Yg
aGVscGVyIGZ1bmN0aW9ucyB0byBoZWxwIHBhcnNlIGFuZCBidWlsZCB0aGUgdHJlZS4KKy8vCitj
bGFzcyBUSW5mb1Npbms7CitjbGFzcyBUSW50ZXJtZWRpYXRlIHsKK3B1YmxpYzogICAgCisgICAg
UE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorCisgICAgVElu
dGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9CisgICAgVEludGVybVN5
bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgVFNv
dXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJzaW9uKFRPcGVyYXRvciwgY29u
c3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1h
dGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQs
IFRTb3VyY2VMb2MsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQXNzaWdu
KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBU
U291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRPcGVyYXRvciBvcCwgVElu
dGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGls
ZCwgVFNvdXJjZUxvYywgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jv
d0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0LCBUU291cmNl
TG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBu
b2RlLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBzZXRBZ2dyZWdhdGVPcGVy
YXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybU5v
ZGUqICBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZVBhaXIgY29k
ZSwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTZWxlY3Rpb24oVEludGVybVR5
cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJs
b2NrLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBl
ZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUNv
bnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiosIGNvbnN0IFRUeXBl
JiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBwcm9tb3RlQ29uc3RhbnRVbmlvbihU
QmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiopIDsKKyAgICBib29sIHBhcnNlQ29uc3RU
cmVlKFRTb3VyY2VMb2MsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwg
VFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsg
ICAgICAgIAorICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRJbnRlcm1Ob2RlKiwgVEludGVybU5v
ZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBib29sIHRlc3RGaXJzdCwgVFNvdXJj
ZUxvYyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVk
KiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVs
ZHMmLCBUU291cmNlTG9jKTsKKyAgICBib29sIHBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiwgRVNo
TGFuZ3VhZ2UpOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisgICAgdm9pZCBvdXRwdXRU
cmVlKFRJbnRlcm1Ob2RlKik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVEluZm9TaW5rJiBpbmZv
U2luazsKKworcHJpdmF0ZToKKyAgICB2b2lkIG9wZXJhdG9yPShUSW50ZXJtZWRpYXRlJik7IC8v
IHByZXZlbnQgYXNzaWdubWVudHMKK307CisKKyNlbmRpZiAvLyBfTE9DQUxfSU5URVJNRURJQVRF
X0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfX09TSU5DTFVERV9ICisjZGVmaW5lIF9f
T1NJTkNMVURFX0gKKworLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyB0aGUgd2lu
ZG93J3Mgc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAorLy8gZGVjbGFyZXMgYW55IHdpbmRvd3Mgc3Bl
Y2lmaWMgZnVuY3Rpb25zLgorLy8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9X
SU42NCkKKyNkZWZpbmUgQU5HTEVfT1NfV0lOCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19zdW4pCisjZGVmaW5lIEFO
R0xFX09TX1BPU0lYCisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3JtLgorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNkZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZD
X0VYVFJBTEVBTiAxCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChBTkdMRV9P
U19QT1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+Cisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKKyNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9u
cworLy8KKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKK3R5cGVkZWYgRFdPUkQgT1NfVExTSW5k
ZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIChUTFNfT1VUX09GX0lOREVYRVMpCisj
ZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgT1NfVExT
SW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVYIDB4RkZGRkZGRkYKKyNlbmRpZiAg
Ly8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKTsKK2Jvb2wg
T1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSk7Citib29s
IE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOworCitpbmxpbmUgdm9pZCogT1Nf
R2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQoreworICAgIGFzc2VydChuSW5kZXggIT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQorICAgIHJl
dHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
KyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOworI2VuZGlmICAvLyBBTkdM
RV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNMVURFX0gKSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL29zc291cmNlX3Bvc2l4LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9vc3NvdXJjZV9wb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBvc2l4IHNwZWNp
ZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworI2lm
ICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9yIFRyeWluZyB0byBidWlsZCBhIHBvc2l4
IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVpbGQuCisjZW5kaWYKKworLy8KKy8vIFRo
cmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCitPU19UTFNJbmRleCBPU19BbGxvY1RM
U0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQb29sSW5kZXg7CisKKyAgICAvLworICAg
IC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBpZiAoKHB0aHJlYWRfa2V5
X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYg
Ik9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2NhbCBTdG9y
YWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKworCitib29sIE9TX1NldFRMU1ZhbHVlKE9T
X1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisgICAgaWYgKG5JbmRleCA9PSBP
U19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFs
dWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5JbmRleCwgbHB2VmFsdWUpID09IDApCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQor
CisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICBpZiAo
bkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJP
U19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxldGUgdGhlIGdsb2JhbCBwb29sIGtleS4K
KyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxldGUobkluZGV4KSA9PSAwKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKy8v
CisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGZ1
bmN0aW9ucworLy8KKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNlcnJvciBUcnlpbmcg
dG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNpZmljIGZpbGUgaW4gYSBub24gd2luZG93cyBidWlsZC4K
KyNlbmRpZgorCisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCisvLwor
T1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7CisJRFdPUkQgZHdJbmRleCA9IFRsc0Fs
bG9jKCk7CisJaWYgKGR3SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCWFzc2VydCgw
ICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwg
U3RvcmFnZSIpOworCQlyZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisJfQorCisJcmV0dXJu
IGR3SW5kZXg7Cit9CisKKworYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgs
IHZvaWQgKmxwdlZhbHVlKQoreworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7
CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzU2V0VmFsdWUobkluZGV4LCBscHZWYWx1
ZSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wg
T1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKwlpZiAobkluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJ
bnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc0ZyZWUo
bkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKKy8v
CisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9uZyBkYXRhIGZyb20gbm9kZSB0byBub2Rl
IGluIAorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNzIFRDb25zdFRyYXZlcnNlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3Rh
bnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1
Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0
KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0KSwKKyAgICAgICAgY29uc3RydWN0b3JUeXBl
KGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLCBp
bmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3ltVGFibGUpLCBlcnJvcihmYWxzZSksIGlzTWF0
cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQorCXsKKwkJaW5kZXggPSAwOworCX0KKworCWJvb2wg
ZXJyb3I7CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsK
Kwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworCWJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwlib29sIHZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlz
aXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisJYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKik7CisJYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOworCisgICAgaW50IGluZGV4OworICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXk7
CisgICAgVFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOworICAgIGJv
b2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIFRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7CisgICAgaW50IHNpemU7IC8vIHNpemUgb2YgdGhlIGNv
bnN0cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29sIGlzTWF0cml4OworICAgIGludCBtYXRy
aXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3Qg
dGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJl
IHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRo
YXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlv
ciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRv
IGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4g
ZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFs
RXJyb3IsICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUt
PmdldExpbmUoKSk7CisgICAgcmV0dXJuOworCit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKTsKKyAgICAK
KyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRTdHJpbmcgYnVmOwor
ICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFu
dCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBidWYuY19zdHIoKSwg
bm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9k
ZS0+Z2V0TGluZSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0
VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7
CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2ln
bmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRl
U3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5j
X3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIGlmICghbm9kZS0+aXNDb25z
dHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wQ29tbWEpIHsKKyAgICAgICAgVFN0cmlu
ZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9u
LWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBwZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5j
X3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09
IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVDb25zdGFudFBh
cmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IG5vZGUtPmdldE9wKCk7Cisg
ICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgICAg
IGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgaXNNYXRyaXgg
PSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21p
bmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAgICAKKworICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVu
ZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BDb21tYSkKKyAg
ICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAorCisgICAgICAgICgqcCktPnRyYXZlcnNl
KHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykgCisgICAgeworICAgICAgICBzaW5nbGVD
b25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51
bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBpc01hdHJpeCA9IGZhbHNlOworICAgICAg
ICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2Rl
LT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkgPSB1bmlv
bkFycmF5OworICAgIGludCBpbnN0YW5jZVNpemUgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKwor
ICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAgICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5
cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0
VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIGZvciAo
aW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGluc3Rh
bmNlU2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBsZWZ0VW5pb25B
cnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CisKKyAgICAgICAgICAgIChpbmRleCkr
KzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCB0b3RhbFNpemUgPSBpbmRl
eCArIHNpemU7CisgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIGlmICghaXNNYXRyaXgpIHsKKyAgICAg
ICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkg
PCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOworCisgICAgICAgICAgICAgICAg
KGluZGV4KSsrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY291bnQr
KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgIC8vIGZvciBtYXRyaXggY29uc3Ry
dWN0b3JzCisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgaW50IGVsZW1l
bnQgPSBpbmRleDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgLSBpID09
IDAgfHwgKGkgLSBlbGVtZW50KSAlIChtYXRyaXhTaXplICsgMSkgPT0gMCApCisgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKyAg
ICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRGQ29uc3QoMC4wZik7CisKKyAgICAgICAgICAgICAgICAoaW5kZXgpKys7CisKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCisgICAg
ICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRMb29wKFZp
c2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJMb29wIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29u
c3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2
aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsICJCcmFuY2ggTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25z
dHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgZXJyb3IgPSB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4
dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KKy8vIEluZGl2aWR1YWwgZnVuY3Rpb25z
IGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0
eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8K
K2Jvb2wgVEludGVybWVkaWF0ZTo6cGFyc2VDb25zdFRyZWUoVFNvdXJjZUxvYyBsaW5lLCBUSW50
ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0
cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5n
bGVDb25zdGFudFBhcmFtKQoreworICAgIGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFu
dFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisKKyAg
ICByb290LT50cmF2ZXJzZSgmaXQpOworICAgIGlmIChpdC5lcnJvcikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Vu
aXN0ZC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3VuaXN0ZC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACisvLyBUaGlzIGlzIGEgTlVMTCBmaWxlIGFuZCBpcyBtZWFu
dCB0byBiZSBlbXB0eQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgor
CitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8g
eW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlz
dHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywg
cGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBO
VklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJt
cywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwg
dW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2Fy
ZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5k
IHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBp
ZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4g
dGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9m
IHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2
aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklE
SUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIg
cmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5W
SURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmln
aHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5
IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBv
cmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEg
U09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAor
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ
TVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBF
SVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lO
IE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD
VCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9G
IFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04g
T0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVS
IFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNU
IExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworCisvLworLy8gYXRvbS5jCisvLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCisjdW5k
ZWYgbWFsbG9jCisjdW5kZWYgcmVhbGxvYworI3VuZGVmIGZyZWUKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitzdGF0aWMg
Y29uc3Qgc3RydWN0IHsKKyAgICBpbnQgdmFsOworICAgIGNvbnN0IGNoYXIgKnN0cjsKK30gdG9r
ZW5zW10gPSB7CisgICAgeyBDUFBfQU5EX09QLCAgICAgICAgICImJiIgfSwKKyAgICB7IENQUF9B
TkRfQVNTSUdOLCAgICAgIiY9IiB9LAorICAgIHsgQ1BQX1NVQl9BU1NJR04sICAgICAiLT0iIH0s
CisgICAgeyBDUFBfTU9EX0FTU0lHTiwgICAgICIlPSIgfSwKKyAgICB7IENQUF9BRERfQVNTSUdO
LCAgICAgIis9IiB9LAorICAgIHsgQ1BQX0RJVl9BU1NJR04sICAgICAiLz0iIH0sCisgICAgeyBD
UFBfTVVMX0FTU0lHTiwgICAgICIqPSIgfSwKKyAgICB7IENQUF9SSUdIVF9CUkFDS0VULCAgIjo+
IiB9LAorICAgIHsgQ1BQX0VRX09QLCAgICAgICAgICAiPT0iIH0sCisgICAgeyBDUFBfWE9SX09Q
LCAgICAgICAgICJeXiIgfSwgCisgICAgeyBDUFBfWE9SX0FTU0lHTiwgICAgICJePSIgfSwgCisg
ICAgeyBDUFBfRkxPQVRDT05TVEFOVCwgICI8ZmxvYXQtY29uc3Q+IiB9LAorICAgIHsgQ1BQX0dF
X09QLCAgICAgICAgICAiPj0iIH0sCisgICAgeyBDUFBfUklHSFRfT1AsICAgICAgICI+PiIgfSwK
KyAgICB7IENQUF9SSUdIVF9BU1NJR04sICAgIj4+PSIgfSwgCisgICAgeyBDUFBfSURFTlRJRklF
UiwgICAgICI8aWRlbnQ+IiB9LAorICAgIHsgQ1BQX0lOVENPTlNUQU5ULCAgICAiPGludC1jb25z
dD4iIH0sCisgICAgeyBDUFBfTEVfT1AsICAgICAgICAgICI8PSIgfSwKKyAgICB7IENQUF9MRUZU
X09QLCAgICAgICAgIjw8IiB9LAorICAgIHsgQ1BQX0xFRlRfQVNTSUdOLCAgICAiPDw9IiB9LAor
ICAgIHsgQ1BQX0xFRlRfQlJBQ0tFVCwgICAiPDoiIH0sCisgICAgeyBDUFBfTEVGVF9CUkFDRSwg
ICAgICI8JSIgfSwgCisgICAgeyBDUFBfREVDX09QLCAgICAgICAgICItLSIgfSwKKyAgICB7IENQ
UF9SSUdIVF9CUkFDRSwgICAgIiU+IiB9LCAKKyAgICB7IENQUF9ORV9PUCwgICAgICAgICAgIiE9
IiB9LAorICAgIHsgQ1BQX09SX09QLCAgICAgICAgICAifHwiIH0sCisgICAgeyBDUFBfT1JfQVNT
SUdOLCAgICAgICJ8PSIgfSwgCisgICAgeyBDUFBfSU5DX09QLCAgICAgICAgICIrKyIgfSwKKyAg
ICB7IENQUF9TVFJDT05TVEFOVCwgICAgIjxzdHJpbmctY29uc3Q+IiB9LAorICAgIHsgQ1BQX1RZ
UEVJREVOVElGSUVSLCAiPHR5cGUtaWRlbnQ+IiB9LAorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIElO
SVRfU1RSSU5HX1RBQkxFX1NJWkUgMTYzODQKKwordHlwZWRlZiBzdHJ1Y3QgU3RyaW5nVGFibGVf
UmVjIHsKKyAgICBjaGFyICpzdHJpbmdzOworICAgIGludCBuZXh0RnJlZTsKKyAgICBpbnQgc2l6
ZTsKK30gU3RyaW5nVGFibGU7CisKKy8qCisgKiBJbml0U3RyaW5nVGFibGUoKSAtIEluaXRpYWxp
emUgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKi8KKworc3RhdGljIGludCBJbml0U3RyaW5nVGFi
bGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKK3sKKyAgICBzdGFibGUtPnN0cmluZ3MgPSAoY2hhciAq
KSBtYWxsb2MoSU5JVF9TVFJJTkdfVEFCTEVfU0laRSk7CisgICAgaWYgKCFzdGFibGUtPnN0cmlu
Z3MpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIFplcm8tdGggb2Zmc2V0IG1lYW5zICJlbXB0
eSIgc28gZG9uJ3QgdXNlIGl0LgorICAgIHN0YWJsZS0+bmV4dEZyZWUgPSAxOworICAgIHN0YWJs
ZS0+c2l6ZSA9IElOSVRfU1RSSU5HX1RBQkxFX1NJWkU7CisgICAgcmV0dXJuIDE7Cit9IC8vIElu
aXRTdHJpbmdUYWJsZQorCisvKgorICogRnJlZVN0cmluZ1RhYmxlKCkgLSBGcmVlIHRoZSBzdHJp
bmcgdGFibGUuCisgKgorICovCisKK3N0YXRpYyB2b2lkIEZyZWVTdHJpbmdUYWJsZShTdHJpbmdU
YWJsZSAqc3RhYmxlKQoreworICAgIGlmIChzdGFibGUtPnN0cmluZ3MpCisgICAgICAgIGZyZWUo
c3RhYmxlLT5zdHJpbmdzKTsKKyAgICBzdGFibGUtPnN0cmluZ3MgPSBOVUxMOworICAgIHN0YWJs
ZS0+bmV4dEZyZWUgPSAwOworICAgIHN0YWJsZS0+c2l6ZSA9IDA7Cit9IC8vIEZyZWVTdHJpbmdU
YWJsZQorCisvKgorICogSGFzaFN0cmluZygpIC0gSGFzaCBhIHN0cmluZyB3aXRoIHRoZSBiYXNl
IGhhc2ggZnVuY3Rpb24uCisgKgorICovCisKK3N0YXRpYyBpbnQgSGFzaFN0cmluZyhjb25zdCBj
aGFyICpzKQoreworICAgIGludCBodmFsID0gMDsKKworICAgIHdoaWxlICgqcykgeworICAgICAg
ICBodmFsID0gKGh2YWwqMTM1MDcgKyAqcyoxOTcpIF4gKGh2YWwgPj4gMik7CisgICAgICAgIHMr
KzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWwgJiAweDdmZmZmZmZmOworfSAvLyBIYXNoU3RyaW5n
CisKKy8qCisgKiBIYXNoU3RyaW5nMigpIC0gSGFzaCBhIHN0cmluZyB3aXRoIHRoZSBpbmNyaW1l
bnRpbmcgaGFzaCBmdW5jdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGludCBIYXNoU3RyaW5nMihj
b25zdCBjaGFyICpzKQoreworICAgIGludCBodmFsID0gMDsKKworICAgIHdoaWxlICgqcykgewor
ICAgICAgICBodmFsID0gKGh2YWwqNzI5ICsgKnMqMzcpIF4gKGh2YWwgPj4gMSk7CisgICAgICAg
IHMrKzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWw7Cit9IC8vIEhhc2hTdHJpbmcyCisKKy8qCisg
KiBBZGRTdHJpbmcoKSAtIEFkZCBhIHN0cmluZyB0byBhIHN0cmluZyB0YWJsZS4gIFJldHVybiBp
dCdzIG9mZnNldC4KKyAqCisgKi8KKworc3RhdGljIGludCBBZGRTdHJpbmcoU3RyaW5nVGFibGUg
KnN0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgbGVuLCBsb2M7CisgICAgY2hhciAq
c3RyOworCisgICAgbGVuID0gKGludCkgc3RybGVuKHMpOworICAgIGlmIChzdGFibGUtPm5leHRG
cmVlICsgbGVuICsgMSA+PSBzdGFibGUtPnNpemUpIHsKKyAgICAgICAgYXNzZXJ0KHN0YWJsZS0+
c2l6ZSA8IDEwMDAwMDApOworICAgICAgICBzdHIgPSAoY2hhciAqKSBtYWxsb2Moc3RhYmxlLT5z
aXplKjIpOworICAgICAgICBtZW1jcHkoc3RyLCBzdGFibGUtPnN0cmluZ3MsIHN0YWJsZS0+c2l6
ZSk7CisgICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKKyAgICAgICAgc3RhYmxlLT5zdHJp
bmdzID0gc3RyOworICAgIH0KKyAgICBsb2MgPSBzdGFibGUtPm5leHRGcmVlOworICAgIHN0cmNw
eSgmc3RhYmxlLT5zdHJpbmdzW2xvY10sIHMpOworICAgIHN0YWJsZS0+bmV4dEZyZWUgKz0gbGVu
ICsgMTsKKyAgICByZXR1cm4gbG9jOworfSAvLyBBZGRTdHJpbmcKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8gSGFzaCB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5l
IElOSVRfSEFTSF9UQUJMRV9TSVpFIDIwNDcKKyNkZWZpbmUgSEFTSF9UQUJMRV9NQVhfQ09MTElT
SU9OUyAzCisKK3R5cGVkZWYgc3RydWN0IEhhc2hFbnRyeV9SZWMgeworICAgIGludCBpbmRleDsg
ICAgICAvLyBTdHJpbmcgdGFibGUgb2Zmc2V0IG9mIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAg
IGludCB2YWx1ZTsgICAgICAvLyBBdG9tIChzeW1ib2wpIHZhbHVlCit9IEhhc2hFbnRyeTsKKwor
dHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxlX1JlYyB7CisgICAgSGFzaEVudHJ5ICplbnRyeTsKKyAg
ICBpbnQgc2l6ZTsKKyAgICBpbnQgZW50cmllczsKKyAgICBpbnQgY291bnRzW0hBU0hfVEFCTEVf
TUFYX0NPTExJU0lPTlMgKyAxXTsKK30gSGFzaFRhYmxlOworCisvKgorICogSW5pdEhhc2hUYWJs
ZSgpIC0gSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKi8KKworc3RhdGljIGludCBJ
bml0SGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlLCBpbnQgZnNpemUpCit7CisgICAgaW50IGlp
OworCisgICAgaHRhYmxlLT5lbnRyeSA9IChIYXNoRW50cnkgKikgbWFsbG9jKHNpemVvZihIYXNo
RW50cnkpKmZzaXplKTsKKyAgICBpZiAoIWh0YWJsZS0+ZW50cnkpCisgICAgICAgIHJldHVybiAw
OworICAgIGh0YWJsZS0+c2l6ZSA9IGZzaXplOworICAgIGZvciAoaWkgPSAwOyBpaSA8IGZzaXpl
OyBpaSsrKSB7CisgICAgICAgIGh0YWJsZS0+ZW50cnlbaWldLmluZGV4ID0gMDsKKyAgICAgICAg
aHRhYmxlLT5lbnRyeVtpaV0udmFsdWUgPSAwOworICAgIH0KKyAgICBodGFibGUtPmVudHJpZXMg
PSAwOworICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBp
aSsrKQorICAgICAgICBodGFibGUtPmNvdW50c1tpaV0gPSAwOworICAgIHJldHVybiAxOworfSAv
LyBJbml0SGFzaFRhYmxlCisKKy8qCisgKiBGcmVlSGFzaFRhYmxlKCkgLSBGcmVlIHRoZSBoYXNo
IHRhYmxlLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBGcmVlSGFzaFRhYmxlKEhhc2hUYWJsZSAq
aHRhYmxlKQoreworICAgIGlmIChodGFibGUtPmVudHJ5KQorICAgICAgICBmcmVlKGh0YWJsZS0+
ZW50cnkpOworICAgIGh0YWJsZS0+ZW50cnkgPSBOVUxMOworICAgIGh0YWJsZS0+c2l6ZSA9IDA7
CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKK30gLy8gRnJlZUhhc2hUYWJsZQorCisvKgorICog
RW1wdHkoKSAtIFNlZSBpZiBhIGhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuCisgKgorICovCisK
K3N0YXRpYyBpbnQgRW1wdHkoSGFzaFRhYmxlICpodGFibGUsIGludCBoYXNobG9jKQoreworICAg
IGFzc2VydChoYXNobG9jID49IDAgJiYgaGFzaGxvYyA8IGh0YWJsZS0+c2l6ZSk7CisgICAgaWYg
KGh0YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXggPT0gMCkgeworICAgICAgICByZXR1cm4gMTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIEVtcHR5CisKKy8q
CisgKiBNYXRjaCgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBtYXRjaGVzIGEgc3Ry
aW5nLgorICoKKyAqLworCitzdGF0aWMgaW50IE1hdGNoKEhhc2hUYWJsZSAqaHRhYmxlLCBTdHJp
bmdUYWJsZSAqc3RhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgaGFzaGxvYykKK3sKKyAgICBpbnQg
c3RybG9jOworCisgICAgc3RybG9jID0gaHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleDsKKyAg
ICBpZiAoIXN0cmNtcChzLCAmc3RhYmxlLT5zdHJpbmdzW3N0cmxvY10pKSB7CisgICAgICAgIHJl
dHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30gLy8gTWF0
Y2gKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQXRvbSB0YWJsZTogLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisjZGVmaW5lIElOSVRfQVRPTV9UQUJMRV9TSVpFIDEwMjQKKworCitzdHJ1
Y3QgQXRvbVRhYmxlX1JlYyB7CisgICAgU3RyaW5nVGFibGUgc3RhYmxlOyAvLyBTdHJpbmcgdGFi
bGUuCisgICAgSGFzaFRhYmxlIGh0YWJsZTsgICAvLyBIYXNoZXMgc3RyaW5nIHRvIGF0b20gbnVt
YmVyIGFuZCB0b2tlbiB2YWx1ZS4gIE11bHRpcGxlIHN0cmluZ3MgY2FuCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHRva2VuIHZhbHVlIGJ1dCBlYWNoIHVuaXF1ZSBz
dHJpbmcgaXMgYSB1bmlxdWUgYXRvbS4KKyAgICBpbnQgKmFtYXA7ICAgICAgICAgIC8vIE1hcHMg
YXRvbSB2YWx1ZSB0byBvZmZzZXQgaW4gc3RyaW5nIHRhYmxlLiAgQXRvbXMgYWxsIG1hcCB0byB1
bmlxdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZ3MgZXhjZXB0IGZvciBzb21l
IHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIGxvd2VyLCBmaXhlZCBwYXJ0CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgYXRvbSB0YWJsZSB0aGF0IG1hcCB0byAiPHVuZGVmaW5lZD4i
LiAgVGhlIGxvd2VzdCAyNTYgYXRvbXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJl
c3BvbmQgdG8gc2luZ2xlIGNoYXJhY3RlciBBU0NJSSB2YWx1ZXMgZXhjZXB0IGZvciBhbHBoYW51
bWVyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgYW5kICdfJywgd2hp
Y2ggY2FuIGJlIG90aGVyIHRva2Vucy4gIE5leHQgY29tZSB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxhbmd1YWdlIHRva2VucyB3aXRoIHRoZWlyIGF0b20gdmFsdWVzIGVxdWFsIHRv
IHRoZSB0b2tlbiB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tZSBw
cmVkZWZpbmVkIGF0b21zLCBmb2xsb3dlZCBieSB1c2VyIHNwZWNpZmllZCBpZGVudGlmaWVycy4K
KyAgICBpbnQgKmFyZXY7ICAgICAgICAgIC8vIFJldmVyc2VkIGF0b20gZm9yIHN5bWJvbCB0YWJs
ZSB1c2UuCisgICAgaW50IG5leHRGcmVlOworICAgIGludCBzaXplOworfTsKKworc3RhdGljIEF0
b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9OworQXRvbVRhYmxlICphdGFibGUgPSAmbGF0YWJs
ZTsKKworc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNo
YXIgKnMsIGludCBhdG9tKTsKKworLyoKKyAqIEdyb3dBdG9tVGFibGUoKSAtIEdyb3cgdGhlIGF0
b20gdGFibGUgdG8gYXQgbGVhc3QgInNpemUiIGlmIGl0J3Mgc21hbGxlci4KKyAqCisgKi8KKwor
c3RhdGljIGludCBHcm93QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgc2l6ZSkKK3sK
KyAgICBpbnQgKm5ld21hcCwgKm5ld3JldjsKKworICAgIGlmIChhdGFibGUtPnNpemUgPCBzaXpl
KSB7CisgICAgICAgIGlmIChhdGFibGUtPmFtYXApIHsKKyAgICAgICAgICAgIG5ld21hcCA9IHJl
YWxsb2MoYXRhYmxlLT5hbWFwLCBzaXplb2YoaW50KSpzaXplKTsKKyAgICAgICAgICAgIG5ld3Jl
diA9IHJlYWxsb2MoYXRhYmxlLT5hcmV2LCBzaXplb2YoaW50KSpzaXplKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG5ld21hcCA9IG1hbGxvYyhzaXplb2YoaW50KSpzaXplKTsKKyAg
ICAgICAgICAgIG5ld3JldiA9IG1hbGxvYyhzaXplb2YoaW50KSpzaXplKTsKKyAgICAgICAgICAg
IGF0YWJsZS0+c2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFuZXdtYXAgfHwgIW5l
d3JldikgeworICAgICAgICAgICAgLyogZmFpbGVkIHRvIGdyb3cgLS0gZXJyb3IgKi8KKyAgICAg
ICAgICAgIGlmIChuZXdtYXApCisgICAgICAgICAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3bWFw
OworICAgICAgICAgICAgaWYgKG5ld3JldikKKyAgICAgICAgICAgICAgICBhdGFibGUtPmFtYXAg
PSBuZXdyZXY7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVt
c2V0KCZuZXdtYXBbYXRhYmxlLT5zaXplXSwgMCwgKHNpemUgLSBhdGFibGUtPnNpemUpICogc2l6
ZW9mKGludCkpOworICAgICAgICBtZW1zZXQoJm5ld3JldlthdGFibGUtPnNpemVdLCAwLCAoc2l6
ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7CisgICAgICAgIGF0YWJsZS0+YW1hcCA9
IG5ld21hcDsKKyAgICAgICAgYXRhYmxlLT5hcmV2ID0gbmV3cmV2OworICAgICAgICBhdGFibGUt
PnNpemUgPSBzaXplOworICAgIH0KKyAgICByZXR1cm4gMDsKK30gLy8gR3Jvd0F0b21UYWJsZQor
CisvKgorICogbFJldmVyc2UoKSAtIFJldmVyc2UgdGhlIGJvdHRvbSAyMCBiaXRzIG9mIGEgMzIg
Yml0IGludC4KKyAqCisgKi8KKworc3RhdGljIGludCBsUmV2ZXJzZShpbnQgZnZhbCkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgaW4gPSBmdmFsOworICAgIGludCByZXN1bHQgPSAwLCBjbnQgPSAwOwor
CisgICAgd2hpbGUoaW4pIHsKKyAgICAgICAgcmVzdWx0IDw8PSAxOworICAgICAgICByZXN1bHQg
fD0gaW4mMTsKKyAgICAgICAgaW4gPj49IDE7CisgICAgICAgIGNudCsrOworICAgIH0KKworICAg
IC8vIERvbid0IHVzZSBhbGwgMzEgYml0cy4gIE9uZSBtaWxsaW9uIGF0b21zIGlzIHBsZW50eSBh
bmQgc29tZXRpbWVzIHRoZQorICAgIC8vIHVwcGVyIGJpdHMgYXJlIHVzZWQgZm9yIG90aGVyIHRo
aW5ncy4KKworICAgIGlmIChjbnQgPCAyMCkKKyAgICAgICAgcmVzdWx0IDw8PSAyMCAtIGNudDsK
KyAgICByZXR1cm4gcmVzdWx0OworfSAvLyBsUmV2ZXJzZQorCisvKgorICogQWxsb2NhdGVBdG9t
KCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tLiAgQXNzb2NpYXRlZCB3aXRoIHRoZSAidW5kZWZpbmVk
IiB2YWx1ZSBvZiAtMS4KKyAqCisgKi8KKworc3RhdGljIGludCBBbGxvY2F0ZUF0b20oQXRvbVRh
YmxlICphdGFibGUpCit7CisgICAgaWYgKGF0YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXpl
KQorICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgYXRhYmxlLT5uZXh0RnJlZSoyKTsKKyAg
ICBhdGFibGUtPmFtYXBbYXRhYmxlLT5uZXh0RnJlZV0gPSAtMTsKKyAgICBhdGFibGUtPmFyZXZb
YXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFibGUtPm5leHRGcmVlKTsKKyAgICBhdGFi
bGUtPm5leHRGcmVlKys7CisgICAgcmV0dXJuIGF0YWJsZS0+bmV4dEZyZWUgLSAxOworfSAvLyBB
bGxvY2F0ZUF0b20KKworLyoKKyAqIFNldEF0b21WYWx1ZSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRv
bSBhc3NvY2lhdGVkIHdpdGggImhhc2hpbmRleCIuCisgKgorICovCisKK3N0YXRpYyB2b2lkIFNl
dEF0b21WYWx1ZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b21udW1iZXIsIGludCBoYXNoaW5k
ZXgpCit7CisgICAgYXRhYmxlLT5hbWFwW2F0b21udW1iZXJdID0gYXRhYmxlLT5odGFibGUuZW50
cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhd
LnZhbHVlID0gYXRvbW51bWJlcjsKK30gLy8gU2V0QXRvbVZhbHVlCisKKy8qCisgKiBGaW5kSGFz
aExvYygpIC0gRmluZCB0aGUgaGFzaCBsb2NhdGlvbiBmb3IgdGhpcyBzdHJpbmcuICBSZXR1cm4g
LTEgaXQgaGFzaCB0YWJsZSBpcyBmdWxsLgorICoKKyAqLworCitzdGF0aWMgaW50IEZpbmRIYXNo
TG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBoYXNobG9j
LCBoYXNoZGVsdGEsIGNvdW50OworICAgIGludCBGb3VuZEVtcHR5U2xvdCA9IDA7CisgICAgaW50
IGNvbGxpc2lvbltIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TICsgMV07CisKKyAgICBoYXNobG9j
ID0gSGFzaFN0cmluZyhzKSAlIGF0YWJsZS0+aHRhYmxlLnNpemU7CisgICAgaWYgKCFFbXB0eSgm
YXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5o
dGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxvYykpCisgICAgICAgICAgICByZXR1cm4g
aGFzaGxvYzsKKyAgICAgICAgY29sbGlzaW9uWzBdID0gaGFzaGxvYzsKKyAgICAgICAgaGFzaGRl
bHRhID0gSGFzaFN0cmluZzIocyk7CisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUg
KGNvdW50IDwgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUykgeworICAgICAgICAgICAgaGFzaGxv
YyA9ICgoaGFzaGxvYyArIGhhc2hkZWx0YSkgJiAweDdmZmZmZmZmKSAlIGF0YWJsZS0+aHRhYmxl
LnNpemU7CisgICAgICAgICAgICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoTWF0Y2goJmF0YWJsZS0+aHRhYmxlLCAmYXRhYmxlLT5z
dGFibGUsIHMsIGhhc2hsb2MpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNobG9j
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgRm91bmRFbXB0eVNsb3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIGNvbGxpc2lvbltjb3VudF0g
PSBoYXNobG9jOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFGb3VuZEVtcHR5U2xvdCkgewor
ICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1wQXRvbVRhYmxlKSB7CisgICAgICAgICAg
ICAgICAgaW50IGlpOworICAgICAgICAgICAgICAgIGNoYXIgc3RyWzIwMF07CisgICAgICAgICAg
ICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29s
bGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUuICoqKiIsCisgICAgICAgICAg
ICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpOworICAgICAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZyhzdHIpOworCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElT
SU9OUzsgaWkrKykgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xs
aWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlzaW9uW2lpXSwgR2V0QXRvbVN0cmluZyhh
dGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tjb3VudF0rKzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gaGFzaGxvYzsKK30gLy8gRmluZEhhc2hMb2MKKworLyoKKyAqIElu
Y3JlYXNlSGFzaFRhYmxlU2l6ZSgpCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5jcmVhc2VIYXNo
VGFibGVTaXplKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIGludCBpaSwgc3RybG9jLCBvbGRo
YXNobG9jLCB2YWx1ZSwgc2l6ZTsKKyAgICBBdG9tVGFibGUgb2xkdGFibGU7CisgICAgY2hhciAq
czsKKworICAgIC8vIFNhdmUgdGhlIG9sZCBhdG9tIHRhYmxlIGFuZCBjcmVhdGUgYSBuZXcgb25l
OgorCisgICAgb2xkdGFibGUgPSAqYXRhYmxlOworICAgIHNpemUgPSBvbGR0YWJsZS5odGFibGUu
c2l6ZSoyICsgMTsKKyAgICBpZiAoIUluaXRBdG9tVGFibGUoYXRhYmxlLCBzaXplKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBBZGQgYWxsIHRoZSBleGlzdGluZyB2YWx1ZXMgdG8gdGhl
IG5ldyBhdG9tIHRhYmxlIHByZXNlcnZpbmcgdGhlaXIgYXRvbSB2YWx1ZXM6CisKKyAgICBmb3Ig
KGlpID0gYXRhYmxlLT5uZXh0RnJlZTsgaWkgPCBvbGR0YWJsZS5uZXh0RnJlZTsgaWkrKykgewor
ICAgICAgICBzdHJsb2MgPSBvbGR0YWJsZS5hbWFwW2lpXTsKKyAgICAgICAgcyA9ICZvbGR0YWJs
ZS5zdGFibGUuc3RyaW5nc1tzdHJsb2NdOworICAgICAgICBvbGRoYXNobG9jID0gRmluZEhhc2hM
b2MoJm9sZHRhYmxlLCBzKTsKKyAgICAgICAgYXNzZXJ0KG9sZGhhc2hsb2MgPj0gMCk7CisgICAg
ICAgIHZhbHVlID0gb2xkdGFibGUuaHRhYmxlLmVudHJ5W29sZGhhc2hsb2NdLnZhbHVlOworICAg
ICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCBzLCB2YWx1ZSk7CisgICAgfQorICAgIEZyZWVBdG9t
VGFibGUoJm9sZHRhYmxlKTsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5jcmVhc2VIYXNoVGFibGVT
aXplCisKKy8qCisgKiBMb29rVXBBZGRTdHJpbmdIYXNoKCkgLSBMb29rdXAgYSBzdHJpbmcgaW4g
dGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0IGFuZAorICogICAgICAg
IGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUgdG8gMC4gIFJldHVy
biB0aGUgaGFzaCB0YWJsZSBpbmRleC4KKyAqLworCitzdGF0aWMgaW50IExvb2tVcEFkZFN0cmlu
Z0hhc2goQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGhhc2hs
b2MsIHN0cmxvYzsKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgaGFzaGxvYyA9IEZpbmRIYXNo
TG9jKGF0YWJsZSwgcyk7CisgICAgICAgIGlmIChoYXNobG9jID49IDApCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgSW5jcmVhc2VIYXNoVGFibGVTaXplKGF0YWJsZSk7CisgICAgfQorCisg
ICAgaWYgKEVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKKyAgICAgICAgYXRhYmxl
LT5odGFibGUuZW50cmllcysrOworICAgICAgICBzdHJsb2MgPSBBZGRTdHJpbmcoJmF0YWJsZS0+
c3RhYmxlLCBzKTsKKyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGxvY10uaW5kZXgg
PSBzdHJsb2M7CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLnZhbHVlID0g
MDsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hsb2M7Cit9IC8vIExvb2tVcEFkZFN0cmluZ0hhc2gK
KworLyoKKyAqIExvb2tVcEFkZFN0cmluZygpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNo
IHRhYmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKKyAqICAgICAgICBpbml0aWFs
aXplIHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIHRoZSBuZXh0IGF0b20gbnVt
YmVyLgorICogICAgICAgIFJldHVybiB0aGUgYXRvbSB2YWx1ZSBvZiBzdHJpbmcuCisgKi8KKwor
aW50IExvb2tVcEFkZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sK
KyAgICBpbnQgaGFzaGluZGV4LCBhdG9tOworCisgICAgaGFzaGluZGV4ID0gTG9va1VwQWRkU3Ry
aW5nSGFzaChhdGFibGUsIHMpOworICAgIGF0b20gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNo
aW5kZXhdLnZhbHVlOworICAgIGlmIChhdG9tID09IDApIHsKKyAgICAgICAgYXRvbSA9IEFsbG9j
YXRlQXRvbShhdGFibGUpOworICAgICAgICBTZXRBdG9tVmFsdWUoYXRhYmxlLCBhdG9tLCBoYXNo
aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gYXRvbTsKK30gLy8gTG9va1VwQWRkU3RyaW5nCisK
Ky8qCisgKiBHZXRBdG9tU3RyaW5nKCkKKyAqCisgKi8KKworY29uc3QgIGNoYXIgKkdldEF0b21T
dHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQoreworICAgIGludCBzb2Zmc2V0Owor
CisgICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7CisgICAgICAg
IHNvZmZzZXQgPSBhdGFibGUtPmFtYXBbYXRvbV07CisgICAgICAgIGlmIChzb2Zmc2V0ID4gMCAm
JiBzb2Zmc2V0IDwgYXRhYmxlLT5zdGFibGUubmV4dEZyZWUpIHsKKyAgICAgICAgICAgIHJldHVy
biAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1tzb2Zmc2V0XTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiAiPGludGVybmFsIGVycm9yOiBiYWQgc29mZnNldD4iOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0b20gPT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuICI8bnVsbCBhdG9tPiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
YXRvbSA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxFT0Y+IjsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICI8aW52YWxpZCBhdG9tPiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9IC8vIEdldEF0b21TdHJpbmcKKworLyoK
KyAqIEdldFJldmVyc2VkQXRvbSgpCisgKgorICovCisKK2ludCBHZXRSZXZlcnNlZEF0b20oQXRv
bVRhYmxlICphdGFibGUsIGludCBhdG9tKQoreworICAgIGlmIChhdG9tID4gMCAmJiBhdG9tIDwg
YXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICByZXR1cm4gYXRhYmxlLT5hcmV2W2F0b21dOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30gLy8gR2V0UmV2ZXJzZWRB
dG9tCisKKy8qCisgKiBBZGRBdG9tKCkgLSBBZGQgYSBzdHJpbmcgdG8gdGhlIGF0b20sIGhhc2gg
YW5kIHN0cmluZyB0YWJsZXMgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZS4KKyAqICAgICAgICAg
UmV0dXJuIGl0J3MgYXRvbSBpbmRleC4KKyAqLworCitpbnQgQWRkQXRvbShBdG9tVGFibGUgKmF0
YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgYXRvbTsKKworICAgIGF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCBzKTsKKyAgICByZXR1cm4gYXRvbTsKK30gLy8gQWRkQXRvbQor
CisvKgorICogQWRkQXRvbUZpeGVkKCkgLSBBZGQgYW4gYXRvbSB0byB0aGUgaGFzaCBhbmQgc3Ry
aW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLgorICogICAgICAgICBBc3NpZ24g
aXQgdGhlIGF0b20gdmFsdWUgb2YgImF0b20iLgorICovCisKK3N0YXRpYyBpbnQgQWRkQXRvbUZp
eGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRvbSkKK3sKKyAgICBp
bnQgaGFzaGluZGV4LCBsc2l6ZTsKKworICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hh
c2goYXRhYmxlLCBzKTsKKyAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUg
fHwgYXRvbSA+PSBhdGFibGUtPnNpemUpIHsKKyAgICAgICAgbHNpemUgPSBhdGFibGUtPnNpemUq
MjsKKyAgICAgICAgaWYgKGxzaXplIDw9IGF0b20pCisgICAgICAgICAgICBsc2l6ZSA9IGF0b20g
KyAxOworICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgbHNpemUpOworICAgIH0KKyAgICBh
dGFibGUtPmFtYXBbYXRvbV0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4
OworICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWUgPSBhdG9tOworICAg
IC8vaWYgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkKKyAgICAvLyAgICBhdGFibGUtPm5leHRG
cmVlID0gYXRvbSArIDE7CisgICAgd2hpbGUgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkgewor
ICAgICAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFibGUt
Pm5leHRGcmVlKTsKKyAgICAgICAgYXRhYmxlLT5uZXh0RnJlZSsrOworICAgIH0KKyAgICByZXR1
cm4gYXRvbTsKK30gLy8gQWRkQXRvbUZpeGVkCisKKy8qCisgKiBJbml0QXRvbVRhYmxlKCkgLSBJ
bml0aWFsaXplIHRoZSBhdG9tIHRhYmxlLgorICoKKyAqLworCitpbnQgSW5pdEF0b21UYWJsZShB
dG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSkKK3sKKyAgICBpbnQgaWk7CisKKyAgICBodHNp
emUgPSBodHNpemUgPD0gMCA/IElOSVRfSEFTSF9UQUJMRV9TSVpFIDogaHRzaXplOworICAgIGlm
ICghSW5pdFN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghSW5pdEhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUsIGh0c2l6ZSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7CisgICAgYXRhYmxlLT5hbWFw
ID0gTlVMTDsKKyAgICBhdGFibGUtPnNpemUgPSAwOworICAgIEdyb3dBdG9tVGFibGUoYXRhYmxl
LCBJTklUX0FUT01fVEFCTEVfU0laRSk7CisgICAgaWYgKCFhdGFibGUtPmFtYXApCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gSW5pdGlhbGl6ZSBsb3dlciBwYXJ0IG9mIGF0b20gdGFibGUg
dG8gIjx1bmRlZmluZWQ+IiBhdG9tOgorCisgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgIjx1bmRl
ZmluZWQ+IiwgMCk7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgRklSU1RfVVNFUl9UT0tFTl9TWTsg
aWkrKykKKyAgICAgICAgYXRhYmxlLT5hbWFwW2lpXSA9IGF0YWJsZS0+YW1hcFswXTsKKworICAg
IC8vIEFkZCBzaW5nbGUgY2hhcmFjdGVyIHRva2VucyB0byB0aGUgYXRvbSB0YWJsZToKKworICAg
IHsKKwkJY29uc3QgY2hhciAqcyA9ICJ+ISVeJiooKS0rPXwsLjw+Lz87Oltde30jIjsKKyAgICAg
ICAgY2hhciB0WzJdOworCisgICAgICAgIHRbMV0gPSAnXDAnOworICAgICAgICB3aGlsZSAoKnMp
IHsKKyAgICAgICAgICAgIHRbMF0gPSAqczsKKyAgICAgICAgICAgIEFkZEF0b21GaXhlZChhdGFi
bGUsIHQsIHNbMF0pOworICAgICAgICAgICAgcysrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQWRkIG11bHRpcGxlIGNoYXJhY3RlciBzY2FubmVyIHRva2VucyA6CisKKyAgICBmb3IgKGlp
ID0gMDsgaWkgPCBzaXplb2YodG9rZW5zKS9zaXplb2YodG9rZW5zWzBdKTsgaWkrKykKKyAgICAg
ICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdG9rZW5zW2lpXS5zdHIsIHRva2Vuc1tpaV0udmFsKTsK
KworICAgIC8vIEFkZCBlcnJvciBzeW1ib2wgaWYgcnVubmluZyBpbiBlcnJvciBtb2RlOgorCisg
ICAgaWYgKGNwcC0+b3B0aW9ucy5FcnJvck1vZGUpCisgICAgICAgIEFkZEF0b21GaXhlZChhdGFi
bGUsICJlcnJvciIsIEVSUk9SX1NZKTsKKworICAgIEFkZEF0b20oYXRhYmxlLCAiPCoqKiBlbmQg
Zml4ZWQgYXRvbXMgKioqPiIpOworCisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRBdG9tVGFibGUK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gRGVidWcgUHJpbnRpbmcgRnVuY3Rpb25zOiAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCisvKgorICogUHJpbnRBdG9tVGFibGUoKQorICoKKyAqLworCit2b2lkIFByaW50
QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIGludCBpaTsKKyAgICBjaGFyIHN0
clsyMDBdOworCisgICAgZm9yIChpaSA9IDA7IGlpIDwgYXRhYmxlLT5uZXh0RnJlZTsgaWkrKykg
eworICAgICAgICBzcHJpbnRmKHN0ciwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxl
LnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOworICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIp
OworICAgIH0KKyAgICBzcHJpbnRmKHN0ciwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9
JWQsIGNvbGxpc2lvbnM9IiwKKyAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxl
LT5odGFibGUuZW50cmllcyk7CisgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICBmb3IgKGlp
ID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7CisgICAgICAgIHNw
cmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7CisgICAgICAgIENQ
UERlYnVnTG9nTXNnKHN0cik7CisgICAgfQorCit9IC8vIFByaW50QXRvbVRhYmxlCisKKworLyoK
KyAqIEdldFN0cmluZ09mQXRvbSgpCisgKgorICovCisKK2NoYXIqIEdldFN0cmluZ09mQXRvbShB
dG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisJIGNoYXIqIGNocl9zdHI7CisJIGNocl9z
dHI9JmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2F0b21dXTsKKwkgcmV0dXJu
IGNocl9zdHI7Cit9IC8vIEdldFN0cmluZ09mQXRvbQorCisvKgorICogRnJlZUF0b21UYWJsZSgp
IC0gRnJlZSB0aGUgYXRvbSB0YWJsZSBhbmQgYXNzb2NpYXRlZCBtZW1vcnkKKyAqCisgKi8KKwor
dm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQoreworICAgIEZyZWVTdHJpbmdU
YWJsZSgmYXRhYmxlLT5zdGFibGUpOworICAgIEZyZWVIYXNoVGFibGUoJmF0YWJsZS0+aHRhYmxl
KTsKKyAgICBpZiAoYXRhYmxlLT5hbWFwKQorICAgICAgICBmcmVlKGF0YWJsZS0+YW1hcCk7Cisg
ICAgaWYgKGF0YWJsZS0+YXJldikKKyAgICAgICAgZnJlZShhdGFibGUtPmFyZXYpOworICAgIGF0
YWJsZS0+YW1hcCA9IE5VTEw7CisgICAgYXRhYmxlLT5hcmV2ID0gTlVMTDsKKyAgICBhdGFibGUt
Pm5leHRGcmVlID0gMDsKKyAgICBhdGFibGUtPnNpemUgPSAwOworfSAvLyBGcmVlQXRvbVRhYmxl
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgYXRvbS5jIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05W
SURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3Ug
aW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmli
dXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2Yg
dGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVh
c2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJ
QQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJp
ZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBO
VklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRl
ciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0
aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVk
aXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUg
Y29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5n
Cit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhl
IE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4K
K0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdo
dHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElB
IGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMg
dGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3Ro
ZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRl
ZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZU
V0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ
RUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhF
UiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8g
RVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAor
SU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhF
IFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBU
SEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhF
T1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElB
QklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
LworLy8gYXRvbS5oCisvLworCisjaWYgIWRlZmluZWQoX19BVE9NX0gpCisjZGVmaW5lIF9fQVRP
TV9IIDEKKwordHlwZWRlZiBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyBBdG9tVGFibGU7CisKK2V4dGVy
biBBdG9tVGFibGUgKmF0YWJsZTsKKworaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFi
bGUsIGludCBodHNpemUpOwordm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKTsK
K2ludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKTsKK3ZvaWQgUHJp
bnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOworaW50IExvb2tVcEFkZFN0cmluZyhBdG9t
VGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Citjb25zdCBjaGFyICpHZXRBdG9tU3RyaW5n
KEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CitpbnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21U
YWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CitjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxl
ICphdGFibGUsIGludCBhdG9tKTsKKyNlbmRpZiAvLyAhZGVmaW5lZChfX0FUT01fSCkKSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0
d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBj
b21waWxlLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0NPTVBJTEVfSCkKKyNkZWZpbmUgX19DT01Q
SUxFX0ggMQorCitpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgT3B0
aW9uc19SZWN7CisgICAgY29uc3QgY2hhciAqcHJvZmlsZVN0cmluZzsKKyAgICBpbnQgRXJyb3JN
b2RlOworICAgIGludCBRdWlldDsKKwkKKyAgICAvLyBEZWJ1ZyBUaGUgQ29tcGlsZXIgb3B0aW9u
czoKKyAgICBpbnQgRHVtcEF0b21UYWJsZTsKK30gT3B0aW9uczsKKworc3RydWN0IENQUFN0cnVj
dF9SZWMgeworICAgIC8vIFB1YmxpYyBtZW1iZXJzCisgICAgU291cmNlTG9jICpwTGFzdFNvdXJj
ZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzdGF0ZW1lbnQgYnkgdGhlIHRyZWUg
d2Fsa2VycworICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAgICAgICAvLyBDb21waWxlIG9wdGlv
bnMgYW5kIHBhcmFtZXRlcnMKKworICAgIC8vIFByaXZhdGUgbWVtYmVycworICAgIFNvdXJjZUxv
YyBsYXN0U291cmNlTG9jOworCisgICAgLy8gU2Nhbm5lciBkYXRhOgorCisgICAgU291cmNlTG9j
ICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlvbiBvZiBtb3N0IHJlY2VudCB0b2tl
biBzZWVuIGJ5IHRoZSBzY2FubmVyCisgICAgaW50IG1vc3RSZWNlbnRUb2tlbjsgICAgICAgIC8v
IE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKKyAgICBJbnB1dFNyYyAqY3Vy
cmVudElucHV0OworICAgIGludCBwcmV2aW91c190b2tlbjsKKyAgICBpbnQgcGFzdEZpcnN0U3Rh
dGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhhdCAjdmVyc2lvbiBpcyB0aGUgZmly
c3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHByZXNlbnQKKyAgICAKKwl2b2lkICpw
QzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUgcGFyc2VDb250ZXh0IG9mIHRoZSBj
b21waWxlIG9iamVjdCBpbiBjcHAuICAKKyAgICAgCisgICAgLy8gUHJpdmF0ZSBtZW1iZXJzOgor
ICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7CisJaW50IGlmZGVwdGg7ICAgICAgICAgICAgICAgIC8v
Y3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4gdGhlIGNwcC5jIGZpbGUgKHByZS1w
cm9jZXNzb3IpICAgIAorICAgIGludCBlbHNlZGVwdGhbNjRdOyAgICAgICAgICAvL0tlZXAgYSB0
cmFjayBvZiAjaWYgZGVwdGguLk1heCBhbGxvd2VkIGlzIDY0LiAgIAorICAgIGludCBlbHNldHJh
Y2tlcjsgICAgICAgICAgICAvLyNpZi0jZWxzZSBhbmQgI2VuZGlmIGNvbnN0cnVjdHMuLi5Db3Vu
dGVyLgorICAgIGNvbnN0IGNoYXIgKkVyck1zZzsKKyAgICBpbnQgQ29tcGlsZUVycm9yOyAgICAg
ICAgICAgLy9JbmRpY2F0ZSBjb21waWxlIGVycm9yIHdoZW4gI2Vycm9yLCAjZWxzZSwjZWxpZiBt
aXNtYXRjaC4KKworICAgIC8vCisgICAgLy8gR2xvYmFscyB1c2VkIHRvIGNvbW11bmljYXRlIGJl
dHdlZW4gUGFQYXJzZVN0cmluZ3MoKSBhbmQgeXlfaW5wdXQoKWFuZCAKKyAgICAvLyBhbHNvIGFj
cm9zcyB0aGUgZmlsZXMuKGdlbl9nbHNsYW5nLmNwcCBhbmQgc2Nhbm5lci5jKQorICAgIC8vCisg
ICAgaW50ICAgIFBhV2hpY2hTdHI7ICAgICAgICAgICAgLy8gd2hpY2ggc3RyaW5nIHdlJ3JlIHBh
cnNpbmcKKyAgICBpbnQqICAgUGFTdHJMZW47ICAgICAgICAgICAgICAvLyBhcnJheSBvZiBsZW5n
dGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5ncworICAgIGludCAgICBQYUFyZ2M7ICAgICAgICAgICAg
ICAgIC8vIGNvdW50IG9mIHN0cmluZ3MgaW4gdGhlIGFycmF5CisgICAgY2hhcioqIFBhQXJndjsg
ICAgICAgICAgICAgICAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UgICAgCisgICAg
dW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Cit9OworCisjZW5kaWYgLy8gIWRlZmlu
ZWQoX19DT01QSUxFX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMjkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgor
CitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8g
eW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlz
dHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNl
IG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywg
cGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBO
VklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJt
cywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwg
dW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2Fy
ZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5k
IHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlm
aWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBp
ZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4g
dGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9m
IHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2
aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklE
SUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIg
cmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5W
SURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmln
aHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5
IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBv
cmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEg
U09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAor
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJ
TVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBF
SVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lO
IE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD
VCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9G
IFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04g
T0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVS
IFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNU
IExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworLy8KKy8vIGNwcC5jCisvLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxjdHlwZS5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5o
IgorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworLyogRG9uJ3Qg
dXNlIG1lbW9yeS5jJ3MgcmVwbGFjZW1lbnRzLCBhcyB3ZSBjbGVhbiB1cCBwcm9wZXJseSBoZXJl
ICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgZnJlZQorCitzdGF0aWMgaW50IGJpbmRBdG9tID0g
MDsKK3N0YXRpYyBpbnQgY29uc3RBdG9tID0gMDsKK3N0YXRpYyBpbnQgZGVmYXVsdEF0b20gPSAw
Oworc3RhdGljIGludCBkZWZpbmVBdG9tID0gMDsKK3N0YXRpYyBpbnQgZGVmaW5lZEF0b20gPSAw
Oworc3RhdGljIGludCBlbHNlQXRvbSA9IDA7CitzdGF0aWMgaW50IGVsaWZBdG9tID0gMDsKK3N0
YXRpYyBpbnQgZW5kaWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZBdG9tID0gMDsKK3N0YXRpYyBp
bnQgaWZkZWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZuZGVmQXRvbSA9IDA7CitzdGF0aWMgaW50
IGluY2x1ZGVBdG9tID0gMDsKK3N0YXRpYyBpbnQgbGluZUF0b20gPSAwOworc3RhdGljIGludCBw
cmFnbWFBdG9tID0gMDsKK3N0YXRpYyBpbnQgdGV4dW5pdEF0b20gPSAwOworc3RhdGljIGludCB1
bmRlZkF0b20gPSAwOworc3RhdGljIGludCBlcnJvckF0b20gPSAwOworc3RhdGljIGludCBfX0xJ
TkVfX0F0b20gPSAwOworc3RhdGljIGludCBfX0ZJTEVfX0F0b20gPSAwOworc3RhdGljIGludCBf
X1ZFUlNJT05fX0F0b20gPSAwOworc3RhdGljIGludCB2ZXJzaW9uQXRvbSA9IDA7CitzdGF0aWMg
aW50IGV4dGVuc2lvbkF0b20gPSAwOworCitzdGF0aWMgU2NvcGUgKm1hY3JvcyA9IDA7CisjZGVm
aW5lIE1BWF9NQUNST19BUkdTICA2NAorI2RlZmluZSBNQVhfSUZfTkVTVElORyAgNjQKKworc3Rh
dGljIFNvdXJjZUxvYyBpZmxvYzsgLyogb3V0ZXJtb3N0ICNpZiAqLworCitpbnQgSW5pdENQUCh2
b2lkKQoreworICAgIGNoYXIgICAgICAgIGJ1ZmZlcls2NF0sICp0OworICAgIGNvbnN0IGNoYXIg
ICpmOworCisgICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRoZSBDUFAgbGluZSBz
Y2FubmVyOgorICAgIGJpbmRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImJpbmQiKTsK
KyAgICBjb25zdEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiY29uc3QiKTsKKyAgICBk
ZWZhdWx0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZhdWx0Iik7CisgICAgZGVm
aW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmUiKTsKKyAgICBkZWZpbmVk
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmVkIik7CisgICAgZWxpZkF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxpZiIpOworICAgIGVsc2VBdG9tID0gTG9va1Vw
QWRkU3RyaW5nKGF0YWJsZSwgImVsc2UiKTsKKyAgICBlbmRpZkF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAiZW5kaWYiKTsKKyAgICBpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCAiaWYiKTsKKyAgICBpZmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWZkZWYi
KTsKKyAgICBpZm5kZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmbmRlZiIpOwor
ICAgIGluY2x1ZGVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImluY2x1ZGUiKTsKKyAg
ICBsaW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJsaW5lIik7CisgICAgcHJhZ21h
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJwcmFnbWEiKTsKKyAgICB0ZXh1bml0QXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ0ZXh1bml0Iik7CisgICAgdW5kZWZBdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInVuZGVmIik7CisJZXJyb3JBdG9tID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgImVycm9yIik7CisgICAgX19MSU5FX19BdG9tID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgIl9fTElORV9fIik7CisgICAgX19GSUxFX19BdG9tID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgIl9fRklMRV9fIik7CisJX19WRVJTSU9OX19BdG9tID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgIl9fVkVSU0lPTl9fIik7CisgICAgdmVyc2lvbkF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAidmVyc2lvbiIpOworICAgIGV4dGVuc2lvbkF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiZXh0ZW5zaW9uIik7CisgICAgbWFjcm9zID0gTmV3U2NvcGVJblBvb2wo
bWVtX0NyZWF0ZVBvb2woMCwgMCkpOworICAgIHN0cmNweShidWZmZXIsICJQUk9GSUxFXyIpOwor
ICAgIHQgPSBidWZmZXIgKyBzdHJsZW4oYnVmZmVyKTsKKyAgICBmID0gY3BwLT5vcHRpb25zLnBy
b2ZpbGVTdHJpbmc7CisgICAgd2hpbGUgKChpc2FsbnVtKCpmKSB8fCAqZiA9PSAnXycpICYmIHQg
PCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgICp0KysgPSB0b3VwcGVyKCpm
KyspOworICAgICp0ID0gMDsKKworICAgIFByZWRlZmluZUludE1hY3JvKCJHTF9FUyIsIDEpOwor
ICAgIFByZWRlZmluZUludE1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwor
CisJcmV0dXJuIDE7Cit9IC8vIEluaXRDUFAKKworaW50IEZyZWVDUFAodm9pZCkKK3sKKyAgICBp
ZiAobWFjcm9zKQorICAgIHsKKyAgICAgICAgbWVtX0ZyZWVQb29sKG1hY3Jvcy0+cG9vbCk7Cisg
ICAgICAgIG1hY3JvcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBGaW5h
bENQUCh2b2lkKQoreworCWlmIChjcHAtPmlmZGVwdGgpCisJCUNQUEVycm9yVG9JbmZvTG9nKCIj
aWYgbWlzbWF0Y2giKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBDUFBkZWZpbmUo
eXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuLCBuYW1lLCBhcmdzW01BWF9N
QUNST19BUkdTXSwgYXJnYzsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworICAgIE1hY3JvU3lt
Ym9sIG1hYzsKKyAgICBTeW1ib2wgKnN5bWI7CisgICAgU291cmNlTG9jIGR1bW15TG9jOworICAg
IG1lbXNldCgmbWFjLCAwLCBzaXplb2YobWFjKSk7CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiAh
PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIp
OworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIG5hbWUgPSB5eWx2YWxwcC0+c2Nf
aWRlbnQ7CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiA9PSAnKCcgJiYgIXl5bHZhbHBwLT5zY19p
bnQpIHsKKyAgICAgICAgLy8gZ2F0aGVyIGFyZ3VtZW50cworICAgICAgICBhcmdjID0gMDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGFyZ2MgPT0gMCAm
JiB0b2tlbiA9PSAnKScpIGJyZWFrOworICAgICAgICAgICAgaWYgKHRva2VuICE9IENQUF9JREVO
VElGSUVSKSB7CisJCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJnYyA8
IE1BWF9NQUNST19BUkdTKQorICAgICAgICAgICAgICAgIGFyZ3NbYXJnYysrXSA9IHl5bHZhbHBw
LT5zY19pZGVudDsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfSB3aGlsZSAodG9rZW4gPT0g
JywnKTsKKyAgICAgICAgaWYgKHRva2VuICE9ICcpJykgeworICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAg
fQorICAgICAgICBtYWMuYXJnYyA9IGFyZ2M7CisgICAgICAgIG1hYy5hcmdzID0gbWVtX0FsbG9j
KG1hY3Jvcy0+cG9vbCwgYXJnYyAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgbWVtY3B5KG1hYy5h
cmdzLCBhcmdzLCBhcmdjICogc2l6ZW9mKGludCkpOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQorICAgIG1h
Yy5ib2R5ID0gTmV3VG9rZW5TdHJlYW0oR2V0QXRvbVN0cmluZyhhdGFibGUsIG5hbWUpLCBtYWNy
b3MtPnBvb2wpOworICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgIGlmICh0b2tl
biA9PSAnXFwnKSB7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhlIGxpbmUgY29u
dGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVuR0wgRVMgU2hh
ZGluZyBMYW5ndWFnZSIpOworICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICB9Cisg
ICAgICAgIFJlY29yZFRva2VuKG1hYy5ib2R5LCB0b2tlbiwgeXlsdmFscHApOworICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgfTsKKworICAgIHN5bWIgPSBMb29rVXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKKyAg
ICBpZiAoc3ltYikgeworICAgICAgICBpZiAoIXN5bWItPmRldGFpbHMubWFjLnVuZGVmKSB7Cisg
ICAgICAgICAgICAvLyBhbHJlYWR5IGRlZmluZWQgLS0gbmVlZCB0byBtYWtlIHN1cmUgdGhleSBh
cmUgaWRlbnRpY2FsCisgICAgICAgICAgICBpZiAoc3ltYi0+ZGV0YWlscy5tYWMuYXJnYyAhPSBt
YWMuYXJnYykgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGZvciAoYXJnYz0wOyBhcmdjIDwgbWFj
LmFyZ2M7IGFyZ2MrKykKKyAgICAgICAgICAgICAgICBpZiAoc3ltYi0+ZGV0YWlscy5tYWMuYXJn
c1thcmdjXSAhPSBtYWMuYXJnc1thcmdjXSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJv
cjsKKyAgICAgICAgICAgIFJld2luZFRva2VuU3RyZWFtKHN5bWItPmRldGFpbHMubWFjLmJvZHkp
OworICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0obWFjLmJvZHkpOworICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIGludCBvbGRfbHZhbCwgb2xkX3Rva2VuOworICAgICAgICAg
ICAgICAgIG9sZF90b2tlbiA9IFJlYWRUb2tlbihzeW1iLT5kZXRhaWxzLm1hYy5ib2R5LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgb2xkX2x2YWwgPSB5eWx2YWxwcC0+c2NfaW50OworICAg
ICAgICAgICAgICAgIHRva2VuID0gUmVhZFRva2VuKG1hYy5ib2R5LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgaWYgKHRva2VuICE9IG9sZF90b2tlbiB8fCB5eWx2YWxwcC0+c2NfaW50ICE9
IG9sZF9sdmFsKSB7IAorICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgICAg
ICBTdG9yZVN0cigiTWFjcm8gUmVkZWZpbmVkIik7CisgICAgICAgICAgICAgICAgICAgIFN0b3Jl
U3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICAgICAgICAgIERlY0xpbmVOdW1i
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAg
ICAgICAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgIFJl
c2V0VFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsgfQorICAgICAgICAgICAg
fSB3aGlsZSAodG9rZW4gPiAwKTsKKyAgICAgICAgfQorICAgICAgICAvL0ZyZWVNYWNybygmc3lt
Yi0+ZGV0YWlscy5tYWMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGR1bW15TG9jLmZpbGUgPSAw
OworICAgICAgICBkdW1teUxvYy5saW5lID0gMDsKKyAgICAgICAgc3ltYiA9IEFkZFN5bWJvbCgm
ZHVtbXlMb2MsIG1hY3JvcywgbmFtZSwgTUFDUk9fUyk7CisgICAgfQorICAgIHN5bWItPmRldGFp
bHMubWFjID0gbWFjOworICAgIHJldHVybiAnXG4nOworfSAvLyBDUFBkZWZpbmUKKworc3RhdGlj
IGludCBDUFB1bmRlZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
IFN5bWJvbCAqc3ltYjsKKwlpZih0b2tlbiA9PSAnXG4nKXsKKwkJQ1BQRXJyb3JUb0luZm9Mb2co
IiN1bmRlZiIpOworCSAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIGlmICh0b2tlbiAhPSBD
UFBfSURFTlRJRklFUikKKyAgICAgICAgICBnb3RvIGVycm9yOworICAgIHN5bWIgPSBMb29rVXBT
eW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQpOworICAgIGlmIChzeW1iKSB7CisgICAg
ICAgIHN5bWItPmRldGFpbHMubWFjLnVuZGVmID0gMTsKKyAgICB9CisgICAgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlm
ICh0b2tlbiAhPSAnXG4nKSB7CisgICAgZXJyb3I6CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCIjdW5kZWYiKTsKKyAgICB9CisgICAgcmV0dXJuIHRva2VuOworfSAvLyBDUFB1bmRlZgorCisv
KiBDUFBlbHNlIC0tIHNraXAgZm9yd2FyZCB0byBhcHByb3ByaWF0ZSBzcG90LiAgVGhpcyBpcyBh
Y3R1YWxseSB1c2VkCisqKiB0byBza2lwIHRvIGFuZCAjZW5kaWYgYWZ0ZXIgc2VlaW5nIGFuICNl
bHNlLCBBTkQgdG8gc2tpcCB0byBhICNlbHNlLAorKiogI2VsaWYsIG9yICNlbmRpZiBhZnRlciBh
ICNpZi8jaWZkZWYvI2lmbmRlZi8jZWxpZiB0ZXN0IHdhcyBmYWxzZQorKi8KKworc3RhdGljIGlu
dCBDUFBlbHNlKGludCBtYXRjaGVsc2UsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGlu
dCBhdG9tLGRlcHRoPTA7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkKKwl3aGlsZSAodG9rZW4gPiAwKSB7Cisg
ICAgICAgIGlmICh0b2tlbiAhPSAnIycpIHsKKwkJICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQor
ICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwkJaWYgKCh0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCkpICE9IENQUF9JREVOVElG
SUVSKQorCQkJY29udGludWU7CisgICAgICAgIGF0b20gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Cisg
ICAgICAgIGlmIChhdG9tID09IGlmQXRvbSB8fCBhdG9tID09IGlmZGVmQXRvbSB8fCBhdG9tID09
IGlmbmRlZkF0b20peworICAgICAgICAgICAgZGVwdGgrKzsgY3BwLT5pZmRlcHRoKys7IGNwcC0+
ZWxzZXRyYWNrZXIrKzsKKyAgICAgICAgICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNr
ZXJdID0gMDsKKwkJfQorCQllbHNlIGlmIChhdG9tID09IGVuZGlmQXRvbSkgeworICAgICAgICAg
ICAgaWYoLS1kZXB0aDwwKXsKKwkJCSAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAgICAgICAg
ICAgICAgaWYgKGNwcC0+aWZkZXB0aCkgCisgICAgICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRl
cHRoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAgICAgICAgICAgICAgLS1j
cHAtPmlmZGVwdGg7CisgICAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCgoaW50KShtYXRj
aGVsc2UpICE9IDApJiYgZGVwdGg9PTApIHsKKwkJCWlmIChhdG9tID09IGVsc2VBdG9tICkgewor
ICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykg
eworICAgICAgICAgICAgICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRv
a2VucyBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9IAorCQkJCWJyZWFr
OworCQkJfSAKKwkJCWVsc2UgaWYgKGF0b20gPT0gZWxpZkF0b20pIHsKKyAgICAgICAgICAgICAg
ICAvKiB3ZSBkZWNyZW1lbnQgY3BwLT5pZmRlcHRoIGhlcmUsIGJlY2F1c2UgQ1BQaWYgd2lsbCBp
bmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgKiBpdCBhbmQgd2UgcmVhbGx5IHdhbnQgdG8gbGVh
dmUgaXQgYWxvbmUgKi8KKwkJCQlpZiAoY3BwLT5pZmRlcHRoKXsKKwkJCQkJLS1jcHAtPmlmZGVw
dGg7CisJCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKKwkJCQl9CisgICAgICAgICAgICAgICAg
cmV0dXJuIENQUGlmKHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKwkJfQorICAgICAgICBlbHNl
IGlmKChhdG9tPT1lbHNlQXRvbSkgJiYgKCFDaGtDb3JyZWN0RWxzZU5lc3RpbmcoKSkpeworICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIGFmdGVyIGEgI2Vsc2UiKTsKKyAgICAg
ICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgIH0KKwl9OworICAgIHJldHVybiB0
b2tlbjsKK30KKworZW51bSBldmFsX3ByZWMgeworICAgIE1JTl9QUkVDLAorICAgIENPTkQsIExP
R09SLCBMT0dBTkQsIE9SLCBYT1IsIEFORCwgRVFVQUwsIFJFTEFUSU9OLCBTSElGVCwgQURELCBN
VUwsIFVOQVJZLAorICAgIE1BWF9QUkVDCit9OworCitzdGF0aWMgaW50IG9wX2xvZ29yKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSB8fCBiOyB9CitzdGF0aWMgaW50IG9wX2xvZ2FuZChpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgJiYgYjsgfQorc3RhdGljIGludCBvcF9vcihpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgfCBiOyB9CitzdGF0aWMgaW50IG9wX3hvcihpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgXiBiOyB9CitzdGF0aWMgaW50IG9wX2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
JiBiOyB9CitzdGF0aWMgaW50IG9wX2VxKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA9PSBiOyB9
CitzdGF0aWMgaW50IG9wX25lKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAhPSBiOyB9CitzdGF0
aWMgaW50IG9wX2dlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PSBiOyB9CitzdGF0aWMgaW50
IG9wX2xlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8PSBiOyB9CitzdGF0aWMgaW50IG9wX2d0
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+IGI7IH0KK3N0YXRpYyBpbnQgb3BfbHQoaW50IGEs
IGludCBiKSB7IHJldHVybiBhIDwgYjsgfQorc3RhdGljIGludCBvcF9zaGwoaW50IGEsIGludCBi
KSB7IHJldHVybiBhIDw8IGI7IH0KK3N0YXRpYyBpbnQgb3Bfc2hyKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA+PiBiOyB9CitzdGF0aWMgaW50IG9wX2FkZChpbnQgYSwgaW50IGIpIHsgcmV0dXJu
IGEgKyBiOyB9CitzdGF0aWMgaW50IG9wX3N1YihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLSBi
OyB9CitzdGF0aWMgaW50IG9wX211bChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKiBiOyB9Citz
dGF0aWMgaW50IG9wX2RpdihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLyBiOyB9CitzdGF0aWMg
aW50IG9wX21vZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJSBiOyB9CitzdGF0aWMgaW50IG9w
X3BvcyhpbnQgYSkgeyByZXR1cm4gYTsgfQorc3RhdGljIGludCBvcF9uZWcoaW50IGEpIHsgcmV0
dXJuIC1hOyB9CitzdGF0aWMgaW50IG9wX2NtcGwoaW50IGEpIHsgcmV0dXJuIH5hOyB9CitzdGF0
aWMgaW50IG9wX25vdChpbnQgYSkgeyByZXR1cm4gIWE7IH0KKworc3RydWN0IHsKKyAgICBpbnQg
dG9rZW4sIHByZWMsICgqb3ApKGludCwgaW50KTsKK30gYmlub3BbXSA9IHsKKyAgICB7IENQUF9P
Ul9PUCwgTE9HT1IsIG9wX2xvZ29yIH0sCisgICAgeyBDUFBfQU5EX09QLCBMT0dBTkQsIG9wX2xv
Z2FuZCB9LAorICAgIHsgJ3wnLCBPUiwgb3Bfb3IgfSwKKyAgICB7ICdeJywgWE9SLCBvcF94b3Ig
fSwKKyAgICB7ICcmJywgQU5ELCBvcF9hbmQgfSwKKyAgICB7IENQUF9FUV9PUCwgRVFVQUwsIG9w
X2VxIH0sCisgICAgeyBDUFBfTkVfT1AsIEVRVUFMLCBvcF9uZSB9LAorICAgIHsgJz4nLCBSRUxB
VElPTiwgb3BfZ3QgfSwKKyAgICB7IENQUF9HRV9PUCwgUkVMQVRJT04sIG9wX2dlIH0sCisgICAg
eyAnPCcsIFJFTEFUSU9OLCBvcF9sdCB9LAorICAgIHsgQ1BQX0xFX09QLCBSRUxBVElPTiwgb3Bf
bGUgfSwKKyAgICB7IENQUF9MRUZUX09QLCBTSElGVCwgb3Bfc2hsIH0sCisgICAgeyBDUFBfUklH
SFRfT1AsIFNISUZULCBvcF9zaHIgfSwKKyAgICB7ICcrJywgQURELCBvcF9hZGQgfSwKKyAgICB7
ICctJywgQURELCBvcF9zdWIgfSwKKyAgICB7ICcqJywgTVVMLCBvcF9tdWwgfSwKKyAgICB7ICcv
JywgTVVMLCBvcF9kaXYgfSwKKyAgICB7ICclJywgTVVMLCBvcF9tb2QgfSwKK307CisKK3N0cnVj
dCB7CisgICAgaW50IHRva2VuLCAoKm9wKShpbnQpOworfSB1bm9wW10gPSB7CisgICAgeyAnKycs
IG9wX3BvcyB9LAorICAgIHsgJy0nLCBvcF9uZWcgfSwKKyAgICB7ICd+Jywgb3BfY21wbCB9LAor
ICAgIHsgJyEnLCBvcF9ub3QgfSwKK307CisKKyNkZWZpbmUgQUxFTihBKSAoc2l6ZW9mKEEpL3Np
emVvZihBWzBdKSkKKworc3RhdGljIGludCBldmFsKGludCB0b2tlbiwgaW50IHByZWMsIGludCAq
cmVzLCBpbnQgKmVyciwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50ICAgICAgICAg
aSwgdmFsOworICAgIFN5bWJvbCAgICAgICpzOworICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgeworICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZWRBdG9tKSB7
CisgICAgICAgICAgICBpbnQgbmVlZGNsb3NlID0gMDsKKyAgICAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBuZWVkY2xvc2UgPSAx
OworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAg
ICAgICAgICAgKnJlcyA9IChzID0gTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lk
ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gIXMtPmRldGFpbHMubWFjLnVuZGVmIDog
MDsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChuZWVkY2xvc2UpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gIT0gJyknKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVy
cm9yOworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0KKwkJfSBlbHNlIGlmIChN
YWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkgeworCQkJdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgcmV0dXJuIGV2YWwodG9rZW4sIHByZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisJfSBl
bHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKyAgICAgICAgKnJlcyA9IHl5bHZh
bHBwLT5zY19pbnQ7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9IGVsc2UgaWYgKHRva2VuID09ICcoJykg
eworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsIHJl
cywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgIGlmICghKmVycikgeworICAgICAgICAgICAgaWYg
KHRva2VuICE9ICcpJykKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gQUxFTih1bm9w
KSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAodW5vcFtpXS50b2tlbiA9PSB0
b2tlbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+
PSAwKSB7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4s
IFVOQVJZLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICAgICAgKnJlcyA9IHVub3BbaV0u
b3AoKnJlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAg
ICAgICB9CisgICAgfQorICAgIHdoaWxlICghKmVycikgeworICAgICAgICBpZiAodG9rZW4gPT0g
JyknIHx8IHRva2VuID09ICdcbicpIGJyZWFrOworICAgICAgICBmb3IgKGkgPSBBTEVOKGJpbm9w
KSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoYmlub3BbaV0udG9rZW4gPT0g
dG9rZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkg
PCAwIHx8IGJpbm9wW2ldLnByZWMgPD0gcHJlYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB2YWwgPSAqcmVzOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwg
Ymlub3BbaV0ucHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKKyAgICAgICAgKnJlcyA9IGJpbm9w
W2ldLm9wKHZhbCwgKnJlcyk7CisgICAgfQorICAgIHJldHVybiB0b2tlbjsKK2Vycm9yOgorICAg
IENQUEVycm9yVG9JbmZvTG9nKCJpbmNvcnJlY3QgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIpOwor
ICAgICplcnIgPSAxOworICAgICpyZXMgPSAwOworICAgIHJldHVybiB0b2tlbjsKK30gLy8gZXZh
bAorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKyAgICBpbnQgcmVzID0gMCwgZXJyID0gMDsKKwljcHAtPmVsc2V0cmFja2VyKys7CisgICAg
Y3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworICAgIGlmICghY3BwLT5pZmRl
cHRoKyspCisgICAgICAgIGlmbG9jID0gKmNwcC0+dG9rZW5Mb2M7CisJaWYoY3BwLT5pZmRlcHRo
ID5NQVhfSUZfTkVTVElORyl7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5l
c3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCXRva2VuID0gZXZhbCh0
b2tlbiwgTUlOX1BSRUMsICZyZXMsICZlcnIsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0g
J1xuJykgeworICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBm
b2xsb3dpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUi
KTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
fSAKKyAgICBpZiAoIXJlcyAmJiAhZXJyKSB7CisgICAgICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5
eWx2YWxwcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfSAvLyBDUFBpZgorCitzdGF0
aWMgaW50IENQUGlmZGVmKGludCBkZWZpbmVkLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAg
ICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgIGludCBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OworCWlmKCsrY3Bw
LT5pZmRlcHRoID5NQVhfSUZfTkVTVElORyl7CisJICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXgg
I2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCWNwcC0+ZWxz
ZXRyYWNrZXIrKzsKKyAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7Cisg
ICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7CisgICAgICAgICAgICBkZWZpbmVkID8g
Q1BQRXJyb3JUb0luZm9Mb2coImlmZGVmIik6Q1BQRXJyb3JUb0luZm9Mb2coImlmbmRlZiIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFN5bWJvbCAqcyA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5h
bWUpOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAg
ICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2lm
ZGVmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAg
ICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoKChzICYmICFzLT5kZXRhaWxzLm1hYy51bmRlZikgPyAxIDogMCkg
IT0gZGVmaW5lZCkKKyAgICAgICAgICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5eWx2YWxwcCk7Cisg
ICAgfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQaWZkZWYKKworc3RhdGljIGludCBDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSAKK3sKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCWlmKHRva2VuPT0n
XG4nKXsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xp
bmUiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1cm4gdG9rZW47CisJfQorCWVs
c2UgaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgeworCQl5eWx2YWxwcC0+c2NfaW50PWF0
b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkJU2V0TGluZU51bWJlcih5eWx2YWxwcC0+c2Nf
aW50KTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAKKwkJaWYgKHRva2VuID09IENQUF9JTlRDT05T
VEFOVCkgeworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSk7CisJCQlTZXRTdHJpbmdOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisJCQlpZih0b2tlbiE9J1xuJykKKwkJCQlDUFBFcnJvclRvSW5mb0xvZygiI2xp
bmUiKTsKKyAgICAgICAgfQorCQllbHNlIGlmICh0b2tlbiA9PSAnXG4nKXsKKwkJCXJldHVybiB0
b2tlbjsKKwkJfQorCQllbHNleworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5l
Iik7CisJCX0KKwl9CisJZWxzZXsKKyAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUi
KTsKKwl9CisgICAgcmV0dXJuIHRva2VuOworfQorCitzdGF0aWMgaW50IENQUGVycm9yKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKSB7CisKKwlpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7
CisJCisgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKKwkJaWYgKHRva2VuID09IENQUF9GTE9B
VENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7CisgICAgICAgICAgICBTdG9y
ZVN0cih5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQl9ZWxzZSBpZih0b2tlbiA9PSBDUFBfSURF
TlRJRklFUiB8fCB0b2tlbiA9PSBDUFBfU1RSQ09OU1RBTlQpeworCQkJU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKwkJfWVsc2UgeworCQkgICAg
U3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0b2tlbikpOworCQl9CisJCXRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9
CisJRGVjTGluZU51bWJlcigpOworCS8vc3RvcmUgdGhpcyBtc2cgaW50byB0aGUgc2hhZGVyJ3Mg
aW5mb3JtYXRpb24gbG9nLi5zZXQgdGhlIENvbXBpbGUgRXJyb3IgZmxhZyEhISEKKwltZXNzYWdl
PUdldFN0cmZyb21UU3RyKCk7CisgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgIFJl
c2V0VFN0cmluZygpOworICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgSW5jTGluZU51bWJl
cigpOworICAgIHJldHVybiAnXG4nOworfS8vQ1BQZXJyb3IKKworc3RhdGljIGludCBDUFBwcmFn
bWEoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisJY2hhciBTcmNTdHJOYW1lWzJdOworCWNoYXIq
KiBhbGxUb2tlbnM7CisJaW50IHRva2VuQ291bnQgPSAwOworCWludCBtYXhUb2tlbkNvdW50ID0g
MTA7CisJY29uc3QgY2hhciogU3JjU3RyOworCWludCBpOworCisJaW50IHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkKKwlpZiAo
dG9rZW49PSdcbicpIHsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiI3ByYWdtYSIpOworICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisJICAgIHJldHVybiB0
b2tlbjsKKwl9CisJCisJYWxsVG9rZW5zID0gKGNoYXIqKiltYWxsb2Moc2l6ZW9mKGNoYXIqKSAq
IG1heFRva2VuQ291bnQpOwkKKworCXdoaWxlICh0b2tlbiAhPSAnXG4nKSB7CisJCWlmICh0b2tl
bkNvdW50ID49IG1heFRva2VuQ291bnQpIHsKKwkJCW1heFRva2VuQ291bnQgKj0gMjsKKwkJCWFs
bFRva2VucyA9IChjaGFyKiopcmVhbGxvYygoY2hhcioqKWFsbFRva2Vucywgc2l6ZW9mKGNoYXIq
KSAqIG1heFRva2VuQ291bnQpOworCQl9CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBDUFBf
SURFTlRJRklFUjoKKwkJCVNyY1N0ciA9IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+
c2NfaWRlbnQpOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJs
ZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNT
dHIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BQX0lOVENPTlNUQU5UOgorCQkJU3JjU3RyID0geXls
dmFscHAtPnN5bWJvbF9uYW1lOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1h
bGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50
KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CisJCQlT
cmNTdHIgPSB5eWx2YWxwcC0+c3ltYm9sX25hbWU7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0g
PSAoY2hhciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7CisJCQlzdHJjcHkoYWxsVG9rZW5z
W3Rva2VuQ291bnQrK10sIFNyY1N0cik7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKyAgICAgICAg
ICAgIC8vIEVPRgorICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2
ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQorCQkJcmV0dXJuIHRva2VuOworCQlkZWZh
dWx0OgorCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOworCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7
CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKDIpOworCQkJc3RyY3B5
KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHJOYW1lKTsKKwkJfQorCQl0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQor
CisJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHRva2VuLCB5
eWx2YWxwcCk7CisJSGFuZGxlUHJhZ21hKChjb25zdCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNv
dW50KTsKKwl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisJCisJZm9yIChpID0gMDsgaSA8IHRva2VuQ291bnQ7ICsraSkgeworCQlm
cmVlIChhbGxUb2tlbnNbaV0pOworCX0KKwlmcmVlIChhbGxUb2tlbnMpOwkKKworCXJldHVybiB0
b2tlbjsgICAgCit9IC8vIENQUHByYWdtYQorCisjZGVmaW5lIEVTU0xfVkVSU0lPTl9OVU1CRVIg
MTAwCisjZGVmaW5lIEVTU0xfVkVSU0lPTl9TVFJJTkcgIjEwMCIKKworc3RhdGljIGludCBDUFB2
ZXJzaW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworCisgICAgaW50IHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKworICAgIGlm
IChjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9PSAxKQorICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IiN2ZXJzaW9uIG11c3Qgb2NjdXIgYmVmb3JlIGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhlIHBy
b2dyYW0iKTsKKworICAgIGlmKHRva2VuPT0nXG4nKXsKKwkJRGVjTGluZU51bWJlcigpOworICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKyAgICAgICAgSW5jTGluZU51bWJl
cigpOworCQlyZXR1cm4gdG9rZW47CisJfQorICAgIGlmICh0b2tlbiAhPSBDUFBfSU5UQ09OU1RB
TlQpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOworCQorICAgIHl5bHZh
bHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCS8vU2V0VmVyc2lvbk51
bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAKKyAgICBpZiAoeXlsdmFscHAtPnNjX2ludCAh
PSBFU1NMX1ZFUlNJT05fTlVNQkVSKQorICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlZlcnNpb24g
bnVtYmVyIG5vdCBzdXBwb3J0ZWQgYnkgRVNTTCIpOworCisgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIAorCWlmICh0
b2tlbiA9PSAnXG4nKXsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNleworICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwl9CisgICAgcmV0dXJuIHRva2VuOworfSAvLyBD
UFB2ZXJzaW9uCisKK3N0YXRpYyBpbnQgQ1BQZXh0ZW5zaW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQoreworCisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjaGFyIGV4dGVuc2lvbk5hbWVbODBdOworCisgICAg
aWYodG9rZW49PSdcbicpeworCQlEZWNMaW5lTnVtYmVyKCk7CisgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiZXh0ZW5zaW9uIG5hbWUgbm90IHNwZWNpZmllZCIpOworICAgICAgICBJbmNMaW5lTnVt
YmVyKCk7CisJCXJldHVybiB0b2tlbjsKKwl9CisKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5U
SUZJRVIpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZXh0ZW5zaW9uIik7CisgICAgCisg
ICAgc3RyY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+
c2NfaWRlbnQpKTsKKwkgICAgCisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiAhPSAnOicpIHsKKyAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCInOicgbWlzc2luZyBhZnRlciBleHRlbnNpb24gbmFtZSIp
OworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIAorICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAo
dG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJiZWhh
dmlvciBmb3IgZXh0ZW5zaW9uIG5vdCBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIHRva2Vu
OworICAgIH0KKworICAgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGV4dGVuc2lvbk5hbWUsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKworICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwlp
ZiAodG9rZW4gPT0gJ1xuJyl7CisJCXJldHVybiB0b2tlbjsKKwl9CisJZWxzZXsKKyAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKKwl9CisgICAgcmV0dXJuIHRva2VuOwor
fSAvLyBDUFBleHRlbnNpb24KKworaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBpbnQgaXNW
ZXJzaW9uID0gMDsKKworICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAg
ICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKKyAgICAgICAgICAgICB0
b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAt
PnNjX2lkZW50ID09IGVsc2VBdG9tKSB7CisJCQkgaWYoQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkp
eworICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApeworICAgICAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7CisgICAgICAgICAgICAg
ICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAg
ICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5z
IGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXds
aW5lIik7CisgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgIH0KKwkJCSAgICAgdG9r
ZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIGFmdGVyIGEgI2Vsc2UiKTsKKyAgICAg
ICAgICAgICAgICAgY3BwLT5pZmRlcHRoPTA7CisgICAgICAgICAgICAgICAgIGNwcC0+cGFzdEZp
cnN0U3RhdGVtZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgfQorCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbGlmQXRvbSkgeworICAg
ICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpeworICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKKyAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxl
RXJyb3I9MTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAvLyB0aGlzIHRva2VuIGlzIHJl
YWxseSBhIGRvbnQgY2FyZSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZWF0IHRoZSB0b2tlbnMKKyAg
ICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsgCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisJCSAgICB0b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOworICAg
ICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbmRpZkF0b20pIHsKKwkJICAg
ICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpewor
ICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc21hdGNoIik7Cisg
ICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgIGVsc2UKKwkJCSAgCSAtLWNwcC0+aWZkZXB0aDsKKwkgICAgfSBlbHNlIGlmICh5
eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBp
Zih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlm
ZGVmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQaWZkZWYoMSwgeXlsdmFscHApOwor
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZm5kZWZBdG9tKSB7Cisg
ICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigwLCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGxpbmVBdG9tKSB7CisgICAgICAgICAgICAgdG9r
ZW4gPSBDUFBsaW5lKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2Nf
aWRlbnQgPT0gcHJhZ21hQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQcHJhZ21hKHl5
bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdW5kZWZB
dG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFB1bmRlZih5eWx2YWxwcCk7CisgICAgICAg
IH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVycm9yQXRvbSkgeworICAgICAgICAg
ICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZh
bHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgeworICAgICAgICAgICAgdG9rZW4gPSBDUFB2
ZXJzaW9uKHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlzVmVyc2lvbiA9IDE7CisgICAgICAgIH0g
ZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKKyAgICAgICAg
ICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFN0b3JlU3RyKCJJbnZhbGlkIERpcmVjdGl2ZSIpOworICAgICAgICAgICAgU3Rv
cmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAg
ICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICB9Cisg
ICAgfQorICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nICYmIHRva2VuICE9IDAgJiYgdG9rZW4gIT0g
RU9GKSB7CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKwl9CisgICAgICAgIAorICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50
ID0gMTsKKworICAgIHJldHVybiB0b2tlbjsKK30gLy8gcmVhZENQUGxpbmUKKwordm9pZCBGcmVl
TWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKKyAgICBEZWxldGVUb2tlblN0cmVhbShzLT5ib2R5KTsK
K30KKwordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
IHsKKyAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07CisgICAgU3ltYm9sICpzeW1ib2wgPSBO
VUxMOworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezB9OworICAgIHl5c3R5cGVwcCB2YWwgPSB7
MH07CisgICAgaW50IGF0b20gPSAwOworCisgICAgbWFjcm8uYm9keSA9IE5ld1Rva2VuU3RyZWFt
KG5hbWUsIG1hY3Jvcy0+cG9vbCk7CisgICAgdmFsLnNjX2ludCA9IHZhbHVlOworICAgIHNwcmlu
dGYodmFsLnN5bWJvbF9uYW1lLCAiJWQiLCB2YWx1ZSk7CisgICAgUmVjb3JkVG9rZW4obWFjcm8u
Ym9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKKyAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgbmFtZSk7CisgICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9z
LCBhdG9tLCBNQUNST19TKTsKKyAgICBzeW1ib2wtPmRldGFpbHMubWFjID0gbWFjcm87Cit9CisK
K3N0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
eyByZXR1cm4gLTE7IH0KK3N0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKSB7IH0KKworc3RhdGljIHZvaWQgUHVzaEVvZlNyYygpIHsKKyAg
ICBJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKElucHV0U3JjKSk7CisgICAgbWVtc2V0KGlu
LCAwLCBzaXplb2YoSW5wdXRTcmMpKTsKKyAgICBpbi0+c2NhbiA9IGVvZl9zY2FuOworICAgIGlu
LT5nZXRjaCA9IGVvZl9zY2FuOworICAgIGluLT51bmdldGNoID0gbm9vcDsKKyAgICBpbi0+cHJl
diA9IGNwcC0+Y3VycmVudElucHV0OworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW47Cit9CisK
K3N0YXRpYyB2b2lkIFBvcEVvZlNyYygpIHsKKyAgICBpZiAoY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4gPT0gZW9mX3NjYW4pIHsKKyAgICAgICAgSW5wdXRTcmMgKmluID0gY3BwLT5jdXJyZW50SW5w
dXQ7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPnByZXY7CisgICAgICAgIGZyZWUo
aW4pOworICAgIH0KK30KKworc3RhdGljIFRva2VuU3RyZWFtICpQcmVzY2FuTWFjcm9BcmcoVG9r
ZW5TdHJlYW0gKmEsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IHRva2VuOworICAg
IFRva2VuU3RyZWFtICpuOworICAgIFJld2luZFRva2VuU3RyZWFtKGEpOworICAgIGRvIHsKKyAg
ICAgICAgdG9rZW4gPSBSZWFkVG9rZW4oYSwgeXlsdmFscHApOworICAgICAgICBpZiAodG9rZW4g
PT0gQ1BQX0lERU5USUZJRVIgJiYgTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lk
ZW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0gd2hpbGUgKHRva2VuID4gMCk7CisgICAg
aWYgKHRva2VuIDw9IDApIHJldHVybiBhOworICAgIG4gPSBOZXdUb2tlblN0cmVhbSgibWFjcm8g
YXJnIiwgMCk7CisgICAgUHVzaEVvZlNyYygpOworICAgIFJlYWRGcm9tVG9rZW5TdHJlYW0oYSwg
MCwgMCk7CisgICAgd2hpbGUgKCh0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCkpID4gMCkgeworICAgICAgICBpZiAodG9rZW4gPT0gQ1BQ
X0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAtPnNjX2lkZW50LCB5eWx2YWxwcCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVjb3JkVG9rZW4obiwgdG9rZW4sIHl5
bHZhbHBwKTsKKyAgICB9CisgICAgUG9wRW9mU3JjKCk7CisgICAgRGVsZXRlVG9rZW5TdHJlYW0o
YSk7CisgICAgcmV0dXJuIG47Cit9IC8vIFByZXNjYW5NYWNyb0FyZworCit0eXBlZGVmIHN0cnVj
dCBNYWNyb0lucHV0U3JjIHsKKyAgICBJbnB1dFNyYyAgICBiYXNlOworICAgIE1hY3JvU3ltYm9s
ICptYWM7CisgICAgVG9rZW5TdHJlYW0gKiphcmdzOworfSBNYWNyb0lucHV0U3JjOworCisvKiBt
YWNyb19zY2FuIC0tLQorKiogcmV0dXJuIHRoZSBuZXh0IHRva2VuIGZvciBhIG1hY3JvIGV4cGFu
aW9uLCBoYW5kbGluZyBtYWNybyBhcmdzIAorKi8KK3N0YXRpYyBpbnQgbWFjcm9fc2NhbihNYWNy
b0lucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBpbnQgaTsKKyAgICBp
bnQgdG9rZW4gPSBSZWFkVG9rZW4oaW4tPm1hYy0+Ym9keSwgeXlsdmFscHApOworICAgIGlmICh0
b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBmb3IgKGkgPSBpbi0+bWFjLT5hcmdj
LTE7IGk+PTA7IGktLSkKKyAgICAgICAgICAgIGlmIChpbi0+bWFjLT5hcmdzW2ldID09IHl5bHZh
bHBwLT5zY19pZGVudCkgYnJlYWs7CisgICAgICAgIGlmIChpID49IDApIHsKKyAgICAgICAgICAg
IFJlYWRGcm9tVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0sIHl5bHZhbHBwLT5zY19pZGVudCwgMCk7
CisgICAgICAgICAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodG9rZW4gPiAwKSBy
ZXR1cm4gdG9rZW47CisgICAgaW4tPm1hYy0+YnVzeSA9IDA7CisgICAgY3BwLT5jdXJyZW50SW5w
dXQgPSBpbi0+YmFzZS5wcmV2OworICAgIGlmIChpbi0+YXJncykgeworICAgICAgICBmb3IgKGk9
aW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCisgICAgICAgICAgICBEZWxldGVUb2tlblN0cmVh
bShpbi0+YXJnc1tpXSk7CisgICAgICAgIGZyZWUoaW4tPmFyZ3MpOworICAgIH0KKyAgICBmcmVl
KGluKTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKK30gLy8gbWFjcm9fc2NhbgorCisvKiBNYWNyb0V4cGFuZAorKiogY2hl
Y2sgYW4gaWRlbnRpZmllciAoYXRvbSkgdG8gc2VlIGlmIGl0IGEgbWFjcm8gdGhhdCBzaG91bGQg
YmUgZXhwYW5kZWQuCisqKiBJZiBpdCBpcywgcHVzaCBhbiBJbnB1dFNyYyB0aGF0IHdpbGwgcHJv
ZHVjZSB0aGUgYXBwcm9wcmlhdGUgZXhwYW5zaW9uCisqKiBhbmQgcmV0dXJuIFRSVUUuICBJZiBu
b3QsIHJldHVybiBGQUxTRS4KKyovCisKK2ludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlw
ZXBwICogeXlsdmFscHApCit7CisgICAgU3ltYm9sICAgICAgICAgICAgICAqc3ltID0gTG9va1Vw
U3ltYm9sKG1hY3JvcywgYXRvbSk7CisgICAgTWFjcm9JbnB1dFNyYyAgICAgICAqaW47CisgICAg
aW50IGksaiwgdG9rZW4sIGRlcHRoPTA7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKwlpZiAo
YXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKKyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldExp
bmVOdW1iZXIoKTsKKyAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5
eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5
bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChhdG9tID09IF9fRklM
RV9fQXRvbSkgeworICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7
CisgICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNj
X2ludCk7CisgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKwlpZiAoYXRvbSA9PSBfX1ZFUlNJT05fX0F0b20pIHsK
KyAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxFU1NMX1ZFUlNJT05fU1RSSU5H
KTsKKyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1l
KTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICghc3ltIHx8IHN5bS0+ZGV0YWlscy5tYWMudW5k
ZWYpIHJldHVybiAwOworICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmJ1c3kpIHJldHVybiAwOyAg
ICAgICAgLy8gbm8gcmVjdXJzaXZlIGV4cGFuc2lvbnMKKyAgICBpbiA9IG1hbGxvYyhzaXplb2Yo
KmluKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoKmluKSk7CisgICAgaW4tPmJhc2Uuc2Nh
biA9ICh2b2lkICopbWFjcm9fc2NhbjsKKyAgICBpbi0+YmFzZS5saW5lID0gY3BwLT5jdXJyZW50
SW5wdXQtPmxpbmU7CisgICAgaW4tPmJhc2UubmFtZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1l
OworICAgIGluLT5tYWMgPSAmc3ltLT5kZXRhaWxzLm1hYzsKKyAgICBpZiAoc3ltLT5kZXRhaWxz
Lm1hYy5hcmdzKSB7CisgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJaWYgKHRva2VuICE9ICcoJykgeworICAgICAg
ICAgICAgVW5nZXRUb2tlbih0b2tlbiwgeXlsdmFscHApOworICAgICAgICAgICAgeXlsdmFscHAt
PnNjX2lkZW50ID0gYXRvbTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIGluLT5hcmdzID0gbWFsbG9jKGluLT5tYWMtPmFyZ2MgKiBzaXplb2YoVG9rZW5TdHJlYW0g
KikpOworICAgICAgICBmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspCisgICAgICAgICAg
ICBpbi0+YXJnc1tpXSA9IE5ld1Rva2VuU3RyZWFtKCJtYWNybyBhcmciLCAwKTsKKwkJaT0wO2o9
MDsKKyAgICAgICAgZG97CisgICAgICAgICAgICBkZXB0aCA9IDA7CisJCQl3aGlsZSgxKSB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7CisgICAgICAgICAg
ICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOworICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgUmVzZXRU
U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09MCkgJiYgKHRva2VuIT0nKScp
KSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCAmJiAodG9rZW4gPT0gJywn
IHx8IHRva2VuID09ICcpJykpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAn
KCcpIGRlcHRoKys7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgZGVwdGgtLTsK
KyAgICAgICAgICAgICAgICBSZWNvcmRUb2tlbihpbi0+YXJnc1tpXSwgdG9rZW4sIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICBqPTE7CisJCQl9CisgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JyknKSB7CisgICAgICAgICAgICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9PTEpICYmaj09MCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSsrOworCQl9d2hpbGUo
aSA8IGluLT5tYWMtPmFyZ2MpOworCisgICAgICAgIGlmIChpIDwgaW4tPm1hYy0+YXJnYykgewor
ICAgICAgICAgICAgU3RvcmVTdHIoIlRvbyBmZXcgYXJncyBpbiBNYWNybyAiKTsKKyAgICAgICAg
ICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOworICAgICAgICAgICAg
bWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1l
c3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
dG9rZW4gIT0gJyknKSB7CisgICAgICAgICAgICBkZXB0aD0wOworCQkJd2hpbGUgKHRva2VuID49
IDAgJiYgKGRlcHRoID4gMCB8fCB0b2tlbiAhPSAnKScpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRva2VuID09ICcpJykgZGVwdGgtLTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKKyAgICAgICAgICAgIH0KKwkJCQorICAg
ICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKKyAgICAgICAgICAgICAgICBTdG9yZVN0cigiRU9G
IGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShh
dGFibGUsYXRvbSkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsK
KyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICAg
ICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBTdG9yZVN0cigiVG9vIG1hbnkgYXJncyBpbiBNYWNybyAiKTsKKyAg
ICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOworICAgICAg
ICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisJCX0KKwkJZm9yIChp
PTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAgICAgICAgICBpbi0+YXJnc1tpXSA9IFBy
ZXNjYW5NYWNyb0FyZyhpbi0+YXJnc1tpXSwgeXlsdmFscHApOworICAgICAgICB9CisgICAgfQor
I2lmIDAKKyAgICBwcmludGYoIiAgPCVzOiVkPmZvdW5kIG1hY3JvICVzXG4iLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgbG9jLmZpbGUpLAorICAgICAgICAgICBsb2MubGluZSwgR2V0QXRvbVN0cmlu
ZyhhdGFibGUsIGF0b20pKTsKKyAgICBmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspIHsK
KyAgICAgICAgcHJpbnRmKCJcdGFyZyAlcyA9ICciLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgaW4t
Pm1hYy0+YXJnc1tpXSkpOworICAgICAgICBEdW1wVG9rZW5TdHJlYW0oc3Rkb3V0LCBpbi0+YXJn
c1tpXSk7CisgICAgICAgIHByaW50ZigiJ1xuIik7CisgICAgfQorI2VuZGlmCisJLypyZXRhaW4g
dGhlIGlucHV0IHNvdXJjZSovCisgICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0
OworICAgIHN5bS0+ZGV0YWlscy5tYWMuYnVzeSA9IDE7CisgICAgUmV3aW5kVG9rZW5TdHJlYW0o
c3ltLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFz
ZTsKKyAgICByZXR1cm4gMTsKK30gLy8gTWFjcm9FeHBhbmQKKworaW50IENoa0NvcnJlY3RFbHNl
TmVzdGluZyh2b2lkKQoreworICAgIGlmKGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJd
PT0wKXsKKwkgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdPTE7CisgICAgICByZXR1
cm4gMTsgICAgICAgICAgCisgICAgfQorICAgIHJldHVybiAwOworfQorCisKSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykg
MjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIp
IHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxh
dGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3
YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5v
dCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1v
ZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMs
IGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25h
bCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0
aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRv
IHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0
d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmlu
YXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEg
U29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElB
LCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4g
YWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVy
IHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEK
K0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRl
ZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9y
IGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90
CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5
b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklE
SUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2Vk
IGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04g
QU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElN
SVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdF
TUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwg
T1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04g
V0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFC
TEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1Qg
UFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9S
IEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJ
Q0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VW
RVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4g
SUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGNwcC5oCisvLworCisjaWYgIWRl
ZmluZWQoX19DUFBfSCkKKyNkZWZpbmUgX19DUFBfSCAxCisKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvcGFyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5oIgorCitpbnQgSW5pdENQUCh2b2lkKTsKK2ludCBGaW5hbENQUCh2b2lkKTsKK2ludCAg
cmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApOworaW50IE1hY3JvRXhwYW5kKGludCBh
dG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQgQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZv
aWQpOworCit0eXBlZGVmIHN0cnVjdCBNYWNyb1N5bWJvbCB7CisgICAgaW50IGFyZ2M7CisgICAg
aW50ICphcmdzOworICAgIFRva2VuU3RyZWFtICpib2R5OworICAgIHVuc2lnbmVkIGJ1c3k6MTsK
KyAgICB1bnNpZ25lZCB1bmRlZjoxOworfSBNYWNyb1N5bWJvbDsKKwordm9pZCBGcmVlTWFjcm8o
TWFjcm9TeW1ib2wgKik7Cit2b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUs
IGludCB2YWx1ZSk7CisKK3ZvaWQgIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZyk7ICAg
ICAgLy8gUHJpbnRzIGluZm9ybWF0aW9uIGludG8gZGVidWcgbG9nCit2b2lkICBDUFBTaEluZm9M
b2dNc2coY29uc3QgY2hhciopOyAgICAgICAgIC8vIFN0b3JlIGNwcCBFcnIgTXNnIGludG8gU2gu
SW5mby5Mb2cKK3ZvaWQgIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKTsgLy8g
UHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZvIGxvZwordm9pZCAgSGFuZGxlUHJhZ21h
KGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAvLyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250
YWluZXIuCit2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7ICAgICAgICAgICAgICAgICAgIC8vICNl
cnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCit2b2lkICBDUFBFcnJvclRvSW5mb0xvZyhjaGFyKik7
ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8gU2guSW5mby5sb2cgICAu
Cit2b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lkICBTZXRMaW5lTnVtYmVyKGludCk7ICAg
ICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAordm9pZCAgU2V0U3RyaW5nTnVt
YmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51bWJlci4gICAgCitpbnQg
ICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVu
dCBTdHJpbmcgTnVtYmVyLiAKK2ludCAgIEdldFN0cmluZ051bWJlcih2b2lkKTsgICAgICAgICAg
ICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAorY29uc3QgY2hhciogR2V0
U3RyZnJvbVRTdHIodm9pZCk7ICAgICAgICAgICAvLyBDb252ZXJ0IFRTdHJpbmcgdG8gU3RyaW5n
LiAgCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBj
b25zdCBjaGFyKiBiZWhhdmlvcik7CitpbnQgICBGcmVlQ1BQKHZvaWQpOworCisjZW5kaWYgLy8g
IShkZWZpbmVkKF9fQ1BQX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcHN0cnVjdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3Bwc3RydWN0LmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcHN0cnVjdC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2Nv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitz
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3Bwc3RydWN0LmMKKy8vCisKKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCitDUFBTdHJ1Y3QgICpjcHAgICAgICA9IE5VTEw7Citz
dGF0aWMgaW50ICByZWZDb3VudCA9IDA7CisKK2ludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpOwor
aW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpOworaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCk7Citp
bnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisKKy8qCisgKiBJbml0Q1BQU3RydWN0KCkg
LSBJbml0aWxhaXplIHRoZSBDUFAgc3RydWN0dXJlLgorICoKKyAqLworCitpbnQgSW5pdENQUFN0
cnVjdCh2b2lkKQoreworICAgIGludCBsZW47CisgICAgY2hhciAqcDsKKworICAgIGNwcCA9IChD
UFBTdHJ1Y3QgKikgbWFsbG9jKHNpemVvZihDUFBTdHJ1Y3QpKTsKKyAgICBpZiAoY3BwID09IE5V
TEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVmQ291bnQrKzsKKworICAgIC8vIEluaXRp
YWxpemUgcHVibGljIG1lbWJlcnM6CisgICAgY3BwLT5wTGFzdFNvdXJjZUxvYyA9ICZjcHAtPmxh
c3RTb3VyY2VMb2M7CisgICAgCisJcCA9IChjaGFyICopICZjcHAtPm9wdGlvbnM7CisgICAgbGVu
ID0gc2l6ZW9mKGNwcC0+b3B0aW9ucyk7CisgICAgd2hpbGUgKC0tbGVuID49IDApCisgICAgICAg
IHBbbGVuXSA9IDA7CisgICAgIAorICAgIFJlc2V0UHJlcHJvY2Vzc29yKCk7CisgICAgcmV0dXJu
IDE7Cit9IC8vIEluaXRDUFBTdHJ1Y3QKKworaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpCit7
CisgICAgLy8gSW5pdGlhbGl6ZSBwcml2YXRlIG1lbWJlcnM6CisKKyAgICBjcHAtPmxhc3RTb3Vy
Y2VMb2MuZmlsZSA9IDA7CisgICAgY3BwLT5sYXN0U291cmNlTG9jLmxpbmUgPSAwOworCWNwcC0+
cEM9MDsKKyAgICBjcHAtPkNvbXBpbGVFcnJvcj0wOyAKKwljcHAtPmlmZGVwdGg9MDsKKyAgICBm
b3IoY3BwLT5lbHNldHJhY2tlcj0wOyBjcHAtPmVsc2V0cmFja2VyPDY0OyBjcHAtPmVsc2V0cmFj
a2VyKyspCisJCWNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdPTA7IAorCWNwcC0+ZWxz
ZXRyYWNrZXI9MDsKKyAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDA7CisgICAgcmV0dXJuIDE7
Cit9CisKKy8vSW50aWFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KKworaW50IEluaXRQcmVwcm9j
ZXNzb3Iodm9pZCkKK3sKKyAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1ZQorICAgICAgICAjICBp
ZmRlZiBDUFBfU1RVRkYKKyAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAg
IEluaXRDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5RdWlldCA9IDE7Cisg
ICAgICAgICAgICBjcHAtPm9wdGlvbnMucHJvZmlsZVN0cmluZyA9ICJnZW5lcmljIjsKKyAgICAg
ICAgICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUsIDApKQorICAgICAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICAgICAgaWYgKCFJbml0U2Nhbm5lcihjcHApKQorCSAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICMgIGVuZGlmCisgIHJldHVybiAwOyAKK30KKworLy9GcmVlQ1BQ
U3RydWN0KCkgLSBGcmVlIHRoZSBDUFAgc3RydWN0dXJlLgorCitpbnQgRnJlZUNQUFN0cnVjdCh2
b2lkKQoreworICAgIGlmIChyZWZDb3VudCkKKyAgICB7CisgICAgICAgZnJlZShjcHApOworICAg
ICAgIHJlZkNvdW50LS07CisgICAgfQorICAgIAorICAgIHJldHVybiAxOworfQorCisvL0ZpbmFs
aXppbmcgdGhlIFByZXByb2Nlc3Nvci4KKworaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZvaWQp
Cit7CisgICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKKyAgICAgICAgIyAgaWZkZWYgQ1BQX1NU
VUZGCisgICAgICAgICAgICBGcmVlQXRvbVRhYmxlKGF0YWJsZSk7CisgICAgICAgICAgICBGcmVl
Q1BQU3RydWN0KCk7CisgICAgICAgICAgICBGcmVlU2Nhbm5lcigpOworICAgICAgICMgIGVuZGlm
CisgIHJldHVybiAwOyAKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIGNwcHN0
cnVjdC5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBs
aWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwg
bW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitj
b25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3Jl
ZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAor
c3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9u
LWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9y
aWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwg
cmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citm
b3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdh
cmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlz
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1
Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBu
YW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBv
cmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0
aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxp
ZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1p
dGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRl
cml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29m
dHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1
bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFT
IElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElP
TiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwg
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lU
UyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBP
VEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9S
IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklU
UzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgor
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9O
IEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FV
U0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
K1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLy8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBfTVNDX1ZFUgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvbWVtb3J5LmgiCisKKy8vIGRlZmF1bHQgYWxpZ25tZW50IGFuZCBjaHVua3NpemUsIGlmIGNh
bGxlZCB3aXRoIDAgYXJndW1lbnRzCisjZGVmaW5lIENIVU5LU0laRSAgICAgICAoNjQqMTAyNCkK
KyNkZWZpbmUgQUxJR04gICAgICAgICAgIDgKKworLy8gd2UgbmVlZCB0byBjYWxsIHRoZSBgcmVh
bCcgbWFsbG9jIGFuZCBmcmVlLCBub3Qgb3VyIHJlcGxhY2VtZW50cworI3VuZGVmIG1hbGxvYwor
I3VuZGVmIGZyZWUKKworc3RydWN0IGNodW5rIHsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpu
ZXh0OworfTsKKworc3RydWN0IGNsZWFudXAgeworICAgIHN0cnVjdCBjbGVhbnVwICAgICAgKm5l
eHQ7CisgICAgdm9pZCAgICAgICAgICAgICAgICAoKmZuKSh2b2lkICopOworICAgIHZvaWQgICAg
ICAgICAgICAgICAgKmFyZzsKK307CisKK3N0cnVjdCBNZW1vcnlQb29sX3JlYyB7CisgICAgc3Ry
dWN0IGNodW5rICAgICAgICAqbmV4dDsKKyAgICB1aW50cHRyX3QgICAgICAgICAgIGZyZWUsIGVu
ZDsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGNodW5rc2l6ZTsKKyAgICB1aW50cHRyX3QgICAg
ICAgICAgIGFsaWdubWFzazsKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpjbGVhbnVwOworfTsK
KworTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQg
aW50IGFsaWduKQoreworICAgIE1lbW9yeVBvb2wgICpwb29sOworCisgICAgaWYgKGFsaWduID09
IDApIGFsaWduID0gQUxJR047CisgICAgaWYgKGNodW5rc2l6ZSA9PSAwKSBjaHVua3NpemUgPSBD
SFVOS1NJWkU7CisgICAgaWYgKGFsaWduICYgKGFsaWduLTEpKSByZXR1cm4gMDsKKyAgICBpZiAo
Y2h1bmtzaXplIDwgc2l6ZW9mKE1lbW9yeVBvb2wpKSByZXR1cm4gMDsKKyAgICBpZiAoY2h1bmtz
aXplICYgKGFsaWduLTEpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwb29sID0gbWFsbG9jKGNodW5r
c2l6ZSkpKSByZXR1cm4gMDsKKyAgICBwb29sLT5uZXh0ID0gMDsKKyAgICBwb29sLT5jaHVua3Np
emUgPSBjaHVua3NpemU7CisgICAgcG9vbC0+YWxpZ25tYXNrID0gKHVpbnRwdHJfdCkoYWxpZ24p
LTE7ICAKKyAgICBwb29sLT5mcmVlID0gKCh1aW50cHRyX3QpKHBvb2wgKyAxKSArIHBvb2wtPmFs
aWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgIHBvb2wtPmVuZCA9ICh1aW50cHRyX3Qp
cG9vbCArIGNodW5rc2l6ZTsKKyAgICBwb29sLT5jbGVhbnVwID0gMDsKKyAgICByZXR1cm4gcG9v
bDsKK30KKwordm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBzdHJ1
Y3QgY2xlYW51cCAgICAgICpjbGVhbnVwOworICAgIHN0cnVjdCBjaHVuayAgICAgICAgKnAsICpu
ZXh0OworCisgICAgZm9yIChjbGVhbnVwID0gcG9vbC0+Y2xlYW51cDsgY2xlYW51cDsgY2xlYW51
cCA9IGNsZWFudXAtPm5leHQpIHsKKyAgICAgICAgY2xlYW51cC0+Zm4oY2xlYW51cC0+YXJnKTsK
KyAgICB9CisgICAgZm9yIChwID0gKHN0cnVjdCBjaHVuayAqKXBvb2w7IHA7IHAgPSBuZXh0KSB7
CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAgICBmcmVlKHApOworICAgIH0KK30KKwor
dm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnBvb2wsIHNpemVfdCBzaXplKQoreworICAgIHN0
cnVjdCBjaHVuayAqY2g7CisgICAgdm9pZCAqcnYgPSAodm9pZCAqKXBvb2wtPmZyZWU7CisgICAg
c2l6ZSA9IChzaXplICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2s7CisgICAg
aWYgKHNpemUgPD0gMCkgc2l6ZSA9IHBvb2wtPmFsaWdubWFzazsKKyAgICBwb29sLT5mcmVlICs9
IHNpemU7CisgICAgaWYgKHBvb2wtPmZyZWUgPiBwb29sLT5lbmQgfHwgcG9vbC0+ZnJlZSA8ICh1
aW50cHRyX3QpcnYpIHsKKyAgICAgICAgc2l6ZV90IG1pbnJlcSA9IChzaXplICsgc2l6ZW9mKHN0
cnVjdCBjaHVuaykgKyBwb29sLT5hbGlnbm1hc2spCisgICAgICAgICAgICAgICAgICAgICAgJiB+
cG9vbC0+YWxpZ25tYXNrOworICAgICAgICBwb29sLT5mcmVlID0gKHVpbnRwdHJfdClydjsKKyAg
ICAgICAgaWYgKG1pbnJlcSA+PSBwb29sLT5jaHVua3NpemUpIHsKKyAgICAgICAgICAgIC8vIHJl
cXVlc3Qgc2l6ZSBpcyB0b28gYmlnIGZvciB0aGUgY2h1bmtzaXplLCBzbyBhbGxvY2F0ZSBpdCBh
cworICAgICAgICAgICAgLy8gYSBzaW5nbGUgY2h1bmsgb2YgdGhlIHJpZ2h0IHNpemUKKyAgICAg
ICAgICAgIGNoID0gbWFsbG9jKG1pbnJlcSk7CisgICAgICAgICAgICBpZiAoIWNoKSByZXR1cm4g
MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoID0gbWFsbG9jKHBvb2wtPmNodW5r
c2l6ZSk7CisgICAgICAgICAgICBpZiAoIWNoKSByZXR1cm4gMDsKKyAgICAgICAgICAgIHBvb2wt
PmZyZWUgPSAodWludHB0cl90KWNoICsgbWlucmVxOworICAgICAgICAgICAgcG9vbC0+ZW5kID0g
KHVpbnRwdHJfdCljaCArIHBvb2wtPmNodW5rc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBjaC0+
bmV4dCA9IHBvb2wtPm5leHQ7CisgICAgICAgIHBvb2wtPm5leHQgPSBjaDsKKyAgICAgICAgcnYg
PSAodm9pZCAqKSgoKHVpbnRwdHJfdCkoY2grMSkgKyBwb29sLT5hbGlnbm1hc2spICYgfnBvb2wt
PmFsaWdubWFzayk7CisgICAgfQorICAgIHJldHVybiBydjsKK30KKworaW50IG1lbV9BZGRDbGVh
bnVwKE1lbW9yeVBvb2wgKnBvb2wsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKSB7Cisg
ICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CisKKyAgICBwb29sLT5mcmVlID0gKHBvb2wtPmZy
ZWUgKyBzaXplb2Yodm9pZCAqKSAtIDEpICYgfihzaXplb2Yodm9pZCAqKS0xKTsKKyAgICBjbGVh
bnVwID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihzdHJ1Y3QgY2xlYW51cCkpOworICAgIGlmICgh
Y2xlYW51cCkgcmV0dXJuIC0xOworICAgIGNsZWFudXAtPm5leHQgPSBwb29sLT5jbGVhbnVwOwor
ICAgIGNsZWFudXAtPmZuID0gZm47CisgICAgY2xlYW51cC0+YXJnID0gYXJnOworICAgIHBvb2wt
PmNsZWFudXAgPSBjbGVhbnVwOworICAgIHJldHVybiAwOworfQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChj
KSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElB
Iikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFs
bGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29m
dHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8g
bm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwg
bW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNv
bmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGlu
IHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwg
dG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNv
ZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBi
aW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJ
QSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklE
SUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBp
biBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRo
ZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJ
QQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3Rh
dGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mg
b3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBu
b3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5
IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5W
SURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5z
ZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBP
TiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBM
SU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklO
R0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElP
TiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJ
QUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9T
VCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
T1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJ
RklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9X
RVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZF
TiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworI2lmbmRlZiBfX01FTU9SWV9ICisj
ZGVmaW5lIF9fTUVNT1JZX0gKKwordHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5
UG9vbDsKKworZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3Np
emUsIHVuc2lnbmVkIGludCBhbGlnbik7CitleHRlcm4gdm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5
UG9vbCAqKTsKK2V4dGVybiB2b2lkICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcCwgc2l6ZV90IHNp
emUpOworZXh0ZXJuIHZvaWQgKm1lbV9SZWFsbG9jKE1lbW9yeVBvb2wgKnAsIHZvaWQgKm9sZCwg
c2l6ZV90IG9sZHNpemUsIHNpemVfdCBuZXdzaXplKTsKK2V4dGVybiBpbnQgbWVtX0FkZENsZWFu
dXAoTWVtb3J5UG9vbCAqcCwgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcpOworCisjZW5k
aWYgLyogX19NRU1PUllfSCAqLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBz
b2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRp
b24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVz
IGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhl
c2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRv
IHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZl
CitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJ
RElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2Us
IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92
aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11
c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3Ry
aWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRl
bWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUK
K05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
biBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNl
LCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdy
YW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55
IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQor
d29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkg
YmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKwor
VEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF
WFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQg
T1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9E
VUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkg
V0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJ
U1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdI
RVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisKKyNpZm5kZWYgQklTT05fUEFSU0VSX0gKKyMgZGVmaW5lIEJJU09OX1BB
UlNFUl9ICisKKyNpZm5kZWYgeXlzdHlwZXBwCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAg
IHNjX2ludDsKKyAgICBmbG9hdCAgc2NfZnZhbDsKKyAgICBpbnQgICAgc2NfaWRlbnQ7CisJY2hh
ciAgIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4rMV07Cit9IHl5c3R5cGVwcDsKKwor
IyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorIyBkZWZpbmUJQ1BQX0FORF9P
UAkgICAgICAgIDI1NworIyBkZWZpbmUJQ1BQX1NVQl9BU1NJR04JICAgIDI1OQorIyBkZWZpbmUJ
Q1BQX01PRF9BU1NJR04JICAgIDI2MAorIyBkZWZpbmUJQ1BQX0FERF9BU1NJR04JMjYxCisjIGRl
ZmluZQlDUFBfRElWX0FTU0lHTgkyNjIKKyMgZGVmaW5lCUNQUF9NVUxfQVNTSUdOCTI2MworIyBk
ZWZpbmUJQ1BQX0VRX09QCSAgICAgICAgMjY0CisjIGRlZmluZSAgICBDUFBfWE9SX09QICAgICAg
ICAgMjY1IAorIyBkZWZpbmUJRVJST1JfU1kJICAgIDI2NgorIyBkZWZpbmUJQ1BQX0ZMT0FUQ09O
U1RBTlQJMjY3CisjIGRlZmluZQlDUFBfR0VfT1AJICAgICAgICAyNjgKKyMgZGVmaW5lCUNQUF9S
SUdIVF9PUCAgICAgICAgMjY5CisjIGRlZmluZQlDUFBfSURFTlRJRklFUgkgICAgMjcwCisjIGRl
ZmluZQlDUFBfSU5UQ09OU1RBTlQJICAgIDI3MQorIyBkZWZpbmUJQ1BQX0xFX09QCSAgICAgICAg
MjcyCisjIGRlZmluZQlDUFBfTEVGVF9PUAkgICAgICAgIDI3MworIyBkZWZpbmUJQ1BQX0RFQ19P
UAkyNzQKKyMgZGVmaW5lCUNQUF9ORV9PUAkgICAgICAgIDI3NQorIyBkZWZpbmUJQ1BQX09SX09Q
CSAgICAgICAgMjc2CisjIGRlZmluZQlDUFBfSU5DX09QCSAgICAyNzcKKyMgZGVmaW5lCUNQUF9T
VFJDT05TVEFOVAkgICAgMjc4CisjIGRlZmluZQlDUFBfVFlQRUlERU5USUZJRVIJMjc5CisKKyMg
ZGVmaW5lCUZJUlNUX1VTRVJfVE9LRU5fU1kJMjg5CisKKyMgZGVmaW5lCUNQUF9SSUdIVF9BU1NJ
R04JICAgIDI4MAorIyBkZWZpbmUJQ1BQX0xFRlRfQVNTSUdOCSAgICAyODEKKyMgZGVmaW5lCUNQ
UF9BTkRfQVNTSUdOCTI4MgorIyBkZWZpbmUJQ1BQX09SX0FTU0lHTiAgCTI4MworIyBkZWZpbmUJ
Q1BQX1hPUl9BU1NJR04JMjg0CisjIGRlZmluZQlDUFBfTEVGVF9CUkFDS0VUCTI4NQorIyBkZWZp
bmUJQ1BQX1JJR0hUX0JSQUNLRVQJMjg2CisjIGRlZmluZQlDUFBfTEVGVF9CUkFDRQkyODcKKyMg
ZGVmaW5lCUNQUF9SSUdIVF9CUkFDRQkyODgKKworI2VuZGlmIC8qIG5vdCBCSVNPTl9QQVJTRVJf
SCAqLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNz
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9y
YXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0
d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24g
b3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFj
Y2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UK
K3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3Jl
ZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRo
ZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCits
aWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElB
IHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1v
ZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhv
dXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRl
ZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QK
K3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0
aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1
dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFy
a3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05W
SURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBm
cm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBu
byBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50
ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBh
dGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29y
a3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUK
K2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhF
IE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBX
SVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBS
RVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJ
VFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BF
UkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNU
Uy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUws
IElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZ
CitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RS
SUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRI
RVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Up
LCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisKKyMgaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5o
IgorZXh0ZXJuIENQUFN0cnVjdCAqY3BwOworaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CitpbnQg
SW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOworaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxl
ICphdGFibGUsIGludCBodHNpemUpOworaW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKnMpOworY2hh
ciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc2NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdh
cmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gc2Nh
bm5lci5jCisvLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIDAKKyAgICAjaW5j
bHVkZSA8aWVlZWZwLmg+CisgICAgI2Vsc2UKKyAgICAjZGVmaW5lIGlzaW5mZih4KSAoKCgqKGlu
dCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBcCisgICAgICAgICAgICAg
ICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0wMDAwMDAwMDAwTCkpCisj
ZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKwor
Cit0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7CisgICAgSW5wdXRTcmMgYmFzZTsKKyAg
ICBjaGFyICpwOworfSBTdHJpbmdJbnB1dFNyYzsKKworc3RhdGljIGludCBlb2Zfc2NhbihJbnB1
dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIHJldHVybiBFT0Y7Cit9IC8v
IGVvZl9zY2FuCisKK3N0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKSB7fQorCitzdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0geyAw
LCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsKKworc3RhdGljIGludCBieXRlX3NjYW4o
SW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOworCisjZGVmaW5lIEVPTF9TWSAnXG4n
CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBf
X2FzbSBpbnQgMworI2VsaWYgZGVmaW5lZChfTV9BTUQ2NCkKKyAgICAjZGVmaW5lIERCR19CUkVB
S1BPSU5UKCkgYXNzZXJ0KCEiRGJnX0JyZWFrcG9pbnQiKTsKKyNlbHNlCisgICAgI2RlZmluZSBE
QkdfQlJFQUtQT0lOVCgpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZp
bmVkKF9NX0FNRDY0KQorICAgIF9faW50NjQgUkRUU0MgKCB2b2lkICkgeworCisgICAgICAgIF9f
aW50NjQgdjsKKyAgICAKKyAgICAgICAgX19hc20gX19lbWl0IDB4MGYKKyAgICAgICAgX19hc20g
X19lbWl0IDB4MzEKKyAgICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2LCBlYXgKKyAgICAgICAg
X19hc20gbW92IGR3b3JkIHB0ciB2KzQsIGVkeAorICAgIAorICAgICAgICByZXR1cm4gdjsKKyAg
ICB9CisjZW5kaWYKKworCitpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApCit7CisgICAg
Ly8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRoZSBDUFAgbGluZSBzY2FubmVyOgorICAg
IGlmICghSW5pdENQUCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNwcC0+bW9zdFJlY2Vu
dFRva2VuID0gMDsKKyAgICBjcHAtPnRva2VuTG9jID0gJmNwcC0+bHRva2VuTG9jOworCisgICAg
Y3BwLT5sdG9rZW5Mb2MuZmlsZSA9IDA7CisgICAgY3BwLT5sdG9rZW5Mb2MubGluZSA9IDA7CisK
KyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZlb2ZfaW5wdXRzcmM7CisgICAgY3BwLT5wcmV2aW91
c190b2tlbiA9ICdcbic7CisgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOworCisgICAg
cmV0dXJuIDE7Cit9IC8vIEluaXRTY2FubmVyCisKK2ludCBGcmVlU2Nhbm5lcih2b2lkKQorewor
ICAgIHJldHVybiAoRnJlZUNQUCgpKTsKK30KKworLyoKKyAqIHN0cl9nZXRjaCgpCisgKiB0YWtl
cyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBzdHJpbmdzLgorICogcmV0dXJucyB0aGUg
bmV4dC1jaGFyIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KKyAqIHJldHVybnMgRU9GIHdoZW4gdGhl
IGNvbXBsZXRlIHNoYWRlciBpcyBwYXJzZWQuCisgKi8KK3N0YXRpYyBpbnQgc3RyX2dldGNoKFN0
cmluZ0lucHV0U3JjICppbikKK3sKKwlmb3IoOzspeworCSAgIGlmICgqaW4tPnApeworCSAgICAg
IGlmICgqaW4tPnAgPT0gJ1xuJykgeworICAgICAgICAgICAgIGluLT5iYXNlLmxpbmUrKzsKKyAg
ICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVy
biAqaW4tPnArKzsKKwkgICB9CisJICAgaWYoKysoY3BwLT5QYVdoaWNoU3RyKSA8IGNwcC0+UGFB
cmdjKXsKKwkJICBmcmVlKGluKTsKKwkJICBTZXRTdHJpbmdOdW1iZXIoY3BwLT5QYVdoaWNoU3Ry
KTsKKyAgICAJICBTZXRMaW5lTnVtYmVyKDEpOworCQkgIFNjYW5Gcm9tU3RyaW5nKGNwcC0+UGFB
cmd2W2NwcC0+UGFXaGljaFN0cl0pOworCQkgIGluPShTdHJpbmdJbnB1dFNyYyopY3BwLT5jdXJy
ZW50SW5wdXQ7CisJICAgICAgY29udGludWU7ICAgICAgICAgICAgIAorCSAgIH0KKwkgICBlbHNl
eworCSAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKKwkgICAgICBjcHAt
PlBhV2hpY2hTdHI9MDsKKyAgICAgICAgICBmcmVlKGluKTsKKyAgICAgICAgICByZXR1cm4gRU9G
OworICAgICAgIH0gIAorCX0KK30gLy8gc3RyX2dldGNoCisKK3N0YXRpYyB2b2lkIHN0cl91bmdl
dGNoKFN0cmluZ0lucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKnR5cGUpIHsKKyAgICBp
ZiAoaW4tPnBbLTFdID09IGNoKWluLT5wLS07CisJZWxzZSB7CisJCSooaW4tPnApPSdcMCc7IC8v
dGhpcyB3b3VsZCB0YWtlIGNhcmUgb2Ygc2hpZnRpbmcgdG8gdGhlIHByZXZpb3VzIHN0cmluZy4K
KwkgICAgY3BwLT5QYVdoaWNoU3RyLS07CisJfSAgCisJaWYgKGNoID09ICdcbicpIHsKKyAgICAg
ICAgaW4tPmJhc2UubGluZS0tOworICAgICAgICBEZWNMaW5lTnVtYmVyKCk7CisgICAgfQorfSAv
LyBzdHJfdW5nZXRjaAorCitpbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcykKK3sKKyAgICAKKwlT
dHJpbmdJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CisgICAg
bWVtc2V0KGluLCAwLCBzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKKwlpbi0+cCA9IHM7CisgICAg
aW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uuc2NhbiA9IGJ5dGVfc2NhbjsKKyAgICBp
bi0+YmFzZS5nZXRjaCA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5cGVwcCAqKSlzdHJfZ2V0
Y2g7CisgICAgaW4tPmJhc2UudW5nZXRjaCA9ICh2b2lkICgqKShJbnB1dFNyYyAqLCBpbnQsIHl5
c3R5cGVwcCAqKSlzdHJfdW5nZXRjaDsKKyAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50
SW5wdXQ7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7CisKKyAgICByZXR1cm4g
MTsKK30gLy8gU2NhbkZyb21TdHJpbmc7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEZsb2F0aW5n
IHBvaW50IGNvbnN0YW50czogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAqIGxCdWlsZEZsb2F0VmFs
dWUoKSAtIFF1aWNrIGFuZCBkaXJ0eSBjb252ZXJzaW9uIHRvIGZsb2F0aW5nIHBvaW50LiAgU2lu
Y2UgYWxsCisgKiAgICAgICAgIHdlIG5lZWQgaXMgc2luZ2xlIHByZWNpc2lvbiB0aGlzIHNob3Vs
ZCBiZSBxdWl0ZSBwcmVjaXNlLgorICovCisKK3N0YXRpYyBmbG9hdCBsQnVpbGRGbG9hdFZhbHVl
KGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGV4cCkKK3sKKyAgICBkb3VibGUgdmFsLCBl
eHB2YWwsIHRlbjsKKyAgICBpbnQgaWksIGxsZW4sIGFic2V4cDsKKyAgICBmbG9hdCBydjsKKwor
ICAgIHZhbCA9IDAuMDsKKyAgICBsbGVuID0gbGVuOworICAgIGZvciAoaWkgPSAwOyBpaSA8IGxl
bjsgaWkrKykKKyAgICAgICAgdmFsID0gdmFsKjEwLjAgKyAoc3RyW2lpXSAtICcwJyk7CisgICAg
aWYgKGV4cCAhPSAwKSB7CisgICAgICAgIGFic2V4cCA9IGV4cCA+IDAgPyBleHAgOiAtZXhwOwor
ICAgICAgICBleHB2YWwgPSAxLjBmOworICAgICAgICB0ZW4gPSAxMC4wOworICAgICAgICB3aGls
ZSAoYWJzZXhwKSB7CisgICAgICAgICAgICBpZiAoYWJzZXhwICYgMSkKKyAgICAgICAgICAgICAg
ICBleHB2YWwgKj0gdGVuOworICAgICAgICAgICAgdGVuICo9IHRlbjsKKyAgICAgICAgICAgIGFi
c2V4cCA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwID49IDApIHsKKyAgICAgICAg
ICAgIHZhbCAqPSBleHB2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWwgLz0g
ZXhwdmFsOworICAgICAgICB9CisgICAgfQorICAgIHJ2ID0gKGZsb2F0KXZhbDsKKyAgICBpZiAo
aXNpbmZmKHJ2KSkgeworCQlDUFBFcnJvclRvSW5mb0xvZygiIEVSUk9SX19fRlBfQ09OU1RfT1ZF
UkZMT1ciKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworfSAvLyBsQnVpbGRGbG9hdFZhbHVlCisK
KworLyoKKyAqIGxGbG9hdENvbnN0KCkgLSBTY2FuIGEgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQu
ICBBc3N1bWVzIHRoYXQgdGhlIHNjYW5uZXIKKyAqICAgICAgICAgaGFzIHNlZW4gYXQgbGVhc3Qg
b25lIGRpZ2l0LCBmb2xsb3dlZCBieSBlaXRoZXIgYSBkZWNpbWFsICcuJyBvciB0aGUKKyAqICAg
ICAgICAgbGV0dGVyICdlJy4KKyAqLworCitzdGF0aWMgaW50IGxGbG9hdENvbnN0KGNoYXIgKnN0
ciwgaW50IGxlbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgSGFz
RGVjaW1hbCwgZGVjbGVuLCBleHAsIEV4cFNpZ247CisgICAgaW50IHN0cl9sZW47CisgICAgZmxv
YXQgbHZhbDsKKyAgICAKKyAgICBIYXNEZWNpbWFsID0gMDsKKyAgICBkZWNsZW4gPSAwOworICAg
IGV4cCA9IDA7CisJCisgICAgc3RyX2xlbj1sZW47CisgICAgaWYgKGNoID09ICcuJykgeworCQlz
dHJbbGVuKytdPWNoOworICAgICAgICBIYXNEZWNpbWFsID0gMTsKKyAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgZGVjbGVuKys7CisgICAg
ICAgICAgICAgICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0gJzAnKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0cltsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrO3N0cl9sZW4rKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRlBfQ09OU1Rf
VE9PX0xPTkciKTsKKyAgICAgICAgICAgICAgICBsZW4gPSAxLHN0cl9sZW49MTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cG9uZW50OgorCisgICAgaWYgKGNo
ID09ICdlJyB8fCBjaCA9PSAnRScpIHsKKyAgICAgICAgRXhwU2lnbiA9IDE7CisJCXN0cltsZW4r
K109Y2g7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAg
IHN0cltsZW4rK109Y2g7ICAKKwkJCWNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJy0nKSB7
CisgICAgICAgICAgICBFeHBTaWduID0gLTE7CisJCQlzdHJbbGVuKytdPWNoOworICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykgewor
ICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAg
ICAgICBleHAgPSBleHAqMTAgKyBjaCAtICcwJzsKKwkJCQlzdHJbbGVuKytdPWNoOworICAgICAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FUlJPUl9JTl9FWFBPTkVOVCIpOworICAgICAg
ICB9CisgICAgICAgIGV4cCAqPSBFeHBTaWduOworICAgIH0KKyAgICAgIAorICAgIGlmIChsZW4g
PT0gMCkgeworICAgICAgICBsdmFsID0gMC4wZjsKKwkJc3RyY3B5KHN0ciwiMC4wIik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RyW2xlbl09J1wwJzsgICAgICAKKyAgICAgICAgbHZhbCA9IGxC
dWlsZEZsb2F0VmFsdWUoc3RyLCBzdHJfbGVuLCBleHAgLSBkZWNsZW4pOworICAgIH0KKyAgICAv
LyBTdWZmaXg6CisgICAgCisgICAgeXlsdmFscHAtPnNjX2Z2YWwgPSBsdmFsOworICAgIHN0cmNw
eSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3RyKTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsgICAgICAgICAgICAKKyAgICBy
ZXR1cm4gQ1BQX0ZMT0FUQ09OU1RBTlQ7Cit9IC8vIGxGbG9hdENvbnN0CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLyBOb3JtYWwgU2Nhbm5lciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAK
K3N0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHAp
Cit7CisgICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07CisgICAg
Y2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07CisgICAgaW50IEFscmVhZHlDb21w
bGFpbmVkOworICAgIGludCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7CisKKyAgICBmb3IgKDs7KSB7
CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOworICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQkKKyAgICAgICAg
d2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdccicpIHsKKyAgICAgICAg
ICAgIHl5bHZhbHBwLT5zY19pbnQgPSAxOworICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorCQkK
KyAgICAgICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOwor
ICAgICAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Cisg
ICAgICAgIGxlbiA9IDA7CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgZGVmYXVsdDoK
KwkJCXJldHVybiBjaDsgLy8gU2luZ2xlIGNoYXJhY3RlciB0b2tlbgorICAgICAgICBjYXNlIEVP
RjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdD
JzogY2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICBjYXNlICdGJzogY2FzZSAnRyc6IGNhc2Ug
J0gnOiBjYXNlICdJJzogY2FzZSAnSic6CisgICAgICAgIGNhc2UgJ0snOiBjYXNlICdMJzogY2Fz
ZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKKyAgICAgICAgY2FzZSAnUCc6IGNhc2UgJ1EnOiBj
YXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgorICAgICAgICBjYXNlICdVJzogY2FzZSAnVic6
IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6CisgICAgICAgIGNhc2UgJ1onOiBjYXNlICdf
JzoKKyAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2Ug
J2UnOgorICAgICAgICBjYXNlICdmJzogY2FzZSAnZyc6IGNhc2UgJ2gnOiBjYXNlICdpJzogY2Fz
ZSAnaic6CisgICAgICAgIGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAnbSc6IGNhc2UgJ24nOiBj
YXNlICdvJzoKKyAgICAgICAgY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdyJzogY2FzZSAncyc6
IGNhc2UgJ3QnOgorICAgICAgICBjYXNlICd1JzogY2FzZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4
JzogY2FzZSAneSc6CisgICAgICAgIGNhc2UgJ3onOiAgICAgICAgICAgIAorICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CQkJCQkKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAgICAgICAgICAgICAgICAgIGNo
ID09ICdfJyk7CisgICAgICAgICAgICBpZiAobGVuID49IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisg
ICAgICAgICAgICAgICAgbGVuID0gTUFYX1NZTUJPTF9OQU1FX0xFTiAtIDE7CisgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3ltYm9sX25hbWUp
OworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVSOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOworICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwg
Y2ggPT0gJ1gnKSB7CisJCQkJeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAg
ICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKSB8fAorICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgfHwK
KyAgICAgICAgICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOworICAg
ICAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZG8geworCQkJ
CQkJeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl2YWwgPD0gMHgwZmZmZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlpID0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlpID0gY2ggLSAnQScgKyAxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ2En
ICsgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCA0KSB8IGlpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFscmVhZHlDb21w
bGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygiRVJST1JfX19IRVhfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRVJST1JfSU5fSEVY
X0NPTlNUQU5UIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQl5eWx2YWxwcC0+c2NfaW50
ID0gaXZhbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7IC8vIG9jdGFsIGludGVn
ZXIgY29uc3RhbnRzCisgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOworICAg
ICAgICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXZhbCA8PSAweDFmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpaSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgaXZhbCA9IChpdmFsIDw8
IDMpIHwgaWk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fT0NUX0NPTlNUX09WRVJGTE9XIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxl
IChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4n
IHx8IGNoID09ICdlJyB8fCBjaCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNo
ID09ICdFJykgCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgeXls
dmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJCXl5bHZhbHBwLT5z
Y19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworCQkJCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJCWNoID0gJzAnOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4uCisgICAgICAgIGNhc2UgJzEnOiBjYXNl
ICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNh
c2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB5
eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgIGxlbisr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7
CisgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAnZicgfHwg
Y2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGl2YWwgPSAwOwor
ICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAgICAgICAgICAgICAgICBm
b3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSB5
eWx2YWxwcC0+c3ltYm9sX25hbWVbaWldIC0gJzAnOworICAgICAgICAgICAgICAgICAgICBpZiAo
KGl2YWwgPiAyMTQ3NDgzNjQpIHx8IChpdmFsID09IDIxNDc0ODM2NCAmJiBjaCA+PSA4KSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0lOVEVHRVJfQ09O
U1RfT1ZFUkZMT1ciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVk
ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpdmFsID0g
aXZhbCoxMCArIGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAgICBpZihpdmFsPT0wKQorICAgICAgICAg
ICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIjAiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlm
IChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0RFQ19PUDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9TVUJfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAt
PmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJy0nOworICAgICAgICAgICAgfQorICAgICAgICBjYXNl
ICcrJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9JTkNfT1A7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
ID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQUREX0FTU0lHTjsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuICcrJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnKic6CisgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTVVMX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3Bw
LT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuICcqJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSAnJSc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfTU9EX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gJz4nKXsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX0JSQUNFOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJyUnOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICc6JzoKKyAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9SSUdIVF9CUkFDS0VUOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJzonOworICAgICAgICAgICAgfQorICAg
ICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJ14n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9YT1JfT1A7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfWE9SX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ14nOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgJz0nOgorICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX0VRX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJz0nOworICAgICAgICAgICAgfQorICAgICAgICBj
YXNlICchJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ORV9PUDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICchJzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYg
KGNoID09ICd8JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfT1JfT1A7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfT1JfQVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7Cisg
ICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAnfCc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcmJzoKKyAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9BTkRfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX0FTU0lHTjsK
KyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgICByZXR1cm4gJyYnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc8
JykgeworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYoY2ggPT0gJz0nKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQVNTSUdOOworICAgICAgICAgICAg
ICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX0xFRlRfT1A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfTEVfT1A7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09ICclJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTEVGVF9CUkFDRTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJzonKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0JSQUNLRVQ7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJ
bnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnPCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9SSUdIVF9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAg
ICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5
eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfT1A7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfR0VfT1A7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAnPic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAg
IHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIDAsICcuJywgeXlsdmFs
cHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4n
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gU3BlY2lhbCBFT0YgaGFjawor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gJy4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNo
ID09ICcvJykgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAnXG4nICYmIGNoICE9IEVPRik7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09IEVPRikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICAgICAgICAgIHJldHVybiAnXG4nOworICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBpbnQgbmxjb3VudCA9IDA7CisgICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
IChjaCAhPSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXG4nKSBu
bGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRU9GX0lO
X0NPTU1FTlQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdo
aWxlIChjaCAhPSAnLycpOworICAgICAgICAgICAgICAgIGlmIChubGNvdW50KSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnXG4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyBHbyB0cnkgaXQgYWdhaW4uLi4KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0g
Jz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ESVZfQVNTSUdOOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Jy8nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyIn
OgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHdoaWxlIChjaCAhPSAnIicgJiYgY2ggIT0g
J1xuJyAmJiBjaCAhPSBFT0YpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xcJykgewor
ICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhlIGxpbmUgY29udGludWF0
aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVuR0wgRVMgU2hhZGluZyBM
YW5ndWFnZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xFTikgeworICAgICAg
ICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAg
bGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9ICdcMCc7CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJyInKSB7CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9TVFJDT05TVEFOVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fQ1BQX0VPTF9JTl9TVFJJTkciKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRVJST1JfU1k7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9IC8vIGJ5dGVfc2NhbgorCitpbnQgeXlsZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNp
emUpCit7ICAgIAorCXl5c3R5cGVwcCB5eWx2YWxwcDsKKyAgICBpbnQgdG9rZW4gPSAnXG4nOyAg
IAorCisgICAgZm9yKDs7KSB7CisKKyAgICAgICAgY2hhciogdG9rZW5TdHJpbmcgPSAwOworICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCAm
eXlsdmFscHApOworCQlpZihjaGVja19FT0YodG9rZW4pKQorCQkgICAgcmV0dXJuIDA7CisgICAg
ICAgIGlmICh0b2tlbiA9PSAnIycpIHsKKyAgICAgICAgICAgIGlmIChjcHAtPnByZXZpb3VzX3Rv
a2VuID09ICdcbid8fCBjcHAtPnByZXZpb3VzX3Rva2VuID09IDApIHsKKwkJCSAgICB0b2tlbiA9
IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYoY2hlY2tfRU9GKHRv
a2VuKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCQkgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJw
cmVwcm9jZXNzb3IgY29tbWFuZCBtdXN0IG5vdCBiZSBwcmVjZWRlZCBieSBhbnkgb3RoZXIgc3Rh
dGVtZW50IGluIHRoYXQgbGluZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNwcC0+cHJldmlvdXNfdG9rZW4gPSB0b2tlbjsK
KyAgICAgICAgLy8gZXhwYW5kIG1hY3JvcworICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAuc2NfaWRlbnQsICZ5eWx2YWxwcCkpIHsKKyAg
ICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodG9rZW4gPT0gJ1xuJykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIAorICAgICAgICBpZiAodG9rZW4gPT0gQ1BQ
X0lERU5USUZJRVIpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjcHAtPnBhc3RGaXJz
dFN0YXRlbWVudCA9IDE7CisgICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09mQXRv
bShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOworICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09
IENQUF9GTE9BVENPTlNUQU5UfHx0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpeyAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsgICAgICAgICAgICAK
KyAgICAgICAgICAgIHRva2VuU3RyaW5nID0geXlsdmFscHAuc3ltYm9sX25hbWU7CisJCX0gZWxz
ZSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7
ICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09mQXRvbShh
dGFibGUsdG9rZW4pOworCSAgICB9CisKKyAgICAgICAgaWYgKHRva2VuU3RyaW5nKSB7CisgICAg
ICAgICAgICBpZiAoKHNpZ25lZClzdHJsZW4odG9rZW5TdHJpbmcpID49IG1heFNpemUpIHsKKyAg
ICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1heFNpemU7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgIGlmIChz
dHJsZW4odG9rZW5TdHJpbmcpID4gMCkgeworCQkJICAgIHN0cmNweShidWYsIHRva2VuU3RyaW5n
KTsKKyAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChpbnQpc3RybGVuKHRva2VuU3RyaW5nKTsKKyAgICAgICAgICAgIH0gIAor
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw
OworfSAvLyB5eWxleAorCisvL0NoZWNrcyBpZiB0aGUgdG9rZW4ganVzdCByZWFkIGlzIEVPRiBv
ciBub3QuCitpbnQgY2hlY2tfRU9GKGludCB0b2tlbikKK3sKKyAgIGlmKHRva2VuPT0tMSl7Cisg
ICAgICAgaWYoY3BwLT5pZmRlcHRoID4wKXsKKwkJQ1BQRXJyb3JUb0luZm9Mb2coIiNlbmRpZiBt
aXNzaW5nISEgQ29tcGlsYXRpb24gc3RvcHBlZCIpOworICAgICAgICBjcHAtPkNvbXBpbGVFcnJv
cj0xOworICAgICAgIH0KKyAgICAgIHJldHVybiAxOworICAgfQorICAgcmV0dXJuIDA7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHNjYW5uZXIuYyAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
CisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0
byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVk
aXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFu
Y2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1z
LCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlz
IE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRl
cm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNl
LCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3
YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBh
bmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9k
aWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0
IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFp
biB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9s
bG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMg
b2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNl
cnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBT
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5W
SURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhl
ciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkg
TlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCBy
aWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3Ig
Ynkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29y
cG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJ
QSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU
CitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S
IElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9O
IEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKwor
SU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS
RUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQg
T0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElP
TiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5E
RVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJ
Q1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisvLworLy8gc2Nhbm5lci5oCisvLworCisjaWYgIWRlZmluZWQoX19TQ0FOTkVSX0gpCisj
ZGVmaW5lIF9fU0NBTk5FUl9IIDEKKworI2RlZmluZSBNQVhfU1lNQk9MX05BTUVfTEVOIDEyOAor
I2RlZmluZSBNQVhfU1RSSU5HX0xFTiA1MTIKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wYXJzZXIuaCIKKworLy8gTm90IHJlYWxseSBhdG9tIHRhYmxlIHN0dWZmIGJ1dCBuZWVk
ZWQgZmlyc3QuLi4KKwordHlwZWRlZiBzdHJ1Y3QgU291cmNlTG9jX1JlYyB7CisgICAgdW5zaWdu
ZWQgc2hvcnQgZmlsZSwgbGluZTsKK30gU291cmNlTG9jOworCitpbnQgeXlwYXJzZSAodm9pZCk7
CisKK2ludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7CisKK3R5cGVkZWYgc3Ry
dWN0IElucHV0U3JjIHsKKyAgICBzdHJ1Y3QgSW5wdXRTcmMJKnByZXY7CisgICAgaW50CQkJKCpz
Y2FuKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopOworICAgIGludAkJCSgqZ2V0Y2gp
KHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7CisgICAgdm9pZAkJKCp1bmdldGNoKShz
dHJ1Y3QgSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKik7CisgICAgaW50CQkJbmFtZTsgIC8q
IGF0b20gKi8KKyAgICBpbnQJCQlsaW5lOworfSBJbnB1dFNyYzsKKworaW50IEluaXRTY2FubmVy
KENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKK2ludCBT
Y2FuRnJvbVN0cmluZyhjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBm
cm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAordm9pZCBDUFBFcnJvclRvSW5m
b0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIn
cy5JbmZvLmxvZwordm9pZCBTZXRMaW5lTnVtYmVyKGludCk7Cit2b2lkIFNldFN0cmluZ051bWJl
cihpbnQpOwordm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwordm9pZCBEZWNMaW5lTnVtYmVyKHZv
aWQpOworaW50IEZyZWVTY2FubmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgLy8gRnJlZSB0aGUg
Y3BwIHNjYW5uZXIKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19TQ0FOTkVSX0gpCisKSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEg
Q29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9u
IG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNl
IHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRv
IG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3Nv
ZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElB
IGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJ
RElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisi
TlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJp
YnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMs
IGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVk
aXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHly
aWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4
dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklE
SUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtz
IG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNl
cHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9y
IGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJl
aW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQg
bWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdv
cmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5v
IGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUg
SVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAor
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxP
TkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5U
IFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lE
RU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0Us
IFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitO
VklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBP
RiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElU
WSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8v
IHNsZ2xvYmFscy5oCisvLworCisjaWYgIWRlZmluZWQoX19TTEdMT0JBTFNfSCkKKyNkZWZpbmUg
X19TTEdMT0JBTFNfSCAxCisKK3R5cGVkZWYgc3RydWN0IENQUFN0cnVjdF9SZWMgQ1BQU3RydWN0
OworCitleHRlcm4gQ1BQU3RydWN0ICpjcHA7CisKKyN1bmRlZiAgQ1BQQ19ERUJVR19USEVfQ09N
UElMRVIKKyNpZiBkZWZpbmVkKF9ERUJVRykKKyNkZWZpbmUgQ1BQQ19ERUJVR19USEVfQ09NUElM
RVIgMQorI2VuZGlmCisKKyN1bmRlZiAgQ1BQQ19FTkFCTEVfVE9PTFMKKyNkZWZpbmUgQ1BQQ19F
TkFCTEVfVE9PTFMgMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCIKKyNpZiAhZGVmaW5lZChOT19QQVJTRVIpCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChOVUxMKQorI2RlZmluZSBOVUxMIDAKKyNlbmRpZgorCisjZW5kaWYgLy8gIShkZWZp
bmVkKF9fU0xHTE9CQUxTX0gpCisKKworICAgIAorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3N5bWJvbHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3N5bWJvbHMuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4OSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAy
MDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikg
c3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0
aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdh
cmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90
IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFs
LCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRo
aXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8g
dXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3
YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5h
cnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBT
b2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEs
IHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBh
bGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIg
dGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQor
Q29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVk
IGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3Ig
aW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QK
K2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlv
dXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJ
QSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQg
aGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBB
TiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VN
RU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBP
UgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBX
SVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJM
RSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQ
Uk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1Ig
QVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklD
QVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZF
UiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJ
RgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gc3ltYm9scy5jCisvLworCisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vIFN5bWJvbCBUYWJsZSBWYXJpYWJsZXM6IC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CitTY29wZSAqU2NvcGVMaXN0ID0gTlVMTDsKK1Njb3BlICpDdXJyZW50U2NvcGUgPSBOVUxMOwor
U2NvcGUgKkdsb2JhbFNjb3BlID0gTlVMTDsKKworc3RhdGljIHZvaWQgdW5saW5rU2NvcGUodm9p
ZCAqX3Njb3BlKSB7CisgICAgU2NvcGUgKnNjb3BlID0gX3Njb3BlOworCisgICAgaWYgKHNjb3Bl
LT5uZXh0KQorICAgICAgICBzY29wZS0+bmV4dC0+cHJldiA9IHNjb3BlLT5wcmV2OworICAgIGlm
IChzY29wZS0+cHJldikKKyAgICAgICAgc2NvcGUtPnByZXYtPm5leHQgPSBzY29wZS0+bmV4dDsK
KyAgICBlbHNlCisgICAgICAgIFNjb3BlTGlzdCA9IHNjb3BlLT5uZXh0OworfQorCisvKgorICog
TmV3U2NvcGUoKQorICoKKyAqLworU2NvcGUgKk5ld1Njb3BlSW5Qb29sKE1lbW9yeVBvb2wgKnBv
b2wpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAgIGxTY29wZSA9IG1lbV9BbGxvYyhwb29s
LCBzaXplb2YoU2NvcGUpKTsKKyAgICBsU2NvcGUtPnBvb2wgPSBwb29sOworICAgIGxTY29wZS0+
cGFyZW50ID0gTlVMTDsKKyAgICBsU2NvcGUtPmZ1blNjb3BlID0gTlVMTDsKKyAgICBsU2NvcGUt
PnN5bWJvbHMgPSBOVUxMOworICAgIAorICAgIGxTY29wZS0+bGV2ZWwgPSAwOworCisgICAgbFNj
b3BlLT5wcm9ncmFtcyA9IE5VTEw7CisgICAgaWYgKChsU2NvcGUtPm5leHQgPSBTY29wZUxpc3Qp
KQorICAgICAgICBTY29wZUxpc3QtPnByZXYgPSBsU2NvcGU7CisgICAgbFNjb3BlLT5wcmV2ID0g
MDsKKyAgICBTY29wZUxpc3QgPSBsU2NvcGU7CisgICAgbWVtX0FkZENsZWFudXAocG9vbCwgdW5s
aW5rU2NvcGUsIGxTY29wZSk7CisgICAgcmV0dXJuIGxTY29wZTsKK30gLy8gTmV3U2NvcGUKKwor
LyoKKyAqIFB1c2hTY29wZSgpCisgKgorICovCisKK3ZvaWQgUHVzaFNjb3BlKFNjb3BlICpmU2Nv
cGUpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAgIGlmIChDdXJyZW50U2NvcGUpIHsKKyAg
ICAgICAgZlNjb3BlLT5sZXZlbCA9IEN1cnJlbnRTY29wZS0+bGV2ZWwgKyAxOworICAgICAgICBp
ZiAoZlNjb3BlLT5sZXZlbCA9PSAxKSB7CisgICAgICAgICAgICBpZiAoIUdsb2JhbFNjb3BlKSB7
CisgICAgICAgICAgICAgICAgLyogSEFDSyAtIENURCAtLSBpZiBHbG9iYWxTY29wZT09TlVMTCBh
bmQgbGV2ZWw9PTEsIHdlJ3JlCisgICAgICAgICAgICAgICAgICogZGVmaW5pbmcgYSBmdW5jdGlv
biBpbiB0aGUgc3VwZXJnbG9iYWwgc2NvcGUuICBUaGluZ3MKKyAgICAgICAgICAgICAgICAgKiB3
aWxsIGJyZWFrIGlmIHdlIGxlYXZlIHRoZSBsZXZlbCBhcyAxLCBzbyB3ZSBhcmJpdHJhcmlseQor
ICAgICAgICAgICAgICAgICAqIHNldCBpdCB0byAyICovCisgICAgICAgICAgICAgICAgZlNjb3Bl
LT5sZXZlbCA9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZTY29w
ZS0+bGV2ZWwgPj0gMikgeworICAgICAgICAgICAgbFNjb3BlID0gZlNjb3BlOworICAgICAgICAg
ICAgd2hpbGUgKGxTY29wZS0+bGV2ZWwgPiAyKQorICAgICAgICAgICAgICAgIGxTY29wZSA9IGxT
Y29wZS0+bmV4dDsKKyAgICAgICAgICAgIGZTY29wZS0+ZnVuU2NvcGUgPSBsU2NvcGU7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmU2NvcGUtPmxldmVsID0gMDsKKyAgICB9Cisg
ICAgZlNjb3BlLT5wYXJlbnQgPSBDdXJyZW50U2NvcGU7CisgICAgQ3VycmVudFNjb3BlID0gZlNj
b3BlOworfSAvLyBQdXNoU2NvcGUKKworLyoKKyAqIFBvcFNjb3BlKCkKKyAqCisgKi8KKworU2Nv
cGUgKlBvcFNjb3BlKHZvaWQpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAgIGxTY29wZSA9
IEN1cnJlbnRTY29wZTsKKyAgICBpZiAoQ3VycmVudFNjb3BlKQorICAgICAgICBDdXJyZW50U2Nv
cGUgPSBDdXJyZW50U2NvcGUtPnBhcmVudDsKKyAgICByZXR1cm4gbFNjb3BlOworfSAvLyBQb3BT
Y29wZQorCisvKgorICogTmV3U3ltYm9sKCkgLSBBbGxvY2F0ZSBhIG5ldyBzeW1ib2wgbm9kZTsK
KyAqCisgKi8KKworU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2Nv
cGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpCit7CisgICAgU3ltYm9sICpsU3ltYjsKKyAg
ICBjaGFyICpwY2g7CisgICAgaW50IGlpOworCisgICAgbFN5bWIgPSAoU3ltYm9sICopIG1lbV9B
bGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKKyAgICBsU3ltYi0+bGVmdCA9IE5V
TEw7CisgICAgbFN5bWItPnJpZ2h0ID0gTlVMTDsKKyAgICBsU3ltYi0+bmV4dCA9IE5VTEw7Cisg
ICAgbFN5bWItPm5hbWUgPSBuYW1lOworICAgIGxTeW1iLT5sb2MgPSAqbG9jOworICAgIGxTeW1i
LT5raW5kID0ga2luZDsKKyAgICAKKyAgICAvLyBDbGVhciB1bmlvbiBhcmVhOgorCisgICAgcGNo
ID0gKGNoYXIgKikgJmxTeW1iLT5kZXRhaWxzOworICAgIGZvciAoaWkgPSAwOyBpaSA8IHNpemVv
ZihsU3ltYi0+ZGV0YWlscyk7IGlpKyspCisgICAgICAgICpwY2grKyA9IDA7CisgICAgcmV0dXJu
IGxTeW1iOworfSAvLyBOZXdTeW1ib2wKKworLyoKKyAqIGxBZGRUb1RyZWUoKSAtIFVzaW5nIGEg
YmluYXJ5IHRyZWUgaXMgbm90IGEgZ29vZCBpZGVhIGZvciBiYXNpYyBhdG9tIHZhbHVlcyBiZWNh
dXNlIHRoZXkKKyAqICAgICAgICAgYXJlIGdlbmVyYXRlZCBpbiBvcmRlci4gIFdlJ2xsIGZpeCB0
aGlzIGxhdGVyIChieSByZXZlcnNpbmcgdGhlIGJpdCBwYXR0ZXJuKS4KKyAqLworCitzdGF0aWMg
dm9pZCBsQWRkVG9UcmVlKFN5bWJvbCAqKmZTeW1ib2xzLCBTeW1ib2wgKmZTeW1iKQoreworICAg
IFN5bWJvbCAqbFN5bWI7CisgICAgaW50IGxyZXYsIGZyZXY7CisKKyAgICBsU3ltYiA9ICpmU3lt
Ym9sczsKKyAgICBpZiAobFN5bWIpIHsKKyAgICAgICAgZnJldiA9IEdldFJldmVyc2VkQXRvbShh
dGFibGUsIGZTeW1iLT5uYW1lKTsKKyAgICAgICAgd2hpbGUgKGxTeW1iKSB7CisgICAgICAgICAg
ICBscmV2ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgbFN5bWItPm5hbWUpOworICAgICAgICAg
ICAgaWYgKGxyZXYgPT0gZnJldikgeworICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJHZXRBdG9tU3RyaW5nKGF0YWJsZSwgZlN5bWItPm5hbWUpIik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChscmV2ID4g
ZnJldikgeworICAgICAgICAgICAgICAgICAgICBpZiAobFN5bWItPmxlZnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+bGVmdCA9IGZTeW1iOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAobFN5bWItPnJp
Z2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5yaWdodDsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1i
LT5yaWdodCA9IGZTeW1iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAqZlN5bWJvbHMgPSBmU3ltYjsKKyAgICB9Cit9IC8v
IGxBZGRUb1RyZWUKKworCisvKgorICogQWRkU3ltYm9sKCkgLSBBZGQgYSB2YXJpYWJsZSwgdHlw
ZSwgb3IgZnVuY3Rpb24gbmFtZSB0byBhIHNjb3BlLgorICoKKyAqLworCitTeW1ib2wgKkFkZFN5
bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQg
a2luZCkKK3sKKyAgICBTeW1ib2wgKmxTeW1iOworCisgICAgaWYgKCFmU2NvcGUpCisgICAgICAg
IGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBsU3ltYiA9IE5ld1N5bWJvbChsb2MsIGZTY29w
ZSwgYXRvbSwga2luZCk7CisgICAgbEFkZFRvVHJlZSgmZlNjb3BlLT5zeW1ib2xzLCBsU3ltYik7
CisgICAgcmV0dXJuIGxTeW1iOworfSAvLyBBZGRTeW1ib2wKKworCisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiBTeW1ib2wgU2VtYW50aWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBM
b29rVXBMb2NhbFN5bWJvbCgpCisgKgorICovCisKK1N5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2wo
U2NvcGUgKmZTY29wZSwgaW50IGF0b20pCit7CisgICAgU3ltYm9sICpsU3ltYjsKKyAgICBpbnQg
cm5hbWUsIHJhdG9tOworCisgICAgcmF0b20gPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBhdG9t
KTsKKyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOworICAg
IGxTeW1iID0gZlNjb3BlLT5zeW1ib2xzOworICAgIHdoaWxlIChsU3ltYikgeworICAgICAgICBy
bmFtZSA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKKyAgICAgICAgaWYg
KHJuYW1lID09IHJhdG9tKSB7CisgICAgICAgICAgICByZXR1cm4gbFN5bWI7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAocm5hbWUgPiByYXRvbSkgeworICAgICAgICAgICAgICAg
IGxTeW1iID0gbFN5bWItPmxlZnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGxTeW1iID0gbFN5bWItPnJpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBOVUxMOworfSAvLyBMb29rVXBMb2NhbFN5bWJvbAorCisvKgorICogTG9v
a1VwU3ltYm9sKCkKKyAqCisgKi8KKworU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29w
ZSwgaW50IGF0b20pCit7CisgICAgU3ltYm9sICpsU3ltYjsKKworICAgIGlmICghZlNjb3BlKQor
ICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7CisgICAgd2hpbGUgKGZTY29wZSkgeworICAg
ICAgICBsU3ltYiA9IExvb2tVcExvY2FsU3ltYm9sKGZTY29wZSwgYXRvbSk7CisgICAgICAgIGlm
IChsU3ltYikKKyAgICAgICAgICAgIHJldHVybiBsU3ltYjsKKyAgICAgICAgZlNjb3BlID0gZlNj
b3BlLT5wYXJlbnQ7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfSAvLyBMb29rVXBTeW1ib2wK
KwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitO
VklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91
IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVy
bXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJp
YnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9m
IHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxl
YXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklE
SUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFi
aWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywg
TlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5k
ZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAo
dGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJl
ZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5
b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhl
IGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRo
ZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNl
IG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEu
CitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmln
aHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJ
QSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRz
IHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90
aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0
ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09G
VFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM
SUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRI
RVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5P
IEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwK
K0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRI
RSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0Yg
VEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRI
RU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJ
QUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
Ly8KKy8vIHN5bWJvbHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fU1lNQk9MU19IKQorI2RlZmlu
ZSBfX1NZTUJPTFNfSCAxCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmgiCisKK3R5cGVkZWYgZW51bSBzeW1ib2xraW5kIHsKKyAgIE1BQ1JPX1MKK30gc3ltYm9sa2lu
ZDsKKworLy8gVHlwZWRlZnMgZm9yIHRoaW5ncyBkZWZpbmVkIGhlcmUgaW4gInN5bWJvbHMuaCI6
CisKK3R5cGVkZWYgc3RydWN0IFNjb3BlX1JlYyBTY29wZTsKK3R5cGVkZWYgc3RydWN0IFN5bWJv
bF9SZWMgU3ltYm9sOworCit0eXBlZGVmIHN0cnVjdCBTeW1ib2xMaXN0X1JlYyB7CisgICAgc3Ry
dWN0IFN5bWJvbExpc3RfUmVjICpuZXh0OworICAgIFN5bWJvbCAqc3ltYjsKK30gU3ltYm9sTGlz
dDsKKworc3RydWN0IFNjb3BlX1JlYyB7CisgICAgU2NvcGUgKm5leHQsICpwcmV2OyAgICAgLy8g
ZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBzY29wZXMKKyAgICBTY29wZSAqcGFyZW50OworICAg
IFNjb3BlICpmdW5TY29wZTsgICAgICAgIC8vIFBvaW50cyB0byBiYXNlIHNjb3BlIG9mIGVuY2xv
c2luZyBmdW5jdGlvbgorICAgIE1lbW9yeVBvb2wgKnBvb2w7ICAgICAgIC8vIHBvb2wgdXNlZCBm
b3IgYWxsb2NhdGlvbiBpbiB0aGlzIHNjb3BlCisgICAgU3ltYm9sICpzeW1ib2xzOworICAgIAor
CWludCBsZXZlbDsgICAgICAgICAgICAgIC8vIDAgPSBzdXBlciBnbG9iYWxzLCAxID0gZ2xvYmFs
cywgZXRjLgorCisgICAgLy8gT25seSB1c2VkIGF0IGdsb2JhbCBzY29wZSAobGV2ZWwgMSk6Cisg
ICAgU3ltYm9sTGlzdCAqcHJvZ3JhbXM7ICAgLy8gTGlzdCBvZiBwcm9ncmFtcyBmb3IgdGhpcyBj
b21waWxhdGlvbi4KK307CisKKworLy8gU3ltYm9sIHRhYmxlIGlzIGEgc2ltcGxlIGJpbmFyeSB0
cmVlLgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIiAgICAgICAgLy8g
dG8gZ2V0IE1hY3JvU3ltYm9sIGRlZgorCitzdHJ1Y3QgU3ltYm9sX1JlYyB7CisgICAgU3ltYm9s
ICpsZWZ0LCAqcmlnaHQ7CisgICAgU3ltYm9sICpuZXh0OworICAgIGludCBuYW1lOyAgICAgICAv
LyBOYW1lIGF0b20KKyAgICBTb3VyY2VMb2MgbG9jOworICAgIHN5bWJvbGtpbmQga2luZDsKKyAg
ICB1bmlvbiB7CisgICAgICAgIE1hY3JvU3ltYm9sIG1hYzsKKyAgICB9IGRldGFpbHM7Cit9Owor
CitleHRlcm4gU2NvcGUgKkN1cnJlbnRTY29wZTsKK2V4dGVybiBTY29wZSAqR2xvYmFsU2NvcGU7
CitleHRlcm4gU2NvcGUgKlNjb3BlTGlzdDsKKworU2NvcGUgKk5ld1Njb3BlSW5Qb29sKE1lbW9y
eVBvb2wgKik7CisjZGVmaW5lIE5ld1Njb3BlKCkgICAgICBOZXdTY29wZUluUG9vbChDdXJyZW50
U2NvcGUtPnBvb2wpCit2b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKTsKK1Njb3BlICpQb3BT
Y29wZSh2b2lkKTsKK1N5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNj
b3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKK1N5bWJvbCAqQWRkU3ltYm9sKFNvdXJj
ZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKK1N5
bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOworU3ltYm9s
ICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwordm9pZCBDUFBFcnJvclRv
SW5mb0xvZyhjaGFyICopOworCisKKyNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKKwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NDQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEg
Q29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9u
IG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNl
IHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRv
IG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3Nv
ZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElB
IGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJ
RElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisi
TlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJp
YnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMs
IGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVk
aXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHly
aWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4
dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklE
SUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtz
IG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNl
cHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9y
IGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJl
aW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQg
bWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdv
cmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5v
IGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUg
SVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAor
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxP
TkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5U
IFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lE
RU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0Us
IFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitO
VklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBP
RiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElU
WSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8v
IHRva2Vucy5jCisvLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBUb2tlbiBSZWNvcmRlciBhbmQgUGxheWJh
Y2s6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKworLyoKKyAqIGlkc3RyKCkKKyAqIENvcHkgYSBzdHJpbmcgdG8gYSBtYWxs
b2MnZWQgYmxvY2sgYW5kIGNvbnZlcnQgaXQgaW50byBzb21ldGhpbmcgc3VpdGFibGUKKyAqIGZv
ciBhbiBJRAorICoKKyAqLworCitzdGF0aWMgY2hhciAqaWRzdHIoY29uc3QgY2hhciAqZnN0ciwg
TWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIGNoYXIgKnN0ciwgKnQ7
CisgICAgY29uc3QgY2hhciAqZjsKKworICAgIGxlbiA9IHN0cmxlbihmc3RyKTsKKyAgICBpZiAo
IXBvb2wpCisgICAgICAgIHN0ciA9IChjaGFyICopIG1hbGxvYyhsZW4gKyAxKTsKKyAgICBlbHNl
CisgICAgICAgIHN0ciA9IChjaGFyICopIG1lbV9BbGxvYyhwb29sLCBsZW4gKyAxKTsKKyAgICAK
KyAgICBmb3IgKGY9ZnN0ciwgdD1zdHI7ICpmOyBmKyspIHsKKyAgICAgICAgaWYgKGlzYWxudW0o
KmYpKSAqdCsrID0gKmY7CisgICAgICAgIGVsc2UgaWYgKCpmID09ICcuJyB8fCAqZiA9PSAnLycp
ICp0KysgPSAnXyc7CisgICAgfQorICAgICp0ID0gMDsKKyAgICByZXR1cm4gc3RyOworfSAvLyBp
ZHN0cgorCisKKy8qCisgKiBsTmV3QmxvY2soKQorICoKKyAqLworCitzdGF0aWMgVG9rZW5CbG9j
ayAqbE5ld0Jsb2NrKFRva2VuU3RyZWFtICpmVG9rLCBNZW1vcnlQb29sICpwb29sKQoreworICAg
IFRva2VuQmxvY2sgKmxCbG9jazsKKworICAgIGlmICghcG9vbCkKKyAgICAgICAgbEJsb2NrID0g
KFRva2VuQmxvY2sgKikgbWFsbG9jKHNpemVvZihUb2tlbkJsb2NrKSArIDI1Nik7CisgICAgZWxz
ZQorICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9m
KFRva2VuQmxvY2spICsgMjU2KTsKKyAgICBsQmxvY2stPmNvdW50ID0gMDsKKyAgICBsQmxvY2st
PmN1cnJlbnQgPSAwOworICAgIGxCbG9jay0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIGxCbG9j
ayArIHNpemVvZihUb2tlbkJsb2NrKTsKKyAgICBsQmxvY2stPm1heCA9IDI1NjsKKyAgICBsQmxv
Y2stPm5leHQgPSBOVUxMOworICAgIGlmIChmVG9rLT5oZWFkKSB7CisgICAgICAgIGZUb2stPmN1
cnJlbnQtPm5leHQgPSBsQmxvY2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZlRvay0+aGVhZCA9
IGxCbG9jazsKKyAgICB9CisgICAgZlRvay0+Y3VycmVudCA9IGxCbG9jazsKKyAgICByZXR1cm4g
bEJsb2NrOworfSAvLyBsTmV3QmxvY2sKKworLyoKKyAqIGxBZGRCeXRlKCkKKyAqCisgKi8KKwor
c3RhdGljIHZvaWQgbEFkZEJ5dGUoVG9rZW5TdHJlYW0gKmZUb2ssIHVuc2lnbmVkIGNoYXIgZlZh
bCkKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7CisgICAgbEJsb2NrID0gZlRvay0+Y3VycmVu
dDsKKyAgICBpZiAobEJsb2NrLT5jb3VudCA+PSBsQmxvY2stPm1heCkKKyAgICAgICAgbEJsb2Nr
ID0gbE5ld0Jsb2NrKGZUb2ssIDApOworICAgIGxCbG9jay0+ZGF0YVtsQmxvY2stPmNvdW50Kytd
ID0gZlZhbDsKK30gLy8gbEFkZEJ5dGUKKworCisKKy8qCisgKiBsUmVhZEJ5dGUoKSAtIEdldCB0
aGUgbmV4dCBieXRlIGZyb20gYSBzdHJlYW0uCisgKgorICovCisKK3N0YXRpYyBpbnQgbFJlYWRC
eXRlKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIFRva2VuQmxvY2sgKmxCbG9jazsKKyAgICBp
bnQgbHZhbCA9IC0xOworCisgICAgbEJsb2NrID0gcFRvay0+Y3VycmVudDsKKyAgICBpZiAobEJs
b2NrKSB7CisgICAgICAgIGlmIChsQmxvY2stPmN1cnJlbnQgPj0gbEJsb2NrLT5jb3VudCkgewor
ICAgICAgICAgICAgbEJsb2NrID0gbEJsb2NrLT5uZXh0OworICAgICAgICAgICAgaWYgKGxCbG9j
aykKKyAgICAgICAgICAgICAgICBsQmxvY2stPmN1cnJlbnQgPSAwOworICAgICAgICAgICAgcFRv
ay0+Y3VycmVudCA9IGxCbG9jazsKKyAgICAgICAgfQorICAgICAgICBpZiAobEJsb2NrKQorICAg
ICAgICAgICAgbHZhbCA9IGxCbG9jay0+ZGF0YVtsQmxvY2stPmN1cnJlbnQrK107CisgICAgfQor
ICAgIHJldHVybiBsdmFsOworfSAvLyBsUmVhZEJ5dGUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIEdsb2JhbCBGdW5jdGlvbnM6Ly8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIE5ld1Rva2VuU3RyZWFtKCkKKyAqCisgKi8KKwor
VG9rZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wg
KnBvb2wpCit7CisgICAgVG9rZW5TdHJlYW0gKnBUb2s7CisKKyAgICBpZiAoIXBvb2wpCisgICAg
ICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0gKikgbWFsbG9jKHNpemVvZihUb2tlblN0cmVhbSkpOwor
ICAgIGVsc2UKKyAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSopbWVtX0FsbG9jKHBvb2wsIHNp
emVvZihUb2tlblN0cmVhbSkpOworICAgIHBUb2stPm5leHQgPSBOVUxMOworICAgIHBUb2stPm5h
bWUgPSBpZHN0cihuYW1lLCBwb29sKTsKKyAgICBwVG9rLT5oZWFkID0gTlVMTDsKKyAgICBwVG9r
LT5jdXJyZW50ID0gTlVMTDsKKyAgICBsTmV3QmxvY2socFRvaywgcG9vbCk7CisgICAgcmV0dXJu
IHBUb2s7Cit9IC8vIE5ld1Rva2VuU3RyZWFtCisKKy8qCisgKiBEZWxldGVUb2tlblN0cmVhbSgp
CisgKgorICovCisKK3ZvaWQgRGVsZXRlVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spCit7
CisgICAgVG9rZW5CbG9jayAqcEJsb2NrLCAqbkJsb2NrOworCisgICAgaWYgKHBUb2spIHsKKyAg
ICAgICAgcEJsb2NrID0gcFRvay0+aGVhZDsKKyAgICAgICAgd2hpbGUgKHBCbG9jaykgeworICAg
ICAgICAgICAgbkJsb2NrID0gcEJsb2NrLT5uZXh0OworICAgICAgICAgICAgZnJlZShwQmxvY2sp
OworICAgICAgICAgICAgcEJsb2NrID0gbkJsb2NrOworICAgICAgICB9CisgICAgICAgIGlmIChw
VG9rLT5uYW1lKQorICAgICAgICAgICAgZnJlZShwVG9rLT5uYW1lKTsKKyAgICAgICAgZnJlZShw
VG9rKTsKKyAgICB9Cit9IC8vIERlbGV0ZVRva2VuU3RyZWFtCisKKy8qCisgKiBSZWNvcmRUb2tl
bigpIC0gQWRkIGEgdG9rZW4gdG8gdGhlIGVuZCBvZiBhIGxpc3QgZm9yIGxhdGVyIHBsYXliYWNr
IG9yIHByaW50b3V0LgorICoKKyAqLworCit2b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpw
VG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGNvbnN0IGNoYXIg
KnM7CisgICAgdW5zaWduZWQgY2hhciAqc3RyPU5VTEw7CisKKyAgICBpZiAodG9rZW4gPiAyNTYp
CisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSgodG9rZW4gJiAweDdmKSAr
IDB4ODApKTsKKyAgICBlbHNlCisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFy
KSh0b2tlbiAmIDB4N2YpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgY2FzZSBDUFBfSURF
TlRJRklFUjoKKyAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAgICBjYXNlIENQUF9TVFJD
T05TVEFOVDoKKyAgICAgICAgcyA9IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpOworICAgICAgICB3aGlsZSAoKnMpCisgICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCAo
dW5zaWduZWQgY2hhcikgKnMrKyk7CisgICAgICAgIGxBZGRCeXRlKHBUb2ssIDApOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAgIGNhc2UgQ1BQX0lOVENP
TlNUQU5UOgorICAgICAgICAgc3RyPXl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKKyAgICAgICAgIHdo
aWxlICgqc3RyKXsKKyAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssKHVuc2lnbmVkIGNoYXIpICpz
dHIpOworICAgICAgICAgICAgKnN0cisrOworICAgICAgICAgfQorICAgICAgICAgbEFkZEJ5dGUo
cFRvaywgMCk7CisgICAgICAgICBicmVhazsKKyAgICBjYXNlICcoJzoKKyAgICAgICAgbEFkZEJ5
dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHl5bHZhbHBwLT5zY19pbnQgPyAxIDogMCkpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30gLy8gUmVjb3JkVG9rZW4KKworLyoK
KyAqIFJld2luZFRva2VuU3RyZWFtKCkgLSBSZXNldCBhIHRva2VuIHN0cmVhbSBpbiBwcmVwZXJh
dGlvbiBmb3IgcmVhZGluZy4KKyAqCisgKi8KKwordm9pZCBSZXdpbmRUb2tlblN0cmVhbShUb2tl
blN0cmVhbSAqcFRvaykKK3sKKyAgICBpZiAocFRvay0+aGVhZCkgeworICAgICAgICBwVG9rLT5j
dXJyZW50ID0gcFRvay0+aGVhZDsKKyAgICAgICAgcFRvay0+Y3VycmVudC0+Y3VycmVudCA9IDA7
CisgICAgfQorfSAvLyBSZXdpbmRUb2tlblN0cmVhbQorCisvKgorICogUmVhZFRva2VuKCkgLSBS
ZWFkIHRoZSBuZXh0IHRva2VuIGZyb20gYSBzdHJlYW0uCisgKgorICovCisKK2ludCBSZWFkVG9r
ZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGNoYXIg
c3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiArIDFdOworICAgIGNoYXIgc3RyaW5nX3Zh
bFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGludCBsdG9rZW4sIGxlbjsKKyAgICBjaGFyIGNo
OworCisgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOworICAgIGlmIChsdG9rZW4gPj0gMCkg
eworICAgICAgICBpZiAobHRva2VuID4gMTI3KQorICAgICAgICAgICAgbHRva2VuICs9IDEyODsK
KyAgICAgICAgc3dpdGNoIChsdG9rZW4pIHsKKyAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoK
KyAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgICAgICAgICBsZW4gPSAwOwor
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICB3aGlsZSAoKGNo
ID49ICdhJyAmJiBjaCA8PSAneicpIHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0En
ICYmIGNoIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ18nKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bl0gPSAnXDAnOworICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOworICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3ltYm9sX25hbWUp
OworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVSOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAgICAgICAgICAgbGVuID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlICgoY2ggPSBsUmVhZEJ5dGUocFRvaykpICE9IDApCisgICAgICAgICAg
ICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdfTEVOKQorICAgICAgICAgICAgICAgICAgICBzdHJp
bmdfdmFsW2xlbisrXSA9IGNoOworICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gMDsKKyAg
ICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN0
cmluZ192YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09O
U1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUo
cFRvayk7CisgICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpfHwoY2g9
PSdlJ3x8Y2g9PSdFJ3x8Y2g9PScuJyl8fChjaD09JysnfHxjaD09Jy0nKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAg
ICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xfbmFtZVts
ZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKKyAgICAgICAgICAg
IHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOworICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2Z2YWw9KGZsb2F0KWF0b2YoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKKyAgICAgICAg
ICAgIGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAg
ICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4r
KzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdc
MCc7CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAgICAgICAgICBzdHJjcHko
eXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBw
LT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFk
Qnl0ZShwVG9rKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBsdG9rZW47CisgICAgfQorICAgIHJldHVybiBFT0ZfU1k7Cit9IC8vIFJlYWRUb2tlbgorCit0
eXBlZGVmIHN0cnVjdCBUb2tlbklucHV0U3JjIHsKKyAgICBJbnB1dFNyYyAgICAgICAgICAgIGJh
c2U7CisgICAgVG9rZW5TdHJlYW0gICAgICAgICAqdG9rZW5zOworICAgIGludCAgICAgICAgICAg
ICAgICAgKCpmaW5hbCkoQ1BQU3RydWN0ICopOworfSBUb2tlbklucHV0U3JjOworCitzdGF0aWMg
aW50IHNjYW5fdG9rZW4oVG9rZW5JbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQor
eworICAgIGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+dG9rZW5zLCB5eWx2YWxwcCk7CisgICAg
aW50ICgqZmluYWwpKENQUFN0cnVjdCAqKTsKKyAgICBjcHAtPnRva2VuTG9jLT5maWxlID0gY3Bw
LT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAgY3BwLT50b2tlbkxvYy0+bGluZSA9IGNwcC0+Y3Vy
cmVudElucHV0LT5saW5lOworICAgIGlmICh0b2tlbiA9PSAnXG4nKSB7CisgICAgICAgIGluLT5i
YXNlLmxpbmUrKzsKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH0KKyAgICBpZiAodG9rZW4g
PiAwKSByZXR1cm4gdG9rZW47CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2
OworICAgIGZpbmFsID0gaW4tPmZpbmFsOworICAgIGZyZWUoaW4pOworICAgIGlmIChmaW5hbCAm
JiAhZmluYWwoY3BwKSkgcmV0dXJuIC0xOworICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworfQorCitpbnQgUmVhZEZyb21Ub2tl
blN0cmVhbShUb2tlblN0cmVhbSAqdHMsIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0
ICopKQoreworICAgIFRva2VuSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVvZihUb2tlbklucHV0
U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoVG9rZW5JbnB1dFNyYykpOworICAgIGlu
LT5iYXNlLm5hbWUgPSBuYW1lOworICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1
dDsKKyAgICBpbi0+YmFzZS5zY2FuID0gKGludCAoKikoSW5wdXRTcmMgKiwgeXlzdHlwZXBwICop
KXNjYW5fdG9rZW47CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPnRva2VucyA9IHRz
OworICAgIGluLT5maW5hbCA9IGZpbmFsOworICAgIFJld2luZFRva2VuU3RyZWFtKHRzKTsKKyAg
ICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsKKyAgICByZXR1cm4gMTsKK30KKwordHlw
ZWRlZiBzdHJ1Y3QgVW5nb3RUb2tlbiB7CisgICAgSW5wdXRTcmMgICAgYmFzZTsKKyAgICBpbnQg
ICAgICAgICB0b2tlbjsKKyAgICB5eXN0eXBlcHAgICAgIGx2YWw7Cit9IFVuZ290VG9rZW47CisK
K3N0YXRpYyBpbnQgcmVnZXRfdG9rZW4oVW5nb3RUb2tlbiAqdCwgeXlzdHlwZXBwICogeXlsdmFs
cHApCit7CisgICAgaW50IHRva2VuID0gdC0+dG9rZW47CisgICAgKnl5bHZhbHBwID0gdC0+bHZh
bDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IHQtPmJhc2UucHJldjsKKyAgICBmcmVlKHQpOwor
ICAgIHJldHVybiB0b2tlbjsKK30KKwordm9pZCBVbmdldFRva2VuKGludCB0b2tlbiwgeXlzdHlw
ZXBwICogeXlsdmFscHApIHsKKyAgICBVbmdvdFRva2VuICp0ID0gbWFsbG9jKHNpemVvZihVbmdv
dFRva2VuKSk7CisgICAgbWVtc2V0KHQsIDAsIHNpemVvZihVbmdvdFRva2VuKSk7CisgICAgdC0+
dG9rZW4gPSB0b2tlbjsKKyAgICB0LT5sdmFsID0gKnl5bHZhbHBwOworICAgIHQtPmJhc2Uuc2Nh
biA9ICh2b2lkICopcmVnZXRfdG9rZW47CisgICAgdC0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50
SW5wdXQ7CisgICAgdC0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAg
dC0+YmFzZS5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgY3BwLT5jdXJyZW50
SW5wdXQgPSAmdC0+YmFzZTsKK30KKworCit2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwg
VG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IHRva2VuOwor
ICAgIGNoYXIgc3RyWzEwMF07CisKKyAgICBpZiAoZnAgPT0gMCkgZnAgPSBzdGRvdXQ7CisgICAg
UmV3aW5kVG9rZW5TdHJlYW0ocyk7CisgICAgd2hpbGUgKCh0b2tlbiA9IFJlYWRUb2tlbihzLCB5
eWx2YWxwcCkpID4gMCkgeworICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2Ug
Q1BQX0lERU5USUZJRVI6CisgICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgorICAgICAg
ICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAt
PnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfU1RSQ09O
U1RBTlQ6CisgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmco
YXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIs
IHl5bHZhbHBwLT5zY19mdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQ
UF9JTlRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlZCAiLCB5eWx2YWxwcC0+c2Nf
aW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aWYgKHRva2VuID49IDEyNykKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdl
dEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOworICAgIH0KK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgdG9rZW5zLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBD
b3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2Nv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
IHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24g
b2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2Ug
dGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8g
bm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29m
dHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkg
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEg
Z3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklE
SUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJO
VklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmli
dXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg
aW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRp
c3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJp
Z2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0
IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJ
QSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mg
bm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2Vw
dCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3Ig
bGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVp
biwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBt
YXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29y
a3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8g
aGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJ
UyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJ
TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
VElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9O
RSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQg
U0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURF
TlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwg
UkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05W
SURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9G
IENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZ
IE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8g
dG9rZW5zLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1RPS0VOU19IKQorI2RlZmluZSBfX1RPS0VO
U19IIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKworI2Rl
ZmluZSBFT0ZfU1kgKC0xKQorCit0eXBlZGVmIHN0cnVjdCBUb2tlbkJsb2NrX1JlYyBUb2tlbkJs
b2NrOworCit0eXBlZGVmIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgeworICAgIHN0cnVjdCBUb2tl
blN0cmVhbV9SZWMgKm5leHQ7CisgICAgY2hhciAqbmFtZTsKKyAgICBUb2tlbkJsb2NrICpoZWFk
OworICAgIFRva2VuQmxvY2sgKmN1cnJlbnQ7Cit9IFRva2VuU3RyZWFtOworCitzdHJ1Y3QgVG9r
ZW5CbG9ja19SZWMgeworICAgIFRva2VuQmxvY2sgKm5leHQ7CisgICAgaW50IGN1cnJlbnQ7Cisg
ICAgaW50IGNvdW50OworICAgIGludCBtYXg7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKK307
CisKK2V4dGVybiBUb2tlblN0cmVhbSBzdGRsaWJfY3BwX3N0cmVhbTsKKworCitUb2tlblN0cmVh
bSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCk7Cit2
b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsgCit2b2lkIFJlY29yZFRv
a2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsK
K3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOworaW50IFJlYWRUb2tl
bihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApOworaW50IFJlYWRGcm9t
VG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2ssIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQ
U3RydWN0ICopKTsKK3ZvaWQgVW5nZXRUb2tlbihpbnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsK
KworI2lmIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCisKK3ZvaWQgRHVtcFRva2VuU3RyZWFt
KEZJTEUgKiwgVG9rZW5TdHJlYW0gKiwgeXlzdHlwZXBwICogeXlsdmFscHApOworCisjZW5kaWYg
Ly8gZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKKworI2VuZGlmIC8vICFkZWZpbmVkKF9fVE9L
RU5TX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29scy9DT1BZSU5HLmJpc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UN
CisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0KKw0KKyBDb3B5cmlnaHQgKEMpIDE5ODks
IDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQQ0KKyBFdmVyeW9u
ZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMNCisg
b2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQu
DQorDQorCQkJICAgIFByZWFtYmxlDQorDQorICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdh
cmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyDQorZnJlZWRvbSB0byBzaGFyZSBhbmQg
Y2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCitMaWNlbnNl
IGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5n
ZSBmcmVlDQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3Ig
YWxsIGl0cyB1c2Vycy4gIFRoaXMNCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8g
bW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQ0KK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8g
YW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8NCit1c2luZyBpdC4gIChT
b21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5
DQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3Ug
Y2FuIGFwcGx5IGl0IHRvDQoreW91ciBwcm9ncmFtcywgdG9vLg0KKw0KKyAgV2hlbiB3ZSBzcGVh
ayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdA0KK3By
aWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1
cmUgdGhhdCB5b3UNCitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZy
ZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yDQordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwg
dGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0DQoraWYgeW91IHdhbnQg
aXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQN
CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVz
ZSB0aGluZ3MuDQorDQorICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2Ug
cmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkDQorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0
cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLg0KK1RoZXNlIHJlc3RyaWN0
aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91
DQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0
Lg0KKw0KKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEg
cHJvZ3JhbSwgd2hldGhlcg0KK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhl
IHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdA0KK3lvdSBoYXZlLiAgWW91IG11c3QgbWFr
ZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlDQorc291cmNlIGNv
ZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVp
cg0KK3JpZ2h0cy4NCisNCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6
ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQNCisoMikgb2ZmZXIgeW91IHRoaXMgbGlj
ZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LA0KK2Rpc3RyaWJ1
dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuDQorDQorICBBbHNvLCBmb3IgZWFjaCBhdXRo
b3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbg0KK3RoYXQg
ZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBm
cmVlDQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBl
bHNlIGFuZCBwYXNzZWQgb24sIHdlDQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQg
d2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28NCit0aGF0IGFueSBwcm9ibGVt
cyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbA0K
K2F1dGhvcnMnIHJlcHV0YXRpb25zLg0KKw0KKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBp
cyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUNCitwYXRlbnRzLiAgV2Ugd2lzaCB0
byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlDQorcHJvZ3Jh
bSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFr
aW5nIHRoZQ0KK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUg
bWFkZSBpdCBjbGVhciB0aGF0IGFueQ0KK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVy
eW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuDQorDQorICBUaGUgcHJlY2lz
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZA0KK21v
ZGlmaWNhdGlvbiBmb2xsb3cuDQorDA0KKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNF
DQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQg
TU9ESUZJQ0FUSU9ODQorDQorICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3Jh
bSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zDQorYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBj
b3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQNCit1bmRlciB0aGUg
dGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVs
b3csDQorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFz
ZWQgb24gdGhlIFByb2dyYW0iDQorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJp
dmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoNCit0aGF0IGlzIHRvIHNheSwgYSB3b3Jr
IGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LA0KK2VpdGhlciB2ZXJi
YXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVy
DQorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhv
dXQgbGltaXRhdGlvbiBpbg0KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5z
ZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLg0KKw0KK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5
aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90DQorY292ZXJlZCBieSB0
aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZg0KK3J1
bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20g
dGhlIFByb2dyYW0NCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUg
YSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVu
IG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuDQorV2hldGhlciB0aGF0IGlzIHRydWUgZGVw
ZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuDQorDQorICAxLiBZb3UgbWF5IGNvcHkgYW5k
IGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MNCitzb3VyY2UgY29k
ZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UNCitj
b25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFw
cHJvcHJpYXRlDQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsg
a2VlcCBpbnRhY3QgYWxsIHRoZQ0KK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2Ug
YW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsNCithbmQgZ2l2ZSBhbnkgb3RoZXIg
cmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlDQorYWxvbmcg
d2l0aCB0aGUgUHJvZ3JhbS4NCisNCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNp
Y2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQNCit5b3UgbWF5IGF0IHlvdXIgb3B0
aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLg0KKw0K
KyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBv
ciBhbnkgcG9ydGlvbg0KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQ
cm9ncmFtLCBhbmQgY29weSBhbmQNCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3
b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDENCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5
b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOg0KKw0KKyAgICBhKSBZb3UgbXVz
dCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMNCisg
ICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55
IGNoYW5nZS4NCisNCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlz
dHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluDQorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFp
bnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQ0KKyAgICBwYXJ0IHRoZXJl
b2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZA0K
KyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQorDQorICAgIGMp
IElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0
aXZlbHkNCisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVu
bmluZyBmb3Igc3VjaA0KKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkg
d2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuDQorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcg
YW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQ0KKyAgICBub3RpY2UgdGhhdCB0
aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUNCisg
ICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3Jh
bSB1bmRlcg0KKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cg
dG8gdmlldyBhIGNvcHkgb2YgdGhpcw0KKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhl
IFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dA0KKyAgICBkb2VzIG5vdCBub3JtYWxs
eSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uDQorICAgIHRo
ZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQ0KKwwN
CitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9s
ZS4gIElmDQoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2
ZWQgZnJvbSB0aGUgUHJvZ3JhbSwNCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBp
bmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4NCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMg
TGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlDQorc2VjdGlvbnMg
d2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91
DQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2gg
aXMgYSB3b3JrIGJhc2VkDQorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhl
IHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mDQordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJt
aXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUNCitlbnRpcmUgd2hvbGUs
IGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUg
aXQuDQorDQorVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNs
YWltIHJpZ2h0cyBvciBjb250ZXN0DQoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGly
ZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvDQorZXhlcmNpc2UgdGhlIHJpZ2h0
IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yDQorY29sbGVjdGl2
ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4NCisNCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dy
ZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtDQord2l0aCB0
aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9s
dW1lIG9mDQorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcg
dGhlIG90aGVyIHdvcmsgdW5kZXINCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAg
My4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFz
ZWQgb24gaXQsDQordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxl
IGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mDQorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRl
ZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOg0KKw0KKyAgICBhKSBBY2Nv
bXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxl
DQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0
ZXJtcyBvZiBTZWN0aW9ucw0KKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFy
aWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwNCisNCisgICAgYikgQWNjb21w
YW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUNCisg
ICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0
aGFuIHlvdXINCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3Ry
aWJ1dGlvbiwgYSBjb21wbGV0ZQ0KKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtDQorICAgIGN1c3Rv
bWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwNCisNCisgICAgYykgQWNj
b21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2Zm
ZXINCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMg
YWx0ZXJuYXRpdmUgaXMNCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3Ry
aWJ1dGlvbiBhbmQgb25seSBpZiB5b3UNCisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2Jq
ZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaA0KKyAgICBhbiBvZmZlciwgaW4g
YWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikNCisNCitUaGUgc291cmNlIGNvZGUgZm9y
IGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yDQorbWFraW5n
IG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBz
b3VyY2UNCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0
IGNvbnRhaW5zLCBwbHVzIGFueQ0KK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmls
ZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bw0KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGlu
c3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGENCitzcGVjaWFsIGV4
Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUNCith
bnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9y
IGJpbmFyeQ0KK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJu
ZWwsIGFuZCBzbyBvbikgb2YgdGhlDQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhl
Y3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQNCitpdHNlbGYgYWNjb21wYW5pZXMg
dGhlIGV4ZWN1dGFibGUuDQorDQorSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2Jq
ZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZw0KK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNp
Z25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQNCithY2Nlc3MgdG8gY29weSB0
aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMNCitkaXN0cmlidXRp
b24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QN
Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2Rl
Lg0KKwwNCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlz
dHJpYnV0ZSB0aGUgUHJvZ3JhbQ0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIg
dGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQNCitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBz
dWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMNCit2b2lkLCBhbmQgd2lsbCBh
dXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuDQor
SG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJv
bSB5b3UgdW5kZXINCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0
ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaA0KK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxp
YW5jZS4NCisNCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vu
c2UsIHNpbmNlIHlvdSBoYXZlIG5vdA0KK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxz
ZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yDQorZGlzdHJpYnV0ZSB0aGUgUHJv
Z3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlDQorcHJvaGli
aXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3Jl
LCBieQ0KK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3Jr
IGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9m
IHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kDQorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9u
cyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZw0KK3RoZSBQcm9ncmFtIG9y
IHdvcmtzIGJhc2VkIG9uIGl0Lg0KKw0KKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUg
dGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0pLCB0aGUgcmVj
aXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlDQorb3JpZ2lu
YWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3Vi
amVjdCB0bw0KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3Nl
IGFueSBmdXJ0aGVyDQorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBv
ZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLg0KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZv
ciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvDQordGhpcyBMaWNlbnNl
Lg0KKw0KKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBh
bGxlZ2F0aW9uIG9mIHBhdGVudA0KK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNv
biAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksDQorY29uZGl0aW9ucyBhcmUgaW1wb3Nl
ZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcg0KK290aGVyd2lz
ZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBk
byBub3QNCitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAg
SWYgeW91IGNhbm5vdA0KK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNs
eSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMNCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVy
dGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91DQorbWF5IG5vdCBk
aXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudA0K
K2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2Yg
dGhlIFByb2dyYW0gYnkNCithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9y
IGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4NCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNh
dGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvDQorcmVmcmFpbiBlbnRp
cmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4NCisNCitJZiBhbnkgcG9ydGlv
biBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIN
CithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9u
IGlzIGludGVuZGVkIHRvDQorYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50
ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXINCitjaXJjdW1zdGFuY2VzLg0KKw0KK0l0IGlzIG5vdCB0
aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkN
CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZh
bGlkaXR5IG9mIGFueQ0KK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1
cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUNCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUg
ZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMNCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGlj
ZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUNCitnZW5lcm91cyBjb250cmli
dXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkDQordGhyb3Vn
aCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRo
YXQNCitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhl
IG9yIHNoZSBpcyB3aWxsaW5nDQordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBv
dGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90DQoraW1wb3NlIHRoYXQgY2hvaWNlLg0K
Kw0KK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hh
dCBpcyBiZWxpZXZlZCB0bw0KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBM
aWNlbnNlLg0KKwwNCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUg
UHJvZ3JhbSBpcyByZXN0cmljdGVkIGluDQorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBh
dGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlDQorb3JpZ2luYWwgY29weXJp
Z2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQ0KK21h
eSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4
Y2x1ZGluZw0KK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0
dGVkIG9ubHkgaW4gb3IgYW1vbmcNCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBz
dWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMNCit0aGUgbGltaXRhdGlvbiBhcyBp
ZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4NCisNCisgIDkuIFRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNp
b25zDQorb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBT
dWNoIG5ldyB2ZXJzaW9ucyB3aWxsDQorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNl
bnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvDQorYWRkcmVzcyBuZXcgcHJv
YmxlbXMgb3IgY29uY2VybnMuDQorDQorRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vp
c2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQ0KK3NwZWNpZmllcyBhIHZlcnNp
b24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55DQor
bGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJt
cyBhbmQgY29uZGl0aW9ucw0KK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVy
IHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElm
IHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZg0KK3RoaXMg
TGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uLg0KKw0KKyAgMTAuIElmIHlvdSB3aXNoIHRvIGlu
Y29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQ0KK3Byb2dyYW1z
IHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRo
ZSBhdXRob3INCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMg
Y29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMNCittYWtlIGV4Y2VwdGlv
bnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fs
cw0KK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBv
dXIgZnJlZSBzb2Z0d2FyZSBhbmQNCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNl
IG9mIHNvZnR3YXJlIGdlbmVyYWxseS4NCisNCisJCQkgICAgTk8gV0FSUkFOVFkNCisNCisgIDEx
LiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJ
UyBOTyBXQVJSQU5UWQ0KK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQg
QlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTg0KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJ
VElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMNCitQUk9WSURF
IFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1NFRA0KK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUw0KK1RPIFRIRSBRVUFM
SVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBU
SEUNCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwg
TkVDRVNTQVJZIFNFUlZJQ0lORywNCitSRVBBSVIgT1IgQ09SUkVDVElPTi4NCisNCisgIDEyLiBJ
TiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRP
IElOIFdSSVRJTkcNCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFS
VFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SDQorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBF
Uk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywNCitJTkNMVURJTkcg
QU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IEFSSVNJTkcNCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFN
IChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEDQorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJ
TkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZDQorWU9VIE9SIFRI
SVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBB
TlkgT1RIRVINCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkg
SEFTIEJFRU4gQURWSVNFRCBPRiBUSEUNCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuDQor
DQorCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUw0KKwwNCisJQXBwZW5kaXg6IEhv
dyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcw0KKw0KKyAgSWYgeW91
IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVh
dGVzdA0KK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2
ZSB0aGlzIGlzIHRvIG1ha2UgaXQNCitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiBy
ZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4NCisNCisgIFRvIGRvIHNv
LCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2Fm
ZXN0DQordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8g
bW9zdCBlZmZlY3RpdmVseQ0KK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQg
ZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0DQordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5k
IGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuDQorDQorICAgIDxv
bmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdo
YXQgaXQgZG9lcy4+DQorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5hbWUgb2YgYXV0aG9yPg0K
Kw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAg
ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyAgICBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAgICBGb3VuZGF0aW9u
LCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4NCisNCitBbHNv
IGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQg
cGFwZXIgbWFpbC4NCisNCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBv
dXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzDQord2hlbiBpdCBzdGFydHMgaW4gYW4gaW50
ZXJhY3RpdmUgbW9kZToNCisNCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0
IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yDQorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJT
T0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4NCisgICAgVGhp
cyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBp
dA0KKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFp
bHMuDQorDQorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycg
c2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlDQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQ0KK2JlIGNhbGxl
ZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQg
ZXZlbiBiZQ0KK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3Vy
IHByb2dyYW0uDQorDQorWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ug
d29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXINCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBh
ICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZg0KK25lY2Vzc2FyeS4g
IEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoNCisNCisgIFlveW9keW5lLCBJbmMu
LCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0N
CisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0
ZW4gYnkgSmFtZXMgSGFja2VyLg0KKw0KKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJp
bCAxOTg5DQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQ0KKw0KK1RoaXMgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0g
aW50bw0KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91
dGluZSBsaWJyYXJ5LCB5b3UgbWF5DQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0
IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlDQorbGlicmFyeS4gIElm
IHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
DQorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuDQpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAor
RmxleCBjYXJyaWVzIHRoZSBjb3B5cmlnaHQgdXNlZCBmb3IgQlNEIHNvZnR3YXJlLCBzbGlnaHRs
eSBtb2RpZmllZA0KK2JlY2F1c2UgaXQgb3JpZ2luYXRlZCBhdCB0aGUgTGF3cmVuY2UgQmVya2Vs
ZXkgKG5vdCBMaXZlcm1vcmUhKSBMYWJvcmF0b3J5LA0KK3doaWNoIG9wZXJhdGVzIHVuZGVyIGEg
Y29udHJhY3Qgd2l0aCB0aGUgRGVwYXJ0bWVudCBvZiBFbmVyZ3k6DQorDQorCUNvcHlyaWdodCAo
YykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLg0KKwlB
bGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKwlUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3
YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5DQorCVZlcm4gUGF4c29uLg0KKw0KKwlUaGUg
VW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGhhcyByaWdodHMgaW4gdGhpcyB3b3JrIHB1cnN1YW50
DQorCXRvIGNvbnRyYWN0IG5vLiBERS1BQzAzLTc2U0YwMDA5OCBiZXR3ZWVuIHRoZSBVbml0ZWQg
U3RhdGVzDQorCURlcGFydG1lbnQgb2YgRW5lcmd5IGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp
Zm9ybmlhLg0KKw0KKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zIGFyZSBwZXJtaXR0ZWQNCisJcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBkaXN0cmli
dXRpb25zIHJldGFpbiB0aGlzIGVudGlyZQ0KKwljb3B5cmlnaHQgbm90aWNlIGFuZCBjb21tZW50
LCBhbmQgKDIpIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nDQorCWJpbmFyaWVzIGRpc3BsYXkgdGhl
IGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICBgYFRoaXMgcHJvZHVjdA0KKwlpbmNsdWRlcyBz
b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwNCisJQmVy
a2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMnJyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhl
cg0KKwltYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIGFuZCBpbiBhbGwg
YWR2ZXJ0aXNpbmcNCisJbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo
aXMgc29mdHdhcmUuICBOZWl0aGVyIHRoZQ0KKwluYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUNCisJdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisJd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorCVRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SDQorCUlNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEDQor
CVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVINCisJUFVSUE9TRS4NCisNCitUaGlzIGJhc2ljYWxseSBzYXlzICJkbyB3aGF0ZXZlciB5b3Ug
cGxlYXNlIHdpdGggdGhpcyBzb2Z0d2FyZSBleGNlcHQNCityZW1vdmUgdGhpcyBub3RpY2Ugb3Ig
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFVuaXZlcnNpdHkncyAob3IgdGhlIGZsZXgNCithdXRob3Jz
JykgbmFtZSIuDQorDQorTm90ZSB0aGF0IHRoZSAiZmxleC5za2wiIHNjYW5uZXIgc2tlbGV0b24g
Y2FycmllcyBubyBjb3B5cmlnaHQgbm90aWNlLg0KK1lvdSBhcmUgZnJlZSB0byBkbyB3aGF0ZXZl
ciB5b3UgcGxlYXNlIHdpdGggc2Nhbm5lcnMgZ2VuZXJhdGVkIHVzaW5nIGZsZXg7DQorZm9yIHRo
ZW0sIHlvdSBhcmUgbm90IGV2ZW4gYm91bmQgYnkgdGhlIGFib3ZlIGNvcHlyaWdodC4NCkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci90b29scy9SRUFETUUJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvdG9vbHMvUkVBRE1FCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitUaGUgc3RhbmRh
bG9uZSBCaXNvbiBhbmQgRmxleCB3aW4zMiBleGVjdXRhYmxlcw0KK3dlcmUgY3JlYXRlZCBieSBX
aWxidXIgU3RyZWV0dCBhbmQgY2FuIGJlIG9idGFpbmVkIGZyb206DQoraHR0cDovL3VzZXJwYWdl
cy5tb25tb3V0aC5jb20vfndzdHJlZXR0L2xleC15YWNjL2xleC15YWNjLmh0bWwNCisNCitCaXNv
biB2ZXJzaW9uIDEuMjQ6DQorU2VlIENPUFlJTkcuYmlzb24gZm9yIGxpY2Vuc2UgaW5mb3JtYXRp
b24uDQorVGhlIG9yaWdpbmFsIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIGJpc29uIGNhbiBiZSBv
YnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246DQoraHR0cDovL2FuZ2xlcHJvamVj
dC5nb29nbGVjb2RlLmNvbS9maWxlcy9iaXNvbi56aXANCisNCitGbGV4IHZlcnNpb24gMi41LjIN
CitTZWUgQ09QWUlORy5mbGV4IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLg0KK1RoZSBvcmlnaW5h
bCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBmbGV4IGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBm
b2xsb3dpbmcgbG9jYXRpb246DQoraHR0cDovL2FuZ2xlcHJvamVjdC5nb29nbGVjb2RlLmNvbS9m
aWxlcy9mbGV4LnppcA0KKw0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci90b29scy9iaXNvbi5o
YWlyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uaGFpcnkJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uaGFpcnkJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisKK2V4dGVybiBpbnQgdGltZWNsb2NrOworCisK
K2ludCB5eWVycm9yOwkJLyogIFl5ZXJyb3IgYW5kIHl5Y29zdCBhcmUgc2V0IGJ5IGd1YXJkcy4J
Ki8KK2ludCB5eWNvc3Q7CQkvKiAgSWYgeXllcnJvciBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVl
IGJ5IGEJKi8KKwkJCS8qICBndWFyZCwgdGhlIHJlZHVjdGlvbiB3aXRoIHdoaWNoIHRoZSBndWFy
ZAkqLworCQkJLyogIGlzIGFzc29jaWF0ZWQgaXMgbm90IHBlcmZvcm1lZCwgYW5kIHRoZQkqLwor
CQkJLyogIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBpbnZva2VkLgkqLworCQkJLyogIFl5
Y29zdCBpbmRpY2F0ZXMgdGhlIGNvc3Qgb2YgcGVyZm9ybWluZwkqLworCQkJLyogIHRoZSByZWR1
Y3Rpb24gZ2l2ZW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlCSovCisJCQkvKiAgc3ltYm9scy4JCQkJ
CSovCisKKworLyogIFlZTUFYREVQVEggaW5kaWNhdGVzIHRoZSBzaXplIG9mIHRoZSBwYXJzZXIn
cyBzdGF0ZSBhbmQgdmFsdWUJKi8KKy8qICBzdGFja3MuCQkJCQkJCQkqLworCisjaWZuZGVmCVlZ
TUFYREVQVEgKKyNkZWZpbmUJWVlNQVhERVBUSAk1MDAKKyNlbmRpZgorCisvKiAgWVlNQVhSVUxF
UyBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBudW1iZXIgb2YgcnVsZXMgdGhhdAkq
LworLyogIGNvdWxkIGJlIHBsYWNlZCBpbiB0aGUgcnVsZSBxdWV1ZS4gIFRoYXQgbnVtYmVyIGNv
dWxkIGJlIGRldGVybWluZWQJKi8KKy8qICBmcm9tIHRoZSBncmFtbWFyIGFuZCB0aGUgc2l6ZSBv
ZiB0aGUgc3RhY2ssIGJ1dCwgYXMgeWV0LCBpdCBpcyBub3QuCSovCisKKyNpZm5kZWYJWVlNQVhS
VUxFUworI2RlZmluZQlZWU1BWFJVTEVTCTEwMAorI2VuZGlmCisKKyNpZm5kZWYJWVlNQVhCQUNL
VVAKKyNkZWZpbmUgWVlNQVhCQUNLVVAJMTAwCisjZW5kaWYKKworCitzaG9ydAl5eXNzW1lZTUFY
REVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8KK1lZU1RZUEUJeXl2c1tZWU1BWERFUFRI
XTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJKi8KK1lZTFRZUEUgeXlsc1tZWU1BWERF
UFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSovCitzaG9ydAl5eXJxW1lZTUFYUlVMRVNd
OwkvKiAgdGhlIHJ1bGUgcXVldWUJCQkqLworaW50CXl5Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVh
ZCBzeW1ib2wJCSovCisKK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUg
b2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KKworWVlTVFlQRSB5eXR2
YWw7CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3IgdGhlIHN0YXRlCSovCisJCQkJLyogIGF0
IHRoZSB0b3Agb2YgdGhlIHN0YXRlIHN0YWNrLgkqLworCitZWVNUWVBFIHl5dmFsOwkJCS8qICB0
aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJCQkJLyogIHNlbWFudGljIHZhbHVlcyBm
cm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGluZXMJCQkJKi8KKworWVlMVFlQRSB5eWxs
b2M7CQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZAkqLworCQkJCS8qICBzeW1i
b2wJCQkJKi8KKworWVlMVFlQRSB5eXRsb2M7CQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIHN0
YXRlIGF0IHRoZQkqLworCQkJCS8qICB0b3Agb2YgdGhlIHN0YXRlIHN0YWNrCQkqLworCisKK2lu
dAl5eW51bmxleGVkOworc2hvcnQJeXl1bmNoYXJbWVlNQVhCQUNLVVBdOworWVlTVFlQRQl5eXVu
dmFsW1lZTUFYQkFDS1VQXTsKK1lZTFRZUEUgeXl1bmxvY1tZWU1BWEJBQ0tVUF07CisKK3Nob3J0
ICp5eWdzc3A7CQkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBzdGF0ZQkqLworCQkJ
CS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9yCSovCisJCQkJLyogIHJlY292ZXJ5LgkJ
CQkqLworCitZWVNUWVBFICp5eWd2c3A7CQkvKiAgYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhl
IHZhbHVlCSovCisJCQkJLyogIHN0YWNrOyBvbmx5IHNldCBkdXJpbmcgZXJyb3IJKi8KKwkJCQkv
KiAgcmVjb3ZlcnkuCQkJCSovCisKK1lZTFRZUEUgKnl5Z2xzcDsJCS8qICBhIHBvaW50ZXIgdG8g
dGhlIHRvcCBvZiB0aGUJCSovCisJCQkJLyogIGxvY2F0aW9uIHN0YWNrOyBvbmx5IHNldCBkdXJp
bmcJKi8KKwkJCQkvKiAgZXJyb3IgcmVjb3ZlcnkuCQkJKi8KKworCisvKiAgWXlnZXQgaXMgYW4g
aW50ZXJmYWNlIGJldHdlZW4gdGhlIHBhcnNlciBhbmQgdGhlIGxleGljYWwgYW5hbHl6ZXIuCSov
CisvKiAgSXQgaXMgY29zdGx5IHRvIHByb3ZpZGUgc3VjaCBhbiBpbnRlcmZhY2UsIGJ1dCBpdCBh
dm9pZHMgcmVxdWlyaW5nCSovCisvKiAgdGhlIGxleGljYWwgYW5hbHl6ZXIgdG8gYmUgYWJsZSB0
byBiYWNrIHVwIHRoZSBzY2FuLgkJKi8KKworeXlnZXQoKQoreworICBpZiAoeXludW5sZXhlZCA+
IDApCisgICAgeworICAgICAgeXludW5sZXhlZC0tOworICAgICAgeXljaGFyID0geXl1bmNoYXJb
eXludW5sZXhlZF07CisgICAgICB5eWx2YWwgPSB5eXVudmFsW3l5bnVubGV4ZWRdOworICAgICAg
eXlsbG9jID0geXl1bmxvY1t5eW51bmxleGVkXTsKKyAgICB9CisgIGVsc2UgaWYgKHl5Y2hhciA8
PSAwKQorICAgIHl5Y2hhciA9IDA7CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIgPSB5eWxl
eCgpOworICAgICAgaWYgKHl5Y2hhciA8IDApCisJeXljaGFyID0gMDsKKyAgICAgIGVsc2UgeXlj
aGFyID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKyAgICB9Cit9CisKKworCit5eXVubGV4KGNociwg
dmFsLCBsb2MpCitpbnQgY2hyOworWVlTVFlQRSB2YWw7CitZWUxUWVBFIGxvYzsKK3sKKyAgeXl1
bmNoYXJbeXludW5sZXhlZF0gPSBjaHI7CisgIHl5dW52YWxbeXludW5sZXhlZF0gPSB2YWw7Cisg
IHl5dW5sb2NbeXludW5sZXhlZF0gPSBsb2M7CisgIHl5bnVubGV4ZWQrKzsKK30KKworCisKK3l5
cmVzdG9yZShmaXJzdCwgbGFzdCkKK3JlZ2lzdGVyIHNob3J0ICpmaXJzdDsKK3JlZ2lzdGVyIHNo
b3J0ICpsYXN0OworeworICByZWdpc3RlciBzaG9ydCAqc3NwOworICByZWdpc3RlciBzaG9ydCAq
cnA7CisgIHJlZ2lzdGVyIGludCBzeW1ib2w7CisgIHJlZ2lzdGVyIGludCBzdGF0ZTsKKyAgcmVn
aXN0ZXIgaW50IHR2YWxzYXZlZDsKKworICBzc3AgPSB5eWdzc3A7CisgIHl5dW5sZXgoeXljaGFy
LCB5eWx2YWwsIHl5bGxvYyk7CisKKyAgdHZhbHNhdmVkID0gMDsKKyAgd2hpbGUgKGZpcnN0ICE9
IGxhc3QpCisgICAgeworICAgICAgc3ltYm9sID0geXlzdG9zWypzc3BdOworICAgICAgaWYgKHN5
bWJvbCA8IFlZTlRCQVNFKQorCXsKKwkgIHl5dW5sZXgoc3ltYm9sLCB5eXR2YWwsIHl5dGxvYyk7
CisJICB0dmFsc2F2ZWQgPSAxOworCSAgc3NwLS07CisJfQorCisgICAgICBzc3AtLTsKKworICAg
ICAgaWYgKGZpcnN0ID09IHl5cnEpCisJZmlyc3QgPSB5eXJxICsgWVlNQVhSVUxFUzsKKworICAg
ICAgZmlyc3QtLTsKKworICAgICAgZm9yIChycCA9IHl5cmhzICsgeXlwcmhzWypmaXJzdF07IHN5
bWJvbCA9ICpycDsgcnArKykKKwl7CisJICBpZiAoc3ltYm9sIDwgWVlOVEJBU0UpCisJICAgIHN0
YXRlID0geXl0YWJsZVt5eXBhY3RbKnNzcF0gKyBzeW1ib2xdOworCSAgZWxzZQorCSAgICB7CisJ
ICAgICAgc3RhdGUgPSB5eXBnb3RvW3N5bWJvbCAtIFlZTlRCQVNFXSArICpzc3A7CisKKwkgICAg
ICBpZiAoc3RhdGUgPj0gMCAmJiBzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1tzdGF0ZV0gPT0g
KnNzcCkKKwkJc3RhdGUgPSB5eXRhYmxlW3N0YXRlXTsKKwkgICAgICBlbHNlCisJCXN0YXRlID0g
eXlkZWZnb3RvW3N5bWJvbCAtIFlZTlRCQVNFXTsKKwkgICAgfQorCisJICAqKytzc3AgPSBzdGF0
ZTsKKwl9CisgICAgfQorCisgIGlmICggISB0dmFsc2F2ZWQgJiYgc3NwID4geXlzcykKKyAgICB7
CisgICAgICB5eXVubGV4KHl5c3Rvc1sqc3NwXSwgeXl0dmFsLCB5eXRsb2MpOworICAgICAgc3Nw
LS07CisgICAgfQorCisgIHl5Z3NzcCA9IHNzcDsKK30KKworCisKK2ludAoreXlwYXJzZSgpCit7
CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQgeXluOworICByZWdpc3Rl
ciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIHNob3J0ICp5eXJxMDsKKyAgcmVnaXN0ZXIgc2hv
cnQgKnl5cHRyOworICByZWdpc3RlciBZWVNUWVBFICp5eXZzcDsKKworICBpbnQgeXlsZW47Cisg
IFlZTFRZUEUgKnl5bHNwOworICBzaG9ydCAqeXlycTE7CisgIHNob3J0ICp5eXJxMjsKKworICB5
eXN0YXRlID0gMDsKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3AgPSB5eXZzIC0gMTsKKyAg
eXlsc3AgPSB5eWxzIC0gMTsKKyAgeXlycTAgPSB5eXJxOworICB5eXJxMSA9IHl5cnEwOworICB5
eXJxMiA9IHl5cnEwOworCisgIHl5Y2hhciA9IHl5bGV4KCk7CisgIGlmICh5eWNoYXIgPCAwKQor
ICAgIHl5Y2hhciA9IDA7CisgIGVsc2UgeXljaGFyID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKwor
eXluZXdzdGF0ZToKKworICBpZiAoeXlzc3AgPj0geXlzcyArIFlZTUFYREVQVEggLSAxKQorICAg
IHsKKyAgICAgIHl5YWJvcnQoIlBhcnNlciBTdGFjayBPdmVyZmxvdyIpOworICAgICAgWVlBQk9S
VDsKKyAgICB9CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCit5eXJlc3VtZToKKworICB5eW4g
PSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZh
dWx0OworCisgIHl5biArPSB5eWNoYXI7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8
fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9
IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgeXluID0gLXl5bjsK
KyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBn
b3RvIHl5ZXJybGFiOworCisgIHl5c3RhdGUgPSB5eW47CisKKyAgeXlwdHIgPSB5eXJxMjsKKyAg
d2hpbGUgKHl5cHRyICE9IHl5cnExKQorICAgIHsKKyAgICAgIHl5biA9ICp5eXB0cisrOworICAg
ICAgeXlsZW4gPSB5eXIyW3l5bl07CisgICAgICB5eXZzcCAtPSB5eWxlbjsKKyAgICAgIHl5bHNw
IC09IHl5bGVuOworCisgICAgICB5eWd1YXJkKHl5biwgeXl2c3AsIHl5bHNwKTsKKyAgICAgIGlm
ICh5eWVycm9yKQorCWdvdG8geXlzZW1lcnI7CisKKyAgICAgIHl5YWN0aW9uKHl5biwgeXl2c3As
IHl5bHNwKTsKKyAgICAgICorK3l5dnNwID0geXl2YWw7CisKKyAgICAgIHl5bHNwKys7CisgICAg
ICBpZiAoeXlsZW4gPT0gMCkKKwl7CisJICB5eWxzcC0+dGltZXN0YW1wID0gdGltZWNsb2NrOwor
CSAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eXRsb2MuZmlyc3RfbGluZTsKKwkgIHl5bHNwLT5maXJz
dF9jb2x1bW4gPSB5eXRsb2MuZmlyc3RfY29sdW1uOworCSAgeXlsc3AtPmxhc3RfbGluZSA9ICh5
eWxzcC0xKS0+bGFzdF9saW5lOworCSAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwLTEpLT5s
YXN0X2NvbHVtbjsKKwkgIHl5bHNwLT50ZXh0ID0gMDsKKwl9CisgICAgICBlbHNlCisJeworCSAg
eXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9saW5lOworCSAgeXlsc3At
Pmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVtbjsKKwl9CisJICAKKyAg
ICAgIGlmICh5eXB0ciA9PSB5eXJxICsgWVlNQVhSVUxFUykKKyAgICAgICAgeXlwdHIgPSB5eXJx
OworICAgIH0KKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisg
IHl5cnEyID0geXlwdHI7CisgIHl5cnExID0geXlycTA7CisKKyAgKisreXl2c3AgPSB5eXR2YWw7
CisgICorK3l5bHNwID0geXl0bG9jOworICB5eXR2YWwgPSB5eWx2YWw7CisgIHl5dGxvYyA9IHl5
bGxvYzsKKyAgeXlnZXQoKTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKK3l5ZGVmYXVsdDoKKwor
ICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXll
cnJsYWI7CisKK3l5cmVkdWNlOgorCisgICp5eXJxMCsrID0geXluOworCisgIGlmICh5eXJxMCA9
PSB5eXJxICsgWVlNQVhSVUxFUykKKyAgICB5eXJxMCA9IHl5cnE7CisKKyAgaWYgKHl5cnEwID09
IHl5cnEyKQorICAgIHsKKyAgICAgIHl5YWJvcnQoIlBhcnNlciBSdWxlIFF1ZXVlIE92ZXJmbG93
Iik7CisgICAgICBZWUFCT1JUOworICAgIH0KKworICB5eXNzcCAtPSB5eXIyW3l5bl07CisgIHl5
biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAq
eXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Cisg
IGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3Rv
IHl5bmV3c3RhdGU7CisKK3l5c2VtZXJyOgorICAqLS15eXB0ciA9IHl5bjsKKyAgeXlycTIgPSB5
eXB0cjsKKyAgeXl2c3AgKz0geXlyMlt5eW5dOworCit5eWVycmxhYjoKKworICB5eWdzc3AgPSB5
eXNzcDsKKyAgeXlndnNwID0geXl2c3A7CisgIHl5Z2xzcCA9IHl5bHNwOworICB5eXJlc3RvcmUo
eXlycTAsIHl5cnEyKTsKKyAgeXlyZWNvdmVyKCk7CisgIHl5c3RhdGUgPSAqeXlnc3NwOworICB5
eXNzcCA9IHl5Z3NzcDsKKyAgeXl2c3AgPSB5eWd2c3A7CisgIHl5cnEwID0geXlycTsKKyAgeXly
cTEgPSB5eXJxMDsKKyAgeXlycTIgPSB5eXJxMDsKKyAgZ290byB5eXJlc3VtZTsKK30KKworJApJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uc2ltcGxlCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2OTkgQEAKKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29t
bWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisKKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIg
Zm9yIGJpc29uLAorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5
b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2
ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2Vw
dGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorICAgQmlzb24g
b3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmlj
dGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisKKyNp
ZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UgLyog
bm90IF9fR05VQ19fICovCisjaWYgSEFWRV9BTExPQ0FfSAorI2luY2x1ZGUgPGFsbG9jYS5oPgor
I2Vsc2UgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8KKyNpZmRlZiBfQUlYCisgI3ByYWdtYSBhbGxv
Y2EKKyNlbHNlIC8qIG5vdCBfQUlYICovCitjaGFyICphbGxvY2EgKCk7CisjZW5kaWYgLyogbm90
IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgSEFWRV9BTExPQ0FfSCAqLworI2VuZGlmIC8qIG5vdCBf
X0dOVUNfXyAqLworCitleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIqIHMpOworCisjaWZuZGVmIGFs
bG9jYQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisj
ZWxzZSAvKiBub3QgR05VIEMuICAqLworI2lmICghZGVmaW5lZCAoX19TVERDX18pICYmIGRlZmlu
ZWQgKHNwYXJjKSkgfHwgZGVmaW5lZCAoX19zcGFyY19fKSB8fCBkZWZpbmVkIChfX3NwYXJjKSB8
fCBkZWZpbmVkIChfX3NnaSkKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbHNlIC8qIG5vdCBzcGFy
YyAqLworI2lmIChkZWZpbmVkIChNU0RPUykgJiYgIWRlZmluZWQgKF9fVFVSQk9DX18pKSB8fCBk
ZWZpbmVkIChXSU4zMikKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbHNlIC8qIG5vdCBNU0RPUywg
b3IgX19UVVJCT0NfXyAqLworI2lmIGRlZmluZWQoX0FJWCkKKyNpbmNsdWRlIDxtYWxsb2MuaD4K
KyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IE1TRE9TLCBfX1RVUkJPQ19fLCBvciBfQUlY
ICovCisjaWZkZWYgX19ocHV4CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgewordm9p
ZCAqYWxsb2NhICh1bnNpZ25lZCBpbnQpOworfTsKKyNlbHNlIC8qIG5vdCBfX2NwbHVzcGx1cyAq
Lwordm9pZCAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5vdCBfX2NwbHVzcGx1cyAqLworI2VuZGlm
IC8qIF9faHB1eCAqLworI2VuZGlmIC8qIG5vdCBfQUlYICovCisjZW5kaWYgLyogbm90IE1TRE9T
LCBvciBfX1RVUkJPQ19fICovCisjZW5kaWYgLyogbm90IHNwYXJjLiAgKi8KKyNlbmRpZiAvKiBu
b3QgR05VIEMuICAqLworI2VuZGlmIC8qIGFsbG9jYSBub3QgZGVmaW5lZC4gICovCisKKy8qIFRo
aXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFy
c2VyCisgIHdoZW4gdGhlICVzZW1hbnRpY19wYXJzZXIgZGVjbGFyYXRpb24gaXMgbm90IHNwZWNp
ZmllZCBpbiB0aGUgZ3JhbW1hci4KKyAgSXQgd2FzIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1h
biBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2VyCisgIHVzZWQgd2hlbiAlc2VtYW50aWNf
cGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIE5vdGU6IHRoZXJlIG11c3QgYmUgb25seSBv
bmUgZG9sbGFyIHNpZ24gaW4gdGhpcyBmaWxlLgorICAgSXQgaXMgcmVwbGFjZWQgYnkgdGhlIGxp
c3Qgb2YgYWN0aW9ucywgZWFjaCBhY3Rpb24KKyAgIGFzIG9uZSBjYXNlIG9mIHRoZSBzd2l0Y2gu
ICAqLworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xl
YXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJLTIKKyNkZWZpbmUgWVlF
T0YJCTAKKyNkZWZpbmUgWVlBQ0NFUFQJcmV0dXJuKDApCisjZGVmaW5lIFlZQUJPUlQgCXJldHVy
bigxKQorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJybGFiMQorLyogTGlrZSBZWUVSUk9SIGV4
Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuCisgICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseSB0
byBlYXNlIHRoZQorICAgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwg
Zm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEs
IHRoaXMgY2FuIGdvLiAgKi8KKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisjZGVmaW5l
IFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKyNkZWZpbmUgWVlCQUNLVVAodG9rZW4s
IHZhbHVlKSBcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4g
PT0gMSkJCQkJXAorICAgIHsgeXljaGFyID0gKHRva2VuKSwgeXlsdmFsID0gKHZhbHVlKTsJCQlc
CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9Q
U1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJ
XAorICBlbHNlCQkJCQkJCQlcCisgICAgeyB5eWVycm9yICgic3ludGF4IGVycm9yOiBjYW5ub3Qg
YmFjayB1cCIpOyBZWUVSUk9SOyB9CVwKK3doaWxlICgwKQorCisjZGVmaW5lIFlZVEVSUk9SCTEK
KyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisjaWZuZGVmIFlZUFVSRQorI2RlZmluZSBZWUxFWAkJ
eXlsZXgoKQorI2VuZGlmCisKKyNpZmRlZiBZWVBVUkUKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyNp
ZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgJnl5bGxvYywg
WVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJeXlsZXgoJnl5bHZhbCwgJnl5bGxv
YykKKyNlbmRpZgorI2Vsc2UgLyogbm90IFlZTFNQX05FRURFRCAqLworI2lmZGVmIFlZTEVYX1BB
UkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisj
ZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsKQorI2VuZGlmCisjZW5kaWYgLyogbm90IFlZTFNQ
X05FRURFRCAqLworI2VuZGlmCisKKy8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZh
cmlhYmxlcyBoZXJlICovCisKKyNpZm5kZWYgWVlQVVJFCisKK2ludAl5eWNoYXI7CQkJLyogIHRo
ZSBsb29rYWhlYWQgc3ltYm9sCQkqLworWVlTVFlQRQl5eWx2YWw7CQkJLyogIHRoZSBzZW1hbnRp
YyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2thaGVhZCBzeW1ib2wJCQkqLworCisjaWZk
ZWYgWVlMU1BfTkVFREVECitZWUxUWVBFIHl5bGxvYzsJCQkvKiAgbG9jYXRpb24gZGF0YSBmb3Ig
dGhlIGxvb2thaGVhZAkqLworCQkJCS8qICBzeW1ib2wJCQkJKi8KKyNlbmRpZgorCitpbnQgeXlu
ZXJyczsJCQkvKiAgbnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIgICAgICAgKi8KKyNlbmRp
ZiAgLyogbm90IFlZUFVSRSAqLworCisjaWYgWVlERUJVRyAhPSAwCitpbnQgeXlkZWJ1ZzsJCQkv
KiAgbm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZQkqLworLyogU2luY2UgdGhpcyBpcyB1
bmluaXRpYWxpemVkLCBpdCBkb2VzIG5vdCBzdG9wIG11bHRpcGxlIHBhcnNlcnMKKyAgIGZyb20g
Y29leGlzdGluZy4gICovCisjZW5kaWYKKworLyogIFlZSU5JVERFUFRIIGluZGljYXRlcyB0aGUg
aW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MJKi8KKworI2lmbmRlZglZWUlOSVRE
RVBUSAorI2RlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiAgWVlNQVhERVBUSCBp
cyB0aGUgbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8KKyAgICAoZWZmZWN0aXZl
IG9ubHkgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuICAq
LworCisjaWYgWVlNQVhERVBUSCA9PSAwCisjdW5kZWYgWVlNQVhERVBUSAorI2VuZGlmCisKKyNp
Zm5kZWYgWVlNQVhERVBUSAorI2RlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworLyog
UHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworI2lmZGVmIF9fR05V
Q19fCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZW5kaWYKKwwKKyNpZiBfX0dOVUNfXyA+IDEJCS8q
IEdOVSBDIGFuZCBHTlUgQysrIGRlZmluZSB0aGlzLiAgKi8KKyNkZWZpbmUgX195eV9tZW1jcHko
RlJPTSxUTyxDT1VOVCkJX19idWlsdGluX21lbWNweShUTyxGUk9NLENPVU5UKQorI2Vsc2UJCQkJ
Lyogbm90IEdOVSBDIG9yIEMrKyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworCisvKiBUaGlzIGlz
IHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcworICAgaW4g
YXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJpb3VzIHN5c3RlbXMuICAqLworc3Rh
dGljIHZvaWQKK19feXlfbWVtY3B5IChmcm9tLCB0bywgY291bnQpCisgICAgIGNoYXIgKmZyb207
CisgICAgIGNoYXIgKnRvOworICAgICBzaXplX3QgY291bnQ7Cit7CisgIHJlZ2lzdGVyIGNoYXIg
KmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJlZ2lzdGVyIHNpemVfdCBp
ID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9ICpmKys7Cit9CisKKyNl
bHNlIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFRoaXMgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5
IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBpbiBhdmFpbGFibGUgYnVpbHQtaW4gZnVu
Y3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitzdGF0aWMgdm9pZAorX195eV9tZW1jcHkg
KGNoYXIgKmZyb20sIGNoYXIgKnRvLCBzaXplX3QgY291bnQpCit7CisgIHJlZ2lzdGVyIGNoYXIg
KmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0gdG87CisgIHJlZ2lzdGVyIHNpemVfdCBp
ID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisgICAgKnQrKyA9ICpmKys7Cit9CisKKyNl
bmRpZgorI2VuZGlmCisKKy8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgWVlQQVJTRV9QQVJBTSBhcyB0
aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNzZWQKKyAgIGludG8geXlwYXJzZS4gIFRo
ZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKyAgIEl0IHNob3VsZCBhY3R1YWxs
eSBwb2ludCB0byBhbiBvYmplY3QuCisgICBHcmFtbWFyIGFjdGlvbnMgY2FuIGFjY2VzcyB0aGUg
dmFyaWFibGUgYnkgY2FzdGluZyBpdAorICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAq
LworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmbmRlZiBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNk
ZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYgCisj
ZWxzZQorI2RlZmluZSBZWVBBUlNFX1BBUkFNCisjZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAor
I2VuZGlmCisKK2V4dGVybiBZWV9ERUNMOworCitpbnQKK3l5cGFyc2UoWVlQQVJTRV9QQVJBTV9E
RUNMIFlZUEFSU0VfUEFSQU0pIHsKKyAgcmVnaXN0ZXIgaW50IHl5c3RhdGU7CisgIHJlZ2lzdGVy
IGludCB5eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgcmVnaXN0ZXIgWVlTVFlQRSAq
eXl2c3A7CisgIGludCB5eWVycnN0YXR1czsJLyogIG51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQg
YmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQgKi8KKyAgaW50IHl5Y2hhcjEgPSAwOwkJLyog
IGxvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVy
ICovCisKKyAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJ
Ki8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgc2VtYW50aWMgdmFsdWUg
c3RhY2sJCSovCisKKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsJCS8qICByZWZlciB0byB0aGUgc3Rh
Y2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMgKi8KKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwkv
KiAgdG8gYWxsb3cgeXlvdmVyZmxvdyB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlICovCisK
KyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxzYVtZWUlOSVRERVBUSF07CS8qICB0
aGUgbG9jYXRpb24gc3RhY2sJCQkqLworICBZWUxUWVBFICp5eWxzID0geXlsc2E7CisgIFlZTFRZ
UEUgKnl5bHNwOworCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXls
c3AtLSkKKyNlbHNlCisjZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKyNl
bmRpZgorCisgIHNpemVfdCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisjaWZkZWYgWVlQ
VVJFCisgIGludCB5eWNoYXI7CisgIFlZU1RZUEUgeXlsdmFsOworICBpbnQgeXluZXJyczsKKyNp
ZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxsb2M7CisjZW5kaWYKKyNlbmRpZgorCisg
IFlZU1RZUEUgeXl2YWw7CQkvKiAgdGhlIHZhcmlhYmxlIHVzZWQgdG8gcmV0dXJuCQkqLworCQkJ
CS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0aW9uCSovCisJCQkJLyogIHJvdXRpbmVz
CQkJCSovCisKKyAgaW50IHl5bGVuOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVn
KQorICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpOworI2VuZGlmCisKKyAg
eXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hh
ciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIElu
aXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVl
IGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBs
ZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5l
dmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3MgLSAxOworICB5eXZzcCA9IHl5
dnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwID0geXlsczsKKyNlbmRpZgorCisvKiBQ
dXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiAgeXlzdGF0ZSAgLiAgKi8KKy8qIElu
IGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3Rh
Y2tzCisgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2
ZW5zIHRoZSBzdGFja3MuICAqLworeXluZXdzdGF0ZToKKworICAqKyt5eXNzcCA9IHl5c3RhdGU7
CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisgICAgeworICAgICAg
LyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrICovCisgICAgICAv
KiBVc2UgY29waWVzIG9mIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVh
bCBvbmVzIGludG8gbWVtb3J5LiAqLworICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOworICAg
ICAgc2hvcnQgKnl5c3MxID0geXlzczsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIFlZTFRZ
UEUgKnl5bHMxID0geXlsczsKKyNlbmRpZgorCisgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNl
ZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAgICAgIHNpemVf
dCBzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIC8q
IEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mCisJ
IHRoZSBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisjaWZkZWYgWVlM
U1BfTkVFREVECisgICAgICAvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQg
anVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisJIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBp
ZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0
YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICZ5
eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5eWxzMSwgc2l6ZSAqIHNpemVvZiAo
Knl5bHNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZWxzZQorICAgICAgeXlvdmVyZmxvdygicGFy
c2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwK
KwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7Cisj
ZW5kaWYKKworICAgICAgeXlzcyA9IHl5c3MxOyB5eXZzID0geXl2czE7CisjaWZkZWYgWVlMU1Bf
TkVFREVECisgICAgICB5eWxzID0geXlsczE7CisjZW5kaWYKKyNlbHNlIC8qIG5vIHl5b3ZlcmZs
b3cgKi8KKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLworICAgICAg
aWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisJeworCSAgeXllcnJvcigicGFyc2VyIHN0
YWNrIG92ZXJmbG93Iik7CisJICByZXR1cm4gMjsKKwl9CisgICAgICB5eXN0YWNrc2l6ZSAqPSAy
OworICAgICAgaWYgKHl5c3RhY2tzaXplID4gWVlNQVhERVBUSCkKKwl5eXN0YWNrc2l6ZSA9IFlZ
TUFYREVQVEg7CisgICAgICB5eXNzID0gKHNob3J0ICopIGFsbG9jYSAoeXlzdGFja3NpemUgKiBz
aXplb2YgKCp5eXNzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICopeXlzczEsIChjaGFy
ICopeXlzcywgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7CisgICAgICB5eXZzID0gKFlZU1RZUEUg
KikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisgICAgICBfX3l5X21l
bWNweSAoKGNoYXIgKil5eXZzMSwgKGNoYXIgKil5eXZzLCBzaXplICogc2l6ZW9mICgqeXl2c3Ap
KTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHMgPSAoWVlMVFlQRSAqKSBhbGxvY2Eg
KHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hh
ciAqKXl5bHMxLCAoY2hhciAqKXl5bHMsIHNpemUgKiBzaXplb2YgKCp5eWxzcCkpOworI2VuZGlm
CisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNzcCA9IHl5c3MgKyBzaXpl
IC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHNpemUgLSAxOworI2lmZGVmIFlZTFNQX05FRURF
RAorICAgICAgeXlsc3AgPSB5eWxzICsgc2l6ZSAtIDE7CisjZW5kaWYKKworI2lmIFlZREVCVUcg
IT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJTdGFjayBzaXplIGlu
Y3JlYXNlZCB0byAlZFxuIiwgeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAgIGlmICh5eXNz
cCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorCVlZQUJPUlQ7CisgICAgfQorCisjaWYgWVlE
RUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiRW50ZXJpbmcg
c3RhdGUgJWRcbiIsIHl5c3RhdGUpOworI2VuZGlmCisKKyAgZ290byB5eWJhY2t1cDsKKyB5eWJh
Y2t1cDoKKworLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBz
dGF0ZS4gICovCisvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBk
b24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy8qIHl5cmVzdW1lOiAqLworCisgIC8qIEZpcnN0
IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQg
dG9rZW4uICAqLworCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZM
QUcpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2th
aGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiB5eWNoYXIg
aXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0YKKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRl
cm5hbCBmb3JtLiAgKi8KKworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworI2lmIFlZ
REVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJSZWFkaW5n
IGEgdG9rZW46ICIpOworI2VuZGlmCisgICAgICB5eWNoYXIgPSBZWUxFWDsKKyAgICB9CisKKyAg
LyogQ29udmVydCB0b2tlbiB0byBpbnRlcm5hbCBmb3JtIChpbiB5eWNoYXIxKSBmb3IgaW5kZXhp
bmcgdGFibGVzIHdpdGggKi8KKworICBpZiAoeXljaGFyIDw9IDApCQkvKiBUaGlzIG1lYW5zIGVu
ZCBvZiBpbnB1dC4gKi8KKyAgICB7CisgICAgICB5eWNoYXIxID0gMDsKKyAgICAgIHl5Y2hhciA9
IFlZRU9GOwkJLyogRG9uJ3QgY2FsbCBZWUxFWCBhbnkgbW9yZSAqLworCisjaWYgWVlERUJVRyAh
PSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRmKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2Yg
aW5wdXQuXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5Y2hhcjEg
PSBZWVRSQU5TTEFURSh5eWNoYXIpOworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlk
ZWJ1ZykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsIHl5
Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisJICAvKiBHaXZlIHRoZSBpbmRpdmlkdWFsIHBhcnNl
ciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZSBtZWFuaW5nCisJICAgICBvZiBhIHRva2VuLCBm
b3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisjaWZkZWYgWVlQUklOVAorCSAgWVlQUklO
VCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjZW5kaWYKKwkgIGZwcmludGYgKHN0ZGVyciwg
IilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5eW4gKz0geXljaGFyMTsKKyAgaWYgKHl5
biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorICAgIGdv
dG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKworICAvKiB5eW4gaXMgd2hh
dCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUuCisgICAgIE5lZ2F0aXZl
ID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQs
IHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRv
bid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0IHJldHVybiBzdWNjZXNzLgorICAgICAw
LCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisKKyAgaWYgKHl5biA8IDAp
CisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycmxhYjsKKyAgICAg
IHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXlu
ID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAg
WVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisKKyNpZiBZ
WURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGlu
ZyB0b2tlbiAlZCAoJXMpLCAiLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworI2VuZGlmCisK
KyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAg
Ki8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgICor
K3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxv
YzsKKyNlbmRpZgorCisgIC8qIGNvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRl
ciB0aHJlZSwgdHVybiBvZmYgZXJyb3Igc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKSB5
eWVycnN0YXR1cy0tOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKwor
LyogRG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gICovCit5eWRl
ZmF1bHQ6CisKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAg
ICBnb3RvIHl5ZXJybGFiOworCisvKiBEbyBhIHJlZHVjdGlvbi4gIHl5biBpcyB0aGUgbnVtYmVy
IG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCit5eXJlZHVjZToKKyAgeXlsZW4gPSB5eXIy
W3l5bl07CisgIGlmICh5eWxlbiA+IDApCisgICAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsgLyog
aW1wbGVtZW50IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbiAqLworCisjaWYgWVlERUJVRyAh
PSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIGludCBpOworCisgICAgICBmcHJpbnRm
IChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisJICAgICAgIHl5
biwgeXlybGluZVt5eW5dKTsKKworICAgICAgLyogUHJpbnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVk
dWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCisgICAgICBmb3IgKGkgPSB5eXByaHNbeXluXTsg
eXlyaHNbaV0gPiAwOyBpKyspCisJZnByaW50ZiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJo
c1tpXV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiIC0+ICVzXG4iLCB5eXRuYW1lW3l5cjFb
eXluXV0pOworICAgIH0KKyNlbmRpZgorCiskICAgLyogdGhlIGFjdGlvbiBmaWxlIGdldHMgY29w
aWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2lnbiAqLworICB5eXZzcCAtPSB5eWxlbjsK
KyAgeXlzc3AgLT0geXlsZW47CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwIC09IHl5bGVu
OworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAg
ICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInN0YXRl
IHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3Rk
ZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAg
IH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisKKyNpZmRlZiBZWUxTUF9ORUVERUQK
KyAgeXlsc3ArKzsKKyAgaWYgKHl5bGVuID09IDApCisgICAgeworICAgICAgeXlsc3AtPmZpcnN0
X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKKyAgICAgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5
eWxsb2MuZmlyc3RfY29sdW1uOworICAgICAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+
bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwLTEpLT5sYXN0X2Nv
bHVtbjsKKyAgICAgIHl5bHNwLT50ZXh0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg
ICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2xpbmU7CisgICAgICB5
eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfY29sdW1uOworICAgIH0K
KyNlbmRpZgorCisgIC8qIE5vdyAic2hpZnQiIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4K
KyAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBnb2VzIHRvLAorICAgICBiYXNlZCBvbiB0
aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KKyAgICAgYW5kIHRoZSBydWxlIG51bWJlciByZWR1
Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9b
eXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAoeXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUg
PD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5
eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZ
WU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWVycmxhYjogICAvKiBoZXJlIG9u
IGRldGVjdGluZyBlcnJvciAqLworCisgIGlmICghIHl5ZXJyc3RhdHVzKQorICAgIC8qIElmIG5v
dCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAq
LworICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorICAg
ICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5
biA8IFlZTEFTVCkKKwl7CisJICBpbnQgc2l6ZSA9IDA7CisJICBjaGFyICptc2c7CisJICBpbnQg
eCwgY291bnQ7CisKKwkgIGNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFggYXQgLXl5biBpZiBuZWMg
dG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNoZWNrLiAgKi8KKwkgIGZvciAoeCA9ICh5
eW4gPCAwID8gLXl5biA6IDApOworCSAgICAgICB4IDwgKHNpemVvZih5eXRuYW1lKSAvIHNpemVv
ZihjaGFyICopKTsgeCsrKQorCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCSAgICAg
IHNpemUgKz0gc3RybGVuKHl5dG5hbWVbeF0pICsgMTUsIGNvdW50Kys7CisJICBtc2cgPSAoY2hh
ciAqKSBtYWxsb2Moc2l6ZSArIDE1KTsKKwkgIGlmIChtc2cgIT0gMCkKKwkgICAgeworCSAgICAg
IHN0cmNweShtc2csICJwYXJzZSBlcnJvciIpOworCisJICAgICAgaWYgKGNvdW50IDwgNSkKKwkJ
eworCQkgIGNvdW50ID0gMDsKKwkJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4gOiAwKTsKKwkJ
ICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOyB4KyspCisJCSAg
ICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkgICAgICB7CisJCQlzdHJjYXQobXNnLCBj
b3VudCA9PSAwID8gIiwgZXhwZWN0aW5nIGAiIDogIiBvciBgIik7CisJCQlzdHJjYXQobXNnLCB5
eXRuYW1lW3hdKTsKKwkJCXN0cmNhdChtc2csICInIik7CisJCQljb3VudCsrOworCQkgICAgICB9
CisJCX0KKwkgICAgICB5eWVycm9yKG1zZyk7CisJICAgICAgZnJlZShtc2cpOworCSAgICB9CisJ
ICBlbHNlCisJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBl
eGNlZWRlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8K
Kwl5eWVycm9yKCJwYXJzZSBlcnJvciIpOworICAgIH0KKworICBnb3RvIHl5ZXJybGFiMTsKK3l5
ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlv
biAqLworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIGlmIGp1c3Qg
dHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4gZXJyb3Is
IGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2Yg
aW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlBQk9SVDsKKworI2lmIFlZ
REVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJEaXNjYXJk
aW5nIHRva2VuICVkICglcykuXG4iLCB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworI2VuZGlm
CisKKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkg
dG8gcmV1c2UgbG9va2FoZWFkIHRva2VuCisgICAgIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvciB0
b2tlbi4gICovCisKKyAgeXllcnJzdGF0dXMgPSAzOwkJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0
ZWQgZGVjcmVtZW50cyB0aGlzICovCisKKyAgZ290byB5eWVycmhhbmRsZTsKKworeXllcnJkZWZh
dWx0OiAgLyogY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0
aGUgZXJyb3IgdG9rZW4uICovCisKKyNpZiAwCisgIC8qIFRoaXMgaXMgd3Jvbmc7IG9ubHkgc3Rh
dGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRva2VucworICAgICBzaG91bGQgc2hpZnQg
dGhlbS4gICovCisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOyAgLyogSWYgaXRzIGRlZmF1bHQg
aXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhlcndpc2UgcG9wIGl0LiovCisgIGlmICh5
eW4pIGdvdG8geXlkZWZhdWx0OworI2VuZGlmCisKK3l5ZXJycG9wOiAgIC8qIHBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuICovCisK
KyAgaWYgKHl5c3NwID09IHl5c3MpIFlZQUJPUlQ7CisgIHl5dnNwLS07CisgIHl5c3RhdGUgPSAq
LS15eXNzcDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsKKyNlbmRpZgorCisjaWYg
WVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3AxID0g
eXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogc3RhdGUgc3RhY2sgbm93
Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkKKwlmcHJpbnRmIChzdGRlcnIsICIgJWQi
LCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorI2VuZGlm
CisKK3l5ZXJyaGFuZGxlOgorCisgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9
PSBZWUZMQUcpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluICs9IFlZVEVSUk9SOwor
ICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IFlZVEVSUk9S
KQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYg
KHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycnBv
cDsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxz
ZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycnBvcDsKKworICBpZiAoeXluID09IFlZRklO
QUwpCisgICAgWVlBQ0NFUFQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisg
ICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIik7CisjZW5kaWYKKwor
ICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5
eWxsb2M7CisjZW5kaWYKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7Cit9
CkluZGV4OiBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
NTggQEAKKworI2xpbmUgMyAic3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nLmNwcCIKKworI2RlZmlu
ZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVy
YXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhf
TUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5l
IFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lP
TiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0
aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisv
KiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBk
ZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKwor
LyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3Ig
bWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19W
RVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlU
X01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxp
bWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERD
X0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisj
aW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRl
ZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQz
Ml90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2ln
bmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50
OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2VuZGlmIC8qICEgQzk5ICovCisKKy8qIExp
bWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5U
OF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNk
ZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYg
SU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEp
CisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAg
ICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAg
ICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5U
MzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9N
QVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRl
ZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNl
bmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAg
KDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLworCisjaWZk
ZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBp
cyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNlCS8qICEgX19jcGx1c3Bs
dXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8K
KyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0VfQ09OU1QKKworI2VuZGlm
CS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KKwor
I2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0CisjZWxzZQorI2RlZmlu
ZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNk
ZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3Np
Ymx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4g
YXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50
IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhl
CisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVk
IGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAg
VGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBk
byBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVz
cworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiAoeXlfc3RhcnQp
ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBh
IHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRv
IHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxp
dHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCgoeXlfc3RhcnQpIC0gMSkgLyAyKQorI2RlZmlu
ZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEg
Z2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VO
RF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0
YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHl5cmVz
dGFydCh5eWluICApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKworLyogU2l6
ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZp
bmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4g
YnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSAr
IDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVG
RkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVm
IFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworZXh0ZXJuIHl5X3NpemVfdCB5eWxlbmc7
CisKK2V4dGVybiBGSUxFICp5eWluLCAqeXlvdXQ7CisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5V
RV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1Rf
TEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVz
dCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAg
ICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkg
aXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKKyAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVy
cyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURFIHl5bGV4LiAKKyAgICAgKiAgICAgICBP
bmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0
aGF0LCBhbmQgc2F3CisgICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4gYSBub24t
eXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKKyAgICAgKiAgICAgICBub3JtYWxs
eSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0
LgorICAgICAqLworICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAg
IGRvIHsgXAorICAgICAgICAgICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIGZvciAo
IHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGlu
ZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgwKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhl
IGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAq
LworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBv
ZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9
IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5
eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAor
CQkoeXlfY19idWZfcCkgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01P
UkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4g
Ki8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMs
ICh5eXRleHRfcHRyKSAgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNk
ZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQor
CXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQg
YnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5w
dXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGlu
Y2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5
eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9i
dWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3Qg
eXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdl
IGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0
LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlf
aXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlu
cHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1
dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRv
IG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5l
LgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29u
c2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14n
IHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBu
b3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwg
VGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1u
IGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1
ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmls
bF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJf
TkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVu
IHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdl
IG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQor
CSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUu
ICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRo
b3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVu
IHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3Igor
CSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2Fu
bmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAq
LworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlf
U1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBTdGFjayBvZiBpbnB1dCBidWZmZXJzLiAq
Lworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsgLyoqPCBpbmRleCBvZiB0
b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXggPSAwOyAv
Kio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGljIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1
ZmZlcl9zdGFjayA9IDA7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisKKy8qIFdlIHByb3Zp
ZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICog
ZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFs
CisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFj
aywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoICh5eV9idWZmZXJf
c3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoeXlfYnVmZmVyX3N0YWNrKVso
eXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxM
KQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0
aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBs
dmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZlcl9zdGFja190b3ApXQorCisv
KiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4geXl0ZXh0IGlzIGZv
cm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0YXRpYyB5eV9zaXplX3QgeXlf
bl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8K
K3l5X3NpemVfdCB5eWxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBi
dWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFyICopIDA7CitzdGF0aWMg
aW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0
YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxh
ZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVz
CisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNr
IC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKwordm9p
ZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOworWVlfQlVGRkVSX1NUQVRFIHl5X2Ny
ZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBiICApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7CisKK3N0YXRp
YyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOworc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5
eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQorCitZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7CitZWV9CVUZGRVJfU1RB
VEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOworWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAgKTsK
Kwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqeXlyZWFsbG9jICh2b2lkICos
eXlfc2l6ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdf
YnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNf
aW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAg
ICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpF
ICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwK
Kwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAg
ICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVm
aW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKwor
LyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcChuKSAxCisjZGVmaW5lIFlZ
X1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOworCitGSUxFICp5
eWluID0gKEZJTEUgKikgMCwgKnl5b3V0ID0gKEZJTEUgKikgMDsKKwordHlwZWRlZiBpbnQgeXlf
c3RhdGVfdHlwZTsKKworZXh0ZXJuIGludCB5eWxpbmVubzsKKworaW50IHl5bGluZW5vID0gMTsK
KworZXh0ZXJuIGNoYXIgKnl5dGV4dDsKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHQKKworc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkICk7CitzdGF0aWMg
eXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3Rh
dGUgICk7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCApOworc3RhdGljIHZv
aWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAgKTsKKworLyogRG9uZSBhZnRl
ciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAq
IGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlf
RE9fQkVGT1JFX0FDVElPTiBcCisJKHl5dGV4dF9wdHIpID0geXlfYnA7IFwKKwl5eWxlbmcgPSAo
c2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwkoeXlfaG9sZF9jaGFyKSA9ICp5eV9jcDsgXAor
CSp5eV9jcCA9ICdcMCc7IFwKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsKKworI2RlZmluZSBZWV9O
VU1fUlVMRVMgMTQyCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQzCisvKiBUaGlzIHN0cnVj
dCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5l
Y2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92
ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0MDddID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgIDE0MywgIDE0MSwgIDE0MCwgIDE0MCwgIDEyNSwgIDEzMSwKKyAgICAgIDEzNiwg
IDEyMCwgIDEyMSwgIDEyOSwgIDEyOCwgIDExNywgIDEyNiwgIDEyNCwgIDEzMCwgICA4OCwKKyAg
ICAgICA4OCwgIDExOCwgIDExNCwgIDEzMiwgIDExOSwgIDEzMywgIDEzNywgICA4NCwgIDEyMiwg
IDEyMywKKyAgICAgIDEzNSwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgIDExNSwgIDEzNCwgIDExNiwgIDEy
NywgIDEzOSwgIDE0MiwgIDE0MSwgIDEzOCwgIDExMSwKKyAgICAgICA5NywgIDExNiwgIDEwNSwg
IDEwMCwgICA5NSwgIDEwMywgICA5MywgIDEwNCwgICA5NCwgICA5MSwKKyAgICAgICA5MiwgICAg
MCwgICA5NiwgICA5MCwgICA4NiwgICA4NywgICAgMCwgICAgMCwgICA4OCwgIDEyMywKKyAgICAg
IDExNSwgIDEyMiwgIDExMiwgIDEwOCwgIDExMCwgIDEwOSwgIDExMywgICA4NCwgIDEwMSwgIDEw
NywKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwKKworICAgICAgIDEzLCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDE2
LCAgIDE4LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAg
IDg0LCAgIDg0LCAgMTAyLCAgMTA2LCAgMTM4LCAgICAwLCAgICAwLCAgICAxLCAgIDkwLCAgICAw
LAorICAgICAgICAwLCAgIDg5LCAgIDg1LCAgIDk4LCAgIDk5LCAgIDQ0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDE0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDIyLCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDE5LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorCisgICAgICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
CisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgIDAsICAgOTEsICAgIDAsICAgOTAsICAg
ODQsICAgMjQsCisgICAgICAgODQsICAgODQsICAgODEsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsCisgICAgICAgMTcsICAgNDcsICAgODQsICAgODQsICAgODQsICAg
ODQsICAgODQsICAgNTIsICAgNjYsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgNjMsICAgIDUsICAgMjksCisgICAgICAgMzAsICAgMzEsICAg
ODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNTAsICAgMjUsICAgODQsCisg
ICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgMzIsICAgMzMsICAgMzQsICAgMjMs
ICAgODQsCisgICAgICAgODQsICAgODQsICAgMTEsICAgMzgsICAgMzksICAgNDAsICAgNDUsICAg
IDgsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgNzcsICAgNzgsICAgNzksICAgODQs
ICAgMjYsICAgNjcsICAgMjEsICAgNzQsCisKKyAgICAgICA3NSwgICA3NiwgICAgMywgICA3MSwg
ICA3MiwgICA3MywgICA4NCwgICAyMCwgICA2OSwgICA4NCwKKyAgICAgICA4NCwgICAzNSwgICAz
NiwgICAzNywgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwg
ICA4NCwgICA4NCwgICA2NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAg
ICAgICA4NCwgICA0NiwgICA4NCwgICA4MywgICA4NCwgICA4NCwgICAxNSwgICA4NCwgICA4NCwg
ICA4NCwKKyAgICAgICA4NCwgICA2NSwgICA2MCwgICA1NSwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA3MCwKKyAgICAgICA1MSwgICA4NCwgICA1OCwgICAyOCwgICA4NCwgICA4MCwg
ICA1OSwgICA0MywgICA1MywgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA1NCwgICAyNywgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICAgNCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA0OCwgICAgOSwKKyAgICAgICA4NCwgICAx
MCwgICA4NCwgICA4NCwgICAxMiwgICA2MSwgICA4NCwgICA4NCwgICA4NCwgICA1NiwKKyAgICAg
ICA4NCwgICA4NCwgICA4NCwgICA0OSwgICA2OCwgICA1NywgICAgNywgICA2MiwgICAgMiwgICA4
MiwKKworICAgICAgICA2LCAgIDQxLCAgIDg0LCAgIDg0LCAgIDQyLCAgICAwCisgICAgfSA7CisK
K3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwg
ICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwgICAg
MSwgICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKKyAgICAgICAgOCwgICAgOSwgICAxMCwg
ICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKKyAgICAgICAxOCwgICAx
OSwgICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKKyAgICAg
ICAyNCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAy
NywKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzMSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MSwgICAzMiwgICAzMSwgICAzMSwKKyAgICAgICAzMywgICAgMSwgICAzNCwgICAzNSwgICAzMSwg
ICAgMSwgICAzNiwgICAzNywgICAzOCwgICAzOSwKKworICAgICAgIDQwLCAgIDQxLCAgIDQyLCAg
IDQzLCAgIDQ0LCAgIDMxLCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LAorICAgICAgIDQ5LCAgIDUw
LCAgIDMxLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LAorICAgICAg
IDU4LCAgIDU5LCAgIDYwLCAgIDYxLCAgIDYyLCAgIDYzLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjRdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAg
MiwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwg
ICAgMiwgICAgMiwKKyAgICAgICAgMywgICAgMywgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0MTFd
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICA2MywgICAgMCwgIDYwMCwgIDYwMSwg
IDYwMSwgIDYwMSwgIDU3NSwgIDEwMywKKyAgICAgIDEyMywgIDYwMSwgIDYwMSwgIDU3NCwgIDEy
MCwgIDYwMSwgIDExOSwgIDExNywgIDEzMSwgIDE0MywKKyAgICAgIDE1MSwgIDU3MiwgIDYwMSwg
IDE2OSwgIDU3MiwgIDExNCwgIDYwMSwgICAgMCwgIDYwMSwgIDYwMSwKKyAgICAgIDExNywgICA5
NiwgIDEwMiwgIDEzNiwgIDE0MCwgIDEzMCwgIDE1MCwgIDU0NiwgIDExMCwgIDE1NiwKKyAgICAg
IDU0NSwgIDE2MiwgIDE1MiwgIDUzOSwgIDE2NywgIDU1MiwgIDE3MCwgIDE2OSwgIDE2NywgIDE4
OCwKKyAgICAgIDU0OCwgIDYwMSwgIDExOCwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDU3Niwg
ICAgMCwgIDYwMSwKKyAgICAgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYw
MSwgIDYwMSwgIDYwMSwgIDIxNCwKKyAgICAgIDYwMSwgIDU4NiwgIDYwMSwgIDIyMywgIDIzMiwg
IDI1MSwgIDI2NywgICAgMCwgIDI3NywgIDYwMSwKKyAgICAgIDYwMSwgIDYwMSwgIDU2NCwgIDYw
MSwgIDYwMSwgIDYwMSwgIDU2MywgICAgMCwgIDYwMSwgIDYwMSwKKyAgICAgIDUzOSwgIDUzMiwg
IDUzNSwgIDU0MywgIDU0MiwgIDUyOSwgIDU0NCwgIDUzMSwgIDUzNywgIDUyNSwKKworICAgICAg
NTIyLCAgNTM1LCAgNTIyLCAgNTE5LCAgNTE5LCAgNTI1LCAgNTEzLCAgNTIwLCAgNTE3LCAgNTI3
LAorICAgICAgNTEzLCAgNTE5LCAgNTIyLCAgNTIzLCAgICAwLCAgMjUzLCAgNTIyLCAgMTYwLCAg
NTA4LCAgNTIxLAorICAgICAgNTEyLCAgNTE0LCAgNTA0LCAgNTE4LCAgNTE1LCAgNTE3LCAgNTAw
LCAgNTA1LCAgNTAyLCAgNDkxLAorICAgICAgMTcxLCAgNTA1LCAgNTAxLCAgNTAzLCAgNDkyLCAg
NDk1LCAgMTczLCAgNTAwLCAgNDkyLCAgNTA0LAorICAgICAgMjExLCAgNDk3LCAgNjAxLCAgNjAx
LCAgICAwLCAgMzAzLCAgNTM3LCAgNjAxLCAgMzA5LCAgMzI1LAorICAgICAgMzM1LCAgMzQxLCAg
ICAwLCAgNjAxLCAgNjAxLCAgICAwLCAgNDg4LCAgNDkyLCAgNTAxLCAgNDk4LAorICAgICAgNDgy
LCAgNDgyLCAgMTgzLCAgNDk3LCAgNDk0LCAgNDk0LCAgNDkyLCAgNDg5LCAgNDgxLCAgNDg3LAor
ICAgICAgNDc0LCAgNDg1LCAgNDg4LCAgICAwLCAgNDg1LCAgNDczLCAgNDgwLCAgNDc3LCAgNDgx
LCAgNDc0LAorICAgICAgNDYzLCAgNDYyLCAgNDc1LCAgNDc4LCAgNDc1LCAgNDcwLCAgNDYxLCAg
MjQxLCAgNDY2LCAgNDY5LAorICAgICAgNDYwLCAgNDU3LCAgNDYxLCAgNDY3LCAgNDU4LCAgNDQ5
LCAgNDUyLCAgNDUwLCAgNDYwLCAgNDQ2LAorCisgICAgICA0NDQsICA0NDQsICA0NDYsICA0NDMs
ICA0NTQsICA0NTMsICAyMjQsICA0NDgsICA0NDMsICA0MzIsCisgICAgICAyNTcsICA0NTAsICA0
NTIsICA0NDEsICAzNDcsICAzNTMsICAzNTksICAzNjUsICA0NDIsICAgIDAsCisgICAgICA0NDAs
ICAyOTIsICAgIDAsICA0MzIsICA0MzAsICA0MzgsICA0MjcsICA0NDQsICA0MzMsICAzMTMsCisg
ICAgICAgIDAsICAgIDAsICA0MjcsICA0MzcsICA0MzcsICA0MjIsICAzMjksICAgIDAsICAgIDAs
ICA0MjQsCisgICAgICAzNjksICA0MjUsICA0MTksICA0MTgsICA0MTksICA0MTgsICAzNzIsICAg
IDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICA0MTQsICA0MTUsICA0MjAsICA0MTEs
ICA0MjQsICA0MTksICA0MTgsICA0MTAsCisgICAgICA0MTQsICA0MDYsICA0MDksICA0MTMsICA0
MTgsICA0MTcsICA0MDgsICAgIDAsICAgIDAsICA0MTQsCisgICAgICA0MDMsICA0MDMsICA0MDgs
ICA0MDcsICA0MDQsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTQsCisgICAgICA0MDYsICA0
MDgsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTYsICAzOTcsCisgICAg
ICAzOTEsICA0MDEsICAgIDAsICAgIDAsICAgIDAsICAzOTIsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsCisKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5OSwgICAg
MCwgICAgMCwgIDM5NywKKyAgICAgIDM5MywgICAgMCwgICAgMCwgICAgMCwgIDM4OSwgIDM4NSwg
IDM5MCwgIDM4MCwgIDM5MywgIDM3OSwKKyAgICAgIDM5MiwgIDM4MSwgIDM4OCwgICAgMCwgIDM4
NiwgIDM4OCwgIDM3MiwgIDM4MSwgIDM4NywgIDM4MiwKKyAgICAgIDM3MCwgICAgMCwgIDM3Miwg
ICAgMCwgIDM3MSwgIDM3NCwgICAgMCwgIDM2MywgIDM2MiwgIDM2MiwKKyAgICAgIDM3NSwgICAg
MCwgIDM3NywgICAgMCwgIDM3NiwgIDM3NSwgIDM2MCwgIDM3MywgIDM2MCwgICAgMCwKKyAgICAg
ICAgMCwgIDM2MywgICAgMCwgICAgMCwgIDM1NSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM1
MiwKKyAgICAgIDM2MywgIDM1NiwgIDM2MiwgIDM1OSwgIDM1NCwgIDM0NiwgIDI5OCwgICAgMCwg
ICAgMCwgIDI5MCwKKyAgICAgIDI5NiwgIDI4NSwgICAgMCwgIDI3OCwgIDI3NCwgIDI2MywgIDI2
MSwgIDI2NSwgICAgMCwgICAgMCwKKyAgICAgIDI2NSwgICAgMCwgIDI2MSwgIDI2MCwgICAgMCwg
ICAgMCwgIDI1OCwgIDIzNSwgIDI0MCwgICAgMCwKKyAgICAgIDIxMywgIDIyNywgIDE5MiwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKworICAgICAgICAwLCAgICAw
LCAgMTczLCAgMTM3LCAgICAwLCAgNjAxLCAgMzkwLCAgMzkyLCAgMzk1LCAgMTQ4CisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDExXSA9CisgICAgeyAgIDAs
CisgICAgICA0MDYsICAgIDEsICA0MDYsICAgIDMsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDgsICA0MDYsCisg
ICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsCisgICAgICA0MDYsICA0MDksICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MTAsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisKKyAgICAgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAg
ICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNiwgIDQwNiwgIDQwOCwgIDQwNiwg
IDQwOSwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQwNiwgIDQwNiwgIDQxMCwgIDQwNiwgIDQw
NiwgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywKKworICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorCisgICAgICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
CisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisg
ICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgICAgMCwgIDQwNiwgIDQwNiwgIDQwNiwgIDQwNgorICAgIH0gOworCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY2NV0gPQorICAgIHsgICAwLAorICAgICAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAorICAg
ICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAg
IDIxLAorICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI4
LCAgIDI4LCAgIDI4LAorICAgICAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAg
IDMzLCAgIDM0LCAgIDM1LCAgIDM2LAorICAgICAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDI4
LCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDQ1LAorICAgICAgIDQ2LCAgIDQ3LCAgIDQ4LCAg
IDQ5LCAgIDUwLCAgIDUxLCAgIDI4LCAgIDI4LCAgIDI4LCAgIDUyLAorICAgICAgIDUzLCAgIDU0
LCAgIDU1LCAgICA2LCAgIDU2LCAgIDU3LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAg
ICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgIDU4LCAgICA2LCAgICA2LCAgICA2
LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAg
ICA2LCAgIDU5LAorICAgICAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgICA2LCAgICA2
LCAgICA2LCAgIDU5LCAgIDU5LAorCisgICAgICAgNTksICAgNTksICAgNTksICAgNTksICAgNTks
ICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisgICAgICAgNTksICAgNTksICAgNTksICAg
NTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisgICAgICAgNTksICAgNTks
ICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgNjEsICAgNjIsICAgNjMsICAgNjYsCisgICAgICAg
NjgsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgODYsICAgODcsICAgNzEs
CisgICAgICAgODksICAxNDMsICAgNjksICAgNjcsICAgNzIsICAxMTIsICAgNjQsICAgOTEsICAg
OTIsICAxNTMsCisgICAgICAgOTMsICAgOTAsICAgOTQsICAxMTMsICAgNzMsICAgNzQsICAgOTUs
ICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgNzUsICAgNzUsICAgNzYsICAgNzQsICAxMTQsICAg
NzksICAgNzksICAgNzksICAgNzksICAgNzksCisgICAgICAgNzksICAgOTYsICAgNzcsICAgODEs
ICAgNzgsICAxMDMsICA0MDUsICAxMDQsICAxNDQsICAgOTksCisgICAgICAgNzcsICAgOTcsICAg
NzcsICAxMDAsICAgOTgsICAxMDYsICAxMDUsICAxMjEsICAxMDEsICAgODIsCisgICAgICAgNzcs
ICAgODMsICAgODQsICAxMDcsICAxMDIsICAxMDgsICAxMTUsICAxMTksICAxMDksICAgNzgsCisK
KyAgICAgIDEyMiwgIDEyMCwgIDEyNCwgIDExNiwgIDExMCwgIDEyOCwgIDIwMCwgIDE4NiwgIDEz
MywgIDQwNCwKKyAgICAgIDExNywgIDEzNCwgIDEyOSwgIDEzMCwgIDEzNywgIDE4NywgIDIwNywg
IDEyNSwgIDEzOCwgIDEzNSwKKyAgICAgIDEyNiwgIDIwMSwgIDEzMSwgIDEzOSwgIDIwOCwgIDEz
MiwgIDEzNiwgIDE0MCwgICA3MCwgICA3MCwKKyAgICAgICA3MCwgICA3MCwgICA3MCwgICA3MCwg
IDIyNSwgIDIyNiwgIDE0MSwgIDE0OSwgIDE0OSwgIDE0OSwKKyAgICAgIDE0OSwgIDE0OSwgIDE0
OSwgIDE0NiwgICA3NCwgIDQwMywgICA3NSwgICA3NSwgICA3NSwgICA3NSwKKyAgICAgICA3NSwg
ICA3NiwgIDE1MCwgIDE0NiwgIDIxMiwgIDQwMiwgIDIxMywgIDI1MCwgIDI1MSwgIDI1MiwKKyAg
ICAgIDQwMSwgICA3NywgIDE1MCwgICA3NCwgIDI3MSwgICA3NiwgICA3NiwgICA3NiwgICA3Niwg
ICA3NiwKKyAgICAgICA3NiwgICA3NywgIDI3MiwgIDI3NiwgIDI3NywgIDI3OCwgIDE1MSwgIDM5
MiwgIDE1MSwgIDQwMCwKKyAgICAgICA3NywgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1Miwg
IDE1MiwgIDM5OSwgIDM5MywgICA3NCwKKyAgICAgICA3NywgICA3OSwgICA3OSwgICA3OSwgICA3
OSwgICA3OSwgICA3OSwgIDM5OCwgIDE4MCwgIDM5NywKKworICAgICAgMzk2LCAgMTgxLCAgMTgy
LCAgMzk1LCAgMzk0LCAgMTgzLCAgIDc3LCAgMTg0LCAgMjg0LCAgMjg1LAorICAgICAgMjg2LCAg
MzkxLCAgMjE1LCAgMzkwLCAgMjE1LCAgMzg5LCAgIDc3LCAgMjE2LCAgMjE2LCAgMjE2LAorICAg
ICAgMjE2LCAgMjE2LCAgMjE2LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAg
MjkzLAorICAgICAgMjk0LCAgMjk1LCAgMzg4LCAgMzg3LCAgMjE3LCAgMzg2LCAgMjE3LCAgMzg1
LCAgMTUwLCAgMjE4LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMzAwLCAg
MzAxLCAgMzAyLCAgMTUwLCAgMTUyLAorICAgICAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUy
LCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAorICAgICAgMTUyLCAgMjE2LCAgMjE2LCAg
MjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LAorICAgICAgMjE2LCAgMjE2
LCAgMjE2LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LAorICAgICAg
MjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMzA0LCAgMzA1LCAgMzA2LCAgMzEyLCAgMzEz
LAorICAgICAgMzE0LCAgIDg4LCAgIDg4LCAgMTQ1LCAgMTQ1LCAgMTQ3LCAgMTQ3LCAgMTQ3LCAg
Mzg0LCAgMzgzLAorCisgICAgICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAz
NzYsICAzNzUsICAzNzQsICAzNzMsCisgICAgICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgs
ICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCisgICAgICAzNjIsICAzNjEsICAzNjAsICAz
NTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQsICAzNTMsCisgICAgICAzNTIsICAzNTEs
ICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsCisgICAgICAz
NDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMs
CisgICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAz
MjQsICAzMjMsCisgICAgICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTgsICAzMTcsICAzMTYs
ICAzMTUsICAzMTEsICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDcsICAzMDMsICAyOTksICAy
OTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsCisgICAgICAyOTAsICAyODksICAyODgsICAyODcs
ICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzUsCisgICAgICAyNzQsICAyNzMsICAy
NzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsCisKKyAgICAgIDI2
MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywK
KyAgICAgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0
MSwgIDI0MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIzMiwgIDIzMSwgIDIzMCwKKyAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNCwgIDIyMywgIDIy
MiwgIDIyMSwgIDIyMCwgIDIxOSwgIDE0OCwKKyAgICAgIDIxNCwgIDIxMSwgIDIxMCwgIDIwOSwg
IDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDE5OSwKKyAgICAgIDE5OCwgIDE5NywgIDE5
NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwKKyAgICAgIDE4OCwg
IDE4NSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwKKyAg
ICAgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2Mywg
IDE2MiwKKyAgICAgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1
NCwgIDE0OCwgICA3MiwKKyAgICAgIDE0MiwgIDEyNywgIDEyMywgIDExOCwgIDExMSwgICA4NSwg
ICA4MCwgICA2NSwgICA2MCwgIDQwNiwKKworICAgICAgICA1LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAg
ICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2CisgICAg
fSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjY1XSA9CisgICAgeyAg
IDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisKKyAgICAgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywK
KyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAxMCwgICAxMCwgICAx
MSwgICAxNSwKKyAgICAgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwg
ICAyNiwgICAyNiwgICAxOSwKKyAgICAgICAzMSwgICA1MywgICAxNywgICAxNSwgICAxOSwgICAz
OSwgICAxMSwgICAzMiwgICAzMiwgIDQxMCwKKyAgICAgICAzMywgICAzMSwgICAzMywgICAzOSwg
ICAxOSwgICAyMCwgICAzMywgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAy
MCwgICAyMSwgICAzOSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKyAgICAgICAyMSwg
ICAzNCwgICAyMCwgICAyNCwgICAyMCwgICAzNiwgIDQwNCwgICAzNiwgICA1MywgICAzNSwKKyAg
ICAgICAyMSwgICAzNCwgICAyMCwgICAzNSwgICAzNCwgICAzNywgICAzNiwgICA0MywgICAzNSwg
ICAyNCwKKyAgICAgICAyMSwgICAyNCwgICAyNCwgICAzNywgICAzNSwgICAzNywgICA0MCwgICA0
MiwgICAzNywgICAyMCwKKworICAgICAgIDQzLCAgIDQyLCAgIDQ1LCAgIDQwLCAgIDM3LCAgIDQ3
LCAgMTMxLCAgMTE4LCAgIDQ4LCAgNDAzLAorICAgICAgIDQwLCAgIDQ4LCAgIDQ3LCAgIDQ3LCAg
IDQ5LCAgMTE4LCAgMTM3LCAgIDQ1LCAgIDQ5LCAgIDQ4LAorICAgICAgIDQ1LCAgMTMxLCAgIDQ3
LCAgIDUwLCAgMTM3LCAgIDQ3LCAgIDQ4LCAgIDUwLCAgIDcwLCAgIDcwLAorICAgICAgIDcwLCAg
IDcwLCAgIDcwLCAgIDcwLCAgMTYzLCAgMTYzLCAgIDUwLCAgIDc0LCAgIDc0LCAgIDc0LAorICAg
ICAgIDc0LCAgIDc0LCAgIDc0LCAgIDcwLCAgIDc1LCAgMzkzLCAgIDc1LCAgIDc1LCAgIDc1LCAg
IDc1LAorICAgICAgIDc1LCAgIDc1LCAgIDc0LCAgIDcwLCAgMTQxLCAgMzkyLCAgMTQxLCAgMTg4
LCAgMTg4LCAgMTg4LAorICAgICAgMzkxLCAgIDc1LCAgIDc0LCAgIDc2LCAgMjA3LCAgIDc2LCAg
IDc2LCAgIDc2LCAgIDc2LCAgIDc2LAorICAgICAgIDc2LCAgIDc1LCAgMjA3LCAgMjExLCAgMjEx
LCAgMjExLCAgIDc3LCAgMzc3LCAgIDc3LCAgMzg5LAorICAgICAgIDc2LCAgIDc3LCAgIDc3LCAg
IDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgMzg4LCAgMzc3LCAgIDc5LAorICAgICAgIDc2LCAgIDc5
LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgMzg3LCAgMTE2LCAgMzg0LAorCisgICAg
ICAzODMsICAxMTYsICAxMTYsICAzODEsICAzNzgsICAxMTYsICAgNzksICAxMTYsICAyMjIsICAy
MjIsCisgICAgICAyMjIsICAzNzYsICAxNDYsICAzNzUsICAxNDYsICAzNzQsICAgNzksICAxNDYs
ICAxNDYsICAxNDYsCisgICAgICAxNDYsICAxNDYsICAxNDYsICAxNDksICAxNDksICAxNDksICAx
NDksICAxNDksICAxNDksICAyMzAsCisgICAgICAyMzAsICAyMzAsICAzNzIsICAzNzEsICAxNTAs
ICAzNzAsICAxNTAsICAzNjcsICAxNDksICAxNTAsCisgICAgICAxNTAsICAxNTAsICAxNTAsICAx
NTAsICAxNTAsICAyMzcsICAyMzcsICAyMzcsICAxNDksICAxNTEsCisgICAgICAxNTEsICAxNTEs
ICAxNTEsICAxNTEsICAxNTEsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsCisgICAgICAx
NTIsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTYsICAyMTYsICAyMTYs
CisgICAgICAyMTYsICAyMTYsICAyMTYsICAyMTcsICAyMTcsICAyMTcsICAyMTcsICAyMTcsICAy
MTcsICAyMTgsCisgICAgICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAyMTgsICAyNDEsICAyNDEs
ICAyNDEsICAyNDcsICAyNDcsCisgICAgICAyNDcsICA0MDcsICA0MDcsICA0MDgsICA0MDgsICA0
MDksICA0MDksICA0MDksICAzNjYsICAzNjUsCisKKyAgICAgIDM2NCwgIDM2MywgIDM2MiwgIDM2
MSwgIDM2MCwgIDM1NSwgIDM1MiwgIDM0OSwgIDM0OCwgIDM0NywKKyAgICAgIDM0NiwgIDM0NSwg
IDM0MywgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNiwgIDMzNSwgIDMzMywKKyAgICAgIDMz
MSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyMywgIDMyMiwgIDMyMSwK
KyAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxMSwgIDMxMCwgIDMw
NywgIDI5NiwKKyAgICAgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4MiwgIDI4MSwgIDI4MCwg
IDI3NSwgIDI3NCwgIDI3MywKKyAgICAgIDI3MiwgIDI3MSwgIDI3MCwgIDI2NywgIDI2NiwgIDI2
NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwKKyAgICAgIDI2MCwgIDI1OSwgIDI1OCwgIDI1Nywg
IDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI0NiwgIDI0NSwKKyAgICAgIDI0NCwgIDI0MywgIDI0
MiwgIDI0MCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIyOSwgIDIyOCwKKyAgICAgIDIyNywg
IDIyNiwgIDIyNSwgIDIyNCwgIDIyMSwgIDIxOSwgIDIxNCwgIDIxMywgIDIxMiwgIDIxMCwKKyAg
ICAgIDIwOSwgIDIwOCwgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDIwMSwgIDIwMCwg
IDE5OSwKKworICAgICAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTkxLCAgMTkwLCAgMTg5LAorICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgy
LCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAorICAgICAgMTc3LCAgMTc2LCAgMTc1LCAgMTczLCAg
MTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LAorICAgICAgMTY2LCAgMTY1LCAgMTY0
LCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAgMTQ3LAorICAgICAgMTQyLCAg
MTQwLCAgMTM5LCAgMTM4LCAgMTM2LCAgMTM1LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMwLAorICAg
ICAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAgMTIyLCAgMTIxLCAg
MTIwLAorICAgICAgMTE5LCAgMTE3LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5
LCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAg
MTAwLCAgIDk5LCAgIDk4LCAgIDk3LAorICAgICAgIDk2LCAgIDk1LCAgIDk0LCAgIDkzLCAgIDky
LCAgIDkxLCAgIDg3LCAgIDgzLCAgIDcyLCAgIDU4LAorICAgICAgIDUxLCAgIDQ2LCAgIDQ0LCAg
IDQxLCAgIDM4LCAgIDI1LCAgIDIyLCAgIDE0LCAgICA5LCAgICA1LAorCisgICAgICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAg
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYs
ICA0MDYsICA0MDYKKyAgICB9IDsKKworLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVs
ZSBjb3VsZCBtYXRjaCBlb2wuICovCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVs
ZV9jYW5fbWF0Y2hfZW9sWzE0M10gPQorICAgIHsgICAwLAorMSwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwgMCwgMCwgICAgIH07CisK
K3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworc3RhdGljIGNo
YXIgKnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKK2V4dGVybiBpbnQgeXlfZmxleF9kZWJ1ZzsK
K2ludCB5eV9mbGV4X2RlYnVnID0gMDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZp
bml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBm
bGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRl
Y3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVm
aW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorY2hh
ciAqeXl0ZXh0OworLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisqLworLyogQmFzZWQgb24KK0FOU0kg
QyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbgorCitJbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNo
ZWQgdGhpcyBMZXggc3BlY2lmaWNhdGlvbiB0b2dldGhlciB3aXRoIGEgWWFjYyAKK2dyYW1tYXIg
Zm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMgZHJhZnQuICBUb20gU3RvY2tmaXNjaCByZXBv
c3RlZCAKK2JvdGggdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdCBvcmlnaW5hbCwgYXMgbWVu
dGlvbmVkIGluIHRoZSBhbnN3ZXIgCit0byBxdWVzdGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5n
LmMgRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgCitmaWxlIHVzZW5ldC9uZXQu
c291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLiAKKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNp
b24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIAorYXMgcG9zc2li
bGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlzY292ZXIgZGlzY3JlcGFuY2llcy4gCisK
K0p1dHRhIERlZ2VuZXIsIDE5OTUgCisqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUg
Imdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KKyNpZmRlZiBfTVND
X1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQorI2VuZGlmCisKK2ludCB5eV9p
bnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7CisKK2V4dGVybiBpbnQgeXlwYXJzZSh2b2lk
Kik7CisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsdm9pZCogcGFy
c2VDb250ZXh0TG9jYWwpCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKigoVFBhcnNlQ29udGV4dCop
KHBhcnNlQ29udGV4dExvY2FsKSkpCisgCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4
X3NpemUpIChyZXN1bHQgPSB5eV9pbnB1dChidWYsIG1heF9zaXplKSkKKworLyoKK1RPRE8oYWxv
a3ApOiB5eWxpbmVubyBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQgZmxleC5leGUgaW4gY29t
cGlsZXIvdG9vbHMuCitSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBu
ZXdlciB2ZXJzaW9uLgorKi8KKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUgRklFTERTIDEK
KworI2lmbmRlZiBZWV9FWFRSQV9UWVBFCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqCisj
ZW5kaWYKKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsKKworLyogQWNjZXNz
b3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24t
cmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHl5bGV4X2Rlc3Ry
b3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZGVi
dWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICh2b2lk
ICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICApOwor
CitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lkIHl5c2V0X2luICAoRklMRSAqIGluX3N0
ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklM
RSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCB5eWdldF9sZW5nICh2b2lkICk7CisKK2NoYXIg
Knl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAodm9pZCApOworCit2b2lk
IHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICApOworCisvKiBNYWNyb3MgYWZ0ZXIgdGhp
cyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICog
c2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh2b2lkICk7CisjZWxzZQorZXh0ZXJuIGludCB5
eXdyYXAgKHZvaWQgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3Rh
dGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICk7Cisj
ZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVu
ICh5eWNvbnN0IGNoYXIgKiApOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQgKTsKKyNlbHNlCitzdGF0
aWMgaW50IGlucHV0ICh2b2lkICk7CisjZW5kaWYKKworI2VuZGlmCisKKy8qIEFtb3VudCBvZiBz
dHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZf
U0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdo
YXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwor
I2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRo
ZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisg
Ki8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZW5k
aWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2Yg
Y2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIu
CisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhf
c2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2
ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXl5X3NpemVfdCBuOyBcCisJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0g
RU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYg
KCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBF
T0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwK
KwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBt
YXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJy
bm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89
MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKwor
LyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUg
Inl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0
aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRv
IGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0
ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisK
Ky8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93
cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFD
S19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVm
IFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJy
b3IoIG1zZyApCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVy
ZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0
ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJh
bWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEK
KworZXh0ZXJuIGludCB5eWxleCAodm9pZCk7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgg
KHZvaWQpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUg
YmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNF
Ul9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBy
dWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyBicmVhazsKKyNlbmRp
ZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJfQUNUSU9OCisKKy8qKiBUaGUg
bWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorICovCitZWV9E
RUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKKyAgICAKKwlp
ZiAoICEoeXlfaW5pdCkgKQorCQl7CisJCSh5eV9pbml0KSA9IDE7CisKKyNpZmRlZiBZWV9VU0VS
X0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhICh5eV9zdGFydCkgKQor
CQkJKHl5X3N0YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5
aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0
ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQl5eWVuc3VyZV9idWZm
ZXJfc3RhY2sgKCk7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOworCQl9CisKKwkJeXlfbG9hZF9idWZmZXJfc3Rh
dGUoICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBp
cyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkJLyogU3VwcG9y
dCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCisJCS8qIHl5X2Jw
IHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkg
KiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3Rl
ciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlf
YWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7CisJCQkJKHl5X2xhc3RfYWNjZXB0aW5n
X3N0YXRlKSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mp
ID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50
X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3Vy
cmVudF9zdGF0ZSA+PSA0MDcgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5
eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJ
CXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0MDYgKTsKKwkJeXlfY3AgPSAoeXlfbGFzdF9h
Y2NlcHRpbmdfY3Bvcyk7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUpOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5eV9hY3QgIT0g
WVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7
CisJCQlpbnQgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJ
CQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAgCisgICAgeXlsaW5lbm8rKzsK
KzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nl
c3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmlu
ZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJ
LyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3Ag
PSAoeXlfaG9sZF9jaGFyKTsKKwkJCXl5X2NwID0gKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQlnb3Rv
IHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CisvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLwor
WVlfUlVMRV9TRVRVUAoreyAvKiA/PyBjYXJyaWFnZSBhbmQvb3IgbGluZS1mZWVkPyAqLyB9Owor
CVlZX0JSRUFLCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSElHSF9Q
UkVDSVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJFQ0lTSU9OKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSA2OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBSRUNJ
U0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFUVFJJQlVURSk7IH0KKwlZWV9CUkVBSworY2Fz
ZSA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKENPTlNUX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihVTklGT1JNKTsgfQorCVlZX0JS
RUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKFZBUllJTkcpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQlJFQUspOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRE8pOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQorCVlZX0JSRUFLCitjYXNlIDE1OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFdISUxFKTsg
fQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKElGKTsgfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVMU0UpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oSU5fUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOToKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPVVRf
UVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTk9VVF9RVUFMKTsgfQorCVlZX0JSRUFLCitj
YXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQor
CVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRf
VFlQRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4oVk9JRF9UWVBFKTsgfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAor
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXgu
YiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDI2Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+
bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAy
NzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihESVNDQVJEKTsgfQorCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJFVFVSTik7IH0KKwlZWV9CUkVBSwor
Y2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMik7IH0KKwlZ
WV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklY
Myk7IH0KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4oTUFUUklYNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKFZFQzIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQorCVlZX0JSRUFLCitjYXNlIDM0OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzNToK
K1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzMpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7
IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4g
KEJWRUMyKTsgfQorCVlZX0JSRUFLCitjYXNlIDM5OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybiAoQlZFQzMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDA6CitZWV9SVUxFX1NFVFVQCit7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKwlZWV9CUkVBSworY2FzZSA0MToKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDI6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNDM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFNUUlVDVCk7IH0K
KwlZWV9CUkVBSworY2FzZSA0NDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7
IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDU6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDQ2OgorWVlfUlVMRV9T
RVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA0
NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNDg6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDQ5OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZl
ZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoKK1lZX1JVTEVfU0VUVVAK
K3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTE6CitZ
WV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFL
CitjYXNlIDUyOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTQ6CitZWV9SVUxFX1NFVFVQCit7ICBQ
YVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDU1OgorWVlfUlVM
RV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2Fz
ZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNTc6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDU4OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1OToKK1lZX1JVTEVfU0VU
VVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjA6
CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JS
RUFLCitjYXNlIDYxOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKwlZWV9CUkVBSworY2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjM6CitZWV9SVUxFX1NFVFVQCit7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDY0OgorWVlf
UlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSwor
Y2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNjY6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDY3OgorWVlfUlVMRV9TRVRVUAoreyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2ODoKK1lZX1JVTEVf
U0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
Njk6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZ
X0JSRUFLCitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzI6CitZWV9SVUxFX1NFVFVQ
Cit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDczOgor
WVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVB
SworY2FzZSA3NDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNzU6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDc2OgorWVlfUlVMRV9TRVRVUAoreyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3NzoKK1lZX1JV
TEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNzg6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQor
CVlZX0JSRUFLCitjYXNlIDc5OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgODE6CitZWV9SVUxFX1NF
VFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDgy
OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9C
UkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgODQ6CitZWV9SVUxFX1NFVFVQCit7ICAKKyAgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IAorICAgcHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIFBhSWRlbnRPclR5cGUoKnB5eWx2YWwtPmxl
eC5zdHJpbmcsIHBhcnNlQ29udGV4dCwgcHl5bHZhbC0+bGV4LnN5bWJvbCk7IAorfQorCVlZX0JS
RUFLCitjYXNlIDg1OgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09O
U1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODY6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwg
MCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA4NzoKK1lZX1JVTEVf
U0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmVycm9y
KHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBwYXJz
ZUNvbnRleHQucmVjb3ZlcigpOyByZXR1cm4gMDt9CisJWVlfQlJFQUsKK2Nhc2UgODg6CitZWV9S
VUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5p
ID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVB
SworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0
dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTA6CitZWV9SVUxFX1NFVFVQ
Cit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAoreyBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5dGV4dCkp
OyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5MjoKK1lZX1JVTEVf
U0VUVVAKK3sgIGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFsLT5sZXgubGluZSwgcGFy
c2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKKwlZWV9CUkVBSworY2FzZSA5
MzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihBRERfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNVQl9BU1NJR04pOyB9CisJWVlf
QlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oTVVMX0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoKK1lZX1JV
TEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihESVZfQVNT
SUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1PRF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nh
c2UgOTg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oTEVGVF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTk6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQVNTSUdOKTsg
fQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEw
MToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihYT1JfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMjoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPUl9BU1NJR04pOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTAzOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKElOQ19PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMDQ6CitZWV9SVUxF
X1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oREVDX09QKTsg
fQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihBTkRfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA2Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE9S
X09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKExFX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihHRV9PUCk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMTA6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oRVFfT1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTExOgorWVlfUlVMRV9TRVRVUAor
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE5FX09QKTsgfQorCVlZX0JS
RUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihMRUZUX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDExMzoKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9PUCk7
IH0KKwlZWV9CUkVBSworY2FzZSAxMTQ6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVy
bihTRU1JQ09MT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE1OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9
IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTY6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRf
QlJBQ0UpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbikgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKENPTE9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDExOToKK1lZX1JVTEVfU0VU
VVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRl
clR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMDoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4
dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsg
cmV0dXJuKExFRlRfUEFSRU4pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTIxOgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmluVHlwZVBh
cmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMjI6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
TEVGVF9CUkFDS0VUKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMzoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9CUkFDS0VUKTsgfQor
CVlZX0JSRUFLCitjYXNlIDEyNDoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oRklFTERTKTsgIHJl
dHVybihET1QpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI1OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJBTkcpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKERBU0gpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI3OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERFKTsgfQorCVlZX0JSRUFL
CitjYXNlIDEyODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihQTFVTKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyOToKK1lZX1JVTEVfU0VUVVAK
K3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVEFSKTsgfQorCVlZX0JS
RUFLCitjYXNlIDEzMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihTTEFTSCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzE6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUEVSQ0VOVCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxMzI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzM6
CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
UklHSFRfQU5HTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM0OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZFUlRJQ0FMX0JBUik7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQ0FSRVQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM2OgorWVlfUlVM
RV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFNUEVSU0FO
RCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzc6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVFU1RJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTM4OgorWVlfUlVMRV9TRVRVUAoreyAKK0JFR0lOKElOSVRJQUwpOyAgICAgIAorICAgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87ICAgICAKKyAgICBweXlsdmFsLT5sZXguc3RyaW5nID0g
TmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICAgcmV0dXJuIEZJRUxEX1NFTEVDVElPTjsgfQor
CVlZX0JSRUFLCitjYXNlIDEzOToKK1lZX1JVTEVfU0VUVVAKK3t9CisJWVlfQlJFQUsKK2Nhc2Ug
MTQwOgorLyogcnVsZSAxNDAgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyAgfQor
CVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9G
KEZJRUxEUyk6Cit7ICgmcGFyc2VDb250ZXh0KS0+QWZ0ZXJFT0YgPSB0cnVlOyB5eV9kZWxldGVf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsgeXl0ZXJtaW5hdGUoKTt9CisJWVlfQlJFQUsKK2Nh
c2UgMTQxOgorWVlfUlVMRV9TRVRVUAoreyBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCAi
RkxFWDogVW5rbm93biBjaGFyICIgPDwgeXl0ZXh0IDw8ICJcbiI7CisgICAgICAgICAgcmV0dXJu
IDA7IH0KKwlZWV9CUkVBSworY2FzZSAxNDI6CitZWV9SVUxFX1NFVFVQCitFQ0hPOworCVlZX0JS
RUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQg
bWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCQkv
KiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9
ICh5eV9ob2xkX2NoYXIpOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05F
VyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJj
ZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1
c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAor
CQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25z
aXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMu
ICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBp
cyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXAp
IHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCSh5
eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwor
CQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0
byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5j
ZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFz
dCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRp
b25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0
aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggKHl5X2Nf
YnVmX3ApIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFy
cyldICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlw
ZSB5eV9uZXh0X3N0YXRlOworCisJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8g
bWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICog
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3Np
YmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1t
aW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSku
CisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJl
bnRfc3RhdGUgKTsKKworCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwor
CQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAq
LworCQkJCXl5X2NwID0gKysoeXlfY19idWZfcCk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7
CisJCQkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7CisJCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICAp
ICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJKHl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAwOworCisJCQkJaWYgKCB5eXdyYXAoICkgKQorCQkJ
CQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5
eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNh
biBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJ
CQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRo
ZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3Rp
bGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJ
CQkJICovCisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOwor
CisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0
aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJl
YWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkoeXlfY19i
dWZfcCkgPQorCQkJCQkoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Owor
CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJ
CQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01P
UkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmWyh5eV9uX2NoYXJzKV07CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2Jw
ID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsK
KwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJ
ImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwor
CX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25l
IHRva2VuICovCit9IC8qIGVuZCBvZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIg
LSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXBy
ZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1Rf
Q09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgor
ICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlf
Z2V0X25leHRfYnVmZmVyICh2b2lkKQoreworICAgIAlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNl
ID0gKHl5dGV4dF9wdHIpOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQg
cmV0X3ZhbDsKKworCWlmICggKHl5X2NfYnVmX3ApID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJm
YXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiAp
OworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAg
KQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9G
LiAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIFlZX01PUkVfQURKID09
IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0Is
IHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1cm4g
RU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRj
aGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4K
KwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJLyog
VHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRv
IHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICgoeXlfY19idWZf
cCkgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21v
dmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJu
IGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKSA9IDA7CisKKwllbHNlCisJCXsK
KwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxlICggbnVtX3RvX3Jl
YWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBp
dC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVy
ICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOworCisJCQlpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9i
dWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQl5eV9zaXpl
X3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9
IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxz
ZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIg
KikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXly
ZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgICk7CisJCQkJ
fQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJ
CQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9G
QVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKKworCQkJKHl5X2NfYnVmX3ApID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29m
ZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51
bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURf
QlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQko
eXlfbl9jaGFycyksIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlpZiAoICh5eV9uX2NoYXJzKSA9
PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsK
KwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5aW4gICk7
CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsK
KwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlf
QlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKCh5eV9uX2NoYXJzKSArIG51
bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsK
KwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkg
bmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0gKHl5X25fY2hhcnMpICsgbnVtYmVyX3Rv
X21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKworCSh5eV9uX2NoYXJz
KSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5X2dldF9wcmV2aW91c19z
dGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVk
ICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZv
aWQpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOwor
CisJZm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCAoeXlf
Y19idWZfcCk7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlf
Y3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5
eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQkoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpID0g
eXlfY3VycmVudF9zdGF0ZTsKKwkJCSh5eV9sYXN0X2FjY2VwdGluZ19jcG9zKSA9IHl5X2NwOwor
CQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQw
NyApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKwor
LyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVM
IGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90
cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlf
dHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSApCit7CisJcmVn
aXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICAJcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSAoeXlfY19i
dWZfcCk7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQkoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpID0geXlf
Y3VycmVudF9zdGF0ZTsKKwkJKHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpID0geXlfY3A7CisJCX0K
Kwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQwNyApCisJCQl5
eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDQwNik7CisKKwlyZXR1cm4g
eXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9fSU5Q
VVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCkKKyNl
bHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYKKworeworCWludCBjOwor
ICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICggKih5eV9jX2J1
Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93
IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlz
IG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZh
bGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJ
CSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8K
KwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIp
OworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlcigg
ICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBo
YXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11
bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAq
IHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQg
Zm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJ
CQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0Jf
QUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVz
LiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJ
CQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKCAp
ICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQly
ZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KCk7CisjZW5kaWYKKwkJ
CQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCSh5eV9jX2J1Zl9w
KSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9
CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1i
aXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAq
LworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOworCisJaWYgKCBjID09ICdcbicg
KQorCQkgICAKKyAgICB5eWxpbmVubysrOworOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0
IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklM
RSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewor
ICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsK
Kwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7CisJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIu
CisgKiAKKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFU
RSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9i
dWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAg
ICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiAp
CisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkq
KHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCisJLyogV2Ug
ZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkg
KiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcK
KwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNh
ZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwkoeXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVy
X3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9w
KTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0
ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhl
IGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZ
X0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgor
ICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwg
aW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZF
Ul9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5
X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5
X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVu
IGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVy
cy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXpl
ICsgMiAgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZlcihiLGZpbGUgKTsKKworCXJldHVybiBi
OworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3Jl
YXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICogCisgKi8KKyAgICB2b2lkIHl5X2RlbGV0
ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7CisgICAgCisJaWYgKCAhIGIgKQorCQly
ZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3
ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9C
VUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUo
KHZvaWQgKikgYi0+eXlfY2hfYnVmICApOworCisJeXlmcmVlKCh2b2lkICopIGIgICk7Cit9CisK
Ky8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0
aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVy
LAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBz
dGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZp
bGUgKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIAorCXl5X2ZsdXNoX2J1ZmZlcihi
ICk7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7
CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZl
ciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91
Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2Fu
dCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZ
WV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAg
IGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0
aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1
ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2Fs
bGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5
IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogCisgKi8KKyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAJaWYgKCAhIGIgKQorCQlyZXR1cm47CisK
KwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVm
ZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRo
ZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0
aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliLT55eV9i
dWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFB1c2hlcyB0aGUg
bmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUg
Y3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICog
IGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICog
IAorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVm
ZmVyICkKK3sKKyAgICAJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJeXll
bnN1cmVfYnVmZmVyX3N0YWNrKCk7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5
X3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJ
LyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqKHl5X2NfYnVm
X3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2No
YXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4g
T3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCisJCSh5
eV9idWZmZXJfc3RhY2tfdG9wKSsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xv
YWRfYnVmZmVyX3N0YXRlKCApOworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsK
K30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHBy
ZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIAor
ICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAodm9pZCkKK3sKKyAgICAJaWYgKCFZWV9DVVJS
RU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUiApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKCh5eV9idWZm
ZXJfc3RhY2tfdG9wKSA+IDApCisJCS0tKHl5X2J1ZmZlcl9zdGFja190b3ApOworCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCQkoeXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0
YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxl
YXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHZv
aWQpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICAKKwlpZiAoISh5eV9idWZmZXJf
c3RhY2spKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRz
LCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVl
ZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRp
YXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxv
YyA9IDE7CisJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5
eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopCisJCQkJCQkJCSk7CisJCWlmICggISAoeXlfYnVmZmVyX3N0YWNrKSApCisJCQlZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spLCAwLCBudW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJKHl5
X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCQkoeXlfYnVmZmVyX3N0YWNrX3Rv
cCkgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAo
KHl5X2J1ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0gOCAv
KiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJf
c3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYworCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCisJ
CQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJ
CQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwor
CisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0
YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19h
bGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
ZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFy
YW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4g
Ynl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICkKK3sKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0g
IT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhl
IEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIg
KTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBv
ZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOworCWItPnl5
X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5X25fY2hh
cnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlf
YXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1
cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgICk7CisKKwlyZXR1
cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0
cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNv
cHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRv
IHNjYW4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRh
aW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAgIHl5X3NjYW5fYnl0ZXMoKSBpbnN0ZWFk
LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5
c3RyICkKK3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIp
ICk7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdp
dmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEg
QGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8g
c2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9p
bnRlZCB0byBieSBAYSBieXRlcy4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVz
ICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gKQorewor
CVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbiwgaTsKKyAgICAK
KwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFp
bGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSB5
eWFsbG9jKG4gICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwg
X3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5
dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CisJYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9F
UlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5
IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3
YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJ
cmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRf
RkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3Qg
Y2hhciogbXNnICkKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cg
KTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkg
c28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZp
bmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGlu
ZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwK
KyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXls
ZW5nXSA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCSh5eV9jX2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcCisJCSoo
eXlfY19idWZfcCkgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJ
fSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rp
b25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51
bWJlci4KKyAqIAorICovCitpbnQgeXlnZXRfbGluZW5vICAodm9pZCkKK3sKKyAgICAgICAgCisg
ICAgcmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiAK
KyAqLworRklMRSAqeXlnZXRfaW4gICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlpbjsKK30K
KworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp5eWdldF9vdXQg
ICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0
aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCit5eV9zaXplX3QgeXlnZXRfbGVuZyAg
KHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJl
bnQgdG9rZW4uCisgKiAKKyAqLworCitjaGFyICp5eWdldF90ZXh0ICAodm9pZCkKK3sKKyAgICAg
ICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4K
KyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogCisgKi8KK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQg
IGxpbmVfbnVtYmVyICkKK3sKKyAgICAKKyAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOworfQor
CisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3Vy
cmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVh
bS4KKyAqIAorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4g
KEZJTEUgKiAgaW5fc3RyICkKK3sKKyAgICAgICAgeXlpbiA9IGluX3N0ciA7Cit9CisKK3ZvaWQg
eXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgKQoreworICAgICAgICB5eW91dCA9IG91dF9zdHIg
OworfQorCitpbnQgeXlnZXRfZGVidWcgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlfZmxl
eF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcgKQoreworICAgICAg
ICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2Jh
bHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZv
ciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAq
LworCisgICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlz
IGVuYWJsZWQuICovCisgICAgeXlsaW5lbm8gPSAgMTsKKyAgICAKKyAgICAoeXlfYnVmZmVyX3N0
YWNrKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKyAgICAoeXlfYnVmZmVy
X3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IChjaGFyICopIDA7CisgICAgKHl5
X2luaXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMg
Ki8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rk
b3V0OworI2Vsc2UKKyAgICB5eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICop
IDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24g
ZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAg
Ki8KKyAgICByZXR1cm4gMDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVu
dHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAg
KHZvaWQpCit7CisgICAgCisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcg
ZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRl
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gTlVMTDsKKwkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJLyogRGVzdHJveSB0aGUg
c3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOworCSh5eV9idWZm
ZXJfc3RhY2spID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGlt
cG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAg
ICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAg
eXlfaW5pdF9nbG9iYWxzKCApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5h
bCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkK
K3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwlyZWdpc3RlciBpbnQgbjsK
Kwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYK
Kwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkKK3sKKwlyZXR1cm4gKHZvaWQgKikg
bWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3Np
emVfdCAgc2l6ZSApCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2lu
ZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBv
aW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kg
QyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVy
IHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBh
cyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVh
bGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICogcHRy
ICkKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hh
ciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKKy8v
SW5jbHVkaW5nIFByZS1wcm9jZXNzb3IuCitleHRlcm4gIkMiIHsKKyAgI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCit9IAorCisvLworLy8gVGhlIFlZX0lOUFVU
IG1hY3JvIGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRoaXMgY291bGQgYmUganVzdCBwdXQgaW50
bworLy8gdGhlIG1hY3JvIGRpcmVjdGx5LgorLy8KKworaW50IHl5X2lucHV0KGNoYXIqIGJ1Ziwg
aW50IG1heF9zaXplKQoreworICAgIGludCBsZW47CisKKyAgICBpZiAoKGxlbiA9IHl5bGV4X0NQ
UChidWYsIG1heF9zaXplKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+
PSBtYXhfc2l6ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgYnVmZmVyIG92ZXJm
bG93LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiICk7
CisKKyAgICBidWZbbGVuXSA9ICcgJzsKKwlyZXR1cm4gbGVuKzE7Cit9CisKKy8vCisvLyBQYXJz
ZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuICBXZSBzZXQgdXAgZ2xvYmFscyB1
c2VkIGJ5CisvLyB5eXdyYXAuCisvLworLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLCBhcyBwZXIg
eXlwYXJzZSgpLgorLy8KK2ludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJM
ZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAg
IGludCBhcmd2MGxlbjsKKyAgICAKKyAgICBTY2FuRnJvbVN0cmluZyhhcmd2WzBdKTsgCisgICAg
CisgICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50IENvbXBpbGVyIFBhcnNlIGNvbnRleHQgaW50byB0
aGUgY3BwIHN0cnVjdHVyZS4KKwljcHAtPnBDID0gKHZvaWQqKSZwYXJzZUNvbnRleHRMb2NhbDsK
KwkKKwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIWFyZ3ZbaV0p
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKDAsICJOdWxsIHNoYWRlciBz
b3VyY2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIGlmICghc3RyTGVuKSB7CisgICAgICAgIGFyZ3YwbGVuID0gKGludCkgc3RybGVuKGFyZ3Zb
MF0pOworICAgICAgICBzdHJMZW4gICA9ICZhcmd2MGxlbjsKKyAgICB9CisgICAgeXlyZXN0YXJ0
KDApOworICAgICgmcGFyc2VDb250ZXh0TG9jYWwpLT5BZnRlckVPRiA9IGZhbHNlOworICAgIGNw
cC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gYXJndjsKKyAgICBjcHAt
PlBhQXJnYyAgICAgPSBhcmdjOworICAgIGNwcC0+UGFTdHJMZW4gICA9IHN0ckxlbjsKKyAgICBj
cHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisgICAgeXlsaW5lbm8gICA9IDE7CisgICAKKyAg
ICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAKKyAgICAgICAgaW50IHJldCA9IHl5cGFy
c2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsKKyAgICAgICAgaWYgKGNwcC0+Q29tcGls
ZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBh
cnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKGNoYXIgKnMpIAoreworICAgIGlmICgo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKKyAgICAgICAgaWYgKGNwcC0+
dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+
ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAicHJlLW1hdHVyZSBFT0YiLCBzLCAiIik7
CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
ICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsKKyAgICAgICAgR2xvYmFsUGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgfSAgICAgICAgICAgIAorfQorCit2b2lkIFBhUmVzZXJ2ZWRX
b3JkKCkKK3sKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiUmVzZXJ2
ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Cit9CisKK2ludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0
JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5bWJvbCkKK3sKKyAgICBzeW1ib2wgPSBw
YXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5kKGlkKTsKKyAgICBpZiAocGFyc2VDb250
ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFy
aWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZh
cmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gVFlQRV9OQU1FOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBJREVOVElGSUVSOworfQorCitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5lbm8sIFRQ
YXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGludCB0cmFuc2l0aW9uRmxh
ZyA9IDA7CisgICAgaW50IG5leHRDaGFyOworICAgIAorICAgIHdoaWxlICh0cmFuc2l0aW9uRmxh
ZyAhPSAyKSB7CisgICAgICAgIG5leHRDaGFyID0geXlpbnB1dCgpOworICAgICAgICBpZiAobmV4
dENoYXIgPT0gJ1xuJykKKyAgICAgICAgICAgICBsaW5lbm8rKzsKKyAgICAgICAgc3dpdGNoIChu
ZXh0Q2hhcikgeworICAgICAgICBjYXNlICcqJyA6CisgICAgICAgICAgICB0cmFuc2l0aW9uRmxh
ZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLycgOiAgLyogaWYgc3Rh
ciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRoZSBlbmQgb2YgY29tbWVu
dCAqLworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25GbGFnID09IDEpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMSA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT0YgOgorICAgICAgICAgICAgLyogUmFpc2UgZXJyb3IgbWVzc2FnZSBoZXJlICov
CisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcih5eWxpbmVubywgIkVuZCBvZiBz
aGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50LiIsICIiLCAiIiwgIiIpOworICAgICAg
ICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICByZXR1cm4g
WVlfTlVMTDsgCisgICAgICAgIGRlZmF1bHQgOiAgLyogQW55IG90aGVyIGNoYXJhY3RlciB3aWxs
IGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAqLworICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcg
PSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitleHRlcm4gIkMiIHsK
Kwordm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1z
Zyk7Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCit7Cisg
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorfQorCit2b2lkIENQUFNoSW5mb0xvZ01zZyhj
b25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9y
KHl5bGluZW5vLCIiLCAiIixtc2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3sKKyAgICAoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBlcnJvciIsICIi
LG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQg
U2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eWxpbmVubyAmPSB+U291cmNlTG9jTGlu
ZU1hc2s7CisgICAgeXlsaW5lbm8gfD0gbGluZTsKK30KKwordm9pZCBTZXRTdHJpbmdOdW1iZXIo
aW50IHN0cmluZykKK3sKKyAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNlTG9jU3RyaW5n
U2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOworfQorCitpbnQgR2V0U3Ry
aW5nTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5vID4+IDE2OworfQorCitpbnQg
R2V0TGluZU51bWJlcih2b2lkKQoreworICAgIHJldHVybiB5eWxpbmVubyAmIFNvdXJjZUxvY0xp
bmVNYXNrOworfQorCit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGlu
ZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQorICAgICAgICAr
K3l5bGluZW5vOworfQorCit2b2lkIERlY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5
bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkKKyAgICAgICAgLS15eWxpbmVubzsKK30K
Kwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRva2VucykK
K3sgICAgCisgICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgeworICAgICAg
ICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0
aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikp
IHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29w
dGltaXplJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAg
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSB0
cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAg
ICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1pemUg
PSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwi
b25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBwcmFnbWEi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
XCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAiZGVi
dWciKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tl
bnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0
ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQor
ICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVi
dWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQor
ICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEuZGVi
dWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
Ilwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
XCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisjaWZkZWYgUFJBR01BX1RBQkxFCisgICAg
ICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQorICAgICAg
ICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQorICAgICAgICAvLyBG
b3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNh
bm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1l
bnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQorICAgICAgICAvLyAj
cHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50
YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHByYWdtYSBu
YW1lIGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAgICAgICAgCisgICAgICAgIGlmIChudW1U
b2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRva2Vuc1sz
XSwgIikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdt
YVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21h
VGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAg
ICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAg
ICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBp
dGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKKyAgICAgICAgICAg
IH0gICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7CisgICAgICAg
ICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6
Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3Ry
aW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9
IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8vIFBSQUdNQV9U
QUJMRQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit7CisgICAgVFN0
cmluZyBzdHJTcmM7CisgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOworCisgICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKK30KKworY29uc3QgY2hhciogR2V0U3Ry
ZnJvbVRTdHIodm9pZCkKK3sKKyAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9
CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0
IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVoYXZpb3Ip
KQorICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmICghc3RyY21wKCJlbmFi
bGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxzZSBpZiAo
IXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaERpc2FibGU7
CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJu
IEVCaFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygi
YmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIH0gICAgICAgIAorfQorCit2b2lkICB1
cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBi
ZWhhdmlvcikKK3sKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihiZWhh
dmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsKKyAg
ICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5z
aW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7CisgICAgICAgIGlmIChiZWhh
dmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkgeworICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3Jl
cXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJzZUNvbnRleHQg
KiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAg
ICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfSAgICAgICAg
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMp
LT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAo
aXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5k
KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKKyAgICAgICAgICAgIGNh
c2UgRUJoUmVxdWlyZToKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRTdHJpbmco
ImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNfc3RyKCkp
OyAgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVCaEVuYWJsZToK
KyAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgICAgICAgIGNhc2UgRUJoRGlzYWJsZToK
KyAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSAr
ICInIGlzIG5vdCBzdXBwb3J0ZWQiOworICAgICAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAq
KWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0
cigpLCB5eWxpbmVubyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNl
Y29uZCA9IGJlaGF2aW9yVmFsOworICAgIH0KK30KKyAgICAgICAgCit9ICAvLyBleHRlcm4gIkMi
CisKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKK3sKKyAgICB5eV9zdGFydCA9IDE7Cit9CisKSW5k
ZXg6IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZ190YWIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZ190YWIuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDgzMCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4g
ICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBw
YXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAy
MDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRp
b24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBB
cyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQg
Y29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5k
IGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28g
bG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNp
bmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBh
cnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmli
dXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRp
b24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0
aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBi
ZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhv
dXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3
YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAy
LjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4g
YnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1j
YWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJl
bG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBv
biB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisg
ICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIg
bWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4g
aW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRo
ZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAq
LworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKwor
LyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgorCisv
KiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisK
Ky8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFVzaW5nIGxvY2F0
aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKworCisvKiBUb2tlbnMuICAqLwor
I2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUg
dG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVn
Z2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgewor
ICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAorICAgICBN
RURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAorICAgICBQ
UkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9
IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9UWVBFID0gMjY2LAorICAg
ICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAgIENPTlRJTlVFID0gMjY5
LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAgRk9SID0gMjcyLAorICAg
ICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1LAorICAg
ICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJWRUM0ID0gMjc4LAorICAg
ICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElWRUM0ID0gMjgxLAorICAg
ICBWRUMyID0gMjgyLAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0ID0gMjg0LAorICAgICBN
QVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBNQVRSSVg0ID0gMjg3LAor
ICAgICBJTl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwKKyAgICAgSU5PVVRfUVVB
TCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlORyA9IDI5MiwKKyAgICAg
U1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAgIFdISUxFID0gMjk1LAor
ICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0gMjk3LAorICAgICBJREVO
VElGSUVSID0gMjk4LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAgIEZMT0FUQ09OU1RBTlQg
PSAzMDAsCisgICAgIElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDIs
CisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9PUCA9IDMwNCwKKyAgICAg
UklHSFRfT1AgPSAzMDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAgREVDX09QID0gMzA3LAor
ICAgICBMRV9PUCA9IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAgIEVRX09QID0gMzEwLAor
ICAgICBORV9PUCA9IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAgICBPUl9PUCA9IDMxMywK
KyAgICAgWE9SX09QID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1LAorICAgICBESVZfQVNT
SUdOID0gMzE2LAorICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBNT0RfQVNTSUdOID0gMzE4
LAorICAgICBMRUZUX0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIwLAorICAg
ICBBTkRfQVNTSUdOID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIyLAorICAgICBPUl9BU1NJ
R04gPSAzMjMsCisgICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExFRlRfUEFSRU4gPSAzMjUs
CisgICAgIFJJR0hUX1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjcsCisgICAg
IFJJR0hUX0JSQUNLRVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAzMjksCisgICAgIFJJR0hU
X0JSQUNFID0gMzMwLAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1BID0gMzMyLAorICAgICBD
T0xPTiA9IDMzMywKKyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlDT0xPTiA9IDMzNSwKKyAg
ICAgQkFORyA9IDMzNiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElMREUgPSAzMzgsCisgICAg
IFBMVVMgPSAzMzksCisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNIID0gMzQxLAorICAgICBQ
RVJDRU5UID0gMzQyLAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAgICBSSUdIVF9BTkdMRSA9
IDM0NCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJFVCA9IDM0NiwKKyAgICAg
QU1QRVJTQU5EID0gMzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAgfTsKKyNlbmRpZgorLyog
VG9rZW5zLiAgKi8KKyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmluZSBISUdIX1BSRUNJU0lP
TiAyNTkKKyNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZpbmUgTE9XX1BSRUNJU0lP
TiAyNjEKKyNkZWZpbmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRSSUJVVEUgMjYzCisjZGVm
aW5lIENPTlNUX1FVQUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUKKyNkZWZpbmUgRkxPQVRf
VFlQRSAyNjYKKyNkZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJSRUFLIDI2OAorI2RlZmlu
ZSBDT05USU5VRSAyNjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVMU0UgMjcxCisjZGVmaW5l
IEZPUiAyNzIKKyNkZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQgMjc0CisjZGVmaW5lIFJF
VFVSTiAyNzUKKyNkZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMzIDI3NworI2RlZmluZSBC
VkVDNCAyNzgKKyNkZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMzIDI4MAorI2RlZmluZSBJ
VkVDNCAyODEKKyNkZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAyODMKKyNkZWZpbmUgVkVD
NCAyODQKKyNkZWZpbmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklYMyAyODYKKyNkZWZpbmUg
TUFUUklYNCAyODcKKyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUgT1VUX1FVQUwgMjg5Cisj
ZGVmaW5lIElOT1VUX1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkxCisjZGVmaW5lIFZBUllJ
TkcgMjkyCisjZGVmaW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9UWVBFIDI5NAorI2RlZmlu
ZSBXSElMRSAyOTUKKyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmluZSBTQU1QTEVSQ1VCRSAy
OTcKKyNkZWZpbmUgSURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9OQU1FIDI5OQorI2RlZmlu
ZSBGTE9BVENPTlNUQU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAzMDEKKyNkZWZpbmUgQk9P
TENPTlNUQU5UIDMwMgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAzCisjZGVmaW5lIExFRlRf
T1AgMzA0CisjZGVmaW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNfT1AgMzA2CisjZGVmaW5l
IERFQ19PUCAzMDcKKyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdFX09QIDMwOQorI2RlZmlu
ZSBFUV9PUCAzMTAKKyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFORF9PUCAzMTIKKyNkZWZp
bmUgT1JfT1AgMzEzCisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUgTVVMX0FTU0lHTiAzMTUK
KyNkZWZpbmUgRElWX0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lHTiAzMTcKKyNkZWZpbmUg
TU9EX0FTU0lHTiAzMTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5CisjZGVmaW5lIFJJR0hUX0FT
U0lHTiAzMjAKKyNkZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUgWE9SX0FTU0lHTiAzMjIK
KyNkZWZpbmUgT1JfQVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdOIDMyNAorI2RlZmluZSBM
RUZUX1BBUkVOIDMyNQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNkZWZpbmUgTEVGVF9CUkFD
S0VUIDMyNworI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmluZSBMRUZUX0JSQUNFIDMy
OQorI2RlZmluZSBSSUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMzMQorI2RlZmluZSBDT01N
QSAzMzIKKyNkZWZpbmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMzNAorI2RlZmluZSBTRU1J
Q09MT04gMzM1CisjZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0ggMzM3CisjZGVmaW5lIFRJ
TERFIDMzOAorI2RlZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0MAorI2RlZmluZSBTTEFT
SCAzNDEKKyNkZWZpbmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9BTkdMRSAzNDMKKyNkZWZp
bmUgUklHSFRfQU5HTEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDUKKyNkZWZpbmUgQ0FS
RVQgMzQ2CisjZGVmaW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVFU1RJT04gMzQ4CisKKwor
CisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisK
KworLyogQmFzZWQgb246CitBTlNJIEMgWWFjYyBncmFtbWFyCisKK0luIDE5ODUsIEplZmYgTGVl
IHB1Ymxpc2hlZCBoaXMgWWFjYyBncmFtbWFyICh3aGljaCBpcyBhY2NvbXBhbmllZCBieSBhCitt
YXRjaGluZyBMZXggc3BlY2lmaWNhdGlvbikgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBkcmFmdCB2
ZXJzaW9uIG9mIHRoZQorQU5TSSBDIHN0YW5kYXJkLiAgVG9tIFN0b2NrZmlzY2ggcmVwb3N0ZWQg
aXQgdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdAorb3JpZ2luYWwsIGFzIG1lbnRpb25lZCBp
biB0aGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21wLmxhbmcuYworRkFRLCBj
YW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgZmlsZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5z
aS5jLmdyYW1tYXIuWi4KKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2Ug
dG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIGFzCitwb3NzaWJsZTsgcGxlYXNlIGxl
dCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLgorCitKdXR0YSBEZWdlbmVy
LCAxOTk1CisqLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgorCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKy8qCitUT0RPKGFs
b2twKTogWVlQQVJTRV9QQVJBTV9ERUNMIGlzIG9ubHkgaGVyZSB0byBzdXBwb3J0IG9sZCBiaXNv
bi5leGUgaW4KK2NvbXBpbGVyL3Rvb2xzLiBSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZl
bHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNM
IHZvaWQqCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRl
eHRMb2NhbCkpCisjZGVmaW5lIFlZTEVYX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCisjZGVmaW5l
IFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExv
Y2FsKQorZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7CisKKyNkZWZpbmUgRlJBR19WRVJUX09O
TFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdGcmFnbWVudCAm
JiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmxh
bmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleC9m
cmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICBcCisgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVm
aW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBF
U2hMYW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5
ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBGUkFHX09O
TFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdt
ZW50KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUEFDS19PTkxZKFMsIEwpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdQYWNrKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAg
ICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVOUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFy
c2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiB1bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK30KKworI2RlZmluZSBQQUNLX1VOUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgIT0gRVNoTGFuZ1VucGFjayAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjay91bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAi
Iik7ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCit9CisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5k
ZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVy
Ym9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVm
IFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRl
ZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0
YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUg
MAorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9J
U19ERUNMQVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBFCisKK3sKKyAgICBzdHJ1Y3QgeworICAg
ICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJp
bmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAg
ICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOwor
ICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAg
ICAgVE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lv
biBwcmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAg
ICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwor
ICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0
eXBlTGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKK30KKy8qIExpbmUgMTkzIG9mIHlh
Y2MuYy4gICovCisKKwlZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29s
ZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJF
RCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisKKworCisvKiBDb3B5
IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworICAgIGV4dGVy
biBpbnQgeXlsZXgoWVlTVFlQRSosIHZvaWQqKTsKKworCisvKiBMaW5lIDIxNiBvZiB5YWNjLmMu
ICAqLworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZ
WVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZ
UEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBl
X2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKwor
I2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2
OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5k
aWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2lu
dDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisj
aWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVf
VCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVf
VCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQor
IyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZp
bmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIGRl
ZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAgaWYgRU5BQkxFX05MUworIyAg
IGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQor
IyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNn
aWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fybmlu
Z3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05V
Q19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVT
RShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRv
IHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRl
ZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50CitZWUlEIChpbnQgaSkKKyNlbHNlCitz
dGF0aWMgaW50CitZWUlEIChpKQorICAgIGludCBpOworI2VuZGlmCit7CisgIHJldHVybiBpOwor
fQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UK
KworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVj
ZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYg
WVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFf
QVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxt
YWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUg
YWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9j
YQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBf
U1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVu
ZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExP
QworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRl
ZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgw
KSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQg
Z3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ss
CisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAg
U28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVk
cyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBm
b3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisj
ICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2Eg
MjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxM
T0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExP
Q19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1V
TQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RE
TElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9j
KSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5j
bHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBp
Zm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgIGVuZGlmCisjICBl
bmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAg
IGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAg
aWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBm
cmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZp
bmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lmICghIGRlZmluZWQg
eXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVm
aW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEg
dHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwor
dW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYgeXlzczsKKyAgWVlTVFlQRSB5eXZzOwor
ICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25l
ZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAo
c2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxh
cmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50
cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2Yg
KHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQ
X01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUg
c291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYg
WVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywg
RnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZ
Q09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZ
U0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJ
XAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGls
ZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9t
IGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxl
cyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgor
ICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlv
biBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQg
bG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JF
TE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwK
KwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0
YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5l
d2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJ
TVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAg
ICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJ
TkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmlu
ZSBZWUZJTkFMICA2OQorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisj
ZGVmaW5lIFlZTEFTVCAgIDEzNzgKKworLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5h
bHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDk0CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAgNzgKKy8qIFlZTlJVTEVTIC0tIE51bWJl
ciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVTICAxOTUKKy8qIFlZTlJVTEVTIC0tIE51
bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDMwMAorCisvKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1BWFVUT0sgICAzNDgKKwor
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwK
KyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LAorICAgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAg
ICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAg
IDg0LAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkyLCAgICA5MworfTsKKworI2lmIFlZREVCVUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4
IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMu
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlwcmhzW10gPQoreworICAgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywg
ICAgMTksCisgICAgICAyNCwgICAgMjYsICAgIDMwLCAgICAzMywgICAgMzYsICAgIDM4LCAgICA0
MCwgICAgNDIsICAgIDQ2LCAgICA0OSwKKyAgICAgIDUyLCAgICA1NSwgICAgNTcsICAgIDYwLCAg
ICA2NCwgICAgNjcsICAgIDY5LCAgICA3MSwgICAgNzMsICAgIDc1LAorICAgICAgNzgsICAgIDgx
LCAgICA4NCwgICAgODYsICAgIDg4LCAgICA5MCwgICAgOTIsICAgIDk2LCAgIDEwMCwgICAxMDIs
CisgICAgIDEwNiwgICAxMTAsICAgMTEyLCAgIDExNCwgICAxMTgsICAgMTIyLCAgIDEyNiwgICAx
MzAsICAgMTMyLCAgIDEzNiwKKyAgICAgMTQwLCAgIDE0MiwgICAxNDQsICAgMTQ2LCAgIDE0OCwg
ICAxNTIsICAgMTU0LCAgIDE1OCwgICAxNjAsICAgMTY0LAorICAgICAxNjYsICAgMTcyLCAgIDE3
NCwgICAxNzgsICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg2LCAgIDE4OCwgICAxOTAsCisgICAg
IDE5NCwgICAxOTYsICAgMTk5LCAgIDIwMiwgICAyMDcsICAgMjEwLCAgIDIxMiwgICAyMTQsICAg
MjE3LCAgIDIyMSwKKyAgICAgMjI1LCAgIDIyOCwgICAyMzQsICAgMjM4LCAgIDI0MSwgICAyNDUs
ICAgMjQ4LCAgIDI0OSwgICAyNTEsICAgMjUzLAorICAgICAyNTUsICAgMjU3LCAgIDI1OSwgICAy
NjMsICAgMjY5LCAgIDI3NiwgICAyODQsICAgMjkzLCAgIDI5OSwgICAzMDEsCisgICAgIDMwNCwg
ICAzMDksICAgMzE1LCAgIDMyMCwgICAzMjMsICAgMzI1LCAgIDMyOCwgICAzMzAsICAgMzMyLCAg
IDMzNCwKKyAgICAgMzM3LCAgIDMzOSwgICAzNDEsICAgMzQ0LCAgIDM0NiwgICAzNDgsICAgMzUw
LCAgIDM1MiwgICAzNTcsICAgMzU5LAorICAgICAzNjEsICAgMzYzLCAgIDM2NSwgICAzNjcsICAg
MzY5LCAgIDM3MSwgICAzNzMsICAgMzc1LCAgIDM3NywgICAzNzksCisgICAgIDM4MSwgICAzODMs
ICAgMzg1LCAgIDM4NywgICAzODksICAgMzkxLCAgIDM5MywgICAzOTUsICAgMzk3LCAgIDQwMywK
KyAgICAgNDA4LCAgIDQxMCwgICA0MTMsICAgNDE3LCAgIDQxOSwgICA0MjMsICAgNDI1LCAgIDQz
MCwgICA0MzIsICAgNDM0LAorICAgICA0MzYsICAgNDM4LCAgIDQ0MCwgICA0NDIsICAgNDQ0LCAg
IDQ0NiwgICA0NDgsICAgNDUxLCAgIDQ1MiwgICA0NTMsCisgICAgIDQ1OSwgICA0NjEsICAgNDYz
LCAgIDQ2NiwgICA0NzAsICAgNDcyLCAgIDQ3NSwgICA0NzcsICAgNDgwLCAgIDQ4NiwKKyAgICAg
NDkwLCAgIDQ5MiwgICA0OTQsICAgNDk5LCAgIDUwMCwgICA1MDcsICAgNTA4LCAgIDUxNywgICA1
MTgsICAgNTI2LAorICAgICA1MjgsICAgNTMwLCAgIDUzMiwgICA1MzMsICAgNTM2LCAgIDU0MCwg
ICA1NDMsICAgNTQ2LCAgIDU0OSwgICA1NTMsCisgICAgIDU1NiwgICA1NTgsICAgNTYxLCAgIDU2
MywgICA1NjUsICAgNTY2Cit9OworCisvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qg
b2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXJoc1td
ID0KK3sKKyAgICAgMTY4LCAgICAgMCwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgOTUsICAgIC0x
LCAgICA0NiwgICAgLTEsICAgIDQ1LAorICAgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNzAsICAg
MTIyLCAgICA3MSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTcsCisgICAgICA3MiwgICAgOTgs
ICAgIDczLCAgICAtMSwgICAgOTksICAgIC0xLCAgICA5NywgICAgNzYsICAgIDQ4LCAgICAtMSwK
KyAgICAgIDk3LCAgICA1MSwgICAgLTEsICAgIDk3LCAgICA1MiwgICAgLTEsICAgMTIyLCAgICAt
MSwgICAxMDAsICAgIC0xLAorICAgICAxMDEsICAgIC0xLCAgICA5NywgICAgNzYsICAgMTAxLCAg
ICAtMSwgICAxMDMsICAgIDcxLCAgICAtMSwgICAxMDIsCisgICAgICA3MSwgICAgLTEsICAgMTA0
LCAgICAzOSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAxMDQsICAgMTIwLCAgICAtMSwKKyAgICAg
MTAzLCAgICA3NywgICAxMjAsICAgIC0xLCAgIDEwNSwgICAgNzAsICAgIC0xLCAgIDEzNywgICAg
LTEsICAgIDQzLAorICAgICAgLTEsICAgIDQ4LCAgICAtMSwgICAgOTcsICAgIC0xLCAgICA1MSwg
ICAxMDYsICAgIC0xLCAgICA1MiwgICAxMDYsCisgICAgICAtMSwgICAxMDcsICAgMTA2LCAgICAt
MSwgICAgODQsICAgIC0xLCAgICA4MiwgICAgLTEsICAgIDgxLCAgICAtMSwKKyAgICAgMTA2LCAg
ICAtMSwgICAxMDgsICAgIDg1LCAgIDEwNiwgICAgLTEsICAgMTA4LCAgICA4NiwgICAxMDYsICAg
IC0xLAorICAgICAxMDgsICAgIC0xLCAgIDEwOSwgICAgODQsICAgMTA4LCAgICAtMSwgICAxMDks
ICAgIDgyLCAgIDEwOCwgICAgLTEsCisgICAgIDEwOSwgICAgLTEsICAgMTEwLCAgICAtMSwgICAx
MTEsICAgIDg4LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4OSwKKyAgICAgMTEwLCAgICAtMSwg
ICAxMTEsICAgIDUzLCAgIDExMCwgICAgLTEsICAgMTExLCAgICA1NCwgICAxMTAsICAgIC0xLAor
ICAgICAxMTEsICAgIC0xLCAgIDExMiwgICAgNTUsICAgMTExLCAgICAtMSwgICAxMTIsICAgIDU2
LCAgIDExMSwgICAgLTEsCisgICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAtMSwgICAxMTQsICAg
IC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICA1NywKKyAgICAgMTE1LCAgICAtMSwgICAxMTYs
ICAgIC0xLCAgIDExNywgICAgNTksICAgMTE2LCAgICAtMSwgICAxMTcsICAgIC0xLAorICAgICAx
MTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTgsICAgIDkzLCAgIDEy
MiwgICAgNzgsCisgICAgIDEyMCwgICAgLTEsICAgMTE5LCAgICAtMSwgICAxMDYsICAgMTIxLCAg
IDEyMCwgICAgLTEsICAgIDc5LCAgICAtMSwKKyAgICAgIDYwLCAgICAtMSwgICAgNjEsICAgIC0x
LCAgICA2MiwgICAgLTEsICAgIDY5LCAgICAtMSwgICAxMjAsICAgIC0xLAorICAgICAxMjIsICAg
IDc3LCAgIDEyMCwgICAgLTEsICAgMTE5LCAgICAtMSwgICAxMjUsICAgIDgwLCAgICAtMSwgICAx
MzMsCisgICAgICA4MCwgICAgLTEsICAgICA3LCAgIDEzOCwgICAxMzksICAgIDgwLCAgICAtMSwg
ICAxMjYsICAgIDcxLCAgICAtMSwKKyAgICAgMTI4LCAgICAtMSwgICAxMjcsICAgIC0xLCAgIDEy
OCwgICAxMzAsICAgIC0xLCAgIDEyNywgICAgNzcsICAgMTMwLAorICAgICAgLTEsICAgMTM1LCAg
ICA0MywgICAgNzAsICAgIC0xLCAgIDEzNywgICAgNDMsICAgIC0xLCAgIDEzNywgICAgNDMsCisg
ICAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAxMzYsICAgMTMxLCAgIDEyOSwgICAgLTEs
ICAgMTMxLCAgIDEyOSwKKyAgICAgIC0xLCAgIDEzNiwgICAxMzEsICAgMTMyLCAgICAtMSwgICAx
MzEsICAgMTMyLCAgICAtMSwgICAgLTEsICAgIDMzLAorICAgICAgLTEsICAgIDM0LCAgICAtMSwg
ICAgMzUsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM0LCAgICAtMSwgICAxMzMsCisgICAgICA3
NywgICAgNDMsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAgICA3MiwgICAgNzMsICAgIC0x
LCAgIDEzMywKKyAgICAgIDc3LCAgICA0MywgICAgNzIsICAgMTIzLCAgICA3MywgICAgLTEsICAg
MTMzLCAgICA3NywgICAgNDMsICAgIDcyLAorICAgICAgNzMsICAgIDc5LCAgIDE0NiwgICAgLTEs
ICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLCAgIDEyMywgICAgNzMsCisgICAgICA3OSwgICAx
NDYsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAgICA3OSwgICAxNDYsICAgIC0xLCAgIDEz
NSwKKyAgICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIDcyLCAg
ICA3MywgICAgLTEsICAgMTM1LAorICAgICAgNDMsICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0x
LCAgIDEzNSwgICAgNDMsICAgIDc5LCAgIDE0NiwgICAgLTEsCisgICAgICAgMywgICAgNDMsICAg
IC0xLCAgIDEzNywgICAgLTEsICAgMTM2LCAgIDEzNywgICAgLTEsICAgICA5LCAgICAtMSwKKyAg
ICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywgICAgMzcsICAgIC0xLCAgICAzNiwg
ICAgLTEsICAgMTM5LAorICAgICAgLTEsICAgMTM4LCAgIDEzOSwgICAgLTEsICAgICA0LCAgICAt
MSwgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsCisgICAgIDE0MCwgICAgLTEsICAgMTQwLCAg
ICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwKKyAgICAgIC0x
LCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEs
ICAgIDI5LAorICAgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsICAgIC0xLCAgICAyMywgICAg
LTEsICAgIDI0LCAgICAtMSwgICAgMjUsCisgICAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwg
ICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0MSwKKyAgICAgIC0xLCAgICA0
MiwgICAgLTEsICAgMTQxLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAzOCwgICAgNDMsICAgIDc0
LAorICAgICAxNDIsICAgIDc1LCAgICAtMSwgICAgMzgsICAgIDc0LCAgIDE0MiwgICAgNzUsICAg
IC0xLCAgIDE0MywgICAgLTEsCisgICAgIDE0MiwgICAxNDMsICAgIC0xLCAgIDEzNywgICAxNDQs
ICAgIDgwLCAgICAtMSwgICAxNDUsICAgIC0xLCAgIDE0NCwKKyAgICAgIDc3LCAgIDE0NSwgICAg
LTEsICAgIDQzLCAgICAtMSwgICAgNDMsICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0xLAorICAg
ICAxMjAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTUwLCAgICAtMSwgICAxNDksICAgIC0xLCAg
IDE0NywgICAgLTEsCisgICAgIDE1NiwgICAgLTEsICAgMTU3LCAgICAtMSwgICAxNjAsICAgIC0x
LCAgIDE2NywgICAgLTEsICAgIDc0LCAgICA3NSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDc0LCAgIDE1MSwgICAxNTUsICAgMTUyLCAgICA3NSwgICAgLTEsICAgMTU0LAorICAgICAgLTEs
ICAgMTQ5LCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzQsICAgMTU1LCAgICA3NSwg
ICAgLTEsCisgICAgIDE0OCwgICAgLTEsICAgMTU1LCAgIDE0OCwgICAgLTEsICAgIDgwLCAgICAt
MSwgICAxMjIsICAgIDgwLCAgICAtMSwKKyAgICAgIDE4LCAgICA3MCwgICAxMjIsICAgIDcxLCAg
IDE1OCwgICAgLTEsICAgMTQ4LCAgICAxNiwgICAxNDgsICAgIC0xLAorICAgICAxNDgsICAgIC0x
LCAgIDEyMiwgICAgLTEsICAgMTM1LCAgICA0MywgICAgNzksICAgMTQ2LCAgICAtMSwgICAgLTEs
CisgICAgICA0MCwgICAgNzAsICAgMTYxLCAgIDE1OSwgICAgNzEsICAgMTUzLCAgICAtMSwgICAg
LTEsICAgIDE1LCAgIDE2MiwKKyAgICAgMTQ4LCAgICA0MCwgICAgNzAsICAgMTIyLCAgICA3MSwg
ICAgODAsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDcwLAorICAgICAxNjMsICAgMTY0LCAgIDE2
NiwgICAgNzEsICAgMTUzLCAgICAtMSwgICAxNTYsICAgIC0xLCAgIDE0NywgICAgLTEsCisgICAg
IDE1OSwgICAgLTEsICAgIC0xLCAgIDE2NSwgICAgODAsICAgIC0xLCAgIDE2NSwgICAgODAsICAg
MTIyLCAgICAtMSwKKyAgICAgIDE0LCAgICA4MCwgICAgLTEsICAgIDEzLCAgICA4MCwgICAgLTEs
ICAgIDIwLCAgICA4MCwgICAgLTEsICAgIDIwLAorICAgICAxMjIsICAgIDgwLCAgICAtMSwgICAg
MTksICAgIDgwLCAgICAtMSwgICAxNjksICAgIC0xLCAgIDE2OCwgICAxNjksCisgICAgICAtMSwg
ICAxNzAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgIC0xLCAgIDEyNSwgICAxNzEsICAgMTU0LCAg
ICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVt
YmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJs
aW5lW10gPQoreworICAgICAgIDAsICAgMTgzLCAgIDE4MywgICAyMTgsICAgMjIxLCAgIDIzNCwg
ICAyMzksICAgMjQ0LCAgIDI1MCwgICAyNTMsCisgICAgIDMyNiwgICAzMjksICAgNDM4LCAgIDQ0
OCwgICA0NjEsICAgNDY5LCAgIDU2NywgICA1NzAsICAgNTc4LCAgIDU4MiwKKyAgICAgNTg5LCAg
IDU5MywgICA2MDAsICAgNjA2LCAgIDYxNSwgICA2MjMsICAgNjg3LCAgIDY5NCwgICA3MDQsICAg
NzA3LAorICAgICA3MTcsICAgNzI3LCAgIDc0OCwgICA3NDksICAgNzUwLCAgIDc1NSwgICA3NTYs
ICAgNzY1LCAgIDc3NywgICA3NzgsCisgICAgIDc4NiwgICA3OTcsICAgODAxLCAgIDgwMiwgICA4
MTIsICAgODIyLCAgIDgzMiwgICA4NDUsICAgODQ2LCAgIDg1NywKKyAgICAgODcxLCAgIDg3NSwg
ICA4NzksICAgODgzLCAgIDg4NCwgICA4OTcsICAgODk4LCAgIDkxMSwgICA5MTIsICAgOTI1LAor
ICAgICA5MjYsICAgOTQzLCAgIDk0NCwgICA5NTgsICAgOTU5LCAgIDk2MCwgICA5NjEsICAgOTYy
LCAgIDk2NiwgICA5NjksCisgICAgIDk4MCwgICA5ODgsICAxMDEzLCAgMTAxOCwgIDEwMjUsICAx
MDYxLCAgMTA2NCwgIDEwNzEsICAxMDc5LCAgMTEwMCwKKyAgICAxMTE5LCAgMTEzMCwgIDExNTks
ICAxMTY0LCAgMTE3NCwgIDExNzksICAxMTg5LCAgMTE5MiwgIDExOTUsICAxMTk4LAorICAgIDEy
MDQsICAxMjExLCAgMTIyMSwgIDEyMzMsICAxMjUxLCAgMTI3NSwgIDEzMDgsICAxMzQ0LCAgMTM2
NywgIDEzNzEsCisgICAgMTM4NSwgIDE0MDUsICAxNDM0LCAgMTQ1NCwgIDE1MzAsICAxNTQwLCAg
MTU2NiwgIDE1NjksICAxNTc1LCAgMTU4MywKKyAgICAxNTkxLCAgMTU5OSwgIDE2MDIsICAxNjA5
LCAgMTYxMiwgIDE2MTUsICAxNjIxLCAgMTYyNCwgIDE2MzksICAxNjQzLAorICAgIDE2NDcsICAx
NjUxLCAgMTY2MCwgIDE2NjUsICAxNjcwLCAgMTY3NSwgIDE2ODAsICAxNjg1LCAgMTY5MCwgIDE2
OTUsCisgICAgMTcwMCwgIDE3MDUsICAxNzExLCAgMTcxNywgIDE3MjMsICAxNzI4LCAgMTczMywg
IDE3MzgsICAxNzUxLCAgMTc2NCwKKyAgICAxNzcyLCAgMTc3NSwgIDE3OTAsICAxODE2LCAgMTgy
MCwgIDE4MjYsICAxODM0LCAgMTg1MCwgIDE4NTQsICAxODU4LAorICAgIDE4NTksICAxODY1LCAg
MTg2NiwgIDE4NjcsICAxODY4LCAgMTg2OSwgIDE4NzMsICAxODc0LCAgMTg3NCwgIDE4NzQsCisg
ICAgMTg4MiwgIDE4ODMsICAxODg4LCAgMTg5MSwgIDE4OTksICAxOTAyLCAgMTkwOCwgIDE5MDks
ICAxOTEzLCAgMTkyMSwKKyAgICAxOTI1LCAgMTkzNSwgIDE5NDAsICAxOTU3LCAgMTk1NywgIDE5
NjIsICAxOTYyLCAgMTk2OSwgIDE5NjksICAxOTc3LAorICAgIDE5ODAsICAxOTg2LCAgMTk4OSwg
IDE5OTUsICAxOTk5LCAgMjAwNiwgIDIwMTMsICAyMDIwLCAgMjAyNywgIDIwMzgsCisgICAgMjA0
NywgIDIwNTEsICAyMDU4LCAgMjA2MSwgIDIwNjcsICAyMDY3Cit9OworI2VuZGlmCisKKyNpZiBZ
WURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZ
TUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZp
cnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1p
bmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRl
bmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04i
LAorICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJB
VFRSSUJVVEUiLAorICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJ
TlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCisgICJETyIsICJFTFNFIiwgIkZPUiIsICJJ
RiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIsICJCVkVDMyIsCisgICJCVkVDNCIsICJJ
VkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgy
IiwKKyAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCisgICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKKyAgIklERU5USUZJRVIiLCAiVFlQ
RV9OQU1FIiwgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLAorICAiQk9PTENPTlNUQU5U
IiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwgIklOQ19PUCIsCisg
ICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwg
Ik9SX09QIiwKKyAgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FT
U0lHTiIsICJNT0RfQVNTSUdOIiwKKyAgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJB
TkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLCAiT1JfQVNTSUdOIiwKKyAgIlNVQl9BU1NJR04iLCAi
TEVGVF9QQVJFTiIsICJSSUdIVF9QQVJFTiIsICJMRUZUX0JSQUNLRVQiLAorICAiUklHSFRfQlJB
Q0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNFIiwgIkRPVCIsICJDT01NQSIsICJDT0xP
TiIsCisgICJFUVVBTCIsICJTRU1JQ09MT04iLCAiQkFORyIsICJEQVNIIiwgIlRJTERFIiwgIlBM
VVMiLCAiU1RBUiIsICJTTEFTSCIsCisgICJQRVJDRU5UIiwgIkxFRlRfQU5HTEUiLCAiUklHSFRf
QU5HTEUiLCAiVkVSVElDQUxfQkFSIiwgIkNBUkVUIiwKKyAgIkFNUEVSU0FORCIsICJRVUVTVElP
TiIsICIkYWNjZXB0IiwgInZhcmlhYmxlX2lkZW50aWZpZXIiLAorICAicHJpbWFyeV9leHByZXNz
aW9uIiwgInBvc3RmaXhfZXhwcmVzc2lvbiIsICJpbnRlZ2VyX2V4cHJlc3Npb24iLAorICAiZnVu
Y3Rpb25fY2FsbCIsICJmdW5jdGlvbl9jYWxsX29yX21ldGhvZCIsICJmdW5jdGlvbl9jYWxsX2dl
bmVyaWMiLAorICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFyYW1ldGVycyIsCisgICJmdW5j
dGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25fY2FsbF9oZWFkZXIi
LAorICAiZnVuY3Rpb25faWRlbnRpZmllciIsICJ1bmFyeV9leHByZXNzaW9uIiwgInVuYXJ5X29w
ZXJhdG9yIiwKKyAgIm11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24iLCAiYWRkaXRpdmVfZXhwcmVz
c2lvbiIsICJzaGlmdF9leHByZXNzaW9uIiwKKyAgInJlbGF0aW9uYWxfZXhwcmVzc2lvbiIsICJl
cXVhbGl0eV9leHByZXNzaW9uIiwgImFuZF9leHByZXNzaW9uIiwKKyAgImV4Y2x1c2l2ZV9vcl9l
eHByZXNzaW9uIiwgImluY2x1c2l2ZV9vcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfYW5kX2V4
cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVzc2lvbiIsCisgICJsb2dpY2FsX29yX2V4cHJl
c3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lvbiIsCisgICJhc3NpZ25tZW50X2V4cHJlc3Np
b24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJleHByZXNzaW9uIiwKKyAgImNvbnN0YW50X2V4
cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKKyAgImZ1bmN0
aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCisgICJm
dW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xh
cmF0aW9uIiwKKyAgInBhcmFtZXRlcl9xdWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIiwKKyAgImluaXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJm
dWxseV9zcGVjaWZpZWRfdHlwZSIsCisgICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmll
ciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAi
dHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNpZmllciIsCisgICJzdHJ1Y3Rf
ZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAorICAic3RydWN0X2RlY2xh
cmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCisgICJkZWNs
YXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAorICAi
Y29tcG91bmRfc3RhdGVtZW50IiwgIkAxIiwgIkAyIiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUi
LAorICAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSIsICJzdGF0ZW1lbnRfbGlzdCIs
CisgICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKKyAgInNl
bGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVu
dCIsICJAMyIsCisgICJANCIsICJANSIsICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9u
b3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFuc2xh
dGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9uIiwKKyAgImZ1bmN0aW9uX2RlZmluaXRp
b24iLCAiQDYiLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1b
WVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAg
dG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVt
W10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAy
NjEsICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwg
ICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3
NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0
LAorICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAg
MjkyLCAgIDI5MywgICAyOTQsCisgICAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTks
ICAgMzAwLCAgIDMwMSwgICAzMDIsICAgMzAzLCAgIDMwNCwKKyAgICAgMzA1LCAgIDMwNiwgICAz
MDcsICAgMzA4LCAgIDMwOSwgICAzMTAsICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzE0LAorICAg
ICAzMTUsICAgMzE2LCAgIDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAg
IDMyMywgICAzMjQsCisgICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMw
LCAgIDMzMSwgICAzMzIsICAgMzMzLCAgIDMzNCwKKyAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAg
MzM4LCAgIDMzOSwgICAzNDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAgMzQ0LAorICAgICAzNDUs
ICAgMzQ2LCAgIDM0NywgICAzNDgKK307CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1i
b2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAg
OTYsICAgIDk2LCAgICA5NiwgICAgOTYsICAgIDk2LCAgICA5NywgICAgOTcsCisgICAgICA5Nywg
ICAgOTcsICAgIDk3LCAgICA5NywgICAgOTgsICAgIDk5LCAgIDEwMCwgICAxMDAsICAgMTAxLCAg
IDEwMSwKKyAgICAgMTAyLCAgIDEwMiwgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA1
LCAgIDEwNSwgICAxMDYsICAgMTA2LAorICAgICAxMDYsICAgMTA2LCAgIDEwNywgICAxMDcsICAg
MTA3LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksCisgICAgIDEwOSwgICAxMTAs
ICAgMTExLCAgIDExMSwgICAxMTEsICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEyLCAgIDExMiwK
KyAgICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNiwgICAxMTcsICAgMTE3LCAgIDEx
OCwgICAxMTgsICAgMTE5LAorICAgICAxMTksICAgMTIwLCAgIDEyMCwgICAxMjEsICAgMTIxLCAg
IDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIsCisgICAgIDEyMywgICAxMjQsICAgMTI0
LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI3LCAgIDEyOCwKKyAgICAg
MTI5LCAgIDEyOSwgICAxMzAsICAgMTMwLCAgIDEzMCwgICAxMzAsICAgMTMxLCAgIDEzMSwgICAx
MzEsICAgMTMxLAorICAgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzMywg
ICAxMzMsICAgMTMzLCAgIDEzNCwgICAxMzQsCisgICAgIDEzNCwgICAxMzQsICAgMTM0LCAgIDEz
NCwgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM2LCAgIDEzNiwKKyAgICAgMTM2LCAg
IDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM5LCAgIDEzOSwgICAxNDAsICAg
MTQwLAorICAgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAs
ICAgMTQwLCAgIDE0MCwgICAxNDAsCisgICAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAx
NDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0Miwg
ICAxNDMsICAgMTQ0LCAgIDE0NCwgICAxNDUsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LAor
ICAgICAxNDgsICAgMTQ5LCAgIDE0OSwgICAxNDksICAgMTQ5LCAgIDE0OSwgICAxNTAsICAgMTUx
LCAgIDE1MiwgICAxNTAsCisgICAgIDE1MywgICAxNTMsICAgMTU0LCAgIDE1NCwgICAxNTUsICAg
MTU1LCAgIDE1NiwgICAxNTYsICAgMTU3LCAgIDE1OCwKKyAgICAgMTU4LCAgIDE1OSwgICAxNTks
ICAgMTYxLCAgIDE2MCwgICAxNjIsICAgMTYwLCAgIDE2MywgICAxNjAsICAgMTY0LAorICAgICAx
NjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY3LCAgIDE2
NywgICAxNjcsCisgICAgIDE2OCwgICAxNjgsICAgMTY5LCAgIDE2OSwgICAxNzEsICAgMTcwCit9
OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhh
bmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJb
XSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwKKyAgICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAg
IDMsICAgICAxLCAgICAgMywKKyAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsCisgICAg
ICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKKyAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLAorICAgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwg
ICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDUsICAgICAxLCAg
ICAgMiwKKyAgICAgICA0LCAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwK
KyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDUsICAgICA0LAorICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAg
ICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAwLCAgICAgNSwKKyAgICAg
ICAxLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDUsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LCAgICAgMCwg
ICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAwLCAgICAg
MiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwKKyAgICAgICAxLCAg
ICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRF
LU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUt
TlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBa
ZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAgICAgIDAsICAgICAwLCAgIDExMywgICAx
MTQsICAgMTE1LCAgICAgMCwgICAxMDcsICAgMTA2LCAgIDEyMSwgICAxMTksCisgICAgIDEyMCwg
ICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMjIsICAgMTIzLCAg
IDEyNCwKKyAgICAgMTMxLCAgIDEzMiwgICAxMzMsICAgMTEwLCAgIDEwOCwgICAgIDAsICAgMTE4
LCAgIDEzNCwgICAxMzUsICAgMTM3LAorICAgICAxOTMsICAgMTk0LCAgICAgMCwgICAgNzYsICAg
IDg2LCAgICAgMCwgICAgOTEsICAgIDk4LCAgICAgMCwgICAxMDQsCisgICAgICAgMCwgICAxMTEs
ICAgMTE2LCAgIDEzNiwgICAgIDAsICAgMTkwLCAgIDE5MiwgICAxMDksICAgMTAzLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgNzEsICAgICAwLCAgICA3NCwgICAgODYsICAgICAwLCAgICA4
NywgICAgODgsICAgIDg5LAorICAgICAgNzcsICAgICAwLCAgICA4NiwgICAgIDAsICAgIDcyLCAg
ICA5OSwgICAxMDUsICAgMTEyLCAgICAgMCwgICAgIDEsCisgICAgIDE5MSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQwLCAgICAgMCwgICAxOTUsICAgIDc4LCAgICA4MywKKyAgICAg
IDg1LCAgICA5MCwgICAgIDAsICAgIDkyLCAgICA3OSwgICAgIDAsICAgICAwLCAgICAgMiwgICAg
IDUsICAgICA0LAorICAgICAgIDYsICAgIDI3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNCwg
ICAgMzMsICAgIDMyLCAgICAgMywgICAgIDgsCisgICAgICAyOCwgICAgMTAsICAgIDE1LCAgICAx
NiwgICAgIDAsICAgICAwLCAgICAyMSwgICAgIDAsICAgIDM1LCAgICAgMCwKKyAgICAgIDM4LCAg
ICA0MSwgICAgNDIsICAgIDQ3LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTUsICAg
IDU3LAorICAgICAgNTksICAgIDcwLCAgICAgMCwgICAgMjUsICAgIDczLCAgICAgMCwgICAxNDUs
ICAgICAwLCAgIDE0MywgICAxMzksCisgICAgIDE0MSwgICAgIDAsICAgICAwLCAgIDE3NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1NywKKyAgICAgMTYyLCAgIDE2Niwg
ICAgMzUsICAgIDYxLCAgICA2OCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAxMDQsICAgMTUxLAor
ICAgICAxNjQsICAgMTUwLCAgIDE0OSwgICAgIDAsICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTU1
LCAgICA4MCwgICAgODIsCisgICAgICA4NCwgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsICAg
MTQ3LCAgIDEwMiwgICAgMjksICAgIDMwLCAgICAgMCwKKyAgICAgIDEyLCAgICAxMywgICAgIDAs
ICAgICAwLCAgICAxOSwgICAgMTgsICAgICAwLCAgIDExOCwgICAgMjIsICAgIDI0LAorICAgICAg
MzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE3LCAg
IDEzOCwgICAgIDAsICAgICAwLCAgIDE0MiwKKyAgICAgMTg2LCAgIDE4NSwgICAgIDAsICAgMTc3
LCAgICAgMCwgICAxODksICAgMTg3LCAgICAgMCwgICAxNzMsICAgMTU2LAorICAgICAgIDAsICAg
IDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2MywgICAgIDAsICAgICAwLCAgIDE2NywgICAx
NjMsCisgICAgIDE2NSwgICAgIDAsICAgIDkzLCAgICAgMCwgICAgOTcsICAgMTAxLCAgICAgNywg
ICAgIDAsICAgIDE0LCAgICAyNiwKKyAgICAgIDExLCAgICAxNywgICAgMjMsICAgIDM2LCAgICAz
NywgICAgNDAsICAgIDM5LCAgICA0NSwgICAgNDYsICAgIDQzLAorICAgICAgNDQsICAgIDQ4LCAg
ICA0OSwgICAgNTQsICAgIDU2LCAgICA1OCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgMTg4LCAgICAgMCwgICAxNTgsICAgIDYyLCAgICA2OSwgICAgIDAs
ICAgICAwLCAgICA5NCwKKyAgICAgICA5LCAgICAgMCwgICAxNDYsICAgICAwLCAgIDE4MCwgICAx
NzksICAgMTgyLCAgICAgMCwgICAxNzEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA4MSwg
ICAgOTUsICAgICAwLCAgICA2MCwgICAgIDAsICAgMTgxLCAgICAgMCwgICAgIDAsCisgICAgIDE3
MCwgICAxNjgsICAgICAwLCAgICAgMCwgICAxNTksICAgIDk2LCAgICAgMCwgICAxODMsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgIDE2MSwgICAxNzQsICAgMTYwLCAgICAgMCwgICAxODQsICAg
MTc4LCAgIDE2OSwgICAxNzIsICAgMTc2Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0x
LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDIyNywgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQs
ICAgMTA1LAorICAgICAxMDYsICAgMTA3LCAgIDE0MiwgICAxMDksICAgMTEwLCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOSwg
ICAxMjAsICAgMTQzLCAgIDE0NCwgICAyMTYsICAgMTQ1LCAgIDEyMiwKKyAgICAgMTQ2LCAgIDE0
NywgICAgMzIsICAgIDMzLCAgICAzNCwgICAgNzksICAgIDYwLCAgICA2MSwgICAgODAsICAgIDM1
LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAxMjMsICAgIDQwLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA3NCwgICAgNzUsCisgICAgIDEyNywgICAxMjgsICAgMTY2LCAgIDE0OSwgICAxNTAs
ICAgMTUxLCAgIDE1MiwgICAyMTAsICAgMjcxLCAgIDI5MiwKKyAgICAgMjkzLCAgIDE1MywgICAx
NTQsICAgMTU1LCAgIDI4MSwgICAyNzAsICAgMTU2LCAgIDI1MywgICAyMDIsICAgMjUwLAorICAg
ICAyNjYsICAgMjc4LCAgIDI3OSwgICAxNTcsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDUzCit9
OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0
aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0y
NTMKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgIDEyNjksICAg
LTExLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEyNCwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0y
NTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1Mywg
IC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1
MywgICAtNDAsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAgLTY1LCAg
IC01MiwgICAtNTAsICAgIDIxLCAgICAxNiwgIC0yNTMsICAgLTEwLCAgMTMxMCwgIC0yNTMsCisg
ICAgMTMzNCwgIC0yNTMsICAgLTEyLCAgLTI1MywgIDExODIsICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzLCAgMTMzNCwKKyAgICAgIC0zLCAgMTMxMCwgIC0yNTMsICAgIDEwLCAgLTI1MywgICAg
MzIsICAgIDY4LCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAxMzEwLCAgIDEyMiwg
ICAgNzgsICAtMjUzLCAgICAxMSwgIC0yNTMsICAtMjUzLCAgIDk5MywgIC0yNTMsCisgICAgLTI1
MywgICAgMzEsICAxMzEwLCAgICA4MywgICAyMDIsICAtMjUzLCAgIDI4NywgIC0yNTMsICAtMjUz
LCAgLTI1MywKKyAgICAtMjUzLCAgICA5MSwgIDEzMTAsICAgLTYzLCAgLTI1MywgICA3NjQsICAg
OTkzLCAgICA4MCwgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAtMjUzLCAgIDk5MywgICA5OTMs
ICAgOTkzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAgICAyNywgIC0y
NTMsICAtMjUzLCAgLTI1MywgICAgODEsICAgLTM0LCAgMTA2MCwgICAgOTAsICAtMjUzLCAgIDk5
MywKKyAgICAgIDEyLCAgICAtOSwgIC0yNTMsICAgLTM2LCAgIDEwMywgIC0yNTMsICAtMjUzLCAg
LTI1MywgICAxMTEsICAgMTEwLAorICAgICAtNDQsICAtMjUzLCAgICA5NywgIC0yNTMsICAtMjUz
LCAgMTEyNywgICAgOTksICAgIDM2LCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgICAgOTIsICAg
MTAwLCAgLTI1MywgICAxMDcsICAgMTA5LCAgIDEwMSwgICA4NDUsICAgMTEyLCAgIDEwOCwKKyAg
ICAtMjUzLCAgLTI1MywgICAgMjUsICAtMjUzLCAgLTI1MywgICAgNDIsICAtMjUzLCAgIC02NSwg
ICAxMTUsICAtMjUzLAorICAgIC0yNTMsICAtMjUzLCAgLTI1MywgICAzNjksICAtMjUzLCAgLTI1
MywgIC0yNTMsICAtMjUzLCAgIDExNCwgIC0yNTMsCisgICAgLTI1MywgICA5MTIsICAgOTkzLCAg
LTI1MywgICAxMTcsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgICAtNywKKyAgICAtMjUz
LCAgLTI1MywgICA5OTMsICAxMjIzLCAgLTI1MywgIC0yNTMsICAgOTkzLCAgIDExNiwgIC0yNTMs
ICAtMjUzLAorICAgIC0yNTMsICAgOTkzLCAgIDk5MywgICA5OTMsICAgOTkzLCAgIDk5MywgICA5
OTMsICAgOTkzLCAgIDk5MywgICA5OTMsCisgICAgIDk5MywgICA5OTMsICAgOTkzLCAgIDk5Mywg
ICA5OTMsICAtMjUzLCAgLTI1MywgICA5OTMsICAgIDgzLCAgLTI1MywKKyAgICAtMjUzLCAgLTI1
MywgICA0NTEsICAtMjUzLCAgIDk5MywgIC0yNTMsICAtMjUzLCAgICA0MywgIC0yNTMsICAtMjUz
LAorICAgICA0NTEsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgICA5OTMsICAg
OTkzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgICA5OTMsICAgMTEzLCAgIDExOCwgIC0yNTMs
ICAtMjUzLCAgLTI1MywgICAxMjAsICAgMTE5LCAgLTI1MywKKyAgICAgMTI3LCAgLTI1MywgIC0y
NTMsICAtMjUzLCAgLTI1MywgICAgMTIsICAgIDEyLCAgLTI1MywgIC0yNTMsICAtMjUzLAorICAg
IC0yNTMsICAgLTM2LCAgIC0zNiwgIC0yNTMsICAgMTExLCAgIDExMCwgICAgODUsICAgMTIxLCAg
LTI1MywgICAxNDgsCisgICAgIDYxNSwgICAgMTgsICAtMjUzLCAgIDY5NywgICA0NTEsICAtMjUz
LCAgLTI1MywgICAxMjUsICAgOTkzLCAgIDEzMCwKKyAgICAtMjUzLCAgIDk5MywgIC0yNTMsICAg
MTI5LCAgLTI1MywgIC0yNTMsICAgNjk3LCAgIDQ1MSwgICAxMTksICAgMTU3LAorICAgICAxMzIs
ICAgMTI2LCAgLTI1MywgIC0yNTMsICAgOTkzLCAgLTI1MywgICA5OTMsICAtMjUzLCAgIDEzMSwg
ICAxMzMsCisgICAgIDE5OSwgIC0yNTMsICAgMTM3LCAgIDUzMywgIC0yNTMsICAtMjUzLCAgICAy
OSwgICA5OTMsICAgNTMzLCAgIDQ1MSwKKyAgICAgOTkzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAg
IDEzOCwgICAxMTksICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzCit9OworCisvKiBZWVBHT1RP
W05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQor
eworICAgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAg
IDQ0LCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAgLTQ2LCAgLTI1MywgICAtMTks
ICAtMjUzLCAgIC03OCwgICAtMjMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgICAyOCwgICAg
MzAsICAgIDQ1LCAgLTI1MywgICAtNDMsICAgLTg1LCAgLTI1MywgICAtOTIsICAgLTczLAorICAg
ICAgIDQsICAgICA2LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEzOSwgICAxNjUsICAgMTczLCAg
IDE1NCwgIC0yNTMsCisgICAgLTI1MywgIC0yNDMsICAgLTI3LCAgICAgMCwgICAyMzIsICAgLTI5
LCAgLTI1MywgIC0yNTMsICAgMTY3LCAgIC02NiwKKyAgICAtMjUzLCAgICA0NywgIC0xNTcsICAg
IC04LCAgLTE0MCwgIC0yNTIsICAtMjUzLCAgLTI1MywgIC0yNTMsICAgLTQxLAorICAgICAxOTUs
ICAgIDM5LCAgICAgMSwgIC0yNTMsICAtMjUzLCAgIC0xNCwgIC0yNTMsICAtMjUzLCAgLTI1Mywg
IC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAgMjExLCAgLTI1
MywgIC0yNTMKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBk
byBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4u
ICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9w
cG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9O
SU5GLCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTc2CitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICAzOSwgICAxNjUsICAgMTY5
LCAgICA1MCwgICAgMzAsICAgMjI0LCAgICAzMSwgICAgNjIsICAgMTMwLCAgIDE2MSwKKyAgICAg
MjY5LCAgICA2NywgICAxNjQsICAgMjIwLCAgIDE5MywgICAgNTIsICAgMTYyLCAgIDE4NSwgICAx
ODYsICAgIDU0LAorICAgICAgNzEsICAgMTc4LCAgIDEwOCwgICAyNjksICAgIDU2LCAgIDEyMSwg
ICAgNDcsICAgIDU1LCAgICA2MiwgICAgIDYsCisgICAgICAgNywgICAyOTEsICAgIDQ4LCAgICA2
NSwgICAgNTEsICAgIDU2LCAgIDI5MSwgICAxNzUsICAgIDY2LCAgIDEwOCwKKyAgICAgICA2LCAg
ICAgNywgICAxMjEsICAgMTc2LCAgICAzOSwgICAyMDcsICAgMTY3LCAgIDE2OCwgICAgMzAsICAg
MTk0LAorICAgICAgMzEsICAgIDczLCAgIDE4NywgICAxODgsICAgIDU3LCAgICA1OCwgICAgNTks
ICAgIDIzLCAgICAyNCwgICAxMzAsCisgICAgICA2OCwgICAgODEsICAgMjQ5LCAgIDE4MCwgICAy
MjYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDIzLCAgICAyNCwKKyAgICAgMjE3LCAgICA3Miwg
ICAgNzMsICAgMTgzLCAgICA3MywgICAxODQsICAgMTQ4LCAgIDE2NSwgICAxNzAsICAgMTcxLAor
ICAgICAyMjgsICAgIDg0LCAgICA4MSwgICAgODUsICAgIDc2LCAgIDIxMSwgICAyMTIsICAgMjEz
LCAgIDIyMywgICAyNjcsCisgICAgICA4NiwgICAyMzIsICAgLTc1LCAgICA2MywgICAyMTQsICAg
MjE3LCAgICA2NCwgICAxODEsICAgMTgyLCAgIDE3MiwKKyAgICAgMjk0LCAgIDI3MywgICAyNDYs
ICAgMTczLCAgIDIxNSwgICAgNDcsICAgMjE3LCAgIDIzNywgICAyMzgsICAgMjM5LAorICAgICAy
NDAsICAgMTI0LCAgIDI1MSwgICAxOTgsICAgMjIwLCAgIDEwOCwgICAxOTksICAgMjg1LCAgIDEy
MSwgICAyMTcsCisgICAgIDIxNywgICAgODMsICAgMjE4LCAgIDI1MiwgICAyNDcsICAgIDczLCAg
IDEyNiwgICAyODAsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDI1NSwgICAyNTYsICAgMjk4
LCAgIDE1OCwgICAyMzMsICAgMjM0LCAgIDEwOCwgICAxMDgsICAgMTA4LAorICAgICAxMDgsICAg
MTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDI1NywgICAy
OTcsCisgICAgIC0yNiwgICAxMDgsICAgMTc0LCAgIDE0OCwgICAxMjEsICAgIDU3LCAgICA1OCwg
ICAgNTksICAgMTg5LCAgIDE5MCwKKyAgICAgMTc5LCAgIDI2OCwgICAyMTcsICAgMjYxLCAgIDIz
NSwgICAyMzYsICAgMjQxLCAgIDI0MiwgICAxOTEsICAgMTkyLAorICAgICAxOTUsICAgMTk3LCAg
IDIwMCwgICAxNjUsICAgMjY4LCAgIDEwOCwgICAyNzUsICAgMjAzLCAgIDEyMSwgICAyMDQsCisg
ICAgIDIwMSwgICAyMDUsICAgMjA4LCAgIDIwOSwgICAyODYsICAgLTI1LCAgIDIyMSwgICAtMjAs
ICAgMjYzLCAgIDE2NSwKKyAgICAgMjI1LCAgIDI1OSwgICAyNTgsICAgMjYwLCAgIDI2MiwgICAy
OTUsICAgMjE3LCAgIC0yNywgICAyNzIsICAgMjc2LAorICAgICAyODIsICAgMjg0LCAgIDE0OCwg
ICAyODMsICAgMjg4LCAgIDE2NSwgICAgIDIsICAgICAzLCAgICAgNCwgICAyNzQsCisgICAgIDE0
OCwgICAyODcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMjg5LCAgIDI5MCwgICAyMzEsICAgMjk5
LCAgIDI0MywKKyAgICAgIDc4LCAgIDE1OSwgICAyNDQsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICA4MiwgICAxNjAsICAgIDQ5LCAgIDI0NSwgICAxMjUsCisgICAgICAyNSwgICAg
MjYsICAgMjY0LCAgICAyNywgICAgMjgsICAgMjQ4LCAgICAyOSwgICAyOTYsICAgIDc3LCAgIDI1
NCwKKyAgICAgMTQ4LCAgIDI2NSwgICAyNzcsICAgMTQ4LCAgIDE0OCwgICAgNzAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjksICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxNDgsICAgMTQ4LAorICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgIDEzMSwgICAxMzIsICAgMTMzLCAg
ICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwKKyAgICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgMTM4LCAgICAyNywgICAgMjgsCisgICAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwg
ICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzksICAgMTQwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk1LCAgICA5NiwKKyAgICAgICAwLCAgICA5NywgICAg
IDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAg
ICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAg
IDEzNiwgICAxMzcsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAorICAgICAgMjcs
ICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwg
ICAgIDAsCisgICAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAxMzksICAgMjE5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEs
CisgICAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LAorICAgICAxMzYsICAgMTM3LCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwKKyAgICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjks
ICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLAorICAgICAgIDAsICAgICAwLCAgICA5MiwgICAg
OTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAg
ICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwK
KyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2
LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwKKyAgICAg
IDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAg
ICAyLAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICA4NywgICAgMjksCisgICAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAg
ICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAg
ICA5NSwgICAgOTYsICAgICAwLCAgICA5NywKKyAgICAgIDU2LCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAg
MTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAorICAgICAgODcsICAgIDI5LCAg
ICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NCwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NSwgICAgOTYsCisgICAgICAg
MCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsCisgICAgICA4OSwgICAg
OTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0
LCAgICAgMCwgICAgIDAsICAgMTYzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMiwKKyAg
ICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcs
ICAgIDI5LAorICAgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAg
OTIsICAgIDkzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgIDIwNiwgICAgOTUsICAg
IDk2LCAgICAgMCwgICAgOTcsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAgICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAg
ICA4OSwgICAgOTAsCisgICAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgIDIyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5
NywgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
CisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LAorICAgICAgOTAsICAgIDkxLCAgICAg
MCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMiwgICAgIDMs
ICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgMTc3LAorICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcsICAg
IDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsCisgICAgICAgMCwgICAgOTIs
ICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgOTQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAgMCwgICAgOTUsICAgIDk2
LCAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKKyAgICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgNjksICAgICAwLCAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAg
ICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTk2LCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKKyAgICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LAor
ICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgICAy
LCAgICAgMywgICAgIDQsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
IDIyOSwgICAgMjksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDIzMCwgICAgIDEsICAgICAy
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLAorICAgICAgMjcsICAgIDI4LCAg
ICAgMCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAyNSwgICAgMjYsCisgICAgICAg
MCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOQorfTsKKworc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAgIDAsICAgIDg2LCAgICA5NCwgICAgNDMs
ICAgICAwLCAgIDE2MiwgICAgIDAsICAgIDM0LCAgICA3NCwgICAgNzIsCisgICAgIDI1MywgICAg
NDAsICAgIDg1LCAgIDE1MywgICAgNTgsICAgIDgwLCAgICA3OSwgICAgNTMsICAgIDU0LCAgICA3
MSwKKyAgICAgIDQ5LCAgIDEwNiwgICAgNjgsICAgMjY2LCAgICAgMywgICAgNjgsICAgIDM3LCAg
ICA3NywgICAgNTUsICAgICA4LAorICAgICAgIDksICAgMjgzLCAgICA0MywgICAgNDMsICAgIDc0
LCAgICAgMywgICAyODgsICAgIDcxLCAgICAzOCwgICAgODUsCisgICAgICAgOCwgICAgIDksICAg
IDg1LCAgICA3NywgICAgNDQsICAgMTM3LCAgICA5MiwgICAgOTMsICAgIDQ0LCAgICA5MywKKyAg
ICAgIDQ0LCAgICA1MSwgICAgODgsICAgIDg5LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgMTI1LAorICAgICAgNzIsICAgIDYxLCAgIDIwMiwgICAxMDksICAgIDcxLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICA3NywgICAgNzQsICAgIDcyLCAg
ICA4MiwgICAgNzQsICAgIDg0LCAgICA3NiwgICAxNjIsICAgIDUxLCAgICA1MiwKKyAgICAgMTcy
LCAgICA3MCwgICAgODIsICAgIDcyLCAgICA3NCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAxNjEs
ICAgIDcxLAorICAgICAgNzksICAgMTc2LCAgICA3MSwgICAgNzcsICAgIDY5LCAgICA3NywgICAg
ODAsICAgIDg1LCAgICA4NiwgICAgNzIsCisgICAgICA3MSwgICAyNTgsICAgMTk0LCAgICA3Niwg
ICAgNzksICAgIDM3LCAgICA3NywgICAxODUsICAgMTg2LCAgIDE4NywKKyAgICAgMTg4LCAgICA4
MCwgICAyMDQsICAgIDc3LCAgIDI1NCwgICAxNjEsICAgIDgwLCAgIDI3NCwgICAxNjEsICAgIDc3
LAorICAgICAgNzcsICAgIDQzLCAgICA4MCwgICAgODAsICAgMTk3LCAgIDEyNSwgICAgNDMsICAg
MjY3LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAyMTYsICAgMjE3LCAgIDI5MCwgICAgNDMs
ICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwKKyAgICAgMTg2LCAgIDE4NywgICAx
ODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAyMjEsICAgMjg5LAorICAg
ICAgNzAsICAgMTk3LCAgICA3MSwgICAxNTMsICAgMTk3LCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICA1NSwgICAgNTYsCisgICAgICA3MCwgICAyNTMsICAgIDc3LCAgICA3OCwgICAxODMsICAgMTg0
LCAgIDE4OSwgICAxOTAsICAgIDU3LCAgICA1OSwKKyAgICAgIDczLCAgICA3MiwgICAgODAsICAg
MjU4LCAgIDI2NiwgICAyMjEsICAgMjYxLCAgICA3MCwgICAyMjEsICAgIDcwLAorICAgICAgODAs
ICAgIDgwLCAgICA3MCwgICAgNzUsICAgMjc2LCAgICA3MCwgICAgNzIsICAgIDcxLCAgICA0MCwg
ICAyNzQsCisgICAgICA3MywgICAgNzMsICAgIDc5LCAgICA3MywgICAgNzMsICAgMjg3LCAgICA3
NywgICAgNzAsICAgIDczLCAgICA3MCwKKyAgICAgIDQzLCAgICA3NSwgICAyMDIsICAgIDcxLCAg
ICA3MSwgICAyOTAsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDc5LAorICAgICAyMTAsICAgIDgw
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxNiwgICAgNzksICAgMTczLCAgICA4MCwgICAxOTEs
CisgICAgICA1NSwgICAgODIsICAgMTkyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgNjIsICAgIDgyLCAgICAgNSwgICAxOTMsICAgIDcyLAorICAgICAgMzgsICAgIDM5LCAgIDI1
MCwgICAgNDEsICAgIDQyLCAgIDE5OCwgICAgNDQsICAgMjg4LCAgICA1MywgICAyMTAsCisgICAg
IDI1MCwgICAyNTAsICAgMjY2LCAgIDI1MywgICAyNTQsICAgIDQ0LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMjY2LCAgIDI2NywgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDI4MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjg4LCAg
IDI4OSwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgwLCAgICA4MSwgICAgODIsCisgICAgICAtMSwgICAgODQsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICA0Miwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLAor
ICAgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDc0LCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLAorICAgICAg
ODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsCisgICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAg
ODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCisgICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc0LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAzLCAgICAgNCwKKyAg
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAg
NTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgODEsICAg
IDgyLCAgICAtMSwgICAgODQsCisgICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAorICAg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzAsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODEsICAgIDgyLAorICAgICAgLTEsICAgIDg0
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
CisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEs
ICAgIC0xLCAgICA3MywgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgIDQsCisgICAgICAgNSwg
ICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwK
KyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1
MiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgODAsICAgIDgxLCAgICA4MiwgICAg
LTEsICAgIDg0LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDM4LCAg
ICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LAorICAgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgNzAsICAgIC0xLCAgICAtMSwgICAgNzMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICA0
LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCisgICAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0x
LCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICA4
MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLAorICAgICAgLTEsICAgIDUxLCAgICA1Miwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIDcwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgLTEsICAgIDgxLCAgICA4MiwgICAgLTEs
ICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAg
ICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
ICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAg
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICA3NSwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKKyAgICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAgNCwgICAgIDUs
ICAgICA2LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNDgsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwKKyAgICAgIDQxLCAgICA0MiwgICAgLTEsICAg
IDQ0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
CisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQKK307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0t
IFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3Rh
dGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQor
eworICAgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MSwgICAgNDIsICAgIDQ0LAorICAg
ICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEzMywgICAxMzQsICAgMTM1LCAg
IDEzNiwgICAxMzcsCisgICAgIDEzOCwgICAxMzksICAgMTQwLCAgIDE0MSwgICAxNjgsICAgMTY5
LCAgIDE3MCwgICAgMzcsICAgIDQzLCAgIDEzOCwKKyAgICAgIDQzLCAgICA3NCwgICAgODAsICAg
MTcxLCAgICA3MSwgICAgNzcsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAxMzAs
ICAgMTMxLCAgIDEzNiwgICAgNzcsICAgIDgwLCAgICA0MywgICAxMzcsICAgMTM5LCAgICA3Miwg
ICAgIDAsCisgICAgIDE2OSwgICAxMzksICAgIDc0LCAgIDEzNywgICAxNDIsICAgMTQzLCAgICA3
NCwgICAxNTQsICAgMTMwLCAgIDEyOSwKKyAgICAgMTMyLCAgIDEzNywgICAxMzEsICAgIDQzLCAg
ICA3MCwgICAgNzIsICAgIDc5LCAgICA0MywgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4
LCAgICA1MSwgICAgNTIsICAgIDcwLCAgICA4MSwgICAgODIsICAgIDg0LCAgICA5NSwgICAgOTYs
CisgICAgICA5NywgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAx
MDUsICAgMTA2LCAgIDEwNywKKyAgICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwg
ICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LAorICAgICAxMTgsICAgMTE5LCAgIDEy
MywgICAxMzcsICAgIDgwLCAgIDE0MiwgICAgNDMsICAgMTQ0LCAgIDE0NSwgICAgNzUsCisgICAg
IDE0MywgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDQwLCAgICA3NCwKKyAgICAgIDc1LCAgICA4MCwgICAxMDYsICAgMTE5LCAgIDEyMCwgICAxMjIs
ICAgMTI0LCAgIDEyNSwgICAxMzcsICAgMTQ3LAorICAgICAxNDgsICAgMTQ5LCAgIDE1MCwgICAx
NTUsICAgMTU2LCAgIDE1NywgICAxNjAsICAgMTY3LCAgICA0MywgICAxMjksCisgICAgIDEzMiwg
ICAgNzIsICAgIDc5LCAgICA3MywgICAxMjMsICAgMTIwLCAgIDE0NiwgICAxMDYsICAgMTA2LCAg
IDEyMiwKKyAgICAgIDUxLCAgICA1MiwgICAgNzIsICAgIDc2LCAgICA3MSwgICAgNzEsICAgIDc3
LCAgICAzOSwgICAxMjAsICAgIDcwLAorICAgICAxMDYsICAgIDg1LCAgICA4NiwgICAgODIsICAg
IDg0LCAgICA1MywgICAgNTQsICAgIDg4LCAgICA4OSwgICAgNTUsCisgICAgICA1NiwgICAgNTcs
ICAgIDU5LCAgICA1OCwgICAgOTMsICAgIDczLCAgICA3NSwgICAgNzIsICAgIDc3LCAgICA4MCwK
KyAgICAgIDgwLCAgICA4MCwgICAxNjIsICAgIDcwLCAgICA3MCwgICAgODAsICAgIDgwLCAgIDEy
MiwgICAgNzAsICAgIDc1LAorICAgICAxNTEsICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDY5LCAg
ICA3OSwgICAxMjEsICAgIDc3LCAgICA4MCwgICAgNzUsCisgICAgIDE0OCwgICAgNzIsICAgIDcz
LCAgIDEyMywgICAxNDYsICAgIDczLCAgICA3MSwgICAgOTgsICAgMTIyLCAgICA0MywKKyAgICAg
IDQ4LCAgIDEwMSwgICAxMjAsICAgMTA2LCAgIDEwNiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAx
MTAsICAgMTEwLAorICAgICAxMTAsICAgMTExLCAgIDExMSwgICAxMTUsICAgMTE2LCAgIDExNywg
ICAxMjIsICAgMTIzLCAgIDE0NSwgICAxNDgsCisgICAgIDE2MywgICAxMjIsICAgIDgwLCAgIDE2
MSwgICAxNTUsICAgMTIwLCAgIDEyMCwgICAxMjMsICAgIDc5LCAgICA3MywKKyAgICAgIDczLCAg
ICA3OCwgICAgNzMsICAgIDQwLCAgIDE0NywgICAxNTYsICAgMTY0LCAgICA3MSwgICAxMjIsICAg
MTM1LAorICAgICAxNTksICAgMTUyLCAgICA3MywgICAxNDYsICAgIDc5LCAgIDEyMCwgICAgNzAs
ICAgMTU5LCAgIDE2NSwgICAxNjYsCisgICAgIDE0OCwgICAxNTgsICAgIDQzLCAgICA3MSwgICAg
NzUsICAgMTQ2LCAgIDEyMiwgICAgODAsICAgIDcxLCAgICAxNiwKKyAgICAgIDc5LCAgIDE0OSwg
ICAxNTMsICAgMTU0LCAgICA3MSwgICAxMjIsICAgMTUzLCAgIDE0OCwgICAxNDYsICAgIDgwCit9
OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJp
bgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVP
RgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisK
Ky8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFu
aW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBs
YW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3Rv
IHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisj
ZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJCQlcCisgIGlmICh5
eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJCQkJCQkJXAorICAg
ICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJ
CVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAgWVlQ
T1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJ
CQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXllcnJvciAo
WVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAgICBZWUVSUk9SOwkJ
CQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQorCisKKyNkZWZpbmUgWVlU
RVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQgLS0g
U2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAs
IHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRo
ZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2RlZmlu
ZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMg
ZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAorICAgIGRvCQkJCQkJ
CQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xp
bmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChDdXJyZW50KS5maXJz
dF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKwkgIChDdXJyZW50
KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlcCisJICAoQ3Vy
cmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47CVwKKwl9
CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQp
LmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJICAgIFlZUkhTTE9D
IChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChD
dXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29s
dW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgorCisK
Ky8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFt
LgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5
IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUg
dGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAor
IyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMg
IGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChG
aWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5m
aXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVt
bikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lk
KSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdp
dGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZp
bmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZ
TEVYIHl5bGV4ICgmeXlsdmFsKQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVx
dWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVk
ZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5l
IFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJ
CVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdz
OwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRp
dGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlm
ICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAo
c3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlKTsgXAorICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRo
aXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRw
dXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCkKKyNlbHNlCitz
dGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZh
bHVlcCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUg
Y29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyNlbmRpZgoreworICBpZiAoIXl5dmFsdWVwKQorICAg
IHJldHVybjsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAg
IFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNl
CisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsK
KyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJ
TEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAp
CisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwg
eXl2YWx1ZXApCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNU
WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZ
TlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVb
eXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwg
eXl0eXBlLCB5eXZhbHVlcCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9CisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJv
bSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5
X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCisj
ZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKKyAgICB5eXR5
cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRvcDsKKyNlbmRpZgoreworICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgYm90dG9tIDw9IHRvcDsg
Kytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsKKyAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAg
IHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZWUlEICgw
KSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlf
cmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSkKKyNlbHNlCitzdGF0aWMg
dm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlKQorICAgIFlZU1RZUEUgKnl5dnNw
OworICAgIGludCB5eXJ1bGU7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxl
XTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVs
ZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGlu
ZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMg
YmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykK
KyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0s
CisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJICAg
ICAgICk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBkZWZp
bmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJ
CQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSk7IFwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1
bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAq
LworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRG
KEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2Nh
dGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlf
UkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRE
RVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVm
CVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1B
WERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUg
b25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCku
CisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUg
dW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZ
WU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIg
YXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBU
SCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5
eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMg
ICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBv
ZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisjZWxzZQorc3Rh
dGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAgY29uc3QgY2hhciAqeXlzdHI7Cisj
ZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxl
bl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlm
CisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAm
JiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5
c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmlu
ZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8K
KyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgY2hhciAq
Cit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKyNlbHNlCitzdGF0
aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKyAgICBjaGFyICp5eWRlc3Q7Cisg
ICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0Owor
ICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykg
IT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlm
CisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29u
dGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3Rl
cyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRo
ZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5s
ZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJh
Y2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0
YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGlu
c3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2
ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29u
c3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZ
U0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAg
Zm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2Ug
JywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkg
ICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsK
KwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykK
KwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOworCisJ
ICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwor
CSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9
CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0
dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENv
cHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRv
a2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVy
IG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRl
LiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBjb3B5IGFueXRoaW5nOyBqdXN0IHJl
dHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEg
c3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFyeSAic3ludGF4IGVycm9yIgorICAg
bWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3Vy
cyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLworc3RhdGljIFlZU0laRV9UCit5eXN5
bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQorewor
ICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlmICghIChZWVBBQ1RfTklORiA8IHl5
biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAg
IGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6
ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CisgICAgICBZWVNJWkVfVCB5eXNp
emUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXplMTsKKyAgICAgIGludCB5eXNpemVf
b3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0g
PSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0
dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3Rl
ZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
Iik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVz
Iik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVz
IG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl
ZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CisjIGVuZGlmCisgICAgICBj
aGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNv
bnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyI7CisgICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKKyAg
ICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworICAgICAgY2hhciB5eWZv
cm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEK
KwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKwkJICAgICAgICog
KHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBl
Y3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lk
IG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICovCisgICAgICBpbnQgeXl4YmVnaW4g
PSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBi
b3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxB
U1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMg
PyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50IHl5Y291bnQgPSAxOworCisgICAg
ICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5
Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXgg
PCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAh
PSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FS
R1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAxOworCQl5eXNpemUgPSB5eXNpemUw
OworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0gMV0gPSAnXDAnOworCQlicmVhazsK
KwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07CisJICAgIHl5
c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6
ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7
CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CisJICAgIHl5cHJlZml4
ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6
ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAo
eXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5eXNpemUxOworCisgICAgICBpZiAo
eXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFYSU1VTTsKKworICAgICAgaWYgKHl5
cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRo
ZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9y
IGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRo
ZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7CisJ
ICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCisJICAgIHsK
KwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50
KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOworCQkgIHl5
ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgeXlwKys7CisJCSAgeXlmKys7CisJ
CX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7CisgICAgfQorfQorI2VuZGlmIC8q
IFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0
aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywg
aW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVz
dHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOwor
ICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisjZW5kaWYKK3sKKyAgWVlV
U0UgKHl5dmFsdWVwKTsKKworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsK
KyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnAp
OworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsK
KyAgICB9Cit9CisMCisKKy8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90
eXBlcy4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7
CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJB
TSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5
cGFyc2UgKHZvaWQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyog
ISBZWVBBUlNFX1BBUkFNICovCisKKworCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2Uu
ICB8CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNF
X1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZ
WVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQp
CisjZWxzZQoraW50Cit5eXBhcnNlICgpCisKKyNlbmRpZgorI2VuZGlmCit7CisgIC8qIFRoZSBs
b29rLWFoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFs
dWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisvKiBO
dW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7CisKKyAgaW50
IHl5c3RhdGU7CisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTnVtYmVyIG9mIHRv
a2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgIGludCB5
eWVycnN0YXR1czsKKyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNs
YXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworI2lmIFlZRVJST1Jf
VkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRl
ZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNn
YnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgor
CisgIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgIGB5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMsCisgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisg
ICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgUmVmZXIgdG8gdGhlIHN0
YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgIHRv
IHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgIC8qIFRoZSBzdGF0ZSBzdGFjay4g
ICovCisgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgIHl5dHlwZV9pbnQxNiAq
eXlzcyA9IHl5c3NhOworICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNU
WVBFICp5eXZzID0geXl2c2E7CisgIFlZU1RZUEUgKnl5dnNwOworCisKKworI2RlZmluZSBZWVBP
UFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIFlZU0laRV9UIHl5
c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJl
dHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJv
dXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworCisgIC8qIFRoZSBudW1iZXIgb2Ygc3lt
Ym9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3
aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKwor
ICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUg
PSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVN
UFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXpl
IHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9j
YXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMg
dGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0
aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290
byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRl
LCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAg
LyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlv
biBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRl
IGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgor
ICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5
c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRo
cmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlz
c3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAg
dGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAg
IG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOworCisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dl
ZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBi
eXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhl
IHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92
ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5c3RhY2tzaXplKTsKKwor
CXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92
ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVz
dGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAg
Ki8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0
ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5
eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5
cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5p
b24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkp
OworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9D
QVRFICh5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKworIyAgdW5kZWYgWVlTVEFD
S19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEp
OworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAg
eXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAt
IDE7CisKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQg
dG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAg
ICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9
CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUp
KTsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwK
K2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNz
aW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2stYWhlYWQgdG9r
ZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8q
IEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29r
LWFoZWFkIHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09
IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBn
ZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisg
IC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhl
YWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZ
RFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0g
WVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAgeXlj
aGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0
IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRva2Vu
ID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRv
a2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRo
ZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0
bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0g
eXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAh
PSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07Cisg
IGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFC
TEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8g
eXlyZWR1Y2U7CisgICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsK
KworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1
cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5
eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsK
KworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwor
ICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0
ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJy
ZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0
ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNl
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERv
IGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVk
dWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAq
LworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBs
ZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgor
CisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFn
ZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVz
ZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVu
Y29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9p
ZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6
ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5U
ICh5eW4pOworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsK
KyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGlj
YWwgcGhhc2UKKyAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAg
ICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBF
YnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAg
ICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5
bWJvbAorICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwg
InZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlh
YmxlKj4oc3ltYm9sKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5z
dHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sCisgICAgICAg
IC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorCisgICAgICAgIGlmICh2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgeworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKKyAg
ICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSU5UX1RZUEUgaXMg
b25seSAxNi1iaXQgcGx1cyBzaWduIGJpdCBmb3IgdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMsCisg
ICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3IgY29uc3RhbnRzCisgICAgICAgIC8vCisg
ICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKSA+PSAoMSA8PCAxNikpIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA1OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjoKKwor
ICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5iKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA5OgorCisgICAgeworICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCku
bGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0
b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3lt
Ym9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVj
dG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBh
cnJheXMKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBw
YXJzZUNvbnRleHQtPmFkZENvbnN0QXJyYXlOb2RlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkg
eyAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycworICAgICAgICAgICAgICAgIFRWZWN0
b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAgICAg
ICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpLT5nZXRJQ29uc3QoKTsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYueHkg
c2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVs
ZHMsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgeyAvLyBjb25zdGFudCBm
b2xkaW5nIGZvciBtYXRyaWNlcworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RNYXRyaXhOb2RlKCh5eXZzcFsoMykg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkg
eworICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgeworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICh5eXZzcFsoMykg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSwgKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGVQb2ludGVyKCksICh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUsICh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVNldE1heFNpemUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldEFzU3ltYm9sTm9kZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKSwgMCwgZmFsc2UsICh5eXZzcFsoMikgLSAoNCldLmxl
eCkubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkt
PmdldElDb25zdCgpID49ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJb
IiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3QsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
aXNBcnJheSgpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFy
cmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3aXRoIGEgc2l6ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3
aXRoIGEgdmFyaWFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgo
RU9wSW5kZXhJbmRpcmVjdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCAo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1lKCkpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNl
dFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSk7CisKKyAgICAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxp
ZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsK
KyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+aXNNYXRyaXgoKSAmJiAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25z
dCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxT
aXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmlzTWF0cml4KCkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAg
ICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlz
VmVjdG9yKCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QpKTsKKyAg
ICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3Rvcigp
KSB7CisgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICgh
IHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9t
aW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpKSB7CisgICAg
ICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbMF0gPSAwOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAv
LyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZlY3Rv
ck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24o
KSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUo
KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzLm51
bSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVFN0cmluZyB2
ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmc7CisgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTd2l6emxlKGZpZWxkcywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5n
LnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRy
aXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICBp
ZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKSkgewor
ICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAw
OworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmll
bGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vbi1zY2FsYXIg
ZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIsICIiKTsKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyld
LmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3Qs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cpOworICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCog
ZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZHMgPT0gMCkgeworICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMtPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKmZpZWxkcylbaV0udHlwZS0+
Z2V0RmllbGROYW1lKCkgPT0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0U3RydWN0
KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0
VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1
Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0
dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICooKmZpZWxkcylb
aV0udHlwZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQg
aW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJl
cyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBw
b29sCisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCku
bGluZSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAi
LS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMildLmxl
eCkubGluZSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICJbXSIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToK
KworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0
SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BOdWxsKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9y
LgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBj
b25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVy
aWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBl
IHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlw
ZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAmdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBjb25zdHJ1Y3Rv
ciwgb2YgdHlwZSAndHlwZScuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0cnVj
dG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNh
bGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxp
bmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKHR5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9s
IHRhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5D
YW5kaWRhdGU7CisgICAgICAgICAgICBib29sIGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRp
ZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUp
IHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVu
Y3Rpb24uICBCdXQsIGl0IG1pZ2h0IHN0aWxsIG1hcCB0byBhIGJ1aWx0LWluCisgICAgICAgICAg
ICAgICAgLy8gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
b3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CisgICAgICAgICAgICAgICAgaWYgKGJ1
aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwgbWFwcGVkIHRvIGEgYnVpbHQtaW4gb3Bl
cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICBpZiAo
Zm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0
LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLCAwLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJh
bmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICVzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5j
X3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxp
bmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eXZzcFsoMSkgLSAo
MSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdp
dmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5j
dGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEg
dXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFs
c28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmlu
aXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOworICAgICAgICAgICAgICAgICAgICBUUXVh
bGlmaWVyTGlzdCYgcXVhbGlmaWVyTGlzdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpmbkNhbmRpZGF0ZSlbaV0udHlwZS0+
Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFP
dXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZh
bHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAi
RXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllckxpc3QucHVz
aF9iYWNrKHF1YWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShm
bkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlv
bigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVj
b3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAu
MGYpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0pLmxpbmUpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBmbkNhbGw7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE3OgorCisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMykg
LSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIp
OworICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5l
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24p
OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0
aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIy
OgorCisgICAgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAg
ICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKHBh
cmFtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0g
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDIzOgorCisgICAgeworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlv
bi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24g
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQ29uc3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGlu
ZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS51c2VyRGVmKSB7CisgICAgICAg
ICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBFT3BDb25zdHJ1Y3RTdHJ1
Y3QpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAg
ICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
Q29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMy
OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVjMiIsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZl
YzMiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgRlJBR19WRVJU
X09OTFkoIml2ZWM0IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9
IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAg
c3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAg
ICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMzIiwgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjNCIsICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fu
bm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0
cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5n
ID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKSk7CisgICAgICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigm
dGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlv
bikgPSBmdW5jdGlvbjsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3Ry
aW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlw
ZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rp
b24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMjc6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICooeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVu
Y3Rpb247CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI4OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjk6CisK
KyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNw
WygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJy
b3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDMwOgorCisgICAgewor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAo
MildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMToKKworICAgIHsKKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AgIT0gRU9wTnVsbCkgeworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0pLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTog
ICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxO
b3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5
T3BFcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIGVycm9yT3AsICh5eXZzcFso
MikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MzI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgO30KKyAgICBicmVhazsKKworICBj
YXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMzQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDM2OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05M
WSgiKiIsICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAzNzoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIi8iLCAoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERp
diwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIvIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
Mzg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
Mzk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIisiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQyOgorCisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQzOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
KyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NDoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUsICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDU6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI8PSIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDQ2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdy
ZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAt
ICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiPj0i
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NzoKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICI9PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgICAgICB9IGVsc2UgaWYgKCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+aXNBcnJheSgpIHx8ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlP
cEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiE9IiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0gZWxzZSBpZiAoKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgfHwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgJiYgcGFyc2VD
b250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
IkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTA6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTE6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTQ6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUsICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChm
YWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDU1OgorCisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDU2OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA1ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3Is
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAifHwiLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAg
ICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA2MDoKKworICAgIHsKKyAgICAgICBpZiAocGFyc2VDb250ZXh0LT5i
b29sRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICI6IiwgKHl5dnNwWygzKSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
NSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjE6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjI6
CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLm9w
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmludGVybSku
bGluZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3NpZ25FcnJvcigoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICAgICAgfSBlbHNlIGlmICgoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSB8fCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2MzoKKworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY0OgorCisgICAg
eyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAg
KHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NToK
KworICAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNjY6CisKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BBZGRBc3NpZ247IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NzoKKworICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5l
ID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1
YkFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY4OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjk6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiLCIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDcwOgor
CisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uICZmdW5j
dGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CisgICAgICAgIAor
ICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0
ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSk7
CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXROYW1lKCkpOworICAgICAg
ICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlv
bltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0u
bmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHBy
b3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90
eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVu
aXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5eXZz
cFsoMSkgLSAoMildLmludGVybSkubGluZSksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGlu
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAiIiwgKnBhcmFtLnR5cGUsICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSksICh5eXZz
cFsoMSkgLSAoMildLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHByb3RvdHlwZS0+c2V0T3BlcmF0b3IoRU9wUHJvdG90eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHByb3RvdHlwZTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNzI6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAo
MildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNsYXJhdGlvbik7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzM6
CisKKyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFBy
ZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikg
LSAoNCldLmludGVybS5wcmVjaXNpb24pICk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1
bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
ZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9y
IHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBp
ZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAgICAgICAvLworICAgICAgICAvLyBSZWRl
Y2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIg
cXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAvLworICAgICAgICBURnVuY3Rpb24qIHBy
ZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUo
KSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdl
dFJldHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCgqcHJldkRlYylbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gKCooeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBw
YXJhbWV0ZXIgcXVhbGlmaWVycyIsICgqKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJl
ZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZpbml0aW9uLAorICAgICAgICAvLyBp
biB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlz
IG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVk
LiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUg
c3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlv
biA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7CisKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzU6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzc6CisKKyAgICB7CisgICAgICAgIC8vIEFk
ZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAo
MildLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8v
IE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2
b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcg
dm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAgICAg
IGlmICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgp
ID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBhcmFt
ZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBh
cmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICh5eXZzcFso
MykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0
aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbik7CisgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNzk6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJubyBxdWFsaWZpZXJz
IGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEg
c2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgorICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGlu
ZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90
b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQorICAg
ICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDgw
OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5
cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICh5eXZz
cFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNwWygyKSAtICgyKV0ubGV4
KS5zdHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpfTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsK
KyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgODE6CisKKyAgICB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1h
a2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7
CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0g
PSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODI6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVy
bSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDgzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtZXRl
clNhbXBsZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVybSkubGluZSwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0p
LnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxp
ZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg0OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5w
YXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODg6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5MDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBl
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTE6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsK
KyAgICAgICAgCisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtKS50eXBlLnByZWNpc2lvbiA9PSBF
YnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUucHJlY2lzaW9u
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkudHlwZS50eXBlKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnByZWNpc2lvbkVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAo
eXl2YWwuaW50ZXJtKS50eXBlLnByZWNpc2lvbiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS50
eXBlLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTI6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLnR5cGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICh5eXZh
bC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFs
LmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTM6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4
KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMp
IC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAg
ICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAo
NSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA5NDoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNild
LmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFso
MykgLSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5p
bnRlcm0pOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5
cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoNCkg
LSAoNildLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXl2c3BbKDQpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoNSkgLSAoNildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7
CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWyg0
KSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5
eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSk7CisgICAgICAgICAgICB0eXBlLnNldEFycmF5
U2l6ZShzaXplKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0g
KDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpOworICAgICAgICB9
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk1OgorCisgICAgeworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNyld
LmxleCkubGluZSwgKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5
dnNwWygxKSAtICg3KV0uaW50ZXJtKTsKKworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0g
MDsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3Bb
KDQpIC0gKDcpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNyldLmludGVybSkudHlwZSkgfHwg
cGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg3KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKHl5
dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUsICh5eXZzcFsoNykgLSAo
NyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpOwor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkg
LSAoNyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNyldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dmFsLmludGVybSkubGluZSwgIkdMXzNETF9hcnJh
eV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAg
ICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygzKSAtICg3
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg3KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNyldLmludGVybSkudHlwZSwgKHl5dnNwWyg3KSAtICg3KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIGludGVybU5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXl2c3BbKDYpIC0gKDcpXS5sZXgpLmxpbmUpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgOTY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg4KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDgp
XS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pOworCisg
ICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSwgKHl5dnNw
WygxKSAtICg4KV0uaW50ZXJtKS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDgpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoOCld
LmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg4KV0ubGV4KS5saW5l
LCAoeXl2c3BbKDUpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3Bb
KDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg4KV0ubGV4
KS5saW5lLCAqKHl5dnNwWygzKSAtICg4KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoOCld
LmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5z
aW9uRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtKS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMi
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgaWYgKCFw
YXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXl2c3BbKDMpIC0gKDgpXS5sZXgpLmxp
bmUsICooeXl2c3BbKDMpIC0gKDgpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg4KV0uaW50
ZXJtKS50eXBlLCAoeXl2c3BbKDgpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50
ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLmludGVybU5vZGUs
IGludGVybU5vZGUsICh5eXZzcFsoNykgLSAoOCldLmxleCkubGluZSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NzoKKwor
ICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSku
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7CisKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRl
SW5pdGlhbGl6ZXIoKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgKHl5dnNwWyg1
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRh
dGlvbgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9kZSwg
aW50ZXJtTm9kZSwgKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpLCAo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICh5eXZhbC5pbnRlcm0pLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlw
ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmlu
ZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCld
LmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSksICh5eXZzcFsoMikg
LSAoNCldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0g
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDEwMToKKworICAgIHsKKyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAo
NSldLmludGVybS50eXBlKSk7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwg
KHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHR5cGUuc2V0QXJyYXlTaXpl
KHNpemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSksICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSk7
CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAt
ICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9y
Q2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSkpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZz
cFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAo
NSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygo
eXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Cisg
ICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50
ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5
eXZzcFsoMykgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMDM6CisKKyAgICB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZh
cmlhbnQgZGVjbGFyYXRpb24iLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5xdWFsaWZpZXIgPSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
bGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEwNToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lv
bkVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJHTF8zRExf
YXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBl
KS5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZSkudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBv
ciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDc6CisKKyAgICB7CisgICAgICAgIFZF
UlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJh
dHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTA4OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1Zl
cnRleCkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxVmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFW
YXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDEp
IC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5dnNw
WygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTEw
OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFV
bmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDExMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTEzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnBy
ZWNpc2lvbikgPSBFYnBIaWdoOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDExNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE3Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEyMDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEy
MjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDIpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI0OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDEyNToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwg
cXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEy
NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNzoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTI5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDMpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzA6CisK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
NCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMToKKworICAgIHsKKyAgICAgICAg
RlJBR19WRVJUX09OTFkoIm1hdDIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAgRlJB
R19WRVJUX09OTFkoIm1hdDMiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMzoKKworICAgIHsKKyAgICAgICAgRlJBR19W
RVJUX09OTFkoIm1hdDQiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJU
X09OTFkoInNhbXBsZXIyRCIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAg
ICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckN1YmUiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM2Ogor
CisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic3RydWN0IiwgKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnF1YWxpZmllciA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
Mzc6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVm
aW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9va2VkIHVwIHRoZQorICAgICAg
ICAvLyB0eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGlj
X2Nhc3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2wpLT5nZXRUeXBl
KCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gJnN0
cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM4OgorCisgICAgeworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9
IG5ldyBUVHlwZSgoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0udHlwZUxpc3QpLCAqKHl5dnNwWygy
KSAtICg1KV0ubGV4KS5zdHJpbmcpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0g
bmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKnN0cnVjdHVyZSwg
dHJ1ZSk7CisgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1
c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICg1KV0ubGV4KS5saW5lLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygyKSAtICg1KV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM5OgorCisgICAgeworICAgICAgICBUVHlwZSogc3Ry
dWN0dXJlID0gbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlTGlzdCksIFRT
dHJpbmcoIiIpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1
Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxp
c3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGVMaXN0KTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTQxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVM
aXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlTGlzdCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0
KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBq
IDwgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCgqKHl5dmFsLmludGVybS50eXBlTGlzdCkpW2pdLnR5cGUtPmdldEZpZWxkTmFtZSgp
ID09ICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+Z2V0Rmll
bGROYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoKih5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCkpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmll
bGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5wdXNo
X2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXSk7CisgICAgICAg
IH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQyOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMikgLSAoMyldLmludGVybS50eXBlTGlz
dCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLmxpbmUsICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnR5
cGVMaXN0KSlbMF0udHlwZS0+Z2V0RmllbGROYW1lKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKSkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dmFsLmludGVybS50
eXBlTGlzdCktPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
Q2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3cgYXNwZWN0cyBvZiB0eXBlLCBsaWtl
IGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAoKih5eXZhbC5pbnRlcm0u
dHlwZUxpc3QpKVtpXS50eXBlLT5zZXRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuc2l6ZSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnVzZXJEZWYpOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlz
CisgICAgICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+aXNB
cnJheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubGluZSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAgICAgICAgICgqKHl5dmFsLmludGVybS50
eXBlTGlzdCkpW2ldLnR5cGUtPnNldEFycmF5U2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkudXNlckRlZikKKyAgICAgICAgICAgICAgICAoKih5eXZhbC5pbnRlcm0udHlwZUxp
c3QpKVtpXS50eXBlLT5zZXRUeXBlTmFtZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTQzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9
IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1
c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZUxpbmUpKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGluZSkpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6CisKKyAgICB7CisgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBl
ID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDY6CisK
KyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2
c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZykp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDQp
XS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEZp
ZWxkTmFtZSgqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpOworCisgICAgICAgIGludCBz
aXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0ODoKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE0OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOyA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTUxOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUzOgorCisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0OgorCisgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5v
ZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU1OgorCisgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTU2OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFn
Z3JlZ2F0ZSkgPSAwOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU3OgorCisgICAgeyBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1
ODoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE1OToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApCisgICAgICAgICAgICAoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTYwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYxOgorCisg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYyOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50
ZXJtLmludGVybUFnZ3JlZ2F0ZSkpCisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2NDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSksIDApOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybUFn
Z3JlZ2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgMCk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IDA7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6CisKKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBzdGF0aWNfY2FzdDxUSW50ZXJtTm9kZSo+KCh5eXZzcFso
MSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE2ODoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLm5vZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1
KV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY5OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE3MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5u
b2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gMDsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTcxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoKKworICAgIHsKKyAgICAg
ICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghcGFy
c2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVy
bU5vZGUpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAgICAgICB9CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE3MzoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTc0OgorCisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBv
cCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCB0cnVlLCAo
eXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOworICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc1OgorCisgICAg
eyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hl
Y2soKHl5dnNwWyg4KSAtICg4KV0ubGV4KS5saW5lLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAwLCBmYWxzZSwgKHl5
dnNwWyg0KSAtICg4KV0ubGV4KS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3NzoKKworICAgIHsg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc4OgorCisgICAgeworICAgICAg
ICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgoeXl2c3Bb
KDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNykgLSAoNyldLmludGVybS5p
bnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0g
KDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlw
ZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyKSwgdHJ1ZSwgKHl5
dnNwWygxKSAtICg3KV0ubGV4KS5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3OToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTgwOgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODE6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxODI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4MzoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFp
cikubm9kZTIgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODQ6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBh
aXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4NToKKworICAgIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgImNvbnRpbnVlIHN0YXRl
bWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51
ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTg2OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygx
KSAtICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29w
cyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxp
bmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGlu
ZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgaWYg
KCoocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJl
dHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTg5OgorCisgICAgeworICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZz
cFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVl
Um9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDE5MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0gKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTkyOgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxOTM6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5NDoK
KworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtKS5mdW5jdGlvbik7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlv
bi5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGU6ICAncHJl
dkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3Zl
IHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0
IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKKyAgICAg
ICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAgICAgIC8vCisgICAgICAgIGlmIChwcmV2
RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8v
IFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVy
cyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAgICAgIC8vCisgICAgICAg
IGlmIChmdW5jdGlvbi5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAgICAgICAgICBpZiAoZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiZnVuY3Rpb24gY2Fubm90
IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgp
ICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkubGluZSwgIiIsIGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5n
ZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5ldyBzeW1ib2wgdGFibGUgc2Nv
cGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBpdHMgYXJndW1lbnRzCisgICAgICAgIC8vCisg
ICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOworCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9y
IFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSk7CisgICAgICAg
IHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxzZTsKKworICAgICAgICAv
LworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCisg
ICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9y
LCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51
c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBs
aXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCisgICAg
ICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KKyAgICAgICAgLy8KKyAgICAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsr
KSB7CisgICAgICAgICAgICBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uW2ldOworICAgICAg
ICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAq
dmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3
aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJs
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2ZlciBvd25l
cnNoaXAgb2YgbmFtZSBwb2ludGVyIHRvIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIHBhcmFtLm5hbWUgPSAwOworCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciB0byB0aGUgSElMCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmxpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmxpbmUpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0
ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSk7CisgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gcGFyYW1Ob2RlczsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk1OgorCisgICAgeworICAg
ICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0
eXBlICE9IHZvaWQgPworICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9j
ZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBwYXJz
ZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkubGluZSwgImZ1bmN0aW9uIGRvZXMg
bm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKKyAgICAg
ICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSwgRU9wRnVuY3Rpb24sICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bSkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVn
YXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5m
b3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmlj
CisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVk
IGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21h
Lm9wdGltaXplKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9Q
cmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOworICAg
IDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCisKKyAgICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5
cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXls
ZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0g
eXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24u
ICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBz
dGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQg
YnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4g
LSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0g
WVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRh
YmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5U
T0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3Ig
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAg
LyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBl
cnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOwor
I2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvciIp
KTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAs
IHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2Fs
bG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9j
ID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2Mg
PD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExP
Q19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxv
Yyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAg
IGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6
ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6
ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1z
ZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoeXltc2cpOworCSAgfQorCWVsc2UK
KwkgIHsKKwkgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNp
emUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2Vu
ZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAv
KiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRl
ciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlF
T0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkg
IGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsK
KwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5
eWx2YWwpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8qIEVsc2Ugd2ls
bCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IK
KyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAtLSBl
cnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisgIC8q
IFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9r
ZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVy
IGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkK
KyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xz
IG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAg
Ki8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5U
ICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIxOwor
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBl
cnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0dXMg
PSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisg
IGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYg
KHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8
PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAg
IHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJy
ZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVz
ZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3Ag
PT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGlu
ZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsK
KyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAg
KisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwor
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3Ap
OworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBU
IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZm5k
ZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBo
ZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIp
KTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5
cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICAg
ICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkgeXl0b2tl
biwgJnl5bHZhbCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAg
Ki8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwKTsKKyAgICAgIFlZUE9Q
U1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNz
YSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNl
bmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5
cmVzdWx0KTsKK30KKworCisKKworCkluZGV4OiBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xh
bmdfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3Rh
Yi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NCBAQAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUg
YnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIFNrZWxldG9uIGludGVyZmFjZSBmb3IgQmlzb24n
cyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwg
MTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3Ig
KGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJn
ZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2Vy
IHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91
ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIg
Z2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVv
ZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5
IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkg
KGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNo
IHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRw
dXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAg
TGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lh
bCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4K
KyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKworLyogVG9rZW5zLiAgKi8KKyNpZm5kZWYg
WVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBFCisgICAvKiBQdXQgdGhlIHRva2VucyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAg
ICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVtIHl5dG9rZW50eXBlIHsKKyAgICAgSU5W
QVJJQU5UID0gMjU4LAorICAgICBISUdIX1BSRUNJU0lPTiA9IDI1OSwKKyAgICAgTUVESVVNX1BS
RUNJU0lPTiA9IDI2MCwKKyAgICAgTE9XX1BSRUNJU0lPTiA9IDI2MSwKKyAgICAgUFJFQ0lTSU9O
ID0gMjYyLAorICAgICBBVFRSSUJVVEUgPSAyNjMsCisgICAgIENPTlNUX1FVQUwgPSAyNjQsCisg
ICAgIEJPT0xfVFlQRSA9IDI2NSwKKyAgICAgRkxPQVRfVFlQRSA9IDI2NiwKKyAgICAgSU5UX1RZ
UEUgPSAyNjcsCisgICAgIEJSRUFLID0gMjY4LAorICAgICBDT05USU5VRSA9IDI2OSwKKyAgICAg
RE8gPSAyNzAsCisgICAgIEVMU0UgPSAyNzEsCisgICAgIEZPUiA9IDI3MiwKKyAgICAgSUYgPSAy
NzMsCisgICAgIERJU0NBUkQgPSAyNzQsCisgICAgIFJFVFVSTiA9IDI3NSwKKyAgICAgQlZFQzIg
PSAyNzYsCisgICAgIEJWRUMzID0gMjc3LAorICAgICBCVkVDNCA9IDI3OCwKKyAgICAgSVZFQzIg
PSAyNzksCisgICAgIElWRUMzID0gMjgwLAorICAgICBJVkVDNCA9IDI4MSwKKyAgICAgVkVDMiA9
IDI4MiwKKyAgICAgVkVDMyA9IDI4MywKKyAgICAgVkVDNCA9IDI4NCwKKyAgICAgTUFUUklYMiA9
IDI4NSwKKyAgICAgTUFUUklYMyA9IDI4NiwKKyAgICAgTUFUUklYNCA9IDI4NywKKyAgICAgSU5f
UVVBTCA9IDI4OCwKKyAgICAgT1VUX1FVQUwgPSAyODksCisgICAgIElOT1VUX1FVQUwgPSAyOTAs
CisgICAgIFVOSUZPUk0gPSAyOTEsCisgICAgIFZBUllJTkcgPSAyOTIsCisgICAgIFNUUlVDVCA9
IDI5MywKKyAgICAgVk9JRF9UWVBFID0gMjk0LAorICAgICBXSElMRSA9IDI5NSwKKyAgICAgU0FN
UExFUjJEID0gMjk2LAorICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKKyAgICAgSURFTlRJRklFUiA9
IDI5OCwKKyAgICAgVFlQRV9OQU1FID0gMjk5LAorICAgICBGTE9BVENPTlNUQU5UID0gMzAwLAor
ICAgICBJTlRDT05TVEFOVCA9IDMwMSwKKyAgICAgQk9PTENPTlNUQU5UID0gMzAyLAorICAgICBG
SUVMRF9TRUxFQ1RJT04gPSAzMDMsCisgICAgIExFRlRfT1AgPSAzMDQsCisgICAgIFJJR0hUX09Q
ID0gMzA1LAorICAgICBJTkNfT1AgPSAzMDYsCisgICAgIERFQ19PUCA9IDMwNywKKyAgICAgTEVf
T1AgPSAzMDgsCisgICAgIEdFX09QID0gMzA5LAorICAgICBFUV9PUCA9IDMxMCwKKyAgICAgTkVf
T1AgPSAzMTEsCisgICAgIEFORF9PUCA9IDMxMiwKKyAgICAgT1JfT1AgPSAzMTMsCisgICAgIFhP
Ul9PUCA9IDMxNCwKKyAgICAgTVVMX0FTU0lHTiA9IDMxNSwKKyAgICAgRElWX0FTU0lHTiA9IDMx
NiwKKyAgICAgQUREX0FTU0lHTiA9IDMxNywKKyAgICAgTU9EX0FTU0lHTiA9IDMxOCwKKyAgICAg
TEVGVF9BU1NJR04gPSAzMTksCisgICAgIFJJR0hUX0FTU0lHTiA9IDMyMCwKKyAgICAgQU5EX0FT
U0lHTiA9IDMyMSwKKyAgICAgWE9SX0FTU0lHTiA9IDMyMiwKKyAgICAgT1JfQVNTSUdOID0gMzIz
LAorICAgICBTVUJfQVNTSUdOID0gMzI0LAorICAgICBMRUZUX1BBUkVOID0gMzI1LAorICAgICBS
SUdIVF9QQVJFTiA9IDMyNiwKKyAgICAgTEVGVF9CUkFDS0VUID0gMzI3LAorICAgICBSSUdIVF9C
UkFDS0VUID0gMzI4LAorICAgICBMRUZUX0JSQUNFID0gMzI5LAorICAgICBSSUdIVF9CUkFDRSA9
IDMzMCwKKyAgICAgRE9UID0gMzMxLAorICAgICBDT01NQSA9IDMzMiwKKyAgICAgQ09MT04gPSAz
MzMsCisgICAgIEVRVUFMID0gMzM0LAorICAgICBTRU1JQ09MT04gPSAzMzUsCisgICAgIEJBTkcg
PSAzMzYsCisgICAgIERBU0ggPSAzMzcsCisgICAgIFRJTERFID0gMzM4LAorICAgICBQTFVTID0g
MzM5LAorICAgICBTVEFSID0gMzQwLAorICAgICBTTEFTSCA9IDM0MSwKKyAgICAgUEVSQ0VOVCA9
IDM0MiwKKyAgICAgTEVGVF9BTkdMRSA9IDM0MywKKyAgICAgUklHSFRfQU5HTEUgPSAzNDQsCisg
ICAgIFZFUlRJQ0FMX0JBUiA9IDM0NSwKKyAgICAgQ0FSRVQgPSAzNDYsCisgICAgIEFNUEVSU0FO
RCA9IDM0NywKKyAgICAgUVVFU1RJT04gPSAzNDgKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4g
ICovCisjZGVmaW5lIElOVkFSSUFOVCAyNTgKKyNkZWZpbmUgSElHSF9QUkVDSVNJT04gMjU5Cisj
ZGVmaW5lIE1FRElVTV9QUkVDSVNJT04gMjYwCisjZGVmaW5lIExPV19QUkVDSVNJT04gMjYxCisj
ZGVmaW5lIFBSRUNJU0lPTiAyNjIKKyNkZWZpbmUgQVRUUklCVVRFIDI2MworI2RlZmluZSBDT05T
VF9RVUFMIDI2NAorI2RlZmluZSBCT09MX1RZUEUgMjY1CisjZGVmaW5lIEZMT0FUX1RZUEUgMjY2
CisjZGVmaW5lIElOVF9UWVBFIDI2NworI2RlZmluZSBCUkVBSyAyNjgKKyNkZWZpbmUgQ09OVElO
VUUgMjY5CisjZGVmaW5lIERPIDI3MAorI2RlZmluZSBFTFNFIDI3MQorI2RlZmluZSBGT1IgMjcy
CisjZGVmaW5lIElGIDI3MworI2RlZmluZSBESVNDQVJEIDI3NAorI2RlZmluZSBSRVRVUk4gMjc1
CisjZGVmaW5lIEJWRUMyIDI3NgorI2RlZmluZSBCVkVDMyAyNzcKKyNkZWZpbmUgQlZFQzQgMjc4
CisjZGVmaW5lIElWRUMyIDI3OQorI2RlZmluZSBJVkVDMyAyODAKKyNkZWZpbmUgSVZFQzQgMjgx
CisjZGVmaW5lIFZFQzIgMjgyCisjZGVmaW5lIFZFQzMgMjgzCisjZGVmaW5lIFZFQzQgMjg0Cisj
ZGVmaW5lIE1BVFJJWDIgMjg1CisjZGVmaW5lIE1BVFJJWDMgMjg2CisjZGVmaW5lIE1BVFJJWDQg
Mjg3CisjZGVmaW5lIElOX1FVQUwgMjg4CisjZGVmaW5lIE9VVF9RVUFMIDI4OQorI2RlZmluZSBJ
Tk9VVF9RVUFMIDI5MAorI2RlZmluZSBVTklGT1JNIDI5MQorI2RlZmluZSBWQVJZSU5HIDI5Mgor
I2RlZmluZSBTVFJVQ1QgMjkzCisjZGVmaW5lIFZPSURfVFlQRSAyOTQKKyNkZWZpbmUgV0hJTEUg
Mjk1CisjZGVmaW5lIFNBTVBMRVIyRCAyOTYKKyNkZWZpbmUgU0FNUExFUkNVQkUgMjk3CisjZGVm
aW5lIElERU5USUZJRVIgMjk4CisjZGVmaW5lIFRZUEVfTkFNRSAyOTkKKyNkZWZpbmUgRkxPQVRD
T05TVEFOVCAzMDAKKyNkZWZpbmUgSU5UQ09OU1RBTlQgMzAxCisjZGVmaW5lIEJPT0xDT05TVEFO
VCAzMDIKKyNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMwMworI2RlZmluZSBMRUZUX09QIDMwNAor
I2RlZmluZSBSSUdIVF9PUCAzMDUKKyNkZWZpbmUgSU5DX09QIDMwNgorI2RlZmluZSBERUNfT1Ag
MzA3CisjZGVmaW5lIExFX09QIDMwOAorI2RlZmluZSBHRV9PUCAzMDkKKyNkZWZpbmUgRVFfT1Ag
MzEwCisjZGVmaW5lIE5FX09QIDMxMQorI2RlZmluZSBBTkRfT1AgMzEyCisjZGVmaW5lIE9SX09Q
IDMxMworI2RlZmluZSBYT1JfT1AgMzE0CisjZGVmaW5lIE1VTF9BU1NJR04gMzE1CisjZGVmaW5l
IERJVl9BU1NJR04gMzE2CisjZGVmaW5lIEFERF9BU1NJR04gMzE3CisjZGVmaW5lIE1PRF9BU1NJ
R04gMzE4CisjZGVmaW5lIExFRlRfQVNTSUdOIDMxOQorI2RlZmluZSBSSUdIVF9BU1NJR04gMzIw
CisjZGVmaW5lIEFORF9BU1NJR04gMzIxCisjZGVmaW5lIFhPUl9BU1NJR04gMzIyCisjZGVmaW5l
IE9SX0FTU0lHTiAzMjMKKyNkZWZpbmUgU1VCX0FTU0lHTiAzMjQKKyNkZWZpbmUgTEVGVF9QQVJF
TiAzMjUKKyNkZWZpbmUgUklHSFRfUEFSRU4gMzI2CisjZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjcK
KyNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMjgKKyNkZWZpbmUgTEVGVF9CUkFDRSAzMjkKKyNkZWZp
bmUgUklHSFRfQlJBQ0UgMzMwCisjZGVmaW5lIERPVCAzMzEKKyNkZWZpbmUgQ09NTUEgMzMyCisj
ZGVmaW5lIENPTE9OIDMzMworI2RlZmluZSBFUVVBTCAzMzQKKyNkZWZpbmUgU0VNSUNPTE9OIDMz
NQorI2RlZmluZSBCQU5HIDMzNgorI2RlZmluZSBEQVNIIDMzNworI2RlZmluZSBUSUxERSAzMzgK
KyNkZWZpbmUgUExVUyAzMzkKKyNkZWZpbmUgU1RBUiAzNDAKKyNkZWZpbmUgU0xBU0ggMzQxCisj
ZGVmaW5lIFBFUkNFTlQgMzQyCisjZGVmaW5lIExFRlRfQU5HTEUgMzQzCisjZGVmaW5lIFJJR0hU
X0FOR0xFIDM0NAorI2RlZmluZSBWRVJUSUNBTF9CQVIgMzQ1CisjZGVmaW5lIENBUkVUIDM0Ngor
I2RlZmluZSBBTVBFUlNBTkQgMzQ3CisjZGVmaW5lIFFVRVNUSU9OIDM0OAorCisKKworCisjaWYg
ISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVk
ZWYgdW5pb24gWVlTVFlQRQorCit7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxvYyBs
aW5lOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CisgICAg
ICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29sIGI7
CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAgICBz
dHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIFRPcGVyYXRvciBvcDsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Cisg
ICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRUeXBl
TGluZSB0eXBlTGluZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CisgICAgICAg
IH07CisgICAgfSBpbnRlcm07Cit9CisvKiBMaW5lIDE1Mjkgb2YgeWFjYy5jLiAgKi8KKworCVlZ
U1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUg
d2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKyMgZGVmaW5lIFlZ
U1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisKSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wv
Q29uZmlnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzk3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb25maWcuY3BwOiBJbXBs
ZW1lbnRzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUgZm9ybWF0LCB0eXBl
CisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRzIEVHTENvbmZpZyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMy40IHBhZ2Ug
MTUuCisKKyNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBlZ2wKK3sKK0NvbmZpZzo6Q29uZmlnKEQzRERJ
U1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVHTGludCBtYXhJbnRl
cnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNp
bEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQorICAgIDogbURpc3BsYXlNb2RlKGRpc3BsYXlN
b2RlKSwgbVJlbmRlclRhcmdldEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpLCBtRGVwdGhTdGVu
Y2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCksIG1NdWx0aVNhbXBsZShtdWx0aVNhbXBsZSkK
K3sKKyAgICBzZXQoZGlzcGxheU1vZGUsIG1pbkludGVydmFsLCBtYXhJbnRlcnZhbCwgcmVuZGVy
VGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIG11bHRpU2FtcGxlKTsKK30KKwordm9p
ZCBDb25maWc6OnNldERlZmF1bHRzKCkKK3sKKyAgICBtQnVmZmVyU2l6ZSA9IDA7CisgICAgbVJl
ZFNpemUgPSAwOworICAgIG1HcmVlblNpemUgPSAwOworICAgIG1CbHVlU2l6ZSA9IDA7CisgICAg
bUx1bWluYW5jZVNpemUgPSAwOworICAgIG1BbHBoYVNpemUgPSAwOworICAgIG1BbHBoYU1hc2tT
aXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9ET05UX0NBUkU7CisgICAgbUJp
bmRUb1RleHR1cmVSR0JBID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtQ29sb3JCdWZmZXJUeXBlID0g
RUdMX1JHQl9CVUZGRVI7CisgICAgbUNvbmZpZ0NhdmVhdCA9IEVHTF9ET05UX0NBUkU7CisgICAg
bUNvbmZpZ0lEID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtQ29uZm9ybWFudCA9IDA7CisgICAgbURl
cHRoU2l6ZSA9IDA7CisgICAgbUxldmVsID0gMDsKKyAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBF
R0xfTk9ORTsKKyAgICBtTWF4UEJ1ZmZlcldpZHRoID0gMDsKKyAgICBtTWF4UEJ1ZmZlckhlaWdo
dCA9IDA7CisgICAgbU1heFBCdWZmZXJQaXhlbHMgPSAwOworICAgIG1NYXhTd2FwSW50ZXJ2YWwg
PSBFR0xfRE9OVF9DQVJFOworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBFR0xfRE9OVF9DQVJFOwor
ICAgIG1OYXRpdmVSZW5kZXJhYmxlID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtTmF0aXZlVmlzdWFs
SUQgPSAwOworICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtUmVu
ZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTX0JJVDsKKyAgICBtU2FtcGxlQnVmZmVycyA9IDA7
CisgICAgbVNhbXBsZXMgPSAwOworICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisgICAgbVN1cmZhY2VU
eXBlID0gRUdMX1dJTkRPV19CSVQ7CisgICAgbVRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOwor
ICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtVHJhbnNwYXJl
bnRHcmVlblZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUg
PSBFR0xfRE9OVF9DQVJFOworfQorCit2b2lkIENvbmZpZzo6c2V0KEQzRERJU1BMQVlNT0RFIGRp
c3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVHTGludCBtYXhJbnRlcnZhbCwgRDNERk9S
TUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdM
aW50IG11bHRpU2FtcGxlKQoreworICAgIHN3aXRjaCAocmVuZGVyVGFyZ2V0Rm9ybWF0KQorICAg
IHsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2
OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUgPSA1OworICAgICAg
ICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAz
MjsKKyAgICAgICAgbVJlZFNpemUgPSAxMDsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDEwOworICAg
ICAgICBtQmx1ZVNpemUgPSAxMDsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDI7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgIG1CdWZmZXJTaXplID0g
MzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDg7CisgICAg
ICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSA4OworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsK
KyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0gNjsKKyAgICAgICAg
bUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgIG1CdWZmZXJTaXplID0gMTY7Cisg
ICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7CisgICAgICAgIG1C
bHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOworICAg
ICAgICBtUmVkU2l6ZSA9IDg7CisgICAgICAgIG1HcmVlblNpemUgPSA4OworICAgICAgICBtQmx1
ZVNpemUgPSA4OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIE90aGVyIGZvcm1hdHMgc2hv
dWxkIG5vdCBiZSB2YWxpZAorICAgIH0KKworICAgIG1MdW1pbmFuY2VTaXplID0gMDsKKyAgICBt
QWxwaGFNYXNrU2l6ZSA9IDA7CisgICAgbUJpbmRUb1RleHR1cmVSR0IgPSBFR0xfRkFMU0U7Cisg
ICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0ZBTFNFOworICAgIG1Db2xvckJ1ZmZlclR5cGUg
PSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gKGRpc3BsYXlNb2RlLkZvcm1h
dCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpID8gRUdMX05PTkUgOiBFR0xfU0xPV19DT05GSUc7Cisg
ICAgbUNvbmZpZ0lEID0gMDsKKyAgICBtQ29uZm9ybWFudCA9IEVHTF9PUEVOR0xfRVMyX0JJVDsK
KworICAgIHN3aXRjaCAoZGVwdGhTdGVuY2lsRm9ybWF0KQorICAgIHsKKy8vICAgIGNhc2UgRDNE
Rk1UX0QxNl9MT0NLQUJMRToKKy8vICAgICAgbURlcHRoU2l6ZSA9IDE2OworLy8gICAgICBtU3Rl
bmNpbFNpemUgPSAwOworLy8gICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QzMjoKKyAg
ICAgICAgbURlcHRoU2l6ZSA9IDMyOworICAgICAgICBtU3RlbmNpbFNpemUgPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgorICAgICAgICBtRGVwdGhTaXplID0g
MTU7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIG1EZXB0aFNpemUgPSAyNDsKKyAgICAgICAgbVN0ZW5j
aWxTaXplID0gODsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9EMjRYODoKKyAg
ICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSAwOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAgICAgIG1EZXB0aFNpemUg
PSAyNDsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEQzREZNVF9EMTY6CisgICAgICAgIG1EZXB0aFNpemUgPSAxNjsKKyAgICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKKyAgICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tB
QkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMzI7CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7
CisvLyAgICAgIGJyZWFrOworLy8gICAgY2FzZSBEM0RGTVRfRDI0RlM4OgorLy8gICAgICBtRGVw
dGhTaXplID0gMjQ7CisvLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDg7CisvLyAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBtTGV2
ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2ZVBpeG1hcCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVm
ZmVyV2lkdGggPSAwOworICAgIG1NYXhQQnVmZmVySGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZl
clBpeGVscyA9IDA7CisgICAgbU1heFN3YXBJbnRlcnZhbCA9IG1heEludGVydmFsOworICAgIG1N
aW5Td2FwSW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKKyAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVH
TF9GQUxTRTsKKyAgICBtTmF0aXZlVmlzdWFsSUQgPSAwOworICAgIG1OYXRpdmVWaXN1YWxUeXBl
ID0gMDsKKyAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7CisgICAgbVNh
bXBsZUJ1ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEgOiAwOworICAgIG1TYW1wbGVzID0gbXVsdGlT
YW1wbGU7CisgICAgbVN1cmZhY2VUeXBlID0gRUdMX1BCVUZGRVJfQklUIHwgRUdMX1dJTkRPV19C
SVQgfCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOworICAgIG1UcmFuc3BhcmVudFR5
cGUgPSBFR0xfTk9ORTsKKyAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CisgICAgbVRyYW5z
cGFyZW50R3JlZW5WYWx1ZSA9IDA7CisgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsKK30K
KworRUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKEVH
TENvbmZpZykoc2l6ZV90KW1Db25maWdJRDsKK30KKworU29ydENvbmZpZzo6U29ydENvbmZpZyhj
b25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCisgICAgOiBtV2FudFJlZChmYWxzZSksIG1XYW50R3Jl
ZW4oZmFsc2UpLCBtV2FudEJsdWUoZmFsc2UpLCBtV2FudEFscGhhKGZhbHNlKSwgbVdhbnRMdW1p
bmFuY2UoZmFsc2UpCit7CisgICAgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoYXR0cmliTGlzdCk7
Cit9CisKK3ZvaWQgU29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdM
aW50ICphdHRyaWJMaXN0KQoreworICAgIC8vIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNAor
ICAgIC8vIFNvcnRpbmcgcnVsZSAjMzogYnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBi
aXRzLCBub3QgY29uc2lkZXJpbmcKKyAgICAvLyBjb21wb25lbnRzIHRoYXQgYXJlIDAgb3IgZG9u
J3QtY2FyZS4KKyAgICBmb3IgKGNvbnN0IEVHTGludCAqYXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJb
MF0gIT0gRUdMX05PTkU7IGF0dHIgKz0gMikKKyAgICB7CisgICAgICAgIGlmIChhdHRyWzFdICE9
IDAgJiYgYXR0clsxXSAhPSBFR0xfRE9OVF9DQVJFKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKGF0dHJbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1JF
RF9TSVpFOiAgICAgICBtV2FudFJlZCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVHTF9HUkVFTl9TSVpFOiAgICAgbVdhbnRHcmVlbiA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgbVdhbnRCbHVlID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICBtV2FudEFscGhhID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiBtV2FudEx1bWlu
YW5jZSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CitFR0xpbnQgU29ydENvbmZpZzo6d2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZj
b25maWcpIGNvbnN0Cit7CisgICAgRUdMaW50IHRvdGFsID0gMDsKKworICAgIGlmIChtV2FudFJl
ZCkgICAgICAgdG90YWwgKz0gY29uZmlnLm1SZWRTaXplOworICAgIGlmIChtV2FudEdyZWVuKSAg
ICAgdG90YWwgKz0gY29uZmlnLm1HcmVlblNpemU7CisgICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0
b3RhbCArPSBjb25maWcubUJsdWVTaXplOworICAgIGlmIChtV2FudEFscGhhKSAgICAgdG90YWwg
Kz0gY29uZmlnLm1BbHBoYVNpemU7CisgICAgaWYgKG1XYW50THVtaW5hbmNlKSB0b3RhbCArPSBj
b25maWcubUx1bWluYW5jZVNpemU7CisKKyAgICByZXR1cm4gdG90YWw7Cit9CisKK2Jvb2wgU29y
dENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29u
c3QKK3sKKyAgICByZXR1cm4gKCp0aGlzKSgqeCwgKnkpOworfQorCitib29sIFNvcnRDb25maWc6
Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0Cit7Cisg
ICAgI2RlZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJpYnV0ZSkgICAgICAgICAgICBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICByZXR1cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJpYnV0ZTsgICAgICBcCisgICAgICAgIH0KKwor
ICAgIE1FVEFfQVNTRVJUKEVHTF9OT05FIDwgRUdMX1NMT1dfQ09ORklHICYmIEVHTF9TTE9XX0NP
TkZJRyA8IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcpOworICAgIFNPUlQobUNvbmZpZ0NhdmVh
dCk7CisKKyAgICBNRVRBX0FTU0VSVChFR0xfUkdCX0JVRkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVG
RkVSKTsKKyAgICBTT1JUKG1Db2xvckJ1ZmZlclR5cGUpOworCisgICAgLy8gQnkgbGFyZ2VyIHRv
dGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5IGNvbnNpZGVyaW5nIHRob3NlIHRoYXQgYXJl
IHJlcXVlc3RlZCB0byBiZSA+IDAuCisgICAgRUdMaW50IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRl
ZENvbXBvbmVudHNTaXplKHgpOworICAgIEVHTGludCB5Q29tcG9uZW50c1NpemUgPSB3YW50ZWRD
b21wb25lbnRzU2l6ZSh5KTsKKyAgICBpZiAoeENvbXBvbmVudHNTaXplICE9IHlDb21wb25lbnRz
U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB4Q29tcG9uZW50c1NpemUgPiB5Q29tcG9uZW50
c1NpemU7CisgICAgfQorCisgICAgU09SVChtQnVmZmVyU2l6ZSk7CisgICAgU09SVChtU2FtcGxl
QnVmZmVycyk7CisgICAgU09SVChtU2FtcGxlcyk7CisgICAgU09SVChtRGVwdGhTaXplKTsKKyAg
ICBTT1JUKG1TdGVuY2lsU2l6ZSk7CisgICAgU09SVChtQWxwaGFNYXNrU2l6ZSk7CisgICAgU09S
VChtTmF0aXZlVmlzdWFsVHlwZSk7CisgICAgU09SVChtQ29uZmlnSUQpOworCisgICAgI3VuZGVm
IFNPUlQKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0
Q29uZmlnIHRvIGFsc28gZWxpbWluYXRlIGR1cGxpY2F0ZSBjb25maWdzLgorLy8gVGhpcyB3b3Jr
cyBhcyBsb25nIGFzIHdlIG5ldmVyIGhhdmUgdHdvIGNvbmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVy
LVJHQi1jb21wb25lbnQgbGF5b3V0cywKKy8vIGJ1dCB0aGUgc2FtZSB0b3RhbC4KKy8vIDU1NTEg
YW5kIDU2NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgUitHK0IgaXMgZGlmZmVyZW50LgorLy8gNTU1
MSBhbmQgNTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBidWZmZXJTaXplIGlzIGRpZmZlcmVudC4K
K2NvbnN0IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0QXR0cmlic1tdID0KK3sKKyAgICBFR0xfUkVE
X1NJWkUsIDEsCisgICAgRUdMX0dSRUVOX1NJWkUsIDEsCisgICAgRUdMX0JMVUVfU0laRSwgMSwK
KyAgICBFR0xfTFVNSU5BTkNFX1NJWkUsIDEsCisgICAgLy8gQlVUIE5PVCBBTFBIQQorICAgIEVH
TF9OT05FCit9OworCitDb25maWdTZXQ6OkNvbmZpZ1NldCgpCisgICAgOiBtU2V0KFNvcnRDb25m
aWcobVNvcnRBdHRyaWJzKSkKK3sKK30KKwordm9pZCBDb25maWdTZXQ6OmFkZChEM0RESVNQTEFZ
TU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJ
bnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3Rl
bmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQoreworICAgIENvbmZpZyBjb25maWcoZGlz
cGxheU1vZGUsIG1pblN3YXBJbnRlcnZhbCwgbWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRG
b3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUpOworCisgICAgbVNldC5pbnNl
cnQoY29uZmlnKTsKK30KKworc2l6ZV90IENvbmZpZ1NldDo6c2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TZXQuc2l6ZSgpOworfQorCitib29sIENvbmZpZ1NldDo6Z2V0Q29uZmlncyhFR0xD
b25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1Np
emUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHZlY3Rvcjxjb25zdCBDb25maWcqPiBwYXNz
ZWQ7CisgICAgcGFzc2VkLnJlc2VydmUobVNldC5zaXplKCkpOworCisgICAgZm9yIChJdGVyYXRv
ciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0LmVuZCgpOyBjb25maWcrKykK
KyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOworICAgICAgICBjb25zdCBFR0xpbnQg
KmF0dHJpYnV0ZSA9IGF0dHJpYkxpc3Q7CisKKyAgICAgICAgd2hpbGUgKGF0dHJpYnV0ZVswXSAh
PSBFR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVbMF0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0JVRkZFUl9TSVpFOiAgICAg
ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQnVmZmVyU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9BTFBIQV9T
SVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUFscGhhU2l6ZSA+PSBhdHRyaWJ1
dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CbHVlU2l6ZSA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
R3JlZW5TaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAgICAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bVJlZFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfREVQVEhfU0laRTogICAgICAgICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1EZXB0aFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1NURU5DSUxfU0laRTog
ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU3RlbmNpbFNpemUgPj0gYXR0cmlidXRlWzFd
OyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9DT05G
SUdfQ0FWRUFUOiAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0NhdmVhdCA9PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1Db25maWdJ
RCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tTGV2ZWwgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bU5hdGl2ZVJlbmRlcmFibGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBFOiAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1OYXRpdmVWaXN1YWxUeXBlID09IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRVM6ICAg
ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlcyA+PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9T
QU1QTEVfQlVGRkVSUzogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVNhbXBsZUJ1ZmZlcnMg
Pj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAgICAgbWF0Y2ggPSAoY29uZmlnLT5tU3Vy
ZmFjZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tVHJhbnNwYXJlbnRUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFOiAgICBt
YXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50Qmx1ZVZhbHVlID09IGF0dHJpYnV0ZVsxXTsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5f
VkFMVUU6ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPT0gYXR0cmli
dXRlWzFdOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFS
RU5UX1JFRF9WQUxVRTogICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRSZWRWYWx1ZSA9
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVH
TF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1
cmVSR0IgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6ICAgICAgbWF0Y2ggPSBjb25maWctPm1C
aW5kVG9UZXh0dXJlUkdCQSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNoID0g
Y29uZmlnLT5tTWluU3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRFUlZBTDogICAgICAg
ICBtYXRjaCA9IGNvbmZpZy0+bU1heFN3YXBJbnRlcnZhbCA9PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6
ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MdW1pbmFuY2VTaXplID49IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhB
X01BU0tfU0laRTogICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFNYXNrU2l6ZSA+PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbG9yQnVm
ZmVyVHlwZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAgICAgICAgbWF0Y2ggPSAoY29uZmln
LT5tUmVuZGVyYWJsZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgIG1hdGNo
ID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAgICAgICAg
ICAgICBtYXRjaCA9IChjb25maWctPm1Db25mb3JtYW50ICYgYXR0cmlidXRlWzFdKSA9PSBhdHRy
aWJ1dGVbMV07ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0
Y2gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGF0dHJpYnV0ZSArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBwYXNzZWQucHVzaF9iYWNrKCYqY29uZmln
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb25maWdzKQorICAgIHsKKyAgICAgICAg
c29ydChwYXNzZWQuYmVnaW4oKSwgcGFzc2VkLmVuZCgpLCBTb3J0Q29uZmlnKGF0dHJpYkxpc3Qp
KTsKKworICAgICAgICBFR0xpbnQgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRl
eCA8IGNvbmZpZ1NpemUgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxFR0xpbnQ+KHBhc3NlZC5zaXpl
KCkpOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWdzW2luZGV4XSA9IHBh
c3NlZFtpbmRleF0tPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgKm51bUNvbmZp
ZyA9IGluZGV4OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqbnVtQ29uZmlnID0g
cGFzc2VkLnNpemUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgZWds
OjpDb25maWcgKkNvbmZpZ1NldDo6Z2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpCit7CisgICAg
Zm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0LmVuZCgp
OyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGlmIChjb25maWctPmdldEhhbmRsZSgpID09IGNv
bmZpZ0hhbmRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICYoKmNvbmZpZyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KK30KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJFR0wvQ29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb25maWcuaDogRGVm
aW5lcyB0aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQor
Ly8gYW5kIHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1
LgorCisjaWZuZGVmIElOQ0xVREVfQ09ORklHX0hfCisjZGVmaW5lIElOQ0xVREVfQ09ORklHX0hf
CisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDku
aD4KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisK
K25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CisKK2NsYXNzIENvbmZpZworeworICBw
dWJsaWM6CisgICAgQ29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWlu
U3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFy
Z2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1w
bGUpOworCisgICAgdm9pZCBzZXREZWZhdWx0cygpOworICAgIHZvaWQgc2V0KEQzRERJU1BMQVlN
T0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpOworICAgIEVHTENvbmZpZyBnZXRIYW5kbGUo
KSBjb25zdDsKKworICAgIGNvbnN0IEQzRERJU1BMQVlNT0RFIG1EaXNwbGF5TW9kZTsKKyAgICBj
b25zdCBEM0RGT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBjb25zdCBEM0RGT1JNQVQg
bURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBjb25zdCBFR0xpbnQgbU11bHRpU2FtcGxlOworCisg
ICAgRUdMaW50IG1CdWZmZXJTaXplOyAgICAgICAgICAgICAgLy8gRGVwdGggb2YgdGhlIGNvbG9y
IGJ1ZmZlcgorICAgIEVHTGludCBtUmVkU2l6ZTsgICAgICAgICAgICAgICAgIC8vIEJpdHMgb2Yg
UmVkIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUdyZWVuU2l6ZTsgICAgICAgICAg
ICAgICAvLyBCaXRzIG9mIEdyZWVuIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUJs
dWVTaXplOyAgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEJsdWUgaW4gdGhlIGNvbG9yIGJ1ZmZl
cgorICAgIEVHTGludCBtTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgTHVtaW5h
bmNlIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUFscGhhU2l6ZTsgICAgICAgICAg
ICAgICAvLyBCaXRzIG9mIEFscGhhIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xpbnQgbUFs
cGhhTWFza1NpemU7ICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIE1hc2sgaW4gdGhlIG1hc2sg
YnVmZmVyCisgICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4dHVyZVJHQjsgICAgLy8gVHJ1ZSBpZiBi
aW5kYWJsZSB0byBSR0IgdGV4dHVyZXMuCisgICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4dHVyZVJH
QkE7ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0JBIHRleHR1cmVzLgorICAgIEVHTGVudW0g
bUNvbG9yQnVmZmVyVHlwZTsgICAgICAgIC8vIENvbG9yIGJ1ZmZlciB0eXBlCisgICAgRUdMZW51
bSBtQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgLy8gQW55IGNhdmVhdHMgZm9yIHRoZSBjb25maWd1
cmF0aW9uCisgICAgRUdMaW50IG1Db25maWdJRDsgICAgICAgICAgICAgICAgLy8gVW5pcXVlIEVH
TENvbmZpZyBpZGVudGlmaWVyCisgICAgRUdMaW50IG1Db25mb3JtYW50OyAgICAgICAgICAgICAg
Ly8gV2hldGhlciBjb250ZXh0cyBjcmVhdGVkIHdpdGggdGhpcyBjb25maWcgYXJlIGNvbmZvcm1h
bnQKKyAgICBFR0xpbnQgbURlcHRoU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIFogaW4g
dGhlIGRlcHRoIGJ1ZmZlcgorICAgIEVHTGludCBtTGV2ZWw7ICAgICAgICAgICAgICAgICAgIC8v
IEZyYW1lIGJ1ZmZlciBsZXZlbAorICAgIEVHTEJvb2xlYW4gbU1hdGNoTmF0aXZlUGl4bWFwOyAg
IC8vIE1hdGNoIHRoZSBuYXRpdmUgcGl4bWFwIGZvcm1hdAorICAgIEVHTGludCBtTWF4UEJ1ZmZl
cldpZHRoOyAgICAgICAgIC8vIE1heGltdW0gd2lkdGggb2YgcGJ1ZmZlcgorICAgIEVHTGludCBt
TWF4UEJ1ZmZlckhlaWdodDsgICAgICAgIC8vIE1heGltdW0gaGVpZ2h0IG9mIHBidWZmZXIKKyAg
ICBFR0xpbnQgbU1heFBCdWZmZXJQaXhlbHM7ICAgICAgICAvLyBNYXhpbXVtIHNpemUgb2YgcGJ1
ZmZlcgorICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOyAgICAgICAgIC8vIE1heGltdW0gc3dh
cCBpbnRlcnZhbAorICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOyAgICAgICAgIC8vIE1pbmlt
dW0gc3dhcCBpbnRlcnZhbAorICAgIEVHTEJvb2xlYW4gbU5hdGl2ZVJlbmRlcmFibGU7ICAgIC8v
IEVHTF9UUlVFIGlmIG5hdGl2ZSByZW5kZXJpbmcgQVBJcyBjYW4gcmVuZGVyIHRvIHN1cmZhY2UK
KyAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbElEOyAgICAgICAgICAvLyBIYW5kbGUgb2YgY29ycmVz
cG9uZGluZyBuYXRpdmUgdmlzdWFsCisgICAgRUdMaW50IG1OYXRpdmVWaXN1YWxUeXBlOyAgICAg
ICAgLy8gTmF0aXZlIHZpc3VhbCB0eXBlIG9mIHRoZSBhc3NvY2lhdGVkIHZpc3VhbAorICAgIEVH
TGludCBtUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgIC8vIFdoaWNoIGNsaWVudCByZW5kZXJpbmcg
QVBJcyBhcmUgc3VwcG9ydGVkLgorICAgIEVHTGludCBtU2FtcGxlQnVmZmVyczsgICAgICAgICAg
IC8vIE51bWJlciBvZiBtdWx0aXNhbXBsZSBidWZmZXJzCisgICAgRUdMaW50IG1TYW1wbGVzOyAg
ICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHBpeGVsCisgICAgRUdMaW50
IG1TdGVuY2lsU2l6ZTsgICAgICAgICAgICAgLy8gQml0cyBvZiBTdGVuY2lsIGluIHRoZSBzdGVu
Y2lsIGJ1ZmZlcgorICAgIEVHTGludCBtU3VyZmFjZVR5cGU7ICAgICAgICAgICAgIC8vIFdoaWNo
IHR5cGVzIG9mIEVHTCBzdXJmYWNlcyBhcmUgc3VwcG9ydGVkLgorICAgIEVHTGVudW0gbVRyYW5z
cGFyZW50VHlwZTsgICAgICAgIC8vIFR5cGUgb2YgdHJhbnNwYXJlbmN5IHN1cHBvcnRlZAorICAg
IEVHTGludCBtVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgIC8vIFRyYW5zcGFyZW50IHJlZCB2YWx1
ZQorICAgIEVHTGludCBtVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgIC8vIFRyYW5zcGFyZW50IGdy
ZWVuIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEJsdWVWYWx1ZTsgICAgLy8gVHJhbnNw
YXJlbnQgYmx1ZSB2YWx1ZQorfTsKKworLy8gRnVuY3Rpb24gb2JqZWN0IHVzZWQgYnkgU1RMIHNv
cnRpbmcgcm91dGluZXMgZm9yIG9yZGVyaW5nIENvbmZpZ3MgYWNjb3JkaW5nIHRvIFtFR0xdIHNl
Y3Rpb24gMy40LjEgcGFnZSAyNC4KK2NsYXNzIFNvcnRDb25maWcKK3sKKyAgcHVibGljOgorICAg
IGV4cGxpY2l0IFNvcnRDb25maWcoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKKworICAgIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAmeCwgY29uc3QgQ29uZmlnICZ5KSBjb25z
dDsKKworICBwcml2YXRlOgorICAgIHZvaWQgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3Qg
RUdMaW50ICphdHRyaWJMaXN0KTsKKyAgICBFR0xpbnQgd2FudGVkQ29tcG9uZW50c1NpemUoY29u
c3QgQ29uZmlnICZjb25maWcpIGNvbnN0OworCisgICAgYm9vbCBtV2FudFJlZDsKKyAgICBib29s
IG1XYW50R3JlZW47CisgICAgYm9vbCBtV2FudEJsdWU7CisgICAgYm9vbCBtV2FudEFscGhhOwor
ICAgIGJvb2wgbVdhbnRMdW1pbmFuY2U7Cit9OworCitjbGFzcyBDb25maWdTZXQKK3sKKyAgICBm
cmllbmQgRGlzcGxheTsKKworICBwdWJsaWM6CisgICAgQ29uZmlnU2V0KCk7CisKKyAgICB2b2lk
IGFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwg
RUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNE
Rk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKTsKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3Ms
IGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVt
Q29uZmlnKTsKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqZ2V0KEVHTENvbmZpZyBjb25maWdIYW5k
bGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmZpZ1Nl
dCk7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PENvbmZpZywgU29ydENvbmZpZz4gU2V0OworICAg
IHR5cGVkZWYgU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICBTZXQgbVNldDsKKworICAgIHN0
YXRpYyBjb25zdCBFR0xpbnQgbVNvcnRBdHRyaWJzW107Cit9OworfQorCisjZW5kaWYgICAvLyBJ
TkNMVURFX0NPTkZJR19IXwpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NzEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3BsYXkuY3BwOiBJbXBsZW1lbnRzIHRoZSBl
Z2w6OkRpc3BsYXkgY2xhc3MsIHJlcHJlc2VudGluZyB0aGUgYWJzdHJhY3QKKy8vIGRpc3BsYXkg
b24gd2hpY2ggZ3JhcGhpY3MgYXJlIGRyYXduLiBJbXBsZW1lbnRzIEVHTERpc3BsYXkuCisvLyBb
RUdMIDEuNF0gc2VjdGlvbiAyLjEuMiBwYWdlIDMuCisKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxh
eS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKworI2RlZmlu
ZSBSRUZfUkFTVCAwICAgLy8gQ2FuIGFsc28gYmUgZW5hYmxlZCBieSBkZWZpbmluZyBGT1JDRV9S
RUZfUkFTVCBpbiB0aGUgcHJvamVjdCdzIHByZWRlZmluZWQgbWFjcm9zCisKK25hbWVzcGFjZSBl
Z2wKK3sKK0Rpc3BsYXk6OkRpc3BsYXkoSERDIGRldmljZUNvbnRleHQpIDogbURjKGRldmljZUNv
bnRleHQpCit7CisgICAgbUQzZDkgPSBOVUxMOworICAgIG1EZXZpY2UgPSBOVUxMOworCisgICAg
bUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisKKyAgICAjaWYgUkVGX1JBU1QgPT0gMSB8
fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZ
UEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVWVFlQRV9IQUw7
CisgICAgI2VuZGlmCisKKyAgICBtTWluU3dhcEludGVydmFsID0gMTsKKyAgICBtTWF4U3dhcElu
dGVydmFsID0gMTsKKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Cit9CisKK0Rpc3BsYXk6On5EaXNw
bGF5KCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKworYm9vbCBEaXNwbGF5Ojppbml0aWFsaXpl
KCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgbUQzZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9O
KTsKKworICAgIGlmIChtRDNkOSkKKyAgICB7CisgICAgICAgIGlmIChtRGMgIT0gTlVMTCkKKyAg
ICAgICAgeworICAgICAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1p
bmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVzcG9uZHMgdG8K
KyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkdldERldmljZUNh
cHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOworCisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJW
ZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUQz
ZDktPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1EM2Q5ID0gTlVMTDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0Owor
ICAgICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtRGV2
aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVE
SUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsg
bU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApO30KKyAgICAg
ICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5U
X0lOVEVSVkFMX09ORSkgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dh
cEludGVydmFsLCAxKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2
YWwsIDEpO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZh
bHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBz
dGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4
KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVz
ZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKSAgICAge21NaW5T
d2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsgbU1heFN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KKyAgICAgICAgICAgIGlmICht
RGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZP
VVIpICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0
KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpO30KKwor
ICAgICAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdHNbXSA9CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAorICAgICAgICAgICAg
Ly8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3JfcmFtcCBjb25mb3JtYW5jZSB0
ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1c2luZyBpdCB0byB0aGlu
ayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVlLgorICAgICAgICAgICAgICAg
IEQzREZNVF9BOFI4RzhCOCwKKyAgICAgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAorICAgICAg
ICAgICAgICAgIEQzREZNVF9YMVI1RzVCNSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfWDhSOEc4
QjgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IEQzREZPUk1BVCBkZXB0aFN0
ZW5jaWxGb3JtYXRzW10gPQorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gIEQzREZNVF9E
MTZfTE9DS0FCTEUsCisgICAgICAgICAgICAgICAgRDNERk1UX0QzMiwKKyAgICAgICAgICAgIC8v
ICBEM0RGTVRfRDE1UzEsCisgICAgICAgICAgICAgICAgRDNERk1UX0QyNFM4LAorICAgICAgICAg
ICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAgICAgICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKKyAg
ICAgICAgICAgICAgICBEM0RGTVRfRDE2LAorICAgICAgICAgICAgLy8gIEQzREZNVF9EMzJGX0xP
Q0tBQkxFLAorICAgICAgICAgICAgLy8gIEQzREZNVF9EMjRGUzgKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAgICAgICAg
ICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxh
eU1vZGUpOworCisgICAgICAgICAgICBDb25maWdTZXQgY29uZmlnU2V0OworCisgICAgICAgICAg
ICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRh
cmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IHJl
bmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJU
WVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6
ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGRlcHRoU3RlbmNp
bEluZGV4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBkZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRo
U3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNF
LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU1VD
Q0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxN
YXRjaChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJl
bmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBFbnVt
ZXJhdGUgbXVsdGktc2FtcGxpbmcKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25maWdTZXQuYWRkKGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJbnRlcnZhbCwgbU1heFN3
YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5k
IHN0b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICAgICAgRUdMaW50IGluZGV4ID0gMTsKKyAg
ICAgICAgICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNl
dC5iZWdpbigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmZpZyBjb25maWd1cmF0aW9uID0gKmNvbmZp
ZzsKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLm1Db25maWdJRCA9IGluZGV4OworICAg
ICAgICAgICAgICAgIGluZGV4Kys7CisKKyAgICAgICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQu
aW5zZXJ0KGNvbmZpZ3VyYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICB0ZXJtaW5hdGUoKTsK
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKK3sKKyAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJh
dG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0
LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBkZWxldGUgKnN1cmZhY2U7CisgICAg
fQorCisgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjb250ZXh0ID0gbUNvbnRleHRTZXQu
YmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4dFNldC5lbmQoKTsgY29udGV4dCsrKQorICAgIHsK
KyAgICAgICAgZ2xEZXN0cm95Q29udGV4dCgqY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKG1E
ZXZpY2UpCisgICAgeworICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXZp
Y2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRDNkOSkKKyAgICB7CisgICAgICAgIG1EM2Q5
LT5SZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5ID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgRGlz
cGxheTo6c3RhcnRTY2VuZSgpCit7CisgICAgaWYgKCFtU2NlbmVTdGFydGVkKQorICAgIHsKKyAg
ICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdpblNjZW5lKCk7CisgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSB0cnVlOworICAg
IH0KK30KKwordm9pZCBEaXNwbGF5OjplbmRTY2VuZSgpCit7CisgICAgaWYgKG1TY2VuZVN0YXJ0
ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkVuZFNjZW5lKCk7Cisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIG1TY2VuZVN0YXJ0ZWQg
PSBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxheTo6Z2V0Q29uZmlncyhFR0xDb25maWcg
KmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVH
TGludCAqbnVtQ29uZmlnKQoreworICAgIHJldHVybiBtQ29uZmlnU2V0LmdldENvbmZpZ3MoY29u
ZmlncywgYXR0cmliTGlzdCwgY29uZmlnU2l6ZSwgbnVtQ29uZmlnKTsKK30KKworYm9vbCBEaXNw
bGF5OjpnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSkKK3sKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiA9
IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7CisKKyAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICB7
CisgICAgICBjYXNlIEVHTF9CVUZGRVJfU0laRTogICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tQnVmZmVyU2l6ZTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVH
TF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxw
aGFTaXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAg
ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmx1ZVNpemU7ICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tR3JlZW5TaXplOyAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tUmVkU2l6ZTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9E
RVBUSF9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhT
aXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9TVEVOQ0lMX1NJWkU6ICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3RlbmNpbFNpemU7ICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tQ29uZmlnSUQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9MRVZF
TDogICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTGV2ZWw7ICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJMRTog
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlUmVuZGVyYWJsZTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tTmF0aXZlVmlzdWFsVHlwZTsgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVHTF9TQU1QTEVTOiAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tU2FtcGxlczsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9TQU1QTEVf
QlVGRkVSUzogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlQnVmZmVy
czsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3VyZmFjZVR5cGU7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBFOiAgICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFOiAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
VHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVO
VF9HUkVFTl9WQUxVRTogICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRHcmVl
blZhbHVlOyAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUU6ICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVH
TF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmlu
ZFRvVGV4dHVyZVJHQkE7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRF
UlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWluU3dhcEludGVydmFsOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRFUlZBTDogICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4U3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9B
TFBIQV9NQVNLX1NJWkU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFN
YXNrU2l6ZTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQ
RTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29sb3JCdWZmZXJUeXBlOyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQOiAgICAgICAqdmFsdWUgPSBmYWxzZTsgVU5J
TVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05G
T1JNQU5UOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZm9ybWFu
dDsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N1cmZhY2UgKkRpc3BsYXk6OmNy
ZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCit7CisgICAg
Y29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKwor
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKKworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb25maWd1cmF0aW9u
LT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJD
b3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGNvbmZp
Z3VyYXRpb24tPm1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlcldpZHRoID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0
ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gY29u
ZmlndXJhdGlvbi0+bURlcHRoU2l6ZSA/IFRSVUUgOiBGQUxTRTsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5GbGFncyA9IDA7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IHdp
bmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRl
cnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5p
bXBsZW1lbnRlZAorICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0g
Y29udmVydEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwpOworICAgIHByZXNlbnRQYXJhbWV0ZXJz
LlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
V2luZG93ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpz
d2FwQ2hhaW4gPSBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJm
YWNlID0gTlVMTDsKKworICAgIGlmICghbURldmljZSkKKyAgICB7CisgICAgICAgIERXT1JEIGJl
aGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9X
Q0hBTkdFUzsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2Uo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVf
SEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENSRUFURV9QVVJFREVWSUNFLCAmcHJlc2Vu
dFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVM
TCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVY
UFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CisKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAo
bURldmljZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZzd2FwQ2hhaW4pOworICAgICAg
ICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFj
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCFtU3Vy
ZmFjZVNldC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiB0aGUgZGV2aWNl
IGFscmVhZHkgZXhpc3RzLCBhbmQgdGhlcmUgYXJlIG90aGVyIHN1cmZhY2VzL3dpbmRvd3MgY3Vy
cmVudGx5IGluIHVzZSwgd2UgbmVlZCB0byBjcmVhdGUKKyAgICAgICAgICAgIC8vIGEgc2VwYXJh
dGUgc3dhcCBjaGFpbiBmb3IgdGhlIG5ldyBkcmF3IHN1cmZhY2UuCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQ
YXJhbWV0ZXJzLCAmc3dhcENoYWluKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBz
d2FwIGNoYWlucy4gT3V0IG9mIG1lbW9yeS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIC8v
IENyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4gZG9lcyBub3QgYXV0b21hdGljYWxseSBnZW5lcmF0
ZSBhIGRlcHRoc3RlbmNpbCBzdXJmYWNlLCB1bmxpa2UgCisgICAgICAgICAgICAvLyBDcmVhdGVE
ZXZpY2UsIHNvIHdlIG11c3QgZG8gc28gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0
aVNhbXBsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0Us
ICZkZXB0aFN0ZW5jaWxTdXJmYWNlLCBOVUxMKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAg
ICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9y
IG5ldyBzd2FwIGNoYWluLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgYWxy
ZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3VyZmFjZXMgaW4gdXNlLCB0aGVuIGFsbCB0
aGUgc3VyZmFjZXMvd2luZG93cworICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlc3Ryb3llZCwg
YW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdpbmFsbHkgY3JlYXRlZCBkZXB0aHN0ZW5j
aWwgc3VyZmFjZSBmb3IKKyAgICAgICAgICAgIC8vIHVzZSB3aXRoIHRoZSBuZXcgc3VyZmFjZSB3
ZSBhcmUgY3JlYXRpbmcuCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlJl
c2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgcmVzZXQgcHJlc2VudGF0aW9u
IHBhcmFtZXRlcnMgZm9yIGRldmljZS4gT3V0IG9mIG1lbW9yeS4iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1T
Y2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hh
aW4oMCwgJnN3YXBDaGFpbik7CisgICAgICAgICAgICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVu
Y2lsU3VyZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBTdXJmYWNlICpzdXJmYWNlID0gTlVMTDsKKworICAgIGlmIChzd2Fw
Q2hhaW4pCisgICAgeworICAgICAgICBzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgc3dhcENo
YWluLCBkZXB0aFN0ZW5jaWxTdXJmYWNlLCBjb25maWd1cmF0aW9uKTsKKyAgICAgICAgbVN1cmZh
Y2VTZXQuaW5zZXJ0KHN1cmZhY2UpOworCisgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOwor
ICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQorCitFR0xDb250ZXh0IERpc3BsYXk6OmNy
ZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSkKK3sKKyAgICBjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnSGFuZGxlKTsKKworICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZpZyk7CisgICAgbUNvbnRleHRT
ZXQuaW5zZXJ0KGNvbnRleHQpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK3ZvaWQgRGlz
cGxheTo6ZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIGRlbGV0
ZSBzdXJmYWNlOworICAgIG1TdXJmYWNlU2V0LmVyYXNlKHN1cmZhY2UpOworfQorCit2b2lkIERp
c3BsYXk6OmRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdsRGVz
dHJveUNvbnRleHQoY29udGV4dCk7CisgICAgbUNvbnRleHRTZXQuZXJhc2UoY29udGV4dCk7Cit9
CisKK2Jvb2wgRGlzcGxheTo6aXNJbml0aWFsaXplZCgpCit7CisgICAgcmV0dXJuIG1EM2Q5ICE9
IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOworfQorCitib29sIERpc3BsYXk6OmlzVmFs
aWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykKK3sKKyAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXQo
Y29uZmlnKSAhPSBOVUxMOworfQorCitib29sIERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGdsOjpD
b250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRleHQp
ICE9IG1Db250ZXh0U2V0LmVuZCgpOworfQorCitib29sIERpc3BsYXk6OmlzVmFsaWRTdXJmYWNl
KGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmluZChz
dXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKK30KKworYm9vbCBEaXNwbGF5OjpoYXNFeGlz
dGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCit7CisgICAgZm9yIChTdXJmYWNlU2V0Ojpp
dGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFj
ZVNldC5lbmQoKTsgc3VyZmFjZSsrKQorICAgIHsKKyAgICAgICAgaWYgKCgqc3VyZmFjZSktPmdl
dFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
RGlzcGxheTo6c2V0U3dhcEludGVydmFsKEdMaW50IGludGVydmFsKQoreworICAgIG1Td2FwSW50
ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRl
cnZhbCwgbU1pblN3YXBJbnRlcnZhbCk7CisgICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1T
d2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwpOworCisgICAgbVByZXNlbnRJbnRlcnZhbCA9
IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsKK30KKworRFdPUkQgRGlzcGxheTo6Z2V0
UHJlc2VudEludGVydmFsKCkKK3sKKyAgICByZXR1cm4gbVByZXNlbnRJbnRlcnZhbDsKK30KKwor
RFdPUkQgRGlzcGxheTo6Y29udmVydEludGVydmFsKEdMaW50IGludGVydmFsKQoreworICAgIHN3
aXRjaChpbnRlcnZhbCkKKyAgICB7CisgICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJW
QUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087Cisg
ICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOworICAgICAgY2Fz
ZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZB
VUxUOworfQorCitJRGlyZWN0M0REZXZpY2U5ICpEaXNwbGF5OjpnZXREZXZpY2UoKQoreworICAg
IHJldHVybiBtRGV2aWNlOworfQorCitEM0RDQVBTOSBEaXNwbGF5OjpnZXREZXZpY2VDYXBzKCkK
K3sKKyAgICByZXR1cm4gbURldmljZUNhcHM7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBEaXNwbGF5Lmg6IERlZmluZXMg
dGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAorLy8gZGlz
cGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlzcGxheS4K
Ky8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2lmbmRlZiBJTkNMVURFX0RJ
U1BMQVlfSF8KKyNkZWZpbmUgSU5DTFVERV9ESVNQTEFZX0hfCisKKyNpZm5kZWYgV0lOMzJfTEVB
Tl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIK
KyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorCituYW1lc3BhY2UgZWdsCit7CitjbGFzcyBE
aXNwbGF5Cit7CisgIHB1YmxpYzoKKyAgICBEaXNwbGF5KEhEQyBkZXZpY2VDb250ZXh0KTsKKwor
ICAgIH5EaXNwbGF5KCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIHRlcm1p
bmF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2NlbmUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5kU2NlbmUoKTsKKworICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3Ms
IGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVt
Q29uZmlnKTsKKyAgICBib29sIGdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xp
bnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKworICAgIGVnbDo6U3VyZmFjZSAqY3JlYXRl
V2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZyk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpOworCisgICAgdm9pZCBk
ZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIHZvaWQgZGVzdHJveUNv
bnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOworCisgICAgYm9vbCBpc0luaXRpYWxpemVkKCk7
CisgICAgYm9vbCBpc1ZhbGlkQ29uZmlnKEVHTENvbmZpZyBjb25maWcpOworICAgIGJvb2wgaXNW
YWxpZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgIGJvb2wgaXNWYWxpZFN1cmZh
Y2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKyAgICBib29sIGhhc0V4aXN0aW5nV2luZG93U3Vy
ZmFjZShIV05EIHdpbmRvdyk7CisKKyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChHTGludCBpbnRl
cnZhbCk7CisgICAgRFdPUkQgZ2V0UHJlc2VudEludGVydmFsKCk7CisgICAgc3RhdGljIERXT1JE
IGNvbnZlcnRJbnRlcnZhbChHTGludCBpbnRlcnZhbCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3Qz
RERldmljZTkgKmdldERldmljZSgpOworICAgIHZpcnR1YWwgRDNEQ0FQUzkgZ2V0RGV2aWNlQ2Fw
cygpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpc3BsYXkp
OworICAgIGNvbnN0IEhEQyBtRGM7CisKKyAgICBVSU5UIG1BZGFwdGVyOworICAgIEQzRERFVlRZ
UEUgbURldmljZVR5cGU7CisgICAgSURpcmVjdDNEOSAqbUQzZDk7CisgICAgSURpcmVjdDNERGV2
aWNlOSAqbURldmljZTsKKyAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKKworICAgIGJvb2wgbVNj
ZW5lU3RhcnRlZDsKKyAgICBHTGludCBtU3dhcEludGVydmFsOworICAgIEVHTGludCBtTWF4U3dh
cEludGVydmFsOworICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOworICAgIERXT1JEIG1QcmVz
ZW50SW50ZXJ2YWw7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFN1cmZhY2UqPiBTdXJmYWNlU2V0
OworICAgIFN1cmZhY2VTZXQgbVN1cmZhY2VTZXQ7CisKKyAgICBDb25maWdTZXQgbUNvbmZpZ1Nl
dDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Z2w6OkNvbnRleHQqPiBDb250ZXh0U2V0OworICAg
IENvbnRleHRTZXQgbUNvbnRleHRTZXQ7Cit9OworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX0RJ
U1BMQVlfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9saWJFR0wvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpTdXJm
YWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhl
IGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8v
IEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEu
NF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKwor
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKyNp
bmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCituYW1lc3BhY2UgZWdsCit7CitTdXJmYWNlOjpT
dXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiwg
SURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwgY29uc3QgQ29uZmlnICpjb25maWcpIAor
ICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hhaW4oc3dhcENoYWluKSwgbURlcHRoU3Rl
bmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZpZykKK3sKKyAgICBtQmFja0J1ZmZlciA9
IE5VTEw7CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisgICAgbUZsaXBUZXh0dXJlID0gTlVM
TDsKKyAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICBtUHJlRmxpcFN0YXRlID0gTlVMTDsKKwor
ICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElO
Ryk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCisgICAg
bVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKKyAgICBtU3dhcEJlaGF2aW9yID0gRUdM
X0JVRkZFUl9QUkVTRVJWRUQ7CisKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAg
IG1Td2FwQ2hhaW4tPkFkZFJlZigpOworICAgICAgICBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVy
KDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOworCisgICAgICAgIEQz
RFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbUJhY2tCdWZmZXItPkdldERlc2Mo
JmRlc2NyaXB0aW9uKTsKKworICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsKKyAg
ICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKKworICAgICAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldChtV2lkdGgsIG1IZWlnaHQsIGRlc2Ny
aXB0aW9uLkZvcm1hdCwgZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVUeXBlLCBkZXNjcmlwdGlvbi5N
dWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoRUdMX0JBRF9BTExPQyk7
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KG1XaWR0aCwgbUhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBkZXNjcmlwdGlvbi5G
b3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1GbGlwVGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KworICAgICAgICAgICAgZXJyb3IoRUdMX0JBRF9BTExPQyk7CisKKyAgICAgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorfQorCitTdXJmYWNlOjp+U3VyZmFjZSgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisg
ICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1C
YWNrQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAg
ICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobUZsaXBUZXh0
dXJlKQorICAgIHsKKyAgICAgICAgbUZsaXBUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgfQorCisg
ICAgaWYgKG1GbGlwU3RhdGUpCisgICAgeworICAgICAgICBtRmxpcFN0YXRlLT5SZWxlYXNlKCk7
CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlwU3RhdGUpCisgICAgeworICAgICAgICBtUHJlRmxp
cFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitIV05EIFN1cmZhY2U6OmdldFdpbmRvd0hh
bmRsZSgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBEM0RQUkVTRU5U
X1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7CisgICAgICAgIG1Td2FwQ2hhaW4tPkdldFBy
ZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVycyk7CisKKyAgICAgICAgcmV0dXJuIHBy
ZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3c7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK3ZvaWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERl
dmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJjZSkKK3sKKyAgICAvLyBEaXNh
YmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEg
fCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwg
RDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihO
VUxMKTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKworICAgIC8vIEp1c3Qg
c2FtcGxlIHRoZSB0ZXh0dXJlCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOworICAgIGRldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7CisgICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FC
TEUpOworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBzb3VyY2UpOworICAgIGRldmljZS0+U2V0
U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lO
VCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwg
RkFMU0UpOworICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7
CisKKyAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7IC8vIERyYXdQcmltaXRp
dmVVUCBvbmx5IGNhcmVzIGFib3V0IHN0cmVhbSAwLCBub3QgdGhlIHJlc3QuCit9CisKK3ZvaWQg
U3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0
M0RUZXh0dXJlOSAqc291cmNlKQoreworICAgIEhSRVNVTFQgaHI7CisKKyAgICBpZiAobUZsaXBT
dGF0ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIHR3byBzdGF0ZSBibG9ja3Mg
Ym90aCByZWNvcmRpbmcgdGhlIHN0YXRlcyB0aGF0IGFyZSBjaGFuZ2VkIHdoZW4gc3dhcHBpbmcu
CisKKyAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgb3JpZ2luYWwgc3Rh
dGUgZWFjaCBlbnRyeS4KKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwor
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZs
aXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJs
b2NrKCZtUHJlRmxpcFN0YXRlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAg
ICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1QcmVGbGlw
U3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG1GbGlwU3RhdGUgd2ls
bCByZWNvcmQgdGhlIHN0YXRlIGZvciB0aGUgc3dhcCBvcGVyYXRpb24uCisgICAgICAgIGhyID0g
ZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikp
OworCisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisK
KyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1GbGlwU3RhdGUpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUZsaXBTdGF0ZSA9IE5VTEw7CisgICAgICAgICAgICBtUHJlRmxp
cFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtUHJlRmxpcFN0YXRlID0gTlVMTDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gbUZsaXBT
dGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBociA9IG1QcmVGbGlwU3RhdGUt
PkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICBociA9
IG1GbGlwU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICB9CisKKyAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmbVByZUZsaXBCYWNrQnVmZmVy
KTsKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1QcmVGbGlwRGVwdGhTdGVu
Y2lsKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVmZmVyKTsKKyAg
ICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Cit9CisKK3ZvaWQgU3VyZmFj
ZTo6cmVzdG9yZVN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSkKK3sKKyAgICBtUHJlRmxp
cFN0YXRlLT5BcHBseSgpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVByZUZs
aXBCYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVByZUZs
aXBEZXB0aFN0ZW5jaWwpOworCisgICAgaWYgKG1QcmVGbGlwQmFja0J1ZmZlcikKKyAgICB7Cisg
ICAgICAgIG1QcmVGbGlwQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgICAgICBtUHJlRmxpcEJh
Y2tCdWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtUHJlRmxpcERlcHRoU3RlbmNpbCkK
KyAgICB7CisgICAgICAgIG1QcmVGbGlwRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAg
IG1QcmVGbGlwRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICB9Cit9CisKK2Jvb2wgU3VyZmFjZTo6
c3dhcCgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgICAgICBtRmxpcFRleHR1cmUtPkdldFN1
cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgICAgIG1EaXNwbGF5LT5lbmRT
Y2VuZSgpOworICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KG1SZW5kZXJUYXJnZXQsIE5VTEws
IHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworCisgICAgICAgIGFwcGx5Rmxp
cFN0YXRlKGRldmljZSwgbUZsaXBUZXh0dXJlKTsKKworICAgICAgICAvLyBSZW5kZXIgdGhlIHRl
eHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBidWZmZXIKKyAgICAgICAgZmxvYXQgcXVh
ZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsIDEuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCAg
ICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMS4wZiwgMS4wZn0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAx
LjBmLCAwLjBmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAwIC0gMC41Ziwg
bUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDAuMGZ9fTsgICAvLyB4LCB5LCB6LCBy
aHcsIHUsIHYKKworICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZp
Y2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVv
ZihmbG9hdCkpOworCisgICAgICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgcmVzdG9yZVN0YXRlKGRldmljZSk7CisKKyAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudChOVUxMLCBOVUxM
LCBOVUxMLCBOVUxMLCBtRGlzcGxheS0+Z2V0UHJlc2VudEludGVydmFsKCkpOworCisgICAgICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIGZhbHNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VHTGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdMaW50IFN1cmZhY2U6OmdldEhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpT
dXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJu
IG1SZW5kZXJUYXJnZXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0
aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURl
cHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7
Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJF
R0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBTdXJmYWNlLmg6IERlZmluZXMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVw
cmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCisvLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJlYSBv
ZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMuCisvLyBJbXBsZW1lbnRzIEVH
TFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4y
IHBhZ2UgMy4KKworI2lmbmRlZiBJTkNMVURFX1NVUkZBQ0VfSF8KKyNkZWZpbmUgSU5DTFVERV9T
VVJGQUNFX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1
ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFj
ZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBDb25maWc7CisKK2NsYXNzIFN1cmZhY2UK
K3sKKyAgcHVibGljOgorICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dh
cENoYWluOSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSogZGVwdGhTdGVuY2lsLCBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5TdXJmYWNlKCk7CisKKyAgICBIV05EIGdl
dFdpbmRvd0hhbmRsZSgpOworICAgIGJvb2wgc3dhcCgpOworCisgICAgdmlydHVhbCBFR0xpbnQg
Z2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgIHByaXZh
dGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN1cmZhY2UpOworCisgICAgRGlzcGxh
eSAqY29uc3QgbURpc3BsYXk7CisgICAgSURpcmVjdDNEU3dhcENoYWluOSAqY29uc3QgbVN3YXBD
aGFpbjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CisgICAgSURpcmVjdDNE
U3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0
ZW5jaWw7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1GbGlwVGV4dHVyZTsKKworICAgIHZvaWQg
YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJl
OSAqc291cmNlKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UpOworICAgIHZvaWQgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJjZSk7CisgICAgSURpcmVjdDNEU3RhdGVC
bG9jazkgKm1GbGlwU3RhdGU7CisgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1QcmVGbGlwU3Rh
dGU7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1QcmVGbGlwQmFja0J1ZmZlcjsKKyAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBEZXB0aFN0ZW5jaWw7CisKKyAgICBjb25zdCBlZ2w6OkNv
bmZpZyAqbUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgK
KyAgICBFR0xpbnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UK
KyAgICBFR0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQor
Ly8gIEVHTGludCBob3Jpem9udGFsUmVzb2x1dGlvbjsgICAvLyBIb3Jpem9udGFsIGRvdCBwaXRj
aAorLy8gIEVHTGludCB2ZXJ0aWNhbFJlc29sdXRpb247ICAgICAvLyBWZXJ0aWNhbCBkb3QgcGl0
Y2gKKy8vICBFR0xCb29sZWFuIGxhcmdlc3RQQnVmZmVyOyAgICAgLy8gSWYgdHJ1ZSwgY3JlYXRl
IGxhcmdlc3QgcGJ1ZmZlciBwb3NzaWJsZQorLy8gIEVHTEJvb2xlYW4gbWlwbWFwVGV4dHVyZTsg
ICAgICAvLyBUcnVlIGlmIHRleHR1cmUgaGFzIG1pcG1hcHMKKy8vICBFR0xpbnQgbWlwbWFwTGV2
ZWw7ICAgICAgICAgICAgLy8gTWlwbWFwIGxldmVsIHRvIHJlbmRlciB0bworLy8gIEVHTGVudW0g
bXVsdGlzYW1wbGVSZXNvbHZlOyAgICAvLyBNdWx0aXNhbXBsZSByZXNvbHZlIGJlaGF2aW9yCisg
ICAgRUdMaW50IG1QaXhlbEFzcGVjdFJhdGlvOyAgICAgIC8vIERpc3BsYXkgYXNwZWN0IHJhdGlv
CisgICAgRUdMZW51bSBtUmVuZGVyQnVmZmVyOyAgICAgICAgIC8vIFJlbmRlciBidWZmZXIKKyAg
ICBFR0xlbnVtIG1Td2FwQmVoYXZpb3I7ICAgICAgICAgLy8gQnVmZmVyIHN3YXAgYmVoYXZpb3IK
Ky8vICBFR0xlbnVtIHRleHR1cmVGb3JtYXQ7ICAgICAgICAgLy8gRm9ybWF0IG9mIHRleHR1cmU6
IFJHQiwgUkdCQSwgb3Igbm8gdGV4dHVyZQorLy8gIEVHTGVudW0gdGV4dHVyZVRhcmdldDsgICAg
ICAgICAvLyBUeXBlIG9mIHRleHR1cmU6IDJEIG9yIG5vIHRleHR1cmUKKy8vICBFR0xlbnVtIHZn
QWxwaGFGb3JtYXQ7ICAgICAgICAgLy8gQWxwaGEgZm9ybWF0IGZvciBPcGVuVkcKKy8vICBFR0xl
bnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRworfTsK
K30KKworI2VuZGlmICAgLy8gSU5DTFVERV9TVVJGQUNFX0hfCkluZGV4OiBBTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3Bw
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwODUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGxpYkVHTC5jcHA6
IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIEVHTCBmdW5jdGlvbnMuCisKKyNpbmNsdWRlIDxleGNl
cHRpb24+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
Q29udGV4dC5oIgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKyNpbmNsdWRlICJsaWJFR0wv
RGlzcGxheS5oIgorCisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQorewor
ICAgIGlmIChkaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfRElTUExBWSwgZmFsc2UpOworICAgIH0KKworICAgIGlmICghZGlzcGxh
eS0+aXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1Rf
SU5JVElBTElaRUQsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVHTENvbmZpZyBjb25maWcpCit7Cisg
ICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25maWcoY29uZmlnKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgZmFsc2UpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXkt
PmlzVmFsaWRDb250ZXh0KGNvbnRleHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQ09OVEVYVCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNl
KQoreworICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFkaXNwbGF5LT5pc1ZhbGlkU3VyZmFjZShzdXJmYWNl
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIGZhbHNlKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZXh0ZXJuICJDIgoreworRUdMaW50IF9f
c3RkY2FsbCBlZ2xHZXRFcnJvcih2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgRUdM
aW50IGVycm9yID0gZWdsOjpnZXRDdXJyZW50RXJyb3IoKTsKKworICAgIGlmIChlcnJvciAhPSBF
R0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKEVHTF9TVUND
RVNTKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0VHTERpc3BsYXkgX19zdGRj
YWxsIGVnbEdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCkKK3sKKyAg
ICBUUkFDRSgiKEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQgPSAweCUwLjhwKSIsIGRp
c3BsYXlfaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICAvLyBGSVhNRTogUmV0dXJuIHRo
ZSBzYW1lIEVHTERpc3BsYXkgaGFuZGxlIHdoZW4gZGlzcGxheV9pZCBhbHJlYWR5IGNyZWF0ZWQg
YSBkaXNwbGF5CisKKyAgICAgICAgaWYgKGRpc3BsYXlfaWQgPT0gRUdMX0RFRkFVTFRfRElTUExB
WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBlZ2w6OkRpc3BsYXkoKEhEQylO
VUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5X2lkIGlzIGEgdmFsaWQgZGlzcGxheSBkZXZpY2UgY29u
dGV4dAorCisgICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6RGlzcGxheSgoSERDKWRpc3BsYXlf
aWQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fRElTUExBWSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZOworfQorCitFR0xCb29sZWFuIF9fc3Rk
Y2FsbCBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xpbnQg
Km1pbm9yKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQg
Km1ham9yID0gMHglMC44cCwgRUdMaW50ICptaW5vciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBk
cHksIG1ham9yLCBtaW5vcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChkcHkgPT0g
RUdMX05PX0RJU1BMQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0RJU1BMQVksIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAg
IGlmICghZGlzcGxheS0+aW5pdGlhbGl6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtYWpvcikgKm1ham9yID0gMTsKKyAgICAgICAgaWYgKG1pbm9yKSAqbWlub3Ig
PSA0OworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKwor
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsVGVybWluYXRlKEVHTERpc3BsYXkgZHB5KQoreworICAg
IFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwKSIsIGRweSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIEVHTF9GQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOworCisgICAgICAgIGRpc3BsYXktPnRlcm1pbmF0ZSgpOworCisgICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworY29uc3QgY2hhciAqX19z
dGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgbmFtZSkKK3sKKyAg
ICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IG5hbWUgPSAlZCkiLCBk
cHksIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFs
aWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoIChuYW1lKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBFR0xfQ0xJRU5UX0FQSVM6CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiT3BlbkdMX0VT
Iik7CisgICAgICAgICAgY2FzZSBFR0xfRVhURU5TSU9OUzoKKyAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzKCIiKTsKKyAgICAgICAgICBjYXNlIEVHTF9WRU5ET1I6CisgICAgICAgICAgICByZXR1
cm4gc3VjY2VzcygiVHJhbnNHYW1pbmcgSW5jLiIpOworICAgICAgICAgIGNhc2UgRUdMX1ZFUlNJ
T046CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiMS40IChnaXQtZGV2ZWwgIl9fREFURV9f
IiAiIF9fVElNRV9fIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
KGNvbnN0IGNoYXIqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitFR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xHZXRDb25maWdzKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcg
KmNvbmZpZ3MsIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKQoreworICAg
IFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgKmNvbmZpZ3MgPSAw
eCUwLjhwLCAiCisgICAgICAgICAgIkVHTGludCBjb25maWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51
bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjb25maWdzLCBjb25maWdfc2l6
ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbnVtX2NvbmZpZykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xf
Tk9ORX07CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJp
Ykxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xDaG9vc2VDb25maWcoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGlu
dCAqYXR0cmliX2xpc3QsIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBF
R0xpbnQgKm51bV9jb25maWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVH
TENvbmZpZyAqY29uZmlncyA9IDB4JTAuOHAsIEVHTGludCBjb25maWdfc2l6ZSA9ICVkLCBFR0xp
bnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBhdHRyaWJfbGlzdCwg
Y29uZmlncywgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihk
cHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW51bV9j
b25maWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEVHTGludCBhdHRy
aWJMaXN0W10gPSAgICB7RUdMX05PTkV9OworCisgICAgICAgIGlmICghYXR0cmliX2xpc3QpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmliTGlzdDsKKyAgICAgICAg
fQorCisgICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliX2xpc3QsIGNv
bmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJV
RSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVy
biBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ0F0dHJp
YihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdM
aW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdM
Q29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZpZywgYXR0cmlidXRlLCB2YWx1
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShk
aXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNF
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5nZXRDb25maWdBdHRyaWIoY29u
ZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xTdXJmYWNlIF9fc3Rk
Y2FsbCBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29u
ZmlnLCBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkK
K3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZp
ZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luID0gMHglMC44cCwgIgorICAgICAg
ICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywg
d2luLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBIV05EIHdpbmRvdyA9
IChIV05EKXdpbjsKKworICAgICAgICBpZiAoIUlzV2luZG93KHdpbmRvdykpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX05BVElWRV9XSU5ET1csIEVHTF9OT19T
VVJGQUNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdHRyaWJfbGlzdCkKKyAgICAgICAg
eworICAgICAgICAgICAgd2hpbGUgKCphdHRyaWJfbGlzdCAhPSBFR0xfTk9ORSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYl9saXN0WzBdKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3RbMV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdM
X1NJTkdMRV9CVUZGRVI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8vIFJlbmRlcmluZyBkaXJlY3RseSB0byBm
cm9udCBidWZmZXIgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUs
IEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0NPTE9SU1BBQ0U6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VS
RkFDRSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFD
RSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlzcGxheS0+
aGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgIH0K
KworICAgICAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSAoRUdMU3VyZmFjZSlkaXNwbGF5LT5jcmVh
dGVXaW5kb3dTdXJmYWNlKHdpbmRvdywgY29uZmlnKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vz
cyhzdXJmYWNlKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTFN1cmZhY2UgX19zdGRjYWxs
IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmln
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZpZywgYXR0cmliX2xp
c3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUo
ZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19T
VVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX0RJU1BMQVkpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VS
RkFDRTsKK30KKworRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShF
R0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZlUGl4bWFwVHlwZSBwaXht
YXAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xOYXRpdmVQaXht
YXBUeXBlIHBpeG1hcCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHBpeG1hcCwgYXR0cmliX2xpc3QpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxh
eSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNF
OworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX0RJU1BMQVkpOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsK
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVzdHJveVN1cmZhY2UoRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxh
eSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChlZ2w6OlN1cmZhY2UqKXN1
cmZhY2UpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30K
KworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpCit7Cisg
ICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9
IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFsdWUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6
OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7
CisKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEVHTF9WR19BTFBIQV9GT1JNQVQ6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1ZHX0NPTE9SU1BB
Q0U6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDoKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+Z2V0SGVpZ2h0
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9IT1JJWk9OVEFMX1JF
U09MVVRJT046CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1RfUEJVRkZFUjoKKyAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX1RFWFRVUkU6CisgICAgICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdM
X01JUE1BUF9MRVZFTDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xW
RToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfUElYRUxfQVNQRUNUX1JBVElPOgorICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9TV0FQ
X0JFSEFWSU9SOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX0ZPUk1BVDoKKyAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6CisgICAgICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdM
X1ZFUlRJQ0FMX1JFU09MVVRJT046CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAg
ICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEJp
bmRBUEkoRUdMZW51bSBhcGkpCit7CisgICAgVFJBQ0UoIihFR0xlbnVtIGFwaSA9IDB4JVgpIiwg
YXBpKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcGkpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfQVBJOgorICAgICAgICAgIGNhc2UgRUdMX09QRU5W
R19BUEk6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9G
QUxTRSk7ICAgLy8gTm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uCisgICAgICAg
ICAgY2FzZSBFR0xfT1BFTkdMX0VTX0FQSToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVH
TF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1cnJlbnRBUEkoYXBpKTsK
KworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTGVu
dW0gX19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIEVHTGVudW0gQVBJID0gZWdsOjpnZXRDdXJyZW50QVBJKCk7
CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsV2FpdENsaWVudCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAg
ICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNh
bGwgZWdsUmVsZWFzZVRocmVhZCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChFR0xfTk9fRElTUExBWSwgRUdMX05PX0NP
TlRFWFQsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSk7CisKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBl
Z2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBi
dWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBF
R0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUw
LjhwLCBFR0xlbnVtIGJ1ZnR5cGUgPSAweCVYLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyID0gMHgl
MC44cCwgIgorICAgICAgICAgICJFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGJ1ZnR5cGUsIGJ1
ZmZlciwgY29uZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9f
U1VSRkFDRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGlu
dCBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0
ZSA9ICVkLCBFR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0
cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9G
QUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
CisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9v
bGVhbiBfX3N0ZGNhbGwgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNl
IHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAl
ZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsK
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRleEltYWdlKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVH
TGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9U
UlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0
dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsU3dhcEludGVydmFs
KEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgVFJBQ0UoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCBpbnRlcnZhbCA9ICVkKSIsIGRweSwgaW50ZXJ2YWwp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlz
cGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAg
IH0KKworICAgICAgICBkaXNwbGF5LT5zZXRTd2FwSW50ZXJ2YWwoaW50ZXJ2YWwpOworCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQ29udGV4dCBf
X3N0ZGNhbGwgZWdsQ3JlYXRlQ29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQor
eworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmln
ID0gMHglMC44cCwgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0ID0gMHglMC44cCwgIgorICAgICAg
ICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywg
c2hhcmVfY29udGV4dCwgYXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwor
CisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9OT19DT05URVhUOworICAgICAgICB9CisKKyAgICAgICAgRUdM
Q29udGV4dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcpOworCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05P
X0NPTlRFWFQpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKK30KKworRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVzdHJveUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENv
bnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xD
b250ZXh0IGN0eCA9IDB4JTAuOHApIiwgZHB5LCBjdHgpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihk
cHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3R4ID09
IEVHTF9OT19DT05URVhUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9DT05URVhULCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+
ZGVzdHJveUNvbnRleHQoKGdsOjpDb250ZXh0KiljdHgpOworCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFr
ZUN1cnJlbnQoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2UgZHJhdywgRUdMU3VyZmFjZSByZWFk
LCBFR0xDb250ZXh0IGN0eCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgRUdMU3VyZmFjZSBkcmF3ID0gMHglMC44cCwgRUdMU3VyZmFjZSByZWFkID0gMHglMC44cCwg
RUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBkcmF3LCByZWFkLCBj
dHgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oY3R4KTsKKyAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7CisgICAgICAgIERXT1JEIHBh
c3NlczsKKworICAgICAgICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlZhbGlkYXRlRGV2aWNlKCZw
YXNzZXMpID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjdHggIT0gRUdMX05PX0NPTlRFWFQgJiYgIXZhbGlkYXRlKGRpc3BsYXksIGNvbnRl
eHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZShkaXNw
bGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSkpIHx8CisgICAgICAgICAgICAo
cmVhZCAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRhdGUoZGlzcGxheSwgc3RhdGljX2Nhc3Q8
ZWdsOjpTdXJmYWNlKj4ocmVhZCkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVH
TF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3ICE9IHJlYWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICB9CisK
KyAgICAgICAgZWdsOjpzZXRDdXJyZW50RGlzcGxheShkcHkpOworICAgICAgICBlZ2w6OnNldEN1
cnJlbnREcmF3U3VyZmFjZShkcmF3KTsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50UmVhZFN1cmZh
Y2UocmVhZCk7CisKKyAgICAgICAgZ2xNYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdGF0
aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
RUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xHZXRDdXJy
ZW50Q29udGV4dCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBnbEdldEN1cnJlbnRDb250ZXh0KCk7CisKKyAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
Tk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19DT05URVhUOworfQorCitF
R0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xpbnQgcmVhZGRyYXcp
Cit7CisgICAgVFJBQ0UoIihFR0xpbnQgcmVhZGRyYXcgPSAlZCkiLCByZWFkZHJhdyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChyZWFkZHJhdyA9PSBFR0xfUkVBRCkKKyAgICAgICAg
eworICAgICAgICAgICAgRUdMU3VyZmFjZSByZWFkID0gZWdsOjpnZXRDdXJyZW50UmVhZFN1cmZh
Y2UoKTsKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlYWQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHJlYWRkcmF3ID09IEVHTF9EUkFXKQorICAgICAgICB7CisgICAgICAgICAg
ICBFR0xTdXJmYWNlIGRyYXcgPSBlZ2w6OmdldEN1cnJlbnREcmF3U3VyZmFjZSgpOworICAgICAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHJhdyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9O
T19TVVJGQUNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZB
Q0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMRGlzcGxh
eSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudERpc3BsYXkodm9pZCkKK3sKKyAgICBUUkFDRSgiKCki
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMRGlzcGxheSBkcHkgPSBlZ2w6OmdldEN1
cnJlbnREaXNwbGF5KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHB5KTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05P
X0RJU1BMQVk7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5Q29udGV4dChFR0xE
aXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFs
dWUpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbnRleHQg
Y3R4ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHgl
MC44cCkiLAorICAgICAgICAgIGRweSwgY3R4LCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
MCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVy
biBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFdhaXRHTCh2b2lkKQor
eworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsK
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdE5hdGl2ZShFR0xpbnQgZW5naW5lKQor
eworICAgIFRSQUNFKCIoRUdMaW50IGVuZ2luZSA9ICVkKSIsIGVuZ2luZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJl
dHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xT
d2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIFRS
QUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUw
LjhwKSIsIGRweSwgc3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19T
VVJGQUNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJG
QUNFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xT
dXJmYWNlID0gKGVnbDo6U3VyZmFjZSopc3VyZmFjZTsKKworICAgICAgICBpZiAoZWdsU3VyZmFj
ZS0+c3dhcCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJV
RSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ29w
eUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMTmF0aXZlUGl4
bWFwVHlwZSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAs
IEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0
ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2Fs
bCBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKK3sKKyAgICBUUkFDRSgi
KGNvbnN0IGNoYXIgKnByb2NuYW1lID0gXCIlc1wiKSIsIHByb2NuYW1lKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgc3RydWN0IEV4dGVuc2lvbgorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBjaGFyICpuYW1lOworICAgICAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBjb25z
dCBFeHRlbnNpb24gZWdsRXh0ZW5zaW9uc1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgeyIi
LCBOVUxMfSwKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBz
aXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGVnbEV4dGVuc2lvbnNbZXh0XS5u
YW1lKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xFeHRlbnNpb25zW2V4dF0uYWRk
cmVzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBnbEdldFBy
b2NBZGRyZXNzKHByb2NuYW1lKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiBO
VUxMOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorTElCUkFS
WQlsaWJFR0wKK0VYUE9SVFMKKwllZ2xCaW5kQVBJICAgICAgICAgICAgICAgICAgICAgIEAxNAor
CWVnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAgQDIwCisJZWdsQ2hvb3NlQ29uZmlnICAg
ICAgICAgICAgICAgICBANworCWVnbENvcHlCdWZmZXJzICAgICAgICAgICAgICAgICAgQDMzCisJ
ZWdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAgICBAMjMKKwllZ2xDcmVhdGVQYnVmZmVyRnJv
bUNsaWVudEJ1ZmZlciAgICAgICAgQDE4CisJZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UgICAgICAg
ICBAMTAKKwllZ2xDcmVhdGVQaXhtYXBTdXJmYWNlICAgICAgICAgIEAxMQorCWVnbENyZWF0ZVdp
bmRvd1N1cmZhY2UgICAgICAgICAgQDkKKwllZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
IEAyNAorCWVnbERlc3Ryb3lTdXJmYWNlICAgICAgICAgICAgICAgQDEyCisJZWdsR2V0Q29uZmln
QXR0cmliICAgICAgICAgICAgICBAOAorCWVnbEdldENvbmZpZ3MgICAgICAgICAgICAgICAgICAg
QDYKKwllZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgIEAyNgorCWVnbEdldEN1cnJlbnRE
aXNwbGF5ICAgICAgICAgICAgQDI4CisJZWdsR2V0Q3VycmVudFN1cmZhY2UgICAgICAgICAgICBA
MjcKKwllZ2xHZXREaXNwbGF5ICAgICAgICAgICAgICAgICAgIEAyCisJZWdsR2V0RXJyb3IgICAg
ICAgICAgICAgICAgICAgICBAMQorCWVnbEdldFByb2NBZGRyZXNzICAgICAgICAgICAgICAgQDM0
CisJZWdsSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICBAMworCWVnbE1ha2VDdXJyZW50ICAg
ICAgICAgICAgICAgICAgQDI1CisJZWdsUXVlcnlBUEkgICAgICAgICAgICAgICAgICAgICBAMTUK
KwllZ2xRdWVyeUNvbnRleHQgICAgICAgICAgICAgICAgIEAyOQorCWVnbFF1ZXJ5U3RyaW5nICAg
ICAgICAgICAgICAgICAgQDUKKwllZ2xRdWVyeVN1cmZhY2UgICAgICAgICAgICAgICAgIEAxMwor
CWVnbFJlbGVhc2VUZXhJbWFnZSAgICAgICAgICAgICAgQDIxCisJZWdsUmVsZWFzZVRocmVhZCAg
ICAgICAgICAgICAgICBAMTcKKwllZ2xTdXJmYWNlQXR0cmliICAgICAgICAgICAgICAgIEAxOQor
CWVnbFN3YXBCdWZmZXJzICAgICAgICAgICAgICAgICAgQDMyCisJZWdsU3dhcEludGVydmFsICAg
ICAgICAgICAgICAgICBAMjIKKwllZ2xUZXJtaW5hdGUgICAgICAgICAgICAgICAgICAgIEA0CisJ
ZWdsV2FpdENsaWVudCAgICAgICAgICAgICAgICAgICBAMTYKKwllZ2xXYWl0R0wgICAgICAgICAg
ICAgICAgICAgICAgIEAzMAorCWVnbFdhaXROYXRpdmUgICAgICAgICAgICAgICAgICAgQDMxClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3Mt
MTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysr
Ig0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJsaWJFR0wiDQorCVByb2plY3RHVUlEPSJ7RTc0
NkZDQTktNjRDMy00MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fSINCisJUm9vdE5hbWVzcGFjZT0ibGli
RUdMIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEz
MTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIi
DQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQor
CTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2lu
MzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5h
bWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQor
CQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCT4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9p
bmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5E
T1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlO
TUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tz
PSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9
IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVBy
b2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVu
Y2llcz0iZDNkOS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCisJCQkJTW9kdWxlRGVm
aW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0i
dHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEi
DQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIx
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21t
YW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7
JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwk
KENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGly
KVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1
cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJ
CS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJl
bGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmln
dXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9u
TmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0K
KwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxE
YXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2Vy
dmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
TUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIy
Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAk
KFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VS
RV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCINCisJCQkJUnVudGltZUxpYnJh
cnk9IjAiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9
IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJCURl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xp
bmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIg0KKwkJCQlM
aW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJFR0wuZGVm
Ig0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0i
MiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5n
PSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25Q
cmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gw
RDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlv
bk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwm
cXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRp
b24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+
DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmls
dGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlx
dWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJ
CQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbmZpZy5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxDb21tb25cZGVi
dWcuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxEaXNwbGF5LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVz
Ig0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIg0KKwkJCVVuaXF1ZUlkZW50
aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9Ig0KKwkJCT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmlnLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVc
RUdMXGVnbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xwbGF0Zm9y
bS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxtYWluLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXFN1cmZhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJ
PEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmRlZiINCisJCQk+DQorCQk8L0ZpbGU+
DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Q
cm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJF
R0wvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBtYWluLmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRo
cmVhZC1sb2NhbCBkYXRhLgorCisjaW5jbHVkZSAibGliRUdML21haW4uaCIKKworI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgorCitzdGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRfT0Zf
SU5ERVhFUzsKKworQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JE
IHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQoreworICAgIHN3aXRjaCAocmVhc29uKQorICAgIHsK
KyAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICAj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgIEZJTEUgKmRlYnVnID0gZm9wZW4oImRlYnVn
LnR4dCIsICJydCIpOworCisgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVidWcgPSBmb3BlbigiZGVidWcudHh0IiwgInd0Iik7ICAgLy8gRXJhc2UKKyAgICAg
ICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAjZW5kaWYKKworICAgICAgICAgICAgY3VycmVudFRMUyA9IFRsc0FsbG9jKCk7CisKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0ZfSU5ERVhFUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXplIGluZGV4CisgICAg
ICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICBlZ2w6OkN1
cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVvZihl
Z2w6OkN1cnJlbnQpKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7CisKKyAg
ICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9IEVHTF9TVUNDRVNTOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNfQVBJOworICAgICAgICAgICAgICAgIGN1
cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAgICAgICAgICBjdXJyZW50
LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOworICAgICAgICAgICAgICAgIGN1cnJlbnQt
PnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICB7
CisgICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisK
KyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgIHsK
KyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKwor
ICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
TG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFRsc0ZyZWUoY3VycmVudFRMUyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
bmFtZXNwYWNlIGVnbAorewordm9pZCBzZXRDdXJyZW50RXJyb3IoRUdMaW50IGVycm9yKQorewor
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7
CisKKyAgICBjdXJyZW50LT5lcnJvciA9IGVycm9yOworfQorCitFR0xpbnQgZ2V0Q3VycmVudEVy
cm9yKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmVycm9yOworfQorCit2b2lkIHNldEN1
cnJlbnRBUEkoRUdMZW51bSBBUEkpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50
KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPkFQSSA9IEFQSTsKK30K
KworRUdMZW51bSBnZXRDdXJyZW50QVBJKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1
cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPkFQ
STsKK30KKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5IGRweSkKK3sKKyAgICBD
dXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisg
ICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKK30KKworRUdMRGlzcGxheSBnZXRDdXJyZW50RGlz
cGxheSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kaXNwbGF5OworfQorCit2b2lkIHNl
dEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCit7CisgICAgQ3VycmVudCAq
Y3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJl
bnQtPmRyYXdTdXJmYWNlID0gc3VyZmFjZTsKK30KKworRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJh
d1N1cmZhY2UoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZHJhd1N1cmZhY2U7Cit9CisK
K3ZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBD
dXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisg
ICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJmYWNlOworfQorCitFR0xTdXJmYWNlIGdldEN1
cnJlbnRSZWFkU3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5yZWFkU3VyZmFj
ZTsKK30KK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JDb2RlKQoreworICAgIGVnbDo6c2V0
Q3VycmVudEVycm9yKGVycm9yQ29kZSk7Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML21haW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML21haW4uaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6IE1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2Fs
IGRhdGEuCisKKyNpZm5kZWYgTElCRUdMX01BSU5fSF8KKyNkZWZpbmUgTElCRUdMX01BSU5fSF8K
KworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisKK25hbWVzcGFjZSBlZ2wK
K3sKK3N0cnVjdCBDdXJyZW50Cit7CisgICAgRUdMaW50IGVycm9yOworICAgIEVHTGVudW0gQVBJ
OworICAgIEVHTERpc3BsYXkgZGlzcGxheTsKKyAgICBFR0xTdXJmYWNlIGRyYXdTdXJmYWNlOwor
ICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Cit9OworCit2b2lkIHNldEN1cnJlbnRFcnJvcihF
R0xpbnQgZXJyb3IpOworRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOworCit2b2lkIHNldEN1cnJl
bnRBUEkoRUdMZW51bSBBUEkpOworRUdMZW51bSBnZXRDdXJyZW50QVBJKCk7CisKK3ZvaWQgc2V0
Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOworRUdMRGlzcGxheSBnZXRDdXJyZW50RGlz
cGxheSgpOworCit2b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2Up
OworRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKKwordm9pZCBzZXRDdXJyZW50
UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKK0VHTFN1cmZhY2UgZ2V0Q3VycmVudFJl
YWRTdXJmYWNlKCk7Cit9CisKK3ZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSk7CisKK3RlbXBs
YXRlPGNsYXNzIFQ+Citjb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JDb2RlLCBjb25zdCBUICZy
ZXR1cm5WYWx1ZSkKK3sKKyAgICBlcnJvcihlcnJvckNvZGUpOworCisgICAgcmV0dXJuIHJldHVy
blZhbHVlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPgorY29uc3QgVCAmc3VjY2Vzcyhjb25zdCBU
ICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7
CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAgLy8gTElCRUdMX01BSU5f
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJH
TEVTdjIvQmxpdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTY0IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorCisjaW5jbHVkZSA8ZDNkeDkuaD4KKworI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKworbmFt
ZXNwYWNlCit7CisvLyBTdGFuZGFyZCBWZXJ0ZXggU2hhZGVyCisvLyBJbnB1dCAwIGlzIHRoZSBo
b21vZ2Vub3VzIHBvc2l0aW9uLgorLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBh
cy1pcy4KKy8vIE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVm
dCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkgaW4gdGhlIGJvdHRvbSByaWdodC4KKy8v
IEMwLlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVsIHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFs
Zi1waXhlbCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNoYXIgc3RhbmRhcmR2c1td
ID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQ
T1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgorIn07XG4i
CisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgorIlxuIgorIlZT
X09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgorIntcbiIKKyIg
ICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24g
KyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0
NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCisiXG4i
CisiICAgIHJldHVybiBPdXQ7XG4iCisifVxuIjsKKworLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIK
Ky8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBo
b21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgw
LDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0
aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBh
bmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitjb25zdCBjaGFyIGZsaXB5dnNbXSA9Cisic3Ry
dWN0IFZTX09VVFBVVFxuIgorIntcbiIKKyIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047
XG4iCisiICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDtcbiIKKyJ9O1xuIgorIlxuIgor
InVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDtcbiIKKyJcbiIKKyJWU19PVVRQVVQg
bWFpbihpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTilcbiIKKyJ7XG4iCisiICAgIFZTX09V
VFBVVCBPdXQ7XG4iCisiXG4iCisiICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBp
eGVsU2l6ZTtcbiIKKyIgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAw
LjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCisiXG4iCisiICAgIHJl
dHVybiBPdXQ7XG4iCisifVxuIjsKKworLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCisvLyBP
dXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCitjb25zdCBjaGFyIHBhc3N0
aHJvdWdocHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xuIgorIlxuIgorImZsb2F0NCBtYWlu
KGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJcmV0dXJu
IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIn1cbiI7CisKKy8vIEx1bWluYW5jZSBDb252
ZXJzaW9uIFBpeGVsIFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgor
Ly8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgorLy8gRm9y
IEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KK2NvbnN0IGNoYXIgbHVt
aW5hbmNlcHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xuIgorIlxuIgorInVuaWZvcm0gZmxv
YXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBU
RVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4iCisiCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRl
eGNvb3JkLnh5KTtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTtcbiIKKyIJ
cmV0dXJuIHRtcC54eHh3O1xuIgorIn1cbiI7CisKKy8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBp
eGVsIFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8g
Zm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCisvLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAu
WCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KKy8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9
IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAwLgorY29uc3QgY2hhciBj
b21wb25lbnRtYXNrcHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMwO1xuIgorIlxuIgorInVuaWZv
cm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29v
cmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4iCisiCWZsb2F0NCB0bXAgPSB0ZXgyRCh0
ZXgsIHRleGNvb3JkLnh5KTtcbiIKKyIJdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7XG4iCisi
CXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7XG4iCisiCXJldHVybiB0bXA7XG4iCisi
fVxuIjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6
Om1TaGFkZXJTb3VyY2VbXSA9Cit7CisgICAgc3RhbmRhcmR2cywKKyAgICBmbGlweXZzLAorICAg
IHBhc3N0aHJvdWdocHMsCisgICAgbHVtaW5hbmNlcHMsCisgICAgY29tcG9uZW50bWFza3BzCit9
OworCitCbGl0OjpCbGl0KENvbnRleHQgKmNvbnRleHQpCisgIDogbUNvbnRleHQoY29udGV4dCks
IG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBt
U2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKSwgbVNhdmVk
U3RhdGVCbG9jayhOVUxMKQoreworICAgIGluaXRHZW9tZXRyeSgpOworICAgIG1lbXNldChtQ29t
cGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOworfQorCitCbGl0Ojp+
QmxpdCgpCit7CisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJl
bGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5S
ZWxlYXNlKCk7CisgICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVj
bGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NP
VU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCit7CisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IHF1YWRbXSA9CisgICAgeworICAgICAgICAtMSwgLTEsCisgICAgICAgIC0x
LCAgMSwKKyAgICAgICAgIDEsIC0xLAorICAgICAgICAgMSwgIDEKKyAgICB9OworCisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyID0g
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9mKHF1YWQpLCBEM0RVU0FHRV9XUklURU9O
TFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVydGV4QnVmZmVyLCBOVUxMKTsKKworICAg
IGlmIChGQUlMRUQoaHIpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgdm9pZCAqbG9ja1B0cjsKKyAgICBt
UXVhZFZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbG9ja1B0ciwgMCk7CisgICAgbWVtY3B5KGxv
Y2tQdHIsIHF1YWQsIHNpemVvZihxdWFkKSk7CisgICAgbVF1YWRWZXJ0ZXhCdWZmZXItPlVubG9j
aygpOworCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW10gPQor
ICAgIHsKKyAgICAgICAgeyAwLCAwLCBEM0RERUNMVFlQRV9GTE9BVDIsIEQzRERFQ0xNRVRIT0Rf
REVGQVVMVCwgRDNEREVDTFVTQUdFX1BPU0lUSU9OLCAwIH0sCisgICAgICAgIEQzRERFQ0xfRU5E
KCkKKyAgICB9OworCisgICAgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVs
ZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgeworICAgICAgICBBU1NFUlQoaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgorYm9vbCBCbGl0
OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAorICAgICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipjcmVhdGVT
aGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUqKiksCisgICAgICAgICAgICAgICAg
ICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hh
ZGVyVHlwZSopKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworCisgICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOworCisgICAgaWYgKG1Db21waWxlZFNoYWRl
cnNbc291cmNlXSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8
RDNEU2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIElEM0RYQnVmZmVyICpzaGFkZXJDb2RlOworICAgICAgICBIUkVT
VUxUIGhyID0gRDNEWENvbXBpbGVTaGFkZXIobVNoYWRlclNvdXJjZVtzb3VyY2VdLCBzdHJsZW4o
bVNoYWRlclNvdXJjZVtzb3VyY2VdKSwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCAwLCAm
c2hhZGVyQ29kZSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNvbXBpbGUgJXMgc2hhZGVyIGZvciBi
bGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQpc291cmNlLCBo
cik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBociA9
IChkZXZpY2UtPipjcmVhdGVTaGFkZXIpKHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oc2hhZGVy
Q29kZS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgJnNoYWRlcik7CisgICAgICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJDb2RlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgJXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlv
biAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQpc291cmNlLCBocik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBzaGFkZXJDb2RlLT5SZWxl
YXNlKCk7CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdID0gc2hhZGVyOworICAg
IH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVyKShzaGFkZXIpOworCisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBzZXQgJXMg
c2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChp
bnQpc291cmNlLCBocik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVy
KQoreworICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVydGV4U2hhZGVyOT4oc2hhZGVy
LCBtQ29udGV4dC0+Z2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6
Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsK
K30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCit7CisgICAg
cmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQt
PmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxT
aGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7Cit9CisKK1JFQ1QgQmxp
dDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0Cit7Cisg
ICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7CisK
KyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0gMDsKKyAgICByZWN0LnRvcCA9IDA7Cisg
ICAgcmVjdC5yaWdodCA9IGRlc2MuV2lkdGg7CisgICAgcmVjdC5ib3R0b20gPSBkZXNjLkhlaWdo
dDsKKworICAgIHJldHVybiByZWN0OworfQorCitib29sIEJsaXQ6OmJveEZpbHRlcihJRGlyZWN0
M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKK3sKKyAgICBJRGly
ZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgZ2V0
U3VyZmFjZVJlY3Qoc291cmNlKSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisKKyAgICBkZXZpY2UtPlNldFRleHR1cmUo
MCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7CisKKyAg
ICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKyAgICBzZXRQaXhlbFNoYWRl
cihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOworCisgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZf
TElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRF
UiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVz
dCksIDAsIDApOworCisgICAgcmVuZGVyKCk7CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisK
KyAgICByZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6
OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0
dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0KTsKKyAgICBpZiAo
IXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsK
KworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJl
bmRlclRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZz
ZXQsIHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgaWYgKHNldEZv
cm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQorICAgIHsKKyAgICAgICAgcmVuZGVyKCk7
CisgICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgcmVzdG9yZVN0YXRlKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hh
ZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFk
ZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBva2F5ID0gb2th
eSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfQ09NUE9ORU5UTUFTSyk7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOgorICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNf
TFVNSU5BTkNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFva2F5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGVudW0geyBYID0gMCwgWSA9
IDEsIFogPSAyLCBXID0gMyB9OworCisgICAgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBjb25zdGFu
dCBkZXBlbmRzIG9uIHRoZSBzaGFkZXIgdGhhdCB3YXMgc2VsZWN0ZWQuCisgICAgLy8gU2VlIHRo
ZSBzaGFkZXIgYXNzZW1ibHkgY29kZSBhYm92ZSBmb3IgZGV0YWlscy4KKyAgICBmbG9hdCBwc0Nv
bnN0MFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgc3dpdGNoIChkZXN0Rm9ybWF0KQorICAg
IHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdMX1JHQkE6Cisg
ICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsK
KyAgICAgICAgcHNDb25zdDBbV10gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBH
TF9BTFBIQToKKyAgICAgICAgcHNDb25zdDBbWl0gPSAxOworICAgICAgICBicmVhazsKKworICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIHBzQ29uc3QwW1ldID0gMTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBwc0NvbnN0
MFtYXSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdldERldmljZSgpLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50RigwLCBwc0NvbnN0MCwgMSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworSURpcmVjdDNEVGV4dHVyZTkgKkJsaXQ6OmNvcHlTdXJmYWNlVG9UZXh0dXJlKElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0KQoreworICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNj
OworICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOworCisgICAgLy8gQ29weSB0aGUg
cmVuZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQorICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0
dXJlOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJl
Y3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVj
dC50b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBP
T0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB0ZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4
dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIFJFQ1QgZDNkU291cmNlUmVjdDsKKyAgICBkM2RT
b3VyY2VSZWN0LmxlZnQgPSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgZDNkU291cmNlUmVjdC5yaWdo
dCA9IHNvdXJjZVJlY3QucmlnaHQ7CisgICAgZDNkU291cmNlUmVjdC50b3AgPSBzb3VyY2VSZWN0
LnRvcDsKKyAgICBkM2RTb3VyY2VSZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QuYm90dG9tOworCisg
ICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0
KHN1cmZhY2UsICZkM2RTb3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9O
T05FKTsKKworICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgdGV4dHVyZS0+
UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJl
Y3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKwor
dm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgRDNEVklFV1BPUlQ5IHZwOworICAgIHZwLlggICAgICA9IHhvZmZz
ZXQ7CisgICAgdnAuWSAgICAgID0geW9mZnNldDsKKyAgICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0
LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0OworICAgIHZwLkhlaWdodCA9IHNvdXJjZVJlY3QuYm90
dG9tIC0gc291cmNlUmVjdC50b3A7CisgICAgdnAuTWluWiAgID0gMC4wZjsKKyAgICB2cC5NYXha
ICAgPSAxLjBmOworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsKKworICAgIGZsb2F0IGhh
bGZQaXhlbEFkanVzdFs0XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAw
IH07CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgaGFsZlBpeGVsQWRq
dXN0LCAxKTsKK30KKwordm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3RhdGUoKQoreworICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXRE
ZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEg
fCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwg
RDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOworCisgICAgZGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOworICAgIGRldmljZS0+
U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKKyAg
ICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFE
RFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQURE
UkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTKzE7IGkrKykKKyAgICB7CisgICAgICAgIGRldmljZS0+U2V0U3RyZWFt
U291cmNlRnJlcShpLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6cmVuZGVyKCkKK3sKKyAg
ICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5T
ZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQp
KTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNs
YXJhdGlvbik7CisKKyAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgaHIgPSBkZXZpY2Ut
PkRyYXdQcmltaXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7Cit9CisKK3ZvaWQgQmxp
dDo6c2F2ZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKKworICAgIEhSRVNVTFQgaHI7CisKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1
cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQo
MCwgJm1TYXZlZFJlbmRlclRhcmdldCk7CisKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBO
VUxMKQorICAgIHsKKyAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUo
KTsKKworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwg
MCwgMCB9OworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAg
ICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKyAg
ICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKKworICAgICAgICBEM0RWSUVX
UE9SVDkgZHVtbXlWcDsKKyAgICAgICAgZHVtbXlWcC5YID0gMDsKKyAgICAgICAgZHVtbXlWcC5Z
ID0gMDsKKyAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7CisgICAgICAgIGR1bW15VnAuSGVpZ2h0
ID0gMTsKKyAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsKKyAgICAgICAgZHVtbXlWcC5NYXhaID0g
MTsKKworICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKKworICAgICAgICBk
ZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7CisKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1T
b3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOworCisgICAgICAgIGRldmljZS0+U2V0
VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICAgICAgaHIg
PSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOworICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAh
PSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAg
ICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQorewor
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgZGV2aWNl
LT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAgaWYgKG1T
YXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVu
Y2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAg
fQorCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsK
KyAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2
ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKwor
ICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2ZWRT
dGF0ZUJsb2NrLT5BcHBseSgpOworICAgIH0KK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CbGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQmxpdC5jcHA6IFN1cmZhY2Ug
Y29weSB1dGlsaXR5IGNsYXNzLgorCisjaWZuZGVmIExJQkdMRVNWMl9CTElUX0hfCisjZGVmaW5l
IExJQkdMRVNWMl9CTElUX0hfCisKKyNpbmNsdWRlIDxtYXA+CisKKyNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBDb250ZXh0
OworCitjbGFzcyBCbGl0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBCbGl0KENvbnRleHQg
KmNvbnRleHQpOworICAgIH5CbGl0KCk7CisKKyAgICAvLyBDb3B5IGZyb20gc291cmNlIHN1cmZh
Y2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQg
YXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVwcGVyLWxlZnQpCisgICAgLy8gc291cmNl
IGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RGb3JtYXQgc3BlY2lmaWVzIHRoZSBkZXNp
cmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBpZiBkZXN0Rm9ybWF0ID0gR0xfUkdCLCB0
aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0byAwLgorICAgIGJvb2wgZm9ybWF0Q29u
dmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBH
TGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJveCBmaWx0ZXIgc2FtcGxlIGZyb20gc291
cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhhdCBzb3VyY2UgaXMgUkdCKEEpIGFuZCBk
ZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNlLgorICAgIGJvb2wgYm94RmlsdGVyKElE
aXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKKworICBw
cml2YXRlOgorICAgIENvbnRleHQgKm1Db250ZXh0OworCisgICAgSURpcmVjdDNEVmVydGV4QnVm
ZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7CisgICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245
ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOworCisgICAgdm9pZCBpbml0R2VvbWV0cnkoKTsKKwor
ICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQpOworCisg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKmNvcHlTdXJmYWNlVG9UZXh0dXJlKElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0KTsKKyAgICB2b2lkIHNldFZpZXdw
b3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQp
OworICAgIHZvaWQgc2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgUkVDVCBnZXRTdXJmYWNlUmVj
dChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3Q7CisKKyAgICAvLyBUaGlzIGVudW0g
aXMgdXNlZCB0byBpbmRleCBtQ29tcGlsZWRTaGFkZXJzIGFuZCBtU2hhZGVyU291cmNlLgorICAg
IGVudW0gU2hhZGVySWQKKyAgICB7CisgICAgICAgIFNIQURFUl9WU19TVEFOREFSRCwKKyAgICAg
ICAgU0hBREVSX1ZTX0ZMSVBZLAorICAgICAgICBTSEFERVJfUFNfUEFTU1RIUk9VR0gsCisgICAg
ICAgIFNIQURFUl9QU19MVU1JTkFOQ0UsCisgICAgICAgIFNIQURFUl9QU19DT01QT05FTlRNQVNL
LAorICAgICAgICBTSEFERVJfQ09VTlQKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIg
KiBjb25zdCBtU2hhZGVyU291cmNlW107CisKKyAgICAvLyBUaGlzIGFjdHVhbGx5IGNvbnRhaW5z
IElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxTaGFkZXI5IGNhc3RlZCB0
byBJVW5rbm93bi4KKyAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hhZGVyc1tTSEFERVJfQ09VTlRd
OworCisgICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+CisgICAgYm9vbCBzZXRTaGFk
ZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAg
ICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRlU2hhZGVyKShjb25z
dCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlICoqKSwKKyAgICAgICAgICAgICAgICAgICBIUkVTVUxU
IChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKTsK
KworICAgIGJvb2wgc2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcik7CisgICAgYm9vbCBz
ZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOworICAgIHZvaWQgcmVuZGVyKCk7CisKKyAg
ICB2b2lkIHNhdmVTdGF0ZSgpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlKCk7CisgICAgSURpcmVj
dDNEU3RhdGVCbG9jazkgKm1TYXZlZFN0YXRlQmxvY2s7CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
Km1TYXZlZFJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkRGVwdGhT
dGVuY2lsOworCisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJsaXQpOworfTsKK30KKwor
I2VuZGlmICAgLy8gTElCR0xFU1YyX0JMSVRfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJ1ZmZlci5jcHA6
IEltcGxlbWVudHMgdGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9m
IHZlcnRleCBhbmQvb3IKKy8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVj
dHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuOSBwYWdlIDIxLgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworQnVmZmVyOjpCdWZmZXIoKQoreworICAgIG1Db250ZW50cyA9IE5VTEw7
CisgICAgbVNpemUgPSAwOworICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKK30KKworQnVm
ZmVyOjp+QnVmZmVyKCkKK3sKKyAgICBkZWxldGVbXSBtQ29udGVudHM7Cit9CisKK3ZvaWQgQnVm
ZmVyOjpidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVt
IHVzYWdlKQoreworICAgIGlmIChzaXplID09IDApCisgICAgeworICAgICAgICBkZWxldGVbXSBt
Q29udGVudHM7CisgICAgICAgIG1Db250ZW50cyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYg
KHNpemUgIT0gbVNpemUpCisgICAgeworICAgICAgICBkZWxldGVbXSBtQ29udGVudHM7CisgICAg
ICAgIG1Db250ZW50cyA9IG5ldyBHTHVieXRlW3NpemVdOworICAgICAgICBtZW1zZXQobUNvbnRl
bnRzLCAwLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMICYmIHNpemUgPiAw
KQorICAgIHsKKyAgICAgICAgbWVtY3B5KG1Db250ZW50cywgZGF0YSwgc2l6ZSk7CisgICAgfQor
CisgICAgbVNpemUgPSBzaXplOworICAgIG1Vc2FnZSA9IHVzYWdlOworfQorCit2b2lkIEJ1ZmZl
cjo6YnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMaW50
cHRyIG9mZnNldCkKK3sKKyAgICBtZW1jcHkobUNvbnRlbnRzICsgb2Zmc2V0LCBkYXRhLCBzaXpl
KTsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyLmg6IERlZmluZXMgdGhlIGdsOjpCdWZmZXIgY2xh
c3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKKy8vIGluZGV4IGRhdGEu
IEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4K
Ky8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9CVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0JVRkZFUl9IXworCisjaW5jbHVk
ZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgQnVmZmVy
KCk7CisKKyAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShjb25z
dCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBi
dWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIg
b2Zmc2V0KTsKKworICAgIHZvaWQgKmRhdGEoKSB7IHJldHVybiBtQ29udGVudHM7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisgICAgR0xlbnVtIHVzYWdlKCkg
Y29uc3QgeyByZXR1cm4gbVVzYWdlOyB9CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oQnVmZmVyKTsKKworICAgIEdMdWJ5dGUgKm1Db250ZW50czsKKyAgICBzaXpl
X3QgbVNpemU7CisgICAgR0xlbnVtIG1Vc2FnZTsKK307CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX0JVRkZFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyOTkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBDb250ZXh0LmNwcDogSW1wbGVt
ZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVy
Zm9ybWluZworLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZp
YyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL0Nv
bnRleHQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgImxpYkVHTC9EaXNw
bGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9t
ZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9J
bmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oIgor
CisjdW5kZWYgbmVhcgorI3VuZGVmIGZhcgorCituYW1lc3BhY2UgZ2wKK3sKK0NvbnRleHQ6OkNv
bnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZykKKyAgICA6IG1Db25maWcoY29uZmlnKQor
eworICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICBtU3Rh
dGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKKyAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUg
PSAwOworCisgICAgbVN0YXRlLmN1bGxGYWNlID0gZmFsc2U7CisgICAgbVN0YXRlLmN1bGxNb2Rl
ID0gR0xfQkFDSzsKKyAgICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOworICAgIG1TdGF0ZS5k
ZXB0aFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuZGVwdGhGdW5jID0gR0xfTEVTUzsKKyAgICBt
U3RhdGUuYmxlbmQgPSBmYWxzZTsKKyAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7
CisgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7CisgICAgbVN0YXRlLmRlc3RC
bGVuZFJHQiA9IEdMX1pFUk87CisgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsK
KyAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOworICAgIG1TdGF0ZS5i
bGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKKyAgICBtU3RhdGUuYmxlbmRDb2xvci5y
ZWQgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsKKyAgICBtU3RhdGUuYmxl
bmRDb2xvci5ibHVlID0gMDsKKyAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7CisgICAg
bVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gR0xf
QUxXQVlTOworICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbE1h
c2sgPSAtMTsKKyAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOworICAgIG1TdGF0ZS5z
dGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0g
MDsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gLSAxOworICAgIG1TdGF0ZS5zdGVuY2ls
QmFja1dyaXRlbWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX0tFRVA7Cisg
ICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKKyAgICBtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwg
PSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9LRUVQ
OworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOworICAgIG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
RmFjdG9yID0gMC4wZjsKKyAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsKKyAg
ICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7CisgICAgbVN0YXRlLnNhbXBs
ZUNvdmVyYWdlID0gZmFsc2U7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBm
OworICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNlOworICAgIG1TdGF0ZS5z
Y2lzc29yVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOworICAgIG1TdGF0
ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7CisKKyAgICBtU3RhdGUubGluZVdp
ZHRoID0gMS4wZjsKKworICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOworICAgIG1TdGF0ZS52aWV3
cG9ydFkgPSAwOworICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1v
ZGUuV2lkdGg7CisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1v
ZGUuSGVpZ2h0OworICAgIG1TdGF0ZS56TmVhciA9IDAuMGY7CisgICAgbVN0YXRlLnpGYXIgPSAx
LjBmOworCisgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKKyAgICBtU3RhdGUuc2Npc3NvclkgPSAw
OworICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsK
KyAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsK
KworICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVlOworICAgIG1TdGF0ZS5jb2xvck1hc2tH
cmVlbiA9IHRydWU7CisgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOworICAgIG1TdGF0
ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7CisgICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7CisK
KyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKKyAgICAvLyBJ
biB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZl
IHR3b2RpbWVuc2lvbmFsCisgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9y
cyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgICAgLy8gSW4gb3JkZXIgdGhh
dCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUg
dHJlYXRlZCBhcyB0ZXh0dXJlCisgICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJl
IDAuCisKKyAgICBtVGV4dHVyZTJEWmVybyA9IG5ldyBUZXh0dXJlMkQodGhpcyk7CisgICAgbVRl
eHR1cmVDdWJlTWFwWmVybyA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0aGlzKTsKKworICAgIG1Db2xv
cmJ1ZmZlclplcm8gPSBOVUxMOworICAgIG1EZXB0aGJ1ZmZlclplcm8gPSBOVUxMOworICAgIG1T
dGVuY2lsYnVmZmVyWmVybyA9IE5VTEw7CisKKyAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7
CisgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyID0gMDsKKyAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7CisgICAgYmluZFRleHR1cmUyRCgw
KTsKKyAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKKwor
ICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKysp
CisgICAgeworICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsr
KQorICAgIHsKKyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXSA9IE5VTEw7CisgICAg
fQorCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKKworICAgIG1TdGF0ZS5wYWNrQWxp
Z25tZW50ID0gNDsKKyAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gNDsKKworICAgIG1CdWZm
ZXJCYWNrRW5kID0gTlVMTDsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1J
bmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBtQmxpdCA9IE5VTEw7CisKKyAgICBtSW52YWxp
ZEVudW0gPSBmYWxzZTsKKyAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7CisgICAgbUludmFsaWRP
cGVyYXRpb24gPSBmYWxzZTsKKyAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKKyAgICBtSW52YWxp
ZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICBtSGFzQmVlbkN1cnJlbnQgPSBm
YWxzZTsKKworICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOworICAgIG1hcmtBbGxT
dGF0ZURpcnR5KCk7Cit9CisKK0NvbnRleHQ6On5Db250ZXh0KCkKK3sKKyAgICBtU3RhdGUuY3Vy
cmVudFByb2dyYW0gPSAwOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVS
X1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdOworICAgIH0KKworICAgIGRlbGV0ZSBtVGV4dHVyZTJEWmVybzsKKyAgICBk
ZWxldGUgbVRleHR1cmVDdWJlTWFwWmVybzsKKworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJv
OworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJaZXJvOworICAgIGRlbGV0ZSBtU3RlbmNpbGJ1ZmZl
clplcm87CisKKyAgICBkZWxldGUgbUJ1ZmZlckJhY2tFbmQ7CisgICAgZGVsZXRlIG1WZXJ0ZXhE
YXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7CisgICAgZGVsZXRlIG1C
bGl0OworCisgICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBk
ZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hp
bGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUHJvZ3JhbSht
UHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtU2hhZGVy
TWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVTaGFkZXIobVNoYWRlck1hcC5iZWdp
bigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHko
KSkKKyAgICB7CisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdp
bigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtUmVuZGVyYnVmZmVyTWFwLmVtcHR5
KCkpCisgICAgeworICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5i
ZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtVGV4dHVyZU1hcC5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJz
dCk7CisgICAgfQorCisgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCisgICAgeworICAg
ICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdl
dERldmljZSgpOworCisgICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCisgICAgeworICAgICAgICBt
RGV2aWNlQ2FwcyA9IGRpc3BsYXktPmdldERldmljZUNhcHMoKTsKKworICAgICAgICBtQnVmZmVy
QmFja0VuZCA9IG5ldyBEeDlCYWNrRW5kKHRoaXMsIGRldmljZSk7CisgICAgICAgIG1WZXJ0ZXhE
YXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7
CisgICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcywg
bUJ1ZmZlckJhY2tFbmQpOworICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOworCisgICAg
ICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKKworICAgICAgICBtU3RhdGUudmlld3BvcnRYID0g
MDsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgICAgIG1TdGF0ZS52aWV3cG9y
dFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0SGVp
Z2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0g
MDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JX
aWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7CisgICAgICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0
ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAgICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBEaXJlY3QzRCA5IHJlc291cmNl
cyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFtZXMKKyAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRhcmdldCA9IHN1cmZhY2UtPmdldFJlbmRl
clRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBzdXJmYWNl
LT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8g
PSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0g
bmV3IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOworICAgIERlcHRoYnVmZmVyICpk
ZXB0aGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhidWZmZXIoZGVwdGhTdGVuY2lsKTsKKyAgICBTdGVu
Y2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBTdGVuY2lsYnVmZmVyKGRlcHRoU3Rl
bmNpbCk7CisKKyAgICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKKyAgICBz
ZXRDb2xvcmJ1ZmZlclplcm8oY29sb3JidWZmZXJaZXJvKTsKKyAgICBzZXREZXB0aGJ1ZmZlclpl
cm8oZGVwdGhidWZmZXJaZXJvKTsKKyAgICBzZXRTdGVuY2lsYnVmZmVyWmVybyhzdGVuY2lsYnVm
ZmVyWmVybyk7CisKKyAgICBmcmFtZWJ1ZmZlclplcm8tPnNldENvbG9yYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJvLT5zZXREZXB0aGJ1ZmZlcihHTF9SRU5E
RVJCVUZGRVIsIDApOworICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9S
RU5ERVJCVUZGRVIsIDApOworCisgICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwor
CisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVs
ZWFzZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJz
aW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCkpCisgICAgeworICAgICAgICBtUHNQcm9maWxlID0g
InBzXzNfMCI7CisgICAgICAgIG1Wc1Byb2ZpbGUgPSAidnNfM18wIjsKKyAgICB9CisgICAgZWxz
ZSAgLy8gZWdsOjpEaXNwbGF5IGd1YXJhbnRlZXMgc3VwcG9ydCBmb3IgYXQgbGVhc3QgMi4wCisg
ICAgeworICAgICAgICBtUHNQcm9maWxlID0gInBzXzJfMCI7CisgICAgICAgIG1Wc1Byb2ZpbGUg
PSAidnNfMl8wIjsKKyAgICB9CisKKyAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworfQorCisvLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFn
cywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lgordm9pZCBD
b250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7CisgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRT
ZXJpYWwgPSAwOworICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIG1BcHBs
aWVkUHJvZ3JhbSA9IDA7CisKKyAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQ3Vs
bFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1N
YXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7CisgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkg
PSB0cnVlOworICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVNhbXBsZVN0YXRl
RGlydHkgPSB0cnVlOworICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBD
b250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUs
IGZsb2F0IGFscGhhKQoreworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVkOwor
ICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsKKyAgICBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxw
aGEgPSBhbHBoYTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRo
KQoreworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0aDsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCit7CisgICAgbVN0YXRlLnN0ZW5jaWxD
bGVhclZhbHVlID0gc3RlbmNpbDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29s
IGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVkKQorICAgIHsK
KyAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKKyAgICAgICAgbUN1bGxTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVuYWJsZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCit7CisgICAgaWYgKG1TdGF0ZS5jdWxsTW9kZSAh
PSBtb2RlKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0gbW9kZTsKKyAgICAgICAg
bUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RnJv
bnRGYWNlKEdMZW51bSBmcm9udCkKK3sKKyAgICBpZiAobVN0YXRlLmZyb250RmFjZSAhPSBmcm9u
dCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9udDsKKyAgICAgICAgbUZy
b250RmFjZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhU
ZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCAhPSBlbmFibGVk
KQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7CisgICAgICAgIG1E
ZXB0aFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0RlcHRo
VGVzdEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuZGVwdGhUZXN0OworfQor
Cit2b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKQoreworICAgIGlm
IChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5k
ZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7CisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9h
dCB6RmFyKQoreworICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOworICAgIG1TdGF0ZS56RmFyID0g
ekZhcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmJsZW5k
ID0gZW5hYmxlZDsKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQor
Citib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLmJsZW5kOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291
cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFs
cGhhKQoreworICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gc291cmNlUkdCIHx8Cisg
ICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJjZUFscGhhIHx8CisgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAorICAgICAgICBtU3RhdGUuZGVzdEJs
ZW5kQWxwaGEgIT0gZGVzdEFscGhhKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gc291cmNlUkdCOworICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsK
KyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsKKyAgICAgICAg
bVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOworICAgICAgICBtQmxlbmRTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9h
dCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAo
bVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xv
ci5ncmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlICE9IGJs
dWUgfHwKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpCisgICAgewor
ICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7CisgICAgICAgIG1TdGF0ZS5ibGVu
ZENvbG9yLmdyZWVuID0gZ3JlZW47CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBi
bHVlOworICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IGFscGhhOworICAgICAgICBt
QmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0Qmxl
bmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQorewor
ICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fAorICAgICAg
ICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pCisgICAgeworICAg
ICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOworICAgICAgICBtU3Rh
dGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsKKyAgICAgICAgbUJsZW5kU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxUZXN0
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICE9IGVuYWJsZWQp
CisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOworICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc1N0
ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zdGVuY2lsVGVz
dDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVu
YywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKQoreworICAgIGlmIChtU3Rh
dGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxS
ZWYgIT0gc3RlbmNpbFJlZiB8fAorICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNp
bE1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2lsRnVuYzsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNpbFJl
ZiA6IDA7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrOworICAgICAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0Ojpz
ZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2ls
QmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5j
aWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01h
c2sgIT0gc3RlbmNpbEJhY2tNYXNrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
RnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0g
KHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7CisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7CisgICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0
ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVE
aXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3Jp
dGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKK3sKKyAgICBpZiAobVN0YXRlLnN0
ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNpbEJhY2tXcml0ZW1hc2s7Cisg
ICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCit7CisgICAgaWYg
KG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAorICAgICAgICBtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQorICAgIHsK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7CisgICAgICAgIG1TdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsOworICAgICAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKKyAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
Cit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3RlbmNpbEJhY2tGYWlsIHx8
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mg
IT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKKyAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsKKyAg
ICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUu
cG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7CisgICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0
eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOwor
Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3Rv
ciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3Ig
IT0gZmFjdG9yIHx8CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5pdHMp
CisgICAgeworICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IGZhY3RvcjsKKyAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOworICAgICAgICBtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRT
YW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc1NhbXBsZUFscGhhVG9Db3ZlcmFn
ZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVy
YWdlOworfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVuYWJsZWQpCisgICAgeworICAg
ICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOworICAgICAgICBtU2FtcGxlU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxlQ292ZXJh
Z2VFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOwor
fQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVl
LCBib29sIGludmVydCkKK3sKKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0g
dmFsdWUgfHwKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVydCkK
KyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gdmFsdWU7CisgICAg
ICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsKKyAgICAgICAgbVNhbXBs
ZVN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRTY2lzc29y
VGVzdChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFi
bGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsKKyAgICAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6
aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2Npc3Nv
clRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRp
dGhlciA9IGVuYWJsZWQ7CisgICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9
Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVN0YXRlLmRpdGhlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRMaW5lV2lkdGgoR0xmbG9h
dCB3aWR0aCkKK3sKKyAgICBtU3RhdGUubGluZVdpZHRoID0gd2lkdGg7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KQoreworICAgIG1TdGF0ZS5n
ZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OworfQorCit2b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0
UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4OworICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5Owor
ICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lkdGg7CisgICAgbVN0YXRlLnZpZXdwb3J0SGVp
Z2h0ID0gaGVpZ2h0OworfQorCit2b2lkIENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKG1T
dGF0ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5zY2lzc29yWSAhPSB5IHx8IAorICAgICAgICBt
U3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhl
aWdodCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IHg7CisgICAgICAgIG1TdGF0
ZS5zY2lzc29yWSA9IHk7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1TY2lzc29yU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIGlmICht
U3RhdGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3Jl
ZW4gfHwKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29s
b3JNYXNrQWxwaGEgIT0gYWxwaGEpCisgICAgeworICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVk
ID0gcmVkOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsKKyAgICAgICAg
bVN0YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxw
aGEgPSBhbHBoYTsKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJvb2wgbWFzaykKK3sKKyAgICBpZiAobVN0YXRl
LmRlcHRoTWFzayAhPSBtYXNrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1h
c2s7CisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENv
bnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2ZSkKK3sKKyAgICBtU3RhdGUuYWN0aXZl
U2FtcGxlciA9IGFjdGl2ZTsKK30KKworR0x1aW50IENvbnRleHQ6OmdldEZyYW1lYnVmZmVySGFu
ZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmZyYW1lYnVmZmVyOworfQorCitHTHVp
bnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN0YXRlLnJlbmRlcmJ1ZmZlcjsKK30KKworR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVy
SGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyOworfQorCit2
b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51
bSwgYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XS5tRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK2NvbnN0IEF0dHJpYnV0ZVN0YXRlICZDb250ZXh0
OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQoreworICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgR0x1aW50IGJv
dW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9p
ZCAqcG9pbnRlcikKK3sKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJv
dW5kQnVmZmVyID0gYm91bmRCdWZmZXI7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1TaXplID0gc2l6ZTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVR5cGUgPSB0eXBlOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
Tm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKK30KKworY29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7Cit9CisK
Ky8vIHJldHVybnMgZW50aXJlIHNldCBvZiBhdHRyaWJ1dGVzIGFzIGEgYmxvY2sKK2NvbnN0IEF0
dHJpYnV0ZVN0YXRlICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJCbG9jaygpCit7CisgICAgcmV0
dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UGFja0Fs
aWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSBh
bGlnbm1lbnQ7Cit9CisKK0dMaW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsKK30KKwordm9pZCBDb250ZXh0Ojpz
ZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQoreworICAgIG1TdGF0ZS51bnBhY2tB
bGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cit9CisKK0dMaW50IENvbnRleHQ6OmdldFVucGFja0FsaWdu
bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7Cit9CisK
Ky8vIFJldHVybnMgYW4gdW51c2VkIGJ1ZmZlciBuYW1lCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRl
QnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlICht
QnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAg
ICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbUJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKwor
ICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRlci9wcm9n
cmFtIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCit7Cisg
ICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobVNoYWRlck1hcC5maW5k
KGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQoKSB8fCBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkg
IT0gbVByb2dyYW1NYXAuZW5kKCkpICAgLy8gU2hhcmVkIG5hbWUgc3BhY2UKKyAgICB7CisgICAg
ICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIp
CisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRo
aXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRfU0hB
REVSKQorICAgIHsKKyAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50U2hh
ZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHByb2dyYW0vc2hhZGVy
IG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0g
bVByb2dyYW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1h
cC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7
CisgICAgfQorCisgICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQcm9ncmFtKCk7CisKKyAg
ICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCB0ZXh0dXJlIG5hbWUK
K0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFu
ZGxlID0gMTsKKworICAgIHdoaWxlIChtVGV4dHVyZU1hcC5maW5kKGhhbmRsZSkgIT0gbVRleHR1
cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtVGV4
dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJl
dHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGls
ZSAobUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkp
CisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtRnJhbWVidWZmZXJNYXBb
aGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIGFu
IHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobVJl
bmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSkgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1SZW5kZXJidWZmZXJNYXBbaGFu
ZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit2b2lkIENvbnRleHQ6OmRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVm
ZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7CisKKyAgICBpZiAoYnVmZmVyT2Jq
ZWN0ICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hCdWZmZXIoYnVm
ZmVyKTsKKworICAgICAgICBkZWxldGUgYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1C
dWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAgU2hhZGVyTWFwOjppdGVyYXRvciBz
aGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChzaGFkZXJP
YmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlmICghc2hhZGVyT2Jq
ZWN0LT5zZWNvbmQtPmlzQXR0YWNoZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRl
IHNoYWRlck9iamVjdC0+c2Vjb25kOworICAgICAgICAgICAgbVNoYWRlck1hcC5lcmFzZShzaGFk
ZXJPYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7
CisgICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZp
bmQocHJvZ3JhbSk7CisKKyAgICBpZiAocHJvZ3JhbU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGlmIChwcm9ncmFtICE9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkK
KyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1PYmplY3QtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1PYmplY3QpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25k
LT5mbGFnRm9yRGVsZXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRleHR1cmVNYXA6Oml0ZXJh
dG9yIHRleHR1cmVPYmplY3QgPSBtVGV4dHVyZU1hcC5maW5kKHRleHR1cmUpOworCisgICAgaWYg
KHRleHR1cmVPYmplY3QgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRh
Y2hUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0dXJlICE9IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIH0K
KworICAgICAgICBtVGV4dHVyZU1hcC5lcmFzZSh0ZXh0dXJlT2JqZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQorewor
ICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1
ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCAh
PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgZGVsZXRlIGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNv
bmQ7CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFzZShmcmFtZWJ1ZmZlck9iamVjdCk7Cisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVy
YnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKHJlbmRlcmJ1ZmZlcik7CisKKyAgICBpZiAocmVu
ZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAg
ICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgcmVu
ZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1SZW5kZXJidWZmZXJNYXAuZXJhc2Uo
cmVuZGVyYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEFycmF5
QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZlciAhPSAwICYmICFn
ZXRCdWZmZXIoYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5l
dyBCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSBidWZmZXI7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVm
ZmVyKQoreworICAgIGlmIChidWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVyKGJ1ZmZlcikpCisgICAg
eworICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBuZXcgQnVmZmVyKCk7CisgICAgfQorCisg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQoreworICAgIGlmICghZ2V0VGV4dHVyZSh0
ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCisgICAgeworICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0
dXJlXSA9IG5ldyBUZXh0dXJlMkQodGhpcyk7CisgICAgfQorCisgICAgbVN0YXRlLnRleHR1cmUy
RCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0
YXRlLmFjdGl2ZVNhbXBsZXJdID0gdGV4dHVyZTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4
dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1
cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVd
ID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAgIH0KKworICAgIG1TdGF0ZS50ZXh0dXJl
Q3ViZU1hcCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9D
VUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFnZXRGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCisgICAgeworICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJh
bWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7CisgICAgfQorCisgICAgbVN0YXRlLmZyYW1l
YnVmZmVyID0gZnJhbWVidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZl
cihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAmJiAh
Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisgICAgeworICAgICAgICBtUmVuZGVyYnVm
ZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSBuZXcgUmVuZGVyYnVmZmVyKCk7CisgICAgfQorCisgICAg
bVN0YXRlLnJlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0Ojp1
c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbTsKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAg
ICAgICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhl
cndpc2UgaXQgb25seSBnZXRzIGZsYWdnZWQuCisKKyAgICBpZiAocHJvZ3JhbU9iamVjdCAmJiBw
cm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlUHJvZ3JhbShwcmlvclByb2dyYW0pOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRG
cmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKK3sKKyAgICBkZWxldGUgbUZyYW1l
YnVmZmVyTWFwWzBdOworICAgIG1GcmFtZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsKK30KKwordm9p
ZCBDb250ZXh0OjpzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3JidWZmZXIgKmJ1ZmZlcikKK3sKKyAg
ICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKKyAgICBtQ29sb3JidWZmZXJaZXJvID0gYnVmZmVy
OworfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoYnVmZmVyWmVybyhEZXB0aGJ1ZmZlciAqYnVm
ZmVyKQoreworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJaZXJvOworICAgIG1EZXB0aGJ1ZmZlclpl
cm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbGJ1ZmZlclplcm8oU3Rl
bmNpbGJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtU3RlbmNpbGJ1ZmZlclplcm87Cisg
ICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldFJl
bmRlcmJ1ZmZlcihSZW5kZXJidWZmZXIgKmJ1ZmZlcikKK3sKKyAgICBkZWxldGUgbVJlbmRlcmJ1
ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXTsKKyAgICBtUmVuZGVyYnVmZmVyTWFwW21TdGF0
ZS5yZW5kZXJidWZmZXJdID0gYnVmZmVyOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZl
cih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVy
ID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJN
YXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOworICAgIH0KK30KKworU2hhZGVy
ICpDb250ZXh0OjpnZXRTaGFkZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBTaGFkZXJN
YXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYg
KHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzaGFkZXItPnNlY29uZDsK
KyAgICB9Cit9CisKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhh
bmRsZSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtID0gbVByb2dyYW1NYXAu
ZmluZChoYW5kbGUpOworCisgICAgaWYgKHByb2dyYW0gPT0gbVByb2dyYW1NYXAuZW5kKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByb2dyYW0tPnNlY29uZDsKKyAgICB9Cit9CisKK1RleHR1cmUgKkNvbnRleHQ6
OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlID09IDAp
IHJldHVybiBOVUxMOworCisgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZSA9IG1UZXh0
dXJlTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmICh0ZXh0dXJlID09IG1UZXh0dXJlTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7CisgICAgfQorfQorCitGcmFtZWJ1ZmZl
ciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBG
cmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmlu
ZChoYW5kbGUpOworCisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1JlbmRlcmJ1
ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit7Cisg
ICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVy
TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZl
ck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyYnVmZmVyLT5zZWNvbmQ7CisgICAgfQorfQor
CitDb2xvcmJ1ZmZlciAqQ29udGV4dDo6Z2V0Q29sb3JidWZmZXIoR0x1aW50IGhhbmRsZSkKK3sK
KyAgICBpZiAoaGFuZGxlICE9IDApCisgICAgeworICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRl
cmJ1ZmZlciA9IGdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworCisgICAgICAgIGlmIChyZW5kZXJi
dWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8g
ZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRhcmdldHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQg
dHlwZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclplcm87CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK0RlcHRoYnVmZmVyICpDb250ZXh0OjpnZXREZXB0aGJ1ZmZl
cihHTHVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAg
IFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisK
KyAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzRGVwdGhidWZmZXIo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERlcHRoYnVmZmVy
Kj4ocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gU3BlY2lh
bCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNl
ZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbURlcHRoYnVm
ZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworU3RlbmNpbGJ1ZmZlciAq
Q29udGV4dDo6Z2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5k
bGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0
UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5k
ZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyWmVy
bzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRB
cnJheUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEJ1ZmZlcihtU3RhdGUuYXJyYXlCdWZmZXIp
OworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCit7CisgICAg
cmV0dXJuIGdldEJ1ZmZlcihtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKTsKK30KKworUHJvZ3Jh
bSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQoreworICAgIHJldHVybiBnZXRQcm9ncmFt
KG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Cit9CisKK1RleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4
dHVyZTJEKCkKK3sKKyAgICBpZiAobVN0YXRlLnRleHR1cmUyRCA9PSAwKSAgIC8vIFNwZWNpYWwg
Y2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhl
IHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlMkRaZXJvOworICAgIH0KKwor
ICAgIHJldHVybiAoVGV4dHVyZTJEKilnZXRUZXh0dXJlKG1TdGF0ZS50ZXh0dXJlMkQpOworfQor
CitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQoreworICAgIGlm
IChtU3RhdGUudGV4dHVyZUN1YmVNYXAgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJz
IHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKKyAgICB7
CisgICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgIH0KKworICAgIHJldHVy
biAoVGV4dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmVDdWJlTWFwKTsKK30K
KworVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBs
ZXIsIFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgR0x1aW50IHRleGlkID0gbVN0YXRlLnNhbXBs
ZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdOworCisgICAgaWYgKHRleGlkID09IDApCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgIGNhc2UgU0FNUExFUl8yRDogcmV0dXJuIG1UZXh0dXJlMkRa
ZXJvOworICAgICAgICAgIGNhc2UgU0FNUExFUl9DVUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFw
WmVybzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBnZXRUZXh0dXJlKHRleGlkKTsK
K30KKworRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKCkKK3sKKyAgICByZXR1
cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLmZyYW1lYnVmZmVyKTsKK30KKworYm9vbCBDb250ZXh0
OjpnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKQoreworICAgIHN3
aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAg
ICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZUludmVydDsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJ
VEVNQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6CisgICAgICAgIHBhcmFt
c1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5j
b2xvck1hc2tHcmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yTWFza0JsdWU7
CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5jdWxsRmFjZTsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAq
cGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOworICAgICAgY2FzZSBHTF9TQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0U6ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdl
OworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9U
RVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0OworICAgICAgY2Fz
ZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhUZXN0
OworICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuYmxlbmQ7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kaXRoZXI7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0RmxvYXR2
KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQoreworICAgIC8vIFBsZWFzZSBub3RlOiBE
RVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGlt
cGxlbWVudGF0aW9uCisgICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcworICAgIC8vIEdldElu
dGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUg
Y29udmVyc2lvbiBpbiBhbnkKKyAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZl
cmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCisgICAgc3dpdGNoIChwbmFtZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5saW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
OyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FM
SUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURf
TElORV9XSURUSF9SQU5HRV9NSU47CisgICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0VfTUFYOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9SQU5H
RToKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFyOworICAgICAgICBwYXJhbXNbMV0g
PSBtU3RhdGUuekZhcjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFS
X1ZBTFVFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZDsK
KyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbjsKKyAgICAg
ICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlOworICAgICAgICBwYXJh
bXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVu
ZENvbG9yLnJlZDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW47
CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7CisgICAgICAgIHBh
cmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhOworICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMpCit7CisgICAgLy8gUGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBp
bmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50YXRpb24KKyAgICAv
LyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQg
dGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCisgICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2
ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQor
ICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGlu
ZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGluIAorICAgIC8vIENvbnRleHQ6OmdldEZs
b2F0di4KKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRF
WF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
OyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1f
VkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJh
bXMgPSBnbDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGJyZWFrOworICAgICAg
Y2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IGdsOjpN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBnbDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1f
VkVDVE9SUzsgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkU6
ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU7ICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAg
ICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgICpwYXJhbXMg
PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogLyogbm8gY29tcHJlc3NlZCB0ZXh0dXJl
IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NIQURF
Ul9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1
cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJ
TkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXI7ICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXI7ICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUucmVuZGVyYnVmZmVyOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJ
R05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDog
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrQWxpZ25tZW50OyAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2ls
UmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVkFM
VUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoRmFpbDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19E
RVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
OyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVw
dGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9T
UkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRF
cXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dS
SVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNr
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1B
U0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX1NJWkU7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVS
UzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOiAg
ICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9
IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbWF4RGlt
ZW5zaW9uID0gc3RkOjptYXgoKGludClnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAoaW50KWds
OjpNQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lv
bjsKKyAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lvbjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0ZS52aWV3cG9ydFg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7
CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3cG9ydFdpZHRoOworICAgICAgICBwYXJh
bXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX0JPWDoKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnNjaXNzb3JYOwor
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nvclk7CisgICAgICAgIHBhcmFtc1syXSA9
IG1TdGF0ZS5zY2lzc29yV2lkdGg7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5zY2lzc29y
SGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUkVEX0JJVFM6CisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6CisgICAgICBjYXNl
IEdMX0JMVUVfQklUUzoKKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7
CisgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAgKnBhcmFtcyA9IGNvbG9y
YnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAqcGFyYW1zID0gY29sb3Ji
dWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
QUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRBbHBoYVNpemUoKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJh
bWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGRlcHRoYnVm
ZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBkZXB0aGJ1ZmZl
ci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKKyAg
ICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZy
YW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChz
dGVuY2lsYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBz
dGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhU
VVJFX0JJTkRJTkdfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZl
U2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FN
UExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNh
bXBsZXIgPiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgLSAxKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxl
cl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNp
Z25lZCBpbnQgKm51bVBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIHF1ZXJ5IHR5
cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGluIHRoaXMgaW1wbGVtZW50YXRpb24K
KyAgICAvLyBpcyBGTE9BVCByYXRoZXIgdGhhbiBJTlQsIGFzIHdvdWxkIGJlIHN1Z2dlc3RlZCBi
eSB0aGUgR0wgRVMgMi4wIHNwZWMuIFRoaXMgaXMgZHVlCisgICAgLy8gdG8gdGhlIGZhY3QgdGhh
dCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZsb2F0LCBhbmQgc28gd291bGQgcmVxdWly
ZSBjb252ZXJzaW9uCisgICAgLy8gaWYgcmV0dXJuZWQgZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vy
di4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVhZHkgaW1wbGVtZW50ZWQgCisgICAgLy8g
aW4gdGhlIGNhc2UgdGhhdCBvbmUgY2FsbHMgZ2xHZXRJbnRlZ2VydiB0byByZXRyaWV2ZSBhIGZs
b2F0LXR5cGVkIHN0YXRlIHZhcmlhYmxlLCB3ZQorICAgIC8vIHBsYWNlIERFUFRIX0NMRUFSX1ZB
TFVFIHdpdGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRo
ZSBjYWxsaW5nCisgICAgLy8gYXBwbGljYXRpb24uCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAvKiBubyBjb21wcmVz
c2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovIAorICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6
CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAg
Y2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTOgorICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgICBj
YXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICBjYXNlIEdMX05VTV9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1JF
TkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06CisgICAg
ICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5U
OgorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICAgIGNhc2UgR0xfUkVE
X0JJVFM6CisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6CisgICAgICBjYXNlIEdMX0JMVUVfQklU
UzoKKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKKyAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgorICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToKKyAgICAgIGNh
c2UgR0xfRlJPTlRfRkFDRToKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6CisgICAgICBj
YXNlIEdMX1NURU5DSUxfRlVOQzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOgor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOgor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX1BBU1M6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOgor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1JFRjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6CisgICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6CisgICAg
ICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToK
KyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FM
UEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6CisgICAgICBjYXNlIEdMX0JM
RU5EX0VRVUFUSU9OX0FMUEhBOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzoKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9DTEVBUl9WQUxVRToKKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzoKKyAgICAgIGNhc2Ug
R0xfTUFYX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRToKKyAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6CisgICAgICBjYXNlIEdMX1NBTVBM
RVM6CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAg
IGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVf
TUFQOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9NQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgor
ICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TSEFE
RVJfQ09NUElMRVI6CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAg
ICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAg
ICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNF
bmFibGVkLAorICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBj
YW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIEdldHtUeXBlfXYgcXVlcmllcy4KKyAgICAgIGNh
c2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5
IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFsCisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRToKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOgorICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6CisgICAgICBjYXNlIEdMX0JMRU5E
OgorICAgICAgY2FzZSBHTF9ESVRIRVI6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0g
R0xfQk9PTDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6CisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNU
T1I6CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOgorICAgICAgY2FzZSBHTF9T
QU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOgor
ICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAg
IGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgY2FzZSBHTF9ERVBUSF9S
QU5HRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CisgICAg
ICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gNDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQXBw
bGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZp
ZXdwb3J0IHJlY3RhbmdsZSBhbmQKKy8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3Qz
RCA5IGRldmljZQorYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZp
ZXdwb3J0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsK
KworICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgZXJy
b3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJh
bWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVuY2lsKCk7CisK
KyAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0g
bUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXQpOworICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdl
dFNlcmlhbCA9IHJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQg
ZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJTZXJp
YWwoKTsKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNl
cmlhbCkKKyAgICB7CisgICAgICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0
aFN0ZW5jaWwpOworICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZm
ZXJTZXJpYWw7CisgICAgfQorCisgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0OworICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAg
ICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAgICAgICB2aWV3cG9ydC5YID0gMDsKKyAg
ICAgICAgdmlld3BvcnQuWSA9IDA7CisgICAgICAgIHZpZXdwb3J0LldpZHRoID0gZGVzYy5XaWR0
aDsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgIHZpZXdw
b3J0Lk1pblogPSAwLjBmOworICAgICAgICB2aWV3cG9ydC5NYXhaID0gMS4wZjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlld3BvcnQuWCA9IHN0ZDo6bWF4KG1TdGF0ZS52aWV3
cG9ydFgsIDApOworICAgICAgICB2aWV3cG9ydC5ZID0gc3RkOjptYXgobVN0YXRlLnZpZXdwb3J0
WSwgMCk7CisgICAgICAgIHZpZXdwb3J0LldpZHRoID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0
V2lkdGgsIChpbnQpZGVzYy5XaWR0aCAtIChpbnQpdmlld3BvcnQuWCk7CisgICAgICAgIHZpZXdw
b3J0LkhlaWdodCA9IHN0ZDo6bWluKG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgKGludClkZXNjLkhl
aWdodCAtIChpbnQpdmlld3BvcnQuWSk7CisgICAgICAgIHZpZXdwb3J0Lk1pblogPSBjbGFtcDAx
KG1TdGF0ZS56TmVhcik7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSBjbGFtcDAxKG1TdGF0ZS56
RmFyKTsKKyAgICB9CisKKyAgICBpZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5I
ZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRv
IHJlbmRlcgorICAgIH0KKworICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKKwor
ICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnNj
aXNzb3JUZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHJlY3QgPSB7bVN0YXRlLnNj
aXNzb3JYLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lz
c29ySGVpZ2h0fTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5B
QkxFLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNF
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICB7CisgICAg
ICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAg
ICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNp
emVMb2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5X
aWR0aCwgMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNl
dFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgKEdMZmxvYXQqKSZ4eSk7CisKKyAgICAgICAg
R0xpbnQgd2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhXaW5kb3dMb2NhdGlvbigpOworICAg
ICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZs
b2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52
aWV3cG9ydEhlaWdodCAvIDIuMGZ9OworICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3Jt
NGZ2KHdpbmRvdywgMSwgKEdMZmxvYXQqKSZ3aHh5KTsKKworICAgICAgICBHTGludCBkZXB0aCA9
IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhMb2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IGR6
WzJdID0geyhtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcikgLyAyLjBmLCAobVN0YXRlLnpOZWFy
ICsgbVN0YXRlLnpGYXIpIC8gMi4wZn07CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZv
cm0yZnYoZGVwdGgsIDEsIChHTGZsb2F0KikmZHopOworCisgICAgICAgIEdMaW50IG5lYXIgPSBw
cm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCk7CisgICAgICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0xZnYobmVhciwgMSwgJm1TdGF0ZS56TmVhcik7CisKKyAgICAg
ICAgR0xpbnQgZmFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCk7
CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYoZmFyLCAxLCAmbVN0YXRlLnpG
YXIpOworCisgICAgICAgIEdMaW50IGRpZmYgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdl
RGlmZkxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgekRpZmYgPSBtU3RhdGUuekZhciAtIG1T
dGF0ZS56TmVhcjsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihkaWZmLCAx
LCAmekRpZmYpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBcHBsaWVzIHRo
ZSBmaXhlZC1mdW5jdGlvbiBzdGF0ZSAoY3VsbGluZywgZGVwdGggdGVzdCwgYWxwaGEgYmxlbmRp
bmcsIHN0ZW5jaWxpbmcsIGV0YykgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIENvbnRl
eHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQoreworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRD
dXJyZW50UHJvZ3JhbSgpOworCisgICAgR0xpbnQgZnJvbnRDQ1cgPSBwcm9ncmFtT2JqZWN0LT5n
ZXREeEZyb250Q0NXTG9jYXRpb24oKTsKKyAgICBHTGludCBjY3cgPSAobVN0YXRlLmZyb250RmFj
ZSA9PSBHTF9DQ1cpOworICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYoZnJvbnRDQ1cs
IDEsICZjY3cpOworCisgICAgR0xpbnQgcG9pbnRzT3JMaW5lcyA9IHByb2dyYW1PYmplY3QtPmdl
dER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7CisgICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNU
cmlhbmdsZU1vZGUoZHJhd01vZGUpOworICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYo
cG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKKworICAgIGlmIChtQ3VsbFN0YXRlRGly
dHkgfHwgbUZyb250RmFjZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFj
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
VUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIG1TdGF0ZS5m
cm9udEZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7
CisgICAgICAgIH0KKworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuZGVw
dGhUZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRlVOQywgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5kZXB0aEZ1
bmMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOworICAgICAg
ICB9CisKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlm
IChtQmxlbmRTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5ibGVuZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJM
RU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xfT05F
X01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAgICAgICAgICAgbVN0YXRlLmRlc3RCbGVu
ZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBlczJkeDo6Q29udmVydENv
bG9yKG1TdGF0ZS5ibGVuZENvbG9yKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xv
ci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSkpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNC
TEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgZXMyZHg6
OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZFJHQikpOworICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3Ao
bVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKKworICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3Vy
Y2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCAKKyAgICAgICAgICAgICAg
ICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCAKKyAgICAg
ICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZXMyZHg6
OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKKyAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsKKyAgICAgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZl
cnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpKTsKKworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKKyAgICB7
CisgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgJiYgaGFzU3RlbmNpbCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFC
TEUsIFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09T
SURFRFNURU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9y
dGVkIGJ5IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19D
Q1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7CisgICAgICAgICAgICBjb25zdCBEM0RS
RU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7
CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxX
UklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOworICAgICAgICAgICAgaWYgKG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKKyAg
ICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYg
fHwgCisgICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2ls
QmFja01hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBm
cm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNp
bCBtYXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKKyAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigp
OworICAgICAgICAgICAgZ2w6OlN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwg
PSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7CisKKyAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBE
M0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0ND
V19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4
OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKKworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwg
KEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
Q1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0
ZW5jaWxNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUu
ZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5D
SUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZl
cnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpG
QUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNT
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzKSk7CisKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5D
SUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxC
YWNrV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5D
SUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZl
cnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKKworICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RF
TkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwg
KEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRl
LnN0ZW5jaWxCYWNrTWFzayk7CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NX
X1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aEZhaWwpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NX
X1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIH0KKworICAg
ICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobU1hc2tT
dGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19D
T0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNr
UmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0
ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKKyAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBU
UlVFIDogRkFMU0UpOworCisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0K
KworICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAo
bVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RGVw
dGhidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKS0+Z2V0RGVwdGhidWZmZXIo
KTsKKyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMs
ICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzLCAtKGlu
dCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFzKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMs
IDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMs
IDApOworICAgICAgICB9CisKKyAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKG1Db25maWctPm1NdWx0aVNhbXBsZSAhPSAwICYmIG1TYW1w
bGVTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292
ZXJhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292
ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUg
Y292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1EaXRoZXJTdGF0ZURpcnR5
KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFC
TEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOworCisgICAgICAgIG1EaXRoZXJTdGF0
ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgbUZyb250RmFjZURpcnR5ID0gZmFsc2U7Cit9
CisKKy8vIEZpbGwgaW4gdGhlIHNlbWFudGljSW5kZXggZmllbGQgb2YgdGhlIGFycmF5IG9mIFRy
YW5zbGF0ZWRBdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBhY3RpdmUgR0xTTCBwcm9ncmFtLgordm9p
ZCBDb250ZXh0Ojpsb29rdXBBdHRyaWJ1dGVNYXBwaW5nKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0
dHJpYnV0ZXMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleCA9IGdldEN1cnJlbnRQ
cm9ncmFtKCktPmdldFNlbWFudGljSW5kZXgoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0dM
ZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJU
RVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVS
ZW5kZXJWYWxpZGF0ZShmaXJzdCwgY291bnQsIHRyYW5zbGF0ZWQpOworICAgIGlmIChlcnIgIT0g
R0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGxv
b2t1cEF0dHJpYnV0ZU1hcHBpbmcodHJhbnNsYXRlZCk7CisKKyAgICBtQnVmZmVyQmFja0VuZC0+
c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xhdGVkKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAodHJhbnNs
YXRlZFtpXS5lbmFibGVkICYmIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZVVuaW5k
ZXhlZChtb2RlLCBjb3VudCwgaW5kZXhJbmZvKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbUJ1ZmZlckJhY2tFbmQtPnNldHVwSW5kaWNlc1By
ZURyYXcoKmluZGV4SW5mbyk7CisKKyAgICAgICAgICAgICp1c2VJbmRleGluZyA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAq
dXNlSW5kZXhpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK0dMZW51
bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZp
bmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJU
RVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVS
ZW5kZXJWYWxpZGF0ZShpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRl
eEluZm8ubWluSW5kZXgrMSwgdHJhbnNsYXRlZCk7CisKKyAgICBpZiAoZXJyID09IEdMX05PX0VS
Uk9SKQorICAgIHsKKyAgICAgICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsK
KworICAgICAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xh
dGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQorCisvLyBBcHBsaWVzIHRoZSBpbmRp
Y2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQor
R0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICppbmRleEluZm8pCit7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVS
ZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwgZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIpLCBpbmRpY2VzLCBpbmRleEluZm8pOworCisgICAgaWYgKGVyciA9PSBHTF9O
T19FUlJPUikKKyAgICB7CisgICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEluZGljZXNQcmVE
cmF3KCppbmRleEluZm8pOworICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKKy8vIEFwcGxp
ZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2
aWNlCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dEN1cnJlbnRQcm9ncmFtKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hh
ZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdldFBpeGVsU2hhZGVyKCk7
CisKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIGRldmlj
ZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworCisgICAgaWYgKHByb2dyYW1PYmplY3Qt
PmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHByb2dyYW1P
YmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlB
bGxTYW1wbGVycygpOworICAgICAgICBtQXBwbGllZFByb2dyYW0gPSBwcm9ncmFtT2JqZWN0LT5n
ZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICBwcm9ncmFtT2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7
Cit9CisKKy8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCit7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBmb3IgKGludCBzYW1wbGVy
ID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCisgICAg
eworICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0LT5nZXRTYW1wbGVyTWFw
cGluZyhzYW1wbGVyKTsKKyAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICBTYW1wbGVyVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1PYmplY3QtPmdl
dFNhbXBsZXJUeXBlKHNhbXBsZXIpOworCisgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0g
Z2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKKworICAgICAgICAg
ICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNhbXBsZXIpIHx8IHRleHR1cmUt
PmlzRGlydHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNDb21wbGV0ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKKyAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOworICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gbWFnRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9B
RERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOworICAgICAgICAgICAg
ICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NW
LCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVz
MmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1hZ0ZpbHRlcikpOworICAgICAgICAgICAgICAgICAgICBE
M0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKKyAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmls
dGVyLCAmZDNkTWlwRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CisgICAg
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNhbXBsZXIsIEQzRFNBTVBf
TUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworCisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+
U2V0VGV4dHVyZShzYW1wbGVyLCB0ZXh0dXJlLT5nZXRUZXh0dXJlKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1
cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0U2FtcGxlckRpcnR5KHNh
bXBsZXIsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5pc1NhbXBsZXJEaXJ0eShzYW1wbGVyKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlciwgTlVM
TCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0U2FtcGxlckRpcnR5KHNhbXBs
ZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgIAorICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKQor
eworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyLT5nZXRSZW5kZXJU
YXJnZXQoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKwor
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVz
Yyk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZTsKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgs
IGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJm
YWNlLCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05F
KQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJlcyBy
ZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIgdGFy
Z2V0CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJl
bmRlclRhcmdldCwgc3lzdGVtU3VyZmFjZSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgc3dpdGNo
IChyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRDNERVJSX0RSSVZFUklOVEVS
TkFMRVJST1I6CisgICAgICAgICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKKyAgICAgICAgfQorICAgIH0K
KworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7CisgICAgUkVDVCByZWN0ID0ge3N0ZDo6bWF4KHgs
IDApLAorICAgICAgICAgICAgICAgICBzdGQ6Om1heCh5LCAwKSwKKyAgICAgICAgICAgICAgICAg
c3RkOjptaW4oeCArIHdpZHRoLCAoaW50KWRlc2MuV2lkdGgpLAorICAgICAgICAgICAgICAgICBz
dGQ6Om1pbih5ICsgaGVpZ2h0LCAoaW50KWRlc2MuSGVpZ2h0KX07CisKKyAgICByZXN1bHQgPSBz
eXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwor
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgIHJldHVybjsgICAv
LyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgIH0KKworICAgIHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOworICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOworICAgIHVuc2lnbmVkIHNob3J0ICpk
ZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKKworICAgIEdMc2l6ZWkgb3V0cHV0UGl0
Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlwZSwgbVN0YXRlLnBhY2tBbGlnbm1l
bnQpOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBq
KyspCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0
LmxlZnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgcjsKKyAgICAgICAgICAg
IGZsb2F0IGc7CisgICAgICAgICAgICBmbG9hdCBiOworICAgICAgICAgICAgZmxvYXQgYTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAxLjBm
OworICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgw
N0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAw
eEY4MDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4cmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNv
dXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEg
PSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMUYpICogKDEuMGYg
LyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAzRTApICogKDEu
MGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDdDMDApICog
KDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBz
aG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAg
ICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4wZjsKKyAgICAgICAgICAgICAg
ICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKKyAgICAgICAgICAg
ICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBmIC8gMHgwM0UwKTsKKyAgICAgICAg
ICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBmIC8gMHg3QzAwKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAq
IGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAw
MDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdi
ICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOworICAgICAgICAgICAgICAgICAg
ICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7CisgICAgICAg
ICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAw
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQg
KiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwor
ICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgw
MDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICog
KDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgw
MEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJn
YiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogbG9jay5QaXRjaCk7CisK
KyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4
QzAwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAq
ICgxLjBmIC8gMHgwMDAwMDNGRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4
MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9
IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41
Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAx
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUCisg
ICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6ICAgLy8gSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9UWVBFCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91
dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYp
IDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3Qo
KTsKKworICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKK30KKwordm9pZCBDb250ZXh0Ojpj
bGVhcihHTGJpdGZpZWxkIG1hc2spCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2Jq
ZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwg
ZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2
aWNlKCk7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworCisgICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfQ09MT1JfQlVGRkVSX0JJVDsK
KworICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9
IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1RBUkdF
VDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJ
VCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAg
IGlmIChtU3RhdGUuZGVwdGhNYXNrICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZl
clR5cGUoKSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RD
TEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgfQorCisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKTsKKwor
ICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7CisKKyAgICBpZiAoKG1hc2sgJiBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpICYmIGRlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwor
CisgICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxTaXplID0gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsK
KyAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOworCisg
ICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQorICAgICAgICB7CisgICAgICAgICAg
ICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1hc2sgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENsaXBz
IHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEM0RDT0xPUiBjb2xvciA9IEQz
RENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUu
Y29sb3JDbGVhclZhbHVlLnJlZCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUu
ZGVwdGhDbGVhclZhbHVlKTsKKyAgICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJW
YWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworCisgICAgRDNEU1VSRkFD
RV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKKworICAgIGJv
b2wgYWxwaGFVbm1hc2tlZCA9IChlczJkeDo6R2V0QWxwaGFTaXplKGRlc2MuRm9ybWF0KSA9PSAw
KSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGE7CisKKyAgICBjb25zdCBib29sIG5lZWRNYXNrZWRT
dGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0
ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOworICAgIGNvbnN0IGJvb2wgbmVlZE1h
c2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2VkKTsKKworICAgIGlmIChu
ZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyKQorICAgIHsKKyAg
ICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBv
aW50IHRvIHRoZSBjbGVhciBjYWxsIGlzIHNhdmVkLgorICAgICAgICAvLyBTdGF0ZSB3aGljaCBp
cyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhl
IGNhc2UgdGhhdAorICAgICAgICAvLyAgdGhhdCBwYXRoIGlzIHRha2VuLgorICAgICAgICBIUkVT
VUxUIGhyOworICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQorICAg
ICAgICB7CisgICAgICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUp
OworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNE
RklMTF9TT0xJRCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FM
UEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CisgICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAgICAgICAgZGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKDAsIDEpOworCisgICAgICAgICAgICBociA9IGRldmljZS0+RW5kU3Rh
dGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09V
VE9GTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlICE9IE5VTEwpOworCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZS0+Q2FwdHVyZSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAg
ICB9CisKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUs
IEZBTFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNE
Q01QX0FMV0FZUyk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RF
LCBEM0RDVUxMX05PTkUpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJ
TExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKworICAgICAgICBpZiAoZmxh
Z3MgJiBEM0RDTEVBUl9UQVJHRVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgKG1TdGF0ZS5jb2xvck1hc2tSZWQg
ICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3RhdGUuY29sb3JNYXNr
R3JlZW4gPyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLmNvbG9y
TWFza0JsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5j
b2xvck1hc2tBbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgOiAwKSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVGLCBzdGVuY2lsKTsKKyAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywg
bVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Cisg
ICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNl
dEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOworICAgICAgICBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisKKyAgICAgICAgc3RydWN0IFZlcnRleAorICAgICAg
ICB7CisgICAgICAgICAgICBmbG9hdCB4LCB5LCB6LCB3OworICAgICAgICAgICAgRDNEQ09MT1Ig
ZGlmZnVzZTsKKyAgICAgICAgfTsKKworICAgICAgICBWZXJ0ZXggcXVhZFs0XTsKKyAgICAgICAg
cXVhZFswXS54ID0gMC4wZjsKKyAgICAgICAgcXVhZFswXS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0
OworICAgICAgICBxdWFkWzBdLnogPSAwLjBmOworICAgICAgICBxdWFkWzBdLncgPSAxLjBmOwor
ICAgICAgICBxdWFkWzBdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAgICBxdWFkWzFdLnggPSAo
ZmxvYXQpZGVzYy5XaWR0aDsKKyAgICAgICAgcXVhZFsxXS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0
OworICAgICAgICBxdWFkWzFdLnogPSAwLjBmOworICAgICAgICBxdWFkWzFdLncgPSAxLjBmOwor
ICAgICAgICBxdWFkWzFdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAgICBxdWFkWzJdLnggPSAw
LjBmOworICAgICAgICBxdWFkWzJdLnkgPSAwLjBmOworICAgICAgICBxdWFkWzJdLnogPSAwLjBm
OworICAgICAgICBxdWFkWzJdLncgPSAxLjBmOworICAgICAgICBxdWFkWzJdLmRpZmZ1c2UgPSBj
b2xvcjsKKworICAgICAgICBxdWFkWzNdLnggPSAoZmxvYXQpZGVzYy5XaWR0aDsKKyAgICAgICAg
cXVhZFszXS55ID0gMC4wZjsKKyAgICAgICAgcXVhZFszXS56ID0gMC4wZjsKKyAgICAgICAgcXVh
ZFszXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFszXS5kaWZmdXNlID0gY29sb3I7CisKKyAgICAg
ICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVV
UChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoVmVydGV4KSk7CisKKyAgICAg
ICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKKyAgICAg
ICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRl
cHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVk
U3RhdGUtPkFwcGx5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxhZ3MpCisg
ICAgeworICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVwdGgs
IHN0ZW5jaWwpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBt
b2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKK3sKKyAgICBpZiAoIW1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgp
OworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIEQzRFBS
SU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7CisKKyAg
ICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZl
VHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKKyAgICB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlKG1vZGUpOworCisgICAg
VHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87CisgICAgYm9vbCB1c2VJbmRleGluZzsKKyAg
ICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIobW9kZSwgZmlyc3QsIGNvdW50LCAmdXNl
SW5kZXhpbmcsICZpbmRleEluZm8pOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBhcHBseVNoYWRlcnMo
KTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCkt
PnZhbGlkYXRlU2FtcGxlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQor
ICAgIHsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBpZiAodXNlSW5k
ZXhpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+RHJhd0luZGV4ZWRQcmltaXRp
dmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWlu
SW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgaW5kZXhJbmZv
Lm9mZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmltaXRpdmVDb3VudCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRp
dmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIGluZGljZXMpCit7CisgICAgaWYgKCFtU3RhdGUu
Y3VycmVudFByb2dyYW0pCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgp
OworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIEQzRFBS
SU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBpbnQgcHJpbWl0aXZlQ291bnQ7CisKKyAg
ICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZl
VHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKKyAgICB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlKG1vZGUpOworCisgICAg
VHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87CisgICAgR0xlbnVtIGVyciA9IGFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOworICAgIGlm
IChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsK
KyAgICB9CisKKyAgICBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihpbmRleEluZm8pOworICAgIGlm
IChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsK
KyAgICB9CisKKyAgICBhcHBseVNoYWRlcnMoKTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisKKyAg
ICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAg
aWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQorICAgIHsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRT
Y2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5
cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleElu
Zm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbkluZGV4KzEsIGluZGV4SW5mby5vZmZzZXQvaW5kZXhJ
bmZvLmluZGV4U2l6ZSwgcHJpbWl0aXZlQ291bnQpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpmaW5pc2goKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBJRGlyZWN0
M0RRdWVyeTkgKm9jY2x1c2lvblF1ZXJ5ID0gTlVMTDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVl
cnkpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgaWYgKG9jY2x1c2lvblF1ZXJ5KQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3RhdGVCbG9j
azkgKnNhdmVkU3RhdGUgPSBOVUxMOworICAgICAgICBkZXZpY2UtPkNyZWF0ZVN0YXRlQmxvY2so
RDNEU0JUX0FMTCwgJnNhdmVkU3RhdGUpOworCisgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5Jc3N1
ZShEM0RJU1NVRV9CRUdJTik7CisKKyAgICAgICAgLy8gUmVuZGVyIHNvbWV0aGluZyBvdXRzaWRl
IHRoZSByZW5kZXIgdGFyZ2V0CisgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgw
LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAgIGRldmljZS0+U2V0RlZGKEQzREZW
Rl9YWVpSSFcpOworICAgICAgICBmbG9hdCBkYXRhWzRdID0gey0xLjBmLCAtMS4wZiwgLTEuMGYs
IDEuMGZ9OworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+
RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1BPSU5UTElTVCwgMSwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsK
KworICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKKworICAgICAg
ICB3aGlsZSAob2NjbHVzaW9uUXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVT
SCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBi
dXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0CisgICAg
ICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5S
ZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKHNhdmVkU3RhdGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgICAgICBzYXZlZFN0YXRlLT5SZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Zmx1c2goKQoreworICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIElEaXJlY3QzRFF1
ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmZXZlbnRRdWVyeSk7CisKKyAgICBpZiAo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAoZXZlbnRRdWVy
eSkKKyAgICB7CisgICAgICAgIGV2ZW50UXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisKKyAg
ICAgICAgd2hpbGUgKGV2ZW50UXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVT
SCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBi
dXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0CisgICAg
ICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50UXVlcnktPlJlbGVh
c2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQorewor
ICAgIG1JbnZhbGlkRW51bSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxp
ZFZhbHVlKCkKK3sKKyAgICBtSW52YWxpZFZhbHVlID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0
OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCkKK3sKKyAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRy
dWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQoreworICAgIG1PdXRP
Zk1lbW9yeSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVm
ZmVyT3BlcmF0aW9uKCkKK3sKKyAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1
ZTsKK30KKworLy8gR2V0IG9uZSBvZiB0aGUgcmVjb3JkZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMg
ZmxhZywgaWYgYW55LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMu
CitHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtSW52YWxpZEVudW0pCisg
ICAgeworICAgICAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9FTlVNOworICAgIH0KKworICAgIGlmIChtSW52YWxpZFZhbHVlKQorICAgIHsKKyAg
ICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBHTF9JTlZBTElE
X1ZBTFVFOworICAgIH0KKworICAgIGlmIChtSW52YWxpZE9wZXJhdGlvbikKKyAgICB7CisgICAg
ICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfT1BFUkFUSU9OOworICAgIH0KKworICAgIGlmIChtT3V0T2ZNZW1vcnkpCisgICAgeworICAg
ICAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xfT1VUX09GX01F
TU9SWTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikKKyAg
ICB7CisgICAgICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT047CisgICAgfQorCisg
ICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRQaXhl
bFNoYWRlclByb2ZpbGUoKQoreworICAgIHJldHVybiBtUHNQcm9maWxlOworfQorCitjb25zdCBj
aGFyICpDb250ZXh0OjpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCkKK3sKKyAgICByZXR1cm4gbVZz
UHJvZmlsZTsKK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikK
K3sKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMjoKKyAgICAv
LyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJp
bmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQKKyAgICAvLyAoaS5l
LiBpbiB0aGUgdGhyZWFkIHRoYXQgY2FsbGVkIERlbGV0ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8g
emVyby4KKworICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgeworICAgICAgICBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBh
dHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAg
ICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIgPT0g
YnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYnV0ZV0ubUJvdW5kQnVmZmVyID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIC8vIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdlIDg0OgorICAgIC8vIElmIGEgdGV4dHVyZSBvYmpl
Y3QgaXMgZGVsZXRlZCwgaXQgaXMgYXMgaWYgYWxsIHRleHR1cmUgdW5pdHMgd2hpY2ggYXJlIGJv
dW5kIHRvIHRoYXQgdGV4dHVyZSBvYmplY3QgYXJlCisgICAgLy8gcmVib3VuZCB0byB0ZXh0dXJl
IG9iamVjdCB6ZXJvCisKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQ
RV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNh
bXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID09IHRl
eHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMjoKKyAgICAv
LyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFj
aGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHRoZW4gaXQgaXMKKyAgICAv
LyBhcyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0
dXJlIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hpY2ggdGhpcworICAgIC8v
IGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgor
CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAg
IGlmIChmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0
dXJlKHRleHR1cmUpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gNC40IHBhZ2UgMTA3OgorICAgIC8vIElmIGEgZnJhbWVidWZmZXIgdGhhdCBpcyBjdXJyZW50
bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFNRUJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0
aG91Z2gKKyAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUg
dGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZlciBvZiB6ZXJvLgorCisgICAgaWYg
KG1TdGF0ZS5mcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJpbmRG
cmFtZWJ1ZmZlcigwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gNC40IHBhZ2UgMTA5OgorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIHRoYXQgaXMgY3Vy
cmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gg
QmluZFJlbmRlcmJ1ZmZlcgorICAgIC8vIGhhZCBiZWVuIGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdl
dCBSRU5ERVJCVUZGRVIgYW5kIG5hbWUgb2YgemVyby4KKworICAgIGlmIChtU3RhdGUucmVuZGVy
YnVmZmVyID09IHJlbmRlcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJpbmRSZW5kZXJidWZmZXIo
MCk7CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2Ug
MTExOgorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0
cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLAor
ICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4g
Y2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQKKyAg
ICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLgorCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
Z2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKyAgICB9Cit9
CisKK1RleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFNhbXBsZXJUeXBlIHR5
cGUpCit7CisgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisKKyAg
ICBpZiAodCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29s
b3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gU0FNUExFUl8yRAorCisgICAgICAg
ICAgY2FzZSBTQU1QTEVSXzJEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1
cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJk
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNB
TVBMRVJfQ1VCRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAg
KmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworCisgICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VOZWdYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdl
UG9zWSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgR0xfUkdC
QSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAg
ICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlTmVnWigwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAxLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgdCA9IGluY29tcGxldGVDdWJlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBt
SW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gdDsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30K
KworYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBy
ZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRf
QkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNU
cmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQoreworICAgIHN3aXRjaCAoZHJhd01vZGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZB
TjoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICBjYXNlIEdMX0xJTkVTOgorICAgICAgY2FzZSBH
TF9MSU5FX0xPT1A6CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIENvbnRleHQ6Omhhc1N0ZW5jaWwoKQoreworICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldEZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoZnJh
bWVidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVm
ZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAg
ICAgICBpZiAoc3RlbmNpbGJ1ZmZlck9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0ZW5jaWxidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxTaXplKCkgPiAwOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvbnRleHQ6OnNldFZlcnRl
eEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKK3sKKyAgICBBU1NF
UlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07CisgICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKKyAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVz
WzJdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10g
PSB2YWx1ZXNbM107CisKKyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVl
cygpOworfQorCit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQoreworICAgIGlm
IChtQnVmZmVyQmFja0VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKKyAgICB7CisgICAgICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsKKyAgICB9CisK
KyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25TdHJpbmcuZmluZF9s
YXN0X25vdF9vZignICcpOworICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
eworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7CisgICAgfQorfQorCitj
b25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Cit9CisKK30KKworZXh0ZXJuICJDIgorewor
Z2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKQor
eworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnKTsKK30KKwordm9pZCBnbERlc3Ry
b3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIGRlbGV0ZSBjb250ZXh0Owor
CisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkKKyAgICB7CisgICAgICAgIGds
OjptYWtlQ3VycmVudChOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICB9Cit9CisKK3ZvaWQgZ2xNYWtl
Q3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgZ2w6Om1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3Bs
YXksIHN1cmZhY2UpOworfQorCitnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpCit7
CisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRl
eHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ4NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQ29udGV4
dC5oOiBEZWZpbmVzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRl
IGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMy
IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCisKKyNpZm5kZWYgSU5DTFVE
RV9DT05URVhUX0hfCisjZGVmaW5lIElOQ0xVREVfQ09OVEVYVF9IXworCisjZGVmaW5lIEdMX0FQ
SUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8
RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3Bs
YXk7CitjbGFzcyBTdXJmYWNlOworY2xhc3MgQ29uZmlnOworfQorCituYW1lc3BhY2UgZ2wKK3sK
K3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGE7
CisKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNoYWRlcjsKK2NsYXNzIFByb2dyYW07CitjbGFzcyBU
ZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBG
cmFtZWJ1ZmZlcjsKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIENvbG9yYnVmZmVyOworY2xh
c3MgRGVwdGhidWZmZXI7CitjbGFzcyBTdGVuY2lsYnVmZmVyOworY2xhc3MgVmVydGV4RGF0YU1h
bmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOworY2xhc3MgQnVmZmVyQmFja0VuZDsKK2Ns
YXNzIEJsaXQ7CisKK2VudW0KK3sKKyAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxMiwKKyAgICBN
QVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDEyOCwKKyAgICBNQVhfVkFSWUlOR19WRUNUT1JT
ID0gOCwKKyAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAorICAgIE1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDAsCisgICAgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgPSAxNiwKKyAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTID0gMTYsCisgICAg
TUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gNDA5NiwgICAvLyBGSVhNRTogVmVyaWZ5CisgICAgTUFY
X0RSQVdfQlVGRkVSUyA9IDEsCisKKyAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1B
VCA9IEdMX1JHQiwKKyAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgPSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNQorfTsKKworY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JB
TkdFX01JTiA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFY
ID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBm
OworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWCA9IDEuMGY7CisKK2Vu
dW0gU2FtcGxlclR5cGUKK3sKKyAgICBTQU1QTEVSXzJELAorICAgIFNBTVBMRVJfQ1VCRSwKKwor
ICAgIFNBTVBMRVJfVFlQRV9DT1VOVAorfTsKKworc3RydWN0IENvbG9yCit7CisgICAgZmxvYXQg
cmVkOworICAgIGZsb2F0IGdyZWVuOworICAgIGZsb2F0IGJsdWU7CisgICAgZmxvYXQgYWxwaGE7
Cit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5nbGUgdmVydGV4IGF0
dHJpYnV0ZQorY2xhc3MgQXR0cmlidXRlU3RhdGUKK3sKKyAgcHVibGljOgorICAgIEF0dHJpYnV0
ZVN0YXRlKCkKKyAgICAgICAgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDApLCBtTm9ybWFsaXpl
ZChmYWxzZSksIG1TdHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtQm91bmRCdWZmZXIoMCksIG1F
bmFibGVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDA7CisgICAg
ICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwOworICAgICAgICBtQ3VycmVudFZhbHVlWzJdID0gMDsK
KyAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDE7CisgICAgfQorCisgICAgLy8gRnJvbSBWZXJ0
ZXhBcnJheVBvaW50ZXIKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbVNpemU7CisgICAg
Ym9vbCBtTm9ybWFsaXplZDsKKyAgICBHTHNpemVpIG1TdHJpZGU7IC8vIDAgbWVhbnMgbmF0dXJh
bCBzdHJpZGUKKyAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKworICAgIEdMdWludCBtQm91bmRC
dWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQb2ludGVyIGlzIGNhbGxlZC4KKwor
ICAgIGJvb2wgbUVuYWJsZWQ7IC8vIEZyb20gRW5hYmxlL0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eQorCisgICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgLy8gRnJvbSBWZXJ0ZXhBdHRyaWI0Zgor
fTsKKworLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9yZSBhbGwgcmF3IHN0YXRlCitzdHJ1Y3Qg
U3RhdGUKK3sKKyAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAgR0xjbGFtcGYgZGVwdGhD
bGVhclZhbHVlOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKKworICAgIGJvb2wgY3VsbEZh
Y2U7CisgICAgR0xlbnVtIGN1bGxNb2RlOworICAgIEdMZW51bSBmcm9udEZhY2U7CisgICAgYm9v
bCBkZXB0aFRlc3Q7CisgICAgR0xlbnVtIGRlcHRoRnVuYzsKKyAgICBib29sIGJsZW5kOworICAg
IEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKKyAgICBHTGVudW0gZGVzdEJsZW5kUkdCOworICAgIEdM
ZW51bSBzb3VyY2VCbGVuZEFscGhhOworICAgIEdMZW51bSBkZXN0QmxlbmRBbHBoYTsKKyAgICBH
TGVudW0gYmxlbmRFcXVhdGlvblJHQjsKKyAgICBHTGVudW0gYmxlbmRFcXVhdGlvbkFscGhhOwor
ICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgYm9vbCBzdGVuY2lsVGVzdDsKKyAgICBHTGVudW0g
c3RlbmNpbEZ1bmM7CisgICAgR0xpbnQgc3RlbmNpbFJlZjsKKyAgICBHTHVpbnQgc3RlbmNpbE1h
c2s7CisgICAgR0xlbnVtIHN0ZW5jaWxGYWlsOworICAgIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRo
RmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7CisgICAgR0x1aW50IHN0ZW5j
aWxXcml0ZW1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYzsKKyAgICBHTGludCBzdGVu
Y2lsQmFja1JlZjsKKyAgICBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrOworICAgIEdMZW51bSBzdGVu
Y2lsQmFja0ZhaWw7CisgICAgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKKyAgICBH
TGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOworICAgIEdMdWludCBzdGVuY2lsQmFja1dy
aXRlbWFzazsKKyAgICBib29sIHBvbHlnb25PZmZzZXRGaWxsOworICAgIEdMZmxvYXQgcG9seWdv
bk9mZnNldEZhY3RvcjsKKyAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRVbml0czsKKyAgICBib29s
IHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKKyAgICBib29sIHNhbXBsZUNvdmVyYWdlOworICAgIEdM
Y2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7CisgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZUludmVy
dDsKKyAgICBib29sIHNjaXNzb3JUZXN0OworICAgIGJvb2wgZGl0aGVyOworCisgICAgR0xmbG9h
dCBsaW5lV2lkdGg7CisKKyAgICBHTGVudW0gZ2VuZXJhdGVNaXBtYXBIaW50OworCisgICAgR0xp
bnQgdmlld3BvcnRYOworICAgIEdMaW50IHZpZXdwb3J0WTsKKyAgICBHTHNpemVpIHZpZXdwb3J0
V2lkdGg7CisgICAgR0xzaXplaSB2aWV3cG9ydEhlaWdodDsKKyAgICBmbG9hdCB6TmVhcjsKKyAg
ICBmbG9hdCB6RmFyOworCisgICAgR0xpbnQgc2Npc3Nvclg7CisgICAgR0xpbnQgc2Npc3Nvclk7
CisgICAgR0xzaXplaSBzY2lzc29yV2lkdGg7CisgICAgR0xzaXplaSBzY2lzc29ySGVpZ2h0Owor
CisgICAgYm9vbCBjb2xvck1hc2tSZWQ7CisgICAgYm9vbCBjb2xvck1hc2tHcmVlbjsKKyAgICBi
b29sIGNvbG9yTWFza0JsdWU7CisgICAgYm9vbCBjb2xvck1hc2tBbHBoYTsKKyAgICBib29sIGRl
cHRoTWFzazsKKworICAgIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0dXJlIHVu
aXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAorICAgIEdMdWludCBhcnJheUJ1ZmZlcjsKKyAgICBH
THVpbnQgZWxlbWVudEFycmF5QnVmZmVyOworICAgIEdMdWludCB0ZXh0dXJlMkQ7CisgICAgR0x1
aW50IHRleHR1cmVDdWJlTWFwOworICAgIEdMdWludCBmcmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQg
cmVuZGVyYnVmZmVyOworICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKKworICAgIEF0dHJpYnV0
ZVN0YXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEdMdWludCBz
YW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKKworICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKKyAgICBHTGludCBwYWNrQWxpZ25tZW50
OworfTsKKworY2xhc3MgQ29udGV4dAoreworICBwdWJsaWM6CisgICAgQ29udGV4dChjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5Db250ZXh0KCk7CisKKyAgICB2b2lkIG1ha2VD
dXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKwor
ICAgIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKKworICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlv
bgorICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSk7CisKKyAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgp
OworCisgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOworCisgICAgdm9pZCBz
ZXRDdWxsRmFjZShib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBj
b25zdDsKKworICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpOworCisgICAgdm9pZCBz
ZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KTsKKworICAgIHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wg
ZW5hYmxlZCk7CisgICAgYm9vbCBpc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZv
aWQgc2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpOworCisgICAgdm9pZCBzZXREZXB0aFJh
bmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKKyAgICAKKyAgICB2b2lkIHNldEJsZW5kKGJv
b2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0JsZW5kRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51
bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7CisgICAgdm9pZCBzZXRCbGVuZENvbG9y
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKKyAgICB2
b2lkIHNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVh
dGlvbik7CisKKyAgICB2b2lkIHNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCk7CisgICAgYm9v
bCBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTdGVuY2lsUGFy
YW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxN
YXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1
bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKTsKKyAgICB2
b2lkIHNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spOworICAgIHZv
aWQgc2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsK
KyAgICB2b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVt
IHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpOworICAg
IHZvaWQgc2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdM
ZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0
aFBhc3MpOworCisgICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpOwor
ICAgIGJvb2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQg
c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7CisK
KyAgICB2b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpOworICAgIGJv
b2wgaXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdl
RW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNs
YW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpOworCisgICAgdm9pZCBzZXRTY2lzc29yVGVzdChib29s
IGVuYWJsZWQpOworICAgIGJvb2wgaXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdDsKKworICAg
IHZvaWQgc2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0RpdGhlckVuYWJsZWQo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworCisgICAg
dm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpOworCisgICAgdm9pZCBzZXRW
aWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICB2b2lkIHNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdm9pZCBzZXRDb2xvck1hc2soYm9v
bCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CisgICAgdm9pZCBzZXRE
ZXB0aE1hc2soYm9vbCBtYXNrKTsKKworICAgIHZvaWQgc2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0
aXZlKTsKKworICAgIEdMdWludCBnZXRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OworICAgIEdM
dWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdDsKKworICAgIEdMdWludCBnZXRBcnJh
eUJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJFbmFibGVk
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCk7CisgICAgY29uc3QgQXR0cmli
dXRlU3RhdGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwor
ICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgR0x1
aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZv
aWQgKnBvaW50ZXIpOworICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5z
aWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisKKyAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAq
Z2V0VmVydGV4QXR0cmliQmxvY2soKTsKKworICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdM
aW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKKyAgICBHTGludCBn
ZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisKKyAgICBHTHVpbnQgY3JlYXRlQnVmZmVyKCk7Cisg
ICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CisgICAgR0x1aW50IGNyZWF0ZVBy
b2dyYW0oKTsKKyAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOworICAgIEdMdWludCBjcmVhdGVG
cmFtZWJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKworICAgIHZv
aWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdM
dWludCBzaGFkZXIpOworICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7Cisg
ICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGRlbGV0ZUZy
YW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZm
ZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZl
cik7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJp
bmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kRnJhbWVidWZm
ZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKKwor
ICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7Cisg
ICAgdm9pZCBzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3JidWZmZXIgKnJlbmRlcmJ1ZmZlcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlclplcm8oRGVwdGhidWZmZXIgKmRlcHRoQnVmZmVyKTsKKyAg
ICB2b2lkIHNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxCdWZmZXIp
OworICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsK
KworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAq
dmFsdWVzKTsKKworICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFNo
YWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOworICAgIFByb2dyYW0gKmdldFByb2dyYW0o
R0x1aW50IGhhbmRsZSk7CisgICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsK
KyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgUmVu
ZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgQ29sb3JidWZm
ZXIgKmdldENvbG9yYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIERlcHRoYnVmZmVyICpnZXRE
ZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTdGVuY2lsYnVmZmVyICpnZXRTdGVuY2ls
YnVmZmVyKEdMdWludCBoYW5kbGUpOworCisgICAgQnVmZmVyICpnZXRBcnJheUJ1ZmZlcigpOwor
ICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgUHJvZ3JhbSAqZ2V0Q3Vy
cmVudFByb2dyYW0oKTsKKyAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOworICAgIFRleHR1
cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgIFRleHR1cmUgKmdldFNhbXBsZXJU
ZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBGcmFt
ZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGJvb2wgZ2V0RmxvYXR2KEdMZW51bSBw
bmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdM
Ym9vbGVhbiAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51
bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CisKKyAgICBi
b29sIGFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpOworICAgIHZvaWQgYXBw
bHlTdGF0ZShHTGVudW0gZHJhd01vZGUpOworICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihH
TGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5n
LCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIEdMZW51bSBhcHBseVZlcnRl
eEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pOworICAgIEdMZW51
bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsK
KyAgICBHTGVudW0gYXBwbHlDb3VudGluZ0luZGV4QnVmZmVyKEdMZW51bSBtb2RlLCBHTGVudW0g
Y291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgdm9pZCBhcHBseVNo
YWRlcnMoKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoKTsKKworICAgIHZvaWQgcmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAgdm9pZCBjbGVhcihHTGJp
dGZpZWxkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBH
THNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogaW5kaWNlcyk7CisgICAgdm9p
ZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisKKyAgICB2b2lkIHJlY29yZEludmFsaWRF
bnVtKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkVmFsdWUoKTsKKyAgICB2b2lkIHJlY29yZElu
dmFsaWRPcGVyYXRpb24oKTsKKyAgICB2b2lkIHJlY29yZE91dE9mTWVtb3J5KCk7CisgICAgdm9p
ZCByZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKKworICAgIEdMZW51bSBnZXRF
cnJvcigpOworCisgICAgY29uc3QgY2hhciAqZ2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7CisgICAg
Y29uc3QgY2hhciAqZ2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpOworCisgICAgY29uc3QgY2hhciAq
Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisKKyAgICBCbGl0ICpnZXRCbGl0dGVyKCkgeyBy
ZXR1cm4gbUJsaXQ7IH0KKworICAgIGNvbnN0IEQzRENBUFM5ICZnZXREZXZpY2VDYXBzKCkgeyBy
ZXR1cm4gbURldmljZUNhcHM7IH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihDb250ZXh0KTsKKworICAgIHZvaWQgbG9va3VwQXR0cmlidXRlTWFwcGluZyhUcmFu
c2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKTsKKworICAgIHZvaWQgZGV0YWNoQnVmZmVyKEdM
dWludCBidWZmZXIpOworICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Cisg
ICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQg
ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworCisgICAgVGV4dHVyZSAq
Z2V0SW5jb21wbGV0ZVRleHR1cmUoU2FtcGxlclR5cGUgdHlwZSk7CisKKyAgICBib29sIGN1bGxT
a2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBib29sIGlzVHJpYW5nbGVNb2RlKEdMZW51
bSBkcmF3TW9kZSk7CisgICAgYm9vbCBoYXNTdGVuY2lsKCk7CisKKyAgICBjb25zdCBlZ2w6OkNv
bmZpZyAqY29uc3QgbUNvbmZpZzsKKworICAgIFN0YXRlICAgbVN0YXRlOworCisgICAgVGV4dHVy
ZTJEICptVGV4dHVyZTJEWmVybzsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqbVRleHR1cmVDdWJlTWFw
WmVybzsKKworICAgIENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJvOworICAgIERlcHRoYnVm
ZmVyICptRGVwdGhidWZmZXJaZXJvOworICAgIFN0ZW5jaWxidWZmZXIgKm1TdGVuY2lsYnVmZmVy
WmVybzsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7
CisgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWlu
dCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOworCisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOworICAgIFByb2dy
YW1NYXAgbVByb2dyYW1NYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgVGV4dHVy
ZSo+IFRleHR1cmVNYXA7CisgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKworICAgIHR5cGVk
ZWYgc3RkOjptYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVmZmVyTWFwOworICAgIEZy
YW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1
aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CisgICAgUmVuZGVyYnVmZmVyTWFw
IG1SZW5kZXJidWZmZXJNYXA7CisKKyAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKKyAg
ICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOworCisgICAgQnVmZmVyQmFja0VuZCAqbUJ1
ZmZlckJhY2tFbmQ7CisgICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsK
KyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKKworICAgIEJsaXQgKm1C
bGl0OworCisgICAgVGV4dHVyZSAqbUluY29tcGxldGVUZXh0dXJlc1tTQU1QTEVSX1RZUEVfQ09V
TlRdOworCisgICAgLy8gUmVjb3JkZWQgZXJyb3JzCisgICAgYm9vbCBtSW52YWxpZEVudW07Cisg
ICAgYm9vbCBtSW52YWxpZFZhbHVlOworICAgIGJvb2wgbUludmFsaWRPcGVyYXRpb247CisgICAg
Ym9vbCBtT3V0T2ZNZW1vcnk7CisgICAgYm9vbCBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9u
OworCisgICAgYm9vbCBtSGFzQmVlbkN1cnJlbnQ7CisKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxp
ZWRQcm9ncmFtOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsK
KyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKworICAgIGNvbnN0
IGNoYXIgKm1Qc1Byb2ZpbGU7CisgICAgY29uc3QgY2hhciAqbVZzUHJvZmlsZTsKKworICAgIC8v
IHN0YXRlIGNhY2hpbmcgZmxhZ3MKKyAgICBib29sIG1DbGVhclN0YXRlRGlydHk7CisgICAgYm9v
bCBtQ3VsbFN0YXRlRGlydHk7CisgICAgYm9vbCBtRGVwdGhTdGF0ZURpcnR5OworICAgIGJvb2wg
bU1hc2tTdGF0ZURpcnR5OworICAgIGJvb2wgbVBpeGVsUGFja2luZ1N0YXRlRGlydHk7CisgICAg
Ym9vbCBtQmxlbmRTdGF0ZURpcnR5OworICAgIGJvb2wgbVN0ZW5jaWxTdGF0ZURpcnR5OworICAg
IGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OworICAgIGJvb2wgbVNjaXNzb3JTdGF0ZURp
cnR5OworICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7CisgICAgYm9vbCBtRnJvbnRGYWNlRGly
dHk7CisgICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKKworICAgIElEaXJlY3QzRFN0YXRlQmxv
Y2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOworCisgICAgRDNEQ0FQUzkgbURldmljZUNhcHM7
Cit9OworfQorCitleHRlcm4gIkMiCit7CisvLyBFeHBvcnRlZCBmdW5jdGlvbnMgZm9yIHVzZSBi
eSBFR0wKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNv
bmZpZyk7Cit2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwordm9p
ZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CitnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29u
dGV4dCgpOworX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNh
bGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7Cit9CisKKyNlbmRpZiAg
IC8vIElOQ0xVREVfQ09OVEVYVF9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZy
YW1lYnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBs
ZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxp
dHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFj
ZSBnbAoreworRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKCkKK3sKKyAgICBtQ29sb3JidWZmZXJU
eXBlID0gR0xfTk9ORTsKKyAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOworCisgICAgbURlcHRo
YnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKworICAg
IG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgbVN0ZW5jaWxidWZmZXJIYW5kbGUg
PSAwOworfQorCitGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKK3sKK30KKwordm9pZCBGcmFt
ZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcikK
K3sKKyAgICBtQ29sb3JidWZmZXJUeXBlID0gdHlwZTsKKyAgICBtQ29sb3JidWZmZXJIYW5kbGUg
PSBjb2xvcmJ1ZmZlcjsKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3sKKyAgICBtRGVwdGhidWZmZXJUeXBlID0g
dHlwZTsKKyAgICBtRGVwdGhidWZmZXJIYW5kbGUgPSBkZXB0aGJ1ZmZlcjsKK30KKwordm9pZCBG
cmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxi
dWZmZXIpCit7CisgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gdHlwZTsKKyAgICBtU3RlbmNpbGJ1
ZmZlckhhbmRsZSA9IHN0ZW5jaWxidWZmZXI7Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OmRldGFj
aFRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKG1Db2xvcmJ1ZmZlckhhbmRsZSA9
PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKKyAgICB7Cisg
ICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtQ29sb3JidWZmZXJI
YW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJIYW5kbGUgPT0gdGV4dHVy
ZSAmJiBJc1RleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgeworICAgICAgICBt
RGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0g
MDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJIYW5kbGUgPT0gdGV4dHVyZSAmJiBJ
c1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICB7CisgICAgICAgIG1TdGVu
Y2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1TdGVuY2lsYnVmZmVySGFuZGxlID0g
MDsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChtQ29sb3JidWZmZXJIYW5kbGUgPT0gcmVuZGVy
YnVmZmVyICYmIG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAg
ICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1Db2xvcmJ1ZmZlckhh
bmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRsZSA9PSByZW5kZXJi
dWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgeworICAg
ICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbURlcHRoYnVmZmVySGFu
ZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJIYW5kbGUgPT0gcmVuZGVy
YnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgewor
ICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtU3RlbmNpbGJ1
ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6Omdl
dFJlbmRlclRhcmdldFNlcmlhbCgpCit7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgp
Cit7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisK
KyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gY29sb3JidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit1bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyU2VyaWFsKCkKK3sKKyAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgRGVwdGhidWZmZXIgKmRl
cHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsK
KworICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBkZXB0aGJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1
cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVm
ZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAg
IGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0
RGVwdGhTdGVuY2lsKCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0NvbG9yYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIoKQoreworICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBOVUxMOworCisgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfTk9ORSkKKyAgICB7Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGNvbG9yYnVmZmVyID0gTlVMTDsKKyAgICB9
CisgICAgZWxzZSBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAg
eworICAgICAgICBjb2xvcmJ1ZmZlciA9IGNvbnRleHQtPmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1
ZmZlckhhbmRsZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbG9yYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGV4dHVyZShtQ29sb3JidWZmZXJIYW5kbGUpLT5nZXRDb2xvcmJ1ZmZl
cihtQ29sb3JidWZmZXJUeXBlKTsKKyAgICB9CisKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29s
b3JidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb2xvcmJ1
ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRGVwdGhidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQt
PmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoZGVwdGhidWZm
ZXIgJiYgZGVwdGhidWZmZXItPmlzRGVwdGhidWZmZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBkZXB0aGJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworU3RlbmNpbGJ1
ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQoreworICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZlcihtU3RlbmNpbGJ1ZmZlckhhbmRsZSk7
CisKKyAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyLT5pc1N0ZW5jaWxidWZm
ZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyOworICAgIH0KKworICAg
IHJldHVybiBOVUxMOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlw
ZSgpCit7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1
ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyVHlw
ZTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgpCit7Cisg
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKK30KKworR0x1aW50IEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlckhhbmRsZTsK
K30KKworR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhhbmRsZSgpCit7CisgICAg
cmV0dXJuIG1EZXB0aGJ1ZmZlckhhbmRsZTsKK30KKworR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRT
dGVuY2lsYnVmZmVySGFuZGxlKCkKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJIYW5kbGU7
Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK3sKKyAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICBpbnQgd2lkdGggPSAwOwor
ICAgIGludCBoZWlnaHQgPSAwOworCisgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKKyAgICB7CisgICAgICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVm
ZmVyKCk7CisKKyAgICAgICAgaWYgKCFjb2xvcmJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVm
ZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAg
d2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gY29sb3Ji
dWZmZXItPmdldEhlaWdodCgpOworICAgIH0KKworICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9
IEdMX05PTkUpCisgICAgeworICAgICAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250
ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOworCisgICAgICAgIGlmICgh
ZGVwdGhidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVwdGhi
dWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAh
PSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgeworICAgICAg
ICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZl
cihtU3RlbmNpbGJ1ZmZlckhhbmRsZSk7CisKKyAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXItPmdldFdp
ZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKKyAgICAgICAgICAgIGhl
aWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0
ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOworfQorfQpJbmRleDogQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNs
YXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0ZSQU1F
QlVGRkVSX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25h
bWVzcGFjZSBnbAoreworY2xhc3MgQ29sb3JidWZmZXI7CitjbGFzcyBEZXB0aGJ1ZmZlcjsKK2Ns
YXNzIFN0ZW5jaWxidWZmZXI7CisKK2NsYXNzIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoKKyAg
ICBGcmFtZWJ1ZmZlcigpOworCisgICAgfkZyYW1lYnVmZmVyKCk7CisKKyAgICB2b2lkIHNldENv
bG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOworICAgIHZvaWQgc2V0
RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7CisgICAgdm9pZCBz
ZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisKKyAg
ICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgZGV0YWNoUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5j
aWwoKTsKKworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKTsKKyAgICB1
bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKworICAgIENvbG9yYnVmZmVyICpn
ZXRDb2xvcmJ1ZmZlcigpOworICAgIERlcHRoYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOworICAg
IFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAgIEdMZW51bSBnZXRDb2xv
cmJ1ZmZlclR5cGUoKTsKKyAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CisgICAgR0xl
bnVtIGdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisKKyAgICBHTHVpbnQgZ2V0Q29sb3JidWZmZXJI
YW5kbGUoKTsKKyAgICBHTHVpbnQgZ2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICBHTHVpbnQg
Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworCisgICAgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsK
KworICAgIEdMdWludCBtQ29sb3JidWZmZXJIYW5kbGU7CisgICAgR0xlbnVtIG1Db2xvcmJ1ZmZl
clR5cGU7CisKKyAgICBHTHVpbnQgbURlcHRoYnVmZmVySGFuZGxlOworICAgIEdMZW51bSBtRGVw
dGhidWZmZXJUeXBlOworCisgICAgR0x1aW50IG1TdGVuY2lsYnVmZmVySGFuZGxlOworICAgIEdM
ZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJf
RlJBTUVCVUZGRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjc2MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVu
dHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cwor
Ly8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
Mi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorCisjaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCisKK25hbWVzcGFjZSBnbAorewordW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2Vy
aWFsID0gMTsKKworc3RkOjpzdHJpbmcgc3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIw
XTsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30K
KworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgYXJyYXlT
aXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtVHlwZVNpemUodHlwZSkg
KiBhcnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICBt
ZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5ID0gdHJ1ZTsKKyAgICBoYW5kbGVzU2V0
ID0gZmFsc2U7Cit9CisKK1VuaWZvcm06On5Vbmlmb3JtKCkKK3sKKyAgICBkZWxldGVbXSBkYXRh
OworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCisgICAg
OiBuYW1lKG5hbWUpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKK3sKK30KKworUHJv
Z3JhbTo6UHJvZ3JhbSgpCit7CisgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKKworICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKKyAg
ICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAgIG1JbmZvTG9nID0gTlVMTDsKKyAgICBt
VmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICB1bmxpbmsoKTsKKworICAgIG1EZWxldGVTdGF0dXMg
PSBmYWxzZTsKKworICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOworfQorCitQcm9ncmFtOjp+
UHJvZ3JhbSgpCit7CisgICAgdW5saW5rKHRydWUpOworCisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIg
IT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRldGFjaCgpOworICAgIH0K
KworICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1GcmFn
bWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgfQorfQorCitib29sIFByb2dyYW06OmF0dGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
VkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtVmVy
dGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOworICAgICAgICBtVmVydGV4U2hhZGVy
LT5hdHRhY2goKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
RlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
bUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1GcmFn
bWVudFNoYWRlci0+YXR0YWNoKCk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmRldGFjaFNoYWRlcihTaGFkZXIg
KnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURF
UikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbVZlcnRl
eFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIH0K
KyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisg
ICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50
U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKKyAgICB9
CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgdW5saW5rKCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hhZGVy
ID8gMSA6IDApOworfQorCitJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW06OmdldFBpeGVs
U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKK30KKworSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkKK3sKKyAgICByZXR1cm4g
bVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0
aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAoaW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlMpCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtQXR0cmlidXRl
QmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BdHRyaWJ1dGVC
aW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CisgICAgfQorfQorCitHTHVpbnQgUHJvZ3JhbTo6
Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAobmFtZSkK
KyAgICB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTGlua2VkQXR0cmli
dXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAtMTsKK30KKworaW50IFByb2dyYW06OmdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KQoreworICAgIGlmIChhdHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0
dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7
Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIHVuaXQgY29ycmVzcG9u
ZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8gaW5kZXggcmVmZXJlbmNlZCBpbiB0aGUg
Y29tcGlsZWQgSExTTCBzaGFkZXIKK0dMaW50IFByb2dyYW06OmdldFNhbXBsZXJNYXBwaW5nKHVu
c2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAgYXNzZXJ0KHNhbXBsZXJJbmRleCA8IHNp
emVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKTsKKworICAgIEdMaW50IGxvZ2lj
YWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgaWYgKG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFj
dGl2ZSkKKyAgICB7CisgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1tzYW1w
bGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAgICB9CisKKyAgICBpZiAobG9naWNhbFRl
eHR1cmVVbml0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgeworICAgICAgICByZXR1
cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworU2Ft
cGxlclR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclR5cGUodW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCkKK3sKKyAgICBhc3NlcnQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9m
KG1TYW1wbGVyc1swXSkpOworICAgIGFzc2VydChtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3Rp
dmUpOworCisgICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLnR5cGU7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6aXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkgY29u
c3QKK3sKKyAgICBpZiAoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1T
YW1wbGVyc1swXSkpCisgICAgeworICAgICAgICByZXR1cm4gbVNhbXBsZXJzW3NhbXBsZXJJbmRl
eF0uZGlydHk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBQcm9ncmFtOjpzZXRTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBpZiAoc2FtcGxlckluZGV4IDwgc2l6ZW9m
KG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpCisgICAgeworICAgICAgICBtU2FtcGxl
cnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IGRpcnR5OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Cit9CisKK0dMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihjb25zdCBjaGFy
ICpuYW1lLCBib29sIGRlY29yYXRlZCkKK3sKKyAgICBzdGQ6OnN0cmluZyBuYW1lU3RyKG5hbWUp
OworICAgIGludCBzdWJzY3JpcHQgPSAwOworICAgIHNpemVfdCBiZWdpbkIgPSBuYW1lU3RyLmZp
bmQoJ1snKTsKKyAgICBzaXplX3QgZW5kQiA9IG5hbWVTdHIuZmluZCgnXScpOworICAgIGlmIChi
ZWdpbkIgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgZW5kQiAhPSBzdGQ6OnN0cmluZzo6bnBvcykK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YnNjclN0ciA9IG5hbWVTdHIuc3Vic3RyKGJl
Z2luQiArIDEsIGJlZ2luQiAtIGVuZEIgLSAxKTsKKyAgICAgICAgbmFtZVN0ci5lcmFzZShiZWdp
bkIpOworICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKHN1YnNjclN0ci5jX3N0cigpKTsKKyAgICB9
CisKKyAgICBpZiAoIWRlY29yYXRlZCkKKyAgICB7CisgICAgICAgIG5hbWVTdHIgPSBkZWNvcmF0
ZShuYW1lU3RyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5p
Zm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lU3RyICYmCisgICAgICAgICAgICBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAgICAgICAg
ICAgIHYsIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50XTsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09
IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbiksCisgICAgICAgICAg
ICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBk
ZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06
OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMiwKKyAgICAgICAgICAgICAgIHYsIDIgKiBzaXpl
b2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYg
Y291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAyXTsKKworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltp
XSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0g
PSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogMiwKKyAg
ICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsK
KworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDMsCisgICAgICAgICAgICAg
ICB2LCAzICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDNdOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVh
bikgKiAzLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMyAqIHNpemVvZihHTGJvb2xlYW4p
ICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBl
bHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAg
ICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogNF07
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xib29sZWFuKSAqIDQsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCA0ICogc2l6ZW9m
KEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Cisg
ICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJpeDJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
KworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgdmFsdWUsIDQgKiBzaXpl
b2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKwor
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA5LAor
ICAgICAgICAgICB2YWx1ZSwgOSAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIDE2LAorICAgICAgICAgICB2YWx1ZSwgMTYgKiBzaXplb2Yo
R0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNw
eSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICogY291bnQp
OworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisg
ICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwor
CisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291
bnRdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xib29sZWFuKSwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIHNpemVvZihHTGJvb2xlYW4p
ICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMy
KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAorICAgICAgICAg
ICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBH
TGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogMl07CisKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFu
KSAqIDIsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCAyICogc2l6ZW9mKEdMYm9vbGVhbikg
KiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCisgICAgICAgICAg
ICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgeworICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAzXTsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4p
ICogMywKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDMgKiBzaXplb2YoR0xib29sZWFuKSAq
IGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkK
KyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKKyAgICAgICAgICAg
ICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5
U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDRdOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBh
cmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbikg
KiA0LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgNCAqIHNpemVvZihHTGJvb2xlYW4pICog
Y291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOworCisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUNvbXBv
bmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogY291bnQgKiBzaXplb2YoR0xmbG9hdCksCisgICAgICAgICAgICAgICBj
b3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9J
TlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291
bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50
UGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMaW50ICpwYXJh
bXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3Jt
SW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUNvbXBvbmVudENv
dW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tp
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBjb3Vu
dCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGludCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlmb3Jtcygp
Cit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4
KyspCisgICAgeworICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7CisgICAg
fQorfQorCit2b2lkIFByb2dyYW06OmRpcnR5QWxsU2FtcGxlcnMoKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgKytp
bmRleCkKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1tpbmRleF0uZGlydHkgPSB0cnVlOworICAg
IH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFt
IG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51
bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9y
bS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAg
ICBhcHBseVVuaWZvcm0xYnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybTJidihsb2NhdGlv
biwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TF9WRUMzOiAgYXBwbHlVbmlmb3JtM2J2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm00YnYo
bG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUOiAgICAgIGFwcGx5VW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogYXBwbHlVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBhcHBseVVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5U2l6
ZSwgZik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IGFw
cGx5VW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogYXBwbHlVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOiBhcHBseVVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
SU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0y
aXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBp
KTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlV
bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hl
ZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcworSUQzRFhCdWZmZXIgKlByb2dyYW06
OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJ
RDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQoreworICAgIGlmICghaGxzbCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEM0RYQnVmZmVyICpiaW5h
cnkgPSBOVUxMOworICAgIElEM0RYQnVmZmVyICplcnJvck1lc3NhZ2UgPSBOVUxMOworCisgICAg
SFJFU1VMVCByZXN1bHQgPSBEM0RYQ29tcGlsZVNoYWRlcihobHNsLCAoVUlOVClzdHJsZW4oaGxz
bCksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2Fn
ZSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgewor
ICAgICAgICByZXR1cm4gYmluYXJ5OworICAgIH0KKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEM0RYQnVmZmVyKilOVUxMKTsK
KyAgICB9CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIo
KTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtZXNzYWdlKTsKKyAgICAgICAg
VFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5l
cmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBF
UyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFn
ZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBv
ciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5
aW5nICpwYWNraW5nW11bNF0pCit7CisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJh
Z21lbnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBp
bnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwor
ICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7CisgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAz
IHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0g
TUFYX1ZBUllJTkdfVkVDVE9SUyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxh
YmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gTUFYX1ZBUllJTkdfVkVDVE9SUyAt
IG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYm
IGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5j
b2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47
IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hd
ID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9PSAxKQorICAgICAgICB7CisgICAgICAg
ICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7
CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtj
b2x1bW5dKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0g
eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChz
cGFjZVtjb2x1bW5dID4gbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNv
bHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVy
IG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBmb3IgKGlu
dCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKKyAgICB7CisgICAgICAgIGlm
IChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNr
aW5nW3JdWzNdKQorICAgICAgICB7CisgICAgICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZWdpc3RlcnM7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6bGlu
a1ZhcnlpbmdzKCkKK3sKKyAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1WZXJ0ZXhITFNM
LmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29u
c3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAg
ICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOworCisgICAgaWYgKHJlZ2lz
dGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHJlZ2lzdGVycyA9PSBNQVhfVkFSWUlOR19WRUNUT1JTICYmIG1GcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZhcnlpbmcg
cmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQg
PSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IG1GcmFnbWVudFNo
YWRlci0+dmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisgICAgeworICAgICAgICBib29sIG1hdGNo
ZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQg
PSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRleFNoYWRl
ci0+dmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
b3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlu
cHV0LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
VG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIHRoYXQg
b2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKKyAgICAgICAgICAgICAgICBvdXRw
dXQtPmNvbCA9IGlucHV0LT5jb2w7CisKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJGcmFnbWVudCB2YXJ5aW5nIHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2
YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5Q
VVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBzZW1hbnRpY0luZGV4
ID0gMDsKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMg
IjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBt
VmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRF
WENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOworCisgICAgICAgIHNlbWFudGlj
SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgIH0KKworICAg
IG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAg
ICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1b
Ml0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworCisgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6
IFRFWENPT1JEIiArIHN0cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xu
IjsKKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZm9yIChBdHRyaWJ1dGVBcnJh
eTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4o
KTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1
dGUrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlKGF0
dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKKyAgICAgICAgeworICAgICAgICAgICAg
bVZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4
SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwor
ICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICog
Z2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3Np
dGlvbi55ID0gLShnbF9Qb3NpdGlvbi55IC0gZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRp
b24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9
IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworCisg
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBt
VmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7
CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1WZXJ0
ZXhTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVZlcnRleFNoYWRlci0+dmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKKyAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7CisKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVy
IHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNr
aW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVn
aXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBtVmVydGV4SExTTCArPSAi
eSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVZl
cnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJb
IiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBt
VmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iOwor
CisgICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0g
bUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1GcmFnbWVudFNo
YWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5
aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93
cyArIGopOworICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYi
ICsgbiArICIgOiBURVhDT09SRCIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsg
c3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChtRnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBtUGl4ZWxITFNMICs9
ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7CisgICAgfQorCisgICAgbVBpeGVsSExTTCAr
PSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdHJ1
Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKKyAgICAgICAgICAgICAgICAg
ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlBTX09V
VFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisK
KyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQu
dztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1dpbmRvdy54ICsgZHhfV2luZG93Lno7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueSAqIHJodykgKiBkeF9XaW5kb3cueSArIGR4X1dpbmRvdy53O1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnog
KiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7CisgICAgfQorCisgICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NX
ID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOworICAg
IH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRT
aGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT52YXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmct
PnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Cisg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3Ry
KGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsg
biArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgbVBpeGVsSExTTCArPSAi
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0g
PSBnbF9Db2xvclswXTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisg
ICAgVFJBQ0UoIlxuJXMiLCBtUGl4ZWxITFNMLmNfc3RyKCkpOworICAgIFRSQUNFKCJcbiVzIiwg
bVZlcnRleEhMU0wuY19zdHIoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gTGlua3Mg
dGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcg
dXAgdGhlaXIgdmFyeWluZ3MsCisvLyBjb21waWxpbmcgdGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRl
cm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQgY29sbGVjdGluZworLy8gYSBsaXN0
IG9mIHVuaWZvcm1zCit2b2lkIFByb2dyYW06OmxpbmsoKQoreworICAgIHVubGluaygpOworCisg
ICAgaWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbVZlcnRleFNoYWRl
ciB8fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29u
c3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPmdldFZlcnRleFNoYWRlclByb2ZpbGUo
KTsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5nZXRQaXhlbFNoYWRl
clByb2ZpbGUoKTsKKworICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhMU0wo
KTsKKyAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKworICAgIGlm
ICghbGlua1ZhcnlpbmdzKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SUQzRFhCdWZmZXIgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtVmVydGV4SExTTC5j
X3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7CisgICAgSUQzRFhCdWZm
ZXIgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4
ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisKKyAgICBpZiAodmVydGV4QmluYXJ5ICYm
IHBpeGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwg
Jm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRl
cigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8
fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHZl
cnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7CisKKyAgICAgICAgdmVydGV4
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVsQmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
ICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAgIHBpeGVsQmluYXJ5ID0gTlVMTDsKKwor
ICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0YWJsZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcygpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVQUykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWxpbmtV
bmlmb3JtcyhtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1z
IGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisg
ICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBh
ZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAgIG1EZXB0aFJhbmdlTmVhckxvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLm5lYXIiLCB0cnVlKTsKKyAgICAg
ICAgICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0Rl
cHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRGVwdGhSYW5nZURpZmZMb2NhdGlv
biA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5kaWZmIiwgdHJ1ZSk7CisgICAg
ICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIs
IHRydWUpOworICAgICAgICAgICAgbUR4V2luZG93TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X1dpbmRvdyIsIHRydWUpOworICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIiwgdHJ1ZSk7CisgICAg
ICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9u
dENDVyIsIHRydWUpOworICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIiwgdHJ1ZSk7CisKKyAgICAgICAgICAg
IG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKKyAgICAgICAgfQorICAgIH0KK30KKworLy8g
RGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNE
IDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCitib29sIFByb2dyYW06OmxpbmtBdHRyaWJ1
dGVzKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisKKyAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQo
KTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1
dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0x
KSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3Vu
ZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKKworICAg
ICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisK
KyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0
cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUt
Pm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEg
PDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgor
ICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBpbnQgbG9jYXRpb24g
PSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJl
ZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAg
ICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3Mg
PiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRl
LT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZh
aWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRl
W2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5kZXggPSBtVmVydGV4U2hhZGVyLT5nZXRT
ZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOworICAg
ICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDwgcm93czsgcisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRy
aWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUpCit7CisgICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1B
WF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKKyAgICB7CisgICAgICAgIGlmIChtQXR0cmli
dXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2Nh
dGlvbl0uZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworYm9vbCBQcm9ncmFtOjpsaW5r
VW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKQoreworICAgIEQzRFhD
T05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uOworICAgIEQzRFhDT05T
VEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247CisgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50
ID0gMTsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlw
dGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3Rh
bnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5k
ZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFu
dFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKKyAgICAgICAgY29uc3RhbnRU
YWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNjcmlwdGlv
biwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShjb25z
dGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5h
cnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1zCisvLyBSZXR1cm5zIHRydWUgaWYgc3Vj
Y2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmluZWQpCitib29sIFByb2dyYW06OmRlZmlu
ZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05T
VEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lKQoreworICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJJbmRleDsKKworICAgICAgICBhc3NlcnQoc2FtcGxlckluZGV4IDwgc2l6
ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworCisgICAgICAgIG1TYW1wbGVy
c1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7CisgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVy
SW5kZXhdLnR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVS
Q1VCRSkgPyBTQU1QTEVSX0NVQkUgOiBTQU1QTEVSXzJEOworICAgICAgICBtU2FtcGxlcnNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOworICAgICAgICBtU2FtcGxlcnNbc2Ft
cGxlckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgc3dpdGNoKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29u
c3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBT
LT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOworCisgICAgICAgICAgICAgICAg
RDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICBVSU5U
IGRlc2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAgICAgICAgICAgbUNvbnN0YW50VGFibGVQ
Uy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2Ny
aXB0aW9uQ291bnQpOworCisgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxk
SGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1l
ICsgIi4iKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6CisgICAgICBj
YXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAg
ICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oY29u
c3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNU
QU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAg
IFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIG5h
bWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBkZWZpbmVkCisgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24obmFtZS5jX3N0cigpLCB0cnVlKTsKKyAgICBHTGVudW0g
dHlwZSA9IHVuaWZvcm0tPnR5cGU7CisKKyAgICBpZiAobG9jYXRpb24gPj0gMCkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZSB1bmlmb3JtOworCisgICAgICAgIGlmIChtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgbVVuaWZvcm1z
LnB1c2hfYmFjayh1bmlmb3JtKTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVu
aWZvcm1zLnNpemUoKSAtIDE7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVu
aWZvcm0tPmFycmF5U2l6ZTsgKytpKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNo
X2JhY2soVW5pZm9ybUxvY2F0aW9uKG5hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQcm9ncmFtOjpjcmVhdGVVbmlmb3JtKGNv
bnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAm
bmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVj
dG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Cisg
ICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6CisgICAgICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBuYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0JP
T0w6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0JPT0xfVkVDMywgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwg
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZF
QzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0lOVF9WRUM0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgorICAgICAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBuYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FU
X1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUM0LCBuYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNv
bHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uc3Rh
bnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxP
QVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfTUFUMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIG5hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1l
bnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJu
IDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmluZyAmc3Ry
aW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJnbF8iICYmIHN0cmluZy5z
dWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgeworICAgICAgICByZXR1cm4gIl8iICsgc3RyaW5n
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0K
K30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmluZyAm
c3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3RyKDAsIDEpID09ICJfIikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDEpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAq
dikKK3sKKyAgICBCT09MICp2ZWN0b3IgPSBuZXcgQk9PTFtjb3VudF07CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHZbaV0gPT0gR0xfRkFM
U0UpCisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAwOworICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgdmVjdG9yW2ldID0gMTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5E
TEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3Rh
bnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25z
dGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0Qm9vbEFycmF5KGRl
dmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0
YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRCb29sQXJyYXkoZGV2
aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGUgW10g
dmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtMmJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYp
Cit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgodlswXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbMV0gPT0gR0xfRkFMU0UgPyAwLjBmIDog
MS4wZiksIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7
CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29u
c3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisK
KyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNl
dFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQor
CisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5T
ZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0K
KworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTNidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xib29sZWFuICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZF
Q1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAw
LjBmIDogMS4wZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzFdID09IEdM
X0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZbMl0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIDApOworCisgICAgICAgIHYgKz0gMzsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAg
ICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVu
aWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywg
dmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMs
IHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRidihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIEQzRFhWRUNU
T1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RP
UjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZbMl0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlszXSA9PSBHTF9GQUxTRSA/IDAu
MGYgOiAxLjBmKSk7CisKKyAgICAgICAgdiArPSAzOworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsK
KyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25z
dGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKwor
ICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0
VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisK
KyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNl
dFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQor
CisgICAgZGVsZXRlIFtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK3sKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3Rh
bnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVz
KHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldEZsb2F0QXJyYXkoZGV2aWNlLCBjb25z
dGFudFBTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgewor
ICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRGbG9hdEFycmF5KGRldmljZSwgY29uc3RhbnRW
UywgdiwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW06OmFwcGx5VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0
W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7Cisg
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KHZbMF0sIHZbMV0sIDAsIDApOworCisgICAg
ICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29u
c3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5k
bGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMp
CisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3Rv
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAg
ICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KHZbMF0sIHZbMV0sIHZbMl0sIDApOworCisgICAgICAgIHYgKz0gMzsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZv
cm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVj
dG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZl
Y3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKwor
ICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7Cisg
ICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3Rh
bnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZl
Y3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgKEQzRFhWRUNUT1I0Kil2LCBjb3VudCk7Cisg
ICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIChEM0RYVkVDVE9SNCopdiwg
Y291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFw
cGx5VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCit7CisgICAgRDNEWE1BVFJJWCAqbWF0cml4ID0gbmV3IEQzRFhNQVRS
SVhbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsK
KyAgICAgICAgbWF0cml4W2ldID0gRDNEWE1BVFJJWCh2YWx1ZVswXSwgdmFsdWVbMl0sIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0sIHZhbHVlWzNdLCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAwLCAgICAgICAgMSwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDAs
IDEpOworCisgICAgICAgIHZhbHVlICs9IDQ7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAg
ICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAg
IGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50
VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAg
aWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRNYXRy
aXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291bnQpOworICAg
IH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVW
Uy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBtYXRyaXgsIGNv
dW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSBtYXRyaXg7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIEQzRFhNQVRSSVgg
Km1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1hdHJpeFtpXSA9IEQzRFhNQVRSSVgodmFs
dWVbMF0sIHZhbHVlWzNdLCB2YWx1ZVs2XSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZVsxXSwgdmFsdWVbNF0sIHZhbHVlWzddLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs1XSwgdmFsdWVbOF0sIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAsICAgICAgICAwLCAgICAgICAgMSk7CisK
KyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhI
QU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29u
c3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29u
c3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldE1hdHJpeFRyYW5z
cG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisg
ICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRN
YXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIG1hdHJpeCwgY291bnQpOwor
ICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgRDNEWE1BVFJJWCAqbWF0cml4
ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0gRDNEWE1BVFJJWCh2YWx1ZVswXSwg
dmFsdWVbNF0sIHZhbHVlWzhdLCAgdmFsdWVbMTJdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlWzFdLCB2YWx1ZVs1XSwgdmFsdWVbOV0sICB2YWx1ZVsxM10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMl0sIHZhbHVlWzZdLCB2YWx1ZVsxMF0sIHZh
bHVlWzE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVszXSwgdmFsdWVb
N10sIHZhbHVlWzExXSwgdmFsdWVbMTVdKTsKKworICAgICAgICB2YWx1ZSArPSAxNjsKKyAgICB9
CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RY
SEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0s
ICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1D
b25zdGFudFRhYmxlUFMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQ
UywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgewor
ICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2Us
IGNvbnN0YW50VlMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJp
eDsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTFp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3Rh
bnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291
bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENv
bnN0YW50RGVzYyhjb25zdGFudFBTLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9u
Q291bnQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnN0YW50RGVz
Y3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2Ft
cGxlckluZGV4KGNvbnN0YW50UFMpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBmaXJzdEluZGV4OyBzYW1wbGVySW5kZXggPCBmaXJzdEluZGV4ICsgY291
bnQ7IHNhbXBsZXJJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMaW50
IG1hcHBlZFNhbXBsZXIgPSB2WzBdOworCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRl
eCA+PSAwICYmIHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1hcHBlZFNhbXBsZXI7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5TZXRJbnRBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHYsIGNvdW50KTsKKyAgICB9
CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMt
PlNldEludEFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdiwgY291bnQpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTJpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgRDNEWFZFQ1RP
UjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9S
NCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZv
cm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVj
dG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZl
Y3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZl
Y3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxv
YXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKKworICAgICAgICB2ICs9IDM7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Cisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRV
bmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMs
IHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAg
ICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZT
LCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSB2ZWN0b3I7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIEQzRFhWRUNUT1I0
ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQo
KGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0KXZbM10pOworCisg
ICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRI
YW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQ
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmlj
ZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50
VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZSBbXSB2
ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtOjphcHBlbmRUb0lu
Zm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaWYgKCFmb3JtYXQpCisgICAg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBpbmZvWzEwMjRdOworCisgICAg
dmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFyYXJnLCBmb3JtYXQpOworICAgIHZzbnBy
aW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFy
YXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworCisgICAgaWYg
KCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0
aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAg
ICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDFd
OworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7CisgICAgICAgIHN0cmNweShuZXdM
b2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworICAg
ICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6cmVzZXRJ
bmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAgICBkZWxldGUgW10g
bUluZm9Mb2c7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBh
biB1bmxpbmtlZCBzdGF0ZSwgYWZ0ZXIgZGV0YWNoaW5nIGEgc2hhZGVyLCBiZWZvcmUgcmUtbGlu
a2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KK3ZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJv
eSkKK3sKKyAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcgZGVzdHJ1Y3RlZAorICAg
IHsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAg
bUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICAgICAg
eworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgICAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtUGl4ZWxFeGVj
dXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAg
ICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobVZlcnRleEV4
ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwor
ICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1Db25z
dGFudFRhYmxlUFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7
CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtQ29u
c3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+UmVsZWFzZSgp
OworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKyAgICB9CisKKyAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQorICAgIHsK
KyAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5jbGVhcigpOworICAgICAgICBt
U2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGluZGV4KyspCisgICAgeworICAg
ICAgICBtU2FtcGxlcnNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBtU2FtcGxlcnNb
aW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7CisgICAgICAgIG1V
bmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9u
ID0gLTE7CisgICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSAtMTsKKyAgICBtRGVwdGhSYW5n
ZUZhckxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOworICAgIG1EeFdp
bmRvd0xvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Cisg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlv
biA9IC0xOworCisgICAgbVVuaWZvcm1JbmRleC5jbGVhcigpOworCisgICAgbVBpeGVsSExTTC5j
bGVhcigpOworICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7CisKKyAgICBkZWxldGVbXSBtSW5mb0xv
ZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBtTGlua2VkID0gZmFsc2U7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQoreworICAgIHJldHVybiBtTGlua2VkOworfQorCitib29s
IFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7
Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQor
eworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0SW5m
b0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHJldHVybiBzdHJsZW4o
bUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3sKKyAgICBpbnQg
aW5kZXggPSAwOworCisgICAgaWYgKG1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtSW5mb0xvZykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gbUluZm9Mb2dbaW5kZXhdOworICAg
ICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZTaXplKQor
ICAgIHsKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChs
ZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0gaW5kZXg7CisgICAgfQorfQorCit2b2lk
IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpj
b3VudCwgR0x1aW50ICpzaGFkZXJzKQoreworICAgIGludCB0b3RhbCA9IDA7CisKKyAgICBpZiAo
bVZlcnRleFNoYWRlcikKKyAgICB7CisgICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQorICAg
ICAgICB7CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1WZXJ0ZXhTaGFkZXItPmdldEhh
bmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKKyAgICB9CisKKyAgICBpZiAo
bUZyYWdtZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbUZyYWdtZW50U2hhZGVyLT5n
ZXRIYW5kbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsKys7CisgICAgfQorCisgICAg
aWYgKGNvdW50KQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gdG90YWw7CisgICAgfQorfQorCit2
b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZSA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAg
ICAgeworICAgICAgICAgICAgYXR0cmlidXRlKys7CisKKyAgICAgICAgICAgIEFTU0VSVChhdHRy
aWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlMpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0
aGFuIGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAo
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSk7CisgICAgfQorCisgICAg
aWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKKworICAgICAgICBzdHJuY3B5
KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1ww
JzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3Ro
ID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgKnNpemUgPSAxOyAgIC8v
IEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKKworICAgICp0eXBlID0gbUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgZm9yIChpbnQgYXR0
cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitHTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQoreworICAgIGludCBtYXhMZW5ndGgg
PSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW06
OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAg
IHVuc2lnbmVkIGludCB1bmlmb3JtID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGluZGV4OyBpKyspCisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAg
ICB1bmlmb3JtKys7CisKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNp
emUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNv
dW50KCkKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1l
LnN1YnN0cigwLCAzKSA9PSAiZHhfIik7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQor
ICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5kZWNvcmF0ZShtVW5pZm9ybXNb
dW5pZm9ybV0tPm5hbWUpOworCisgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5
U2l6ZSAhPSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsK
KyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOwor
CisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Cit9CisKK0dMaW50IFByb2dy
YW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7
IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5k
ZXhdLT5uYW1lLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICAgICAgeworICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworR0xp
bnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCit7CisgICAgaW50IG1heExl
bmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRl
eCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbVVu
aWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+bmFtZS5zdWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKHVuZGVjb3JhdGUobVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPm5hbWUpLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2b2lkIFByb2dyYW06OmZsYWdGb3JEZWxl
dGlvbigpCit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6
aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRGVsZXRlU3RhdHVz
OworfQorCit2b2lkIFByb2dyYW06OnZhbGlkYXRlKCkKK3sKKyAgICByZXNldEluZm9Mb2coKTsK
KworICAgIGlmICghaXNMaW5rZWQoKSkgCisgICAgeworICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7CisgICAgICAgIG1W
YWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXBwbHlV
bmlmb3JtcygpOworICAgICAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBl
cyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQuIik7CisgICAgICAgICAgICBt
VmFsaWRhdGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBQcm9ncmFtOjp2YWxpZGF0ZVNhbXBsZXJzKCkgY29uc3QKK3sKKyAgICAvLyBpZiBhbnkgdHdv
IGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0
IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBp
cyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFu
ZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZB
TElEX09QRVJBVElPTiBlcnJvci4KKyAgICBzdGQ6Om1hcDxpbnQsIFNhbXBsZXJUeXBlPiBzYW1w
bGVyTWFwOyAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJFX0lN
QUdFX1VOSVRTOyArK2kpCisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJzW2ldLmFjdGl2ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNhbXBsZXJNYXAuZmluZChtU2FtcGxlcnNbaV0u
bG9naWNhbFRleHR1cmVVbml0KSAhPSBzYW1wbGVyTWFwLmVuZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNbaV0udHlwZSAhPSBzYW1wbGVyTWFwW21TYW1w
bGVyc1tpXS5sb2dpY2FsVGV4dHVyZVVuaXRdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc2FtcGxlck1hcFttU2FtcGxlcnNbaV0ubG9naWNhbFRleHR1cmVVbml0
XSA9IG1TYW1wbGVyc1tpXS50eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0Q29uc3RhbnRIYW5kbGVz
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEQzRFhIQU5ETEUgKmNvbnN0YW50UFMsIEQzRFhIQU5E
TEUgKmNvbnN0YW50VlMpCit7CisgICAgaWYgKCF0YXJnZXRVbmlmb3JtLT5oYW5kbGVzU2V0KQor
ICAgIHsKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+cHNIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBT
LT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5uYW1lLmNfc3RyKCkpOworICAg
ICAgICB0YXJnZXRVbmlmb3JtLT52c0hhbmRsZSA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0
YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPm5hbWUuY19zdHIoKSk7CisgICAgICAgIHRhcmdl
dFVuaWZvcm0tPmhhbmRsZXNTZXQgPSB0cnVlOworICAgIH0KKworICAgICpjb25zdGFudFBTID0g
dGFyZ2V0VW5pZm9ybS0+cHNIYW5kbGU7CisgICAgKmNvbnN0YW50VlMgPSB0YXJnZXRVbmlmb3Jt
LT52c0hhbmRsZTsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RGVwdGhSYW5nZURpZmZMb2NhdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uOworfQorCitH
TGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldERl
cHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFJhbmdlRmFy
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06Omdl
dER4V2luZG93TG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhXaW5kb3dMb2NhdGlv
bjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Cit9CisKK0dMaW50IFBy
b2dyYW06OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEZy
b250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4UG9pbnRzT3JMaW5lc0xv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwor
fQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBj
bGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgorCisj
aWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0hfCisjZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0hf
CisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgRnJh
Z21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVw
cmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCitzdHJ1Y3QgVW5pZm9ybQoreworICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBp
bnQgYXJyYXlTaXplKTsKKworICAgIH5Vbmlmb3JtKCk7CisKKyAgICBjb25zdCBHTGVudW0gdHlw
ZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBh
cnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGJvb2wgZGlydHk7CisK
KyAgICBEM0RYSEFORExFIHZzSGFuZGxlOworICAgIEQzRFhIQU5ETEUgcHNIYW5kbGU7CisgICAg
Ym9vbCBoYW5kbGVzU2V0OworfTsKKworLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVu
aWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlm
b3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworCisgICAgc3Rk
OjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKKyAgICB1bnNpZ25lZCBp
bnQgaW5kZXg7Cit9OworCitjbGFzcyBQcm9ncmFtCit7CisgIHB1YmxpYzoKKyAgICBQcm9ncmFt
KCk7CisKKyAgICB+UHJvZ3JhbSgpOworCisgICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpOworICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKKyAgICBpbnQg
Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKKworICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRW
ZXJ0ZXhTaGFkZXIoKTsKKworICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBp
bmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9u
KGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1
dGVJbmRleCk7CisKKyAgICB2b2lkIGRpcnR5QWxsU2FtcGxlcnMoKTsKKworICAgIEdMaW50IGdl
dFNhbXBsZXJNYXBwaW5nKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIFNhbXBsZXJU
eXBlIGdldFNhbXBsZXJUeXBlKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOworICAgIGJvb2wg
aXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCwgYm9vbCBkaXJ0eSk7
CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSwgYm9vbCBk
ZWNvcmF0ZWQpOworICAgIGJvb2wgc2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNl
dFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9v
bCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBz
ZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dik7CisgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICBi
b29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBi
b29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xpbnQgKnBhcmFtcyk7CisKKyAgICBH
TGludCBnZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RGVw
dGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldERlcHRoUmFuZ2VGYXJM
b2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Owor
ICAgIEdMaW50IGdldER4V2luZG93TG9jYXRpb24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeEhh
bGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2Nh
dGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29u
c3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICB2b2lkIGFwcGx5VW5pZm9y
bXMoKTsKKworICAgIHZvaWQgbGluaygpOworICAgIGJvb2wgaXNMaW5rZWQoKTsKKyAgICBpbnQg
Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CisgICAgdm9pZCBnZXRBdHRh
Y2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hh
ZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBH
TGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAg
R0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIGdldEFjdGl2
ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3Ro
KCk7CisKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOworICAgIGJvb2wgaXNGbGFnZ2VkRm9y
RGVsZXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgdmFsaWRhdGUoKTsKKyAgICBib29sIHZhbGlk
YXRlU2FtcGxlcnMoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CisKKyAgICBJRDNEWEJ1ZmZlciAqY29tcGls
ZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29u
c3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworICAgIHZvaWQgdW5saW5rKGJvb2wgZGVzdHJv
eSA9IGZhbHNlKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2lu
Z1tdWzRdKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncygpOworCisgICAgYm9vbCBsaW5rQXR0cmli
dXRlcygpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3Rh
bnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0
YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwg
c3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNE
WENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nICZuYW1lKTsK
KyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25z
dGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSk7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7
CisgICAgYm9vbCBhcHBseVVuaWZvcm0yYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0zYnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBs
eVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVh
biAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMmZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFw
cGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtTWF0cml4MmZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Cisg
ICAgYm9vbCBhcHBseVVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwor
ICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdik7CisKKyAgICB2b2lkIGdldENvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBEM0RYSEFORExFICpjb25zdGFudFZTKTsK
KworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7CisgICAg
dm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZShj
b25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKTsgICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQor
ICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZzdHJp
bmcpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFk
ZXI7CisgICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOworCisgICAgc3RkOjpzdHJpbmcg
bVBpeGVsSExTTDsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKworICAgIElEaXJlY3Qz
RFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFu
dFRhYmxlUFM7CisgICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOworCisg
ICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRU
UklCU107CisgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJT
XTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIHN0
cnVjdCBTYW1wbGVyCisgICAgeworICAgICAgICBib29sIGFjdGl2ZTsKKyAgICAgICAgR0xpbnQg
bG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBTYW1wbGVyVHlwZSB0eXBlOworICAgICAgICBi
b29sIGRpcnR5OworICAgIH07CisKKyAgICBTYW1wbGVyIG1TYW1wbGVyc1tNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU107CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3Jt
QXJyYXk7CisgICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OworICAgIFVuaWZvcm1JbmRleCBtVW5p
Zm9ybUluZGV4OworCisgICAgR0xpbnQgbURlcHRoUmFuZ2VEaWZmTG9jYXRpb247CisgICAgR0xp
bnQgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247CisgICAgR0xpbnQgbURlcHRoUmFuZ2VGYXJMb2Nh
dGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOworICAgIEdMaW50IG1EeFdpbmRvd0xv
Y2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKKyAgICBHTGludCBt
RHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsK
KworICAgIGJvb2wgbUxpbmtlZDsKKyAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2Vy
IGluIHVzZQorICAgIGNoYXIgKm1JbmZvTG9nOworICAgIGJvb2wgbVZhbGlkYXRlZDsKKworICAg
IHVuc2lnbmVkIGludCBtU2VyaWFsOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVu
dFNlcmlhbDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0hfCkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1
NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyLmNwcDogdGhlIGdsOjpS
ZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKKy8vIENvbG9yYnVmZmVy
LCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZm
ZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7Cit1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyOjptQ3VycmVudFNlcmlhbCA9IDE7CisKK1JlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVy
KCkKK3sKKyAgICBtV2lkdGggPSAwOworICAgIG1IZWlnaHQgPSAwOworICAgIG1Gb3JtYXQgPSBH
TF9SR0JBNDsgLy8gZGVmYXVsdCBmb3JtYXQsIG5lZWRzIHRvIGJlIG9uZSBvZiB0aGUgZXhwZWN0
ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMKKyAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKK30K
KworUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkKK3sKK30KKworYm9vbCBSZW5kZXJidWZm
ZXI6OmlzQ29sb3JidWZmZXIoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQor
eworICAgIHJldHVybiBOVUxMOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBOVUxMOworfQorCitpbnQgUmVuZGVy
YnVmZmVyOjpnZXRXaWR0aCgpCit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworaW50IFJlbmRl
cmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKwordm9pZCBS
ZW5kZXJidWZmZXI6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIG1XaWR0
aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7Cit9CisKKworR0xlbnVtIFJlbmRlcmJ1
ZmZlcjo6Z2V0Rm9ybWF0KCkKK3sKKyAgICByZXR1cm4gbUZvcm1hdDsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNlcmlh
bDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6aXNzdWVTZXJpYWwoKQoreworICAg
IHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIo
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkgOiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRh
cmdldCkKK3sKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmVuZGVyVGFy
Z2V0LT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Cisg
ICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHNl
dFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAgfQorCit9
CisKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51
bSBmb3JtYXQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGVzMmR4OjpDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KGZvcm1hdCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IGZvcm1hdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1h
dCA9IEdMX1JHQkE0OworICAgIH0KK30KKworQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCit7
CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7CisgICAgfQorfQorCitib29sIENvbG9yYnVmZmVyOjppc0NvbG9yYnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRSZWRTaXpl
KCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0Vf
REVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3Jp
cHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6R2V0UmVkU2l6ZShkZXNjcmlwdGlvbi5G
b3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6
OmdldEdyZWVuU2l6ZSgpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAg
ICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdl
dERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldEdyZWVuU2l6
ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTHVp
bnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkK
KyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJk
eDo6R2V0Qmx1ZVNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRBbHBoYVNpemUoKQoreworICAgIGlmICht
UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9u
OworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgcmV0dXJuIGVzMmR4OjpHZXRBbHBoYVNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKkNvbG9yYnVmZmVyOjpn
ZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQorCitEZXB0
aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBt
RGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAg
IHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJGQUNF
X0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3Jp
cHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9u
LkhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYg
dGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5j
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhw
ZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UKKyAgICB9Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0Uzgs
IEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7CisKKyAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIHNldFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhl
IHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0
IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSgwLCAwKTsKKyAgICAg
ICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0CisgICAgfQorfQorCitEZXB0
aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7
CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgRGVw
dGhidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitHTHVp
bnQgRGVwdGhidWZmZXI6OmdldERlcHRoU2l6ZSgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwp
CisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMy
ZHg6OkdldERlcHRoU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhidWZmZXI6OmdldERlcHRoU3RlbmNp
bCgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9CisKK1N0ZW5jaWxidWZmZXI6OlN0
ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVu
Y2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
Y3JpcHRpb247CisgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwor
CisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7
CisgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1
ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUg
dmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9Cit9CisK
K1N0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorewor
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgbURlcHRo
U3RlbmNpbCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRo
U3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBEM0RNVUxUSVNBTVBM
RV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOworCisgICAgaWYgKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKG1EZXB0
aFN0ZW5jaWwpCisgICAgeworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFy
YW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJl
bmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHNldFNpemUoMCwgMCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsg
Ly9kZWZhdWx0IGZvcm1hdAorICAgIH0KK30KKworU3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZm
ZXIoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOworICAgIH0KK30KKworR0x1aW50IFN0ZW5jaWxidWZmZXI6OmdldFN0
ZW5jaWxTaXplKCkKK3sKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIEQz
RFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVz
YygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6R2V0U3RlbmNpbFNpemUo
ZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBT
dGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQoreworICAgIHJldHVybiB0cnVlOworfQor
CitJRGlyZWN0M0RTdXJmYWNlOSAqU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sK
KyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJidWZmZXIuaDogRGVmaW5lcyB0aGUgdmlydHVhbCBnbDo6UmVuZGVyYnVmZmVy
IGNsYXNzIGFuZCBpdHMgZGVyaXZlZAorLy8gY2xhc3NlcyBDb2xvcmJ1ZmZlciwgRGVwdGhidWZm
ZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMgR0wgcmVuZGVyYnVmZmVyCisvLyBvYmpl
Y3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDQuNC4zIHBhZ2UgMTA4LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcgor
eworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJi
dWZmZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbG9yYnVmZmVyKCk7CisgICAgdmlydHVh
bCBib29sIGlzRGVwdGhidWZmZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVy
KCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAg
IHZpcnR1YWwgaW50IGdldFdpZHRoKCk7CisgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCk7Cisg
ICAgR0xlbnVtIGdldEZvcm1hdCgpOworICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25z
dDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICBwcm90ZWN0
ZWQ6CisgICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgR0xlbnVt
IG1Gb3JtYXQ7CisgICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKKworICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CisKKyAgICBpbnQgbVdpZHRoOworICAgIGludCBtSGVp
Z2h0OworfTsKKworY2xhc3MgQ29sb3JidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCit7Cisg
IHB1YmxpYzoKKyAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0KTsKKyAgICBDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51
bSBmb3JtYXQpOworCisgICAgfkNvbG9yYnVmZmVyKCk7CisKKyAgICBib29sIGlzQ29sb3JidWZm
ZXIoKTsKKworICAgIEdMdWludCBnZXRSZWRTaXplKCk7CisgICAgR0x1aW50IGdldEdyZWVuU2l6
ZSgpOworICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpOworICAgIEdMdWludCBnZXRBbHBoYVNpemUo
KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29sb3JidWZmZXIpOworfTsKKworY2xh
c3MgRGVwdGhidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBl
eHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAg
ICBEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgfkRlcHRoYnVmZmVy
KCk7CisKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKTsKKworICAgIEdMdWludCBnZXREZXB0aFNp
emUoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aGJ1ZmZlcik7CisgICAg
SURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Cit9OworCitjbGFzcyBTdGVuY2lsYnVm
ZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgU3Rl
bmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBTdGVuY2ls
YnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB+U3RlbmNpbGJ1ZmZlcigpOwor
CisgICAgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKTsKKworICAgIEdMdWludCBnZXRTdGVuY2lsU2l6
ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0ZW5jaWxidWZmZXIpOworICAg
IElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOworfTsKK30KKworI2VuZGlmICAgLy8g
TElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlci5jcHA6IElt
cGxlbWVudHMgdGhlIGdsOjpTaGFkZXIgY2xhc3MgYW5kIGl0cyAgZGVyaXZlZCBjbGFzc2VzCisv
LyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRzIEdMIHNoYWRlciBv
YmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24gMy44IHBhZ2UgODQuCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlcmxhbmcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7Cit2b2lkICpTaGFk
ZXI6Om1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsKK3ZvaWQgKlNoYWRlcjo6bVZlcnRleENvbXBp
bGVyID0gTlVMTDsKKworU2hhZGVyOjpTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhh
bmRsZSkgOiBtSGFuZGxlKGhhbmRsZSksIG1Db250ZXh0KGNvbnRleHQpCit7CisgICAgbVNvdXJj
ZSA9IE5VTEw7CisgICAgbUhsc2wgPSBOVUxMOworICAgIG1JbmZvTG9nID0gTlVMTDsKKworICAg
IC8vIFBlcmZvcm0gYSBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc2hhZGVyIGNvbXBp
bGVyIChvciBhZnRlciBiZWluZyBkZXN0cnVjdGVkIGJ5IHJlbGVhc2VDb21waWxlcikKKyAgICBp
ZiAoIW1GcmFnbWVudENvbXBpbGVyKQorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IFNoSW5p
dGlhbGl6ZSgpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nRnJhZ21lbnQs
IEVTaFNwZWNHTEVTMik7CisgICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVj
dENvbXBpbGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNHTEVTMik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtQXR0YWNoQ291bnQgPSAwOworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKK30K
KworU2hhZGVyOjp+U2hhZGVyKCkKK3sKKyAgICBkZWxldGVbXSBtU291cmNlOworICAgIGRlbGV0
ZVtdIG1IbHNsOworICAgIGRlbGV0ZVtdIG1JbmZvTG9nOworfQorCitHTHVpbnQgU2hhZGVyOjpn
ZXRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtSGFuZGxlOworfQorCit2b2lkIFNoYWRl
cjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdM
aW50ICpsZW5ndGgpCit7CisgICAgZGVsZXRlW10gbVNvdXJjZTsKKyAgICBpbnQgdG90YWxMZW5n
dGggPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAg
ICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gKGludClzdHJsZW4oc3RyaW5nW2ld
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExlbmd0
aCArIDFdOworICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKKworICAg
ICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdbaV0p
OworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xl
bmd0aCk7CisgICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOworICAgIH0KKworICAgIG1Tb3Vy
Y2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKK30KKworaW50IFNoYWRlcjo6Z2V0SW5mb0xvZ0xlbmd0
aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cp
ICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQoreworICAgIGludCBpbmRleCA9IDA7
CisKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAgICB3aGlsZSAoaW5kZXggPCBidWZT
aXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1JbmZvTG9nKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xvZ1tpbmRleF07CisgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1ZlNpemUpCisgICAgeworICAg
ICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCkKKyAg
ICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9CisKK2ludCBTaGFkZXI6Omdl
dFNvdXJjZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtU291cmNlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgcmV0dXJuIHN0cmxl
bihtU291cmNlKSArIDE7CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Z2V0U291cmNlKEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpzb3VyY2UpCit7CisgICAgaW50IGlu
ZGV4ID0gMDsKKworICAgIGlmIChtU291cmNlKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtU291cmNlKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc291cmNlW2luZGV4XSA9IG1Tb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZTaXplKQorICAgIHsK
KyAgICAgICAgc291cmNlW2luZGV4XSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCkK
KyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9Cit9CisKK2Jvb2wgU2hhZGVy
Ojppc0NvbXBpbGVkKCkKK3sKKyAgICByZXR1cm4gbUhsc2wgIT0gTlVMTDsKK30KKworY29uc3Qg
Y2hhciAqU2hhZGVyOjpnZXRITFNMKCkKK3sKKyAgICByZXR1cm4gbUhsc2w7Cit9CisKK3ZvaWQg
U2hhZGVyOjphdHRhY2goKQoreworICAgIG1BdHRhY2hDb3VudCsrOworfQorCit2b2lkIFNoYWRl
cjo6ZGV0YWNoKCkKK3sKKyAgICBtQXR0YWNoQ291bnQtLTsKKworICAgIGlmIChtQXR0YWNoQ291
bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsKKyAgICAgICAgbUNvbnRleHQtPmRlbGV0
ZVNoYWRlcihtSGFuZGxlKTsKKyAgICB9Cit9CisKK2Jvb2wgU2hhZGVyOjppc0F0dGFjaGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUF0dGFjaENvdW50ID4gMDsKK30KKworYm9vbCBTaGFkZXI6
OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGV0ZVN0YXR1
czsKK30KKwordm9pZCBTaGFkZXI6OmZsYWdGb3JEZWxldGlvbigpCit7CisgICAgbURlbGV0ZVN0
YXR1cyA9IHRydWU7Cit9CisKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKQoreworICAg
IFNoRGVzdHJ1Y3QobUZyYWdtZW50Q29tcGlsZXIpOworICAgIFNoRGVzdHJ1Y3QobVZlcnRleENv
bXBpbGVyKTsKKworICAgIG1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsKKyAgICBtVmVydGV4Q29t
cGlsZXIgPSBOVUxMOworCisgICAgU2hGaW5hbGl6ZSgpOworfQorCit2b2lkIFNoYWRlcjo6cGFy
c2VWYXJ5aW5ncygpCit7CisgICAgaWYgKG1IbHNsKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7CisKKyAgICAgICAg
d2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZd
OworICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOworCisgICAgICAgICAgICBpbnQg
bWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlcyAlcyIsIHZhcnlpbmdUeXBlLCB2YXJ5
aW5nTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNo
YXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOworICAgICAgICAgICAgaW50IHNp
emUgPSAxOworCisgICAgICAgICAgICBpZiAoYXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKKyAgICAgICAgICAgICAgICAqYXJyYXkg
PSAnXDAnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXJ5aW5ncy5wdXNoX2JhY2so
VmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkg
IT0gTlVMTCkpOworCisgICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7
CisgICAgICAgIH0KKworICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdM
X1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBz
dHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5VTEw7CisgICAgfQorfQor
Cit2b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcikKK3sKKyAgICBpZiAo
aXNDb21waWxlZCgpIHx8ICFtU291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFRSQUNFKCJcbiVzIiwgbVNvdXJjZSk7CisKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsK
KyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBUQnVpbHRJblJlc291cmNlIHJlc291cmNlczsK
KworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwor
ICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IE1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA9IE1BWF9WQVJZSU5H
X1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgIHJlc291cmNlcy5tYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAg
cmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
CisgICAgcmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA9IE1BWF9EUkFX
X0JVRkZFUlM7CisKKyAgICBpbnQgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCAmbVNvdXJj
ZSwgMSwgRVNoT3B0Tm9uZSwgJnJlc291cmNlcywgRURlYnVnT3BOb25lKTsKKyAgICBjb25zdCBj
aGFyICpvYmogPSBTaEdldE9iamVjdENvZGUoY29tcGlsZXIpOworICAgIGNvbnN0IGNoYXIgKmlu
Zm8gPSBTaEdldEluZm9Mb2coY29tcGlsZXIpOworCisgICAgaWYgKHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIG1IbHNsID0gbmV3IGNoYXJbc3RybGVuKG9iaikgKyAxXTsKKyAgICAgICAgc3RyY3B5
KG1IbHNsLCBvYmopOworCisgICAgICAgIFRSQUNFKCJcbiVzIiwgbUhsc2wpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW3N0cmxlbihpbmZvKSAr
IDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworCisgICAgICAgIFRSQUNFKCJc
biVzIiwgbUluZm9Mb2cpOworICAgIH0KK30KKworR0xlbnVtIFNoYWRlcjo6cGFyc2VUeXBlKGNv
bnN0IHN0ZDo6c3RyaW5nICZ0eXBlKQoreworICAgIGlmICh0eXBlID09ICJmbG9hdCIpCisgICAg
eworICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0g
ImZsb2F0MiIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9G
TE9BVF9WRUMzOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0MngyIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOworICAg
IH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDN4MyIpCisgICAgeworICAgICAgICByZXR1
cm4gR0xfRkxPQVRfTUFUMzsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQi
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgfQorICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBHTF9OT05FOworfQorCisvLyB0cnVlIGlmIHZh
cnlpbmcgeCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgaW4gcGFja2luZyB0aGFuIHkKK2Jvb2wgU2hh
ZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5nICZ5KQor
eworICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgeworICAgICAgICByZXR1cm4geC5zaXpl
ID4geS5zaXplOworICAgIH0KKworICAgIHN3aXRjaCAoeC50eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJl
dHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgICBzd2l0Y2goeS50eXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJu
IHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwor
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAg
IHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0
dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZM
T0FUOiByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoQ29u
dGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIoY29udGV4dCwgaGFuZGxlKQor
eworfQorCitWZXJ0ZXhTaGFkZXI6On5WZXJ0ZXhTaGFkZXIoKQoreworfQorCitHTGVudW0gVmVy
dGV4U2hhZGVyOjpnZXRUeXBlKCkKK3sKKyAgICByZXR1cm4gR0xfVkVSVEVYX1NIQURFUjsKK30K
Kwordm9pZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUoKQoreworICAgIGNvbXBpbGVUb0hMU0wobVZl
cnRleENvbXBpbGVyKTsKKyAgICBwYXJzZUF0dHJpYnV0ZXMoKTsKKyAgICBwYXJzZVZhcnlpbmdz
KCk7Cit9CisKK2ludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpz
dHJpbmcgJmF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lLmVtcHR5KCkp
CisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFtZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWNJbmRleDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Zv
aWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0dHJpYnV0ZXMoKQoreworICAgIGlmIChtSGxzbCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKG1IbHNsLCAiLy8gQXR0cmli
dXRlcyIpICsgMTQ7CisKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2hhciBhdHRyaWJ1dGVUeXBlWzI1Nl07CisgICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZU5h
bWVbMjU2XTsKKworICAgICAgICAgICAgaW50IG1hdGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0
aWMgJXMgXyVzIiwgYXR0cmlidXRlVHlwZSwgYXR0cmlidXRlTmFtZSk7CisKKyAgICAgICAgICAg
IGlmIChtYXRjaGVzICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1BdHRyaWJ1dGVzLnB1c2hfYmFjayhBdHRy
aWJ1dGUocGFyc2VUeXBlKGF0dHJpYnV0ZVR5cGUpLCBhdHRyaWJ1dGVOYW1lKSk7CisKKyAgICAg
ICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAiOyIpICsgMjsKKyAgICAgICAgfQorICAgIH0K
K30KKworRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdM
dWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRsZSkKK3sKK30KKworRnJhZ21lbnRT
aGFkZXI6On5GcmFnbWVudFNoYWRlcigpCit7Cit9CisKK0dMZW51bSBGcmFnbWVudFNoYWRlcjo6
Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURFUjsKK30KKwordm9pZCBG
cmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCit7CisgICAgY29tcGlsZVRvSExTTChtRnJhZ21lbnRD
b21waWxlcik7CisgICAgcGFyc2VWYXJ5aW5ncygpOworICAgIHZhcnlpbmdzLnNvcnQoY29tcGFy
ZVZhcnlpbmcpOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRlci5oOiBEZWZpbmVzIHRoZSBhYnN0cmFj
dCBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAorLy8gY2xhc3NlcyBW
ZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRzIEdMIHNoYWRlciBvYmpl
Y3RzIGFuZAorLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KKy8vIDMuOCBwYWdlIDg0LgorCisjaWZuZGVm
IExJQkdMRVNWMl9TSEFERVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1NIQURFUl9IXworCisjZGVm
aW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxkM2R4OS5o
PgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgVmFyeWluZworeworICAg
IFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBpbnQgc2l6ZSwg
Ym9vbCBhcnJheSkKKyAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBzaXplKHNpemUp
LCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKKyAgICB7CisgICAgfQorCisgICAgR0xl
bnVtIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBpbnQgc2l6ZTsgICAvLyBOdW1i
ZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCisgICAgYm9vbCBhcnJheTsKKworICAgIGludCByZWc7ICAg
IC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgaW50
IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVyaW5nIGxpbmsK
K307CisKK3R5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OworCitjbGFzcyBT
aGFkZXIKK3sKKyAgICBmcmllbmQgUHJvZ3JhbTsKKworICBwdWJsaWM6CisgICAgU2hhZGVyKENv
bnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOworCisgICAgdmlydHVhbCB+U2hhZGVyKCk7
CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgPSAwOworICAgIEdMdWludCBnZXRIYW5k
bGUoKSBjb25zdDsKKworICAgIHZvaWQgZGVsZXRlU291cmNlKCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0
aCk7CisgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldEluZm9M
b2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAg
IGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIGdldFNvdXJjZShHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqc291cmNlKTsKKworICAgIHZpcnR1YWwg
dm9pZCBjb21waWxlKCkgPSAwOworICAgIGJvb2wgaXNDb21waWxlZCgpOworICAgIGNvbnN0IGNo
YXIgKmdldEhMU0woKTsKKworICAgIHZvaWQgYXR0YWNoKCk7CisgICAgdm9pZCBkZXRhY2goKTsK
KyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdDsKKyAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0
aW9uKCkgY29uc3Q7CisgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKKworICAgIHN0YXRpYyB2
b2lkIHJlbGVhc2VDb21waWxlcigpOworCisgIHByb3RlY3RlZDoKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oU2hhZGVyKTsKKworICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOworCisgICAg
dm9pZCBjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVyKTsKKworICAgIHN0YXRpYyBHTGVudW0g
cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBjb21w
YXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5nICZ5KTsKKworICAgIGNv
bnN0IEdMdWludCBtSGFuZGxlOworICAgIGludCBtQXR0YWNoQ291bnQ7ICAgICAvLyBOdW1iZXIg
b2YgcHJvZ3JhbSBvYmplY3RzIHRoaXMgc2hhZGVyIGlzIGF0dGFjaGVkIHRvCisgICAgYm9vbCBt
RGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBi
ZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQorCisgICAgY2hhciAqbVNvdXJjZTsKKyAg
ICBjaGFyICptSGxzbDsKKyAgICBjaGFyICptSW5mb0xvZzsKKworICAgIFZhcnlpbmdMaXN0IHZh
cnlpbmdzOworCisgICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKKyAgICBib29sIG1Vc2VzRnJvbnRG
YWNpbmc7CisKKyAgICBDb250ZXh0ICptQ29udGV4dDsKKworICAgIHN0YXRpYyB2b2lkICptRnJh
Z21lbnRDb21waWxlcjsKKyAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOworfTsKKwor
c3RydWN0IEF0dHJpYnV0ZQoreworICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9OT05FKSwgbmFt
ZSgiIikKKyAgICB7CisgICAgfQorCisgICAgQXR0cmlidXRlKEdMZW51bSB0eXBlLCBjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCisgICAgeworICAgIH0K
KworICAgIEdMZW51bSB0eXBlOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7Cit9OworCit0eXBlZGVm
IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7CisKK2NsYXNzIFZlcnRleFNo
YWRlciA6IHB1YmxpYyBTaGFkZXIKK3sKKyAgICBmcmllbmQgUHJvZ3JhbTsKKworICBwdWJsaWM6
CisgICAgVmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOworCisg
ICAgflZlcnRleFNoYWRlcigpOworCisgICAgR0xlbnVtIGdldFR5cGUoKTsKKyAgICB2b2lkIGNv
bXBpbGUoKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0
cmlidXRlTmFtZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
VmVydGV4U2hhZGVyKTsKKworICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVzKCk7CisKKyAgICBBdHRy
aWJ1dGVBcnJheSBtQXR0cmlidXRlczsKK307CisKK2NsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVi
bGljIFNoYWRlcgoreworICBwdWJsaWM6CisgICAgRnJhZ21lbnRTaGFkZXIoQ29udGV4dCAqY29u
dGV4dCwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB+RnJhZ21lbnRTaGFkZXIoKTsKKworICAgIEdM
ZW51bSBnZXRUeXBlKCk7CisgICAgdm9pZCBjb21waWxlKCk7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOworfTsKK30KKworI2VuZGlm
ICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDk3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJlLmNw
cDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNz
ZXMKKy8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVy
ZSBvYmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGls
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9CbGl0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitUZXh0dXJlOjpJbWFnZTo6SW1hZ2UoKQor
ICA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRpcnR5KGZhbHNlKSwgc3VyZmFjZShOVUxMKQorewor
fQorCitUZXh0dXJlOjpJbWFnZTo6fkltYWdlKCkKK3sKKyAgaWYgKHN1cmZhY2UpIHN1cmZhY2Ut
PlJlbGVhc2UoKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0ICpjb250ZXh0KSA6IG1D
b250ZXh0KGNvbnRleHQpCit7CisgICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJ
TkVBUjsKKyAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOworICAgIG1XcmFwUyA9IEdMX1JFUEVB
VDsKKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7
CisgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7CisgICAgbUJh
c2VUZXh0dXJlID0gTlVMTDsKK30KKworVGV4dHVyZTo6flRleHR1cmUoKQoreworfQorCitCbGl0
ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKK3sKKyAgICByZXR1cm4gbUNvbnRleHQtPmdldEJsaXR0
ZXIoKTsKK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVw
ZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihH
TGVudW0gZmlsdGVyKQoreworICAgIHN3aXRjaCAoZmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgY2FzZSBHTF9ORUFSRVNU
X01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Cisg
ICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTElORUFS
X01JUE1BUF9MSU5FQVI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTWluRmlsdGVyICE9
IGZpbHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWluRmlsdGVyID0gZmls
dGVyOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwg
ZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6
OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQoreworICAgIHN3aXRjaCAoZmlsdGVyKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKKyAgICAgICAgICAgICAgICBt
RGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxp
ZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVtIHdyYXApCit7
CisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkVQRUFUOgorICAgICAg
Y2FzZSBHTF9DTEFNUF9UT19FREdFOgorICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8g
UmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0g
cGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKK3sKKyAgICBz
d2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6CisgICAgICBjYXNlIEdM
X0NMQU1QX1RPX0VER0U6CisgICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1XcmFwVCA9IHdyYXA7CisgICAgICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitHTGVudW0gVGV4
dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1pbkZpbHRlcjsKK30K
KworR0xlbnVtIFRleHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YWdGaWx0ZXI7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwUygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1XcmFwUzsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVdyYXBUOworfQorCitHTHVpbnQgVGV4dHVyZTo6Z2V0V2lkdGgoKSBjb25z
dAoreworICAgIHJldHVybiBtV2lkdGg7Cit9CisKK0dMdWludCBUZXh0dXJlOjpnZXRIZWlnaHQo
KSBjb25zdAoreworICAgIHJldHVybiBtSGVpZ2h0OworfQorCisvLyBTZWxlY3RzIGFuIGludGVy
bmFsIERpcmVjdDNEIDkgZm9ybWF0IGZvciBzdG9yaW5nIGFuIEltYWdlCitEM0RGT1JNQVQgVGV4
dHVyZTo6c2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIEQzREZNVF9B
OFI4RzhCODsKK30KKworaW50IFRleHR1cmU6OmltYWdlUGl0Y2goY29uc3QgSW1hZ2UgJmltZykg
Y29uc3QKK3sKKyAgICByZXR1cm4gaW1nLndpZHRoICogNDsKK30KKworLy8gU3RvcmUgdGhlIHBp
eGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQg
d2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0CisvLyBpbnRvIHRoZSBC
R1JBOCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4g
YmV0d2VlbiBlYWNoIGxpbmUuCit2b2lkIFRleHR1cmU6OmxvYWRJbWFnZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQ
aXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZTE2
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHNvdXJjZSk7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworCisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciByOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBnOworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBiOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhOworCisg
ICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgICAgICBhID0gc291cmNlW3hdOworICAgICAgICAg
ICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGcgPSAwOworICAgICAgICAgICAgICAgIGIg
PSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOgorICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeF07CisgICAgICAgICAgICAgICAg
ZyA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgICAgICBiID0gc291cmNlW3hdOworICAgICAgICAg
ICAgICAgIGEgPSAweEZGOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbMip4
KzBdOworICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgICAg
IGIgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbMip4KzFdOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgICAgIHIgPSBz
b3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IHNvdXJjZVt4ICogMyAr
IDFdOworICAgICAgICAgICAgICAgICAgICBiID0gc291cmNlW3ggKiAzICsgMl07CisgICAgICAg
ICAgICAgICAgICAgIGEgPSAweEZGOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9
IHNvdXJjZTE2W3hdOworCisgICAgICAgICAgICAgICAgICAgICAgICBhID0gMHhGRjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYg
MHgwMDFGKSA+PiAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3
RTApID4+IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHIgPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBy
ID0gc291cmNlW3ggKiA0ICsgMF07CisgICAgICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbeCAq
IDQgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4ICogNCArIDJdOworICAg
ICAgICAgICAgICAgICAgICBhID0gc291cmNlW3ggKiA0ICsgM107CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgYSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+IDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJn
YmEgJiAweDAwRjApID4+IDQpOworICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgocmdiYSAm
IDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgciA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+
IDEyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAocmdi
YSAmIDB4MDAwMSkgPyAweEZGIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoKHJn
YmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0Mw
KSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEY4MDApID4+
IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBiOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gZzsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHI7CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSBhOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6
OnNldEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWcpCit7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwor
CisgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDApCisgICAgeworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uod2lk
dGgsIGhlaWdodCwgc2VsZWN0Rm9ybWF0KGZvcm1hdCksIEQzRFBPT0xfU1lTVEVNTUVNLCAmbmV3
U3VyZmFjZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbWctPnN1cmZhY2Up
IGltZy0+c3VyZmFjZS0+UmVsZWFzZSgpOworICAgIGltZy0+c3VyZmFjZSA9IG5ld1N1cmZhY2U7
CisKKyAgICBpbWctPndpZHRoID0gd2lkdGg7CisgICAgaW1nLT5oZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgaW1nLT5mb3JtYXQgPSBmb3JtYXQ7CisKKyAgICBpZiAocGl4ZWxzICE9IE5VTEwgJiYgbmV3
U3VyZmFjZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5V
TEwsIDApOworCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAg
aWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkSW1hZ2VE
YXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgICAgIG5ld1N1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGltZy0+ZGlydHkgPSB0cnVl
OworICAgIH0KKworICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKK30KKwordm9pZCBUZXh0dXJl
OjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQoreworICAgIGlmICh3aWR0
aCArIHhvZmZzZXQgPiBpbWctPndpZHRoIHx8IGhlaWdodCArIHlvZmZzZXQgPiBpbWctPmhlaWdo
dCkgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworCisgICAgRDNETE9DS0VEX1JFQ1Qg
bG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9j
a2VkLCBOVUxMLCAwKTsKKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBsb2FkSW1hZ2VEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAgICAgICAgaW1nLT5zdXJm
YWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorCisgICAgaW1nLT5kaXJ0eSA9IHRydWU7Cit9CisK
K0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCit7CisgICAgaWYg
KCFpc0NvbXBsZXRlKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg
ICBpZiAobURpcnR5TWV0YURhdGEpCisgICAgeworICAgICAgICBtQmFzZVRleHR1cmUgPSBjcmVh
dGVUZXh0dXJlKCk7CisgICAgICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAobURpcnR5TWV0YURhdGEgfHwgZGlydHlJbWFnZURhdGEoKSkKKyAgICB7CisgICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOwor
ICAgIEFTU0VSVCghZGlydHlJbWFnZURhdGEoKSk7CisKKyAgICByZXR1cm4gbUJhc2VUZXh0dXJl
OworfQorCitib29sIFRleHR1cmU6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJldHVybiAobURp
cnR5IHx8IG1EaXJ0eU1ldGFEYXRhIHx8IGRpcnR5SW1hZ2VEYXRhKCkpOworfQorCisvLyBSZXR1
cm5zIHRoZSB0b3AtbGV2ZWwgdGV4dHVyZSBzdXJmYWNlIGFzIGEgcmVuZGVyIHRhcmdldAordm9p
ZCBUZXh0dXJlOjpuZWVkUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpZiAoIW1Jc1JlbmRlcmFibGUp
CisgICAgeworICAgICAgICBtQmFzZVRleHR1cmUgPSBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsK
KyAgICAgICAgbUlzUmVuZGVyYWJsZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGRpcnR5SW1h
Z2VEYXRhKCkpCisgICAgeworICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgfQorCisgICAg
bURpcnR5TWV0YURhdGEgPSBmYWxzZTsKK30KKwordm9pZCBUZXh0dXJlOjpkcm9wVGV4dHVyZSgp
Cit7CisgICAgaWYgKG1CYXNlVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1CYXNlVGV4dHVyZSA9
IE5VTEw7CisgICAgfQorCisgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNlOworfQorCit2b2lkIFRl
eHR1cmU6OnB1c2hUZXh0dXJlKElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9v
bCByZW5kZXJhYmxlKQoreworICAgIG1CYXNlVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgbURp
cnR5TWV0YURhdGEgPSBmYWxzZTsKKyAgICBtSXNSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTsKKyAg
ICBtRGlydHkgPSB0cnVlOworfQorCisKK0dMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBtYXhsZXZlbCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtYXhsZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gT3BlbkdM
IEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3QgZG9lcyBub3QgcGVybWl0IE5QT1Qg
bWlwbWFwcy4KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCitHTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUsIEdMaW50IG1heGxldmVsKSBjb25zdAoreworICAg
IHJldHVybiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplLCBtYXhsZXZlbCk7Cit9CisKK2ludCBU
ZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUJhc2VUZXh0dXJlID8g
bUJhc2VUZXh0dXJlLT5HZXRMZXZlbENvdW50KCkgOiAwOworfQorCitUZXh0dXJlMkQ6OlRleHR1
cmUyRChDb250ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK3sKKyAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOworfQorCitUZXh0dXJlMkQ6
On5UZXh0dXJlMkQoKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJQcm94eTsKKworICAgIGlm
IChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAg
IG1UZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0dMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdl
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Cit9CisKKy8vIFdoaWxlIE9w
ZW5HTCBkb2Vzbid0IGNoZWNrIHRleHR1cmUgY29uc2lzdGVuY3kgdW50aWwgZHJhdy10aW1lLCBE
M0Q5IHJlcXVpcmVzIGEgY29tcGxldGUgdGV4dHVyZQorLy8gZm9yIHJlbmRlci10by10ZXh0dXJl
IChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUgbm8gd2F5IG9mIGtlZXBpbmcgaW5kaXZp
ZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzLgorLy8gQ2FsbCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFy
IGxldmVsIG9mIHRoZSB0ZXh0dXJlIG11c3QgYmUgZGVmaW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9y
bWF0LCB3aWR0aCBhbmQgaGVpZ2h0LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3Rp
bmcgdGV4dHVyZSB3YXMgdW5zdWl0YWJsZSBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQg
d2lsbCBhbHNvIHNldAorLy8gYSBuZXcgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgdGhlIHRleHR1cmUg
Ynkgd29ya2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodC4KK2Jv
b2wgVGV4dHVyZTJEOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgYm9vbCB3aWR0
aE9rYXkgPSAobVdpZHRoID4+IGxldmVsID09IHdpZHRoKTsKKyAgICBib29sIGhlaWdodE9rYXkg
PSAobUhlaWdodCA+PiBsZXZlbCA9PSBoZWlnaHQpOworCisgICAgYm9vbCBzaXplT2theSA9ICgo
d2lkdGhPa2F5ICYmIGhlaWdodE9rYXkpCisgICAgICAgICAgICAgICAgICAgICB8fCAod2lkdGhP
a2F5ICYmIG1IZWlnaHQgPj4gbGV2ZWwgPT0gMCAmJiBoZWlnaHQgPT0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgIHx8IChoZWlnaHRPa2F5ICYmIG1XaWR0aCA+PiBsZXZlbCA9PSAwICYmIHdpZHRo
ID09IDEpKTsKKworICAgIGJvb2wgdGV4dHVyZU9rYXkgPSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxG
b3JtYXQgPT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKKworICAgIGlmICghdGV4dHVyZU9rYXkp
CisgICAgeworICAgICAgICBUUkFDRSgiUmVkZWZpbmluZyAyRCB0ZXh0dXJlICglZCwgMHglMDRY
LCAlZCwgJWQgPT4gMHglMDRYLCAlZCwgJWQpLiIsIGxldmVsLAorICAgICAgICAgICAgICBtSW1h
Z2VBcnJheVswXS5mb3JtYXQsIG1XaWR0aCwgbUhlaWdodCwKKyAgICAgICAgICAgICAgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8vIFB1cmdlIGFsbCB0aGUgbGV2
ZWxzIGFuZCB0aGUgdGV4dHVyZS4KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9U
RVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbaV0uc3VyZmFjZSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
c3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIGRyb3BUZXh0
dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBtV2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKKyAg
ICAgICAgbUhlaWdodCA9IGhlaWdodCA8PCBsZXZlbDsKKyAgICAgICAgbUltYWdlQXJyYXlbMF0u
Zm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgfQorCisgICAgcmV0dXJuICF0ZXh0dXJlT2th
eTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
Cit7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwor
dm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VS
VChtSW1hZ2VBcnJheVtsZXZlbF0uc3VyZmFjZSAhPSBOVUxMKTsKKworICAgIGlmIChsZXZlbCA8
IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2
ZWwgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNl
TGV2ZWwobGV2ZWwsICZkZXN0TGV2ZWwpOworCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2xldmVsXTsKKworICAgICAgICAgICAg
UkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geG9mZnNldDsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geW9mZnNldDsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgICAgIFBPSU5UIGRlc3RQb2ludDsK
KyAgICAgICAgICAgIGRlc3RQb2ludC54ID0geG9mZnNldDsKKyAgICAgICAgICAgIGRlc3RQb2lu
dC55ID0geW9mZnNldDsKKworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0
ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCAmc291cmNlUmVjdCwgZGVzdExldmVsLCAmZGVzdFBvaW50
KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAg
IGRlc3RMZXZlbC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICBpbWctPmRpcnR5ID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKKyAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvcHlJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpCit7
CisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpKQorICAgIHsKKyAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAg
IHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAod2lkdGggIT0g
MCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAg
IFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSB5
OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0
U3VyZmFjZUxldmVsKGxldmVsLCAmZGVzdCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3Jt
YXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFs
Rm9ybWF0LCAwLCAwLCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KKwor
ICAgIG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCA9IHdpZHRoOworICAgIG1JbWFnZUFycmF5W2xl
dmVsXS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLmZvcm1hdCA9IGlu
dGVybmFsRm9ybWF0OworfQorCit2b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpCit7CisgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCB8fCB5b2Zmc2V0
ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAocmVkZWZpbmVU
ZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbUltYWdlQXJyYXlbMF0ud2lkdGgsIG1J
bWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgeworICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgfQorCisgICAgaWYg
KGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgUkVDVCBzb3VyY2VSZWN0Owor
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0g
eCArIHdpZHRoOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgIHNvdXJjZVJl
Y3QuYm90dG9tID0geSArIGhlaWdodDsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dDsKKyAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWws
ICZkZXN0KTsKKworICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5n
ZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF0uZm9ybWF0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KK30K
KworLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCitib29sIFRleHR1cmUyRDo6aXNDb21w
bGV0ZSgpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLndpZHRo
OworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uaGVpZ2h0OworCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYm9vbCBtaXBtYXBwaW5nID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1N
aW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9M
SU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9N
SVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAg
ICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGluZyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lk
dGgpKQorICAgICAgICB8fCAoZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1Bv
dzIoaGVpZ2h0KSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlz
UG93MihoZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwor
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5mb3JtYXQgIT0gbUltYWdl
QXJyYXlbMF0uZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVs
XS53aWR0aCAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4g
bGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisv
LyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1
cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQorSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIElEaXJlY3QzRFRleHR1cmU5
ICp0ZXh0dXJlOworCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXS5mb3Jt
YXQpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRo
LCBtSGVpZ2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCAwLCBmb3JtYXQs
IEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICB9CisK
KyAgICBpZiAobVRleHR1cmUpIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgbVRleHR1cmUgPSB0
ZXh0dXJlOworICAgIHJldHVybiB0ZXh0dXJlOworfQorCit2b2lkIFRleHR1cmUyRDo6dXBkYXRl
VGV4dHVyZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworCisgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VB
cnJheVtsZXZlbF0uZGlydHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpsZXZlbFN1cmZhY2UgPSBOVUxMOworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmbGV2ZWxTdXJmYWNlKTsKKworICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+VXBkYXRlU3VyZmFjZShtSW1hZ2VBcnJheVtsZXZlbF0uc3VyZmFjZSwgTlVMTCwgbGV2
ZWxTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgbGV2ZWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uZGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJl
MkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKnRl
eHR1cmUgPSBOVUxMOworCisgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEQzREZP
Uk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKKworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShtV2lkdGgsIG1IZWln
aHQsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgbUhlaWdodCwgMCksIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RC
YXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2U7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAmc291cmNlKTsK
KworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Q7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZkZXN0
KTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxl
YXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRF
WEZfTk9ORSk7CisKKyAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0
M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtVGV4dHVyZSAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBt
VGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCitib29sIFRleHR1
cmUyRDo6ZGlydHlJbWFnZURhdGEoKSBjb25zdAoreworICAgIGludCBxID0gbG9nMihzdGQ6Om1h
eChtV2lkdGgsIG1IZWlnaHQpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHE7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5kaXJ0eSkgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVN
aXBtYXBzKCkKK3sKKyAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS53aWR0aCkgfHwgIWlz
UG93MihtSW1hZ2VBcnJheVswXS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZl
bHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQg
bWlwbWFwIGxldmVscy4KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobVdpZHRo
LCBtSGVpZ2h0KSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLnN1cmZhY2UgIT0gTlVMTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZS0+UmVsZWFzZSgpOworICAg
ICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgIH0KKworICAg
ICAgICBtSW1hZ2VBcnJheVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgIG1JbWFnZUFycmF5
W2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmZvcm1hdDsKKyAgICAgICAgbUltYWdlQXJyYXlb
aV0ud2lkdGggPSBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS53aWR0aCA+PiBpLCAxKTsKKyAgICAg
ICAgbUltYWdlQXJyYXlbaV0uaGVpZ2h0ID0gc3RkOjptYXgobUltYWdlQXJyYXlbMF0uaGVpZ2h0
ID4+IGksIDEpOworICAgIH0KKworICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICB7CisgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICp1cHBlciA9IE5VTEw7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dl
ciA9IE5VTEw7CisKKyAgICAgICAgbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLTEsICZ1cHBl
cik7CisgICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaSwgJmxvd2VyKTsKKworICAg
ICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQorICAgICAgICB7CisgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIH0KK30KKworQ29sb3Ji
dWZmZXIgKlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBp
ZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZlciAqKU5VTEwpOworICAgIH0KKworICAg
IGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Cit9CisKK0lEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIEFT
U0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisKKyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7
CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtVGV4
dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZyZW5kZXJUYXJnZXQpOworCisgICAgcmV0dXJuIHJl
bmRlclRhcmdldDsKK30KKworVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKENvbnRleHQg
KmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAgbUZhY2VQcm94
aWVzW2ldID0gTlVMTDsKKyAgICB9Cit9CisKK1RleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVN
YXAoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIG1GYWNlUHJveGllc1tpXTsKKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUpCisgICAg
eworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdl
KDAsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDEsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDIsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWShHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDMsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9
CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQoreworICAgIHNldEltYWdlKDQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIHNldEltYWdlKDUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sK
KyAgICBpbnQgZmFjZSA9IGZhY2VJbmRleChmYWNlVGFyZ2V0KTsKKworICAgIEFTU0VSVChtSW1h
Z2VBcnJheVtmYWNlXVtsZXZlbF0uc3VyZmFjZSAhPSBOVUxMKTsKKworICAgIGlmIChsZXZlbCA8
IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2
ZWwgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCk7CisgICAgICAgIEFTU0VSVChkZXN0
TGV2ZWwgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQorICAgICAg
ICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsK
KworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC5s
ZWZ0ID0geG9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geW9mZnNldDsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAgICAgICAgICAgIFBP
SU5UIGRlc3RQb2ludDsKKyAgICAgICAgICAgIGRlc3RQb2ludC54ID0geG9mZnNldDsKKyAgICAg
ICAgICAgIGRlc3RQb2ludC55ID0geW9mZnNldDsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBnZXREZXZpY2UoKS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsICZzb3VyY2VSZWN0
LCBkZXN0TGV2ZWwsICZkZXN0UG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
ICAgIGltZy0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQoreworICAgIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VB
cnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgY29tbWl0UmVjdChmYWNlLCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisKKy8vIFRlc3RzIGZvciBH
TCB0ZXh0dXJlIG9iamVjdCBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDMuNy4xMCBwYWdlIDgxLgorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS53aWR0aDsKKworICAgIGlmIChz
aXplIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCBtaXBtYXBwaW5nOworCisgICAgc3dpdGNoIChtTWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICBtaXBtYXBwaW5n
ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9O
RUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9M
SU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgZm9yIChpbnQgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
MF0ud2lkdGggIT0gc2l6ZSB8fCBtSW1hZ2VBcnJheVtmYWNlXVswXS5oZWlnaHQgIT0gc2l6ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBpZiAoIWlzUG93MihzaXplKSAm
JiAoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdyYXBUKCkgIT0gR0xfQ0xB
TVBfVE9fRURHRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBxID0gbG9nMihzaXplKTsKKworICAgICAgICBmb3IgKGludCBm
YWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZm9ybWF0ICE9IG1JbWFnZUFy
cmF5WzBdWzBdLmZvcm1hdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
bUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLndpZHRoICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2
ZWwpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFTU0VSVChtSW1hZ2VBcnJh
eVtmYWNlXVtsZXZlbF0uaGVpZ2h0ID09IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS53aWR0aCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKK0lEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBz
ZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKworICAgIElEaXJlY3QzREN1
YmVUZXh0dXJlOSAqdGV4dHVyZTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgMCksIDAsIGZvcm1h
dCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgIH0K
KworICAgIGlmIChtVGV4dHVyZSkgbVRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgIG1UZXh0dXJl
ID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnVwZGF0ZVRleHR1cmUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisg
ICAgeworICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKKworICAgICAgICAg
ICAgaWYgKGltZy0+ZGlydHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmxldmVsU3VyZmFjZSA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVs
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGV2ZWxTdXJmYWNlICE9IE5VTEwpOworCisgICAg
ICAgICAgICAgICAgaWYgKGxldmVsU3VyZmFjZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZh
Y2UoaW1nLT5zdXJmYWNlLCBOVUxMLCBsZXZlbFN1cmZhY2UsIE5VTEwpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgICAg
IGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgIGltZy0+ZGly
dHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNvbnZl
cnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJl
ID0gTlVMTDsKKworICAgIGlmIChtV2lkdGggIT0gMCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RG
b3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUobVdpZHRoLCBjcmVhdGlvbkxldmVscyhtV2lk
dGgsIDApLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAm
dGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYg
PCA2OyBmKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZXZlbHM7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2U7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VT
PihmKSwgaSwgJnNvdXJjZSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8
RDNEQ1VCRU1BUF9GQUNFUz4oZiksIGksICZkZXN0KTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEwsIGRlc3QsIE5V
TEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxM
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBtVGV4dHVyZSA9IHRl
eHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICByZWRlZmlu
ZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCk7CisKKyAgICBUZXh0dXJlOjpz
ZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdKTsKK30KKwordW5zaWduZWQgaW50IFRleHR1
cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCit7CisgICAgTUVUQV9BU1NFUlQoR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YID09IDEpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKKyAgICBNRVRBX0FTU0VS
VChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggPT0gMyk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOworICAgIE1FVEFf
QVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCA9PSA1KTsKKworICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOworfQorCitib29sIFRleHR1cmVDdWJlTWFwOjpkaXJ0eUltYWdlRGF0
YSgpIGNvbnN0Cit7CisgICAgaW50IHEgPSBsb2cyKG1XaWR0aCk7CisKKyAgICBmb3IgKGludCBm
ID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHE7
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLmRpcnR5
KSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sgdGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRp
bCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21wbGV0ZSB0ZXh0dXJlCisvLyBmb3IgcmVu
ZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleEltYWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yg
a2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBsZXZlbHMgJiBmYWNlcy4KKy8vIENhbGwg
dGhpcyB3aGVuIGEgcGFydGljdWxhciBsZXZlbCBvZiB0aGUgdGV4dHVyZSBtdXN0IGJlIGRlZmlu
ZWQgd2l0aCBhIHNwZWNpZmljIGZvcm1hdCwgd2lkdGggYW5kIGhlaWdodC4KKy8vCisvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGV4aXN0aW5nIHRleHR1cmUgd2FzIHVuc3VpdGFibGUgaGFkIHRvIGJl
IGRlc3Ryb3llZC4gSWYgc28sIGl0IHdpbGwgYWxzbyBzZXQKKy8vIGEgbmV3IHNpemUgZm9yIHRo
ZSB0ZXh0dXJlIGJ5IHdvcmtpbmcgYmFja3dhcmRzIGZyb20gdGhlIGdpdmVuIHNpemUuCitib29s
IFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCkKK3sKKyAgICAvLyBBcmUgdGhlc2Ugc2V0dGluZ3Mg
Y29tcGF0aWJsZSB3aXRoIGxldmVsIDA/CisgICAgYm9vbCBzaXplT2theSA9IChtSW1hZ2VBcnJh
eVswXVswXS53aWR0aCA+PiBsZXZlbCA9PSB3aWR0aCk7CisKKyAgICBib29sIHRleHR1cmVPa2F5
ID0gKHNpemVPa2F5ICYmIGludGVybmFsRm9ybWF0ID09IG1JbWFnZUFycmF5WzBdWzBdLmZvcm1h
dCk7CisKKyAgICBpZiAoIXRleHR1cmVPa2F5KQorICAgIHsKKyAgICAgICAgVFJBQ0UoIlJlZGVm
aW5pbmcgY3ViZSB0ZXh0dXJlICglZCwgMHglMDRYLCAlZCA9PiAweCUwNFgsICVkKS4iLCBsZXZl
bCwKKyAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0LCBtSW1hZ2VBcnJheVsw
XVswXS53aWR0aCwKKyAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQsIHdpZHRoKTsKKworICAg
ICAgICAvLyBQdXJnZSBhbGwgdGhlIGxldmVscyBhbmQgdGhlIHRleHR1cmUuCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlICE9IE5VTEwpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5kaXJ0
eSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZh
Y2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uc3Vy
ZmFjZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAg
ICAgICAgICBkcm9wVGV4dHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgbVdpZHRoID0gd2lk
dGggPDwgbGV2ZWw7CisgICAgICAgIG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID0gd2lkdGggPDwg
bGV2ZWw7CisgICAgICAgIG1IZWlnaHQgPSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUltYWdl
QXJyYXlbMF1bMF0uaGVpZ2h0ID0gd2lkdGggPDwgbGV2ZWw7CisKKyAgICAgICAgbUltYWdlQXJy
YXlbMF1bMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgfQorCisgICAgcmV0dXJuICF0
ZXh0dXJlT2theTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpCit7
CisgICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleChmYWNlKTsKKworICAgIGlm
IChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCkpCisgICAgewor
ICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRl
eHR1cmUsIHRydWUpOworICAgIH0KKworICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOworCisg
ICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAg
IFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSB5
OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCk7CisK
KyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsKKyAgICAgICAg
ZGVzdC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2
ZWxdLndpZHRoID0gd2lkdGg7CisgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaGVp
Z2h0ID0gaGVpZ2h0OworICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmZvcm1hdCA9
IGludGVybmFsRm9ybWF0OworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6
OmdldEN1YmVNYXBTdXJmYWNlKHVuc2lnbmVkIGludCBmYWNlSWRlbnRpZmllciwgdW5zaWduZWQg
aW50IGxldmVsKQoreworICAgIHVuc2lnbmVkIGludCBmYWNlSW5kZXg7CisKKyAgICBpZiAoZmFj
ZUlkZW50aWZpZXIgPCA2KQorICAgIHsKKyAgICAgICAgZmFjZUluZGV4ID0gZmFjZUlkZW50aWZp
ZXI7CisgICAgfQorICAgIGVsc2UgaWYgKGZhY2VJZGVudGlmaWVyID49IEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCAmJiBmYWNlSWRlbnRpZmllciA8PSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1opCisgICAgeworICAgICAgICBmYWNlSW5kZXggPSBmYWNlSWRlbnRpZmllciAt
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgZmFjZUluZGV4ID0gMDsKKyAgICB9CisK
KyAgICBpZiAobVRleHR1cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlID0gTlVMTDsKKworICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1
cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNFUz4oZmFjZUluZGV4KSwgbGV2ZWwsICZz
dXJmYWNlKTsKKworICAgIHJldHVybiAoU1VDQ0VFREVEKGhyKSkgPyBzdXJmYWNlIDogTlVMTDsK
K30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQorewor
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdLndp
ZHRoOworCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdo
dCA+IHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgfQorCisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZSgwLCBtSW1hZ2VBcnJheVswXVswXS5m
b3JtYXQsIG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdldFJlbmRlclRhcmdldChmYWNlKTsKKyAg
ICB9CisKKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBSRUNU
IHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAg
ICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOworCisgICAg
ICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgp
LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQs
IGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgfQorfQorCitib29sIFRleHR1
cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1JbWFnZUFycmF5
WzBdWzBdLndpZHRoID09IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDE7IGYgPCA2OyBmKyspCisgICAgeworICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZl1bMF0ud2lkdGggIT0gbUltYWdlQXJyYXlbMF1bMF0ud2lkdGgK
KyAgICAgICAgICAgIHx8IG1JbWFnZUFycmF5W2ZdWzBdLmZvcm1hdCAhPSBtSW1hZ2VBcnJheVsw
XVswXS5mb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFw
OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdWzBd
LndpZHRoKSB8fCAhaXNDdWJlQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2
ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVk
IG1pcG1hcCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBd
WzBdLndpZHRoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZhY2UgIT0gTlVMTCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZSA9
IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmRp
cnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmZvcm1hdCA9IG1J
bWFnZUFycmF5W2ZdWzBdLmZvcm1hdDsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLndp
ZHRoID0gc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0ud2lkdGggPj4gaSwgMSk7CisgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmXVtpXS5oZWlnaHQgPSBtSW1hZ2VBcnJheVtmXVtpXS53aWR0aDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShmLCBpLTEpOworICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZiwgaSk7
CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIs
IGxvd2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwp
IHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXIt
PlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ29sb3JidWZmZXIgKlRleHR1cmVD
dWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQoreworICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOworCisgICAgaWYgKG1GYWNlUHJv
eGllc1tmYWNlXSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0g
bmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCk7CisgICAgfQorCisgICAg
cmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBBU1NFUlQo
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAgIG5lZWRSZW5kZXJUYXJnZXQo
KTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIG1U
ZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihm
YWNlSW5kZXgodGFyZ2V0KSksIDAsICZyZW5kZXJUYXJnZXQpOworCisgICAgcmV0dXJuIHJlbmRl
clRhcmdldDsKK30KKworVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OlRleHR1cmVD
b2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpCisgIDogQ29s
b3JidWZmZXIoTlVMTCksIG1UZXh0dXJlKHRleHR1cmUpLCBtVGFyZ2V0KHRhcmdldCkKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmU6OlRleHR1cmVDb2xv
cmJ1ZmZlclByb3h5OjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0
KSBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICBtUmVuZGVyVGFyZ2V0ID0gbVRleHR1
cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0
OworfQorCitpbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFdpZHRoKCkK
K3sKKyAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKCk7Cit9CisKK2ludCBUZXh0dXJlOjpU
ZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0SGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1
cmUtPmdldEhlaWdodCgpOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGV4dHVyZS5oOiBEZWZpbmVz
IHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQK
Ky8vIGNsYXNzZXMgVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0
ZXh0dXJlIG9iamVjdHMgYW5kCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgorCisjaWZuZGVmIExJQkdMRVNWMl9URVhUVVJF
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQz
ZDkuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVz
cGFjZSBnbAoreworY2xhc3MgQ29udGV4dDsKK2NsYXNzIEJsaXQ7CisKK2VudW0KK3sKKyAgICBN
QVhfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0g
MjA0OCwKKworICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9IDEyICAgLy8gMStsb2cyIG9mIE1BWF9U
RVhUVVJFX1NJWkUKK307CisKK2NsYXNzIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IFRleHR1cmUoQ29udGV4dCAqY29udGV4dCk7CisKKyAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7
CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9IDA7CisKKyAgICBib29s
IHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVu
dW0gZmlsdGVyKTsKKyAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKKyAgICBib29sIHNl
dFdyYXBUKEdMZW51bSB3cmFwKTsKKworICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBTKCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgZ2V0V2lk
dGgoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0ID0gMDsKKworICAgIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqZ2V0VGV4dHVyZSgpOworICAgIHZpcnR1YWwgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVy
KEdMZW51bSB0YXJnZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMo
KSA9IDA7CisKKyAgICBib29sIGlzRGlydHkoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAg
Y2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVD
b2xvcmJ1ZmZlclByb3h5OworICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5IDogcHVi
bGljIENvbG9yYnVmZmVyCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlQ29s
b3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICAgICAg
ICAgIC8vIHRhcmdldCBpcyBhIDJELWxpa2UgdGV4dHVyZSB0YXJnZXQgKEdMX1RFWFRVUkVfMkQg
b3Igb25lIG9mIHRoZSBjdWJlIGZhY2UgdGFyZ2V0cykKKworICAgICAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICB2aXJ0dWFsIGludCBn
ZXRXaWR0aCgpOworICAgICAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKTsKKworICAgICAgcHJp
dmF0ZToKKyAgICAgICAgVGV4dHVyZSAqbVRleHR1cmU7CisgICAgICAgIEdMZW51bSBtVGFyZ2V0
OworICAgIH07CisKKyAgICAvLyBIZWxwZXIgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHNpbmds
ZSBpbWFnZSBsYXllcgorICAgIHN0cnVjdCBJbWFnZQorICAgIHsKKyAgICAgICAgSW1hZ2UoKTsK
KyAgICAgICAgfkltYWdlKCk7CisKKyAgICAgICAgR0xzaXplaSB3aWR0aDsKKyAgICAgICAgR0xz
aXplaSBoZWlnaHQ7CisgICAgICAgIEdMZW51bSBmb3JtYXQ7CisKKyAgICAgICAgYm9vbCBkaXJ0
eTsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZTsKKyAgICB9OworCisgICAg
c3RhdGljIEQzREZPUk1BVCBzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CisgICAgaW50IGlt
YWdlUGl0Y2goY29uc3QgSW1hZ2UmIGltZykgY29uc3Q7CisKKyAgICBHTGVudW0gbU1pbkZpbHRl
cjsKKyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKKyAgICBHTGVudW0gbVdyYXBTOworICAgIEdMZW51
bSBtV3JhcFQ7CisKKyAgICB2b2lkIHNldEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisKKyAgICB2b2lkIG5lZWRSZW5kZXJUYXJnZXQoKTsK
KworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXpl
aSBzaXplLCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisKKyAgICAvLyBUaGUgcG9pbnRlciByZXR1
cm5lZCBpcyB3ZWFrIGFuZCBpdCBpcyBhc3N1bWVkIHRoZSBkZXJpdmVkIGNsYXNzIHdpbGwga2Vl
cCBhIHN0cm9uZyBwb2ludGVyIHVudGlsIHRoZSBuZXh0IGNyZWF0ZVRleHR1cmUoKSBjYWxsLgor
ICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7CisgICAgdmlydHVh
bCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsK
KworICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZv
aWQgZHJvcFRleHR1cmUoKTsKKyAgICB2b2lkIHB1c2hUZXh0dXJlKElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqbmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxlKTsKKworICAgIEJsaXQgKmdldEJsaXR0
ZXIoKTsKKworICAgIHVuc2lnbmVkIGludCBtV2lkdGg7CisgICAgdW5zaWduZWQgaW50IG1IZWln
aHQ7CisKKyAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOworCisgICAgQ29udGV4dCAqbUNvbnRleHQ7
CisKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm1CYXNlVGV4dHVyZTsgLy8gVGhpcyBpcyBh
IHdlYWsgcG9pbnRlci4gVGhlIGRlcml2ZWQgY2xhc3MgaXMgYXNzdW1lZCB0byBvd24gYSBzdHJv
bmcgcG9pbnRlci4KKyAgICBib29sIG1EaXJ0eU1ldGFEYXRhOworICAgIGJvb2wgbUlzUmVuZGVy
YWJsZTsKKworICAgIGJvb2wgbURpcnR5OworCisgICAgdm9pZCBsb2FkSW1hZ2VEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Cit9OworCitjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMg
VGV4dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dHVyZTJEKENvbnRleHQgKmNv
bnRleHQpOworCisgICAgflRleHR1cmUyRCgpOworCisgICAgR0xlbnVtIGdldFRhcmdldCgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2
b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNv
cHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2Up
OworICAgIHZvaWQgY29weVN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworCisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisKKyAgICB2aXJ0dWFsIENv
bG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOworCisgICAgdmlydHVhbCBJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0YSgp
IGNvbnN0OworCisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICBJ
bWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSURpcmVjdDNEVGV4
dHVyZTkgKm1UZXh0dXJlOworCisgICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkgKm1Db2xvcmJ1
ZmZlclByb3h5OworCisgICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAg
dmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
OworfTsKKworY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJs
aWM6CisgICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAoQ29udGV4dCAqY29udGV4dCk7CisKKyAg
ICB+VGV4dHVyZUN1YmVNYXAoKTsKKworICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQ
b3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OworCisgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOworICAgIHZvaWQgY29weUltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworICAgIHZvaWQgY29weVN1Yklt
YWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRl
cmJ1ZmZlciAqc291cmNlKTsKKworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworCisgICAgdmlydHVhbCBDb2xvcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOworCisgICAgdmlydHVhbCBJRGly
ZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0YSgpIGNv
bnN0OworCisgICAgLy8gZmFjZUlkZW50aWZpZXIgaXMgMC01IG9yIG9uZSBvZiB0aGUgR0xfVEVY
VFVSRV9DVUJFX01BUF8qIGVudW1lcmFudHMuCisgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSBj
YWxsIHVuZGVybHlpbmcgRGlyZWN0M0QgY2FsbCBmYWlscy4KKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQgaW50IGZhY2VJZGVudGlmaWVyLCB1bnNpZ25l
ZCBpbnQgbGV2ZWwpOworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVt
IGZhY2UpOworCisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0OworCisgICAgdm9pZCBz
ZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBjb21t
aXRSZWN0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIGJvb2wgcmVk
ZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
d2lkdGgpOworCisgICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bTUFYX1RFWFRVUkVfTEVWRUxTXTsK
KworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7CisKKyAgICBUZXh0dXJlQ29s
b3JidWZmZXJQcm94eSAqbUZhY2VQcm94aWVzWzZdOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworfTsKK30KKworI2VuZGlm
ICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTA0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbGli
R0xFU3YyLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgT3BlbkdMIEVTIDIuMCBmdW5jdGlv
bnMuCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1
ZGUgPEdMRVMyL2dsMmV4dC5oPgorCisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorI2luY2x1ZGUgPGxp
bWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKK2V4dGVybiAiQyIKK3sKKwordm9pZCBfX3N0ZGNhbGwg
Z2xBY3RpdmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRl
eHR1cmUgPSAweCVYKSIsIHRleHR1cmUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAo
dGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhUVVJFMCArIGdsOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRBY3RpdmVTYW1wbGVyKHRleHR1cmUgLSBH
TF9URVhUVVJFMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hTaGFkZXIoR0x1aW50IHByb2dyYW0sIEdMdWlu
dCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hh
ZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBnbDo6U2hhZGVy
ICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNoYWRlck9iamVj
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UHJvZ3Jh
bShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5hdHRhY2hTaGFkZXIoc2hh
ZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEF0dHJp
YkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIGNvbnN0IEdMY2hhciogbmFt
ZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVk
LCBjb25zdCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsIHByb2dyYW0sIGluZGV4LCBuYW1lKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChzdHJuY21wKG5hbWUsICJnbF8iLCAzKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihp
bmRleCwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBi
dWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGJ1ZmZl
ciA9ICVkKSIsIHRhcmdldCwgYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xC
aW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBmcmFtZWJ1ZmZlciA9ICVkKSIs
IHRhcmdldCwgZnJhbWVidWZmZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFy
Z2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgcmVuZGVy
YnVmZmVyID0gJWQpIiwgdGFyZ2V0LCByZW5kZXJidWZmZXIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZW5kZXJidWZm
ZXIocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIEdM
dWludCB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWlu
dCB0ZXh0dXJlID0gJWQpIiwgdGFyZ2V0LCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgICAgIGlm
ICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVPYmplY3QtPmdldFRhcmdldCgpICE9IHRhcmdldCAm
JiB0ZXh0dXJlICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTJEKHRleHR1cmUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlQ3ViZU1hcCh0
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4s
IEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYg
cmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFt
cGYgYWxwaGEgPSAlZikiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZENvbG9yKGdsOjpjbGFtcDAxKHJlZCksIGdsOjpjbGFtcDAxKGdyZWVu
KSwgZ2w6OmNsYW1wMDEoYmx1ZSksIGdsOjpjbGFtcDAxKGFscGhhKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVu
ZEVxdWF0aW9uKEdMZW51bSBtb2RlKQoreworICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGUsIG1vZGUpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShH
TGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBt
b2RlUkdCID0gMHglWCwgR0xlbnVtIG1vZGVBbHBoYSA9IDB4JVgpIiwgbW9kZVJHQiwgbW9kZUFs
cGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlUkdCKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNf
U1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1vZGVB
bHBoYSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6CisgICAgICAgICAg
Y2FzZSBHTF9GVU5DX1NVQlRSQUNUOgorICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NV
QlRSQUNUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZEVxdWF0aW9u
KG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3Is
IEdMZW51bSBkZmFjdG9yKQoreworICAgIGdsQmxlbmRGdW5jU2VwYXJhdGUoc2ZhY3RvciwgZGZh
Y3Rvciwgc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5j
U2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBH
TGVudW0gZHN0QWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gc3JjUkdCID0gMHglWCwgR0xl
bnVtIGRzdFJHQiA9IDB4JVgsIEdMZW51bSBzcmNBbHBoYSA9IDB4JVgsIEdMZW51bSBkc3RBbHBo
YSA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhh
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzcmNSR0IpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6CisgICAgICAg
ICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NP
TE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05F
X01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAgICAgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQUxQ
SEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19B
TFBIQV9TQVRVUkFURToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAoZHN0UkdCKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJP
OgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdM
X0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAg
ICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xf
T05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKHNyY0FscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgor
ICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RT
VF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAg
ICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FM
UEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05F
X01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
QUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGRzdEFscGhhKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05F
OgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6
CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2Ug
R0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAg
ICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6Cisg
ICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNvbnN0YW50Q29sb3JVc2Vk
ID0gKHNyY1JHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBzcmNSR0IgPT0gR0xfT05FX01JTlVT
X0NPTlNUQU5UX0NPTE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0
UkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IGRzdFJHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQ09MT1IpOworCisgICAgICAgIGJvb2wgY29uc3RhbnRBbHBoYVVzZWQgPSAoc3JjUkdCID09
IEdMX0NPTlNUQU5UX0FMUEhBIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQ
SEEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09O
U1RBTlRfQUxQSEEgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSk7CisK
KyAgICAgICAgaWYgKGNvbnN0YW50Q29sb3JVc2VkICYmIGNvbnN0YW50QWxwaGFVc2VkKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIlNpbXVsdGFuZW91cyB1c2Ugb2YgR0xfQ09OU1RBTlRf
QUxQSEEvR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIGFuZCBHTF9DT05TVEFOVF9DT0xPUi9H
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgaW52YWxpZCB1bmRlciBXZWJHTCIpOworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRG
YWN0b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQnVm
ZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0
YSwgR0xlbnVtIHVzYWdlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
c2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwLCBHTGVudW0g
dXNhZ2UgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN3aXRjaCAodXNhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9EUkFX
OgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6CisgICAgICAgICAgY2FzZSBHTF9EWU5B
TUlDX0RSQVc6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKwor
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQt
PmdldEFycmF5QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0g
Y29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVy
RGF0YShkYXRhLCBzaXplLCB1c2FnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRhKEdMZW51bSB0
YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRh
dGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhw
KSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoc2l6ZSA8IDAgfHwgb2Zmc2V0IDwgMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAg
ICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoKHNpemVfdClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZmZXItPmJ1ZmZlclN1YkRhdGEoZGF0YSwg
c2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0g
dGFyZ2V0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpOwor
CisgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihHTGJpdGZpZWxkIG1hc2spCit7CisgICAgVFJB
Q0UoIihHTGJpdGZpZWxkIG1hc2sgPSAlWCkiLCBtYXNrKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5jbGVhcihtYXNr
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbENsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xj
bGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGNsYW1wZiByZWQg
PSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9ICVmLCBHTGNsYW1wZiBh
bHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xl
YXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgpCit7CisgICAgVFJBQ0UoIihHTGNsYW1wZiBkZXB0aCA9
ICVmKSIsIGRlcHRoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhckRlcHRoKGRlcHRoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bENsZWFyU3RlbmNpbChHTGludCBzKQoreworICAgIFRSQUNFKCIoR0xpbnQgcyA9ICVkKSIsIHMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldENsZWFyU3RlbmNpbChzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbG9yTWFzayhHTGJv
b2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxw
aGEpCit7CisgICAgVFJBQ0UoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9
ICVkLCBHTGJvb2xlYW4gYmx1ZSA9ICVkLCBHTGJvb2xlYW4gYWxwaGEgPSAlZCkiLAorICAgICAg
ICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDb2xvck1hc2socmVk
ID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUgPT0gR0xfVFJVRSwgYWxwaGEgPT0g
R0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFk
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYg
KCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Y29tcGlsZSgp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiIAorICAgICAgICAgICJHTHNpemVpIGhlaWdo
dCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3Qg
R0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRV
UkVfTEVWRUxTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYg
IWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIHVsdGlt
YXRlbHkgd2UgZG9uJ3Qgc3VwcG9ydCBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9
ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xzaXplaSBpbWFnZVNpemUg
PSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXpl
LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6SXNUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+
IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh4b2Zmc2V0
IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwg
PiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Miho
ZWlnaHQpKSB8fCBpbWFnZVNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeG9mZnNl
dCAhPSAwIHx8IHlvZmZzZXQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIFRoZSB0ZXh0dXJlIGJlaW5nIG9wZXJhdGVk
IG9uIGlzIG5vdCBhIGNvbXByZXNzZWQgdGV4dHVyZS4KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVy
ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGxl
dmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdo
dCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6
TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9T
SVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+
PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9S
R0I6CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3Vy
Y2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworCisgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2Uo
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zm
c2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIs
CisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRh
cmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwg
PiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8
IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RkOjpu
dW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpu
dW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRG
cmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlUHJvZ3JhbSh2b2lkKQorewor
ICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQorewor
ICAgIFRSQUNFKCIoR0xlbnVtIHR5cGUgPSAweCVYKSIsIHR5cGUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDdWxsRmFjZShHTGVudW0gbW9k
ZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9GUk9OVDoKKyAgICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9G
Uk9OVF9BTkRfQkFDSzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEN1bGxNb2RlKG1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUJ1ZmZlcnMoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29u
c3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZlcihidWZmZXJzW2ld
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4s
IGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0g
JWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZl
cnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
c1tpXSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCit7CisgICAg
VFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHgl
MC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXJzW2ldKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAg
IFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChzaGFkZXIgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVGV4dHVyZXMoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQs
IGNvbnN0IEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlc1tpXSAhPSAwKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZSh0ZXh0dXJlc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGZ1bmMgPSAw
eCVYKSIsIGZ1bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZ1bmMpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgIGNhc2UgR0xfQUxX
QVlTOgorICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICBjYXNlIEdMX0xFUVVBTDoK
KyAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKKyAg
ICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX05PVEVRVUFMOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aEZ1bmMoZnVuYyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCit7CisgICAgVFJBQ0UoIihHTGJvb2xlYW4gZmxh
ZyA9ICVkKSIsIGZsYWcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoTWFzayhmbGFnICE9IEdMX0ZBTFNF
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERlcHRoUmFuZ2VmKEdMY2xhbXBmIHpOZWFyLCBHTGNsYW1wZiB6RmFyKQor
eworICAgIFRSQUNFKCIoR0xjbGFtcGYgek5lYXIgPSAlZiwgR0xjbGFtcGYgekZhciA9ICVmKSIs
IHpOZWFyLCB6RmFyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbERldGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKK3sKKyAg
ICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9n
cmFtLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0
ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7CisgICAgICAgICAgICAgICAgc2hhZGVyQnlQ
cm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pOworICAgICAgICAgICAg
ICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1C
eVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBj
YXAgPSAweCVYKSIsIGNhcCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxs
RmFjZShmYWxzZSk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9Q
T0xZR09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKGZh
bHNlKTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19D
T1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGZhbHNlKTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0
LT5zZXRTYW1wbGVDb3ZlcmFnZShmYWxzZSk7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0
KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxf
VEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3QoZmFsc2UpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXREZXB0aFRlc3QoZmFsc2UpOyAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJs
ZW5kKGZhbHNlKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0aGVyKGZhbHNlKTsgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KQoreworICAgIFRSQUNFKCIo
R0x1aW50IGluZGV4ID0gJWQpIiwgaW5kZXgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJF
bmFibGVkKGluZGV4LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBH
TGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0g
MHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkKSIsIG1vZGUsIGZpcnN0
LCBjb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgZmly
c3QgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNl
cyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3RWxl
bWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRW5hYmxlKEdMZW51
bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTog
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UodHJ1ZSk7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIGNv
bnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKHRydWUpOyAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVB
bHBoYVRvQ292ZXJhZ2UodHJ1ZSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2UodHJ1ZSk7ICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dGVuY2lsVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhUZXN0KHRydWUpOyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKHRydWUpOyAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXREaXRoZXIodHJ1ZSk7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGlu
ZGV4KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5kZXgpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCB0cnVlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZpbmlz
aCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbmlzaCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRmx1c2godm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5mbHVzaCgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWludCByZW5kZXJidWZmZXIp
Cit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQg
PSAweCVYLCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0ID0gMHglWCwgIgorICAgICAgICAgICJH
THVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZm
ZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgfHwgcmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9
PSAwIHx8ICFmcmFtZWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNl
dENvbG9yYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgVFJBQ0Uo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0g
dGV4dGFyZ2V0ID0gMHglWCwgIgorICAgICAgICAgICJHTHVpbnQgdGV4dHVyZSA9ICVkLCBHTGlu
dCBsZXZlbCA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVC
VUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAgICBjYXNlIEdM
X0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAgICAgICAgICAgICAg
IGlmICh0ZXggPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVf
Q1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVy
KCk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FU
VEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVy
ZSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBm
cmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0gbW9kZSkKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9DVzoKKyAg
ICAgICAgICBjYXNlIEdMX0NDVzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZyb250RmFjZShtb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5CdWZmZXJzKEdMc2l6ZWkg
biwgR0x1aW50KiBidWZmZXJzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQorewor
ICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAg
IHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRl
eHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6
ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAl
ZCwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVmZmVycyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlcnNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUmVu
ZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycykKK3sKKyAgICBUUkFD
RSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4s
IHJlbmRlcmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVu
ZGVyYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1cmVzKQor
eworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAgMHglMC44
cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEFjdGl2ZUF0dHJpYihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50
IGluZGV4ID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpICpsZW5ndGggPSAweCUw
LjhwLCAiCisgICAgICAgICAgIkdMaW50ICpzaXplID0gMHglMC44cCwgR0xlbnVtICp0eXBlID0g
JTAuOHAsIEdMY2hhciAqbmFtZSA9ICUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgaW5kZXgs
IGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlQXR0cmlidXRlQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm0oR0x1aW50
IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgs
IEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSkKK3sKKyAgICBUUkFDRSgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBHTHNpemVpIGJ1ZnNpemUg
PSAlZCwgIgorICAgICAgICAgICJHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGludCogc2l6
ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciogbmFtZSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0
eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gKEdMdWludClwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2
ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQs
IEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHNpemVpIG1heGNvdW50ID0gJWQsIEdMc2l6ZWkqIGNvdW50ID0gMHgl
MC44cCwgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIG1h
eGNvdW50LCBjb3VudCwgc2hhZGVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICht
YXhjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnMobWF4Y291bnQs
IGNvdW50LCBzaGFkZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCitpbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0g
JWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHByb2dyYW0sIG5hbWUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
LTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0cmlidXRlTG9j
YXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0Qm9vbGVhbnYo
R0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1zID0gMHglMC44cCkiLCAgcG5hbWUsIHBhcmFt
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHBhcmFtcykpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFt
cykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
CisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhl
cmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0
aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOworCisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFt
c1tpXSA9PSAwLjBmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5V
TEw7CisgICAgICAgICAgICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNd
OworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQ
YXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFt
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQ
YXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7
CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAg
ICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1ZmZlciBtZWFu
cyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJnZXQKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YnVmZmVyLT51c2FnZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNp
emUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xlbnVtIF9fc3RkY2FsbCBnbEdl
dEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICBpZiAoY29udGV4dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb250ZXh0LT5nZXRFcnJvcigpOworICAgIH0KKworICAgIHJldHVybiBHTF9O
T19FUlJPUjsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBH
TGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZs
b2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQt
PmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBh
cmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRl
ckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
bnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25v
d24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0
ZXJzIHRvIHJldHVybi4KKworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JP
T0wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJv
b2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRh
Y2htZW50ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBwYXJhbXMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRUeXBlOwor
ICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1Jf
QVRUQUNITUVOVDA6ICAgIAorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gY29udGV4
dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAg
ICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9y
YnVmZmVySGFuZGxlKCk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50
VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVyVHlwZSgpOwor
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldFN0ZW5jaWxi
dWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCktPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50
T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5CisgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBhdHRh
Y2htZW50VHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc1Rl
eHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfVEVYVFVSRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50
T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgIGlm
IChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9i
amVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2Jq
ZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVyVGV4dHVyZTJEIHdpbGwgbm90IGFsbG93
IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNlIGluIEdMIEVTIDIuMAorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAgICAg
ICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0g
MHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUs
ICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09
IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFt
ZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorCisgICAg
ICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107CisK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJh
bXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdM
X0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5l
dyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0RFUFRIX1JBTkdF
IHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0RFUFRIX0NM
RUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NPTE9SKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCko
KChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFyYW1zW2ldIC0gMS4wZikgLyAyLjBmKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFy
YW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1zW2ldICsgMC41KSA6IGNlaWwoZmxvYXRQ
YXJhbXNbaV0gLSAwLjUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdM
ZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBwbmFt
ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzTGlua2VkKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRV
UzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5GT19M
T0dfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJ
bmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX0FUVEFDSEVEX1NIQURFUlM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dy
YW1PYmplY3QtPmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9BVFRSSUJVVEVTOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVf
QVRUUklCVVRFX01BWF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1P
YmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STVM6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2co
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIq
IGluZm9sb2cpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1
ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0g
MHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHByb2dyYW1PYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQs
IHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVy
SGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIo
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOworCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9XSURUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRXaWR0
aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+
Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcmVuZGVyYnVmZmVyLT5nZXRGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgICAgICAg
ICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZl
cio+KHJlbmRlcmJ1ZmZlciktPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICAg
ICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3Ji
dWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpD
b2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEJsdWVTaXplKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0laRToK
KyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhf
U0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGlj
X2Nhc3Q8Z2w6OkRlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0RGVwdGhTaXplKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJf
U1RFTkNJTF9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzU3RlbmNp
bGJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PGdsOjpTdGVuY2lsYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0U3Rl
bmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTGVu
dW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2hhZGVyLCBwbmFtZSwg
cGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIo
c2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzaGFkZXJPYmplY3QtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gc2hhZGVyT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT01QSUxFX1NUQVRVUzoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5pc0NvbXBpbGVkKCkgPyBHTF9UUlVFIDog
R0xfRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdM
X0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0
LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBzaGFkZXJPYmplY3QtPmdldFNvdXJjZUxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlcklu
Zm9Mb2coR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
Y2hhciogaW5mb2xvZykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXpl
aSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogaW5mb2xv
ZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xv
Zyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpz
aGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAg
aWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
aGFkZXJPYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHBy
ZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbikKK3sKKyAgICBUUkFD
RSgiKEdMZW51bSBzaGFkZXJ0eXBlID0gMHglWCwgR0xlbnVtIHByZWNpc2lvbnR5cGUgPSAweCVY
LCBHTGludCogcmFuZ2UgPSAweCUwLjhwLCBHTGludCogcHJlY2lzaW9uID0gMHglMC44cCkiLAor
ICAgICAgICAgIHNoYWRlcnR5cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgY2FzZSBHTF9GUkFH
TUVOVF9TSEFERVI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKHByZWNpc2lvbnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X0xPV19GTE9BVDoKKyAgICAgICAgICBjYXNlIEdMX01FRElVTV9GTE9BVDoKKyAgICAgICAgICBj
YXNlIEdMX0hJR0hfRkxPQVQ6CisgICAgICAgICAgICAvLyBBc3N1bWUgSUVFRSA3NTQgcHJlY2lz
aW9uCisgICAgICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAgICAgICAgIHJhbmdlWzFdID0g
MTI3OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDIzOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBHTF9MT1dfSU5UOgorICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0lOVDoK
KyAgICAgICAgICBjYXNlIEdMX0hJR0hfSU5UOgorICAgICAgICAgICAgLy8gU29tZSAobW9zdCkg
aGFyZHdhcmUgb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51
bWJlcnMsCisgICAgICAgICAgICAvLyB3aGljaCBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgaW50
ZWdlcnMgdXAgdG8gKy8tMTY3NzcyMTYKKyAgICAgICAgICAgIHJhbmdlWzBdID0gMjQ7CisgICAg
ICAgICAgICByYW5nZVsxXSA9IDI0OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDA7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJTb3VyY2UoR0x1aW50IHNo
YWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKQor
eworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwg
R0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250
ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5n
ZXRTb3VyY2UoYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2NvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdl
dFN0cmluZyhHTGVudW0gbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBuYW1lID0gMHglWCki
LCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAobmFtZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVkVORE9SOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKiki
VHJhbnNHYW1pbmcgSW5jLiI7CisgICAgICAgICAgY2FzZSBHTF9SRU5ERVJFUjoKKyAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopIkFOR0xFIjsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046
CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChnaXQtZGV2ZWwg
Il9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKKyAgICAgICAgICBjYXNlIEdMX1NIQURJTkdfTEFO
R1VBR0VfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBH
TFNMIEVTIDEuMDAgKGdpdC1kZXZlbCAiX19EQVRFX18gIiAiIF9fVElNRV9fIikiOworICAgICAg
ICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChj
b250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgOiAiIik7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0sIChHTHVieXRlKilOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KEdMdWJ5dGUqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBw
bmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBT
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9XUkFQX1Q6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdl
dFdyYXBUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBTKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtZnYoR0x1
aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGZsb2F0KiBw
YXJhbXMgPSAweCUwLjhwKSIsIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9n
cmFtID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWl2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlv
biwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHByb2dyYW0sIGxv
Y2F0aW9uLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtaXYobG9jYXRpb24s
IHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitpbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpCit7CisgICAgVFJBQ0Uo
IihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsIHBy
b2dyYW0sIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKHN0cnN0cihuYW1lLCAiZ2xf
IikgPT0gbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0x
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUs
IC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1Mb2NhdGlv
bihuYW1lLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsK
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4
QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sK
KyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZs
b2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0ZSBhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VO
QUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5t
RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU2l6ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NU
UklERToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVN0
cmlkZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KWF0dHJpYlN0YXRlLm1UeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6
IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJl
bnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW50IGluZGV4LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAl
ZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgs
IHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0
dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKGF0dHJpYlN0YXRlLm1FbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3Ry
aWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUubVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRl
Lm1Cb3VuZEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
bG9hdCBjdXJyZW50VmFsdWUgPSBhdHRyaWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ldOworICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGN1cnJlbnRWYWx1ZSA+IDAuMGYgPyBm
bG9vcihjdXJyZW50VmFsdWUgKyAwLjVmKSA6IGNlaWwoY3VycmVudFZhbHVlIC0gMC41ZikpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0x2b2lkKiogcG9pbnRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwb2ludGVyID0gMHglMC44cCkiLCBpbmRleCwg
cG5hbWUsIHBvaW50ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgKnBvaW50ZXIgPSBjb25zdF9jYXN0PEdMdm9pZCo+KGNvbnRleHQtPmdldFZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1v
ZGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIG1vZGUgPSAw
eCVYKSIsIHRhcmdldCwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElO
VDoKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GQVNURVNUOgorICAgICAgICAgICAgICBjYXNlIEdMX05JQ0VTVDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9ET05UX0NBUkU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7IAorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGFy
Z2V0ID09IEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UKQorICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldEdlbmVyYXRlTWlwbWFwSGludChtb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBidWZmZXIgPSAlZCkiLCBidWZmZXIp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgYnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRCdWZm
ZXIoYnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlck9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJl
dHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRW5hYmxlZChHTGVu
dW0gY2FwKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKGNhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxGYWNlRW5hYmxlZCgpOworICAg
ICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVBbHBoYVRv
Q292ZXJhZ2VFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
OiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250
ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5D
SUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU3RlbmNpbFRlc3RFbmFibGVk
KCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xf
QkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNCbGVuZEVuYWJsZWQo
KTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0Zy
YW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBmcmFt
ZWJ1ZmZlciA9ICVkKSIsIGZyYW1lYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0ICYmIGZyYW1lYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoZnJhbWVi
dWZmZXIpOworCisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1Byb2dyYW0oR0x1
aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dy
YW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQgJiYgcHJvZ3JhbSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcmVu
ZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0ICYmIHJlbmRlcmJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1No
YWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIs
IHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBzaGFkZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQt
PmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoc2hhZGVyT2JqZWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNUZXh0
dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0x1aW50IHRleHR1cmUgPSAlZCki
LCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHRleHR1cmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAgICAgICAgICAgaWYgKHRleHR1cmVPYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsTGlu
ZVdpZHRoKEdMZmxvYXQgd2lkdGgpCit7CisgICAgVFJBQ0UoIihHTGZsb2F0IHdpZHRoID0gJWYp
Iiwgd2lkdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPD0gMC4wZikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRMaW5lV2lkdGgod2lkdGgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsTGlua1Byb2dyYW0oR0x1aW50IHBy
b2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9ncmFtT2JqZWN0LT5saW5rKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbWUs
IEdMaW50IHBhcmFtKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQg
cGFyYW0gPSAlZCkiLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgICAg
ICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFtICE9IDQgJiYgcGFyYW0g
IT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAg
ICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFt
ICE9IDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFBvbHlnb25PZmZz
ZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpCit7CisgICAgVFJBQ0UoIihHTGZsb2F0
IGZhY3RvciA9ICVmLCBHTGZsb2F0IHVuaXRzID0gJWYpIiwgZmFjdG9yLCB1bml0cyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+c2V0UG9seWdvbk9mZnNldFBhcmFtcyhmYWN0b3IsIHVuaXRzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJl
YWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBUUkFD
RSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsICIKKyAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAgICAgICAgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAgcGl4ZWxzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToK
KyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBnbDo6SU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIodm9pZCkKK3sKKyAgICBUUkFD
RSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OlNoYWRlcjo6cmVsZWFzZUNv
bXBpbGVyKCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVG
RkVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMTY6CisgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgICAgICBjYXNlIEdM
X1JHQjVfQTE6CisgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCB3aWR0aCA+IGdsOjpNQVhfUkVO
REVSQlVGRkVSX1NJWkUgfHwgaGVpZ2h0ID4gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkRlcHRoYnVmZmVyKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9S
R0JBNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgICAgICAgICBjYXNl
IEdMX1JHQjU2NToKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXIobmV3
IGdsOjpDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4Ogor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OlN0ZW5jaWxi
dWZmZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFs
dWUsIEdMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgVFJBQ0UoIihHTGNsYW1wZiB2YWx1ZSA9ICVm
LCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0
U2FtcGxlQ292ZXJhZ2VQYXJhbXMoZ2w6OmNsYW1wMDEodmFsdWUpLCBpbnZlcnQgPT0gR0xfVFJV
RSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNjaXNzb3JQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51
bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sK
KyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMgPSAweCUw
LjhwLCBHTGVudW0gYmluYXJ5Zm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBu
LCBzaGFkZXJzLCBiaW5hcnlmb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgLy8gTm8gYmluYXJ5IHNoYWRlciBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNoYWRlclNvdXJjZShHTHVpbnQg
c2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50
KiBsZW5ndGgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgY29uc3QgR0xjaGFyKiogc3RyaW5nID0gMHglMC44cCwgY29uc3QgR0xpbnQqIGxl
bmd0aCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGNvdW50LCBzdHJpbmcsIGxlbmd0
aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hh
ZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlm
ICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNldFNvdXJj
ZShjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmMoR0xlbnVtIGZ1
bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCit7CisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRl
KEdMX0ZST05UX0FORF9CQUNLLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCBy
ZWYsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTGVu
dW0gZnVuYyA9IDB4JVgsIEdMaW50IHJlZiA9ICVkLCBHTHVpbnQgbWFzayA9ICVkKSIsIGZhY2Us
IGZ1bmMsIHJlZiwgbWFzayk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmFj
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBH
TF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGZ1bmMpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgIGNhc2UgR0xfQUxXQVlTOgor
ICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICBjYXNlIEdMX0xFUVVBTDoKKyAgICAg
ICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorICAgICAgICAg
IGNhc2UgR0xfR1JFQVRFUjoKKyAgICAgICAgICBjYXNlIEdMX05PVEVRVUFMOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FO
RF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5j
aWxQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1
bmMsIHJlZiwgbWFzayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVp
bnQgbWFzaykKK3sKKyAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ss
IG1hc2spOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVt
IGZhY2UsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBH
THVpbnQgbWFzayA9ICVkKSIsIGZhY2UsIG1hc2spOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAg
ICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdM
X0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0ZW5jaWxXcml0ZW1hc2sobWFzayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja1dyaXRlbWFz
ayhtYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcChHTGVudW0gZmFpbCwg
R0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCit7CisgICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZShH
TF9GUk9OVF9BTkRfQkFDSywgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6
ZmFpbCwgR0xlbnVtIHpwYXNzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBH
TGVudW0gZmFpbCA9IDB4JVgsIEdMZW51bSB6ZmFpbCA9IDB4JVgsIEdMZW51bSB6cGFzID0gMHgl
WHMpIiwKKyAgICAgICAgICBmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICBjYXNlIEdMX0ZST05U
X0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgc3dpdGNoIChmYWlsKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAg
ICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6CisgICAgICAg
ICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2UgR0xfREVDUjoKKyAgICAgICAgICBjYXNl
IEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKKyAgICAgICAgICBjYXNl
IEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAoemZhaWwpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86
CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2UgR0xfUkVQTEFDRToKKyAg
ICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9ERUNSOgorICAgICAgICAg
IGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgorICAgICAgICAg
IGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoICh6cGFzcykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
WkVSTzoKKyAgICAgICAgICBjYXNlIEdMX0tFRVA6CisgICAgICAgICAgY2FzZSBHTF9SRVBMQUNF
OgorICAgICAgICAgIGNhc2UgR0xfSU5DUjoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1I6CisgICAg
ICAgICAgY2FzZSBHTF9JTlZFUlQ6CisgICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6CisgICAg
ICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNl
ID09IEdMX0ZST05UIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbE9wZXJhdGlvbnMoZmFpbCwgemZh
aWwsIHpwYXNzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xf
QkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhmYWlsLCB6ZmFpbCwg
enBhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGludGVy
bmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwg
IgorICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdM
ZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAorICAg
ICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhl
aWdodCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChn
bDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVS
RV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJF
X1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IGZvcm1hdCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVy
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldEltYWdlTmVnWChsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
QWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50
KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xmbG9hdCBwYXJhbSkKK3sKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdM
aW50KXBhcmFtKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmdihHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBnbFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50KSpwYXJhbXMpOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbFRleFBhcmFtZXRlcmkoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCBwYXJhbSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfUzoKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBTKChH
TGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgorICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlwYXJhbSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgorICAgICAgICAgICAgICAgIGlm
ICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
Y29uc3QgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFt
ZSwgKnBhcmFtcyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhv
ZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lk
dGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAu
OHApIiwKKyAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUyB8fCB4b2Zmc2V0
IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9m
ZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9m
ZnNldCA8IGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFnbDo6Q2hlY2tUZXh0dXJl
Rm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9
PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdl
KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCkKK3sKKyAgICBnbFVuaWZv
cm0xZnYobG9jYXRpb24sIDEsICZ4KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAg
IFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBH
TGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9j
YXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkK
K3sKKyAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3sKKyAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9Owor
CisgICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwg
Y291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0yZnYobG9j
YXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQoreworICAgIEdMaW50IHh5
WzRdID0ge3gsIHl9OworCisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4
eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBs
b2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMml2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikK
K3sKKyAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNmdihs
b2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7
CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGlu
dCB4LCBHTGludCB5LCBHTGludCB6KQoreworICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsK
KworICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3Vu
dCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50
LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50
IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7
CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGZ2
KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
Cit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBH
TGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQoreworICAgIEdMaW50IHh5endbNF0g
PSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEsIChHTGludCop
Jnh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9j
YXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHAp
IiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNv
dW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRp
dihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9
ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZh
bHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9h
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0
cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0t
PnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44
cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZB
TFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCAmJiBwcm9ncmFtICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9
IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBw
cm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNo
YWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZikiLCBpbmRleCwgeCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdM
ZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmdihHTHVp
bnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBp
bmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1
ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjJmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVm
KSIsIGluZGV4LCB4LCB5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCAwLCAxIH07Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQor
eworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVz
WzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgs
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
aW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAl
ZikiLCBpbmRleCwgeCwgeSwgeik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgMSB9
OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZh
bHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9h
dCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcgPSAlZikiLCBpbmRleCwgeCwgeSwg
eiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIs
IGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHVl
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6
ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29u
c3QgR0x2b2lkKiBwdHIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQg
c2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiR0xib29sZWFuIG5v
cm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAw
eCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXpl
ID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAg
ICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
CisgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmlkZSA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVm
ZmVySGFuZGxlKCksIHNpemUsIHR5cGUsIChub3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUs
IHB0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgVFJB
Q0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsICIK
KyAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHgleCwgY29u
c3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK19fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJl
c3MoY29uc3QgY2hhciAqcHJvY25hbWUpCit7CisgICAgc3RydWN0IEV4dGVuc2lvbgorICAgIHsK
KyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3Qg
RXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KKyAgICB7CisgICAgICAgIHsiZ2xUZXhJbWFnZTNE
T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFn
ZTNET0VTfSwKKyAgICB9OworCisgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGds
RXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCisgICAgeworICAgICAgICBp
ZiAoc3RyY21wKHByb2NuYW1lLCBnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBOVUxMOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVm
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorTElCUkFSWSBsaWJHTEVTdjIKK0VYUE9SVFMKKyAg
ICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAgIEAxCisgICAgZ2xBdHRhY2hTaGFkZXIg
ICAgICAgICAgICAgICAgICBAMgorICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAg
QDMKKyAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAgICAgICAgIEA0CisgICAgZ2xCaW5kRnJh
bWVidWZmZXIgICAgICAgICAgICAgICBANQorICAgIGdsQmluZFJlbmRlcmJ1ZmZlciAgICAgICAg
ICAgICAgQDYKKyAgICBnbEJpbmRUZXh0dXJlICAgICAgICAgICAgICAgICAgIEA3CisgICAgZ2xC
bGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAorICAgIGdsQmxlbmRFcXVhdGlvbiAgICAg
ICAgICAgICAgICAgQDkKKyAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAgICAgICAgIEAxMAor
ICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAgICAgQDExCisgICAgZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZSAgICAgICAgICAgICBAMTIKKyAgICBnbEJ1ZmZlckRhdGEgICAgICAgICAgICAgICAg
ICAgIEAxMworICAgIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAgICAgQDE0CisgICAgZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUKKyAgICBnbENsZWFyICAgICAgICAgICAg
ICAgICAgICAgICAgIEAxNgorICAgIGdsQ2xlYXJDb2xvciAgICAgICAgICAgICAgICAgICAgQDE3
CisgICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICBAMTgKKyAgICBnbENsZWFyU3Rl
bmNpbCAgICAgICAgICAgICAgICAgIEAxOQorICAgIGdsQ29sb3JNYXNrICAgICAgICAgICAgICAg
ICAgICAgQDIwCisgICAgZ2xDb21waWxlU2hhZGVyICAgICAgICAgICAgICAgICBAMjEKKyAgICBn
bENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAyMgorICAgIGdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQgICAgICAgQDIzCisgICAgZ2xDb3B5VGV4SW1hZ2UyRCAgICAgICAgICAgICAgICBA
MjQKKyAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAgICAgICAgIEAyNQorICAgIGdsQ3JlYXRl
UHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2CisgICAgZ2xDcmVhdGVTaGFkZXIgICAgICAgICAg
ICAgICAgICBAMjcKKyAgICBnbEN1bGxGYWNlICAgICAgICAgICAgICAgICAgICAgIEAyOAorICAg
IGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAgQDI5CisgICAgZ2xEZWxldGVGcmFtZWJ1
ZmZlcnMgICAgICAgICAgICBAMzAKKyAgICBnbERlbGV0ZVByb2dyYW0gICAgICAgICAgICAgICAg
IEAzMgorICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAgICAgICAgICAgQDMzCisgICAgZ2xEZWxl
dGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKKyAgICBnbERlbGV0ZVRleHR1cmVzICAgICAg
ICAgICAgICAgIEAzMQorICAgIGdsRGVwdGhGdW5jICAgICAgICAgICAgICAgICAgICAgQDM2Cisg
ICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAgICBAMzcKKyAgICBnbERlcHRoUmFuZ2Vm
ICAgICAgICAgICAgICAgICAgIEAzOAorICAgIGdsRGV0YWNoU2hhZGVyICAgICAgICAgICAgICAg
ICAgQDM1CisgICAgZ2xEaXNhYmxlICAgICAgICAgICAgICAgICAgICAgICBAMzkKKyAgICBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAorICAgIGdsRHJhd0FycmF5cyAgICAgICAg
ICAgICAgICAgICAgQDQxCisgICAgZ2xEcmF3RWxlbWVudHMgICAgICAgICAgICAgICAgICBANDIK
KyAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIEA0MworICAgIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkgICAgICAgQDQ0CisgICAgZ2xGaW5pc2ggICAgICAgICAgICAgICAgICAg
ICAgICBANDUKKyAgICBnbEZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgIEA0NgorICAgIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCAgICAgICAgICBANDgKKyAgICBnbEZyb250RmFjZSAgICAgICAgICAgICAgICAgICAgIEA0
OQorICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAgICAgICAgQDUwCisgICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnMgICAgICAg
ICAgICAgIEA1MworICAgIGdsR2VuVGV4dHVyZXMgICAgICAgICAgICAgICAgICAgQDU0CisgICAg
Z2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBANTEKKyAgICBnbEdldEFjdGl2ZUF0dHJp
YiAgICAgICAgICAgICAgIEA1NQorICAgIGdsR2V0QWN0aXZlVW5pZm9ybSAgICAgICAgICAgICAg
QDU2CisgICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAgICAgICAgICBANTcKKyAgICBnbEdldEF0
dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAorICAgIGdsR2V0Qm9vbGVhbnYgICAgICAgICAg
ICAgICAgICAgQDU5CisgICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAgICAgICAgICBANjAKKyAg
ICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAgIEA2MQorICAgIGdsR2V0RmxvYXR2ICAg
ICAgICAgICAgICAgICAgICAgQDYyCisgICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdiAgIEA2MworICAgIGdsR2V0SW50ZWdlcnYgICAgICAgICAgICAgICAgICAgQDY0Cisg
ICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAgICBANjYKKyAgICBnbEdldFByb2dyYW1p
diAgICAgICAgICAgICAgICAgIEA2NQorICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYg
ICAgQDY3CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAgICAgICAgICAgICBANjkKKyAgICBnbEdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAorICAgIGdsR2V0U2hhZGVyU291cmNlICAg
ICAgICAgICAgICAgQDcxCisgICAgZ2xHZXRTaGFkZXJpdiAgICAgICAgICAgICAgICAgICBANjgK
KyAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAgICAgIEA3MgorICAgIGdsR2V0VGV4UGFy
YW1ldGVyZnYgICAgICAgICAgICAgQDczCisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdiAgICAgICAg
ICAgICBANzQKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlvbiAgICAgICAgICAgIEA3NworICAgIGds
R2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1CisgICAgZ2xHZXRVbmlmb3JtaXYgICAg
ICAgICAgICAgICAgICBANzYKKyAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ICAgICAgIEA4
MAorICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAgICAgICAgQDc4CisgICAgZ2xHZXRWZXJ0
ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKKyAgICBnbEhpbnQgICAgICAgICAgICAgICAgICAg
ICAgICAgIEA4MQorICAgIGdsSXNCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgQDgyCisgICAg
Z2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBAODMKKyAgICBnbElzRnJhbWVidWZmZXIg
ICAgICAgICAgICAgICAgIEA4NAorICAgIGdsSXNQcm9ncmFtICAgICAgICAgICAgICAgICAgICAg
QDg1CisgICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgICBAODYKKyAgICBnbElzU2hh
ZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NworICAgIGdsSXNUZXh0dXJlICAgICAgICAgICAg
ICAgICAgICAgQDg4CisgICAgZ2xMaW5lV2lkdGggICAgICAgICAgICAgICAgICAgICBAODkKKyAg
ICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAgIEA5MAorICAgIGdsUGl4ZWxTdG9yZWkg
ICAgICAgICAgICAgICAgICAgQDkxCisgICAgZ2xQb2x5Z29uT2Zmc2V0ICAgICAgICAgICAgICAg
ICBAOTIKKyAgICBnbFJlYWRQaXhlbHMgICAgICAgICAgICAgICAgICAgIEA5MworICAgIGdsUmVs
ZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
ICAgICAgICAgICBAOTUKKyAgICBnbFNhbXBsZUNvdmVyYWdlICAgICAgICAgICAgICAgIEA5Ngor
ICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAgICAgQDk3CisgICAgZ2xTaGFkZXJCaW5h
cnkgICAgICAgICAgICAgICAgICBAOTgKKyAgICBnbFNoYWRlclNvdXJjZSAgICAgICAgICAgICAg
ICAgIEA5OQorICAgIGdsU3RlbmNpbEZ1bmMgICAgICAgICAgICAgICAgICAgQDEwMAorICAgIGds
U3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEwMQorICAgIGdsU3RlbmNpbE1hc2sgICAg
ICAgICAgICAgICAgICAgQDEwMgorICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZSAgICAgICAgICAg
QDEwMworICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAgICAgICAgICAgQDEwNAorICAgIGdsU3Rl
bmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQorICAgIGdsVGV4SW1hZ2UyRCAgICAgICAg
ICAgICAgICAgICAgQDEwNgorICAgIGdsVGV4UGFyYW1ldGVyZiAgICAgICAgICAgICAgICAgQDEw
NworICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgICAgQDEwOAorICAgIGdsVGV4UGFy
YW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQorICAgIGdsVGV4UGFyYW1ldGVyaXYgICAgICAg
ICAgICAgICAgQDExMAorICAgIGdsVGV4U3ViSW1hZ2UyRCAgICAgICAgICAgICAgICAgQDExMQor
ICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAgICAgQDExMgorICAgIGdsVW5pZm9ybTFm
diAgICAgICAgICAgICAgICAgICAgQDExMworICAgIGdsVW5pZm9ybTFpICAgICAgICAgICAgICAg
ICAgICAgQDExNAorICAgIGdsVW5pZm9ybTFpdiAgICAgICAgICAgICAgICAgICAgQDExNQorICAg
IGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAgQDExNgorICAgIGdsVW5pZm9ybTJmdiAg
ICAgICAgICAgICAgICAgICAgQDExNworICAgIGdsVW5pZm9ybTJpICAgICAgICAgICAgICAgICAg
ICAgQDExOAorICAgIGdsVW5pZm9ybTJpdiAgICAgICAgICAgICAgICAgICAgQDExOQorICAgIGds
VW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEyMAorICAgIGdsVW5pZm9ybTNmdiAgICAg
ICAgICAgICAgICAgICAgQDEyMQorICAgIGdsVW5pZm9ybTNpICAgICAgICAgICAgICAgICAgICAg
QDEyMgorICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAgICAgICAgICAgQDEyMworICAgIGdsVW5p
Zm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAorICAgIGdsVW5pZm9ybTRmdiAgICAgICAg
ICAgICAgICAgICAgQDEyNQorICAgIGdsVW5pZm9ybTRpICAgICAgICAgICAgICAgICAgICAgQDEy
NgorICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAgICAgICAgQDEyNworICAgIGdsVW5pZm9y
bU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAorICAgIGdsVW5pZm9ybU1hdHJpeDNmdiAgICAg
ICAgICAgICAgQDEyOQorICAgIGdsVW5pZm9ybU1hdHJpeDRmdiAgICAgICAgICAgICAgQDEzMAor
ICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgQDEzMQorICAgIGdsVmFsaWRhdGVQ
cm9ncmFtICAgICAgICAgICAgICAgQDEzMgorICAgIGdsVmVydGV4QXR0cmliMWYgICAgICAgICAg
ICAgICAgQDEzMworICAgIGdsVmVydGV4QXR0cmliMWZ2ICAgICAgICAgICAgICAgQDEzNAorICAg
IGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAgQDEzNQorICAgIGdsVmVydGV4QXR0cmli
MmZ2ICAgICAgICAgICAgICAgQDEzNgorICAgIGdsVmVydGV4QXR0cmliM2YgICAgICAgICAgICAg
ICAgQDEzNworICAgIGdsVmVydGV4QXR0cmliM2Z2ICAgICAgICAgICAgICAgQDEzOAorICAgIGds
VmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEzOQorICAgIGdsVmVydGV4QXR0cmliNGZ2
ICAgICAgICAgICAgICAgQDE0MAorICAgIGdsVmVydGV4QXR0cmliUG9pbnRlciAgICAgICAgICAg
QDE0MQorICAgIGdsVmlld3BvcnQgICAgICAgICAgICAgICAgICAgICAgQDE0MgorCisgICAgOyBF
eHRlbnNpb25zCisgICAgZ2xUZXhJbWFnZTNET0VTCQkJCQlAMTQzCisgICAgCisgICAgOyBFR0wg
ZGVwZW5kZW5jaWVzCisgICAgZ2xDcmVhdGVDb250ZXh0CQkJCQlAMTQ0IE5PTkFNRQorICAgIGds
RGVzdHJveUNvbnRleHQJCQkJQDE0NSBOT05BTUUKKyAgICBnbE1ha2VDdXJyZW50CQkJCQlAMTQ2
IE5PTkFNRQorICAgIGdsR2V0Q3VycmVudENvbnRleHQJCQkJQDE0NyBOT05BTUUKKyAgICBnbEdl
dFByb2NBZGRyZXNzICAgICAgICAgICAgICAgIEAxNDggTk9OQU1FClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRv
d3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwg
QysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJsaWJHTEVTdjIiDQorCVByb2plY3RHVUlE
PSJ7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSINCisJUm9vdE5hbWVzcGFj
ZT0ibGliR0xFU3YyIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRhcmdldEZyYW1ld29ya1Zl
cnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBsYXRmb3JtDQorCQkJTmFt
ZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29s
RmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0i
RGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmln
dXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9u
TmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0K
KwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMCINCisJCQkJQWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGly
KS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RF
QlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQ
UkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSINCisJCQkJQmFzaWNS
dW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQ
b3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
NCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVy
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRp
b25hbERlcGVuZGVuY2llcz0iRDNkeDkubGliIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQor
CQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIg0KKwkJCQlHZW5lcmF0ZURl
YnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJUmFuZG9taXpl
ZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCisJCQkJ
VGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJp
ZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50
VG9vbCINCisJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsm
I3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hv
IG9mZiYjeDBEOyYjeDBBOyINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZp
Z3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCU91dHB1dERpcmVjdG9yeT0i
JChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSINCisJCQlJbnRlcm1lZGlhdGVEaXJl
Y3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0K
KwkJCUNoYXJhY3RlclNldD0iMSINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQor
CQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxp
bmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll
cz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElC
R0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVf
U0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KKwkJCQlVc2VQcmVjb21waWxlZEhlYWRl
cj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5
UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQor
CQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzPSJEM2R4OS5saWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJSWdub3Jl
QWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJs
aWJHTEVTdjIuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJ
CVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KKwkJCQlFbmFibGVD
T01EQVRGb2xkaW5nPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURh
dGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+
DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0K
KwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGluZT0i
QGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIp
XGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJH
TEVTdjIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+
DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2Vz
Pg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3Vy
Y2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDth
c207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYt
MkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEJs
aXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxCdWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxDb250ZXh0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1lYnVmZmVyLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGli
R0xFU3YyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cbWFpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXIuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJl
LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cdXRpbGl0aWVzLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsdGVyDQorCQkJ
CU5hbWU9Ikdlb21ldHJ5Ig0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cZ2VvbWV0cnlcYmFja2VuZC5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxkeDkuY3BwIg0KKwkJCQkJPg0KKwkJ
CQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcSW5k
ZXhEYXRhTWFuYWdlci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxWZXJ0ZXhEYXRhTWFuYWdlci5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRl
cg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7
aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUIt
NjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXEJs
aXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cQnVmZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXENvbnRleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxp
bmNsdWRlXEdMRVMyXGdsMmV4dC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXG1h
dGh1dGlsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXFByb2dyYW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJlLmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0iR2VvbWV0cnkiDQor
CQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5k
LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0
aD0iLlxnZW9tZXRyeVxkeDkuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XEluZGV4RGF0YU1hbmFnZXIuaCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21l
dHJ5XHZlcnRleGNvbnZlcnNpb24uaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XFZlcnRleERhdGFNYW5hZ2VyLmgiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCisJCTwvRmlsdGVyPg0KKwkJPEZp
bGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiINCisJCQk+DQorCQk8L0ZpbGU+
DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Q
cm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBtYWluLmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2Vt
ZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
KworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgi
CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKworc3RhdGljIERXT1JEIGN1
cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CisKK0JPT0wgV0lOQVBJIERsbE1haW4oSElO
U1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKK3sKKyAgICBz
d2l0Y2ggKHJlYXNvbikKKyAgICB7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0FUVEFDSDoKKyAg
ICAgICAgeworICAgICAgICAgICAgY3VycmVudFRMUyA9IFRsc0FsbG9jKCk7CisKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0ZfSU5ERVhFUykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXplIGluZGV4CisgICAgICBjYXNl
IERMTF9USFJFQURfQVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6Q3VycmVudCAq
Y3VycmVudCA9IChnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoZ2w6OkN1cnJl
bnQpKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVudCk7CisKKyAgICAgICAgICAg
ICAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5k
aXNwbGF5ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZv
aWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYg
KGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9D
QUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgdm9p
ZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgICAgICAgICBpZiAo
Y3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NB
TCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVGxzRnJlZShjdXJyZW50
VExTKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCituYW1lc3BhY2UgZ2wKK3sK
K3ZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmNvbnRleHQgPSBj
b250ZXh0OworICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkaXNwbGF5OworCisgICAgaWYgKGNvbnRl
eHQgJiYgZGlzcGxheSAmJiBzdXJmYWNlKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+bWFrZUN1
cnJlbnQoZGlzcGxheSwgc3VyZmFjZSk7CisgICAgfQorfQorCitDb250ZXh0ICpnZXRDb250ZXh0
KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJl
bnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmNvbnRleHQ7Cit9CisKK2VnbDo6RGlzcGxh
eSAqZ2V0RGlzcGxheSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kaXNwbGF5OworfQor
CitJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IGdldERpc3BsYXkoKTsKKworICAgIHJldHVybiBkaXNwbGF5LT5nZXREZXZpY2UoKTsK
K30KK30KKworLy8gUmVjb3JkcyBhbiBlcnJvciBjb2RlCit2b2lkIGVycm9yKEdMZW51bSBlcnJv
ckNvZGUpCit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbEdldEN1cnJlbnRDb250ZXh0
KCk7CisKKyAgICBpZiAoY29udGV4dCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZXJyb3JDb2Rl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRW51bSgpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJc
dCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGVudW1cbiIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX1ZBTFVFOgorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3JkSW52YWxpZFZhbHVlKCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBn
ZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY29y
ZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgiXHQhIEVycm9yIGdl
bmVyYXRlZDogaW52YWxpZCBvcGVyYXRpb25cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Jk
T3V0T2ZNZW1vcnkoKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgiXHQhIEVycm9yIGdlbmVyYXRl
ZDogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7CisgICAgICAgICAgICBnbDo6dHJh
Y2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4i
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6IE1hbmFnZW1lbnQgb2YgdGhyZWFkLWxv
Y2FsIGRhdGEuCisKKyNpZm5kZWYgTElCR0xFU1YyX01BSU5fSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X01BSU5fSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
KyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgor
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1
Y3QgQ3VycmVudAoreworICAgIENvbnRleHQgKmNvbnRleHQ7CisgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5OworfTsKKwordm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisKK0NvbnRleHQgKmdldENv
bnRleHQoKTsKK2VnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpOworCitJRGlyZWN0M0REZXZpY2U5
ICpnZXREZXZpY2UoKTsKK30KKwordm9pZCBlcnJvcihHTGVudW0gZXJyb3JDb2RlKTsKKwordGVt
cGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEdMZW51bSBlcnJvckNvZGUsIGNvbnN0IFQg
JnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gcmV0
dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQUlOX0hfCkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRo
dXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBtYXRodXRpbC5oOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKyNkZWZpbmUgTElCR0xFU1YyX01BVEhVVElM
X0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAoreworaW5saW5lIGJvb2wg
aXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkpID09IDAgJiYgKHggIT0g
MCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBpbnQgciA9IDA7CisgICAg
d2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOworfQorCitpbmxpbmUgdW5z
aWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAgIGlmICh4ICE9IDApIHgt
LTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAgICB4IHw9IHggPj4gNDsK
KyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAgeCsrOworCisgICAgcmV0
dXJuIHg7Cit9CisKK2lubGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJu
IHggPCAwID8gMCA6ICh4ID4gMSA/IDEgOiB4KTsKK30KKwordGVtcGxhdGU8Y29uc3QgaW50IG4+
CitpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0IHgpCit7CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IG1heCA9IDB4RkZGRkZGRkYgPj4gKDMyIC0gbik7CisKKyAgICBpZiAoeCA+IDEpCisg
ICAgeworICAgICAgICByZXR1cm4gbWF4OworICAgIH0KKyAgICBlbHNlIGlmICh4IDwgMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gKHVuc2lnbmVkIGludCkobWF4ICogeCArIDAuNWYpOworICAgIH0KK30KK30KKworI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
dXRpbGl0aWVzLmNwcDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91
dGluZXMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDxs
aW1pdHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFj
ZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdM
X0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBj
YXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2Ug
R0xfSU5UX1ZFQzI6CisgICAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMz
OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Cisg
ICAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6CisgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
CisgICAgICAgICAgcmV0dXJuIDk7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAg
ICAgcmV0dXJuIDE2OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUo
R0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9C
T09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICAgIHJldHVybiBHTF9CT09MOworICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKKyAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICBjYXNlIEdMX0lOVDoK
KyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAg
Y2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05F
OworfQorCitzaXplX3QgVW5pZm9ybVR5cGVTaXplKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRj
aCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDogIHJldHVybiBzaXplb2YoR0xib29s
ZWFuKTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAg
ICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICB9CisKKyAgICByZXR1
cm4gVW5pZm9ybVR5cGVTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1D
b21wb25lbnRDb3VudCh0eXBlKTsKK30KKworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FU
OgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdM
X0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09M
X1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAg
ICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVt
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZM
T0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lO
VF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gMjsKKyAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBj
YXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0
dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Cisg
ICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1
bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwgdW5zaWduZWQg
aW50IGJpdHNTaXplKQoreworICAgIEFTU0VSVChhbGxvY2F0aW9uU2l6ZSA8PSBiaXRzU2l6ZSk7
CisKKyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50Pjo6bWF4KCkgPj4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6ZGlnaXRz
IC0gYWxsb2NhdGlvblNpemUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBi
aXRzU2l6ZSAtIGFsbG9jYXRpb25TaXplICsgMTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCgq
Yml0cyAmIG1hc2spID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICpiaXRzIHw9IG1hc2s7
CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorCisgICAgICAgIG1hc2sgPDw9IDE7
CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitHTHNpemVpIENvbXB1dGVQaXRjaChHTHNp
emVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KQor
eworICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKworICAg
IEdMc2l6ZWkgcmF3UGl0Y2ggPSBDb21wdXRlUGl4ZWxTaXplKGZvcm1hdCwgdHlwZSkgKiB3aWR0
aDsKKyAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAt
IDEpOworfQorCisvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBzaW5nbGUgdGV4
ZWwgaW4gYW4gSW1hZ2UKK2ludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcik7Cisg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQg
Y2hhcik7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHJldHVybiBzaXplb2Yo
dW5zaWduZWQgY2hhcikgKiAyOworICAgICAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMzsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6
ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
ICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1opOworfQorCitib29sIElzVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQor
eworICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KHRhcmdldCk7Cit9CisKKy8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUg
b2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KK2Jvb2wgQ2hlY2tUZXh0dXJlRm9y
bWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNl
IEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgcmV0dXJuIChm
b3JtYXQgPT0gR0xfUkdCQSk7CisKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7CisKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworbmFtZXNwYWNlIGVzMmR4Cit7
CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCit7Cisg
ICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKKyAgICBzd2l0Y2ggKGNvbXBh
cmlzb24pCisgICAgeworICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9O
RVZFUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQz
RENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29t
cCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MRVFVQUw6ICAg
ZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FUVVB
TDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOwor
ICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZDNkQ29tcDsKK30KKworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKK3sK
KyAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKK30KKworRDNEQkxFTkQgQ29u
dmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCit7CisgICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBE
M0RCTEVORF9aRVJPOworCisgICAgc3dpdGNoIChibGVuZCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NS
Q19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9D
T0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBI
QTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9S
OiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVO
RF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAg
ICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9J
TlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTog
ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZDsKK30K
KworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKK3sKKyAgICBEM0RC
TEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKKworICAgIHN3aXRjaCAoYmxlbmRP
cCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1NV
QlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNE
QkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9wOworfQorCitEM0RTVEVOQ0lMT1AgQ29u
dmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQoreworICAgIEQzRFNURU5DSUxPUCBkM2RT
dGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKKworICAgIHN3aXRjaCAoc3RlbmNpbE9wKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lM
T1BfWkVSTzsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9w
ID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRVBMQUNFOiAg
IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKKyAgICAgIGNhc2Ug
R0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7
CisgICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RF
Q1JTQVQ7IGJyZWFrOworICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQz
RFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RT
dGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RF
Q1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkU3RlbmNp
bE9wOworfQorCitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdy
YXApCit7CisgICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7
CisKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAg
ICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19N
SVJST1I7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZDNkV3JhcDsKK30KKworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1
bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQoreworICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExf
Q0NXOworICAgIHN3aXRjaCAoY3VsbEZhY2UpCisgICAgeworICAgICAgY2FzZSBHTF9GUk9OVDoK
KyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENV
TExfQ0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgIGN1
bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgY3Vs
bCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcK
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBjdWxsOworfQorCitEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7CisgICAgcmV0dXJuIChyZWQgICA/
IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAwKSB8CisgICAgICAgICAgIChncmVlbiA/IEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gOiAwKSB8CisgICAgICAgICAgIChibHVlICA/IEQzRENP
TE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAwKSB8CisgICAgICAgICAgIChhbHBoYSA/IEQzRENPTE9S
V1JJVEVFTkFCTEVfQUxQSEEgOiAwKTsKK30KKworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVy
dE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKQoreworICAgIEQzRFRFWFRVUkVGSUxURVJUWVBF
IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgc3dpdGNoIChtYWdGaWx0ZXIpCisg
ICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5U
OyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjogIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZf
TElORUFSOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGQzZE1hZ0ZpbHRlcjsKK30KKwordm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51
bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRV
UkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpCit7CisgICAgc3dpdGNoIChtaW5GaWx0ZXIpCisg
ICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNE
VEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9
IEQzRFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAg
ICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgICpkM2RNaXBGaWx0
ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFS
X01JUE1BUF9ORUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7
CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgICAqZDNkTWluRmls
dGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElO
RUFSOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6
CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1p
cEZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlw
RmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KK30K
KwordW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQor
eworICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0Qy
NEZTODoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgorICAgICAgICByZXR1cm4gODsKKyAgICAg
IGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBEM0RG
TVRfRDE1UzE6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tB
QkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDMyOgorICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Cisg
ICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDE2Ogor
ICAgICAgICByZXR1cm4gMDsKKy8vICAgICAgY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0
dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQorLy8gICAgICBjYXNlIEQzREZNVF9TOF9MT0NL
QUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdl
dEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZv
cm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0
dXJuIDI7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0UmVk
U2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkK
KyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDEw
OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhC
ODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAg
IGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAg
ICByZXR1cm4gNTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvckZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNE
Rk1UX0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4gMTA7CisgICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsK
KyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6
CisgICAgICAgIHJldHVybiA1OworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBy
ZXR1cm4gNjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0
KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRf
QTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAxMDsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIHJldHVybiA4OworICAg
ICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAg
ICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50
IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCit7CisgICAgc3dpdGNoIChkZXB0
aEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6ICByZXR1cm4g
MTY7CisgICAgICBjYXNlIEQzREZNVF9EMzI6ICAgICAgICAgICByZXR1cm4gMzI7CisgICAgICBj
YXNlIEQzREZNVF9EMTVTMTogICAgICAgICByZXR1cm4gMTU7CisgICAgICBjYXNlIEQzREZNVF9E
MjRTODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMjRYODogICAgICAg
ICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OiAgICAgICByZXR1cm4gMjQ7
CisgICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNl
IEQzREZNVF9EMzJGX0xPQ0tBQkxFOiByZXR1cm4gMzI7CisgICAgICBjYXNlIEQzREZNVF9EMjRG
Uzg6ICAgICAgICByZXR1cm4gMjQ7CisvLyAgICAgIGNhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTog
IHJldHVybiAzMjsgICAvLyBEM0Q5RXggb25seQorLy8gICAgICBjYXNlIEQzREZNVF9TOF9MT0NL
QUJMRTogICByZXR1cm4gMDsgICAgLy8gRDNEOUV4IG9ubHkKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitib29sIENvbnZl
cnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJVkVUWVBFICpkM2RQcmlt
aXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KQoreworICAgIHN3aXRjaCAocHJpbWl0
aXZlVHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgICAgKmQzZFByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9QT0lOVExJU1Q7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9
IHByaW1pdGl2ZUNvdW50OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORVM6Cisg
ICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORUxJU1Q7CisgICAgICAgICpkM2RQ
cmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC8gMjsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9M
SU5FU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50Owor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3Vu
dCA9IHByaW1pdGl2ZUNvdW50IC0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RS
SUFOR0xFUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7
CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC8gMzsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAgICAqZDNkUHJp
bWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVD
b3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdM
RUZBTjsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAyOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAg
ICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQx
NjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIHJldHVybiBEM0RGTVRfRDI0
Uzg7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OworICAgIH0KK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gdXRpbGl0aWVzLmg6IENv
bnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgorCisjaWZuZGVm
IExJQkdMRVNWMl9VVElMSVRJRVNfSAorI2RlZmluZSBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKwor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNk
OS5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworc3RydWN0IENvbG9yOworCitpbnQgVW5pZm9ybUNv
bXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShH
TGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybVR5cGVTaXplKEdMZW51bSB0eXBlKTsKK2ludCBW
YXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKK2ludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdM
ZW51bSB0eXBlKTsKKworaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJp
dHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKTsK
KworaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOworR0xz
aXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IGFsaWdubWVudCk7Citib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVt
IHRhcmdldCk7Citib29sIElzVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgQ2hl
Y2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CisKK30KKwor
bmFtZXNwYWNlIGVzMmR4Cit7CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVt
IGNvbXBhcmlzb24pOworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitE
M0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7CitEM0RCTEVORE9QIENvbnZl
cnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKK0QzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9w
KEdMZW51bSBzdGVuY2lsT3ApOworRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFw
KEdMZW51bSB3cmFwKTsKK0QzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwg
R0xlbnVtIGZyb250RmFjZSk7CitEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29s
IGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29u
dmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKTsKK3ZvaWQgQ29udmVydE1pbkZpbHRlcihH
TGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBEM0RU
RVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKTsKK3Vuc2lnbmVkIGludCBHZXRBbHBoYVNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRSZWRTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBj
b2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yRm9y
bWF0KTsKK3Vuc2lnbmVkIGludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsK
K3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Citi
b29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHBy
aW1pdGl2ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJVkVUWVBF
ICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KTsKK0QzREZPUk1BVCBD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworCit9CisKKyNlbmRpZiAg
Ly8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21l
dHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvSW5kZXhE
YXRhTWFuYWdlci5jcHA6IERlZmluZXMgdGhlIEluZGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhh
dAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZl
cnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oIgor
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L2dlb21ldHJ5L2JhY2tlbmQuaCIKKworbmFtZXNwYWNlCit7CisgICAgZW51bSB7IElOSVRJQUxf
SU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2ICogc2l6ZW9mKEdMdWludCkgfTsKK30KKworbmFtZXNw
YWNlIGdsCit7CisKK0luZGV4RGF0YU1hbmFnZXI6OkluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAq
Y29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCkKKyAgOiBtQ29udGV4dChjb250ZXh0KSwg
bUJhY2tlbmQoYmFja2VuZCksIG1JbnRJbmRpY2VzU3VwcG9ydGVkKGJhY2tlbmQtPnN1cHBvcnRJ
bnRJbmRpY2VzKCkpCit7CisgICAgbUNvdW50aW5nQnVmZmVyID0gTlVMTDsKKyAgICBtQ291bnRp
bmdCdWZmZXJTaXplID0gMDsKKworICAgIG1MaW5lTG9vcEJ1ZmZlciA9IE5VTEw7CisKKyAgICBt
U3RyZWFtQnVmZmVyU2hvcnQgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIoSU5JVElBTF9J
TkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgaWYgKG1JbnRJbmRp
Y2VzU3VwcG9ydGVkKQorICAgIHsKKyAgICAgICAgbVN0cmVhbUJ1ZmZlckludCA9IG1CYWNrZW5k
LT5jcmVhdGVJbmRleEJ1ZmZlcihJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05F
RF9JTlQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU3RyZWFtQnVmZmVySW50
ID0gTlVMTDsKKyAgICB9Cit9CisKK0luZGV4RGF0YU1hbmFnZXI6On5JbmRleERhdGFNYW5hZ2Vy
KCkKK3sKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlclNob3J0OworICAgIGRlbGV0ZSBtU3RyZWFt
QnVmZmVySW50OworICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7CisgICAgZGVsZXRlIG1MaW5l
TG9vcEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlCit7CisKK3RlbXBsYXRlIDxjbGFzcyBJbnB1dElu
ZGV4VHlwZSwgY2xhc3MgT3V0cHV0SW5kZXhUeXBlPgordm9pZCBjb3B5SW5kaWNlcyhjb25zdCBJ
bnB1dEluZGV4VHlwZSAqaW4sIEdMc2l6ZWkgY291bnQsIE91dHB1dEluZGV4VHlwZSAqb3V0LCBH
THVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQoreworICAgIElucHV0SW5kZXhUeXBl
IGZpcnN0ID0gKmluOworICAgIEdMdWludCBtaW5JbmRleFNvRmFyID0gZmlyc3Q7CisgICAgR0x1
aW50IG1heEluZGV4U29GYXIgPSBmaXJzdDsKKworICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAobWluSW5kZXhTb0ZhciA+ICppbikgbWlu
SW5kZXhTb0ZhciA9ICppbjsKKyAgICAgICAgaWYgKG1heEluZGV4U29GYXIgPCAqaW4pIG1heElu
ZGV4U29GYXIgPSAqaW47CisKKyAgICAgICAgKm91dCsrID0gKmluKys7CisgICAgfQorCisgICAg
Ly8gSXQgbWlnaHQgYmUgYSBsaW5lIGxvb3AsIHNvIGNvcHkgdGhlIGxvb3AgaW5kZXguCisgICAg
Km91dCA9IGZpcnN0OworCisgICAgKm1pbkluZGV4ID0gbWluSW5kZXhTb0ZhcjsKKyAgICAqbWF4
SW5kZXggPSBtYXhJbmRleFNvRmFyOworfQorCit9CisKK0dMZW51bSBJbmRleERhdGFNYW5hZ2Vy
OjpwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291
bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFu
c2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQoreworICAgIEFTU0VSVCh0eXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSB8fCB0eXBlID09IEdMX1VO
U0lHTkVEX0lOVCk7CisgICAgQVNTRVJUKGNvdW50ID4gMCk7CisKKyAgICBpZiAoYXJyYXlFbGVt
ZW50QnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBHTHNpemVpIG9mZnNldCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R0xzaXplaT4oaW5kaWNlcyk7CisKKyAgICAgICAgaWYgKHR5cGVTaXplKHR5
cGUpICogY291bnQgKyBvZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYXJyYXlFbGVt
ZW50QnVmZmVyLT5zaXplKCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1Ynl0ZSo+KGFycmF5RWxlbWVudEJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsK
KyAgICB9CisKKyAgICB0cmFuc2xhdGVkLT5jb3VudCA9IGNvdW50OworCisgICAgc3RkOjpzaXpl
X3QgcmVxdWlyZWRTcGFjZSA9IHNwYWNlUmVxdWlyZWQodHlwZSwgY291bnQpOworCisgICAgVHJh
bnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHByZXBhcmVJbmRleEJ1ZmZlcih0eXBlLCBy
ZXF1aXJlZFNwYWNlKTsKKworICAgIHNpemVfdCBvZmZzZXQ7CisgICAgdm9pZCAqb3V0cHV0ID0g
c3RyZWFtSWItPm1hcChyZXF1aXJlZFNwYWNlLCAmb2Zmc2V0KTsKKworICAgIHRyYW5zbGF0ZWQt
PmJ1ZmZlciA9IHN0cmVhbUliOworICAgIHRyYW5zbGF0ZWQtPm9mZnNldCA9IG9mZnNldDsKKyAg
ICB0cmFuc2xhdGVkLT5pbmRleFNpemUgPSBpbmRleFNpemUodHlwZSk7CisKKyAgICBpZiAodHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAgICAgICAgY29uc3QgR0x1Ynl0ZSAqaW4g
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcyk7CisgICAgICAgIEdMdXNob3J0
ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAgY29weUlu
ZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQt
Pm1heEluZGV4KTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQp
CisgICAgeworICAgICAgICBjb25zdCBHTHVpbnQgKmluID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
aW50Kj4oaW5kaWNlcyk7CisKKyAgICAgICAgaWYgKG1JbnRJbmRpY2VzU3VwcG9ydGVkKQorICAg
ICAgICB7CisgICAgICAgICAgICBHTHVpbnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdWludCo+KG91
dHB1dCk7CisKKyAgICAgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNs
YXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXaGVuIDMyLWJpdCBpbmRpY2VzIGFy
ZSB1bnN1cHBvcnRlZCwgZmFrZSB0aGVtIGJ5IHRydW5jYXRpbmcgdG8gMTYtYml0LgorCisgICAg
ICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOwor
CisgICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1p
bkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdXNob3J0ICppbiA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdXNob3J0Kj4oaW5kaWNlcyk7CisgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2Fz
dDxHTHVzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50LCBv
dXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAgICB9
CisKKyAgICBzdHJlYW1JYi0+dW5tYXAoKTsKKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30K
Kworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKEdMZW51bSB0eXBlKSBj
b25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQgJiYgbUludEluZGlj
ZXNTdXBwb3J0ZWQpID8gc2l6ZW9mKEdMdWludCkgOiBzaXplb2YoR0x1c2hvcnQpOworfQorCitz
dGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
IHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJl
dHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICB9
Cit9CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQoR0xlbnVt
IHR5cGUsIEdMc2l6ZWkgY291bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChjb3VudCArIDEpICog
aW5kZXhTaXplKHR5cGUpOyAvLyArMSBiZWNhdXNlIHdlIGFsd2F5cyBsZWF2ZSBhbiBleHRyYSBm
b3IgbGluZSBsb29wcworfQorCitUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKkluZGV4RGF0YU1hbmFn
ZXI6OnByZXBhcmVJbmRleEJ1ZmZlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRT
cGFjZSkKK3sKKyAgICBib29sIHVzZTMyID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1J
bnRJbmRpY2VzU3VwcG9ydGVkKTsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqc3RyZWFt
SWIgPSB1c2UzMiA/IG1TdHJlYW1CdWZmZXJJbnQgOiBtU3RyZWFtQnVmZmVyU2hvcnQ7CisKKyAg
ICBpZiAocmVxdWlyZWRTcGFjZSA+IHN0cmVhbUliLT5zaXplKCkpCisgICAgeworICAgICAgICBz
dGQ6OnNpemVfdCBuZXdTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFjZSwgMiAqIHN0cmVhbUli
LT5zaXplKCkpOworCisgICAgICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbmV3U3RyZWFtQnVm
ZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKG5ld1NpemUsIHVzZTMyID8gR0xfVU5T
SUdORURfSU5UIDogR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgICAgIGRlbGV0ZSBzdHJlYW1J
YjsKKworICAgICAgICBzdHJlYW1JYiA9IG5ld1N0cmVhbUJ1ZmZlcjsKKworICAgICAgICBpZiAo
dXNlMzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdHJlYW1CdWZmZXJJbnQgPSBzdHJlYW1J
YjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdHJl
YW1CdWZmZXJTaG9ydCA9IHN0cmVhbUliOworICAgICAgICB9CisgICAgfQorCisgICAgc3RyZWFt
SWItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNlKTsKKworICAgIHJldHVybiBzdHJlYW1JYjsK
K30KKworR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZVJlbmRlclZhbGlkYXRlVW5pbmRleGVk
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pCit7CisgICAgaWYgKGNvdW50ID49IDY1NTM1KSByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsK
KworICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7CisgICAgICAgIC8vIEZvciBs
aW5lIGxvb3BzLCBjcmVhdGUgYSBzaW5nbGUtdXNlIGJ1ZmZlciB0aGF0IHJ1bnMgMCAtIGNvdW50
LTEsIDAuCisgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7CisgICAgICAgIG1MaW5lTG9v
cEJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcigoY291bnQrMSkgKiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAgICAgICAgdW5zaWduZWQg
c2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCAqPihtTGluZUxvb3BC
dWZmZXItPm1hcCgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljZXNbaV0gPSBpOworICAgICAgICB9CisKKyAg
ICAgICAgaW5kaWNlc1tjb3VudF0gPSAwOworCisgICAgICAgIG1MaW5lTG9vcEJ1ZmZlci0+dW5t
YXAoKTsKKworICAgICAgICBpbmRleEluZm8tPmJ1ZmZlciA9IG1MaW5lTG9vcEJ1ZmZlcjsKKyAg
ICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50ICsgMTsKKyAgICAgICAgaW5kZXhJbmZvLT5t
YXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAobUNvdW50aW5nQnVmZmVy
U2l6ZSA8IGNvdW50KQorICAgIHsKKyAgICAgICAgbUNvdW50aW5nQnVmZmVyU2l6ZSA9IHN0ZDo6
bWF4KHN0YXRpY19jYXN0PEdMc2l6ZWk+KGNlaWxQb3cyKGNvdW50KSksIG1Db3VudGluZ0J1ZmZl
clNpemUqMik7CisKKyAgICAgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgbUNv
dW50aW5nQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKGNvdW50ICogc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSwgR0xfVU5TSUdORURfU0hPUlQpOworCisgICAgICAgIHVuc2lnbmVk
IHNob3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4obUNvdW50aW5n
QnVmZmVyLT5tYXAoKSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICBpbmRleEluZm8tPmJ1
ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50
OworICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpbmRleEluZm8tPmJ1ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsK
KyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50OworICAgICAgICBpbmRleEluZm8tPm1h
eEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKworICAgIGluZGV4SW5mby0+aW5kZXhTaXplID0g
c2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICBpbmRleEluZm8tPm1pbkluZGV4ID0gMDsKKyAg
ICBpbmRleEluZm8tPm9mZnNldCA9IDA7CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisK
K30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFu
YWdlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRl
eERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIGdlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5k
ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRp
b24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4KKworI2lmbmRlZiBMSUJHTEVTVjJfR0VPTUVU
UllfSU5ERVhEQVRBTUFOQUdFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfSU5ERVhE
QVRBTUFOQUdFUl9IXworCisjaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPGNzdGRkZWY+CisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcjsK
K2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBUcmFuc2xhdGVkSW5kZXhCdWZmZXI7CitzdHJ1
Y3QgRm9ybWF0Q29udmVydGVyOworCitzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YQoreworICAg
IEdMdWludCBtaW5JbmRleDsKKyAgICBHTHVpbnQgbWF4SW5kZXg7CisgICAgR0x1aW50IGNvdW50
OworICAgIEdMdWludCBpbmRleFNpemU7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmJ1
ZmZlcjsKKyAgICBHTHNpemVpIG9mZnNldDsKK307CisKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXIK
K3sKKyAgcHVibGljOgorICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVm
ZmVyQmFja0VuZCAqYmFja2VuZCk7CisgICAgfkluZGV4RGF0YU1hbmFnZXIoKTsKKworICAgIEdM
ZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
Y291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBU
cmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsKKyAgICBHTGVudW0gcHJlUmVuZGVyVmFs
aWRhdGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRl
eERhdGEgKmluZGV4SW5mbyk7CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNpemVfdCBJbmRleERh
dGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3RkOjpzaXplX3Qg
SW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKKyAgICBzdGQ6
OnNpemVfdCBzcGFjZVJlcXVpcmVkKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50KSBjb25zdDsK
KyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnByZXBhcmVJbmRleEJ1ZmZlcihHTGVudW0gdHlw
ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSk7CisKKyAgICBDb250ZXh0ICptQ29udGV4dDsK
KyAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKworICAgIGJvb2wgbUludEluZGljZXNTdXBw
b3J0ZWQ7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXJTaG9ydDsK
KyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXJJbnQ7CisKKyAgICBUcmFu
c2xhdGVkSW5kZXhCdWZmZXIgKm1Db3VudGluZ0J1ZmZlcjsKKyAgICBHTHNpemVpIG1Db3VudGlu
Z0J1ZmZlclNpemU7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1MaW5lTG9vcEJ1ZmZl
cjsKK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX0lOREVYREFUQU1B
TkFHRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVy
dGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9n
ZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcx
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5o
OiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRo
ZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9t
ZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRy
eS9iYWNrZW5kLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFn
ZXIuaCIKKworbmFtZXNwYWNlCit7CisgICAgZW51bSB7IElOSVRJQUxfU1RSRUFNX0JVRkZFUl9T
SVpFID0gMTAyNCoxMDI0IH07Cit9CisKK25hbWVzcGFjZSBnbAoreworCitWZXJ0ZXhEYXRhTWFu
YWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAq
YmFja2VuZCkKKyAgICA6IG1Db250ZXh0KGNvbnRleHQpLCBtQmFja2VuZChiYWNrZW5kKSwgbURp
cnR5Q3VycmVudFZhbHVlcyh0cnVlKSwgbUN1cnJlbnRWYWx1ZU9mZnNldCgwKQoreworICAgIG1T
dHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyKElOSVRJQUxfU1RSRUFN
X0JVRkZFUl9TSVpFKTsKKyAgICB0cnkKKyAgICB7CisgICAgICAgIG1DdXJyZW50VmFsdWVCdWZm
ZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyg0ICogc2l6ZW9m
KGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgfQorICAgIGNhdGNoICguLi4pCisg
ICAgeworICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICAgICAgdGhyb3c7CisgICAg
fQorfQorCitWZXJ0ZXhEYXRhTWFuYWdlcjo6flZlcnRleERhdGFNYW5hZ2VyKCkKK3sKKyAgICBk
ZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICBkZWxldGUgbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKK30K
Kworc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBWZXJ0ZXhEYXRhTWFuYWdlcjo6Z2V0
QWN0aXZlQXR0cmlicygpIGNvbnN0Cit7CisgICAgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRS
SUJTPiBhY3RpdmU7CisKKyAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgYWN0aXZlW2F0dHJpYnV0ZUluZGV4XSA9IChwcm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4
KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgfQorCisgICAgcmV0dXJuIGFjdGl2ZTsKK30K
KworR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZShHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCkKK3sKKyAgICBjb25zdCBBdHRy
aWJ1dGVTdGF0ZSAqYXR0cmlicyA9IG1Db250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJCbG9jaygpOwor
ICAgIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gYWN0aXZlQXR0cmlicyA9
IGdldEFjdGl2ZUF0dHJpYnMoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoIWFjdGl2ZUF0dHJpYnNbaV0gJiYg
YXR0cmlic1tpXS5tRW5hYmxlZCAmJiBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlciAhPSAwICYmICFt
Q29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKSkKKyAgICAgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgdHJhbnNsYXRl
ZFtpXS5lbmFibGVkID0gYWN0aXZlQXR0cmlic1tpXTsKKyAgICB9CisKKyAgICBib29sIHVzZXND
dXJyZW50VmFsdWVzID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYg
IWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzZXNDdXJyZW50
VmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSGFuZGxlIHRoZSBpZGVudGl0eS1tYXBwZWQgYXR0cmlidXRlcy4KKyAgICAvLyBQcm9j
ZXNzIGFycmF5IGF0dHJpYnV0ZXMuCisKKyAgICBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlID0g
MDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisg
ICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFibGVk
KQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJlZFNwYWNlICs9IHNwYWNlUmVxdWlyZWQo
YXR0cmlic1tpXSwgY291bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVk
U3BhY2UgPiBtU3RyZWFtQnVmZmVyLT5zaXplKCkpCisgICAgeworICAgICAgICBzdGQ6OnNpemVf
dCBuZXdTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFjZSwgMyAqIG1TdHJlYW1CdWZmZXItPnNp
emUoKSAvIDIpOyAvLyAxLjUgeCBtU3RyZWFtQnVmZmVyLT5zaXplKCkgaXMgYXJiaXRyYXJ5IGFu
ZCBzaG91bGQgYmUgY2hlY2tlZCB0byBzZWUgd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSByZWFsbG9j
YXRpb25zLgorCisgICAgICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm5ld1N0cmVhbUJ1ZmZl
ciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXIobmV3U2l6ZSk7CisKKyAgICAgICAgZGVs
ZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgICAgIG1TdHJlYW1CdWZmZXIgPSBuZXdTdHJlYW1CdWZm
ZXI7CisgICAgfQorCisgICAgbVN0cmVhbUJ1ZmZlci0+cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3Bh
Y2UpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmIGF0dHJpYnNbaV0ubUVu
YWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvcm1hdENvbnZlcnRlciBmb3JtYXRDb252
ZXJ0ZXIgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0ubVR5cGUsIGF0
dHJpYnNbaV0ubVNpemUsIGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQpOworCisgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm5vbkFycmF5ID0gZmFsc2U7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnR5cGUgPSBhdHRyaWJzW2ldLm1UeXBlOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zaXpl
ID0gYXR0cmlic1tpXS5tU2l6ZTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9ybWFsaXpl
ZCA9IGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQ7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0
cmlkZSA9IGZvcm1hdENvbnZlcnRlci5vdXRwdXRWZXJ0ZXhTaXplOworICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5idWZmZXIgPSBtU3RyZWFtQnVmZmVyOworCisgICAgICAgICAgICBzaXplX3Qg
aW5wdXRTdHJpZGUgPSBpbnRlcnByZXRHbFN0cmlkZShhdHRyaWJzW2ldKTsKKyAgICAgICAgICAg
IHNpemVfdCBlbGVtZW50U2l6ZSA9IHR5cGVTaXplKGF0dHJpYnNbaV0ubVR5cGUpICogYXR0cmli
c1tpXS5tU2l6ZTsKKworICAgICAgICAgICAgdm9pZCAqb3V0cHV0ID0gbVN0cmVhbUJ1ZmZlci0+
bWFwKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQpLCAmdHJhbnNsYXRlZFtpXS5vZmZz
ZXQpOworCisgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dDsKKyAgICAgICAgICAgIGlmIChh
dHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBC
dWZmZXIgKmJ1ZmZlciA9IG1Db250ZXh0LT5nZXRCdWZmZXIoYXR0cmlic1tpXS5tQm91bmRCdWZm
ZXIpOworCisgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
c2l6ZV90PihhdHRyaWJzW2ldLm1Qb2ludGVyKTsKKworICAgICAgICAgICAgICAgIC8vIEJlZm9y
ZSB3ZSBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHNpemUgYmVsb3csIG1ha2Ugc3VyZSBpdCBjYW4g
YmUgY29tcHV0ZWQgd2l0aG91dCBpbnRlZ2VyIG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGlm
IChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBzdGFydCA8IHN0YXRp
Y19jYXN0PHN0ZDo6c2l6ZV90Pihjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgfHwgc3RkOjpu
dW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC8gaW5wdXRTdHJpZGUgPCBzdGF0aWNf
Y2FzdDxzdGQ6OnNpemVfdD4oc3RhcnQgKyBjb3VudCAtIDEpIC8vIGl0J3MgYSBwcmVyZXF1aXNp
dGUgdGhhdCBjb3VudCA+PSAxLCBzbyBzdGFydCtjb3VudC0xID49IDAuCisgICAgICAgICAgICAg
ICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAtIG9mZnNl
dCA8IGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQgLSAxKQorICAgICAgICAgICAgICAgICAg
ICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBlbGVtZW50U2l6
ZSA8IG9mZnNldCArIGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQgLSAxKSArIGVsZW1lbnRT
aXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUJ1ZmZl
ci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgKyBp
bnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50U2l6ZSA+IGJ1ZmZlci0+
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUJ1
ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BF
UkFUSU9OOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnB1dCA9IGF0dHJpYnNbaV0ubVBvaW50ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIGlucHV0U3RyaWRlICog
c3RhcnQ7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXRDb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5w
dXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogaW5wdXRTdHJpZGUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcm1h
dENvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1c2VzQ3VycmVudFZhbHVlcykKKyAgICB7Cisg
ICAgICAgIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoYXR0cmlicywgYWN0aXZlQXR0cmlicywg
dHJhbnNsYXRlZCwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30K
Kworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBj
b25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JZVEU6IGNh
c2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgICAgY2FzZSBH
TF9TSE9SVDogY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHNob3J0KTsK
KyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiBzaXplb2YoR0xmaXhlZCk7CisgICAgICBjYXNl
IEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90
IFZlcnRleERhdGFNYW5hZ2VyOjppbnRlcnByZXRHbFN0cmlkZShjb25zdCBBdHRyaWJ1dGVTdGF0
ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiBhdHRyaWIubVN0cmlkZSA/IGF0dHJpYi5t
U3RyaWRlIDogdHlwZVNpemUoYXR0cmliLm1UeXBlKSAqIGF0dHJpYi5tU2l6ZTsKK30KKworLy8g
Um91bmQgdXAgeCAoPj0wKSB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBtdWx0aXBsZSAoPjApLgor
Ly8gMCByb3VuZHMgdXAgdG8gMC4KK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjpyb3Vu
ZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6ZV90IG11bHRpcGxlKSBjb25zdAoreworICAgIEFT
U0VSVCh4ID49IDApOworICAgIEFTU0VSVChtdWx0aXBsZSA+IDApOworCisgICAgc3RkOjpzaXpl
X3QgcmVtYWluZGVyID0geCAlIG11bHRpcGxlOworICAgIGlmIChyZW1haW5kZXIgIT0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB4ICsgbXVsdGlwbGUgLSByZW1haW5kZXI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KK30KKworc3RkOjpzaXplX3Qg
VmVydGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0
dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVydGV4KSBjb25zdAoreworICAgIHN0ZDo6c2l6ZV90IHNp
emUgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVyKGF0dHJpYi5tVHlwZSwgYXR0cmliLm1T
aXplLCBhdHRyaWIubU5vcm1hbGl6ZWQpLm91dHB1dFZlcnRleFNpemU7CisgICAgc2l6ZSAqPSBt
YXhWZXJ0ZXg7CisKKyAgICByZXR1cm4gcm91bmRVcChzaXplLCA0ICogc2l6ZW9mKEdMZmxvYXQp
KTsKK30KKwordm9pZCBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJvY2Vzc05vbkFycmF5QXR0cmlidXRl
cyhjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmlicywgY29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZF
UlRFWF9BVFRSSUJTPiAmYWN0aXZlQXR0cmlicywgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNs
YXRlZCwgc3RkOjpzaXplX3QgY291bnQpCit7CisgICAgaWYgKG1EaXJ0eUN1cnJlbnRWYWx1ZXMp
CisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCB0b3RhbFNpemUgPSA0ICogc2l6ZW9mKGZsb2F0
KSAqIE1BWF9WRVJURVhfQVRUUklCUzsKKworICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyLT5y
ZXNlcnZlU3BhY2UodG90YWxTaXplKTsKKworICAgICAgICBmbG9hdCogY3VycmVudFZhbHVlcyA9
IHN0YXRpY19jYXN0PGZsb2F0Kj4obUN1cnJlbnRWYWx1ZUJ1ZmZlci0+bWFwKHRvdGFsU2l6ZSwg
Jm1DdXJyZW50VmFsdWVPZmZzZXQpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIGFz
c3VtZXMgdGhhdCB0aGUgR0xfRkxPQVR4NCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJhY2stZW5kLiAo
Rm9yIEQzRDksIGl0IGlzIGEgbWFuZGF0b3J5IGZvcm1hdC4pCisgICAgICAgICAgICBjdXJyZW50
VmFsdWVzW2kqNCswXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVswXTsKKyAgICAgICAgICAg
IGN1cnJlbnRWYWx1ZXNbaSo0KzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOworICAg
ICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMl0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVb
Ml07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCszXSA9IGF0dHJpYnNbaV0ubUN1cnJl
bnRWYWx1ZVszXTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXItPnVu
bWFwKCk7CisgICAgfQorCisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYg
IWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0ubm9uQXJyYXkgPSB0cnVlOworCisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmJ1ZmZlciA9
IG1DdXJyZW50VmFsdWVCdWZmZXI7CisKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9
IEdMX0ZMT0FUOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zaXplID0gNDsKKyAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0ubm9ybWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgdHJhbnNs
YXRlZFtpXS5zdHJpZGUgPSAwOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBt
Q3VycmVudFZhbHVlT2Zmc2V0ICsgNCAqIHNpemVvZihmbG9hdCkgKiBpOworICAgICAgICB9Cisg
ICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERh
dGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9W
ZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9n
ZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oOiBE
ZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBC
dWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfR0VPTUVUUllf
VkVSVEVYREFUQU1BTkFHRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWERB
VEFNQU5BR0VSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKwor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQnVmZmVyOwor
Y2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXI7CitzdHJ1
Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK3N0cnVjdCBGb3JtYXRDb252ZXJ0ZXI7CitzdHJ1Y3Qg
VHJhbnNsYXRlZEluZGV4RGF0YTsKKworY2xhc3MgVmVydGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVi
bGljOgorICAgIFZlcnRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tF
bmQgKmJhY2tlbmQpOworICAgIH5WZXJ0ZXhEYXRhTWFuYWdlcigpOworCisgICAgdm9pZCBkaXJ0
eUN1cnJlbnRWYWx1ZXMoKSB7IG1EaXJ0eUN1cnJlbnRWYWx1ZXMgPSB0cnVlOyB9CisKKyAgICBH
TGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMpOworCisgIHByaXZhdGU6CisgICAgc3RkOjpi
aXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBnZXRBY3RpdmVBdHRyaWJzKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlU3RhdGUgKmF0
dHJpYnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gJmFjdGl2ZUF0dHJp
YnMsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIHN0ZDo6c2l6ZV90IGNvdW50KTsK
KworICAgIHN0ZDo6c2l6ZV90IHR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKKyAgICBzdGQ6
OnNpemVfdCBpbnRlcnByZXRHbFN0cmlkZShjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliKSBj
b25zdDsKKworICAgIHN0ZDo6c2l6ZV90IHJvdW5kVXAoc3RkOjpzaXplX3QgeCwgc3RkOjpzaXpl
X3QgbXVsdGlwbGUpIGNvbnN0OworICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoY29uc3Qg
QXR0cmlidXRlU3RhdGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVydGV4KSBjb25zdDsKKwor
ICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIEJ1ZmZlckJhY2tFbmQgKm1CYWNrZW5kOworCisg
ICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlcjsKKworICAgIGJvb2wgbURp
cnR5Q3VycmVudFZhbHVlczsKKyAgICBzdGQ6OnNpemVfdCBtQ3VycmVudFZhbHVlT2Zmc2V0OyAg
ICAgICAgICAgIC8vIE9mZnNldCB3aXRoaW4gbUN1cnJlbnRWYWx1ZUJ1ZmZlciB0aGF0IHRoZSBj
dXJyZW50IGF0dHJpYnV0ZSB2YWx1ZXMgd2VyZSBsYXN0IGxvYWRlZCBhdC4KKyAgICBUcmFuc2xh
dGVkVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVmZmVyOworfTsKKworfQorCisjZW5kaWYg
ICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYREFUQU1BTkFHRVJfSF8KSW5kZXg6IEFOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L2JhY2tlbmQuaDogQWJz
dHJhY3QgY2xhc3NlcyBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIGFuZCBU
cmFuc2xhdGVkSW5kZXhCdWZmZXIKKy8vIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbnkg
QVBJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEFOR0xFLgorCisjaW5jbHVkZSAibGliR0xF
U3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCitu
YW1lc3BhY2UgZ2wKK3sKKwordm9pZCAqVHJhbnNsYXRlZEJ1ZmZlcjo6bWFwKHN0ZDo6c2l6ZV90
IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZzZXQpCit7CisgICAgQVNTRVJUKHJlcXVp
cmVkU3BhY2UgPD0gbUJ1ZmZlclNpemUpOworCisgICAgcmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3Bh
Y2UpOworCisgICAgKm9mZnNldCA9IG1DdXJyZW50UG9pbnQ7CisgICAgbUN1cnJlbnRQb2ludCAr
PSByZXF1aXJlZFNwYWNlOworCisgICAgcmV0dXJuIHN0cmVhbWluZ01hcCgqb2Zmc2V0LCByZXF1
aXJlZFNwYWNlKTsKK30KKwordm9pZCBUcmFuc2xhdGVkQnVmZmVyOjpyZXNlcnZlU3BhY2Uoc3Rk
OjpzaXplX3QgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBpZiAobUN1cnJlbnRQb2ludCArIHJlcXVp
cmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIHJlY3ljbGUoKTsKKyAgICAg
ICAgbUN1cnJlbnRQb2ludCA9IDA7CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L2JhY2tlbmQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvYmFja2VuZC5oOiBBYnN0cmFjdCBjbGFzc2Vz
IEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRl
eEJ1ZmZlcgorLy8gdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFueSBBUEktc3BlY2lmaWMg
aW1wbGVtZW50YXRpb24gb2YgQU5HTEUuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX0JB
Q0tFTkRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8KKworI2luY2x1
ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5o
PgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7Citj
bGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOworY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVy
OworCitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyCit7CisgICAgYm9vbCBpZGVudGl0eTsKKyAgICBz
dGQ6OnNpemVfdCBvdXRwdXRWZXJ0ZXhTaXplOworICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNv
bnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91
dCk7Cit9OworCitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZQoreworICAgIGJvb2wgZW5hYmxl
ZDsKKyAgICBib29sIG5vbkFycmF5OworCisgICAgLy8gVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCB1
bnRyYW5zbGF0ZWQgdmFsdWVzLiAoT3IganVzdCBoYXZlIHNvbWUgc29ydCBvZiBCdWZmZXJCYWNr
RW5kOjpUcmFuc2xhdGVkVHlwZUtleS4pCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3RkOjpzaXpl
X3Qgc2l6ZTsKKyAgICBib29sIG5vcm1hbGl6ZWQ7CisKKyAgICBzdGQ6OnNpemVfdCBvZmZzZXQ7
CisKKyAgICBzdGQ6OnNpemVfdCBzdHJpZGU7IC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhl
IHJlYWQgcG9pbnRlciBhdCBhbGwKKworICAgIHN0ZDo6c2l6ZV90IHNlbWFudGljSW5kZXg7CisK
KyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpidWZmZXI7Cit9OworCitjbGFzcyBCdWZmZXJC
YWNrRW5kCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5CdWZmZXJCYWNrRW5kKCkgeyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydEludEluZGljZXMoKSA9IDA7CisKKyAgICB2aXJ0dWFs
IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBz
aXplKSA9IDA7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0
ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKKyAgICB2aXJ0dWFs
IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6
ZSwgR0xlbnVtIHR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIEZvcm1hdENvbnZlcnRlciBnZXRGb3Jt
YXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXpl
KSA9IDA7CisKKyAgICAvLyBGb3IgYW4gaWRlbnRpdHktbWFwcGFibGUgc3RyZWFtLCB2ZXJpZnkg
dGhhdCB0aGUgc3RyaWRlIGFuZCBvZmZzZXQgYXJlIG9rYXkuCisgICAgdmlydHVhbCBib29sIHZh
bGlkYXRlU3RyZWFtKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBz
dHJpZGUsIHN0ZDo6c2l6ZV90IG9mZnNldCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBHTGVu
dW0gc2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleElu
Zm8pID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0
IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpID0gMDsKK307CisKK2NsYXNzIFRyYW5z
bGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRCdWZmZXIo
c3RkOjpzaXplX3Qgc2l6ZSkgOiBtQnVmZmVyU2l6ZShzaXplKSwgbUN1cnJlbnRQb2ludCgwKSB7
IH0KKyAgICB2aXJ0dWFsIH5UcmFuc2xhdGVkQnVmZmVyKCkgeyB9CisKKyAgICBzdGQ6OnNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCAqbWFwKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpID0gMDsKKworICAgIHZvaWQg
cmVzZXJ2ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpOworCisgICAgdm9pZCAqbWFw
KHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZzZXQpOworCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpID0g
MDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6c2l6ZV90IG1CdWZmZXJTaXplOworICAgIHN0ZDo6
c2l6ZV90IG1DdXJyZW50UG9pbnQ7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHJh
bnNsYXRlZEJ1ZmZlcik7Cit9OworCitjbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIDogcHVi
bGljIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRyYW5zbGF0
ZWRWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBUcmFuc2xhdGVkQnVmZmVyKHNpemUp
IHsgfQorfTsKKworY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0
ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRJbmRleEJ1ZmZl
cihzdGQ6OnNpemVfdCBzaXplKSA6IFRyYW5zbGF0ZWRCdWZmZXIoc2l6ZSkgeyB9Cit9OworCit9
CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xp
YkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxMyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvZHg5Lmg6IERpcmVjdDNEIDktYmFzZWQg
aW1wbGVtZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBh
bmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyLgorCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5
L2R4OS5oIgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCisKK25hbWVzcGFjZQorewor
Ly8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wg
dHlwZToKKy8vCisvLyBCWVRFICAgICAgICAgICAgICAgICBTSE9SVCAoQ2FzdCkKKy8vIEJZVEUt
bm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJl
c2VudGVkIGFzIFNIT1JULW5vcm0pCisvLyBVTlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElk
ZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKKy8vIFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4g
KElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gU0hPUlQgICAgICAgICAgICAgICAg
U0hPUlQgKElkZW50aXR5KQorLy8gU0hPUlQtbm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRl
bnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9B
VCAoQ2FzdCkKKy8vIFVOU0lHTkVEX1NIT1JULW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkg
b3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIEZJWEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhl
ZFRvRmxvYXQpCisvLyBGTE9BVCAgICAgICAgICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCisKKy8v
IEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVm
LiAKK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKKwordGVt
cGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7
IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlw
ZWRlZiBHTHVieXRlIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NI
T1JUPiB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9D
VHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7
IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xm
bG9hdCB0eXBlOyB9OworCisvLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0
IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQorZW51bSBE
M0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQsCisgICAgRDNEVlRfU0hPUlQsCisgICAg
RDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllURSwKKyAgICBEM0RWVF9VQllURV9OT1JN
LAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisvLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBE
M0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRp
bmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9D
VHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7
IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQz
RFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBE
M0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllU
RV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBE
M0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRo
YXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXplLgordGVtcGxhdGUgPHVu
c2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4KK3N0cnVjdCBXaWRlblJ1bGUKK3sKK307CisKK3Rl
bXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAg
ICAgICAgOiBnbDo6Tm9XaWRlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVj
dCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9FdmVu
PHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9T
SE9SVF9OT1JNLCBzaXplPiAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAg
ICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVj
dCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3Vy
PHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9V
U0hPUlRfTk9STSwgc2l6ZT4gICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OworCisvLyBW
ZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZl
cnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29t
YmluYXRpb24uCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPgorc3Ry
dWN0IFZlcnRleFR5cGVGbGFncworeworfTsKKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBjYXBm
bGFnLCB1bnNpZ25lZCBpbnQgZGVjbGZsYWc+CitzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVy
Cit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBjYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFn
ID0gZGVjbGZsYWcgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZM
T0FUMT4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9B
VCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9TSE9SVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JU
Mk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNE
RFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwg
Mj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQ
RV9VU0hPUlQyTj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9S
VDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OworCisKKy8vIFZlcnRleFR5cGVNYXBwaW5n
IG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNr
IEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgordGVtcGxhdGUgPEdM
ZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4KK3N0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZwor
eworfTsKKwordGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBl
IEZhbGxiYWNrID0gUHJlZmVycmVkPgorc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQorewor
ICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKKyAgICBlbnVtIHsgZmFsbGJhY2sg
PSBGYWxsYmFjayB9OworfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Cit0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAg
ICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAg
ICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJ
ZGVudGl0eSwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGlu
Z0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAg
ICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRf
Tk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAg
ICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENh
c3QsIE5vcm1hbGl6ZQordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNl
PEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQK
K3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9G
TE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKKworCisvLyBHaXZlbiBhIEdM
IHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVz
IHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4
ZWRUb0Zsb2F0KS4KKy8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmlu
ZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgorCisvLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3Zl
cmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBz
aW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KK3RlbXBsYXRl
IDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4K
K3N0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4KK3sKK307CisK
Ky8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRo
ZSBOb3JtYWxpemUgb3BlcmF0b3IuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxp
emU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OworCisvLyBVc2UgYSBm
dWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0
Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FU
PiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVk
VG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07CisKKy8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMg
dXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBs
ZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9y
IG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3QgRGVmYXVs
dFZlcnRleFZhbHVlc1N0YWdlMgoreworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+ICA6IGdsOjpOb3JtYWxpemVkRGVmYXVs
dFZhbHVlczxUPiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8VD4geyB9Owor
CisvLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBydWxlIGZvciBhIEQzRCB0eXBlIChleHBy
ZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kIAordGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFs
aXplZD4KK3N0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0
YWdlMjxULCBub3JtYWxpemVkPgoreworfTsKKwordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4g
c3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1hbGl6ZWQ+IDogZ2w6OlNpbXBs
ZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0
aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9yIGZh
bGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNlcyBh
biBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KK3RlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQg
fTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlw
ZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dldGhl
ci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVk
L2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2Yg
dGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5
cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5lZWRl
ZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KK3RlbXBsYXRlIDxHTGVu
dW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBDb252ZXJ0ZXIKKyAgICA6IGdsOjpWZXJ0
ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRl
eFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlLCBzaXplPiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRv
Q1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxp
emVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KK3sKK3ByaXZhdGU6CisgICAgZW51
bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUs
IG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKKyAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxk
M2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OworCitwdWJsaWM6CisgICAgZW51bSB7IGNhcGZs
YWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKKyAgICBl
bnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xm
bGFnIH07Cit9OworCit9CisKK25hbWVzcGFjZSBnbAoreworRHg5QmFja0VuZDo6RHg5QmFja0Vu
ZChDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkM2RkZXZpY2UpCisgICAgOiBt
RGV2aWNlKGQzZGRldmljZSkKK3sKKyAgICBtRGV2aWNlLT5BZGRSZWYoKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyArK2kpCisgICAgeworICAgICAgICBt
QXBwbGllZEF0dHJpYkVuYWJsZWRbaV0gPSB0cnVlOworICAgICAgICBtU3RyZWFtRnJlcXVlbmN5
W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKKyAgICB9CisKKyAgICBtU3RyZWFt
RnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCU10gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFO
Q0VEOworCisgICAgRDNEQ0FQUzkgY2FwcyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKKwor
ICAgIElEaXJlY3QzRDkgKmQzZE9iamVjdDsKKyAgICBtRGV2aWNlLT5HZXREaXJlY3QzRCgmZDNk
T2JqZWN0KTsKKworICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgaWRlbnQ7CisgICAgZDNkT2Jq
ZWN0LT5HZXRBZGFwdGVySWRlbnRpZmllcihjYXBzLkFkYXB0ZXJPcmRpbmFsLCAwLCAmaWRlbnQp
OworICAgIGQzZE9iamVjdC0+UmVsZWFzZSgpOworCisgICAgLy8gSW5zdGFuY2luZyBpcyBtYW5k
YXRvcnkgZm9yIGFsbCBIVyB3aXRoIFNNMyB2ZXJ0ZXggc2hhZGVycywgYnV0IGF2b2lkIGhhcmR3
YXJlIHdoZXJlIGl0IGRvZXMgbm90IHdvcmsuCisgICAgbVVzZUluc3RhbmNpbmdGb3JTdHJpZGVa
ZXJvID0gKGNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbiA+PSBEM0RWU19WRVJTSU9OKDMsIDApICYm
IGlkZW50LlZlbmRvcklkICE9IDB4ODA4Nik7CisgICAgbVN1cHBvcnRJbnRJbmRpY2VzID0gKGNh
cHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpKTsKKworICAgIGNoZWNrVmVydGV4Q2Fwcyhj
YXBzLkRlY2xUeXBlcyk7Cit9CisKK0R4OUJhY2tFbmQ6On5EeDlCYWNrRW5kKCkKK3sKKyAgICBt
RGV2aWNlLT5SZWxlYXNlKCk7Cit9CisKK2Jvb2wgRHg5QmFja0VuZDo6c3VwcG9ydEludEluZGlj
ZXMoKQoreworICAgIHJldHVybiBtU3VwcG9ydEludEluZGljZXM7Cit9CisKKy8vIEluaXRpYWxp
c2UgYSBUcmFuc2xhdGlvbkluZm8KKyNkZWZpbmUgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0
eSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBu
b3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252
ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+KENvbnZlcnRlcjx0eXBlLCBub3Jt
LCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKKyAgICB9CisKKyNkZWZpbmUgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0sIHNpemUpICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZD46OmNhcGZsYWcs
IFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkKSwg
ICAgICAgIFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNlRmFsbGJh
Y2spICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKHR5
cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JN
X1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgZmFsc2UsIDQpIH0sIFwKKyAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJ
WkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0
cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDMpLCBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgNCkgfSwgICAgIFwKKyAg
ICB9CisKK2NvbnN0IER4OUJhY2tFbmQ6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gRHg5QmFja0Vu
ZDo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplLTFdCit7CisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAorICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKKyAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfU0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05F
RF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZJWEVEKSwKKyAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfRkxPQVQpCit9OworCit2b2lkIER4OUJhY2tFbmQ6OmNoZWNr
VmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0Zs
YWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNh
cHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUF0
dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnBy
ZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBl
c1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZl
cnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhC
dWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZl
cihtRGV2aWNlLCBzaXplKTsKK30KKworVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqRHg5QmFja0Vu
ZDo6Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBzaXplKQorewor
ICAgIGlmIChtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8pCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBzaXplKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fy
b3VuZChtRGV2aWNlLCBzaXplKTsKKyAgICB9Cit9CisKK1RyYW5zbGF0ZWRJbmRleEJ1ZmZlciAq
RHg5QmFja0VuZDo6Y3JlYXRlSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5
cGUpCit7CisgICAgcmV0dXJuIG5ldyBEeDlJbmRleEJ1ZmZlcihtRGV2aWNlLCBzaXplLCB0eXBl
KTsKK30KKworLy8gVGhpcyBpcyB1c2VkIHRvIGluZGV4IG1BdHRyaWJ1dGVUeXBlcyBhbmQgbVBv
c3NpYmxlVHJhbnNsYXRpb25zLgordW5zaWduZWQgaW50IER4OUJhY2tFbmQ6OnR5cGVJbmRleChH
TGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJu
IDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7CisgICAg
ICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDU7CisgICAgfQorfQorCitGb3JtYXRDb252ZXJ0ZXIgRHg5QmFja0VuZDo6Z2V0
Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1h
bGl6ZSkKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0ZVR5cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9y
bWFsaXplXVtzaXplLTFdLmZvcm1hdENvbnZlcnRlcjsKK30KKworRDNEREVDTFRZUEUgRHg5QmFj
a0VuZDo6bWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9v
bCBub3JtYWxpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5k
ZXgodHlwZSldW25vcm1hbGl6ZV1bc2l6ZS0xXS5kM2REZWNsVHlwZTsKK30KKworYm9vbCBEeDlC
YWNrRW5kOjp2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3Rk
OjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0Cit7CisgICAgLy8gRDNE
OSByZXF1aXJlcyB0aGUgc3RyZWFtIG9mZnNldCBhbmQgc3RyaWRlIHRvIGJlIGEgbXVsdGlwbGUg
b2YgRFdPUkQuCisgICAgcmV0dXJuIChzdHJpZGUgJSBzaXplb2YoRFdPUkQpID09IDAgJiYgb2Zm
c2V0ICUgc2l6ZW9mKERXT1JEKSA9PSAwKTsKK30KKworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAq
RHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHZiID8gc3RhdGljX2Nhc3Q8RHg5VmVydGV4QnVmZmVyKj4odmIpLT5n
ZXRCdWZmZXIoKSA6IE5VTEw7Cit9CisKK0lEaXJlY3QzREluZGV4QnVmZmVyOSAqRHg5QmFja0Vu
ZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVmZmVyICppYikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaWIgPyBzdGF0aWNfY2FzdDxEeDlJbmRleEJ1ZmZlcio+KGliKS0+Z2V0QnVmZmVyKCkg
OiBOVUxMOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6c2V0dXBJbmRpY2VzUHJlRHJhdyhjb25z
dCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pCit7CisgICAgbURldmljZS0+U2V0SW5k
aWNlcyhnZXREeEJ1ZmZlcihpbmRleEluZm8uYnVmZmVyKSk7CisgICAgcmV0dXJuIEdMX05PX0VS
Uk9SOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKQoreworICAgIEhSRVNVTFQgaHI7CisK
KyAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMrMV07CisK
KyAgICBEM0RWRVJURVhFTEVNRU5UOSAqbmV4dEVsZW1lbnQgPSAmZWxlbWVudHNbMF07CisKKyAg
ICBmb3IgKEJZVEUgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7Cisg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG5leHRFbGVtZW50LT5TdHJlYW0gPSBpICsgMTsgICAgLy8gU3RyZWFtIDAgaXMgc2tpcHBlZCBi
ZWNhdXNlIEQzRCBkb2VzIG5vdCBwZXJtaXQgaXQgdG8gYmUgYW4gaW5zdGFuY2VkIHN0cmVhbS4K
KyAgICAgICAgICAgIG5leHRFbGVtZW50LT5PZmZzZXQgPSAwOworICAgICAgICAgICAgbmV4dEVs
ZW1lbnQtPlR5cGUgPSBzdGF0aWNfY2FzdDxCWVRFPihtYXBBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0
ZXNbaV0udHlwZSwgYXR0cmlidXRlc1tpXS5zaXplLCBhdHRyaWJ1dGVzW2ldLm5vcm1hbGl6ZWQp
KTsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFV
TFQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNhZ2VJbmRleCA9IGF0dHJpYnV0ZXNbaV0u
c2VtYW50aWNJbmRleDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50Kys7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9F
TkQoKTsKKyAgICAqbmV4dEVsZW1lbnQgPSBlbmQ7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNs
YXJhdGlvbjkqIHZlcnRleERlY2xhcmF0aW9uOworICAgIGhyID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZ2ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgbURldmlj
ZS0+U2V0VmVydGV4RGVjbGFyYXRpb24odmVydGV4RGVjbGFyYXRpb24pOworICAgIHZlcnRleERl
Y2xhcmF0aW9uLT5SZWxlYXNlKCk7CisKKyAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwg
TlVMTCwgMCwgMCk7CisKKyAgICBib29sIG5vbkFycmF5QXR0cmlidXRlcyA9IGZhbHNlOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzW2ldLm5vbkFycmF5KSBub25BcnJheUF0dHJpYnV0ZXMgPSB0cnVl
OworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoaSArIDEsIGdldER4QnVm
ZmVyKGF0dHJpYnV0ZXNbaV0uYnVmZmVyKSwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0
ZXNbaV0uc3RyaWRlKTsKKyAgICAgICAgICAgIGlmICghbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ld
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtp
XSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZShpICsgMSwgMCwg
MCwgMCk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVVzZUluc3RhbmNp
bmdGb3JTdHJpZGVaZXJvKQorICAgIHsKKyAgICAgICAgLy8gV2hlbiB0aGVyZSBhcmUgbm8gc3Ry
aWRlIHplcm8gYXR0cmlidXRlcywgd2UgZGlzYWJsZSBpbnN0YW5jaW5nIHNvIHRoYXQgRHJhd1By
aW1pdGl2ZSBjYW4gYmUgdXNlZC4KKworICAgICAgICBpZiAobm9uQXJyYXlBdHRyaWJ1dGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVswXSAhPSBTVFJFQU1f
RlJFUVVFTkNZX0lOREVYRUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVN0cmVh
bUZyZXF1ZW5jeVswXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsKKyAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVE
REFUQSB8IDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJheSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lb
aSsxXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2krMV0g
PSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RTVFJFQU1TT1VSQ0VfSU5T
VEFOQ0VEQVRBIHwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpKzFdICE9IFNU
UkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2krMV0gPSBTVFJFQU1fRlJF
UVVFTkNZX0lOREVYRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShpICsgMSwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRU
UklCUyArIDE7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVN0cmVh
bUZyZXF1ZW5jeVtpXSAhPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpXSA9IFNUUkVB
TV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBz
aG91bGQgbm90IGJlIG5lZWRlZCwgYnV0IG90aGVyd2lzZSB0aGVyZSBpcyBhIGJ1Z2d5IGRyaXZl
ciB0aGF0IHdpbGwgbGVhdmUgaW5zdGFuY2luZworICAgICAgICAgICAgICAgICAgICAvLyBlbmFi
bGVkIGZvciB0aGUgZmlyc3QgZHJhdyBhZnRlciBpdCBoYXMgYmVlbiB0dXJuZWQgb2ZmLgorICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIEQzRFNUUkVB
TVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOworCisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitE
eDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OkR4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpCisgICAgOiBUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyKHNpemUpCit7CisgICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVy
KHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xf
REVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgIGlmIChociAhPSBTX09LKQorICAg
IHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVy
IG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOwor
ICAgIH0KK30KKworRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpEeDlWZXJ0ZXhCdWZmZXIo
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZs
YWdzKQorICAgIDogVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzaXplKQoreworICAgIEhSRVNVTFQg
aHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplLCB1c2FnZUZsYWdzLCAwLCBEM0RQ
T09MX0RFRkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICBpZiAoaHIgIT0gU19PSykK
KyAgICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1
ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2Mo
KTsKKyAgICB9Cit9CisKKworRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjp+RHg5VmVydGV4
QnVmZmVyKCkKK3sKKyAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Cit9CisKK0lEaXJlY3Qz
RFZlcnRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKK30KKwordm9pZCAqRHg5QmFja0Vu
ZDo6RHg5VmVydGV4QnVmZmVyOjptYXAoKQoreworICAgIHZvaWQgKm1hcFB0cjsKKworICAgIG1W
ZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwgMCk7CisKKyAgICByZXR1cm4gbWFwUHRy
OworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6dW5tYXAoKQoreworICAg
IG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRl
eEJ1ZmZlcjo6cmVjeWNsZSgpCit7CisgICAgdm9pZCAqZHVtbXk7CisgICAgbVZlcnRleEJ1ZmZl
ci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7CisgICAgbVZlcnRleEJ1ZmZl
ci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6c3Ry
ZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2
b2lkICptYXBQdHI7CisKKyAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1h
cFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisKKyAgICByZXR1cm4gbWFwUHRyOworfQorCisv
LyBOb3JtYWxseSBWQnMgYXJlIGNyZWF0ZWQgd2l0aCBEM0RVU0FHRV9XUklURU9OTFkgfCBEM0RV
U0FHRV9EWU5BTUlDLCBidXQgc29tZSBoYXJkd2FyZSAmIGRyaXZlcnMgd29uJ3QgcmVuZGVyCisv
LyBpZiBhbnkgc3RyaWRlLXplcm8gc3RyZWFtcyBhcmUgaW4gRDNEVVNBR0VfRFlOQU1JQyBWQnMs
IHNvIHRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRlIHN1Y2ggVkJzIHdpdGggb25seSBEM0RV
U0FHRV9XUklURU9OTFkgc2V0LgorLy8gRDNETE9DS19ESVNDQVJEIGFuZCBEM0RMT0NLX05PT1ZF
UldSSVRFIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBEM0RVU0FHRV9EWU5BTUlDIFZCcywgc28gd2Ug
b3ZlcnJpZGUgbWV0aG9kcyB0byBhdm9pZCB1c2luZyB0aGVzZSBmbGFncy4KK0R4OUJhY2tFbmQ6
OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJv
U3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNp
emUpCisgICAgOiBEeDlWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXplLCBEM0RVU0FHRV9XUklURU9O
TFkpCit7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdv
cmthcm91bmQ6OnJlY3ljbGUoKQoreworfQorCit2b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhC
dWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNl
dCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICptYXBQdHI7CisKKyAgICBnZXRCdWZm
ZXIoKS0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIDApOworCisgICAgcmV0dXJuIG1hcFB0
cjsKK30KKworRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OkR4OUluZGV4QnVmZmVyKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpCisgICAg
OiBUcmFuc2xhdGVkSW5kZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBHTF9V
TlNJR05FRF9TSE9SVCB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBEM0RGT1JN
QVQgZm9ybWF0ID0gKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpID8gRDNERk1UX0lOREVYMTYg
OiBEM0RGTVRfSU5ERVgzMjsKKworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZUluZGV4
QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIGZvcm1h
dCwgRDNEUE9PTF9ERUZBVUxULCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKKyAgICBpZiAoaHIgIT0g
U19PSykKKyAgICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGFuIGlu
ZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAgICAgdGhyb3cgc3RkOjpiYWRf
YWxsb2MoKTsKKyAgICB9Cit9CisKK0R4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjp+RHg5SW5k
ZXhCdWZmZXIoKQoreworICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOworfQorCitJRGlyZWN0
M0RJbmRleEJ1ZmZlcjkqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6
RHg5SW5kZXhCdWZmZXI6Om1hcCgpCit7CisgICAgdm9pZCAqbWFwUHRyOworCisgICAgbUluZGV4
QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDApOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30K
Kwordm9pZCBEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6dW5tYXAoKQoreworICAgIG1JbmRl
eEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6
OnJlY3ljbGUoKQoreworICAgIHZvaWQgKmR1bW15OworICAgIG1JbmRleEJ1ZmZlci0+TG9jaygw
LCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7CisgICAgbUluZGV4QnVmZmVyLT5VbmxvY2so
KTsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnN0cmVhbWluZ01hcChz
dGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqbWFwUHRy
OworCisgICAgbUluZGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9D
S19OT09WRVJXUklURSk7CisKKyAgICByZXR1cm4gbWFwUHRyOworfQorCit9CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvZHg5Lmg6IERpcmVjdDNEIDktYmFzZWQgaW1wbGVt
ZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJh
bnNsYXRlZEluZGV4QnVmZmVyLgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0RYOV9IXworCisjaW5jbHVkZSA8ZDNkOS5oPgor
CisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9t
ZXRyeS9iYWNrZW5kLmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFzcyBEeDlCYWNrRW5kIDog
cHVibGljIEJ1ZmZlckJhY2tFbmQKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IER4OUJhY2tF
bmQoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZDNkZGV2aWNlKTsKKyAgICB+
RHg5QmFja0VuZCgpOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRJbnRJbmRpY2VzKCk7CisK
KyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcihz
dGQ6OnNpemVfdCBzaXplKTsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgdmly
dHVhbCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90
IHNpemUsIEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFsIEZvcm1hdENvbnZlcnRlciBnZXRGb3Jt
YXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXpl
KTsKKworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0
OworCisgICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xh
dGVkSW5kZXhEYXRhICZpbmRleEluZm8pOworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwQXR0cmli
dXRlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcyk7CisKKyAg
cHJpdmF0ZToKKyAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworCisgICAgYm9vbCBtVXNl
SW5zdGFuY2luZ0ZvclN0cmlkZVplcm87CisgICAgYm9vbCBtU3VwcG9ydEludEluZGljZXM7CisK
KyAgICBib29sIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtNQVhfVkVSVEVYX0FUVFJJQlNdOworCisg
ICAgZW51bSBTdHJlYW1GcmVxdWVuY3kKKyAgICB7CisgICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lf
VU5JTlNUQU5DRUQgPSAwLAorICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQsCisgICAg
ICAgIFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VECisgICAgfTsKKworICAgIFN0cmVhbUZyZXF1
ZW5jeSBtU3RyZWFtRnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCUysxXTsKKworICAgIHN0cnVj
dCBUcmFuc2xhdGlvbkluZm8KKyAgICB7CisgICAgICAgIEZvcm1hdENvbnZlcnRlciBmb3JtYXRD
b252ZXJ0ZXI7CisgICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CisKKyAg
ICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICBUcmFuc2xh
dGlvbkluZm8gbUF0dHJpYnV0ZVR5cGVzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRd
W3NpemUtMV0KKworICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCisgICAgeworICAg
ICAgICBEV09SRCBjYXBzRmxhZzsKKyAgICAgICAgVHJhbnNsYXRpb25JbmZvIHByZWZlcnJlZENv
bnZlcnNpb247CisgICAgICAgIFRyYW5zbGF0aW9uSW5mbyBmYWxsYmFja0NvbnZlcnNpb247Cisg
ICAgfTsKKworICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtQXR0cmlidXRl
VHlwZXMuCisgICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxl
VHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5
cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KKwor
ICAgIHZvaWQgY2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7CisKKyAgICB1bnNpZ25l
ZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdDsKKworICAgIGNsYXNzIER4OVZlcnRl
eEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyCisgICAgeworICAgICAgcHVi
bGljOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBz
dGQ6OnNpemVfdCBzaXplKTsKKyAgICAgICAgdmlydHVhbCB+RHg5VmVydGV4QnVmZmVyKCk7CisK
KyAgICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7CisKKyAg
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgRHg5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkICptYXAoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICpzdHJl
YW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKKworICAgICAg
cHJpdmF0ZToKKyAgICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsK
KyAgICB9OworCisgICAgY2xhc3MgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQg
OiBwdWJsaWMgRHg5VmVydGV4QnVmZmVyCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBE
eDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIHN0ZDo6c2l6ZV90IHNpemUpOworCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0
ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7CisgICAgfTsKKworICAgIGNsYXNz
IER4OUluZGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgRHg5SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSk7CisgICAgICAgIHZpcnR1YWwgfkR4
OUluZGV4QnVmZmVyKCk7CisKKyAgICAgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZm
ZXIoKSBjb25zdDsKKworICAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgKm1h
cCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNp
emVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOworCisgICAgICBwcml2YXRlOgorICAgICAg
ICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRleEJ1ZmZlcjsKKyAgICB9OworCisgICAgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAq
dmIpIGNvbnN0OworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNs
YXRlZEluZGV4QnVmZmVyICppYikgY29uc3Q7CisKKyAgICBEM0RERUNMVFlQRSBtYXBBdHRyaWJ1
dGVUeXBlKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZWQpIGNv
bnN0OworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hfCklu
ZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24u
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29u
dmVyc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4
IGNvbnZlcnNpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCisvLyB0aGUgRm9y
bWF0Q29udmVydGVyIG9iamVjdHMgdXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVt
LgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9OX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9OX0hfCisKKyNpbmNsdWRlIDxj
c3RkZGVmPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiIC8vIERlZmluZXMgSW5kZXgKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIENvbnZlcnNpb24g
dHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFu
IGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCisvLyBzdGF0aWMgVSBjb252ZXJ0
KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgaW5wdXQgdHlwZSB0byB0aGUg
b3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6IHRoZSB0eXBlIHByb2R1Y2Vk
IGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBJZGVudGl0
eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1ZTsKKworICAgIHR5cGVk
ZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChUIHgpCisgICAgeworICAg
ICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgRnJvbVQsIGNsYXNz
IFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBm
YWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgVG9UIGNv
bnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUb1Q+KHgp
OworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IENhc3Q8VCwgVD4KK3sK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7CisKKyAgICB0eXBlZGVmIFQg
T3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBU
Pgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
ZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgZmxv
YXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1p
dHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeCk7CisKKyAg
ICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbnN0
IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxlIHRpbWUKKyAgICAgICAgICAg
IC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgdGhlIGZpcnN0IHRp
bWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0aCBzdGF0aWMgZ3VhcmQgYW5k
IGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYvKDIqc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7CisgICAgICAgICAgICByZXR1cm4gKDIqZisx
KSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9CisgICAgfQorfTsKKwordGVtcGxhdGUg
PGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+CitzdHJ1Y3QgRml4ZWRUb0Zs
b2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5
cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEZyb21U
eXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvIHN0YXRp
Y19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkgPDwgU2NhbGVCaXRzKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRpdmlzb3I7CisgICAgfQorfTsK
KworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGluaXRpYWxX
aWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZlcnNpb24KKy8vIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYWZ0ZXIg
Y29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQgYW55IHNpemUuCit0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVuCit7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90
IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQsIG5vcm0tU0hPUlQsIG5vcm0tVU5TSUdO
RURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIgb3IgNCBjb21wb25lbnRzCit0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBXaWRlblRvRXZlbgoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOworICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKK307CisKK3RlbXBsYXRlIDxzdGQ6OnNp
emVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFs
V2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBoYXZlIDAgYW5kIDEgdGhhdCBhcmUganVz
dCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgU2ltcGxlRGVmYXVsdFZhbHVlcwor
eworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQorICAg
IHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEpOyB9Cit9OworCisvLyBC
dXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9yIFstMSwxXSBzbyAxLjAgaXMg
cmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0
IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQgemVybygpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkgeyByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisKKy8vIENvbnZlcnRlcjoKKy8vIHN0YXRp
YyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNm
b3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFs
U2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4CisvLyBzdGF0aWMgdm9pZCBj
b252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXpl
X3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2ZXJ0aWNlcy4gSW5wdXQgbWF5
IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlkZWQuCisKK3RlbXBsYXRlIDxj
bGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVydGVyLCBjbGFzcyBEZWZhdWx0
VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4KK3N0cnVjdCBWZXJ0ZXhEYXRh
Q29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDb252ZXJ0ZXI6Ok91dHB1dFR5cGUg
T3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA9PSBXaWRlblJ1bGU6
OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCAqIHNpemVvZihPdXRw
dXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCBJbnB1dFR5cGUg
KmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIE91dHB1dFR5cGUgKm91dCkK
KyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBuOyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWluID0gcG9pbnRlckFkZEJ5dGVz
KGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwg
MCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Cisg
ICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBzdGF0aWNfY2FzdDxPdXRwdXRU
eXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKKyAgICAgICAgICAgIGNvcHlDb21wb25l
bnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6
Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMywgc3RhdGlj
X2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25lKCkpKTsKKworICAgICAgICAg
ICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3Ry
aWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+KGluKSwgc3RyaWRlLCBuLCBz
dGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAg
Ly8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJlciBvZiBieXRlcyAobm90IHBv
aW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0YXRpYyBU
ICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXplX3QgbnVtQnl0ZXMpCisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3QgSW5wdXRUeXBlICppbiwgc3Rk
OjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1bHR2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVtZW50aW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxXaWR0aCA+IGVsZW1lbnRpbmRl
eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRbZWxlbWVudGluZGV4XSA9IENv
bnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRbZWxlbWVudGlu
ZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307
CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWENPTlZFUlNJT05f
SF8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63278</attachid>
            <date>2010-08-02 16:59:57 -0700</date>
            <delta_ts>2010-08-02 17:21:45 -0700</delta_ts>
            <desc>ANGLE source code and Xcode project. Cleaned up ChangeLog</desc>
            <filename>just_angle</filename>
            <type>text/plain</type>
            <size>1887069</size>
            <attacher name="Paul Sawaya">psawaya</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorMjAxMC0wOC0wMiAgUGF1bCBTYXdheWEgIDxwc2F3YXlhQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQU5HTEUgbGlicmFy
eSB0byBXZWJLaXQuIEZyb20gdGhlIHJlcG9zaXRvcnkgKGh0dHA6Ly9hbmdsZXByb2plY3QuZ29v
Z2xlY29kZS5jb20pIGFzIG9mIEp1bHkgMjIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc4OQorICAgICAgICAKSW5kZXg6IEFOR0xFL0FOR0xFLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvQU5HTEUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL0FOR0xFLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjI3IEBACisvLyAhJCpV
VEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmpl
Y3RWZXJzaW9uID0gNDI7CisJb2JqZWN0cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KKwkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIw
MEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CisJCUZCMzlEMjc1MTIwMEYz
NUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9
OworCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovOyB9Owor
CQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyRTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCUZCMzlEMjgxMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5j
cHAgKi87IH07CisJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi87IH07CisJCUZCMzlEMjg0MTIwMEYzNUEw
MDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJh
dmVyc2UuY3BwICovOyB9OworCQlGQjM5RDI4ODEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJ
RkIzOUQyOEExMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5
IC8qIE91dHB1dEdMU0wuY3BwICovOyB9OworCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyog
cGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJ
CUZCMzlEMjhGMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0MDEyMDBGMzVBMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkg
LyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9Owor
CQlGQjM5RDI5MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0
b20uYyAqLzsgfTsKKwkJRkIzOUQyOTYxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDgxMjAwRjM1QTAw
MDg4RTY5IC8qIGNwcC5jICovOyB9OworCQlGQjM5RDI5ODEyMDBGMzVBMDAwODhFNjkgLyogY3Bw
c3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCMzlEMjk5
MTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRCMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyAq
LzsgfTsKKwkJRkIzOUQyOUQxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRGMTIwMEYzNUEwMDA4
OEU2OSAvKiBzY2FubmVyLmMgKi87IH07CisJCUZCMzlEMkEwMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovOyB9OworCQlGQjM5RDJBMjEy
MDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi87
IH07CisJCUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEyMDBG
MzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQlGQjM5RDJBNjEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJl
ZS5jcHAgKi87IH07CisJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKKwkJRkIzOUQyQUExMjAw
RjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi87IH07CisJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9y
R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OworCQlG
QjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2
OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OworCQlGQjM5RDJDMjEyMDBGM0VGMDAwODhFNjkg
LyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJFMTIwMEYzRTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICov
OyB9OworCQlGQjM5RDJDMzEyMDBGM0VGMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgfTsKKwkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovOyB9OworCQlG
QjM5RDcyNDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQ3MjIxMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzOUQ3MjUxMjAxMDMyNDAwMDg4RTY5IC8q
IGdsc2xhbmdfdGFiLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDcyMTEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJ
RkIzOUQ3NkQxMjAxMTBGQzAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRTEyMDBGM0U2MDAwODhF
NjkgLyogUmVzb3VyY2VMaW1pdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CisJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEy
MDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFB1YmxpYywgKTsgfTsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwRDExMjAwRjBFMzAw
MDg4RTY5IC8qIGxpYmFuZ2xlLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFu
Z2xlLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUZCMzlEMTg2MTIw
MEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENv
ZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4
RTY5IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAv
KiBnbHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xhbmcubDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8q
IGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8q
IEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxOTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXpl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4
RTY5IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5p
dGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5MzEyMDBGMjYy
MDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2
OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDE5NjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRl
cm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5J
bmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
aW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUExMjAw
RjI2MjAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9j
YWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUMx
MjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RDEyMDBGMjYy
MDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RTEyMDBG
MjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBv
c3NvdXJjZV93aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1
dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBMTEyMDBGMjYy
MDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEyMTIw
MEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRI
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxw
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBNjEyMDBGMjYyMDAw
ODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTcxMjAw
RjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFGMTIw
MEYyNjIwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIw
MTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIxMTIw
MEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIyMTIwMEYy
NjIwMDA4OEU2OSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
cGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIzMTIwMEYyNjIw
MDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjQxMjAw
RjI2MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCNTEyMDBG
MjYyMDAwODhFNjkgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBzY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI2MTIwMEYy
NjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI3MTIw
MEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gc3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCOTEyMDBG
MjYyMDAwODhFNjkgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQTEyMDBGMjYy
MDAwODhFNjkgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRv
a2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQjEyMDBGMjYyMDAw
ODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZp
ZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhF
NjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzAx
MjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUMx
MTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5
bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9
IHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JH
TFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMzEyMDBG
MjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIy
MTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5sZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bmZvU2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5p
dGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJEMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJF
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxp
emVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMxMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5
IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50
ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjM0MTIwMEYz
NUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJt
ZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVk
aWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzNzEyMDBGMzVBMDAw
ODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkg
Lyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVk
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhF
NjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyog
T3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhF
NjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDAx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29s
QWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyog
YXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0
RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RTEy
MDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
NTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1
MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
LmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
NTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTUx
MjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTYxMjAw
RjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3Zl
VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4
RTY5IC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJl
bW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUExMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2OTEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNl
TGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZXNvdXJjZUxpbWl0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhF
NjkgLyogU2hhZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hh
ZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDcyMDEyMDEwMzIw
MDAwODhFNjkgLyogZ2xzbGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBnbHNsYW5nLmNwcDsgcGF0aCA9IHNyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBn
bHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3Rh
Yi5oOyBwYXRoID0gc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZ190YWIuY3Bw
OyBwYXRoID0gc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0YxMjAwRjBF
MzAwMDg4RTY5IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
Ky8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KKwkJRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJj
ZSAqLywKKwkJCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLywK
KwkJCQlGQjM5RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5
IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xBTkcgKi8sCisJCQkJRkIzOUQxODUx
MjAwRjI2MjAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDBDQjEyMDBFRjk0MDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICov
LAorCQkJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJ
CUZCMzlENzIyMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkpOwor
CQkJbmFtZSA9IEludGVybWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OworCQlGQjM5RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2
OSAvKiBsaWJhbmdsZS5hICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKKwkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCisJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKKwkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAorCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAor
CQkJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQx
OEUxMjAwRjI2MjAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDE4RjEyMDBGMjYy
MDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAorCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2
OSAvKiBJbmZvU2luay5oICovLAorCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0
aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5oICovLAorCQkJCUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNw
cCAqLywKKwkJCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICov
LAorCQkJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICov
LAorCQkJCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmggKi8sCisJCQkJRkIzOUQxOTcxMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAg
Ki8sCisJCQkJRkIzOUQxOTgxMjAwRjI2MjAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAor
CQkJCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZC
MzlEMTlBMTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIz
OUQxOUIxMjAwRjI2MjAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIz
OUQxOUMxMjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDE5RDEyMDBGMjYy
MDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJRkIzOUQxOUUxMjAwRjI2MjAwMDg4RTY5
IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlGQjM5RDE5RjEyMDBGMjYyMDAwODhFNjkg
Lyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyog
T3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxQTExMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuaCAqLywKKwkJCQlGQjM5RDFBMjEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0SExTTC5j
cHAgKi8sCisJCQkJRkIzOUQxQTMxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLywK
KwkJCQlGQjM5RDFBNDEyMDBGMjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJ
RkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5
RDFBNjEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDFBNzEy
MDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDFBODEyMDBGMjYy
MDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJRkIzOUQxQTkxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3NvciAqLywKKwkJCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVh
bGlmaWVyQWxpdmUuY3BwICovLAorCQkJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFs
aWZpZXJBbGl2ZS5oICovLAorCQkJCUZCMzlEMUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVU
cmVlLmNwcCAqLywKKwkJCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5o
ICovLAorCQkJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywK
KwkJCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5
RDFDMTEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMUMy
MTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMUNCMTIwMEYy
NjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0Mx
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDFD
RTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDFDRjEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCUZCMzlEMUQwMTIw
MEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAorCQkJCUZCMzlEMUQxMTIwMEYy
NjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAorCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuY3BwICovLAorCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuaCAqLywKKwkJCQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3Rk
LmggKi8sCisJCQkpOworCQkJaW5jbHVkZUluSW5kZXggPSAwOworCQkJbmFtZSA9IGNvbXBpbGVy
OworCQkJcGF0aCA9IHNyYy9jb21waWxlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCUZCMzlEMUE5MTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMUFBMTIwMEYyNjIw
MDA4OEU2OSAvKiBhdG9tLmMgKi8sCisJCQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0
b20uaCAqLywKKwkJCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovLAor
CQkJCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLywKKwkJCQlGQjM5RDFBRTEy
MDBGMjYyMDAwODhFNjkgLyogY3BwLmggKi8sCisJCQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5
IC8qIGNwcHN0cnVjdC5jICovLAorCQkJCUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1v
cnkuYyAqLywKKwkJCQlGQjM5RDFCMTEyMDBGMjYyMDAwODhFNjkgLyogbWVtb3J5LmggKi8sCisJ
CQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovLAorCQkJCUZCMzlEMUIz
MTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8sCisJCQkJRkIzOUQxQjQxMjAwRjI2
MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLywKKwkJCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkg
Lyogc2Nhbm5lci5oICovLAorCQkJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2Jh
bHMuaCAqLywKKwkJCQlGQjM5RDFCNzEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5jICovLAor
CQkJCUZCMzlEMUI4MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8sCisJCQkJRkIzOUQx
QjkxMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vucy5jICovLAorCQkJCUZCMzlEMUJBMTIwMEYyNjIw
MDA4OEU2OSAvKiB0b2tlbnMuaCAqLywKKwkJCSk7CisJCQlpbmNsdWRlSW5JbmRleCA9IDA7CisJ
CQlwYXRoID0gcHJlcHJvY2Vzc29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkg
LyogQmFzZVR5cGVzLmggKi8sCisJCQkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVH
ZW5HTFNMLmNwcCAqLywKKwkJCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmgg
Ki8sCisJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywK
KwkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlE
MjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMjI4MTIwMEYzNUEw
MDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQyMjkxMjAwRjM1QTAwMDg4RTY5IC8q
IGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Npbmsu
Y3BwICovLAorCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAor
CQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlG
QjM5RDIyRDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMjJF
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDIyRjEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMjMwMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMjMxMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQyMzIx
MjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzMxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMjM0MTIwMEYzNUEw
MDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2
OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5
IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRl
LmggKi8sCisJCQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLywKKwkJCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAq
LywKKwkJCQlGQjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJ
CQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5
RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQyNDAx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDI0MTEyMDBG
MzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDI0MjEyMDBGMzVBMDAw
ODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKKwkJCQlGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAorCQkJCUZCMzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAorCQkJCUZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKKwkJCQlGQjM5RDI1OTEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5
RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDI1QzEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMjVEMTIwMEYzNUEw
MDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2
OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCisJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8q
IFR5cGVzLmggKi8sCisJCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5jcHAgKi8sCisJCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5o
ICovLAorCQkJCUZCMzlEMjZGMTIwMEYzNUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLywKKwkJCSk7
CisJCQluYW1lID0gY29tcGlsZXI7CisJCQlwYXRoID0gc3JjL2NvbXBpbGVyOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHBy
ZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLywKKwkJCQlGQjM5RDI0NjEy
MDBGMzVBMDAwODhFNjkgLyogYXRvbS5oICovLAorCQkJCUZCMzlEMjQ3MTIwMEYzNUEwMDA4OEU2
OSAvKiBjb21waWxlLmggKi8sCisJCQkJRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5j
ICovLAorCQkJCUZCMzlEMjQ5MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuaCAqLywKKwkJCQlGQjM5
RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJRkIzOUQyNEIxMjAw
RjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAorCQkJCUZCMzlEMjRDMTIwMEYzNUEwMDA4OEU2
OSAvKiBtZW1vcnkuaCAqLywKKwkJCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2Vy
LmggKi8sCisJCQkJRkIzOUQyNEUxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLywK
KwkJCQlGQjM5RDI0RjEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jICovLAorCQkJCUZCMzlE
MjUwMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8sCisJCQkJRkIzOUQyNTExMjAwRjM1
QTAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAorCQkJCUZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2
OSAvKiBzeW1ib2xzLmMgKi8sCisJCQkJRkIzOUQyNTMxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJv
bHMuaCAqLywKKwkJCQlGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi8sCisJ
CQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBh
dGggPSBwcmVwcm9jZXNzb3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlG
QjM5RDJCRDEyMDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJl
c291cmNlTGltaXRzLmggKi8sCisJCQkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRl
ckxhbmcuaCAqLywKKwkJCSk7CisJCQluYW1lID0gR0xTTEFORzsKKwkJCXBhdGggPSBpbmNsdWRl
L0dMU0xBTkc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdy
b3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCQlGQjM5RDc3QjEyMDExMTBDMDAwODhFNjkgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
KwkJCWZpbGVzID0gKAorCQkJCUZCMzlENzZEMTIwMTEwRkMwMDA4OEU2OSAvKiBSZXNvdXJjZUxp
bWl0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNo
YWRlckxhbmcuaCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJRkIzOUQw
RDAxMjAwRjBFMzAwMDg4RTY5IC8qIGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFy
Z2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZCMzlEMEQ2MTIwMEYxMUUwMDA4OEU2
OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkIzOUQ3N0IxMjAxMTEwQzAwMDg4RTY5IC8q
IEhlYWRlcnMgKi8sCisJCQkJRkIzOUQwREUxMjAwRjE5MTAwMDg4RTY5IC8qIEFjdGlvbiAiZmxl
eF9nbHNsYW5nIiAqLywKKwkJCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogQWN0aW9uICJi
aXNvbl9nbHNsYW5nIiAqLywKKwkJCQlGQjM5RDBDRTEyMDBGMEUzMDAwODhFNjkgLyogU291cmNl
cyAqLywKKwkJCQlGQjM5RDBDRjEyMDBGMEUzMDAwODhFNjkgLyogRnJhbWV3b3JrcyAqLywKKwkJ
CSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7
CisJCQluYW1lID0gYW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdFJl
ZmVyZW5jZSA9IEZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICovOworCQkJ
cHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJ
CX07CisvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJv
amVjdCBzZWN0aW9uICovCisJCUZCMzlEMDcwMTIwMEVEOTIwMDA4OEU2OSAvKiBQcm9qZWN0IG9i
amVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMi40IjsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJbWFpbkdyb3Vw
ID0gRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5OworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJ
CXByb2plY3RSb290ID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCUZCMzlEMEQwMTIwMEYwRTMw
MDA4OEU2OSAvKiBhbmdsZSAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CUZCMzlEMERFMTIwMEYxOTEwMDA4OEU2OSAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7
CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAxMjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGls
ZXIvZ2xzbGFuZy5sLAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIi
OworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5j
cHAiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJF
eGVjdXRpbmcgZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxuZWNobyBub3RlOiAke0lOVEVS
TUVESUFURV9ESVJ9XG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0k
e0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmcuY3BwXCIgc3JjL2NvbXBpbGVyL2dsc2xhbmcubFxu
ZXhpdCAxIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlGQjM5RDMxQzEyMDBG
NjkyMDAwODhFNjkgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJCWNvbXBpbGVyL2ds
c2xhbmcueSwKKwkJCSk7CisJCQluYW1lID0gIkFjdGlvbiBcImJpc29uX2dsc2xhbmdcIiI7CisJ
CQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5j
cHAiLAorCQkJCSIkKElOVEVSTUVESUFURV9ESVIpL2dsc2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0g
L2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgYmlzb24g
b24gY29tcGlsZXIvZ2xzbGFuZy55XCJcbmV4ZWMgYmlzb24gLS1uby1saW5lcyBcIi0tZGVmaW5l
cz0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0b249eWFjYy5j
XCIgXCItLW91dHB1dD0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNwcFwiIHNyYy9j
b21waWxlci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOwor
CQl9OworLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0UxMjAwRjBFMzAw
MDg4RTY5IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjM5
RDJDMjEyMDBGM0VGMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovLAor
CQkJCUZCMzlENzIzMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCMzlENzI1MTIwMTAzMjQwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZCMzlEMkMzMTIwMEYzRUYwMDA4OEU2OSAvKiBTaGFkZXJMYW5n
LmggaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdl
bkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8q
IGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAv
KiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3QjEyMDBGMzVBMDAwODhF
NjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3RDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4
MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzOUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkg
LyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RjEyMDBGMzVBMDAw
ODhFNjkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTExMjAw
RjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI5
MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTYx
MjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTgxMjAw
RjM1QTAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTkx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOUQx
MjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkEw
MTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJB
MjEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJB
NDEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlv
biAqLworCQlGQjM5RDA3MTEyMDBFRDkyMDAwODhFNjkgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMg
PSAiJChBUkNIU19TVEFOREFSRF82NF9CSVRfUFJFX1hDT0RFXzNfMSkiOworCQkJCUFSQ0hTX1NU
QU5EQVJEXzY0X0JJVF9QUkVfWENPREVfM18xID0geDg2XzY0OworCQkJCUNPUFlfUEhBU0VfU1RS
SVAgPSBOTzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNST09UKS9p
bmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9PVCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFU
RV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRlOworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRI
ID0gIiI7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQlGQjM5RDA3MjEyMDBFRDky
MDAwODhFNjkgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzY0
X0JJVF9QUkVfWENPREVfM18xKSI7CisJCQkJQVJDSFNfU1RBTkRBUkRfNjRfQklUX1BSRV9YQ09E
RV8zXzEgPSB4ODZfNjQ7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlIRUFERVJf
U0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNST09UKS9pbmNsdWRlIiwKKwkJCQkJIiQoU1JD
Uk9PVCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFURV9ESVIgPSBzcmMvaW50ZXJtZWRp
YXRlOworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRIID0gIiI7CisJCQl9OworCQkJbmFt
ZSA9IFJlbGVhc2U7CisJCX07CisJCUZCMzlEMEQyMTIwMEYwRTQwMDA4OEU2OSAvKiBEZWJ1ZyAq
LyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NU
UklQID0gTk87CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9G
SVhfQU5EX0NPTlRJTlVFID0gWUVTOworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlH
Q0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2Fs
L2xpYjsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJ
CQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQlGQjM5RDBEMzEyMDBGMEU0MDAwODhFNjkg
LyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlD
T1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJk
d2FyZi13aXRoLWRzeW0iOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IE5POwor
CQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2Fs
L2xpYjsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gYW5nbGU7CisJ
CQkJWkVST19MSU5LID0gTk87CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBF
bmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0NvbmZpZ3Vy
YXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
RkIzOUQwNzExMjAwRUQ5MjAwMDg4RTY5IC8qIERlYnVnICovLAorCQkJCUZCMzlEMDcyMTIwMEVE
OTIwMDA4OEU2OSAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJ
CX07CisJCUZCMzlEMEQ2MTIwMEYxMUUwMDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1
cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzOUQwRDIxMjAw
RjBFNDAwMDg4RTY5IC8qIERlYnVnICovLAorCQkJCUZCMzlEMEQzMTIwMEYwRTQwMDA4OEU2OSAv
KiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0g
MDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisvKiBFbmQg
WENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290T2JqZWN0ID0gRkIzOUQw
NzAxMjAwRUQ5MjAwMDg4RTY5IC8qIFByb2plY3Qgb2JqZWN0ICovOworfQpJbmRleDogQU5HTEUv
aW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzMjkgQEAKKy8qIC0qLSBtb2RlOiBjOyB0YWItd2lkdGg6IDg7IC0qLSAqLworLyog
dmk6IHNldCBzdz00IHRzPTg6ICovCisvKiBSZWZlcmVuY2UgdmVyc2lvbiBvZiBlZ2wuaCBmb3Ig
RUdMIDEuNC4KKyAqICRSZXZpc2lvbjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDAyOjUy
OjI1IC0wNzAwIChXZWQsIDIxIE9jdCAyMDA5KSAkCisgKi8KKworLyoKKyoqIENvcHlyaWdodCAo
YykgMjAwNy0yMDA5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlz
IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg
YQorKiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRp
b24gZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMg
d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhl
IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmli
dXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5k
IHRvCisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hl
ZCB0byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioK
KyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
IHNoYWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp
b25zIG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQg
IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1Q
TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiog
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O
SU5GUklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJ
R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9S
IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI
RQorKiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVS
SUFMUy4KKyovCisKKyNpZm5kZWYgX19lZ2xfaF8KKyNkZWZpbmUgX19lZ2xfaF8KKworLyogQWxs
IHBsYXRmb3JtLWRlcGVuZGVudCB0eXBlcyBhbmQgbWFjcm8gYm9pbGVycGxhdGUgKHN1Y2ggYXMg
RUdMQVBJCisgKiBhbmQgRUdMQVBJRU5UUlkpIHNob3VsZCBnbyBpbiBlZ2xwbGF0Zm9ybS5oLgor
ICovCisjaW5jbHVkZSA8RUdML2VnbHBsYXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogRUdMIFR5cGVzICovCisvKiBFR0xpbnQgaXMgZGVm
aW5lZCBpbiBlZ2xwbGF0Zm9ybS5oICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBFR0xCb29sZWFu
OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgRUdMZW51bTsKK3R5cGVkZWYgdm9pZCAqRUdMQ29uZmln
OwordHlwZWRlZiB2b2lkICpFR0xDb250ZXh0OwordHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5Owor
dHlwZWRlZiB2b2lkICpFR0xTdXJmYWNlOwordHlwZWRlZiB2b2lkICpFR0xDbGllbnRCdWZmZXI7
CisKKy8qIEVHTCBWZXJzaW9uaW5nICovCisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMAkJCTEKKyNk
ZWZpbmUgRUdMX1ZFUlNJT05fMV8xCQkJMQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzIJCQkxCisj
ZGVmaW5lIEVHTF9WRVJTSU9OXzFfMwkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV80CQkJMQor
CisvKiBFR0wgRW51bWVyYW50cy4gQml0bWFza3MgYW5kIG90aGVyIGV4Y2VwdGlvbmFsIGNhc2Vz
IGFzaWRlLCBtb3N0CisgKiBlbnVtcyBhcmUgYXNzaWduZWQgdW5pcXVlIHZhbHVlcyBzdGFydGlu
ZyBhdCAweDMwMDAuCisgKi8KKworLyogRUdMIGFsaWFzZXMgKi8KKyNkZWZpbmUgRUdMX0ZBTFNF
CQkJMAorI2RlZmluZSBFR0xfVFJVRQkJCTEKKworLyogT3V0LW9mLWJhbmQgaGFuZGxlIHZhbHVl
cyAqLworI2RlZmluZSBFR0xfREVGQVVMVF9ESVNQTEFZCQkoKEVHTE5hdGl2ZURpc3BsYXlUeXBl
KTApCisjZGVmaW5lIEVHTF9OT19DT05URVhUCQkJKChFR0xDb250ZXh0KTApCisjZGVmaW5lIEVH
TF9OT19ESVNQTEFZCQkJKChFR0xEaXNwbGF5KTApCisjZGVmaW5lIEVHTF9OT19TVVJGQUNFCQkJ
KChFR0xTdXJmYWNlKTApCisKKy8qIE91dC1vZi1iYW5kIGF0dHJpYnV0ZSB2YWx1ZSAqLworI2Rl
ZmluZSBFR0xfRE9OVF9DQVJFCQkJKChFR0xpbnQpLTEpCisKKy8qIEVycm9ycyAvIEdldEVycm9y
IHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUgRUdMX1NVQ0NFU1MJCQkweDMwMDAKKyNkZWZpbmUg
RUdMX05PVF9JTklUSUFMSVpFRAkJMHgzMDAxCisjZGVmaW5lIEVHTF9CQURfQUNDRVNTCQkJMHgz
MDAyCisjZGVmaW5lIEVHTF9CQURfQUxMT0MJCQkweDMwMDMKKyNkZWZpbmUgRUdMX0JBRF9BVFRS
SUJVVEUJCTB4MzAwNAorI2RlZmluZSBFR0xfQkFEX0NPTkZJRwkJCTB4MzAwNQorI2RlZmluZSBF
R0xfQkFEX0NPTlRFWFQJCQkweDMwMDYKKyNkZWZpbmUgRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UJ
CTB4MzAwNworI2RlZmluZSBFR0xfQkFEX0RJU1BMQVkJCQkweDMwMDgKKyNkZWZpbmUgRUdMX0JB
RF9NQVRDSAkJCTB4MzAwOQorI2RlZmluZSBFR0xfQkFEX05BVElWRV9QSVhNQVAJCTB4MzAwQQor
I2RlZmluZSBFR0xfQkFEX05BVElWRV9XSU5ET1cJCTB4MzAwQgorI2RlZmluZSBFR0xfQkFEX1BB
UkFNRVRFUgkJMHgzMDBDCisjZGVmaW5lIEVHTF9CQURfU1VSRkFDRQkJCTB4MzAwRAorI2RlZmlu
ZSBFR0xfQ09OVEVYVF9MT1NUCQkweDMwMEUJLyogRUdMIDEuMSAtIElNR19wb3dlcl9tYW5hZ2Vt
ZW50ICovCisKKy8qIFJlc2VydmVkIDB4MzAwRi0weDMwMUYgZm9yIGFkZGl0aW9uYWwgZXJyb3Jz
ICovCisKKy8qIENvbmZpZyBhdHRyaWJ1dGVzICovCisjZGVmaW5lIEVHTF9CVUZGRVJfU0laRQkJ
CTB4MzAyMAorI2RlZmluZSBFR0xfQUxQSEFfU0laRQkJCTB4MzAyMQorI2RlZmluZSBFR0xfQkxV
RV9TSVpFCQkJMHgzMDIyCisjZGVmaW5lIEVHTF9HUkVFTl9TSVpFCQkJMHgzMDIzCisjZGVmaW5l
IEVHTF9SRURfU0laRQkJCTB4MzAyNAorI2RlZmluZSBFR0xfREVQVEhfU0laRQkJCTB4MzAyNQor
I2RlZmluZSBFR0xfU1RFTkNJTF9TSVpFCQkweDMwMjYKKyNkZWZpbmUgRUdMX0NPTkZJR19DQVZF
QVQJCTB4MzAyNworI2RlZmluZSBFR0xfQ09ORklHX0lECQkJMHgzMDI4CisjZGVmaW5lIEVHTF9M
RVZFTAkJCTB4MzAyOQorI2RlZmluZSBFR0xfTUFYX1BCVUZGRVJfSEVJR0hUCQkweDMwMkEKKyNk
ZWZpbmUgRUdMX01BWF9QQlVGRkVSX1BJWEVMUwkJMHgzMDJCCisjZGVmaW5lIEVHTF9NQVhfUEJV
RkZFUl9XSURUSAkJMHgzMDJDCisjZGVmaW5lIEVHTF9OQVRJVkVfUkVOREVSQUJMRQkJMHgzMDJE
CisjZGVmaW5lIEVHTF9OQVRJVkVfVklTVUFMX0lECQkweDMwMkUKKyNkZWZpbmUgRUdMX05BVElW
RV9WSVNVQUxfVFlQRQkJMHgzMDJGCisjZGVmaW5lIEVHTF9TQU1QTEVTCQkJMHgzMDMxCisjZGVm
aW5lIEVHTF9TQU1QTEVfQlVGRkVSUwkJMHgzMDMyCisjZGVmaW5lIEVHTF9TVVJGQUNFX1RZUEUJ
CTB4MzAzMworI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRfVFlQRQkJMHgzMDM0CisjZGVmaW5lIEVH
TF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFCTB4MzAzNQorI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRf
R1JFRU5fVkFMVUUJMHgzMDM2CisjZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUUJMHgz
MDM3CisjZGVmaW5lIEVHTF9OT05FCQkJMHgzMDM4CS8qIEF0dHJpYiBsaXN0IHRlcm1pbmF0b3Ig
Ki8KKyNkZWZpbmUgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0IJCTB4MzAzOQorI2RlZmluZSBFR0xf
QklORF9UT19URVhUVVJFX1JHQkEJMHgzMDNBCisjZGVmaW5lIEVHTF9NSU5fU1dBUF9JTlRFUlZB
TAkJMHgzMDNCCisjZGVmaW5lIEVHTF9NQVhfU1dBUF9JTlRFUlZBTAkJMHgzMDNDCisjZGVmaW5l
IEVHTF9MVU1JTkFOQ0VfU0laRQkJMHgzMDNECisjZGVmaW5lIEVHTF9BTFBIQV9NQVNLX1NJWkUJ
CTB4MzAzRQorI2RlZmluZSBFR0xfQ09MT1JfQlVGRkVSX1RZUEUJCTB4MzAzRgorI2RlZmluZSBF
R0xfUkVOREVSQUJMRV9UWVBFCQkweDMwNDAKKyNkZWZpbmUgRUdMX01BVENIX05BVElWRV9QSVhN
QVAJCTB4MzA0MQkvKiBQc2V1ZG8tYXR0cmlidXRlIChub3QgcXVlcnlhYmxlKSAqLworI2RlZmlu
ZSBFR0xfQ09ORk9STUFOVAkJCTB4MzA0MgorCisvKiBSZXNlcnZlZCAweDMwNDEtMHgzMDRGIGZv
ciBhZGRpdGlvbmFsIGNvbmZpZyBhdHRyaWJ1dGVzICovCisKKy8qIENvbmZpZyBhdHRyaWJ1dGUg
dmFsdWVzICovCisjZGVmaW5lIEVHTF9TTE9XX0NPTkZJRwkJCTB4MzA1MAkvKiBFR0xfQ09ORklH
X0NBVkVBVCB2YWx1ZSAqLworI2RlZmluZSBFR0xfTk9OX0NPTkZPUk1BTlRfQ09ORklHCTB4MzA1
MQkvKiBFR0xfQ09ORklHX0NBVkVBVCB2YWx1ZSAqLworI2RlZmluZSBFR0xfVFJBTlNQQVJFTlRf
UkdCCQkweDMwNTIJLyogRUdMX1RSQU5TUEFSRU5UX1RZUEUgdmFsdWUgKi8KKyNkZWZpbmUgRUdM
X1JHQl9CVUZGRVIJCQkweDMwOEUJLyogRUdMX0NPTE9SX0JVRkZFUl9UWVBFIHZhbHVlICovCisj
ZGVmaW5lIEVHTF9MVU1JTkFOQ0VfQlVGRkVSCQkweDMwOEYJLyogRUdMX0NPTE9SX0JVRkZFUl9U
WVBFIHZhbHVlICovCisKKy8qIE1vcmUgY29uZmlnIGF0dHJpYnV0ZSB2YWx1ZXMsIGZvciBFR0xf
VEVYVFVSRV9GT1JNQVQgKi8KKyNkZWZpbmUgRUdMX05PX1RFWFRVUkUJCQkweDMwNUMKKyNkZWZp
bmUgRUdMX1RFWFRVUkVfUkdCCQkJMHgzMDVECisjZGVmaW5lIEVHTF9URVhUVVJFX1JHQkEJCTB4
MzA1RQorI2RlZmluZSBFR0xfVEVYVFVSRV8yRAkJCTB4MzA1RgorCisvKiBDb25maWcgYXR0cmli
dXRlIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfUEJVRkZFUl9CSVQJCQkweDAwMDEJLyogRUdM
X1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1BJWE1BUF9CSVQJCQkweDAw
MDIJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX1dJTkRPV19C
SVQJCQkweDAwMDQJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdM
X1ZHX0NPTE9SU1BBQ0VfTElORUFSX0JJVAkweDAwMjAJLyogRUdMX1NVUkZBQ0VfVFlQRSBtYXNr
IGJpdHMgKi8KKyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkVfQklUCTB4MDA0MAkvKiBF
R0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVT
T0xWRV9CT1hfQklUIDB4MDIwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworI2Rl
ZmluZSBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIDB4MDQwMAkvKiBFR0xfU1VSRkFD
RV9UWVBFIG1hc2sgYml0cyAqLworCisjZGVmaW5lIEVHTF9PUEVOR0xfRVNfQklUCQkweDAwMDEJ
LyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUgRUdMX09QRU5WR19C
SVQJCQkweDAwMDIJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJpdHMgKi8KKyNkZWZpbmUg
RUdMX09QRU5HTF9FUzJfQklUCQkweDAwMDQJLyogRUdMX1JFTkRFUkFCTEVfVFlQRSBtYXNrIGJp
dHMgKi8KKyNkZWZpbmUgRUdMX09QRU5HTF9CSVQJCQkweDAwMDgJLyogRUdMX1JFTkRFUkFCTEVf
VFlQRSBtYXNrIGJpdHMgKi8KKworLyogUXVlcnlTdHJpbmcgdGFyZ2V0cyAqLworI2RlZmluZSBF
R0xfVkVORE9SCQkJMHgzMDUzCisjZGVmaW5lIEVHTF9WRVJTSU9OCQkJMHgzMDU0CisjZGVmaW5l
IEVHTF9FWFRFTlNJT05TCQkJMHgzMDU1CisjZGVmaW5lIEVHTF9DTElFTlRfQVBJUwkJCTB4MzA4
RAorCisvKiBRdWVyeVN1cmZhY2UgLyBTdXJmYWNlQXR0cmliIC8gQ3JlYXRlUGJ1ZmZlclN1cmZh
Y2UgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfSEVJR0hUCQkJMHgzMDU2CisjZGVmaW5lIEVHTF9X
SURUSAkJCTB4MzA1NworI2RlZmluZSBFR0xfTEFSR0VTVF9QQlVGRkVSCQkweDMwNTgKKyNkZWZp
bmUgRUdMX1RFWFRVUkVfRk9STUFUCQkweDMwODAKKyNkZWZpbmUgRUdMX1RFWFRVUkVfVEFSR0VU
CQkweDMwODEKKyNkZWZpbmUgRUdMX01JUE1BUF9URVhUVVJFCQkweDMwODIKKyNkZWZpbmUgRUdM
X01JUE1BUF9MRVZFTAkJMHgzMDgzCisjZGVmaW5lIEVHTF9SRU5ERVJfQlVGRkVSCQkweDMwODYK
KyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0UJCTB4MzA4NworI2RlZmluZSBFR0xfVkdfQUxQSEFf
Rk9STUFUCQkweDMwODgKKyNkZWZpbmUgRUdMX0hPUklaT05UQUxfUkVTT0xVVElPTgkweDMwOTAK
KyNkZWZpbmUgRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT04JCTB4MzA5MQorI2RlZmluZSBFR0xfUElY
RUxfQVNQRUNUX1JBVElPCQkweDMwOTIKKyNkZWZpbmUgRUdMX1NXQVBfQkVIQVZJT1IJCTB4MzA5
MworI2RlZmluZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRQkJMHgzMDk5CisKKy8qIEVHTF9SRU5E
RVJfQlVGRkVSIHZhbHVlcyAvIEJpbmRUZXhJbWFnZSAvIFJlbGVhc2VUZXhJbWFnZSBidWZmZXIg
dGFyZ2V0cyAqLworI2RlZmluZSBFR0xfQkFDS19CVUZGRVIJCQkweDMwODQKKyNkZWZpbmUgRUdM
X1NJTkdMRV9CVUZGRVIJCTB4MzA4NQorCisvKiBPcGVuVkcgY29sb3Igc3BhY2VzICovCisjZGVm
aW5lIEVHTF9WR19DT0xPUlNQQUNFX3NSR0IJCTB4MzA4OQkvKiBFR0xfVkdfQ09MT1JTUEFDRSB2
YWx1ZSAqLworI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVIJMHgzMDhBCS8qIEVHTF9W
R19DT0xPUlNQQUNFIHZhbHVlICovCisKKy8qIE9wZW5WRyBhbHBoYSBmb3JtYXRzICovCisjZGVm
aW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfTk9OUFJFCTB4MzA4QgkvKiBFR0xfQUxQSEFfRk9STUFU
IHZhbHVlICovCisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVRfUFJFCQkweDMwOEMJLyogRUdM
X0FMUEhBX0ZPUk1BVCB2YWx1ZSAqLworCisvKiBDb25zdGFudCBzY2FsZSBmYWN0b3IgYnkgd2hp
Y2ggZnJhY3Rpb25hbCBkaXNwbGF5IHJlc29sdXRpb25zICYKKyAqIGFzcGVjdCByYXRpbyBhcmUg
c2NhbGVkIHdoZW4gcXVlcmllZCBhcyBpbnRlZ2VyIHZhbHVlcy4KKyAqLworI2RlZmluZSBFR0xf
RElTUExBWV9TQ0FMSU5HCQkxMDAwMAorCisvKiBVbmtub3duIGRpc3BsYXkgcmVzb2x1dGlvbi9h
c3BlY3QgcmF0aW8gKi8KKyNkZWZpbmUgRUdMX1VOS05PV04JCQkoKEVHTGludCktMSkKKworLyog
QmFjayBidWZmZXIgc3dhcCBiZWhhdmlvcnMgKi8KKyNkZWZpbmUgRUdMX0JVRkZFUl9QUkVTRVJW
RUQJCTB4MzA5NAkvKiBFR0xfU1dBUF9CRUhBVklPUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfQlVG
RkVSX0RFU1RST1lFRAkJMHgzMDk1CS8qIEVHTF9TV0FQX0JFSEFWSU9SIHZhbHVlICovCisKKy8q
IENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyIGJ1ZmZlciB0eXBlcyAqLworI2RlZmluZSBF
R0xfT1BFTlZHX0lNQUdFCQkweDMwOTYKKworLyogUXVlcnlDb250ZXh0IHRhcmdldHMgKi8KKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfQ0xJRU5UX1RZUEUJCTB4MzA5NworCisvKiBDcmVhdGVDb250ZXh0
IGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04JMHgzMDk4
CisKKy8qIE11bHRpc2FtcGxlIHJlc29sdXRpb24gYmVoYXZpb3JzICovCisjZGVmaW5lIEVHTF9N
VUxUSVNBTVBMRV9SRVNPTFZFX0RFRkFVTFQgMHgzMDlBCS8qIEVHTF9NVUxUSVNBTVBMRV9SRVNP
TFZFIHZhbHVlICovCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFX0JPWAkweDMwOUIJ
LyogRUdMX01VTFRJU0FNUExFX1JFU09MVkUgdmFsdWUgKi8KKworLyogQmluZEFQSS9RdWVyeUFQ
SSB0YXJnZXRzICovCisjZGVmaW5lIEVHTF9PUEVOR0xfRVNfQVBJCQkweDMwQTAKKyNkZWZpbmUg
RUdMX09QRU5WR19BUEkJCQkweDMwQTEKKyNkZWZpbmUgRUdMX09QRU5HTF9BUEkJCQkweDMwQTIK
KworLyogR2V0Q3VycmVudFN1cmZhY2UgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfRFJBVwkJCTB4
MzA1OQorI2RlZmluZSBFR0xfUkVBRAkJCTB4MzA1QQorCisvKiBXYWl0TmF0aXZlIGVuZ2luZXMg
Ki8KKyNkZWZpbmUgRUdMX0NPUkVfTkFUSVZFX0VOR0lORQkJMHgzMDVCCisKKy8qIEVHTCAxLjIg
dG9rZW5zIHJlbmFtZWQgZm9yIGNvbnNpc3RlbmN5IGluIEVHTCAxLjMgKi8KKyNkZWZpbmUgRUdM
X0NPTE9SU1BBQ0UJCQlFR0xfVkdfQ09MT1JTUEFDRQorI2RlZmluZSBFR0xfQUxQSEFfRk9STUFU
CQlFR0xfVkdfQUxQSEFfRk9STUFUCisjZGVmaW5lIEVHTF9DT0xPUlNQQUNFX3NSR0IJCUVHTF9W
R19DT0xPUlNQQUNFX3NSR0IKKyNkZWZpbmUgRUdMX0NPTE9SU1BBQ0VfTElORUFSCQlFR0xfVkdf
Q09MT1JTUEFDRV9MSU5FQVIKKyNkZWZpbmUgRUdMX0FMUEhBX0ZPUk1BVF9OT05QUkUJCUVHTF9W
R19BTFBIQV9GT1JNQVRfTk9OUFJFCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVRfUFJFCQlFR0xf
VkdfQUxQSEFfRk9STUFUX1BSRQorCisvKiBFR0wgZXh0ZW5zaW9ucyBtdXN0IHJlcXVlc3QgZW51
bSBibG9ja3MgZnJvbSB0aGUgS2hyb25vcworICogQVBJIFJlZ2lzdHJhciwgd2hvIG1haW50YWlu
cyB0aGUgZW51bWVyYW50IHJlZ2lzdHJ5LiBTdWJtaXQKKyAqIGEgYnVnIGluIEtocm9ub3MgQnVn
emlsbGEgYWdhaW5zdCB0YXNrICJSZWdpc3RyeSIuCisgKi8KKworCisKKy8qIEVHTCBGdW5jdGlv
bnMgKi8KKworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xHZXRFcnJvcih2b2lkKTsKKwor
RUdMQVBJIEVHTERpc3BsYXkgRUdMQVBJRU5UUlkgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNw
bGF5VHlwZSBkaXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbElu
aXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsVGVybWluYXRlKEVHTERpc3BsYXkgZHB5
KTsKKworRUdMQVBJIGNvbnN0IGNoYXIgKiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmluZyhFR0xE
aXNwbGF5IGRweSwgRUdMaW50IG5hbWUpOworCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRS
WSBlZ2xHZXRDb25maWdzKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgKmNvbmZpZ3MsCisJCQkg
RUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsQ2hvb3NlQ29uZmlnKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0LAorCQkJICAgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmln
X3NpemUsCisJCQkgICBFR0xpbnQgKm51bV9jb25maWcpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29u
ZmlnLAorCQkJICAgICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CisKK0VHTEFQ
SSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxh
eSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkJICBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwK
KwkJCQkgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTFN1cmZhY2UgRUdM
QVBJRU5UUlkgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZp
ZyBjb25maWcsCisJCQkJICAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdM
U3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5
LCBFR0xDb25maWcgY29uZmlnLAorCQkJCSAgRUdMTmF0aXZlUGl4bWFwVHlwZSBwaXhtYXAsCisJ
CQkJICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbERlc3Ryb3lTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdXJmYWNlKEVHTERp
c3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsQmluZEFQ
SShFR0xlbnVtIGFwaSk7CitFR0xBUEkgRUdMZW51bSBFR0xBUElFTlRSWSBlZ2xRdWVyeUFQSSh2
b2lkKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdENsaWVudCh2b2lk
KTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUmVsZWFzZVRocmVhZCh2b2lk
KTsKKworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGJ1ZmZlckZyb21D
bGllbnRCdWZmZXIoCisJICAgICAgRUdMRGlzcGxheSBkcHksIEVHTGVudW0gYnVmdHlwZSwgRUdM
Q2xpZW50QnVmZmVyIGJ1ZmZlciwKKwkgICAgICBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0KTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3Vy
ZmFjZUF0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICAgIEVH
TGludCBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwg
RUdMaW50IGJ1ZmZlcik7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xSZWxlYXNl
VGV4SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZl
cik7CisKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3dhcEludGVydmFsKEVH
TERpc3BsYXkgZHB5LCBFR0xpbnQgaW50ZXJ2YWwpOworCisKK0VHTEFQSSBFR0xDb250ZXh0IEVH
TEFQSUVOVFJZIGVnbENyZWF0ZUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25m
aWcsCisJCQkgICAgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0LAorCQkJICAgIGNvbnN0IEVHTGlu
dCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJv
eUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4KTsKK0VHTEFQSSBFR0xCb29s
ZWFuIEVHTEFQSUVOVFJZIGVnbE1ha2VDdXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNl
IGRyYXcsCisJCQkgIEVHTFN1cmZhY2UgcmVhZCwgRUdMQ29udGV4dCBjdHgpOworCitFR0xBUEkg
RUdMQ29udGV4dCBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKTsKK0VHTEFQ
SSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGludCByZWFk
ZHJhdyk7CitFR0xBUEkgRUdMRGlzcGxheSBFR0xBUElFTlRSWSBlZ2xHZXRDdXJyZW50RGlzcGxh
eSh2b2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5Q29udGV4dChF
R0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsCisJCQkgICBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKKworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdEdM
KHZvaWQpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsV2FpdE5hdGl2ZShFR0xp
bnQgZW5naW5lKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN3YXBCdWZmZXJz
KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwKKwkJCSAgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpOworCisvKiBUaGlzIGlzIGEg
Z2VuZXJpYyBmdW5jdGlvbiBwb2ludGVyIHR5cGUsIHdob3NlIG5hbWUgaW5kaWNhdGVzIGl0IG11
c3QKKyAqIGJlIGNhc3QgdG8gdGhlIHByb3BlciB0eXBlICphbmQgY2FsbGluZyBjb252ZW50aW9u
KiBiZWZvcmUgdXNlLgorICovCit0eXBlZGVmIHZvaWQgKCpfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKSh2b2lkKTsKKworLyogTm93LCBkZWZpbmUgZWdsR2V0UHJvY0Fk
ZHJlc3MgdXNpbmcgdGhlIGdlbmVyaWMgZnVuY3Rpb24gcHRyLiB0eXBlICovCitFR0xBUEkgX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBFR0xBUElFTlRSWQorICAgICAg
IGVnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZWdsX2hfICovCkluZGV4OiBBTkdMRS9p
bmNsdWRlL0VHTC9lZ2xleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xl
eHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIyMiBAQAorI2lmbmRlZiBfX2VnbGV4dF9oXworI2RlZmluZSBfX2Vn
bGV4dF9oXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8q
CisqKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgor
KiogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw
ZXJzb24gb2J0YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBp
biB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91
dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs
aXNoLAorKiogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRo
ZSBNYXRlcmlhbHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJp
YWxzIGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklB
TFMgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisq
KiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB
UlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwg
REFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULAorKiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP
Tk5FQ1RJT04gV0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ
TkdTIElOIFRIRSBNQVRFUklBTFMuCisqLworCisjaW5jbHVkZSA8RUdML2VnbHBsYXRmb3JtLmg+
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworCisvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLworLyogQ3VycmVu
dCB2ZXJzaW9uIGF0IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLworLyog
JFJldmlzaW9uOiAxMDc5NSAkIG9uICREYXRlOiAyMDEwLTAzLTE5IDE3OjA0OjE3IC0wNzAwIChG
cmksIDE5IE1hciAyMDEwKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiA1CisKKyNp
Zm5kZWYgRUdMX0tIUl9jb25maWdfYXR0cmlicworI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRy
aWJzIDEKKyNkZWZpbmUgRUdMX0NPTkZPUk1BTlRfS0hSCQkJMHgzMDQyCS8qIEVHTENvbmZpZyBh
dHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0VfTElORUFSX0JJVF9LSFIJMHgw
MDIwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1ZHX0FMUEhB
X0ZPUk1BVF9QUkVfQklUX0tIUgkJMHgwMDQwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0ZmllbGQg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfbG9ja19zdXJmYWNlCisjZGVmaW5lIEVHTF9L
SFJfbG9ja19zdXJmYWNlIDEKKyNkZWZpbmUgRUdMX1JFQURfU1VSRkFDRV9CSVRfS0hSCQkweDAw
MDEJLyogRUdMX0xPQ0tfVVNBR0VfSElOVF9LSFIgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX1dS
SVRFX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDAyCS8qIEVHTF9MT0NLX1VTQUdFX0hJTlRfS0hSIGJp
dGZpZWxkICovCisjZGVmaW5lIEVHTF9MT0NLX1NVUkZBQ0VfQklUX0tIUgkJMHgwMDgwCS8qIEVH
TF9TVVJGQUNFX1RZUEUgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX09QVElNQUxfRk9STUFUX0JJ
VF9LSFIJCTB4MDEwMAkvKiBFR0xfU1VSRkFDRV9UWVBFIGJpdGZpZWxkICovCisjZGVmaW5lIEVH
TF9NQVRDSF9GT1JNQVRfS0hSCQkJMHgzMDQzCS8qIEVHTENvbmZpZyBhdHRyaWJ1dGUgKi8KKyNk
ZWZpbmUgRUdMX0ZPUk1BVF9SR0JfNTY1X0VYQUNUX0tIUgkJMHgzMEMwCS8qIEVHTF9NQVRDSF9G
T1JNQVRfS0hSIHZhbHVlICovCisjZGVmaW5lIEVHTF9GT1JNQVRfUkdCXzU2NV9LSFIJCQkweDMw
QzEJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9S
R0JBXzg4ODhfRVhBQ1RfS0hSCQkweDMwQzIJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUg
Ki8KKyNkZWZpbmUgRUdMX0ZPUk1BVF9SR0JBXzg4ODhfS0hSCQkweDMwQzMJLyogRUdMX01BVENI
X0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX01BUF9QUkVTRVJWRV9QSVhFTFNfS0hS
CQkweDMwQzQJLyogZWdsTG9ja1N1cmZhY2VLSFIgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9M
T0NLX1VTQUdFX0hJTlRfS0hSCQkJMHgzMEM1CS8qIGVnbExvY2tTdXJmYWNlS0hSIGF0dHJpYnV0
ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BPSU5URVJfS0hSCQkJMHgzMEM2CS8qIGVnbFF1ZXJ5
U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVRDSF9LSFIJCQkweDMw
QzcJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX09S
SUdJTl9LSFIJCQkweDMwQzgJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmlu
ZSBFR0xfQklUTUFQX1BJWEVMX1JFRF9PRkZTRVRfS0hSCQkweDMwQzkJLyogZWdsUXVlcnlTdXJm
YWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0dSRUVOX09GRlNFVF9L
SFIJMHgzMENBCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJ
VE1BUF9QSVhFTF9CTFVFX09GRlNFVF9LSFIJMHgzMENCCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRy
aWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9BTFBIQV9PRkZTRVRfS0hSCTB4MzBD
QwkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElY
RUxfTFVNSU5BTkNFX09GRlNFVF9LSFIJMHgzMENECS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1
dGUgKi8KKyNkZWZpbmUgRUdMX0xPV0VSX0xFRlRfS0hSCQkJMHgzMENFCS8qIEVHTF9CSVRNQVBf
T1JJR0lOX0tIUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfVVBQRVJfTEVGVF9LSFIJCQkweDMwQ0YJ
LyogRUdMX0JJVE1BUF9PUklHSU5fS0hSIHZhbHVlICovCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9U
T1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xMb2NrU3VyZmFjZUtIUiAo
RUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsVW5sb2NrU3VyZmFj
ZUtIUiAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJmYWNlIHN1cmZhY2UpOworI2VuZGlmIC8q
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRS
WVAgUEZORUdMTE9DS1NVUkZBQ0VLSFJQUk9DKSAoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xTdXJm
YWNlIHN1cmZhY2UsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xCb29s
ZWFuIChFR0xBUElFTlRSWVAgUEZORUdMVU5MT0NLU1VSRkFDRUtIUlBST0MpIChFR0xEaXNwbGF5
IGRpc3BsYXksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hS
X2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfaW1hZ2UgMQorI2RlZmluZSBFR0xfTkFUSVZFX1BJWE1B
UF9LSFIJCQkweDMwQjAJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCit0eXBlZGVmIHZv
aWQgKkVHTEltYWdlS0hSOworI2RlZmluZSBFR0xfTk9fSU1BR0VfS0hSCQkJKChFR0xJbWFnZUtI
UikwKQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEltYWdlS0hSIEVH
TEFQSUVOVFJZIGVnbENyZWF0ZUltYWdlS0hSIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBj
dHgsIEVHTGVudW0gdGFyZ2V0LCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lJ
bWFnZUtIUiAoRUdMRGlzcGxheSBkcHksIEVHTEltYWdlS0hSIGltYWdlKTsKKyNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMSW1hZ2VLSFIgKEVHTEFQSUVOVFJZ
UCBQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBj
dHgsIEVHTGVudW0gdGFyZ2V0LCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERF
U1RST1lJTUFHRUtIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMSW1hZ2VLSFIgaW1hZ2UpOwor
I2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl92Z19wYXJlbnRfaW1hZ2UKKyNkZWZpbmUgRUdMX0tI
Ul92Z19wYXJlbnRfaW1hZ2UgMQorI2RlZmluZSBFR0xfVkdfUEFSRU5UX0lNQUdFX0tIUgkJCTB4
MzBCQQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVH
TF9LSFJfZ2xfdGV4dHVyZV8yRF9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfMkRf
aW1hZ2UgMQorI2RlZmluZSBFR0xfR0xfVEVYVFVSRV8yRF9LSFIJCQkweDMwQjEJLyogZWdsQ3Jl
YXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0xFVkVMX0tIUgkJ
MHgzMEJDCS8qIGVnbENyZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAqLworI2VuZGlmCisKKyNpZm5k
ZWYgRUdMX0tIUl9nbF90ZXh0dXJlX2N1YmVtYXBfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9nbF90
ZXh0dXJlX2N1YmVtYXBfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YX0tIUgkweDMwQjMJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVm
aW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1hfS0hSCTB4MzBCNAkvKiBlZ2xD
cmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWV9LSFIJMHgzMEI1CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2Rl
ZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZX0tIUgkweDMwQjYJLyogZWds
Q3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1pfS0hSCTB4MzBCNwkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNk
ZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWl9LSFIJMHgzMEI4CS8qIGVn
bENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF90
ZXh0dXJlXzNEX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfdGV4dHVyZV8zRF9pbWFnZSAxCisj
ZGVmaW5lIEVHTF9HTF9URVhUVVJFXzNEX0tIUgkJCTB4MzBCMgkvKiBlZ2xDcmVhdGVJbWFnZUtI
UiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfWk9GRlNFVF9LSFIJCTB4MzBCRAkv
KiBlZ2xDcmVhdGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9L
SFJfZ2xfcmVuZGVyYnVmZmVyX2ltYWdlCisjZGVmaW5lIEVHTF9LSFJfZ2xfcmVuZGVyYnVmZmVy
X2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dMX1JFTkRFUkJVRkZFUl9LSFIJCQkweDMwQjkJLyogZWds
Q3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3JldXNh
YmxlX3N5bmMKKyNkZWZpbmUgRUdMX0tIUl9yZXVzYWJsZV9zeW5jIDEKKwordHlwZWRlZiB2b2lk
KiBFR0xTeW5jS0hSOwordHlwZWRlZiBraHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3QgRUdMVGlt
ZUtIUjsKKworI2RlZmluZSBFR0xfU1lOQ19TVEFUVVNfS0hSCQkJMHgzMEYxCisjZGVmaW5lIEVH
TF9TSUdOQUxFRF9LSFIJCQkweDMwRjIKKyNkZWZpbmUgRUdMX1VOU0lHTkFMRURfS0hSCQkJMHgz
MEYzCisjZGVmaW5lIEVHTF9USU1FT1VUX0VYUElSRURfS0hSCQkJMHgzMEY1CisjZGVmaW5lIEVH
TF9DT05ESVRJT05fU0FUSVNGSUVEX0tIUgkJMHgzMEY2CisjZGVmaW5lIEVHTF9TWU5DX1RZUEVf
S0hSCQkJMHgzMEY3CisjZGVmaW5lIEVHTF9TWU5DX1JFVVNBQkxFX0tIUgkJCTB4MzBGQQorI2Rl
ZmluZSBFR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfS0hSCQkweDAwMDEJLyogZWdsQ2xpZW50
V2FpdFN5bmNLSFIgPGZsYWdzPiBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfRk9SRVZFUl9LSFIJ
CQkJMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisjZGVmaW5lIEVHTF9OT19TWU5DX0tIUgkJCQkoKEVH
TFN5bmNLSFIpMCkKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTeW5j
S0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTGVudW0g
dHlwZSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xEZXN0cm95U3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5j
KTsKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsQ2xpZW50V2FpdFN5bmNLSFIoRUdMRGlz
cGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzLCBFR0xUaW1lS0hSIHRpbWVv
dXQpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU2lnbmFsU3luY0tIUihFR0xE
aXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsR2V0U3luY0F0dHJpYktIUihFR0xEaXNwbGF5IGRweSwgRUdM
U3luY0tIUiBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZiAv
KiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3luY0tIUiAoRUdMQVBJRU5U
UllQIFBGTkVHTENSRUFURVNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gdHlw
ZSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQ
SUVOVFJZUCBQRk5FR0xERVNUUk9ZU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3lu
Y0tIUiBzeW5jKTsKK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZORUdMQ0xJRU5UV0FJ
VFNZTkNLSFJQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZs
YWdzLCBFR0xUaW1lS0hSIHRpbWVvdXQpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRS
WVAgUEZORUdMU0lHTkFMU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBz
eW5jLCBFR0xlbnVtIG1vZGUpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMR0VUU1lOQ0FUVFJJQktIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5j
LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVH
TF9LSFJfaW1hZ2VfYmFzZQorI2RlZmluZSBFR0xfS0hSX2ltYWdlX2Jhc2UgMQorLyogTW9zdCBp
bnRlcmZhY2VzIGRlZmluZWQgYnkgRUdMX0tIUl9pbWFnZV9waXhtYXAgYWJvdmUgKi8KKyNkZWZp
bmUgRUdMX0lNQUdFX1BSRVNFUlZFRF9LSFIJCQkweDMwRDIJLyogZWdsQ3JlYXRlSW1hZ2VLSFIg
YXR0cmlidXRlICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2ltYWdlX3BpeG1hcAorI2Rl
ZmluZSBFR0xfS0hSX2ltYWdlX3BpeG1hcCAxCisvKiBJbnRlcmZhY2VzIGRlZmluZWQgYnkgRUdM
X0tIUl9pbWFnZSBhYm92ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0lNR19jb250ZXh0X3By
aW9yaXR5CisjZGVmaW5lIEVHTF9JTUdfY29udGV4dF9wcmlvcml0eSAxCisjZGVmaW5lIEVHTF9D
T05URVhUX1BSSU9SSVRZX0xFVkVMX0lNRwkJMHgzMTAwCisjZGVmaW5lIEVHTF9DT05URVhUX1BS
SU9SSVRZX0hJR0hfSU1HCQkweDMxMDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfTUVE
SVVNX0lNRwkJMHgzMTAyCisjZGVmaW5lIEVHTF9DT05URVhUX1BSSU9SSVRZX0xPV19JTUcJCTB4
MzEwMworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WX2NvdmVyYWdlX3NhbXBsZQorI2RlZmluZSBF
R0xfTlZfY292ZXJhZ2Vfc2FtcGxlIDEKKyNkZWZpbmUgRUdMX0NPVkVSQUdFX0JVRkZFUlNfTlYg
MHgzMEUwCisjZGVmaW5lIEVHTF9DT1ZFUkFHRV9TQU1QTEVTX05WIDB4MzBFMQorI2VuZGlmCisK
KyNpZm5kZWYgRUdMX05WX2RlcHRoX25vbmxpbmVhcgorI2RlZmluZSBFR0xfTlZfZGVwdGhfbm9u
bGluZWFyIDEKKyNkZWZpbmUgRUdMX0RFUFRIX0VOQ09ESU5HX05WIDB4MzBFMgorI2RlZmluZSBF
R0xfREVQVEhfRU5DT0RJTkdfTk9ORV9OViAwCisjZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19O
T05MSU5FQVJfTlYgMHgzMEUzCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfc3luYworI2RlZmlu
ZSBFR0xfTlZfc3luYyAxCisjZGVmaW5lIEVHTF9TWU5DX1BSSU9SX0NPTU1BTkRTX0NPTVBMRVRF
X05WCTB4MzBFNgorI2RlZmluZSBFR0xfU1lOQ19TVEFUVVNfTlYJCQkweDMwRTcKKyNkZWZpbmUg
RUdMX1NJR05BTEVEX05WCQkJCTB4MzBFOAorI2RlZmluZSBFR0xfVU5TSUdOQUxFRF9OVgkJCTB4
MzBFOQorI2RlZmluZSBFR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfTlYJCTB4MDAwMQorI2Rl
ZmluZSBFR0xfRk9SRVZFUl9OVgkJCQkweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNkZWZpbmUgRUdM
X0FMUkVBRFlfU0lHTkFMRURfTlYJCQkweDMwRUEKKyNkZWZpbmUgRUdMX1RJTUVPVVRfRVhQSVJF
RF9OVgkJCTB4MzBFQgorI2RlZmluZSBFR0xfQ09ORElUSU9OX1NBVElTRklFRF9OVgkJMHgzMEVD
CisjZGVmaW5lIEVHTF9TWU5DX1RZUEVfTlYJCQkweDMwRUQKKyNkZWZpbmUgRUdMX1NZTkNfQ09O
RElUSU9OX05WCQkJMHgzMEVFCisjZGVmaW5lIEVHTF9TWU5DX0ZFTkNFX05WCQkJMHgzMEVGCisj
ZGVmaW5lIEVHTF9OT19TWU5DX05WCQkJCSgoRUdMU3luY05WKTApCit0eXBlZGVmIHZvaWQqIEVH
TFN5bmNOVjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIEVHTFRpbWVOVjsKKyNpZmRlZiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdM
RGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0
KTsKK0VHTEJvb2xlYW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOworRUdMQm9v
bGVhbiBlZ2xGZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xpbnQgZWdsQ2xpZW50V2FpdFN5
bmNOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwor
RUdMQm9vbGVhbiBlZ2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUp
OworRUdMQm9vbGVhbiBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQg
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQ
RVMgKi8KK3R5cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VT
WU5DTlZQUk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TERFU1RST1lTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwordHlwZWRlZiBFR0xCb29sZWFu
IChFR0xBUElFTlRSWVAgUEZORUdMRkVOQ0VOVlBST0MpIChFR0xTeW5jTlYgc3luYyk7Cit0eXBl
ZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTENMSUVOVFdBSVRTWU5DTlZQUk9DKSAoRUdM
U3luY05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwordHlwZWRlZiBF
R0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU0lHTkFMU1lOQ05WUFJPQykgKEVHTFN5bmNO
ViBzeW5jLCBFR0xlbnVtIG1vZGUpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAg
UEZORUdMR0VUU1lOQ0FUVFJJQk5WUFJPQykgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNl
bmRpZgorCisjZW5kaWYKSW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEwIEBACisjaWZuZGVmIF9fZWdscGxhdGZvcm1faF8KKyNkZWZpbmUgX19lZ2xwbGF0Zm9y
bV9oXworCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiks
IHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcK
KyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt
ZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNv
cGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20g
dGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBj
b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBU
SEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE
IFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQor
KiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP
TiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyogUGxhdGZvcm0tc3BlY2lm
aWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBlZ2wuaAorICogJFJldmlzaW9uOiA5NzI0ICQg
b24gJERhdGU6IDIwMDktMTItMDIgMDI6MDU6MzMgLTA4MDAgKFdlZCwgMDIgRGVjIDIwMDkpICQK
KyAqCisgKiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0
byBzdWl0IHRoZWlyIHBsYXRmb3JtLgorICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBh
bGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0aGV5IGNh
biBiZSBpbmNsdWRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHN1
Ym1pdCBjaGFuZ2VzCisgKiBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1
Z3ppbGxhIChodHRwOi8va2hyb25vcy5vcmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcgYSBidWcg
YWdhaW5zdCBwcm9kdWN0ICJFR0wiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgorICovCisKKyNpbmNs
dWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKworLyogTWFjcm9zIHVzZWQgaW4gRUdMIGZ1bmN0aW9u
IHByb3RvdHlwZSBkZWNsYXJhdGlvbnMuCisgKgorICogRUdMIGZ1bmN0aW9ucyBzaG91bGQgYmUg
cHJvdG90eXBlZCBhczoKKyAqCisgKiBFR0xBUEkgcmV0dXJuLXR5cGUgRUdMQVBJRU5UUlkgZWds
RnVuY3Rpb24oYXJndW1lbnRzKTsKKyAqIHR5cGVkZWYgcmV0dXJuLXR5cGUgKEVYUEFQSUVOVFJZ
UCBQRk5FR0xGVU5DVElPTlBST0MpIChhcmd1bWVudHMpOworICoKKyAqIEtIUk9OT1NfQVBJQ0FM
TCBhbmQgS0hST05PU19BUElFTlRSWSBhcmUgZGVmaW5lZCBpbiBLSFIva2hycGxhdGZvcm0uaAor
ICovCisKKyNpZm5kZWYgRUdMQVBJCisjZGVmaW5lIEVHTEFQSSBLSFJPTk9TX0FQSUNBTEwKKyNl
bmRpZgorCisjaWZuZGVmIEVHTEFQSUVOVFJZCisjZGVmaW5lIEVHTEFQSUVOVFJZICBLSFJPTk9T
X0FQSUVOVFJZCisjZW5kaWYKKyNkZWZpbmUgRUdMQVBJRU5UUllQIEVHTEFQSUVOVFJZKgorCisv
KiBUaGUgdHlwZXMgTmF0aXZlRGlzcGxheVR5cGUsIE5hdGl2ZVdpbmRvd1R5cGUsIGFuZCBOYXRp
dmVQaXhtYXBUeXBlCisgKiBhcmUgYWxpYXNlcyBvZiB3aW5kb3ctc3lzdGVtLWRlcGVuZGVudCB0
eXBlcywgc3VjaCBhcyBYIERpc3BsYXkgKiBvcgorICogV2luZG93cyBEZXZpY2UgQ29udGV4dC4g
VGhleSBtdXN0IGJlIGRlZmluZWQgaW4gcGxhdGZvcm0tc3BlY2lmaWMKKyAqIGNvZGUgYmVsb3cu
IFRoZSBFR0wtcHJlZml4ZWQgdmVyc2lvbnMgb2YgTmF0aXZlKlR5cGUgYXJlIHRoZSBzYW1lCisg
KiB0eXBlcywgcmVuYW1lZCBpbiBFR0wgMS4zIHNvIGFsbCB0eXBlcyBpbiB0aGUgQVBJIHN0YXJ0
IHdpdGggIkVHTCIuCisgKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fVkMz
Ml9fKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9f
KSAvKiBXaW4zMiBhbmQgV2luQ0UgKi8KKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2Rl
ZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOIDEKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KwordHlwZWRlZiBIREMgICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBIQklUTUFQ
IEVHTE5hdGl2ZVBpeG1hcFR5cGU7Cit0eXBlZGVmIEhXTkQgICAgRUdMTmF0aXZlV2luZG93VHlw
ZTsKKworI2VsaWYgZGVmaW5lZChfX1dJTlNDV19fKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18p
ICAvKiBTeW1iaWFuICovCisKK3R5cGVkZWYgaW50ICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Cit0
eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Cit0eXBlZGVmIHZvaWQgKkVHTE5hdGl2
ZVBpeG1hcFR5cGU7CisKKyNlbGlmIGRlZmluZWQoX191bml4X18pCisKKy8qIFgxMSAodGVudGF0
aXZlKSAgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgor
Cit0eXBlZGVmIERpc3BsYXkgKkVHTE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRlZiBQaXhtYXAg
ICBFR0xOYXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBXaW5kb3cgICBFR0xOYXRpdmVXaW5kb3dU
eXBlOworCisjZWxzZQorI2Vycm9yICJQbGF0Zm9ybSBub3QgcmVjb2duaXplZCIKKyNlbmRpZgor
CisvKiBFR0wgMS4yIHR5cGVzLCByZW5hbWVkIGZvciBjb25zaXN0ZW5jeSBpbiBFR0wgMS4zICov
Cit0eXBlZGVmIEVHTE5hdGl2ZURpc3BsYXlUeXBlIE5hdGl2ZURpc3BsYXlUeXBlOwordHlwZWRl
ZiBFR0xOYXRpdmVQaXhtYXBUeXBlICBOYXRpdmVQaXhtYXBUeXBlOwordHlwZWRlZiBFR0xOYXRp
dmVXaW5kb3dUeXBlICBOYXRpdmVXaW5kb3dUeXBlOworCisKKy8qIERlZmluZSBFR0xpbnQuIFRo
aXMgbXVzdCBiZSBhIHNpZ25lZCBpbnRlZ3JhbCB0eXBlIGxhcmdlIGVub3VnaCB0byBjb250YWlu
CisgKiBhbGwgbGVnYWwgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMgcGFzc2VkIGludG8gYW5k
IG91dCBvZiBFR0wsIHdoZXRoZXIKKyAqIHRoZWlyIHR5cGUgaXMgYm9vbGVhbiwgYml0bWFzaywg
ZW51bWVyYW50IChzeW1ib2xpYyBjb25zdGFudCksIGludGVnZXIsCisgKiBoYW5kbGUsIG9yIG90
aGVyLiAgV2hpbGUgaW4gZ2VuZXJhbCBhIDMyLWJpdCBpbnRlZ2VyIHdpbGwgc3VmZmljZSwgaWYK
KyAqIGhhbmRsZXMgYXJlIDY0IGJpdCB0eXBlcywgdGhlbiBFR0xpbnQgc2hvdWxkIGJlIGRlZmlu
ZWQgYXMgYSBzaWduZWQgNjQtYml0CisgKiBpbnRlZ2VyIHR5cGUuCisgKi8KK3R5cGVkZWYga2hy
b25vc19pbnQzMl90IEVHTGludDsKKworI2VuZGlmIC8qIF9fZWdscGxhdGZvcm1faCAqLwpJbmRl
eDogQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MjEgQEAKKyNpZm5kZWYgX19nbDJfaF8KKyNkZWZpbmUg
X19nbDJfaF8KKworLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAy
MjozNTozNCAtMDgwMCAjJCAqLworCisjaW5jbHVkZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhpcyBk
b2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNl
IFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJv
amVjdHMvRnJlZUIvIC4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGEgdHlwZSBk
ZWZpbml0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgdm9pZCAgICAgICAgICAg
ICBHTHZvaWQ7Cit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgR0xjaGFyOwordHlwZWRlZiB1bnNp
Z25lZCBpbnQgICAgIEdMZW51bTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICBHTGJvb2xlYW47
Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0xiaXRmaWVsZDsKK3R5cGVkZWYga2hyb25vc19p
bnQ4X3QgICBHTGJ5dGU7Cit0eXBlZGVmIHNob3J0ICAgICAgICAgICAgR0xzaG9ydDsKK3R5cGVk
ZWYgaW50ICAgICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTHNp
emVpOwordHlwZWRlZiBraHJvbm9zX3VpbnQ4X3QgIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0ICAgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0x1aW50OwordHlw
ZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdMZmxvYXQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAg
R0xjbGFtcGY7Cit0eXBlZGVmIGtocm9ub3NfaW50MzJfdCAgR0xmaXhlZDsKKworLyogR0wgdHlw
ZXMgZm9yIGhhbmRsaW5nIGxhcmdlIHZlcnRleCBidWZmZXIgb2JqZWN0cyAqLwordHlwZWRlZiBr
aHJvbm9zX2ludHB0cl90IEdMaW50cHRyOwordHlwZWRlZiBraHJvbm9zX3NzaXplX3QgIEdMc2l6
ZWlwdHI7CisKKy8qIE9wZW5HTCBFUyBjb3JlIHZlcnNpb25zICovCisjZGVmaW5lIEdMX0VTX1ZF
UlNJT05fMl8wICAgICAgICAgICAgICAgICAxCisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworI2Rl
ZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmlu
ZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBH
TF9DT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBCb29sZWFu
ICovCisjZGVmaW5lIEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5l
IEdMX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJlZ2luTW9kZSAqLwor
I2RlZmluZSBHTF9QT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5l
IEdMX0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTElO
RV9MT09QICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9MSU5FX1NUUklQ
ICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAgICAgICAgICAg
ICAgICAgIDB4MDAwNQorI2RlZmluZSBHTF9UUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAg
MHgwMDA2CisKKy8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8q
ICAgICAgR0xfTkVWRVIgKi8KKy8qICAgICAgR0xfTEVTUyAqLworLyogICAgICBHTF9FUVVBTCAq
LworLyogICAgICBHTF9MRVFVQUwgKi8KKy8qICAgICAgR0xfR1JFQVRFUiAqLworLyogICAgICBH
TF9OT1RFUVVBTCAqLworLyogICAgICBHTF9HRVFVQUwgKi8KKy8qICAgICAgR0xfQUxXQVlTICov
CisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworI2RlZmluZSBHTF9aRVJPICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9PTkUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMQorI2RlZmluZSBHTF9TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisj
ZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUg
R0xfU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgMHgwMzAzCisjZGVmaW5lIEdMX0RTVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAweDAzMDQKKyNkZWZpbmUgR0xfT05FX01JTlVTX0RTVF9BTFBI
QSAgICAgICAgICAgIDB4MDMwNQorCisvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworLyogICAgICBH
TF9aRVJPICovCisvKiAgICAgIEdMX09ORSAqLworI2RlZmluZSBHTF9EU1RfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgMHgwMzA2CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAg
ICAgICAgICAweDAzMDcKKyNkZWZpbmUgR0xfU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAg
IDB4MDMwOAorLyogICAgICBHTF9TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX1NS
Q19BTFBIQSAqLworLyogICAgICBHTF9EU1RfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVT
X0RTVF9BTFBIQSAqLworCisvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8KKyNkZWZpbmUgR0xf
RlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNgorI2RlZmluZSBHTF9CTEVORF9F
UVVBVElPTiAgICAgICAgICAgICAgICAgMHg4MDA5CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9O
X1JHQiAgICAgICAgICAgICAweDgwMDkgICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwor
I2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgMHg4ODNECisKKy8qIEJs
ZW5kU3VidHJhY3QgKi8KKyNkZWZpbmUgR0xfRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAg
IDB4ODAwQQorI2RlZmluZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgMHg4MDBC
CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworI2RlZmluZSBHTF9CTEVORF9EU1Rf
UkdCICAgICAgICAgICAgICAgICAgMHg4MEM4CisjZGVmaW5lIEdMX0JMRU5EX1NSQ19SR0IgICAg
ICAgICAgICAgICAgICAweDgwQzkKKyNkZWZpbmUgR0xfQkxFTkRfRFNUX0FMUEhBICAgICAgICAg
ICAgICAgIDB4ODBDQQorI2RlZmluZSBHTF9CTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAg
MHg4MENCCisjZGVmaW5lIEdMX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAweDgwMDEK
KyNkZWZpbmUgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDB4ODAwMgorI2RlZmlu
ZSBHTF9DT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgMHg4MDAzCisjZGVmaW5lIEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICAweDgwMDQKKyNkZWZpbmUgR0xfQkxFTkRfQ09M
T1IgICAgICAgICAgICAgICAgICAgIDB4ODAwNQorCisvKiBCdWZmZXIgT2JqZWN0cyAqLworI2Rl
ZmluZSBHTF9BUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgMHg4ODkyCisjZGVmaW5lIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICAweDg4OTMKKyNkZWZpbmUgR0xfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDB4ODg5NAorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HICAgMHg4ODk1CisKKyNkZWZpbmUgR0xfU1RSRUFNX0RSQVcgICAgICAg
ICAgICAgICAgICAgIDB4ODhFMAorI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgICAg
ICAgICAgMHg4OEU0CisjZGVmaW5lIEdMX0RZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICAw
eDg4RTgKKworI2RlZmluZSBHTF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgMHg4NzY0
CisjZGVmaW5lIEdMX0JVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICAweDg3NjUKKworI2Rl
ZmluZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgMHg4NjI2CisKKy8qIEN1bGxG
YWNlTW9kZSAqLworI2RlZmluZSBHTF9GUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA0CisjZGVmaW5lIEdMX0JBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDUKKyNk
ZWZpbmUgR0xfRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgIDB4MDQwOAorCisvKiBEZXB0
aEZ1bmN0aW9uICovCisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8q
ICAgICAgR0xfRVFVQUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFU
RVIgKi8KKy8qICAgICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAg
ICAgIEdMX0FMV0FZUyAqLworCisvKiBFbmFibGVDYXAgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV8y
RCAgICAgICAgICAgICAgICAgICAgIDB4MERFMQorI2RlZmluZSBHTF9DVUxMX0ZBQ0UgICAgICAg
ICAgICAgICAgICAgICAgMHgwQjQ0CisjZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBCRTIKKyNkZWZpbmUgR0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEJEMAorI2RlZmluZSBHTF9TVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgMHgwQjkw
CisjZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICAweDBCNzEKKyNkZWZp
bmUgR0xfU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDB4MEMxMQorI2RlZmluZSBHTF9Q
T0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgMHg4MDM3CisjZGVmaW5lIEdMX1NBTVBMRV9B
TFBIQV9UT19DT1ZFUkFHRSAgICAgICAweDgwOUUKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdF
ICAgICAgICAgICAgICAgIDB4ODBBMAorCisvKiBFcnJvckNvZGUgKi8KKyNkZWZpbmUgR0xfTk9f
RVJST1IgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9FTlVNICAg
ICAgICAgICAgICAgICAgIDB4MDUwMAorI2RlZmluZSBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAg
ICAgICAgICAgMHgwNTAxCisjZGVmaW5lIEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAg
ICAweDA1MDIKKyNkZWZpbmUgR0xfT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgIDB4MDUw
NQorCisvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi8KKyNkZWZpbmUgR0xfQ1cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDkwMAorI2RlZmluZSBHTF9DQ1cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwOTAxCisKKy8qIEdldFBOYW1lICovCisjZGVmaW5lIEdMX0xJTkVfV0lEVEgg
ICAgICAgICAgICAgICAgICAgICAweDBCMjEKKyNkZWZpbmUgR0xfQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFICAgICAgIDB4ODQ2RAorI2RlZmluZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0Ug
ICAgICAgMHg4NDZFCisjZGVmaW5lIEdMX0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICAw
eDBCNDUKKyNkZWZpbmUgR0xfRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDB4MEI0Ngor
I2RlZmluZSBHTF9ERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgMHgwQjcwCisjZGVmaW5l
IEdMX0RFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAweDBCNzIKKyNkZWZpbmUgR0xfREVQ
VEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDB4MEI3MworI2RlZmluZSBHTF9ERVBUSF9GVU5D
ICAgICAgICAgICAgICAgICAgICAgMHgwQjc0CisjZGVmaW5lIEdMX1NURU5DSUxfQ0xFQVJfVkFM
VUUgICAgICAgICAgICAweDBCOTEKKyNkZWZpbmUgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAg
ICAgICAgIDB4MEI5MgorI2RlZmluZSBHTF9TVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAg
MHgwQjk0CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICAweDBCOTUK
KyNkZWZpbmUgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDB4MEI5NgorI2RlZmlu
ZSBHTF9TVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgMHgwQjk3CisjZGVmaW5lIEdMX1NU
RU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICAweDBCOTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9X
UklURU1BU0sgICAgICAgICAgICAgIDB4MEI5OAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRlVO
QyAgICAgICAgICAgICAgMHg4ODAwCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAg
ICAgICAgICAweDg4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAg
IDB4ODgwMgorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgMHg4ODAz
CisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICAweDhDQTMKKyNkZWZp
bmUgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDB4OENBNAorI2RlZmluZSBHTF9T
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgMHg4Q0E1CisjZGVmaW5lIEdMX1ZJRVdQT1JU
ICAgICAgICAgICAgICAgICAgICAgICAweDBCQTIKKyNkZWZpbmUgR0xfU0NJU1NPUl9CT1ggICAg
ICAgICAgICAgICAgICAgIDB4MEMxMAorLyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8KKyNkZWZp
bmUgR0xfQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDB4MEMyMgorI2RlZmluZSBHTF9D
T0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgMHgwQzIzCisjZGVmaW5lIEdMX1VOUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICAweDBDRjUKKyNkZWZpbmUgR0xfUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgIDB4MEQwNQorI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9TSVpFICAgICAg
ICAgICAgICAgMHgwRDMzCisjZGVmaW5lIEdMX01BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAg
ICAweDBEM0EKKyNkZWZpbmUgR0xfU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgIDB4MEQ1
MAorI2RlZmluZSBHTF9SRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUyCisjZGVm
aW5lIEdMX0dSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICAweDBENTMKKyNkZWZpbmUgR0xf
QkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NAorI2RlZmluZSBHTF9BTFBIQV9C
SVRTICAgICAgICAgICAgICAgICAgICAgMHgwRDU1CisjZGVmaW5lIEdMX0RFUFRIX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAweDBENTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9CSVRTICAgICAgICAg
ICAgICAgICAgIDB4MEQ1NworI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAg
ICAgMHgyQTAwCisvKiAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyNkZWZpbmUgR0xf
UE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgIDB4ODAzOAorI2RlZmluZSBHTF9URVhUVVJF
X0JJTkRJTkdfMkQgICAgICAgICAgICAgMHg4MDY5CisjZGVmaW5lIEdMX1NBTVBMRV9CVUZGRVJT
ICAgICAgICAgICAgICAgICAweDgwQTgKKyNkZWZpbmUgR0xfU0FNUExFUyAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODBBOQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAg
ICAgMHg4MEFBCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICAweDgw
QUIKKworLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLworLyogICAgICBHTF9URVhUVVJFX01BR19G
SUxURVIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NSU5fRklMVEVSICovCisvKiAgICAgIEdMX1RF
WFRVUkVfV1JBUF9TICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9UICovCisKKyNkZWZpbmUg
R0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIDB4ODZBMgorI2RlZmluZSBHTF9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgMHg4NkEzCisKKy8qIEhpbnRNb2RlICovCisjZGVm
aW5lIEdMX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgR0xf
RkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMQorI2RlZmluZSBHTF9OSUNFU1Qg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAyCisKKy8qIEhpbnRUYXJnZXQgKi8KKyNkZWZp
bmUgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5
cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAor
I2RlZmluZSBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVmaW5l
IEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDIKKyNkZWZpbmUgR0xfVU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAg
ICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxNDBDCisKKy8qIFBpeGVsRm9ybWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAg
ICAgICAgICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgK
KyNkZWZpbmUgR0xfTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmlu
ZSBHTF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgMHgxOTBBCisKKy8qIFBpeGVsVHlw
ZSAqLworLyogICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQgICAgICAgICAweDgwMzMKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMSAgICAgICAgIDB4ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAg
ICAgICAgMHg4MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgMHg4QjMwCisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgIDB4OEIzMQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgICAgICAg
ICAgICAgICAweDg4NjkKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAg
ICAgMHg4REZCCisjZGVmaW5lIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgIDB4
OERGQworI2RlZmluZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAweDhCNEQK
KyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgMHg4QjRDCisjZGVm
aW5lIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgIDB4ODg3MgorI2RlZmluZSBH
TF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICAweDhERkQKKyNkZWZpbmUgR0xfU0hB
REVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgMHg4QjRGCisjZGVmaW5lIEdMX0RFTEVURV9T
VEFUVVMgICAgICAgICAgICAgICAgICAgIDB4OEI4MAorI2RlZmluZSBHTF9MSU5LX1NUQVRVUyAg
ICAgICAgICAgICAgICAgICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAg
ICAgICAgICAgICAgICAgMHg4QjgzCisjZGVmaW5lIEdMX0FUVEFDSEVEX1NIQURFUlMgICAgICAg
ICAgICAgICAgIDB4OEI4NQorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAg
ICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAgICAg
MHg4Qjg3CisjZGVmaW5lIEdMX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDB4OEI4
OQorI2RlZmluZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgICAweDhCOEEKKyNk
ZWZpbmUgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgMHg4QjhDCisjZGVmaW5l
IEdMX0NVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDB4OEI4RAorCisvKiBTdGVuY2ls
RnVuY3Rpb24gKi8KKyNkZWZpbmUgR0xfTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDIwMAorI2RlZmluZSBHTF9MRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCisj
ZGVmaW5lIEdMX0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDIKKyNkZWZpbmUg
R0xfTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMworI2RlZmluZSBHTF9HUkVB
VEVSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA0CisjZGVmaW5lIEdMX05PVEVRVUFMICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDUKKyNkZWZpbmUgR0xfR0VRVUFMICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDIwNgorI2RlZmluZSBHTF9BTFdBWVMgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMjA3CisKKy8qIFN0ZW5jaWxPcCAqLworLyogICAgICBHTF9aRVJPICovCisjZGVm
aW5lIEdMX0tFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDAKKyNkZWZpbmUgR0xf
UkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMQorI2RlZmluZSBHTF9JTkNSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAyCisjZGVmaW5lIEdMX0RFQ1IgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDFFMDMKKyNkZWZpbmUgR0xfSU5WRVJUICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTUwQQorI2RlZmluZSBHTF9JTkNSX1dSQVAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NTA3CisjZGVmaW5lIEdMX0RFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAweDg1
MDgKKworLyogU3RyaW5nTmFtZSAqLworI2RlZmluZSBHTF9WRU5ET1IgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxRjAwCisjZGVmaW5lIEdMX1JFTkRFUkVSICAgICAgICAgICAgICAgICAgICAg
ICAweDFGMDEKKyNkZWZpbmUgR0xfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYw
MgorI2RlZmluZSBHTF9FWFRFTlNJT05TICAgICAgICAgICAgICAgICAgICAgMHgxRjAzCisKKy8q
IFRleHR1cmVNYWdGaWx0ZXIgKi8KKyNkZWZpbmUgR0xfTkVBUkVTVCAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MjYwMAorI2RlZmluZSBHTF9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAg
MHgyNjAxCisKKy8qIFRleHR1cmVNaW5GaWx0ZXIgKi8KKy8qICAgICAgR0xfTkVBUkVTVCAqLwor
LyogICAgICBHTF9MSU5FQVIgKi8KKyNkZWZpbmUgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAg
ICAgICAgIDB4MjcwMAorI2RlZmluZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAg
MHgyNzAxCisjZGVmaW5lIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICAweDI3MDIK
KyNkZWZpbmUgR0xfTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDB4MjcwMworCisvKiBU
ZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworI2RlZmluZSBHTF9URVhUVVJFX01BR19GSUxURVIgICAg
ICAgICAgICAgMHgyODAwCisjZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAg
ICAweDI4MDEKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgIDB4Mjgw
MgorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgMHgyODAzCisKKy8q
IFRleHR1cmVUYXJnZXQgKi8KKy8qICAgICAgR0xfVEVYVFVSRV8yRCAqLworI2RlZmluZSBHTF9U
RVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzAyCisKKyNkZWZpbmUgR0xfVEVYVFVS
RV9DVUJFX01BUCAgICAgICAgICAgICAgIDB4ODUxMworI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJ
TkdfQ1VCRV9NQVAgICAgICAgMHg4NTE0CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCAgICAweDg1MTUKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
ICAgIDB4ODUxNgorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgMHg4
NTE3CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICAweDg1MTgKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDB4ODUxOQorI2RlZmluZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogICAgMHg4NTFBCisjZGVmaW5lIEdMX01BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUgICAgICAweDg1MUMKKworLyogVGV4dHVyZVVuaXQgKi8KKyNk
ZWZpbmUgR0xfVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMAorI2RlZmluZSBH
TF9URVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMxCisjZGVmaW5lIEdMX1RFWFRV
UkUyICAgICAgICAgICAgICAgICAgICAgICAweDg0QzIKKyNkZWZpbmUgR0xfVEVYVFVSRTMgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDMworI2RlZmluZSBHTF9URVhUVVJFNCAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEM0CisjZGVmaW5lIEdMX1RFWFRVUkU1ICAgICAgICAgICAgICAgICAg
ICAgICAweDg0QzUKKyNkZWZpbmUgR0xfVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDB4
ODRDNgorI2RlZmluZSBHTF9URVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM3Cisj
ZGVmaW5lIEdMX1RFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzgKKyNkZWZpbmUg
R0xfVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDOQorI2RlZmluZSBHTF9URVhU
VVJFMTAgICAgICAgICAgICAgICAgICAgICAgMHg4NENBCisjZGVmaW5lIEdMX1RFWFRVUkUxMSAg
ICAgICAgICAgICAgICAgICAgICAweDg0Q0IKKyNkZWZpbmUgR0xfVEVYVFVSRTEyICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRDQworI2RlZmluZSBHTF9URVhUVVJFMTMgICAgICAgICAgICAgICAg
ICAgICAgMHg4NENECisjZGVmaW5lIEdMX1RFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICAw
eDg0Q0UKKyNkZWZpbmUgR0xfVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRgor
I2RlZmluZSBHTF9URVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgMHg4NEQwCisjZGVmaW5l
IEdMX1RFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICAweDg0RDEKKyNkZWZpbmUgR0xfVEVY
VFVSRTE4ICAgICAgICAgICAgICAgICAgICAgIDB4ODREMgorI2RlZmluZSBHTF9URVhUVVJFMTkg
ICAgICAgICAgICAgICAgICAgICAgMHg4NEQzCisjZGVmaW5lIEdMX1RFWFRVUkUyMCAgICAgICAg
ICAgICAgICAgICAgICAweDg0RDQKKyNkZWZpbmUgR0xfVEVYVFVSRTIxICAgICAgICAgICAgICAg
ICAgICAgIDB4ODRENQorI2RlZmluZSBHTF9URVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAg
MHg4NEQ2CisjZGVmaW5lIEdMX1RFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICAweDg0RDcK
KyNkZWZpbmUgR0xfVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDB4ODREOAorI2RlZmlu
ZSBHTF9URVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ5CisjZGVmaW5lIEdMX1RF
WFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICAweDg0REEKKyNkZWZpbmUgR0xfVEVYVFVSRTI3
ICAgICAgICAgICAgICAgICAgICAgIDB4ODREQgorI2RlZmluZSBHTF9URVhUVVJFMjggICAgICAg
ICAgICAgICAgICAgICAgMHg4NERDCisjZGVmaW5lIEdMX1RFWFRVUkUyOSAgICAgICAgICAgICAg
ICAgICAgICAweDg0REQKKyNkZWZpbmUgR0xfVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAg
IDB4ODRERQorI2RlZmluZSBHTF9URVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgMHg4NERG
CisjZGVmaW5lIEdMX0FDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICAweDg0RTAKKworLyog
VGV4dHVyZVdyYXBNb2RlICovCisjZGVmaW5lIEdMX1JFUEVBVCAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI5MDEKKyNkZWZpbmUgR0xfQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDB4
ODEyRgorI2RlZmluZSBHTF9NSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgMHg4MzcwCisK
Ky8qIFVuaWZvcm0gVHlwZXMgKi8KKyNkZWZpbmUgR0xfRkxPQVRfVkVDMiAgICAgICAgICAgICAg
ICAgICAgIDB4OEI1MAorI2RlZmluZSBHTF9GTE9BVF9WRUMzICAgICAgICAgICAgICAgICAgICAg
MHg4QjUxCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICAweDhCNTIK
KyNkZWZpbmUgR0xfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1MworI2RlZmlu
ZSBHTF9JTlRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU0CisjZGVmaW5lIEdMX0lO
VF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICAweDhCNTUKKyNkZWZpbmUgR0xfQk9PTCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NgorI2RlZmluZSBHTF9CT09MX1ZFQzIgICAgICAg
ICAgICAgICAgICAgICAgMHg4QjU3CisjZGVmaW5lIEdMX0JPT0xfVkVDMyAgICAgICAgICAgICAg
ICAgICAgICAweDhCNTgKKyNkZWZpbmUgR0xfQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAg
IDB4OEI1OQorI2RlZmluZSBHTF9GTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgMHg4QjVB
CisjZGVmaW5lIEdMX0ZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICAweDhCNUIKKyNkZWZp
bmUgR0xfRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDB4OEI1QworI2RlZmluZSBHTF9T
QU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgMHg4QjVFCisjZGVmaW5lIEdMX1NBTVBMRVJf
Q1VCRSAgICAgICAgICAgICAgICAgICAweDhCNjAKKworLyogVmVydGV4IEFycmF5cyAqLworI2Rl
ZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDB4ODYyMgorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgIDB4ODYyNAorI2RlZmluZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgIDB4ODYyNQorI2RlZmluZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgIDB4ODg2QQorI2RlZmluZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgIDB4ODY0NQorI2RlZmluZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIDB4ODg5RgorCisvKiBSZWFkIEZvcm1hdCAqLworI2Rl
ZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgICAweDhCOUEKKyNkZWZpbmUg
R0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgMHg4QjlCCisKKy8qIFNoYWRlciBT
b3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDB4OEI4
MQorI2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVm
aW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xf
U0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIgQmluYXJ5
ICovCisjZGVmaW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAweDhERjgKKyNk
ZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgIDB4OERGOQorCisvKiBTaGFk
ZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAg
ICAgICAgICAgICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHg4
REYzCisjZGVmaW5lIEdMX01FRElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNk
ZWZpbmUgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNQorCisvKiBGcmFt
ZWJ1ZmZlciBPYmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAg
ICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDB4
OEQ0MQorCisjZGVmaW5lIEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYK
KyNkZWZpbmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmlu
ZSBHTF9SR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RF
UFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9J
TkRFWCAgICAgICAgICAgICAgICAgIDB4MTkwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAg
ICAgICAgICAgICAgICAgMHg4RDQ4CisKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAg
ICAgICAgICAgIDB4OEQ0MgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAg
ICAgMHg4RDQzCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICAweDhE
NDQKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDB4OEQ1MAorI2Rl
ZmluZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgMHg4RDUxCisjZGVmaW5lIEdM
X1JFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICAweDhENTIKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDB4OEQ1MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJf
REVQVEhfU0laRSAgICAgICAgMHg4RDU0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lM
X1NJWkUgICAgICAweDhENTUKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFICAgICAgICAgICAweDhDRDAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDB4OENEMgorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSAweDhDRDMKKworI2RlZmlu
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgMHg4Q0UwCisjZGVmaW5lIEdMX0RF
UFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAweDhEMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UICAgICAgICAgICAgIDB4OEQyMAorCisjZGVmaW5lIEdMX05PTkUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgICAg
ICAgICAgICAgICAgICAgICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVCAgICAgICAgIDB4OENENgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCAweDhDRDcKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgIDB4OENERAorCisjZGVmaW5lIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAweDhDQTYKKyNkZWZpbmUgR0xfUkVOREVSQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgIDB4OENBNworI2RlZmluZSBHTF9NQVhfUkVOREVSQlVGRkVS
X1NJWkUgICAgICAgICAgMHg4NEU4CisKKyNkZWZpbmUgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gIDB4MDUwNgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdMIGNvcmUgZnVuY3Rp
b25zLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xBdHRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVp
bnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEF0
dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIq
IG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQmluZEZyYW1lYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJh
bWVidWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kUmVu
ZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdMZW51bSB0YXJnZXQs
IEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
QmxlbmRDb2xvciAoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwg
R0xjbGFtcGYgYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xC
bGVuZEVxdWF0aW9uICggR0xlbnVtIG1vZGUgKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9kZVJHQiwgR0xlbnVt
IG1vZGVBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5k
RnVuYyAoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jU2VwYXJhdGUgKEdMZW51bSBzcmNSR0IsIEdM
ZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0YSAoR0xlbnVtIHRhcmdldCwg
R0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJ1ZmZlclN1YkRhdGEgKEdMZW51bSB0
YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRh
dGEpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbENsZWFyQ29sb3IgKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4s
IEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMY2xhbXBmIGRlcHRoKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJTdGVuY2lsIChHTGludCBzKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVk
LCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21waWxlU2hhZGVyIChHTHVpbnQg
c2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3Nl
ZFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
R0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29w
eVRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGludCBib3JkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJv
Z3JhbSAodm9pZCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICBHTF9BUElFTlRSWSBnbENyZWF0
ZVNoYWRlciAoR0xlbnVtIHR5cGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xDdWxsRmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVy
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUZyYW1lYnVm
ZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFt
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVm
ZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTaGFkZXIgKEdMdWludCBzaGFkZXIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUZXh0dXJlcyAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlcHRoTWFzayAoR0xib29sZWFuIGZsYWcpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aFJhbmdlZiAoR0xjbGFtcGYg
ek5lYXIsIEdMY2xhbXBmIHpGYXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZXRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGlzYWJsZSAoR0xlbnVtIGNhcCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRHJhd0FycmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzIChHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNl
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZSAoR0xlbnVt
IGNhcCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xGaW5pc2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xGbHVzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNo
bWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1
aW50IHRleHR1cmUsIEdMaW50IGxldmVsKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsRnJvbnRGYWNlIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuZXJhdGVNaXBtYXAgKEdM
ZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5G
cmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4s
IEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdlblRleHR1cmVzIChHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBH
TGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwg
R0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNp
emUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNoZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXpl
aSBtYXhjb3VudCwgR0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycyk7CitHTF9BUElDQUxM
IGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJv
Z3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJp
diAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNB
TEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xm
bG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VydiAoR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3Jh
bWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUluZm9Mb2cgKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZv
bG9nKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFt
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChH
THVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTaGFkZXJJbmZvTG9nIChHTHVpbnQgc2hhZGVy
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5n
ZSwgR0xpbnQqIHByZWNpc2lvbik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1Ynl0ZSog
R0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3Jt
aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1
aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBw
bmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVy
dGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBw
b2ludGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsSGludCAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJ
RU5UUlkgZ2xJc0J1ZmZlciAoR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICBHTF9BUElFTlRSWSBnbElzRW5hYmxlZCAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIEdMYm9v
bGVhbiAgICBHTF9BUElFTlRSWSBnbElzRnJhbWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7
CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzUHJvZ3JhbSAoR0x1aW50
IHByb2dyYW0pOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1JlbmRl
cmJ1ZmZlciAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBH
TF9BUElFTlRSWSBnbElzU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29s
ZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNUZXh0dXJlIChHTHVpbnQgdGV4dHVyZSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmVXaWR0aCAoR0xmbG9hdCB3aWR0aCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVp
bnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFBpeGVs
U3RvcmVpIChHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsUG9seWdvbk9mZnNldCAoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQg
dW5pdHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxz
IChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICh2b2lkKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNv
dmVyYWdlIChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywg
R0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3Ro
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChH
THVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0
IEdMaW50KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xT
dGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChHTGVu
dW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAoR0x1aW50IG1hc2spOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFza1NlcGFyYXRl
IChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6
cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcFNl
cGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpw
YXNzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UyRCAo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xU
ZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0
KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJh
bWV0ZXJpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCog
cGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
IChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybTFmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xV
bmlmb3JtMWkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTJmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmZ2IChHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3Jt
Mml2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2YgKEdMaW50IGxvY2F0
aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xVbmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGlu
dCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNpdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmIChHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
LCBHTGludCB6LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTRpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJp
eDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVW5pZm9ybU1hdHJpeDNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVXNlUHJvZ3JhbSAoR0x1
aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWYWxp
ZGF0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMWYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIxZnYgKEdMdWlu
dCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIyZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0
cmliMmZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliM2Z2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9h
dCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4
QXR0cmliNGYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBH
TGZsb2F0IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWI0ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIChHTHVpbnQg
aW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xWaWV3cG9ydCAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5k
aWYgLyogX19nbDJfaF8gKi8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcz
IEBACisjaWZuZGVmIF9fZ2wyZXh0X2hfCisjZGVmaW5lIF9fZ2wyZXh0X2hfCisKKy8qICRSZXZp
c2lvbjogMTA3OTggJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMTkgMTc6MzQ6MzAgLTA3MDAgIyQgKi8K
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogVGhp
cyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNl
bnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20v
cHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisjaWZuZGVmIEdMX0FQSUVOVFJZUAorIyAgIGRlZmlu
ZSBHTF9BUElFTlRSWVAgR0xfQVBJRU5UUlkqCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
CisgKiBPRVMgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9P
RVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfY29tcHJl
c3NlZF9FVEMxX1JHQjhfdGV4dHVyZQorI2RlZmluZSBHTF9FVEMxX1JHQjhfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2NAorI2VuZGlmCisKKy8qIEdMX09F
U19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNz
ZWRfcGFsZXR0ZWRfdGV4dHVyZQorI2RlZmluZSBHTF9QQUxFVFRFNF9SR0I4X09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5MAorI2RlZmluZSBHTF9QQUxFVFRFNF9S
R0JBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5MQorI2RlZmlu
ZSBHTF9QQUxFVFRFNF9SNV9HNl9CNV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI5MgorI2RlZmluZSBHTF9QQUxFVFRFNF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI5MworI2RlZmluZSBHTF9QQUxFVFRFNF9SR0I1X0ExX09FUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NAorI2RlZmluZSBHTF9QQUxFVFRF
OF9SR0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5NQorI2Rl
ZmluZSBHTF9QQUxFVFRFOF9SR0JBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI5NgorI2RlZmluZSBHTF9QQUxFVFRFOF9SNV9HNl9CNV9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI5NworI2RlZmluZSBHTF9QQUxFVFRFOF9SR0JBNF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5OAorI2RlZmluZSBHTF9QQUxF
VFRFOF9SR0I1X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI5OQor
I2VuZGlmCisKKy8qIEdMX09FU19kZXB0aDI0ICovCisjaWZuZGVmIEdMX09FU19kZXB0aDI0Cisj
ZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDI0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MUE2CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoMzIgKi8KKyNpZm5kZWYgR0xf
T0VTX2RlcHRoMzIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgxQTcKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVwdGhfdGV4
dHVyZSAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAq
LworCisvKiBHTF9PRVNfRUdMX2ltYWdlICovCisjaWZuZGVmIEdMX09FU19FR0xfaW1hZ2UKK3R5
cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKKyNlbmRpZgorCisvKiBHTF9PRVNfZWxlbWVudF9p
bmRleF91aW50ICovCisjaWZuZGVmIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQKKyNkZWZpbmUg
R0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE0MDUKKyNlbmRpZgorCisvKiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfTEVO
R1RIX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NDEKKyNkZWZpbmUgR0xfTlVN
X1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTICAgICAgICAgICAgICAgICAgICAgICAweDg3RkUK
KyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg3RkYKKyNlbmRpZgorCisvKiBHTF9PRVNfbWFwYnVmZmVyICovCisjaWZuZGVm
IEdMX09FU19tYXBidWZmZXIKKyNkZWZpbmUgR0xfV1JJVEVfT05MWV9PRVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QjkKKyNkZWZpbmUgR0xfQlVGRkVSX0FDQ0VT
U19PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkIKKyNkZWZpbmUg
R0xfQlVGRkVSX01BUFBFRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4QkMKKyNkZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSX09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4QkQKKyNlbmRpZgorCisvKiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwgKi8KKyNpZm5kZWYgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsCisjZGVmaW5lIEdM
X0RFUFRIX1NURU5DSUxfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEZBCisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEYwCisjZW5kaWYKKworLyogR0xfT0VTX3Jn
YjhfcmdiYTggKi8KKyNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKKyNkZWZpbmUgR0xfUkdCOF9P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTEKKyNk
ZWZpbmUgR0xfUkdCQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwNTgKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgKi8K
KyNpZm5kZWYgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCisjZGVmaW5lIEdMX0ZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTICAgICAgICAgICAgICAgICAgMHg4QjhCCisjZW5k
aWYKKworLyogR0xfT0VTX3N0ZW5jaWwxICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsMQorI2Rl
ZmluZSBHTF9TVEVOQ0lMX0lOREVYMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ0NgorI2VuZGlmCisKKy8qIEdMX09FU19zdGVuY2lsNCAqLworI2lmbmRlZiBHTF9P
RVNfc3RlbmNpbDQKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDRfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhENDcKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV8z
RCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8zRAorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBf
Ul9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MgorI2RlZmluZSBH
TF9URVhUVVJFXzNEX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODA2RgorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfM0RfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODA2QQorI2RlZmluZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFX09FUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9TQU1QTEVSXzNE
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1RgorI2RlZmlu
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfM0RfWk9GRlNFVF9PRVMgICAgICAg
IDB4OENENAorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2Zsb2F0ICovCisvKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU190ZXh0
dXJlX2Zsb2F0X2xpbmVhciAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMg
ZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICovCisjaWZuZGVm
IEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyNkZWZpbmUgR0xfSEFMRl9GTE9BVF9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENjEKKyNlbmRpZgorCisvKiBH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAqLworLyogTm8gbmV3IHRva2VucyBpbnRy
b2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9PRVNfdGV4dHVyZV9ucG90ICov
CisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8q
IEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0CisjZGVmaW5lIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NUI1CisjZW5kaWYKKworLyogR0xfT0VTX3ZlcnRleF9oYWxm
X2Zsb2F0ICovCisvKiBHTF9IQUxGX0ZMT0FUX09FUyBkZWZpbmVkIGluIEdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXQgYWxyZWFkeS4gKi8KKworLyogR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEw
XzIgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIKKyNkZWZpbmUgR0xf
VU5TSUdORURfSU5UXzEwXzEwXzEwXzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
RjYKKyNkZWZpbmUgR0xfSU5UXzEwXzEwXzEwXzJfT0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhERjcKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFNRCBl
eHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FNRF9jb21wcmVz
c2VkXzNEQ190ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkXzNEQ190ZXh0dXJl
CisjZGVmaW5lIEdMXzNEQ19YX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4N0Y5CisjZGVmaW5lIEdMXzNEQ19YWV9BTUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZBCisjZW5kaWYKKworLyogR0xfQU1EX2NvbXBy
ZXNzZWRfQVRDX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1
cmUKKyNkZWZpbmUgR0xfQVRDX1JHQl9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDOTIKKyNkZWZpbmUgR0xfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1E
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDOTMKKyNkZWZpbmUgR0xfQVRDX1JHQkFfSU5U
RVJQT0xBVEVEX0FMUEhBX0FNRCAgICAgICAgICAgICAgICAgICAgICAweDg3RUUKKyNlbmRpZgor
CisvKiBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvciAqLworI2lmbmRlZiBHTF9BTURfcGVyZm9y
bWFuY2VfbW9uaXRvcgorI2RlZmluZSBHTF9DT1VOVEVSX1RZUEVfQU1EICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMAorI2RlZmluZSBHTF9DT1VOVEVSX1JBTkdFX0FN
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDMQorI2RlZmluZSBHTF9V
TlNJR05FRF9JTlQ2NF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJD
MgorI2RlZmluZSBHTF9QRVJDRU5UQUdFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEJDMworI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VMVF9BVkFJTEFCTEVfQU1E
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDNAorI2RlZmluZSBHTF9QRVJGTU9OX1JFU1VM
VF9TSVpFX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJDNQorI2RlZmluZSBH
TF9QRVJGTU9OX1JFU1VMVF9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEJDNgorI2VuZGlmCisKKy8qIEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwICovCisjaWZuZGVm
IEdMX0FNRF9wcm9ncmFtX2JpbmFyeV9aNDAwCisjZGVmaW5lIEdMX1o0MDBfQklOQVJZX0FNRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQwCisjZW5kaWYKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCisgKiBFWFQgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKiBHTF9FWFRfYmxlbmRfbWlubWF4ICovCisjaWZuZGVmIEdMX0VYVF9ibGVuZF9t
aW5tYXgKKyNkZWZpbmUgR0xfTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFYX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDgKKyNlbmRpZgorCisvKiBHTF9FWFRf
ZGlzY2FyZF9mcmFtZWJ1ZmZlciAqLworI2lmbmRlZiBHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZl
cgorI2RlZmluZSBHTF9DT0xPUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTgwMAorI2RlZmluZSBHTF9ERVBUSF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMQorI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgorI2VuZGlmCisK
Ky8qIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cyAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1
Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAq
LworI2lmbmRlZiBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQorI2RlZmluZSBHTF9CR1JBX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQorI2RlZmlu
ZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAg
IDB4ODM2NQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODM2NgorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMKKyNkZWZpbmUgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0RkUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlf
RVhUICAgICAgICAgICAgICAgICAgICAgICAweDg0RkYKKyNlbmRpZgorCisvKiBHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JH
UkE4ODg4CisjZGVmaW5lIEdMX0JHUkFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MEUxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfdHlwZV8y
XzEwXzEwXzEwX1JFViAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBf
UkVWCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVl9FWFQgICAgICAgICAg
ICAgICAgICAgICAgMHg4MzY4CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJTUcg
ZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9JTUdfcHJvZ3Jh
bV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfSU1HX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1NH
WF9QUk9HUkFNX0JJTkFSWV9JTUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMw
CisjZW5kaWYKKworLyogR0xfSU1HX3JlYWRfZm9ybWF0ICovCisjaWZuZGVmIEdMX0lNR19yZWFk
X2Zvcm1hdAorI2RlZmluZSBHTF9CR1JBX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODBFMQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
X1JFVl9JTUcgICAgICAgICAgICAgICAgICAgICAgIDB4ODM2NQorI2VuZGlmCisKKy8qIEdMX0lN
R19zaGFkZXJfYmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5CisjZGVmaW5l
IEdMX1NHWF9CSU5BUllfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QzBBCisjZW5kaWYKKworLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMgKi8K
KyNpZm5kZWYgR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgICAweDhDMDAK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyAgICAgICAgICAgICAg
ICAgICAgICAweDhDMDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9J
TUcgICAgICAgICAgICAgICAgICAgICAweDhDMDIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X1BWUlRDXzJCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAweDhDMDMKKyNlbmRpZgorCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSoKKyAqIE5WIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworLyogR0xfTlZfZmVuY2UgKi8KKyNpZm5kZWYgR0xfTlZfZmVuY2UKKyNkZWZpbmUg
R0xfQUxMX0NPTVBMRVRFRF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0RjIKKyNkZWZpbmUgR0xfRkVOQ0VfU1RBVFVTX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg0RjMKKyNkZWZpbmUgR0xfRkVOQ0VfQ09ORElUSU9OX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKKyNlbmRpZgorCisvKiBHTF9OVl9j
b3ZlcmFnZV9zYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5l
IEdMX0NPVkVSQUdFX0NPTVBPTkVOVF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4RUQwCisjZGVmaW5lIEdMX0NPVkVSQUdFX0NPTVBPTkVOVDRfTlYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RUQxCisjZGVmaW5lIEdMX0NPVkVSQUdFX0FUVEFDSE1FTlRfTlYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQyCisjZGVmaW5lIEdMX0NPVkVSQUdF
X0JVRkZFUlNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQzCisjZGVm
aW5lIEdMX0NPVkVSQUdFX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RUQ0CisjZGVmaW5lIEdMX0NPVkVSQUdFX0FMTF9GUkFHTUVOVFNfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RUQ1CisjZGVmaW5lIEdMX0NPVkVSQUdFX0VER0VfRlJBR01F
TlRTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ2CisjZGVmaW5lIEdMX0NPVkVS
QUdFX0FVVE9NQVRJQ19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RUQ3Cisj
ZGVmaW5lIEdMX0NPVkVSQUdFX0JVRkZFUl9CSVRfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDAwCisjZW5kaWYKKworLyogR0xfTlZfZGVwdGhfbm9ubGluZWFyICovCisjaWZu
ZGVmIEdMX05WX2RlcHRoX25vbmxpbmVhcgorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9O
T05MSU5FQVJfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4OEUyQworI2VuZGlmCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogUUNPTSBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKy8qIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50
cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQg
Ki8KKyNpZm5kZWYgR0xfUUNPTV9leHRlbmRlZF9nZXQKKyNkZWZpbmUgR0xfVEVYVFVSRV9XSURU
SF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDIKKyNkZWZpbmUg
R0xfVEVYVFVSRV9IRUlHSFRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCRDMKKyNkZWZpbmUgR0xfVEVYVFVSRV9ERVBUSF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCRDQKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRf
UUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDUKKyNkZWZpbmUgR0xfVEVYVFVSRV9G
T1JNQVRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDYKKyNkZWZp
bmUgR0xfVEVYVFVSRV9UWVBFX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhCRDcKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTUFHRV9WQUxJRF9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCRDgKKyNkZWZpbmUgR0xfVEVYVFVSRV9OVU1fTEVWRUxTX1FD
T00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCRDkKKyNkZWZpbmUgR0xfVEVYVFVS
RV9UQVJHRVRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCREEKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9PQkpFQ1RfVkFMSURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCREIKKyNkZWZpbmUgR0xfU1RBVEVfUkVTVE9SRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCREMKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVk
X2dldDIgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKworLyogR0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlICovCisjaWZuZGVmIEdMX1FDT01f
cGVyZm1vbl9nbG9iYWxfbW9kZQorI2RlZmluZSBHTF9QRVJGTU9OX0dMT0JBTF9NT0RFX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEZBMAorI2VuZGlmCisKKy8qIEdMX1FDT01f
d3JpdGVvbmx5X3JlbmRlcmluZyAqLworI2lmbmRlZiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJp
bmcKKyNkZWZpbmUgR0xfV1JJVEVPTkxZX1JFTkRFUklOR19RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4MjMKKyNlbmRpZgorCisvKiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZyAq
LworI2lmbmRlZiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZworI2RlZmluZSBHTF9DT0xPUl9CVUZG
RVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQyX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHTF9DT0xPUl9CVUZG
RVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNk
ZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ1X1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHTF9DT0xPUl9CVUZG
RVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNk
ZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQwX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZG
RVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNk
ZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQzX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZG
RVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNk
ZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ2X1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZG
RVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDFfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQyX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDRfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQ1X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDdfUUNPTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBM
RV9CVUZGRVJfQklUMF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNk
ZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDFfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQyX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBM
RV9CVUZGRVJfQklUM19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNk
ZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDRfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ1X1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBM
RV9CVUZGRVJfQklUNl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNk
ZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDdfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwMDAwMDAwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFbmQgb2Yg
ZXh0ZW5zaW9uIHRva2Vucywgc3RhcnQgb2YgY29ycmVzcG9uZGluZyBleHRlbnNpb24gZnVuY3Rp
b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogT0VTIGV4
dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfT0VTX2NvbXBy
ZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRD
MV9SR0I4X3RleHR1cmUKKyNkZWZpbmUgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1
cmUgMQorI2VuZGlmCisKKy8qIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3RleHR1cmUgKi8K
KyNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4dHVyZQorI2RlZmluZSBHTF9P
RVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVw
dGgyNCAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGgyNAorI2RlZmluZSBHTF9PRVNfZGVwdGgyNCAx
CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoMzIgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMzIK
KyNkZWZpbmUgR0xfT0VTX2RlcHRoMzIgMQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aF90ZXh0
dXJlICovCisjaWZuZGVmIEdMX09FU19kZXB0aF90ZXh0dXJlCisjZGVmaW5lIEdMX09FU19kZXB0
aF90ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfRUdMX2ltYWdlICovCisjaWZuZGVmIEdM
X09FU19FR0xfaW1hZ2UKKyNkZWZpbmUgR0xfT0VTX0VHTF9pbWFnZSAxCisjaWZkZWYgR0xfR0xF
WFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJn
ZXRUZXh0dXJlMkRPRVMgKEdMZW51bSB0YXJnZXQsIEdMZWdsSW1hZ2VPRVMgaW1hZ2UpOworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJnZXRSZW5kZXJidWZmZXJTdG9y
YWdlT0VTIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFR0xJTUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VTIGltYWdlKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRUdMSU1BR0VUQVJHRVRSRU5ERVJCVUZGRVJTVE9SQUdFT0VTUFJP
QykgKEdMZW51bSB0YXJnZXQsIEdMZWdsSW1hZ2VPRVMgaW1hZ2UpOworI2VuZGlmCisKKy8qIEdM
X09FU19lbGVtZW50X2luZGV4X3VpbnQgKi8KKyNpZm5kZWYgR0xfT0VTX2VsZW1lbnRfaW5kZXhf
dWludAorI2RlZmluZSBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IDEKKyNlbmRpZgorCisvKiBH
TF9PRVNfZmJvX3JlbmRlcl9taXBtYXAgKi8KKyNpZm5kZWYgR0xfT0VTX2Zib19yZW5kZXJfbWlw
bWFwCisjZGVmaW5lIEdMX09FU19mYm9fcmVuZGVyX21pcG1hcCAxCisjZW5kaWYKKworLyogR0xf
T0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoICovCisjaWZuZGVmIEdMX09FU19mcmFnbWVudF9w
cmVjaXNpb25faGlnaAorI2RlZmluZSBHTF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hpZ2ggMQor
I2VuZGlmCisKKy8qIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfT0VT
X2dldF9wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5IDEK
KyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xHZXRQcm9ncmFtQmluYXJ5T0VTIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtQmluYXJ5T0VTIChHTHVpbnQgcHJv
Z3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwgY29uc3QgR0x2b2lkICpiaW5hcnksIEdMaW50IGxl
bmd0aCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JB
TUJJTkFSWU9FU1BST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCBHTHZvaWQgKmJpbmFyeSk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBST0dSQU1CSU5BUllPRVNQUk9DKSAoR0x1aW50IHBy
b2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsIGNvbnN0IEdMdm9pZCAqYmluYXJ5LCBHTGludCBs
ZW5ndGgpOworI2VuZGlmCisKKy8qIEdMX09FU19tYXBidWZmZXIgKi8KKyNpZm5kZWYgR0xfT0VT
X21hcGJ1ZmZlcgorI2RlZmluZSBHTF9PRVNfbWFwYnVmZmVyIDEKKyNpZmRlZiBHTF9HTEVYVF9Q
Uk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyT0VTIChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQ
SUVOVFJZIGdsVW5tYXBCdWZmZXJPRVMgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUG9pbnRlcnZPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1zKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJ
RU5UUllQIFBGTkdMTUFQQlVGRkVST0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nl
c3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTFVOTUFQQlVGRkVST0VT
UFJPQykgKEdMZW51bSB0YXJnZXQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xH
RVRCVUZGRVJQT0lOVEVSVk9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CisjZW5kaWYKKworLyogR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
ICovCisjaWZuZGVmIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorI2RlZmluZSBHTF9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwgMQorI2VuZGlmCisKKy8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CisjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CisjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEK
KyNlbmRpZgorCisvKiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgKi8KKyNpZm5kZWYgR0xf
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCisjZGVmaW5lIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyAxCisjZW5kaWYKKworLyogR0xfT0VTX3N0ZW5jaWwxICovCisjaWZuZGVmIEdMX09FU19z
dGVuY2lsMQorI2RlZmluZSBHTF9PRVNfc3RlbmNpbDEgMQorI2VuZGlmCisKKy8qIEdMX09FU19z
dGVuY2lsNCAqLworI2lmbmRlZiBHTF9PRVNfc3RlbmNpbDQKKyNkZWZpbmUgR0xfT0VTX3N0ZW5j
aWw0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV8zRCAqLworI2lmbmRlZiBHTF9PRVNf
dGV4dHVyZV8zRAorI2RlZmluZSBHTF9PRVNfdGV4dHVyZV8zRCAxCisjaWZkZWYgR0xfR0xFWFRf
UFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UzRE9FUyAo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFRleFN1YkltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29t
cHJlc3NlZFRleFN1YkltYWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1l
bnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQg
em9mZnNldCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYSU1B
R0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhTVUJJTUFHRTNET0VTUFJP
QykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFNVQklNQUdFM0RPRVNQ
Uk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09NUFJFU1NF
RFRFWElNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPTVBSRVNTRURURVhTVUJJTUFHRTNE
T0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdM
dm9pZCogZGF0YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTNET0VTKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0
ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7Cisj
ZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1
cmVfZmxvYXQKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfZmxvYXQgMQorI2VuZGlmCisKKy8qIEdM
X09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIDEKKyNlbmRpZgor
CisvKiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXQKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAxCisjZW5kaWYK
KworLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgKi8KKyNpZm5kZWYgR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIKKyNkZWZpbmUgR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdF9saW5lYXIgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX25wb3QgKi8KKyNpZm5k
ZWYgR0xfT0VTX3RleHR1cmVfbnBvdAorI2RlZmluZSBHTF9PRVNfdGV4dHVyZV9ucG90IDEKKyNl
bmRpZgorCisvKiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAqLworI2lmbmRlZiBHTF9PRVNf
dmVydGV4X2FycmF5X29iamVjdAorI2RlZmluZSBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCAx
CisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsQmluZFZlcnRleEFycmF5T0VTIChHTHVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIChHTHNpemVpIG4sIGNvbnN0IEdMdWlu
dCAqYXJyYXlzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFycmF5
c09FUyAoR0xzaXplaSBuLCBHTHVpbnQgKmFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBH
TF9BUElFTlRSWSBnbElzVmVydGV4QXJyYXlPRVMgKEdMdWludCBhcnJheSk7CisjZW5kaWYKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQykgKEdM
dWludCBhcnJheSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFTEVURVZFUlRF
WEFSUkFZU09FU1BST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqYXJyYXlzKTsKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQykgKEdMc2l6
ZWkgbiwgR0x1aW50ICphcnJheXMpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQ
Rk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DKSAoR0x1aW50IGFycmF5KTsKKyNlbmRpZgorCisvKiBH
TF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9oYWxmX2Zs
b2F0CisjZGVmaW5lIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdCAxCisjZW5kaWYKKworLyogR0xf
T0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF90eXBl
XzEwXzEwXzEwXzIKKyNkZWZpbmUgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgMQorI2Vu
ZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogQU1EIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgKi8K
KyNpZm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUKKyNkZWZpbmUgR0xfQU1EX2Nv
bXByZXNzZWRfM0RDX3RleHR1cmUgMQorI2VuZGlmCisKKy8qIEdMX0FNRF9jb21wcmVzc2VkX0FU
Q190ZXh0dXJlICovCisjaWZuZGVmIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisjZGVm
aW5lIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIDEKKyNlbmRpZgorCisvKiBBTURfcGVy
Zm9ybWFuY2VfbW9uaXRvciAqLworI2lmbmRlZiBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvcgor
I2RlZmluZSBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRvciAxCisjaWZkZWYgR0xfR0xFWFRfUFJP
VE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JHcm91
cHNBTUQgKEdMaW50ICpudW1Hcm91cHMsIEdMc2l6ZWkgZ3JvdXBzU2l6ZSwgR0x1aW50ICpncm91
cHMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVy
c0FNRCAoR0x1aW50IGdyb3VwLCBHTGludCAqbnVtQ291bnRlcnMsIEdMaW50ICptYXhBY3RpdmVD
b3VudGVycywgR0xzaXplaSBjb3VudGVyU2l6ZSwgR0x1aW50ICpjb3VudGVycyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckdyb3VwU3RyaW5nQU1EIChHTHVp
bnQgZ3JvdXAsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmdyb3Vw
U3RyaW5nKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291
bnRlclN0cmluZ0FNRCAoR0x1aW50IGdyb3VwLCBHTHVpbnQgY291bnRlciwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqY291bnRlclN0cmluZyk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJJbmZvQU1EIChHTHVpbnQg
Z3JvdXAsIEdMdWludCBjb3VudGVyLCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5QZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwg
R0x1aW50ICptb25pdG9ycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVQ
ZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xTZWxlY3RQZXJmTW9uaXRvckNvdW50ZXJzQU1EIChHTHVpbnQg
bW9uaXRvciwgR0xib29sZWFuIGVuYWJsZSwgR0x1aW50IGdyb3VwLCBHTGludCBudW1Db3VudGVy
cywgR0x1aW50ICpjb3VudGVyc0xpc3QpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
QmVnaW5QZXJmTW9uaXRvckFNRCAoR0x1aW50IG1vbml0b3IpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRW5kUGVyZk1vbml0b3JBTUQgKEdMdWludCBtb25pdG9yKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlckRhdGFBTUQgKEdMdWlu
dCBtb25pdG9yLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgZGF0YVNpemUsIEdMdWludCAqZGF0YSwg
R0xpbnQgKmJ5dGVzV3JpdHRlbik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMR0VUUEVSRk1PTklUT1JHUk9VUFNBTURQUk9DKSAoR0xpbnQgKm51bUdyb3VwcywgR0xz
aXplaSBncm91cHNTaXplLCBHTHVpbnQgKmdyb3Vwcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUlNBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBH
TGludCAqbnVtQ291bnRlcnMsIEdMaW50ICptYXhBY3RpdmVDb3VudGVycywgR0xzaXplaSBjb3Vu
dGVyU2l6ZSwgR0x1aW50ICpjb3VudGVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEdFVFBFUkZNT05JVE9SR1JPVVBTVFJJTkdBTURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpncm91cFN0cmluZyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUlNUUklOR0FN
RFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpjb3VudGVyU3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JDT1VOVEVSSU5GT0FNRFBST0MpIChHTHVpbnQg
Z3JvdXAsIEdMdWludCBjb3VudGVyLCBHTGVudW0gcG5hbWUsIEdMdm9pZCAqZGF0YSk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFTlBFUkZNT05JVE9SU0FNRFBST0MpIChHTHNp
emVpIG4sIEdMdWludCAqbW9uaXRvcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xERUxFVEVQRVJGTU9OSVRPUlNBTURQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKm1vbml0b3Jz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU0VMRUNUUEVSRk1PTklUT1JDT1VO
VEVSU0FNRFBST0MpIChHTHVpbnQgbW9uaXRvciwgR0xib29sZWFuIGVuYWJsZSwgR0x1aW50IGdy
b3VwLCBHTGludCBudW1Db3VudGVycywgR0x1aW50ICpjb3VudGVyc0xpc3QpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xCRUdJTlBFUkZNT05JVE9SQU1EUFJPQykgKEdMdWludCBt
b25pdG9yKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EUEVSRk1PTklUT1JB
TURQUk9DKSAoR0x1aW50IG1vbml0b3IpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xHRVRQRVJGTU9OSVRPUkNPVU5URVJEQVRBQU1EUFJPQykgKEdMdWludCBtb25pdG9yLCBHTGVu
dW0gcG5hbWUsIEdMc2l6ZWkgZGF0YVNpemUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3Jp
dHRlbik7CisjZW5kaWYKKworLyogR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgKi8KKyNpZm5k
ZWYgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAKKyNkZWZpbmUgR0xfQU1EX3Byb2dyYW1fYmlu
YXJ5X1o0MDAgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRVhUIGV4dGVuc2lv
biBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRVhUX2JsZW5kX21pbm1h
eCAqLworI2lmbmRlZiBHTF9FWFRfYmxlbmRfbWlubWF4CisjZGVmaW5lIEdMX0VYVF9ibGVuZF9t
aW5tYXggMQorI2VuZGlmCisKKy8qIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyICovCisjaWZu
ZGVmIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCisjZGVmaW5lIEdMX0VYVF9kaXNjYXJkX2Zy
YW1lYnVmZmVyIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhbWVidWZmZXJFWFQgKEdMZW51bSB0YXJnZXQsIEdMc2l6
ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSAqYXR0YWNobWVudHMpOworI2VuZGlmCit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0
dGFjaG1lbnRzKTsKKyNlbmRpZgorCisjaWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cwor
I2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAo
R0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsTXVsdGlEcmF3RWxlbWVudHNFWFQgKEdMZW51bSwgY29uc3QgR0xzaXplaSAq
LCBHTGVudW0sIGNvbnN0IEdMdm9pZCogKiwgR0xzaXplaSk7CisjZW5kaWYgLyogR0xfR0xFWFRf
UFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xNVUxUSURSQVdB
UlJBWVNFWFRQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50ICpmaXJzdCwgR0xzaXplaSAqY291bnQs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVM
VElEUkFXRUxFTUVOVFNFWFRQUk9DKSAoR0xlbnVtIG1vZGUsIGNvbnN0IEdMc2l6ZWkgKmNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OworI2VuZGlmCisKKy8qIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICovCisjaWZuZGVmIEdMX0VY
VF9yZWFkX2Zvcm1hdF9iZ3JhCisjZGVmaW5lIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIDEKKyNl
bmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgKi8KKyNpZm5kZWYg
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisjZGVmaW5lIEdMX0VYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYyAxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4ICovCisjaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorI2Rl
ZmluZSBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggMQorI2VuZGlmCisKKy8qIEdMX0VY
VF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KKyNpZm5kZWYgR0xfRVhUX3RleHR1cmVf
dHlwZV8yXzEwXzEwXzEwX1JFVgorI2RlZmluZSBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBf
MTBfUkVWIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIElNRyBleHRlbnNpb24g
ZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0lNR19wcm9ncmFtX2JpbmFy
eSAqLworI2lmbmRlZiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfSU1HX3Byb2dy
YW1fYmluYXJ5IDEKKyNlbmRpZgorCisvKiBHTF9JTUdfcmVhZF9mb3JtYXQgKi8KKyNpZm5kZWYg
R0xfSU1HX3JlYWRfZm9ybWF0CisjZGVmaW5lIEdMX0lNR19yZWFkX2Zvcm1hdCAxCisjZW5kaWYK
KworLyogR0xfSU1HX3NoYWRlcl9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfSU1HX3NoYWRlcl9iaW5h
cnkKKyNkZWZpbmUgR0xfSU1HX3NoYWRlcl9iaW5hcnkgMQorI2VuZGlmCisKKy8qIEdMX0lNR190
ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXBy
ZXNzaW9uX3B2cnRjCisjZGVmaW5lIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIDEK
KyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE5WIGV4dGVuc2lvbiBmdW5jdGlvbnMK
KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfTlZfZmVuY2UgKi8KKyNpZm5kZWYgR0xfTlZf
ZmVuY2UKKyNkZWZpbmUgR0xfTlZfZmVuY2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlbGV0ZUZlbmNlc05WIChHTHNpemVpLCBj
b25zdCBHTHVpbnQgKik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5GZW5jZXNO
ViAoR0xzaXplaSwgR0x1aW50ICopOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkg
Z2xJc0ZlbmNlTlYgKEdMdWludCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBn
bFRlc3RGZW5jZU5WIChHTHVpbnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
RmVuY2Vpdk5WIChHTHVpbnQsIEdMZW51bSwgR0xpbnQgKik7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xGaW5pc2hGZW5jZU5WIChHTHVpbnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsU2V0RmVuY2VOViAoR0x1aW50LCBHTGVudW0pOworI2VuZGlmCit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFTEVURUZFTkNFU05WUFJPQykgKEdMc2l6ZWkgbiwgY29u
c3QgR0x1aW50ICpmZW5jZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRU5G
RU5DRVNOVlBST0MpIChHTHNpemVpIG4sIEdMdWludCAqZmVuY2VzKTsKK3R5cGVkZWYgR0xib29s
ZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU0ZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5
cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xURVNURkVOQ0VOVlBST0MpIChHTHVp
bnQgZmVuY2UpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRGRU5DRUlWTlZQ
Uk9DKSAoR0x1aW50IGZlbmNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRU5DRU5WUFJPQykgKEdMdWludCBmZW5j
ZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNFVEZFTkNFTlZQUk9DKSAoR0x1
aW50IGZlbmNlLCBHTGVudW0gY29uZGl0aW9uKTsKKyNlbmRpZgorCisvKiBHTF9OVl9jb3ZlcmFn
ZV9zYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEdMX05W
X2NvdmVyYWdlX3NhbXBsZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsQ292ZXJhZ2VNYXNrTlYgKEdMYm9vbGVhbiBtYXNrKTsKK0dM
X0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvdmVyYWdlT3BlcmF0aW9uTlYgKEdMZW51bSBv
cGVyYXRpb24pOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVS
QUdFTUFTS05WUFJPQykgKEdMYm9vbGVhbiBtYXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQ09WRVJBR0VPUEVSQVRJT05OVlBST0MpIChHTGVudW0gb3BlcmF0aW9uKTsKKyNl
bmRpZgorCisvKiBHTF9OVl9kZXB0aF9ub25saW5lYXIgKi8KKyNpZm5kZWYgR0xfTlZfZGVwdGhf
bm9ubGluZWFyCisjZGVmaW5lIEdMX05WX2RlcHRoX25vbmxpbmVhciAxCisjZW5kaWYKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCisgKiBRQ09NIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09N
X2RyaXZlcl9jb250cm9sCisjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQorI2lmZGVm
IEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldERy
aXZlckNvbnRyb2xzUUNPTSAoR0xpbnQgKm51bSwgR0xzaXplaSBzaXplLCBHTHVpbnQgKmRyaXZl
ckNvbnRyb2xzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldERyaXZlckNvbnRy
b2xTdHJpbmdRQ09NIChHTHVpbnQgZHJpdmVyQ29udHJvbCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMY2hhciAqZHJpdmVyQ29udHJvbFN0cmluZyk7CitHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xFbmFibGVEcml2ZXJDb250cm9sUUNPTSAoR0x1aW50IGRyaXZlckNv
bnRyb2wpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGlzYWJsZURyaXZlckNvbnRy
b2xRQ09NIChHTHVpbnQgZHJpdmVyQ29udHJvbCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VURFJJVkVSQ09OVFJPTFNRQ09NUFJPQykgKEdMaW50ICpudW0sIEdM
c2l6ZWkgc2l6ZSwgR0x1aW50ICpkcml2ZXJDb250cm9scyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTEdFVERSSVZFUkNPTlRST0xTVFJJTkdRQ09NUFJPQykgKEdMdWludCBkcml2
ZXJDb250cm9sLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpkcml2
ZXJDb250cm9sU3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5BQkxF
RFJJVkVSQ09OVFJPTFFDT01QUk9DKSAoR0x1aW50IGRyaXZlckNvbnRyb2wpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xESVNBQkxFRFJJVkVSQ09OVFJPTFFDT01QUk9DKSAoR0x1
aW50IGRyaXZlckNvbnRyb2wpOworI2VuZGlmCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0ICov
CisjaWZuZGVmIEdMX1FDT01fZXh0ZW5kZWRfZ2V0CisjZGVmaW5lIEdMX1FDT01fZXh0ZW5kZWRf
Z2V0IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xFeHRHZXRUZXh0dXJlc1FDT00gKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRl
eHR1cmVzLCBHTGludCAqbnVtVGV4dHVyZXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRXh0R2V0QnVmZmVyc1FDT00gKEdMdWludCAqYnVmZmVycywgR0xpbnQgbWF4QnVmZmVycywg
R0xpbnQgKm51bUJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0
UmVuZGVyYnVmZmVyc1FDT00gKEdMdWludCAqcmVuZGVyYnVmZmVycywgR0xpbnQgbWF4UmVuZGVy
YnVmZmVycywgR0xpbnQgKm51bVJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsRXh0R2V0RnJhbWVidWZmZXJzUUNPTSAoR0x1aW50ICpmcmFtZWJ1ZmZlcnMsIEdM
aW50IG1heEZyYW1lYnVmZmVycywgR0xpbnQgKm51bUZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRUZXhMZXZlbFBhcmFtZXRlcml2UUNPTSAoR0x1aW50
IHRleHR1cmUsIEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dFRleE9iamVjdFN0YXRl
T3ZlcnJpZGVpUUNPTSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRUZXhTdWJJbWFnZVFDT00gKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEJ1ZmZlclBvaW50ZXJ2UUNPTSAoR0xlbnVtIHRh
cmdldCwgR0x2b2lkICoqcGFyYW1zKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xFWFRHRVRURVhUVVJFU1FDT01QUk9DKSAoR0x1aW50ICp0ZXh0dXJlcywgR0xpbnQg
bWF4VGV4dHVyZXMsIEdMaW50ICpudW1UZXh0dXJlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEVYVEdFVEJVRkZFUlNRQ09NUFJPQykgKEdMdWludCAqYnVmZmVycywgR0xpbnQg
bWF4QnVmZmVycywgR0xpbnQgKm51bUJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xFWFRHRVRSRU5ERVJCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKnJlbmRlcmJ1ZmZl
cnMsIEdMaW50IG1heFJlbmRlcmJ1ZmZlcnMsIEdMaW50ICpudW1SZW5kZXJidWZmZXJzKTsKK3R5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VURlJBTUVCVUZGRVJTUUNPTVBST0Mp
IChHTHVpbnQgKmZyYW1lYnVmZmVycywgR0xpbnQgbWF4RnJhbWVidWZmZXJzLCBHTGludCAqbnVt
RnJhbWVidWZmZXJzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUVEVY
TEVWRUxQQVJBTUVURVJJVlFDT01QUk9DKSAoR0x1aW50IHRleHR1cmUsIEdMZW51bSBmYWNlLCBH
TGludCBsZXZlbCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRVhUVEVYT0JKRUNUU1RBVEVPVkVSUklERUlRQ09NUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xFWFRHRVRURVhTVUJJTUFHRVFDT01QUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkICp0ZXhlbHMpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xFWFRHRVRCVUZGRVJQT0lOVEVSVlFDT01QUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0x2b2lkICoqcGFyYW1zKTsKKyNlbmRpZgorCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldDIg
Ki8KKyNpZm5kZWYgR0xfUUNPTV9leHRlbmRlZF9nZXQyCisjZGVmaW5lIEdMX1FDT01fZXh0ZW5k
ZWRfZ2V0MiAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRXh0R2V0U2hhZGVyc1FDT00gKEdMdWludCAqc2hhZGVycywgR0xpbnQgbWF4
U2hhZGVycywgR0xpbnQgKm51bVNoYWRlcnMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRXh0R2V0UHJvZ3JhbXNRQ09NIChHTHVpbnQgKnByb2dyYW1zLCBHTGludCBtYXhQcm9ncmFt
cywgR0xpbnQgKm51bVByb2dyYW1zKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZ
IGdsRXh0SXNQcm9ncmFtQmluYXJ5UUNPTSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0UHJvZ3JhbUJpbmFyeVNvdXJjZVFDT00gKEdMdWludCBw
cm9ncmFtLCBHTGVudW0gc2hhZGVydHlwZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgp
OworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFNIQURFUlNR
Q09NUFJPQykgKEdMdWludCAqc2hhZGVycywgR0xpbnQgbWF4U2hhZGVycywgR0xpbnQgKm51bVNo
YWRlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRQUk9HUkFNU1FD
T01QUk9DKSAoR0x1aW50ICpwcm9ncmFtcywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Q
cm9ncmFtcyk7Cit0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMRVhUSVNQUk9H
UkFNQklOQVJZUUNPTVBST0MpIChHTHVpbnQgcHJvZ3JhbSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTEVYVEdFVFBST0dSQU1CSU5BUllTT1VSQ0VRQ09NUFJPQykgKEdMdWludCBw
cm9ncmFtLCBHTGVudW0gc2hhZGVydHlwZSwgR0xjaGFyICpzb3VyY2UsIEdMaW50ICpsZW5ndGgp
OworI2VuZGlmCisKKy8qIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAqLworI2lmbmRlZiBH
TF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUKKyNkZWZpbmUgR0xfUUNPTV9wZXJmbW9uX2dsb2Jh
bF9tb2RlIDEKKyNlbmRpZgorCisvKiBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcgKi8KKyNp
Zm5kZWYgR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nCisjZGVmaW5lIEdMX1FDT01fd3JpdGVv
bmx5X3JlbmRlcmluZyAxCisjZW5kaWYKKworLyogR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcgKi8K
KyNpZm5kZWYgR0xfUUNPTV90aWxlZF9yZW5kZXJpbmcKKyNkZWZpbmUgR0xfUUNPTV90aWxlZF9y
ZW5kZXJpbmcgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbFN0YXJ0VGlsaW5nUUNPTSAoR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQg
d2lkdGgsIEdMdWludCBoZWlnaHQsIEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEVuZFRpbGluZ1FDT00gKEdMYml0ZmllbGQgcHJlc2VydmVN
YXNrKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTElO
R1FDT01QUk9DKSAoR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgd2lkdGgsIEdMdWludCBoZWln
aHQsIEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMRU5EVElMSU5HUUNPTVBST0MpIChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7CisjZW5k
aWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wyZXh0
X2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMnBsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMwIEBACisjaWZuZGVmIF9fZ2wycGxhdGZvcm1faF8KKyNkZWZpbmUgX19nbDJwbGF0Zm9ybV9o
XworCisvKiAkUmV2aXNpb246IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIyOjM1OjM0
IC0wODAwICMkICovCisKKy8qCisgKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgorICogMi4wLiBGb3IgZGV0YWls
cywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgorICovCisKKy8qIFBs
YXRmb3JtLXNwZWNpZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgT3BlbkdMIEVTIDIuWCAg
Z2wyLmgKKyAqCisgKiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMg
ZmlsZSB0byBzdWl0IHRoZWlyIHBsYXRmb3JtLgorICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1
Ym1pdCBhbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CisgKiB0
aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLiAgUGxl
YXNlIHN1Ym1pdCBjaGFuZ2VzCisgKiBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJv
bm9zIEJ1Z3ppbGxhIChodHRwOi8va2hyb25vcy5vcmcvYnVnemlsbGEpCisgKiBieSBmaWxpbmcg
YSBidWcgYWdhaW5zdCBwcm9kdWN0ICJPcGVuR0wtRVMiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgor
ICovCisKKyNpbmNsdWRlIDxLSFIva2hycGxhdGZvcm0uaD4KKworI2lmbmRlZiBHTF9BUElDQUxM
CisjZGVmaW5lIEdMX0FQSUNBTEwgIEtIUk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKyNpZm5kZWYg
R0xfQVBJRU5UUlkKKyNkZWZpbmUgR0xfQVBJRU5UUlkgS0hST05PU19BUElFTlRSWQorI2VuZGlm
CisKKyNlbmRpZiAvKiBfX2dsMnBsYXRmb3JtX2hfICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dM
U0xBTkcvUmVzb3VyY2VMaW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMU0xB
TkcvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9SZXNvdXJjZUxpbWl0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCisjZGVmaW5l
IF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCisKK3N0cnVjdCBUQnVpbHRJblJlc291cmNlCit7
CisJaW50IG1heFZlcnRleEF0dHJpYnM7CisJaW50IG1heFZlcnRleFVuaWZvcm1WZWN0b3JzOwor
CWludCBtYXhWYXJ5aW5nVmVjdG9yczsKKwlpbnQgbWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHM7
CisJaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1heFRleHR1cmVJbWFn
ZVVuaXRzOworCWludCBtYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOworCWludCBtYXhEcmF3QnVm
ZmVyczsKK307CisjZW5kaWYgLy8gX1JFU09VUkNFX0xJTUlUU19JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworI2lmbmRlZiBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworI2Rl
ZmluZSBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiUmVzb3VyY2VM
aW1pdHMuaCIKKworLy8KKy8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVy
ZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBj
b21waWxlci4KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYK
Ky8vCisvLyBEcml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBh
bnkgb3RoZXIKKy8vIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlhbGl6ZSgp
OworLy8KKy8vIERyaXZlciBzaG91bGQgY2FsbCB0aGlzIGF0IHNodXRkb3duLgorLy8KK2ludCBT
aEZpbmFsaXplKCk7CisvLworLy8gVHlwZXMgb2YgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4g
Y29uc3VtZS4KKy8vCit0eXBlZGVmIGVudW0geworICAgIEVTaExhbmdWZXJ0ZXgsCisgICAgRVNo
TGFuZ0ZyYWdtZW50LAorICAgIEVTaExhbmdDb3VudCwKK30gRVNoTGFuZ3VhZ2U7CisKKy8vCisv
LyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0by4KKy8vIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyBPcGVuR0wgRVMgYW5kIFdlYkdMIHNwZWNpZmljYXRpb25zLgor
Ly8KK3R5cGVkZWYgZW51bSB7CisgICAgRVNoU3BlY0dMRVMyLAorICAgIEVTaFNwZWNXZWJHTCwK
K30gRVNoU3BlYzsKKworLy8KKy8vIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVy
LgorLy8KK3R5cGVkZWYgZW51bSB7CisgICAgRVNoT3B0Tm9HZW5lcmF0aW9uLAorICAgIEVTaE9w
dE5vbmUsCisgICAgRVNoT3B0U2ltcGxlLCAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgY2Fu
IGJlIGRvbmUgcXVpY2tseQorICAgIEVTaE9wdEZ1bGwsICAgICAgICAgLy8gT3B0aW1pemF0aW9u
cyB0aGF0IHdpbGwgdGFrZSBtb3JlIHRpbWUKK30gRVNoT3B0aW1pemF0aW9uTGV2ZWw7CisKK2Vu
dW0gVERlYnVnT3B0aW9ucyB7CisgICAgRURlYnVnT3BOb25lICAgICAgICAgICAgICAgPSAweDAw
MCwKKyAgICBFRGVidWdPcEludGVybWVkaWF0ZSAgICAgICA9IDB4MDAxLCAgLy8gV3JpdGVzIGlu
dGVybWVkaWF0ZSB0cmVlIGludG8gaW5mby1sb2cuCit9OworCisvLworLy8gU2hIYW5kbGUgaGVs
ZCBieSBidXQgb3BhcXVlIHRvIHRoZSBkcml2ZXIuICBJdCBpcyBhbGxvY2F0ZWQsCisvLyBtYW5h
Z2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250ZW50cyAKKy8v
IGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KKy8vCisvLyBJZiBoYW5k
bGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KKy8vCit0eXBlZGVmIHZvaWQq
IFNoSGFuZGxlOworCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVz
dHJveSBjb21waWxlciBvYmplY3RzLgorLy8KK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIo
RVNoTGFuZ3VhZ2UsIEVTaFNwZWMpOyAgLy8gb25lIHBlciBzaGFkZXIKK3ZvaWQgU2hEZXN0cnVj
dChTaEhhbmRsZSk7CisKKy8vCisvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBi
b29sZWFuLCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworLy8gVGhlIGlu
Zm8tbG9nIHNob3VsZCBiZSB3cml0dGVuIGJ5IFNoQ29tcGlsZSBpbnRvIAorLy8gU2hIYW5kbGUs
IHNvIGl0IGNhbiBhbnN3ZXIgZnV0dXJlIHF1ZXJpZXMuCisvLworaW50IFNoQ29tcGlsZSgKKyAg
ICBjb25zdCBTaEhhbmRsZSwKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10s
CisgICAgY29uc3QgaW50IG51bVN0cmluZ3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2
ZWwsCisgICAgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAqcmVzb3VyY2VzLAorICAgIGludCBkZWJ1
Z09wdGlvbnMKKyAgICApOworCisvLworLy8gQWxsIHRoZSBmb2xsb3dpbmcgcmV0dXJuIDAgaWYg
dGhlIGluZm9ybWF0aW9uIGlzIG5vdAorLy8gYXZhaWxhYmxlIGluIHRoZSBvYmplY3QgcGFzc2Vk
IGRvd24sIG9yIHRoZSBvYmplY3QgaXMgYmFkLgorLy8KK2NvbnN0IGNoYXIqIFNoR2V0SW5mb0xv
Zyhjb25zdCBTaEhhbmRsZSk7Citjb25zdCBjaGFyKiBTaEdldE9iamVjdENvZGUoY29uc3QgU2hI
YW5kbGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX0NP
TVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvS0hSL2tocnBs
YXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjY5IEBACisjaWZuZGVmIF9fa2hycGxhdGZvcm1faF8KKyNkZWZpbmUg
X19raHJwbGF0Zm9ybV9oXworCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhlIEto
cm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMg
c29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAi
TWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9u
LCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0
IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQK
KyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFs
cy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVU
IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC
TEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H
IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyogS2hy
b25vcyBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMuCisgKgorICogJFJl
dmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIwMDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwg
MjEgT2N0IDIwMDkpICQKKyAqCisgKiBBZG9wdGVycyBtYXkgbW9kaWZ5IHRoaXMgZmlsZSB0byBz
dWl0IHRoZWlyIHBsYXRmb3JtLiBBZG9wdGVycyBhcmUKKyAqIGVuY291cmFnZWQgdG8gc3VibWl0
IHBsYXRmb3JtIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MKKyAqIGdyb3Vw
IHNvIHRoYXQgdGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMg
ZmlsZS4KKyAqIFBsZWFzZSBzdWJtaXQgY2hhbmdlcyBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1
YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhCisgKiAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKSBi
eSBmaWxpbmcgYSBidWcgYWdhaW5zdCBwcm9kdWN0CisgKiAiS2hyb25vcyAoZ2VuZXJhbCkiIGNv
bXBvbmVudCAiUmVnaXN0cnkiLgorICoKKyAqIEEgcHJlZGVmaW5lZCB0ZW1wbGF0ZSB3aGljaCBm
aWxscyBpbiBzb21lIG9mIHRoZSBidWcgZmllbGRzIGNhbiBiZQorICogcmVhY2hlZCB1c2luZyBo
dHRwOi8vdGlueXVybC5jb20va2hycGxhdGZvcm0taC1idWdyZXBvcnQsIGJ1dCB5b3UKKyAqIG11
c3QgY3JlYXRlIGEgQnVnemlsbGEgbG9naW4gZmlyc3QuCisgKgorICoKKyAqIFNlZSB0aGUgSW1w
bGVtZW50ZXIncyBHdWlkZWxpbmVzIGZvciBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGlzIGZp
bGUKKyAqIHNob3VsZCBiZSBsb2NhdGVkIG9uIHlvdXIgc3lzdGVtIGFuZCBmb3IgbW9yZSBkZXRh
aWxzIG9mIGl0cyB1c2U6CisgKiAgICBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2lt
cGxlbWVudGVyc19ndWlkZS5wZGYKKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVk
IGFzCisgKiAgICAgICAgI2luY2x1ZGUgPEtIUi9raHJwbGF0Zm9ybS5oPgorICogYnkgS2hyb25v
cyBjbGllbnQgQVBJIGhlYWRlciBmaWxlcyB0aGF0IHVzZSBpdHMgdHlwZXMgYW5kIGRlZmluZXMu
CisgKgorICogVGhlIHR5cGVzIGluIGtocnBsYXRmb3JtLmggc2hvdWxkIG9ubHkgYmUgdXNlZCB0
byBkZWZpbmUgQVBJLXNwZWNpZmljIHR5cGVzLgorICoKKyAqIFR5cGVzIGRlZmluZWQgaW4ga2hy
cGxhdGZvcm0uaDoKKyAqICAgIGtocm9ub3NfaW50OF90ICAgICAgICAgICAgICBzaWduZWQgICA4
ICBiaXQKKyAqICAgIGtocm9ub3NfdWludDhfdCAgICAgICAgICAgICB1bnNpZ25lZCA4ICBiaXQK
KyAqICAgIGtocm9ub3NfaW50MTZfdCAgICAgICAgICAgICBzaWduZWQgICAxNiBiaXQKKyAqICAg
IGtocm9ub3NfdWludDE2X3QgICAgICAgICAgICB1bnNpZ25lZCAxNiBiaXQKKyAqICAgIGtocm9u
b3NfaW50MzJfdCAgICAgICAgICAgICBzaWduZWQgICAzMiBiaXQKKyAqICAgIGtocm9ub3NfdWlu
dDMyX3QgICAgICAgICAgICB1bnNpZ25lZCAzMiBiaXQKKyAqICAgIGtocm9ub3NfaW50NjRfdCAg
ICAgICAgICAgICBzaWduZWQgICA2NCBiaXQKKyAqICAgIGtocm9ub3NfdWludDY0X3QgICAgICAg
ICAgICB1bnNpZ25lZCA2NCBiaXQKKyAqICAgIGtocm9ub3NfaW50cHRyX3QgICAgICAgICAgICBz
aWduZWQgICBzYW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlcgorICogICAga2hyb25vc191
aW50cHRyX3QgICAgICAgICAgIHVuc2lnbmVkIHNhbWUgbnVtYmVyIG9mIGJpdHMgYXMgYSBwb2lu
dGVyCisgKiAgICBraHJvbm9zX3NzaXplX3QgICAgICAgICAgICAgc2lnbmVkICAgc2l6ZQorICog
ICAga2hyb25vc191c2l6ZV90ICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUKKyAqICAgIGtocm9u
b3NfZmxvYXRfdCAgICAgICAgICAgICBzaWduZWQgICAzMiBiaXQgZmxvYXRpbmcgcG9pbnQKKyAq
ICAgIGtocm9ub3NfdGltZV9uc190ICAgICAgICAgICB1bnNpZ25lZCA2NCBiaXQgdGltZSBpbiBu
YW5vc2Vjb25kcworICogICAga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IHVuc2lnbmVkIHRp
bWUgaW50ZXJ2YWwgb3IgYWJzb2x1dGUgdGltZSBpbgorICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9zX3N0aW1lX25hbm9z
ZWNvbmRzX3Qgc2lnbmVkIHRpbWUgaW50ZXJ2YWwgaW4gbmFub3NlY29uZHMKKyAqICAgIGtocm9u
b3NfYm9vbGVhbl9lbnVtX3QgICAgICBlbnVtZXJhdGVkIGJvb2xlYW4gdHlwZS4gVGhpcyBzaG91
bGQKKyAqICAgICAgb25seSBiZSB1c2VkIGFzIGEgYmFzZSB0eXBlIHdoZW4gYSBjbGllbnQgQVBJ
J3MgYm9vbGVhbiB0eXBlIGlzCisgKiAgICAgIGFuIGVudW0uIENsaWVudCBBUElzIHdoaWNoIHVz
ZSBhbiBpbnRlZ2VyIG9yIG90aGVyIHR5cGUgZm9yCisgKiAgICAgIGJvb2xlYW5zIGNhbm5vdCB1
c2UgdGhpcyBhcyB0aGUgYmFzZSB0eXBlIGZvciB0aGVpciBib29sZWFuLgorICoKKyAqIFRva2Vu
cyBkZWZpbmVkIGluIGtocnBsYXRmb3JtLmg6CisgKgorICogICAgS0hST05PU19GQUxTRSwgS0hS
T05PU19UUlVFIEVudW1lcmF0ZWQgYm9vbGVhbiBmYWxzZS90cnVlIHZhbHVlcy4KKyAqCisgKiAg
ICBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgaXMgMSBpZiA2NCBiaXQgaW50ZWdlcnMgYXJlIHN1cHBv
cnRlZDsgb3RoZXJ3aXNlIDAuCisgKiAgICBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgaXMgMSBpZiBm
bG9hdHMgYXJlIHN1cHBvcnRlZDsgb3RoZXJ3aXNlIDAuCisgKgorICogQ2FsbGluZyBjb252ZW50
aW9uIG1hY3JvcyBkZWZpbmVkIGluIHRoaXMgZmlsZToKKyAqICAgIEtIUk9OT1NfQVBJQ0FMTAor
ICogICAgS0hST05PU19BUElFTlRSWQorICogICAgS0hST05PU19BUElBVFRSSUJVVEVTCisgKgor
ICogVGhlc2UgbWF5IGJlIHVzZWQgaW4gZnVuY3Rpb24gcHJvdG90eXBlcyBhczoKKyAqCisgKiAg
ICAgIEtIUk9OT1NfQVBJQ0FMTCB2b2lkIEtIUk9OT1NfQVBJRU5UUlkgZnVuY25hbWUoCisgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwKKyAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcyKSBLSFJPTk9TX0FQSUFUVFJJQlVURVM7Cisg
Ki8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQ0FM
TAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIHByZWNlZGVzIHRoZSByZXR1cm4gdHlwZSBv
ZiB0aGUgZnVuY3Rpb24gaW4gdGhlIGZ1bmN0aW9uIHByb3RvdHlwZS4KKyAqLworI2lmIGRlZmlu
ZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9fKQorIyAgIGRlZmluZSBLSFJP
Tk9TX0FQSUNBTEwgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxpZiBkZWZpbmVkIChfX1NZTUJJ
QU4zMl9fKQorIyAgIGRlZmluZSBLSFJPTk9TX0FQSUNBTEwgSU1QT1JUX0MKKyNlbHNlCisjICAg
ZGVmaW5lIEtIUk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog
RGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUVOVFJZCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRo
aXMgZm9sbG93cyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uICBhbmQgcHJlY2VkZXMg
dGhlIGZ1bmN0aW9uCisgKiBuYW1lIGluIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCisgKi8KKyNp
ZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19T
Q0lURUNIX1NOQVBfXykKKyAgICAvKiBXaW4zMiBidXQgbm90IFdpbkNFICovCisjICAgZGVmaW5l
IEtIUk9OT1NfQVBJRU5UUlkgX19zdGRjYWxsCisjZWxzZQorIyAgIGRlZmluZSBLSFJPTk9TX0FQ
SUVOVFJZCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtI
Uk9OT1NfQVBJQVRUUklCVVRFUworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZvbGxvd3Mg
dGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2YgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBhcmd1bWVu
dHMuCisgKi8KKyNpZiBkZWZpbmVkIChfX0FSTUNDXzJfXykKKyNkZWZpbmUgS0hST05PU19BUElB
VFRSSUJVVEVTIF9fc29mdGZwCisjZWxzZQorI2RlZmluZSBLSFJPTk9TX0FQSUFUVFJJQlVURVMK
KyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMK
KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIChkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9f
U1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5l
ZChfX1NDT19fKSB8fCBkZWZpbmVkKF9fVVNMQ19fKQorCisKKy8qCisgKiBVc2luZyA8c3RkaW50
Lmg+CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAg
ICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBr
aHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9z
X2ludDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0
X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19T
VVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBkZWZpbmVkKF9fVk1TICkgfHwgZGVmaW5lZChfX3Nn
aSkKKworLyoKKyAqIFVzaW5nIDxpbnR0eXBlcy5oPgorICovCisjaW5jbHVkZSA8aW50dHlwZXMu
aD4KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlw
ZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlwZWRlZiBp
bnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVpbnQ2NF90
ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1NfU1VQUE9S
VF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisjZWxpZiBk
ZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKKworLyoKKyAqIFdp
bjMyCisgKi8KK3R5cGVkZWYgX19pbnQzMiAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90
OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyICAgICAgICBraHJvbm9zX3VpbnQzMl90OwordHlw
ZWRlZiBfX2ludDY0ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Cit0eXBlZGVmIHVu
c2lnbmVkIF9faW50NjQgICAgICAgIGtocm9ub3NfdWludDY0X3Q7CisjZGVmaW5lIEtIUk9OT1Nf
U1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQorCisj
ZWxpZiBkZWZpbmVkKF9fc3VuX18pIHx8IGRlZmluZWQoX19kaWdpdGFsX18pCisKKy8qCisgKiBT
dW4gb3IgRGlnaXRhbAorICovCit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGtocm9u
b3NfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAga2hyb25vc191aW50
MzJfdDsKKyNpZiBkZWZpbmVkKF9fYXJjaDY0X18pIHx8IGRlZmluZWQoX0xQNjQpCit0eXBlZGVm
IGxvbmcgaW50ICAgICAgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgICAgICAga2hyb25vc191aW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIGxvbmcg
bG9uZyBpbnQgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCAga2hyb25vc191aW50NjRfdDsKKyNlbmRpZiAvKiBfX2FyY2g2NF9fICovCisj
ZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKKyNkZWZpbmUgS0hST05PU19TVVBQT1JU
X0ZMT0FUICAgMQorCisjZWxpZiAwCisKKy8qCisgKiBIeXBvdGhldGljYWwgcGxhdGZvcm0gd2l0
aCBubyBmbG9hdCBvciBpbnQ2NCBzdXBwb3J0CisgKi8KK3R5cGVkZWYgaW50ICAgICAgICAgICAg
ICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAg
ICBraHJvbm9zX3VpbnQzMl90OworI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAwCisj
ZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDAKKworI2Vsc2UKKworLyoKKyAqIEdlbmVy
aWMgZmFsbGJhY2sKKyAqLworI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnQzMl90ICAg
ICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAg
ICAgICAgIGtocm9ub3NfdWludDMyX3Q7Cit0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgICAg
IGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAga2hyb25v
c191aW50NjRfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMQorI2RlZmluZSBL
SFJPTk9TX1NVUFBPUlRfRkxPQVQgICAxCisKKyNlbmRpZgorCisKKy8qCisgKiBUeXBlcyB0aGF0
IGFyZSAoc28gZmFyKSB0aGUgc2FtZSBvbiBhbGwgcGxhdGZvcm1zCisgKi8KK3R5cGVkZWYgc2ln
bmVkICAgY2hhciAgICAgICAgICBraHJvbm9zX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hh
ciAgICAgICAgICBraHJvbm9zX3VpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCAgIHNob3J0IGludCAg
ICAga2hyb25vc19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgICAgIGtocm9u
b3NfdWludDE2X3Q7Cit0eXBlZGVmIHNpZ25lZCAgIGxvbmcgIGludCAgICAga2hyb25vc19pbnRw
dHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgaW50ICAgICBraHJvbm9zX3VpbnRwdHJfdDsK
K3R5cGVkZWYgc2lnbmVkICAgbG9uZyAgaW50ICAgICBraHJvbm9zX3NzaXplX3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgIGludCAgICAga2hyb25vc191c2l6ZV90OworCisjaWYgS0hST05PU19T
VVBQT1JUX0ZMT0FUCisvKgorICogRmxvYXQgdHlwZQorICovCit0eXBlZGVmICAgICAgICAgIGZs
b2F0ICAgICAgICAga2hyb25vc19mbG9hdF90OworI2VuZGlmCisKKyNpZiBLSFJPTk9TX1NVUFBP
UlRfSU5UNjQKKy8qIFRpbWUgdHlwZXMKKyAqCisgKiBUaGVzZSB0eXBlcyBjYW4gYmUgdXNlZCB0
byByZXByZXNlbnQgYSB0aW1lIGludGVydmFsIGluIG5hbm9zZWNvbmRzIG9yCisgKiBhbiBhYnNv
bHV0ZSBVbmFkanVzdGVkIFN5c3RlbSBUaW1lLiAgVW5hZGp1c3RlZCBTeXN0ZW0gVGltZSBpcyB0
aGUgbnVtYmVyCisgKiBvZiBuYW5vc2Vjb25kcyBzaW5jZSBzb21lIGFyYml0cmFyeSBzeXN0ZW0g
ZXZlbnQgKGUuZy4gc2luY2UgdGhlIGxhc3QKKyAqIHRpbWUgdGhlIHN5c3RlbSBib290ZWQpLiAg
VGhlIFVuYWRqdXN0ZWQgU3lzdGVtIFRpbWUgaXMgYW4gdW5zaWduZWQKKyAqIDY0IGJpdCB2YWx1
ZSB0aGF0IHdyYXBzIGJhY2sgdG8gMCBldmVyeSA1ODQgeWVhcnMuICBUaW1lIGludGVydmFscwor
ICogbWF5IGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQuCisgKi8KK3R5cGVkZWYga2hyb25v
c191aW50NjRfdCAgICAgICBraHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3Q7Cit0eXBlZGVmIGto
cm9ub3NfaW50NjRfdCAgICAgICAga2hyb25vc19zdGltZV9uYW5vc2Vjb25kc190OworI2VuZGlm
CisKKy8qCisgKiBEdW1teSB2YWx1ZSB1c2VkIHRvIHBhZCBlbnVtIHR5cGVzIHRvIDMyIGJpdHMu
CisgKi8KKyNpZm5kZWYgS0hST05PU19NQVhfRU5VTQorI2RlZmluZSBLSFJPTk9TX01BWF9FTlVN
IDB4N0ZGRkZGRkYKKyNlbmRpZgorCisvKgorICogRW51bWVyYXRlZCBib29sZWFuIHR5cGUKKyAq
CisgKiBWYWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHRy
dWUuICBUaGVyZWZvcmUKKyAqIGNvbXBhcmlzb25zIHNob3VsZCBub3QgYmUgbWFkZSBhZ2FpbnN0
IEtIUk9OT1NfVFJVRS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBLSFJPTk9TX0ZBTFNFID0g
MCwKKyAgICBLSFJPTk9TX1RSVUUgID0gMSwKKyAgICBLSFJPTk9TX0JPT0xFQU5fRU5VTV9GT1JD
RV9TSVpFID0gS0hST05PU19NQVhfRU5VTQorfSBraHJvbm9zX2Jvb2xlYW5fZW51bV90OworCisj
ZW5kaWYgLyogX19raHJwbGF0Zm9ybV9oXyAqLwpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xl
Lnhjb2RlcHJvai9wYXVscy5tb2RlMXYzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9i
dWlsZF9hbmdsZS54Y29kZXByb2ovcGF1bHMubW9kZTF2MwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMzYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NU
WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3
dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0i
MS4wIj4KKzxkaWN0PgorCTxrZXk+QWN0aXZlUGVyc3BlY3RpdmVOYW1lPC9rZXk+CisJPHN0cmlu
Zz5Qcm9qZWN0PC9zdHJpbmc+CisJPGtleT5BbGxvd2VkTW9kdWxlczwva2V5PgorCTxhcnJheT4K
KwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3Ry
aW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgor
CQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYU21hcnRHcm91cFRyZWVNb2R1bGU8
L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Hcm91cHMgYW5kIEZpbGVz
IE91dGxpbmUgVmlldzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5k
bGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFu
Y2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJ
CQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+RWRpdG9yPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5
PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJ
bnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tl
eT4KKwkJCTxzdHJpbmc+WENUYXNrTGlzdE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9r
ZXk+CisJCQk8c3RyaW5nPlRhc2sgTGlzdDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0Pgor
CQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxr
ZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9k
dWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+RmlsZSBhbmQgU21hcnQgR3JvdXAgRGV0YWlsIFZpZXdlcjwv
c3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5
PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8
c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWEJ1
aWxkUmVzdWx0c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PkRldGFpbGVkIEJ1aWxkIFJlc3VsdHMgVmlld2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgor
CQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3RyaW5nPgorCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYUHJvamVjdEZpbmRNb2R1bGU8L3N0cmluZz4K
KwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Qcm9qZWN0IEJhdGNoIEZpbmQgVG9vbDwv
c3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5
PgorCQkJPHN0cmluZz48L3N0cmluZz4KKwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8
c3RyaW5nPm48L3N0cmluZz4KKwkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlhDUHJv
amVjdEZvcm1hdENvbmZsaWN0c01vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJ
CQk8c3RyaW5nPlByb2plY3QgRm9ybWF0IENvbmZsaWN0cyBMaXN0PC9zdHJpbmc+CisJCTwvZGlj
dD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwv
c3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5n
PgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYQm9va21hcmtzTW9kdWxlPC9z
dHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+Qm9va21hcmtzIFRvb2w8L3N0
cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8L2tleT4K
KwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5PgorCQkJPHN0
cmluZz5uPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5QQlhDbGFz
c0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5D
bGFzcyBCcm93c2VyPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRs
ZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5j
ZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CTxzdHJpbmc+UEJYQ1ZTTW9kdWxlPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxz
dHJpbmc+U291cmNlIENvZGUgQ29udHJvbCBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRp
Y3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgor
CQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtl
eT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdCcmVha3BvaW50c01vZHVsZTwvc3Ry
aW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnIEJyZWFrcG9pbnRzIFRv
b2w8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+QnVuZGxlTG9hZFBhdGg8
L2tleT4KKwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pk1heEluc3RhbmNlczwva2V5Pgor
CQkJPHN0cmluZz5uPC9zdHJpbmc+CisJCQk8a2V5Pk1vZHVsZTwva2V5PgorCQkJPHN0cmluZz5Y
Q0RvY2thYmxlSW5zcGVjdG9yPC9zdHJpbmc+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJp
bmc+SW5zcGVjdG9yPC9zdHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRs
ZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5j
ZXM8L2tleT4KKwkJCTxzdHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CTxzdHJpbmc+UEJYT3BlblF1aWNrbHlNb2R1bGU8L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5
PgorCQkJPHN0cmluZz5PcGVuIFF1aWNrbHkgVG9vbDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxk
aWN0PgorCQkJPGtleT5CdW5kbGVMb2FkUGF0aDwva2V5PgorCQkJPHN0cmluZz48L3N0cmluZz4K
KwkJCTxrZXk+TWF4SW5zdGFuY2VzPC9rZXk+CisJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCTxr
ZXk+TW9kdWxlPC9rZXk+CisJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3RyaW5n
PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkRlYnVnZ2VyPC9zdHJpbmc+CisJCTwv
ZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+CisJCQk8c3RyaW5n
Pjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxzdHJpbmc+MTwvc3Ry
aW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+UEJYRGVidWdDTElNb2R1bGU8
L3N0cmluZz4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBDb25zb2xlPC9z
dHJpbmc+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkJ1bmRsZUxvYWRQYXRoPC9rZXk+
CisJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJPGtleT5NYXhJbnN0YW5jZXM8L2tleT4KKwkJCTxz
dHJpbmc+bjwvc3RyaW5nPgorCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCTxzdHJpbmc+WENTbmFw
c2hvdE1vZHVsZTwvc3RyaW5nPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlNuYXBz
aG90cyBUb29sPC9zdHJpbmc+CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+QnVuZGxlUGF0
aDwva2V5PgorCTxzdHJpbmc+L0RldmVsb3Blci9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Rl
dlRvb2xzSW50ZXJmYWNlLmZyYW1ld29yay9SZXNvdXJjZXM8L3N0cmluZz4KKwk8a2V5PkRlc2Ny
aXB0aW9uPC9rZXk+CisJPHN0cmluZz5EZWZhdWx0RGVzY3JpcHRpb25LZXk8L3N0cmluZz4KKwk8
a2V5PkRvY2tpbmdTeXN0ZW1WaXNpYmxlPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PkV4dGVuc2lv
bjwva2V5PgorCTxzdHJpbmc+bW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+RmF2QmFyQ29uZmlnPC9r
ZXk+CisJPGRpY3Q+CisJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJPHN0cmlu
Zz5GQkM3NkI1ODExRjYyNjIwMDBCRkIwMzc8L3N0cmluZz4KKwkJPGtleT5YQ0Jhck1vZHVsZUl0
ZW1OYW1lczwva2V5PgorCQk8ZGljdC8+CisJCTxrZXk+WENCYXJNb2R1bGVJdGVtczwva2V5Pgor
CQk8YXJyYXkvPgorCTwvZGljdD4KKwk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5
PgorCTxmYWxzZS8+CisJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUu
cGVyc3BlY3RpdmVzLnByb2plY3QubW9kZTF2Mzwvc3RyaW5nPgorCTxrZXk+TWFqb3JWZXJzaW9u
PC9rZXk+CisJPGludGVnZXI+MzM8L2ludGVnZXI+CisJPGtleT5NaW5vclZlcnNpb248L2tleT4K
Kwk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCTxrZXk+TmFtZTwva2V5PgorCTxzdHJpbmc+RGVmYXVs
dDwvc3RyaW5nPgorCTxrZXk+Tm90aWZpY2F0aW9uczwva2V5PgorCTxhcnJheS8+CisJPGtleT5P
cGVuRWRpdG9yczwva2V5PgorCTxhcnJheS8+CisJPGtleT5QZXJzcGVjdGl2ZVdpZHRoczwva2V5
PgorCTxhcnJheT4KKwkJPGludGVnZXI+LTE8L2ludGVnZXI+CisJCTxpbnRlZ2VyPi0xPC9pbnRl
Z2VyPgorCTwvYXJyYXk+CisJPGtleT5QZXJzcGVjdGl2ZXM8L2tleT4KKwk8YXJyYXk+CisJCTxk
aWN0PgorCQkJPGtleT5DaG9zZW5Ub29sYmFySXRlbXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8
c3RyaW5nPmFjdGl2ZS1jb21iby1wb3B1cDwvc3RyaW5nPgorCQkJCTxzdHJpbmc+YWN0aW9uPC9z
dHJpbmc+CisJCQkJPHN0cmluZz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgor
CQkJCTxzdHJpbmc+ZGVidWdnZXItZW5hYmxlLWJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQkJPHN0
cmluZz5idWlsZC1hbmQtZ288L3N0cmluZz4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5pZGUuUEJY
VG9vbGJhclN0b3BCdXR0b248L3N0cmluZz4KKwkJCQk8c3RyaW5nPmdldC1pbmZvPC9zdHJpbmc+
CisJCQkJPHN0cmluZz5OU1Rvb2xiYXJGbGV4aWJsZVNwYWNlSXRlbTwvc3RyaW5nPgorCQkJCTxz
dHJpbmc+Y29tLmFwcGxlLnBieC50b29sYmFyLnNlYXJjaGZpZWxkPC9zdHJpbmc+CisJCQk8L2Fy
cmF5PgorCQkJPGtleT5Db250cm9sbGVyQ2xhc3NCYXNlTmFtZTwva2V5PgorCQkJPHN0cmluZz48
L3N0cmluZz4KKwkJCTxrZXk+SWNvbk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+V2luZG93T2ZQcm9q
ZWN0V2l0aEVkaXRvcjwvc3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3Ry
aW5nPnBlcnNwZWN0aXZlLnByb2plY3Q8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5
PgorCQkJPGZhbHNlLz4KKwkJCTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRp
Y3Q+CisJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJPGRpY3Q+CisJ
CQkJCQk8a2V5PlBCWEJvdHRvbVNtYXJ0R3JvdXBHSURzPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJ
CQkJCQkJPHN0cmluZz4xQzM3RkJBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJCQkJCQk8
c3RyaW5nPjFDMzdGQUFDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+
MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFC
QzA1NTM5Q0QxMTIxMTAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1MDUzQjY5
QjIwMDIxMTI1Njwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNEMDAwMTAw
MTA0PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQxMEI8L3N0
cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3RyaW5nPgor
CQkJCQkJPC9hcnJheT4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tleT4KKwkJ
CQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwvc3RyaW5n
PgorCQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJCQkJCTxz
dHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29s
dW1uRGF0YTwva2V5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJl
ZU1vZHVsZUNvbHVtbldpZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPHJl
YWw+MjI2PC9yZWFsPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3Vw
VHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCTxz
dHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8L2RpY3Q+
CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5X3Y3PC9r
ZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0
bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJCQk8c3Ry
aW5nPjVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RDwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjE5
NkRCNkFCMDA2QkI4MzUwM0M3RDc4Njwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjQ2NkUxRDA1
MzFBNzlCNTgxM0U4QTdGODwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPkUwRURDNDEzMEU3RDM3
NDMxOENFNzJCRTwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQkFDMDQ1MDlDRDAwMDAw
MDEwMjwvc3RyaW5nPgorCQkJCQkJCQk8c3RyaW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwv
c3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1v
ZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJ
CQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVnZXI+NjE8L2ludGVnZXI+CisJCQkJCQkJCTwvYXJy
YXk+CisJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxl
T3V0bGluZVN0YXRlVmlzaWJsZVJlY3RLZXk8L2tleT4KKwkJCQkJCQk8c3RyaW5nPnt7MCwgNDc5
fSwgezIyNiwgNzYwfX08L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9w
U21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxhcnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVk
ZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJCQkJPHRydWUvPgorCQkJCQkJPGtleT5YQ1No
YXJpbmdUb2tlbjwva2V5PgorCQkJCQkJPHN0cmluZz5jb20uYXBwbGUuWGNvZGUuR0ZTaGFyaW5n
VG9rZW48L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQk8ZGljdD4KKwkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCTxz
dHJpbmc+e3swLCAwfSwgezI0MywgNzc4fX08L3N0cmluZz4KKwkJCQkJCTxrZXk+R3JvdXBUcmVl
VGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQk8YXJyYXk+CisJCQkJCQkJPHN0cmluZz5N
YWluQ29sdW1uPC9zdHJpbmc+CisJCQkJCQkJPHJlYWw+MjI2PC9yZWFsPgorCQkJCQkJPC9hcnJh
eT4KKwkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCTxzdHJpbmc+MCA1
OSA3MjAgODE5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCQk8a2V5
Pk1vZHVsZTwva2V5PgorCQkJCQk8c3RyaW5nPlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlPC9zdHJp
bmc+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjI0M3B0PC9zdHJp
bmc+CisJCQkJPC9kaWN0PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJ
PGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9r
ZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+CisJ
CQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+
VHJhbnNsYXRvckhMU0wuaDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFNwbGl0TW9kdWxlSW5O
YXZpZ2F0b3JLZXk8L2tleT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PlNwbGl0MDwv
a2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJ
RDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+MUNFMEIyMDQwNjQ3MUUwNjAwOTdBNUY0PC9zdHJp
bmc+CisJCQkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlTGFiZWw8L2tleT4KKwkJCQkJCQkJ
CQk8c3RyaW5nPlRyYW5zbGF0b3JITFNMLmg8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5Pl9oaXN0
b3J5Q2FwYWNpdHk8L2tleT4KKwkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJ
CQkJCTxrZXk+Ym9va21hcms8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPkZCMzlENzVEMTIwMTBF
M0QwMDA4OEU2OTwvc3RyaW5nPgorCQkJCQkJCQkJCTxrZXk+aGlzdG9yeTwva2V5PgorCQkJCQkJ
CQkJCTxhcnJheT4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTBCNDExRjc5NTdBMDA4MUY1QkE8
L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz5GQjNDNTBCNTExRjc5NTdBMDA4MUY1QkE8L3N0
cmluZz4KKwkJCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJPGtl
eT5TcGxpdENvdW50PC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPjE8L3N0cmluZz4KKwkJCQkJCQkJ
PC9kaWN0PgorCQkJCQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJ
PHRydWUvPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlv
bjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJ
CTxzdHJpbmc+e3swLCAwfSwgezQ3MiwgNTQ5fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJi
ZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0
MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+
CisJCQkJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJCTxrZXk+
UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+NTQ5cHQ8L3N0cmluZz4KKwkJCQkJCTwv
ZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+CisJCQkJ
CQkJPHRydWUvPgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJ
CQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJ
CQk8c3RyaW5nPjFDRTBCMjA1MDY0NzFFMDYwMDk3QTVGNDwvc3RyaW5nPgorCQkJCQkJCQk8a2V5
PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3Ry
aW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+e3swLCA1NTR9LCB7NDcyLCAyMjR9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJl
cldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MCA1OSA3MjAgODE5IDAgMCAxNDQw
IDg3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCQkJCQk8c3RyaW5nPlhDRGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9w
b3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMjRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0
PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmlu
Zz40NzJwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8
L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nl
czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJ
CQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+
WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3Ry
aW5nPgorCQkJCTxzdHJpbmc+WENEZXRhaWxNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJ
CQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+RkIz
OUQ3NUUxMjAxMEUzRDAwMDg4RTY5PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0UwQjFGRTA2NDcx
REVEMDA5N0E1RjQ8L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCMzlENzVGMTIwMTBFM0QwMDA4OEU2
OTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNFMEIyMDMwNjQ3MUUwNjAwOTdBNUY0PC9zdHJpbmc+
CisJCQkJPHN0cmluZz4xQ0UwQjIwNTA2NDcxRTA2MDA5N0E1RjQ8L3N0cmluZz4KKwkJCTwvYXJy
YXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNNaW5vclZlcnNpb248L2tleT4K
KwkJCTxzdHJpbmc+Mjwvc3RyaW5nPgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5
PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWZhdWx0VjM8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+Q29udHJvbGxlckNsYXNzQmFzZU5hbWU8L2tleT4K
KwkJCTxzdHJpbmc+PC9zdHJpbmc+CisJCQk8a2V5Pkljb25OYW1lPC9rZXk+CisJCQk8c3RyaW5n
PldpbmRvd09mUHJvamVjdDwvc3RyaW5nPgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8
c3RyaW5nPnBlcnNwZWN0aXZlLm1vcnBoPC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tl
eT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFy
cmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkJlY29tZUFjdGl2ZTwva2V5PgorCQkJCQk8aW50
ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQk8a2V5PkNvbnRlbnRDb25maWd1cmF0aW9uPC9rZXk+CisJ
CQkJCTxkaWN0PgorCQkJCQkJPGtleT5QQlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJ
CQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZCQUMwNDUwOUNEMDAwMDAwMTAyPC9zdHJp
bmc+CisJCQkJCQkJPHN0cmluZz4xQzM3RkFBQzA0NTA5Q0QwMDAwMDAxMDI8L3N0cmluZz4KKwkJ
CQkJCQk8c3RyaW5nPjFDMDhFNzdDMDQ1NDk2MTAwMEM5MTRCRDwvc3RyaW5nPgorCQkJCQkJCTxz
dHJpbmc+MUMzN0ZBQkMwNTUwOUNEMDAwMDAwMTAyPC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4x
QzM3RkFCQzA1NTM5Q0QxMTIxMTAxMDI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPkUyNjQ0QjM1
MDUzQjY5QjIwMDIxMTI1Njwvc3RyaW5nPgorCQkJCQkJCTxzdHJpbmc+MUMzN0ZBQkMwNDUwOUNE
MDAwMTAwMTA0PC9zdHJpbmc+CisJCQkJCQkJPHN0cmluZz4xQ0MwRUE0MDA0MzUwRUY5MDA0NDQx
MEI8L3N0cmluZz4KKwkJCQkJCQk8c3RyaW5nPjFDQzBFQTQwMDQzNTBFRjkwMDQxMTEwQjwvc3Ry
aW5nPgorCQkJCQkJPC9hcnJheT4KKwkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUdVSUQ8L2tl
eT4KKwkJCQkJCTxzdHJpbmc+MTFFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJ
CQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJPHN0cmluZz5GaWxlczwv
c3RyaW5nPgorCQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJvdmlkZWQ8L2tleT4KKwkJ
CQkJCTxzdHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9k
dWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5QQlhTbWFydEdy
b3VwVHJlZU1vZHVsZUNvbHVtbldpZHRoc0tleTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJ
CQkJPHJlYWw+MTg2PC9yZWFsPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5QQlhTbWFy
dEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlfdjQ8L2tleT4KKwkJCQkJCQk8YXJyYXk+CisJCQkJ
CQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQk8
L2RpY3Q+CisJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlS2V5
X3Y3PC9rZXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9k
dWxlT3V0bGluZVN0YXRlRXhwYW5zaW9uS2V5PC9rZXk+CisJCQkJCQkJPGFycmF5PgorCQkJCQkJ
CQk8c3RyaW5nPjI5Qjk3MzE0RkRDRkEzOTQxMUNBMkNFQTwvc3RyaW5nPgorCQkJCQkJCQk8c3Ry
aW5nPjFDMzdGQUJDMDU1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCTwvYXJyYXk+CisJ
CQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZVNlbGVjdGlvbktl
eTwva2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGFycmF5PgorCQkJCQkJCQkJPGludGVn
ZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQk8L2FycmF5PgorCQkJCQkJ
CTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVWaXNpYmxlUmVjdEtleTwv
a2V5PgorCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezE4NiwgMzM3fX08L3N0cmluZz4KKwkJCQkJ
CTwvZGljdD4KKwkJCQkJCTxrZXk+UEJYVG9wU21hcnRHcm91cEdJRHM8L2tleT4KKwkJCQkJCTxh
cnJheS8+CisJCQkJCQk8a2V5PlhDSW5jbHVkZVBlcnNwZWN0aXZlc1N3aXRjaDwva2V5PgorCQkJ
CQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCTxrZXk+WENTaGFyaW5nVG9rZW48L2tleT4K
KwkJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLlhjb2RlLkdGU2hhcmluZ1Rva2VuPC9zdHJpbmc+CisJ
CQkJCTwvZGljdD4KKwkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJ
PGRpY3Q+CisJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHsy
MDMsIDM1NX19PC9zdHJpbmc+CisJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmlndXJhdGlv
bjwva2V5PgorCQkJCQkJPGFycmF5PgorCQkJCQkJCTxzdHJpbmc+TWFpbkNvbHVtbjwvc3RyaW5n
PgorCQkJCQkJCTxyZWFsPjE4NjwvcmVhbD4KKwkJCQkJCTwvYXJyYXk+CisJCQkJCQk8a2V5PlJ1
YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPjM3MyAyNjkgNjkwIDM5NyAwIDAg
MTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCTwvZGljdD4KKwkJCQkJPGtleT5Nb2R1bGU8L2tleT4K
KwkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0
PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Nb3JwaDwvc3Ry
aW5nPgorCQkJPGtleT5QcmVmZXJyZWRXaWR0aDwva2V5PgorCQkJPGludGVnZXI+MzAwPC9pbnRl
Z2VyPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJp
bmc+WENNb2R1bGVEb2NrPC9zdHJpbmc+CisJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1v
ZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+
CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xMUUwQjFGRTA2NDcxREVEMDA5N0E1RjQ8L3N0cmlu
Zz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8
c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLmRlZmF1bHQuc2hvcnRWMzwvc3RyaW5nPgorCQk8
L2RpY3Q+CisJPC9hcnJheT4KKwk8a2V5PlBlcnNwZWN0aXZlc0JhclZpc2libGU8L2tleT4KKwk8
ZmFsc2UvPgorCTxrZXk+U2hlbGZJc1Zpc2libGU8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+U291
cmNlRGVzY3JpcHRpb248L2tleT4KKwk8c3RyaW5nPmZpbGUgYXQgJy9EZXZlbG9wZXIvTGlicmFy
eS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZUb29sc0ludGVyZmFjZS5mcmFtZXdvcmsvUmVzb3VyY2Vz
L1hDUGVyc3BlY3RpdmVzU3BlY2lmaWNhdGlvbk1vZGUxLnhjcGVyc3BlYyc8L3N0cmluZz4KKwk8
a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCTx0cnVlLz4KKwk8a2V5PlRpbWVTdGFtcDwv
a2V5PgorCTxyZWFsPjAuMDwvcmVhbD4KKwk8a2V5PlRvb2xiYXJDb25maWdVc2VyRGVmYXVsdHNN
aW5vclZlcnNpb248L2tleT4KKwk8c3RyaW5nPjI8L3N0cmluZz4KKwk8a2V5PlRvb2xiYXJEaXNw
bGF5TW9kZTwva2V5PgorCTxpbnRlZ2VyPjE8L2ludGVnZXI+CisJPGtleT5Ub29sYmFySXNWaXNp
YmxlPC9rZXk+CisJPHRydWUvPgorCTxrZXk+VG9vbGJhclNpemVNb2RlPC9rZXk+CisJPGludGVn
ZXI+MTwvaW50ZWdlcj4KKwk8a2V5PlR5cGU8L2tleT4KKwk8c3RyaW5nPlBlcnNwZWN0aXZlczwv
c3RyaW5nPgorCTxrZXk+VXBkYXRlTWVzc2FnZTwva2V5PgorCTxzdHJpbmc+VGhlIERlZmF1bHQg
V29ya3NwYWNlIGluIHRoaXMgdmVyc2lvbiBvZiBYY29kZSBub3cgaW5jbHVkZXMgc3VwcG9ydCB0
byBoaWRlIGFuZCBzaG93IHRoZSBkZXRhaWwgdmlldyAod2hhdCBoYXMgYmVlbiByZWZlcnJlZCB0
byBhcyB0aGUgIk1ldHJvLU1vcnBoIiBmZWF0dXJlKS4gIFlvdSBtdXN0IGRpc2NhcmQgeW91ciBj
dXJyZW50IERlZmF1bHQgV29ya3NwYWNlIHNldHRpbmdzIGFuZCB1cGRhdGUgdG8gdGhlIGxhdGVz
dCBEZWZhdWx0IFdvcmtzcGFjZSBpbiBvcmRlciB0byBnYWluIHRoaXMgZmVhdHVyZS4gIERvIHlv
dSB3aXNoIHRvIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IFdvcmtzcGFjZSBkZWZhdWx0cyBmb3IgcHJv
amVjdCAnJUAnPzwvc3RyaW5nPgorCTxrZXk+V2luZG93SnVzdGlmaWNhdGlvbjwva2V5PgorCTxp
bnRlZ2VyPjU8L2ludGVnZXI+CisJPGtleT5XaW5kb3dPcmRlckxpc3Q8L2tleT4KKwk8YXJyYXk+
CisJCTxzdHJpbmc+RkJDNzZCNTkxMUY2MjYyMDAwQkZCMDM3PC9zdHJpbmc+CisJCTxzdHJpbmc+
L1ZvbHVtZXMvREFUQS9wYXVscy9zcmMvU2FmYXJpL09wZW5Tb3VyY2UvQU5HTEUvc3JjL2J1aWxk
X2FuZ2xlLnhjb2RlcHJvajwvc3RyaW5nPgorCTwvYXJyYXk+CisJPGtleT5XaW5kb3dTdHJpbmc8
L2tleT4KKwk8c3RyaW5nPjAgNTkgNzIwIDgxOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJPGtl
eT5XaW5kb3dUb29sc1YzPC9rZXk+CisJPGFycmF5PgorCQk8ZGljdD4KKwkJCTxrZXk+Rmlyc3RU
aW1lV2luZG93RGlzcGxheWVkPC9rZXk+CisJCQk8ZmFsc2UvPgorCQkJPGtleT5JZGVudGlmaWVy
PC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYnVpbGQ8L3N0cmluZz4KKwkJCTxrZXk+SXNW
ZXJ0aWNhbDwva2V5PgorCQkJPHRydWUvPgorCQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJh
eT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJ
CTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8
ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8
c3RyaW5nPjFDRDA1MjhGMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjwvc3RyaW5nPgorCQkJ
CQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJPHRydWUvPgorCQkJ
CQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3sw
LCAwfSwgezEzMDAsIDI5NH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVyV2luZG93RnJh
bWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz4xNDAgMjc4IDEzMDAgNTc2IDAgMCAxNDQwIDg3OCA8
L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0
aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yOTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0Pgor
CQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJ
CQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+WENNYWluQnVpbGRSZXN1bHRzTW9kdWxlR1VJRDwvc3RyaW5nPgorCQkJCQkJ
CQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkJ1aWxk
IFJlc3VsdHM8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJfQ29s
bGFwc2U8L2tleT4KKwkJCQkJCQkJPGludGVnZXI+MTAyMTwvaW50ZWdlcj4KKwkJCQkJCQkJPGtl
eT5YQ0J1aWxkUmVzdWx0c1RyaWdnZXJfT3Blbjwva2V5PgorCQkJCQkJCQk8aW50ZWdlcj4xMDEx
PC9pbnRlZ2VyPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJh
dGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJ
CQkJCTxzdHJpbmc+e3swLCAyOTl9LCB7MTMwMCwgMjM2fX08L3N0cmluZz4KKwkJCQkJCQkJPGtl
eT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1
NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1v
ZHVsZTwva2V5PgorCQkJCQkJCTxzdHJpbmc+UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+
CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMzZwdDwvc3Ry
aW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248
L2tleT4KKwkJCQkJPHN0cmluZz41MzVwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJy
YXk+CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+QnVpbGQgUmVzdWx0czwvc3RyaW5n
PgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+
UEJYQnVpbGRSZXN1bHRzTW9kdWxlPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0
dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTx0cnVlLz4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRz
PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIwMDBCRkIwMzc8
L3N0cmluZz4KKwkJCQk8c3RyaW5nPkZCMzlENzYwMTIwMTBFM0QwMDA4OEU2OTwvc3RyaW5nPgor
CQkJCTxzdHJpbmc+MUNEMDUyOEYwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJPHN0cmlu
Zz5YQ01haW5CdWlsZFJlc3VsdHNNb2R1bGVHVUlEPC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJ
PGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFy
LmNvbmZpZy5idWlsZFYzPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9r
ZXk+CisJCQk8c3RyaW5nPjQ4NiAzMDA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9r
ZXk+CisJCQk8c3RyaW5nPjE0MCAyNzggMTMwMCA1NzYgMCAwIDE0NDAgODc4IDwvc3RyaW5nPgor
CQkJPGtleT5XaW5kb3dUb29sR1VJRDwva2V5PgorCQkJPHN0cmluZz5GQkM3NkI1OTExRjYyNjIw
MDBCRkIwMzc8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJ
PGZhbHNlLz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5Pgor
CQkJPHN0cmluZz53aW5kb3dUb29sLmRlYnVnZ2VyPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwv
a2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJ
PGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwv
a2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkRlYnVnZ2VyPC9rZXk+CisJCQkJCQkJ
CTxkaWN0PgorCQkJCQkJCQkJPGtleT5Ib3Jpem9udGFsU3BsaXRWaWV3PC9rZXk+CisJCQkJCQkJ
CQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5Pl9jb2xsYXBzaW5nRnJhbWVEaW1lbnNpb248L2tleT4K
KwkJCQkJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CisJCQkJCQkJCQkJPGtleT5faW5kZXhPZkNvbGxh
cHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJCQkJCQkJ
CTxrZXk+X3BlcmNlbnRhZ2VPZkNvbGxhcHNlZFZpZXc8L2tleT4KKwkJCQkJCQkJCQk8cmVhbD4w
LjA8L3JlYWw+CisJCQkJCQkJCQkJPGtleT5pc0NvbGxhcHNlZDwva2V5PgorCQkJCQkJCQkJCTxz
dHJpbmc+eWVzPC9zdHJpbmc+CisJCQkJCQkJCQkJPGtleT5zaXplczwva2V5PgorCQkJCQkJCQkJ
CTxhcnJheT4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7MzE3LCAxNjR9fTwvc3RyaW5n
PgorCQkJCQkJCQkJCQk8c3RyaW5nPnt7MzE3LCAwfSwgezM3NywgMTY0fX08L3N0cmluZz4KKwkJ
CQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQkJPGtleT5WZXJ0aWNh
bFNwbGl0Vmlldzwva2V5PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5fY29sbGFw
c2luZ0ZyYW1lRGltZW5zaW9uPC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJ
CQkJCQkJCTxrZXk+X2luZGV4T2ZDb2xsYXBzZWRWaWV3PC9rZXk+CisJCQkJCQkJCQkJPGludGVn
ZXI+MDwvaW50ZWdlcj4KKwkJCQkJCQkJCQk8a2V5Pl9wZXJjZW50YWdlT2ZDb2xsYXBzZWRWaWV3
PC9rZXk+CisJCQkJCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgorCQkJCQkJCQkJCTxrZXk+aXNDb2xs
YXBzZWQ8L2tleT4KKwkJCQkJCQkJCQk8c3RyaW5nPnllczwvc3RyaW5nPgorCQkJCQkJCQkJCTxr
ZXk+c2l6ZXM8L2tleT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJCTxzdHJpbmc+e3sw
LCAwfSwgezY5NCwgMTY0fX08L3N0cmluZz4KKwkJCQkJCQkJCQkJPHN0cmluZz57ezAsIDE2NH0s
IHs2OTQsIDIxNn19PC9zdHJpbmc+CisJCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvZGlj
dD4KKwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PkxhdW5jaGVyQ29uZmlnVmVyc2lvbjwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPjg8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0
TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDMTYyOTg0MDY0QzEwRDQwMEI5NUE3
Mjwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJ
CQkJCQk8c3RyaW5nPkRlYnVnIC0gR0xVVEV4YW1wbGVzIChVbmRlcndhdGVyKTwvc3RyaW5nPgor
CQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5Pgor
CQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkRlYnVnQ29uc29sZURyYXdlclNpemU8L2tleT4K
KwkJCQkJCQkJPHN0cmluZz57MTAwLCAxMjB9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+RGVidWdD
b25zb2xlVmlzaWJsZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwkJCQkJ
CQkJPGtleT5EZWJ1Z0NvbnNvbGVXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7
MjAwLCAyMDB9LCB7NTAwLCAzMDB9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkRlYnVnU1RESU9X
aW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MjAwLCAyMDB9LCB7NTAwLCAzMDB9
fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3sw
LCAwfSwgezY5NCwgMzgwfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMyMSAyMzggNjk0IDQyMiAwIDAgMTQ0MCA4NzggPC9z
dHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJ
PHN0cmluZz5QQlhEZWJ1Z1Nlc3Npb25Nb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3Bv
cnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4K
KwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJpbmc+
MTAwJTwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8L2tl
eT4KKwkJCTxzdHJpbmc+RGVidWdnZXI8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8
L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlBCWERlYnVnU2Vzc2lvbk1vZHVsZTwvc3Ry
aW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8
aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5UYWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxh
cnJheT4KKwkJCQk8c3RyaW5nPjFDRDEwQTk5MDY5RUY4QkEwMEIwNjcyMDwvc3RyaW5nPgorCQkJ
CTxzdHJpbmc+MUMwQUQyQUIwNjlGMUU5QjAwRkFCQ0U2PC9zdHJpbmc+CisJCQkJPHN0cmluZz4x
QzE2Mjk4NDA2NEMxMEQ0MDBCOTVBNzI8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDMEFEMkFDMDY5
RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZp
Z3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNvZGUudG9vbGJhci5jb25maWcuZGVidWdWMzwv
c3RyaW5nPgorCQkJPGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzIxIDIzOCA2
OTQgNDIyIDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tl
eT4KKwkJCTxzdHJpbmc+MUNEMTBBOTkwNjlFRjhCQTAwQjA2NzIwPC9zdHJpbmc+CisJCQk8a2V5
PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTwv
ZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PkZpcnN0VGltZVdpbmRvd0Rpc3BsYXllZDwva2V5Pgor
CQkJPGZhbHNlLz4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dU
b29sLmZpbmQ8L3N0cmluZz4KKwkJCTxrZXk+SXNWZXJ0aWNhbDwva2V5PgorCQkJPHRydWUvPgor
CQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5E
b2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+RG9jazwv
a2V5PgorCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQk8a2V5PkNvbnRl
bnRDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBC
WFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz4xQ0RENTI4QzA2MjIy
MDcyMDAxMzQ2NzU8L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJl
bDwva2V5PgorCQkJCQkJCQkJCTxzdHJpbmc+U2hhZGVyTGFuZy5jcHA8L3N0cmluZz4KKwkJCQkJ
CQkJCQk8a2V5PlN0YXR1c0JhclZpc2liaWxpdHk8L2tleT4KKwkJCQkJCQkJCQk8dHJ1ZS8+CisJ
CQkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5
PgorCQkJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQkJ
CTxzdHJpbmc+e3swLCAwfSwgezc4MSwgMjEyfX08L3N0cmluZz4KKwkJCQkJCQkJCQk8a2V5PlJ1
YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAg
MCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+
TW9kdWxlPC9rZXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE5hdmlnYXRvckdyb3VwPC9zdHJpbmc+
CisJCQkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+NzgxcHQ8
L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJPGtleT5Q
cm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5nPgorCQkJCQkJPC9k
aWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJ
CQk8dHJ1ZS8+CisJCQkJCQkJPGtleT5Db250ZW50Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJ
CTxkaWN0PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJ
CTxzdHJpbmc+MUNEMDUyOEUwNjIzNzA3MjAwMTY2Njc1PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+
UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+UHJvamVjdCBGaW5k
PC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0
aW9uPC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJ
CQkJPHN0cmluZz57ezAsIDIxN30sIHs3ODEsIDIxMn19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+
UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAg
MCAwIDE5MjAgMTE3OCA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1
bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWFByb2plY3RGaW5kTW9kdWxlPC9zdHJpbmc+CisJ
CQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMTJwdDwvc3RyaW5n
PgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJPHN0cmluZz40MjlwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+
CisJCQk8a2V5Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+UHJvamVjdCBGaW5kPC9zdHJpbmc+CisJ
CQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhQ
cm9qZWN0RmluZE1vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFy
SXNWaXNpYmxlPC9rZXk+CisJCQk8dHJ1ZS8+CisJCQk8a2V5PlRhYmxlT2ZDb250ZW50czwva2V5
PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNFMTAwMENGQ0VFPC9zdHJp
bmc+CisJCQkJPHN0cmluZz5GQjNDNTBERDExRjc5RDI3MDA4MUY1QkE8L3N0cmluZz4KKwkJCQk8
c3RyaW5nPkZCM0M1MERFMTFGNzlEMjcwMDgxRjVCQTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNE
RDUyOEMwNjIyMjA3MjAwMTM0Njc1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQ0QwNTI4RTA2MjM3
MDcyMDAxNjY2NzU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwv
a2V5PgorCQkJPHN0cmluZz43NzUgNjI5IDc4MSA0NzAgMCAwIDE5MjAgMTE3OCA8L3N0cmluZz4K
KwkJCTxrZXk+V2luZG93VG9vbEdVSUQ8L2tleT4KKwkJCTxzdHJpbmc+MUM1MzBENTcwNjlGMUNF
MTAwMENGQ0VFPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1Rvb2xJc1Zpc2libGU8L2tleT4KKwkJ
CTxmYWxzZS8+CisJCTwvZGljdD4KKwkJPGRpY3Q+CisJCQk8a2V5PklkZW50aWZpZXI8L2tleT4K
KwkJCTxzdHJpbmc+TUVOVVNFUEFSQVRPUjwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0Pgor
CQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdnZXJD
b25zb2xlPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2Vy
PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PjFDNzhFQUFDMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2pl
Y3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRlYnVnZ2VyIENvbnNvbGU8L3N0
cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5HZW9tZXRyeUNvbmZpZ3VyYXRpb248
L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5GcmFtZTwva2V5PgorCQkJCQkJCQk8
c3RyaW5nPnt7MCwgMH0sIHs2NTAsIDI1MH19PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UnViYmVy
V2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz41MTYgNjMyIDY1MCAyNTAgMCAwIDE2
ODAgMTAyNyA8L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tl
eT4KKwkJCQkJCQk8c3RyaW5nPlBCWERlYnVnQ0xJTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtl
eT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4yMDlwdDwvc3RyaW5nPgorCQkJCQkJ
PC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
PHN0cmluZz4yMDlwdDwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5
Pk5hbWU8L2tleT4KKwkJCTxzdHJpbmc+RGVidWdnZXIgQ29uc29sZTwvc3RyaW5nPgorCQkJPGtl
eT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5PgorCQkJCTxzdHJpbmc+UEJYRGVidWdD
TElNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJs
ZTwva2V5PgorCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRz
PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQzc4RUFBRDA2NUQ0OTI2MDBCMDcwOTU8
L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDNzhFQUFFMDY1RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgor
CQkJCTxzdHJpbmc+MUM3OEVBQUMwNjVENDkyNjAwQjA3MDk1PC9zdHJpbmc+CisJCQk8L2FycmF5
PgorCQkJPGtleT5Ub29sYmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50
b29sYmFyLmNvbmZpZy5jb25zb2xlVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9r
ZXk+CisJCQk8c3RyaW5nPjY1MCA0MSA2NTAgMjUwIDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJ
CQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDNzhFQUFEMDY1RDQ5MjYw
MEIwNzA5NTwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8
aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlm
aWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuc25hcHNob3RzPC9zdHJpbmc+CisJCQk8
a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8
L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tl
eT4KKwkJCQkJCQk8c3RyaW5nPlhDU25hcHNob3RNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwv
ZGljdD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxz
dHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5h
bWU8L2tleT4KKwkJCTxzdHJpbmc+U25hcHNob3RzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VD
bGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5YQ1NuYXBzaG90TW9kdWxlPC9z
dHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJ
CTxzdHJpbmc+WWVzPC9zdHJpbmc+CisJCQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+
CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xiYXIuY29uZmlnLnNuYXBzaG90czwvc3RyaW5nPgorCQkJ
PGtleT5XaW5kb3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+MzE1IDgyNCAzMDAgNTUwIDAgMCAx
NDQwIDg3OCA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93VG9vbElzVmlzaWJsZTwva2V5PgorCQkJ
PHN0cmluZz5ZZXM8L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRp
Zmllcjwva2V5PgorCQkJPHN0cmluZz53aW5kb3dUb29sLnNjbTwvc3RyaW5nPgorCQkJPGtleT5M
YXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+
CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3Vy
YXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxl
R1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDNzhFQUIyMDY1RDQ5MjYwMEIwNzA5NTwvc3Ry
aW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8
c3RyaW5nPiZsdDtObyBFZGl0b3ImZ3Q7PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+UEJYU3BsaXRN
b2R1bGVJbk5hdmlnYXRvcktleTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+
U3BsaXQwPC9rZXk+CisJCQkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJCQk8a2V5PlBCWFByb2plY3RN
b2R1bGVHVUlEPC9rZXk+CisJCQkJCQkJCQkJPHN0cmluZz4xQzc4RUFCMzA2NUQ0OTI2MDBCMDcw
OTU8L3N0cmluZz4KKwkJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJCTxrZXk+U3BsaXRDb3VudDwv
a2V5PgorCQkJCQkJCQkJPHN0cmluZz4xPC9zdHJpbmc+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJ
CQkJPGtleT5TdGF0dXNCYXJWaXNpYmlsaXR5PC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjE8L2lu
dGVnZXI+CisJCQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9u
PC9rZXk+CisJCQkJCQkJPGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJ
PHN0cmluZz57ezAsIDB9LCB7NDUyLCAwfX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5SdWJiZXJX
aW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjc0MyAzNzkgNDUyIDMwOCAwIDAgMTI4
MCAxMDAyIDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwva2V5
PgorCQkJCQkJCTxzdHJpbmc+UEJYTmF2aWdhdG9yR3JvdXA8L3N0cmluZz4KKwkJCQkJCQk8a2V5
PlByb3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjBwdDwvc3RyaW5nPgorCQkJCQkJPC9k
aWN0PgorCQkJCQkJPGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJ
CQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248
L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDRDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgor
CQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8c3RyaW5n
PlNDTTwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmln
dXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkNvbnNvbGVGcmFtZTwv
a2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMjU5fSwgezQ1MiwgMH19PC9zdHJpbmc+CisJCQkJ
CQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDd9LCB7NDUyLCAyNTl9
fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJCQkJCQkJ
CTxzdHJpbmc+NzQzIDM3OSA0NTIgMzA4IDAgMCAxMjgwIDEwMDIgPC9zdHJpbmc+CisJCQkJCQkJ
CTxrZXk+VGFibGVDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJ
CTxzdHJpbmc+U3RhdHVzPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD4zMDwvcmVhbD4KKwkJCQkJ
CQkJCTxzdHJpbmc+RmlsZU5hbWU8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE5OTwvcmVhbD4K
KwkJCQkJCQkJCTxzdHJpbmc+UGF0aDwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+MTk3LjA5NTAw
MTIyMDcwMzE8L3JlYWw+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+VGFibGVGcmFt
ZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0sIHs0NTIsIDI1MH19PC9zdHJpbmc+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhDVlNNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJ
CQk8c3RyaW5nPjI2MnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJ
CQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjI2NnB0PC9zdHJpbmc+CisJ
CQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5T
Q008L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJ
CQk8c3RyaW5nPlBCWENWU01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3Rh
dHVzYmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5U
YWJsZU9mQ29udGVudHM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPjFDNzhFQUI0MDY1
RDQ5MjYwMEIwNzA5NTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUM3OEVBQjUwNjVENDkyNjAwQjA3
MDk1PC9zdHJpbmc+CisJCQkJPHN0cmluZz4xQzc4RUFCMjA2NUQ0OTI2MDBCMDcwOTU8L3N0cmlu
Zz4KKwkJCQk8c3RyaW5nPjFDRDA1MjkyMDYyMzcwNzIwMDE2NjY3NTwvc3RyaW5nPgorCQkJPC9h
cnJheT4KKwkJCTxrZXk+VG9vbGJhckNvbmZpZ3VyYXRpb248L2tleT4KKwkJCTxzdHJpbmc+eGNv
ZGUudG9vbGJhci5jb25maWcuc2NtPC9zdHJpbmc+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5
PgorCQkJPHN0cmluZz43NDMgMzc5IDQ1MiAzMDggMCAwIDEyODAgMTAwMiA8L3N0cmluZz4KKwkJ
PC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5PgorCQkJPHN0cmluZz53
aW5kb3dUb29sLmJyZWFrcG9pbnRzPC9zdHJpbmc+CisJCQk8a2V5PklzVmVydGljYWw8L2tleT4K
KwkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5
PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJ
PGRpY3Q+CisJCQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4x
PC9pbnRlZ2VyPgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJ
CQk8ZGljdD4KKwkJCQkJCQkJPGtleT5QQlhCb3R0b21TbWFydEdyb3VwR0lEczwva2V5PgorCQkJ
CQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEwMjwv
c3RyaW5nPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVH
VUlEPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJp
bmc+CisJCQkJCQkJCTxrZXk+UEJYUHJvamVjdE1vZHVsZUxhYmVsPC9rZXk+CisJCQkJCQkJCTxz
dHJpbmc+RmlsZXM8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0U3RydWN0dXJlUHJv
dmlkZWQ8L2tleT4KKwkJCQkJCQkJPHN0cmluZz5ubzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBC
WFNtYXJ0R3JvdXBUcmVlTW9kdWxlQ29sdW1uRGF0YTwva2V5PgorCQkJCQkJCQk8ZGljdD4KKwkJ
CQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVDb2x1bW5XaWR0aHNLZXk8L2tleT4K
KwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8cmVhbD4xNjg8L3JlYWw+CisJCQkJCQkJCQk8
L2FycmF5PgorCQkJCQkJCQkJPGtleT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZUNvbHVtbnNLZXlf
djQ8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1bW48
L3N0cmluZz4KKwkJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTwvZGljdD4KKwkJCQkJCQkJPGtl
eT5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZU91dGxpbmVTdGF0ZUtleV92Nzwva2V5PgorCQkJCQkJ
CQk8ZGljdD4KKwkJCQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3Rh
dGVFeHBhbnNpb25LZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8c3RyaW5n
PjFDNzdGQUJDMDQ1MDlDRDAwMDAwMDEwMjwvc3RyaW5nPgorCQkJCQkJCQkJPC9hcnJheT4KKwkJ
CQkJCQkJCTxrZXk+UEJYU21hcnRHcm91cFRyZWVNb2R1bGVPdXRsaW5lU3RhdGVTZWxlY3Rpb25L
ZXk8L2tleT4KKwkJCQkJCQkJCTxhcnJheT4KKwkJCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQkJ
CTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJCQkJPC9hcnJheT4KKwkJCQkJCQkJCTwvYXJy
YXk+CisJCQkJCQkJCQk8a2V5PlBCWFNtYXJ0R3JvdXBUcmVlTW9kdWxlT3V0bGluZVN0YXRlVmlz
aWJsZVJlY3RLZXk8L2tleT4KKwkJCQkJCQkJCTxzdHJpbmc+e3swLCAwfSwgezE2OCwgMzUwfX08
L3N0cmluZz4KKwkJCQkJCQkJPC9kaWN0PgorCQkJCQkJCQk8a2V5PlBCWFRvcFNtYXJ0R3JvdXBH
SURzPC9rZXk+CisJCQkJCQkJCTxhcnJheS8+CisJCQkJCQkJCTxrZXk+WENJbmNsdWRlUGVyc3Bl
Y3RpdmVzU3dpdGNoPC9rZXk+CisJCQkJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCQkJCQkJ
PC9kaWN0PgorCQkJCQkJCTxrZXk+R2VvbWV0cnlDb25maWd1cmF0aW9uPC9rZXk+CisJCQkJCQkJ
PGRpY3Q+CisJCQkJCQkJCTxrZXk+RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9
LCB7MTg1LCAzNjh9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5Pkdyb3VwVHJlZVRhYmxlQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPk1haW5Db2x1
bW48L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjE2ODwvcmVhbD4KKwkJCQkJCQkJPC9hcnJheT4K
KwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjMx
NSA0MjQgNzQ0IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQkJCQkJPC9kaWN0PgorCQkJ
CQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1v
ZHVsZTwvc3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJp
bmc+MTg1cHQ8L3N0cmluZz4KKwkJCQkJCTwvZGljdD4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxr
ZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4KKwkJCQkJCQkJPGtl
eT5QQlhQcm9qZWN0TW9kdWxlR1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDQTFBRUQ3MDYz
OThFQkQwMDU4OTE0Nzwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJl
bDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkRldGFpbDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJCQkJCQkJCTxzdHJpbmc+e3sxOTAsIDB9LCB7NTU0
LCAzNjh9fTwvc3RyaW5nPgorCQkJCQkJCQk8a2V5PlJ1YmJlcldpbmRvd0ZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+MzE1IDQyNCA3NDQgNDA5IDAgMCAxNDQwIDg3OCA8L3N0cmluZz4KKwkJ
CQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlhD
RGV0YWlsTW9kdWxlPC9zdHJpbmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJ
CQkJPHN0cmluZz41NTRwdDwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5Pgor
CQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4zNjhwdDwvc3RyaW5nPgor
CQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk1ham9yVmVyc2lvbjwva2V5PgorCQkJ
PGludGVnZXI+MzwvaW50ZWdlcj4KKwkJCTxrZXk+TWlub3JWZXJzaW9uPC9rZXk+CisJCQk8aW50
ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPkJyZWFrcG9p
bnRzPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJ
CQkJPHN0cmluZz5QQlhTbWFydEdyb3VwVHJlZU1vZHVsZTwvc3RyaW5nPgorCQkJCTxzdHJpbmc+
WENEZXRhaWxNb2R1bGU8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2Jhcklz
VmlzaWJsZTwva2V5PgorCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNv
bnRlbnRzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz4xQ0REQjY2ODA3Rjk4RDk4MDBC
QjU4MTc8L3N0cmluZz4KKwkJCQk8c3RyaW5nPjFDRERCNjY5MDdGOThEOTgwMEJCNTgxNzwvc3Ry
aW5nPgorCQkJCTxzdHJpbmc+MUNFMEIxRkUwNjQ3MURFRDAwOTdBNUY0PC9zdHJpbmc+CisJCQkJ
PHN0cmluZz4xQ0ExQUVENzA2Mzk4RUJEMDA1ODkxNDc8L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJ
CQk8a2V5PlRvb2xiYXJDb25maWd1cmF0aW9uPC9rZXk+CisJCQk8c3RyaW5nPnhjb2RlLnRvb2xi
YXIuY29uZmlnLmJyZWFrcG9pbnRzVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9r
ZXk+CisJCQk8c3RyaW5nPjMxNSA0MjQgNzQ0IDQwOSAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJ
CQk8a2V5PldpbmRvd1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDRERCNjY4MDdGOThEOTgw
MEJCNTgxNzwvc3RyaW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8
aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlm
aWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuZGVidWdBbmltYXRvcjwvc3RyaW5nPgor
CQkJPGtleT5MYXlvdXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5E
b2NrPC9rZXk+CisJCQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxl
PC9rZXk+CisJCQkJCQkJPHN0cmluZz5QQlhOYXZpZ2F0b3JHcm91cDwvc3RyaW5nPgorCQkJCQkJ
CTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAwJTwvc3RyaW5nPgorCQkJ
CQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3BvcnRpb248L2tleT4KKwkJ
CQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxr
ZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5EZWJ1ZyBWaXN1YWxpemVyPC9zdHJpbmc+CisJCQk8
a2V5PlNlcnZpY2VDbGFzc2VzPC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhOYXZp
Z2F0b3JHcm91cDwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVzYmFySXNWaXNp
YmxlPC9rZXk+CisJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgorCQkJPGtleT5Ub29sYmFyQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5kZWJ1Z0FuaW1h
dG9yVjM8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5nPjEw
MCAxMDAgNzAwIDUwMCAwIDAgMTI4MCAxMDAyIDwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0
PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuYm9va21h
cmtzPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxkaWN0
PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJCQkJ
CQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJCQkJCQk8c3RyaW5nPlBCWEJvb2ttYXJrc01vZHVsZTwv
c3RyaW5nPgorCQkJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQkJCTxzdHJpbmc+MTAw
JTwvc3RyaW5nPgorCQkJCQkJPC9kaWN0PgorCQkJCQk8L2FycmF5PgorCQkJCQk8a2V5PlByb3Bv
cnRpb248L2tleT4KKwkJCQkJPHN0cmluZz4xMDAlPC9zdHJpbmc+CisJCQkJPC9kaWN0PgorCQkJ
PC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJPHN0cmluZz5Cb29rbWFya3M8L3N0cmlu
Zz4KKwkJCTxrZXk+U2VydmljZUNsYXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5n
PlBCWEJvb2ttYXJrc01vZHVsZTwvc3RyaW5nPgorCQkJPC9hcnJheT4KKwkJCTxrZXk+U3RhdHVz
YmFySXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5XaW5k
b3dTdHJpbmc8L2tleT4KKwkJCTxzdHJpbmc+NTM4IDQyIDQwMSAxODcgMCAwIDEyODAgMTAwMiA8
L3N0cmluZz4KKwkJPC9kaWN0PgorCQk8ZGljdD4KKwkJCTxrZXk+SWRlbnRpZmllcjwva2V5Pgor
CQkJPHN0cmluZz53aW5kb3dUb29sLnByb2plY3RGb3JtYXRDb25mbGljdHM8L3N0cmluZz4KKwkJ
CTxrZXk+TGF5b3V0PC9rZXk+CisJCQk8YXJyYXk+CisJCQkJPGRpY3Q+CisJCQkJCTxrZXk+RG9j
azwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8ZGljdD4KKwkJCQkJCQk8a2V5Pk1vZHVsZTwv
a2V5PgorCQkJCQkJCTxzdHJpbmc+WENQcm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJp
bmc+CisJCQkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCQkJPHN0cmluZz4xMDAlPC9z
dHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwvYXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlv
bjwva2V5PgorCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQk8L2RpY3Q+CisJCQk8L2Fy
cmF5PgorCQkJPGtleT5OYW1lPC9rZXk+CisJCQk8c3RyaW5nPlByb2plY3QgRm9ybWF0IENvbmZs
aWN0czwvc3RyaW5nPgorCQkJPGtleT5TZXJ2aWNlQ2xhc3Nlczwva2V5PgorCQkJPGFycmF5Pgor
CQkJCTxzdHJpbmc+WENQcm9qZWN0Rm9ybWF0Q29uZmxpY3RzTW9kdWxlPC9zdHJpbmc+CisJCQk8
L2FycmF5PgorCQkJPGtleT5TdGF0dXNiYXJJc1Zpc2libGU8L2tleT4KKwkJCTxpbnRlZ2VyPjA8
L2ludGVnZXI+CisJCQk8a2V5PldpbmRvd0NvbnRlbnRNaW5TaXplPC9rZXk+CisJCQk8c3RyaW5n
PjQ1MCAzMDA8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3RyaW5n
PjUwIDg1MCA0NzIgMzA3IDAgMCAxNDQwIDg3Nzwvc3RyaW5nPgorCQk8L2RpY3Q+CisJCTxkaWN0
PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJCQk8c3RyaW5nPndpbmRvd1Rvb2wuY2xhc3NC
cm93c2VyPC9zdHJpbmc+CisJCQk8a2V5PkxheW91dDwva2V5PgorCQkJPGFycmF5PgorCQkJCTxk
aWN0PgorCQkJCQk8a2V5PkRvY2s8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPGRpY3Q+CisJ
CQkJCQkJPGtleT5CZWNvbWVBY3RpdmU8L2tleT4KKwkJCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2Vy
PgorCQkJCQkJCTxrZXk+Q29udGVudENvbmZpZ3VyYXRpb248L2tleT4KKwkJCQkJCQk8ZGljdD4K
KwkJCQkJCQkJPGtleT5PcHRpb25zU2V0TmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPkhpZXJh
cmNoeSwgYWxsIGNsYXNzZXM8L3N0cmluZz4KKwkJCQkJCQkJPGtleT5QQlhQcm9qZWN0TW9kdWxl
R1VJRDwva2V5PgorCQkJCQkJCQk8c3RyaW5nPjFDQTY0NTZFMDYzQjQ1QjQwMDEzNzlEODwvc3Ry
aW5nPgorCQkJCQkJCQk8a2V5PlBCWFByb2plY3RNb2R1bGVMYWJlbDwva2V5PgorCQkJCQkJCQk8
c3RyaW5nPkNsYXNzIEJyb3dzZXIgLSBOU09iamVjdDwvc3RyaW5nPgorCQkJCQkJCTwvZGljdD4K
KwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0Pgor
CQkJCQkJCQk8a2V5PkNsYXNzZXNGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwgMH0s
IHszNzQsIDk2fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5DbGFzc2VzVHJlZVRhYmxlQ29uZmln
dXJhdGlvbjwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBCWENsYXNz
TmFtZUNvbHVtbklkZW50aWZpZXI8L3N0cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIwODwvcmVhbD4K
KwkJCQkJCQkJCTxzdHJpbmc+UEJYQ2xhc3NCb29rQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgor
CQkJCQkJCQkJPHJlYWw+MjI8L3JlYWw+CisJCQkJCQkJCTwvYXJyYXk+CisJCQkJCQkJCTxrZXk+
RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57ezAsIDB9LCB7NjMwLCAzMzF9fTwvc3RyaW5n
PgorCQkJCQkJCQk8a2V5Pk1lbWJlcnNGcmFtZTwva2V5PgorCQkJCQkJCQk8c3RyaW5nPnt7MCwg
MTA1fSwgezM3NCwgMzk1fX08L3N0cmluZz4KKwkJCQkJCQkJPGtleT5NZW1iZXJzVHJlZVRhYmxl
Q29uZmlndXJhdGlvbjwva2V5PgorCQkJCQkJCQk8YXJyYXk+CisJCQkJCQkJCQk8c3RyaW5nPlBC
WE1lbWJlclR5cGVJY29uQ29sdW1uSWRlbnRpZmllcjwvc3RyaW5nPgorCQkJCQkJCQkJPHJlYWw+
MjI8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBCWE1lbWJlck5hbWVDb2x1bW5JZGVudGlmaWVy
PC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD4yMTY8L3JlYWw+CisJCQkJCQkJCQk8c3RyaW5nPlBC
WE1lbWJlclR5cGVDb2x1bW5JZGVudGlmaWVyPC9zdHJpbmc+CisJCQkJCQkJCQk8cmVhbD45Nzwv
cmVhbD4KKwkJCQkJCQkJCTxzdHJpbmc+UEJYTWVtYmVyQm9va0NvbHVtbklkZW50aWZpZXI8L3N0
cmluZz4KKwkJCQkJCQkJCTxyZWFsPjIyPC9yZWFsPgorCQkJCQkJCQk8L2FycmF5PgorCQkJCQkJ
CQk8a2V5PlBCWE1vZHVsZVdpbmRvd1N0YXR1c0JhckhpZGRlbjI8L2tleT4KKwkJCQkJCQkJPGlu
dGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQkJPGtleT5SdWJiZXJXaW5kb3dGcmFtZTwva2V5Pgor
CQkJCQkJCQk8c3RyaW5nPjM4NSAxNzkgNjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJ
CQkJCQkJPC9kaWN0PgorCQkJCQkJCTxrZXk+TW9kdWxlPC9rZXk+CisJCQkJCQkJPHN0cmluZz5Q
QlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlByb3BvcnRpb248L2tl
eT4KKwkJCQkJCQk8c3RyaW5nPjMzMnB0PC9zdHJpbmc+CisJCQkJCQk8L2RpY3Q+CisJCQkJCTwv
YXJyYXk+CisJCQkJCTxrZXk+UHJvcG9ydGlvbjwva2V5PgorCQkJCQk8c3RyaW5nPjMzMnB0PC9z
dHJpbmc+CisJCQkJPC9kaWN0PgorCQkJPC9hcnJheT4KKwkJCTxrZXk+TmFtZTwva2V5PgorCQkJ
PHN0cmluZz5DbGFzcyBCcm93c2VyPC9zdHJpbmc+CisJCQk8a2V5PlNlcnZpY2VDbGFzc2VzPC9r
ZXk+CisJCQk8YXJyYXk+CisJCQkJPHN0cmluZz5QQlhDbGFzc0Jyb3dzZXJNb2R1bGU8L3N0cmlu
Zz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PlN0YXR1c2JhcklzVmlzaWJsZTwva2V5PgorCQkJPGlu
dGVnZXI+MDwvaW50ZWdlcj4KKwkJCTxrZXk+VGFibGVPZkNvbnRlbnRzPC9rZXk+CisJCQk8YXJy
YXk+CisJCQkJPHN0cmluZz4xQzBBRDJBRjA2OUYxRTlCMDBGQUJDRTY8L3N0cmluZz4KKwkJCQk8
c3RyaW5nPjFDMEFEMkIwMDY5RjFFOUIwMEZBQkNFNjwvc3RyaW5nPgorCQkJCTxzdHJpbmc+MUNB
NjQ1NkUwNjNCNDVCNDAwMTM3OUQ4PC9zdHJpbmc+CisJCQk8L2FycmF5PgorCQkJPGtleT5Ub29s
YmFyQ29uZmlndXJhdGlvbjwva2V5PgorCQkJPHN0cmluZz54Y29kZS50b29sYmFyLmNvbmZpZy5j
bGFzc2Jyb3dzZXI8L3N0cmluZz4KKwkJCTxrZXk+V2luZG93U3RyaW5nPC9rZXk+CisJCQk8c3Ry
aW5nPjM4NSAxNzkgNjMwIDM1MiAwIDAgMTQ0MCA4NzggPC9zdHJpbmc+CisJCQk8a2V5PldpbmRv
d1Rvb2xHVUlEPC9rZXk+CisJCQk8c3RyaW5nPjFDMEFEMkFGMDY5RjFFOUIwMEZBQkNFNjwvc3Ry
aW5nPgorCQkJPGtleT5XaW5kb3dUb29sSXNWaXNpYmxlPC9rZXk+CisJCQk8aW50ZWdlcj4wPC9p
bnRlZ2VyPgorCQk8L2RpY3Q+CisJCTxkaWN0PgorCQkJPGtleT5JZGVudGlmaWVyPC9rZXk+CisJ
CQk8c3RyaW5nPndpbmRvd1Rvb2wucmVmYWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+SW5jbHVk
ZUluVG9vbHNNZW51PC9rZXk+CisJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgorCQkJPGtleT5MYXlv
dXQ8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5Eb2NrPC9rZXk+CisJ
CQkJCTxhcnJheT4KKwkJCQkJCTxkaWN0PgorCQkJCQkJCTxrZXk+QmVjb21lQWN0aXZlPC9rZXk+
CisJCQkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KKwkJCQkJCQk8a2V5Pkdlb21ldHJ5Q29uZmln
dXJhdGlvbjwva2V5PgorCQkJCQkJCTxkaWN0PgorCQkJCQkJCQk8a2V5PkZyYW1lPC9rZXk+CisJ
CQkJCQkJCTxzdHJpbmc+ezAsIDB9LCB7NTAwLCAzMzV9PC9zdHJpbmc+CisJCQkJCQkJCTxrZXk+
UnViYmVyV2luZG93RnJhbWU8L2tleT4KKwkJCQkJCQkJPHN0cmluZz57MCwgMH0sIHs1MDAsIDMz
NX08L3N0cmluZz4KKwkJCQkJCQk8L2RpY3Q+CisJCQkJCQkJPGtleT5Nb2R1bGU8L2tleT4KKwkJ
CQkJCQk8c3RyaW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8L3N0cmluZz4KKwkJCQkJCQk8a2V5PlBy
b3BvcnRpb248L2tleT4KKwkJCQkJCQk8c3RyaW5nPjEwMCU8L3N0cmluZz4KKwkJCQkJCTwvZGlj
dD4KKwkJCQkJPC9hcnJheT4KKwkJCQkJPGtleT5Qcm9wb3J0aW9uPC9rZXk+CisJCQkJCTxzdHJp
bmc+MTAwJTwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCTwvYXJyYXk+CisJCQk8a2V5Pk5hbWU8
L2tleT4KKwkJCTxzdHJpbmc+UmVmYWN0b3Jpbmc8L3N0cmluZz4KKwkJCTxrZXk+U2VydmljZUNs
YXNzZXM8L2tleT4KKwkJCTxhcnJheT4KKwkJCQk8c3RyaW5nPlhDUmVmYWN0b3JpbmdNb2R1bGU8
L3N0cmluZz4KKwkJCTwvYXJyYXk+CisJCQk8a2V5PldpbmRvd1N0cmluZzwva2V5PgorCQkJPHN0
cmluZz4yMDAgMjAwIDUwMCAzNTYgMCAwIDE5MjAgMTIwMCA8L3N0cmluZz4KKwkJPC9kaWN0Pgor
CTwvYXJyYXk+Cis8L2RpY3Q+Cis8L3BsaXN0PgpJbmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xl
Lnhjb2RlcHJvai9wYXVscy5wYnh1c2VyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9idWlsZF9h
bmdsZS54Y29kZXByb2ovcGF1bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9i
dWlsZF9hbmdsZS54Y29kZXByb2ovcGF1bHMucGJ4dXNlcgkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMjIgQEAKKy8vICEkKlVURjgqJCEKK3sKKwkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyog
QWxsICovID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5
MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTQ4
Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHsKKwkJdWlDdHh0
ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAsIDB9LCB7NTQ0LCA5MTM5fX0iOwor
CQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA5
ODJ9IjsKKwkJfTsKKwl9OworCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5n
LmNwcCAqLyA9IHsKKwkJdWlDdHh0ID0geworCQkJc2VwTmF2SW50Qm91bmRzUmVjdCA9ICJ7ezAs
IDB9LCB7OTcxLCA0Nzg0fX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezIzNjMsIDE5fSI7CisJ
CQlzZXBOYXZWaXNSYW5nZSA9ICJ7MTg2MiwgOTI4fSI7CisJCX07CisJfTsKKwk2MEMzOTk4QzlD
RTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsK
KwkJCXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezU3MiwgMTQ2OX19IjsKKwkJCXNl
cE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgMTAyNX0i
OworCQl9OworCX07CisJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29t
bW9uICovID0geworCQlhY3RpdmVFeGVjID0gMDsKKwl9OworCTkzRDYxQ0IwQkNFNTRFMDY5RDcx
RjkyMCAvKiBPdXRwdXRHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNlcE5hdkludEJv
dW5kc1JlY3QgPSAie3swLCAwfSwgezY5MSwgNjUwfX0iOworCQkJc2VwTmF2U2VsUmFuZ2UgPSAi
ezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCAxNDM1fSI7CisJCX07CisJfTsKKwlB
NTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0geworCQl1aUN0
eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs5MjYsIDYzMDc2fX0i
OworCQkJc2VwTmF2U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInsw
LCAxNzQ2fSI7CisJCX07CisJfTsKKwlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdl
bkdMU0wuY3BwICovID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0g
Int7MCwgMH0sIHs5MjYsIDQ4M319IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJ
CQlzZXBOYXZWaXNSYW5nZSA9ICJ7MCwgNjA4fSI7CisJCX07CisJfTsKKwlEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJCXNl
cE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezEyMTYsIDI5NTF9fSI7CisJCQlzZXBOYXZT
ZWxSYW5nZSA9ICJ7MCwgMH0iOworCQkJc2VwTmF2VmlzUmFuZ2UgPSAiezAsIDEzNzV9IjsKKwkJ
fTsKKwl9OworCURBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9
IHsKKwkJYWN0aXZlQnVpbGRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCWFjdGl2ZVRh
cmdldCA9IDE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi87CisJCWNvZGVTZW5zZU1h
bmFnZXIgPSBGQkM3NkFGNzExRjYyMDNDMDBCRkIwMzcgLyogQ29kZSBzZW5zZSAqLzsKKwkJcGVy
VXNlckRpY3Rpb25hcnkgPSB7CisJCQlQQlhDb25maWd1cmF0aW9uLlBCWEZpbGVUYWJsZURhdGFT
b3VyY2UzLlBCWEV4ZWN1dGFibGVzRGF0YVNvdXJjZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRh
U291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICItMSI7CisJCQkJUEJYRmlsZVRhYmxl
RGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFt
ZUlEOworCQkJCVBCWEZpbGVUYWJsZURhdGFTb3VyY2VDb2x1bW5XaWR0aHNLZXkgPSAoCisJCQkJ
CTIyLAorCQkJCQkzMDAsCisJCQkJCTYzNiwKKwkJCQkpOworCQkJCVBCWEZpbGVUYWJsZURhdGFT
b3VyY2VDb2x1bW5zS2V5ID0gKAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfQWN0aXZl
RmxhZ0lELAorCQkJCQlQQlhFeGVjdXRhYmxlc0RhdGFTb3VyY2VfTmFtZUlELAorCQkJCQlQQlhF
eGVjdXRhYmxlc0RhdGFTb3VyY2VfQ29tbWVudHNJRCwKKwkJCQkpOworCQkJfTsKKwkJCVBCWENv
bmZpZ3VyYXRpb24uUEJYRmlsZVRhYmxlRGF0YVNvdXJjZTMuUEJYRmlsZVRhYmxlRGF0YVNvdXJj
ZSA9IHsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktl
eSA9IDE7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhG
aWxlRGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291
cmNlQ29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjMzLAorCQkJCQkyMCwKKwkJ
CQkJNDgsCisJCQkJCTQzLAorCQkJCQk0MywKKwkJCQkJMjAsCisJCQkJKTsKKwkJCQlQQlhGaWxl
VGFibGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmls
ZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJ
CVBCWEZpbGVEYXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJj
ZV9PYmplY3RTaXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29s
dW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQ
QlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhD
b25maWd1cmF0aW9uLlBCWEZpbGVUYWJsZURhdGFTb3VyY2UzLlhDU0NNRGF0YVNvdXJjZSA9IHsK
KwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICIt
MSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxl
RGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNl
Q29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMjAsCisJCQkJCTIwOSwKKwkJCQkJ
MjAsCisJCQkJCTQ4LjE2MjU5NzY1NjI1LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJCTIwLAor
CQkJCSk7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtbnNLZXkgPSAoCisJCQkJCVBC
WEZpbGVEYXRhU291cmNlX1NDTV9Db2x1bW5JRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmls
ZXR5cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJ
CVBCWEZpbGVEYXRhU291cmNlX0J1aWx0X0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJj
ZV9PYmplY3RTaXplX0NvbHVtbklELAorCQkJCQlQQlhGaWxlRGF0YVNvdXJjZV9FcnJvcnNfQ29s
dW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX1dhcm5pbmdzX0NvbHVtbklELAorCQkJCQlQ
QlhGaWxlRGF0YVNvdXJjZV9UYXJnZXRfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhD
b25maWd1cmF0aW9uLlBCWFRhcmdldERhdGFTb3VyY2UuUEJYVGFyZ2V0RGF0YVNvdXJjZSA9IHsK
KwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNlQ29sdW1uU29ydGluZ0RpcmVjdGlvbktleSA9ICIt
MSI7CisJCQkJUEJYRmlsZVRhYmxlRGF0YVNvdXJjZUNvbHVtblNvcnRpbmdLZXkgPSBQQlhGaWxl
RGF0YVNvdXJjZV9GaWxlbmFtZV9Db2x1bW5JRDsKKwkJCQlQQlhGaWxlVGFibGVEYXRhU291cmNl
Q29sdW1uV2lkdGhzS2V5ID0gKAorCQkJCQkyMCwKKwkJCQkJMTkzLAorCQkJCQk2MCwKKwkJCQkJ
MjAsCisJCQkJCTQ4LAorCQkJCQk0MywKKwkJCQkJNDMsCisJCQkJKTsKKwkJCQlQQlhGaWxlVGFi
bGVEYXRhU291cmNlQ29sdW1uc0tleSA9ICgKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZXR5
cGVJRCwKKwkJCQkJUEJYRmlsZURhdGFTb3VyY2VfRmlsZW5hbWVfQ29sdW1uSUQsCisJCQkJCVBC
WFRhcmdldERhdGFTb3VyY2VfUHJpbWFyeUF0dHJpYnV0ZSwKKwkJCQkJUEJYRmlsZURhdGFTb3Vy
Y2VfQnVpbHRfQ29sdW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX09iamVjdFNpemVfQ29s
dW1uSUQsCisJCQkJCVBCWEZpbGVEYXRhU291cmNlX0Vycm9yc19Db2x1bW5JRCwKKwkJCQkJUEJY
RmlsZURhdGFTb3VyY2VfV2FybmluZ3NfQ29sdW1uSUQsCisJCQkJKTsKKwkJCX07CisJCQlQQlhQ
ZXJQcm9qZWN0VGVtcGxhdGVTdGF0ZVNhdmVEYXRlID0gMzAyMDU1MDYwOworCQkJUEJYV29ya3Nw
YWNlU3RhdGVTYXZlRGF0ZSA9IDMwMjA1NTA2MDsKKwkJfTsKKwkJcGVyVXNlclByb2plY3RJdGVt
cyA9IHsKKwkJCUZCMzlENzVEMTIwMTBFM0QwMDA4OEU2OSAvKiBQQlhUZXh0Qm9va21hcmsgKi8g
PSBGQjM5RDc1RDEyMDEwRTNEMDAwODhFNjkgLyogUEJYVGV4dEJvb2ttYXJrICovOworCQkJRkIz
QzUwQjQxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IEZCM0M1MEI0MTFG
Nzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9va21hcmsgKi87CisJCQlGQjNDNTBCNTExRjc5NTdB
MDA4MUY1QkEgLyogUEJYVGV4dEJvb2ttYXJrICovID0gRkIzQzUwQjUxMUY3OTU3QTAwODFGNUJB
IC8qIFBCWFRleHRCb29rbWFyayAqLzsKKwkJfTsKKwkJc291cmNlQ29udHJvbE1hbmFnZXIgPSBG
QkM3NkFGNjExRjYyMDNDMDBCRkIwMzcgLyogU291cmNlIENvbnRyb2wgKi87CisJCXVzZXJCdWls
ZFNldHRpbmdzID0geworCQkJU1lNUk9PVCA9IC4uOworCQl9OworCX07CisJREREM0I3RTNCN0Iz
NUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7CisJCXVpQ3R4dCA9IHsKKwkJ
CXNlcE5hdkludEJvdW5kc1JlY3QgPSAie3swLCAwfSwgezUzMCwgNTE3fX0iOworCQkJc2VwTmF2
U2VsUmFuZ2UgPSAiezAsIDB9IjsKKwkJCXNlcE5hdlZpc1JhbmdlID0gInswLCA0Nzh9IjsKKwkJ
fTsKKwl9OworCUUzQTI5QjZFOUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICov
ID0geworCQl1aUN0eHQgPSB7CisJCQlzZXBOYXZJbnRCb3VuZHNSZWN0ID0gInt7MCwgMH0sIHs1
MzAsIDUxN319IjsKKwkJCXNlcE5hdlNlbFJhbmdlID0gInswLCAwfSI7CisJCQlzZXBOYXZWaXNS
YW5nZSA9ICJ7MCwgNDc4fSI7CisJCX07CisJfTsKKwlGQjM5RDc1RDEyMDEwRTNEMDAwODhFNjkg
LyogUEJYVGV4dEJvb2ttYXJrICovID0geworCQlpc2EgPSBQQlhUZXh0Qm9va21hcms7CisJCWZS
ZWYgPSBFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLzsKKwkJ
bmFtZSA9ICJUcmFuc2xhdG9ySExTTC5oOiAxIjsKKwkJckxlbiA9IDA7CisJCXJMb2MgPSAwOwor
CQlyVHlwZSA9IDA7CisJCXZyTGVuID0gNDc4OworCQl2ckxvYyA9IDA7CisJfTsKKwlGQjNDNTA1
NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCWFjdGl2ZUV4ZWMgPSAwOworCX07
CisJRkIzQzUwQjQxMUY3OTU3QTAwODFGNUJBIC8qIFBCWFRleHRCb29rbWFyayAqLyA9IHsKKwkJ
aXNhID0gUEJYVGV4dEJvb2ttYXJrOworCQlmUmVmID0gQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVE
IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsKKwkJbmFtZSA9ICJDb2RlR2VuR0xTTC5jcHA6IDEiOwor
CQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsKKwkJdnJMZW4gPSA2MDg7CisJ
CXZyTG9jID0gMDsKKwl9OworCUZCM0M1MEI1MTFGNzk1N0EwMDgxRjVCQSAvKiBQQlhUZXh0Qm9v
a21hcmsgKi8gPSB7CisJCWlzYSA9IFBCWFRleHRCb29rbWFyazsKKwkJZlJlZiA9IEUzQTI5QjZF
OUMyMUI2N0MyNUZGMEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovOworCQluYW1lID0gIlRyYW5z
bGF0b3JITFNMLmg6IDEiOworCQlyTGVuID0gMDsKKwkJckxvYyA9IDA7CisJCXJUeXBlID0gMDsK
KwkJdnJMZW4gPSA0Nzg7CisJCXZyTG9jID0gMDsKKwl9OworCUZCQzc2QUY2MTFGNjIwM0MwMEJG
QjAzNyAvKiBTb3VyY2UgQ29udHJvbCAqLyA9IHsKKwkJaXNhID0gUEJYU291cmNlQ29udHJvbE1h
bmFnZXI7CisJCWZhbGxiYWNrSXNhID0gWENTb3VyY2VDb250cm9sTWFuYWdlcjsKKwkJaXNTQ01F
bmFibGVkID0gMDsKKwkJc2NtQ29uZmlndXJhdGlvbiA9IHsKKwkJCXJlcG9zaXRvcnlOYW1lc0Zv
clJvb3RzID0geworCQkJCSIiID0gIiI7CisJCQl9OworCQl9OworCX07CisJRkJDNzZBRjcxMUY2
MjAzQzAwQkZCMDM3IC8qIENvZGUgc2Vuc2UgKi8gPSB7CisJCWlzYSA9IFBCWENvZGVTZW5zZU1h
bmFnZXI7CisJCWluZGV4VGVtcGxhdGVQYXRoID0gIiI7CisJfTsKK30KSW5kZXg6IEFOR0xFL3Ny
Yy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjEzIEBACisvLyAhJCpVVEY4KiQhCit7CisJYXJjaGl2ZVZl
cnNpb24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmplY3RWZXJzaW9uID0gNDU7CisJb2Jq
ZWN0cyA9IHsKKworLyogQmVnaW4gUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJMTU2
M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLyA9IHsKKwkJCWlzYSA9IFBCWEFnZ3JlZ2F0
ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA3N0NFRkI3QjQwRjA1QjBBODA0
RTZCMkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQg
IkFsbCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkJRkIzQzUwNjQxMUY3OTI5NzAwODFGNUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8s
CisJCQkpOworCQkJbmFtZSA9IEFsbDsKKwkJCXByb2R1Y3ROYW1lID0gQWxsOworCQl9OworCQkz
MTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUUgLyogQU5HTEUgU3VwcG9ydCAqLyA9IHsKKwkJCWlzYSA9
IFBCWEFnZ3JlZ2F0ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwQUE1NDgy
NUJGNURGMEEzRkJBOTJCNjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dy
ZWdhdGVUYXJnZXQgIkFOR0xFIFN1cHBvcnQiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJ
RkEwRDcxMjVEQjA2QTdBNzcxNkE1OTEwIC8qIEFjdGlvbiAiZmxleF9nbHNsYW5nIiAqLywKKwkJ
CQkwRDUxM0Y4QjkyMzk0OUMxNTZEQjAyQzUgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLywK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJBTkdMRSBTdXBw
b3J0IjsKKwkJCXByb2R1Y3ROYW1lID0gInRyYW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQl9
OworLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEJ1
aWxkRmlsZSBzZWN0aW9uICovCisJCTA1NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9Owor
CQkwQTIxNjk0OTEwM0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVC
MEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCTBENDA2NDE2NzM5OEE2ODkyODA5
QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3Bw
ICovOyB9OworCQkzMDY1RDI5RTk3RkFDNkUxMjczODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3
QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi87IH07CisJCTMyQjFEQkNENkI4M0YyMTQ2
RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovOyB9OworCQkzNUJF
MUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bw
c3RydWN0LmMgKi87IH07CisJCTNBOTZFOUNBQzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYw
NkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsgfTsKKwkJNDBGQzE4OUI4QTI0NkVERjE0QzJG
REUzIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsg
fTsKKwkJNTBERjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3Mjkz
OEZFODE2MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKKwkJNkY5Rjg3NTAxN0E2OEFCRTVE
MzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5j
cHAgKi87IH07CisJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIw
MzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9OworCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMg
LyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07
CisJCUFCQTVDNjFCMUI3OEI5QThENjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMUY5MUQzRDhDQzQ0NkYzNUIwMEQx
QiAvKiBnbHNsYW5nLmNwcCAqLzsgfTsKKwkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJl
bW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlB
RDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5
bWJvbHMuYyAqLzsgfTsKKwkJQjQ4NTg0MTdFNTQzNjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bv
c2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJF
MjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07CisJCUI4
QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAv
KiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKKwkJQkVCQkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIElu
Zm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAgKi87IH07CisJCUNCN0Yw
RUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLzsg
fTsKKwkJRTFDN0M1REZGMEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2NjZBNUU0
RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLzsgfTsKKwkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RG
IC8qIHRva2Vucy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlGMDk4RjQ2
M0VEQUJDRjA3NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIu
YyAqLzsgfTsKKwkJRjVBRTJBMjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhF
RjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUY2QUJENThG
OENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3lt
Ym9sVGFibGUuY3BwICovOyB9OworCQlGQjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdl
bkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKKwkJRkIz
QzUwNTgxMUY3OTI0QTAwODFGNUJBIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8q
IE91dHB1dEdMU0wuY3BwICovOyB9OworCQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJh
bnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkZCNzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLzsg
fTsKKwkJRkIzQzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxRjkxRDNEOENDNDQ2RjM1QjAw
RDFCIC8qIGdsc2xhbmcuY3BwICovOyB9OworCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyog
Z2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsK
KwkJRkIzQzUwOTIxMUY3OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAv
KiBkZWJ1Zy5jcHAgKi87IH07CisJCUZCM0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2lu
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5
MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovOyB9OworCQlGQjNDNTA5NDEx
Rjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlh
bGl6ZS5jcHAgKi87IH07CisJCUZCM0M1MDk1MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbml0aWFsaXpl
RGxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYw
QzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKKwkJRkIz
QzUwOTYxMUY3OTRDRTAwODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYg
LyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKKwkJRkIzQzUwOTcxMUY3OTRDRTAwODFGNUJBIC8q
IGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKKwkJ
RkIzQzUwOTgxMUY3OTRDRTAwODFGNUJBIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVD
NzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07CisJCUZCM0M1MDlBMTFGNzk0Q0UwMDgx
RjVCQSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9z
aXguY3BwICovOyB9OworCQlGQjNDNTA5QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhF
QjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJCUZCM0M1MDlDMTFG
Nzk0Q0UwMDgxRjVCQSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VI
ZWxwZXIuY3BwICovOyB9OworCQlGQjNDNTA5RDExRjc5NENFMDA4MUY1QkEgLyogUG9vbEFsbG9j
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NEVB
QkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovOyB9OworCQlGQjNDNTA5RTEx
Rjc5NENFMDA4MUY1QkEgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1
YWxpZmllckFsaXZlLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUYxMUY3OTRDRTAwODFGNUJBIC8qIFJl
bW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovOyB9OworCQlG
QjNDNTBBMDExRjc5NENFMDA4MUY1QkEgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAg
LyogU2hhZGVyTGFuZy5jcHAgKi87IH07CisJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBT
eW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9Owor
CQlGQjNDNTBBNDExRjc5NEZGMDA4MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0
b20uYyAqLzsgfTsKKwkJRkIzQzUwQTUxMUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc1NzA3QjM5M0I3RUFCN0RE
OTk5OUNCIC8qIGNwcC5jICovOyB9OworCQlGQjNDNTBBNjExRjc5NEZGMDA4MUY1QkEgLyogY3Bw
c3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCM0M1MEE3
MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAq
LzsgfTsKKwkJRkIzQzUwQTgxMUY3OTRGRjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi87IH07CisJCUZCM0M1MEE5MTFGNzk0RkYwMDgxRjVCQSAvKiBz
eW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
MDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovOyB9OworCQlGQjNDNTBBQTEx
Rjc5NEZGMDA4MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi87
IH07CisJCUZCM0M1MEFCMTFGNzk1MUIwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREREM0I3RTNCN0IzNUEw
Qjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi87IH07CisJCUZCM0M1MEFDMTFGNzk1MUIw
MDgxRjVCQSAvKiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICov
OyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisJCUU2OUJGQkUyRDEyNzI2MjBFNDZDM0Y4QSAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJv
eHk7CisJCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJv
amVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJp
bmcgPSAzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUU7CisJCQlyZW1vdGVJbmZvID0gInRyYW5zbGF0
b3JfY29tbW9uIFN1cHBvcnQiOworCQl9OworCQlGQjNDNTA2MzExRjc5Mjk3MDA4MUY1QkEgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFBy
b2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3Ry
aW5nID0gRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBOworCQkJcmVtb3RlSW5mbyA9IGFuZ2xlOwor
CQl9OworCQlGQjNDNTBEMDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5
ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9y
dGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJ
cHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMzEzNDlENjY1RkFFNjQy
QUVCNDkxMzVFOworCQkJcmVtb3RlSW5mbyA9ICJBTkdMRSBTdXBwb3J0IjsKKwkJfTsKKy8qIEVu
ZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KKwkJMDU2RkVBREM3RDk1QzZENEM5Q0YxMTEzIC8qIHNjYW5uZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9t
LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTEyRUFGMDI4MzExRUVBNDc1M0U4Mjgx
OCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVy
bWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTc2NUI4NkNCQUYwRDRB
M0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUg
LyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfY29tbW9u
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTNGN0M0ODZDMzcwQTcy
OTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJt
ZWRpYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDg1N0UxODc5OUQzMzJD
MzBFRjQ2MEM3IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDhCNzQwMkNDMDdB
MDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0
R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBQkEyMzBGRUEzNjU0QjAz
MEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU2
QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1ODBCMkEz
MUY3QzUxQTU5QjQwRjExQTMgLyogY29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVBMjE1OTlDNTlCQzFBNzVBN0ZBQkEzNCAv
KiBPdXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVE
bGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZm9TaW5rLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZC
NzBEQzc0QTIxRkJDRDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRyYW5zbGF0b3JHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Nzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M2QkIxMkFC
MDk5NTU2Q0YzNzlENzhGIC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRh
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdEOUNGMzc2REM1Nzk5QjRDNkIz
MzMxRSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODMxMzk5REVFNURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBt
ZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUxM0ZBQzY5OURCMTU1OEQx
RDQ5QTQ4IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5QTZGN0IxQUQzOTE4RTY0REY3
NkVCMSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCThDMzIyNUMyRjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5n
LnkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTUyNzZBQTZC
MzZGQzFCMUQ5MTNGQ0U0IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3NkM4MzFBNzVFQkUwMDlBOTg2MTc5NiAvKiBQYXJz
ZUhlbHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRI
TFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEhMU0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBhdG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlENDdCMUFD
ODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFs
aWZpZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMENFNDM2MzE4NDky
NzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXpl
RGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMTUzRDU4RjRCQkJEOThBODRF
NDIxMCAvKiBnbHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gZ2xzbGFuZy5sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbml0aWFsaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVC
MSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkY1
Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI0MzZFRkYwNjkx
M0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92
ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNjRFQUJFNzM4RkM2NjZB
NUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI3NTcwN0IzOTNCN0VBQjdERDk5OTlD
QiAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb2RlR2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTeW1ib2xUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDNjZENkI0N0Q5QUYzMjg2NjQ0QkJFMSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBnbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCRTI1ODQ4NjAw
NUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
b3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDM0RBRkY2
QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDk1
NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNEZFOTg4
RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDOEJE
NTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5j
bHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjFGOTFEM0Q4Q0M0NDZGMzVC
MDBEMUIgLyogZ2xzbGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VFMEM5MERGNkQ1MDREMUYzNjI5NzExIC8qIFBh
cnNlSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUNGMkI2MkUwODIwQzgzMUFGODEyRDAwMCAvKiBidWlsZF9hbmdsZS5n
eXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gYnVpbGRfYW5nbGUuZ3lwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMTNDMzY5M0I5RTQwRDM3RjJGQUIz
NEEgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVtb3ZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEREQz
QjdFM0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREVBRjZGMzEy
NkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBpbnRl
cm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERUVBRkM2MThBM0IzM0Yx
RkJGRTM1MzYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxlY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JITFNM
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsg
cGF0aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjc0NjE4RjE4
RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIElu
Zm9TaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCM0M1MDVEMTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJhbmdsZS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OworCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisvKiBF
bmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1l
d29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNUExMUY3OTI0
QTAwODFGNUJBIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
Ky8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KKwkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEM5
QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLywKKwkJCQk5Q0VEM0FGRjFFNjFCNDVF
RTEwMDU2NTYgLyogYXRvbS5oICovLAorCQkJCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBj
b21waWxlLmggKi8sCisJCQkJQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovLAor
CQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBjcHAuaCAqLywKKwkJCQk4MDU4QTBBMkEw
QTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJMjk0RjQ0MkEyNjA2RkVDNTVG
MTJBMjhFIC8qIG1lbW9yeS5jICovLAorCQkJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBt
ZW1vcnkuaCAqLywKKwkJCQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8s
CisJCQkJNkJCQzgyMjRCOUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKKwkJCQlG
RjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovLAorCQkJCTA1NkZFQURDN0Q5
NUM2RDRDOUNGMTExMyAvKiBzY2FubmVyLmggKi8sCisJCQkJODlBNkY3QjFBRDM5MThFNjRERjc2
RUIxIC8qIHNsZ2xvYmFscy5oICovLAorCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBz
eW1ib2xzLmMgKi8sCisJCQkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAq
LywKKwkJCQkyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCisJCQkJRDEz
QzM2OTNCOUU0MEQzN0YyRkFCMzRBIC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBw
cmVwcm9jZXNzb3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkxOTZEQjZB
QjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovLAorCQkJCTI3RTRDN0VEMEI4MkUxOERDQkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLywK
KwkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAorCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCisJCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAorCQkJCUIyRjVDQTExRUVBOTJE
RjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmggKi8sCisJCQkJNkU2OTI3QkU1RDNDMkM4MkY4
NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKKwkJCQlGN0IyOTcxRDRFQjM4MzZCOTRCN0VDQUYg
LyogSW5mb1NpbmsuaCAqLywKKwkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlh
bGl6ZS5jcHAgKi8sCisJCQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRpYWxpemUu
aCAqLywKKwkJCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAg
Ki8sCisJCQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLywK
KwkJCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywK
KwkJCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
ICovLAorCQkJCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
Ki8sCisJCQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8s
CisJCQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKKwkJCQk0OEI3NDAy
Q0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJOTNENjFDQjBCQ0U1
NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUx
OUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8sCisJCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0
IC8qIE91dHB1dEhMU0wuaCAqLywKKwkJCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFy
c2VIZWxwZXIuY3BwICovLAorCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcxMSAvKiBQYXJzZUhl
bHBlci5oICovLAorCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3Bw
ICovLAorCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLywKKwkJ
CQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAorCQkJ
CTlENDdCMUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAorCQkJCUI0
MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKKwkJCQlENDBGNzhD
QjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJCUFFNjVFMTM5QUUxMERF
OUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAorCQkJCTU2QzdFOTlCQTUwMEE4NEMzNTIxNkZF
MCAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyog
U3ltYm9sVGFibGUuY3BwICovLAorCQkJCTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1i
b2xUYWJsZS5oICovLAorCQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9y
R0xTTC5jcHAgKi8sCisJCQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JH
TFNMLmggKi8sCisJCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNM
LmNwcCAqLywKKwkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wu
aCAqLywKKwkJCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKKwkJCQlF
MzcxMUE0OEEwQkYxNkIxQ0JENzdBQzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKKwkJCQkyQTc2
NUI4NkNCQUYwRDRBM0U2OURDQTcgLyogVW5mb2xkU2VsZWN0LmggKi8sCisJCQkJNEFCQTIzMEZF
QTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKKwkJCQk5NTI3NkFBNkIzNkZDMUIxRDkx
M0ZDRTQgLyogZGVidWcuaCAqLywKKwkJCQlBMzE1M0Q1OEY0QkJCRDk4QTg0RTQyMTAgLyogZ2xz
bGFuZy5sICovLAorCQkJCThDMzIyNUMyRjhDMzU3M0NEOTcyNUU2NiAvKiBnbHNsYW5nLnkgKi8s
CisJCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAgKi8sCisJCQkJ
Nzk5REM5NjExRUUyRUEzQkE3Q0Y1NDc3IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCTE1M0JG
MDZCRjEyQzZGNTA0OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAorCQkJCUM4QkQ1
OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAqLywKKwkJCQlCRTI1ODQ4NjAwNUY2
Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAorCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKKwkJCQlBRTc2NzRDNTJCREREQjI4QUY1
RkZEOUYgLyogdW5pc3RkLmggKi8sCisJCQkpOworCQkJbmFtZSA9IFNvdXJjZTsKKwkJCXBhdGgg
PSBjb21waWxlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTQ2NkUxRDA1
MzFBNzlCNTgxM0U4QTdGOCAvKiBJbnRlcm1lZGlhdGVzICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDQjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xz
bGFuZy5jcHAgKi8sCisJCQkJQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGdsc2xhbmdfdGFi
LmNwcCAqLywKKwkJCQlCQzY2RDZCNDdEOUFGMzI4NjY0NEJCRTEgLyogZ2xzbGFuZ190YWIuaCAq
LywKKwkJCSk7CisJCQluYW1lID0gSW50ZXJtZWRpYXRlczsKKwkJCXNvdXJjZVRyZWUgPSBJTlRF
Uk1FRElBVEVfRElSOworCQl9OworCQk1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQgPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE5NkRCNkFCMDA2QkI4MzUwM0M3
RDc4NiAvKiBTb3VyY2UgKi8sCisJCQkJNDY2RTFEMDUzMUE3OUI1ODEzRThBN0Y4IC8qIEludGVy
bWVkaWF0ZXMgKi8sCisJCQkJRTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICov
LAorCQkJCUIyQzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLywKKwkJCSk7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQg
LyogQnVpbGQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CUNGMkI2MkUwODIwQzgzMUFGODEyRDAwMCAvKiBidWlsZF9hbmdsZS5neXAgKi8sCisJCQkpOwor
CQkJbmFtZSA9IEJ1aWxkOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRTBF
REM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzREREQzc3MjE2MjAyQTRERTE4MDhCREIgLyogbGli
dHJhbnNsYXRvcl9jb21tb24uYSAqLywKKwkJCQlGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyog
bGliYW5nbGUuYSAqLywKKwkJCSk7CisJCQluYW1lID0gUHJvZHVjdHM7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVn
aW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMy
IC8qIHRyYW5zbGF0b3JfY29tbW9uICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9j
b21tb24iICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRUFBMjJDQTYzRkQ1NzJGQ0NCOTEz
RDIyIC8qIFNvdXJjZXMgKi8sCisJCQkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8qIEZyYW1l
d29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJMjkxRUUwNDIwMkVDNzk2NzgzNUZDQzM4IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCisJCQkpOworCQkJbmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOworCQkJcHJvZHVjdE5h
bWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAzREREQzc3MjE2
MjAyQTRERTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLzsKKwkJCXByb2R1Y3RU
eXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworCQlG
QjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRp
dmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzQzUwNUIxMUY3OTI0QTAw
ODFGNUJBIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJh
bmdsZSIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQlGQjNDNTA1NjExRjc5MjRBMDA4MUY1
QkEgLyogU291cmNlcyAqLywKKwkJCQlGQjNDNTA1QTExRjc5MjRBMDA4MUY1QkEgLyogRnJhbWV3
b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCQlGQjNDNTBEMTExRjc5Q0NDMDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKKwkJCSk7CisJCQluYW1lID0gYW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0
b3JfZ2xzbDsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEg
LyogbGliYW5nbGUuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5
cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9u
ICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQlEQTE4OEQ4QzZCRjgwNzMx
MjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0Owor
CQkJYXR0cmlidXRlcyA9IHsKKwkJCQlCdWlsZEluZGVwZW5kZW50VGFyZ2V0c0luUGFyYWxsZWwg
PSBZRVM7CisJCQl9OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBFNTlGOEZFNEE4MDk5
RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImJ1
aWxkX2FuZ2xlIiAqLzsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKKwkJCW1haW5Hcm91cCA9IDVCQkVGRjlCOTE3
MzgyOTdCOTVDNTY4RDsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7CisJCQlwcm9qZWN0Um9vdCA9
ICIiOworCQkJdGFyZ2V0cyA9ICgKKwkJCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxs
ICovLAorCQkJCTZGNEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAq
LywKKwkJCQkzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUUgLyogQU5HTEUgU3VwcG9ydCAqLywKKwkJ
CQlGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi8sCisJCQkpOworCQl9OworLyog
RW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxk
UGhhc2Ugc2VjdGlvbiAqLworCQkwRDUxM0Y4QjkyMzk0OUMxNTZEQjAyQzUgLyogQWN0aW9uICJi
aXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJ
CQlpbnB1dFBhdGhzID0gKAorCQkJCWNvbXBpbGVyL2dsc2xhbmcueSwKKwkJCSk7CisJCQluYW1l
ID0gIkFjdGlvbiBcImJpc29uX2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQYXRocyA9ICgKKwkJCQki
JChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5jcHAiLAorCQkJCSIkKElOVEVSTUVESUFU
RV9ESVIpL2dsc2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0
ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgYmlzb24gb24gY29tcGlsZXIvZ2xzbGFuZy55XCJc
bmV4ZWMgYmlzb24gLS1uby1saW5lcyBcIi0tZGVmaW5lcz0ke0lOVEVSTUVESUFURV9ESVJ9L2ds
c2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0b249eWFjYy5jXCIgXCItLW91dHB1dD0ke0lOVEVSTUVE
SUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcueVxuZXhpdCAxXG4i
OworCQkJc2hvd0VudlZhcnNJbkxvZyA9IDA7CisJCX07CisJCUZBMEQ3MTI1REIwNkE3QTc3MTZB
NTkxMCAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNj
cmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5nLmws
CisJCQkpOworCQkJbmFtZSA9ICJBY3Rpb24gXCJmbGV4X2dsc2xhbmdcIiI7CisJCQlvdXRwdXRQ
YXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nLmNwcCIsCisJCQkpOwor
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGgg
PSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiZWNobyBub3RlOiBcIkV4ZWN1dGluZyBmbGV4
IG9uIGNvbXBpbGVyL2dsc2xhbmcubFwiXG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBc
Ii0tb3V0ZmlsZT0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmcuY3BwXCIgY29tcGlsZXIvZ2xz
bGFuZy5sXG5leGl0IDFcbiI7CisJCQlzaG93RW52VmFyc0luTG9nID0gMDsKKwkJfTsKKy8qIEVu
ZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBT
b3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJODg4RjEzODI0OThFMkQ3
NEFGMjgwMUM4IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJFQkJGNEYwODE5RUEz
RDAzOTc3QThGQyAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMDY1RDI5RTk3
RkFDNkUxMjczODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwQTIx
Njk0OTEwM0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MERGMDAwMDVDQzQyMTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQwRkMxODlCOEEyNDZFREYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRjVBRTJBMjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlFOERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBw
YXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYx
OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUM3QzVERkYwQjJERkVD
MDkzODdGNEUgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA1NTYzQURGRUEx
NTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
QzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlCOEJEMjY4NUExNkIxODhDQ0RGQjA1MkIgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGNkFCRDU4RjhDQUI3NjQxRDhCRkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzJCMURCQ0Q2QjgzRjIxNDZENzg3QTYyIC8qIGF0b20uYyBpbiBT
b3VyY2VzICovLAorCQkJCUNCN0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3Vy
Y2VzICovLAorCQkJCTM1QkUxQkJFRTYxMzVBMUNCMDYwOEVBOCAvKiBjcHBzdHJ1Y3QuYyBpbiBT
b3VyY2VzICovLAorCQkJCTNBOTZFOUNBQzhBMjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBT
b3VyY2VzICovLAorCQkJCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4g
U291cmNlcyAqLywKKwkJCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3ltYm9scy5jIGlu
IFNvdXJjZXMgKi8sCisJCQkJRThDNzI3QUE4RTlEQzVFN0I1ODg1N0RGIC8qIHRva2Vucy5jIGlu
IFNvdXJjZXMgKi8sCisJCQkJQUJBNUM2MUIxQjc4QjlBOEQ2OUY2QUVDIC8qIGdsc2xhbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEQ0MDY0MTY3Mzk4QTY4OTI4MDlBMDlFIC8qIGdsc2xhbmdf
dGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI0ODU4NDE3RTU0MzY1QkU4Q0RFMzkxOSAvKiBv
c3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRkIzQzUwNTYxMUY3OTI0QTAwODFG
NUJBIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjNDNTBB
QjExRjc5NTFCMDA4MUY1QkEgLyogVHJhbnNsYXRvckdMU0wuaCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCM0M1MEFDMTFGNzk1MUIwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmggaW4gU291cmNlcyAqLywK
KwkJCQlGQjNDNTBBNDExRjc5NEZGMDA4MUY1QkEgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzQzUwQTUxMUY3OTRGRjAwODFGNUJBIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwQTYxMUY3OTRGRjAwODFGNUJBIC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzQzUwQTcxMUY3OTRGRjAwODFGNUJBIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzQzUwQTgxMUY3OTRGRjAwODFGNUJBIC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAor
CQkJCUZCM0M1MEE5MTFGNzk0RkYwMDgxRjVCQSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywK
KwkJCQlGQjNDNTBBQTExRjc5NEZGMDA4MUY1QkEgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywK
KwkJCQlGQjNDNTA4RTExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGQjNDNTA1NzExRjc5MjRBMDA4MUY1QkEgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzQzUwOTIxMUY3OTRDRTAwODFGNUJBIC8qIGRlYnVnLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZCM0M1MDkzMTFGNzk0Q0UwMDgxRjVCQSAvKiBJbmZvU2luay5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NDExRjc5NENFMDA4MUY1QkEgLyogSW5pdGlhbGl6
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NTExRjc5NENFMDA4MUY1QkEgLyogSW5p
dGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5NjExRjc5NENFMDA4MUY1
QkEgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDk3MTFGNzk0
Q0UwMDgxRjVCQSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTgx
MUY3OTRDRTAwODFGNUJBIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCM0M1MDlBMTFGNzk0Q0UwMDgxRjVCQSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGQjNDNTA1ODExRjc5MjRBMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjNDNTA5QjExRjc5NENFMDA4MUY1QkEgLyogcGFyc2VDb25zdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5QzExRjc5NENFMDA4MUY1QkEgLyogUGFyc2VI
ZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUQxMUY3OTRDRTAwODFGNUJBIC8q
IFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5RTExRjc5NENFMDA4MUY1
QkEgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUYxMUY3
OTRDRTAwODFGNUJBIC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUw
QTAxMUY3OTRDRTAwODFGNUJBIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkIzQzUwQTExMUY3OTRDRTAwODFGNUJBIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCM0M1MDU5MTFGNzkyNEEwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGQjNDNTA4RjExRjc5NDlFMDA4MUY1QkEgLyogZ2xzbGFuZ190YWIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCisvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KKwkJMjkxRUUwNDIw
MkVDNzk2NzgzNUZDQzM4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQ
QlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVF
IC8qIEFOR0xFIFN1cHBvcnQgKi87CisJCQl0YXJnZXRQcm94eSA9IEU2OUJGQkUyRDEyNzI2MjBF
NDZDM0Y4QSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCUZCM0M1MDY0MTFG
NzkyOTcwMDgxRjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IEZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQSAv
KiBhbmdsZSAqLzsKKwkJCXRhcmdldFByb3h5ID0gRkIzQzUwNjMxMUY3OTI5NzAwODFGNUJBIC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKKwkJRkIzQzUwRDExMUY3OUNDQzAwODFG
NUJBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBl
bmRlbmN5OworCQkJdGFyZ2V0ID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1
cHBvcnQgKi87CisJCQl0YXJnZXRQcm94eSA9IEZCM0M1MEQwMTFGNzlDQ0MwMDgxRjVCQSAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5j
eSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8K
KwkJMDBCRjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9O
QU1FID0gInRyYW5zbGF0b3JfY29tbW9uIFN1cHBvcnQiOworCQkJfTsKKwkJCW5hbWUgPSBEZWZh
dWx0OworCQl9OworCQkxQTEyQUE1RDY1QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlQUk9EVUNUX05BTUUgPSBBbGw7CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJ
CTFGM0YxMjE4QjUxMzVGQkIwNjdERTgwOSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVf
UFJFRklYID0gbGliOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCS4sCisJCQkJ
CS4uL2luY2x1ZGUsCisJCQkJKTsKKwkJCQlQUk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2NvbW1v
bjsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJQkM1NzkzQzlBMUZGMDIxQTgx
QzY2NTU5IC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
KwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF82NF9C
SVQpIjsKKwkJCQlDT05GSUdVUkFUSU9OX0JVSUxEX0RJUiA9ICIkKEJVSUxEX0RJUikvJChDT05G
SUdVUkFUSU9OKSQoRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUpIjsKKwkJCQlJTlRFUk1FRElBVEVf
RElSID0gIiQoUFJPSkVDVF9ERVJJVkVEX0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJT04pIjsKKwkJ
CQlPQkpST09UID0gIiI7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlTSEFSRURf
SU5URVJNRURJQVRFX0RJUiA9ICIkKFNZTVJPT1QpL0Rlcml2ZWRTb3VyY2VzLyQoQ09ORklHVVJB
VElPTikiOworCQkJCVNZTVJPT1QgPSAiJChCVUlMRF9ESVIpIjsKKwkJCX07CisJCQluYW1lID0g
RGVmYXVsdDsKKwkJfTsKKwkJRkIzQzUwNUMxMUY3OTI0QTAwODFGNUJBIC8qIERlZmF1bHQgKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9
ICgKKwkJCQkJLiwKKwkJCQkJLi4vaW5jbHVkZSwKKwkJCQkpOworCQkJCVBST0RVQ1RfTkFNRSA9
IGFuZ2xlOworCQkJfTsKKwkJCW5hbWUgPSBEZWZhdWx0OworCQl9OworLyogRW5kIFhDQnVpbGRD
b25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBz
ZWN0aW9uICovCisJCTBBQTU0ODI1QkY1REYwQTNGQkE5MkI2MCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQU5HTEUgU3VwcG9ydCIgKi8gPSB7CisJ
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
KwkJCQkwMEJGMkVCQ0JERjU2NzhGNEJBMkZBOTIgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bk5hbWUgPSBEZWZhdWx0OworCQl9OworCQkwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi8gPSB7
CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9
ICgKKwkJCQlCQzU3OTNDOUExRkYwMjFBODFDNjY1NTkgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJ
CQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJh
dGlvbk5hbWUgPSBEZWZhdWx0OworCQl9OworCQkzNEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3Jf
Y29tbW9uIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCTFGM0YxMjE4QjUxMzVGQkIwNjdERTgwOSAvKiBEZWZhdWx0
ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisJCTc3Q0VGQjdCNDBGMDVC
MEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRh
cmdldCAiQWxsIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTFBMTJBQTVENjVBQ0RFNzFBRTA4OUVFMyAvKiBEZWZh
dWx0ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUZCM0M1MDVCMTFG
NzkyNEEwMDgxRjVCQSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAiYW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJRkIzQzUwNUMxMUY3OTI0QTAwODFGNUJBIC8qIERl
ZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwor
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKy8qIEVuZCBYQ0Nv
bmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSBEQTE4OEQ4QzZC
RjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CkluZGV4OiBBTkdMRS9zcmMv
Y29tbW9uL2FuZ2xldXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9uL2FuZ2xl
dXRpbHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmds
ZXV0aWxzLmg6IENvbW1vbiBBTkdMRSB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NTU9OX0FOR0xF
VVRJTFNfSF8KKyNkZWZpbmUgQ09NTU9OX0FOR0xFVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBk
aXNhbGxvdyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8g
VGhpcyBtdXN0IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFz
cworI2RlZmluZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5h
bWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBB
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tbW9u
L2RlYnVnLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1
Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK3N0YXRpYyBib29s
IHRyYWNlX29uID0gdHJ1ZTsKKworbmFtZXNwYWNlIGdsCit7Cit2b2lkIHRyYWNlKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQoreworICAgIGlmICh0cmFjZV9vbikKKyAgICB7CisgICAgICAgIGlm
IChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJTEUgKmZpbGUgPSBmb3BlbigiZGVi
dWcudHh0IiwgImEiKTsKKworICAgICAgICAgICAgaWYgKGZpbGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgICAgICAgICAgICAgdmFfc3RhcnQo
dmFyYXJnLCBmb3JtYXQpOworICAgICAgICAgICAgICAgIHZmcHJpbnRmKGZpbGUsIGZvcm1hdCwg
dmFyYXJnKTsKKyAgICAgICAgICAgICAgICB2YV9lbmQodmFyYXJnKTsKKworICAgICAgICAgICAg
ICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK30K
SW5kZXg6IEFOR0xFL3NyYy9jb21tb24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRl
YnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpZm5kZWYgQ09NTU9OX0RFQlVHX0hfCisj
ZGVmaW5lIENPTU1PTl9ERUJVR19IXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKworbmFtZXNwYWNlIGdsCit7CisgICAgLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBk
ZWJ1Z2dpbmcgbG9nCisgICAgdm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cit9
CisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgdHJhY2Ugb2YgYSBmdW5jdGlvbiBjYWxsIGFuZCBp
dHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9nCisjaWZuZGVmIE5ERUJVRworICAgICNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoInRyYWNlOiAlcyJtZXNzYWdlIlxu
IiwgX19GVU5DVElPTl9fLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisgICAgI2RlZmluZSBUUkFDRSgu
Li4pICgodm9pZCkwKQorI2VuZGlmCisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24g
Y2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFu
IGl0ZW0gaW4gbmVlZCBvZiBmaXhpbmcuIFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUu
CisjZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJmaXhtZTogJXMibWVzc2Fn
ZSJcbiIsIF9fRlVOQ1RJT05fXywgX19WQV9BUkdTX18pCisKKy8vIEEgbWFjcm8gdG8gb3V0cHV0
IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywg
aW4gY2FzZSBvZiBlcnJvci4gV2lsbCBvY2N1ciBldmVuIGluIHJlbGVhc2UgbW9kZS4KKyNkZWZp
bmUgRVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJlcnI6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZV
TkNUSU9OX18sIF9fVkFfQVJHU19fKQorCisvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlv
biBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCisjZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSBkbyB7IFwKKyAgICBpZighKGV4cHJlc3Npb24pKSBcCisgICAgICAgIEVS
UigiXHQhIEFzc2VydCBmYWlsZWQgaW4gJXMoJWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNU
SU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChleHByZXNzaW9uKTsgXAorICAgIH0gd2hp
bGUoMCkKKworCisvLyBBIG1hY3JvIHRvIGluZGljYXRlIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25h
bGl0eQorI2lmbmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwK
KyAgICAgICAgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05f
XywgX19MSU5FX18pOyBcCisgICAgICAgIGFzc2VydChmYWxzZSk7IFwKKyAgICAgICAgfSB3aGls
ZSgwKQorI2Vsc2UKKyAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1w
bGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKyNlbmRpZgorCisv
LyBBIG1hY3JvIGZvciBjb2RlIHdoaWNoIGlzIG5vdCBleHBlY3RlZCB0byBiZSByZWFjaGVkIHVu
ZGVyIHZhbGlkIGFzc3VtcHRpb25zCisjaWZuZGVmIE5ERUJVRworICAgICNkZWZpbmUgVU5SRUFD
SEFCTEUoKSBkbyB7IFwKKyAgICAgICAgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMo
JWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2Up
OyBcCisgICAgICAgIH0gd2hpbGUoMCkKKyNlbHNlCisgICAgI2RlZmluZSBVTlJFQUNIQUJMRSgp
IEVSUigiXHQhIFVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXykKKyNlbmRpZgorCisvLyBBIG1hY3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10
aW1lIGFzc2VydCB0byB2YWxpZGF0ZSBjb25zdGFudCBjb25kaXRpb25zCisjZGVmaW5lIE1FVEFf
QVNTRVJUKGNvbmRpdGlvbikgdHlwZWRlZiBpbnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElO
RV9fW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKworI2VuZGlmICAgLy8gQ09N
TU9OX0RFQlVHX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNMVURFRF8K
KyNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCisKKy8vCisvLyBQcmVjaXNpb24gcXVhbGlm
aWVycworLy8KK2VudW0gVFByZWNpc2lvbgoreworICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUga2Vw
dCBzb3J0ZWQKKyAgICBFYnBVbmRlZmluZWQsCisgICAgRWJwTG93LAorICAgIEVicE1lZGl1bSwK
KyAgICBFYnBIaWdoLAorfTsKKworX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3Ry
aW5nKFRQcmVjaXNpb24gcCkKK3sKKyAgICBzd2l0Y2gocCkKKyAgICB7CisgICAgY2FzZSBFYnBI
aWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJCXJldHVy
biAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJCWJy
ZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBTYWZl
c3QgZmFsbGJhY2sKKyAgICB9Cit9CisKKy8vCisvLyBCYXNpYyB0eXBlLiAgQXJyYXlzLCB2ZWN0
b3JzLCBldGMuLCBhcmUgb3J0aG9nb25hbCB0byB0aGlzLgorLy8KK2VudW0gVEJhc2ljVHlwZQor
eworICAgIEVidFZvaWQsCisgICAgRWJ0RmxvYXQsCisgICAgRWJ0SW50LAorICAgIEVidEJvb2ws
CisgICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRh
dGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidFNhbXBsZXIyRCwKKyAgICBFYnRTYW1wbGVyQ3Vi
ZSwKKyAgICBFYnRHdWFyZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVu
dGF0aW9uIG9mIElzU2FtcGxlcigpCisgICAgRWJ0U3RydWN0LAorICAgIEVidEFkZHJlc3MsICAg
ICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PworfTsKKworX19pbmxpbmUgYm9vbCBJ
c1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRT
YW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKK30KKworLy8KKy8vIFF1
YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hh
dCBjYW4gYmUgcmVhZAorLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVu
dCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCisvLyB0byBhbGxvY2F0ZSB2YXJp
YWJsZXMgaW4uICBTaW5jZSBidWlsdC1pbnMgdGVuZCB0byBnbyB0byBkaWZmZXJlbnQgcmVnaXN0
ZXJzCisvLyB0aGFuIHZhcnlpbmcgb3IgdW5pZm9ybSwgaXQgbWFrZXMgc2Vuc2UgdGhleSBhcmUg
cGVlcnMsIG5vdCBzdWItY2xhc3Nlcy4KKy8vCitlbnVtIFRRdWFsaWZpZXIKK3sKKyAgICBFdnFU
ZW1wb3JhcnksICAgICAvLyBGb3IgdGVtcG9yYXJpZXMgKHdpdGhpbiBhIGZ1bmN0aW9uKSwgcmVh
ZC93cml0ZQorICAgIEV2cUdsb2JhbCwgICAgICAgIC8vIEZvciBnbG9iYWxzIHJlYWQvd3JpdGUK
KyAgICBFdnFDb25zdCwgICAgICAgICAvLyBVc2VyIGRlZmluZWQgY29uc3RhbnRzIGFuZCBub24t
b3V0cHV0IHBhcmFtZXRlcnMgaW4gZnVuY3Rpb25zCisgICAgRXZxQXR0cmlidXRlLCAgICAgLy8g
UmVhZG9ubHkKKyAgICBFdnFWYXJ5aW5nSW4sICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hh
ZGVycyBvbmx5CisgICAgRXZxVmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAg
cmVhZC93cml0ZQorICAgIEV2cUludmFyaWFudFZhcnlpbmdJbiwgICAgIC8vIHJlYWRvbmx5LCBm
cmFnbWVudCBzaGFkZXJzIG9ubHkKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAgICAvLyB2
ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCisgICAgRXZxVW5pZm9ybSwgICAgICAgLy8g
UmVhZG9ubHksIHZlcnRleCBhbmQgZnJhZ21lbnQKKworICAgIC8vIHBhY2svdW5wYWNrIGlucHV0
IGFuZCBvdXRwdXQKKyAgICBFdnFJbnB1dCwKKyAgICBFdnFPdXRwdXQsCisKKyAgICAvLyBwYXJh
bWV0ZXJzCisgICAgRXZxSW4sCisgICAgRXZxT3V0LAorICAgIEV2cUluT3V0LAorICAgIEV2cUNv
bnN0UmVhZE9ubHksCisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBieSB2ZXJ0ZXggc2hhZGVy
CisgICAgRXZxUG9zaXRpb24sCisgICAgRXZxUG9pbnRTaXplLAorCisgICAgLy8gYnVpbHQtaW5z
IHJlYWQgYnkgZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJhZ0Nvb3JkLAorICAgIEV2cUZyb250
RmFjaW5nLAorICAgIEV2cVBvaW50Q29vcmQsCisKKyAgICAvLyBidWlsdC1pbnMgd3JpdHRlbiBi
eSBmcmFnbWVudCBzaGFkZXIKKyAgICBFdnFGcmFnQ29sb3IsCisgICAgRXZxRnJhZ0RhdGEsCisK
KyAgICAvLyBlbmQgb2YgbGlzdAorICAgIEV2cUxhc3QsCit9OworCisvLworLy8gVGhpcyBpcyBq
dXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlv
bnMgYWJvdmUuCisvLworX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRR
dWFsaWZpZXIgcSkKK3sKKyAgICBzd2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFUZW1wb3Jh
cnk6ICAgICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxR2xv
YmFsOiAgICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2
cUNvbnN0OiAgICAgICAgICByZXR1cm4gImNvbnN0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFDb25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25zdCI7ICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFu
dCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVy
biAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAg
ICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbjogICAgICAg
ICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxT3V0OiAg
ICAgICAgICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUlu
T3V0OiAgICAgICAgICByZXR1cm4gImlub3V0IjsgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFJbnB1dDogICAgICAgICAgcmV0dXJuICJpbnB1dCI7ICAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxT3V0cHV0OiAgICAgICAgIHJldHVybiAib3V0cHV0IjsgICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVBvc2l0aW9uOiAgICAgICByZXR1cm4gIlBvc2l0aW9uIjsgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFQb2ludFNpemU6ICAgICAgcmV0dXJuICJQb2ludFNpemUiOyAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5n
IjsgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29s
b3IiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJh
Z0RhdGEiOyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAi
dW5rbm93biBxdWFsaWZpZXIiOworICAgIH0KK30KKworI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5z
bGF0b3JHTFNMLmgiCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8g
Y3JlYXRlIHRoZSBhY3R1YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVs
IGNvZGUuICBJdCByZXR1cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KKy8vCitUQ29t
cGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNw
ZWMpCit7CisgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9yR0xTTChsYW5ndWFnZSwgc3BlYyk7Cit9
CisKKy8vCisvLyBEZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIK
Ky8vCit2b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCit7CisgICAgZGVs
ZXRlIGNvbXBpbGVyOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkhMU0wuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL1RyYW5zbGF0b3JITFNMLmgiCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJv
dmlkZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwKKy8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGln
aGVyIGxldmVsIGNvZGUuICBJdCByZXR1cm5zCisvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4K
Ky8vCitUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBF
U2hTcGVjIHNwZWMpCit7CisgICAgcmV0dXJuIG5ldyBUcmFuc2xhdG9ySExTTChsYW5ndWFnZSwg
c3BlYyk7Cit9CisKKy8vCisvLyBEZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0
Q29tcGlsZXIKKy8vCit2b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCit7
CisgICAgZGVsZXRlIGNvbXBpbGVyOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXwor
I2RlZmluZSBfQ09NTU9OX0lOQ0xVREVEXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNz
dHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUg
ImNvbXBpbGVyL1Bvb2xBbGxvYy5oIgorCit0eXBlZGVmIGludCBUU291cmNlTG9jOworY29uc3Qg
dW5zaWduZWQgaW50IFNvdXJjZUxvY0xpbmVNYXNrID0gMHhmZmZmOworY29uc3QgdW5zaWduZWQg
aW50IFNvdXJjZUxvY1N0cmluZ1NoaWZ0ID0gMTY7CisKKy8vCisvLyBQdXQgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURSBpbiBiYXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVt
ZS4KKy8vCisjZGVmaW5lIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoQSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgcykg
eyByZXR1cm4gKEEpLmFsbG9jYXRlKHMpOyB9ICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRv
ciBuZXcoc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9ICAgICBcCisg
ICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7
IH0gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShz
aXplX3QgcykgeyByZXR1cm4gKEEpLmFsbG9jYXRlKHMpOyB9ICAgICAgICBcCisgICAgdm9pZCog
b3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9
IFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIHZv
aWQgKikgeyB9CisKKy8vCisvLyBQb29sIHZlcnNpb24gb2Ygc3RyaW5nLgorLy8KK3R5cGVkZWYg
cG9vbF9hbGxvY2F0b3I8Y2hhcj4gVFN0cmluZ0FsbG9jYXRvcjsKK3R5cGVkZWYgc3RkOjpiYXNp
Y19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+
IFRTdHJpbmc7Cit0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNo
YXJfdHJhaXRzPGNoYXI+LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOworaW5saW5l
IFRTdHJpbmcqIE5ld1Bvb2xUU3RyaW5nKGNvbnN0IGNoYXIqIHMpCit7CisJdm9pZCogbWVtb3J5
ID0gR2xvYmFsUG9vbEFsbG9jYXRvci5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOworCXJldHVy
biBuZXcobWVtb3J5KSBUU3RyaW5nKHMpOworfQorCisvLworLy8gUGVyc2lzdGVudCBzdHJpbmcg
bWVtb3J5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZpdmUKKy8v
IGFjcm9zcyBjb21waWxlcy4KKy8vCisjZGVmaW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6c3RyaW5n
CisjZGVmaW5lIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQorCisvLwor
Ly8gUG9vbCBhbGxvY2F0b3IgdmVyc2lvbnMgb2YgdmVjdG9ycywgbGlzdHMsIGFuZCBtYXBzCisv
LwordGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8
VCwgcG9vbF9hbGxvY2F0b3I8VD4gPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBz
dGQ6OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90eXBlOwor
ICAgIFRWZWN0b3IoKSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oKSB7fQor
ICAgIFRWZWN0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0b3I8VCwg
cG9vbF9hbGxvY2F0b3I8VD4gPihhKSB7fQorICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkpOiBzdGQ6
OnZlY3RvcjxULCBwb29sX2FsbG9jYXRvcjxUPiA+KGkpIHt9Cit9OworCit0ZW1wbGF0ZSA8Y2xh
c3MgSywgY2xhc3MgRCwgY2xhc3MgQ01QID0gc3RkOjpsZXNzPEs+ID4gCitjbGFzcyBUTWFwIDog
cHVibGljIHN0ZDo6bWFwPEssIEQsIENNUCwgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0
IEssIEQ+ID4gPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxzdGQ6OnBh
aXI8Y29uc3QgSywgRD4gPiB0QWxsb2NhdG9yOworCisgICAgVE1hcCgpIDogc3RkOjptYXA8Sywg
RCwgQ01QLCB0QWxsb2NhdG9yPigpIHt9CisgICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0YWdlIG5h
bWUgbG9va3VwIHN1cHBvcnRlZCBpbiBnY2MgMy40IGFuZCBhYm92ZQorICAgIFRNYXAoY29uc3Qg
dEFsbG9jYXRvciYgYSkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFw
PEssIEQsIENNUCwgdEFsbG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9Cit9OworCit0eXBl
ZGVmIFRNYXA8VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOworCisjZW5kaWYgLy8gX0NP
TU1PTl9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjg4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9DT05TVEFO
VF9VTklPTl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisKK2NsYXNzIENvbnN0YW50VW5pb24geworcHVibGljOgorCisg
ICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKSAgICAgICAg
CisgICAgdm9pZCBzZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9
CisgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9h
dDsgfQorICAgIHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRC
b29sOyB9CisKKyAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgZmxv
YXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9CisgICAgYm9vbCBnZXRCQ29uc3QoKSB7
IHJldHVybiBiQ29uc3Q7IH0KKyAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNv
bnN0OyB9CisgICAgZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9Cisg
ICAgYm9vbCBnZXRCQ29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29uc3Q7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpID09IGlD
b25zdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChmID09IGZDb25zdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Ym9vbCBiKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGIgPT0gYkNvbnN0KQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChjb25zdGFudC50eXBlICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgaWYgKGNvbnN0YW50LmlDb25zdCA9PSBpQ29uc3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEZs
b2F0OgorICAgICAgICAgICAgaWYgKGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3QpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICBpZiAoY29uc3RhbnQuYkNvbnN0ID09IGJDb25zdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGludCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkp
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBib29sIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJh
dG9yPT0oYik7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNv
bnN0YW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9u
JiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFu
dC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgaWYgKGlDb25zdCA+IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKGZDb25zdCA+IGNvbnN0YW50LmZDb25zdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBDb25zdGFu
dFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0
SW50OgorICAgICAgICAgICAgaWYgKGlDb25zdCA8IGNvbnN0YW50LmlDb25zdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKGZDb25zdCA8IGNvbnN0YW50LmZDb25z
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9y
Kyhjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBD
b25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFu
dC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiBy
ZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKyBjb25z
dGFudC5mQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJE
ZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25zdGFudFVu
aW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVy
blZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBD
b25zdGFudFVuaW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29u
c3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNl
dEZDb25zdChmQ29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBicmVhazsgCisgICAgICAgIGRlZmF1
bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVy
YXRvciUoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAg
ICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29u
c3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidElu
dDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Npbmci
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAg
ICBDb25zdGFudFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQp
IGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBj
b25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNvbnN0IENv
bnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5p
b24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVl
LnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5p
b24gb3BlcmF0b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsg
CisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBl
ID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0
KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAg
IH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5pb24mIGNv
bnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7
CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNv
bnN0IHwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICBhc3Nl
cnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3JeKGNv
bnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0
YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5
cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1
cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0
YW50VW5pb24gb3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QK
KyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3Nl
cnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBjb25zdGFu
dC5iQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENvbnN0YW50
VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0
dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1ZS5zZXRC
Q29uc3QoYkNvbnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0
OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBUQmFzaWNUeXBlIGdldFR5
cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Citwcml2YXRlOgorCisgICAgdW5pb24gIHsKKyAg
ICAgICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAg
IGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKKyAgICAgICAgZmxv
YXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCisgICAgfSA7
CisKKyAgICBUQmFzaWNUeXBlIHR5cGU7Cit9OworCisjZW5kaWYgLy8gX0NPTlNUQU5UX1VOSU9O
X0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgi
CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIG1lc3NhZ2UpIHsKKyAg
ICBzd2l0Y2gobWVzc2FnZSkgeworICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeFdhcm5pbmc6CisgICAgICAgICAgICBzaW5r
LmFwcGVuZCgiV0FSTklORzogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
UHJlZml4RXJyb3I6CisgICAgICAgICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6CisgICAgICAg
ICAgICBzaW5rLmFwcGVuZCgiSU5URVJOQUwgRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRVByZWZpeFVuaW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBzaW5rLmFw
cGVuZCgiVU5JTVBMRU1FTlRFRDogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFUHJlZml4Tm90ZToKKyAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2luay5hcHBlbmQo
IlVOS09XTiBFUlJPUjogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQg
VEluZm9TaW5rQmFzZTo6bG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpIHsKKyAgICBpbnQgc3RyaW5n
ID0gbG9jID4+IFNvdXJjZUxvY1N0cmluZ1NoaWZ0OworICAgIGludCBsaW5lID0gbG9jICYgU291
cmNlTG9jTGluZU1hc2s7CisKKyAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07CisgICAg
aWYgKGxpbmUpCisgICAgICAgIHN0cmVhbSA8PCBzdHJpbmcgPDwgIjoiIDw8IGxpbmU7CisgICAg
ZWxzZQorICAgICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6PyAiOworICAgIHN0cmVhbSA8PCAi
OiAiOworCisgICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKK30KKwordm9pZCBUSW5mb1Np
bmtCYXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpIHsKKyAg
ICBwcmVmaXgobWVzc2FnZSk7CisgICAgc2luay5hcHBlbmQocyk7CisgICAgc2luay5hcHBlbmQo
IlxuIik7Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNz
YWdlLCBjb25zdCBjaGFyKiBzLCBUU291cmNlTG9jIGxvYykgeworICAgIHByZWZpeChtZXNzYWdl
KTsKKyAgICBsb2NhdGlvbihsb2MpOworICAgIHNpbmsuYXBwZW5kKHMpOworICAgIHNpbmsuYXBw
ZW5kKCJcbiIpOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXworI2Rl
ZmluZSBfSU5GT1NJTktfSU5DTFVERURfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAi
Y29tcGlsZXIvQ29tbW9uLmgiCisKKy8vIFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0
aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgoraW5saW5lIGZsb2F0IGZyYWN0aW9uYWxQ
YXJ0KGZsb2F0IGYpIHsKKyAgZmxvYXQgaW50UGFydCA9IDAuMGY7CisgIHJldHVybiBtb2RmZihm
LCAmaW50UGFydCk7Cit9CisKKy8vCisvLyBUUHJlZml4VHlwZSBpcyB1c2VkIHRvIGNlbnRyYWxp
emUgaG93IGluZm8gbG9nIG1lc3NhZ2VzIHN0YXJ0LgorLy8gU2VlIGJlbG93LgorLy8KK2VudW0g
VFByZWZpeFR5cGUgeworICAgIEVQcmVmaXhOb25lLAorICAgIEVQcmVmaXhXYXJuaW5nLAorICAg
IEVQcmVmaXhFcnJvciwKKyAgICBFUHJlZml4SW50ZXJuYWxFcnJvciwKKyAgICBFUHJlZml4VW5p
bXBsZW1lbnRlZCwKKyAgICBFUHJlZml4Tm90ZQorfTsKKworLy8KKy8vIEVuY2Fwc3VsYXRlIGlu
Zm8gbG9ncyBmb3IgYWxsIG9iamVjdHMgdGhhdCBoYXZlIHRoZW0uCisvLworLy8gVGhlIG1ldGhv
ZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2YgdG9vbHMgZm9yIGdldHRpbmcgYSB2YXJpZXR5IG9mCisv
LyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5zZXJ0ZWQgaW50byB0aGUgbG9nLgorLy8KK2NsYXNzIFRJ
bmZvU2lua0Jhc2UgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jhc2UoKSB7fQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25zdCBU
JiB0KSB7CisgICAgICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3Ry
ZWFtIDw8IHQ7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgLy8gT3ZlcnJpZGUgPDwgb3BlcmF0b3IgZm9yIHNwZWNp
ZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIgdG8gYXBwZW5kIHN0cmluZ3MKKyAgICAvLyBhbmQgY2hh
cmFjdGVycyBkaXJlY3RseSB0byB0aGUgc2luay4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRv
cjw8KGNoYXIgYykgeworICAgICAgICBzaW5rLmFwcGVuZCgxLCBjKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIq
IHN0cikgeworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFBlcnNpc3RTdHJp
bmcmIHN0cikgeworICAgICAgICBzaW5rLmFwcGVuZChzdHIpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFN0cmluZyYg
c3RyKSB7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0ci5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICAvLyBNYWtlIHN1cmUgZmxvYXRzIGFyZSB3cml0dGVuIHdpdGgg
Y29ycmVjdCBwcmVjaXNpb24uCisgICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChmbG9hdCBm
KSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBkZWNpbWFsIHBvaW50
IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVyCisgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBmcmFj
dGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBmb3JtYXQgZG9lcworICAgICAgICAv
LyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwgcG9ydGlvbiB3aGljaCBnZXRzIGludGVycHJldGVkIGFz
IGludGVnZXIgYnkKKyAgICAgICAgLy8gdGhlIGNvbXBpbGVyLgorICAgICAgICBUUGVyc2lzdFN0
cmluZ1N0cmVhbSBzdHJlYW07CisgICAgICAgIGlmIChmcmFjdGlvbmFsUGFydChmKSA9PSAwLjBm
KSB7CisgICAgICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDEpOworICAgICAgICAgICAgc3RyZWFt
IDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0ZDo6Zml4ZWQgPDwgZjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OmZpeGVkKTsKKyAgICAgICAgICAg
IHN0cmVhbS51bnNldGYoc3RkOjppb3M6OnNjaWVudGlmaWMpOworICAgICAgICAgICAgc3RyZWFt
LnByZWNpc2lvbig4KTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCBmOworICAgICAgICB9CisgICAg
ICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgLy8gV3JpdGUgYm9vbGVhbiB2YWx1ZXMgYXMgdGhlaXIgbmFtZXMgaW5zdGVhZCBv
ZiBpbnRlZ3JhbCB2YWx1ZS4KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGJvb2wgYikg
eworICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBiID8gInRydWUiIDogImZhbHNlIjsKKyAgICAg
ICAgc2luay5hcHBlbmQoc3RyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xlYXIoKTsgfQorCisgICAgY29uc3QgVFBlcnNpc3RTdHJp
bmcmIHN0cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KKyAgICBjb25zdCBjaGFyKiBjX3N0cigp
IGNvbnN0IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQorCisgICAgdm9pZCBwcmVmaXgoVFByZWZp
eFR5cGUgbWVzc2FnZSk7CisgICAgdm9pZCBsb2NhdGlvbihUU291cmNlTG9jIGxvYyk7CisgICAg
dm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpOworICAgIHZv
aWQgbWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzLCBUU291cmNlTG9j
IGxvYyk7CisKK3ByaXZhdGU6CisgICAgVFBlcnNpc3RTdHJpbmcgc2luazsKK307CisKK2NsYXNz
IFRJbmZvU2luayB7CitwdWJsaWM6CisgICAgVEluZm9TaW5rQmFzZSBpbmZvOworICAgIFRJbmZv
U2lua0Jhc2UgZGVidWc7CisgICAgVEluZm9TaW5rQmFzZSBvYmo7Cit9OworCisjZW5kaWYgLy8g
X0lORk9TSU5LX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBDcmVhdGUg
c3RyaW5ncyB0aGF0IGRlY2xhcmUgYnVpbHQtaW4gZGVmaW5pdGlvbnMsIGFkZCBidWlsdC1pbnMg
dGhhdAorLy8gY2Fubm90IGJlIGV4cHJlc3NlZCBpbiB0aGUgZmlsZXMsIGFuZCBlc3RhYmxpc2gg
bWFwcGluZ3MgYmV0d2VlbiAKKy8vIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKKworI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorCit2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZSgpCit7Cisg
ICAgLy8KKyAgICAvLyBJbml0aWFsaXplIGFsbCB0aGUgYnVpbHQtaW4gc3RyaW5ncyBmb3IgcGFy
c2luZy4KKyAgICAvLworICAgIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uczsKKyAgICBUU3RyaW5n
IEJ1aWx0SW5GdW5jdGlvbnNWZXJ0ZXg7CisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zRnJh
Z21lbnQ7CisgICAgVFN0cmluZyBTdGFuZGFyZFVuaWZvcm1zOworICAgIFRTdHJpbmcgVmVydGV4
RGVmYXVsdFByZWNpc2lvbjsKKyAgICBUU3RyaW5nIEZyYWdtZW50RGVmYXVsdFByZWNpc2lvbjsK
KworICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAg
ICAgIC8vIFByb3RvdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IGJvdGggdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uczsKKwor
ICAgICAgICAvLworICAgICAgICAvLyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMu
CisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJhZGlhbnMoZmxv
YXQgZGVncmVlcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByYWRpYW5z
KHZlYzIgIGRlZ3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmFk
aWFucyh2ZWMzICBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
IHJhZGlhbnModmVjNCAgZGVncmVlcyk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGRlZ3JlZXMoZmxvYXQgcmFkaWFucyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBkZWdyZWVzKHZlYzIgIHJhZGlhbnMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgZGVncmVlcyh2ZWMzICByYWRpYW5zKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIGRlZ3JlZXModmVjNCAgcmFkaWFucyk7IikpOworCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNpbihmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzaW4odmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMyAgc2luKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIHNpbih2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImZsb2F0IGNvcyhmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyICBjb3ModmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgY29zKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgIGNvcyh2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImZsb2F0IHRhbihmbG9hdCBhbmdsZSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICB0YW4odmVjMiAgYW5nbGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyAgdGFuKHZlYzMgIGFuZ2xlKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIHRhbih2ZWM0ICBhbmdsZSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImZsb2F0IGFzaW4oZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
ICBhc2luKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXNp
bih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFzaW4odmVj
NCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFjb3MoZmxvYXQg
eCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhY29zKHZlYzIgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWNvcyh2ZWMzICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFjb3ModmVjNCAgeCk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQgeSwgZmxvYXQgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhdGFuKHZlYzIgIHksIHZlYzIgIHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYXRhbih2ZWMzICB5LCB2ZWMzICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGF0YW4odmVjNCAgeSwgdmVj
NCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQg
eV9vdmVyX3gpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2ZWMy
ICB5X292ZXJfeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhdGFuKHZl
YzMgIHlfb3Zlcl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGF0YW4o
dmVjNCAgeV9vdmVyX3gpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBFeHBvbmVudGlh
bCBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0
IHBvdyhmbG9hdCB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIHBvdyh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHBvdyh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHBvdyh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiZmxvYXQgZXhwKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMiAgZXhwKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgZXhwKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZXhw
KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsb2coZmxv
YXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBsb2codmVjMiAgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBsb2codmVjMyAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2codmVjNCAgeCk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGV4cDIoZmxvYXQgeCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBleHAyKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgZXhwMih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgIGV4cDIodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IGxvZzIoZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMyICBsb2cyKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
bG9nMih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGxvZzIo
dmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNxcnQoZmxv
YXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzcXJ0KHZlYzIgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc3FydCh2ZWMzICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNxcnQodmVjNCAgeCk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGludmVyc2VzcXJ0KGZsb2F0IHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgaW52ZXJzZXNxcnQodmVjMiAgeCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBpbnZlcnNlc3FydCh2ZWMzICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGludmVyc2VzcXJ0KHZlYzQgIHgp
OyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBDb21tb24gRnVuY3Rpb25zLgorICAgICAg
ICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhYnMoZmxvYXQgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBhYnModmVjMiAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBhYnModmVjMyAgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBhYnModmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IHNpZ24oZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBzaWduKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgc2lnbih2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQg
IHNpZ24odmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGZs
b29yKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZmxvb3Io
dmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmbG9vcih2ZWMz
ICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGZsb29yKHZlYzQgIHgp
OyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBjZWlsKGZsb2F0IHgpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2VpbCh2ZWMyICB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNlaWwodmVjMyAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBjZWlsKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmcmFjdChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgIGZyYWN0KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgZnJhY3QodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBmcmFjdCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgbW9kKHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygidmVjMyAgbW9kKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgbW9kKHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMiAgbW9kKHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMyAgbW9kKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbW9kKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtaW4oZmxvYXQgeCwgZmxvYXQgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgZmxvYXQgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAgeCwgZmxvYXQg
eSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVjNCAgeCwgZmxv
YXQgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwg
dmVjMiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaW4odmVjMyAg
eCwgdmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaW4odmVj
NCAgeCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1h
eChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIg
IG1heCh2ZWMyICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIG1heCh2ZWMzICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIG1heCh2ZWM0ICB4LCBmbG9hdCB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIG1heCh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIG1heCh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIG1heCh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgY2xhbXAoZmxvYXQgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBt
YXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2xhbXAodmVjMiAg
eCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgY2xhbXAodmVjMyAgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2xhbXAodmVjNCAgeCwgZmxvYXQg
bWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgY2xhbXAodmVjMiAgeCwgdmVjMiAgbWluVmFsLCB2ZWMyICBtYXhWYWwpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgY2xhbXAodmVjMyAgeCwgdmVjMyAgbWluVmFsLCB2
ZWMzICBtYXhWYWwpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2xhbXAo
dmVjNCAgeCwgdmVjNCAgbWluVmFsLCB2ZWM0ICBtYXhWYWwpOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBtaXgoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgYSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgZmxv
YXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaXgodmVjMyAgeCwg
dmVjMyAgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBt
aXgodmVjNCAgeCwgdmVjNCAgeSwgZmxvYXQgYSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgdmVjMiAgYSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtaXgodmVjMyAgeCwgdmVjMyAgeSwgdmVjMyAgYSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtaXgodmVjNCAgeCwgdmVjNCAgeSwg
dmVjNCAgYSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHN0ZXAoZmxv
YXQgZWRnZSwgZmxvYXQgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBz
dGVwKHZlYzIgIGVkZ2UsIHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgc3RlcCh2ZWMzICBlZGdlLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgIHN0ZXAodmVjNCAgZWRnZSwgdmVjNCAgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBzdGVwKGZsb2F0IGVkZ2UsIHZlYzIgIHgpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgc3RlcChmbG9hdCBlZGdlLCB2ZWMzICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjNCAg
eCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNtb290aHN0ZXAoZmxv
YXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIHNtb290aHN0ZXAodmVjMiAgZWRnZTAsIHZlYzIgIGVkZ2UxLCB2ZWMyICB4
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNtb290aHN0ZXAodmVjMyAg
ZWRnZTAsIHZlYzMgIGVkZ2UxLCB2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIHNtb290aHN0ZXAodmVjNCAgZWRnZTAsIHZlYzQgIGVkZ2UxLCB2ZWM0ICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNtb290aHN0ZXAoZmxvYXQgZWRn
ZTAsIGZsb2F0IGVkZ2UxLCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWMzICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAs
IGZsb2F0IGVkZ2UxLCB2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2Vv
bWV0cmljIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgbGVuZ3RoKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgbGVuZ3RoKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
bGVuZ3RoKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVu
Z3RoKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0
YW5jZShmbG9hdCBwMCwgZmxvYXQgcDEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgZGlzdGFuY2UodmVjMiAgcDAsIHZlYzIgIHAxKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGRpc3RhbmNlKHZlYzMgIHAwLCB2ZWMzICBwMSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWM0ICBwMCwgdmVjNCAgcDEpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QoZmxvYXQgeCwgZmxvYXQg
eSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMiAgeCwgdmVj
MiAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMyAgeCwg
dmVjMyAgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjNCAg
eCwgdmVjNCAgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgY3Jvc3Mo
dmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9y
bWFsaXplKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbm9y
bWFsaXplKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbm9y
bWFsaXplKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbm9y
bWFsaXplKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBm
YWNlZm9yd2FyZChmbG9hdCBOLCBmbG9hdCBJLCBmbG9hdCBOcmVmKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgIGZhY2Vmb3J3YXJkKHZlYzIgIE4sIHZlYzIgIEksIHZlYzIg
IE5yZWYpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZmFjZWZvcndhcmQo
dmVjMyAgTiwgdmVjMyAgSSwgdmVjMyAgTnJlZik7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBmYWNlZm9yd2FyZCh2ZWM0ICBOLCB2ZWM0ICBJLCB2ZWM0ICBOcmVmKTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgcmVmbGVjdChmbG9hdCBJLCBmbG9h
dCBOKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJlZmxlY3QodmVjMiAg
SSwgdmVjMiAgTik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICByZWZsZWN0
KHZlYzMgIEksIHZlYzMgIE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
cmVmbGVjdCh2ZWM0ICBJLCB2ZWM0ICBOKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgcmVmcmFjdChmbG9hdCBJLCBmbG9hdCBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgcmVmcmFjdCh2ZWMyICBJLCB2ZWMyICBOLCBmbG9h
dCBldGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmVmcmFjdCh2ZWMz
ICBJLCB2ZWMzICBOLCBmbG9hdCBldGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCAgcmVmcmFjdCh2ZWM0ICBJLCB2ZWM0ICBOLCBmbG9hdCBldGEpOyIpKTsKKworICAgICAg
ICAvLworICAgICAgICAvLyBNYXRyaXggRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJtYXQyIG1hdHJpeENvbXBNdWx0KG1hdDIgeCwgbWF0MiB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIm1hdDMgbWF0cml4Q29tcE11bHQobWF0MyB4LCBt
YXQzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygibWF0NCBtYXRyaXhDb21wTXVs
dChtYXQ0IHgsIG1hdDQgeSk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFZlY3RvciBy
ZWxhdGlvbmFsIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzIgbGVzc1RoYW4odmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiYnZlYzMgbGVzc1RoYW4odmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbihpdmVjMiB4LCBpdmVjMiB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKGl2ZWMzIHgsIGl2
ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4oaXZl
YzQgeCwgaXZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxl
c3NUaGFuRXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzMgbGVzc1RoYW5FcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW5FcXVhbChpdmVjMiB4LCBp
dmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1
YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
NCBsZXNzVGhhbkVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbih2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbih2ZWMzIHgsIHZlYzMgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbih2ZWM0IHgsIHZl
YzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFu
KGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMg
Z3JlYXRlclRoYW4oaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjNCBncmVhdGVyVGhhbihpdmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW5FcXVhbCh2ZWMyIHgsIHZlYzIgeSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBncmVhdGVyVGhhbkVxdWFsKHZl
YzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0
ZXJUaGFuRXF1YWwodmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMiBncmVhdGVyVGhhbkVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW5FcXVhbChpdmVjMyB4LCBpdmVj
MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1
YWwoaXZlYzQgeCwgaXZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2
ZWMyIGVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJ2ZWMzIGVxdWFsKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoImJ2ZWM0IGVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiYnZlYzIgZXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbChidmVjMiB4LCBidmVjMiB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGVxdWFsKGJ2ZWMzIHgsIGJ2ZWMz
IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZXF1YWwoYnZlYzQgeCwg
YnZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFs
KHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5v
dEVxdWFsKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2
ZWM0IG5vdEVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYnZlYzIgbm90RXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbChpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbChidmVjMiB4LCBi
dmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIG5vdEVxdWFsKGJ2
ZWMzIHgsIGJ2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90
RXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJvb2wgYW55KGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBh
bnkoYnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVj
NCB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzIgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVjMyB4KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWM0IHgpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3QoYnZlYzIgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjMyBub3QoYnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjNCBub3QoYnZlYzQgeCk7IikpOworCisgICAgICAgIC8vCisgICAgICAgIC8v
IFRleHR1cmUgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0IHRleHR1cmUyRChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMiBjb29yZCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBs
ZXIsIHZlYzMgY29vcmQpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0
dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkKTsiKSk7CisKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2
ZWMzIGNvb3JkKTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm9pc2UgZnVuY3Rpb25z
LgorICAgICAgICAvLworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMShmbG9h
dCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzIgIHgp
OyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVjMyAgeCk7Iikp
OworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWM0ICB4KTsiKSk7CisK
KyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMihmbG9hdCB4KTsiKSk7CisgICAg
Ly8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjMiAgeCk7IikpOworICAgIC8vCXMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzIG5vaXNlMyhmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyBub2lzZTModmVjMiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgbm9pc2UzKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5v
aXNlMyh2ZWM0ICB4KTsiKSk7CisKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNl
NChmbG9hdCB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVj
MiAgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzMgIHgp
OyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWM0ICB4KTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb3RvdHlw
ZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IHZlcnRleCBzaGFkZXJzIG9ubHkuCisg
ICAgICAgIC8vCisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJp
bmcmIHMgPSBCdWlsdEluRnVuY3Rpb25zVmVydGV4OworCisgICAgICAgIC8vCisgICAgICAgIC8v
IEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgZnRyYW5zZm9ybSgpOyIpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBUZXh0
dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCB0ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGxvZCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2Ft
cGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZl
YzQgY29vcmQsIGZsb2F0IGxvZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQg
bG9kKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAg
IHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8v
IFByb3RvdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IGZyYWdtZW50IHNoYWRl
cnMgb25seS4KKyAgICAgICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAg
ICAgICAgVFN0cmluZyYgcyA9IEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudDsKKworICAgICAgICAv
LworICAgICAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29v
cmQsIGZsb2F0IGJpYXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0
dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
c2FtcGxlciwgdmVjNCBjb29yZCwgZmxvYXQgYmlhcyk7IikpOworCisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29y
ZCwgZmxvYXQgYmlhcyk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZk
eChmbG9hdCBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeCh2ZWMy
ICBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZEZkeCh2ZWMzICBwKTsi
KSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZEZkeCh2ZWM0ICBwKTsiKSk7CisK
KyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkRmR5KGZsb2F0IHApOyIpKTsKKyAgICAv
LwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBkRmR5KHZlYzIgIHApOyIpKTsKKyAgICAvLwlzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR5KHZlYzMgIHApOyIpKTsKKyAgICAvLwlzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBkRmR5KHZlYzQgIHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBmd2lkdGgoZmxvYXQgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMzICBmd2lkdGgodmVjMyAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBmd2lkdGgodmVjNCAgcCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikp
OworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAv
LworICAgICAgICAvLyBTdGFuZGFyZCBVbmlmb3JtcworICAgICAgICAvLworICAgICAgICAvLz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gU3RhbmRhcmRVbmlmb3Jt
czsKKworICAgICAgICAvLworICAgICAgICAvLyBEZXB0aCByYW5nZSBpbiB3aW5kb3cgY29vcmRp
bmF0ZXMKKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygic3RydWN0IGdsX0Rl
cHRoUmFuZ2VQYXJhbWV0ZXJzIHsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBo
aWdocCBmbG9hdCBuZWFyOyIpKTsgICAgICAgIC8vIG4KKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiICAgIGhpZ2hwIGZsb2F0IGZhcjsiKSk7ICAgICAgICAgLy8gZgorICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCIgICAgaGlnaHAgZmxvYXQgZGlmZjsiKSk7ICAgICAgICAvLyBmIC0gbgorICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ9OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVmYXVsdCBwcmVjaXNp
b24gZm9yIHZlcnRleCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gVmVydGV4RGVmYXVsdFByZWNpc2lvbjsK
KworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gaGlnaHAgaW50OyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAgIC8vIERlZmF1bHQgcHJlY2lzaW9u
IGZvciBmcmFnbWVudCBzaGFkZXJzLgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKyAgICAgICAgCisgICAgICAgIFRTdHJpbmcmIHMgPSBGcmFnbWVudERlZmF1bHRQ
cmVjaXNpb247CisgICAgICAgIAorICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24g
bWVkaXVtcCBpbnQ7IikpOworICAgICAgICAvLyBObyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxv
YXQgaW4gZnJhZ21lbnQgc2hhZGVycworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsK
KyAgICB9CisKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhG
cmFnbWVudERlZmF1bHRQcmVjaXNpb24pOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFn
bWVudF0ucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnMuY19zdHIoKSk7CisgICAgYnVpbHRJblN0
cmluZ3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50
KTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhTdGFuZGFy
ZFVuaWZvcm1zKTsKKyAgICAKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNo
X2JhY2soVmVydGV4RGVmYXVsdFByZWNpc2lvbik7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFu
Z1ZlcnRleF0ucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnMpOworICAgIGJ1aWx0SW5TdHJpbmdz
W0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zVmVydGV4KTsKKyAgICBi
dWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jtcyk7
Cit9CisKK3ZvaWQgVEJ1aWx0SW5zOjppbml0aWFsaXplKGNvbnN0IFRCdWlsdEluUmVzb3VyY2Ug
JnJlc291cmNlcykKK3sKKyAgICBUU3RyaW5nU3RyZWFtIGJ1aWx0SW5zOworCisgICAgLy8gSW1w
bGVtZW50YXRpb24gZGVwZW5kZW50IGNvbnN0YW50cworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBp
bnQgZ2xfTWF4VmVydGV4QXR0cmlicyA9ICIgPDwgcmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMg
PDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VW5pZm9ybVZl
Y3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisK
KyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZhcnlpbmdWZWN0b3JzID0gIiA8PCBy
ZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPDwgIjsiOworICAgIGJ1aWx0SW5zIDw8ICJjb25z
dCBpbnQgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGlu
dCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGlu
dCBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFn
ZVVuaXRzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
IDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0g
IiA8PCByZXNvdXJjZXMubWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworCisgICAgYnVpbHRJblN0cmlu
Z3NbRVNoTGFuZ0ZyYWdtZW50XS5wdXNoX2JhY2soYnVpbHRJbnMuc3RyKCkpOworICAgIGJ1aWx0
SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhidWlsdElucy5zdHIoKSk7Cit9CisK
K3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKK3sKKyAgICAvLworICAgIC8vIEZpcnN0LCBpbnNlcnQgc29tZSBzcGVj
aWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW4gCisgICAgLy8gdGhlIGJ1aWx0
LWluIGhlYWRlciBmaWxlcy4KKyAgICAvLworICAgIHN3aXRjaChsYW5ndWFnZSkgeworCisgICAg
Y2FzZSBFU2hMYW5nRnJhZ21lbnQ6IHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAg
ICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwor
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVi
cFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENv
b3JkIiksICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9p
bnRDb29yZCwgIDIpKSk7CisKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
RVNoTGFuZ1ZlcnRleDoKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGln
aCwgRXZxUG9zaXRpb24sICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vCisgICAgLy8gTmV4dCwgaWRlbnRpZnkg
d2hpY2ggYnVpbHQtaW5zIGZyb20gdGhlIGFscmVhZHkgbG9hZGVkIGhlYWRlcnMgaGF2ZQorICAg
IC8vIGEgbWFwcGluZyB0byBhbiBvcGVyYXRvci4gIFRob3NlIHRoYXQgYXJlIG5vdCBpZGVudGlm
aWVkIGFzIHN1Y2ggYXJlCisgICAgLy8gZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBh
IGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKKyAgICAvLyBvcGVyYXRpb25zLgorICAg
IC8vCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgICAg
IEVPcFZlY3RvckxvZ2ljYWxOb3QpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJlcXVhbCIsICAgICAgICAgICAgRU9wVmVjdG9yRXF1YWwpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RF
cXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW4iLCAgICAg
ICAgIEVPcExlc3NUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVh
dGVyVGhhbiIsICAgICAgRU9wR3JlYXRlclRoYW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJncmVhdGVyVGhhbkVxdWFsIiwgRU9wR3JlYXRlclRo
YW5FcXVhbCk7CisgICAgCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmFkaWFu
cyIsICAgICAgRU9wUmFkaWFucyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZGVncmVlcyIsICAgICAgRU9wRGVncmVlcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigic2luIiwgICAgICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJjb3MiLCAgICAgICAgICBFT3BDb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoInRhbiIsICAgICAgICAgIEVPcFRhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiYXNpbiIsICAgICAgICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiYWNvcyIsICAgICAgICAgRU9wQWNvcyk7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiYXRhbiIsICAgICAgICAgRU9wQXRhbik7CisKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAgICAgIEVPcEV4cDIpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAgICAgICAgIEVPcExvZyk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cyIiwgICAgICAgICBFT3BMb2cyKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzcXJ0IiwgICAgICAgICBFT3BTcXJ0
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJpbnZlcnNlc3FydCIsICBFT3BJ
bnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAg
ICAgICAgICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24i
LCAgICAgICAgIEVPcFNpZ24pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZs
b29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJjZWlsIiwgICAgICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJmcmFjdCIsICAgICAgICBFT3BGcmFjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZW5ndGgiLCAgICAgICBFT3BMZW5n
dGgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRpc3RhbmNlIiwgICAgIEVP
cERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkb3QiLCAgICAg
ICAgICBFT3BEb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNyb3NzIiwg
ICAgICAgIEVPcENyb3NzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3Jt
YWxpemUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImZhY2Vmb3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJyZWZsZWN0IiwgICAgICBFT3BSZWZsZWN0KTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKKyAgICAKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7
CisKKyAgICBzd2l0Y2gobGFuZ3VhZ2UpCisgICAgeworICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6CisgICAgLy8Jc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgICAgICAgRU9wRFBkeCk7ICAgICAvLyBP
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy8Jc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZEZkeSIsICAgICAgICAgRU9wRFBkeSk7ICAgICAvLyBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy8Jc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZndpZHRoIiwgICAgICAgRU9wRndpZHRoKTsgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgZXh0ZW5zaW9uCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGFzc2VydChmYWxz
ZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1cHBvcnRlZCIpOworICAgIH0KK30KKwordm9pZCBJZGVudGlm
eUJ1aWx0SW5zKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBjb25zdCBUQnVpbHRJblJlc291cmNlICZyZXNvdXJjZXMpCit7CisgICAgLy8KKyAgICAvLyBG
aXJzdCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90
IGluIAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0
Y2gobGFuZ3VhZ2UpIHsKKworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAg
ICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KKyAgICAgICAgICAgIFRU
eXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0LCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLm1h
eERyYXdCdWZmZXJzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KK30KKwor
Y29uc3QgY2hhciogR2V0UHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZygpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIgKlByZXByb2Nlc3NvckJ1aWx0aW5TdHJpbmcgPSAiIjsKKworICAgIHJldHVy
biBQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5nOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBf
SU5JVElBTElaRV9JTkNMVURFRF8KKyNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCisKKyNp
bmNsdWRlICJHTFNMQU5HL1Jlc291cmNlTGltaXRzLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9D
b21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1N5bWJvbFRhYmxlLmgiCisKK3R5cGVkZWYgVFZlY3RvcjxUU3RyaW5nPiBUQnVpbHRJblN0
cmluZ3M7CisKK2NsYXNzIFRCdWlsdElucyB7CitwdWJsaWM6CisJUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorCXZvaWQgaW5pdGlhbGl6ZSgpOworCXZvaWQg
aW5pdGlhbGl6ZShjb25zdCBUQnVpbHRJblJlc291cmNlJiByZXNvdXJjZXMpOworCVRCdWlsdElu
U3RyaW5ncyogZ2V0QnVpbHRJblN0cmluZ3MoKSB7IHJldHVybiBidWlsdEluU3RyaW5nczsgfQor
cHJvdGVjdGVkOgorCVRCdWlsdEluU3RyaW5ncyBidWlsdEluU3RyaW5nc1tFU2hMYW5nQ291bnRd
OworfTsKKwordm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlLCBUU3ltYm9sVGFibGUm
KTsKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSwgVFN5bWJvbFRhYmxlJiwgY29u
c3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKTsKK2Jvb2wgR2VuZXJhdGVCdWlsdEluU3lt
Ym9sVGFibGUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLCBUSW5mb1NpbmsmLCBU
U3ltYm9sVGFibGUqLCBFU2hMYW5ndWFnZSBsYW5ndWFnZSA9IEVTaExhbmdDb3VudCk7Citib29s
IEluaXRpYWxpemVTeW1ib2xUYWJsZShUQnVpbHRJblN0cmluZ3MqIEJ1aWx0SW5TdHJpbmdzLCBF
U2hMYW5ndWFnZSBsYW5ndWFnZSwgVEluZm9TaW5rJiBpbmZvU2luaywgY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSAqcmVzb3VyY2VzLCBUU3ltYm9sVGFibGUqKTsKK2NvbnN0IGNoYXIqIEdldFByZXBy
b2Nlc3NvckJ1aWx0aW5TdHJpbmcoKTsKK2V4dGVybiAiQyIgaW50IEluaXRQcmVwcm9jZXNzb3Io
dm9pZCk7CitleHRlcm4gIkMiIGludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKKworI2Vu
ZGlmIC8vIF9JTklUSUFMSVpFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVEbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplRGxsLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
RGxsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCisKKyNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorCitPU19U
TFNJbmRleCBUaHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKwor
Ym9vbCBJbml0UHJvY2VzcygpCit7CisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCAhPSBP
U19JTlZBTElEX1RMU19JTkRFWCkgeworCQkvLworCQkvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50
LgorCQkvLworICAgICAgICByZXR1cm4gdHJ1ZTsKKwl9CisKKyAgICBUaHJlYWRJbml0aWFsaXpl
SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUlu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0
UHJvY2VzcygpOiBGYWlsZWQgdG8gYWxsb2NhdGUgVExTIGFyZWEgZm9yIGluaXQgZmxhZyIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisKKyAgICBpZiAoIUluaXRpYWxpemVQb29sSW5k
ZXgoKSkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGlu
aXRhbGl6ZSBnbG9iYWwgcG9vbCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAg
aWYgKCFJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKSkgeworICAgICAgICBhc3NlcnQoMCAm
JiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBwYXJzZSBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKwl9CisKKwlJbml0VGhyZWFkKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKworYm9vbCBJbml0VGhyZWFkKCkKK3sKKwkvLworICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgcmUtZW50cmFudAorCS8vCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBP
U19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBQcm9j
ZXNzIGhhc24ndCBiZWVuIGluaXRhbGlzZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9
CisKKyAgICBpZiAoT1NfR2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworCUluaXRpYWxpemVHbG9iYWxQb29scygpOworCisJaWYg
KCFJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghT1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAq
KTEpKSB7CisJCWFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBm
bGFnLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworYm9vbCBEZXRhY2hUaHJlYWQoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisK
KyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworCS8vCisJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBh
bmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KKwkvLworICAgIGlm
IChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApIHsKKyAgICAgICAg
aWYgKCFPU19TZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMCkpIHsK
KwkJCWFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxh
Zy4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCisJCUZyZWVHbG9iYWxQ
b29scygpOworCisJCWlmICghRnJlZVBhcnNlQ29udGV4dCgpKQorICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOworCX0KKworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIERldGFjaFBy
b2Nlc3MoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAoVGhyZWFkSW5p
dGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIFNoRmluYWxpemUoKTsKKworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsK
KworCUZyZWVQb29sSW5kZXgoKTsKKworCWlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCisg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJbml0
aWFsaXplSW5kZXgpOworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURfVExT
X0lOREVYOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZURsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplRGxsLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
I2lmbmRlZiBfX0lOSVRJQUxJWkVETExfSAorI2RlZmluZSBfX0lOSVRJQUxJWkVETExfSAorCisK
KyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworCitib29sIEluaXRQcm9jZXNzKCk7
Citib29sIEluaXRUaHJlYWQoKTsKK2Jvb2wgRGV0YWNoVGhyZWFkKCk7Citib29sIERldGFjaFBy
b2Nlc3MoKTsKKworI2VuZGlmIC8vIF9fSU5JVElBTElaRURMTF9ICisKSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVHbG9iYWxzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVE
RURfCisjZGVmaW5lIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXworCit2b2lkIEluaXRp
YWxpemVHbG9iYWxQb29scygpOwordm9pZCBGcmVlR2xvYmFsUG9vbHMoKTsKK2Jvb2wgSW5pdGlh
bGl6ZVBvb2xJbmRleCgpOwordm9pZCBGcmVlUG9vbEluZGV4KCk7CisKKyNlbmRpZiAvLyBfX0lO
SVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0
aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRf
SU5DTFVERURfCisjZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwor
I2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCitib29sIEluaXRpYWxpemVQYXJzZUNv
bnRleHRJbmRleCgpOworYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7Citib29s
IEZyZWVQYXJzZUNvbnRleHQoKTsKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCk7CisKKwor
I2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUu
aCIKKworLy8KKy8vIFRyYXZlcnNlIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJl
ZSwgYW5kCisvLyBjYWxsIGEgbm9kZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5v
ZGUuCisvLyBEb25lIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2
ZXJzZSgpLgorLy8gTm9kZSB0eXBlcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0
byBjYWxsIGlzIDAsCisvLyBidXQgdGhlaXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNl
ZC4KKy8vIE5vZGVzIHdpdGggY2hpbGRyZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBz
a2lwcGVkCisvLyBpZiBwcmVWaXNpdCBpcyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmlj
IGZ1bmN0aW9uCisvLyByZXR1cm5zIGZhbHNlLgorLy8KKy8vIHByZVZpc2l0LCBwb3N0VmlzaXQs
IGFuZCByaWdodFRvTGVmdCBjb250cm9sIHdoYXQgb3JkZXIKKy8vIG5vZGVzIGFyZSB2aXNpdGVk
IGluLgorLy8KKworLy8KKy8vIFRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUg
c3RyYWlnaGZvcndhcmQuLi4uCisvLwordm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlpdC0+dmlzaXRTeW1ib2wodGhpcyk7Cit9CisKK3ZvaWQg
VEludGVybUNvbnN0YW50VW5pb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQorewor
CWl0LT52aXNpdENvbnN0YW50VW5pb24odGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGJp
bmFyeSBub2RlLgorLy8KK3ZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9IHRydWU7CisKKwkvLworCS8vIHZpc2l0IHRoZSBu
b2RlIGJlZm9yZSBjaGlsZHJlbiBpZiBwcmUtdmlzaXRpbmcuCisJLy8KKwlpZihpdC0+cHJlVmlz
aXQpCisJeworCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7CisJfQor
CQorCS8vCisJLy8gVmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCisJLy8K
KwlpZih2aXNpdCkKKwl7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCisJCWlmKGl0LT5yaWdo
dFRvTGVmdCkgCisJCXsKKwkJCWlmKHJpZ2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2ZXJzZShp
dCk7CisJCQl9CisJCQkKKwkJCWlmKGl0LT5pblZpc2l0KQorCQkJeworCQkJCXZpc2l0ID0gaXQt
PnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOworCQkJfQorCisJCQlpZih2aXNpdCAmJiBsZWZ0
KQorCQkJeworCQkJCWxlZnQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsK
KwkJCWlmKGxlZnQpCisJCQl7CisJCQkJbGVmdC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQkJCisJ
CQlpZihpdC0+aW5WaXNpdCkKKwkJCXsKKwkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZp
c2l0LCB0aGlzKTsKKwkJCX0KKworCQkJaWYodmlzaXQgJiYgcmlnaHQpCisJCQl7CisJCQkJcmln
aHQtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQorCisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOwor
CX0KKworCS8vCisJLy8gVmlzaXQgdGhlIG5vZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1
ZXN0ZWQgYW5kIHRoZSB0cmF2ZXJzYWwKKwkvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0Lgor
CS8vCisJaWYodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdEJpbmFyeShQ
b3N0VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNlIGEgdW5hcnkgbm9kZS4g
IFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRl
cm1VbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7CisJYm9vbCB2aXNpdCA9
IHRydWU7CisKKwlpZiAoaXQtPnByZVZpc2l0KQorCQl2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFBy
ZVZpc2l0LCB0aGlzKTsKKworCWlmICh2aXNpdCkgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsK
KwkJb3BlcmFuZC0+dHJhdmVyc2UoaXQpOworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisJ
CisJaWYgKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJCWl0LT52aXNpdFVuYXJ5KFBvc3RWaXNp
dCwgdGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUg
Y29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1BZ2dy
ZWdhdGU6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0
cnVlOworCQorCWlmKGl0LT5wcmVWaXNpdCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVn
YXRlKFByZVZpc2l0LCB0aGlzKTsKKwl9CisJCisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVt
ZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpCisJCXsKKwkJCWZvcihUSW50ZXJt
U2VxdWVuY2U6OnJldmVyc2VfaXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAh
PSBzZXF1ZW5jZS5yZW5kKCk7IHNpdCsrKQorCQkJeworCQkJCSgqc2l0KS0+dHJhdmVyc2UoaXQp
OworCisJCQkJaWYodmlzaXQgJiYgaXQtPmluVmlzaXQpCisJCQkJeworCQkJCQlpZigqc2l0ICE9
IHNlcXVlbmNlLmZyb250KCkpCisJCQkJCXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVn
YXRlKEluVmlzaXQsIHRoaXMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJ
eworCQkJZm9yKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4o
KTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKwkJCXsKKwkJCQkoKnNpdCktPnRyYXZl
cnNlKGl0KTsKKworCQkJCWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQorCQkJCXsKKwkJCQkJaWYo
KnNpdCAhPSBzZXF1ZW5jZS5iYWNrKCkpCisJCQkJCXsKKwkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0
QWdncmVnYXRlKEluVmlzaXQsIHRoaXMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCQor
CQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0
KQorCXsKKwkJaXQtPnZpc2l0QWdncmVnYXRlKFBvc3RWaXNpdCwgdGhpcyk7CisJfQorfQorCisv
LworLy8gVHJhdmVyc2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5
IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5w
cmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+dmlzaXRTZWxlY3Rpb24oUHJlVmlzaXQsIHRoaXMpOwor
CQorCWlmICh2aXNpdCkgeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKwkJaWYgKGl0LT5yaWdo
dFRvTGVmdCkgeworCQkJaWYgKGZhbHNlQmxvY2spCisJCQkJZmFsc2VCbG9jay0+dHJhdmVyc2Uo
aXQpOworCQkJaWYgKHRydWVCbG9jaykKKwkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJ
CWNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOworCQl9IGVsc2UgeworCQkJY29uZGl0aW9uLT50cmF2
ZXJzZShpdCk7CisJCQlpZiAodHJ1ZUJsb2NrKQorCQkJCXRydWVCbG9jay0+dHJhdmVyc2UoaXQp
OworCQkJaWYgKGZhbHNlQmxvY2spCisJCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOworCQl9
CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZp
c2l0KQorCQlpdC0+dmlzaXRTZWxlY3Rpb24oUG9zdFZpc2l0LCB0aGlzKTsKK30KKworLy8KKy8v
IFRyYXZlcnNlIGEgbG9vcCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBs
eSBoZXJlLgorLy8KK3ZvaWQgVEludGVybUxvb3A6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIq
IGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJ
dmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0aGlzKTsKKwl9CisJCisJaWYodmlzaXQp
CisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpCisJ
CXsKKwkJCWlmKHRlcm1pbmFsKQorCQkJeworCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJ
CQl9CisKKwkJCWlmKGJvZHkpCisJCQl7CisJCQkJYm9keS0+dHJhdmVyc2UoaXQpOworCQkJfQor
CisJCQlpZih0ZXN0KQorCQkJeworCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKwkJfQor
CQllbHNlCisJCXsKKwkJCWlmKHRlc3QpCisJCQl7CisJCQkJdGVzdC0+dHJhdmVyc2UoaXQpOwor
CQkJfQorCisJCQlpZihib2R5KQorCQkJeworCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKKwkJCX0K
KworCQkJaWYodGVybWluYWwpCisJCQl7CisJCQkJdGVybWluYWwtPnRyYXZlcnNlKGl0KTsKKwkJ
CX0KKwkJfQorCisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKworCWlmKHZpc2l0ICYmIGl0
LT5wb3N0VmlzaXQpCisJeworCQlpdC0+dmlzaXRMb29wKFBvc3RWaXNpdCwgdGhpcyk7CisJfQor
fQorCisvLworLy8gVHJhdmVyc2UgYSBicmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmlu
YXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5w
cmVWaXNpdCkKKwkJdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOworCQor
CWlmICh2aXNpdCAmJiBleHByZXNzaW9uKSB7CisJCWl0LT5pbmNyZW1lbnREZXB0aCgpOworCQll
eHByZXNzaW9uLT50cmF2ZXJzZShpdCk7CisJCWl0LT5kZWNyZW1lbnREZXB0aCgpOworCX0KKwor
CWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+dmlzaXRCcmFuY2goUG9zdFZpc2l0
LCB0aGlzKTsKK30KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gQnVpbGQg
dGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vCisKKyNpbmNsdWRlIDxmbG9hdC5o
PgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1l
ZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKKworYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRU
eXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3Rh
bnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpOworCitUUHJlY2lzaW9uIEdldEhpZ2hlc3RQcmVjaXNp
b24oIFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCApeworICAgIHJldHVybiBsZWZ0
ID4gcmlnaHQgPyBsZWZ0IDogcmlnaHQ7Cit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8g
Rmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uLgorLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgbWVtYmVyIGZ1bmN0
aW9ucyBvZiB0aGUgbm9kZXMuCisvLyBUaGV5IGFyZSBjYWxsZWQgZnJvbSBwYXJzZXIgcHJvZHVj
dGlvbnMuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIEFkZCBhIHRlcm1pbmFs
IG5vZGUgZm9yIGFuIGlkZW50aWZpZXIgaW4gYW4gZXhwcmVzc2lvbi4KKy8vCisvLyBSZXR1cm5z
IHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5
bWJvbChpbnQgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGNvbnN0IFRUeXBlJiB0eXBlLCBUU291
cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybVN5bWJvbCogbm9kZSA9IG5ldyBUSW50ZXJtU3lt
Ym9sKGlkLCBuYW1lLCB0eXBlKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0
dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB3aXRoIGEgbmV3IHBhcmVu
dCB0aGF0IGRvZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIHRoZSBub2Rlcy4KKy8vCisvLyBSZXR1
cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRk
QmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVk
KiByaWdodCwgVFNvdXJjZUxvYyBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlw
ZSgpLmlzTWF0cml4KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRU
eXBlKCkuaXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgIGNhc2Ug
RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgorICAgICAgICAgICAg
aWYgKGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IGxlZnQtPmdl
dFR5cGUoKS5pc01hdHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+
Z2V0VHlwZSgpLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAg
ICAgY2FzZSBFT3BTdWI6CisgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNlIEVPcE11
bDoKKyAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0IHx8IGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisK
KyAgICAvLworICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21w
YXRpYmxlIHR5cGVzLgorICAgIC8vCisKKyAgICBpZiAoIShsZWZ0LT5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCkgJiYgcmlnaHQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkpIHsKKyAgICAgICAgVEludGVy
bVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQp
OworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICByaWdodCA9IGNoaWxkOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgcmlnaHQtPmdl
dFR5cGUoKSwgbGVmdCk7CisgICAgICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICAgICAg
bGVmdCA9IGNoaWxkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAh
PSByaWdodC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisKKyAg
ICAvLworICAgIC8vIE5lZWQgYSBuZXcgbm9kZSBob2xkaW5nIHRoaW5ncyB0b2dldGhlciB0aGVu
LiAgTWFrZQorICAgIC8vIG9uZSBhbmQgcHJvbW90ZSBpdCB0byB0aGUgcmlnaHQgdHlwZS4KKyAg
ICAvLworICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBuZXcgVEludGVybUJpbmFyeShvcCk7Cisg
ICAgaWYgKGxpbmUgPT0gMCkKKyAgICAgICAgbGluZSA9IHJpZ2h0LT5nZXRMaW5lKCk7CisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIG5vZGUtPnNldExlZnQobGVmdCk7CisgICAgbm9k
ZS0+c2V0UmlnaHQocmlnaHQpOworICAgIGlmICghIG5vZGUtPnByb21vdGUoaW5mb1NpbmspKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENv
bnN0YW50ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgVEludGVybUNvbnN0YW50
VW5pb24gKnJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
CisgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQpCisgICAgICAgIGxlZnRUZW1wQ29uc3RhbnQgPSBs
ZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgIGlmIChyaWdodFRlbXBDb25zdGFudCkK
KyAgICAgICAgcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CisKKyAgICAvLworICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCisgICAgLy8K
KworICAgIFRJbnRlcm1UeXBlZCogdHlwZWRSZXR1cm5Ob2RlID0gMDsKKyAgICBpZiAoIGxlZnRU
ZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKKyAgICAgICAgdHlwZWRSZXR1cm5O
b2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25z
dGFudCwgaW5mb1NpbmspOworCisgICAgICAgIGlmICh0eXBlZFJldHVybk5vZGUpCisgICAgICAg
ICAgICByZXR1cm4gdHlwZWRSZXR1cm5Ob2RlOworICAgIH0KKworICAgIHJldHVybiBub2RlOwor
fQorCisvLworLy8gQ29ubmVjdCB0d28gbm9kZXMgdGhyb3VnaCBhbiBhc3NpZ25tZW50LgorLy8K
Ky8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1U
eXBlZCogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICAvLworICAgIC8vIExpa2UgYWRk
aW5nIGJpbmFyeSBtYXRoLCBleGNlcHQgdGhlIGNvbnZlcnNpb24gY2FuIG9ubHkgZ28KKyAgICAv
LyBmcm9tIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0g
bmV3IFRJbnRlcm1CaW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUg
PSBsZWZ0LT5nZXRMaW5lKCk7CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0
KTsKKyAgICBpZiAoY2hpbGQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBub2RlLT5z
ZXRMZWZ0KGxlZnQpOworICAgIG5vZGUtPnNldFJpZ2h0KGNoaWxkKTsKKyAgICBpZiAoISBub2Rl
LT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbm9k
ZTsKK30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2ggYW4gaW5kZXggb3BlcmF0
b3IsIHdoZXJlIHRoZSBsZWZ0IG5vZGUgaXMgdGhlIGJhc2UKKy8vIG9mIGFuIGFycmF5IG9yIHN0
cnVjdCwgYW5kIHRoZSByaWdodCBub2RlIGlzIGEgZGlyZWN0IG9yIGluZGlyZWN0IG9mZnNldC4K
Ky8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8gVGhlIGNhbGxlciBzaG91bGQgc2V0
IHRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRl
cm1UeXBlZCogaW5kZXgsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQmluYXJ5KiBu
b2RlID0gbmV3IFRJbnRlcm1CaW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAg
IGxpbmUgPSBpbmRleC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisgICAg
bm9kZS0+c2V0TGVmdChiYXNlKTsKKyAgICBub2RlLT5zZXRSaWdodChpbmRleCk7CisKKyAgICAv
LyBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8v
CisvLyBBZGQgb25lIG5vZGUgYXMgdGhlIHBhcmVudCBvZiBhbm90aGVyIHRoYXQgaXQgb3BlcmF0
ZXMgb24uCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQq
IFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBj
aGlsZE5vZGUsIFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sK
KyAgICBUSW50ZXJtVW5hcnkqIG5vZGU7CisgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGNoaWxk
Tm9kZS0+Z2V0QXNUeXBlZCgpOworCisgICAgaWYgKGNoaWxkID09IDApIHsKKyAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHR5cGUgaW4gQWRk
VW5hcnlNYXRoIiwgbGluZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRj
aCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OgorICAgICAgICAgICAgaWYgKGNo
aWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBjaGlsZC0+Z2V0VHlw
ZSgpLmlzTWF0cml4KCkgfHwgY2hpbGQtPmdldFR5cGUoKS5pc0FycmF5KCkgfHwgY2hpbGQtPmdl
dFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1l
bnQ6CisgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3RE
ZWNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVP
cE5lZ2F0aXZlOgorICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0IHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIERvIHdlIG5lZWQgdG8gcHJvbW90ZSB0aGUgb3BlcmFuZD8KKyAgICAvLworICAg
IC8vIE5vdGU6IEltcGxpY2l0IHByb21vdGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1
YWdlLgorICAgIC8vCisgICAgVEJhc2ljVHlwZSBuZXdUeXBlID0gRWJ0Vm9pZDsKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG5ld1R5cGUgPSBFYnRJ
bnQ7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG5ld1R5cGUgPSBF
YnRCb29sOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG5ld1R5cGUg
PSBFYnRGbG9hdDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAg
IGlmIChuZXdUeXBlICE9IEVidFZvaWQpIHsKKyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9u
KG9wLCBUVHlwZShuZXdUeXBlLCBjaGlsZC0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwK
KyAgICAgICAgICAgIGNoaWxkLT5nZXROb21pbmFsU2l6ZSgpLAorICAgICAgICAgICAgY2hpbGQt
PmlzTWF0cml4KCksCisgICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKKyAgICAgICAgICAg
IGNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICAvLworICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHdlIGFyZSBub3cgZG9u
ZSwgaXQncyBhbGwgaW4gdGhlIGNvbnZlcnNpb24uCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJvb2w6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICByZXR1
cm4gY2hpbGQ7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uICpjaGlsZFRlbXBDb25zdGFudCA9IDA7CisgICAgaWYgKGNoaWxkLT5nZXRB
c0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgY2hpbGRUZW1wQ29uc3RhbnQgPSBjaGlsZC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAvLworICAgIC8vIE1ha2UgYSBuZXcgbm9kZSBmb3Ig
dGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAgbm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkob3ApOwor
ICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSBjaGlsZC0+Z2V0TGluZSgpOworICAg
IG5vZGUtPnNldExpbmUobGluZSk7CisgICAgbm9kZS0+c2V0T3BlcmFuZChjaGlsZCk7CisKKyAg
ICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoY2hpbGRUZW1wQ29uc3RhbnQpICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbmV3Q2hp
bGQgPSBjaGlsZFRlbXBDb25zdGFudC0+Zm9sZChvcCwgMCwgaW5mb1NpbmspOworCisgICAgICAg
IGlmIChuZXdDaGlsZCkKKyAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIFRoaXMgaXMgdGhlIHNhZmUgd2F5IHRvIGNoYW5n
ZSB0aGUgb3BlcmF0b3Igb24gYW4gYWdncmVnYXRlLCBhcyBpdAorLy8gZG9lcyBsb3RzIG9mIGVy
cm9yIGNoZWNraW5nIGFuZCBmaXhpbmcuICBFc3BlY2lhbGx5IGZvciBlc3RhYmxpc2hpbmcKKy8v
IGEgZnVuY3Rpb24gY2FsbCdzIG9wZXJhdGlvbiBvbiBpdCdzIHNldCBvZiBwYXJhbWV0ZXJzLiAg
U2VxdWVuY2VzCisvLyBvZiBpbnN0cnVjdGlvbnMgYXJlIGFsc28gYWdncmVnYXRlcywgYnV0IHRo
ZXkganVzdCBkaXJlbmN0bHkgc2V0CisvLyB0aGVpciBvcGVyYXRvciB0byBFT3BTZXF1ZW5jZS4K
Ky8vCisvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSBub2RlLCB3aGljaCBjb3VsZCBiZSB0aGUgb25l
IHBhc3NlZCBpbiBpZgorLy8gaXQgd2FzIGFscmVhZHkgYW4gYWdncmVnYXRlLgorLy8KK1RJbnRl
cm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1O
b2RlKiBub2RlLCBUT3BlcmF0b3Igb3AsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJt
QWdncmVnYXRlKiBhZ2dOb2RlOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBh
biBhZ2dyZWdhdGUuICBJZiBub3QgdHVybiBpdCBpbnRvIG9uZS4KKyAgICAvLworICAgIGlmIChu
b2RlKSB7CisgICAgICAgIGFnZ05vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAg
ICBpZiAoYWdnTm9kZSA9PSAwIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE1ha2UgYW4gYWdncmVnYXRlIGNvbnRhaW5pbmcg
dGhpcyBub2RlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGFnZ05vZGUgPSBuZXcgVElu
dGVybUFnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNo
X2JhY2sobm9kZSk7CisgICAgICAgICAgICBpZiAobGluZSA9PSAwKQorICAgICAgICAgICAgICAg
IGxpbmUgPSBub2RlLT5nZXRMaW5lKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
YWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlKCk7CisKKyAgICAvLworICAgIC8vIFNldCB0
aGUgb3BlcmF0b3IuCisgICAgLy8KKyAgICBhZ2dOb2RlLT5zZXRPcGVyYXRvcihvcCk7CisgICAg
aWYgKGxpbmUgIT0gMCkKKyAgICAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJl
dHVybiBhZ2dOb2RlOworfQorCisvLworLy8gQ29udmVydCBvbmUgdHlwZSB0byBhbm90aGVyLgor
Ly8KKy8vIFJldHVybnMgdGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uLCB3aGlj
aCBjb3VsZCBiZSB0aGUgc2FtZQorLy8gbm9kZSBwYXNzZWQgaW4gaWYgbm8gY29udmVyc2lvbiB3
YXMgbmVlZGVkLgorLy8KKy8vIFJldHVybiAwIGlmIGEgY29udmVyc2lvbiBjYW4ndCBiZSBkb25l
LgorLy8KK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2lvbihUT3BlcmF0
b3Igb3AsIGNvbnN0IFRUeXBlJiB0eXBlLCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgLy8K
KyAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9uPworICAgIC8vCisgICAg
c3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICBjYXNlIEVidFZvaWQ6Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKwor
ICAgIC8vCisgICAgLy8gT3RoZXJ3aXNlLCBpZiB0eXBlcyBhcmUgaWRlbnRpY2FsLCBubyBwcm9i
bGVtCisgICAgLy8KKyAgICBpZiAodHlwZSA9PSBub2RlLT5nZXRUeXBlKCkpCisgICAgICAgIHJl
dHVybiBub2RlOworCisgICAgLy8KKyAgICAvLyBJZiBvbmUncyBhIHN0cnVjdHVyZSwgdGhlbiBu
byBjb252ZXJzaW9ucy4KKyAgICAvLworICAgIGlmICh0eXBlLmdldFN0cnVjdCgpIHx8IG5vZGUt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLworICAg
IC8vIElmIG9uZSdzIGFuIGFycmF5LCB0aGVuIG5vIGNvbnZlcnNpb25zLgorICAgIC8vCisgICAg
aWYgKHR5cGUuaXNBcnJheSgpIHx8IG5vZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgVEJhc2ljVHlwZSBwcm9tb3RlVG87CisKKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEV4cGxpY2l0IGNvbnZlcnNpb25zCisgICAgICAg
IC8vCisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgICAgIHByb21vdGVU
byA9IEVidEJvb2w7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RGbG9hdDoKKyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEZsb2F0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICAgICAgcHJvbW90
ZVRvID0gRWJ0SW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1v
dmVkIGZyb20gdGhlIGxhbmd1YWdlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpICE9IG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBT
aXplIGFuZCBzdHJ1Y3R1cmUgY291bGQgc3RpbGwgZGlmZmVyLCBidXQgdGhhdCdzCisgICAgICAg
ICAgICAvLyBoYW5kbGVkIGJ5IG9wZXJhdG9yIHByb21vdGlvbi4KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpIHsKKworICAgICAgICByZXR1cm4gKHByb21vdGVDb25zdGFudFVuaW9uKHBy
b21vdGVUbywgbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpKTsKKyAgICB9IGVsc2UgeworCisg
ICAgICAgIC8vCisgICAgICAgIC8vIEFkZCBhIG5ldyBuZXdOb2RlIGZvciB0aGUgY29udmVyc2lv
bi4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybVVuYXJ5KiBuZXdOb2RlID0gMDsKKworICAg
ICAgICBUT3BlcmF0b3IgbmV3T3AgPSBFT3BOdWxsOworICAgICAgICBzd2l0Y2ggKHByb21vdGVU
bykgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50
OiAgIG5ld09wID0gRU9wQ29udkludFRvRmxvYXQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgbmV3T3AgPSBFT3BDb252Qm9vbFRvRmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2Rl
Iiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udklu
dFRvQm9vbDsgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3
T3AgPSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0lu
dDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQg
cHJvbW90aW9uIG5vZGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCYWQgcHJvbW90aW9uIHR5cGUiLCBub2RlLT5nZXRM
aW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAg
VFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jhcnks
IG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmlzTWF0cml4KCksIG5vZGUtPmlzQXJyYXko
KSk7CisgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybVVuYXJ5KG5ld09wLCB0eXBlKTsKKyAg
ICAgICAgbmV3Tm9kZS0+c2V0TGluZShub2RlLT5nZXRMaW5lKCkpOworICAgICAgICBuZXdOb2Rl
LT5zZXRPcGVyYW5kKG5vZGUpOworCisgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgIH0KK30K
KworLy8KKy8vIFNhZmUgd2F5IHRvIGNvbWJpbmUgdHdvIG5vZGVzIGludG8gYW4gYWdncmVnYXRl
LiAgV29ya3Mgd2l0aCBudWxsIHBvaW50ZXJzLAorLy8gYSBub2RlIHRoYXQncyBub3QgYSBhZ2dy
ZWdhdGUgeWV0LCBldGMuCisvLworLy8gUmV0dXJucyB0aGUgcmVzdWx0aW5nIGFnZ3JlZ2F0ZSwg
dW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3IKKy8vIGJvdGggZXhpc3Rpbmcgbm9kZXMuCisvLwor
VEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6Z3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9k
ZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYg
KGxlZnQgPT0gMCAmJiByaWdodCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSAwOworICAgIGlmIChsZWZ0KQorICAgICAgICBhZ2dOb2Rl
ID0gbGVmdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoIWFnZ05vZGUgfHwgYWdnTm9kZS0+
Z2V0T3AoKSAhPSBFT3BOdWxsKSB7CisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5j
ZSgpLnB1c2hfYmFjayhsZWZ0KTsKKyAgICB9CisKKyAgICBpZiAocmlnaHQpCisgICAgICAgIGFn
Z05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKHJpZ2h0KTsKKworICAgIGlmIChsaW5lICE9
IDApCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9k
ZTsKK30KKworLy8KKy8vIFR1cm4gYW4gZXhpc3Rpbmcgbm9kZSBpbnRvIGFuIGFnZ3JlZ2F0ZS4K
Ky8vCisvLyBSZXR1cm5zIGFuIGFnZ3JlZ2F0ZSwgdW5sZXNzIDAgd2FzIHBhc3NlZCBpbiBmb3Ig
dGhlIGV4aXN0aW5nIG5vZGUuCisvLworVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6
bWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IGlmIChub2RlID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0
ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgIGFnZ05vZGUtPmdldFNlcXVl
bmNlKCkucHVzaF9iYWNrKG5vZGUpOworCisgICAgaWYgKGxpbmUgIT0gMCkKKyAgICAgICAgYWdn
Tm9kZS0+c2V0TGluZShsaW5lKTsKKyAgICBlbHNlCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUo
bm9kZS0+Z2V0TGluZSgpKTsKKworICAgIHJldHVybiBhZ2dOb2RlOworfQorCisvLworLy8gRm9y
ICJpZiIgdGVzdCBub2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24s
CisvLyBhIHRydWUgcGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIGlu
IHRoZQorLy8gbm9kZVBhaXIuCisvLworLy8gUmV0dXJucyB0aGUgc2VsZWN0aW9uIG5vZGUgY3Jl
YXRlZC4KKy8vCitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkU2VsZWN0aW9uKFRJbnRl
cm1UeXBlZCogY29uZCwgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyLCBUU291cmNlTG9jIGxpbmUp
Cit7CisgICAgLy8KKyAgICAvLyBGb3IgY29tcGlsZSB0aW1lIGNvbnN0YW50IHNlbGVjdGlvbnMs
IHBydW5lIHRoZSBjb2RlIGFuZAorICAgIC8vIHRlc3Qgbm93LgorICAgIC8vCisKKyAgICBpZiAo
Y29uZC0+Z2V0QXNUeXBlZCgpICYmIGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpIHsKKyAgICAgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGVQYWlyLm5vZGUxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
bm9kZVBhaXIubm9kZTI7CisgICAgfQorCisgICAgVEludGVybVNlbGVjdGlvbiogbm9kZSA9IG5l
dyBUSW50ZXJtU2VsZWN0aW9uKGNvbmQsIG5vZGVQYWlyLm5vZGUxLCBub2RlUGFpci5ub2RlMik7
CisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisKK1RJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBU
SW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKGxlZnQtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiByaWdodC0+Z2V0VHlwZSgpLmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9
IGVsc2UgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3Jl
Z2F0ZShsZWZ0LCByaWdodCwgbGluZSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRPcGVyYXRvcihFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRl
LT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOworICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0
VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIHJl
dHVybiBjb21tYUFnZ3JlZ2F0ZTsKKyAgICB9Cit9CisKKy8vCisvLyBGb3IgIj86IiB0ZXN0IG5v
ZGVzLiAgVGhlcmUgYXJlIHRocmVlIGNoaWxkcmVuOyBhIGNvbmRpdGlvbiwKKy8vIGEgdHJ1ZSBw
YXRoLCBhbmQgYSBmYWxzZSBwYXRoLiAgVGhlIHR3byBwYXRocyBhcmUgc3BlY2lmaWVkCisvLyBh
cyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIFJldHVybnMgdGhlIHNlbGVjdGlvbiBub2Rl
IGNyZWF0ZWQsIG9yIDAgaWYgb25lIGNvdWxkIG5vdCBiZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1UeXBl
ZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VMb2MgbGluZSkK
K3sKKyAgICAvLworICAgIC8vIEdldCBjb21wYXRpYmxlIHR5cGVzLgorICAgIC8vCisgICAgVElu
dGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24oRU9wU2VxdWVuY2UsIHRydWVCbG9jay0+
Z2V0VHlwZSgpLCBmYWxzZUJsb2NrKTsKKyAgICBpZiAoY2hpbGQpCisgICAgICAgIGZhbHNlQmxv
Y2sgPSBjaGlsZDsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVP
cFNlcXVlbmNlLCBmYWxzZUJsb2NrLT5nZXRUeXBlKCksIHRydWVCbG9jayk7CisgICAgICAgIGlm
IChjaGlsZCkKKyAgICAgICAgICAgIHRydWVCbG9jayA9IGNoaWxkOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNlZSBpZiBhbGwg
dGhlIG9wZXJhbmRzIGFyZSBjb25zdGFudCwgdGhlbiBmb2xkIGl0IG90aGVyd2lzZSBub3QuCisg
ICAgLy8KKworICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiB0cnVlQmxvY2st
PmdldEFzQ29uc3RhbnRVbmlvbigpICYmIGZhbHNlQmxvY2stPmdldEFzQ29uc3RhbnRVbmlvbigp
KSB7CisgICAgICAgIGlmIChjb25kLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKS0+Z2V0QkNvbnN0KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZUJsb2NrOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2VCbG9jazsKKyAgICB9CisKKyAg
ICAvLworICAgIC8vIE1ha2UgYSBzZWxlY3Rpb24gbm9kZS4KKyAgICAvLworICAgIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCB0cnVlQmxvY2ssIGZh
bHNlQmxvY2ssIHRydWVCbG9jay0+Z2V0VHlwZSgpKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUp
OworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25zdGFudCB0ZXJtaW5hbCBub2Rl
cy4gIEhhcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm9vbCwgZmxvYXQgb3IgaW50IGNvbnN0YW50
cworLy8KKy8vIFJldHVybnMgdGhlIGNvbnN0YW50IHVuaW9uIG5vZGUgY3JlYXRlZC4KKy8vCisK
K1RJbnRlcm1Db25zdGFudFVuaW9uKiBUSW50ZXJtZWRpYXRlOjphZGRDb25zdGFudFVuaW9uKENv
bnN0YW50VW5pb24qIHVuaW9uQXJyYXlQb2ludGVyLCBjb25zdCBUVHlwZSYgdCwgVFNvdXJjZUxv
YyBsaW5lKQoreworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlID0gbmV3IFRJbnRlcm1D
b25zdGFudFVuaW9uKHVuaW9uQXJyYXlQb2ludGVyLCB0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxp
bmUpOworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRTb3VyY2VMb2MgbGluZSkKK3sK
KworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShFT3BT
ZXF1ZW5jZSk7CisKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBjb25zdEludE5vZGU7CisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3Rv
ciA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIHVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0
SUNvbnN0KGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgY29uc3RJbnROb2RlID0gYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCBsaW5lKTsKKyAgICAgICAgc2VxdWVuY2VWZWN0b3IucHVzaF9iYWNrKGNvbnN0SW50Tm9k
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDcmVhdGUgbG9vcCBu
b2Rlcy4KKy8vCitUSW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkTG9vcChUSW50ZXJtTm9k
ZSAqaW5pdCwgVEludGVybU5vZGUqIGJvZHksIFRJbnRlcm1UeXBlZCogdGVzdCwgVEludGVybVR5
cGVkKiB0ZXJtaW5hbCwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBU
SW50ZXJtTm9kZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9vcChpbml0LCBib2R5LCB0ZXN0LCB0ZXJt
aW5hbCwgdGVzdEZpcnN0KTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKKy8vCisvLyBBZGQgYnJhbmNoZXMuCisvLworVEludGVybUJyYW5jaCogVElu
dGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFuY2hPcCwgVFNvdXJjZUxvYyBsaW5l
KQoreworICAgIHJldHVybiBhZGRCcmFuY2goYnJhbmNoT3AsIDAsIGxpbmUpOworfQorCitUSW50
ZXJtQnJhbmNoKiBUSW50ZXJtZWRpYXRlOjphZGRCcmFuY2goVE9wZXJhdG9yIGJyYW5jaE9wLCBU
SW50ZXJtVHlwZWQqIGV4cHJlc3Npb24sIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJt
QnJhbmNoKiBub2RlID0gbmV3IFRJbnRlcm1CcmFuY2goYnJhbmNoT3AsIGV4cHJlc3Npb24pOwor
ICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8v
IFRoaXMgaXMgdG8gYmUgZXhlY3V0ZWQgb25jZSB0aGUgZmluYWwgcm9vdCBpcyBwdXQgb24gdG9w
IGJ5IHRoZSBwYXJzaW5nCisvLyBwcm9jZXNzLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9z
dFByb2Nlc3MoVEludGVybU5vZGUqIHJvb3QsIEVTaExhbmd1YWdlIGxhbmd1YWdlKQoreworICAg
IGlmIChyb290ID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8KKyAgICAvLyBG
aXJzdCwgZmluaXNoIG9mZiB0aGUgdG9wIGxldmVsIHNlcXVlbmNlLCBpZiBhbnkKKyAgICAvLwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ1Jvb3QgPSByb290LT5nZXRBc0FnZ3JlZ2F0ZSgpOwor
ICAgIGlmIChhZ2dSb290ICYmIGFnZ1Jvb3QtPmdldE9wKCkgPT0gRU9wTnVsbCkKKyAgICAgICAg
YWdnUm9vdC0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vCisvLyBUaGlzIGRlbGV0ZXMgdGhlIHRyZWUuCisvLwordm9pZCBUSW50ZXJtZWRpYXRl
OjpyZW1vdmUoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgaWYgKHJvb3QpCisgICAgICAgIFJl
bW92ZUFsbFRyZWVOb2Rlcyhyb290KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1lbWJlciBmdW5j
dGlvbnMgb2YgdGhlIG5vZGVzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSB0cmVlLgorLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworLy8KKy8vIFNheSB3aGV0aGVyIG9yIG5vdCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2Vz
IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiBzdGF0ZSBp
cyBtb2RpZmllZC4KKy8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6bW9kaWZpZXNTdGF0ZSgpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6
CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNy
ZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcEFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIGNhc2UgRU9wU3ViQXNz
aWduOgorICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vCisvLyByZXR1cm5zIHRydWUgaWYgdGhlIG9w
ZXJhdG9yIGlzIGZvciBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycworLy8KK2Jvb2wgVEludGVybU9w
ZXJhdG9yOjppc0NvbnN0cnVjdG9yKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMz
OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgorICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorLy8KKy8vIE1ha2Ugc3VyZSB0aGUgdHlwZSBvZiBh
IHVuYXJ5IG9wZXJhdG9yIGlzIGFwcHJvcHJpYXRlIGZvciBpdHMKKy8vIGNvbWJpbmF0aW9uIG9m
IG9wZXJhdGlvbiBhbmQgb3BlcmFuZCB0eXBlLgorLy8KKy8vIFJldHVybnMgZmFsc2UgaW4gbm90
aGluZyBtYWtlcyBzZW5zZS4KKy8vCitib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1Np
bmsmKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90Ogor
ICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTmVnYXRpdmU6CisgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAg
Y2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAg
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gb3BlcmF0b3JzIGZvciBidWlsdC1p
bnMgYXJlIGFscmVhZHkgdHlwZSBjaGVja2VkIGFnYWluc3QgdGhlaXIgcHJvdG90eXBlCisgICAg
ICAgIGNhc2UgRU9wQW55OgorICAgICAgICBjYXNlIEVPcEFsbDoKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JMb2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9h
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc2V0VHlwZShv
cGVyYW5kLT5nZXRUeXBlKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBFc3Rh
Ymxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwor
Ly8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgor
Ly8KKy8vIFJldHVybnMgZmFsc2UgaWYgb3BlcmF0b3IgY2FuJ3Qgd29yayBvbiBvcGVyYW5kcy4K
Ky8vCitib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykKK3sK
KyAgICBpbnQgc2l6ZSA9IGxlZnQtPmdldE5vbWluYWxTaXplKCk7CisgICAgaWYgKHJpZ2h0LT5n
ZXROb21pbmFsU2l6ZSgpID4gc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHJpZ2h0LT5nZXROb21pbmFs
U2l6ZSgpOworCisgICAgVEJhc2ljVHlwZSB0eXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7CisK
KyAgICAvLworICAgIC8vIEFycmF5cyBoYXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCisgICAgLy8K
KyAgICBpZiAoKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSAmJiAobGVmdC0+
Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLworICAgIC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3QgbWFrZSB0aGUgdHlwZSB0aGUg
c2FtZSBhcyB0aGUgbGVmdAorICAgIC8vIG9wZXJhbmQuICBUaGVuIG9ubHkgZGV2aWF0aW9ucyBm
cm9tIHRoaXMgbmVlZCBiZSBjb2RlZC4KKyAgICAvLworICAgIHNldFR5cGUobGVmdC0+Z2V0VHlw
ZSgpKTsKKworICAgIFRQcmVjaXNpb24gaGlnaGVzdFByZWNpc2lvbiA9IEdldEhpZ2hlc3RQcmVj
aXNpb24obGVmdC0+Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7CisgICAg
Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUHJlY2lzaW9uKGhpZ2hlc3RQcmVjaXNpb24pOworCisg
ICAgLy8KKyAgICAvLyBBcnJheSBvcGVyYXRpb25zLgorICAgIC8vCisgICAgaWYgKGxlZnQtPmlz
QXJyYXkoKSkgeworCisgICAgICAgIHN3aXRjaCAob3ApIHsKKworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0
IGFycmF5IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9w
QXNzaWduOgorICAgICAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgICAg
IGdldFR5cGVQb2ludGVyKCktPnNldEFycmF5U2l6ZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlT
aXplKCkpOworICAgICAgICAgICAgICAgIGdldFR5cGVQb2ludGVyKCktPnNldEFycmF5SW5mb3Jt
YXRpb25UeXBlKGxlZnQtPmdldFR5cGUoKS5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLworICAgIC8vIEFsbCBzY2FsYXJzLiAgQ29kZSBhZnRlciB0aGlzIHRlc3Qg
YXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKKyAgICAvLworICAgIGlmIChzaXplID09IDEp
IHsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Y2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAg
ICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIGNhc2UgRU9wR3Jl
YXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gQW5kIGFuZCBPciBvcGVyYXRlIG9uIGNvbmRpdGlvbmFscworICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKKyAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgaGF2ZSBt
YXRjaGluZyB0eXBlcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5
cGUoKSB8fAorICAgICAgICAgICAgICAgICAgICBsZWZ0LT5pc01hdHJpeCgpICAgICAhPSByaWdo
dC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBcmUg
dGhlIHNpemVzIGNvbXBhdGlibGU/CisgICAgLy8KKyAgICBpZiAoIGxlZnQtPmdldE5vbWluYWxT
aXplKCkgIT0gc2l6ZSAmJiAgbGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxIHx8CisgICAgICAg
IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgcmlnaHQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBDYW4gdGhl
c2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJpbmVkPworICAgIC8vCisgICAgc3dpdGNoIChvcCkgewor
ICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAm
JiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3Rv
cigpKQorICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4OworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRp
bWVzU2NhbGFyOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hl
c3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpIHsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OworICAgICAg
ICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0
b3IoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVj
dAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2Nh
bGFyOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVj
aXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgICAgIGlmICghbGVmdC0+
aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVz
TWF0cml4QXNzaWduOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOworICAgICAg
ICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0
b3IoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVj
dAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoISBsZWZ0LT5pc1ZlY3Rvcigp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOworICAgICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6
ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Ik1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFz
c2lnbjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICAgICAgaWYgKGxlZnQt
PmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAg
IGNhc2UgRU9wQWRkOgorICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgY2FzZSBFT3BEaXY6
CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
KyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRy
aXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAorICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVj
dG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0LT5nZXRC
YXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lz
aW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0
cml4KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXF1YWw6Cisg
ICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoK
KyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAgICAgaWYgKGxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAgICAgICAgICBsZWZ0
LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAgICAgICAgICAgbGVm
dC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gT25lIG1vcmUg
Y2hlY2sgZm9yIGFzc2lnbm1lbnQuICBUaGUgUmVzdWx0aW5nIHR5cGUgaGFzIHRvIG1hdGNoIHRo
ZSBsZWZ0IG9wZXJhbmQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
RU9wQXNzaWduOgorICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6CisgICAgICAgIGNhc2UgRU9w
QWRkQXNzaWduOgorICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BN
dWxBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgaWYgKGdl
dFR5cGUoKSAhPSBsZWZ0LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb21wYXJlU3RydWN0KGNv
bnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwg
Q29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpCit7CisgICAgVFR5cGVMaXN0KiBmaWVsZHMg
PSBsZWZ0Tm9kZVR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICBzaXplX3Qgc3RydWN0U2l6ZSA9IGZp
ZWxkcy0+c2l6ZSgpOworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IHN0cnVjdFNpemU7IGorKykgeworICAgICAgICBpbnQgc2l6ZSA9ICgqZmllbGRzKVtq
XS50eXBlLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKCpmaWVsZHMpW2pdLnR5cGUtPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVy
ZSgqKCpmaWVsZHMpW2pdLnR5cGUsICZyaWdodFVuaW9uQXJyYXlbaW5kZXhdLCAmbGVmdFVuaW9u
QXJyYXlbaW5kZXhdKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdFVuaW9uQXJyYXlbaW5kZXhd
ICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgfQorCisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29tcGFyZVN0cnVjdHVyZShj
b25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXks
IENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAgIGlmIChsZWZ0Tm9kZVR5cGUu
aXNBcnJheSgpKSB7CisgICAgICAgIFRUeXBlIHR5cGVXaXRob3V0QXJyYXluZXNzID0gbGVmdE5v
ZGVUeXBlOworICAgICAgICB0eXBlV2l0aG91dEFycmF5bmVzcy5jbGVhckFycmF5bmVzcygpOwor
CisgICAgICAgIGludCBhcnJheVNpemUgPSBsZWZ0Tm9kZVR5cGUuZ2V0QXJyYXlTaXplKCk7CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICAg
ICAgaW50IG9mZnNldCA9IHR5cGVXaXRob3V0QXJyYXluZXNzLmdldE9iamVjdFNpemUoKSAqIGk7
CisgICAgICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3QodHlwZVdpdGhvdXRBcnJheW5lc3MsICZy
aWdodFVuaW9uQXJyYXlbb2Zmc2V0XSwgJmxlZnRVbmlvbkFycmF5W29mZnNldF0pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBy
ZXR1cm4gQ29tcGFyZVN0cnVjdChsZWZ0Tm9kZVR5cGUsIHJpZ2h0VW5pb25BcnJheSwgbGVmdFVu
aW9uQXJyYXkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBUaGUgZm9sZCBmdW5j
dGlvbnMgc2VlIGlmIGFuIG9wZXJhdGlvbiBvbiBhIGNvbnN0YW50IGNhbiBiZSBkb25lIGluIHBs
YWNlLAorLy8gd2l0aG91dCBnZW5lcmF0aW5nIHJ1bi10aW1lIGNvZGUuCisvLworLy8gUmV0dXJu
cyB0aGUgbm9kZSB0byBrZWVwIHVzaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgbm9k
ZSBwYXNzZWQgaW4uCisvLworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1Db25zdGFudFVuaW9uOjpm
b2xkKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBjb25zdGFudE5vZGUsIFRJbmZvU2luayYg
aW5mb1NpbmspCit7CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IGdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgaW50IG9iamVjdFNpemUgPSBnZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOworCisgICAgaWYgKGNvbnN0YW50Tm9kZSkgeyAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKKyAg
ICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUgPSBjb25zdGFudE5vZGUtPmdldEFzQ29u
c3RhbnRVbmlvbigpOworICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBu
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBUVHlwZSByZXR1cm5UeXBlID0g
Z2V0VHlwZSgpOworCisgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsg
dmVjNCgyLDMsNCw1KTsKKyAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAgICAgICByaWdodFVu
aW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIHJpZ2h0
VW5pb25BcnJheVtpXSA9ICpub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25zdGFudE5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkgewor
ICAgICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsg
MS4yOworICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50
Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBv
YmplY3RTaXplID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSAwOworICAg
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcE5vZGU7CisKKyAgICAgICAgYm9vbCBib29s
Tm9kZUZsYWcgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICBjYXNl
IEVPcEFkZDoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtp
XSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAg
ICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
RU9wTXVsOgorICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7
Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0aXBs
eSIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXpl
OyBjb2x1bW4rKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5z
ZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkg
KyB1bmlvbkFycmF5W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJy
YXlbY29sdW1uICogc2l6ZSArIGldLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFT3BEaXY6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAg
IGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgeworICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsICJEaXZpZGUgYnkgemVybyBlcnJv
ciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdChGTFRfTUFYKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0
KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVidEludDoK
KyAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRl
IGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOworICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldLnNldElDb25zdCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5
W2ldLmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiLCBn
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9y
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkg
eworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggdGlt
ZXMgdmVjdG9yIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CisKKyAgICAgICAgICAgICAgICB7Ly8gc3Vw
cG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5v
bWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtp
XS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkgKiBy
aWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdl
dExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xk
aW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4IiwgZ2V0TGluZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFs
U2l6ZSgpXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25B
cnJheVtqXS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNv
bnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2li
bGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJh
eVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9z
c2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07
CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25B
cnJheVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsv
LyBzdXBwb3J0IE1TVkMrKzYuMAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBD
b25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlb
aV0pID8gZmFsc2UgOiB0cnVlKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQo
ZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEVPcExlc3NUaGFuOgorICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpy
aWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9i
amVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
VHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7
CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJy
YXkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFj
b25zdGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29u
c3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJh
eSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcGFy
ZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCks
IHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHVuaW9uQXJyYXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVt
cE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9k
ZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2Rl
OworCisgICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICAgICBib29s
Tm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RB
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAg
ICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGVtcE5vZGU7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiSW52YWxpZCBvcGVy
YXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOworICAgICAgICB0ZW1wTm9kZS0+
c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLworICAgICAgICAvLyBEbyB1bmFyeSBvcGVyYXRpb25zCisgICAgICAg
IC8vCisgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpuZXdOb2RlID0gMDsKKyAgICAgICAg
Q29uc3RhbnRVbmlvbiogdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RT
aXplXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAg
ICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiB0ZW1wQ29uc3RBcnJheVtp
XS5zZXRGQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25z
dCgtdW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRl
ZCBpbnRvIGNvbnN0YW50IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBp
cyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQg
Y3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRCQ29uc3QoIXVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkpOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkg
b3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0
VHlwZSgpKTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworICAgICAgICBy
ZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKK30KKworVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21v
dGVUbywgVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlvbiAq
cmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICBpbnQg
c2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBDb25zdGFudFVu
aW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOworCisgICAgZm9y
IChpbnQgaT0wOyBpIDwgc2l6ZTsgaSsrKSB7CisKKyAgICAgICAgc3dpdGNoIChwcm9tb3RlVG8p
IHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRG
Q29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEJDb25zdCgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ld
ID0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDYW5ub3QgcHJvbW90ZSIs
IG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25z
dChzdGF0aWNfY2FzdDxpbnQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRJQ29u
c3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0QkNvbnN0KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAhPSAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0
VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0QkNvbnN0KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSAhPSAw
LjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkluY29y
cmVjdCBkYXRhIHR5cGUgZm91bmQiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSYgdCA9IG5v
ZGUtPmdldFR5cGUoKTsKKworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFy
cmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCks
IHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdl
dExpbmUoKSk7Cit9CisKK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6YWRkVG9QcmFnbWFUYWJsZShj
b25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSkKK3sKKyAgICBhc3NlcnQoIXByYWdtYVRhYmxlKTsK
KyAgICBwcmFnbWFUYWJsZSA9IG5ldyBUUHJhZ21hVGFibGUoKTsKKyAgICAqcHJhZ21hVGFibGUg
PSBwVGFibGU7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9NTWFwLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvTU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIF9NTUFQX0lOQ0xVREVEXworI2RlZmluZSBfTU1BUF9JTkNMVURF
RF8KKworLy8KKy8vIEVuY2Fwc3VsYXRlIG1lbW9yeSBtYXBwZWQgZmlsZXMKKy8vCisKK2NsYXNz
IFRNTWFwIHsKK3B1YmxpYzoKKyAgICBUTU1hcChjb25zdCBjaGFyKiBmaWxlTmFtZSkgOiAKKyAg
ICAgICAgZlNpemUoLTEpLCAvLyAtMSBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgR2V0
RmlsZVNpemUoKQorICAgICAgICBmcChOVUxMKSwKKyAgICAgICAgZkJ1ZmYoMCkgICAvLyAwIGlz
IHRoZSBlcnJvciB2YWx1ZSByZXR1cm5lZCBieSBNYXBWaWV3T2ZGaWxlKCkKKyAgICB7CisgICAg
ICAgIGlmICgoZnAgPSBmb3BlbihmaWxlTmFtZSwgInIiKSkgPT0gTlVMTCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2hhciBjID0gZ2V0YyhmcCk7CisgICAgICAgIGZTaXplID0gMDsK
KyAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7CisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAg
ICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB9CisgICAgICAgIGlmIChjID09IEVPRikKKyAg
ICAgICAgICAgIGZTaXplKys7CisgICAgICAgIHJld2luZChmcCk7CisgICAgICAgIGZCdWZmID0g
KGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiBmU2l6ZSk7CisgICAgICAgIGludCBjb3VudCA9
IDA7CisgICAgICAgIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgd2hpbGUgKGMgIT0gRU9GKSB7Cisg
ICAgICAgICAgICBmQnVmZltjb3VudCsrXSA9IGM7CisgICAgICAgICAgICBjID0gZ2V0YyhmcCk7
CisgICAgICAgIH0KKyAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBjOworICAgIH0KKworICAgIGNo
YXIqIGdldERhdGEoKSB7IHJldHVybiBmQnVmZjsgfQorICAgIGludCAgIGdldFNpemUoKSB7IHJl
dHVybiBmU2l6ZTsgfQorCisgICAgflRNTWFwKCkgeworICAgICAgICBpZiAoZnAgIT0gTlVMTCkK
KyAgICAgICAgICAgIGZjbG9zZShmcCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQg
ICAgICAgICAgICAgZlNpemU7ICAgICAgLy8gc2l6ZSBvZiBmaWxlIHRvIG1hcCBpbgorICAgIEZJ
TEUgKmZwOworICAgIGNoYXIqICAgICAgICAgICBmQnVmZjsgICAgICAvLyB0aGUgYWN0dWFsIGRh
dGE7Cit9OworCisjZW5kaWYgLy8gX01NQVBfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3NyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxlci9k
ZWJ1Zy5oIgorCituYW1lc3BhY2UKK3sKK1RTdHJpbmcgZ2V0VHlwZU5hbWUoY29uc3QgVFR5cGUm
IHR5cGUpCit7CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgaWYgKHR5cGUuaXNNYXRyaXgo
KSkKKyAgICB7CisgICAgICAgIG91dCA8PCAibWF0IjsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0
Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgInZlYyI7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiBvdXQgPDwgImJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxT
aXplKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1l
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5n
KCk7CisgICAgfQorICAgIHJldHVybiBUU3RyaW5nKG91dC5jX3N0cigpKTsKK30KKworVFN0cmlu
ZyBhcnJheUJyYWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIEFTU0VSVCh0eXBlLmlz
QXJyYXkoKSk7CisgICAgVEluZm9TaW5rQmFzZSBvdXQ7CisgICAgb3V0IDw8ICJbIiA8PCB0eXBl
LmdldEFycmF5U2l6ZSgpIDw8ICJdIjsKKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19zdHIoKSk7
Cit9CisKK2Jvb2wgaXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBp
ZiAoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoYWdncmVnYXRlLT5nZXRPcCgpICE9IEVPcEZ1
bmN0aW9uKSAmJgorICAgICAgICAgICAgICAgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSAhPSBFT3BTZXF1
ZW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRlcm1TZWxlY3Rpb24qIHNlbGVj
dGlvbiA9IG5vZGUtPmdldEFzU2VsZWN0aW9uTm9kZSgpKQorICAgIHsKKyAgICAgICAgLy8gVGVy
bmFyeSBvcGVyYXRvcnMgYXJlIHVzdWFsbHkgcGFydCBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9y
LgorICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhvc2UgcmFyZSBjYXNlcyBpbiB3aGljaCB0aGV5
IGFyZSBhbGwgYnkgdGhlbXNlbHZlcy4KKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi0+dXNlc1Rl
cm5hcnlPcGVyYXRvcigpOworICAgIH0KKyAgICBlbHNlIGlmIChub2RlLT5nZXRBc0xvb3BOb2Rl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorfSAgLy8gbmFtZXNwYWNlCisKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1Np
bmtCYXNlJiBvYmpTaW5rKQorICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVl
KSwKKyAgICAgIG1PYmpTaW5rKG9ialNpbmspLAorICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhm
YWxzZSkKK3sKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0
LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0
U3RyKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQgJiYgcHJlU3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8IHByZVN0cjsK
KyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCAmJiBpblN0cikKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBpblN0cjsKKyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZp
c2l0ICYmIHBvc3RTdHIpCisgICAgeworICAgICAgICBvdXQgPDwgcG9zdFN0cjsKKyAgICB9Cit9
CisKK3ZvaWQgVE91dHB1dEdMU0w6OndyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBl
KQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBUUXVhbGlmaWVy
IHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgLy8gVE9ETyhhbG9rcCk6IFZh
bGlkYXRlIHF1YWxpZmllciBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAgIGlmICgocXVh
bGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwpKQorICAg
ICAgICBvdXQgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAvLyBE
ZWNsYXJlIHRoZSBzdHJ1Y3QgaWYgd2UgaGF2ZSBub3QgZG9uZSBzbyBhbHJlYWR5LgorICAgIGlm
ICgodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpICYmCisgICAgICAgIChtRGVjbGFy
ZWRTdHJ1Y3RzLmZpbmQodHlwZS5nZXRUeXBlTmFtZSgpKSA9PSBtRGVjbGFyZWRTdHJ1Y3RzLmVu
ZCgpKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAic3RydWN0ICIgPDwgdHlwZS5nZXRUeXBlTmFt
ZSgpIDw8ICJ7XG4iOworICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUu
Z2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtpXS50
eXBlOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAgICAgICAg
IG91dCA8PCBnZXRUeXBlTmFtZSgqZmllbGRUeXBlKSA8PCAiICIgPDwgZmllbGRUeXBlLT5nZXRG
aWVsZE5hbWUoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXkoKSkKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKKyAgICAgICAgICAg
IG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQorICAgICAgICBvdXQgPDwgIn0iOworICAgICAgICBt
RGVjbGFyZWRTdHJ1Y3RzLmluc2VydCh0eXBlLmdldFR5cGVOYW1lKCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUodHlwZSk7CisgICAgfQorfQor
Cit2b2lkIFRPdXRwdXRHTFNMOjp3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhjb25zdCBUSW50ZXJt
U2VxdWVuY2UmIGFyZ3MpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwor
ICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gYXJncy5iZWdp
bigpOworICAgICAgICAgaXRlciAhPSBhcmdzLmVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAg
ICBjb25zdCBUSW50ZXJtU3ltYm9sKiBhcmcgPSAoKml0ZXIpLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KyAgICAgICAgQVNTRVJUKGFyZyAhPSBOVUxMKTsKKworICAgICAgICBjb25zdCBUVHlwZSYgdHlw
ZSA9IGFyZy0+Z2V0VHlwZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUu
Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZp
ZXIgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50cy4KKyAgICAgICAgaWYgKChxdWFsaWZpZXIgIT0gRXZx
VGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkpCisgICAgICAgICAgICBvdXQg
PDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICI7CisKKyAgICAgICAgb3V0IDw8IGdl
dFR5cGVOYW1lKHR5cGUpOworCisgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdl
dFN5bWJvbCgpOworICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIG91dCA8
PCAiICIgPDwgbmFtZTsKKyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgICAgICAgICAg
b3V0IDw8IGFycmF5QnJhY2tldHModHlwZSk7CisKKyAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYg
dGhpcyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCisgICAgICAgIGlmIChpdGVyICE9IC0tYXJn
cy5lbmQoKSkKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgIH0KK30KKworY29uc3QgQ29u
c3RhbnRVbmlvbiogVE91dHB1dEdMU0w6OndyaXRlQ29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSYg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24pCit7CisgICAgVEluZm9TaW5rQmFz
ZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7
CisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsK
KyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAg
ICAgICBBU1NFUlQoZmllbGRUeXBlICE9IE5VTEwpOworICAgICAgICAgICAgcENvbnN0VW5pb24g
PSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgcENvbnN0VW5pb24pOworICAgICAgICAg
ICAgaWYgKGkgIT0gc3RydWN0dXJlLT5zaXplKCkgLSAxKSBvdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgIikiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBp
bnQgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBib29sIHdyaXRlVHlwZSA9
IHNpemUgPiAxOworICAgICAgICBpZiAod3JpdGVUeXBlKSBvdXQgPDwgZ2V0VHlwZU5hbWUodHlw
ZSkgPDwgIigiOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytwQ29u
c3RVbmlvbikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChwQ29uc3RVbmlvbi0+Z2V0
VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91
dCA8PCBwQ29uc3RVbmlvbi0+Z2V0RkNvbnN0KCk7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0QkNvbnN0KCk7
IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkgb3V0IDw8ICIsICI7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgcmV0
dXJuIHBDb25zdFVuaW9uOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsK
KyAgICBvdXQgPDwgbm9kZS0+Z2V0U3ltYm9sKCk7CisKKyAgICBpZiAobURlY2xhcmluZ1Zhcmlh
YmxlcyAmJiBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQorICAgICAgICBvdXQgPDwgYXJyYXlC
cmFja2V0cyhub2RlLT5nZXRUeXBlKCkpOworfQorCit2b2lkIFRPdXRwdXRHTFNMOjp2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgd3JpdGVDb25z
dGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7
Cit9CisKK2Jvb2wgVE91dHB1dEdMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5KiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IHRydWU7CisgICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkK
KyAgICB7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGlmICh2aXNp
dCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiID0g
IjsKKyAgICAgICAgICAgICAgICAvLyBSSFMgb2YgaW5pdGlhbGl6ZSBpcyBub3QgYmVpbmcgZGVj
bGFyZWQuCisgICAgICAgICAgICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiAtPSAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7IGJyZWFrOworICAgICAgICAvLyBOb3RpY2Ug
dGhlIGZhbGwtdGhyb3VnaC4KKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246IAorICAgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRp
bWVzU2NhbGFyQXNzaWduOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWdu
OgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAg
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6
CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIC8vIFRPRE8oYWxva3ApOiBB
U1NFUlQKKyAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFt
ZSgpOworICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6Cisg
ICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIi4iOworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHJp
Z2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAg
ICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSByaWdodENoaWxkLT5nZXRTZXF1ZW5j
ZSgpOworICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQg
PSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UuZW5kKCk7ICsrc2l0KQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGVs
ZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRhdGEgPSBlbGVtZW50LT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpWzBdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGF0YS5nZXRU
eXBlKCkgPT0gRWJ0SW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLmdldElD
b25zdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx
OiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0
IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAi
dyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
IigiLCAiICsgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiB3cml0ZVRyaXBs
ZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC8gIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0g
IiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgLy8gTm90aWNl
IHRoZSBmYWxsLXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Cisg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlz
aXQsICIoIiwgIiAqICIsICIpIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgfHwgIiwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgXl4gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVu
OworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
VW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2
ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKC0iLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3QoIiwgTlVM
TCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCEiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcFBvc3RJ
bmNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiKyspIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBO
VUxMLCAiLS0pIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCsrIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLS0iLCBOVUxMLCAiKSIpOyBicmVh
azsKKworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9Cb29sOgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgMTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImJ2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgICAg
Y2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3Bl
cmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIp
Iik7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwg
InZlYzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Cisg
ICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludCgiLCBOVUxM
LCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJpdmVjMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wUmFkaWFuczog
d3JpdGVUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BEZWdyZWVzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsIE5VTEws
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
c2luKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiY29zKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFRh
bjogd3JpdGVUcmlwbGV0KHZpc2l0LCAidGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEFzaW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImFzaW4oIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWNvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWNvcygi
LCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJhdGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRXhw
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJleHAoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTG9nOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2coIiwgTlVMTCwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRXhwMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJsb2cyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6IHdy
aXRlVHJpcGxldCh2aXNpdCwgInNxcnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wSW52ZXJzZVNxcnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludmVyc2VzcXJ0KCIsIE5V
TEwsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJhYnMoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2lnbjogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAic2lnbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BGbG9vcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgTlVMTCwgIikiKTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ2VpbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCBO
VUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiZnJhY3QoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZW5n
dGg6IHdyaXRlVHJpcGxldCh2aXNpdCwgImxlbmd0aCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BOb3JtYWxpemU6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgi
LCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFueTogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiYW55KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiYWxsKCIsIE5VTEwsICIpIik7IGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICIoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRo
aXMpOworICAgICAgICBvdXQgPDwgIikgPyAoIjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2Nr
KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIikgOiAoIjsKKyAgICAgICAgbm9k
ZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpIjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJpZiAoIjsKKyAgICAgICAg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilc
biI7CisKKyAgICAgICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAgICAgdmlzaXRDb2RlQmxvY2so
bm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpOworCisgICAgICAgIGlmIChub2RlLT5nZXRGYWxzZUJsb2Nr
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgICAg
IHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldEZhbHNlQmxvY2soKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZGVjcmVtZW50RGVwdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFRPdXRwdXRHTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSogbm9kZSkKK3sKKyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgIFRJbmZvU2lu
a0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAg
eworICAgICAgICBjYXNlIEVPcFNlcXVlbmNlOiB7CisgICAgICAgICAgICAvLyBTY29wZSB0aGUg
c2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBp
ZiAoZGVwdGggPiAwKSBvdXQgPDwgIntcbiI7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRo
KCk7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXRlciAh
PSBzZXF1ZW5jZS5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFRJbnRlcm1Ob2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUg
IT0gTlVMTCk7CisgICAgICAgICAgICAgICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCisgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlY3JlbWVudERl
cHRoKCk7CisKKyAgICAgICAgICAgIC8vIFNjb3BlIHRoZSBzZXF1ZW5jZXMgZXhjZXB0IHdoZW4g
YXQgdGhlIGdsb2JhbCBzY29wZS4KKyAgICAgICAgICAgIGlmIChkZXB0aCA+IDApIG91dCA8PCAi
fVxuIjsKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOiB7CisgICAgICAgICAg
ICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQ
cmVWaXNpdCk7CisgICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRUeXBlTmFtZShu
b2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8IHJldHVyblR5cGUgPDwgIiAiIDw8
IG5vZGUtPmdldE5hbWUoKTsKKworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgICAg
IHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKG5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICAg
ICAgb3V0IDw8ICIpIjsKKworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogewor
ICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICBUU3RyaW5nIHJldHVyblR5cGUgPSBnZXRU
eXBlTmFtZShub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAg
ICAgb3V0IDw8IHJldHVyblR5cGUgPDwgIiAiIDw8IGZ1bmN0aW9uTmFtZTsKKworICAgICAgICAg
ICAgaW5jcmVtZW50RGVwdGgoKTsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24g
bm9kZSBjb250YWlucyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCisgICAgICAgICAgICAvLyBy
ZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgZnVuY3Rpb24gYm9keS4gVGhlIGxh
dHRlcgorICAgICAgICAgICAgLy8gaXMgbm90IHByZXNlbnQgaW4gY2FzZSBvZiBlbXB0eSBmdW5j
dGlvbiBib2RpZXMuCisgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNl
ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIEFTU0VSVCgoc2VxdWVuY2Uuc2l6
ZSgpID09IDEpIHx8IChzZXF1ZW5jZS5zaXplKCkgPT0gMikpOworICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBzZXFJdGVyID0gc2VxdWVuY2UuYmVnaW4oKTsKKwor
ICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFtcyA9ICgqc2VxSXRlciktPmdldEFzQWdncmVnYXRlKCk7
CisgICAgICAgICAgICBBU1NFUlQocGFyYW1zICE9IE5VTEwpOworICAgICAgICAgICAgQVNTRVJU
KHBhcmFtcy0+Z2V0T3AoKSA9PSBFT3BQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHBhcmFtcy0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIGJvZHku
CisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBib2R5ID0gKytzZXFJdGVyICE9IHNlcXVl
bmNlLmVuZCgpID8KKyAgICAgICAgICAgICAgICAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgp
IDogTlVMTDsKKyAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKGJvZHkpOworICAgICAgICAgICAg
ZGVjcmVtZW50RGVwdGgoKTsKKyAKKyAgICAgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZDsgbm8g
bmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wRnVuY3Rp
b25DYWxsOgorICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KKyAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
CisgICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiKSI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJz
OiB7CisgICAgICAgICAgICAvLyBGdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKKyAgICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAg
ICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAg
ICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcERlY2xhcmF0aW9u
OiB7CisgICAgICAgICAgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUSW50ZXJtVHlwZWQqIHZhcmlhYmxlID0gc2VxdWVuY2UuZnJvbnQo
KS0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKHZhcmlh
YmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiICI7CisgICAgICAgICAg
ICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0RmxvYXQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZl
YzIoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzog
d3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWM0KCIsICIsICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImJvb2woIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzI6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJidmVjMygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjNDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICJpbnQoIiwg
TlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAiLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
YXQzKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdDQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlJiB0eXBlID0g
bm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5h
bWUoKSA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBJblZpc2l0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEVPcExlc3NUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZXNzVGhhbigi
LCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiZ3JlYXRlclRoYW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW5FcXVh
bCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJncmVhdGVyVGhhbkVxdWFsKCIsICIsICIsICIpIik7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJl
cXVhbCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVh
bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibm90RXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29tbWE6IHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIiwgIiwgTlVM
TCk7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTW9kOiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
b2QoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG93OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJwb3coIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRh
bjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNaW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1pbigiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXg6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1heCgiLCAi
LCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiY2xhbXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWl4OiB3
cml0ZVRyaXBsZXQodmlzaXQsICJtaXgoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU3RlcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiB3cml0ZVRyaXBsZXQodmlzaXQsICJzbW9v
dGhzdGVwKCIsICIsICIsICIpIik7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFuY2U6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcERvdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZG90KCIsICIsICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENyb3NzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJjcm9z
cygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wUmVmbGVjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiB3cml0ZVRyaXBsZXQodmlz
aXQsICJyZWZyYWN0KCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE11bDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0cml4Q29tcE11bHQoIiwgIiwgIiwgIikiKTsgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdExvb3AoVmlz
aXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9
IG9ialNpbmsoKTsKKworICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgLy8gTG9vcCBoZWFkZXIu
CisgICAgaWYgKG5vZGUtPnRlc3RGaXJzdCgpKSAgLy8gZm9yIGxvb3AKKyAgICB7CisgICAgICAg
IG91dCA8PCAiZm9yICgiOworICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgICAgICAg
ICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7
CisKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldFRlc3QoKSAhPSBOVUxMKTsKKyAgICAgICAgbm9k
ZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAg
ICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgICAgICBub2RlLT5nZXRUZXJt
aW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iOworICAgIH0KKyAg
ICBlbHNlICAvLyBkby13aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgImRvXG4iOwor
ICAgIH0KKworICAgIC8vIExvb3AgYm9keS4KKyAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRC
b2R5KCkpOworCisgICAgLy8gTG9vcCBmb290ZXIuCisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3Qo
KSkgIC8vIHdoaWxlIGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUgKCI7CisgICAg
ICAgIEFTU0VSVChub2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRl
c3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiKTtcbiI7CisgICAgfQorICAg
IGRlY3JlbWVudERlcHRoKCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHZpc2l0IGNoaWxkcmVuLiBU
aGV5IGhhdmUgYmVlbiBhbHJlYWR5IHByb2Nlc3NlZCBpbgorICAgIC8vIHRoaXMgZnVuY3Rpb24u
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZv
dXQgPSBvYmpTaW5rKCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKQorICAgIHsK
KyAgICAgICAgY2FzZSBFT3BLaWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkaXNjYXJkIiwgTlVM
TCwgTlVMTCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJicmVhayIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb250aW51
ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY29udGludWUiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wUmV0dXJuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJyZXR1cm4gIiwgTlVM
TCwgTlVMTCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRD
b2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpIHsKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBv
YmpTaW5rKCk7CisgICAgaWYgKG5vZGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5vZGUtPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICAvLyBTaW5nbGUgc3RhdGVtZW50cyBub3QgcGFydCBvZiBh
IHNlcXVlbmNlIG5lZWQgdG8gYmUgdGVybWluYXRlZAorICAgICAgICAvLyB3aXRoIHNlbWktY29s
b24uCisgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudChub2RlKSkKKyAgICAgICAgICAgIG91
dCA8PCAiO1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJ7XG59
XG4iOyAgLy8gRW1wdHkgY29kZSBibG9jay4KKyAgICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRHTFNMLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KKyNkZWZpbmUgQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVUR0xTTF9IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKwor
Y2xhc3MgVE91dHB1dEdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgor
ICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworCitwcm90ZWN0ZWQ6Cisg
ICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CisgICAgdm9p
ZCB3cml0ZVRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IGNoYXIqIHByZVN0ciwgY29uc3QgY2hh
ciogaW5TdHIsIGNvbnN0IGNoYXIqIHBvc3RTdHIpOworICAgIHZvaWQgd3JpdGVWYXJpYWJsZVR5
cGUoY29uc3QgVFR5cGUmIHR5cGUpOworICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMo
Y29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKKyAgICBjb25zdCBDb25zdGFudFVuaW9uKiB3
cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50VW5pb24q
IHBDb25zdFVuaW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBub2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1D
b25zdGFudFVuaW9uKiBub2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSk7CisgICAgdmly
dHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQnJhbmNoKiBub2RlKTsKKworICAgIHZvaWQgdmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUq
IG5vZGUpOworCitwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOworICAgIGJv
b2wgbURlY2xhcmluZ1ZhcmlhYmxlczsKKworICAgIC8vIFN0cnVjdHMgYXJlIGRlY2xhcmVkIGFz
IHRoZSB0cmVlIGlzIHRyYXZlcnNlZC4gVGhpcyBzZXQgY29udGFpbnMgYWxsCisgICAgLy8gdGhl
IHN0cnVjdHMgYWxyZWFkeSBkZWNsYXJlZC4gSXQgaXMgbWFpbnRhaW5lZCBzbyB0aGF0IGEgc3Ry
dWN0IGlzCisgICAgLy8gZGVjbGFyZWQgb25seSBvbmNlLgorICAgIHR5cGVkZWYgc3RkOjpzZXQ8
VFN0cmluZz4gRGVjbGFyZWRTdHJ1Y3RzOworICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRT
dHJ1Y3RzOworfTsKKworI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hf
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNjAg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgi
CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgiCisKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIHNoCit7CisvLyBJbnRl
Z2VyIHRvIFRTdHJpbmcgY29udmVyc2lvbgorVFN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hh
ciBidWZmZXJbMjBdOworICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4g
YnVmZmVyOworfQorCitPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvbnRl
eHQpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4
dCkKK3sKKyAgICBtVW5mb2xkU2VsZWN0ID0gbmV3IFVuZm9sZFNlbGVjdChjb250ZXh0LCB0aGlz
KTsKKyAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsKKworICAgIG1Vc2VzVGV4dHVyZTJEID0g
ZmFsc2U7CisgICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVy
ZTJEUHJvaiA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Cisg
ICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9
IGZhbHNlOworICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOworICAgIG1Vc2VzRnJhZ0Nvb3Jk
ID0gZmFsc2U7CisgICAgbVVzZXNQb2ludENvb3JkID0gZmFsc2U7CisgICAgbVVzZXNGcm9udEZh
Y2luZyA9IGZhbHNlOworICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbVVzZXNYb3Ig
PSBmYWxzZTsKKyAgICBtVXNlc01vZDEgPSBmYWxzZTsKKyAgICBtVXNlc01vZDIgPSBmYWxzZTsK
KyAgICBtVXNlc01vZDMgPSBmYWxzZTsKKyAgICBtVXNlc01vZDQgPSBmYWxzZTsKKyAgICBtVXNl
c0ZhY2Vmb3J3YXJkMSA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZvcndhcmQyID0gZmFsc2U7Cisg
ICAgbVVzZXNGYWNlZm9yd2FyZDMgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vmb3J3YXJkNCA9IGZh
bHNlOworICAgIG1Vc2VzRXF1YWxNYXQyID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDMgPSBm
YWxzZTsKKyAgICBtVXNlc0VxdWFsTWF0NCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMyID0g
ZmFsc2U7CisgICAgbVVzZXNFcXVhbFZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsVmVjNCA9
IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVj
MyA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxJVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxC
VmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxCVmVjMyA9IGZhbHNlOworICAgIG1Vc2VzRXF1
YWxCVmVjNCA9IGZhbHNlOworICAgIG1Vc2VzQXRhbjIgPSBmYWxzZTsKKworICAgIG1TY29wZURl
cHRoID0gMDsKKworICAgIG1Bcmd1bWVudEluZGV4ID0gMDsKK30KKworT3V0cHV0SExTTDo6fk91
dHB1dEhMU0woKQoreworICAgIGRlbGV0ZSBtVW5mb2xkU2VsZWN0OworfQorCit2b2lkIE91dHB1
dEhMU0w6Om91dHB1dCgpCit7CisgICAgbUNvbnRleHQudHJlZVJvb3QtPnRyYXZlcnNlKHRoaXMp
OyAgIC8vIE91dHB1dCB0aGUgYm9keSBmaXJzdCB0byBkZXRlcm1pbmUgd2hhdCBoYXMgdG8gZ28g
aW4gdGhlIGhlYWRlcgorICAgIGhlYWRlcigpOworCisgICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1IZWFkZXIuY19zdHIoKTsKKyAgICBtQ29udGV4dC5pbmZvU2luay5vYmogPDwgbUJvZHku
Y19zdHIoKTsKK30KKworVEluZm9TaW5rQmFzZSAmT3V0cHV0SExTTDo6Z2V0Qm9keVN0cmVhbSgp
Cit7CisgICAgcmV0dXJuIG1Cb2R5OworfQorCitpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShj
b25zdCBUVHlwZSAmdHlwZSkgY29uc3QKK3sKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlz
TWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBhcnJheVNpemUg
PSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworCisgICAgcmV0dXJu
IGVsZW1lbnRTaXplICogYXJyYXlTaXplOworfQorCit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigp
Cit7CisgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOworCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlv
bnM6Oml0ZXJhdG9yIHN0cnVjdERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdp
bigpOyBzdHJ1Y3REZWNsYXJhdGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1
Y3REZWNsYXJhdGlvbisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlv
bjsKKyAgICB9CisKKyAgICBmb3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3Ig
PSBtQ29uc3RydWN0b3JzLmJlZ2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5k
KCk7IGNvbnN0cnVjdG9yKyspCisgICAgeworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOwor
ICAgIH0KKworICAgIGlmIChsYW5ndWFnZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgeworICAg
ICAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgICAgICBUU3RyaW5nIHZhcnlpbmdzOworCisgICAg
ICAgIFRTeW1ib2xUYWJsZUxldmVsICpzeW1ib2xzID0gbUNvbnRleHQuc3ltYm9sVGFibGUuZ2V0
R2xvYmFsTGV2ZWwoKTsKKyAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAwOworCisgICAgICAg
IGZvciAoVFN5bWJvbFRhYmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIG5hbWVkU3ltYm9sID0gc3lt
Ym9scy0+YmVnaW4oKTsgbmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+ZW5kKCk7IG5hbWVkU3ltYm9s
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wgKnN5bWJvbCA9ICgqbmFt
ZWRTeW1ib2wpLnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBzeW1i
b2wtPmdldE5hbWUoKTsKKworICAgICAgICAgICAgaWYgKHN5bWJvbC0+aXNWYXJpYWJsZSgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyaWFibGUg
PSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobVJlZmVyZW5jZWRVbmlmb3Jtcy5maW5kKG5hbWUuY19z
dHIoKSkgIT0gbVJlZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVT
dHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIg
PT0gRXZxSW52YXJpYW50VmFyeWluZ0luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1S
ZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3Qg
Zm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgc2VtYW50aWNJbmRleCArPSB0eXBlLmlzQXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlT
aXplKCkgOiAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFHbG9iYWwgfHwgcXVhbGlmaWVy
ID09IEV2cVRlbXBvcmFyeSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEdsb2JhbHMgYXJlIGRlY2xhcmVkIGFuZCBpbnRpYWxpemVkIGFzIGFuIGFnZ3JlZ2F0ZSBu
b2RlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmll
ciA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IENvbnN0YW50cyBhcmUgcmVwZWF0ZWQgYXMgbGl0ZXJhbHMgd2hlcmUgdXNlZAorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAg
ICBvdXQgPDwgIHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAg
InN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbMV0gPSB7ZmxvYXQ0KDAsIDAsIDAsIDApfTtcbiI7CisK
KyAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAu
NSwgMC41KTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2lu
ZyA9IGZhbHNlO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAg
ICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJ1
bmlmb3JtIGZsb2F0NCBkeF9XaW5kb3c7XG4iCisgICAgICAgICAgICAgICAgICAgInVuaWZvcm0g
ZmxvYXQyIGR4X0RlcHRoO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc0Zyb250
RmFjaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gYm9vbCBkeF9Q
b2ludHNPckxpbmVzO1xuIgorICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGJvb2wgZHhfRnJv
bnRDQ1c7XG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQgPDwgIlxuIjsKKyAg
ICAgICAgb3V0IDw8ICB1bmlmb3JtczsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgorICAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4i
CisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBiaWFz
KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtc
biIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0NCB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRFByb2pfYmlhcykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0Lnkg
LyB0LncsIDAsIGJpYXMpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3Vi
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUo
c2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xuIgorICAgICAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBm
bG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMp
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAgIC8vIFZlcnRleCBzaGFkZXIKKyAgICB7Cisg
ICAgICAgIFRTdHJpbmcgdW5pZm9ybXM7CisgICAgICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAg
ICAgICAgVFN0cmluZyB2YXJ5aW5nczsKKworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3lt
Ym9scyA9IG1Db250ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7CisKKyAgICAgICAg
Zm9yIChUU3ltYm9sVGFibGVMZXZlbDo6Y29uc3RfaXRlcmF0b3IgbmFtZWRTeW1ib2wgPSBzeW1i
b2xzLT5iZWdpbigpOyBuYW1lZFN5bWJvbCAhPSBzeW1ib2xzLT5lbmQoKTsgbmFtZWRTeW1ib2wr
KykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCAqc3ltYm9sID0gKCpuYW1l
ZFN5bWJvbCkuc2Vjb25kOworICAgICAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IHN5bWJv
bC0+Z2V0TmFtZSgpOworCisgICAgICAgICAgICBpZiAoc3ltYm9sLT5pc1ZhcmlhYmxlKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSA9
IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsKKworICAgICAgICAg
ICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFVuaWZvcm1zLmZpbmQobmFtZS5jX3N0
cigpKSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0
cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkQXR0cmlidXRlcy5maW5k
KG5hbWUuY19zdHIoKSkgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0
aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1S
ZWZlcmVuY2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVmFyeWlu
Z3MuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFs
IHx8IHF1YWxpZmllciA9PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBh
biBhZ2dyZWdhdGUgbm9kZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAvLyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVz
ZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBBdHRyaWJ1
dGVzXG4iOworICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7CisgICAgICAgIG91dCA8PCAiXG4i
CisgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGZsb2F0NCgwLCAw
LCAwLCAwKTtcbiI7CisgICAgICAgIAorICAgICAgICBpZiAobVVzZXNQb2ludFNpemUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGZs
b2F0KDEpO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAg
ICAgICAiLy8gVmFyeWluZ3NcbiI7CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAg
IG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAidW5pZm9ybSBmbG9hdDIgZHhfSGFsZlBpeGVs
U2l6ZTtcbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7
CisgICAgICAgIG91dCA8PCAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdfQ09PUkRcbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIG91dCA8PCAi
I2RlZmluZSBHTF9VU0VTX1BPSU5UX0NPT1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0Zy
b250RmFjaW5nKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdMX1VTRVNfRlJPTlRf
RkFDSU5HXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc1BvaW50U2l6ZSkKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJWkVcbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICB7CisgICAgICAgIG91dCA8PCAic3RydWN0IGdsX0Rl
cHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBuZWFyO1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4i
CisgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAifTtc
biIKKyAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICJ1bmlmb3JtIGdsX0RlcHRo
UmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2U7XG4iCisgICAgICAgICAgICAgICAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc1hvcikKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCB4
b3IoYm9vbCBwLCBib29sIHEpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgorICAgICAgICAgICAgICAg
In1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kMSkK
KyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZsb2F0IHkpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBm
bG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxu
IjsKKyAgICB9CisgICAgCisgICAgaWYgKG1Vc2VzTW9kMikKKyAgICB7CisgICAgICAgIG91dCA8
PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKyAgICAKKyAg
ICBpZiAobVVzZXNNb2QzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgbW9kKGZsb2F0
MyB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzTW9kNCkKKyAgICB7
CisgICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQgeSlcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29y
KHggLyB5KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKKyAgICB7CisgICAgICAgIG91dCA8
PCAiZmxvYXQgZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJlZilcbiIKKyAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+
PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAg
ICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAi
ICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
RmFjZWZvcndhcmQyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDIgZmFjZWZvcndhcmQo
ZmxvYXQyIE4sIGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAg
ICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisg
ICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAg
ICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtc
biIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQzKQorICAg
IHsKKyAgICAgICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQzIE4sIGZsb2F0MyBJ
LCBmbG9hdDMgTnJlZilcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAi
ICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisg
ICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAg
IH1cbiIKKyAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7
XG4iCisgICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAg
ICIgICAgfVxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgfQorCisgICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9hdDQgTnJlZilcbiIK
KyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJ
KSA+PSAwKVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAgICAiICAg
ICAgICByZXR1cm4gLU47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAg
ICAgICIgICAgZWxzZVxuIgorICAgICAgICAgICAgICAgIiAgICB7XG4iCisgICAgICAgICAgICAg
ICAiICAgICAgICByZXR1cm4gTjtcbiIKKyAgICAgICAgICAgICAgICIgICAgfVxuIgorICAgICAg
ICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorCisgICAgaWYgKG1V
c2VzRXF1YWxNYXQyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0Mngy
IG0sIGZsb2F0MngyIG4pXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gbVswXVswXSA9PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJlxu
IgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1b
MV0gPT0gblsxXVsxXTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlm
IChtVXNlc0VxdWFsTWF0MykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9h
dDN4MyBtLCBmbG9hdDN4MyBuKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFdID09IG5bMF1bMV0g
JiYgbVswXVsyXSA9PSBuWzBdWzJdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAgICAgICBt
WzFdWzBdID09IG5bMV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1bMV1bMl0gPT0gblsx
XVsyXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBd
ICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl07XG4iCisgICAgICAg
ICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbE1hdDQpCisgICAgewor
ICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0eDQgbilcbiIKKyAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09
IG5bMF1bMF0gJiYgbVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJiBt
WzBdWzNdID09IG5bMF1bM10gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1b
MF0gPT0gblsxXVswXSAmJiBtWzFdWzFdID09IG5bMV1bMV0gJiYgbVsxXVsyXSA9PSBuWzFdWzJd
ICYmIG1bMV1bM10gPT0gblsxXVszXSAmJlxuIgorICAgICAgICAgICAgICAgIiAgICAgICAgICAg
bVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5b
Ml1bMl0gJiYgbVsyXVszXSA9PSBuWzJdWzNdICYmXG4iCisgICAgICAgICAgICAgICAiICAgICAg
ICAgICBtWzNdWzBdID09IG5bM11bMF0gJiYgbVszXVsxXSA9PSBuWzNdWzFdICYmIG1bM11bMl0g
PT0gblszXVsyXSAmJiBtWzNdWzNdID09IG5bM11bM107XG4iCisgICAgICAgICAgICAgICAifVxu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzIpCisgICAgeworICAgICAgICBvdXQg
PDwgImJvb2wgZXF1YWwoZmxvYXQyIHYsIGZsb2F0MiB1KVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtc
biIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsVmVj
MykKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDMgdiwgZmxvYXQzIHUp
XG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54
ID09IHUueCAmJiB2LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAi
fVxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbFZlYzQpCisgICAgeworICAgICAgICBv
dXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0IHYsIGZsb2F0NCB1KVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUu
eSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsK
KyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbElWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICJib29sIGVxdWFsKGludDIgdiwgaW50MiB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueTtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsSVZlYzMpCisg
ICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoaW50MyB2LCBpbnQzIHUpXG4iCisgICAg
ICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAm
JiB2LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAg
ICB9CisKKyAgICBpZiAobVVzZXNFcXVhbElWZWM0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJi
b29sIGVxdWFsKGludDQgdiwgaW50NCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0g
dS56ICYmIHYudyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNFcXVhbEJWZWMyKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFs
KGJvb2wyIHYsIGJvb2wyIHUpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55O1xuIgorICAgICAgICAgICAg
ICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVjMykKKyAgICB7CisgICAg
ICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sMyB2LCBib29sMyB1KVxuIgorICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09
IHUueSAmJiB2LnogPT0gdS56O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisg
ICAgaWYgKG1Vc2VzRXF1YWxCVmVjNCkKKyAgICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVh
bChib29sNCB2LCBib29sNCB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYm
IHYudyA9PSB1Lnc7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNBdGFuMikKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQgYXRhbnl4KGZsb2F0IHks
IGZsb2F0IHgpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBp
Zih4ID09IDAgJiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBOYU4K
KyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgorICAgICAgICAgICAg
ICAgIn1cbiI7CisgICAgfQorfQorCit2b2lkIE91dHB1dEhMU0w6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBUU3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJn
bF9GcmFnQ29sb3IiKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAg
fQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICB7CisgICAgICAgIG91
dCA8PCAiZ2xfQ29sb3IiOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9EZXB0aFJh
bmdlIikKKyAgICB7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CisgICAgICAgIG91
dCA8PCBuYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQor
ICAgIHsKKyAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFt
ZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgewor
ICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAg
ICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQorICAgIHsKKyAgICAg
ICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgIG91dCA8PCBuYW1lOworICAgIH0K
KyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQorICAgIHsKKyAgICAgICAgbVVz
ZXNQb2ludFNpemUgPSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZp
ZXIoKTsKKworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXMuaW5zZXJ0KG5hbWUuY19zdHIoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmluc2VydChuYW1lLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikK
KyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5aW5ncy5pbnNlcnQobmFtZS5j
X3N0cigpKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKKyAg
ICB9Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkgKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BBc3NpZ246ICAg
ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIiIsICIgPSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3Np
Z246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC09ICIsICIpIik7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIp
Iik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2ln
bjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAg
ICBvdXQgPDwgIigiOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlz
aXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAg
ICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIs
IHRyYW5zcG9zZSgiOyAgIAorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIpKSkiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgaWYgKHZpc2l0ID09IFBy
ZVZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIigiOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiID0gbXVsKCI7CisgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikpIjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIi
LCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRp
cmVjdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAg
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIi4i
ICsgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOworCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvclN3
aXp6bGU6CisgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAg
ICAgICBvdXQgPDwgIi4iOworCisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpzd2l6emxl
ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICAgICAgaWYg
KHN3aXp6bGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9IHN3aXp6bGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0
ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICplbGVtZW50ID0gKCpzaXQpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBlbGVtZW50
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVsbHkgcHJvY2Vzc2Vk
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZDogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBicmVhazsKKyAgICAg
IGNhc2UgRU9wU3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAt
ICIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcERp
djogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLyAiLCAiKSIpOyBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAg
ICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwgIikiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9w
KCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIo
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiEoIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0ICpmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1
Y3QoKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVs
ZFR5cGUgPSAoKmZpZWxkcylbaV0udHlwZTsKKworICAgICAgICAgICAgICAgIG5vZGUtPmdldExl
ZnQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZpZWxk
VHlwZS0+Z2V0RmllbGROYW1lKCkgKyAiID09ICI7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGZp
ZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxk
cy0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiICYmICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBvdXQgPDwgIikiOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgp
LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgY2FzZSAyICogMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMyAqIDM6IG1Vc2VzRXF1YWxNYXQzID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDQgKiA0OiBtVXNlc0VxdWFsTWF0NCA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCkt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbFZlYzQgPSB0cnVlOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1YWxJVmVjMiA9IHRydWU7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbElWZWMzID0gdHJ1ZTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSA0OiBtVXNlc0VxdWFsSVZlYzQgPSB0cnVlOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExl
ZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbEJWZWM0ID0gdHJ1ZTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZXF1YWwoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIWVxdWFsKCIsICIsICIsICIpIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOiAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwg
IikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsg
IGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICogIiwgIikiKTsgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGlt
ZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bXVsKCIsICIsIHRyYW5zcG9zZSgiLCAiKSkiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibXVsKHRyYW5zcG9zZSgiLCAiKSwg
IiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OiBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAidHJhbnNwb3NlKG11bCh0cmFuc3Bvc2UoIiwgIiksIHRyYW5zcG9zZSgi
LCAiKSkpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiIHx8ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9w
TG9naWNhbFhvcjoKKyAgICAgICAgbVVzZXNYb3IgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAieG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BMb2dpY2FsQW5kOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIs
ICIpIik7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1C
b2R5OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9w
TmVnYXRpdmU6ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtIiwgIiIsICIpIik7ICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogb3V0cHV0VHJpcGxldCh2aXNp
dCwgIighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIighIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIiwgIisr
KSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiIiwgIi0tKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVt
ZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKKyAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIs
ICIiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNh
c2UgRU9wQ29udkZsb2F0VG9Cb29sOgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQo
KS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sKCIsICIiLCAiKSIpOyAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDIoIiwgIiIsICIp
Iik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJv
b2wzKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6ICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJib29sNCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDoKKyAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxv
YXQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJmbG9hdDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0MygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQ0KCIsICIiLCAiKSIp
OyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSAxOiAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MigiLCAiIiwgIikiKTsgYnJl
YWs7CisgICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50MygiLCAi
IiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiaW50NCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmFkaWFuczog
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7ICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTaW46ICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29zOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImNvcygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFRhbjogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ0YW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YXNpbigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWNvczogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFjb3MoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
dGFuKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXhwKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTG9nOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxv
ZygiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJleHAyKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibG9n
MigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3FydDogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNxcnQoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyc3Fy
dCgiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYWJzKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpZ24o
IiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9vcigiLCAiIiwgIikiKTsgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY2VpbCgi
LCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcExlbmd0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgo
IiwgIiIsICIpIik7ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKKy8vICAg
IGNhc2UgRU9wRFBkeDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZHkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAg
Y2FzZSBFT3BGd2lkdGg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIs
ICIiLCAiKSIpOyAgICBicmVhazsgICAgICAgIAorICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYW55KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFs
bCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0
QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQoreworICAgIEVT
aExhbmd1YWdlIGxhbmd1YWdlID0gbUNvbnRleHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAg
ICAgY2FzZSBFT3BTZXF1ZW5jZToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbnNpZGVG
dW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIntcbiI7CisK
KyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aCsrOworCisgICAgICAgICAgICAgICAgaWYgKG1T
Y29wZUJyYWNrZXQuc2l6ZSgpIDwgbVNjb3BlRGVwdGgpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBtU2NvcGVCcmFja2V0LnB1c2hfYmFjaygwKTsgICAvLyBOZXcgc2Nv
cGUgbGV2ZWwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldFttU2NvcGVEZXB0
aCAtIDFdKys7ICAgLy8gTmV3IHNjb3BlIGF0IGV4aXN0aW5nIGxldmVsCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6
aXRlcmF0b3Igc2l0ID0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0gbm9kZS0+
Z2V0U2VxdWVuY2UoKS5lbmQoKTsgc2l0KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KCpzaXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2UoKnNpdCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
ICAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKG1JbnNpZGVGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIn1cbiI7CisKKyAgICAgICAgICAgICAgICBtU2NvcGVEZXB0aC0tOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRU9w
RGVjbGFyYXRpb246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0gc2VxdWVuY2VbMF0tPmdl
dEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGJvb2wgdmlzaXQgPSB0cnVlOworCisgICAgICAgICAg
ICBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3Jh
cnkgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUdsb2JhbCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhZGRDb25zdHJ1Y3Rvcih2
YXJpYWJsZS0+Z2V0VHlwZSgpLCBzY29wZWRTdHJ1Y3QodmFyaWFibGUtPmdldFR5cGUoKS5nZXRU
eXBlTmFtZSgpKSwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCF2YXJpYWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCkgfHwgdmFyaWFibGUtPmdldEFzU3ltYm9s
Tm9kZSgpLT5nZXRTeW1ib2woKSAhPSAiIikgICAvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtSW5zaWRlRnVuY3Rpb24p
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljICI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgdHlwZVN0cmluZyh2YXJpYWJsZS0+Z2V0VHlwZSgpKSArICIgIjsKKworICAgICAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gKCpz
aXQpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5
bWJvbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzeW1ib2wtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBhcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGUtPmdldFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCpzaXQpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHRoaXMtPmluVmlzaXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpz
aXQgIT0gc2VxdWVuY2UuYmFjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQgPSB0aGlzLT52aXNpdEFnZ3JlZ2F0
ZShJblZpc2l0LCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmlzaXQgJiYgdGhpcy0+cG9zdFZpc2l0KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT52aXNpdEFnZ3JlZ2F0ZShQb3N0Vmlz
aXQsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKSAmJiB2YXJp
YWJsZS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpID09ICIiKSAgIC8vIFR5cGUgKHN0
cnVjdCkgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEFscmVhZHkgYWRkZWQgdG8gY29uc3RydWN0b3IgbWFwCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
LCAiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQcm90b3R5cGU6
CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9k
ZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CisKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJn
dW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRB
c1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9s
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50cy5zaXplKCkgLSAxKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwg
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91
dCA8PCAiKTtcbiI7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIiIsICIsICIsICIiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcEZ1bmN0aW9uOgorICAgICAgICB7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAgICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IHR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8PCAiICI7CisKKyAgICAgICAgICAgICAgICBp
ZiAobmFtZSA9PSAibWFpbiIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX21haW4oIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IHNlcXVlbmNlWzBdLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhcmd1bWVudHNb
aV0tPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBh
cmd1bWVudFN0cmluZyhzeW1ib2wpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8
IGFyZ3VtZW50cy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXF1ZW5j
ZS5lcmFzZShzZXF1ZW5jZS5iZWdpbigpKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiKVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgICAgIG1JbnNp
ZGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2
aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICJ9XG4iOworCisgICAgICAgICAgICAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEZ1bmN0
aW9uQ2FsbDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6
dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+aXNVc2VyRGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5hbWUgPT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZTJEID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVz
ZXNUZXh0dXJlMkRfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJn
bF90ZXh0dXJlMkRQcm9qKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmUyRExvZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4IHNoYWRlciB0
ZXh0dXJlIHNhbXBsaW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNp
b24KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBSZXF1aXJlcyB0aGUgdmVydGV4
IHNoYWRlciB0ZXh0dXJlIHNhbXBsaW5nIGV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiwg
IiwgIilcbntcbiIpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0
RmxvYXQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzEiLCAm
bm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMx
KCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidmVjMiIsICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInZlYzIoIiwg
IiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6
CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInZlYzMiLCAmbm9kZS0+
Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMzKCIsICIs
ICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0Ogor
ICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ2ZWM0IiwgJm5vZGUtPmdl
dFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAi
LCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAg
ICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzEiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMSgiLCAiIiwg
IikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJidmVjMiIsICZub2RlLT5nZXRT
ZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImJ2ZWMyKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAg
ICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiYnZlYzMiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJidmVjMygiLCAiLCAi
LCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Cisg
ICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgImJ2ZWM0IiwgJm5vZGUtPmdl
dFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnZlYzQoIiwgIiwg
IiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAg
ICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzEiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMSgiLCAiIiwg
IikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjMiIsICZub2RlLT5nZXRT
ZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWMyKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAg
ICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzMiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjMygiLCAiLCAi
LCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Cisg
ICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdl
dFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwg
IiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Cisg
ICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQzIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAi
KSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogCisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDQiLCAmbm9kZS0+Z2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIp
Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6CisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KG5vZGUtPmdl
dFR5cGUoKS5nZXRUeXBlTmFtZSgpKSwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCBzdHJ1Y3RMb29rdXAobm9kZS0+Z2V0VHlwZSgpLmdldFR5cGVO
YW1lKCkpICsgIl9jdG9yKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPCAiLCAi
KSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiIDw9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwg
IikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9PSAiLCAiKSIpOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiICE9ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BNb2Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVu
Y2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVu
dHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogbVVz
ZXNNb2QyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNNb2QzID0g
dHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNNb2Q0ID0gdHJ1ZTsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtb2QoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInBvdygiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BBdGFuOgorICAgICAgICBBU1NFUlQobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMik7ICAgLy8gYXRhbih4KSBpcyBhIHVuYXJ5IG9wZXJhdG9yCisg
ICAgICAgIG1Vc2VzQXRhbjIgPSB0cnVlOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YXRhbnl4KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaW46
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWluKCIsICIsICIsICIpIik7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm1heCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENsYW1wOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjbGFtcCgiLCAiLCAiLCAiKSIp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibGVycCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wU3RlcDogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwg
IikiKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJzbW9vdGhzdGVwKCIsICIsICIsICIpIik7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlzdGFuY2Uo
IiwgIiwgIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRG90OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjcm9z
cygiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BGYWNlRm9yd2Fy
ZDoKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBd
LT5nZXRBc1R5cGVkKCktPmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0
aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMTogbVVz
ZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogbVVzZXNG
YWNlZm9yd2FyZDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNl
Zm9yd2FyZDMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9y
d2FyZDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJmYWNlZm9yd2FyZCgiLCAiLCAiLCAiKSIpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
cmVmbGVjdCgiLCAiLCAiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmcmFj
dDogICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAqICIsICIpIik7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPdXRw
dXRITFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9k
ZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmIChub2RlLT51
c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgeworICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZv
bGRTZWxlY3QtPmdldFRlbXBvcmFyeUluZGV4KCk7CisgICAgfQorICAgIGVsc2UgIC8vIGlmL2Vs
c2Ugc3RhdGVtZW50CisgICAgeworICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2Rl
LT5nZXRDb25kaXRpb24oKSk7CisKKyAgICAgICAgb3V0IDw8ICJpZigiOworCisgICAgICAgIG5v
ZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICBvdXQgPDwgIilc
biIKKyAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxv
Y2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZl
cnNlKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7fVxuIjsKKworICAgICAg
ICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImVsc2VcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgbm9k
ZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKworICAgICAgICAgICAgb3V0IDw8
ICI7fVxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5v
ZGUpCit7CisgICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZp
c2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAoaGFuZGxlRXhjZXNzaXZl
TG9vcChub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkp
CisgICAgeworICAgICAgICBvdXQgPDwgImRvXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVz
dCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFs
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUt
PmdldFRlcm1pbmFsKCkpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJmb3IoIjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBvdXQgPDwgIjsgIjsKKworICAgICAgICBpZiAobm9kZS0+Z2V0VGVzdCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFs
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNl
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAg
ICAie1xuIjsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBvdXQgPDwg
In1cbiI7CisKKyAgICBpZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0
IDw8ICJ3aGlsZShcbiI7CisKKyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlz
KTsKKworICAgICAgICBvdXQgPDwgIikiOworICAgIH0KKworICAgIG91dCA8PCAiO1xuIjsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNp
dCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtQm9keTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCisgICAgeworICAgICAg
Y2FzZSBFT3BLaWxsOiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIp
OyAgYnJlYWs7CisgICAgICBjYXNlIEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
YnJlYWsiLCAiIiwgIiIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1
dFRyaXBsZXQodmlzaXQsICJjb250aW51ZSIsICIiLCAiIik7IGJyZWFrOworICAgICAgY2FzZSBF
T3BSZXR1cm46CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgInJldHVybiAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQo
VEludGVybU5vZGUgKm5vZGUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0g
bm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgIGlmIChhZ2dyZWdhdGUpCisgICAgeworICAg
ICAgICBpZiAoYWdncmVnYXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdn
cmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVl
bmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
aXNTaW5nbGVTdGF0ZW1lbnQoKnNpdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlv
bnMgKHVuc3VwcG9ydGVkIGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCitib29sIE91dHB1dEhM
U0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToK
KyAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0
OyBpbmRleCArPSBpbmNyZW1lbnQpCisgICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOwor
ICAgIFRPcGVyYXRvciBjb21wYXJhdG9yID0gRU9wTnVsbDsKKyAgICBpbnQgaW5pdGlhbCA9IDA7
CisgICAgaW50IGxpbWl0ID0gMDsKKyAgICBpbnQgaW5jcmVtZW50ID0gMDsKKworICAgIC8vIFBh
cnNlIGluZGV4IG5hbWUgYW5kIGludGlhbCB2YWx1ZQorICAgIGlmIChub2RlLT5nZXRJbml0KCkp
CisgICAgeworICAgICAgICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgp
LT5nZXRBc0FnZ3JlZ2F0ZSgpOworCisgICAgICAgIGlmIChpbml0KQorICAgICAgICB7CisgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsK
KyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNU
eXBlZCgpOworCisgICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxp
ZmllcigpID09IEV2cVRlbXBvcmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtQmluYXJ5ICphc3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wg
PSBhc3NpZ24tPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAm
JiBjb25zdGFudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdl
dFNpemUoKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluaXRpYWwgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFBhcnNlIGNvbXBhcmF0b3IgYW5kIGxpbWl0IHZhbHVlCisgICAgaWYgKGluZGV4ICE9IE5VTEwg
JiYgbm9kZS0+Z2V0VGVzdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9
IG5vZGUtPmdldFRlc3QoKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAgICBp
ZiAodGVzdCAmJiB0ZXN0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRJZCgpID09
IGluZGV4LT5nZXRJZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqY29uc3RhbnQgPSB0ZXN0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KworICAgICAgICAgICAgaWYgKGNvbnN0YW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5n
ZXRTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNv
bXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOworICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNv
bnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhcnNl
IGluY3JlbWVudAorICAgIGlmIChpbmRleCAhPSBOVUxMICYmIGNvbXBhcmF0b3IgIT0gRU9wTnVs
bCAmJiBub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
YmluYXJ5VGVybWluYWwgPSBub2RlLT5nZXRUZXJtaW5hbCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwo
KS0+Z2V0QXNVbmFyeU5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiaW5hcnlUZXJtaW5h
bCkKKyAgICAgICAgeworICAgICAgICAgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5VGVybWluYWwt
PmdldE9wKCk7CisgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBi
aW5hcnlUZXJtaW5hbC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAg
ICAgICAgIGlmIChjb25zdGFudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgp
ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUg
PSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKKworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZhbHVlOyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGluY3JlbWVu
dCA9IC12YWx1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWluYWwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwtPmdldE9w
KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0gLTE7IGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJh
dG9yICE9IEVPcE51bGwgJiYgaW5jcmVtZW50ICE9IDApCisgICAgeworICAgICAgICBpZiAoY29t
cGFyYXRvciA9PSBFT3BMZXNzVGhhbkVxdWFsKQorICAgICAgICB7CisgICAgICAgICAgICBjb21w
YXJhdG9yID0gRU9wTGVzc1RoYW47CisgICAgICAgICAgICBsaW1pdCArPSAxOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8gaW5jcmVt
ZW50OworCisgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3NpdmUgbG9v
cAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1pdCAtIGlu
aXRpYWwgKyAxKSAlIGluY3JlbWVudDsKKyAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0
ID0gaW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykgLSAxIC0g
cmVtYWluZGVyOworCisgICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7
IGluZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCisKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgImZvcihpbnQgIjsKKyAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOworICAgICAgICAgICAgICAgIG91
dCA8PCBpbml0aWFsOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAg
ICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIDwg
IjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgY2xhbXBlZExpbWl0OworCisgICAgICAgICAgICAg
ICAgb3V0IDw8ICI7ICI7CisgICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG91dCA8PCAiICs9ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGlu
Y3JlbWVudDsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
In1cbiI7CisKKyAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVudDsKKyAg
ICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTklNUExFTUVOVEVE
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFzIGFuIGV4
Y2Vzc2l2ZSBsb29wCit9CisKK3ZvaWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChWaXNpdCB2
aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywg
Y29uc3QgVFN0cmluZyAmcG9zdFN0cmluZykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBt
Qm9keTsKKworICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8
PCBwcmVTdHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
eworICAgICAgICBvdXQgPDwgaW5TdHJpbmc7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOworICAgIH0KK30K
KworVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxp
ZmllcigpOworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAg
VFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lLmVtcHR5
KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJvdG90eXBl
cworICAgIHsKKyAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsrKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUpOworICAg
IH0KKworICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVT
dHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Cit9CisKK1RTdHJp
bmcgT3V0cHV0SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQorewor
ICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFJbjogICAgICAgICAg
ICByZXR1cm4gImluIjsKKyAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJuICJvdXQi
OworICAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKKyAgICAgIGNh
c2UgRXZxQ29uc3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKworVFN0cmluZyBPdXRwdXRI
TFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmdldFR5cGVO
YW1lKCkgIT0gIiIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAo
dHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy8gTmFtZWxl
c3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVFR5cGVMaXN0ICZmaWVsZHMgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAg
VFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlw
ZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgKz0g
IiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5hbWUoKSAr
IGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzdHJpbmcgKz0gIn0gIjsKKworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuICJmbG9hdDJ4MiI7CisgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZsb2F0M3gz
IjsKKyAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0eDQiOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gImZsb2F0IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0
MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDMiOworICAgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiaW50IjsKKyAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gImludDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biAiaW50MyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUu
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gImJvb2wiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIiOworICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiYm9vbDMiOworICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiAiYm9vbDQiOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoK
KyAgICAgICAgICAgIHJldHVybiAidm9pZCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CisgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOworICAgICAgICB9Cisg
ICAgfQorCisgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgcmV0dXJuICI8dW5r
bm93biB0eXBlPiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3Qg
VFR5cGUgJnR5cGUpCit7CisgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiAiIjsKKyAgICB9CisKKyAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0QXJyYXlT
aXplKCkpICsgIl0iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0
IFRUeXBlICZ0eXBlKQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yIChpbnQgY29t
cG9uZW50ID0gMDsgY29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBvbmVudCsr
KQorICAgIHsKKyAgICAgICAgc3RyaW5nICs9ICIwIjsKKworICAgICAgICBpZiAoY29tcG9uZW50
IDwgdHlwZS5nZXRPYmplY3RTaXplKCkgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJp
bmcgKz0gIiwgIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAieyIgKyBzdHJpbmcg
KyAifSI7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUg
JnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1l
dGVycykKK3sKKyAgICBpZiAobmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybjsgICAv
LyBOYW1lbGVzcyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCisgICAgfQorCisg
ICAgVFR5cGUgY3RvclR5cGUgPSB0eXBlOworICAgIGN0b3JUeXBlLmNsZWFyQXJyYXluZXNzKCk7
CisgICAgY3RvclR5cGUuY2hhbmdlUHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLmNo
YW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworCisgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5
cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7CisKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKKyAgICBQYXJhbWV0ZXJBcnJheSBjdG9y
UGFyYW1ldGVyczsKKworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJl
Z2luKCk7IHBhcmFtZXRlciAhPSBwYXJhbWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlcikt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
ICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChk
ZWNvcmF0ZShuYW1lKSk7CisKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7CisgICAgICAgIHN0
cnVjdHVyZSArPSAic3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSArICJcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iOworCisgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5
cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZm
aWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKKworICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAg
IiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJh
eVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdHVyZSAr
PSAifTtcbiI7CisKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJl
Z2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERl
Y2xhcmF0aW9ucy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0
aW9ucy5wdXNoX2JhY2soc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICBUU3RyaW5nIGNvbnN0
cnVjdG9yOworCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAg
Y29uc3RydWN0b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOworICAg
IH0KKyAgICBlbHNlICAgLy8gQnVpbHQtaW4gdHlwZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0
b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKKyAgICB9
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9y
UGFyYW1ldGVycy5zaXplKCk7IHBhcmFtZXRlcisrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5
cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOworCisgICAgICAgIGNvbnN0cnVj
dG9yICs9IHR5cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0
cmluZyh0eXBlKTsKKworICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpIC0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCisgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAg
ICAgICBjb25zdHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0
dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKKyAgICB9CisKKyAgICBpZiAoY3Rv
clR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKKyAgICB7Cisg
ICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25z
dCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07CisKKyAgICAgICAgaWYgKHBh
cmFtZXRlci5pc1NjYWxhcigpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZv
ciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4
MCIgOiAiMC4wIik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVy
LmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wp
ICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNv
bCA8IGRpbSAtIDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgcmVtYWluaW5nQ29t
cG9uZW50cyA9IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgaW50IHBhcmFtZXRl
ckluZGV4ID0gMDsKKworICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1twYXJhbWV0ZXJJbmRleF07CisgICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0g
cGFyYW1ldGVySW5kZXggPCAoaW50KWN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7CisKKyAgICAg
ICAgICAgIGNvbnN0cnVjdG9yICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7CisKKyAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3Io
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50
cyA9PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBw
YXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChyZW1haW5pbmdDb21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxT
aXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
bWFpbmluZ0NvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6IGNvbnN0cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogY29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25l
bnRzID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlz
TWF0cml4KCkgfHwgcGFyYW1ldGVyLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmpl
Y3RTaXplKCkgfHwgbW9yZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAg
ICAgICAgaWYgKG1vcmVQYXJhbWV0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhcmFtZXRlckluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1h
aW5pbmdDb21wb25lbnRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0cnVj
dG9yICs9ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y3RvclR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgY29uc3RydWN0b3IgKz0gIik7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOwor
ICAgIH0KKworICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKK30KKworY29u
c3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRU
eXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQoreworICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5
cGVOYW1lKCkpICsgIl9jdG9yKCI7CisgICAgICAgIAorICAgICAgICBjb25zdCBUVHlwZUxpc3Qg
KnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisKKyAgICAgICAg
ICAgIGNvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlv
bik7CisKKyAgICAgICAgICAgIGlmIChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGludCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7CisgICAgICAgIAorICAgICAgICBpZiAod3JpdGVUeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlv
bisrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNv
bnN0VW5pb24tPmdldEZDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
ICAgb3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
d3JpdGVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGNvbnN0VW5pb247Cit9CisKK1RTdHJpbmcgT3V0cHV0SExT
TDo6c2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCit7CisgICAgVFN0cmluZyBz
dHJpbmc7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQu
c2l6ZSgpICYmIGkgPCBkZXB0aExpbWl0OyBpKyspCisgICAgeworICAgICAgICBzdHJpbmcgKz0g
Il8iICsgc3RyKGkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQoreworICAg
IGlmICh0eXBlTmFtZSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Cit9
CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVO
YW1lKQoreworICAgIGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRl
cHRoLS0pCisgICAgeworICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBl
TmFtZSArIHNjb3BlU3RyaW5nKGRlcHRoKSk7CisKKyAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6
aXRlcmF0b3Igc3RydWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9
IG1TdHJ1Y3ROYW1lcy5lbmQoKTsgc3RydWN0TmFtZSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoKnN0cnVjdE5hbWUgPT0gc2NvcGVkTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2NvcGVkTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGlu
ZyBjb25zdHJ1Y3RvcgorCisgICAgcmV0dXJuIHR5cGVOYW1lOworfQorCitUU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5n
LnN1YnN0cigwLCAzKSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9P
dXRwdXRITFNMLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExT
TC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9PVVRQVVRITFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX09VVFBVVEhM
U0xfSF8KKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
KworbmFtZXNwYWNlIHNoCit7CitjbGFzcyBVbmZvbGRTZWxlY3Q7CisKK2NsYXNzIE91dHB1dEhM
U0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQg
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KTsKKyAgICB+T3V0cHV0SExTTCgpOwor
CisgICAgdm9pZCBvdXRwdXQoKTsKKworICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0o
KTsKKworICAgIFRTdHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3Rh
dGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBz
dGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGlj
IFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3Ry
aW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBhbiB1bmRl
cnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQg
aGVhZGVyKCk7CisKKyAgICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVpciBjb2Rl
IHRvIHRoZSBib2R5IHN0cmVhbQorICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCop
OworICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Cisg
ICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJv
b2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNp
dFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZp
c2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNo
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKKyAgICBib29sIGlzU2luZ2xlU3RhdGVt
ZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKKyAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVElu
dGVybUxvb3AgKm5vZGUpOworICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNpdCwgY29u
c3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29uc3QgVFN0
cmluZyAmcG9zdFN0cmluZyk7CisgICAgVFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25zdCBUSW50
ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0eXBl
KSBjb25zdDsKKworICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycyk7Cisg
ICAgY29uc3QgQ29uc3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlICZ0
eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsKKworICAgIFRTdHJpbmcgc2Nv
cGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpOworICAgIFRTdHJpbmcgc2NvcGVkU3Ry
dWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKKyAgICBUU3RyaW5nIHN0cnVjdExvb2t1cChj
b25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7CisKKyAgICBUUGFyc2VDb250ZXh0ICZtQ29udGV4dDsK
KyAgICBVbmZvbGRTZWxlY3QgKm1VbmZvbGRTZWxlY3Q7CisgICAgYm9vbCBtSW5zaWRlRnVuY3Rp
b247CisKKyAgICAvLyBPdXRwdXQgc3RyZWFtcworICAgIFRJbmZvU2lua0Jhc2UgbUhlYWRlcjsK
KyAgICBUSW5mb1NpbmtCYXNlIG1Cb2R5OworICAgIFRJbmZvU2lua0Jhc2UgbUZvb3RlcjsKKwor
ICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CisgICAgc3RkOjpzZXQ8c3Rk
OjpzdHJpbmc+IG1SZWZlcmVuY2VkVmFyeWluZ3M7CisKKyAgICAvLyBQYXJhbWV0ZXJzIGRldGVy
bWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAorICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkQ7CisgICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRQcm9qOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7CisgICAgYm9vbCBt
VXNlc1RleHR1cmVDdWJlOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOworICAgIGJv
b2wgbVVzZXNEZXB0aFJhbmdlOworICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7CisgICAgYm9vbCBt
VXNlc1BvaW50Q29vcmQ7CisgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVz
ZXNQb2ludFNpemU7CisgICAgYm9vbCBtVXNlc1hvcjsKKyAgICBib29sIG1Vc2VzTW9kMTsKKyAg
ICBib29sIG1Vc2VzTW9kMjsKKyAgICBib29sIG1Vc2VzTW9kMzsKKyAgICBib29sIG1Vc2VzTW9k
NDsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQxOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2Fy
ZDI7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsKKyAgICBib29sIG1Vc2VzRmFjZWZvcndh
cmQ0OworICAgIGJvb2wgbVVzZXNFcXVhbE1hdDI7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0MzsK
KyAgICBib29sIG1Vc2VzRXF1YWxNYXQ0OworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7CisgICAg
Ym9vbCBtVXNlc0VxdWFsVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxWZWM0OworICAgIGJvb2wg
bVVzZXNFcXVhbElWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbElWZWMzOworICAgIGJvb2wgbVVz
ZXNFcXVhbElWZWM0OworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMyOworICAgIGJvb2wgbVVzZXNF
cXVhbEJWZWMzOworICAgIGJvb2wgbVVzZXNFcXVhbEJWZWM0OworICAgIGJvb2wgbVVzZXNBdGFu
MjsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOworICAgIENv
bnN0cnVjdG9ycyBtQ29uc3RydWN0b3JzOworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5n
PiBTdHJ1Y3ROYW1lczsKKyAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7CisgICAgU3RydWN0RGVj
bGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJhdGlvbnM7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PGludD4gU2NvcGVCcmFja2V0OworICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0OworICAg
IHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKKworICAgIGludCBtQXJndW1lbnRJbmRleDsgICAv
LyBGb3IgY3JlYXRpbmcgdW5pcXVlIGFyZ3VtZW50IG5hbWVzCit9OworfQorCisjZW5kaWYgICAv
LyBDT01QSUxFUl9PVVRQVVRITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vCisvLyBTdWItIHZlY3RvciBhbmQgbWF0cml4IGZpZWxkcworLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCisvLworLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5n
ZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZvciBhIHZlY3Rvci4KKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCB2ZWNT
aXplLCBUVmVjdG9yRmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAgIGZpZWxkcy5udW0g
PSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKKyAgICBpZiAoZmllbGRzLm51bSA+IDQpIHsKKyAg
ICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBT
dHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
ZW51bSB7CisgICAgICAgIGV4eXp3LAorICAgICAgICBlcmdiYSwKKyAgICAgICAgZXN0cHEsCisg
ICAgfSBmaWVsZFNldFs0XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsg
KytpKSB7CisgICAgICAgIHN3aXRjaCAoY29tcFN0cmluZ1tpXSkgIHsKKyAgICAgICAgY2FzZSAn
eCc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmll
bGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzog
CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7CisgICAgICAgICAgICBmaWVsZFNl
dFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAg
ICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOworICAgICAgICAgICAgZmllbGRTZXRbaV0g
PSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd5JzogCisgICAgICAg
ICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGV4
eXp3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2cnOiAKKyAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJnYmE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3onOiAKKyAgICAgICAgICAgIGZpZWxkcy5v
ZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbaV0gPSAyOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ld
ID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ3cnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnYSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNb
aV0gPSAzOworICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICdxJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3Rv
ciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZmllbGRzLm51bTsgKytpKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0c1tpXSA+PSB2
ZWNTaXplKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlv
biBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAg
ICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtpLTFdKSB7CisgICAgICAgICAgICAgICAg
ZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxkcyBub3QgZnJvbSB0
aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCisvLworLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJp
bmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKKy8vIGZvciBhIG1hdHJpeC4KKy8vCitib29s
IFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJp
bmcsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQoreworICAg
IGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwor
ICAgIGZpZWxkcy5yb3cgPSAtMTsKKyAgICBmaWVsZHMuY29sID0gLTE7CisKKyAgICBpZiAoY29t
cFN0cmluZy5zaXplKCkgIT0gMikgeworICAgICAgICBlcnJvcihsaW5lLCAiaWxsZWdhbCBsZW5n
dGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbXBTdHJpbmdbMF0gPT0g
J18nKSB7CisgICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0g
PiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSB0cnVlOworICAgICAg
ICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKKyAgICB9IGVsc2UgaWYgKGNvbXBT
dHJpbmdbMV0gPT0gJ18nKSB7CisgICAgICAgIGlmIChjb21wU3RyaW5nWzBdIDwgJzAnIHx8IGNv
bXBTdHJpbmdbMF0gPiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSB0
cnVlOworICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcwJzsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4g
JzMnIHx8CisgICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNvbXBTdHJpbmdbMV0g
PiAnMycpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcw
JzsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CisgICAgfQorCisg
ICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNpemUpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdl
IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFcnJvcnMK
Ky8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIFRyYWNrIHdoZXRoZXIgZXJyb3JzIGhhdmUg
b2NjdXJyZWQuCisvLwordm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkKK3sKKyAgICByZWNv
dmVyZWRGcm9tRXJyb3IgPSB0cnVlOworfQorCisvLworLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRv
IG91dHB1dCBhbGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KKy8vCit2b2lkIFRQYXJzZUNv
bnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbkxpbmUsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25z
dCBjaGFyICpzelRva2VuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
c3pFeHRyYUluZm9Gb3JtYXQsIC4uLikKK3sKKyAgICBjaGFyIHN6RXh0cmFJbmZvWzQwMF07Cisg
ICAgdmFfbGlzdCBtYXJrZXI7CisKKyAgICB2YV9zdGFydChtYXJrZXIsIHN6RXh0cmFJbmZvRm9y
bWF0KTsKKworICAgIHZzbnByaW50ZihzekV4dHJhSW5mbywgc2l6ZW9mKHN6RXh0cmFJbmZvKSwg
c3pFeHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7CisKKyAgICAvKiBWQysrIGZvcm1hdDogZmlsZShs
aW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8KKyAgICBpbmZvU2luay5p
bmZvLnByZWZpeChFUHJlZml4RXJyb3IpOworICAgIGluZm9TaW5rLmluZm8ubG9jYXRpb24obkxp
bmUpOworICAgIGluZm9TaW5rLmluZm8gPDwgIiciIDw8IHN6VG9rZW4gPDwgICInIDogIiA8PCBz
elJlYXNvbiA8PCAiICIgPDwgc3pFeHRyYUluZm8gPDwgIlxuIjsKKworICAgIHZhX2VuZChtYXJr
ZXIpOworCisgICAgKytudW1FcnJvcnM7Cit9CisKKy8vCisvLyBTYW1lIGVycm9yIG1lc3NhZ2Ug
Zm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNv
bnRleHQ6OmFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0
LCBUU3RyaW5nIHJpZ2h0KQoreworICAgIGVycm9yKGxpbmUsICIiLCBvcCwgImNhbm5vdCBjb252
ZXJ0IGZyb20gJyVzJyB0byAnJXMnIiwKKyAgICAgICAgICByaWdodC5jX3N0cigpLCBsZWZ0LmNf
c3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIHVu
YXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OnVuYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCkKK3sKKyAg
IGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAorICAgICAgICAgICJubyBv
cGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9mIHR5cGUgJXMgKG9y
IHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAorICAgICAgICAgIG9wLCBvcGVy
YW5kLmNfc3RyKCkpOworfQorCisvLworLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgYmlu
YXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KKy8vCit2b2lkIFRQYXJzZUNvbnRleHQ6OmJpbmFy
eU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRTdHJpbmcg
cmlnaHQpCit7CisgICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5cGVzICIsIG9wLCAK
KyAgICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhIGxlZnQt
aGFuZCBvcGVyYW5kIG9mIHR5cGUgJyVzJyBhbmQgIgorICAgICAgICAgICAgImEgcmlnaHQgb3Bl
cmFuZCBvZiB0eXBlICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbiki
LCAKKyAgICAgICAgICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3RyKCkpOworfQorCiti
b29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVjaXNp
b24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpeworICAgIHN3aXRjaCggdHlwZSApeworICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkICl7
CisgICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVjaWZpZWQgZm9yIChm
bG9hdCkiLCAiIiwgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0SW50OgorICAgICAgICBpZiggcHJlY2lzaW9uID09
IEVicFVuZGVmaW5lZCApeworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNpb24g
c3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LworLy8gQm90aCB0ZXN0IGFuZCBpZiBuZWNlc3NhcnksIHNwaXQgb3V0IGFuIGVycm9yLCB0byBz
ZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhbiBsLXZhbHVlIHRoYXQgY2FuIGJlIG9wZXJh
dGVkIG9uIHRoaXMgd2F5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9y
LgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBUSW50ZXJtU3ltYm9sKiBz
eW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmlu
YXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgaWYgKGJpbmFyeU5vZGUp
IHsKKyAgICAgICAgYm9vbCBlcnJvclJldHVybjsKKworICAgICAgICBzd2l0Y2goYmluYXJ5Tm9k
ZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNl
IEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Cisg
ICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+
Z2V0TGVmdCgpKTsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICAgICAg
ZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRM
ZWZ0KCkpOworICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikgeworICAgICAgICAgICAgICAg
IGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07CisKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7CisgICAgICAgICAgICAgICAg
VEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUtPmdldEFzQWdncmVnYXRlKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6
Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9
ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCktPmdldElDb25zdCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRbdmFsdWVd
Kys7ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1ZV0gPiAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgb2Ygc3dpenpsZSBj
YW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHJldHVybiBlcnJv
clJldHVybjsKKyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIiKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIGNvbnN0IGNoYXIqIHN5bWJv
bCA9IDA7CisgICAgaWYgKHN5bU5vZGUgIT0gMCkKKyAgICAgICAgc3ltYm9sID0gc3ltTm9kZS0+
Z2V0U3ltYm9sKCkuY19zdHIoKTsKKworICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAwOworICAg
IHN3aXRjaCAobm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICBjYXNlIEV2cUNvbnN0OiAgICAg
ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3Qi
OyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKKyAgICBjYXNlIEV2cVVuaWZvcm06
ICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFy
eWluZyI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFJbnB1dDogICAgICAgICAgbWVzc2FnZSA9
ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdD
b29yZDogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGds
X0Zyb250RmFjaW5nIjsgYnJlYWs7CisgICAgY2FzZSBFdnFQb2ludENvb3JkOiAgICAgbWVzc2Fn
ZSA9ICJjYW4ndCBtb2RpZnkgZ2xfUG9pbnRDb29yZCI7ICBicmVhazsKKyAgICBkZWZhdWx0Ogor
CisgICAgICAgIC8vCisgICAgICAgIC8vIFR5cGUgdGhhdCBjYW4ndCBiZSB3cml0dGVuIHRvPwor
ICAgICAgICAvLworICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAg
ICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSB2b2lkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2Ug
PT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgb2th
eSwgbm8gZXJyb3IuCisgICAgLy8KKyAgICBpZiAobWVzc2FnZSA9PSAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLworICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGFuIGVy
cm9yIGFuZCBhIG1lc3NhZ2UuCisgICAgLy8KKyAgICBpZiAoc3ltTm9kZSkKKyAgICAgICAgZXJy
b3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICJcIiVzXCIgKCVzKSIsIHN5bWJvbCwg
bWVzc2FnZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWly
ZWQiLCBvcCwgIiglcykiLCBtZXNzYWdlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLwor
Ly8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUg
aWYgdGhlIG5vZGUgaXMgcmVhbGx5CisvLyBhIGNvbnN0YW50LgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJv
ckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVycm9yKG5vZGUt
PmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAiIiwgIiIpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkg
c3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFsbHkKKy8vIGFuIGlu
dGVnZXIuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCisvLworYm9v
bCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNv
bnN0IGNoYXIqIHRva2VuKQoreworICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJ
bnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWly
ZWQiLCB0b2tlbiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLyBCb3RoIHRl
c3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB3ZSBhcmUg
Y3VycmVudGx5CisvLyBnbG9iYWxseSBzY29wZWQuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9iYWxFcnJvckNoZWNr
KGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgaWYgKGds
b2JhbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3IobGluZSwgIm9ubHkgYWxs
b3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vCisvLyBGb3Igbm93LCBrZWVwIGl0IHNpbXBsZTogIGlmIGl0IHN0YXJ0cyAiZ2xfIiwg
aXQncyByZXNlcnZlZCwgaW5kZXBlbmRlbnQKKy8vIG9mIHNjb3BlLiAgRXhjZXB0LCBpZiB0aGUg
c3ltYm9sIHRhYmxlIGlzIGF0IHRoZSBidWlsdC1pbiBwdXNoLWxldmVsLAorLy8gd2hpY2ggaXMg
d2hlbiB3ZSBhcmUgcGFyc2luZyBidWlsdC1pbnMuCisvLyBBbHNvIGNoZWNrcyBmb3IgIndlYmds
XyIgYW5kICJfd2ViZ2xfIiByZXNlcnZlZCBpZGVudGlmaWVycyBpZiBwYXJzaW5nIGEKKy8vIHdl
YmdsIHNoYWRlci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgor
Ly8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25z
dCBUU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNlcnZl
ZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKKyAgICBpZiAoIXN5bWJvbFRhYmxl
LmF0QnVpbHRJbkxldmVsKCkpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDMp
ID09IFRTdHJpbmcoImdsXyIpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgImdsXyIsICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzcGVjID09IEVTaFNwZWNXZWJHTCkgeworICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuc3Vic3RyKDAsIDYpID09IFRTdHJpbmcoIndlYmdsXyIpKSB7CisgICAgICAgICAgICAg
ICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iLCAiIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5zdWJzdHIoMCwgNykgPT0gVFN0cmluZygiX3dlYmdsXyIpKSB7CisgICAgICAgICAgICAg
ICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgeworICAgICAgICAgICAg
Ly9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBm
b3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7CisgICAgICAgICAg
ICAvL3JldHVybiB0cnVlOworICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZCBmb3Ig
ZnV0dXJlIHVzZS4iLCBsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIE1ha2Ugc3VyZSB0aGVy
ZSBpcyBlbm91Z2ggZGF0YSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQKKy8v
IHNvbWV0aGluZyBvZiB0aGUgdHlwZSBvZiB0aGUgY29uc3RydWN0b3IuICBBbHNvIHJldHVybnMg
dGhlIHR5cGUgb2YKKy8vIHRoZSBjb25zdHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlcmUgd2FzIGFuIGVycm9yIGluIGNvbnN0cnVjdGlvbi4KKy8vCitib29sIFRQYXJzZUNvbnRl
eHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5vZGUqIG5vZGUsIFRG
dW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5cGUpCit7CisgICAgKnR5
cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCk7CisKKyAgICBib29sIGNvbnN0cnVjdGluZ01h
dHJpeCA9IGZhbHNlOworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0
OgorICAgICAgICBjb25zdHJ1Y3RpbmdNYXRyaXggPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OiAKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3Rl
OiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2YWlsYWJsZSwgYnV0IG5v
dCBva2F5IHRvIGhhdmUgdW51c2VkCisgICAgLy8gYXJndW1lbnRzLiAgJ2Z1bGwnIHdpbGwgZ28g
dG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAgSWYgd2UgbG9vcAorICAg
IC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28gJ292ZXJmdWxsJyB3aWxs
IGJlY29tZSB0cnVlLgorICAgIC8vCisKKyAgICBpbnQgc2l6ZSA9IDA7CisgICAgYm9vbCBjb25z
dFR5cGUgPSB0cnVlOworICAgIGJvb2wgZnVsbCA9IGZhbHNlOworICAgIGJvb2wgb3ZlckZ1bGwg
PSBmYWxzZTsKKyAgICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFsc2U7CisgICAgYm9vbCBhcnJh
eUFyZyA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1D
b3VudCgpOyArK2kpIHsKKyAgICAgICAgc2l6ZSArPSBmdW5jdGlvbltpXS50eXBlLT5nZXRPYmpl
Y3RTaXplKCk7CisgICAgICAgIAorICAgICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4ICYmIGZ1
bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgICAgICBtYXRyaXhJbk1hdHJpeCA9
IHRydWU7CisgICAgICAgIGlmIChmdWxsKQorICAgICAgICAgICAgb3ZlckZ1bGwgPSB0cnVlOwor
ICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkg
JiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCisgICAgICAgICAgICBmdWxsID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9IEV2cUNv
bnN0KQorICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlv
bltpXS50eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7CisgICAg
fQorICAgIAorICAgIGlmIChjb25zdFR5cGUpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmll
cihFdnFDb25zdCk7CisKKyAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5
U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgeworICAgICAgICBlcnJvcihsaW5l
LCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50
IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQgYXJyYXkiLCAi
Y29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtYXRyaXhJbk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgIGlmIChmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCkgIT0gMSkgeworICAgICAgICAgIGVycm9yKGxpbmUsICJjb25z
dHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFyZ3VtZW50Iiwg
ImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG92ZXJGdWxsKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJ0b28gbWFu
eSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5p
c0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJh
bUNvdW50KCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25zdHJ1Y3RvciBw
YXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlIGZpZWxkcyIs
ICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKCF0eXBlLT5pc01hdHJpeCgpKSB7CisgICAgICAgIGlmICgob3AgIT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSB8fAor
ICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwgdHlwZS0+Z2V0
T2JqZWN0U2l6ZSgpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBlbm91Z2ggZGF0
YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQq
IHR5cGVkID0gbm9kZS0+Z2V0QXNUeXBlZCgpOworICAgIGlmICh0eXBlZCA9PSAwKSB7CisgICAg
ICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIGEgdHlw
ZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVkLT5nZXRCYXNp
Y1R5cGUoKSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgc2FtcGxl
ciIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMg
ZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJlZW4gZGVjbGFy
ZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCisvLworLy8gcmV0
dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnZv
aWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBU
UHVibGljVHlwZSYgcHViVHlwZSkKK3sKKyAgICBpZiAocHViVHlwZS50eXBlID09IEVidFZvaWQp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgaWRl
bnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0
aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBib29sZWFuIGV4
cHJlc3Npb24gb3Igbm90CisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IK
Ky8vCitib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBU
SW50ZXJtVHlwZWQqIHR5cGUpCit7CisgICAgaWYgKHR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwgdHlwZS0+aXNW
ZWN0b3IoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVj
dGVkIiwgIiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBub2Rl
IChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4gZXhwcmVzc2lv
biBvciBub3QKKy8vCisvLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJvcgorLy8KK2Jv
b2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNU
eXBlJiBwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFy
cmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgICAgIGVycm9y
KGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJz
ZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYg
cFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRT
dHJ1Y3QpIHsKKyAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsK
KyAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBU
eXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CisgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgeworICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBl
KSwgIiIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCit7CisgICAgaWYgKChwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0
IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCisgICAgICAgIHBUeXBlLnR5
cGUgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3
aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwVHlw
ZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJyb3JDaGVjayhsaW5lLCBwVHlw
ZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBl
JiB0eXBlKQoreworICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0g
RXZxSW5PdXQpICYmIAorICAgICAgICAgICAgIHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3Ry
dWN0ICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICBlcnJvcihs
aW5lLCAic2FtcGxlcnMgY2Fubm90IGJlIG91dHB1dCBwYXJhbWV0ZXJzIiwgdHlwZS5nZXRCYXNp
Y1N0cmluZygpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cGUm
IHR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpIHsKKyAgICAgICAgVFR5cGVMaXN0JiBzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKnN0cnVjdHVyZVtpXS50eXBl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIHNpemUgY2hlY2tpbmcgZm9yIGFuIGFycmF5
IHR5cGUncyBzaXplLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Iu
CisvLworYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGludCBsaW5lLCBU
SW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoY29uc3Rh
bnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJl
c3Npb24iLCAiIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzaXpl
ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOworCisgICAg
aWYgKHNpemUgPD0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgcG9zaXRpdmUgaW50ZWdlciIsICIiLCAiIik7CisgICAgICAgIHNpemUgPSAxOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBT
ZWUgaWYgdGhpcyBxdWFsaWZpZXIgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSkKK3sKKyAgICBpZiAo
dHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRD
b21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIGV4dGVuc2lvbkVycm9y
Q2hlY2sobGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgdHlwZSBjYW4g
YmUgYW4gYXJyYXkuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgor
Ly8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1
YmxpY1R5cGUgdHlwZSkKK3sKKyAgICAvLworICAgIC8vIENhbiB0aGUgdHlwZSBiZSBhbiBhcnJh
eT8KKyAgICAvLworICAgIGlmICh0eXBlLmFycmF5KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgYXJyYXlzIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVT
dHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIERvIGFsbCB0aGUgc2VtYW50aWMgY2hlY2tpbmcg
Zm9yIGRlY2xhcmluZyBhbiBhcnJheSwgd2l0aCBhbmQgCisvLyB3aXRob3V0IGEgc2l6ZSwgYW5k
IG1ha2UgdGhlIHJpZ2h0IGNoYW5nZXMgdG8gdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisvLyBzaXpl
ID09IDAgbWVhbnMgbm8gc3BlY2lmaWVkIHNpemUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVj
ayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBjaGVjayBmb3IgcmVzZXJ2
ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3ltYm9sIHRh
YmxlLAorICAgIC8vIGJlY2F1c2UgcmVzZXJ2ZWQgYXJyYXlzIGNhbiBiZSByZWRlY2xhcmVkLgor
ICAgIC8vCisKKyAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCisgICAgYm9vbCBzYW1lU2NvcGUg
PSBmYWxzZTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZp
ZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsKKyAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVT
Y29wZSkgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICB2YXJpYWJsZSA9
IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKKworICAgICAgICBpZiAo
dHlwZS5hcnJheVNpemUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5
U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CisKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0
KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50
aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAg
ICAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgaWRlbnRpZmllci5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYg
KCEgdmFyaWFibGUtPmdldFR5cGUoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmluZyBub24tYXJyYXkgYXMgYXJyYXkiLCBpZGVudGlmaWVyLmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZXJy
b3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBzaXplIiwgaWRlbnRpZmllci5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKCEgdmFyaWFibGUtPmdldFR5cGUoKS5zYW1lRWxlbWVudFR5cGUoVFR5
cGUodHlwZSkpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJhdGlvbiBvZiBh
cnJheSB3aXRoIGEgZGlmZmVyZW50IHR5cGUiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgVFR5cGUqIHQgPSB2
YXJpYWJsZS0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAgICAgICAgd2hpbGUgKHQgIT0g
MCkgeworICAgICAgICAgICAgaWYgKHQtPmdldE1heEFycmF5U2l6ZSgpID4gdHlwZS5hcnJheVNp
emUpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiaGlnaGVyIGluZGV4IHZhbHVlIGFs
cmVhZHkgdXNlZCBmb3IgdGhlIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0LT5z
ZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOworICAgICAgICAgICAgdCA9IHQtPmdldEFycmF5
SW5mb3JtYXRpb25UeXBlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5hcnJheVNp
emUpCisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFy
cmF5U2l6ZSk7CisgICAgfSAKKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlm
aWVyLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5v
ZGUsIFRUeXBlKiB0eXBlLCBpbnQgc2l6ZSwgYm9vbCB1cGRhdGVGbGFnLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgYm9vbCBidWlsdEluID0gZmFsc2U7CisgICAgVFN5bWJvbCogc3ltYm9sID0g
c3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRTeW1ib2woKSwgJmJ1aWx0SW4pOworICAgIGlmIChz
eW1ib2wgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiIHVuZGVjbGFyZWQgaWRlbnRpZmll
ciIsIG5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUq
PihzeW1ib2wpOworCisgICAgdHlwZS0+c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUodmFyaWFibGUt
PmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkpOworICAgIHZhcmlhYmxlLT51cGRhdGVBcnJheUlu
Zm9ybWF0aW9uVHlwZSh0eXBlKTsKKworICAgIC8vIHNwZWNpYWwgY2FzaW5nIHRvIHRlc3QgaW5k
ZXggdmFsdWUgb2YgZ2xfRnJhZ0RhdGEuIElmIHRoZSBhY2Nlc3NlZCBpbmRleCBpcyA+PSBnbF9N
YXhEcmF3QnVmZmVycworICAgIC8vIGl0cyBhbiBlcnJvcgorICAgIGlmIChub2RlLT5nZXRTeW1i
b2woKSA9PSAiZ2xfRnJhZ0RhdGEiKSB7CisgICAgICAgIFRTeW1ib2wqIGZyYWdEYXRhID0gc3lt
Ym9sVGFibGUuZmluZCgiZ2xfTWF4RHJhd0J1ZmZlcnMiLCAmYnVpbHRJbik7CisgICAgICAgIGlm
IChmcmFnRGF0YSA9PSAwKSB7CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsICJnbF9NYXhEcmF3QnVmZmVycyBub3QgZGVmaW5lZCIsIGxpbmUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZnJh
Z0RhdGFWYWx1ZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KGZyYWdEYXRhKS0+Z2V0Q29uc3RQ
b2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CisgICAgICAgIGlmIChmcmFnRGF0YVZhbHVlIDw9IHNp
emUpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJnbF9GcmFnRGF0YSBjYW4g
b25seSBoYXZlIGEgbWF4IGFycmF5IHNpemUgb2YgdXAgdG8gZ2xfTWF4RHJhd0J1ZmZlcnMiLCAi
Iik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IHdlIGRvbnQgd2FudCB0byB1cGRhdGUgdGhlIG1heEFycmF5U2l6ZSB3aGVuIHRoaXMgZmxhZyBp
cyBub3Qgc2V0LCB3ZSBqdXN0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIAorICAgIC8vIG5vZGUgdHlw
ZSBpbiB0aGUgY2hhaW4gb2Ygbm9kZSB0eXBlcyBzbyB0aGF0IGl0cyB1cGRhdGVkIHdoZW4gYSBo
aWdoZXIgbWF4QXJyYXlTaXplIGNvbWVzIGluLgorICAgIGlmICghdXBkYXRlRmxhZykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZSsrOworICAgIHZhcmlhYmxlLT5nZXRUeXBlKCku
c2V0TWF4QXJyYXlTaXplKHNpemUpOworICAgIHR5cGUtPnNldE1heEFycmF5U2l6ZShzaXplKTsK
KyAgICBUVHlwZSogdHQgPSB0eXBlOworCisgICAgd2hpbGUodHQtPmdldEFycmF5SW5mb3JtYXRp
b25UeXBlKCkgIT0gMCkgeworICAgICAgICB0dCA9IHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlw
ZSgpOworICAgICAgICB0dC0+c2V0TWF4QXJyYXlTaXplKHNpemUpOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworLy8KKy8vIEVuZm9yY2Ugbm9uLWluaXRpYWxpemVyIHR5cGUvcXVh
bGlmaWVyIHJ1bGVzLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Iu
CisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGludCBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSkKK3sKKyAgICAvLworICAg
IC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgorICAgIC8vCisgICAgaWYgKHR5cGUu
cXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVt
cG9yYXJ5OworICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdj
b25zdCcgbXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisv
LyBEbyBzZW1hbnRpYyBjaGVja2luZyBmb3IgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0aGF0IGhh
cyBubyBpbml0aWFsaXplciwKKy8vIGFuZCB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZS4KKy8vCisv
LyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29u
dGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQ
dWJsaWNUeXBlJiB0eXBlKQoreworICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRl
bnRpZmllcikpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CisKKyAgICBpZiAoISBz
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBlcnJvcihsaW5lLCAicmVk
ZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZv
aWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbUVy
cm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFt
UXVhbGlmaWVyLCBUVHlwZSogdHlwZSkKK3sgICAgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFD
b25zdCAmJiBxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgb24gZnVuY3Rpb24gcGFyYW1ldGVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllciksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QgJiYgcGFyYW1RdWFsaWZpZXIgIT0gRXZxSW4p
IHsKKyAgICAgICAgZXJyb3IobGluZSwgInF1YWxpZmllciBub3QgYWxsb3dlZCB3aXRoICIsIGdl
dFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpLCBnZXRRdWFsaWZpZXJTdHJpbmcocGFyYW1RdWFs
aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHF1YWxpZmll
ciA9PSBFdnFDb25zdCkKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0UmVh
ZE9ubHkpOworICAgIGVsc2UKKyAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBhcmFtUXVh
bGlmaWVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKiBleHRlbnNpb24pCit7ICAg
ICAgIAorICAgIGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNpb25dID09IEVCaFdhcm4pIHsK
KyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAoImV4dGVuc2lv
biAiICsgVFN0cmluZyhleHRlbnNpb24pICsgIiBpcyBiZWluZyB1c2VkIikuY19zdHIoKSwgbGlu
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGV4dGVuc2lvbkJlaGF2
aW9yW2V4dGVuc2lvbl0gPT0gRUJoRGlzYWJsZSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZXh0
ZW5zaW9uIiwgZXh0ZW5zaW9uLCAiaXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKy8vCisvLyBOb24tRXJyb3JzLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisv
LworLy8gTG9vayB1cCBhIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYW5kIG1h
a2Ugc3VyZSBpdCBpcyBhIGZ1bmN0aW9uLgorLy8KKy8vIFJldHVybiB0aGUgZnVuY3Rpb24gc3lt
Ym9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KKy8vCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNv
bnRleHQ6OmZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWls
dEluKQoreworICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2Fs
bC0+Z2V0TWFuZ2xlZE5hbWUoKSwgYnVpbHRJbik7CisKKyAgICBpZiAoc3ltYm9sID09IDApIHsg
ICAgICAgIAorICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5j
dGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGlmICghIHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgICAg
IGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+Z2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGNvbnN0IFRG
dW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wp
OworICAgIAorICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworLy8KKy8vIEluaXRpYWxpemVycyBz
aG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9m
CisvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBU
UHVibGljVHlwZSYgcFR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBU
VmFyaWFibGUqIHZhcmlhYmxlKQoreworICAgIFRUeXBlIHR5cGUgPSBUVHlwZShwVHlwZSk7CisK
KyAgICBpZiAodmFyaWFibGUgPT0gMCkgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNr
KGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
aWYgKHZvaWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIsIHBUeXBlKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIGFkZCB2YXJpYWJsZSB0byBz
eW1ib2wgdGFibGUKKyAgICAgICAgLy8KKyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxl
KCZpZGVudGlmaWVyLCB0eXBlKTsKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2
YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQgYnkgZXJyb3Ig
cmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKKyAgICAgICAgICAgIC8vIHBvcCB3aWxsIHRha2UgY2Fy
ZSBvZiB0aGUgbWVtb3J5CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGlkZW50
aWZpZXIgbXVzdCBiZSBvZiB0eXBlIGNvbnN0YW50LCBhIGdsb2JhbCwgb3IgYSB0ZW1wb3JhcnkK
KyAgICAvLworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdmFyaWFibGUtPmdldFR5cGUoKS5n
ZXRRdWFsaWZpZXIoKTsKKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChx
dWFsaWZpZXIgIT0gRXZxR2xvYmFsKSAmJiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBpbml0aWFsaXplIHRoaXMgdHlwZSBvZiBxdWFsaWZp
ZXIgIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8KKyAgICAvLyB0ZXN0IGZvciBhbmQgcHJv
cGFnYXRlIGNvbnN0YW50CisgICAgLy8KKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
IHsKKyAgICAgICAgaWYgKHF1YWxpZmllciAhPSBpbml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGFzc2lnbmluZyBub24tY29u
c3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFyaWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICIgbm9uLW1hdGNoaW5nIHR5cGVzIGZvciBjb25zdCBpbml0aWFs
aXplciAiLCAKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmll
clN0cmluZygpLCAiIik7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLmNoYW5nZVF1
YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQ
b2ludGVyKCk7CisKKyAgICAgICAgICAgIGlmICh0eXBlLmdldE9iamVjdFNpemUoKSA9PSAxICYm
IHR5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICAgICAgKnVu
aW9uQXJyYXkgPSAoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpKVswXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpKSB7CisgICAgICAgICAgICBj
b25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRB
c1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
KiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigp
OworICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWdu
IHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmco
KS5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7CisgICAgICAgIFRJbnRl
cm1TeW1ib2wqIGludGVybVN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCks
IGxpbmUpOworICAgICAgICBpbnRlcm1Ob2RlID0gaW50ZXJtZWRpYXRlLmFkZEFzc2lnbihFT3BJ
bml0aWFsaXplLCBpbnRlcm1TeW1ib2wsIGluaXRpYWxpemVyLCBsaW5lKTsKKyAgICAgICAgaWYg
KGludGVybU5vZGUgPT0gMCkgeworICAgICAgICAgICAgYXNzaWduRXJyb3IobGluZSwgIj0iLCBp
bnRlcm1TeW1ib2wtPmdldENvbXBsZXRlU3RyaW5nKCksIGluaXRpYWxpemVyLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfSBl
bHNlIAorICAgICAgICBpbnRlcm1Ob2RlID0gMDsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlKQoreworICAgIGlmICghYWdnck5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhbGxDb25zdGFudCA9IHRydWU7CisKKyAgICAvLyBj
aGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFudHMgc28gdGhhdCB0aGV5IGNh
biBiZSBpbnNlcnRlZCBpbnRvIAorICAgIC8vIHRoZSBwYXJlbnQgbm9kZQorICAgIGlmIChhZ2dy
Tm9kZSkgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmNoaWxkU2VxdWVuY2VWZWN0b3IgPSBh
Z2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpp
dGVyYXRvciBwID0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAgIT0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsr
KSB7CisgICAgICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGFsbENvbnN0YW50OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg
dG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2
YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRv
IHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLwor
Ly8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVn
YXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3IuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUs
IFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBmbkNhbGwsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAg
ICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBUVHlwZUxp
c3Q6Oml0ZXJhdG9yIG1lbWJlclR5cGVzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1
Y3QpCisgICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmJlZ2luKCk7Cisg
ICAgCisgICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKKyAgICBpZiAodHlwZS0+aXNBcnJh
eSgpKQorICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOworCisgICAgYm9vbCBz
aW5nbGVBcmc7CisgICAgaWYgKGFnZ3JOb2RlKSB7CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0
T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c2luZ2xlQXJnID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7
CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7CisgICAgaWYgKHNpbmdsZUFyZykgeworICAg
ICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3IgaXMg
YmVpbmcgY2FsbGVkIAorICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lkZSB0
aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9uIG9u
Y2UuCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBm
YWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBlcykudHlw
ZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5nZXRMaW5l
KCksIGZhbHNlKTsKKworICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0FnZ3Jl
Z2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBm
b2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7Cisg
ICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdOb2RlOwor
ICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KKyAg
ICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFt
ZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVj
dG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAorICAg
IC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2Vl
cHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVj
a2VkICAgIAorICAgIAorICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0
b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252
ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxv
d2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0
aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KKyAgICAK
KyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJl
Z2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNl
VmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgeworICAgICAgICBpZiAodHlwZS0+aXNB
cnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1l
bnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVs
c2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05vZGUgPSBj
b25zdHJ1Y3RTdHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSkudHlwZSwgcGFyYW1D
b3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUo
KSwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAg
KnAgPSBuZXdOb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkKiBjb25z
dHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihhZ2dyTm9kZSwgb3As
IGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENv
bnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7CisgICAgaWYg
KGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiBjb25zdENvbnN0cnVjdG9yOworCisg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBU
VHlwZSYgdHlwZSkKK3sKKyAgICBib29sIGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChh
Z2dyTm9kZSk7CisgICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7CisgICAgaWYgKGNhbkJlRm9s
ZGVkKSB7CisgICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7CisgICAgICAgIENvbnN0YW50
VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUo
KV07CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsK
KyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dy
Tm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCks
IHN5bWJvbFRhYmxlLCAgdHlwZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5v
ZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBz
eW1ib2xUYWJsZSwgIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBs
ZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVl
CisvLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlz
IGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5
cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVj
MikgYW5kIGlzIHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRv
IGludC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBu
b2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihj
b25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJj
ZUxvYyBsaW5lLCBib29sIHN1YnNldCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7Cisg
ICAgVE9wZXJhdG9yIGJhc2ljT3A7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5
cGVzIGFzIG5lZWRlZC4KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0VmVjNDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0
cnVjdEZsb2F0OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJbnQ6CisgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29u
c3RydWN0aW9uIiwgIiIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNp
Y09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKKyAgICBpZiAobmV3Tm9k
ZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVj
dG9yIiwgIiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5v
dywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rp
b24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVy
d2lzZSwgc2tpcCBvdXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2Rl
ICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2Rl
OworCisgICAgLy8gc2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBm
b3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5z
ZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVu
Y3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1
cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBl
Y3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25z
dHJ1Y3Rvci4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2Rl
IGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0
Y2guCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RTdHJ1Y3QoVElu
dGVybU5vZGUqIG5vZGUsIFRUeXBlKiB0eXBlLCBpbnQgcGFyYW1Db3VudCwgVFNvdXJjZUxvYyBs
aW5lLCBib29sIHN1YnNldCkKK3sKKyAgICBpZiAoKnR5cGUgPT0gbm9kZS0+Z2V0QXNUeXBlZCgp
LT5nZXRUeXBlKCkpIHsKKyAgICAgICAgaWYgKHN1YnNldCkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBpbnRl
cm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Iobm9kZS0+Z2V0QXNUeXBlZCgpLCBFT3BDb25z
dHJ1Y3RTdHJ1Y3QsIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICIi
LCAiY29uc3RydWN0b3IiLCAiY2Fubm90IGNvbnZlcnQgcGFyYW1ldGVyICVkIGZyb20gJyVzJyB0
byAnJXMnIiwgcGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRBc1R5cGVkKCkt
PmdldFR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCB0eXBlLT5nZXRCYXNpY1N0cmluZygpKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLworLy8gVGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgdmVjdG9y
IGZpZWxkKHMpIGJlaW5nIGFjY2Vzc2VkIGZyb20gY29udGFudCB2ZWN0b3IuCisvLyBJZiBvbmx5
IG9uZSBjb21wb25lbnQgb2YgdmVjdG9yIGlzIGFjY2Vzc2VkICh2Lnggb3IgdlswXSB3aGVyZSB2
IGlzIGEgY29udGFudCB2ZWN0b3IpLCB0aGVuIGEgY29udGFudCBub2RlIGlzCisvLyByZXR1cm5l
ZCwgZWxzZSBhbiBhZ2dyZWdhdGUgbm9kZSBpcyByZXR1cm5lZCAoZm9yIHYueHkpLiBUaGUgaW5w
dXQgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgdGhlIHN5bWJvbAorLy8gbm9kZSBv
ciBpdCBjb3VsZCBiZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWNj
ZXNzaW5nIGZpZWxkcyBpbiBhIGNvbnN0YW50IHN0cnVjdHVyZSBvciBjb2x1bW4gb2YgCisvLyBh
IGNvbnN0YW50IG1hdHJpeC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiBmaWVsZHMsIFRJbnRlcm1UeXBlZCogbm9kZSwg
VFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CisKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIGlmICh0ZW1w
Q29uc3RhbnROb2RlKSB7CisgICAgICAgIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAgIGlmICghdW5pb25BcnJheSkgeyAgLy8g
dGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSByYWlzZWQKKyAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50VW5pb24g
bm90IGluaXRpYWxpemVkIGluIGFkZENvbnN0VmVjdG9yTm9kZSBmdW5jdGlvbiIsIGxpbmUpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7IC8vIFRoZSBub2RlIGhhcyB0byBiZSBlaXRoZXIgYSBzeW1ib2wg
bm9kZSBvciBhbiBhZ2dyZWdhdGUgbm9kZSBvciBhIHRlbXBDb25zdGFudCBub2RlLCBlbHNlLCBp
dHMgYW4gZXJyb3IKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUg
dmVjdG9yIiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW2ZpZWxkcy5udW1dOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMu
bnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGZpZWxkcy5vZmZzZXRzW2ldID49IG5vZGUtPmdldFR5
cGUoKS5nZXRPYmplY3RTaXplKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIs
ICJ2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgZmllbGRzLm9mZnNl
dHNbaV0pOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbaV0gPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdEFycmF5W2ldID0g
dW5pb25BcnJheVtmaWVsZHMub2Zmc2V0c1tpXV07CisKKyAgICB9IAorICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIG5vZGUtPmdldFR5cGUo
KSwgbGluZSk7CisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0aGUgY29sdW1uIGJlaW5nIGFjY2Vzc2VkIGZyb20gYSBjb25zdGFudCBtYXRy
aXguIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvLyB0aGUgc3ltYm9sIHRhYmxlIGFu
ZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciBhIHZlY3RvciAoZWFjaCBjb2x1bW4gb2YgYSBtYXRy
aXggaXMgYSB2ZWN0b3IpLiBUaGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0
aGVyIGJlIGEgc3ltYm9sIG5vZGUgKG1bMF0gd2hlcmUgbSBpcyBhIGNvbnN0YW50IG1hdHJpeCl0
aGF0IHJlcHJlc2VudHMgYSAKKy8vIGNvbnN0YW50IG1hdHJpeCBvciBpdCBjb3VsZCBiZSB0aGUg
dHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgbWF0cml4IChzLm0xWzBdIHdoZXJl
IHMgaXMgYSBjb25zdGFudCBzdHJ1Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRDb25zdE1hdHJpeE5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRT
b3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKKyAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRV
bmlvbigpOworCisgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6
ZSgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJtYXRyaXggZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOworICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25z
dGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIiwgIiIpOworICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IHR5cGVkTm9kZTsKK30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVsZW1l
bnQgb2YgYW4gYXJyYXkgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IGFycmF5LiBUaGUgdmFsdWVz
IGFyZSByZXRyaWV2ZWQgZnJvbQorLy8gdGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBp
cyBidWlsdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuIFRoZSBpbnB1dCAKKy8vIHRvIHRo
ZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9kZSAoYVswXSB3aGVyZSBhIGlz
IGEgY29uc3RhbnQgYXJyYXkpdGhhdCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBhcnJheSBv
ciBpdCBjb3VsZCBiZSB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29uc3RhbnQgYXJy
YXkgKHMuYTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0cnVjdHVyZSkKKy8vCitUSW50ZXJt
VHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVy
bVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybVR5cGVkKiB0eXBl
ZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBub2Rl
LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9k
ZS0+Z2V0VHlwZSgpOworICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKwor
ICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJbIiwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UgJyVkJyIsIGluZGV4KTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9IDA7
CisgICAgfQorCisgICAgaW50IGFycmF5RWxlbWVudFNpemUgPSBhcnJheUVsZW1lbnRUeXBlLmdl
dE9iamVjdFNpemUoKTsKKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBD
b25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKTsKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFu
dE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGlu
ZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiLCAiIik7CisgICAgICAg
IHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlw
ZWROb2RlOworfQorCisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9m
IGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUg
c3ltYm9sIHRhYmxlLiAKKy8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3Qs
IGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RT
dHJ1Y3RGcm9tQWdncgorLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0
aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1U
eXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgaWRlbnRpZmllciwg
VEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVFR5cGVMaXN0KiBm
aWVsZHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgVEludGVybVR5cGVkICp0
eXBlZE5vZGU7CisgICAgaW50IGluc3RhbmNlU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGlu
ZGV4ID0gMDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcENvbnN0YW50Tm9kZSA9IG5v
ZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8
IGZpZWxkcy0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGlmICgoKmZpZWxkcylbaW5kZXhd
LnR5cGUtPmdldEZpZWxkTmFtZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9ICgqZmllbGRz
KVtpbmRleF0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJy
YXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworCisgICAgICAg
ICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2lu
c3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3
aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICB9IGVsc2UgeworICAg
ICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJy
b3IiLCAiIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisvLworLy8gSW5pdGlhbGl6ZSBhbGwgc3Vw
cG9ydGVkIGV4dGVuc2lvbnMgdG8gZGlzYWJsZQorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6aW5p
dGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCkKK3sKKyAgICAvLworICAgIC8vIGV4YW1wbGUgY29k
ZTogZXh0ZW5zaW9uQmVoYXZpb3JbInRlc3QiXSA9IEVCaERpc2FibGU7IC8vIHdoZXJlICJ0ZXN0
IiBpcyB0aGUgbmFtZSBvZiAKKyAgICAvLyBzdXBwb3J0ZWQgZXh0ZW5zaW9uCisgICAgLy8KKyAg
ICBleHRlbnNpb25CZWhhdmlvclsiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIl0gPSBFQmhSZXF1
aXJlOworICAgIGV4dGVuc2lvbkJlaGF2aW9yWyJHTF8zRExfYXJyYXlfb2JqZWN0cyJdID0gRUJo
RGlzYWJsZTsKK30KKworT1NfVExTSW5kZXggR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19J
TlZBTElEX1RMU19JTkRFWDsKKworYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQor
eworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRF
WCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk6
IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIC8v
CisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCk7CisgICAg
CisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVY
KSB7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTog
UGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluaXRpYWxpemVHbG9iYWxQ
YXJzZUNvbnRleHQoKQoreworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2Jh
bFBhcnNlQ29udGV4dCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICps
cFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNvbnRleHQgKj4oT1NfR2V0
VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKyAgICBpZiAobHBQYXJzZUNvbnRl
eHQgIT0gMCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBUVGhyZWFkUGFyc2VDb250ZXh0ICpscFRocmVhZERhdGEg
PSBuZXcgVFRocmVhZFBhcnNlQ29udGV4dCgpOworICAgIGlmIChscFRocmVhZERhdGEgPT0gMCkg
eworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOiBV
bmFibGUgdG8gY3JlYXRlIHRocmVhZCBwYXJzZSBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBscFRocmVhZERhdGEtPmxwR2xvYmFsUGFyc2VDb250ZXh0ID0g
MDsKKyAgICBPU19TZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCwgbHBUaHJlYWRE
YXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hl
Y2tpbmcgZm9yIHNwZWVkCisgICAgLy8KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFy
c2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNW
YWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworCisgICAgcmV0dXJuIGxwUGFyc2VDb250
ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkK
K3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29u
dGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4KSk7CisgICAgaWYgKGxwUGFyc2VDb250ZXh0KQorICAgICAgICBkZWxldGUgbHBQYXJz
ZUNvbnRleHQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmVlUGFyc2VDb250ZXh0
SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURf
VExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgo
KTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElE
X1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworI2lmbmRlZiBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KKyNkZWZp
bmUgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRs
ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKworc3RydWN0IFRNYXRyaXhGaWVsZHMgeworICAgIGJv
b2wgd2hvbGVSb3c7CisgICAgYm9vbCB3aG9sZUNvbDsKKyAgICBpbnQgcm93OworICAgIGludCBj
b2w7Cit9OworCit0eXBlZGVmIGVudW0geworICAgIEVCaFJlcXVpcmUsCisgICAgRUJoRW5hYmxl
LAorICAgIEVCaFdhcm4sCisgICAgRUJoRGlzYWJsZQorfSBUQmVoYXZpb3I7CisKK3N0cnVjdCBU
UHJhZ21hIHsKKyAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXplKG8pLCBkZWJ1
ZyhkKSB7IH0KKyAgICBib29sIG9wdGltaXplOworICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdt
YVRhYmxlIHByYWdtYVRhYmxlOworfTsKKworLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGV4dHJh
IHZhcmlhYmxlcyBuZWVkZWQgZHVyaW5nIHBhcnNpbmcsIGdyb3VwZWQgdG9nZXRoZXIgc28KKy8v
IHRoZXkgY2FuIGJlIHBhc3NlZCB0byB0aGUgcGFyc2VyIHdpdGhvdXQgbmVlZGluZyBhIGdsb2Jh
bC4KKy8vCitzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CisgICAgVFBhcnNlQ29udGV4dChUU3ltYm9s
VGFibGUmIHN5bXQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgRVNoTGFuZ3VhZ2UgbCwgRVNoU3Bl
YyBzLCBUSW5mb1NpbmsmIGlzKSA6CisgICAgICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwg
c3ltYm9sVGFibGUoc3ltdCksIGluZm9TaW5rKGlzKSwgbGFuZ3VhZ2UobCksIHNwZWMocyksIHRy
ZWVSb290KDApLAorICAgICAgICAgICAgcmVjb3ZlcmVkRnJvbUVycm9yKGZhbHNlKSwgbnVtRXJy
b3JzKDApLCBsZXhBZnRlclR5cGUoZmFsc2UpLCBsb29wTmVzdGluZ0xldmVsKDApLAorICAgICAg
ICAgICAgaW5UeXBlUGFyZW4oZmFsc2UpLCBjb250ZXh0UHJhZ21hKHRydWUsIGZhbHNlKSB7ICB9
CisgICAgVEludGVybWVkaWF0ZSYgaW50ZXJtZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBh
IHBhcnNlIHRyZWUKKyAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0
YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAor
ICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2U7ICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CisgICAgRVNoU3BlYyBzcGVjOyAgICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lm
aWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgorICAgIFRJbnRl
cm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0
ZWQKKyAgICBib29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAgIC8vIHRydWUgaWYgYSBwYXJzZSBl
cnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0byBwYXJzZQorICAgIGludCBudW1F
cnJvcnM7CisgICAgYm9vbCBsZXhBZnRlclR5cGU7ICAgICAgICAgICAvLyB0cnVlIGlmIHdlJ3Zl
IHJlY29nbml6ZWQgYSB0eXBlLCBzbyBjYW4gb25seSBiZSBsb29raW5nIGZvciBhbiBpZGVudGlm
aWVyCisgICAgaW50IGxvb3BOZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUgYWxs
IGxvb3BzCisgICAgYm9vbCBpblR5cGVQYXJlbjsgICAgICAgICAgICAvLyB0cnVlIGlmIGluIHBh
cmVudGhlc2VzLCBsb29raW5nIG9ubHkgZm9yIGFuIGlkZW50aWZpZXIKKyAgICBjb25zdCBUVHlw
ZSogY3VycmVudEZ1bmN0aW9uVHlwZTsgIC8vIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rp
b24gdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBib29sIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KKyAg
ICBUTWFwPFRTdHJpbmcsIFRCZWhhdmlvcj4gZXh0ZW5zaW9uQmVoYXZpb3I7CisgICAgdm9pZCBp
bml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxv
YywgY29uc3QgY2hhciAqc3pSZWFzb24sIGNvbnN0IGNoYXIgKnN6VG9rZW4sCisgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpzekV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICBib29sIHJlc2Vy
dmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CisgICAg
dm9pZCByZWNvdmVyKCk7CisKKyAgICBib29sIHBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYsIGludCBsaW5lKTsKKyAgICBib29sIHBh
cnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxk
cyYsIGludCBsaW5lKTsKKyAgICB2b2lkIGFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFy
KiBvcCwgVFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKKyAgICB2b2lkIHVuYXJ5T3BFcnJv
cihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3BlcmFuZCk7CisgICAgdm9pZCBi
aW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBsZWZ0LCBUU3Ry
aW5nIHJpZ2h0KTsKKyAgICBib29sIHByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIFRQcmVj
aXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpOworICAgIGJvb2wgbFZhbHVlRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCopOworICAgIGJvb2wg
Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSk7CisgICAgYm9vbCBpbnRlZ2VyRXJy
b3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgICBib29s
IGdsb2JhbEVycm9yQ2hlY2soaW50IGxpbmUsIGJvb2wgZ2xvYmFsLCBjb25zdCBjaGFyKiB0b2tl
bik7CisgICAgYm9vbCBjb25zdHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1Ob2Rl
KiwgVEZ1bmN0aW9uJiwgVE9wZXJhdG9yLCBUVHlwZSopOworICAgIGJvb2wgYXJyYXlTaXplRXJy
b3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOworICAgIGJv
b2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsK
KyAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUp
OworICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCB2b2lk
RXJyb3JDaGVjayhpbnQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOworICAg
IGJvb2wgYm9vbEVycm9yQ2hlY2soaW50LCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKKyAgICBib29s
IGJvb2xFcnJvckNoZWNrKGludCwgY29uc3QgVFB1YmxpY1R5cGUmKTsKKyAgICBib29sIHNhbXBs
ZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNo
YXIqIHJlYXNvbik7CisgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVy
cm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlw
ZSk7CisgICAgYm9vbCBjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpOworICAgIGJvb2wgbm9u
SW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKTsKKyAgICBib29sIHBhcmFtRXJyb3JD
aGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFs
aWZpZXIsIFRUeXBlKiB0eXBlKTsKKyAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIGNvbnN0IGNoYXIqKTsKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihpbnQg
bGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9vbCBl
eGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxvYyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBU
UHVibGljVHlwZSYgcFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5
cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZh
cmlhYmxlID0gMCk7CisgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2Rl
KiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIFRTb3VyY2VMb2MpOworICAg
IFRJbnRlcm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdn
ck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdFN0
cnVjdChUSW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBUU291cmNlTG9jLCBib29sIHN1YnNldCk7
CisgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiwgVE9wZXJh
dG9yLCBUSW50ZXJtTm9kZSosIFRTb3VyY2VMb2MsIGJvb2wgc3Vic2V0KTsKKyAgICBUSW50ZXJt
VHlwZWQqIGFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwg
VFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwg
VEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdEFy
cmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKTsK
KyAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcmICwgVEludGVybVR5cGVk
KiwgVFNvdXJjZUxvYyk7CisgICAgYm9vbCBhcnJheVNldE1heFNpemUoVEludGVybVN5bWJvbCos
IFRUeXBlKiwgaW50LCBib29sLCBUU291cmNlTG9jKTsKKyAgICBzdHJ1Y3QgVFByYWdtYSBjb250
ZXh0UHJhZ21hOworICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKKyAgICBib29sIEFmdGVyRU9GOwor
fTsKKworaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltdLCBpbnQg
YXJnYywgVFBhcnNlQ29udGV4dCYpOwordm9pZCBQYVJlc2VydmVkV29yZCgpOworaW50IFBhSWRl
bnRPclR5cGUoVFN0cmluZyYgaWQsIFRQYXJzZUNvbnRleHQmLCBUU3ltYm9sKiYpOworaW50IFBh
UGFyc2VDb21tZW50KGludCAmbGluZW5vLCBUUGFyc2VDb250ZXh0Jik7Cit2b2lkIHNldEluaXRp
YWxTdGF0ZSgpOworCit0eXBlZGVmIFRQYXJzZUNvbnRleHQqIFRQYXJzZUNvbnRleHRQb2ludGVy
OworZXh0ZXJuIFRQYXJzZUNvbnRleHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKTsK
KyNkZWZpbmUgR2xvYmFsUGFyc2VDb250ZXh0IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCisKK3R5
cGVkZWYgc3RydWN0IFRUaHJlYWRQYXJzZUNvbnRleHRSZWMKK3sKKyAgICBUUGFyc2VDb250ZXh0
ICpscEdsb2JhbFBhcnNlQ29udGV4dDsKK30gVFRocmVhZFBhcnNlQ29udGV4dDsKKworI2VuZGlm
IC8vIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1Bv
b2xBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci9Qb29sQWxsb2MuaCIKKworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0
ZGludC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L0luaXRpYWxpemVHbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisK
K09TX1RMU0luZGV4IFBvb2xJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCit2b2lkIElu
aXRpYWxpemVHbG9iYWxQb29scygpCit7CisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiBnbG9iYWxQ
b29scz0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9v
bEluZGV4KSk7ICAgIAorICAgIGlmIChnbG9iYWxQb29scykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVFBvb2xBbGxvY2F0b3IgKmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBuZXcgVFBvb2xBbGxvY2F0
b3IodHJ1ZSk7CisKKyAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBuZXcgVFRo
cmVhZEdsb2JhbFBvb2xzKCk7CisgICAgCisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9j
YXRvciA9IGdsb2JhbFBvb2xBbGxvY2F0b3I7CisgICAgICAgIAorICAgIE9TX1NldFRMU1ZhbHVl
KFBvb2xJbmRleCwgdGhyZWFkRGF0YSk7ICAgICAKKyAgICBnbG9iYWxQb29sQWxsb2NhdG9yLT5w
dXNoKCk7Cit9CisKK3ZvaWQgRnJlZUdsb2JhbFBvb2xzKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRo
ZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGlzIHRocmVhZC4KKyAgICBUVGhyZWFkR2xvYmFsUG9v
bHMqIGdsb2JhbFBvb2xzPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRU
TFNWYWx1ZShQb29sSW5kZXgpKTsgICAgCisgICAgaWYgKCFnbG9iYWxQb29scykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEdsb2JhbFBvb2xBbGxvY2F0b3IucG9wQWxsKCk7CisgICAgZGVs
ZXRlICZHbG9iYWxQb29sQWxsb2NhdG9yOyAgICAgICAKKyAgICBkZWxldGUgZ2xvYmFsUG9vbHM7
Cit9CisKK2Jvb2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpCit7CisgICAgLy8gQWxsb2NhdGUgYSBU
TFMgaW5kZXguCisgICAgaWYgKChQb29sSW5kZXggPSBPU19BbGxvY1RMU0luZGV4KCkpID09IE9T
X0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBGcmVlUG9vbEluZGV4KCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBU
TFMgaW5kZXguCisgICAgT1NfRnJlZVRMU0luZGV4KFBvb2xJbmRleCk7Cit9CisKK1RQb29sQWxs
b2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBUVGhyZWFkR2xvYmFsUG9v
bHMqIHRocmVhZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRU
TFNWYWx1ZShQb29sSW5kZXgpKTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YS0+Z2xvYmFsUG9v
bEFsbG9jYXRvcjsKK30KKwordm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yUHRyKFRQb29sQWxs
b2NhdG9yKiBwb29sQWxsb2NhdG9yKQoreworICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFk
RGF0YSA9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBv
b2xJbmRleCkpOworCisgICAgdGhyZWFkRGF0YS0+Z2xvYmFsUG9vbEFsbG9jYXRvciA9IHBvb2xB
bGxvY2F0b3I7Cit9CisKKy8vCisvLyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhl
IFRQb29sQWxsb2NhdG9yIGNsYXNzLCB3aGljaAorLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxs
b2MuaC4KKy8vCitUUG9vbEFsbG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoYm9vbCBnLCBpbnQgZ3Jv
d3RoSW5jcmVtZW50LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKKyAgICBnbG9iYWwoZyks
CisgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKKyAgICBhbGlnbm1lbnQoYWxsb2NhdGlv
bkFsaWdubWVudCksCisgICAgZnJlZUxpc3QoMCksCisgICAgaW5Vc2VMaXN0KDApLAorICAgIG51
bUNhbGxzKDApCit7CisgICAgLy8KKyAgICAvLyBEb24ndCBhbGxvdyBwYWdlIHNpemVzIHdlIGtu
b3cgYXJlIHNtYWxsZXIgdGhhbiBhbGwgY29tbW9uCisgICAgLy8gT1MgcGFnZSBzaXplcy4KKyAg
ICAvLworICAgIGlmIChwYWdlU2l6ZSA8IDQqMTAyNCkKKyAgICAgICAgcGFnZVNpemUgPSA0KjEw
MjQ7CisKKyAgICAvLworICAgIC8vIEEgbGFyZ2UgY3VycmVudFBhZ2VPZmZzZXQgaW5kaWNhdGVz
IGEgbmV3IHBhZ2UgbmVlZHMgdG8KKyAgICAvLyBiZSBvYnRhaW5lZCB0byBhbGxvY2F0ZSBtZW1v
cnkuCisgICAgLy8KKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOworCisgICAgLy8K
KyAgICAvLyBBZGp1c3QgYWxpZ25tZW50IHRvIGJlIGF0IGxlYXN0IHBvaW50ZXIgYWxpZ25lZCBh
bmQKKyAgICAvLyBwb3dlciBvZiAyLgorICAgIC8vCisgICAgc2l6ZV90IG1pbkFsaWduID0gc2l6
ZW9mKHZvaWQqKTsKKyAgICBhbGlnbm1lbnQgJj0gfihtaW5BbGlnbiAtIDEpOworICAgIGlmIChh
bGlnbm1lbnQgPCBtaW5BbGlnbikKKyAgICAgICAgYWxpZ25tZW50ID0gbWluQWxpZ247CisgICAg
c2l6ZV90IGEgPSAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KQorICAgICAgICBhIDw8PSAx
OworICAgIGFsaWdubWVudCA9IGE7CisgICAgYWxpZ25tZW50TWFzayA9IGEgLSAxOworCisgICAg
Ly8KKyAgICAvLyBBbGlnbiBoZWFkZXIgc2tpcAorICAgIC8vCisgICAgaGVhZGVyU2tpcCA9IG1p
bkFsaWduOworICAgIGlmIChoZWFkZXJTa2lwIDwgc2l6ZW9mKHRIZWFkZXIpKSB7CisgICAgICAg
IGhlYWRlclNraXAgPSAoc2l6ZW9mKHRIZWFkZXIpICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25t
ZW50TWFzazsKKyAgICB9Cit9CisKK1RQb29sQWxsb2NhdG9yOjp+VFBvb2xBbGxvY2F0b3IoKQor
eworICAgIGlmICghZ2xvYmFsKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZW4gd2Uga25v
dyB0aGF0IHRoaXMgb2JqZWN0IGlzIG5vdCBiZWluZyAKKyAgICAgICAgLy8gYWxsb2NhdGVkIGFm
dGVyIG90aGVyLCBnbG9iYWxseSBzY29wZWQgb2JqZWN0cworICAgICAgICAvLyB0aGF0IGRlcGVu
ZCBvbiBpdC4gIFNvIHdlIGNhbiBkZWxldGUgdGhlICJpbiB1c2UiIG1lbW9yeS4KKyAgICAgICAg
Ly8KKyAgICAgICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAgICAgICAgdEhlYWRlciogbmV4
dCA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVy
KCk7CisgICAgICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VM
aXN0KTsKKyAgICAgICAgICAgIGluVXNlTGlzdCA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLworICAgIC8vIEFsd2F5cyBkZWxldGUgdGhlIGZyZWUgbGlzdCBtZW1vcnkgLSBpdCBj
YW4ndCBiZSBiZWluZworICAgIC8vIChjb3JyZWN0bHkpIHJlZmVyZW5jZWQsIHdoZXRoZXIgdGhl
IHBvb2wgYWxsb2NhdG9yIHdhcworICAgIC8vIGdsb2JhbCBvciBub3QuICBXZSBzaG91bGQgbm90
IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHdlIGRpZCBpdCBh
bHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcworICAgIC8vIHBsYWNlZCBpbnRvIHRoZSBmcmVlIGxp
c3QuCisgICAgLy8KKyAgICB3aGlsZSAoZnJlZUxpc3QpIHsKKyAgICAgICAgdEhlYWRlciogbmV4
dCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGZyZWVMaXN0KTsKKyAgICAgICAgZnJlZUxpc3QgPSBuZXh0OworICAgIH0KK30K
KworLy8gU3VwcG9ydCBNU1ZDKysgNi4wCitjb25zdCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9u
OjpndWFyZEJsb2NrQmVnaW5WYWwgPSAweGZiOworY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2Nh
dGlvbjo6Z3VhcmRCbG9ja0VuZFZhbCAgID0gMHhmZTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgVEFs
bG9jYXRpb246OnVzZXJEYXRhRmlsbCAgICAgICA9IDB4Y2Q7CisKKyNpZmRlZiBHVUFSRF9CTE9D
S1MKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMTY7Cisj
ZWxzZQorICAgIGNvbnN0IHNpemVfdCBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja1NpemUgPSAwOwor
I2VuZGlmCisKKy8vCisvLyBDaGVjayBhIHNpbmdsZSBndWFyZCBibG9jayBmb3IgZGFtYWdlCisv
Lwordm9pZCBUQWxsb2NhdGlvbjo6Y2hlY2tHdWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2Nr
TWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29uc3QgY2hhciogbG9jVGV4dCkgY29uc3QKK3sKKyAg
ICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGd1YXJkQmxvY2tTaXplOyB4KyspIHsKKyAgICAgICAg
aWYgKGJsb2NrTWVtW3hdICE9IHZhbCkgeworICAgICAgICAgICAgY2hhciBhc3NlcnRNc2dbODBd
OworCisgICAgICAgICAgICAvLyBXZSBkb24ndCBwcmludCB0aGUgYXNzZXJ0IG1lc3NhZ2UuICBJ
dCdzIGhlcmUganVzdCB0byBiZSBoZWxwZnVsLgorICAgICAgICAgICAgc3ByaW50Zihhc3NlcnRN
c2csICJQb29sQWxsb2M6IERhbWFnZSAlcyAldSBieXRlIGFsbG9jYXRpb24gYXQgMHglcFxuIiwK
KyAgICAgICAgICAgICAgICAgICAgbG9jVGV4dCwgc2l6ZSwgZGF0YSgpKTsKKyAgICAgICAgICAg
IGFzc2VydCgwICYmICJQb29sQWxsb2M6IERhbWFnZSBpbiBndWFyZCBibG9jayIpOworICAgICAg
ICB9CisgICAgfQorfQorCisKK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnB1c2goKQoreworICAgIHRB
bGxvY1N0YXRlIHN0YXRlID0geyBjdXJyZW50UGFnZU9mZnNldCwgaW5Vc2VMaXN0IH07CisKKyAg
ICBzdGFjay5wdXNoX2JhY2soc3RhdGUpOworICAgICAgICAKKyAgICAvLworICAgIC8vIEluZGlj
YXRlIHRoZXJlIGlzIG5vIGN1cnJlbnQgcGFnZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgIC8vCisg
ICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKK30KKworLy8KKy8vIERvIGEgbWFzcy1k
ZWFsbG9jYXRpb24gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGFsbG9jYXRpb25zCisvLyB0aGF0IGhh
dmUgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgcHVzaCgpLCBvciBzaW5jZSB0aGUKKy8vIGxhc3Qg
cG9wKCksIG9yIHNpbmNlIHRoZSBvYmplY3QncyBjcmVhdGlvbi4KKy8vCisvLyBUaGUgZGVhbGxv
Y2F0ZWQgcGFnZXMgYXJlIHNhdmVkIGZvciBmdXR1cmUgYWxsb2NhdGlvbnMuCisvLwordm9pZCBU
UG9vbEFsbG9jYXRvcjo6cG9wKCkKK3sKKyAgICBpZiAoc3RhY2suc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdEhlYWRlciogcGFnZSA9IHN0YWNrLmJhY2soKS5wYWdlOworICAg
IGN1cnJlbnRQYWdlT2Zmc2V0ID0gc3RhY2suYmFjaygpLm9mZnNldDsKKworICAgIHdoaWxlIChp
blVzZUxpc3QgIT0gcGFnZSkgeworICAgICAgICAvLyBpbnZva2UgZGVzdHJ1Y3RvciB0byBmcmVl
IGFsbG9jYXRpb24gbGlzdAorICAgICAgICBpblVzZUxpc3QtPn50SGVhZGVyKCk7CisgICAgICAg
IAorICAgICAgICB0SGVhZGVyKiBuZXh0SW5Vc2UgPSBpblVzZUxpc3QtPm5leHRQYWdlOworICAg
ICAgICBpZiAoaW5Vc2VMaXN0LT5wYWdlQ291bnQgPiAxKQorICAgICAgICAgICAgZGVsZXRlIFtd
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgaW5Vc2VMaXN0LT5uZXh0UGFnZSA9IGZyZWVMaXN0OworICAgICAgICAgICAgZnJl
ZUxpc3QgPSBpblVzZUxpc3Q7CisgICAgICAgIH0KKyAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dElu
VXNlOworICAgIH0KKworICAgIHN0YWNrLnBvcF9iYWNrKCk7Cit9CisKKy8vCisvLyBEbyBhIG1h
c3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucworLy8gdGhh
dCBoYXZlIG9jY3VycmVkLgorLy8KK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnBvcEFsbCgpCit7Cisg
ICAgd2hpbGUgKHN0YWNrLnNpemUoKSA+IDApCisgICAgICAgIHBvcCgpOworfQorCit2b2lkKiBU
UG9vbEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKQoreworICAgIC8vIElmIHdl
IGFyZSB1c2luZyBndWFyZCBibG9ja3MsIGFsbCBhbGxvY2F0aW9ucyBhcmUgYnJhY2tldGVkIGJ5
CisgICAgLy8gdGhlbTogW2d1YXJkYmxvY2tdW2FsbG9jYXRpb25dW2d1YXJkYmxvY2tdLiAgbnVt
Qnl0ZXMgaXMgaG93CisgICAgLy8gbXVjaCBtZW1vcnkgdGhlIGNhbGxlciBhc2tlZCBmb3IuICBh
bGxvY2F0aW9uU2l6ZSBpcyB0aGUgdG90YWwKKyAgICAvLyBzaXplIGluY2x1ZGluZyBndWFyZCBi
bG9ja3MuICBJbiByZWxlYXNlIGJ1aWxkLAorICAgIC8vIGd1YXJkQmxvY2tTaXplPTAgYW5kIHRo
aXMgYWxsIGdldHMgb3B0aW1pemVkIGF3YXkuCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
VEFsbG9jYXRpb246OmFsbG9jYXRpb25TaXplKG51bUJ5dGVzKTsKKyAgICAKKyAgICAvLworICAg
IC8vIEp1c3Qga2VlcCBzb21lIGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgICAgLy8KKyAgICAr
K251bUNhbGxzOworICAgIHRvdGFsQnl0ZXMgKz0gbnVtQnl0ZXM7CisKKyAgICAvLworICAgIC8v
IERvIHRoZSBhbGxvY2F0aW9uLCBtb3N0IGxpa2VseSBjYXNlIGZpcnN0LCBmb3IgZWZmaWNpZW5j
eS4KKyAgICAvLyBUaGlzIHN0ZXAgY291bGQgYmUgbW92ZWQgdG8gYmUgaW5saW5lIHNvbWV0aW1l
LgorICAgIC8vCisgICAgaWYgKGN1cnJlbnRQYWdlT2Zmc2V0ICsgYWxsb2NhdGlvblNpemUgPD0g
cGFnZVNpemUpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2FmZSB0byBhbGxvY2F0ZSBmcm9t
IGN1cnJlbnRQYWdlT2Zmc2V0LgorICAgICAgICAvLworICAgICAgICB1bnNpZ25lZCBjaGFyKiBt
ZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGN1
cnJlbnRQYWdlT2Zmc2V0OworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCArPSBhbGxvY2F0aW9u
U2l6ZTsKKyAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgPSAoY3VycmVudFBhZ2VPZmZzZXQgKyBh
bGlnbm1lbnRNYXNrKSAmIH5hbGlnbm1lbnRNYXNrOworCisgICAgICAgIHJldHVybiBpbml0aWFs
aXplQWxsb2NhdGlvbihpblVzZUxpc3QsIG1lbW9yeSwgbnVtQnl0ZXMpOworICAgIH0KKworICAg
IGlmIChhbGxvY2F0aW9uU2l6ZSArIGhlYWRlclNraXAgPiBwYWdlU2l6ZSkgeworICAgICAgICAv
LworICAgICAgICAvLyBEbyBhIG11bHRpLXBhZ2UgYWxsb2NhdGlvbi4gIERvbid0IG1peCB0aGVz
ZSB3aXRoIHRoZSBvdGhlcnMuCisgICAgICAgIC8vIFRoZSBPUyBpcyBlZmZpY2llbnQgYW5kIGFs
bG9jYXRpbmcgYW5kIGZyZWUtaW5nIG11bHRpcGxlIHBhZ2VzLgorICAgICAgICAvLworICAgICAg
ICBzaXplX3QgbnVtQnl0ZXNUb0FsbG9jID0gYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwOwor
ICAgICAgICB0SGVhZGVyKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5l
dyBjaGFyW251bUJ5dGVzVG9BbGxvY10pOworICAgICAgICBpZiAobWVtb3J5ID09IDApCisgICAg
ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBVc2UgcGxhY2VtZW50LW5ldyB0byBpbml0
aWFsaXplIGhlYWRlcgorICAgICAgICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgKG51
bUJ5dGVzVG9BbGxvYyArIHBhZ2VTaXplIC0gMSkgLyBwYWdlU2l6ZSk7CisgICAgICAgIGluVXNl
TGlzdCA9IG1lbW9yeTsKKworICAgICAgICBjdXJyZW50UGFnZU9mZnNldCA9IHBhZ2VTaXplOyAg
Ly8gbWFrZSBuZXh0IGFsbG9jYXRpb24gY29tZSBmcm9tIGEgbmV3IHBhZ2UKKworICAgICAgICAv
LyBObyBndWFyZCBibG9ja3MgZm9yIG11bHRpLXBhZ2UgYWxsb2NhdGlvbnMgKHlldCkKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihtZW1vcnkpICsgaGVhZGVyU2tpcCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOZWVk
IGEgc2ltcGxlIHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAvLworICAgIHRIZWFkZXIqIG1l
bW9yeTsKKyAgICBpZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgbWVtb3J5ID0gZnJlZUxpc3Q7Cisg
ICAgICAgIGZyZWVMaXN0ID0gZnJlZUxpc3QtPm5leHRQYWdlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dEhlYWRlcio+KDo6bmV3IGNoYXJbcGFnZVNp
emVdKTsKKyAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAg
ICBuZXcobWVtb3J5KSB0SGVhZGVyKGluVXNlTGlzdCwgMSk7CisgICAgaW5Vc2VMaXN0ID0gbWVt
b3J5OworICAgIAorICAgIHVuc2lnbmVkIGNoYXIqIHJldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhciAqPihpblVzZUxpc3QpICsgaGVhZGVyU2tpcDsKKyAgICBjdXJyZW50UGFnZU9m
ZnNldCA9IChoZWFkZXJTa2lwICsgYWxsb2NhdGlvblNpemUgKyBhbGlnbm1lbnRNYXNrKSAmIH5h
bGlnbm1lbnRNYXNrOworCisgICAgcmV0dXJuIGluaXRpYWxpemVBbGxvY2F0aW9uKGluVXNlTGlz
dCwgcmV0LCBudW1CeXRlcyk7Cit9CisKKworLy8KKy8vIENoZWNrIGFsbCBhbGxvY2F0aW9ucyBp
biBhIGxpc3QgZm9yIGRhbWFnZSBieSBjYWxsaW5nIGNoZWNrIG9uIGVhY2guCisvLwordm9pZCBU
QWxsb2NhdGlvbjo6Y2hlY2tBbGxvY0xpc3QoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgVEFs
bG9jYXRpb24qIGFsbG9jID0gdGhpczsgYWxsb2MgIT0gMDsgYWxsb2MgPSBhbGxvYy0+cHJldkFs
bG9jKQorICAgICAgICBhbGxvYy0+Y2hlY2soKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjk2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9Q
T09MQUxMT0NfSU5DTFVERURfCisjZGVmaW5lIF9QT09MQUxMT0NfSU5DTFVERURfCisKKyNpZmRl
ZiBfREVCVUcKKyNkZWZpbmUgR1VBUkRfQkxPQ0tTICAvLyBkZWZpbmUgdG8gZW5hYmxlIGd1YXJk
IGJsb2NrIHNhbml0eSBjaGVja2luZworI2VuZGlmCisKKy8vCisvLyBUaGlzIGhlYWRlciBkZWZp
bmVzIGFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5CisvLyBhbGxv
Y2F0ZSBhIGxhcmdlIG51bWJlciBvZiBzbWFsbCByZXF1ZXN0cyBmb3IgaGVhcCBtZW1vcnksIHdp
dGggdGhlIAorLy8gaW50ZW50aW9uIHRoYXQgdGhleSBhcmUgbm90IGluZGl2aWR1YWxseSBkZWFs
bG9jYXRlZCwgYnV0IHJhdGhlciAKKy8vIGNvbGxlY3RpdmVseSBkZWFsbG9jYXRlZCBhdCBvbmUg
dGltZS4KKy8vCisvLyBUaGlzIHNpbXVsdGFuZW91c2x5CisvLworLy8gKiBNYWtlcyBlYWNoIGlu
ZGl2aWR1YWwgYWxsb2NhdGlvbiBtdWNoIG1vcmUgZWZmaWNpZW50OyB0aGUKKy8vICAgICB0eXBp
Y2FsIGFsbG9jYXRpb24gaXMgdHJpdmlhbC4KKy8vICogQ29tcGxldGVseSBhdm9pZHMgdGhlIGNv
c3Qgb2YgZG9pbmcgaW5kaXZpZHVhbCBkZWFsbG9jYXRpb24uCisvLyAqIFNhdmVzIHRoZSB0cm91
YmxlIG9mIHRyYWNraW5nIGRvd24gYW5kIHBsdWdnaW5nIGEgbGFyZ2UgY2xhc3Mgb2YgbGVha3Mu
CisvLworLy8gSW5kaXZpZHVhbCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhbGxvY2F0b3IgYnkgc3Vw
cGx5aW5nIHRoZWlyIG93bgorLy8gbmV3IGFuZCBkZWxldGUgbWV0aG9kcy4KKy8vCisvLyBTVEwg
Y29udGFpbmVycyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9yIGJ5IHVzaW5nIHRoZSBwb29sX2FsbG9j
YXRvcgorLy8gY2xhc3MgYXMgdGhlIGFsbG9jYXRvciAoc2Vjb25kKSB0ZW1wbGF0ZSBhcmd1bWVu
dC4KKy8vCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDx2ZWN0b3I+CisKKy8vIElmIHdlIGFyZSB1c2luZyBndWFyZCBibG9ja3MsIHdlIG11c3Qg
dHJhY2sgZWFjaCBpbmRpdnVhbAorLy8gYWxsb2NhdGlvbi4gIElmIHdlIGFyZW4ndCB1c2luZyBn
dWFyZCBibG9ja3MsIHRoZXNlCisvLyBuZXZlciBnZXQgaW5zdGFudGlhdGVkLCBzbyB3b24ndCBo
YXZlIGFueSBpbXBhY3QuCisvLyAKKworY2xhc3MgVEFsbG9jYXRpb24geworcHVibGljOgorICAg
IFRBbGxvY2F0aW9uKHNpemVfdCBzaXplLCB1bnNpZ25lZCBjaGFyKiBtZW0sIFRBbGxvY2F0aW9u
KiBwcmV2ID0gMCkgOgorICAgICAgICBzaXplKHNpemUpLCBtZW0obWVtKSwgcHJldkFsbG9jKHBy
ZXYpIHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZDoKKyAgICAgICAgLy8g
ICAgW2FsbG9jYXRpb25IZWFkZXJdW2luaXRpYWxHdWFyZEJsb2NrXVt1c2VyRGF0YV1bZmluYWxH
dWFyZEJsb2NrXQorICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGNsZWFuZXIgd2l0aCBpZiAoZ3Vh
cmRCbG9ja1NpemUpLi4uLCBidXQgdGhhdAorICAgICAgICAvLyBtYWtlcyB0aGUgY29tcGlsZXIg
cHJpbnQgd2FybmluZ3MgYWJvdXQgMCBsZW5ndGggbWVtc2V0cywKKyAgICAgICAgLy8gZXZlbiB3
aXRoIHRoZSBpZigpIHByb3RlY3RpbmcgdGhlbS4KKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAg
ICAgbWVtc2V0KHByZUd1YXJkKCksIGd1YXJkQmxvY2tCZWdpblZhbCwgZ3VhcmRCbG9ja1NpemUp
OworICAgICAgICBtZW1zZXQoZGF0YSgpLCAgICAgIHVzZXJEYXRhRmlsbCwgICAgICAgc2l6ZSk7
CisgICAgICAgIG1lbXNldChwb3N0R3VhcmQoKSwgZ3VhcmRCbG9ja0VuZFZhbCwgICBndWFyZEJs
b2NrU2l6ZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrKCkgY29uc3QgeworICAg
ICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwgIGd1YXJkQmxvY2tCZWdpblZhbCwgImJl
Zm9yZSIpOworICAgICAgICBjaGVja0d1YXJkQmxvY2socG9zdEd1YXJkKCksIGd1YXJkQmxvY2tF
bmRWYWwsICAgImFmdGVyIik7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FsbG9jTGlzdCgpIGNv
bnN0OworCisgICAgLy8gUmV0dXJuIHRvdGFsIHNpemUgbmVlZGVkIHRvIGFjY29tb2RhdGUgdXNl
ciBidWZmZXIgb2YgJ3NpemUnLAorICAgIC8vIHBsdXMgb3VyIHRyYWNraW5nIGRhdGEuCisgICAg
aW5saW5lIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IHNpemUpIHsKKyAgICAg
ICAgcmV0dXJuIHNpemUgKyAyICogZ3VhcmRCbG9ja1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAg
fQorCisgICAgLy8gT2Zmc2V0IGZyb20gc3Vycm91bmRpbmcgYnVmZmVyIHRvIGdldCB0byB1c2Vy
IGRhdGEgYnVmZmVyLgorICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY2hhciogb2Zmc2V0QWxs
b2NhdGlvbih1bnNpZ25lZCBjaGFyKiBtKSB7CisgICAgICAgIHJldHVybiBtICsgZ3VhcmRCbG9j
a1NpemUgKyBoZWFkZXJTaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tH
dWFyZEJsb2NrKHVuc2lnbmVkIGNoYXIqIGJsb2NrTWVtLCB1bnNpZ25lZCBjaGFyIHZhbCwgY29u
c3QgY2hhciogbG9jVGV4dCkgY29uc3Q7CisKKyAgICAvLyBGaW5kIG9mZnNldHMgdG8gcHJlIGFu
ZCBwb3N0IGd1YXJkIGJsb2NrcywgYW5kIHVzZXIgZGF0YSBidWZmZXIKKyAgICB1bnNpZ25lZCBj
aGFyKiBwcmVHdWFyZCgpICBjb25zdCB7IHJldHVybiBtZW0gKyBoZWFkZXJTaXplKCk7IH0KKyAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgICAgICBjb25zdCB7IHJldHVybiBwcmVHdWFyZCgpICsg
Z3VhcmRCbG9ja1NpemU7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBwb3N0R3VhcmQoKSBjb25zdCB7
IHJldHVybiBkYXRhKCkgKyBzaXplOyB9CisKKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAg
ICAgICAvLyBzaXplIG9mIHRoZSB1c2VyIGRhdGEgYXJlYQorICAgIHVuc2lnbmVkIGNoYXIqIG1l
bTsgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiBvdXIgYWxsb2NhdGlvbiAocHRzIHRvIGhlYWRl
cikKKyAgICBUQWxsb2NhdGlvbiogcHJldkFsbG9jOyAgICAgICAvLyBwcmlvciBhbGxvY2F0aW9u
IGluIHRoZSBjaGFpbgorCisgICAgLy8gU3VwcG9ydCBNU1ZDKysgNi4wCisgICAgY29uc3Qgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgZ3VhcmRCbG9ja0JlZ2luVmFsOworICAgIGNvbnN0IHN0YXRpYyB1
bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tFbmRWYWw7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVk
IGNoYXIgdXNlckRhdGFGaWxsOworCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBndWFyZEJsb2Nr
U2l6ZTsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBoZWFk
ZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9mKFRBbGxvY2F0aW9uKTsgfQorI2Vsc2UKKyAgICBpbmxp
bmUgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCit9Owor
CisvLworLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhY2tzLiAgT25lIGlzIHRvIHRyYWNrIHRoZSBw
dXNoaW5nIGFuZCBwb3BwaW5nCisvLyBvZiB0aGUgdXNlciwgYW5kIG5vdCB5ZXQgaW1wbGVtZW50
ZWQuICBUaGUgb3RoZXJzIGFyZSBzaW1wbHkgYSAKKy8vIHJlcG9zaXRvcmllcyBvZiBmcmVlIHBh
Z2VzIG9yIHVzZWQgcGFnZXMuCisvLworLy8gUGFnZSBzdGFja3MgYXJlIGxpbmtlZCB0b2dldGhl
ciB3aXRoIGEgc2ltcGxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nCisvLyBvZiBlYWNoIGFsbG9j
YXRpb24gb2J0YWluZWQgZnJvbSB0aGUgdW5kZXJseWluZyBPUy4gIE11bHRpLXBhZ2UgYWxsb2Nh
dGlvbnMKKy8vIGFyZSByZXR1cm5lZCB0byB0aGUgT1MuICBJbmRpdmlkdWFsIHBhZ2UgYWxsb2Nh
dGlvbnMgYXJlIGtlcHQgZm9yIGZ1dHVyZQorLy8gcmUtdXNlLgorLy8KKy8vIFRoZSAicGFnZSBz
aXplIiB1c2VkIGlzIG5vdCwgbm9yIG11c3QgaXQgbWF0Y2gsIHRoZSB1bmRlcmx5aW5nIE9TCisv
LyBwYWdlIHNpemUuICBCdXQsIGhhdmluZyBpdCBiZSBhYm91dCB0aGF0IHNpemUgb3IgZXF1YWwg
dG8gYSBzZXQgb2YgCisvLyBwYWdlcyBpcyBsaWtlbHkgbW9zdCBvcHRpbWFsLgorLy8KK2NsYXNz
IFRQb29sQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBUUG9vbEFsbG9jYXRvcihib29sIGdsb2Jh
bCA9IGZhbHNlLCBpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFs
aWdubWVudCA9IDE2KTsKKworICAgIC8vCisgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3Rv
ciBqdXN0IHRvIGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBwb3AoKQorICAgIC8vCisgICAgflRQ
b29sQWxsb2NhdG9yKCk7CisKKyAgICAvLworICAgIC8vIENhbGwgcHVzaCgpIHRvIGVzdGFibGlz
aCBhIG5ldyBwbGFjZSB0byBwb3AgbWVtb3J5IHRvby4gIERvZXMgbm90CisgICAgLy8gaGF2ZSB0
byBiZSBjYWxsZWQgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgorICAgIC8vCisgICAgdm9pZCBwdXNo
KCk7CisKKyAgICAvLworICAgIC8vIENhbGwgcG9wKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9j
YXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHB1c2goKSwKKyAgICAvLyBvciBpZiBubyBsYXN0
IGNhbGwgdG8gcHVzaCwgZnJlZXMgYWxsIG1lbW9yeSBzaW5jZSBmaXJzdCBhbGxvY2F0aW9uLgor
ICAgIC8vCisgICAgdm9pZCBwb3AoKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBwb3BBbGwoKSB0
byBmcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkLgorICAgIC8vCisgICAgdm9pZCBwb3BBbGwoKTsK
KworICAgIC8vCisgICAgLy8gQ2FsbCBhbGxvY2F0ZSgpIHRvIGFjdHVhbGx5IGFjcXVpcmUgbWVt
b3J5LiAgUmV0dXJucyAwIGlmIG5vIG1lbW9yeQorICAgIC8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNl
IGEgcHJvcGVybHkgYWxpZ25lZCBwb2ludGVyIHRvICdudW1CeXRlcycgb2YgbWVtb3J5LgorICAg
IC8vCisgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90IG51bUJ5dGVzKTsKKworICAgIC8vCisgICAg
Ly8gVGhlcmUgaXMgbm8gZGVhbGxvY2F0ZS4gIFRoZSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIHRo
YXQKKyAgICAvLyBkZWFsbG9jYXRpb24gY2FuIGJlIHNraXBwZWQgYnkgdGhlIHVzZXIgb2YgaXQs
IGFzIHRoZSBtb2RlbAorICAgIC8vIG9mIHVzZSBpcyB0byBzaW11bHRhbmVvdXNseSBkZWFsbG9j
YXRlIGV2ZXJ5dGhpbmcgYXQgb25jZQorICAgIC8vIGJ5IGNhbGxpbmcgcG9wKCksIGFuZCB0byBu
b3QgaGF2ZSB0byBzb2x2ZSBtZW1vcnkgbGVhayBwcm9ibGVtcy4KKyAgICAvLworCitwcm90ZWN0
ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCB0SGVhZGVyOworICAgIAorICAgIHN0cnVjdCB0SGVhZGVy
IHsKKyAgICAgICAgdEhlYWRlcih0SGVhZGVyKiBuZXh0UGFnZSwgc2l6ZV90IHBhZ2VDb3VudCkg
OgorI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24oMCksCisj
ZW5kaWYKKyAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwKKyAgICAgICAgICAgIHBhZ2VD
b3VudChwYWdlQ291bnQpIHsgfQorCisgICAgICAgIH50SGVhZGVyKCkgeworI2lmZGVmIEdVQVJE
X0JMT0NLUworICAgICAgICAgICAgaWYgKGxhc3RBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAg
IGxhc3RBbGxvY2F0aW9uLT5jaGVja0FsbG9jTGlzdCgpOworI2VuZGlmCisgICAgICAgIH0KKwor
ICAgICAgICB0SGVhZGVyKiBuZXh0UGFnZTsKKyAgICAgICAgc2l6ZV90IHBhZ2VDb3VudDsKKyNp
ZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgVEFsbG9jYXRpb24qIGxhc3RBbGxvY2F0aW9uOwor
I2VuZGlmCisgICAgfTsKKworICAgIHN0cnVjdCB0QWxsb2NTdGF0ZSB7CisgICAgICAgIHNpemVf
dCBvZmZzZXQ7CisgICAgICAgIHRIZWFkZXIqIHBhZ2U7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPHRBbGxvY1N0YXRlPiB0QWxsb2NTdGFjazsKKworICAgIC8vIFRyYWNrIGFsbG9j
YXRpb25zIGlmIGFuZCBvbmx5IGlmIHdlJ3JlIHVzaW5nIGd1YXJkIGJsb2NrcworICAgIHZvaWQq
IGluaXRpYWxpemVBbGxvY2F0aW9uKHRIZWFkZXIqIGJsb2NrLCB1bnNpZ25lZCBjaGFyKiBtZW1v
cnksIHNpemVfdCBudW1CeXRlcykgeworI2lmZGVmIEdVQVJEX0JMT0NLUworICAgICAgICBuZXco
bWVtb3J5KSBUQWxsb2NhdGlvbihudW1CeXRlcywgbWVtb3J5LCBibG9jay0+bGFzdEFsbG9jYXRp
b24pOworICAgICAgICBibG9jay0+bGFzdEFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PFRB
bGxvY2F0aW9uKj4obWVtb3J5KTsKKyNlbmRpZgorICAgICAgICAvLyBUaGlzIGlzIG9wdGltaXpl
ZCBlbnRpcmVseSBhd2F5IGlmIEdVQVJEX0JMT0NLUyBpcyBub3QgZGVmaW5lZC4KKyAgICAgICAg
cmV0dXJuIFRBbGxvY2F0aW9uOjpvZmZzZXRBbGxvY2F0aW9uKG1lbW9yeSk7CisgICAgfQorCisg
ICAgYm9vbCBnbG9iYWw7ICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHRydWUgaWYgdGhpcyBvYmpl
Y3QgaXMgZ2xvYmFsbHkgc2NvcGVkCisgICAgc2l6ZV90IHBhZ2VTaXplOyAgICAgICAgLy8gZ3Jh
bnVsYXJpdHkgb2YgYWxsb2NhdGlvbiBmcm9tIHRoZSBPUworICAgIHNpemVfdCBhbGlnbm1lbnQ7
ICAgICAgIC8vIGFsbCByZXR1cm5lZCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQgYXQgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncmFudWxhcml0eSwgd2hpY2ggd2ls
bCBiZSBhIHBvd2VyIG9mIDIKKyAgICBzaXplX3QgYWxpZ25tZW50TWFzazsKKyAgICBzaXplX3Qg
aGVhZGVyU2tpcDsgICAgICAvLyBhbW91bnQgb2YgbWVtb3J5IHRvIHNraXAgdG8gbWFrZSByb29t
IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGhlYWRlciAoYmFz
aWNhbGx5LCBzaXplIG9mIGhlYWRlciwgcm91bmRlZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgdXAgdG8gbWFrZSBpdCBhbGlnbmVkCisgICAgc2l6ZV90IGN1cnJlbnRQYWdl
T2Zmc2V0OyAgLy8gbmV4dCBvZmZzZXQgaW4gdG9wIG9mIGluVXNlTGlzdCB0byBhbGxvY2F0ZSBm
cm9tCisgICAgdEhlYWRlciogZnJlZUxpc3Q7ICAgICAgLy8gbGlzdCBvZiBwb3BwZWQgbWVtb3J5
CisgICAgdEhlYWRlciogaW5Vc2VMaXN0OyAgICAgLy8gbGlzdCBvZiBhbGwgbWVtb3J5IGN1cnJl
bnRseSBiZWluZyB1c2VkCisgICAgdEFsbG9jU3RhY2sgc3RhY2s7ICAgICAgLy8gc3RhY2sgb2Yg
d2hlcmUgdG8gYWxsb2NhdGUgZnJvbSwgdG8gcGFydGl0aW9uIHBvb2wKKworICAgIGludCBudW1D
YWxsczsgICAgICAgICAgIC8vIGp1c3QgYW4gaW50ZXJlc3Rpbmcgc3RhdGlzdGljCisgICAgc2l6
ZV90IHRvdGFsQnl0ZXM7ICAgICAgLy8ganVzdCBhbiBpbnRlcmVzdGluZyBzdGF0aXN0aWMKK3By
aXZhdGU6CisgICAgVFBvb2xBbGxvY2F0b3ImIG9wZXJhdG9yPShjb25zdCBUUG9vbEFsbG9jYXRv
ciYpOyAgLy8gZG9udCBhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgVFBvb2xBbGxvY2F0
b3IoY29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgZGVmYXVsdCBjb3B5IGNv
bnN0cnVjdG9yCit9OworCisKKy8vCisvLyBUaGVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBtYW55
IHBvb2xzIHdpdGggcG9wcyBoYXBwZW5pbmcgYXQKKy8vIGRpZmZlcmVudCB0aW1lcy4gIEJ1dCBh
IHNpbXBsZSB1c2UgaXMgdG8gaGF2ZSBhIGdsb2JhbCBwb3AKKy8vIHdpdGggZXZlcnlvbmUgdXNp
bmcgdGhlIHNhbWUgZ2xvYmFsIGFsbG9jYXRvci4KKy8vCit0eXBlZGVmIFRQb29sQWxsb2NhdG9y
KiBQb29sQWxsb2NhdG9yUG9pbnRlcjsKK2V4dGVybiBUUG9vbEFsbG9jYXRvciYgR2V0R2xvYmFs
UG9vbEFsbG9jYXRvcigpOworI2RlZmluZSBHbG9iYWxQb29sQWxsb2NhdG9yIEdldEdsb2JhbFBv
b2xBbGxvY2F0b3IoKQorCisKK3N0cnVjdCBUVGhyZWFkR2xvYmFsUG9vbHMKK3sKKyAgICBUUG9v
bEFsbG9jYXRvciogZ2xvYmFsUG9vbEFsbG9jYXRvcjsKK307CisKK3ZvaWQgU2V0R2xvYmFsUG9v
bEFsbG9jYXRvclB0cihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcik7CisKKy8vCisvLyBU
aGlzIFNUTCBjb21wYXRpYmxlIGFsbG9jYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRo
ZSBhbGxvY2F0b3IKKy8vIHBhcmFtZXRlciB0byB0ZW1wbGF0aXplZCBTVEwgY29udGFpbmVycywg
bGlrZSB2ZWN0b3IgYW5kIG1hcC4KKy8vCisvLyBJdCB3aWxsIHVzZSB0aGUgcG9vbHMgZm9yIGFs
bG9jYXRpb24sIGFuZCBub3QKKy8vIGRvIGFueSBkZWFsbG9jYXRpb24sIGJ1dCB3aWxsIHN0aWxs
IGRvIGRlc3RydWN0aW9uLgorLy8KK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBwb29sX2FsbG9j
YXRvciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgIHR5cGVk
ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICB0eXBlZGVmIFQqIHBvaW50ZXI7Cisg
ICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgVCYgcmVmZXJl
bmNlOworICAgIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYg
VCB2YWx1ZV90eXBlOworCisgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+IAorICAgIHN0cnVjdCBy
ZWJpbmQgeworICAgICAgICB0eXBlZGVmIHBvb2xfYWxsb2NhdG9yPE90aGVyPiBvdGhlcjsKKyAg
ICB9OworICAgIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgeCkgY29uc3QgeyByZXR1cm4gJng7
IH0KKyAgICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHgpIGNvbnN0IHsg
cmV0dXJuICZ4OyB9CisKKyAgICBwb29sX2FsbG9jYXRvcigpIDogYWxsb2NhdG9yKEdsb2JhbFBv
b2xBbGxvY2F0b3IpIHsgfQorICAgIHBvb2xfYWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yJiBhKSA6
IGFsbG9jYXRvcihhKSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihjb25zdCBwb29sX2FsbG9jYXRv
cjxUPiYgcCkgOiBhbGxvY2F0b3IocC5hbGxvY2F0b3IpIHsgfQorCisgICAgdGVtcGxhdGU8Y2xh
c3MgT3RoZXI+CisgICAgcG9vbF9hbGxvY2F0b3IoY29uc3QgcG9vbF9hbGxvY2F0b3I8T3RoZXI+
JiBwKSA6IGFsbG9jYXRvcihwLmdldEFsbG9jYXRvcigpKSB7IH0KKworICAgIHBvaW50ZXIgYWxs
b2NhdGUoc2l6ZV90eXBlIG4pIHsgCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBv
aW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4gKiBzaXplb2YoVCkpKTsKKyAgICB9Cisg
ICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsgCisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRl
KG4gKiBzaXplb2YoVCkpKTsKKyAgICB9CisKKyAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNp
emVfdHlwZSkgeyB9CisgICAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIsIHNpemVfdHlwZSkgeyB9
CisKKyAgICBwb2ludGVyIF9DaGFyYWxsb2Moc2l6ZV90IG4pIHsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobikpOworICAg
IH0KKworICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAo
KHZvaWQgKilwKSBUKHZhbCk7IH0KKyAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6
On5UKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhz
KSBjb25zdCB7IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgPT0gJnJocy5nZXRBbGxvY2F0b3IoKTsg
fQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwb29sX2FsbG9jYXRvciYgcmhzKSBjb25zdCB7
IHJldHVybiAmZ2V0QWxsb2NhdG9yKCkgIT0gJnJocy5nZXRBbGxvY2F0b3IoKTsgfQorCisgICAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90eXBl
PigtMSkgLyBzaXplb2YoVCk7IH0KKyAgICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQorCisgICAg
dm9pZCBzZXRBbGxvY2F0b3IoVFBvb2xBbGxvY2F0b3IqIGEpIHsgYWxsb2NhdG9yID0gKmE7IH0K
KyAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh
dG9yOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUUG9vbEFsbG9jYXRvciYgYWxsb2NhdG9yOworfTsK
KworI2VuZGlmIC8vIF9QT09MQUxMT0NfSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvUXVhbGlmaWVyQWxpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9R
dWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUXVh
bGlmaWVyQWxpdmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRB
bGl2ZVRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBU
QWxpdmVUcmF2ZXJzZXIoVFF1YWxpZmllciBxKSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFs
c2UsIGZhbHNlLCB0cnVlKSwgZm91bmQoZmFsc2UpLCBxdWFsaWZpZXIocSkKKyAgICB7CisgICAg
fQorCisJYm9vbCB3YXNGb3VuZCgpIHsgcmV0dXJuIGZvdW5kOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBib29sIGZvdW5kOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworCisgICAgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwg
VEludGVybVNlbGVjdGlvbiopOworfTsKKworLy8KKy8vIFJlcG9ydCB3aGV0aGVyIG9yIG5vdCBh
IHZhcmlhYmxlIG9mIHRoZSBnaXZlbiBxdWFsaWZpZXIgdHlwZQorLy8gaXMgZ3VhcmFudGVlZCB3
cml0dGVuLiAgTm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgaWYKKy8vIGl0IGlzIHdy
aXR0ZW4gY29uZGl0aW9uYWxseS4KKy8vCisvLyA/PyBJdCBkb2VzIG5vdCBkbyB0aGlzIHdlbGwg
eWV0LCB0aGlzIGlzIGp1c3QgYSBwbGFjZSBob2xkZXIKKy8vIHRoYXQgc2ltcGx5IGRldGVybWlu
ZXMgaWYgaXQgd2FzIHJlZmVyZW5jZSBhdCBhbGwsIGFueXdoZXJlLgorLy8KK2Jvb2wgUXVhbGlm
aWVyV3JpdHRlbihUSW50ZXJtTm9kZSogbm9kZSwgVFF1YWxpZmllciBxdWFsaWZpZXIpCit7Cisg
ICAgVEFsaXZlVHJhdmVyc2VyIGl0KHF1YWxpZmllcik7CisKKyAgICBpZiAobm9kZSkKKyAgICAg
ICAgbm9kZS0+dHJhdmVyc2UoJml0KTsKKworICAgIHJldHVybiBpdC53YXNGb3VuZCgpOworfQor
Cit2b2lkIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkK
K3sKKyAgICAvLworICAgIC8vIElmIGl0J3Mgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgcmVjb3Jk
IGl0LgorICAgIC8vCisgICAgaWYgKG5vZGUtPmdldFF1YWxpZmllcigpID09IHF1YWxpZmllcikK
KyAgICAgICAgZm91bmQgPSB0cnVlOworfQorCitib29sIFRBbGl2ZVRyYXZlcnNlcjo6dmlzaXRT
ZWxlY3Rpb24oVmlzaXQgcHJlVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAg
aWYgKHdhc0ZvdW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitib29sIFF1YWxpZmllcldyaXR0ZW4oVElu
dGVybU5vZGUqIHJvb3QsIFRRdWFsaWZpZXIpOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1Jl
bW92ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVl
LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRy
ZWUuaCIKKworLy8KKy8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlh
dGUgdHJlZS4KKy8vCisKK2NsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworcHVibGljOgorCVJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZh
bHNlLCB0cnVlKQorCXsKKwl9CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlv
biopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKwli
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworCWJvb2wgdmlzaXRT
ZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwlib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Cit9OworCit2b2lkIFJlbW92
ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7
Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUp
Cit7CisgICAgZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdmVU
cmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkK
K3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCitib29sIFJlbW92ZVRyZWU6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQorewor
CWRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVtb3ZlVHJlZTo6dmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworCWRlbGV0ZSBu
b2RlOworfQorCisvLworLy8gRW50cnkgcG9pbnQuCisvLwordm9pZCBSZW1vdmVBbGxUcmVlTm9k
ZXMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgUmVtb3ZlVHJlZSBpdDsKKworICAgIHJvb3Qt
PnRyYXZlcnNlKCZpdCk7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwordm9pZCBSZW1vdmVBbGxUcmVlTm9k
ZXMoVEludGVybU5vZGUqKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1NISEFORExFX0lOQ0xVREVEXwor
I2RlZmluZSBfU0hIQU5ETEVfSU5DTFVERURfCisKKy8vCisvLyBNYWNoaW5lIGluZGVwZW5kZW50
IHBhcnQgb2YgdGhlIGNvbXBpbGVyIHByaXZhdGUgb2JqZWN0cworLy8gc2VudCBhcyBTaEhhbmRs
ZSB0byB0aGUgZHJpdmVyLgorLy8KKy8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBk
cml2ZXIgY29kZS4KKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisKK2NsYXNzIFRDb21waWxlcjsKK2NsYXNzIFRJ
bnRlcm1Ob2RlOworCisvLworLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMg
cmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KKy8vCitjbGFzcyBUU2hIYW5kbGVCYXNlIHsKK3B1Ymxp
YzoKKyAgICBUU2hIYW5kbGVCYXNlKCkgeyB9CisgICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgp
IHsgfQorICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsg
fQorfTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQg
Y29tcGlsZXIgdG8gZGVyaXZlIGZyb20KKy8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9t
IHRoZSBjb21waWxlLgorLy8KK2NsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNl
IHsKK3B1YmxpYzoKKyAgICBUQ29tcGlsZXIoRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzKSA6IGxh
bmd1YWdlKGwpLCBzcGVjKHMpIHsgfQorICAgIHZpcnR1YWwgflRDb21waWxlcigpIHsgfQorCisg
ICAgRVNoTGFuZ3VhZ2UgZ2V0TGFuZ3VhZ2UoKSB7IHJldHVybiBsYW5ndWFnZTsgfQorICAgIEVT
aFNwZWMgZ2V0U3BlYygpIHsgcmV0dXJuIHNwZWM7IH0KKyAgICB2aXJ0dWFsIFRJbmZvU2luayYg
Z2V0SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQorCisgICAgdmlydHVhbCBib29sIGNv
bXBpbGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKworICAgIHZpcnR1YWwgVENvbXBpbGVyKiBn
ZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgVEluZm9TaW5rIGluZm9TaW5r
OworcHJvdGVjdGVkOgorICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlOworICAgIEVTaFNwZWMgc3Bl
YzsKK307CisKKy8vCisvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbWFjaGlu
ZSBpbmRlcGVuZGVudCBjb2RlCisvLyBhbmQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUuCisv
LworLy8gVGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvZGUgc2hvdWxkIGRlcml2ZSBmcm9tIHRoZSBj
bGFzc2VzCisvLyBhYm92ZS4gVGhlbiBDb25zdHJ1Y3QqKCkgYW5kIERlbGV0ZSooKSB3aWxsIGNy
ZWF0ZSBhbmQgCisvLyBkZXN0cm95IHRoZSBtYWNoaW5lIGRlcGVuZGVudCBvYmplY3RzLCB3aGlj
aCBjb250YWluIHRoZQorLy8gYWJvdmUgbWFjaGluZSBpbmRlcGVuZGVudCBpbmZvcm1hdGlvbi4K
Ky8vCitUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlLCBFU2hTcGVjKTsK
K3ZvaWQgRGVsZXRlQ29tcGlsZXIoVENvbXBpbGVyKik7CisKKyNlbmRpZiAvLyBfU0hIQU5ETEVf
SU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIEltcGxlbWVudCB0aGUgdG9w
LWxldmVsIG9mIGludGVyZmFjZSB0byB0aGUgY29tcGlsZXIsCisvLyBhcyBkZWZpbmVkIGluIFNo
YWRlckxhbmcuaAorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5j
bHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxp
emVEbGwuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL1NoSGFuZGxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKKwor
Ly8KKy8vIEEgc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxhbmd1YWdlLiAgRWFjaCBoYXMgYSBkaWZm
ZXJlbnQKKy8vIHNldCBvZiBidWlsdC1pbnMsIGFuZCB3ZSB3YW50IHRvIHByZXNlcnZlIHRoYXQg
ZnJvbQorLy8gY29tcGlsZSB0byBjb21waWxlLgorLy8KK1RTeW1ib2xUYWJsZSogU3ltYm9sVGFi
bGVzW0VTaExhbmdDb3VudF07CisKKworVFBvb2xBbGxvY2F0b3IqIFBlclByb2Nlc3NHUEEgPSAw
OworLy8KKy8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3
ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4K
Ky8vCisKKy8vCisvLyBEcml2ZXIgbXVzdCBjYWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBk
b2luZyBhbnkgb3RoZXIKKy8vIGNvbXBpbGVyIG9wZXJhdGlvbnMuCisvLworaW50IFNoSW5pdGlh
bGl6ZSgpCit7CisgICAgVEluZm9TaW5rIGluZm9TaW5rOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsK
KworICAgIGlmICghSW5pdFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgcGVyIHByb2Nlc3MuIElmIGl0cyBjYWxs
ZWQgYnkgbXVsdGlwbGUgdGhyZWFkcywgdGhlbiAKKyAgICAvLyB3ZSBuZWVkIHRvIGhhdmUgdGhy
ZWFkIHN5bmNocm9uaXphdGlvbiBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGVy
IHByb2Nlc3MKKyAgICAvLyBnbG9iYWwgcG9vbCBhbGxvY2F0b3IKKyAgICBpZiAoIVBlclByb2Nl
c3NHUEEpIHsgCisgICAgICAgIFRQb29sQWxsb2NhdG9yICpidWlsdEluUG9vbEFsbG9jYXRvciA9
IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKKyAgICAgICAgYnVpbHRJblBvb2xBbGxvY2F0b3It
PnB1c2goKTsKKyAgICAgICAgVFBvb2xBbGxvY2F0b3IqIGdQb29sQWxsb2NhdG9yID0gJkdsb2Jh
bFBvb2xBbGxvY2F0b3I7CisgICAgICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoYnVpbHRJ
blBvb2xBbGxvY2F0b3IpOworCisgICAgICAgIFRTeW1ib2xUYWJsZSBzeW1UYWJsZXNbRVNoTGFu
Z0NvdW50XTsKKyAgICAgICAgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoMCwgaW5mb1Npbmss
IHN5bVRhYmxlcyk7CisKKyAgICAgICAgUGVyUHJvY2Vzc0dQQSA9IG5ldyBUUG9vbEFsbG9jYXRv
cih0cnVlKTsKKyAgICAgICAgUGVyUHJvY2Vzc0dQQS0+cHVzaCgpOworICAgICAgICBTZXRHbG9i
YWxQb29sQWxsb2NhdG9yUHRyKFBlclByb2Nlc3NHUEEpOworCisgICAgICAgIFN5bWJvbFRhYmxl
c1tFU2hMYW5nVmVydGV4XSA9IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJvbFRhYmxl
c1tFU2hMYW5nVmVydGV4XS0+Y29weVRhYmxlKHN5bVRhYmxlc1tFU2hMYW5nVmVydGV4XSk7Cisg
ICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRdID0gbmV3IFRTeW1ib2xUYWJsZTsK
KyAgICAgICAgU3ltYm9sVGFibGVzW0VTaExhbmdGcmFnbWVudF0tPmNvcHlUYWJsZShzeW1UYWJs
ZXNbRVNoTGFuZ0ZyYWdtZW50XSk7CisKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0
cihnUG9vbEFsbG9jYXRvcik7CisKKyAgICAgICAgc3ltVGFibGVzW0VTaExhbmdWZXJ0ZXhdLnBv
cCgpOworICAgICAgICBzeW1UYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XS5wb3AoKTsKKworICAgICAg
ICBidWlsdEluUG9vbEFsbG9jYXRvci0+cG9wQWxsKCk7CisgICAgICAgIGRlbGV0ZSBidWlsdElu
UG9vbEFsbG9jYXRvcjsgICAgICAgIAorCisgICAgfQorCisgICAgcmV0dXJuIHJldCA/IDEgOiAw
OworfQorCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBj
b21waWxlciBvYmplY3RzLgorLy8KKworU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hM
YW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIGlmICghSW5pdFRocmVhZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIobGFuZ3VhZ2UsIHNwZWMpKTsK
KyAgICAKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZSk7Cit9CisKK3Zv
aWQgU2hEZXN0cnVjdChTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8
VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisKKyAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigp
KQorICAgICAgICBEZWxldGVDb21waWxlcihiYXNlLT5nZXRBc0NvbXBpbGVyKCkpOworfQorCisv
LworLy8gQ2xlYW51cCBzeW1ib2wgdGFibGVzCisvLworaW50IFNoRmluYWxpemUoKQoreyAgCisg
IGlmIChQZXJQcm9jZXNzR1BBKSB7CisgICAgUGVyUHJvY2Vzc0dQQS0+cG9wQWxsKCk7CisgICAg
ZGVsZXRlIFBlclByb2Nlc3NHUEE7CisgICAgUGVyUHJvY2Vzc0dQQSA9IDA7CisgIH0KKyAgZm9y
IChpbnQgaSA9IDA7IGkgPCBFU2hMYW5nQ291bnQ7ICsraSkgeworICAgIGRlbGV0ZSBTeW1ib2xU
YWJsZXNbaV07CisgICAgU3ltYm9sVGFibGVzW2ldID0gMDsKKyAgfQorICByZXR1cm4gMTsKK30K
KworYm9vbCBHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBUQnVpbHRJblJlc291cmNl
KiByZXNvdXJjZXMsIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGVzLCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7Cisg
ICAgCisJaWYgKHJlc291cmNlcykgeworCQlidWlsdElucy5pbml0aWFsaXplKCpyZXNvdXJjZXMp
OworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwg
bGFuZ3VhZ2UsIGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfSBlbHNlIHsK
KwkJYnVpbHRJbnMuaW5pdGlhbGl6ZSgpOworCQlJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJ
bnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgRVNoTGFuZ1ZlcnRleCwgaW5mb1NpbmssIHJlc291cmNl
cywgc3ltYm9sVGFibGVzKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1
aWx0SW5TdHJpbmdzKCksIEVTaExhbmdGcmFnbWVudCwgaW5mb1NpbmssIHJlc291cmNlcywgc3lt
Ym9sVGFibGVzKTsKKwl9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbml0aWFsaXpl
U3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdzKiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1NpbmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJl
c291cmNlcywgVFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZXMpCit7CisgICAgVEludGVybWVkaWF0
ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOwkKKyAgICBUU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
OworCQorCWlmIChyZXNvdXJjZXMpCisJCXN5bWJvbFRhYmxlID0gc3ltYm9sVGFibGVzOworCWVs
c2UKKwkJc3ltYm9sVGFibGUgPSAmc3ltYm9sVGFibGVzW2xhbmd1YWdlXTsKKworICAgIC8vIFRP
RE8oYWxva3ApOiBJbnZlc3RpZ2F0ZSBpZiBhIHBhcnNlLWNvbnRleHQgaXMgbmVjZXNzYXJ5IGhl
cmUgYW5kCisgICAgLy8gaWYgc3ltYm9sLXRhYmxlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBHTEVT
MiBhbmQgV2ViR0wgc3BlY3MuCisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoKnN5bWJv
bFRhYmxlLCBpbnRlcm1lZGlhdGUsIGxhbmd1YWdlLCBFU2hTcGVjR0xFUzIsIGluZm9TaW5rKTsK
KworICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisgICAgCisgICAgc2V0
SW5pdGlhbFN0YXRlKCk7CisKKyAgICBhc3NlcnQoc3ltYm9sVGFibGUtPmlzRW1wdHkoKSB8fCBz
eW1ib2xUYWJsZS0+YXRTaGFyZWRCdWlsdEluTGV2ZWwoKSk7CisgICAgICAgCisgICAgLy8KKyAg
ICAvLyBQYXJzZSB0aGUgYnVpbHQtaW5zLiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZSBw
ZXIKKyAgICAvLyBsYW5ndWFnZSBzeW1ib2wgdGFibGUuCisgICAgLy8KKyAgICAvLyBQdXNoIHRo
ZSBzeW1ib2wgdGFibGUgdG8gZ2l2ZSBpdCBhbiBpbml0aWFsIHNjb3BlLiAgVGhpcworICAgIC8v
IHB1c2ggc2hvdWxkIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBwb3AsIHNvIHRoYXQgYnVpbHQt
aW5zCisgICAgLy8gYXJlIHByZXNlcnZlZCwgYW5kIHRoZSB0ZXN0IGZvciBhbiBlbXB0eSB0YWJs
ZSBmYWlscy4KKyAgICAvLworCisgICAgc3ltYm9sVGFibGUtPnB1c2goKTsKKyAgICAKKyAgICAv
L0luaXRpYWxpemUgdGhlIFByZXByb2Nlc3NvcgorICAgIGludCByZXQgPSBJbml0UHJlcHJvY2Vz
c29yKCk7CisgICAgaWYgKHJldCkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsICAiVW5hYmxlIHRvIGludGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29y
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yIChUQnVpbHRJ
blN0cmluZ3M6Oml0ZXJhdG9yIGkgID0gQnVpbHRJblN0cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1
YWdlXS5iZWdpbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBC
dWlsdEluU3RyaW5nc1twYXJzZUNvbnRleHQubGFuZ3VhZ2VdLmVuZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1aWx0
SW5TaGFkZXJzWzFdOworICAgICAgICBpbnQgYnVpbHRJbkxlbmd0aHNbMV07CisKKyAgICAgICAg
YnVpbHRJblNoYWRlcnNbMF0gPSAoKmkpLmNfc3RyKCk7CisgICAgICAgIGJ1aWx0SW5MZW5ndGhz
WzBdID0gKGludCkgKCppKS5zaXplKCk7CisKKyAgICAgICAgaWYgKFBhUGFyc2VTdHJpbmdzKGNv
bnN0X2Nhc3Q8Y2hhcioqPihidWlsdEluU2hhZGVycyksIGJ1aWx0SW5MZW5ndGhzLCAxLCBwYXJz
ZUNvbnRleHQpICE9IDApIHsKKyAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgIlVuYWJsZSB0byBwYXJzZSBidWlsdC1pbnMiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworCWlmIChyZXNvdXJjZXMpIHsK
KwkJSWRlbnRpZnlCdWlsdElucyhwYXJzZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSwg
KnJlc291cmNlcyk7CisJfSBlbHNlIHsJCQkJCQkJCQkgICAKKwkJSWRlbnRpZnlCdWlsdElucyhw
YXJzZUNvbnRleHQubGFuZ3VhZ2UsICpzeW1ib2xUYWJsZSk7CisJfQorCisgICAgRmluYWxpemVQ
cmVwcm9jZXNzb3IoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRG8gYW4gYWN0
dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmluZ3MuICBUaGUgcmVzdWx0IGlzIGxlZnQgCisv
LyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3QuCisvLworLy8gUmV0dXJuOiAgVGhlIHJldHVy
biB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgcmVhbGx5IGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1
Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8vCitpbnQgU2hDb21waWxlKAorICAgIGNvbnN0IFNoSGFuZGxl
IGhhbmRsZSwKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCisgICAgY29u
c3QgaW50IG51bVN0cmluZ3MsCisgICAgY29uc3QgRVNoT3B0aW1pemF0aW9uTGV2ZWwgb3B0TGV2
ZWwsCisgICAgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLAorICAgIGludCBkZWJ1
Z09wdGlvbnMKKyAgICApCit7CisgICAgaWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRT
aEhhbmRsZUJhc2UqIGJhc2UgPSByZWludGVycHJldF9jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5k
bGUpOworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7Cisg
ICAgaWYgKGNvbXBpbGVyID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEdsb2Jh
bFBvb2xBbGxvY2F0b3IucHVzaCgpOworICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxl
ci0+aW5mb1Npbms7CisgICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOworICAgIGluZm9TaW5rLmRl
YnVnLmVyYXNlKCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisKKyAgICBpZiAobnVtU3Ry
aW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJt
ZWRpYXRlKGluZm9TaW5rKTsKKyAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGUoKlN5bWJvbFRh
Ymxlc1tjb21waWxlci0+Z2V0TGFuZ3VhZ2UoKV0pOworICAgIAorICAgIEdlbmVyYXRlQnVpbHRJ
blN5bWJvbFRhYmxlKHJlc291cmNlcywgaW5mb1NpbmssICZzeW1ib2xUYWJsZSwgY29tcGlsZXIt
PmdldExhbmd1YWdlKCkpOworCisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9s
VGFibGUsIGludGVybWVkaWF0ZSwgY29tcGlsZXItPmdldExhbmd1YWdlKCksIGNvbXBpbGVyLT5n
ZXRTcGVjKCksIGluZm9TaW5rKTsKKyAgICBwYXJzZUNvbnRleHQuaW5pdGlhbGl6ZUV4dGVuc2lv
bkJlaGF2aW9yKCk7CisKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0Owor
ICAgIAorICAgIHNldEluaXRpYWxTdGF0ZSgpOworCisgICAgSW5pdFByZXByb2Nlc3NvcigpOyAg
ICAKKyAgICAvLworICAgIC8vIFBhcnNlIHRoZSBhcHBsaWNhdGlvbidzIHNoYWRlcnMuICBBbGwg
dGhlIGZvbGxvd2luZyBzeW1ib2wgdGFibGUKKyAgICAvLyB3b3JrIHdpbGwgYmUgdGhyb3ctYXdh
eSwgc28gcHVzaCBhIG5ldyBhbGxvY2F0aW9uIHNjb3BlIHRoYXQgY2FuCisgICAgLy8gYmUgdGhy
b3duIGF3YXksIHRoZW4gcHVzaCBhIHNjb3BlIGZvciB0aGUgY3VycmVudCBzaGFkZXIncyBnbG9i
YWxzLgorICAgIC8vCisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICBzeW1ib2xU
YWJsZS5wdXNoKCk7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCisgICAg
ICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsICJXcm9uZyBzeW1ib2wgdGFibGUgbGV2ZWwiKTsKKworICAgIGludCByZXQgPSBQYVBhcnNl
U3RyaW5ncyhjb25zdF9jYXN0PGNoYXIqKj4oc2hhZGVyU3RyaW5ncyksIDAsIG51bVN0cmluZ3Ms
IHBhcnNlQ29udGV4dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwor
CisgICAgaWYgKHN1Y2Nlc3MgJiYgcGFyc2VDb250ZXh0LnRyZWVSb290KSB7CisgICAgICAgIGlm
IChvcHRMZXZlbCA9PSBFU2hPcHROb0dlbmVyYXRpb24pCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQuaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhOb25lLCAiTm8gZXJyb3JzLiAgTm8gY29k
ZSBnZW5lcmF0aW9uIHdhcyByZXF1ZXN0ZWQuIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgc3VjY2VzcyA9IGludGVybWVkaWF0ZS5wb3N0UHJvY2VzcyhwYXJzZUNvbnRleHQudHJlZVJv
b3QsIHBhcnNlQ29udGV4dC5sYW5ndWFnZSk7CisKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7
CisKKyAgICAgICAgICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlh
dGUpCisgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29u
dGV4dC50cmVlUm9vdCk7CisKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IENhbGwgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICBpZiAoIWNvbXBpbGVyLT5jb21waWxlKHBhcnNlQ29udGV4dC50cmVl
Um9vdCkpCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgcGFyc2VD
b250ZXh0LmluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgIHBhcnNl
Q29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21w
aWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsKKyAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOworICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlh
dGUpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJl
ZVJvb3QpOworICAgIH0gZWxzZSBpZiAoIXBhcnNlQ29udGV4dC50cmVlUm9vdCkgeworICAgICAg
ICBwYXJzZUNvbnRleHQuZXJyb3IoMSwgIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwgIiIsICIi
KTsKKyAgICAgICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8gPDwgcGFyc2VDb250ZXh0Lm51
bUVycm9ycyA8PCAiIGNvbXBpbGF0aW9uIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGVkLlxuXG4i
OworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBF
RGVidWdPcEludGVybWVkaWF0ZSkKKyAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVl
KHBhcnNlQ29udGV4dC50cmVlUm9vdCk7CisgICAgfQorCisgICAgaW50ZXJtZWRpYXRlLnJlbW92
ZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworCisgICAgLy8KKyAgICAvLyBFbnN1cmUgc3ltYm9s
IHRhYmxlIGlzIHJldHVybmVkIHRvIHRoZSBidWlsdC1pbiBsZXZlbCwKKyAgICAvLyB0aHJvd2lu
ZyBhd2F5IGFsbCBidXQgdGhlIGJ1aWx0LWlucy4KKyAgICAvLworICAgIHdoaWxlICghIHN5bWJv
bFRhYmxlLmF0U2hhcmVkQnVpbHRJbkxldmVsKCkpCisgICAgICAgIHN5bWJvbFRhYmxlLnBvcCgp
OworCisgICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKKyAgICAvLworICAgIC8vIFRocm93IGF3
YXkgYWxsIHRoZSB0ZW1wb3JhcnkgbWVtb3J5IHVzZWQgYnkgdGhlIGNvbXBpbGF0aW9uIHByb2Nl
c3MuCisgICAgLy8KKyAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnBvcCgpOworCisgICAgcmV0dXJu
IHN1Y2Nlc3MgPyAxIDogMDsKK30KKworLy8KKy8vIFJldHVybiBhbnkgY29tcGlsZXIgbG9nIG9m
IG1lc3NhZ2VzIGZvciB0aGUgYXBwbGljYXRpb24uCisvLworY29uc3QgY2hhciogU2hHZXRJbmZv
TG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2Uq
PihoYW5kbGUpOworICAgIFRJbmZvU2luayogaW5mb1NpbmsgPSAwOworCisgICAgaWYgKGJhc2Ut
PmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGls
ZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisKKyAgICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2luay0+
ZGVidWcuY19zdHIoKTsKKyAgICByZXR1cm4gaW5mb1NpbmstPmluZm8uY19zdHIoKTsKK30KKwor
Ly8KKy8vIFJldHVybiBhbnkgb2JqZWN0IGNvZGUuCisvLworY29uc3QgY2hhciogU2hHZXRPYmpl
Y3RDb2RlKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIUluaXRUaHJlYWQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFuZGxlID09IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJh
c2UqPihoYW5kbGUpOworICAgIFRJbmZvU2luayogaW5mb1Npbms7CisKKyAgICBpZiAoYmFzZS0+
Z2V0QXNDb21waWxlcigpKQorICAgICAgICBpbmZvU2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxl
cigpLT5nZXRJbmZvU2luaygpKTsKKworICAgIHJldHVybiBpbmZvU2luay0+b2JqLmNfc3RyKCk7
Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBmb3IgcGFy
c2luZy4gIE1vc3QgZnVuY3Rpb25hbGl5IGFuZCBtYWluIGlkZWFzCisvLyBhcmUgZG9jdW1lbnRl
ZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFi
bGUuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vCisvLyBUVHlwZSBoZWxwZXIgZnVuY3Rp
b24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgorLy8KKworLy8KKy8vIFJlY3Vyc2l2ZWx5IGdlbmVy
YXRlIG1hbmdsZWQgbmFtZXMuCisvLwordm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3Ry
aW5nJiBtYW5nbGVkTmFtZSkKK3sKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgbWFuZ2xl
ZE5hbWUgKz0gJ20nOworICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkpCisgICAgICAgIG1hbmdsZWRO
YW1lICs9ICd2JzsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRWJ0RmxvYXQ6ICAg
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRJ
bnQ6ICAgICAgICAgICAgICAgIG1hbmdsZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKKyAgICBj
YXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFr
OworICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgIG1hbmdsZWROYW1lICs9
ICJzQyI7ICAgICBicmVhazsKKyAgICBjYXNlIEVidFN0cnVjdDoKKyAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gInN0cnVjdC0iOworICAgICAgICBpZiAodHlwZU5hbWUpCisgICAgICAgICAgICBtYW5n
bGVkTmFtZSArPSAqdHlwZU5hbWU7CisgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOworICAgICAgICAgICAg
ICAgICgqc3RydWN0dXJlKVtpXS50eXBlLT5idWlsZE1hbmdsZWROYW1lKG1hbmdsZWROYW1lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5v
bWluYWxTaXplKCkpOworICAgIGlmIChpc0FycmF5KCkpIHsKKyAgICAgICAgY2hhciBidWZbMjBd
OworICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgYXJyYXlTaXplKTsKKyAgICAgICAgbWFuZ2xl
ZE5hbWUgKz0gJ1snOworICAgICAgICBtYW5nbGVkTmFtZSArPSBidWY7CisgICAgICAgIG1hbmds
ZWROYW1lICs9ICddJzsKKyAgICB9Cit9CisKK2ludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFnZXRTdHJ1Y3QoKSkgeworICAgICAgICBhc3NlcnQoZmFsc2UgJiYg
Ik5vdCBhIHN0cnVjdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3Ry
dWN0dXJlU2l6ZSA9PSAwKQorICAgICAgICBmb3IgKFRUeXBlTGlzdDo6aXRlcmF0b3IgdGwgPSBn
ZXRTdHJ1Y3QoKS0+YmVnaW4oKTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQorICAg
ICAgICAgICAgc3RydWN0dXJlU2l6ZSArPSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsK
KworICAgIHJldHVybiBzdHJ1Y3R1cmVTaXplOworfQorCisvLworLy8gRHVtcCBmdW5jdGlvbnMu
CisvLworCit2b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAor
eworICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlw
ZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmco
KSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgIGlmICh0eXBlLmlzQXJyYXko
KSkgeworICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKKyAgICB9CisgICAgaW5mb1Np
bmsuZGVidWcgPDwgIlxuIjsKK30KKwordm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZp
bmZvU2luaykgY29uc3QKK3sKKyAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIo
KSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1h
bmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOworfQorCit2b2lkIFRTeW1ib2xUYWJsZUxldmVs
OjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgdExldmVsOjpjb25zdF9p
dGVyYXRvciBpdDsKKyAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5k
KCk7ICsraXQpCisgICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Cit9CisKK3Zv
aWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAg
Zm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgewor
ICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOworICAg
ICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOworICAgIH0KK30KKworLy8KKy8vIEZ1
bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCisvLworVEZ1bmN0aW9uOjp+
VEZ1bmN0aW9uKCkKK3sKKyAgICBmb3IgKFRQYXJhbUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0
ZXJzLmJlZ2luKCk7IGkgIT0gcGFyYW1ldGVycy5lbmQoKTsgKytpKQorICAgICAgICBkZWxldGUg
KCppKS50eXBlOworfQorCisvLworLy8gU3ltYm9sIHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2Yg
cG9pbnRlcnMgdG8gc3ltYm9scyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KKy8vCitUU3ltYm9s
VGFibGVMZXZlbDo6flRTeW1ib2xUYWJsZUxldmVsKCkKK3sKKyAgICBmb3IgKHRMZXZlbDo6aXRl
cmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKKyAgICAg
ICAgZGVsZXRlICgqaXQpLnNlY29uZDsKK30KKworLy8KKy8vIENoYW5nZSBhbGwgZnVuY3Rpb24g
ZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQgbmFtZQorLy8gdG8gYmUg
cmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVpbHQtaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxv
dworLy8gcGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9s
IHRhYmxlcyB0aGF0CisvLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4K
Ky8vCit2b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIq
IG5hbWUsIFRPcGVyYXRvciBvcCkKK3sKKyAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0OworICAgIGZv
ciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgeworICAgICAg
ICBpZiAoKCppdCkuc2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIFRGdW5jdGlv
biogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPigoKml0KS5zZWNvbmQpOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbi0+cmVsYXRlVG9PcGVyYXRvcihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
KworVFN5bWJvbDo6VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9
IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNv
cHlPZi51bmlxdWVJZDsKK30KKworVFZhcmlhYmxlOjpUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxl
JiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQorewor
ICAgIHR5cGUuY29weVR5cGUoY29weU9mLnR5cGUsIHJlbWFwcGVyKTsKKyAgICB1c2VyVHlwZSA9
IGNvcHlPZi51c2VyVHlwZTsKKyAgICAvLyBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWws
IHVuaW9uQXJyYXkgYW5kIGFycmF5SW5mb3JtYXRpb24gcG9pbnRlcnMgc2hvdWxkIGJlIE5VTEwK
KyAgICBhc3NlcnQoY29weU9mLmFycmF5SW5mb3JtYXRpb25UeXBlID09IDApOworICAgIGFycmF5
SW5mb3JtYXRpb25UeXBlID0gMDsKKworICAgIGlmIChjb3B5T2YudW5pb25BcnJheSkgeworICAg
ICAgICBhc3NlcnQoIWNvcHlPZi50eXBlLmdldFN0cnVjdCgpKTsKKyAgICAgICAgYXNzZXJ0KGNv
cHlPZi50eXBlLmdldE9iamVjdFNpemUoKSA9PSAxKTsKKyAgICAgICAgdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5WzBdID0gY29weU9mLnVuaW9u
QXJyYXlbMF07CisgICAgfSBlbHNlCisgICAgICAgIHVuaW9uQXJyYXkgPSAwOworfQorCitUVmFy
aWFibGUqIFRWYXJpYWJsZTo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAg
VFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKnRoaXMsIHJlbWFwcGVyKTsKKwor
ICAgIHJldHVybiB2YXJpYWJsZTsKK30KKworVEZ1bmN0aW9uOjpURnVuY3Rpb24oY29uc3QgVEZ1
bmN0aW9uJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9m
KQoreworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnBhcmFtZXRlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgcGFyYW1l
dGVycy5wdXNoX2JhY2socGFyYW0pOworICAgICAgICBwYXJhbWV0ZXJzLmJhY2soKS5jb3B5UGFy
YW0oY29weU9mLnBhcmFtZXRlcnNbaV0sIHJlbWFwcGVyKTsKKyAgICB9CisKKyAgICByZXR1cm5U
eXBlLmNvcHlUeXBlKGNvcHlPZi5yZXR1cm5UeXBlLCByZW1hcHBlcik7CisgICAgbWFuZ2xlZE5h
bWUgPSBjb3B5T2YubWFuZ2xlZE5hbWU7CisgICAgb3AgPSBjb3B5T2Yub3A7CisgICAgZGVmaW5l
ZCA9IGNvcHlPZi5kZWZpbmVkOworfQorCitURnVuY3Rpb24qIFRGdW5jdGlvbjo6Y2xvbmUoVFN0
cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBU
RnVuY3Rpb24oKnRoaXMsIHJlbWFwcGVyKTsKKworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwor
VFN5bWJvbFRhYmxlTGV2ZWwqIFRTeW1ib2xUYWJsZUxldmVsOjpjbG9uZShUU3RydWN0dXJlTWFw
JiByZW1hcHBlcikKK3sKKyAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltVGFibGVMZXZlbCA9IG5l
dyBUU3ltYm9sVGFibGVMZXZlbCgpOworICAgIHRMZXZlbDo6aXRlcmF0b3IgaXRlcjsKKyAgICBm
b3IgKGl0ZXIgPSBsZXZlbC5iZWdpbigpOyBpdGVyICE9IGxldmVsLmVuZCgpOyArK2l0ZXIpIHsK
KyAgICAgICAgc3ltVGFibGVMZXZlbC0+aW5zZXJ0KCppdGVyLT5zZWNvbmQtPmNsb25lKHJlbWFw
cGVyKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN5bVRhYmxlTGV2ZWw7Cit9CisKK3ZvaWQgVFN5
bWJvbFRhYmxlOjpjb3B5VGFibGUoY29uc3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpCit7CisgICAg
VFN0cnVjdHVyZU1hcCByZW1hcHBlcjsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi50YWJsZS5zaXplKCk7ICsr
aSkgeworICAgICAgICB0YWJsZS5wdXNoX2JhY2soY29weU9mLnRhYmxlW2ldLT5jbG9uZShyZW1h
cHBlcikpOworICAgIH0KKyAgICBmb3IoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5w
cmVjaXNpb25TdGFjay5zaXplKCk7IGkrKykgeworICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNo
X2JhY2soIGNvcHlPZi5wcmVjaXNpb25TdGFja1tpXSApOworICAgIH0KK30KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCisjZGVmaW5lIF9TWU1CT0xf
VEFCTEVfSU5DTFVERURfCisKKy8vCisvLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMg
dGhlc2UgZGVzaWduIGNoYXJhY3RlcmlzdGljczoKKy8vCisvLyAqIFNhbWUgc3ltYm9sIHRhYmxl
IGNhbiBiZSB1c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQorLy8gICBl
ZmZvcnQgb2YgY3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBi
dWlsdC1pbgorLy8gICBzeW1ib2xzLgorLy8KKy8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVz
ZWQgdG8gZ2l2ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5hbWUKKy8vICAgc28gdGhhdCBzeW1i
b2wgdGFibGUgbG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKKy8vICAg
YSBzaW1wbGVyIHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCisvLworLy8gKiBQdXNoaW5nIGFuZCBw
b3BwaW5nIG9mIHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAK
Ky8vICAgb2Ygc3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcg
aW5zZXJ0cyBnb2luZyBpbnRvCisvLyAgIHRoZSB0b3AuCisvLworLy8gKiBDb25zdGFudHM6ICBD
b21waWxlIHRpbWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCisvLyAg
IGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50
cyBhdCBwYXJzZQorLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBh
bmQgY29uc3RhbnQgcHJvcGFnYXRpb24uCisvLworLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBv
cmFyaWVzIG1hZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwgLnh5LCBldGMuKQorLy8gICBhcmUg
dHJhY2tlZCBpbiB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJv
bCB0YWJsZS4KKy8vCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJjb21waWxlci9D
b21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorCisvLworLy8gU3ltYm9sIGJhc2UgY2xhc3MuICAoQ2FuIGJ1
aWxkIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgb3V0IG9mIHRoZXNlLi4uKQorLy8KK2NsYXNzIFRT
eW1ib2wgeyAgICAKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2Jh
bFBvb2xBbGxvY2F0b3IpCisgICAgVFN5bWJvbChjb25zdCBUU3RyaW5nICpuKSA6ICBuYW1lKG4p
IHsgfQorICAgIHZpcnR1YWwgflRTeW1ib2woKSB7IC8qIGRvbid0IGRlbGV0ZSBuYW1lLCBpdCdz
IGZyb20gdGhlIHBvb2wgKi8gfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7
IHJldHVybiAqbmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5h
bWUoKSBjb25zdCB7IHJldHVybiBnZXROYW1lKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlk
KSB7IHVuaXF1ZUlkID0gaWQ7IH0KKyAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVy
biB1bmlxdWVJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Npbmsp
IGNvbnN0ID0gMDsJCisgICAgVFN5bWJvbChjb25zdCBUU3ltYm9sJik7CisgICAgdmlydHVhbCBU
U3ltYm9sKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgY29uc3QgVFN0cmluZyAqbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgdW5pcXVlSWQ7ICAg
ICAgLy8gRm9yIHJlYWwgY29tcGFyaW5nIGR1cmluZyBjb2RlIGdlbmVyYXRpb24KK307CisKKy8v
CisvLyBWYXJpYWJsZSBjbGFzcywgbWVhbmluZyBhIHN5bWJvbCB0aGF0J3Mgbm90IGEgZnVuY3Rp
b24uCisvLyAKKy8vIFRoZXJlIGNvdWxkIGJlIGEgc2VwYXJhdGUgY2xhc3MgaGVpcmFyY2h5IGZv
ciBDb25zdGFudCB2YXJpYWJsZXM7CisvLyBPbmx5IG9uZSBvZiBpbnQsIGJvb2wsIG9yIGZsb2F0
LCAob3Igbm9uZSkgaXMgY29ycmVjdCBmb3IKKy8vIGFueSBwYXJ0aWN1bGFyIHVzZSwgYnV0IGl0
J3MgZWFzeSB0byBkbyB0aGlzIHdheSwgYW5kIGRvZXNuJ3QKKy8vIHNlZW0gd29ydGggaGF2aW5n
IHNlcGFyYXRlIGNsYXNzZXMsIGFuZCAiZ2V0Q29uc3QiIGNhbid0IHNpbXBseSByZXR1cm4KKy8v
IGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBwb2x5bW9ycGhpY2FsbHksIHNv
IHRoaXMgaXMgCisvLyBqdXN0IHNpbXBsZSBhbmQgcHJhZ21hdGljLgorLy8KK2NsYXNzIFRWYXJp
YWJsZSA6IHB1YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBUVmFyaWFibGUoY29uc3QgVFN0
cmluZyAqbmFtZSwgY29uc3QgVFR5cGUmIHQsIGJvb2wgdVQgPSBmYWxzZSApIDogVFN5bWJvbChu
YW1lKSwgdHlwZSh0KSwgdXNlclR5cGUodVQpLCB1bmlvbkFycmF5KDApLCBhcnJheUluZm9ybWF0
aW9uVHlwZSgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UVmFyaWFibGUoKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCisgICAgVFR5cGUm
IGdldFR5cGUoKSB7IHJldHVybiB0eXBlOyB9ICAgIAorICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBl
KCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHVzZXJUeXBlOyB9CisgICAgdm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1YWxpZmllciBx
dWFsaWZpZXIpIHsgdHlwZS5jaGFuZ2VRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQorICAgIHZvaWQg
dXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUgKnQpIHsgYXJyYXlJbmZvcm1hdGlvblR5
cGUgPSB0OyB9CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgeyByZXR1cm4g
YXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2lu
ayAmaW5mb1NpbmspIGNvbnN0OworCisgICAgQ29uc3RhbnRVbmlvbiogZ2V0Q29uc3RQb2ludGVy
KCkKKyAgICB7IAorICAgICAgICBpZiAoIXVuaW9uQXJyYXkpCisgICAgICAgICAgICB1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworCisgICAgICAg
IHJldHVybiB1bmlvbkFycmF5OworICAgIH0KKworICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXk7IH0KKworICAgIHZvaWQgc2hhcmVD
b25zdFBvaW50ZXIoIENvbnN0YW50VW5pb24gKmNvbnN0QXJyYXkpCisgICAgeworICAgICAgICBk
ZWxldGUgdW5pb25BcnJheTsKKyAgICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKKyAg
ICB9CisgICAgVFZhcmlhYmxlKGNvbnN0IFRWYXJpYWJsZSYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFw
cGVyKTsgLy8gY29weSBjb25zdHJ1Y3RvcgorICAgIHZpcnR1YWwgVFZhcmlhYmxlKiBjbG9uZShU
U3RydWN0dXJlTWFwJiByZW1hcHBlcik7CisKK3Byb3RlY3RlZDoKKyAgICBUVHlwZSB0eXBlOwor
ICAgIGJvb2wgdXNlclR5cGU7CisgICAgLy8gd2UgYXJlIGFzc3VtaW5nIHRoYXQgUG9vbCBBbGxv
Y2F0b3Igd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHVuaW9uQXJyYXkKKyAgICAv
LyB3aGVuIHRoaXMgb2JqZWN0IGlzIGRlc3Ryb3llZAorICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXk7CisgICAgVFR5cGUgKmFycmF5SW5mb3JtYXRpb25UeXBlOyAgLy8gdGhpcyBpcyB1c2Vk
IGZvciB1cGRhdGluZyBtYXhBcnJheVNpemUgaW4gYWxsIHRoZSByZWZlcmVuY2VzIHRvIGEgZ2l2
ZW4gc3ltYm9sCit9OworCisvLworLy8gVGhlIGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBzeW1ib2xz
IGFuZCB0aGUgcGFyc2VyIHdpbGwgbmVlZCB0bworLy8gc2hhcmUgdGhpcyBkZWZpbml0aW9uIG9m
IGEgZnVuY3Rpb24gcGFyYW1ldGVyLgorLy8KK3N0cnVjdCBUUGFyYW1ldGVyIHsKKyAgICBUU3Ry
aW5nICpuYW1lOworICAgIFRUeXBlKiB0eXBlOworICAgIHZvaWQgY29weVBhcmFtKGNvbnN0IFRQ
YXJhbWV0ZXImIHBhcmFtLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAg
IG5hbWUgPSBOZXdQb29sVFN0cmluZyhwYXJhbS5uYW1lLT5jX3N0cigpKTsKKyAgICAgICAgdHlw
ZSA9IHBhcmFtLnR5cGUtPmNsb25lKHJlbWFwcGVyKTsKKyAgICB9Cit9OworCisvLworLy8gVGhl
IGZ1bmN0aW9uIHN1Yi1jbGFzcyBvZiBhIHN5bWJvbC4gIAorLy8KK2NsYXNzIFRGdW5jdGlvbiA6
IHB1YmxpYyBUU3ltYm9sIHsKK3B1YmxpYzoKKyAgICBURnVuY3Rpb24oVE9wZXJhdG9yIG8pIDoK
KyAgICAgICAgVFN5bWJvbCgwKSwKKyAgICAgICAgcmV0dXJuVHlwZShUVHlwZShFYnRWb2lkLCBF
YnBVbmRlZmluZWQpKSwKKyAgICAgICAgb3AobyksCisgICAgICAgIGRlZmluZWQoZmFsc2UpIHsg
fQorICAgIFRGdW5jdGlvbihjb25zdCBUU3RyaW5nICpuYW1lLCBUVHlwZSYgcmV0VHlwZSwgVE9w
ZXJhdG9yIHRPcCA9IEVPcE51bGwpIDogCisgICAgICAgIFRTeW1ib2wobmFtZSksIAorICAgICAg
ICByZXR1cm5UeXBlKHJldFR5cGUpLAorICAgICAgICBtYW5nbGVkTmFtZShURnVuY3Rpb246Om1h
bmdsZU5hbWUoKm5hbWUpKSwKKyAgICAgICAgb3AodE9wKSwKKyAgICAgICAgZGVmaW5lZChmYWxz
ZSkgeyB9CisgICAgdmlydHVhbCB+VEZ1bmN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIGlzRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorCisgICAgc3RhdGljIFRTdHJpbmcg
bWFuZ2xlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lICsgJygnOyB9Cisg
ICAgc3RhdGljIFRTdHJpbmcgdW5tYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWROYW1l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRTdHJpbmcobWFuZ2xlZE5hbWUuY19zdHIoKSwgbWFu
Z2xlZE5hbWUuZmluZF9maXJzdF9vZignKCcpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFBhcmFt
ZXRlcihUUGFyYW1ldGVyJiBwKSAKKyAgICB7IAorICAgICAgICBwYXJhbWV0ZXJzLnB1c2hfYmFj
ayhwKTsKKyAgICAgICAgbWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZSArIHAudHlwZS0+Z2V0TWFu
Z2xlZE5hbWUoKTsKKyAgICB9CisKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1hbmdsZWROYW1lOyB9CisgICAgY29uc3QgVFR5cGUmIGdldFJldHVy
blR5cGUoKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlOyB9CisgICAgdm9pZCByZWxhdGVUb09w
ZXJhdG9yKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQorICAgIFRPcGVyYXRvciBnZXRCdWlsdElu
T3AoKSBjb25zdCB7IHJldHVybiBvcDsgfQorICAgIHZvaWQgc2V0RGVmaW5lZCgpIHsgZGVmaW5l
ZCA9IHRydWU7IH0KKyAgICBib29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKwor
ICAgIGludCBnZXRQYXJhbUNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihw
YXJhbWV0ZXJzLnNpemUoKSk7IH0gICAgCisgICAgVFBhcmFtZXRlciYgb3BlcmF0b3IgW10oaW50
IGkpICAgICAgIHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KKyAgICBjb25zdCBUUGFyYW1ldGVy
JiBvcGVyYXRvciBbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CisgICAgVEZ1
bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKKyAgICB2
aXJ0dWFsIFRGdW5jdGlvbiogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90
ZWN0ZWQ6CisgICAgdHlwZWRlZiBUVmVjdG9yPFRQYXJhbWV0ZXI+IFRQYXJhbUxpc3Q7CisgICAg
VFBhcmFtTGlzdCBwYXJhbWV0ZXJzOworICAgIFRUeXBlIHJldHVyblR5cGU7CisgICAgVFN0cmlu
ZyBtYW5nbGVkTmFtZTsKKyAgICBUT3BlcmF0b3Igb3A7CisgICAgYm9vbCBkZWZpbmVkOworfTsK
KworCitjbGFzcyBUU3ltYm9sVGFibGVMZXZlbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUTWFw
PFRTdHJpbmcsIFRTeW1ib2wqPiB0TGV2ZWw7CisgICAgdHlwZWRlZiB0TGV2ZWw6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgY29uc3QgdExldmVsOjp2YWx1ZV90
eXBlIHRMZXZlbFBhaXI7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8dExldmVsOjppdGVyYXRvciwg
Ym9vbD4gdEluc2VydFJlc3VsdDsKKworICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xv
YmFsUG9vbEFsbG9jYXRvcikKKyAgICBUU3ltYm9sVGFibGVMZXZlbCgpIHsgfQorICAgIH5UU3lt
Ym9sVGFibGVMZXZlbCgpOworCisgICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKSAKKyAg
ICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIHJldHVybmluZyB0cnVlIG1lYW5zIHN5bWJvbCB3
YXMgYWRkZWQgdG8gdGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHRJbnNlcnRSZXN1bHQg
cmVzdWx0OworICAgICAgICByZXN1bHQgPSBsZXZlbC5pbnNlcnQodExldmVsUGFpcihzeW1ib2wu
Z2V0TWFuZ2xlZE5hbWUoKSwgJnN5bWJvbCkpOworCisgICAgICAgIHJldHVybiByZXN1bHQuc2Vj
b25kOworICAgIH0KKworICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsZXZlbC5maW5k
KG5hbWUpOworICAgICAgICBpZiAoaXQgPT0gbGV2ZWwuZW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKKyAg
ICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbGV2ZWwuYmVnaW4oKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOworICAgIH0KKworICAgIHZv
aWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOworICAg
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICBUU3ltYm9sVGFibGVM
ZXZlbCogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6CisgICAg
dExldmVsIGxldmVsOworfTsKKworY2xhc3MgVFN5bWJvbFRhYmxlIHsKK3B1YmxpYzoKKyAgICBU
U3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAgeworICAgICAgICAvLworICAgICAgICAv
LyBUaGUgc3ltYm9sIHRhYmxlIGNhbm5vdCBiZSB1c2VkIHVudGlsIHB1c2goKSBpcyBjYWxsZWQs
IGJ1dAorICAgICAgICAvLyB0aGUgbGFjayBvZiBhbiBpbml0aWFsIGNhbGwgdG8gcHVzaCgpIGNh
biBiZSB1c2VkIHRvIGRldGVjdAorICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFz
IG5vdCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KKyAgICAgICAgLy8KKyAgICB9CisK
KyAgICBUU3ltYm9sVGFibGUoVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSkKKyAgICB7CisgICAgICAg
IHRhYmxlLnB1c2hfYmFjayhzeW1UYWJsZS50YWJsZVswXSk7CisgICAgICAgIHByZWNpc2lvblN0
YWNrLnB1c2hfYmFjayggc3ltVGFibGUucHJlY2lzaW9uU3RhY2tbMF0gKTsKKyAgICAgICAgdW5p
cXVlSWQgPSBzeW1UYWJsZS51bmlxdWVJZDsKKyAgICB9CisKKyAgICB+VFN5bWJvbFRhYmxlKCkK
KyAgICB7CisgICAgICAgIC8vIGxldmVsIDAgaXMgYWx3YXlzIGJ1aWx0IEluIHN5bWJvbHMsIHNv
IHdlIG5ldmVyIHBvcCB0aGF0IG91dAorICAgICAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMSkK
KyAgICAgICAgICAgIHBvcCgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gV2hlbiB0aGUgc3lt
Ym9sIHRhYmxlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1aWx0LWlucywgdGhlcmUgc2hvdWxk
CisgICAgLy8gJ3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBh
bmQgdGhlIHNoYWRlcgorICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCisgICAgLy8KKyAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQorICAgIGJvb2wg
YXRCdWlsdEluTGV2ZWwoKSB7IHJldHVybiBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHx8IGF0RHlu
YW1pY0J1aWx0SW5MZXZlbCgpOyB9CisgICAgYm9vbCBhdFNoYXJlZEJ1aWx0SW5MZXZlbCgpIHsg
cmV0dXJuIHRhYmxlLnNpemUoKSA9PSAxOyB9CQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsg
cmV0dXJuIHRhYmxlLnNpemUoKSA8PSAzOyB9CisgICAgdm9pZCBwdXNoKCkKKyAgICB7IAorICAg
ICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKKyAgICAgICAgcHJl
Y2lzaW9uU3RhY2sucHVzaF9iYWNrKCBQcmVjaXNpb25TdGFja0xldmVsKCkgKTsKKyAgICB9CisK
KyAgICB2b2lkIHBvcCgpCisgICAgeyAKKyAgICAgICAgZGVsZXRlIHRhYmxlW2N1cnJlbnRMZXZl
bCgpXTsgCisgICAgICAgIHRhYmxlLnBvcF9iYWNrKCk7IAorICAgICAgICBwcmVjaXNpb25TdGFj
ay5wb3BfYmFjaygpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KFRTeW1ib2wmIHN5bWJvbCkK
KyAgICB7CisgICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKKyAgICAgICAg
cmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgfQorCisg
ICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwg
Ym9vbCAqc2FtZVNjb3BlID0gMCkgCisgICAgeworICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50
TGV2ZWwoKTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgICAgICBkbyB7CisgICAgICAg
ICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisgICAgICAgICAgICAtLWxl
dmVsOworICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKKyAgICAg
ICAgbGV2ZWwrKzsKKyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgICAgICAqYnVpbHRJbiA9
IGxldmVsID09IDA7CisgICAgICAgIGlmIChzYW1lU2NvcGUpCisgICAgICAgICAgICAqc2FtZVNj
b3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7CisgICAgICAgIHJldHVybiBzeW1ib2w7Cisg
ICAgfQorCisgICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldEdsb2JhbExldmVsKCkgeyBhc3NlcnQo
dGFibGUuc2l6ZSgpID49IDMpOyByZXR1cm4gdGFibGVbMl07IH0KKyAgICB2b2lkIHJlbGF0ZVRv
T3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7IHRhYmxlWzBdLT5yZWxh
dGVUb09wZXJhdG9yKG5hbWUsIG9wKTsgfQorICAgIGludCBnZXRNYXhTeW1ib2xJZCgpIHsgcmV0
dXJuIHVuaXF1ZUlkOyB9CisgICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OworICAgIHZvaWQgY29weVRhYmxlKGNvbnN0IFRTeW1ib2xUYWJsZSYgY29weU9mKTsKKworICAg
IHZvaWQgc2V0RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlLCBUUHJlY2lzaW9uIHBy
ZWMgKXsKKyAgICAgICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSBy
ZXR1cm47IC8vIE9ubHkgc2V0IGRlZmF1bHQgcHJlY2lzaW9uIGZvciBpbnQvZmxvYXQKKyAgICAg
ICAgaW50IGluZGV4T2ZMYXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PGludD4ocHJlY2lzaW9uU3Rh
Y2suc2l6ZSgpKSAtIDE7CisgICAgICAgIHByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVu
dF1bdHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUg
Y3VycmVudCB2YWx1ZQorICAgIH0KKworICAgIC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lv
blN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2lj
VHlwZQorICAgIFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBl
KXsKKyAgICAgICAgaWYoIHR5cGUgIT0gRWJ0RmxvYXQgJiYgdHlwZSAhPSBFYnRJbnQgKSByZXR1
cm4gRWJwVW5kZWZpbmVkOworICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHBy
ZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOworICAgICAgICBhc3NlcnQoIGxldmVsID49IDApOyAv
LyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICBQcmVjaXNpb25T
dGFja0xldmVsOjppdGVyYXRvciBpdDsKKyAgICAgICAgVFByZWNpc2lvbiBwcmVjID0gRWJwVW5k
ZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMuIFNob3Vs
ZCB3ZSBlcnJvciBjaGVjayB0aGlzPworICAgICAgICB3aGlsZSggbGV2ZWwgPj0gMCApeworICAg
ICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0uZmluZCggdHlwZSApOworICAgICAg
ICAgICAgaWYoIGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVsXS5lbmQoKSApeworICAgICAgICAg
ICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBwcmVjOworICAgIH0KKworcHJvdGVjdGVkOiAgICAKKyAgICBpbnQgY3VycmVudExldmVsKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkpIC0gMTsgfQorICAg
IGJvb2wgYXREeW5hbWljQnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDI7
IH0KKworICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CisgICAgdHlw
ZWRlZiBzdGQ6Om1hcDwgVEJhc2ljVHlwZSwgVFByZWNpc2lvbiA+IFByZWNpc2lvblN0YWNrTGV2
ZWw7CisgICAgc3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwgPiBwcmVjaXNpb25TdGFj
azsKKyAgICBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGlu
IGNvZGUgZ2VuZXJhdGlvbgorfTsKKworI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURf
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKKworVHJh
bnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3Bl
YykKKyAgICA6IFRDb21waWxlcihsYW5nLCBzcGVjKSB7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckdM
U0w6OmNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpIHsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRH
TFNMKGluZm9TaW5rLm9iaik7CisgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdM
U0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNM
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFuc2xhdG9y
R0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIgeworcHVibGljOgorICAgIFRyYW5zbGF0b3JHTFNMKEVT
aExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYyk7CisgICAgdmlydHVhbCBib29sIGNvbXBpbGUo
VEludGVybU5vZGUqIHJvb3QpOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
R0xTTF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL1RyYW5zbGF0b3JITFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRITFNMLmgi
CisKK1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hT
cGVjIHNwZWMpCisgICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykKK3sKK30KKworYm9vbCBUcmFu
c2xhdG9ySExTTDo6Y29tcGlsZShUSW50ZXJtTm9kZSAqcm9vdCkKK3sKKyAgICBUUGFyc2VDb250
ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisgICAgc2g6Ok91
dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQpOworCisgICAgb3V0cHV0SExTTC5vdXRw
dXQoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9ySExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9UcmFu
c2xhdG9ySExTTC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JITFNMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KKyNkZWZpbmUgQ09NUElMRVJf
VFJBTlNMQVRPUkhMU0xfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2Ns
YXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CitwdWJsaWM6CisgICAgVHJh
bnNsYXRvckhMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24gMCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfVFlQRVNfSU5DTFVERUQKKyNkZWZpbmUg
X1RZUEVTX0lOQ0xVREVECisKKyNpbmNsdWRlICJjb21waWxlci9CYXNlVHlwZXMuaCIKKyNpbmNs
dWRlICJjb21waWxlci9Db21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisv
LworLy8gTmVlZCB0byBoYXZlIGFzc29jaWF0aW9uIG9mIGxpbmUgbnVtYmVycyB0byB0eXBlcyBp
biBhIGxpc3QgZm9yIGJ1aWxkaW5nIHN0cnVjdHMuCisvLworY2xhc3MgVFR5cGU7CitzdHJ1Y3Qg
VFR5cGVMaW5lIHsKKyAgICBUVHlwZSogdHlwZTsKKyAgICBpbnQgbGluZTsKK307Cit0eXBlZGVm
IFRWZWN0b3I8VFR5cGVMaW5lPiBUVHlwZUxpc3Q7CisKK2lubGluZSBUVHlwZUxpc3QqIE5ld1Bv
b2xUVHlwZUxpc3QoKQoreworICAgIHZvaWQqIG1lbW9yeSA9IEdsb2JhbFBvb2xBbGxvY2F0b3Iu
YWxsb2NhdGUoc2l6ZW9mKFRUeXBlTGlzdCkpOworICAgIHJldHVybiBuZXcobWVtb3J5KSBUVHlw
ZUxpc3Q7Cit9CisKKy8vCisvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdp
dGggdGhlIHlhY2Mgc3RhY2ssICBJdCBjYW4ndCBoYXZlCisvLyB0eXBlcyB0aGF0IGl0IHRoaW5r
cyBoYXZlIG5vbi10cml2aWFsIGNvbnN0cnVjdG9ycy4gIEl0IHNob3VsZAorLy8ganVzdCBiZSB1
c2VkIHdoaWxlIHJlY29nbml6aW5nIHRoZSBncmFtbWFyLCBub3QgYW55dGhpbmcgZWxzZS4gIFBv
aW50ZXJzCisvLyBjb3VsZCBiZSB1c2VkLCBidXQgYWxzbyB0cnlpbmcgdG8gYXZvaWQgbG90cyBv
ZiBtZW1vcnkgbWFuYWdlbWVudCBvdmVyaGVhZC4KKy8vCisvLyBOb3QgYXMgYmFkIGFzIGl0IGxv
b2tzLCB0aGVyZSBpcyBubyBhY3R1YWwgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaWVsZHMKKy8vIG1h
dGNoIHVwIG9yIGFyZSBuYW1lIHRoZSBzYW1lIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KKy8vCitj
bGFzcyBUUHVibGljVHlwZSB7CitwdWJsaWM6CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBz
aXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFy
cmF5CisgICAgYm9vbCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXpl
OworICAgIFRUeXBlKiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNp
YyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAg
ICB0eXBlID0gYnQ7CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9
IEVicFVuZGVmaW5lZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNl
OworICAgICAgICBhcnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAg
ICB1c2VyRGVmID0gMDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0
QWdncmVnYXRlKGludCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBz
OworICAgICAgICBtYXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBh
LCBpbnQgcyA9IDApCisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6
ZSA9IHM7CisgICAgfQorfTsKKwordHlwZWRlZiBUTWFwPFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+
IFRTdHJ1Y3R1cmVNYXA7Cit0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0
ZXJhdG9yIFRTdHJ1Y3R1cmVNYXBJdGVyYXRvcjsKKy8vCisvLyBCYXNlIGNsYXNzIGZvciB0aGlu
Z3MgdGhhdCBoYXZlIGEgdHlwZS4KKy8vCitjbGFzcyBUVHlwZSB7CitwdWJsaWM6CisgICAgUE9P
TF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorICAgIGV4cGxpY2l0
IFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1w
b3JhcnksIGludCBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIo
cSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFy
cmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xl
ZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBl
eHBsaWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVy
KHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFy
cmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJ
bmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocC51c2VyRGVmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+Z2V0VHlw
ZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgZXhwbGljaXQgVFR5cGUoVFR5cGVMaXN0KiB1
c2VyRGVmLCBjb25zdCBUU3RyaW5nJiBuLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihw
KSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5
KGZhbHNlKSwgYXJyYXlTaXplKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSh1c2VyRGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUlu
Zm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBleHBsaWNpdCBUVHlwZSgpIHt9
CisgICAgdmlydHVhbCB+VFR5cGUoKSB7fQorCisgICAgVFR5cGUoY29uc3QgVFR5cGUmIHR5cGUp
IHsgKnRoaXMgPSB0eXBlOyB9CisKKyAgICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5
T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAgIHsKKyAgICAgICAgdHlwZSA9IGNvcHlP
Zi50eXBlOworICAgICAgICBwcmVjaXNpb24gPSBjb3B5T2YucHJlY2lzaW9uOworICAgICAgICBx
dWFsaWZpZXIgPSBjb3B5T2YucXVhbGlmaWVyOworICAgICAgICBzaXplID0gY29weU9mLnNpemU7
CisgICAgICAgIG1hdHJpeCA9IGNvcHlPZi5tYXRyaXg7CisgICAgICAgIGFycmF5ID0gY29weU9m
LmFycmF5OworICAgICAgICBhcnJheVNpemUgPSBjb3B5T2YuYXJyYXlTaXplOworCisgICAgICAg
IFRTdHJ1Y3R1cmVNYXBJdGVyYXRvciBpdGVyOworICAgICAgICBpZiAoY29weU9mLnN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgaWYgKChpdGVyID0gcmVtYXBwZXIuZmluZChzdHJ1Y3R1cmUpKSA9
PSByZW1hcHBlci5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbmV3IHN0
cnVjdHVyZSBoZXJlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gTmV3UG9vbFRUeXBlTGlz
dCgpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9m
LnN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgVFR5cGVMaW5l
IHR5cGVMaW5lOworICAgICAgICAgICAgICAgICAgICB0eXBlTGluZS5saW5lID0gKCpjb3B5T2Yu
c3RydWN0dXJlKVtpXS5saW5lOworICAgICAgICAgICAgICAgICAgICB0eXBlTGluZS50eXBlID0g
KCpjb3B5T2Yuc3RydWN0dXJlKVtpXS50eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+cHVzaF9iYWNrKHR5cGVMaW5lKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGl0
ZXItPnNlY29uZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dHJ1Y3R1cmUgPSAwOworCisgICAgICAgIGZpZWxkTmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5
T2YuZmllbGROYW1lKQorICAgICAgICAgICAgZmllbGROYW1lID0gTmV3UG9vbFRTdHJpbmcoY29w
eU9mLmZpZWxkTmFtZS0+Y19zdHIoKSk7CisgICAgICAgIHR5cGVOYW1lID0gMDsKKyAgICAgICAg
aWYgKGNvcHlPZi50eXBlTmFtZSkKKyAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJp
bmcoY29weU9mLnR5cGVOYW1lLT5jX3N0cigpKTsKKworICAgICAgICBtYW5nbGVkID0gMDsKKyAg
ICAgICAgaWYgKGNvcHlPZi5tYW5nbGVkKQorICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xU
U3RyaW5nKGNvcHlPZi5tYW5nbGVkLT5jX3N0cigpKTsKKworICAgICAgICBzdHJ1Y3R1cmVTaXpl
ID0gY29weU9mLnN0cnVjdHVyZVNpemU7CisgICAgICAgIG1heEFycmF5U2l6ZSA9IGNvcHlPZi5t
YXhBcnJheVNpemU7CisgICAgICAgIGFzc2VydChjb3B5T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUg
PT0gMCk7CisgICAgICAgIGFycmF5SW5mb3JtYXRpb25UeXBlID0gMDsgLy8gYXJyYXlJbmZvcm1h
dGlvblR5cGUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGJ1aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVs
CisgICAgfQorCisgICAgVFR5cGUqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQorICAg
IHsKKyAgICAgICAgVFR5cGUgKm5ld1R5cGUgPSBuZXcgVFR5cGUoKTsKKyAgICAgICAgbmV3VHlw
ZS0+Y29weVR5cGUoKnRoaXMsIHJlbWFwcGVyKTsKKworICAgICAgICByZXR1cm4gbmV3VHlwZTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBi
b29sIG0sIGJvb2wgYSwgaW50IGFTID0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IHR5cGUgPSB0OyBzaXplID0gczsgbWF0cml4ID0gbTsgYXJyYXkgPSBhOyBhcnJheVNpemUgPSBh
UzsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlKFRCYXNpY1R5cGUgdCwgaW50IHMsIGJvb2wg
bSwgVFR5cGUqIHVzZXJEZWYgPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlw
ZSA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IG07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodXNlckRlZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUgPSB1c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxlYXZlIGFycmF5IGluZm9ybWF0aW9uIGludGFjdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgdmlydHVhbCB2b2lkIHNldFR5cGVOYW1lKGNvbnN0IFRTdHJp
bmcmIG4pIHsgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEZpZWxkTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IGZpZWxkTmFtZSA9IE5l
d1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdl
dFR5cGVOYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAg
ICAgIHJldHVybiAqdHlwZU5hbWU7CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBUU3RyaW5n
JiBnZXRGaWVsZE5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZpZWxkTmFtZSk7
CisgICAgICAgIHJldHVybiAqZmllbGROYW1lOworICAgIH0KKworICAgIHZpcnR1YWwgVEJhc2lj
VHlwZSBnZXRCYXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBU
UHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAg
IHZpcnR1YWwgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZp
ZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlUHJlY2lzaW9uKFRQcmVjaXNpb24gcCkgeyBw
cmVjaXNpb24gPSBwOyB9CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlm
aWVyIHEpIHsgcXVhbGlmaWVyID0gcTsgfQorCisgICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUg
b2Ygc2luZ2xlIGluc3RhbmNlIHR5cGUKKyAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KKworICAgIC8vIEZ1bGwtZGltZW5zaW9uYWwgc2l6ZSBv
ZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQorICAgIHZpcnR1YWwgaW50IGdldEluc3RhbmNlU2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobWF0cml4KQorICAgICAgICAgICAgcmV0dXJu
IHNpemUgKiBzaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXgg
PyB0cnVlIDogZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJl
dHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9CisgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGFycmF5U2l6ZTsgfQorICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5
ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQorICAgIHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQg
cykgeyBtYXhBcnJheVNpemUgPSBzOyB9CisgICAgaW50IGdldE1heEFycmF5U2l6ZSAoKSBjb25z
dCB7IHJldHVybiBtYXhBcnJheVNpemU7IH0KKyAgICB2b2lkIGNsZWFyQXJyYXluZXNzKCkgeyBh
cnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNpemUgPSAwOyB9CisgICAgdm9p
ZCBzZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBhcnJheUluZm9ybWF0aW9uVHlw
ZSA9IHQ7IH0KKyAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0
dXJlOyB9CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5cGUg
dCkgeworICAgICAgICBzd2l0Y2ggKHQpIHsKKyAgICAgICAgY2FzZSBFYnRWb2lkOiAgICAgICAg
ICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVi
dEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJi
b29sIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAg
ICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVu
a25vd24gdHlwZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAg
ICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFBy
ZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVy
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsg
fQorICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgeyByZXR1cm4gc3RydWN0dXJlOyB9CisKKyAg
ICBpbnQgZ2V0T2JqZWN0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgdG90YWxTaXpl
OworCisgICAgICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgICAg
ICB0b3RhbFNpemUgPSBnZXRTdHJ1Y3RTaXplKCk7CisgICAgICAgIGVsc2UgaWYgKG1hdHJpeCkK
KyAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0b3RhbFNpemUgPSBzaXplOworCisgICAgICAgIGlmIChpc0FycmF5KCkpCisgICAg
ICAgICAgICB0b3RhbFNpemUgKj0gc3RkOjptYXgoZ2V0QXJyYXlTaXplKCksIGdldE1heEFycmF5
U2l6ZSgpKTsKKworICAgICAgICByZXR1cm4gdG90YWxTaXplOworICAgIH0KKworICAgIFRUeXBl
TGlzdCogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CisgICAgVFN0cmlu
ZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7CisgICAgICAgIGlmICghbWFuZ2xlZCkgeworICAgICAgICAg
ICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3RyaW5nKCIiKTsKKyAgICAgICAgICAgIGJ1aWxkTWFuZ2xl
ZE5hbWUoKm1hbmdsZWQpOworICAgICAgICAgICAgKm1hbmdsZWQgKz0gJzsnIDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiAqbWFuZ2xlZDsKKyAgICB9CisgICAgYm9vbCBzYW1lRWxlbWVu
dFR5cGUoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVybiAgICAgIHR5
cGUgPT0gcmlnaHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQu
c2l6ZSAgICYmCisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAgIHJldHVy
biAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICYmCisgICAgICAgICAgICAgICAgICAgIHNpemUg
PT0gcmlnaHQuc2l6ZSAgICYmCisgICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0
cml4ICYmCisgICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJy
YXkgfHwgYXJyYXlTaXplID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgICAgICAgIHN0
cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1cmU7CisgICAgICAgIC8vIGRvbid0IGNoZWNrIHRoZSBx
dWFsaWZpZXIsIGl0J3Mgbm90IGV2ZXIgd2hhdCdzIGJlaW5nIHNvdWdodCBhZnRlcgorICAgIH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CisgICAgICAg
IHJldHVybiAhb3BlcmF0b3I9PShyaWdodCk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFRUeXBlJiByaWdodCkgY29uc3QgeworICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBl
KSByZXR1cm4gdHlwZSA8IHJpZ2h0LnR5cGU7CisgICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNp
emUpIHJldHVybiBzaXplIDwgcmlnaHQuc2l6ZTsKKyAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdo
dC5tYXRyaXgpIHJldHVybiBtYXRyaXggPCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChhcnJh
eSAhPSByaWdodC5hcnJheSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7CisgICAgICAgIGlm
IChhcnJheVNpemUgIT0gcmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQu
YXJyYXlTaXplOworICAgICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0
dXJuIHN0cnVjdHVyZSA8IHJpZ2h0LnN0cnVjdHVyZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgYnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJik7CisgICAgaW50IGdldFN0
cnVjdFNpemUoKSBjb25zdDsKKworICAgIFRCYXNpY1R5cGUgdHlwZSAgICAgIDogNjsKKyAgICBU
UHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA6IDc7CisgICAg
aW50IHNpemUgICAgICAgICAgICAgOiA4OyAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5v
dCBzaXplIG9mIGFycmF5CisgICAgdW5zaWduZWQgaW50IG1hdHJpeCAgOiAxOworICAgIHVuc2ln
bmVkIGludCBhcnJheSAgIDogMTsKKyAgICBpbnQgYXJyYXlTaXplOworCisgICAgVFR5cGVMaXN0
KiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIG11dGFi
bGUgaW50IHN0cnVjdHVyZVNpemU7CisgICAgaW50IG1heEFycmF5U2l6ZTsKKyAgICBUVHlwZSog
YXJyYXlJbmZvcm1hdGlvblR5cGU7CisgICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8v
IGZvciBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMKKyAgICBUU3RyaW5nICptYW5nbGVkOworICAgIFRT
dHJpbmcgKnR5cGVOYW1lOyAgICAgICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFt
ZQorfTsKKworI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTZWxlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9V
bmZvbGRTZWxlY3QuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNlbGVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxlY3QuaCIKKworI2luY2x1ZGUgImNv
bXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKK1VuZm9sZFNlbGVjdDo6VW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQg
JmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpIDogbUNvbnRleHQoY29udGV4dCksIG1P
dXRwdXRITFNMKG91dHB1dEhMU0wpCit7CisgICAgbVRlbXBvcmFyeUluZGV4ID0gMDsKK30KKwor
dm9pZCBVbmZvbGRTZWxlY3Q6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG1U
ZW1wb3JhcnlJbmRleCsrOworICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworfQorCitib29sIFVu
Zm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24g
Km5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbU91dHB1dEhMU0wtPmdldEJvZHlT
dHJlYW0oKTsKKworICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJhdG9yKCkpCisgICAgewor
ICAgICAgICBpbnQgaSA9IG1UZW1wb3JhcnlJbmRleCsrOworCisgICAgICAgIG91dCA8PCBtT3V0
cHV0SExTTC0+dHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkpIDw8ICIgdCIgPDwgaSA8PCAiO1xu
IjsKKworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgIG91dCA8PCAiaWYoIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNl
KG1PdXRwdXRITFNMKTsKKyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICBvdXQgPDwgIiAgICB0IiA8PCBpIDw8ICIgPSAiOworICAgICAgICBub2RlLT5nZXRUcnVlQmxv
Y2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAg
ICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAg
IntcbiI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgb3V0IDw8ICIgICAgdCIgPDwgaSA8PCAiID0gIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFs
c2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICAgICAgbVRlbXBvcmFyeUluZGV4LS07CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgVW5mb2xkU2VsZWN0OjpnZXRUZW1wb3Jh
cnlJbmRleCgpCit7CisgICAgcmV0dXJuIG1UZW1wb3JhcnlJbmRleDsKK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvVW5mb2xkU2VsZWN0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvVW5mb2xkU2VsZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCisjZGVmaW5lIENP
TVBJTEVSX1VORk9MRFNFTEVDVF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworbmFtZXNwYWNlIHNoCit7
CitjbGFzcyBPdXRwdXRITFNMOworCitjbGFzcyBVbmZvbGRTZWxlY3QgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVW5mb2xkU2VsZWN0KFRQYXJzZUNvbnRleHQg
JmNvbnRleHQsIE91dHB1dEhMU0wgKm91dHB1dEhMU0wpOworCisgICAgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwg
VEludGVybVNlbGVjdGlvbiAqbm9kZSk7CisKKyAgICBpbnQgZ2V0VGVtcG9yYXJ5SW5kZXgoKTsK
KworICBwcm90ZWN0ZWQ6CisgICAgVFBhcnNlQ29udGV4dCAmbUNvbnRleHQ7CisgICAgT3V0cHV0
SExTTCAqY29uc3QgbU91dHB1dEhMU0w7CisKKyAgICBpbnQgbVRlbXBvcmFyeUluZGV4OworfTsK
K30KKworI2VuZGlmICAgLy8gQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9k
ZWJ1Zy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1
Zy5jcHA6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5o
IgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUg
ImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisKK3N0YXRpYyBjb25zdCBpbnQga1RyYWNlQnVmZmVy
TGVuID0gMTAyNDsKKworI2lmZGVmIFRSQUNFX0VOQUJMRUQKK2V4dGVybiAiQyIgewordm9pZCBU
cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworICAgIGlmICghZm9ybWF0KSByZXR1cm47
CisKKyAgICBUUGFyc2VDb250ZXh0KiBwYXJzZUNvbnRleHQgPSBHZXRHbG9iYWxQYXJzZUNvbnRl
eHQoKTsKKyAgICBpZiAocGFyc2VDb250ZXh0KSB7CisgICAgICAgIGNoYXIgYnVmW2tUcmFjZUJ1
ZmZlckxlbl07CisgICAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgICAgdmFfc3RhcnQoYXJncywg
Zm9ybWF0KTsKKyAgICAgICAgdnNucHJpbnRmKGJ1Ziwga1RyYWNlQnVmZmVyTGVuLCBmb3JtYXQs
IGFyZ3MpOworICAgICAgICB2YV9lbmQoYXJncyk7CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5p
bmZvU2luay5kZWJ1ZyA8PCBidWY7CisgICAgfQorfQorfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlm
ICAvLyBUUkFDRV9FTkFCTEVECisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGRlYnVnLmg6IERlYnVnZ2luZyB1dGlsaXRpZXMuCisK
KyNpZm5kZWYgQ09NUElMRVJfREVCVUdfSF8KKyNkZWZpbmUgQ09NUElMRVJfREVCVUdfSF8KKwor
I2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIFRSQUNFX0VOQUJM
RUQgIC8vIGRlZmluZSB0byBlbmFibGUgZGVidWcgbWVzc2FnZSB0cmFjaW5nCisjZW5kaWYgIC8v
IF9ERUJVRworCisvLyBPdXRwdXRzIHRleHQgdG8gdGhlIGRlYnVnIGxvZworI2lmZGVmIFRSQUNF
X0VOQUJMRUQKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8v
IF9fY3BsdXNwbHVzCit2b2lkIFRyYWNlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNpZmRl
ZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMKKworI2Vsc2UgICAvLyBU
UkFDRV9FTkFCTEVECisKKyNkZWZpbmUgVHJhY2UoLi4uKSAoKHZvaWQpMCkKKworI2VuZGlmICAv
LyBUUkFDRV9FTkFCTEVECisKKy8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0aW9uIGFuZCBv
dXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKKyNkZWZpbmUgQVNTRVJUKGV4cHJl
c3Npb24pIGRvIHsgXAorICAgIGlmKCEoZXhwcmVzc2lvbikpIFwKKyAgICAgICAgVHJhY2UoIkFz
c2VydCBmYWlsZWQ6ICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJ
TkVfXyk7IFwKKyAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKK30gd2hpbGUoMCkKKworI2RlZmlu
ZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCisgICAgVHJhY2UoIlVuaW1wbGVtZW50ZWQgaW52b2tl
ZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxz
ZSk7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBVTlJFQUNIQUJMRSgpIGRvIHsgXAorICAgIFRy
YWNlKCJVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5F
X18pOyBcCisgICAgYXNzZXJ0KGZhbHNlKTsgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgICAvLyBD
T01QSUxFUl9ERUJVR19IXworCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYw
MCBAQAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisqLworLyogQmFzZWQgb24KK0FOU0kgQyBncmFt
bWFyLCBMZXggc3BlY2lmaWNhdGlvbgorCitJbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgdGhp
cyBMZXggc3BlY2lmaWNhdGlvbiB0b2dldGhlciB3aXRoIGEgWWFjYyAKK2dyYW1tYXIgZm9yIHRo
ZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMgZHJhZnQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCAK
K2JvdGggdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdCBvcmlnaW5hbCwgYXMgbWVudGlvbmVk
IGluIHRoZSBhbnN3ZXIgCit0byBxdWVzdGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMgRkFR
LCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgCitmaWxlIHVzZW5ldC9uZXQuc291cmNl
cy9hbnNpLmMuZ3JhbW1hci5aLiAKKworSSBpbnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMg
Y2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFyIAorYXMgcG9zc2libGU7IHBs
ZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlzY292ZXIgZGlzY3JlcGFuY2llcy4gCisKK0p1dHRh
IERlZ2VuZXIsIDE5OTUgCisqLworCitEICAgICAgICAgICBbMC05XQorTCAgICAgICAgICAgW2Et
ekEtWl9dCitIICAgICAgICAgICBbYS1mQS1GMC05XQorRSAgICAgICAgICAgW0VlXVsrLV0/e0R9
KworTyAgICAgICAgICAgWzAtN10KKworJW9wdGlvbiBub3VucHV0IAorJXsKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VI
ZWxwZXIuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgorCisvKiB3aW5kb3dzIG9ubHkgcHJh
Z21hICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMikK
KyNlbmRpZgorCitpbnQgeXlfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUpOworCitleHRl
cm4gaW50IHl5cGFyc2Uodm9pZCopOworI2RlZmluZSBZWV9ERUNMIGludCB5eWxleChZWVNUWVBF
KiBweXlsdmFsLCB2b2lkKiBwYXJzZUNvbnRleHRMb2NhbCkKKyNkZWZpbmUgcGFyc2VDb250ZXh0
ICgqKChUUGFyc2VDb250ZXh0KikocGFyc2VDb250ZXh0TG9jYWwpKSkKKyAKKyNkZWZpbmUgWVlf
SU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgKHJlc3VsdCA9IHl5X2lucHV0KGJ1ZiwgbWF4X3Np
emUpKQorCislfQorCisvKgorVE9ETyhhbG9rcCk6IHl5bGluZW5vIGlzIG9ubHkgaGVyZSB0byBz
dXBwb3J0IG9sZCBmbGV4LmV4ZSBpbiBjb21waWxlci90b29scy4KK1JlbW92ZSBpdCB3aGVuIHdl
IGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworJW9wdGlvbiB5eWxp
bmVubworCislb3B0aW9uIG5veXl3cmFwCislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCisleCBG
SUVMRFMKKworCislJQorPCo+Ii8vIlteXG5dKiJcbiIgICAgIHsgLyogPz8gY2FycmlhZ2UgYW5k
L29yIGxpbmUtZmVlZD8gKi8gfTsKKworImludmFyaWFudCIgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKElOVkFSSUFOVCk7IH0KKyJoaWdocCIgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KKyJt
ZWRpdW1wIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJ
VU1fUFJFQ0lTSU9OKTsgfQorImxvd3AiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKExPV19QUkVDSVNJT04pOyB9CisicHJlY2lzaW9uIiAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUFJFQ0lTSU9OKTsgfQorCisiYXR0cmli
dXRlIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRF
KTsgfQorImNvbnN0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKENPTlNUX1FVQUwpOyB9CisidW5pZm9ybSIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oVU5JRk9STSk7IH0KKyJ2YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihWQVJZSU5HKTsgfQorCisiYnJlYWsiICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQlJFQUspOyB9CisiY29u
dGludWUiICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElO
VUUpOyB9CisiZG8iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oRE8pOyB9CisiZm9yIiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oRk9SKTsgfQorIndoaWxlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKFdISUxFKTsgfQorCisiaWYiICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSUYpOyB9CisiZWxzZSIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRUxTRSk7IH0KKworImluIiAgICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOX1FVQUwpOyB9
Cisib3V0IiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
T1VUX1FVQUwpOyB9CisiaW5vdXQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oSU5PVVRfUVVBTCk7IH0KKworImZsb2F0IiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybihGTE9BVF9UWVBFKTsgfQorImludCIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRf
VFlQRSk7IH0KKyJ2b2lkIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQor
ImJvb2wiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisidHJ1ZSIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRy
dWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorImZhbHNlIiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xD
T05TVEFOVCk7IH0KKworImRpc2NhcmQiICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKERJU0NBUkQpOyB9CisicmV0dXJuIiAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUkVUVVJOKTsgfQorCisibWF0MiIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuKE1BVFJJWDIpOyB9CisibWF0MyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
KE1BVFJJWDMpOyB9CisibWF0NCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9
CisKKyJ2ZWMyIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9CisidmVjMyIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQorInZlYzQiICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybiAoVkVDNCk7IH0KKyJpdmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMy
KTsgfQorIml2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzMpOyB9CisiaXZlYzQi
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4
QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKyJidmVjMiIgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKEJWRUMyKTsgfQorImJ2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAo
QlZFQzMpOyB9CisiYnZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKwor
InNhbXBsZXIyRCIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiBTQU1QTEVSMkQ7IH0KKyJzYW1wbGVy
Q3ViZSIgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUkNVQkU7IH0KKworInN0cnVjdCIgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihTVFJVQ1QpOyB9CisKKyJhc20iICAgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJjbGFzcyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisidW5pb24iICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorImVudW0iICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJ0eXBlZGVmIiAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidGVt
cGxhdGUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInRoaXMiICAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJwYWNrZWQiICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJnb3RvIiAgICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic3dpdGNoIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorImRlZmF1bHQiICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKworImlubGluZSIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJub2lubGluZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisidm9sYXRp
bGUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInB1YmxpYyIgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJzdGF0aWMiICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZXh0ZXJuIiAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImV4dGVybmFsIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJpbnRlcmZhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisKKyJsb25nIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic2hv
cnQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImRvdWJsZSIgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJoYWxmIiAgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZml4ZWQiICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorInVuc2lnbmVkIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKworImlucHV0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKyJvdXRwdXQiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisK
KyJodmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaHZlYzMi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImh2ZWM0IiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJmdmVjMiIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZnZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorImZ2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJkdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisiZHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImR2ZWM0
IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKworInNpemVvZiIgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJjYXN0IiAgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJuYW1lc3BhY2UiICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidXNpbmciICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorCit7TH0oe0x9fHtEfSkqICAgICAgIHsgIAorICAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgCisgICBweXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJp
bmcoeXl0ZXh0KTsgCisgICByZXR1cm4gUGFJZGVudE9yVHlwZSgqcHl5bHZhbC0+bGV4LnN0cmlu
ZywgcGFyc2VDb250ZXh0LCBweXlsdmFsLT5sZXguc3ltYm9sKTsgCit9CisKKzBbeFhde0h9KyAg
ICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBz
dHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorMHtPfSsgICAgICAg
ICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0
cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ciswe0R9KyAgICAgICAg
ICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5lcnJvcih5
eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgcGFyc2VD
b250ZXh0LnJlY292ZXIoKTsgcmV0dXJuIDA7fQore0R9KyAgICAgICAgICAgICAgeyBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAs
IDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CisKK3tEfSt7RX0gICAgICAgICAgIHsgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9Cit7RH0rIi4ie0R9Kih7
RX0pPyB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQor
Ii4ie0R9Kyh7RX0pPyAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFs
LT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRD
T05TVEFOVCk7IH0KKworIi8qIiAgICAgICAgICAgIHsgIGludCByZXQgPSBQYVBhcnNlQ29tbWVu
dChweXlsdmFsLT5sZXgubGluZSwgcGFyc2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7
IH0gICAKKworIis9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihBRERfQVNTSUdOKTsgfQorIi09IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihTVUJfQVNTSUdOKTsgfQorIio9IiAgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNVUxfQVNTSUdOKTsgfQorIi89
IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihESVZf
QVNTSUdOKTsgfQorIiU9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihNT0RfQVNTSUdOKTsgfQorIjw8PSIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FTU0lHTik7IH0KKyI+Pj0iICAgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQVNTSUdOKTsg
fQorIiY9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihBTkRfQVNTSUdOKTsgfQorIl49IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdOKTsgfQorInw9IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPUl9BU1NJR04pOyB9CisKKyIrKyIgICAg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5DX09QKTsg
fQorIi0tIiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihERUNfT1ApOyB9CisiJiYiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKEFORF9PUCk7IH0KKyJ8fCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1JfT1ApOyB9CisiXl4iICAgICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFhPUl9PUCk7IH0KKyI8PSIgICAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVfT1ApOyB9Cisi
Pj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEdF
X09QKTsgfQorIj09IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihFUV9PUCk7IH0KKyIhPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTkVfT1ApOyB9CisiPDwiICAgICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFRlRfT1ApOyB9CisiPj4iICAgICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX09QKTsgfQorIjsi
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQorKCJ7InwiPCUiKSAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSBmYWxzZTsgcmV0dXJuKExFRlRfQlJBQ0UpOyB9CisoIn0ifCIlPiIpICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQorIiwiICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5p
blR5cGVQYXJlbikgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09N
TUEpOyB9CisiOiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oQ09MT04pOyB9CisiPSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KKyIo
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0
dXJuKExFRlRfUEFSRU4pOyB9CisiKSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BB
UkVOKTsgfQorKCJbInwiPDoiKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihMRUZUX0JSQUNLRVQpOyB9CisoIl0ifCI6PiIpICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0JSQUNLRVQpOyB9CisiLiIgICAgICAgICB7
IEJFR0lOKEZJRUxEUyk7ICByZXR1cm4oRE9UKTsgfQorIiEiICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJBTkcpOyB9CisiLSIgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oREFTSCk7IH0KKyJ+IiAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihUSUxERSk7IH0KKyIrIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQTFVTKTsgfQorIioi
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNUQVIpOyB9
CisiLyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU0xB
U0gpOyB9CisiJSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oUEVSQ0VOVCk7IH0KKyI8IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihMRUZUX0FOR0xFKTsgfQorIj4iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJR0hUX0FOR0xFKTsgfQorInwiICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZFUlRJQ0FMX0JBUik7IH0KKyJeIiAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDQVJFVCk7IH0K
KyImIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTVBF
UlNBTkQpOyB9CisiPyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oUVVFU1RJT04pOyB9CisKKzxGSUVMRFM+e0x9KHtMfXx7RH0pKiB7IAorQkVHSU4oSU5J
VElBTCk7ICAgICAgCisgICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgICAgIAorICAg
IHB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgICByZXR1
cm4gRklFTERfU0VMRUNUSU9OOyB9Cis8RklFTERTPlsgXHRcdlxmXHJdIHt9CisKK1sgXHRcdlxu
XGZccl0gICB7ICB9Cis8Kj48PEVPRj4+IHsgKCZwYXJzZUNvbnRleHQpLT5BZnRlckVPRiA9IHRy
dWU7IHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOyB5eXRlcm1pbmF0ZSgpO30K
KzwqPi4gICAgeyBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCAiRkxFWDogVW5rbm93biBj
aGFyICIgPDwgeXl0ZXh0IDw8ICJcbiI7CisgICAgICAgICAgcmV0dXJuIDA7IH0KKworJSUKKwor
CisvL0luY2x1ZGluZyBQcmUtcHJvY2Vzc29yLgorZXh0ZXJuICJDIiB7CisgICNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgorfSAKKworLy8KKy8vIFRoZSBZWV9J
TlBVVCBtYWNybyBqdXN0IGNhbGxzIHRoaXMuICBNYXliZSB0aGlzIGNvdWxkIGJlIGp1c3QgcHV0
IGludG8KKy8vIHRoZSBtYWNybyBkaXJlY3RseS4KKy8vCisKK2ludCB5eV9pbnB1dChjaGFyKiBi
dWYsIGludCBtYXhfc2l6ZSkKK3sKKyAgICBpbnQgbGVuOworCisgICAgaWYgKChsZW4gPSB5eWxl
eF9DUFAoYnVmLCBtYXhfc2l6ZSkpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChs
ZW4gPj0gbWF4X3NpemUpIAorICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGJ1ZmZlciBv
dmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBidWZmZXIgYmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNU
IiApOworCisgICAgYnVmW2xlbl0gPSAnICc7CisJcmV0dXJuIGxlbisxOworfQorCisKKy8vCisv
LyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuICBXZSBzZXQgdXAgZ2xv
YmFscyB1c2VkIGJ5CisvLyB5eXdyYXAuCisvLworLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLCBh
cyBwZXIgeXlwYXJzZSgpLgorLy8KK2ludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGlu
dCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQor
eworICAgIGludCBhcmd2MGxlbjsKKyAgICAKKyAgICBTY2FuRnJvbVN0cmluZyhhcmd2WzBdKTsg
CisgICAgCisgICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50IENvbXBpbGVyIFBhcnNlIGNvbnRleHQg
aW50byB0aGUgY3BwIHN0cnVjdHVyZS4KKwljcHAtPnBDID0gKHZvaWQqKSZwYXJzZUNvbnRleHRM
b2NhbDsKKwkKKwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIWFy
Z3ZbaV0pIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKDAsICJOdWxsIHNo
YWRlciBzb3VyY2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExv
Y2FsLnJlY292ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGlmICghc3RyTGVuKSB7CisgICAgICAgIGFyZ3YwbGVuID0gKGludCkgc3RybGVu
KGFyZ3ZbMF0pOworICAgICAgICBzdHJMZW4gICA9ICZhcmd2MGxlbjsKKyAgICB9CisgICAgeXly
ZXN0YXJ0KDApOworICAgICgmcGFyc2VDb250ZXh0TG9jYWwpLT5BZnRlckVPRiA9IGZhbHNlOwor
ICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gYXJndjsKKyAg
ICBjcHAtPlBhQXJnYyAgICAgPSBhcmdjOworICAgIGNwcC0+UGFTdHJMZW4gICA9IHN0ckxlbjsK
KyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisgICAgeXlsaW5lbm8gICA9IDE7Cisg
ICAKKyAgICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAKKyAgICAgICAgaW50IHJldCA9
IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsKKyAgICAgICAgaWYgKGNwcC0+
Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9y
IHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisgICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKGNoYXIgKnMpIAoreworICAg
IGlmICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKKyAgICAgICAgaWYg
KGNwcC0+dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAicHJlLW1hdHVyZSBFT0YiLCBz
LCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsKKyAgICAgICAgR2xvYmFsUGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfSAgICAgICAgICAgIAorfQorCit2b2lkIFBhUmVz
ZXJ2ZWRXb3JkKCkKK3sKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAi
UmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7Cit9CisKK2ludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VD
b250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5bWJvbCkKK3sKKyAgICBzeW1i
b2wgPSBwYXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5kKGlkKTsKKyAgICBpZiAocGFy
c2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1ib2wt
PmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nh
c3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBl
KCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gVFlQRV9OQU1FOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHJldHVybiBJREVOVElGSUVSOworfQorCitpbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZsaW5l
bm8sIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQoreworICAgIGludCB0cmFuc2l0
aW9uRmxhZyA9IDA7CisgICAgaW50IG5leHRDaGFyOworICAgIAorICAgIHdoaWxlICh0cmFuc2l0
aW9uRmxhZyAhPSAyKSB7CisgICAgICAgIG5leHRDaGFyID0geXlpbnB1dCgpOworICAgICAgICBp
ZiAobmV4dENoYXIgPT0gJ1xuJykKKyAgICAgICAgICAgICBsaW5lbm8rKzsKKyAgICAgICAgc3dp
dGNoIChuZXh0Q2hhcikgeworICAgICAgICBjYXNlICcqJyA6CisgICAgICAgICAgICB0cmFuc2l0
aW9uRmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnLycgOiAgLyog
aWYgc3RhciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRoZSBlbmQgb2Yg
Y29tbWVudCAqLworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25GbGFnID09IDEpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMSA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT0YgOgorICAgICAgICAgICAgLyogUmFpc2UgZXJyb3IgbWVzc2FnZSBo
ZXJlICovCisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcih5eWxpbmVubywgIkVu
ZCBvZiBzaGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50LiIsICIiLCAiIiwgIiIpOwor
ICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gWVlfTlVMTDsgCisgICAgICAgIGRlZmF1bHQgOiAgLyogQW55IG90aGVyIGNoYXJhY3Rl
ciB3aWxsIGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAqLworICAgICAgICAgICAgdHJhbnNpdGlv
bkZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitleHRlcm4g
IkMiIHsKKwordm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChU
UGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5v
bmUsIG1zZyk7Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cp
Cit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorfQorCit2b2lkIENQUFNoSW5mb0xv
Z01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQykt
PmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3sKKyAg
ICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBlcnJv
ciIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisK
K3ZvaWQgU2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eWxpbmVubyAmPSB+U291cmNl
TG9jTGluZU1hc2s7CisgICAgeXlsaW5lbm8gfD0gbGluZTsKK30KKwordm9pZCBTZXRTdHJpbmdO
dW1iZXIoaW50IHN0cmluZykKK3sKKyAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNlTG9j
U3RyaW5nU2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOworfQorCitpbnQg
R2V0U3RyaW5nTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5bGluZW5vID4+IDE2OworfQor
CitpbnQgR2V0TGluZU51bWJlcih2b2lkKQoreworICAgIHJldHVybiB5eWxpbmVubyAmIFNvdXJj
ZUxvY0xpbmVNYXNrOworfQorCit2b2lkIEluY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBpZiAo
KHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQorICAg
ICAgICArK3l5bGluZW5vOworfQorCit2b2lkIERlY0xpbmVOdW1iZXIodm9pZCkKK3sKKyAgICBp
ZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkKKyAgICAgICAgLS15eWxpbmVu
bzsKK30KKwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51bVRv
a2VucykKK3sgICAgCisgICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkgewor
ICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
Zygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0s
ICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0
ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAg
ICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0aW1p
emUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQor
ICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0
aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXplJyBw
cmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzBd
LCAiZGVidWciKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNt
cCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIg
ZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJv
biIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9m
ZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVnJyBw
cmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisjaWZkZWYgUFJBR01BX1RBQkxF
CisgICAgICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQor
ICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEu
cHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQorICAgICAg
ICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVudGF0
aW9uIGNhbm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3VjaCBp
bXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQorICAgICAg
ICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisgICAgICAgIC8vIFRoaXMgaW1w
bGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhlIHBy
YWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAgICAgICAgCisgICAgICAgIGlm
IChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21wKHRv
a2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICBUUHJhZ21hVGFibGUm
IHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEu
cHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Cisg
ICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwor
ICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKKyAgICAg
ICAgICAgIH0gICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7Cisg
ICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICop
Y3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21h
VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmlu
ZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFi
bGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNb
MF0gXSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8vIFBS
QUdNQV9UQUJMRQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit7Cisg
ICAgVFN0cmluZyBzdHJTcmM7CisgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOworCisgICAg
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQg
KiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKK30KKworY29uc3QgY2hhciog
R2V0U3RyZnJvbVRTdHIodm9pZCkKK3sKKyAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICByZXR1cm4gY3BwLT5FcnJN
c2c7Cit9CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7CisgICAgKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJlaGF2aW9yIEdldEJlaGF2aW9y
KGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVo
YXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmICghc3RyY21w
KCJlbmFibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxz
ZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaERp
c2FibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKKyAgICAgICAg
cmV0dXJuIEVCaFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0
cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19z
dHIoKSk7CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIH0gICAgICAgIAorfQorCit2
b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBj
aGFyKiBiZWhhdmlvcikKK3sKKyAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlv
cihiZWhhdmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRl
cjsKKyAgICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBhbGwg
ZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7CisgICAgICAgIGlm
IChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJsZSkg
eworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhh
dmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikK
KyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfSAg
ICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAg
ICBpZiAoaXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZp
b3IuZW5kKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKKyAgICAgICAg
ICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coKFRT
dHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIpLmNf
c3RyKCkpOyAgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVCaEVu
YWJsZToKKyAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAgICAgICAgIGNhc2UgRUJoRGlz
YWJsZToKKyAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0
TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOworICAgICAgICAgICAgICAgICgoVFBhcnNlQ29u
dGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1z
Zy5jX3N0cigpLCB5eWxpbmVubyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0
ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgIH0KK30KKyAgICAgICAgCit9ICAvLyBleHRl
cm4gIkMiCisKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKK3sKKyAgICB5eV9zdGFydCA9IDE7Cit9
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNzMgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8qKgorICogVGhpcyBpcyBiaXNvbiBncmFtbWFyIGFuZCBwcm9kdWN0aW9uIGNv
ZGUgZm9yIHBhcnNpbmcgdGhlIE9wZW5HTCAyLjAgc2hhZGluZworICogbGFuZ3VhZ2VzLgorICov
CisleworCisvKiBCYXNlZCBvbjoKK0FOU0kgQyBZYWNjIGdyYW1tYXIKKworSW4gMTk4NSwgSmVm
ZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNjIGdyYW1tYXIgKHdoaWNoIGlzIGFjY29tcGFuaWVkIGJ5
IGEKK21hdGNoaW5nIExleCBzcGVjaWZpY2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMwLCAxOTg1IGRy
YWZ0IHZlcnNpb24gb2YgdGhlCitBTlNJIEMgc3RhbmRhcmQuICBUb20gU3RvY2tmaXNjaCByZXBv
c3RlZCBpdCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0CitvcmlnaW5hbCwgYXMgbWVudGlv
bmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAubGFuZy5jCitG
QVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCBmaWxlIHVzZW5ldC9uZXQuc291cmNl
cy9hbnNpLmMuZ3JhbW1hci5aLgorCitJIGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBj
bG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgYXMKK3Bvc3NpYmxlOyBwbGVh
c2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMuCisKK0p1dHRhIERl
Z2VuZXIsIDE5OTUKKyovCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCisKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAorLyoKK1RP
RE8oYWxva3ApOiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xk
IGJpc29uLmV4ZSBpbgorY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdlIGNhbiBleGNs
dXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCisqLworI2RlZmluZSBZWVBBUlNFX1BBUkFN
X0RFQ0wgdm9pZCoKKyNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBhcnNl
Q29udGV4dExvY2FsKSkKKyNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKKyNk
ZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250
ZXh0TG9jYWwpCitleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIqKTsKKworI2RlZmluZSBGUkFHX1ZF
UlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdt
ZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4
dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVy
dGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgIFwKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisK
KyNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdl
ICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZS
QUdfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5n
RnJhZ21lbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwg
UywgIiIsICIiKTsgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNLX09OTFkoUywg
TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAg
ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlm
IChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBc
CisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorfQorCisjZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250
ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwgUywg
IiIsICIiKTsgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyV9CisldW5pb24geworICAgIHN0cnVjdCB7Cisg
ICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFN0
cmluZyAqc3RyaW5nOworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAgICAgICAgIGludCBpOwor
ICAgICAgICAgICAgYm9vbCBiOworICAgICAgICB9OworICAgICAgICBUU3ltYm9sKiBzeW1ib2w7
CisgICAgfSBsZXg7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAg
ICAgICBUT3BlcmF0b3Igb3A7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Ob2RlOworICAgICAgICAgICAgVEludGVybU5vZGVQYWlyIG5vZGVQYWlyOwor
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7CisgICAgICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIH07CisgICAgICAgIHVu
aW9uIHsKKyAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgICAgICAgICBUUHJlY2lz
aW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOworICAgICAg
ICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07
CisgICAgICAgICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7CisgICAgICAgICAgICBUVHlwZUxpc3Qq
IHR5cGVMaXN0OworICAgICAgICB9OworICAgIH0gaW50ZXJtOworfQorCisleworICAgIGV4dGVy
biBpbnQgeXlsZXgoWVlTVFlQRSosIHZvaWQqKTsKKyV9CisKKyVwdXJlX3BhcnNlciAvKiBKdXN0
IGluIGNhc2UgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyAqLworJWV4cGVjdCAxIC8q
IE9uZSBzaGlmdCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KKyV0b2tl
biA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJF
Q0lTSU9OIFBSRUNJU0lPTgorJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xf
VFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8g
RUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVD
NCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IE1BVFJJWDIg
TUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJ
TkcKKyV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCisldG9rZW4gPGxleD4gU0FN
UExFUjJEIFNBTVBMRVJDVUJFCisKKyV0b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBG
TE9BVENPTlNUQU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IEZJRUxE
X1NFTEVDVElPTgorJXRva2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AKKyV0b2tlbiA8bGV4PiBJ
TkNfT1AgREVDX09QIExFX09QIEdFX09QIEVRX09QIE5FX09QCisldG9rZW4gPGxleD4gQU5EX09Q
IE9SX09QIFhPUl9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FTU0lHTgorJXRva2VuIDxs
ZXg+IE1PRF9BU1NJR04gTEVGVF9BU1NJR04gUklHSFRfQVNTSUdOIEFORF9BU1NJR04gWE9SX0FT
U0lHTiBPUl9BU1NJR04KKyV0b2tlbiA8bGV4PiBTVUJfQVNTSUdOCisKKyV0b2tlbiA8bGV4PiBM
RUZUX1BBUkVOIFJJR0hUX1BBUkVOIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIExFRlRfQlJB
Q0UgUklHSFRfQlJBQ0UgRE9UCisldG9rZW4gPGxleD4gQ09NTUEgQ09MT04gRVFVQUwgU0VNSUNP
TE9OIEJBTkcgREFTSCBUSUxERSBQTFVTIFNUQVIgU0xBU0ggUEVSQ0VOVAorJXRva2VuIDxsZXg+
IExFRlRfQU5HTEUgUklHSFRfQU5HTEUgVkVSVElDQUxfQkFSIENBUkVUIEFNUEVSU0FORCBRVUVT
VElPTgorCisldHlwZSA8aW50ZXJtPiBhc3NpZ25tZW50X29wZXJhdG9yIHVuYXJ5X29wZXJhdG9y
CisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdmFyaWFibGVfaWRlbnRpZmllciBwcmlt
YXJ5X2V4cHJlc3Npb24gcG9zdGZpeF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5
cGVkTm9kZT4gZXhwcmVzc2lvbiBpbnRlZ2VyX2V4cHJlc3Npb24gYXNzaWdubWVudF9leHByZXNz
aW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdW5hcnlfZXhwcmVzc2lvbiBtdWx0
aXBsaWNhdGl2ZV9leHByZXNzaW9uIGFkZGl0aXZlX2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0u
aW50ZXJtVHlwZWROb2RlPiByZWxhdGlvbmFsX2V4cHJlc3Npb24gZXF1YWxpdHlfZXhwcmVzc2lv
bgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24g
Y29uc3RhbnRfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGxvZ2lj
YWxfb3JfZXhwcmVzc2lvbiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIGxvZ2ljYWxfYW5kX2V4cHJl
c3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBzaGlmdF9leHByZXNzaW9uIGFu
ZF9leHByZXNzaW9uIGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIGluY2x1c2l2ZV9vcl9leHByZXNz
aW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZnVuY3Rpb25fY2FsbCBpbml0aWFs
aXplciBjb25kaXRpb24gY29uZGl0aW9ub3B0CisKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4g
dHJhbnNsYXRpb25fdW5pdCBmdW5jdGlvbl9kZWZpbml0aW9uCisldHlwZSA8aW50ZXJtLmludGVy
bU5vZGU+IHN0YXRlbWVudCBzaW1wbGVfc3RhdGVtZW50CisldHlwZSA8aW50ZXJtLmludGVybUFn
Z3JlZ2F0ZT4gIHN0YXRlbWVudF9saXN0IGNvbXBvdW5kX3N0YXRlbWVudAorJXR5cGUgPGludGVy
bS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgc2VsZWN0aW9uX3N0YXRlbWVudCBl
eHByZXNzaW9uX3N0YXRlbWVudAorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlv
biBleHRlcm5hbF9kZWNsYXJhdGlvbgorJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBmb3JfaW5p
dF9zdGF0ZW1lbnQgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQorJXR5cGUgPGludGVy
bS5ub2RlUGFpcj4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudAor
JXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBpdGVyYXRpb25fc3RhdGVtZW50IGp1bXBfc3RhdGVt
ZW50IHN0YXRlbWVudF9ub19uZXdfc2NvcGUKKyV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJh
dGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAorCisldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVj
bGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisl
dHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgorCisldHlwZSA8aW50
ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0
eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUg
PGludGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFy
cmF5CisldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0u
dHlwZUxpbmU+IHN0cnVjdF9kZWNsYXJhdG9yCisldHlwZSA8aW50ZXJtLnR5cGVMaXN0PiBzdHJ1
Y3RfZGVjbGFyYXRvcl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdAorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyIGZ1bmN0aW9uX2Rl
Y2xhcmF0b3IgZnVuY3Rpb25faWRlbnRpZmllcgorJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcgorJXR5cGUg
PGludGVybT4gZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2Nh
bGxfaGVhZGVyX25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3By
b3RvdHlwZQorJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKKworJXN0YXJ0
IHRyYW5zbGF0aW9uX3VuaXQKKyUlCisKK3ZhcmlhYmxlX2lkZW50aWZpZXIKKyAgICA6IElERU5U
SUZJRVIgeworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0
aGUgbGV4aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAkMS5zeW1i
b2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1i
b2wgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5k
ZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Rmxv
YXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9
IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFi
bGUgPSBmYWtlVmFyaWFibGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlz
IGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAg
ICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICQxLnN0cmluZy0+Y19z
dHIoKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFy
aWFibGUqPihzeW1ib2wpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQx
LnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wKKyAgICAg
ICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisKKyAgICAgICAgaWYgKHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgKSB7CisgICAgICAgICAgICBD
b25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOwor
ICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5
LCB0LCAkMS5saW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSk7CisgICAgfQorICAgIDsK
KworcHJpbWFyeV9leHByZXNzaW9uCisgICAgOiB2YXJpYWJsZV9pZGVudGlmaWVyIHsKKyAgICAg
ICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBJTlRDT05TVEFOVCB7CisgICAgICAgIC8vCisgICAg
ICAgIC8vIElOVF9UWVBFIGlzIG9ubHkgMTYtYml0IHBsdXMgc2lnbiBiaXQgZm9yIHZlcnRleC9m
cmFnbWVudCBzaGFkZXJzLAorICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0
YW50cworICAgICAgICAvLworICAgICAgICBpZiAoYWJzKCQxLmkpID49ICgxIDw8IDE2KSkgewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIGludGVnZXIgY29uc3Rh
bnQgb3ZlcmZsb3ciLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5l
KTsKKyAgICB9CisgICAgfCBGTE9BVENPTlNUQU5UIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5z
ZXRGQ29uc3QoJDEuZik7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IEJPT0xDT05TVEFOVCB7CisgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCQxLmIpOworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgIH0KKyAgICB8IExF
RlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDI7CisgICAg
fQorICAgIDsKKworcG9zdGZpeF9leHByZXNzaW9uCisgICAgOiBwcmltYXJ5X2V4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBMRUZU
X0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAo
ISQxLT5pc0FycmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+aXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUg
YXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBh
cnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoJDEtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+Z2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0
YW50IGZvbGRpbmcgZm9yIGFycmF5cworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5hZGRDb25zdEFycmF5Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKCQxLT5pc1ZlY3RvcigpKSB7ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Jz
CisgICAgICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAgICAgICAg
ZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAkMy0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgp
OyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2Ugdi54eSBzZW5kcyBmaWVsZHMgaW50
ZWdlciBhcnJheQorICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCQx
LT5pc01hdHJpeCgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0TWF0cml4Tm9kZSgkMy0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwg
JDIubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYg
KCgkMS0+aXNWZWN0b3IoKSB8fCAkMS0+aXNNYXRyaXgoKSkgJiYgJDEtPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISQxLT5pc0FycmF5KCkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICQzLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCks
ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCksIHRydWUsICQyLmxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2lu
dGVyKCksIDAsIGZhbHNlLCAkMi5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICQzLT5nZXRBc0NvbnN0
YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgPj0gJDEtPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiBy
YW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgkMS0+
aXNBcnJheSgpICYmICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJh
eSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0aCBhIHNpemUgYmVmb3JlIGJlaW5nIGluZGV4ZWQgd2l0
aCBhIHZhcmlhYmxlIik7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgJDEsICQzLCAkMi5s
aW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoJCQgPT0gMCkgewor
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFDb25zdCksICQyLmxpbmUpOworICAg
ICAgICB9IGVsc2UgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQx
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCksICQxLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5n
ZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXRO
b21pbmFsU2l6ZSgpLCAkMS0+aXNNYXRyaXgoKSkpOworCisgICAgICAgICAgICBpZiAoJDEtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICAkJC0+
Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBl
bHNlIGlmICgkMS0+aXNNYXRyaXgoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlw
ZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkp
OworICAgICAgICBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgICQkLT5zZXRU
eXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1w
b3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCQxLT5pc1Zl
Y3RvcigpICYmICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxQ29uc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoJDEtPmlzVmVjdG9yKCkpCisg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQk
LT5zZXRUeXBlKCQxLT5nZXRUeXBlKCkpOworICAgIH0KKyAgICB8IGZ1bmN0aW9uX2NhbGwgewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgRklF
TERfU0VMRUNUSU9OIHsKKyAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3Ig
dG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7CisgICAgICAg
ICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4
dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZp
ZWxkcywgJDMubGluZSkpIHsKKyAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgkMS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRp
bmcgZm9yIHZlY3RvciBmaWVsZHMKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsICQzLmxpbmUpOworICAgICAgICAgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBl
KCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkg
KCokMy5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZmllbGRzLm51bSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwg
JDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRC
YXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5n
OworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICQzLmxpbmUpOworICAgICAgICAgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3Rv
clN3aXp6bGUsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFU
ZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKKyAg
ICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgaWYgKCEgcGFyc2VD
b250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSwgZmllbGRzLCAkMy5saW5lKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAw
OworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
eworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBub24tc2Nh
bGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iLCAiIik7CisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldElDb25zdCgwKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAg
ICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRl
bXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29s
ICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAg
ICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFBy
ZWNpc2lvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0g
ZmFsc2U7CisgICAgICAgICAgICBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCk7CisgICAgICAgICAgICBpZiAoZmllbGRzID09IDApIHsKKyAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIs
ICJJbnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgZmllbGRzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
KCpmaWVsZHMpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICokMy5zdHJpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqJDMuc3RyaW5n
LCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBz
dHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRl
cigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAkMy5s
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgJDIubGluZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIG5vIHN1Y2ggZmll
bGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAkJCA9
ICQxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBmaWVsZCBzZWxlY3Rp
b24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lk
ZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgICAgIC8vIGRv
bid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgIH0KKyAgICB8IHBv
c3RmaXhfZXhwcmVzc2lvbiBJTkNfT1AgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKCQyLmxpbmUsICIrKyIsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgJDIubGluZSwgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnVuYXJ5T3BFcnJvcigkMi5saW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQk
ID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09Q
IHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAi
LS0iLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3Jl
bWVudCwgJDEsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBp
ZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDIu
bGluZSwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAg
fQorICAgIDsKKworaW50ZWdlcl9leHByZXNzaW9uCisgICAgOiBleHByZXNzaW9uIHsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQor
ICAgIDsKKworZnVuY3Rpb25fY2FsbAorICAgIDogZnVuY3Rpb25fY2FsbF9vcl9tZXRob2Qgewor
ICAgICAgICBURnVuY3Rpb24qIGZuQ2FsbCA9ICQxLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0
b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BO
dWxsKQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlz
IHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3Vn
aCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVp
ciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8v
IHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soJDEubGluZSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2Fs
bCwgb3AsICZ0eXBlKSkgeworICAgICAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBJdCdzIGEgY29u
c3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCQxLmludGVybU5vZGUsICZ0
eXBlLCBvcCwgZm5DYWxsLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3Jl
Z2F0ZU9wZXJhdG9yKDAsIG9wLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICQkLT5zZXRUeXBlKHR5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRh
YmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5k
aWRhdGU7CisgICAgICAgICAgICBib29sIGJ1aWx0SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0
ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1bmN0aW9uKCQxLmxpbmUsIGZuQ2FsbCwgJmJ1aWx0SW4p
OworICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLiAgQnV0LCBpdCBtaWdodCBzdGls
bCBtYXAgdG8gYSBidWlsdC1pbgorICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0
SW5PcCgpOworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlv
biBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50
KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
JCQgPT0gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVyYW5kIHR5cGUiLCAiSW50
ZXJuYWwgRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQgaW4g
dW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCQxLmludGVybU5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFlZRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgb3AsICQx
LmxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisg
ICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdn
cmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICQxLmxp
bmUpOworICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0
dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93
IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVz
ZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09
IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWls
dEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0
cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VXNlckRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRhdGUtPmdldE1hbmdsZWRO
YW1lKCkpOworCisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbDsKKyAgICAgICAg
ICAgICAgICAgICAgVFF1YWxpZmllckxpc3QmIHF1YWxpZmllckxpc3QgPSAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBxdWFsID0gKCpmbkNhbmRpZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVy
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9
PSBFdnFJbk91dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+
Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcgb3Ig
J2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgcXVhbGlmaWVyTGlzdC5wdXNoX2JhY2socXVhbCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5k
aWRhdGUtPmdldFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQor
ICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5
CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsK
KyAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgZm5DYWxsOworICAgIH0K
KyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCisgICAgOiBmdW5jdGlvbl9jYWxsX2dl
bmVyaWMgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHBvc3RmaXhfZXhwcmVzc2lv
biBET1QgZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7
CisKK2Z1bmN0aW9uX2NhbGxfZ2VuZXJpYworICAgIDogZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0
aF9wYXJhbWV0ZXJzIFJJR0hUX1BBUkVOIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQu
bGluZSA9ICQyLmxpbmU7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9fcGFy
YW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmxpbmUg
PSAkMi5saW5lOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFt
ZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIFZPSURfVFlQRSB7CisgICAgICAgICQk
LmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUgPSAwOworICAgIH0KKyAgICB8
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKKyAgICAg
ICAgJCQuaW50ZXJtTm9kZSA9IDA7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9oZWFk
ZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBhc3NpZ25tZW50
X2V4cHJlc3Npb24geworICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUo
JDItPmdldFR5cGUoKSkgfTsKKyAgICAgICAgJDEtPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAg
ICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUgPSAkMjsKKyAgICB9
CisgICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgYXNzaWdu
bWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRU
eXBlKCQzLT5nZXRUeXBlKCkpIH07CisgICAgICAgICQxLmZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIo
cGFyYW0pOworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0aW9uOworICAgICAgICAkJC5p
bnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5p
bnRlcm1Ob2RlLCAkMywgJDIubGluZSk7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fY2FsbF9o
ZWFkZXIKKyAgICA6IGZ1bmN0aW9uX2lkZW50aWZpZXIgTEVGVF9QQVJFTiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgQ29uc3RydWN0b3JzIGxv
b2sgbGlrZSBmdW5jdGlvbnMsIGJ1dCBhcmUgcmVjb2duaXplZCBhcyB0eXBlcy4KKworZnVuY3Rp
b25faWRlbnRpZmllcgorICAgIDogdHlwZV9zcGVjaWZpZXIgeworICAgICAgICAvLworICAgICAg
ICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBpZiAoJDEuYXJyYXkpIHsKKyAg
ICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwg
IkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoJDEudXNlckRlZikgeworICAgICAgICAg
ICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsK
KyAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3Ry
aW5nLCB0eXBlLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QpOworICAgICAgICAgICAgJCQgPSBmdW5jdGlv
bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7
CisgICAgICAgICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6CisgICAgICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgeworICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
Q29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0
cnVjdFZlYzI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAy
OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1
Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRf
T05MWSgiaXZlYzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzQiLCAkMS5s
aW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29s
OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgi
YnZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzMiLCAkMS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRo
aXMgdHlwZSIsIFRUeXBlOjpnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIpOworICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQxLnR5cGUg
PSBFYnRGbG9hdDsKKyAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAg
ICAgICBUVHlwZSB0eXBlKCQxKTsKKyAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBu
ZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICAgICAkJCA9IGZ1
bmN0aW9uOworICAgICAgICB9CisgICAgfQorICAgIHwgSURFTlRJRklFUiB7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBu
ZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247Cisg
ICAgfQorICAgIHwgRklFTERfU0VMRUNUSU9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5k
ZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEu
c3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICB9CisgICAgOworCit1
bmFyeV9leHByZXNzaW9uCisgICAgOiBwb3N0Zml4X2V4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxOworICAgIH0KKyAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5saW5lLCAiKysiLCAkMikpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgJDEubGlu
ZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICQkID0gJDI7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBERUNfT1Ag
dW5hcnlfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9y
Q2hlY2soJDEubGluZSwgIi0tIiwgJDIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKEVPcFByZURlY3JlbWVudCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51
bmFyeU9wRXJyb3IoJDEubGluZSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7
CisgICAgICAgIGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsICQxLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgaWYgKCQkID09IDApIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CisgICAgICAgICAgICAgICAg
c3dpdGNoKCQxLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJv
ck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVy
cm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJv
cigkMS5saW5lLCBlcnJvck9wLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAkJCA9ICQyOworICAg
IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyB0cmFkaXRpb25hbCBzdHlsZSB0eXBlIGNh
c3RzLgorCit1bmFyeV9vcGVyYXRvcgorICAgIDogUExVUyAgeyAkJC5saW5lID0gJDEubGluZTsg
JCQub3AgPSBFT3BOdWxsOyB9CisgICAgfCBEQVNIICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5v
cCA9IEVPcE5lZ2F0aXZlOyB9CisgICAgfCBCQU5HICB7ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5v
cCA9IEVPcExvZ2ljYWxOb3Q7IH0KKyAgICA7CisvLyBHcmFtbWFyIE5vdGU6ICBObyAnKicgb3Ig
JyYnIHVuYXJ5IG9wcy4gIFBvaW50ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCittdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uCisgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAg
IHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24geworICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiKiIsICQyLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhw
cmVzc2lvbiB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCIvIiwgJDIubGluZSk7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQx
LCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgk
JCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGlu
ZSwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9
ICQxOworICAgICAgICB9CisgICAgfQorICAgIDsKKworYWRkaXRpdmVfZXhwcmVzc2lvbgorICAg
IDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGFkZGl0aXZl
X2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQz
LCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09
IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAi
KyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7
CisgICAgICAgIH0KKyAgICB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAg
IDsKKworc2hpZnRfZXhwcmVzc2lvbgorICAgIDogYWRkaXRpdmVfZXhwcmVzc2lvbiB7ICQkID0g
JDE7IH0KKyAgICA7CisKK3JlbGF0aW9uYWxfZXhwcmVzc2lvbgorICAgIDogc2hpZnRfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xF
IHNoaWZ0X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjwiLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3Qo
ZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhw
cmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEs
ICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQk
ID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5l
LCAiPiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAg
fQorICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsK
KyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExlc3NUaGFuRXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoJDIubGluZSwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGlu
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Ag
c2hpZnRfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPj0iLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2Vx
dWFsaXR5X2V4cHJlc3Npb24KKyAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7
IH0KKyAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHByZXNzaW9u
ICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BFcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5
T3BFcnJvcigkMi5saW5lLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsK
KyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBw
YXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9v
YmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9Cisg
ICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BO
b3RFcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BF
cnJvcigkMi5saW5lLCAiIT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAg
ICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJz
ZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmpl
Y3RzIikpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAg
OworCithbmRfZXhwcmVzc2lvbgorICAgIDogZXF1YWxpdHlfZXhwcmVzc2lvbiB7ICQkID0gJDE7
IH0KKyAgICA7CisKK2V4Y2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBhbmRfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KKyAgICA7CisKK2luY2x1c2l2ZV9vcl9leHByZXNzaW9uCisgICAgOiBl
eGNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICA7CisKK2xvZ2ljYWxfYW5k
X2V4cHJlc3Npb24KKyAgICA6IGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQor
ICAgIHwgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiBBTkRfT1AgaW5jbHVzaXZlX29yX2V4cHJlc3Np
b24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5s
aW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2ljYWxfeG9yX2V4cHJlc3Npb24K
KyAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNzaW9uICB7CisgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
WG9yLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9y
KCQyLmxpbmUsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAg
ICB9CisgICAgfQorICAgIDsKKworbG9naWNhbF9vcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQorICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9u
IE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAifHwiLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7
CisKK2NvbmRpdGlvbmFsX2V4cHJlc3Npb24KKyAgICA6IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KKyAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBRVUVTVElPTiBleHByZXNz
aW9uIENPTE9OIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+Ym9vbEVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwgJDIubGluZSk7CisgICAgICAgIGlmICgkMy0+Z2V0VHlw
ZSgpICE9ICQ1LT5nZXRUeXBlKCkpCisgICAgICAgICAgICAkJCA9IDA7CisKKyAgICAgICAgaWYg
KCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5s
aW5lLCAiOiIsICQzLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQk
ID0gJDU7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCithc3NpZ25tZW50X2V4cHJlc3Npb24K
KyAgICA6IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCB1bmFyeV9l
eHByZXNzaW9uIGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWdu
IiwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQy
LmxpbmUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5hc3NpZ25FcnJvcigkMi5saW5lLCAiYXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfSBlbHNlIGlmICgoJDEtPmlz
QXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9y
Q2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgOworCithc3NpZ25tZW50X29wZXJhdG9y
CisgICAgOiBFUVVBTCAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcEFzc2lnbjsgfQorICAgIHwgTVVMX0FTU0lH
TiAgIHsgRlJBR19WRVJUX09OTFkoIio9IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGlu
ZTsgJCQub3AgPSBFT3BNdWxBc3NpZ247IH0KKyAgICB8IERJVl9BU1NJR04gICB7IEZSQUdfVkVS
VF9PTkxZKCIvPSIsICQxLmxpbmUpOyAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9w
RGl2QXNzaWduOyB9CisgICAgfCBBRERfQVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcEFkZEFzc2lnbjsgfQor
ICAgIHwgU1VCX0FTU0lHTiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
JC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BTdWJBc3NpZ247IH0KKyAgICA7CisKK2V4cHJl
c3Npb24KKyAgICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIHwgZXhwcmVzc2lvbiBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIu
bGluZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9ICQzOworICAgICAgICB9CisgICAgfQorICAgIDsKKworY29u
c3RhbnRfZXhwcmVzc2lvbgorICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitk
ZWNsYXJhdGlvbgorICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIFNFTUlDT0xPTiAgIHsKKyAgICAg
ICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooJDEuZnVuY3Rpb24pOworICAgICAgICAKKyAgICAg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Cisg
ICAgICAgIHByb3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpOworICAg
ICAgICBwcm90b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb25baV07
CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUs
ICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm90b3R5
cGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwg
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwg
JDEubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcGVyYXRvcihF
T3BQcm90b3R5cGUpOworICAgICAgICAkJCA9IHByb3RvdHlwZTsKKyAgICB9CisgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04geworICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVn
YXRlKQorICAgICAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNs
YXJhdGlvbik7CisgICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgIH0KKyAgICB8
IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VN
SUNPTE9OIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJl
Y2lzaW9uKCAkMy50eXBlLCAkMiApOworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKwor
ZnVuY3Rpb25fcHJvdG90eXBlCisgICAgOiBmdW5jdGlvbl9kZWNsYXJhdG9yIFJJR0hUX1BBUkVO
ICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUg
c2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhp
cyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNo
ZWNrIGZvciByZWRlZmluaXRpb25zCisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMg
cG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFy
YW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0
aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIGlmIChwcmV2RGVj
KSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRS
ZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUi
LCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKCpwcmV2RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAo
KiQxKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUg
dGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291bGQg
YWxzbyBiZSBhIGRlZmluaXRpb24sCisgICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdhbnQg
dG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBvbmUg
dGhhdCdzCisgICAgICAgIC8vIGJlaW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVwIHRo
aXMgZGVjbGFyYXRpb24sIG5vdCB0aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAg
IC8vCisgICAgICAgICQkLmZ1bmN0aW9uID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5l
OworCisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC5mdW5jdGlv
bik7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVjbGFyYXRvcgorICAgIDogZnVuY3Rpb25f
aGVhZGVyIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9oZWFkZXJf
d2l0aF9wYXJhbWV0ZXJzIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCisKK2Z1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciBwYXJh
bWV0ZXJfZGVjbGFyYXRpb24geworICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgorICAgICAg
ICAkJCA9ICQxOworICAgICAgICBpZiAoJDIucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0g
RWJ0Vm9pZCkKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIoJDIucGFyYW0pOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBkZWxldGUgJDIucGFyYW0udHlwZTsKKyAgICB9CisgICAgfCBm
dW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIENPTU1BIHBhcmFtZXRlcl9kZWNsYXJhdGlv
biB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1w
YXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3Ig
bmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNs
YXJhdG9yCisgICAgICAgIC8vCisgICAgICAgIGlmICgkMy5wYXJhbS50eXBlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBw
YXJhbWV0ZXIgPiBmaXJzdCBpcyB2b2lkCisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGFuIGFyZ3VtZW50IHR5cGUgZXhj
ZXB0IGZvciAnKHZvaWQpJyIsICJ2b2lkIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlwZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICAgICAk
JCA9ICQxOworICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRlcigkMy5wYXJhbSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgOworCitmdW5jdGlvbl9oZWFkZXIKKyAgICA6IGZ1bGx5X3NwZWNpZmll
ZF90eXBlIElERU5USUZJRVIgTEVGVF9QQVJFTiB7CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIg
IT0gRXZxR2xvYmFsICYmICQxLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBm
b3IgZnVuY3Rpb24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIi
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgIC8vIG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5l
LCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAv
LyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJvdG90eXBlIGFmdGVyIHBhcnNpbmcgaXQgKHdlIGRv
IG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbjsKKyAg
ICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigk
Mi5zdHJpbmcsIHR5cGUpOworICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICA7CisK
K3BhcmFtZXRlcl9kZWNsYXJhdG9yCisgICAgLy8gVHlwZSArIG5hbWUKKyAgICA6IHR5cGVfc3Bl
Y2lmaWVyIElERU5USUZJRVIgeworICAgICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0
eXBlICd2b2lkJyIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7JDIuc3Ry
aW5nLCBuZXcgVFR5cGUoJDEpfTsKKyAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CisgICAgICAg
ICQkLnBhcmFtID0gcGFyYW07CisgICAgfQorICAgIHwgdHlwZV9zcGVjaWZpZXIgSURFTlRJRklF
UiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKKyAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMubGluZSwgJDQs
IHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQx
LnNldEFycmF5KHRydWUsIHNpemUpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBl
KCQxKTsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgJDIuc3RyaW5nLCB0eXBlIH07Cisg
ICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAg
IH0KKyAgICA7CisKK3BhcmFtZXRlcl9kZWNsYXJhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG9u
bHkgcGFyYW1ldGVyIHF1YWxpZmllciBhIHBhcmFtZXRlciBjYW4gaGF2ZSBhcmUKKyAgICAvLyBJ
Tl9RVUFMLCBPVVRfUVVBTCwgSU5PVVRfUVVBTCwgb3IgQ09OU1QuCisgICAgLy8KKworICAgIC8v
CisgICAgLy8gVHlwZSArIG5hbWUKKyAgICAvLworICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgICAgICQkID0gJDM7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5xdWFs
aWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xh
cmF0b3IgeworICAgICAgICAkJCA9ICQyOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJh
bWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnBhcmFtRXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJhbS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICAv
LworICAgIC8vIE9ubHkgdHlwZQorICAgIC8vCisgICAgfCB0eXBlX3F1YWxpZmllciBwYXJhbWV0
ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDM7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5lLCAkMS5x
dWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgIH0KKyAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5
cGVfc3BlY2lmaWVyIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICokMi5wYXJhbS50eXBl
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAkMSwgJCQu
cGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9
CisgICAgOworCitwYXJhbWV0ZXJfcXVhbGlmaWVyCisgICAgOiAvKiBlbXB0eSAqLyB7CisgICAg
ICAgICQkID0gRXZxSW47CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgICQkID0gRXZx
SW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICAkJCA9IEV2cU91dDsKKyAgICB9
CisgICAgfCBJTk9VVF9RVUFMIHsKKyAgICAgICAgJCQgPSBFdnFJbk91dDsKKyAgICB9CisgICAg
OworCitwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsKKyAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQxKSB9OworICAgICAgICAk
JC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICA7CisKK2luaXRfZGVjbGFyYXRvcl9saXN0Cisg
ICAgOiBzaW5nbGVfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgICAgICAKKyAg
ICAgICAgaWYgKCQkLnR5cGUucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgJCQudHlwZS5wcmVjaXNpb24gPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1
bHRQcmVjaXNpb24oJDEudHlwZS50eXBlKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnByZWNpc2lvbkVycm9yQ2hlY2soJDEubGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUu
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIElERU5USUZJRVIgeworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwg
JDMubGluZSksICQzLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkJC50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8IGluaXRfZGVj
bGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQg
eworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQz
LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5l
LCAqJDMuc3RyaW5nLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnR5cGUu
c2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJp
bmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJB
Q0tFVCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQz
LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+
YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50
IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCQ0LmxpbmUsICQ1LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIFRU
eXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKKyAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXpl
KHNpemUpOworICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgdHlwZSwgJDMubGluZSksICQzLmxp
bmUpOworICAgICAgICB9CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEg
SURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMu
bGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKwor
ICAgICAgICAkJCA9ICQxOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5
cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQx
LnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCAkNy0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JD
aGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlf
b2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAg
ICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJp
bmcsICQxLnR5cGUsICQ3LCBpbnRlcm1Ob2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2Rl
KQorICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ2
LmxpbmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNL
RVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5s
aW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgICQkID0gJDE7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlw
ZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEu
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soJDQubGluZSwgJDUsIHNpemUpKQorICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVj
aygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQkLmxpbmUsICJHTF8zRExfYXJyYXlfb2Jq
ZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBp
ZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUsICokMy5zdHJpbmcs
ICQxLnR5cGUsICQ4LCBpbnRlcm1Ob2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUsICQ3Lmxp
bmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBFUVVBTCBpbml0aWFs
aXplciB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OworICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQzLmxpbmUs
ICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgk
MS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNC5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAg
OworCitzaW5nbGVfZGVjbGFyYXRpb24KKyAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKKyAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoJDEpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAg
fQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiB7CisgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBl
KCQxKSwgJDIubGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkJC50eXBlKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgJCQudHlwZSA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbklu
aXRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5
cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CisgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBl
KCQxKSwgJDIubGluZSksICQyLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQx
KSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFy
aWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMu
bGluZSwgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmll
ZF90eXBlIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7CisgICAgICAgIGludCBz
aXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxp
bmUsICQ0LCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgdHlwZSwgJDIubGluZSksICQy
LmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNo
ZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRleHQt
PmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDMu
bGluZSwgJDQsIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgICAgIFRW
YXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVy
cm9yQ2hlY2soJDMubGluZSwgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGZ1
bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQx
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5
cGUgPSAkMTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYg
KCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAk
MSwgJDQsIGludGVybU5vZGUpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50ZXJt
Tm9kZSkKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICQzLmxpbmUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBJ
TlZBUklBTlQgSURFTlRJRklFUiB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVj
bGFyYXRpb24iLCAkMS5saW5lKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW52YXJpYW50
VmFyeWluZ091dDsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICB9CisKKy8v
CisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy8g
ICAgfCBidWZmZXJfc3BlY2lmaWVyIHsKKy8vICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAw
OworLy8gICAgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2VudW0nLCBvciAndHlw
ZWRlZicuCisKKy8vCisvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFn
ZXMuCisvLworLy8ldHlwZSA8aW50ZXJtPiBidWZmZXJfZGVjbGFyYXRpb24KKy8vJXR5cGUgPGlu
dGVybS50eXBlPiBidWZmZXJfc3BlY2lmaWVyIGlucHV0X29yX291dHB1dCBidWZmZXJfZGVjbGFy
YXRpb25fbGlzdAorLy9idWZmZXJfc3BlY2lmaWVyCisvLyAgICA6IGlucHV0X29yX291dHB1dCBM
RUZUX0JSQUNFIGJ1ZmZlcl9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKy8vICAgIH0K
Ky8vICAgIDsKKy8vCisvL2lucHV0X29yX291dHB1dAorLy8gICAgOiBJTlBVVCB7CisvLyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlucHV0IikpCisvLyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIFVOUEFDS19PTkxZKCJpbnB1dCIs
ICQxLmxpbmUpOworLy8gICAgICAgICQkLnF1YWxpZmllciA9IEV2cUlucHV0OworLy8gICAgfQor
Ly8gICAgfCBPVVRQVVQgeworLy8gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJvdXRwdXQiKSkKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAg
ICAgICAgUEFDS19PTkxZKCJvdXRwdXQiLCAkMS5saW5lKTsKKy8vICAgICAgICAkJC5xdWFsaWZp
ZXIgPSBFdnFPdXRwdXQ7CisvLyAgICB9CisvLyAgICA7CisKKy8vCisvLyBQbGFjZSBob2xkZXIg
Zm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCisvLworLy9idWZmZXJfZGVjbGFyYXRpb25f
bGlzdAorLy8gICAgOiBidWZmZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAgfCBidWZm
ZXJfZGVjbGFyYXRpb25fbGlzdCBidWZmZXJfZGVjbGFyYXRpb24geworLy8gICAgfQorLy8gICAg
OworCisvLworLy8gSW5wdXQvb3V0cHV0IHNlbWFudGljczoKKy8vICAgZmxvYXQgbXVzdCBiZSAx
NiBvciAzMiBiaXRzCisvLyAgIGZsb2F0IGFsaWdubWVudCByZXN0cmljdGlvbnM/CisvLyAgIGNo
ZWNrIGZvciBvbmx5IG9uZSBpbnB1dCBhbmQgb25seSBvbmUgb3V0cHV0CisvLyAgIHN1bSBvZiBi
aXRmaWVsZHMgaGFzIHRvIGJlIG11bHRpcGxlIG9mIDMyCisvLworCisvLworLy8gUGxhY2UgaG9s
ZGVyIGZvciB0aGUgcGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8vYnVmZmVyX2RlY2xhcmF0
aW9uCisvLyAgICA6IHR5cGVfc3BlY2lmaWVyIElERU5USUZJRVIgQ09MT04gY29uc3RhbnRfZXhw
cmVzc2lvbiBTRU1JQ09MT04geworLy8gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCBwYXJzZUNvbnRleHQpKQorLy8gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICAkJC52YXJpYWJsZSA9IG5l
dyBUVmFyaWFibGUoJDIuc3RyaW5nLCAkMSk7CisvLyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgeworLy8gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRlICQkLnZhcmlhYmxlLCB0
aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKKy8vICAgICAgICB9CisvLyAgICB9Cisv
LyAgICA7CisKK2Z1bGx5X3NwZWNpZmllZF90eXBlCisgICAgOiB0eXBlX3NwZWNpZmllciB7Cisg
ICAgICAgICQkID0gJDE7CisKKyAgICAgICAgaWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJy
YXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsKKyAg
ICAgICAgaWYgKCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygk
Mi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCQyLmxpbmUsICQxKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgorICAgICAgICAgICAgKCQy
LnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBF
dnFWYXJ5aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCisgICAgICAg
ICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkID0gJDI7CisgICAg
ICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICB9CisgICAgOworCit0eXBlX3F1
YWxpZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
IEV2cUNvbnN0LCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBBVFRSSUJVVEUgeworICAgICAgICBW
RVJURVhfT05MWSgiYXR0cmlidXRlIiwgJDEubGluZSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICQx
LmxpbmUpOworICAgIH0KKyAgICB8IFZBUllJTkcgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpLCAidmFyeWluZyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0
ZXgpCisgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAkMS5s
aW5lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
VmFyeWluZ0luLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExhbmdWZXJ0ZXgpCisgICAgICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAkMS5saW5lKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWlu
Z0luLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBVTklGT1JNIHsKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAk
MS5saW5lKTsKKyAgICB9CisgICAgOworCit0eXBlX3NwZWNpZmllcgorICAgIDogdHlwZV9zcGVj
aWZpZXJfbm9fcHJlYyB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgcHJlY2lzaW9u
X3F1YWxpZmllciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHsKKyAgICAgICAgJCQgPSAkMjsKKyAg
ICAgICAgJCQucHJlY2lzaW9uID0gJDE7CisgICAgfQorICAgIDsKKworcHJlY2lzaW9uX3F1YWxp
ZmllcgorICAgIDogSElHSF9QUkVDSVNJT04geworICAgICAgICAkJCA9IEVicEhpZ2g7CisgICAg
fQorICAgIHwgTUVESVVNX1BSRUNJU0lPTiB7CisgICAgICAgICQkID0gRWJwTWVkaXVtOworICAg
IH0KKyAgICB8IExPV19QUkVDSVNJT04gIHsKKyAgICAgICAgJCQgPSBFYnBMb3c7CisgICAgfQor
ICAgIDsKKwordHlwZV9zcGVjaWZpZXJfbm9fcHJlYworICAgIDogdHlwZV9zcGVjaWZpZXJfbm9u
YXJyYXkgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IHR5cGVfc3BlY2lmaWVyX25v
bmFycmF5IExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewor
ICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQk
LnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9CisgICAgfQorICAgIDsKKwordHlwZV9z
cGVjaWZpZXJfbm9uYXJyYXkKKyAgICA6IFZPSURfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAk
MS5saW5lKTsKKyAgICB9CisgICAgfCBGTE9BVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAk
MS5saW5lKTsKKyAgICB9CisgICAgfCBJTlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxp
bmUpOworICAgIH0KKyAgICB8IEJPT0xfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5l
KTsKKyAgICB9CisvLyAgICB8IFVOU0lHTkVEIElOVF9UWVBFIHsKKy8vICAgICAgICBQQUNLX1VO
UEFDS19PTkxZKCJ1bnNpZ25lZCIsICQxLmxpbmUpOworLy8gICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworLy8gICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEu
bGluZSk7CisvLyAgICB9CisgICAgfCBWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5l
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IFZFQzMgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7Cisg
ICAgfQorICAgIHwgVkVDNCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBCVkVDMiB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8
IEJWRUMzIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dy
ZWdhdGUoMyk7CisgICAgfQorICAgIHwgQlZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGlu
ZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBJVkVDMiB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Cisg
ICAgfQorICAgIHwgSVZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAg
JCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IElWRUM0IHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVh
bCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgfCBN
QVRSSVgyIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDIiLCAkMS5saW5lKTsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIsIHRydWUp
OworICAgIH0KKyAgICB8IE1BVFJJWDMgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIs
ICQxLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgfQorICAgIHwgTUFUUklYNCB7CisgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJtYXQ0IiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7
CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICB9CisgICAgfCBTQU1QTEVS
MkQgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlcjJEIiwgJDEubGluZSk7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRTYW1wbGVyMkQsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFIHsK
KyAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJlIiwgJDEubGluZSk7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
YW1wbGVyQ3ViZSwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgc3RydWN0X3NwZWNpZmll
ciB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAkMS5saW5lKTsKKyAgICAgICAg
JCQgPSAkMTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgfQorICAg
IHwgVFlQRV9OQU1FIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBpcyBmb3IgdXNlciBk
ZWZpbmVkIHR5cGUgbmFtZXMuICBUaGUgbGV4aWNhbCBwaGFzZSBsb29rZWQgdXAgdGhlCisgICAg
ICAgIC8vIHR5cGUuCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlJiBzdHJ1Y3R1cmUgPSBzdGF0
aWNfY2FzdDxUVmFyaWFibGUqPigkMS5zeW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICB9
CisgICAgOworCitzdHJ1Y3Rfc3BlY2lmaWVyCisgICAgOiBTVFJVQ1QgSURFTlRJRklFUiBMRUZU
X0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0
cnVjdHVyZSA9IG5ldyBUVHlwZSgkNCwgKiQyLnN0cmluZyk7CisgICAgICAgIFRWYXJpYWJsZSog
dXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7
CisgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlw
ZURlZikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVm
aW5pdGlvbiIsICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
U3RydWN0LCBFdnFUZW1wb3JhcnksICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVmID0gc3Ry
dWN0dXJlOworICAgIH0KKyAgICB8IFNUUlVDVCBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0IFJJR0hUX0JSQUNFIHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlw
ZSgkMywgVFN0cmluZygiIikpOworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRl
bXBvcmFyeSwgJDEubGluZSk7CisgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAg
fQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJh
dGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgc3RydWN0X2RlY2xhcmF0aW9u
X2xpc3Qgc3RydWN0X2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCgqJCQpW2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqJDIpW2ldLnR5
cGUtPmdldEZpZWxkTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoKCokMilbaV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToi
LCAic3RydWN0IiwgKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQkLT5wdXNoX2JhY2soKCokMilbaV0pOwor
ICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0aW9uCisgICAgOiB0eXBl
X3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgICQk
ID0gJDI7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+dm9pZEVycm9yQ2hlY2soJDEubGlu
ZSwgKCokMilbMF0udHlwZS0+Z2V0RmllbGROYW1lKCksICQxKSkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3RzIG9mIHR5
cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICgqJCQpW2ld
LnR5cGUtPnNldFR5cGUoJDEudHlwZSwgJDEuc2l6ZSwgJDEubWF0cml4LCAkMS51c2VyRGVmKTsK
KworICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cworICAgICAgICAg
ICAgaWYgKCgqJCQpW2ldLnR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDEubGluZSwgJDEpKQorICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICgkMS5hcnJheSkKKyAgICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRB
cnJheVNpemUoJDEuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQorICAg
ICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5
cGVOYW1lKCkpOworICAgICAgICB9CisgICAgfQorICAgIDsKKworc3RydWN0X2RlY2xhcmF0b3Jf
bGlzdAorICAgIDogc3RydWN0X2RlY2xhcmF0b3IgeworICAgICAgICAkJCA9IE5ld1Bvb2xUVHlw
ZUxpc3QoKTsKKyAgICAgICAgJCQtPnB1c2hfYmFjaygkMSk7CisgICAgfQorICAgIHwgc3RydWN0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBzdHJ1Y3RfZGVjbGFyYXRvciB7CisgICAgICAgICQkLT5w
dXNoX2JhY2soJDMpOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdG9yCisgICAgOiBJ
REVOVElGSUVSIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisKKyAgICAgICAgJCQudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQp
OworICAgICAgICAkJC5saW5lID0gJDEubGluZTsKKyAgICAgICAgJCQudHlwZS0+c2V0RmllbGRO
YW1lKCokMS5zdHJpbmcpOworICAgIH0KKyAgICB8IElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNv
bnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUo
RWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAg
ICAgICQkLnR5cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5nKTsKKworICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMi5saW5l
LCAkMywgc2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgJCQudHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOworICAgIH0KKyAgICA7CisKK2luaXRpYWxp
emVyCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitk
ZWNsYXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uIHsgJCQgPSAkMTsgfQorICAg
IDsKKworc3RhdGVtZW50CisgICAgOiBjb21wb3VuZF9zdGF0ZW1lbnQgIHsgJCQgPSAkMTsgfQor
ICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKKy8vIEdyYW1t
YXIgTm90ZTogIE5vIGxhYmVsZWQgc3RhdGVtZW50czsgJ2dvdG8nIGlzIG5vdCBzdXBwb3J0ZWQu
CisKK3NpbXBsZV9zdGF0ZW1lbnQKKyAgICA6IGRlY2xhcmF0aW9uX3N0YXRlbWVudCB7ICQkID0g
JDE7IH0KKyAgICB8IGV4cHJlc3Npb25fc3RhdGVtZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNl
bGVjdGlvbl9zdGF0ZW1lbnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGl0ZXJhdGlvbl9zdGF0ZW1l
bnQgICB7ICQkID0gJDE7IH0KKyAgICB8IGp1bXBfc3RhdGVtZW50ICAgICAgICB7ICQkID0gJDE7
IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudAorICAgIDogTEVGVF9CUkFDRSBSSUdIVF9C
UkFDRSB7ICQkID0gMDsgfQorICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsgfSBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMyAhPSAwKQorICAgICAgICAg
ICAgJDMtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9
CisgICAgOworCitzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgOiBjb21wb3VuZF9zdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlIHsgJCQgPSAkMTsgfQorICAgIHwgc2ltcGxlX3N0YXRlbWVudCAgICAg
ICAgICAgICAgICB7ICQkID0gJDE7IH0KKyAgICA7CisKK2NvbXBvdW5kX3N0YXRlbWVudF9ub19u
ZXdfc2NvcGUKKyAgICAvLyBTdGF0ZW1lbnQgdGhhdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBzY29w
ZSwgZm9yIHNlbGVjdGlvbl9zdGF0ZW1lbnQsIGl0ZXJhdGlvbl9zdGF0ZW1lbnQKKyAgICA6IExF
RlRfQlJBQ0UgUklHSFRfQlJBQ0UgeworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIHwgTEVG
VF9CUkFDRSBzdGF0ZW1lbnRfbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIGlmICgkMikKKyAg
ICAgICAgICAgICQyLT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisgICAgICAgICQkID0gJDI7
CisgICAgfQorICAgIDsKKworc3RhdGVtZW50X2xpc3QKKyAgICA6IHN0YXRlbWVudCB7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgMCk7
CisgICAgfQorICAgIHwgc3RhdGVtZW50X2xpc3Qgc3RhdGVtZW50IHsKKyAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAg
fQorICAgIDsKKworZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyAgICA6IFNFTUlDT0xPTiAgeyAkJCA9
IDA7IH0KKyAgICB8IGV4cHJlc3Npb24gU0VNSUNPTE9OICB7ICQkID0gc3RhdGljX2Nhc3Q8VElu
dGVybU5vZGUqPigkMSk7IH0KKyAgICA7CisKK3NlbGVjdGlvbl9zdGF0ZW1lbnQKKyAgICA6IElG
IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1l
bnQgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS5saW5lLCAk
MykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCAkMS5saW5lKTsK
KyAgICB9CisgICAgOworCitzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQKKyAgICA6IHN0YXRlbWVu
dCBFTFNFIHN0YXRlbWVudCB7CisgICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5v
ZGUyID0gJDM7CisgICAgfQorICAgIHwgc3RhdGVtZW50IHsKKyAgICAgICAgJCQubm9kZTEgPSAk
MTsKKyAgICAgICAgJCQubm9kZTIgPSAwOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90
ZTogIE5vICdzd2l0Y2gnLiAgU3dpdGNoIHN0YXRlbWVudHMgbm90IHN1cHBvcnRlZC4KKworY29u
ZGl0aW9uCisgICAgLy8gSW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUg
c2luZ2xlIGRlY2xhcmF0aW9ucworICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDE7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCks
ICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9y
Q2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisKKyAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5l
LCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICAgICAgJCQgPSAkNDsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICQkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2l0ZXJhdGlvbl9z
dGF0ZW1lbnQKKyAgICA6IFdISUxFIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9u
IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZExvb3AoMCwgJDYsICQ0LCAwLCB0cnVlLCAkMS5saW5lKTsKKyAgICAgICAgLS1w
YXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRE8geyArK3BhcnNl
Q29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBl
eHByZXNzaW9uIFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKCQ4LmxpbmUsICQ2KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkTG9vcCgwLCAkMywgJDYsIDAsIGZhbHNlLCAkNC5saW5lKTsKKyAgICAgICAgLS1wYXJzZUNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAgIHwgRk9SIExFRlRfUEFSRU4geyBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWw7IH0gZm9yX2luaXRfc3RhdGVtZW50IGZvcl9yZXN0X3N0YXRlbWVudCBSSUdIVF9Q
QVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRMb29wKCQ0LCAkNywgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMSks
IHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUubm9kZTIpLCB0cnVlLCAkMS5saW5l
KTsKKyAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgfQorICAg
IDsKKworZm9yX2luaXRfc3RhdGVtZW50CisgICAgOiBleHByZXNzaW9uX3N0YXRlbWVudCB7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgZGVjbGFyYXRpb25fc3RhdGVtZW50IHsKKyAg
ICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgOworCitjb25kaXRpb25vcHQKKyAgICA6IGNvbmRp
dGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgLyogTWF5IGJlIG51bGwgKi8g
eworICAgICAgICAkJCA9IDA7CisgICAgfQorICAgIDsKKworZm9yX3Jlc3Rfc3RhdGVtZW50Cisg
ICAgOiBjb25kaXRpb25vcHQgU0VNSUNPTE9OIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsKKyAg
ICAgICAgJCQubm9kZTIgPSAwOworICAgIH0KKyAgICB8IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04g
ZXhwcmVzc2lvbiAgeworICAgICAgICAkJC5ub2RlMSA9ICQxOworICAgICAgICAkJC5ub2RlMiA9
ICQzOworICAgIH0KKyAgICA7CisKK2p1bXBfc3RhdGVtZW50CisgICAgOiBDT05USU5VRSBTRU1J
Q09MT04geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDAp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNvbnRpbnVlIHN0
YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOworICAgIH0K
KyAgICB8IEJSRUFLIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BCcmVhaywgJDEubGlu
ZSk7CisgICAgfQorICAgIHwgUkVUVVJOIFNFTUlDT0xPTiB7CisgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwg
Im5vbi12b2lkIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOwor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBSRVRVUk4gZXhwcmVzc2lvbiBTRU1JQ09MT04geworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKKyAg
ICAgICAgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09
IEVidFZvaWQpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZv
aWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgaWYgKCoocGFy
c2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMg
bm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIHwgRElTQ0FSRCBTRU1JQ09M
T04geworICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAkMS5saW5lKTsKKyAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgJDEubGluZSk7
CisgICAgfQorICAgIDsKKworLy8gR3JhbW1hciBOb3RlOiAgTm8gJ2dvdG8nLiAgR290b3MgYXJl
IG5vdCBzdXBwb3J0ZWQuCisKK3RyYW5zbGF0aW9uX3VuaXQKKyAgICA6IGV4dGVybmFsX2RlY2xh
cmF0aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9v
dCA9ICQkOworICAgIH0KKyAgICB8IHRyYW5zbGF0aW9uX3VuaXQgZXh0ZXJuYWxfZGVjbGFyYXRp
b24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoJDEsICQyLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAg
IH0KKyAgICA7CisKK2V4dGVybmFsX2RlY2xhcmF0aW9uCisgICAgOiBmdW5jdGlvbl9kZWZpbml0
aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBkZWNsYXJhdGlvbiB7CisgICAg
ICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworZnVuY3Rpb25fZGVmaW5pdGlvbgorICAgIDog
ZnVuY3Rpb25fcHJvdG90eXBlIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5jdGlvbiA9ICooJDEu
ZnVuY3Rpb24pOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24uZ2V0TWFuZ2xl
ZE5hbWUoKSkpOworICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxk
IGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0
aW9uCisgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCisgICAgICAgIC8vIGFuIGVh
cmxpZXIgb2NjdXJhbmNlLgorICAgICAgICAvLworICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZp
bmVkKCkpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rp
b24gYWxyZWFkeSBoYXMgYSBib2R5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1
bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gUmFpc2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0
aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJzIG9yIHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZv
aWQKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKGZ1bmN0aW9uLmdldE5hbWUoKSA9PSAibWFpbiIp
IHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgPiAwKSB7CisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gY2Fubm90
IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9uLmdldE5hbWUoKS5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgp
ICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICIiLCBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIm1haW4g
ZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIik7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LworICAgICAgICAvLyBOZXcgc3ltYm9sIHRhYmxlIHNjb3BlIGZvciBib2R5IG9mIGZ1bmN0aW9u
IHBsdXMgaXRzIGFyZ3VtZW50cworICAgICAgICAvLworICAgICAgICBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZW1lbWJlciB0aGUg
cmV0dXJuIHR5cGUgZm9yIGxhdGVyIGNoZWNraW5nIGZvciBSRVRVUk4gc3RhdGVtZW50cy4KKyAg
ICAgICAgLy8KKyAgICAgICAgcGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihw
cmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9u
UmV0dXJuc1ZhbHVlID0gZmFsc2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5zZXJ0IHBh
cmFtZXRlcnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLyBJZiB0aGUgcGFyYW1l
dGVyIGhhcyBubyBuYW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQgaXQK
KyAgICAgICAgLy8gKGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8g
dGhlIEhJTCwgc28gbG93ZXIgbGV2ZWwgY29kZQorICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBm
aW5kIHBhcmFtZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBh
cmFtTm9kZXMgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgVFBhcmFt
ZXRlciYgcGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9
IDApIHsKKyAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wg
dGFibGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFRy
YW5zZmVyIG93bmVyc2hpcCBvZiBuYW1lIHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSA9IDA7CisKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBI
SUwKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxp
bmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5s
aW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEu
bGluZSksICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNl
Q29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVP
cFBhcmFtZXRlcnMsICQxLmxpbmUpOworICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJh
bU5vZGVzOworICAgICAgICBwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAg
IH0KKyAgICBjb21wb3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKKyAgICAgICAgLy8/PyBD
aGVjayB0aGF0IGFsbCBwYXRocyByZXR1cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lk
ID8KKyAgICAgICAgLy8gICBNYXkgYmUgYmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBv
biBpbnRlcm1lZGlhdGUgY29kZQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVu
Y3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgcGFyc2VDb250ZXh0LT5m
dW5jdGlvblJldHVybnNWYWx1ZSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
MS5saW5lLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0
aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
JDEuaW50ZXJtQWdncmVnYXRlLCAkMywgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7Cisg
ICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlw
ZSgkMS5mdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUg
cHJhZ21hIGluZm9ybWF0aW9uIGZvciBkZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRv
ciBzcGVjaWZpYworICAgICAgICAvLyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4g
YmUgcXVlcmllZCBmcm9tIHRoZSBwYXJzZSB0cmVlCisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRPcHRpbWl6ZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOwor
ICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250
ZXh0UHJhZ21hLmRlYnVnKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJh
Z21hVGFibGUocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICB9
CisgICAgOworCislJQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9sb2Nh
bGludGVybWVkaWF0ZS5oIgorCisvLworLy8gVHdvIHB1cnBvc2VzOgorLy8gMS4gIFNob3cgYW4g
ZXhhbXBsZSBvZiBob3cgdG8gaXRlcmF0ZSB0cmVlLiAgRnVuY3Rpb25zIGNhbgorLy8gICAgIGFs
c28gZGlyZWN0bHkgY2FsbCBUcmF2ZXJzZSgpIG9uIGNoaWxkcmVuIHRoZW1zZWx2ZXMgdG8KKy8v
ICAgICBoYXZlIGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBwcm9jZXNzIHRoYW4gc2hv
d24gaGVyZS4KKy8vICAgICBTZWUgdGhlIGxhc3QgZnVuY3Rpb24gZm9yIGhvdyB0byBnZXQgc3Rh
cnRlZC4KKy8vIDIuICBQcmludCBvdXQgYSB0ZXh0IGJhc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSB0
cmVlLgorLy8KKworLy8KKy8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJv
bSBub2RlIHRvIG5vZGUgaW4KKy8vIHRoZSB0cmF2ZXJzYWwKKy8vCitjbGFzcyBUT3V0cHV0VHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIFRPdXRwdXRU
cmF2ZXJzZXIoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQorICAgIFRJbmZvU2luayYg
aW5mb1Npbms7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
OworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAg
ICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wg
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29s
IHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9v
bCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJy
YW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworfTsKKworVFN0cmluZyBUVHlwZTo6
Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdAoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOwor
CisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUds
b2JhbCkKKyAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBn
ZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CisgICAgaWYgKGFycmF5KQorICAgICAgICBzdHJl
YW0gPDwgImFycmF5IG9mICI7CisgICAgaWYgKG1hdHJpeCkKKyAgICAgICAgc3RyZWFtIDw8IHNp
emUgPDwgIlgiIDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChzaXplID4g
MSkKKyAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CisK
KyAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyZWFtLnN0cigp
OworfQorCisvLworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJpbnRpbmcsIG5vdCBwYXJ0IG9m
IHRyYXZlcnNpbmcuCisvLworCit2b2lkIE91dHB1dFRyZWVUZXh0KFRJbmZvU2luayYgaW5mb1Np
bmssIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBpbnQgZGVwdGgpCit7CisgICAgaW50IGk7CisK
KyAgICBpbmZvU2luay5kZWJ1Zy5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOworCisgICAgZm9y
IChpID0gMDsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICIgICI7
Cit9CisKKy8vCisvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBhcmUgdGhlIHRyYXZlcnNhbCBmdW5j
dGlvbnMuICBUaGUgbGFzdCBvbmUKKy8vIGlzIHRoZSBvbmUgdGhhdCBzdGFydHMgdGhlIHRyYXZl
cnNhbC4KKy8vCisvLyBSZXR1cm4gdHJ1ZSBmcm9tIGludGVyaW9yIG5vZGVzIHRvIGhhdmUgdGhl
IGV4dGVybmFsIHRyYXZlcnNhbAorLy8gY29udGludWUgb24gdG8gY2hpbGRyZW4uICBJZiB5b3Ug
cHJvY2VzcyBjaGlsZHJlbiB5b3Vyc2VsZiwKKy8vIHJldHVybiBmYWxzZS4KKy8vCisKK3ZvaWQg
VE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAg
ICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworCisgICAgaW5mb1Npbmsu
ZGVidWcgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJvbCgpIDw8ICInICI7CisgICAgaW5mb1Npbmsu
ZGVidWcgPDwgIigiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Cit9CisK
K2Jvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91
dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRP
cCgpKSB7CisgICAgICAgIGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAgICBvdXQuZGVi
dWcgPDwgIm1vdmUgc2Vjb25kIGNoaWxkIHRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICJpbml0aWFsaXplIGZpcnN0IGNoaWxkIHdpdGggc2Vjb25kIGNoaWxkIjsgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWRk
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wU3ViQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInN1YnRyYWN0
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtdWx0aXBseSBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25k
IGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgInZlY3RvciBzY2FsZSBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggc2NhbGUgc2Vjb25kIGNoaWxkIGlu
dG8gZmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IG11bHQgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiZGl2aWRlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0LmRlYnVnIDw8
ICJkaXJlY3QgaW5kZXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6
IG91dC5kZWJ1ZyA8PCAiaW5kaXJlY3QgaW5kZXgiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJ
bmRleERpcmVjdFN0cnVjdDogICBvdXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0
dXJlIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiBvdXQuZGVidWcg
PDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBZGQ6ICAgIG91
dC5kZWJ1ZyA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BTdWI6ICAgIG91dC5kZWJ1ZyA8PCAic3VidHJhY3QiOyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2Ug
bXVsdGlwbHkiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXY6ICAgIG91dC5kZWJ1ZyA8PCAi
ZGl2aWRlIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVhbDog
ICAgICAgICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgRXF1YWwiOyAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJD
b21wYXJlIE5vdCBFcXVhbCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExl
c3NUaGFuOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQuZGVidWcg
PDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTGVzc1RoYW5FcXVhbDogICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBF
cXVhbCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dC5k
ZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwgInZlY3Rvci1zY2FsZSI7
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OiBvdXQu
ZGVidWcgPDwgInZlY3Rvci10aW1lcy1tYXRyaXgiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzVmVjdG9yOiBvdXQuZGVidWcgPDwgIm1hdHJpeC10aW1lcy12ZWN0b3IiOyAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXQuZGVidWcgPDwg
Im1hdHJpeC1zY2FsZSI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzTWF0cml4OiBvdXQuZGVidWcgPDwgIm1hdHJpeC1tdWx0aXBseSI7ICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAgb3V0LmRlYnVnIDw8ICJsb2dpY2FsLW9yIjsg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOiBvdXQuZGVidWcgPDwgImxvZ2lj
YWwteG9yIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogb3V0LmRlYnVnIDw8
ICJsb2dpY2FsLWFuZCI7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcgPDwgIjx1
bmtub3duIG9wPiI7CisgICAgfQorCisgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGlu
Zm9TaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAg
b3V0LmRlYnVnIDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFZlY3RvckxvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgIG91
dC5kZWJ1ZyA8PCAiTmVnYXRlIGNvbmRpdGlvbmFsIjsgICBicmVhazsKKworICAgICAgICBjYXNl
IEVPcFBvc3RJbmNyZW1lbnQ6ICBvdXQuZGVidWcgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9z
dC1EZWNyZW1lbnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6
ICAgb3V0LmRlYnVnIDw8ICJQcmUtSW5jcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFByZURlY3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0LmRlYnVnIDw8
ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9h
dFRvQm9vbDpvdXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRv
IGZsb2F0IjticmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0LmRlYnVn
IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZG
bG9hdFRvSW50OiBvdXQuZGVidWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29s
IHRvIGludCI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICBvdXQu
ZGVidWcgPDwgInJhZGlhbnMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RGVncmVlczogICAgICAgIG91dC5kZWJ1ZyA8PCAiZGVncmVlcyI7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzaW5lIjsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogICAgICAgICAgICBv
dXQuZGVidWcgPDwgImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wVGFuOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAidGFuZ2VudCI7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMg
c2luZSI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAg
ICBvdXQuZGVidWcgPDwgImFyYyBjb3NpbmUiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQXRhbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEV4cDogICAgICAgICAgICBvdXQuZGVidWcgPDwg
ImV4cCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9nOiAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAibG9nIjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJleHAyIjsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICBvdXQuZGVidWcg
PDwgImxvZzIiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDog
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3FydCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAgb3V0LmRlYnVnIDw8ICJpbnZlcnNlIHNxcnQi
OyAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiQWJzb2x1dGUgdmFsdWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BT
aWduOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJTaWduIjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEZsb29yOiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZsb29yIjsg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAiQ2VpbGluZyI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BGcmFjdDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJGcmFjdGlvbiI7ICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAibGVu
Z3RoIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAg
ICAgb3V0LmRlYnVnIDw8ICJub3JtYWxpemUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8JY2FzZSBFT3BEUGR4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkUGR4IjsgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BE
UGR5OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFr
OyAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0LmRlYnVnIDw8
ICJmd2lkdGgiOyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAKKworICAg
ICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICBvdXQuZGVidWcgPDwgImFueSI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dC5kZWJ1
ZyA8PCAiYWxsIjsgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBv
dXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJCYWQgdW5hcnkgb3AiKTsKKyAgICB9CisK
KyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIp
IjsKKworICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAg
IGlmIChub2RlLT5nZXRPcCgpID09IEVPcE51bGwpIHsKKyAgICAgICAgb3V0LmRlYnVnLm1lc3Nh
Z2UoRVByZWZpeEVycm9yLCAibm9kZSBpcyBzdGlsbCBFT3BOdWxsISIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsK
KworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcFNlcXVlbmNl
OiAgICAgIG91dC5kZWJ1ZyA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIEVPcENvbW1hOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tbWFcbiI7IHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24g
RGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDogIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8PCBub2RlLT5n
ZXROYW1lKCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAgIG91dC5kZWJ1
ZyA8PCAiRnVuY3Rpb24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGZsb2F0
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dC5kZWJ1ZyA8PCAi
Q29uc3RydWN0IHZlYzIiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzog
IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VmVjNDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzQiOyAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJv
b2wiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IG91dC5kZWJ1ZyA8
PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0QlZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWM0IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0
IGludCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dC5kZWJ1
ZyA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0SVZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dC5kZWJ1ZyA8PCAiQ29uc3Ry
dWN0IG1hdDIiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzogIG91dC5k
ZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0NDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qgc3RydWN0
dXJlIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRl
YnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRo
YW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBv
dXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0
ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvckVxdWFsOiAg
ICAgIG91dC5kZWJ1ZyA8PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXQuZGVidWcgPDwgIk5vdEVxdWFs
IjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNb2Q6ICAg
ICAgICAgICBvdXQuZGVidWcgPDwgIm1vZCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wUG93OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJwb3ciOyAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2VudCI7
IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJt
aW4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE1heDogICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAibWF4IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDbGFtcDogICAg
ICAgICBvdXQuZGVidWcgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TWl4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtaXgiOyAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3RlcCI7ICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQuZGVidWcgPDwgInNtb290aHN0
ZXAiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQuZGVidWcg
PDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90
OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY3Jvc3MtcHJv
ZHVjdCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogICBv
dXQuZGVidWcgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wUmVmbGVjdDogICAgICAgb3V0LmRlYnVnIDw8ICJyZWZsZWN0IjsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dC5kZWJ1ZyA8PCAi
cmVmcmFjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWw6ICAg
ICAgICAgICBvdXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIGFn
Z3JlZ2F0aW9uIG9wIik7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldE9wKCkgIT0gRU9wU2Vx
dWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJhbWV0ZXJzKQorICAgICAgICBvdXQuZGVi
dWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKworICAgIG91
dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVE91dHB1dFRy
YXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5v
ZGUpCit7CisgICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVU
ZXh0KG91dCwgbm9kZSwgZGVwdGgpOworCisgICAgb3V0LmRlYnVnIDw8ICJUZXN0IGNvbmRpdGlv
biBhbmQgc2VsZWN0IjsKKyAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0
ZVN0cmluZygpIDw8ICIpXG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0
KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgb3V0LmRlYnVnIDw8ICJDb25kaXRpb25cbiI7
CisgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOworCisgICAgT3V0cHV0
VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJs
b2NrKCkpIHsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2VcbiI7CisgICAgICAgIG5v
ZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
b3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2UgaXMgbnVsbFxuIjsKKworICAgIGlmIChub2RlLT5nZXRG
YWxzZUJsb2NrKCkpIHsKKyAgICAgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRl
cHRoKTsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSBjYXNlXG4iOworICAgICAgICBub2Rl
LT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKworICAgIC0tZGVwdGg7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQoreworICAgIFRJbmZvU2lu
ayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg
ICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpW2ldLmdldEJDb25zdCgpKQorICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwg
InRydWUiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJmYWxzZSI7CisKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCAi
Y29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAg
ICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5n
ZXRGQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgZmxvYXQp
XG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Cisg
ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClb
aV0uZ2V0SUNvbnN0KCk7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKGNvbnN0IGlu
dClcbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIG91dC5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJVbmtu
b3duIGNvbnN0YW50Iiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdExvb3Ao
VmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0g
aW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAg
IG91dC5kZWJ1ZyA8PCAiTG9vcCB3aXRoIGNvbmRpdGlvbiAiOworICAgIGlmICghIG5vZGUtPnRl
c3RGaXJzdCgpKQorICAgICAgICBvdXQuZGVidWcgPDwgIm5vdCAiOworICAgIG91dC5kZWJ1ZyA8
PCAidGVzdGVkIGZpcnN0XG4iOworCisgICAgKytkZXB0aDsKKworICAgIE91dHB1dFRyZWVUZXh0
KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkgeworICAg
ICAgICBvdXQuZGVidWcgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOworICAgICAgICBub2RlLT5nZXRU
ZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwg
Ik5vIGxvb3AgY29uZGl0aW9uXG4iOworCisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5v
ZGUsIGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKSB7CisgICAgICAgIG91dC5kZWJ1
ZyA8PCAiTG9vcCBCb2R5XG4iOworICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRo
aXMpOworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgYm9keVxuIjsK
KworICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0
KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBUZXJt
aW5hbCBFeHByZXNzaW9uXG4iOworICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QnJhbmNoKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisKKyAgICBP
dXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0
Rmxvd09wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAgICAgIG91dC5kZWJ1ZyA8PCAiQnJh
bmNoOiBLaWxsIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAg
b3V0LmRlYnVnIDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29udGludWU6ICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBS
ZXR1cm4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJCcmFuY2g6IFVua25vd24gQnJhbmNoIjsgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmdldEV4cHJlc3Npb24oKSkgeworICAgICAgICBvdXQuZGVidWcgPDwgIiB3aXRoIGV4
cHJlc3Npb25cbiI7CisgICAgICAgICsrZGVwdGg7CisgICAgICAgIG5vZGUtPmdldEV4cHJlc3Np
b24oKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIC0tZGVwdGg7CisgICAgfSBlbHNlCisgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLworLy8g
VGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHRvIGNhbGwgZXh0ZXJuYWxseSB0byBzdGFydCB0aGUg
dHJhdmVyc2FsLgorLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRv
IDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKKy8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hp
bGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCisvLwordm9pZCBUSW50ZXJtZWRpYXRlOjpv
dXRwdXRUcmVlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlmIChyb290ID09IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIFRPdXRwdXRUcmF2ZXJzZXIgaXQoaW5mb1NpbmspOworCisgICAg
cm9vdC0+dHJhdmVyc2UoJml0KTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1l
ZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDg2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gRGVm
aW5pdGlvbiBvZiB0aGUgaW4tbWVtb3J5IGhpZ2gtbGV2ZWwgaW50ZXJtZWRpYXRlIHJlcHJlc2Vu
dGF0aW9uCisvLyBvZiBzaGFkZXJzLiAgVGhpcyBpcyBhIHRyZWUgdGhhdCBwYXJzZXIgY3JlYXRl
cy4KKy8vCisvLyBOb2RlcyBpbiB0aGUgdHJlZSBhcmUgZGVmaW5lZCBhcyBhIGhpZXJhcmNoeSBv
ZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSAKKy8vIFRJbnRlcm1Ob2RlLiBFYWNoIGlzIGEgbm9kZSBp
biBhIHRyZWUuICBUaGVyZSBpcyBubyBwcmVzZXQgYnJhbmNoaW5nIGZhY3RvcjsKKy8vIGVhY2gg
bm9kZSBjYW4gaGF2ZSBpdCdzIG93biB0eXBlIG9mIGxpc3Qgb2YgY2hpbGRyZW4uCisvLworCisj
aWZuZGVmIF9fSU5URVJNRURJQVRFX0gKKyNkZWZpbmUgX19JTlRFUk1FRElBVEVfSAorCisjaW5j
bHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVHlwZXMuaCIKKyNp
bmNsdWRlICJjb21waWxlci9Db25zdGFudFVuaW9uLmgiCisKKy8vCisvLyBPcGVyYXRvcnMgdXNl
ZCBieSB0aGUgaGlnaC1sZXZlbCAocGFyc2UgdHJlZSkgcmVwcmVzZW50YXRpb24uCisvLworZW51
bSBUT3BlcmF0b3IgeworICAgIEVPcE51bGwsICAgICAgICAgICAgLy8gaWYgaW4gYSBub2RlLCBz
aG91bGQgb25seSBtZWFuIGEgbm9kZSBpcyBzdGlsbCBiZWluZyBidWlsdAorICAgIEVPcFNlcXVl
bmNlLCAgICAgICAgLy8gZGVub3RlcyBhIGxpc3Qgb2Ygc3RhdGVtZW50cywgb3IgcGFyYW1ldGVy
cywgZXRjLgorICAgIEVPcEZ1bmN0aW9uQ2FsbCwgICAgCisgICAgRU9wRnVuY3Rpb24sICAgICAg
ICAvLyBGb3IgZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgIEVPcFBhcmFtZXRlcnMsICAgICAgLy8g
YW4gYWdncmVnYXRlIGxpc3RpbmcgdGhlIHBhcmFtZXRlcnMgdG8gYSBmdW5jdGlvbgorCisgICAg
RU9wRGVjbGFyYXRpb24sCisgICAgRU9wUHJvdG90eXBlLAorCisgICAgLy8KKyAgICAvLyBVbmFy
eSBvcGVyYXRvcnMKKyAgICAvLworCisgICAgRU9wTmVnYXRpdmUsCisgICAgRU9wTG9naWNhbE5v
dCwKKyAgICBFT3BWZWN0b3JMb2dpY2FsTm90LAorCisgICAgRU9wUG9zdEluY3JlbWVudCwKKyAg
ICBFT3BQb3N0RGVjcmVtZW50LAorICAgIEVPcFByZUluY3JlbWVudCwKKyAgICBFT3BQcmVEZWNy
ZW1lbnQsCisKKyAgICBFT3BDb252SW50VG9Cb29sLAorICAgIEVPcENvbnZGbG9hdFRvQm9vbCwK
KyAgICBFT3BDb252Qm9vbFRvRmxvYXQsCisgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9w
Q29udkZsb2F0VG9JbnQsCisgICAgRU9wQ29udkJvb2xUb0ludCwKKworICAgIC8vCisgICAgLy8g
YmluYXJ5IG9wZXJhdGlvbnMKKyAgICAvLworCisgICAgRU9wQWRkLAorICAgIEVPcFN1YiwKKyAg
ICBFT3BNdWwsCisgICAgRU9wRGl2LAorICAgIEVPcEVxdWFsLAorICAgIEVPcE5vdEVxdWFsLAor
ICAgIEVPcFZlY3RvckVxdWFsLAorICAgIEVPcFZlY3Rvck5vdEVxdWFsLAorICAgIEVPcExlc3NU
aGFuLAorICAgIEVPcEdyZWF0ZXJUaGFuLAorICAgIEVPcExlc3NUaGFuRXF1YWwsCisgICAgRU9w
R3JlYXRlclRoYW5FcXVhbCwKKyAgICBFT3BDb21tYSwKKworICAgIEVPcFZlY3RvclRpbWVzU2Nh
bGFyLAorICAgIEVPcFZlY3RvclRpbWVzTWF0cml4LAorICAgIEVPcE1hdHJpeFRpbWVzVmVjdG9y
LAorICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFyLAorCisgICAgRU9wTG9naWNhbE9yLAorICAgIEVP
cExvZ2ljYWxYb3IsCisgICAgRU9wTG9naWNhbEFuZCwKKworICAgIEVPcEluZGV4RGlyZWN0LAor
ICAgIEVPcEluZGV4SW5kaXJlY3QsCisgICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisKKyAgICBF
T3BWZWN0b3JTd2l6emxlLAorCisgICAgLy8KKyAgICAvLyBCdWlsdC1pbiBmdW5jdGlvbnMgcG90
ZW50aWFsbHkgbWFwcGVkIHRvIG9wZXJhdG9ycworICAgIC8vCisKKyAgICBFT3BSYWRpYW5zLAor
ICAgIEVPcERlZ3JlZXMsCisgICAgRU9wU2luLAorICAgIEVPcENvcywKKyAgICBFT3BUYW4sCisg
ICAgRU9wQXNpbiwKKyAgICBFT3BBY29zLAorICAgIEVPcEF0YW4sCisKKyAgICBFT3BQb3csCisg
ICAgRU9wRXhwLAorICAgIEVPcExvZywKKyAgICBFT3BFeHAyLAorICAgIEVPcExvZzIsCisgICAg
RU9wU3FydCwKKyAgICBFT3BJbnZlcnNlU3FydCwKKworICAgIEVPcEFicywKKyAgICBFT3BTaWdu
LAorICAgIEVPcEZsb29yLAorICAgIEVPcENlaWwsCisgICAgRU9wRnJhY3QsCisgICAgRU9wTW9k
LAorICAgIEVPcE1pbiwKKyAgICBFT3BNYXgsCisgICAgRU9wQ2xhbXAsCisgICAgRU9wTWl4LAor
ICAgIEVPcFN0ZXAsCisgICAgRU9wU21vb3RoU3RlcCwKKworICAgIEVPcExlbmd0aCwKKyAgICBF
T3BEaXN0YW5jZSwKKyAgICBFT3BEb3QsCisgICAgRU9wQ3Jvc3MsCisgICAgRU9wTm9ybWFsaXpl
LAorICAgIEVPcEZhY2VGb3J3YXJkLAorICAgIEVPcFJlZmxlY3QsCisgICAgRU9wUmVmcmFjdCwK
KworICAgIC8vRU9wRFBkeCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgLy9FT3BEUGR5LCAgICAgICAgICAgIC8vIEZy
YWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAvL0VP
cEZ3aWR0aCwgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIGV4dGVuc2lvbgorCisgICAgRU9wTWF0cml4VGltZXNNYXRyaXgsCisKKyAgICBFT3BBbnks
CisgICAgRU9wQWxsLAorCisgICAgLy8KKyAgICAvLyBCcmFuY2gKKyAgICAvLworCisgICAgRU9w
S2lsbCwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5CisgICAgRU9wUmV0dXJuLAorICAgIEVP
cEJyZWFrLAorICAgIEVPcENvbnRpbnVlLAorCisgICAgLy8KKyAgICAvLyBDb25zdHJ1Y3RvcnMK
KyAgICAvLworCisgICAgRU9wQ29uc3RydWN0SW50LAorICAgIEVPcENvbnN0cnVjdEJvb2wsCisg
ICAgRU9wQ29uc3RydWN0RmxvYXQsCisgICAgRU9wQ29uc3RydWN0VmVjMiwKKyAgICBFT3BDb25z
dHJ1Y3RWZWMzLAorICAgIEVPcENvbnN0cnVjdFZlYzQsCisgICAgRU9wQ29uc3RydWN0QlZlYzIs
CisgICAgRU9wQ29uc3RydWN0QlZlYzMsCisgICAgRU9wQ29uc3RydWN0QlZlYzQsCisgICAgRU9w
Q29uc3RydWN0SVZlYzIsCisgICAgRU9wQ29uc3RydWN0SVZlYzMsCisgICAgRU9wQ29uc3RydWN0
SVZlYzQsCisgICAgRU9wQ29uc3RydWN0TWF0MiwKKyAgICBFT3BDb25zdHJ1Y3RNYXQzLAorICAg
IEVPcENvbnN0cnVjdE1hdDQsCisgICAgRU9wQ29uc3RydWN0U3RydWN0LAorCisgICAgLy8KKyAg
ICAvLyBtb3ZlcworICAgIC8vCisKKyAgICBFT3BBc3NpZ24sCisgICAgRU9wSW5pdGlhbGl6ZSwK
KyAgICBFT3BBZGRBc3NpZ24sCisgICAgRU9wU3ViQXNzaWduLAorICAgIEVPcE11bEFzc2lnbiwK
KyAgICBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BWZWN0b3JUaW1lc1NjYWxh
ckFzc2lnbiwKKyAgICBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbiwKKyAgICBFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbiwKKyAgICBFT3BEaXZBc3NpZ24sCit9OworCitjbGFzcyBUSW50ZXJt
VHJhdmVyc2VyOworY2xhc3MgVEludGVybUFnZ3JlZ2F0ZTsKK2NsYXNzIFRJbnRlcm1CaW5hcnk7
CitjbGFzcyBUSW50ZXJtVW5hcnk7CitjbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbjsKK2NsYXNz
IFRJbnRlcm1TZWxlY3Rpb247CitjbGFzcyBUSW50ZXJtVHlwZWQ7CitjbGFzcyBUSW50ZXJtU3lt
Ym9sOworY2xhc3MgVEludGVybUxvb3A7CitjbGFzcyBUSW5mb1Npbms7CisKKy8vCisvLyBCYXNl
IGNsYXNzIGZvciB0aGUgdHJlZSBub2RlcworLy8KK2NsYXNzIFRJbnRlcm1Ob2RlIHsKK3B1Ymxp
YzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisK
KyAgICBUSW50ZXJtTm9kZSgpIDogbGluZSgwKSB7fQorICAgIHZpcnR1YWwgVFNvdXJjZUxvYyBn
ZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5l
KFRTb3VyY2VMb2MgbCkgeyBsaW5lID0gbDsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKikgPSAwOworICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5
cGVkKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdl
dEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dy
ZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVEludGVy
bUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgVElu
dGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJ
bnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgflRJbnRlcm1Ob2RlKCkgeyB9Citwcm90ZWN0ZWQ6CisgICAgVFNvdXJjZUxvYyBs
aW5lOworfTsKKworLy8KKy8vIFRoaXMgaXMganVzdCB0byBoZWxwIHlhY2MuCisvLworc3RydWN0
IFRJbnRlcm1Ob2RlUGFpciB7CisgICAgVEludGVybU5vZGUqIG5vZGUxOworICAgIFRJbnRlcm1O
b2RlKiBub2RlMjsKK307CisKKy8vCisvLyBJbnRlcm1lZGlhdGUgY2xhc3MgZm9yIG5vZGVzIHRo
YXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1O
b2RlIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0
KSAgeyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkg
eyB0eXBlID0gdDsgfQorICAgIHZpcnR1YWwgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7
IHJldHVybiB0eXBlOyB9CisgICAgdmlydHVhbCBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJl
dHVybiAmdHlwZTsgfQorCisgICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZp
ZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQor
ICAgIHZpcnR1YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldFByZWNpc2lvbigpOyB9CisgICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25z
dCB7IHJldHVybiB0eXBlLmdldE5vbWluYWxTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGludCBnZXRT
aXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRJbnN0YW5jZVNpemUoKTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9
CisgICAgdmlydHVhbCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3Rv
cigpOyB9CisgICAgdmlydHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5p
c1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0
IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFF1
YWxpZmllclN0cmluZygpICBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygp
OyB9CisgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUu
Z2V0Q29tcGxldGVTdHJpbmcoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFR5cGUgdHlwZTsKK307
CisKKy8vCisvLyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgorLy8KK2Ns
YXNzIFRJbnRlcm1Mb29wIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKK3B1YmxpYzoKKyAgICBUSW50
ZXJtTG9vcChUSW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGFCb2R5LCBUSW50ZXJtVHlw
ZWQqIGFUZXN0LCBUSW50ZXJtVHlwZWQqIGFUZXJtaW5hbCwgYm9vbCB0ZXN0Rmlyc3QpIDogCisg
ICAgICAgICAgICBpbml0KGluaXQpLAorICAgICAgICAgICAgYm9keShhQm9keSksCisgICAgICAg
ICAgICB0ZXN0KGFUZXN0KSwKKyAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJtaW5hbCksCisgICAg
ICAgICAgICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdl
dEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBUSW50ZXJtTm9kZSAqZ2V0SW5pdCgpIHsgcmV0dXJu
IGluaXQ7IH0KKyAgICBUSW50ZXJtTm9kZSAqZ2V0Qm9keSgpIHsgcmV0dXJuIGJvZHk7IH0KKyAg
ICBUSW50ZXJtVHlwZWQgKmdldFRlc3QoKSB7IHJldHVybiB0ZXN0OyB9CisgICAgVEludGVybVR5
cGVkICpnZXRUZXJtaW5hbCgpIHsgcmV0dXJuIHRlcm1pbmFsOyB9CisgICAgYm9vbCB0ZXN0Rmly
c3QoKSB7IHJldHVybiBmaXJzdDsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1Ob2RlICppbml0
OworICAgIFRJbnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBjb2RlIHRvIGxvb3Agb3ZlcgorICAg
IFRJbnRlcm1UeXBlZCAqdGVzdDsgICAgICAvLyBleGl0IGNvbmRpdGlvbiBhc3NvY2lhdGVkIHdp
dGggbG9vcCwgY291bGQgYmUgMCBmb3IgJ2ZvcicgbG9vcHMKKyAgICBUSW50ZXJtVHlwZWQgKnRl
cm1pbmFsOyAgLy8gZXhpc3RzIGZvciBmb3ItbG9vcHMKKyAgICBib29sIGZpcnN0OyAgICAgICAg
ICAgICAgLy8gdHJ1ZSBmb3Igd2hpbGUgYW5kIGZvciwgbm90IGZvciBkby13aGlsZQorfTsKKwor
Ly8KKy8vIEhhbmRsZSBicmVhaywgY29udGludWUsIHJldHVybiwgYW5kIGtpbGwuCisvLworY2xh
c3MgVEludGVybUJyYW5jaCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVElu
dGVybUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogZSkgOgorICAgICAgICAgICAg
Zmxvd09wKG9wKSwKKyAgICAgICAgICAgIGV4cHJlc3Npb24oZSkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBUT3BlcmF0b3IgZ2V0Rmxvd09w
KCkgeyByZXR1cm4gZmxvd09wOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkg
eyByZXR1cm4gZXhwcmVzc2lvbjsgfQorcHJvdGVjdGVkOgorICAgIFRPcGVyYXRvciBmbG93T3A7
CisgICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAi
cmV0dXJuIGV4cDsiIHN0YXRlbWVudHMKK307CisKKy8vCisvLyBOb2RlcyB0aGF0IGNvcnJlc3Bv
bmQgdG8gc3ltYm9scyBvciBjb25zdGFudHMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLy8KK2NsYXNz
IFRJbnRlcm1TeW1ib2wgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKK3B1YmxpYzoKKyAgICAvLyBp
ZiBzeW1ib2wgaXMgaW5pdGlhbGl6ZWQgYXMgc3ltYm9sKHN5bSksIHRoZSBtZW1vcnkgY29tZXMg
ZnJvbSB0aGUgcG9vbGFsbG9jYXRvciBvZiBzeW0uIElmIHN5bSBjb21lcyBmcm9tCisgICAgLy8g
cGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2Vk
IG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQorICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2Ug
InN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAorICAgIFRJbnRlcm1TeW1ib2woaW50
IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCisgICAgICAgICAgICBU
SW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTt9IAorICAgIHZpcnR1YWwgaW50
IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcm
IGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCog
Z2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorcHJvdGVjdGVkOgorICAgIGludCBp
ZDsKKyAgICBUU3RyaW5nIHN5bWJvbDsKK307CisKK2NsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9u
IDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6CisgICAgVEludGVybUNvbnN0YW50VW5p
b24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJt
VHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9CisgICAgQ29uc3Rh
bnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5
UG9pbnRlcjsgfQorICAgIHZvaWQgc2V0VW5pb25BcnJheVBvaW50ZXIoQ29uc3RhbnRVbmlvbiAq
YykgeyB1bmlvbkFycmF5UG9pbnRlciA9IGM7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSAgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiApOworICAgIHZpcnR1YWwgVEludGVy
bVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7Citwcm90
ZWN0ZWQ6CisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7Cit9OworCisvLwor
Ly8gSW50ZXJtZWRpYXRlIGNsYXNzIGZvciBub2RlIHR5cGVzIHRoYXQgaG9sZCBvcGVyYXRvcnMu
CisvLworY2xhc3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJs
aWM6CisgICAgVE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAgICBib29s
IG1vZGlmaWVzU3RhdGUoKSBjb25zdDsKKyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKSB7IHJldHVybiB0cnVlOyB9Citw
cm90ZWN0ZWQ6CisgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBl
ZChUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CisgICAgVEludGVybU9w
ZXJhdG9yKFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9
ICAgCisgICAgVE9wZXJhdG9yIG9wOworfTsKKworLy8KKy8vIE5vZGVzIGZvciBhbGwgdGhlIGJh
c2ljIGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KKy8vCitjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVi
bGljIFRJbnRlcm1PcGVyYXRvciB7CitwdWJsaWM6CisgICAgVEludGVybUJpbmFyeShUT3BlcmF0
b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Iobykge30KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRlcm1UeXBl
ZCogbikgeyBsZWZ0ID0gbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlw
ZWQqIG4pIHsgcmlnaHQgPSBuOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldExlZnQo
KSBjb25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldFJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gcmlnaHQ7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkq
IGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJv
bW90ZShUSW5mb1NpbmsmKTsKK3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7Cisg
ICAgVEludGVybVR5cGVkKiByaWdodDsKK307CisKKy8vCisvLyBOb2RlcyBmb3IgdW5hcnkgbWF0
aCBvcGVyYXRvcnMuCisvLworY2xhc3MgVEludGVybVVuYXJ5IDogcHVibGljIFRJbnRlcm1PcGVy
YXRvciB7CitwdWJsaWM6CisgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvLCBUVHlwZSYgdCkg
OiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCkge30KKyAgICBUSW50ZXJtVW5hcnko
VE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBvcGVyYW5kKDApIHt9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmFuZChUSW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KKyAgICB2aXJ0dWFs
IFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJhbmQ7IH0KKyAgICB2aXJ0
dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgVEludGVy
bVR5cGVkKiBvcGVyYW5kOworfTsKKwordHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1Ob2RlKj4gVElu
dGVybVNlcXVlbmNlOwordHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxpc3Q7CisvLwor
Ly8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0cmFyeSBzaXplZCBzZXQgb2YgY2hpbGRy
ZW4uCisvLworY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3Ig
eworcHVibGljOgorICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BO
dWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSB7IH0KKyAgICBUSW50ZXJt
QWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUo
MCkgeyB9CisgICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQor
ICAgIHZpcnR1YWwgVEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdG9yKFRPcGVyYXRvciBvKSB7IG9wID0g
bzsgfQorICAgIHZpcnR1YWwgVEludGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJu
IHNlcXVlbmNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikg
eyBuYW1lID0gbjsgfQorICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG5hbWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQg
PSB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2Vy
RGVmaW5lZDsgfQorICAgIHZpcnR1YWwgVFF1YWxpZmllckxpc3QmIGdldFF1YWxpZmllcigpIHsg
cmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGlt
aXplID0gbzsgfQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQorICAg
IGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQorICAgIGJvb2wgZ2V0RGVi
dWcoKSB7IHJldHVybiBkZWJ1ZzsgfQorICAgIHZvaWQgYWRkVG9QcmFnbWFUYWJsZShjb25zdCBU
UHJhZ21hVGFibGUmIHBUYWJsZSk7CisgICAgY29uc3QgVFByYWdtYVRhYmxlJiBnZXRQcmFnbWFU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorcHJvdGVjdGVkOgorICAgIFRJ
bnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5
IGNvbnN0cnVjdG9yCisgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRl
cm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIFRJbnRl
cm1TZXF1ZW5jZSBzZXF1ZW5jZTsKKyAgICBUUXVhbGlmaWVyTGlzdCBxdWFsaWZpZXI7CisgICAg
VFN0cmluZyBuYW1lOworICAgIGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVm
aW5lZCBmdW5jdGlvbiBuYW1lcworICAgIGJvb2wgb3B0aW1pemU7CisgICAgYm9vbCBkZWJ1ZzsK
KyAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOworfTsKKworLy8KKy8vIEZvciBpZiB0ZXN0
cy4gIFNpbXBsaWZpZWQgc2luY2UgdGhlcmUgaXMgbm8gc3dpdGNoIHN0YXRlbWVudC4KKy8vCitj
bGFzcyBUSW50ZXJtU2VsZWN0aW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CitwdWJsaWM6Cisg
ICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVl
QiwgVEludGVybU5vZGUqIGZhbHNlQikgOgorICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVl
QiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5
cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0
IFRUeXBlJiB0eXBlKSA6CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlv
bihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICBib29sIHVzZXNUZXJu
YXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkOyB9
CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4g
Y29uZGl0aW9uOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0VHJ1ZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0RmFs
c2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICB2aXJ0dWFsIFRJbnRl
cm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KK3Byb3Rl
Y3RlZDoKKyAgICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKKyAgICBUSW50ZXJtTm9kZSogdHJ1
ZUJsb2NrOworICAgIFRJbnRlcm1Ob2RlKiBmYWxzZUJsb2NrOworfTsKKworZW51bSBWaXNpdAor
eworICAgIFByZVZpc2l0LAorICAgIEluVmlzaXQsCisgICAgUG9zdFZpc2l0Cit9OworCisvLwor
Ly8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUuICBVc2VyIHNob3VsZCBkZXJpdmUgZnJvbSB0aGlz
LCAKKy8vIHB1dCB0aGVpciB0cmF2ZXJzYWwgc3BlY2lmaWMgZGF0YSBpbiBpdCwgYW5kIHRoZW4g
cGFzcworLy8gaXQgdG8gYSBUcmF2ZXJzZSBtZXRob2QuCisvLworLy8gV2hlbiB1c2luZyB0aGlz
LCBqdXN0IGZpbGwgaW4gdGhlIG1ldGhvZHMgZm9yIG5vZGVzIHlvdSB3YW50IHZpc2l0ZWQuCisv
LyBSZXR1cm4gZmFsc2UgZnJvbSBhIHByZS12aXNpdCB0byBza2lwIHZpc2l0aW5nIHRoYXQgbm9k
ZSdzIHN1YnRyZWUuCisvLworY2xhc3MgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKworICAgIFRJ
bnRlcm1UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdCA9IHRydWUsIGJvb2wgaW5WaXNpdCA9IGZhbHNl
LCBib29sIHBvc3RWaXNpdCA9IGZhbHNlLCBib29sIHJpZ2h0VG9MZWZ0ID0gZmFsc2UpIDogCisg
ICAgICAgICAgICBwcmVWaXNpdChwcmVWaXNpdCksCisgICAgICAgICAgICBpblZpc2l0KGluVmlz
aXQpLAorICAgICAgICAgICAgcG9zdFZpc2l0KHBvc3RWaXNpdCksCisgICAgICAgICAgICByaWdo
dFRvTGVmdChyaWdodFRvTGVmdCksCisgICAgICAgICAgICBkZXB0aCgwKSB7fQorCisgICAgdmly
dHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQorICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHtyZXR1cm4g
dHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1V
bmFyeSopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7cmV0
dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Mb29wKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7cmV0dXJuIHRydWU7fQorCisgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KKyAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQorCisgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKKyAgICBjb25zdCBib29sIGluVmlzaXQ7
CisgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CisgICAgY29uc3QgYm9vbCByaWdodFRvTGVmdDsK
KworcHJvdGVjdGVkOgorICAgIGludCBkZXB0aDsKK307CisKKyNlbmRpZiAvLyBfX0lOVEVSTUVE
SUFURV9ICkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9MT0NB
TF9JTlRFUk1FRElBVEVfSU5DTFVERURfCisjZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5D
TFVERURfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgor
CitzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CisgICAgaW50IG9mZnNldHNbNF07CisgICAgaW50IG51
bTsKK307CisKKy8vCisvLyBTZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyB0byBoZWxwIHBhcnNlIGFu
ZCBidWlsZCB0aGUgdHJlZS4KKy8vCitjbGFzcyBUSW5mb1Npbms7CitjbGFzcyBUSW50ZXJtZWRp
YXRlIHsKK3B1YmxpYzogICAgCisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQ
b29sQWxsb2NhdG9yKQorCisgICAgVEludGVybWVkaWF0ZShUSW5mb1NpbmsmIGkpIDogaW5mb1Np
bmsoaSkgeyB9CisgICAgVEludGVybVN5bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0
cmluZyYsIGNvbnN0IFRUeXBlJiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBhZGRD
b252ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxl
ZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MsIFRTeW1ib2xUYWJsZSYpOworICAg
IFRJbnRlcm1UeXBlZCogYWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0
LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFk
ZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGlu
ZGV4LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgVFNvdXJjZUxvYywgVFN5bWJvbFRhYmxlJik7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVElu
dGVybU5vZGUqIHJpZ2h0LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtl
QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtQWdn
cmVnYXRlKiBzZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgVFNv
dXJjZUxvYyk7CisgICAgVEludGVybU5vZGUqICBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtTm9kZVBhaXIgY29kZSwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVk
KiBhZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9j
aywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlw
ZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNv
dXJjZUxvYyk7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29u
c3RhbnRVbmlvbiosIGNvbnN0IFRUeXBlJiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVk
KiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IDsKKyAgICBib29sIHBhcnNlQ29uc3RUcmVlKFRTb3VyY2VMb2MsIFRJbnRlcm1Ob2RlKiwgQ29u
c3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xl
Q29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAorICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29w
KFRJbnRlcm1Ob2RlKiwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQq
LCBib29sIHRlc3RGaXJzdCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJh
bmNoKFRPcGVyYXRvciwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNo
KFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVk
KiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBUU291cmNlTG9jKTsKKyAgICBib29sIHBvc3RQ
cm9jZXNzKFRJbnRlcm1Ob2RlKiwgRVNoTGFuZ3VhZ2UpOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1O
b2RlKik7CisgICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgVEluZm9TaW5rJiBpbmZvU2luazsKKworcHJpdmF0ZToKKyAgICB2b2lkIG9wZXJh
dG9yPShUSW50ZXJtZWRpYXRlJik7IC8vIHByZXZlbnQgYXNzaWdubWVudHMKK307CisKKyNlbmRp
ZiAvLyBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1
ZGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBf
X09TSU5DTFVERV9ICisjZGVmaW5lIF9fT1NJTkNMVURFX0gKKworLy8KKy8vIFRoaXMgZmlsZSBj
b250YWlucyBjb250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lmaWMgZGF0YXR5cGVzIGFuZAorLy8g
ZGVjbGFyZXMgYW55IHdpbmRvd3Mgc3BlY2lmaWMgZnVuY3Rpb25zLgorLy8KKworI2lmIGRlZmlu
ZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkKKyNkZWZpbmUgQU5HTEVfT1NfV0lOCisjZWxp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pIHx8IFwKKyAgICAgIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRl
ZmluZWQoX19zdW4pCisjZGVmaW5lIEFOR0xFX09TX1BPU0lYCisjZWxzZQorI2Vycm9yIFVuc3Vw
cG9ydGVkIHBsYXRmb3JtLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNk
ZWZpbmUgU1RSSUNUCisjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCisjaW5jbHVkZSA8d2luZG93cy5o
PgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cisj
aW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAgLy8gQU5H
TEVfT1NfV0lOCisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorCisvLworLy8gVGhyZWFk
IExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8KKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikK
K3R5cGVkZWYgRFdPUkQgT1NfVExTSW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lOREVY
IChUTFNfT1VUX09GX0lOREVYRVMpCisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQordHlw
ZWRlZiB1bnNpZ25lZCBpbnQgT1NfVExTSW5kZXg7CisjZGVmaW5lIE9TX0lOVkFMSURfVExTX0lO
REVYIDB4RkZGRkZGRkYKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCisKK09TX1RMU0luZGV4IE9T
X0FsbG9jVExTSW5kZXgoKTsKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4
LCB2b2lkICpscHZWYWx1ZSk7Citib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5k
ZXgpOworCitpbmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQor
eworICAgIGFzc2VydChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOworI2lmIGRlZmlu
ZWQoQU5HTEVfT1NfV0lOKQorICAgIHJldHVybiBUbHNHZXRWYWx1ZShuSW5kZXgpOworI2VsaWYg
ZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhu
SW5kZXgpOworI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KK30KKworI2VuZGlmIC8vIF9fT1NJTkNM
VURFX0gKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3Bvc2l4LmNwcAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIHBvc2l4IHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKyNpbmNsdWRlICJjb21w
aWxlci9vc2luY2x1ZGUuaCIKKworI2lmICFkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQorI2Vycm9y
IFRyeWluZyB0byBidWlsZCBhIHBvc2l4IHNwZWNpZmljIGZpbGUgaW4gYSBub24tcG9zaXggYnVp
bGQuCisjZW5kaWYKKworLy8KKy8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8v
CitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKK3sKKyAgICBwdGhyZWFkX2tleV90IHBQ
b29sSW5kZXg7CisKKyAgICAvLworICAgIC8vIENyZWF0ZSBnbG9iYWwgcG9vbCBrZXkuCisgICAg
Ly8KKyAgICBpZiAoKHB0aHJlYWRfa2V5X2NyZWF0ZSgmcFBvb2xJbmRleCwgTlVMTCkpICE9IDAp
IHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFs
bG9jYXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBwUG9vbEluZGV4OworICAgIH0KK30KKwor
Citib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUp
Cit7CisgICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBh
c3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKG5J
bmRleCwgbHB2VmFsdWUpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0lu
ZGV4IG5JbmRleCkKK3sKKyAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7
CisgICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRl
eCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZWxl
dGUgdGhlIGdsb2JhbCBwb29sIGtleS4KKyAgICAvLworICAgIGlmIChwdGhyZWFkX2tleV9kZWxl
dGUobkluZGV4KSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBmYWxzZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9vc2luY2x1ZGUuaCIKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMg
dGhlIHdpbmRvdydzIHNwZWNpZmljIGZ1bmN0aW9ucworLy8KKworI2lmICFkZWZpbmVkKEFOR0xF
X09TX1dJTikKKyNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSB3aW5kb3dzIHNwZWNpZmljIGZpbGUg
aW4gYSBub24gd2luZG93cyBidWlsZC4KKyNlbmRpZgorCisKKy8vCisvLyBUaHJlYWQgTG9jYWwg
U3RvcmFnZSBPcGVyYXRpb25zCisvLworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7
CisJRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5kZXggPT0gVExTX09VVF9P
Rl9JTkRFWEVTKSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0
byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1cm4gT1NfSU5WQUxJRF9U
TFNfSU5ERVg7CisJfQorCisJcmV0dXJuIGR3SW5kZXg7Cit9CisKKworYm9vbCBPU19TZXRUTFNW
YWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKQoreworCWlmIChuSW5kZXgg
PT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVl
KCk6IEludmFsaWQgVExTIEluZGV4Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxz
U2V0VmFsdWUobkluZGV4LCBscHZWYWx1ZSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0
dXJuIGZhbHNlOworfQorCisKK2Jvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQorCisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQor
CQlyZXR1cm4gZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIzMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBjYXJyeSBhbG9u
ZyBkYXRhIGZyb20gbm9kZSB0byBub2RlIGluIAorLy8gdGhlIHRyYXZlcnNhbAorLy8KK2NsYXNz
IFRDb25zdFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAg
ICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0
UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xU
YWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0KSwK
KyAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFudFBh
cmFtKHNpbmdsZUNvbnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3ltVGFi
bGUpLCBlcnJvcihmYWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQorCXsKKwkJ
aW5kZXggPSAwOworCX0KKworCWJvb2wgZXJyb3I7CisKK3Byb3RlY3RlZDoKKwl2b2lkIHZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKwl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopOworCWJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqKTsKKwlib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwor
CWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKwli
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisJYm9v
bCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisJYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAgaW50IGluZGV4OworICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CisgICAgVFR5cGUgdHlwZTsKKyAgICBUT3BlcmF0b3Ig
Y29uc3RydWN0b3JUeXBlOworICAgIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbTsKKyAgICBUSW5m
b1NpbmsmIGluZm9TaW5rOworICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7CisgICAgaW50
IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVjdG9yICggNCBmb3IgdmVjNCkKKyAgICBib29s
IGlzTWF0cml4OworICAgIGludCBtYXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJp
eCAobm9taW5hbCBzaXplIGFuZCBub3QgdGhlIGluc3RhbmNlIHNpemUpCit9OworCisvLworLy8g
VGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJlIHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxh
c3Qgb25lCisvLyBpcyB0aGUgb25lIHRoYXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8g
UmV0dXJuIHRydWUgZnJvbSBpbnRlcmlvciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2
ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRvIGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRy
ZW4geW91cnNlbGYsCisvLyByZXR1cm4gZmFsc2UuCisvLworCit2b2lkIFRDb25zdFRyYXZlcnNl
cjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJTeW1ib2wgTm9kZSBmb3VuZCBpbiBjb25z
dGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuOworCit9CisK
K2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSogbm9kZSkKK3sKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKTsKKyAgICAKKyAgICBpZiAocXVhbGlmaWVyICE9IEV2cUNvbnN0KSB7
CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAgICBidWYuYXBwZW5kKCInY29uc3RydWN0b3In
IDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBl
LmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3Ig
PSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7ICAKKyAgICB9CisKKyAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJpbmFyeSBOb2RlIGZvdW5kIGluIGNv
bnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAgVFN0cmluZyBidWY7CisgICAgYnVmLmFwcGVu
ZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAgYnVm
LmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVy
cm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7ICAKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJz
ZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQor
eworICAgIGlmICghbm9kZS0+aXNDb25zdHJ1Y3RvcigpICYmIG5vZGUtPmdldE9wKCkgIT0gRU9w
Q29tbWEpIHsKKyAgICAgICAgVFN0cmluZyBidWY7CisgICAgICAgIGJ1Zi5hcHBlbmQoIidjb25z
dHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvICIpOworICAgICAgICBidWYuYXBw
ZW5kKHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4RXJyb3IsIGJ1Zi5jX3N0cigpLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsgIAorICAgIH0KKworICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAwKSB7CisgICAgICAgIGVycm9yID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgZmxhZyA9IG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEgJiYgbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAoZmxhZykgCisgICAgewor
ICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gdHJ1ZTsgCisgICAgICAgIGNvbnN0cnVjdG9y
VHlwZSA9IG5vZGUtPmdldE9wKCk7CisgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0
T2JqZWN0U2l6ZSgpOworCisgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkg
eworICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOworICAgICAgICAgICAgbWF0cml4U2l6ZSA9
IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICB9CisgICAgfSAgICAg
ICAKKworICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gbm9kZS0+Z2V0U2Vx
dWVuY2UoKS5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAh
PSBub2RlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBwKyspIHsKKworICAgICAgICBpZiAobm9kZS0+
Z2V0T3AoKSA9PSBFT3BDb21tYSkKKyAgICAgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgIAor
CisgICAgICAgICgqcCktPnRyYXZlcnNlKHRoaXMpOworICAgIH0gICAKKyAgICBpZiAoZmxhZykg
CisgICAgeworICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2U7ICAgCisgICAgICAg
IGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBp
c01hdHJpeCA9IGZhbHNlOworICAgICAgICBtYXRyaXhTaXplID0gMDsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRTZWxlY3Rpb24oVmlz
aXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiU2VsZWN0aW9uIE5vZGUgZm91bmQgaW4gY29u
c3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0
YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCit7CisgICAgQ29uc3RhbnRVbmlv
biogbGVmdFVuaW9uQXJyYXkgPSB1bmlvbkFycmF5OworICAgIGludCBpbnN0YW5jZVNpemUgPSB0
eXBlLmdldE9iamVjdFNpemUoKTsKKworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghc2luZ2xlQ29uc3RhbnRQYXJhbSkgeworICAgICAg
ICBpbnQgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CisgICAgCisgICAg
ICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGluZGV4ID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07
CisKKyAgICAgICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGludCB0b3RhbFNpemUgPSBpbmRleCArIHNpemU7CisgICAgICAgIENvbnN0YW50VW5pb24g
KnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAg
IGlmICghaXNNYXRyaXgpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291
bnRdOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKKyAg
ICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0b3JzCisgICAgICAgICAgICBpbnQgY291bnQgPSAw
OworICAgICAgICAgICAgaW50IGVsZW1lbnQgPSBpbmRleDsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkg
Pj0gaW5zdGFuY2VTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBlbGVtZW50KSAlIChtYXRyaXhTaXpl
ICsgMSkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmln
aHRVbmlvbkFycmF5W2NvdW50XTsKKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisKKyAgICAgICAgICAg
ICAgICAoaW5kZXgpKys7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdl
dE9iamVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitib29sIFRDb25z
dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sK
KyAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJMb29wIE5v
ZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOworICAg
IGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVENvbnN0VHJhdmVy
c2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCcmFuY2ggTm9k
ZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7CisgICAg
ZXJyb3IgPSB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVybmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4K
Ky8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNhbiBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAg
cHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0eXBlIG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwg
c3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8KK2Jvb2wgVEludGVybWVkaWF0ZTo6cGFyc2VDb25zdFRy
ZWUoVFNvdXJjZUxvYyBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5p
b25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQoreworICAgIGlmIChyb290
ID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRDb25zdFRyYXZlcnNlciBpdCh1
bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5r
LCBzeW1ib2xUYWJsZSwgdCk7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworICAgIGlmIChp
dC5lcnJvcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
ZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL3VuaXN0ZC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL3VuaXN0ZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisvLyBUaGlzIGlz
IGEgTlVMTCBmaWxlIGFuZCBpcyBtZWFudCB0byBiZSBlbXB0eQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NDAgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAw
MiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1
cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdy
ZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlv
biwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJl
Citjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBh
Z3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwg
bm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlz
IG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVz
ZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2Fy
ZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5
Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29m
dHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0
aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxs
IHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRo
ZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0Nv
cnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBp
biB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGlt
cGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Cits
aW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3Vy
IGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEg
U29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhl
cmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4g
IkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRB
VElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVO
VCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IK
K0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lU
SCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUg
Rk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJP
RklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFS
SVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FU
SU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIg
Q0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYK
K05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworCisvLworLy8gYXRvbS5jCisvLworCisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIgorCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgcmVhbGxvYworI3VuZGVm
IGZyZWUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBpbnQgdmFsOworICAg
IGNvbnN0IGNoYXIgKnN0cjsKK30gdG9rZW5zW10gPSB7CisgICAgeyBDUFBfQU5EX09QLCAgICAg
ICAgICImJiIgfSwKKyAgICB7IENQUF9BTkRfQVNTSUdOLCAgICAgIiY9IiB9LAorICAgIHsgQ1BQ
X1NVQl9BU1NJR04sICAgICAiLT0iIH0sCisgICAgeyBDUFBfTU9EX0FTU0lHTiwgICAgICIlPSIg
fSwKKyAgICB7IENQUF9BRERfQVNTSUdOLCAgICAgIis9IiB9LAorICAgIHsgQ1BQX0RJVl9BU1NJ
R04sICAgICAiLz0iIH0sCisgICAgeyBDUFBfTVVMX0FTU0lHTiwgICAgICIqPSIgfSwKKyAgICB7
IENQUF9SSUdIVF9CUkFDS0VULCAgIjo+IiB9LAorICAgIHsgQ1BQX0VRX09QLCAgICAgICAgICAi
PT0iIH0sCisgICAgeyBDUFBfWE9SX09QLCAgICAgICAgICJeXiIgfSwgCisgICAgeyBDUFBfWE9S
X0FTU0lHTiwgICAgICJePSIgfSwgCisgICAgeyBDUFBfRkxPQVRDT05TVEFOVCwgICI8ZmxvYXQt
Y29uc3Q+IiB9LAorICAgIHsgQ1BQX0dFX09QLCAgICAgICAgICAiPj0iIH0sCisgICAgeyBDUFBf
UklHSFRfT1AsICAgICAgICI+PiIgfSwKKyAgICB7IENQUF9SSUdIVF9BU1NJR04sICAgIj4+PSIg
fSwgCisgICAgeyBDUFBfSURFTlRJRklFUiwgICAgICI8aWRlbnQ+IiB9LAorICAgIHsgQ1BQX0lO
VENPTlNUQU5ULCAgICAiPGludC1jb25zdD4iIH0sCisgICAgeyBDUFBfTEVfT1AsICAgICAgICAg
ICI8PSIgfSwKKyAgICB7IENQUF9MRUZUX09QLCAgICAgICAgIjw8IiB9LAorICAgIHsgQ1BQX0xF
RlRfQVNTSUdOLCAgICAiPDw9IiB9LAorICAgIHsgQ1BQX0xFRlRfQlJBQ0tFVCwgICAiPDoiIH0s
CisgICAgeyBDUFBfTEVGVF9CUkFDRSwgICAgICI8JSIgfSwgCisgICAgeyBDUFBfREVDX09QLCAg
ICAgICAgICItLSIgfSwKKyAgICB7IENQUF9SSUdIVF9CUkFDRSwgICAgIiU+IiB9LCAKKyAgICB7
IENQUF9ORV9PUCwgICAgICAgICAgIiE9IiB9LAorICAgIHsgQ1BQX09SX09QLCAgICAgICAgICAi
fHwiIH0sCisgICAgeyBDUFBfT1JfQVNTSUdOLCAgICAgICJ8PSIgfSwgCisgICAgeyBDUFBfSU5D
X09QLCAgICAgICAgICIrKyIgfSwKKyAgICB7IENQUF9TVFJDT05TVEFOVCwgICAgIjxzdHJpbmct
Y29uc3Q+IiB9LAorICAgIHsgQ1BQX1RZUEVJREVOVElGSUVSLCAiPHR5cGUtaWRlbnQ+IiB9LAor
fTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisjZGVmaW5lIElOSVRfU1RSSU5HX1RBQkxFX1NJWkUgMTYzODQKKwordHlw
ZWRlZiBzdHJ1Y3QgU3RyaW5nVGFibGVfUmVjIHsKKyAgICBjaGFyICpzdHJpbmdzOworICAgIGlu
dCBuZXh0RnJlZTsKKyAgICBpbnQgc2l6ZTsKK30gU3RyaW5nVGFibGU7CisKKy8qCisgKiBJbml0
U3RyaW5nVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKi8KKwor
c3RhdGljIGludCBJbml0U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKK3sKKyAgICBz
dGFibGUtPnN0cmluZ3MgPSAoY2hhciAqKSBtYWxsb2MoSU5JVF9TVFJJTkdfVEFCTEVfU0laRSk7
CisgICAgaWYgKCFzdGFibGUtPnN0cmluZ3MpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIFpl
cm8tdGggb2Zmc2V0IG1lYW5zICJlbXB0eSIgc28gZG9uJ3QgdXNlIGl0LgorICAgIHN0YWJsZS0+
bmV4dEZyZWUgPSAxOworICAgIHN0YWJsZS0+c2l6ZSA9IElOSVRfU1RSSU5HX1RBQkxFX1NJWkU7
CisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRTdHJpbmdUYWJsZQorCisvKgorICogRnJlZVN0cmlu
Z1RhYmxlKCkgLSBGcmVlIHRoZSBzdHJpbmcgdGFibGUuCisgKgorICovCisKK3N0YXRpYyB2b2lk
IEZyZWVTdHJpbmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQoreworICAgIGlmIChzdGFibGUt
PnN0cmluZ3MpCisgICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKKyAgICBzdGFibGUtPnN0
cmluZ3MgPSBOVUxMOworICAgIHN0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIHN0YWJsZS0+c2l6
ZSA9IDA7Cit9IC8vIEZyZWVTdHJpbmdUYWJsZQorCisvKgorICogSGFzaFN0cmluZygpIC0gSGFz
aCBhIHN0cmluZyB3aXRoIHRoZSBiYXNlIGhhc2ggZnVuY3Rpb24uCisgKgorICovCisKK3N0YXRp
YyBpbnQgSGFzaFN0cmluZyhjb25zdCBjaGFyICpzKQoreworICAgIGludCBodmFsID0gMDsKKwor
ICAgIHdoaWxlICgqcykgeworICAgICAgICBodmFsID0gKGh2YWwqMTM1MDcgKyAqcyoxOTcpIF4g
KGh2YWwgPj4gMik7CisgICAgICAgIHMrKzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWwgJiAweDdm
ZmZmZmZmOworfSAvLyBIYXNoU3RyaW5nCisKKy8qCisgKiBIYXNoU3RyaW5nMigpIC0gSGFzaCBh
IHN0cmluZyB3aXRoIHRoZSBpbmNyaW1lbnRpbmcgaGFzaCBmdW5jdGlvbi4KKyAqCisgKi8KKwor
c3RhdGljIGludCBIYXNoU3RyaW5nMihjb25zdCBjaGFyICpzKQoreworICAgIGludCBodmFsID0g
MDsKKworICAgIHdoaWxlICgqcykgeworICAgICAgICBodmFsID0gKGh2YWwqNzI5ICsgKnMqMzcp
IF4gKGh2YWwgPj4gMSk7CisgICAgICAgIHMrKzsKKyAgICB9CisgICAgcmV0dXJuIGh2YWw7Cit9
IC8vIEhhc2hTdHJpbmcyCisKKy8qCisgKiBBZGRTdHJpbmcoKSAtIEFkZCBhIHN0cmluZyB0byBh
IHN0cmluZyB0YWJsZS4gIFJldHVybiBpdCdzIG9mZnNldC4KKyAqCisgKi8KKworc3RhdGljIGlu
dCBBZGRTdHJpbmcoU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBp
bnQgbGVuLCBsb2M7CisgICAgY2hhciAqc3RyOworCisgICAgbGVuID0gKGludCkgc3RybGVuKHMp
OworICAgIGlmIChzdGFibGUtPm5leHRGcmVlICsgbGVuICsgMSA+PSBzdGFibGUtPnNpemUpIHsK
KyAgICAgICAgYXNzZXJ0KHN0YWJsZS0+c2l6ZSA8IDEwMDAwMDApOworICAgICAgICBzdHIgPSAo
Y2hhciAqKSBtYWxsb2Moc3RhYmxlLT5zaXplKjIpOworICAgICAgICBtZW1jcHkoc3RyLCBzdGFi
bGUtPnN0cmluZ3MsIHN0YWJsZS0+c2l6ZSk7CisgICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdz
KTsKKyAgICAgICAgc3RhYmxlLT5zdHJpbmdzID0gc3RyOworICAgIH0KKyAgICBsb2MgPSBzdGFi
bGUtPm5leHRGcmVlOworICAgIHN0cmNweSgmc3RhYmxlLT5zdHJpbmdzW2xvY10sIHMpOworICAg
IHN0YWJsZS0+bmV4dEZyZWUgKz0gbGVuICsgMTsKKyAgICByZXR1cm4gbG9jOworfSAvLyBBZGRT
dHJpbmcKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSGFzaCB0YWJsZTogLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCisjZGVmaW5lIElOSVRfSEFTSF9UQUJMRV9TSVpFIDIwNDcKKyNkZWZp
bmUgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyAzCisKK3R5cGVkZWYgc3RydWN0IEhhc2hFbnRy
eV9SZWMgeworICAgIGludCBpbmRleDsgICAgICAvLyBTdHJpbmcgdGFibGUgb2Zmc2V0IG9mIHN0
cmluZyByZXByZXNlbnRhdGlvbgorICAgIGludCB2YWx1ZTsgICAgICAvLyBBdG9tIChzeW1ib2wp
IHZhbHVlCit9IEhhc2hFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxlX1JlYyB7Cisg
ICAgSGFzaEVudHJ5ICplbnRyeTsKKyAgICBpbnQgc2l6ZTsKKyAgICBpbnQgZW50cmllczsKKyAg
ICBpbnQgY291bnRzW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKK30gSGFzaFRhYmxl
OworCisvKgorICogSW5pdEhhc2hUYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZS4K
KyAqCisgKi8KKworc3RhdGljIGludCBJbml0SGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlLCBp
bnQgZnNpemUpCit7CisgICAgaW50IGlpOworCisgICAgaHRhYmxlLT5lbnRyeSA9IChIYXNoRW50
cnkgKikgbWFsbG9jKHNpemVvZihIYXNoRW50cnkpKmZzaXplKTsKKyAgICBpZiAoIWh0YWJsZS0+
ZW50cnkpCisgICAgICAgIHJldHVybiAwOworICAgIGh0YWJsZS0+c2l6ZSA9IGZzaXplOworICAg
IGZvciAoaWkgPSAwOyBpaSA8IGZzaXplOyBpaSsrKSB7CisgICAgICAgIGh0YWJsZS0+ZW50cnlb
aWldLmluZGV4ID0gMDsKKyAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0udmFsdWUgPSAwOworICAg
IH0KKyAgICBodGFibGUtPmVudHJpZXMgPSAwOworICAgIGZvciAoaWkgPSAwOyBpaSA8PSBIQVNI
X1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKQorICAgICAgICBodGFibGUtPmNvdW50c1tpaV0g
PSAwOworICAgIHJldHVybiAxOworfSAvLyBJbml0SGFzaFRhYmxlCisKKy8qCisgKiBGcmVlSGFz
aFRhYmxlKCkgLSBGcmVlIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBG
cmVlSGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlKQoreworICAgIGlmIChodGFibGUtPmVudHJ5
KQorICAgICAgICBmcmVlKGh0YWJsZS0+ZW50cnkpOworICAgIGh0YWJsZS0+ZW50cnkgPSBOVUxM
OworICAgIGh0YWJsZS0+c2l6ZSA9IDA7CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKK30gLy8g
RnJlZUhhc2hUYWJsZQorCisvKgorICogRW1wdHkoKSAtIFNlZSBpZiBhIGhhc2ggdGFibGUgZW50
cnkgaXMgZW1wdHkuCisgKgorICovCisKK3N0YXRpYyBpbnQgRW1wdHkoSGFzaFRhYmxlICpodGFi
bGUsIGludCBoYXNobG9jKQoreworICAgIGFzc2VydChoYXNobG9jID49IDAgJiYgaGFzaGxvYyA8
IGh0YWJsZS0+c2l6ZSk7CisgICAgaWYgKGh0YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXggPT0g
MCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9IC8vIEVtcHR5CisKKy8qCisgKiBNYXRjaCgpIC0gU2VlIGlmIGEgaGFzaCB0YWJs
ZSBlbnRyeSBpcyBtYXRjaGVzIGEgc3RyaW5nLgorICoKKyAqLworCitzdGF0aWMgaW50IE1hdGNo
KEhhc2hUYWJsZSAqaHRhYmxlLCBTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBjaGFyICpzLCBp
bnQgaGFzaGxvYykKK3sKKyAgICBpbnQgc3RybG9jOworCisgICAgc3RybG9jID0gaHRhYmxlLT5l
bnRyeVtoYXNobG9jXS5pbmRleDsKKyAgICBpZiAoIXN0cmNtcChzLCAmc3RhYmxlLT5zdHJpbmdz
W3N0cmxvY10pKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30gLy8gTWF0Y2gKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8g
QXRvbSB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIElOSVRfQVRPTV9U
QUJMRV9TSVpFIDEwMjQKKworCitzdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7CisgICAgU3RyaW5nVGFi
bGUgc3RhYmxlOyAvLyBTdHJpbmcgdGFibGUuCisgICAgSGFzaFRhYmxlIGh0YWJsZTsgICAvLyBI
YXNoZXMgc3RyaW5nIHRvIGF0b20gbnVtYmVyIGFuZCB0b2tlbiB2YWx1ZS4gIE11bHRpcGxlIHN0
cmluZ3MgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIHRva2Vu
IHZhbHVlIGJ1dCBlYWNoIHVuaXF1ZSBzdHJpbmcgaXMgYSB1bmlxdWUgYXRvbS4KKyAgICBpbnQg
KmFtYXA7ICAgICAgICAgIC8vIE1hcHMgYXRvbSB2YWx1ZSB0byBvZmZzZXQgaW4gc3RyaW5nIHRh
YmxlLiAgQXRvbXMgYWxsIG1hcCB0byB1bmlxdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN0cmluZ3MgZXhjZXB0IGZvciBzb21lIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIGxvd2VyLCBm
aXhlZCBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYXRvbSB0YWJsZSB0
aGF0IG1hcCB0byAiPHVuZGVmaW5lZD4iLiAgVGhlIGxvd2VzdCAyNTYgYXRvbXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gc2luZ2xlIGNoYXJhY3RlciBBU0NJSSB2
YWx1ZXMgZXhjZXB0IGZvciBhbHBoYW51bWVyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNoYXJhY3RlcnMgYW5kICdfJywgd2hpY2ggY2FuIGJlIG90aGVyIHRva2Vucy4gIE5leHQgY29t
ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlIHRva2VucyB3aXRoIHRo
ZWlyIGF0b20gdmFsdWVzIGVxdWFsIHRvIHRoZSB0b2tlbiB2YWx1ZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZW4gY29tZSBwcmVkZWZpbmVkIGF0b21zLCBmb2xsb3dlZCBieSB1c2Vy
IHNwZWNpZmllZCBpZGVudGlmaWVycy4KKyAgICBpbnQgKmFyZXY7ICAgICAgICAgIC8vIFJldmVy
c2VkIGF0b20gZm9yIHN5bWJvbCB0YWJsZSB1c2UuCisgICAgaW50IG5leHRGcmVlOworICAgIGlu
dCBzaXplOworfTsKKworc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAgfSB9OworQXRv
bVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsKKworc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRv
bVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKKworLyoKKyAqIEdyb3dB
dG9tVGFibGUoKSAtIEdyb3cgdGhlIGF0b20gdGFibGUgdG8gYXQgbGVhc3QgInNpemUiIGlmIGl0
J3Mgc21hbGxlci4KKyAqCisgKi8KKworc3RhdGljIGludCBHcm93QXRvbVRhYmxlKEF0b21UYWJs
ZSAqYXRhYmxlLCBpbnQgc2l6ZSkKK3sKKyAgICBpbnQgKm5ld21hcCwgKm5ld3JldjsKKworICAg
IGlmIChhdGFibGUtPnNpemUgPCBzaXplKSB7CisgICAgICAgIGlmIChhdGFibGUtPmFtYXApIHsK
KyAgICAgICAgICAgIG5ld21hcCA9IHJlYWxsb2MoYXRhYmxlLT5hbWFwLCBzaXplb2YoaW50KSpz
aXplKTsKKyAgICAgICAgICAgIG5ld3JldiA9IHJlYWxsb2MoYXRhYmxlLT5hcmV2LCBzaXplb2Yo
aW50KSpzaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5ld21hcCA9IG1hbGxv
YyhzaXplb2YoaW50KSpzaXplKTsKKyAgICAgICAgICAgIG5ld3JldiA9IG1hbGxvYyhzaXplb2Yo
aW50KSpzaXplKTsKKyAgICAgICAgICAgIGF0YWJsZS0+c2l6ZSA9IDA7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFuZXdtYXAgfHwgIW5ld3JldikgeworICAgICAgICAgICAgLyogZmFpbGVkIHRv
IGdyb3cgLS0gZXJyb3IgKi8KKyAgICAgICAgICAgIGlmIChuZXdtYXApCisgICAgICAgICAgICAg
ICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOworICAgICAgICAgICAgaWYgKG5ld3JldikKKyAgICAg
ICAgICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdyZXY7CisgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KCZuZXdtYXBbYXRhYmxlLT5zaXplXSwgMCwgKHNp
emUgLSBhdGFibGUtPnNpemUpICogc2l6ZW9mKGludCkpOworICAgICAgICBtZW1zZXQoJm5ld3Jl
dlthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7
CisgICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKKyAgICAgICAgYXRhYmxlLT5hcmV2ID0g
bmV3cmV2OworICAgICAgICBhdGFibGUtPnNpemUgPSBzaXplOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30gLy8gR3Jvd0F0b21UYWJsZQorCisvKgorICogbFJldmVyc2UoKSAtIFJldmVyc2UgdGhl
IGJvdHRvbSAyMCBiaXRzIG9mIGEgMzIgYml0IGludC4KKyAqCisgKi8KKworc3RhdGljIGludCBs
UmV2ZXJzZShpbnQgZnZhbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW4gPSBmdmFsOworICAgIGlu
dCByZXN1bHQgPSAwLCBjbnQgPSAwOworCisgICAgd2hpbGUoaW4pIHsKKyAgICAgICAgcmVzdWx0
IDw8PSAxOworICAgICAgICByZXN1bHQgfD0gaW4mMTsKKyAgICAgICAgaW4gPj49IDE7CisgICAg
ICAgIGNudCsrOworICAgIH0KKworICAgIC8vIERvbid0IHVzZSBhbGwgMzEgYml0cy4gIE9uZSBt
aWxsaW9uIGF0b21zIGlzIHBsZW50eSBhbmQgc29tZXRpbWVzIHRoZQorICAgIC8vIHVwcGVyIGJp
dHMgYXJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4KKworICAgIGlmIChjbnQgPCAyMCkKKyAgICAg
ICAgcmVzdWx0IDw8PSAyMCAtIGNudDsKKyAgICByZXR1cm4gcmVzdWx0OworfSAvLyBsUmV2ZXJz
ZQorCisvKgorICogQWxsb2NhdGVBdG9tKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tLiAgQXNzb2Np
YXRlZCB3aXRoIHRoZSAidW5kZWZpbmVkIiB2YWx1ZSBvZiAtMS4KKyAqCisgKi8KKworc3RhdGlj
IGludCBBbGxvY2F0ZUF0b20oQXRvbVRhYmxlICphdGFibGUpCit7CisgICAgaWYgKGF0YWJsZS0+
bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplKQorICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwg
YXRhYmxlLT5uZXh0RnJlZSoyKTsKKyAgICBhdGFibGUtPmFtYXBbYXRhYmxlLT5uZXh0RnJlZV0g
PSAtMTsKKyAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFi
bGUtPm5leHRGcmVlKTsKKyAgICBhdGFibGUtPm5leHRGcmVlKys7CisgICAgcmV0dXJuIGF0YWJs
ZS0+bmV4dEZyZWUgLSAxOworfSAvLyBBbGxvY2F0ZUF0b20KKworLyoKKyAqIFNldEF0b21WYWx1
ZSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRvbSBhc3NvY2lhdGVkIHdpdGggImhhc2hpbmRleCIuCisg
KgorICovCisKK3N0YXRpYyB2b2lkIFNldEF0b21WYWx1ZShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGF0b21udW1iZXIsIGludCBoYXNoaW5kZXgpCit7CisgICAgYXRhYmxlLT5hbWFwW2F0b21udW1i
ZXJdID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFibGUt
Pmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbW51bWJlcjsKK30gLy8gU2V0QXRv
bVZhbHVlCisKKy8qCisgKiBGaW5kSGFzaExvYygpIC0gRmluZCB0aGUgaGFzaCBsb2NhdGlvbiBm
b3IgdGhpcyBzdHJpbmcuICBSZXR1cm4gLTEgaXQgaGFzaCB0YWJsZSBpcyBmdWxsLgorICoKKyAq
LworCitzdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFy
ICpzKQoreworICAgIGludCBoYXNobG9jLCBoYXNoZGVsdGEsIGNvdW50OworICAgIGludCBGb3Vu
ZEVtcHR5U2xvdCA9IDA7CisgICAgaW50IGNvbGxpc2lvbltIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TICsgMV07CisKKyAgICBoYXNobG9jID0gSGFzaFN0cmluZyhzKSAlIGF0YWJsZS0+aHRhYmxl
LnNpemU7CisgICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAg
ICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxv
YykpCisgICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKKyAgICAgICAgY29sbGlzaW9uWzBdID0g
aGFzaGxvYzsKKyAgICAgICAgaGFzaGRlbHRhID0gSGFzaFN0cmluZzIocyk7CisgICAgICAgIGNv
dW50ID0gMDsKKyAgICAgICAgd2hpbGUgKGNvdW50IDwgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9O
UykgeworICAgICAgICAgICAgaGFzaGxvYyA9ICgoaGFzaGxvYyArIGhhc2hkZWx0YSkgJiAweDdm
ZmZmZmZmKSAlIGF0YWJsZS0+aHRhYmxlLnNpemU7CisgICAgICAgICAgICBpZiAoIUVtcHR5KCZh
dGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoTWF0Y2goJmF0
YWJsZS0+aHRhYmxlLCAmYXRhYmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBoYXNobG9jOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRm91bmRFbXB0eVNsb3QgPSAxOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgICAgIGNvbGxpc2lvbltjb3VudF0gPSBoYXNobG9jOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFGb3VuZEVtcHR5U2xvdCkgeworICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1w
QXRvbVRhYmxlKSB7CisgICAgICAgICAgICAgICAgaW50IGlpOworICAgICAgICAgICAgICAgIGNo
YXIgc3RyWzIwMF07CisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogSGFzaCBmYWls
ZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxl
IHNpemUuICoqKiIsCisgICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlMpOworICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOworCisgICAgICAg
ICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKKyAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKKyAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkg
PD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgeworICAgICAgICAgICAgICAgICAg
ICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4
IHdpdGggXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlz
aW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxp
c2lvbltpaV1dLnZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhz
dHIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLmNvdW50
c1tjb3VudF0rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGFzaGxvYzsKK30gLy8g
RmluZEhhc2hMb2MKKworLyoKKyAqIEluY3JlYXNlSGFzaFRhYmxlU2l6ZSgpCisgKgorICovCisK
K3N0YXRpYyBpbnQgSW5jcmVhc2VIYXNoVGFibGVTaXplKEF0b21UYWJsZSAqYXRhYmxlKQorewor
ICAgIGludCBpaSwgc3RybG9jLCBvbGRoYXNobG9jLCB2YWx1ZSwgc2l6ZTsKKyAgICBBdG9tVGFi
bGUgb2xkdGFibGU7CisgICAgY2hhciAqczsKKworICAgIC8vIFNhdmUgdGhlIG9sZCBhdG9tIHRh
YmxlIGFuZCBjcmVhdGUgYSBuZXcgb25lOgorCisgICAgb2xkdGFibGUgPSAqYXRhYmxlOworICAg
IHNpemUgPSBvbGR0YWJsZS5odGFibGUuc2l6ZSoyICsgMTsKKyAgICBpZiAoIUluaXRBdG9tVGFi
bGUoYXRhYmxlLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBBZGQgYWxsIHRo
ZSBleGlzdGluZyB2YWx1ZXMgdG8gdGhlIG5ldyBhdG9tIHRhYmxlIHByZXNlcnZpbmcgdGhlaXIg
YXRvbSB2YWx1ZXM6CisKKyAgICBmb3IgKGlpID0gYXRhYmxlLT5uZXh0RnJlZTsgaWkgPCBvbGR0
YWJsZS5uZXh0RnJlZTsgaWkrKykgeworICAgICAgICBzdHJsb2MgPSBvbGR0YWJsZS5hbWFwW2lp
XTsKKyAgICAgICAgcyA9ICZvbGR0YWJsZS5zdGFibGUuc3RyaW5nc1tzdHJsb2NdOworICAgICAg
ICBvbGRoYXNobG9jID0gRmluZEhhc2hMb2MoJm9sZHRhYmxlLCBzKTsKKyAgICAgICAgYXNzZXJ0
KG9sZGhhc2hsb2MgPj0gMCk7CisgICAgICAgIHZhbHVlID0gb2xkdGFibGUuaHRhYmxlLmVudHJ5
W29sZGhhc2hsb2NdLnZhbHVlOworICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCBzLCB2YWx1
ZSk7CisgICAgfQorICAgIEZyZWVBdG9tVGFibGUoJm9sZHRhYmxlKTsKKyAgICByZXR1cm4gMTsK
K30gLy8gSW5jcmVhc2VIYXNoVGFibGVTaXplCisKKy8qCisgKiBMb29rVXBBZGRTdHJpbmdIYXNo
KCkgLSBMb29rdXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVy
ZSwgYWRkIGl0IGFuZAorICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhl
IGhhc2ggdGFibGUgdG8gMC4gIFJldHVybiB0aGUgaGFzaCB0YWJsZSBpbmRleC4KKyAqLworCitz
dGF0aWMgaW50IExvb2tVcEFkZFN0cmluZ0hhc2goQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNo
YXIgKnMpCit7CisgICAgaW50IGhhc2hsb2MsIHN0cmxvYzsKKworICAgIHdoaWxlKDEpIHsKKyAg
ICAgICAgaGFzaGxvYyA9IEZpbmRIYXNoTG9jKGF0YWJsZSwgcyk7CisgICAgICAgIGlmIChoYXNo
bG9jID49IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSW5jcmVhc2VIYXNoVGFibGVT
aXplKGF0YWJsZSk7CisgICAgfQorCisgICAgaWYgKEVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFz
aGxvYykpIHsKKyAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cmllcysrOworICAgICAgICBzdHJs
b2MgPSBBZGRTdHJpbmcoJmF0YWJsZS0+c3RhYmxlLCBzKTsKKyAgICAgICAgYXRhYmxlLT5odGFi
bGUuZW50cnlbaGFzaGxvY10uaW5kZXggPSBzdHJsb2M7CisgICAgICAgIGF0YWJsZS0+aHRhYmxl
LmVudHJ5W2hhc2hsb2NdLnZhbHVlID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hsb2M7Cit9
IC8vIExvb2tVcEFkZFN0cmluZ0hhc2gKKworLyoKKyAqIExvb2tVcEFkZFN0cmluZygpIC0gTG9v
a3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRhYmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBp
dCBhbmQKKyAqICAgICAgICBpbml0aWFsaXplIHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRh
YmxlIHRvIHRoZSBuZXh0IGF0b20gbnVtYmVyLgorICogICAgICAgIFJldHVybiB0aGUgYXRvbSB2
YWx1ZSBvZiBzdHJpbmcuCisgKi8KKworaW50IExvb2tVcEFkZFN0cmluZyhBdG9tVGFibGUgKmF0
YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgaGFzaGluZGV4LCBhdG9tOworCisgICAg
aGFzaGluZGV4ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOworICAgIGF0b20gPSBh
dGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlOworICAgIGlmIChhdG9tID09IDAp
IHsKKyAgICAgICAgYXRvbSA9IEFsbG9jYXRlQXRvbShhdGFibGUpOworICAgICAgICBTZXRBdG9t
VmFsdWUoYXRhYmxlLCBhdG9tLCBoYXNoaW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gYXRvbTsK
K30gLy8gTG9va1VwQWRkU3RyaW5nCisKKy8qCisgKiBHZXRBdG9tU3RyaW5nKCkKKyAqCisgKi8K
KworY29uc3QgIGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KQoreworICAgIGludCBzb2Zmc2V0OworCisgICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFi
bGUtPm5leHRGcmVlKSB7CisgICAgICAgIHNvZmZzZXQgPSBhdGFibGUtPmFtYXBbYXRvbV07Cisg
ICAgICAgIGlmIChzb2Zmc2V0ID4gMCAmJiBzb2Zmc2V0IDwgYXRhYmxlLT5zdGFibGUubmV4dEZy
ZWUpIHsKKyAgICAgICAgICAgIHJldHVybiAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1tzb2Zmc2V0
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAiPGludGVybmFsIGVycm9y
OiBiYWQgc29mZnNldD4iOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0
b20gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuICI8bnVsbCBhdG9tPiI7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoYXRvbSA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIjxFT0Y+IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICI8aW52YWxpZCBhdG9tPiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
IC8vIEdldEF0b21TdHJpbmcKKworLyoKKyAqIEdldFJldmVyc2VkQXRvbSgpCisgKgorICovCisK
K2ludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQoreworICAg
IGlmIChhdG9tID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICByZXR1
cm4gYXRhYmxlLT5hcmV2W2F0b21dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30gLy8gR2V0UmV2ZXJzZWRBdG9tCisKKy8qCisgKiBBZGRBdG9tKCkgLSBBZGQgYSBz
dHJpbmcgdG8gdGhlIGF0b20sIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYgaXQgaXNuJ3QgYWxy
ZWFkeSB0aGVyZS4KKyAqICAgICAgICAgUmV0dXJuIGl0J3MgYXRvbSBpbmRleC4KKyAqLworCitp
bnQgQWRkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQg
YXRvbTsKKworICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzKTsKKyAgICByZXR1
cm4gYXRvbTsKK30gLy8gQWRkQXRvbQorCisvKgorICogQWRkQXRvbUZpeGVkKCkgLSBBZGQgYW4g
YXRvbSB0byB0aGUgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRo
ZXJlLgorICogICAgICAgICBBc3NpZ24gaXQgdGhlIGF0b20gdmFsdWUgb2YgImF0b20iLgorICov
CisKK3N0YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFy
ICpzLCBpbnQgYXRvbSkKK3sKKyAgICBpbnQgaGFzaGluZGV4LCBsc2l6ZTsKKworICAgIGhhc2hp
bmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRhYmxlLCBzKTsKKyAgICBpZiAoYXRhYmxlLT5u
ZXh0RnJlZSA+PSBhdGFibGUtPnNpemUgfHwgYXRvbSA+PSBhdGFibGUtPnNpemUpIHsKKyAgICAg
ICAgbHNpemUgPSBhdGFibGUtPnNpemUqMjsKKyAgICAgICAgaWYgKGxzaXplIDw9IGF0b20pCisg
ICAgICAgICAgICBsc2l6ZSA9IGF0b20gKyAxOworICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJs
ZSwgbHNpemUpOworICAgIH0KKyAgICBhdGFibGUtPmFtYXBbYXRvbV0gPSBhdGFibGUtPmh0YWJs
ZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4OworICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hp
bmRleF0udmFsdWUgPSBhdG9tOworICAgIC8vaWYgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkK
KyAgICAvLyAgICBhdGFibGUtPm5leHRGcmVlID0gYXRvbSArIDE7CisgICAgd2hpbGUgKGF0b20g
Pj0gYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0
RnJlZV0gPSBsUmV2ZXJzZShhdGFibGUtPm5leHRGcmVlKTsKKyAgICAgICAgYXRhYmxlLT5uZXh0
RnJlZSsrOworICAgIH0KKyAgICByZXR1cm4gYXRvbTsKK30gLy8gQWRkQXRvbUZpeGVkCisKKy8q
CisgKiBJbml0QXRvbVRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBhdG9tIHRhYmxlLgorICoKKyAq
LworCitpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSkKK3sK
KyAgICBpbnQgaWk7CisKKyAgICBodHNpemUgPSBodHNpemUgPD0gMCA/IElOSVRfSEFTSF9UQUJM
RV9TSVpFIDogaHRzaXplOworICAgIGlmICghSW5pdFN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJs
ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghSW5pdEhhc2hUYWJsZSgmYXRhYmxlLT5o
dGFibGUsIGh0c2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXRhYmxlLT5uZXh0RnJl
ZSA9IDA7CisgICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKKyAgICBhdGFibGUtPnNpemUgPSAwOwor
ICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBJTklUX0FUT01fVEFCTEVfU0laRSk7CisgICAgaWYg
KCFhdGFibGUtPmFtYXApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gSW5pdGlhbGl6ZSBs
b3dlciBwYXJ0IG9mIGF0b20gdGFibGUgdG8gIjx1bmRlZmluZWQ+IiBhdG9tOgorCisgICAgQWRk
QXRvbUZpeGVkKGF0YWJsZSwgIjx1bmRlZmluZWQ+IiwgMCk7CisgICAgZm9yIChpaSA9IDA7IGlp
IDwgRklSU1RfVVNFUl9UT0tFTl9TWTsgaWkrKykKKyAgICAgICAgYXRhYmxlLT5hbWFwW2lpXSA9
IGF0YWJsZS0+YW1hcFswXTsKKworICAgIC8vIEFkZCBzaW5nbGUgY2hhcmFjdGVyIHRva2VucyB0
byB0aGUgYXRvbSB0YWJsZToKKworICAgIHsKKwkJY29uc3QgY2hhciAqcyA9ICJ+ISVeJiooKS0r
PXwsLjw+Lz87Oltde30jIjsKKyAgICAgICAgY2hhciB0WzJdOworCisgICAgICAgIHRbMV0gPSAn
XDAnOworICAgICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgIHRbMF0gPSAqczsKKyAgICAg
ICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHQsIHNbMF0pOworICAgICAgICAgICAgcysrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIG11bHRpcGxlIGNoYXJhY3RlciBzY2FubmVy
IHRva2VucyA6CisKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YodG9rZW5zKS9zaXplb2Yo
dG9rZW5zWzBdKTsgaWkrKykKKyAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdG9rZW5zW2lp
XS5zdHIsIHRva2Vuc1tpaV0udmFsKTsKKworICAgIC8vIEFkZCBlcnJvciBzeW1ib2wgaWYgcnVu
bmluZyBpbiBlcnJvciBtb2RlOgorCisgICAgaWYgKGNwcC0+b3B0aW9ucy5FcnJvck1vZGUpCisg
ICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsICJlcnJvciIsIEVSUk9SX1NZKTsKKworICAgIEFk
ZEF0b20oYXRhYmxlLCAiPCoqKiBlbmQgZml4ZWQgYXRvbXMgKioqPiIpOworCisgICAgcmV0dXJu
IDE7Cit9IC8vIEluaXRBdG9tVGFibGUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRGVidWcgUHJpbnRp
bmcgRnVuY3Rpb25zOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKgorICogUHJpbnRBdG9tVGFibGUo
KQorICoKKyAqLworCit2b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQorewor
ICAgIGludCBpaTsKKyAgICBjaGFyIHN0clsyMDBdOworCisgICAgZm9yIChpaSA9IDA7IGlpIDwg
YXRhYmxlLT5uZXh0RnJlZTsgaWkrKykgeworICAgICAgICBzcHJpbnRmKHN0ciwgIiVkOiBcIiVz
XCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOworICAg
ICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOworICAgIH0KKyAgICBzcHJpbnRmKHN0ciwgIkhhc2gg
dGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKKyAgICAgICAgICAgYXRh
YmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7CisgICAgQ1BQRGVidWdM
b2dNc2coc3RyKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TOyBpaSsrKSB7CisgICAgICAgIHNwcmludGYoc3RyLCAiICVkIiwgYXRhYmxlLT5odGFibGUu
Y291bnRzW2lpXSk7CisgICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7CisgICAgfQorCit9IC8v
IFByaW50QXRvbVRhYmxlCisKKworLyoKKyAqIEdldFN0cmluZ09mQXRvbSgpCisgKgorICovCisK
K2NoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCit7CisJ
IGNoYXIqIGNocl9zdHI7CisJIGNocl9zdHI9JmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxl
LT5hbWFwW2F0b21dXTsKKwkgcmV0dXJuIGNocl9zdHI7Cit9IC8vIEdldFN0cmluZ09mQXRvbQor
CisvKgorICogRnJlZUF0b21UYWJsZSgpIC0gRnJlZSB0aGUgYXRvbSB0YWJsZSBhbmQgYXNzb2Np
YXRlZCBtZW1vcnkKKyAqCisgKi8KKwordm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJsZSAqYXRh
YmxlKQoreworICAgIEZyZWVTdHJpbmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpOworICAgIEZyZWVI
YXNoVGFibGUoJmF0YWJsZS0+aHRhYmxlKTsKKyAgICBpZiAoYXRhYmxlLT5hbWFwKQorICAgICAg
ICBmcmVlKGF0YWJsZS0+YW1hcCk7CisgICAgaWYgKGF0YWJsZS0+YXJldikKKyAgICAgICAgZnJl
ZShhdGFibGUtPmFyZXYpOworICAgIGF0YWJsZS0+YW1hcCA9IE5VTEw7CisgICAgYXRhYmxlLT5h
cmV2ID0gTlVMTDsKKyAgICBhdGFibGUtPm5leHRGcmVlID0gMDsKKyAgICBhdGFibGUtPnNpemUg
PSAwOworfSAvLyBGcmVlQXRvbVRhYmxlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQg
b2YgYXRvbS5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2Nv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitz
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvLworLy8gYXRvbS5oCisvLworCisjaWYgIWRlZmluZWQo
X19BVE9NX0gpCisjZGVmaW5lIF9fQVRPTV9IIDEKKwordHlwZWRlZiBzdHJ1Y3QgQXRvbVRhYmxl
X1JlYyBBdG9tVGFibGU7CisKK2V4dGVybiBBdG9tVGFibGUgKmF0YWJsZTsKKworaW50IEluaXRB
dG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwordm9pZCBGcmVlQXRvbVRh
YmxlKEF0b21UYWJsZSAqYXRhYmxlKTsKK2ludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKTsKK3ZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwor
aW50IExvb2tVcEFkZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Citj
b25zdCBjaGFyICpHZXRBdG9tU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7Citp
bnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CitjaGFyKiBH
ZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKKyNlbmRpZiAvLyAh
ZGVmaW5lZChfX0FUT01fSCkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y29tcGlsZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jb21waWxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Cit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAor
CitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BS
T0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8vCisvLyBjb21waWxlLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0NP
TVBJTEVfSCkKKyNkZWZpbmUgX19DT01QSUxFX0ggMQorCitpbnQgSW5pdENQUFN0cnVjdCh2b2lk
KTsKKwordHlwZWRlZiBzdHJ1Y3QgT3B0aW9uc19SZWN7CisgICAgY29uc3QgY2hhciAqcHJvZmls
ZVN0cmluZzsKKyAgICBpbnQgRXJyb3JNb2RlOworICAgIGludCBRdWlldDsKKwkKKyAgICAvLyBE
ZWJ1ZyBUaGUgQ29tcGlsZXIgb3B0aW9uczoKKyAgICBpbnQgRHVtcEF0b21UYWJsZTsKK30gT3B0
aW9uczsKKworc3RydWN0IENQUFN0cnVjdF9SZWMgeworICAgIC8vIFB1YmxpYyBtZW1iZXJzCisg
ICAgU291cmNlTG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFj
aCBzdGF0ZW1lbnQgYnkgdGhlIHRyZWUgd2Fsa2VycworICAgIE9wdGlvbnMgb3B0aW9uczsgICAg
ICAgICAgICAvLyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKKworICAgIC8vIFByaXZh
dGUgbWVtYmVycworICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOworCisgICAgLy8gU2Nhbm5l
ciBkYXRhOgorCisgICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2Nh
dGlvbiBvZiBtb3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCisgICAgaW50IG1v
c3RSZWNlbnRUb2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNj
YW5uZXIKKyAgICBJbnB1dFNyYyAqY3VycmVudElucHV0OworICAgIGludCBwcmV2aW91c190b2tl
bjsKKyAgICBpbnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUg
dGhhdCAjdmVyc2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlm
IHByZXNlbnQKKyAgICAKKwl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0
aGUgcGFyc2VDb250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKKyAgICAgCisg
ICAgLy8gUHJpdmF0ZSBtZW1iZXJzOgorICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7CisJaW50IGlm
ZGVwdGg7ICAgICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3Rpbmcg
aW4gdGhlIGNwcC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAorICAgIGludCBlbHNlZGVwdGhb
NjRdOyAgICAgICAgICAvL0tlZXAgYSB0cmFjayBvZiAjaWYgZGVwdGguLk1heCBhbGxvd2VkIGlz
IDY0LiAgIAorICAgIGludCBlbHNldHJhY2tlcjsgICAgICAgICAgICAvLyNpZi0jZWxzZSBhbmQg
I2VuZGlmIGNvbnN0cnVjdHMuLi5Db3VudGVyLgorICAgIGNvbnN0IGNoYXIgKkVyck1zZzsKKyAg
ICBpbnQgQ29tcGlsZUVycm9yOyAgICAgICAgICAgLy9JbmRpY2F0ZSBjb21waWxlIGVycm9yIHdo
ZW4gI2Vycm9yLCAjZWxzZSwjZWxpZiBtaXNtYXRjaC4KKworICAgIC8vCisgICAgLy8gR2xvYmFs
cyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gUGFQYXJzZVN0cmluZ3MoKSBhbmQgeXlfaW5w
dXQoKWFuZCAKKyAgICAvLyBhbHNvIGFjcm9zcyB0aGUgZmlsZXMuKGdlbl9nbHNsYW5nLmNwcCBh
bmQgc2Nhbm5lci5jKQorICAgIC8vCisgICAgaW50ICAgIFBhV2hpY2hTdHI7ICAgICAgICAgICAg
Ly8gd2hpY2ggc3RyaW5nIHdlJ3JlIHBhcnNpbmcKKyAgICBpbnQqICAgUGFTdHJMZW47ICAgICAg
ICAgICAgICAvLyBhcnJheSBvZiBsZW5ndGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5ncworICAgIGlu
dCAgICBQYUFyZ2M7ICAgICAgICAgICAgICAgIC8vIGNvdW50IG9mIHN0cmluZ3MgaW4gdGhlIGFy
cmF5CisgICAgY2hhcioqIFBhQXJndjsgICAgICAgICAgICAgICAgLy8gb3VyIGFycmF5IG9mIHN0
cmluZ3MgdG8gcGFyc2UgICAgCisgICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7
Cit9OworCisjZW5kaWYgLy8gIWRlZmluZWQoX19DT01QSUxFX0gpCkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMjkgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAw
MiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1
cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdy
ZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlv
biwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJl
Citjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBh
Z3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlm
eSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwg
bm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlz
IG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVz
ZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2Fy
ZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5
Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29m
dHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0
aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxs
IHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRo
ZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0Nv
cnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBp
biB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGlt
cGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Cits
aW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3Vy
IGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEg
U29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhl
cmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4g
IkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRB
VElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVO
VCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IK
K0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lU
SCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUg
Rk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJP
RklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFS
SVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FU
SU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIg
Q0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYK
K05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGNwcC5jCisvLworCisjaW5jbHVkZSA8
c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAq
IHl5bHZhbHBwKTsKKworLyogRG9uJ3QgdXNlIG1lbW9yeS5jJ3MgcmVwbGFjZW1lbnRzLCBhcyB3
ZSBjbGVhbiB1cCBwcm9wZXJseSBoZXJlICovCisjdW5kZWYgbWFsbG9jCisjdW5kZWYgZnJlZQor
CitzdGF0aWMgaW50IGJpbmRBdG9tID0gMDsKK3N0YXRpYyBpbnQgY29uc3RBdG9tID0gMDsKK3N0
YXRpYyBpbnQgZGVmYXVsdEF0b20gPSAwOworc3RhdGljIGludCBkZWZpbmVBdG9tID0gMDsKK3N0
YXRpYyBpbnQgZGVmaW5lZEF0b20gPSAwOworc3RhdGljIGludCBlbHNlQXRvbSA9IDA7CitzdGF0
aWMgaW50IGVsaWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgZW5kaWZBdG9tID0gMDsKK3N0YXRpYyBp
bnQgaWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZkZWZBdG9tID0gMDsKK3N0YXRpYyBpbnQgaWZu
ZGVmQXRvbSA9IDA7CitzdGF0aWMgaW50IGluY2x1ZGVBdG9tID0gMDsKK3N0YXRpYyBpbnQgbGlu
ZUF0b20gPSAwOworc3RhdGljIGludCBwcmFnbWFBdG9tID0gMDsKK3N0YXRpYyBpbnQgdGV4dW5p
dEF0b20gPSAwOworc3RhdGljIGludCB1bmRlZkF0b20gPSAwOworc3RhdGljIGludCBlcnJvckF0
b20gPSAwOworc3RhdGljIGludCBfX0xJTkVfX0F0b20gPSAwOworc3RhdGljIGludCBfX0ZJTEVf
X0F0b20gPSAwOworc3RhdGljIGludCBfX1ZFUlNJT05fX0F0b20gPSAwOworc3RhdGljIGludCB2
ZXJzaW9uQXRvbSA9IDA7CitzdGF0aWMgaW50IGV4dGVuc2lvbkF0b20gPSAwOworCitzdGF0aWMg
U2NvcGUgKm1hY3JvcyA9IDA7CisjZGVmaW5lIE1BWF9NQUNST19BUkdTICA2NAorI2RlZmluZSBN
QVhfSUZfTkVTVElORyAgNjQKKworc3RhdGljIFNvdXJjZUxvYyBpZmxvYzsgLyogb3V0ZXJtb3N0
ICNpZiAqLworCitpbnQgSW5pdENQUCh2b2lkKQoreworICAgIGNoYXIgICAgICAgIGJ1ZmZlcls2
NF0sICp0OworICAgIGNvbnN0IGNoYXIgICpmOworCisgICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMg
bmVlZGVkIGJ5IHRoZSBDUFAgbGluZSBzY2FubmVyOgorICAgIGJpbmRBdG9tID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgImJpbmQiKTsKKyAgICBjb25zdEF0b20gPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCAiY29uc3QiKTsKKyAgICBkZWZhdWx0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJkZWZhdWx0Iik7CisgICAgZGVmaW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJkZWZpbmUiKTsKKyAgICBkZWZpbmVkQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJk
ZWZpbmVkIik7CisgICAgZWxpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxpZiIp
OworICAgIGVsc2VBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVsc2UiKTsKKyAgICBl
bmRpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZW5kaWYiKTsKKyAgICBpZkF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWYiKTsKKyAgICBpZmRlZkF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiaWZkZWYiKTsKKyAgICBpZm5kZWZBdG9tID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgImlmbmRlZiIpOworICAgIGluY2x1ZGVBdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgImluY2x1ZGUiKTsKKyAgICBsaW5lQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJsaW5lIik7CisgICAgcHJhZ21hQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJw
cmFnbWEiKTsKKyAgICB0ZXh1bml0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ0ZXh1
bml0Iik7CisgICAgdW5kZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInVuZGVmIik7
CisJZXJyb3JBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVycm9yIik7CisgICAgX19M
SU5FX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fTElORV9fIik7CisgICAgX19G
SUxFX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fRklMRV9fIik7CisJX19WRVJT
SU9OX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgIl9fVkVSU0lPTl9fIik7CisgICAg
dmVyc2lvbkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidmVyc2lvbiIpOworICAgIGV4
dGVuc2lvbkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZXh0ZW5zaW9uIik7CisgICAg
bWFjcm9zID0gTmV3U2NvcGVJblBvb2wobWVtX0NyZWF0ZVBvb2woMCwgMCkpOworICAgIHN0cmNw
eShidWZmZXIsICJQUk9GSUxFXyIpOworICAgIHQgPSBidWZmZXIgKyBzdHJsZW4oYnVmZmVyKTsK
KyAgICBmID0gY3BwLT5vcHRpb25zLnByb2ZpbGVTdHJpbmc7CisgICAgd2hpbGUgKChpc2FsbnVt
KCpmKSB8fCAqZiA9PSAnXycpICYmIHQgPCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSAtIDEpCisg
ICAgICAgICp0KysgPSB0b3VwcGVyKCpmKyspOworICAgICp0ID0gMDsKKworICAgIFByZWRlZmlu
ZUludE1hY3JvKCJHTF9FUyIsIDEpOworICAgIFByZWRlZmluZUludE1hY3JvKCJHTF9GUkFHTUVO
VF9QUkVDSVNJT05fSElHSCIsIDEpOworCisJcmV0dXJuIDE7Cit9IC8vIEluaXRDUFAKKworaW50
IEZyZWVDUFAodm9pZCkKK3sKKyAgICBpZiAobWFjcm9zKQorICAgIHsKKyAgICAgICAgbWVtX0Zy
ZWVQb29sKG1hY3Jvcy0+cG9vbCk7CisgICAgICAgIG1hY3JvcyA9IDA7CisgICAgfQorCisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBGaW5hbENQUCh2b2lkKQoreworCWlmIChjcHAtPmlmZGVwdGgp
CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjaWYgbWlzbWF0Y2giKTsKKyAgICByZXR1cm4gMTsKK30K
Kworc3RhdGljIGludCBDUFBkZWZpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50
IHRva2VuLCBuYW1lLCBhcmdzW01BWF9NQUNST19BUkdTXSwgYXJnYzsKKyAgICBjb25zdCBjaGFy
ICptZXNzYWdlOworICAgIE1hY3JvU3ltYm9sIG1hYzsKKyAgICBTeW1ib2wgKnN5bWI7CisgICAg
U291cmNlTG9jIGR1bW15TG9jOworICAgIG1lbXNldCgmbWFjLCAwLCBzaXplb2YobWFjKSk7Cisg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI2RlZmluZSIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQor
ICAgIG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRlbnQ7CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiA9
PSAnKCcgJiYgIXl5bHZhbHBwLT5zY19pbnQpIHsKKyAgICAgICAgLy8gZ2F0aGVyIGFyZ3VtZW50
cworICAgICAgICBhcmdjID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
ICAgICAgICAgaWYgKGFyZ2MgPT0gMCAmJiB0b2tlbiA9PSAnKScpIGJyZWFrOworICAgICAgICAg
ICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7CisJCQkJQ1BQRXJyb3JUb0luZm9Mb2co
IiNkZWZpbmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXJnYyA8IE1BWF9NQUNST19BUkdTKQorICAgICAgICAgICAgICAg
IGFyZ3NbYXJnYysrXSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKyAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICAgICAgfSB3aGlsZSAodG9rZW4gPT0gJywnKTsKKyAgICAgICAgaWYgKHRva2VuICE9ICcpJykg
eworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKKyAgICAgICAgfQorICAgICAgICBtYWMuYXJnYyA9IGFyZ2M7CisgICAg
ICAgIG1hYy5hcmdzID0gbWVtX0FsbG9jKG1hY3Jvcy0+cG9vbCwgYXJnYyAqIHNpemVvZihpbnQp
KTsKKyAgICAgICAgbWVtY3B5KG1hYy5hcmdzLCBhcmdzLCBhcmdjICogc2l6ZW9mKGludCkpOwor
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisJfQorICAgIG1hYy5ib2R5ID0gTmV3VG9rZW5TdHJlYW0oR2V0QXRvbVN0
cmluZyhhdGFibGUsIG5hbWUpLCBtYWNyb3MtPnBvb2wpOworICAgIHdoaWxlICh0b2tlbiAhPSAn
XG4nKSB7CisgICAgICAgIGlmICh0b2tlbiA9PSAnXFwnKSB7CisgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiVGhlIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBw
YXJ0IG9mIHRoZSBPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSIpOworICAgICAgICAgICAgcmV0
dXJuIHRva2VuOworICAgICAgICB9CisgICAgICAgIFJlY29yZFRva2VuKG1hYy5ib2R5LCB0b2tl
biwgeXlsdmFscHApOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgfTsKKworICAgIHN5bWIgPSBMb29rVXBT
eW1ib2wobWFjcm9zLCBuYW1lKTsKKyAgICBpZiAoc3ltYikgeworICAgICAgICBpZiAoIXN5bWIt
PmRldGFpbHMubWFjLnVuZGVmKSB7CisgICAgICAgICAgICAvLyBhbHJlYWR5IGRlZmluZWQgLS0g
bmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaWRlbnRpY2FsCisgICAgICAgICAgICBpZiAoc3lt
Yi0+ZGV0YWlscy5tYWMuYXJnYyAhPSBtYWMuYXJnYykgZ290byBlcnJvcjsKKyAgICAgICAgICAg
IGZvciAoYXJnYz0wOyBhcmdjIDwgbWFjLmFyZ2M7IGFyZ2MrKykKKyAgICAgICAgICAgICAgICBp
ZiAoc3ltYi0+ZGV0YWlscy5tYWMuYXJnc1thcmdjXSAhPSBtYWMuYXJnc1thcmdjXSkKKyAgICAg
ICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFJld2luZFRva2VuU3RyZWFt
KHN5bWItPmRldGFpbHMubWFjLmJvZHkpOworICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0o
bWFjLmJvZHkpOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGludCBvbGRfbHZh
bCwgb2xkX3Rva2VuOworICAgICAgICAgICAgICAgIG9sZF90b2tlbiA9IFJlYWRUb2tlbihzeW1i
LT5kZXRhaWxzLm1hYy5ib2R5LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgb2xkX2x2YWwg
PSB5eWx2YWxwcC0+c2NfaW50OworICAgICAgICAgICAgICAgIHRva2VuID0gUmVhZFRva2VuKG1h
Yy5ib2R5LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IG9sZF90b2tl
biB8fCB5eWx2YWxwcC0+c2NfaW50ICE9IG9sZF9sdmFsKSB7IAorICAgICAgICAgICAgICAgIGVy
cm9yOgorICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cigiTWFjcm8gUmVkZWZpbmVkIik7Cisg
ICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsbmFtZSkp
OworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAg
ICAgICAgICAgICAgIERlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7
CisgICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsgfQorICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gPiAwKTsKKyAgICAgICAgfQor
ICAgICAgICAvL0ZyZWVNYWNybygmc3ltYi0+ZGV0YWlscy5tYWMpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGR1bW15TG9jLmZpbGUgPSAwOworICAgICAgICBkdW1teUxvYy5saW5lID0gMDsKKyAg
ICAgICAgc3ltYiA9IEFkZFN5bWJvbCgmZHVtbXlMb2MsIG1hY3JvcywgbmFtZSwgTUFDUk9fUyk7
CisgICAgfQorICAgIHN5bWItPmRldGFpbHMubWFjID0gbWFjOworICAgIHJldHVybiAnXG4nOwor
fSAvLyBDUFBkZWZpbmUKKworc3RhdGljIGludCBDUFB1bmRlZih5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKK3sKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgIFN5bWJvbCAqc3ltYjsKKwlpZih0b2tlbiA9PSAnXG4n
KXsKKwkJQ1BQRXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOworCSAgICByZXR1cm4gdG9rZW47Cisg
ICAgfQorICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAgICBnb3RvIGVy
cm9yOworICAgIHN5bWIgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQp
OworICAgIGlmIChzeW1iKSB7CisgICAgICAgIHN5bWItPmRldGFpbHMubWFjLnVuZGVmID0gMTsK
KyAgICB9CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgZXJyb3I6Cisg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsKKyAgICB9CisgICAgcmV0dXJuIHRv
a2VuOworfSAvLyBDUFB1bmRlZgorCisvKiBDUFBlbHNlIC0tIHNraXAgZm9yd2FyZCB0byBhcHBy
b3ByaWF0ZSBzcG90LiAgVGhpcyBpcyBhY3R1YWxseSB1c2VkCisqKiB0byBza2lwIHRvIGFuZCAj
ZW5kaWYgYWZ0ZXIgc2VlaW5nIGFuICNlbHNlLCBBTkQgdG8gc2tpcCB0byBhICNlbHNlLAorKiog
I2VsaWYsIG9yICNlbmRpZiBhZnRlciBhICNpZi8jaWZkZWYvI2lmbmRlZi8jZWxpZiB0ZXN0IHdh
cyBmYWxzZQorKi8KKworc3RhdGljIGludCBDUFBlbHNlKGludCBtYXRjaGVsc2UsIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQoreworICAgIGludCBhdG9tLGRlcHRoPTA7CisgICAgaW50IHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkK
Kwl3aGlsZSAodG9rZW4gPiAwKSB7CisgICAgICAgIGlmICh0b2tlbiAhPSAnIycpIHsKKwkJICAg
IHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwkJ
aWYgKCh0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCkpICE9IENQUF9JREVOVElGSUVSKQorCQkJY29udGludWU7CisgICAgICAgIGF0b20g
PSB5eWx2YWxwcC0+c2NfaWRlbnQ7CisgICAgICAgIGlmIChhdG9tID09IGlmQXRvbSB8fCBhdG9t
ID09IGlmZGVmQXRvbSB8fCBhdG9tID09IGlmbmRlZkF0b20peworICAgICAgICAgICAgZGVwdGgr
KzsgY3BwLT5pZmRlcHRoKys7IGNwcC0+ZWxzZXRyYWNrZXIrKzsKKyAgICAgICAgICAgIGNwcC0+
ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKKwkJfQorCQllbHNlIGlmIChhdG9tID09
IGVuZGlmQXRvbSkgeworICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKKwkJCSAgICAtLWNwcC0+
ZWxzZXRyYWNrZXI7CisgICAgICAgICAgICAgICAgaWYgKGNwcC0+aWZkZXB0aCkgCisgICAgICAg
ICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfSAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNr
ZXI7CisgICAgICAgICAgICAgICAgLS1jcHAtPmlmZGVwdGg7CisgICAgICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKCgoaW50KShtYXRjaGVsc2UpICE9IDApJiYgZGVwdGg9PTApIHsKKwkJCWlm
IChhdG9tID09IGVsc2VBdG9tICkgeworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBDUFBXYXJuaW5n
VG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICAgICB9IAorCQkJCWJyZWFrOworCQkJfSAKKwkJCWVsc2UgaWYgKGF0b20gPT0gZWxp
ZkF0b20pIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSBkZWNyZW1lbnQgY3BwLT5pZmRlcHRoIGhl
cmUsIGJlY2F1c2UgQ1BQaWYgd2lsbCBpbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgKiBpdCBh
bmQgd2UgcmVhbGx5IHdhbnQgdG8gbGVhdmUgaXQgYWxvbmUgKi8KKwkJCQlpZiAoY3BwLT5pZmRl
cHRoKXsKKwkJCQkJLS1jcHAtPmlmZGVwdGg7CisJCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsK
KwkJCQl9CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUGlmKHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgIH0KKwkJfQorICAgICAgICBlbHNlIGlmKChhdG9tPT1lbHNlQXRvbSkgJiYgKCFDaGtDb3Jy
ZWN0RWxzZU5lc3RpbmcoKSkpeworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNl
IGFmdGVyIGEgI2Vsc2UiKTsKKyAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAg
ICAgIH0KKwl9OworICAgIHJldHVybiB0b2tlbjsKK30KKworZW51bSBldmFsX3ByZWMgeworICAg
IE1JTl9QUkVDLAorICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBYT1IsIEFORCwgRVFVQUws
IFJFTEFUSU9OLCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAorICAgIE1BWF9QUkVDCit9OworCitz
dGF0aWMgaW50IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8fCBiOyB9CitzdGF0
aWMgaW50IG9wX2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiYgYjsgfQorc3RhdGlj
IGludCBvcF9vcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9CitzdGF0aWMgaW50IG9w
X3hvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9CitzdGF0aWMgaW50IG9wX2FuZChp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiBiOyB9CitzdGF0aWMgaW50IG9wX2VxKGludCBhLCBp
bnQgYikgeyByZXR1cm4gYSA9PSBiOyB9CitzdGF0aWMgaW50IG9wX25lKGludCBhLCBpbnQgYikg
eyByZXR1cm4gYSAhPSBiOyB9CitzdGF0aWMgaW50IG9wX2dlKGludCBhLCBpbnQgYikgeyByZXR1
cm4gYSA+PSBiOyB9CitzdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8
PSBiOyB9CitzdGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+IGI7IH0K
K3N0YXRpYyBpbnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDwgYjsgfQorc3RhdGlj
IGludCBvcF9zaGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7IH0KK3N0YXRpYyBpbnQg
b3Bfc2hyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9CitzdGF0aWMgaW50IG9wX2Fk
ZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9CitzdGF0aWMgaW50IG9wX3N1YihpbnQg
YSwgaW50IGIpIHsgcmV0dXJuIGEgLSBiOyB9CitzdGF0aWMgaW50IG9wX211bChpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgKiBiOyB9CitzdGF0aWMgaW50IG9wX2RpdihpbnQgYSwgaW50IGIpIHsg
cmV0dXJuIGEgLyBiOyB9CitzdGF0aWMgaW50IG9wX21vZChpbnQgYSwgaW50IGIpIHsgcmV0dXJu
IGEgJSBiOyB9CitzdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1cm4gYTsgfQorc3RhdGlj
IGludCBvcF9uZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9CitzdGF0aWMgaW50IG9wX2NtcGwoaW50
IGEpIHsgcmV0dXJuIH5hOyB9CitzdGF0aWMgaW50IG9wX25vdChpbnQgYSkgeyByZXR1cm4gIWE7
IH0KKworc3RydWN0IHsKKyAgICBpbnQgdG9rZW4sIHByZWMsICgqb3ApKGludCwgaW50KTsKK30g
Ymlub3BbXSA9IHsKKyAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xvZ29yIH0sCisgICAgeyBD
UFBfQU5EX09QLCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAorICAgIHsgJ3wnLCBPUiwgb3Bfb3IgfSwK
KyAgICB7ICdeJywgWE9SLCBvcF94b3IgfSwKKyAgICB7ICcmJywgQU5ELCBvcF9hbmQgfSwKKyAg
ICB7IENQUF9FUV9PUCwgRVFVQUwsIG9wX2VxIH0sCisgICAgeyBDUFBfTkVfT1AsIEVRVUFMLCBv
cF9uZSB9LAorICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKKyAgICB7IENQUF9HRV9PUCwg
UkVMQVRJT04sIG9wX2dlIH0sCisgICAgeyAnPCcsIFJFTEFUSU9OLCBvcF9sdCB9LAorICAgIHsg
Q1BQX0xFX09QLCBSRUxBVElPTiwgb3BfbGUgfSwKKyAgICB7IENQUF9MRUZUX09QLCBTSElGVCwg
b3Bfc2hsIH0sCisgICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9zaHIgfSwKKyAgICB7ICcr
JywgQURELCBvcF9hZGQgfSwKKyAgICB7ICctJywgQURELCBvcF9zdWIgfSwKKyAgICB7ICcqJywg
TVVMLCBvcF9tdWwgfSwKKyAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwKKyAgICB7ICclJywgTVVM
LCBvcF9tb2QgfSwKK307CisKK3N0cnVjdCB7CisgICAgaW50IHRva2VuLCAoKm9wKShpbnQpOwor
fSB1bm9wW10gPSB7CisgICAgeyAnKycsIG9wX3BvcyB9LAorICAgIHsgJy0nLCBvcF9uZWcgfSwK
KyAgICB7ICd+Jywgb3BfY21wbCB9LAorICAgIHsgJyEnLCBvcF9ub3QgfSwKK307CisKKyNkZWZp
bmUgQUxFTihBKSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKKworc3RhdGljIGludCBldmFsKGlu
dCB0b2tlbiwgaW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlzdHlwZXBwICogeXlsdmFs
cHApCit7CisgICAgaW50ICAgICAgICAgaSwgdmFsOworICAgIFN5bWJvbCAgICAgICpzOworICAg
IGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGRlZmluZWRBdG9tKSB7CisgICAgICAgICAgICBpbnQgbmVlZGNsb3NlID0gMDsK
KyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAg
ICAgICAgICAgICBuZWVkY2xvc2UgPSAxOworICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKKyAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKnJlcyA9IChzID0gTG9va1VwU3ltYm9s
KG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8g
IXMtPmRldGFpbHMubWFjLnVuZGVmIDogMDsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
IGlmIChuZWVkY2xvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJyknKQorICAg
ICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgIH0KKwkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5
bHZhbHBwKSkgeworCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgcmV0dXJuIGV2YWwodG9rZW4sIHByZWMs
IHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnb3Rv
IGVycm9yOworICAgICAgICB9CisJfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQp
IHsKKyAgICAgICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7CisgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICB9
IGVsc2UgaWYgKHRva2VuID09ICcoJykgeworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHRva2VuID0g
ZXZhbCh0b2tlbiwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgIGlmICgh
KmVycikgeworICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKKyAgICAgICAgICAgICAgICBn
b3RvIGVycm9yOworICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZm9yIChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAg
ICBpZiAodW5vcFtpXS50b2tlbiA9PSB0b2tlbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwgeXlsdmFscHApOworICAg
ICAgICAgICAgKnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICghKmVycikg
eworICAgICAgICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdcbicpIGJyZWFrOworICAg
ICAgICBmb3IgKGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAg
ICBpZiAoYmlub3BbaV0udG9rZW4gPT0gdG9rZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnByZWMgPD0gcHJlYykKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB2YWwgPSAqcmVzOworICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgIHRva2VuID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVzLCBlcnIsIHl5bHZhbHBw
KTsKKyAgICAgICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJlcyk7CisgICAgfQorICAgIHJl
dHVybiB0b2tlbjsKK2Vycm9yOgorICAgIENQUEVycm9yVG9JbmZvTG9nKCJpbmNvcnJlY3QgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZSIpOworICAgICplcnIgPSAxOworICAgICpyZXMgPSAwOworICAg
IHJldHVybiB0b2tlbjsKK30gLy8gZXZhbAorCitzdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAq
IHl5bHZhbHBwKSB7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpbnQgcmVzID0gMCwgZXJyID0gMDsKKwlj
cHAtPmVsc2V0cmFja2VyKys7CisgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0g
PSAwOworICAgIGlmICghY3BwLT5pZmRlcHRoKyspCisgICAgICAgIGlmbG9jID0gKmNwcC0+dG9r
ZW5Mb2M7CisJaWYoY3BwLT5pZmRlcHRoID5NQVhfSUZfTkVTVElORyl7CisgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJcmV0dXJu
IDA7CisJfQorCXRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsICZyZXMsICZlcnIsIHl5bHZh
bHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICBDUFBXYXJuaW5nVG9JbmZv
TG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicp
CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgfSAKKyAgICBpZiAoIXJlcyAmJiAhZXJyKSB7CisgICAg
ICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5eWx2YWxwcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRv
a2VuOworfSAvLyBDUFBpZgorCitzdGF0aWMgaW50IENQUGlmZGVmKGludCBkZWZpbmVkLCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIGludCBuYW1lID0geXlsdmFs
cHAtPnNjX2lkZW50OworCWlmKCsrY3BwLT5pZmRlcHRoID5NQVhfSUZfTkVTVElORyl7CisJICAg
IENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKKwkJ
cmV0dXJuIDA7CisJfQorCWNwcC0+ZWxzZXRyYWNrZXIrKzsKKyAgICBjcHAtPmVsc2VkZXB0aFtj
cHAtPmVsc2V0cmFja2VyXSA9IDA7CisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7
CisgICAgICAgICAgICBkZWZpbmVkID8gQ1BQRXJyb3JUb0luZm9Mb2coImlmZGVmIik6Q1BQRXJy
b3JUb0luZm9Mb2coImlmbmRlZiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5bWJvbCAqcyA9
IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmICh0
b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVj
dGVkIHRva2VucyBmb2xsb3dpbmcgI2lmZGVmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBl
Y3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAg
ICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKChzICYmICFzLT5kZXRh
aWxzLm1hYy51bmRlZikgPyAxIDogMCkgIT0gZGVmaW5lZCkKKyAgICAgICAgICAgIHRva2VuID0g
Q1BQZWxzZSgxLCB5eWx2YWxwcCk7CisgICAgfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQ
aWZkZWYKKworc3RhdGljIGludCBDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSAKK3sKKyAg
ICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworCWlmKHRva2VuPT0nXG4nKXsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOwor
CQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2UgaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkg
eworCQl5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkJU2V0
TGluZU51bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAKKwkJ
aWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgeworICAgICAgICAgICAgeXlsdmFscHAtPnNj
X2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisJCQlTZXRTdHJpbmdOdW1iZXIoeXls
dmFscHAtPnNjX2ludCk7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCQlpZih0b2tlbiE9J1xuJykKKwkJ
CQlDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKKyAgICAgICAgfQorCQllbHNlIGlmICh0b2tl
biA9PSAnXG4nKXsKKwkJCXJldHVybiB0b2tlbjsKKwkJfQorCQllbHNleworICAgICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisJCX0KKwl9CisJZWxzZXsKKyAgICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKKwl9CisgICAgcmV0dXJuIHRva2VuOworfQorCitz
dGF0aWMgaW50IENQUGVycm9yKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisKKwlpbnQgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJCisgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsK
KwkJaWYgKHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05T
VEFOVCl7CisgICAgICAgICAgICBTdG9yZVN0cih5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQl9
ZWxzZSBpZih0b2tlbiA9PSBDUFBfSURFTlRJRklFUiB8fCB0b2tlbiA9PSBDUFBfU1RSQ09OU1RB
TlQpeworCQkJU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRl
bnQpKTsKKwkJfWVsc2UgeworCQkgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0
b2tlbikpOworCQl9CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9CisJRGVjTGluZU51bWJlcigpOworCS8vc3RvcmUgdGhp
cyBtc2cgaW50byB0aGUgc2hhZGVyJ3MgaW5mb3JtYXRpb24gbG9nLi5zZXQgdGhlIENvbXBpbGUg
RXJyb3IgZmxhZyEhISEKKwltZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgQ1BQU2hJbmZv
TG9nTXNnKG1lc3NhZ2UpOworICAgIFJlc2V0VFN0cmluZygpOworICAgIGNwcC0+Q29tcGlsZUVy
cm9yPTE7CisgICAgSW5jTGluZU51bWJlcigpOworICAgIHJldHVybiAnXG4nOworfS8vQ1BQZXJy
b3IKKworc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICogeXlsdmFscHApCit7CisJY2hh
ciBTcmNTdHJOYW1lWzJdOworCWNoYXIqKiBhbGxUb2tlbnM7CisJaW50IHRva2VuQ291bnQgPSAw
OworCWludCBtYXhUb2tlbkNvdW50ID0gMTA7CisJY29uc3QgY2hhciogU3JjU3RyOworCWludCBp
OworCisJaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKwkKKwlpZiAodG9rZW49PSdcbicpIHsKKwkJRGVjTGluZU51bWJlcigp
OworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ByYWdtYSIpOworICAgICAgICBJbmNMaW5l
TnVtYmVyKCk7CisJICAgIHJldHVybiB0b2tlbjsKKwl9CisJCisJYWxsVG9rZW5zID0gKGNoYXIq
KiltYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291bnQpOwkKKworCXdoaWxlICh0b2tl
biAhPSAnXG4nKSB7CisJCWlmICh0b2tlbkNvdW50ID49IG1heFRva2VuQ291bnQpIHsKKwkJCW1h
eFRva2VuQ291bnQgKj0gMjsKKwkJCWFsbFRva2VucyA9IChjaGFyKiopcmVhbGxvYygoY2hhcioq
KWFsbFRva2Vucywgc2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291bnQpOworCQl9CisJCXN3aXRj
aCAodG9rZW4pIHsKKwkJY2FzZSBDUFBfSURFTlRJRklFUjoKKwkJCVNyY1N0ciA9IEdldEF0b21T
dHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpOworCQkJYWxsVG9rZW5zW3Rva2VuQ291
bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRv
a2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BQX0lOVENP
TlNUQU5UOgorCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJvbF9uYW1lOworCQkJYWxsVG9rZW5z
W3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3Ry
Y3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2Ug
Q1BQX0ZMT0FUQ09OU1RBTlQ6CisJCQlTcmNTdHIgPSB5eWx2YWxwcC0+c3ltYm9sX25hbWU7CisJ
CQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsg
MSk7CisJCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0cik7CisJCQlicmVh
azsKKwkJY2FzZSAtMToKKyAgICAgICAgICAgIC8vIEVPRgorICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRoIGEgbmV3bGluZSIpOwkJCQor
CQkJcmV0dXJuIHRva2VuOworCQlkZWZhdWx0OgorCQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwor
CQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7CisJCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hh
ciopbWFsbG9jKDIpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHJO
YW1lKTsKKwkJfQorCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisJfQorCisJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHRva2VuLCB5eWx2YWxwcCk7CisJSGFuZGxlUHJhZ21hKChjb25zdCBj
aGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKKwl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCisJZm9yIChpID0gMDsgaSA8
IHRva2VuQ291bnQ7ICsraSkgeworCQlmcmVlIChhbGxUb2tlbnNbaV0pOworCX0KKwlmcmVlIChh
bGxUb2tlbnMpOwkKKworCXJldHVybiB0b2tlbjsgICAgCit9IC8vIENQUHByYWdtYQorCisjZGVm
aW5lIEVTU0xfVkVSU0lPTl9OVU1CRVIgMTAwCisjZGVmaW5lIEVTU0xfVkVSU0lPTl9TVFJJTkcg
IjEwMCIKKworc3RhdGljIGludCBDUFB2ZXJzaW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQorewor
CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKworICAgIGlmIChjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9PSAxKQor
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiN2ZXJzaW9uIG11c3Qgb2NjdXIgYmVmb3JlIGFueSBv
dGhlciBzdGF0ZW1lbnQgaW4gdGhlIHByb2dyYW0iKTsKKworICAgIGlmKHRva2VuPT0nXG4nKXsK
KwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24i
KTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1cm4gdG9rZW47CisJfQorICAgIGlm
ICh0b2tlbiAhPSBDUFBfSU5UQ09OU1RBTlQpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIj
dmVyc2lvbiIpOworCQorICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9s
X25hbWUpOworCS8vU2V0VmVyc2lvbk51bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAKKyAg
ICBpZiAoeXlsdmFscHAtPnNjX2ludCAhPSBFU1NMX1ZFUlNJT05fTlVNQkVSKQorICAgICAgICBD
UFBTaEluZm9Mb2dNc2coIlZlcnNpb24gbnVtYmVyIG5vdCBzdXBwb3J0ZWQgYnkgRVNTTCIpOwor
CisgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgIAorCWlmICh0b2tlbiA9PSAnXG4nKXsKKwkJcmV0dXJuIHRva2VuOwor
CX0KKwllbHNleworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwl9Cisg
ICAgcmV0dXJuIHRva2VuOworfSAvLyBDUFB2ZXJzaW9uCisKK3N0YXRpYyBpbnQgQ1BQZXh0ZW5z
aW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworCisgICAgaW50IHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjaGFyIGV4
dGVuc2lvbk5hbWVbODBdOworCisgICAgaWYodG9rZW49PSdcbicpeworCQlEZWNMaW5lTnVtYmVy
KCk7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZXh0ZW5zaW9uIG5hbWUgbm90IHNwZWNpZmll
ZCIpOworICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisJCXJldHVybiB0b2tlbjsKKwl9CisKKyAg
ICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpCisgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCIjZXh0ZW5zaW9uIik7CisgICAgCisgICAgc3RyY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21T
dHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKwkgICAgCisgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAg
IGlmICh0b2tlbiAhPSAnOicpIHsKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCInOicgbWlzc2lu
ZyBhZnRlciBleHRlbnNpb24gbmFtZSIpOworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQor
ICAgIAorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9uIG5vdCBzcGVjaWZpZWQi
KTsKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgIH0KKworICAgIHVwZGF0ZUV4dGVuc2lvbkJl
aGF2aW9yKGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpKTsKKworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKwlpZiAodG9rZW4gPT0gJ1xuJyl7CisJCXJldHVybiB0b2tl
bjsKKwl9CisJZWxzZXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsK
Kwl9CisgICAgcmV0dXJuIHRva2VuOworfSAvLyBDUFBleHRlbnNpb24KKworaW50IHJlYWRDUFBs
aW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgY29uc3QgY2hh
ciAqbWVzc2FnZTsKKyAgICBpbnQgaXNWZXJzaW9uID0gMDsKKworICAgIGlmICh0b2tlbiA9PSBD
UFBfSURFTlRJRklFUikgeworICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmlu
ZUF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsc2VBdG9tKSB7CisJCQkgaWYo
Q2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpeworICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZk
ZXB0aCApeworICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1p
c21hdGNoIik7CisgICAgICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAg
aWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0lu
Zm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgIH0KKwkJCSAgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNl
IGFmdGVyIGEgI2Vsc2UiKTsKKyAgICAgICAgICAgICAgICAgY3BwLT5pZmRlcHRoPTA7CisgICAg
ICAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKyAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgfQorCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBlbGlmQXRvbSkgeworICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpeworICAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKKyAgICAg
ICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAgICAgICAgIH0gCisgICAgICAg
ICAgICAvLyB0aGlzIHRva2VuIGlzIHJlYWxseSBhIGRvbnQgY2FyZSwgYnV0IHdlIHN0aWxsIG5l
ZWQgdG8gZWF0IHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsgCisgICAgICAgICAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCSAgICB0b2tlbiA9IENQ
UGVsc2UoMCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVu
dCA9PSBlbmRpZkF0b20pIHsKKwkJICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CisgICAgICAgICAg
ICAgaWYgKCFjcHAtPmlmZGVwdGgpeworICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygiI2VuZGlmIG1pc21hdGNoIik7CisgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9y
PTE7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UKKwkJCSAgCSAtLWNwcC0+aWZk
ZXB0aDsKKwkgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZBdG9tKSB7Cisg
ICAgICAgICAgICAgdG9rZW4gPSBDUFBpZih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAo
eXlsdmFscHAtPnNjX2lkZW50ID09IGlmZGVmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0g
Q1BQaWZkZWYoMSwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBpZm5kZWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigwLCB5
eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGxpbmVB
dG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBsaW5lKHl5bHZhbHBwKTsKKyAgICAgICAg
fSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gcHJhZ21hQXRvbSkgeworICAgICAgICAg
ICAgIHRva2VuID0gQ1BQcHJhZ21hKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2
YWxwcC0+c2NfaWRlbnQgPT0gdW5kZWZBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFB1
bmRlZih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IGVycm9yQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwor
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewor
ICAgICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlz
VmVyc2lvbiA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4
dGVuc2lvbkF0b20pIHsKKyAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBw
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0b3JlU3RyKCJJbnZhbGlkIERpcmVj
dGl2ZSIpOworICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2
YWxwcC0+c2NfaWRlbnQpKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsK
KyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgIFJlc2V0
VFN0cmluZygpOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nICYm
IHRva2VuICE9IDAgJiYgdG9rZW4gIT0gRU9GKSB7CisJCXRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwl9CisgICAgICAgIAorICAg
IGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKKworICAgIHJldHVybiB0b2tlbjsKK30gLy8g
cmVhZENQUGxpbmUKKwordm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKKyAgICBEZWxl
dGVUb2tlblN0cmVhbShzLT5ib2R5KTsKK30KKwordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKKyAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MH07
CisgICAgU3ltYm9sICpzeW1ib2wgPSBOVUxMOworICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezB9
OworICAgIHl5c3R5cGVwcCB2YWwgPSB7MH07CisgICAgaW50IGF0b20gPSAwOworCisgICAgbWFj
cm8uYm9keSA9IE5ld1Rva2VuU3RyZWFtKG5hbWUsIG1hY3Jvcy0+cG9vbCk7CisgICAgdmFsLnNj
X2ludCA9IHZhbHVlOworICAgIHNwcmludGYodmFsLnN5bWJvbF9uYW1lLCAiJWQiLCB2YWx1ZSk7
CisgICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwgQ1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKKyAg
ICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgbmFtZSk7CisgICAgc3ltYm9sID0gQWRk
U3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9tLCBNQUNST19TKTsKKyAgICBzeW1ib2wtPmRl
dGFpbHMubWFjID0gbWFjcm87Cit9CisKK3N0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlu
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyB2b2lkIG5vb3Ao
SW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7IH0KKworc3RhdGlj
IHZvaWQgUHVzaEVvZlNyYygpIHsKKyAgICBJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKElu
cHV0U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoSW5wdXRTcmMpKTsKKyAgICBpbi0+
c2NhbiA9IGVvZl9zY2FuOworICAgIGluLT5nZXRjaCA9IGVvZl9zY2FuOworICAgIGluLT51bmdl
dGNoID0gbm9vcDsKKyAgICBpbi0+cHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIGNwcC0+
Y3VycmVudElucHV0ID0gaW47Cit9CisKK3N0YXRpYyB2b2lkIFBvcEVvZlNyYygpIHsKKyAgICBp
ZiAoY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4gPT0gZW9mX3NjYW4pIHsKKyAgICAgICAgSW5wdXRT
cmMgKmluID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0g
aW4tPnByZXY7CisgICAgICAgIGZyZWUoaW4pOworICAgIH0KK30KKworc3RhdGljIFRva2VuU3Ry
ZWFtICpQcmVzY2FuTWFjcm9BcmcoVG9rZW5TdHJlYW0gKmEsIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KSB7CisgICAgaW50IHRva2VuOworICAgIFRva2VuU3RyZWFtICpuOworICAgIFJld2luZFRva2Vu
U3RyZWFtKGEpOworICAgIGRvIHsKKyAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4oYSwgeXlsdmFs
cHApOworICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTG9va1VwU3ltYm9s
KG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0g
d2hpbGUgKHRva2VuID4gMCk7CisgICAgaWYgKHRva2VuIDw9IDApIHJldHVybiBhOworICAgIG4g
PSBOZXdUb2tlblN0cmVhbSgibWFjcm8gYXJnIiwgMCk7CisgICAgUHVzaEVvZlNyYygpOworICAg
IFJlYWRGcm9tVG9rZW5TdHJlYW0oYSwgMCwgMCk7CisgICAgd2hpbGUgKCh0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCkpID4gMCkgewor
ICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFs
cHAtPnNjX2lkZW50LCB5eWx2YWxwcCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
UmVjb3JkVG9rZW4obiwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICB9CisgICAgUG9wRW9mU3JjKCk7
CisgICAgRGVsZXRlVG9rZW5TdHJlYW0oYSk7CisgICAgcmV0dXJuIG47Cit9IC8vIFByZXNjYW5N
YWNyb0FyZworCit0eXBlZGVmIHN0cnVjdCBNYWNyb0lucHV0U3JjIHsKKyAgICBJbnB1dFNyYyAg
ICBiYXNlOworICAgIE1hY3JvU3ltYm9sICptYWM7CisgICAgVG9rZW5TdHJlYW0gKiphcmdzOwor
fSBNYWNyb0lucHV0U3JjOworCisvKiBtYWNyb19zY2FuIC0tLQorKiogcmV0dXJuIHRoZSBuZXh0
IHRva2VuIGZvciBhIG1hY3JvIGV4cGFuaW9uLCBoYW5kbGluZyBtYWNybyBhcmdzIAorKi8KK3N0
YXRpYyBpbnQgbWFjcm9fc2NhbihNYWNyb0lucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFs
cHApIHsKKyAgICBpbnQgaTsKKyAgICBpbnQgdG9rZW4gPSBSZWFkVG9rZW4oaW4tPm1hYy0+Ym9k
eSwgeXlsdmFscHApOworICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgeworICAgICAg
ICBmb3IgKGkgPSBpbi0+bWFjLT5hcmdjLTE7IGk+PTA7IGktLSkKKyAgICAgICAgICAgIGlmIChp
bi0+bWFjLT5hcmdzW2ldID09IHl5bHZhbHBwLT5zY19pZGVudCkgYnJlYWs7CisgICAgICAgIGlm
IChpID49IDApIHsKKyAgICAgICAgICAgIFJlYWRGcm9tVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0s
IHl5bHZhbHBwLT5zY19pZGVudCwgMCk7CisgICAgICAgICAgICByZXR1cm4gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAodG9rZW4gPiAwKSByZXR1cm4gdG9rZW47CisgICAgaW4tPm1hYy0+YnVzeSA9
IDA7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OworICAgIGlmIChpbi0+
YXJncykgeworICAgICAgICBmb3IgKGk9aW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCisgICAg
ICAgICAgICBEZWxldGVUb2tlblN0cmVhbShpbi0+YXJnc1tpXSk7CisgICAgICAgIGZyZWUoaW4t
PmFyZ3MpOworICAgIH0KKyAgICBmcmVlKGluKTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKK30gLy8gbWFjcm9fc2Nhbgor
CisvKiBNYWNyb0V4cGFuZAorKiogY2hlY2sgYW4gaWRlbnRpZmllciAoYXRvbSkgdG8gc2VlIGlm
IGl0IGEgbWFjcm8gdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuCisqKiBJZiBpdCBpcywgcHVzaCBh
biBJbnB1dFNyYyB0aGF0IHdpbGwgcHJvZHVjZSB0aGUgYXBwcm9wcmlhdGUgZXhwYW5zaW9uCisq
KiBhbmQgcmV0dXJuIFRSVUUuICBJZiBub3QsIHJldHVybiBGQUxTRS4KKyovCisKK2ludCBNYWNy
b0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgU3ltYm9sICAg
ICAgICAgICAgICAqc3ltID0gTG9va1VwU3ltYm9sKG1hY3JvcywgYXRvbSk7CisgICAgTWFjcm9J
bnB1dFNyYyAgICAgICAqaW47CisgICAgaW50IGksaiwgdG9rZW4sIGRlcHRoPTA7CisgICAgY29u
c3QgY2hhciAqbWVzc2FnZTsKKwlpZiAoYXRvbSA9PSBfX0xJTkVfX0F0b20pIHsKKyAgICAgICAg
eXlsdmFscHAtPnNjX2ludCA9IEdldExpbmVOdW1iZXIoKTsKKyAgICAgICAgc3ByaW50Zih5eWx2
YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgVW5nZXRU
b2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgeworICAgICAgICB5eWx2YWxwcC0+c2Nf
aW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7CisgICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJv
bF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2ludCk7CisgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lO
VENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwlpZiAoYXRv
bSA9PSBfX1ZFUlNJT05fX0F0b20pIHsKKyAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xf
bmFtZSxFU1NMX1ZFUlNJT05fU1RSSU5HKTsKKyAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0
b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09O
U1RBTlQsIHl5bHZhbHBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICghc3lt
IHx8IHN5bS0+ZGV0YWlscy5tYWMudW5kZWYpIHJldHVybiAwOworICAgIGlmIChzeW0tPmRldGFp
bHMubWFjLmJ1c3kpIHJldHVybiAwOyAgICAgICAgLy8gbm8gcmVjdXJzaXZlIGV4cGFuc2lvbnMK
KyAgICBpbiA9IG1hbGxvYyhzaXplb2YoKmluKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2Yo
KmluKSk7CisgICAgaW4tPmJhc2Uuc2NhbiA9ICh2b2lkICopbWFjcm9fc2NhbjsKKyAgICBpbi0+
YmFzZS5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgaW4tPmJhc2UubmFtZSA9
IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOworICAgIGluLT5tYWMgPSAmc3ltLT5kZXRhaWxzLm1h
YzsKKyAgICBpZiAoc3ltLT5kZXRhaWxzLm1hYy5hcmdzKSB7CisgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJaWYg
KHRva2VuICE9ICcoJykgeworICAgICAgICAgICAgVW5nZXRUb2tlbih0b2tlbiwgeXlsdmFscHAp
OworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gYXRvbTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIGluLT5hcmdzID0gbWFsbG9jKGluLT5tYWMtPmFy
Z2MgKiBzaXplb2YoVG9rZW5TdHJlYW0gKikpOworICAgICAgICBmb3IgKGk9MDsgaTxpbi0+bWFj
LT5hcmdjOyBpKyspCisgICAgICAgICAgICBpbi0+YXJnc1tpXSA9IE5ld1Rva2VuU3RyZWFtKCJt
YWNybyBhcmciLCAwKTsKKwkJaT0wO2o9MDsKKyAgICAgICAgZG97CisgICAgICAgICAgICBkZXB0
aCA9IDA7CisJCQl3aGlsZSgxKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIGlmICh0b2tlbiA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0Yg
aW4gTWFjcm8gIik7CisgICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRv
bShhdGFibGUsYXRvbSkpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21U
U3RyKCk7CisgICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+
YXJnYz09MCkgJiYgKHRva2VuIT0nKScpKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoZGVw
dGggPT0gMCAmJiAodG9rZW4gPT0gJywnIHx8IHRva2VuID09ICcpJykpIGJyZWFrOworICAgICAg
ICAgICAgICAgIGlmICh0b2tlbiA9PSAnKCcpIGRlcHRoKys7CisgICAgICAgICAgICAgICAgaWYg
KHRva2VuID09ICcpJykgZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBSZWNvcmRUb2tlbihpbi0+
YXJnc1tpXSwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBqPTE7CisJCQl9Cisg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSB7CisgICAgICAgICAgICAgICAgaWYoKGluLT5t
YWMtPmFyZ2M9PTEpICYmaj09MCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaSsrOworCQl9d2hpbGUoaSA8IGluLT5tYWMtPmFyZ2MpOworCisgICAgICAgIGlm
IChpIDwgaW4tPm1hYy0+YXJnYykgeworICAgICAgICAgICAgU3RvcmVTdHIoIlRvbyBmZXcgYXJn
cyBpbiBNYWNybyAiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFi
bGUsYXRvbSkpOworICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRUU3RyaW5n
KCk7CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gIT0gJyknKSB7CisgICAgICAgICAgICBkZXB0
aD0wOworCQkJd2hpbGUgKHRva2VuID49IDAgJiYgKGRlcHRoID4gMCB8fCB0b2tlbiAhPSAnKScp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgZGVwdGgtLTsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsK
KyAgICAgICAgICAgIH0KKwkJCQorICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKKyAgICAg
ICAgICAgICAgICBTdG9yZVN0cigiRU9GIGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgIFN0
b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOworICAgICAgICAgICAgICAgIG1l
c3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdG9yZVN0cigiVG9vIG1h
bnkgYXJncyBpbiBNYWNybyAiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRv
bShhdGFibGUsYXRvbSkpOworICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwor
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgUmVzZXRU
U3RyaW5nKCk7CisJCX0KKwkJZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAg
ICAgICAgICBpbi0+YXJnc1tpXSA9IFByZXNjYW5NYWNyb0FyZyhpbi0+YXJnc1tpXSwgeXlsdmFs
cHApOworICAgICAgICB9CisgICAgfQorI2lmIDAKKyAgICBwcmludGYoIiAgPCVzOiVkPmZvdW5k
IG1hY3JvICVzXG4iLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgbG9jLmZpbGUpLAorICAgICAgICAg
ICBsb2MubGluZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0b20pKTsKKyAgICBmb3IgKGk9MDsg
aTxpbi0+bWFjLT5hcmdjOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCJcdGFyZyAlcyA9ICciLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgaW4tPm1hYy0+YXJnc1tpXSkpOworICAgICAgICBEdW1wVG9r
ZW5TdHJlYW0oc3Rkb3V0LCBpbi0+YXJnc1tpXSk7CisgICAgICAgIHByaW50ZigiJ1xuIik7Cisg
ICAgfQorI2VuZGlmCisJLypyZXRhaW4gdGhlIGlucHV0IHNvdXJjZSovCisgICAgaW4tPmJhc2Uu
cHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIHN5bS0+ZGV0YWlscy5tYWMuYnVzeSA9IDE7
CisgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICBjcHAt
PmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsKKyAgICByZXR1cm4gMTsKK30gLy8gTWFjcm9FeHBh
bmQKKworaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKQoreworICAgIGlmKGNwcC0+ZWxz
ZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdPT0wKXsKKwkgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxz
ZXRyYWNrZXJdPTE7CisgICAgICByZXR1cm4gMTsgICAgICAgICAgCisgICAgfQorICAgIHJldHVy
biAwOworfQorCisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklE
SUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGlu
Citjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMs
IGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0
aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRo
ZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNl
IGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEK
K3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRl
IGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJ
RElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIg
TlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhl
CisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlz
dHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
bnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3Ug
cmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNv
cHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwor
dGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBO
VklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1h
cmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitF
eGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRz
IG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBo
ZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRo
YXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVy
IHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQu
IE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdB
UkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE
LAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIg
QUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVW
RU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lO
Q0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBV
U0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhF
CitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9S
WSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJ
TElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8K
Ky8vIGNwcC5oCisvLworCisjaWYgIWRlZmluZWQoX19DUFBfSCkKKyNkZWZpbmUgX19DUFBfSCAx
CisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIgorCitpbnQgSW5pdENQUCh2b2lkKTsKK2lu
dCBGaW5hbENQUCh2b2lkKTsKK2ludCAgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHAp
OworaW50IE1hY3JvRXhwYW5kKGludCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CitpbnQg
Q2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCBNYWNyb1N5bWJv
bCB7CisgICAgaW50IGFyZ2M7CisgICAgaW50ICphcmdzOworICAgIFRva2VuU3RyZWFtICpib2R5
OworICAgIHVuc2lnbmVkIGJ1c3k6MTsKKyAgICB1bnNpZ25lZCB1bmRlZjoxOworfSBNYWNyb1N5
bWJvbDsKKwordm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKik7Cit2b2lkIFByZWRlZmluZUlu
dE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7CisKK3ZvaWQgIENQUERlYnVnTG9n
TXNnKGNvbnN0IGNoYXIgKm1zZyk7ICAgICAgLy8gUHJpbnRzIGluZm9ybWF0aW9uIGludG8gZGVi
dWcgbG9nCit2b2lkICBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciopOyAgICAgICAgIC8vIFN0
b3JlIGNwcCBFcnIgTXNnIGludG8gU2guSW5mby5Mb2cKK3ZvaWQgIENQUFdhcm5pbmdUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZv
IGxvZwordm9pZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAv
LyAjcHJhZ21hIGRpcmVjdGl2ZSBjb250YWluZXIuCit2b2lkICBSZXNldFRTdHJpbmcodm9pZCk7
ICAgICAgICAgICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCit2b2lkICBD
UFBFcnJvclRvSW5mb0xvZyhjaGFyKik7ICAgICAgICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJy
b3JzIGludG8gU2guSW5mby5sb2cgICAuCit2b2lkICBTdG9yZVN0cihjaGFyKik7ICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCit2b2lk
ICBTZXRMaW5lTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJl
ci4gIAordm9pZCAgU2V0U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQg
c3RyaW5nIG51bWJlci4gICAgCitpbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAg
ICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKK2ludCAgIEdldFN0cmlu
Z051bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBO
dW1iZXIuIAorY29uc3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCk7ICAgICAgICAgICAvLyBD
b252ZXJ0IFRTdHJpbmcgdG8gU3RyaW5nLiAgCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlv
cihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CitpbnQgICBGcmVl
Q1BQKHZvaWQpOworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fQ1BQX0gpCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdh
cmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY3Bw
c3RydWN0LmMKKy8vCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCitDUFBTdHJ1
Y3QgICpjcHAgICAgICA9IE5VTEw7CitzdGF0aWMgaW50ICByZWZDb3VudCA9IDA7CisKK2ludCBJ
bml0UHJlcHJvY2Vzc29yKHZvaWQpOworaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpOworaW50
IEZyZWVDUFBTdHJ1Y3Qodm9pZCk7CitpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7CisK
Ky8qCisgKiBJbml0Q1BQU3RydWN0KCkgLSBJbml0aWxhaXplIHRoZSBDUFAgc3RydWN0dXJlLgor
ICoKKyAqLworCitpbnQgSW5pdENQUFN0cnVjdCh2b2lkKQoreworICAgIGludCBsZW47CisgICAg
Y2hhciAqcDsKKworICAgIGNwcCA9IChDUFBTdHJ1Y3QgKikgbWFsbG9jKHNpemVvZihDUFBTdHJ1
Y3QpKTsKKyAgICBpZiAoY3BwID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVm
Q291bnQrKzsKKworICAgIC8vIEluaXRpYWxpemUgcHVibGljIG1lbWJlcnM6CisgICAgY3BwLT5w
TGFzdFNvdXJjZUxvYyA9ICZjcHAtPmxhc3RTb3VyY2VMb2M7CisgICAgCisJcCA9IChjaGFyICop
ICZjcHAtPm9wdGlvbnM7CisgICAgbGVuID0gc2l6ZW9mKGNwcC0+b3B0aW9ucyk7CisgICAgd2hp
bGUgKC0tbGVuID49IDApCisgICAgICAgIHBbbGVuXSA9IDA7CisgICAgIAorICAgIFJlc2V0UHJl
cHJvY2Vzc29yKCk7CisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRDUFBTdHJ1Y3QKKworaW50IFJl
c2V0UHJlcHJvY2Vzc29yKHZvaWQpCit7CisgICAgLy8gSW5pdGlhbGl6ZSBwcml2YXRlIG1lbWJl
cnM6CisKKyAgICBjcHAtPmxhc3RTb3VyY2VMb2MuZmlsZSA9IDA7CisgICAgY3BwLT5sYXN0U291
cmNlTG9jLmxpbmUgPSAwOworCWNwcC0+cEM9MDsKKyAgICBjcHAtPkNvbXBpbGVFcnJvcj0wOyAK
KwljcHAtPmlmZGVwdGg9MDsKKyAgICBmb3IoY3BwLT5lbHNldHJhY2tlcj0wOyBjcHAtPmVsc2V0
cmFja2VyPDY0OyBjcHAtPmVsc2V0cmFja2VyKyspCisJCWNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxz
ZXRyYWNrZXJdPTA7IAorCWNwcC0+ZWxzZXRyYWNrZXI9MDsKKyAgICBjcHAtPnRva2Vuc0JlZm9y
ZUVPRiA9IDA7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vSW50aWFsaXppbmcgdGhlIFByZXByb2Nl
c3Nvci4KKworaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCkKK3sKKyAgICMgIGRlZmluZSBDUFBf
U1RVRkYgdHJ1ZQorICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKKyAgICAgICAgICAgIEZyZWVD
UFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEluaXRDUFBTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNw
cC0+b3B0aW9ucy5RdWlldCA9IDE7CisgICAgICAgICAgICBjcHAtPm9wdGlvbnMucHJvZmlsZVN0
cmluZyA9ICJnZW5lcmljIjsKKyAgICAgICAgICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUs
IDApKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgaWYgKCFJbml0U2Nh
bm5lcihjcHApKQorCSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICMgIGVuZGlmCisgIHJl
dHVybiAwOyAKK30KKworLy9GcmVlQ1BQU3RydWN0KCkgLSBGcmVlIHRoZSBDUFAgc3RydWN0dXJl
LgorCitpbnQgRnJlZUNQUFN0cnVjdCh2b2lkKQoreworICAgIGlmIChyZWZDb3VudCkKKyAgICB7
CisgICAgICAgZnJlZShjcHApOworICAgICAgIHJlZkNvdW50LS07CisgICAgfQorICAgIAorICAg
IHJldHVybiAxOworfQorCisvL0ZpbmFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KKworaW50IEZp
bmFsaXplUHJlcHJvY2Vzc29yKHZvaWQpCit7CisgICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUK
KyAgICAgICAgIyAgaWZkZWYgQ1BQX1NUVUZGCisgICAgICAgICAgICBGcmVlQXRvbVRhYmxlKGF0
YWJsZSk7CisgICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7CisgICAgICAgICAgICBGcmVlU2Nh
bm5lcigpOworICAgICAgICMgIGVuZGlmCisgIHJldHVybiAwOyAKK30KKworCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8gRW5kIG9mIGNwcHN0cnVjdC5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3
YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKyNpbmNs
dWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCisKKy8vIGRlZmF1bHQgYWxpZ25t
ZW50IGFuZCBjaHVua3NpemUsIGlmIGNhbGxlZCB3aXRoIDAgYXJndW1lbnRzCisjZGVmaW5lIENI
VU5LU0laRSAgICAgICAoNjQqMTAyNCkKKyNkZWZpbmUgQUxJR04gICAgICAgICAgIDgKKworLy8g
d2UgbmVlZCB0byBjYWxsIHRoZSBgcmVhbCcgbWFsbG9jIGFuZCBmcmVlLCBub3Qgb3VyIHJlcGxh
Y2VtZW50cworI3VuZGVmIG1hbGxvYworI3VuZGVmIGZyZWUKKworc3RydWN0IGNodW5rIHsKKyAg
ICBzdHJ1Y3QgY2h1bmsgICAgICAgICpuZXh0OworfTsKKworc3RydWN0IGNsZWFudXAgeworICAg
IHN0cnVjdCBjbGVhbnVwICAgICAgKm5leHQ7CisgICAgdm9pZCAgICAgICAgICAgICAgICAoKmZu
KSh2b2lkICopOworICAgIHZvaWQgICAgICAgICAgICAgICAgKmFyZzsKK307CisKK3N0cnVjdCBN
ZW1vcnlQb29sX3JlYyB7CisgICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKKyAgICB1aW50
cHRyX3QgICAgICAgICAgIGZyZWUsIGVuZDsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGNodW5r
c2l6ZTsKKyAgICB1aW50cHRyX3QgICAgICAgICAgIGFsaWdubWFzazsKKyAgICBzdHJ1Y3QgY2xl
YW51cCAgICAgICpjbGVhbnVwOworfTsKKworTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6
ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQoreworICAgIE1lbW9yeVBvb2wgICpw
b29sOworCisgICAgaWYgKGFsaWduID09IDApIGFsaWduID0gQUxJR047CisgICAgaWYgKGNodW5r
c2l6ZSA9PSAwKSBjaHVua3NpemUgPSBDSFVOS1NJWkU7CisgICAgaWYgKGFsaWduICYgKGFsaWdu
LTEpKSByZXR1cm4gMDsKKyAgICBpZiAoY2h1bmtzaXplIDwgc2l6ZW9mKE1lbW9yeVBvb2wpKSBy
ZXR1cm4gMDsKKyAgICBpZiAoY2h1bmtzaXplICYgKGFsaWduLTEpKSByZXR1cm4gMDsKKyAgICBp
ZiAoIShwb29sID0gbWFsbG9jKGNodW5rc2l6ZSkpKSByZXR1cm4gMDsKKyAgICBwb29sLT5uZXh0
ID0gMDsKKyAgICBwb29sLT5jaHVua3NpemUgPSBjaHVua3NpemU7CisgICAgcG9vbC0+YWxpZ25t
YXNrID0gKHVpbnRwdHJfdCkoYWxpZ24pLTE7ICAKKyAgICBwb29sLT5mcmVlID0gKCh1aW50cHRy
X3QpKHBvb2wgKyAxKSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAg
IHBvb2wtPmVuZCA9ICh1aW50cHRyX3QpcG9vbCArIGNodW5rc2l6ZTsKKyAgICBwb29sLT5jbGVh
bnVwID0gMDsKKyAgICByZXR1cm4gcG9vbDsKK30KKwordm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5
UG9vbCAqcG9vbCkKK3sKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpjbGVhbnVwOworICAgIHN0
cnVjdCBjaHVuayAgICAgICAgKnAsICpuZXh0OworCisgICAgZm9yIChjbGVhbnVwID0gcG9vbC0+
Y2xlYW51cDsgY2xlYW51cDsgY2xlYW51cCA9IGNsZWFudXAtPm5leHQpIHsKKyAgICAgICAgY2xl
YW51cC0+Zm4oY2xlYW51cC0+YXJnKTsKKyAgICB9CisgICAgZm9yIChwID0gKHN0cnVjdCBjaHVu
ayAqKXBvb2w7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAg
ICBmcmVlKHApOworICAgIH0KK30KKwordm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnBvb2ws
IHNpemVfdCBzaXplKQoreworICAgIHN0cnVjdCBjaHVuayAqY2g7CisgICAgdm9pZCAqcnYgPSAo
dm9pZCAqKXBvb2wtPmZyZWU7CisgICAgc2l6ZSA9IChzaXplICsgcG9vbC0+YWxpZ25tYXNrKSAm
IH5wb29sLT5hbGlnbm1hc2s7CisgICAgaWYgKHNpemUgPD0gMCkgc2l6ZSA9IHBvb2wtPmFsaWdu
bWFzazsKKyAgICBwb29sLT5mcmVlICs9IHNpemU7CisgICAgaWYgKHBvb2wtPmZyZWUgPiBwb29s
LT5lbmQgfHwgcG9vbC0+ZnJlZSA8ICh1aW50cHRyX3QpcnYpIHsKKyAgICAgICAgc2l6ZV90IG1p
bnJlcSA9IChzaXplICsgc2l6ZW9mKHN0cnVjdCBjaHVuaykgKyBwb29sLT5hbGlnbm1hc2spCisg
ICAgICAgICAgICAgICAgICAgICAgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgICAgICBwb29sLT5m
cmVlID0gKHVpbnRwdHJfdClydjsKKyAgICAgICAgaWYgKG1pbnJlcSA+PSBwb29sLT5jaHVua3Np
emUpIHsKKyAgICAgICAgICAgIC8vIHJlcXVlc3Qgc2l6ZSBpcyB0b28gYmlnIGZvciB0aGUgY2h1
bmtzaXplLCBzbyBhbGxvY2F0ZSBpdCBhcworICAgICAgICAgICAgLy8gYSBzaW5nbGUgY2h1bmsg
b2YgdGhlIHJpZ2h0IHNpemUKKyAgICAgICAgICAgIGNoID0gbWFsbG9jKG1pbnJlcSk7CisgICAg
ICAgICAgICBpZiAoIWNoKSByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNoID0gbWFsbG9jKHBvb2wtPmNodW5rc2l6ZSk7CisgICAgICAgICAgICBpZiAoIWNoKSByZXR1
cm4gMDsKKyAgICAgICAgICAgIHBvb2wtPmZyZWUgPSAodWludHB0cl90KWNoICsgbWlucmVxOwor
ICAgICAgICAgICAgcG9vbC0+ZW5kID0gKHVpbnRwdHJfdCljaCArIHBvb2wtPmNodW5rc2l6ZTsK
KyAgICAgICAgfQorICAgICAgICBjaC0+bmV4dCA9IHBvb2wtPm5leHQ7CisgICAgICAgIHBvb2wt
Pm5leHQgPSBjaDsKKyAgICAgICAgcnYgPSAodm9pZCAqKSgoKHVpbnRwdHJfdCkoY2grMSkgKyBw
b29sLT5hbGlnbm1hc2spICYgfnBvb2wtPmFsaWdubWFzayk7CisgICAgfQorICAgIHJldHVybiBy
djsKK30KKworaW50IG1lbV9BZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnBvb2wsIHZvaWQgKCpmbiko
dm9pZCAqKSwgdm9pZCAqYXJnKSB7CisgICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CisKKyAg
ICBwb29sLT5mcmVlID0gKHBvb2wtPmZyZWUgKyBzaXplb2Yodm9pZCAqKSAtIDEpICYgfihzaXpl
b2Yodm9pZCAqKS0xKTsKKyAgICBjbGVhbnVwID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihzdHJ1
Y3QgY2xlYW51cCkpOworICAgIGlmICghY2xlYW51cCkgcmV0dXJuIC0xOworICAgIGNsZWFudXAt
Pm5leHQgPSBwb29sLT5jbGVhbnVwOworICAgIGNsZWFudXAtPmZuID0gZm47CisgICAgY2xlYW51
cC0+YXJnID0gYXJnOworICAgIHBvb2wtPmNsZWFudXAgPSBjbGVhbnVwOworICAgIHJldHVybiAw
OworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05W
SURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3Ug
aW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmli
dXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2Yg
dGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVh
c2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJ
QQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJp
ZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBO
VklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRl
ciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0
aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVk
aXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUg
Y29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5n
Cit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhl
IE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4K
K0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdo
dHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElB
IGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMg
dGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3Ro
ZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRl
ZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZU
V0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ
RUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhF
UiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8g
RVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAor
SU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhF
IFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBU
SEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhF
T1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElB
QklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisv
LworI2lmbmRlZiBfX01FTU9SWV9ICisjZGVmaW5lIF9fTUVNT1JZX0gKKwordHlwZWRlZiBzdHJ1
Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKKworZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9D
cmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CitleHRlcm4g
dm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqKTsKK2V4dGVybiB2b2lkICptZW1fQWxsb2Mo
TWVtb3J5UG9vbCAqcCwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKm1lbV9SZWFsbG9jKE1l
bW9yeVBvb2wgKnAsIHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBuZXdzaXplKTsK
K2V4dGVybiBpbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9pZCAoKmZuKSh2b2lk
ICopLCB2b2lkICphcmcpOworCisjZW5kaWYgLyogX19NRU1PUllfSCAqLwpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAor
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0lu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
K05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitU
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAor
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQklTT05fUEFS
U0VSX0gKKyMgZGVmaW5lIEJJU09OX1BBUlNFUl9ICisKKyNpZm5kZWYgeXlzdHlwZXBwCit0eXBl
ZGVmIHN0cnVjdCB7CisgICAgaW50ICAgIHNjX2ludDsKKyAgICBmbG9hdCAgc2NfZnZhbDsKKyAg
ICBpbnQgICAgc2NfaWRlbnQ7CisJY2hhciAgIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9M
RU4rMV07Cit9IHl5c3R5cGVwcDsKKworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNl
bmRpZgorIyBkZWZpbmUJQ1BQX0FORF9PUAkgICAgICAgIDI1NworIyBkZWZpbmUJQ1BQX1NVQl9B
U1NJR04JICAgIDI1OQorIyBkZWZpbmUJQ1BQX01PRF9BU1NJR04JICAgIDI2MAorIyBkZWZpbmUJ
Q1BQX0FERF9BU1NJR04JMjYxCisjIGRlZmluZQlDUFBfRElWX0FTU0lHTgkyNjIKKyMgZGVmaW5l
CUNQUF9NVUxfQVNTSUdOCTI2MworIyBkZWZpbmUJQ1BQX0VRX09QCSAgICAgICAgMjY0CisjIGRl
ZmluZSAgICBDUFBfWE9SX09QICAgICAgICAgMjY1IAorIyBkZWZpbmUJRVJST1JfU1kJICAgIDI2
NgorIyBkZWZpbmUJQ1BQX0ZMT0FUQ09OU1RBTlQJMjY3CisjIGRlZmluZQlDUFBfR0VfT1AJICAg
ICAgICAyNjgKKyMgZGVmaW5lCUNQUF9SSUdIVF9PUCAgICAgICAgMjY5CisjIGRlZmluZQlDUFBf
SURFTlRJRklFUgkgICAgMjcwCisjIGRlZmluZQlDUFBfSU5UQ09OU1RBTlQJICAgIDI3MQorIyBk
ZWZpbmUJQ1BQX0xFX09QCSAgICAgICAgMjcyCisjIGRlZmluZQlDUFBfTEVGVF9PUAkgICAgICAg
IDI3MworIyBkZWZpbmUJQ1BQX0RFQ19PUAkyNzQKKyMgZGVmaW5lCUNQUF9ORV9PUAkgICAgICAg
IDI3NQorIyBkZWZpbmUJQ1BQX09SX09QCSAgICAgICAgMjc2CisjIGRlZmluZQlDUFBfSU5DX09Q
CSAgICAyNzcKKyMgZGVmaW5lCUNQUF9TVFJDT05TVEFOVAkgICAgMjc4CisjIGRlZmluZQlDUFBf
VFlQRUlERU5USUZJRVIJMjc5CisKKyMgZGVmaW5lCUZJUlNUX1VTRVJfVE9LRU5fU1kJMjg5CisK
KyMgZGVmaW5lCUNQUF9SSUdIVF9BU1NJR04JICAgIDI4MAorIyBkZWZpbmUJQ1BQX0xFRlRfQVNT
SUdOCSAgICAyODEKKyMgZGVmaW5lCUNQUF9BTkRfQVNTSUdOCTI4MgorIyBkZWZpbmUJQ1BQX09S
X0FTU0lHTiAgCTI4MworIyBkZWZpbmUJQ1BQX1hPUl9BU1NJR04JMjg0CisjIGRlZmluZQlDUFBf
TEVGVF9CUkFDS0VUCTI4NQorIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNLRVQJMjg2CisjIGRlZmlu
ZQlDUFBfTEVGVF9CUkFDRQkyODcKKyMgZGVmaW5lCUNQUF9SSUdIVF9CUkFDRQkyODgKKworI2Vu
ZGlmIC8qIG5vdCBCSVNPTl9QQVJTRVJfSCAqLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0
IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJ
RElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5z
dGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEg
c29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3Ug
ZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFs
bCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0
ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBl
cnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRz
IGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUi
KSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElB
IFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9v
ciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5W
SURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBO
VklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVy
cyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05l
aXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5W
SURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkg
c3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJl
c3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1
dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2Vk
IGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhl
IE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGlj
ZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURF
RCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9V
VCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5G
UklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5B
VElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJF
IExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZ
LCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywg
TE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBN
T0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwg
SE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwg
RVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorZXh0ZXJuIENQUFN0cnVjdCAqY3BwOworaW50IElu
aXRDUFBTdHJ1Y3Qodm9pZCk7CitpbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOworaW50
IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOworaW50IFNjYW5G
cm9tU3RyaW5nKGNoYXIgKnMpOworY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRh
YmxlLCBpbnQgYXRvbSk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Nj
YW5uZXIuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2NCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBz
b2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRp
b24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVz
IGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhl
c2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRv
IHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZl
CitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJ
RElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2Us
IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92
aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11
c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3Ry
aWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRl
bWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUK
K05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
biBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNl
LCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdy
YW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55
IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQor
d29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkg
YmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKwor
VEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF
WFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQg
T1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9E
VUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkg
V0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJ
U1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdI
RVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvLworLy8gc2Nhbm5lci5jCisvLworCisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKworI2lmIDAKKyAgICAjaW5jbHVkZSA8aWVlZWZwLmg+CisgICAgI2Vsc2UKKyAgICAj
ZGVmaW5lIGlzaW5mZih4KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAw
MDBMKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdm
ZmZmZkwpPT0wMDAwMDAwMDAwTCkpCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworCit0eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7
CisgICAgSW5wdXRTcmMgYmFzZTsKKyAgICBjaGFyICpwOworfSBTdHJpbmdJbnB1dFNyYzsKKwor
c3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQor
eworICAgIHJldHVybiBFT0Y7Cit9IC8vIGVvZl9zY2FuCisKK3N0YXRpYyB2b2lkIG5vb3AoSW5w
dXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7fQorCitzdGF0aWMgSW5w
dXRTcmMgZW9mX2lucHV0c3JjID0geyAwLCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AgfTsK
Kworc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHAp
OworCisjZGVmaW5lIEVPTF9TWSAnXG4nCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNk
ZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBfX2FzbSBpbnQgMworI2VsaWYgZGVmaW5lZChfTV9BTUQ2
NCkKKyAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgYXNzZXJ0KCEiRGJnX0JyZWFrcG9pbnQi
KTsKKyNlbHNlCisgICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpCisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9NX0FNRDY0KQorICAgIF9faW50NjQgUkRUU0Mg
KCB2b2lkICkgeworCisgICAgICAgIF9faW50NjQgdjsKKyAgICAKKyAgICAgICAgX19hc20gX19l
bWl0IDB4MGYKKyAgICAgICAgX19hc20gX19lbWl0IDB4MzEKKyAgICAgICAgX19hc20gbW92IGR3
b3JkIHB0ciB2LCBlYXgKKyAgICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2KzQsIGVkeAorICAg
IAorICAgICAgICByZXR1cm4gdjsKKyAgICB9CisjZW5kaWYKKworCitpbnQgSW5pdFNjYW5uZXIo
Q1BQU3RydWN0ICpjcHApCit7CisgICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRo
ZSBDUFAgbGluZSBzY2FubmVyOgorICAgIGlmICghSW5pdENQUCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGNwcC0+bW9zdFJlY2VudFRva2VuID0gMDsKKyAgICBjcHAtPnRva2VuTG9jID0g
JmNwcC0+bHRva2VuTG9jOworCisgICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IDA7CisgICAgY3Bw
LT5sdG9rZW5Mb2MubGluZSA9IDA7CisKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZlb2ZfaW5w
dXRzcmM7CisgICAgY3BwLT5wcmV2aW91c190b2tlbiA9ICdcbic7CisgICAgY3BwLT5wYXN0Rmly
c3RTdGF0ZW1lbnQgPSAwOworCisgICAgcmV0dXJuIDE7Cit9IC8vIEluaXRTY2FubmVyCisKK2lu
dCBGcmVlU2Nhbm5lcih2b2lkKQoreworICAgIHJldHVybiAoRnJlZUNQUCgpKTsKK30KKworLyoK
KyAqIHN0cl9nZXRjaCgpCisgKiB0YWtlcyBjYXJlIG9mIHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBz
dHJpbmdzLgorICogcmV0dXJucyB0aGUgbmV4dC1jaGFyIGZyb20gdGhlIGlucHV0IHN0cmVhbS4K
KyAqIHJldHVybnMgRU9GIHdoZW4gdGhlIGNvbXBsZXRlIHNoYWRlciBpcyBwYXJzZWQuCisgKi8K
K3N0YXRpYyBpbnQgc3RyX2dldGNoKFN0cmluZ0lucHV0U3JjICppbikKK3sKKwlmb3IoOzspewor
CSAgIGlmICgqaW4tPnApeworCSAgICAgIGlmICgqaW4tPnAgPT0gJ1xuJykgeworICAgICAgICAg
ICAgIGluLT5iYXNlLmxpbmUrKzsKKyAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CisgICAg
ICAgICAgfQorICAgICAgICAgIHJldHVybiAqaW4tPnArKzsKKwkgICB9CisJICAgaWYoKysoY3Bw
LT5QYVdoaWNoU3RyKSA8IGNwcC0+UGFBcmdjKXsKKwkJICBmcmVlKGluKTsKKwkJICBTZXRTdHJp
bmdOdW1iZXIoY3BwLT5QYVdoaWNoU3RyKTsKKyAgICAJICBTZXRMaW5lTnVtYmVyKDEpOworCQkg
IFNjYW5Gcm9tU3RyaW5nKGNwcC0+UGFBcmd2W2NwcC0+UGFXaGljaFN0cl0pOworCQkgIGluPShT
dHJpbmdJbnB1dFNyYyopY3BwLT5jdXJyZW50SW5wdXQ7CisJICAgICAgY29udGludWU7ICAgICAg
ICAgICAgIAorCSAgIH0KKwkgICBlbHNleworCSAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4t
PmJhc2UucHJldjsKKwkgICAgICBjcHAtPlBhV2hpY2hTdHI9MDsKKyAgICAgICAgICBmcmVlKGlu
KTsKKyAgICAgICAgICByZXR1cm4gRU9GOworICAgICAgIH0gIAorCX0KK30gLy8gc3RyX2dldGNo
CisKK3N0YXRpYyB2b2lkIHN0cl91bmdldGNoKFN0cmluZ0lucHV0U3JjICppbiwgaW50IGNoLCB5
eXN0eXBlcHAgKnR5cGUpIHsKKyAgICBpZiAoaW4tPnBbLTFdID09IGNoKWluLT5wLS07CisJZWxz
ZSB7CisJCSooaW4tPnApPSdcMCc7IC8vdGhpcyB3b3VsZCB0YWtlIGNhcmUgb2Ygc2hpZnRpbmcg
dG8gdGhlIHByZXZpb3VzIHN0cmluZy4KKwkgICAgY3BwLT5QYVdoaWNoU3RyLS07CisJfSAgCisJ
aWYgKGNoID09ICdcbicpIHsKKyAgICAgICAgaW4tPmJhc2UubGluZS0tOworICAgICAgICBEZWNM
aW5lTnVtYmVyKCk7CisgICAgfQorfSAvLyBzdHJfdW5nZXRjaAorCitpbnQgU2NhbkZyb21TdHJp
bmcoY2hhciAqcykKK3sKKyAgICAKKwlTdHJpbmdJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9m
KFN0cmluZ0lucHV0U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2YoU3RyaW5nSW5wdXRT
cmMpKTsKKwlpbi0+cCA9IHM7CisgICAgaW4tPmJhc2UubGluZSA9IDE7CisgICAgaW4tPmJhc2Uu
c2NhbiA9IGJ5dGVfc2NhbjsKKyAgICBpbi0+YmFzZS5nZXRjaCA9IChpbnQgKCopKElucHV0U3Jj
ICosIHl5c3R5cGVwcCAqKSlzdHJfZ2V0Y2g7CisgICAgaW4tPmJhc2UudW5nZXRjaCA9ICh2b2lk
ICgqKShJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKSlzdHJfdW5nZXRjaDsKKyAgICBpbi0+
YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAm
aW4tPmJhc2U7CisKKyAgICByZXR1cm4gMTsKK30gLy8gU2NhbkZyb21TdHJpbmc7CisKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50czogLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLyoKKyAqIGxCdWlsZEZsb2F0VmFsdWUoKSAtIFF1aWNrIGFuZCBkaXJ0eSBjb252ZXJzaW9u
IHRvIGZsb2F0aW5nIHBvaW50LiAgU2luY2UgYWxsCisgKiAgICAgICAgIHdlIG5lZWQgaXMgc2lu
Z2xlIHByZWNpc2lvbiB0aGlzIHNob3VsZCBiZSBxdWl0ZSBwcmVjaXNlLgorICovCisKK3N0YXRp
YyBmbG9hdCBsQnVpbGRGbG9hdFZhbHVlKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGV4
cCkKK3sKKyAgICBkb3VibGUgdmFsLCBleHB2YWwsIHRlbjsKKyAgICBpbnQgaWksIGxsZW4sIGFi
c2V4cDsKKyAgICBmbG9hdCBydjsKKworICAgIHZhbCA9IDAuMDsKKyAgICBsbGVuID0gbGVuOwor
ICAgIGZvciAoaWkgPSAwOyBpaSA8IGxlbjsgaWkrKykKKyAgICAgICAgdmFsID0gdmFsKjEwLjAg
KyAoc3RyW2lpXSAtICcwJyk7CisgICAgaWYgKGV4cCAhPSAwKSB7CisgICAgICAgIGFic2V4cCA9
IGV4cCA+IDAgPyBleHAgOiAtZXhwOworICAgICAgICBleHB2YWwgPSAxLjBmOworICAgICAgICB0
ZW4gPSAxMC4wOworICAgICAgICB3aGlsZSAoYWJzZXhwKSB7CisgICAgICAgICAgICBpZiAoYWJz
ZXhwICYgMSkKKyAgICAgICAgICAgICAgICBleHB2YWwgKj0gdGVuOworICAgICAgICAgICAgdGVu
ICo9IHRlbjsKKyAgICAgICAgICAgIGFic2V4cCA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZXhwID49IDApIHsKKyAgICAgICAgICAgIHZhbCAqPSBleHB2YWw7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YWwgLz0gZXhwdmFsOworICAgICAgICB9CisgICAgfQorICAgIHJ2
ID0gKGZsb2F0KXZhbDsKKyAgICBpZiAoaXNpbmZmKHJ2KSkgeworCQlDUFBFcnJvclRvSW5mb0xv
ZygiIEVSUk9SX19fRlBfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICB9CisgICAgcmV0dXJuIHJ2Owor
fSAvLyBsQnVpbGRGbG9hdFZhbHVlCisKKworLyoKKyAqIGxGbG9hdENvbnN0KCkgLSBTY2FuIGEg
ZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICBBc3N1bWVzIHRoYXQgdGhlIHNjYW5uZXIKKyAqICAg
ICAgICAgaGFzIHNlZW4gYXQgbGVhc3Qgb25lIGRpZ2l0LCBmb2xsb3dlZCBieSBlaXRoZXIgYSBk
ZWNpbWFsICcuJyBvciB0aGUKKyAqICAgICAgICAgbGV0dGVyICdlJy4KKyAqLworCitzdGF0aWMg
aW50IGxGbG9hdENvbnN0KGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKK3sKKyAgICBpbnQgSGFzRGVjaW1hbCwgZGVjbGVuLCBleHAsIEV4cFNpZ247Cisg
ICAgaW50IHN0cl9sZW47CisgICAgZmxvYXQgbHZhbDsKKyAgICAKKyAgICBIYXNEZWNpbWFsID0g
MDsKKyAgICBkZWNsZW4gPSAwOworICAgIGV4cCA9IDA7CisJCisgICAgc3RyX2xlbj1sZW47Cisg
ICAgaWYgKGNoID09ICcuJykgeworCQlzdHJbbGVuKytdPWNoOworICAgICAgICBIYXNEZWNpbWFs
ID0gMTsKKyAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScp
IHsKKyAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAg
ICAgICAgICAgZGVjbGVuKys7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0g
JzAnKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cltsZW5dID0gY2g7CisgICAgICAgICAgICAg
ICAgICAgIGxlbisrO3N0cl9sZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIkVSUk9SX19fRlBfQ09OU1RfVE9PX0xPTkciKTsKKyAgICAgICAgICAgICAgICBsZW4g
PSAxLHN0cl9sZW49MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEV4cG9uZW50OgorCisgICAgaWYgKGNoID09ICdlJyB8fCBjaCA9PSAnRScpIHsKKyAgICAgICAg
RXhwU2lnbiA9IDE7CisJCXN0cltsZW4rK109Y2g7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIGlmIChj
aCA9PSAnKycpIHsKKyAgICAgICAgICAgIHN0cltsZW4rK109Y2g7ICAKKwkJCWNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT0gJy0nKSB7CisgICAgICAgICAgICBFeHBTaWduID0gLTE7CisJCQlz
dHJbbGVuKytdPWNoOworICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2gg
Pj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBleHAgPSBleHAqMTAgKyBjaCAtICcwJzsKKwkJ
CQlzdHJbbGVuKytdPWNoOworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FUlJP
Ul9JTl9FWFBPTkVOVCIpOworICAgICAgICB9CisgICAgICAgIGV4cCAqPSBFeHBTaWduOworICAg
IH0KKyAgICAgIAorICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICBsdmFsID0gMC4wZjsKKwkJ
c3RyY3B5KHN0ciwiMC4wIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyW2xlbl09J1wwJzsg
ICAgICAKKyAgICAgICAgbHZhbCA9IGxCdWlsZEZsb2F0VmFsdWUoc3RyLCBzdHJfbGVuLCBleHAg
LSBkZWNsZW4pOworICAgIH0KKyAgICAvLyBTdWZmaXg6CisgICAgCisgICAgeXlsdmFscHAtPnNj
X2Z2YWwgPSBsdmFsOworICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3RyKTsKKyAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsgICAgICAgICAgICAKKyAgICByZXR1cm4gQ1BQX0ZMT0FUQ09OU1RBTlQ7Cit9IC8vIGxG
bG9hdENvbnN0CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBOb3JtYWwgU2Nhbm5lciAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKyAgICAKK3N0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICpp
biwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lN
Qk9MX05BTUVfTEVOICsgMV07CisgICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsg
MV07CisgICAgaW50IEFscmVhZHlDb21wbGFpbmVkOworICAgIGludCBsZW4sIGNoLCBpaSwgaXZh
bCA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOwor
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworCQkKKyAgICAgICAgd2hpbGUgKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8
IGNoID09ICdccicpIHsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAxOworICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgfQorCQkKKyAgICAgICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IGNw
cC0+Y3VycmVudElucHV0LT5uYW1lOworICAgICAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgICAgIGxlbiA9IDA7CisgICAgICAgIHN3aXRjaCAo
Y2gpIHsKKyAgICAgICAgZGVmYXVsdDoKKwkJCXJldHVybiBjaDsgLy8gU2luZ2xlIGNoYXJhY3Rl
ciB0b2tlbgorICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwkJY2Fz
ZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICBj
YXNlICdGJzogY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6CisgICAgICAg
IGNhc2UgJ0snOiBjYXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKKyAgICAg
ICAgY2FzZSAnUCc6IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgorICAg
ICAgICBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6Cisg
ICAgICAgIGNhc2UgJ1onOiBjYXNlICdfJzoKKyAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBj
YXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgorICAgICAgICBjYXNlICdmJzogY2FzZSAnZyc6
IGNhc2UgJ2gnOiBjYXNlICdpJzogY2FzZSAnaic6CisgICAgICAgIGNhc2UgJ2snOiBjYXNlICds
JzogY2FzZSAnbSc6IGNhc2UgJ24nOiBjYXNlICdvJzoKKyAgICAgICAgY2FzZSAncCc6IGNhc2Ug
J3EnOiBjYXNlICdyJzogY2FzZSAncyc6IGNhc2UgJ3QnOgorICAgICAgICBjYXNlICd1JzogY2Fz
ZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6CisgICAgICAgIGNhc2UgJ3onOiAg
ICAgICAgICAgIAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBN
QVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CQkJCQkKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYg
Y2ggPD0gJ3onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAn
WicpIHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwK
KyAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJyk7CisgICAgICAgICAgICBpZiAobGVuID49
IE1BWF9TWU1CT0xfTkFNRV9MRU4pCisgICAgICAgICAgICAgICAgbGVuID0gTUFYX1NZTUJPTF9O
QU1FX0xFTiAtIDE7CisgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAg
ICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwg
eXlsdmFscHApOworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElG
SUVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICAgICAg
eXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7CisJCQkJeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbisrXSA9IGNoOworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAg
aWYgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAoY2gg
Pj0gJ0EnICYmIGNoIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgKGNoID49ICdhJyAm
JiBjaCA8PSAnZicpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQWxy
ZWFkeUNvbXBsYWluZWQgPSAwOworICAgICAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgZG8geworCQkJCQkJeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9
IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl2YWwgPD0gMHgwZmZmZmZmZikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnQScgKyAxMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCA0KSB8IGlp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19IRVhfQ09OU1RfT1ZFUkZMT1ciKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIkVSUk9SX19fRVJST1JfSU5fSEVYX0NPTlNUQU5UIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKwkJCQlj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKwkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Q1BQX0lOVENPTlNUQU5UOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzcnKSB7IC8vIG9jdGFsIGludGVnZXIgY29uc3RhbnRzCisgICAgICAgICAgICAgICAgQWxy
ZWFkeUNvbXBsYWluZWQgPSAwOworICAgICAgICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBpZiAoaXZhbCA8PSAweDFmZmZmZmZmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAg
ICAgICAgICAgaXZhbCA9IChpdmFsIDw8IDMpIHwgaWk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fT0NU
X0NPTlNUX09WRVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxh
aW5lZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAnZicgfHwgY2gg
PT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgCisgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwor
CQkJCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOworCQkJCXl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfSU5UQ09OU1RBTlQ7CisgICAgICAgICAgICB9IGVsc2UgeworCQkJCWNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworCQkJ
CWNoID0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4u
CisgICAgICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICAgICAg
ICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAg
ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9M
RU4pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgfHwgY2ggIT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9IGNoOwor
ICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNo
ID09ICdlJyB8fCBjaCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdF
JykgeworICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3ltYm9s
X25hbWUsIGxlbiwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworCQkJCWNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAg
ICAgICAgICAgICAgIGl2YWwgPSAwOworICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVk
ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2ggPSB5eWx2YWxwcC0+c3ltYm9sX25hbWVbaWldIC0gJzAnOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPiAyMTQ3NDgzNjQpIHx8IChpdmFsID09IDIx
NDc0ODM2NCAmJiBjaCA+PSA4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJl
YWR5Q29tcGxhaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJFUlJPUl9fX0lOVEVHRVJfQ09OU1RfT1ZFUkZMT1ciKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpdmFsID0gaXZhbCoxMCArIGNoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAg
ICBpZihpdmFsPT0wKQorICAgICAgICAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9s
X25hbWUsIjAiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX0RFQ19PUDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz0nKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9TVUJfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJy0nOworICAg
ICAgICAgICAgfQorICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTkNfT1A7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVy
biBDUFBfQUREX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcrJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSAnKic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9Jykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTVVMX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcqJzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAg
ICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTU9EX0FTU0lH
TjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKXsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX1JJR0hUX0JSQUNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyUnOworICAgICAgICAgICAgfQorICAg
ICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJz4n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDS0VUOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
JzonOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICBpZiAoY2ggPT0gJ14nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9Y
T1JfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAn
PScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfWE9SX0FTU0lHTjsKKyAgICAgICAg
ICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJ14nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAn
PScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0VRX09QOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJz0nOwor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ORV9PUDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICchJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnfCc6CisgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICd8JykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfT1JfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfT1JfQVNTSUdOOwor
ICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1
dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
ICAgICAgIHJldHVybiAnfCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyYn
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BTkRfT1A7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfQU5EX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgaWYgKGNoID09ICc8JykgeworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgaWYoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xF
RlRfQVNTSUdOOworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfT1A7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0n
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVfT1A7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICclJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDRTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY2ggPT0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9MRUZUX0JSQUNLRVQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPCc7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPicp
IHsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9BU1NJR047CisgICAgICAgICAgICAg
ICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfUklHSFRfT1A7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfR0VfT1A7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPic7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdCh5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIDAsICcuJywgeXlsdmFscHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAt
MTsgLy8gU3BlY2lhbCBFT0YgaGFjaworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy4nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICAgICAgaWYgKGNoID09ICcvJykgeworICAgICAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAn
XG4nICYmIGNoICE9IEVPRik7CisgICAgICAgICAgICAgICAgaWYgKGNoID09IEVPRikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAnXG4nOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBpbnQg
bmxjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCAhPSAnKicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaCA9PSAnXG4nKSBubGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gRU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIkVSUk9SX19fRU9GX0lOX0NPTU1FTlQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAnLycpOworICAgICAgICAgICAgICAg
IGlmIChubGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXG4nOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBHbyB0cnkgaXQgYWdhaW4uLi4KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9ESVZfQVNTSUdOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjcHAt
PmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJy8nOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHdo
aWxlIChjaCAhPSAnIicgJiYgY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiVGhlIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9m
IHRoZSBPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSIpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsZW4gPCBN
QVhfU1RSSU5HX0xFTikgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSBj
aDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHN0cmluZ192YWxb
bGVuXSA9ICdcMCc7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyInKSB7CisgICAgICAgICAgICAg
ICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3Zh
bCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9TVFJDT05TVEFOVDsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fQ1BQ
X0VPTF9JTl9TVFJJTkciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfU1k7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9IC8vIGJ5dGVfc2NhbgorCitpbnQgeXlsZXhf
Q1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCit7ICAgIAorCXl5c3R5cGVwcCB5eWx2YWxwcDsK
KyAgICBpbnQgdG9rZW4gPSAnXG4nOyAgIAorCisgICAgZm9yKDs7KSB7CisKKyAgICAgICAgY2hh
ciogdG9rZW5TdHJpbmcgPSAwOworICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCAmeXlsdmFscHApOworCQlpZihjaGVja19FT0YodG9rZW4p
KQorCQkgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh0b2tlbiA9PSAnIycpIHsKKyAgICAgICAg
ICAgIGlmIChjcHAtPnByZXZpb3VzX3Rva2VuID09ICdcbid8fCBjcHAtPnByZXZpb3VzX3Rva2Vu
ID09IDApIHsKKwkJCSAgICB0b2tlbiA9IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgaWYoY2hlY2tfRU9GKHRva2VuKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisJCQkgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNzb3IgY29tbWFuZCBtdXN0IG5vdCBiZSBw
cmVjZWRlZCBieSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoYXQgbGluZSIpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNwcC0+
cHJldmlvdXNfdG9rZW4gPSB0b2tlbjsKKyAgICAgICAgLy8gZXhwYW5kIG1hY3JvcworICAgICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAuc2Nf
aWRlbnQsICZ5eWx2YWxwcCkpIHsKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50
ID0gMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAodG9rZW4gPT0gJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIAor
ICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisgICAgICAgICAgICB0b2tl
blN0cmluZyA9IEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOworICAg
ICAgICB9IGVsc2UgaWYgKHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UfHx0b2tlbiA9PSBDUFBf
SU5UQ09OU1RBTlQpeyAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3Rh
dGVtZW50ID0gMTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuU3RyaW5nID0geXlsdmFs
cHAuc3ltYm9sX25hbWU7CisJCX0gZWxzZSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7ICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlblN0
cmluZyA9IEdldFN0cmluZ09mQXRvbShhdGFibGUsdG9rZW4pOworCSAgICB9CisKKyAgICAgICAg
aWYgKHRva2VuU3RyaW5nKSB7CisgICAgICAgICAgICBpZiAoKHNpZ25lZClzdHJsZW4odG9rZW5T
dHJpbmcpID49IG1heFNpemUpIHsKKyAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVP
RiA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1heFNpemU7ICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICB9IGVsc2UgIGlmIChzdHJsZW4odG9rZW5TdHJpbmcpID4gMCkgeworCQkJICAg
IHN0cmNweShidWYsIHRva2VuU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0Jl
Zm9yZUVPRiA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpc3RybGVuKHRva2VuU3Ry
aW5nKTsKKyAgICAgICAgICAgIH0gIAorCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAwOworfSAvLyB5eWxleAorCisvL0NoZWNrcyBpZiB0aGUg
dG9rZW4ganVzdCByZWFkIGlzIEVPRiBvciBub3QuCitpbnQgY2hlY2tfRU9GKGludCB0b2tlbikK
K3sKKyAgIGlmKHRva2VuPT0tMSl7CisgICAgICAgaWYoY3BwLT5pZmRlcHRoID4wKXsKKwkJQ1BQ
RXJyb3JUb0luZm9Mb2coIiNlbmRpZiBtaXNzaW5nISEgQ29tcGlsYXRpb24gc3RvcHBlZCIpOwor
ICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgIH0KKyAgICAgIHJldHVybiAxOwor
ICAgfQorICAgcmV0dXJuIDA7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHNj
YW5uZXIuYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAy
MDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikg
c3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0
aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdh
cmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90
IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFs
LCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRo
aXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8g
dXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3
YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5h
cnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBT
b2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEs
IHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBh
bGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIg
dGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQor
Q29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVk
IGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3Ig
aW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QK
K2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlv
dXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJ
QSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQg
aGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBB
TiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1J
VEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VN
RU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBP
UgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBX
SVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJM
RSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQ
Uk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1Ig
QVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklD
QVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZF
UiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJ
RgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gc2Nhbm5lci5oCisvLworCisjaWYg
IWRlZmluZWQoX19TQ0FOTkVSX0gpCisjZGVmaW5lIF9fU0NBTk5FUl9IIDEKKworI2RlZmluZSBN
QVhfU1lNQk9MX05BTUVfTEVOIDEyOAorI2RlZmluZSBNQVhfU1RSSU5HX0xFTiA1MTIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKworLy8gTm90IHJlYWxseSBh
dG9tIHRhYmxlIHN0dWZmIGJ1dCBuZWVkZWQgZmlyc3QuLi4KKwordHlwZWRlZiBzdHJ1Y3QgU291
cmNlTG9jX1JlYyB7CisgICAgdW5zaWduZWQgc2hvcnQgZmlsZSwgbGluZTsKK30gU291cmNlTG9j
OworCitpbnQgeXlwYXJzZSAodm9pZCk7CisKK2ludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQg
bWF4U2l6ZSk7CisKK3R5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKKyAgICBzdHJ1Y3QgSW5wdXRT
cmMJKnByZXY7CisgICAgaW50CQkJKCpzY2FuKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlzdHlwZXBw
ICopOworICAgIGludAkJCSgqZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7
CisgICAgdm9pZAkJKCp1bmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAg
Kik7CisgICAgaW50CQkJbmFtZTsgIC8qIGF0b20gKi8KKyAgICBpbnQJCQlsaW5lOworfSBJbnB1
dFNyYzsKKworaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2Ug
dGhlIGNwcCBzY2FubmVyLiAKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICopOyAgICAgIC8vIFN0
YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgoraW50IGNo
ZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVw
dGx5IAordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBt
c2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwordm9pZCBTZXRMaW5lTnVtYmVyKGlu
dCk7Cit2b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwordm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQp
Owordm9pZCBEZWNMaW5lTnVtYmVyKHZvaWQpOworaW50IEZyZWVTY2FubmVyKHZvaWQpOyAgICAg
ICAgICAgICAgICAgLy8gRnJlZSB0aGUgY3BwIHNjYW5uZXIKKyNlbmRpZiAvLyAhKGRlZmluZWQo
X19TQ0FOTkVSX0gpCisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKy8vIHNsZ2xvYmFscy5oCisvLworCisjaWYgIWRlZmluZWQo
X19TTEdMT0JBTFNfSCkKKyNkZWZpbmUgX19TTEdMT0JBTFNfSCAxCisKK3R5cGVkZWYgc3RydWN0
IENQUFN0cnVjdF9SZWMgQ1BQU3RydWN0OworCitleHRlcm4gQ1BQU3RydWN0ICpjcHA7CisKKyN1
bmRlZiAgQ1BQQ19ERUJVR19USEVfQ09NUElMRVIKKyNpZiBkZWZpbmVkKF9ERUJVRykKKyNkZWZp
bmUgQ1BQQ19ERUJVR19USEVfQ09NUElMRVIgMQorI2VuZGlmCisKKyN1bmRlZiAgQ1BQQ19FTkFC
TEVfVE9PTFMKKyNkZWZpbmUgQ1BQQ19FTkFCTEVfVE9PTFMgMQorCisjaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3Rva2Vucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCIKKyNp
ZiAhZGVmaW5lZChOT19QQVJTRVIpCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Bh
cnNlci5oIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOVUxMKQorI2RlZmluZSBOVUxMIDAKKyNl
bmRpZgorCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCisKKworICAgIAorCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI4OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJ
QSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4K
K2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRp
b24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhl
c2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2Ug
ZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQor
c29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUg
YnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklE
SUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBO
VklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUK
KyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0
cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
cywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSBy
ZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29w
eXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0
ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5W
SURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFy
a3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4
Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMg
b3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhl
cmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhh
dCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIg
d29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4g
Tm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FS
RSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQs
CitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBB
TE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZF
TlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5D
SURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVT
RSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUK
K05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZ
IE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklM
SVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLwor
Ly8gc3ltYm9scy5jCisvLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zbGdsb2JhbHMuaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN5bWJvbCBUYWJsZSBWYXJpYWJs
ZXM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitTY29wZSAqU2NvcGVMaXN0ID0gTlVMTDsKK1Njb3Bl
ICpDdXJyZW50U2NvcGUgPSBOVUxMOworU2NvcGUgKkdsb2JhbFNjb3BlID0gTlVMTDsKKworc3Rh
dGljIHZvaWQgdW5saW5rU2NvcGUodm9pZCAqX3Njb3BlKSB7CisgICAgU2NvcGUgKnNjb3BlID0g
X3Njb3BlOworCisgICAgaWYgKHNjb3BlLT5uZXh0KQorICAgICAgICBzY29wZS0+bmV4dC0+cHJl
diA9IHNjb3BlLT5wcmV2OworICAgIGlmIChzY29wZS0+cHJldikKKyAgICAgICAgc2NvcGUtPnBy
ZXYtPm5leHQgPSBzY29wZS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIFNjb3BlTGlzdCA9IHNj
b3BlLT5uZXh0OworfQorCisvKgorICogTmV3U2NvcGUoKQorICoKKyAqLworU2NvcGUgKk5ld1Nj
b3BlSW5Qb29sKE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAg
IGxTY29wZSA9IG1lbV9BbGxvYyhwb29sLCBzaXplb2YoU2NvcGUpKTsKKyAgICBsU2NvcGUtPnBv
b2wgPSBwb29sOworICAgIGxTY29wZS0+cGFyZW50ID0gTlVMTDsKKyAgICBsU2NvcGUtPmZ1blNj
b3BlID0gTlVMTDsKKyAgICBsU2NvcGUtPnN5bWJvbHMgPSBOVUxMOworICAgIAorICAgIGxTY29w
ZS0+bGV2ZWwgPSAwOworCisgICAgbFNjb3BlLT5wcm9ncmFtcyA9IE5VTEw7CisgICAgaWYgKChs
U2NvcGUtPm5leHQgPSBTY29wZUxpc3QpKQorICAgICAgICBTY29wZUxpc3QtPnByZXYgPSBsU2Nv
cGU7CisgICAgbFNjb3BlLT5wcmV2ID0gMDsKKyAgICBTY29wZUxpc3QgPSBsU2NvcGU7CisgICAg
bWVtX0FkZENsZWFudXAocG9vbCwgdW5saW5rU2NvcGUsIGxTY29wZSk7CisgICAgcmV0dXJuIGxT
Y29wZTsKK30gLy8gTmV3U2NvcGUKKworLyoKKyAqIFB1c2hTY29wZSgpCisgKgorICovCisKK3Zv
aWQgUHVzaFNjb3BlKFNjb3BlICpmU2NvcGUpCit7CisgICAgU2NvcGUgKmxTY29wZTsKKworICAg
IGlmIChDdXJyZW50U2NvcGUpIHsKKyAgICAgICAgZlNjb3BlLT5sZXZlbCA9IEN1cnJlbnRTY29w
ZS0+bGV2ZWwgKyAxOworICAgICAgICBpZiAoZlNjb3BlLT5sZXZlbCA9PSAxKSB7CisgICAgICAg
ICAgICBpZiAoIUdsb2JhbFNjb3BlKSB7CisgICAgICAgICAgICAgICAgLyogSEFDSyAtIENURCAt
LSBpZiBHbG9iYWxTY29wZT09TlVMTCBhbmQgbGV2ZWw9PTEsIHdlJ3JlCisgICAgICAgICAgICAg
ICAgICogZGVmaW5pbmcgYSBmdW5jdGlvbiBpbiB0aGUgc3VwZXJnbG9iYWwgc2NvcGUuICBUaGlu
Z3MKKyAgICAgICAgICAgICAgICAgKiB3aWxsIGJyZWFrIGlmIHdlIGxlYXZlIHRoZSBsZXZlbCBh
cyAxLCBzbyB3ZSBhcmJpdHJhcmlseQorICAgICAgICAgICAgICAgICAqIHNldCBpdCB0byAyICov
CisgICAgICAgICAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGZTY29wZS0+bGV2ZWwgPj0gMikgeworICAgICAgICAgICAgbFNj
b3BlID0gZlNjb3BlOworICAgICAgICAgICAgd2hpbGUgKGxTY29wZS0+bGV2ZWwgPiAyKQorICAg
ICAgICAgICAgICAgIGxTY29wZSA9IGxTY29wZS0+bmV4dDsKKyAgICAgICAgICAgIGZTY29wZS0+
ZnVuU2NvcGUgPSBsU2NvcGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmU2Nv
cGUtPmxldmVsID0gMDsKKyAgICB9CisgICAgZlNjb3BlLT5wYXJlbnQgPSBDdXJyZW50U2NvcGU7
CisgICAgQ3VycmVudFNjb3BlID0gZlNjb3BlOworfSAvLyBQdXNoU2NvcGUKKworLyoKKyAqIFBv
cFNjb3BlKCkKKyAqCisgKi8KKworU2NvcGUgKlBvcFNjb3BlKHZvaWQpCit7CisgICAgU2NvcGUg
KmxTY29wZTsKKworICAgIGxTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBpZiAoQ3VycmVudFNj
b3BlKQorICAgICAgICBDdXJyZW50U2NvcGUgPSBDdXJyZW50U2NvcGUtPnBhcmVudDsKKyAgICBy
ZXR1cm4gbFNjb3BlOworfSAvLyBQb3BTY29wZQorCisvKgorICogTmV3U3ltYm9sKCkgLSBBbGxv
Y2F0ZSBhIG5ldyBzeW1ib2wgbm9kZTsKKyAqCisgKi8KKworU3ltYm9sICpOZXdTeW1ib2woU291
cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpCit7
CisgICAgU3ltYm9sICpsU3ltYjsKKyAgICBjaGFyICpwY2g7CisgICAgaW50IGlpOworCisgICAg
bFN5bWIgPSAoU3ltYm9sICopIG1lbV9BbGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wp
KTsKKyAgICBsU3ltYi0+bGVmdCA9IE5VTEw7CisgICAgbFN5bWItPnJpZ2h0ID0gTlVMTDsKKyAg
ICBsU3ltYi0+bmV4dCA9IE5VTEw7CisgICAgbFN5bWItPm5hbWUgPSBuYW1lOworICAgIGxTeW1i
LT5sb2MgPSAqbG9jOworICAgIGxTeW1iLT5raW5kID0ga2luZDsKKyAgICAKKyAgICAvLyBDbGVh
ciB1bmlvbiBhcmVhOgorCisgICAgcGNoID0gKGNoYXIgKikgJmxTeW1iLT5kZXRhaWxzOworICAg
IGZvciAoaWkgPSAwOyBpaSA8IHNpemVvZihsU3ltYi0+ZGV0YWlscyk7IGlpKyspCisgICAgICAg
ICpwY2grKyA9IDA7CisgICAgcmV0dXJuIGxTeW1iOworfSAvLyBOZXdTeW1ib2wKKworLyoKKyAq
IGxBZGRUb1RyZWUoKSAtIFVzaW5nIGEgYmluYXJ5IHRyZWUgaXMgbm90IGEgZ29vZCBpZGVhIGZv
ciBiYXNpYyBhdG9tIHZhbHVlcyBiZWNhdXNlIHRoZXkKKyAqICAgICAgICAgYXJlIGdlbmVyYXRl
ZCBpbiBvcmRlci4gIFdlJ2xsIGZpeCB0aGlzIGxhdGVyIChieSByZXZlcnNpbmcgdGhlIGJpdCBw
YXR0ZXJuKS4KKyAqLworCitzdGF0aWMgdm9pZCBsQWRkVG9UcmVlKFN5bWJvbCAqKmZTeW1ib2xz
LCBTeW1ib2wgKmZTeW1iKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgaW50IGxyZXYsIGZy
ZXY7CisKKyAgICBsU3ltYiA9ICpmU3ltYm9sczsKKyAgICBpZiAobFN5bWIpIHsKKyAgICAgICAg
ZnJldiA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGZTeW1iLT5uYW1lKTsKKyAgICAgICAgd2hp
bGUgKGxTeW1iKSB7CisgICAgICAgICAgICBscmV2ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwg
bFN5bWItPm5hbWUpOworICAgICAgICAgICAgaWYgKGxyZXYgPT0gZnJldikgeworICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJHZXRBdG9tU3RyaW5nKGF0YWJsZSwgZlN5bWItPm5h
bWUpIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChscmV2ID4gZnJldikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bFN5bWItPmxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxl
ZnQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsU3ltYi0+bGVmdCA9IGZTeW1iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobFN5bWItPnJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
U3ltYiA9IGxTeW1iLT5yaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxTeW1iLT5yaWdodCA9IGZTeW1iOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAqZlN5bWJv
bHMgPSBmU3ltYjsKKyAgICB9Cit9IC8vIGxBZGRUb1RyZWUKKworCisvKgorICogQWRkU3ltYm9s
KCkgLSBBZGQgYSB2YXJpYWJsZSwgdHlwZSwgb3IgZnVuY3Rpb24gbmFtZSB0byBhIHNjb3BlLgor
ICoKKyAqLworCitTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29w
ZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCkKK3sKKyAgICBTeW1ib2wgKmxTeW1iOworCisg
ICAgaWYgKCFmU2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBsU3lt
YiA9IE5ld1N5bWJvbChsb2MsIGZTY29wZSwgYXRvbSwga2luZCk7CisgICAgbEFkZFRvVHJlZSgm
ZlNjb3BlLT5zeW1ib2xzLCBsU3ltYik7CisgICAgcmV0dXJuIGxTeW1iOworfSAvLyBBZGRTeW1i
b2wKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTeW1ib2wgU2VtYW50aWMgRnVuY3Rpb25zICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisKKy8qCisgKiBMb29rVXBMb2NhbFN5bWJvbCgpCisgKgorICovCisKK1N5
bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pCit7CisgICAg
U3ltYm9sICpsU3ltYjsKKyAgICBpbnQgcm5hbWUsIHJhdG9tOworCisgICAgcmF0b20gPSBHZXRS
ZXZlcnNlZEF0b20oYXRhYmxlLCBhdG9tKTsKKyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNj
b3BlID0gQ3VycmVudFNjb3BlOworICAgIGxTeW1iID0gZlNjb3BlLT5zeW1ib2xzOworICAgIHdo
aWxlIChsU3ltYikgeworICAgICAgICBybmFtZSA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxT
eW1iLT5uYW1lKTsKKyAgICAgICAgaWYgKHJuYW1lID09IHJhdG9tKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbFN5bWI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocm5hbWUgPiBy
YXRvbSkgeworICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPnJpZ2h0OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfSAvLyBMb29rVXBM
b2NhbFN5bWJvbAorCisvKgorICogTG9va1VwU3ltYm9sKCkKKyAqCisgKi8KKworU3ltYm9sICpM
b29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pCit7CisgICAgU3ltYm9sICpsU3lt
YjsKKworICAgIGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7Cisg
ICAgd2hpbGUgKGZTY29wZSkgeworICAgICAgICBsU3ltYiA9IExvb2tVcExvY2FsU3ltYm9sKGZT
Y29wZSwgYXRvbSk7CisgICAgICAgIGlmIChsU3ltYikKKyAgICAgICAgICAgIHJldHVybiBsU3lt
YjsKKyAgICAgICAgZlNjb3BlID0gZlNjb3BlLT5wYXJlbnQ7CisgICAgfQorICAgIHJldHVybiBO
VUxMOworfSAvLyBMb29rVXBTeW1ib2wKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBs
aWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwg
bW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitj
b25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3Jl
ZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAor
c3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9u
LWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9y
aWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwg
cmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citm
b3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdh
cmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlz
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1
Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBu
YW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBv
cmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0
aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxp
ZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1p
dGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRl
cml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29m
dHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1
bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFT
IElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElP
TiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwg
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lU
UyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBP
VEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9S
IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklU
UzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgor
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9O
IEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FV
U0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
K1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHN5bWJvbHMuaAorLy8KKworI2lmICFkZWZp
bmVkKF9fU1lNQk9MU19IKQorI2RlZmluZSBfX1NZTUJPTFNfSCAxCisKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCisKK3R5cGVkZWYgZW51bSBzeW1ib2xraW5kIHsK
KyAgIE1BQ1JPX1MKK30gc3ltYm9sa2luZDsKKworLy8gVHlwZWRlZnMgZm9yIHRoaW5ncyBkZWZp
bmVkIGhlcmUgaW4gInN5bWJvbHMuaCI6CisKK3R5cGVkZWYgc3RydWN0IFNjb3BlX1JlYyBTY29w
ZTsKK3R5cGVkZWYgc3RydWN0IFN5bWJvbF9SZWMgU3ltYm9sOworCit0eXBlZGVmIHN0cnVjdCBT
eW1ib2xMaXN0X1JlYyB7CisgICAgc3RydWN0IFN5bWJvbExpc3RfUmVjICpuZXh0OworICAgIFN5
bWJvbCAqc3ltYjsKK30gU3ltYm9sTGlzdDsKKworc3RydWN0IFNjb3BlX1JlYyB7CisgICAgU2Nv
cGUgKm5leHQsICpwcmV2OyAgICAgLy8gZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBzY29wZXMK
KyAgICBTY29wZSAqcGFyZW50OworICAgIFNjb3BlICpmdW5TY29wZTsgICAgICAgIC8vIFBvaW50
cyB0byBiYXNlIHNjb3BlIG9mIGVuY2xvc2luZyBmdW5jdGlvbgorICAgIE1lbW9yeVBvb2wgKnBv
b2w7ICAgICAgIC8vIHBvb2wgdXNlZCBmb3IgYWxsb2NhdGlvbiBpbiB0aGlzIHNjb3BlCisgICAg
U3ltYm9sICpzeW1ib2xzOworICAgIAorCWludCBsZXZlbDsgICAgICAgICAgICAgIC8vIDAgPSBz
dXBlciBnbG9iYWxzLCAxID0gZ2xvYmFscywgZXRjLgorCisgICAgLy8gT25seSB1c2VkIGF0IGds
b2JhbCBzY29wZSAobGV2ZWwgMSk6CisgICAgU3ltYm9sTGlzdCAqcHJvZ3JhbXM7ICAgLy8gTGlz
dCBvZiBwcm9ncmFtcyBmb3IgdGhpcyBjb21waWxhdGlvbi4KK307CisKKworLy8gU3ltYm9sIHRh
YmxlIGlzIGEgc2ltcGxlIGJpbmFyeSB0cmVlLgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5oIiAgICAgICAgLy8gdG8gZ2V0IE1hY3JvU3ltYm9sIGRlZgorCitzdHJ1Y3Qg
U3ltYm9sX1JlYyB7CisgICAgU3ltYm9sICpsZWZ0LCAqcmlnaHQ7CisgICAgU3ltYm9sICpuZXh0
OworICAgIGludCBuYW1lOyAgICAgICAvLyBOYW1lIGF0b20KKyAgICBTb3VyY2VMb2MgbG9jOwor
ICAgIHN5bWJvbGtpbmQga2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIE1hY3JvU3ltYm9sIG1h
YzsKKyAgICB9IGRldGFpbHM7Cit9OworCitleHRlcm4gU2NvcGUgKkN1cnJlbnRTY29wZTsKK2V4
dGVybiBTY29wZSAqR2xvYmFsU2NvcGU7CitleHRlcm4gU2NvcGUgKlNjb3BlTGlzdDsKKworU2Nv
cGUgKk5ld1Njb3BlSW5Qb29sKE1lbW9yeVBvb2wgKik7CisjZGVmaW5lIE5ld1Njb3BlKCkgICAg
ICBOZXdTY29wZUluUG9vbChDdXJyZW50U2NvcGUtPnBvb2wpCit2b2lkIFB1c2hTY29wZShTY29w
ZSAqZlNjb3BlKTsKK1Njb3BlICpQb3BTY29wZSh2b2lkKTsKK1N5bWJvbCAqTmV3U3ltYm9sKFNv
dXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsK
K1N5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRv
bSwgc3ltYm9sa2luZCBraW5kKTsKK1N5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZT
Y29wZSwgaW50IGF0b20pOworU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50
IGF0b20pOwordm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOworCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChfX1NZTUJPTFNfSCkKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDQgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKy8vIHRva2Vucy5jCisvLworCisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxj
dHlwZS5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBU
b2tlbiBSZWNvcmRlciBhbmQgUGxheWJhY2s6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIGlkc3RyKCkKKyAq
IENvcHkgYSBzdHJpbmcgdG8gYSBtYWxsb2MnZWQgYmxvY2sgYW5kIGNvbnZlcnQgaXQgaW50byBz
b21ldGhpbmcgc3VpdGFibGUKKyAqIGZvciBhbiBJRAorICoKKyAqLworCitzdGF0aWMgY2hhciAq
aWRzdHIoY29uc3QgY2hhciAqZnN0ciwgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBzaXplX3Qg
bGVuOworICAgIGNoYXIgKnN0ciwgKnQ7CisgICAgY29uc3QgY2hhciAqZjsKKworICAgIGxlbiA9
IHN0cmxlbihmc3RyKTsKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIHN0ciA9IChjaGFyICopIG1h
bGxvYyhsZW4gKyAxKTsKKyAgICBlbHNlCisgICAgICAgIHN0ciA9IChjaGFyICopIG1lbV9BbGxv
Yyhwb29sLCBsZW4gKyAxKTsKKyAgICAKKyAgICBmb3IgKGY9ZnN0ciwgdD1zdHI7ICpmOyBmKysp
IHsKKyAgICAgICAgaWYgKGlzYWxudW0oKmYpKSAqdCsrID0gKmY7CisgICAgICAgIGVsc2UgaWYg
KCpmID09ICcuJyB8fCAqZiA9PSAnLycpICp0KysgPSAnXyc7CisgICAgfQorICAgICp0ID0gMDsK
KyAgICByZXR1cm4gc3RyOworfSAvLyBpZHN0cgorCisKKy8qCisgKiBsTmV3QmxvY2soKQorICoK
KyAqLworCitzdGF0aWMgVG9rZW5CbG9jayAqbE5ld0Jsb2NrKFRva2VuU3RyZWFtICpmVG9rLCBN
ZW1vcnlQb29sICpwb29sKQoreworICAgIFRva2VuQmxvY2sgKmxCbG9jazsKKworICAgIGlmICgh
cG9vbCkKKyAgICAgICAgbEJsb2NrID0gKFRva2VuQmxvY2sgKikgbWFsbG9jKHNpemVvZihUb2tl
bkJsb2NrKSArIDI1Nik7CisgICAgZWxzZQorICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAq
KSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuQmxvY2spICsgMjU2KTsKKyAgICBsQmxvY2st
PmNvdW50ID0gMDsKKyAgICBsQmxvY2stPmN1cnJlbnQgPSAwOworICAgIGxCbG9jay0+ZGF0YSA9
ICh1bnNpZ25lZCBjaGFyICopIGxCbG9jayArIHNpemVvZihUb2tlbkJsb2NrKTsKKyAgICBsQmxv
Y2stPm1heCA9IDI1NjsKKyAgICBsQmxvY2stPm5leHQgPSBOVUxMOworICAgIGlmIChmVG9rLT5o
ZWFkKSB7CisgICAgICAgIGZUb2stPmN1cnJlbnQtPm5leHQgPSBsQmxvY2s7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZlRvay0+aGVhZCA9IGxCbG9jazsKKyAgICB9CisgICAgZlRvay0+Y3VycmVu
dCA9IGxCbG9jazsKKyAgICByZXR1cm4gbEJsb2NrOworfSAvLyBsTmV3QmxvY2sKKworLyoKKyAq
IGxBZGRCeXRlKCkKKyAqCisgKi8KKworc3RhdGljIHZvaWQgbEFkZEJ5dGUoVG9rZW5TdHJlYW0g
KmZUb2ssIHVuc2lnbmVkIGNoYXIgZlZhbCkKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7Cisg
ICAgbEJsb2NrID0gZlRvay0+Y3VycmVudDsKKyAgICBpZiAobEJsb2NrLT5jb3VudCA+PSBsQmxv
Y2stPm1heCkKKyAgICAgICAgbEJsb2NrID0gbE5ld0Jsb2NrKGZUb2ssIDApOworICAgIGxCbG9j
ay0+ZGF0YVtsQmxvY2stPmNvdW50KytdID0gZlZhbDsKK30gLy8gbEFkZEJ5dGUKKworCisKKy8q
CisgKiBsUmVhZEJ5dGUoKSAtIEdldCB0aGUgbmV4dCBieXRlIGZyb20gYSBzdHJlYW0uCisgKgor
ICovCisKK3N0YXRpYyBpbnQgbFJlYWRCeXRlKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIFRv
a2VuQmxvY2sgKmxCbG9jazsKKyAgICBpbnQgbHZhbCA9IC0xOworCisgICAgbEJsb2NrID0gcFRv
ay0+Y3VycmVudDsKKyAgICBpZiAobEJsb2NrKSB7CisgICAgICAgIGlmIChsQmxvY2stPmN1cnJl
bnQgPj0gbEJsb2NrLT5jb3VudCkgeworICAgICAgICAgICAgbEJsb2NrID0gbEJsb2NrLT5uZXh0
OworICAgICAgICAgICAgaWYgKGxCbG9jaykKKyAgICAgICAgICAgICAgICBsQmxvY2stPmN1cnJl
bnQgPSAwOworICAgICAgICAgICAgcFRvay0+Y3VycmVudCA9IGxCbG9jazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobEJsb2NrKQorICAgICAgICAgICAgbHZhbCA9IGxCbG9jay0+ZGF0YVtsQmxv
Y2stPmN1cnJlbnQrK107CisgICAgfQorICAgIHJldHVybiBsdmFsOworfSAvLyBsUmVhZEJ5dGUK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEdsb2JhbCBGdW5jdGlv
bnM6Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoKKyAqIE5ld1Rv
a2VuU3RyZWFtKCkKKyAqCisgKi8KKworVG9rZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0
IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgVG9rZW5TdHJlYW0gKnBUb2s7
CisKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0gKikgbWFsbG9j
KHNpemVvZihUb2tlblN0cmVhbSkpOworICAgIGVsc2UKKyAgICAgICAgcFRvayA9IChUb2tlblN0
cmVhbSopbWVtX0FsbG9jKHBvb2wsIHNpemVvZihUb2tlblN0cmVhbSkpOworICAgIHBUb2stPm5l
eHQgPSBOVUxMOworICAgIHBUb2stPm5hbWUgPSBpZHN0cihuYW1lLCBwb29sKTsKKyAgICBwVG9r
LT5oZWFkID0gTlVMTDsKKyAgICBwVG9rLT5jdXJyZW50ID0gTlVMTDsKKyAgICBsTmV3QmxvY2so
cFRvaywgcG9vbCk7CisgICAgcmV0dXJuIHBUb2s7Cit9IC8vIE5ld1Rva2VuU3RyZWFtCisKKy8q
CisgKiBEZWxldGVUb2tlblN0cmVhbSgpCisgKgorICovCisKK3ZvaWQgRGVsZXRlVG9rZW5TdHJl
YW0oVG9rZW5TdHJlYW0gKnBUb2spCit7CisgICAgVG9rZW5CbG9jayAqcEJsb2NrLCAqbkJsb2Nr
OworCisgICAgaWYgKHBUb2spIHsKKyAgICAgICAgcEJsb2NrID0gcFRvay0+aGVhZDsKKyAgICAg
ICAgd2hpbGUgKHBCbG9jaykgeworICAgICAgICAgICAgbkJsb2NrID0gcEJsb2NrLT5uZXh0Owor
ICAgICAgICAgICAgZnJlZShwQmxvY2spOworICAgICAgICAgICAgcEJsb2NrID0gbkJsb2NrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwVG9rLT5uYW1lKQorICAgICAgICAgICAgZnJlZShwVG9r
LT5uYW1lKTsKKyAgICAgICAgZnJlZShwVG9rKTsKKyAgICB9Cit9IC8vIERlbGV0ZVRva2VuU3Ry
ZWFtCisKKy8qCisgKiBSZWNvcmRUb2tlbigpIC0gQWRkIGEgdG9rZW4gdG8gdGhlIGVuZCBvZiBh
IGxpc3QgZm9yIGxhdGVyIHBsYXliYWNrIG9yIHByaW50b3V0LgorICoKKyAqLworCit2b2lkIFJl
Y29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQoreworICAgIGNvbnN0IGNoYXIgKnM7CisgICAgdW5zaWduZWQgY2hhciAqc3RyPU5VTEw7
CisKKyAgICBpZiAodG9rZW4gPiAyNTYpCisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25l
ZCBjaGFyKSgodG9rZW4gJiAweDdmKSArIDB4ODApKTsKKyAgICBlbHNlCisgICAgICAgIGxBZGRC
eXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSh0b2tlbiAmIDB4N2YpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKKyAgICBjYXNlIENQUF9UWVBFSURFTlRJ
RklFUjoKKyAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgcyA9IEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpOworICAgICAgICB3aGlsZSAoKnMpCisgICAg
ICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikgKnMrKyk7CisgICAgICAgIGxB
ZGRCeXRlKHBUb2ssIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENQUF9GTE9BVENPTlNU
QU5UOgorICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgorICAgICAgICAgc3RyPXl5bHZhbHBwLT5z
eW1ib2xfbmFtZTsKKyAgICAgICAgIHdoaWxlICgqc3RyKXsKKyAgICAgICAgICAgIGxBZGRCeXRl
KHBUb2ssKHVuc2lnbmVkIGNoYXIpICpzdHIpOworICAgICAgICAgICAgKnN0cisrOworICAgICAg
ICAgfQorICAgICAgICAgbEFkZEJ5dGUocFRvaywgMCk7CisgICAgICAgICBicmVhazsKKyAgICBj
YXNlICcoJzoKKyAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHl5bHZhbHBw
LT5zY19pbnQgPyAxIDogMCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
K30gLy8gUmVjb3JkVG9rZW4KKworLyoKKyAqIFJld2luZFRva2VuU3RyZWFtKCkgLSBSZXNldCBh
IHRva2VuIHN0cmVhbSBpbiBwcmVwZXJhdGlvbiBmb3IgcmVhZGluZy4KKyAqCisgKi8KKwordm9p
ZCBSZXdpbmRUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaykKK3sKKyAgICBpZiAocFRvay0+
aGVhZCkgeworICAgICAgICBwVG9rLT5jdXJyZW50ID0gcFRvay0+aGVhZDsKKyAgICAgICAgcFRv
ay0+Y3VycmVudC0+Y3VycmVudCA9IDA7CisgICAgfQorfSAvLyBSZXdpbmRUb2tlblN0cmVhbQor
CisvKgorICogUmVhZFRva2VuKCkgLSBSZWFkIHRoZSBuZXh0IHRva2VuIGZyb20gYSBzdHJlYW0u
CisgKgorICovCisKK2ludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQoreworICAgIGNoYXIgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiAr
IDFdOworICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGludCBs
dG9rZW4sIGxlbjsKKyAgICBjaGFyIGNoOworCisgICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2sp
OworICAgIGlmIChsdG9rZW4gPj0gMCkgeworICAgICAgICBpZiAobHRva2VuID4gMTI3KQorICAg
ICAgICAgICAgbHRva2VuICs9IDEyODsKKyAgICAgICAgc3dpdGNoIChsdG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBDUFBfSURFTlRJRklFUjoKKyAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6
CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7
CisgICAgICAgICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAg
ICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAorICAgICAgICAgICAgICAgICAgICAg
Y2ggPT0gJ18nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhf
U1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0g
PSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgICAgIGNo
ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgYXNzZXJ0KGNo
ID09ICdcMCcpOworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgc3ltYm9sX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElG
SUVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgor
ICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPSBsUmVhZEJ5dGUo
cFRvaykpICE9IDApCisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdfTEVOKQor
ICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbisrXSA9IGNoOworICAgICAgICAgICAg
c3RyaW5nX3ZhbFtsZW5dID0gMDsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsIHN0cmluZ192YWwpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAwOworICAg
ICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICB3aGlsZSAoKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpfHwoY2g9PSdlJ3x8Y2g9PSdFJ3x8Y2g9PScuJyl8fChjaD09Jysn
fHxjaD09Jy0nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFY
X1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5d
ID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBj
aCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICAgICAgICAgIGFzc2VydChj
aCA9PSAnXDAnKTsKKyAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3lt
Ym9sX25hbWUpOworICAgICAgICAgICAgeXlsdmFscHAtPnNjX2Z2YWw9KGZsb2F0KWF0b2YoeXls
dmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQ
UF9JTlRDT05TVEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOwor
ICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVh
ZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1ww
Jyk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1l
KTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBsdG9rZW47CisgICAgfQorICAgIHJldHVybiBFT0Zf
U1k7Cit9IC8vIFJlYWRUb2tlbgorCit0eXBlZGVmIHN0cnVjdCBUb2tlbklucHV0U3JjIHsKKyAg
ICBJbnB1dFNyYyAgICAgICAgICAgIGJhc2U7CisgICAgVG9rZW5TdHJlYW0gICAgICAgICAqdG9r
ZW5zOworICAgIGludCAgICAgICAgICAgICAgICAgKCpmaW5hbCkoQ1BQU3RydWN0ICopOworfSBU
b2tlbklucHV0U3JjOworCitzdGF0aWMgaW50IHNjYW5fdG9rZW4oVG9rZW5JbnB1dFNyYyAqaW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+
dG9rZW5zLCB5eWx2YWxwcCk7CisgICAgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKTsKKyAgICBj
cHAtPnRva2VuTG9jLT5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CisgICAgY3BwLT50
b2tlbkxvYy0+bGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGlmICh0b2tlbiA9
PSAnXG4nKSB7CisgICAgICAgIGluLT5iYXNlLmxpbmUrKzsKKyAgICAgICAgcmV0dXJuIHRva2Vu
OworICAgIH0KKyAgICBpZiAodG9rZW4gPiAwKSByZXR1cm4gdG9rZW47CisgICAgY3BwLT5jdXJy
ZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OworICAgIGZpbmFsID0gaW4tPmZpbmFsOworICAgIGZy
ZWUoaW4pOworICAgIGlmIChmaW5hbCAmJiAhZmluYWwoY3BwKSkgcmV0dXJuIC0xOworICAgIHJl
dHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworfQorCitpbnQgUmVhZEZyb21Ub2tlblN0cmVhbShUb2tlblN0cmVhbSAqdHMsIGludCBuYW1l
LCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKQoreworICAgIFRva2VuSW5wdXRTcmMgKmluID0g
bWFsbG9jKHNpemVvZihUb2tlbklucHV0U3JjKSk7CisgICAgbWVtc2V0KGluLCAwLCBzaXplb2Yo
VG9rZW5JbnB1dFNyYykpOworICAgIGluLT5iYXNlLm5hbWUgPSBuYW1lOworICAgIGluLT5iYXNl
LnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICBpbi0+YmFzZS5zY2FuID0gKGludCAoKiko
SW5wdXRTcmMgKiwgeXlzdHlwZXBwICopKXNjYW5fdG9rZW47CisgICAgaW4tPmJhc2UubGluZSA9
IDE7CisgICAgaW4tPnRva2VucyA9IHRzOworICAgIGluLT5maW5hbCA9IGZpbmFsOworICAgIFJl
d2luZFRva2VuU3RyZWFtKHRzKTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZpbi0+YmFzZTsK
KyAgICByZXR1cm4gMTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVW5nb3RUb2tlbiB7CisgICAgSW5w
dXRTcmMgICAgYmFzZTsKKyAgICBpbnQgICAgICAgICB0b2tlbjsKKyAgICB5eXN0eXBlcHAgICAg
IGx2YWw7Cit9IFVuZ290VG9rZW47CisKK3N0YXRpYyBpbnQgcmVnZXRfdG9rZW4oVW5nb3RUb2tl
biAqdCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gdC0+dG9rZW47
CisgICAgKnl5bHZhbHBwID0gdC0+bHZhbDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IHQtPmJh
c2UucHJldjsKKyAgICBmcmVlKHQpOworICAgIHJldHVybiB0b2tlbjsKK30KKwordm9pZCBVbmdl
dFRva2VuKGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKKyAgICBVbmdvdFRva2Vu
ICp0ID0gbWFsbG9jKHNpemVvZihVbmdvdFRva2VuKSk7CisgICAgbWVtc2V0KHQsIDAsIHNpemVv
ZihVbmdvdFRva2VuKSk7CisgICAgdC0+dG9rZW4gPSB0b2tlbjsKKyAgICB0LT5sdmFsID0gKnl5
bHZhbHBwOworICAgIHQtPmJhc2Uuc2NhbiA9ICh2b2lkICopcmVnZXRfdG9rZW47CisgICAgdC0+
YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgdC0+YmFzZS5uYW1lID0gY3BwLT5j
dXJyZW50SW5wdXQtPm5hbWU7CisgICAgdC0+YmFzZS5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQt
PmxpbmU7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmdC0+YmFzZTsKK30KKworCit2b2lkIER1
bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMsIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKSB7CisgICAgaW50IHRva2VuOworICAgIGNoYXIgc3RyWzEwMF07CisKKyAgICBpZiAoZnAg
PT0gMCkgZnAgPSBzdGRvdXQ7CisgICAgUmV3aW5kVG9rZW5TdHJlYW0ocyk7CisgICAgd2hpbGUg
KCh0b2tlbiA9IFJlYWRUb2tlbihzLCB5eWx2YWxwcCkpID4gMCkgeworICAgICAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CisgICAgICAgIGNhc2UgQ1BQ
X1RZUEVJREVOVElGSUVSOgorICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9t
U3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6CisgICAgICAgICAgICBzcHJpbnRmKHN0ciwg
IlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAgICAg
ICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJp
bnRmKCIlZCAiLCB5eWx2YWxwcC0+c2NfaW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKKyAgICAgICAgICAgICAg
ICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiJWMiLCB0b2tlbik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhz
dHIpOworICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgdG9rZW5zLmMg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKK2NvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCitzdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKK2Zvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQorQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
KworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCitQ
Uk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCitVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgorTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisvLworLy8gdG9rZW5zLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1RP
S0VOU19IKQorI2RlZmluZSBfX1RPS0VOU19IIDEKKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wYXJzZXIuaCIKKworI2RlZmluZSBFT0ZfU1kgKC0xKQorCit0eXBlZGVmIHN0cnVj
dCBUb2tlbkJsb2NrX1JlYyBUb2tlbkJsb2NrOworCit0eXBlZGVmIHN0cnVjdCBUb2tlblN0cmVh
bV9SZWMgeworICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5leHQ7CisgICAgY2hhciAqbmFt
ZTsKKyAgICBUb2tlbkJsb2NrICpoZWFkOworICAgIFRva2VuQmxvY2sgKmN1cnJlbnQ7Cit9IFRv
a2VuU3RyZWFtOworCitzdHJ1Y3QgVG9rZW5CbG9ja19SZWMgeworICAgIFRva2VuQmxvY2sgKm5l
eHQ7CisgICAgaW50IGN1cnJlbnQ7CisgICAgaW50IGNvdW50OworICAgIGludCBtYXg7CisgICAg
dW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKK2V4dGVybiBUb2tlblN0cmVhbSBzdGRsaWJfY3Bw
X3N0cmVhbTsKKworCitUb2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFt
ZSwgTWVtb3J5UG9vbCAqcG9vbCk7Cit2b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFt
ICpwVG9rKTsgCit2b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJl
YW0gKnBUb2spOworaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICog
eXlsdmFscHApOworaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2ssIGlu
dCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKK3ZvaWQgVW5nZXRUb2tlbihpbnQs
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2lmIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMp
CisKK3ZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5TdHJlYW0gKiwgeXlzdHlwZXBw
ICogeXlsdmFscHApOworCisjZW5kaWYgLy8gZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKKwor
I2VuZGlmIC8vICFkZWZpbmVkKF9fVE9LRU5TX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
dG9vbHMvQ09QWUlORy5iaXNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9v
bHMvQ09QWUlORy5iaXNvbgkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29s
cy9DT1BZSU5HLmJpc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05V
IEdFTkVSQUwgUFVCTElDIExJQ0VOU0UNCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQ0K
Kw0KKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg
TUEgMDIxMzksIFVTQQ0KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJp
YnV0ZSB2ZXJiYXRpbSBjb3BpZXMNCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hh
bmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuDQorDQorCQkJICAgIFByZWFtYmxlDQorDQorICBUaGUg
bGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3Vy
DQorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMNCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZy
ZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlDQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0
aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMNCitHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQ0KK0ZvdW5k
YXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBj
b21taXQgdG8NCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5DQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvDQoreW91ciBwcm9ncmFtcywg
dG9vLg0KKw0KKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJy
aW5nIHRvIGZyZWVkb20sIG5vdA0KK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vz
IGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UNCitoYXZlIHRoZSBmcmVlZG9tIHRv
IGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yDQordGhp
cyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBj
YW4gZ2V0IGl0DQoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3
YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQNCitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQg
eW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuDQorDQorICBUbyBwcm90ZWN0IHlvdXIg
cmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkDQorYW55b25l
IHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUg
cmlnaHRzLg0KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25z
aWJpbGl0aWVzIGZvciB5b3UgaWYgeW91DQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3
YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0Lg0KKw0KKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0
cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcg0KK2dyYXRpcyBvciBmb3Ig
YSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdA0K
K3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9y
IGNhbiBnZXQgdGhlDQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNl
IHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcg0KK3JpZ2h0cy4NCisNCisgIFdlIHByb3RlY3QgeW91
ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQN
CisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlz
c2lvbiB0byBjb3B5LA0KK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuDQor
DQorICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50
IHRvIG1ha2UgY2VydGFpbg0KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBp
cyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlDQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUg
aXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlDQord2FudCBpdHMg
cmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5h
bCwgc28NCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCBy
ZWZsZWN0IG9uIHRoZSBvcmlnaW5hbA0KK2F1dGhvcnMnIHJlcHV0YXRpb25zLg0KKw0KKyAgRmlu
YWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdh
cmUNCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmli
dXRvcnMgb2YgYSBmcmVlDQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50
IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQ0KK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBU
byBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQ0KK3BhdGVudCBt
dXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBh
dCBhbGwuDQorDQorICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWlu
ZywgZGlzdHJpYnV0aW9uIGFuZA0KK21vZGlmaWNhdGlvbiBmb2xsb3cuDQorDA0KKwkJICAgIEdO
VSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFDQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENP
UFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9ODQorDQorICAwLiBUaGlzIExpY2Vu
c2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zDQor
YSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUg
ZGlzdHJpYnV0ZWQNCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csDQorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0g
b3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iDQorbWVhbnMgZWl0aGVy
IHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoN
Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0
aW9uIG9mIGl0LA0KK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29y
IHRyYW5zbGF0ZWQgaW50byBhbm90aGVyDQorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5z
bGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbg0KK3RoZSB0ZXJtICJtb2Rp
ZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLg0KKw0KK0Fj
dGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlv
biBhcmUgbm90DQorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRz
IHNjb3BlLiAgVGhlIGFjdCBvZg0KK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0
ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0NCitpcyBjb3ZlcmVkIG9ubHkgaWYg
aXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0gKGlu
ZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuDQor
V2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuDQor
DQorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRo
ZSBQcm9ncmFtJ3MNCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1
bSwgcHJvdmlkZWQgdGhhdCB5b3UNCitjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1
Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlDQorY29weXJpZ2h0IG5vdGljZSBhbmQg
ZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQ0KK25vdGljZXMgdGhh
dCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50
eTsNCithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkg
b2YgdGhpcyBMaWNlbnNlDQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4NCisNCitZb3UgbWF5IGNo
YXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBh
bmQNCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4g
ZXhjaGFuZ2UgZm9yIGEgZmVlLg0KKw0KKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9y
IGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbg0KK29mIGl0LCB0aHVzIGZvcm1p
bmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQNCitkaXN0cmlidXRl
IHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEN
CithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRp
b25zOg0KKw0KKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2Fy
cnkgcHJvbWluZW50IG5vdGljZXMNCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBm
aWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4NCisNCisgICAgYikgWW91IG11c3QgY2F1
c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluDQorICAg
IHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFt
IG9yIGFueQ0KKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQg
bm8gY2hhcmdlIHRvIGFsbCB0aGlyZA0KKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGlzIExpY2Vuc2UuDQorDQorICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5
IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkNCisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNh
dXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaA0KKyAgICBpbnRlcmFjdGl2ZSB1
c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuDQorICAg
IGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBh
bmQgYQ0KKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5
aW5nIHRoYXQgeW91IHByb3ZpZGUNCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5
IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcg0KKyAgICB0aGVzZSBjb25kaXRpb25zLCBh
bmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcw0KKyAgICBMaWNl
bnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1
dA0KKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91
ciB3b3JrIGJhc2VkIG9uDQorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmlu
dCBhbiBhbm5vdW5jZW1lbnQuKQ0KKwwNCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhl
IG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmDQoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9m
IHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwNCithbmQgY2FuIGJl
IHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4N
Cit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFw
cGx5IHRvIHRob3NlDQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFy
YXRlIHdvcmtzLiAgQnV0IHdoZW4geW91DQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBh
cyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkDQorb24gdGhlIFByb2dyYW0s
IHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mDQor
dGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVu
ZCB0byB0aGUNCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQg
cmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuDQorDQorVGh1cywgaXQgaXMgbm90IHRoZSBpbnRl
bnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0DQoreW91ciByaWdo
dHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlz
IHRvDQorZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBk
ZXJpdmF0aXZlIG9yDQorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4NCisN
CitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2Vk
IG9uIHRoZSBQcm9ncmFtDQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQg
b24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mDQorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlv
biBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXINCit0aGUgc2NvcGUg
b2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRo
ZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsDQordW5kZXIgU2VjdGlvbiAyKSBpbiBv
YmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mDQorU2VjdGlv
bnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9s
bG93aW5nOg0KKw0KKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVz
cG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlDQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucw0KKyAgICAxIGFuZCAyIGFi
b3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdl
OyBvciwNCisNCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxp
ZCBmb3IgYXQgbGVhc3QgdGhyZWUNCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5
LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXINCisgICAgY29zdCBvZiBwaHlzaWNhbGx5
IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQ0KKyAgICBtYWNoaW5l
LXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlDQor
ICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3Zl
IG9uIGEgbWVkaXVtDQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hh
bmdlOyBvciwNCisNCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlv
dSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXINCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25k
aW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMNCisgICAgYWxsb3dlZCBvbmx5
IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UNCisgICAgcmVj
ZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGgg
c3VjaA0KKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikN
CisNCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0g
b2YgdGhlIHdvcmsgZm9yDQorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhl
Y3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UNCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNl
IGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQ0KK2Fzc29jaWF0ZWQg
aW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bw0KK2Nv
bnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhv
d2V2ZXIsIGFzIGENCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1
dGVkIG5lZWQgbm90IGluY2x1ZGUNCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1
dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQ0KK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNv
bXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlDQorb3BlcmF0aW5n
IHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25l
bnQNCitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuDQorDQorSWYgZGlzdHJpYnV0
aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZw0KK2Fj
Y2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2
YWxlbnQNCithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFj
ZSBjb3VudHMgYXMNCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3Vn
aCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QNCitjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFs
b25nIHdpdGggdGhlIG9iamVjdCBjb2RlLg0KKwwNCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1v
ZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQ0KK2V4Y2VwdCBhcyBl
eHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQNCitvdGhl
cndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dy
YW0gaXMNCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0
cyB1bmRlciB0aGlzIExpY2Vuc2UuDQorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZl
ZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXINCit0aGlzIExpY2Vuc2Ugd2lsbCBu
b3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaA0KK3BhcnRp
ZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4NCisNCisgIDUuIFlvdSBhcmUgbm90IHJlcXVp
cmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdA0KK3NpZ25lZCBp
dC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5
IG9yDQorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRo
ZXNlIGFjdGlvbnMgYXJlDQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQg
dGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQ0KK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcg
dGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQ0KK1Byb2dyYW0pLCB5b3UgaW5k
aWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kDQorYWxs
IGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1v
ZGlmeWluZw0KK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0Lg0KKw0KKyAgNi4gRWFj
aCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9u
IHRoZQ0KK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBs
aWNlbnNlIGZyb20gdGhlDQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBv
ciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bw0KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRp
b25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyDQorcmVzdHJpY3Rpb25zIG9uIHRo
ZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLg0KK1lv
dSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBw
YXJ0aWVzIHRvDQordGhpcyBMaWNlbnNlLg0KKw0KKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ug
b2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudA0KK2luZnJpbmdlbWVu
dCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3Vlcyks
DQorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIs
IGFncmVlbWVudCBvcg0KK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25z
IG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QNCitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRp
dGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdA0KK2Rpc3RyaWJ1dGUgc28gYXMg
dG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMNCitM
aWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29u
c2VxdWVuY2UgeW91DQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZv
ciBleGFtcGxlLCBpZiBhIHBhdGVudA0KK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5
LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkNCithbGwgdGhvc2Ugd2hvIHJl
Y2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4NCit0
aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdv
dWxkIGJlIHRvDQorcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJv
Z3JhbS4NCisNCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlk
IG9yIHVuZW5mb3JjZWFibGUgdW5kZXINCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRo
ZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvDQorYXBwbHkgYW5kIHRoZSBz
ZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXINCitjaXJjdW1z
dGFuY2VzLg0KKw0KK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5k
dWNlIHlvdSB0byBpbmZyaW5nZSBhbnkNCitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0
IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQ0KK3N1Y2ggY2xhaW1zOyB0aGlz
IHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUNCitpbnRlZ3Jp
dHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMNCitp
bXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZl
IG1hZGUNCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3
YXJlIGRpc3RyaWJ1dGVkDQordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25z
aXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQNCitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRo
b3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nDQordG8gZGlzdHJpYnV0
ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90
DQoraW1wb3NlIHRoYXQgY2hvaWNlLg0KKw0KK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBt
YWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bw0KK2JlIGEgY29uc2VxdWVu
Y2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLg0KKwwNCisgIDguIElmIHRoZSBkaXN0cmli
dXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluDQorY2VydGFp
biBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNl
cywgdGhlDQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFt
IHVuZGVyIHRoaXMgTGljZW5zZQ0KK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRp
c3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZw0KK3Rob3NlIGNvdW50cmllcywgc28gdGhh
dCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcNCitjb3VudHJpZXMg
bm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0
ZXMNCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGlj
ZW5zZS4NCisNCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2gg
cmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zDQorb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsDQorYmUgc2ltaWxh
ciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0
YWlsIHRvDQorYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuDQorDQorRWFjaCB2ZXJz
aW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJv
Z3JhbQ0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBh
cHBsaWVzIHRvIGl0IGFuZCAiYW55DQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRp
b24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucw0KK2VpdGhlciBvZiB0aGF0
IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlDQor
U29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2
ZXJzaW9uIG51bWJlciBvZg0KK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNp
b24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uLg0KKw0K
KyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGlu
dG8gb3RoZXIgZnJlZQ0KK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFy
ZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3INCit0byBhc2sgZm9yIHBlcm1pc3Npb24u
ICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUNCitTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBz
b21ldGltZXMNCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBi
ZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscw0KK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVz
IG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQNCitvZiBwcm9tb3Rp
bmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4NCisNCisJCQkg
ICAgTk8gV0FSUkFOVFkNCisNCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VE
IEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQ0KK0ZPUiBUSEUgUFJPR1JBTSwg
VE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTg0K
K09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09S
IE9USEVSIFBBUlRJRVMNCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRA0KK09SIElNUExJRUQsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQorTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJ
UkUgUklTSyBBUw0KK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JB
TSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUNCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9V
IEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywNCitSRVBBSVIgT1Ig
Q09SUkVDVElPTi4NCisNCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQ
TElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcNCitXSUxMIEFOWSBDT1BZUklHSFQg
SE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SDQorUkVESVNU
UklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBG
T1IgREFNQUdFUywNCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcNCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFC
SUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEDQorVE8g
TE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMg
U1VTVEFJTkVEIEJZDQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQ
Uk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVINCitQUk9HUkFNUyksIEVWRU4gSUYgU1VD
SCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUNCitQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRVMuDQorDQorCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElU
SU9OUw0KKwwNCisJQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5l
dyBQcm9ncmFtcw0KKw0KKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3
YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdA0KK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGlj
LCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQNCitmcmVlIHNvZnR3
YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVz
ZSB0ZXJtcy4NCisNCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRv
IHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0DQordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0
IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQ0KK2NvbnZleSB0aGUgZXhj
bHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0DQor
dGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3Rp
Y2UgaXMgZm91bmQuDQorDQorICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFt
ZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+DQorICAgIENvcHlyaWdodCAoQykg
MTl5eSAgPG5hbWUgb2YgYXV0aG9yPg0KKw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAgICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQ0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLg0KKw0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0K
KyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQ0KKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg
TUEgMDIxMzksIFVTQS4NCisNCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFj
dCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4NCisNCitJZiB0aGUgcHJvZ3JhbSBp
cyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzDQor
d2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToNCisNCisgICAgR25vbW92aXNp
b24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yDQorICAgIEdu
b21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMg
dHlwZSBgc2hvdyB3Jy4NCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3
ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdA0KKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7
IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuDQorDQorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5k
cyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlDQorcGFy
dHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5k
cyB5b3UgdXNlIG1heQ0KK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBh
bmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQ0KK21vdXNlLWNsaWNrcyBvciBtZW51IGl0
ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uDQorDQorWW91IHNob3VsZCBhbHNvIGdl
dCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXINCitz
Y2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBw
cm9ncmFtLCBpZg0KK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1l
czoNCisNCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQg
aW50ZXJlc3QgaW4gdGhlIHByb2dyYW0NCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBh
c3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLg0KKw0KKyAgPHNpZ25h
dHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5DQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2Yg
VmljZQ0KKw0KK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5j
b3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bw0KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYg
eW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5DQorY29uc2lkZXIg
aXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25z
IHdpdGggdGhlDQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNl
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsDQorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlz
IExpY2Vuc2UuDQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4CShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuZmxleAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorRmxleCBjYXJyaWVzIHRoZSBjb3B5cmlnaHQgdXNlZCBm
b3IgQlNEIHNvZnR3YXJlLCBzbGlnaHRseSBtb2RpZmllZA0KK2JlY2F1c2UgaXQgb3JpZ2luYXRl
ZCBhdCB0aGUgTGF3cmVuY2UgQmVya2VsZXkgKG5vdCBMaXZlcm1vcmUhKSBMYWJvcmF0b3J5LA0K
K3doaWNoIG9wZXJhdGVzIHVuZGVyIGEgY29udHJhY3Qgd2l0aCB0aGUgRGVwYXJ0bWVudCBvZiBF
bmVyZ3k6DQorDQorCUNvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLg0KKwlBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKwlUaGlzIGNv
ZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5DQor
CVZlcm4gUGF4c29uLg0KKw0KKwlUaGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGhhcyByaWdo
dHMgaW4gdGhpcyB3b3JrIHB1cnN1YW50DQorCXRvIGNvbnRyYWN0IG5vLiBERS1BQzAzLTc2U0Yw
MDA5OCBiZXR3ZWVuIHRoZSBVbml0ZWQgU3RhdGVzDQorCURlcGFydG1lbnQgb2YgRW5lcmd5IGFu
ZCB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLg0KKw0KKwlSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQNCisJcHJvdmlkZWQg
dGhhdDogKDEpIHNvdXJjZSBkaXN0cmlidXRpb25zIHJldGFpbiB0aGlzIGVudGlyZQ0KKwljb3B5
cmlnaHQgbm90aWNlIGFuZCBjb21tZW50LCBhbmQgKDIpIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5n
DQorCWJpbmFyaWVzIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICBgYFRo
aXMgcHJvZHVjdA0KKwlpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNp
dHkgb2YgQ2FsaWZvcm5pYSwNCisJQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMnJyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlcg0KKwltYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uIGFuZCBpbiBhbGwgYWR2ZXJ0aXNpbmcNCisJbWF0ZXJpYWxzIG1lbnRpb25p
bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUuICBOZWl0aGVyIHRoZQ0KKwluYW1l
IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUNCisJdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUNCisJd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
DQorDQorCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFO
WSBFWFBSRVNTIE9SDQorCUlNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJ
TUlUQVRJT04sIFRIRSBJTVBMSUVEDQorCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCisJUFVSUE9TRS4NCisNCitUaGlzIGJhc2ljYWxs
eSBzYXlzICJkbyB3aGF0ZXZlciB5b3UgcGxlYXNlIHdpdGggdGhpcyBzb2Z0d2FyZSBleGNlcHQN
CityZW1vdmUgdGhpcyBub3RpY2Ugb3IgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFVuaXZlcnNpdHkn
cyAob3IgdGhlIGZsZXgNCithdXRob3JzJykgbmFtZSIuDQorDQorTm90ZSB0aGF0IHRoZSAiZmxl
eC5za2wiIHNjYW5uZXIgc2tlbGV0b24gY2FycmllcyBubyBjb3B5cmlnaHQgbm90aWNlLg0KK1lv
dSBhcmUgZnJlZSB0byBkbyB3aGF0ZXZlciB5b3UgcGxlYXNlIHdpdGggc2Nhbm5lcnMgZ2VuZXJh
dGVkIHVzaW5nIGZsZXg7DQorZm9yIHRoZW0sIHlvdSBhcmUgbm90IGV2ZW4gYm91bmQgYnkgdGhl
IGFib3ZlIGNvcHlyaWdodC4NCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvUkVBRE1F
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci90b29scy9SRUFETUUJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvUkVBRE1FCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0IEBACitUaGUgc3RhbmRhbG9uZSBCaXNvbiBhbmQgRmxleCB3aW4zMiBleGVjdXRh
Ymxlcw0KK3dlcmUgY3JlYXRlZCBieSBXaWxidXIgU3RyZWV0dCBhbmQgY2FuIGJlIG9idGFpbmVk
IGZyb206DQoraHR0cDovL3VzZXJwYWdlcy5tb25tb3V0aC5jb20vfndzdHJlZXR0L2xleC15YWNj
L2xleC15YWNjLmh0bWwNCisNCitCaXNvbiB2ZXJzaW9uIDEuMjQ6DQorU2VlIENPUFlJTkcuYmlz
b24gZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uDQorVGhlIG9yaWdpbmFsIHNvdXJjZSBkaXN0cmli
dXRpb24gZm9yIGJpc29uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRp
b246DQoraHR0cDovL2FuZ2xlcHJvamVjdC5nb29nbGVjb2RlLmNvbS9maWxlcy9iaXNvbi56aXAN
CisNCitGbGV4IHZlcnNpb24gMi41LjINCitTZWUgQ09QWUlORy5mbGV4IGZvciBsaWNlbnNlIGlu
Zm9ybWF0aW9uLg0KK1RoZSBvcmlnaW5hbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBmbGV4IGNh
biBiZSBvYnRhaW5lZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246DQoraHR0cDovL2FuZ2xl
cHJvamVjdC5nb29nbGVjb2RlLmNvbS9maWxlcy9mbGV4LnppcA0KKw0KSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci90b29scy9iaXNvbi5oYWlyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvdG9vbHMvYmlzb24uaGFpcnkJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvdG9vbHMvYmlzb24uaGFpcnkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisKK2V4
dGVybiBpbnQgdGltZWNsb2NrOworCisKK2ludCB5eWVycm9yOwkJLyogIFl5ZXJyb3IgYW5kIHl5
Y29zdCBhcmUgc2V0IGJ5IGd1YXJkcy4JKi8KK2ludCB5eWNvc3Q7CQkvKiAgSWYgeXllcnJvciBp
cyBzZXQgdG8gYSBub256ZXJvIHZhbHVlIGJ5IGEJKi8KKwkJCS8qICBndWFyZCwgdGhlIHJlZHVj
dGlvbiB3aXRoIHdoaWNoIHRoZSBndWFyZAkqLworCQkJLyogIGlzIGFzc29jaWF0ZWQgaXMgbm90
IHBlcmZvcm1lZCwgYW5kIHRoZQkqLworCQkJLyogIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbSBp
cyBpbnZva2VkLgkqLworCQkJLyogIFl5Y29zdCBpbmRpY2F0ZXMgdGhlIGNvc3Qgb2YgcGVyZm9y
bWluZwkqLworCQkJLyogIHRoZSByZWR1Y3Rpb24gZ2l2ZW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhl
CSovCisJCQkvKiAgc3ltYm9scy4JCQkJCSovCisKKworLyogIFlZTUFYREVQVEggaW5kaWNhdGVz
IHRoZSBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGF0ZSBhbmQgdmFsdWUJKi8KKy8qICBzdGFja3Mu
CQkJCQkJCQkqLworCisjaWZuZGVmCVlZTUFYREVQVEgKKyNkZWZpbmUJWVlNQVhERVBUSAk1MDAK
KyNlbmRpZgorCisvKiAgWVlNQVhSVUxFUyBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRo
ZSBudW1iZXIgb2YgcnVsZXMgdGhhdAkqLworLyogIGNvdWxkIGJlIHBsYWNlZCBpbiB0aGUgcnVs
ZSBxdWV1ZS4gIFRoYXQgbnVtYmVyIGNvdWxkIGJlIGRldGVybWluZWQJKi8KKy8qICBmcm9tIHRo
ZSBncmFtbWFyIGFuZCB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJ1dCwgYXMgeWV0LCBpdCBpcyBu
b3QuCSovCisKKyNpZm5kZWYJWVlNQVhSVUxFUworI2RlZmluZQlZWU1BWFJVTEVTCTEwMAorI2Vu
ZGlmCisKKyNpZm5kZWYJWVlNQVhCQUNLVVAKKyNkZWZpbmUgWVlNQVhCQUNLVVAJMTAwCisjZW5k
aWYKKworCitzaG9ydAl5eXNzW1lZTUFYREVQVEhdOwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8K
K1lZU1RZUEUJeXl2c1tZWU1BWERFUFRIXTsJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjawkJ
Ki8KK1lZTFRZUEUgeXlsc1tZWU1BWERFUFRIXTsJLyogIHRoZSBsb2NhdGlvbiBzdGFjawkJCSov
CitzaG9ydAl5eXJxW1lZTUFYUlVMRVNdOwkvKiAgdGhlIHJ1bGUgcXVldWUJCQkqLworaW50CXl5
Y2hhcjsJCQkvKiAgdGhlIGxvb2thaGVhZCBzeW1ib2wJCSovCisKK1lZU1RZUEUJeXlsdmFsOwkJ
CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlCQkqLworCQkJCS8qICBsb29rYWhlYWQgc3lt
Ym9sCQkJKi8KKworWVlTVFlQRSB5eXR2YWw7CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBmb3Ig
dGhlIHN0YXRlCSovCisJCQkJLyogIGF0IHRoZSB0b3Agb2YgdGhlIHN0YXRlIHN0YWNrLgkqLwor
CitZWVNUWVBFIHl5dmFsOwkJCS8qICB0aGUgdmFyaWFibGUgdXNlZCB0byByZXR1cm4JCSovCisJ
CQkJLyogIHNlbWFudGljIHZhbHVlcyBmcm9tIHRoZSBhY3Rpb24JKi8KKwkJCQkvKiAgcm91dGlu
ZXMJCQkJKi8KKworWVlMVFlQRSB5eWxsb2M7CQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIGxv
b2thaGVhZAkqLworCQkJCS8qICBzeW1ib2wJCQkJKi8KKworWVlMVFlQRSB5eXRsb2M7CQkvKiAg
bG9jYXRpb24gZGF0YSBmb3IgdGhlIHN0YXRlIGF0IHRoZQkqLworCQkJCS8qICB0b3Agb2YgdGhl
IHN0YXRlIHN0YWNrCQkqLworCisKK2ludAl5eW51bmxleGVkOworc2hvcnQJeXl1bmNoYXJbWVlN
QVhCQUNLVVBdOworWVlTVFlQRQl5eXVudmFsW1lZTUFYQkFDS1VQXTsKK1lZTFRZUEUgeXl1bmxv
Y1tZWU1BWEJBQ0tVUF07CisKK3Nob3J0ICp5eWdzc3A7CQkJLyogIGEgcG9pbnRlciB0byB0aGUg
dG9wIG9mIHRoZSBzdGF0ZQkqLworCQkJCS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9y
CSovCisJCQkJLyogIHJlY292ZXJ5LgkJCQkqLworCitZWVNUWVBFICp5eWd2c3A7CQkvKiAgYSBw
b2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIHZhbHVlCSovCisJCQkJLyogIHN0YWNrOyBvbmx5IHNl
dCBkdXJpbmcgZXJyb3IJKi8KKwkJCQkvKiAgcmVjb3ZlcnkuCQkJCSovCisKK1lZTFRZUEUgKnl5
Z2xzcDsJCS8qICBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUJCSovCisJCQkJLyogIGxvY2F0
aW9uIHN0YWNrOyBvbmx5IHNldCBkdXJpbmcJKi8KKwkJCQkvKiAgZXJyb3IgcmVjb3ZlcnkuCQkJ
Ki8KKworCisvKiAgWXlnZXQgaXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIHBhcnNlciBhbmQg
dGhlIGxleGljYWwgYW5hbHl6ZXIuCSovCisvKiAgSXQgaXMgY29zdGx5IHRvIHByb3ZpZGUgc3Vj
aCBhbiBpbnRlcmZhY2UsIGJ1dCBpdCBhdm9pZHMgcmVxdWlyaW5nCSovCisvKiAgdGhlIGxleGlj
YWwgYW5hbHl6ZXIgdG8gYmUgYWJsZSB0byBiYWNrIHVwIHRoZSBzY2FuLgkJKi8KKworeXlnZXQo
KQoreworICBpZiAoeXludW5sZXhlZCA+IDApCisgICAgeworICAgICAgeXludW5sZXhlZC0tOwor
ICAgICAgeXljaGFyID0geXl1bmNoYXJbeXludW5sZXhlZF07CisgICAgICB5eWx2YWwgPSB5eXVu
dmFsW3l5bnVubGV4ZWRdOworICAgICAgeXlsbG9jID0geXl1bmxvY1t5eW51bmxleGVkXTsKKyAg
ICB9CisgIGVsc2UgaWYgKHl5Y2hhciA8PSAwKQorICAgIHl5Y2hhciA9IDA7CisgIGVsc2UKKyAg
ICB7CisgICAgICB5eWNoYXIgPSB5eWxleCgpOworICAgICAgaWYgKHl5Y2hhciA8IDApCisJeXlj
aGFyID0gMDsKKyAgICAgIGVsc2UgeXljaGFyID0gWVlUUkFOU0xBVEUoeXljaGFyKTsKKyAgICB9
Cit9CisKKworCit5eXVubGV4KGNociwgdmFsLCBsb2MpCitpbnQgY2hyOworWVlTVFlQRSB2YWw7
CitZWUxUWVBFIGxvYzsKK3sKKyAgeXl1bmNoYXJbeXludW5sZXhlZF0gPSBjaHI7CisgIHl5dW52
YWxbeXludW5sZXhlZF0gPSB2YWw7CisgIHl5dW5sb2NbeXludW5sZXhlZF0gPSBsb2M7CisgIHl5
bnVubGV4ZWQrKzsKK30KKworCisKK3l5cmVzdG9yZShmaXJzdCwgbGFzdCkKK3JlZ2lzdGVyIHNo
b3J0ICpmaXJzdDsKK3JlZ2lzdGVyIHNob3J0ICpsYXN0OworeworICByZWdpc3RlciBzaG9ydCAq
c3NwOworICByZWdpc3RlciBzaG9ydCAqcnA7CisgIHJlZ2lzdGVyIGludCBzeW1ib2w7CisgIHJl
Z2lzdGVyIGludCBzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHR2YWxzYXZlZDsKKworICBzc3AgPSB5
eWdzc3A7CisgIHl5dW5sZXgoeXljaGFyLCB5eWx2YWwsIHl5bGxvYyk7CisKKyAgdHZhbHNhdmVk
ID0gMDsKKyAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpCisgICAgeworICAgICAgc3ltYm9sID0geXlz
dG9zWypzc3BdOworICAgICAgaWYgKHN5bWJvbCA8IFlZTlRCQVNFKQorCXsKKwkgIHl5dW5sZXgo
c3ltYm9sLCB5eXR2YWwsIHl5dGxvYyk7CisJICB0dmFsc2F2ZWQgPSAxOworCSAgc3NwLS07CisJ
fQorCisgICAgICBzc3AtLTsKKworICAgICAgaWYgKGZpcnN0ID09IHl5cnEpCisJZmlyc3QgPSB5
eXJxICsgWVlNQVhSVUxFUzsKKworICAgICAgZmlyc3QtLTsKKworICAgICAgZm9yIChycCA9IHl5
cmhzICsgeXlwcmhzWypmaXJzdF07IHN5bWJvbCA9ICpycDsgcnArKykKKwl7CisJICBpZiAoc3lt
Ym9sIDwgWVlOVEJBU0UpCisJICAgIHN0YXRlID0geXl0YWJsZVt5eXBhY3RbKnNzcF0gKyBzeW1i
b2xdOworCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RhdGUgPSB5eXBnb3RvW3N5bWJvbCAtIFlZ
TlRCQVNFXSArICpzc3A7CisKKwkgICAgICBpZiAoc3RhdGUgPj0gMCAmJiBzdGF0ZSA8PSBZWUxB
U1QgJiYgeXljaGVja1tzdGF0ZV0gPT0gKnNzcCkKKwkJc3RhdGUgPSB5eXRhYmxlW3N0YXRlXTsK
KwkgICAgICBlbHNlCisJCXN0YXRlID0geXlkZWZnb3RvW3N5bWJvbCAtIFlZTlRCQVNFXTsKKwkg
ICAgfQorCisJICAqKytzc3AgPSBzdGF0ZTsKKwl9CisgICAgfQorCisgIGlmICggISB0dmFsc2F2
ZWQgJiYgc3NwID4geXlzcykKKyAgICB7CisgICAgICB5eXVubGV4KHl5c3Rvc1sqc3NwXSwgeXl0
dmFsLCB5eXRsb2MpOworICAgICAgc3NwLS07CisgICAgfQorCisgIHl5Z3NzcCA9IHNzcDsKK30K
KworCisKK2ludAoreXlwYXJzZSgpCit7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdp
c3RlciBpbnQgeXluOworICByZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIHNob3J0
ICp5eXJxMDsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5cHRyOworICByZWdpc3RlciBZWVNUWVBFICp5
eXZzcDsKKworICBpbnQgeXlsZW47CisgIFlZTFRZUEUgKnl5bHNwOworICBzaG9ydCAqeXlycTE7
CisgIHNob3J0ICp5eXJxMjsKKworICB5eXN0YXRlID0gMDsKKyAgeXlzc3AgPSB5eXNzIC0gMTsK
KyAgeXl2c3AgPSB5eXZzIC0gMTsKKyAgeXlsc3AgPSB5eWxzIC0gMTsKKyAgeXlycTAgPSB5eXJx
OworICB5eXJxMSA9IHl5cnEwOworICB5eXJxMiA9IHl5cnEwOworCisgIHl5Y2hhciA9IHl5bGV4
KCk7CisgIGlmICh5eWNoYXIgPCAwKQorICAgIHl5Y2hhciA9IDA7CisgIGVsc2UgeXljaGFyID0g
WVlUUkFOU0xBVEUoeXljaGFyKTsKKworeXluZXdzdGF0ZToKKworICBpZiAoeXlzc3AgPj0geXlz
cyArIFlZTUFYREVQVEggLSAxKQorICAgIHsKKyAgICAgIHl5YWJvcnQoIlBhcnNlciBTdGFjayBP
dmVyZmxvdyIpOworICAgICAgWVlBQk9SVDsKKyAgICB9CisKKyAgKisreXlzc3AgPSB5eXN0YXRl
OworCit5eXJlc3VtZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0g
WVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biArPSB5eWNoYXI7CisgIGlmICh5
eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyKQorICAgIGdv
dG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisg
ICAgeworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBl
bHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisgIHl5c3RhdGUgPSB5eW47
CisKKyAgeXlwdHIgPSB5eXJxMjsKKyAgd2hpbGUgKHl5cHRyICE9IHl5cnExKQorICAgIHsKKyAg
ICAgIHl5biA9ICp5eXB0cisrOworICAgICAgeXlsZW4gPSB5eXIyW3l5bl07CisgICAgICB5eXZz
cCAtPSB5eWxlbjsKKyAgICAgIHl5bHNwIC09IHl5bGVuOworCisgICAgICB5eWd1YXJkKHl5biwg
eXl2c3AsIHl5bHNwKTsKKyAgICAgIGlmICh5eWVycm9yKQorCWdvdG8geXlzZW1lcnI7CisKKyAg
ICAgIHl5YWN0aW9uKHl5biwgeXl2c3AsIHl5bHNwKTsKKyAgICAgICorK3l5dnNwID0geXl2YWw7
CisKKyAgICAgIHl5bHNwKys7CisgICAgICBpZiAoeXlsZW4gPT0gMCkKKwl7CisJICB5eWxzcC0+
dGltZXN0YW1wID0gdGltZWNsb2NrOworCSAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eXRsb2MuZmly
c3RfbGluZTsKKwkgIHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eXRsb2MuZmlyc3RfY29sdW1uOwor
CSAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworCSAgeXlsc3AtPmxh
c3RfY29sdW1uID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKKwkgIHl5bHNwLT50ZXh0ID0gMDsK
Kwl9CisgICAgICBlbHNlCisJeworCSAgeXlsc3AtPmxhc3RfbGluZSA9ICh5eWxzcCt5eWxlbi0x
KS0+bGFzdF9saW5lOworCSAgeXlsc3AtPmxhc3RfY29sdW1uID0gKHl5bHNwK3l5bGVuLTEpLT5s
YXN0X2NvbHVtbjsKKwl9CisJICAKKyAgICAgIGlmICh5eXB0ciA9PSB5eXJxICsgWVlNQVhSVUxF
UykKKyAgICAgICAgeXlwdHIgPSB5eXJxOworICAgIH0KKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJ
TkFMKQorICAgIFlZQUNDRVBUOworCisgIHl5cnEyID0geXlwdHI7CisgIHl5cnExID0geXlycTA7
CisKKyAgKisreXl2c3AgPSB5eXR2YWw7CisgICorK3l5bHNwID0geXl0bG9jOworICB5eXR2YWwg
PSB5eWx2YWw7CisgIHl5dGxvYyA9IHl5bGxvYzsKKyAgeXlnZXQoKTsKKworICBnb3RvIHl5bmV3
c3RhdGU7CisKK3l5ZGVmYXVsdDoKKworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYg
KHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisKK3l5cmVkdWNlOgorCisgICp5eXJxMCsr
ID0geXluOworCisgIGlmICh5eXJxMCA9PSB5eXJxICsgWVlNQVhSVUxFUykKKyAgICB5eXJxMCA9
IHl5cnE7CisKKyAgaWYgKHl5cnEwID09IHl5cnEyKQorICAgIHsKKyAgICAgIHl5YWJvcnQoIlBh
cnNlciBSdWxlIFF1ZXVlIE92ZXJmbG93Iik7CisgICAgICBZWUFCT1JUOworICAgIH0KKworICB5
eXNzcCAtPSB5eXIyW3l5bl07CisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlw
Z290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlz
dGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0
ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5
biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKK3l5c2VtZXJyOgorICAqLS15
eXB0ciA9IHl5bjsKKyAgeXlycTIgPSB5eXB0cjsKKyAgeXl2c3AgKz0geXlyMlt5eW5dOworCit5
eWVycmxhYjoKKworICB5eWdzc3AgPSB5eXNzcDsKKyAgeXlndnNwID0geXl2c3A7CisgIHl5Z2xz
cCA9IHl5bHNwOworICB5eXJlc3RvcmUoeXlycTAsIHl5cnEyKTsKKyAgeXlyZWNvdmVyKCk7Cisg
IHl5c3RhdGUgPSAqeXlnc3NwOworICB5eXNzcCA9IHl5Z3NzcDsKKyAgeXl2c3AgPSB5eWd2c3A7
CisgIHl5cnEwID0geXlycTsKKyAgeXlycTEgPSB5eXJxMDsKKyAgeXlycTIgPSB5eXJxMDsKKyAg
Z290byB5eXJlc3VtZTsKK30KKworJApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jp
c29uLnNpbXBsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24u
c2ltcGxlCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLnNp
bXBsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OTkgQEAKKy8qIC0qLUMtKi0gIE5vdGUgc29t
ZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisKKy8q
IFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LCAxOTkwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k
YXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8K
KworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5
IEJpc29uIGludG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0
cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24g
d2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24g
MS4yNCBvZiBCaXNvbi4gICovCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19i
dWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90IF9fR05VQ19fICovCisjaWYgSEFWRV9BTExPQ0Ff
SAorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2Vsc2UgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8KKyNp
ZmRlZiBfQUlYCisgI3ByYWdtYSBhbGxvY2EKKyNlbHNlIC8qIG5vdCBfQUlYICovCitjaGFyICph
bGxvY2EgKCk7CisjZW5kaWYgLyogbm90IF9BSVggKi8KKyNlbmRpZiAvKiBub3QgSEFWRV9BTExP
Q0FfSCAqLworI2VuZGlmIC8qIG5vdCBfX0dOVUNfXyAqLworCitleHRlcm4gdm9pZCB5eWVycm9y
KGNoYXIqIHMpOworCisjaWZuZGVmIGFsbG9jYQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGFs
bG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZWxzZSAvKiBub3QgR05VIEMuICAqLworI2lmICghZGVm
aW5lZCAoX19TVERDX18pICYmIGRlZmluZWQgKHNwYXJjKSkgfHwgZGVmaW5lZCAoX19zcGFyY19f
KSB8fCBkZWZpbmVkIChfX3NwYXJjKSB8fCBkZWZpbmVkIChfX3NnaSkKKyNpbmNsdWRlIDxhbGxv
Y2EuaD4KKyNlbHNlIC8qIG5vdCBzcGFyYyAqLworI2lmIChkZWZpbmVkIChNU0RPUykgJiYgIWRl
ZmluZWQgKF9fVFVSQk9DX18pKSB8fCBkZWZpbmVkIChXSU4zMikKKyNpbmNsdWRlIDxtYWxsb2Mu
aD4KKyNlbHNlIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0NfXyAqLworI2lmIGRlZmluZWQoX0FJ
WCkKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyAjcHJhZ21hIGFsbG9jYQorI2Vsc2UgLyogbm90IE1T
RE9TLCBfX1RVUkJPQ19fLCBvciBfQUlYICovCisjaWZkZWYgX19ocHV4CisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgewordm9pZCAqYWxsb2NhICh1bnNpZ25lZCBpbnQpOworfTsKKyNl
bHNlIC8qIG5vdCBfX2NwbHVzcGx1cyAqLwordm9pZCAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5v
dCBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9faHB1eCAqLworI2VuZGlmIC8qIG5vdCBfQUlY
ICovCisjZW5kaWYgLyogbm90IE1TRE9TLCBvciBfX1RVUkJPQ19fICovCisjZW5kaWYgLyogbm90
IHNwYXJjLiAgKi8KKyNlbmRpZiAvKiBub3QgR05VIEMuICAqLworI2VuZGlmIC8qIGFsbG9jYSBu
b3QgZGVmaW5lZC4gICovCisKKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3Jp
dHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyCisgIHdoZW4gdGhlICVzZW1hbnRpY19wYXJzZXIg
ZGVjbGFyYXRpb24gaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci4KKyAgSXQgd2FzIHdy
aXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiBieSBzaW1wbGlmeWluZyB0aGUgaGFpcnkgcGFyc2Vy
CisgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIE5v
dGU6IHRoZXJlIG11c3QgYmUgb25seSBvbmUgZG9sbGFyIHNpZ24gaW4gdGhpcyBmaWxlLgorICAg
SXQgaXMgcmVwbGFjZWQgYnkgdGhlIGxpc3Qgb2YgYWN0aW9ucywgZWFjaCBhY3Rpb24KKyAgIGFz
IG9uZSBjYXNlIG9mIHRoZSBzd2l0Y2guICAqLworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0
YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUg
WVlFTVBUWQkJLTIKKyNkZWZpbmUgWVlFT0YJCTAKKyNkZWZpbmUgWVlBQ0NFUFQJcmV0dXJuKDAp
CisjZGVmaW5lIFlZQUJPUlQgCXJldHVybigxKQorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJy
bGFiMQorLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuCisgICBUaGlzIHJl
bWFpbnMgaGVyZSB0ZW1wb3JhcmlseSB0byBlYXNlIHRoZQorICAgdHJhbnNpdGlvbiB0byB0aGUg
bmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNpb24gMiBo
YXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKyNkZWZpbmUgWVlGQUlM
CQlnb3RvIHl5ZXJybGFiCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykK
KyNkZWZpbmUgWVlCQUNLVVAodG9rZW4sIHZhbHVlKSBcCitkbwkJCQkJCQkJXAorICBpZiAoeXlj
aGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsgeXljaGFyID0gKHRva2Vu
KSwgeXlsdmFsID0gKHZhbHVlKTsJCQlcCisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5
Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1
cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgeyB5eWVycm9y
ICgic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpOyBZWUVSUk9SOyB9CVwKK3doaWxlICgw
KQorCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisjaWZuZGVm
IFlZUFVSRQorI2RlZmluZSBZWUxFWAkJeXlsZXgoKQorI2VuZGlmCisKKyNpZmRlZiBZWVBVUkUK
KyNpZmRlZiBZWUxTUF9ORUVERUQKKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZWUxFWAkJ
eXlsZXgoJnl5bHZhbCwgJnl5bGxvYywgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxF
WAkJeXlsZXgoJnl5bHZhbCwgJnl5bGxvYykKKyNlbmRpZgorI2Vsc2UgLyogbm90IFlZTFNQX05F
RURFRCAqLworI2lmZGVmIFlZTEVYX1BBUkFNCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFs
LCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjZGVmaW5lIFlZTEVYCQl5eWxleCgmeXlsdmFsKQorI2Vu
ZGlmCisjZW5kaWYgLyogbm90IFlZTFNQX05FRURFRCAqLworI2VuZGlmCisKKy8qIElmIG5vbnJl
ZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlICovCisKKyNpZm5kZWYgWVlQVVJF
CisKK2ludAl5eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3ltYm9sCQkqLworWVlTVFlQRQl5
eWx2YWw7CQkJLyogIHRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUJCSovCisJCQkJLyogIGxvb2th
aGVhZCBzeW1ib2wJCQkqLworCisjaWZkZWYgWVlMU1BfTkVFREVECitZWUxUWVBFIHl5bGxvYzsJ
CQkvKiAgbG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZAkqLworCQkJCS8qICBzeW1ib2wJ
CQkJKi8KKyNlbmRpZgorCitpbnQgeXluZXJyczsJCQkvKiAgbnVtYmVyIG9mIHBhcnNlIGVycm9y
cyBzbyBmYXIgICAgICAgKi8KKyNlbmRpZiAgLyogbm90IFlZUFVSRSAqLworCisjaWYgWVlERUJV
RyAhPSAwCitpbnQgeXlkZWJ1ZzsJCQkvKiAgbm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFj
ZQkqLworLyogU2luY2UgdGhpcyBpcyB1bmluaXRpYWxpemVkLCBpdCBkb2VzIG5vdCBzdG9wIG11
bHRpcGxlIHBhcnNlcnMKKyAgIGZyb20gY29leGlzdGluZy4gICovCisjZW5kaWYKKworLyogIFlZ
SU5JVERFUFRIIGluZGljYXRlcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFj
a3MJKi8KKworI2lmbmRlZglZWUlOSVRERVBUSAorI2RlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNl
bmRpZgorCisvKiAgWVlNQVhERVBUSCBpcyB0aGUgbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2Fu
IGdyb3cgdG8KKyAgICAoZWZmZWN0aXZlIG9ubHkgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVu
c2lvbiBtZXRob2QgaXMgdXNlZCkuICAqLworCisjaWYgWVlNQVhERVBUSCA9PSAwCisjdW5kZWYg
WVlNQVhERVBUSAorI2VuZGlmCisKKyNpZm5kZWYgWVlNQVhERVBUSAorI2RlZmluZSBZWU1BWERF
UFRIIDEwMDAwCisjZW5kaWYKKworLyogUHJldmVudCB3YXJuaW5nIGlmIC1Xc3RyaWN0LXByb3Rv
dHlwZXMuICAqLworI2lmZGVmIF9fR05VQ19fCitpbnQgeXlwYXJzZSAodm9pZCk7CisjZW5kaWYK
KwwKKyNpZiBfX0dOVUNfXyA+IDEJCS8qIEdOVSBDIGFuZCBHTlUgQysrIGRlZmluZSB0aGlzLiAg
Ki8KKyNkZWZpbmUgX195eV9tZW1jcHkoRlJPTSxUTyxDT1VOVCkJX19idWlsdGluX21lbWNweShU
TyxGUk9NLENPVU5UKQorI2Vsc2UJCQkJLyogbm90IEdOVSBDIG9yIEMrKyAqLworI2lmbmRlZiBf
X2NwbHVzcGx1cworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBp
bmNvbXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2
YXJpb3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChmcm9tLCB0bywg
Y291bnQpCisgICAgIGNoYXIgKmZyb207CisgICAgIGNoYXIgKnRvOworICAgICBzaXplX3QgY291
bnQ7Cit7CisgIHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0g
dG87CisgIHJlZ2lzdGVyIHNpemVfdCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisg
ICAgKnQrKyA9ICpmKys7Cit9CisKKyNlbHNlIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFRoaXMg
aXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzCisgICBp
biBhdmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb25zIG9uIHZhcmlvdXMgc3lzdGVtcy4gICovCitz
dGF0aWMgdm9pZAorX195eV9tZW1jcHkgKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBzaXplX3QgY291
bnQpCit7CisgIHJlZ2lzdGVyIGNoYXIgKmYgPSBmcm9tOworICByZWdpc3RlciBjaGFyICp0ID0g
dG87CisgIHJlZ2lzdGVyIHNpemVfdCBpID0gY291bnQ7CisKKyAgd2hpbGUgKGktLSA+IDApCisg
ICAgKnQrKyA9ICpmKys7Cit9CisKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSB1c2VyIGNhbiBk
ZWZpbmUgWVlQQVJTRV9QQVJBTSBhcyB0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBiZSBwYXNz
ZWQKKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQg
Ki4KKyAgIEl0IHNob3VsZCBhY3R1YWxseSBwb2ludCB0byBhbiBvYmplY3QuCisgICBHcmFtbWFy
IGFjdGlvbnMgY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUgYnkgY2FzdGluZyBpdAorICAgdG8gdGhl
IHByb3BlciBwb2ludGVyIHR5cGUuICAqLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmbmRl
ZiBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZ
UEFSU0VfUEFSQU07CisjZW5kaWYgCisjZWxzZQorI2RlZmluZSBZWVBBUlNFX1BBUkFNCisjZGVm
aW5lIFlZUEFSU0VfUEFSQU1fREVDTAorI2VuZGlmCisKK2V4dGVybiBZWV9ERUNMOworCitpbnQK
K3l5cGFyc2UoWVlQQVJTRV9QQVJBTV9ERUNMIFlZUEFSU0VfUEFSQU0pIHsKKyAgcmVnaXN0ZXIg
aW50IHl5c3RhdGU7CisgIHJlZ2lzdGVyIGludCB5eW47CisgIHJlZ2lzdGVyIHNob3J0ICp5eXNz
cDsKKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisgIGludCB5eWVycnN0YXR1czsJLyogIG51
bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQgKi8K
KyAgaW50IHl5Y2hhcjEgPSAwOwkJLyogIGxvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAo
dHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyICovCisKKyAgc2hvcnQJeXlzc2FbWVlJTklUREVQVEhd
OwkvKiAgdGhlIHN0YXRlIHN0YWNrCQkJKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07
CS8qICB0aGUgc2VtYW50aWMgdmFsdWUgc3RhY2sJCSovCisKKyAgc2hvcnQgKnl5c3MgPSB5eXNz
YTsJCS8qICByZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMgKi8KKyAg
WVlTVFlQRSAqeXl2cyA9IHl5dnNhOwkvKiAgdG8gYWxsb3cgeXlvdmVyZmxvdyB0byByZWFsbG9j
YXRlIHRoZW0gZWxzZXdoZXJlICovCisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5
eWxzYVtZWUlOSVRERVBUSF07CS8qICB0aGUgbG9jYXRpb24gc3RhY2sJCQkqLworICBZWUxUWVBF
ICp5eWxzID0geXlsc2E7CisgIFlZTFRZUEUgKnl5bHNwOworCisjZGVmaW5lIFlZUE9QU1RBQ0sg
ICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKyNlbHNlCisjZGVmaW5lIFlZUE9QU1RBQ0sg
ICAoeXl2c3AtLSwgeXlzc3AtLSkKKyNlbmRpZgorCisgIHNpemVfdCB5eXN0YWNrc2l6ZSA9IFlZ
SU5JVERFUFRIOworCisjaWZkZWYgWVlQVVJFCisgIGludCB5eWNoYXI7CisgIFlZU1RZUEUgeXls
dmFsOworICBpbnQgeXluZXJyczsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxs
b2M7CisjZW5kaWYKKyNlbmRpZgorCisgIFlZU1RZUEUgeXl2YWw7CQkvKiAgdGhlIHZhcmlhYmxl
IHVzZWQgdG8gcmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0
aW9uCSovCisJCQkJLyogIHJvdXRpbmVzCQkJCSovCisKKyAgaW50IHl5bGVuOworCisjaWYgWVlE
RUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcg
cGFyc2VcbiIpOworI2VuZGlmCisKKyAgeXlzdGF0ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsK
KyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRv
IGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdh
c3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0
IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRo
ZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9
IHl5c3MgLSAxOworICB5eXZzcCA9IHl5dnM7CisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNw
ID0geXlsczsKKyNlbmRpZgorCisvKiBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBp
biAgeXlzdGF0ZSAgLiAgKi8KKy8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRo
ZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNv
IHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworeXluZXdzdGF0ZToK
KworICAqKyt5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNr
c2l6ZSAtIDEpCisgICAgeworICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2Nh
dGUgdGhlIHN0YWNrICovCisgICAgICAvKiBVc2UgY29waWVzIG9mIHRoZXNlIHNvIHRoYXQgdGhl
ICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8gbWVtb3J5LiAqLworICAgICAgWVlT
VFlQRSAqeXl2czEgPSB5eXZzOworICAgICAgc2hvcnQgKnl5c3MxID0geXlzczsKKyNpZmRlZiBZ
WUxTUF9ORUVERUQKKyAgICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKyNlbmRpZgorCisgICAg
ICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVs
ZW1lbnRzLiAgKi8KKyAgICAgIHNpemVfdCBzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lm
ZGVmIHl5b3ZlcmZsb3cKKyAgICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZv
bGxvd2VkIGJ5IHRoZSBzaXplIG9mCisJIHRoZSBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBp
biBieXRlcy4gICovCisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICAvKiBUaGlzIHVzZWQgdG8g
YmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisJIGJ1dCB0
aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworICAg
ICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwgc2l6ZSAq
IHNpemVvZiAoKnl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwkJ
ICZ5eWxzMSwgc2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZWxz
ZQorICAgICAgeXlvdmVyZmxvdygicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICZ5eXNzMSwg
c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICZ5eXZzMSwgc2l6ZSAqIHNpemVvZiAoKnl5dnNw
KSwKKwkJICZ5eXN0YWNrc2l6ZSk7CisjZW5kaWYKKworICAgICAgeXlzcyA9IHl5c3MxOyB5eXZz
ID0geXl2czE7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICB5eWxzID0geXlsczE7CisjZW5k
aWYKKyNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sg
b3VyIG93biB3YXkuICAqLworICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisJ
eworCSAgeXllcnJvcigicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisJICByZXR1cm4gMjsKKwl9
CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKHl5c3RhY2tzaXplID4gWVlNQVhE
RVBUSCkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisgICAgICB5eXNzID0gKHNob3J0ICop
IGFsbG9jYSAoeXlzdGFja3NpemUgKiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgX195eV9tZW1j
cHkgKChjaGFyICopeXlzczEsIChjaGFyICopeXlzcywgc2l6ZSAqIHNpemVvZiAoKnl5c3NwKSk7
CisgICAgICB5eXZzID0gKFlZU1RZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAqIHNpemVvZiAo
Knl5dnNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eXZzMSwgKGNoYXIgKil5eXZz
LCBzaXplICogc2l6ZW9mICgqeXl2c3ApKTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5
bHMgPSAoWVlMVFlQRSAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlsc3ApKTsK
KyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5bHMxLCAoY2hhciAqKXl5bHMsIHNpemUgKiBz
aXplb2YgKCp5eWxzcCkpOworI2VuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisg
ICAgICB5eXNzcCA9IHl5c3MgKyBzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHNpemUg
LSAxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAgeXlsc3AgPSB5eWxzICsgc2l6ZSAtIDE7
CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJZnByaW50
ZihzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlZFxuIiwgeXlzdGFja3NpemUpOwor
I2VuZGlmCisKKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorCVlZ
QUJPUlQ7CisgICAgfQorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZw
cmludGYoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpOworI2VuZGlmCisK
KyAgZ290byB5eWJhY2t1cDsKKyB5eWJhY2t1cDoKKworLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vz
c2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCisvKiBSZWFkIGEgbG9va2FoZWFkIHRv
a2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy8qIHl5
cmVzdW1lOiAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0
IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworCisgIHl5biA9IHl5cGFjdFt5eXN0
YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyog
Tm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUg
b25lLiAgKi8KKworICAvKiB5eWNoYXIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0YKKyAgICAg
b3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKworICBpZiAoeXljaGFyID09
IFlZRU1QVFkpCisgICAgeworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJ
ZnByaW50ZihzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpOworI2VuZGlmCisgICAgICB5eWNo
YXIgPSBZWUxFWDsKKyAgICB9CisKKyAgLyogQ29udmVydCB0b2tlbiB0byBpbnRlcm5hbCBmb3Jt
IChpbiB5eWNoYXIxKSBmb3IgaW5kZXhpbmcgdGFibGVzIHdpdGggKi8KKworICBpZiAoeXljaGFy
IDw9IDApCQkvKiBUaGlzIG1lYW5zIGVuZCBvZiBpbnB1dC4gKi8KKyAgICB7CisgICAgICB5eWNo
YXIxID0gMDsKKyAgICAgIHl5Y2hhciA9IFlZRU9GOwkJLyogRG9uJ3QgY2FsbCBZWUxFWCBhbnkg
bW9yZSAqLworCisjaWYgWVlERUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwlmcHJpbnRm
KHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIHl5Y2hhcjEgPSBZWVRSQU5TTEFURSh5eWNoYXIpOworCisjaWYgWVlE
RUJVRyAhPSAwCisgICAgICBpZiAoeXlkZWJ1ZykKKwl7CisJICBmcHJpbnRmIChzdGRlcnIsICJO
ZXh0IHRva2VuIGlzICVkICglcyIsIHl5Y2hhciwgeXl0bmFtZVt5eWNoYXIxXSk7CisJICAvKiBH
aXZlIHRoZSBpbmRpdmlkdWFsIHBhcnNlciBhIHdheSB0byBwcmludCB0aGUgcHJlY2lzZSBtZWFu
aW5nCisJICAgICBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisj
aWZkZWYgWVlQUklOVAorCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjZW5k
aWYKKwkgIGZwcmludGYgKHN0ZGVyciwgIilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5
eW4gKz0geXljaGFyMTsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tb
eXluXSAhPSB5eWNoYXIxKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVb
eXluXTsKKworICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRo
aXMgc3RhdGUuCisgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4K
KyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0
YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0
IHJldHVybiBzdWNjZXNzLgorICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJv
ci4gICovCisKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcp
CisJZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNl
OworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBp
ZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2th
aGVhZCB0b2tlbi4gICovCisKKyNpZiBZWURFQlVHICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAg
ZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLCB5eWNoYXIsIHl5dG5h
bWVbeXljaGFyMV0pOworI2VuZGlmCisKKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hp
ZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5
eWNoYXIgPSBZWUVNUFRZOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmZGVmIFlZTFNQX05F
RURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIC8qIGNvdW50IHRva2VucyBz
aGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3Igc3RhdHVzLiAg
Ki8KKyAgaWYgKHl5ZXJyc3RhdHVzKSB5eWVycnN0YXR1cy0tOworCisgIHl5c3RhdGUgPSB5eW47
CisgIGdvdG8geXluZXdzdGF0ZTsKKworLyogRG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUg
Y3VycmVudCBzdGF0ZS4gICovCit5eWRlZmF1bHQ6CisKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0
ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCisvKiBEbyBhIHJlZHVj
dGlvbi4gIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCit5
eXJlZHVjZToKKyAgeXlsZW4gPSB5eXIyW3l5bl07CisgIGlmICh5eWxlbiA+IDApCisgICAgeXl2
YWwgPSB5eXZzcFsxLXl5bGVuXTsgLyogaW1wbGVtZW50IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFj
dGlvbiAqLworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAg
IGludCBpOworCisgICAgICBmcHJpbnRmIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAo
bGluZSAlZCksICIsCisJICAgICAgIHl5biwgeXlybGluZVt5eW5dKTsKKworICAgICAgLyogUHJp
bnQgdGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZCwgYW5kIHRoZWlyIHJlc3VsdC4gICovCisgICAg
ICBmb3IgKGkgPSB5eXByaHNbeXluXTsgeXlyaHNbaV0gPiAwOyBpKyspCisJZnByaW50ZiAoc3Rk
ZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1tpXV0pOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
IC0+ICVzXG4iLCB5eXRuYW1lW3l5cjFbeXluXV0pOworICAgIH0KKyNlbmRpZgorCiskICAgLyog
dGhlIGFjdGlvbiBmaWxlIGdldHMgY29waWVkIGluIGluIHBsYWNlIG9mIHRoaXMgZG9sbGFyc2ln
biAqLworICB5eXZzcCAtPSB5eWxlbjsKKyAgeXlzc3AgLT0geXlsZW47CisjaWZkZWYgWVlMU1Bf
TkVFREVECisgIHl5bHNwIC09IHl5bGVuOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAg
aWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnNzcDEgPSB5eXNzIC0gMTsKKyAgICAg
IGZwcmludGYgKHN0ZGVyciwgInN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hpbGUgKHNzcDEg
IT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7CisgICAgICBmcHJp
bnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7
CisKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgeXlsc3ArKzsKKyAgaWYgKHl5bGVuID09IDApCisg
ICAgeworICAgICAgeXlsc3AtPmZpcnN0X2xpbmUgPSB5eWxsb2MuZmlyc3RfbGluZTsKKyAgICAg
IHl5bHNwLT5maXJzdF9jb2x1bW4gPSB5eWxsb2MuZmlyc3RfY29sdW1uOworICAgICAgeXlsc3At
Pmxhc3RfbGluZSA9ICh5eWxzcC0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29s
dW1uID0gKHl5bHNwLTEpLT5sYXN0X2NvbHVtbjsKKyAgICAgIHl5bHNwLT50ZXh0ID0gMDsKKyAg
ICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWxzcC0+bGFzdF9saW5lID0gKHl5bHNwK3l5bGVu
LTEpLT5sYXN0X2xpbmU7CisgICAgICB5eWxzcC0+bGFzdF9jb2x1bW4gPSAoeXlsc3AreXlsZW4t
MSktPmxhc3RfY29sdW1uOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdyAic2hpZnQiIHRoZSBy
ZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4KKyAgICAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUgdGhhdCBn
b2VzIHRvLAorICAgICBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8KKyAgICAg
YW5kIHRoZSBydWxlIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07
CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAo
eXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0g
Knl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlz
dGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOwor
Cit5eWVycmxhYjogICAvKiBoZXJlIG9uIGRldGVjdGluZyBlcnJvciAqLworCisgIGlmICghIHl5
ZXJyc3RhdHVzKQorICAgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJv
ciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lm
ZGVmIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAg
ICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBpbnQgc2l6ZSA9IDA7
CisJICBjaGFyICptc2c7CisJICBpbnQgeCwgY291bnQ7CisKKwkgIGNvdW50ID0gMDsKKwkgIC8q
IFN0YXJ0IFggYXQgLXl5biBpZiBuZWMgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbiB5eWNo
ZWNrLiAgKi8KKwkgIGZvciAoeCA9ICh5eW4gPCAwID8gLXl5biA6IDApOworCSAgICAgICB4IDwg
KHNpemVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCSAgICBpZiAoeXljaGVj
a1t4ICsgeXluXSA9PSB4KQorCSAgICAgIHNpemUgKz0gc3RybGVuKHl5dG5hbWVbeF0pICsgMTUs
IGNvdW50Kys7CisJICBtc2cgPSAoY2hhciAqKSBtYWxsb2Moc2l6ZSArIDE1KTsKKwkgIGlmICht
c2cgIT0gMCkKKwkgICAgeworCSAgICAgIHN0cmNweShtc2csICJwYXJzZSBlcnJvciIpOworCisJ
ICAgICAgaWYgKGNvdW50IDwgNSkKKwkJeworCQkgIGNvdW50ID0gMDsKKwkJICBmb3IgKHggPSAo
eXluIDwgMCA/IC15eW4gOiAwKTsKKwkJICAgICAgIHggPCAoc2l6ZW9mKHl5dG5hbWUpIC8gc2l6
ZW9mKGNoYXIgKikpOyB4KyspCisJCSAgICBpZiAoeXljaGVja1t4ICsgeXluXSA9PSB4KQorCQkg
ICAgICB7CisJCQlzdHJjYXQobXNnLCBjb3VudCA9PSAwID8gIiwgZXhwZWN0aW5nIGAiIDogIiBv
ciBgIik7CisJCQlzdHJjYXQobXNnLCB5eXRuYW1lW3hdKTsKKwkJCXN0cmNhdChtc2csICInIik7
CisJCQljb3VudCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yKG1zZyk7CisJICAg
ICAgZnJlZShtc2cpOworCSAgICB9CisJICBlbHNlCisJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJv
cjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGNlZWRlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRp
ZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwl5eWVycm9yKCJwYXJzZSBlcnJvciIpOworICAgIH0K
KworICBnb3RvIHl5ZXJybGFiMTsKK3l5ZXJybGFiMTogICAvKiBoZXJlIG9uIGVycm9yIHJhaXNl
ZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbiAqLworCisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQor
ICAgIHsKKyAgICAgIC8qIGlmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhl
YWQgdG9rZW4gYWZ0ZXIgYW4gZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1
cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlF
T0YpCisJWVlBQk9SVDsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJ
ZnByaW50ZihzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLCB5eWNoYXIsIHl5
dG5hbWVbeXljaGFyMV0pOworI2VuZGlmCisKKyAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisgICAg
fQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuCisgICAgIGFm
dGVyIHNoaWZ0aW5nIHRoZSBlcnJvciB0b2tlbi4gICovCisKKyAgeXllcnJzdGF0dXMgPSAzOwkJ
LyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzICovCisKKyAgZ290byB5
eWVycmhhbmRsZTsKKworeXllcnJkZWZhdWx0OiAgLyogY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBk
byBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgZXJyb3IgdG9rZW4uICovCisKKyNpZiAwCisgIC8q
IFRoaXMgaXMgd3Jvbmc7IG9ubHkgc3RhdGVzIHRoYXQgZXhwbGljaXRseSB3YW50IGVycm9yIHRv
a2VucworICAgICBzaG91bGQgc2hpZnQgdGhlbS4gICovCisgIHl5biA9IHl5ZGVmYWN0W3l5c3Rh
dGVdOyAgLyogSWYgaXRzIGRlZmF1bHQgaXMgdG8gYWNjZXB0IGFueSB0b2tlbiwgb2suICBPdGhl
cndpc2UgcG9wIGl0LiovCisgIGlmICh5eW4pIGdvdG8geXlkZWZhdWx0OworI2VuZGlmCisKK3l5
ZXJycG9wOiAgIC8qIHBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5k
bGUgdGhlIGVycm9yIHRva2VuICovCisKKyAgaWYgKHl5c3NwID09IHl5c3MpIFlZQUJPUlQ7Cisg
IHl5dnNwLS07CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAg
eXlsc3AtLTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAg
IHsKKyAgICAgIHNob3J0ICpzc3AxID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIs
ICJFcnJvcjogc3RhdGUgc3RhY2sgbm93Iik7CisgICAgICB3aGlsZSAoc3NwMSAhPSB5eXNzcCkK
KwlmcHJpbnRmIChzdGRlcnIsICIgJWQiLCAqKytzc3AxKTsKKyAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIlxuIik7CisgICAgfQorI2VuZGlmCisKK3l5ZXJyaGFuZGxlOgorCisgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWUZMQUcpCisgICAgZ290byB5eWVycmRlZmF1bHQ7
CisKKyAgeXluICs9IFlZVEVSUk9SOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwg
eXljaGVja1t5eW5dICE9IFlZVEVSUk9SKQorICAgIGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5
biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9
PSBZWUZMQUcpCisJZ290byB5eWVycnBvcDsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3Rv
IHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycnBv
cDsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyNpZiBZWURFQlVH
ICE9IDAKKyAgaWYgKHl5ZGVidWcpCisgICAgZnByaW50ZihzdGRlcnIsICJTaGlmdGluZyBlcnJv
ciB0b2tlbiwgIik7CisjZW5kaWYKKworICAqKyt5eXZzcCA9IHl5bHZhbDsKKyNpZmRlZiBZWUxT
UF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKworICB5eXN0YXRlID0geXlu
OworICBnb3RvIHl5bmV3c3RhdGU7Cit9CkluZGV4OiBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2ds
c2xhbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5j
cHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NTggQEAKKworI2xpbmUgMyAic3JjL2ludGVybWVkaWF0
ZS9nbHNsYW5nLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8q
IEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9T
Q0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhf
TUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lm
IFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYK
KworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXIt
c3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwor
CisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRf
SAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4u
IE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1RE
Q19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5
cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5o
LAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBl
cy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElN
SVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50
OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYg
aW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0
eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQz
Ml90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNo
b3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2Vu
ZGlmIC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5k
ZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRp
ZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMy
NzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAg
ICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZp
bmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01B
WAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRl
ZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykK
KyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAg
ICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVgg
ICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5l
IFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIg
c3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNU
CisKKyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19f
IHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmlu
ZSBZWV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlm
CS8qICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNv
bnN0IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQg
dXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEg
cG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisg
KiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIg
aXMgbmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQg
dW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZ
WV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEVu
dGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBh
IHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZv
cmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLwor
I2RlZmluZSBCRUdJTiAoeXlfc3RhcnQpID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1
cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAor
ICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlz
IGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCgoeXlf
c3RhcnQpIC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBu
dW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZ
X1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNw
ZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisj
ZGVmaW5lIFlZX05FV19GSUxFIHl5cmVzdGFydCh5eWluICApCisKKyNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUl9DSEFSIDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNp
Zm5kZWYgWVlfQlVGX1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisv
KiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBl
ciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JV
Rl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlf
QlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9T
VEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZ
X1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwor
ZXh0ZXJuIHl5X3NpemVfdCB5eWxlbmc7CisKK2V4dGVybiBGSUxFICp5eWluLCAqeXlvdXQ7CisK
KyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0Zf
RklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3RlOiBXZSBz
cGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1
c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxl
IHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKKyAgICAg
KiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURF
IHl5bGV4LiAKKyAgICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5
X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAgICogICAgICAgYSA1JSBw
ZXJmb3JtYW5jZSBoaXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3Qg
aXMKKyAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxl
LS0gc28gaXQgaXMgbm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNkZWZpbmUgIFlZX0xFU1Nf
TElORU5PKG4pIFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGludCB5eWw7
XAorICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAg
ICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgwKQorICAg
IAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFj
ayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCVlZX1JF
U1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQkoeXlfY19idWZfcCkgPSB5eV9jcCA9IHl5X2JwICsg
eXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047
IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisjZGVm
aW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQorCisjaWZuZGVmIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQor
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hh
ciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8q
IGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0
IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0
ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFy
YWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFj
dGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93
biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2Fu
IHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRl
bGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhp
cyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdl
J3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkg
KiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0
IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsK
KworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9m
IGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0
IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAg
IGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2Jz
X2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAgIAorCS8qIFdoZXRoZXIgdG8g
dHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBv
ZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1
czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAx
CisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0
IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElO
RywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRo
ZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5j
aCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJh
Y2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFu
Z2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRo
ZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBh
dCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcg
MgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBT
dGFjayBvZiBpbnB1dCBidWZmZXJzLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
dG9wID0gMDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5
X2J1ZmZlcl9zdGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGlj
IFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjayA9IDA7IC8qKjwgU3RhY2sgYXMgYW4g
YXJyYXkuICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0
YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIg
c3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0
dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJS
RU5UX0JVRkZFUiAoICh5eV9idWZmZXJfc3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBi
dXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBO
VUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAq
LworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5
X2J1ZmZlcl9zdGFja190b3ApXQorCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3Rl
ciBsb3N0IHdoZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hh
cjsKK3N0YXRpYyB5eV9zaXplX3QgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJz
IHJlYWQgaW50byB5eV9jaF9idWYgKi8KK3l5X3NpemVfdCB5eWxlbmc7CisKKy8qIFBvaW50cyB0
byBjdXJyZW50IGNoYXJhY3RlciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZf
cCA9IChjaGFyICopIDA7CitzdGF0aWMgaW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBu
ZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBz
dGF0ZSBudW1iZXIgKi8KKworLyogRmxhZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgp
J3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVz
aCB5eWluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZjsKKwordm9pZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7
Cit2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICAp
OworWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUg
ICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5
eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eXB1c2hfYnVmZmVy
X3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsKK3ZvaWQgeXlwb3BfYnVmZmVy
X3N0YXRlICh2b2lkICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9p
ZCApOworc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2
b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisj
ZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
KQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90
IHNpemUgICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAq
eXlfc3RyICApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAgKTsKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwor
dm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQg
KiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmlu
ZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwK
KwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRl
X2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZp
bmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXtcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
ID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5l
IHl5d3JhcChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBZWV9DSEFSOworCitGSUxFICp5eWluID0gKEZJTEUgKikgMCwgKnl5b3V0ID0gKEZJTEUg
KikgMDsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworZXh0ZXJuIGludCB5eWxpbmVu
bzsKKworaW50IHl5bGluZW5vID0gMTsKKworZXh0ZXJuIGNoYXIgKnl5dGV4dDsKKyNkZWZpbmUg
eXl0ZXh0X3B0ciB5eXRleHQKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlICh2b2lkICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5
eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICk7CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAodm9pZCApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBt
c2dbXSAgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1h
dGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5
eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJKHl5dGV4dF9wdHIp
ID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwkoeXlf
aG9sZF9jaGFyKSA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwkoeXlfY19idWZfcCkg
PSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQyCisjZGVmaW5lIFlZX0VORF9PRl9C
VUZGRVIgMTQzCisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisg
ICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZv
CisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9
Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0MDddID0KKyAgICB7ICAg
MCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDE0MywgIDE0MSwgIDE0MCwgIDE0MCwg
IDEyNSwgIDEzMSwKKyAgICAgIDEzNiwgIDEyMCwgIDEyMSwgIDEyOSwgIDEyOCwgIDExNywgIDEy
NiwgIDEyNCwgIDEzMCwgICA4OCwKKyAgICAgICA4OCwgIDExOCwgIDExNCwgIDEzMiwgIDExOSwg
IDEzMywgIDEzNywgICA4NCwgIDEyMiwgIDEyMywKKyAgICAgIDEzNSwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4
NCwgIDExNSwgIDEzNCwgIDExNiwgIDEyNywgIDEzOSwgIDE0MiwgIDE0MSwgIDEzOCwgIDExMSwK
KyAgICAgICA5NywgIDExNiwgIDEwNSwgIDEwMCwgICA5NSwgIDEwMywgICA5MywgIDEwNCwgICA5
NCwgICA5MSwKKyAgICAgICA5MiwgICAgMCwgICA5NiwgICA5MCwgICA4NiwgICA4NywgICAgMCwg
ICAgMCwgICA4OCwgIDEyMywKKyAgICAgIDExNSwgIDEyMiwgIDExMiwgIDEwOCwgIDExMCwgIDEw
OSwgIDExMywgICA4NCwgIDEwMSwgIDEwNywKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwKKworICAgICAgIDEzLCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDE2LCAgIDE4LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAor
ICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgMTAyLCAgMTA2LCAgMTM4LCAgICAw
LCAgICAwLCAgICAxLCAgIDkwLCAgICAwLAorICAgICAgICAwLCAgIDg5LCAgIDg1LCAgIDk4LCAg
IDk5LCAgIDQ0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAgICAgIDg0LCAg
IDg0LCAgIDg0LCAgIDE0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LAorICAg
ICAgIDg0LCAgIDg0LCAgIDIyLCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LAorICAgICAgIDg0LCAgIDE5LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LAorCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAg
IDAsICAgOTEsICAgIDAsICAgOTAsICAgODQsICAgMjQsCisgICAgICAgODQsICAgODQsICAgODEs
ICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsCisgICAgICAgMTcsICAg
NDcsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNTIsICAgNjYsICAgODQsCisgICAg
ICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgNjMsICAgIDUsICAg
MjksCisgICAgICAgMzAsICAgMzEsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgODQsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAg
ODQsICAgNTAsICAgMjUsICAgODQsCisgICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQs
ICAgMzIsICAgMzMsICAgMzQsICAgMjMsICAgODQsCisgICAgICAgODQsICAgODQsICAgMTEsICAg
MzgsICAgMzksICAgNDAsICAgNDUsICAgIDgsICAgODQsICAgODQsCisgICAgICAgODQsICAgODQs
ICAgNzcsICAgNzgsICAgNzksICAgODQsICAgMjYsICAgNjcsICAgMjEsICAgNzQsCisKKyAgICAg
ICA3NSwgICA3NiwgICAgMywgICA3MSwgICA3MiwgICA3MywgICA4NCwgICAyMCwgICA2OSwgICA4
NCwKKyAgICAgICA4NCwgICAzNSwgICAzNiwgICAzNywgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA2NCwgICA4NCwgICA4NCwgICA4
NCwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA0NiwgICA4NCwgICA4MywgICA4NCwg
ICA4NCwgICAxNSwgICA4NCwgICA4NCwgICA4NCwKKyAgICAgICA4NCwgICA2NSwgICA2MCwgICA1
NSwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA3MCwKKyAgICAgICA1MSwgICA4NCwg
ICA1OCwgICAyOCwgICA4NCwgICA4MCwgICA1OSwgICA0MywgICA1MywgICA4NCwKKyAgICAgICA4
NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA1NCwgICAyNywgICA4NCwK
KyAgICAgICA4NCwgICA4NCwgICAgNCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA0
OCwgICAgOSwKKyAgICAgICA4NCwgICAxMCwgICA4NCwgICA4NCwgICAxMiwgICA2MSwgICA4NCwg
ICA4NCwgICA4NCwgICA1NiwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA0OSwgICA2OCwgICA1
NywgICAgNywgICA2MiwgICAgMiwgICA4MiwKKworICAgICAgICA2LCAgIDQxLCAgIDg0LCAgIDg0
LCAgIDQyLCAgICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9l
Y1syNTZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgMiwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywK
KyAgICAgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAx
NiwgICAxNywKKyAgICAgICAxOCwgICAxOSwgICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwg
ICAyMSwgICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAy
NywgICAyOCwgICAyOSwgICAzMCwgICAyNywKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAz
MSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMiwgICAzMSwgICAzMSwKKyAgICAgICAzMywg
ICAgMSwgICAzNCwgICAzNSwgICAzMSwgICAgMSwgICAzNiwgICAzNywgICAzOCwgICAzOSwKKwor
ICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDMxLCAgIDQ1LCAgIDQ2LCAgIDQ3
LCAgIDQ4LAorICAgICAgIDQ5LCAgIDUwLCAgIDMxLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU0LCAg
IDU1LCAgIDU2LCAgIDU3LAorICAgICAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLCAgIDYyLCAgIDYz
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEK
KyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjRdID0KKyAg
ICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAg
MiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMywgICAgMywgICAg
MSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKKyAgICAgICAgMiwg
ICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKKyAg
ICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYmFzZVs0MTFdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwg
ICA2MywgICAgMCwgIDYwMCwgIDYwMSwgIDYwMSwgIDYwMSwgIDU3NSwgIDEwMywKKyAgICAgIDEy
MywgIDYwMSwgIDYwMSwgIDU3NCwgIDEyMCwgIDYwMSwgIDExOSwgIDExNywgIDEzMSwgIDE0MywK
KyAgICAgIDE1MSwgIDU3MiwgIDYwMSwgIDE2OSwgIDU3MiwgIDExNCwgIDYwMSwgICAgMCwgIDYw
MSwgIDYwMSwKKyAgICAgIDExNywgICA5NiwgIDEwMiwgIDEzNiwgIDE0MCwgIDEzMCwgIDE1MCwg
IDU0NiwgIDExMCwgIDE1NiwKKyAgICAgIDU0NSwgIDE2MiwgIDE1MiwgIDUzOSwgIDE2NywgIDU1
MiwgIDE3MCwgIDE2OSwgIDE2NywgIDE4OCwKKyAgICAgIDU0OCwgIDYwMSwgIDExOCwgIDYwMSwg
IDYwMSwgIDYwMSwgIDYwMSwgIDU3NiwgICAgMCwgIDYwMSwKKyAgICAgIDYwMSwgIDYwMSwgIDYw
MSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDYwMSwgIDIxNCwKKyAgICAgIDYwMSwg
IDU4NiwgIDYwMSwgIDIyMywgIDIzMiwgIDI1MSwgIDI2NywgICAgMCwgIDI3NywgIDYwMSwKKyAg
ICAgIDYwMSwgIDYwMSwgIDU2NCwgIDYwMSwgIDYwMSwgIDYwMSwgIDU2MywgICAgMCwgIDYwMSwg
IDYwMSwKKyAgICAgIDUzOSwgIDUzMiwgIDUzNSwgIDU0MywgIDU0MiwgIDUyOSwgIDU0NCwgIDUz
MSwgIDUzNywgIDUyNSwKKworICAgICAgNTIyLCAgNTM1LCAgNTIyLCAgNTE5LCAgNTE5LCAgNTI1
LCAgNTEzLCAgNTIwLCAgNTE3LCAgNTI3LAorICAgICAgNTEzLCAgNTE5LCAgNTIyLCAgNTIzLCAg
ICAwLCAgMjUzLCAgNTIyLCAgMTYwLCAgNTA4LCAgNTIxLAorICAgICAgNTEyLCAgNTE0LCAgNTA0
LCAgNTE4LCAgNTE1LCAgNTE3LCAgNTAwLCAgNTA1LCAgNTAyLCAgNDkxLAorICAgICAgMTcxLCAg
NTA1LCAgNTAxLCAgNTAzLCAgNDkyLCAgNDk1LCAgMTczLCAgNTAwLCAgNDkyLCAgNTA0LAorICAg
ICAgMjExLCAgNDk3LCAgNjAxLCAgNjAxLCAgICAwLCAgMzAzLCAgNTM3LCAgNjAxLCAgMzA5LCAg
MzI1LAorICAgICAgMzM1LCAgMzQxLCAgICAwLCAgNjAxLCAgNjAxLCAgICAwLCAgNDg4LCAgNDky
LCAgNTAxLCAgNDk4LAorICAgICAgNDgyLCAgNDgyLCAgMTgzLCAgNDk3LCAgNDk0LCAgNDk0LCAg
NDkyLCAgNDg5LCAgNDgxLCAgNDg3LAorICAgICAgNDc0LCAgNDg1LCAgNDg4LCAgICAwLCAgNDg1
LCAgNDczLCAgNDgwLCAgNDc3LCAgNDgxLCAgNDc0LAorICAgICAgNDYzLCAgNDYyLCAgNDc1LCAg
NDc4LCAgNDc1LCAgNDcwLCAgNDYxLCAgMjQxLCAgNDY2LCAgNDY5LAorICAgICAgNDYwLCAgNDU3
LCAgNDYxLCAgNDY3LCAgNDU4LCAgNDQ5LCAgNDUyLCAgNDUwLCAgNDYwLCAgNDQ2LAorCisgICAg
ICA0NDQsICA0NDQsICA0NDYsICA0NDMsICA0NTQsICA0NTMsICAyMjQsICA0NDgsICA0NDMsICA0
MzIsCisgICAgICAyNTcsICA0NTAsICA0NTIsICA0NDEsICAzNDcsICAzNTMsICAzNTksICAzNjUs
ICA0NDIsICAgIDAsCisgICAgICA0NDAsICAyOTIsICAgIDAsICA0MzIsICA0MzAsICA0MzgsICA0
MjcsICA0NDQsICA0MzMsICAzMTMsCisgICAgICAgIDAsICAgIDAsICA0MjcsICA0MzcsICA0Mzcs
ICA0MjIsICAzMjksICAgIDAsICAgIDAsICA0MjQsCisgICAgICAzNjksICA0MjUsICA0MTksICA0
MTgsICA0MTksICA0MTgsICAzNzIsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAs
ICA0MTQsICA0MTUsICA0MjAsICA0MTEsICA0MjQsICA0MTksICA0MTgsICA0MTAsCisgICAgICA0
MTQsICA0MDYsICA0MDksICA0MTMsICA0MTgsICA0MTcsICA0MDgsICAgIDAsICAgIDAsICA0MTQs
CisgICAgICA0MDMsICA0MDMsICA0MDgsICA0MDcsICA0MDQsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAzOTQsCisgICAgICA0MDYsICA0MDgsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAzOTYsICAzOTcsCisgICAgICAzOTEsICA0MDEsICAgIDAsICAgIDAsICAgIDAsICAz
OTIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgIDM5OSwgICAgMCwgICAgMCwgIDM5NywKKyAgICAgIDM5MywgICAgMCwg
ICAgMCwgICAgMCwgIDM4OSwgIDM4NSwgIDM5MCwgIDM4MCwgIDM5MywgIDM3OSwKKyAgICAgIDM5
MiwgIDM4MSwgIDM4OCwgICAgMCwgIDM4NiwgIDM4OCwgIDM3MiwgIDM4MSwgIDM4NywgIDM4MiwK
KyAgICAgIDM3MCwgICAgMCwgIDM3MiwgICAgMCwgIDM3MSwgIDM3NCwgICAgMCwgIDM2MywgIDM2
MiwgIDM2MiwKKyAgICAgIDM3NSwgICAgMCwgIDM3NywgICAgMCwgIDM3NiwgIDM3NSwgIDM2MCwg
IDM3MywgIDM2MCwgICAgMCwKKyAgICAgICAgMCwgIDM2MywgICAgMCwgICAgMCwgIDM1NSwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDM1MiwKKyAgICAgIDM2MywgIDM1NiwgIDM2MiwgIDM1OSwg
IDM1NCwgIDM0NiwgIDI5OCwgICAgMCwgICAgMCwgIDI5MCwKKyAgICAgIDI5NiwgIDI4NSwgICAg
MCwgIDI3OCwgIDI3NCwgIDI2MywgIDI2MSwgIDI2NSwgICAgMCwgICAgMCwKKyAgICAgIDI2NSwg
ICAgMCwgIDI2MSwgIDI2MCwgICAgMCwgICAgMCwgIDI1OCwgIDIzNSwgIDI0MCwgICAgMCwKKyAg
ICAgIDIxMywgIDIyNywgIDE5MiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwKKworICAgICAgICAwLCAgICAwLCAgMTczLCAgMTM3LCAgICAwLCAgNjAxLCAgMzkwLCAg
MzkyLCAgMzk1LCAgMTQ4CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9kZWZbNDExXSA9CisgICAgeyAgIDAsCisgICAgICA0MDYsICAgIDEsICA0MDYsICAgIDMsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAg
ICA0MDYsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDgsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDksICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MTAsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDcsICA0MDYsICA0MDYsCisgICAgICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
CisKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywg
IDQwNiwgIDQwNiwgIDQwOCwgIDQwNiwgIDQwOSwgIDQwNiwgIDQwNiwgIDQwNiwKKyAgICAgIDQw
NiwgIDQwNiwgIDQxMCwgIDQwNiwgIDQwNiwgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywK
KyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQw
NywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKyAgICAgIDQwNywgIDQwNywgIDQwNywgIDQwNywg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywKKworICAgICAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA3LCAgNDA3LAor
ICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAgICAgNDA3LCAg
NDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LAorICAg
ICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAg
NDA3LAorICAgICAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3LCAgNDA3
LCAgNDA3LCAgNDA3LAorCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAg
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcsICA0MDcsICA0
MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisgICAgICA0MDcsICA0MDcs
ICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsICA0MDcsCisKKyAgICAg
IDQwNywgIDQwNywgIDQwNywgIDQwNywgIDQwNywgICAgMCwgIDQwNiwgIDQwNiwgIDQwNiwgIDQw
NgorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY2NV0gPQor
ICAgIHsgICAwLAorICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEy
LCAgIDEzLCAgIDE0LCAgIDE1LAorICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAg
IDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1
LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LAorICAgICAgIDI4LCAgIDI4LCAg
IDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2LAorICAgICAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDI4LCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgIDQ1LAor
ICAgICAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDI4LCAgIDI4LCAgIDI4
LCAgIDUyLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgICA2LCAgIDU2LCAgIDU3LCAgICA2LCAg
ICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2
LCAgIDU4LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAg
ICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgIDU5LAorICAgICAgIDU5LCAgIDU5LCAgIDU5
LCAgIDU5LCAgIDU5LCAgICA2LCAgICA2LCAgICA2LCAgIDU5LCAgIDU5LAorCisgICAgICAgNTks
ICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksCisg
ICAgICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTksICAgNTks
ICAgNTksCisgICAgICAgNTksICAgNTksICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgNjEsICAg
NjIsICAgNjMsICAgNjYsCisgICAgICAgNjgsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAs
ICAgNzAsICAgODYsICAgODcsICAgNzEsCisgICAgICAgODksICAxNDMsICAgNjksICAgNjcsICAg
NzIsICAxMTIsICAgNjQsICAgOTEsICAgOTIsICAxNTMsCisgICAgICAgOTMsICAgOTAsICAgOTQs
ICAxMTMsICAgNzMsICAgNzQsICAgOTUsICAgNzUsICAgNzUsICAgNzUsCisgICAgICAgNzUsICAg
NzUsICAgNzYsICAgNzQsICAxMTQsICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksCisgICAg
ICAgNzksICAgOTYsICAgNzcsICAgODEsICAgNzgsICAxMDMsICA0MDUsICAxMDQsICAxNDQsICAg
OTksCisgICAgICAgNzcsICAgOTcsICAgNzcsICAxMDAsICAgOTgsICAxMDYsICAxMDUsICAxMjEs
ICAxMDEsICAgODIsCisgICAgICAgNzcsICAgODMsICAgODQsICAxMDcsICAxMDIsICAxMDgsICAx
MTUsICAxMTksICAxMDksICAgNzgsCisKKyAgICAgIDEyMiwgIDEyMCwgIDEyNCwgIDExNiwgIDEx
MCwgIDEyOCwgIDIwMCwgIDE4NiwgIDEzMywgIDQwNCwKKyAgICAgIDExNywgIDEzNCwgIDEyOSwg
IDEzMCwgIDEzNywgIDE4NywgIDIwNywgIDEyNSwgIDEzOCwgIDEzNSwKKyAgICAgIDEyNiwgIDIw
MSwgIDEzMSwgIDEzOSwgIDIwOCwgIDEzMiwgIDEzNiwgIDE0MCwgICA3MCwgICA3MCwKKyAgICAg
ICA3MCwgICA3MCwgICA3MCwgICA3MCwgIDIyNSwgIDIyNiwgIDE0MSwgIDE0OSwgIDE0OSwgIDE0
OSwKKyAgICAgIDE0OSwgIDE0OSwgIDE0OSwgIDE0NiwgICA3NCwgIDQwMywgICA3NSwgICA3NSwg
ICA3NSwgICA3NSwKKyAgICAgICA3NSwgICA3NiwgIDE1MCwgIDE0NiwgIDIxMiwgIDQwMiwgIDIx
MywgIDI1MCwgIDI1MSwgIDI1MiwKKyAgICAgIDQwMSwgICA3NywgIDE1MCwgICA3NCwgIDI3MSwg
ICA3NiwgICA3NiwgICA3NiwgICA3NiwgICA3NiwKKyAgICAgICA3NiwgICA3NywgIDI3MiwgIDI3
NiwgIDI3NywgIDI3OCwgIDE1MSwgIDM5MiwgIDE1MSwgIDQwMCwKKyAgICAgICA3NywgIDE1Miwg
IDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDM5OSwgIDM5MywgICA3NCwKKyAgICAgICA3
NywgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgIDM5OCwgIDE4MCwgIDM5NywK
KworICAgICAgMzk2LCAgMTgxLCAgMTgyLCAgMzk1LCAgMzk0LCAgMTgzLCAgIDc3LCAgMTg0LCAg
Mjg0LCAgMjg1LAorICAgICAgMjg2LCAgMzkxLCAgMjE1LCAgMzkwLCAgMjE1LCAgMzg5LCAgIDc3
LCAgMjE2LCAgMjE2LCAgMjE2LAorICAgICAgMjE2LCAgMjE2LCAgMjE2LCAgMTQ5LCAgMTQ5LCAg
MTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMjkzLAorICAgICAgMjk0LCAgMjk1LCAgMzg4LCAgMzg3
LCAgMjE3LCAgMzg2LCAgMjE3LCAgMzg1LCAgMTUwLCAgMjE4LAorICAgICAgMjE4LCAgMjE4LCAg
MjE4LCAgMjE4LCAgMjE4LCAgMzAwLCAgMzAxLCAgMzAyLCAgMTUwLCAgMTUyLAorICAgICAgMTUy
LCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAor
ICAgICAgMTUyLCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE2
LCAgMjE2LAorICAgICAgMjE2LCAgMjE2LCAgMjE2LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAg
MjE4LCAgMjE4LCAgMjE4LAorICAgICAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMjE4LCAgMzA0
LCAgMzA1LCAgMzA2LCAgMzEyLCAgMzEzLAorICAgICAgMzE0LCAgIDg4LCAgIDg4LCAgMTQ1LCAg
MTQ1LCAgMTQ3LCAgMTQ3LCAgMTQ3LCAgMzg0LCAgMzgzLAorCisgICAgICAzODIsICAzODEsICAz
ODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCisgICAgICAzNzIs
ICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCisg
ICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQs
ICAzNTMsCisgICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAz
NDUsICAzNDQsICAzNDMsCisgICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcs
ICAzMzYsICAzMzUsICAzMzQsICAzMzMsCisgICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCisgICAgICAzMjIsICAzMjEsICAzMjAs
ICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTEsICAzMTAsCisgICAgICAzMDksICAz
MDgsICAzMDcsICAzMDMsICAyOTksICAyOTgsICAyOTcsICAyOTYsICAyOTIsICAyOTEsCisgICAg
ICAyOTAsICAyODksICAyODgsICAyODcsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAy
NzUsCisgICAgICAyNzQsICAyNzMsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUs
ICAyNjQsICAyNjMsCisKKyAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1Nywg
IDI1NiwgIDI1NSwgIDI1NCwgIDI1MywKKyAgICAgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0
NSwgIDI0NCwgIDI0MywgIDI0MiwgIDI0MSwgIDI0MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNywg
IDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKKyAgICAgIDIyOSwgIDIy
OCwgIDIyNywgIDIyNCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwgIDIxOSwgIDE0OCwKKyAgICAg
IDIxNCwgIDIxMSwgIDIxMCwgIDIwOSwgIDIwNiwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMiwgIDE5
OSwKKyAgICAgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwg
IDE5MCwgIDE4OSwKKyAgICAgIDE4OCwgIDE4NSwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3
NSwgIDE3NCwgIDE3MywgIDE3MiwKKyAgICAgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2Nywg
IDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MiwKKyAgICAgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE0OCwgICA3MiwKKyAgICAgIDE0MiwgIDEyNywg
IDEyMywgIDExOCwgIDExMSwgICA4NSwgICA4MCwgICA2NSwgICA2MCwgIDQwNiwKKworICAgICAg
ICA1LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2LCAgNDA2LCAg
NDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LCAgNDA2LAorICAgICAgNDA2
LCAgNDA2LCAgNDA2LCAgNDA2CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9jaGtbNjY1XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCisgICAg
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsCisKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAxMCwgICAxMCwgICAxMSwgICAxNSwKKyAgICAgICAxNywgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAyNiwgICAyNiwgICAxOSwKKyAgICAgICAzMSwgICA1
MywgICAxNywgICAxNSwgICAxOSwgICAzOSwgICAxMSwgICAzMiwgICAzMiwgIDQxMCwKKyAgICAg
ICAzMywgICAzMSwgICAzMywgICAzOSwgICAxOSwgICAyMCwgICAzMywgICAyMCwgICAyMCwgICAy
MCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAzOSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMSwgICAyMSwKKyAgICAgICAyMSwgICAzNCwgICAyMCwgICAyNCwgICAyMCwgICAzNiwgIDQw
NCwgICAzNiwgICA1MywgICAzNSwKKyAgICAgICAyMSwgICAzNCwgICAyMCwgICAzNSwgICAzNCwg
ICAzNywgICAzNiwgICA0MywgICAzNSwgICAyNCwKKyAgICAgICAyMSwgICAyNCwgICAyNCwgICAz
NywgICAzNSwgICAzNywgICA0MCwgICA0MiwgICAzNywgICAyMCwKKworICAgICAgIDQzLCAgIDQy
LCAgIDQ1LCAgIDQwLCAgIDM3LCAgIDQ3LCAgMTMxLCAgMTE4LCAgIDQ4LCAgNDAzLAorICAgICAg
IDQwLCAgIDQ4LCAgIDQ3LCAgIDQ3LCAgIDQ5LCAgMTE4LCAgMTM3LCAgIDQ1LCAgIDQ5LCAgIDQ4
LAorICAgICAgIDQ1LCAgMTMxLCAgIDQ3LCAgIDUwLCAgMTM3LCAgIDQ3LCAgIDQ4LCAgIDUwLCAg
IDcwLCAgIDcwLAorICAgICAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgMTYzLCAgMTYzLCAgIDUw
LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDcwLCAgIDc1LCAg
MzkzLCAgIDc1LCAgIDc1LCAgIDc1LCAgIDc1LAorICAgICAgIDc1LCAgIDc1LCAgIDc0LCAgIDcw
LCAgMTQxLCAgMzkyLCAgMTQxLCAgMTg4LCAgMTg4LCAgMTg4LAorICAgICAgMzkxLCAgIDc1LCAg
IDc0LCAgIDc2LCAgMjA3LCAgIDc2LCAgIDc2LCAgIDc2LCAgIDc2LCAgIDc2LAorICAgICAgIDc2
LCAgIDc1LCAgMjA3LCAgMjExLCAgMjExLCAgMjExLCAgIDc3LCAgMzc3LCAgIDc3LCAgMzg5LAor
ICAgICAgIDc2LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgMzg4LCAgMzc3
LCAgIDc5LAorICAgICAgIDc2LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAg
Mzg3LCAgMTE2LCAgMzg0LAorCisgICAgICAzODMsICAxMTYsICAxMTYsICAzODEsICAzNzgsICAx
MTYsICAgNzksICAxMTYsICAyMjIsICAyMjIsCisgICAgICAyMjIsICAzNzYsICAxNDYsICAzNzUs
ICAxNDYsICAzNzQsICAgNzksICAxNDYsICAxNDYsICAxNDYsCisgICAgICAxNDYsICAxNDYsICAx
NDYsICAxNDksICAxNDksICAxNDksICAxNDksICAxNDksICAxNDksICAyMzAsCisgICAgICAyMzAs
ICAyMzAsICAzNzIsICAzNzEsICAxNTAsICAzNzAsICAxNTAsICAzNjcsICAxNDksICAxNTAsCisg
ICAgICAxNTAsICAxNTAsICAxNTAsICAxNTAsICAxNTAsICAyMzcsICAyMzcsICAyMzcsICAxNDks
ICAxNTEsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTIsICAxNTIsICAx
NTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAyMTUsICAyMTUsICAyMTUsICAyMTUsICAyMTUs
ICAyMTUsICAyMTYsICAyMTYsICAyMTYsCisgICAgICAyMTYsICAyMTYsICAyMTYsICAyMTcsICAy
MTcsICAyMTcsICAyMTcsICAyMTcsICAyMTcsICAyMTgsCisgICAgICAyMTgsICAyMTgsICAyMTgs
ICAyMTgsICAyMTgsICAyNDEsICAyNDEsICAyNDEsICAyNDcsICAyNDcsCisgICAgICAyNDcsICA0
MDcsICA0MDcsICA0MDgsICA0MDgsICA0MDksICA0MDksICA0MDksICAzNjYsICAzNjUsCisKKyAg
ICAgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1NSwgIDM1MiwgIDM0OSwgIDM0OCwg
IDM0NywKKyAgICAgIDM0NiwgIDM0NSwgIDM0MywgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMz
NiwgIDMzNSwgIDMzMywKKyAgICAgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwg
IDMyNSwgIDMyMywgIDMyMiwgIDMyMSwKKyAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMx
NiwgIDMxNSwgIDMxMSwgIDMxMCwgIDMwNywgIDI5NiwKKyAgICAgIDI5MiwgIDI5MSwgIDI5MCwg
IDI4OSwgIDI4MiwgIDI4MSwgIDI4MCwgIDI3NSwgIDI3NCwgIDI3MywKKyAgICAgIDI3MiwgIDI3
MSwgIDI3MCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwKKyAgICAg
IDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI0NiwgIDI0
NSwKKyAgICAgIDI0NCwgIDI0MywgIDI0MiwgIDI0MCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIyOSwgIDIyOCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMSwgIDIxOSwgIDIx
NCwgIDIxMywgIDIxMiwgIDIxMCwKKyAgICAgIDIwOSwgIDIwOCwgIDIwNiwgIDIwNSwgIDIwNCwg
IDIwMywgIDIwMiwgIDIwMSwgIDIwMCwgIDE5OSwKKworICAgICAgMTk4LCAgMTk3LCAgMTk2LCAg
MTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LAorICAgICAgMTg3LCAgMTg2
LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAorICAgICAg
MTc3LCAgMTc2LCAgMTc1LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3
LAorICAgICAgMTY2LCAgMTY1LCAgMTY0LCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAg
MTU3LCAgMTQ3LAorICAgICAgMTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM2LCAgMTM1LCAgMTM0
LCAgMTMzLCAgMTMyLCAgMTMwLAorICAgICAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAg
MTI0LCAgMTIzLCAgMTIyLCAgMTIxLCAgMTIwLAorICAgICAgMTE5LCAgMTE3LCAgMTE0LCAgMTEz
LCAgMTEyLCAgMTExLCAgMTEwLCAgMTA5LCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAg
MTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LAorICAgICAgIDk2
LCAgIDk1LCAgIDk0LCAgIDkzLCAgIDkyLCAgIDkxLCAgIDg3LCAgIDgzLCAgIDcyLCAgIDU4LAor
ICAgICAgIDUxLCAgIDQ2LCAgIDQ0LCAgIDQxLCAgIDM4LCAgIDI1LCAgIDIyLCAgIDE0LCAgICA5
LCAgICA1LAorCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0
MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisgICAgICA0MDYs
ICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsCisg
ICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYsICA0MDYs
ICA0MDYsCisgICAgICA0MDYsICA0MDYsICA0MDYsICA0MDYKKyAgICB9IDsKKworLyogVGFibGUg
b2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0M10gPQorICAgIHsgICAw
LAorMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
CisgICAgMSwgMCwgMCwgICAgIH07CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlOworc3RhdGljIGNoYXIgKnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKK2V4
dGVybiBpbnQgeXlfZmxleF9kZWJ1ZzsKK2ludCB5eV9mbGV4X2RlYnVnID0gMDsKKworLyogVGhl
IGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFu
eSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1Qg
cmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNl
ZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAorY2hhciAqeXl0ZXh0OworLyoKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisqLworLyogQmFzZWQgb24KK0FOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbgorCitJ
biAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgdGhpcyBMZXggc3BlY2lmaWNhdGlvbiB0b2dldGhl
ciB3aXRoIGEgWWFjYyAKK2dyYW1tYXIgZm9yIHRoZSBBcHJpbCAzMCwgMTk4NSBBTlNJIEMgZHJh
ZnQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCAKK2JvdGggdG8gbmV0LnNvdXJjZXMgaW4gMTk4
NzsgdGhhdCBvcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgCit0byBxdWVzdGlv
biAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMgRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1
Lm5ldCwgCitmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLiAKKworSSBp
bnRlbmQgdG8ga2VlcCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFu
ZGFyZCBncmFtbWFyIAorYXMgcG9zc2libGU7IHBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgZGlz
Y292ZXIgZGlzY3JlcGFuY2llcy4gCisKK0p1dHRhIERlZ2VuZXIsIDE5OTUgCisqLworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9Q
YXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mgb25s
eSBwcmFnbWEgKi8KKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0
MTAyKQorI2VuZGlmCisKK2ludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7CisK
K2V4dGVybiBpbnQgeXlwYXJzZSh2b2lkKik7CisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZ
U1RZUEUqIHB5eWx2YWwsdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCisjZGVmaW5lIHBhcnNlQ29u
dGV4dCAoKigoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkpCisgCisjZGVmaW5l
IFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIChyZXN1bHQgPSB5eV9pbnB1dChidWYsIG1h
eF9zaXplKSkKKworLyoKK1RPRE8oYWxva3ApOiB5eWxpbmVubyBpcyBvbmx5IGhlcmUgdG8gc3Vw
cG9ydCBvbGQgZmxleC5leGUgaW4gY29tcGlsZXIvdG9vbHMuCitSZW1vdmUgaXQgd2hlbiB3ZSBj
YW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKworI2RlZmluZSBJTklU
SUFMIDAKKyNkZWZpbmUgRklFTERTIDEKKworI2lmbmRlZiBZWV9FWFRSQV9UWVBFCisjZGVmaW5l
IFlZX0VYVFJBX1RZUEUgdm9pZCAqCisjZW5kaWYKKworc3RhdGljIGludCB5eV9pbml0X2dsb2Jh
bHMgKHZvaWQgKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgorICAgVGhlc2Ug
YXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5j
ZS4gKi8KKworaW50IHl5bGV4X2Rlc3Ryb3kgKHZvaWQgKTsKKworaW50IHl5Z2V0X2RlYnVnICh2
b2lkICk7CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOworCitZWV9FWFRS
QV9UWVBFIHl5Z2V0X2V4dHJhICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJB
X1RZUEUgdXNlcl9kZWZpbmVkICApOworCitGSUxFICp5eWdldF9pbiAodm9pZCApOworCit2b2lk
IHl5c2V0X2luICAoRklMRSAqIGluX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7
CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgICk7CisKK3l5X3NpemVfdCB5eWdl
dF9sZW5nICh2b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0
X2xpbmVubyAodm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICAp
OworCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkg
dXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJ
UF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh2b2lk
ICk7CisjZWxzZQorZXh0ZXJuIGludCB5eXdyYXAgKHZvaWQgKTsKKyNlbmRpZgorI2VuZGlmCisK
KyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICos
eXljb25zdCBjaGFyICosaW50ICk7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitz
dGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiApOworI2VuZGlmCisKKyNp
Zm5kZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5w
dXQgKHZvaWQgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh2b2lkICk7CisjZW5kaWYKKwor
I2VuZGlmCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4g
Ki8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgx
OTIKKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0
aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUg
YW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAq
IHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwg
eXlsZW5nLCAxLCB5eW91dCApCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0
IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICog
aXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUg
WVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJ
CXl5X3NpemVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAg
ICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChj
aGFyKSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9G
QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0
ID0gbjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAo
cmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWlu
KSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9G
QVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVh
azsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0g
XAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNv
cnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3
YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1
c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRl
bWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSBy
ZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0
YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5D
UgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEg
ZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFM
X0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyApCisjZW5kaWYKKworLyogZW5kIHRhYmxl
cyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVs
dCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2Vy
IGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNk
ZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCB5eWxleCAodm9pZCk7CisKKyNk
ZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggKHZvaWQpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKwor
LyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0
ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNF
Ul9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1
dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmlu
ZSBZWV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZ
X1VTRVJfQUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMg
YWxsIHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0
ZXIgaW50IHl5X2FjdDsKKyAgICAKKwlpZiAoICEoeXlfaW5pdCkgKQorCQl7CisJCSh5eV9pbml0
KSA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisK
KwkJaWYgKCAhICh5eV9zdGFydCkgKQorCQkJKHl5X3N0YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0
IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlmICgg
ISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKSB7CisJCQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPQorCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOworCQl9
CisKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJCX0KKworCXdoaWxlICggMSApCQkvKiBs
b29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlf
Y19idWZfcCk7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9ICh5eV9o
b2xkX2NoYXIpOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hf
YnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9i
cCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6
CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19V
SSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCQl7
CisJCQkJKHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlKSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQkJ
KHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MpID0geXlfY3A7CisJCQkJfQorCQkJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MDcgKQorCQkJCQl5eV9jID0g
eXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9j
XTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA0MDYg
KTsKKwkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdfY3Bvcyk7CisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSAoeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUpOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlf
YWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJ
T047CisKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQlpbnQgeXlsOworCQkJZm9yICggeXlsID0gMDsg
eXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJ
CQkJICAgCisgICAgeXlsaW5lbm8rKzsKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBUaGlzIGxh
YmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICgg
eXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6
IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJCXl5X2NwID0gKHl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3MpOworCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2Fj
Y2VwdGluZ19zdGF0ZSk7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CisvKiBy
dWxlIDEgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyAvKiA/PyBjYXJyaWFnZSBh
bmQvb3IgbGluZS1mZWVkPyAqLyB9OworCVlZX0JSRUFLCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQor
CVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oSElHSF9QUkVDSVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDoK
K1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihN
RURJVU1fUFJFQ0lTSU9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDU6CitZWV9SVUxFX1NFVFVQCit7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0K
KwlZWV9CUkVBSworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKFBSRUNJU0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSA3OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFUVFJJ
QlVURSk7IH0KKwlZWV9CUkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlNUX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihVTklGT1JNKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFZBUllJTkcpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oQlJFQUspOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oRE8pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDE1OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFdISUxFKTsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9T
RVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElGKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKEVMU0UpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5fUVVBTCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihPVVRfUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTk9V
VF9RVUFMKTsgfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybihGTE9BVF9UWVBFKTsgfQorCVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRV
UAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4
dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQorCVlZX0JSRUFLCitj
YXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsg
fQorCVlZX0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFO
VCk7IH0KKwlZWV9CUkVBSworY2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihESVNDQVJEKTsgfQorCVlZX0JSRUFLCitjYXNlIDI4
OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KFJFVFVSTik7IH0KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4oTUFUUklYMik7IH0KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAK
K3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMyk7IH0KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZX1JV
TEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYNCk7IH0KKwlZWV9CUkVBSworY2FzZSAz
MjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7
IH0KKwlZWV9CUkVBSworY2FzZSAzNToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4g
KElWRUMyKTsgfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybiAoSVZFQzMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCit7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQorCVlZX0JSRUFLCitjYXNlIDM5Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNDA6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
YXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KKwlZWV9C
UkVBSworY2FzZSA0MToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExFUjJE
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNDI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
IFNBTVBMRVJDVUJFOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDM6CitZWV9SVUxFX1NFVFVQCit7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuKFNUUlVDVCk7IH0KKwlZWV9CUkVBSworY2FzZSA0NDoKK1lZX1JVTEVfU0VU
VVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDU6
CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JS
RUFLCitjYXNlIDQ2OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDg6CitZWV9SVUxFX1NFVFVQCit7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDQ5OgorWVlf
UlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSwor
Y2FzZSA1MDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNTE6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDUyOgorWVlfUlVMRV9TRVRVUAoreyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVf
U0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NTQ6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZ
X0JSRUFLCitjYXNlIDU1OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTc6CitZWV9SVUxFX1NFVFVQ
Cit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDU4Ogor
WVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVB
SworY2FzZSA1OToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNjA6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDYxOgorWVlfUlVMRV9TRVRVUAoreyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2MjoKK1lZX1JV
TEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNjM6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQor
CVlZX0JSRUFLCitjYXNlIDY0OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA2NToKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjY6CitZWV9SVUxFX1NF
VFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDY3
OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9C
UkVBSworY2FzZSA2ODoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjk6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAor
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZ
X1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNzI6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQorCVlZX0JSRUFLCitjYXNlIDczOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoKK1lZX1JVTEVfU0VUVVAKK3sgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzU6CitZWV9SVUxF
X1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNl
IDc2OgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZ
WV9CUkVBSworY2FzZSA3NzoKK1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzg6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQorCVlZX0JSRUFLCitjYXNlIDc5OgorWVlfUlVMRV9TRVRV
UAoreyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoK
K1lZX1JVTEVfU0VUVVAKK3sgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJF
QUsKK2Nhc2UgODE6CitZWV9SVUxFX1NFVFVQCit7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4g
MDsgfQorCVlZX0JSRUFLCitjYXNlIDgyOgorWVlfUlVMRV9TRVRVUAoreyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgODQ6CitZWV9S
VUxFX1NFVFVQCit7ICAKKyAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IAorICAgcHl5
bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIFBh
SWRlbnRPclR5cGUoKnB5eWx2YWwtPmxleC5zdHJpbmcsIHBhcnNlQ29udGV4dCwgcHl5bHZhbC0+
bGV4LnN5bWJvbCk7IAorfQorCVlZX0JSRUFLCitjYXNlIDg1OgorWVlfUlVMRV9TRVRVUAoreyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRl
eHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODY6CitZ
WV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxl
eC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9C
UkVBSworY2FzZSA4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcGFyc2VDb250ZXh0LmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIu
IiwgeXl0ZXh0LCAiIiwgIiIpOyBwYXJzZUNvbnRleHQucmVjb3ZlcigpOyByZXR1cm4gMDt9CisJ
WVlfQlJFQUsKK2Nhc2UgODg6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJ
TlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA4OToKK1lZX1JVTEVfU0VUVVAKK3sgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTA6CitZWV9SVUxFX1NFVFVQCit7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVy
bihGTE9BVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDkxOgorWVlfUlVMRV9TRVRVUAor
eyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9C
UkVBSworY2FzZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgIGludCByZXQgPSBQYVBhcnNlQ29tbWVu
dChweXlsdmFsLT5sZXgubGluZSwgcGFyc2VDb250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7
IH0gICAKKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk0OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKFNVQl9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTU6CitZWV9SVUxFX1NFVFVQCit7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTVVMX0FTU0lHTik7IH0KKwlZ
WV9CUkVBSworY2FzZSA5NjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihESVZfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDk3OgorWVlf
UlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1PRF9B
U1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BU1NJR04pOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTk6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdO
KTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNl
IDEwMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihPUl9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAzOgorWVlfUlVMRV9TRVRVUAor
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOQ19PUCk7IH0KKwlZWV9C
UkVBSworY2FzZSAxMDQ6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oREVDX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZX1JVTEVf
U0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfT1ApOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTA2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNzoKK1lZ
X1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1Jf
T1ApOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA4OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDEw
OToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihHRV9PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTA6CitZWV9SVUxFX1NFVFVQCit7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRVFfT1ApOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTExOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKE5FX09QKTsgfQorCVlZX0JSRUFLCitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX09QKTsgfQorCVlZX0JS
RUFLCitjYXNlIDExMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihSSUdIVF9PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTQ6CitZWV9SVUxF
X1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4
QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTE1OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE3Ogor
WVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgaWYgKHBhcnNl
Q29udGV4dC5pblR5cGVQYXJlbikgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyBy
ZXR1cm4oQ09NTUEpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE4OgorWVlfUlVMRV9TRVRVUAoreyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTE9OKTsgfQorCVlZX0JSRUFL
CitjYXNlIDExOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQor
CVlZX0JSRUFLCitjYXNlIDEyMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VDb250
ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTIxOgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7
IH0KKwlZWV9CUkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9CUkFDS0VUKTsgfQorCVlZX0JSRUFLCitjYXNl
IDEyMzoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihSSUdIVF9CUkFDS0VUKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyNDoKK1lZX1JVTEVfU0VU
VVAKK3sgQkVHSU4oRklFTERTKTsgIHJldHVybihET1QpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI1
OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KEJBTkcpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERBU0gpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTI3OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKFRJTERFKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyODoKK1lZX1JVTEVfU0VUVVAKK3sgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQTFVTKTsgfQorCVlZX0JSRUFLCitj
YXNlIDEyOToKK1lZX1JVTEVfU0VUVVAKK3sgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihTVEFSKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMDoKK1lZX1JVTEVfU0VUVVAKK3sg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTTEFTSCk7IH0KKwlZWV9CUkVB
SworY2FzZSAxMzE6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oUEVSQ0VOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzI6CitZWV9SVUxFX1NF
VFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BTkdMRSk7
IH0KKwlZWV9CUkVBSworY2FzZSAxMzM6CitZWV9SVUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTM0OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKFZFUlRJQ0FMX0JBUik7IH0KKwlZWV9CUkVBSworY2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQ
Cit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ0FSRVQpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTM2OgorWVlfUlVMRV9TRVRVUAoreyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKEFNUEVSU0FORCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzc6CitZWV9S
VUxFX1NFVFVQCit7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUVVFU1RJ
T04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM4OgorWVlfUlVMRV9TRVRVUAoreyAKK0JFR0lOKElO
SVRJQUwpOyAgICAgIAorICAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87ICAgICAKKyAg
ICBweXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisgICAgcmV0
dXJuIEZJRUxEX1NFTEVDVElPTjsgfQorCVlZX0JSRUFLCitjYXNlIDEzOToKK1lZX1JVTEVfU0VU
VVAKK3t9CisJWVlfQlJFQUsKK2Nhc2UgMTQwOgorLyogcnVsZSAxNDAgY2FuIG1hdGNoIGVvbCAq
LworWVlfUlVMRV9TRVRVUAoreyAgfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklU
SUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9GKEZJRUxEUyk6Cit7ICgmcGFyc2VDb250ZXh0KS0+QWZ0
ZXJFT0YgPSB0cnVlOyB5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsgeXl0ZXJt
aW5hdGUoKTt9CisJWVlfQlJFQUsKK2Nhc2UgMTQxOgorWVlfUlVMRV9TRVRVUAoreyBwYXJzZUNv
bnRleHQuaW5mb1NpbmsuaW5mbyA8PCAiRkxFWDogVW5rbm93biBjaGFyICIgPDwgeXl0ZXh0IDw8
ICJcbiI7CisgICAgICAgICAgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSAxNDI6CitZWV9S
VUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJ
CXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hh
ci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSAo
eXl0ZXh0X3B0cikpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9S
RV9BQ1RJT04uICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCQlZWV9SRVNUT1JFX1lZ
X01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZl
cl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBh
IG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhp
cyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBh
IG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhh
dmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBz
bywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBv
c3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1
dCBzb3VyY2UuCisJCQkgKi8KKwkJCSh5eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRl
c3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0
IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBo
YXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2Ug
YWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1
ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQo
KS4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEg
TlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQkoeXlfY19idWZf
cCkgPSAoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJLyogT2theSwg
d2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAg
V2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQg
YW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRl
YWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAor
CQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkg
KiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5
X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgKTsKKworCQkJeXlfYnAgPSAoeXl0ZXh0
X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJ
CQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKysoeXlfY19idWZfcCk7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsK
KwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSAoeXlfbGFzdF9hY2NlcHRpbmdf
Y3Bvcyk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSk7
CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2gg
KCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKKwkJCQl7CisJCQkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAwOworCisJ
CQkJaWYgKCB5eXdyYXAoICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUg
dGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1
cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Ag
c28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3
YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJ
CQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVM
TCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRl
eHRfcHRyKSArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9T
VEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsK
KwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05F
V19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCQkoeXl0ZXh0X3B0cikgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9w
cmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9i
cCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCSh5eV9jX2J1Zl9wKSA9CisJCQkJJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV07CisKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKworCQkJCXl5X2NwID0g
KHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisJ
CQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6
CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJv
ci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJ
fSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiB5eWxleCAqLwor
CisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAq
CisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9M
QVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5n
IGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBm
aWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lkKQoreworICAgIAly
ZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7
CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0gKHl5dGV4dF9wdHIpOworCXJlZ2lzdGVyIGludCBu
dW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKworCWlmICggKHl5X2NfYnVmX3ApID4g
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdICkK
KwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3It
LWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBi
dWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5eXRl
eHRfcHRyKSAtIFlZX01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNp
bmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwg
RU9GLgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQll
bHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBm
aXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9N
QVRDSDsKKwkJCX0KKwkJfQorCisJLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyog
Rmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9f
bW92ZSA9IChpbnQpICgoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCWZvciAo
IGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNl
KyspOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mg
bm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YK
KwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2No
YXJzKSA9IDA7CisKKwllbHNlCisJCXsKKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAx
OworCisJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9v
bSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFt
ZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NV
UlJFTlRfQlVGRkVSOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICgo
eXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQkJCXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7
CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJ
CQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAy
IEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55
eV9idWZfc2l6ZSArIDIgICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQs
IHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEg
Yi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBz
Y2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJKHl5X2NfYnVmX3ApID0gJmIt
Pnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAt
IDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJ
CQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRh
dGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W251bWJlcl90b19tb3ZlXSksCisJCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFkICk7CisKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9
CisKKwlpZiAoICh5eV9uX2NoYXJzKSA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3Zl
ID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxF
OworCQkJeXlyZXN0YXJ0KHl5aW4gICk7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3Zh
bCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisK
KwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3Np
emVfdCkgKCh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBs
dXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0g
KHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygo
dm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsK
KwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigp
IiApOworCX0KKworCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJz
KSArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9
CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUg
dGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5
eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZvaWQpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIAorCXl5X2N1cnJl
bnRfc3RhdGUgPSAoeXlfc3RhcnQpOworCisJZm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsgeXlfY3AgPCAoeXlfY19idWZfcCk7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6
IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQkoeXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCSh5eV9sYXN0X2Fj
Y2VwdGluZ19jcG9zKSA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5
eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDQwNyApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVk
IGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4g
eXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtl
IGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKglu
ZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAg
c3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZSApCit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICAJcmVnaXN0
ZXIgY2hhciAqeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2Mg
PSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQkoeXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGUpID0geXlfY3VycmVudF9zdGF0ZTsKKwkJKHl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MpID0geXlfY3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJy
ZW50X3N0YXRlID49IDQwNyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9j
XTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0
YXRlID09IDQwNik7CisKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7
Cit9CisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRp
YyBpbnQgeXlpbnB1dCAodm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQp
CisjZW5kaWYKKworeworCWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9j
aGFyKTsKKworCWlmICggKih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQor
CQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQg
dG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3Rl
cnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0
aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRo
aXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVs
c2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0gKHl5
X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRj
aCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFT
VF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkg
KiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3Mg
dGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJ
CQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8g
bWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFT
VF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJ
CQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJ
CQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJ
CQl7CisJCQkJCWlmICggeXl3cmFwKCApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICgg
ISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNp
ZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0
dXJuIGlucHV0KCk7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU46CisJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJ
YnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9j
X2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdc
MCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVm
X3ApOworCisJaWYgKCBjID09ICdcbicgKQorCQkgICAKKyAgICB5eWxpbmVubysrOworOworCisJ
cmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1l
ZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlu
cHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLwor
ICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsKKwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUixpbnB1dF9maWxlICk7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8q
KiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZm
ZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCisgKiAKKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3Rv
X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9E
Ty4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5
CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZl
cl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7
CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9u
IGZvciBvbGQgYnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9
CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVm
ZmVyX3N0YXRlKCApOworCisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRp
ZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQg
dGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFw
KCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNl
dCBpdC4KKwkgKi8KKwkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0
YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hh
cnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRy
KSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
Kwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9o
b2xkX2NoYXIpID0gKih5eV9jX2J1Zl9wKTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFs
aXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3Ry
ZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4g
V2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0
ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKyAgICAKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1
Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxv
bmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAy
IGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAq
KSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkK
KwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1
ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZl
cihiLGZpbGUgKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVmZmVyLgor
ICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZmZXIoKQorICog
CisgKi8KKyAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7
CisgICAgCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lz
X291cl9idWZmZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICApOworCisJeXlm
cmVlKCh2b2lkICopIGIgICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMg
YSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFu
IG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQo
KSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JV
RkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOwor
ICAgIAorCXl5X2ZsdXNoX2J1ZmZlcihiICk7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsK
KwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1
ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBm
cm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIElu
IHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4K
KyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5
X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisg
ICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsK
K30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNj
YW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0
ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogCisgKi8K
KyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAJ
aWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFs
d2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2Vz
CisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29u
ZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1Zlsw
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVI7CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWIt
Pnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisK
KwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSgg
KTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3
IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxs
IGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIAorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICkKK3sKKyAgICAJaWYgKG5ld19idWZmZXIgPT0g
TlVMTCkKKwkJcmV0dXJuOworCisJeXllbnN1cmVfYnVmZmVyX3N0YWNrKCk7CisKKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQg
YnVmZmVyLiAqLworCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwkvKiBP
bmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpCisJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSsrOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0
Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCSh5eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhl
IHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNv
bWVzIHRoZSBuZXcgdG9wLgorICogIAorICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAodm9p
ZCkKK3sKKyAgICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJeXlfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApCisJCS0tKHl5X2J1ZmZl
cl9zdGFja190b3ApOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVm
ZmVyX3N0YXRlKCApOworCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7CisJfQor
fQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1
YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsK
KyAgICAKKwlpZiAoISh5eV9idWZmZXJfc3RhY2spKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlv
biBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJ
ICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEg
dG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAg
ICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7CisJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSk7CisJCWlmICggISAoeXlf
YnVmZmVyX3N0YWNrKSApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KCh5
eV9idWZmZXJfc3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopKTsKKwkJCQkKKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9j
OworCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCh5
eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJ
CS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAq
LworCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51
bV90b19hbGxvYyA9ICh5eV9idWZmZXJfc3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1
ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYworCQkJCQkJ
CQkoKHl5X2J1ZmZlcl9zdGFjayksCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3Rh
Y2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiov
CisJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwg
Z3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZm
ZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5w
dXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNo
YXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICog
QHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAq
IAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAor
ICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6
ZV90ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAy
IHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAg
ICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jn
b3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAo
WVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAp
ICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7
CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55
eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0
X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19p
bnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9
IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hf
dG9fYnVmZmVyKGIgICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBi
dWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdp
bGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEg
TlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBz
Y2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKKyAqICAgICAg
IHl5X3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9z
dHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICkKK3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9i
eXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICk7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVm
ZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4
KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBi
eXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIAorICogQHJl
dHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6
ZV90ICBfeXlieXRlc19sZW4gKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsK
Kwl5eV9zaXplX3QgbiwgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwg
aW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVu
ICsgMjsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIg
KTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5
eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICk7CisJ
aWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdl
IHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5
X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9G
QUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQg
eXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICkKK3sKKyAgICAJKHZvaWQpIGZwcmlu
dGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30K
KworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICov
CisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5
bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21h
Y3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9ob2xkX2NoYXIpOyBcCisJCSh5eV9j
X2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJKHl5X2hvbGRfY2hhcikg
PSAqKHl5X2NfYnVmX3ApOyBcCisJCSooeXlfY19idWZfcCkgPSAnXDAnOyBcCisJCXl5bGVuZyA9
IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3Ig
IG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoq
IEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIAorICovCitpbnQgeXlnZXRfbGluZW5v
ICAodm9pZCkKK3sKKyAgICAgICAgCisgICAgcmV0dXJuIHl5bGluZW5vOworfQorCisvKiogR2V0
IHRoZSBpbnB1dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqeXlnZXRfaW4gICh2b2lkKQorewor
ICAgICAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAq
IAorICovCitGSUxFICp5eWdldF9vdXQgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXlvdXQ7
Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICov
Cit5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWxlbmc7
Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworCitjaGFyICp5eWdl
dF90ZXh0ICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0
aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogCisgKi8K
K3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICkKK3sKKyAgICAKKyAgICB5eWxp
bmVubyA9IGxpbmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMg
ZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFt
IGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVm
ZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICkKK3sKKyAgICAgICAgeXlp
biA9IGluX3N0ciA7Cit9CisKK3ZvaWQgeXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgKQorewor
ICAgICAgICB5eW91dCA9IG91dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh2b2lkKQor
eworICAgICAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAo
aW50ICBiZGVidWcgKQoreworICAgICAgICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKwor
c3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxp
emF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAg
ICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24n
dCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGlu
ZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlzIGVuYWJsZWQuICovCisgICAgeXlsaW5lbm8gPSAgMTsK
KyAgICAKKyAgICAoeXlfYnVmZmVyX3N0YWNrKSA9IDA7CisgICAgKHl5X2J1ZmZlcl9zdGFja190
b3ApID0gMDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9w
KSA9IChjaGFyICopIDA7CisgICAgKHl5X2luaXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsK
KworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9
IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gKEZJTEUgKikg
MDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUg
cmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAg
ICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogeXlsZXhf
ZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMu
ICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAgCisgICAgLyogUG9wIHRoZSBi
dWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxlKFlZX0NVUlJF
TlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAgKTsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7
CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSgoeXlfYnVm
ZmVyX3N0YWNrKSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKworICAgIC8qIFJlc2V0
IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0
aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCApOworCisgICAgcmV0dXJu
IDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5k
ZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXlj
b25zdCBjaGFyICogczIsIGludCBuICkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0g
MDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZ
X05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBz
ICkKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOwor
CisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXpl
ICkKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnl5cmVh
bGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJLyogVGhlIGNhc3QgdG8g
KGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVu
dGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0
aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVy
CisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1l
bnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJn
dW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkg
Ki8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisK
K3ZvaWQgeXlmcmVlICh2b2lkICogcHRyICkKK3sKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyog
c2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCisKKy8vSW5jbHVkaW5nIFByZS1wcm9jZXNzb3IuCitleHRlcm4g
IkMiIHsKKyAgI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCit9
IAorCisvLworLy8gVGhlIFlZX0lOUFVUIG1hY3JvIGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRo
aXMgY291bGQgYmUganVzdCBwdXQgaW50bworLy8gdGhlIG1hY3JvIGRpcmVjdGx5LgorLy8KKwor
aW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplKQoreworICAgIGludCBsZW47CisK
KyAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBjYW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNl
IHNjYW5uZXIgdXNlcyBSRUpFQ1QiICk7CisKKyAgICBidWZbbGVuXSA9ICcgJzsKKwlyZXR1cm4g
bGVuKzE7Cit9CisKKy8vCisvLyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFy
c2UuICBXZSBzZXQgdXAgZ2xvYmFscyB1c2VkIGJ5CisvLyB5eXdyYXAuCisvLworLy8gUmV0dXJu
cyAwIGZvciBzdWNjZXNzLCBhcyBwZXIgeXlwYXJzZSgpLgorLy8KK2ludCBQYVBhcnNlU3RyaW5n
cyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmIHBh
cnNlQ29udGV4dExvY2FsKQoreworICAgIGludCBhcmd2MGxlbjsKKyAgICAKKyAgICBTY2FuRnJv
bVN0cmluZyhhcmd2WzBdKTsgCisgICAgCisgICAgLy9TdG9yaW5nIHRoZSBDdXJyZW50IENvbXBp
bGVyIFBhcnNlIGNvbnRleHQgaW50byB0aGUgY3BwIHN0cnVjdHVyZS4KKwljcHAtPnBDID0gKHZv
aWQqKSZwYXJzZUNvbnRleHRMb2NhbDsKKwkKKwlpZiAoIWFyZ3YgfHwgYXJnYyA9PSAwKQorICAg
ICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkg
eworICAgICAgICBpZiAoIWFyZ3ZbaV0pIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2Fs
LmVycm9yKDAsICJOdWxsIHNoYWRlciBzb3VyY2Ugc3RyaW5nIiwgIiIsICIiKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dExvY2FsLnJlY292ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc3RyTGVuKSB7CisgICAgICAgIGFyZ3Yw
bGVuID0gKGludCkgc3RybGVuKGFyZ3ZbMF0pOworICAgICAgICBzdHJMZW4gICA9ICZhcmd2MGxl
bjsKKyAgICB9CisgICAgeXlyZXN0YXJ0KDApOworICAgICgmcGFyc2VDb250ZXh0TG9jYWwpLT5B
ZnRlckVPRiA9IGZhbHNlOworICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7CisgICAgY3BwLT5QYUFy
Z3YgICAgID0gYXJndjsKKyAgICBjcHAtPlBhQXJnYyAgICAgPSBhcmdjOworICAgIGNwcC0+UGFT
dHJMZW4gICA9IHN0ckxlbjsKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7CisgICAg
eXlsaW5lbm8gICA9IDE7CisgICAKKyAgICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAK
KyAgICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsK
KyAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwu
cmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9y
KGNoYXIgKnMpIAoreworICAgIGlmICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJF
T0YpIHsKKyAgICAgICAgaWYgKGNwcC0+dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKKyAgICAgICAg
ICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAi
cHJlLW1hdHVyZSBFT0YiLCBzLCAiIik7CisgICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdsb2JhbFBhcnNl
Q29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsK
KyAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfSAgICAgICAgICAg
IAorfQorCit2b2lkIFBhUmVzZXJ2ZWRXb3JkKCkKK3sKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQt
PmVycm9yKHl5bGluZW5vLCAiUmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7CisgICAg
R2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBQYUlkZW50T3JUeXBlKFRT
dHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5
bWJvbCkKK3sKKyAgICBzeW1ib2wgPSBwYXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5k
KGlkKTsKKyAgICBpZiAocGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYm
IHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICBUVmFyaWFibGUqIHZh
cmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxl
eEFmdGVyVHlwZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gVFlQRV9OQU1FOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBJREVOVElGSUVSOworfQorCitpbnQgUGFQYXJz
ZUNvbW1lbnQoaW50ICZsaW5lbm8sIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQor
eworICAgIGludCB0cmFuc2l0aW9uRmxhZyA9IDA7CisgICAgaW50IG5leHRDaGFyOworICAgIAor
ICAgIHdoaWxlICh0cmFuc2l0aW9uRmxhZyAhPSAyKSB7CisgICAgICAgIG5leHRDaGFyID0geXlp
bnB1dCgpOworICAgICAgICBpZiAobmV4dENoYXIgPT0gJ1xuJykKKyAgICAgICAgICAgICBsaW5l
bm8rKzsKKyAgICAgICAgc3dpdGNoIChuZXh0Q2hhcikgeworICAgICAgICBjYXNlICcqJyA6Cisg
ICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnLycgOiAgLyogaWYgc3RhciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVu
IGl0IGlzIHRoZSBlbmQgb2YgY29tbWVudCAqLworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25G
bGFnID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMSA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT0YgOgorICAgICAgICAgICAgLyogUmFp
c2UgZXJyb3IgbWVzc2FnZSBoZXJlICovCisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5l
cnJvcih5eWxpbmVubywgIkVuZCBvZiBzaGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50
LiIsICIiLCAiIiwgIiIpOworICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICByZXR1cm4gWVlfTlVMTDsgCisgICAgICAgIGRlZmF1bHQgOiAgLyog
QW55IG90aGVyIGNoYXJhY3RlciB3aWxsIGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAqLworICAg
ICAgICAgICAgdHJhbnNpdGlvbkZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biAxOworfQorCitleHRlcm4gIkMiIHsKKwordm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFy
ICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVn
Lm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7Cit9CisKK3ZvaWQgQ1BQV2FybmluZ1RvSW5mb0xv
Zyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorfQor
Cit2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VD
b250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOworICAgIEds
b2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9n
KGNoYXIgKm1zZykKK3sKKyAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXls
aW5lbm8sInN5bnRheCBlcnJvciIsICIiLG1zZywiIik7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgU2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5
eWxpbmVubyAmPSB+U291cmNlTG9jTGluZU1hc2s7CisgICAgeXlsaW5lbm8gfD0gbGluZTsKK30K
Kwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0cmluZykKK3sKKyAgICB5eWxpbmVubyA9IChz
dHJpbmcgPDwgU291cmNlTG9jU3RyaW5nU2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGlu
ZU1hc2spOworfQorCitpbnQgR2V0U3RyaW5nTnVtYmVyKHZvaWQpCit7CisgICAgcmV0dXJuIHl5
bGluZW5vID4+IDE2OworfQorCitpbnQgR2V0TGluZU51bWJlcih2b2lkKQoreworICAgIHJldHVy
biB5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrOworfQorCit2b2lkIEluY0xpbmVOdW1iZXIo
dm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJj
ZUxvY0xpbmVNYXNrKQorICAgICAgICArK3l5bGluZW5vOworfQorCit2b2lkIERlY0xpbmVOdW1i
ZXIodm9pZCkKK3sKKyAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkK
KyAgICAgICAgLS15eWxpbmVubzsKK30KKwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAq
KnRva2VucywgaW50IG51bVRva2VucykKK3sgICAgCisgICAgaWYgKCFzdHJjbXAodG9rZW5zWzBd
LCAib3B0aW1pemUiKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3Qi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygi
XCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNtcCh0b2tl
bnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNv
bnRleHRQcmFnbWEub3B0aW1pemUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRv
a2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQykt
PmNvbnRleHRQcmFnbWEub3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICco
JyBmb3IgJ29wdGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScg
cHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KCFzdHJjbXAodG9rZW5zWzBdLCAiZGVidWciKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9
IDQpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBp
cyBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3Ry
Y21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3Bw
LT5wQyktPmNvbnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVy
ICcoJyBmb3IgJ2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJh
Z21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisj
aWZkZWYgUFJBR01BX1RBQkxFCisgICAgICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9u
IHNwZWNpZmljIHByYWdtYQorICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IHByYWdtYQorICAgICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRo
YXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhh
bXBsZSBvZiBvbmUgc3VjaCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBz
eW50YXggbGlrZQorICAgICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisg
ICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZh
bHVlIGFnYWluc3QgdGhlIHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAg
ICAgICAgCisgICAgICAgIGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwg
IigiKSAmJiAhc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6
Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3Ry
aW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9
IHRva2Vuc1syXTsKKyAgICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51
bVRva2VucyA+PSAyKSB7CisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0g
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Cisg
ICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVy
ID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYg
KGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNv
bmQgPSB0b2tlbnNbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBy
YWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorI2VuZGlmIC8vIFBSQUdNQV9UQUJMRQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihj
aGFyICpzdHJpbmcpCit7CisgICAgVFN0cmluZyBzdHJTcmM7CisgICAgc3RyU3JjID0gVFN0cmlu
ZyhzdHJpbmcpOworCisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cg
PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsK
K30KKworY29uc3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCkKK3sKKyAgICBjcHAtPkVyck1z
ZyA9ICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAg
ICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7Cisg
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJl
aGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3Ry
Y21wKCJyZXF1aXJlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAg
ICBlbHNlIGlmICghc3RyY21wKCJlbmFibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBF
QmhFbmFibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAg
ICAgICAgcmV0dXJuIEVCaERpc2FibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJl
aGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygoVFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBu
b3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAg
IH0gICAgICAgIAorfQorCit2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBUQmVoYXZpb3IgYmVoYXZp
b3JWYWwgPSBHZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZp
b3I+OjogaXRlcmF0b3IgaXRlcjsKKyAgICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAvLyBzcGVj
aWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFs
bCIpKSB7CisgICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9y
VmFsID09IEVCaEVuYWJsZSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNp
b24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
aXRlciA9ICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVn
aW4oKTsgaXRlciAhPSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZp
b3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlv
clZhbDsKKyAgICAgICAgfSAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRlciA9ICgo
VFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmco
ZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBD
KS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZp
b3JWYWwpIHsKKyAgICAgICAgICAgIGNhc2UgRUJoUmVxdWlyZToKKyAgICAgICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMg
bm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOyAgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVCaEVuYWJsZToKKyAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKKyAgICAg
ICAgICAgIGNhc2UgRUJoRGlzYWJsZToKKyAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJl
eHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOworICAgICAgICAg
ICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOworICAgIH0KK30KKyAg
ICAgICAgCit9ICAvLyBleHRlcm4gIkMiCisKK3ZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKK3sKKyAg
ICB5eV9zdGFydCA9IDE7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFu
Z190YWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZ190
YWIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3Rh
Yi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgzMCBAQAorLyogQSBCaXNvbiBwYXJzZXIs
IG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9u
IGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNy
ZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBC
aXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0
ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEK
KyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVy
c2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlm
IHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2Vs
ZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2Vw
dGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAg
IEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAg
VGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkg
cGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBs
aWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisv
KiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0
byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBi
ZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3
aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9p
ZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vz
c2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVT
RVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAq
LworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZ
QklTT05fVkVSU0lPTiAiMi4zIgorCisvKiBTa2VsZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlT
S0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZ
UFVSRSAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisjZGVmaW5lIFlZTFNQX05FRURFRCAw
CisKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlU
T0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28g
dGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8K
KyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBJTlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hf
UFJFQ0lTSU9OID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1df
UFJFQ0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9
IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAg
ICBGTE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAy
NjgsCisgICAgIENPTlRJTlVFID0gMjY5LAorICAgICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3
MSwKKyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwK
KyAgICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcs
CisgICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAs
CisgICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgyLAorICAgICBWRUMzID0gMjgzLAor
ICAgICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2
LAorICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVB
TCA9IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAg
ICAgVkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAy
OTQsCisgICAgIFdISUxFID0gMjk1LAorICAgICBTQU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBM
RVJDVUJFID0gMjk3LAorICAgICBJREVOVElGSUVSID0gMjk4LAorICAgICBUWVBFX05BTUUgPSAy
OTksCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDAsCisgICAgIElOVENPTlNUQU5UID0gMzAxLAor
ICAgICBCT09MQ09OU1RBTlQgPSAzMDIsCisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMwMywKKyAg
ICAgTEVGVF9PUCA9IDMwNCwKKyAgICAgUklHSFRfT1AgPSAzMDUsCisgICAgIElOQ19PUCA9IDMw
NiwKKyAgICAgREVDX09QID0gMzA3LAorICAgICBMRV9PUCA9IDMwOCwKKyAgICAgR0VfT1AgPSAz
MDksCisgICAgIEVRX09QID0gMzEwLAorICAgICBORV9PUCA9IDMxMSwKKyAgICAgQU5EX09QID0g
MzEyLAorICAgICBPUl9PUCA9IDMxMywKKyAgICAgWE9SX09QID0gMzE0LAorICAgICBNVUxfQVNT
SUdOID0gMzE1LAorICAgICBESVZfQVNTSUdOID0gMzE2LAorICAgICBBRERfQVNTSUdOID0gMzE3
LAorICAgICBNT0RfQVNTSUdOID0gMzE4LAorICAgICBMRUZUX0FTU0lHTiA9IDMxOSwKKyAgICAg
UklHSFRfQVNTSUdOID0gMzIwLAorICAgICBBTkRfQVNTSUdOID0gMzIxLAorICAgICBYT1JfQVNT
SUdOID0gMzIyLAorICAgICBPUl9BU1NJR04gPSAzMjMsCisgICAgIFNVQl9BU1NJR04gPSAzMjQs
CisgICAgIExFRlRfUEFSRU4gPSAzMjUsCisgICAgIFJJR0hUX1BBUkVOID0gMzI2LAorICAgICBM
RUZUX0JSQUNLRVQgPSAzMjcsCisgICAgIFJJR0hUX0JSQUNLRVQgPSAzMjgsCisgICAgIExFRlRf
QlJBQ0UgPSAzMjksCisgICAgIFJJR0hUX0JSQUNFID0gMzMwLAorICAgICBET1QgPSAzMzEsCisg
ICAgIENPTU1BID0gMzMyLAorICAgICBDT0xPTiA9IDMzMywKKyAgICAgRVFVQUwgPSAzMzQsCisg
ICAgIFNFTUlDT0xPTiA9IDMzNSwKKyAgICAgQkFORyA9IDMzNiwKKyAgICAgREFTSCA9IDMzNywK
KyAgICAgVElMREUgPSAzMzgsCisgICAgIFBMVVMgPSAzMzksCisgICAgIFNUQVIgPSAzNDAsCisg
ICAgIFNMQVNIID0gMzQxLAorICAgICBQRVJDRU5UID0gMzQyLAorICAgICBMRUZUX0FOR0xFID0g
MzQzLAorICAgICBSSUdIVF9BTkdMRSA9IDM0NCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzQ1LAor
ICAgICBDQVJFVCA9IDM0NiwKKyAgICAgQU1QRVJTQU5EID0gMzQ3LAorICAgICBRVUVTVElPTiA9
IDM0OAorICAgfTsKKyNlbmRpZgorLyogVG9rZW5zLiAgKi8KKyNkZWZpbmUgSU5WQVJJQU5UIDI1
OAorI2RlZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKKyNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAy
NjAKKyNkZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKKyNkZWZpbmUgUFJFQ0lTSU9OIDI2MgorI2Rl
ZmluZSBBVFRSSUJVVEUgMjYzCisjZGVmaW5lIENPTlNUX1FVQUwgMjY0CisjZGVmaW5lIEJPT0xf
VFlQRSAyNjUKKyNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKKyNkZWZpbmUgSU5UX1RZUEUgMjY3Cisj
ZGVmaW5lIEJSRUFLIDI2OAorI2RlZmluZSBDT05USU5VRSAyNjkKKyNkZWZpbmUgRE8gMjcwCisj
ZGVmaW5lIEVMU0UgMjcxCisjZGVmaW5lIEZPUiAyNzIKKyNkZWZpbmUgSUYgMjczCisjZGVmaW5l
IERJU0NBUkQgMjc0CisjZGVmaW5lIFJFVFVSTiAyNzUKKyNkZWZpbmUgQlZFQzIgMjc2CisjZGVm
aW5lIEJWRUMzIDI3NworI2RlZmluZSBCVkVDNCAyNzgKKyNkZWZpbmUgSVZFQzIgMjc5CisjZGVm
aW5lIElWRUMzIDI4MAorI2RlZmluZSBJVkVDNCAyODEKKyNkZWZpbmUgVkVDMiAyODIKKyNkZWZp
bmUgVkVDMyAyODMKKyNkZWZpbmUgVkVDNCAyODQKKyNkZWZpbmUgTUFUUklYMiAyODUKKyNkZWZp
bmUgTUFUUklYMyAyODYKKyNkZWZpbmUgTUFUUklYNCAyODcKKyNkZWZpbmUgSU5fUVVBTCAyODgK
KyNkZWZpbmUgT1VUX1FVQUwgMjg5CisjZGVmaW5lIElOT1VUX1FVQUwgMjkwCisjZGVmaW5lIFVO
SUZPUk0gMjkxCisjZGVmaW5lIFZBUllJTkcgMjkyCisjZGVmaW5lIFNUUlVDVCAyOTMKKyNkZWZp
bmUgVk9JRF9UWVBFIDI5NAorI2RlZmluZSBXSElMRSAyOTUKKyNkZWZpbmUgU0FNUExFUjJEIDI5
NgorI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcKKyNkZWZpbmUgSURFTlRJRklFUiAyOTgKKyNkZWZp
bmUgVFlQRV9OQU1FIDI5OQorI2RlZmluZSBGTE9BVENPTlNUQU5UIDMwMAorI2RlZmluZSBJTlRD
T05TVEFOVCAzMDEKKyNkZWZpbmUgQk9PTENPTlNUQU5UIDMwMgorI2RlZmluZSBGSUVMRF9TRUxF
Q1RJT04gMzAzCisjZGVmaW5lIExFRlRfT1AgMzA0CisjZGVmaW5lIFJJR0hUX09QIDMwNQorI2Rl
ZmluZSBJTkNfT1AgMzA2CisjZGVmaW5lIERFQ19PUCAzMDcKKyNkZWZpbmUgTEVfT1AgMzA4Cisj
ZGVmaW5lIEdFX09QIDMwOQorI2RlZmluZSBFUV9PUCAzMTAKKyNkZWZpbmUgTkVfT1AgMzExCisj
ZGVmaW5lIEFORF9PUCAzMTIKKyNkZWZpbmUgT1JfT1AgMzEzCisjZGVmaW5lIFhPUl9PUCAzMTQK
KyNkZWZpbmUgTVVMX0FTU0lHTiAzMTUKKyNkZWZpbmUgRElWX0FTU0lHTiAzMTYKKyNkZWZpbmUg
QUREX0FTU0lHTiAzMTcKKyNkZWZpbmUgTU9EX0FTU0lHTiAzMTgKKyNkZWZpbmUgTEVGVF9BU1NJ
R04gMzE5CisjZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjAKKyNkZWZpbmUgQU5EX0FTU0lHTiAzMjEK
KyNkZWZpbmUgWE9SX0FTU0lHTiAzMjIKKyNkZWZpbmUgT1JfQVNTSUdOIDMyMworI2RlZmluZSBT
VUJfQVNTSUdOIDMyNAorI2RlZmluZSBMRUZUX1BBUkVOIDMyNQorI2RlZmluZSBSSUdIVF9QQVJF
TiAzMjYKKyNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyNworI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMy
OAorI2RlZmluZSBMRUZUX0JSQUNFIDMyOQorI2RlZmluZSBSSUdIVF9CUkFDRSAzMzAKKyNkZWZp
bmUgRE9UIDMzMQorI2RlZmluZSBDT01NQSAzMzIKKyNkZWZpbmUgQ09MT04gMzMzCisjZGVmaW5l
IEVRVUFMIDMzNAorI2RlZmluZSBTRU1JQ09MT04gMzM1CisjZGVmaW5lIEJBTkcgMzM2CisjZGVm
aW5lIERBU0ggMzM3CisjZGVmaW5lIFRJTERFIDMzOAorI2RlZmluZSBQTFVTIDMzOQorI2RlZmlu
ZSBTVEFSIDM0MAorI2RlZmluZSBTTEFTSCAzNDEKKyNkZWZpbmUgUEVSQ0VOVCAzNDIKKyNkZWZp
bmUgTEVGVF9BTkdMRSAzNDMKKyNkZWZpbmUgUklHSFRfQU5HTEUgMzQ0CisjZGVmaW5lIFZFUlRJ
Q0FMX0JBUiAzNDUKKyNkZWZpbmUgQ0FSRVQgMzQ2CisjZGVmaW5lIEFNUEVSU0FORCAzNDcKKyNk
ZWZpbmUgUVVFU1RJT04gMzQ4CisKKworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNl
ciBkZWNsYXJhdGlvbnMuICAqLworCisKKworLyogQmFzZWQgb246CitBTlNJIEMgWWFjYyBncmFt
bWFyCisKK0luIDE5ODUsIEplZmYgTGVlIHB1Ymxpc2hlZCBoaXMgWWFjYyBncmFtbWFyICh3aGlj
aCBpcyBhY2NvbXBhbmllZCBieSBhCittYXRjaGluZyBMZXggc3BlY2lmaWNhdGlvbikgZm9yIHRo
ZSBBcHJpbCAzMCwgMTk4NSBkcmFmdCB2ZXJzaW9uIG9mIHRoZQorQU5TSSBDIHN0YW5kYXJkLiAg
VG9tIFN0b2NrZmlzY2ggcmVwb3N0ZWQgaXQgdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdAor
b3JpZ2luYWwsIGFzIG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDE3LjI1IG9m
IHRoZSBjb21wLmxhbmcuYworRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgZmls
ZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4KKworSSBpbnRlbmQgdG8ga2Vl
cCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFy
IGFzCitwb3NzaWJsZTsgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVw
YW5jaWVzLgorCitKdXR0YSBEZWdlbmVyLCAxOTk1CisqLworCisjaW5jbHVkZSAiY29tcGlsZXIv
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VD
b250ZXh0TG9jYWwKKy8qCitUT0RPKGFsb2twKTogWVlQQVJTRV9QQVJBTV9ERUNMIGlzIG9ubHkg
aGVyZSB0byBzdXBwb3J0IG9sZCBiaXNvbi5leGUgaW4KK2NvbXBpbGVyL3Rvb2xzLiBSZW1vdmUg
aXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyNk
ZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQqCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQ
YXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpCisjZGVmaW5lIFlZTEVYX1BBUkFNIHBh
cnNlQ29udGV4dExvY2FsCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2
YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQorZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7
CisKKyNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1
YWdlICE9IEVTaExhbmdGcmFnbWVudCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFy
c2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK30KKworI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNk
ZWZpbmUgUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9
IEVTaExhbmdQYWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHBhY2sgc2hhZGVycyBvbmx5
ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVOUEFD
S19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5w
YWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB1bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNLX1VOUEFDS19PTkxZ
KFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1VucGFjayAmJiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3Vh
Z2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjay91bnBhY2sg
c2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworLyogRW5h
YmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisj
ZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYg
WVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJP
Ul9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisK
Ky8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUK
KyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQ
RSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBF
CisKK3sKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIHVu
aW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7
CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAg
ICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAg
IFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRl
cm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlw
ZWROb2RlOworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOwor
ICAgICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBl
OworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlm
aWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOwor
ICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVy
bTsKK30KKy8qIExpbmUgMTkzIG9mIHlhY2MuYy4gICovCisKKwlZWVNUWVBFOworIyBkZWZpbmUg
eXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBk
ZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwg
MQorI2VuZGlmCisKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0
aW9ucy4gICovCisKKworICAgIGV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSosIHZvaWQqKTsKKwor
CisvKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBz
aG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4
IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4
OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5
cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5
cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQg
eXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlU
WVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRl
ZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5
dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9U
WVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBz
aXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpF
X1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8
c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZ
WVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAor
IyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEp
CisKKyNpZm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05M
UworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgi
Ymlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXwor
IyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVz
cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmlu
ZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQpIChl
KSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIElk
ZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50
IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQorI2Vs
c2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgaW50
CitZWUlEIChpbnQgaSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEIChpKQorICAgIGludCBpOwor
I2VuZGlmCit7CisgIHJldHVybiBpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlvdmVy
ZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBv
ciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZ
U1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19H
TlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVs
aWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJ
WAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBf
TVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFN
RSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYm
ICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJQl9I
IDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlm
CisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1i
b2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVt
cHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElN
VU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQg
dGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBh
cyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9r
ZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBu
dW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBv
cmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0
MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVm
aW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVF
CisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3Bs
dXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZ
TUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBfU1RE
TElCX0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVm
aW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVk
IF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lk
ICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUg
ZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICopOyAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisj
IGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NF
ICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQg
X19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQ
RV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9y
IGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50MTYg
eXlzczsKKyAgWVlTVFlQRSB5eXZzOworICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11
bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBkZWZp
bmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8q
IFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3Ms
IGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4p
IFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUp
KSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0
cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90
IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYm
IDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisgICAg
ICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkp
CisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAgICBk
bwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkgPSAw
OyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJ
CVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRpZgor
CisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBvbmUu
ICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhl
IG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQ
VFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZWVBU
UiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFjay4g
ICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJCQkJ
CQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZ
WUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAmeXlw
dHItPlN0YWNrOwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpT
dGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNp
emVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJRCAo
MCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWlu
YXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICA2OQorLyogWVlMQVNUIC0tIExhc3Qg
aW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDEzNzgKKworLyogWVlOVE9L
RU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDk0Cisv
KiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAg
NzgKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJVTEVT
ICAxOTUKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZWU5T
VEFURVMgIDMwMAorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJl
ciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2Rl
ZmluZSBZWU1BWFVUT0sgICAzNDgKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAor
ICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6
IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
CisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgIDU2LCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisgICAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAg
IDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAs
ICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAg
ODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MworfTsKKworI2lmIFlZREVCVUcK
Ky8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUg
bnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYg
eXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAg
OSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMTksCisgICAgICAyNCwgICAgMjYsICAgIDMwLCAg
ICAzMywgICAgMzYsICAgIDM4LCAgICA0MCwgICAgNDIsICAgIDQ2LCAgICA0OSwKKyAgICAgIDUy
LCAgICA1NSwgICAgNTcsICAgIDYwLCAgICA2NCwgICAgNjcsICAgIDY5LCAgICA3MSwgICAgNzMs
ICAgIDc1LAorICAgICAgNzgsICAgIDgxLCAgICA4NCwgICAgODYsICAgIDg4LCAgICA5MCwgICAg
OTIsICAgIDk2LCAgIDEwMCwgICAxMDIsCisgICAgIDEwNiwgICAxMTAsICAgMTEyLCAgIDExNCwg
ICAxMTgsICAgMTIyLCAgIDEyNiwgICAxMzAsICAgMTMyLCAgIDEzNiwKKyAgICAgMTQwLCAgIDE0
MiwgICAxNDQsICAgMTQ2LCAgIDE0OCwgICAxNTIsICAgMTU0LCAgIDE1OCwgICAxNjAsICAgMTY0
LAorICAgICAxNjYsICAgMTcyLCAgIDE3NCwgICAxNzgsICAgMTgwLCAgIDE4MiwgICAxODQsICAg
MTg2LCAgIDE4OCwgICAxOTAsCisgICAgIDE5NCwgICAxOTYsICAgMTk5LCAgIDIwMiwgICAyMDcs
ICAgMjEwLCAgIDIxMiwgICAyMTQsICAgMjE3LCAgIDIyMSwKKyAgICAgMjI1LCAgIDIyOCwgICAy
MzQsICAgMjM4LCAgIDI0MSwgICAyNDUsICAgMjQ4LCAgIDI0OSwgICAyNTEsICAgMjUzLAorICAg
ICAyNTUsICAgMjU3LCAgIDI1OSwgICAyNjMsICAgMjY5LCAgIDI3NiwgICAyODQsICAgMjkzLCAg
IDI5OSwgICAzMDEsCisgICAgIDMwNCwgICAzMDksICAgMzE1LCAgIDMyMCwgICAzMjMsICAgMzI1
LCAgIDMyOCwgICAzMzAsICAgMzMyLCAgIDMzNCwKKyAgICAgMzM3LCAgIDMzOSwgICAzNDEsICAg
MzQ0LCAgIDM0NiwgICAzNDgsICAgMzUwLCAgIDM1MiwgICAzNTcsICAgMzU5LAorICAgICAzNjEs
ICAgMzYzLCAgIDM2NSwgICAzNjcsICAgMzY5LCAgIDM3MSwgICAzNzMsICAgMzc1LCAgIDM3Nywg
ICAzNzksCisgICAgIDM4MSwgICAzODMsICAgMzg1LCAgIDM4NywgICAzODksICAgMzkxLCAgIDM5
MywgICAzOTUsICAgMzk3LCAgIDQwMywKKyAgICAgNDA4LCAgIDQxMCwgICA0MTMsICAgNDE3LCAg
IDQxOSwgICA0MjMsICAgNDI1LCAgIDQzMCwgICA0MzIsICAgNDM0LAorICAgICA0MzYsICAgNDM4
LCAgIDQ0MCwgICA0NDIsICAgNDQ0LCAgIDQ0NiwgICA0NDgsICAgNDUxLCAgIDQ1MiwgICA0NTMs
CisgICAgIDQ1OSwgICA0NjEsICAgNDYzLCAgIDQ2NiwgICA0NzAsICAgNDcyLCAgIDQ3NSwgICA0
NzcsICAgNDgwLCAgIDQ4NiwKKyAgICAgNDkwLCAgIDQ5MiwgICA0OTQsICAgNDk5LCAgIDUwMCwg
ICA1MDcsICAgNTA4LCAgIDUxNywgICA1MTgsICAgNTI2LAorICAgICA1MjgsICAgNTMwLCAgIDUz
MiwgICA1MzMsICAgNTM2LCAgIDU0MCwgICA1NDMsICAgNTQ2LCAgIDU0OSwgICA1NTMsCisgICAg
IDU1NiwgICA1NTgsICAgNTYxLCAgIDU2MywgICA1NjUsICAgNTY2Cit9OworCisvKiBZWVJIUyAt
LSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KK3sKKyAgICAgMTY4LCAgICAgMCwgICAgLTEsICAg
IDQzLCAgICAtMSwgICAgOTUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LAorICAgICAgLTEs
ICAgIDQ3LCAgICAtMSwgICAgNzAsICAgMTIyLCAgICA3MSwgICAgLTEsICAgIDk2LCAgICAtMSwg
ICAgOTcsCisgICAgICA3MiwgICAgOTgsICAgIDczLCAgICAtMSwgICAgOTksICAgIC0xLCAgICA5
NywgICAgNzYsICAgIDQ4LCAgICAtMSwKKyAgICAgIDk3LCAgICA1MSwgICAgLTEsICAgIDk3LCAg
ICA1MiwgICAgLTEsICAgMTIyLCAgICAtMSwgICAxMDAsICAgIC0xLAorICAgICAxMDEsICAgIC0x
LCAgICA5NywgICAgNzYsICAgMTAxLCAgICAtMSwgICAxMDMsICAgIDcxLCAgICAtMSwgICAxMDIs
CisgICAgICA3MSwgICAgLTEsICAgMTA0LCAgICAzOSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAx
MDQsICAgMTIwLCAgICAtMSwKKyAgICAgMTAzLCAgICA3NywgICAxMjAsICAgIC0xLCAgIDEwNSwg
ICAgNzAsICAgIC0xLCAgIDEzNywgICAgLTEsICAgIDQzLAorICAgICAgLTEsICAgIDQ4LCAgICAt
MSwgICAgOTcsICAgIC0xLCAgICA1MSwgICAxMDYsICAgIC0xLCAgICA1MiwgICAxMDYsCisgICAg
ICAtMSwgICAxMDcsICAgMTA2LCAgICAtMSwgICAgODQsICAgIC0xLCAgICA4MiwgICAgLTEsICAg
IDgxLCAgICAtMSwKKyAgICAgMTA2LCAgICAtMSwgICAxMDgsICAgIDg1LCAgIDEwNiwgICAgLTEs
ICAgMTA4LCAgICA4NiwgICAxMDYsICAgIC0xLAorICAgICAxMDgsICAgIC0xLCAgIDEwOSwgICAg
ODQsICAgMTA4LCAgICAtMSwgICAxMDksICAgIDgyLCAgIDEwOCwgICAgLTEsCisgICAgIDEwOSwg
ICAgLTEsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg4LCAgIDExMCwgICAgLTEsICAgMTExLCAg
ICA4OSwKKyAgICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDUzLCAgIDExMCwgICAgLTEsICAgMTEx
LCAgICA1NCwgICAxMTAsICAgIC0xLAorICAgICAxMTEsICAgIC0xLCAgIDExMiwgICAgNTUsICAg
MTExLCAgICAtMSwgICAxMTIsICAgIDU2LCAgIDExMSwgICAgLTEsCisgICAgIDExMiwgICAgLTEs
ICAgMTEzLCAgICAtMSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICA1NywK
KyAgICAgMTE1LCAgICAtMSwgICAxMTYsICAgIC0xLCAgIDExNywgICAgNTksICAgMTE2LCAgICAt
MSwgICAxMTcsICAgIC0xLAorICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAg
ICAtMSwgICAxMTgsICAgIDkzLCAgIDEyMiwgICAgNzgsCisgICAgIDEyMCwgICAgLTEsICAgMTE5
LCAgICAtMSwgICAxMDYsICAgMTIxLCAgIDEyMCwgICAgLTEsICAgIDc5LCAgICAtMSwKKyAgICAg
IDYwLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDY5LCAgICAtMSwgICAx
MjAsICAgIC0xLAorICAgICAxMjIsICAgIDc3LCAgIDEyMCwgICAgLTEsICAgMTE5LCAgICAtMSwg
ICAxMjUsICAgIDgwLCAgICAtMSwgICAxMzMsCisgICAgICA4MCwgICAgLTEsICAgICA3LCAgIDEz
OCwgICAxMzksICAgIDgwLCAgICAtMSwgICAxMjYsICAgIDcxLCAgICAtMSwKKyAgICAgMTI4LCAg
ICAtMSwgICAxMjcsICAgIC0xLCAgIDEyOCwgICAxMzAsICAgIC0xLCAgIDEyNywgICAgNzcsICAg
MTMwLAorICAgICAgLTEsICAgMTM1LCAgICA0MywgICAgNzAsICAgIC0xLCAgIDEzNywgICAgNDMs
ICAgIC0xLCAgIDEzNywgICAgNDMsCisgICAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAx
MzYsICAgMTMxLCAgIDEyOSwgICAgLTEsICAgMTMxLCAgIDEyOSwKKyAgICAgIC0xLCAgIDEzNiwg
ICAxMzEsICAgMTMyLCAgICAtMSwgICAxMzEsICAgMTMyLCAgICAtMSwgICAgLTEsICAgIDMzLAor
ICAgICAgLTEsICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM0
LCAgICAtMSwgICAxMzMsCisgICAgICA3NywgICAgNDMsICAgIC0xLCAgIDEzMywgICAgNzcsICAg
IDQzLCAgICA3MiwgICAgNzMsICAgIC0xLCAgIDEzMywKKyAgICAgIDc3LCAgICA0MywgICAgNzIs
ICAgMTIzLCAgICA3MywgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLAorICAgICAg
NzMsICAgIDc5LCAgIDE0NiwgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLCAgIDEy
MywgICAgNzMsCisgICAgICA3OSwgICAxNDYsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAg
ICA3OSwgICAxNDYsICAgIC0xLCAgIDEzNSwKKyAgICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIC0x
LCAgIDEzNSwgICAgNDMsICAgIDcyLCAgICA3MywgICAgLTEsICAgMTM1LAorICAgICAgNDMsICAg
IDcyLCAgIDEyMywgICAgNzMsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIDc5LCAgIDE0NiwgICAg
LTEsCisgICAgICAgMywgICAgNDMsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM2LCAgIDEzNywg
ICAgLTEsICAgICA5LCAgICAtMSwKKyAgICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAg
MywgICAgMzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTM5LAorICAgICAgLTEsICAgMTM4LCAg
IDEzOSwgICAgLTEsICAgICA0LCAgICAtMSwgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsCisg
ICAgIDE0MCwgICAgLTEsICAgMTQwLCAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAgMzks
ICAgIC0xLCAgICAxMSwKKyAgICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwgICAg
MjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LAorICAgICAgLTEsICAgIDIxLCAgICAtMSwg
ICAgMjIsICAgIC0xLCAgICAyMywgICAgLTEsICAgIDI0LCAgICAtMSwgICAgMjUsCisgICAgICAt
MSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0x
LCAgICA0MSwKKyAgICAgIC0xLCAgICA0MiwgICAgLTEsICAgMTQxLCAgICAtMSwgICAgNDQsICAg
IC0xLCAgICAzOCwgICAgNDMsICAgIDc0LAorICAgICAxNDIsICAgIDc1LCAgICAtMSwgICAgMzgs
ICAgIDc0LCAgIDE0MiwgICAgNzUsICAgIC0xLCAgIDE0MywgICAgLTEsCisgICAgIDE0MiwgICAx
NDMsICAgIC0xLCAgIDEzNywgICAxNDQsICAgIDgwLCAgICAtMSwgICAxNDUsICAgIC0xLCAgIDE0
NCwKKyAgICAgIDc3LCAgIDE0NSwgICAgLTEsICAgIDQzLCAgICAtMSwgICAgNDMsICAgIDcyLCAg
IDEyMywgICAgNzMsICAgIC0xLAorICAgICAxMjAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTUw
LCAgICAtMSwgICAxNDksICAgIC0xLCAgIDE0NywgICAgLTEsCisgICAgIDE1NiwgICAgLTEsICAg
MTU3LCAgICAtMSwgICAxNjAsICAgIC0xLCAgIDE2NywgICAgLTEsICAgIDc0LCAgICA3NSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgIDE1MSwgICAxNTUsICAgMTUyLCAgICA3NSwg
ICAgLTEsICAgMTU0LAorICAgICAgLTEsICAgMTQ5LCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAt
MSwgICAgNzQsICAgMTU1LCAgICA3NSwgICAgLTEsCisgICAgIDE0OCwgICAgLTEsICAgMTU1LCAg
IDE0OCwgICAgLTEsICAgIDgwLCAgICAtMSwgICAxMjIsICAgIDgwLCAgICAtMSwKKyAgICAgIDE4
LCAgICA3MCwgICAxMjIsICAgIDcxLCAgIDE1OCwgICAgLTEsICAgMTQ4LCAgICAxNiwgICAxNDgs
ICAgIC0xLAorICAgICAxNDgsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgMTM1LCAgICA0MywgICAg
NzksICAgMTQ2LCAgICAtMSwgICAgLTEsCisgICAgICA0MCwgICAgNzAsICAgMTYxLCAgIDE1OSwg
ICAgNzEsICAgMTUzLCAgICAtMSwgICAgLTEsICAgIDE1LCAgIDE2MiwKKyAgICAgMTQ4LCAgICA0
MCwgICAgNzAsICAgMTIyLCAgICA3MSwgICAgODAsICAgIC0xLCAgICAtMSwgICAgMTcsICAgIDcw
LAorICAgICAxNjMsICAgMTY0LCAgIDE2NiwgICAgNzEsICAgMTUzLCAgICAtMSwgICAxNTYsICAg
IC0xLCAgIDE0NywgICAgLTEsCisgICAgIDE1OSwgICAgLTEsICAgIC0xLCAgIDE2NSwgICAgODAs
ICAgIC0xLCAgIDE2NSwgICAgODAsICAgMTIyLCAgICAtMSwKKyAgICAgIDE0LCAgICA4MCwgICAg
LTEsICAgIDEzLCAgICA4MCwgICAgLTEsICAgIDIwLCAgICA4MCwgICAgLTEsICAgIDIwLAorICAg
ICAxMjIsICAgIDgwLCAgICAtMSwgICAgMTksICAgIDgwLCAgICAtMSwgICAxNjksICAgIC0xLCAg
IDE2OCwgICAxNjksCisgICAgICAtMSwgICAxNzAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgIC0x
LCAgIDEyNSwgICAxNzEsICAgMTU0LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNv
dXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTgzLCAgIDE4
MywgICAyMTgsICAgMjIxLCAgIDIzNCwgICAyMzksICAgMjQ0LCAgIDI1MCwgICAyNTMsCisgICAg
IDMyNiwgICAzMjksICAgNDM4LCAgIDQ0OCwgICA0NjEsICAgNDY5LCAgIDU2NywgICA1NzAsICAg
NTc4LCAgIDU4MiwKKyAgICAgNTg5LCAgIDU5MywgICA2MDAsICAgNjA2LCAgIDYxNSwgICA2MjMs
ICAgNjg3LCAgIDY5NCwgICA3MDQsICAgNzA3LAorICAgICA3MTcsICAgNzI3LCAgIDc0OCwgICA3
NDksICAgNzUwLCAgIDc1NSwgICA3NTYsICAgNzY1LCAgIDc3NywgICA3NzgsCisgICAgIDc4Niwg
ICA3OTcsICAgODAxLCAgIDgwMiwgICA4MTIsICAgODIyLCAgIDgzMiwgICA4NDUsICAgODQ2LCAg
IDg1NywKKyAgICAgODcxLCAgIDg3NSwgICA4NzksICAgODgzLCAgIDg4NCwgICA4OTcsICAgODk4
LCAgIDkxMSwgICA5MTIsICAgOTI1LAorICAgICA5MjYsICAgOTQzLCAgIDk0NCwgICA5NTgsICAg
OTU5LCAgIDk2MCwgICA5NjEsICAgOTYyLCAgIDk2NiwgICA5NjksCisgICAgIDk4MCwgICA5ODgs
ICAxMDEzLCAgMTAxOCwgIDEwMjUsICAxMDYxLCAgMTA2NCwgIDEwNzEsICAxMDc5LCAgMTEwMCwK
KyAgICAxMTE5LCAgMTEzMCwgIDExNTksICAxMTY0LCAgMTE3NCwgIDExNzksICAxMTg5LCAgMTE5
MiwgIDExOTUsICAxMTk4LAorICAgIDEyMDQsICAxMjExLCAgMTIyMSwgIDEyMzMsICAxMjUxLCAg
MTI3NSwgIDEzMDgsICAxMzQ0LCAgMTM2NywgIDEzNzEsCisgICAgMTM4NSwgIDE0MDUsICAxNDM0
LCAgMTQ1NCwgIDE1MzAsICAxNTQwLCAgMTU2NiwgIDE1NjksICAxNTc1LCAgMTU4MywKKyAgICAx
NTkxLCAgMTU5OSwgIDE2MDIsICAxNjA5LCAgMTYxMiwgIDE2MTUsICAxNjIxLCAgMTYyNCwgIDE2
MzksICAxNjQzLAorICAgIDE2NDcsICAxNjUxLCAgMTY2MCwgIDE2NjUsICAxNjcwLCAgMTY3NSwg
IDE2ODAsICAxNjg1LCAgMTY5MCwgIDE2OTUsCisgICAgMTcwMCwgIDE3MDUsICAxNzExLCAgMTcx
NywgIDE3MjMsICAxNzI4LCAgMTczMywgIDE3MzgsICAxNzUxLCAgMTc2NCwKKyAgICAxNzcyLCAg
MTc3NSwgIDE3OTAsICAxODE2LCAgMTgyMCwgIDE4MjYsICAxODM0LCAgMTg1MCwgIDE4NTQsICAx
ODU4LAorICAgIDE4NTksICAxODY1LCAgMTg2NiwgIDE4NjcsICAxODY4LCAgMTg2OSwgIDE4NzMs
ICAxODc0LCAgMTg3NCwgIDE4NzQsCisgICAgMTg4MiwgIDE4ODMsICAxODg4LCAgMTg5MSwgIDE4
OTksICAxOTAyLCAgMTkwOCwgIDE5MDksICAxOTEzLCAgMTkyMSwKKyAgICAxOTI1LCAgMTkzNSwg
IDE5NDAsICAxOTU3LCAgMTk1NywgIDE5NjIsICAxOTYyLCAgMTk2OSwgIDE5NjksICAxOTc3LAor
ICAgIDE5ODAsICAxOTg2LCAgMTk4OSwgIDE5OTUsICAxOTk5LCAgMjAwNiwgIDIwMTMsICAyMDIw
LCAgMjAyNywgIDIwMzgsCisgICAgMjA0NywgIDIwNTEsICAyMDU4LCAgMjA2MSwgIDIwNjcsICAy
MDY3Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCBZWVRP
S0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBz
eW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGlu
ZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29u
c3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZB
UklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAorICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJF
Q0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAorICAiQ09OU1RfUVVBTCIsICJCT09M
X1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCisg
ICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIs
ICJCVkVDMyIsCisgICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwg
IlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9R
VUFMIiwgIk9VVF9RVUFMIiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCisgICJWQVJZSU5HIiwg
IlNUUlVDVCIsICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJF
IiwKKyAgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09O
U1RBTlQiLAorICAiQk9PTENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwg
IlJJR0hUX09QIiwgIklOQ19PUCIsCisgICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFf
T1AiLCAiTkVfT1AiLCAiQU5EX09QIiwgIk9SX09QIiwKKyAgIlhPUl9PUCIsICJNVUxfQVNTSUdO
IiwgIkRJVl9BU1NJR04iLCAiQUREX0FTU0lHTiIsICJNT0RfQVNTSUdOIiwKKyAgIkxFRlRfQVNT
SUdOIiwgIlJJR0hUX0FTU0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLCAiT1JfQVNT
SUdOIiwKKyAgIlNVQl9BU1NJR04iLCAiTEVGVF9QQVJFTiIsICJSSUdIVF9QQVJFTiIsICJMRUZU
X0JSQUNLRVQiLAorICAiUklHSFRfQlJBQ0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJR0hUX0JSQUNF
IiwgIkRPVCIsICJDT01NQSIsICJDT0xPTiIsCisgICJFUVVBTCIsICJTRU1JQ09MT04iLCAiQkFO
RyIsICJEQVNIIiwgIlRJTERFIiwgIlBMVVMiLCAiU1RBUiIsICJTTEFTSCIsCisgICJQRVJDRU5U
IiwgIkxFRlRfQU5HTEUiLCAiUklHSFRfQU5HTEUiLCAiVkVSVElDQUxfQkFSIiwgIkNBUkVUIiwK
KyAgIkFNUEVSU0FORCIsICJRVUVTVElPTiIsICIkYWNjZXB0IiwgInZhcmlhYmxlX2lkZW50aWZp
ZXIiLAorICAicHJpbWFyeV9leHByZXNzaW9uIiwgInBvc3RmaXhfZXhwcmVzc2lvbiIsICJpbnRl
Z2VyX2V4cHJlc3Npb24iLAorICAiZnVuY3Rpb25fY2FsbCIsICJmdW5jdGlvbl9jYWxsX29yX21l
dGhvZCIsICJmdW5jdGlvbl9jYWxsX2dlbmVyaWMiLAorICAiZnVuY3Rpb25fY2FsbF9oZWFkZXJf
bm9fcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMi
LCAiZnVuY3Rpb25fY2FsbF9oZWFkZXIiLAorICAiZnVuY3Rpb25faWRlbnRpZmllciIsICJ1bmFy
eV9leHByZXNzaW9uIiwgInVuYXJ5X29wZXJhdG9yIiwKKyAgIm11bHRpcGxpY2F0aXZlX2V4cHJl
c3Npb24iLCAiYWRkaXRpdmVfZXhwcmVzc2lvbiIsICJzaGlmdF9leHByZXNzaW9uIiwKKyAgInJl
bGF0aW9uYWxfZXhwcmVzc2lvbiIsICJlcXVhbGl0eV9leHByZXNzaW9uIiwgImFuZF9leHByZXNz
aW9uIiwKKyAgImV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIiwgImluY2x1c2l2ZV9vcl9leHByZXNz
aW9uIiwKKyAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVzc2lv
biIsCisgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lvbiIs
CisgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJleHBy
ZXNzaW9uIiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVuY3Rp
b25fcHJvdG90eXBlIiwKKyAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVhZGVy
X3dpdGhfcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2RlY2xh
cmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKKyAgInBhcmFtZXRlcl9xdWFsaWZpZXIi
LCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKKyAgImluaXRfZGVjbGFyYXRvcl9saXN0Iiwg
InNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCisgICJ0eXBlX3F1
YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKKyAgInR5
cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0
X3NwZWNpZmllciIsCisgICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFy
YXRpb24iLAorICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIs
ICJpbml0aWFsaXplciIsCisgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3RhdGVtZW50Iiwg
InNpbXBsZV9zdGF0ZW1lbnQiLAorICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAxIiwgIkAyIiwg
InN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAiY29tcG91bmRfc3RhdGVtZW50X25vX25ld19z
Y29wZSIsICJzdGF0ZW1lbnRfbGlzdCIsCisgICJleHByZXNzaW9uX3N0YXRlbWVudCIsICJzZWxl
Y3Rpb25fc3RhdGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIsICJjb25kaXRp
b24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICJAMyIsCisgICJANCIsICJANSIsICJmb3JfaW5p
dF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVudCIsCisgICJq
dW1wX3N0YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2RlY2xhcmF0aW9u
IiwKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiQDYiLCAwCit9OworI2VuZGlmCisKKyMgaWZk
ZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1i
ZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAsICAgMjU2LCAgIDI1Nywg
ICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2
NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjcz
LCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAg
MjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAorICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgs
ICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCisgICAgIDI5NSwgICAy
OTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMzAwLCAgIDMwMSwgICAzMDIsICAgMzAzLCAgIDMw
NCwKKyAgICAgMzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDMwOSwgICAzMTAsICAgMzExLCAg
IDMxMiwgICAzMTMsICAgMzE0LAorICAgICAzMTUsICAgMzE2LCAgIDMxNywgICAzMTgsICAgMzE5
LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQsCisgICAgIDMyNSwgICAzMjYsICAg
MzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAzMzIsICAgMzMzLCAgIDMzNCwKKyAg
ICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwgICAzNDAsICAgMzQxLCAgIDM0Miwg
ICAzNDMsICAgMzQ0LAorICAgICAzNDUsICAgMzQ2LCAgIDM0NywgICAzNDgKK307CisjIGVuZGlm
CisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlO
IGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAg
ICAgIDAsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5NiwgICAgOTYsICAgIDk2LCAg
ICA5NywgICAgOTcsCisgICAgICA5NywgICAgOTcsICAgIDk3LCAgICA5NywgICAgOTgsICAgIDk5
LCAgIDEwMCwgICAxMDAsICAgMTAxLCAgIDEwMSwKKyAgICAgMTAyLCAgIDEwMiwgICAxMDMsICAg
MTAzLCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA2LAorICAgICAxMDYs
ICAgMTA2LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwg
ICAxMDksCisgICAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMSwgICAxMTEsICAgMTExLCAgIDEx
MSwgICAxMTIsICAgMTEyLCAgIDExMiwKKyAgICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAg
IDExNiwgICAxMTcsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LAorICAgICAxMTksICAgMTIw
LCAgIDEyMCwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIs
CisgICAgIDEyMywgICAxMjQsICAgMTI0LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNiwgICAx
MjcsICAgMTI3LCAgIDEyOCwKKyAgICAgMTI5LCAgIDEyOSwgICAxMzAsICAgMTMwLCAgIDEzMCwg
ICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMxLAorICAgICAxMzIsICAgMTMzLCAgIDEz
MywgICAxMzMsICAgMTMzLCAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzNCwgICAxMzQsCisgICAg
IDEzNCwgICAxMzQsICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYsICAg
MTM2LCAgIDEzNiwKKyAgICAgMTM2LCAgIDEzNywgICAxMzcsICAgMTM4LCAgIDEzOCwgICAxMzgs
ICAgMTM5LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDAsICAgMTQwLCAgIDE0MCwgICAx
NDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsCisgICAgIDE0MCwg
ICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAg
IDE0MSwKKyAgICAgMTQyLCAgIDE0MiwgICAxNDMsICAgMTQ0LCAgIDE0NCwgICAxNDUsICAgMTQ1
LCAgIDE0NiwgICAxNDcsICAgMTQ4LAorICAgICAxNDgsICAgMTQ5LCAgIDE0OSwgICAxNDksICAg
MTQ5LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAxNTAsCisgICAgIDE1MywgICAxNTMs
ICAgMTU0LCAgIDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU3LCAgIDE1OCwK
KyAgICAgMTU4LCAgIDE1OSwgICAxNTksICAgMTYxLCAgIDE2MCwgICAxNjIsICAgMTYwLCAgIDE2
MywgICAxNjAsICAgMTY0LAorICAgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LCAg
IDE2NywgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjcsCisgICAgIDE2OCwgICAxNjgsICAgMTY5
LCAgIDE2OSwgICAxNzEsICAgMTcwCit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5
bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKKyAgICAgICAx
LCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAgICAzLCAgICAg
MSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAz
LAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMywgICAgIDEsCisgICAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgICAxLCAgICAgMiwgICAg
IDIsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLAorICAg
ICAgIDIsICAgICA1LCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAg
ICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDUsICAgICAxLCAgICAgMiwKKyAgICAgICA0LCAgICAgNSwgICAgIDQsICAg
ICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwg
ICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDUsICAgICA0LAorICAgICAgIDEsICAgICAy
LCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEs
CisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAg
IDAsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwg
ICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAg
NCwgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsCisgICAg
ICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAzLCAgICAgMiwKKyAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDMK
K307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ug
d2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkg
c29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBl
cnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAg
ICAgIDAsICAgICAwLCAgIDExMywgICAxMTQsICAgMTE1LCAgICAgMCwgICAxMDcsICAgMTA2LCAg
IDEyMSwgICAxMTksCisgICAgIDEyMCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5
LCAgIDEzMCwgICAxMjIsICAgMTIzLCAgIDEyNCwKKyAgICAgMTMxLCAgIDEzMiwgICAxMzMsICAg
MTEwLCAgIDEwOCwgICAgIDAsICAgMTE4LCAgIDEzNCwgICAxMzUsICAgMTM3LAorICAgICAxOTMs
ICAgMTk0LCAgICAgMCwgICAgNzYsICAgIDg2LCAgICAgMCwgICAgOTEsICAgIDk4LCAgICAgMCwg
ICAxMDQsCisgICAgICAgMCwgICAxMTEsICAgMTE2LCAgIDEzNiwgICAgIDAsICAgMTkwLCAgIDE5
MiwgICAxMDksICAgMTAzLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNzEsICAgICAwLCAg
ICA3NCwgICAgODYsICAgICAwLCAgICA4NywgICAgODgsICAgIDg5LAorICAgICAgNzcsICAgICAw
LCAgICA4NiwgICAgIDAsICAgIDcyLCAgICA5OSwgICAxMDUsICAgMTEyLCAgICAgMCwgICAgIDEs
CisgICAgIDE5MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQwLCAgICAgMCwgICAx
OTUsICAgIDc4LCAgICA4MywKKyAgICAgIDg1LCAgICA5MCwgICAgIDAsICAgIDkyLCAgICA3OSwg
ICAgIDAsICAgICAwLCAgICAgMiwgICAgIDUsICAgICA0LAorICAgICAgIDYsICAgIDI3LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAzNCwgICAgMzMsICAgIDMyLCAgICAgMywgICAgIDgsCisgICAg
ICAyOCwgICAgMTAsICAgIDE1LCAgICAxNiwgICAgIDAsICAgICAwLCAgICAyMSwgICAgIDAsICAg
IDM1LCAgICAgMCwKKyAgICAgIDM4LCAgICA0MSwgICAgNDIsICAgIDQ3LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTUsICAgIDU3LAorICAgICAgNTksICAgIDcwLCAgICAgMCwgICAg
MjUsICAgIDczLCAgICAgMCwgICAxNDUsICAgICAwLCAgIDE0MywgICAxMzksCisgICAgIDE0MSwg
ICAgIDAsICAgICAwLCAgIDE3NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE1NywKKyAgICAgMTYyLCAgIDE2NiwgICAgMzUsICAgIDYxLCAgICA2OCwgICAgIDAsICAgMTQ4
LCAgICAgMCwgICAxMDQsICAgMTUxLAorICAgICAxNjQsICAgMTUwLCAgIDE0OSwgICAgIDAsICAg
MTUyLCAgIDE1MywgICAxNTQsICAgMTU1LCAgICA4MCwgICAgODIsCisgICAgICA4NCwgICAgIDAs
ICAgICAwLCAgIDEwMCwgICAgIDAsICAgMTQ3LCAgIDEwMiwgICAgMjksICAgIDMwLCAgICAgMCwK
KyAgICAgIDEyLCAgICAxMywgICAgIDAsICAgICAwLCAgICAxOSwgICAgMTgsICAgICAwLCAgIDEx
OCwgICAgMjIsICAgIDI0LAorICAgICAgMzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTE3LCAgIDEzOCwgICAgIDAsICAgICAwLCAgIDE0MiwKKyAgICAg
MTg2LCAgIDE4NSwgICAgIDAsICAgMTc3LCAgICAgMCwgICAxODksICAgMTg3LCAgICAgMCwgICAx
NzMsICAgMTU2LAorICAgICAgIDAsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2Mywg
ICAgIDAsICAgICAwLCAgIDE2NywgICAxNjMsCisgICAgIDE2NSwgICAgIDAsICAgIDkzLCAgICAg
MCwgICAgOTcsICAgMTAxLCAgICAgNywgICAgIDAsICAgIDE0LCAgICAyNiwKKyAgICAgIDExLCAg
ICAxNywgICAgMjMsICAgIDM2LCAgICAzNywgICAgNDAsICAgIDM5LCAgICA0NSwgICAgNDYsICAg
IDQzLAorICAgICAgNDQsICAgIDQ4LCAgICA0OSwgICAgNTQsICAgIDU2LCAgICA1OCwgICAgIDAs
ICAgICAwLCAgIDE0NCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTg4LCAgICAgMCwgICAx
NTgsICAgIDYyLCAgICA2OSwgICAgIDAsICAgICAwLCAgICA5NCwKKyAgICAgICA5LCAgICAgMCwg
ICAxNDYsICAgICAwLCAgIDE4MCwgICAxNzksICAgMTgyLCAgICAgMCwgICAxNzEsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICA4MSwgICAgOTUsICAgICAwLCAgICA2MCwgICAgIDAsICAgMTgx
LCAgICAgMCwgICAgIDAsCisgICAgIDE3MCwgICAxNjgsICAgICAwLCAgICAgMCwgICAxNTksICAg
IDk2LCAgICAgMCwgICAxODMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE2MSwgICAxNzQs
ICAgMTYwLCAgICAgMCwgICAxODQsICAgMTc4LCAgIDE2OSwgICAxNzIsICAgMTc2Cit9OworCisv
KiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5
ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICA5OCwgICAgOTksICAgMTAwLCAgIDIyNywgICAx
MDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LAorICAgICAxMDYsICAgMTA3LCAgIDE0Miwg
ICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsCisgICAgIDEx
NiwgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTQzLCAgIDE0NCwgICAyMTYsICAgMTQ1
LCAgIDEyMiwKKyAgICAgMTQ2LCAgIDE0NywgICAgMzIsICAgIDMzLCAgICAzNCwgICAgNzksICAg
IDYwLCAgICA2MSwgICAgODAsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAxMjMs
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA3NCwgICAgNzUsCisgICAgIDEyNywgICAx
MjgsICAgMTY2LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAyMTAsICAgMjcxLCAgIDI5
MiwKKyAgICAgMjkzLCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDI4MSwgICAyNzAsICAgMTU2LCAg
IDI1MywgICAyMDIsICAgMjUwLAorICAgICAyNjYsICAgMjc4LCAgIDI3OSwgICAxNTcsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDUzCit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRl
eCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICov
CisjZGVmaW5lIFlZUEFDVF9OSU5GIC0yNTMKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlw
YWN0W10gPQoreworICAgIDEyNjksICAgLTExLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEyNCwg
IC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1
MywgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAg
LTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAtNDAsICAtMjUzLCAgLTI1MywgIC0yNTMsICAt
MjUzLAorICAgIC0yNTMsICAgLTY1LCAgIC01MiwgICAtNTAsICAgIDIxLCAgICAxNiwgIC0yNTMs
ICAgLTEwLCAgMTMxMCwgIC0yNTMsCisgICAgMTMzNCwgIC0yNTMsICAgLTEyLCAgLTI1MywgIDEx
ODIsICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgMTMzNCwKKyAgICAgIC0zLCAgMTMxMCwg
IC0yNTMsICAgIDEwLCAgLTI1MywgICAgMzIsICAgIDY4LCAgLTI1MywgIC0yNTMsICAtMjUzLAor
ICAgIC0yNTMsICAxMzEwLCAgIDEyMiwgICAgNzgsICAtMjUzLCAgICAxMSwgIC0yNTMsICAtMjUz
LCAgIDk5MywgIC0yNTMsCisgICAgLTI1MywgICAgMzEsICAxMzEwLCAgICA4MywgICAyMDIsICAt
MjUzLCAgIDI4NywgIC0yNTMsICAtMjUzLCAgLTI1MywKKyAgICAtMjUzLCAgICA5MSwgIDEzMTAs
ICAgLTYzLCAgLTI1MywgICA3NjQsICAgOTkzLCAgICA4MCwgIC0yNTMsICAtMjUzLAorICAgIC0y
NTMsICAtMjUzLCAgIDk5MywgICA5OTMsICAgOTkzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1
MywgIC0yNTMsCisgICAgICAyNywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAgODEsICAgLTM0LCAg
MTA2MCwgICAgOTAsICAtMjUzLCAgIDk5MywKKyAgICAgIDEyLCAgICAtOSwgIC0yNTMsICAgLTM2
LCAgIDEwMywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAxMTEsICAgMTEwLAorICAgICAtNDQsICAt
MjUzLCAgICA5NywgIC0yNTMsICAtMjUzLCAgMTEyNywgICAgOTksICAgIDM2LCAgLTI1MywgIC0y
NTMsCisgICAgLTI1MywgICAgOTIsICAgMTAwLCAgLTI1MywgICAxMDcsICAgMTA5LCAgIDEwMSwg
ICA4NDUsICAgMTEyLCAgIDEwOCwKKyAgICAtMjUzLCAgLTI1MywgICAgMjUsICAtMjUzLCAgLTI1
MywgICAgNDIsICAtMjUzLCAgIC02NSwgICAxMTUsICAtMjUzLAorICAgIC0yNTMsICAtMjUzLCAg
LTI1MywgICAzNjksICAtMjUzLCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDExNCwgIC0yNTMsCisg
ICAgLTI1MywgICA5MTIsICAgOTkzLCAgLTI1MywgICAxMTcsICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzLCAgICAtNywKKyAgICAtMjUzLCAgLTI1MywgICA5OTMsICAxMjIzLCAgLTI1MywgIC0y
NTMsICAgOTkzLCAgIDExNiwgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAgOTkzLCAgIDk5Mywg
ICA5OTMsICAgOTkzLCAgIDk5MywgICA5OTMsICAgOTkzLCAgIDk5MywgICA5OTMsCisgICAgIDk5
MywgICA5OTMsICAgOTkzLCAgIDk5MywgICA5OTMsICAtMjUzLCAgLTI1MywgICA5OTMsICAgIDgz
LCAgLTI1MywKKyAgICAtMjUzLCAgLTI1MywgICA0NTEsICAtMjUzLCAgIDk5MywgIC0yNTMsICAt
MjUzLCAgICA0MywgIC0yNTMsICAtMjUzLAorICAgICA0NTEsICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzLCAgLTI1MywgICA5OTMsICAgOTkzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgICA5
OTMsICAgMTEzLCAgIDExOCwgIC0yNTMsICAtMjUzLCAgLTI1MywgICAxMjAsICAgMTE5LCAgLTI1
MywKKyAgICAgMTI3LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgLTI1MywgICAgMTIsICAgIDEyLCAg
LTI1MywgIC0yNTMsICAtMjUzLAorICAgIC0yNTMsICAgLTM2LCAgIC0zNiwgIC0yNTMsICAgMTEx
LCAgIDExMCwgICAgODUsICAgMTIxLCAgLTI1MywgICAxNDgsCisgICAgIDYxNSwgICAgMTgsICAt
MjUzLCAgIDY5NywgICA0NTEsICAtMjUzLCAgLTI1MywgICAxMjUsICAgOTkzLCAgIDEzMCwKKyAg
ICAtMjUzLCAgIDk5MywgIC0yNTMsICAgMTI5LCAgLTI1MywgIC0yNTMsICAgNjk3LCAgIDQ1MSwg
ICAxMTksICAgMTU3LAorICAgICAxMzIsICAgMTI2LCAgLTI1MywgIC0yNTMsICAgOTkzLCAgLTI1
MywgICA5OTMsICAtMjUzLCAgIDEzMSwgICAxMzMsCisgICAgIDE5OSwgIC0yNTMsICAgMTM3LCAg
IDUzMywgIC0yNTMsICAtMjUzLCAgICAyOSwgICA5OTMsICAgNTMzLCAgIDQ1MSwKKyAgICAgOTkz
LCAgLTI1MywgIC0yNTMsICAtMjUzLCAgIDEzOCwgICAxMTksICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzCit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eXBnb3RvW10gPQoreworICAgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMs
ICAtMjUzLCAgLTI1MywgIC0yNTMsICAgIDQ0LCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0y
NTMsICAgLTQ2LCAgLTI1MywgICAtMTksICAtMjUzLCAgIC03OCwgICAtMjMsICAtMjUzLCAgLTI1
MywKKyAgICAtMjUzLCAgICAyOCwgICAgMzAsICAgIDQ1LCAgLTI1MywgICAtNDMsICAgLTg1LCAg
LTI1MywgICAtOTIsICAgLTczLAorICAgICAgIDQsICAgICA2LCAgLTI1MywgIC0yNTMsICAtMjUz
LCAgIDEzOSwgICAxNjUsICAgMTczLCAgIDE1NCwgIC0yNTMsCisgICAgLTI1MywgIC0yNDMsICAg
LTI3LCAgICAgMCwgICAyMzIsICAgLTI5LCAgLTI1MywgIC0yNTMsICAgMTY3LCAgIC02NiwKKyAg
ICAtMjUzLCAgICA0NywgIC0xNTcsICAgIC04LCAgLTE0MCwgIC0yNTIsICAtMjUzLCAgLTI1Mywg
IC0yNTMsICAgLTQxLAorICAgICAxOTUsICAgIDM5LCAgICAgMSwgIC0yNTMsICAtMjUzLCAgIC0x
NCwgIC0yNTMsICAtMjUzLCAgLTI1MywgIC0yNTMsCisgICAgLTI1MywgIC0yNTMsICAtMjUzLCAg
LTI1MywgIC0yNTMsICAgMjExLCAgLTI1MywgIC0yNTMKK307CisKKy8qIFlZVEFCTEVbWVlQQUNU
W1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9z
aXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdo
aWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFD
VCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZ
WVRBQkxFX05JTkYgLTc2CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7
CisgICAgICAzOSwgICAxNjUsICAgMTY5LCAgICA1MCwgICAgMzAsICAgMjI0LCAgICAzMSwgICAg
NjIsICAgMTMwLCAgIDE2MSwKKyAgICAgMjY5LCAgICA2NywgICAxNjQsICAgMjIwLCAgIDE5Mywg
ICAgNTIsICAgMTYyLCAgIDE4NSwgICAxODYsICAgIDU0LAorICAgICAgNzEsICAgMTc4LCAgIDEw
OCwgICAyNjksICAgIDU2LCAgIDEyMSwgICAgNDcsICAgIDU1LCAgICA2MiwgICAgIDYsCisgICAg
ICAgNywgICAyOTEsICAgIDQ4LCAgICA2NSwgICAgNTEsICAgIDU2LCAgIDI5MSwgICAxNzUsICAg
IDY2LCAgIDEwOCwKKyAgICAgICA2LCAgICAgNywgICAxMjEsICAgMTc2LCAgICAzOSwgICAyMDcs
ICAgMTY3LCAgIDE2OCwgICAgMzAsICAgMTk0LAorICAgICAgMzEsICAgIDczLCAgIDE4NywgICAx
ODgsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDIzLCAgICAyNCwgICAxMzAsCisgICAgICA2OCwg
ICAgODEsICAgMjQ5LCAgIDE4MCwgICAyMjYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDIzLCAg
ICAyNCwKKyAgICAgMjE3LCAgICA3MiwgICAgNzMsICAgMTgzLCAgICA3MywgICAxODQsICAgMTQ4
LCAgIDE2NSwgICAxNzAsICAgMTcxLAorICAgICAyMjgsICAgIDg0LCAgICA4MSwgICAgODUsICAg
IDc2LCAgIDIxMSwgICAyMTIsICAgMjEzLCAgIDIyMywgICAyNjcsCisgICAgICA4NiwgICAyMzIs
ICAgLTc1LCAgICA2MywgICAyMTQsICAgMjE3LCAgICA2NCwgICAxODEsICAgMTgyLCAgIDE3MiwK
KyAgICAgMjk0LCAgIDI3MywgICAyNDYsICAgMTczLCAgIDIxNSwgICAgNDcsICAgMjE3LCAgIDIz
NywgICAyMzgsICAgMjM5LAorICAgICAyNDAsICAgMTI0LCAgIDI1MSwgICAxOTgsICAgMjIwLCAg
IDEwOCwgICAxOTksICAgMjg1LCAgIDEyMSwgICAyMTcsCisgICAgIDIxNywgICAgODMsICAgMjE4
LCAgIDI1MiwgICAyNDcsICAgIDczLCAgIDEyNiwgICAyODAsICAgICAyLCAgICAgMywKKyAgICAg
ICA0LCAgIDI1NSwgICAyNTYsICAgMjk4LCAgIDE1OCwgICAyMzMsICAgMjM0LCAgIDEwOCwgICAx
MDgsICAgMTA4LAorICAgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwg
ICAxMDgsICAgMTA4LCAgIDI1NywgICAyOTcsCisgICAgIC0yNiwgICAxMDgsICAgMTc0LCAgIDE0
OCwgICAxMjEsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTg5LCAgIDE5MCwKKyAgICAgMTc5LCAg
IDI2OCwgICAyMTcsICAgMjYxLCAgIDIzNSwgICAyMzYsICAgMjQxLCAgIDI0MiwgICAxOTEsICAg
MTkyLAorICAgICAxOTUsICAgMTk3LCAgIDIwMCwgICAxNjUsICAgMjY4LCAgIDEwOCwgICAyNzUs
ICAgMjAzLCAgIDEyMSwgICAyMDQsCisgICAgIDIwMSwgICAyMDUsICAgMjA4LCAgIDIwOSwgICAy
ODYsICAgLTI1LCAgIDIyMSwgICAtMjAsICAgMjYzLCAgIDE2NSwKKyAgICAgMjI1LCAgIDI1OSwg
ICAyNTgsICAgMjYwLCAgIDI2MiwgICAyOTUsICAgMjE3LCAgIC0yNywgICAyNzIsICAgMjc2LAor
ICAgICAyODIsICAgMjg0LCAgIDE0OCwgICAyODMsICAgMjg4LCAgIDE2NSwgICAgIDIsICAgICAz
LCAgICAgNCwgICAyNzQsCisgICAgIDE0OCwgICAyODcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
Mjg5LCAgIDI5MCwgICAyMzEsICAgMjk5LCAgIDI0MywKKyAgICAgIDc4LCAgIDE1OSwgICAyNDQs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICA4MiwgICAxNjAsICAgIDQ5LCAgIDI0
NSwgICAxMjUsCisgICAgICAyNSwgICAgMjYsICAgMjY0LCAgICAyNywgICAgMjgsICAgMjQ4LCAg
ICAyOSwgICAyOTYsICAgIDc3LCAgIDI1NCwKKyAgICAgMTQ4LCAgIDI2NSwgICAyNzcsICAgMTQ4
LCAgIDE0OCwgICAgNzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgMTQ4LCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMjksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgMTQ4LAorICAgICAgIDEsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCisg
ICAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcs
ICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsCisgICAgICA4
NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDky
LCAgICA5MywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAx
MzksICAgMTQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk1LCAgICA5
NiwKKyAgICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMz
LCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAg
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgMTM4LAorICAgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4
OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsCisgICAgICA5MiwgICAgOTMsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk0LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgMjE5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAxNDEsCisgICAgICA5NSwgICAgOTYsICAgICAwLCAgICA5Nywg
ICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1
LAorICAgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgIDEzOCwgICAg
MjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLAorICAg
ICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA5NCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEz
MSwgICAxMzIsICAgMTMzLCAgICAgMCwKKyAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICA4NywgICAg
MjksICAgIDg4LCAgICA4OSwKKyAgICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5Miwg
ICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzYsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYs
ICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksCisgICAgICA4OCwgICAgODks
ICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywKKyAgICAg
IDU2LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LAorICAgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAs
ICAgICAwLCAgICA5MiwgICAgOTMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDIsICAgICAzLAor
ICAgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAw
LCAgICA5NSwgICAgOTYsCisgICAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAy
OSwgICAgODgsCisgICAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAg
ICA5MywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgMTYzLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5Niwg
ICAgIDAsICAgIDk3LCAgICAgMiwKKyAgICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCisg
ICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAg
IDAsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LAorICAgICAgODgsICAgIDg5LCAgICA5MCwg
ICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDIwNiwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsCisgICAgICA5MSwgICAgIDAsICAg
ICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgIDIy
MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAy
NSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5
LAorICAgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk0LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LAorICAgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwg
ICAgIDAsCisgICAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTQsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAs
CisgICAgICAgMCwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDExLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAg
ICAgMCwgICAgMjksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNjksICAgICAwLCAgICAgMCwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgMTk2LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAgMCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LCAgIDIyOSwgICAgMjksICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgIDIzMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
ICAwLAorICAgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAor
ICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAw
LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAy
OQorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAg
IDAsICAgIDg2LCAgICA5NCwgICAgNDMsICAgICAwLCAgIDE2MiwgICAgIDAsICAgIDM0LCAgICA3
NCwgICAgNzIsCisgICAgIDI1MywgICAgNDAsICAgIDg1LCAgIDE1MywgICAgNTgsICAgIDgwLCAg
ICA3OSwgICAgNTMsICAgIDU0LCAgICA3MSwKKyAgICAgIDQ5LCAgIDEwNiwgICAgNjgsICAgMjY2
LCAgICAgMywgICAgNjgsICAgIDM3LCAgICA3NywgICAgNTUsICAgICA4LAorICAgICAgIDksICAg
MjgzLCAgICA0MywgICAgNDMsICAgIDc0LCAgICAgMywgICAyODgsICAgIDcxLCAgICAzOCwgICAg
ODUsCisgICAgICAgOCwgICAgIDksICAgIDg1LCAgICA3NywgICAgNDQsICAgMTM3LCAgICA5Miwg
ICAgOTMsICAgIDQ0LCAgICA5MywKKyAgICAgIDQ0LCAgICA1MSwgICAgODgsICAgIDg5LCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgMTI1LAorICAgICAgNzIsICAgIDYxLCAg
IDIwMiwgICAxMDksICAgIDcxLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisg
ICAgICA3NywgICAgNzQsICAgIDcyLCAgICA4MiwgICAgNzQsICAgIDg0LCAgICA3NiwgICAxNjIs
ICAgIDUxLCAgICA1MiwKKyAgICAgMTcyLCAgICA3MCwgICAgODIsICAgIDcyLCAgICA3NCwgICAg
NjAsICAgIDYxLCAgICA2MiwgICAxNjEsICAgIDcxLAorICAgICAgNzksICAgMTc2LCAgICA3MSwg
ICAgNzcsICAgIDY5LCAgICA3NywgICAgODAsICAgIDg1LCAgICA4NiwgICAgNzIsCisgICAgICA3
MSwgICAyNTgsICAgMTk0LCAgICA3NiwgICAgNzksICAgIDM3LCAgICA3NywgICAxODUsICAgMTg2
LCAgIDE4NywKKyAgICAgMTg4LCAgICA4MCwgICAyMDQsICAgIDc3LCAgIDI1NCwgICAxNjEsICAg
IDgwLCAgIDI3NCwgICAxNjEsICAgIDc3LAorICAgICAgNzcsICAgIDQzLCAgICA4MCwgICAgODAs
ICAgMTk3LCAgIDEyNSwgICAgNDMsICAgMjY3LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAy
MTYsICAgMjE3LCAgIDI5MCwgICAgNDMsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4
NSwKKyAgICAgMTg2LCAgIDE4NywgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAg
IDE5MywgICAyMjEsICAgMjg5LAorICAgICAgNzAsICAgMTk3LCAgICA3MSwgICAxNTMsICAgMTk3
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICA1NSwgICAgNTYsCisgICAgICA3MCwgICAyNTMsICAg
IDc3LCAgICA3OCwgICAxODMsICAgMTg0LCAgIDE4OSwgICAxOTAsICAgIDU3LCAgICA1OSwKKyAg
ICAgIDczLCAgICA3MiwgICAgODAsICAgMjU4LCAgIDI2NiwgICAyMjEsICAgMjYxLCAgICA3MCwg
ICAyMjEsICAgIDcwLAorICAgICAgODAsICAgIDgwLCAgICA3MCwgICAgNzUsICAgMjc2LCAgICA3
MCwgICAgNzIsICAgIDcxLCAgICA0MCwgICAyNzQsCisgICAgICA3MywgICAgNzMsICAgIDc5LCAg
ICA3MywgICAgNzMsICAgMjg3LCAgICA3NywgICAgNzAsICAgIDczLCAgICA3MCwKKyAgICAgIDQz
LCAgICA3NSwgICAyMDIsICAgIDcxLCAgICA3MSwgICAyOTAsICAgICA0LCAgICAgNSwgICAgIDYs
ICAgIDc5LAorICAgICAyMTAsICAgIDgwLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxNiwgICAg
NzksICAgMTczLCAgICA4MCwgICAxOTEsCisgICAgICA1NSwgICAgODIsICAgMTkyLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgNjIsICAgIDgyLCAgICAgNSwgICAxOTMsICAgIDcy
LAorICAgICAgMzgsICAgIDM5LCAgIDI1MCwgICAgNDEsICAgIDQyLCAgIDE5OCwgICAgNDQsICAg
Mjg4LCAgICA1MywgICAyMTAsCisgICAgIDI1MCwgICAyNTAsICAgMjY2LCAgIDI1MywgICAyNTQs
ICAgIDQ0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjY2LCAgIDI2NywgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI4MywgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjg4LCAgIDI4OSwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLAorICAgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDc0LCAgICA3
NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgwLCAgICA4MSwgICAgODIsCisgICAg
ICAtMSwgICAgODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgLTEsICAgIC0xLAorICAgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDgwLAorICAgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwKKyAgICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIC0xLCAg
ICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4MCwg
ICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAor
ICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgLTEsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAorICAgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwg
ICAgODQsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisg
ICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
LTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsCisgICAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKKyAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwg
ICAgNTEsICAgIDUyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgICA0LCAgICAgNSwKKyAgICAgICA2
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODEs
ICAgIDgyLAorICAgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LAorICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICA3MywgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAg
ICA4NCwgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgODAsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgsICAgIC0xLCAgICAtMSwgICAg
NTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwgICAgNzMsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAg
IDgyLCAgICAtMSwgICAgODQsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAg
IDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
MCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLAor
ICAgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDcwLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAgICAg
LTEsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgLTEsICAg
IDQ0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICA3NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCisg
ICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
LTEsICAgIDQ0LCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
NDgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwKKyAgICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwKKyAg
ICAgIDQxLCAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgMzgs
ICAgIDM5LAorICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQKK307CisK
Ky8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNj
ZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MSwgICAgNDIsICAgIDQ0LAorICAgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4
LCAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCisgICAgIDEzOCwgICAxMzksICAg
MTQwLCAgIDE0MSwgICAxNjgsICAgMTY5LCAgIDE3MCwgICAgMzcsICAgIDQzLCAgIDEzOCwKKyAg
ICAgIDQzLCAgICA3NCwgICAgODAsICAgMTcxLCAgICA3MSwgICAgNzcsICAgICAzLCAgICAzMywg
ICAgMzQsICAgIDM1LAorICAgICAxMzAsICAgMTMxLCAgIDEzNiwgICAgNzcsICAgIDgwLCAgICA0
MywgICAxMzcsICAgMTM5LCAgICA3MiwgICAgIDAsCisgICAgIDE2OSwgICAxMzksICAgIDc0LCAg
IDEzNywgICAxNDIsICAgMTQzLCAgICA3NCwgICAxNTQsICAgMTMwLCAgIDEyOSwKKyAgICAgMTMy
LCAgIDEzNywgICAxMzEsICAgIDQzLCAgICA3MCwgICAgNzIsICAgIDc5LCAgICA0MywgICAgNDUs
ICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDcwLCAgICA4MSwgICAg
ODIsICAgIDg0LCAgICA5NSwgICAgOTYsCisgICAgICA5NywgICAgOTksICAgMTAwLCAgIDEwMSwg
ICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywKKyAgICAgMTA4LCAgIDEw
OSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3
LAorICAgICAxMTgsICAgMTE5LCAgIDEyMywgICAxMzcsICAgIDgwLCAgIDE0MiwgICAgNDMsICAg
MTQ0LCAgIDE0NSwgICAgNzUsCisgICAgIDE0MywgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDQwLCAgICA3NCwKKyAgICAgIDc1LCAgICA4MCwgICAx
MDYsICAgMTE5LCAgIDEyMCwgICAxMjIsICAgMTI0LCAgIDEyNSwgICAxMzcsICAgMTQ3LAorICAg
ICAxNDgsICAgMTQ5LCAgIDE1MCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNjAsICAgMTY3LCAg
ICA0MywgICAxMjksCisgICAgIDEzMiwgICAgNzIsICAgIDc5LCAgICA3MywgICAxMjMsICAgMTIw
LCAgIDE0NiwgICAxMDYsICAgMTA2LCAgIDEyMiwKKyAgICAgIDUxLCAgICA1MiwgICAgNzIsICAg
IDc2LCAgICA3MSwgICAgNzEsICAgIDc3LCAgICAzOSwgICAxMjAsICAgIDcwLAorICAgICAxMDYs
ICAgIDg1LCAgICA4NiwgICAgODIsICAgIDg0LCAgICA1MywgICAgNTQsICAgIDg4LCAgICA4OSwg
ICAgNTUsCisgICAgICA1NiwgICAgNTcsICAgIDU5LCAgICA1OCwgICAgOTMsICAgIDczLCAgICA3
NSwgICAgNzIsICAgIDc3LCAgICA4MCwKKyAgICAgIDgwLCAgICA4MCwgICAxNjIsICAgIDcwLCAg
ICA3MCwgICAgODAsICAgIDgwLCAgIDEyMiwgICAgNzAsICAgIDc1LAorICAgICAxNTEsICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDY5LCAgICA3OSwgICAxMjEsICAgIDc3LCAgICA4MCwgICAgNzUs
CisgICAgIDE0OCwgICAgNzIsICAgIDczLCAgIDEyMywgICAxNDYsICAgIDczLCAgICA3MSwgICAg
OTgsICAgMTIyLCAgICA0MywKKyAgICAgIDQ4LCAgIDEwMSwgICAxMjAsICAgMTA2LCAgIDEwNiwg
ICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAsICAgMTEwLAorICAgICAxMTAsICAgMTExLCAgIDEx
MSwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMjIsICAgMTIzLCAgIDE0NSwgICAxNDgsCisgICAg
IDE2MywgICAxMjIsICAgIDgwLCAgIDE2MSwgICAxNTUsICAgMTIwLCAgIDEyMCwgICAxMjMsICAg
IDc5LCAgICA3MywKKyAgICAgIDczLCAgICA3OCwgICAgNzMsICAgIDQwLCAgIDE0NywgICAxNTYs
ICAgMTY0LCAgICA3MSwgICAxMjIsICAgMTM1LAorICAgICAxNTksICAgMTUyLCAgICA3MywgICAx
NDYsICAgIDc5LCAgIDEyMCwgICAgNzAsICAgMTU5LCAgIDE2NSwgICAxNjYsCisgICAgIDE0OCwg
ICAxNTgsICAgIDQzLCAgICA3MSwgICAgNzUsICAgMTQ2LCAgIDEyMiwgICAgODAsICAgIDcxLCAg
ICAxNiwKKyAgICAgIDc5LCAgIDE0OSwgICAxNTMsICAgMTU0LCAgICA3MSwgICAxMjIsICAgMTUz
LCAgIDE0OCwgICAxNDYsICAgIDgwCit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1
cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlF
TVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlh
Y2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJS
T1IJCWdvdG8geXllcnJvcmxhYgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRy
YW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNl
IEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICov
CisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5H
KCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJ
CVwKK2RvCQkJCQkJCQlcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJ
CQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAg
ICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAo
eXljaGFyKTsJCQkJXAorICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5
eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJ
CQkJCQkJXAorICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVw
IikpOyBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZ
SUQgKDApKQorCisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisK
KworLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0
byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxv
Y2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlz
IGRlZmluZWQpLiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNp
Zm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJo
cywgTikJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJ
XAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xp
bmU7CVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJz
dF9jb2x1bW47CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBO
KS5sYXN0X2xpbmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJo
cywgTikubGFzdF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJ
ewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xp
bmUgICA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1
cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZ
UkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxl
IChZWUlEICgwKSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRo
ZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVk
IG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVz
ZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lm
bmRlZiBZWV9MT0NBVElPTl9QUklOVAorIyBpZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAm
JiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBM
b2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkgICAgICAo
TG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9jKS5sYXN0
X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9O
X1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKworLyogWVlM
RVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNp
ZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BB
UkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsKQorI2VuZGlmCisKKy8q
IEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZu
ZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMg
ZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJ
CQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworIyBk
ZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBc
CitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJ
CQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwK
KyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVl
KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJ
CQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92
YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50
ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBp
bnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyNlbmRpZgor
eworICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAo
eXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5
cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlmCisg
IHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQor
fQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMg
c3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2
b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBF
IGNvbnN0ICogY29uc3QgeXl2YWx1ZXApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9w
cmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCisgICAgRklMRSAqeXlvdXRwdXQ7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisjZW5k
aWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0
LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYg
KHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9s
X3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCk7CisgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQ
cmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAo
aW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRv
bSwgeXl0eXBlX2ludDE2ICp0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50
IChib3R0b20sIHRvcCkKKyAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50
MTYgKnRvcDsKKyNlbmRpZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOwor
ICBmb3IgKDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIs
ICIgJWQiLCAqYm90dG9tKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRl
ZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBp
ZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkp
OwkJCQlcCit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBn
b2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50
IHl5cnVsZSkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXly
dWxlKQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisjZW5kaWYKK3sKKyAg
aW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBp
bnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNp
bmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5
bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0g
MDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIg
ICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJo
c1t5eXByaHNbeXlydWxlXSArIHl5aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5
eW5yaHMpXSkKKwkJICAgICAgIAkJICAgICAgICk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJc
biIpOworICAgIH0KK30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwg
UnVsZSk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBh
cnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxl
IHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJV
RyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQo
VGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZ
REVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNl
cidzIHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBU
SCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tz
IGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4
dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9v
IGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01B
WElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5m
aW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhE
RVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJS
T1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18g
JiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNl
CisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3Qg
Y2hhciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisg
ICAgY29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZv
ciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJl
dHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5Cisj
ICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9H
TlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZ
WVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcg
J1wwJyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBj
aGFyICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNy
YykKKyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sK
KyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3
aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1
cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgor
LyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3
YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBz
dWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1
b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFw
b3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNo
LWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwor
ICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQg
dGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0
bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIg
PT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0
ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsK
KwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRl
ZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAg
eXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAg
ICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25v
dF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5
c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXly
ZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdl
IGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlT
VEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0
aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90Cisg
ICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291
bGQgYmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRp
bmFyeSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9N
QVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAq
Lworc3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5
eXN0YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisg
IGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4g
MDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFy
KTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBl
XSk7CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlz
aXplMTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJS
T1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAor
ICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0
cyB0aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5l
eHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5l
eHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9y
ICVzIik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5
ZjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1td
ID0gIiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIg
b3IgJXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICAr
IHNpemVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIg
Y29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAt
WVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4g
ICovCisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8q
IFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAg
ICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9
IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAg
aW50IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAg
ICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBm
b3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5
eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291
bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQg
PSAxOworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVk
IC0gMV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10g
PSB5eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5
dG5hbWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7
CisJICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5
eXByZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlf
KHl5Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAg
ICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUg
PSB5eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVf
TUFYSU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYs
IGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0
IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBw
cm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAg
Y2hhciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9
ICp5eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFd
ID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlw
LCB5eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJ
CSAgeXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNp
emU7CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRo
ZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3Ry
dWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXApCisj
ZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQor
ICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2
YWx1ZXA7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKworICBpZiAoIXl5bXNnKQor
ICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBl
LCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKwor
ICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisKKy8qIFByZXZlbnQgd2Fybmlu
Z3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFN
CisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYK
KyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQpOworI2Vsc2UKK2ludCB5eXBhcnNl
ICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCisKKworCisKKworCisv
Ki0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBB
UlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19f
IFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50
Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQ
QVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAh
IFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCitpbnQKK3l5cGFyc2UgKHZvaWQpCisjZWxzZQoraW50Cit5eXBhcnNlICgpCisKKyNlbmRp
ZgorI2VuZGlmCit7CisgIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFy
OworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8K
K1lZU1RZUEUgeXlsdmFsOworCisvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAq
LworaW50IHl5bmVycnM7CisKKyAgaW50IHl5c3RhdGU7CisgIGludCB5eW47CisgIGludCB5eXJl
c3VsdDsKKyAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2Fn
ZXMgZW5hYmxlZC4gICovCisgIGludCB5eWVycnN0YXR1czsKKyAgLyogTG9vay1haGVhZCB0b2tl
biBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5
dG9rZW4gPSAwOworI2lmIFlZRVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1l
c3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhd
OworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNp
emVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisgIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9v
bHM6CisgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisgICAgIGB5eXZzJzogcmVsYXRl
ZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisgICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMu
CisKKyAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBh
bGxvdyB5eW92ZXJmbG93CisgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwor
CisgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRE
RVBUSF07CisgIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOworICB5eXR5cGVfaW50MTYgKnl5
c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2
c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CisgIFlZU1RZUEUgKnl5
dnNwOworCisKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3Ag
LT0gKE4pKQorCisgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKKyAgLyog
VGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24g
ZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKwor
CisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1
bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAg
Ki8KKyAgaW50IHl5bGVuID0gMDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBw
YXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVy
cnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFk
LiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUg
ZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0
YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVk
IGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOwor
ICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdz
dGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAor
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVy
ZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVz
aGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5
c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNz
ICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3Vy
cmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAg
ICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZs
b3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3Rh
Y2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNl
IHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5
eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisKKwkvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGlu
IHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29u
ZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAor
CSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZs
b3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXpl
b2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKwor
CQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2czE7Cisg
ICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9D
QVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQg
dGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3Rh
Y2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOwor
ICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFY
REVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5
eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNU
QUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1
c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5
eXZzKTsKKworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkK
KwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5v
IHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAg
IHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGlu
dCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0g
eXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJp
bmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKworICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0t
LS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5eWJhY2t1cDoKKworICAv
KiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVh
ZCBhCisgICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVh
ZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3
aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0
W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0
OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZ
WUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tl
bjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0g
WVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlE
UFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVs
c2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZ
WV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxv
Yyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZ
WVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhh
dCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNU
IDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0Owor
ICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAo
eXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKKwlnb3RvIHl5ZXJybGFiOworICAgICAg
eXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorCisgIGlmICh5eW4gPT0g
WVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5j
ZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1cy4gICovCisg
IGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBs
b29rLWFoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2Vu
IHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hh
ciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisK
KyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVm
YXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoK
KyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5
ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBh
IHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJ
ZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFj
dGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBs
aW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3Vt
ZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNz
aWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEg
Yml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFM
IG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5d
OworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBzd2l0Y2ggKHl5bikKKyAgICB7Cisg
ICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBzZWFy
Y2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UKKyAgICAgICAgY29uc3QgVFN5bWJvbCog
c3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1ib2w7CisgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bmRl
Y2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlh
YmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5z
ZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9u
bHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5p
c1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVkIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGRvbid0IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVy
eSwgYW5kIHRoZSBwb29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQor
CisgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0ICkgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxl
LT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5
cGUoKSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSU5UX1RZUEUgaXMgb25seSAxNi1iaXQgcGx1cyBzaWduIGJpdCBmb3IgdmVy
dGV4L2ZyYWdtZW50IHNoYWRlcnMsCisgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3Ig
Y29uc3RhbnRzCisgICAgICAgIC8vCisgICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5pKSA+PSAoMSA8PCAxNikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAiIGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ci
LCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVu
aW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAgeworICAgICAgICBpZiAoISh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgJiYgISh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpICYmICEo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlw
ZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAi
Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5
cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgeyAv
LyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0QXJyYXlOb2RlKCh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUp
OworICAgICAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9y
cworICAgICAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAgICAg
IGZpZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsgLy8gbmVlZCB0byBkbyBp
dCB0aGlzIHdheSBiZWNhdXNlIHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKKyAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQt
PmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAg
fSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNN
YXRyaXgoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBtYXRyaWNlcworICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+YWRkQ29u
c3RNYXRyaXhOb2RlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCks
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0g
KDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSA8PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgewor
ICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIs
ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50
VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0
QXJyYXlTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldE1heEFy
cmF5U2l6ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlTZXRNYXhTaXplKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc1N5bWJvbE5vZGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGVQb2ludGVyKCksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0
SUNvbnN0KCksIHRydWUsICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNldE1heFNpemUoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpLCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKSwgMCwgZmFs
c2UsICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IGluZGV4IG91dCBvZiByYW5nZSAnJWQn
IiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3Rh
bnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3aXRoIGEgc2l6
ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFibGUiKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9h
dCwgRWJwSGlnaCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAg
ICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLCAo
eXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFR5
cGVOYW1lKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCks
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSk7
CisKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hh
bmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5z
ZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25z
dCkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShU
VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNU
eXBlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVj
aXNpb24oKSwgRXZxQ29uc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6
CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8g
YW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZp
ZWxkczsKKyAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMo
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAg
ICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmll
bGRzCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFy
c2VDb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZmllbGRzLm51bSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBdKTsKKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVj
dG9yU3dpenpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGlu
ZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBv
cmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgVE1hdHJpeEZpZWxk
cyBmaWVsZHM7CisgICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4Rmll
bGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5saW5lKSkgeworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAw
OworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
eworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIs
ICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOworICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCks
RXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxk
cy5yb3cpOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidElu
dCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7
CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsK
KyAgICAgICAgICAgIFRUeXBlTGlzdCogZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGlm
IChmaWVsZHMgPT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICgoKmZpZWxkcylbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKih5eXZzcFsoMykgLSAo
MyldLmxleCkuc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1
cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4g
dmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVy
KEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksICooKmZpZWxkcylbaV0udHlwZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
U3RydWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgs
ICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAi
IGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9u
IGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQz
LnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDEyOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNr
KCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5s
aW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisK
KyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVy
cm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNToKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNh
bGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICBUT3BlcmF0
b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlmIChvcCAhPSBFT3BO
dWxsKQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlbiB0aGlz
IHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9uJ3QgZ28gdGhyb3Vn
aCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICAvLyBUaGVp
ciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5LgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8v
IHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5l
LCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAmdHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAw
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgIC8vIEl0J3MgYSBjb25zdHJ1Y3Rvciwgb2YgdHlwZSAndHlwZScuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBw
YXJzZUNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50
ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGlu
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKHR5cGUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9y
LiAgRmluZCBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CisgICAgICAgICAgICBib29sIGJ1aWx0
SW47CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1bmN0aW9u
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAg
ICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uICBCdXQsIGl0IG1pZ2h0IHN0aWxsIG1hcCB0
byBhIGJ1aWx0LWluCisgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLgorICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7
CisgICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBBIGZ1bmN0aW9uIGNhbGwg
bWFwcGVkIHRvIGEgYnVpbHQtaW4gb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKSA9PSAx
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChv
cCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAwLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZS0+
Z2V0TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5j
dGlvbi4gIFR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJl
YWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5j
dGlvbkNhbGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0
ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhv
dyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlv
biBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBpZiBi
dWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4gb3Zlcmxv
YWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgYnVp
bHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdpdGggRU9w
TnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCisgICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCkt
PnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0
TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOwor
ICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyTGlzdCYgcXVhbGlmaWVyTGlzdCA9ICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVy
KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUt
PmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0g
KCpmbkNhbmRpZGF0ZSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRMaW5lKCksICJhc3NpZ24iLCAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNl
KClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUt
PmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9y
ICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHF1YWxpZmllckxpc3QucHVzaF9iYWNrKHF1YWwpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZSB3YXMg
cHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEg
ZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGRlbGV0ZSBmbkNhbGw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJl
IG5vdCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50
ZXJtKS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1O
b2RlID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1
bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICBUUGFyYW1ldGVyIHBh
cmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1
bmN0aW9uKS0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVu
Y3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIzOgorCisgICAgeworICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKKyAgICAgICAgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVy
bU5vZGUsICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToK
KworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0b3IKKyAgICAgICAgLy8K
KyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgeworICAg
ICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS51c2VyRGVmKSB7CisgICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsKKyAg
ICAgICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKKyAg
ICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5n
LCB0eXBlLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRPcGVy
YXRvciBvcCA9IEVPcE51bGw7CisgICAgICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
c2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0
NDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1
Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2go
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEludDsgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJpdmVjMiIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzMiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgNDogICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWM0IiwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS5zaXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMz
IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVj
dEJWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9P
TkxZKCJidmVjNCIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwp
IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBUVHlwZTo6
Z2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpLCAiIik7
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAg
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7CisgICAgICAgICAgICBUVHlwZSB0eXBlKCh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7CisgICAgICAgICAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgKih5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Cisg
ICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikg
PSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjc6CisKKyAgICB7Cisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5j
dGlvbigoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDI4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMjk6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3Jl
bWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAi
KysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDMwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVF
cnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDIp
XS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+dW5hcnlPcEVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIi0tIiwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAzMToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3Ag
IT0gRU9wTnVsbCkgeworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAo
MildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAg
ICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0p
LmxpbmUsIGVycm9yT3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUg
PSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVs
bDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5s
aW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cE5lZ2F0aXZlOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzQ6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0p
Lm9wID0gRU9wTG9naWNhbE5vdDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM2OgorCisgICAg
eworICAgICAgICBGUkFHX1ZFUlRfT05MWSgiKiIsICh5eXZzcFsoMikgLSAoMyldLmxleCkubGlu
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIioiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNzoKKworICAgIHsKKyAgICAgICAg
RlJBR19WRVJUX09OTFkoIi8iLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsICIvIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMzg6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMzk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIisiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA0MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiLSIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQx
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQy
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQz
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9y
KCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNw
WygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA0NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVy
VGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI+IiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNDU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUs
ICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAg
ICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAiPj0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRC
Q29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0
NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI9PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9IGVsc2UgaWYgKCgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpIHx8ICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+
ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJHTF8zRExf
YXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGlu
ZSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5pc0FycmF5KCkgfHwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTA6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICImJiIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDU1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDU2OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExvZ2ljYWxYb3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiXl4iLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
KyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MDoKKworICAgIHsKKyAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5s
ZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVj
dGlvbigoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygz
KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUpOworICAgICAg
ICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUo
KSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKworICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxp
bmUsICI6IiwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
Wyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjI6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiYXNz
aWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2
c3BbKDIpIC0gKDMpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMikgLSAoMyldLmludGVybSkubGluZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5hc3Np
Z25FcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJhc3NpZ24iLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfSBlbHNlIGlmICgoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSB8fCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4
dGVuc2lvbkVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lLCAiR0xfM0RM
X2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MzoKKworICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgO30KKyAgICBicmVh
azsKKworICBjYXNlIDY0OgorCisgICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BNdWxBc3NpZ247IDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA2NToKKworICAgIHsgRlJBR19WRVJUX09OTFkoIi89IiwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWdu
OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjY6CisKKyAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA2NzoKKworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBjYXNl
IDY4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgNjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiLCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDcwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsK
KyAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
KS5mdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5
cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1
bmN0aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5j
dGlvbi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgVFBh
cmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5uYW1l
ICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZh
cmlhYmxlLT5nZXRUeXBlKCksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSksICh5eXZz
cFsoMSkgLSAoMildLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eXZzcFsoMSkgLSAo
MildLmludGVybSkubGluZSksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3RvdHlwZS0+c2V0T3Bl
cmF0b3IoRU9wUHJvdG90eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IHByb3RvdHlwZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzI6CisKKyAgICB7Cisg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSkKKyAg
ICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVnYXRlLT5zZXRP
cGVyYXRvcihFT3BEZWNsYXJhdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5wcmVjaXNpb24pICk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA3NDoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTXVsdGlwbGUgZGVj
bGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgorICAgICAgICAvLwor
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVj
dGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMKKyAgICAgICAgLy8gKHdlIGRv
bid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgorICAg
ICAgICAvLworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0
dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgorICAgICAgICAv
LworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1
bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBpZiAocHJldkRlYykgeworICAg
ICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2Fk
ZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygp
LCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFt
Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqcHJldkRlYylbaV0udHlwZS0+
Z2V0UXVhbGlmaWVyKCkgIT0gKCooeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pKVtp
XS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICgqKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCks
ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVjbGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBk
ZWZpbml0aW9uLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUg
dmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9uZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAg
ICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAgU28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0
aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5j
dGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLmxpbmU7CisKKyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKih5
eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzU6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzY6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzc6
CisKKyAgICB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAg
ICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAoMildLmludGVy
bSkucGFyYW0udHlwZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisKKyAgICB7
CisgICAgICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9mIG9uZS1wYXJh
bWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgbmFt
ZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRlcl9kZWNsYXJh
dG9yCisgICAgICAgIC8vCisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBh
cmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSci
LCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgZGVsZXRlICh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5m
dW5jdGlvbik7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uZnVuY3Rpb24p
LT5hZGRQYXJhbWV0ZXIoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbSk7CisgICAgICAg
IH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisKKyAgICB7CisgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAm
JiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFy
eSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdl
dFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
KSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4u
LgorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFk
ZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90
IHN1cHBvcnQgcmVjdXJzaW9uKQorICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAg
ICBUVHlwZSB0eXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSk7CisgICAgICAgIGZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlw
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDgwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVz
ZSBvZiB0eXBlICd2b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAt
ICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0g
PSB7KHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0udHlwZSkpfTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBw
YXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisKKyAgICB7CisgICAgICAg
IC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAo
NSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkg
LSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5
cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgODI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNr
KCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDgzOgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAo
MildLmludGVybSkubGluZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICoo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFyeSwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDg0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMykgLSAoMyldLmludGVybSk7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJy
b3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZp
ZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZp
ZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3Jhcnks
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5x
dWFsaWZpZXIpID0gRXZxSW47CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgODg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
cXVhbGlmaWVyKSA9IEV2cU91dDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkg
fTsKKyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgOTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKKyAgICAgICAgCisgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtKS50eXBlLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLnR5cGUucHJlY2lzaW9uID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRE
ZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkudHlwZS50eXBlKTsKKyAg
ICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBlLnByZWNpc2lvbiwgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS50eXBlLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgOTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLmxpbmUsICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25J
bml0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTM6CisK
KyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUp
XS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsK
KworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFso
NCkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBw
YXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5s
ZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDYpXS5sZXgp
LmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0
Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykg
LSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOworCisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNildLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDYpXS5sZXgpLmxp
bmUsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZz
cFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAg
ICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAt
ICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdmFyaWFi
bGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSk7Cisg
ICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3Ry
aW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDYp
XS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk1
OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eXZzcFsoMykgLSAoNyldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg3KV0uaW50
ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKTsKKworICAgICAg
ICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDcpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkg
LSAoNyldLmludGVybSkudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soKHl5dnNwWyg0KSAtICg3KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRl
cm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg3KV0uaW50ZXJtKS50eXBlLnNldEFy
cmF5KHRydWUsICh5eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkuZ2V0QXJyYXlTaXplKCkpOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAo
NyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDcpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxl
KSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dmFsLmlu
dGVybSkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5p
dGlhbGl6ZXIoKHl5dnNwWygzKSAtICg3KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg3KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNyldLmludGVybSkudHlwZSwgKHl5dnNwWyg3KSAt
ICg3KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUsIHZhcmlhYmxlKSkgewor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVk
aWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
aWYgKGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5
dnNwWygxKSAtICg3KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXl2c3BbKDYp
IC0gKDcpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg3KV0u
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg4KV0ubGV4
KS5saW5lLCAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDgpXS5pbnRlcm0pOworCisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eXZzcFsoNCkg
LSAoOCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg4KV0uaW50ZXJtKS50eXBlKSB8fCBwYXJz
ZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDgpXS5sZXgp
LmxpbmUsICh5eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5
dnNwWyg0KSAtICg4KV0ubGV4KS5saW5lLCAoeXl2c3BbKDUpIC0gKDgpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXko
dHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hl
Y2soKHl5dnNwWyg0KSAtICg4KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg4KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoMSkgLSAoOCldLmludGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2YWwuaW50ZXJtKS5saW5l
LCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOworICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigo
eXl2c3BbKDMpIC0gKDgpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDgpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWygxKSAtICg4KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDgpIC0gKDgpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7CisgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJl
c2VudGF0aW9uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJt
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0g
KDgpXS5pbnRlcm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eXZzcFsoNykgLSAoOCldLmxl
eCkubGluZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDgpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA5NzoKKworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSld
LmludGVybSk7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlm
ICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygzKSAtICg1KV0ubGV4
KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSld
LmludGVybSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IGludGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gYnVpbGQgdGhl
IGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5dnNwWyg0KSAtICg1KV0ubGV4
KS5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAg
ICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpLCAoeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmUsICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTAwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcs
IFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoNCld
LmxleCkubGluZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS50eXBlKSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwor
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygz
KSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpIHx8IHBh
cnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNCldLmxl
eCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICh5eXZz
cFsoMSkgLSAoNCldLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgICAgIFRW
YXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVy
cm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQor
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEwMToKKworICAgIHsKKyAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7CisgICAgICAgIGludCBz
aXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZz
cFsoMikgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSksICh5eXZz
cFsoMikgLSAoNSldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGlu
ZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50
eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5saW5l
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5s
ZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAg
ICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOwor
ICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRl
cm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRl
SW5pdGlhbGl6ZXIoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAg
ICAvLworICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtl
QWdncmVnYXRlKGludGVybU5vZGUsICh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsK
KyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDM6CisKKyAgICB7Cisg
ICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5xdWFsaWZpZXIgPSBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5hcnJheSkgewor
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNToKKwor
ICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSAm
JiBwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMildLmlu
dGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkubGluZSwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
c2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCisgICAgICAgICAg
ICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5l
LCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAg
ICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8
ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllcjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA2OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MDc6CisKKyAgICB7CisgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJv
ckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA4OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMSldLmxleCku
bGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52
YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0LCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUlu
dmFyaWFudFZhcnlpbmdJbiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
cHJlY2lzaW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJl
Y2lzaW9uKSA9IEVicE1lZGl1bTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5l
LCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIHNpemUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAg
ICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI0Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNToKKworICAgIHsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDEyNjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEyNzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKwor
ICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgy
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI5OgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElu
dCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDEzMToKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDIiLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEz
MjoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDMiLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMzoK
KworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDQiLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoKKwor
ICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRCIsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTM1OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckN1YmUiLCAo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1w
bGVyQ3ViZSwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTM2OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
c3RydWN0IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhh
c2UgbG9va2VkIHVwIHRoZQorICAgICAgICAvLyB0eXBlLgorICAgICAgICAvLworICAgICAgICBU
VHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5zeW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVj
dCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS51c2VyRGVmID0gJnN0cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTM4OgorCisgICAgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0u
bGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgoeXl2c3BbKDQpIC0gKDUpXS5pbnRl
cm0udHlwZUxpc3QpLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcpOworICAgICAgICBU
VmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDUpXS5s
ZXgpLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAicmVkZWZpbml0aW9u
IiwgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eXZz
cFsoMSkgLSAoNSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNl
ckRlZiA9IHN0cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM5OgorCisg
ICAgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAo
NCldLmludGVybS50eXBlTGlzdCksIFRTdHJpbmcoIiIpKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICg0
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3Ry
dWN0dXJlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGVMaXN0KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQxOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlTGlzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqKHl5dmFsLmludGVybS50eXBlTGlzdCkp
W2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGVMaXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigoKih5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCkp
W2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIs
ICgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+Z2V0RmllbGRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
dHlwZUxpc3QpKVtpXSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTQyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFso
MikgLSAoMyldLmludGVybS50eXBlTGlzdCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
dm9pZEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmxpbmUsICgqKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLnR5cGVMaXN0KSlbMF0udHlwZS0+Z2V0RmllbGROYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtu
b3cgYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAoKih5eXZhbC5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5zZXRUeXBlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS50eXBlKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkuc2l6ZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpOworCisgICAgICAgICAgICAvLyBkb24n
dCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBpZiAoKCooeXl2YWwuaW50ZXJt
LnR5cGVMaXN0KSlbaV0udHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkubGluZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5KQorICAgICAgICAg
ICAgICAgICgqKHl5dmFsLmludGVybS50eXBlTGlzdCkpW2ldLnR5cGUtPnNldEFycmF5U2l6ZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXplKTsKKyAgICAgICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZikKKyAgICAgICAgICAgICAg
ICAoKih5eXZhbC5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5zZXRUeXBlTmFtZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAg
IH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQzOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZUxpbmUpKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ0OgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAo
MyldLmludGVybS50eXBlTGluZSkpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6
CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygo
eXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmlu
ZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNl
dEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNDY6CisKKyAgICB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3Bb
KDEpIC0gKDQpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlID0gbmV3IFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUp
LmxpbmUgPSAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFtZSgqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5z
dHJpbmcpOworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5
cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ3
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0
ODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0OToKKworICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUxOgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTUzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTU0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU1
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU2OgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTU3OgorCisgICAgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE1ODoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5wb3AoKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1OToKKworICAgIHsKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApCisg
ICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0
T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTYxOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTYyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
MDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBp
ZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkpCisgICAgICAgICAg
ICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0T3BlcmF0b3Io
RU9wU2VxdWVuY2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE2NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNjU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVn
YXRlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSksICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1Ob2RlKSwgMCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2NjoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjc6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBzdGF0aWNfY2Fz
dDxUSW50ZXJtTm9kZSo+KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2ODoKKworICAgIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLm5v
ZGVQYWlyKSwgKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTY5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWly
KS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5v
ZGUyID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTcxOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExp
bmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE3MjoKKworICAgIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworCisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5
dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKQorICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOworICAg
ICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAgIHsgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc0OgorCisgICAgeworICAgICAgICBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDYp
IC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNCkgLSAoNildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAwLCB0cnVlLCAoeXl2c3BbKDEpIC0gKDYpXS5sZXgpLmxpbmUpOworICAg
ICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTc1OgorCisgICAgeyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWyg4KSAtICg4KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAoeXl2c3BbKDMpIC0g
KDgpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAwLCBmYWxzZSwgKHl5dnNwWyg0KSAtICg4KV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE3NzoKKworICAgIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTc4OgorCisgICAgeworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkTG9vcCgoeXl2c3BbKDQpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5
eXZzcFsoNykgLSAoNyldLmludGVybS5pbnRlcm1Ob2RlKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50
ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVp
bnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9k
ZVBhaXIpLm5vZGUyKSwgdHJ1ZSwgKHl5dnNwWygxKSAtICg3KV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE3OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxODE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODI6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE4MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpciku
bm9kZTEgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxODQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIp
Lm5vZGUxID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4NToK
KworICAgIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAw
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxl
eCkubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwg
IiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg2OgorCisgICAgeworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiYnJlYWsgc3RhdGVt
ZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAo
eXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rp
b25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIm5vbi12b2lkIGZ1bmN0
aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTg4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVl
OworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBh
IHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25U
eXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlw
ZSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyld
LmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0
dXJuIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg5OgorCisgICAgeworICAgICAgICBG
UkFHX09OTFkoImRpc2NhcmQiLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE5MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAg
ICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5MToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgICAgICBwYXJzZUNvbnRleHQtPnRy
ZWVSb290ID0gKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTkyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxOTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE5NDoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uJiBmdW5j
dGlvbiA9ICooKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbik7CisgICAgICAgIFRG
dW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIC8v
CisgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlz
IGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KKyAgICAgICAgLy8gYXMgaXQg
d291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2Us
IHdlJ3JlIGxvb2tpbmcgdXAKKyAgICAgICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCisgICAg
ICAgIC8vCisgICAgICAgIGlmIChwcmV2RGVjLT5pc0RlZmluZWQoKSkgeworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHku
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBm
dW5jdGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwor
CisgICAgICAgIC8vCisgICAgICAgIC8vIFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5j
dGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2
b2lkCisgICAgICAgIC8vCisgICAgICAgIGlmIChmdW5jdGlvbi5nZXROYW1lKCkgPT0gIm1haW4i
KSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpID4gMCkgeworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5saW5lLCAiZnVuY3Rpb24gY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcihzKSIsIGZ1bmN0aW9u
LmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UmV0
dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgIiIsIGZ1
bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBj
YW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAg
IC8vIE5ldyBzeW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBpdHMg
YXJndW1lbnRzCisgICAgICAgIC8vCisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
cHVzaCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSByZXR1cm4gdHlw
ZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAgICAgICAvLwor
ICAgICAgICBwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUgPSAmKHByZXZEZWMtPmdl
dFJldHVyblR5cGUoKSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUgPSBmYWxzZTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbnNlcnQgcGFyYW1ldGVycyBp
bnRvIHRoZSBzeW1ib2wgdGFibGUuCisgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIG5v
IG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0IGluc2VydCBpdAorICAgICAgICAv
LyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgorICAgICAgICAvLworICAgICAgICAv
LyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgaW50byB0aGUgSElMLCBz
byBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgIC8vIGtub3dzIHdoZXJlIHRvIGZpbmQgcGFyYW1l
dGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyYW1Ob2RlcyA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0
aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBUUGFyYW1ldGVyJiBwYXJh
bSA9IGZ1bmN0aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgeworICAg
ICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5h
bWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRlZmluaXRp
b24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2
YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBUcmFuc2ZlciBvd25lcnNoaXAgb2YgbmFtZSBwb2ludGVyIHRvIHN5bWJvbCB0
YWJsZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtLm5hbWUgPSAw
OworCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFt
ZXRlciB0byB0aGUgSElMCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBwYXJh
bU5vZGVzID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVz
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRl
cnMsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICh5eXZzcFsoMSkg
LSAoMSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTk1OgorCisgICAgeworICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJl
dHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPworICAgICAgICAvLyAgIE1heSBi
ZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlw
ZSgpICE9IEVidFZvaWQgJiYgISBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bSkubGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybU5vZGUpLCAwKTsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSwgRU9wRnVuY3Rpb24s
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtKS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAg
IC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBh
bmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGlu
Zm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUocGFy
c2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5j
b250ZXh0UHJhZ21hLmRlYnVnKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRleHRQ
cmFnbWEucHJhZ21hVGFibGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3
IG9mIHlhY2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lN
Qk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZ
UE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywg
eXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUg
cmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0
IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1
bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKwor
ICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8
PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5
c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0
ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0g
aGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9t
IGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisg
ICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVy
cm9yIChZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlz
aXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2Fs
bG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAg
eworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6
ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAg
ICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXltc2cgIT0geXlt
c2didWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIg
KikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1z
Z19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNnID0geXltc2di
dWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKwor
CWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZv
aWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJv
ciAoeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXllcnJvciAoWVlfKCJzeW50YXgg
ZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0
dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1
c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisK
KyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYg
YXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJP
UlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGlu
ZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9
CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBh
ZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFi
MTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9S
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0
aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5
ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8K
KyAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERv
IG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2Vy
ZWQKKyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxl
biA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlz
c3A7CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1v
biBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5
ZXJybGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBk
ZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlw
YWN0W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4g
Kz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNr
W3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJ
ICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3Ag
dGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tl
bi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5
ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7
CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZ
WV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklO
QUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlm
dCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5
c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXlu
ZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOwor
ICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7Cisg
IGdvdG8geXlyZXR1cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBt
ZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3Ig
KFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRo
cm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYm
IHl5Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGlu
ZyBsb29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCk7CisgIC8qIERvIG5vdCByZWNsYWlt
IHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhp
cyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7
CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9zWyp5eXNz
cF0sIHl5dnNwKTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVy
ZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2Vu
ZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2Vk
LiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisKKworCkluZGV4OiBBTkdM
RS9zcmMvaW50ZXJtZWRpYXRlL2dsc2xhbmdfdGFiLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2lu
dGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NCBAQAor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIFNrZWxl
dG9uIGludGVyZmFjZSBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisKKyAgIENv
cHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlv
biwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCisgICBwYXJ0IG9y
IGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29y
aworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlz
bid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBh
IG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRl
cm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAgdGhlIHBhcnNlciBz
a2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcworICAg
c3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUg
cmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNl
cHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KKwor
LyogVG9rZW5zLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5lIFlZVE9LRU5UWVBF
CisgICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RC
IGFuZCBvdGhlciBkZWJ1Z2dlcnMKKyAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCisgICBlbnVt
IHl5dG9rZW50eXBlIHsKKyAgICAgSU5WQVJJQU5UID0gMjU4LAorICAgICBISUdIX1BSRUNJU0lP
TiA9IDI1OSwKKyAgICAgTUVESVVNX1BSRUNJU0lPTiA9IDI2MCwKKyAgICAgTE9XX1BSRUNJU0lP
TiA9IDI2MSwKKyAgICAgUFJFQ0lTSU9OID0gMjYyLAorICAgICBBVFRSSUJVVEUgPSAyNjMsCisg
ICAgIENPTlNUX1FVQUwgPSAyNjQsCisgICAgIEJPT0xfVFlQRSA9IDI2NSwKKyAgICAgRkxPQVRf
VFlQRSA9IDI2NiwKKyAgICAgSU5UX1RZUEUgPSAyNjcsCisgICAgIEJSRUFLID0gMjY4LAorICAg
ICBDT05USU5VRSA9IDI2OSwKKyAgICAgRE8gPSAyNzAsCisgICAgIEVMU0UgPSAyNzEsCisgICAg
IEZPUiA9IDI3MiwKKyAgICAgSUYgPSAyNzMsCisgICAgIERJU0NBUkQgPSAyNzQsCisgICAgIFJF
VFVSTiA9IDI3NSwKKyAgICAgQlZFQzIgPSAyNzYsCisgICAgIEJWRUMzID0gMjc3LAorICAgICBC
VkVDNCA9IDI3OCwKKyAgICAgSVZFQzIgPSAyNzksCisgICAgIElWRUMzID0gMjgwLAorICAgICBJ
VkVDNCA9IDI4MSwKKyAgICAgVkVDMiA9IDI4MiwKKyAgICAgVkVDMyA9IDI4MywKKyAgICAgVkVD
NCA9IDI4NCwKKyAgICAgTUFUUklYMiA9IDI4NSwKKyAgICAgTUFUUklYMyA9IDI4NiwKKyAgICAg
TUFUUklYNCA9IDI4NywKKyAgICAgSU5fUVVBTCA9IDI4OCwKKyAgICAgT1VUX1FVQUwgPSAyODks
CisgICAgIElOT1VUX1FVQUwgPSAyOTAsCisgICAgIFVOSUZPUk0gPSAyOTEsCisgICAgIFZBUllJ
TkcgPSAyOTIsCisgICAgIFNUUlVDVCA9IDI5MywKKyAgICAgVk9JRF9UWVBFID0gMjk0LAorICAg
ICBXSElMRSA9IDI5NSwKKyAgICAgU0FNUExFUjJEID0gMjk2LAorICAgICBTQU1QTEVSQ1VCRSA9
IDI5NywKKyAgICAgSURFTlRJRklFUiA9IDI5OCwKKyAgICAgVFlQRV9OQU1FID0gMjk5LAorICAg
ICBGTE9BVENPTlNUQU5UID0gMzAwLAorICAgICBJTlRDT05TVEFOVCA9IDMwMSwKKyAgICAgQk9P
TENPTlNUQU5UID0gMzAyLAorICAgICBGSUVMRF9TRUxFQ1RJT04gPSAzMDMsCisgICAgIExFRlRf
T1AgPSAzMDQsCisgICAgIFJJR0hUX09QID0gMzA1LAorICAgICBJTkNfT1AgPSAzMDYsCisgICAg
IERFQ19PUCA9IDMwNywKKyAgICAgTEVfT1AgPSAzMDgsCisgICAgIEdFX09QID0gMzA5LAorICAg
ICBFUV9PUCA9IDMxMCwKKyAgICAgTkVfT1AgPSAzMTEsCisgICAgIEFORF9PUCA9IDMxMiwKKyAg
ICAgT1JfT1AgPSAzMTMsCisgICAgIFhPUl9PUCA9IDMxNCwKKyAgICAgTVVMX0FTU0lHTiA9IDMx
NSwKKyAgICAgRElWX0FTU0lHTiA9IDMxNiwKKyAgICAgQUREX0FTU0lHTiA9IDMxNywKKyAgICAg
TU9EX0FTU0lHTiA9IDMxOCwKKyAgICAgTEVGVF9BU1NJR04gPSAzMTksCisgICAgIFJJR0hUX0FT
U0lHTiA9IDMyMCwKKyAgICAgQU5EX0FTU0lHTiA9IDMyMSwKKyAgICAgWE9SX0FTU0lHTiA9IDMy
MiwKKyAgICAgT1JfQVNTSUdOID0gMzIzLAorICAgICBTVUJfQVNTSUdOID0gMzI0LAorICAgICBM
RUZUX1BBUkVOID0gMzI1LAorICAgICBSSUdIVF9QQVJFTiA9IDMyNiwKKyAgICAgTEVGVF9CUkFD
S0VUID0gMzI3LAorICAgICBSSUdIVF9CUkFDS0VUID0gMzI4LAorICAgICBMRUZUX0JSQUNFID0g
MzI5LAorICAgICBSSUdIVF9CUkFDRSA9IDMzMCwKKyAgICAgRE9UID0gMzMxLAorICAgICBDT01N
QSA9IDMzMiwKKyAgICAgQ09MT04gPSAzMzMsCisgICAgIEVRVUFMID0gMzM0LAorICAgICBTRU1J
Q09MT04gPSAzMzUsCisgICAgIEJBTkcgPSAzMzYsCisgICAgIERBU0ggPSAzMzcsCisgICAgIFRJ
TERFID0gMzM4LAorICAgICBQTFVTID0gMzM5LAorICAgICBTVEFSID0gMzQwLAorICAgICBTTEFT
SCA9IDM0MSwKKyAgICAgUEVSQ0VOVCA9IDM0MiwKKyAgICAgTEVGVF9BTkdMRSA9IDM0MywKKyAg
ICAgUklHSFRfQU5HTEUgPSAzNDQsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM0NSwKKyAgICAgQ0FS
RVQgPSAzNDYsCisgICAgIEFNUEVSU0FORCA9IDM0NywKKyAgICAgUVVFU1RJT04gPSAzNDgKKyAg
IH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIElOVkFSSUFOVCAyNTgKKyNkZWZp
bmUgSElHSF9QUkVDSVNJT04gMjU5CisjZGVmaW5lIE1FRElVTV9QUkVDSVNJT04gMjYwCisjZGVm
aW5lIExPV19QUkVDSVNJT04gMjYxCisjZGVmaW5lIFBSRUNJU0lPTiAyNjIKKyNkZWZpbmUgQVRU
UklCVVRFIDI2MworI2RlZmluZSBDT05TVF9RVUFMIDI2NAorI2RlZmluZSBCT09MX1RZUEUgMjY1
CisjZGVmaW5lIEZMT0FUX1RZUEUgMjY2CisjZGVmaW5lIElOVF9UWVBFIDI2NworI2RlZmluZSBC
UkVBSyAyNjgKKyNkZWZpbmUgQ09OVElOVUUgMjY5CisjZGVmaW5lIERPIDI3MAorI2RlZmluZSBF
TFNFIDI3MQorI2RlZmluZSBGT1IgMjcyCisjZGVmaW5lIElGIDI3MworI2RlZmluZSBESVNDQVJE
IDI3NAorI2RlZmluZSBSRVRVUk4gMjc1CisjZGVmaW5lIEJWRUMyIDI3NgorI2RlZmluZSBCVkVD
MyAyNzcKKyNkZWZpbmUgQlZFQzQgMjc4CisjZGVmaW5lIElWRUMyIDI3OQorI2RlZmluZSBJVkVD
MyAyODAKKyNkZWZpbmUgSVZFQzQgMjgxCisjZGVmaW5lIFZFQzIgMjgyCisjZGVmaW5lIFZFQzMg
MjgzCisjZGVmaW5lIFZFQzQgMjg0CisjZGVmaW5lIE1BVFJJWDIgMjg1CisjZGVmaW5lIE1BVFJJ
WDMgMjg2CisjZGVmaW5lIE1BVFJJWDQgMjg3CisjZGVmaW5lIElOX1FVQUwgMjg4CisjZGVmaW5l
IE9VVF9RVUFMIDI4OQorI2RlZmluZSBJTk9VVF9RVUFMIDI5MAorI2RlZmluZSBVTklGT1JNIDI5
MQorI2RlZmluZSBWQVJZSU5HIDI5MgorI2RlZmluZSBTVFJVQ1QgMjkzCisjZGVmaW5lIFZPSURf
VFlQRSAyOTQKKyNkZWZpbmUgV0hJTEUgMjk1CisjZGVmaW5lIFNBTVBMRVIyRCAyOTYKKyNkZWZp
bmUgU0FNUExFUkNVQkUgMjk3CisjZGVmaW5lIElERU5USUZJRVIgMjk4CisjZGVmaW5lIFRZUEVf
TkFNRSAyOTkKKyNkZWZpbmUgRkxPQVRDT05TVEFOVCAzMDAKKyNkZWZpbmUgSU5UQ09OU1RBTlQg
MzAxCisjZGVmaW5lIEJPT0xDT05TVEFOVCAzMDIKKyNkZWZpbmUgRklFTERfU0VMRUNUSU9OIDMw
MworI2RlZmluZSBMRUZUX09QIDMwNAorI2RlZmluZSBSSUdIVF9PUCAzMDUKKyNkZWZpbmUgSU5D
X09QIDMwNgorI2RlZmluZSBERUNfT1AgMzA3CisjZGVmaW5lIExFX09QIDMwOAorI2RlZmluZSBH
RV9PUCAzMDkKKyNkZWZpbmUgRVFfT1AgMzEwCisjZGVmaW5lIE5FX09QIDMxMQorI2RlZmluZSBB
TkRfT1AgMzEyCisjZGVmaW5lIE9SX09QIDMxMworI2RlZmluZSBYT1JfT1AgMzE0CisjZGVmaW5l
IE1VTF9BU1NJR04gMzE1CisjZGVmaW5lIERJVl9BU1NJR04gMzE2CisjZGVmaW5lIEFERF9BU1NJ
R04gMzE3CisjZGVmaW5lIE1PRF9BU1NJR04gMzE4CisjZGVmaW5lIExFRlRfQVNTSUdOIDMxOQor
I2RlZmluZSBSSUdIVF9BU1NJR04gMzIwCisjZGVmaW5lIEFORF9BU1NJR04gMzIxCisjZGVmaW5l
IFhPUl9BU1NJR04gMzIyCisjZGVmaW5lIE9SX0FTU0lHTiAzMjMKKyNkZWZpbmUgU1VCX0FTU0lH
TiAzMjQKKyNkZWZpbmUgTEVGVF9QQVJFTiAzMjUKKyNkZWZpbmUgUklHSFRfUEFSRU4gMzI2Cisj
ZGVmaW5lIExFRlRfQlJBQ0tFVCAzMjcKKyNkZWZpbmUgUklHSFRfQlJBQ0tFVCAzMjgKKyNkZWZp
bmUgTEVGVF9CUkFDRSAzMjkKKyNkZWZpbmUgUklHSFRfQlJBQ0UgMzMwCisjZGVmaW5lIERPVCAz
MzEKKyNkZWZpbmUgQ09NTUEgMzMyCisjZGVmaW5lIENPTE9OIDMzMworI2RlZmluZSBFUVVBTCAz
MzQKKyNkZWZpbmUgU0VNSUNPTE9OIDMzNQorI2RlZmluZSBCQU5HIDMzNgorI2RlZmluZSBEQVNI
IDMzNworI2RlZmluZSBUSUxERSAzMzgKKyNkZWZpbmUgUExVUyAzMzkKKyNkZWZpbmUgU1RBUiAz
NDAKKyNkZWZpbmUgU0xBU0ggMzQxCisjZGVmaW5lIFBFUkNFTlQgMzQyCisjZGVmaW5lIExFRlRf
QU5HTEUgMzQzCisjZGVmaW5lIFJJR0hUX0FOR0xFIDM0NAorI2RlZmluZSBWRVJUSUNBTF9CQVIg
MzQ1CisjZGVmaW5lIENBUkVUIDM0NgorI2RlZmluZSBBTVBFUlNBTkQgMzQ3CisjZGVmaW5lIFFV
RVNUSU9OIDM0OAorCisKKworCisjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZ
U1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYgdW5pb24gWVlTVFlQRQorCit7CisgICAgc3RydWN0
IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5lOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBUU3RyaW5nICpzdHJpbmc7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50
IGk7CisgICAgICAgICAgICBib29sIGI7CisgICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5
bWJvbDsKKyAgICB9IGxleDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7
CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVElu
dGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBh
aXI7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAg
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQ
cmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7Cisg
ICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBw
YXJhbTsKKyAgICAgICAgICAgIFRUeXBlTGluZSB0eXBlTGluZTsKKyAgICAgICAgICAgIFRUeXBl
TGlzdCogdHlwZUxpc3Q7CisgICAgICAgIH07CisgICAgfSBpbnRlcm07Cit9CisvKiBMaW5lIDE1
Mjkgb2YgeWFjYy5jLiAgKi8KKworCVlZU1RZUEU7CisjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUg
Lyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCisjIGRlZmluZSBZWVNUWVBFX0lT
X0RFQ0xBUkVEIDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKworCisK
SW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliRUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0Nv
bmZpZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBDb25maWcuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVz
Y3JpYmluZyB0aGUgZm9ybWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNl
LiBJbXBsZW1lbnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VH
TCAxLjRdIHNlY3Rpb24gMy40IHBhZ2UgMTUuCisKKyNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgi
CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBlZ2wK
K3sKK0NvbmZpZzo6Q29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWlu
SW50ZXJ2YWwsIEVHTGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1h
dCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQorICAg
IDogbURpc3BsYXlNb2RlKGRpc3BsYXlNb2RlKSwgbVJlbmRlclRhcmdldEZvcm1hdChyZW5kZXJU
YXJnZXRGb3JtYXQpLCBtRGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCksIG1N
dWx0aVNhbXBsZShtdWx0aVNhbXBsZSkKK3sKKyAgICBzZXQoZGlzcGxheU1vZGUsIG1pbkludGVy
dmFsLCBtYXhJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQs
IG11bHRpU2FtcGxlKTsKK30KKwordm9pZCBDb25maWc6OnNldERlZmF1bHRzKCkKK3sKKyAgICBt
QnVmZmVyU2l6ZSA9IDA7CisgICAgbVJlZFNpemUgPSAwOworICAgIG1HcmVlblNpemUgPSAwOwor
ICAgIG1CbHVlU2l6ZSA9IDA7CisgICAgbUx1bWluYW5jZVNpemUgPSAwOworICAgIG1BbHBoYVNp
emUgPSAwOworICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9
IEVHTF9ET05UX0NBUkU7CisgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0RPTlRfQ0FSRTsK
KyAgICBtQ29sb3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7CisgICAgbUNvbmZpZ0NhdmVh
dCA9IEVHTF9ET05UX0NBUkU7CisgICAgbUNvbmZpZ0lEID0gRUdMX0RPTlRfQ0FSRTsKKyAgICBt
Q29uZm9ybWFudCA9IDA7CisgICAgbURlcHRoU2l6ZSA9IDA7CisgICAgbUxldmVsID0gMDsKKyAg
ICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xfTk9ORTsKKyAgICBtTWF4UEJ1ZmZlcldpZHRoID0g
MDsKKyAgICBtTWF4UEJ1ZmZlckhlaWdodCA9IDA7CisgICAgbU1heFBCdWZmZXJQaXhlbHMgPSAw
OworICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBFR0xfRE9OVF9DQVJFOworICAgIG1NaW5Td2FwSW50
ZXJ2YWwgPSBFR0xfRE9OVF9DQVJFOworICAgIG1OYXRpdmVSZW5kZXJhYmxlID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtTmF0aXZlVmlzdWFsSUQgPSAwOworICAgIG1OYXRpdmVWaXN1YWxUeXBlID0g
RUdMX0RPTlRfQ0FSRTsKKyAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTX0JJVDsK
KyAgICBtU2FtcGxlQnVmZmVycyA9IDA7CisgICAgbVNhbXBsZXMgPSAwOworICAgIG1TdGVuY2ls
U2l6ZSA9IDA7CisgICAgbVN1cmZhY2VUeXBlID0gRUdMX1dJTkRPV19CSVQ7CisgICAgbVRyYW5z
cGFyZW50VHlwZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gRUdMX0RP
TlRfQ0FSRTsKKyAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKKyAg
ICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworfQorCit2b2lkIENvbmZp
Zzo6c2V0KEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVH
TGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFU
IGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQoreworICAgIHN3aXRjaCAo
cmVuZGVyVGFyZ2V0Rm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Ogor
ICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAg
IG1HcmVlblNpemUgPSA1OworICAgICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFT
aXplID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoK
KyAgICAgICAgbUJ1ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSAxMDsKKyAgICAg
ICAgbUdyZWVuU2l6ZSA9IDEwOworICAgICAgICBtQmx1ZVNpemUgPSAxMDsKKyAgICAgICAgbUFs
cGhhU2l6ZSA9IDI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
CisgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAg
ICAgbUdyZWVuU2l6ZSA9IDg7CisgICAgICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBo
YVNpemUgPSA4OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAg
ICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBt
R3JlZW5TaXplID0gNjsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6
ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAg
ICAgIG1CdWZmZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdy
ZWVuU2l6ZSA9IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUg
PSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAg
ICBtQnVmZmVyU2l6ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDg7CisgICAgICAgIG1HcmVl
blNpemUgPSA4OworICAgICAgICBtQmx1ZVNpemUgPSA4OworICAgICAgICBtQWxwaGFTaXplID0g
MDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OyAgIC8vIE90aGVyIGZvcm1hdHMgc2hvdWxkIG5vdCBiZSB2YWxpZAorICAgIH0KKworICAgIG1M
dW1pbmFuY2VTaXplID0gMDsKKyAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7CisgICAgbUJpbmRUb1Rl
eHR1cmVSR0IgPSBFR0xfRkFMU0U7CisgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdMX0ZBTFNF
OworICAgIG1Db2xvckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2
ZWF0ID0gKGRpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpID8gRUdMX05P
TkUgOiBFR0xfU0xPV19DT05GSUc7CisgICAgbUNvbmZpZ0lEID0gMDsKKyAgICBtQ29uZm9ybWFu
dCA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKKworICAgIHN3aXRjaCAoZGVwdGhTdGVuY2lsRm9ybWF0
KQorICAgIHsKKy8vICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKKy8vICAgICAgbURlcHRo
U2l6ZSA9IDE2OworLy8gICAgICBtU3RlbmNpbFNpemUgPSAwOworLy8gICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRDNERk1UX0QzMjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDMyOworICAgICAgICBt
U3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMx
OgorICAgICAgICBtRGVwdGhTaXplID0gMTU7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIG1EZXB0aFNp
emUgPSAyNDsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gODsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAgICAgICBt
U3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0
UzQ6CisgICAgICAgIG1EZXB0aFNpemUgPSAyNDsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gNDsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9EMTY6CisgICAgICAgIG1EZXB0aFNp
emUgPSAxNjsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKKyAgICAgICAgYnJlYWs7CisvLyAg
ICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMzI7Cisv
LyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworLy8gICAgY2FzZSBEM0RG
TVRfRDI0RlM4OgorLy8gICAgICBtRGVwdGhTaXplID0gMjQ7CisvLyAgICAgIG1TdGVuY2lsU2l6
ZSA9IDg7CisvLyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2ZVBpeG1hcCA9
IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1NYXhQQnVmZmVySGVp
Z2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1heFN3YXBJbnRlcnZh
bCA9IG1heEludGVydmFsOworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKKyAg
ICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9GQUxTRTsKKyAgICBtTmF0aXZlVmlzdWFsSUQgPSAw
OworICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gMDsKKyAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xf
T1BFTkdMX0VTMl9CSVQ7CisgICAgbVNhbXBsZUJ1ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEgOiAw
OworICAgIG1TYW1wbGVzID0gbXVsdGlTYW1wbGU7CisgICAgbVN1cmZhY2VUeXBlID0gRUdMX1BC
VUZGRVJfQklUIHwgRUdMX1dJTkRPV19CSVQgfCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURf
QklUOworICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKKyAgICBtVHJhbnNwYXJlbnRS
ZWRWYWx1ZSA9IDA7CisgICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CisgICAgbVRyYW5z
cGFyZW50Qmx1ZVZhbHVlID0gMDsKK30KKworRUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKEVHTENvbmZpZykoc2l6ZV90KW1Db25maWdJRDsKK30KKwor
U29ydENvbmZpZzo6U29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCisgICAgOiBt
V2FudFJlZChmYWxzZSksIG1XYW50R3JlZW4oZmFsc2UpLCBtV2FudEJsdWUoZmFsc2UpLCBtV2Fu
dEFscGhhKGZhbHNlKSwgbVdhbnRMdW1pbmFuY2UoZmFsc2UpCit7CisgICAgc2NhbkZvcldhbnRl
ZENvbXBvbmVudHMoYXR0cmliTGlzdCk7Cit9CisKK3ZvaWQgU29ydENvbmZpZzo6c2NhbkZvcldh
bnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQoreworICAgIC8vIFtFR0xd
IHNlY3Rpb24gMy40LjEgcGFnZSAyNAorICAgIC8vIFNvcnRpbmcgcnVsZSAjMzogYnkgbGFyZ2Vy
IHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBub3QgY29uc2lkZXJpbmcKKyAgICAvLyBjb21w
b25lbnRzIHRoYXQgYXJlIDAgb3IgZG9uJ3QtY2FyZS4KKyAgICBmb3IgKGNvbnN0IEVHTGludCAq
YXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJbMF0gIT0gRUdMX05PTkU7IGF0dHIgKz0gMikKKyAgICB7
CisgICAgICAgIGlmIChhdHRyWzFdICE9IDAgJiYgYXR0clsxXSAhPSBFR0xfRE9OVF9DQVJFKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0dHJbMF0pCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICBtV2FudFJlZCA9IHRydWU7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgbVdhbnRHcmVlbiA9
IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgbVdh
bnRCbHVlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6
ICAgICBtV2FudEFscGhhID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xV
TUlOQU5DRV9TSVpFOiBtV2FudEx1bWluYW5jZSA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCitFR0xpbnQgU29ydENvbmZpZzo6d2FudGVkQ29tcG9u
ZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0Cit7CisgICAgRUdMaW50IHRvdGFs
ID0gMDsKKworICAgIGlmIChtV2FudFJlZCkgICAgICAgdG90YWwgKz0gY29uZmlnLm1SZWRTaXpl
OworICAgIGlmIChtV2FudEdyZWVuKSAgICAgdG90YWwgKz0gY29uZmlnLm1HcmVlblNpemU7Cisg
ICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0b3RhbCArPSBjb25maWcubUJsdWVTaXplOworICAgIGlm
IChtV2FudEFscGhhKSAgICAgdG90YWwgKz0gY29uZmlnLm1BbHBoYVNpemU7CisgICAgaWYgKG1X
YW50THVtaW5hbmNlKSB0b3RhbCArPSBjb25maWcubUx1bWluYW5jZVNpemU7CisKKyAgICByZXR1
cm4gdG90YWw7Cit9CisKK2Jvb2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcg
KngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlzKSgqeCwgKnkp
OworfQorCitib29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25z
dCBDb25maWcgJnkpIGNvbnN0Cit7CisgICAgI2RlZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJpYnV0
ZSkgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJpYnV0
ZTsgICAgICBcCisgICAgICAgIH0KKworICAgIE1FVEFfQVNTRVJUKEVHTF9OT05FIDwgRUdMX1NM
T1dfQ09ORklHICYmIEVHTF9TTE9XX0NPTkZJRyA8IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcp
OworICAgIFNPUlQobUNvbmZpZ0NhdmVhdCk7CisKKyAgICBNRVRBX0FTU0VSVChFR0xfUkdCX0JV
RkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVGRkVSKTsKKyAgICBTT1JUKG1Db2xvckJ1ZmZlclR5cGUp
OworCisgICAgLy8gQnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5IGNv
bnNpZGVyaW5nIHRob3NlIHRoYXQgYXJlIHJlcXVlc3RlZCB0byBiZSA+IDAuCisgICAgRUdMaW50
IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHgpOworICAgIEVHTGludCB5
Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6ZSh5KTsKKyAgICBpZiAoeENvbXBv
bmVudHNTaXplICE9IHlDb21wb25lbnRzU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB4Q29t
cG9uZW50c1NpemUgPiB5Q29tcG9uZW50c1NpemU7CisgICAgfQorCisgICAgU09SVChtQnVmZmVy
U2l6ZSk7CisgICAgU09SVChtU2FtcGxlQnVmZmVycyk7CisgICAgU09SVChtU2FtcGxlcyk7Cisg
ICAgU09SVChtRGVwdGhTaXplKTsKKyAgICBTT1JUKG1TdGVuY2lsU2l6ZSk7CisgICAgU09SVCht
QWxwaGFNYXNrU2l6ZSk7CisgICAgU09SVChtTmF0aXZlVmlzdWFsVHlwZSk7CisgICAgU09SVCht
Q29uZmlnSUQpOworCisgICAgI3VuZGVmIFNPUlQKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ly8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0Q29uZmlnIHRvIGFsc28gZWxpbWluYXRlIGR1cGxpY2F0
ZSBjb25maWdzLgorLy8gVGhpcyB3b3JrcyBhcyBsb25nIGFzIHdlIG5ldmVyIGhhdmUgdHdvIGNv
bmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVyLVJHQi1jb21wb25lbnQgbGF5b3V0cywKKy8vIGJ1dCB0
aGUgc2FtZSB0b3RhbC4KKy8vIDU1NTEgYW5kIDU2NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgUitH
K0IgaXMgZGlmZmVyZW50LgorLy8gNTU1MSBhbmQgNTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBi
dWZmZXJTaXplIGlzIGRpZmZlcmVudC4KK2NvbnN0IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0QXR0
cmlic1tdID0KK3sKKyAgICBFR0xfUkVEX1NJWkUsIDEsCisgICAgRUdMX0dSRUVOX1NJWkUsIDEs
CisgICAgRUdMX0JMVUVfU0laRSwgMSwKKyAgICBFR0xfTFVNSU5BTkNFX1NJWkUsIDEsCisgICAg
Ly8gQlVUIE5PVCBBTFBIQQorICAgIEVHTF9OT05FCit9OworCitDb25maWdTZXQ6OkNvbmZpZ1Nl
dCgpCisgICAgOiBtU2V0KFNvcnRDb25maWcobVNvcnRBdHRyaWJzKSkKK3sKK30KKwordm9pZCBD
b25maWdTZXQ6OmFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJ
bnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZv
cm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlKQor
eworICAgIENvbmZpZyBjb25maWcoZGlzcGxheU1vZGUsIG1pblN3YXBJbnRlcnZhbCwgbWF4U3dh
cEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlT
YW1wbGUpOworCisgICAgbVNldC5pbnNlcnQoY29uZmlnKTsKK30KKworc2l6ZV90IENvbmZpZ1Nl
dDo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXQuc2l6ZSgpOworfQorCitib29sIENv
bmZpZ1NldDo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0
cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHZl
Y3Rvcjxjb25zdCBDb25maWcqPiBwYXNzZWQ7CisgICAgcGFzc2VkLnJlc2VydmUobVNldC5zaXpl
KCkpOworCisgICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAh
PSBtU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVl
OworICAgICAgICBjb25zdCBFR0xpbnQgKmF0dHJpYnV0ZSA9IGF0dHJpYkxpc3Q7CisKKyAgICAg
ICAgd2hpbGUgKGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChhdHRyaWJ1dGVbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQnVmZmVy
U2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUFscGhhU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1CbHVlU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tR3JlZW5TaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTog
ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVJlZFNpemUgPj0gYXR0cmlidXRlWzFd
OyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
REVQVEhfU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1EZXB0aFNpemUgPj0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX1NURU5DSUxfU0laRTogICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU3Rl
bmNpbFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bUNvbmZpZ0NhdmVhdCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1Db25maWdJRCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTGV2ZWwgPj0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVf
UkVOREVSQUJMRTogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVJlbmRlcmFibGUgPT0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfTkFUSVZFX1ZJU1VBTF9UWVBFOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1OYXRpdmVWaXN1
YWxUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
U2FtcGxlcyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bVNhbXBsZUJ1ZmZlcnMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAg
ICAgbWF0Y2ggPSAoY29uZmlnLT5tU3VyZmFjZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJp
YnV0ZVsxXTsgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZ
UEU6ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRUeXBlID09IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFO
U1BBUkVOVF9CTFVFX1ZBTFVFOiAgICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50Qmx1ZVZh
bHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFMVUU6ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3Bh
cmVudEdyZWVuVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgIG1hdGNoID0gY29uZmln
LT5tVHJhbnNwYXJlbnRSZWRWYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0IgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6
ICAgICAgbWF0Y2ggPSBjb25maWctPm1CaW5kVG9UZXh0dXJlUkdCQSA9PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lO
VEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWluU3dhcEludGVydmFsID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9N
QVhfU1dBUF9JTlRFUlZBTDogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFN3YXBJbnRlcnZh
bCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MdW1p
bmFuY2VTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tQWxwaGFNYXNrU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bUNvbG9yQnVmZmVyVHlwZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAg
ICAgICAgICAgbWF0Y2ggPSAoY29uZmlnLT5tUmVuZGVyYWJsZVR5cGUgJiBhdHRyaWJ1dGVbMV0p
ID09IGF0dHJpYnV0ZVsxXTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BVENIX05B
VElWRV9QSVhNQVA6ICAgICAgIG1hdGNoID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVH
TF9DT05GT1JNQU5UOiAgICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1Db25mb3JtYW50
ICYgYXR0cmlidXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07ICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF0dHJpYnV0ZSArPSAyOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBw
YXNzZWQucHVzaF9iYWNrKCYqY29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChj
b25maWdzKQorICAgIHsKKyAgICAgICAgc29ydChwYXNzZWQuYmVnaW4oKSwgcGFzc2VkLmVuZCgp
LCBTb3J0Q29uZmlnKGF0dHJpYkxpc3QpKTsKKworICAgICAgICBFR0xpbnQgaW5kZXg7CisgICAg
ICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvbmZpZ1NpemUgJiYgaW5kZXggPCBzdGF0aWNf
Y2FzdDxFR0xpbnQ+KHBhc3NlZC5zaXplKCkpOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25maWdzW2luZGV4XSA9IHBhc3NlZFtpbmRleF0tPmdldEhhbmRsZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgKm51bUNvbmZpZyA9IGluZGV4OworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAqbnVtQ29uZmlnID0gcGFzc2VkLnNpemUoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworY29uc3QgZWdsOjpDb25maWcgKkNvbmZpZ1NldDo6Z2V0KEVHTENvbmZp
ZyBjb25maWdIYW5kbGUpCit7CisgICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2lu
KCk7IGNvbmZpZyAhPSBtU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICB7CisgICAgICAgIGlmIChj
b25maWctPmdldEhhbmRsZSgpID09IGNvbmZpZ0hhbmRsZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICYoKmNvbmZpZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVM
TDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJF
R0wvQ29uZmlnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBDb25maWcuaDogRGVmaW5lcyB0aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2Ny
aWJpbmcgdGhlIGZvcm1hdCwgdHlwZQorLy8gYW5kIHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4g
SW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtFR0wg
MS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1LgorCisjaWZuZGVmIElOQ0xVREVfQ09ORklHX0hfCisj
ZGVmaW5lIElOQ0xVREVfQ09ORklHX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdM
L2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7
CisKK2NsYXNzIENvbmZpZworeworICBwdWJsaWM6CisgICAgQ29uZmlnKEQzRERJU1BMQVlNT0RF
IGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVy
dmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2ls
Rm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpOworCisgICAgdm9pZCBzZXREZWZhdWx0cygpOwor
ICAgIHZvaWQgc2V0KEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcElu
dGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9y
bWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpOwor
ICAgIEVHTENvbmZpZyBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIGNvbnN0IEQzRERJU1BMQVlN
T0RFIG1EaXNwbGF5TW9kZTsKKyAgICBjb25zdCBEM0RGT1JNQVQgbVJlbmRlclRhcmdldEZvcm1h
dDsKKyAgICBjb25zdCBEM0RGT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBjb25zdCBF
R0xpbnQgbU11bHRpU2FtcGxlOworCisgICAgRUdMaW50IG1CdWZmZXJTaXplOyAgICAgICAgICAg
ICAgLy8gRGVwdGggb2YgdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtUmVkU2l6ZTsgICAg
ICAgICAgICAgICAgIC8vIEJpdHMgb2YgUmVkIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xp
bnQgbUdyZWVuU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEdyZWVuIGluIHRoZSBjb2xv
ciBidWZmZXIKKyAgICBFR0xpbnQgbUJsdWVTaXplOyAgICAgICAgICAgICAgICAvLyBCaXRzIG9m
IEJsdWUgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtTHVtaW5hbmNlU2l6ZTsgICAg
ICAgICAgIC8vIEJpdHMgb2YgTHVtaW5hbmNlIGluIHRoZSBjb2xvciBidWZmZXIKKyAgICBFR0xp
bnQgbUFscGhhU2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIGluIHRoZSBjb2xv
ciBidWZmZXIKKyAgICBFR0xpbnQgbUFscGhhTWFza1NpemU7ICAgICAgICAgICAvLyBCaXRzIG9m
IEFscGhhIE1hc2sgaW4gdGhlIG1hc2sgYnVmZmVyCisgICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4
dHVyZVJHQjsgICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0IgdGV4dHVyZXMuCisgICAgRUdM
Qm9vbGVhbiBtQmluZFRvVGV4dHVyZVJHQkE7ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0JB
IHRleHR1cmVzLgorICAgIEVHTGVudW0gbUNvbG9yQnVmZmVyVHlwZTsgICAgICAgIC8vIENvbG9y
IGJ1ZmZlciB0eXBlCisgICAgRUdMZW51bSBtQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgLy8gQW55
IGNhdmVhdHMgZm9yIHRoZSBjb25maWd1cmF0aW9uCisgICAgRUdMaW50IG1Db25maWdJRDsgICAg
ICAgICAgICAgICAgLy8gVW5pcXVlIEVHTENvbmZpZyBpZGVudGlmaWVyCisgICAgRUdMaW50IG1D
b25mb3JtYW50OyAgICAgICAgICAgICAgLy8gV2hldGhlciBjb250ZXh0cyBjcmVhdGVkIHdpdGgg
dGhpcyBjb25maWcgYXJlIGNvbmZvcm1hbnQKKyAgICBFR0xpbnQgbURlcHRoU2l6ZTsgICAgICAg
ICAgICAgICAvLyBCaXRzIG9mIFogaW4gdGhlIGRlcHRoIGJ1ZmZlcgorICAgIEVHTGludCBtTGV2
ZWw7ICAgICAgICAgICAgICAgICAgIC8vIEZyYW1lIGJ1ZmZlciBsZXZlbAorICAgIEVHTEJvb2xl
YW4gbU1hdGNoTmF0aXZlUGl4bWFwOyAgIC8vIE1hdGNoIHRoZSBuYXRpdmUgcGl4bWFwIGZvcm1h
dAorICAgIEVHTGludCBtTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgIC8vIE1heGltdW0gd2lkdGgg
b2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlckhlaWdodDsgICAgICAgIC8vIE1heGlt
dW0gaGVpZ2h0IG9mIHBidWZmZXIKKyAgICBFR0xpbnQgbU1heFBCdWZmZXJQaXhlbHM7ICAgICAg
ICAvLyBNYXhpbXVtIHNpemUgb2YgcGJ1ZmZlcgorICAgIEVHTGludCBtTWF4U3dhcEludGVydmFs
OyAgICAgICAgIC8vIE1heGltdW0gc3dhcCBpbnRlcnZhbAorICAgIEVHTGludCBtTWluU3dhcElu
dGVydmFsOyAgICAgICAgIC8vIE1pbmltdW0gc3dhcCBpbnRlcnZhbAorICAgIEVHTEJvb2xlYW4g
bU5hdGl2ZVJlbmRlcmFibGU7ICAgIC8vIEVHTF9UUlVFIGlmIG5hdGl2ZSByZW5kZXJpbmcgQVBJ
cyBjYW4gcmVuZGVyIHRvIHN1cmZhY2UKKyAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbElEOyAgICAg
ICAgICAvLyBIYW5kbGUgb2YgY29ycmVzcG9uZGluZyBuYXRpdmUgdmlzdWFsCisgICAgRUdMaW50
IG1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICAgLy8gTmF0aXZlIHZpc3VhbCB0eXBlIG9mIHRoZSBh
c3NvY2lhdGVkIHZpc3VhbAorICAgIEVHTGludCBtUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgIC8v
IFdoaWNoIGNsaWVudCByZW5kZXJpbmcgQVBJcyBhcmUgc3VwcG9ydGVkLgorICAgIEVHTGludCBt
U2FtcGxlQnVmZmVyczsgICAgICAgICAgIC8vIE51bWJlciBvZiBtdWx0aXNhbXBsZSBidWZmZXJz
CisgICAgRUdMaW50IG1TYW1wbGVzOyAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNhbXBs
ZXMgcGVyIHBpeGVsCisgICAgRUdMaW50IG1TdGVuY2lsU2l6ZTsgICAgICAgICAgICAgLy8gQml0
cyBvZiBTdGVuY2lsIGluIHRoZSBzdGVuY2lsIGJ1ZmZlcgorICAgIEVHTGludCBtU3VyZmFjZVR5
cGU7ICAgICAgICAgICAgIC8vIFdoaWNoIHR5cGVzIG9mIEVHTCBzdXJmYWNlcyBhcmUgc3VwcG9y
dGVkLgorICAgIEVHTGVudW0gbVRyYW5zcGFyZW50VHlwZTsgICAgICAgIC8vIFR5cGUgb2YgdHJh
bnNwYXJlbmN5IHN1cHBvcnRlZAorICAgIEVHTGludCBtVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAg
IC8vIFRyYW5zcGFyZW50IHJlZCB2YWx1ZQorICAgIEVHTGludCBtVHJhbnNwYXJlbnRHcmVlblZh
bHVlOyAgIC8vIFRyYW5zcGFyZW50IGdyZWVuIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVu
dEJsdWVWYWx1ZTsgICAgLy8gVHJhbnNwYXJlbnQgYmx1ZSB2YWx1ZQorfTsKKworLy8gRnVuY3Rp
b24gb2JqZWN0IHVzZWQgYnkgU1RMIHNvcnRpbmcgcm91dGluZXMgZm9yIG9yZGVyaW5nIENvbmZp
Z3MgYWNjb3JkaW5nIHRvIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNC4KK2NsYXNzIFNvcnRD
b25maWcKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFNvcnRDb25maWcoY29uc3QgRUdMaW50
ICphdHRyaWJMaXN0KTsKKworICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNv
bnN0IENvbmZpZyAqeSkgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAm
eCwgY29uc3QgQ29uZmlnICZ5KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHZvaWQgc2NhbkZv
cldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKKyAgICBFR0xpbnQg
d2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0OworCisgICAg
Ym9vbCBtV2FudFJlZDsKKyAgICBib29sIG1XYW50R3JlZW47CisgICAgYm9vbCBtV2FudEJsdWU7
CisgICAgYm9vbCBtV2FudEFscGhhOworICAgIGJvb2wgbVdhbnRMdW1pbmFuY2U7Cit9OworCitj
bGFzcyBDb25maWdTZXQKK3sKKyAgICBmcmllbmQgRGlzcGxheTsKKworICBwdWJsaWM6CisgICAg
Q29uZmlnU2V0KCk7CisKKyAgICB2b2lkIGFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwg
RUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFU
IHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50
IG11bHRpU2FtcGxlKTsKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgZ2V0Q29u
ZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50
IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAq
Z2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKENvbmZpZ1NldCk7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PENvbmZp
ZywgU29ydENvbmZpZz4gU2V0OworICAgIHR5cGVkZWYgU2V0OjppdGVyYXRvciBJdGVyYXRvcjsK
KyAgICBTZXQgbVNldDsKKworICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgbVNvcnRBdHRyaWJzW107
Cit9OworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3Bs
YXkuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkRpc3BsYXkgY2xhc3MsIHJlcHJlc2VudGluZyB0
aGUgYWJzdHJhY3QKKy8vIGRpc3BsYXkgb24gd2hpY2ggZ3JhcGhpY3MgYXJlIGRyYXduLiBJbXBs
ZW1lbnRzIEVHTERpc3BsYXkuCisvLyBbRUdMIDEuNF0gc2VjdGlvbiAyLjEuMiBwYWdlIDMuCisK
KyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAi
bGliRUdML21haW4uaCIKKworI2RlZmluZSBSRUZfUkFTVCAwICAgLy8gQ2FuIGFsc28gYmUgZW5h
YmxlZCBieSBkZWZpbmluZyBGT1JDRV9SRUZfUkFTVCBpbiB0aGUgcHJvamVjdCdzIHByZWRlZmlu
ZWQgbWFjcm9zCisKK25hbWVzcGFjZSBlZ2wKK3sKK0Rpc3BsYXk6OkRpc3BsYXkoSERDIGRldmlj
ZUNvbnRleHQpIDogbURjKGRldmljZUNvbnRleHQpCit7CisgICAgbUQzZDkgPSBOVUxMOworICAg
IG1EZXZpY2UgPSBOVUxMOworCisgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CisK
KyAgICAjaWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQorICAgICAg
ICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOworICAgICNlbHNlCisgICAgICAgIG1EZXZp
Y2VUeXBlID0gRDNEREVWVFlQRV9IQUw7CisgICAgI2VuZGlmCisKKyAgICBtTWluU3dhcEludGVy
dmFsID0gMTsKKyAgICBtTWF4U3dhcEludGVydmFsID0gMTsKKyAgICBzZXRTd2FwSW50ZXJ2YWwo
MSk7Cit9CisKK0Rpc3BsYXk6On5EaXNwbGF5KCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsKK30KKwor
Ym9vbCBEaXNwbGF5Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbUQzZDkgPSBEaXJlY3Qz
RENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKKworICAgIGlmIChtRDNkOSkKKyAgICB7CisgICAg
ICAgIGlmIChtRGMgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAvLyAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNl
IGNvbnRleHQgY29ycmVzcG9uZHMgdG8KKyAgICAgICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUQzZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmlj
ZUNhcHMpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbUQzZDktPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1EM2Q5
ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1NaW5Td2FwSW50ZXJ2YWwgPSA0OworICAgICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7
CisKKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBE
M0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1p
bihtTWluU3dhcEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhT
d2FwSW50ZXJ2YWwsIDApO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRp
b25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkgICAgICAge21NaW5Td2FwSW50
ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAxKTsgbU1heFN3YXBJbnRlcnZhbCA9
IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDEpO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNl
Q2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAg
ICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1h
eFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KKyAgICAgICAg
ICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RIUkVFKSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcElu
dGVydmFsLCAzKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWws
IDMpO30KKyAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1N
YXhTd2FwSW50ZXJ2YWwsIDQpO30KKworICAgICAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRl
clRhcmdldEZvcm1hdHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNERk1U
X0ExUjVHNUI1LAorICAgICAgICAgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUg
Y29sb3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVE
X0JZVEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3Vy
IHZhbHVlLgorICAgICAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKKyAgICAgICAgICAgICAg
ICBEM0RGTVRfUjVHNkI1LAorICAgICAgICAgICAgICAgIEQzREZNVF9YMVI1RzVCNSwKKyAgICAg
ICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGNvbnN0IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCisgICAgICAgICAgICAgICAgRDNE
Rk1UX0QzMiwKKyAgICAgICAgICAgIC8vICBEM0RGTVRfRDE1UzEsCisgICAgICAgICAgICAgICAg
RDNERk1UX0QyNFM4LAorICAgICAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAgICAgICAg
IC8vICBEM0RGTVRfRDI0WDRTNCwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDE2LAorICAgICAg
ICAgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgICAgICAgICAgLy8gIEQzREZNVF9E
MjRGUzgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJl
bnREaXNwbGF5TW9kZTsKKyAgICAgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUo
bUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOworCisgICAgICAgICAgICBDb25maWdTZXQg
Y29uZmlnU2V0OworCisgICAgICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1h
dEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7
IGZvcm1hdEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNERk9STUFU
IHJlbmRlclRhcmdldEZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOwor
CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3Jt
YXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RV
U0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7
IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9m
KEQzREZPUk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBk
ZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhT
VEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9y
bWF0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBFbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25maWdTZXQuYWRkKGN1cnJlbnREaXNwbGF5TW9kZSwg
bU1pblN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBk
ZXB0aFN0ZW5jaWxGb3JtYXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVk
IGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICAg
ICAgRUdMaW50IGluZGV4ID0gMTsKKyAgICAgICAgICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRv
ciBjb25maWcgPSBjb25maWdTZXQubVNldC5iZWdpbigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1T
ZXQuZW5kKCk7IGNvbmZpZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmZp
ZyBjb25maWd1cmF0aW9uID0gKmNvbmZpZzsKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9u
Lm1Db25maWdJRCA9IGluZGV4OworICAgICAgICAgICAgICAgIGluZGV4Kys7CisKKyAgICAgICAg
ICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAg
eworICAgICAgICB0ZXJtaW5hdGUoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKK3sKKyAg
ICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigp
OyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAg
ICBkZWxldGUgKnN1cmZhY2U7CisgICAgfQorCisgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRv
ciBjb250ZXh0ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4dFNldC5l
bmQoKTsgY29udGV4dCsrKQorICAgIHsKKyAgICAgICAgZ2xEZXN0cm95Q29udGV4dCgqY29udGV4
dCk7CisgICAgfQorCisgICAgaWYgKG1EZXZpY2UpCisgICAgeworICAgICAgICBtRGV2aWNlLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1EZXZpY2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRDNk
OSkKKyAgICB7CisgICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5ID0gTlVM
TDsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheTo6c3RhcnRTY2VuZSgpCit7CisgICAgaWYgKCFt
U2NlbmVTdGFydGVkKQorICAgIHsKKyAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdp
blNjZW5lKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIG1T
Y2VuZVN0YXJ0ZWQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBEaXNwbGF5OjplbmRTY2VuZSgp
Cit7CisgICAgaWYgKG1TY2VuZVN0YXJ0ZWQpCisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9
IG1EZXZpY2UtPkVuZFNjZW5lKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxh
eTo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlz
dCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQoreworICAgIHJldHVybiBt
Q29uZmlnU2V0LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnU2l6ZSwgbnVt
Q29uZmlnKTsKK30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNv
bmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7CisKKyAgICBz
d2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICB7CisgICAgICBjYXNlIEVHTF9CVUZGRVJfU0laRTogICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQnVmZmVyU2l6ZTsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tQmx1ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9HUkVF
Tl9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tR3JlZW5TaXpl
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVkU2l6ZTsgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVHTF9TVEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tU3RlbmNpbFNpemU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05GSUdf
Q0FWRUFUOiAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0
OyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnSUQ7ICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVHTF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
TmF0aXZlUmVuZGVyYWJsZTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9OQVRJVkVfVklT
VUFMX1RZUEU6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlVmlzdWFsVHlw
ZTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9TQU1QTEVTOiAgICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVH
TF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3Vy
ZmFjZVR5cGU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9U
WVBFOiAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRUeXBlOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFOiAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9U
UkFOU1BBUkVOVF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNw
YXJlbnRSZWRWYWx1ZTsgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVf
UkdCOiAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQjsgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkE7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTWluU3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NQVhf
U1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4U3dhcElu
dGVydmFsOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVtaW5hbmNlU2l6ZTsgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJWkU6ICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9SRU5ERVJB
QkxFX1RZUEU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVuZGVyYWJsZVR5
cGU7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQOiAg
ICAgICAqdmFsdWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1N1cmZhY2UgKkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVH
TENvbmZpZyBjb25maWcpCit7CisgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNv
bmZpZ1NldC5nZXQoY29uZmlnKTsKKworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IHswfTsKKworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5j
aWxGb3JtYXQgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Cisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMDsKKyAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFi
bGVBdXRvRGVwdGhTdGVuY2lsID0gY29uZmlndXJhdGlvbi0+bURlcHRoU2l6ZSA/IFRSVUUgOiBG
QUxTRTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuaERldmljZVdpbmRvdyA9IHdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0
aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxlbWVu
dGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1Q
TEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgIHByZXNlbnRQYXJhbWV0ZXJz
LlByZXNlbnRhdGlvbkludGVydmFsID0gY29udmVydEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwp
OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisKKyAg
ICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4gPSBOVUxMOworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsKKworICAgIGlmICghbURldmljZSkK
KyAgICB7CisgICAgICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNF
UlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hBTkdFUzsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCB3aW5kb3csIGJl
aGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENS
RUFURV9QVVJFREVWSUNFLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKworICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVh
dGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBE
M0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAm
bURldmljZSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICBpZiAobURldmljZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWlu
KDAsICZzd2FwQ2hhaW4pOworICAgICAgICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3Vy
ZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgaWYgKCFtU3VyZmFjZVNldC5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBpZiB0aGUgZGV2aWNlIGFscmVhZHkgZXhpc3RzLCBhbmQgdGhlcmUgYXJlIG90
aGVyIHN1cmZhY2VzL3dpbmRvd3MgY3VycmVudGx5IGluIHVzZSwgd2UgbmVlZCB0byBjcmVhdGUK
KyAgICAgICAgICAgIC8vIGEgc2VwYXJhdGUgc3dhcCBjaGFpbiBmb3IgdGhlIG5ldyBkcmF3IHN1
cmZhY2UuCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUFkZGl0
aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmc3dhcENoYWluKTsKKworICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxk
IG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucy4gT3V0IG9mIG1lbW9yeS4iKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSop
TlVMTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4gZG9lcyBu
b3QgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIGRlcHRoc3RlbmNpbCBzdXJmYWNlLCB1bmxpa2Ug
CisgICAgICAgICAgICAvLyBDcmVhdGVEZXZpY2UsIHNvIHdlIG11c3QgZG8gc28gZXhwbGljaXRs
eS4KKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZh
Y2UocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVySGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0
LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZkZXB0aFN0ZW5jaWxTdXJmYWNlLCBOVUxMKTsKKwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
ZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluLiBPdXQgb2YgbWVtb3J5LiIp
OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJm
YWNlKilOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3Vy
ZmFjZXMgaW4gdXNlLCB0aGVuIGFsbCB0aGUgc3VyZmFjZXMvd2luZG93cworICAgICAgICAgICAg
Ly8gaGF2ZSBiZWVuIGRlc3Ryb3llZCwgYW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdp
bmFsbHkgY3JlYXRlZCBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IKKyAgICAgICAgICAgIC8vIHVz
ZSB3aXRoIHRoZSBuZXcgc3VyZmFjZSB3ZSBhcmUgY3JlYXRpbmcuCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgcmVzZXQgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMgZm9yIGRldmljZS4gT3V0IG9mIG1l
bW9yeS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVn
bDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBDaGFpbik7CisgICAgICAgICAgICAg
ICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFjZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdXJmYWNlICpzdXJmYWNl
ID0gTlVMTDsKKworICAgIGlmIChzd2FwQ2hhaW4pCisgICAgeworICAgICAgICBzdXJmYWNlID0g
bmV3IFN1cmZhY2UodGhpcywgc3dhcENoYWluLCBkZXB0aFN0ZW5jaWxTdXJmYWNlLCBjb25maWd1
cmF0aW9uKTsKKyAgICAgICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2UpOworCisgICAgICAg
IHN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiBzdXJmYWNlOworfQor
CitFR0xDb250ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRs
ZSkKK3sKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29u
ZmlnSGFuZGxlKTsKKworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0
KGNvbmZpZyk7CisgICAgbUNvbnRleHRTZXQuaW5zZXJ0KGNvbnRleHQpOworCisgICAgcmV0dXJu
IGNvbnRleHQ7Cit9CisKK3ZvaWQgRGlzcGxheTo6ZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKQoreworICAgIGRlbGV0ZSBzdXJmYWNlOworICAgIG1TdXJmYWNlU2V0LmVyYXNl
KHN1cmZhY2UpOworfQorCit2b2lkIERpc3BsYXk6OmRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0
ICpjb250ZXh0KQoreworICAgIGdsRGVzdHJveUNvbnRleHQoY29udGV4dCk7CisgICAgbUNvbnRl
eHRTZXQuZXJhc2UoY29udGV4dCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNJbml0aWFsaXplZCgp
Cit7CisgICAgcmV0dXJuIG1EM2Q5ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOwor
fQorCitib29sIERpc3BsYXk6OmlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykKK3sKKyAg
ICByZXR1cm4gbUNvbmZpZ1NldC5nZXQoY29uZmlnKSAhPSBOVUxMOworfQorCitib29sIERpc3Bs
YXk6OmlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBt
Q29udGV4dFNldC5maW5kKGNvbnRleHQpICE9IG1Db250ZXh0U2V0LmVuZCgpOworfQorCitib29s
IERpc3BsYXk6OmlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBy
ZXR1cm4gbVN1cmZhY2VTZXQuZmluZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKK30K
KworYm9vbCBEaXNwbGF5OjpoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCit7
CisgICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVn
aW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCgqc3VyZmFjZSktPmdldFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRGlzcGxheTo6c2V0U3dhcEludGVydmFsKEdMaW50IGlu
dGVydmFsKQoreworICAgIG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBtU3dhcEludGVy
dmFsID0gc3RkOjptYXgobVN3YXBJbnRlcnZhbCwgbU1pblN3YXBJbnRlcnZhbCk7CisgICAgbVN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwpOwor
CisgICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsK
K30KKworRFdPUkQgRGlzcGxheTo6Z2V0UHJlc2VudEludGVydmFsKCkKK3sKKyAgICByZXR1cm4g
bVByZXNlbnRJbnRlcnZhbDsKK30KKworRFdPUkQgRGlzcGxheTo6Y29udmVydEludGVydmFsKEdM
aW50IGludGVydmFsKQoreworICAgIHN3aXRjaChpbnRlcnZhbCkKKyAgICB7CisgICAgICBjYXNl
IDA6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTog
cmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9UV087CisgICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RIUkVFOworICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9G
T1VSOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOworfQorCitJRGlyZWN0M0REZXZpY2U5ICpEaXNw
bGF5OjpnZXREZXZpY2UoKQoreworICAgIHJldHVybiBtRGV2aWNlOworfQorCitEM0RDQVBTOSBE
aXNwbGF5OjpnZXREZXZpY2VDYXBzKCkKK3sKKyAgICByZXR1cm4gbURldmljZUNhcHM7Cit9Cit9
CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBEaXNwbGF5Lmg6IERlZmluZXMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50
aW5nIHRoZSBhYnN0cmFjdAorLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24u
IEltcGxlbWVudHMgRUdMRGlzcGxheS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2Ug
My4KKworI2lmbmRlZiBJTkNMVURFX0RJU1BMQVlfSF8KKyNkZWZpbmUgSU5DTFVERV9ESVNQTEFZ
X0hfCisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FO
RF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgor
CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2lu
Y2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKyNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorCitu
YW1lc3BhY2UgZWdsCit7CitjbGFzcyBEaXNwbGF5Cit7CisgIHB1YmxpYzoKKyAgICBEaXNwbGF5
KEhEQyBkZXZpY2VDb250ZXh0KTsKKworICAgIH5EaXNwbGF5KCk7CisKKyAgICBib29sIGluaXRp
YWxpemUoKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
U2NlbmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NlbmUoKTsKKworICAgIGJvb2wgZ2V0Q29u
ZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50
IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKKyAgICBib29sIGdldENvbmZpZ0F0dHJp
YihFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKwor
ICAgIGVnbDo6U3VyZmFjZSAqY3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29u
ZmlnIGNvbmZpZyk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25m
aWdIYW5kbGUpOworCisgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpOworICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOworCisg
ICAgYm9vbCBpc0luaXRpYWxpemVkKCk7CisgICAgYm9vbCBpc1ZhbGlkQ29uZmlnKEVHTENvbmZp
ZyBjb25maWcpOworICAgIGJvb2wgaXNWYWxpZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQp
OworICAgIGJvb2wgaXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKyAgICBi
b29sIGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdyk7CisKKyAgICB2b2lkIHNl
dFN3YXBJbnRlcnZhbChHTGludCBpbnRlcnZhbCk7CisgICAgRFdPUkQgZ2V0UHJlc2VudEludGVy
dmFsKCk7CisgICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChHTGludCBpbnRlcnZhbCk7
CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOworICAgIHZpcnR1
YWwgRDNEQ0FQUzkgZ2V0RGV2aWNlQ2FwcygpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKERpc3BsYXkpOworICAgIGNvbnN0IEhEQyBtRGM7CisKKyAgICBVSU5U
IG1BZGFwdGVyOworICAgIEQzRERFVlRZUEUgbURldmljZVR5cGU7CisgICAgSURpcmVjdDNEOSAq
bUQzZDk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKKyAgICBEM0RDQVBTOSBtRGV2
aWNlQ2FwczsKKworICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKKyAgICBHTGludCBtU3dhcEludGVy
dmFsOworICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOworICAgIEVHTGludCBtTWluU3dhcElu
dGVydmFsOworICAgIERXT1JEIG1QcmVzZW50SW50ZXJ2YWw7CisKKyAgICB0eXBlZGVmIHN0ZDo6
c2V0PFN1cmZhY2UqPiBTdXJmYWNlU2V0OworICAgIFN1cmZhY2VTZXQgbVN1cmZhY2VTZXQ7CisK
KyAgICBDb25maWdTZXQgbUNvbmZpZ1NldDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Z2w6OkNv
bnRleHQqPiBDb250ZXh0U2V0OworICAgIENvbnRleHRTZXQgbUNvbnRleHRTZXQ7Cit9OworfQor
CisjZW5kaWYgICAvLyBJTkNMVURFX0RJU1BMQVlfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wv
U3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzAxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmNwcDog
SW1wbGVtZW50cyB0aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5n
IHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRp
bmcgYW55IGJhY2sgYnVmZmVycy4KKy8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRl
ZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaW5jbHVk
ZSAibGliRUdML1N1cmZhY2UuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5j
bHVkZSAibGliRUdML21haW4uaCIKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCituYW1l
c3BhY2UgZWdsCit7CitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwg
Y29uc3QgQ29uZmlnICpjb25maWcpIAorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hh
aW4oc3dhcENoYWluKSwgbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZp
ZykKK3sKKyAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7
CisgICAgbUZsaXBUZXh0dXJlID0gTlVMTDsKKyAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICBt
UHJlRmxpcFN0YXRlID0gTlVMTDsKKworICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCko
MS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwg
cGl4ZWwgYXNwZWN0IHJhdGlvCisgICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsK
KyAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7CisKKyAgICBpZiAobVN3
YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPkFkZFJlZigpOworICAgICAgICBt
U3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJh
Y2tCdWZmZXIpOworCisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgbUJhY2tCdWZmZXItPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBtV2lkdGgg
PSBkZXNjcmlwdGlvbi5XaWR0aDsKKyAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdo
dDsKKworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZp
Y2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdl
dChtV2lkdGgsIG1IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgZGVzY3JpcHRpb24uTXVsdGlT
YW1wbGVUeXBlLCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbVJlbmRl
clRhcmdldCwgTlVMTCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZXJyb3IoRUdMX0JBRF9BTExPQyk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1XaWR0aCwgbUhlaWdodCwgMSwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1GbGlwVGV4
dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgZXJyb3IoRUdMX0JBRF9BTExP
Qyk7CisKKyAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitTdXJmYWNlOjp+U3VyZmFjZSgpCit7
CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgeworICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgfQorCisgICAgaWYgKG1CYWNrQnVmZmVyKQorICAgIHsKKyAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobURl
cHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICBpZiAobUZsaXBUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbUZsaXBUZXh0dXJl
LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1GbGlwU3RhdGUpCisgICAgeworICAgICAg
ICBtRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlwU3RhdGUp
CisgICAgeworICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitI
V05EIFN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisg
ICAgeworICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7Cisg
ICAgICAgIG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVy
cyk7CisKKyAgICAgICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3c7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRh
YmxlRmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkg
KnNvdXJjZSkKK3sKKyAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Cisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFM
U0UpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQz
RENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRl
cihOVUxMKTsKKworICAgIC8vIEp1c3Qgc2FtcGxlIHRoZSB0ZXh0dXJlCisgICAgZGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEp
OworICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwg
RDNEVEFfVEVYVFVSRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RU
U1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBz
b3VyY2UpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVS
LCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOworICAgIGRldmljZS0+U2V0RlZGKEQzREZW
Rl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CisKKyAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZy
ZXEoMCwgMSk7IC8vIERyYXdQcmltaXRpdmVVUCBvbmx5IGNhcmVzIGFib3V0IHN0cmVhbSAwLCBu
b3QgdGhlIHJlc3QuCit9CisKK3ZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQoreworICAgIEhSRVNV
TFQgaHI7CisKKyAgICBpZiAobUZsaXBTdGF0ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8g
Q3JlYXRlIHR3byBzdGF0ZSBibG9ja3MgYm90aCByZWNvcmRpbmcgdGhlIHN0YXRlcyB0aGF0IGFy
ZSBjaGFuZ2VkIHdoZW4gc3dhcHBpbmcuCisKKyAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxs
IHJlY29yZCB0aGUgb3JpZ2luYWwgc3RhdGUgZWFjaCBlbnRyeS4KKyAgICAgICAgaHIgPSBkZXZp
Y2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAg
IGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtUHJlRmxpcFN0YXRlKTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1QcmVGbGlwU3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIG1GbGlwU3RhdGUgd2lsbCByZWNvcmQgdGhlIHN0YXRlIGZvciB0aGUgc3dhcCBv
cGVyYXRpb24uCisgICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKKyAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBT
dGF0ZShkZXZpY2UsIHNvdXJjZSk7CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxv
Y2soJm1GbGlwU3RhdGUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUZsaXBTdGF0ZSA9IE5V
TEw7CisgICAgICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBt
UHJlRmxpcFN0YXRlID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBociA9IG1QcmVGbGlwU3RhdGUtPkNhcHR1cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgICAgICBociA9IG1GbGlwU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIEFT
U0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdl
dCgwLCAmbVByZUZsaXBCYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1
cmZhY2UoJm1QcmVGbGlwRGVwdGhTdGVuY2lsKTsKKworICAgIGRldmljZS0+U2V0UmVuZGVyVGFy
Z2V0KDAsIG1CYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2Uo
TlVMTCk7Cit9CisKK3ZvaWQgU3VyZmFjZTo6cmVzdG9yZVN0YXRlKElEaXJlY3QzRERldmljZTkg
KmRldmljZSkKK3sKKyAgICBtUHJlRmxpcFN0YXRlLT5BcHBseSgpOworCisgICAgZGV2aWNlLT5T
ZXRSZW5kZXJUYXJnZXQoMCwgbVByZUZsaXBCYWNrQnVmZmVyKTsKKyAgICBkZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UobVByZUZsaXBEZXB0aFN0ZW5jaWwpOworCisgICAgaWYgKG1QcmVG
bGlwQmFja0J1ZmZlcikKKyAgICB7CisgICAgICAgIG1QcmVGbGlwQmFja0J1ZmZlci0+UmVsZWFz
ZSgpOworICAgICAgICBtUHJlRmxpcEJhY2tCdWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIGlm
IChtUHJlRmxpcERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1QcmVGbGlwRGVwdGhTdGVu
Y2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1QcmVGbGlwRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAg
ICB9Cit9CisKK2Jvb2wgU3VyZmFjZTo6c3dhcCgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisg
ICAgeworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2
aWNlKCk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAg
ICAgICBtRmxpcFRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwor
CisgICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPlN0cmV0Y2hS
ZWN0KG1SZW5kZXJUYXJnZXQsIE5VTEwsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05P
TkUpOworCisgICAgICAgIGFwcGx5RmxpcFN0YXRlKGRldmljZSwgbUZsaXBUZXh0dXJlKTsKKwor
ICAgICAgICAvLyBSZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBi
dWZmZXIKKyAgICAgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAg
MCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHttV2lkdGggLSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMS4wZiwg
MS4wZn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWln
aHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYs
IDAuMGZ9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKworICAgICAgICBtRGlzcGxheS0+c3Rh
cnRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdM
RUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOworCisgICAgICAgIHRleHR1cmVTdXJm
YWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgcmVzdG9yZVN0YXRlKGRldmljZSk7CisKKyAgICAg
ICAgbURpc3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBD
aGFpbi0+UHJlc2VudChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBtRGlzcGxheS0+Z2V0UHJlc2Vu
dEludGVydmFsKCkpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklW
RVJJTlRFUk5BTEVSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfREVWSUNFTE9TVCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9DT05URVhUX0xPU1QsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VHTGludCBT
dXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworRUdM
aW50IFN1cmZhY2U6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9
CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVm
KCk7CisgICAgfQorCisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Cit9CisKK0lEaXJlY3QzRFN1
cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTdXJmYWNlLmg6IERlZmluZXMgdGhl
IGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCisvLyBz
dWNoIGFzIHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1
ZmZlcnMuCisvLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KKworI2lmbmRlZiBJTkNMVURFX1NVUkZB
Q0VfSF8KKyNkZWZpbmUgSU5DTFVERV9TVVJGQUNFX0hfCisKKyNkZWZpbmUgRUdMQVBJCisjaW5j
bHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBD
b25maWc7CisKK2NsYXNzIFN1cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFN1cmZhY2UoRGlzcGxh
eSAqZGlzcGxheSwgSURpcmVjdDNEU3dhcENoYWluOSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJm
YWNlOSogZGVwdGhTdGVuY2lsLCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5T
dXJmYWNlKCk7CisKKyAgICBIV05EIGdldFdpbmRvd0hhbmRsZSgpOworICAgIGJvb2wgc3dhcCgp
OworCisgICAgdmlydHVhbCBFR0xpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEVH
TGludCBnZXRIZWlnaHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERl
cHRoU3RlbmNpbCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFN1cmZhY2UpOworCisgICAgRGlzcGxheSAqY29uc3QgbURpc3BsYXk7CisgICAgSURpcmVjdDNE
U3dhcENoYWluOSAqY29uc3QgbVN3YXBDaGFpbjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJh
Y2tCdWZmZXI7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1G
bGlwVGV4dHVyZTsKKworICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0
ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOworICAgIHZvaWQgd3JpdGVSZWNvcmRhYmxlRmxp
cFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJj
ZSk7CisgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1GbGlwU3RhdGU7CisgICAgSURpcmVjdDNE
U3RhdGVCbG9jazkgKm1QcmVGbGlwU3RhdGU7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1QcmVG
bGlwQmFja0J1ZmZlcjsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBEZXB0aFN0ZW5j
aWw7CisKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqbUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBz
dXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgKKyAgICBFR0xpbnQgbUhlaWdodDsgICAgICAgICAgICAg
ICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UKKyAgICBFR0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAg
ICAgLy8gV2lkdGggb2Ygc3VyZmFjZQorLy8gIEVHTGludCBob3Jpem9udGFsUmVzb2x1dGlvbjsg
ICAvLyBIb3Jpem9udGFsIGRvdCBwaXRjaAorLy8gIEVHTGludCB2ZXJ0aWNhbFJlc29sdXRpb247
ICAgICAvLyBWZXJ0aWNhbCBkb3QgcGl0Y2gKKy8vICBFR0xCb29sZWFuIGxhcmdlc3RQQnVmZmVy
OyAgICAgLy8gSWYgdHJ1ZSwgY3JlYXRlIGxhcmdlc3QgcGJ1ZmZlciBwb3NzaWJsZQorLy8gIEVH
TEJvb2xlYW4gbWlwbWFwVGV4dHVyZTsgICAgICAvLyBUcnVlIGlmIHRleHR1cmUgaGFzIG1pcG1h
cHMKKy8vICBFR0xpbnQgbWlwbWFwTGV2ZWw7ICAgICAgICAgICAgLy8gTWlwbWFwIGxldmVsIHRv
IHJlbmRlciB0bworLy8gIEVHTGVudW0gbXVsdGlzYW1wbGVSZXNvbHZlOyAgICAvLyBNdWx0aXNh
bXBsZSByZXNvbHZlIGJlaGF2aW9yCisgICAgRUdMaW50IG1QaXhlbEFzcGVjdFJhdGlvOyAgICAg
IC8vIERpc3BsYXkgYXNwZWN0IHJhdGlvCisgICAgRUdMZW51bSBtUmVuZGVyQnVmZmVyOyAgICAg
ICAgIC8vIFJlbmRlciBidWZmZXIKKyAgICBFR0xlbnVtIG1Td2FwQmVoYXZpb3I7ICAgICAgICAg
Ly8gQnVmZmVyIHN3YXAgYmVoYXZpb3IKKy8vICBFR0xlbnVtIHRleHR1cmVGb3JtYXQ7ICAgICAg
ICAgLy8gRm9ybWF0IG9mIHRleHR1cmU6IFJHQiwgUkdCQSwgb3Igbm8gdGV4dHVyZQorLy8gIEVH
TGVudW0gdGV4dHVyZVRhcmdldDsgICAgICAgICAvLyBUeXBlIG9mIHRleHR1cmU6IDJEIG9yIG5v
IHRleHR1cmUKKy8vICBFR0xlbnVtIHZnQWxwaGFGb3JtYXQ7ICAgICAgICAgLy8gQWxwaGEgZm9y
bWF0IGZvciBPcGVuVkcKKy8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29s
b3Igc3BhY2UgZm9yIE9wZW5WRworfTsKK30KKworI2VuZGlmICAgLy8gSU5DTFVERV9TVVJGQUNF
X0hfCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVH
TC9saWJFR0wuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwODUgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIGxpYkVHTC5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIEVHTCBmdW5j
dGlvbnMuCisKKyNpbmNsdWRlIDxleGNlcHRpb24+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGliRUdML21h
aW4uaCIKKyNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisKK2Jvb2wgdmFsaWRhdGUoZWds
OjpEaXNwbGF5ICpkaXNwbGF5KQoreworICAgIGlmIChkaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZ
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNJbml0aWFsaXplZCgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IEVHTENvbmZpZyBjb25maWcpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFs
aWRDb25maWcoY29uZmlnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NP
TkZJRywgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHZhbGlk
YXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAg
aWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb250ZXh0KGNvbnRleHQpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09OVEVYVCwgZmFsc2UpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxh
eSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFkaXNwbGF5
LT5pc1ZhbGlkU3VyZmFjZShzdXJmYWNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX1NVUkZBQ0UsIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
ZXh0ZXJuICJDIgoreworRUdMaW50IF9fc3RkY2FsbCBlZ2xHZXRFcnJvcih2b2lkKQoreworICAg
IFRSQUNFKCIoKSIpOworCisgICAgRUdMaW50IGVycm9yID0gZWdsOjpnZXRDdXJyZW50RXJyb3Io
KTsKKworICAgIGlmIChlcnJvciAhPSBFR0xfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGVnbDo6
c2V0Q3VycmVudEVycm9yKEVHTF9TVUNDRVNTKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7
Cit9CisKK0VHTERpc3BsYXkgX19zdGRjYWxsIGVnbEdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxh
eVR5cGUgZGlzcGxheV9pZCkKK3sKKyAgICBUUkFDRSgiKEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRp
c3BsYXlfaWQgPSAweCUwLjhwKSIsIGRpc3BsYXlfaWQpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICAvLyBGSVhNRTogUmV0dXJuIHRoZSBzYW1lIEVHTERpc3BsYXkgaGFuZGxlIHdoZW4gZGlz
cGxheV9pZCBhbHJlYWR5IGNyZWF0ZWQgYSBkaXNwbGF5CisKKyAgICAgICAgaWYgKGRpc3BsYXlf
aWQgPT0gRUdMX0RFRkFVTFRfRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBlZ2w6OkRpc3BsYXkoKEhEQylOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5X2lkIGlzIGEg
dmFsaWQgZGlzcGxheSBkZXZpY2UgY29udGV4dAorCisgICAgICAgICAgICByZXR1cm4gbmV3IGVn
bDo6RGlzcGxheSgoSERDKWRpc3BsYXlfaWQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfTk9fRElTUExBWSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19ESVNQTEFZ
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5
LCBFR0xpbnQgKm1ham9yLCBFR0xpbnQgKm1pbm9yKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgKm1ham9yID0gMHglMC44cCwgRUdMaW50ICptaW5vciA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIG1ham9yLCBtaW5vcik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIEVHTF9GQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghZGlzcGxheS0+aW5pdGlhbGl6ZSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYWpvcikgKm1ham9yID0gMTsKKyAg
ICAgICAgaWYgKG1pbm9yKSAqbWlub3IgPSA0OworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVH
TF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAg
cmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsVGVybWluYXRl
KEVHTERpc3BsYXkgZHB5KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhw
KSIsIGRweSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJ
U1BMQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BM
QVksIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGRpc3BsYXkt
PnRlcm1pbmF0ZSgpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxT
RTsKK30KKworY29uc3QgY2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3BsYXkg
ZHB5LCBFR0xpbnQgbmFtZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgRUdMaW50IG5hbWUgPSAlZCkiLCBkcHksIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihk
cHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChuYW1lKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBFR0xfQ0xJRU5UX0FQSVM6CisgICAgICAgICAgICBy
ZXR1cm4gc3VjY2VzcygiT3BlbkdMX0VTIik7CisgICAgICAgICAgY2FzZSBFR0xfRVhURU5TSU9O
UzoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIiKTsKKyAgICAgICAgICBjYXNlIEVHTF9W
RU5ET1I6CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiVHJhbnNHYW1pbmcgSW5jLiIpOwor
ICAgICAgICAgIGNhc2UgRUdMX1ZFUlNJT046CisgICAgICAgICAgICByZXR1cm4gc3VjY2Vzcygi
MS40IChnaXQtZGV2ZWwgIl9fREFURV9fIiAiIF9fVElNRV9fIikiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGNvbnN0IGNoYXIqKU5VTEwpOworICAgIH0KKworICAg
IHJldHVybiBOVUxMOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xHZXRDb25maWdzKEVH
TERpc3BsYXkgZHB5LCBFR0xDb25maWcgKmNvbmZpZ3MsIEVHTGludCBjb25maWdfc2l6ZSwgRUdM
aW50ICpudW1fY29uZmlnKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhw
LCBFR0xDb25maWcgKmNvbmZpZ3MgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTGludCBjb25m
aWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAgICAgICAg
ZHB5LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
bnVtX2NvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
UEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgRUdMaW50
IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5n
ZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBF
R0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xDaG9vc2VDb25maWcoRUdM
RGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QsIEVHTENvbmZpZyAqY29uZmln
cywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpCit7CisgICAgVFJBQ0Uo
IihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAw
eCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZpZyAqY29uZmlncyA9IDB4JTAuOHAsIEVHTGlu
dCBjb25maWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgZHB5LCBhdHRyaWJfbGlzdCwgY29uZmlncywgY29uZmlnX3NpemUsIG51bV9jb25maWcp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlz
cGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW51bV9jb25maWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IEVHTGludCBhdHRyaWJMaXN0W10gPSAgICB7RUdMX05PTkV9OworCisgICAg
ICAgIGlmICghYXR0cmliX2xpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF0dHJpYl9saXN0
ID0gYXR0cmliTGlzdDsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3Mo
Y29uZmlncywgYXR0cmliX2xpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERp
c3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTGludCBh
dHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHks
IGNvbmZpZywgYXR0cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaXNw
bGF5LT5nZXRDb25maWdBdHRyaWIoY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0Up
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNF
OworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKEVHTERp
c3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVdpbmRvd1R5cGUg
d2luID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0g
MHglMC44cCkiLCBkcHksIGNvbmZpZywgd2luLCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlz
cGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0K
KworICAgICAgICBIV05EIHdpbmRvdyA9IChIV05EKXdpbjsKKworICAgICAgICBpZiAoIUlzV2lu
ZG93KHdpbmRvdykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X05BVElWRV9XSU5ET1csIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChhdHRyaWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCphdHRyaWJfbGlz
dCAhPSBFR0xfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0
dHJpYl9saXN0WzBdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xp
c3RbMV0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEVHTF9CQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRUdMX1NJTkdMRV9CVUZGRVI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8v
IFJlbmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZmZXIgbm90IHN1cHBvcnRlZAorICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgRUdMX1ZHX0NPTE9SU1BBQ0U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEVH
TF9WR19BTFBIQV9GT1JNQVQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9O
T19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZGlzcGxheS0+aGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
Tk9fU1VSRkFDRSk7CisgICAgICAgIH0KKworICAgICAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSAo
RUdMU3VyZmFjZSlkaXNwbGF5LT5jcmVhdGVXaW5kb3dTdXJmYWNlKHdpbmRvdywgY29uZmlnKTsK
KworICAgICAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9
CisKK0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3Bs
YXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQorewor
ICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0g
MHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAgICAgICAg
ICBkcHksIGNvbmZpZywgYXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwor
CisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05P
X0RJU1BMQVkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0K
KworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMU3VyZmFjZSBfX3N0ZGNhbGwg
ZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywg
RUdMTmF0aXZlUGl4bWFwVHlwZSBwaXhtYXAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7
CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcg
PSAweCUwLjhwLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHBpeG1hcCA9IDB4JTAuOHAsICIKKyAgICAg
ICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcs
IHBpeG1hcCwgYXR0cmliX2xpc3QpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAg
ICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX0RJU1BM
QVkpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAg
IHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVz
dHJveVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBU
UkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHgl
MC44cCkiLCBkcHksIHN1cmZhY2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAg
ICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9f
U1VSRkFDRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VS
RkFDRSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPmRlc3Ryb3lT
dXJmYWNlKChlZ2w6OlN1cmZhY2UqKXN1cmZhY2UpOworCisgICAgICAgIHJldHVybiBzdWNjZXNz
KEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlT
dXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1
dGUsIEVHTGludCAqdmFsdWUpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwg
RUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJp
YnV0ZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICgh
dmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdM
X0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9
IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7CisKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6CisgICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRUdMX1ZHX0NPTE9SU1BBQ0U6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0NPTkZJ
R19JRDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgKnZhbHVl
ID0gZWdsU3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEVHTF9IT1JJWk9OVEFMX1JFU09MVVRJT046CisgICAgICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdM
X0xBUkdFU1RfUEJVRkZFUjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX1RFWFRVUkU6
CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgRUdMX01JUE1BUF9MRVZFTDoKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfUElYRUxf
QVNQRUNUX1JBVElPOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgorICAg
ICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEVHTF9TV0FQX0JFSEFWSU9SOgorICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVH
TF9URVhUVVJFX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6
CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT046CisgICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+Z2V0
V2lkdGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbEJpbmRBUEkoRUdMZW51bSBhcGkpCit7CisgICAgVFJBQ0Uo
IihFR0xlbnVtIGFwaSA9IDB4JVgpIiwgYXBpKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChhcGkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfQVBJOgor
ICAgICAgICAgIGNhc2UgRUdMX09QRU5WR19BUEk6CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7ICAgLy8gTm90IHN1cHBvcnRlZCBieSB0aGlz
IGltcGxlbWVudGF0aW9uCisgICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0VTX0FQSToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBl
Z2w6OnNldEN1cnJlbnRBUEkoYXBpKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJV
RSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVy
biBFR0xfRkFMU0U7Cit9CisKK0VHTGVudW0gX19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCit7
CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEVHTGVudW0gQVBJ
ID0gZWdsOjpnZXRDdXJyZW50QVBJKCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsK
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVH
TF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdENsaWVudCh2b2lkKQor
eworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsK
K30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRocmVhZCh2b2lkKQoreworICAg
IFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChF
R0xfTk9fRElTUExBWSwgRUdMX05PX0NPTlRFWFQsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VS
RkFDRSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQor
CitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihF
R0xEaXNwbGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNF
KCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1ZnR5cGUgPSAweCVYLCBFR0xD
bGllbnRCdWZmZXIgYnVmZmVyID0gMHglMC44cCwgIgorICAgICAgICAgICJFR0xDb25maWcgY29u
ZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBkcHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBhdHRyaWJfbGlzdCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBj
b25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cisg
ICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworfQor
CitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSkKK3sKKyAg
ICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0g
MHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgdmFsdWUgPSAlZCkiLAorICAg
ICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVF
KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJu
IEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQmluZFRleEltYWdlKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCit7CisgICAg
VFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4
JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVs
ZWFzZVRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBi
dWZmZXIpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZh
Y2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2Us
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsK
KyAgICAgICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsU3dhcEludGVydmFsKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgaW50ZXJ2YWwp
Cit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCBpbnRlcnZh
bCA9ICVkKSIsIGRweSwgaW50ZXJ2YWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisg
ICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBkaXNwbGF5LT5zZXRTd2FwSW50
ZXJ2YWwoaW50ZXJ2YWwpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9G
QUxTRTsKK30KKworRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsQ3JlYXRlQ29udGV4dChFR0xEaXNw
bGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMQ29udGV4dCBzaGFyZV9jb250ZXh0LCBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMQ29udGV4dCBzaGFyZV9jb250
ZXh0ID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0g
MHglMC44cCkiLCBkcHksIGNvbmZpZywgc2hhcmVfY29udGV4dCwgYXR0cmliX2xpc3QpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwg
Y29uZmlnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwor
ICAgICAgICB9CisKKyAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRl
Q29udGV4dChjb25maWcpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOworICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0NPTlRFWFQpOworICAgIH0KKworICAgIHJldHVybiBF
R0xfTk9fQ09OVEVYVDsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsRGVzdHJveUNvbnRl
eHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwgZHB5LCBjdHgp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlz
cGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY3R4ID09IEVHTF9OT19DT05URVhUKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBFR0xfRkFMU0UpOworICAgICAg
ICB9CisKKyAgICAgICAgZGlzcGxheS0+ZGVzdHJveUNvbnRleHQoKGdsOjpDb250ZXh0KiljdHgp
OworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZh
Y2UgZHJhdywgRUdMU3VyZmFjZSByZWFkLCBFR0xDb250ZXh0IGN0eCkKK3sKKyAgICBUUkFDRSgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBkcmF3ID0gMHglMC44cCwgRUdM
U3VyZmFjZSByZWFkID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsCisgICAg
ICAgICAgZHB5LCBkcmF3LCByZWFkLCBjdHgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4o
Y3R4KTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2
aWNlKCk7CisgICAgICAgIERXT1JEIHBhc3NlczsKKworICAgICAgICBpZiAoIWRldmljZSB8fCBk
ZXZpY2UtPlZhbGlkYXRlRGV2aWNlKCZwYXNzZXMpID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZB
TFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdHggIT0gRUdMX05PX0NPTlRFWFQgJiYg
IXZhbGlkYXRlKGRpc3BsYXksIGNvbnRleHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19T
VVJGQUNFICYmICF2YWxpZGF0ZShkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihk
cmF3KSkpIHx8CisgICAgICAgICAgICAocmVhZCAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRh
dGUoZGlzcGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4ocmVhZCkpKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkcmF3ICE9IHJlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorICAgICAgICB9CisKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50RGlzcGxheShk
cHkpOworICAgICAgICBlZ2w6OnNldEN1cnJlbnREcmF3U3VyZmFjZShkcmF3KTsKKyAgICAgICAg
ZWdsOjpzZXRDdXJyZW50UmVhZFN1cmZhY2UocmVhZCk7CisKKyAgICAgICAgZ2xNYWtlQ3VycmVu
dChjb250ZXh0LCBkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSk7CisK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xDb250
ZXh0IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKQoreworICAgIFRSQUNFKCIo
KSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBnbEdl
dEN1cnJlbnRDb250ZXh0KCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJu
IEVHTF9OT19DT05URVhUOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50
U3VyZmFjZShFR0xpbnQgcmVhZGRyYXcpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgcmVhZGRyYXcg
PSAlZCkiLCByZWFkZHJhdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChyZWFkZHJh
dyA9PSBFR0xfUkVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgRUdMU3VyZmFjZSByZWFkID0g
ZWdsOjpnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNz
KHJlYWQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlYWRkcmF3ID09IEVHTF9EUkFX
KQorICAgICAgICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIGRyYXcgPSBlZ2w6OmdldEN1cnJl
bnREcmF3U3VyZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHJhdyk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9f
U1VSRkFDRTsKK30KKworRUdMRGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudERpc3BsYXko
dm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdM
RGlzcGxheSBkcHkgPSBlZ2w6OmdldEN1cnJlbnREaXNwbGF5KCk7CisKKyAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoZHB5KTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisKK0VHTEJvb2xlYW4gX19zdGRj
YWxsIGVnbFF1ZXJ5Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGlu
dCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9
ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY3R4LCBhdHRy
aWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAo
IXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZB
TFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFdhaXRHTCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1
cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2Fp
dE5hdGl2ZShFR0xpbnQgZW5naW5lKQoreworICAgIFRSQUNFKCIoRUdMaW50IGVuZ2luZSA9ICVk
KSIsIGVuZ2luZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitF
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3Vy
ZmFjZSBzdXJmYWNlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAg
ICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFjZSopc3VyZmFjZTsK
KworICAgICAgICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZh
Y2Ugc3VyZmFjZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVH
TE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRhcmdl
dCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShk
aXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAg
ICAgfQorCisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJl
dHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpw
cm9jbmFtZSkKK3sKKyAgICBUUkFDRSgiKGNvbnN0IGNoYXIgKnByb2NuYW1lID0gXCIlc1wiKSIs
IHByb2NuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3RydWN0IEV4dGVuc2lvbgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICAgICAgX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAgICAgICB9
OworCisgICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZWdsRXh0ZW5zaW9uc1tdID0KKyAg
ICAgICAgeworICAgICAgICAgICAgeyIiLCBOVUxMfSwKKyAgICAgICAgfTsKKworICAgICAgICBm
b3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0
ZW5zaW9uKTsgZXh0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAocHJvY25h
bWUsIGVnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSllZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5VTEwp
OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkVH
TC9saWJFR0wuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNiBAQAorTElCUkFSWQlsaWJFR0wKK0VYUE9SVFMKKwllZ2xCaW5kQVBJICAg
ICAgICAgICAgICAgICAgICAgIEAxNAorCWVnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAg
QDIwCisJZWdsQ2hvb3NlQ29uZmlnICAgICAgICAgICAgICAgICBANworCWVnbENvcHlCdWZmZXJz
ICAgICAgICAgICAgICAgICAgQDMzCisJZWdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAgICBA
MjMKKwllZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciAgICAgICAgQDE4CisJZWdsQ3Jl
YXRlUGJ1ZmZlclN1cmZhY2UgICAgICAgICBAMTAKKwllZ2xDcmVhdGVQaXhtYXBTdXJmYWNlICAg
ICAgICAgIEAxMQorCWVnbENyZWF0ZVdpbmRvd1N1cmZhY2UgICAgICAgICAgQDkKKwllZ2xEZXN0
cm95Q29udGV4dCAgICAgICAgICAgICAgIEAyNAorCWVnbERlc3Ryb3lTdXJmYWNlICAgICAgICAg
ICAgICAgQDEyCisJZWdsR2V0Q29uZmlnQXR0cmliICAgICAgICAgICAgICBAOAorCWVnbEdldENv
bmZpZ3MgICAgICAgICAgICAgICAgICAgQDYKKwllZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAg
ICAgIEAyNgorCWVnbEdldEN1cnJlbnREaXNwbGF5ICAgICAgICAgICAgQDI4CisJZWdsR2V0Q3Vy
cmVudFN1cmZhY2UgICAgICAgICAgICBAMjcKKwllZ2xHZXREaXNwbGF5ICAgICAgICAgICAgICAg
ICAgIEAyCisJZWdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICBAMQorCWVnbEdldFByb2NB
ZGRyZXNzICAgICAgICAgICAgICAgQDM0CisJZWdsSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAg
ICBAMworCWVnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgQDI1CisJZWdsUXVlcnlBUEkg
ICAgICAgICAgICAgICAgICAgICBAMTUKKwllZ2xRdWVyeUNvbnRleHQgICAgICAgICAgICAgICAg
IEAyOQorCWVnbFF1ZXJ5U3RyaW5nICAgICAgICAgICAgICAgICAgQDUKKwllZ2xRdWVyeVN1cmZh
Y2UgICAgICAgICAgICAgICAgIEAxMworCWVnbFJlbGVhc2VUZXhJbWFnZSAgICAgICAgICAgICAg
QDIxCisJZWdsUmVsZWFzZVRocmVhZCAgICAgICAgICAgICAgICBAMTcKKwllZ2xTdXJmYWNlQXR0
cmliICAgICAgICAgICAgICAgIEAxOQorCWVnbFN3YXBCdWZmZXJzICAgICAgICAgICAgICAgICAg
QDMyCisJZWdsU3dhcEludGVydmFsICAgICAgICAgICAgICAgICBAMjIKKwllZ2xUZXJtaW5hdGUg
ICAgICAgICAgICAgICAgICAgIEA0CisJZWdsV2FpdENsaWVudCAgICAgICAgICAgICAgICAgICBA
MTYKKwllZ2xXYWl0R0wgICAgICAgICAgICAgICAgICAgICAgIEAzMAorCWVnbFdhaXROYXRpdmUg
ICAgICAgICAgICAgICAgICAgQDMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGli
RUdMLnZjcHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTIgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQor
CVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJsaWJF
R0wiDQorCVByb2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00MzNFLTg1RTgtOUE1QTY3QUI3RUQ2
fSINCisJUm9vdE5hbWVzcGFjZT0ibGliRUdMIg0KKwlLZXl3b3JkPSJXaW4zMlByb2oiDQorCVRh
cmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1zPg0KKwkJPFBs
YXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xG
aWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0
aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0
aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJQ2hh
cmFjdGVyU2V0PSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZl
bnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlv
bj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8u
LjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9T
RUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIN
CisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGlicmFyeT0iMSINCisJ
CQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZlbD0iMyINCisJCQkJ
RGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJl
c291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlu
a0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIN
CisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIiDQorCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMiINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiDQorCQkJCUdl
bmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlS
YW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIw
Ig0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1
aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2Rp
ciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsm
I3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVj
aG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29u
ZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5
PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURp
cmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIi
DQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIN
CisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIiDQorCQkJCUlu
bGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJ
CVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtM
SUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9T
Q0w9MCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVy
PSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQ
cm9ibGVtcz0iZmFsc2UiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJ
CQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRl
bmNpZXM9ImQzZDkubGliIg0KKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQorCQkJCU1vZHVsZURl
ZmluaXRpb25GaWxlPSJsaWJFR0wuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249
InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0K
KwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9
IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5l
PSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlD
b21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0
RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0K
KwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZl
cmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1l
PSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBq
O2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2
LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXENvbmZpZy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxDb21tb25cZGVidWcuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXNwbGF5LmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN1
cmZhY2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVy
DQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtp
bmM7eHNkIg0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02
MjVGQkU1MkVCRkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29u
ZmlnLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXERpc3BsYXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsZXh0Lmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxpbmNsdWRlXEVHTFxlZ2xwbGF0Zm9ybS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdM
LmRlZiINCisJCQk+DQorCQk8L0ZpbGU+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0ds
b2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wv
bWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmNwcDogRExMIGVudHJ5IHBv
aW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaW5jbHVkZSAibGli
RUdML21haW4uaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCitzdGF0aWMgRFdPUkQg
Y3VycmVudFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKKworQk9PTCBXSU5BUEkgRGxsTWFpbihI
SU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQoreworICAg
IHN3aXRjaCAocmVhc29uKQorICAgIHsKKyAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgor
ICAgICAgICB7CisgICAgICAgICAgICAjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgIEZJ
TEUgKmRlYnVnID0gZm9wZW4oImRlYnVnLnR4dCIsICJydCIpOworCisgICAgICAgICAgICAgICAg
aWYgKGRlYnVnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmNsb3Nl
KGRlYnVnKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbigiZGVidWcudHh0Iiwg
Ind0Iik7ICAgLy8gRXJhc2UKKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgY3VycmVu
dFRMUyA9IFRsc0FsbG9jKCk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19P
VVRfT0ZfSU5ERVhFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0
byBpbml0aWFsaXplIGluZGV4CisgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgICAg
ICB7CisgICAgICAgICAgICBlZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50KilM
b2NhbEFsbG9jKExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKKworICAgICAgICAgICAgaWYg
KGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3Vy
cmVudFRMUywgY3VycmVudCk7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9IEVH
TF9TVUNDRVNTOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xfRVNf
QVBJOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9U
SFJFQURfREVUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBETExfUFJP
Q0VTU19ERVRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNH
ZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKworbmFtZXNwYWNlIGVnbAorewordm9pZCBzZXRDdXJyZW50
RXJyb3IoRUdMaW50IGVycm9yKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICBjdXJyZW50LT5lcnJvciA9IGVycm9yOwor
fQorCitFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQt
PmVycm9yOworfQorCit2b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpCit7CisgICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAg
IGN1cnJlbnQtPkFQSSA9IEFQSTsKK30KKworRUdMZW51bSBnZXRDdXJyZW50QVBJKCkKK3sKKyAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
CisgICAgcmV0dXJuIGN1cnJlbnQtPkFQSTsKK30KKwordm9pZCBzZXRDdXJyZW50RGlzcGxheShF
R0xEaXNwbGF5IGRweSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKK30KKwor
RUdMRGlzcGxheSBnZXRDdXJyZW50RGlzcGxheSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9
IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50
LT5kaXNwbGF5OworfQorCit2b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1
cmZhY2UpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gc3VyZmFjZTsKK30KKwor
RUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKQoreworICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3Vy
cmVudC0+ZHJhd1N1cmZhY2U7Cit9CisKK3ZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVHTFN1
cmZhY2Ugc3VyZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJmYWNl
OworfQorCitFR0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpCit7CisgICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJl
dHVybiBjdXJyZW50LT5yZWFkU3VyZmFjZTsKK30KK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJy
b3JDb2RlKQoreworICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKGVycm9yQ29kZSk7Cit9CkluZGV4
OiBBTkdMRS9zcmMvbGliRUdML21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L21haW4uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6IE1h
bmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpZm5kZWYgTElCRUdMX01BSU5fSF8K
KyNkZWZpbmUgTElCRUdMX01BSU5fSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisKK25hbWVzcGFjZSBlZ2wKK3sKK3N0cnVjdCBDdXJyZW50Cit7CisgICAgRUdMaW50
IGVycm9yOworICAgIEVHTGVudW0gQVBJOworICAgIEVHTERpc3BsYXkgZGlzcGxheTsKKyAgICBF
R0xTdXJmYWNlIGRyYXdTdXJmYWNlOworICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Cit9Owor
Cit2b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpOworRUdMaW50IGdldEN1cnJlbnRF
cnJvcigpOworCit2b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpOworRUdMZW51bSBnZXRD
dXJyZW50QVBJKCk7CisKK3ZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOwor
RUdMRGlzcGxheSBnZXRDdXJyZW50RGlzcGxheSgpOworCit2b2lkIHNldEN1cnJlbnREcmF3U3Vy
ZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZh
Y2UoKTsKKwordm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsK
K0VHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCk7Cit9CisKK3ZvaWQgZXJyb3IoRUdM
aW50IGVycm9yQ29kZSk7CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZlcnJvcihFR0xp
bnQgZXJyb3JDb2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlcnJvcihlcnJvckNv
ZGUpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPgor
Y29uc3QgVCAmc3VjY2Vzcyhjb25zdCBUICZyZXR1cm5WYWx1ZSkKK3sKKyAgICBlZ2w6OnNldEN1
cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisK
KyNlbmRpZiAgLy8gTElCRUdMX01BSU5fSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQmxp
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTY0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0LmNwcDogU3VyZmFjZSBj
b3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorCisjaW5j
bHVkZSA8ZDNkeDkuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKKworbmFtZXNwYWNlCit7CisvLyBTdGFuZGFyZCBWZXJ0ZXggU2hh
ZGVyCisvLyBJbnB1dCAwIGlzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uLgorLy8gT3V0cHV0cyB0
aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1pcy4KKy8vIE91dHB1dHMgYSB0ZXggY29vcmQgd2l0
aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkg
aW4gdGhlIGJvdHRvbSByaWdodC4KKy8vIEMwLlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVs
IHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFsZi1waXhlbCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4K
K2NvbnN0IGNoYXIgc3RhbmRhcmR2c1tdID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgor
IiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3Jk
IDogVEVYQ09PUkQwO1xuIgorIn07XG4iCisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVs
U2l6ZSA6IGMwO1xuIgorIlxuIgorIlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6
IFBPU0lUSU9OKVxuIgorIntcbiIKKyIgICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAg
T3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4
Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgw
LjUsIDAuNSwgMCwgMCk7XG4iCisiXG4iCisiICAgIHJldHVybiBPdXQ7XG4iCisifVxuIjsKKwor
Ly8gRmxpcCBZIFZlcnRleCBTaGFkZXIKKy8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9z
aXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0
cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0
aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgorLy8gQzAuWFkgbXVzdCBi
ZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCitjb25z
dCBjaGFyIGZsaXB5dnNbXSA9Cisic3RydWN0IFZTX09VVFBVVFxuIgorIntcbiIKKyIgICAgZmxv
YXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4iCisiICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENP
T1JEMDtcbiIKKyJ9O1xuIgorIlxuIgorInVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBj
MDtcbiIKKyJcbiIKKyJWU19PVVRQVVQgbWFpbihpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElP
TilcbiIKKyJ7XG4iCisiICAgIFZTX09VVFBVVCBPdXQ7XG4iCisiXG4iCisiICAgIE91dC5wb3Np
dGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtcbiIKKyIgICAgT3V0LnRleGNvb3JkID0g
cG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwg
MCwgMCk7XG4iCisiXG4iCisiICAgIHJldHVybiBPdXQ7XG4iCisifVxuIjsKKworLy8gUGFzc3Ro
cm91Z2ggUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNv
b3JkIDAuCitjb25zdCBjaGFyIHBhc3N0aHJvdWdocHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMw
O1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBD
T0xPUlxuIgorIntcbiIKKyIJcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIn1c
biI7CisKKy8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgorLy8gT3V0cHV0cyBz
YW1wbGUodGV4MCwgdGMwKS5ycnJhLgorLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAu
WCA9IDEsIEMwLlkgPSAwLgorLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBD
MC5ZID0gMS4KK2NvbnN0IGNoYXIgbHVtaW5hbmNlcHNbXSA9Cisic2FtcGxlcjJEIHRleCA6IHMw
O1xuIgorIlxuIgorInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJmbG9hdDQg
bWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4iCisiCWZs
b2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKKyIJdG1wLncgPSB0bXAudyAq
IG1vZGUueCArIG1vZGUueTtcbiIKKyIJcmV0dXJuIHRtcC54eHh3O1xuIgorIn1cbiI7CisKKy8v
IFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgorLy8gT3V0cHV0cyBzYW1wbGUodGV4
MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCisvLyBU
byBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KKy8vIFRv
IGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEs
IEMwLlcgPSAwLgorY29uc3QgY2hhciBjb21wb25lbnRtYXNrcHNbXSA9Cisic2FtcGxlcjJEIHRl
eCA6IHMwO1xuIgorIlxuIgorInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKKyJcbiIKKyJm
bG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKKyJ7XG4i
CisiCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKKyIJdG1wLnh5eiA9
IHRtcC54eXogKiBtb2RlLng7XG4iCisiCXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7
XG4iCisiCXJldHVybiB0bXA7XG4iCisifVxuIjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6Om1TaGFkZXJTb3VyY2VbXSA9Cit7CisgICAgc3RhbmRh
cmR2cywKKyAgICBmbGlweXZzLAorICAgIHBhc3N0aHJvdWdocHMsCisgICAgbHVtaW5hbmNlcHMs
CisgICAgY29tcG9uZW50bWFza3BzCit9OworCitCbGl0OjpCbGl0KENvbnRleHQgKmNvbnRleHQp
CisgIDogbUNvbnRleHQoY29udGV4dCksIG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZl
cnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERl
cHRoU3RlbmNpbChOVUxMKSwgbVNhdmVkU3RhdGVCbG9jayhOVUxMKQoreworICAgIGluaXRHZW9t
ZXRyeSgpOworICAgIG1lbXNldChtQ29tcGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVk
U2hhZGVycykpOworfQorCitCbGl0Ojp+QmxpdCgpCit7CisgICAgaWYgKG1TYXZlZFN0YXRlQmxv
Y2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhCdWZm
ZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgaWYgKG1RdWFkVmVydGV4RGVj
bGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNv
bXBpbGVkU2hhZGVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVy
c1tpXS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJsaXQ6OmluaXRH
ZW9tZXRyeSgpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHF1YWRbXSA9CisgICAgeworICAg
ICAgICAtMSwgLTEsCisgICAgICAgIC0xLCAgMSwKKyAgICAgICAgIDEsIC0xLAorICAgICAgICAg
MSwgIDEKKyAgICB9OworCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9m
KHF1YWQpLCBEM0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVy
dGV4QnVmZmVyLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1P
UlkpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisg
ICAgdm9pZCAqbG9ja1B0cjsKKyAgICBtUXVhZFZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbG9j
a1B0ciwgMCk7CisgICAgbWVtY3B5KGxvY2tQdHIsIHF1YWQsIHNpemVvZihxdWFkKSk7CisgICAg
bVF1YWRWZXJ0ZXhCdWZmZXItPlVubG9jaygpOworCisgICAgc3RhdGljIGNvbnN0IEQzRFZFUlRF
WEVMRU1FTlQ5IGVsZW1lbnRzW10gPQorICAgIHsKKyAgICAgICAgeyAwLCAwLCBEM0RERUNMVFlQ
RV9GTE9BVDIsIEQzRERFQ0xNRVRIT0RfREVGQVVMVCwgRDNEREVDTFVTQUdFX1BPU0lUSU9OLCAw
IH0sCisgICAgICAgIEQzRERFQ0xfRU5EKCkKKyAgICB9OworCisgICAgaHIgPSBkZXZpY2UtPkNy
ZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBE
M0RTaGFkZXJUeXBlPgorYm9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25z
dCBjaGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5
cGUqKiksCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2
aWNlOTo6KnNldFNoYWRlcikoRDNEU2hhZGVyVHlwZSopKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOwor
CisgICAgaWYgKG1Db21waWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgc2hhZGVyID0gc3RhdGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNb
c291cmNlXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIElEM0RYQnVmZmVyICpz
aGFkZXJDb2RlOworICAgICAgICBIUkVTVUxUIGhyID0gRDNEWENvbXBpbGVTaGFkZXIobVNoYWRl
clNvdXJjZVtzb3VyY2VdLCBzdHJsZW4obVNoYWRlclNvdXJjZVtzb3VyY2VdKSwgTlVMTCwgTlVM
TCwgIm1haW4iLCBwcm9maWxlLCAwLCAmc2hhZGVyQ29kZSwgTlVMTCwgTlVMTCk7CisKKyAgICAg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRv
IGNvbXBpbGUgJXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIs
IHByb2ZpbGUsIChpbnQpc291cmNlLCBocik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBociA9IChkZXZpY2UtPipjcmVhdGVTaGFkZXIpKHN0YXRpY19j
YXN0PGNvbnN0IERXT1JEKj4oc2hhZGVyQ29kZS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgJnNoYWRl
cik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICB7CisgICAgICAgICAgICBzaGFk
ZXJDb2RlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgJXMg
c2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChp
bnQpc291cmNlLCBocik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBzaGFkZXJDb2RlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgbUNvbXBpbGVkU2hhZGVy
c1tzb3VyY2VdID0gc2hhZGVyOworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4q
c2V0U2hhZGVyKShzaGFkZXIpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byBzZXQgJXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJy
b3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQpc291cmNlLCBocik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbGl0OjpzZXRWZXJ0
ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKQoreworICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVj
dDNEVmVydGV4U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0VmVydGV4U2hhZGVyUHJvZmls
ZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2
aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKK30KKworYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihT
aGFkZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNo
YWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpLCAmSURpcmVj
dDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhl
bFNoYWRlcik7Cit9CisKK1JFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UpIGNvbnN0Cit7CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgc3Vy
ZmFjZS0+R2V0RGVzYygmZGVzYyk7CisKKyAgICBSRUNUIHJlY3Q7CisgICAgcmVjdC5sZWZ0ID0g
MDsKKyAgICByZWN0LnRvcCA9IDA7CisgICAgcmVjdC5yaWdodCA9IGRlc2MuV2lkdGg7CisgICAg
cmVjdC5ib3R0b20gPSBkZXNjLkhlaWdodDsKKworICAgIHJldHVybiByZWN0OworfQorCitib29s
IEJsaXQ6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKK3sKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJm
YWNlVG9UZXh0dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291cmNlKSk7CisgICAgaWYgKCF0
ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgc2F2ZVN0YXRlKCk7CisK
KyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7CisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgZGVzdCk7CisKKyAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5E
QVJEKTsKKyAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOworCisgICAg
c2V0Q29tbW9uQmxpdFN0YXRlKCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNE
U0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOworCisgICAgc2V0Vmll
d3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOworCisgICAgcmVuZGVyKCk7CisKKyAg
ICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0b3JlU3RhdGUoKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkg
KnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQoreworICAg
IElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNl
LCBzb3VyY2VSZWN0KTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0
dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKKworICAgIHNldFZp
ZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOworCisgICAgc2V0Q29tbW9uQmxp
dFN0YXRlKCk7CisgICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQor
ICAgIHsKKyAgICAgICAgcmVuZGVyKCk7CisgICAgfQorCisgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OworCisgICAgcmVzdG9yZVN0YXRlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBC
bGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKK3sKKyAgICBi
b29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKKworICAgIHN3
aXRjaCAoZGVzdEZvcm1hdCkKKyAgICB7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgY2FzZSBHTF9SR0I6CisgICAgICBjYXNlIEdMX0FM
UEhBOgorICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfQ09N
UE9ORU5UTUFTSyk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
KyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBva2F5ID0gb2theSAmJiBz
ZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfTFVNSU5BTkNFKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKCFva2F5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGVudW0geyBYID0gMCwgWSA9IDEsIFogPSAyLCBXID0gMyB9OworCisgICAgLy8gVGhl
IG1lYW5pbmcgb2YgdGhpcyBjb25zdGFudCBkZXBlbmRzIG9uIHRoZSBzaGFkZXIgdGhhdCB3YXMg
c2VsZWN0ZWQuCisgICAgLy8gU2VlIHRoZSBzaGFkZXIgYXNzZW1ibHkgY29kZSBhYm92ZSBmb3Ig
ZGV0YWlscy4KKyAgICBmbG9hdCBwc0NvbnN0MFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAg
c3dpdGNoIChkZXN0Rm9ybWF0KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAg
cHNDb25zdDBbWl0gPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9SR0I6Cisg
ICAgICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgcHNDb25zdDBbV10gPSAxOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgcHNDb25zdDBbWl0gPSAx
OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIHBz
Q29uc3QwW1ldID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtYXSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGdldERldmljZSgpLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBwc0NvbnN0MCwg
MSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSURpcmVjdDNEVGV4dHVyZTkgKkJsaXQ6OmNv
cHlTdXJmYWNlVG9UZXh0dXJlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0KQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXko
KTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEQz
RFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOworICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURl
c2MpOworCisgICAgLy8gQ29weSB0aGUgcmVuZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQorICAg
IElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJj
ZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwg
c291cmNlRGVzYy5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5V
TEwpOworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKKyAg
ICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsK
KworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwor
ICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIFJFQ1Qg
ZDNkU291cmNlUmVjdDsKKyAgICBkM2RTb3VyY2VSZWN0LmxlZnQgPSBzb3VyY2VSZWN0LmxlZnQ7
CisgICAgZDNkU291cmNlUmVjdC5yaWdodCA9IHNvdXJjZVJlY3QucmlnaHQ7CisgICAgZDNkU291
cmNlUmVjdC50b3AgPSBzb3VyY2VSZWN0LnRvcDsKKyAgICBkM2RTb3VyY2VSZWN0LmJvdHRvbSA9
IHNvdXJjZVJlY3QuYm90dG9tOworCisgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZkM2RTb3VyY2VSZWN0LCB0ZXh0dXJl
U3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgIHRleHR1cmVTdXJmYWNlLT5SZWxl
YXNlKCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKKyAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQoreworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEVklFV1BPUlQ5IHZw
OworICAgIHZwLlggICAgICA9IHhvZmZzZXQ7CisgICAgdnAuWSAgICAgID0geW9mZnNldDsKKyAg
ICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0OworICAgIHZw
LkhlaWdodCA9IHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3A7CisgICAgdnAuTWlu
WiAgID0gMC4wZjsKKyAgICB2cC5NYXhaICAgPSAxLjBmOworICAgIGRldmljZS0+U2V0Vmlld3Bv
cnQoJnZwKTsKKworICAgIGZsb2F0IGhhbGZQaXhlbEFkanVzdFs0XSA9IHsgLTEuMGYvdnAuV2lk
dGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAwIH07CisgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJD
b25zdGFudEYoMCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsKK30KKwordm9pZCBCbGl0OjpzZXRDb21t
b25CbGl0U3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOworCisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Cisg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsK
KyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQz
RENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwor
CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRF
WEZfUE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklM
VEVSLCBEM0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RT
QU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOworICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTKzE7IGkrKykKKyAgICB7Cisg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICB9Cit9CisKK3Zv
aWQgQmxpdDo6cmVuZGVyKCkKK3sKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNw
bGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAg
ICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZm
ZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKKyAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7CisKKyAgICBkaXNwbGF5LT5zdGFydFNj
ZW5lKCk7CisgICAgaHIgPSBkZXZpY2UtPkRyYXdQcmltaXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJ
UCwgMCwgMik7Cit9CisKK3ZvaWQgQmxpdDo6c2F2ZVN0YXRlKCkKK3sKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgaHI7CisKKyAgICBk
ZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7CisgICAg
ZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7CisKKyAgICBp
ZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaHIgPSBkZXZpY2Ut
PkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKworICAg
ICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQg
ZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9OworCisgICAgICAgIGRldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOworICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
RigwLCBkdW1teUNvbnN0LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxM
KTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0
LCAxKTsKKworICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKKyAgICAgICAgZHVtbXlWcC5Y
ID0gMDsKKyAgICAgICAgZHVtbXlWcC5ZID0gMDsKKyAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7
CisgICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKKyAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsK
KyAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKKworICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0
KCZkdW1teVZwKTsKKworICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7CisKKyAg
ICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDAp
OworCisgICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNs
YXJhdGlvbik7CisKKyAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0
YXRlQmxvY2spOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICB9CisKKyAgICBB
U1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJs
b2NrICE9IE5VTEwpCisgICAgeworICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1
cmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KK30KKwordm9pZCBC
bGl0OjpyZXN0b3JlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERl
cHRoU3RlbmNpbCk7CisgICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1TYXZlZERl
cHRoU3RlbmNpbCA9IE5VTEw7CisgICAgfQorCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5V
TEwpCisgICAgeworICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICBBU1NFUlQobVNhdmVk
U3RhdGVCbG9jayAhPSBOVUxMKTsKKworICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
CisgICAgeworICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOworICAgIH0KK30KKwor
fQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CbGl0LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L0JsaXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9CTElUX0hfCisjZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCisKKyNpbmNsdWRlIDxt
YXA+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5j
bHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNw
YWNlIGdsCit7CitjbGFzcyBDb250ZXh0OworCitjbGFzcyBCbGl0Cit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBCbGl0KENvbnRleHQgKmNvbnRleHQpOworICAgIH5CbGl0KCk7CisKKyAgICAv
LyBDb3B5IGZyb20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgorICAgIC8vIHNvdXJj
ZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVw
cGVyLWxlZnQpCisgICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RG
b3JtYXQgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBp
ZiBkZXN0Rm9ybWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0
byAwLgorICAgIGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBj
b25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOworCisgICAgLy8gMngyIGJv
eCBmaWx0ZXIgc2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCisgICAgLy8gUmVxdWlyZXMgdGhh
dCBzb3VyY2UgaXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNl
LgorICAgIGJvb2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0KTsKKworICBwcml2YXRlOgorICAgIENvbnRleHQgKm1Db250ZXh0Owor
CisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7CisgICAgSURp
cmVjdDNEVmVydGV4RGVjbGFyYXRpb245ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOworCisgICAg
dm9pZCBpbml0R2VvbWV0cnkoKTsKKworICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMo
R0xlbnVtIGRlc3RGb3JtYXQpOworCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKmNvcHlTdXJmYWNl
VG9UZXh0dXJlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VS
ZWN0KTsKKyAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpOworICAgIHZvaWQgc2V0Q29tbW9uQmxpdFN0YXRlKCk7
CisgICAgUkVDVCBnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29u
c3Q7CisKKyAgICAvLyBUaGlzIGVudW0gaXMgdXNlZCB0byBpbmRleCBtQ29tcGlsZWRTaGFkZXJz
IGFuZCBtU2hhZGVyU291cmNlLgorICAgIGVudW0gU2hhZGVySWQKKyAgICB7CisgICAgICAgIFNI
QURFUl9WU19TVEFOREFSRCwKKyAgICAgICAgU0hBREVSX1ZTX0ZMSVBZLAorICAgICAgICBTSEFE
RVJfUFNfUEFTU1RIUk9VR0gsCisgICAgICAgIFNIQURFUl9QU19MVU1JTkFOQ0UsCisgICAgICAg
IFNIQURFUl9QU19DT01QT05FTlRNQVNLLAorICAgICAgICBTSEFERVJfQ09VTlQKKyAgICB9Owor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtU2hhZGVyU291cmNlW107CisKKyAgICAv
LyBUaGlzIGFjdHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVj
dDNEUGl4ZWxTaGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KKyAgICBJVW5rbm93biAqbUNvbXBp
bGVkU2hhZGVyc1tTSEFERVJfQ09VTlRdOworCisgICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRl
clR5cGU+CisgICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpw
cm9maWxlLAorICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZp
Y2U5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlICoqKSwKKyAg
ICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNo
YWRlcikoRDNEU2hhZGVyVHlwZSopKTsKKworICAgIGJvb2wgc2V0VmVydGV4U2hhZGVyKFNoYWRl
cklkIHNoYWRlcik7CisgICAgYm9vbCBzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwor
ICAgIHZvaWQgcmVuZGVyKCk7CisKKyAgICB2b2lkIHNhdmVTdGF0ZSgpOworICAgIHZvaWQgcmVz
dG9yZVN0YXRlKCk7CisgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1TYXZlZFN0YXRlQmxvY2s7
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZFJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbVNhdmVkRGVwdGhTdGVuY2lsOworCisgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEJsaXQpOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0JMSVRfSF8KSW5k
ZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpCdWZmZXIgY2xhc3Ms
IHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKKy8vIGluZGV4IGRhdGEuIElt
cGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8v
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworQnVmZmVyOjpCdWZmZXIoKQor
eworICAgIG1Db250ZW50cyA9IE5VTEw7CisgICAgbVNpemUgPSAwOworICAgIG1Vc2FnZSA9IEdM
X0RZTkFNSUNfRFJBVzsKK30KKworQnVmZmVyOjp+QnVmZmVyKCkKK3sKKyAgICBkZWxldGVbXSBt
Q29udGVudHM7Cit9CisKK3ZvaWQgQnVmZmVyOjpidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEs
IEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKQoreworICAgIGlmIChzaXplID09IDApCisg
ICAgeworICAgICAgICBkZWxldGVbXSBtQ29udGVudHM7CisgICAgICAgIG1Db250ZW50cyA9IE5V
TEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgIT0gbVNpemUpCisgICAgeworICAgICAgICBk
ZWxldGVbXSBtQ29udGVudHM7CisgICAgICAgIG1Db250ZW50cyA9IG5ldyBHTHVieXRlW3NpemVd
OworICAgICAgICBtZW1zZXQobUNvbnRlbnRzLCAwLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAo
ZGF0YSAhPSBOVUxMICYmIHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG1Db250ZW50
cywgZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgbVNpemUgPSBzaXplOworICAgIG1Vc2FnZSA9
IHVzYWdlOworfQorCit2b2lkIEJ1ZmZlcjo6YnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRh
LCBHTHNpemVpcHRyIHNpemUsIEdMaW50cHRyIG9mZnNldCkKK3sKKyAgICBtZW1jcHkobUNvbnRl
bnRzICsgb2Zmc2V0LCBkYXRhLCBzaXplKTsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gQnVmZmVyLmg6IERl
ZmluZXMgdGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRl
eCBhbmQvb3IKKy8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIu
OSBwYWdlIDIxLgorCisjaWZuZGVmIExJQkdMRVNWMl9CVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX0JVRkZFUl9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
KyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEJ1ZmZlcgor
eworICBwdWJsaWM6CisgICAgQnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKKwor
ICAgIHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdM
ZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdM
c2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworICAgIHZvaWQgKmRhdGEoKSB7IHJl
dHVybiBtQ29udGVudHM7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXpl
OyB9CisgICAgR0xlbnVtIHVzYWdlKCkgY29uc3QgeyByZXR1cm4gbVVzYWdlOyB9CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyKTsKKworICAgIEdMdWJ5
dGUgKm1Db250ZW50czsKKyAgICBzaXplX3QgbVNpemU7CisgICAgR0xlbnVtIG1Vc2FnZTsKK307
CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0JVRkZFUl9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTkwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBDb250ZXh0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFn
aW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZworLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMu
IEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0Lgor
CisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4K
KworI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFp
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJC
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L2R4OS5oIgorCisjdW5kZWYgbmVhcgorI3VuZGVmIGZhcgorCituYW1l
c3BhY2UgZ2wKK3sKK0NvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZykK
KyAgICA6IG1Db25maWcoY29uZmlnKQoreworICAgIHNldENsZWFyQ29sb3IoMC4wZiwgMC4wZiwg
MC4wZiwgMC4wZik7CisKKyAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKKyAgICBt
U3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOworCisgICAgbVN0YXRlLmN1bGxGYWNlID0gZmFs
c2U7CisgICAgbVN0YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKKyAgICBtU3RhdGUuZnJvbnRGYWNl
ID0gR0xfQ0NXOworICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuZGVw
dGhGdW5jID0gR0xfTEVTUzsKKyAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsKKyAgICBtU3RhdGUu
c291cmNlQmxlbmRSR0IgPSBHTF9PTkU7CisgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBH
TF9PTkU7CisgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87CisgICAgbVN0YXRlLmRl
c3RCbGVuZEFscGhhID0gR0xfWkVSTzsKKyAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdM
X0ZVTkNfQUREOworICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsK
KyAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdy
ZWVuID0gMDsKKyAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsKKyAgICBtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYSA9IDA7CisgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZmFsc2U7CisgICAg
bVN0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOworICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0g
MDsKKyAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSAtMTsKKyAgICBtU3RhdGUuc3RlbmNpbFdyaXRl
bWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7CisgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0g
LSAxOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOworICAgIG1TdGF0ZS5z
dGVuY2lsRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0g
R0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOworICAg
IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFj
a1Bhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0
aFBhc3MgPSBHTF9LRUVQOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGZhbHNlOwor
ICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsKKyAgICBtU3RhdGUucG9seWdv
bk9mZnNldFVuaXRzID0gMC4wZjsKKyAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0g
ZmFsc2U7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7CisgICAgbVN0YXRlLnNh
bXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBmOworICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVy
dCA9IGZhbHNlOworICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5k
aXRoZXIgPSB0cnVlOworICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NB
UkU7CisKKyAgICBtU3RhdGUubGluZVdpZHRoID0gMS4wZjsKKworICAgIG1TdGF0ZS52aWV3cG9y
dFggPSAwOworICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOworICAgIG1TdGF0ZS52aWV3cG9ydFdp
ZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7CisgICAgbVN0YXRlLnZpZXdwb3J0SGVp
Z2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OworICAgIG1TdGF0ZS56TmVhciA9IDAu
MGY7CisgICAgbVN0YXRlLnpGYXIgPSAxLjBmOworCisgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsK
KyAgICBtU3RhdGUuc2Npc3NvclkgPSAwOworICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBjb25m
aWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGNvbmZp
Zy0+bURpc3BsYXlNb2RlLkhlaWdodDsKKworICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSB0cnVl
OworICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7CisgICAgbVN0YXRlLmNvbG9yTWFz
a0JsdWUgPSB0cnVlOworICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7CisgICAgbVN0
YXRlLmRlcHRoTWFzayA9IHRydWU7CisKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjcgcGFnZSA4MzoKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBh
bmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsCisgICAgLy8gYW5kIGN1YmUg
bWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRo
ZW0uCisgICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJl
cyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlCisgICAgLy8gb2JqZWN0
cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCisKKyAgICBtVGV4dHVyZTJEWmVybyA9IG5ldyBU
ZXh0dXJlMkQodGhpcyk7CisgICAgbVRleHR1cmVDdWJlTWFwWmVybyA9IG5ldyBUZXh0dXJlQ3Vi
ZU1hcCh0aGlzKTsKKworICAgIG1Db2xvcmJ1ZmZlclplcm8gPSBOVUxMOworICAgIG1EZXB0aGJ1
ZmZlclplcm8gPSBOVUxMOworICAgIG1TdGVuY2lsYnVmZmVyWmVybyA9IE5VTEw7CisKKyAgICBt
U3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7CisgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAg
ICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICBiaW5kVGV4dHVyZUN1YmVNYXAo
MCk7CisgICAgYmluZFRleHR1cmUyRCgwKTsKKyAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAg
YmluZFJlbmRlcmJ1ZmZlcigwKTsKKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FN
UExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBmb3IgKGludCBzYW1wbGVy
ID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9
IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNB
TVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgbUluY29tcGxldGVUZXh0
dXJlc1t0eXBlXSA9IE5VTEw7CisgICAgfQorCisgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0g
MDsKKworICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtU3RhdGUudW5wYWNrQWxp
Z25tZW50ID0gNDsKKworICAgIG1CdWZmZXJCYWNrRW5kID0gTlVMTDsKKyAgICBtVmVydGV4RGF0
YU1hbmFnZXIgPSBOVUxMOworICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKKyAgICBtQmxp
dCA9IE5VTEw7CisKKyAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKKyAgICBtSW52YWxpZFZhbHVl
ID0gZmFsc2U7CisgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKKyAgICBtT3V0T2ZNZW1v
cnkgPSBmYWxzZTsKKyAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gZmFsc2U7CisK
KyAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKKworICAgIG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgPSBOVUxMOworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Cit9CisKK0NvbnRleHQ6On5Db250
ZXh0KCkKK3sKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOworCisgICAgZm9yIChpbnQg
dHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOworICAgIH0KKworICAgIGRlbGV0
ZSBtVGV4dHVyZTJEWmVybzsKKyAgICBkZWxldGUgbVRleHR1cmVDdWJlTWFwWmVybzsKKworICAg
IGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJvOworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJaZXJvOwor
ICAgIGRlbGV0ZSBtU3RlbmNpbGJ1ZmZlclplcm87CisKKyAgICBkZWxldGUgbUJ1ZmZlckJhY2tF
bmQ7CisgICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUluZGV4RGF0
YU1hbmFnZXI7CisgICAgZGVsZXRlIG1CbGl0OworCisgICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVt
cHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5m
aXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAg
fQorCisgICAgd2hpbGUgKCFtU2hhZGVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxl
dGVTaGFkZXIobVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUg
KCFtRnJhbWVidWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZUZyYW1lYnVm
ZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUg
KCFtUmVuZGVyYnVmZmVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVSZW5kZXJi
dWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hp
bGUgKCFtVGV4dHVyZU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dHVyZSht
VGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgaWYgKG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUpCisgICAgeworICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxl
YXNlKCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOworCisgICAgaWYgKCFtSGFzQmVlbkN1
cnJlbnQpCisgICAgeworICAgICAgICBtRGV2aWNlQ2FwcyA9IGRpc3BsYXktPmdldERldmljZUNh
cHMoKTsKKworICAgICAgICBtQnVmZmVyQmFja0VuZCA9IG5ldyBEeDlCYWNrRW5kKHRoaXMsIGRl
dmljZSk7CisgICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdl
cih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3
IEluZGV4RGF0YU1hbmFnZXIodGhpcywgbUJ1ZmZlckJhY2tFbmQpOworICAgICAgICBtQmxpdCA9
IG5ldyBCbGl0KHRoaXMpOworCisgICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKKworICAg
ICAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKKyAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7
CisgICAgICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAg
ICAgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAg
ICAgICAgbVN0YXRlLnNjaXNzb3JYID0gMDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0gMDsK
KyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7CisgICAg
ICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7CisKKyAgICAg
ICAgbUhhc0JlZW5DdXJyZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBXcmFwIHRoZSBleGlz
dGluZyBEaXJlY3QzRCA5IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2lnbiB0aGVt
IHRvIHRoZSAnMCcgbmFtZXMKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRh
cmdldCA9IHN1cmZhY2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXB0aFN0ZW5jaWwgPSBzdXJmYWNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICBDb2xvcmJ1
ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJn
ZXQpOworICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhidWZmZXIo
ZGVwdGhTdGVuY2lsKTsKKyAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyWmVybyA9IG5l
dyBTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7CisKKyAgICBzZXRGcmFtZWJ1ZmZlclplcm8o
ZnJhbWVidWZmZXJaZXJvKTsKKyAgICBzZXRDb2xvcmJ1ZmZlclplcm8oY29sb3JidWZmZXJaZXJv
KTsKKyAgICBzZXREZXB0aGJ1ZmZlclplcm8oZGVwdGhidWZmZXJaZXJvKTsKKyAgICBzZXRTdGVu
Y2lsYnVmZmVyWmVybyhzdGVuY2lsYnVmZmVyWmVybyk7CisKKyAgICBmcmFtZWJ1ZmZlclplcm8t
PnNldENvbG9yYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJv
LT5zZXREZXB0aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAgIGZyYW1lYnVmZmVyWmVy
by0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworCisgICAgZGVmYXVsdFJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgaWYgKGRlcHRoU3RlbmNpbCkKKyAgICB7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAobURl
dmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCkpCisgICAg
eworICAgICAgICBtUHNQcm9maWxlID0gInBzXzNfMCI7CisgICAgICAgIG1Wc1Byb2ZpbGUgPSAi
dnNfM18wIjsKKyAgICB9CisgICAgZWxzZSAgLy8gZWdsOjpEaXNwbGF5IGd1YXJhbnRlZXMgc3Vw
cG9ydCBmb3IgYXQgbGVhc3QgMi4wCisgICAgeworICAgICAgICBtUHNQcm9maWxlID0gInBzXzJf
MCI7CisgICAgICAgIG1Wc1Byb2ZpbGUgPSAidnNfMl8wIjsKKyAgICB9CisKKyAgICBtYXJrQWxs
U3RhdGVEaXJ0eSgpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUg
c3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhhdCBhbGwgc3RhdGUgaXMgc2V0IGR1cmlu
ZyBuZXh0IHByZS1kcmF3Lgordm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCit7Cisg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkRGVwdGhidWZm
ZXJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkUHJvZ3JhbSA9IDA7CisKKyAgICBtQ2xlYXJTdGF0
ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EZXB0aFN0
YXRlRGlydHkgPSB0cnVlOworICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbUJsZW5k
U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBt
UG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9
IHRydWU7CisgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIG1EaXRoZXJTdGF0ZURp
cnR5ID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwg
ZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQoreworICAgIG1TdGF0ZS5jb2xv
ckNsZWFyVmFsdWUucmVkID0gcmVkOworICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4g
PSBncmVlbjsKKyAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOworICAgIG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEgPSBhbHBoYTsKK30KKwordm9pZCBDb250ZXh0Ojpz
ZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKQoreworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUg
PSBkZXB0aDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwp
Cit7CisgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNpbDsKK30KKwordm9pZCBD
b250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5jdWxs
RmFjZSAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxl
ZDsKKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29u
dGV4dDo6aXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuY3Vs
bEZhY2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCit7Cisg
ICAgaWYgKG1TdGF0ZS5jdWxsTW9kZSAhPSBtb2RlKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmN1
bGxNb2RlID0gbW9kZTsKKyAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCkKK3sKKyAgICBpZiAo
bVN0YXRlLmZyb250RmFjZSAhPSBmcm9udCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5mcm9udEZh
Y2UgPSBmcm9udDsKKyAgICAgICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0
YXRlLmRlcHRoVGVzdCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmRlcHRoVGVz
dCA9IGVuYWJsZWQ7CisgICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30K
KworYm9vbCBDb250ZXh0Ojppc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtU3RhdGUuZGVwdGhUZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVu
dW0gZGVwdGhGdW5jKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykK
KyAgICB7CisgICAgICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7CisgICAgICAgIG1E
ZXB0aFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0
aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKQoreworICAgIG1TdGF0ZS56TmVhciA9IHpO
ZWFyOworICAgIG1TdGF0ZS56RmFyID0gekZhcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVu
ZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQorICAg
IHsKKyAgICAgICAgbVN0YXRlLmJsZW5kID0gZW5hYmxlZDsKKyAgICAgICAgbUJsZW5kU3RhdGVE
aXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmJsZW5kOworfQorCit2b2lkIENvbnRleHQ6OnNl
dEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNv
dXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKQoreworICAgIGlmIChtU3RhdGUuc291cmNlQmxl
bmRSR0IgIT0gc291cmNlUkdCIHx8CisgICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9
IHNvdXJjZUFscGhhIHx8CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8
fAorICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgIT0gZGVzdEFscGhhKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kUkdCID0gc291cmNlUkdCOworICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEg
PSBzb3VyY2VBbHBoYTsKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhh
OworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBm
bG9hdCBhbHBoYSkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAor
ICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3Rh
dGUuYmxlbmRDb2xvci5ibHVlICE9IGJsdWUgfHwKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3Iu
YWxwaGEgIT0gYWxwaGEpCisgICAgeworICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSBy
ZWQ7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gZ3JlZW47CisgICAgICAgIG1T
dGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBibHVlOworICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5h
bHBoYSA9IGFscGhhOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdM
ZW51bSBhbHBoYUVxdWF0aW9uKQoreworICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAh
PSByZ2JFcXVhdGlvbiB8fAorICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFs
cGhhRXF1YXRpb24pCisgICAgeworICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJn
YkVxdWF0aW9uOworICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVh
dGlvbjsKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRl
LnN0ZW5jaWxUZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbFRl
c3QgPSBlbmFibGVkOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0K
K30KKworYm9vbCBDb250ZXh0Ojppc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TdGF0ZS5zdGVuY2lsVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2ls
UGFyYW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5j
aWxNYXNrKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gc3RlbmNpbFJlZiB8fAorICAgICAgICBtU3Rh
dGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNpbE1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuc3Rl
bmNpbEZ1bmMgPSBzdGVuY2lsRnVuYzsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3Rl
bmNpbFJlZiA+IDApID8gc3RlbmNpbFJlZiA6IDA7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFz
ayA9IHN0ZW5jaWxNYXNrOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAg
IH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNp
bEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykK
K3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwK
KyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8CisgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgIT0gc3RlbmNpbEJhY2tNYXNrKQorICAgIHsKKyAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKKyAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gKHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFj
a1JlZiA6IDA7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01h
c2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCit7
CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCisg
ICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7
CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENv
bnRleHQ6OnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFz
aykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNr
V3JpdGVtYXNrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0g
c3RlbmNpbEJhY2tXcml0ZW1hc2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7
CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBz
dGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBh
c3NEZXB0aFBhc3MpCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFp
bCB8fAorICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NE
ZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5j
aWxQYXNzRGVwdGhQYXNzKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3Rl
bmNpbEZhaWw7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQ
YXNzRGVwdGhGYWlsOworICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVu
Y2lsUGFzc0RlcHRoUGFzczsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBz
dGVuY2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBz
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCit7CisgICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgIT0gc3RlbmNpbEJhY2tGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NE
ZXB0aEZhaWwgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsIHx8CisgICAgICAgIG1TdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQorICAg
IHsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKKyAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0Rl
cHRoRmFpbDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzczsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsK
KyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFi
bGVkKQoreworICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKKyAg
ICB7CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7CisgICAgICAg
IG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRl
eHQ6OmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLnBvbHlnb25PZmZzZXRGaWxsOworCit9CisKK3ZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9m
ZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBpZiAobVN0
YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgIT0gZmFjdG9yIHx8CisgICAgICAgIG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0VW5pdHMgIT0gdW5pdHMpCisgICAgeworICAgICAgICBtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvciA9IGZhY3RvcjsKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9
IHVuaXRzOworICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0K
K30KKwordm9pZCBDb250ZXh0OjpzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVk
KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCisg
ICAgeworICAgICAgICBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKKyAg
ICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0
Ojppc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBs
ZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdl
ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFi
bGVkOworICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29s
IENvbnRleHQ6OmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN0YXRlLnNhbXBsZUNvdmVyYWdlOworfQorCit2b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVy
YWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBpZiAobVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gdmFsdWUgfHwKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNv
dmVyYWdlSW52ZXJ0ICE9IGludmVydCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3Zl
cmFnZVZhbHVlID0gdmFsdWU7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9
IGludmVydDsKKyAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1T
dGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNz
b3JUZXN0ID0gZW5hYmxlZDsKKyAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAg
ICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUuc2Npc3NvclRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGl0
aGVyKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQor
ICAgIHsKKyAgICAgICAgbVN0YXRlLmRpdGhlciA9IGVuYWJsZWQ7CisgICAgICAgIG1EaXRoZXJT
dGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFi
bGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLmRpdGhlcjsKK30KKwordm9pZCBDb250
ZXh0OjpzZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKK3sKKyAgICBtU3RhdGUubGluZVdpZHRo
ID0gd2lkdGg7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51
bSBoaW50KQoreworICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OworfQorCit2
b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4OworICAg
IG1TdGF0ZS52aWV3cG9ydFkgPSB5OworICAgIG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lkdGg7
CisgICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gaGVpZ2h0OworfQorCit2b2lkIENvbnRleHQ6
OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCit7CisgICAgaWYgKG1TdGF0ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5zY2lz
c29yWSAhPSB5IHx8IAorICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1T
dGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdodCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zY2lz
c29yWCA9IHg7CisgICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IHk7CisgICAgICAgIG1TdGF0ZS5z
Y2lzc29yV2lkdGggPSB3aWR0aDsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBi
b29sIGFscGhhKQoreworICAgIGlmIChtU3RhdGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBtU3Rh
dGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4gfHwKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGEgIT0gYWxwaGEpCisgICAgeworICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gcmVkOworICAgICAgICBtU3RhdGUuY29sb3JNYXNr
R3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOworICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSBhbHBoYTsKKyAgICAgICAgbU1hc2tTdGF0ZURp
cnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJvb2wg
bWFzaykKK3sKKyAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAhPSBtYXNrKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7CisgICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2
ZSkKK3sKKyAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKK30KKworR0x1aW50IENv
bnRleHQ6OmdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRl
LmZyYW1lYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlcjsKK30KKworR0x1aW50
IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLmFycmF5QnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJs
ZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK2NvbnN0
IEF0dHJpYnV0ZVN0YXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtKQoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV07Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKK3sKKyAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyID0gYm91bmRCdWZmZXI7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKKyAgICBtU3RhdGUu
dmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOworICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKK30KKwor
Y29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQg
YXR0cmliTnVtKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubVBvaW50ZXI7Cit9CisKKy8vIHJldHVybnMgZW50aXJlIHNldCBvZiBhdHRyaWJ1
dGVzIGFzIGEgYmxvY2sKK2NvbnN0IEF0dHJpYnV0ZVN0YXRlICpDb250ZXh0OjpnZXRWZXJ0ZXhB
dHRyaWJCbG9jaygpCit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Cit9CisK
K3ZvaWQgQ29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAg
bVN0YXRlLnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cit9CisKK0dMaW50IENvbnRleHQ6Omdl
dFBhY2tBbGlnbm1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVu
dDsKK30KKwordm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50
KQoreworICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Cit9CisKK0dMaW50
IENvbnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0
ZS51bnBhY2tBbGlnbm1lbnQ7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIGJ1ZmZlciBuYW1l
CitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFu
ZGxlID0gMTsKKworICAgIHdoaWxlIChtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtQnVmZmVy
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbUJ1ZmZl
ck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVy
bnMgYW4gdW51c2VkIHNoYWRlci9wcm9ncmFtIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVT
aGFkZXIoR0xlbnVtIHR5cGUpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAg
ICB3aGlsZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQoKSB8fCBt
UHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkpICAgLy8gU2hhcmVk
IG5hbWUgc3BhY2UKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIGlmICh0
eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRs
ZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgaWYg
KHR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgbVNoYWRlck1hcFto
YW5kbGVdID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMg
YW4gdW51c2VkIHByb2dyYW0vc2hhZGVyIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVQcm9n
cmFtKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtUHJv
Z3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5m
aW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQor
ICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbVByb2dyYW1NYXBbaGFuZGxl
XSA9IG5ldyBQcm9ncmFtKCk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5z
IGFuIHVudXNlZCB0ZXh0dXJlIG5hbWUKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkK
K3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtVGV4dHVyZU1h
cC5maW5kKGhhbmRsZSkgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5k
bGUrKzsKKyAgICB9CisKKyAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJl
dHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUK
K0dMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50
IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAh
PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9
CisKKyAgICBtRnJhbWVidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFu
ZGxlOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1aW50
IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRs
ZSA9IDE7CisKKyAgICB3aGlsZSAobVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSkgIT0gbVJl
bmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKwor
ICAgIG1SZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAg
IEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZl
cik7CisKKyAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgewor
ICAgICAgICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgYnVmZmVyT2Jq
ZWN0LT5zZWNvbmQ7CisgICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCit7Cisg
ICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hh
ZGVyKTsKKworICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkKKyAgICB7
CisgICAgICAgIGlmICghc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmlzQXR0YWNoZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25kOworICAgICAgICAg
ICAgbVNoYWRlck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JE
ZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3Jh
bU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7CisKKyAgICBpZiAocHJvZ3JhbU9i
amVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlmIChwcm9ncmFtICE9
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHBy
b2dyYW1PYmplY3QtPnNlY29uZDsKKyAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dy
YW1PYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQor
eworICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBtVGV4dHVyZU1hcC5m
aW5kKHRleHR1cmUpOworCisgICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRleHR1cmVNYXAuZW5k
KCkpCisgICAgeworICAgICAgICBkZXRhY2hUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgIGlm
ICh0ZXh0dXJlICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2Jq
ZWN0LT5zZWNvbmQ7CisgICAgICAgIH0KKworICAgICAgICBtVGV4dHVyZU1hcC5lcmFzZSh0ZXh0
dXJlT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIo
R0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFt
ZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKKworICAg
IGlmIChmcmFtZWJ1ZmZlck9iamVjdCAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCisgICAgewor
ICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgZGVsZXRl
IGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFz
ZShmcmFtZWJ1ZmZlck9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6
aXRlcmF0b3IgcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKHJlbmRl
cmJ1ZmZlcik7CisKKyAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5kZXJidWZmZXJN
YXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKKworICAgICAgICBkZWxldGUgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAg
IG1SZW5kZXJidWZmZXJNYXAuZXJhc2UocmVuZGVyYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCit7Cisg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKKyAgICB7CisgICAgICAg
IG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtU3RhdGUu
YXJyYXlCdWZmZXIgPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJh
eUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQoreworICAgIGlmIChidWZmZXIgIT0gMCAmJiAh
Z2V0QnVmZmVyKGJ1ZmZlcikpCisgICAgeworICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBu
ZXcgQnVmZmVyKCk7CisgICAgfQorCisgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1
ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQor
eworICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCisgICAgewor
ICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IG5ldyBUZXh0dXJlMkQodGhpcyk7CisgICAg
fQorCisgICAgbVN0YXRlLnRleHR1cmUyRCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUuc2FtcGxl
clRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdID0gdGV4dHVyZTsKK30K
Kwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpCit7Cisg
ICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAg
ICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAg
IH0KKworICAgIG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9IHRleHR1cmU7CisKKyAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0
dXJlOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpCit7CisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCisgICAgeworICAg
ICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Cisg
ICAgfQorCisgICAgbVN0YXRlLmZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Cit9CisKK3ZvaWQg
Q29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlm
IChyZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisg
ICAgeworICAgICAgICBtUmVuZGVyYnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSBuZXcgUmVuZGVy
YnVmZmVyKCk7CisgICAgfQorCisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZl
cjsKK30KKwordm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgR0x1
aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsKKyAgICBtU3RhdGUuY3Vy
cmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAgIC8vIE11c3Qgc3dpdGNoIGJlZm9y
ZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25seSBnZXRzIGZsYWdnZWQuCisKKyAg
ICBpZiAocHJvZ3JhbU9iamVjdCAmJiBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlv
bigpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUHJvZ3JhbShwcmlvclByb2dyYW0pOworICAgIH0K
K30KKwordm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZl
cikKK3sKKyAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOworICAgIG1GcmFtZWJ1ZmZlck1h
cFswXSA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRDb2xvcmJ1ZmZlclplcm8oQ29s
b3JidWZmZXIgKmJ1ZmZlcikKK3sKKyAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKKyAgICBt
Q29sb3JidWZmZXJaZXJvID0gYnVmZmVyOworfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoYnVm
ZmVyWmVybyhEZXB0aGJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0ZSBtRGVwdGhidWZmZXJa
ZXJvOworICAgIG1EZXB0aGJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbGJ1ZmZlclplcm8oU3RlbmNpbGJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0
ZSBtU3RlbmNpbGJ1ZmZlclplcm87CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gYnVmZmVyOwor
fQorCit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlcihSZW5kZXJidWZmZXIgKmJ1ZmZlcikK
K3sKKyAgICBkZWxldGUgbVJlbmRlcmJ1ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXTsKKyAg
ICBtUmVuZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdID0gYnVmZmVyOworfQorCitC
dWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIEJ1
ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAg
ICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vj
b25kOworICAgIH0KK30KKworU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKK3sKKyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJNYXAu
ZmluZChoYW5kbGUpOworCisgICAgaWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBzaGFkZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1Byb2dyYW0gKkNvbnRleHQ6Omdl
dFByb2dyYW0odW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRv
ciBwcm9ncmFtID0gbVByb2dyYW1NYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHByb2dyYW0g
PT0gbVByb2dyYW1NYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW0tPnNlY29uZDsKKyAgICB9
Cit9CisKK1RleHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkK
K3sKKyAgICBpZiAoaGFuZGxlID09IDApIHJldHVybiBOVUxMOworCisgICAgVGV4dHVyZU1hcDo6
aXRlcmF0b3IgdGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmICh0
ZXh0dXJlID09IG1UZXh0dXJlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7
CisgICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWdu
ZWQgaW50IGhhbmRsZSkKK3sKKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZm
ZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZyYW1lYnVmZmVy
ID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29u
ZDsKKyAgICB9Cit9CisKK1JlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKHVu
c2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5k
ZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChyZW5k
ZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyYnVm
ZmVyLT5zZWNvbmQ7CisgICAgfQorfQorCitDb2xvcmJ1ZmZlciAqQ29udGV4dDo6Z2V0Q29sb3Ji
dWZmZXIoR0x1aW50IGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlICE9IDApCisgICAgeworICAg
ICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGdldFJlbmRlcmJ1ZmZlcihoYW5kbGUp
OworCisgICAgICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVm
ZmVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2xvcmJ1
ZmZlcio+KHJlbmRlcmJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAgIC8vIFNw
ZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRhcmdldHMg
YmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlclplcm87CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0RlcHRoYnVmZmVy
ICpDb250ZXh0OjpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5k
bGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0
UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5k
ZXJidWZmZXItPmlzRGVwdGhidWZmZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PERlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5p
dGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNlZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCisgICAgewor
ICAgICAgICByZXR1cm4gbURlcHRoYnVmZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVM
TDsKK30KKworU3RlbmNpbGJ1ZmZlciAqQ29udGV4dDo6Z2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQg
aGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgICAg
aWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RlbmNpbGJ1ZmZlcio+KHJl
bmRlcmJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1TdGVuY2lsYnVmZmVyWmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30K
KworQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEJ1
ZmZlcihtU3RhdGUuYXJyYXlCdWZmZXIpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGdldEJ1ZmZlcihtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyKTsKK30KKworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQor
eworICAgIHJldHVybiBnZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Cit9CisKK1Rl
eHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkKK3sKKyAgICBpZiAobVN0YXRlLnRleHR1
cmUyRCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRp
YWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1U
ZXh0dXJlMkRaZXJvOworICAgIH0KKworICAgIHJldHVybiAoVGV4dHVyZTJEKilnZXRUZXh0dXJl
KG1TdGF0ZS50ZXh0dXJlMkQpOworfQorCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4
dHVyZUN1YmVNYXAoKQoreworICAgIGlmIChtU3RhdGUudGV4dHVyZUN1YmVNYXAgPT0gMCkgICAv
LyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJh
c2VkIG9uIHRoZSB0YXJnZXQKKyAgICB7CisgICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBa
ZXJvOworICAgIH0KKworICAgIHJldHVybiAoVGV4dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0
YXRlLnRleHR1cmVDdWJlTWFwKTsKK30KKworVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRl
eHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgR0x1
aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdOworCisgICAg
aWYgKHRleGlkID09IDApCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIGNhc2UgU0FNUExF
Ul8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvOworICAgICAgICAgIGNhc2UgU0FNUExFUl9DVUJF
OiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBnZXRUZXh0dXJlKHRleGlkKTsKK30KKworRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZy
YW1lYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRlLmZyYW1lYnVm
ZmVyKTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9v
bGVhbiAqcGFyYW1zKQoreworICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBH
TF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZF
UlQ6ICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydDsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmRlcHRoTWFzazsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9X
UklURU1BU0s6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvck1hc2tSZWQ7CisgICAg
ICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVlbjsKKyAgICAgICAgcGFyYW1zWzJd
ID0gbVN0YXRlLmNvbG9yTWFza0JsdWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xv
ck1hc2tBbHBoYTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsKKyAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRklMTDogICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxs
OworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7CisgICAgICBjYXNlIEdM
X1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxUZXN0OworICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhUZXN0OworICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQ7CisgICAgICBjYXNlIEdMX0RJVEhFUjog
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQor
eworICAgIC8vIFBsZWFzZSBub3RlOiBERVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBv
dXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGltcGxlbWVudGF0aW9uCisgICAgLy8gYmVjYXVzZSBpdCBp
cyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAg
c3BlYyBuYW1lcworICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rp
b24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkKKyAgICAvLyBjYXNlLCB0
aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24u
CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5saW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX0NMRUFS
X1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAg
cGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU47CisgICAgICAgIHBh
cmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICBwYXJh
bXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1z
WzFdID0gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKKyAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpO
ZWFyOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLnJlZDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5ibHVlOworICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFs
cGhhOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CisgICAgICAg
IHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKKyAgICAgICAgcGFyYW1zWzFdID0g
bVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW47CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5ibGVu
ZENvbG9yLmJsdWU7CisgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhh
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2Vy
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgLy8gUGxlYXNlIG5vdGU6IERF
UFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0SW50ZWdl
cnYgaW1wbGVtZW50YXRpb24KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZsb2F0
LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCisgICAgLy8g
R2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQgcmVx
dWlyZSBjb252ZXJzaW9uIGluIGFueQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ugbm8g
ZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91IG1heSBmaW5kIGl0IGlu
IAorICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4KKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMg
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IGdsOjpNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9W
QVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WQVJZSU5HX1ZF
Q1RPUlM7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnbDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6ICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAq
cGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBn
bDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzsgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9NQVhfUkVOREVSQlVGRkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfUkVO
REVSQlVGRkVSX1NJWkU7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVY
VFVSRV9GT1JNQVRTOiAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzog
Lyogbm8gY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFk
ZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuYXJyYXlCdWZmZXI7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyYW1lYnVmZmVyOyAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5F
UkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1p
cG1hcEhpbnQ7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJF
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xf
VEVYVFVSRTApOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxV
RV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbDsgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bEJhY2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NE
ZXB0aEZhaWw7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxF
TkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5k
UkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQ
SEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFy
VmFsdWU7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX1NJWkU7ICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpw
YXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOyAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7
CisgICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoKGludClnbDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFLCAoaW50KWdsOjpNQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAg
IHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsKKyAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERp
bWVuc2lvbjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVklFV1BP
UlQ6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7CisgICAgICAgIHBhcmFt
c1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52aWV3
cG9ydFdpZHRoOworICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKKyAgICAgICAgcGFyYW1z
WzBdID0gbVN0YXRlLnNjaXNzb3JYOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Npc3Nv
clk7CisgICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7CisgICAgICAgIHBh
cmFtc1szXSA9IG1TdGF0ZS5zY2lzc29ySGVpZ2h0OworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
Y3VsbE1vZGU7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJPTlRfRkFD
RTogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6CisgICAgICBjYXNlIEdM
X0dSRUVOX0JJVFM6CisgICAgICBjYXNlIEdMX0JMVUVfQklUUzoKKyAgICAgIGNhc2UgR0xfQUxQ
SEFfQklUUzoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKmNv
bG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgICAg
IGlmIChjb2xvcmJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVE
X0JJVFM6ICAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZl
ci0+Z2V0R3JlZW5TaXplKCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVF
X0JJVFM6ICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVy
LT5nZXRBbHBoYVNpemUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9ERVBUSF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0
aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKwor
ICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NURU5DSUxfQklUUzoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3Rl
bmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
KCk7CisKKyAgICAgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBs
ZXIgPiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgLSAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdf
Q1VCRV9NQVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxl
ciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9D
VUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBw
bmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKK3sKKyAgICAvLyBQ
bGVhc2Ugbm90ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVF
IGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAvLyBpcyBGTE9BVCByYXRoZXIgdGhhbiBJTlQs
IGFzIHdvdWxkIGJlIHN1Z2dlc3RlZCBieSB0aGUgR0wgRVMgMi4wIHNwZWMuIFRoaXMgaXMgZHVl
CisgICAgLy8gdG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZs
b2F0LCBhbmQgc28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uCisgICAgLy8gaWYgcmV0dXJuZWQg
ZnJvbSBDb250ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVh
ZHkgaW1wbGVtZW50ZWQgCisgICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBvbmUgY2FsbHMgZ2xHZXRJ
bnRlZ2VydiB0byByZXRyaWV2ZSBhIGZsb2F0LXR5cGVkIHN0YXRlIHZhcmlhYmxlLCB3ZQorICAg
IC8vIHBsYWNlIERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQg
bWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nCisgICAgLy8gYXBwbGljYXRpb24uCisg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTOiAvKiBubyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVk
ICovIAorICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIHsKKyAg
ICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNl
IEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAgICAgY2FzZSBHTF9NQVhfUkVO
REVSQlVGRkVSX1NJWkU6CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6
CisgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgIGNh
c2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0JJ
TkRJTkc6CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBH
TF9DVVJSRU5UX1BST0dSQU06CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgorICAgICAg
Y2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBf
SElOVDoKKyAgICAgIGNhc2UgR0xfUkVEX0JJVFM6CisgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6
CisgICAgICBjYXNlIEdMX0JMVUVfQklUUzoKKyAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKKyAg
ICAgIGNhc2UgR0xfREVQVEhfQklUUzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgorICAg
ICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9D
VUxMX0ZBQ0VfTU9ERToKKyAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRToKKyAgICAgIGNhc2UgR0xf
QUNUSVZFX1RFWFRVUkU6CisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9GQUlMOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhf
RkFJTDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GVU5DOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZB
SUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICBj
YXNlIEdMX0RFUFRIX0ZVTkM6CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6CisgICAgICBj
YXNlIEdMX0JMRU5EX1NSQ19BTFBIQToKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoKKyAg
ICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElP
Tl9SR0I6CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOgorICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1dSSVRFTUFTSzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgIGNhc2UgR0xfU1VC
UElYRUxfQklUUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2Ug
R0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZF
UlM6CisgICAgICBjYXNlIEdMX1NBTVBMRVM6CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfVFlQRToKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9GT1JNQVQ6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgewor
ICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CisgICAg
ICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdM
X0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6CisgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoKKyAgICAg
IGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBE
SVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLAorICAgICAgY2FzZSBHTF9QT0xZR09OX09G
RlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIEdldHtU
eXBlfXYgcXVlcmllcy4KKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAv
LyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFs
CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9U
RVNUOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6CisgICAgICBjYXNlIEdMX0RFUFRIX1RF
U1Q6CisgICAgICBjYXNlIEdMX0JMRU5EOgorICAgICAgY2FzZSBHTF9ESVRIRVI6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9XUklU
RU1BU0s6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOgorICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgICBjYXNl
IEdMX0RFUFRIX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgorICAgICAg
ICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMSUFTRURf
TElORV9XSURUSF9SQU5HRToKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
OgorICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5
cGUgPSBHTF9GTE9BVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgIGNh
c2UgR0xfQkxFTkRfQ09MT1I6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfRkxP
QVQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBk
ZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQKKy8vIHNjaXNzb3Ig
cmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQorYm9vbCBDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQoreworICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2Jq
ZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwg
ZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgp
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhTdGVuY2lsKCk7CisKKyAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOworICAgIGlm
IChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwpCisgICAg
eworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXQpOworICAg
ICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdldFNlcmlhbDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9i
amVjdC0+Z2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwg
IT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCkKKyAgICB7CisgICAgICAgIGRldmljZS0+U2V0
RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOworICAgICAgICBtQXBwbGllZERlcHRo
YnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgfQorCisgICAgRDNEVklFV1BP
UlQ5IHZpZXdwb3J0OworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJlbmRlclRhcmdl
dC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICBpZiAoaWdub3JlVmlld3BvcnQpCisgICAgeworICAg
ICAgICB2aWV3cG9ydC5YID0gMDsKKyAgICAgICAgdmlld3BvcnQuWSA9IDA7CisgICAgICAgIHZp
ZXdwb3J0LldpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gZGVz
Yy5IZWlnaHQ7CisgICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOworICAgICAgICB2aWV3cG9y
dC5NYXhaID0gMS4wZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmlld3BvcnQu
WCA9IHN0ZDo6bWF4KG1TdGF0ZS52aWV3cG9ydFgsIDApOworICAgICAgICB2aWV3cG9ydC5ZID0g
c3RkOjptYXgobVN0YXRlLnZpZXdwb3J0WSwgMCk7CisgICAgICAgIHZpZXdwb3J0LldpZHRoID0g
c3RkOjptaW4obVN0YXRlLnZpZXdwb3J0V2lkdGgsIChpbnQpZGVzYy5XaWR0aCAtIChpbnQpdmll
d3BvcnQuWCk7CisgICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IHN0ZDo6bWluKG1TdGF0ZS52aWV3
cG9ydEhlaWdodCwgKGludClkZXNjLkhlaWdodCAtIChpbnQpdmlld3BvcnQuWSk7CisgICAgICAg
IHZpZXdwb3J0Lk1pblogPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7CisgICAgICAgIHZpZXdwb3J0
Lk1heFogPSBjbGFtcDAxKG1TdGF0ZS56RmFyKTsKKyAgICB9CisKKyAgICBpZiAodmlld3BvcnQu
V2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgorICAgIH0KKworICAgIGRldmljZS0+U2V0
Vmlld3BvcnQoJnZpZXdwb3J0KTsKKworICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkpCisgICAg
eworICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQorICAgICAgICB7CisgICAgICAgICAg
ICBSRUNUIHJlY3QgPSB7bVN0YXRlLnNjaXNzb3JYLAorICAgICAgICAgICAgICAgICAgICAgICAg
IG1TdGF0ZS5zY2lzc29yWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3Nv
clggKyBtU3RhdGUuc2Npc3NvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0
ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0fTsKKworICAgICAgICAgICAgZGV2aWNl
LT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bVNjaXNzb3JTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRD
dXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgIEdMaW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFt
T2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IHh5
WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07Cisg
ICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgKEdM
ZmxvYXQqKSZ4eSk7CisKKyAgICAgICAgR0xpbnQgd2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
RHhXaW5kb3dMb2NhdGlvbigpOworICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZp
ZXdwb3J0V2lkdGggLyAyLjBmLCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmll
d3BvcnRXaWR0aCAvIDIuMGYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0
YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OworICAgICAgICBw
cm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtNGZ2KHdpbmRvdywgMSwgKEdMZmxvYXQqKSZ3aHh5KTsK
KworICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhMb2NhdGlv
bigpOworICAgICAgICBHTGZsb2F0IGR6WzJdID0geyhtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVh
cikgLyAyLjBmLCAobVN0YXRlLnpOZWFyICsgbVN0YXRlLnpGYXIpIC8gMi4wZn07CisgICAgICAg
IHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIChHTGZsb2F0KikmZHopOwor
CisgICAgICAgIEdMaW50IG5lYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlTmVhckxv
Y2F0aW9uKCk7CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYobmVhciwgMSwg
Jm1TdGF0ZS56TmVhcik7CisKKyAgICAgICAgR0xpbnQgZmFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0
RGVwdGhSYW5nZUZhckxvY2F0aW9uKCk7CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZv
cm0xZnYoZmFyLCAxLCAmbVN0YXRlLnpGYXIpOworCisgICAgICAgIEdMaW50IGRpZmYgPSBwcm9n
cmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQg
ekRpZmYgPSBtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcjsKKyAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTFmdihkaWZmLCAxLCAmekRpZmYpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisvLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlvbiBzdGF0ZSAoY3VsbGluZywg
ZGVwdGggdGVzdCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcsIGV0YykgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCit2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQor
eworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworICAgIFByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgR0xpbnQgZnJv
bnRDQ1cgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKKyAgICBHTGlu
dCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOworICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOworCisgICAgR0xpbnQgcG9pbnRzT3JM
aW5lcyA9IHByb2dyYW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7CisgICAg
R0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOworICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsK
KworICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQorICAgIHsKKyAg
ICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZSht
U3RhdGUuY3VsbE1vZGUsIG1TdGF0ZS5mcm9udEZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgICAgIH0KKworICAgICAgICBtQ3VsbFN0YXRl
RGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKKyAgICB7
CisgICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RSVUUpOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgZXMyZHg6OkNvbnZlcnRD
b21wYXJpc29uKG1TdGF0ZS5kZXB0aEZ1bmMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRDNEWkJfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQorICAgIHsKKyAgICAg
ICAgaWYgKG1TdGF0ZS5ibGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKKworICAgICAgICAgICAg
aWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUu
c291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCisgICAgICAg
ICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3Rh
dGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5E
RkFDVE9SLCBlczJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5ibGVuZENvbG9yKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1
bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4
PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3Rh
dGUuYmxlbmRDb2xvci5hbHBoYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0
YXRlLnNvdXJjZUJsZW5kUkdCKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0RFU1RCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVu
ZFJHQikpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9Q
LCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKKworICAg
ICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRB
bHBoYSB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5k
ZXN0QmxlbmRBbHBoYSB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJH
QiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5B
QkxFLCBUUlVFKTsKKworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1JDQkxFTkRBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEpKTsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5k
QWxwaGEpKTsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxw
aGEpKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8
IG1Gcm9udEZhY2VEaXJ0eSkKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
JiYgaGFzU3RlbmNpbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOworICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkKKyAgICAgICAgICAgIGNvbnN0IEQz
RFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7
CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxN
QVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7CisgICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFU
RVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNL
OworICAgICAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAh
PSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgCisgICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5j
aWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVm
ZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBX
ZWJHTC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6
ZSBvZiB0aGUgc3RlbmNpbCByZWYKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OlN0ZW5jaWxidWZmZXIg
KnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAg
ICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2ls
U2l6ZSgpKSAtIDE7CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRl
LmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NX
X1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNp
bEZ1bmMpKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJF
RiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5j
aWxSZWYgOiBtYXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0ND
V19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9w
KG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNT
IDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
KSk7CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFj
ZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdS
SVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5D
SUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmMpKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAo
bVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5j
aWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJT
X0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7CisKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJT
X1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxC
YWNrRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxa
RkFJTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJT
X1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzcykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBG
QUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENv
bG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNr
QWxwaGEpKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFC
TEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOworCisgICAgICAgIG1NYXNrU3Rh
dGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGly
dHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6RGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RnJhbWVi
dWZmZXIoKS0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRG
YWN0b3IpKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUu
cG9seWdvbk9mZnNldFVuaXRzLCAtKGludCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7
CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMs
ICooKERXT1JEKikmZGVwdGhCaWFzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsIDApOworICAgICAgICB9CisKKyAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1Db25maWctPm1N
dWx0aVNhbXBsZSAhPSAwICYmIG1TYW1wbGVTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYg
KG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZJ
WE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEZJWE1FKCJTYW1wbGUgY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1EaXRoZXJTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0Up
OworCisgICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAgfQorCisgICAgbUZy
b250RmFjZURpcnR5ID0gZmFsc2U7Cit9CisKKy8vIEZpbGwgaW4gdGhlIHNlbWFudGljSW5kZXgg
ZmllbGQgb2YgdGhlIGFycmF5IG9mIFRyYW5zbGF0ZWRBdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBh
Y3RpdmUgR0xTTCBwcm9ncmFtLgordm9pZCBDb250ZXh0Ojpsb29rdXBBdHRyaWJ1dGVNYXBwaW5n
KFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1
dGVzW2ldLmVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXNbaV0uc2Vt
YW50aWNJbmRleCA9IGdldEN1cnJlbnRQcm9ncmFtKCktPmdldFNlbWFudGljSW5kZXgoaSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihH
TGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5n
LCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJp
YnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0g
bVZlcnRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShmaXJzdCwgY291bnQsIHRyYW5z
bGF0ZWQpOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKworICAgIGxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcodHJhbnNsYXRlZCk7
CisKKyAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xhdGVk
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisg
ICAgeworICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5lbmFibGVkICYmIHRyYW5zbGF0ZWRbaV0u
bm9uQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IG1JbmRleERhdGFNYW5hZ2Vy
LT5wcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChtb2RlLCBjb3VudCwgaW5kZXhJbmZvKTsKKyAg
ICAgICAgICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUJ1ZmZl
ckJhY2tFbmQtPnNldHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisKKyAgICAgICAgICAg
ICp1c2VJbmRleGluZyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAqdXNlSW5kZXhpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4g
R0xfTk9fRVJST1I7Cit9CisKK0dMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihjb25z
dCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pCit7CisgICAgVHJhbnNsYXRlZEF0dHJp
YnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107CisKKyAgICBHTGVudW0gZXJyID0g
bVZlcnRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShpbmRleEluZm8ubWluSW5kZXgs
IGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgdHJhbnNsYXRlZCk7CisK
KyAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgbG9va3VwQXR0cmli
dXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKKworICAgICAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBB
dHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xhdGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOwor
fQorCisvLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQorR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIo
Y29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0
eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgR0xlbnVtIGVyciA9
IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwg
Z2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpLCBpbmRpY2VzLCBpbmRleEluZm8p
OworCisgICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIG1CdWZmZXJC
YWNrRW5kLT5zZXR1cEluZGljZXNQcmVEcmF3KCppbmRleEluZm8pOworICAgIH0KKworICAgIHJl
dHVybiBlcnI7Cit9CisKKy8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFu
dHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygp
Cit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hh
ZGVyKCk7CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1P
YmplY3QtPmdldFBpeGVsU2hhZGVyKCk7CisKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwor
CisgICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbSkK
KyAgICB7CisgICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKKyAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxTYW1wbGVycygpOworICAgICAgICBtQXBwbGllZFBy
b2dyYW0gPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICBwcm9ncmFt
T2JqZWN0LT5hcHBseVVuaWZvcm1zKCk7Cit9CisKKy8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFu
ZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcygpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2
aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
CisKKyAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOyBzYW1wbGVyKyspCisgICAgeworICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9n
cmFtT2JqZWN0LT5nZXRTYW1wbGVyTWFwcGluZyhzYW1wbGVyKTsKKyAgICAgICAgaWYgKHRleHR1
cmVVbml0ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1PYmplY3QtPmdldFNhbXBsZXJUeXBlKHNhbXBsZXIpOworCisgICAgICAg
ICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRl
eHR1cmVUeXBlKTsKKworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRp
cnR5KHNhbXBsZXIpIHx8IHRleHR1cmUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wbGV0ZSgpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsK
KyAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsK
KyAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZp
bHRlcigpOworICAgICAgICAgICAgICAgICAgICBHTGVudW0gbWFnRmlsdGVyID0gdGV4dHVyZS0+
Z2V0TWFnRmlsdGVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoc2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3Jh
cCh3cmFwUykpOworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShz
YW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBU
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxl
ciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1hZ0ZpbHRlcikp
OworICAgICAgICAgICAgICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIs
IGQzZE1pcEZpbHRlcjsKKyAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0
ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NSU5GSUxU
RVIsIGQzZE1pbkZpbHRlcik7CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKHNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOworCisgICAg
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCB0ZXh0dXJlLT5nZXRU
ZXh0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoc2Ft
cGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9i
amVjdC0+c2V0U2FtcGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5pc1NhbXBs
ZXJEaXJ0eShzYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2Ut
PlNldFRleHR1cmUoc2FtcGxlciwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0U2FtcGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSAgIAorICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGdldEZyYW1lYnVmZmVyKCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9
IGZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgIHJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lz
dGVtU3VyZmFjZTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVu
UGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwgRDNEUE9P
TF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlw
ZSAhPSBEM0RNVUxUSVNBTVBMRV9OT05FKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OyAgIC8vIEZJWE1FOiBSZXF1aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9u
LW11bHRpc2FtcGxlZCByZW5kZXIgdGFyZ2V0CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2aWNl
LT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3lzdGVtU3VyZmFjZSk7CisKKyAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxl
YXNlKCk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1I6CisgICAgICAgICAgICBjYXNlIEQzREVS
Ul9ERVZJQ0VMT1NUOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2Vu
ZXJhdGUKKyAgICAgICAgfQorICAgIH0KKworICAgIEQzRExPQ0tFRF9SRUNUIGxvY2s7CisgICAg
UkVDVCByZWN0ID0ge3N0ZDo6bWF4KHgsIDApLAorICAgICAgICAgICAgICAgICBzdGQ6Om1heCh5
LCAwKSwKKyAgICAgICAgICAgICAgICAgc3RkOjptaW4oeCArIHdpZHRoLCAoaW50KWRlc2MuV2lk
dGgpLAorICAgICAgICAgICAgICAgICBzdGQ6Om1pbih5ICsgaGVpZ2h0LCAoaW50KWRlc2MuSGVp
Z2h0KX07CisKKyAgICByZXN1bHQgPSBzeXN0ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJl
Y3QsIEQzRExPQ0tfUkVBRE9OTFkpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgp
OworCisgICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2Nr
LnBCaXRzOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxz
OworICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsK
KworICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwg
dHlwZSwgbVN0YXRlLnBhY2tBbGlnbm1lbnQpOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBy
ZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgeworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgZmxvYXQgcjsKKyAgICAgICAgICAgIGZsb2F0IGc7CisgICAgICAgICAgICBmbG9hdCBiOwor
ICAgICAgICAgICAgZmxvYXQgYTsKKworICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAg
ICAgICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAm
IDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAocmdi
ICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChy
Z2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB4cmdi
ID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2suUGl0Y2gpOwor
CisgICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0g
KHhyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOworICAgICAgICAgICAgICAgICAgICBn
ID0gKHhyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOworICAgICAgICAgICAgICAgICAg
ICByID0gKHhyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCBhcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGxvY2su
UGl0Y2gpOworCisgICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBm
IDogMC4wZjsKKyAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBm
IC8gMHgwMDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgx
LjBmIC8gMHgwM0UwKTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAq
ICgxLjBmIC8gMHg3QzAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGlu
dCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAgICAgICAgICAg
ICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAw
RkYpOworICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBm
IC8gMHgwMDAwRkYwMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAw
MDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVu
c2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGxvY2suUGl0Y2gpOworCisgICAgICAg
ICAgICAgICAgICAgIGEgPSAxLjBmOworICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAw
eDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgICAgIGcg
PSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAq
IGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOworICAgICAgICAgICAgICAgICAgICBi
ID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7CisgICAgICAgICAg
ICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsK
KyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4
M0ZGMDAwMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAg
Ly8gRklYTUUKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41
Zik7CisgICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAy
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBhICsgMC41Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFCisgICAgICAgICAgICAg
ICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiAr
IDAuNWYpIDw8IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDYzICogZyArIDAuNWYpIDw8IDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDExKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN5
c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKworICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2Uo
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCit7CisgICAgRnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlm
ICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworCisg
ICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAm
PSB+R0xfQ09MT1JfQlVGRkVSX0JJVDsKKworICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3Qt
PmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZsYWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
YXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICB7CisgICAgICAgIG1hc2sgJj0gfkdMX0RF
UFRIX0JVRkZFUl9CSVQ7CisgICAgICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICYmIGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOworICAgICAgICB9CisgICAgfQor
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7
CisKKyAgICBpZiAoKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGRlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOworICAgICAgICBkZXB0aFN0
ZW5jaWwtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVG
RkVSX0JJVDsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZXMyZHg6OkdldFN0
ZW5jaWxTaXplKGRlc2MuRm9ybWF0KTsKKyAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8
PCBzdGVuY2lsU2l6ZSkgLSAxOworCisgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgw
KQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1hc2sgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVuZGVy
VGFyZ2V0KHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5n
bGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JD
bGVhclZhbHVlLmdyZWVuKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGZsb2F0
IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsKKyAgICBpbnQgc3RlbmNp
bCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFJlbmRlclRh
cmdldCgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjKTsKKworICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChlczJkeDo6R2V0QWxw
aGFTaXplKGRlc2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNrQWxwaGE7CisKKyAg
ICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9T
VEVOQ0lMKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU3Rh
dGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3RlbmNpbFVubWFza2Vk
OworICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVB
Ul9UQVJHRVQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEobVN0
YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAmJiBhbHBo
YVVubWFza2VkKTsKKworICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8fCBuZWVkTWFza2Vk
U3RlbmNpbENsZWFyKQorICAgIHsKKyAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBp
biBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxsIGlzIHNhdmVkLgor
ICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29tZSBwYXRocyB3aWxs
IGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAorICAgICAgICAvLyAgdGhhdCBwYXRo
IGlzIHRha2VuLgorICAgICAgICBIUkVTVUxUIGhyOworICAgICAgICBpZiAobU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBociA9IGRldmljZS0+
QmVnaW5TdGF0ZUJsb2NrKCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBo
ciA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZB
TFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQz
RENNUF9BTFdBWVMpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7CisgICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJM
RSwgMCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVy
KE5VTEwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOworCisgICAgICAg
ICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7
CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAg
IEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOworCisgICAgICAgIGlmICht
TWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhy
ID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOworICAgICAgICB9CisKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7CisgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOworICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKKyAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxF
LCAwKTsKKworICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgKG1TdGF0ZS5jb2xvck1hc2tSZWQgICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAw
KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtU3RhdGUuY29sb3JNYXNrR3JlZW4gPyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVO
IDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobVN0YXRlLmNvbG9yTWFza0JsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9C
TFVFICA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFC
TEVfQUxQSEEgOiAwKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGZs
YWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsK
KyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZVTkMsIEQz
RENNUF9BTFdBWVMpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMUkVGLCBzdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJTCwgRDNEU1RFTkNJ
TE9QX1JFUExBQ0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKKyAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsK
KyAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGRldmljZS0+
U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5V
TEwpOworICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZV
U0UpOworICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisKKyAgICAg
ICAgc3RydWN0IFZlcnRleAorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCB4LCB5LCB6LCB3
OworICAgICAgICAgICAgRDNEQ09MT1IgZGlmZnVzZTsKKyAgICAgICAgfTsKKworICAgICAgICBW
ZXJ0ZXggcXVhZFs0XTsKKyAgICAgICAgcXVhZFswXS54ID0gMC4wZjsKKyAgICAgICAgcXVhZFsw
XS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0OworICAgICAgICBxdWFkWzBdLnogPSAwLjBmOworICAg
ICAgICBxdWFkWzBdLncgPSAxLjBmOworICAgICAgICBxdWFkWzBdLmRpZmZ1c2UgPSBjb2xvcjsK
KworICAgICAgICBxdWFkWzFdLnggPSAoZmxvYXQpZGVzYy5XaWR0aDsKKyAgICAgICAgcXVhZFsx
XS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0OworICAgICAgICBxdWFkWzFdLnogPSAwLjBmOworICAg
ICAgICBxdWFkWzFdLncgPSAxLjBmOworICAgICAgICBxdWFkWzFdLmRpZmZ1c2UgPSBjb2xvcjsK
KworICAgICAgICBxdWFkWzJdLnggPSAwLjBmOworICAgICAgICBxdWFkWzJdLnkgPSAwLjBmOwor
ICAgICAgICBxdWFkWzJdLnogPSAwLjBmOworICAgICAgICBxdWFkWzJdLncgPSAxLjBmOworICAg
ICAgICBxdWFkWzJdLmRpZmZ1c2UgPSBjb2xvcjsKKworICAgICAgICBxdWFkWzNdLnggPSAoZmxv
YXQpZGVzYy5XaWR0aDsKKyAgICAgICAgcXVhZFszXS55ID0gMC4wZjsKKyAgICAgICAgcXVhZFsz
XS56ID0gMC4wZjsKKyAgICAgICAgcXVhZFszXS53ID0gMS4wZjsKKyAgICAgICAgcXVhZFszXS5k
aWZmdXNlID0gY29sb3I7CisKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAg
ICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBz
aXplb2YoVmVydGV4KSk7CisKKyAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikK
KyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5B
QkxFLCBUUlVFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldS
SVRFRU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNE
Q0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoZmxhZ3MpCisgICAgeworICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5V
TEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkK
K3sKKyAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBp
bnQgcHJpbWl0aXZlQ291bnQ7CisKKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQg
PD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVu
ZGVyVGFyZ2V0KGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
cHBseVN0YXRlKG1vZGUpOworCisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87Cisg
ICAgYm9vbCB1c2VJbmRleGluZzsKKyAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIo
bW9kZSwgZmlyc3QsIGNvdW50LCAmdXNlSW5kZXhpbmcsICZpbmRleEluZm8pOworICAgIGlmIChl
cnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAg
ICB9CisKKyAgICBhcHBseVNoYWRlcnMoKTsKKyAgICBhcHBseVRleHR1cmVzKCk7CisKKyAgICBp
ZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYg
KCFjdWxsU2tpcHNEcmF3KG1vZGUpKQorICAgIHsKKyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOworICAgICAgICBpZiAodXNlSW5kZXhpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
dmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZv
Lm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleElu
Zm8ubWluSW5kZXgrMSwgaW5kZXhJbmZvLm9mZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmlt
aXRpdmVDb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291
bnQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIGluZGlj
ZXMpCit7CisgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmICghaW5k
aWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOworICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKKyAgICBp
bnQgcHJpbWl0aXZlQ291bnQ7CisKKyAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICBpZiAocHJpbWl0aXZlQ291bnQg
PD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5UmVu
ZGVyVGFyZ2V0KGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
cHBseVN0YXRlKG1vZGUpOworCisgICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87Cisg
ICAgR0xlbnVtIGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5
cGUsICZpbmRleEluZm8pOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBlcnIgPSBhcHBseVZlcnRleEJ1
ZmZlcihpbmRleEluZm8pOworICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoZXJyKTsKKyAgICB9CisKKyAgICBhcHBseVNoYWRlcnMoKTsKKyAg
ICBhcHBseVRleHR1cmVzKCk7CisKKyAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlk
YXRlU2FtcGxlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgfQorCisgICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQorICAgIHsK
KyAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOworICAgICAgICBkZXZpY2UtPkRyYXdJbmRl
eGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5k
ZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbkluZGV4KzEs
IGluZGV4SW5mby5vZmZzZXQvaW5kZXhJbmZvLmluZGV4U2l6ZSwgcHJpbWl0aXZlQ291bnQpOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpmaW5pc2goKQoreworICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKyAgICBJRGlyZWN0M0RRdWVyeTkgKm9jY2x1c2lvblF1ZXJ5ID0gTlVMTDsK
KworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVf
T0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKG9jY2x1c2lvblF1ZXJ5KQorICAgIHsKKyAg
ICAgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKnNhdmVkU3RhdGUgPSBOVUxMOworICAgICAgICBk
ZXZpY2UtPkNyZWF0ZVN0YXRlQmxvY2soRDNEU0JUX0FMTCwgJnNhdmVkU3RhdGUpOworCisgICAg
ICAgIG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7CisKKyAgICAgICAgLy8g
UmVuZGVyIHNvbWV0aGluZyBvdXRzaWRlIHRoZSByZW5kZXIgdGFyZ2V0CisgICAgICAgIGRldmlj
ZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAg
ICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOworICAgICAgICBmbG9hdCBkYXRhWzRd
ID0gey0xLjBmLCAtMS4wZiwgLTEuMGYsIDEuMGZ9OworICAgICAgICBkaXNwbGF5LT5zdGFydFNj
ZW5lKCk7CisgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1BPSU5UTElTVCwg
MSwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKworICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUo
RDNESVNTVUVfRU5EKTsKKworICAgICAgICB3aGlsZSAob2NjbHVzaW9uUXVlcnktPkdldERhdGEo
TlVMTCwgMCwgRDNER0VUREFUQV9GTFVTSCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21l
dGhpbmcgdXNlZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisKKyAgICAgICAgaWYgKHNhdmVkU3Rh
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNhdmVkU3RhdGUtPkFwcGx5KCk7CisgICAgICAg
ICAgICBzYXZlZFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
Q29udGV4dDo6Zmx1c2goKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworICAgIElEaXJlY3QzRFF1ZXJ5OSAqZXZlbnRRdWVyeSA9IE5VTEw7CisKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAm
ZXZlbnRRdWVyeSk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICBpZiAoZXZlbnRRdWVyeSkKKyAgICB7CisgICAgICAgIGV2ZW50UXVlcnktPklz
c3VlKEQzRElTU1VFX0VORCk7CisKKyAgICAgICAgd2hpbGUgKGV2ZW50UXVlcnktPkdldERhdGEo
TlVMTCwgMCwgRDNER0VUREFUQV9GTFVTSCkgPT0gU19GQUxTRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21l
dGhpbmcgdXNlZnVsIGZpcnN0CisgICAgICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6
cmVjb3JkSW52YWxpZEVudW0oKQoreworICAgIG1JbnZhbGlkRW51bSA9IHRydWU7Cit9CisKK3Zv
aWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkKK3sKKyAgICBtSW52YWxpZFZhbHVlID0g
dHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCkKK3sKKyAg
ICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVjb3JkT3V0
T2ZNZW1vcnkoKQoreworICAgIG1PdXRPZk1lbW9yeSA9IHRydWU7Cit9CisKK3ZvaWQgQ29udGV4
dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCkKK3sKKyAgICBtSW52YWxpZEZy
YW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1ZTsKK30KKworLy8gR2V0IG9uZSBvZiB0aGUgcmVjb3Jk
ZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMgZmxhZywgaWYgYW55LgorLy8gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMuCitHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQorewor
ICAgIGlmIChtSW52YWxpZEVudW0pCisgICAgeworICAgICAgICBtSW52YWxpZEVudW0gPSBmYWxz
ZTsKKworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9FTlVNOworICAgIH0KKworICAgIGlmICht
SW52YWxpZFZhbHVlKQorICAgIHsKKyAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOworCisg
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX1ZBTFVFOworICAgIH0KKworICAgIGlmIChtSW52YWxp
ZE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7CisK
KyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAgIGlmICht
T3V0T2ZNZW1vcnkpCisgICAgeworICAgICAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICBpZiAobUludmFsaWRG
cmFtZWJ1ZmZlck9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIG1JbnZhbGlkRnJhbWVidWZmZXJP
cGVyYXRpb24gPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT047CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitjb25z
dCBjaGFyICpDb250ZXh0OjpnZXRQaXhlbFNoYWRlclByb2ZpbGUoKQoreworICAgIHJldHVybiBt
UHNQcm9maWxlOworfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRWZXJ0ZXhTaGFkZXJQcm9m
aWxlKCkKK3sKKyAgICByZXR1cm4gbVZzUHJvZmlsZTsKK30KKwordm9pZCBDb250ZXh0OjpkZXRh
Y2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAyLjkgcGFnZSAyMjoKKyAgICAvLyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3
aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRoZSBjdXJy
ZW50IGNvbnRleHQKKyAgICAvLyAoaS5lLiBpbiB0aGUgdGhyZWFkIHRoYXQgY2FsbGVkIERlbGV0
ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8gemVyby4KKworICAgIGlmIChtU3RhdGUuYXJyYXlCdWZm
ZXIgPT0gYnVmZmVyKQorICAgIHsKKyAgICAgICAgbVN0YXRlLmFycmF5QnVmZmVyID0gMDsKKyAg
ICB9CisKKyAgICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAg
eworICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBm
b3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0
cmlidXRlXS5tQm91bmRCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyID0gMDsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0
dXJlKQoreworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdlIDg0Ogor
ICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCwgaXQgaXMgYXMgaWYgYWxsIHRl
eHR1cmUgdW5pdHMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoYXQgdGV4dHVyZSBvYmplY3QgYXJlCisg
ICAgLy8gcmVib3VuZCB0byB0ZXh0dXJlIG9iamVjdCB6ZXJvCisKKyAgICBmb3IgKGludCB0eXBl
ID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsg
c2FtcGxlcisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0
dXJlW3R5cGVdW3NhbXBsZXJdID09IHRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDQuNCBwYWdlIDExMjoKKyAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQg
d2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVi
dWZmZXIsIHRoZW4gaXQgaXMKKyAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQg
YmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9p
bnQgdG8gd2hpY2ggdGhpcworICAgIC8vIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLgorCisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
Z2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOworICAgIH0KK30KKwordm9pZCBD
b250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCit7CisgICAgLy8g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3OgorICAgIC8vIElmIGEgZnJh
bWVidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFNRUJVRkZF
UiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKKyAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFk
IGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1
ZmZlciBvZiB6ZXJvLgorCisgICAgaWYgKG1TdGF0ZS5mcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZl
cikKKyAgICB7CisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAg
Ly8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5OgorICAgIC8vIElmIGEg
cmVuZGVyYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBk
ZWxldGVkLCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcgorICAgIC8vIGhhZCBiZWVu
IGV4ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBSRU5ERVJCVUZGRVIgYW5kIG5hbWUgb2YgemVyby4K
KworICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyID09IHJlbmRlcmJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTExOgorICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9i
amVjdCBpcyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVu
dGx5IGJvdW5kIGZyYW1lYnVmZmVyLAorICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAs
IGZvciBlYWNoIGF0dGFjaG1lbnQKKyAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdh
cyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgorCisgICAgRnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFt
ZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIo
cmVuZGVyYnVmZmVyKTsKKyAgICB9Cit9CisKK1RleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxl
dGVUZXh0dXJlKFNhbXBsZXJUeXBlIHR5cGUpCit7CisgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBs
ZXRlVGV4dHVyZXNbdHlwZV07CisKKyAgICBpZiAodCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisKKyAgICAg
ICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2gg
dG8gU0FNUExFUl8yRAorCisgICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUy
RCh0aGlzKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIEdMX1JH
QkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBjYXNlIFNBTVBMRVJfQ1VCRToKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJl
TWFwKHRoaXMpOworCisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1go
MCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIEdMX1JHQkEsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAg
aW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZU5lZ1koMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3Na
KDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCBHTF9SR0JBLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisKKyAgICAgICAgICAg
ICAgdCA9IGluY29tcGxldGVDdWJlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gdDsKKyAg
ICB9CisKKyAgICByZXR1cm4gdDsKK30KKworYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdM
ZW51bSBkcmF3TW9kZSkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5j
dWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7
Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQorewor
ICAgIHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Cisg
ICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICBjYXNl
IEdMX0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICBjYXNlIEdMX0xJTkVf
U1RSSVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENvbnRleHQ6Omhhc1N0
ZW5jaWwoKQoreworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldEZyYW1l
YnVmZmVyKCk7CisKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QpCisgICAgeworICAgICAgICBT
dGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFN0ZW5jaWxidWZmZXIoKTsKKworICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlck9iamVjdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXJPYmplY3QtPmdldFN0ZW5j
aWxTaXplKCkgPiAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlcykKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KTsKKworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0g
PSB2YWx1ZXNbMF07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRW
YWx1ZVsxXSA9IHZhbHVlc1sxXTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5t
Q3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
aW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107CisKKyAgICBtVmVydGV4RGF0YU1h
bmFnZXItPmRpcnR5Q3VycmVudFZhbHVlcygpOworfQorCit2b2lkIENvbnRleHQ6OmluaXRFeHRl
bnNpb25TdHJpbmcoKQoreworICAgIGlmIChtQnVmZmVyQmFja0VuZC0+c3VwcG9ydEludEluZGlj
ZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9
IG1FeHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9vZignICcpOworICAgIGlmIChlbmQgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6
ZShlbmQrMSk7CisgICAgfQorfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25T
dHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Cit9
CisKK30KKworZXh0ZXJuICJDIgoreworZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnKQoreworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29u
ZmlnKTsKK30KKwordm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQor
eworICAgIGRlbGV0ZSBjb250ZXh0OworCisgICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRl
eHQoKSkKKyAgICB7CisgICAgICAgIGdsOjptYWtlQ3VycmVudChOVUxMLCBOVUxMLCBOVUxMKTsK
KyAgICB9Cit9CisKK3ZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgZ2w6Om1h
a2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN1cmZhY2UpOworfQorCitnbDo6Q29udGV4dCAq
Z2xHZXRDdXJyZW50Q29udGV4dCgpCit7CisgICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7Cit9
Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4NyBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gQ29udGV4dC5oOiBEZWZpbmVzIHRoZSBnbDo6Q29udGV4dCBjbGFz
cywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3Bl
cmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENv
bnRleHQuCisKKyNpZm5kZWYgSU5DTFVERV9DT05URVhUX0hfCisjZGVmaW5lIElOQ0xVREVfQ09O
VEVYVF9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNk
ZWZpbmUgRUdMQVBJCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKwor
I2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVz
cGFjZSBlZ2wKK3sKK2NsYXNzIERpc3BsYXk7CitjbGFzcyBTdXJmYWNlOworY2xhc3MgQ29uZmln
OworfQorCituYW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworc3Ry
dWN0IFRyYW5zbGF0ZWRJbmRleERhdGE7CisKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNoYWRlcjsK
K2NsYXNzIFByb2dyYW07CitjbGFzcyBUZXh0dXJlOworY2xhc3MgVGV4dHVyZTJEOworY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBGcmFtZWJ1ZmZlcjsKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsK
K2NsYXNzIENvbG9yYnVmZmVyOworY2xhc3MgRGVwdGhidWZmZXI7CitjbGFzcyBTdGVuY2lsYnVm
ZmVyOworY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7CitjbGFzcyBJbmRleERhdGFNYW5hZ2VyOwor
Y2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIEJsaXQ7CisKK2VudW0KK3sKKyAgICBNQVhfVkVS
VEVYX0FUVFJJQlMgPSAxMiwKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDEyOCwK
KyAgICBNQVhfVkFSWUlOR19WRUNUT1JTID0gOCwKKyAgICBNQVhfQ09NQklORURfVEVYVFVSRV9J
TUFHRV9VTklUUyA9IDE2LAorICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDAs
CisgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKKyAgICBNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTID0gMTYsCisgICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gNDA5NiwgICAv
LyBGSVhNRTogVmVyaWZ5CisgICAgTUFYX0RSQVdfQlVGRkVSUyA9IDEsCisKKyAgICBJTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IEdMX1JHQiwKKyAgICBJTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX1RZUEUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNQorfTsKKworY29uc3QgZmxv
YXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01BWCA9IDEuMGY7CisKK2VudW0gU2FtcGxlclR5cGUKK3sKKyAgICBTQU1QTEVSXzJE
LAorICAgIFNBTVBMRVJfQ1VCRSwKKworICAgIFNBTVBMRVJfVFlQRV9DT1VOVAorfTsKKworc3Ry
dWN0IENvbG9yCit7CisgICAgZmxvYXQgcmVkOworICAgIGZsb2F0IGdyZWVuOworICAgIGZsb2F0
IGJsdWU7CisgICAgZmxvYXQgYWxwaGE7Cit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2Ny
aWJpbmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQorY2xhc3MgQXR0cmlidXRlU3RhdGUKK3sK
KyAgcHVibGljOgorICAgIEF0dHJpYnV0ZVN0YXRlKCkKKyAgICAgICAgOiBtVHlwZShHTF9GTE9B
VCksIG1TaXplKDApLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUoMCksIG1Qb2ludGVyKE5V
TEwpLCBtQm91bmRCdWZmZXIoMCksIG1FbmFibGVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRWYWx1ZVswXSA9IDA7CisgICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwOworICAgICAg
ICBtQ3VycmVudFZhbHVlWzJdID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDE7Cisg
ICAgfQorCisgICAgLy8gRnJvbSBWZXJ0ZXhBcnJheVBvaW50ZXIKKyAgICBHTGVudW0gbVR5cGU7
CisgICAgR0xpbnQgbVNpemU7CisgICAgYm9vbCBtTm9ybWFsaXplZDsKKyAgICBHTHNpemVpIG1T
dHJpZGU7IC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKKyAgICBjb25zdCB2b2lkICptUG9pbnRl
cjsKKworICAgIEdMdWludCBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJy
YXlQb2ludGVyIGlzIGNhbGxlZC4KKworICAgIGJvb2wgbUVuYWJsZWQ7IC8vIEZyb20gRW5hYmxl
L0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorCisgICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsg
Ly8gRnJvbSBWZXJ0ZXhBdHRyaWI0ZgorfTsKKworLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9y
ZSBhbGwgcmF3IHN0YXRlCitzdHJ1Y3QgU3RhdGUKK3sKKyAgICBDb2xvciBjb2xvckNsZWFyVmFs
dWU7CisgICAgR0xjbGFtcGYgZGVwdGhDbGVhclZhbHVlOworICAgIGludCBzdGVuY2lsQ2xlYXJW
YWx1ZTsKKworICAgIGJvb2wgY3VsbEZhY2U7CisgICAgR0xlbnVtIGN1bGxNb2RlOworICAgIEdM
ZW51bSBmcm9udEZhY2U7CisgICAgYm9vbCBkZXB0aFRlc3Q7CisgICAgR0xlbnVtIGRlcHRoRnVu
YzsKKyAgICBib29sIGJsZW5kOworICAgIEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKKyAgICBHTGVu
dW0gZGVzdEJsZW5kUkdCOworICAgIEdMZW51bSBzb3VyY2VCbGVuZEFscGhhOworICAgIEdMZW51
bSBkZXN0QmxlbmRBbHBoYTsKKyAgICBHTGVudW0gYmxlbmRFcXVhdGlvblJHQjsKKyAgICBHTGVu
dW0gYmxlbmRFcXVhdGlvbkFscGhhOworICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgYm9vbCBz
dGVuY2lsVGVzdDsKKyAgICBHTGVudW0gc3RlbmNpbEZ1bmM7CisgICAgR0xpbnQgc3RlbmNpbFJl
ZjsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxGYWlsOworICAg
IEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0
aFBhc3M7CisgICAgR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2s7CisgICAgR0xlbnVtIHN0ZW5jaWxC
YWNrRnVuYzsKKyAgICBHTGludCBzdGVuY2lsQmFja1JlZjsKKyAgICBHTHVpbnQgc3RlbmNpbEJh
Y2tNYXNrOworICAgIEdMZW51bSBzdGVuY2lsQmFja0ZhaWw7CisgICAgR0xlbnVtIHN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwor
ICAgIEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzazsKKyAgICBib29sIHBvbHlnb25PZmZzZXRG
aWxsOworICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldEZhY3RvcjsKKyAgICBHTGZsb2F0IHBvbHln
b25PZmZzZXRVbml0czsKKyAgICBib29sIHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKKyAgICBib29s
IHNhbXBsZUNvdmVyYWdlOworICAgIEdMY2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7CisgICAg
Ym9vbCBzYW1wbGVDb3ZlcmFnZUludmVydDsKKyAgICBib29sIHNjaXNzb3JUZXN0OworICAgIGJv
b2wgZGl0aGVyOworCisgICAgR0xmbG9hdCBsaW5lV2lkdGg7CisKKyAgICBHTGVudW0gZ2VuZXJh
dGVNaXBtYXBIaW50OworCisgICAgR0xpbnQgdmlld3BvcnRYOworICAgIEdMaW50IHZpZXdwb3J0
WTsKKyAgICBHTHNpemVpIHZpZXdwb3J0V2lkdGg7CisgICAgR0xzaXplaSB2aWV3cG9ydEhlaWdo
dDsKKyAgICBmbG9hdCB6TmVhcjsKKyAgICBmbG9hdCB6RmFyOworCisgICAgR0xpbnQgc2Npc3Nv
clg7CisgICAgR0xpbnQgc2Npc3Nvclk7CisgICAgR0xzaXplaSBzY2lzc29yV2lkdGg7CisgICAg
R0xzaXplaSBzY2lzc29ySGVpZ2h0OworCisgICAgYm9vbCBjb2xvck1hc2tSZWQ7CisgICAgYm9v
bCBjb2xvck1hc2tHcmVlbjsKKyAgICBib29sIGNvbG9yTWFza0JsdWU7CisgICAgYm9vbCBjb2xv
ck1hc2tBbHBoYTsKKyAgICBib29sIGRlcHRoTWFzazsKKworICAgIGludCBhY3RpdmVTYW1wbGVy
OyAgIC8vIEFjdGl2ZSB0ZXh0dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAorICAgIEdM
dWludCBhcnJheUJ1ZmZlcjsKKyAgICBHTHVpbnQgZWxlbWVudEFycmF5QnVmZmVyOworICAgIEdM
dWludCB0ZXh0dXJlMkQ7CisgICAgR0x1aW50IHRleHR1cmVDdWJlTWFwOworICAgIEdMdWludCBm
cmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQgcmVuZGVyYnVmZmVyOworICAgIEdMdWludCBjdXJyZW50
UHJvZ3JhbTsKKworICAgIEF0dHJpYnV0ZVN0YXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVY
X0FUVFJJQlNdOworICAgIEdMdWludCBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRd
W01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIEdMaW50IHVucGFja0FsaWdubWVudDsK
KyAgICBHTGludCBwYWNrQWxpZ25tZW50OworfTsKKworY2xhc3MgQ29udGV4dAoreworICBwdWJs
aWM6CisgICAgQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKworICAgIH5Db250
ZXh0KCk7CisKKyAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWds
OjpTdXJmYWNlICpzdXJmYWNlKTsKKworICAgIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKKwor
ICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgorICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCBy
ZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7CisKKyAgICB2b2lkIHNl
dENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOworCisgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50
IHN0ZW5jaWwpOworCisgICAgdm9pZCBzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpOworICAgIGJv
b2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xl
bnVtIG1vZGUpOworCisgICAgdm9pZCBzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KTsKKworICAg
IHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0RlcHRoVGVzdEVu
YWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMp
OworCisgICAgdm9pZCBzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKKyAg
ICAKKyAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0JsZW5kRW5h
YmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJH
QiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7
CisgICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIHNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVx
dWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7CisKKyAgICB2b2lkIHNldFN0ZW5jaWxUZXN0
KGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3Rl
bmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFy
YW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQg
c3RlbmNpbEJhY2tNYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0
ZW5jaWxXcml0ZW1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50
IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdM
ZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3Rl
bmNpbFBhc3NEZXB0aFBhc3MpOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdM
ZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdM
ZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOworCisgICAgdm9pZCBzZXRQb2x5Z29uT2Zm
c2V0RmlsbChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJs
ZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZh
Y3RvciwgR0xmbG9hdCB1bml0cyk7CisKKyAgICB2b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFn
ZShib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVk
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7Cisg
ICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRT
YW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpOworCisgICAg
dm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNTY2lzc29yVGVz
dEVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7Cisg
ICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0TGluZVdpZHRo
KEdMZmxvYXQgd2lkdGgpOworCisgICAgdm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVt
IGhpbnQpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2b2lkIHNldFNjaXNzb3JQYXJh
bXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisg
ICAgdm9pZCBzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9v
bCBhbHBoYSk7CisgICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKKworICAgIHZvaWQg
c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKTsKKworICAgIEdMdWludCBnZXRGcmFtZWJ1ZmZl
ckhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25z
dDsKKworICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5h
YmxlZCk7CisgICAgY29uc3QgQXR0cmlidXRlU3RhdGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0pOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5z
aWduZWQgaW50IGF0dHJpYk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwg
R0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOworICAgIGNvbnN0IHZvaWQgKmdl
dFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisKKyAg
ICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqZ2V0VmVydGV4QXR0cmliQmxvY2soKTsKKworICAgIHZv
aWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CisgICAgR0xpbnQgZ2V0VW5w
YWNrQWxpZ25tZW50KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQg
YWxpZ25tZW50KTsKKyAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisKKyAgICBH
THVpbnQgY3JlYXRlQnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlw
ZSk7CisgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBHTHVpbnQgY3JlYXRlVGV4dHVy
ZSgpOworICAgIEdMdWludCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVS
ZW5kZXJidWZmZXIoKTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOwor
ICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpOworICAgIHZvaWQgZGVsZXRlUHJv
Z3JhbShHTHVpbnQgcHJvZ3JhbSk7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0
dXJlKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Cisg
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICB2
b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRFbGVtZW50
QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWlu
dCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7
CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lk
IGJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCB1c2VQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKKworICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlcik7CisgICAgdm9pZCBzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3Ji
dWZmZXIgKnJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBzZXREZXB0aGJ1ZmZlclplcm8oRGVwdGhi
dWZmZXIgKmRlcHRoQnVmZmVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5j
aWxidWZmZXIgKnN0ZW5jaWxCdWZmZXIpOworICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKFJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWlu
dCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKKworICAgIEJ1ZmZlciAqZ2V0QnVmZmVy
KEdMdWludCBoYW5kbGUpOworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwor
ICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CisgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50
IGhhbmRsZSk7CisgICAgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMdWludCBoYW5kbGUp
OworICAgIERlcHRoYnVmZmVyICpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBT
dGVuY2lsYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpOworCisgICAgQnVm
ZmVyICpnZXRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVy
KCk7CisgICAgUHJvZ3JhbSAqZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBUZXh0dXJlMkQgKmdl
dFRleHR1cmUyRCgpOworICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1w
bGVyVHlwZSB0eXBlKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKworICAg
IGJvb2wgZ2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29s
IGdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRC
b29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0
UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBp
bnQgKm51bVBhcmFtcyk7CisKKyAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3Jl
Vmlld3BvcnQpOworICAgIHZvaWQgYXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpOworICAgIEdM
ZW51bSBhcHBseVZlcnRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIGJvb2wgKnVzZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8p
OworICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICZpbmRleEluZm8pOworICAgIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IHZvaWQgKmlu
ZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRl
ZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gYXBwbHlDb3VudGluZ0luZGV4QnVm
ZmVyKEdMZW51bSBtb2RlLCBHTGVudW0gY291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4
SW5mbyk7CisgICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMo
KTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIHZvaWQqIHBpeGVs
cyk7CisgICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgZHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworICAgIHZvaWQgZHJh
d0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogaW5kaWNlcyk7CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisK
KyAgICB2b2lkIHJlY29yZEludmFsaWRFbnVtKCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkVmFs
dWUoKTsKKyAgICB2b2lkIHJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICB2b2lkIHJlY29y
ZE91dE9mTWVtb3J5KCk7CisgICAgdm9pZCByZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRp
b24oKTsKKworICAgIEdMZW51bSBnZXRFcnJvcigpOworCisgICAgY29uc3QgY2hhciAqZ2V0UGl4
ZWxTaGFkZXJQcm9maWxlKCk7CisgICAgY29uc3QgY2hhciAqZ2V0VmVydGV4U2hhZGVyUHJvZmls
ZSgpOworCisgICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisKKyAg
ICBCbGl0ICpnZXRCbGl0dGVyKCkgeyByZXR1cm4gbUJsaXQ7IH0KKworICAgIGNvbnN0IEQzRENB
UFM5ICZnZXREZXZpY2VDYXBzKCkgeyByZXR1cm4gbURldmljZUNhcHM7IH0KKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0KTsKKworICAgIHZvaWQgbG9v
a3VwQXR0cmlidXRlTWFwcGluZyhUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKTsKKwor
ICAgIHZvaWQgZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgZGV0YWNoVGV4
dHVyZShHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQg
ZnJhbWVidWZmZXIpOworICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJi
dWZmZXIpOworCisgICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoU2FtcGxlclR5cGUg
dHlwZSk7CisKKyAgICBib29sIGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBi
b29sIGlzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisgICAgYm9vbCBoYXNTdGVuY2ls
KCk7CisKKyAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKKworICAgIFN0YXRl
ICAgbVN0YXRlOworCisgICAgVGV4dHVyZTJEICptVGV4dHVyZTJEWmVybzsKKyAgICBUZXh0dXJl
Q3ViZU1hcCAqbVRleHR1cmVDdWJlTWFwWmVybzsKKworICAgIENvbG9yYnVmZmVyICptQ29sb3Ji
dWZmZXJaZXJvOworICAgIERlcHRoYnVmZmVyICptRGVwdGhidWZmZXJaZXJvOworICAgIFN0ZW5j
aWxidWZmZXIgKm1TdGVuY2lsYnVmZmVyWmVybzsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1
aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7CisgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIFNoYWRl
ck1hcCBtU2hhZGVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0q
PiBQcm9ncmFtTWFwOworICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CisKKyAgICB0eXBlZGVm
IHN0ZDo6bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CisgICAgVGV4dHVyZU1hcCBt
VGV4dHVyZU1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+
IEZyYW1lYnVmZmVyTWFwOworICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKKwor
ICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJN
YXA7CisgICAgUmVuZGVyYnVmZmVyTWFwIG1SZW5kZXJidWZmZXJNYXA7CisKKyAgICB2b2lkIGlu
aXRFeHRlbnNpb25TdHJpbmcoKTsKKyAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwor
CisgICAgQnVmZmVyQmFja0VuZCAqbUJ1ZmZlckJhY2tFbmQ7CisgICAgVmVydGV4RGF0YU1hbmFn
ZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKKyAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRh
TWFuYWdlcjsKKworICAgIEJsaXQgKm1CbGl0OworCisgICAgVGV4dHVyZSAqbUluY29tcGxldGVU
ZXh0dXJlc1tTQU1QTEVSX1RZUEVfQ09VTlRdOworCisgICAgLy8gUmVjb3JkZWQgZXJyb3JzCisg
ICAgYm9vbCBtSW52YWxpZEVudW07CisgICAgYm9vbCBtSW52YWxpZFZhbHVlOworICAgIGJvb2wg
bUludmFsaWRPcGVyYXRpb247CisgICAgYm9vbCBtT3V0T2ZNZW1vcnk7CisgICAgYm9vbCBtSW52
YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uOworCisgICAgYm9vbCBtSGFzQmVlbkN1cnJlbnQ7CisK
KyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtOworICAgIHVuc2lnbmVkIGludCBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1
ZmZlclNlcmlhbDsKKworICAgIGNvbnN0IGNoYXIgKm1Qc1Byb2ZpbGU7CisgICAgY29uc3QgY2hh
ciAqbVZzUHJvZmlsZTsKKworICAgIC8vIHN0YXRlIGNhY2hpbmcgZmxhZ3MKKyAgICBib29sIG1D
bGVhclN0YXRlRGlydHk7CisgICAgYm9vbCBtQ3VsbFN0YXRlRGlydHk7CisgICAgYm9vbCBtRGVw
dGhTdGF0ZURpcnR5OworICAgIGJvb2wgbU1hc2tTdGF0ZURpcnR5OworICAgIGJvb2wgbVBpeGVs
UGFja2luZ1N0YXRlRGlydHk7CisgICAgYm9vbCBtQmxlbmRTdGF0ZURpcnR5OworICAgIGJvb2wg
bVN0ZW5jaWxTdGF0ZURpcnR5OworICAgIGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5Owor
ICAgIGJvb2wgbVNjaXNzb3JTdGF0ZURpcnR5OworICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7
CisgICAgYm9vbCBtRnJvbnRGYWNlRGlydHk7CisgICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsK
KworICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOworCisg
ICAgRDNEQ0FQUzkgbURldmljZUNhcHM7Cit9OworfQorCitleHRlcm4gIkMiCit7CisvLyBFeHBv
cnRlZCBmdW5jdGlvbnMgZm9yIHVzZSBieSBFR0wKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRl
eHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyk7Cit2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6
OkNvbnRleHQgKmNvbnRleHQpOwordm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250
ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CitnbDo6
Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpOworX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpw
cm9jbmFtZSk7Cit9CisKKyNlbmRpZiAgIC8vIElOQ0xVREVfQ09OVEVYVF9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEZyYW1lYnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6
OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisvLyBvYmplY3Rz
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQu
NCBwYWdlIDEwNS4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCisjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVy
KCkKK3sKKyAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtQ29sb3JidWZmZXJI
YW5kbGUgPSAwOworCisgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgbURlcHRo
YnVmZmVySGFuZGxlID0gMDsKKworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Cisg
ICAgbVN0ZW5jaWxidWZmZXJIYW5kbGUgPSAwOworfQorCitGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVm
ZmVyKCkKK3sKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBjb2xvcmJ1ZmZlcikKK3sKKyAgICBtQ29sb3JidWZmZXJUeXBlID0gdHlwZTsK
KyAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSBjb2xvcmJ1ZmZlcjsKK30KKwordm9pZCBGcmFtZWJ1
ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3sK
KyAgICBtRGVwdGhidWZmZXJUeXBlID0gdHlwZTsKKyAgICBtRGVwdGhidWZmZXJIYW5kbGUgPSBk
ZXB0aGJ1ZmZlcjsKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCit7CisgICAgbVN0ZW5jaWxidWZmZXJUeXBl
ID0gdHlwZTsKKyAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IHN0ZW5jaWxidWZmZXI7Cit9CisK
K3ZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAg
aWYgKG1Db2xvcmJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtQ29s
b3JidWZmZXJUeXBlKSkKKyAgICB7CisgICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05F
OworICAgICAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtRGVw
dGhidWZmZXJIYW5kbGUgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAg
ICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZm
ZXJIYW5kbGUgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBl
KSkKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAg
IG1TdGVuY2lsYnVmZmVySGFuZGxlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVidWZmZXI6
OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChtQ29s
b3JidWZmZXJIYW5kbGUgPT0gcmVuZGVyYnVmZmVyICYmIG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xf
UkVOREVSQlVGRkVSKQorICAgIHsKKyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7
CisgICAgICAgIG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1EZXB0
aGJ1ZmZlckhhbmRsZSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsK
KyAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobVN0ZW5j
aWxidWZmZXJIYW5kbGUgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCisgICAgeworICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9O
T05FOworICAgICAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorfQorCit1bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCit7CisgICAgUmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29s
b3JidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFNlcmlhbCgp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVi
dWZmZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICBpZiAoY29sb3JidWZmZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgIH0KKworICAg
IHJldHVybiBOVUxMOworfQorCit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVm
ZmVyU2VyaWFsKCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZm
ZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVu
Y2lsKCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Cisg
ICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURl
cHRoYnVmZmVySGFuZGxlKTsKKworICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgfQorCisgICAgcmV0
dXJuIE5VTEw7Cit9CisKK0NvbG9yYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIo
KQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBD
b2xvcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBOVUxMOworCisgICAgaWYgKG1Db2xvcmJ1ZmZlclR5
cGUgPT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGNv
bG9yYnVmZmVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAobUNvbG9yYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgeworICAgICAgICBjb2xvcmJ1ZmZlciA9IGNvbnRleHQt
PmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlckhhbmRsZSk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGNvbG9yYnVmZmVyID0gY29udGV4dC0+Z2V0VGV4dHVyZShtQ29sb3JidWZm
ZXJIYW5kbGUpLT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3JidWZmZXJUeXBlKTsKKyAgICB9CisKKyAg
ICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb2xvcmJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKworRGVwdGhidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCit7CisgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIERlcHRoYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRs
ZSk7CisKKyAgICBpZiAoZGVwdGhidWZmZXIgJiYgZGVwdGhidWZmZXItPmlzRGVwdGhidWZmZXIo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlcjsKKyAgICB9CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKworU3RlbmNpbGJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZm
ZXIoKQoreworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAg
ICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZl
cihtU3RlbmNpbGJ1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBzdGVu
Y2lsYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGVu
Y2lsYnVmZmVyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGVudW0gRnJhbWVi
dWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5
cGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkKK3sKKyAg
ICByZXR1cm4gbURlcHRoYnVmZmVyVHlwZTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRT
dGVuY2lsYnVmZmVyVHlwZSgpCit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKK30K
KworR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlckhhbmRsZTsKK30KKworR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0
aGJ1ZmZlckhhbmRsZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlckhhbmRsZTsKK30KKwor
R0x1aW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkKK3sKKyAgICByZXR1
cm4gbVN0ZW5jaWxidWZmZXJIYW5kbGU7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworCisgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIENvbG9yYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgaWYgKCFjb2xvcmJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0
V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICB9CisKKyAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgIH0KKworICAg
IGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBEZXB0aGJ1
ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJI
YW5kbGUpOworCisgICAgICAgIGlmICghZGVwdGhidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh3aWR0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVm
ZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhl
aWdodCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVy
LT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9
IEdMX05PTkUpCisgICAgeworICAgICAgICBTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0g
Y29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZlcihtU3RlbmNpbGJ1ZmZlckhhbmRsZSk7CisKKyAgICAg
ICAgaWYgKCFzdGVuY2lsYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRI
ZWlnaHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRo
ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
V2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdl
dFdpZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJ
T05TOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFOworfQorfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRnJhbWVidWZmZXIuaDogRGVmaW5l
cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCisv
LyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDQuNCBwYWdlIDEwNS4KKworI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQ29sb3JidWZmZXI7
CitjbGFzcyBEZXB0aGJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZmZXI7CisKK2NsYXNzIEZyYW1l
YnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBGcmFtZWJ1ZmZlcigpOworCisgICAgfkZyYW1lYnVm
ZmVyKCk7CisKKyAgICB2b2lkIHNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29s
b3JidWZmZXIpOworICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBk
ZXB0aGJ1ZmZlcik7CisgICAgdm9pZCBzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgc3RlbmNpbGJ1ZmZlcik7CisKKyAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1
cmUpOworICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwo
KTsKKworICAgIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOworICAgIERlcHRoYnVmZmVy
ICpnZXREZXB0aGJ1ZmZlcigpOworICAgIFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIo
KTsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICBHTGVudW0gZ2V0RGVw
dGhidWZmZXJUeXBlKCk7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisKKyAg
ICBHTHVpbnQgZ2V0Q29sb3JidWZmZXJIYW5kbGUoKTsKKyAgICBHTHVpbnQgZ2V0RGVwdGhidWZm
ZXJIYW5kbGUoKTsKKyAgICBHTHVpbnQgZ2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworCisgICAg
R0xlbnVtIGNvbXBsZXRlbmVzcygpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKKworICAgIEdMdWludCBtQ29sb3JidWZmZXJIYW5kbGU7
CisgICAgR0xlbnVtIG1Db2xvcmJ1ZmZlclR5cGU7CisKKyAgICBHTHVpbnQgbURlcHRoYnVmZmVy
SGFuZGxlOworICAgIEdMZW51bSBtRGVwdGhidWZmZXJUeXBlOworCisgICAgR0x1aW50IG1TdGVu
Y2lsYnVmZmVySGFuZGxlOworICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7Cit9OworfQor
CisjZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc2MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1l
bnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAorewordW5zaWduZWQg
aW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKKworc3RkOjpzdHJpbmcgc3RyKGludCBp
KQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7
CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwg
Y29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpIDogdHlwZSh0
eXBlKSwgbmFtZShuYW1lKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK3sKKyAgICBpbnQgYnl0ZXMg
PSBVbmlmb3JtVHlwZVNpemUodHlwZSkgKiBhcnJheVNpemU7CisgICAgZGF0YSA9IG5ldyB1bnNp
Z25lZCBjaGFyW2J5dGVzXTsKKyAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgIGRpcnR5
ID0gdHJ1ZTsKKyAgICBoYW5kbGVzU2V0ID0gZmFsc2U7Cit9CisKK1VuaWZvcm06On5Vbmlmb3Jt
KCkKK3sKKyAgICBkZWxldGVbXSBkYXRhOworfQorCitVbmlmb3JtTG9jYXRpb246OlVuaWZvcm1M
b2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVu
c2lnbmVkIGludCBpbmRleCkgCisgICAgOiBuYW1lKG5hbWUpLCBlbGVtZW50KGVsZW1lbnQpLCBp
bmRleChpbmRleCkKK3sKK30KKworUHJvZ3JhbTo6UHJvZ3JhbSgpCit7CisgICAgbUZyYWdtZW50
U2hhZGVyID0gTlVMTDsKKyAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKworICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOworICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBtQ29u
c3RhbnRUYWJsZVBTID0gTlVMTDsKKyAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKKworICAg
IG1JbmZvTG9nID0gTlVMTDsKKyAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisKKyAgICB1bmxpbmso
KTsKKworICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKKworICAgIG1TZXJpYWwgPSBpc3N1ZVNl
cmlhbCgpOworfQorCitQcm9ncmFtOjp+UHJvZ3JhbSgpCit7CisgICAgdW5saW5rKHRydWUpOwor
CisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhT
aGFkZXItPmRldGFjaCgpOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVM
TCkKKyAgICB7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgfQorfQor
Citib29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAo
c2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlm
IChtVmVydGV4U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVy
OworICAgICAgICBtVmVydGV4U2hhZGVyLT5hdHRhY2goKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
c2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAg
aWYgKG1GcmFnbWVudFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVy
KilzaGFkZXI7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+YXR0YWNoKCk7CisgICAgfQorICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW06OmRldGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBpZiAoc2hhZGVyLT5nZXRU
eXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4U2hh
ZGVyICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVy
ICE9IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
dW5saW5rKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dGFj
aGVkU2hhZGVyc0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAx
IDogMCkgKyAobUZyYWdtZW50U2hhZGVyID8gMSA6IDApOworfQorCitJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKlByb2dyYW06OmdldFBpeGVsU2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVBpeGVsRXhl
Y3V0YWJsZTsKK30KKworSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4
U2hhZGVyKCkKK3sKKyAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Cit9CisKK3ZvaWQgUHJv
Z3JhbTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFt
ZSkKK3sKKyAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7CisgICAg
fQorfQorCitHTHVpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAq
bmFtZSkKK3sKKyAgICBpZiAobmFtZSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5h
bWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworaW50IFBy
b2dyYW06OmdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQoreworICAgIGlmIChh
dHRyaWJ1dGVJbmRleCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsK
KyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRo
ZSB0ZXh0dXJlIHVuaXQgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgorLy8g
aW5kZXggcmVmZXJlbmNlZCBpbiB0aGUgY29tcGlsZWQgSExTTCBzaGFkZXIKK0dMaW50IFByb2dy
YW06OmdldFNhbXBsZXJNYXBwaW5nKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCit7CisgICAg
YXNzZXJ0KHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNb
MF0pKTsKKworICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOworCisgICAgaWYgKG1T
YW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKKyAgICB7CisgICAgICAgIGxvZ2ljYWxUZXh0
dXJlVW5pdCA9IG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKKyAg
ICB9CisKKyAgICBpZiAobG9naWNhbFRleHR1cmVVbml0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpCisgICAgeworICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKwor
ICAgIHJldHVybiAtMTsKK30KKworU2FtcGxlclR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclR5cGUo
dW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBhc3NlcnQoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworICAgIGFzc2VydChtU2Ft
cGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUpOworCisgICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1w
bGVySW5kZXhdLnR5cGU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNTYW1wbGVyRGlydHkodW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCkgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlckluZGV4IDwgc2l6
ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpCisgICAgeworICAgICAgICByZXR1
cm4gbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGlydHk7CisgICAgfQorICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQcm9ncmFtOjpzZXRTYW1w
bGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCwgYm9vbCBkaXJ0eSkKK3sKKyAgICBp
ZiAoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkp
CisgICAgeworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IGRpcnR5Owor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK0dMaW50IFByb2dyYW06OmdldFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBjaGFyICpuYW1lLCBib29sIGRlY29yYXRlZCkKK3sKKyAgICBz
dGQ6OnN0cmluZyBuYW1lU3RyKG5hbWUpOworICAgIGludCBzdWJzY3JpcHQgPSAwOworICAgIHNp
emVfdCBiZWdpbkIgPSBuYW1lU3RyLmZpbmQoJ1snKTsKKyAgICBzaXplX3QgZW5kQiA9IG5hbWVT
dHIuZmluZCgnXScpOworICAgIGlmIChiZWdpbkIgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgZW5k
QiAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN1YnNj
clN0ciA9IG5hbWVTdHIuc3Vic3RyKGJlZ2luQiArIDEsIGJlZ2luQiAtIGVuZEIgLSAxKTsKKyAg
ICAgICAgbmFtZVN0ci5lcmFzZShiZWdpbkIpOworICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKHN1
YnNjclN0ci5jX3N0cigpKTsKKyAgICB9CisKKyAgICBpZiAoIWRlY29yYXRlZCkKKyAgICB7Cisg
ICAgICAgIG5hbWVTdHIgPSBkZWNvcmF0ZShuYW1lU3RyKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKysp
CisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1l
U3RyICYmCisgICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1
YnNjcmlwdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZv
cm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7
CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGZsb2F0KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQorICAg
IHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKwor
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50
XTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMYm9vbGVhbiksCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFu
KSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMiwKKyAg
ICAgICAgICAgICAgIHYsIDIgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAy
XTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ld
ID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNp
emVvZihHTGJvb2xlYW4pICogMiwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXpl
b2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsK
KyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9GTE9BVF9WRUMzKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
KworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZs
b2F0KSAqIDMsCisgICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQp
OworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVD
MykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVh
bltjb3VudCAqIDNdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyAr
K2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbikgKiAzLAorICAgICAgICAgICAgICAgYm9vbFBhcmFt
cywgMyAqIHNpemVvZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBi
b29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZv
cm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7
CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUg
PT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5
KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
c2l6ZW9mKEdMZmxvYXQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9h
dCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBu
ZXcgR0xib29sZWFuW2NvdW50ICogNF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDQsCisgICAgICAgICAgICAg
ICBib29sUGFyYW1zLCA0ICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAg
ZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRh
cmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKKyAg
ICAgICAgICAgdmFsdWUsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICBtZW1j
cHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBzaXplb2YoR0xmbG9hdCkgKiA5LAorICAgICAgICAgICB2YWx1ZSwgOSAqIHNpemVvZihHTGZs
b2F0KSAqIGNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKKworICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2LAorICAgICAg
ICAgICB2YWx1ZSwgMTYgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UKQor
ICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
KworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAgICB2
LCBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnRdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSwKKyAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXMsIHNpemVvZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBi
b29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7Cisg
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVF9WRUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGludCkgKiAyLAorICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3Vu
dCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9W
RUMyKQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW2NvdW50ICogMl07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSAqIDIsCisgICAgICAgICAgICAgICBib29sUGFyYW1z
LCAyICogc2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJv
b2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
M2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMaW50KSAqIDMsCisgICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50
KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZF
QzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xl
YW5bY291bnQgKiAzXTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogMywKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMs
IDMgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9v
bFBhcmFtczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xpbnQpICogNCwKKyAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQp
OworICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVD
NCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVh
bltjb3VudCAqIDRdOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyAr
K2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
bWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMYm9vbGVhbikgKiA0LAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywg
NCAqIHNpemVvZihHTGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29s
UGFyYW1zOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2
KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgdW5zaWduZWQg
aW50IGNvdW50ID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwor
CisgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkK
KyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBm
IDogMS4wZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQgKiBzaXplb2YoR0xm
bG9hdCksCisgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50
ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xp
bnQgbG9jYXRpb24sIEdMaW50ICpwYXJhbXMpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgdW5zaWduZWQgaW50IGNv
dW50ID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworCisgICAg
c3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAg
IEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVDoKKyAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudCAqIHNpemVvZihHTGludCksCisgICAgICAgICAgICAg
ICBjb3VudCAqIHNpemVvZihHTGludCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJv
Z3JhbTo6ZGlydHlBbGxVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1z
ID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBtVW5pZm9ybXNbaW5k
ZXhdLT5kaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmRpcnR5QWxsU2Ft
cGxlcnMoKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUzsgKytpbmRleCkKKyAgICB7CisgICAgICAgIG1TYW1wbGVyc1tp
bmRleF0uZGlydHkgPSB0cnVlOworICAgIH0KK30KKworLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
K3ZvaWQgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtcygpCit7CisgICAgdW5zaWduZWQgaW50IG51bVVu
aWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9j
YXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQorICAgIHsKKyAg
ICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgIT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisgICAgICAgICAg
ICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7CisgICAgICAgICAg
ICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm0xYnYobG9jYXRpb24sIGFycmF5
U2l6ZSwgYik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjog
IGFwcGx5VW5pZm9ybTJidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtM2J2KGxvY2F0aW9u
LCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CT09M
X1ZFQzQ6ICBhcHBseVVuaWZvcm00YnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIGFwcGx5VW5pZm9ybTFmdihs
b2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogYXBwbHlVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBhcHBseVVuaWZv
cm0zZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IGFwcGx5VW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXlTaXpl
LCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogYXBw
bHlVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBhcHBseVVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIGFycmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDQ6IGFwcGx5VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KGxvY2F0
aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisvLyBDb21waWxlcyB0aGUg
SExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmll
cworSUQzRFhCdWZmZXIgKlByb2dyYW06OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNs
LCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxl
KQoreworICAgIGlmICghaGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIElEM0RYQnVmZmVyICpiaW5hcnkgPSBOVUxMOworICAgIElEM0RYQnVmZmVyICplcnJv
ck1lc3NhZ2UgPSBOVUxMOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYQ29tcGlsZVNoYWRl
cihobHNsLCAoVUlOVClzdHJsZW4oaGxzbCksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwg
MCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSwgY29uc3RhbnRUYWJsZSk7CisKKyAgICBpZiAoU1VD
Q0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gYmluYXJ5OworICAgIH0KKwor
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgKElEM0RYQnVmZmVyKilOVUxMKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JNZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1l
c3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKworICAgICAgICBhcHBlbmRUb0luZm9Mb2coIiVz
XG4iLCBtZXNzYWdlKTsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKKyAgICAgICAgVFJB
Q0UoIlxuJXMiLCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLy8g
UGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUg
YWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10g
YXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1
c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IFByb2dyYW06
OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCit7CisgICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCisgICAgeworICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSkgKiB2YXJ5aW5nLT5zaXplOworICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291
bnQodmFyeWluZy0+dHlwZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAg
ICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgciA9IDA7IHIgPD0gTUFYX1ZBUllJTkdfVkVDVE9SUyAtIG4gJiYgIXN1Y2Nl
c3M7IHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxh
YmxlOyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwor
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5n
W3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzICYmIG0gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBy
ID0gTUFYX1ZBUllJTkdfVkVDVE9SUyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5
XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobSA9
PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CisKKyAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgeSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2lu
Z1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+
IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID4gbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7
IHIrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja2lu
Z1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5yZWcgPSByOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKKworICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFw
cGVuZFRvSW5mb0xvZygiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUu
Y19zdHIoKSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lz
dGVycyA9IDA7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7
IHIrKykKKyAgICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0g
fHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAgICB7CisgICAgICAgICAg
ICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZWdpc3RlcnM7
Cit9CisKK2Jvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKK3sKKyAgICBpZiAobVBpeGVsSExT
TC5lbXB0eSgpIHx8IG1WZXJ0ZXhITFNMLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19W
RUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBh
Y2tpbmcpOworCisgICAgaWYgKHJlZ2lzdGVycyA8IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlZ2lzdGVycyA9PSBNQVhfVkFSWUlOR19WRUNUT1JT
ICYmIG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFn
Q29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2lu
KCk7IGlucHV0ICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCisg
ICAgeworICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigp
OyBvdXRwdXQgIT0gbVZlcnRleFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5
cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5n
ICVzIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQt
Pm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJl
ZzsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7CisKKyAgICAgICAg
ICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJGcmFnbWVudCB2YXJ5aW5nIHZhcnlpbmcgJXMgZG9l
cyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0
ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsK
KworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsr
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MiAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzQ6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDN4MyAiOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IG1WZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBtVmVydGV4SExTTCArPSBkZWNvcmF0ZShh
dHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7
XG4iOworCisgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1
dGUtPnR5cGUpOworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQg
Z2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJl
Z2lzdGVyczsgcisrKQorICAgIHsKKyAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdb
cl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkp
OworCisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6
ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6IFRFWENPT1JEIiArIHN0cihyKSArICI7XG4iOworICAg
IH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAg
ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQi
ICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisKKyAgICBtVmVydGV4SExTTCArPSAi
fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgIlZTX09V
VFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNM
ICs9ICIgICAgIiArIGRlY29yYXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKKworICAgICAg
ICBpZiAoVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgK
KyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7CisgICAg
ICAgIH0KKworICAgICAgICBtVmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZShhdHRy
aWJ1dGUtPm5hbWUpICsgIik7XG4iOworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIK
KyAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54
IC0gZHhfSGFsZlBpeGVsU2l6ZS54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55IC0gZHhfSGFs
ZlBpeGVsU2l6ZS55ICogZ2xfUG9zaXRpb24udyk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykg
KiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9
IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFn
Q29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgdmFyeWluZyA9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlp
bmcgIT0gbVZlcnRleFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7Cisg
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwor
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkg
KiByb3dzICsgajsKKyAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRw
dXQudiIgKyBzdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3Rl
ciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVk
UmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0g
PT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG1WZXJ0
ZXhITFNMICs9ICJ4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBtVmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogbVZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1WZXJ0ZXhITFNMICs9ICJ3IjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiID0gIiArIHZhcnlp
bmctPm5hbWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyeWluZy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1WZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsg
c3RyKGopICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4SExT
TCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAg
ICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgbVBpeGVsSExTTCArPSAic3RydWN0IFBTX0lO
UFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAKKyAgICBmb3IgKFZhcnlpbmdM
aXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigp
OyB2YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
KyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0
cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOworICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiArICIgOiBURVhDT09SRCIgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
RnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisgICAg
eworICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Cisg
ICAgfQorCisgICAgbVBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xP
UjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAgICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAg
ICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKKyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAx
LjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAg
IGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1dpbmRv
dy54ICsgZHhfV2luZG93Lno7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFn
Q29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9XaW5kb3cueSArIGR4
X1dpbmRvdy53O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnog
PSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7
CisgICAgfQorCisgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAg
ICB7CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50
c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQu
dkZhY2UgPD0gMC4wKSk7XG4iOworICAgIH0KKworICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcg
IT0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmct
PnJlZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICAiICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWlu
Zy0+YXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSAr
ICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1QaXhl
bEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgbVBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGdsX21h
aW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAg
UFNfT1VUUFVUIG91dHB1dDtcbiIgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0gPSBnbF9Db2xvclswXTtcbiIKKyAgICAgICAgICAgICAg
ICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAg
ICAgICAgICAgICAgICJ9XG4iOworCisgICAgVFJBQ0UoIlxuJXMiLCBtUGl4ZWxITFNMLmNfc3Ry
KCkpOworICAgIFRSQUNFKCJcbiVzIiwgbVZlcnRleEhMU0wuY19zdHIoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBw
aXhlbCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCisvLyBjb21waWxpbmcg
dGhlbSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBh
bmQgY29sbGVjdGluZworLy8gYSBsaXN0IG9mIHVuaWZvcm1zCit2b2lkIFByb2dyYW06Omxpbmso
KQoreworICAgIHVubGluaygpOworCisgICAgaWYgKCFtRnJhZ21lbnRTaGFkZXIgfHwgIW1GcmFn
bWVudFNoYWRlci0+aXNDb21waWxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbVZlcnRleFNoYWRlciB8fCAhbVZlcnRleFNoYWRlci0+aXNDb21waWxlZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENvbnRleHQgKmNvbnRleHQg
PSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQt
PmdldFZlcnRleFNoYWRlclByb2ZpbGUoKTsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUg
PSBjb250ZXh0LT5nZXRQaXhlbFNoYWRlclByb2ZpbGUoKTsKKworICAgIG1QaXhlbEhMU0wgPSBt
RnJhZ21lbnRTaGFkZXItPmdldEhMU0woKTsKKyAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFk
ZXItPmdldEhMU0woKTsKKworICAgIGlmICghbGlua1ZhcnlpbmdzKCkpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSUQzRFhCdWZmZXIgKnZlcnRleEJpbmFyeSA9IGNvbXBp
bGVUb0JpbmFyeShtVmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50
VGFibGVWUyk7CisgICAgSUQzRFhCdWZmZXIgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5
KG1QaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7CisK
KyAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQorICAgIHsKKyAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgdmVy
dGV4UmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5h
cnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICAgICAgSFJF
U1VMVCBwaXhlbFJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhl
bEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7CisKKyAgICAg
ICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhS
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVz
dWx0KSk7CisKKyAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHBpeGVs
QmluYXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7CisgICAgICAg
IHBpeGVsQmluYXJ5ID0gTlVMTDsKKworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYg
bVBpeGVsRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmli
dXRlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVQUykp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVZTKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRl
ZCBiZWNhdXNlIGdsXyBhbmQgZHhfCisgICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4
ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KKyAgICAgICAgICAg
IG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJh
bmdlLm5lYXIiLCB0cnVlKTsKKyAgICAgICAgICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7CisgICAgICAgICAg
ICBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhS
YW5nZS5kaWZmIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIsIHRydWUpOworICAgICAgICAgICAgbUR4V2luZG93TG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1dpbmRvdyIsIHRydWUpOworICAgICAgICAg
ICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxm
UGl4ZWxTaXplIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIsIHRydWUpOworICAgICAgICAgICAgbUR4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVz
IiwgdHJ1ZSk7CisKKyAgICAgICAgICAgIG1MaW5rZWQgPSB0cnVlOyAgIC8vIFN1Y2Nlc3MKKyAg
ICAgICAgfQorICAgIH0KK30KKworLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdM
IGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCiti
b29sIFByb2dyYW06OmxpbmtBdHRyaWJ1dGVzKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgdXNlZExv
Y2F0aW9ucyA9IDA7CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGlu
ZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAgICAgICBp
bnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisKKyAg
ICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlv
bgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25d
Lm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBNdWx0aXBs
ZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90IGFuIGVy
cm9yCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRp
b25dID0gKmF0dHJpYnV0ZTsKKworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0Nv
dW50KGF0dHJpYnV0ZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24g
PiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kVG9JbmZvTG9nKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9v
IGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBo
YXZlIGEgYmluZGluZyBsb2NhdGlvbgorICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9y
IGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0
ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAg
eworICAgICAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+
bmFtZSk7CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgYXZhaWxhYmxl
SW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9W
RVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8
fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJUb28gbWFueSBhY3RpdmUgYXR0
cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluaworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJp
YnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQgaW5k
ZXggPSBtVmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0
cmlidXRlSW5kZXhdLm5hbWUpOworICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxl
Um93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworCisg
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFByb2dyYW06OmdldEF0dHJp
YnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCit7CisgICAgZm9yIChpbnQgbG9j
YXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKKyAg
ICB7CisgICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAh
PSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsK
K30KKworYm9vbCBQcm9ncmFtOjpsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRhYmxlICpjb25z
dGFudFRhYmxlKQoreworICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29uc3RhbnRUYWJsZURl
c2NyaXB0aW9uOworICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Cisg
ICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKKworICAgIGNvbnN0YW50VGFibGUtPkdldERl
c2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBj
b25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJbmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgrKykKKyAgICB7CisgICAgICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudElu
ZGV4KTsKKyAgICAgICAgY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFu
ZGxlLCAmY29uc3RhbnREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAg
IGlmICghZGVmaW5lVW5pZm9ybShjb25zdGFudEhhbmRsZSwgY29uc3RhbnREZXNjcmlwdGlvbikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCisvLyBBZGRzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNv
bnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBsaXN0IG9mIHVuaWZvcm1z
CisvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5vdCBhbHJlYWR5IGRlZmlu
ZWQpCitib29sIFByb2dyYW06OmRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhBTkRMRSAmY29uc3Rh
bnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBz
dGQ6OnN0cmluZyBuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVy
U2V0ID09IEQzRFhSU19TQU1QTEVSKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKKworICAgICAgICBh
c3NlcnQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1sw
XSkpOworCisgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Cisg
ICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLnR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlv
bi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBTQU1QTEVSX0NVQkUgOiBTQU1QTEVSXzJE
OworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAw
OworICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgfQor
CisgICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3MpCisgICAgeworICAgICAgY2Fz
ZSBEM0RYUENfU1RSVUNUOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBm
aWVsZCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRI
YW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwgZmll
bGQpOworCisgICAgICAgICAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlv
bjsKKyAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworCisgICAgICAg
ICAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAm
ZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgICAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsg
Y29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgIi4iKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBjYXNl
IEQzRFhQQ19TQ0FMQVI6CisgICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6CisgICAgICBjYXNlIEQz
RFhQQ19NQVRSSVhfQ09MVU1OUzoKKyAgICAgIGNhc2UgRDNEWFBDX09CSkVDVDoKKyAgICAgICAg
cmV0dXJuIGRlZmluZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFByb2dyYW06OmRlZmlu
ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0
ZDo6c3RyaW5nICZuYW1lKQoreworICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3Jt
KGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUpOworCisgICAgaWYoIXVuaWZvcm0pCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBk
ZWZpbmVkCisgICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24obmFtZS5jX3N0
cigpLCB0cnVlKTsKKyAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7CisKKyAgICBpZiAo
bG9jYXRpb24gPj0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB1bmlmb3JtOworCisgICAgICAg
IGlmIChtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdLT50eXBlICE9IHR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKKyAgICB1bnNpZ25l
ZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQorICAgIHsKKyAg
ICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKG5hbWUsIGksIHVu
aWZvcm1JbmRleCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitVbmlmb3JtICpQ
cm9ncmFtOjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAoY29uc3RhbnREZXNjcmlw
dGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQgc2NhbGFycworICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAgICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6
CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5U
LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JP
T0xfVkVDMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgbmFtZSwgY29uc3Rh
bnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEQzRFhQVF9JTlQ6CisgICAgICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5ULCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRf
VkVDMywgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUM0LCBuYW1lLCBjb25zdGFudERl
c2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNE
WFBUX0ZMT0FUOgorICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0ZMT0FULCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVF9WRUM0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9
PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6CisgICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uUm93cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX01BVDMsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRv
IG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBQcm9ncmFtOjpkZWNvcmF0
ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3RyKDAs
IDMpICE9ICJnbF8iICYmIHN0cmluZy5zdWJzdHIoMCwgMykgIT0gImR4XyIpCisgICAgeworICAg
ICAgICByZXR1cm4gIl8iICsgc3RyaW5nOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gc3RyaW5nOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgUHJvZ3JhbTo6dW5kZWNv
cmF0ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuc3Vic3Ry
KDAsIDEpID09ICJfIikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDEpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KK30K
KworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdikKK3sKKyAgICBCT09MICp2ZWN0b3IgPSBuZXcgQk9P
TFtjb3VudF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAg
ICAgICAgaWYgKHZbaV0gPT0gR0xfRkFMU0UpCisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAwOwor
ICAgICAgICBlbHNlIAorICAgICAgICAgICAgdmVjdG9yW2ldID0gMTsKKyAgICB9CisKKyAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNv
bnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFu
dFBTLCAmY29uc3RhbnRWUyk7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVQUy0+U2V0Qm9vbEFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7
CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRU
YWJsZVZTLT5TZXRCb29sQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsK
KyAgICB9CisKKyAgICBkZWxldGUgW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMmJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5l
dyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgodlswXSA9PSBHTF9G
QUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZb
MV0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIDAsIDApOworCisgICAgICAgIHYgKz0gMjsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAg
ICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVu
aWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywg
dmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAg
ICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMs
IHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTNidihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KQoreworICAgIEQzRFhWRUNU
T1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RP
UjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZbMl0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiks
IDApOworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQz
RFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0
Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7
CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAo
Y29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFy
cmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYg
KGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JB
cnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRl
bGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFw
cGx5VW5pZm9ybTRidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29s
ZWFuICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291
bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4w
ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzFdID09IEdMX0ZBTFNFID8g
MC4wZiA6IDEuMGYpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbMl0gPT0g
R0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodlszXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSk7CisKKyAgICAgICAgdiArPSAzOwor
ICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAg
IEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5p
Zm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAg
ICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2
ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAg
ICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywg
dmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlIFtdIHZlY3RvcjsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
KworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7
CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29u
c3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisK
KyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNl
dEZsb2F0QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAg
aWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRGbG9h
dEFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdiwgY291bnQpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAq
dmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KHZb
MF0sIHZbMV0sIDAsIDApOworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50
VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAm
Y29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMt
PlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAg
fQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZT
LT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAg
IH0KKworICAgIGRlbGV0ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW06OmFwcGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhW
RUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KHZbMF0sIHZbMV0sIHZbMl0sIDAp
OworCisgICAgICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhI
QU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29u
c3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29u
c3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5
KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNv
bnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJh
eShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0
ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5
VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAq
dikKK3sKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZv
cm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgKEQz
RFhWRUNUT1I0Kil2LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAg
eworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0
YW50VlMsIChEM0RYVkVDVE9SNCopdiwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgRDNEWE1BVFJJ
WCAqbWF0cml4ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0gRDNEWE1BVFJJWCh2
YWx1ZVswXSwgdmFsdWVbMl0sIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVbMV0sIHZhbHVlWzNdLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsICAgICAgICAwLCAgICAgICAgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAgICAgICAgMCwgICAgICAgIDAsIDEpOworCisgICAgICAgIHZhbHVlICs9IDQ7CisgICAg
fQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3Jt
LCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBt
Q29uc3RhbnRUYWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50
UFMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsK
KyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNl
LCBjb25zdGFudFZTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBkZWxldGVbXSBtYXRy
aXg7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQoreworICAgIEQzRFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1h
dHJpeFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0sIHZhbHVlWzNdLCB2YWx1ZVs2XSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXSwgdmFsdWVbNF0sIHZhbHVlWzdd
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs1XSwg
dmFsdWVbOF0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAs
ICAgICAgICAwLCAgICAgICAgMSk7CisKKyAgICAgICAgdmFsdWUgKz0gOTsKKyAgICB9CisKKyAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExF
IGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25z
dGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFu
dFRhYmxlUFMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0
cml4LCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0
YW50VlMsIG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7
CisgICAgRDNEWE1BVFJJWCAqbWF0cml4ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ld
ID0gRDNEWE1BVFJJWCh2YWx1ZVswXSwgdmFsdWVbNF0sIHZhbHVlWzhdLCAgdmFsdWVbMTJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVs1XSwgdmFsdWVb
OV0sICB2YWx1ZVsxM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMl0s
IHZhbHVlWzZdLCB2YWx1ZVsxMF0sIHZhbHVlWzE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVszXSwgdmFsdWVbN10sIHZhbHVlWzExXSwgdmFsdWVbMTVdKTsKKworICAg
ICAgICB2YWx1ZSArPSAxNjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5E
TEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3Rh
bnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3Rh
bnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldE1hdHJpeFRyYW5zcG9z
ZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisgICAg
aWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRNYXRy
aXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIG1hdHJpeCwgY291bnQpOworICAg
IH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW06OmFwcGx5VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCit7CisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0
YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxl
cyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisg
ICAgeworICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOworICAg
ICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhjb25zdGFudFBTLCAmY29uc3RhbnRE
ZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOworCisgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NB
TVBMRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0g
bUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KGNvbnN0YW50UFMpOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4OyBzYW1wbGVy
SW5kZXggPCBmaXJzdEluZGV4ICsgY291bnQ7IHNhbXBsZXJJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEdMaW50IG1hcHBlZFNhbXBsZXIgPSB2WzBdOworCisgICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA+PSAwICYmIHNhbXBsZXJJbmRleCA8IE1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1hcHBlZFNh
bXBsZXI7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50UFMpCisg
ICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRJbnRBcnJheShkZXZpY2UsIGNvbnN0
YW50UFMsIHYsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7Cisg
ICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldEludEFycmF5KGRldmljZSwgY29uc3RhbnRWUywg
diwgY291bnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06
OmFwcGx5VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3Vu
dF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIDAsIDAp
OworCisgICAgICAgIHYgKz0gMjsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhI
QU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29u
c3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29u
c3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5
KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNv
bnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJh
eShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0
ZVtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
Cit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0
b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJd
LCAwKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOworICAgIGdl
dENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMp
OworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgaWYg
KGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JB
cnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGlm
IChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9y
QXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBk
ZWxldGVbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjph
cHBseVVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRd
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
dmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQp
dlsyXSwgKGZsb2F0KXZbM10pOworCisgICAgICAgIHYgKz0gNDsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0
YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBT
LCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxl
UFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7Cisg
ICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJs
ZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOwor
ICAgIH0KKworICAgIGRlbGV0ZSBbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQcm9ncmFtOjphcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7
CisgICAgaWYgKCFmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y2hhciBpbmZvWzEwMjRdOworCisgICAgdmFfbGlzdCB2YXJhcmc7CisgICAgdmFfc3RhcnQodmFy
YXJnLCBmb3JtYXQpOworICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwg
dmFyYXJnKTsKKyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0g
c3RybGVuKGluZm8pOworCisgICAgaWYgKCFtSW5mb0xvZykKKyAgICB7CisgICAgICAgIG1JbmZv
TG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2cs
IGluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgbG9nTGVuZ3Ro
ID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9n
TGVuZ3RoICsgaW5mb0xlbmd0aCArIDFdOworICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xv
Zyk7CisgICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOworCisgICAgICAg
IGRlbGV0ZVtdIG1JbmZvTG9nOworICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKyAgICB9Cit9
CisKK3ZvaWQgUHJvZ3JhbTo6cmVzZXRJbmZvTG9nKCkKK3sKKyAgICBpZiAobUluZm9Mb2cpCisg
ICAgeworICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7CisgICAgfQorfQorCisvLyBSZXR1cm5z
IHRoZSBwcm9ncmFtIG9iamVjdCB0byBhbiB1bmxpbmtlZCBzdGF0ZSwgYWZ0ZXIgZGV0YWNoaW5n
IGEgc2hhZGVyLCBiZWZvcmUgcmUtbGlua2luZywgb3IgYXQgZGVzdHJ1Y3Rpb24KK3ZvaWQgUHJv
Z3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKK3sKKyAgICBpZiAoZGVzdHJveSkgICAvLyBPYmpl
Y3QgYmVpbmcgZGVzdHJ1Y3RlZAorICAgIHsKKyAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikK
KyAgICAgICAgeworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAg
ICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVZlcnRleFNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0
YWNoKCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgbVBpeGVsRXhl
Y3V0YWJsZS0+UmVsZWFzZSgpOworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKKyAg
ICB9CisKKyAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZS0+UmVsZWFzZSgpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgfQorCisgICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCisgICAgeworICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxM
OworICAgIH0KKworICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQorICAgIHsKKyAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVM
TDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0u
bmFtZS5jbGVhcigpOworICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKKyAgICB9
CisKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM7IGluZGV4KyspCisgICAgeworICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOworICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlm
b3Jtcy5iYWNrKCk7CisgICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOworICAgIH0KKworICAg
IG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uID0gLTE7CisgICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRp
b24gPSAtMTsKKyAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gLTE7CisgICAgbUR4RGVwdGhM
b2NhdGlvbiA9IC0xOworICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gLTE7CisgICAgbUR4SGFsZlBp
eGVsU2l6ZUxvY2F0aW9uID0gLTE7CisgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOworICAg
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOworCisgICAgbVVuaWZvcm1JbmRleC5jbGVh
cigpOworCisgICAgbVBpeGVsSExTTC5jbGVhcigpOworICAgIG1WZXJ0ZXhITFNMLmNsZWFyKCk7
CisKKyAgICBkZWxldGVbXSBtSW5mb0xvZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBt
TGlua2VkID0gZmFsc2U7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQoreworICAgIHJl
dHVybiBtTGlua2VkOworfQorCitib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCit7
CisgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRT
ZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwor
fQorCitpbnQgUHJvZ3JhbTo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
SW5mb0xvZykKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKK3sKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKG1JbmZvTG9nKQor
ICAgIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50
KXN0cmxlbihtSW5mb0xvZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2dbaW5kZXhd
ID0gbUluZm9Mb2dbaW5kZXhdOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAn
XDAnOworICAgIH0KKworICAgIGlmIChsZW5ndGgpCisgICAgeworICAgICAgICAqbGVuZ3RoID0g
aW5kZXg7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVycyhHTHNp
emVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKQoreworICAgIGlu
dCB0b3RhbCA9IDA7CisKKyAgICBpZiAobVZlcnRleFNoYWRlcikKKyAgICB7CisgICAgICAgIGlm
ICh0b3RhbCA8IG1heENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJzW3RvdGFs
XSA9IG1WZXJ0ZXhTaGFkZXItPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdG90
YWwrKzsKKyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgIHsKKyAgICAgICAg
aWYgKHRvdGFsIDwgbWF4Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90
YWxdID0gbUZyYWdtZW50U2hhZGVyLT5nZXRIYW5kbGUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHRvdGFsKys7CisgICAgfQorCisgICAgaWYgKGNvdW50KQorICAgIHsKKyAgICAgICAgKmNvdW50
ID0gdG90YWw7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZShH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6
ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IGF0dHJp
YnV0ZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQor
ICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmlidXRlKys7CisK
KyAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlMpOyAgIC8v
IGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKKyAg
ICAgICAgfQorICAgICAgICB3aGlsZSAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUu
ZW1wdHkoKSk7CisgICAgfQorCisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAg
Y29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19z
dHIoKTsKKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7CisgICAgICAg
IG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAg
ICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgICAgICB9CisgICAg
fQorCisgICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UK
KworICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Cit9CisKK0dM
aW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQg
PSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGNvdW50OworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgo
KQoreworICAgIGludCBtYXhMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgYXR0cmlidXRlSW5k
ZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRl
eF0ubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6
Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgp
ICsgMSksIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVu
Z3RoOworfQorCit2b2lkIFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBH
THNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlw
ZSwgR0xjaGFyICpuYW1lKQoreworICAgIHVuc2lnbmVkIGludCB1bmlmb3JtID0gMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspCisgICAgeworICAgICAgICBk
bworICAgICAgICB7CisgICAgICAgICAgICB1bmlmb3JtKys7CisKKyAgICAgICAgICAgIEFTU0VS
VCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVy
IHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAo
bVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLnN1YnN0cigwLCAzKSA9PSAiZHhfIik7CisgICAgfQor
CisgICAgaWYgKGJ1ZnNpemUgPiAwKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5n
ID0gdW5kZWNvcmF0ZShtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUpOworCisgICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybV0tPmFycmF5U2l6ZSAhPSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gIlswXSI7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KG5hbWUsIHN0
cmluZy5jX3N0cigpLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAn
OworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6ZSA9IG1Vbmlmb3Jt
c1t1bmlmb3JtXS0+YXJyYXlTaXplOworCisgICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
PnR5cGU7Cit9CisKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCit7Cisg
ICAgaW50IGNvdW50ID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlm
b3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5p
Zm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLnN1YnN0cigwLCAzKSAhPSAiZHhfIikK
KyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBjb3VudDsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExl
bmd0aCgpCit7CisgICAgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZv
cm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykK
KyAgICB7CisgICAgICAgIGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHko
KSAmJiBtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5zdWJzdHIoMCwgMykgIT0gImR4XyIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKHVuZGVj
b3JhdGUobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUpLmxlbmd0aCgpICsgMSksIG1heExl
bmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCit2
b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOworfQorCit2b2lkIFByb2dyYW06OnZhbGlkYXRlKCkK
K3sKKyAgICByZXNldEluZm9Mb2coKTsKKworICAgIGlmICghaXNMaW5rZWQoKSkgCisgICAgewor
ICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxs
eSBsaW5rZWQuIik7CisgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgYXBwbHlVbmlmb3JtcygpOworICAgICAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJTYW1w
bGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdl
IHVuaXQuIik7CisgICAgICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBQcm9ncmFtOjp2YWxpZGF0ZVNhbXBsZXJzKCkgY29u
c3QKK3sKKyAgICAvLyBpZiBhbnkgdHdvIGFjdGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJl
IG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJlZmVyIHRvIHRoZSBzYW1lCisgICAgLy8gdGV4dHVy
ZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlk
YXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAorICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVt
ZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElEX09QRVJBVElPTiBlcnJvci4KKyAgICBzdGQ6Om1h
cDxpbnQsIFNhbXBsZXJUeXBlPiBzYW1wbGVyTWFwOyAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyArK2kpCisgICAgeworICAgICAgICBp
ZiAobVNhbXBsZXJzW2ldLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNhbXBs
ZXJNYXAuZmluZChtU2FtcGxlcnNbaV0ubG9naWNhbFRleHR1cmVVbml0KSAhPSBzYW1wbGVyTWFw
LmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNbaV0u
dHlwZSAhPSBzYW1wbGVyTWFwW21TYW1wbGVyc1tpXS5sb2dpY2FsVGV4dHVyZVVuaXRdKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlck1hcFttU2FtcGxl
cnNbaV0ubG9naWNhbFRleHR1cmVVbml0XSA9IG1TYW1wbGVyc1tpXS50eXBlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJv
Z3JhbTo6Z2V0Q29uc3RhbnRIYW5kbGVzKFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEQzRFhIQU5E
TEUgKmNvbnN0YW50UFMsIEQzRFhIQU5ETEUgKmNvbnN0YW50VlMpCit7CisgICAgaWYgKCF0YXJn
ZXRVbmlmb3JtLT5oYW5kbGVzU2V0KQorICAgIHsKKyAgICAgICAgdGFyZ2V0VW5pZm9ybS0+cHNI
YW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlm
b3JtLT5uYW1lLmNfc3RyKCkpOworICAgICAgICB0YXJnZXRVbmlmb3JtLT52c0hhbmRsZSA9IG1D
b25zdGFudFRhYmxlVlMtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPm5hbWUu
Y19zdHIoKSk7CisgICAgICAgIHRhcmdldFVuaWZvcm0tPmhhbmRsZXNTZXQgPSB0cnVlOworICAg
IH0KKworICAgICpjb25zdGFudFBTID0gdGFyZ2V0VW5pZm9ybS0+cHNIYW5kbGU7CisgICAgKmNv
bnN0YW50VlMgPSB0YXJnZXRVbmlmb3JtLT52c0hhbmRsZTsKK30KKworR0xpbnQgUHJvZ3JhbTo6
Z2V0RGVwdGhSYW5nZURpZmZMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aFJh
bmdlRGlmZkxvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlTmVhckxv
Y2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247Cit9
CisKK0dMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1EZXB0aFJhbmdlRmFyTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06Omdl
dER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247
Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4V2luZG93TG9jYXRpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtRHhXaW5kb3dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhIYWxm
UGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb247Cit9CisKK0dMaW50IFByb2dyYW06OmdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EeEZyb250Q0NXTG9jYXRpb247Cit9CisKK0dMaW50IFByb2dy
YW06OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUHJvZ3JhbS5oOiBE
ZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVj
dHMKKy8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDIuMTAuMyBwYWdlIDI4LgorCisjaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCisKKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUg
PHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25h
bWVzcGFjZSBnbAoreworY2xhc3MgRnJhZ21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7
CisKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3Jt
CitzdHJ1Y3QgVW5pZm9ybQoreworICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKworICAgIH5Vbmlmb3JtKCk7
CisKKyAgICBjb25zdCBHTGVudW0gdHlwZTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOwor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICB1bnNpZ25lZCBjaGFyICpk
YXRhOworICAgIGJvb2wgZGlydHk7CisKKyAgICBEM0RYSEFORExFIHZzSGFuZGxlOworICAgIEQz
RFhIQU5ETEUgcHNIYW5kbGU7CisgICAgYm9vbCBoYW5kbGVzU2V0OworfTsKKworLy8gU3RydWN0
IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlz
IHRvIGhhbmRsZXMKK3N0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3sKKyAgICBVbmlmb3JtTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25l
ZCBpbnQgaW5kZXgpOworCisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQg
ZWxlbWVudDsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCitjbGFzcyBQcm9ncmFtCit7
CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtKCk7CisKKyAgICB+UHJvZ3JhbSgpOworCisgICAgYm9v
bCBhdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOworICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNo
YWRlciAqc2hhZGVyKTsKKyAgICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsK
KworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKKworICAgIHZvaWQgYmluZEF0
dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7CisgICAgR0x1
aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOworICAgIGludCBnZXRT
ZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CisKKyAgICB2b2lkIGRpcnR5QWxsU2Ft
cGxlcnMoKTsKKworICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXgpOworICAgIFNhbXBsZXJUeXBlIGdldFNhbXBsZXJUeXBlKHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXgpOworICAgIGJvb2wgaXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCkgY29uc3Q7CisgICAgdm9pZCBzZXRTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCwgYm9vbCBkaXJ0eSk7CisKKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24o
Y29uc3QgY2hhciAqbmFtZSwgYm9vbCBkZWNvcmF0ZWQpOworICAgIGJvb2wgc2V0VW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAg
Ym9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBz
ZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRV
bmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
CisgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisKKyAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwg
R0xmbG9hdCAqcGFyYW1zKTsKKyAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwg
R0xpbnQgKnBhcmFtcyk7CisKKyAgICBHTGludCBnZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCkg
Y29uc3Q7CisgICAgR0xpbnQgZ2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4
RGVwdGhMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4V2luZG93TG9jYXRpb24oKSBj
b25zdDsKKyAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OworICAg
IEdMaW50IGdldER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OworICAgIEdMaW50IGdldER4UG9p
bnRzT3JMaW5lc0xvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMo
KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKworICAgIHZvaWQgbGluaygpOworICAgIGJv
b2wgaXNMaW5rZWQoKTsKKyAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OworICAgIHZv
aWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZyk7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CisKKyAgICB2b2lkIGdldEFjdGl2ZUF0dHJp
YnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAgIEdMaW50IGdldEFjdGl2
ZUF0dHJpYnV0ZUNvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3Ro
KCk7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKKyAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CisKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigp
OworICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgdmFs
aWRhdGUoKTsKKyAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMoKSBjb25zdDsKKyAgICBib29sIGlz
VmFsaWRhdGVkKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CisK
KyAgICBJRDNEWEJ1ZmZlciAqY29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0
IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOworICAg
IHZvaWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKworICAgIGludCBwYWNrVmFyeWlu
Z3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKTsKKyAgICBib29sIGxpbmtWYXJ5aW5ncygp
OworCisgICAgYm9vbCBsaW5rQXR0cmlidXRlcygpOworICAgIGludCBnZXRBdHRyaWJ1dGVCaW5k
aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKworICAgIGJvb2wgbGlua1VuaWZvcm1zKElE
M0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3Jt
KGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVT
QyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKKyAgICBib29s
IGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRp
b24sIHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0
IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFt
ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0yYnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBh
cHBseVVuaWZvcm0zYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9v
bGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIGJv
b2wgYXBwbHlVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1NYXRyaXgzZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBi
b29sIGFwcGx5VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisgICAgYm9vbCBhcHBseVVu
aWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
KyAgICBib29sIGFwcGx5VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CisKKyAgICB2b2lkIGdldENvbnN0YW50
SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBE
M0RYSEFORExFICpjb25zdGFudFZTKTsKKworICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0
IGNoYXIgKmluZm8sIC4uLik7CisgICAgdm9pZCByZXNldEluZm9Mb2coKTsKKworICAgIHN0YXRp
YyBzdGQ6OnN0cmluZyBkZWNvcmF0ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKTsgICAgIC8v
IFByZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRl
KGNvbnN0IHN0ZDo6c3RyaW5nICZzdHJpbmcpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2Nv
cmUKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKKworICAgIEZyYWdt
ZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CisgICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hh
ZGVyOworCisgICAgc3RkOjpzdHJpbmcgbVBpeGVsSExTTDsKKyAgICBzdGQ6OnN0cmluZyBtVmVy
dGV4SExTTDsKKworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsK
KyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKKyAgICBJRDNE
WENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7CisgICAgSUQzRFhDb25zdGFudFRhYmxl
ICptQ29uc3RhbnRUYWJsZVZTOworCisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1
dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRy
aWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKworICAgIHN0cnVjdCBTYW1wbGVyCisgICAgeworICAgICAgICBib29s
IGFjdGl2ZTsKKyAgICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OworICAgICAgICBTYW1w
bGVyVHlwZSB0eXBlOworICAgICAgICBib29sIGRpcnR5OworICAgIH07CisKKyAgICBTYW1wbGVy
IG1TYW1wbGVyc1tNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisKKyAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7CisgICAgVW5pZm9ybUFycmF5IG1Vbmlmb3Jt
czsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4
OworICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworCisgICAgR0xpbnQgbURlcHRoUmFu
Z2VEaWZmTG9jYXRpb247CisgICAgR0xpbnQgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247CisgICAg
R0xpbnQgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0aExvY2F0aW9u
OworICAgIEdMaW50IG1EeFdpbmRvd0xvY2F0aW9uOworICAgIEdMaW50IG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbjsKKyAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOworICAgIEdMaW50IG1E
eFBvaW50c09yTGluZXNMb2NhdGlvbjsKKworICAgIGJvb2wgbUxpbmtlZDsKKyAgICBib29sIG1E
ZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBi
ZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQorICAgIGNoYXIgKm1JbmZvTG9nOworICAg
IGJvb2wgbVZhbGlkYXRlZDsKKworICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOworCisgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKK307Cit9CisKKyNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9QUk9HUkFNX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVu
ZGVyYnVmZmVyLmNwcDogdGhlIGdsOjpSZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVk
IGNsYXNzZXMKKy8vIENvbG9yYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4g
SW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rp
b25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGds
Cit7Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjptQ3VycmVudFNlcmlhbCA9IDE7CisKK1Jl
bmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtV2lkdGggPSAwOworICAgIG1IZWln
aHQgPSAwOworICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy8gZGVmYXVsdCBmb3JtYXQsIG5lZWRz
IHRvIGJlIG9uZSBvZiB0aGUgZXhwZWN0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMKKyAgICBtU2Vy
aWFsID0gaXNzdWVTZXJpYWwoKTsKK30KKworUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkK
K3sKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzQ29sb3JidWZmZXIoKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVm
ZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBOVUxMOworfQorCitJRGlyZWN0
M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVy
biBOVUxMOworfQorCitpbnQgUmVuZGVyYnVmZmVyOjpnZXRXaWR0aCgpCit7CisgICAgcmV0dXJu
IG1XaWR0aDsKK30KKworaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkKK3sKKyAgICByZXR1
cm4gbUhlaWdodDsKK30KKwordm9pZCBSZW5kZXJidWZmZXI6OnNldFNpemUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7
Cit9CisKKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0KCkKK3sKKyAgICByZXR1cm4g
bUZvcm1hdDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVNlcmlhbDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
cjo6aXNzdWVTZXJpYWwoKQoreworICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOworfQorCitD
b2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkg
OiBtUmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAocmVuZGVyVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKworICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVz
Y3JpcHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0
aW9uLkhlaWdodCk7CisgICAgfQorCit9CisKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQg
d2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWln
aHQsIGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNETVVMVElTQU1QTEVfTk9O
RSwgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
eworICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAg
bUZvcm1hdCA9IGZvcm1hdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6
ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OworICAgIH0KK30KKworQ29sb3Ji
dWZmZXI6On5Db2xvcmJ1ZmZlcigpCit7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgewor
ICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgfQorfQorCitib29sIENvbG9y
YnVmZmVyOjppc0NvbG9yYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0x1aW50
IENvbG9yYnVmZmVyOjpnZXRSZWRTaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAg
ICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRl
clRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6
R2V0UmVkU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSgpCit7CisgICAgaWYgKG1SZW5k
ZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Cisg
ICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICBy
ZXR1cm4gZXMyZHg6OkdldEdyZWVuU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkKK3sK
KyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBk
ZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24p
OworCisgICAgICAgIHJldHVybiBlczJkeDo6R2V0Qmx1ZVNpemUoZGVzY3JpcHRpb24uRm9ybWF0
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworR0x1aW50IENvbG9yYnVmZmVyOjpnZXRB
bHBoYVNpemUoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNE
U1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNj
KCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRBbHBoYVNpemUoZGVz
Y3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworSURpcmVjdDNE
U3VyZmFjZTkgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0OworfQorCitEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAg
ICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYo
KTsKKworICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGRlcHRo
U3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3Jp
cHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9E
RVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBx
dWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVy
IGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9Cit9CisKK0RlcHRoYnVmZmVyOjpE
ZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0
aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAm
bURlcHRoU3RlbmNpbCwgMCk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7Cisg
ICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBU
SF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVy
aWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZv
cm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgc2V0U2l6ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQg
Zm9ybWF0CisgICAgfQorfQorCitEZXB0aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKCkKK3sKKyAgICBp
ZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKKyAgICB9Cit9CisKK2Jvb2wgRGVwdGhidWZmZXI6OmlzRGVwdGhidWZmZXIoKQoreworICAg
IHJldHVybiB0cnVlOworfQorCitHTHVpbnQgRGVwdGhidWZmZXI6OmdldERlcHRoU2l6ZSgpCit7
CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzY3JpcHRpb247CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9u
KTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldERlcHRoU2l6ZShkZXNjcmlwdGlvbi5Gb3Jt
YXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqRGVw
dGhidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7
Cit9CisKK1N0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK3sKKyAgICBpZiAoZGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKworICAg
ICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGRlcHRoU3RlbmNpbC0+
R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lk
dGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lO
REVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUg
Y2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVz
ZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UKKyAgICB9Cit9CisKK1N0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOworCisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNE
Rk1UX0QyNFM4LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWws
IDApOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworCisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7IC8v
IElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcg
ZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4
cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9y
YWdlCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldFNpemUoMCwgMCk7CisgICAg
ICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy9kZWZhdWx0IGZvcm1hdAorICAgIH0KK30KKworU3Rl
bmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZmZXIoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQor
ICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KK30KKworR0x1
aW50IFN0ZW5jaWxidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkKK3sKKyAgICBpZiAobURlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVy
biBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQor
eworICAgIHJldHVybiB0cnVlOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqU3RlbmNpbGJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KK30K
SW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIw
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJidWZmZXIuaDogRGVmaW5lcyB0aGUg
dmlydHVhbCBnbDo6UmVuZGVyYnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVyaXZlZAorLy8gY2xhc3Nl
cyBDb2xvcmJ1ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMg
R0wgcmVuZGVyYnVmZmVyCisvLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgorCisjaWZuZGVmIExJQkdM
RVNWMl9SRU5ERVJCVUZGRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxk
M2Q5Lmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKK2NsYXNzIFJlbmRlcmJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyKCk7
CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bG9yYnVmZmVyKCk7CisgICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZmZXIoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIHZpcnR1YWwgaW50IGdldFdpZHRoKCk7CisgICAgdmly
dHVhbCBpbnQgZ2V0SGVpZ2h0KCk7CisgICAgR0xlbnVtIGdldEZvcm1hdCgpOworICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgdW5zaWduZWQgaW50IG1TZXJp
YWw7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVm
ZmVyKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CisKKyAgICBp
bnQgbVdpZHRoOworICAgIGludCBtSGVpZ2h0OworfTsKKworY2xhc3MgQ29sb3JidWZmZXIgOiBw
dWJsaWMgUmVuZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBDb2xvcmJ1ZmZl
cihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKKyAgICBDb2xvcmJ1ZmZlcihpbnQg
d2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOworCisgICAgfkNvbG9yYnVmZmVyKCk7
CisKKyAgICBib29sIGlzQ29sb3JidWZmZXIoKTsKKworICAgIEdMdWludCBnZXRSZWRTaXplKCk7
CisgICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpOworICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpOwor
ICAgIEdMdWludCBnZXRBbHBoYVNpemUoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1S
ZW5kZXJUYXJnZXQ7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
Q29sb3JidWZmZXIpOworfTsKKworY2xhc3MgRGVwdGhidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWln
aHQpOworCisgICAgfkRlcHRoYnVmZmVyKCk7CisKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKTsK
KworICAgIEdMdWludCBnZXREZXB0aFNpemUoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihEZXB0aGJ1ZmZlcik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7
Cit9OworCitjbGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVw
dGhTdGVuY2lsKTsKKyAgICBTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisK
KyAgICB+U3RlbmNpbGJ1ZmZlcigpOworCisgICAgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKTsKKwor
ICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dERlcHRoU3RlbmNpbCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFN0ZW5jaWxidWZmZXIpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2ls
OworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJHTEVTdjIvU2hhZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDIgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIFNoYWRlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpTaGFkZXIgY2xhc3MgYW5k
IGl0cyAgZGVyaXZlZCBjbGFzc2VzCisvLyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVy
LiBJbXBsZW1lbnRzIEdMIHNoYWRlciBvYmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24g
My44IHBhZ2UgODQuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpbmNsdWRl
IDxzdHJpbmc+CisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlcmxhbmcuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKworbmFt
ZXNwYWNlIGdsCit7Cit2b2lkICpTaGFkZXI6Om1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsKK3Zv
aWQgKlNoYWRlcjo6bVZlcnRleENvbXBpbGVyID0gTlVMTDsKKworU2hhZGVyOjpTaGFkZXIoQ29u
dGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRsZSksIG1Db250ZXh0
KGNvbnRleHQpCit7CisgICAgbVNvdXJjZSA9IE5VTEw7CisgICAgbUhsc2wgPSBOVUxMOworICAg
IG1JbmZvTG9nID0gTlVMTDsKKworICAgIC8vIFBlcmZvcm0gYSBvbmUtdGltZSBpbml0aWFsaXph
dGlvbiBvZiB0aGUgc2hhZGVyIGNvbXBpbGVyIChvciBhZnRlciBiZWluZyBkZXN0cnVjdGVkIGJ5
IHJlbGVhc2VDb21waWxlcikKKyAgICBpZiAoIW1GcmFnbWVudENvbXBpbGVyKQorICAgIHsKKyAg
ICAgICAgaW50IHJlc3VsdCA9IFNoSW5pdGlhbGl6ZSgpOworCisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RD
b21waWxlcihFU2hMYW5nRnJhZ21lbnQsIEVTaFNwZWNHTEVTMik7CisgICAgICAgICAgICBtVmVy
dGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNH
TEVTMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtQXR0YWNoQ291bnQgPSAwOworICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKK30KKworU2hhZGVyOjp+U2hhZGVyKCkKK3sKKyAgICBkZWxl
dGVbXSBtU291cmNlOworICAgIGRlbGV0ZVtdIG1IbHNsOworICAgIGRlbGV0ZVtdIG1JbmZvTG9n
OworfQorCitHTHVpbnQgU2hhZGVyOjpnZXRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBt
SGFuZGxlOworfQorCit2b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0
IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCit7CisgICAgZGVsZXRlW10gbVNv
dXJjZTsKKyAgICBpbnQgdG90YWxMZW5ndGggPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdG90YWxMZW5ndGgg
Kz0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Tb3Vy
Y2UgPSBuZXcgY2hhclt0b3RhbExlbmd0aCArIDFdOworICAgIGNoYXIgKmNvZGUgPSBtU291cmNl
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
aW50IHN0cmluZ0xlbmd0aDsKKworICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmdMZW5ndGgg
PSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShj
b2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xlbmd0aCk7CisgICAgICAgIGNvZGUgKz0gc3RyaW5nTGVu
Z3RoOworICAgIH0KKworICAgIG1Tb3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKK30KKworaW50
IFNoYWRlcjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtSW5mb0xvZykK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
IHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQoreworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1J
bmZvTG9nKSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xv
Z1tpbmRleF07CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAg
fQorCisgICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAg
ICB9Cit9CisKK2ludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtU291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7CisgICAgfQorfQorCit2b2lk
IFNoYWRlcjo6Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpzb3VyY2UpCit7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgIGlmIChtU291cmNlKQorICAg
IHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0
cmxlbihtU291cmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgc291cmNlW2luZGV4XSA9IG1T
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChidWZTaXplKQorICAgIHsKKyAgICAgICAgc291cmNlW2luZGV4XSA9ICdcMCc7Cisg
ICAgfQorCisgICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsK
KyAgICB9Cit9CisKK2Jvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkKK3sKKyAgICByZXR1cm4gbUhs
c2wgIT0gTlVMTDsKK30KKworY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKK3sKKyAgICBy
ZXR1cm4gbUhsc2w7Cit9CisKK3ZvaWQgU2hhZGVyOjphdHRhY2goKQoreworICAgIG1BdHRhY2hD
b3VudCsrOworfQorCit2b2lkIFNoYWRlcjo6ZGV0YWNoKCkKK3sKKyAgICBtQXR0YWNoQ291bnQt
LTsKKworICAgIGlmIChtQXR0YWNoQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsK
KyAgICAgICAgbUNvbnRleHQtPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKKyAgICB9Cit9CisKK2Jv
b2wgU2hhZGVyOjppc0F0dGFjaGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUF0dGFjaENvdW50
ID4gMDsKK30KKworYm9vbCBTaGFkZXI6OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbURlbGV0ZVN0YXR1czsKK30KKwordm9pZCBTaGFkZXI6OmZsYWdGb3JEZWxl
dGlvbigpCit7CisgICAgbURlbGV0ZVN0YXR1cyA9IHRydWU7Cit9CisKK3ZvaWQgU2hhZGVyOjpy
ZWxlYXNlQ29tcGlsZXIoKQoreworICAgIFNoRGVzdHJ1Y3QobUZyYWdtZW50Q29tcGlsZXIpOwor
ICAgIFNoRGVzdHJ1Y3QobVZlcnRleENvbXBpbGVyKTsKKworICAgIG1GcmFnbWVudENvbXBpbGVy
ID0gTlVMTDsKKyAgICBtVmVydGV4Q29tcGlsZXIgPSBOVUxMOworCisgICAgU2hGaW5hbGl6ZSgp
OworfQorCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCit7CisgICAgaWYgKG1IbHNsKQor
ICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5
aW5ncyIpICsgMTI7CisKKyAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOworICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsy
NTZdOworCisgICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAl
cyAlcyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChtYXRj
aGVzICE9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAi
WyIpOworICAgICAgICAgICAgaW50IHNpemUgPSAxOworCisgICAgICAgICAgICBpZiAoYXJyYXkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsK
KyAgICAgICAgICAgICAgICAqYXJyYXkgPSAnXDAnOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB2YXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2
YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOworCisgICAgICAgICAgICBpbnB1dCA9
IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7CisgICAgICAgIH0KKworICAgICAgICBtVXNlc0ZyYWdD
b29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7CisgICAg
ICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lO
RyIpICE9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lk
ICpjb21waWxlcikKK3sKKyAgICBpZiAoaXNDb21waWxlZCgpIHx8ICFtU291cmNlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRSQUNFKCJcbiVzIiwgbVNvdXJjZSk7CisK
KyAgICBkZWxldGVbXSBtSW5mb0xvZzsKKyAgICBtSW5mb0xvZyA9IE5VTEw7CisKKyAgICBUQnVp
bHRJblJlc291cmNlIHJlc291cmNlczsKKworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJz
ID0gTUFYX1ZFUlRFWF9BVFRSSUJTOworICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyA9IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOworICAgIHJlc291cmNlcy5tYXhWYXJ5
aW5nVmVjdG9ycyA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAg
IHJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFM7CisgICAgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0g
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAgcmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOworICAgIHJlc291cmNlcy5t
YXhEcmF3QnVmZmVycyA9IE1BWF9EUkFXX0JVRkZFUlM7CisKKyAgICBpbnQgcmVzdWx0ID0gU2hD
b21waWxlKGNvbXBpbGVyLCAmbVNvdXJjZSwgMSwgRVNoT3B0Tm9uZSwgJnJlc291cmNlcywgRURl
YnVnT3BOb25lKTsKKyAgICBjb25zdCBjaGFyICpvYmogPSBTaEdldE9iamVjdENvZGUoY29tcGls
ZXIpOworICAgIGNvbnN0IGNoYXIgKmluZm8gPSBTaEdldEluZm9Mb2coY29tcGlsZXIpOworCisg
ICAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICAgIG1IbHNsID0gbmV3IGNoYXJbc3RybGVuKG9i
aikgKyAxXTsKKyAgICAgICAgc3RyY3B5KG1IbHNsLCBvYmopOworCisgICAgICAgIFRSQUNFKCJc
biVzIiwgbUhsc2wpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtSW5mb0xvZyA9
IG5ldyBjaGFyW3N0cmxlbihpbmZvKSArIDFdOworICAgICAgICBzdHJjcHkobUluZm9Mb2csIGlu
Zm8pOworCisgICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cpOworICAgIH0KK30KKworR0xl
bnVtIFNoYWRlcjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKQoreworICAgIGlm
ICh0eXBlID09ICJmbG9hdCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAg
fQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCisgICAgeworICAgICAgICByZXR1cm4g
R0xfRkxPQVRfVkVDMjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzIikKKyAg
ICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOworICAgIH0KKyAgICBlbHNlIGlmICh0
eXBlID09ICJmbG9hdDQiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKKyAgICB7CisgICAgICAgIHJl
dHVybiBHTF9GTE9BVF9NQVQyOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDN4
MyIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKKyAgICB9CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X01BVDQ7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBHTF9O
T05FOworfQorCisvLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgaW4g
cGFja2luZyB0aGFuIHkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5n
ICZ4LCBjb25zdCBWYXJ5aW5nICZ5KQoreworICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAg
eworICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgIH0KKworICAgIHN3aXRjaCAo
eC50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIHRydWU7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDNDogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OgorICAgICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHN3aXRjaCh5LnR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0
dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICAgIHN3aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VDogICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAg
ICAgICBzd2l0Y2goeS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVydGV4
U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBT
aGFkZXIoY29udGV4dCwgaGFuZGxlKQoreworfQorCitWZXJ0ZXhTaGFkZXI6On5WZXJ0ZXhTaGFk
ZXIoKQoreworfQorCitHTGVudW0gVmVydGV4U2hhZGVyOjpnZXRUeXBlKCkKK3sKKyAgICByZXR1
cm4gR0xfVkVSVEVYX1NIQURFUjsKK30KKwordm9pZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUoKQor
eworICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKKyAgICBwYXJzZUF0dHJpYnV0
ZXMoKTsKKyAgICBwYXJzZVZhcnlpbmdzKCk7Cit9CisKK2ludCBWZXJ0ZXhTaGFkZXI6OmdldFNl
bWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCit7CisgICAgaWYg
KCFhdHRyaWJ1dGVOYW1lLmVtcHR5KCkpCisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IG1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0g
YXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Vt
YW50aWNJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VtYW50aWNJbmRleCAr
PSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0dHJpYnV0ZXMo
KQoreworICAgIGlmIChtSGxzbCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0g
c3Ryc3RyKG1IbHNsLCAiLy8gQXR0cmlidXRlcyIpICsgMTQ7CisKKyAgICAgICAgd2hpbGUodHJ1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVUeXBlWzI1Nl07CisgICAg
ICAgICAgICBjaGFyIGF0dHJpYnV0ZU5hbWVbMjU2XTsKKworICAgICAgICAgICAgaW50IG1hdGNo
ZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJXMgXyVzIiwgYXR0cmlidXRlVHlwZSwgYXR0cmli
dXRlTmFtZSk7CisKKyAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1B
dHRyaWJ1dGVzLnB1c2hfYmFjayhBdHRyaWJ1dGUocGFyc2VUeXBlKGF0dHJpYnV0ZVR5cGUpLCBh
dHRyaWJ1dGVOYW1lKSk7CisKKyAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAiOyIp
ICsgMjsKKyAgICAgICAgfQorICAgIH0KK30KKworRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hh
ZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhh
bmRsZSkKK3sKK30KKworRnJhZ21lbnRTaGFkZXI6On5GcmFnbWVudFNoYWRlcigpCit7Cit9CisK
K0dMZW51bSBGcmFnbWVudFNoYWRlcjo6Z2V0VHlwZSgpCit7CisgICAgcmV0dXJuIEdMX0ZSQUdN
RU5UX1NIQURFUjsKK30KKwordm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCit7CisgICAg
Y29tcGlsZVRvSExTTChtRnJhZ21lbnRDb21waWxlcik7CisgICAgcGFyc2VWYXJ5aW5ncygpOwor
ICAgIHZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworfQorfQpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1No
YWRlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNoYWRl
ci5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3Jl
dGUgZGVyaXZlZAorLy8gY2xhc3NlcyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJ
bXBsZW1lbnRzIEdMIHNoYWRlciBvYmplY3RzIGFuZAorLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KKy8v
IDMuOCBwYWdlIDg0LgorCisjaWZuZGVmIExJQkdMRVNWMl9TSEFERVJfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX1NIQURFUl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxkM2R4OS5oPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7
CitzdHJ1Y3QgVmFyeWluZworeworICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lLCBpbnQgc2l6ZSwgYm9vbCBhcnJheSkKKyAgICAgICAgOiB0eXBlKHR5cGUp
LCBuYW1lKG5hbWUpLCBzaXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkK
KyAgICB7CisgICAgfQorCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsK
KyAgICBpbnQgc2l6ZTsgICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCisgICAgYm9vbCBh
cnJheTsKKworICAgIGludCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2ln
bmVkIGR1cmluZyBsaW5rCisgICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVu
dCwgYXNzaWduZWQgZHVyaW5nIGxpbmsKK307CisKK3R5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+
IFZhcnlpbmdMaXN0OworCitjbGFzcyBTaGFkZXIKK3sKKyAgICBmcmllbmQgUHJvZ3JhbTsKKwor
ICBwdWJsaWM6CisgICAgU2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOwor
CisgICAgdmlydHVhbCB+U2hhZGVyKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkg
PSAwOworICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKKworICAgIHZvaWQgZGVsZXRlU291
cmNlKCk7CisgICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0
cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdDsKKyAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmluZm9Mb2cpOworICAgIGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKKyAg
ICB2b2lkIGdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAq
c291cmNlKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOworICAgIGJvb2wgaXND
b21waWxlZCgpOworICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKKworICAgIHZvaWQgYXR0YWNo
KCk7CisgICAgdm9pZCBkZXRhY2goKTsKKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdDsKKyAg
ICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBmbGFnRm9yRGVs
ZXRpb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOworCisgIHByb3Rl
Y3RlZDoKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyKTsKKworICAgIHZvaWQg
cGFyc2VWYXJ5aW5ncygpOworCisgICAgdm9pZCBjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVy
KTsKKworICAgIHN0YXRpYyBHTGVudW0gcGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBl
KTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25z
dCBWYXJ5aW5nICZ5KTsKKworICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOworICAgIGludCBtQXR0
YWNoQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmplY3RzIHRoaXMgc2hhZGVyIGlz
IGF0dGFjaGVkIHRvCisgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQor
CisgICAgY2hhciAqbVNvdXJjZTsKKyAgICBjaGFyICptSGxzbDsKKyAgICBjaGFyICptSW5mb0xv
ZzsKKworICAgIFZhcnlpbmdMaXN0IHZhcnlpbmdzOworCisgICAgYm9vbCBtVXNlc0ZyYWdDb29y
ZDsKKyAgICBib29sIG1Vc2VzRnJvbnRGYWNpbmc7CisKKyAgICBDb250ZXh0ICptQ29udGV4dDsK
KworICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21waWxlcjsKKyAgICBzdGF0aWMgdm9pZCAq
bVZlcnRleENvbXBpbGVyOworfTsKKworc3RydWN0IEF0dHJpYnV0ZQoreworICAgIEF0dHJpYnV0
ZSgpIDogdHlwZShHTF9OT05FKSwgbmFtZSgiIikKKyAgICB7CisgICAgfQorCisgICAgQXR0cmli
dXRlKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBu
YW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIEdMZW51bSB0eXBlOworICAgIHN0ZDo6c3Ry
aW5nIG5hbWU7Cit9OworCit0eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRl
QXJyYXk7CisKK2NsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKK3sKKyAgICBmcmll
bmQgUHJvZ3JhbTsKKworICBwdWJsaWM6CisgICAgVmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRl
eHQsIEdMdWludCBoYW5kbGUpOworCisgICAgflZlcnRleFNoYWRlcigpOworCisgICAgR0xlbnVt
IGdldFR5cGUoKTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKyAgICBpbnQgZ2V0U2VtYW50aWNJbmRl
eChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKKworICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGVzKCk7CisKKyAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKK307CisKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICBwdWJsaWM6CisgICAgRnJh
Z21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB+RnJh
Z21lbnRTaGFkZXIoKTsKKworICAgIEdMZW51bSBnZXRUeXBlKCk7CisgICAgdm9pZCBjb21waWxl
KCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRT
aGFkZXIpOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwpJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDk3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xh
c3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKKy8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVN
YXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVkCisvLyBmdW5jdGlv
bmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitU
ZXh0dXJlOjpJbWFnZTo6SW1hZ2UoKQorICA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRpcnR5KGZh
bHNlKSwgc3VyZmFjZShOVUxMKQoreworfQorCitUZXh0dXJlOjpJbWFnZTo6fkltYWdlKCkKK3sK
KyAgaWYgKHN1cmZhY2UpIHN1cmZhY2UtPlJlbGVhc2UoKTsKK30KKworVGV4dHVyZTo6VGV4dHVy
ZShDb250ZXh0ICpjb250ZXh0KSA6IG1Db250ZXh0KGNvbnRleHQpCit7CisgICAgbU1pbkZpbHRl
ciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKKyAgICBtTWFnRmlsdGVyID0gR0xfTElORUFS
OworICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsKKyAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7CisKKyAg
ICBtRGlydHlNZXRhRGF0YSA9IHRydWU7CisgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICBtSXNSZW5k
ZXJhYmxlID0gZmFsc2U7CisgICAgbUJhc2VUZXh0dXJlID0gTlVMTDsKK30KKworVGV4dHVyZTo6
flRleHR1cmUoKQoreworfQorCitCbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKK3sKKyAgICBy
ZXR1cm4gbUNvbnRleHQtPmdldEJsaXR0ZXIoKTsKK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29s
IFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQoreworICAgIHN3aXRjaCAoZmls
dGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFS
OgorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVB
UjoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtTWluRmlsdGVyICE9IGZpbHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtTWluRmlsdGVyID0gZmlsdGVyOworICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBw
YXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQorewor
ICAgIHN3aXRjaCAoZmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAg
IGNhc2UgR0xfTElORUFSOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAh
PSBmaWx0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZp
bHRlcjsKKyAgICAgICAgICAgICAgICBtRGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVs
IHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6
c2V0V3JhcFMoR0xlbnVtIHdyYXApCit7CisgICAgc3dpdGNoICh3cmFwKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfUkVQRUFUOgorICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgorICAgICAgY2Fz
ZSBHTF9NSVJST1JFRF9SRVBFQVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtV3JhcFMg
IT0gd3JhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOwor
ICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBz
dGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRXcmFw
VChHTGVudW0gd3JhcCkKK3sKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBH
TF9SRVBFQVQ6CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6CisgICAgICBjYXNlIEdMX01J
UlJPUkVEX1JFUEVBVDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1XcmFwVCAhPSB3cmFw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1XcmFwVCA9IHdyYXA7CisgICAgICAg
ICAgICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1pbkZpbHRlcjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldE1hZ0ZpbHRlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYWdGaWx0ZXI7Cit9CisKK0dMZW51bSBUZXh0dXJlOjpn
ZXRXcmFwUygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XcmFwUzsKK30KKworR0xlbnVtIFRleHR1
cmU6OmdldFdyYXBUKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdyYXBUOworfQorCitHTHVpbnQg
VGV4dHVyZTo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtV2lkdGg7Cit9CisKK0dM
dWludCBUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtSGVpZ2h0Owor
fQorCisvLyBTZWxlY3RzIGFuIGludGVybmFsIERpcmVjdDNEIDkgZm9ybWF0IGZvciBzdG9yaW5n
IGFuIEltYWdlCitEM0RGT1JNQVQgVGV4dHVyZTo6c2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQp
Cit7CisgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKK30KKworaW50IFRleHR1cmU6OmltYWdl
UGl0Y2goY29uc3QgSW1hZ2UgJmltZykgY29uc3QKK3sKKyAgICByZXR1cm4gaW1nLndpZHRoICog
NDsKK30KKworLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZz
ZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBl
IGF0IGlucHV0CisvLyBpbnRvIHRoZSBCR1JBOCBwaXhlbCByZWN0YW5nbGUgYXQgb3V0cHV0IHdp
dGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBlYWNoIGxpbmUuCit2b2lkIFRleHR1cmU6
OmxvYWRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIEdMc2l6
ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZTE2ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KHNvdXJjZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRj
aCArIHhvZmZzZXQgKiA0OworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciByOworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBnOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiOworICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBhOworCisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgICAgICBh
ID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGcg
PSAwOworICAgICAgICAgICAgICAgIGIgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgICAgICAgIHIgPSBzb3Vy
Y2VbeF07CisgICAgICAgICAgICAgICAgZyA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgICAgICBi
ID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIGEgPSAweEZGOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAg
ICAgICAgICAgIHIgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgICAgIGcgPSBzb3VyY2Vb
Mip4KzBdOworICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAg
ICAgIGEgPSBzb3VyY2VbMip4KzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Cisg
ICAgICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgICAg
ICAgICAgZyA9IHNvdXJjZVt4ICogMyArIDFdOworICAgICAgICAgICAgICAgICAgICBiID0gc291
cmNlW3ggKiAzICsgMl07CisgICAgICAgICAgICAgICAgICAgIGEgPSAweEZGOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBhID0gMHhGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAw
eDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGcgPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwg
KChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgorICAgICAgICAgICAgICAgICAgICByID0gc291cmNlW3ggKiA0ICsgMF07CisgICAgICAgICAg
ICAgICAgICAgIGcgPSBzb3VyY2VbeCAqIDQgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgYiA9
IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgICAgICAgICBhID0gc291cmNlW3ggKiA0
ICsgM107CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgYSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAo
KHJnYmEgJiAweDAwMEYpID4+IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdi
YSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZyA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDAp
ID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjAwMCkgPj4g
OCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGEgPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgw
MDNFKSA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3QzAp
ID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBiOwor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gZzsKKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHI7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBhOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit7CisgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm5ld1N1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9
IDApCisgICAgeworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVP
ZmZzY3JlZW5QbGFpblN1cmZhY2Uod2lkdGgsIGhlaWdodCwgc2VsZWN0Rm9ybWF0KGZvcm1hdCks
IEQzRFBPT0xfU1lTVEVNTUVNLCAmbmV3U3VyZmFjZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChpbWctPnN1cmZhY2UpIGltZy0+c3VyZmFjZS0+UmVsZWFzZSgpOworICAgIGlt
Zy0+c3VyZmFjZSA9IG5ld1N1cmZhY2U7CisKKyAgICBpbWctPndpZHRoID0gd2lkdGg7CisgICAg
aW1nLT5oZWlnaHQgPSBoZWlnaHQ7CisgICAgaW1nLT5mb3JtYXQgPSBmb3JtYXQ7CisKKyAgICBp
ZiAocGl4ZWxzICE9IE5VTEwgJiYgbmV3U3VyZmFjZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAg
RDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZh
Y2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBsb2FkSW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGltZy0+ZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIG1EaXJ0eU1ldGFEYXRhID0g
dHJ1ZTsKK30KKwordm9pZCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFn
ZSAqaW1nKQoreworICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWctPndpZHRoIHx8IGhlaWdo
dCArIHlvZmZzZXQgPiBpbWctPmhlaWdodCkgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworCisgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1n
LT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKKworICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBsb2FkSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKKyAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorCisgICAg
aW1nLT5kaXJ0eSA9IHRydWU7Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6
Z2V0VGV4dHVyZSgpCit7CisgICAgaWYgKCFpc0NvbXBsZXRlKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobURpcnR5TWV0YURhdGEpCisgICAgeworICAg
ICAgICBtQmFzZVRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIG1Jc1JlbmRlcmFi
bGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobURpcnR5TWV0YURhdGEgfHwgZGlydHlJbWFn
ZURhdGEoKSkKKyAgICB7CisgICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB9CisKKyAgICBt
RGlydHlNZXRhRGF0YSA9IGZhbHNlOworICAgIEFTU0VSVCghZGlydHlJbWFnZURhdGEoKSk7CisK
KyAgICByZXR1cm4gbUJhc2VUZXh0dXJlOworfQorCitib29sIFRleHR1cmU6OmlzRGlydHkoKSBj
b25zdAoreworICAgIHJldHVybiAobURpcnR5IHx8IG1EaXJ0eU1ldGFEYXRhIHx8IGRpcnR5SW1h
Z2VEYXRhKCkpOworfQorCisvLyBSZXR1cm5zIHRoZSB0b3AtbGV2ZWwgdGV4dHVyZSBzdXJmYWNl
IGFzIGEgcmVuZGVyIHRhcmdldAordm9pZCBUZXh0dXJlOjpuZWVkUmVuZGVyVGFyZ2V0KCkKK3sK
KyAgICBpZiAoIW1Jc1JlbmRlcmFibGUpCisgICAgeworICAgICAgICBtQmFzZVRleHR1cmUgPSBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgbUlzUmVuZGVyYWJsZSA9IHRydWU7Cisg
ICAgfQorCisgICAgaWYgKGRpcnR5SW1hZ2VEYXRhKCkpCisgICAgeworICAgICAgICB1cGRhdGVU
ZXh0dXJlKCk7CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpkcm9wVGV4dHVyZSgpCit7CisgICAgaWYgKG1CYXNlVGV4dHVyZSkKKyAgICB7
CisgICAgICAgIG1CYXNlVGV4dHVyZSA9IE5VTEw7CisgICAgfQorCisgICAgbUlzUmVuZGVyYWJs
ZSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmU6OnB1c2hUZXh0dXJlKElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxlKQoreworICAgIG1CYXNlVGV4dHVy
ZSA9IG5ld1RleHR1cmU7CisgICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsKKyAgICBtSXNSZW5k
ZXJhYmxlID0gcmVuZGVyYWJsZTsKKyAgICBtRGlydHkgPSB0cnVlOworfQorCisKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGlu
dCBtYXhsZXZlbCkgY29uc3QKK3sKKyAgICBpZiAoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBtYXhsZXZlbDsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25w
b3QgZG9lcyBub3QgcGVybWl0IE5QT1QgbWlwbWFwcy4KKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorfQorCitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUsIEdMaW50
IG1heGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXpl
LCBtYXhsZXZlbCk7Cit9CisKK2ludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUJhc2VUZXh0dXJlID8gbUJhc2VUZXh0dXJlLT5HZXRMZXZlbENvdW50KCkgOiAw
OworfQorCitUZXh0dXJlMkQ6OlRleHR1cmUyRChDb250ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUo
Y29udGV4dCkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBOVUxMOworfQorCitUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQoreworICAgIGRlbGV0ZSBtQ29s
b3JidWZmZXJQcm94eTsKKworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0dM
ZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RFWFRV
UkVfMkQ7Cit9CisKKy8vIFdoaWxlIE9wZW5HTCBkb2Vzbid0IGNoZWNrIHRleHR1cmUgY29uc2lz
dGVuY3kgdW50aWwgZHJhdy10aW1lLCBEM0Q5IHJlcXVpcmVzIGEgY29tcGxldGUgdGV4dHVyZQor
Ly8gZm9yIHJlbmRlci10by10ZXh0dXJlIChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUg
bm8gd2F5IG9mIGtlZXBpbmcgaW5kaXZpZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzLgorLy8gQ2Fs
bCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFyIGxldmVsIG9mIHRoZSB0ZXh0dXJlIG11c3QgYmUgZGVm
aW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9ybWF0LCB3aWR0aCBhbmQgaGVpZ2h0LgorLy8KKy8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVyZSB3YXMgdW5zdWl0YWJsZSBoYWQgdG8g
YmUgZGVzdHJveWVkLiBJZiBzbywgaXQgd2lsbCBhbHNvIHNldAorLy8gYSBuZXcgaGVpZ2h0IGFu
ZCB3aWR0aCBmb3IgdGhlIHRleHR1cmUgYnkgd29ya2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2
ZW4gd2lkdGggYW5kIGhlaWdodC4KK2Jvb2wgVGV4dHVyZTJEOjpyZWRlZmluZVRleHR1cmUoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgYm9vbCB3aWR0aE9rYXkgPSAobVdpZHRoID4+IGxldmVsID09IHdpZHRo
KTsKKyAgICBib29sIGhlaWdodE9rYXkgPSAobUhlaWdodCA+PiBsZXZlbCA9PSBoZWlnaHQpOwor
CisgICAgYm9vbCBzaXplT2theSA9ICgod2lkdGhPa2F5ICYmIGhlaWdodE9rYXkpCisgICAgICAg
ICAgICAgICAgICAgICB8fCAod2lkdGhPa2F5ICYmIG1IZWlnaHQgPj4gbGV2ZWwgPT0gMCAmJiBo
ZWlnaHQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgIHx8IChoZWlnaHRPa2F5ICYmIG1XaWR0
aCA+PiBsZXZlbCA9PSAwICYmIHdpZHRoID09IDEpKTsKKworICAgIGJvb2wgdGV4dHVyZU9rYXkg
PSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxGb3JtYXQgPT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KTsK
KworICAgIGlmICghdGV4dHVyZU9rYXkpCisgICAgeworICAgICAgICBUUkFDRSgiUmVkZWZpbmlu
ZyAyRCB0ZXh0dXJlICglZCwgMHglMDRYLCAlZCwgJWQgPT4gMHglMDRYLCAlZCwgJWQpLiIsIGxl
dmVsLAorICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXS5mb3JtYXQsIG1XaWR0aCwgbUhlaWdo
dCwKKyAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAg
ICAgIC8vIFB1cmdlIGFsbCB0aGUgbGV2ZWxzIGFuZCB0aGUgdGV4dHVyZS4KKworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uc3VyZmFjZSAhPSBOVUxMKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLmRpcnR5ID0gZmFsc2U7CisKKyAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1UZXh0dXJlID0gTlVM
TDsKKyAgICAgICAgICAgIGRyb3BUZXh0dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBtV2lk
dGggPSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUhlaWdodCA9IGhlaWdodCA8PCBsZXZlbDsK
KyAgICAgICAgbUltYWdlQXJyYXlbMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgfQor
CisgICAgcmV0dXJuICF0ZXh0dXJlT2theTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldEltYWdl
KEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUlt
YWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0uc3VyZmFjZSAhPSBO
VUxMKTsKKworICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBOVUxMOworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0TGV2ZWwpOworCisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5
W2xldmVsXTsKKworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geW9m
ZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7CisKKyAgICAg
ICAgICAgIFBPSU5UIGRlc3RQb2ludDsKKyAgICAgICAgICAgIGRlc3RQb2ludC54ID0geG9mZnNl
dDsKKyAgICAgICAgICAgIGRlc3RQb2ludC55ID0geW9mZnNldDsKKworICAgICAgICAgICAgcmVz
dWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCAmc291cmNlUmVj
dCwgZGVzdExldmVsLCAmZGVzdFBvaW50KTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOworCisgICAgICAg
ICAgICBpbWctPmRpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZTJEOjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBU
ZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKKyAg
ICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
UmVuZGVyYnVmZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQorICAgIHsKKyAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAg
ICB9CisKKyAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKKyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNl
UmVjdC5sZWZ0ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAg
ICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAgIEhS
RVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmZGVzdCk7CisKKyAg
ICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0
KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsKKyAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCA9IHdp
ZHRoOworICAgIG1JbWFnZUFycmF5W2xldmVsXS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgbUltYWdl
QXJyYXlbbGV2ZWxdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworfQorCit2b2lkIFRleHR1cmUy
RDo6Y29weVN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVy
YnVmZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5
W2xldmVsXS53aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhl
aWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICB9CisKKyAgICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwg
bUltYWdlQXJyYXlbMF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgeworICAg
ICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1
cmUsIHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFy
Z2V0KCk7CisgICAgfQorCisgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAg
ICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAg
ICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VSZWN0LnRv
cCA9IHk7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKworICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0dXJl
LT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKworICAgICAgICBnZXRCbGl0dGVyKCkt
PmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgbUlt
YWdlQXJyYXlbMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgZGVz
dC0+UmVsZWFzZSgpOworICAgIH0KK30KKworLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0
IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEu
Citib29sIFRleHR1cmUyRDo6aXNDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0
aCA9IG1JbWFnZUFycmF5WzBdLndpZHRoOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJy
YXlbMF0uaGVpZ2h0OworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBtaXBtYXBwaW5nID0g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9O
RUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoK
KyAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKQorICAgICAgICB8fCAoZ2V0V3JhcFQoKSAhPSBH
TF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAgICAgICBp
ZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcSA9IGxvZzIoc3Rk
OjptYXgod2lkdGgsIGhlaWdodCkpOworCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPD0gcTsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2xldmVsXS5mb3JtYXQgIT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBs
ZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCAh
PSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJl
IHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5n
IG9uZQorSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQor
eworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOworCisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZv
cm1hdChtSW1hZ2VBcnJheVswXS5mb3JtYXQpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgs
IG1IZWlnaHQsIDApLCAwLCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwp
OworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRl
eHR1cmU5KilOVUxMKTsKKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUpIG1UZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiB0ZXh0dXJlOworfQor
Cit2b2lkIFRleHR1cmUyRDo6dXBkYXRlVGV4dHVyZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAg
ICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZGlydHkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsZXZlbFN1cmZhY2UgPSBOVUxMOworICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAm
bGV2ZWxTdXJmYWNlKTsKKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShtSW1hZ2VBcnJheVts
ZXZlbF0uc3VyZmFjZSwgTlVMTCwgbGV2ZWxTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgbGV2ZWxTdXJm
YWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uZGly
dHkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7Cisg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBOVUxMOworCisgICAgaWYgKG1XaWR0aCAh
PSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IGdldERpc3BsYXkoKTsKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdl
QXJyYXlbMF0uZm9ybWF0KTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZShtV2lkdGgsIG1IZWlnaHQsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgbUhlaWdo
dCwgMCksIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0
ZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxldmVsczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2U7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1
cmZhY2VMZXZlbChpLCAmc291cmNlKTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworCisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VU
ZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3Q7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGksICZkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOworCisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRpc3BsYXktPmVuZFNjZW5l
KCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2Us
IE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAg
ICBkZXN0LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBtVGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1U
ZXh0dXJlOworfQorCitib29sIFRleHR1cmUyRDo6ZGlydHlJbWFnZURhdGEoKSBjb25zdAorewor
ICAgIGludCBxID0gbG9nMihzdGQ6Om1heChtV2lkdGgsIG1IZWlnaHQpKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IHE7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtp
XS5kaXJ0eSkgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICBpZiAoIWlzUG93MihtSW1h
Z2VBcnJheVswXS53aWR0aCkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5oZWlnaHQpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisK
KyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8g
cmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICB1bnNpZ25lZCBpbnQg
cSA9IGxvZzIoc3RkOjptYXgobVdpZHRoLCBtSGVpZ2h0KSk7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ld
LnN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
c3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uc3VyZmFjZSA9
IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBtSW1hZ2VBcnJheVtpXS5kaXJ0eSA9IGZhbHNl
OworCisgICAgICAgIG1JbWFnZUFycmF5W2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLmZvcm1h
dDsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0ud2lkdGggPSBzdGQ6Om1heChtSW1hZ2VBcnJheVsw
XS53aWR0aCA+PiBpLCAxKTsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0uaGVpZ2h0ID0gc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uaGVpZ2h0ID4+IGksIDEpOworICAgIH0KKworICAgIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykK
KyAgICB7CisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IE5VTEw7CisgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IE5VTEw7CisKKyAgICAgICAgbVRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbChpLTEsICZ1cHBlcik7CisgICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNl
TGV2ZWwoaSwgJmxvd2VyKTsKKworICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAh
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1
cHBlciwgbG93ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVw
cGVyLT5SZWxlYXNlKCk7CisgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFz
ZSgpOworICAgIH0KK30KKworQ29sb3JidWZmZXIgKlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIo
R0xlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZl
ciAqKU5VTEwpOworICAgIH0KKworICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVy
UHJveHkodGhpcywgdGFyZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7CisK
KyAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gTlVMTDsKKyAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZyZW5kZXJU
YXJnZXQpOworCisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZUN1YmVNYXA6
OlRleHR1cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQor
ICAgIHsKKyAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKKyAgICB9Cit9CisKK1RleHR1
cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NjsgaSsrKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1GYWNlUHJveGllc1tpXTsKKyAgICB9CisK
KyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwor
ICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgfQorfQorCitHTGVudW0gVGV4dHVyZUN1YmVN
YXA6OmdldFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7
Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQoreworICAgIHNldEltYWdlKDAsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQor
eworICAgIHNldEltYWdlKDEsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNl
dEltYWdlKDIsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDMs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
UG9zWihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDQsIGxldmVsLCBp
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHNldEltYWdlKDUsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpbnQgZmFjZSA9IGZhY2VJbmRleChmYWNlVGFy
Z2V0KTsKKworICAgIEFTU0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc3VyZmFjZSAhPSBO
VUxMKTsKKworICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZl
bCk7CisgICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKGRl
c3RMZXZlbCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKKworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0Owor
ICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QudG9wID0geW9mZnNldDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4b2Zm
c2V0ICsgd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBo
ZWlnaHQ7CisKKyAgICAgICAgICAgIFBPSU5UIGRlc3RQb2ludDsKKyAgICAgICAgICAgIGRlc3RQ
b2ludC54ID0geG9mZnNldDsKKyAgICAgICAgICAgIGRlc3RQb2ludC55ID0geW9mZnNldDsKKwor
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+VXBkYXRlU3VyZmFjZShp
bWctPnN1cmZhY2UsICZzb3VyY2VSZWN0LCBkZXN0TGV2ZWwsICZkZXN0UG9pbnQpOworICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgZGVzdExldmVs
LT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGltZy0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2Us
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIFRleHR1cmU6OnN1YkltYWdl
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Cisg
ICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKKy8vIFRlc3RzIGZvciBHTCB0ZXh0dXJlIG9iamVjdCBjb21wbGV0ZW5lc3MuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgorYm9vbCBUZXh0dXJlQ3Vi
ZU1hcDo6aXNDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVsw
XVswXS53aWR0aDsKKworICAgIGlmIChzaXplIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBtaXBtYXBwaW5nOworCisgICAgc3dpdGNoIChtTWlu
RmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElO
RUFSOgorICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIG1pcG1hcHBpbmcgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgeworICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0ud2lkdGggIT0gc2l6ZSB8fCBtSW1hZ2VBcnJheVtm
YWNlXVswXS5oZWlnaHQgIT0gc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1pcG1hcHBpbmcpCisgICAgeworICAg
ICAgICBpZiAoIWlzUG93MihzaXplKSAmJiAoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdF
IHx8IGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBxID0gbG9nMihzaXpl
KTsKKworICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVts
ZXZlbF0uZm9ybWF0ICE9IG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLndpZHRoICE9
IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIEFTU0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uaGVpZ2h0ID09IG1JbWFnZUFy
cmF5W2ZhY2VdW2xldmVsXS53aWR0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4
dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlz
dGluZyBvbmUKK0lEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
ICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9y
bWF0KTsKKworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqdGV4dHVyZTsKKworICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0aW9uTGV2
ZWxzKG1XaWR0aCwgMCksIDAsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVM
TCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNl
VGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSkgbVRleHR1cmUtPlJl
bGVhc2UoKTsKKworICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7
Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQoreworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgZm9yIChpbnQgZmFjZSA9
IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgeworICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZl
bCsrKQorICAgICAgICB7CisgICAgICAgICAgICBJbWFnZSAqaW1nID0gJm1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXTsKKworICAgICAgICAgICAgaWYgKGltZy0+ZGlydHkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxldmVsU3VyZmFjZSA9IGdldEN1
YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGV2ZWxT
dXJmYWNlICE9IE5VTEwpOworCisgICAgICAgICAgICAgICAgaWYgKGxldmVsU3VyZmFjZSAhPSBO
VUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZhY2UoaW1nLT5zdXJmYWNlLCBOVUxMLCBsZXZlbFN1cmZh
Y2UsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgICAgICAgICAgICAgICAgIGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOworCisgICAg
ICAgICAgICAgICAgICAgIGltZy0+ZGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit7CisgICAgSURpcmVj
dDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJlID0gTlVMTDsKKworICAgIGlmIChtV2lkdGggIT0gMCkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgICAgIEQz
REZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsK
KworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUobVdp
ZHRoLCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIDApLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGZv
cm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1
cmU5KilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2U7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0
aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmKSwgaSwgJnNvdXJjZSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0Q3Vi
ZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNFUz4oZiksIGksICZkZXN0KTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheS0+ZW5k
U2NlbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVj
dChzb3VyY2UsIE5VTEwsIGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURp
cmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
VGV4dHVyZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICBtVGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQor
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCk7CisKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdKTsK
K30KKwordW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2Up
Cit7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDEpOworICAgIE1FVEFfQVNTRVJUKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCA9PSAyKTsKKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kg
LSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7CisgICAgTUVUQV9BU1NFUlQo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YID09IDQpOworICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKKworICAgIHJldHVy
biBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworfQorCitib29sIFRleHR1
cmVDdWJlTWFwOjpkaXJ0eUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgaW50IHEgPSBsb2cyKG1X
aWR0aCk7CisKKyAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDw9IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZdW2ldLmRpcnR5KSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sg
dGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21w
bGV0ZSB0ZXh0dXJlCisvLyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleElt
YWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBs
ZXZlbHMgJiBmYWNlcy4KKy8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGljdWxhciBsZXZlbCBvZiB0
aGUgdGV4dHVyZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmljIGZvcm1hdCwgd2lkdGgg
YW5kIGhlaWdodC4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4aXN0aW5nIHRleHR1cmUg
d2FzIHVuc3VpdGFibGUgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28sIGl0IHdpbGwgYWxzbyBz
ZXQKKy8vIGEgbmV3IHNpemUgZm9yIHRoZSB0ZXh0dXJlIGJ5IHdvcmtpbmcgYmFja3dhcmRzIGZy
b20gdGhlIGdpdmVuIHNpemUuCitib29sIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZVRleHR1cmUo
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCkKK3sKKyAg
ICAvLyBBcmUgdGhlc2Ugc2V0dGluZ3MgY29tcGF0aWJsZSB3aXRoIGxldmVsIDA/CisgICAgYm9v
bCBzaXplT2theSA9IChtSW1hZ2VBcnJheVswXVswXS53aWR0aCA+PiBsZXZlbCA9PSB3aWR0aCk7
CisKKyAgICBib29sIHRleHR1cmVPa2F5ID0gKHNpemVPa2F5ICYmIGludGVybmFsRm9ybWF0ID09
IG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisKKyAgICBpZiAoIXRleHR1cmVPa2F5KQorICAg
IHsKKyAgICAgICAgVFJBQ0UoIlJlZGVmaW5pbmcgY3ViZSB0ZXh0dXJlICglZCwgMHglMDRYLCAl
ZCA9PiAweCUwNFgsICVkKS4iLCBsZXZlbCwKKyAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF1b
MF0uZm9ybWF0LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCwKKyAgICAgICAgICAgICAgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoKTsKKworICAgICAgICAvLyBQdXJnZSBhbGwgdGhlIGxldmVscyBhbmQg
dGhlIHRleHR1cmUuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsg
ZisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtp
XS5zdXJmYWNlICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmXVtpXS5kaXJ0eSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBkcm9wVGV4dHVyZSgpOworICAgICAgICB9
CisKKyAgICAgICAgbVdpZHRoID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1JbWFnZUFycmF5
WzBdWzBdLndpZHRoID0gd2lkdGggPDwgbGV2ZWw7CisgICAgICAgIG1IZWlnaHQgPSB3aWR0aCA8
PCBsZXZlbDsKKyAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0uaGVpZ2h0ID0gd2lkdGggPDwgbGV2
ZWw7CisKKyAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7
CisgICAgfQorCisgICAgcmV0dXJuICF0ZXh0dXJlT2theTsKK30KKwordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6Y29weUltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
UmVuZGVyYnVmZmVyICpzb3VyY2UpCit7CisgICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZh
Y2VJbmRleChmYWNlKTsKKworICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFs
Rm9ybWF0LCB3aWR0aCkpCisgICAgeworICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsK
KyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgIH0KKworICAgIEFTU0VS
VCh3aWR0aCA9PSBoZWlnaHQpOworCisgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKKyAgICB7CisgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNl
UmVjdC5sZWZ0ID0geDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAg
ICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBnZXRDdWJlTWFw
U3VyZmFjZShmYWNlLCBsZXZlbCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252
ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0
LCAwLCAwLCBkZXN0KTsKKyAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLndpZHRoID0gd2lkdGg7CisgICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0uaGVpZ2h0ID0gaGVpZ2h0OworICAgIG1JbWFnZUFycmF5W2Zh
Y2VpbmRleF1bbGV2ZWxdLmZvcm1hdCA9IGludGVybmFsRm9ybWF0OworfQorCitJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKHVuc2lnbmVkIGludCBm
YWNlSWRlbnRpZmllciwgdW5zaWduZWQgaW50IGxldmVsKQoreworICAgIHVuc2lnbmVkIGludCBm
YWNlSW5kZXg7CisKKyAgICBpZiAoZmFjZUlkZW50aWZpZXIgPCA2KQorICAgIHsKKyAgICAgICAg
ZmFjZUluZGV4ID0gZmFjZUlkZW50aWZpZXI7CisgICAgfQorICAgIGVsc2UgaWYgKGZhY2VJZGVu
dGlmaWVyID49IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiBmYWNlSWRlbnRpZmll
ciA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opCisgICAgeworICAgICAgICBmYWNl
SW5kZXggPSBmYWNlSWRlbnRpZmllciAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ZmFjZUluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAobVRleHR1cmUgPT0gTlVMTCkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKKworICAgIEhSRVNVTFQgaHIg
PSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2Uoc3RhdGljX2Nhc3Q8RDNEQ1VCRU1BUF9GQUNF
Uz4oZmFjZUluZGV4KSwgbGV2ZWwsICZzdXJmYWNlKTsKKworICAgIHJldHVybiAoU1VDQ0VFREVE
KGhyKSkgPyBzdXJmYWNlIDogTlVMTDsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1
YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJl
bmRlcmJ1ZmZlciAqc291cmNlKQoreworICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2Zh
Y2VJbmRleChmYWNlKV1bbGV2ZWxdLndpZHRoOworCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+
IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgaWYgKHJlZGVmaW5lVGV4dHVy
ZSgwLCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKSkK
KyAgICB7CisgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNoVGV4
dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdl
dFJlbmRlclRhcmdldChmYWNlKTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50
KCkpCisgICAgeworICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHg7CisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAg
IHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVp
Z2h0OworCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZh
Y2UoZmFjZSwgbGV2ZWwpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChz
b3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5m
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7
CisgICAgfQorfQorCitib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID09IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDE7IGYg
PCA2OyBmKyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1bMF0ud2lkdGggIT0g
bUltYWdlQXJyYXlbMF1bMF0ud2lkdGgKKyAgICAgICAgICAgIHx8IG1JbWFnZUFycmF5W2ZdWzBd
LmZvcm1hdCAhPSBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICgh
aXNQb3cyKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKSB8fCAhaXNDdWJlQ29tcGxldGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQor
CisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRv
IHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgdW5zaWduZWQgaW50
IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2ZdW2ldLnN1cmZhY2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZl1baV0uc3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZdW2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZdW2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5W2ZdWzBdLmZvcm1hdDsKKyAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZdW2ldLndpZHRoID0gc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0u
d2lkdGggPj4gaSwgMSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5oZWlnaHQgPSBt
SW1hZ2VBcnJheVtmXVtpXS53aWR0aDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFw
U3VyZmFjZShmLCBpLTEpOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0g
Z2V0Q3ViZU1hcFN1cmZhY2UoZiwgaSk7CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxM
ICYmIGxvd2VyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2V0Qmxp
dHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBp
ZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworQ29sb3JidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFy
Z2V0KQoreworICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIg
KilOVUxMKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJn
ZXQpOworCisgICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIHsKKyAgICAg
ICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMs
IHRhcmdldCk7CisgICAgfQorCisgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKK30KKwor
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsK
KworICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXQgPSBOVUxMOworICAgIG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNf
Y2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmYWNlSW5kZXgodGFyZ2V0KSksIDAsICZyZW5kZXJUYXJn
ZXQpOworCisgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKK30KKworVGV4dHVyZTo6VGV4dHVyZUNv
bG9yYnVmZmVyUHJveHk6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpCisgIDogQ29sb3JidWZmZXIoTlVMTCksIG1UZXh0dXJlKHRleHR1cmUp
LCBtVGFyZ2V0KHRhcmdldCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQg
fHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKK30KKworSURpcmVjdDNEU3VyZmFj
ZTkgKlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRSZW5kZXJUYXJnZXQoKQor
eworICAgIGlmIChtUmVuZGVyVGFyZ2V0KSBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAg
ICBtUmVuZGVyVGFyZ2V0ID0gbVRleHR1cmUtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKwor
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworfQorCitpbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9y
YnVmZmVyUHJveHk6OmdldFdpZHRoKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRo
KCk7Cit9CisKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0SGVpZ2h0
KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUtPmdldEhlaWdodCgpOworfQorCit9CkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gVGV4dHVyZS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBh
bmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKKy8vIGNsYXNzZXMgVGV4dHVyZTJEIGFuZCBUZXh0dXJl
Q3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kCisvLyByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgorCisj
aWZuZGVmIExJQkdMRVNWMl9URVhUVVJFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hf
CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQ29udGV4dDsKK2NsYXNz
IEJsaXQ7CisKK2VudW0KK3sKKyAgICBNQVhfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMjA0OCwKKworICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9
IDEyICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKK307CisKK2NsYXNzIFRleHR1cmUK
K3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRleHR1cmUoQ29udGV4dCAqY29udGV4dCk7CisK
KyAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQo
KSBjb25zdCA9IDA7CisKKyAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAg
ICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICBib29sIHNldFdyYXBTKEdM
ZW51bSB3cmFwKTsKKyAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKKworICAgIEdMZW51
bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29u
c3Q7CisKKyAgICBHTHVpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0SGVpZ2h0
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0ID0gMDsKKwor
ICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOworICAgIHZpcnR1YWwgQ29s
b3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7CisKKyAgICBib29sIGlzRGlydHkoKSBjb25z
dDsKKworICBwcm90ZWN0ZWQ6CisgICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7Cisg
ICAgZnJpZW5kIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OworICAgIGNsYXNzIFRleHR1
cmVDb2xvcmJ1ZmZlclByb3h5IDogcHVibGljIENvbG9yYnVmZmVyCisgICAgeworICAgICAgcHVi
bGljOgorICAgICAgICBUZXh0dXJlQ29sb3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBH
TGVudW0gdGFyZ2V0KTsKKyAgICAgICAgICAgIC8vIHRhcmdldCBpcyBhIDJELWxpa2UgdGV4dHVy
ZSB0YXJnZXQgKEdMX1RFWFRVUkVfMkQgb3Igb25lIG9mIHRoZSBjdWJlIGZhY2UgdGFyZ2V0cykK
KworICAgICAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KworICAgICAgICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpOworICAgICAgICB2aXJ0dWFsIGludCBn
ZXRIZWlnaHQoKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgVGV4dHVyZSAqbVRleHR1cmU7
CisgICAgICAgIEdMZW51bSBtVGFyZ2V0OworICAgIH07CisKKyAgICAvLyBIZWxwZXIgc3RydWN0
dXJlIHJlcHJlc2VudGluZyBhIHNpbmdsZSBpbWFnZSBsYXllcgorICAgIHN0cnVjdCBJbWFnZQor
ICAgIHsKKyAgICAgICAgSW1hZ2UoKTsKKyAgICAgICAgfkltYWdlKCk7CisKKyAgICAgICAgR0xz
aXplaSB3aWR0aDsKKyAgICAgICAgR0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdMZW51bSBmb3Jt
YXQ7CisKKyAgICAgICAgYm9vbCBkaXJ0eTsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZTsKKyAgICB9OworCisgICAgc3RhdGljIEQzREZPUk1BVCBzZWxlY3RGb3JtYXQoR0xl
bnVtIGZvcm1hdCk7CisgICAgaW50IGltYWdlUGl0Y2goY29uc3QgSW1hZ2UmIGltZykgY29uc3Q7
CisKKyAgICBHTGVudW0gbU1pbkZpbHRlcjsKKyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKKyAgICBH
TGVudW0gbVdyYXBTOworICAgIEdMZW51bSBtV3JhcFQ7CisKKyAgICB2b2lkIHNldEltYWdlKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOwor
ICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisKKyAgICB2
b2lkIG5lZWRSZW5kZXJUYXJnZXQoKTsKKworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisgICAgR0xp
bnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplLCBHTGludCBtYXhsZXZlbCkgY29uc3Q7CisK
KyAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyB3ZWFrIGFuZCBpdCBpcyBhc3N1bWVkIHRo
ZSBkZXJpdmVkIGNsYXNzIHdpbGwga2VlcCBhIHN0cm9uZyBwb2ludGVyIHVudGlsIHRoZSBuZXh0
IGNyZWF0ZVRleHR1cmUoKSBjYWxsLgorICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5
ICpjcmVhdGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkg
PSAwOworICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKSA9IDA7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0
YSgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgZHJvcFRleHR1cmUoKTsKKyAgICB2b2lkIHB1c2hU
ZXh0dXJlKElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxl
KTsKKworICAgIEJsaXQgKmdldEJsaXR0ZXIoKTsKKworICAgIHVuc2lnbmVkIGludCBtV2lkdGg7
CisgICAgdW5zaWduZWQgaW50IG1IZWlnaHQ7CisKKyAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0
OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwor
CisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisKKyAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm1C
YXNlVGV4dHVyZTsgLy8gVGhpcyBpcyBhIHdlYWsgcG9pbnRlci4gVGhlIGRlcml2ZWQgY2xhc3Mg
aXMgYXNzdW1lZCB0byBvd24gYSBzdHJvbmcgcG9pbnRlci4KKyAgICBib29sIG1EaXJ0eU1ldGFE
YXRhOworICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKKworICAgIGJvb2wgbURpcnR5OworCisgICAg
dm9pZCBsb2FkSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1
dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Cit9OworCitj
bGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGlj
aXQgVGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQpOworCisgICAgflRleHR1cmUyRCgpOworCisg
ICAgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworICAgIHZvaWQgY29weVN1YkltYWdlKEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworCisgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBt
YXBzKCk7CisKKyAgICB2aXJ0dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlMkQpOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1
cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0OworCisgICAgdm9pZCBjb21taXRSZWN0KEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CisKKyAgICBJbWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZF
TFNdOworCisgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOworCisgICAgVGV4dHVyZUNv
bG9yYnVmZmVyUHJveHkgKm1Db2xvcmJ1ZmZlclByb3h5OworCisgICAgYm9vbCByZWRlZmluZVRl
eHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworfTsKKworY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAo
Q29udGV4dCAqY29udGV4dCk7CisKKyAgICB+VGV4dHVyZUN1YmVNYXAoKTsKKworICAgIEdMZW51
bSBnZXRUYXJnZXQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0
SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWda
KEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworCisgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFj
ZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgY29weUltYWdlKEdM
ZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3Vy
Y2UpOworICAgIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKworICAgIGJvb2wgaXND
b21wbGV0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwor
CisgICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVN
YXApOworCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0OworCisgICAgLy8gZmFjZUlkZW50aWZpZXIgaXMg
MC01IG9yIG9uZSBvZiB0aGUgR0xfVEVYVFVSRV9DVUJFX01BUF8qIGVudW1lcmFudHMuCisgICAg
Ly8gUmV0dXJucyBOVUxMIGlmIHRoZSBjYWxsIHVuZGVybHlpbmcgRGlyZWN0M0QgY2FsbCBmYWls
cy4KKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQgaW50
IGZhY2VJZGVudGlmaWVyLCB1bnNpZ25lZCBpbnQgbGV2ZWwpOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOworCisgICAgYm9vbCBpc0N1YmVDb21wbGV0
ZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CisgICAgdm9pZCBjb21taXRSZWN0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworICAgIGJvb2wgcmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgpOworCisgICAgSW1hZ2UgbUltYWdlQXJyYXlb
Nl1bTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAqbVRl
eHR1cmU7CisKKyAgICBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSAqbUZhY2VQcm94aWVzWzZdOwor
CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6
IEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTA0MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gbGliR0xFU3YyLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0
ZWQgT3BlbkdMIEVTIDIuMCBmdW5jdGlvbnMuCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorCisjaW5jbHVkZSA8
ZXhjZXB0aW9uPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0
aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0u
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisKK2V4dGVybiAi
QyIKK3sKKwordm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKQor
eworICAgIFRSQUNFKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIsIHRleHR1cmUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUg
PiBHTF9URVhUVVJFMCArIGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRB
Y3RpdmVTYW1wbGVyKHRleHR1cmUgLSBHTF9URVhUVVJFMCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hTaGFk
ZXIoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFk
ZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0LT5hdHRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsQmluZEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
aW5kZXgsIGNvbnN0IEdMY2hhciogbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFt
ID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIs
IHByb2dyYW0sIGluZGV4LCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNo
YWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHJuY21wKG5hbWUsICJnbF8iLCAzKSA9PSAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3Qt
PmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVy
KEdMZW51bSB0YXJnZXQsIEdMdWludCBidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0x1aW50IGJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYnVmZmVyKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1
aW50IGZyYW1lYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
dWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgZnJhbWVidWZmZXIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCByZW5kZXJidWZm
ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJV
RkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRU
ZXh0dXJlKEdMZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKQoreworICAgIFRSQUNFKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCB0ZXh0dXJlID0gJWQpIiwgdGFyZ2V0LCB0ZXh0dXJl
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4
dHVyZSk7CisKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVPYmplY3Qt
PmdldFRhcmdldCgpICE9IHRhcmdldCAmJiB0ZXh0dXJlICE9IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kVGV4dHVyZTJEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9yKEdMY2xh
bXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQor
eworICAgIFRSQUNFKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdM
Y2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZikiLAorICAgICAgICAgIHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQqIGNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZENvbG9yKGdsOjpjbGFtcDAx
KHJlZCksIGdsOjpjbGFtcDAxKGdyZWVuKSwgZ2w6OmNsYW1wMDEoYmx1ZSksIGdsOjpjbGFtcDAx
KGFscGhhKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKQoreworICAgIGds
QmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGUsIG1vZGUpOworfQorCit2b2lkIF9fc3RkY2FsbCBn
bEJsZW5kRXF1YXRpb25TZXBhcmF0ZShHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSkK
K3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlUkdCID0gMHglWCwgR0xlbnVtIG1vZGVBbHBoYSA9
IDB4JVgpIiwgbW9kZVJHQiwgbW9kZUFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtb2RlUkdCKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoK
KyAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9GVU5D
X1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKG1vZGVBbHBoYSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19BREQ6CisgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgorICAgICAgICAg
IGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZEVxdWF0aW9uKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xC
bGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKQoreworICAgIGdsQmxlbmRG
dW5jU2VwYXJhdGUoc2ZhY3RvciwgZGZhY3Rvciwgc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRz
dFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpCit7CisgICAgVFJBQ0UoIihH
TGVudW0gc3JjUkdCID0gMHglWCwgR0xlbnVtIGRzdFJHQiA9IDB4JVgsIEdMZW51bSBzcmNBbHBo
YSA9IDB4JVgsIEdMZW51bSBkc3RBbHBoYSA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNSR0IsIGRz
dFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChzcmNSR0IpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAg
ICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9S
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNl
IEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Cisg
ICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNf
RFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05T
VEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToK
KyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZHN0UkdCKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAg
ICAgIGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19D
T0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FM
UEhBOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBj
YXNlIEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHNyY0FscGhhKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAg
IGNhc2UgR0xfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xP
UjoKKyAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19EU1RfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5U
X0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQ
SEFfU0FUVVJBVEU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKGRzdEFscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9aRVJP
OgorICAgICAgICAgIGNhc2UgR0xfT05FOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdM
X0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6CisgICAg
ICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xf
T05FX01JTlVTX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgorICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGNvbnN0YW50Q29sb3JVc2VkID0gKHNyY1JHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8
fCBzcmNSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0UkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IGRzdFJH
QiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpOworCisgICAgICAgIGJvb2wgY29uc3Rh
bnRBbHBoYVVzZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0FMUEhBIHx8IHNyY1JHQiA9PSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgZHN0UkdCID09IEdMX09ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSk7CisKKyAgICAgICAgaWYgKGNvbnN0YW50Q29sb3JVc2VkICYm
IGNvbnN0YW50QWxwaGFVc2VkKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIlNpbXVsdGFu
ZW91cyB1c2Ugb2YgR0xfQ09OU1RBTlRfQUxQSEEvR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
IGFuZCBHTF9DT05TVEFOVF9DT0xPUi9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgaW52YWxp
ZCB1bmRlciBXZWJHTCIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwg
ZHN0QWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRy
IHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKQoreworICAgIFRSQUNFKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQq
IGRhdGEgPSAweCUwLjhwLCBHTGVudW0gdXNhZ2UgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwg
c2l6ZSwgZGF0YSwgdXNhZ2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9EUkFXOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6
CisgICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RSQVc6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Cisg
ICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyRGF0YShkYXRhLCBzaXplLCB1c2FnZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xCdWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0
ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25z
dCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIHNp
emUsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8IDAgfHwgb2Zm
c2V0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZ
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZl
cigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHNpemVfdClzaXplICsgb2Zmc2V0ID4g
YnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWZm
ZXItPmJ1ZmZlclN1YkRhdGEoZGF0YSwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRh
cmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZmZXIt
PmNvbXBsZXRlbmVzcygpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihHTGJp
dGZpZWxkIG1hc2spCit7CisgICAgVFJBQ0UoIihHTGJpdGZpZWxkIG1hc2sgPSAlWCkiLCBtYXNr
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5jbGVhcihtYXNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQ29sb3IoR0xjbGFtcGYg
cmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7Cisg
ICAgVFJBQ0UoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFt
cGYgYmx1ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgpCit7CisgICAg
VFJBQ0UoIihHTGNsYW1wZiBkZXB0aCA9ICVmKSIsIGRlcHRoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVh
ckRlcHRoKGRlcHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyU3RlbmNpbChHTGludCBzKQoreworICAgIFRS
QUNFKCIoR0xpbnQgcyA9ICVkKSIsIHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyU3RlbmNpbChzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbENvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9v
bGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpCit7CisgICAgVFJBQ0UoIihHTGJvb2xlYW4gcmVk
ID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICVkLCBHTGJvb2xlYW4gYmx1ZSA9ICVkLCBHTGJvb2xl
YW4gYWxwaGEgPSAlZCkiLAorICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJs
dWUgPT0gR0xfVFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVy
KEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hh
ZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hh
ZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNoYWRlck9iamVjdC0+Y29tcGlsZSgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRh
dGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiIAor
ICAgICAgICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xzaXpl
aSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICghZ2w6Oklz
VGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA8IDAg
fHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3
aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9
IDAgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7IC8vIHVsdGltYXRlbHkgd2UgZG9uJ3Qgc3VwcG9ydCBjb21wcmVzc2Vk
IHRleHR1cmVzCisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIFRS
QUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZz
ZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGgg
PSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKKyAgICAg
ICAgICAiR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44
cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKCFnbDo6SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxl
dmVsID4gMCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBpbWFnZVNpemUgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoeG9mZnNldCAhPSAwIHx8IHlvZmZzZXQgIT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIFRo
ZSB0ZXh0dXJlIGJlaW5nIG9wZXJhdGVkIG9uIGlzIG5vdCBhIGNvbXByZXNzZWQgdGV4dHVyZS4K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
b3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xpbnQgYm9yZGVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50
IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAi
R0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBo
ZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIod2lk
dGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAg
ICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVp
Z2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWln
aHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5n
ZXRDb2xvcmJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
Z2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5j
b3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgor
ICAgICAgICAgICJHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVk
LCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxTIHx8IHhvZmZz
ZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4
b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5
b2Zmc2V0IDwgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBo
ZWlnaHQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpzb3VyY2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOwor
CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5
U3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGds
Q3JlYXRlUHJvZ3JhbSh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDAp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRl
U2hhZGVyKEdMZW51bSB0eXBlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHR5cGUgPSAweCVYKSIs
IHR5cGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURF
UjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0sIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xDdWxsRmFjZShHTGVudW0gbW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0g
MHglWCkiLCBtb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAgICAgICBjYXNlIEdMX0JB
Q0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxNb2RlKG1vZGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERl
bGV0ZUJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgVFJB
Q0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBu
LCBidWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmRlbGV0ZUJ1ZmZlcihidWZmZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0
ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKQorewor
ICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzID0g
MHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lYnVmZmVyc1tpXSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJz
W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQ
cm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAl
ZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gPT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFt
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQq
IHJlbmRlcmJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1
aW50KiByZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNoYWRl
cihHTHVpbnQgc2hhZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNo
YWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXIgPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFByb2dyYW0oc2hh
ZGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RGVsZXRlVGV4dHVyZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKQoreworICAg
IFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhw
KSIsIG4sIHRleHR1cmVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlc1tpXSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQoreworICAg
IFRSQUNFKCIoR0xlbnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBzd2l0Y2ggKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVS
OgorICAgICAgICAgIGNhc2UgR0xfQUxXQVlTOgorICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAg
ICAgICAgICBjYXNlIEdMX0xFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAg
ICAgIGNhc2UgR0xfR1JFQVRFUjoKKyAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKKyAgICAgICAg
ICBjYXNlIEdMX05PVEVRVUFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRE
ZXB0aEZ1bmMoZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCit7Cisg
ICAgVFJBQ0UoIihHTGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZsYWcpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERl
cHRoTWFzayhmbGFnICE9IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlcHRoUmFuZ2VmKEdMY2xhbXBm
IHpOZWFyLCBHTGNsYW1wZiB6RmFyKQoreworICAgIFRSQUNFKCIoR0xjbGFtcGYgek5lYXIgPSAl
ZiwgR0xjbGFtcGYgekZhciA9ICVmKSIsIHpOZWFyLCB6RmFyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0
aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERldGFjaFNoYWRlcihHTHVpbnQgcHJvZ3Jh
bSwgR0x1aW50IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdM
dWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7Cisg
ICAgICAgICAgICAgICAgc2hhZGVyQnlQcm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pOworICAgICAgICAgICAgICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1CeVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dy
YW0oc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkK
K3sKKyAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjYXAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZShmYWxzZSk7ICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQt
PnNldFBvbHlnb25PZmZzZXRGaWxsKGZhbHNlKTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFU
b0NvdmVyYWdlKGZhbHNlKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NP
VkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZShmYWxzZSk7ICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAg
IGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Rl
bmNpbFRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QoZmFsc2UpOyAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKGZhbHNlKTsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0RGl0aGVyKGZhbHNlKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50
IGluZGV4KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5kZXgpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCBmYWxzZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKK3sKKyAg
ICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkKSIsIG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChjb3VudCA8IDAgfHwgZmlyc3QgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmly
c3QsIGNvdW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBUUkFDRSgi
KEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBtb2RlLCBj
b3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsRW5hYmxlKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2Fw
ID0gMHglWCkiLCBjYXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZh
Y2UodHJ1ZSk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKHRydWUp
OyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UodHJ1ZSk7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0
U2FtcGxlQ292ZXJhZ2UodHJ1ZSk7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KHRydWUp
OyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0RGVwdGhUZXN0KHRydWUpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKHRydWUp
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIodHJ1ZSk7ICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4
ID0gJWQpIiwgaW5kZXgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4
LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEZpbmlzaCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZpbmlzaCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9pZCkKK3sKKyAgICBUUkFDRSgiKCki
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5mbHVzaCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJn
ZXQsIEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0
ID0gMHglWCwgIgorICAgICAgICAgICJHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0
LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgfHwgcmVuZGVy
YnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwIHx8ICFmcmFtZWJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6CisgICAgICAg
ICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVu
ZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0
aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
cmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0
dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gdGV4dGFyZ2V0ID0gMHglWCwgIgorICAgICAgICAgICJH
THVpbnQgdGV4dHVyZSA9ICVkLCBHTGludCBsZXZlbCA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hN
RU5UMDoKKyAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0ZXh0
dXJlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xf
Tk9ORTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0
dXJlKTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJn
ZXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
XzJEOgorICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhU
VVJFXzJEKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdl
dFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChsZXZlbCAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVm
ZmVyLT5zZXRDb2xvcmJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRo
YnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEZyb250RmFj
ZShHTGVudW0gbW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2Rl
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9DVzoKKyAgICAgICAgICBjYXNlIEdMX0NDVzoKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZyb250RmFjZShtb2RlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZW5CdWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKQoreworICAgIFRSQUNF
KCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVy
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBidWZmZXJzW2ldID0gY29u
dGV4dC0+Y3JlYXRlQnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1p
cG1hcChHTGVudW0gdGFyZ2V0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgp
IiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7Cisg
ICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhw
KSIsIG4sIGZyYW1lYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogcmVu
ZGVyYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHJlbmRl
cmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXpl
aSBuLCBHTHVpbnQqIHRleHR1cmVzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdM
dWludCogdGV4dHVyZXMgPSAgMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1
cmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZUF0dHJpYihHTHVpbnQgcHJv
Z3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xp
bnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQoreworICAgIFRSQUNFKCIoR0x1
aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVk
LCBHTHNpemVpICpsZW5ndGggPSAweCUwLjhwLCAiCisgICAgICAgICAgIkdMaW50ICpzaXplID0g
MHglMC44cCwgR0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAqbmFtZSA9ICUwLjhwKSIsCisg
ICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFt
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IChH
THVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJp
YnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hh
ciogbmFtZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRl
eCA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpKiBsZW5n
dGggPSAweCUwLjhwLCBHTGludCogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAu
OHAsIEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwg
YnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJv
Z3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFtT2JqZWN0LT5nZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwg
c2l6ZSwgdHlwZSwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMp
Cit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIG1heGNvdW50ID0g
JWQsIEdMc2l6ZWkqIGNvdW50ID0gMHglMC44cCwgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCki
LAorICAgICAgICAgIHByb2dyYW0sIG1heGNvdW50LCBjb3VudCwgc2hhZGVycyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChtYXhjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRB
dHRhY2hlZFNoYWRlcnMobWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitpbnQgX19zdGRjYWxsIGdsR2V0QXR0
cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKK3sKKyAgICBU
UkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHBy
b2dyYW0sIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9n
cmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jh
bU9iamVjdC0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcykK
K3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1zID0g
MHglMC44cCkiLCAgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9vbGVhbnYo
cG5hbWUsIHBhcmFtcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBu
YXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwor
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1l
LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9
PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhl
IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisK
KyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNd
OworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQ
YXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxv
YXRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGludFBhcmFt
cyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZ
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZl
cigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gQSBudWxsIGJ1ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVz
dGVkIGJ1ZmZlciB0YXJnZXQKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1l
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT51c2FnZSgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xlbnVtIF9fc3RkY2FsbCBnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7
CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICBp
ZiAoY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRFcnJvcigpOwor
ICAgIH0KKworICAgIHJldHVybiBHTF9OT19FUlJPUjsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBw
YXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFy
YW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisKKyAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0
aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKworICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgICAg
ICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAwLjBmOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1z
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBh
cmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUs
IGludFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFt
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGF0dGFjaG1l
bnQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgp
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
R0xlbnVtIGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRIYW5k
bGU7CisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6ICAgIAorICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZm
ZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVySGFuZGxlKCk7IAorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAKKyAg
ICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCkt
PmdldERlcHRoYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUg
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNI
TUVOVDogICAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZy
YW1lYnVmZmVyKCktPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0
YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldFN0ZW5jaWxidWZm
ZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEdMZW51bSBhdHRhY2htZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Cisg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlw
ZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXR0
YWNobWVudE9iamVjdFR5cGUgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGdsOjpJc1RleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfVEVY
VFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9O
QU1FOgorICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAg
ICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVy
VGV4dHVyZTJEIHdpbGwgbm90IGFsbG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNl
IGluIEdMIEVTIDIuMAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVf
TUFQX0ZBQ0U6CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdM
X1RFWFRVUkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6
OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IShjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRR
dWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJh
bWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
Qk9PTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcg
R0xib29sZWFuW251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZB
TFNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBbXSBib29sUGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAg
ICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBuYW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVF
IHx8IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NP
TE9SKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFy
YW1zW2ldIC0gMS4wZikgLyAyLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1z
W2ldICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1
aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0g
MHglMC44cCkiLCBwcm9ncmFtLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRF
X1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFn
Z2VkRm9yRGVsZXRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
IGNhc2UgR0xfTElOS19TVEFUVVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJv
Z3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FUVEFDSEVEX1NIQURFUlM6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElW
RV9BVFRSSUJVVEVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0
aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJ
VkVfVU5JRk9STVM6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdl
dEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHgl
MC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1
ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChi
dWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldEluZm9Mb2coYnVmc2l6
ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFD
RSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFy
YW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBj
b250ZXh0LT5nZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkp
OworCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9XSURUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcmVuZGVyYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRGb3JtYXQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJf
UkVEX1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZl
cigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0
YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFJlZFNpemUoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3Ji
dWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRHcmVlblNp
emUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9CTFVFX1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXND
b2xvcmJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEJs
dWVTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9S
RU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVy
LT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+
Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkRlcHRoYnVmZmVyKj4ocmVuZGVyYnVm
ZmVyKS0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpTdGVuY2lsYnVmZmVy
Kj4ocmVuZGVyYnVmZmVyKS0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyaXYoR0x1
aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIo
R0x1aW50IHNoYWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwgc2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmpl
Y3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFk
ZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9UWVBFOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldFR5cGUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxl
dGlvbigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QSUxFX1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5p
c0NvbXBpbGVkKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RI
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldFNvdXJjZUxlbmd0
aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldFNoYWRlckluZm9Mb2coR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZykKK3sKKyAgICBUUkFDRSgiKEdM
dWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9
IDB4JTAuOHAsIEdMY2hhciogaW5mb2xvZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIs
IGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChidWZzaXplIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIo
c2hhZGVyKTsKKworICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwg
bGVuZ3RoLCBpbmZvbG9nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVu
dW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQq
IHByZWNpc2lvbikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBzaGFkZXJ0eXBlID0gMHglWCwgR0xl
bnVtIHByZWNpc2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFuZ2UgPSAweCUwLjhwLCBHTGludCog
cHJlY2lzaW9uID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlcnR5cGUsIHByZWNpc2lvbnR5
cGUsIHJhbmdlLCBwcmVjaXNpb24pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2gg
KHNoYWRlcnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6
CisgICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHByZWNpc2lvbnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoKKyAgICAgICAgICBjYXNlIEdMX01F
RElVTV9GTE9BVDoKKyAgICAgICAgICBjYXNlIEdMX0hJR0hfRkxPQVQ6CisgICAgICAgICAgICAv
LyBBc3N1bWUgSUVFRSA3NTQgcHJlY2lzaW9uCisgICAgICAgICAgICByYW5nZVswXSA9IDEyNzsK
KyAgICAgICAgICAgIHJhbmdlWzFdID0gMTI3OworICAgICAgICAgICAgKnByZWNpc2lvbiA9IDIz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MT1dfSU5UOgorICAgICAg
ICAgIGNhc2UgR0xfTUVESVVNX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0hJR0hfSU5UOgorICAg
ICAgICAgICAgLy8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25seSBzdXBwb3J0cyBzaW5nbGUtcHJl
Y2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsCisgICAgICAgICAgICAvLyB3aGljaCBjYW4g
YWNjdXJhdGVseSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8gKy8tMTY3NzcyMTYKKyAgICAgICAg
ICAgIHJhbmdlWzBdID0gMjQ7CisgICAgICAgICAgICByYW5nZVsxXSA9IDI0OworICAgICAgICAg
ICAgKnByZWNpc2lvbiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBs
ZW5ndGgsIEdMY2hhciogc291cmNlKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVk
LCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFy
KiBzb3VyY2UgPSAweCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgs
IHNvdXJjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChidWZzaXplIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6U2hh
ZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAgICAg
ICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRTb3VyY2UoYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2Up
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2NvbnN0
IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGVudW0gbmFtZSkKK3sKKyAgICBUUkFD
RSgiKEdMZW51bSBuYW1lID0gMHglWCkiLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIHN3
aXRjaCAobmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVORE9SOgorICAgICAg
ICAgICAgcmV0dXJuIChHTHVieXRlKikiVHJhbnNHYW1pbmcgSW5jLiI7CisgICAgICAgICAgY2Fz
ZSBHTF9SRU5ERVJFUjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIkFOR0xFIjsKKyAg
ICAgICAgICBjYXNlIEdMX1ZFUlNJT046CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJP
cGVuR0wgRVMgMi4wIChnaXQtZGV2ZWwgIl9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKKyAgICAg
ICAgICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVy
biAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKGdpdC1kZXZlbCAiX19EQVRFX18g
IiAiIF9fVElNRV9fIikiOworICAgICAgICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKKyAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0RXh0
ZW5zaW9uU3RyaW5nKCkgOiAiIik7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIChHTHVieXRlKilOVUxMKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKEdMdWJ5dGUqKU5VTEwpOworICAgIH0KKworICAgIHJl
dHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQoreworICAgIFRSQUNFKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFt
cyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxU
RVI6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0Zp
bHRlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4
dHVyZS0+Z2V0TWluRmlsdGVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KXRleHR1cmUtPmdldFdyYXBTKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJp
dihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJB
Q0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19G
SUxURVI6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUjoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluRmls
dGVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9XUkFQX1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBT
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9XUkFQX1Q6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRVbmlmb3JtZnYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBs
b2NhdGlvbiA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHByb2dyYW0sIGxvY2F0
aW9uLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgcGFyYW1z
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWl2KEdMdWlu
dCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIHBhcmFtcykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitpbnQg
X19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIqIG5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25zdCBHTGNo
YXIqIG5hbWUgPSAweCUwLjhwKSIsIHByb2dyYW0sIG5hbWUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKHN0cnN0cihuYW1lLCAiZ2xfIikgPT0gbmFtZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3Jh
bSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1P
YmplY3QtPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1lLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5h
bWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBw
bmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0ZSBhdHRy
aWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tRW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJT
dGF0ZS5tU2l6ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KEdMZmxvYXQpYXR0cmliU3RhdGUubVN0cmlkZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1UeXBlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9S
TUFMSVpFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRl
Lm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tQm91
bmRCdWZmZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNDsgKytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0
cmliaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAg
VFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1FbmFibGVkID8gR0xfVFJV
RSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dHJpYlN0YXRlLm1TaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBmbG9hdCBjdXJyZW50VmFsdWUgPSBhdHRyaWJTdGF0ZS5t
Q3VycmVudFZhbHVlW2ldOworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQp
KGN1cnJlbnRWYWx1ZSA+IDAuMGYgPyBmbG9vcihjdXJyZW50VmFsdWUgKyAwLjVmKSA6IGNlaWwo
Y3VycmVudFZhbHVlIC0gMC41ZikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihH
THVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcikKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwb2lu
dGVyID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBvaW50ZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHBuYW1lICE9IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBvaW50ZXIgPSBjb25zdF9jYXN0PEdMdm9pZCo+
KGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEhpbnQo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIG1vZGUgPSAweCVYKSIsIHRhcmdldCwgbW9kZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GQVNURVNUOgorICAgICAgICAgICAg
ICBjYXNlIEdMX05JQ0VTVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ET05UX0NBUkU6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UKQor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEdlbmVyYXRlTWlwbWFwSGludChtb2RlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMdWlu
dCBidWZmZXIgPSAlZCkiLCBidWZmZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQgJiYgYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXJP
YmplY3QgPSBjb250ZXh0LT5nZXRCdWZmZXIoYnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKGJ1
ZmZlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJV
RTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzRW5hYmxlZChHTGVudW0gY2FwKQoreworICAgIFRSQUNFKCIoR0xlbnVtIGNh
cCA9IDB4JVgpIiwgY2FwKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5p
c0N1bGxGYWNlRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7
CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4g
Y29udGV4dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1w
bGVDb3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzU3RlbmNpbFRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
VEVTVDogICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29udGV4dC0+aXNCbGVuZEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sK
KyAgICBUUkFDRSgiKEdMdWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIGZyYW1lYnVmZmVyKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIGZyYW1lYnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gY29udGV4
dC0+Z2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworCisgICAgICAgICAgICBpZiAoZnJhbWVi
dWZmZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RS
VUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBf
X3N0ZGNhbGwgZ2xJc1Byb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVp
bnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQgJiYgcHJvZ3JhbSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAocHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xi
b29sZWFuIF9fc3RkY2FsbCBnbElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7
CisgICAgVFJBQ0UoIihHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYmIHJlbmRlcmJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlm
IChyZW5kZXJidWZmZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1NoYWRlcihHTHVpbnQgc2hhZGVyKQoreworICAgIFRSQUNF
KCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCAmJiBzaGFkZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIg
KnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAg
ICBpZiAoc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRSQUNF
KCIoR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0ZXh0dXJlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0ICYmIHRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAg
ICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsTGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCit7CisgICAgVFJB
Q0UoIihHTGZsb2F0IHdpZHRoID0gJWYpIiwgd2lkdGgpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAod2lkdGggPD0gMC4wZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRMaW5lV2lkdGgod2lkdGgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsTGlua1Byb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFk
ZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5saW5rKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQ
aXhlbFN0b3JlaShHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIFRSQUNFKCIoR0xl
bnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCBwbmFtZSwgcGFyYW0pOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNL
X0FMSUdOTUVOVDoKKyAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAy
ICYmIHBhcmFtICE9IDQgJiYgcGFyYW0gIT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFy
YW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfUEFD
S19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0g
MiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFtICE9IDgpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJh
bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMp
Cit7CisgICAgVFJBQ0UoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBHTGZsb2F0IHVuaXRzID0gJWYp
IiwgZmFjdG9yLCB1bml0cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldFBhcmFtcyhmYWN0
b3IsIHVuaXRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZv
aWQqIHBpeGVscykKK3sKKyAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBH
THNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKKyAgICAgICAgICAiR0xl
bnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAw
eCUwLjhwKSIsCisgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAg
cGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X0ZPUk1BVDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNlU2hhZGVyQ29t
cGlsZXIodm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OlNoYWRlcjo6cmVsZWFzZUNvbXBpbGVyKCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCkiLAorICAgICAgICAgIHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICAgICAgY2FzZSBHTF9S
R0JBNDoKKyAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAgICAgY2FzZSBHTF9SR0I1
NjU6CisgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCB8fCB3aWR0aCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUgfHwgaGVpZ2h0ID4gZ2w6Ok1B
WF9SRU5ERVJCVUZGRVJfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcg
Z2w6OkRlcHRoYnVmZmVyKHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1
X0ExOgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRSZW5kZXJidWZmZXIobmV3IGdsOjpDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRl
cmJ1ZmZlcihuZXcgZ2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2Ft
cGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpCit7CisgICAgVFJB
Q0UoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUs
IGludmVydCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoZ2w6OmNsYW1wMDEo
dmFsdWUpLCBpbnZlcnQgPT0gR0xfVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xp
bnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JQYXJhbXMoeCwg
eSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXplaSBuLCBjb25z
dCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmlu
YXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25z
dCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwLCBHTGVudW0gYmluYXJ5Zm9ybWF0ID0gMHglWCwg
IgorICAgICAgICAgICJjb25zdCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVu
Z3RoID0gJWQpIiwKKyAgICAgICAgICBuLCBzaGFkZXJzLCBiaW5hcnlmb3JtYXQsIGJpbmFyeSwg
bGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgLy8gTm8gYmluYXJ5IHNoYWRlciBm
b3JtYXRzIGFyZSBzdXBwb3J0ZWQuCisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFNoYWRlclNvdXJjZShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNo
YXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQg
c2hhZGVyID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiogc3RyaW5nID0g
MHglMC44cCwgY29uc3QgR0xpbnQqIGxlbmd0aCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzaGFk
ZXIsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNo
YWRlcik7CisKKyAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzaGFkZXJPYmplY3QtPnNldFNvdXJjZShjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsU3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCit7Cisg
ICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmdW5jLCByZWYsIG1h
c2spOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xlbnVtIGZh
Y2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNFKCIo
R0xlbnVtIGZhY2UgPSAweCVYLCBHTGVudW0gZnVuYyA9IDB4JVgsIEdMaW50IHJlZiA9ICVkLCBH
THVpbnQgbWFzayA9ICVkKSIsIGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
RlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJPTlRf
QU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX05FVkVSOgorICAg
ICAgICAgIGNhc2UgR0xfQUxXQVlTOgorICAgICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAg
ICBjYXNlIEdMX0xFUVVBTDoKKyAgICAgICAgICBjYXNlIEdMX0VRVUFMOgorICAgICAgICAgIGNh
c2UgR0xfR0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKKyAgICAgICAgICBjYXNl
IEdMX05PVEVRVUFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9O
VCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdM
X0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1bmMsIHJlZiwgbWFzayk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVpbnQgbWFzaykKK3sKKyAgICBnbFN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIG1hc2spOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTHVpbnQgbWFzayA9ICVkKSIsIGZhY2UsIG1hc2spOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICBj
YXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmFjZSA9
PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxXcml0ZW1hc2sobWFzayk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBH
TF9GUk9OVF9BTkRfQkFDSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsQmFja1dyaXRlbWFzayhtYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bFN0ZW5jaWxPcChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCit7Cisg
ICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgZmFpbCwgemZhaWwsIHpw
YXNzKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFj
ZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTGVudW0gZmFpbCA9IDB4JVgsIEdMZW51bSB6ZmFpbCA9
IDB4JVgsIEdMZW51bSB6cGFzID0gMHglWHMpIiwKKyAgICAgICAgICBmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZhY2UpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoK
KyAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChmYWlsKQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBj
YXNlIEdMX1JFUExBQ0U6CisgICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2Ug
R0xfREVDUjoKKyAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lO
Q1JfV1JBUDoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoemZhaWwpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAg
ICAgIGNhc2UgR0xfUkVQTEFDRToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAg
Y2FzZSBHTF9ERUNSOgorICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2Ug
R0xfSU5DUl9XUkFQOgorICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh6cGFzcykKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX0tFRVA6Cisg
ICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xfSU5DUjoKKyAgICAg
ICAgICBjYXNlIEdMX0RFQ1I6CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6CisgICAgICAgICAg
Y2FzZSBHTF9JTkNSX1dSQVA6CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2UgPT0gR0xfRlJPTlRf
QU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Rl
bmNpbE9wZXJhdGlvbnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNL
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNr
T3BlcmF0aW9ucyhmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCogcGl4ZWxzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50
IGxldmVsID0gJWQsIEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAl
ZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgorICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwg
R0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBw
aXhlbHMgPSAgMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsID4gMCAmJiAoIWdsOjppc1BvdzIo
d2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwg
aGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBo
ZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkdGggPiAo
Z2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlu
dGVybmFsZm9ybWF0ICE9IGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
aW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIEdMX1JHQjoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9SR0JBOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChib3JkZXIgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJ
bWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1g6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dEltYWdlUG9zWihsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVn
WihsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBnbFRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50KXBhcmFtKTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxv
YXQqIHBhcmFtcykKK3sKKyAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50
KSpwYXJhbXMpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmkoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHRh
cmdldCwgcG5hbWUsIHBhcmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKworICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKKyAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfV1JBUF9UOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3Jh
cFQoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0p
cGFyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBnbFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
aW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAi
CisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xl
bnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJjb25z
dCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9U
RVhUVVJFX0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1p
dHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1p
dHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBO
VUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhl
bHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWYoR0xpbnQgbG9jYXRpb24sIEdM
ZmxvYXQgeCkKK3sKKyAgICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIDEsICZ4KTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwg
Y291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBj
b3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShH
TGludCBsb2NhdGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEs
ICZ4KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xaXYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3sKKyAgICBH
TGZsb2F0IHh5WzJdID0ge3gsIHl9OworCisgICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAo
R0xmbG9hdCopJnh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIFRSQUNFKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2
ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW0tPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBH
TGludCB5KQoreworICAgIEdMaW50IHh5WzRdID0ge3gsIHl9OworCisgICAgZ2xVbmlmb3JtMml2
KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7Cisg
ICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9j
YXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sKKyAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6
fTsKKworICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOworfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVk
LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0
aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0zZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KQoreworICAgIEdM
aW50IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwg
KEdMaW50KikmeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHos
IHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encpOwor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxv
Y2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm00ZnYobG9j
YXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3
KQoreworICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVuaWZvcm00
aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQor
eworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBj
b25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSkKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9G
QUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0Uo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNv
dW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1N
YXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8
IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9j
YXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCAmJiBwcm9ncmFtICE9IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+dXNlUHJv
Z3JhbShwcm9ncmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1P
YmplY3QtPnZhbGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5kZXgs
IEdMZmxvYXQgeCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHgg
PSAlZikiLCBpbmRleCwgeCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9Owor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMg
PSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVl
c1swXSwgMCwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGlu
ZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmKEdMdWludCBpbmRleCwgR0xmbG9h
dCB4LCBHTGZsb2F0IHkpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9h
dCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxz
WzRdID0geyB4LCB5LCAwLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdM
ZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHop
Cit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxv
YXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQg
dmFsc1s0XSA9IHsgeCwgeSwgeiwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9
ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIDEg
fTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVk
LCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0
IHcgPSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwg
eSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2
YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRW
ZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHVlcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxp
emVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCit7CisgICAgVFJBQ0UoIihH
THVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIK
KyAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAl
ZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN0cmlkZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5k
ZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCksIHNpemUsIHR5cGUsIChub3JtYWxp
emVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUUkFDRSgi
KEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkg
aGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFt
cyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkKiBwaXhlbHMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQg
bGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJH
THNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAl
ZCwgR0xpbnQgYm9yZGVyID0gJWQsICIKKyAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgs
IEdMZW51bSB0eXBlID0gMHgleCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUg
X19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCit7CisgICAg
c3RydWN0IEV4dGVuc2lvbgorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAg
ICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOworICAg
IH07CisKKyAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KKyAgICB7
CisgICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKKyAgICB9OworCisgICAgZm9yIChpbnQg
ZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsg
ZXh0KyspCisgICAgeworICAgICAgICBpZiAoc3RyY21wKHByb2NuYW1lLCBnbEV4dGVuc2lvbnNb
ZXh0XS5uYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVz
czsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit9CkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorTElCUkFS
WSBsaWJHTEVTdjIKK0VYUE9SVFMKKyAgICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAg
IEAxCisgICAgZ2xBdHRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMgorICAgIGdsQmluZEF0
dHJpYkxvY2F0aW9uICAgICAgICAgICAgQDMKKyAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAg
ICAgICAgIEA0CisgICAgZ2xCaW5kRnJhbWVidWZmZXIgICAgICAgICAgICAgICBANQorICAgIGds
QmluZFJlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgQDYKKyAgICBnbEJpbmRUZXh0dXJlICAgICAg
ICAgICAgICAgICAgIEA3CisgICAgZ2xCbGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAor
ICAgIGdsQmxlbmRFcXVhdGlvbiAgICAgICAgICAgICAgICAgQDkKKyAgICBnbEJsZW5kRXF1YXRp
b25TZXBhcmF0ZSAgICAgICAgIEAxMAorICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAg
ICAgQDExCisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgICBAMTIKKyAgICBnbEJ1
ZmZlckRhdGEgICAgICAgICAgICAgICAgICAgIEAxMworICAgIGdsQnVmZmVyU3ViRGF0YSAgICAg
ICAgICAgICAgICAgQDE0CisgICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUK
KyAgICBnbENsZWFyICAgICAgICAgICAgICAgICAgICAgICAgIEAxNgorICAgIGdsQ2xlYXJDb2xv
ciAgICAgICAgICAgICAgICAgICAgQDE3CisgICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAg
ICAgICBAMTgKKyAgICBnbENsZWFyU3RlbmNpbCAgICAgICAgICAgICAgICAgIEAxOQorICAgIGds
Q29sb3JNYXNrICAgICAgICAgICAgICAgICAgICAgQDIwCisgICAgZ2xDb21waWxlU2hhZGVyICAg
ICAgICAgICAgICAgICBAMjEKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAy
MgorICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgICAgICAgQDIzCisgICAgZ2xDb3B5VGV4
SW1hZ2UyRCAgICAgICAgICAgICAgICBAMjQKKyAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAg
ICAgICAgIEAyNQorICAgIGdsQ3JlYXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2CisgICAg
Z2xDcmVhdGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMjcKKyAgICBnbEN1bGxGYWNlICAgICAg
ICAgICAgICAgICAgICAgIEAyOAorICAgIGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAg
QDI5CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgICAgICAgICAgICBAMzAKKyAgICBnbERlbGV0
ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAzMgorICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAg
ICAgICAgICAgQDMzCisgICAgZ2xEZWxldGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKKyAg
ICBnbERlbGV0ZVRleHR1cmVzICAgICAgICAgICAgICAgIEAzMQorICAgIGdsRGVwdGhGdW5jICAg
ICAgICAgICAgICAgICAgICAgQDM2CisgICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAg
ICBAMzcKKyAgICBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgIEAzOAorICAgIGdsRGV0
YWNoU2hhZGVyICAgICAgICAgICAgICAgICAgQDM1CisgICAgZ2xEaXNhYmxlICAgICAgICAgICAg
ICAgICAgICAgICBAMzkKKyAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAor
ICAgIGdsRHJhd0FycmF5cyAgICAgICAgICAgICAgICAgICAgQDQxCisgICAgZ2xEcmF3RWxlbWVu
dHMgICAgICAgICAgICAgICAgICBANDIKKyAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgIEA0MworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICAgQDQ0CisgICAgZ2xG
aW5pc2ggICAgICAgICAgICAgICAgICAgICAgICBANDUKKyAgICBnbEZsdXNoICAgICAgICAgICAg
ICAgICAgICAgICAgIEA0NgorICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3
CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAgICAgICAgICBANDgKKyAgICBnbEZyb250RmFj
ZSAgICAgICAgICAgICAgICAgICAgIEA0OQorICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAg
ICAgICAgQDUwCisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKKyAgICBn
bEdlblJlbmRlcmJ1ZmZlcnMgICAgICAgICAgICAgIEA1MworICAgIGdsR2VuVGV4dHVyZXMgICAg
ICAgICAgICAgICAgICAgQDU0CisgICAgZ2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBA
NTEKKyAgICBnbEdldEFjdGl2ZUF0dHJpYiAgICAgICAgICAgICAgIEA1NQorICAgIGdsR2V0QWN0
aXZlVW5pZm9ybSAgICAgICAgICAgICAgQDU2CisgICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAg
ICAgICAgICBANTcKKyAgICBnbEdldEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAorICAg
IGdsR2V0Qm9vbGVhbnYgICAgICAgICAgICAgICAgICAgQDU5CisgICAgZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdiAgICAgICAgICBANjAKKyAgICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAg
IEA2MQorICAgIGdsR2V0RmxvYXR2ICAgICAgICAgICAgICAgICAgICAgQDYyCisgICAgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAgIEA2MworICAgIGdsR2V0SW50ZWdlcnYg
ICAgICAgICAgICAgICAgICAgQDY0CisgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAg
ICBANjYKKyAgICBnbEdldFByb2dyYW1pdiAgICAgICAgICAgICAgICAgIEA2NQorICAgIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgICAgQDY3CisgICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAg
ICAgICAgICAgICBANjkKKyAgICBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAor
ICAgIGdsR2V0U2hhZGVyU291cmNlICAgICAgICAgICAgICAgQDcxCisgICAgZ2xHZXRTaGFkZXJp
diAgICAgICAgICAgICAgICAgICBANjgKKyAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAg
ICAgIEA3MgorICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgQDczCisgICAgZ2xH
ZXRUZXhQYXJhbWV0ZXJpdiAgICAgICAgICAgICBANzQKKyAgICBnbEdldFVuaWZvcm1Mb2NhdGlv
biAgICAgICAgICAgIEA3NworICAgIGdsR2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1
CisgICAgZ2xHZXRVbmlmb3JtaXYgICAgICAgICAgICAgICAgICBANzYKKyAgICBnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2ICAgICAgIEA4MAorICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAg
ICAgICAgQDc4CisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKKyAgICBn
bEhpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIEA4MQorICAgIGdsSXNCdWZmZXIgICAgICAg
ICAgICAgICAgICAgICAgQDgyCisgICAgZ2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBA
ODMKKyAgICBnbElzRnJhbWVidWZmZXIgICAgICAgICAgICAgICAgIEA4NAorICAgIGdsSXNQcm9n
cmFtICAgICAgICAgICAgICAgICAgICAgQDg1CisgICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAg
ICAgICAgICBAODYKKyAgICBnbElzU2hhZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NworICAg
IGdsSXNUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgQDg4CisgICAgZ2xMaW5lV2lkdGggICAg
ICAgICAgICAgICAgICAgICBAODkKKyAgICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAg
IEA5MAorICAgIGdsUGl4ZWxTdG9yZWkgICAgICAgICAgICAgICAgICAgQDkxCisgICAgZ2xQb2x5
Z29uT2Zmc2V0ICAgICAgICAgICAgICAgICBAOTIKKyAgICBnbFJlYWRQaXhlbHMgICAgICAgICAg
ICAgICAgICAgIEA5MworICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0Cisg
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlICAgICAgICAgICBAOTUKKyAgICBnbFNhbXBsZUNvdmVy
YWdlICAgICAgICAgICAgICAgIEA5NgorICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAg
ICAgQDk3CisgICAgZ2xTaGFkZXJCaW5hcnkgICAgICAgICAgICAgICAgICBAOTgKKyAgICBnbFNo
YWRlclNvdXJjZSAgICAgICAgICAgICAgICAgIEA5OQorICAgIGdsU3RlbmNpbEZ1bmMgICAgICAg
ICAgICAgICAgICAgQDEwMAorICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEw
MQorICAgIGdsU3RlbmNpbE1hc2sgICAgICAgICAgICAgICAgICAgQDEwMgorICAgIGdsU3RlbmNp
bE1hc2tTZXBhcmF0ZSAgICAgICAgICAgQDEwMworICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAg
ICAgICAgICAgQDEwNAorICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQor
ICAgIGdsVGV4SW1hZ2UyRCAgICAgICAgICAgICAgICAgICAgQDEwNgorICAgIGdsVGV4UGFyYW1l
dGVyZiAgICAgICAgICAgICAgICAgQDEwNworICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAg
ICAgICAgQDEwOAorICAgIGdsVGV4UGFyYW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQorICAg
IGdsVGV4UGFyYW1ldGVyaXYgICAgICAgICAgICAgICAgQDExMAorICAgIGdsVGV4U3ViSW1hZ2Uy
RCAgICAgICAgICAgICAgICAgQDExMQorICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAg
ICAgQDExMgorICAgIGdsVW5pZm9ybTFmdiAgICAgICAgICAgICAgICAgICAgQDExMworICAgIGds
VW5pZm9ybTFpICAgICAgICAgICAgICAgICAgICAgQDExNAorICAgIGdsVW5pZm9ybTFpdiAgICAg
ICAgICAgICAgICAgICAgQDExNQorICAgIGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAg
QDExNgorICAgIGdsVW5pZm9ybTJmdiAgICAgICAgICAgICAgICAgICAgQDExNworICAgIGdsVW5p
Zm9ybTJpICAgICAgICAgICAgICAgICAgICAgQDExOAorICAgIGdsVW5pZm9ybTJpdiAgICAgICAg
ICAgICAgICAgICAgQDExOQorICAgIGdsVW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEy
MAorICAgIGdsVW5pZm9ybTNmdiAgICAgICAgICAgICAgICAgICAgQDEyMQorICAgIGdsVW5pZm9y
bTNpICAgICAgICAgICAgICAgICAgICAgQDEyMgorICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAg
ICAgICAgICAgQDEyMworICAgIGdsVW5pZm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAor
ICAgIGdsVW5pZm9ybTRmdiAgICAgICAgICAgICAgICAgICAgQDEyNQorICAgIGdsVW5pZm9ybTRp
ICAgICAgICAgICAgICAgICAgICAgQDEyNgorICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAg
ICAgICAgQDEyNworICAgIGdsVW5pZm9ybU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAorICAg
IGdsVW5pZm9ybU1hdHJpeDNmdiAgICAgICAgICAgICAgQDEyOQorICAgIGdsVW5pZm9ybU1hdHJp
eDRmdiAgICAgICAgICAgICAgQDEzMAorICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAg
ICAgQDEzMQorICAgIGdsVmFsaWRhdGVQcm9ncmFtICAgICAgICAgICAgICAgQDEzMgorICAgIGds
VmVydGV4QXR0cmliMWYgICAgICAgICAgICAgICAgQDEzMworICAgIGdsVmVydGV4QXR0cmliMWZ2
ICAgICAgICAgICAgICAgQDEzNAorICAgIGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAg
QDEzNQorICAgIGdsVmVydGV4QXR0cmliMmZ2ICAgICAgICAgICAgICAgQDEzNgorICAgIGdsVmVy
dGV4QXR0cmliM2YgICAgICAgICAgICAgICAgQDEzNworICAgIGdsVmVydGV4QXR0cmliM2Z2ICAg
ICAgICAgICAgICAgQDEzOAorICAgIGdsVmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEz
OQorICAgIGdsVmVydGV4QXR0cmliNGZ2ICAgICAgICAgICAgICAgQDE0MAorICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlciAgICAgICAgICAgQDE0MQorICAgIGdsVmlld3BvcnQgICAgICAgICAgICAg
ICAgICAgICAgQDE0MgorCisgICAgOyBFeHRlbnNpb25zCisgICAgZ2xUZXhJbWFnZTNET0VTCQkJ
CQlAMTQzCisgICAgCisgICAgOyBFR0wgZGVwZW5kZW5jaWVzCisgICAgZ2xDcmVhdGVDb250ZXh0
CQkJCQlAMTQ0IE5PTkFNRQorICAgIGdsRGVzdHJveUNvbnRleHQJCQkJQDE0NSBOT05BTUUKKyAg
ICBnbE1ha2VDdXJyZW50CQkJCQlAMTQ2IE5PTkFNRQorICAgIGdsR2V0Q3VycmVudENvbnRleHQJ
CQkJQDE0NyBOT05BTUUKKyAgICBnbEdldFByb2NBZGRyZXNzICAgICAgICAgICAgICAgIEAxNDgg
Tk9OQU1FClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLnZjcHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLnZjcHJvagkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDkgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0
DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJs
aWJHTEVTdjIiDQorCVByb2plY3RHVUlEPSJ7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZG
NDQ4RTc4fSINCisJUm9vdE5hbWVzcGFjZT0ibGliR0xFU3YyIg0KKwlLZXl3b3JkPSJXaW4zMlBy
b2oiDQorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCisJPg0KKwk8UGxhdGZvcm1z
Pg0KKwkJPFBsYXRmb3JtDQorCQkJTmFtZT0iV2luMzIiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4N
CisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxD
b25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJT3V0cHV0RGlyZWN0b3J5
PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVybWVkaWF0ZURp
cmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIi
DQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1By
ZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21C
dWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0
b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlH
ZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCU9w
dGltaXphdGlvbj0iMCINCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9q
ZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VY
UE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIg0KKwkJCQlNaW5pbWFsUmVi
dWlsZD0idHJ1ZSINCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KKwkJCQlSdW50aW1lTGli
cmFyeT0iMSINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdhcm5pbmdMZXZl
bD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSINCisJCQkJ
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5h
bWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZD
TGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iRDNkeDkubGliIg0KKwkJ
CQlMaW5rSW5jcmVtZW50YWw9IjIiDQorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVT
djIuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5
c3RlbT0iMiINCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KKwkJCQlEYXRhRXhlY3V0
aW9uUHJldmVudGlvbj0iMCINCisJCQkJVGFyZ2V0TWFjaGluZT0iMSINCisJCQkvPg0KKwkJCTxU
b29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01h
a2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJ
CQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9u
JiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3Vy
YXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVT
djIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9u
TmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxp
YiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUp
XCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyINCisJCQkvPg0KKwkJPC9D
b25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
Ig0KKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1l
KSINCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUNoYXJhY3RlclNldD0iMSINCisJCQlXaG9sZVBy
b2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJl
QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRv
clRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdl
bmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0
aW1pemF0aW9uPSIyIg0KKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiINCisJCQkJQWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGly
KS8uLi8uLi9pbmNsdWRlIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRF
QlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQ
UkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0K
KwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJ
CQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9y
bWF0aW9uRm9ybWF0PSIzIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2Vk
UmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jl
c291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVM
aW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29s
Ig0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJEM2R4OS5saWIiDQorCQkJCUxpbmtJbmNy
ZW1lbnRhbD0iMSINCisJCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiDQorCQkJ
CU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIg0KKwkJCQlHZW5lcmF0ZURlYnVn
SW5mb3JtYXRpb249InRydWUiDQorCQkJCVN1YlN5c3RlbT0iMiINCisJCQkJT3B0aW1pemVSZWZl
cmVuY2VzPSIyIg0KKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KKwkJCQlSYW5kb21pemVk
QmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KKwkJCQlU
YXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9v
bA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlm
aWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDsk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYj
eDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtj
b3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERp
cikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8g
b2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmln
dXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJ
CTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztj
eHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7
NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxCdWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250ZXh0LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxk
ZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXEZyYW1lYnVmZmVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJi
dWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxTaGFkZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cdXRpbGl0aWVzLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsdGVyDQorCQkJCU5hbWU9Ikdlb21ldHJ5Ig0KKwkJCQk+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcYmFja2VuZC5jcHAiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRy
eVxkeDkuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFuYWdlci5jcHAiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxWZXJ0
ZXhEYXRhTWFuYWdlci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4N
CisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlG
aWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7
OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbnRleHQuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGluY2x1ZGVcR0xFUzJcZ2wyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMmV4dC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxH
TEVTMlxnbDJwbGF0Zm9ybS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuXG1hdGh1dGlsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRl
ci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxUZXh0dXJlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXHV0aWxpdGllcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWx0ZXIN
CisJCQkJTmFtZT0iR2VvbWV0cnkiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxkeDkuaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XElu
ZGV4RGF0YU1hbmFnZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XHZlcnRleGNvbnZlcnNpb24uaCINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5
XFZlcnRleERhdGFNYW5hZ2VyLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRl
cj4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3Yy
LmRlZiINCisJCQk+DQorCQk8L0ZpbGU+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0ds
b2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmNwcDogRExM
IGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgorCisjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZm
ZXIuaCIKKworc3RhdGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7CisK
K0JPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQ
Vk9JRCByZXNlcnZlZCkKK3sKKyAgICBzd2l0Y2ggKHJlYXNvbikKKyAgICB7CisgICAgICBjYXNl
IERMTF9QUk9DRVNTX0FUVEFDSDoKKyAgICAgICAgeworICAgICAgICAgICAgY3VycmVudFRMUyA9
IFRsc0FsbG9jKCk7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0Zf
SU5ERVhFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0
aWFsaXplIGluZGV4CisgICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6Q3VycmVudCAqY3VycmVudCA9IChnbDo6Q3VycmVudCopTG9jYWxBbGxv
YyhMUFRSLCBzaXplb2YoZ2w6OkN1cnJlbnQpKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywg
Y3VycmVudCk7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50
VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKKyAg
ICAgICAgeworICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRU
TFMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgVGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVF
OworfQorCituYW1lc3BhY2UgZ2wKK3sKK3ZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4
dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAg
Q3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKwor
ICAgIGN1cnJlbnQtPmNvbnRleHQgPSBjb250ZXh0OworICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBk
aXNwbGF5OworCisgICAgaWYgKGNvbnRleHQgJiYgZGlzcGxheSAmJiBzdXJmYWNlKQorICAgIHsK
KyAgICAgICAgY29udGV4dC0+bWFrZUN1cnJlbnQoZGlzcGxheSwgc3VyZmFjZSk7CisgICAgfQor
fQorCitDb250ZXh0ICpnZXRDb250ZXh0KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1
cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmNv
bnRleHQ7Cit9CisKK2VnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCit7CisgICAgQ3VycmVudCAq
Y3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVy
biBjdXJyZW50LT5kaXNwbGF5OworfQorCitJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKQor
eworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKworICAgIHJldHVy
biBkaXNwbGF5LT5nZXREZXZpY2UoKTsKK30KK30KKworLy8gUmVjb3JkcyBhbiBlcnJvciBjb2Rl
Cit2b2lkIGVycm9yKEdMZW51bSBlcnJvckNvZGUpCit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbEdldEN1cnJlbnRDb250ZXh0KCk7CisKKyAgICBpZiAoY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoZXJyb3JDb2RlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9J
TlZBTElEX0VOVU06CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRW51bSgpOwor
ICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGVudW1c
biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX1ZBTFVF
OgorICAgICAgICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZFZhbHVlKCk7CisgICAgICAgICAg
ICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKKyAgICAgICAgICAg
IGdsOjp0cmFjZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBvcGVyYXRpb25cbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9PVVRfT0ZfTUVNT1JZOgorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3JkT3V0T2ZNZW1vcnkoKTsKKyAgICAgICAgICAgIGdsOjp0
cmFjZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogb3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
OgorICAgICAgICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9u
KCk7CisgICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQg
ZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L21haW4uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYWluLmg6
IE1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpZm5kZWYgTElCR0xFU1YyX01B
SU5fSF8KKyNkZWZpbmUgTElCR0xFU1YyX01BSU5fSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNs
dWRlICJsaWJFR0wvRGlzcGxheS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
KworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgQ3VycmVudAoreworICAgIENvbnRleHQgKmNvbnRl
eHQ7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5OworfTsKKwordm9pZCBtYWtlQ3VycmVudChD
b250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7CisKK0NvbnRleHQgKmdldENvbnRleHQoKTsKK2VnbDo6RGlzcGxheSAqZ2V0RGlzcGxh
eSgpOworCitJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKTsKK30KKwordm9pZCBlcnJvcihH
TGVudW0gZXJyb3JDb2RlKTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEdM
ZW51bSBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9y
Q29kZSk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAgIC8vIExJQkdM
RVNWMl9NQUlOX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5oOiBNYXRoIGFuZCBiaXQgbWFu
aXB1bGF0aW9uIGZ1bmN0aW9ucy4KKworI2lmbmRlZiBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX01BVEhVVElMX0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVz
cGFjZSBnbAoreworaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAm
ICh4IC0gMSkpID09IDAgJiYgKHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkK
K3sKKyAgICBpbnQgciA9IDA7CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJl
dHVybiByOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4
KQoreworICAgIGlmICh4ICE9IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHgg
Pj4gMjsKKyAgICB4IHw9IHggPj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4g
MTY7CisgICAgeCsrOworCisgICAgcmV0dXJuIHg7Cit9CisKK2lubGluZSBmbG9hdCBjbGFtcDAx
KGZsb2F0IHgpCit7CisgICAgcmV0dXJuIHggPCAwID8gMCA6ICh4ID4gMSA/IDEgOiB4KTsKK30K
KwordGVtcGxhdGU8Y29uc3QgaW50IG4+CitpbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0
IHgpCit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG1heCA9IDB4RkZGRkZGRkYgPj4gKDMyIC0g
bik7CisKKyAgICBpZiAoeCA+IDEpCisgICAgeworICAgICAgICByZXR1cm4gbWF4OworICAgIH0K
KyAgICBlbHNlIGlmICh4IDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkobWF4ICogeCArIDAu
NWYpOworICAgIH0KK30KK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCklu
ZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxMCBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gdXRpbGl0aWVzLmNwcDogQ29udmVyc2lvbiBmdW5jdGlv
bnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENv
dW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgICAgcmV0dXJuIDI7
CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAgICAgcmV0dXJuIDk7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6CisgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVu
dW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAg
ICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgICByZXR1cm4gR0xfRkxP
QVQ7CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBj
YXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgICByZXR1
cm4gR0xfSU5UOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
IH0KKworICAgIHJldHVybiBHTF9OT05FOworfQorCitzaXplX3QgVW5pZm9ybVR5cGVTaXplKEdM
ZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9P
TDogIHJldHVybiBzaXplb2YoR0xib29sZWFuKTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVy
biBzaXplb2YoR0xmbG9hdCk7CisgICAgICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdM
aW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gVW5pZm9ybVR5cGVTaXplKFVuaWZvcm1Db21wb25l
bnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKK30KKworaW50IFZh
cmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNl
IEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAg
ICAgIHJldHVybiAxOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4g
MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZh
cmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdM
X0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAg
IHJldHVybiAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50
IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBh
bGxvY2F0aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKQoreworICAgIEFTU0VSVChhbGxv
Y2F0aW9uU2l6ZSA8PSBiaXRzU2l6ZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgPj4gKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6ZGlnaXRzIC0gYWxsb2NhdGlvblNpemUpOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBiaXRzU2l6ZSAtIGFsbG9jYXRpb25TaXplICsgMTsgaSsr
KQorICAgIHsKKyAgICAgICAgaWYgKCgqYml0cyAmIG1hc2spID09IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgICpiaXRzIHw9IG1hc2s7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
fQorCisgICAgICAgIG1hc2sgPDw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitH
THNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgYWxpZ25tZW50KQoreworICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlz
UG93MihhbGlnbm1lbnQpKTsKKworICAgIEdMc2l6ZWkgcmF3UGl0Y2ggPSBDb21wdXRlUGl4ZWxT
aXplKGZvcm1hdCwgdHlwZSkgKiB3aWR0aDsKKyAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25t
ZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOworfQorCisvLyBSZXR1cm5zIHRoZSBzaXplLCBp
biBieXRlcywgb2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKK2ludCBDb21wdXRlUGl4ZWxT
aXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBz
aXplb2YodW5zaWduZWQgY2hhcik7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAg
IHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcik7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6IHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyOworICAgICAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMzsK
KyAgICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25l
ZCBjaGFyKSAqIDQ7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQp
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAg
cmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIHRhcmdl
dCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElzVGV4dHVy
ZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCk7Cit9CisKKy8vIFZlcmlmeSB0
aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMu
NC4KK2Jvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSk7CisKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JH
Qik7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K30KKworbmFtZXNwYWNlIGVzMmR4Cit7CisKK0QzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24o
R0xlbnVtIGNvbXBhcmlzb24pCit7CisgICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FM
V0FZUzsKKyAgICBzd2l0Y2ggKGNvbXBhcmlzb24pCisgICAgeworICAgICAgY2FzZSBHTF9ORVZF
UjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVB
VEVSOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENN
UF9HUkVBVEVSRVFVQUw7IGJyZWFrOworICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9
IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkQ29tcDsKK30KKworRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvciBjb2xvcikKK3sKKyAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5v
cm08OD4oY29sb3IucmVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4o
Y29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xv
ci5ibHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxw
aGEpKTsKK30KKworRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCit7Cisg
ICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOworCisgICAgc3dpdGNoIChibGVu
ZCkKKyAgICB7CisgICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORTog
ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5V
U19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNf
QUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQ
SEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9C
TEVOREZBQ1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9D
T0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBj
YXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVO
REZBQ1RPUjsgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBI
QTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBI
QVNBVDsgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBkM2RCbGVuZDsKK30KKworRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVu
dW0gYmxlbmRPcCkKK3sKKyAgICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FE
RDsKKworICAgIHN3aXRjaCAoYmxlbmRPcCkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZVTkNfQURE
OiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RC
TEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NV
QlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBkM2RCbGVuZE9w
OworfQorCitEM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQor
eworICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKKwor
ICAgIHN3aXRjaCAoc3RlbmNpbE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfWkVSTzogICAgICBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBM
QUNFOyBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RT
VEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3Rl
bmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJyZWFrOworICAgICAgY2FzZSBHTF9JTlZF
UlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKKyAgICAg
IGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX0RFQ1I7ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZDNkU3RlbmNpbE9wOworfQorCitEM0RURVhUVVJFQUREUkVTUyBDb252
ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCit7CisgICAgRDNEVEVYVFVSRUFERFJFU1MgZDNk
V3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7CisKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAg
ICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNE
VEFERFJFU1NfQ0xBTVA7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAg
IGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZDNkV3JhcDsKK30KKworRDNEQ1VMTCBD
b252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQoreworICAg
IEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOworICAgIHN3aXRjaCAoY3VsbEZhY2UpCisgICAg
eworICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JBQ0s6CisgICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENV
TExfQ0NXIDogRDNEQ1VMTF9DVyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9O
VF9BTkRfQkFDSzoKKyAgICAgICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxs
IGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBjdWxsOworfQorCitEV09SRCBDb252
ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEp
Cit7CisgICAgcmV0dXJuIChyZWQgICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEICAgOiAwKSB8
CisgICAgICAgICAgIChncmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gOiAwKSB8Cisg
ICAgICAgICAgIChibHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAwKSB8CisgICAg
ICAgICAgIChhbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgOiAwKTsKK30KKworRDNE
VEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKQorewor
ICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Cisg
ICAgc3dpdGNoIChtYWdGaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOiBkM2RN
YWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjog
IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfTElORUFSOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZE1hZ0ZpbHRlcjsKK30KKwordm9p
ZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBF
ICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpCit7Cisg
ICAgc3dpdGNoIChtaW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAg
ICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQzZE1pcEZpbHRl
ciA9IEQzRFRFWEZfTk9ORTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVBUjoK
KyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICAqZDNkTWlw
RmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9J
TlQ7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgICAqZDNkTWlu
RmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhG
X1BPSU5UOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElO
RUFSOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAgKmQz
ZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhG
X0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhG
X1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOworICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQz
REZPUk1BVCBzdGVuY2lsRm9ybWF0KQoreworICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQorICAg
IHsKKyAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFM4Ogor
ICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6CisgICAgICAgIHJl
dHVybiA0OworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAgIHJldHVybiAxOworICAg
ICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorICAgICAgY2FzZSBEM0RGTVRfRDMyOgorICAg
ICAgY2FzZSBEM0RGTVRfRDI0WDg6CisgICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgor
ICAgICAgY2FzZSBEM0RGTVRfRDE2OgorICAgICAgICByZXR1cm4gMDsKKy8vICAgICAgY2FzZSBE
M0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQorLy8g
ICAgICBjYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlF
eCBvbmx5CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKwordW5zaWduZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQp
Cit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9B
MlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgIGNhc2UgRDNE
Rk1UX1gxUjVHNUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICByZXR1cm4g
MDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCit1bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMlIxMEcx
MEIxMDoKKyAgICAgICAgcmV0dXJuIDEwOworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Cisg
ICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNl
IEQzREZNVF9BMVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgIGNhc2Ug
RDNERk1UX1gxUjVHNUI1OgorICAgICAgICByZXR1cm4gNTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0R3Jl
ZW5TaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICByZXR1cm4g
MTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAg
ICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgorICAgICAgICByZXR1cm4gNjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAxMDsK
KyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
CisgICAgICAgIHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICBj
YXNlIEQzREZNVF9SNUc2QjU6CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAg
cmV0dXJuIDU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3Jt
YXQpCit7CisgICAgc3dpdGNoIChkZXB0aEZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZN
VF9EMTZfTE9DS0FCTEU6ICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9EMzI6ICAgICAg
ICAgICByZXR1cm4gMzI7CisgICAgICBjYXNlIEQzREZNVF9EMTVTMTogICAgICAgICByZXR1cm4g
MTU7CisgICAgICBjYXNlIEQzREZNVF9EMjRTODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBj
YXNlIEQzREZNVF9EMjRYODogICAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9E
MjRYNFM0OiAgICAgICByZXR1cm4gMjQ7CisgICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAg
ICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOiByZXR1cm4gMzI7
CisgICAgICBjYXNlIEQzREZNVF9EMjRGUzg6ICAgICAgICByZXR1cm4gMjQ7CisvLyAgICAgIGNh
c2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBEM0Q5RXggb25seQorLy8g
ICAgICBjYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gMDsgICAgLy8gRDNEOUV4IG9u
bHkKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCitib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVU
eXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQUklNSVRJVkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50
KQoreworICAgIHN3aXRjaCAocHJpbWl0aXZlVHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1BP
SU5UUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9QT0lOVExJU1Q7CisgICAg
ICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50OworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRf
TElORUxJU1Q7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC8g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgICAgKmQz
ZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7CisgICAgICAgICpkM2RQcmltaXRpdmVD
b3VudCA9IHByaW1pdGl2ZUNvdW50OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElO
RV9TVFJJUDoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Cisg
ICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5
cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHBy
aW1pdGl2ZUNvdW50IC8gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xF
X1NUUklQOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7
CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50IC0gMjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgICAgKmQzZFByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUZBTjsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gcHJpbWl0aXZlQ291bnQgLSAyOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRDNE
Rk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBH
TF9SR0I1X0ExOiAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNh
c2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OworICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6
ICAgICAgIHJldHVybiBEM0RGTVRfRDI0Uzg7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgIH0KK30KKworfQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi91
dGlsaXRpZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gdXRpbGl0aWVzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGls
aXR5IHJvdXRpbmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9VVElMSVRJRVNfSAorI2RlZmluZSBM
SUJHTEVTVjJfVVRJTElUSUVTX0gKKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworc3RydWN0
IENvbG9yOworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dMZW51
bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybVR5cGVT
aXplKEdMZW51bSB0eXBlKTsKK2ludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKK2lu
dCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKTsKKworaW50IEFsbG9jYXRlRmlyc3RG
cmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwg
dW5zaWduZWQgaW50IGJpdHNTaXplKTsKKworaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUpOworR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCk7Citib29sIElzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Citib29sIElzVGV4dHVyZVRhcmdldChH
TGVudW0gdGFyZ2V0KTsKK2Jvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSk7CisKK30KKworbmFtZXNwYWNlIGVzMmR4Cit7CisKK0QzRENNUEZVTkMg
Q29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOworRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBi
bGVuZCk7CitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKK0QzRFNU
RU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOworRDNEVEVYVFVSRUFE
RFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKK0QzRENVTEwgQ29udmVydEN1
bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSk7CitEV09SRCBDb252ZXJ0
Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwor
RDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKTsK
K3ZvaWQgQ29udmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVS
VFlQRSAqZDNkTWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKTsK
K3Vuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2ln
bmVkIGludCBHZXRSZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQg
R2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Cit1bnNpZ25lZCBpbnQgR2V0Qmx1
ZVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXREZXB0aFNpemUo
RDNERk9STUFUIGRlcHRoRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RG
T1JNQVQgc3RlbmNpbEZvcm1hdCk7Citib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBw
cmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RQUklNSVRJVkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1p
dGl2ZUNvdW50KTsKK0QzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBm
b3JtYXQpOworCit9CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2MSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHA6IERlZmluZXMgdGhlIEluZGV4
RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAorLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9u
IHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZlcnMuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0
cnkvSW5kZXhEYXRhTWFuYWdlci5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNp
bmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGls
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworbmFtZXNwYWNl
Cit7CisgICAgZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2ICogc2l6ZW9m
KEdMdWludCkgfTsKK30KKworbmFtZXNwYWNlIGdsCit7CisKK0luZGV4RGF0YU1hbmFnZXI6Oklu
ZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCkK
KyAgOiBtQ29udGV4dChjb250ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1JbnRJbmRpY2VzU3Vw
cG9ydGVkKGJhY2tlbmQtPnN1cHBvcnRJbnRJbmRpY2VzKCkpCit7CisgICAgbUNvdW50aW5nQnVm
ZmVyID0gTlVMTDsKKyAgICBtQ291bnRpbmdCdWZmZXJTaXplID0gMDsKKworICAgIG1MaW5lTG9v
cEJ1ZmZlciA9IE5VTEw7CisKKyAgICBtU3RyZWFtQnVmZmVyU2hvcnQgPSBtQmFja2VuZC0+Y3Jl
YXRlSW5kZXhCdWZmZXIoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfU0hP
UlQpOworCisgICAgaWYgKG1JbnRJbmRpY2VzU3VwcG9ydGVkKQorICAgIHsKKyAgICAgICAgbVN0
cmVhbUJ1ZmZlckludCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihJTklUSUFMX0lOREVY
X0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9JTlQpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gTlVMTDsKKyAgICB9Cit9CisKK0luZGV4RGF0YU1h
bmFnZXI6On5JbmRleERhdGFNYW5hZ2VyKCkKK3sKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlclNo
b3J0OworICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVySW50OworICAgIGRlbGV0ZSBtQ291bnRpbmdC
dWZmZXI7CisgICAgZGVsZXRlIG1MaW5lTG9vcEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlCit7CisK
K3RlbXBsYXRlIDxjbGFzcyBJbnB1dEluZGV4VHlwZSwgY2xhc3MgT3V0cHV0SW5kZXhUeXBlPgor
dm9pZCBjb3B5SW5kaWNlcyhjb25zdCBJbnB1dEluZGV4VHlwZSAqaW4sIEdMc2l6ZWkgY291bnQs
IE91dHB1dEluZGV4VHlwZSAqb3V0LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4
KQoreworICAgIElucHV0SW5kZXhUeXBlIGZpcnN0ID0gKmluOworICAgIEdMdWludCBtaW5JbmRl
eFNvRmFyID0gZmlyc3Q7CisgICAgR0x1aW50IG1heEluZGV4U29GYXIgPSBmaXJzdDsKKworICAg
IGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAo
bWluSW5kZXhTb0ZhciA+ICppbikgbWluSW5kZXhTb0ZhciA9ICppbjsKKyAgICAgICAgaWYgKG1h
eEluZGV4U29GYXIgPCAqaW4pIG1heEluZGV4U29GYXIgPSAqaW47CisKKyAgICAgICAgKm91dCsr
ID0gKmluKys7CisgICAgfQorCisgICAgLy8gSXQgbWlnaHQgYmUgYSBsaW5lIGxvb3AsIHNvIGNv
cHkgdGhlIGxvb3AgaW5kZXguCisgICAgKm91dCA9IGZpcnN0OworCisgICAgKm1pbkluZGV4ID0g
bWluSW5kZXhTb0ZhcjsKKyAgICAqbWF4SW5kZXggPSBtYXhJbmRleFNvRmFyOworfQorCit9CisK
K0dMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBj
b25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQorewor
ICAgIEFTU0VSVCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdO
RURfQllURSB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7CisgICAgQVNTRVJUKGNvdW50ID4g
MCk7CisKKyAgICBpZiAoYXJyYXlFbGVtZW50QnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAg
ICBHTHNpemVpIG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaXplaT4oaW5kaWNlcyk7CisK
KyAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBvZmZzZXQgPiBzdGF0aWNfY2Fz
dDxzdGQ6OnNpemVfdD4oYXJyYXlFbGVtZW50QnVmZmVyLT5zaXplKCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIH0KKworICAg
ICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGFycmF5RWxlbWVudEJ1
ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKKyAgICB9CisKKyAgICB0cmFuc2xhdGVkLT5jb3VudCA9
IGNvdW50OworCisgICAgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9IHNwYWNlUmVxdWlyZWQo
dHlwZSwgY291bnQpOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHBy
ZXBhcmVJbmRleEJ1ZmZlcih0eXBlLCByZXF1aXJlZFNwYWNlKTsKKworICAgIHNpemVfdCBvZmZz
ZXQ7CisgICAgdm9pZCAqb3V0cHV0ID0gc3RyZWFtSWItPm1hcChyZXF1aXJlZFNwYWNlLCAmb2Zm
c2V0KTsKKworICAgIHRyYW5zbGF0ZWQtPmJ1ZmZlciA9IHN0cmVhbUliOworICAgIHRyYW5zbGF0
ZWQtPm9mZnNldCA9IG9mZnNldDsKKyAgICB0cmFuc2xhdGVkLT5pbmRleFNpemUgPSBpbmRleFNp
emUodHlwZSk7CisKKyAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIHsKKyAg
ICAgICAgY29uc3QgR0x1Ynl0ZSAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5k
aWNlcyk7CisgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91
dHB1dCk7CisKKyAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVk
LT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBjb25zdCBHTHVpbnQgKmlu
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcyk7CisKKyAgICAgICAgaWYgKG1J
bnRJbmRpY2VzU3VwcG9ydGVkKQorICAgICAgICB7CisgICAgICAgICAgICBHTHVpbnQgKm91dCA9
IHN0YXRpY19jYXN0PEdMdWludCo+KG91dHB1dCk7CisKKyAgICAgICAgICAgIGNvcHlJbmRpY2Vz
KGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJ
bmRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBXaGVuIDMyLWJpdCBpbmRpY2VzIGFyZSB1bnN1cHBvcnRlZCwgZmFrZSB0aGVtIGJ5IHRydW5j
YXRpbmcgdG8gMTYtYml0LgorCisgICAgICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nh
c3Q8R0x1c2hvcnQqPihvdXRwdXQpOworCisgICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291
bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdXNob3J0
ICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyk7CisgICAgICAgIEdM
dXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAg
Y29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5z
bGF0ZWQtPm1heEluZGV4KTsKKyAgICB9CisKKyAgICBzdHJlYW1JYi0+dW5tYXAoKTsKKworICAg
IHJldHVybiBHTF9OT19FUlJPUjsKK30KKworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6
aW5kZXhTaXplKEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQgJiYgbUludEluZGljZXNTdXBwb3J0ZWQpID8gc2l6ZW9mKEdMdWludCkgOiBz
aXplb2YoR0x1c2hvcnQpOworfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBl
U2l6ZShHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6IHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBzaXplb2YoR0x1c2hvcnQpOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJu
IHNpemVvZihHTHVieXRlKTsKKyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFn
ZXI6OnNwYWNlUmVxdWlyZWQoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChjb3VudCArIDEpICogaW5kZXhTaXplKHR5cGUpOyAvLyArMSBiZWNhdXNlIHdl
IGFsd2F5cyBsZWF2ZSBhbiBleHRyYSBmb3IgbGluZSBsb29wcworfQorCitUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIgKkluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleEJ1ZmZlcihHTGVudW0gdHlw
ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBib29sIHVzZTMyID0gKHR5cGUg
PT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKTsKKworICAgIFRyYW5z
bGF0ZWRJbmRleEJ1ZmZlciAqc3RyZWFtSWIgPSB1c2UzMiA/IG1TdHJlYW1CdWZmZXJJbnQgOiBt
U3RyZWFtQnVmZmVyU2hvcnQ7CisKKyAgICBpZiAocmVxdWlyZWRTcGFjZSA+IHN0cmVhbUliLT5z
aXplKCkpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBuZXdTaXplID0gc3RkOjptYXgocmVx
dWlyZWRTcGFjZSwgMiAqIHN0cmVhbUliLT5zaXplKCkpOworCisgICAgICAgIFRyYW5zbGF0ZWRJ
bmRleEJ1ZmZlciAqbmV3U3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVy
KG5ld1NpemUsIHVzZTMyID8gR0xfVU5TSUdORURfSU5UIDogR0xfVU5TSUdORURfU0hPUlQpOwor
CisgICAgICAgIGRlbGV0ZSBzdHJlYW1JYjsKKworICAgICAgICBzdHJlYW1JYiA9IG5ld1N0cmVh
bUJ1ZmZlcjsKKworICAgICAgICBpZiAodXNlMzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
dHJlYW1CdWZmZXJJbnQgPSBzdHJlYW1JYjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1TdHJlYW1CdWZmZXJTaG9ydCA9IHN0cmVhbUliOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RyZWFtSWItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNlKTsK
KworICAgIHJldHVybiBzdHJlYW1JYjsKK30KKworR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnBy
ZVJlbmRlclZhbGlkYXRlVW5pbmRleGVkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFu
c2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCit7CisgICAgaWYgKGNvdW50ID49IDY1NTM1KSBy
ZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKKworICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkK
KyAgICB7CisgICAgICAgIC8vIEZvciBsaW5lIGxvb3BzLCBjcmVhdGUgYSBzaW5nbGUtdXNlIGJ1
ZmZlciB0aGF0IHJ1bnMgMCAtIGNvdW50LTEsIDAuCisgICAgICAgIGRlbGV0ZSBtTGluZUxvb3BC
dWZmZXI7CisgICAgICAgIG1MaW5lTG9vcEJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1
ZmZlcigoY291bnQrMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9S
VCk7CisKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydCAqPihtTGluZUxvb3BCdWZmZXItPm1hcCgpKTsKKworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljZXNb
aV0gPSBpOworICAgICAgICB9CisKKyAgICAgICAgaW5kaWNlc1tjb3VudF0gPSAwOworCisgICAg
ICAgIG1MaW5lTG9vcEJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICBpbmRleEluZm8tPmJ1ZmZl
ciA9IG1MaW5lTG9vcEJ1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50ICsg
MTsKKyAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobUNvdW50aW5nQnVmZmVyU2l6ZSA8IGNvdW50KQorICAgIHsKKyAgICAgICAgbUNv
dW50aW5nQnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PEdMc2l6ZWk+KGNlaWxQb3cy
KGNvdW50KSksIG1Db3VudGluZ0J1ZmZlclNpemUqMik7CisKKyAgICAgICAgZGVsZXRlIG1Db3Vu
dGluZ0J1ZmZlcjsKKyAgICAgICAgbUNvdW50aW5nQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUlu
ZGV4QnVmZmVyKGNvdW50ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgR0xfVU5TSUdORURfU0hP
UlQpOworCisgICAgICAgIHVuc2lnbmVkIHNob3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQgKj4obUNvdW50aW5nQnVmZmVyLT5tYXAoKSk7CisKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRpY2Vz
W2ldID0gaTsKKyAgICAgICAgfQorCisgICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsK
KworICAgICAgICBpbmRleEluZm8tPmJ1ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAg
aW5kZXhJbmZvLT5jb3VudCA9IGNvdW50OworICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0g
Y291bnQgLSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbmRleEluZm8tPmJ1
ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKKyAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50
OworICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKworICAg
IGluZGV4SW5mby0+aW5kZXhTaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICBpbmRl
eEluZm8tPm1pbkluZGV4ID0gMDsKKyAgICBpbmRleEluZm8tPm9mZnNldCA9IDA7CisKKyAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2Vv
bWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L0luZGV4RGF0YU1h
bmFnZXIuaDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0CisvLyBy
dW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfR0VPTUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXworI2RlZmluZSBM
SUJHTEVTVjJfR0VPTUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXworCisjaW5jbHVkZSA8Yml0c2V0
PgorI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNl
IGdsCit7CisKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIEJ1ZmZlckJhY2tFbmQ7CitjbGFzcyBUcmFu
c2xhdGVkSW5kZXhCdWZmZXI7CitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyOworCitzdHJ1Y3QgVHJh
bnNsYXRlZEluZGV4RGF0YQoreworICAgIEdMdWludCBtaW5JbmRleDsKKyAgICBHTHVpbnQgbWF4
SW5kZXg7CisgICAgR0x1aW50IGNvdW50OworICAgIEdMdWludCBpbmRleFNpemU7CisKKyAgICBU
cmFuc2xhdGVkSW5kZXhCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHTHNpemVpIG9mZnNldDsKK307CisK
K2NsYXNzIEluZGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVibGljOgorICAgIEluZGV4RGF0YU1hbmFn
ZXIoQ29udGV4dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCk7CisgICAgfkluZGV4
RGF0YU1hbmFnZXIoKTsKKworICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9k
ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVy
LCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsK
KyAgICBHTGVudW0gcHJlUmVuZGVyVmFsaWRhdGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisKKyAgcHJpdmF0ZToK
KyAgICBzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkg
Y29uc3Q7CisgICAgc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKEdMZW51
bSB0eXBlKSBjb25zdDsKKyAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKEdMZW51bSB0eXBl
LCBHTHNpemVpIGNvdW50KSBjb25zdDsKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnByZXBh
cmVJbmRleEJ1ZmZlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSk7CisK
KyAgICBDb250ZXh0ICptQ29udGV4dDsKKyAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKwor
ICAgIGJvb2wgbUludEluZGljZXNTdXBwb3J0ZWQ7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZm
ZXIgKm1TdHJlYW1CdWZmZXJTaG9ydDsKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1TdHJl
YW1CdWZmZXJJbnQ7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm1Db3VudGluZ0J1ZmZl
cjsKKyAgICBHTHNpemVpIG1Db3VudGluZ0J1ZmZlclNpemU7CisKKyAgICBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIgKm1MaW5lTG9vcEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xF
U1YyX0dFT01FVFJZX0lOREVYREFUQU1BTkFHRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjcxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9t
ZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwg
YSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorCisjaW5j
bHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKworbmFtZXNwYWNlCit7CisgICAgZW51bSB7
IElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFID0gMTAyNCoxMDI0IH07Cit9CisKK25hbWVzcGFj
ZSBnbAoreworCitWZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAq
Y29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2VuZCkKKyAgICA6IG1Db250ZXh0KGNvbnRleHQp
LCBtQmFja2VuZChiYWNrZW5kKSwgbURpcnR5Q3VycmVudFZhbHVlcyh0cnVlKSwgbUN1cnJlbnRW
YWx1ZU9mZnNldCgwKQoreworICAgIG1TdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVy
dGV4QnVmZmVyKElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFKTsKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVy
Rm9yU3RyaWRlWmVybyg0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUyk7Cisg
ICAgfQorICAgIGNhdGNoICguLi4pCisgICAgeworICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZl
cjsKKyAgICAgICAgdGhyb3c7CisgICAgfQorfQorCitWZXJ0ZXhEYXRhTWFuYWdlcjo6flZlcnRl
eERhdGFNYW5hZ2VyKCkKK3sKKyAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICBkZWxldGUg
bUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKK30KKworc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJT
PiBWZXJ0ZXhEYXRhTWFuYWdlcjo6Z2V0QWN0aXZlQXR0cmlicygpIGNvbnN0Cit7CisgICAgc3Rk
OjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBhY3RpdmU7CisKKyAgICBQcm9ncmFtICpwcm9n
cmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBmb3IgKGludCBhdHRy
aWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgYWN0aXZlW2F0dHJpYnV0ZUluZGV4XSA9IChw
cm9ncmFtLT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgfQor
CisgICAgcmV0dXJuIGFjdGl2ZTsKK30KKworR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVS
ZW5kZXJWYWxpZGF0ZShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNs
YXRlZCkKK3sKKyAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmlicyA9IG1Db250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJCbG9jaygpOworICAgIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhf
QVRUUklCUz4gYWN0aXZlQXR0cmlicyA9IGdldEFjdGl2ZUF0dHJpYnMoKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBp
ZiAoIWFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0cmlic1tpXS5tRW5hYmxlZCAmJiBhdHRyaWJzW2ld
Lm1Cb3VuZEJ1ZmZlciAhPSAwICYmICFtQ29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJv
dW5kQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAg
ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgdHJhbnNsYXRlZFtpXS5lbmFibGVkID0gYWN0aXZlQXR0cmlic1tpXTsK
KyAgICB9CisKKyAgICBib29sIHVzZXNDdXJyZW50VmFsdWVzID0gZmFsc2U7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAg
aWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgIWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVzZXNDdXJyZW50VmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIHRoZSBpZGVudGl0eS1tYXBwZWQg
YXR0cmlidXRlcy4KKyAgICAvLyBQcm9jZXNzIGFycmF5IGF0dHJpYnV0ZXMuCisKKyAgICBzdGQ6
OnNpemVfdCByZXF1aXJlZFNwYWNlID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tp
XSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXF1aXJl
ZFNwYWNlICs9IHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtU3RyZWFtQnVmZmVyLT5zaXplKCkpCisg
ICAgeworICAgICAgICBzdGQ6OnNpemVfdCBuZXdTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFj
ZSwgMyAqIG1TdHJlYW1CdWZmZXItPnNpemUoKSAvIDIpOyAvLyAxLjUgeCBtU3RyZWFtQnVmZmVy
LT5zaXplKCkgaXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgYmUgY2hlY2tlZCB0byBzZWUgd2UgZG9u
J3QgaGF2ZSB0b28gbWFueSByZWFsbG9jYXRpb25zLgorCisgICAgICAgIFRyYW5zbGF0ZWRWZXJ0
ZXhCdWZmZXIgKm5ld1N0cmVhbUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXIo
bmV3U2l6ZSk7CisKKyAgICAgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7CisgICAgICAgIG1TdHJl
YW1CdWZmZXIgPSBuZXdTdHJlYW1CdWZmZXI7CisgICAgfQorCisgICAgbVN0cmVhbUJ1ZmZlci0+
cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRy
aWJzW2ldICYmIGF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
cm1hdENvbnZlcnRlciBmb3JtYXRDb252ZXJ0ZXIgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVy
dGVyKGF0dHJpYnNbaV0ubVR5cGUsIGF0dHJpYnNbaV0ubVNpemUsIGF0dHJpYnNbaV0ubU5vcm1h
bGl6ZWQpOworCisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vbkFycmF5ID0gZmFsc2U7Cisg
ICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBhdHRyaWJzW2ldLm1UeXBlOworICAgICAg
ICAgICAgdHJhbnNsYXRlZFtpXS5zaXplID0gYXR0cmlic1tpXS5tU2l6ZTsKKyAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0ubm9ybWFsaXplZCA9IGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQ7CisgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IGZvcm1hdENvbnZlcnRlci5vdXRwdXRWZXJ0
ZXhTaXplOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIgPSBtU3RyZWFtQnVmZmVy
OworCisgICAgICAgICAgICBzaXplX3QgaW5wdXRTdHJpZGUgPSBpbnRlcnByZXRHbFN0cmlkZShh
dHRyaWJzW2ldKTsKKyAgICAgICAgICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IHR5cGVTaXplKGF0
dHJpYnNbaV0ubVR5cGUpICogYXR0cmlic1tpXS5tU2l6ZTsKKworICAgICAgICAgICAgdm9pZCAq
b3V0cHV0ID0gbVN0cmVhbUJ1ZmZlci0+bWFwKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291
bnQpLCAmdHJhbnNsYXRlZFtpXS5vZmZzZXQpOworCisgICAgICAgICAgICBjb25zdCB2b2lkICpp
bnB1dDsKKyAgICAgICAgICAgIGlmIChhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9IG1Db250ZXh0LT5nZXRCdWZm
ZXIoYXR0cmlic1tpXS5tQm91bmRCdWZmZXIpOworCisgICAgICAgICAgICAgICAgc2l6ZV90IG9m
ZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihhdHRyaWJzW2ldLm1Qb2ludGVyKTsKKwor
ICAgICAgICAgICAgICAgIC8vIEJlZm9yZSB3ZSBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHNpemUg
YmVsb3csIG1ha2Ugc3VyZSBpdCBjYW4gYmUgY29tcHV0ZWQgd2l0aG91dCBpbnRlZ2VyIG92ZXJm
bG93LgorICAgICAgICAgICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90
Pjo6bWF4KCkgLSBzdGFydCA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pihjb3VudCkKKyAgICAg
ICAgICAgICAgICAgICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgp
IC8gaW5wdXRTdHJpZGUgPCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc3RhcnQgKyBjb3VudCAt
IDEpIC8vIGl0J3MgYSBwcmVyZXF1aXNpdGUgdGhhdCBjb3VudCA+PSAxLCBzbyBzdGFydCtjb3Vu
dC0xID49IDAuCisgICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3Rk
OjpzaXplX3Q+OjptYXgoKSAtIG9mZnNldCA8IGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQg
LSAxKQorICAgICAgICAgICAgICAgICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6
ZV90Pjo6bWF4KCkgLSBlbGVtZW50U2l6ZSA8IG9mZnNldCArIGlucHV0U3RyaWRlICogKHN0YXJ0
ICsgY291bnQgLSAxKSArIGVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkg
KyBlbGVtZW50U2l6ZSA+IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci0+ZGF0
YSgpKSArIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IGF0dHJpYnNbaV0ubVBvaW50ZXI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGlucHV0KSArIGlucHV0U3RyaWRlICogc3RhcnQ7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXRD
b252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogaW5w
dXRTdHJpZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvcm1hdENvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlu
cHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1c2Vz
Q3VycmVudFZhbHVlcykKKyAgICB7CisgICAgICAgIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMo
YXR0cmlicywgYWN0aXZlQXR0cmlicywgdHJhbnNsYXRlZCwgY291bnQpOworICAgIH0KKworICAg
IHJldHVybiBHTF9OT19FUlJPUjsKK30KKworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6
OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0JZVEU6IGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIHNpemVv
ZihHTGJ5dGUpOworICAgICAgY2FzZSBHTF9TSE9SVDogY2FzZSBHTF9VTlNJR05FRF9TSE9SVDog
cmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiBzaXpl
b2YoR0xmaXhlZCk7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQp
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsK
KyAgICB9Cit9CisKK3N0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjppbnRlcnByZXRHbFN0
cmlkZShjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliKSBjb25zdAoreworICAgIHJldHVybiBh
dHRyaWIubVN0cmlkZSA/IGF0dHJpYi5tU3RyaWRlIDogdHlwZVNpemUoYXR0cmliLm1UeXBlKSAq
IGF0dHJpYi5tU2l6ZTsKK30KKworLy8gUm91bmQgdXAgeCAoPj0wKSB0byB0aGUgbmV4dCBtdWx0
aXBsZSBvZiBtdWx0aXBsZSAoPjApLgorLy8gMCByb3VuZHMgdXAgdG8gMC4KK3N0ZDo6c2l6ZV90
IFZlcnRleERhdGFNYW5hZ2VyOjpyb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6ZV90IG11
bHRpcGxlKSBjb25zdAoreworICAgIEFTU0VSVCh4ID49IDApOworICAgIEFTU0VSVChtdWx0aXBs
ZSA+IDApOworCisgICAgc3RkOjpzaXplX3QgcmVtYWluZGVyID0geCAlIG11bHRpcGxlOworICAg
IGlmIChyZW1haW5kZXIgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB4ICsgbXVsdGlwbGUg
LSByZW1haW5kZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB4Owor
ICAgIH0KK30KKworc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQo
Y29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVydGV4KSBjb25z
dAoreworICAgIHN0ZDo6c2l6ZV90IHNpemUgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVy
KGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIubU5vcm1hbGl6ZWQpLm91dHB1dFZl
cnRleFNpemU7CisgICAgc2l6ZSAqPSBtYXhWZXJ0ZXg7CisKKyAgICByZXR1cm4gcm91bmRVcChz
aXplLCA0ICogc2l6ZW9mKEdMZmxvYXQpKTsKK30KKwordm9pZCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
cHJvY2Vzc05vbkFycmF5QXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmlicywg
Y29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiAmYWN0aXZlQXR0cmlicywgVHJh
bnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgc3RkOjpzaXplX3QgY291bnQpCit7CisgICAg
aWYgKG1EaXJ0eUN1cnJlbnRWYWx1ZXMpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCB0b3Rh
bFNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUzsKKworICAgICAg
ICBtQ3VycmVudFZhbHVlQnVmZmVyLT5yZXNlcnZlU3BhY2UodG90YWxTaXplKTsKKworICAgICAg
ICBmbG9hdCogY3VycmVudFZhbHVlcyA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obUN1cnJlbnRWYWx1
ZUJ1ZmZlci0+bWFwKHRvdGFsU2l6ZSwgJm1DdXJyZW50VmFsdWVPZmZzZXQpKTsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgR0xfRkxPQVR4NCBpcyBzdXBw
b3J0ZWQgYnkgdGhlIGJhY2stZW5kLiAoRm9yIEQzRDksIGl0IGlzIGEgbWFuZGF0b3J5IGZvcm1h
dC4pCisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCswXSA9IGF0dHJpYnNbaV0ubUN1cnJl
bnRWYWx1ZVswXTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzFdID0gYXR0cmlic1tp
XS5tQ3VycmVudFZhbHVlWzFdOworICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMl0gPSBh
dHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kq
NCszXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVszXTsKKyAgICAgICAgfQorCisgICAgICAg
IG1DdXJyZW50VmFsdWVCdWZmZXItPnVubWFwKCk7CisgICAgfQorCisgICAgZm9yIChzdGQ6OnNp
emVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAg
aWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgIWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkgPSB0cnVlOworCisgICAgICAgICAg
ICB0cmFuc2xhdGVkW2ldLmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXI7CisKKyAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IEdMX0ZMT0FUOworICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5zaXplID0gNDsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9ybWFsaXplZCA9IGZh
bHNlOworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSAwOworICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0ICsgNCAqIHNpemVvZihm
bG9hdCkgKiBpOworICAgICAgICB9CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRy
eS9WZXJ0ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBj
bGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KKworI2lm
bmRlZiBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYREFUQU1BTkFHRVJfSF8KKyNkZWZpbmUgTElC
R0xFU1YyX0dFT01FVFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQ+
CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
Z2wKK3sKKworY2xhc3MgQnVmZmVyOworY2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIFRyYW5z
bGF0ZWRWZXJ0ZXhCdWZmZXI7CitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK3N0cnVjdCBG
b3JtYXRDb252ZXJ0ZXI7CitzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKKworY2xhc3MgVmVy
dGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVibGljOgorICAgIFZlcnRleERhdGFNYW5hZ2VyKENvbnRl
eHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpOworICAgIH5WZXJ0ZXhEYXRhTWFu
YWdlcigpOworCisgICAgdm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZXMoKSB7IG1EaXJ0eUN1cnJlbnRW
YWx1ZXMgPSB0cnVlOyB9CisKKyAgICBHTGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMpOwor
CisgIHByaXZhdGU6CisgICAgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBnZXRBY3Rp
dmVBdHRyaWJzKCkgY29uc3Q7CisKKyAgICB2b2lkIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMo
Y29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJpYnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJU
RVhfQVRUUklCUz4gJmFjdGl2ZUF0dHJpYnMsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0
ZWQsIHN0ZDo6c2l6ZV90IGNvdW50KTsKKworICAgIHN0ZDo6c2l6ZV90IHR5cGVTaXplKEdMZW51
bSB0eXBlKSBjb25zdDsKKyAgICBzdGQ6OnNpemVfdCBpbnRlcnByZXRHbFN0cmlkZShjb25zdCBB
dHRyaWJ1dGVTdGF0ZSAmYXR0cmliKSBjb25zdDsKKworICAgIHN0ZDo6c2l6ZV90IHJvdW5kVXAo
c3RkOjpzaXplX3QgeCwgc3RkOjpzaXplX3QgbXVsdGlwbGUpIGNvbnN0OworICAgIHN0ZDo6c2l6
ZV90IHNwYWNlUmVxdWlyZWQoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYiwgc3RkOjpzaXpl
X3QgbWF4VmVydGV4KSBjb25zdDsKKworICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIEJ1ZmZl
ckJhY2tFbmQgKm1CYWNrZW5kOworCisgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqbVN0cmVh
bUJ1ZmZlcjsKKworICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlczsKKyAgICBzdGQ6OnNpemVf
dCBtQ3VycmVudFZhbHVlT2Zmc2V0OyAgICAgICAgICAgIC8vIE9mZnNldCB3aXRoaW4gbUN1cnJl
bnRWYWx1ZUJ1ZmZlciB0aGF0IHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB2YWx1ZXMgd2VyZSBsYXN0
IGxvYWRlZCBhdC4KKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVm
ZmVyOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYREFU
QU1BTkFHRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNw
cAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGdlb21ldHJ5L2JhY2tlbmQuaDogQWJzdHJhY3QgY2xhc3NlcyBCdWZmZXJCYWNrRW5kLCBUcmFu
c2xhdGVkVmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIKKy8vIHRoYXQgbXVz
dCBiZSBpbXBsZW1lbnRlZCBieSBhbnkgQVBJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEFO
R0xFLgorCisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCAqVHJhbnNsYXRl
ZEJ1ZmZlcjo6bWFwKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZz
ZXQpCit7CisgICAgQVNTRVJUKHJlcXVpcmVkU3BhY2UgPD0gbUJ1ZmZlclNpemUpOworCisgICAg
cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgKm9mZnNldCA9IG1DdXJyZW50UG9p
bnQ7CisgICAgbUN1cnJlbnRQb2ludCArPSByZXF1aXJlZFNwYWNlOworCisgICAgcmV0dXJuIHN0
cmVhbWluZ01hcCgqb2Zmc2V0LCByZXF1aXJlZFNwYWNlKTsKK30KKwordm9pZCBUcmFuc2xhdGVk
QnVmZmVyOjpyZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBp
ZiAobUN1cnJlbnRQb2ludCArIHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKKyAgICB7Cisg
ICAgICAgIHJlY3ljbGUoKTsKKyAgICAgICAgbUN1cnJlbnRQb2ludCA9IDA7CisgICAgfQorfQor
Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvYmFj
a2VuZC5oOiBBYnN0cmFjdCBjbGFzc2VzIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhC
dWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgorLy8gdGhhdCBtdXN0IGJlIGltcGxlbWVu
dGVkIGJ5IGFueSBBUEktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgQU5HTEUuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01F
VFJZX0JBQ0tFTkRfSF8KKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOworY2xh
c3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyOworCitzdHJ1Y3QgRm9ybWF0Q29udmVydGVyCit7Cisg
ICAgYm9vbCBpZGVudGl0eTsKKyAgICBzdGQ6OnNpemVfdCBvdXRwdXRWZXJ0ZXhTaXplOworICAg
IHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUs
IHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Cit9OworCitzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJp
YnV0ZQoreworICAgIGJvb2wgZW5hYmxlZDsKKyAgICBib29sIG5vbkFycmF5OworCisgICAgLy8g
VGhlc2UgYXJlIHRoZSBvcmlnaW5hbCB1bnRyYW5zbGF0ZWQgdmFsdWVzLiAoT3IganVzdCBoYXZl
IHNvbWUgc29ydCBvZiBCdWZmZXJCYWNrRW5kOjpUcmFuc2xhdGVkVHlwZUtleS4pCisgICAgR0xl
bnVtIHR5cGU7CisgICAgc3RkOjpzaXplX3Qgc2l6ZTsKKyAgICBib29sIG5vcm1hbGl6ZWQ7CisK
KyAgICBzdGQ6OnNpemVfdCBvZmZzZXQ7CisKKyAgICBzdGQ6OnNpemVfdCBzdHJpZGU7IC8vIDAg
bWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRlciBhdCBhbGwKKworICAgIHN0ZDo6
c2l6ZV90IHNlbWFudGljSW5kZXg7CisKKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpidWZm
ZXI7Cit9OworCitjbGFzcyBCdWZmZXJCYWNrRW5kCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFs
IH5CdWZmZXJCYWNrRW5kKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydEludEluZGlj
ZXMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZl
cnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBUcmFuc2xhdGVk
VmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6ZV90
IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqY3JlYXRlSW5k
ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpID0gMDsKKyAgICB2aXJ0dWFs
IEZvcm1hdENvbnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6
ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKSA9IDA7CisKKyAgICAvLyBGb3IgYW4gaWRlbnRpdHkt
bWFwcGFibGUgc3RyZWFtLCB2ZXJpZnkgdGhhdCB0aGUgc3RyaWRlIGFuZCBvZmZzZXQgYXJlIG9r
YXkuCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlU3RyZWFtKEdMZW51bSB0eXBlLCBzdGQ6OnNp
emVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9mZnNldCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFu
c2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1
cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMp
ID0gMDsKK307CisKK2NsYXNzIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4
cGxpY2l0IFRyYW5zbGF0ZWRCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBtQnVmZmVyU2l6ZShz
aXplKSwgbUN1cnJlbnRQb2ludCgwKSB7IH0KKyAgICB2aXJ0dWFsIH5UcmFuc2xhdGVkQnVmZmVy
KCkgeyB9CisKKyAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNp
emU7IH0KKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1
bm1hcCgpID0gMDsKKworICAgIHZvaWQgcmVzZXJ2ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVk
U3BhY2UpOworCisgICAgdm9pZCAqbWFwKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6
c2l6ZV90ICpvZmZzZXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVjeWNs
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZz
ZXQsIHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6c2l6ZV90
IG1CdWZmZXJTaXplOworICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50UG9pbnQ7CisKKyAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVHJhbnNsYXRlZEJ1ZmZlcik7Cit9OworCitjbGFzcyBUcmFu
c2xhdGVkVmVydGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGlj
OgorICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkg
OiBUcmFuc2xhdGVkQnVmZmVyKHNpemUpIHsgfQorfTsKKworY2xhc3MgVHJhbnNsYXRlZEluZGV4
QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IFRyYW5zbGF0ZWRC
dWZmZXIoc2l6ZSkgeyB9Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRS
WV9CQUNLRU5EX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYxMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkv
ZHg5Lmg6IERpcmVjdDNEIDktYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwg
VHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyLgorCisjaW5j
bHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oIgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKwor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4
Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5h
Z2VyLmgiCisKK25hbWVzcGFjZQoreworLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXgg
YXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKKy8vCisvLyBCWVRFICAgICAgICAgICAgICAg
ICBTSE9SVCAoQ2FzdCkKKy8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUp
IChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCisvLyBVTlNJR05F
RF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKKy8vIFVOU0lH
TkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQor
Ly8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQorLy8gU0hPUlQtbm9ybSAg
ICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBV
TlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKKy8vIFVOU0lHTkVEX1NIT1JULW5vcm0g
IFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIEZJWEVEIChu
b3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCisvLyBGTE9BVCAgICAgICAgICAgICAg
ICBGTE9BVCAoSWRlbnRpdHkpCisKKy8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMg
R0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLiAKK3RlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1
Y3QgR0xUb0NUeXBlIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRF
PiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVm
IEdMdXNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVE
PiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OworCisvLyBUaGlzIGRpZmZlcnMg
ZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBp
cyBhcHBsaWVkIGxhc3QuKQorZW51bSBEM0RWZXJ0ZXhUeXBlCit7CisgICAgRDNEVlRfRkxPQVQs
CisgICAgRDNEVlRfU0hPUlQsCisgICAgRDNEVlRfU0hPUlRfTk9STSwKKyAgICBEM0RWVF9VQllU
RSwKKyAgICBEM0RWVF9VQllURV9OT1JNLAorICAgIEQzRFZUX1VTSE9SVF9OT1JNCit9OworCisv
LyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4
VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgordGVtcGxhdGUgPHVuc2lnbmVkIGlu
dCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBE
M0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKK3RlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlw
ZWRlZiBzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRf
VUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0
eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+
IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OworCisvLyBFbmNvZGUgdGhlIHR5cGUv
c2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0
IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBm
aW5hbCBzaXplLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4KK3N0cnVj
dCBXaWRlblJ1bGUKK3sKK307CisKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxzaXplPiB7IH07Cit0
ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAg
ICAgICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4g
c3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBnbDo6V2lkZW5U
b0V2ZW48c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQz
RFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0
ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6
ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4g
c3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBnbDo6V2lkZW5U
b0V2ZW48c2l6ZT4geyB9OworCisvLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQ
Uzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQz
RCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50
IGQzZHR5cGUsIGludCBzaXplPgorc3RydWN0IFZlcnRleFR5cGVGbGFncworeworfTsKKwordGVt
cGxhdGUgPHVuc2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVjbGZsYWc+CitzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCit7CisgICAgZW51bSB7IGNhcGZsYWcgPSBjYXBmbGFn
IH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKK307CisKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQ
RV9GTE9BVDM+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
RkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JU
NE4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUs
IDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBF
X1VCWVRFND4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9V
QllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0Tiwg
RDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9Owor
CisKKy8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0
byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5
cGUgZW51bXMpLgordGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4KK3N0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZworeworfTsKKwordGVtcGxhdGUgPEQzRFZlcnRleFR5cGUg
UHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgorc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nQmFzZQoreworICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQg
fTsKKyAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OworfTsKKwordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBp
bmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFw
cGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1h
bGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZ
VEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VC
WVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAordGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAg
ICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQz
RFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAg
ICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElkZW50aXR5Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENh
c3QsIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VO
U0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNl
PEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAg
ICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQz
RFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQordGVtcGxhdGUgPGJvb2wgbm9y
bWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaXhlZFRvRmxvYXQKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRl
bnRpdHkKKworCisvLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUs
IENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwg
Tm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KKy8vIFRoZSBjb252ZXJzaW9uIHJ1
bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgorCisvLyBB
bG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0
IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVu
dGl0eSBtYXBwaW5nKS4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXpl
ZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KK3N0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0
PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8
dG9UeXBlPjo6dHlwZT4KK3sKK307CisKKy8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6
ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3IuCit0ZW1wbGF0ZSA8
R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQz
RFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6
dHlwZT4geyB9OworCisvLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRo
YXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxp
emUtdG8tZmxvYXQgcnVsZXMuCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xf
RklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4g
eyB9OwordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07CisKKy8vIEEg
Mi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVsdFZlcnRleFZhbHVlcyBiZWNh
dXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMgKGkuZS4gMC8xKQorLy8gd2hl
dGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KK3RlbXBsYXRlIDxjbGFzcyBULCBib29sIG5v
cm1hbGl6ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMgoreworfTsKKwordGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIHRydWU+
ICA6IGdsOjpOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Cit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogZ2w6OlNpbXBs
ZURlZmF1bHRWYWx1ZXM8VD4geyB9OworCisvLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBy
dWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kIAordGVtcGxh
dGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KK3N0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
IDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVkPgoreworfTsKKwordGVt
cGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQs
IG5vcm1hbGl6ZWQ+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKKworLy8g
UG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRv
IHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCisvLyBUaGUgZmFsbGJh
Y2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11
c3Qgc3VwcG9ydC4KK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51
bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
VXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07CisKKy8vIENvbnZl
cnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXpl
IGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCisvLyBpdCBwcm92
aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0
ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKKy8vIGFuZCB0aGUg
RDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBk
ZWNsZmxhZy4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50
IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KK3N0cnVjdCBD
b252ZXJ0ZXIKKyAgICA6IGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlw
ZTxmcm9tVHlwZT46OnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1
bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlLCBzaXplPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNp
b25SdWxlPGZyb21UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVy
dGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVN
YXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+
ID4KK3sKK3ByaXZhdGU6CisgICAgZW51bSB7IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVy
dGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUgfTsKKyAgICBlbnVt
IHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OworCitw
dWJsaWM6CisgICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNk
c2l6ZT46OmNhcGZsYWcgfTsKKyAgICBlbnVtIHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8
ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Cit9OworCit9CisKK25hbWVzcGFjZSBnbAor
eworRHg5QmFja0VuZDo6RHg5QmFja0VuZChDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZp
Y2U5ICpkM2RkZXZpY2UpCisgICAgOiBtRGV2aWNlKGQzZGRldmljZSkKK3sKKyAgICBtRGV2aWNl
LT5BZGRSZWYoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyArK2kpCisgICAgeworICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJsZWRbaV0gPSB0cnVlOwor
ICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNF
RDsKKyAgICB9CisKKyAgICBtU3RyZWFtRnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCU10gPSBT
VFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOworCisgICAgRDNEQ0FQUzkgY2FwcyA9IGNvbnRl
eHQtPmdldERldmljZUNhcHMoKTsKKworICAgIElEaXJlY3QzRDkgKmQzZE9iamVjdDsKKyAgICBt
RGV2aWNlLT5HZXREaXJlY3QzRCgmZDNkT2JqZWN0KTsKKworICAgIEQzREFEQVBURVJfSURFTlRJ
RklFUjkgaWRlbnQ7CisgICAgZDNkT2JqZWN0LT5HZXRBZGFwdGVySWRlbnRpZmllcihjYXBzLkFk
YXB0ZXJPcmRpbmFsLCAwLCAmaWRlbnQpOworICAgIGQzZE9iamVjdC0+UmVsZWFzZSgpOworCisg
ICAgLy8gSW5zdGFuY2luZyBpcyBtYW5kYXRvcnkgZm9yIGFsbCBIVyB3aXRoIFNNMyB2ZXJ0ZXgg
c2hhZGVycywgYnV0IGF2b2lkIGhhcmR3YXJlIHdoZXJlIGl0IGRvZXMgbm90IHdvcmsuCisgICAg
bVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvID0gKGNhcHMuVmVydGV4U2hhZGVyVmVyc2lvbiA+
PSBEM0RWU19WRVJTSU9OKDMsIDApICYmIGlkZW50LlZlbmRvcklkICE9IDB4ODA4Nik7CisgICAg
bVN1cHBvcnRJbnRJbmRpY2VzID0gKGNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpKTsK
KworICAgIGNoZWNrVmVydGV4Q2FwcyhjYXBzLkRlY2xUeXBlcyk7Cit9CisKK0R4OUJhY2tFbmQ6
On5EeDlCYWNrRW5kKCkKK3sKKyAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Cit9CisKK2Jvb2wgRHg5
QmFja0VuZDo6c3VwcG9ydEludEluZGljZXMoKQoreworICAgIHJldHVybiBtU3VwcG9ydEludElu
ZGljZXM7Cit9CisKKy8vIEluaXRpYWxpc2UgYSBUcmFuc2xhdGlvbkluZm8KKyNkZWZpbmUgVFJB
TlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBz
aXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpmaW5hbFNpemUs
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3Jt
LCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZ
UEU+KENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwK
KyAgICB9CisKKyNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5v
cm0sIHNpemUpICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUs
IFVzZVByZWZlcnJlZD46OmNhcGZsYWcsIFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9y
bSwgc2l6ZSwgVXNlUHJlZmVycmVkKSwgICAgICAgIFwKKyAgICAgICAgVFJBTlNMQVRJT04odHlw
ZSwgbm9ybSwgc2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUg
VFJBTlNMQVRJT05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFs
c2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElP
Tl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKKyAgICAgICAgeyBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgdHJ1ZSwgNCkgfSwgICAgIFwKKyAgICB9CisKK2NvbnN0IER4OUJhY2tFbmQ6OlRyYW5zbGF0
aW9uRGVzY3JpcHRpb24gRHg5QmFja0VuZDo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9W
RVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5
IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCit7CisgICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX0JZVEUpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9C
WVRFKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfU0hPUlQpLAorICAgIFRSQU5TTEFU
SU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKEdMX0ZJWEVEKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfRkxPQVQpCit9Owor
Cit2b2lkIER4OUJhY2tFbmQ6OmNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
UzsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBq
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwg
NDsgaysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFu
c2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxl
VHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxl
VHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9u
c1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpE
eDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICBy
ZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBzaXplKTsKK30KKworVHJhbnNsYXRl
ZFZlcnRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVy
byhzdGQ6OnNpemVfdCBzaXplKQoreworICAgIGlmIChtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVpl
cm8pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBz
aXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEeDlWZXJ0
ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChtRGV2aWNlLCBzaXplKTsKKyAgICB9Cit9CisK
K1RyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlSW5kZXhCdWZmZXIoc3Rk
OjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIG5ldyBEeDlJbmRleEJ1
ZmZlcihtRGV2aWNlLCBzaXplLCB0eXBlKTsKK30KKworLy8gVGhpcyBpcyB1c2VkIHRvIGluZGV4
IG1BdHRyaWJ1dGVUeXBlcyBhbmQgbVBvc3NpYmxlVHJhbnNsYXRpb25zLgordW5zaWduZWQgaW50
IER4OUJhY2tFbmQ6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4g
MjsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOworICAgICAgY2FzZSBH
TF9GSVhFRDogcmV0dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKKworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7CisgICAgfQorfQorCitGb3JtYXRD
b252ZXJ0ZXIgRHg5QmFja0VuZDo6Z2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6
OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSkKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0ZVR5
cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFdLmZvcm1hdENvbnZlcnRlcjsK
K30KKworRDNEREVDTFRZUEUgRHg5QmFja0VuZDo6bWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlw
ZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgodHlwZSldW25vcm1hbGl6ZV1bc2l6ZS0xXS5kM2RE
ZWNsVHlwZTsKK30KKworYm9vbCBEeDlCYWNrRW5kOjp2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlw
ZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZz
ZXQpIGNvbnN0Cit7CisgICAgLy8gRDNEOSByZXF1aXJlcyB0aGUgc3RyZWFtIG9mZnNldCBhbmQg
c3RyaWRlIHRvIGJlIGEgbXVsdGlwbGUgb2YgRFdPUkQuCisgICAgcmV0dXJuIChzdHJpZGUgJSBz
aXplb2YoRFdPUkQpID09IDAgJiYgb2Zmc2V0ICUgc2l6ZW9mKERXT1JEKSA9PSAwKTsKK30KKwor
SURpcmVjdDNEVmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRl
ZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZiID8gc3RhdGljX2Nhc3Q8
RHg5VmVydGV4QnVmZmVyKj4odmIpLT5nZXRCdWZmZXIoKSA6IE5VTEw7Cit9CisKK0lEaXJlY3Qz
REluZGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVm
ZmVyICppYikgY29uc3QKK3sKKyAgICByZXR1cm4gaWIgPyBzdGF0aWNfY2FzdDxEeDlJbmRleEJ1
ZmZlcio+KGliKS0+Z2V0QnVmZmVyKCkgOiBOVUxMOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6
c2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8p
Cit7CisgICAgbURldmljZS0+U2V0SW5kaWNlcyhnZXREeEJ1ZmZlcihpbmRleEluZm8uYnVmZmVy
KSk7CisgICAgcmV0dXJuIEdMX05PX0VSUk9SOworfQorCitHTGVudW0gRHg5QmFja0VuZDo6c2V0
dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVz
KQoreworICAgIEhSRVNVTFQgaHI7CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tN
QVhfVkVSVEVYX0FUVFJJQlMrMV07CisKKyAgICBEM0RWRVJURVhFTEVNRU5UOSAqbmV4dEVsZW1l
bnQgPSAmZWxlbWVudHNbMF07CisKKyAgICBmb3IgKEJZVEUgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5TdHJlYW0gPSBpICsgMTsgICAg
Ly8gU3RyZWFtIDAgaXMgc2tpcHBlZCBiZWNhdXNlIEQzRCBkb2VzIG5vdCBwZXJtaXQgaXQgdG8g
YmUgYW4gaW5zdGFuY2VkIHN0cmVhbS4KKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5PZmZzZXQg
PSAwOworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlR5cGUgPSBzdGF0aWNfY2FzdDxCWVRFPiht
YXBBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZXNbaV0udHlwZSwgYXR0cmlidXRlc1tpXS5zaXplLCBh
dHRyaWJ1dGVzW2ldLm5vcm1hbGl6ZWQpKTsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5NZXRo
b2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNh
Z2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7CisgICAgICAgICAgICBuZXh0RWxlbWVudC0+VXNh
Z2VJbmRleCA9IGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleDsKKyAgICAgICAgICAgIG5leHRF
bGVtZW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVY
RUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKKyAgICAqbmV4dEVsZW1lbnQgPSBlbmQ7CisK
KyAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkqIHZlcnRleERlY2xhcmF0aW9uOworICAg
IGhyID0gbURldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZ2ZXJ0ZXhE
ZWNsYXJhdGlvbik7CisgICAgbURldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24odmVydGV4RGVj
bGFyYXRpb24pOworICAgIHZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7CisKKyAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7CisKKyAgICBib29sIG5vbkFycmF5
QXR0cmlidXRlcyA9IGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJs
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLm5vbkFycmF5KSBu
b25BcnJheUF0dHJpYnV0ZXMgPSB0cnVlOworCisgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2UoaSArIDEsIGdldER4QnVmZmVyKGF0dHJpYnV0ZXNbaV0uYnVmZmVyKSwgYXR0cmli
dXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKKyAgICAgICAgICAgIGlmICgh
bUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUFwcGxpZWRBdHRy
aWJFbmFibGVkW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZShpICsgMSwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRB
dHRyaWJFbmFibGVkW2ldID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvKQorICAgIHsKKyAgICAgICAg
Ly8gV2hlbiB0aGVyZSBhcmUgbm8gc3RyaWRlIHplcm8gYXR0cmlidXRlcywgd2UgZGlzYWJsZSBp
bnN0YW5jaW5nIHNvIHRoYXQgRHJhd1ByaW1pdGl2ZSBjYW4gYmUgdXNlZC4KKworICAgICAgICBp
ZiAobm9uQXJyYXlBdHRyaWJ1dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0cmVh
bUZyZXF1ZW5jeVswXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVswXSA9IFNUUkVBTV9GUkVRVUVOQ1lf
SU5ERVhFRDsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAs
IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmVuYWJsZWQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5ub25BcnJheSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbaSsxXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNF
RCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtU3RyZWFtRnJlcXVlbmN5W2krMV0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkg
KyAxLCBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0
cmVhbUZyZXF1ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJl
cXVlbmN5W2krMV0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpICsgMSwgRDNEU1RSRUFN
U09VUkNFX0lOREVYRUREQVRBIHwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUyArIDE7IGkrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpXSAhPSBTVFJFQU1fRlJFUVVFTkNZ
X1VOSU5TVEFOQ0VEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVN0
cmVhbUZyZXF1ZW5jeVtpXSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCwgYnV0IG90aGVyd2lz
ZSB0aGVyZSBpcyBhIGJ1Z2d5IGRyaXZlciB0aGF0IHdpbGwgbGVhdmUgaW5zdGFuY2luZworICAg
ICAgICAgICAgICAgICAgICAvLyBlbmFibGVkIGZvciB0aGUgZmlyc3QgZHJhdyBhZnRlciBpdCBo
YXMgYmVlbiB0dXJuZWQgb2ZmLgorICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKGksIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOworCisgICAg
ICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIEdMX05PX0VSUk9SOworfQorCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OkR4OVZl
cnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpCisg
ICAgOiBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHNpemUpCit7CisgICAgSFJFU1VMVCBociA9IGRl
dmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FH
RV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOwor
ICAgIGlmIChociAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFs
bG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0
aHJvdyBzdGQ6OmJhZF9hbGxvYygpOworICAgIH0KK30KKworRHg5QmFja0VuZDo6RHg5VmVydGV4
QnVmZmVyOjpEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNp
emVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKQorICAgIDogVHJhbnNsYXRlZFZlcnRleEJ1ZmZl
cihzaXplKQoreworICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihz
aXplLCB1c2FnZUZsYWdzLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxM
KTsKKyAgICBpZiAoaHIgIT0gU19PSykKKyAgICB7CisgICAgICAgIEVSUigiT3V0IG9mIG1lbW9y
eSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAg
ICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKKyAgICB9Cit9CisKKworRHg5QmFja0VuZDo6RHg5
VmVydGV4QnVmZmVyOjp+RHg5VmVydGV4QnVmZmVyKCkKK3sKKyAgICBtVmVydGV4QnVmZmVyLT5S
ZWxlYXNlKCk7Cit9CisKK0lEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6OkR4OVZl
cnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVZlcnRleEJ1ZmZl
cjsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjptYXAoKQoreworICAg
IHZvaWQgKm1hcFB0cjsKKworICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwg
MCk7CisKKyAgICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRl
eEJ1ZmZlcjo6dW5tYXAoKQoreworICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOworfQorCit2
b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6cmVjeWNsZSgpCit7CisgICAgdm9pZCAq
ZHVtbXk7CisgICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElT
Q0FSRCk7CisgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgKkR4OUJhY2tF
bmQ6OkR4OVZlcnRleEJ1ZmZlcjo6c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3Rk
OjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICptYXBQdHI7CisKKyAgICBtVmVydGV4QnVmZmVy
LT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisKKyAg
ICByZXR1cm4gbWFwUHRyOworfQorCisvLyBOb3JtYWxseSBWQnMgYXJlIGNyZWF0ZWQgd2l0aCBE
M0RVU0FHRV9XUklURU9OTFkgfCBEM0RVU0FHRV9EWU5BTUlDLCBidXQgc29tZSBoYXJkd2FyZSAm
IGRyaXZlcnMgd29uJ3QgcmVuZGVyCisvLyBpZiBhbnkgc3RyaWRlLXplcm8gc3RyZWFtcyBhcmUg
aW4gRDNEVVNBR0VfRFlOQU1JQyBWQnMsIHNvIHRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gY3JlYXRl
IHN1Y2ggVkJzIHdpdGggb25seSBEM0RVU0FHRV9XUklURU9OTFkgc2V0LgorLy8gRDNETE9DS19E
SVNDQVJEIGFuZCBEM0RMT0NLX05PT1ZFUldSSVRFIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBEM0RV
U0FHRV9EWU5BTUlDIFZCcywgc28gd2Ugb3ZlcnJpZGUgbWV0aG9kcyB0byBhdm9pZCB1c2luZyB0
aGVzZSBmbGFncy4KK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJv
dW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpCisgICAgOiBEeDlWZXJ0ZXhCdWZmZXIoZGV2aWNl
LCBzaXplLCBEM0RVU0FHRV9XUklURU9OTFkpCit7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5
VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnJlY3ljbGUoKQoreworfQorCit2b2lk
ICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6c3RyZWFt
aW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lk
ICptYXBQdHI7CisKKyAgICBnZXRCdWZmZXIoKS0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIs
IDApOworCisgICAgcmV0dXJuIG1hcFB0cjsKK30KKworRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZm
ZXI6OkR4OUluZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qg
c2l6ZSwgR0xlbnVtIHR5cGUpCisgICAgOiBUcmFuc2xhdGVkSW5kZXhCdWZmZXIoc2l6ZSkKK3sK
KyAgICBBU1NFUlQodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCB8fCB0eXBlID09IEdMX1VOU0lH
TkVEX0lOVCk7CisKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gKHR5cGUgPT0gR0xfVU5TSUdORURf
U0hPUlQpID8gRDNERk1UX0lOREVYMTYgOiBEM0RGTVRfSU5ERVgzMjsKKworICAgIEhSRVNVTFQg
aHIgPSBkZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBE
M0RVU0FHRV9XUklURU9OTFksIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUluZGV4QnVmZmVy
LCBOVUxMKTsKKyAgICBpZiAoaHIgIT0gU19PSykKKyAgICB7CisgICAgICAgIEVSUigiT3V0IG9m
IG1lbW9yeSBhbGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsK
KyAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKKyAgICB9Cit9CisKK0R4OUJhY2tFbmQ6
OkR4OUluZGV4QnVmZmVyOjp+RHg5SW5kZXhCdWZmZXIoKQoreworICAgIG1JbmRleEJ1ZmZlci0+
UmVsZWFzZSgpOworfQorCitJRGlyZWN0M0RJbmRleEJ1ZmZlcjkqRHg5QmFja0VuZDo6RHg5SW5k
ZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsK
K30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6Om1hcCgpCit7CisgICAgdm9p
ZCAqbWFwUHRyOworCisgICAgbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDApOwor
CisgICAgcmV0dXJuIG1hcFB0cjsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZl
cjo6dW5tYXAoKQoreworICAgIG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgRHg5
QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnJlY3ljbGUoKQoreworICAgIHZvaWQgKmR1bW15Owor
ICAgIG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Cisg
ICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5SW5k
ZXhCdWZmZXI6OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNp
emUpCit7CisgICAgdm9pZCAqbWFwUHRyOworCisgICAgbUluZGV4QnVmZmVyLT5Mb2NrKG9mZnNl
dCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisKKyAgICByZXR1cm4gbWFw
UHRyOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9u
IDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvZHg5Lmg6
IERpcmVjdDNEIDktYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyQmFja0VuZCwgVHJhbnNs
YXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyLgorCisjaWZuZGVmIExJ
QkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0RYOV9I
XworCisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisKK25hbWVzcGFjZSBnbAor
eworCitjbGFzcyBEeDlCYWNrRW5kIDogcHVibGljIEJ1ZmZlckJhY2tFbmQKK3sKKyAgcHVibGlj
OgorICAgIGV4cGxpY2l0IER4OUJhY2tFbmQoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2
aWNlOSAqZDNkZGV2aWNlKTsKKyAgICB+RHg5QmFja0VuZCgpOworCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRJbnRJbmRpY2VzKCk7CisKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZm
ZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKTsKKyAgICB2aXJ0dWFsIFRy
YW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3Rk
OjpzaXplX3Qgc2l6ZSk7CisgICAgdmlydHVhbCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmNyZWF0
ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKTsKKyAgICB2aXJ0dWFs
IEZvcm1hdENvbnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6
ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKTsKKworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVN0
cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBz
dGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0OworCisgICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRp
Y2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pOworICAgIHZp
cnR1YWwgR0xlbnVtIHNldHVwQXR0cmlidXRlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJp
YnV0ZSAqYXR0cmlidXRlcyk7CisKKyAgcHJpdmF0ZToKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpt
RGV2aWNlOworCisgICAgYm9vbCBtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm87CisgICAgYm9v
bCBtU3VwcG9ydEludEluZGljZXM7CisKKyAgICBib29sIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtN
QVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgZW51bSBTdHJlYW1GcmVxdWVuY3kKKyAgICB7Cisg
ICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQgPSAwLAorICAgICAgICBTVFJFQU1f
RlJFUVVFTkNZX0lOREVYRUQsCisgICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VECisg
ICAgfTsKKworICAgIFN0cmVhbUZyZXF1ZW5jeSBtU3RyZWFtRnJlcXVlbmN5W01BWF9WRVJURVhf
QVRUUklCUysxXTsKKworICAgIHN0cnVjdCBUcmFuc2xhdGlvbkluZm8KKyAgICB7CisgICAgICAg
IEZvcm1hdENvbnZlcnRlciBmb3JtYXRDb252ZXJ0ZXI7CisgICAgICAgIEQzRERFQ0xUWVBFIGQz
ZERlY2xUeXBlOworICAgIH07CisKKyAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQ
RVMgPSA2IH07CisKKyAgICBUcmFuc2xhdGlvbkluZm8gbUF0dHJpYnV0ZVR5cGVzW05VTV9HTF9W
RVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkg
dHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KKworICAgIHN0cnVjdCBUcmFuc2xhdGlv
bkRlc2NyaXB0aW9uCisgICAgeworICAgICAgICBEV09SRCBjYXBzRmxhZzsKKyAgICAgICAgVHJh
bnNsYXRpb25JbmZvIHByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgIFRyYW5zbGF0aW9uSW5m
byBmYWxsYmFja0NvbnZlcnNpb247CisgICAgfTsKKworICAgIC8vIFRoaXMgdGFibGUgaXMgdXNl
ZCB0byBnZW5lcmF0ZSBtQXR0cmlidXRlVHlwZXMuCisgICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0
aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklC
X1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCld
W25vcm1hbGl6ZWRdW3NpemUtMV0KKworICAgIHZvaWQgY2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRl
Y2xUeXBlcyk7CisKKyAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25z
dDsKKworICAgIGNsYXNzIER4OVZlcnRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkVmVydGV4
QnVmZmVyCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKKyAgICAgICAgdmlydHVh
bCB+RHg5VmVydGV4QnVmZmVyKCk7CisKKyAgICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAq
Z2V0QnVmZmVyKCkgY29uc3Q7CisKKyAgICAgIHByb3RlY3RlZDoKKyAgICAgICAgRHg5VmVydGV4
QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQg
dXNhZ2VGbGFncyk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkICptYXAoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHVubWFwKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6
OnNpemVfdCBzaXplKTsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgSURpcmVjdDNEVmVydGV4
QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsKKyAgICB9OworCisgICAgY2xhc3MgRHg5VmVydGV4QnVm
ZmVyWmVyb1N0cmlkZVdvcmthcm91bmQgOiBwdWJsaWMgRHg5VmVydGV4QnVmZmVyCisgICAgewor
ICAgICAgcHVibGljOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3Vu
ZChJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpOworCisgICAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6
ZSk7CisgICAgfTsKKworICAgIGNsYXNzIER4OUluZGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0
ZWRJbmRleEJ1ZmZlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgRHg5SW5kZXhCdWZm
ZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlw
ZSk7CisgICAgICAgIHZpcnR1YWwgfkR4OUluZGV4QnVmZmVyKCk7CisKKyAgICAgICAgSURpcmVj
dDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICAgICAgcHJvdGVjdGVkOgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5tYXAo
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOwor
CisgICAgICBwcml2YXRlOgorICAgICAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRleEJ1
ZmZlcjsKKyAgICB9OworCisgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0RHhCdWZmZXIo
VHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0OworICAgIElEaXJlY3QzREluZGV4QnVm
ZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVmZmVyICppYikgY29uc3Q7CisKKyAg
ICBEM0RERUNMVFlQRSBtYXBBdHRyaWJ1dGVUeXBlKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBz
aXplLCBib29sIG5vcm1hbGl6ZWQpIGNvbnN0OworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJH
TEVTVjJfR0VPTUVUUllfRFg5X0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5
L3ZlcnRleGNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dl
b21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJH
TEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIwOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lv
bi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1
c2VkIHRvIGJ1aWxkCisvLyB0aGUgRm9ybWF0Q29udmVydGVyIG9iamVjdHMgdXNlZCBieSB0aGUg
YnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgorCisjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9W
RVJURVhDT05WRVJTSU9OX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05W
RVJTSU9OX0hfCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiIC8vIERlZmluZXMgSW5kZXgKKworbmFtZXNwYWNl
IGdsCit7CisKKy8vIENvbnZlcnNpb24gdHlwZXM6CisvLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVu
dGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3
aXNlCisvLyBzdGF0aWMgVSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJv
bSB0aGUgaW5wdXQgdHlwZSB0byB0aGUgb3V0cHV0IHR5cGUKKy8vIHR5cGVkZWYgLi4uIE91dHB1
dFR5cGU6IHRoZSB0eXBlIHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgorCit0ZW1wbGF0ZSA8
Y2xhc3MgVD4KK3N0cnVjdCBJZGVudGl0eQoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50
aXR5ID0gdHJ1ZTsKKworICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQg
Y29udmVydChUIHgpCisgICAgeworICAgICAgICByZXR1cm4geDsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRnJvbVQsIGNsYXNzIFRvVD4KK3N0cnVjdCBDYXN0Cit7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5
cGU7CisKKyAgICBzdGF0aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUb1Q+KHgpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBU
Pgorc3RydWN0IENhc3Q8VCwgVD4KK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9
IHRydWU7CisKKyAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKKworICAgIHN0YXRpYyBUIGNvbnZl
cnQoVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOworICAgIH0K
K307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZQoreworICAgIHN0YXRp
YyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7CisKKyAgICB0eXBlZGVmIGZsb2F0IE91dHB1
dFR5cGU7CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChUIHgpCisgICAgeworICAgICAgICB0
eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7CisgICAgICAgIGZsb2F0IGYgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oeCk7CisKKyAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBj
b21waWxlIHRpbWUKKyAgICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDgg
Y29tcHV0ZXMgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1v
cnkgd2l0aCBzdGF0aWMgZ3VhcmQgYW5kIGFsbCB0aGF0LgorICAgICAgICAgICAgY29uc3QgZmxv
YXQgZGl2aXNvciA9IDEuMGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7Cisg
ICAgICAgICAgICByZXR1cm4gKDIqZisxKSpkaXZpc29yOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOworICAgICAgICB9
CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2Fs
ZUJpdHM+CitzdHJ1Y3QgRml4ZWRUb0Zsb2F0Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRl
bnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEZyb21UeXBlIHgpCisgICAgeworICAgICAgICBjb25zdCBmbG9h
dCBkaXZpc29yID0gMS4wZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlw
ZT4oMSkgPDwgU2NhbGVCaXRzKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4
KSAqIGRpdmlzb3I7CisgICAgfQorfTsKKworLy8gV2lkZW4gdHlwZXM6CisvLyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3Jl
IGNvbnZlcnNpb24KKy8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVt
YmVyIG9mIGNvbXBvbmVudHMgYWZ0ZXIgY29udmVyc2lvbgorCisvLyBGbG9hdCBpcyBzdXBwb3J0
ZWQgYXQgYW55IHNpemUuCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBOb1dpZGVu
Cit7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAg
c3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOworfTsKKworLy8gU0hPUlQs
IG5vcm0tU0hPUlQsIG5vcm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3
aXRoIDIgb3IgNCBjb21wb25lbnRzCit0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KK3N0cnVjdCBX
aWRlblRvRXZlbgoreworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGgg
PSBOOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsK
K307CisKK3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9Gb3VyCit7Cisg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSA0OworfTsKKworLy8gTW9zdCB0eXBlcyBo
YXZlIDAgYW5kIDEgdGhhdCBhcmUganVzdCB0aGF0LgordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1
Y3QgU2ltcGxlRGVmYXVsdFZhbHVlcworeworICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxUPigwKTsgfQorICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KDEpOyB9Cit9OworCisvLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFsw
LDFdIG9yIFstMSwxXSBzbyAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KK3Rl
bXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCit7CisgICAg
c3RhdGljIFQgemVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9CisgICAgc3RhdGlj
IFQgb25lKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KK307CisK
Ky8vIENvbnZlcnRlcjoKKy8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRo
aXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQorLy8gc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQg
dmVydGV4CisvLyBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6
c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJh
eSBvZiB2ZXJ0aWNlcy4gSW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1
bnN0cmlkZWQuCisKK3RlbXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3Mg
Q29udmVydGVyLCBjbGFzcyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJ
blQ+ID4KK3N0cnVjdCBWZXJ0ZXhEYXRhQ29udmVydGVyCit7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDb252ZXJ0ZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlwZTsKKyAgICB0eXBlZGVmIEluVCBJbnB1
dFR5cGU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6Omlu
aXRpYWxXaWR0aCA9PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRp
dHk7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6
ZmluYWxXaWR0aCAqIHNpemVvZihPdXRwdXRUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnZl
cnRBcnJheShjb25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6
ZV90IG4sIE91dHB1dFR5cGUgKm91dCkKKyAgICB7CisgICAgICAgIGZvciAoc3RkOjpzaXplX3Qg
aSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElucHV0VHlw
ZSAqZWluID0gcG9pbnRlckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKKworICAgICAgICAgICAg
Y29weUNvbXBvbmVudChvdXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVs
dFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWlu
LCAxLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsK
KyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1
dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAgY29weUNvbXBv
bmVudChvdXQsIGVpbiwgMywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVs
ZTo6b25lKCkpKTsKKworICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2
b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0
VHlwZSo+KGluKSwgc3RyaWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7Cisg
ICAgfQorCisgIHByaXZhdGU6CisgICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBh
IG51bWJlciBvZiBieXRlcyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgorICAgIHRlbXBsYXRl
IDxjbGFzcyBUPgorICAgIHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3Rk
OjpzaXplX3QgbnVtQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUICo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwg
Y29uc3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBl
IGRlZmF1bHR2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGgg
PiBlbGVtZW50aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6Omlu
aXRpYWxXaWR0aCA+IGVsZW1lbnRpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXRbZWxlbWVudGluZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhd
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXRbZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dF
T01FVFJZX1ZFUlRFWENPTlZFUlNJT05fSF8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63282</attachid>
            <date>2010-08-02 17:21:45 -0700</date>
            <delta_ts>2010-08-02 17:42:02 -0700</delta_ts>
            <desc>ANGLE source code and Xcode project. Got rid of errant files</desc>
            <filename>just_angle</filename>
            <type>text/plain</type>
            <size>1544429</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDApCisrKyBBTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorMjAxMC0wOC0wMiAgUGF1bCBTYXdheWEgIDxwc2F3YXlhQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQU5HTEUgbGlicmFy
eSB0byBXZWJLaXQuIEZyb20gdGhlIHJlcG9zaXRvcnkgKGh0dHA6Ly9hbmdsZXByb2plY3QuZ29v
Z2xlY29kZS5jb20pIGFzIG9mIEp1bHkgMjIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc4OQorICAgICAgICAKSW5kZXg6IEFOR0xFL0FOR0xFLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvQU5HTEUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL0FOR0xFLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjI3IEBACisvLyAhJCpV
VEY4KiQhCit7CisJYXJjaGl2ZVZlcnNpb24gPSAxOworCWNsYXNzZXMgPSB7CisJfTsKKwlvYmpl
Y3RWZXJzaW9uID0gNDI7CisJb2JqZWN0cyA9IHsKKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KKwkJRkIzOUQyNzExMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjIyMTIw
MEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07CisJCUZCMzlEMjc1MTIwMEYz
NUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovOyB9
OworCQlGQjM5RDI3OTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMkExMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKKwkJRkIzOUQyN0IxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovOyB9Owor
CQlGQjM5RDI3RDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyRTEyMDBGMzVBMDAw
ODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi87IH07CisJCUZCMzlEMjgxMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkIzOUQyMzIxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5j
cHAgKi87IH07CisJCUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMzQxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgKi87IH07CisJCUZCMzlEMjg0MTIwMEYzNUEw
MDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzNTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJh
dmVyc2UuY3BwICovOyB9OworCQlGQjM5RDI4ODEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJ
RkIzOUQyOEExMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5
IC8qIE91dHB1dEdMU0wuY3BwICovOyB9OworCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkgLyog
cGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi87IH07CisJ
CUZCMzlEMjhGMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0MDEyMDBGMzVBMDAwODhF
NjkgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQlGQjM5RDI5MTEyMDBGMzVBMDAwODhFNjkg
LyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQyMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwICovOyB9Owor
CQlGQjM5RDI5MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0
b20uYyAqLzsgfTsKKwkJRkIzOUQyOTYxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDgxMjAwRjM1QTAw
MDg4RTY5IC8qIGNwcC5jICovOyB9OworCQlGQjM5RDI5ODEyMDBGMzVBMDAwODhFNjkgLyogY3Bw
c3RydWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi87IH07CisJCUZCMzlEMjk5
MTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRCMTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyAq
LzsgfTsKKwkJRkIzOUQyOUQxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRGMTIwMEYzNUEwMDA4
OEU2OSAvKiBzY2FubmVyLmMgKi87IH07CisJCUZCMzlEMkEwMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovOyB9OworCQlGQjM5RDJBMjEy
MDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi87
IH07CisJCUZCMzlEMkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1NjEyMDBG
MzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OworCQlGQjM5RDJBNjEyMDBG
MzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJl
ZS5jcHAgKi87IH07CisJCUZCMzlEMkE4MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVB
MTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKKwkJRkIzOUQyQUExMjAw
RjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi87IH07CisJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9y
R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovOyB9OworCQlG
QjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2
OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OworCQlGQjM5RDJDMjEyMDBGM0VGMDAwODhFNjkg
LyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZCMzlEMkJFMTIwMEYzRTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICov
OyB9OworCQlGQjM5RDJDMzEyMDBGM0VGMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYxMjAwRjNFNjAw
MDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgfTsKKwkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovOyB9OworCQlG
QjM5RDcyNDEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQ3MjIxMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJRkIzOUQ3MjUxMjAxMDMyNDAwMDg4RTY5IC8q
IGdsc2xhbmdfdGFiLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQjM5RDcyMTEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuaCAqLzsgfTsKKwkJ
RkIzOUQ3NkQxMjAxMTBGQzAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRTEyMDBGM0U2MDAwODhF
NjkgLyogUmVzb3VyY2VMaW1pdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CisJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEy
MDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFB1YmxpYywgKTsgfTsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCisv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwRDExMjAwRjBFMzAw
MDg4RTY5IC8qIGxpYmFuZ2xlLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFu
Z2xlLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUZCMzlEMTg2MTIw
MEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5IC8qIENv
ZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGRlYnVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEMxMjAwRjI2MjAwMDg4
RTY5IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRlYnVnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAv
KiBnbHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xhbmcubDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4RTY5IC8q
IGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4RTY5IC8q
IEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxOTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXpl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4
RTY5IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5p
dGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5MzEyMDBGMjYy
MDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlh
bGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplRGxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2
OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDE5NjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRl
cm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5J
bmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
aW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUExMjAw
RjI2MjAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyog
bG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9j
YWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxOUMx
MjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RDEyMDBGMjYy
MDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDE5RTEyMDBG
MjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBv
c3NvdXJjZV93aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1
dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBMTEyMDBGMjYy
MDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEyMTIw
MEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRI
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBh
cnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VIZWxw
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFBNjEyMDBGMjYyMDAw
ODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQTcxMjAw
RjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBhdG9tLmMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUFGMTIw
MEYyNjIwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIw
MTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIxMTIw
MEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIyMTIwMEYy
NjIwMDA4OEU2OSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
cGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUIzMTIwMEYyNjIw
MDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjQxMjAw
RjI2MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCNTEyMDBG
MjYyMDAwODhFNjkgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBzY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI2MTIwMEYy
NjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUI3MTIw
MEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gc3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCOTEyMDBG
MjYyMDAwODhFNjkgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9
IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQTEyMDBGMjYy
MDAwODhFNjkgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRv
a2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCQjEyMDBGMjYyMDAw
ODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZp
ZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhF
NjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzAx
MjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUMx
MTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5
bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFRhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMUNCMTIwMEYyNjIwMDA4OEU2
OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9
IHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1sOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JH
TFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNM
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDFEMzEyMDBG
MjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIy
MTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5o
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5sZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bmZvU2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1NpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4RTY5IC8q
IEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5p
dGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJEMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjJF
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IEluaXRpYWxp
emVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjMxMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRpYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzMxMjAwRjM1QTAwMDg4RTY5
IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gaW50
ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjM0MTIwMEYz
NUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2FsaW50ZXJt
ZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGludGVybWVk
aWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzNzEyMDBGMzVBMDAw
ODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gTU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkg
Lyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVk
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhF
NjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhFNjkgLyog
T3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0cHV0R0xT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDIzRjEyMDBGMzVBMDAwODhF
NjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDAx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29s
QWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyog
YXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
QjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0
RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI0RTEy
MDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
NTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1
MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5
RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
LmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlE
MjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQy
NTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTUx
MjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTYxMjAw
RjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3Zl
VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4
RTY5IC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJl
bW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUExMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZC
MzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNs
YXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNs
YXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDI2OTEyMDBG
MzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIz
OUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8qIHVuaXN0
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNl
TGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBSZXNvdXJjZUxpbWl0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDJCRjEyMDBGM0U2MDAwODhF
NjkgLyogU2hhZGVyTGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gU2hh
ZGVyTGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjM5RDcyMDEyMDEwMzIw
MDAwODhFNjkgLyogZ2xzbGFuZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBnbHNsYW5nLmNwcDsgcGF0aCA9IHNyYy9pbnRlcm1lZGlhdGUvZ2xzbGFuZy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBn
bHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3Rh
Yi5oOyBwYXRoID0gc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZ190YWIuY3Bw
OyBwYXRoID0gc3JjL2ludGVybWVkaWF0ZS9nbHNsYW5nX3RhYi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0YxMjAwRjBF
MzAwMDg4RTY5IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
Ky8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KKwkJRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCisJCQkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIFNvdXJj
ZSAqLywKKwkJCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLywK
KwkJCQlGQjM5RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8sCisJCQkpOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5
IC8qIFNvdXJjZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xBTkcgKi8sCisJCQkJRkIzOUQxODUx
MjAwRjI2MjAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAorCQkJKTsKKwkJCW5hbWUgPSBTb3VyY2U7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGQjM5RDBDQjEyMDBFRjk0MDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICov
LAorCQkJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovLAorCQkJ
CUZCMzlENzIyMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkpOwor
CQkJbmFtZSA9IEludGVybWVkaWF0ZXM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OworCQlGQjM5RDBDQzEyMDBFRjlCMDAwODhFNjkgLyogUHJvZHVjdHMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2
OSAvKiBsaWJhbmdsZS5hICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAorCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKKwkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCisJCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKKwkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAorCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAor
CQkJCUZCMzlEMThEMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQx
OEUxMjAwRjI2MjAwMDg4RTY5IC8qIGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDE4RjEyMDBGMjYy
MDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovLAorCQkJCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2
OSAvKiBJbmZvU2luay5oICovLAorCQkJCUZCMzlEMTkxMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0
aWFsaXplLmNwcCAqLywKKwkJCQlGQjM5RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5oICovLAorCQkJCUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNw
cCAqLywKKwkJCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICov
LAorCQkJCUZCMzlEMTk1MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICov
LAorCQkJCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmggKi8sCisJCQkJRkIzOUQxOTcxMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAg
Ki8sCisJCQkJRkIzOUQxOTgxMjAwRjI2MjAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAor
CQkJCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZC
MzlEMTlBMTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIz
OUQxOUIxMjAwRjI2MjAwMDg4RTY5IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIz
OUQxOUMxMjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDE5RDEyMDBGMjYy
MDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8sCisJCQkJRkIzOUQxOUUxMjAwRjI2MjAwMDg4RTY5
IC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywKKwkJCQlGQjM5RDE5RjEyMDBGMjYyMDAwODhFNjkg
Lyogb3Nzb3VyY2Vfd2luLmNwcCAqLywKKwkJCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyog
T3V0cHV0R0xTTC5jcHAgKi8sCisJCQkJRkIzOUQxQTExMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1
dEdMU0wuaCAqLywKKwkJCQlGQjM5RDFBMjEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0SExTTC5j
cHAgKi8sCisJCQkJRkIzOUQxQTMxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLywK
KwkJCQlGQjM5RDFBNDEyMDBGMjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJ
RkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5
RDFBNjEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDFBNzEy
MDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDFBODEyMDBGMjYy
MDAwODhFNjkgLyogUG9vbEFsbG9jLmggKi8sCisJCQkJRkIzOUQxQTkxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3NvciAqLywKKwkJCQlGQjM5RDFCQjEyMDBGMjYyMDAwODhFNjkgLyogUXVh
bGlmaWVyQWxpdmUuY3BwICovLAorCQkJCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFs
aWZpZXJBbGl2ZS5oICovLAorCQkJCUZCMzlEMUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVU
cmVlLmNwcCAqLywKKwkJCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5o
ICovLAorCQkJCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywK
KwkJCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5
RDFDMTEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMUMy
MTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMUNCMTIwMEYy
NjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8sCisJCQkJRkIzOUQxQ0Mx
MjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2ogKi8sCisJCQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKKwkJCQlGQjM5RDFD
RTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKKwkJCQlGQjM5RDFDRjEy
MDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAorCQkJCUZCMzlEMUQwMTIw
MEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAorCQkJCUZCMzlEMUQxMTIwMEYy
NjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAorCQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuY3BwICovLAorCQkJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuaCAqLywKKwkJCQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3Rk
LmggKi8sCisJCQkpOworCQkJaW5jbHVkZUluSW5kZXggPSAwOworCQkJbmFtZSA9IGNvbXBpbGVy
OworCQkJcGF0aCA9IHNyYy9jb21waWxlcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCUZCMzlEMUE5MTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMUFBMTIwMEYyNjIw
MDA4OEU2OSAvKiBhdG9tLmMgKi8sCisJCQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0
b20uaCAqLywKKwkJCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovLAor
CQkJCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLywKKwkJCQlGQjM5RDFBRTEy
MDBGMjYyMDAwODhFNjkgLyogY3BwLmggKi8sCisJCQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5
IC8qIGNwcHN0cnVjdC5jICovLAorCQkJCUZCMzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1v
cnkuYyAqLywKKwkJCQlGQjM5RDFCMTEyMDBGMjYyMDAwODhFNjkgLyogbWVtb3J5LmggKi8sCisJ
CQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovLAorCQkJCUZCMzlEMUIz
MTIwMEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8sCisJCQkJRkIzOUQxQjQxMjAwRjI2
MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLywKKwkJCQlGQjM5RDFCNTEyMDBGMjYyMDAwODhFNjkg
Lyogc2Nhbm5lci5oICovLAorCQkJCUZCMzlEMUI2MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2Jh
bHMuaCAqLywKKwkJCQlGQjM5RDFCNzEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5jICovLAor
CQkJCUZCMzlEMUI4MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8sCisJCQkJRkIzOUQx
QjkxMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vucy5jICovLAorCQkJCUZCMzlEMUJBMTIwMEYyNjIw
MDA4OEU2OSAvKiB0b2tlbnMuaCAqLywKKwkJCSk7CisJCQlpbmNsdWRlSW5JbmRleCA9IDA7CisJ
CQlwYXRoID0gcHJlcHJvY2Vzc29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkg
LyogQmFzZVR5cGVzLmggKi8sCisJCQkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVH
ZW5HTFNMLmNwcCAqLywKKwkJCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmgg
Ki8sCisJCQkJRkIzOUQyMjUxMjAwRjM1QTAwMDg4RTY5IC8qIENvbnN0YW50VW5pb24uaCAqLywK
KwkJCQlGQjM5RDIyNjEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuY3BwICovLAorCQkJCUZCMzlE
MjI3MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAorCQkJCUZCMzlEMjI4MTIwMEYzNUEw
MDA4OEU2OSAvKiBnbHNsYW5nLmwgKi8sCisJCQkJRkIzOUQyMjkxMjAwRjM1QTAwMDg4RTY5IC8q
IGdsc2xhbmcueSAqLywKKwkJCQlGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1Npbmsu
Y3BwICovLAorCQkJCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5oICovLAor
CQkJCUZCMzlEMjJDMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmNwcCAqLywKKwkJCQlG
QjM5RDIyRDEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovLAorCQkJCUZCMzlEMjJF
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKKwkJCQlGQjM5RDIyRjEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5oICovLAorCQkJCUZCMzlEMjMwMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAorCQkJCUZCMzlEMjMxMTIwMEYz
NUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCisJCQkJRkIzOUQyMzIx
MjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8sCisJCQkJRkIzOUQyMzMxMjAw
RjM1QTAwMDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovLAorCQkJCUZCMzlEMjM0MTIwMEYzNUEw
MDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovLAorCQkJCUZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2
OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCisJCQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCisJCQkJRkIzOUQyMzcxMjAwRjM1QTAwMDg4RTY5
IC8qIE1NYXAuaCAqLywKKwkJCQlGQjM5RDIzODEyMDBGMzVBMDAwODhFNjkgLyogb3NpbmNsdWRl
LmggKi8sCisJCQkJRkIzOUQyMzkxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNw
cCAqLywKKwkJCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAq
LywKKwkJCQlGQjM5RDIzQjEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi8sCisJ
CQkJRkIzOUQyM0MxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuaCAqLywKKwkJCQlGQjM5
RDIzRjEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJRkIzOUQyNDAx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlGQjM5RDI0MTEyMDBG
MzVBMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlGQjM5RDI0MjEyMDBGMzVBMDAw
ODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQlGQjM5RDI0MzEyMDBGMzVBMDAwODhFNjkg
LyogUG9vbEFsbG9jLmggKi8sCisJCQkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXBy
b2Nlc3NvciAqLywKKwkJCQlGQjM5RDI1NjEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxp
dmUuY3BwICovLAorCQkJCUZCMzlEMjU3MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5oICovLAorCQkJCUZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAq
LywKKwkJCQlGQjM5RDI1OTEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5oICovLAorCQkJ
CUZCMzlEMjVBMTIwMEYzNUEwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmNwcCAqLywKKwkJCQlGQjM5
RDI1QjEyMDBGMzVBMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLywKKwkJCQlGQjM5RDI1QzEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwICovLAorCQkJCUZCMzlEMjVEMTIwMEYzNUEw
MDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5oICovLAorCQkJCUZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2
OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCisJCQkJRkIzOUQyNjkxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCisJCQkJRkIzOUQyNkMxMjAwRjM1QTAwMDg4RTY5IC8q
IFR5cGVzLmggKi8sCisJCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVj
dC5jcHAgKi8sCisJCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5o
ICovLAorCQkJCUZCMzlEMjZGMTIwMEYzNUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLywKKwkJCSk7
CisJCQluYW1lID0gY29tcGlsZXI7CisJCQlwYXRoID0gc3JjL2NvbXBpbGVyOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJRkIzOUQyNDQxMjAwRjM1QTAwMDg4RTY5IC8qIHBy
ZXByb2Nlc3NvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRkIzOUQyNDUxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uYyAqLywKKwkJCQlGQjM5RDI0NjEy
MDBGMzVBMDAwODhFNjkgLyogYXRvbS5oICovLAorCQkJCUZCMzlEMjQ3MTIwMEYzNUEwMDA4OEU2
OSAvKiBjb21waWxlLmggKi8sCisJCQkJRkIzOUQyNDgxMjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5j
ICovLAorCQkJCUZCMzlEMjQ5MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuaCAqLywKKwkJCQlGQjM5
RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8sCisJCQkJRkIzOUQyNEIxMjAw
RjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAorCQkJCUZCMzlEMjRDMTIwMEYzNUEwMDA4OEU2
OSAvKiBtZW1vcnkuaCAqLywKKwkJCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2Vy
LmggKi8sCisJCQkJRkIzOUQyNEUxMjAwRjM1QTAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLywK
KwkJCQlGQjM5RDI0RjEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jICovLAorCQkJCUZCMzlE
MjUwMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8sCisJCQkJRkIzOUQyNTExMjAwRjM1
QTAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAorCQkJCUZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2
OSAvKiBzeW1ib2xzLmMgKi8sCisJCQkJRkIzOUQyNTMxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJv
bHMuaCAqLywKKwkJCQlGQjM5RDI1NDEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgKi8sCisJ
CQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovLAorCQkJKTsKKwkJCXBh
dGggPSBwcmVwcm9jZXNzb3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlG
QjM5RDJCRDEyMDBGM0U2MDAwODhFNjkgLyogR0xTTEFORyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJl
c291cmNlTGltaXRzLmggKi8sCisJCQkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRl
ckxhbmcuaCAqLywKKwkJCSk7CisJCQluYW1lID0gR0xTTEFORzsKKwkJCXBhdGggPSBpbmNsdWRl
L0dMU0xBTkc7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdy
b3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LworCQlGQjM5RDc3QjEyMDExMTBDMDAwODhFNjkgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
KwkJCWZpbGVzID0gKAorCQkJCUZCMzlENzZEMTIwMTEwRkMwMDA4OEU2OSAvKiBSZXNvdXJjZUxp
bWl0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNo
YWRlckxhbmcuaCBpbiBIZWFkZXJzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KKworLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKwkJRkIzOUQw
RDAxMjAwRjBFMzAwMDg4RTY5IC8qIGFuZ2xlICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFy
Z2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEZCMzlEMEQ2MTIwMEYxMUUwMDA4OEU2
OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkIzOUQ3N0IxMjAxMTEwQzAwMDg4RTY5IC8q
IEhlYWRlcnMgKi8sCisJCQkJRkIzOUQwREUxMjAwRjE5MTAwMDg4RTY5IC8qIEFjdGlvbiAiZmxl
eF9nbHNsYW5nIiAqLywKKwkJCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogQWN0aW9uICJi
aXNvbl9nbHNsYW5nIiAqLywKKwkJCQlGQjM5RDBDRTEyMDBGMEUzMDAwODhFNjkgLyogU291cmNl
cyAqLywKKwkJCQlGQjM5RDBDRjEyMDBGMEUzMDAwODhFNjkgLyogRnJhbWV3b3JrcyAqLywKKwkJ
CSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7
CisJCQluYW1lID0gYW5nbGU7CisJCQlwcm9kdWN0TmFtZSA9IGFuZ2xlOworCQkJcHJvZHVjdFJl
ZmVyZW5jZSA9IEZCMzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJhbmdsZS5hICovOworCQkJ
cHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CisJ
CX07CisvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYUHJv
amVjdCBzZWN0aW9uICovCisJCUZCMzlEMDcwMTIwMEVEOTIwMDA4OEU2OSAvKiBQcm9qZWN0IG9i
amVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWFByb2plY3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMi40IjsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOworCQkJbWFpbkdyb3Vw
ID0gRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5OworCQkJcHJvamVjdERpclBhdGggPSAiIjsKKwkJ
CXByb2plY3RSb290ID0gIiI7CisJCQl0YXJnZXRzID0gKAorCQkJCUZCMzlEMEQwMTIwMEYwRTMw
MDA4OEU2OSAvKiBhbmdsZSAqLywKKwkJCSk7CisJCX07CisvKiBFbmQgUEJYUHJvamVjdCBzZWN0
aW9uICovCisKKy8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CUZCMzlEMERFMTIwMEYxOTEwMDA4OEU2OSAvKiBBY3Rpb24gImZsZXhfZ2xzbGFuZyIgKi8gPSB7
CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAxMjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJY29tcGls
ZXIvZ2xzbGFuZy5sLAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNsYW5nXCIi
OworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZy5j
cHAiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJF
eGVjdXRpbmcgZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxuZWNobyBub3RlOiAke0lOVEVS
TUVESUFURV9ESVJ9XG5leGVjIGZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0k
e0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmcuY3BwXCIgc3JjL2NvbXBpbGVyL2dsc2xhbmcubFxu
ZXhpdCAxIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlGQjM5RDMxQzEyMDBG
NjkyMDAwODhFNjkgLyogQWN0aW9uICJiaXNvbl9nbHNsYW5nIiAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJCWNvbXBpbGVyL2ds
c2xhbmcueSwKKwkJCSk7CisJCQluYW1lID0gIkFjdGlvbiBcImJpc29uX2dsc2xhbmdcIiI7CisJ
CQlvdXRwdXRQYXRocyA9ICgKKwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5j
cHAiLAorCQkJCSIkKElOVEVSTUVESUFURV9ESVIpL2dsc2xhbmdfdGFiLmgiLAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQYXRoID0g
L2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90ZTogXCJFeGVjdXRpbmcgYmlzb24g
b24gY29tcGlsZXIvZ2xzbGFuZy55XCJcbmV4ZWMgYmlzb24gLS1uby1saW5lcyBcIi0tZGVmaW5l
cz0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmhcIiBcIi0tc2tlbGV0b249eWFjYy5j
XCIgXCItLW91dHB1dD0ke0lOVEVSTUVESUFURV9ESVJ9L2dsc2xhbmdfdGFiLmNwcFwiIHNyYy9j
b21waWxlci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOwor
CQl9OworLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJl
Z2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJRkIzOUQwQ0UxMjAwRjBFMzAw
MDg4RTY5IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
KwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQlGQjM5
RDJDMjEyMDBGM0VGMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBTb3VyY2VzICovLAor
CQkJCUZCMzlENzIzMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCMzlENzI1MTIwMTAzMjQwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZCMzlEMkMzMTIwMEYzRUYwMDA4OEU2OSAvKiBTaGFkZXJMYW5n
LmggaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdl
bkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8q
IGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAv
KiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3QjEyMDBGMzVBMDAwODhF
NjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI3RDEyMDBGMzVB
MDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4
MTEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZCMzlEMjgzMTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkIzOUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RTEyMDBGMzVBMDAwODhFNjkg
LyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI4RjEyMDBGMzVBMDAw
ODhFNjkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTExMjAw
RjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDI5
MzEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTYx
MjAwRjM1QTAwMDg4RTY5IC8qIGNwcC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTgxMjAw
RjM1QTAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOTkx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzOUQyOUQx
MjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkEw
MTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJB
MjEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJB
NDEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkIzOUQyQTYxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkIzOUQyQUExMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZCMzlEMkFDMTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlv
biAqLworCQlGQjM5RDA3MTEyMDBFRDkyMDAwODhFNjkgLyogRGVidWcgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMg
PSAiJChBUkNIU19TVEFOREFSRF82NF9CSVRfUFJFX1hDT0RFXzNfMSkiOworCQkJCUFSQ0hTX1NU
QU5EQVJEXzY0X0JJVF9QUkVfWENPREVfM18xID0geDg2XzY0OworCQkJCUNPUFlfUEhBU0VfU1RS
SVAgPSBOTzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChTUkNST09UKS9p
bmNsdWRlIiwKKwkJCQkJIiQoU1JDUk9PVCkvc3JjIiwKKwkJCQkpOworCQkJCUlOVEVSTUVESUFU
RV9ESVIgPSBzcmMvaW50ZXJtZWRpYXRlOworCQkJCVBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRI
ID0gL3Vzci9sb2NhbC9pbmNsdWRlOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJ
RkIzOUQwNzIxMjAwRUQ5MjAwMDg4RTY5IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQVJDSFMgPSAiJChB
UkNIU19TVEFOREFSRF82NF9CSVRfUFJFX1hDT0RFXzNfMSkiOworCQkJCUFSQ0hTX1NUQU5EQVJE
XzY0X0JJVF9QUkVfWENPREVfM18xID0geDg2XzY0OworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZ
RVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoU1JDUk9PVCkvaW5jbHVk
ZSIsCisJCQkJCSIkKFNSQ1JPT1QpL3NyYyIsCisJCQkJKTsKKwkJCQlJTlRFUk1FRElBVEVfRElS
ID0gc3JjL2ludGVybWVkaWF0ZTsKKwkJCQlQVUJMSUNfSEVBREVSU19GT0xERVJfUEFUSCA9IC91
c3IvbG9jYWwvaW5jbHVkZTsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJRkIz
OUQwRDIxMjAwRjBFNDAwMDg4RTY5IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNF
Ul9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlOQU1J
Q19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJ
CQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAw
OworCQkJCUlOU1RBTExfUEFUSCA9IC91c3IvbG9jYWwvbGliOworCQkJCVBSRUJJTkRJTkcgPSBO
TzsKKwkJCQlQUk9EVUNUX05BTUUgPSBhbmdsZTsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJ
CX07CisJCUZCMzlEMEQzMTIwMEYwRTQwMDA4OEU2OSAvKiBSZWxlYXNlICovID0geworCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZ
U19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJ
CQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJR0ND
X0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJCQkJR0NDX01PREVMX1RVTklORyA9IEc1
OworCQkJCUlOU1RBTExfUEFUSCA9IC91c3IvbG9jYWwvbGliOworCQkJCVBSRUJJTkRJTkcgPSBO
TzsKKwkJCQlQUk9EVUNUX05BTUUgPSBhbmdsZTsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQlG
QjM5RDA3MzEyMDBFRDkyMDAwODhFNjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJBTkdMRSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owor
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQlGQjM5RDA3MTEyMDBFRDkyMDAwODhFNjkg
LyogRGVidWcgKi8sCisJCQkJRkIzOUQwNzIxMjAwRUQ5MjAwMDg4RTY5IC8qIFJlbGVhc2UgKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJRkIzOUQwRDYxMjAwRjExRTAw
MDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJh
bmdsZSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKKwkJCQlGQjM5RDBEMjEyMDBGMEU0MDAwODhFNjkgLyogRGVidWcgKi8s
CisJCQkJRkIzOUQwRDMxMjAwRjBFNDAwMDg4RTY5IC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rp
b24gKi8KKwl9OworCXJvb3RPYmplY3QgPSBGQjM5RDA3MDEyMDBFRDkyMDAwODhFNjkgLyogUHJv
amVjdCBvYmplY3QgKi87Cit9CkluZGV4OiBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL2lu
Y2x1ZGUvRUdML2VnbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyOSBAQAorLyogLSotIG1v
ZGU6IGM7IHRhYi13aWR0aDogODsgLSotICovCisvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KKy8q
IFJlZmVyZW5jZSB2ZXJzaW9uIG9mIGVnbC5oIGZvciBFR0wgMS40LgorICogJFJldmlzaW9uOiA5
MzU2ICQgb24gJERhdGU6IDIwMDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIw
MDkpICQKKyAqLworCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg
Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdh
cmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJp
YWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz
ZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRv
IHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisq
KiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGlu
IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoq
CisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM
SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S
IEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00s
IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworI2lmbmRlZiBfX2Vn
bF9oXworI2RlZmluZSBfX2VnbF9oXworCisvKiBBbGwgcGxhdGZvcm0tZGVwZW5kZW50IHR5cGVz
IGFuZCBtYWNybyBib2lsZXJwbGF0ZSAoc3VjaCBhcyBFR0xBUEkKKyAqIGFuZCBFR0xBUElFTlRS
WSkgc2hvdWxkIGdvIGluIGVnbHBsYXRmb3JtLmguCisgKi8KKyNpbmNsdWRlIDxFR0wvZWdscGxh
dGZvcm0uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisv
KiBFR0wgVHlwZXMgKi8KKy8qIEVHTGludCBpcyBkZWZpbmVkIGluIGVnbHBsYXRmb3JtLmggKi8K
K3R5cGVkZWYgdW5zaWduZWQgaW50IEVHTEJvb2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIGludCBF
R0xlbnVtOwordHlwZWRlZiB2b2lkICpFR0xDb25maWc7Cit0eXBlZGVmIHZvaWQgKkVHTENvbnRl
eHQ7Cit0eXBlZGVmIHZvaWQgKkVHTERpc3BsYXk7Cit0eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7
Cit0eXBlZGVmIHZvaWQgKkVHTENsaWVudEJ1ZmZlcjsKKworLyogRUdMIFZlcnNpb25pbmcgKi8K
KyNkZWZpbmUgRUdMX1ZFUlNJT05fMV8wCQkJMQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzEJCQkx
CisjZGVmaW5lIEVHTF9WRVJTSU9OXzFfMgkJCTEKKyNkZWZpbmUgRUdMX1ZFUlNJT05fMV8zCQkJ
MQorI2RlZmluZSBFR0xfVkVSU0lPTl8xXzQJCQkxCisKKy8qIEVHTCBFbnVtZXJhbnRzLiBCaXRt
YXNrcyBhbmQgb3RoZXIgZXhjZXB0aW9uYWwgY2FzZXMgYXNpZGUsIG1vc3QKKyAqIGVudW1zIGFy
ZSBhc3NpZ25lZCB1bmlxdWUgdmFsdWVzIHN0YXJ0aW5nIGF0IDB4MzAwMC4KKyAqLworCisvKiBF
R0wgYWxpYXNlcyAqLworI2RlZmluZSBFR0xfRkFMU0UJCQkwCisjZGVmaW5lIEVHTF9UUlVFCQkJ
MQorCisvKiBPdXQtb2YtYmFuZCBoYW5kbGUgdmFsdWVzICovCisjZGVmaW5lIEVHTF9ERUZBVUxU
X0RJU1BMQVkJCSgoRUdMTmF0aXZlRGlzcGxheVR5cGUpMCkKKyNkZWZpbmUgRUdMX05PX0NPTlRF
WFQJCQkoKEVHTENvbnRleHQpMCkKKyNkZWZpbmUgRUdMX05PX0RJU1BMQVkJCQkoKEVHTERpc3Bs
YXkpMCkKKyNkZWZpbmUgRUdMX05PX1NVUkZBQ0UJCQkoKEVHTFN1cmZhY2UpMCkKKworLyogT3V0
LW9mLWJhbmQgYXR0cmlidXRlIHZhbHVlICovCisjZGVmaW5lIEVHTF9ET05UX0NBUkUJCQkoKEVH
TGludCktMSkKKworLyogRXJyb3JzIC8gR2V0RXJyb3IgcmV0dXJuIHZhbHVlcyAqLworI2RlZmlu
ZSBFR0xfU1VDQ0VTUwkJCTB4MzAwMAorI2RlZmluZSBFR0xfTk9UX0lOSVRJQUxJWkVECQkweDMw
MDEKKyNkZWZpbmUgRUdMX0JBRF9BQ0NFU1MJCQkweDMwMDIKKyNkZWZpbmUgRUdMX0JBRF9BTExP
QwkJCTB4MzAwMworI2RlZmluZSBFR0xfQkFEX0FUVFJJQlVURQkJMHgzMDA0CisjZGVmaW5lIEVH
TF9CQURfQ09ORklHCQkJMHgzMDA1CisjZGVmaW5lIEVHTF9CQURfQ09OVEVYVAkJCTB4MzAwNgor
I2RlZmluZSBFR0xfQkFEX0NVUlJFTlRfU1VSRkFDRQkJMHgzMDA3CisjZGVmaW5lIEVHTF9CQURf
RElTUExBWQkJCTB4MzAwOAorI2RlZmluZSBFR0xfQkFEX01BVENICQkJMHgzMDA5CisjZGVmaW5l
IEVHTF9CQURfTkFUSVZFX1BJWE1BUAkJMHgzMDBBCisjZGVmaW5lIEVHTF9CQURfTkFUSVZFX1dJ
TkRPVwkJMHgzMDBCCisjZGVmaW5lIEVHTF9CQURfUEFSQU1FVEVSCQkweDMwMEMKKyNkZWZpbmUg
RUdMX0JBRF9TVVJGQUNFCQkJMHgzMDBECisjZGVmaW5lIEVHTF9DT05URVhUX0xPU1QJCTB4MzAw
RQkvKiBFR0wgMS4xIC0gSU1HX3Bvd2VyX21hbmFnZW1lbnQgKi8KKworLyogUmVzZXJ2ZWQgMHgz
MDBGLTB4MzAxRiBmb3IgYWRkaXRpb25hbCBlcnJvcnMgKi8KKworLyogQ29uZmlnIGF0dHJpYnV0
ZXMgKi8KKyNkZWZpbmUgRUdMX0JVRkZFUl9TSVpFCQkJMHgzMDIwCisjZGVmaW5lIEVHTF9BTFBI
QV9TSVpFCQkJMHgzMDIxCisjZGVmaW5lIEVHTF9CTFVFX1NJWkUJCQkweDMwMjIKKyNkZWZpbmUg
RUdMX0dSRUVOX1NJWkUJCQkweDMwMjMKKyNkZWZpbmUgRUdMX1JFRF9TSVpFCQkJMHgzMDI0Cisj
ZGVmaW5lIEVHTF9ERVBUSF9TSVpFCQkJMHgzMDI1CisjZGVmaW5lIEVHTF9TVEVOQ0lMX1NJWkUJ
CTB4MzAyNgorI2RlZmluZSBFR0xfQ09ORklHX0NBVkVBVAkJMHgzMDI3CisjZGVmaW5lIEVHTF9D
T05GSUdfSUQJCQkweDMwMjgKKyNkZWZpbmUgRUdMX0xFVkVMCQkJMHgzMDI5CisjZGVmaW5lIEVH
TF9NQVhfUEJVRkZFUl9IRUlHSFQJCTB4MzAyQQorI2RlZmluZSBFR0xfTUFYX1BCVUZGRVJfUElY
RUxTCQkweDMwMkIKKyNkZWZpbmUgRUdMX01BWF9QQlVGRkVSX1dJRFRICQkweDMwMkMKKyNkZWZp
bmUgRUdMX05BVElWRV9SRU5ERVJBQkxFCQkweDMwMkQKKyNkZWZpbmUgRUdMX05BVElWRV9WSVNV
QUxfSUQJCTB4MzAyRQorI2RlZmluZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBFCQkweDMwMkYKKyNk
ZWZpbmUgRUdMX1NBTVBMRVMJCQkweDMwMzEKKyNkZWZpbmUgRUdMX1NBTVBMRV9CVUZGRVJTCQkw
eDMwMzIKKyNkZWZpbmUgRUdMX1NVUkZBQ0VfVFlQRQkJMHgzMDMzCisjZGVmaW5lIEVHTF9UUkFO
U1BBUkVOVF9UWVBFCQkweDMwMzQKKyNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUUJ
MHgzMDM1CisjZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRQkweDMwMzYKKyNkZWZp
bmUgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRQkweDMwMzcKKyNkZWZpbmUgRUdMX05PTkUJCQkw
eDMwMzgJLyogQXR0cmliIGxpc3QgdGVybWluYXRvciAqLworI2RlZmluZSBFR0xfQklORF9UT19U
RVhUVVJFX1JHQgkJMHgzMDM5CisjZGVmaW5lIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQQkweDMw
M0EKKyNkZWZpbmUgRUdMX01JTl9TV0FQX0lOVEVSVkFMCQkweDMwM0IKKyNkZWZpbmUgRUdMX01B
WF9TV0FQX0lOVEVSVkFMCQkweDMwM0MKKyNkZWZpbmUgRUdMX0xVTUlOQU5DRV9TSVpFCQkweDMw
M0QKKyNkZWZpbmUgRUdMX0FMUEhBX01BU0tfU0laRQkJMHgzMDNFCisjZGVmaW5lIEVHTF9DT0xP
Ul9CVUZGRVJfVFlQRQkJMHgzMDNGCisjZGVmaW5lIEVHTF9SRU5ERVJBQkxFX1RZUEUJCTB4MzA0
MAorI2RlZmluZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUAkJMHgzMDQxCS8qIFBzZXVkby1hdHRy
aWJ1dGUgKG5vdCBxdWVyeWFibGUpICovCisjZGVmaW5lIEVHTF9DT05GT1JNQU5UCQkJMHgzMDQy
CisKKy8qIFJlc2VydmVkIDB4MzA0MS0weDMwNEYgZm9yIGFkZGl0aW9uYWwgY29uZmlnIGF0dHJp
YnV0ZXMgKi8KKworLyogQ29uZmlnIGF0dHJpYnV0ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgRUdMX1NM
T1dfQ09ORklHCQkJMHgzMDUwCS8qIEVHTF9DT05GSUdfQ0FWRUFUIHZhbHVlICovCisjZGVmaW5l
IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcJMHgzMDUxCS8qIEVHTF9DT05GSUdfQ0FWRUFUIHZh
bHVlICovCisjZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9SR0IJCTB4MzA1MgkvKiBFR0xfVFJBTlNQ
QVJFTlRfVFlQRSB2YWx1ZSAqLworI2RlZmluZSBFR0xfUkdCX0JVRkZFUgkJCTB4MzA4RQkvKiBF
R0xfQ09MT1JfQlVGRkVSX1RZUEUgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX0xVTUlOQU5DRV9CVUZG
RVIJCTB4MzA4RgkvKiBFR0xfQ09MT1JfQlVGRkVSX1RZUEUgdmFsdWUgKi8KKworLyogTW9yZSBj
b25maWcgYXR0cmlidXRlIHZhbHVlcywgZm9yIEVHTF9URVhUVVJFX0ZPUk1BVCAqLworI2RlZmlu
ZSBFR0xfTk9fVEVYVFVSRQkJCTB4MzA1QworI2RlZmluZSBFR0xfVEVYVFVSRV9SR0IJCQkweDMw
NUQKKyNkZWZpbmUgRUdMX1RFWFRVUkVfUkdCQQkJMHgzMDVFCisjZGVmaW5lIEVHTF9URVhUVVJF
XzJECQkJMHgzMDVGCisKKy8qIENvbmZpZyBhdHRyaWJ1dGUgbWFzayBiaXRzICovCisjZGVmaW5l
IEVHTF9QQlVGRkVSX0JJVAkJCTB4MDAwMQkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAq
LworI2RlZmluZSBFR0xfUElYTUFQX0JJVAkJCTB4MDAwMgkvKiBFR0xfU1VSRkFDRV9UWVBFIG1h
c2sgYml0cyAqLworI2RlZmluZSBFR0xfV0lORE9XX0JJVAkJCTB4MDAwNAkvKiBFR0xfU1VSRkFD
RV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVJfQklU
CTB4MDAyMAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfVkdf
QUxQSEFfRk9STUFUX1BSRV9CSVQJMHgwMDQwCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRz
ICovCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFX0JPWF9CSVQgMHgwMjAwCS8qIEVH
TF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisjZGVmaW5lIEVHTF9TV0FQX0JFSEFWSU9SX1BS
RVNFUlZFRF9CSVQgMHgwNDAwCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCisKKyNk
ZWZpbmUgRUdMX09QRU5HTF9FU19CSVQJCTB4MDAwMQkvKiBFR0xfUkVOREVSQUJMRV9UWVBFIG1h
c2sgYml0cyAqLworI2RlZmluZSBFR0xfT1BFTlZHX0JJVAkJCTB4MDAwMgkvKiBFR0xfUkVOREVS
QUJMRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfT1BFTkdMX0VTMl9CSVQJCTB4MDAw
NAkvKiBFR0xfUkVOREVSQUJMRV9UWVBFIG1hc2sgYml0cyAqLworI2RlZmluZSBFR0xfT1BFTkdM
X0JJVAkJCTB4MDAwOAkvKiBFR0xfUkVOREVSQUJMRV9UWVBFIG1hc2sgYml0cyAqLworCisvKiBR
dWVyeVN0cmluZyB0YXJnZXRzICovCisjZGVmaW5lIEVHTF9WRU5ET1IJCQkweDMwNTMKKyNkZWZp
bmUgRUdMX1ZFUlNJT04JCQkweDMwNTQKKyNkZWZpbmUgRUdMX0VYVEVOU0lPTlMJCQkweDMwNTUK
KyNkZWZpbmUgRUdMX0NMSUVOVF9BUElTCQkJMHgzMDhECisKKy8qIFF1ZXJ5U3VyZmFjZSAvIFN1
cmZhY2VBdHRyaWIgLyBDcmVhdGVQYnVmZmVyU3VyZmFjZSB0YXJnZXRzICovCisjZGVmaW5lIEVH
TF9IRUlHSFQJCQkweDMwNTYKKyNkZWZpbmUgRUdMX1dJRFRICQkJMHgzMDU3CisjZGVmaW5lIEVH
TF9MQVJHRVNUX1BCVUZGRVIJCTB4MzA1OAorI2RlZmluZSBFR0xfVEVYVFVSRV9GT1JNQVQJCTB4
MzA4MAorI2RlZmluZSBFR0xfVEVYVFVSRV9UQVJHRVQJCTB4MzA4MQorI2RlZmluZSBFR0xfTUlQ
TUFQX1RFWFRVUkUJCTB4MzA4MgorI2RlZmluZSBFR0xfTUlQTUFQX0xFVkVMCQkweDMwODMKKyNk
ZWZpbmUgRUdMX1JFTkRFUl9CVUZGRVIJCTB4MzA4NgorI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFD
RQkJMHgzMDg3CisjZGVmaW5lIEVHTF9WR19BTFBIQV9GT1JNQVQJCTB4MzA4OAorI2RlZmluZSBF
R0xfSE9SSVpPTlRBTF9SRVNPTFVUSU9OCTB4MzA5MAorI2RlZmluZSBFR0xfVkVSVElDQUxfUkVT
T0xVVElPTgkJMHgzMDkxCisjZGVmaW5lIEVHTF9QSVhFTF9BU1BFQ1RfUkFUSU8JCTB4MzA5Mgor
I2RlZmluZSBFR0xfU1dBUF9CRUhBVklPUgkJMHgzMDkzCisjZGVmaW5lIEVHTF9NVUxUSVNBTVBM
RV9SRVNPTFZFCQkweDMwOTkKKworLyogRUdMX1JFTkRFUl9CVUZGRVIgdmFsdWVzIC8gQmluZFRl
eEltYWdlIC8gUmVsZWFzZVRleEltYWdlIGJ1ZmZlciB0YXJnZXRzICovCisjZGVmaW5lIEVHTF9C
QUNLX0JVRkZFUgkJCTB4MzA4NAorI2RlZmluZSBFR0xfU0lOR0xFX0JVRkZFUgkJMHgzMDg1CisK
Ky8qIE9wZW5WRyBjb2xvciBzcGFjZXMgKi8KKyNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0Vfc1JH
QgkJMHgzMDg5CS8qIEVHTF9WR19DT0xPUlNQQUNFIHZhbHVlICovCisjZGVmaW5lIEVHTF9WR19D
T0xPUlNQQUNFX0xJTkVBUgkweDMwOEEJLyogRUdMX1ZHX0NPTE9SU1BBQ0UgdmFsdWUgKi8KKwor
LyogT3BlblZHIGFscGhhIGZvcm1hdHMgKi8KKyNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9O
T05QUkUJMHgzMDhCCS8qIEVHTF9BTFBIQV9GT1JNQVQgdmFsdWUgKi8KKyNkZWZpbmUgRUdMX1ZH
X0FMUEhBX0ZPUk1BVF9QUkUJCTB4MzA4QwkvKiBFR0xfQUxQSEFfRk9STUFUIHZhbHVlICovCisK
Ky8qIENvbnN0YW50IHNjYWxlIGZhY3RvciBieSB3aGljaCBmcmFjdGlvbmFsIGRpc3BsYXkgcmVz
b2x1dGlvbnMgJgorICogYXNwZWN0IHJhdGlvIGFyZSBzY2FsZWQgd2hlbiBxdWVyaWVkIGFzIGlu
dGVnZXIgdmFsdWVzLgorICovCisjZGVmaW5lIEVHTF9ESVNQTEFZX1NDQUxJTkcJCTEwMDAwCisK
Ky8qIFVua25vd24gZGlzcGxheSByZXNvbHV0aW9uL2FzcGVjdCByYXRpbyAqLworI2RlZmluZSBF
R0xfVU5LTk9XTgkJCSgoRUdMaW50KS0xKQorCisvKiBCYWNrIGJ1ZmZlciBzd2FwIGJlaGF2aW9y
cyAqLworI2RlZmluZSBFR0xfQlVGRkVSX1BSRVNFUlZFRAkJMHgzMDk0CS8qIEVHTF9TV0FQX0JF
SEFWSU9SIHZhbHVlICovCisjZGVmaW5lIEVHTF9CVUZGRVJfREVTVFJPWUVECQkweDMwOTUJLyog
RUdMX1NXQVBfQkVIQVZJT1IgdmFsdWUgKi8KKworLyogQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRC
dWZmZXIgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIEVHTF9PUEVOVkdfSU1BR0UJCTB4MzA5Ngor
CisvKiBRdWVyeUNvbnRleHQgdGFyZ2V0cyAqLworI2RlZmluZSBFR0xfQ09OVEVYVF9DTElFTlRf
VFlQRQkJMHgzMDk3CisKKy8qIENyZWF0ZUNvbnRleHQgYXR0cmlidXRlcyAqLworI2RlZmluZSBF
R0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTgkweDMwOTgKKworLyogTXVsdGlzYW1wbGUgcmVzb2x1
dGlvbiBiZWhhdmlvcnMgKi8KKyNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09MVkVfREVGQVVM
VCAweDMwOUEJLyogRUdMX01VTFRJU0FNUExFX1JFU09MVkUgdmFsdWUgKi8KKyNkZWZpbmUgRUdM
X01VTFRJU0FNUExFX1JFU09MVkVfQk9YCTB4MzA5QgkvKiBFR0xfTVVMVElTQU1QTEVfUkVTT0xW
RSB2YWx1ZSAqLworCisvKiBCaW5kQVBJL1F1ZXJ5QVBJIHRhcmdldHMgKi8KKyNkZWZpbmUgRUdM
X09QRU5HTF9FU19BUEkJCTB4MzBBMAorI2RlZmluZSBFR0xfT1BFTlZHX0FQSQkJCTB4MzBBMQor
I2RlZmluZSBFR0xfT1BFTkdMX0FQSQkJCTB4MzBBMgorCisvKiBHZXRDdXJyZW50U3VyZmFjZSB0
YXJnZXRzICovCisjZGVmaW5lIEVHTF9EUkFXCQkJMHgzMDU5CisjZGVmaW5lIEVHTF9SRUFECQkJ
MHgzMDVBCisKKy8qIFdhaXROYXRpdmUgZW5naW5lcyAqLworI2RlZmluZSBFR0xfQ09SRV9OQVRJ
VkVfRU5HSU5FCQkweDMwNUIKKworLyogRUdMIDEuMiB0b2tlbnMgcmVuYW1lZCBmb3IgY29uc2lz
dGVuY3kgaW4gRUdMIDEuMyAqLworI2RlZmluZSBFR0xfQ09MT1JTUEFDRQkJCUVHTF9WR19DT0xP
UlNQQUNFCisjZGVmaW5lIEVHTF9BTFBIQV9GT1JNQVQJCUVHTF9WR19BTFBIQV9GT1JNQVQKKyNk
ZWZpbmUgRUdMX0NPTE9SU1BBQ0Vfc1JHQgkJRUdMX1ZHX0NPTE9SU1BBQ0Vfc1JHQgorI2RlZmlu
ZSBFR0xfQ09MT1JTUEFDRV9MSU5FQVIJCUVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUgorI2RlZmlu
ZSBFR0xfQUxQSEFfRk9STUFUX05PTlBSRQkJRUdMX1ZHX0FMUEhBX0ZPUk1BVF9OT05QUkUKKyNk
ZWZpbmUgRUdMX0FMUEhBX0ZPUk1BVF9QUkUJCUVHTF9WR19BTFBIQV9GT1JNQVRfUFJFCisKKy8q
IEVHTCBleHRlbnNpb25zIG11c3QgcmVxdWVzdCBlbnVtIGJsb2NrcyBmcm9tIHRoZSBLaHJvbm9z
CisgKiBBUEkgUmVnaXN0cmFyLCB3aG8gbWFpbnRhaW5zIHRoZSBlbnVtZXJhbnQgcmVnaXN0cnku
IFN1Ym1pdAorICogYSBidWcgaW4gS2hyb25vcyBCdWd6aWxsYSBhZ2FpbnN0IHRhc2sgIlJlZ2lz
dHJ5Ii4KKyAqLworCisKKworLyogRUdMIEZ1bmN0aW9ucyAqLworCitFR0xBUEkgRUdMaW50IEVH
TEFQSUVOVFJZIGVnbEdldEVycm9yKHZvaWQpOworCitFR0xBUEkgRUdMRGlzcGxheSBFR0xBUElF
TlRSWSBlZ2xHZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQpOworRUdM
QVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsSW5pdGlhbGl6ZShFR0xEaXNwbGF5IGRweSwg
RUdMaW50ICptYWpvciwgRUdMaW50ICptaW5vcik7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xUZXJtaW5hdGUoRUdMRGlzcGxheSBkcHkpOworCitFR0xBUEkgY29uc3QgY2hhciAq
IEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgbmFtZSk7
CisKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxh
eSBkcHksIEVHTENvbmZpZyAqY29uZmlncywKKwkJCSBFR0xpbnQgY29uZmlnX3NpemUsIEVHTGlu
dCAqbnVtX2NvbmZpZyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xDaG9vc2VD
b25maWcoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QsCisJCQkgICBF
R0xDb25maWcgKmNvbmZpZ3MsIEVHTGludCBjb25maWdfc2l6ZSwKKwkJCSAgIEVHTGludCAqbnVt
X2NvbmZpZyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRDb25maWdBdHRy
aWIoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkgICAgICBFR0xpbnQgYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKKworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkg
ZWdsQ3JlYXRlV2luZG93U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywK
KwkJCQkgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLAorCQkJCSAgY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCk7CitFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVQYnVmZmVy
U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKKwkJCQkgICBjb25zdCBF
R0xpbnQgKmF0dHJpYl9saXN0KTsKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENy
ZWF0ZVBpeG1hcFN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCisJCQkJ
ICBFR0xOYXRpdmVQaXhtYXBUeXBlIHBpeG1hcCwKKwkJCQkgIGNvbnN0IEVHTGludCAqYXR0cmli
X2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveVN1cmZhY2Uo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBF
R0xBUElFTlRSWSBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwKKwkJCSAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xCaW5kQVBJKEVHTGVudW0gYXBpKTsKK0VHTEFQSSBF
R0xlbnVtIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5QVBJKHZvaWQpOworCitFR0xBUEkgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBlZ2xXYWl0Q2xpZW50KHZvaWQpOworCitFR0xBUEkgRUdMQm9vbGVhbiBF
R0xBUElFTlRSWSBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpOworCitFR0xBUEkgRUdMU3VyZmFjZSBF
R0xBUElFTlRSWSBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcigKKwkgICAgICBFR0xE
aXNwbGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorCSAg
ICAgIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworCitFR0xB
UEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5
LCBFR0xTdXJmYWNlIHN1cmZhY2UsCisJCQkgICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZh
bHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEJpbmRUZXhJbWFnZShFR0xE
aXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFJlbGVhc2VUZXhJbWFnZShFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKTsKKworCitFR0xBUEkgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBlZ2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRl
cnZhbCk7CisKKworRUdMQVBJIEVHTENvbnRleHQgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlQ29udGV4
dChFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKKwkJCSAgICBFR0xDb250ZXh0IHNo
YXJlX2NvbnRleHQsCisJCQkgICAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNwbGF5IGRweSwg
RUdMQ29udGV4dCBjdHgpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsTWFrZUN1
cnJlbnQoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2UgZHJhdywKKwkJCSAgRUdMU3VyZmFjZSBy
ZWFkLCBFR0xDb250ZXh0IGN0eCk7CisKK0VHTEFQSSBFR0xDb250ZXh0IEVHTEFQSUVOVFJZIGVn
bEdldEN1cnJlbnRDb250ZXh0KHZvaWQpOworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkg
ZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMaW50IHJlYWRkcmF3KTsKK0VHTEFQSSBFR0xEaXNwbGF5
IEVHTEFQSUVOVFJZIGVnbEdldEN1cnJlbnREaXNwbGF5KHZvaWQpOworRUdMQVBJIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0
IGN0eCwKKwkJCSAgIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xXYWl0R0wodm9pZCk7CitFR0xBUEkgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBlZ2xXYWl0TmF0aXZlKEVHTGludCBlbmdpbmUpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsU3dhcEJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZh
Y2Ugc3VyZmFjZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xDb3B5QnVmZmVy
cyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLAorCQkJICBFR0xOYXRpdmVQaXht
YXBUeXBlIHRhcmdldCk7CisKKy8qIFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIHBvaW50ZXIg
dHlwZSwgd2hvc2UgbmFtZSBpbmRpY2F0ZXMgaXQgbXVzdAorICogYmUgY2FzdCB0byB0aGUgcHJv
cGVyIHR5cGUgKmFuZCBjYWxsaW5nIGNvbnZlbnRpb24qIGJlZm9yZSB1c2UuCisgKi8KK3R5cGVk
ZWYgdm9pZCAoKl9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpKHZvaWQp
OworCisvKiBOb3csIGRlZmluZSBlZ2xHZXRQcm9jQWRkcmVzcyB1c2luZyB0aGUgZ2VuZXJpYyBm
dW5jdGlvbiBwdHIuIHR5cGUgKi8KK0VHTEFQSSBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlIEVHTEFQSUVOVFJZCisgICAgICAgZWdsR2V0UHJvY0FkZHJlc3MoY29uc3Qg
Y2hhciAqcHJvY25hbWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5k
aWYgLyogX19lZ2xfaF8gKi8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIyIEBACisj
aWZuZGVmIF9fZWdsZXh0X2hfCisjZGVmaW5lIF9fZWdsZXh0X2hfCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0y
MDA5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29w
eSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg
KHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCBy
ZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0
byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJs
aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBw
ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo
ZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwg
V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5D
TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN
RU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lT
RSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFU
RVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyov
CisKKyNpbmNsdWRlIDxFR0wvZWdscGxhdGZvcm0uaD4KKworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEhlYWRlciBm
aWxlIHZlcnNpb24gbnVtYmVyICovCisvKiBDdXJyZW50IHZlcnNpb24gYXQgaHR0cDovL3d3dy5r
aHJvbm9zLm9yZy9yZWdpc3RyeS9lZ2wvICovCisvKiAkUmV2aXNpb246IDEwNzk1ICQgb24gJERh
dGU6IDIwMTAtMDMtMTkgMTc6MDQ6MTcgLTA3MDAgKEZyaSwgMTkgTWFyIDIwMTApICQgKi8KKyNk
ZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDUKKworI2lmbmRlZiBFR0xfS0hSX2NvbmZpZ19hdHRy
aWJzCisjZGVmaW5lIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMgMQorI2RlZmluZSBFR0xfQ09ORk9S
TUFOVF9LSFIJCQkweDMwNDIJLyogRUdMQ29uZmlnIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xf
VkdfQ09MT1JTUEFDRV9MSU5FQVJfQklUX0tIUgkweDAwMjAJLyogRUdMX1NVUkZBQ0VfVFlQRSBi
aXRmaWVsZCAqLworI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRV9CSVRfS0hSCQkweDAw
NDAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0tIUl9sb2NrX3N1cmZhY2UKKyNkZWZpbmUgRUdMX0tIUl9sb2NrX3N1cmZhY2UgMQorI2RlZmlu
ZSBFR0xfUkVBRF9TVVJGQUNFX0JJVF9LSFIJCTB4MDAwMQkvKiBFR0xfTE9DS19VU0FHRV9ISU5U
X0tIUiBiaXRmaWVsZCAqLworI2RlZmluZSBFR0xfV1JJVEVfU1VSRkFDRV9CSVRfS0hSCQkweDAw
MDIJLyogRUdMX0xPQ0tfVVNBR0VfSElOVF9LSFIgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX0xP
Q0tfU1VSRkFDRV9CSVRfS0hSCQkweDAwODAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAq
LworI2RlZmluZSBFR0xfT1BUSU1BTF9GT1JNQVRfQklUX0tIUgkJMHgwMTAwCS8qIEVHTF9TVVJG
QUNFX1RZUEUgYml0ZmllbGQgKi8KKyNkZWZpbmUgRUdMX01BVENIX0ZPUk1BVF9LSFIJCQkweDMw
NDMJLyogRUdMQ29uZmlnIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfRk9STUFUX1JHQl81NjVf
RVhBQ1RfS0hSCQkweDMwQzAJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KKyNkZWZp
bmUgRUdMX0ZPUk1BVF9SR0JfNTY1X0tIUgkJCTB4MzBDMQkvKiBFR0xfTUFUQ0hfRk9STUFUX0tI
UiB2YWx1ZSAqLworI2RlZmluZSBFR0xfRk9STUFUX1JHQkFfODg4OF9FWEFDVF9LSFIJCTB4MzBD
MgkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLworI2RlZmluZSBFR0xfRk9STUFUX1JH
QkFfODg4OF9LSFIJCTB4MzBDMwkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLworI2Rl
ZmluZSBFR0xfTUFQX1BSRVNFUlZFX1BJWEVMU19LSFIJCTB4MzBDNAkvKiBlZ2xMb2NrU3VyZmFj
ZUtIUiBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0xPQ0tfVVNBR0VfSElOVF9LSFIJCQkweDMw
QzUJLyogZWdsTG9ja1N1cmZhY2VLSFIgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBf
UE9JTlRFUl9LSFIJCQkweDMwQzYJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2Rl
ZmluZSBFR0xfQklUTUFQX1BJVENIX0tIUgkJCTB4MzBDNwkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0
cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfT1JJR0lOX0tIUgkJCTB4MzBDOAkvKiBlZ2xR
dWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfUkVEX09G
RlNFVF9LSFIJCTB4MzBDOQkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCisjZGVmaW5l
IEVHTF9CSVRNQVBfUElYRUxfR1JFRU5fT0ZGU0VUX0tIUgkweDMwQ0EJLyogZWdsUXVlcnlTdXJm
YWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0JMVUVfT0ZGU0VUX0tI
UgkweDMwQ0IJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfQklU
TUFQX1BJWEVMX0FMUEhBX09GRlNFVF9LSFIJMHgzMENDCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRy
aWJ1dGUgKi8KKyNkZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9MVU1JTkFOQ0VfT0ZGU0VUX0tIUgkw
eDMwQ0QJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLworI2RlZmluZSBFR0xfTE9XRVJf
TEVGVF9LSFIJCQkweDMwQ0UJLyogRUdMX0JJVE1BUF9PUklHSU5fS0hSIHZhbHVlICovCisjZGVm
aW5lIEVHTF9VUFBFUl9MRUZUX0tIUgkJCTB4MzBDRgkvKiBFR0xfQklUTUFQX09SSUdJTl9LSFIg
dmFsdWUgKi8KKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xCb29sZWFu
IEVHTEFQSUVOVFJZIGVnbExvY2tTdXJmYWNlS0hSIChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1
cmZhY2Ugc3VyZmFjZSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9v
bGVhbiBFR0xBUElFTlRSWSBlZ2xVbmxvY2tTdXJmYWNlS0hSIChFR0xEaXNwbGF5IGRpc3BsYXks
IEVHTFN1cmZhY2Ugc3VyZmFjZSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xMT0NLU1VSRkFDRUtIUlBS
T0MpIChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xV
TkxPQ0tTVVJGQUNFS0hSUFJPQykgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJm
YWNlKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfaW1hZ2UKKyNkZWZpbmUgRUdMX0tIUl9p
bWFnZSAxCisjZGVmaW5lIEVHTF9OQVRJVkVfUElYTUFQX0tIUgkJCTB4MzBCMAkvKiBlZ2xDcmVh
dGVJbWFnZUtIUiB0YXJnZXQgKi8KK3R5cGVkZWYgdm9pZCAqRUdMSW1hZ2VLSFI7CisjZGVmaW5l
IEVHTF9OT19JTUFHRV9LSFIJCQkoKEVHTEltYWdlS0hSKTApCisjaWZkZWYgRUdMX0VHTEVYVF9Q
Uk9UT1RZUEVTCitFR0xBUEkgRUdMSW1hZ2VLSFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlSW1hZ2VL
SFIgKEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMZW51bSB0YXJnZXQsIEVHTENs
aWVudEJ1ZmZlciBidWZmZXIsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveUltYWdlS0hSIChFR0xEaXNwbGF5IGRweSwg
RUdMSW1hZ2VLSFIgaW1hZ2UpOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwor
dHlwZWRlZiBFR0xJbWFnZUtIUiAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURUlNQUdFS0hSUFJP
QykgKEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMZW51bSB0YXJnZXQsIEVHTENs
aWVudEJ1ZmZlciBidWZmZXIsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBF
R0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQykgKEVHTERp
c3BsYXkgZHB5LCBFR0xJbWFnZUtIUiBpbWFnZSk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hS
X3ZnX3BhcmVudF9pbWFnZQorI2RlZmluZSBFR0xfS0hSX3ZnX3BhcmVudF9pbWFnZSAxCisjZGVm
aW5lIEVHTF9WR19QQVJFTlRfSU1BR0VfS0hSCQkJMHgzMEJBCS8qIGVnbENyZWF0ZUltYWdlS0hS
IHRhcmdldCAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF90ZXh0dXJlXzJEX2ltYWdl
CisjZGVmaW5lIEVHTF9LSFJfZ2xfdGV4dHVyZV8yRF9pbWFnZSAxCisjZGVmaW5lIEVHTF9HTF9U
RVhUVVJFXzJEX0tIUgkJCTB4MzBCMQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNk
ZWZpbmUgRUdMX0dMX1RFWFRVUkVfTEVWRUxfS0hSCQkweDMwQkMJLyogZWdsQ3JlYXRlSW1hZ2VL
SFIgYXR0cmlidXRlICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfY3Vi
ZW1hcF9pbWFnZQorI2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfY3ViZW1hcF9pbWFnZSAxCisj
ZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1hfS0hSCTB4MzBCMwkvKiBl
Z2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWF9LSFIJMHgzMEI0CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwor
I2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZX0tIUgkweDMwQjUJLyog
ZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCisjZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1lfS0hSCTB4MzBCNgkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8K
KyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWl9LSFIJMHgzMEI3CS8q
IGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aX0tIUgkweDMwQjgJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICov
CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfM0RfaW1hZ2UKKyNkZWZpbmUg
RUdMX0tIUl9nbF90ZXh0dXJlXzNEX2ltYWdlIDEKKyNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfM0Rf
S0hSCQkJMHgzMEIyCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLworI2RlZmluZSBFR0xf
R0xfVEVYVFVSRV9aT0ZGU0VUX0tIUgkJMHgzMEJECS8qIGVnbENyZWF0ZUltYWdlS0hSIGF0dHJp
YnV0ZSAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9nbF9yZW5kZXJidWZmZXJfaW1hZ2UK
KyNkZWZpbmUgRUdMX0tIUl9nbF9yZW5kZXJidWZmZXJfaW1hZ2UgMQorI2RlZmluZSBFR0xfR0xf
UkVOREVSQlVGRkVSX0tIUgkJCTB4MzBCOQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8K
KyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfcmV1c2FibGVfc3luYworI2RlZmluZSBFR0xfS0hS
X3JldXNhYmxlX3N5bmMgMQorCit0eXBlZGVmIHZvaWQqIEVHTFN5bmNLSFI7Cit0eXBlZGVmIGto
cm9ub3NfdXRpbWVfbmFub3NlY29uZHNfdCBFR0xUaW1lS0hSOworCisjZGVmaW5lIEVHTF9TWU5D
X1NUQVRVU19LSFIJCQkweDMwRjEKKyNkZWZpbmUgRUdMX1NJR05BTEVEX0tIUgkJCTB4MzBGMgor
I2RlZmluZSBFR0xfVU5TSUdOQUxFRF9LSFIJCQkweDMwRjMKKyNkZWZpbmUgRUdMX1RJTUVPVVRf
RVhQSVJFRF9LSFIJCQkweDMwRjUKKyNkZWZpbmUgRUdMX0NPTkRJVElPTl9TQVRJU0ZJRURfS0hS
CQkweDMwRjYKKyNkZWZpbmUgRUdMX1NZTkNfVFlQRV9LSFIJCQkweDMwRjcKKyNkZWZpbmUgRUdM
X1NZTkNfUkVVU0FCTEVfS0hSCQkJMHgzMEZBCisjZGVmaW5lIEVHTF9TWU5DX0ZMVVNIX0NPTU1B
TkRTX0JJVF9LSFIJCTB4MDAwMQkvKiBlZ2xDbGllbnRXYWl0U3luY0tIUiA8ZmxhZ3M+IGJpdGZp
ZWxkICovCisjZGVmaW5lIEVHTF9GT1JFVkVSX0tIUgkJCQkweEZGRkZGRkZGRkZGRkZGRkZ1bGwK
KyNkZWZpbmUgRUdMX05PX1NZTkNfS0hSCQkJCSgoRUdMU3luY0tIUikwKQorI2lmZGVmIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTFN5bmNLSFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRl
U3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMZW51bSB0eXBlLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lTeW5jS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMpOworRUdMQVBJIEVHTGludCBFR0xBUElF
TlRSWSBlZ2xDbGllbnRXYWl0U3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5j
LCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVLSFIgdGltZW91dCk7CitFR0xBUEkgRUdMQm9vbGVhbiBF
R0xBUElFTlRSWSBlZ2xTaWduYWxTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRT
eW5jQXR0cmliS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBhdHRy
aWJ1dGUsIEVHTGludCAqdmFsdWUpOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwordHlwZWRlZiBFR0xTeW5jS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1lOQ0tIUlBS
T0MpIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSB0eXBlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lTWU5D
S0hSUFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMpOwordHlwZWRlZiBFR0xp
bnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xDTElFTlRXQUlUU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVLSFIgdGltZW91dCk7
Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTSUdOQUxTWU5DS0hSUFJP
QykgKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGVudW0gbW9kZSk7Cit0eXBl
ZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTWU5DQVRUUklCS0hSUFJPQykg
KEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGlu
dCAqdmFsdWUpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9pbWFnZV9iYXNlCisjZGVmaW5l
IEVHTF9LSFJfaW1hZ2VfYmFzZSAxCisvKiBNb3N0IGludGVyZmFjZXMgZGVmaW5lZCBieSBFR0xf
S0hSX2ltYWdlX3BpeG1hcCBhYm92ZSAqLworI2RlZmluZSBFR0xfSU1BR0VfUFJFU0VSVkVEX0tI
UgkJCTB4MzBEMgkvKiBlZ2xDcmVhdGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9LSFJfaW1hZ2VfcGl4bWFwCisjZGVmaW5lIEVHTF9LSFJfaW1hZ2VfcGl4bWFw
IDEKKy8qIEludGVyZmFjZXMgZGVmaW5lZCBieSBFR0xfS0hSX2ltYWdlIGFib3ZlICovCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfSU1HX2NvbnRleHRfcHJpb3JpdHkKKyNkZWZpbmUgRUdMX0lNR19j
b250ZXh0X3ByaW9yaXR5IDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfTEVWRUxfSU1H
CQkweDMxMDAKKyNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfSElHSF9JTUcJCTB4MzEwMQor
I2RlZmluZSBFR0xfQ09OVEVYVF9QUklPUklUWV9NRURJVU1fSU1HCQkweDMxMDIKKyNkZWZpbmUg
RUdMX0NPTlRFWFRfUFJJT1JJVFlfTE9XX0lNRwkJMHgzMTAzCisjZW5kaWYKKworI2lmbmRlZiBF
R0xfTlZfY292ZXJhZ2Vfc2FtcGxlCisjZGVmaW5lIEVHTF9OVl9jb3ZlcmFnZV9zYW1wbGUgMQor
I2RlZmluZSBFR0xfQ09WRVJBR0VfQlVGRkVSU19OViAweDMwRTAKKyNkZWZpbmUgRUdMX0NPVkVS
QUdFX1NBTVBMRVNfTlYgMHgzMEUxCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfZGVwdGhfbm9u
bGluZWFyCisjZGVmaW5lIEVHTF9OVl9kZXB0aF9ub25saW5lYXIgMQorI2RlZmluZSBFR0xfREVQ
VEhfRU5DT0RJTkdfTlYgMHgzMEUyCisjZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OT05FX05W
IDAKKyNkZWZpbmUgRUdMX0RFUFRIX0VOQ09ESU5HX05PTkxJTkVBUl9OViAweDMwRTMKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9OVl9zeW5jCisjZGVmaW5lIEVHTF9OVl9zeW5jIDEKKyNkZWZpbmUg
RUdMX1NZTkNfUFJJT1JfQ09NTUFORFNfQ09NUExFVEVfTlYJMHgzMEU2CisjZGVmaW5lIEVHTF9T
WU5DX1NUQVRVU19OVgkJCTB4MzBFNworI2RlZmluZSBFR0xfU0lHTkFMRURfTlYJCQkJMHgzMEU4
CisjZGVmaW5lIEVHTF9VTlNJR05BTEVEX05WCQkJMHgzMEU5CisjZGVmaW5lIEVHTF9TWU5DX0ZM
VVNIX0NPTU1BTkRTX0JJVF9OVgkJMHgwMDAxCisjZGVmaW5lIEVHTF9GT1JFVkVSX05WCQkJCTB4
RkZGRkZGRkZGRkZGRkZGRnVsbAorI2RlZmluZSBFR0xfQUxSRUFEWV9TSUdOQUxFRF9OVgkJCTB4
MzBFQQorI2RlZmluZSBFR0xfVElNRU9VVF9FWFBJUkVEX05WCQkJMHgzMEVCCisjZGVmaW5lIEVH
TF9DT05ESVRJT05fU0FUSVNGSUVEX05WCQkweDMwRUMKKyNkZWZpbmUgRUdMX1NZTkNfVFlQRV9O
VgkJCTB4MzBFRAorI2RlZmluZSBFR0xfU1lOQ19DT05ESVRJT05fTlYJCQkweDMwRUUKKyNkZWZp
bmUgRUdMX1NZTkNfRkVOQ0VfTlYJCQkweDMwRUYKKyNkZWZpbmUgRUdMX05PX1NZTkNfTlYJCQkJ
KChFR0xTeW5jTlYpMCkKK3R5cGVkZWYgdm9pZCogRUdMU3luY05WOwordHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgRUdMVGltZU5WOworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
U3luY05WIGVnbENyZWF0ZUZlbmNlU3luY05WIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBjb25k
aXRpb24sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQm9vbGVhbiBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xCb29sZWFuIGVnbEZlbmNlTlYgKEVHTFN5bmNO
ViBzeW5jKTsKK0VHTGludCBlZ2xDbGllbnRXYWl0U3luY05WIChFR0xTeW5jTlYgc3luYywgRUdM
aW50IGZsYWdzLCBFR0xUaW1lTlYgdGltZW91dCk7CitFR0xCb29sZWFuIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xCb29sZWFuIGVnbEdldFN5bmNB
dHRyaWJOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUp
OworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xTeW5jTlYg
KEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVGRU5DRVNZTkNOVlBST0MpIChFR0xEaXNwbGF5IGRw
eSwgRUdMZW51bSBjb25kaXRpb24sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRl
ZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNZTkNOVlBST0MpIChFR0xT
eW5jTlYgc3luYyk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xGRU5D
RU5WUFJPQykgKEVHTFN5bmNOViBzeW5jKTsKK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAg
UEZORUdMQ0xJRU5UV0FJVFNZTkNOVlBST0MpIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGZsYWdz
LCBFR0xUaW1lTlYgdGltZW91dCk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQ
Rk5FR0xTSUdOQUxTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7Cit0
eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTWU5DQVRUUklCTlZQUk9D
KSAoRUdMU3luY05WIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworI2Vu
ZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogQU5H
TEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRl
L0VHTC9lZ2xwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9FR0wvZWds
cGxhdGZvcm0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19lZ2xw
bGF0Zm9ybV9oXworI2RlZmluZSBfX2VnbHBsYXRmb3JtX2hfCisKKy8qCisqKiBDb3B5cmlnaHQg
KGMpIDIwMDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiogUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n
IGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxz
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBsaW1pdGF0aW9uIHRo
ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorKiogZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMsIGFu
ZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNo
ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyoq
CisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0
aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVE
ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBFWFBSRVNTIE9SIElN
UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyoq
IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P
TklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlS
SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhF
UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorKiogVE9SVCBP
UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU
SEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRF
UklBTFMuCisqLworCisvKiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMg
Zm9yIGVnbC5oCisgKiAkUmV2aXNpb246IDk3MjQgJCBvbiAkRGF0ZTogMjAwOS0xMi0wMiAwMjow
NTozMyAtMDgwMCAoV2VkLCAwMiBEZWMgMjAwOSkgJAorICoKKyAqIEFkb3B0ZXJzIG1heSBtb2Rp
Znkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZvcm0uCisg
KiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBL
aHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2
ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAqIGJ5IHNlbmRp
bmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9raHJvbm9zLm9y
Zy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3QgIkVHTCIgY29t
cG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9raHJwbGF0Zm9ybS5oPgor
CisvKiBNYWNyb3MgdXNlZCBpbiBFR0wgZnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9ucy4K
KyAqCisgKiBFR0wgZnVuY3Rpb25zIHNob3VsZCBiZSBwcm90b3R5cGVkIGFzOgorICoKKyAqIEVH
TEFQSSByZXR1cm4tdHlwZSBFR0xBUElFTlRSWSBlZ2xGdW5jdGlvbihhcmd1bWVudHMpOworICog
dHlwZWRlZiByZXR1cm4tdHlwZSAoRVhQQVBJRU5UUllQIFBGTkVHTEZVTkNUSU9OUFJPQykgKGFy
Z3VtZW50cyk7CisgKgorICogS0hST05PU19BUElDQUxMIGFuZCBLSFJPTk9TX0FQSUVOVFJZIGFy
ZSBkZWZpbmVkIGluIEtIUi9raHJwbGF0Zm9ybS5oCisgKi8KKworI2lmbmRlZiBFR0xBUEkKKyNk
ZWZpbmUgRUdMQVBJIEtIUk9OT1NfQVBJQ0FMTAorI2VuZGlmCisKKyNpZm5kZWYgRUdMQVBJRU5U
UlkKKyNkZWZpbmUgRUdMQVBJRU5UUlkgIEtIUk9OT1NfQVBJRU5UUlkKKyNlbmRpZgorI2RlZmlu
ZSBFR0xBUElFTlRSWVAgRUdMQVBJRU5UUlkqCisKKy8qIFRoZSB0eXBlcyBOYXRpdmVEaXNwbGF5
VHlwZSwgTmF0aXZlV2luZG93VHlwZSwgYW5kIE5hdGl2ZVBpeG1hcFR5cGUKKyAqIGFyZSBhbGlh
c2VzIG9mIHdpbmRvdy1zeXN0ZW0tZGVwZW5kZW50IHR5cGVzLCBzdWNoIGFzIFggRGlzcGxheSAq
IG9yCisgKiBXaW5kb3dzIERldmljZSBDb250ZXh0LiBUaGV5IG11c3QgYmUgZGVmaW5lZCBpbiBw
bGF0Zm9ybS1zcGVjaWZpYworICogY29kZSBiZWxvdy4gVGhlIEVHTC1wcmVmaXhlZCB2ZXJzaW9u
cyBvZiBOYXRpdmUqVHlwZSBhcmUgdGhlIHNhbWUKKyAqIHR5cGVzLCByZW5hbWVkIGluIEVHTCAx
LjMgc28gYWxsIHR5cGVzIGluIHRoZSBBUEkgc3RhcnQgd2l0aCAiRUdMIi4KKyAqLworCisjaWYg
ZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19WQzMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lO
X18pICYmICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18pIC8qIFdpbjMyIGFuZCBXaW5DRSAqLwor
I2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4g
MQorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorCit0eXBlZGVmIEhEQyAgICAgRUdMTmF0
aXZlRGlzcGxheVR5cGU7Cit0eXBlZGVmIEhCSVRNQVAgRUdMTmF0aXZlUGl4bWFwVHlwZTsKK3R5
cGVkZWYgSFdORCAgICBFR0xOYXRpdmVXaW5kb3dUeXBlOworCisjZWxpZiBkZWZpbmVkKF9fV0lO
U0NXX18pIHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykgIC8qIFN5bWJpYW4gKi8KKwordHlwZWRl
ZiBpbnQgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKK3R5cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2lu
ZG93VHlwZTsKK3R5cGVkZWYgdm9pZCAqRUdMTmF0aXZlUGl4bWFwVHlwZTsKKworI2VsaWYgZGVm
aW5lZChfX3VuaXhfXykKKworLyogWDExICh0ZW50YXRpdmUpICAqLworI2luY2x1ZGUgPFgxMS9Y
bGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisKK3R5cGVkZWYgRGlzcGxheSAqRUdMTmF0
aXZlRGlzcGxheVR5cGU7Cit0eXBlZGVmIFBpeG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Cit0
eXBlZGVmIFdpbmRvdyAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7CisKKyNlbHNlCisjZXJyb3IgIlBs
YXRmb3JtIG5vdCByZWNvZ25pemVkIgorI2VuZGlmCisKKy8qIEVHTCAxLjIgdHlwZXMsIHJlbmFt
ZWQgZm9yIGNvbnNpc3RlbmN5IGluIEVHTCAxLjMgKi8KK3R5cGVkZWYgRUdMTmF0aXZlRGlzcGxh
eVR5cGUgTmF0aXZlRGlzcGxheVR5cGU7Cit0eXBlZGVmIEVHTE5hdGl2ZVBpeG1hcFR5cGUgIE5h
dGl2ZVBpeG1hcFR5cGU7Cit0eXBlZGVmIEVHTE5hdGl2ZVdpbmRvd1R5cGUgIE5hdGl2ZVdpbmRv
d1R5cGU7CisKKworLyogRGVmaW5lIEVHTGludC4gVGhpcyBtdXN0IGJlIGEgc2lnbmVkIGludGVn
cmFsIHR5cGUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4KKyAqIGFsbCBsZWdhbCBhdHRyaWJ1dGUg
bmFtZXMgYW5kIHZhbHVlcyBwYXNzZWQgaW50byBhbmQgb3V0IG9mIEVHTCwgd2hldGhlcgorICog
dGhlaXIgdHlwZSBpcyBib29sZWFuLCBiaXRtYXNrLCBlbnVtZXJhbnQgKHN5bWJvbGljIGNvbnN0
YW50KSwgaW50ZWdlciwKKyAqIGhhbmRsZSwgb3Igb3RoZXIuICBXaGlsZSBpbiBnZW5lcmFsIGEg
MzItYml0IGludGVnZXIgd2lsbCBzdWZmaWNlLCBpZgorICogaGFuZGxlcyBhcmUgNjQgYml0IHR5
cGVzLCB0aGVuIEVHTGludCBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCA2NC1iaXQKKyAq
IGludGVnZXIgdHlwZS4KKyAqLwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgRUdMaW50OworCisj
ZW5kaWYgLyogX19lZ2xwbGF0Zm9ybV9oICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2ds
Mi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYy
MSBAQAorI2lmbmRlZiBfX2dsMl9oXworI2RlZmluZSBfX2dsMl9oXworCisvKiAkUmV2aXNpb246
IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIyOjM1OjM0IC0wODAwICMkICovCisKKyNp
bmNsdWRlIDxHTEVTMi9nbDJwbGF0Zm9ybS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qCisgKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgorICogMi4wLiBGb3IgZGV0
YWlscywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgorICovCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKwordHlwZWRlZiB2b2lkICAgICAgICAgICAgIEdMdm9pZDsKK3R5cGVkZWYgY2hhciAg
ICAgICAgICAgICBHTGNoYXI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0xlbnVtOwordHlw
ZWRlZiB1bnNpZ25lZCBjaGFyICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAg
ICBHTGJpdGZpZWxkOwordHlwZWRlZiBraHJvbm9zX2ludDhfdCAgIEdMYnl0ZTsKK3R5cGVkZWYg
c2hvcnQgICAgICAgICAgICBHTHNob3J0OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgIEdMaW50
OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVmIGtocm9ub3NfdWlu
dDhfdCAgR0x1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBHTHVzaG9ydDsKK3R5cGVk
ZWYgdW5zaWduZWQgaW50ICAgICBHTHVpbnQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xm
bG9hdDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGNsYW1wZjsKK3R5cGVkZWYga2hyb25v
c19pbnQzMl90ICBHTGZpeGVkOworCisvKiBHTCB0eXBlcyBmb3IgaGFuZGxpbmcgbGFyZ2UgdmVy
dGV4IGJ1ZmZlciBvYmplY3RzICovCit0eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7
Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKKworLyogT3BlbkdMIEVTIGNv
cmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAg
IDEKKworLyogQ2xlYXJCdWZmZXJNYXNrICovCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQg
ICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVCAg
ICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQgICAgICAg
ICAgICAgICAweDAwMDA0MDAwCisKKy8qIEJvb2xlYW4gKi8KKyNkZWZpbmUgR0xfRkFMU0UgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfVFJVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKKworLyogQmVnaW5Nb2RlICovCisjZGVmaW5lIEdMX1BPSU5UUyAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgR0xfTElORVMgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBHTF9MSU5FX0xPT1AgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDAyCisjZGVmaW5lIEdMX0xJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICAweDAw
MDMKKyNkZWZpbmUgR0xfVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2Rl
ZmluZSBHTF9UUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIEdM
X1RSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICAweDAwMDYKKworLyogQWxwaGFGdW5jdGlv
biAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqLworLyogICAgICBHTF9ORVZFUiAqLworLyogICAg
ICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVBTCAqLwor
LyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAgICAgIEdM
X0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogQmxlbmRpbmdGYWN0b3JEZXN0
ICovCisjZGVmaW5lIEdMX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5l
IEdMX09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdMX1NSQ19DT0xP
UiAgICAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19D
T0xPUiAgICAgICAgICAgIDB4MDMwMQorI2RlZmluZSBHTF9TUkNfQUxQSEEgICAgICAgICAgICAg
ICAgICAgICAgMHgwMzAyCisjZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAg
ICAweDAzMDMKKyNkZWZpbmUgR0xfRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDB4MDMw
NAorI2RlZmluZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgMHgwMzA1CisKKy8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCisvKiAgICAgIEdMX1pFUk8gKi8KKy8qICAgICAgR0xfT05F
ICovCisjZGVmaW5lIEdMX0RTVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDAzMDYKKyNk
ZWZpbmUgR0xfT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDB4MDMwNworI2RlZmluZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgMHgwMzA4CisvKiAgICAgIEdMX1NSQ19B
TFBIQSAqLworLyogICAgICBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX0RT
VF9BTFBIQSAqLworLyogICAgICBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBICovCisKKy8qIEJsZW5k
RXF1YXRpb25TZXBhcmF0ZSAqLworI2RlZmluZSBHTF9GVU5DX0FERCAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA2CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICAw
eDgwMDkKKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDB4ODAwOSAg
ICAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovCisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9O
X0FMUEhBICAgICAgICAgICAweDg4M0QKKworLyogQmxlbmRTdWJ0cmFjdCAqLworI2RlZmluZSBH
TF9GVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgMHg4MDBBCisjZGVmaW5lIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICAweDgwMEIKKworLyogU2VwYXJhdGUgQmxlbmQgRnVu
Y3Rpb25zICovCisjZGVmaW5lIEdMX0JMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICAweDgw
QzgKKyNkZWZpbmUgR0xfQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDB4ODBDOQorI2Rl
ZmluZSBHTF9CTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgMHg4MENBCisjZGVmaW5lIEdM
X0JMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAweDgwQ0IKKyNkZWZpbmUgR0xfQ09OU1RB
TlRfQ09MT1IgICAgICAgICAgICAgICAgIDB4ODAwMQorI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IgICAgICAgMHg4MDAyCisjZGVmaW5lIEdMX0NPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICAweDgwMDMKKyNkZWZpbmUgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAg
ICAgIDB4ODAwNAorI2RlZmluZSBHTF9CTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgMHg4
MDA1CisKKy8qIEJ1ZmZlciBPYmplY3RzICovCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUiAgICAg
ICAgICAgICAgICAgICAweDg4OTIKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIgICAg
ICAgICAgIDB4ODg5MworI2RlZmluZSBHTF9BUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAg
MHg4ODk0CisjZGVmaW5lIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAweDg4OTUK
KworI2RlZmluZSBHTF9TVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgMHg4OEUwCisjZGVm
aW5lIEdMX1NUQVRJQ19EUkFXICAgICAgICAgICAgICAgICAgICAweDg4RTQKKyNkZWZpbmUgR0xf
RFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDB4ODhFOAorCisjZGVmaW5lIEdMX0JVRkZF
Ul9TSVpFICAgICAgICAgICAgICAgICAgICAweDg3NjQKKyNkZWZpbmUgR0xfQlVGRkVSX1VTQUdF
ICAgICAgICAgICAgICAgICAgIDB4ODc2NQorCisjZGVmaW5lIEdMX0NVUlJFTlRfVkVSVEVYX0FU
VFJJQiAgICAgICAgICAweDg2MjYKKworLyogQ3VsbEZhY2VNb2RlICovCisjZGVmaW5lIEdMX0ZS
T05UICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDQKKyNkZWZpbmUgR0xfQkFDSyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNQorI2RlZmluZSBHTF9GUk9OVF9BTkRfQkFDSyAg
ICAgICAgICAgICAgICAgMHgwNDA4CisKKy8qIERlcHRoRnVuY3Rpb24gKi8KKy8qICAgICAgR0xf
TkVWRVIgKi8KKy8qICAgICAgR0xfTEVTUyAqLworLyogICAgICBHTF9FUVVBTCAqLworLyogICAg
ICBHTF9MRVFVQUwgKi8KKy8qICAgICAgR0xfR1JFQVRFUiAqLworLyogICAgICBHTF9OT1RFUVVB
TCAqLworLyogICAgICBHTF9HRVFVQUwgKi8KKy8qICAgICAgR0xfQUxXQVlTICovCisKKy8qIEVu
YWJsZUNhcCAqLworI2RlZmluZSBHTF9URVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgMHgw
REUxCisjZGVmaW5lIEdMX0NVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICAweDBCNDQKKyNk
ZWZpbmUgR0xfQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJFMgorI2RlZmluZSBH
TF9ESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkQwCisjZGVmaW5lIEdMX1NURU5D
SUxfVEVTVCAgICAgICAgICAgICAgICAgICAweDBCOTAKKyNkZWZpbmUgR0xfREVQVEhfVEVTVCAg
ICAgICAgICAgICAgICAgICAgIDB4MEI3MQorI2RlZmluZSBHTF9TQ0lTU09SX1RFU1QgICAgICAg
ICAgICAgICAgICAgMHgwQzExCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAg
ICAgICAweDgwMzcKKyNkZWZpbmUgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDB4
ODA5RQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0UgICAgICAgICAgICAgICAgMHg4MEEwCisK
Ky8qIEVycm9yQ29kZSAqLworI2RlZmluZSBHTF9OT19FUlJPUiAgICAgICAgICAgICAgICAgICAg
ICAgMAorI2RlZmluZSBHTF9JTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgMHgwNTAwCisj
ZGVmaW5lIEdMX0lOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICAweDA1MDEKKyNkZWZpbmUg
R0xfSU5WQUxJRF9PUEVSQVRJT04gICAgICAgICAgICAgIDB4MDUwMgorI2RlZmluZSBHTF9PVVRf
T0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgMHgwNTA1CisKKy8qIEZyb250RmFjZURpcmVjdGlv
biAqLworI2RlZmluZSBHTF9DVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOTAwCisj
ZGVmaW5lIEdMX0NDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDEKKworLyogR2V0
UE5hbWUgKi8KKyNkZWZpbmUgR0xfTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDB4MEIy
MQorI2RlZmluZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgMHg4NDZECisjZGVm
aW5lIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICAweDg0NkUKKyNkZWZpbmUgR0xf
Q1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDB4MEI0NQorI2RlZmluZSBHTF9GUk9OVF9G
QUNFICAgICAgICAgICAgICAgICAgICAgMHgwQjQ2CisjZGVmaW5lIEdMX0RFUFRIX1JBTkdFICAg
ICAgICAgICAgICAgICAgICAweDBCNzAKKyNkZWZpbmUgR0xfREVQVEhfV1JJVEVNQVNLICAgICAg
ICAgICAgICAgIDB4MEI3MgorI2RlZmluZSBHTF9ERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAg
ICAgMHgwQjczCisjZGVmaW5lIEdMX0RFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICAweDBC
NzQKKyNkZWZpbmUgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDB4MEI5MQorI2Rl
ZmluZSBHTF9TVEVOQ0lMX0ZVTkMgICAgICAgICAgICAgICAgICAgMHgwQjkyCisjZGVmaW5lIEdM
X1NURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICAweDBCOTQKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDB4MEI5NQorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1Nf
REVQVEhfUEFTUyAgICAgICAgMHgwQjk2CisjZGVmaW5lIEdMX1NURU5DSUxfUkVGICAgICAgICAg
ICAgICAgICAgICAweDBCOTcKKyNkZWZpbmUgR0xfU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAg
ICAgIDB4MEI5MworI2RlZmluZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgMHgw
Qjk4CisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICAweDg4MDAKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDB4ODgwMQorI2RlZmluZSBH
TF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgMHg4ODAyCisjZGVmaW5lIEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICAweDg4MDMKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNL
X1JFRiAgICAgICAgICAgICAgIDB4OENBMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSyAgICAgICAgMHg4Q0E0CisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0sgICAg
ICAgICAweDhDQTUKKyNkZWZpbmUgR0xfVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4
MEJBMgorI2RlZmluZSBHTF9TQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgMHgwQzEwCisv
KiAgICAgIEdMX1NDSVNTT1JfVEVTVCAqLworI2RlZmluZSBHTF9DT0xPUl9DTEVBUl9WQUxVRSAg
ICAgICAgICAgICAgMHgwQzIyCisjZGVmaW5lIEdMX0NPTE9SX1dSSVRFTUFTSyAgICAgICAgICAg
ICAgICAweDBDMjMKKyNkZWZpbmUgR0xfVU5QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgIDB4
MENGNQorI2RlZmluZSBHTF9QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgMHgwRDA1Cisj
ZGVmaW5lIEdMX01BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICAweDBEMzMKKyNkZWZpbmUg
R0xfTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAgICAgICAgIDB4MEQzQQorI2RlZmluZSBHTF9TVUJQ
SVhFTF9CSVRTICAgICAgICAgICAgICAgICAgMHgwRDUwCisjZGVmaW5lIEdMX1JFRF9CSVRTICAg
ICAgICAgICAgICAgICAgICAgICAweDBENTIKKyNkZWZpbmUgR0xfR1JFRU5fQklUUyAgICAgICAg
ICAgICAgICAgICAgIDB4MEQ1MworI2RlZmluZSBHTF9CTFVFX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgMHgwRDU0CisjZGVmaW5lIEdMX0FMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICAw
eDBENTUKKyNkZWZpbmUgR0xfREVQVEhfQklUUyAgICAgICAgICAgICAgICAgICAgIDB4MEQ1Ngor
I2RlZmluZSBHTF9TVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgMHgwRDU3CisjZGVmaW5l
IEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICAweDJBMDAKKy8qICAgICAgR0xfUE9M
WUdPTl9PRkZTRVRfRklMTCAqLworI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IgICAg
ICAgICAgMHg4MDM4CisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICAw
eDgwNjkKKyNkZWZpbmUgR0xfU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDB4ODBBOAor
I2RlZmluZSBHTF9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE5CisjZGVmaW5l
IEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICAweDgwQUEKKyNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDB4ODBBQgorCisvKiBHZXRUZXh0dXJlUGFyYW1l
dGVyICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhU
VVJFX01JTl9GSUxURVIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9XUkFQX1MgKi8KKy8qICAgICAg
R0xfVEVYVFVSRV9XUkFQX1QgKi8KKworI2RlZmluZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFMgMHg4NkEyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAg
ICAweDg2QTMKKworLyogSGludE1vZGUgKi8KKyNkZWZpbmUgR0xfRE9OVF9DQVJFICAgICAgICAg
ICAgICAgICAgICAgIDB4MTEwMAorI2RlZmluZSBHTF9GQVNURVNUICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxMTAxCisjZGVmaW5lIEdMX05JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICAw
eDExMDIKKworLyogSGludFRhcmdldCAqLworI2RlZmluZSBHTF9HRU5FUkFURV9NSVBNQVBfSElO
VCAgICAgICAgICAgIDB4ODE5MgorCisvKiBEYXRhVHlwZSAqLworI2RlZmluZSBHTF9CWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAwCisjZGVmaW5lIEdMX1VOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICAweDE0MDEKKyNkZWZpbmUgR0xfU0hPUlQgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMgorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICAgMHgxNDAzCisjZGVmaW5lIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDQKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2Rl
ZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA2CisjZGVmaW5lIEdM
X0ZJWEVEICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MEMKKworLyogUGl4ZWxGb3JtYXQg
Ki8KKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDB4MTkwMgorI2Rl
ZmluZSBHTF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA2CisjZGVmaW5lIEdM
X1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDcKKyNkZWZpbmUgR0xfUkdCQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOAorI2RlZmluZSBHTF9MVU1JTkFOQ0UgICAg
ICAgICAgICAgICAgICAgICAgMHgxOTA5CisjZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBIQSAgICAg
ICAgICAgICAgICAweDE5MEEKKworLyogUGl4ZWxUeXBlICovCisvKiAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgKi8KKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDB4ODAz
MworI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgMHg4MDM0CisjZGVm
aW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICAweDgzNjMKKworLyogU2hhZGVy
cyAqLworI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICAweDhCMzAK
KyNkZWZpbmUgR0xfVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVm
aW5lIEdMX01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDB4ODg2OQorI2RlZmluZSBH
TF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyAgICAgICAweDhERkIKKyNkZWZpbmUgR0xfTUFY
X1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgMHg4REZDCisjZGVmaW5lIEdMX01BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDB4OEI0RAorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMgICAweDhCNEMKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlMgICAgIDB4OERGRAorI2RlZmluZSBHTF9TSEFERVJfVFlQRSAgICAgICAgICAgICAgICAg
ICAgICAweDhCNEYKKyNkZWZpbmUgR0xfREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg
MHg4QjgwCisjZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDB4OEI4
MgorI2RlZmluZSBHTF9WQUxJREFURV9TVEFUVVMgICAgICAgICAgICAgICAgICAweDhCODMKKyNk
ZWZpbmUgR0xfQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgMHg4Qjg1CisjZGVmaW5l
IEdMX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDB4OEI4NgorI2RlZmluZSBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgICAgICAweDhCODcKKyNkZWZpbmUgR0xfQUNUSVZF
X0FUVFJJQlVURVMgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVmaW5lIEdMX0FDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSCAgICAgIDB4OEI4QQorI2RlZmluZSBHTF9TSEFESU5HX0xBTkdVQUdF
X1ZFUlNJT04gICAgICAgICAweDhCOEMKKyNkZWZpbmUgR0xfQ1VSUkVOVF9QUk9HUkFNICAgICAg
ICAgICAgICAgICAgMHg4QjhECisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEdMX0xFU1MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDEKKyNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDIwMgorI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMjAzCisjZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICAweDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDIw
NQorI2RlZmluZSBHTF9HRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2CisjZGVm
aW5lIEdMX0FMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyogU3RlbmNp
bE9wICovCisvKiAgICAgIEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBMQUNFICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxRTAxCisjZGVmaW5lIEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDFFMDIKKyNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMwor
I2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTBBCisjZGVmaW5l
IEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAweDg1MDcKKyNkZWZpbmUgR0xfREVD
Ul9XUkFQICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisj
ZGVmaW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDFGMDAKKyNkZWZpbmUg
R0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMQorI2RlZmluZSBHTF9WRVJT
SU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAyCisjZGVmaW5lIEdMX0VYVEVOU0lPTlMg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjAwCisjZGVmaW5lIEdM
X0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAweDI2MDEKKworLyogVGV4dHVyZU1pbkZp
bHRlciAqLworLyogICAgICBHTF9ORUFSRVNUICovCisvKiAgICAgIEdMX0xJTkVBUiAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgMHgyNzAwCisjZGVmaW5lIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSICAgICAgICAgIDB4MjcwMgorI2RlZmluZSBHTF9MSU5FQVJfTUlQTUFQ
X0xJTkVBUiAgICAgICAgICAgMHgyNzAzCisKKy8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisj
ZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUg
R0xfVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBHTF9URVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgMHgyODAyCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JB
UF9UICAgICAgICAgICAgICAgICAweDI4MDMKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAg
ICBHTF9URVhUVVJFXzJEICovCisjZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAg
ICAgICAweDE3MDIKKworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAg
MHg4NTEzCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICAweDg1MTQK
KyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDB4ODUxNQorI2RlZmlu
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggICAgMHg4NTE2CisjZGVmaW5lIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAweDg1MTcKKyNkZWZpbmUgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZICAgIDB4ODUxOAorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ogICAgMHg4NTE5CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWiAgICAweDg1MUEKKyNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
IDB4ODUxQworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9URVhUVVJFMCAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEMwCisjZGVmaW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAg
ICAgICAgICAweDg0QzEKKyNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRDMgorI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMz
CisjZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzQKKyNkZWZp
bmUgR0xfVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9U
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RFWFRVUkU3
ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZpbmUgR0xfVEVYVFVSRTggICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRDOAorI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEM5CisjZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAg
ICAweDg0Q0EKKyNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
QgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCisjZGVm
aW5lIEdMX1RFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xf
VEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmluZSBHTF9URVhUVVJF
MTUgICAgICAgICAgICAgICAgICAgICAgMHg4NENGCisjZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDAKKyNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQorI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgMHg4NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICAweDg0
RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAorI2Rl
ZmluZSBHTF9URVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5lIEdM
X1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAweDg0RDYKKyNkZWZpbmUgR0xfVEVYVFVS
RTIzICAgICAgICAgICAgICAgICAgICAgIDB4ODRENworI2RlZmluZSBHTF9URVhUVVJFMjQgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQ4CisjZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICAweDg0RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgMHg4
NERCCisjZGVmaW5lIEdMX1RFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNk
ZWZpbmUgR0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAorI2RlZmluZSBH
TF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgMHg4NERFCisjZGVmaW5lIEdMX1RFWFRV
UkUzMSAgICAgICAgICAgICAgICAgICAgICAweDg0REYKKyNkZWZpbmUgR0xfQUNUSVZFX1RFWFRV
UkUgICAgICAgICAgICAgICAgIDB4ODRFMAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZp
bmUgR0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQorI2RlZmluZSBHTF9D
TEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgMHg4MTJGCisjZGVmaW5lIEdMX01JUlJPUkVE
X1JFUEVBVCAgICAgICAgICAgICAgICAweDgzNzAKKworLyogVW5pZm9ybSBUeXBlcyAqLworI2Rl
ZmluZSBHTF9GTE9BVF9WRUMyICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNkZWZpbmUgR0xfRkxPQVRf
VkVDNCAgICAgICAgICAgICAgICAgICAgIDB4OEI1MgorI2RlZmluZSBHTF9JTlRfVkVDMiAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjUzCisjZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAg
ICAgICAgICAgICAweDhCNTQKKyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKKyNk
ZWZpbmUgR0xfQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2RlZmluZSBH
TF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgMHg4QjU5CisjZGVmaW5lIEdMX0ZMT0FU
X01BVDIgICAgICAgICAgICAgICAgICAgICAweDhCNUEKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMyAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1QgorI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAg
ICAgICAgICAgICAgMHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAgICAgICAgICAg
ICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDB4
OEI2MAorCisvKiBWZXJ0ZXggQXJyYXlzICovCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRCAgICAgICAgMHg4NjIyCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
U0laRSAgICAgICAgICAgMHg4NjIzCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFICAgICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAg
ICAgICAgICAgMHg4NjI1CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RCAgICAgMHg4ODZBCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAg
ICAgMHg4NjQ1CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcg
MHg4ODlGCisKKy8qIFJlYWQgRm9ybWF0ICovCisjZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRSAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX0ZPUk1BVCAweDhCOUIKKworLyogU2hhZGVyIFNvdXJjZSAqLworI2RlZmluZSBHTF9DT01Q
SUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgMHg4QjgxCisjZGVmaW5lIEdMX0lORk9fTE9HX0xF
TkdUSCAgICAgICAgICAgICAgICAweDhCODQKKyNkZWZpbmUgR0xfU0hBREVSX1NPVVJDRV9MRU5H
VEggICAgICAgICAgIDB4OEI4OAorI2RlZmluZSBHTF9TSEFERVJfQ09NUElMRVIgICAgICAgICAg
ICAgICAgMHg4REZBCisKKy8qIFNoYWRlciBCaW5hcnkgKi8KKyNkZWZpbmUgR0xfU0hBREVSX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgIDB4OERGOAorI2RlZmluZSBHTF9OVU1fU0hBREVSX0JJTkFS
WV9GT1JNQVRTICAgICAgMHg4REY5CisKKy8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5
cGVzICovCisjZGVmaW5lIEdMX0xPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICAweDhERjAK
KyNkZWZpbmUgR0xfTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDB4OERGMQorI2RlZmlu
ZSBHTF9ISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgMHg4REYyCisjZGVmaW5lIEdMX0xP
V19JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDhERjMKKyNkZWZpbmUgR0xfTUVESVVNX0lO
VCAgICAgICAgICAgICAgICAgICAgIDB4OERGNAorI2RlZmluZSBHTF9ISUdIX0lOVCAgICAgICAg
ICAgICAgICAgICAgICAgMHg4REY1CisKKy8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi8KKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDB4OEQ0MAorI2RlZmluZSBHTF9S
RU5ERVJCVUZGRVIgICAgICAgICAgICAgICAgICAgMHg4RDQxCisKKyNkZWZpbmUgR0xfUkdCQTQg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1X0ExICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NSAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhENjIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAg
ICAgIDB4ODFBNQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgMHgx
OTAxCisjZGVmaW5lIEdMX1NURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICAweDhENDgKKwor
I2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgMHg4RDQyCisjZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICAweDhENDMKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDB4OEQ0NAorI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfUkVEX1NJWkUgICAgICAgICAgMHg4RDUwCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9HUkVF
Tl9TSVpFICAgICAgICAweDhENTEKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgIDB4OEQ1MgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
MHg4RDUzCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICAweDhENTQK
KyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDB4OEQ1NQorCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDB4OENE
MAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAweDhDRDEKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVM
ICAgICAgICAgMHg4Q0QyCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9DVUJFX01BUF9GQUNFIDB4OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwICAg
ICAgICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAg
ICAgIDB4OEQwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgMHg4
RDIwCisKKyNkZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAweDhDRDUK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgMHg4
Q0Q2CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5U
IDB4OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAg
ICAgICAweDhDRDkKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAg
ICAgICAgICAgMHg4Q0RECisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQklORElORyAgICAgICAg
ICAgIDB4OENBNgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgMHg4
Q0E3CisjZGVmaW5lIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICAweDg0RTgKKwor
I2RlZmluZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgMHgwNTA2CisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICogR0wgY29yZSBmdW5jdGlvbnMuCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xBY3RpdmVUZXh0dXJlIChH
TGVudW0gdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEF0
dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQXR0cmliTG9jYXRpb24gKEdMdWludCBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRCdWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBi
dWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVi
dWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRSZW5kZXJidWZmZXIgKEdMZW51bSB0YXJnZXQs
IEdMdWludCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xCaW5kVGV4dHVyZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGNsYW1wZiByZWQs
IEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb24gKCBHTGVudW0gbW9k
ZSApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUgKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xl
bnVtIGRmYWN0b3IpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVu
ZEZ1bmNTZXBhcmF0ZSAoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0Fs
cGhhLCBHTGVudW0gZHN0QWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xCdWZmZXJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdM
dm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQnVmZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIEdMZW51bSAg
ICAgICBHTF9BUElFTlRSWSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgKEdMZW51bSB0YXJnZXQp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhciAoR0xiaXRmaWVs
ZCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xv
ciAoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYg
YWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckRlcHRo
ZiAoR0xjbGFtcGYgZGVwdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xDbGVhclN0ZW5jaWwgKEdMaW50IHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xDb2xvck1hc2sgKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29s
ZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9p
ZCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCBHTHVp
bnQgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVQcm9ncmFtICh2b2lkKTsKK0dMX0FQSUNBTEwg
R0x1aW50ICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0gdHlwZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEN1bGxGYWNlIChHTGVudW0gbW9k
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUJ1ZmZlcnMg
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdM
dWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRGVsZXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVSZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdM
dWludCogcmVuZGVyYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbERlbGV0ZVRleHR1cmVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
dGV4dHVyZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aEZ1
bmMgKEdMZW51bSBmdW5jKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
RGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbERlcHRoUmFuZ2VmIChHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERldGFjaFNoYWRlciAoR0x1aW50
IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzIChHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlIChHTGVudW0gY2FwKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRl
eCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoICh2b2lkKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVy
dGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcm9udEZhY2UgKEdMZW51
bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuQnVmZmVy
cyAoR0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkZyYW1lYnVmZmVycyAoR0xzaXplaSBuLCBH
THVpbnQqIGZyYW1lYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdlblJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEFjdGl2ZUF0dHJpYiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xz
aXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUs
IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEFjdGl2ZVVuaWZvcm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIq
IG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRhY2hl
ZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBjb3Vu
dCwgR0x1aW50KiBzaGFkZXJzKTsKK0dMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0QXR0cmliTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xl
bnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRFcnJvciAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEZsb2F0diAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEludGVnZXJ2IChHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtaXYgKEdMdWludCBwcm9ncmFtLCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyaXYgKEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBH
TGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyU291cmNlIChHTHVp
bnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3Vy
Y2UpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBHTF9BUElFTlRSWSBnbEdldFN0cmluZyAo
R0xlbnVtIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRU
ZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJh
bXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0
ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWZ2IChHTHVpbnQgcHJv
Z3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50
IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0VW5pZm9ybUxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4
QXR0cmliZnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAo
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiAoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xIaW50IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSk7
CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQg
YnVmZmVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNFbmFibGVk
IChHTGVudW0gY2FwKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNG
cmFtZWJ1ZmZlciAoR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzUmVuZGVyYnVmZmVyIChHTHVpbnQgcmVuZGVyYnVm
ZmVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNTaGFkZXIgKEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1Rl
eHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsTGluZVdpZHRoIChHTGZsb2F0IHdpZHRoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsTGlua1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQb2x5Z29u
T2Zmc2V0IChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFJlYWRQaXhlbHMgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2
b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWxl
YXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlQ292ZXJhZ2UgKEdMY2xhbXBmIHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
U2Npc3NvciAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJCaW5hcnkgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25z
dCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywg
R0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xp
bnQgcmVmLCBHTHVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTHVpbnQgbWFz
ayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcCAoR0xl
bnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVu
dW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBp
eGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRl
cmYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xUZXhQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25z
dCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWZ2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9jYXRpb24s
IEdMaW50IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3Jt
MWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmYgKEdMaW50IGxvY2F0
aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTJpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlm
b3JtM2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zaSAoR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtNGYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6LCBHTGZsb2F0IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xVbmlmb3JtNGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAo
R0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGl2IChHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xV
bmlmb3JtTWF0cml4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVc2VQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dy
YW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIx
ZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYjFmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJp
YjJmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIyZnYgKEdMdWludCBpbmR4LCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xWZXJ0ZXhBdHRyaWIzZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZs
b2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRy
aWIzZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZiAoR0x1aW50IGluZHgsIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmdiAoR0x1aW50IGluZHgsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0g
dHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQq
IHB0cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZpZXdwb3J0IChH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX2dsMl9oXyAqLwpJbmRleDog
QU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJl
eHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NzMgQEAKKyNpZm5kZWYgX19nbDJleHRfaF8K
KyNkZWZpbmUgX19nbDJleHRfaF8KKworLyogJFJldmlzaW9uOiAxMDc5OCAkIG9uICREYXRlOjog
MjAxMC0wMy0xOSAxNzozNDozMCAtMDcwMCAjJCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgorICogMi4wLiBGb3Ig
ZGV0YWlscywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgorICovCisK
KyNpZm5kZWYgR0xfQVBJRU5UUllQCisjICAgZGVmaW5lIEdMX0FQSUVOVFJZUCBHTF9BUElFTlRS
WSoKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIE9FUyBleHRlbnNpb24gdG9rZW5z
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90
ZXh0dXJlICovCisjaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisj
ZGVmaW5lIEdMX0VUQzFfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDY0CisjZW5kaWYKKworLyogR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4
dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlCisjZGVm
aW5lIEdMX1BBTEVUVEU0X1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QjkwCisjZGVmaW5lIEdMX1BBTEVUVEU0X1JHQkE4X09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjkxCisjZGVmaW5lIEdMX1BBTEVUVEU0X1I1X0c2X0I1X09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjkyCisjZGVmaW5lIEdMX1BBTEVU
VEU0X1JHQkE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjkzCisj
ZGVmaW5lIEdMX1BBTEVUVEU0X1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Qjk0CisjZGVmaW5lIEdMX1BBTEVUVEU4X1JHQjhfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjk1CisjZGVmaW5lIEdMX1BBTEVUVEU4X1JHQkE4X09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk2CisjZGVmaW5lIEdMX1BB
TEVUVEU4X1I1X0c2X0I1X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk3
CisjZGVmaW5lIEdMX1BBTEVUVEU4X1JHQkE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4Qjk4CisjZGVmaW5lIEdMX1BBTEVUVEU4X1JHQjVfQTFfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk5CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRo
MjQgKi8KKyNpZm5kZWYgR0xfT0VTX2RlcHRoMjQKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5U
MjRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTYKKyNlbmRpZgorCisv
KiBHTF9PRVNfZGVwdGgzMiAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGgzMgorI2RlZmluZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFB
NworI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aF90ZXh0dXJlICovCisvKiBObyBuZXcgdG9rZW5z
IGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09FU19FR0xfaW1hZ2Ug
Ki8KKyNpZm5kZWYgR0xfT0VTX0VHTF9pbWFnZQordHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VT
OworI2VuZGlmCisKKy8qIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgKi8KKyNpZm5kZWYgR0xf
T0VTX2VsZW1lbnRfaW5kZXhfdWludAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2VuZGlmCisKKy8qIEdMX09F
U19nZXRfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODc0MQorI2RlZmluZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19P
RVMgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFS
WV9GT1JNQVRTX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2VuZGlmCisK
Ky8qIEdMX09FU19tYXBidWZmZXIgKi8KKyNpZm5kZWYgR0xfT0VTX21hcGJ1ZmZlcgorI2RlZmlu
ZSBHTF9XUklURV9PTkxZX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCOQorI2RlZmluZSBHTF9CVUZGRVJfQUNDRVNTX09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhCQgorI2RlZmluZSBHTF9CVUZGRVJfTUFQUEVEX09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhCQworI2RlZmluZSBHTF9CVUZGRVJf
TUFQX1BPSU5URVJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhCRAorI2Vu
ZGlmCisKKy8qIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAqLworI2lmbmRlZiBHTF9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwKKyNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURf
SU5UXzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkEKKyNkZWZp
bmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4RjAKKyNlbmRpZgorCisvKiBHTF9PRVNfcmdiOF9yZ2JhOCAqLworI2lmbmRlZiBHTF9P
RVNfcmdiOF9yZ2JhOAorI2RlZmluZSBHTF9SR0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MQorI2RlZmluZSBHTF9SR0JBOF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OAorI2VuZGlmCisKKy8q
IEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAqLworI2lmbmRlZiBHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMKKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9P
RVMgICAgICAgICAgICAgICAgICAweDhCOEIKKyNlbmRpZgorCisvKiBHTF9PRVNfc3RlbmNpbDEg
Ki8KKyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWwxCisjZGVmaW5lIEdMX1NURU5DSUxfSU5ERVgxX09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ2CisjZW5kaWYKKworLyog
R0xfT0VTX3N0ZW5jaWw0ICovCisjaWZuZGVmIEdMX09FU19zdGVuY2lsNAorI2RlZmluZSBHTF9T
VEVOQ0lMX0lOREVYNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0
NworI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlXzNEICovCisjaWZuZGVmIEdMX09FU190ZXh0
dXJlXzNECisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MDcyCisjZGVmaW5lIEdMX1RFWFRVUkVfM0RfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVf
QklORElOR18zRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVm
aW5lIEdMX01BWF8zRF9URVhUVVJFX1NJWkVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDczCisjZGVmaW5lIEdMX1NBTVBMRVJfM0RfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjVGCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV8zRF9aT0ZGU0VUX09FUyAgICAgICAgMHg4Q0Q0CisjZW5kaWYKKworLyogR0xf
T0VTX3RleHR1cmVfZmxvYXQgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlz
IGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICovCisvKiBO
byBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dAorI2RlZmluZSBHTF9IQUxGX0ZMT0FUX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ2MQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24u
ICovCisKKy8qIEdMX09FU190ZXh0dXJlX25wb3QgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9k
dWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKworLyogR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QgKi8KKyNpZm5kZWYgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyNkZWZpbmUgR0xfVkVS
VEVYX0FSUkFZX0JJTkRJTkdfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QjUK
KyNlbmRpZgorCisvKiBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgKi8KKy8qIEdMX0hBTEZfRkxP
QVRfT0VTIGRlZmluZWQgaW4gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBhbHJlYWR5LiAqLwor
CisvKiBHTF9PRVNfdmVydGV4X3R5cGVfMTBfMTBfMTBfMiAqLworI2lmbmRlZiBHTF9PRVNfdmVy
dGV4X3R5cGVfMTBfMTBfMTBfMgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBfMTBfMTBfMl9P
RVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNgorI2RlZmluZSBHTF9JTlRfMTBfMTBf
MTBfMl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNworI2VuZGlm
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogQU1EIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworLyogR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgKi8KKyNpZm5k
ZWYgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUKKyNkZWZpbmUgR0xfM0RDX1hfQU1EICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3RjkKKyNkZWZpbmUg
R0xfM0RDX1hZX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg3RkEKKyNlbmRpZgorCisvKiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSAqLworI2lm
bmRlZiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZQorI2RlZmluZSBHTF9BVENfUkdCX0FN
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM5MgorI2RlZmlu
ZSBHTF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEM5MworI2RlZmluZSBHTF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EICAgICAg
ICAgICAgICAgICAgICAgIDB4ODdFRQorI2VuZGlmCisKKy8qIEdMX0FNRF9wZXJmb3JtYW5jZV9t
b25pdG9yICovCisjaWZuZGVmIEdMX0FNRF9wZXJmb3JtYW5jZV9tb25pdG9yCisjZGVmaW5lIEdM
X0NPVU5URVJfVFlQRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QkMwCisjZGVmaW5lIEdMX0NPVU5URVJfUkFOR0VfQU1EICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QkMxCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVDY0X0FNRCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkMyCisjZGVmaW5lIEdMX1BFUkNFTlRBR0Vf
QU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkMzCisjZGVmaW5l
IEdMX1BFUkZNT05fUkVTVUxUX0FWQUlMQUJMRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QkM0CisjZGVmaW5lIEdMX1BFUkZNT05fUkVTVUxUX1NJWkVfQU1EICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QkM1CisjZGVmaW5lIEdMX1BFUkZNT05fUkVTVUxUX0FNRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkM2CisjZW5kaWYKKworLyogR0xfQU1E
X3Byb2dyYW1fYmluYXJ5X1o0MDAgKi8KKyNpZm5kZWYgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0
MDAKKyNkZWZpbmUgR0xfWjQwMF9CSU5BUllfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg3NDAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEVYVCBl
eHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0VYVF9ibGVuZF9t
aW5tYXggKi8KKyNpZm5kZWYgR0xfRVhUX2JsZW5kX21pbm1heAorI2RlZmluZSBHTF9NSU5fRVhU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNworI2Rl
ZmluZSBHTF9NQVhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwOAorI2VuZGlmCisKKy8qIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyICovCisj
aWZuZGVmIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCisjZGVmaW5lIEdMX0NPTE9SX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwCisjZGVmaW5l
IEdMX0RFUFRIX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxODAxCisjZGVmaW5lIEdMX1NURU5DSUxfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgxODAyCisjZW5kaWYKKworLyogR0xfRVhUX211bHRpX2RyYXdfYXJy
YXlzICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICov
CisKKy8qIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICovCisjaWZuZGVmIEdMX0VYVF9yZWFkX2Zv
cm1hdF9iZ3JhCisjZGVmaW5lIEdMX0JHUkFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MEUxCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHg4MzY1CisjZGVmaW5lIEdMX1VOU0lH
TkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHg4MzY2Cisj
ZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICovCisjaWZuZGVm
IEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworI2RlZmluZSBHTF9URVhUVVJFX01B
WF9BTklTT1RST1BZX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGRQorI2RlZmlu
ZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRGRgorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwor
I2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyNkZWZpbmUgR0xfQkdSQV9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKKyNl
bmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCisjaWZuZGVm
IEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYKKyNkZWZpbmUgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAweDgzNjgKKyNlbmRp
ZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIElNRyBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKy8qIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9J
TUdfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfU0dYX1BST0dSQU1fQklOQVJZX0lNRyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzAKKyNlbmRpZgorCisvKiBHTF9JTUdfcmVh
ZF9mb3JtYXQgKi8KKyNpZm5kZWYgR0xfSU1HX3JlYWRfZm9ybWF0CisjZGVmaW5lIEdMX0JHUkFf
SU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEUxCisj
ZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0lNRyAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MzY1CisjZW5kaWYKKworLyogR0xfSU1HX3NoYWRlcl9iaW5hcnkgKi8KKyNpZm5k
ZWYgR0xfSU1HX3NoYWRlcl9iaW5hcnkKKyNkZWZpbmUgR0xfU0dYX0JJTkFSWV9JTUcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMEEKKyNlbmRpZgorCisvKiBHTF9J
TUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFf
SU1HICAgICAgICAgICAgICAgICAgICAgIDB4OEMwMAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1JH
Ql9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAgICAgICAgICAgIDB4OEMwMQorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgIDB4
OEMwMgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyAgICAgICAg
ICAgICAgICAgICAgIDB4OEMwMworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogTlYg
ZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9OVl9mZW5jZSAq
LworI2lmbmRlZiBHTF9OVl9mZW5jZQorI2RlZmluZSBHTF9BTExfQ09NUExFVEVEX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGMgorI2RlZmluZSBHTF9GRU5DRV9T
VEFUVVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGMworI2Rl
ZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRGNAorI2VuZGlmCisKKy8qIEdMX05WX2NvdmVyYWdlX3NhbXBsZSAqLworI2lmbmRl
ZiBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUKKyNkZWZpbmUgR0xfQ09WRVJBR0VfQ09NUE9ORU5UX05W
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDAKKyNkZWZpbmUgR0xfQ09WRVJB
R0VfQ09NUE9ORU5UNF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDEKKyNk
ZWZpbmUgR0xfQ09WRVJBR0VfQVRUQUNITUVOVF9OViAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhFRDIKKyNkZWZpbmUgR0xfQ09WRVJBR0VfQlVGRkVSU19OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhFRDMKKyNkZWZpbmUgR0xfQ09WRVJBR0VfU0FNUExFU19O
ViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDQKKyNkZWZpbmUgR0xfQ09W
RVJBR0VfQUxMX0ZSQUdNRU5UU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDUK
KyNkZWZpbmUgR0xfQ09WRVJBR0VfRURHRV9GUkFHTUVOVFNfTlYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhFRDYKKyNkZWZpbmUgR0xfQ09WRVJBR0VfQVVUT01BVElDX05WICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhFRDcKKyNkZWZpbmUgR0xfQ09WRVJBR0VfQlVGRkVS
X0JJVF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNlbmRpZgorCisv
KiBHTF9OVl9kZXB0aF9ub25saW5lYXIgKi8KKyNpZm5kZWYgR0xfTlZfZGVwdGhfbm9ubGluZWFy
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X05PTkxJTkVBUl9OViAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTJDCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBRQ09NIGV4
dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfUUNPTV9kcml2ZXJf
Y29udHJvbCAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9u
LiAqLworCisvKiBHTF9RQ09NX2V4dGVuZGVkX2dldCAqLworI2lmbmRlZiBHTF9RQ09NX2V4dGVu
ZGVkX2dldAorI2RlZmluZSBHTF9URVhUVVJFX1dJRFRIX1FDT00gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEJEMgorI2RlZmluZSBHTF9URVhUVVJFX0hFSUdIVF9RQ09NICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEMworI2RlZmluZSBHTF9URVhUVVJF
X0RFUFRIX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJENAorI2Rl
ZmluZSBHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEJENQorI2RlZmluZSBHTF9URVhUVVJFX0ZPUk1BVF9RQ09NICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEJENgorI2RlZmluZSBHTF9URVhUVVJFX1RZUEVfUUNPTSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJENworI2RlZmluZSBHTF9URVhU
VVJFX0lNQUdFX1ZBTElEX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEOAor
I2RlZmluZSBHTF9URVhUVVJFX05VTV9MRVZFTFNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEJEOQorI2RlZmluZSBHTF9URVhUVVJFX1RBUkdFVF9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEJEQQorI2RlZmluZSBHTF9URVhUVVJFX09CSkVDVF9W
QUxJRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEQgorI2RlZmluZSBHTF9T
VEFURV9SRVNUT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJE
QworI2VuZGlmCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MiAqLworLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBHTF9RQ09NX3BlcmZtb25f
Z2xvYmFsX21vZGUgKi8KKyNpZm5kZWYgR0xfUUNPTV9wZXJmbW9uX2dsb2JhbF9tb2RlCisjZGVm
aW5lIEdMX1BFUkZNT05fR0xPQkFMX01PREVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RkEwCisjZW5kaWYKKworLyogR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nICovCisj
aWZuZGVmIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZworI2RlZmluZSBHTF9XUklURU9OTFlf
UkVOREVSSU5HX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyMworI2VuZGlm
CisKKy8qIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nICovCisjaWZuZGVmIEdMX1FDT01fdGlsZWRf
cmVuZGVyaW5nCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQwX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklU
MV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDA0CisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQzX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklU
NF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDIwCisjZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ2X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklU
N19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMTAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQxX1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
Ml9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwODAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ0X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklU
NV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUg
R0xfREVQVEhfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDA0MDAwCisjZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ3X1FDT00gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQwX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CVUZGRVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDIwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQzX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CVUZGRVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMTAwMDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ2X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CVUZGRVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwODAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQwX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZG
RVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUg
R0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDA0MDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQzX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZG
RVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUg
R0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDIwMDAwMDAwCisjZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ2X1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHTF9NVUxUSVNBTVBMRV9CVUZG
RVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNlbmRpZgor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEVuZCBvZiBleHRlbnNpb24gdG9rZW5zLCBzdGFydCBv
ZiBjb3JyZXNwb25kaW5nIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBPRVMgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisvKiBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSAq
LworI2lmbmRlZiBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZQorI2RlZmluZSBH
TF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSAxCisjZW5kaWYKKworLyogR0xfT0VT
X2NvbXByZXNzZWRfcGFsZXR0ZWRfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9PRVNfY29tcHJlc3Nl
ZF9wYWxldHRlZF90ZXh0dXJlCisjZGVmaW5lIEdMX09FU19jb21wcmVzc2VkX3BhbGV0dGVkX3Rl
eHR1cmUgMQorI2VuZGlmCisKKy8qIEdMX09FU19kZXB0aDI0ICovCisjaWZuZGVmIEdMX09FU19k
ZXB0aDI0CisjZGVmaW5lIEdMX09FU19kZXB0aDI0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZGVw
dGgzMiAqLworI2lmbmRlZiBHTF9PRVNfZGVwdGgzMgorI2RlZmluZSBHTF9PRVNfZGVwdGgzMiAx
CisjZW5kaWYKKworLyogR0xfT0VTX2RlcHRoX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfT0VTX2Rl
cHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfT0VTX2RlcHRoX3RleHR1cmUgMQorI2VuZGlmCisKKy8q
IEdMX09FU19FR0xfaW1hZ2UgKi8KKyNpZm5kZWYgR0xfT0VTX0VHTF9pbWFnZQorI2RlZmluZSBH
TF9PRVNfRUdMX2ltYWdlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xFR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyAoR0xlbnVtIHRh
cmdldCwgR0xlZ2xJbWFnZU9FUyBpbWFnZSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xFR0xJbWFnZVRhcmdldFJlbmRlcmJ1ZmZlclN0b3JhZ2VPRVMgKEdMZW51bSB0YXJnZXQsIEdM
ZWdsSW1hZ2VPRVMgaW1hZ2UpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEVHTElNQUdFVEFSR0VUVEVYVFVSRTJET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZWds
SW1hZ2VPRVMgaW1hZ2UpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFR0xJTUFH
RVRBUkdFVFJFTkRFUkJVRkZFUlNUT1JBR0VPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlZ2xJ
bWFnZU9FUyBpbWFnZSk7CisjZW5kaWYKKworLyogR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAq
LworI2lmbmRlZiBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50CisjZGVmaW5lIEdMX09FU19lbGVt
ZW50X2luZGV4X3VpbnQgMQorI2VuZGlmCisKKy8qIEdMX09FU19mYm9fcmVuZGVyX21pcG1hcCAq
LworI2lmbmRlZiBHTF9PRVNfZmJvX3JlbmRlcl9taXBtYXAKKyNkZWZpbmUgR0xfT0VTX2Zib19y
ZW5kZXJfbWlwbWFwIDEKKyNlbmRpZgorCisvKiBHTF9PRVNfZnJhZ21lbnRfcHJlY2lzaW9uX2hp
Z2ggKi8KKyNpZm5kZWYgR0xfT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoCisjZGVmaW5lIEdM
X09FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaCAxCisjZW5kaWYKKworLyogR0xfT0VTX2dldF9w
cm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5CisjZGVm
aW5lIEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnlPRVMgKEdM
dWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xlbnVtICpi
aW5hcnlGb3JtYXQsIEdMdm9pZCAqYmluYXJ5KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbFByb2dyYW1CaW5hcnlPRVMgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0
LCBjb25zdCBHTHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQUk9HUkFNQklOQVJZT0VTUFJPQykgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xlbnVtICpiaW5hcnlG
b3JtYXQsIEdMdm9pZCAqYmluYXJ5KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
UFJPR1JBTUJJTkFSWU9FU1BST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCk7CisjZW5kaWYKKworLyogR0xf
T0VTX21hcGJ1ZmZlciAqLworI2lmbmRlZiBHTF9PRVNfbWFwYnVmZmVyCisjZGVmaW5lIEdMX09F
U19tYXBidWZmZXIgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9p
ZCogR0xfQVBJRU5UUlkgZ2xNYXBCdWZmZXJPRVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nl
c3MpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xVbm1hcEJ1ZmZlck9FUyAo
R0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQ
b2ludGVydk9FUyAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJhbXMp
OworI2VuZGlmCit0eXBlZGVmIHZvaWQqIChHTF9BUElFTlRSWVAgUEZOR0xNQVBCVUZGRVJPRVNQ
Uk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGFjY2Vzcyk7Cit0eXBlZGVmIEdMYm9vbGVhbiAo
R0xfQVBJRU5UUllQIFBGTkdMVU5NQVBCVUZGRVJPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVEJVRkZFUlBPSU5URVJWT0VTUFJPQykg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1zKTsKKyNlbmRpZgor
CisvKiBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKi8KKyNpZm5kZWYgR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsCisjZGVmaW5lIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAxCisj
ZW5kaWYKKworLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KKyNpZm5kZWYgR0xfT0VTX3JnYjhfcmdi
YTgKKyNkZWZpbmUgR0xfT0VTX3JnYjhfcmdiYTggMQorI2VuZGlmCisKKy8qIEdMX09FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyAqLworI2lmbmRlZiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
KyNkZWZpbmUgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDEKKyNlbmRpZgorCisvKiBHTF9P
RVNfc3RlbmNpbDEgKi8KKyNpZm5kZWYgR0xfT0VTX3N0ZW5jaWwxCisjZGVmaW5lIEdMX09FU19z
dGVuY2lsMSAxCisjZW5kaWYKKworLyogR0xfT0VTX3N0ZW5jaWw0ICovCisjaWZuZGVmIEdMX09F
U19zdGVuY2lsNAorI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQorI2VuZGlmCisKKy8qIEdMX09F
U190ZXh0dXJlXzNEICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlXzNECisjZGVmaW5lIEdMX09F
U190ZXh0dXJlXzNEIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xUZXhJbWFnZTNET0VTIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVGV4
U3ViSW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1Yklt
YWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4SW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRE9FUyAo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRh
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyVGV4dHVyZTNET0VT
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1
aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCB6b2Zmc2V0KTsKKyNlbmRpZgordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTFRFWFNVQklNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xDT1BZVEVYU1VCSU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT01QUkVTU0VEVEVYSU1BR0UzRE9FU1BST0MpIChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQ09NUFJFU1NFRFRFWFNVQklNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFM0RPRVMpIChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUs
IEdMaW50IGxldmVsLCBHTGludCB6b2Zmc2V0KTsKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVy
ZV9mbG9hdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9mbG9hdAorI2RlZmluZSBHTF9PRVNf
dGV4dHVyZV9mbG9hdCAxCisjZW5kaWYKKworLyogR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFy
ICovCisjaWZuZGVmIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcgorI2RlZmluZSBHTF9PRVNf
dGV4dHVyZV9mbG9hdF9saW5lYXIgMQorI2VuZGlmCisKKy8qIEdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorI2RlZmluZSBHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVh
cgorI2RlZmluZSBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAxCisjZW5kaWYKKwor
LyogR0xfT0VTX3RleHR1cmVfbnBvdCAqLworI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV9ucG90Cisj
ZGVmaW5lIEdMX09FU190ZXh0dXJlX25wb3QgMQorI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0ICovCisjaWZuZGVmIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisjZGVm
aW5lIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCaW5kVmVydGV4QXJyYXlPRVMgKEdM
dWludCBhcnJheSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVWZXJ0ZXhB
cnJheXNPRVMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICphcnJheXMpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2VuVmVydGV4QXJyYXlzT0VTIChHTHNpemVpIG4sIEdMdWludCAq
YXJyYXlzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsSXNWZXJ0ZXhBcnJh
eU9FUyAoR0x1aW50IGFycmF5KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DKSAoR0x1aW50IGFycmF5KTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQykgKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50ICphcnJheXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DKSAoR0xzaXplaSBuLCBHTHVpbnQgKmFycmF5cyk7Cit0
eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0Mp
IChHTHVpbnQgYXJyYXkpOworI2VuZGlmCisKKy8qIEdMX09FU192ZXJ0ZXhfaGFsZl9mbG9hdCAq
LworI2lmbmRlZiBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQKKyNkZWZpbmUgR0xfT0VTX3ZlcnRl
eF9oYWxmX2Zsb2F0IDEKKyNlbmRpZgorCisvKiBHTF9PRVNfdmVydGV4X3R5cGVfMTBfMTBfMTBf
MiAqLworI2lmbmRlZiBHTF9PRVNfdmVydGV4X3R5cGVfMTBfMTBfMTBfMgorI2RlZmluZSBHTF9P
RVNfdmVydGV4X3R5cGVfMTBfMTBfMTBfMiAxCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
CisgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBH
TF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9BTURfY29tcHJlc3Nl
ZF8zRENfdGV4dHVyZQorI2RlZmluZSBHTF9BTURfY29tcHJlc3NlZF8zRENfdGV4dHVyZSAxCisj
ZW5kaWYKKworLyogR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xf
QU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUKKyNkZWZpbmUgR0xfQU1EX2NvbXByZXNzZWRfQVRD
X3RleHR1cmUgMQorI2VuZGlmCisKKy8qIEFNRF9wZXJmb3JtYW5jZV9tb25pdG9yICovCisjaWZu
ZGVmIEdMX0FNRF9wZXJmb3JtYW5jZV9tb25pdG9yCisjZGVmaW5lIEdMX0FNRF9wZXJmb3JtYW5j
ZV9tb25pdG9yIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckdyb3Vwc0FNRCAoR0xpbnQgKm51bUdyb3Vwcywg
R0xzaXplaSBncm91cHNTaXplLCBHTHVpbnQgKmdyb3Vwcyk7CitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRvckNvdW50ZXJzQU1EIChHTHVpbnQgZ3JvdXAsIEdMaW50
ICpudW1Db3VudGVycywgR0xpbnQgKm1heEFjdGl2ZUNvdW50ZXJzLCBHTHNpemVpIGNvdW50ZXJT
aXplLCBHTHVpbnQgKmNvdW50ZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdl
dFBlcmZNb25pdG9yR3JvdXBTdHJpbmdBTUQgKEdMdWludCBncm91cCwgR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZ3JvdXBTdHJpbmcpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2V0UGVyZk1vbml0b3JDb3VudGVyU3RyaW5nQU1EIChHTHVpbnQgZ3Jv
dXAsIEdMdWludCBjb3VudGVyLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xj
aGFyICpjb3VudGVyU3RyaW5nKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBl
cmZNb25pdG9yQ291bnRlckluZm9BTUQgKEdMdWludCBncm91cCwgR0x1aW50IGNvdW50ZXIsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkICpkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdlblBlcmZNb25pdG9yc0FNRCAoR0xzaXplaSBuLCBHTHVpbnQgKm1vbml0b3JzKTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlbGV0ZVBlcmZNb25pdG9yc0FNRCAoR0xzaXplaSBu
LCBHTHVpbnQgKm1vbml0b3JzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFNlbGVj
dFBlcmZNb25pdG9yQ291bnRlcnNBTUQgKEdMdWludCBtb25pdG9yLCBHTGJvb2xlYW4gZW5hYmxl
LCBHTHVpbnQgZ3JvdXAsIEdMaW50IG51bUNvdW50ZXJzLCBHTHVpbnQgKmNvdW50ZXJzTGlzdCk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCZWdpblBlcmZNb25pdG9yQU1EIChHTHVp
bnQgbW9uaXRvcik7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFbmRQZXJmTW9uaXRv
ckFNRCAoR0x1aW50IG1vbml0b3IpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
UGVyZk1vbml0b3JDb3VudGVyRGF0YUFNRCAoR0x1aW50IG1vbml0b3IsIEdMZW51bSBwbmFtZSwg
R0xzaXplaSBkYXRhU2l6ZSwgR0x1aW50ICpkYXRhLCBHTGludCAqYnl0ZXNXcml0dGVuKTsKKyNl
bmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkdST1VQ
U0FNRFBST0MpIChHTGludCAqbnVtR3JvdXBzLCBHTHNpemVpIGdyb3Vwc1NpemUsIEdMdWludCAq
Z3JvdXBzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JD
T1VOVEVSU0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMaW50ICpudW1Db3VudGVycywgR0xpbnQg
Km1heEFjdGl2ZUNvdW50ZXJzLCBHTHNpemVpIGNvdW50ZXJTaXplLCBHTHVpbnQgKmNvdW50ZXJz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JHUk9VUFNU
UklOR0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGNoYXIgKmdyb3VwU3RyaW5nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMR0VUUEVSRk1PTklUT1JDT1VOVEVSU1RSSU5HQU1EUFJPQykgKEdMdWludCBncm91cCwgR0x1
aW50IGNvdW50ZXIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmNv
dW50ZXJTdHJpbmcpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9O
SVRPUkNPVU5URVJJTkZPQU1EUFJPQykgKEdMdWludCBncm91cCwgR0x1aW50IGNvdW50ZXIsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkICpkYXRhKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMR0VOUEVSRk1PTklUT1JTQU1EUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFTEVURVBFUkZNT05JVE9SU0FNRFBS
T0MpIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xTRUxFQ1RQRVJGTU9OSVRPUkNPVU5URVJTQU1EUFJPQykgKEdMdWludCBtb25p
dG9yLCBHTGJvb2xlYW4gZW5hYmxlLCBHTHVpbnQgZ3JvdXAsIEdMaW50IG51bUNvdW50ZXJzLCBH
THVpbnQgKmNvdW50ZXJzTGlzdCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEJF
R0lOUEVSRk1PTklUT1JBTURQUk9DKSAoR0x1aW50IG1vbml0b3IpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xFTkRQRVJGTU9OSVRPUkFNRFBST0MpIChHTHVpbnQgbW9uaXRvcik7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUkRB
VEFBTURQUk9DKSAoR0x1aW50IG1vbml0b3IsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBkYXRhU2l6
ZSwgR0x1aW50ICpkYXRhLCBHTGludCAqYnl0ZXNXcml0dGVuKTsKKyNlbmRpZgorCisvKiBHTF9B
TURfcHJvZ3JhbV9iaW5hcnlfWjQwMCAqLworI2lmbmRlZiBHTF9BTURfcHJvZ3JhbV9iaW5hcnlf
WjQwMAorI2RlZmluZSBHTF9BTURfcHJvZ3JhbV9iaW5hcnlfWjQwMCAxCisjZW5kaWYKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCisgKiBFWFQgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisvKiBHTF9FWFRfYmxlbmRfbWlubWF4ICovCisjaWZuZGVmIEdMX0VYVF9ibGVu
ZF9taW5tYXgKKyNkZWZpbmUgR0xfRVhUX2JsZW5kX21pbm1heCAxCisjZW5kaWYKKworLyogR0xf
RVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIgKi8KKyNpZm5kZWYgR0xfRVhUX2Rpc2NhcmRfZnJhbWVi
dWZmZXIKKyNkZWZpbmUgR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIgMQorI2lmZGVmIEdMX0dM
RVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERpc2NhcmRGcmFt
ZWJ1ZmZlckVYVCAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3Qg
R0xlbnVtICphdHRhY2htZW50cyk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMRElTQ0FSREZSQU1FQlVGRkVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSAqYXR0YWNobWVudHMpOworI2VuZGlmCisKKyNp
Zm5kZWYgR0xfRVhUX211bHRpX2RyYXdfYXJyYXlzCisjZGVmaW5lIEdMX0VYVF9tdWx0aV9kcmF3
X2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVudW0sIEdMaW50ICosIEdMc2l6ZWkg
KiwgR0xzaXplaSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVt
ZW50c0VYVCAoR0xlbnVtLCBjb25zdCBHTHNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAq
LCBHTHNpemVpKTsKKyNlbmRpZiAvKiBHTF9HTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1VTFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9k
ZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVpICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xNVUxUSURSQVdFTEVNRU5UU0VYVFBST0MpIChH
TGVudW0gbW9kZSwgY29uc3QgR0xzaXplaSAqY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQqICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7CisjZW5kaWYKKworLyogR0xfRVhUX3Jl
YWRfZm9ybWF0X2JncmEgKi8KKyNpZm5kZWYgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKKyNkZWZp
bmUgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgMQorI2VuZGlmCisKKy8qIEdMX0VYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYyAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIDEKKyNl
bmRpZgorCisvKiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KKyNpZm5kZWYgR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisjZGVmaW5lIEdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OCAxCisjZW5kaWYKKworLyogR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEw
X1JFViAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWCisjZGVm
aW5lIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgMQorI2VuZGlmCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogSU1HIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworLyogR0xfSU1HX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0lNR19wcm9n
cmFtX2JpbmFyeQorI2RlZmluZSBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKKy8q
IEdMX0lNR19yZWFkX2Zvcm1hdCAqLworI2lmbmRlZiBHTF9JTUdfcmVhZF9mb3JtYXQKKyNkZWZp
bmUgR0xfSU1HX3JlYWRfZm9ybWF0IDEKKyNlbmRpZgorCisvKiBHTF9JTUdfc2hhZGVyX2JpbmFy
eSAqLworI2lmbmRlZiBHTF9JTUdfc2hhZGVyX2JpbmFyeQorI2RlZmluZSBHTF9JTUdfc2hhZGVy
X2JpbmFyeSAxCisjZW5kaWYKKworLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMg
Ki8KKyNpZm5kZWYgR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKKyNkZWZpbmUgR0xf
SU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMgMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgorICogTlYgZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisv
KiBHTF9OVl9mZW5jZSAqLworI2lmbmRlZiBHTF9OVl9mZW5jZQorI2RlZmluZSBHTF9OVl9mZW5j
ZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRGVsZXRlRmVuY2VzTlYgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAqKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEdlbkZlbmNlc05WIChHTHNpemVpLCBHTHVpbnQgKik7CitH
TF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbElzRmVuY2VOViAoR0x1aW50KTsKK0dM
X0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsVGVzdEZlbmNlTlYgKEdMdWludCk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRGZW5jZWl2TlYgKEdMdWludCwgR0xlbnVt
LCBHTGludCAqKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZpbmlzaEZlbmNlTlYg
KEdMdWludCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xTZXRGZW5jZU5WIChHTHVp
bnQsIEdMZW51bSk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVM
RVRFRkVOQ0VTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmZlbmNlcyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFTkZFTkNFU05WUFJPQykgKEdMc2l6ZWkgbiwg
R0x1aW50ICpmZW5jZXMpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElT
RkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVO
VFJZUCBQRk5HTFRFU1RGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEdFVEZFTkNFSVZOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEZJTklTSEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRp
b24pOworI2VuZGlmCisKKy8qIEdMX05WX2NvdmVyYWdlX3NhbXBsZSAqLworI2lmbmRlZiBHTF9O
Vl9jb3ZlcmFnZV9zYW1wbGUKKyNkZWZpbmUgR0xfTlZfY292ZXJhZ2Vfc2FtcGxlIDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3Zl
cmFnZU1hc2tOViAoR0xib29sZWFuIG1hc2spOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsQ292ZXJhZ2VPcGVyYXRpb25OViAoR0xlbnVtIG9wZXJhdGlvbik7CisjZW5kaWYKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09WRVJBR0VNQVNLTlZQUk9DKSAoR0xib29sZWFu
IG1hc2spOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT1ZFUkFHRU9QRVJBVElP
Tk5WUFJPQykgKEdMZW51bSBvcGVyYXRpb24pOworI2VuZGlmCisKKy8qIEdMX05WX2RlcHRoX25v
bmxpbmVhciAqLworI2lmbmRlZiBHTF9OVl9kZXB0aF9ub25saW5lYXIKKyNkZWZpbmUgR0xfTlZf
ZGVwdGhfbm9ubGluZWFyIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFFDT00g
ZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9RQ09NX2Ry
aXZlcl9jb250cm9sICovCisjaWZuZGVmIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wKKyNkZWZpbmUg
R0xfUUNPTV9kcml2ZXJfY29udHJvbCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0RHJpdmVyQ29udHJvbHNRQ09NIChHTGludCAq
bnVtLCBHTHNpemVpIHNpemUsIEdMdWludCAqZHJpdmVyQ29udHJvbHMpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2V0RHJpdmVyQ29udHJvbFN0cmluZ1FDT00gKEdMdWludCBkcml2
ZXJDb250cm9sLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpkcml2
ZXJDb250cm9sU3RyaW5nKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEVuYWJsZURy
aXZlckNvbnRyb2xRQ09NIChHTHVpbnQgZHJpdmVyQ29udHJvbCk7CitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xEaXNhYmxlRHJpdmVyQ29udHJvbFFDT00gKEdMdWludCBkcml2ZXJDb250
cm9sKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVREUklWRVJD
T05UUk9MU1FDT01QUk9DKSAoR0xpbnQgKm51bSwgR0xzaXplaSBzaXplLCBHTHVpbnQgKmRyaXZl
ckNvbnRyb2xzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VURFJJVkVSQ09O
VFJPTFNUUklOR1FDT01QUk9DKSAoR0x1aW50IGRyaXZlckNvbnRyb2wsIEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmRyaXZlckNvbnRyb2xTdHJpbmcpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkFCTEVEUklWRVJDT05UUk9MUUNPTVBST0MpIChH
THVpbnQgZHJpdmVyQ29udHJvbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERJ
U0FCTEVEUklWRVJDT05UUk9MUUNPTVBST0MpIChHTHVpbnQgZHJpdmVyQ29udHJvbCk7CisjZW5k
aWYKKworLyogR0xfUUNPTV9leHRlbmRlZF9nZXQgKi8KKyNpZm5kZWYgR0xfUUNPTV9leHRlbmRl
ZF9nZXQKKyNkZWZpbmUgR0xfUUNPTV9leHRlbmRlZF9nZXQgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFRleHR1cmVzUUNP
TSAoR0x1aW50ICp0ZXh0dXJlcywgR0xpbnQgbWF4VGV4dHVyZXMsIEdMaW50ICpudW1UZXh0dXJl
cyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRCdWZmZXJzUUNPTSAoR0x1
aW50ICpidWZmZXJzLCBHTGludCBtYXhCdWZmZXJzLCBHTGludCAqbnVtQnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRSZW5kZXJidWZmZXJzUUNPTSAoR0x1aW50
ICpyZW5kZXJidWZmZXJzLCBHTGludCBtYXhSZW5kZXJidWZmZXJzLCBHTGludCAqbnVtUmVuZGVy
YnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRGcmFtZWJ1ZmZl
cnNRQ09NIChHTHVpbnQgKmZyYW1lYnVmZmVycywgR0xpbnQgbWF4RnJhbWVidWZmZXJzLCBHTGlu
dCAqbnVtRnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdl
dFRleExldmVsUGFyYW1ldGVyaXZRQ09NIChHTHVpbnQgdGV4dHVyZSwgR0xlbnVtIGZhY2UsIEdM
aW50IGxldmVsLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRXh0VGV4T2JqZWN0U3RhdGVPdmVycmlkZWlRQ09NIChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbEV4dEdldFRleFN1YkltYWdlUUNPTSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x2b2lkICp0ZXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0
R2V0QnVmZmVyUG9pbnRlcnZRQ09NIChHTGVudW0gdGFyZ2V0LCBHTHZvaWQgKipwYXJhbXMpOwor
I2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFRFWFRVUkVTUUNP
TVBST0MpIChHTHVpbnQgKnRleHR1cmVzLCBHTGludCBtYXhUZXh0dXJlcywgR0xpbnQgKm51bVRl
eHR1cmVzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUQlVGRkVSU1FD
T01QUk9DKSAoR0x1aW50ICpidWZmZXJzLCBHTGludCBtYXhCdWZmZXJzLCBHTGludCAqbnVtQnVm
ZmVycyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFJFTkRFUkJVRkZF
UlNRQ09NUFJPQykgKEdMdWludCAqcmVuZGVyYnVmZmVycywgR0xpbnQgbWF4UmVuZGVyYnVmZmVy
cywgR0xpbnQgKm51bVJlbmRlcmJ1ZmZlcnMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xFWFRHRVRGUkFNRUJVRkZFUlNRQ09NUFJPQykgKEdMdWludCAqZnJhbWVidWZmZXJzLCBH
TGludCBtYXhGcmFtZWJ1ZmZlcnMsIEdMaW50ICpudW1GcmFtZWJ1ZmZlcnMpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRURVhMRVZFTFBBUkFNRVRFUklWUUNPTVBST0Mp
IChHTHVpbnQgdGV4dHVyZSwgR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRURVhP
QkpFQ1RTVEFURU9WRVJSSURFSVFDT01QUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludCBwYXJhbSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFRF
WFNVQklNQUdFUUNPTVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZv
aWQgKnRleGVscyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVEJVRkZF
UlBPSU5URVJWUUNPTVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHZvaWQgKipwYXJhbXMpOworI2Vu
ZGlmCisKKy8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MiAqLworI2lmbmRlZiBHTF9RQ09NX2V4dGVu
ZGVkX2dldDIKKyNkZWZpbmUgR0xfUUNPTV9leHRlbmRlZF9nZXQyIDEKKyNpZmRlZiBHTF9HTEVY
VF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRTaGFkZXJz
UUNPTSAoR0x1aW50ICpzaGFkZXJzLCBHTGludCBtYXhTaGFkZXJzLCBHTGludCAqbnVtU2hhZGVy
cyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRQcm9ncmFtc1FDT00gKEdM
dWludCAqcHJvZ3JhbXMsIEdMaW50IG1heFByb2dyYW1zLCBHTGludCAqbnVtUHJvZ3JhbXMpOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xFeHRJc1Byb2dyYW1CaW5hcnlRQ09N
IChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRHZXRQ
cm9ncmFtQmluYXJ5U291cmNlUUNPTSAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBzaGFkZXJ0eXBl
LCBHTGNoYXIgKnNvdXJjZSwgR0xpbnQgKmxlbmd0aCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUU0hBREVSU1FDT01QUk9DKSAoR0x1aW50ICpzaGFkZXJz
LCBHTGludCBtYXhTaGFkZXJzLCBHTGludCAqbnVtU2hhZGVycyk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEVYVEdFVFBST0dSQU1TUUNPTVBST0MpIChHTHVpbnQgKnByb2dyYW1z
LCBHTGludCBtYXhQcm9ncmFtcywgR0xpbnQgKm51bVByb2dyYW1zKTsKK3R5cGVkZWYgR0xib29s
ZWFuIChHTF9BUElFTlRSWVAgUEZOR0xFWFRJU1BST0dSQU1CSU5BUllRQ09NUFJPQykgKEdMdWlu
dCBwcm9ncmFtKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUFJPR1JB
TUJJTkFSWVNPVVJDRVFDT01QUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBzaGFkZXJ0eXBl
LCBHTGNoYXIgKnNvdXJjZSwgR0xpbnQgKmxlbmd0aCk7CisjZW5kaWYKKworLyogR0xfUUNPTV9w
ZXJmbW9uX2dsb2JhbF9tb2RlICovCisjaWZuZGVmIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9k
ZQorI2RlZmluZSBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUgMQorI2VuZGlmCisKKy8qIEdM
X1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZyAqLworI2lmbmRlZiBHTF9RQ09NX3dyaXRlb25seV9y
ZW5kZXJpbmcKKyNkZWZpbmUgR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nIDEKKyNlbmRpZgor
CisvKiBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZyAqLworI2lmbmRlZiBHTF9RQ09NX3RpbGVkX3Jl
bmRlcmluZworI2RlZmluZSBHTF9RQ09NX3RpbGVkX3JlbmRlcmluZyAxCisjaWZkZWYgR0xfR0xF
WFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsU3RhcnRUaWxpbmdR
Q09NIChHTHVpbnQgeCwgR0x1aW50IHksIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0xi
aXRmaWVsZCBwcmVzZXJ2ZU1hc2spOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRW5k
VGlsaW5nUUNPTSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOworI2VuZGlmCit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNUQVJUVElMSU5HUUNPTVBST0MpIChHTHVpbnQgeCwgR0x1
aW50IHksIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0xiaXRmaWVsZCBwcmVzZXJ2ZU1h
c2spOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykg
KEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K30KKyNlbmRpZgorCisjZW5kaWYgLyogX19nbDJleHRfaF8gKi8KSW5kZXg6IEFOR0xFL2luY2x1
ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMRVMy
L2dsMnBsYXRmb3JtLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMnBs
YXRmb3JtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDJwbGF0
Zm9ybV9oXworI2RlZmluZSBfX2dsMnBsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTA2MDIg
JCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAgIyQgKi8KKworLyoKKyAqIFRo
aXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGlj
ZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29t
L3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5k
IGRlZmluaXRpb25zIGZvciBPcGVuR0wgRVMgMi5YICBnbDIuaAorICoKKyAqIEFkb3B0ZXJzIG1h
eSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZv
cm0uCisgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRv
IHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1
dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAqIGJ5
IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9raHJv
bm9zLm9yZy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3QgIk9w
ZW5HTC1FUyIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9raHJw
bGF0Zm9ybS5oPgorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAgS0hS
T05PU19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBHTF9B
UElFTlRSWSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wycGxhdGZv
cm1faF8gKi8KSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1JF
U09VUkNFX0xJTUlUU19JTkNMVURFRF8KKyNkZWZpbmUgX1JFU09VUkNFX0xJTUlUU19JTkNMVURF
RF8KKworc3RydWN0IFRCdWlsdEluUmVzb3VyY2UKK3sKKwlpbnQgbWF4VmVydGV4QXR0cmliczsK
KwlpbnQgbWF4VmVydGV4VW5pZm9ybVZlY3RvcnM7CisJaW50IG1heFZhcnlpbmdWZWN0b3JzOwor
CWludCBtYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0czsKKwlpbnQgbWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0czsKKwlpbnQgbWF4VGV4dHVyZUltYWdlVW5pdHM7CisJaW50IG1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnM7CisJaW50IG1heERyYXdCdWZmZXJzOworfTsKKyNlbmRpZiAvLyBfUkVT
T1VSQ0VfTElNSVRTX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisjaWZuZGVmIF9D
T01QSUxFUl9JTlRFUkZBQ0VfSU5DTFVERURfCisjZGVmaW5lIF9DT01QSUxFUl9JTlRFUkZBQ0Vf
SU5DTFVERURfCisKKyNpbmNsdWRlICJSZXNvdXJjZUxpbWl0cy5oIgorCisvLworLy8gVGhpcyBp
cyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZl
cgorLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBpbGVyLgorLy8KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorLy8KKy8vIERyaXZlciBtdXN0IGNhbGwg
dGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgorLy8gY29tcGlsZXIgb3Bl
cmF0aW9ucy4KKy8vCitpbnQgU2hJbml0aWFsaXplKCk7CisvLworLy8gRHJpdmVyIHNob3VsZCBj
YWxsIHRoaXMgYXQgc2h1dGRvd24uCisvLworaW50IFNoRmluYWxpemUoKTsKKy8vCisvLyBUeXBl
cyBvZiBsYW5ndWFnZXMgdGhlIGNvbXBpbGVyIGNhbiBjb25zdW1lLgorLy8KK3R5cGVkZWYgZW51
bSB7CisgICAgRVNoTGFuZ1ZlcnRleCwKKyAgICBFU2hMYW5nRnJhZ21lbnQsCisgICAgRVNoTGFu
Z0NvdW50LAorfSBFU2hMYW5ndWFnZTsKKworLy8KKy8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0
aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvLgorLy8gSXQgY3VycmVudGx5IHN1cHBvcnRzIE9wZW5H
TCBFUyBhbmQgV2ViR0wgc3BlY2lmaWNhdGlvbnMuCisvLwordHlwZWRlZiBlbnVtIHsKKyAgICBF
U2hTcGVjR0xFUzIsCisgICAgRVNoU3BlY1dlYkdMLAorfSBFU2hTcGVjOworCisvLworLy8gT3B0
aW1pemF0aW9uIGxldmVsIGZvciB0aGUgY29tcGlsZXIuCisvLwordHlwZWRlZiBlbnVtIHsKKyAg
ICBFU2hPcHROb0dlbmVyYXRpb24sCisgICAgRVNoT3B0Tm9uZSwKKyAgICBFU2hPcHRTaW1wbGUs
ICAgICAgIC8vIE9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSBxdWlja2x5CisgICAgRVNo
T3B0RnVsbCwgICAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgd2lsbCB0YWtlIG1vcmUgdGlt
ZQorfSBFU2hPcHRpbWl6YXRpb25MZXZlbDsKKworZW51bSBURGVidWdPcHRpb25zIHsKKyAgICBF
RGVidWdPcE5vbmUgICAgICAgICAgICAgICA9IDB4MDAwLAorICAgIEVEZWJ1Z09wSW50ZXJtZWRp
YXRlICAgICAgID0gMHgwMDEsICAvLyBXcml0ZXMgaW50ZXJtZWRpYXRlIHRyZWUgaW50byBpbmZv
LWxvZy4KK307CisKKy8vCisvLyBTaEhhbmRsZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRy
aXZlci4gIEl0IGlzIGFsbG9jYXRlZCwKKy8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkg
dGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRzIAorLy8gYXJlIGRlZmluZWQgYnkgYW5kIHVzZWQg
YnkgdGhlIGNvbXBpbGVyLgorLy8KKy8vIElmIGhhbmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxs
IGJlIHJldHVybmVkLgorLy8KK3R5cGVkZWYgdm9pZCogU2hIYW5kbGU7CisKKy8vCisvLyBEcml2
ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGNvbXBpbGVyIG9iamVjdHMuCisv
LworU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSwgRVNoU3BlYyk7ICAv
LyBvbmUgcGVyIHNoYWRlcgordm9pZCBTaERlc3RydWN0KFNoSGFuZGxlKTsKKworLy8KKy8vIFRo
ZSByZXR1cm4gdmFsdWUgb2YgU2hDb21waWxlIGlzIGJvb2xlYW4sIGluZGljYXRpbmcKKy8vIHN1
Y2Nlc3Mgb3IgZmFpbHVyZS4KKy8vCisvLyBUaGUgaW5mby1sb2cgc2hvdWxkIGJlIHdyaXR0ZW4g
YnkgU2hDb21waWxlIGludG8gCisvLyBTaEhhbmRsZSwgc28gaXQgY2FuIGFuc3dlciBmdXR1cmUg
cXVlcmllcy4KKy8vCitpbnQgU2hDb21waWxlKAorICAgIGNvbnN0IFNoSGFuZGxlLAorICAgIGNv
bnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKKyAgICBjb25zdCBpbnQgbnVtU3RyaW5n
cywKKyAgICBjb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKKyAgICBjb25zdCBUQnVpbHRJblJl
c291cmNlICpyZXNvdXJjZXMsCisgICAgaW50IGRlYnVnT3B0aW9ucworICAgICk7CisKKy8vCisv
LyBBbGwgdGhlIGZvbGxvd2luZyByZXR1cm4gMCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90Cisv
LyBhdmFpbGFibGUgaW4gdGhlIG9iamVjdCBwYXNzZWQgZG93biwgb3IgdGhlIG9iamVjdCBpcyBi
YWQuCisvLworY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlKTsKK2NvbnN0
IGNoYXIqIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSk7CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVE
XwpJbmRleDogQU5HTEUvaW5jbHVkZS9LSFIva2hycGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9pbmNsdWRlL0tIUi9raHJwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvaW5j
bHVkZS9LSFIva2hycGxhdGZvcm0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjkgQEAKKyNp
Zm5kZWYgX19raHJwbGF0Zm9ybV9oXworI2RlZmluZSBfX2tocnBsYXRmb3JtX2hfCisKKy8qCisq
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisqKgorKiog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0
aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworKiogd2l0aG91dCBs
aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo
LAorKiogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBN
YXRlcmlhbHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxz
IGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoqIHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4gYWxsIGNvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioKKyoqIFRIRSBNQVRFUklBTFMg
QVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisqKiBF
WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisqKiBDTEFJTSwgREFN
QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LAorKiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOIFRIRSBNQVRFUklBTFMuCisqLworCisvKiBLaHJvbm9zIHBsYXRmb3JtLXNwZWNpZmljIHR5
cGVzIGFuZCBkZWZpbml0aW9ucy4KKyAqCisgKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTog
MjAwOS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICoKKyAqIEFk
b3B0ZXJzIG1heSBtb2RpZnkgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZvcm0uIEFkb3B0
ZXJzIGFyZQorICogZW5jb3VyYWdlZCB0byBzdWJtaXQgcGxhdGZvcm0gc3BlY2lmaWMgbW9kaWZp
Y2F0aW9ucyB0byB0aGUgS2hyb25vcworICogZ3JvdXAgc28gdGhhdCB0aGV5IGNhbiBiZSBpbmNs
dWRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLgorICogUGxlYXNlIHN1Ym1pdCBj
aGFuZ2VzIGJ5IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEKKyAq
IChodHRwOi8va2hyb25vcy5vcmcvYnVnemlsbGEpIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHBy
b2R1Y3QKKyAqICJLaHJvbm9zIChnZW5lcmFsKSIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKgor
ICogQSBwcmVkZWZpbmVkIHRlbXBsYXRlIHdoaWNoIGZpbGxzIGluIHNvbWUgb2YgdGhlIGJ1ZyBm
aWVsZHMgY2FuIGJlCisgKiByZWFjaGVkIHVzaW5nIGh0dHA6Ly90aW55dXJsLmNvbS9raHJwbGF0
Zm9ybS1oLWJ1Z3JlcG9ydCwgYnV0IHlvdQorICogbXVzdCBjcmVhdGUgYSBCdWd6aWxsYSBsb2dp
biBmaXJzdC4KKyAqCisgKgorICogU2VlIHRoZSBJbXBsZW1lbnRlcidzIEd1aWRlbGluZXMgZm9y
IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoaXMgZmlsZQorICogc2hvdWxkIGJlIGxvY2F0ZWQg
b24geW91ciBzeXN0ZW0gYW5kIGZvciBtb3JlIGRldGFpbHMgb2YgaXRzIHVzZToKKyAqICAgIGh0
dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvaW1wbGVtZW50ZXJzX2d1aWRlLnBkZgorICoK
KyAqIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMKKyAqICAgICAgICAjaW5jbHVkZSA8
S0hSL2tocnBsYXRmb3JtLmg+CisgKiBieSBLaHJvbm9zIGNsaWVudCBBUEkgaGVhZGVyIGZpbGVz
IHRoYXQgdXNlIGl0cyB0eXBlcyBhbmQgZGVmaW5lcy4KKyAqCisgKiBUaGUgdHlwZXMgaW4ga2hy
cGxhdGZvcm0uaCBzaG91bGQgb25seSBiZSB1c2VkIHRvIGRlZmluZSBBUEktc3BlY2lmaWMgdHlw
ZXMuCisgKgorICogVHlwZXMgZGVmaW5lZCBpbiBraHJwbGF0Zm9ybS5oOgorICogICAga2hyb25v
c19pbnQ4X3QgICAgICAgICAgICAgIHNpZ25lZCAgIDggIGJpdAorICogICAga2hyb25vc191aW50
OF90ICAgICAgICAgICAgIHVuc2lnbmVkIDggIGJpdAorICogICAga2hyb25vc19pbnQxNl90ICAg
ICAgICAgICAgIHNpZ25lZCAgIDE2IGJpdAorICogICAga2hyb25vc191aW50MTZfdCAgICAgICAg
ICAgIHVuc2lnbmVkIDE2IGJpdAorICogICAga2hyb25vc19pbnQzMl90ICAgICAgICAgICAgIHNp
Z25lZCAgIDMyIGJpdAorICogICAga2hyb25vc191aW50MzJfdCAgICAgICAgICAgIHVuc2lnbmVk
IDMyIGJpdAorICogICAga2hyb25vc19pbnQ2NF90ICAgICAgICAgICAgIHNpZ25lZCAgIDY0IGJp
dAorICogICAga2hyb25vc191aW50NjRfdCAgICAgICAgICAgIHVuc2lnbmVkIDY0IGJpdAorICog
ICAga2hyb25vc19pbnRwdHJfdCAgICAgICAgICAgIHNpZ25lZCAgIHNhbWUgbnVtYmVyIG9mIGJp
dHMgYXMgYSBwb2ludGVyCisgKiAgICBraHJvbm9zX3VpbnRwdHJfdCAgICAgICAgICAgdW5zaWdu
ZWQgc2FtZSBudW1iZXIgb2YgYml0cyBhcyBhIHBvaW50ZXIKKyAqICAgIGtocm9ub3Nfc3NpemVf
dCAgICAgICAgICAgICBzaWduZWQgICBzaXplCisgKiAgICBraHJvbm9zX3VzaXplX3QgICAgICAg
ICAgICAgdW5zaWduZWQgc2l6ZQorICogICAga2hyb25vc19mbG9hdF90ICAgICAgICAgICAgIHNp
Z25lZCAgIDMyIGJpdCBmbG9hdGluZyBwb2ludAorICogICAga2hyb25vc190aW1lX25zX3QgICAg
ICAgICAgIHVuc2lnbmVkIDY0IGJpdCB0aW1lIGluIG5hbm9zZWNvbmRzCisgKiAgICBraHJvbm9z
X3V0aW1lX25hbm9zZWNvbmRzX3QgdW5zaWduZWQgdGltZSBpbnRlcnZhbCBvciBhYnNvbHV0ZSB0
aW1lIGluCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFub3Nl
Y29uZHMKKyAqICAgIGtocm9ub3Nfc3RpbWVfbmFub3NlY29uZHNfdCBzaWduZWQgdGltZSBpbnRl
cnZhbCBpbiBuYW5vc2Vjb25kcworICogICAga2hyb25vc19ib29sZWFuX2VudW1fdCAgICAgIGVu
dW1lcmF0ZWQgYm9vbGVhbiB0eXBlLiBUaGlzIHNob3VsZAorICogICAgICBvbmx5IGJlIHVzZWQg
YXMgYSBiYXNlIHR5cGUgd2hlbiBhIGNsaWVudCBBUEkncyBib29sZWFuIHR5cGUgaXMKKyAqICAg
ICAgYW4gZW51bS4gQ2xpZW50IEFQSXMgd2hpY2ggdXNlIGFuIGludGVnZXIgb3Igb3RoZXIgdHlw
ZSBmb3IKKyAqICAgICAgYm9vbGVhbnMgY2Fubm90IHVzZSB0aGlzIGFzIHRoZSBiYXNlIHR5cGUg
Zm9yIHRoZWlyIGJvb2xlYW4uCisgKgorICogVG9rZW5zIGRlZmluZWQgaW4ga2hycGxhdGZvcm0u
aDoKKyAqCisgKiAgICBLSFJPTk9TX0ZBTFNFLCBLSFJPTk9TX1RSVUUgRW51bWVyYXRlZCBib29s
ZWFuIGZhbHNlL3RydWUgdmFsdWVzLgorICoKKyAqICAgIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCBp
cyAxIGlmIDY0IGJpdCBpbnRlZ2VycyBhcmUgc3VwcG9ydGVkOyBvdGhlcndpc2UgMC4KKyAqICAg
IEtIUk9OT1NfU1VQUE9SVF9GTE9BVCBpcyAxIGlmIGZsb2F0cyBhcmUgc3VwcG9ydGVkOyBvdGhl
cndpc2UgMC4KKyAqCisgKiBDYWxsaW5nIGNvbnZlbnRpb24gbWFjcm9zIGRlZmluZWQgaW4gdGhp
cyBmaWxlOgorICogICAgS0hST05PU19BUElDQUxMCisgKiAgICBLSFJPTk9TX0FQSUVOVFJZCisg
KiAgICBLSFJPTk9TX0FQSUFUVFJJQlVURVMKKyAqCisgKiBUaGVzZSBtYXkgYmUgdXNlZCBpbiBm
dW5jdGlvbiBwcm90b3R5cGVzIGFzOgorICoKKyAqICAgICAgS0hST05PU19BUElDQUxMIHZvaWQg
S0hST05PU19BUElFTlRSWSBmdW5jbmFtZSgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBhcmcxLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGFyZzIpIEtIUk9OT1NfQVBJQVRUUklCVVRFUzsKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAqIERlZmluaXRpb24gb2YgS0hST05PU19BUElDQUxMCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq
IFRoaXMgcHJlY2VkZXMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgZnVu
Y3Rpb24gcHJvdG90eXBlLgorICovCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9f
U0NJVEVDSF9TTkFQX18pCisjICAgZGVmaW5lIEtIUk9OT1NfQVBJQ0FMTCBfX2RlY2xzcGVjKGRs
bGltcG9ydCkKKyNlbGlmIGRlZmluZWQgKF9fU1lNQklBTjMyX18pCisjICAgZGVmaW5lIEtIUk9O
T1NfQVBJQ0FMTCBJTVBPUlRfQworI2Vsc2UKKyMgICBkZWZpbmUgS0hST05PU19BUElDQUxMCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJ
RU5UUlkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmb2xsb3dzIHRoZSByZXR1cm4gdHlw
ZSBvZiB0aGUgZnVuY3Rpb24gIGFuZCBwcmVjZWRlcyB0aGUgZnVuY3Rpb24KKyAqIG5hbWUgaW4g
dGhlIGZ1bmN0aW9uIHByb3RvdHlwZS4KKyAqLworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfV0lOMzJfV0NFKSAmJiAhZGVmaW5lZChfX1NDSVRFQ0hfU05BUF9fKQorICAgIC8qIFdp
bjMyIGJ1dCBub3QgV2luQ0UgKi8KKyMgICBkZWZpbmUgS0hST05PU19BUElFTlRSWSBfX3N0ZGNh
bGwKKyNlbHNlCisjICAgZGVmaW5lIEtIUk9OT1NfQVBJRU5UUlkKKyNlbmRpZgorCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAqIERlZmluaXRpb24gb2YgS0hST05PU19BUElBVFRSSUJVVEVTCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZm9sbG93cyB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBv
ZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIGFyZ3VtZW50cy4KKyAqLworI2lmIGRlZmluZWQgKF9f
QVJNQ0NfMl9fKQorI2RlZmluZSBLSFJPTk9TX0FQSUFUVFJJQlVURVMgX19zb2Z0ZnAKKyNlbHNl
CisjZGVmaW5lIEtIUk9OT1NfQVBJQVRUUklCVVRFUworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICogYmFzaWMgdHlwZSBkZWZpbml0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYg
KGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFM
KSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fU0NPX18pIHx8IGRlZmluZWQoX19V
U0xDX18pCisKKworLyoKKyAqIFVzaW5nIDxzdGRpbnQuaD4KKyAqLworI2luY2x1ZGUgPHN0ZGlu
dC5oPgordHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7Cit0
eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7Cit0eXBlZGVm
IGludDY0X3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdWludDY0
X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50NjRfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQ
T1JUX0lOVDY0ICAgMQorI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgICAxCisKKyNlbGlm
IGRlZmluZWQoX19WTVMgKSB8fCBkZWZpbmVkKF9fc2dpKQorCisvKgorICogVXNpbmcgPGludHR5
cGVzLmg+CisgKi8KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQzMl90ICAgICAg
ICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAg
ICAgIGtocm9ub3NfdWludDMyX3Q7Cit0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgICAgIGto
cm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgICAgICAgICAga2hyb25vc191
aW50NjRfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMQorI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfRkxPQVQgICAxCisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5l
ZChfX1NDSVRFQ0hfU05BUF9fKQorCisvKgorICogV2luMzIKKyAqLwordHlwZWRlZiBfX2ludDMy
ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50
MzIgICAgICAgIGtocm9ub3NfdWludDMyX3Q7Cit0eXBlZGVmIF9faW50NjQgICAgICAgICAgICAg
ICAgIGtocm9ub3NfaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgICAgICAga2hy
b25vc191aW50NjRfdDsKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgMQorI2RlZmlu
ZSBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgICAxCisKKyNlbGlmIGRlZmluZWQoX19zdW5fXykgfHwg
ZGVmaW5lZChfX2RpZ2l0YWxfXykKKworLyoKKyAqIFN1biBvciBEaWdpdGFsCisgKi8KK3R5cGVk
ZWYgaW50ICAgICAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwordHlwZWRlZiB1bnNp
Z25lZCBpbnQgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OworI2lmIGRlZmluZWQoX19hcmNo
NjRfXykgfHwgZGVmaW5lZChfTFA2NCkKK3R5cGVkZWYgbG9uZyBpbnQgICAgICAgICAgICAgICAg
a2hyb25vc19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCAgICAgICBraHJvbm9z
X3VpbnQ2NF90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBsb25nIGludCAgICAgICAgICAga2hyb25v
c19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50ICBraHJvbm9zX3VpbnQ2
NF90OworI2VuZGlmIC8qIF9fYXJjaDY0X18gKi8KKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0lO
VDY0ICAgMQorI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgICAxCisKKyNlbGlmIDAKKwor
LyoKKyAqIEh5cG90aGV0aWNhbCBwbGF0Zm9ybSB3aXRoIG5vIGZsb2F0IG9yIGludDY0IHN1cHBv
cnQKKyAqLwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7CisjZGVm
aW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDAKKyNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZM
T0FUICAgMAorCisjZWxzZQorCisvKgorICogR2VuZXJpYyBmYWxsYmFjaworICovCisjaW5jbHVk
ZSA8c3RkaW50Lmg+Cit0eXBlZGVmIGludDMyX3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50
MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsK
K3R5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQ2NF90OwordHlwZWRl
ZiB1aW50NjRfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQ2NF90OworI2RlZmluZSBLSFJP
Tk9TX1NVUFBPUlRfSU5UNjQgICAxCisjZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAgIDEK
KworI2VuZGlmCisKKworLyoKKyAqIFR5cGVzIHRoYXQgYXJlIChzbyBmYXIpIHRoZSBzYW1lIG9u
IGFsbCBwbGF0Zm9ybXMKKyAqLwordHlwZWRlZiBzaWduZWQgICBjaGFyICAgICAgICAgIGtocm9u
b3NfaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgIGtocm9ub3NfdWludDhf
dDsKK3R5cGVkZWYgc2lnbmVkICAgc2hvcnQgaW50ICAgICBraHJvbm9zX2ludDE2X3Q7Cit0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCAgICAga2hyb25vc191aW50MTZfdDsKK3R5cGVkZWYgc2ln
bmVkICAgbG9uZyAgaW50ICAgICBraHJvbm9zX2ludHB0cl90OwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBpbnQgICAgIGtocm9ub3NfdWludHB0cl90OwordHlwZWRlZiBzaWduZWQgICBsb25nICBp
bnQgICAgIGtocm9ub3Nfc3NpemVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgaW50ICAgICBr
aHJvbm9zX3VzaXplX3Q7CisKKyNpZiBLSFJPTk9TX1NVUFBPUlRfRkxPQVQKKy8qCisgKiBGbG9h
dCB0eXBlCisgKi8KK3R5cGVkZWYgICAgICAgICAgZmxvYXQgICAgICAgICBraHJvbm9zX2Zsb2F0
X3Q7CisjZW5kaWYKKworI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NAorLyogVGltZSB0eXBlcwor
ICoKKyAqIFRoZXNlIHR5cGVzIGNhbiBiZSB1c2VkIHRvIHJlcHJlc2VudCBhIHRpbWUgaW50ZXJ2
YWwgaW4gbmFub3NlY29uZHMgb3IKKyAqIGFuIGFic29sdXRlIFVuYWRqdXN0ZWQgU3lzdGVtIFRp
bWUuICBVbmFkanVzdGVkIFN5c3RlbSBUaW1lIGlzIHRoZSBudW1iZXIKKyAqIG9mIG5hbm9zZWNv
bmRzIHNpbmNlIHNvbWUgYXJiaXRyYXJ5IHN5c3RlbSBldmVudCAoZS5nLiBzaW5jZSB0aGUgbGFz
dAorICogdGltZSB0aGUgc3lzdGVtIGJvb3RlZCkuICBUaGUgVW5hZGp1c3RlZCBTeXN0ZW0gVGlt
ZSBpcyBhbiB1bnNpZ25lZAorICogNjQgYml0IHZhbHVlIHRoYXQgd3JhcHMgYmFjayB0byAwIGV2
ZXJ5IDU4NCB5ZWFycy4gIFRpbWUgaW50ZXJ2YWxzCisgKiBtYXkgYmUgZWl0aGVyIHNpZ25lZCBv
ciB1bnNpZ25lZC4KKyAqLwordHlwZWRlZiBraHJvbm9zX3VpbnQ2NF90ICAgICAgIGtocm9ub3Nf
dXRpbWVfbmFub3NlY29uZHNfdDsKK3R5cGVkZWYga2hyb25vc19pbnQ2NF90ICAgICAgICBraHJv
bm9zX3N0aW1lX25hbm9zZWNvbmRzX3Q7CisjZW5kaWYKKworLyoKKyAqIER1bW15IHZhbHVlIHVz
ZWQgdG8gcGFkIGVudW0gdHlwZXMgdG8gMzIgYml0cy4KKyAqLworI2lmbmRlZiBLSFJPTk9TX01B
WF9FTlVNCisjZGVmaW5lIEtIUk9OT1NfTUFYX0VOVU0gMHg3RkZGRkZGRgorI2VuZGlmCisKKy8q
CisgKiBFbnVtZXJhdGVkIGJvb2xlYW4gdHlwZQorICoKKyAqIFZhbHVlcyBvdGhlciB0aGFuIHpl
cm8gc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgdHJ1ZS4gIFRoZXJlZm9yZQorICogY29tcGFy
aXNvbnMgc2hvdWxkIG5vdCBiZSBtYWRlIGFnYWluc3QgS0hST05PU19UUlVFLgorICovCit0eXBl
ZGVmIGVudW0geworICAgIEtIUk9OT1NfRkFMU0UgPSAwLAorICAgIEtIUk9OT1NfVFJVRSAgPSAx
LAorICAgIEtIUk9OT1NfQk9PTEVBTl9FTlVNX0ZPUkNFX1NJWkUgPSBLSFJPTk9TX01BWF9FTlVN
Cit9IGtocm9ub3NfYm9vbGVhbl9lbnVtX3Q7CisKKyNlbmRpZiAvKiBfX2tocnBsYXRmb3JtX2hf
ICovCkluZGV4OiBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxMyBAQAorLy8gISQqVVRG
OCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0geworCX07CisJb2JqZWN0
VmVyc2lvbiA9IDQ1OworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdl
dCBzZWN0aW9uICovCisJCTE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwgKi8gPSB7CisJ
CQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
NzdDRUZCN0I0MEYwNUIwQTgwNEU2QjJCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYQWdncmVnYXRlVGFyZ2V0ICJBbGwiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkpOwor
CQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCUZCM0M1MDY0MTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhU
YXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSBBbGw7CisJCQlwcm9kdWN0TmFt
ZSA9IEFsbDsKKwkJfTsKKwkJMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFOR0xFIFN1cHBv
cnQgKi8gPSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gMEFBNTQ4MjVCRjVERjBBM0ZCQTkyQjYwIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJBTkdMRSBTdXBwb3J0IiAqLzsKKwkJCWJ1
aWxkUGhhc2VzID0gKAorCQkJCUZBMEQ3MTI1REIwNkE3QTc3MTZBNTkxMCAvKiBBY3Rpb24gImZs
ZXhfZ2xzbGFuZyIgKi8sCisJCQkJMEQ1MTNGOEI5MjM5NDlDMTU2REIwMkM1IC8qIEFjdGlvbiAi
Ymlzb25fZ2xzbGFuZyIgKi8sCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJ
CW5hbWUgPSAiQU5HTEUgU3VwcG9ydCI7CisJCQlwcm9kdWN0TmFtZSA9ICJ0cmFuc2xhdG9yX2Nv
bW1vbiBTdXBwb3J0IjsKKwkJfTsKKy8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAq
LworCisvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwNTU2M0FERkVBMTUxMTZE
NzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCAqLzsgfTsKKwkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxp
emVEbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OworCQkw
RDQwNjQxNjczOThBNjg5MjgwOUEwOUUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlB
IC8qIGdsc2xhbmdfdGFiLmNwcCAqLzsgfTsKKwkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8q
IEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovOyB9Owor
CQkzMkIxREJDRDZCODNGMjE0NkQ3ODdBNjIgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0
b20uYyAqLzsgfTsKKwkJMzVCRTFCQkVFNjEzNUExQ0IwNjA4RUE4IC8qIGNwcHN0cnVjdC5jIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA1OEEwQTJBMEEw
MjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovOyB9OworCQkzQTk2RTlDQUM4QTI1QUYxNTY0
QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi87IH07CisJCTQw
RkMxODlCOEEyNDZFREYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8q
IGludGVybU91dC5jcHAgKi87IH07CisJCTUwREYwMDAwNUNDNDIxMkY2RkIxMjkxRCAvKiBJbnRl
cm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07CisJ
CTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3
OTYgLyogUGFyc2VIZWxwZXIuY3BwICovOyB9OworCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzgg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJOUU4REZF
MUNDRUYwMzhCRjJCNjU0MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBh
cnNlQ29uc3QuY3BwICovOyB9OworCQlBQkE1QzYxQjFCNzhCOUE4RDY5RjZBRUMgLyogZ2xzbGFu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjFG
OTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5jcHAgKi87IH07CisJCUFDMjNGNThGREQz
QzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVU
cmVlLmNwcCAqLzsgfTsKKwkJQUQ4NTUxN0YwODZGRENFRjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJE
QUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi87IH07CisJCUI0ODU4NDE3RTU0MzY1QkU4Q0RF
MzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3VyY2VfcG9z
aXguY3BwICovOyB9OworCQlCOEJEMjY4NUExNkIxODhDQ0RGQjA1MkIgLyogU2hhZGVyTGFuZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NkM3RTk5
QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi87IH07CisJCUJFQkJGNEYwODE5
RUEzRDAzOTc3QThGQyAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovOyB9OworCQlDQjdGMEVGMEQ2QTg5RkE4QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzU3MDdCMzkzQjdFQUI3REQ5
OTk5Q0IgLyogY3BwLmMgKi87IH07CisJCUUxQzdDNURGRjBCMkRGRUMwOTM4N0Y0RSAvKiBQb29s
QWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi87IH07CisJCUU4Qzcy
N0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMu
YyAqLzsgfTsKKwkJRjA5OEY0NjNFREFCQ0YwNzY5MDA3Njc4IC8qIHNjYW5uZXIuYyBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGM0FBNjk0REY5QTQ0NTVB
ODEzMjM0RCAvKiBzY2FubmVyLmMgKi87IH07CisJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3Bw
ICovOyB9OworCQlGNkFCRDU4RjhDQUI3NjQxRDhCRkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdFNUIwRjA0NjM1
RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTcxMUY3OTI0
QTAwODFGNUJBIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xT
TC5jcHAgKi87IH07CisJCUZCM0M1MDU4MTFGNzkyNEEwMDgxRjVCQSAvKiBPdXRwdXRHTFNMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4Qjc0MDJD
QzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLzsgfTsKKwkJRkIzQzUwNTkxMUY3
OTI0QTAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgKi87IH07CisJCUZCM0M1MDhFMTFGNzk0OUUwMDgxRjVCQSAvKiBnbHNs
YW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENC
MUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLzsgfTsKKwkJRkIzQzUwOEYx
MUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBnbHNs
YW5nX3RhYi5jcHAgKi87IH07CisJCUZCM0M1MDkyMTFGNzk0Q0UwMDgxRjVCQSAvKiBkZWJ1Zy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUJBMjMw
RkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9OworCQlGQjNDNTA5MzExRjc5NENF
MDA4MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAq
LzsgfTsKKwkJRkIzQzUwOTQxMUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0RjJFRDBEODJEN0JC
Q0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovOyB9OworCQlGQjNDNTA5NTExRjc5NENFMDA4
MUY1QkEgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgKi87IH07CisJCUZCM0M1MDk2MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1lZGlhdGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0Y3QzQ4
NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi87IH07CisJCUZCM0M1MDk3
MTFGNzk0Q0UwMDgxRjVCQSAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVy
bU91dC5jcHAgKi87IH07CisJCUZCM0M1MDk4MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2
ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OworCQlG
QjNDNTA5QTExRjc5NENFMDA4MUY1QkEgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkUyNTg0ODYwMDVGNjY5NkNDMDMx
NjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKKwkJRkIzQzUwOUIxMUY3OTRDRTAwODFG
NUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICov
OyB9OworCQlGQjNDNTA5QzExRjc5NENFMDA4MUY1QkEgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2QzgzMUE3NUVCRTAw
OUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLzsgfTsKKwkJRkIzQzUwOUQxMUY3OTRDRTAw
ODFGNUJBIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNjRFQUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAq
LzsgfTsKKwkJRkIzQzUwOUUxMUY3OTRDRTAwODFGNUJBIC8qIFF1YWxpZmllckFsaXZlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlE
MzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi87IH07CisJCUZCM0M1MDlGMTFG
Nzk0Q0UwMDgxRjVCQSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVU
cmVlLmNwcCAqLzsgfTsKKwkJRkIzQzUwQTAxMUY3OTRDRTAwODFGNUJBIC8qIFNoYWRlckxhbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5
OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovOyB9OworCQlGQjNDNTBBMTEx
Rjc5NENFMDA4MUY1QkEgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLzsgfTsKKwkJRkIzQzUwQTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0b20uYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDOUI0NjE2QTY1
QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMgKi87IH07CisJCUZCM0M1MEE1MTFGNzk0RkYwMDgxRjVC
QSAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAqLzsgfTsKKwkJRkIzQzUwQTYxMUY3
OTRGRjAwODFGNUJBIC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5j
ICovOyB9OworCQlGQjNDNTBBNzExRjc5NEZGMDA4MUY1QkEgLyogbWVtb3J5LmMgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1NUYx
MkEyOEUgLyogbWVtb3J5LmMgKi87IH07CisJCUZCM0M1MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBz
Y2FubmVyLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovOyB9OworCQlGQjNDNTBBOTEx
Rjc5NEZGMDA4MUY1QkEgLyogc3ltYm9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAq
LzsgfTsKKwkJRkIzQzUwQUExMUY3OTRGRjAwODFGNUJBIC8qIHRva2Vucy5jIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwMDc0NURBOTkxNEZERTI3NEQw
M0Q1IC8qIHRva2Vucy5jICovOyB9OworCQlGQjNDNTBBQjExRjc5NTFCMDA4MUY1QkEgLyogVHJh
bnNsYXRvckdMU0wuaCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERERDNCN0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovOyB9Owor
CQlGQjNDNTBBQzExRjc5NTFCMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5oIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIw
IC8qIE91dHB1dEdMU0wuaCAqLzsgfTsKKy8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwor
CisvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQlFNjlCRkJFMkQx
MjcyNjIwRTQ2QzNGOEEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0g
UEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gREExODhEOEM2QkY4
MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJ
CXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFOworCQkJcmVt
b3RlSW5mbyA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJfTsKKwkJRkIzQzUwNjMx
MUY3OTI5NzAwODFGNUJBIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9
IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IERBMTg4RDhDNkJG
ODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJ
CQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQTsKKwkJCXJl
bW90ZUluZm8gPSBhbmdsZTsKKwkJfTsKKwkJRkIzQzUwRDAxMUY3OUNDQzAwODFGNUJBIC8qIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94
eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IERBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9q
ZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmlu
ZyA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RTsKKwkJCXJlbW90ZUluZm8gPSAiQU5HTEUgU3Vw
cG9ydCI7CisJCX07CisvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KKwor
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTA1NkZFQURDN0Q5NUM2RDRD
OUNGMTExMyAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5jOyBwYXRoID0gYXRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMkVB
RjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvb2xB
bGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNTNCRjA2QkYxMkM2RjUwNDk2
QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbG9jYWxpbnRlcm1l
ZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjdFNEM3RUQwQjgyRTE4RENC
RURGMUM5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9y
eS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmZvbGRTZWxlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDc0
NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8q
IEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAv
KiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJ0cmFuc2xhdG9yX2NvbW1vbi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OworCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gZGVidWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNvbXBpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRI
TFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYwQzM5OThDOUNFNjZERTBDNUIw
RkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVE
bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QkJDODIyNEI5RDhFMjM0RDEx
N0ZBMEMgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZv
U2luay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
RDlDRjM3NkRDNTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1i
b2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgwNThBMEEyQTBBMDIzODY4Njc1
MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTM5OURFRTVEQUJBMDk1NzBGQjNFNyAvKiBtZW1vcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg1MTNGQUM2OTlEQjE1NThEMUQ0OUE0OCAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluaXRpYWxpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODU4NDVGRkY1QThF
NjMzNjQzMDgyMzZEIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
OUE2RjdCMUFEMzkxOEU2NERGNzZFQjEgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNs
Z2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QzMyMjVDMkY4QzM1NzND
RDk3MjVFNjYgLyogZ2xzbGFuZy55ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS55YWNjOyBwYXRoID0gZ2xzbGFuZy55OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0
R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzZDODMxQTc1RUJF
MDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VI
ZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QTVCNUJCMjUyNjgwMjQ3
OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRITFNM
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUNFRDNBRkYxRTYxQjQ1RUUxMDA1
NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVyQWxpdmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MzE1M0Q1OEY0QkJCRDk4QTg0RTQyMTAgLyogZ2xzbGFuZy5sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGdsc2xhbmcubDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUzRDE2OUNCODQ5Qjg2MUUxNURGOTlBIC8qIGds
c2xhbmdfdGFiLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0RjJFRDBEODJEN0JCQ0E0RTlFRUVBIC8qIEluaXRp
YWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2NCAvKiBUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRTY1
RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5k
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUU3Njc0QzUyQkREREIyOEFGNUZG
RDlGIC8qIHVuaXN0ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjJGNUNBMTFFRUE5MkRGMjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQzY2RDZCNDdEOUFGMzI4NjY0NEJCRTEgLyogZ2xzbGFuZ190
YWIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFuZ190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0IxRjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFRTBDOTBERjZE
NTA0RDFGMzYyOTcxMSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRjJCNjJFMDgyMEM4MzFBRjgxMkQw
MDAgLyogYnVpbGRfYW5nbGUuZ3lwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGJ1aWxkX2FuZ2xlLmd5cDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDEz
QzM2OTNCOUU0MEQzN0YyRkFCMzRBIC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJG
IC8qIHBhcnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcGFyc2VDb25zdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ0MEY3OENCOUJBMEM4OTkyMUZBMzE5RCAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzcxMUE0OEEwQkYxNkIxQ0JENzdB
QzkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTI5QjZFOUMyMUI2N0MyNUZGMEQy
QiAvKiBUcmFuc2xhdG9ySExTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUY3NDYxOEYxOEZFNTQ0ODExNTAxN0M0NCAvKiBDb21tb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY3QjI5NzFENEVC
MzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQjNDNTA1RDExRjc5MjRBMDA4MUY1QkEgLyog
bGliYW5nbGUuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliYW5nbGUuYTsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJRkYzQUE2OTRERjlBNDQ1NUE4MTMy
MzREIC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCisvKiBC
ZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAo
CisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07
CisJCUZCM0M1MDVBMTFGNzkyNEEwMDgxRjVCQSAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNh
ID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CisJCX07CisvKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLworCisvKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCisJCTBFOEQ2NUY1ODRGREI4NERB
QUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMgKi8sCisJ
CQkJOUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLywKKwkJCQk1ODBCMkEzMUY3
QzUxQTU5QjQwRjExQTMgLyogY29tcGlsZS5oICovLAorCQkJCUI3NTcwN0IzOTNCN0VBQjdERDk5
OTlDQiAvKiBjcHAuYyAqLywKKwkJCQk1MjhGRjIwMTgzOUM2RjIzM0UyNkZGREEgLyogY3BwLmgg
Ki8sCisJCQkJODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVjdC5jICovLAorCQkJ
CTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLywKKwkJCQk4MzEzOTlERUU1
REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5LmggKi8sCisJCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1
MkI1IC8qIHBhcnNlci5oICovLAorCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVw
cm9jZXNzLmggKi8sCisJCQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAq
LywKKwkJCQkwNTZGRUFEQzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovLAorCQkJCTg5
QTZGN0IxQUQzOTE4RTY0REY3NkVCMSAvKiBzbGdsb2JhbHMuaCAqLywKKwkJCQlGMDEzQTcyNDBC
REFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovLAorCQkJCTdEOUNGMzc2REM1Nzk5QjRDNkIz
MzMxRSAvKiBzeW1ib2xzLmggKi8sCisJCQkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRv
a2Vucy5jICovLAorCQkJCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gcHJlcHJvY2Vzc29yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEU4RDY1RjU4NEZEQjg0REFB
QkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKKwkJCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkg
LyogQmFzZVR5cGVzLmggKi8sCisJCQkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVH
ZW5HTFNMLmNwcCAqLywKKwkJCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhM
U0wuY3BwICovLAorCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAxN0M0NCAvKiBDb21tb24uaCAqLywK
KwkJCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRVbmlvbi5oICovLAorCQkJ
CTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAgKi8sCisJCQkJRjdCMjk3
MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5rLmggKi8sCisJCQkJQTU0RjJFRDBEODJEN0JC
Q0E0RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovLAorCQkJCTg1MTNGQUM2OTlEQjE1NThEMUQ0
OUE0OCAvKiBJbml0aWFsaXplLmggKi8sCisJCQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8q
IEluaXRpYWxpemVEbGwuY3BwICovLAorCQkJCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJ
bml0aWFsaXplRGxsLmggKi8sCisJCQkJMkU3QzlCNkU2REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRp
YWxpemVHbG9iYWxzLmggKi8sCisJCQkJODU4NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8qIEluaXRp
YWxpemVQYXJzZUNvbnRleHQuaCAqLywKKwkJCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyog
SW50ZXJtVHJhdmVyc2UuY3BwICovLAorCQkJCTNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJ
bnRlcm1lZGlhdGUuY3BwICovLAorCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFw
LmggKi8sCisJCQkJNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICov
LAorCQkJCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjkyMCAvKiBPdXRwdXRHTFNMLmggKi8sCisJCQkJ
OUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICovLAorCQkJCTVBMjE1
OTlDNTlCQzFBNzVBN0ZBQkEzNCAvKiBPdXRwdXRITFNMLmggKi8sCisJCQkJOTc2QzgzMUE3NUVC
RTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKKwkJCQlDRUUwQzkwREY2RDUwNEQx
RjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKKwkJCQlCNjRFQUJFNzM4RkM2NjZBNUU0RTJG
NDIgLyogUG9vbEFsbG9jLmNwcCAqLywKKwkJCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyog
UG9vbEFsbG9jLmggKi8sCisJCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCAqLywKKwkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVy
QWxpdmUuaCAqLywKKwkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5j
cHAgKi8sCisJCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywK
KwkJCQlBRTY1RTEzOUFFMTBERTlFRkFEOEQ1QjEgLyogU2hIYW5kbGUuaCAqLywKKwkJCQk1NkM3
RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5jcHAgKi8sCisJCQkJQjdFNUIwRjA0
NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKKwkJCQk3QzZCQjEyQUIwOTk1
NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKKwkJCQk2RkI3MERDNzRBMjFGQkNENjY1
QUJERjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAorCQkJCURERDNCN0UzQjdCMzVBMEI4NDY5
QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3
RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi8sCisJCQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJC
IC8qIFRyYW5zbGF0b3JITFNMLmggKi8sCisJCQkJQUE1M0I2NjMyQzc2RjkwNURGMDhFNTY0IC8q
IFR5cGVzLmggKi8sCisJCQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3QUM5IC8qIFVuZm9sZFNlbGVj
dC5jcHAgKi8sCisJCQkJMkE3NjVCODZDQkFGMEQ0QTNFNjlEQ0E3IC8qIFVuZm9sZFNlbGVjdC5o
ICovLAorCQkJCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJ
OTUyNzZBQTZCMzZGQzFCMUQ5MTNGQ0U0IC8qIGRlYnVnLmggKi8sCisJCQkJQTMxNTNENThGNEJC
QkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcubCAqLywKKwkJCQk4QzMyMjVDMkY4QzM1NzNDRDk3MjVF
NjYgLyogZ2xzbGFuZy55ICovLAorCQkJCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovLAorCQkJCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlh
dGUuaCAqLywKKwkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlh
dGUuaCAqLywKKwkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyogb3NpbmNsdWRlLmggKi8s
CisJCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLywK
KwkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8sCisJCQkJ
QUU3Njc0QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBTb3VyY2U7CisJCQlwYXRoID0gY29tcGlsZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk0NjZFMUQwNTMxQTc5QjU4MTNFOEE3RjggLyogSW50ZXJtZWRpYXRlcyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQ0IxRjkxRDNEOEND
NDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3BwICovLAorCQkJCUE1M0QxNjlDQjg0OUI4NjFFMTVE
Rjk5QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCisJCQkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUx
IC8qIGdsc2xhbmdfdGFiLmggKi8sCisJCQkpOworCQkJbmFtZSA9IEludGVybWVkaWF0ZXM7CisJ
CQlzb3VyY2VUcmVlID0gSU5URVJNRURJQVRFX0RJUjsKKwkJfTsKKwkJNUJCRUZGOUI5MTczODI5
N0I5NUM1NjhEID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkx
OTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyogU291cmNlICovLAorCQkJCTQ2NkUxRDA1MzFBNzlC
NTgxM0U4QTdGOCAvKiBJbnRlcm1lZGlhdGVzICovLAorCQkJCUUwRURDNDEzMEU3RDM3NDMxOENF
NzJCRSAvKiBQcm9kdWN0cyAqLywKKwkJCQlCMkMxODRDMzU0MzE5OEJBNTE1OTJFQTQgLyogQnVp
bGQgKi8sCisJCQkpOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQjJDMTg0
QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQlDRjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5n
bGUuZ3lwICovLAorCQkJKTsKKwkJCW5hbWUgPSBCdWlsZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCUUwRURDNDEzMEU3RDM3NDMxOENFNzJCRSAvKiBQcm9kdWN0cyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJM0REREM3NzIxNjIw
MkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uLmEgKi8sCisJCQkJRkIzQzUwNUQx
MUY3OTI0QTAwODFGNUJBIC8qIGxpYmFuZ2xlLmEgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1
Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKy8qIEVuZCBQQlhHcm91cCBz
ZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTZGNEZE
MzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKKwkJCWlzYSA9
IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhFM0E3
NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUVB
QTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAorCQkJCUE1Qzk5NEU3NERCMUU2
MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJ
CQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSB0cmFuc2xhdG9yX2Nv
bW1vbjsKKwkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247CisJCQlwcm9kdWN0UmVm
ZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9u
LmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnku
c3RhdGljIjsKKwkJfTsKKwkJRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICovID0g
eworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IEZCM0M1MDVCMTFGNzkyNEEwMDgxRjVCQSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWE5hdGl2ZVRhcmdldCAiYW5nbGUiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJRkIz
QzUwNTYxMUY3OTI0QTAwODFGNUJBIC8qIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNUExMUY3OTI0
QTAwODFGNUJBIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJ
CSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJRkIzQzUwRDExMUY3OUNDQzAwODFGNUJBIC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IGFuZ2xlOworCQkJcHJv
ZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gRkIzQzUw
NUQxMUY3OTI0QTAwODFGNUJBIC8qIGxpYmFuZ2xlLmEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJfTsKKy8qIEVuZCBQQlhO
YXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8K
KwkJREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovID0geworCQkJ
aXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMgPSB7CisJCQkJQnVpbGRJbmRlcGVuZGVu
dFRhcmdldHNJblBhcmFsbGVsID0gWUVTOworCQkJfTsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi87CisJCQljb21wYXRpYmlsaXR5VmVyc2lv
biA9ICJYY29kZSAzLjEiOworCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQltYWlu
R3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7CisJCQlwcm9qZWN0RGlyUGF0aCA9ICIi
OworCQkJcHJvamVjdFJvb3QgPSAiIjsKKwkJCXRhcmdldHMgPSAoCisJCQkJMTU2M0Q5OTE2QkZE
QUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKKwkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIgLyog
dHJhbnNsYXRvcl9jb21tb24gKi8sCisJCQkJMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8qIEFO
R0xFIFN1cHBvcnQgKi8sCisJCQkJRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xlICov
LAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4g
UEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEQ1MTNGOEI5MjM5NDlDMTU2
REIwMkM1IC8qIEFjdGlvbiAiYmlzb25fZ2xzbGFuZyIgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVs
bFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJ
ZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCQljb21waWxlci9nbHNsYW5n
LnksCisJCQkpOworCQkJbmFtZSA9ICJBY3Rpb24gXCJiaXNvbl9nbHNsYW5nXCIiOworCQkJb3V0
cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZ190YWIuY3BwIiwK
KwkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5oIiwKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4v
c2g7CisJCQlzaGVsbFNjcmlwdCA9ICJlY2hvIG5vdGU6IFwiRXhlY3V0aW5nIGJpc29uIG9uIGNv
bXBpbGVyL2dsc2xhbmcueVwiXG5leGVjIGJpc29uIC0tbm8tbGluZXMgXCItLWRlZmluZXM9JHtJ
TlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5oXCIgXCItLXNrZWxldG9uPXlhY2MuY1wiIFwi
LS1vdXRwdXQ9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5jcHBcIiBjb21waWxlci9n
bHNsYW5nLnlcbmV4aXQgMVxuIjsKKwkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOworCQl9OworCQlG
QTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyogQWN0aW9uICJmbGV4X2dsc2xhbmciICovID0gewor
CQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJ
Y29tcGlsZXIvZ2xzbGFuZy5sLAorCQkJKTsKKwkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9nbHNs
YW5nXCIiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xz
bGFuZy5jcHAiLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOworCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImVjaG8gbm90
ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxuZXhlYyBmbGV4IC0t
bm9saW5lIC0tbm91bmlzdGQgXCItLW91dGZpbGU9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5n
LmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcubFxuZXhpdCAxXG4iOworCQkJc2hvd0VudlZhcnNJbkxv
ZyA9IDA7CisJCX07CisvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
KworLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlFQUEyMkNBNjNG
RDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVEbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTBERjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVy
bWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMg
LyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQx
MkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5RThERkUxQ0NF
RjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RjlG
ODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRTFDN0M1REZGMEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwNTU2M0FERkVBMTUxMTZENzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRl
ckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8q
IFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMyQjFEQkNENkI4M0YyMTQ2RDc4
N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKKwkJCQlDQjdGMEVGMEQ2QTg5RkE4QzRERjU1
MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKKwkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTgg
LyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKKwkJCQkzQTk2RTlDQUM4QTI1QUYxNTY0QjY1
MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKKwkJCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2
NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCisJCQkJQUQ4NTUxN0YwODZGRENFRjM5NDdD
NDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAorCQkJCUU4QzcyN0FBOEU5REM1RTdCNTg4
NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAorCQkJCUFCQTVDNjFCMUI3OEI5QThENjlG
NkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBENDA2NDE2NzM5OEE2ODky
ODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNDg1ODQxN0U1
NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkp
OworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUZC
M0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkJRkIzQzUwQUIxMUY3OTUxQjAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNMLmgg
aW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBQzExRjc5NTFCMDA4MUY1QkEgLyogT3V0cHV0R0xT
TC5oIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0b20u
YyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE1MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHAuYyBp
biBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE2MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHBzdHJ1Y3Qu
YyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1vcnku
YyBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBzY2FubmVy
LmMgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTBBOTExRjc5NEZGMDA4MUY1QkEgLyogc3ltYm9s
cy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwQUExMUY3OTRGRjAwODFGNUJBIC8qIHRva2Vu
cy5jIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGdsc2xh
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8qIENv
ZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDkyMTFGNzk0Q0UwMDgxRjVC
QSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5MzExRjc5NENFMDA4MUY1
QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTQxMUY3OTRDRTAw
ODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOTUxMUY3
OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwOTYxMUY3OTRDRTAwODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGQjNDNTA5NzExRjc5NENFMDA4MUY1QkEgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZCM0M1MDk4MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA5QTExRjc5NENFMDA4MUY1QkEgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwNTgxMUY3OTI0QTAwODFGNUJBIC8q
IE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUIxMUY3OTRDRTAwODFG
NUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOUMxMUY3OTRD
RTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZCM0M1MDlE
MTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIz
QzUwOUUxMUY3OTRDRTAwODFGNUJBIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZCM0M1MDlGMTFGNzk0Q0UwMDgxRjVCQSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZCM0M1MEEwMTFGNzk0Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyogVHJh
bnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkIzQzUwOEYxMUY3OTQ5RTAwODFG
NUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0
aW9uICovCisJCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDMxMzQ5
RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOworCQkJdGFyZ2V0UHJveHkg
PSBFNjlCRkJFMkQxMjcyNjIwRTQ2QzNGOEEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwor
CQl9OworCQlGQjNDNTA2NDExRjc5Mjk3MDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAq
LyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSBGQjNDNTA1
NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi87CisJCQl0YXJnZXRQcm94eSA9IEZCM0M1MDYz
MTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCUZC
M0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJ
aXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0MkFF
QjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOworCQkJdGFyZ2V0UHJveHkgPSBGQjNDNTBEMDEx
Rjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OworLyogRW5k
IFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCisvKiBCZWdpbiBYQ0J1aWxkQ29uZmln
dXJhdGlvbiBzZWN0aW9uICovCisJCTAwQkYyRUJDQkRGNTY3OEY0QkEyRkE5MiAvKiBEZWZhdWx0
ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdz
ID0geworCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsKKwkJ
CX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMUExMkFBNUQ2NUFDREU3MUFFMDg5RUUz
IC8qIERlZmF1bHQgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gQWxsOworCQkJfTsKKwkJCW5hbWUg
PSBEZWZhdWx0OworCQl9OworCQkxRjNGMTIxOEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVsdCAq
LyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhT
ID0gKAorCQkJCQkuLAorCQkJCQkuLi9pbmNsdWRlLAorCQkJCSk7CisJCQkJUFJPRFVDVF9OQU1F
ID0gdHJhbnNsYXRvcl9jb21tb247CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJ
CUJDNTc5M0M5QTFGRjAyMUE4MUM2NjU1OSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFSQ0hTID0gIiQo
QVJDSFNfU1RBTkRBUkRfNjRfQklUKSI7CisJCQkJQ09ORklHVVJBVElPTl9CVUlMRF9ESVIgPSAi
JChCVUlMRF9ESVIpLyQoQ09ORklHVVJBVElPTikkKEVGRkVDVElWRV9QTEFURk9STV9OQU1FKSI7
CisJCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChD
T05GSUdVUkFUSU9OKSI7CisJCQkJT0JKUk9PVCA9ICIiOworCQkJCU9OTFlfQUNUSVZFX0FSQ0gg
PSBZRVM7CisJCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVk
U291cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKKwkJCQlTWU1ST09UID0gIiQoQlVJTERfRElSKSI7
CisJCQl9OworCQkJbmFtZSA9IERlZmF1bHQ7CisJCX07CisJCUZCM0M1MDVDMTFGNzkyNEEwMDgx
RjVCQSAvKiBEZWZhdWx0ICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUhF
QURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCS4sCisJCQkJCS4uL2luY2x1ZGUsCisJCQkJKTsK
KwkJCQlQUk9EVUNUX05BTUUgPSBhbmdsZTsKKwkJCX07CisJCQluYW1lID0gRGVmYXVsdDsKKwkJ
fTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhD
Q29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQkwQUE1NDgyNUJGNURGMEEzRkJBOTJCNjAg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFOR0xF
IFN1cHBvcnQiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCisJCQkJMDBCRjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERlZmF1
bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMEU1OUY4RkU0QTgw
OTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAi
YnVpbGRfYW5nbGUiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8qIERl
ZmF1bHQgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwor
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKKwkJfTsKKwkJMzRCQjM4RTNB
NzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRp
b25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxRjNGMTIxOEI1MTM1RkJC
MDY3REU4MDkgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0OworCQl9
OworCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxQTEyQUE1RDY1QUNE
RTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDE7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0Owor
CQl9OworCQlGQjNDNTA1QjExRjc5MjRBMDA4MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImFuZ2xlIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmln
dXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCUZCM0M1MDVDMTFG
NzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1bHQ7
CisJCX07CisvKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJfTsKKwlyb290
T2JqZWN0ID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwor
fQpJbmRleDogQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gYW5nbGV1dGlscy5oOiBDb21tb24gQU5HTEUgdXRpbGl0aWVzLgorCisj
aWZuZGVmIENPTU1PTl9BTkdMRVVUSUxTX0hfCisjZGVmaW5lIENPTU1PTl9BTkdMRVVUSUxTX0hf
CisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJh
dG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNs
YXJhdGlvbnMgZm9yIGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5
cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAor
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKyNlbmRpZiAvLyBDT01NT05fQU5H
TEVVVElMU19IXwpJbmRleDogQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFy
Zy5oPgorCitzdGF0aWMgYm9vbCB0cmFjZV9vbiA9IHRydWU7CisKK25hbWVzcGFjZSBnbAorewor
dm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpZiAodHJhY2Vfb24p
CisgICAgeworICAgICAgICBpZiAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICBGSUxF
ICpmaWxlID0gZm9wZW4oImRlYnVnLnR4dCIsICJhIik7CisKKyAgICAgICAgICAgIGlmIChmaWxl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhX2xpc3QgdmFyYXJnOworICAgICAg
ICAgICAgICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICB2ZnBy
aW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgICAgICAgICAgICAgdmFfZW5kKHZhcmFy
Zyk7CisKKyAgICAgICAgICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZuZGVm
IENPTU1PTl9ERUJVR19IXworI2RlZmluZSBDT01NT05fREVCVUdfSF8KKworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK25hbWVzcGFjZSBnbAoreworICAgIC8vIE91
dHB1dHMgdGV4dCB0byB0aGUgZGVidWdnaW5nIGxvZworICAgIHZvaWQgdHJhY2UoY29uc3QgY2hh
ciAqZm9ybWF0LCAuLi4pOworfQorCisvLyBBIG1hY3JvIHRvIG91dHB1dCBhIHRyYWNlIG9mIGEg
ZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZworI2lm
bmRlZiBOREVCVUcKKyAgICAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJ0
cmFjZTogJXMibWVzc2FnZSJcbiIsIF9fRlVOQ1RJT05fXywgX19WQV9BUkdTX18pCisjZWxzZQor
ICAgICNkZWZpbmUgVFJBQ0UoLi4uKSAoKHZvaWQpMCkKKyNlbmRpZgorCisvLyBBIG1hY3JvIHRv
IG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2lu
ZyBsb2csIHRvIGRlbm90ZSBhbiBpdGVtIGluIG5lZWQgb2YgZml4aW5nLiBXaWxsIG9jY3VyIGV2
ZW4gaW4gcmVsZWFzZSBtb2RlLgorI2RlZmluZSBGSVhNRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFj
ZSgiZml4bWU6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQorCisv
LyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8g
dGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3IuIFdpbGwgb2NjdXIgZXZlbiBpbiBy
ZWxlYXNlIG1vZGUuCisjZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZXJyOiAl
cyJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBfX1ZBX0FSR1NfXykKKworLy8gQSBtYWNybyBh
c3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVn
IGxvZworI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8geyBcCisgICAgaWYoIShleHByZXNz
aW9uKSkgXAorICAgICAgICBFUlIoIlx0ISBBc3NlcnQgZmFpbGVkIGluICVzKCVkKTogIiNleHBy
ZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAgICBhc3NlcnQoZXhwcmVz
c2lvbik7IFwKKyAgICB9IHdoaWxlKDApCisKKworLy8gQSBtYWNybyB0byBpbmRpY2F0ZSB1bmlt
cGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkKKyNpZm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBVTklN
UExFTUVOVEVEKCkgZG8geyBcCisgICAgICAgIEZJWE1FKCJcdCEgVW5pbXBsZW1lbnRlZDogJXMo
JWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgICAgICBhc3NlcnQoZmFsc2Up
OyBcCisgICAgICAgIH0gd2hpbGUoMCkKKyNlbHNlCisgICAgI2RlZmluZSBVTklNUExFTUVOVEVE
KCkgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19M
SU5FX18pCisjZW5kaWYKKworLy8gQSBtYWNybyBmb3IgY29kZSB3aGljaCBpcyBub3QgZXhwZWN0
ZWQgdG8gYmUgcmVhY2hlZCB1bmRlciB2YWxpZCBhc3N1bXB0aW9ucworI2lmbmRlZiBOREVCVUcK
KyAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCisgICAgICAgIEVSUigiXHQhIFVucmVh
Y2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKyAg
ICAgICAgYXNzZXJ0KGZhbHNlKTsgXAorICAgICAgICB9IHdoaWxlKDApCisjZWxzZQorICAgICNk
ZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJsZSByZWFjaGVkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZW5kaWYKKworLy8gQSBtYWNybyBmdW5jdGlv
bmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRhdGUgY29uc3RhbnQgY29uZGl0
aW9ucworI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5cGVkZWYgaW50IENPTVBJTEVf
VElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29sPihjb25kaXRpb24pPzE6LTFd
CisKKyNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0JB
U0lDVFlQRVNfSU5DTFVERURfCisjZGVmaW5lIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXworCisvLwor
Ly8gUHJlY2lzaW9uIHF1YWxpZmllcnMKKy8vCitlbnVtIFRQcmVjaXNpb24KK3sKKyAgICAvLyBU
aGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCisgICAgRWJwVW5kZWZpbmVkLAorICAgIEVicExv
dywKKyAgICBFYnBNZWRpdW0sCisgICAgRWJwSGlnaCwKK307CisKK19faW5saW5lIGNvbnN0IGNo
YXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCit7CisgICAgc3dpdGNoKHApCisg
ICAgeworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAiaGlnaHAiOwkJYnJlYWs7CisgICAgY2Fz
ZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwlicmVhazsKKyAgICBjYXNlIEVicExvdzoJ
CXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBkZWZhdWx0OgkJCXJldHVybiAibWVkaXVtcCI7
ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAgfQorfQorCisvLworLy8gQmFzaWMg
dHlwZS4gIEFycmF5cywgdmVjdG9ycywgZXRjLiwgYXJlIG9ydGhvZ29uYWwgdG8gdGhpcy4KKy8v
CitlbnVtIFRCYXNpY1R5cGUKK3sKKyAgICBFYnRWb2lkLAorICAgIEVidEZsb2F0LAorICAgIEVi
dEludCwKKyAgICBFYnRCb29sLAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5
cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKKyAgICBFYnRTYW1wbGVyMkQs
CisgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24g
dHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidFN0cnVjdCwK
KyAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KK307
CisKK19faW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICByZXR1
cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJF
bmQ7Cit9CisKKy8vCisvLyBRdWFsaWZpZXJzIGFuZCBidWlsdC1pbnMuICBUaGVzZSBhcmUgbWFp
bmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJlIHJlYWQKKy8vIG9yIHdyaXR0ZW4sIGFuZCBieSB0
aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNsYXRvciB0byBrbm93IHdoaWNoIHJlZ2lzdGVycwor
Ly8gdG8gYWxsb2NhdGUgdmFyaWFibGVzIGluLiAgU2luY2UgYnVpbHQtaW5zIHRlbmQgdG8gZ28g
dG8gZGlmZmVyZW50IHJlZ2lzdGVycworLy8gdGhhbiB2YXJ5aW5nIG9yIHVuaWZvcm0sIGl0IG1h
a2VzIHNlbnNlIHRoZXkgYXJlIHBlZXJzLCBub3Qgc3ViLWNsYXNzZXMuCisvLworZW51bSBUUXVh
bGlmaWVyCit7CisgICAgRXZxVGVtcG9yYXJ5LCAgICAgLy8gRm9yIHRlbXBvcmFyaWVzICh3aXRo
aW4gYSBmdW5jdGlvbiksIHJlYWQvd3JpdGUKKyAgICBFdnFHbG9iYWwsICAgICAgICAvLyBGb3Ig
Z2xvYmFscyByZWFkL3dyaXRlCisgICAgRXZxQ29uc3QsICAgICAgICAgLy8gVXNlciBkZWZpbmVk
IGNvbnN0YW50cyBhbmQgbm9uLW91dHB1dCBwYXJhbWV0ZXJzIGluIGZ1bmN0aW9ucworICAgIEV2
cUF0dHJpYnV0ZSwgICAgIC8vIFJlYWRvbmx5CisgICAgRXZxVmFyeWluZ0luLCAgICAgLy8gcmVh
ZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQorICAgIEV2cVZhcnlpbmdPdXQsICAgIC8vIHZl
cnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKKyAgICBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4s
ICAgICAvLyByZWFkb25seSwgZnJhZ21lbnQgc2hhZGVycyBvbmx5CisgICAgRXZxSW52YXJpYW50
VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQorICAgIEV2
cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CisKKyAgICAv
LyBwYWNrL3VucGFjayBpbnB1dCBhbmQgb3V0cHV0CisgICAgRXZxSW5wdXQsCisgICAgRXZxT3V0
cHV0LAorCisgICAgLy8gcGFyYW1ldGVycworICAgIEV2cUluLAorICAgIEV2cU91dCwKKyAgICBF
dnFJbk91dCwKKyAgICBFdnFDb25zdFJlYWRPbmx5LAorCisgICAgLy8gYnVpbHQtaW5zIHdyaXR0
ZW4gYnkgdmVydGV4IHNoYWRlcgorICAgIEV2cVBvc2l0aW9uLAorICAgIEV2cVBvaW50U2l6ZSwK
KworICAgIC8vIGJ1aWx0LWlucyByZWFkIGJ5IGZyYWdtZW50IHNoYWRlcgorICAgIEV2cUZyYWdD
b29yZCwKKyAgICBFdnFGcm9udEZhY2luZywKKyAgICBFdnFQb2ludENvb3JkLAorCisgICAgLy8g
YnVpbHQtaW5zIHdyaXR0ZW4gYnkgZnJhZ21lbnQgc2hhZGVyCisgICAgRXZxRnJhZ0NvbG9yLAor
ICAgIEV2cUZyYWdEYXRhLAorCisgICAgLy8gZW5kIG9mIGxpc3QKKyAgICBFdnFMYXN0LAorfTsK
KworLy8KKy8vIFRoaXMgaXMganVzdCBmb3IgZGVidWcgcHJpbnQgb3V0LCBjYXJyaWVkIGFsb25n
IHdpdGggdGhlIGRlZmluaXRpb25zIGFib3ZlLgorLy8KK19faW5saW5lIGNvbnN0IGNoYXIqIGdl
dFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHEpCit7CisgICAgc3dpdGNoKHEpCisgICAgewor
ICAgIGNhc2UgRXZxVGVtcG9yYXJ5OiAgICAgIHJldHVybiAiVGVtcG9yYXJ5IjsgICAgICBicmVh
azsKKyAgICBjYXNlIEV2cUdsb2JhbDogICAgICAgICByZXR1cm4gIkdsb2JhbCI7ICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgcmV0dXJuICJjb25zdCI7ICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogIHJldHVybiAiY29uc3QiOyAg
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUF0dHJpYnV0ZTogICAgICByZXR1cm4gImF0dHJp
YnV0ZSI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgcmV0dXJuICJ2
YXJ5aW5nIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmFyeWluZ091dDogICAgIHJldHVy
biAidmFyeWluZyI7ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJ
bjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2Fz
ZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXZxSW5wdXQ6ICAgICAgICAgIHJldHVybiAiaW5wdXQiOyAgICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEV2cU91dHB1dDogICAgICAgICByZXR1cm4gIm91dHB1dCI7
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFQb3NpdGlvbjogICAgICAgcmV0dXJuICJQb3Np
dGlvbiI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxUG9pbnRTaXplOiAgICAgIHJldHVybiAi
UG9pbnRTaXplIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1
cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAg
cmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAg
ICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEYXRh
OiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICByZXR1cm4gInVua25vd24gcXVhbGlmaWVyIjsKKyAgICB9Cit9CisKKyNlbmRp
ZiAvLyBfQkFTSUNUWVBFU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db2Rl
R2VuR0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNM
LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIgorCisvLworLy8gVGhpcyBmdW5jdGlvbiBt
dXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisvLyBjb21waWxlIG9iamVjdCB1
c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucworLy8gYSBzdWJjbGFzcyBvZiBU
Q29tcGlsZXIuCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSBs
YW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wo
bGFuZ3VhZ2UsIHNwZWMpOworfQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxlciBtYWRlIGJ5
IENvbnN0cnVjdENvbXBpbGVyCisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqIGNv
bXBpbGVyKQoreworICAgIGRlbGV0ZSBjb21waWxlcjsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9Db2RlR2VuSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
ZGVHZW5ITFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2Vu
SExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgorCisvLworLy8gVGhpcyBm
dW5jdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsCisvLyBjb21waWxl
IG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucworLy8gYSBzdWJj
bGFzcyBvZiBUQ29tcGlsZXIuCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hM
YW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQoreworICAgIHJldHVybiBuZXcgVHJhbnNs
YXRvckhMU0wobGFuZ3VhZ2UsIHNwZWMpOworfQorCisvLworLy8gRGVsZXRlIHRoZSBjb21waWxl
ciBtYWRlIGJ5IENvbnN0cnVjdENvbXBpbGVyCisvLwordm9pZCBEZWxldGVDb21waWxlcihUQ29t
cGlsZXIqIGNvbXBpbGVyKQoreworICAgIGRlbGV0ZSBjb21waWxlcjsKK30KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9Db21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
Q29tbW9uLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
X0NPTU1PTl9JTkNMVURFRF8KKyNkZWZpbmUgX0NPTU1PTl9JTkNMVURFRF8KKworI2luY2x1ZGUg
PG1hcD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2
ZWN0b3I+CisKKyNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2MuaCIKKwordHlwZWRlZiBpbnQg
VFNvdXJjZUxvYzsKK2NvbnN0IHVuc2lnbmVkIGludCBTb3VyY2VMb2NMaW5lTWFzayA9IDB4ZmZm
ZjsKK2NvbnN0IHVuc2lnbmVkIGludCBTb3VyY2VMb2NTdHJpbmdTaGlmdCA9IDE2OworCisvLwor
Ly8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2Ug
dGhlbSB1c2UgdGhpcyBzY2hlbWUuCisvLworI2RlZmluZSBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFKEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkKiBvcGVy
YXRvciBuZXcoc2l6ZV90IHMpIHsgcmV0dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAgICAgICAgICBc
CisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqX1doZXJlKSB7IHJldHVybiAo
X1doZXJlKTsJfSAgICAgXAorICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB7IH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkICosIHZvaWQgKikgeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9p
ZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHMpIHsgcmV0dXJuIChBKS5hbGxvY2F0ZShzKTsgfSAg
ICAgICAgXAorICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqX1doZXJlKSB7
IHJldHVybiAoX1doZXJlKTsJfSBcCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikg
eyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10odm9pZCAqLCB2b2lkICopIHsgfQorCisvLworLy8gUG9vbCB2ZXJzaW9uIG9mIHN0
cmluZy4KKy8vCit0eXBlZGVmIHBvb2xfYWxsb2NhdG9yPGNoYXI+IFRTdHJpbmdBbGxvY2F0b3I7
Cit0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+
LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nOwordHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJpbmdz
dHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9jYXRvcj4gVFN0
cmluZ1N0cmVhbTsKK2lubGluZSBUU3RyaW5nKiBOZXdQb29sVFN0cmluZyhjb25zdCBjaGFyKiBz
KQoreworCXZvaWQqIG1lbW9yeSA9IEdsb2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9m
KFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKK30KKworLy8KKy8v
IFBlcnNpc3RlbnQgc3RyaW5nIG1lbW9yeS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHN0cmlu
Z3MgdGhhdCBzdXJ2aXZlCisvLyBhY3Jvc3MgY29tcGlsZXMuCisvLworI2RlZmluZSBUUGVyc2lz
dFN0cmluZyBzdGQ6OnN0cmluZworI2RlZmluZSBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdGQ6Om9z
dHJpbmdzdHJlYW0KKworLy8KKy8vIFBvb2wgYWxsb2NhdG9yIHZlcnNpb25zIG9mIHZlY3RvcnMs
IGxpc3RzLCBhbmQgbWFwcworLy8KK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBUVmVjdG9yIDog
cHVibGljIHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4geworcHVibGljOgorICAg
IHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPjo6c2l6
ZV90eXBlIHNpemVfdHlwZTsKKyAgICBUVmVjdG9yKCkgOiBzdGQ6OnZlY3RvcjxULCBwb29sX2Fs
bG9jYXRvcjxUPiA+KCkge30KKyAgICBUVmVjdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPFQ+JiBh
KSA6IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oYSkge30KKyAgICBUVmVjdG9y
KHNpemVfdHlwZSBpKTogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8VD4gPihpKSB7fQor
fTsKKwordGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIEQsIGNsYXNzIENNUCA9IHN0ZDo6bGVzczxL
PiA+IAorY2xhc3MgVE1hcCA6IHB1YmxpYyBzdGQ6Om1hcDxLLCBELCBDTVAsIHBvb2xfYWxsb2Nh
dG9yPHN0ZDo6cGFpcjxjb25zdCBLLCBEPiA+ID4geworcHVibGljOgorICAgIHR5cGVkZWYgcG9v
bF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gdEFsbG9jYXRvcjsKKworICAgIFRN
YXAoKSA6IHN0ZDo6bWFwPEssIEQsIENNUCwgdEFsbG9jYXRvcj4oKSB7fQorICAgIC8vIHVzZSBj
b3JyZWN0IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBzdXBwb3J0ZWQgaW4gZ2NjIDMuNCBhbmQgYWJv
dmUKKyAgICBUTWFwKGNvbnN0IHRBbGxvY2F0b3ImIGEpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0
QWxsb2NhdG9yPihzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+OjprZXlfY29tcGFyZSgp
LCBhKSB7fQorfTsKKwordHlwZWRlZiBUTWFwPFRTdHJpbmcsIFRTdHJpbmc+IFRQcmFnbWFUYWJs
ZTsKKworI2VuZGlmIC8vIF9DT01NT05fSU5DTFVERURfCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvQ29uc3RhbnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Db25z
dGFudFVuaW9uLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRV
bmlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4OCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBfQ09OU1RBTlRfVU5JT05fSU5DTFVERURfCisjZGVmaW5lIF9DT05TVEFOVF9V
TklPTl9JTkNMVURFRF8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCitjbGFzcyBDb25zdGFudFVu
aW9uIHsKK3B1YmxpYzoKKworICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9v
bEFsbG9jYXRvcikgICAgICAgIAorICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0RkNvbnN0KGZsb2F0IGYpIHtmQ29uc3Qg
PSBmOyB0eXBlID0gRWJ0RmxvYXQ7IH0KKyAgICB2b2lkIHNldEJDb25zdChib29sIGIpIHtiQ29u
c3QgPSBiOyB0eXBlID0gRWJ0Qm9vbDsgfQorCisgICAgaW50IGdldElDb25zdCgpIHsgcmV0dXJu
IGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIHsgcmV0dXJuIGZDb25zdDsgfQorICAg
IGJvb2wgZ2V0QkNvbnN0KCkgeyByZXR1cm4gYkNvbnN0OyB9CisgICAgaW50IGdldElDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGlDb25zdDsgfQorICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsg
cmV0dXJuIGZDb25zdDsgfQorICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNv
bnN0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaW50IGkpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaSA9PSBpQ29uc3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZs
b2F0IGYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZiA9PSBmQ29uc3QpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGJvb2wgYikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiID09
IGJDb25zdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29u
c3RhbnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQudHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChjb25zdGFudC5pQ29uc3QgPT0gaUNv
bnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChjb25zdGFudC5mQ29uc3Qg
PT0gZkNvbnN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgaWYgKGNvbnN0YW50LmJD
b25zdCA9PSBiQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhb3BlcmF0b3I9PShpKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
ZmxvYXQgZikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShmKTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgYm9vbCBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGIpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhb3BlcmF0b3I9PShjb25zdGFudCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChpQ29uc3QgPiBjb25zdGFudC5pQ29u
c3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29uc3QgPiBj
b25zdGFudC5mQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAg
ICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGlmIChpQ29uc3QgPCBjb25zdGFu
dC5pQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChmQ29u
c3QgPCBjb25zdGFudC5mQ29uc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ29u
c3RhbnRVbmlvbiBvcGVyYXRvcisoY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0
CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCArIGNvbnN0YW50
LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRG
Q29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRv
ci0oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAg
Q29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3Rh
bnQudHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDog
cmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29u
c3RhbnQuZkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAi
RGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciooY29uc3QgQ29uc3RhbnRV
bmlvbiYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNv
bnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidEZs
b2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJl
YWs7IAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3IlKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7CisgICAgICAg
IGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgJSBjb25z
dGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgfQorCisgICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcj4+KGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAorICAgIHsgCisgICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7CisgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3I8PChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAor
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
RWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9
CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwor
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCAmIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0
KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yfChjb25z
dCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAgICBDb25zdGFu
dFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAg
ICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICB9CisKKyAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yXihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAg
ICB7IAorICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZh
dWx0IG1pc3NpbmciKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICB9CisKKyAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yJiYoY29uc3QgQ29uc3RhbnRVbmlv
biYgY29uc3RhbnQpIGNvbnN0CisgICAgeyAKKyAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEVidEJvb2w6IHJldHVyblZhbHVlLnNldEJDb25z
dChiQ29uc3QgJiYgY29uc3RhbnQuYkNvbnN0KTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3J8fChjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKKyAgICB7IAorICAgICAg
ICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOworICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25z
dGFudC50eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRWJ0Qm9v
bDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCB8fCBjb25zdGFudC5iQ29uc3QpOyBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisg
ICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorcHJpdmF0ZToK
KworICAgIHVuaW9uICB7CisgICAgICAgIGludCBpQ29uc3Q7ICAvLyB1c2VkIGZvciBpdmVjLCBz
Y2FsYXIgaW50cworICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFy
IGJvb2xzCisgICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2Nh
bGFyIGZsb2F0cworICAgIH0gOworCisgICAgVEJhc2ljVHlwZSB0eXBlOworfTsKKworI2VuZGlm
IC8vIF9DT05TVEFOVF9VTklPTl9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9J
bmZvU2luay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNw
cAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJj
b21waWxlci9JbmZvU2luay5oIgorCit2b2lkIFRJbmZvU2lua0Jhc2U6OnByZWZpeChUUHJlZml4
VHlwZSBtZXNzYWdlKSB7CisgICAgc3dpdGNoKG1lc3NhZ2UpIHsKKyAgICAgICAgY2FzZSBFUHJl
Zml4Tm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhXYXJuaW5n
OgorICAgICAgICAgICAgc2luay5hcHBlbmQoIldBUk5JTkc6ICIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRVByZWZpeEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQo
IkVSUk9SOiAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhJbnRl
cm5hbEVycm9yOgorICAgICAgICAgICAgc2luay5hcHBlbmQoIklOVEVSTkFMIEVSUk9SOiAiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVQcmVmaXhVbmltcGxlbWVudGVkOgor
ICAgICAgICAgICAgc2luay5hcHBlbmQoIlVOSU1QTEVNRU5URUQ6ICIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRVByZWZpeE5vdGU6CisgICAgICAgICAgICBzaW5rLmFwcGVu
ZCgiTk9URTogIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHNpbmsuYXBwZW5kKCJVTktPV04gRVJST1I6ICIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6OmxvY2F0aW9uKFRTb3VyY2VMb2MgbG9j
KSB7CisgICAgaW50IHN0cmluZyA9IGxvYyA+PiBTb3VyY2VMb2NTdHJpbmdTaGlmdDsKKyAgICBp
bnQgbGluZSA9IGxvYyAmIFNvdXJjZUxvY0xpbmVNYXNrOworCisgICAgVFBlcnNpc3RTdHJpbmdT
dHJlYW0gc3RyZWFtOworICAgIGlmIChsaW5lKQorICAgICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8
ICI6IiA8PCBsaW5lOworICAgIGVsc2UKKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZyA8PCAiOj8g
IjsKKyAgICBzdHJlYW0gPDwgIjogIjsKKworICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7
Cit9CisKK3ZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBj
b25zdCBjaGFyKiBzKSB7CisgICAgcHJlZml4KG1lc3NhZ2UpOworICAgIHNpbmsuYXBwZW5kKHMp
OworICAgIHNpbmsuYXBwZW5kKCJcbiIpOworfQorCit2b2lkIFRJbmZvU2lua0Jhc2U6Om1lc3Nh
Z2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3QgY2hhciogcywgVFNvdXJjZUxvYyBsb2MpIHsK
KyAgICBwcmVmaXgobWVzc2FnZSk7CisgICAgbG9jYXRpb24obG9jKTsKKyAgICBzaW5rLmFwcGVu
ZChzKTsKKyAgICBzaW5rLmFwcGVuZCgiXG4iKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9JbmZvU2luay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5o
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTE0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9JTkZP
U0lOS19JTkNMVURFRF8KKyNkZWZpbmUgX0lORk9TSU5LX0lOQ0xVREVEXworCisjaW5jbHVkZSA8
bWF0aC5oPgorI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorCisvLyBSZXR1cm5zIHRoZSBm
cmFjdGlvbmFsIHBhcnQgb2YgdGhlIGdpdmVuIGZsb2F0aW5nLXBvaW50IG51bWJlci4KK2lubGlu
ZSBmbG9hdCBmcmFjdGlvbmFsUGFydChmbG9hdCBmKSB7CisgIGZsb2F0IGludFBhcnQgPSAwLjBm
OworICByZXR1cm4gbW9kZmYoZiwgJmludFBhcnQpOworfQorCisvLworLy8gVFByZWZpeFR5cGUg
aXMgdXNlZCB0byBjZW50cmFsaXplIGhvdyBpbmZvIGxvZyBtZXNzYWdlcyBzdGFydC4KKy8vIFNl
ZSBiZWxvdy4KKy8vCitlbnVtIFRQcmVmaXhUeXBlIHsKKyAgICBFUHJlZml4Tm9uZSwKKyAgICBF
UHJlZml4V2FybmluZywKKyAgICBFUHJlZml4RXJyb3IsCisgICAgRVByZWZpeEludGVybmFsRXJy
b3IsCisgICAgRVByZWZpeFVuaW1wbGVtZW50ZWQsCisgICAgRVByZWZpeE5vdGUKK307CisKKy8v
CisvLyBFbmNhcHN1bGF0ZSBpbmZvIGxvZ3MgZm9yIGFsbCBvYmplY3RzIHRoYXQgaGF2ZSB0aGVt
LgorLy8KKy8vIFRoZSBtZXRob2RzIGFyZSBhIGdlbmVyYWwgc2V0IG9mIHRvb2xzIGZvciBnZXR0
aW5nIGEgdmFyaWV0eSBvZgorLy8gbWVzc2FnZXMgYW5kIHR5cGVzIGluc2VydGVkIGludG8gdGhl
IGxvZy4KKy8vCitjbGFzcyBUSW5mb1NpbmtCYXNlIHsKK3B1YmxpYzoKKyAgICBUSW5mb1NpbmtC
YXNlKCkge30KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFRJbmZvU2lua0Jhc2Um
IG9wZXJhdG9yPDwoY29uc3QgVCYgdCkgeworICAgICAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBz
dHJlYW07CisgICAgICAgIHN0cmVhbSA8PCB0OworICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0u
c3RyKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIE92ZXJyaWRlIDw8
IG9wZXJhdG9yIGZvciBzcGVjaWZpYyB0eXBlcy4gSXQgaXMgZmFzdGVyIHRvIGFwcGVuZCBzdHJp
bmdzCisgICAgLy8gYW5kIGNoYXJhY3RlcnMgZGlyZWN0bHkgdG8gdGhlIHNpbmsuCisgICAgVElu
Zm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjaGFyIGMpIHsKKyAgICAgICAgc2luay5hcHBlbmQoMSwg
Yyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgVEluZm9TaW5rQmFzZSYgb3Bl
cmF0b3I8PChjb25zdCBjaGFyKiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8
KGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIpIHsKKyAgICAgICAgc2luay5hcHBlbmQoc3RyKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRv
cjw8KGNvbnN0IFRTdHJpbmcmIHN0cikgeworICAgICAgICBzaW5rLmFwcGVuZChzdHIuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgLy8gTWFrZSBzdXJlIGZsb2F0
cyBhcmUgd3JpdHRlbiB3aXRoIGNvcnJlY3QgcHJlY2lzaW9uLgorICAgIFRJbmZvU2lua0Jhc2Um
IG9wZXJhdG9yPDwoZmxvYXQgZikgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdCBsZWFz
dCBvbmUgZGVjaW1hbCBwb2ludCBpcyB3cml0dGVuLiBJZiBhIG51bWJlcgorICAgICAgICAvLyBk
b2VzIG5vdCBoYXZlIGEgZnJhY3Rpb25hbCBwYXJ0LCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gZm9y
bWF0IGRvZXMKKyAgICAgICAgLy8gbm90IHdyaXRlIHRoZSBkZWNpbWFsIHBvcnRpb24gd2hpY2gg
Z2V0cyBpbnRlcnByZXRlZCBhcyBpbnRlZ2VyIGJ5CisgICAgICAgIC8vIHRoZSBjb21waWxlci4K
KyAgICAgICAgVFBlcnNpc3RTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgICAgICBpZiAoZnJhY3Rp
b25hbFBhcnQoZikgPT0gMC4wZikgeworICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbigxKTsK
KyAgICAgICAgICAgIHN0cmVhbSA8PCBzdGQ6OnNob3dwb2ludCA8PCBzdGQ6OmZpeGVkIDw8IGY7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpm
aXhlZCk7CisgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpzY2llbnRpZmljKTsK
KyAgICAgICAgICAgIHN0cmVhbS5wcmVjaXNpb24oOCk7CisgICAgICAgICAgICBzdHJlYW0gPDwg
ZjsKKyAgICAgICAgfQorICAgICAgICBzaW5rLmFwcGVuZChzdHJlYW0uc3RyKCkpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIC8vIFdyaXRlIGJvb2xlYW4gdmFsdWVzIGFzIHRo
ZWlyIG5hbWVzIGluc3RlYWQgb2YgaW50ZWdyYWwgdmFsdWUuCisgICAgVEluZm9TaW5rQmFzZSYg
b3BlcmF0b3I8PChib29sIGIpIHsKKyAgICAgICAgY29uc3QgY2hhciogc3RyID0gYiA/ICJ0cnVl
IiA6ICJmYWxzZSI7CisgICAgICAgIHNpbmsuYXBwZW5kKHN0cik7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICB2b2lkIGVyYXNlKCkgeyBzaW5rLmNsZWFyKCk7IH0KKworICAg
IGNvbnN0IFRQZXJzaXN0U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9CisgICAg
Y29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0KKworICAg
IHZvaWQgcHJlZml4KFRQcmVmaXhUeXBlIG1lc3NhZ2UpOworICAgIHZvaWQgbG9jYXRpb24oVFNv
dXJjZUxvYyBsb2MpOworICAgIHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25z
dCBjaGFyKiBzKTsKKyAgICB2b2lkIG1lc3NhZ2UoVFByZWZpeFR5cGUgbWVzc2FnZSwgY29uc3Qg
Y2hhciogcywgVFNvdXJjZUxvYyBsb2MpOworCitwcml2YXRlOgorICAgIFRQZXJzaXN0U3RyaW5n
IHNpbms7Cit9OworCitjbGFzcyBUSW5mb1NpbmsgeworcHVibGljOgorICAgIFRJbmZvU2lua0Jh
c2UgaW5mbzsKKyAgICBUSW5mb1NpbmtCYXNlIGRlYnVnOworICAgIFRJbmZvU2lua0Jhc2Ugb2Jq
OworfTsKKworI2VuZGlmIC8vIF9JTkZPU0lOS19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjE5IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLworLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRp
b25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8vIGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZp
bGVzLCBhbmQgZXN0YWJsaXNoIG1hcHBpbmdzIGJldHdlZW4gCisvLyBidWlsdC1pbiBmdW5jdGlv
bnMgYW5kIG9wZXJhdG9ycy4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgi
CisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKwordm9pZCBUQnVpbHRJbnM6
OmluaXRpYWxpemUoKQoreworICAgIC8vCisgICAgLy8gSW5pdGlhbGl6ZSBhbGwgdGhlIGJ1aWx0
LWluIHN0cmluZ3MgZm9yIHBhcnNpbmcuCisgICAgLy8KKyAgICBUU3RyaW5nIEJ1aWx0SW5GdW5j
dGlvbnM7CisgICAgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zVmVydGV4OworICAgIFRTdHJpbmcg
QnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50OworICAgIFRTdHJpbmcgU3RhbmRhcmRVbmlmb3JtczsK
KyAgICBUU3RyaW5nIFZlcnRleERlZmF1bHRQcmVjaXNpb247CisgICAgVFN0cmluZyBGcmFnbWVu
dERlZmF1bHRQcmVjaXNpb247CisKKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICAgICAgICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlv
bnMgc2VlbiBieSBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IEJ1
aWx0SW5GdW5jdGlvbnM7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5nbGUgYW5kIFRyaWdv
bm9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCByYWRpYW5zKGZsb2F0IGRlZ3JlZXMpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMiAgcmFkaWFucyh2ZWMyICBkZWdyZWVzKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIHJhZGlhbnModmVjMyAgZGVncmVlcyk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICByYWRpYW5zKHZlYzQgIGRlZ3JlZXMpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkZWdyZWVzKGZsb2F0IHJhZGlhbnMpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZGVncmVlcyh2ZWMyICByYWRpYW5zKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRlZ3JlZXModmVjMyAgcmFkaWFucyk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkZWdyZWVzKHZlYzQgIHJhZGlh
bnMpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzaW4oZmxvYXQgYW5n
bGUpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc2luKHZlYzIgIGFuZ2xl
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpbih2ZWMzICBhbmdsZSk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzaW4odmVjNCAgYW5nbGUpOyIp
KTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBjb3MoZmxvYXQgYW5nbGUpOyIp
KTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY29zKHZlYzIgIGFuZ2xlKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNvcyh2ZWMzICBhbmdsZSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBjb3ModmVjNCAgYW5nbGUpOyIpKTsKKwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCB0YW4oZmxvYXQgYW5nbGUpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgdGFuKHZlYzIgIGFuZ2xlKTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHRhbih2ZWMzICBhbmdsZSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICB0YW4odmVjNCAgYW5nbGUpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhc2luKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMiAgYXNpbih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIGFzaW4odmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJ2ZWM0ICBhc2luKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBhY29zKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgYWNvcyh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGFj
b3ModmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBhY29zKHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0
IHksIGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYXRhbih2
ZWMyICB5LCB2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGF0
YW4odmVjMyAgeSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0
ICBhdGFuKHZlYzQgIHksIHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBhdGFuKGZsb2F0IHlfb3Zlcl94KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIGF0YW4odmVjMiAgeV9vdmVyX3gpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgYXRhbih2ZWMzICB5X292ZXJfeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHlfb3Zlcl94KTsiKSk7CisKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgorICAgICAgICAvLworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJmbG9hdCBwb3coZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBwb3codmVjMiAgeCwgdmVjMiAgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBwb3codmVjMyAgeCwgdmVjMyAgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBwb3codmVjNCAgeCwgdmVjNCAgeSk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGV4cChmbG9hdCB4KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGV4cCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIGV4cCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIGV4cCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgbG9nKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgbG9nKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
bG9nKHZlYzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbG9nKHZl
YzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBleHAyKGZsb2F0
IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwMih2ZWMyICB4KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGV4cDIodmVjMyAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBleHAyKHZlYzQgIHgpOyIpKTsKKworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsb2cyKGZsb2F0IHgpOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMiAgbG9nMih2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzMgIGxvZzIodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBsb2cyKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBzcXJ0KGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgc3FydCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
IHNxcnQodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzcXJ0
KHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBpbnZlcnNl
c3FydChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGludmVy
c2VzcXJ0KHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgaW52
ZXJzZXNxcnQodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBp
bnZlcnNlc3FydCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29tbW9u
IEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
YWJzKGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWJzKHZl
YzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWJzKHZlYzMgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYWJzKHZlYzQgIHgpOyIpKTsK
KworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBzaWduKGZsb2F0IHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc2lnbih2ZWMyICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpZ24odmVjMyAgeCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBzaWduKHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBmbG9vcihmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzIgIGZsb29yKHZlYzIgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyAgZmxvb3IodmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0ICBmbG9vcih2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgY2VpbChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNl
aWwodmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBjZWlsKHZl
YzMgIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY2VpbCh2ZWM0ICB4
KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZnJhY3QoZmxvYXQgeCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmcmFjdCh2ZWMyICB4KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZyYWN0KHZlYzMgIHgpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZnJhY3QodmVjNCAgeCk7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG1vZChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCBmbG9hdCB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCBmbG9hdCB5KTsi
KSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4LCBmbG9hdCB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCB2ZWMy
ICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1vZCh2ZWMzICB4LCB2
ZWMzICB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIG1vZCh2ZWM0ICB4
LCB2ZWM0ICB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWluKGZs
b2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWlu
KHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
bWluKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCAgbWluKHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgbWluKHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjMyAgbWluKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgbWluKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBtYXgoZmxvYXQgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBtYXgodmVjMiAgeCwgZmxvYXQgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgZmxvYXQgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtYXgodmVjNCAgeCwgZmxvYXQgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtYXgodmVjMiAgeCwgdmVjMiAgeSk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgdmVjMyAgeSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtYXgodmVjNCAgeCwgdmVjNCAgeSk7
IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGNsYW1wKGZsb2F0IHgsIGZs
b2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzIgIGNsYW1wKHZlYzIgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7Cisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1wKHZlYzMgIHgsIGZsb2F0IG1pblZh
bCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGNs
YW1wKHZlYzQgIHgsIGZsb2F0IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIHZlYzIgIG1pblZhbCwgdmVjMiAg
bWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGNsYW1wKHZlYzMg
IHgsIHZlYzMgIG1pblZhbCwgdmVjMyAgbWF4VmFsKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgIGNsYW1wKHZlYzQgIHgsIHZlYzQgIG1pblZhbCwgdmVjNCAgbWF4VmFsKTsi
KSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWl4KGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWl4KHZl
YzIgIHgsIHZlYzIgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMyAgbWl4KHZlYzMgIHgsIHZlYzMgIHksIGZsb2F0IGEpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHksIGZsb2F0IGEpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgbWl4KHZlYzIgIHgsIHZlYzIgIHksIHZlYzIg
IGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbWl4KHZlYzMgIHgsIHZl
YzMgIHksIHZlYzMgIGEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4
KHZlYzQgIHgsIHZlYzQgIHksIHZlYzQgIGEpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJmbG9hdCBzdGVwKGZsb2F0IGVkZ2UsIGZsb2F0IHgpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgc3RlcCh2ZWMyICBlZGdlLCB2ZWMyICB4KTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAodmVjMyAgZWRnZSwgdmVjMyAgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzdGVwKHZlYzQgIGVkZ2UsIHZlYzQgIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgc3RlcChmbG9hdCBlZGdlLCB2
ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAoZmxvYXQg
ZWRnZSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzdGVw
KGZsb2F0IGVkZ2UsIHZlYzQgIHgpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJm
bG9hdCBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgZmxvYXQgeCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKHZlYzIgIGVkZ2UwLCB2
ZWMyICBlZGdlMSwgdmVjMiAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMz
ICBzbW9vdGhzdGVwKHZlYzMgIGVkZ2UwLCB2ZWMzICBlZGdlMSwgdmVjMyAgeCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzbW9vdGhzdGVwKHZlYzQgIGVkZ2UwLCB2ZWM0
ICBlZGdlMSwgdmVjNCAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBz
bW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjMiAgeCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBzbW9vdGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBl
ZGdlMSwgdmVjMyAgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBzbW9v
dGhzdGVwKGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjNCAgeCk7IikpOworCisgICAgICAg
IC8vCisgICAgICAgIC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aChmbG9hdCB4KTsiKSk7CisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygiZmxvYXQgZGlzdGFuY2UoZmxvYXQgcDAsIGZsb2F0IHAxKTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRpc3RhbmNlKHZlYzIgIHAwLCB2ZWMyICBwMSk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMzICBwMCwgdmVj
MyAgcDEpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZGlzdGFuY2UodmVj
NCAgcDAsIHZlYzQgIHAxKTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
ZG90KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxv
YXQgZG90KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygi
ZmxvYXQgZG90KHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgZG90KHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzIGNyb3NzKHZlYzMgeCwgdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IG5vcm1hbGl6ZShmbG9hdCB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIG5vcm1hbGl6ZSh2ZWMyICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzMgIG5vcm1hbGl6ZSh2ZWMzICB4KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIG5vcm1hbGl6ZSh2ZWM0ICB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQgTnJl
Zik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmYWNlZm9yd2FyZCh2ZWMy
ICBOLCB2ZWMyICBJLCB2ZWMyICBOcmVmKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGZhY2Vmb3J3YXJkKHZlYzMgIE4sIHZlYzMgIEksIHZlYzMgIE5yZWYpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZmFjZWZvcndhcmQodmVjNCAgTiwgdmVjNCAg
SSwgdmVjNCAgTnJlZik7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJl
ZmxlY3QoZmxvYXQgSSwgZmxvYXQgTik7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWMyICByZWZsZWN0KHZlYzIgIEksIHZlYzIgIE4pOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgcmVmbGVjdCh2ZWMzICBJLCB2ZWMzICBOKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIHJlZmxlY3QodmVjNCAgSSwgdmVjNCAgTik7IikpOworCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJlZnJhY3QoZmxvYXQgSSwgZmxvYXQgTiwgZmxv
YXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJlZnJhY3QodmVj
MiAgSSwgdmVjMiAgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHJlZnJhY3QodmVjMyAgSSwgdmVjMyAgTiwgZmxvYXQgZXRhKTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHJlZnJhY3QodmVjNCAgSSwgdmVjNCAgTiwgZmxvYXQg
ZXRhKTsiKSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTWF0cml4IEZ1bmN0aW9ucy4KKyAg
ICAgICAgLy8KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygibWF0MiBtYXRyaXhDb21wTXVsdCht
YXQyIHgsIG1hdDIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQzIG1hdHJp
eENvbXBNdWx0KG1hdDMgeCwgbWF0MyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
Im1hdDQgbWF0cml4Q29tcE11bHQobWF0NCB4LCBtYXQ0IHkpOyIpKTsKKworICAgICAgICAvLwor
ICAgICAgICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuKHZlYzIgeCwgdmVjMiB5KTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKHZlYzMgeCwgdmVjMyB5
KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGxlc3NUaGFuKHZlYzQgeCwg
dmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW4o
aXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBs
ZXNzVGhhbihpdmVjMyB4LCBpdmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJ2ZWM0IGxlc3NUaGFuKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMiBsZXNzVGhhbkVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7CisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwodmVjMyB4LCB2ZWMzIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW5FcXVhbCh2ZWM0
IHgsIHZlYzQgeSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NU
aGFuRXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMyBsZXNzVGhhbkVxdWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW5FcXVhbChpdmVjNCB4LCBpdmVjNCB5KTsiKSk7
CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW4odmVjMiB4LCB2
ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW4o
dmVjMyB4LCB2ZWMzIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3Jl
YXRlclRoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMiBncmVhdGVyVGhhbihpdmVjMiB4LCBpdmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZ3JlYXRlclRoYW4oaXZlYzQgeCwgaXZlYzQg
eSk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuRXF1
YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMg
Z3JlYXRlclRoYW5FcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRoYW5FcXVhbChpdmVjMiB4LCBp
dmVjMiB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdyZWF0ZXJUaGFu
RXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjNCBncmVhdGVyVGhhbkVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOwor
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZXF1YWwoaXZlYzMgeCwgaXZl
YzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBlcXVhbChpdmVjNCB4
LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZXF1YWwo
YnZlYzIgeCwgYnZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBl
cXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2
ZWM0IGVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMiBub3RFcXVhbCh2ZWMyIHgsIHZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RFcXVhbCh2ZWM0IHgsIHZlYzQgeSk7IikpOworCisg
ICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIG5vdEVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90RXF1YWwoaXZlYzMgeCwg
aXZlYzMgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3RFcXVhbChp
dmVjNCB4LCBpdmVjNCB5KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIg
bm90RXF1YWwoYnZlYzIgeCwgYnZlYzIgeSk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJidmVjMyBub3RFcXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKGJ2ZWM0IHgsIGJ2ZWM0IHkpOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVjMiB4KTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJvb2wgYW55KGJ2ZWMzIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygiYm9vbCBhbnkoYnZlYzQgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
ImJvb2wgYWxsKGJ2ZWMyIHgpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBh
bGwoYnZlYzMgeCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVj
NCB4KTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90KGJ2ZWMyIHgp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90KGJ2ZWMzIHgpOyIpKTsK
KyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90KGJ2ZWM0IHgpOyIpKTsKKworICAg
ICAgICAvLworICAgICAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZl
YzIgY29vcmQpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQ
cm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBjb29y
ZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmUoc2Ft
cGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworCisgICAgICAgIC8vCisgICAgICAg
IC8vIE5vaXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8KKyAgICAvLwlzLmFwcGVuZChUU3RyaW5n
KCJmbG9hdCBub2lzZTEoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoImZs
b2F0IG5vaXNlMSh2ZWMyICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
bm9pc2UxKHZlYzMgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lz
ZTEodmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIo
ZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzIgbm9pc2UyKHZlYzIg
IHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMzICB4KTsi
KSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiBub2lzZTIodmVjNCAgeCk7IikpOwor
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyBub2lzZTMoZmxvYXQgeCk7IikpOworICAg
IC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZlYzIgIHgpOyIpKTsKKyAgICAvLwlz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMzIG5vaXNlMyh2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBl
bmQoVFN0cmluZygidmVjMyBub2lzZTModmVjNCAgeCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQo
VFN0cmluZygidmVjNCBub2lzZTQoZmxvYXQgeCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgbm9pc2U0KHZlYzIgIHgpOyIpKTsKKyAgICAvLwlzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0IG5vaXNlNCh2ZWMzICB4KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCBu
b2lzZTQodmVjNCAgeCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLwor
ICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSB2ZXJ0
ZXggc2hhZGVycyBvbmx5LgorICAgICAgICAvLworICAgICAgICAvLz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKworICAgICAgICBUU3RyaW5nJiBzID0gQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleDsKKworICAg
ICAgICAvLworICAgICAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgorICAgICAgICAvLworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IGZ0cmFuc2Zvcm0oKTsiKSk7CisKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAgICAgIC8vCisgICAgICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMy
IGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0
ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBsb2Qp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNh
bXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlTG9kKHNhbXBsZXJDdWJlIHNhbXBsZXIs
IHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmco
IlxuIikpOworICAgIH0KKyAgICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAg
ICAgICAvLworICAgICAgICAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2Vl
biBieSBmcmFnbWVudCBzaGFkZXJzIG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorCisgICAgICAgIFRTdHJpbmcmIHMgPSBCdWlsdEluRnVuY3Rpb25zRnJh
Z21lbnQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCisgICAg
ICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIy
RCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CisgICAgICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29y
ZCwgZmxvYXQgYmlhcyk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsK
KworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJl
IHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKKworICAgIC8vCXMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGRGZHgoZmxvYXQgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJp
bmcoInZlYzIgIGRGZHgodmVjMiAgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGRGZHgodmVjMyAgcCk7IikpOworICAgIC8vCXMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRG
ZHgodmVjNCAgcCk7IikpOworCisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeShm
bG9hdCBwKTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeSh2ZWMyICBw
KTsiKSk7CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZEZkeSh2ZWMzICBwKTsiKSk7
CisgICAgLy8Jcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZEZkeSh2ZWM0ICBwKTsiKSk7CisKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZndpZHRoKGZsb2F0IHApOyIpKTsKKyAgICAg
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZndpZHRoKHZlYzIgIHApOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygidmVjMyAgZndpZHRoKHZlYzMgIHApOyIpKTsKKyAgICAgICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCAgZndpZHRoKHZlYzQgIHApOyIpKTsKKworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJcbiIpKTsKKyAgICB9CisgICAgeworICAgICAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RhbmRhcmQgVW5pZm9ybXMKKyAgICAg
ICAgLy8KKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYg
cyA9IFN0YW5kYXJkVW5pZm9ybXM7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGVwdGggcmFu
Z2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCisgICAgICAgIC8vCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyB7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCIgICAgaGlnaHAgZmxvYXQgbmVhcjsiKSk7ICAgICAgICAvLyBuCisgICAg
ICAgIHMuYXBwZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9hdCBmYXI7IikpOyAgICAgICAgIC8v
IGYKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiICAgIGhpZ2hwIGZsb2F0IGRpZmY7IikpOyAg
ICAgICAgLy8gZiAtIG4KKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygifTsiKSk7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInVuaWZvcm0gZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVw
dGhSYW5nZTsiKSk7CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIC8vCisgICAgICAg
IC8vIERlZmF1bHQgcHJlY2lzaW9uIGZvciB2ZXJ0ZXggc2hhZGVycy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVFN0cmluZyYgcyA9IFZlcnRl
eERlZmF1bHRQcmVjaXNpb247CisKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9u
IGhpZ2hwIGludDsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdo
cCBmbG9hdDsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOworICAgIH0KKyAg
ICB7CisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAvLworICAgICAgICAv
LyBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZnJhZ21lbnQgc2hhZGVycy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIAorICAgICAgICBUU3RyaW5nJiBz
ID0gRnJhZ21lbnREZWZhdWx0UHJlY2lzaW9uOworICAgICAgICAKKyAgICAgICAgcy5hcHBlbmQo
VFN0cmluZygicHJlY2lzaW9uIG1lZGl1bXAgaW50OyIpKTsKKyAgICAgICAgLy8gTm8gZGVmYXVs
dCBwcmVjaXNpb24gZm9yIGZsb2F0IGluIGZyYWdtZW50IHNoYWRlcnMKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygiXG4iKSk7CisgICAgfQorCisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0Zy
YWdtZW50XS5wdXNoX2JhY2soRnJhZ21lbnREZWZhdWx0UHJlY2lzaW9uKTsKKyAgICBidWlsdElu
U3RyaW5nc1tFU2hMYW5nRnJhZ21lbnRdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zLmNfc3Ry
KCkpOworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKEJ1aWx0
SW5GdW5jdGlvbnNGcmFnbWVudCk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ0ZyYWdtZW50
XS5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3Jtcyk7CisgICAgCisgICAgYnVpbHRJblN0cmluZ3Nb
RVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNrKFZlcnRleERlZmF1bHRQcmVjaXNpb24pOworICAgIGJ1
aWx0SW5TdHJpbmdzW0VTaExhbmdWZXJ0ZXhdLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zKTsK
KyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0
aW9uc1ZlcnRleCk7CisgICAgYnVpbHRJblN0cmluZ3NbRVNoTGFuZ1ZlcnRleF0ucHVzaF9iYWNr
KFN0YW5kYXJkVW5pZm9ybXMpOworfQorCit2b2lkIFRCdWlsdEluczo6aW5pdGlhbGl6ZShjb25z
dCBUQnVpbHRJblJlc291cmNlICZyZXNvdXJjZXMpCit7CisgICAgVFN0cmluZ1N0cmVhbSBidWls
dEluczsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBjb25zdGFudHMKKyAgICBi
dWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKKyAgICBidWlsdElucyA8PCAiY29uc3QgaW50IGds
X01heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4VW5pZm9y
bVZlY3RvcnMgPDwgIjsiOworCisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5
aW5nVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAg
ICBidWlsdElucyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0g
IiA8PCByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1
aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIg
PDwgcmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOworICAgIGJ1
aWx0SW5zIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291
cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0
IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisgICAgYnVpbHRJbnMgPDwgImNvbnN0IGludCBn
bF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJzIDw8ICI7IjsK
KworICAgIGJ1aWx0SW5TdHJpbmdzW0VTaExhbmdGcmFnbWVudF0ucHVzaF9iYWNrKGJ1aWx0SW5z
LnN0cigpKTsKKyAgICBidWlsdEluU3RyaW5nc1tFU2hMYW5nVmVydGV4XS5wdXNoX2JhY2soYnVp
bHRJbnMuc3RyKCkpOworfQorCit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UgbGFu
Z3VhZ2UsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit7CisgICAgLy8KKyAgICAvLyBGaXJz
dCwgaW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGlu
IAorICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCisgICAgLy8KKyAgICBzd2l0Y2go
bGFuZ3VhZ2UpIHsKKworICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdD
b29yZCIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFG
cmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1l
ZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdC
dWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkp
KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworCisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5
cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6
ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAg
IC8vIE5leHQsIGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRl
ZCBoZWFkZXJzIGhhdmUKKyAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0
aGF0IGFyZSBub3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQorICAgIC8vIGV4cGVjdGVkIHRvIGJl
IHJlc29sdmVkIHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCisgICAg
Ly8gb3BlcmF0aW9ucy4KKyAgICAvLworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im5vdCIsICAgICAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOworCisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3Rv
ckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAg
ICAgICAgRU9wVmVjdG9yTm90RXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImxlc3NUaGFuIiwgICAgICAgICBFT3BMZXNzVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1Ro
YW5FcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5F
cXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1YWwpOworICAgIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3Mp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0
YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAg
RU9wUG93KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAg
ICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAg
ICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAg
ICAgICAgIEVPcEV4cCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIs
ICAgICAgICAgRU9wTG9nMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3Fy
dCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
aW52ZXJzZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQpOworCisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiYWJzIiwgICAgICAgICAgRU9wQWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJzaWduIiwgICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWluKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1w
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BN
aXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVP
cFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAg
IEVPcFNtb290aFN0ZXApOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVu
Z3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZG90IiwgICAgICAgICAgRU9wRG90KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVj
dCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9w
UmVmcmFjdCk7CisgICAgCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55Iiwg
ICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwi
LCAgICAgICAgICBFT3BBbGwpOworCisgICAgc3dpdGNoKGxhbmd1YWdlKQorICAgIHsKKyAgICBj
YXNlIEVTaExhbmdWZXJ0ZXg6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVNoTGFuZ0ZyYWdt
ZW50OgorICAgIC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgICAgICAg
IEVPcERQZHgpOyAgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAg
IC8vCXN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgICAgICAgIEVPcERQZHkp
OyAgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vCXN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsICAgICAgIEVPcEZ3aWR0aCk7ICAgLy8g
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9
Cit9CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWFnZSwgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQor
eworICAgIC8vCisgICAgLy8gRmlyc3QsIGluc2VydCBzb21lIHNwZWNpYWwgYnVpbHQtaW4gdmFy
aWFibGVzIHRoYXQgYXJlIG5vdCBpbiAKKyAgICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVz
LgorICAgIC8vCisgICAgc3dpdGNoKGxhbmd1YWdlKSB7CisKKyAgICBjYXNlIEVTaExhbmdGcmFn
bWVudDogeworICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNp
emUuCisgICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFG
cmFnQ29sb3IsICAgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJy
YXlTaXplKHJlc291cmNlcy5tYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAg
IGZyYWdEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIEdldFByZXByb2Nlc3NvckJ1aWx0aW5TdHJp
bmcoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5n
ID0gIiI7CisKKyAgICByZXR1cm4gUHJlcHJvY2Vzc29yQnVpbHRpblN0cmluZzsKK30KSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgX0lOSVRJQUxJWkVfSU5DTFVERURfCisjZGVmaW5lIF9JTklUSUFM
SVpFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oIgorCisj
aW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorCit0eXBlZGVmIFRWZWN0b3I8
VFN0cmluZz4gVEJ1aWx0SW5TdHJpbmdzOworCitjbGFzcyBUQnVpbHRJbnMgeworcHVibGljOgor
CVBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKwl2b2lkIGlu
aXRpYWxpemUoKTsKKwl2b2lkIGluaXRpYWxpemUoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVz
b3VyY2VzKTsKKwlUQnVpbHRJblN0cmluZ3MqIGdldEJ1aWx0SW5TdHJpbmdzKCkgeyByZXR1cm4g
YnVpbHRJblN0cmluZ3M7IH0KK3Byb3RlY3RlZDoKKwlUQnVpbHRJblN0cmluZ3MgYnVpbHRJblN0
cmluZ3NbRVNoTGFuZ0NvdW50XTsKK307CisKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5n
dWFnZSwgVFN5bWJvbFRhYmxlJik7Cit2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2Us
IFRTeW1ib2xUYWJsZSYsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgJnJlc291cmNlcyk7Citib29s
IEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291
cmNlcywgVEluZm9TaW5rJiwgVFN5bWJvbFRhYmxlKiwgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBF
U2hMYW5nQ291bnQpOworYm9vbCBJbml0aWFsaXplU3ltYm9sVGFibGUoVEJ1aWx0SW5TdHJpbmdz
KiBCdWlsdEluU3RyaW5ncywgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIFRJbmZvU2luayYgaW5mb1Np
bmssIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UgKnJlc291cmNlcywgVFN5bWJvbFRhYmxlKik7Citj
b25zdCBjaGFyKiBHZXRQcmVwcm9jZXNzb3JCdWlsdGluU3RyaW5nKCk7CitleHRlcm4gIkMiIGlu
dCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpOworZXh0ZXJuICJDIiBpbnQgRmluYWxpemVQcmVwcm9j
ZXNzb3Iodm9pZCk7CisKKyNlbmRpZiAvLyBfSU5JVElBTElaRV9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5o
IgorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJz
ZUNvbnRleHQuaCIKKworT1NfVExTSW5kZXggVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5W
QUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdFByb2Nlc3MoKQoreworICAgIGlmIChUaHJlYWRJ
bml0aWFsaXplSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJLy8KKwkJLy8gRnVu
Y3Rpb24gaXMgcmUtZW50cmFudC4KKwkJLy8KKyAgICAgICAgcmV0dXJuIHRydWU7CisJfQorCisg
ICAgVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOworCisgICAgaWYg
KFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAg
ICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGFsbG9jYXRlIFRMUyBhcmVh
IGZvciBpbml0IGZsYWciKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworCisgICAgaWYg
KCFJbml0aWFsaXplUG9vbEluZGV4KCkpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9j
ZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgZ2xvYmFsIHBvb2wiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCX0KKworICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUg
cGFyc2UgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisJSW5pdFRocmVh
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgSW5pdFRocmVhZCgpCit7CisJLy8K
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHJlLWVudHJhbnQKKwkvLworICAgIGlmIChUaHJlYWRJ
bml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYg
IkluaXRUaHJlYWQoKTogUHJvY2VzcyBoYXNuJ3QgYmVlbiBpbml0YWxpc2VkLiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgaWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRp
YWxpemVJbmRleCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKwlJbml0aWFsaXplR2xv
YmFsUG9vbHMoKTsKKworCWlmICghSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRp
YWxpemVJbmRleCwgKHZvaWQgKikxKSkgeworCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBV
bmFibGUgdG8gc2V0IGluaXQgZmxhZy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgRGV0YWNoVGhyZWFkKCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworCisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKwkvLworCS8vIEZ1bmN0
aW9uIGlzIHJlLWVudHJhbnQgYW5kIHRoaXMgdGhyZWFkIG1heSBub3QgaGF2ZSBiZWVuIGluaXRh
bGlzZWQuCisJLy8KKyAgICBpZiAoT1NfR2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4
KSAhPSAwKSB7CisgICAgICAgIGlmICghT1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUlu
ZGV4LCAodm9pZCAqKTApKSB7CisJCQlhc3NlcnQoMCAmJiAiRGV0YWNoVGhyZWFkKCk6IFVuYWJs
ZSB0byBjbGVhciBpbml0IGZsYWcuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisJ
CX0KKworCQlGcmVlR2xvYmFsUG9vbHMoKTsKKworCQlpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkK
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKworYm9vbCBEZXRhY2hQcm9jZXNzKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
CisgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTaEZpbmFsaXplKCk7CisKKyAgICBzdWNjZXNz
ID0gRGV0YWNoVGhyZWFkKCk7CisKKwlGcmVlUG9vbEluZGV4KCk7CisKKwlpZiAoIUZyZWVQYXJz
ZUNvbnRleHRJbmRleCgpKQorICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBPU19GcmVl
VExTSW5kZXgoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KTsKKyAgICBUaHJlYWRJbml0aWFsaXplSW5k
ZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBzdWNjZXNzOworfQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gKKyNkZWZpbmUgX19J
TklUSUFMSVpFRExMX0gKKworCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKKwor
Ym9vbCBJbml0UHJvY2VzcygpOworYm9vbCBJbml0VGhyZWFkKCk7Citib29sIERldGFjaFRocmVh
ZCgpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7CisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExf
SAorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaAkocmV2aXNpb24g
MCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElB
TElaRV9HTE9CQUxTX0lOQ0xVREVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNM
VURFRF8KKwordm9pZCBJbml0aWFsaXplR2xvYmFsUG9vbHMoKTsKK3ZvaWQgRnJlZUdsb2JhbFBv
b2xzKCk7Citib29sIEluaXRpYWxpemVQb29sSW5kZXgoKTsKK3ZvaWQgRnJlZVBvb2xJbmRleCgp
OworCisjZW5kaWYgLy8gX19JTklUSUFMSVpFX0dMT0JBTFNfSU5DTFVERURfCkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDApCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9fSU5JVElB
TElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXworI2RlZmluZSBfX0lOSVRJQUxJWkVfUEFSU0Vf
Q09OVEVYVF9JTkNMVURFRF8KKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKKworYm9v
bCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTsKK2Jvb2wgSW5pdGlhbGl6ZUdsb2JhbFBh
cnNlQ29udGV4dCgpOworYm9vbCBGcmVlUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNv
bnRleHRJbmRleCgpOworCisKKyNlbmRpZiAvLyBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9J
TkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjkzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vCisvLyBUcmF2ZXJzZSB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uIHRyZWUsIGFuZAorLy8gY2FsbCBhIG5vZGUgdHlwZSBzcGVjaWZpYyBm
dW5jdGlvbiBmb3IgZWFjaCBub2RlLgorLy8gRG9uZSByZWN1cnNpdmVseSB0aHJvdWdoIHRoZSBt
ZW1iZXIgZnVuY3Rpb24gVHJhdmVyc2UoKS4KKy8vIE5vZGUgdHlwZXMgY2FuIGJlIHNraXBwZWQg
aWYgdGhlaXIgZnVuY3Rpb24gdG8gY2FsbCBpcyAwLAorLy8gYnV0IHRoZWlyIHN1YnRyZWUgd2ls
bCBzdGlsbCBiZSB0cmF2ZXJzZWQuCisvLyBOb2RlcyB3aXRoIGNoaWxkcmVuIGNhbiBoYXZlIHRo
ZWlyIHdob2xlIHN1YnRyZWUgc2tpcHBlZAorLy8gaWYgcHJlVmlzaXQgaXMgdHVybmVkIG9uIGFu
ZCB0aGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbgorLy8gcmV0dXJucyBmYWxzZS4KKy8vCisvLyBw
cmVWaXNpdCwgcG9zdFZpc2l0LCBhbmQgcmlnaHRUb0xlZnQgY29udHJvbCB3aGF0IG9yZGVyCisv
LyBub2RlcyBhcmUgdmlzaXRlZCBpbi4KKy8vCisKKy8vCisvLyBUcmF2ZXJzYWwgZnVuY3Rpb25z
IGZvciB0ZXJtaW5hbHMgYXJlIHN0cmFpZ2hmb3J3YXJkLi4uLgorLy8KK3ZvaWQgVEludGVybVN5
bWJvbDo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCit7CisJaXQtPnZpc2l0U3ltYm9s
KHRoaXMpOworfQorCit2b2lkIFRJbnRlcm1Db25zdGFudFVuaW9uOjp0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKiBpdCkKK3sKKwlpdC0+dmlzaXRDb25zdGFudFVuaW9uKHRoaXMpOworfQorCisv
LworLy8gVHJhdmVyc2UgYSBiaW5hcnkgbm9kZS4KKy8vCit2b2lkIFRJbnRlcm1CaW5hcnk6OnRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJ
Ly8KKwkvLyB2aXNpdCB0aGUgbm9kZSBiZWZvcmUgY2hpbGRyZW4gaWYgcHJlLXZpc2l0aW5nLgor
CS8vCisJaWYoaXQtPnByZVZpc2l0KQorCXsKKwkJdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJl
VmlzaXQsIHRoaXMpOworCX0KKwkKKwkvLworCS8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhl
IHJpZ2h0IG9yZGVyLgorCS8vCisJaWYodmlzaXQpCisJeworCQlpdC0+aW5jcmVtZW50RGVwdGgo
KTsKKworCQlpZihpdC0+cmlnaHRUb0xlZnQpIAorCQl7CisJCQlpZihyaWdodCkKKwkJCXsKKwkJ
CQlyaWdodC0+dHJhdmVyc2UoaXQpOworCQkJfQorCQkJCisJCQlpZihpdC0+aW5WaXNpdCkKKwkJ
CXsKKwkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKKwkJCX0KKwor
CQkJaWYodmlzaXQgJiYgbGVmdCkKKwkJCXsKKwkJCQlsZWZ0LT50cmF2ZXJzZShpdCk7CisJCQl9
CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihsZWZ0KQorCQkJeworCQkJCWxlZnQtPnRyYXZlcnNl
KGl0KTsKKwkJCX0KKwkJCQorCQkJaWYoaXQtPmluVmlzaXQpCisJCQl7CisJCQkJdmlzaXQgPSBp
dC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CisJCQl9CisKKwkJCWlmKHZpc2l0ICYmIHJp
Z2h0KQorCQkJeworCQkJCXJpZ2h0LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKworCQlpdC0+
ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwkvLworCS8vIFZpc2l0IHRoZSBub2RlIGFmdGVyIHRo
ZSBjaGlsZHJlbiwgaWYgcmVxdWVzdGVkIGFuZCB0aGUgdHJhdmVyc2FsCisJLy8gaGFzbid0IGJl
ZW4gY2FuY2VsbGVkIHlldC4KKwkvLworCWlmKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQpCisJewor
CQlpdC0+dmlzaXRCaW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKKwl9Cit9CisKKy8vCisvLyBUcmF2
ZXJzZSBhIHVuYXJ5IG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhl
cmUuCisvLwordm9pZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0
KQoreworCWJvb2wgdmlzaXQgPSB0cnVlOworCisJaWYgKGl0LT5wcmVWaXNpdCkKKwkJdmlzaXQg
PSBpdC0+dmlzaXRVbmFyeShQcmVWaXNpdCwgdGhpcyk7CisKKwlpZiAodmlzaXQpIHsKKwkJaXQt
PmluY3JlbWVudERlcHRoKCk7CisJCW9wZXJhbmQtPnRyYXZlcnNlKGl0KTsKKwkJaXQtPmRlY3Jl
bWVudERlcHRoKCk7CisJfQorCQorCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCQlpdC0+
dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOworfQorCisvLworLy8gVHJhdmVyc2UgYW4gYWdn
cmVnYXRlIG5vZGUuICBTYW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisv
Lwordm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkK
K3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKwkKKwlpZihpdC0+cHJlVmlzaXQpCisJeworCQl2aXNp
dCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7CisJfQorCQorCWlmKHZpc2l0
KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYoaXQtPnJpZ2h0VG9MZWZ0KQor
CQl7CisJCQlmb3IoVEludGVybVNlcXVlbmNlOjpyZXZlcnNlX2l0ZXJhdG9yIHNpdCA9IHNlcXVl
bmNlLnJiZWdpbigpOyBzaXQgIT0gc2VxdWVuY2UucmVuZCgpOyBzaXQrKykKKwkJCXsKKwkJCQko
KnNpdCktPnRyYXZlcnNlKGl0KTsKKworCQkJCWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQorCQkJ
CXsKKwkJCQkJaWYoKnNpdCAhPSBzZXF1ZW5jZS5mcm9udCgpKQorCQkJCQl7CisJCQkJCQl2aXNp
dCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJCX0KKwkJ
CX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWZvcihUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNp
dCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisJCQl7
CisJCQkJKCpzaXQpLT50cmF2ZXJzZShpdCk7CisKKwkJCQlpZih2aXNpdCAmJiBpdC0+aW5WaXNp
dCkKKwkJCQl7CisJCQkJCWlmKCpzaXQgIT0gc2VxdWVuY2UuYmFjaygpKQorCQkJCQl7CisJCQkJ
CQl2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShJblZpc2l0LCB0aGlzKTsKKwkJCQkJfQorCQkJ
CX0KKwkJCX0KKwkJfQorCQkKKwkJaXQtPmRlY3JlbWVudERlcHRoKCk7CisJfQorCisJaWYodmlz
aXQgJiYgaXQtPnBvc3RWaXNpdCkKKwl7CisJCWl0LT52aXNpdEFnZ3JlZ2F0ZShQb3N0VmlzaXQs
IHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNlIGEgc2VsZWN0aW9uIG5vZGUuICBTYW1l
IGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJtU2Vs
ZWN0aW9uOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0g
dHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQpCisJCXZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9u
KFByZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAodmlzaXQpIHsKKwkJaXQtPmluY3JlbWVudERlcHRo
KCk7CisJCWlmIChpdC0+cmlnaHRUb0xlZnQpIHsKKwkJCWlmIChmYWxzZUJsb2NrKQorCQkJCWZh
bHNlQmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWlmICh0cnVlQmxvY2spCisJCQkJdHJ1ZUJsb2Nr
LT50cmF2ZXJzZShpdCk7CisJCQljb25kaXRpb24tPnRyYXZlcnNlKGl0KTsKKwkJfSBlbHNlIHsK
KwkJCWNvbmRpdGlvbi0+dHJhdmVyc2UoaXQpOworCQkJaWYgKHRydWVCbG9jaykKKwkJCQl0cnVl
QmxvY2stPnRyYXZlcnNlKGl0KTsKKwkJCWlmIChmYWxzZUJsb2NrKQorCQkJCWZhbHNlQmxvY2st
PnRyYXZlcnNlKGl0KTsKKwkJfQorCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9CisKKwlpZiAo
dmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZpc2l0U2VsZWN0aW9uKFBvc3RWaXNpdCwg
dGhpcyk7Cit9CisKKy8vCisvLyBUcmF2ZXJzZSBhIGxvb3Agbm9kZS4gIFNhbWUgY29tbWVudHMg
aW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KKy8vCit2b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJz
ZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0gdHJ1ZTsKKworCWlmKGl0
LT5wcmVWaXNpdCkKKwl7CisJCXZpc2l0ID0gaXQtPnZpc2l0TG9vcChQcmVWaXNpdCwgdGhpcyk7
CisJfQorCQorCWlmKHZpc2l0KQorCXsKKwkJaXQtPmluY3JlbWVudERlcHRoKCk7CisKKwkJaWYo
aXQtPnJpZ2h0VG9MZWZ0KQorCQl7CisJCQlpZih0ZXJtaW5hbCkKKwkJCXsKKwkJCQl0ZXJtaW5h
bC0+dHJhdmVyc2UoaXQpOworCQkJfQorCisJCQlpZihib2R5KQorCQkJeworCQkJCWJvZHktPnRy
YXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYodGVzdCkKKwkJCXsKKwkJCQl0ZXN0LT50cmF2ZXJz
ZShpdCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZih0ZXN0KQorCQkJeworCQkJCXRl
c3QtPnRyYXZlcnNlKGl0KTsKKwkJCX0KKworCQkJaWYoYm9keSkKKwkJCXsKKwkJCQlib2R5LT50
cmF2ZXJzZShpdCk7CisJCQl9CisKKwkJCWlmKHRlcm1pbmFsKQorCQkJeworCQkJCXRlcm1pbmFs
LT50cmF2ZXJzZShpdCk7CisJCQl9CisJCX0KKworCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKKwl9
CisKKwlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQorCXsKKwkJaXQtPnZpc2l0TG9vcChQb3N0
VmlzaXQsIHRoaXMpOworCX0KK30KKworLy8KKy8vIFRyYXZlcnNlIGEgYnJhbmNoIG5vZGUuICBT
YW1lIGNvbW1lbnRzIGluIGJpbmFyeSBub2RlIGFwcGx5IGhlcmUuCisvLwordm9pZCBUSW50ZXJt
QnJhbmNoOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKiBpdCkKK3sKKwlib29sIHZpc2l0ID0g
dHJ1ZTsKKworCWlmIChpdC0+cHJlVmlzaXQpCisJCXZpc2l0ID0gaXQtPnZpc2l0QnJhbmNoKFBy
ZVZpc2l0LCB0aGlzKTsKKwkKKwlpZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgeworCQlpdC0+aW5j
cmVtZW50RGVwdGgoKTsKKwkJZXhwcmVzc2lvbi0+dHJhdmVyc2UoaXQpOworCQlpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKKwl9CisKKwlpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKKwkJaXQtPnZp
c2l0QnJhbmNoKFBvc3RWaXNpdCwgdGhpcyk7Cit9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9JbnRl
cm1lZGlhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVk
aWF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQwNSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8KKy8vIEJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCisvLwor
CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImNv
bXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVy
QWxpdmUuaCIKKyNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCisKK2Jvb2wgQ29tcGFy
ZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdo
dFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKKworVFByZWNpc2lv
biBHZXRIaWdoZXN0UHJlY2lzaW9uKCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQg
KXsKKyAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OworfQorLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8KKy8vIEZpcnN0IHNldCBvZiBmdW5jdGlvbnMgYXJlIHRvIGhlbHAgYnVp
bGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgbm90IG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIG5vZGVzLgorLy8gVGhleSBhcmUgY2FsbGVk
IGZyb20gcGFyc2VyIHByb2R1Y3Rpb25zLgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8v
CisvLyBBZGQgYSB0ZXJtaW5hbCBub2RlIGZvciBhbiBpZGVudGlmaWVyIGluIGFuIGV4cHJlc3Np
b24uCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtU3ltYm9sKiBU
SW50ZXJtZWRpYXRlOjphZGRTeW1ib2woaW50IGlkLCBjb25zdCBUU3RyaW5nJiBuYW1lLCBjb25z
dCBUVHlwZSYgdHlwZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIFRJbnRlcm1TeW1ib2wqIG5v
ZGUgPSBuZXcgVEludGVybVN5bWJvbChpZCwgbmFtZSwgdHlwZSk7CisgICAgbm9kZS0+c2V0TGlu
ZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29ubmVjdCB0d28gbm9k
ZXMgd2l0aCBhIG5ldyBwYXJlbnQgdGhhdCBkb2VzIGEgYmluYXJ5IG9wZXJhdGlvbiBvbiB0aGUg
bm9kZXMuCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQq
IFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQq
IGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MgbGluZSwgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW46CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAgICAgICAg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc0Fy
cmF5KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzVmVjdG9yKCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOgorICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgIGNhc2UgRU9wTG9naWNh
bEFuZDoKKyAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0g
RWJ0Qm9vbCB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCku
aXNBcnJheSgpIHx8IGxlZnQtPmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BBZGQ6CisgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICBjYXNlIEVPcERpdjoK
KyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGaXJzdCB0cnkgY29udmVydGluZyB0
aGUgY2hpbGRyZW4gdG8gY29tcGF0aWJsZSB0eXBlcy4KKyAgICAvLworCisgICAgaWYgKCEobGVm
dC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkp
KSB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKG9wLCBsZWZ0
LT5nZXRUeXBlKCksIHJpZ2h0KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgcmln
aHQgPSBjaGlsZDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGlsZCA9IGFkZENvbnZl
cnNpb24ob3AsIHJpZ2h0LT5nZXRUeXBlKCksIGxlZnQpOworICAgICAgICAgICAgaWYgKGNoaWxk
KQorICAgICAgICAgICAgICAgIGxlZnQgPSBjaGlsZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGluZyB0
aGluZ3MgdG9nZXRoZXIgdGhlbi4gIE1ha2UKKyAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQgdG8g
dGhlIHJpZ2h0IHR5cGUuCisgICAgLy8KKyAgICBUSW50ZXJtQmluYXJ5KiBub2RlID0gbmV3IFRJ
bnRlcm1CaW5hcnkob3ApOworICAgIGlmIChsaW5lID09IDApCisgICAgICAgIGxpbmUgPSByaWdo
dC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICBub2RlLT5zZXRM
ZWZ0KGxlZnQpOworICAgIG5vZGUtPnNldFJpZ2h0KHJpZ2h0KTsKKyAgICBpZiAoISBub2RlLT5w
cm9tb3RlKGluZm9TaW5rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqbGVmdFRlbXBDb25zdGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpyaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKworICAgIGlmIChsZWZ0VGVtcENvbnN0YW50KQorICAgICAgICBs
ZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICBpZiAo
cmlnaHRUZW1wQ29uc3RhbnQpCisgICAgICAgIHJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQg
Y29uc3RhbnRzLgorICAgIC8vCisKKyAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9
IDA7CisgICAgaWYgKCBsZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Cisg
ICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0
T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKKworICAgICAgICBpZiAodHlwZWRS
ZXR1cm5Ob2RlKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbm9kZTsKK30KKworLy8KKy8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91Z2gg
YW4gYXNzaWdubWVudC4KKy8vCisvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgorLy8KK1RJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5
cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAg
Ly8KKyAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJzaW9u
IGNhbiBvbmx5IGdvCisgICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgorICAgIC8vCisgICAgVElu
dGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9
PSAwKQorICAgICAgICBsaW5lID0gbGVmdC0+Z2V0TGluZSgpOworICAgIG5vZGUtPnNldExpbmUo
bGluZSk7CisKKyAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgbGVm
dC0+Z2V0VHlwZSgpLCByaWdodCk7CisgICAgaWYgKGNoaWxkID09IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgbm9kZS0+c2V0TGVmdChsZWZ0KTsKKyAgICBub2RlLT5zZXRSaWdodChjaGls
ZCk7CisgICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBDb25uZWN0IHR3byBub2RlcyB0aHJv
dWdoIGFuIGluZGV4IG9wZXJhdG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNlCisv
LyBvZiBhbiBhcnJheSBvciBzdHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVjdCBv
ciBpbmRpcmVjdCBvZmZzZXQuCisvLworLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KKy8vIFRo
ZSBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KKy8vCitU
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jIGxpbmUpCit7Cisg
ICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKKyAgICBpZiAo
bGluZSA9PSAwKQorICAgICAgICBsaW5lID0gaW5kZXgtPmdldExpbmUoKTsKKyAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldExlZnQoYmFzZSk7CisgICAgbm9kZS0+c2V0Umln
aHQoaW5kZXgpOworCisgICAgLy8gY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUKKworICAgIHJl
dHVybiBub2RlOworfQorCisvLworLy8gQWRkIG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2YgYW5v
dGhlciB0aGF0IGl0IG9wZXJhdGVzIG9uLgorLy8KKy8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUu
CisvLworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpCit7CisgICAgVEludGVybVVuYXJ5KiBub2RlOworICAgIFRJbnRlcm1U
eXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdldEFzVHlwZWQoKTsKKworICAgIGlmIChjaGlsZCA9
PSAwKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0aCIsIGxpbmUpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoK
KyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJv
b2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNB
cnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAg
ICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVu
dDoKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgpLmlz
QXJyYXkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhlIG9w
ZXJhbmQ/CisgICAgLy8KKyAgICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUgcmVt
b3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAvLworICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9
IEVidFZvaWQ7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElu
dDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7CisgICAgICAgIGNo
aWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lv
bigpLCBFdnFUZW1wb3JhcnksCisgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwK
KyAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAorICAgICAgICAgICAgY2hpbGQtPmlzQXJy
YXkoKSksCisgICAgICAgICAgICBjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZCA9PSAwKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGb3IgY29uc3RydWN0
b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJzaW9uLgorICAgIC8v
CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0
OgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICB9CisKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAwOwor
ICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgIGNoaWxkVGVtcENv
bnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgLy8KKyAgICAvLyBN
YWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVyYXRvci4KKyAgICAvLworICAgIG5vZGUgPSBuZXcg
VEludGVybVVuYXJ5KG9wKTsKKyAgICBpZiAobGluZSA9PSAwKQorICAgICAgICBsaW5lID0gY2hp
bGQtPmdldExpbmUoKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworICAgIG5vZGUtPnNldE9w
ZXJhbmQoY2hpbGQpOworCisgICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGNoaWxkVGVtcENvbnN0YW50KSAgeworICAgICAgICBU
SW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAsIGlu
Zm9TaW5rKTsKKworICAgICAgICBpZiAobmV3Q2hpbGQpCisgICAgICAgICAgICByZXR1cm4gbmV3
Q2hpbGQ7CisgICAgfQorCisgICAgcmV0dXJuIG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRo
ZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMgaXQK
Ky8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxseSBm
b3IgZXN0YWJsaXNoaW5nCisvLyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQncyBz
ZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNlcworLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBhbHNv
IGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3QgZGlyZW5jdGx5IHNldAorLy8gdGhlaXIgb3BlcmF0
b3IgdG8gRU9wU2VxdWVuY2UuCisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwgd2hp
Y2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYKKy8vIGl0IHdhcyBhbHJlYWR5IGFuIGFn
Z3JlZ2F0ZS4KKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dyZWdh
dGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZTsKKworICAgIC8vCisgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYW4gYWdncmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBvbmUu
CisgICAgLy8KKyAgICBpZiAobm9kZSkgeworICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0QXNB
Z2dyZWdhdGUoKTsKKyAgICAgICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRPcCgp
ICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBNYWtlIGFuIGFn
Z3JlZ2F0ZSBjb250YWluaW5nIHRoaXMgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKKyAgICAgICAgICAgIGFnZ05vZGUt
PmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworICAgICAgICAgICAgaWYgKGxpbmUgPT0g
MCkKKyAgICAgICAgICAgICAgICBsaW5lID0gbm9kZS0+Z2V0TGluZSgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOworCisg
ICAgLy8KKyAgICAvLyBTZXQgdGhlIG9wZXJhdG9yLgorICAgIC8vCisgICAgYWdnTm9kZS0+c2V0
T3BlcmF0b3Iob3ApOworICAgIGlmIChsaW5lICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNldExp
bmUobGluZSk7CisKKyAgICByZXR1cm4gYWdnTm9kZTsKK30KKworLy8KKy8vIENvbnZlcnQgb25l
IHR5cGUgdG8gYW5vdGhlci4KKy8vCisvLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0
aGUgY29udmVyc2lvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNhbWUKKy8vIG5vZGUgcGFzc2VkIGlu
IGlmIG5vIGNvbnZlcnNpb24gd2FzIG5lZWRlZC4KKy8vCisvLyBSZXR1cm4gMCBpZiBhIGNvbnZl
cnNpb24gY2FuJ3QgYmUgZG9uZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZENvbnZlcnNpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVk
KiBub2RlKQoreworICAgIC8vCisgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJh
dGlvbj8KKyAgICAvLworICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0
OiBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJl
IGlkZW50aWNhbCwgbm8gcHJvYmxlbQorICAgIC8vCisgICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0
VHlwZSgpKQorICAgICAgICByZXR1cm4gbm9kZTsKKworICAgIC8vCisgICAgLy8gSWYgb25lJ3Mg
YSBzdHJ1Y3R1cmUsIHRoZW4gbm8gY29udmVyc2lvbnMuCisgICAgLy8KKyAgICBpZiAodHlwZS5n
ZXRTdHJ1Y3QoKSB8fCBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8KKyAgICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJz
aW9ucy4KKyAgICAvLworICAgIGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCku
aXNBcnJheSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRv
OworCisgICAgc3dpdGNoIChvcCkgeworICAgICAgICAvLworICAgICAgICAvLyBFeHBsaWNpdCBj
b252ZXJzaW9ucworICAgICAgICAvLworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Cisg
ICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRCb29sOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRG
bG9hdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoK
KyAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGltcGxpY2l0IGNv
bnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gU2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwg
YnV0IHRoYXQncworICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24u
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAg
aWYgKG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisKKyAgICAgICAgcmV0dXJuIChwcm9t
b3RlQ29uc3RhbnRVbmlvbihwcm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7
CisgICAgfSBlbHNlIHsKKworICAgICAgICAvLworICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9k
ZSBmb3IgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1VbmFyeSog
bmV3Tm9kZSA9IDA7CisKKyAgICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKKyAgICAg
ICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xU
b0Zsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
IkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDog
ICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIs
IG5vZGUtPmdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29s
VG9JbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09w
ID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlv
biB0eXBlIiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNp
b24oKSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJp
eCgpLCBub2RlLT5pc0FycmF5KCkpOworICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFy
eShuZXdPcCwgdHlwZSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgp
KTsKKyAgICAgICAgbmV3Tm9kZS0+c2V0T3BlcmFuZChub2RlKTsKKworICAgICAgICByZXR1cm4g
bmV3Tm9kZTsKKyAgICB9Cit9CisKKy8vCisvLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2Rl
cyBpbnRvIGFuIGFnZ3JlZ2F0ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKKy8vIGEgbm9k
ZSB0aGF0J3Mgbm90IGEgYWdncmVnYXRlIHlldCwgZXRjLgorLy8KKy8vIFJldHVybnMgdGhlIHJl
c3VsdGluZyBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCisvLyBib3RoIGV4
aXN0aW5nIG5vZGVzLgorLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dB
Z2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxv
YyBsaW5lKQoreworICAgIGlmIChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gMDsKKyAgICBpZiAobGVm
dCkKKyAgICAgICAgYWdnTm9kZSA9IGxlZnQtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKCFh
Z2dOb2RlIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgeworICAgICAgICBhZ2dOb2Rl
ID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAg
YWdnTm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYg
KHJpZ2h0KQorICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdodCk7
CisKKyAgICBpZiAobGluZSAhPSAwKQorICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOwor
CisgICAgcmV0dXJuIGFnZ05vZGU7Cit9CisKKy8vCisvLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUg
aW50byBhbiBhZ2dyZWdhdGUuCisvLworLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAw
IHdhcyBwYXNzZWQgaW4gZm9yIHRoZSBleGlzdGluZyBub2RlLgorLy8KK1RJbnRlcm1BZ2dyZWdh
dGUqIFRJbnRlcm1lZGlhdGU6Om1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3Vy
Y2VMb2MgbGluZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAg
ICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKKworICAgIGlmIChsaW5l
ICE9IDApCisgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CisgICAgZWxzZQorICAgICAg
ICBhZ2dOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CisKKyAgICByZXR1cm4gYWdnTm9k
ZTsKK30KKworLy8KKy8vIEZvciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hp
bGRyZW47IGEgY29uZGl0aW9uLAorLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBU
aGUgdHdvIHBhdGhzIGFyZSBpbiB0aGUKKy8vIG5vZGVQYWlyLgorLy8KKy8vIFJldHVybnMgdGhl
IHNlbGVjdGlvbiBub2RlIGNyZWF0ZWQuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6
OmFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFp
ciwgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIC8vCisgICAgLy8gRm9yIGNvbXBpbGUgdGltZSBj
b25zdGFudCBzZWxlY3Rpb25zLCBwcnVuZSB0aGUgY29kZSBhbmQKKyAgICAvLyB0ZXN0IG5vdy4K
KyAgICAvLworCisgICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVk
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7CisgICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVk
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29u
c3QoKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUyOworICAgIH0KKworICAgIFRJbnRlcm1T
ZWxlY3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2Rl
MSwgbm9kZVBhaXIubm9kZTIpOworICAgIG5vZGUtPnNldExpbmUobGluZSk7CisKKyAgICByZXR1
cm4gbm9kZTsKK30KKworCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJ
bnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQor
eworICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYg
cmlnaHQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeworICAgICAgICBy
ZXR1cm4gcmlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb21tYUFn
Z3JlZ2F0ZSA9IGdyb3dBZ2dyZWdhdGUobGVmdCwgcmlnaHQsIGxpbmUpOworICAgICAgICBjb21t
YUFnZ3JlZ2F0ZS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3BlcmF0b3IoRU9wQ29tbWEpOworICAg
ICAgICBjb21tYUFnZ3JlZ2F0ZS0+c2V0VHlwZShyaWdodC0+Z2V0VHlwZSgpKTsKKyAgICAgICAg
Y29tbWFBZ2dyZWdhdGUtPmdldFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOworICAgICAgICByZXR1cm4gY29tbWFBZ2dyZWdhdGU7CisgICAgfQorfQorCisvLwor
Ly8gRm9yICI/OiIgdGVzdCBub2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25k
aXRpb24sCisvLyBhIHRydWUgcGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMg
YXJlIHNwZWNpZmllZAorLy8gYXMgc2VwYXJhdGUgcGFyYW1ldGVycy4KKy8vCisvLyBSZXR1cm5z
IHRoZSBzZWxlY3Rpb24gbm9kZSBjcmVhdGVkLCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCisv
LworVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVk
KiBjb25kLCBUSW50ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2Nr
LCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgLy8KKyAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBl
cy4KKyAgICAvLworICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNl
cXVlbmNlLCB0cnVlQmxvY2stPmdldFR5cGUoKSwgZmFsc2VCbG9jayk7CisgICAgaWYgKGNoaWxk
KQorICAgICAgICBmYWxzZUJsb2NrID0gY2hpbGQ7CisgICAgZWxzZSB7CisgICAgICAgIGNoaWxk
ID0gYWRkQ29udmVyc2lvbihFT3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVl
QmxvY2spOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGls
ZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8K
KyAgICAvLyBTZWUgaWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBp
dCBvdGhlcndpc2Ugbm90LgorICAgIC8vCisKKyAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVu
aW9uKCkgJiYgdHJ1ZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgeworICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWVCbG9jazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
QmxvY2s7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCisg
ICAgLy8KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24o
Y29uZCwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7CisgICAg
bm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQ29u
c3RhbnQgdGVybWluYWwgbm9kZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZs
b2F0IG9yIGludCBjb25zdGFudHMKKy8vCisvLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBu
b2RlIGNyZWF0ZWQuCisvLworCitUSW50ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6
YWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3Qg
VFR5cGUmIHQsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
bm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7Cisg
ICAgbm9kZS0+c2V0TGluZShsaW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCitUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBU
U291cmNlTG9jIGxpbmUpCit7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJ
bnRlcm1BZ2dyZWdhdGUoRU9wU2VxdWVuY2UpOworCisgICAgbm9kZS0+c2V0TGluZShsaW5lKTsK
KyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogY29uc3RJbnROb2RlOworICAgIFRJbnRlcm1TZXF1
ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgIENvbnN0YW50
VW5pb24qIHVuaW9uQXJyYXk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07
IGkrKykgeworICAgICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7CisgICAgICAgIGNv
bnN0SW50Tm9kZSA9IGFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgbGluZSk7CisgICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1
c2hfYmFjayhjb25zdEludE5vZGUpOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCisv
LworLy8gQ3JlYXRlIGxvb3Agbm9kZXMuCisvLworVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6
OmFkZExvb3AoVEludGVybU5vZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBib2R5LCBUSW50ZXJtVHlw
ZWQqIHRlc3QsIFRJbnRlcm1UeXBlZCogdGVybWluYWwsIGJvb2wgdGVzdEZpcnN0LCBUU291cmNl
TG9jIGxpbmUpCit7CisgICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AoaW5p
dCwgYm9keSwgdGVzdCwgdGVybWluYWwsIHRlc3RGaXJzdCk7CisgICAgbm9kZS0+c2V0TGluZShs
aW5lKTsKKworICAgIHJldHVybiBub2RlOworfQorCisvLworLy8gQWRkIGJyYW5jaGVzLgorLy8K
K1RJbnRlcm1CcmFuY2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNo
T3AsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAw
LCBsaW5lKTsKK30KKworVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRP
cGVyYXRvciBicmFuY2hPcCwgVEludGVybVR5cGVkKiBleHByZXNzaW9uLCBUU291cmNlTG9jIGxp
bmUpCit7CisgICAgVEludGVybUJyYW5jaCogbm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJyYW5j
aE9wLCBleHByZXNzaW9uKTsKKyAgICBub2RlLT5zZXRMaW5lKGxpbmUpOworCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKKy8vCisvLyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZpbmFs
IHJvb3QgaXMgcHV0IG9uIHRvcCBieSB0aGUgcGFyc2luZworLy8gcHJvY2Vzcy4KKy8vCitib29s
IFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290LCBFU2hMYW5ndWFn
ZSBsYW5ndWFnZSkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vCisgICAgLy8gRmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5j
ZSwgaWYgYW55CisgICAgLy8KKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+
Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09
IEVPcE51bGwpCisgICAgICAgIGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgorLy8K
K3ZvaWQgVEludGVybWVkaWF0ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIGlm
IChyb290KQorICAgICAgICBSZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Cit9CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vCisvLyBNZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0
aGUgdHJlZS4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3Bl
cmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KKy8vCisvLyBSZXR1
cm5zIHRydWUgaWYgc3RhdGUgaXMgbW9kaWZpZWQuCisvLworYm9vbCBUSW50ZXJtT3BlcmF0b3I6
Om1vZGlmaWVzU3RhdGUoKSBjb25zdAoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAg
ICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoK
KyAgICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAg
ICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJB
c3NpZ246CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAg
IGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLworLy8gcmV0
dXJucyB0cnVlIGlmIHRoZSBvcGVyYXRvciBpcyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMK
Ky8vCitib29sIFRJbnRlcm1PcGVyYXRvcjo6aXNDb25zdHJ1Y3RvcigpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
MzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEZsb2F0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgorICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVj
MjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RCVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKy8vCisvLyBNYWtl
IHN1cmUgdGhlIHR5cGUgb2YgYSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRz
CisvLyBjb21iaW5hdGlvbiBvZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlwZS4KKy8vCisvLyBS
ZXR1cm5zIGZhbHNlIGluIG5vdGhpbmcgbWFrZXMgc2Vuc2UuCisvLworYm9vbCBUSW50ZXJtVW5h
cnk6OnByb21vdGUoVEluZm9TaW5rJikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNh
c2UgRU9wTG9naWNhbE5vdDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIEVPcFBvc3RJ
bmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBF
T3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICAg
ICAgaWYgKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpID09IEVidEJvb2wpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIG9w
ZXJhdG9ycyBmb3IgYnVpbHQtaW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRo
ZWlyIHByb3RvdHlwZQorICAgICAgICBjYXNlIEVPcEFueToKKyAgICAgICAgY2FzZSBFT3BBbGw6
CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHNldFR5cGUob3BlcmFuZC0+Z2V0VHlwZSgpKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCisvLworLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVy
YXRpb24sIGFzIHdlbGwgYXMKKy8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUg
Zm9yIHRoZSBvcGVyYW5kcy4KKy8vCisvLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0
IHdvcmsgb24gb3BlcmFuZHMuCisvLworYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZv
U2luayYgaW5mb1NpbmspCit7CisgICAgaW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgp
OworICAgIGlmIChyaWdodC0+Z2V0Tm9taW5hbFNpemUoKSA+IHNpemUpCisgICAgICAgIHNpemUg
PSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKTsKKworICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQt
PmdldEJhc2ljVHlwZSgpOworCisgICAgLy8KKyAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFj
dCBtYXRjaGVzLgorICAgIC8vCisgICAgaWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlz
QXJyYXkoKSkgJiYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBCYXNlIGFzc3VtcHRpb246ICBqdXN0
IG1ha2UgdGhlIHR5cGUgdGhlIHNhbWUgYXMgdGhlIGxlZnQKKyAgICAvLyBvcGVyYW5kLiAgVGhl
biBvbmx5IGRldmlhdGlvbnMgZnJvbSB0aGlzIG5lZWQgYmUgY29kZWQuCisgICAgLy8KKyAgICBz
ZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CisKKyAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNp
b24gPSBHZXRIaWdoZXN0UHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0
UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdo
ZXN0UHJlY2lzaW9uKTsKKworICAgIC8vCisgICAgLy8gQXJyYXkgb3BlcmF0aW9ucy4KKyAgICAv
LworICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpIHsKKworICAgICAgICBzd2l0Y2ggKG9wKSB7CisK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGNh
c2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFNldCBhcnJheSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6
ZToKKyAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheVNpemUobGVmdC0+
Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRl
cigpLT5zZXRBcnJheUluZm9ybWF0aW9uVHlwZShsZWZ0LT5nZXRUeXBlKCkuZ2V0QXJyYXlJbmZv
cm1hdGlvblR5cGUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGwgc2NhbGFycy4gIENv
ZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCisgICAgLy8K
KyAgICBpZiAoc2l6ZSA9PSAxKSB7CisKKyAgICAgICAgc3dpdGNoIChvcCkgeworCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIEVPcE5v
dEVxdWFsOgorICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAg
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEFuZCBhbmQgT3Igb3BlcmF0ZSBvbiBj
b25kaXRpb25hbHMKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxB
bmQ6CisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgICAgICBpZiAo
bGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBFdmVyeXRoaW5n
IGVsc2Ugc2hvdWxkIGhhdmUgbWF0Y2hpbmcgdHlwZXMKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAh
PSByaWdodC0+Z2V0QmFzaWNUeXBlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgbGVmdC0+aXNN
YXRyaXgoKSAgICAgIT0gcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vCisgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgIC8vCisgICAgaWYg
KCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSB8fAorICAgICAgICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmIHJp
Z2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vCisgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KKyAgICAvLwor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgICBpZiAo
IWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0
b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIHRydWUp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0
cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0
LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNW
ZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgp
ICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc01hdHJpeDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYg
IXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9y
KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUg
YXMgY29tcG9uZW50IHByb2R1Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlz
VmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2Vz
IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246CisgICAg
ICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ247CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJp
Z2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01h
dHJpeEFzc2lnbjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYg
IXJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9y
KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUg
YXMgY29tcG9uZW50IHByb2R1Y3QKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlz
VmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCEgbGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsK
KyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BBc3NpZ246CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFs
U2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIGZh
bGwgdGhyb3VnaAorICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgY2FzZSBFT3BTdWI6Cisg
ICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgorICAgICAgICAg
ICAgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkgfHwKKyAgICAgICAg
ICAgICAgICBsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpIHx8CisgICAgICAg
ICAgICAgICAgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
dHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJp
eCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcEVxdWFsOgorICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICBjYXNl
IEVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNl
IEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAg
ICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8Cisg
ICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAor
ICAgICAgICAgICAgICAgIGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5
cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LworICAgIC8vIE9uZSBtb3JlIGNoZWNrIGZvciBhc3NpZ25tZW50LiAgVGhlIFJlc3VsdGluZyB0
eXBlIGhhcyB0byBtYXRjaCB0aGUgbGVmdCBvcGVyYW5kLgorICAgIC8vCisgICAgc3dpdGNoIChv
cCkgeworICAgICAgICBjYXNlIEVPcEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXpl
OgorICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
CisgICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoK
KyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkgIT0gbGVmdC0+Z2V0VHlwZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ29tcGFyZVN0cnVjdChjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9u
KiByaWdodFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQoreworICAg
IFRUeXBlTGlzdCogZmllbGRzID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOworCisgICAgc2l6
ZV90IHN0cnVjdFNpemUgPSBmaWVsZHMtPnNpemUoKTsKKyAgICBpbnQgaW5kZXggPSAwOworCisg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzdHJ1Y3RTaXplOyBqKyspIHsKKyAgICAgICAgaW50
IHNpemUgPSAoKmZpZWxkcylbal0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtq
XS50eXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIUNvbXBhcmVTdHJ1Y3R1cmUoKigqZmllbGRzKVtqXS50eXBlLCAmcmlnaHRVbmlvbkFycmF5
W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnRVbmlvbkFycmF5W2luZGV4XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlv
biogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKK3sKKyAg
ICBpZiAobGVmdE5vZGVUeXBlLmlzQXJyYXkoKSkgeworICAgICAgICBUVHlwZSB0eXBlV2l0aG91
dEFycmF5bmVzcyA9IGxlZnROb2RlVHlwZTsKKyAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5lc3Mu
Y2xlYXJBcnJheW5lc3MoKTsKKworICAgICAgICBpbnQgYXJyYXlTaXplID0gbGVmdE5vZGVUeXBl
LmdldEFycmF5U2l6ZSgpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSB0eXBlV2l0aG91dEFycmF5bmVzcy5n
ZXRPYmplY3RTaXplKCkgKiBpOworICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0KHR5cGVX
aXRob3V0QXJyYXluZXNzLCAmcmlnaHRVbmlvbkFycmF5W29mZnNldF0sICZsZWZ0VW5pb25BcnJh
eVtvZmZzZXRdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIENvbXBhcmVTdHJ1Y3QobGVmdE5vZGVUeXBlLCByaWdo
dFVuaW9uQXJyYXksIGxlZnRVbmlvbkFycmF5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCisv
LworLy8gVGhlIGZvbGQgZnVuY3Rpb25zIHNlZSBpZiBhbiBvcGVyYXRpb24gb24gYSBjb25zdGFu
dCBjYW4gYmUgZG9uZSBpbiBwbGFjZSwKKy8vIHdpdGhvdXQgZ2VuZXJhdGluZyBydW4tdGltZSBj
b2RlLgorLy8KKy8vIFJldHVybnMgdGhlIG5vZGUgdG8ga2VlcCB1c2luZywgd2hpY2ggbWF5IG9y
IG1heSBub3QgYmUgdGhlIG5vZGUgcGFzc2VkIGluLgorLy8KKworVEludGVybVR5cGVkKiBUSW50
ZXJtQ29uc3RhbnRVbmlvbjo6Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3Rh
bnROb2RlLCBUSW5mb1NpbmsmIGluZm9TaW5rKQoreworICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBnZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgIGludCBvYmplY3RTaXplID0gZ2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJp
bmFyeSBvcGVyYXRpb25zCisgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29u
c3RhbnROb2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAq
cmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAg
VFR5cGUgcmV0dXJuVHlwZSA9IGdldFR5cGUoKTsKKworICAgICAgICAvLyBmb3IgYSBjYXNlIGxp
a2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7CisgICAgICAgIGlmIChjb25zdGFudE5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgewor
ICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6
ZV07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7ICsraSkKKyAg
ICAgICAgICAgICAgICByaWdodFVuaW9uQXJyYXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBv
YmplY3RTaXplID09IDEpIHsKKyAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBm
ID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKKyAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVu
aW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlw
ZSgpOworICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dE9iamVjdFNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBD
b25zdEFycmF5ID0gMDsKKyAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBOb2RlOwor
CisgICAgICAgIGJvb2wgYm9vbE5vZGVGbGFnID0gZmFsc2U7CisgICAgICAgIHN3aXRjaChvcCkg
eworICAgICAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFT3BTdWI6Cisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RT
aXplXTsKKyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVu
aW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIEVPcE11bDoKKyAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNTY2FsYXI6CisgICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07
CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFy
cmF5W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICAgICAgaWYgKGdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25l
IGZvciBtYXRyaXggbXVsdGlwbHkiLCBnZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltzaXplKnNpemVdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBzaXplOyByb3crKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1u
ID0gMDsgY29sdW1uIDwgc2l6ZTsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6
ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4g
KyByb3ddLmdldEZDb25zdCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0
KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wRGl2OgorICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICAg
ICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKyAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAi
RGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkp
OworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoRkxUX01B
WCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlv
bkFycmF5W2ldLmdldEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtp
XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5n
IiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KElOVF9NQVgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3Qo
KSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJl
IGRvbmUgZm9yIFwiL1wiIiwgZ2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUg
ZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3RvciIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOworCisgICAg
ICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYp
OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29u
c3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsg
aV0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRV
bmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICB0
ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRl
bXBOb2RlOworCisgICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1h
dHJpeCIsIGdldExpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFs
U2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0
RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5
W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlz
IHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBj
dXJyZW50bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtp
XSAmJiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRl
ZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJh
eVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsK
KyAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0g
PT0gcmlnaHRVbmlvbkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgICAgICBhc3NlcnQo
b2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29u
c3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAg
ICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU9wTGVz
c1RoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNv
bnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5z
ZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgICAgICBp
ZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtp
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxv
b3AKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBD
b25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAg
ICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKKworICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBl
KCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmln
aHRVbmlvbkFycmF5W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVG
bGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFr
IG91dCBvZiBmb3IgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICBpZiAoIWJvb2xO
b2RlRmxhZykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpKTsKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIkludmFsaWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHRlbXBOb2Rl
ID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsK
KyAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKworICAgICAgICByZXR1cm4g
dGVtcE5vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gdW5hcnkg
b3BlcmF0aW9ucworICAgICAgICAvLworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3
Tm9kZSA9IDA7CisgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
KTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkg
b3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
Tm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2ls
bCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdl
dEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBn
ZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24o
dGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CisgICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0
TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisgICAgfQorCisgICAgcmV0dXJuIHRo
aXM7Cit9CisKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5p
b24oVEJhc2ljVHlwZSBwcm9tb3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQorewor
ICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7CisgICAgaW50IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgp
OworCisgICAgQ29uc3RhbnRVbmlvbiAqbGVmdFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltzaXplXTsKKworICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgeworCisgICAgICAg
IHN3aXRjaCAocHJvbW90ZVRvKSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJy
YXlbaV0uZ2V0SUNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25B
cnJheVtpXS5nZXRCQ29uc3QoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCAiQ2Fubm90IHByb21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0
VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5p
b25BcnJheVtpXS5zZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0u
Z2V0QkNvbnN0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ld
LmdldEZDb25zdCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0
SUNvbnN0KCkgIT0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlb
aV0uZ2V0RkNvbnN0KCkgIT0gMC4wZik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3Rl
Iiwgbm9kZS0+Z2V0TGluZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsICJJbmNvcnJlY3QgZGF0YSB0eXBlIGZvdW5kIiwgbm9kZS0+Z2V0TGluZSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAg
Y29uc3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7CisKKyAgICByZXR1cm4gYWRkQ29uc3Rh
bnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigp
LCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5p
c0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOworfQorCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6
OmFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpCit7CisgICAgYXNz
ZXJ0KCFwcmFnbWFUYWJsZSk7CisgICAgcHJhZ21hVGFibGUgPSBuZXcgVFByYWdtYVRhYmxlKCk7
CisgICAgKnByYWdtYVRhYmxlID0gcFRhYmxlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L01NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfTU1BUF9JTkNMVURFRF8KKyNk
ZWZpbmUgX01NQVBfSU5DTFVERURfCisKKy8vCisvLyBFbmNhcHN1bGF0ZSBtZW1vcnkgbWFwcGVk
IGZpbGVzCisvLworCitjbGFzcyBUTU1hcCB7CitwdWJsaWM6CisgICAgVE1NYXAoY29uc3QgY2hh
ciogZmlsZU5hbWUpIDogCisgICAgICAgIGZTaXplKC0xKSwgLy8gLTEgaXMgdGhlIGVycm9yIHZh
bHVlIHJldHVybmVkIGJ5IEdldEZpbGVTaXplKCkKKyAgICAgICAgZnAoTlVMTCksCisgICAgICAg
IGZCdWZmKDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgTWFwVmlld09m
RmlsZSgpCisgICAgeworICAgICAgICBpZiAoKGZwID0gZm9wZW4oZmlsZU5hbWUsICJyIikpID09
IE5VTEwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNoYXIgYyA9IGdldGMoZnApOwor
ICAgICAgICBmU2l6ZSA9IDA7CisgICAgICAgIHdoaWxlIChjICE9IEVPRikgeworICAgICAgICAg
ICAgZlNpemUrKzsKKyAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYyA9PSBFT0YpCisgICAgICAgICAgICBmU2l6ZSsrOworICAgICAgICByZXdpbmQoZnAp
OworICAgICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogZlNpemUpOwor
ICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBjID0gZ2V0YyhmcCk7CisgICAgICAgIHdo
aWxlIChjICE9IEVPRikgeworICAgICAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBjOworICAgICAg
ICAgICAgYyA9IGdldGMoZnApOworICAgICAgICB9CisgICAgICAgIGZCdWZmW2NvdW50KytdID0g
YzsKKyAgICB9CisKKyAgICBjaGFyKiBnZXREYXRhKCkgeyByZXR1cm4gZkJ1ZmY7IH0KKyAgICBp
bnQgICBnZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KKworICAgIH5UTU1hcCgpIHsKKyAgICAg
ICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgICAgICBmY2xvc2UoZnApOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgaW50ICAgICAgICAgICAgIGZTaXplOyAgICAgIC8vIHNpemUgb2YgZmls
ZSB0byBtYXAgaW4KKyAgICBGSUxFICpmcDsKKyAgICBjaGFyKiAgICAgICAgICAgZkJ1ZmY7ICAg
ICAgLy8gdGhlIGFjdHVhbCBkYXRhOworfTsKKworI2VuZGlmIC8vIF9NTUFQX0lOQ0xVREVEXwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NzcgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKworbmFtZXNwYWNlCit7CitUU3RyaW5nIGdldFR5
cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lua0Jhc2Ugb3V0OworICAg
IGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQgPDwgIm1hdCI7CisgICAg
ICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5
cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8ICJ2ZWMiOyBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2ZWMiOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvdXQg
PDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgICAgICBvdXQg
PDwgdHlwZS5nZXRUeXBlTmFtZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gVFN0cmluZyhvdXQuY19z
dHIoKSk7Cit9CisKK1RTdHJpbmcgYXJyYXlCcmFja2V0cyhjb25zdCBUVHlwZSYgdHlwZSkKK3sK
KyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkpOworICAgIFRJbmZvU2lua0Jhc2Ugb3V0OworICAg
IG91dCA8PCAiWyIgPDwgdHlwZS5nZXRBcnJheVNpemUoKSA8PCAiXSI7CisgICAgcmV0dXJuIFRT
dHJpbmcob3V0LmNfc3RyKCkpOworfQorCitib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1O
b2RlKiBub2RlKSB7CisgICAgaWYgKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9
IG5vZGUtPmdldEFzQWdncmVnYXRlKCkpCisgICAgeworICAgICAgICByZXR1cm4gKGFnZ3JlZ2F0
ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlvbikgJiYKKyAgICAgICAgICAgICAgIChhZ2dyZWdhdGUt
PmdldE9wKCkgIT0gRU9wU2VxdWVuY2UpOworICAgIH0KKyAgICBlbHNlIGlmIChjb25zdCBUSW50
ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBub2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKSkKKyAg
ICB7CisgICAgICAgIC8vIFRlcm5hcnkgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IHBhcnQgb2YgYW4g
YXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRob3NlIHJhcmUg
Y2FzZXMgaW4gd2hpY2ggdGhleSBhcmUgYWxsIGJ5IHRoZW1zZWx2ZXMuCisgICAgICAgIHJldHVy
biBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
bm9kZS0+Z2V0QXNMb29wTm9kZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KK30gIC8vIG5hbWVzcGFjZQorCitUT3V0cHV0R0xTTDo6
VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKKyAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgICAgICBtT2JqU2luayhvYmpTaW5rKSwKKyAgICAgIG1E
ZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpCit7Cit9CisKK3ZvaWQgVE91dHB1dEdMU0w6OndyaXRl
VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0
ciwgY29uc3QgY2hhciogcG9zdFN0cikKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpT
aW5rKCk7CisgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIHByZVN0cikKKyAgICB7CisgICAg
ICAgIG91dCA8PCBwcmVTdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQg
JiYgaW5TdHIpCisgICAgeworICAgICAgICBvdXQgPDwgaW5TdHI7CisgICAgfQorICAgIGVsc2Ug
aWYgKHZpc2l0ID09IFBvc3RWaXNpdCAmJiBwb3N0U3RyKQorICAgIHsKKyAgICAgICAgb3V0IDw8
IHBvc3RTdHI7CisgICAgfQorfQorCit2b2lkIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlVHlw
ZShjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOworICAg
IC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xhcmF0
aW9ucy4KKyAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIg
IT0gRXZxR2xvYmFsKSkKKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
PDwgIiAiOworCisgICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlmIHdlIGhhdmUgbm90IGRvbmUg
c28gYWxyZWFkeS4KKyAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSAm
JgorICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlwZU5hbWUoKSkgPT0g
bURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCisgICAgeworICAgICAgICBvdXQgPDwgInN0cnVjdCAi
IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgY29uc3QgVFR5cGVMaXN0
KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJl
ICE9IE5VTEwpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6
ZSgpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUg
PSAoKnN0cnVjdHVyZSlbaV0udHlwZTsKKyAgICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0g
TlVMTCk7CisgICAgICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUoKmZpZWxkVHlwZSkgPDwgIiAi
IDw8IGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICBpZiAoZmllbGRUeXBl
LT5pc0FycmF5KCkpCisgICAgICAgICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMoKmZpZWxk
VHlwZSk7CisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgIH0KKyAgICAgICAgb3V0
IDw8ICJ9IjsKKyAgICAgICAgbURlY2xhcmVkU3RydWN0cy5pbnNlcnQodHlwZS5nZXRUeXBlTmFt
ZSgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1l
KHR5cGUpOworICAgIH0KK30KKwordm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKQoreworICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGFyZ3MuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytp
dGVyKQorICAgIHsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIEFTU0VSVChhcmcgIT0gTlVMTCk7CisKKyAgICAg
ICAgY29uc3QgVFR5cGUmIHR5cGUgPSBhcmctPmdldFR5cGUoKTsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOworICAgICAgICAvLyBUT0RPKGFsb2tw
KTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciBmdW5jdGlvbiBhcmd1bWVudHMuCisgICAgICAgIGlm
ICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwp
KQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiOwor
CisgICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKTsKKworICAgICAgICBjb25zdCBUU3Ry
aW5nJiBuYW1lID0gYXJnLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkp
CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IG5hbWU7CisgICAgICAgIGlmICh0eXBlLmlzQXJy
YXkoKSkKKyAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUpOworCisgICAgICAg
IC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMgaXMgbm90IHRoZSBsYXN0IGFyZ3VtZW50LgorICAgICAg
ICBpZiAoaXRlciAhPSAtLWFyZ3MuZW5kKCkpCisgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICB9Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMOjp3cml0ZUNvbnN0YW50
VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24qIHBDb25zdFVuaW9uKQor
eworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKworICAgIGlmICh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG91dCA8PCB0eXBlLmdl
dFR5cGVOYW1lKCkgPDwgIigiOworICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJl
KVtpXS50eXBlOworICAgICAgICAgICAgQVNTRVJUKGZpZWxkVHlwZSAhPSBOVUxMKTsKKyAgICAg
ICAgICAgIHBDb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIHBDb25z
dFVuaW9uKTsKKyAgICAgICAgICAgIGlmIChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkgb3V0
IDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAg
ICAgYm9vbCB3cml0ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0
IDw8IGdldFR5cGVOYW1lKHR5cGUpIDw8ICIoIjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyArK2ksICsrcENvbnN0VW5pb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAocENvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldEZDb25zdCgpOyBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEVidEludDogb3V0IDw8IHBDb25zdFVuaW9uLT5nZXRJQ29u
c3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiBvdXQgPDwgcENvbnN0
VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEp
IG91dCA8PCAiLCAiOworICAgICAgICB9CisgICAgICAgIGlmICh3cml0ZVR5cGUpIG91dCA8PCAi
KSI7CisgICAgfQorICAgIHJldHVybiBwQ29uc3RVbmlvbjsKK30KKwordm9pZCBUT3V0cHV0R0xT
TDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
JiBvdXQgPSBvYmpTaW5rKCk7CisgICAgb3V0IDw8IG5vZGUtPmdldFN5bWJvbCgpOworCisgICAg
aWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkKKyAg
ICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKK30KKwordm9pZCBU
T3V0cHV0R0xTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2Rl
KQoreworICAgIHdyaXRlQ29uc3RhbnRVbmlvbihub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKCkpOworfQorCitib29sIFRPdXRwdXRHTFNMOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK3sKKyAgICBib29sIHZpc2l0Q2hpbGRy
ZW4gPSB0cnVlOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IG9ialNpbmsoKTsKKyAgICBzd2l0
Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Cisg
ICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAgICAgICAgICAgICAgLy8gUkhTIG9mIGluaXRpYWxp
emUgaXMgbm90IGJlaW5nIGRlY2xhcmVkLgorICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigi
LCAiICs9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
RGl2QXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCisgICAgICAgIGNhc2UgRU9wTXVs
QXNzaWduOiAKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAg
ICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICB3cml0ZVRyaXBsZXQodmlz
aXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIjsKKyAgICAgICAgICAgICAg
ICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCisgICAgICAgICAgICAgICAgb3V0IDw8IG5vZGUtPmdl
dFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BWZWN0b3JTd2l6emxlOgorICAgICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIjsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiByaWdodENoaWxkID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gcmln
aHRDaGlsZC0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1
ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVu
ZCgpOyArK3NpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBlbGVtZW50ID0gKCpzaXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldEJhc2ljVHlwZSgpID09IEVi
dEludCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5nZXROb21pbmFsU2l6
ZSgpID09IDEpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25zdGFudFVuaW9uJiBkYXRh
ID0gZWxlbWVudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGRhdGEuZ2V0VHlwZSgpID09IEVidEludCk7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoZGF0YS5nZXRJQ29uc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAwOiBvdXQgPDwgIngiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQWRkOiB3
cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiArICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFN1Yjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAv
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcE1vZDogVU5JTVBMRU1FTlRFRCgpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIg
PT0gIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgIigiLCAiICE9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NU
aGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA8ICIsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2
aXNpdCwgIigiLCAiIDw9ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJU
aGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7IGJyZWFrOwor
CisgICAgICAgIC8vIE5vdGljZSB0aGUgZmFsbC10aHJvdWdoLgorICAgICAgICBjYXNlIEVPcFZl
Y3RvclRpbWVzU2NhbGFyOgorICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAg
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRp
bWVzU2NhbGFyOgorICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAg
ICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigi
LCAiIHx8ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHdyaXRl
VHJpcGxldCh2aXNpdCwgIigiLCAiIF5eICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cExvZ2ljYWxBbmQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICYmICIsICIpIik7IGJyZWFr
OworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UmIG91
dCA9IG9ialNpbmsoKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAg
ICAgIGNhc2UgRU9wTmVnYXRpdmU6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigtIiwgTlVMTCwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAibm90KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2lj
YWxOb3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgIighIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgTlVM
TCwgIisrKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiB3cml0ZVRy
aXBsZXQodmlzaXQsICIoIiwgTlVMTCwgIi0tKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQ
cmVJbmNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigrKyIsIE5VTEwsICIpIik7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKC0t
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOgor
ICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJvb2woIiwg
TlVMTCwgIikiKTsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiYnZlYzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsIE5VTEws
ICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252Qm9v
bFRvRmxvYXQ6CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJmbG9hdCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB3
cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjMygiLCBOVUxMLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzQo
IiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZGbG9hdFRvSW50OgorICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXpl
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJpbnQoIiwgTlVMTCwgIikiKTsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMygiLCBOVUxMLCAi
KSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Iml2ZWM0KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcFJhZGlhbnM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGVncmVlczogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiZGVncmVlcygiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaW46IHdy
aXRlVHJpcGxldCh2aXNpdCwgInNpbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb3M6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvcygiLCBOVUxMLCAiKSIpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BUYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgInRhbigiLCBOVUxMLCAi
KSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBc2luOiB3cml0ZVRyaXBsZXQodmlzaXQsICJh
c2luKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFjb3M6IHdyaXRlVHJp
cGxldCh2aXNpdCwgImFjb3MoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QXRhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCBOVUxMLCAiKSIpOyBicmVhazsKKwor
ICAgICAgICBjYXNlIEVPcEV4cDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwKCIsIE5VTEwsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibG9n
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEV4cDI6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImV4cDIoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9n
Mjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibG9nMigiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BTcXJ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJzcXJ0KCIsIE5VTEwsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJpbnZlcnNlc3FydCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFi
czogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWJzKCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFNpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgInNpZ24oIiwgTlVMTCwgIikiKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxvb3I6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb29y
KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENlaWw6IHdyaXRlVHJpcGxl
dCh2aXNpdCwgImNlaWwoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRnJh
Y3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZyYWN0KCIsIE5VTEwsICIpIik7IGJyZWFrOworCisg
ICAgICAgIGNhc2UgRU9wTGVuZ3RoOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgTlVM
TCwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJub3JtYWxpemUoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBF
T3BBbnk6IHdyaXRlVHJpcGxldCh2aXNpdCwgImFueSgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImFsbCgiLCBOVUxMLCAiKSIp
OyBicmVhazsKKworICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpCit7CisgICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOworCisgICAgaWYgKG5vZGUtPnVzZXNUZXJuYXJ5T3BlcmF0
b3IoKSkKKyAgICB7CisgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRp
dGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIpID8gKCI7CisgICAgICAg
IG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIp
IDogKCI7CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG91dCA8PCAiKSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG91dCA8
PCAiaWYgKCI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgb3V0IDw8ICIpXG4iOworCisgICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAg
ICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldFRydWVCbG9jaygpKTsKKworICAgICAgICBpZiAo
bm9kZS0+Z2V0RmFsc2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImVs
c2VcbiI7CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRGYWxzZUJsb2NrKCkp
OworICAgICAgICB9CisgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCit7CisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0g
dHJ1ZTsKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogeworICAgICAg
ICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNlcHQgd2hlbiBhdCB0aGUgZ2xvYmFsIHNj
b3BlLgorICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkgb3V0IDw8ICJ7XG4iOworCisgICAgICAg
ICAgICBpbmNyZW1lbnREZXB0aCgpOworICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNl
JiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7CisgICAg
ICAgICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlICE9IE5VTEwpOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZl
cnNlKHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xlU3RhdGVtZW50KG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWNyZW1lbnREZXB0aCgpOworCisgICAgICAgICAgICAvLyBTY29wZSB0aGUgc2Vx
dWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAo
ZGVwdGggPiAwKSBvdXQgPDwgIn1cbiI7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVPcFByb3Rv
dHlwZTogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgICAgICAg
ICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgVFN0cmluZyByZXR1cm5U
eXBlID0gZ2V0VHlwZU5hbWUobm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCBy
ZXR1cm5UeXBlIDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7CisKKyAgICAgICAgICAgIG91dCA8
PCAiKCI7CisgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVycyhub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiKSI7CisKKyAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgRU9wRnVuY3Rpb246IHsKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24uCisg
ICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOworICAgICAgICAgICAgVFN0cmlu
ZyByZXR1cm5UeXBlID0gZ2V0VHlwZU5hbWUobm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAg
IFRTdHJpbmcgZnVuY3Rpb25OYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0
TmFtZSgpKTsKKyAgICAgICAgICAgIG91dCA8PCByZXR1cm5UeXBlIDw8ICIgIiA8PCBmdW5jdGlv
bk5hbWU7CisKKyAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7CisgICAgICAgICAgICAvLyBG
dW5jdGlvbiBkZWZpbml0aW9uIG5vZGUgY29udGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2Rl
cworICAgICAgICAgICAgLy8gcmVwcmVzZW50aW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGZ1
bmN0aW9uIGJvZHkuIFRoZSBsYXR0ZXIKKyAgICAgICAgICAgIC8vIGlzIG5vdCBwcmVzZW50IGlu
IGNhc2Ugb2YgZW1wdHkgZnVuY3Rpb24gYm9kaWVzLgorICAgICAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBB
U1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVuY2Uuc2l6ZSgpID09IDIpKTsK
KyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3Igc2VxSXRlciA9IHNl
cXVlbmNlLmJlZ2luKCk7CisKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGZ1bmN0aW9uIHBhcmFt
ZXRlcnMuCisgICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbXMgPSAoKnNlcUl0ZXIp
LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtcyAhPSBOVUxMKTsK
KyAgICAgICAgICAgIEFTU0VSVChwYXJhbXMtPmdldE9wKCkgPT0gRU9wUGFyYW1ldGVycyk7Cisg
ICAgICAgICAgICBwYXJhbXMtPnRyYXZlcnNlKHRoaXMpOworCisgICAgICAgICAgICAvLyBUcmF2
ZXJzZSBmdW5jdGlvbiBib2R5LgorICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogYm9keSA9
ICsrc2VxSXRlciAhPSBzZXF1ZW5jZS5lbmQoKSA/CisgICAgICAgICAgICAgICAgKCpzZXFJdGVy
KS0+Z2V0QXNBZ2dyZWdhdGUoKSA6IE5VTEw7CisgICAgICAgICAgICB2aXNpdENvZGVCbG9jayhi
b2R5KTsKKyAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7CisgCisgICAgICAgICAgICAvLyBG
dWxseSBwcm9jZXNzZWQ7IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGNhbGwu
CisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFt
ZShub2RlLT5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCBmdW5jdGlvbk5hbWUg
PDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5W
aXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wUGFyYW1ldGVyczogeworICAgICAgICAgICAgLy8gRnVuY3Rpb24gcGFyYW1ldGVy
cy4KKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CisgICAgICAgICAgICBv
dXQgPDwgIigiOworICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0
U2VxdWVuY2UoKSk7CisgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbiA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICAgICAgLy8gVmFyaWFibGUgZGVjbGFyYXRp
b24uCisgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiB2YXJpYWJs
ZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAgICB3cml0
ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiAiOworICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgICAgICBt
RGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJmbG9hdCgi
LCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzMoIiwgIiwgIiwgIiki
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5VTEwsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVj
MigiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdDIo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0Mzogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXQ0KCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDoKKyAgICAgICAgICAg
IGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgICAgICAgICAgICAgIG91
dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogd3JpdGVUcmlwbGV0
KHZpc2l0LCAibGVzc1RoYW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImdyZWF0ZXJUaGFuKCIsICIsICIsICIp
Iik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImxlc3NUaGFuRXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZ3JlYXRlclRoYW5FcXVh
bCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiZXF1YWwoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wVmVjdG9yTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vdEVxdWFsKCIsICIs
ICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbW1hOiB3cml0ZVRyaXBsZXQodmlz
aXQsIE5VTEwsICIsICIsIE5VTEwpOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcE1vZDogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7IGJyZWFrOworICAgICAgICBjYXNl
IEVPcFBvdzogd3JpdGVUcmlwbGV0KHZpc2l0LCAicG93KCIsICIsICIsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEF0YW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImF0YW4oIiwgIiwgIiwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWluOiB3cml0ZVRyaXBsZXQodmlzaXQsICJt
aW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF4OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ2xh
bXA6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIsICIpIik7IGJyZWFrOworICAg
ICAgICBjYXNlIEVPcE1peDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWl4KCIsICIsICIsICIpIik7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFN0ZXA6IHdyaXRlVHJpcGxldCh2aXNpdCwgInN0ZXAo
IiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKworICAgICAg
ICBjYXNlIEVPcERpc3RhbmNlOiB3cml0ZVRyaXBsZXQodmlzaXQsICJkaXN0YW5jZSgiLCAiLCAi
LCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEb3Q6IHdyaXRlVHJpcGxldCh2aXNpdCwg
ImRvdCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRmFjZUZvcndhcmQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZhY2Vmb3J3YXJkKCIsICIsICIs
ICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6IHdyaXRlVHJpcGxldCh2aXNp
dCwgInJlZmxlY3QoIiwgIiwgIiwgIikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFj
dDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVmcmFjdCgiLCAiLCAiLCAiKSIpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm1hdHJpeENvbXBNdWx0KCIs
ICIsICIsICIpIik7IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsKK30KKworYm9vbCBUT3V0cHV0
R0xTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBU
SW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7CisKKyAgICBpbmNyZW1lbnREZXB0aCgpOwor
ICAgIC8vIExvb3AgaGVhZGVyLgorICAgIGlmIChub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIGZvciBs
b29wCisgICAgeworICAgICAgICBvdXQgPDwgImZvciAoIjsKKyAgICAgICAgaWYgKG5vZGUtPmdl
dEluaXQoKSkKKyAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG91dCA8PCAiOyAiOworCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRUZXN0KCkgIT0g
TlVMTCk7CisgICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG91dCA8PCAiOyAiOworCisgICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAg
ICAgICAgbm9kZS0+Z2V0VGVybWluYWwoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8
PCAiKVxuIjsKKyAgICB9CisgICAgZWxzZSAgLy8gZG8td2hpbGUgbG9vcAorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICJkb1xuIjsKKyAgICB9CisKKyAgICAvLyBMb29wIGJvZHkuCisgICAgdmlzaXRD
b2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKKworICAgIC8vIExvb3AgZm9vdGVyLgorICAgIGlm
ICghbm9kZS0+dGVzdEZpcnN0KCkpICAvLyB3aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQg
PDwgIndoaWxlICgiOworICAgICAgICBBU1NFUlQobm9kZS0+Z2V0VGVzdCgpICE9IE5VTEwpOwor
ICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwg
Iik7XG4iOworICAgIH0KKyAgICBkZWNyZW1lbnREZXB0aCgpOworCisgICAgLy8gTm8gbmVlZCB0
byB2aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZlIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQgaW4KKyAg
ICAvLyB0aGlzIGZ1bmN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0
R0xTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCit7Cisg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygpOworCisgICAgc3dpdGNoIChub2RlLT5n
ZXRGbG93T3AoKSkKKyAgICB7CisgICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiZGlzY2FyZCIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVh
azogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29udGludWU6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVM
TCwgTlVMTCk7IGJyZWFrOworICAgICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAicmV0dXJuICIsIE5VTEwsIE5VTEwpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
VE91dHB1dEdMU0w6OnZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKSB7CisgICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gb2JqU2luaygpOworICAgIGlmIChub2RlICE9IE5VTEwpCisgICAg
eworICAgICAgICBub2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgLy8gU2luZ2xlIHN0YXRl
bWVudHMgbm90IHBhcnQgb2YgYSBzZXF1ZW5jZSBuZWVkIHRvIGJlIHRlcm1pbmF0ZWQKKyAgICAg
ICAgLy8gd2l0aCBzZW1pLWNvbG9uLgorICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9k
ZSkpCisgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG91dCA8PCAie1xufVxuIjsgIC8vIEVtcHR5IGNvZGUgYmxvY2suCisgICAgfQorfQpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEdMU0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCisj
ZGVmaW5lIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KKworI2luY2x1ZGUgPHNldD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1BhcnNlSGVscGVyLmgiCisKK2NsYXNzIFRPdXRwdXRHTFNMIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5r
KTsKKworcHJvdGVjdGVkOgorICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBt
T2JqU2luazsgfQorICAgIHZvaWQgd3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFy
KiBwcmVTdHIsIGNvbnN0IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKTsKKyAgICB2
b2lkIHdyaXRlVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKTsKKyAgICB2b2lkIHdyaXRl
RnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7CisgICAgY29u
c3QgQ29uc3RhbnRVbmlvbiogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBj
b25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7CisgICAgdmlydHVhbCBib29s
IHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSogbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSk7CisKKyAgICB2b2lkIHZpc2l0Q29k
ZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKTsKKworcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNl
JiBtT2JqU2luazsKKyAgICBib29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7CisKKyAgICAvLyBTdHJ1
Y3RzIGFyZSBkZWNsYXJlZCBhcyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRh
aW5zIGFsbAorICAgIC8vIHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50
YWluZWQgc28gdGhhdCBhIHN0cnVjdCBpcworICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KKyAg
ICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKKyAgICBEZWNsYXJl
ZFN0cnVjdHMgbURlY2xhcmVkU3RydWN0czsKK307CisKKyNlbmRpZiAgLy8gQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMTYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29t
cGlsZXIvT3V0cHV0SExTTC5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKKyNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVz
cGFjZSBzaAoreworLy8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KK1RTdHJpbmcgc3Ry
KGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVk
IiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworT3V0cHV0SExTTDo6T3V0cHV0SExTTChU
UGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1
ZSksIG1Db250ZXh0KGNvbnRleHQpCit7CisgICAgbVVuZm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRT
ZWxlY3QoY29udGV4dCwgdGhpcyk7CisgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CisKKyAg
ICBtVXNlc1RleHR1cmUyRCA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxz
ZTsKKyAgICBtVXNlc1RleHR1cmUyRFByb2ogPSBmYWxzZTsKKyAgICBtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcyA9IGZhbHNlOworICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKKyAgICBtVXNl
c1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKKyAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsK
KyAgICBtVXNlc0ZyYWdDb29yZCA9IGZhbHNlOworICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNl
OworICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKKyAgICBtVXNlc1BvaW50U2l6ZSA9IGZh
bHNlOworICAgIG1Vc2VzWG9yID0gZmFsc2U7CisgICAgbVVzZXNNb2QxID0gZmFsc2U7CisgICAg
bVVzZXNNb2QyID0gZmFsc2U7CisgICAgbVVzZXNNb2QzID0gZmFsc2U7CisgICAgbVVzZXNNb2Q0
ID0gZmFsc2U7CisgICAgbVVzZXNGYWNlZm9yd2FyZDEgPSBmYWxzZTsKKyAgICBtVXNlc0ZhY2Vm
b3J3YXJkMiA9IGZhbHNlOworICAgIG1Vc2VzRmFjZWZvcndhcmQzID0gZmFsc2U7CisgICAgbVVz
ZXNGYWNlZm9yd2FyZDQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsTWF0MiA9IGZhbHNlOworICAg
IG1Vc2VzRXF1YWxNYXQzID0gZmFsc2U7CisgICAgbVVzZXNFcXVhbE1hdDQgPSBmYWxzZTsKKyAg
ICBtVXNlc0VxdWFsVmVjMiA9IGZhbHNlOworICAgIG1Vc2VzRXF1YWxWZWMzID0gZmFsc2U7Cisg
ICAgbVVzZXNFcXVhbFZlYzQgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsSVZlYzIgPSBmYWxzZTsK
KyAgICBtVXNlc0VxdWFsSVZlYzMgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsSVZlYzQgPSBmYWxz
ZTsKKyAgICBtVXNlc0VxdWFsQlZlYzIgPSBmYWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzMgPSBm
YWxzZTsKKyAgICBtVXNlc0VxdWFsQlZlYzQgPSBmYWxzZTsKKyAgICBtVXNlc0F0YW4yID0gZmFs
c2U7CisKKyAgICBtU2NvcGVEZXB0aCA9IDA7CisKKyAgICBtQXJndW1lbnRJbmRleCA9IDA7Cit9
CisKK091dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKK3sKKyAgICBkZWxldGUgbVVuZm9sZFNlbGVj
dDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQoreworICAgIG1Db250ZXh0LnRyZWVS
b290LT50cmF2ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJt
aW5lIHdoYXQgaGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKKyAgICBoZWFkZXIoKTsKKworICAgIG1D
b250ZXh0LmluZm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7CisgICAgbUNvbnRleHQuaW5m
b1Npbmsub2JqIDw8IG1Cb2R5LmNfc3RyKCk7Cit9CisKK1RJbmZvU2lua0Jhc2UgJk91dHB1dEhM
U0w6OmdldEJvZHlTdHJlYW0oKQoreworICAgIHJldHVybiBtQm9keTsKK30KKworaW50IE91dHB1
dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0Cit7CisgICAgaW50IGVs
ZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXROb21pbmFsU2l6ZSgpIDogMTsK
KyAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgp
IDogMTsKKworICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKK30KKwordm9pZCBP
dXRwdXRITFNMOjpoZWFkZXIoKQoreworICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlID0gbUNvbnRl
eHQubGFuZ3VhZ2U7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKKworICAgIGZv
ciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1
Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xh
cmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKKyAgICB7CisgICAgICAgIG91dCA8
PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgfQorCisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0
ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAh
PSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0
IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAgICBpZiAobGFuZ3VhZ2UgPT0gRVNoTGFuZ0Zy
YWdtZW50KQorICAgIHsKKyAgICAgICAgVFN0cmluZyB1bmlmb3JtczsKKyAgICAgICAgVFN0cmlu
ZyB2YXJ5aW5nczsKKworICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250
ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7CisgICAgICAgIGludCBzZW1hbnRpY0lu
ZGV4ID0gMDsKKworICAgICAgICBmb3IgKFRTeW1ib2xUYWJsZUxldmVsOjpjb25zdF9pdGVyYXRv
ciBuYW1lZFN5bWJvbCA9IHN5bWJvbHMtPmJlZ2luKCk7IG5hbWVkU3ltYm9sICE9IHN5bWJvbHMt
PmVuZCgpOyBuYW1lZFN5bWJvbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3lt
Ym9sICpzeW1ib2wgPSAoKm5hbWVkU3ltYm9sKS5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBU
U3RyaW5nICZuYW1lID0gc3ltYm9sLT5nZXROYW1lKCk7CisKKyAgICAgICAgICAgIGlmIChzeW1i
b2wtPmlzVmFyaWFibGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
VmFyaWFibGUgKnZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9s
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcmlhYmxlLT5nZXRUeXBl
KCk7CisgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxp
ZmllcigpOworCisgICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVW5p
Zm9ybXMuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zICs9
ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBh
cnJheVN0cmluZyh0eXBlKSArICI7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFZhcnlpbmdzLmZpbmQo
bmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVw
ZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Z3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUp
ICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gdHlwZS5pc0FycmF5
KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
R2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXpl
ZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAvLyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdo
ZXJlIHVzZWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIvLyBW
YXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8ICJc
biIKKyAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWzFdID0ge2Zsb2F0NCgw
LCAwLCAwLCAwKX07XG4iOworCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0
NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNQb2ludENv
b3JkKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9p
bnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1Vc2VzRnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGlj
IGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBv
dXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfV2luZG93O1xuIgorICAgICAgICAg
ICAgICAgICAgICJ1bmlmb3JtIGZsb2F0MiBkeF9EZXB0aDtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICJ1bmlmb3JtIGJvb2wgZHhfUG9pbnRzT3JMaW5lcztcbiIKKyAgICAgICAgICAgICAgICAgICAi
dW5pZm9ybSBib29sIGR4X0Zyb250Q0NXO1xuIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgb3V0IDw8ICJcbiI7CisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8
PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEKHMsIHQpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1cmUyRF9i
aWFzKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQo
c2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0
NCh0LngsIHQueSwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRFByb2opCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgdC56KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQ
cm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0KTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0
MyB0LCBmbG9hdCBiaWFzKVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAv
IHQueiwgMCwgYmlhcykpO1xuIgorICAgICAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCisgICAgICAgICAgICAgICAg
ICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxv
YXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn1cbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZUN1YmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgorICAgICAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShz
LCB0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZV9iaWFzKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKKyAgICAgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0
LngsIHQueSwgdC56LCBiaWFzKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgICAvLyBWZXJ0
ZXggc2hhZGVyCisgICAgeworICAgICAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgICAgICBUU3Ry
aW5nIGF0dHJpYnV0ZXM7CisgICAgICAgIFRTdHJpbmcgdmFyeWluZ3M7CisKKyAgICAgICAgVFN5
bWJvbFRhYmxlTGV2ZWwgKnN5bWJvbHMgPSBtQ29udGV4dC5zeW1ib2xUYWJsZS5nZXRHbG9iYWxM
ZXZlbCgpOworCisgICAgICAgIGZvciAoVFN5bWJvbFRhYmxlTGV2ZWw6OmNvbnN0X2l0ZXJhdG9y
IG5hbWVkU3ltYm9sID0gc3ltYm9scy0+YmVnaW4oKTsgbmFtZWRTeW1ib2wgIT0gc3ltYm9scy0+
ZW5kKCk7IG5hbWVkU3ltYm9sKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1i
b2wgKnN5bWJvbCA9ICgqbmFtZWRTeW1ib2wpLnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldE5hbWUoKTsKKworICAgICAgICAgICAgaWYgKHN5bWJv
bC0+aXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRW
YXJpYWJsZSAqdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wp
OworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyaWFibGUtPmdldFR5cGUo
KTsKKyAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHR5cGUuZ2V0UXVhbGlm
aWVyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobVJlZmVyZW5jZWRVbmlm
b3Jtcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMgKz0g
InVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIjtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJp
YnV0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJl
bmNlZEF0dHJpYnV0ZXMuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkQXR0cmlidXRl
cy5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3Jh
dGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkg
KyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZp
ZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFZhcnlpbmdzLmZpbmQobmFtZS5jX3N0cigpKSAh
PSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4
YWN0IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAi
ICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmco
dHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVh
bGlmaWVyID09IEV2cUdsb2JhbCB8fCBxdWFsaWZpZXIgPT0gRXZxVGVtcG9yYXJ5KQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR2xvYmFscyBhcmUgZGVjbGFyZWQg
YW5kIGludGlhbGl6ZWQgYXMgYW4gYWdncmVnYXRlIG5vZGUKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RhbnRzIGFyZSByZXBlYXRlZCBh
cyBsaXRlcmFscyB3aGVyZSB1c2VkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG91dCA8PCAiLy8gQXR0cmlidXRlc1xuIjsKKyAgICAgICAgb3V0IDw8ICBhdHRyaWJ1dGVzOwor
ICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfUG9z
aXRpb24gPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4iOworICAgICAgICAKKyAgICAgICAgaWYgKG1V
c2VzUG9pbnRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9h
dCBnbF9Qb2ludFNpemUgPSBmbG9hdCgxKTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBvdXQg
PDwgIlxuIgorICAgICAgICAgICAgICAgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwg
IHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgInVuaWZvcm0g
ZmxvYXQyIGR4X0hhbGZQaXhlbFNpemU7XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICBvdXQgPDwgIHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICB9CisKKyAgICBp
ZiAobVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNF
U19GUkFHX0NPT1JEXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9DT09SRFxuIjsKKyAgICB9
CisKKyAgICBpZiAobVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2Rl
ZmluZSBHTF9VU0VTX0ZST05UX0ZBQ0lOR1xuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNQb2lu
dFNpemUpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgR0xfVVNFU19QT0lOVF9TSVpF
XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgeworICAgICAgICBv
dXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgZmxvYXQgbmVhcjtcbiIKKyAgICAgICAgICAgICAg
ICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkaWZmO1xuIgor
ICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlO1xuIgorICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNYb3IpCisgICAgeworICAg
ICAgICBvdXQgPDwgImJvb2wgeG9yKGJvb2wgcCwgYm9vbCBxKVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIChwIHx8IHEpICYmICEocCAmJiBxKTtc
biIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKwor
ICAgIGlmIChtVXNlc01vZDEpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IG1vZChmbG9h
dCB4LCBmbG9hdCB5KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CisgICAgfQorICAgIAorICAgIGlmIChtVXNlc01vZDIpCisg
ICAgeworICAgICAgICBvdXQgPDwgImZsb2F0MiBtb2QoZmxvYXQyIHgsIGZsb2F0IHkpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICByZXR1cm4geCAtIHkgKiBm
bG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxu
IjsKKyAgICB9CisgICAgCisgICAgaWYgKG1Vc2VzTW9kMykKKyAgICB7CisgICAgICAgIG91dCA8
PCAiZmxvYXQzIG1vZChmbG9hdDMgeCwgZmxvYXQgeSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4i
CisgICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHggLyB5KTtcbiIKKyAg
ICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlm
IChtVXNlc01vZDQpCisgICAgeworICAgICAgICBvdXQgPDwgImZsb2F0NCBtb2QoZmxvYXQ0IHgs
IGZsb2F0IHkpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNGYWNlZm9yd2FyZDEpCisg
ICAgeworICAgICAgICBvdXQgPDwgImZsb2F0IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0IEks
IGZsb2F0IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAg
ICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAg
ICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9
XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xu
IgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAi
ICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAg
IH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
ZmxvYXQyIGZhY2Vmb3J3YXJkKGZsb2F0MiBOLCBmbG9hdDIgSSwgZmxvYXQyIE5yZWYpXG4iCisg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkg
Pj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAg
ICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAg
ICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAg
IiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAg
ICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNl
c0ZhY2Vmb3J3YXJkMykKKyAgICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQzIGZhY2Vmb3J3YXJk
KGZsb2F0MyBOLCBmbG9hdDMgSSwgZmxvYXQzIE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xu
IgorICAgICAgICAgICAgICAgIiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAg
ICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgor
ICAgICAgICAgICAgICAgIiAgICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAg
ICAgICAgICAgICAgICIgICAge1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47
XG4iCisgICAgICAgICAgICAgICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAg
ICAgICAgICAgICAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkNCkKKyAg
ICB7CisgICAgICAgIG91dCA8PCAiZmxvYXQ0IGZhY2Vmb3J3YXJkKGZsb2F0NCBOLCBmbG9hdDQg
SSwgZmxvYXQ0IE5yZWYpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAg
IiAgICBpZihkb3QoTnJlZiwgSSkgPj0gMClcbiIKKyAgICAgICAgICAgICAgICIgICAge1xuIgor
ICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIC1OO1xuIgorICAgICAgICAgICAgICAgIiAg
ICB9XG4iCisgICAgICAgICAgICAgICAiICAgIGVsc2VcbiIKKyAgICAgICAgICAgICAgICIgICAg
e1xuIgorICAgICAgICAgICAgICAgIiAgICAgICAgcmV0dXJuIE47XG4iCisgICAgICAgICAgICAg
ICAiICAgIH1cbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsTWF0MikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Ym9vbCBlcXVhbChmbG9hdDJ4MiBtLCBmbG9hdDJ4MiBuKVxuIgorICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBd
WzFdID09IG5bMF1bMV0gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAgIG1bMV1bMF0g
PT0gblsxXVswXSAmJiBtWzFdWzFdID09IG5bMV1bMV07XG4iCisgICAgICAgICAgICAgICAifVxu
IjsKKyAgICB9CisKKyAgICBpZiAobVVzZXNFcXVhbE1hdDMpCisgICAgeworICAgICAgICBvdXQg
PDwgImJvb2wgZXF1YWwoZmxvYXQzeDMgbSwgZmxvYXQzeDMgbilcbiIKKyAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBtWzBdWzBdID09IG5bMF1bMF0gJiYg
bVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0gblswXVsyXSAmJlxuIgorICAgICAgICAg
ICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFdWzBdICYmIG1bMV1bMV0gPT0gblsxXVsx
XSAmJiBtWzFdWzJdID09IG5bMV1bMl0gJiZcbiIKKyAgICAgICAgICAgICAgICIgICAgICAgICAg
IG1bMl1bMF0gPT0gblsyXVswXSAmJiBtWzJdWzFdID09IG5bMl1bMV0gJiYgbVsyXVsyXSA9PSBu
WzJdWzJdO1xuIgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2Vz
RXF1YWxNYXQ0KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0NHg0IG0s
IGZsb2F0NHg0IG4pXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gbVswXVswXSA9PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0gblswXVsxXSAmJiBtWzBd
WzJdID09IG5bMF1bMl0gJiYgbVswXVszXSA9PSBuWzBdWzNdICYmXG4iCisgICAgICAgICAgICAg
ICAiICAgICAgICAgICBtWzFdWzBdID09IG5bMV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYm
IG1bMV1bMl0gPT0gblsxXVsyXSAmJiBtWzFdWzNdID09IG5bMV1bM10gJiZcbiIKKyAgICAgICAg
ICAgICAgICIgICAgICAgICAgIG1bMl1bMF0gPT0gblsyXVswXSAmJiBtWzJdWzFdID09IG5bMl1b
MV0gJiYgbVsyXVsyXSA9PSBuWzJdWzJdICYmIG1bMl1bM10gPT0gblsyXVszXSAmJlxuIgorICAg
ICAgICAgICAgICAgIiAgICAgICAgICAgbVszXVswXSA9PSBuWzNdWzBdICYmIG1bM11bMV0gPT0g
blszXVsxXSAmJiBtWzNdWzJdID09IG5bM11bMl0gJiYgbVszXVszXSA9PSBuWzNdWzNdO1xuIgor
ICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxWZWMyKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0MiB2LCBmbG9hdDIgdSlcbiIK
KyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0g
dS54ICYmIHYueSA9PSB1Lnk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNFcXVhbFZlYzMpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwo
ZmxvYXQzIHYsIGZsb2F0MyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xu
IgorICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxWZWM0
KQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGZsb2F0NCB2LCBmbG9hdDQgdSlc
biIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2Lngg
PT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0gdS53O1xuIgorICAg
ICAgICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxJVmVjMikKKyAg
ICB7CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChpbnQyIHYsIGludDIgdSlcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYm
IHYueSA9PSB1Lnk7XG4iCisgICAgICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBpZiAo
bVVzZXNFcXVhbElWZWMzKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDMg
diwgaW50MyB1KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xuIgorICAgICAg
ICAgICAgICAgIn1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxJVmVjNCkKKyAgICB7
CisgICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChpbnQ0IHYsIGludDQgdSlcbiIKKyAgICAgICAg
ICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYu
eSA9PSB1LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0gdS53O1xuIgorICAgICAgICAgICAgICAg
In1cbiI7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRXF1YWxCVmVjMikKKyAgICB7CisgICAgICAg
IG91dCA8PCAiYm9vbCBlcXVhbChib29sMiB2LCBib29sMiB1KVxuIgorICAgICAgICAgICAgICAg
IntcbiIKKyAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUu
eTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFs
QlZlYzMpCisgICAgeworICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoYm9vbDMgdiwgYm9vbDMg
dSlcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2
LnggPT0gdS54ICYmIHYueSA9PSB1LnkgJiYgdi56ID09IHUuejtcbiIKKyAgICAgICAgICAgICAg
ICJ9XG4iOworICAgIH0KKworICAgIGlmIChtVXNlc0VxdWFsQlZlYzQpCisgICAgeworICAgICAg
ICBvdXQgPDwgImJvb2wgZXF1YWwoYm9vbDQgdiwgYm9vbDQgdSlcbiIKKyAgICAgICAgICAgICAg
ICJ7XG4iCisgICAgICAgICAgICAgICAiICAgIHJldHVybiB2LnggPT0gdS54ICYmIHYueSA9PSB1
LnkgJiYgdi56ID09IHUueiAmJiB2LncgPT0gdS53O1xuIgorICAgICAgICAgICAgICAgIn1cbiI7
CisgICAgfQorCisgICAgaWYgKG1Vc2VzQXRhbjIpCisgICAgeworICAgICAgICBvdXQgPDwgImZs
b2F0IGF0YW55eChmbG9hdCB5LCBmbG9hdCB4KVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICIgICAgaWYoeCA9PSAwICYmIHkgPT0gMCkgeCA9IDE7XG4iICAgLy8gQXZv
aWQgcHJvZHVjaW5nIGEgTmFOCisgICAgICAgICAgICAgICAiICAgIHJldHVybiBhdGFuMih5LCB4
KTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworICAgIH0KK30KKwordm9pZCBPdXRwdXRITFNM
Ojp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CisK
KyAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICB7CisgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgIH0KKyAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIp
CisgICAgeworICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKKyAgICB9CisgICAgZWxzZSBpZiAo
bmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisgICAgeworICAgICAgICBtVXNlc0RlcHRoUmFuZ2Ug
PSB0cnVlOworICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9
PSAiZ2xfRnJhZ0Nvb3JkIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsK
KyAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1Bv
aW50Q29vcmQiKQorICAgIHsKKyAgICAgICAgbVVzZXNQb2ludENvb3JkID0gdHJ1ZTsKKyAgICAg
ICAgb3V0IDw8IG5hbWU7CisgICAgfQorICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0Zyb250RmFj
aW5nIikKKyAgICB7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICBv
dXQgPDwgbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRTaXplIikK
KyAgICB7CisgICAgICAgIG1Vc2VzUG9pbnRTaXplID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG5h
bWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFV
bmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zLmluc2Vy
dChuYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWZlcmVuY2VkQXR0cmli
dXRlcy5pbnNlcnQobmFtZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFy
eWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFy
eWluZ3MuaW5zZXJ0KG5hbWUuY19zdHIoKSk7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwg
ZGVjb3JhdGUobmFtZSk7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICAg
IGNhc2UgRU9wQXNzaWduOiAgICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIo
IiwgIiA9ICIsICIpIik7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5pdGlhbGl6
ZTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiID0gIiwgIiIpOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiArPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRU9wU3ViQXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoIiwgIiAtPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsQXNz
aWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIp
OyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246IG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAqPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIoIjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9
IG11bCgiOworICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgICAgIG91dCA8PCAiLCB0cmFuc3Bvc2UoIjsgICAKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiKSkpIjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIoIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9IG11bCgiOworICAgICAgICAgICAgbm9kZS0+
Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiLCAiOyAgIAor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIp
KSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcERpdkFzc2lnbjog
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
IiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0U3RydWN0OgorICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8ICIuIiArIG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgorICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIuIjsKKworICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZSAqc3dpenpsZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQWdncmVnYXRlKCk7
CisKKyAgICAgICAgICAgIGlmIChzd2l6emxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBzd2l6emxlLT5nZXRTZXF1ZW5jZSgpOwor
CisgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqZWxlbWVu
dCA9ICgqc2l0KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpID0gZWxlbWVudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3Qo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBvdXQgPDwgIngiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICJ5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAieiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAg
IC8vIEZ1bGx5IHByb2Nlc3NlZAorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BBZGQ6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwg
IikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YjogICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIgLSAiLCAiKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTXVsOiAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7IGJyZWFr
OworICAgICAgY2FzZSBFT3BEaXY6ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC8gIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgY2Fz
ZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNTY2FsYXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
ID09ICIsICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICE9ICIsICIp
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVPcEVxdWFsKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAqZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgp
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZmllbGRzLT5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpmaWVsZHMpW2ldLnR5cGU7CisKKyAgICAgICAg
ICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAg
IG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpICsgIiA9PSAiOworICAgICAg
ICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworCisgICAgICAgICAg
ICAgICAgaWYgKGkgPCBmaWVsZHMtPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAmJiAiOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgb3V0IDw8ICIpIjsKKworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMiAqIDI6IG1Vc2VzRXF1YWxNYXQyID0gdHJ1
ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDMgKiAzOiBtVXNlc0VxdWFsTWF0MyA9
IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0ICogNDogbVVzZXNFcXVhbE1h
dDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsVmVjMiA9
IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbFZl
YzMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRXF1
YWxWZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsSVZlYzIgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxJVmVjMyA9
IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbElW
ZWM0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbEJWZWMyID0gdHJ1ZTsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsQlZlYzMgPSB0
cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2VzRXF1YWxCVmVj
NCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImVxdWFsKCIsICIsICIsICIp
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiFlcXVhbCgiLCAiLCAiLCAiKSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BM
ZXNzVGhhbjogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgIGJyZWFr
OworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiID49ICIsICIpIik7ICBicmVhazsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2Fs
YXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIg
KiAiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0
cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFuc3Bvc2UoIiwgIikpIik7IGJyZWFrOwor
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11
bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFrOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgInRyYW5zcG9zZShtdWwodHJhbnNwb3Nl
KCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNh
bE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAiKSIpOyAgYnJl
YWs7CisgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgIG1Vc2VzWG9yID0gdHJ1ZTsK
KyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6
OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKK3sKKyAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKKyAg
ICB7CisgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICBjYXNl
IEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIp
OyAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1l
bnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICItLSkiKTsgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysiLCAi
IiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZJ
bnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKKyAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbCgiLCAi
IiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQoIiwgIiIsICIpIik7IGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKKyAgICAgIGNhc2UgRU9wQ29udklu
dFRvRmxvYXQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQyKCIsICIiLCAiKSIpOyBicmVhazsK
KyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdDMoIiwgIiIs
ICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0
VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludCgiLCAiIiwgIiki
KTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImlu
dDIoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIpIik7IGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyYWRpYW5z
KCIsICIiLCAiKSIpOyAgIGJyZWFrOworICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNpbigiLCAi
IiwgIikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvczogICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidGFuKCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhY29zKCIsICIi
LCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4cCgiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExvZzogICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCAiIiwg
IikiKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzcXJ0KCIsICIiLCAi
KSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFicygiLCAiIiwgIiki
KTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgIiIsICIp
Iik7ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFjKCIsICIiLCAiKSIp
OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Tm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCAiIiwg
IikiKTsgYnJlYWs7CisvLyAgICBjYXNlIEVPcERQZHg6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworLy8gICAgY2FzZSBFT3BE
UGR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIiLCAiKSIpOyAg
ICAgICBicmVhazsKKy8vICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAgICAgICAKKyAgICAgIGNh
c2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSkKK3sKKyAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZSA9IG1Db250ZXh0Lmxhbmd1YWdl
OworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wU2VxdWVuY2U6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICJ7XG4iOworCisgICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgrKzsKKworICAg
ICAgICAgICAgICAgIGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURlcHRoKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tldC5wdXNoX2Jh
Y2soMCk7ICAgLy8gTmV3IHNjb3BlIGxldmVsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TY29w
ZUJyYWNrZXRbbVNjb3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBleGlzdGluZyBs
ZXZlbAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVn
aW4oKTsgc2l0ICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudCgqc2l0KSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNl
KCpzaXQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICgqc2l0KS0+dHJh
dmVyc2UodGhpcyk7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICAgICAgbVNjb3BlRGVw
dGgtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJl
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2Ug
PSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAgVEludGVybVR5cGVkICp2YXJpYWJs
ZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7CisgICAgICAgICAgICBib29sIHZpc2l0ID0g
dHJ1ZTsKKworICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlm
aWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFH
bG9iYWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUoKSwgc2NvcGVkU3RydWN0KHZhcmlh
YmxlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpIHx8IHZh
cmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgIT0gIiIpICAgLy8gVmFyaWFi
bGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbUluc2lkZUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodmFyaWFibGUtPmdldFR5cGUoKSkg
KyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJh
dG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0Kysp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIiArIGluaXRpYWxpemVy
KHZhcmlhYmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdCAmJiB0
aGlzLT5pblZpc2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ID0g
dGhpcy0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHRoaXMtPnBvc3RWaXNpdCkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dmlz
aXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZS0+Z2V0QXNT
eW1ib2xOb2RlKCkgJiYgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSA9
PSAiIikgICAvLyBUeXBlIChzdHJ1Y3QpIGRlY2xhcmF0aW9uCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGFkZGVkIHRvIGNvbnN0cnVjdG9yIG1hcAor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wUHJvdG90eXBlOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwg
IiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5hbWUoKSkgPDwgIigiOworCisgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9
IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
c3ltYm9sKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGFy
Z3VtZW50U3RyaW5nKHN5bWJvbCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1
bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBvdXQgPDwgIik7XG4iOworCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbW1hOiAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiLCAiLCAiIik7ICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKKyAgICAgICAgeworICAgICAgICAgICAg
VFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsK
KworICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiOwor
CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBz
ZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVuY2UuYmVnaW4oKSk7CisKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAg
ICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dCA8PCAifVxuIjsKKworICAgICAgICAgICAgICAgIG1JbnNpZGVGdW5j
dGlvbiA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUU3RyaW5n
IG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RFByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRFByb2pfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xf
dGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gUmVxdWlyZXMg
dGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
MkRQcm9qTG9kIikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIFJlcXVpcmVzIHRoZSB2ZXJ0ZXggc2hhZGVyIHRleHR1
cmUgc2FtcGxpbmcgZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
UmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIikiOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57XG4iKTsgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5n
ZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5
cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJvb2w6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
ImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiYnZlYzEoIiwgIiIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
YnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJidmVjMigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
ImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RJbnQ6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
Iml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiaXZlYzEoIiwgIiIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjMjoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
aXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
Iml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWM0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQyOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0MzoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAi
bWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDQ6IAorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJt
YXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAibWF0NCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29u
c3RydWN0U3RydWN0OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksIHNj
b3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksICZub2RlLT5nZXRTZXF1
ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgc3RydWN0TG9va3VwKG5vZGUt
PmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSArICJfY3RvcigiLCAiLCAiLCAiKSIpOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPiAiLCAi
KSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0cHV0VHJpcGxldCh2
aXNpdCwgIigiLCAiID49ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwg
IikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFs
OiAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wTW9kOgorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0U2l6ZSgpKSAgIC8v
IE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIDE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIDI6IG1Vc2VzTW9kMiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIDM6IG1Vc2VzTW9kMyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG1V
c2VzTW9kNCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bW9kKCIsICIsICIsICIpIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcFBvdzogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJwb3coIiwgIiwgIiwg
IikiKTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQXRhbjoKKyAgICAgICAg
QVNTRVJUKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpOyAgIC8vIGF0YW4oeCkgaXMg
YSB1bmFyeSBvcGVyYXRvcgorICAgICAgICBtVXNlc0F0YW4yID0gdHJ1ZTsKKyAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImF0YW55eCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1pbigi
LCAiLCAiLCAiKSIpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcE1heDogICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BDbGFtcDogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
Y2xhbXAoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wTWl4OiAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlcnAoIiwgIiwgIiwgIikiKTsgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJzdGVwKCIsICIsICIsICIpIik7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BT
bW9vdGhTdGVwOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAiLCAi
KSIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGlzdGFuY2U6ICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImRpc3RhbmNlKCIsICIsICIsICIpIik7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcERvdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkb3QoIiwgIiwgIiwgIiki
KTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRU9wRmFjZUZvcndhcmQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVy
IG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICBjYXNlIDE6IG1Vc2VzRmFjZWZvcndhcmQxID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDI6IG1Vc2VzRmFjZWZvcndhcmQyID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIDM6IG1Vc2VzRmFjZWZvcndhcmQzID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIDQ6IG1Vc2VzRmFjZWZvcndhcmQ0ID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmFjZWZvcndhcmQoIiwgIiwgIiwgIikiKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInJlZmxlY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJyZWZyYWN0
KCIsICIsICIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIpOyAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24gKm5vZGUpCit7CisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJ0IiA8PCBtVW5mb2xkU2VsZWN0LT5nZXRUZW1wb3JhcnlJbmRleCgpOworICAgIH0K
KyAgICBlbHNlICAvLyBpZi9lbHNlIHN0YXRlbWVudAorICAgIHsKKyAgICAgICAgbVVuZm9sZFNl
bGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0Q29uZGl0aW9uKCkpOworCisgICAgICAgIG91dCA8PCAi
aWYoIjsKKworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICAgICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBp
ZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUtPmdl
dFRydWVCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8
PCAiO31cbiI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJlbHNlXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICAgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CisK
KyAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAgIHdyaXRlQ29uc3RhbnRVbmlvbihub2RlLT5n
ZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworfQorCitib29sIE91dHB1
dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUpCit7CisgICAg
aWYgKGhhbmRsZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAo
IW5vZGUtPnRlc3RGaXJzdCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJkb1xuIgorICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChub2Rl
LT5nZXRJbml0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZl
cnNlKG5vZGUtPmdldEluaXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChu
b2RlLT5nZXRUZXN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRy
YXZlcnNlKG5vZGUtPmdldFRlc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtVW5mb2xkU2Vs
ZWN0LT50cmF2ZXJzZShub2RlLT5nZXRUZXJtaW5hbCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IG91dCA8PCAiZm9yKCI7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICI7ICI7CisKKyAgICAgICAgaWYgKG5vZGUtPmdl
dFRlc3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJz
ZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiOyAiOworCisgICAgICAgIGlm
IChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLT5nZXRU
ZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAi
KVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisgICAgfQorCisgICAgaWYgKG5vZGUtPmdldEJv
ZHkoKSkKKyAgICB7CisgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgfQorCisgICAgb3V0IDw8ICJ9XG4iOworCisgICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkK
KyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUoXG4iOworCisgICAgICAgIG5vZGUtPmdldFRl
c3QoKS0+dHJhdmVyc2UodGhpcyk7CisKKyAgICAgICAgb3V0IDw8ICIpIjsKKyAgICB9CisKKyAg
ICBvdXQgPDwgIjtcbiI7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT3V0cHV0SExT
TDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCit7CisgICAg
VEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dP
cCgpKQorICAgIHsKKyAgICAgIGNhc2UgRU9wS2lsbDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJkaXNjYXJkIiwgIiIsICIiKTsgIGJyZWFrOworICAgICAgY2FzZSBFT3BCcmVhazogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImJyZWFrIiwgIiIsICIiKTsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnRpbnVlOiBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY29udGludWUiLCAiIiwgIiIpOyBi
cmVhazsKKyAgICAgIGNhc2UgRU9wUmV0dXJuOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJyZXR1cm4gIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgInJldHVybjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
IjtcbiI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE91dHB1dEhMU0w6
OmlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIFRJbnRlcm1BZ2dy
ZWdhdGUgKmFnZ3JlZ2F0ZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CisKKyAgICBpZiAoYWdn
cmVnYXRlKQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZS0+Z2V0T3AoKSA9PSBFT3BTZXF1
ZW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6
Oml0ZXJhdG9yIHNpdCA9IGFnZ3JlZ2F0ZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigpOyBzaXQgIT0g
YWdncmVnYXRlLT5nZXRTZXF1ZW5jZSgpLmVuZCgpOyBzaXQrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzU2luZ2xlU3RhdGVtZW50KCpzaXQpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gSGFuZGxlIGxvb3BzIHdpdGggbW9y
ZSB0aGFuIDI1NSBpdGVyYXRpb25zICh1bnN1cHBvcnRlZCBieSBEM0Q5KSBieSBzcGxpdHRpbmcg
dGhlbQorYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpu
b2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OworCisgICAgLy8gUGFyc2Ug
bG9vcHMgb2YgdGhlIGZvcm06CisgICAgLy8gZm9yKGludCBpbmRleCA9IGluaXRpYWw7IGluZGV4
IFtjb21wYXJhdG9yXSBsaW1pdDsgaW5kZXggKz0gaW5jcmVtZW50KQorICAgIFRJbnRlcm1TeW1i
b2wgKmluZGV4ID0gTlVMTDsKKyAgICBUT3BlcmF0b3IgY29tcGFyYXRvciA9IEVPcE51bGw7Cisg
ICAgaW50IGluaXRpYWwgPSAwOworICAgIGludCBsaW1pdCA9IDA7CisgICAgaW50IGluY3JlbWVu
dCA9IDA7CisKKyAgICAvLyBQYXJzZSBpbmRleCBuYW1lIGFuZCBpbnRpYWwgdmFsdWUKKyAgICBp
ZiAobm9kZS0+Z2V0SW5pdCgpKQorICAgIHsKKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqaW5p
dCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKworICAgICAgICBpZiAoaW5p
dCkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IGlu
aXQtPmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnZhcmlhYmxlID0g
c2VxdWVuY2VbMF0tPmdldEFzVHlwZWQoKTsKKworICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYm
IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFUZW1wb3JhcnkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVEludGVybUJpbmFyeSAqYXNzaWduID0gdmFyaWFibGUtPmdldEFz
QmluYXJ5Tm9kZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGFzc2lnbi0+Z2V0T3AoKSA9PSBF
T3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybVN5bWJvbCAqc3ltYm9sID0gYXNzaWduLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgp
OworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY29uc3RhbnQgPSBh
c3NpZ24tPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHN5bWJvbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKClbMF0uZ2V0SUNvbnN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBQYXJzZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQorICAg
IGlmIChpbmRleCAhPSBOVUxMICYmIG5vZGUtPmdldFRlc3QoKSkKKyAgICB7CisgICAgICAgIFRJ
bnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5nZXRUZXN0KCktPmdldEFzQmluYXJ5Tm9kZSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHRlc3QgJiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJv
bE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+Z2V0SWQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisKKyAgICAgICAgICAgIGlmIChjb25zdGFudCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVi
dEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGltaXQgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJ
Q29uc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBQYXJzZSBpbmNyZW1lbnQKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBj
b21wYXJhdG9yICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0VGVybWluYWwoKSkKKyAgICB7CisgICAg
ICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+
Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIFRJbnRlcm1VbmFyeSAqdW5hcnlUZXJtaW5hbCA9
IG5vZGUtPmdldFRlcm1pbmFsKCktPmdldEFzVW5hcnlOb2RlKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoYmluYXJ5VGVybWluYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRPcGVyYXRvciBv
cCA9IGJpbmFyeVRlcm1pbmFsLT5nZXRPcCgpOworICAgICAgICAgICAgVEludGVybUNvbnN0YW50
VW5pb24gKmNvbnN0YW50ID0gYmluYXJ5VGVybWluYWwtPmdldFJpZ2h0KCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworCisgICAgICAgICAgICBpZiAoY29uc3RhbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYg
Y29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IHZhbHVlID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0u
Z2V0SUNvbnN0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiBp
bmNyZW1lbnQgPSB2YWx1ZTsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRU9w
U3ViQXNzaWduOiBpbmNyZW1lbnQgPSAtdmFsdWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
ICh1bmFyeVRlcm1pbmFsKQorICAgICAgICB7CisgICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSB1
bmFyeVRlcm1pbmFsLT5nZXRPcCgpOworCisgICAgICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IGluY3JlbWVudCA9
IDE7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiBpbmNyZW1l
bnQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgaW5j
cmVtZW50ID0gMTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDog
IGluY3JlbWVudCA9IC0xOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4
ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxsICYmIGluY3JlbWVudCAhPSAwKQorICAg
IHsKKyAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW5FcXVhbCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29tcGFyYXRvciA9IEVPcExlc3NUaGFuOworICAgICAgICAgICAgbGlt
aXQgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb21wYXJhdG9yID09IEVPcExlc3NU
aGFuKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChsaW1pdCAtIGlu
aXRpYWwgKyAxKSAvIGluY3JlbWVudDsKKworICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPD0g
MjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBO
b3QgYW4gZXhjZXNzaXZlIGxvb3AKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByZW1h
aW5kZXIgPSAobGltaXQgLSBpbml0aWFsICsgMSkgJSBpbmNyZW1lbnQ7CisgICAgICAgICAgICAg
ICAgaW50IGNsYW1wZWRMaW1pdCA9IGluaXRpYWwgKyBpbmNyZW1lbnQgKiBzdGQ6Om1pbigyNTUs
IGl0ZXJhdGlvbnMpIC0gMSAtIHJlbWFpbmRlcjsKKworICAgICAgICAgICAgICAgIC8vIGZvcihp
bnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5kZXggKz0gaW5jcmVt
ZW50KQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7CisgICAgICAgICAgICAg
ICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIjsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgaW5pdGlhbDsKKworICAgICAgICAgICAgICAgIG91dCA8
PCAiOyAiOworICAgICAgICAgICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiA8ICI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGNsYW1wZWRMaW1p
dDsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiOyAiOworICAgICAgICAgICAgICAgIGluZGV4
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiArPSAiOworICAgICAg
ICAgICAgICAgIG91dCA8PCBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIpXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOworCisgICAgICAgICAgICAgICAgaW5pdGlhbCArPSAy
NTUgKiBpbmNyZW1lbnQ7CisgICAgICAgICAgICAgICAgaXRlcmF0aW9ucyAtPSAyNTU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsgICAvLyBO
b3QgaGFuZGxlZCBhcyBhbiBleGNlc3NpdmUgbG9vcAorfQorCit2b2lkIE91dHB1dEhMU0w6Om91
dHB1dFRyaXBsZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3Qg
VFN0cmluZyAmaW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpCit7CisgICAgVElu
Zm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CisKKyAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisg
ICAgeworICAgICAgICBvdXQgPDwgcHJlU3RyaW5nOworICAgIH0KKyAgICBlbHNlIGlmICh2aXNp
dCA9PSBJblZpc2l0KQorICAgIHsKKyAgICAgICAgb3V0IDw8IGluU3RyaW5nOworICAgIH0KKyAg
ICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgcG9z
dFN0cmluZzsKKyAgICB9Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmco
Y29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gc3ltYm9sLT5nZXRRdWFsaWZpZXIoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJv
bC0+Z2V0VHlwZSgpOworICAgIFRTdHJpbmcgbmFtZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7CisK
KyAgICBpZiAobmFtZS5lbXB0eSgpKSAgIC8vIEhMU0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMs
IGFsc28gZm9yIHByb3RvdHlwZXMKKyAgICB7CisgICAgICAgIG5hbWUgPSAieCIgKyBzdHIobUFy
Z3VtZW50SW5kZXgrKyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5hbWUgPSBk
ZWNvcmF0ZShuYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxp
ZmllcikgKyAiICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgbmFtZSArIGFycmF5U3RyaW5n
KHR5cGUpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnF1YWxpZmllclN0cmluZyhUUXVhbGlm
aWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNh
c2UgRXZxSW46ICAgICAgICAgICAgcmV0dXJuICJpbiI7CisgICAgICBjYXNlIEV2cU91dDogICAg
ICAgICAgIHJldHVybiAib3V0IjsKKyAgICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgcmV0dXJu
ICJpbm91dCI7CisgICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6IHJldHVybiAiY29uc3QiOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIiI7Cit9
CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKK3sK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAg
ICBpZiAodHlwZS5nZXRUeXBlTmFtZSgpICE9ICIiKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RydWN0TG9va3VwKHR5cGUuZ2V0VHlwZU5hbWUoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0cnVjdHVyZSwgZGVmaW5lIGluIHBsYWNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5cGUuZ2V0U3RydWN0
KCk7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkID0gKmZpZWxkc1tpXS50eXBlOworCisgICAgICAg
ICAgICAgICAgc3RyaW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmll
bGQuZ2V0RmllbGROYW1lKCkgKyBhcnJheVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7CisKKyAgICAgICAgICAgIHJldHVy
biBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOworICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NHg0
IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0Ogor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJmbG9hdCI7CisgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxv
YXQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gImludCI7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJpbnQyIjsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gImludDMiOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biAiaW50NCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJib29sIjsKKyAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gImJvb2wyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImJvb2wzIjsKKyAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImJvb2w0IjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJD
VUJFIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQorICAgIHJldHVybiAiPHVua25vd24gdHlwZT4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6
OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcmV0dXJuICJbIiAr
IHN0cih0eXBlLmdldEFycmF5U2l6ZSgpKSArICJdIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNM
Ojppbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBUU3RyaW5nIHN0cmluZzsK
KworICAgIGZvciAoaW50IGNvbXBvbmVudCA9IDA7IGNvbXBvbmVudCA8IHR5cGUuZ2V0T2JqZWN0
U2l6ZSgpOyBjb21wb25lbnQrKykKKyAgICB7CisgICAgICAgIHN0cmluZyArPSAiMCI7CisKKyAg
ICAgICAgaWYgKGNvbXBvbmVudCA8IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpIC0gMSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyaW5nICs9ICIsICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOworfQorCit2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0
cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50
ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCit7CisgICAgaWYgKG5hbWUgPT0gIiIpCisgICAgewor
ICAgICAgICByZXR1cm47ICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlcyBkb24ndCBoYXZlIGNvbnN0
cnVjdG9ycworICAgIH0KKworICAgIFRUeXBlIGN0b3JUeXBlID0gdHlwZTsKKyAgICBjdG9yVHlw
ZS5jbGVhckFycmF5bmVzcygpOworICAgIGN0b3JUeXBlLmNoYW5nZVByZWNpc2lvbihFYnBIaWdo
KTsKKyAgICBjdG9yVHlwZS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKworICAgIFRT
dHJpbmcgY3Rvck5hbWUgPSB0eXBlLmdldFN0cnVjdCgpID8gZGVjb3JhdGUobmFtZSkgOiBuYW1l
OworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlwZT4gUGFyYW1ldGVyQXJyYXk7CisgICAg
UGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7CisKKyAgICBpZiAocGFyYW1ldGVycykKKyAg
ICB7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBwYXJhbWV0
ZXIgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOyBwYXJhbWV0ZXIgIT0gcGFyYW1ldGVycy0+ZW5kKCk7
IHBhcmFtZXRlcisrKQorICAgICAgICB7CisgICAgICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNo
X2JhY2soKCpwYXJhbWV0ZXIpLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIG1T
dHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOworCisgICAgICAgIFRTdHJpbmcgc3Ry
dWN0dXJlOworICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkg
KyAiXG4iCisgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBjb25zdCBUVHlw
ZUxpc3QgJmZpZWxkcyA9ICp0eXBlLmdldFN0cnVjdCgpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7CisKKyAgICAgICAgICAg
IHN0cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5nKGZpZWxkKSArICIgIiArIGZpZWxkLmdl
dEZpZWxkTmFtZSgpICsgYXJyYXlTdHJpbmcoZmllbGQpICsgIjtcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBzdHJ1Y3R1cmUgKz0gIn07XG4iOworCisgICAgICAgIGlmIChzdGQ6OmZpbmQobVN0
cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1
Y3R1cmUpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0cnVjdHVyZSk7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVs
ZHNbaV0udHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwor
CisgICAgVFN0cmluZyBjb25zdHJ1Y3RvcjsKKworICAgIGlmIChjdG9yVHlwZS5nZXRTdHJ1Y3Qo
KSkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9IGN0b3JOYW1lICsgIiAiICsgY3Rvck5h
bWUgKyAiX2N0b3IoIjsKKyAgICB9CisgICAgZWxzZSAgIC8vIEJ1aWx0LWluIHR5cGUKKyAgICB7
CisgICAgICAgIGNvbnN0cnVjdG9yICs9IHR5cGVTdHJpbmcoY3RvclR5cGUpICsgIiAiICsgY3Rv
ck5hbWUgKyAiKCI7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcGFyYW1ldGVyID0g
MDsgcGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6ZSgpOyBwYXJhbWV0ZXIrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVyXTsK
KworICAgICAgICBjb25zdHJ1Y3RvciArPSB0eXBlU3RyaW5nKHR5cGUpICsgIiB4IiArIHN0cihw
YXJhbWV0ZXIpICsgYXJyYXlTdHJpbmcodHlwZSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlciA8
IGN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdHJ1Y3RvciArPSAi
KVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGN0b3JUeXBlLmdldFN0
cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IgKz0gIiAgICAiICsgY3Rvck5hbWUg
KyAiIHN0cnVjdHVyZSA9IHsiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25z
dHJ1Y3RvciArPSAiICAgIHJldHVybiAiICsgdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiKCI7Cisg
ICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmlzTWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpID09IDEpCisgICAgeworICAgICAgICBpbnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0b3JQYXJhbWV0ZXJzWzBd
OworCisgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmlu
Zygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3Ig
Kz0gIiwgIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyBy
b3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBj
b2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAi
XSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAi
MC4wIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
cm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgaW50IHJlbWFpbmluZ0NvbXBvbmVudHMgPSBjdG9yVHlwZS5nZXRPYmplY3RTaXplKCk7Cisg
ICAgICAgIGludCBwYXJhbWV0ZXJJbmRleCA9IDA7CisKKyAgICAgICAgd2hpbGUgKHJlbWFpbmlu
Z0NvbXBvbmVudHMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFy
YW1ldGVyID0gY3RvclBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOworICAgICAgICAgICAgYm9v
bCBtb3JlUGFyYW1ldGVycyA9IHBhcmFtZXRlckluZGV4IDwgKGludCljdG9yUGFyYW1ldGVycy5z
aXplKCkgLSAxOworCisgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAieCIgKyBzdHIocGFyYW1l
dGVySW5kZXgpOworCisgICAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0
ZXIuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cGFyYW1ldGVyLmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KHJlbWFpbmluZ0NvbXBvbmVudHMgPT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKSB8fCBtb3Jl
UGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlbWFp
bmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVtYWluaW5nQ29tcG9uZW50cyA8IHBh
cmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZW1haW5pbmdDb21wb25lbnRzKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBjb25zdHJ1Y3RvciArPSAiLngiOyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGNvbnN0cnVjdG9yICs9ICIu
eHkiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogY29uc3RydWN0b3Ig
Kz0gIi54eXoiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBjb25zdHJ1
Y3RvciArPSAiLnh5enciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmVtYWluaW5nQ29tcG9uZW50cyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpIHx8IHBhcmFtZXRlci5nZXRTdHJ1Y3QoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVtYWluaW5nQ29tcG9uZW50cyA9
PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRl
ci5nZXRPYmplY3RTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisKKyAgICAgICAgICAgIGlmIChtb3JlUGFyYW1ldGVycykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJJbmRleCsrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50cykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAg
Y29uc3RydWN0b3IgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHN0cnVjdHVyZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIn1cbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yICs9ICIpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIjsKKyAgICB9CisKKyAgICBtQ29uc3RydWN0b3JzLmluc2VydChjb25z
dHJ1Y3Rvcik7Cit9CisKK2NvbnN0IENvbnN0YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRlQ29u
c3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29uc3RV
bmlvbikKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKKworICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG91dCA8PCBzdHJ1
Y3RMb29rdXAodHlwZS5nZXRUeXBlTmFtZSgpKSArICJfY3RvcigiOworICAgICAgICAKKyAgICAg
ICAgY29uc3QgVFR5cGVMaXN0ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgKmZpZWxkVHlwZSA9ICgqc3RydWN0dXJlKVtp
XS50eXBlOworCisgICAgICAgICAgICBjb25zdFVuaW9uID0gd3JpdGVDb25zdGFudFVuaW9uKCpm
aWVsZFR5cGUsIGNvbnN0VW5pb24pOworCisgICAgICAgICAgICBpZiAoaSAhPSBzdHJ1Y3R1cmUt
PnNpemUoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIikiOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgp
OworICAgICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOworICAgICAgICAKKyAgICAgICAg
aWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmco
dHlwZSkgPDwgIigiOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplOyBpKyssIGNvbnN0VW5pb24rKykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChj
b25zdFVuaW9uLT5nZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6IG91dCA8PCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRC
Q29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICIpIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb25zdFVuaW9uOworfQor
CitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0
KQoreworICAgIFRTdHJpbmcgc3RyaW5nOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBtU2NvcGVCcmFja2V0LnNpemUoKSAmJiBpIDwgZGVwdGhMaW1pdDsgaSsrKQorICAgIHsK
KyAgICAgICAgc3RyaW5nICs9ICJfIiArIHN0cihpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Ry
aW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5n
ICZ0eXBlTmFtZSkKK3sKKyAgICBpZiAodHlwZU5hbWUgPT0gIiIpCisgICAgeworICAgICAgICBy
ZXR1cm4gdHlwZU5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVOYW1lICsgc2NvcGVTdHJp
bmcobVNjb3BlRGVwdGgpOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdExvb2t1cChj
b25zdCBUU3RyaW5nICZ0eXBlTmFtZSkKK3sKKyAgICBmb3IgKGludCBkZXB0aCA9IG1TY29wZURl
cHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKQorICAgIHsKKyAgICAgICAgVFN0cmluZyBzY29wZWRO
YW1lID0gZGVjb3JhdGUodHlwZU5hbWUgKyBzY29wZVN0cmluZyhkZXB0aCkpOworCisgICAgICAg
IGZvciAoU3RydWN0TmFtZXM6Oml0ZXJhdG9yIHN0cnVjdE5hbWUgPSBtU3RydWN0TmFtZXMuYmVn
aW4oKTsgc3RydWN0TmFtZSAhPSBtU3RydWN0TmFtZXMuZW5kKCk7IHN0cnVjdE5hbWUrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCpzdHJ1Y3ROYW1lID09IHNjb3BlZE5hbWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlZE5hbWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVTlJFQUNIQUJMRSgpOyAgIC8vIFNob3VsZCBo
YXZlIGZvdW5kIGEgbWF0Y2hpbmcgY29uc3RydWN0b3IKKworICAgIHJldHVybiB0eXBlTmFtZTsK
K30KKworVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcp
Cit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMykgIT0gImdsXyIgJiYgc3RyaW5nLnN1YnN0
cigwLCAzKSAhPSAiZHhfIikKKyAgICB7CisgICAgICAgIHJldHVybiAiXyIgKyBzdHJpbmc7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorfQor
fQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEhMU0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfT1VUUFVUSExTTF9IXworI2RlZmlu
ZSBDT01QSUxFUl9PVVRQVVRITFNMX0hfCisKKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHNl
dD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgVW5mb2xkU2VsZWN0
OworCitjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IE91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCk7Cisg
ICAgfk91dHB1dEhMU0woKTsKKworICAgIHZvaWQgb3V0cHV0KCk7CisKKyAgICBUSW5mb1NpbmtC
YXNlICZnZXRCb2R5U3RyZWFtKCk7CisKKyAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5
cGUgJnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIFRTdHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUpOworICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBl
KTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAg
IC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBuYW1pbmcgY2xhc2hlcworCisgIHBy
b3RlY3RlZDoKKyAgICB2b2lkIGhlYWRlcigpOworCisgICAgLy8gVmlzaXQgQVNUIG5vZGVzIGFu
ZCBvdXRwdXQgdGhlaXIgY29kZSB0byB0aGUgYm9keSBzdHJlYW0KKyAgICB2b2lkIHZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7Cisg
ICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOworCisgICAg
Ym9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCBoYW5k
bGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKTsKKyAgICB2b2lkIG91dHB1dFRyaXBs
ZXQoVmlzaXQgdmlzaXQsIGNvbnN0IFRTdHJpbmcgJnByZVN0cmluZywgY29uc3QgVFN0cmluZyAm
aW5TdHJpbmcsIGNvbnN0IFRTdHJpbmcgJnBvc3RTdHJpbmcpOworICAgIFRTdHJpbmcgYXJndW1l
bnRTdHJpbmcoY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBpbnQgdmVjdG9yU2l6
ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3Q7CisKKyAgICB2b2lkIGFkZENvbnN0cnVjdG9yKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVu
Y2UgKnBhcmFtZXRlcnMpOworICAgIGNvbnN0IENvbnN0YW50VW5pb24gKndyaXRlQ29uc3RhbnRV
bmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbik7
CisKKyAgICBUU3RyaW5nIHNjb3BlU3RyaW5nKHVuc2lnbmVkIGludCBkZXB0aExpbWl0KTsKKyAg
ICBUU3RyaW5nIHNjb3BlZFN0cnVjdChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7CisgICAgVFN0
cmluZyBzdHJ1Y3RMb29rdXAoY29uc3QgVFN0cmluZyAmdHlwZU5hbWUpOworCisgICAgVFBhcnNl
Q29udGV4dCAmbUNvbnRleHQ7CisgICAgVW5mb2xkU2VsZWN0ICptVW5mb2xkU2VsZWN0OworICAg
IGJvb2wgbUluc2lkZUZ1bmN0aW9uOworCisgICAgLy8gT3V0cHV0IHN0cmVhbXMKKyAgICBUSW5m
b1NpbmtCYXNlIG1IZWFkZXI7CisgICAgVEluZm9TaW5rQmFzZSBtQm9keTsKKyAgICBUSW5mb1Np
bmtCYXNlIG1Gb290ZXI7CisKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbVJlZmVyZW5jZWRV
bmlmb3JtczsKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbVJlZmVyZW5jZWRBdHRyaWJ1dGVz
OworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFZhcnlpbmdzOworCisgICAg
Ly8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMgaW4gdGhlIGhlYWRlciBvdXRwdXQK
KyAgICBib29sIG1Vc2VzVGV4dHVyZTJEOworICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRfYmlhczsK
KyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvajsKKyAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJv
al9iaWFzOworICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZTsKKyAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVfYmlhczsKKyAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKKyAgICBib29sIG1Vc2VzRnJh
Z0Nvb3JkOworICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOworICAgIGJvb2wgbVVzZXNGcm9udEZh
Y2luZzsKKyAgICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGJvb2wgbVVzZXNYb3I7CisgICAg
Ym9vbCBtVXNlc01vZDE7CisgICAgYm9vbCBtVXNlc01vZDI7CisgICAgYm9vbCBtVXNlc01vZDM7
CisgICAgYm9vbCBtVXNlc01vZDQ7CisgICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMTsKKyAgICBi
b29sIG1Vc2VzRmFjZWZvcndhcmQyOworICAgIGJvb2wgbVVzZXNGYWNlZm9yd2FyZDM7CisgICAg
Ym9vbCBtVXNlc0ZhY2Vmb3J3YXJkNDsKKyAgICBib29sIG1Vc2VzRXF1YWxNYXQyOworICAgIGJv
b2wgbVVzZXNFcXVhbE1hdDM7CisgICAgYm9vbCBtVXNlc0VxdWFsTWF0NDsKKyAgICBib29sIG1V
c2VzRXF1YWxWZWMyOworICAgIGJvb2wgbVVzZXNFcXVhbFZlYzM7CisgICAgYm9vbCBtVXNlc0Vx
dWFsVmVjNDsKKyAgICBib29sIG1Vc2VzRXF1YWxJVmVjMjsKKyAgICBib29sIG1Vc2VzRXF1YWxJ
VmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxJVmVjNDsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVj
MjsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjMzsKKyAgICBib29sIG1Vc2VzRXF1YWxCVmVjNDsK
KyAgICBib29sIG1Vc2VzQXRhbjI7CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IENv
bnN0cnVjdG9yczsKKyAgICBDb25zdHJ1Y3RvcnMgbUNvbnN0cnVjdG9yczsKKworICAgIHR5cGVk
ZWYgc3RkOjpzZXQ8VFN0cmluZz4gU3RydWN0TmFtZXM7CisgICAgU3RydWN0TmFtZXMgbVN0cnVj
dE5hbWVzOworCisgICAgdHlwZWRlZiBzdGQ6Omxpc3Q8VFN0cmluZz4gU3RydWN0RGVjbGFyYXRp
b25zOworICAgIFN0cnVjdERlY2xhcmF0aW9ucyBtU3RydWN0RGVjbGFyYXRpb25zOworCisgICAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxpbnQ+IFNjb3BlQnJhY2tldDsKKyAgICBTY29wZUJyYWNrZXQg
bVNjb3BlQnJhY2tldDsKKyAgICB1bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CisKKyAgICBpbnQg
bUFyZ3VtZW50SW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBhcmd1bWVudCBuYW1lcwor
fTsKK30KKworI2VuZGlmICAgLy8gQ09NUElMRVJfT1VUUFVUSExTTF9IXwpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDc1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKworI2luY2x1
ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9v
c2luY2x1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVsZHMK
Ky8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0
b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3IgYSB2ZWN0b3IuCisv
LworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiBj
b21wU3RyaW5nLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxkcyYgZmllbGRzLCBpbnQgbGluZSkK
K3sKKyAgICBmaWVsZHMubnVtID0gKGludCkgY29tcFN0cmluZy5zaXplKCk7CisgICAgaWYgKGZp
ZWxkcy5udW0gPiA0KSB7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHZlY3RvciBmaWVs
ZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGVudW0geworICAgICAgICBleHl6dywKKyAgICAgICAgZXJnYmEs
CisgICAgICAgIGVzdHBxLAorICAgIH0gZmllbGRTZXRbNF07CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZpZWxkcy5udW07ICsraSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBTdHJpbmdbaV0p
ICB7CisgICAgICAgIGNhc2UgJ3gnOiAKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0g
MDsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAncic6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwor
ICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAg
ICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAneSc6IAorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAg
ICAgZmllbGRTZXRbaV0gPSBleHl6dzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdnJzogCisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7CisgICAgICAgICAgICBm
aWVsZFNldFtpXSA9IGVyZ2JhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3Qn
OgorICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAxOworICAgICAgICAgICAgZmllbGRT
ZXRbaV0gPSBlc3RwcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd6JzogCisg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtp
XSA9IGV4eXp3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2InOiAKKyAgICAg
ICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0g
ZXJnYmE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1tpXSA9IDI7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBx
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlICd3JzogCisgICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGV4eXp3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2EnOiAKKyAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKKyAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXJn
YmE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICBm
aWVsZHMub2Zmc2V0c1tpXSA9IDM7CisgICAgICAgICAgICBmaWVsZFNldFtpXSA9IGVzdHBxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihs
aW5lLCAiaWxsZWdhbCB2ZWN0b3IgZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigp
LCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07ICsraSkgeworICAgICAgICBpZiAoZmll
bGRzLm9mZnNldHNbaV0gPj0gdmVjU2l6ZSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwgInZl
Y3RvciBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgIGNvbXBTdHJpbmcuY19zdHIoKSwg
IiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGkgPiAwKSB7CisgICAgICAgICAgICBpZiAoZmllbGRTZXRbaV0gIT0gZmllbGRTZXRbaS0xXSkg
eworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIC0gdmVjdG9yIGNvbXBvbmVu
dCBmaWVsZHMgbm90IGZyb20gdGhlIHNhbWUgc2V0IiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworLy8KKy8vIExvb2sgYXQgYSAnLicg
ZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZzZXRzCisvLyBmb3Ig
YSBtYXRyaXguCisvLworYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25z
dCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRz
LCBpbnQgbGluZSkKK3sKKyAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICBmaWVsZHMu
d2hvbGVDb2wgPSBmYWxzZTsKKyAgICBmaWVsZHMucm93ID0gLTE7CisgICAgZmllbGRzLmNvbCA9
IC0xOworCisgICAgaWYgKGNvbXBTdHJpbmcuc2l6ZSgpICE9IDIpIHsKKyAgICAgICAgZXJyb3Io
bGluZSwgImlsbGVnYWwgbGVuZ3RoIG9mIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3Ry
aW5nLmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChjb21wU3RyaW5nWzBdID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0cmluZ1sxXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLndob2xl
Q29sID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7Cisg
ICAgfSBlbHNlIGlmIChjb21wU3RyaW5nWzFdID09ICdfJykgeworICAgICAgICBpZiAoY29tcFN0
cmluZ1swXSA8ICcwJyB8fCBjb21wU3RyaW5nWzBdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJv
cihsaW5lLCAiaWxsZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZmllbGRzLndob2xlUm93ID0gdHJ1ZTsKKyAgICAgICAgZmllbGRzLnJvdyA9IGNvbXBTdHJpbmdb
MF0gLSAnMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBTdHJpbmdbMF0gPCAnMCcg
fHwgY29tcFN0cmluZ1swXSA+ICczJyB8fAorICAgICAgICAgICAgY29tcFN0cmluZ1sxXSA8ICcw
JyB8fCBjb21wU3RyaW5nWzFdID4gJzMnKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiaWxs
ZWdhbCBtYXRyaXggZmllbGQgc2VsZWN0aW9uIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmllbGRzLnJvdyA9
IGNvbXBTdHJpbmdbMF0gLSAnMCc7CisgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOworICAgIH0KKworICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRz
LmNvbCA+PSBtYXRTaXplKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2Vs
ZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLworLy8gRXJyb3JzCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vCisvLyBUcmFjayB3
aGV0aGVyIGVycm9ycyBoYXZlIG9jY3VycmVkLgorLy8KK3ZvaWQgVFBhcnNlQ29udGV4dDo6cmVj
b3ZlcigpCit7CisgICAgcmVjb3ZlcmVkRnJvbUVycm9yID0gdHJ1ZTsKK30KKworLy8KKy8vIFVz
ZWQgYnkgZmxleC9iaXNvbiB0byBvdXRwdXQgYWxsIHN5bnRheCBhbmQgcGFyc2luZyBlcnJvcnMu
CisvLwordm9pZCBUUGFyc2VDb250ZXh0OjplcnJvcihUU291cmNlTG9jIG5MaW5lLCBjb25zdCBj
aGFyICpzelJlYXNvbiwgY29uc3QgY2hhciAqc3pUb2tlbiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnN6RXh0cmFJbmZvRm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBz
ekV4dHJhSW5mb1s0MDBdOworICAgIHZhX2xpc3QgbWFya2VyOworCisgICAgdmFfc3RhcnQobWFy
a2VyLCBzekV4dHJhSW5mb0Zvcm1hdCk7CisKKyAgICB2c25wcmludGYoc3pFeHRyYUluZm8sIHNp
emVvZihzekV4dHJhSW5mbyksIHN6RXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOworCisgICAgLyog
VkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZv
ICovCisgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICBpbmZvU2lu
ay5pbmZvLmxvY2F0aW9uKG5MaW5lKTsKKyAgICBpbmZvU2luay5pbmZvIDw8ICInIiA8PCBzelRv
a2VuIDw8ICAiJyA6ICIgPDwgc3pSZWFzb24gPDwgIiAiIDw8IHN6RXh0cmFJbmZvIDw8ICJcbiI7
CisKKyAgICB2YV9lbmQobWFya2VyKTsKKworICAgICsrbnVtRXJyb3JzOworfQorCisvLworLy8g
U2FtZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgcGxhY2VzIGFzc2lnbm1lbnRzIGRvbid0IHdvcmsu
CisvLwordm9pZCBUUGFyc2VDb250ZXh0Ojphc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hh
ciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCkKK3sKKyAgICBlcnJvcihsaW5lLCAi
Iiwgb3AsICJjYW5ub3QgY29udmVydCBmcm9tICclcycgdG8gJyVzJyIsCisgICAgICAgICAgcmln
aHQuY19zdHIoKSwgbGVmdC5jX3N0cigpKTsKK30KKworLy8KKy8vIFNhbWUgZXJyb3IgbWVzc2Fn
ZSBmb3IgYWxsIHBsYWNlcyB1bmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCisvLwordm9pZCBU
UGFyc2VDb250ZXh0Ojp1bmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3Ry
aW5nIG9wZXJhbmQpCit7CisgICBlcnJvcihsaW5lLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsIG9w
LCAKKyAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhpc3RzIHRoYXQgdGFrZXMgYW4gb3Bl
cmFuZCBvZiB0eXBlICVzIChvciB0aGVyZSBpcyBubyBhY2NlcHRhYmxlIGNvbnZlcnNpb24pIiwK
KyAgICAgICAgICBvcCwgb3BlcmFuZC5jX3N0cigpKTsKK30KKworLy8KKy8vIFNhbWUgZXJyb3Ig
bWVzc2FnZSBmb3IgYWxsIGJpbmFyeSBvcGVyYXRpb25zIGRvbid0IHdvcmsuCisvLwordm9pZCBU
UGFyc2VDb250ZXh0OjpiaW5hcnlPcEVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0
cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQoreworICAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3Bl
cmFuZCB0eXBlcyAiLCBvcCwgCisgICAgICAgICAgICAibm8gb3BlcmF0aW9uICclcycgZXhpc3Rz
IHRoYXQgdGFrZXMgYSBsZWZ0LWhhbmQgb3BlcmFuZCBvZiB0eXBlICclcycgYW5kICIKKyAgICAg
ICAgICAgICJhIHJpZ2h0IG9wZXJhbmQgb2YgdHlwZSAnJXMnIChvciB0aGVyZSBpcyBubyBhY2Nl
cHRhYmxlIGNvbnZlcnNpb24pIiwgCisgICAgICAgICAgICBvcCwgbGVmdC5jX3N0cigpLCByaWdo
dC5jX3N0cigpKTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpwcmVjaXNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKXsKKyAgICBz
d2l0Y2goIHR5cGUgKXsKKyAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICBpZiggcHJlY2lzaW9u
ID09IEVicFVuZGVmaW5lZCApeworICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJObyBwcmVjaXNp
b24gc3BlY2lmaWVkIGZvciAoZmxvYXQpIiwgIiIsICIiICk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidEludDoKKyAgICAg
ICAgaWYoIHByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQgKXsKKyAgICAgICAgICAgIGVycm9yKCBs
aW5lLCAiTm8gcHJlY2lzaW9uIHNwZWNpZmllZCAoaW50KSIsICIiLCAiIiApOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCBhbmQgaWYgbmVjZXNzYXJ5LCBzcGl0
IG91dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQorLy8gYW4gbC12YWx1
ZSB0aGF0IGNhbiBiZSBvcGVyYXRlZCBvbiB0aGlzIHdheS4KKy8vCisvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqIG5vZGUpCit7Cisg
ICAgVEludGVybVN5bWJvbCogc3ltTm9kZSA9IG5vZGUtPmdldEFzU3ltYm9sTm9kZSgpOworICAg
IFRJbnRlcm1CaW5hcnkqIGJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIGlmIChiaW5hcnlOb2RlKSB7CisgICAgICAgIGJvb2wgZXJyb3JSZXR1cm47CisKKyAgICAg
ICAgc3dpdGNoKGJpbmFyeU5vZGUtPmdldE9wKCkpIHsKKyAgICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICBjYXNlIEVPcElu
ZGV4RGlyZWN0U3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGlu
ZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dp
enpsZToKKyAgICAgICAgICAgIGVycm9yUmV0dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBv
cCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKKyAgICAgICAgICAgIGlmICghZXJyb3JSZXR1cm4p
IHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0WzRdID0gezAsMCwwLDB9OworCisgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiByaWdodE5vZGUgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgp
OworICAgICAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JOb2RlID0gcmlnaHROb2Rl
LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCku
YmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHAgIT0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHArKykgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgdmFsdWUgPSAoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0W3ZhbHVlXSsrOyAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZz
ZXRbdmFsdWVdID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgIiBs
LXZhbHVlIG9mIHN3aXp6bGUgY2Fubm90IGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudHMiLCBvcCwg
IiIsICIiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IAorCisgICAg
ICAgICAgICByZXR1cm4gZXJyb3JSZXR1cm47CisgICAgICAgIGRlZmF1bHQ6IAorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVp
cmVkIiwgb3AsICIiLCAiIik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAg
ICBjb25zdCBjaGFyKiBzeW1ib2wgPSAwOworICAgIGlmIChzeW1Ob2RlICE9IDApCisgICAgICAg
IHN5bWJvbCA9IHN5bU5vZGUtPmdldFN5bWJvbCgpLmNfc3RyKCk7CisKKyAgICBjb25zdCBjaGFy
KiBtZXNzYWdlID0gMDsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldFF1YWxpZmllcigpKSB7CisgICAg
Y2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQXR0cmlidXRl
OiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlm
b3JtIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBhIHZhcnlpbmciOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxSW5wdXQ6
ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGlucHV0IjsgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xf
RnJhZ0Nvb3JkIjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICBtZXNzYWdl
ID0gImNhbid0IG1vZGlmeSBnbF9Gcm9udEZhY2luZyI7IGJyZWFrOworICAgIGNhc2UgRXZxUG9p
bnRDb29yZDogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGdsX1BvaW50Q29vcmQiOyAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKworICAgICAgICAvLworICAgICAgICAvLyBUeXBlIHRoYXQgY2Fu
J3QgYmUgd3JpdHRlbiB0bz8KKyAgICAgICAgLy8KKyAgICAgICAgc3dpdGNoIChub2RlLT5nZXRC
YXNpY1R5cGUoKSkgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2Ft
cGxlciI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAg
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9pZCI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChtZXNzYWdlID09IDAgJiYgYmluYXJ5Tm9kZSA9PSAwICYmIHN5bU5vZGUgPT0g
MCkgeworICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBvcCwgIiIsICIi
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIC8vCisgICAgLy8gRXZl
cnl0aGluZyBlbHNlIGlzIG9rYXksIG5vIGVycm9yLgorICAgIC8vCisgICAgaWYgKG1lc3NhZ2Ug
PT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8KKyAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgd2UgaGF2ZSBhbiBlcnJvciBhbmQgYSBtZXNzYWdlLgorICAgIC8vCisgICAgaWYgKHN5
bU5vZGUpCisgICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiXCIl
c1wiICglcykiLCBzeW1ib2wsIG1lc3NhZ2UpOworICAgIGVsc2UKKyAgICAgICAgZXJyb3IobGlu
ZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICIoJXMpIiwgbWVzc2FnZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8KKy8vIEJvdGggdGVzdCwgYW5kIGlmIG5lY2Vzc2FyeSBzcGl0IG91
dCBhbiBlcnJvciwgdG8gc2VlIGlmIHRoZSBub2RlIGlzIHJlYWxseQorLy8gYSBjb25zdGFudC4K
Ky8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpCit7CisgICAgaWYg
KG5vZGUtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJjb25zdGFudCBleHByZXNzaW9uIHJlcXVp
cmVkIiwgIiIsICIiKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gQm90aCB0ZXN0
LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUg
aXMgcmVhbGx5CisvLyBhbiBpbnRlZ2VyLgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2Fz
IGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVElu
dGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBpZiAobm9kZS0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdl
ciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4sICIiKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLworLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVycm9y
LCB0byBzZWUgaWYgd2UgYXJlIGN1cnJlbnRseQorLy8gZ2xvYmFsbHkgc2NvcGVkLgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4
dDo6Z2xvYmFsRXJyb3JDaGVjayhpbnQgbGluZSwgYm9vbCBnbG9iYWwsIGNvbnN0IGNoYXIqIHRv
a2VuKQoreworICAgIGlmIChnbG9iYWwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVy
cm9yKGxpbmUsICJvbmx5IGFsbG93ZWQgYXQgZ2xvYmFsIHNjb3BlIiwgdG9rZW4sICIiKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLworLy8gRm9yIG5vdywga2VlcCBpdCBzaW1wbGU6ICBp
ZiBpdCBzdGFydHMgImdsXyIsIGl0J3MgcmVzZXJ2ZWQsIGluZGVwZW5kZW50CisvLyBvZiBzY29w
ZS4gIEV4Y2VwdCwgaWYgdGhlIHN5bWJvbCB0YWJsZSBpcyBhdCB0aGUgYnVpbHQtaW4gcHVzaC1s
ZXZlbCwKKy8vIHdoaWNoIGlzIHdoZW4gd2UgYXJlIHBhcnNpbmcgYnVpbHQtaW5zLgorLy8gQWxz
byBjaGVja3MgZm9yICJ3ZWJnbF8iIGFuZCAiX3dlYmdsXyIgcmVzZXJ2ZWQgaWRlbnRpZmllcnMg
aWYgcGFyc2luZyBhCisvLyB3ZWJnbCBzaGFkZXIuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIHdhcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JD
aGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogcmVzZXJ2ZWRFcnJNc2cgPSAicmVzZXJ2ZWQgYnVpbHQtaW4gbmFtZSI7Cisg
ICAgaWYgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKSB7CisgICAgICAgIGlmIChpZGVu
dGlmaWVyLnN1YnN0cigwLCAzKSA9PSBUU3RyaW5nKCJnbF8iKSkgeworICAgICAgICAgICAgZXJy
b3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iLCAiIik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3BlYyA9PSBFU2hTcGVjV2ViR0wpIHsKKyAg
ICAgICAgICAgIGlmIChpZGVudGlmaWVyLnN1YnN0cigwLCA2KSA9PSBUU3RyaW5nKCJ3ZWJnbF8i
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xf
IiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDcpID09IFRTdHJpbmcoIl93ZWJnbF8i
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAiX3dlYmds
XyIsICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoaWRlbnRpZmllci5maW5kKCJfXyIpICE9IFRTdHJpbmc6Om5w
b3MpIHsKKyAgICAgICAgICAgIC8vZXJyb3IobGluZSwgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgaWRlbnRpZmllci5jX3N0cigpLCAi
IiwgIiIpOworICAgICAgICAgICAgLy9yZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgIlR3byBjb25zZWN1dGl2ZSB1bmRlcnNjb3Jl
cyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIiwgbGluZSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8v
CisvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGRhdGEgcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yIHRvIGJ1aWxkCisvLyBzb21ldGhpbmcgb2YgdGhlIHR5cGUgb2YgdGhlIGNvbnN0cnVj
dG9yLiAgQWxzbyByZXR1cm5zIHRoZSB0eXBlIG9mCisvLyB0aGUgY29uc3RydWN0b3IuCisvLwor
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiBjb25zdHJ1Y3Rpb24uCisv
LworYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2soaW50IGxpbmUsIFRJ
bnRlcm1Ob2RlKiBub2RlLCBURnVuY3Rpb24mIGZ1bmN0aW9uLCBUT3BlcmF0b3Igb3AsIFRUeXBl
KiB0eXBlKQoreworICAgICp0eXBlID0gZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpOworCisgICAg
Ym9vbCBjb25zdHJ1Y3RpbmdNYXRyaXggPSBmYWxzZTsKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBj
YXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgorICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICAgICAgY29uc3RydWN0aW5nTWF0cml4ID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogCisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIC8vCisgICAgLy8gTm90ZTogSXQncyBva2F5IHRvIGhhdmUgdG9vIG1hbnkgY29tcG9uZW50
cyBhdmFpbGFibGUsIGJ1dCBub3Qgb2theSB0byBoYXZlIHVudXNlZAorICAgIC8vIGFyZ3VtZW50
cy4gICdmdWxsJyB3aWxsIGdvIHRvIHRydWUgd2hlbiBlbm91Z2ggYXJncyBoYXZlIGJlZW4gc2Vl
bi4gIElmIHdlIGxvb3AKKyAgICAvLyBhZ2FpbiwgdGhlcmUgaXMgYW4gZXh0cmEgYXJndW1lbnQs
IHNvICdvdmVyZnVsbCcgd2lsbCBiZWNvbWUgdHJ1ZS4KKyAgICAvLworCisgICAgaW50IHNpemUg
PSAwOworICAgIGJvb2wgY29uc3RUeXBlID0gdHJ1ZTsKKyAgICBib29sIGZ1bGwgPSBmYWxzZTsK
KyAgICBib29sIG92ZXJGdWxsID0gZmFsc2U7CisgICAgYm9vbCBtYXRyaXhJbk1hdHJpeCA9IGZh
bHNlOworICAgIGJvb2wgYXJyYXlBcmcgPSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgIHNpemUgKz0gZnVuY3Rp
b25baV0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvbnN0
cnVjdGluZ01hdHJpeCAmJiBmdW5jdGlvbltpXS50eXBlLT5pc01hdHJpeCgpKQorICAgICAgICAg
ICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOworICAgICAgICBpZiAoZnVsbCkKKyAgICAgICAgICAg
IG92ZXJGdWxsID0gdHJ1ZTsKKyAgICAgICAgaWYgKG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAm
JiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0gdHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKQorICAg
ICAgICAgICAgZnVsbCA9IHRydWU7CisgICAgICAgIGlmIChmdW5jdGlvbltpXS50eXBlLT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAgICAgICAgIGNvbnN0VHlwZSA9IGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb25baV0udHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgYXJy
YXlBcmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoY29uc3RUeXBlKQorICAgICAgICB0
eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworCisgICAgaWYgKHR5cGUtPmlzQXJyYXko
KSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVu
dCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKGFycmF5QXJnICYmIG9wICE9IEVPcENvbnN0cnVjdFN0
cnVjdCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIGZyb20gYSBub24tZGVy
ZWZlcmVuY2VkIGFycmF5IiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobWF0cml4SW5NYXRyaXggJiYgIXR5cGUtPmlzQXJyYXkoKSkg
eworICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpICE9IDEpIHsKKyAgICAgICAg
ICBlcnJvcihsaW5lLCAiY29uc3RydWN0aW5nIG1hdHJpeCBmcm9tIG1hdHJpeCBjYW4gb25seSB0
YWtlIG9uZSBhcmd1bWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVyRnVsbCkgeworICAgICAgICBl
cnJvcihsaW5lLCAidG9vIG1hbnkgYXJndW1lbnRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKG9wID09IEVPcENvbnN0cnVj
dFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkg
IT0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJOdW1i
ZXIgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9m
IHN0cnVjdHVyZSBmaWVsZHMiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghdHlwZS0+aXNNYXRyaXgoKSkgeworICAgICAgICBpZiAo
KG9wICE9IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplICE9IDEgJiYgc2l6ZSA8IHR5cGUtPmdl
dE9iamVjdFNpemUoKSkgfHwKKyAgICAgICAgICAgIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3Qg
JiYgc2l6ZSA8IHR5cGUtPmdldE9iamVjdFNpemUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJub3QgZW5vdWdoIGRhdGEgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdGlvbiIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgVEludGVybVR5cGVkKiB0eXBlZCA9IG5vZGUtPmdldEFzVHlwZWQoKTsKKyAgICBpZiAo
dHlwZWQgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY29uc3RydWN0b3IgYXJndW1lbnQg
ZG9lcyBub3QgaGF2ZSBhIHR5cGUiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmIElzU2Ft
cGxlcih0eXBlZC0+Z2V0QmFzaWNUeXBlKCkpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJjYW5u
b3QgY29udmVydCBhIHNhbXBsZXIiLCAiY29uc3RydWN0b3IiLCAiIik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZWQtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0IGEgdm9pZCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgYSB2b2lkIHZhcmlh
YmxlIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCByYWlzZSBhbiBlcnJvciBtZXNzYWdlIGZvciBzdWNo
IGEgY2FzZQorLy8KKy8vIHJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIGFuIGVycm9yCisvLworYm9v
bCBUUGFyc2VDb250ZXh0Ojp2b2lkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYg
aWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHB1YlR5cGUpCit7CisgICAgaWYgKHB1YlR5
cGUudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIHVzZSBv
ZiB0eXBlICd2b2lkJyIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIGZ1bmN0aW9u
IGNoZWNrcyB0byBzZWUgaWYgdGhlIG5vZGUgKGZvciB0aGUgZXhwcmVzc2lvbikgY29udGFpbnMg
YSBzY2FsYXIgYm9vbGVhbiBleHByZXNzaW9uIG9yIG5vdAorLy8KKy8vIHJldHVybnMgdHJ1ZSBp
biBjYXNlIG9mIGFuIGVycm9yCisvLworYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhpbnQgbGluZSwgY29uc3QgVEludGVybVR5cGVkKiB0eXBlKQoreworICAgIGlmICh0eXBlLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHR5cGUtPmlzQXJyYXkoKSB8fCB0eXBlLT5pc01h
dHJpeCgpIHx8IHR5cGUtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImJvb2xl
YW4gZXhwcmVzc2lvbiBleHBlY3RlZCIsICIiLCAiIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2hlY2tz
IHRvIHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxh
ciBib29sZWFuIGV4cHJlc3Npb24gb3Igbm90CisvLworLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ug
b2YgYW4gZXJyb3IKKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCit7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0g
RWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAx
KSkgeworICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwg
IiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwg
Y29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pCit7CisgICAgaWYg
KHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIo
KnBUeXBlLnVzZXJEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRUeXBl
OjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIihzdHJ1Y3R1cmUgY29udGFpbnMgYSBzYW1w
bGVyKSIpOworICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChJc1NhbXBsZXIo
cFR5cGUudHlwZSkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBUVHlwZTo6Z2V0QmFz
aWNTdHJpbmcocFR5cGUudHlwZSksICIiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQorewor
ICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAm
JgorICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVjdCkgeworICAgICAgICBlcnJvcihsaW5l
LCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhw
VHlwZS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAocFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVy
cm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29u
dGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVh
bGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFP
dXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAmJiAKKyAgICAgICAgICAgICB0eXBlLmdldEJh
c2ljVHlwZSgpICE9IEVidFN0cnVjdCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkp
IHsKKyAgICAgICAgZXJyb3IobGluZSwgInNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1l
dGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6Y29u
dGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKQoreworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgIFRUeXBlTGlzdCYgc3RydWN0dXJlID0g
KnR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
c3RydWN0dXJlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVy
KCpzdHJ1Y3R1cmVbaV0udHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBEbyBzaXplIGNo
ZWNraW5nIGZvciBhbiBhcnJheSB0eXBlJ3Mgc2l6ZS4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJy
b3JDaGVjayhpbnQgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpCit7CisgICAg
VEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhwci0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7CisgICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpICE9
IEVidEludCkgeworICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29u
c3RhbnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc2l6ZSA9IGNvbnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5n
ZXRJQ29uc3QoKTsKKworICAgIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIiwgIiIpOworICAgICAg
ICBzaXplID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLworLy8gU2VlIGlmIHRoaXMgcXVhbGlmaWVyIGNhbiBiZSBhbiBhcnJheS4K
Ky8vCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFy
c2VDb250ZXh0OjphcnJheVF1YWxpZmllckVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBl
IHR5cGUpCit7CisgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVy
IiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25z
dCAmJiBleHRlbnNpb25FcnJvckNoZWNrKGxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8KKy8vIFNl
ZSBpZiB0aGlzIHR5cGUgY2FuIGJlIGFuIGFycmF5LgorLy8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhbiBlcnJvci4KKy8vCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9y
Q2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCit7CisgICAgLy8KKyAgICAvLyBDYW4g
dGhlIHR5cGUgYmUgYW4gYXJyYXk/CisgICAgLy8KKyAgICBpZiAodHlwZS5hcnJheSkgeworICAg
ICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBl
KHR5cGUpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSwgIiIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBEbyBhbGwgdGhl
IHNlbWFudGljIGNoZWNraW5nIGZvciBkZWNsYXJpbmcgYW4gYXJyYXksIHdpdGggYW5kIAorLy8g
d2l0aG91dCBhIHNpemUsIGFuZCBtYWtlIHRoZSByaWdodCBjaGFuZ2VzIHRvIHRoZSBzeW1ib2wg
dGFibGUuCisvLworLy8gc2l6ZSA9PSAwIG1lYW5zIG5vIHNwZWNpZmllZCBzaXplLgorLy8KKy8v
IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisvLworYm9vbCBUUGFyc2VDb250
ZXh0OjphcnJheUVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQoreworICAgIC8vCisgICAgLy8gRG9u
J3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBu
b3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKKyAgICAvLyBiZWNhdXNlIHJlc2VydmVkIGFycmF5cyBj
YW4gYmUgcmVkZWNsYXJlZC4KKyAgICAvLworCisgICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAor
ICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7CisgICAgaWYgKHN5
bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVj
ayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAK
KyAgICAgICAgdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBl
KSk7CisKKyAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQorICAgICAgICAgICAgdmFyaWFibGUt
PmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOworCisgICAgICAgIGlmICgh
IHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICBkZWxldGUgdmFy
aWFibGU7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5n
IG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCEgc3ltYm9sLT5p
c1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3Rl
ZCIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5
bWJvbCk7CisgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5Iiwg
aWRlbnRpZmllci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDAp
IHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGgg
c2l6ZSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCku
c2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5cGUpKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVjbGFyYXRpb24gb2YgYXJyYXkgd2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmll
ci5jX3N0cigpLCAiIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFRUeXBlKiB0ID0gdmFyaWFibGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7Cisg
ICAgICAgIHdoaWxlICh0ICE9IDApIHsKKyAgICAgICAgICAgIGlmICh0LT5nZXRNYXhBcnJheVNp
emUoKSA+IHR5cGUuYXJyYXlTaXplKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhp
Z2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIu
Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdC0+c2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKKyAgICAgICAg
ICAgIHQgPSB0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHR5cGUuYXJyYXlTaXplKQorICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5z
ZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOworICAgIH0gCisKKyAgICBpZiAodm9pZEVycm9y
Q2hlY2sobGluZSwgaWRlbnRpZmllciwgdHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6
ZShUSW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlwZSwgaW50IHNpemUsIGJvb2wgdXBkYXRl
RmxhZywgVFNvdXJjZUxvYyBsaW5lKQoreworICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOworICAg
IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZi
dWlsdEluKTsKKyAgICBpZiAoc3ltYm9sID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiB1
bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBub2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3Rh
dGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKKworICAgIHR5cGUtPnNldEFycmF5SW5mb3Jt
YXRpb25UeXBlKHZhcmlhYmxlLT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpKTsKKyAgICB2YXJp
YWJsZS0+dXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5cGUodHlwZSk7CisKKyAgICAvLyBzcGVjaWFs
IGNhc2luZyB0byB0ZXN0IGluZGV4IHZhbHVlIG9mIGdsX0ZyYWdEYXRhLiBJZiB0aGUgYWNjZXNz
ZWQgaW5kZXggaXMgPj0gZ2xfTWF4RHJhd0J1ZmZlcnMKKyAgICAvLyBpdHMgYW4gZXJyb3IKKyAg
ICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX0ZyYWdEYXRhIikgeworICAgICAgICBUU3lt
Ym9sKiBmcmFnRGF0YSA9IHN5bWJvbFRhYmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1
aWx0SW4pOworICAgICAgICBpZiAoZnJhZ0RhdGEgPT0gMCkgeworICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMg
bm90IGRlZmluZWQiLCBsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgaW50IGZyYWdEYXRhVmFsdWUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihm
cmFnRGF0YSktPmdldENvbnN0UG9pbnRlcigpWzBdLmdldElDb25zdCgpOworICAgICAgICBpZiAo
ZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsi
LCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkgaGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGds
X01heERyYXdCdWZmZXJzIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyB3ZSBkb250IHdhbnQgdG8gdXBkYXRlIHRoZSBtYXhBcnJheVNp
emUgd2hlbiB0aGlzIGZsYWcgaXMgbm90IHNldCwgd2UganVzdCB3YW50IHRvIGluY2x1ZGUgdGhp
cyAKKyAgICAvLyBub2RlIHR5cGUgaW4gdGhlIGNoYWluIG9mIG5vZGUgdHlwZXMgc28gdGhhdCBp
dHMgdXBkYXRlZCB3aGVuIGEgaGlnaGVyIG1heEFycmF5U2l6ZSBjb21lcyBpbi4KKyAgICBpZiAo
IXVwZGF0ZUZsYWcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemUrKzsKKyAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLnNldE1heEFycmF5U2l6ZShzaXplKTsKKyAgICB0eXBlLT5zZXRN
YXhBcnJheVNpemUoc2l6ZSk7CisgICAgVFR5cGUqIHR0ID0gdHlwZTsKKworICAgIHdoaWxlKHR0
LT5nZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpICE9IDApIHsKKyAgICAgICAgdHQgPSB0dC0+Z2V0
QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsKKyAgICAgICAgdHQtPnNldE1heEFycmF5U2l6ZShzaXpl
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vCisvLyBFbmZvcmNlIG5vbi1p
bml0aWFsaXplciB0eXBlL3F1YWxpZmllciBydWxlcy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYg
dGhlcmUgd2FzIGFuIGVycm9yLgorLy8KK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5
cGUpCit7CisgICAgLy8KKyAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KKyAg
ICAvLworICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkgeworICAgICAgICB0eXBl
LnF1YWxpZmllciA9IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxl
cyB3aXRoIHF1YWxpZmllciAnY29uc3QnIG11c3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVy
LmNfc3RyKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLworLy8gRG8gc2VtYW50aWMgY2hlY2tpbmcgZm9yIGEgdmFyaWFibGUg
ZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8gaW5pdGlhbGl6ZXIsCisvLyBhbmQgdXBkYXRlIHRoZSBz
eW1ib2wgdGFibGUuCisvLworLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4K
Ky8vCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRF
cnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlw
ZSkpOworCisgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSwgIiIpOworICAgICAgICBkZWxldGUgdmFyaWFibGU7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBh
cnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpCit7ICAgIAorICAgIGlm
IChxdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgcXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewor
ICAgICAgICBlcnJvcihsaW5lLCAicXVhbGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBh
cmFtZXRlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpLCAiIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFt
UXVhbGlmaWVyICE9IEV2cUluKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90
IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVyKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCisgICAgICAgIHR5cGUtPmNoYW5nZVF1
YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKKyAgICBlbHNlCisgICAgICAgIHR5cGUtPmNoYW5n
ZVF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hh
ciogZXh0ZW5zaW9uKQoreyAgICAgICAKKyAgICBpZiAoZXh0ZW5zaW9uQmVoYXZpb3JbZXh0ZW5z
aW9uXSA9PSBFQmhXYXJuKSB7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgKCJleHRlbnNpb24gIiArIFRTdHJpbmcoZXh0ZW5zaW9uKSArICIgaXMgYmVpbmcg
dXNlZCIpLmNfc3RyKCksIGxpbmUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNpb25dID09IEVCaERpc2FibGUpIHsKKyAgICAg
ICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbiwgImlzIGRpc2FibGVkIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTm9uLUVycm9ycy4KKy8vCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworLy8KKy8vIExvb2sgdXAgYSBmdW5jdGlvbiBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBmdW5jdGlvbi4KKy8vCisvLyBSZXR1
cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIDAuCisvLworY29uc3Qg
VEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlv
biogY2FsbCwgYm9vbCAqYnVpbHRJbikKK3sKKyAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworCisgICAg
aWYgKHN5bWJvbCA9PSAwKSB7ICAgICAgICAKKyAgICAgICAgZXJyb3IobGluZSwgIm5vIG1hdGNo
aW5nIG92ZXJsb2FkZWQgZnVuY3Rpb24gZm91bmQiLCBjYWxsLT5nZXROYW1lKCkuY19zdHIoKSwg
IiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoISBzeW1ib2wtPmlzRnVu
Y3Rpb24oKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIs
IGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICAKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKKy8v
CisvLyBJbml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1h
ci4gIEhhdmUgb25lIHNldCBvZgorLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgorLy8KK2Jv
b2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1O
b2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICBUVHlwZSB0eXBl
ID0gVFR5cGUocFR5cGUpOworCisgICAgaWYgKHZhcmlhYmxlID09IDApIHsKKyAgICAgICAgaWYg
KHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICh2b2lkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCBw
VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLworICAgICAgICAv
LyBhZGQgdmFyaWFibGUgdG8gc3ltYm9sIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIHZhcmlh
YmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgdHlwZSk7CisgICAgICAgIGlmICghIHN5
bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAi
cmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwg
aXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCisgICAgICAgICAgICAv
LyBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgdGhlIG1lbW9yeQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBpZGVudGlmaWVyIG11c3QgYmUgb2YgdHlwZSBjb25zdGFudCwgYSBnbG9i
YWwsIG9yIGEgdGVtcG9yYXJ5CisgICAgLy8KKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHZh
cmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgaWYgKChxdWFsaWZpZXIgIT0g
RXZxVGVtcG9yYXJ5KSAmJiAocXVhbGlmaWVyICE9IEV2cUdsb2JhbCkgJiYgKHF1YWxpZmllciAh
PSBFdnFDb25zdCkpIHsKKyAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgaW5pdGlhbGl6ZSB0
aGlzIHR5cGUgb2YgcXVhbGlmaWVyICIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
U3RyaW5nKCksICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vCisgICAg
Ly8gdGVzdCBmb3IgYW5kIHByb3BhZ2F0ZSBjb25zdGFudAorICAgIC8vCisKKyAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAgICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6
ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgZXJyb3IobGluZSwg
IiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBpbml0aWFsaXplci0+
Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1tYXRjaGluZyB0eXBl
cyBmb3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwgCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgdmFyaWFibGUt
PmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpIHsgCisgICAgICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0g
dmFyaWFibGUtPmdldENvbnN0UG9pbnRlcigpOworCisgICAgICAgICAgICBpZiAodHlwZS5nZXRP
YmplY3RTaXplKCkgPT0gMSAmJiB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkgewor
ICAgICAgICAgICAgICAgICp1bmlvbkFycmF5ID0gKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50
VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSlbMF07CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXpl
ci0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUo
KSkgeworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpKTsKKyAgICAgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+
KHN5bWJvbCk7CisKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFy
LT5nZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5zaGFyZUNvbnN0UG9p
bnRlcihjb25zdEFycmF5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICIgY2Fubm90IGFzc2lnbiB0byIsICI9IiwgIiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgp
LmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
VHlwZSgpLmNoYW5nZVF1YWxpZmllcihFdnFUZW1wb3JhcnkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYgKHF1YWxpZmllciAhPSBFdnFDb25z
dCkgeworICAgICAgICBUSW50ZXJtU3ltYm9sKiBpbnRlcm1TeW1ib2wgPSBpbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2
YXJpYWJsZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICAgICAgaW50ZXJtTm9kZSA9IGludGVybWVk
aWF0ZS5hZGRBc3NpZ24oRU9wSW5pdGlhbGl6ZSwgaW50ZXJtU3ltYm9sLCBpbml0aWFsaXplciwg
bGluZSk7CisgICAgICAgIGlmIChpbnRlcm1Ob2RlID09IDApIHsKKyAgICAgICAgICAgIGFzc2ln
bkVycm9yKGxpbmUsICI9IiwgaW50ZXJtU3ltYm9sLT5nZXRDb21wbGV0ZVN0cmluZygpLCBpbml0
aWFsaXplci0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgaW50ZXJtTm9kZSA9IDA7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChU
SW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSkKK3sKKyAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0
cnVjdG9yKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgYWxsQ29uc3RhbnQg
PSB0cnVlOworCisgICAgLy8gY2hlY2sgaWYgYWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3Rh
bnRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5zZXJ0ZWQgaW50byAKKyAgICAvLyB0aGUgcGFyZW50
IG5vZGUKKyAgICBpZiAoYWdnck5vZGUpIHsKKyAgICAgICAgVEludGVybVNlcXVlbmNlICZjaGls
ZFNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOworICAgICAgICBmb3Ig
KFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IGNoaWxkU2VxdWVuY2VWZWN0b3IuYmVnaW4o
KTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IGNoaWxkU2VxdWVu
Y2VWZWN0b3IuZW5kKCk7IHArKykgeworICAgICAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVk
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhbGxDb25zdGFudDsKK30KKworLy8gVGhp
cyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcGFy
YW1ldGVycyBwYXNzZWQgdG8gdmFyaW91cyBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKKy8vIGFuZCBh
bHNvIGNvbnZlcnQgdGhlbSB0byB0aGUgcmlnaHQgZGF0YXR5cGUgaWYgaXQgaXMgYWxsb3dlZCBh
bmQgcmVxdWlyZWQuIAorLy8KKy8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0
cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBvciB0eXBlZCkgZm9yIG5vIGVycm9yLgorLy8KK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqIG5vZGUs
IGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRGdW5jdGlvbiogZm5DYWxsLCBUU291
cmNlTG9jIGxpbmUpCit7CisgICAgaWYgKG5vZGUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7
CisgICAgCisgICAgVFR5cGVMaXN0OjppdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0
cnVjdCgpLT5iZWdpbigpOworICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7Cisg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5l
c3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAg
ICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAg
ICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOworICAgIGlm
IChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFy
cmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25l
IHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVj
dFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEs
IG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25z
dHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUs
ICgqbWVtYmVyVHlwZXMpLnR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwg
bm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKG5ld05vZGUgJiYg
bmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgeworICAgICAgICAgICAgVEludGVybVR5cGVkKiBj
b25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisgICAgCisgICAgLy8KKyAgICAvLyBIYW5kbGUgbGlz
dCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVj
dG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCisgICAgLy8gaWYgdGhl
IHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwg
dGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBhcmFtZXRlcgorICAgIAorICAgIGludCBwYXJh
bUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRl
ciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAgICAKKyAgICAvLyBmb3IgZWFjaCBwYXJhbWV0
ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlw
ZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAorICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlm
IHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisgICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3Rv
cnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9u
IGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAg
PSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKKyAg
ICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1
Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCks
IHRydWUpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAg
ICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAobWVtYmVyVHlwZXNbcGFyYW1D
b3VudF0pLnR5cGUsIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3As
ICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG5ld05v
ZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3Ry
dWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUo
KSwgKnR5cGUpOworICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gY29u
c3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRl
KiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9
IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUp
OworICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNl
OworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
dHlwZS5nZXRPYmplY3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUu
cGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXks
IGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBh
cnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBh
Z2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmV0dXJuVmFsKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJu
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIHR5cGUsIGFnZ3JOb2Rl
LT5nZXRMaW5lKCkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvLyBGdW5jdGlvbiBm
b3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24uIENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFw
cHJvcHJpYXRlIEVPcCB2YWx1ZQorLy8gZm9yIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVj
dG9yIChwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbikuIEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cwor
Ly8gdGhlIHBhcmFtZXRlciB0eXBlcyBjb3JyZWN0bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0
cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFuZCBpcyBwYXNzZWQgYSAKKy8vIGZsb2F0LCB0aGVuIGZs
b2F0IGlzIGNvbnZlcnRlZCB0byBpbnQuCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBv
ciB0aGUgY29uc3RydWN0ZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVy
bU5vZGUqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVy
bVR5cGVkKiBuZXdOb2RlOworICAgIFRPcGVyYXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAv
LyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQy
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0
cnVjdEZsb2F0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3Ry
dWN0SW50OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6Cisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0Ogor
ICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVj
dEJvb2w7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IobGlu
ZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiLCAiIik7CisgICAgICAgIHJlY292ZXIo
KTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbmV3Tm9kZSA9IGludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJs
ZSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkgeworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3Qg
Y29udmVydCIsICJjb25zdHJ1Y3RvciIsICIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJlIHN0aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0
byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVlZCBvbmUsIGFkZCBvbmUuCisgICAgLy8K
KyAgICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0IGVhcmx5LgorICAgIGlmIChzdWJzZXQg
fHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5nZXRUeXBlKCkgPT0gKnR5cGUpKQorICAg
ICAgICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwg
aW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3RvciwgYXMgbmVlZGVkLgorICAgIHJl
dHVybiBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUp
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgdHlwZSBvZiB0aGUgcGFyYW1l
dGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJhaXNlcworLy8gYW4gZXJyb3Ig
bWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVy
IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJv
ciBvciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhlIGV4cGVjdGVkIGFuZCB0aGUgZ2l2ZW4g
cGFyYW1ldGVyIHR5cGVzIG1hdGNoLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
Y29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiBub2RlLCBUVHlwZSogdHlwZSwgaW50IHBhcmFt
Q291bnQsIFRTb3VyY2VMb2MgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgaWYgKCp0eXBlID09
IG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgIGlmIChzdWJzZXQpCisg
ICAgICAgICAgICByZXR1cm4gbm9kZS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5vZGUtPmdl
dEFzVHlwZWQoKSwgRU9wQ29uc3RydWN0U3RydWN0LCBsaW5lKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBlcnJvcihsaW5lLCAiIiwgImNvbnN0cnVjdG9yIiwgImNhbm5vdCBjb252ZXJ0IHBhcmFt
ZXRlciAlZCBmcm9tICclcycgdG8gJyVzJyIsIHBhcmFtQ291bnQsCisgICAgICAgICAgICAgICAg
bm9kZS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgdHlwZS0+Z2V0
QmFzaWNTdHJpbmcoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdHJlZSByZXByZXNlbnRh
dGlvbiBmb3IgdGhlIHZlY3RvciBmaWVsZChzKSBiZWluZyBhY2Nlc3NlZCBmcm9tIGNvbnRhbnQg
dmVjdG9yLgorLy8gSWYgb25seSBvbmUgY29tcG9uZW50IG9mIHZlY3RvciBpcyBhY2Nlc3NlZCAo
di54IG9yIHZbMF0gd2hlcmUgdiBpcyBhIGNvbnRhbnQgdmVjdG9yKSwgdGhlbiBhIGNvbnRhbnQg
bm9kZSBpcworLy8gcmV0dXJuZWQsIGVsc2UgYW4gYWdncmVnYXRlIG5vZGUgaXMgcmV0dXJuZWQg
KGZvciB2Lnh5KS4gVGhlIGlucHV0IHRvIHRoaXMgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIHRo
ZSBzeW1ib2wKKy8vIG5vZGUgb3IgaXQgY291bGQgYmUgdGhlIGludGVybWVkaWF0ZSB0cmVlIHJl
cHJlc2VudGF0aW9uIG9mIGFjY2Vzc2luZyBmaWVsZHMgaW4gYSBjb25zdGFudCBzdHJ1Y3R1cmUg
b3IgY29sdW1uIG9mIAorLy8gYSBjb25zdGFudCBtYXRyaXguCisvLworVEludGVybVR5cGVkKiBU
UGFyc2VDb250ZXh0OjphZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBU
SW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKK3sKKyAgICBUSW50ZXJtVHlwZWQq
IHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworCisgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICB1bmlvbkFycmF5ID0g
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgICAgICBpZiAo
IXVuaW9uQXJyYXkpIHsgIC8vIHRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgcmFp
c2VkCisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsICJDb25zdGFudFVuaW9uIG5vdCBpbml0aWFsaXplZCBpbiBhZGRDb25zdFZlY3Rvck5vZGUg
ZnVuY3Rpb24iLCBsaW5lKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBUaGUgbm9kZSBoYXMgdG8g
YmUgZWl0aGVyIGEgc3ltYm9sIG5vZGUgb3IgYW4gYWdncmVnYXRlIG5vZGUgb3IgYSB0ZW1wQ29u
c3RhbnQgbm9kZSwgZWxzZSwgaXRzIGFuIGVycm9yCisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIHZlY3RvciIsICJFcnJvciIsICIiKTsKKyAgICAgICAgcmVjb3Zl
cigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIENvbnN0YW50VW5pb24qIGNv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltmaWVsZHMubnVtXTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgaSsrKSB7CisgICAgICAgIGlmIChmaWVsZHMub2Zmc2V0
c1tpXSA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpKSB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiIiwgIlsiLCAidmVjdG9yIGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2Ug
JyVkJyIsIGZpZWxkcy5vZmZzZXRzW2ldKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbZmllbGRzLm9mZnNldHNbaV1dOworCisgICAg
fSAKKyAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFy
cmF5LCBub2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisK
Ky8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbHVtbiBiZWluZyBhY2Nlc3NlZCBm
cm9tIGEgY29uc3RhbnQgbWF0cml4LiBUaGUgdmFsdWVzIGFyZSByZXRyaWV2ZWQgZnJvbQorLy8g
dGhlIHN5bWJvbCB0YWJsZSBhbmQgcGFyc2UtdHJlZSBpcyBidWlsdCBmb3IgYSB2ZWN0b3IgKGVh
Y2ggY29sdW1uIG9mIGEgbWF0cml4IGlzIGEgdmVjdG9yKS4gVGhlIGlucHV0IAorLy8gdG8gdGhl
IGZ1bmN0aW9uIGNvdWxkIGVpdGhlciBiZSBhIHN5bWJvbCBub2RlIChtWzBdIHdoZXJlIG0gaXMg
YSBjb25zdGFudCBtYXRyaXgpdGhhdCByZXByZXNlbnRzIGEgCisvLyBjb25zdGFudCBtYXRyaXgg
b3IgaXQgY291bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0YW50IG1h
dHJpeCAocy5tMVswXSB3aGVyZSBzIGlzIGEgY29uc3RhbnQgc3RydWN0dXJlKQorLy8KK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXRyaXhOb2RlKGludCBpbmRleCwgVElu
dGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCit7CisgICAgVEludGVybVR5cGVkKiB0
eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBu
b2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAi
bWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsIGluZGV4KTsKKyAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleCA9IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBD
b25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1w
Q29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICAgaW50IHNpemUg
PSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAg
IHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3Np
emUqaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIs
ICJFcnJvciIsICIiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyBhbiBlbGVtZW50IG9mIGFuIGFycmF5IGFjY2Vzc2VkIGZyb20gYSBjb25zdGFu
dCBhcnJheS4gVGhlIHZhbHVlcyBhcmUgcmV0cmlldmVkIGZyb20KKy8vIHRoZSBzeW1ib2wgdGFi
bGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVpbHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LiBU
aGUgaW5wdXQgCisvLyB0byB0aGUgZnVuY3Rpb24gY291bGQgZWl0aGVyIGJlIGEgc3ltYm9sIG5v
ZGUgKGFbMF0gd2hlcmUgYSBpcyBhIGNvbnN0YW50IGFycmF5KXRoYXQgcmVwcmVzZW50cyBhIAor
Ly8gY29uc3RhbnQgYXJyYXkgb3IgaXQgY291bGQgYmUgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24g
b2YgdGhlIGNvbnN0YW50IGFycmF5IChzLmExWzBdIHdoZXJlIHMgaXMgYSBjb25zdGFudCBzdHJ1
Y3R1cmUpCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdEFycmF5Tm9k
ZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQoreworICAg
IFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1w
Q29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgVFR5cGUgYXJy
YXlFbGVtZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBhcnJheUVsZW1lbnRUeXBlLmNs
ZWFyQXJyYXluZXNzKCk7CisKKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFy
cmF5U2l6ZSgpKSB7CisgICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsICJhcnJheSBmaWVsZCBz
ZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBpbmRleCk7CisgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKworICAgIGludCBhcnJheUVsZW1lbnRTaXplID0g
YXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBpZiAodGVtcENvbnN0YW50
Tm9kZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFu
dE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICog
aW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVy
cm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgaW5zaWRlIGEgY29uc3RhbnQg
c3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCisvLyBJZiB0aGVyZSBpcyBhbiBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0
TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKKy8vIGZ1bmN0aW9uIGFuZCByZXR1cm5z
IHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQor
eworICAgIFRUeXBlTGlzdCogZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwor
ICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2RlOworICAgIGludCBpbnN0YW5jZVNpemUgPSAwOwor
ICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKworICAgIGZvciAo
IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMtPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBp
ZiAoKCpmaWVsZHMpW2luZGV4XS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSBpZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluc3Rh
bmNlU2l6ZSArPSAoKmZpZWxkcylbaW5kZXhdLnR5cGUtPmdldE9iamVjdFNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25z
dGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKTsKKworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgc3RydWN0dXJlIiwgIkVycm9yIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8v
IEluaXRpYWxpemUgYWxsIHN1cHBvcnRlZCBleHRlbnNpb25zIHRvIGRpc2FibGUKKy8vCit2b2lk
IFRQYXJzZUNvbnRleHQ6OmluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlvcigpCit7CisgICAgLy8K
KyAgICAvLyBleGFtcGxlIGNvZGU6IGV4dGVuc2lvbkJlaGF2aW9yWyJ0ZXN0Il0gPSBFQmhEaXNh
YmxlOyAvLyB3aGVyZSAidGVzdCIgaXMgdGhlIG5hbWUgb2YgCisgICAgLy8gc3VwcG9ydGVkIGV4
dGVuc2lvbgorICAgIC8vCisgICAgZXh0ZW5zaW9uQmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3Jl
Y3RhbmdsZSJdID0gRUJoUmVxdWlyZTsKKyAgICBleHRlbnNpb25CZWhhdmlvclsiR0xfM0RMX2Fy
cmF5X29iamVjdHMiXSA9IEVCaERpc2FibGU7Cit9CisKK09TX1RMU0luZGV4IEdsb2JhbFBhcnNl
Q29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKK2Jvb2wgSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggIT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQ
YXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNlZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbGxvY2F0ZSBh
IFRMUyBpbmRleC4KKyAgICAvLworICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfQWxs
b2NUTFNJbmRleCgpOworICAgIAorICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBP
U19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgYWxyZWFkeSBpbml0YWxpc2VkIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkKK3sKKyAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRo
cmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFy
c2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Cisg
ICAgaWYgKGxwUGFyc2VDb250ZXh0ICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRp
YWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGFscmVhZHkgaW5pdGFsaXNl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFRocmVhZFBhcnNlQ29u
dGV4dCAqbHBUaHJlYWREYXRhID0gbmV3IFRUaHJlYWRQYXJzZUNvbnRleHQoKTsKKyAgICBpZiAo
bHBUaHJlYWREYXRhID09IDApIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKTogVW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQgcGFyc2UgY29udGV4dCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbHBUaHJlYWREYXRhLT5scEds
b2JhbFBhcnNlQ29udGV4dCA9IDA7CisgICAgT1NfU2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250
ZXh0SW5kZXgsIGxwVGhyZWFkRGF0YSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVFBhcnNl
Q29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCit7CisgICAgLy8KKyAgICAv
LyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAorICAgIC8vCisKKyAgICBUVGhyZWFk
UGFyc2VDb250ZXh0ICpscFBhcnNlQ29udGV4dCA9IHN0YXRpY19jYXN0PFRUaHJlYWRQYXJzZUNv
bnRleHQgKj4oT1NfR2V0VExTVmFsdWUoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgpKTsKKworICAg
IHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9CisKK2Jvb2wg
RnJlZVBhcnNlQ29udGV4dCgpCit7CisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09
IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VD
b250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1
ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOworICAgIGlmIChscFBhcnNlQ29udGV4dCkKKyAg
ICAgICAgZGVsZXRlIGxwUGFyc2VDb250ZXh0OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKK3sKKyAgICBPU19UTFNJbmRleCB0bHNpSW5kZXgg
PSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKKworICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiRnJl
ZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdsb2JhbFBhcnNlQ29udGV4
dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisKKyAgICByZXR1cm4gT1NfRnJlZVRMU0lu
ZGV4KHRsc2lJbmRleCk7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpZm5kZWYgX1BBUlNFUl9IRUxQ
RVJfSU5DTFVERURfCisjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXworCisjaW5jbHVk
ZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisKK3N0cnVjdCBUTWF0
cml4RmllbGRzIHsKKyAgICBib29sIHdob2xlUm93OworICAgIGJvb2wgd2hvbGVDb2w7CisgICAg
aW50IHJvdzsKKyAgICBpbnQgY29sOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBFQmhSZXF1
aXJlLAorICAgIEVCaEVuYWJsZSwKKyAgICBFQmhXYXJuLAorICAgIEVCaERpc2FibGUKK30gVEJl
aGF2aW9yOworCitzdHJ1Y3QgVFByYWdtYSB7CisgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkg
OiBvcHRpbWl6ZShvKSwgZGVidWcoZCkgeyB9CisgICAgYm9vbCBvcHRpbWl6ZTsKKyAgICBib29s
IGRlYnVnOworICAgIFRQcmFnbWFUYWJsZSBwcmFnbWFUYWJsZTsKK307CisKKy8vCisvLyBUaGUg
Zm9sbG93aW5nIGFyZSBleHRyYSB2YXJpYWJsZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91
cGVkIHRvZ2V0aGVyIHNvCisvLyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRo
b3V0IG5lZWRpbmcgYSBnbG9iYWwuCisvLworc3RydWN0IFRQYXJzZUNvbnRleHQgeworICAgIFRQ
YXJzZUNvbnRleHQoVFN5bWJvbFRhYmxlJiBzeW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVT
aExhbmd1YWdlIGwsIEVTaFNwZWMgcywgVEluZm9TaW5rJiBpcykgOgorICAgICAgICAgICAgaW50
ZXJtZWRpYXRlKGludGVybSksIHN5bWJvbFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1
YWdlKGwpLCBzcGVjKHMpLCB0cmVlUm9vdCgwKSwKKyAgICAgICAgICAgIHJlY292ZXJlZEZyb21F
cnJvcihmYWxzZSksIG51bUVycm9ycygwKSwgbGV4QWZ0ZXJUeXBlKGZhbHNlKSwgbG9vcE5lc3Rp
bmdMZXZlbCgwKSwKKyAgICAgICAgICAgIGluVHlwZVBhcmVuKGZhbHNlKSwgY29udGV4dFByYWdt
YSh0cnVlLCBmYWxzZSkgeyAgfQorICAgIFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8g
dG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCisgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJl
bnRseSBiZWluZyBwYXJzZWQKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworICAgIEVTaExhbmd1
YWdlIGxhbmd1YWdlOyAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1
cmU6IHBhY2sgb3IgdW5wYWNrKQorICAgIEVTaFNwZWMgc3BlYzsgICAgICAgICAgICAgICAgLy8g
VGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBv
ciBXZWJHTC4KKyAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFy
c2UgdHJlZSBiZWluZyBjcmVhdGVkCisgICAgYm9vbCByZWNvdmVyZWRGcm9tRXJyb3I7ICAgICAv
LyB0cnVlIGlmIGEgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLCBidXQgd2UgY29udGludWUgdG8g
cGFyc2UKKyAgICBpbnQgbnVtRXJyb3JzOworICAgIGJvb2wgbGV4QWZ0ZXJUeXBlOyAgICAgICAg
ICAgLy8gdHJ1ZSBpZiB3ZSd2ZSByZWNvZ25pemVkIGEgdHlwZSwgc28gY2FuIG9ubHkgYmUgbG9v
a2luZyBmb3IgYW4gaWRlbnRpZmllcgorICAgIGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAg
Ly8gMCBpZiBvdXRzaWRlIGFsbCBsb29wcworICAgIGJvb2wgaW5UeXBlUGFyZW47ICAgICAgICAg
ICAgLy8gdHJ1ZSBpZiBpbiBwYXJlbnRoZXNlcywgbG9va2luZyBvbmx5IGZvciBhbiBpZGVudGlm
aWVyCisgICAgY29uc3QgVFR5cGUqIGN1cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJu
IHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCisgICAg
Ym9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rp
b24gaGFzIGEgcmV0dXJuCisgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IGV4dGVuc2lvbkJl
aGF2aW9yOworICAgIHZvaWQgaW5pdGlhbGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKKyAgICB2
b2lkIGVycm9yKFRTb3VyY2VMb2MsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpz
elRva2VuLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4u
Lik7CisgICAgYm9vbCByZXNlcnZlZEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcm
IGlkZW50aWZpZXIpOworICAgIHZvaWQgcmVjb3ZlcigpOworCisgICAgYm9vbCBwYXJzZVZlY3Rv
ckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQg
bGluZSk7CisgICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1h
dFNpemUsIFRNYXRyaXhGaWVsZHMmLCBpbnQgbGluZSk7CisgICAgdm9pZCBhc3NpZ25FcnJvcihp
bnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7Cisg
ICAgdm9pZCB1bmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9w
ZXJhbmQpOworICAgIHZvaWQgYmluYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3As
IFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CisgICAgYm9vbCBwcmVjaXNpb25FcnJvckNo
ZWNrKGludCBsaW5lLCBUUHJlY2lzaW9uIHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKTsKKyAg
ICBib29sIGxWYWx1ZUVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJt
VHlwZWQqKTsKKyAgICBib29sIGNvbnN0RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOwor
ICAgIGJvb2wgaW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFy
KiB0b2tlbik7CisgICAgYm9vbCBnbG9iYWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2Jh
bCwgY29uc3QgY2hhciogdG9rZW4pOworICAgIGJvb2wgY29uc3RydWN0b3JFcnJvckNoZWNrKGlu
dCBsaW5lLCBUSW50ZXJtTm9kZSosIFRGdW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKKyAg
ICBib29sIGFycmF5U2l6ZUVycm9yQ2hlY2soaW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwg
aW50JiBzaXplKTsKKyAgICBib29sIGFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwg
VFB1YmxpY1R5cGUgdHlwZSk7CisgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGludCBsaW5l
LCBUUHVibGljVHlwZSB0eXBlKTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhpbnQgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOworICAgIGJvb2wgdm9pZEVycm9yQ2hlY2soaW50LCBjb25zdCBUU3RyaW5nJiwgY29uc3Qg
VFB1YmxpY1R5cGUmKTsKKyAgICBib29sIGJvb2xFcnJvckNoZWNrKGludCwgY29uc3QgVEludGVy
bVR5cGVkKik7CisgICAgYm9vbCBib29sRXJyb3JDaGVjayhpbnQsIGNvbnN0IFRQdWJsaWNUeXBl
Jik7CisgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5
cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIGJvb2wgc3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsKKyAgICBib29s
IHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmll
ciwgY29uc3QgVFR5cGUmIHR5cGUpOworICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0
eXBlKTsKKyAgICBib29sIG5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKTsKKyAgICBib29sIG5vbkluaXRFcnJvckNo
ZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7Cisg
ICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBU
UXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CisgICAgYm9vbCBleHRlbnNp
b25FcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBjaGFyKik7CisgICAgY29uc3QgVEZ1bmN0aW9u
KiBmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJ
biA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJt
Tm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDApOworICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25z
dChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24q
LCBUU291cmNlTG9jKTsKKyAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7CisgICAgVEludGVy
bVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwgVFNvdXJj
ZUxvYywgYm9vbCBzdWJzZXQpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihj
b25zdCBUVHlwZSosIFRPcGVyYXRvciwgVEludGVybU5vZGUqLCBUU291cmNlTG9jLCBib29sIHN1
YnNldCk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxk
cyYsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQ29u
c3RNYXRyaXhOb2RlKGludCAsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOworICAgIFRJbnRl
cm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUs
IFRTb3VyY2VMb2MgbGluZSk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3Ry
aW5nJiAsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOworICAgIGJvb2wgYXJyYXlTZXRNYXhT
aXplKFRJbnRlcm1TeW1ib2wqLCBUVHlwZSosIGludCwgYm9vbCwgVFNvdXJjZUxvYyk7CisgICAg
c3RydWN0IFRQcmFnbWEgY29udGV4dFByYWdtYTsKKyAgICBUU3RyaW5nIEhhc2hFcnJNc2c7Cisg
ICAgYm9vbCBBZnRlckVPRjsKK307CisKK2ludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10s
IGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmKTsKK3ZvaWQgUGFSZXNlcnZl
ZFdvcmQoKTsKK2ludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0Jiwg
VFN5bWJvbComKTsKK2ludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29udGV4
dCYpOwordm9pZCBzZXRJbml0aWFsU3RhdGUoKTsKKwordHlwZWRlZiBUUGFyc2VDb250ZXh0KiBU
UGFyc2VDb250ZXh0UG9pbnRlcjsKK2V4dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xv
YmFsUGFyc2VDb250ZXh0KCk7CisjZGVmaW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQ
YXJzZUNvbnRleHQoKQorCit0eXBlZGVmIHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCit7
CisgICAgVFBhcnNlQ29udGV4dCAqbHBHbG9iYWxQYXJzZUNvbnRleHQ7Cit9IFRUaHJlYWRQYXJz
ZUNvbnRleHQ7CisKKyNlbmRpZiAvLyBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9Qb29sQWxsb2MuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzE4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCisKKyNpZm5kZWYgX01T
Q19WRVIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisK
KyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL29zaW5jbHVkZS5oIgorCitPU19UTFNJbmRleCBQb29sSW5kZXggPSBPU19JTlZBTElEX1RM
U19JTkRFWDsKKwordm9pZCBJbml0aWFsaXplR2xvYmFsUG9vbHMoKQoreworICAgIFRUaHJlYWRH
bG9iYWxQb29scyogZ2xvYmFsUG9vbHM9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+
KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOyAgICAKKyAgICBpZiAoZ2xvYmFsUG9vbHMpCisg
ICAgICAgIHJldHVybjsKKworICAgIFRQb29sQWxsb2NhdG9yICpnbG9iYWxQb29sQWxsb2NhdG9y
ID0gbmV3IFRQb29sQWxsb2NhdG9yKHRydWUpOworCisgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0
aHJlYWREYXRhID0gbmV3IFRUaHJlYWRHbG9iYWxQb29scygpOworICAgIAorICAgIHRocmVhZERh
dGEtPmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBnbG9iYWxQb29sQWxsb2NhdG9yOworICAgICAgICAK
KyAgICBPU19TZXRUTFNWYWx1ZShQb29sSW5kZXgsIHRocmVhZERhdGEpOyAgICAgCisgICAgZ2xv
YmFsUG9vbEFsbG9jYXRvci0+cHVzaCgpOworfQorCit2b2lkIEZyZWVHbG9iYWxQb29scygpCit7
CisgICAgLy8gUmVsZWFzZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhpcyB0aHJlYWQuCisg
ICAgVFRocmVhZEdsb2JhbFBvb2xzKiBnbG9iYWxQb29scz0gc3RhdGljX2Nhc3Q8VFRocmVhZEds
b2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7ICAgIAorICAgIGlmICghZ2xv
YmFsUG9vbHMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBHbG9iYWxQb29sQWxsb2NhdG9y
LnBvcEFsbCgpOworICAgIGRlbGV0ZSAmR2xvYmFsUG9vbEFsbG9jYXRvcjsgICAgICAgCisgICAg
ZGVsZXRlIGdsb2JhbFBvb2xzOworfQorCitib29sIEluaXRpYWxpemVQb29sSW5kZXgoKQorewor
ICAgIC8vIEFsbG9jYXRlIGEgVExTIGluZGV4LgorICAgIGlmICgoUG9vbEluZGV4ID0gT1NfQWxs
b2NUTFNJbmRleCgpKSA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJlZVBvb2xJbmRleCgpCit7Cisg
ICAgLy8gUmVsZWFzZSB0aGUgVExTIGluZGV4LgorICAgIE9TX0ZyZWVUTFNJbmRleChQb29sSW5k
ZXgpOworfQorCitUUG9vbEFsbG9jYXRvciYgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCit7Cisg
ICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWREYXRhID0gc3RhdGljX2Nhc3Q8VFRocmVhZEds
b2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9vbEluZGV4KSk7CisKKyAgICByZXR1cm4gKnRo
cmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0b3I7Cit9CisKK3ZvaWQgU2V0R2xvYmFsUG9vbEFs
bG9jYXRvclB0cihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcikKK3sKKyAgICBUVGhyZWFk
R2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMq
PihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKKworICAgIHRocmVhZERhdGEtPmdsb2JhbFBv
b2xBbGxvY2F0b3IgPSBwb29sQWxsb2NhdG9yOworfQorCisvLworLy8gSW1wbGVtZW50IHRoZSBm
dW5jdGlvbmFsaXR5IG9mIHRoZSBUUG9vbEFsbG9jYXRvciBjbGFzcywgd2hpY2gKKy8vIGlzIGRv
Y3VtZW50ZWQgaW4gUG9vbEFsbG9jLmguCisvLworVFBvb2xBbGxvY2F0b3I6OlRQb29sQWxsb2Nh
dG9yKGJvb2wgZywgaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQp
IDogCisgICAgZ2xvYmFsKGcpLAorICAgIHBhZ2VTaXplKGdyb3d0aEluY3JlbWVudCksCisgICAg
YWxpZ25tZW50KGFsbG9jYXRpb25BbGlnbm1lbnQpLAorICAgIGZyZWVMaXN0KDApLAorICAgIGlu
VXNlTGlzdCgwKSwKKyAgICBudW1DYWxscygwKQoreworICAgIC8vCisgICAgLy8gRG9uJ3QgYWxs
b3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBzbWFsbGVyIHRoYW4gYWxsIGNvbW1vbgorICAgIC8v
IE9TIHBhZ2Ugc2l6ZXMuCisgICAgLy8KKyAgICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCisgICAg
ICAgIHBhZ2VTaXplID0gNCoxMDI0OworCisgICAgLy8KKyAgICAvLyBBIGxhcmdlIGN1cnJlbnRQ
YWdlT2Zmc2V0IGluZGljYXRlcyBhIG5ldyBwYWdlIG5lZWRzIHRvCisgICAgLy8gYmUgb2J0YWlu
ZWQgdG8gYWxsb2NhdGUgbWVtb3J5LgorICAgIC8vCisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBw
YWdlU2l6ZTsKKworICAgIC8vCisgICAgLy8gQWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFz
dCBwb2ludGVyIGFsaWduZWQgYW5kCisgICAgLy8gcG93ZXIgb2YgMi4KKyAgICAvLworICAgIHNp
emVfdCBtaW5BbGlnbiA9IHNpemVvZih2b2lkKik7CisgICAgYWxpZ25tZW50ICY9IH4obWluQWxp
Z24gLSAxKTsKKyAgICBpZiAoYWxpZ25tZW50IDwgbWluQWxpZ24pCisgICAgICAgIGFsaWdubWVu
dCA9IG1pbkFsaWduOworICAgIHNpemVfdCBhID0gMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVu
dCkKKyAgICAgICAgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICAgIGFsaWdubWVudE1h
c2sgPSBhIC0gMTsKKworICAgIC8vCisgICAgLy8gQWxpZ24gaGVhZGVyIHNraXAKKyAgICAvLwor
ICAgIGhlYWRlclNraXAgPSBtaW5BbGlnbjsKKyAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0
SGVhZGVyKSkgeworICAgICAgICBoZWFkZXJTa2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdu
bWVudE1hc2spICYgfmFsaWdubWVudE1hc2s7CisgICAgfQorfQorCitUUG9vbEFsbG9jYXRvcjo6
flRQb29sQWxsb2NhdG9yKCkKK3sKKyAgICBpZiAoIWdsb2JhbCkgeworICAgICAgICAvLworICAg
ICAgICAvLyBUaGVuIHdlIGtub3cgdGhhdCB0aGlzIG9iamVjdCBpcyBub3QgYmVpbmcgCisgICAg
ICAgIC8vIGFsbG9jYXRlZCBhZnRlciBvdGhlciwgZ2xvYmFsbHkgc2NvcGVkIG9iamVjdHMKKyAg
ICAgICAgLy8gdGhhdCBkZXBlbmQgb24gaXQuICBTbyB3ZSBjYW4gZGVsZXRlIHRoZSAiaW4gdXNl
IiBtZW1vcnkuCisgICAgICAgIC8vCisgICAgICAgIHdoaWxlIChpblVzZUxpc3QpIHsKKyAgICAg
ICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5leHRQYWdlOworICAgICAgICAgICAg
aW5Vc2VMaXN0LT5+dEhlYWRlcigpOworICAgICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7CisgICAgICAgICAgICBpblVzZUxpc3QgPSBuZXh0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBmcmVl
IGxpc3QgbWVtb3J5IC0gaXQgY2FuJ3QgYmUgYmVpbmcKKyAgICAvLyAoY29ycmVjdGx5KSByZWZl
cmVuY2VkLCB3aGV0aGVyIHRoZSBwb29sIGFsbG9jYXRvciB3YXMKKyAgICAvLyBnbG9iYWwgb3Ig
bm90LiAgV2Ugc2hvdWxkIG5vdCBjaGVjayB0aGUgZ3VhcmQgYmxvY2tzCisgICAgLy8gaGVyZSwg
YmVjYXVzZSB3ZSBkaWQgaXQgYWxyZWFkeSB3aGVuIHRoZSBibG9jayB3YXMKKyAgICAvLyBwbGFj
ZWQgaW50byB0aGUgZnJlZSBsaXN0LgorICAgIC8vCisgICAgd2hpbGUgKGZyZWVMaXN0KSB7Cisg
ICAgICAgIHRIZWFkZXIqIG5leHQgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGRlbGV0
ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihmcmVlTGlzdCk7CisgICAgICAgIGZyZWVMaXN0
ID0gbmV4dDsKKyAgICB9Cit9CisKKy8vIFN1cHBvcnQgTVNWQysrIDYuMAorY29uc3QgdW5zaWdu
ZWQgY2hhciBUQWxsb2NhdGlvbjo6Z3VhcmRCbG9ja0JlZ2luVmFsID0gMHhmYjsKK2NvbnN0IHVu
c2lnbmVkIGNoYXIgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tFbmRWYWwgICA9IDB4ZmU7Citjb25z
dCB1bnNpZ25lZCBjaGFyIFRBbGxvY2F0aW9uOjp1c2VyRGF0YUZpbGwgICAgICAgPSAweGNkOwor
CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgY29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFy
ZEJsb2NrU2l6ZSA9IDE2OworI2Vsc2UKKyAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1
YXJkQmxvY2tTaXplID0gMDsKKyNlbmRpZgorCisvLworLy8gQ2hlY2sgYSBzaW5nbGUgZ3VhcmQg
YmxvY2sgZm9yIGRhbWFnZQorLy8KK3ZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1
bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxv
Y1RleHQpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBndWFyZEJsb2NrU2l6
ZTsgeCsrKSB7CisgICAgICAgIGlmIChibG9ja01lbVt4XSAhPSB2YWwpIHsKKyAgICAgICAgICAg
IGNoYXIgYXNzZXJ0TXNnWzgwXTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhl
IGFzc2VydCBtZXNzYWdlLiAgSXQncyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KKyAgICAgICAg
ICAgIHNwcmludGYoYXNzZXJ0TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXUgYnl0ZSBhbGxv
Y2F0aW9uIGF0IDB4JXBcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRh
dGEoKSk7CisgICAgICAgICAgICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3Vh
cmQgYmxvY2siKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCit2b2lkIFRQb29sQWxsb2NhdG9y
OjpwdXNoKCkKK3sKKyAgICB0QWxsb2NTdGF0ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQs
IGluVXNlTGlzdCB9OworCisgICAgc3RhY2sucHVzaF9iYWNrKHN0YXRlKTsKKyAgICAgICAgCisg
ICAgLy8KKyAgICAvLyBJbmRpY2F0ZSB0aGVyZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2Nh
dGUgZnJvbS4KKyAgICAvLworICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Cit9CisK
Ky8vCisvLyBEbyBhIG1hc3MtZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxv
Y2F0aW9ucworLy8gdGhhdCBoYXZlIG9jY3VycmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Ig
c2luY2UgdGhlCisvLyBsYXN0IHBvcCgpLCBvciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24u
CisvLworLy8gVGhlIGRlYWxsb2NhdGVkIHBhZ2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9j
YXRpb25zLgorLy8KK3ZvaWQgVFBvb2xBbGxvY2F0b3I6OnBvcCgpCit7CisgICAgaWYgKHN0YWNr
LnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybjsKKworICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFj
ay5iYWNrKCkucGFnZTsKKyAgICBjdXJyZW50UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZz
ZXQ7CisKKyAgICB3aGlsZSAoaW5Vc2VMaXN0ICE9IHBhZ2UpIHsKKyAgICAgICAgLy8gaW52b2tl
IGRlc3RydWN0b3IgdG8gZnJlZSBhbGxvY2F0aW9uIGxpc3QKKyAgICAgICAgaW5Vc2VMaXN0LT5+
dEhlYWRlcigpOworICAgICAgICAKKyAgICAgICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VM
aXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaWYgKGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKKyAg
ICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlz
dDsKKyAgICAgICAgICAgIGZyZWVMaXN0ID0gaW5Vc2VMaXN0OworICAgICAgICB9CisgICAgICAg
IGluVXNlTGlzdCA9IG5leHRJblVzZTsKKyAgICB9CisKKyAgICBzdGFjay5wb3BfYmFjaygpOwor
fQorCisvLworLy8gRG8gYSBtYXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwg
YWxsb2NhdGlvbnMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZC4KKy8vCit2b2lkIFRQb29sQWxsb2Nh
dG9yOjpwb3BBbGwoKQoreworICAgIHdoaWxlIChzdGFjay5zaXplKCkgPiAwKQorICAgICAgICBw
b3AoKTsKK30KKwordm9pZCogVFBvb2xBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRl
cykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlv
bnMgYXJlIGJyYWNrZXRlZCBieQorICAgIC8vIHRoZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9u
XVtndWFyZGJsb2NrXS4gIG51bUJ5dGVzIGlzIGhvdworICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBj
YWxsZXIgYXNrZWQgZm9yLiAgYWxsb2NhdGlvblNpemUgaXMgdGhlIHRvdGFsCisgICAgLy8gc2l6
ZSBpbmNsdWRpbmcgZ3VhcmQgYmxvY2tzLiAgSW4gcmVsZWFzZSBidWlsZCwKKyAgICAvLyBndWFy
ZEJsb2NrU2l6ZT0wIGFuZCB0aGlzIGFsbCBnZXRzIG9wdGltaXplZCBhd2F5LgorICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IFRBbGxvY2F0aW9uOjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7
CisgICAgCisgICAgLy8KKyAgICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVzdGluZyBzdGF0aXN0
aWNzLgorICAgIC8vCisgICAgKytudW1DYWxsczsKKyAgICB0b3RhbEJ5dGVzICs9IG51bUJ5dGVz
OworCisgICAgLy8KKyAgICAvLyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBm
aXJzdCwgZm9yIGVmZmljaWVuY3kuCisgICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRv
IGJlIGlubGluZSBzb21ldGltZS4KKyAgICAvLworICAgIGlmIChjdXJyZW50UGFnZU9mZnNldCAr
IGFsbG9jYXRpb25TaXplIDw9IHBhZ2VTaXplKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFNh
ZmUgdG8gYWxsb2NhdGUgZnJvbSBjdXJyZW50UGFnZU9mZnNldC4KKyAgICAgICAgLy8KKyAgICAg
ICAgdW5zaWduZWQgY2hhciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
ICo+KGluVXNlTGlzdCkgKyBjdXJyZW50UGFnZU9mZnNldDsKKyAgICAgICAgY3VycmVudFBhZ2VP
ZmZzZXQgKz0gYWxsb2NhdGlvblNpemU7CisgICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1
cnJlbnRQYWdlT2Zmc2V0ICsgYWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKKworICAg
ICAgICByZXR1cm4gaW5pdGlhbGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5
dGVzKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwID4gcGFn
ZVNpemUpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRp
b24uICBEb24ndCBtaXggdGhlc2Ugd2l0aCB0aGUgb3RoZXJzLgorICAgICAgICAvLyBUaGUgT1Mg
aXMgZWZmaWNpZW50IGFuZCBhbGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4K
KyAgICAgICAgLy8KKyAgICAgICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25T
aXplICsgaGVhZGVyU2tpcDsKKyAgICAgICAgdEhlYWRlciogbWVtb3J5ID0gcmVpbnRlcnByZXRf
Y2FzdDx0SGVhZGVyKj4oOjpuZXcgY2hhcltudW1CeXRlc1RvQWxsb2NdKTsKKyAgICAgICAgaWYg
KG1lbW9yeSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gVXNlIHBs
YWNlbWVudC1uZXcgdG8gaW5pdGlhbGl6ZSBoZWFkZXIKKyAgICAgICAgbmV3KG1lbW9yeSkgdEhl
YWRlcihpblVzZUxpc3QsIChudW1CeXRlc1RvQWxsb2MgKyBwYWdlU2l6ZSAtIDEpIC8gcGFnZVNp
emUpOworICAgICAgICBpblVzZUxpc3QgPSBtZW1vcnk7CisKKyAgICAgICAgY3VycmVudFBhZ2VP
ZmZzZXQgPSBwYWdlU2l6ZTsgIC8vIG1ha2UgbmV4dCBhbGxvY2F0aW9uIGNvbWUgZnJvbSBhIG5l
dyBwYWdlCisKKyAgICAgICAgLy8gTm8gZ3VhcmQgYmxvY2tzIGZvciBtdWx0aS1wYWdlIGFsbG9j
YXRpb25zICh5ZXQpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWVtb3J5KSArIGhlYWRlclNraXApOworICAgIH0KKwor
ICAgIC8vCisgICAgLy8gTmVlZCBhIHNpbXBsZSBwYWdlIHRvIGFsbG9jYXRlIGZyb20uCisgICAg
Ly8KKyAgICB0SGVhZGVyKiBtZW1vcnk7CisgICAgaWYgKGZyZWVMaXN0KSB7CisgICAgICAgIG1l
bW9yeSA9IGZyZWVMaXN0OworICAgICAgICBmcmVlTGlzdCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIq
Pig6Om5ldyBjaGFyW3BhZ2VTaXplXSk7CisgICAgICAgIGlmIChtZW1vcnkgPT0gMCkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRvIGlu
aXRpYWxpemUgaGVhZGVyCisgICAgbmV3KG1lbW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIDEpOwor
ICAgIGluVXNlTGlzdCA9IG1lbW9yeTsKKyAgICAKKyAgICB1bnNpZ25lZCBjaGFyKiByZXQgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGhlYWRlclNraXA7
CisgICAgY3VycmVudFBhZ2VPZmZzZXQgPSAoaGVhZGVyU2tpcCArIGFsbG9jYXRpb25TaXplICsg
YWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKKworICAgIHJldHVybiBpbml0aWFsaXpl
QWxsb2NhdGlvbihpblVzZUxpc3QsIHJldCwgbnVtQnl0ZXMpOworfQorCisKKy8vCisvLyBDaGVj
ayBhbGwgYWxsb2NhdGlvbnMgaW4gYSBsaXN0IGZvciBkYW1hZ2UgYnkgY2FsbGluZyBjaGVjayBv
biBlYWNoLgorLy8KK3ZvaWQgVEFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0KCkgY29uc3QKK3sK
KyAgICBmb3IgKGNvbnN0IFRBbGxvY2F0aW9uKiBhbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFs
bG9jID0gYWxsb2MtPnByZXZBbGxvYykKKyAgICAgICAgYWxsb2MtPmNoZWNrKCk7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL1Bvb2xBbGxvYy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBfUE9PTEFMTE9DX0lOQ0xVREVEXworI2RlZmluZSBfUE9PTEFMTE9D
X0lOQ0xVREVEXworCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIEdVQVJEX0JMT0NLUyAgLy8gZGVm
aW5lIHRvIGVuYWJsZSBndWFyZCBibG9jayBzYW5pdHkgY2hlY2tpbmcKKyNlbmRpZgorCisvLwor
Ly8gVGhpcyBoZWFkZXIgZGVmaW5lcyBhbiBhbGxvY2F0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBl
ZmZpY2llbnRseQorLy8gYWxsb2NhdGUgYSBsYXJnZSBudW1iZXIgb2Ygc21hbGwgcmVxdWVzdHMg
Zm9yIGhlYXAgbWVtb3J5LCB3aXRoIHRoZSAKKy8vIGludGVudGlvbiB0aGF0IHRoZXkgYXJlIG5v
dCBpbmRpdmlkdWFsbHkgZGVhbGxvY2F0ZWQsIGJ1dCByYXRoZXIgCisvLyBjb2xsZWN0aXZlbHkg
ZGVhbGxvY2F0ZWQgYXQgb25lIHRpbWUuCisvLworLy8gVGhpcyBzaW11bHRhbmVvdXNseQorLy8K
Ky8vICogTWFrZXMgZWFjaCBpbmRpdmlkdWFsIGFsbG9jYXRpb24gbXVjaCBtb3JlIGVmZmljaWVu
dDsgdGhlCisvLyAgICAgdHlwaWNhbCBhbGxvY2F0aW9uIGlzIHRyaXZpYWwuCisvLyAqIENvbXBs
ZXRlbHkgYXZvaWRzIHRoZSBjb3N0IG9mIGRvaW5nIGluZGl2aWR1YWwgZGVhbGxvY2F0aW9uLgor
Ly8gKiBTYXZlcyB0aGUgdHJvdWJsZSBvZiB0cmFja2luZyBkb3duIGFuZCBwbHVnZ2luZyBhIGxh
cmdlIGNsYXNzIG9mIGxlYWtzLgorLy8KKy8vIEluZGl2aWR1YWwgY2xhc3NlcyBjYW4gdXNlIHRo
aXMgYWxsb2NhdG9yIGJ5IHN1cHBseWluZyB0aGVpciBvd24KKy8vIG5ldyBhbmQgZGVsZXRlIG1l
dGhvZHMuCisvLworLy8gU1RMIGNvbnRhaW5lcnMgY2FuIHVzZSB0aGlzIGFsbG9jYXRvciBieSB1
c2luZyB0aGUgcG9vbF9hbGxvY2F0b3IKKy8vIGNsYXNzIGFzIHRoZSBhbGxvY2F0b3IgKHNlY29u
ZCkgdGVtcGxhdGUgYXJndW1lbnQuCisvLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvLyBJZiB3ZSBhcmUgdXNpbmcgZ3Vh
cmQgYmxvY2tzLCB3ZSBtdXN0IHRyYWNrIGVhY2ggaW5kaXZ1YWwKKy8vIGFsbG9jYXRpb24uICBJ
ZiB3ZSBhcmVuJ3QgdXNpbmcgZ3VhcmQgYmxvY2tzLCB0aGVzZQorLy8gbmV2ZXIgZ2V0IGluc3Rh
bnRpYXRlZCwgc28gd29uJ3QgaGF2ZSBhbnkgaW1wYWN0LgorLy8gCisKK2NsYXNzIFRBbGxvY2F0
aW9uIHsKK3B1YmxpYzoKKyAgICBUQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hh
ciogbWVtLCBUQWxsb2NhdGlvbiogcHJldiA9IDApIDoKKyAgICAgICAgc2l6ZShzaXplKSwgbWVt
KG1lbSksIHByZXZBbGxvYyhwcmV2KSB7CisgICAgICAgIC8vIEFsbG9jYXRpb25zIGFyZSBicmFj
a2V0ZWQ6CisgICAgICAgIC8vICAgIFthbGxvY2F0aW9uSGVhZGVyXVtpbml0aWFsR3VhcmRCbG9j
a11bdXNlckRhdGFdW2ZpbmFsR3VhcmRCbG9ja10KKyAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSBj
bGVhbmVyIHdpdGggaWYgKGd1YXJkQmxvY2tTaXplKS4uLiwgYnV0IHRoYXQKKyAgICAgICAgLy8g
bWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHdhcm5pbmdzIGFib3V0IDAgbGVuZ3RoIG1lbXNldHMs
CisgICAgICAgIC8vIGV2ZW4gd2l0aCB0aGUgaWYoKSBwcm90ZWN0aW5nIHRoZW0uCisjaWZkZWYg
R1VBUkRfQkxPQ0tTCisgICAgICAgIG1lbXNldChwcmVHdWFyZCgpLCBndWFyZEJsb2NrQmVnaW5W
YWwsIGd1YXJkQmxvY2tTaXplKTsKKyAgICAgICAgbWVtc2V0KGRhdGEoKSwgICAgICB1c2VyRGF0
YUZpbGwsICAgICAgIHNpemUpOworICAgICAgICBtZW1zZXQocG9zdEd1YXJkKCksIGd1YXJkQmxv
Y2tFbmRWYWwsICAgZ3VhcmRCbG9ja1NpemUpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBj
aGVjaygpIGNvbnN0IHsKKyAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHByZUd1YXJkKCksICBndWFy
ZEJsb2NrQmVnaW5WYWwsICJiZWZvcmUiKTsKKyAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RH
dWFyZCgpLCBndWFyZEJsb2NrRW5kVmFsLCAgICJhZnRlciIpOworICAgIH0KKworICAgIHZvaWQg
Y2hlY2tBbGxvY0xpc3QoKSBjb25zdDsKKworICAgIC8vIFJldHVybiB0b3RhbCBzaXplIG5lZWRl
ZCB0byBhY2NvbW9kYXRlIHVzZXIgYnVmZmVyIG9mICdzaXplJywKKyAgICAvLyBwbHVzIG91ciB0
cmFja2luZyBkYXRhLgorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNp
emVfdCBzaXplKSB7CisgICAgICAgIHJldHVybiBzaXplICsgMiAqIGd1YXJkQmxvY2tTaXplICsg
aGVhZGVyU2l6ZSgpOworICAgIH0KKworICAgIC8vIE9mZnNldCBmcm9tIHN1cnJvdW5kaW5nIGJ1
ZmZlciB0byBnZXQgdG8gdXNlciBkYXRhIGJ1ZmZlci4KKyAgICBpbmxpbmUgc3RhdGljIHVuc2ln
bmVkIGNoYXIqIG9mZnNldEFsbG9jYXRpb24odW5zaWduZWQgY2hhciogbSkgeworICAgICAgICBy
ZXR1cm4gbSArIGd1YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5z
aWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0OworCisgICAgLy8gRmlu
ZCBvZmZzZXRzIHRvIHByZSBhbmQgcG9zdCBndWFyZCBibG9ja3MsIGFuZCB1c2VyIGRhdGEgYnVm
ZmVyCisgICAgdW5zaWduZWQgY2hhciogcHJlR3VhcmQoKSAgY29uc3QgeyByZXR1cm4gbWVtICsg
aGVhZGVyU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgY2hhciogZGF0YSgpICAgICAgY29uc3QgeyBy
ZXR1cm4gcHJlR3VhcmQoKSArIGd1YXJkQmxvY2tTaXplOyB9CisgICAgdW5zaWduZWQgY2hhciog
cG9zdEd1YXJkKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZTsgfQorCisgICAgc2l6ZV90
IHNpemU7ICAgICAgICAgICAgICAgICAgLy8gc2l6ZSBvZiB0aGUgdXNlciBkYXRhIGFyZWEKKyAg
ICB1bnNpZ25lZCBjaGFyKiBtZW07ICAgICAgICAgICAvLyBiZWdpbm5pbmcgb2Ygb3VyIGFsbG9j
YXRpb24gKHB0cyB0byBoZWFkZXIpCisgICAgVEFsbG9jYXRpb24qIHByZXZBbGxvYzsgICAgICAg
Ly8gcHJpb3IgYWxsb2NhdGlvbiBpbiB0aGUgY2hhaW4KKworICAgIC8vIFN1cHBvcnQgTVNWQysr
IDYuMAorICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tCZWdpblZhbDsK
KyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2NrRW5kVmFsOworICAgIGNv
bnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIHVzZXJEYXRhRmlsbDsKKworICAgIGNvbnN0IHN0YXRp
YyBzaXplX3QgZ3VhcmRCbG9ja1NpemU7CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgaW5saW5l
IHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihUQWxsb2NhdGlvbik7
IH0KKyNlbHNlCisgICAgaW5saW5lIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJu
IDA7IH0KKyNlbmRpZgorfTsKKworLy8KKy8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YWNrcy4gIE9u
ZSBpcyB0byB0cmFjayB0aGUgcHVzaGluZyBhbmQgcG9wcGluZworLy8gb2YgdGhlIHVzZXIsIGFu
ZCBub3QgeWV0IGltcGxlbWVudGVkLiAgVGhlIG90aGVycyBhcmUgc2ltcGx5IGEgCisvLyByZXBv
c2l0b3JpZXMgb2YgZnJlZSBwYWdlcyBvciB1c2VkIHBhZ2VzLgorLy8KKy8vIFBhZ2Ugc3RhY2tz
IGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aCBhIHNpbXBsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmlu
ZworLy8gb2YgZWFjaCBhbGxvY2F0aW9uIG9idGFpbmVkIGZyb20gdGhlIHVuZGVybHlpbmcgT1Mu
ICBNdWx0aS1wYWdlIGFsbG9jYXRpb25zCisvLyBhcmUgcmV0dXJuZWQgdG8gdGhlIE9TLiAgSW5k
aXZpZHVhbCBwYWdlIGFsbG9jYXRpb25zIGFyZSBrZXB0IGZvciBmdXR1cmUKKy8vIHJlLXVzZS4K
Ky8vCisvLyBUaGUgInBhZ2Ugc2l6ZSIgdXNlZCBpcyBub3QsIG5vciBtdXN0IGl0IG1hdGNoLCB0
aGUgdW5kZXJseWluZyBPUworLy8gcGFnZSBzaXplLiAgQnV0LCBoYXZpbmcgaXQgYmUgYWJvdXQg
dGhhdCBzaXplIG9yIGVxdWFsIHRvIGEgc2V0IG9mIAorLy8gcGFnZXMgaXMgbGlrZWx5IG1vc3Qg
b3B0aW1hbC4KKy8vCitjbGFzcyBUUG9vbEFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgVFBvb2xB
bGxvY2F0b3IoYm9vbCBnbG9iYWwgPSBmYWxzZSwgaW50IGdyb3d0aEluY3JlbWVudCA9IDgqMTAy
NCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQgPSAxNik7CisKKyAgICAvLworICAgIC8vIERvbid0
IGNhbGwgdGhlIGRlc3RydWN0b3IganVzdCB0byBmcmVlIHVwIHRoZSBtZW1vcnksIGNhbGwgcG9w
KCkKKyAgICAvLworICAgIH5UUG9vbEFsbG9jYXRvcigpOworCisgICAgLy8KKyAgICAvLyBDYWxs
IHB1c2goKSB0byBlc3RhYmxpc2ggYSBuZXcgcGxhY2UgdG8gcG9wIG1lbW9yeSB0b28uICBEb2Vz
IG5vdAorICAgIC8vIGhhdmUgdG8gYmUgY2FsbGVkIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KKyAg
ICAvLworICAgIHZvaWQgcHVzaCgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIHBvcCgpIHRvIGZy
ZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBwdXNoKCksCisg
ICAgLy8gb3IgaWYgbm8gbGFzdCBjYWxsIHRvIHB1c2gsIGZyZWVzIGFsbCBtZW1vcnkgc2luY2Ug
Zmlyc3QgYWxsb2NhdGlvbi4KKyAgICAvLworICAgIHZvaWQgcG9wKCk7CisKKyAgICAvLworICAg
IC8vIENhbGwgcG9wQWxsKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZC4KKyAgICAvLwor
ICAgIHZvaWQgcG9wQWxsKCk7CisKKyAgICAvLworICAgIC8vIENhbGwgYWxsb2NhdGUoKSB0byBh
Y3R1YWxseSBhY3F1aXJlIG1lbW9yeS4gIFJldHVybnMgMCBpZiBubyBtZW1vcnkKKyAgICAvLyBh
dmFpbGFibGUsIG90aGVyd2lzZSBhIHByb3Blcmx5IGFsaWduZWQgcG9pbnRlciB0byAnbnVtQnl0
ZXMnIG9mIG1lbW9yeS4KKyAgICAvLworICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBudW1CeXRl
cyk7CisKKyAgICAvLworICAgIC8vIFRoZXJlIGlzIG5vIGRlYWxsb2NhdGUuICBUaGUgcG9pbnQg
b2YgdGhpcyBjbGFzcyBpcyB0aGF0CisgICAgLy8gZGVhbGxvY2F0aW9uIGNhbiBiZSBza2lwcGVk
IGJ5IHRoZSB1c2VyIG9mIGl0LCBhcyB0aGUgbW9kZWwKKyAgICAvLyBvZiB1c2UgaXMgdG8gc2lt
dWx0YW5lb3VzbHkgZGVhbGxvY2F0ZSBldmVyeXRoaW5nIGF0IG9uY2UKKyAgICAvLyBieSBjYWxs
aW5nIHBvcCgpLCBhbmQgdG8gbm90IGhhdmUgdG8gc29sdmUgbWVtb3J5IGxlYWsgcHJvYmxlbXMu
CisgICAgLy8KKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBzdHJ1Y3QgdEhlYWRlcjsKKyAgICAK
KyAgICBzdHJ1Y3QgdEhlYWRlciB7CisgICAgICAgIHRIZWFkZXIodEhlYWRlciogbmV4dFBhZ2Us
IHNpemVfdCBwYWdlQ291bnQpIDoKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgICAgIGxh
c3RBbGxvY2F0aW9uKDApLAorI2VuZGlmCisgICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSks
CisgICAgICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50KSB7IH0KKworICAgICAgICB+dEhlYWRl
cigpIHsKKyNpZmRlZiBHVUFSRF9CTE9DS1MKKyAgICAgICAgICAgIGlmIChsYXN0QWxsb2NhdGlv
bikKKyAgICAgICAgICAgICAgICBsYXN0QWxsb2NhdGlvbi0+Y2hlY2tBbGxvY0xpc3QoKTsKKyNl
bmRpZgorICAgICAgICB9CisKKyAgICAgICAgdEhlYWRlciogbmV4dFBhZ2U7CisgICAgICAgIHNp
emVfdCBwYWdlQ291bnQ7CisjaWZkZWYgR1VBUkRfQkxPQ0tTCisgICAgICAgIFRBbGxvY2F0aW9u
KiBsYXN0QWxsb2NhdGlvbjsKKyNlbmRpZgorICAgIH07CisKKyAgICBzdHJ1Y3QgdEFsbG9jU3Rh
dGUgeworICAgICAgICBzaXplX3Qgb2Zmc2V0OworICAgICAgICB0SGVhZGVyKiBwYWdlOworICAg
IH07CisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx0QWxsb2NTdGF0ZT4gdEFsbG9jU3RhY2s7CisK
KyAgICAvLyBUcmFjayBhbGxvY2F0aW9ucyBpZiBhbmQgb25seSBpZiB3ZSdyZSB1c2luZyBndWFy
ZCBibG9ja3MKKyAgICB2b2lkKiBpbml0aWFsaXplQWxsb2NhdGlvbih0SGVhZGVyKiBibG9jaywg
dW5zaWduZWQgY2hhciogbWVtb3J5LCBzaXplX3QgbnVtQnl0ZXMpIHsKKyNpZmRlZiBHVUFSRF9C
TE9DS1MKKyAgICAgICAgbmV3KG1lbW9yeSkgVEFsbG9jYXRpb24obnVtQnl0ZXMsIG1lbW9yeSwg
YmxvY2stPmxhc3RBbGxvY2F0aW9uKTsKKyAgICAgICAgYmxvY2stPmxhc3RBbGxvY2F0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDxUQWxsb2NhdGlvbio+KG1lbW9yeSk7CisjZW5kaWYKKyAgICAgICAg
Ly8gVGhpcyBpcyBvcHRpbWl6ZWQgZW50aXJlbHkgYXdheSBpZiBHVUFSRF9CTE9DS1MgaXMgbm90
IGRlZmluZWQuCisgICAgICAgIHJldHVybiBUQWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2NhdGlvbiht
ZW1vcnkpOworICAgIH0KKworICAgIGJvb2wgZ2xvYmFsOyAgICAgICAgICAgIC8vIHNob3VsZCBi
ZSB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIGdsb2JhbGx5IHNjb3BlZAorICAgIHNpemVfdCBwYWdl
U2l6ZTsgICAgICAgIC8vIGdyYW51bGFyaXR5IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKKyAg
ICBzaXplX3QgYWxpZ25tZW50OyAgICAgICAvLyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2ls
bCBiZSBhbGlnbmVkIGF0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3Jh
bnVsYXJpdHksIHdoaWNoIHdpbGwgYmUgYSBwb3dlciBvZiAyCisgICAgc2l6ZV90IGFsaWdubWVu
dE1hc2s7CisgICAgc2l6ZV90IGhlYWRlclNraXA7ICAgICAgLy8gYW1vdW50IG9mIG1lbW9yeSB0
byBza2lwIHRvIG1ha2Ugcm9vbSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICBoZWFkZXIgKGJhc2ljYWxseSwgc2l6ZSBvZiBoZWFkZXIsIHJvdW5kZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHVwIHRvIG1ha2UgaXQgYWxpZ25lZAorICAg
IHNpemVfdCBjdXJyZW50UGFnZU9mZnNldDsgIC8vIG5leHQgb2Zmc2V0IGluIHRvcCBvZiBpblVz
ZUxpc3QgdG8gYWxsb2NhdGUgZnJvbQorICAgIHRIZWFkZXIqIGZyZWVMaXN0OyAgICAgIC8vIGxp
c3Qgb2YgcG9wcGVkIG1lbW9yeQorICAgIHRIZWFkZXIqIGluVXNlTGlzdDsgICAgIC8vIGxpc3Qg
b2YgYWxsIG1lbW9yeSBjdXJyZW50bHkgYmVpbmcgdXNlZAorICAgIHRBbGxvY1N0YWNrIHN0YWNr
OyAgICAgIC8vIHN0YWNrIG9mIHdoZXJlIHRvIGFsbG9jYXRlIGZyb20sIHRvIHBhcnRpdGlvbiBw
b29sCisKKyAgICBpbnQgbnVtQ2FsbHM7ICAgICAgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5n
IHN0YXRpc3RpYworICAgIHNpemVfdCB0b3RhbEJ5dGVzOyAgICAgIC8vIGp1c3QgYW4gaW50ZXJl
c3Rpbmcgc3RhdGlzdGljCitwcml2YXRlOgorICAgIFRQb29sQWxsb2NhdG9yJiBvcGVyYXRvcj0o
Y29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgYXNzaWdubWVudCBvcGVyYXRv
cgorICAgIFRQb29sQWxsb2NhdG9yKGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFs
bG93IGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcgorfTsKKworCisvLworLy8gVGhlcmUgY291bGQg
cG90ZW50aWFsbHkgYmUgbWFueSBwb29scyB3aXRoIHBvcHMgaGFwcGVuaW5nIGF0CisvLyBkaWZm
ZXJlbnQgdGltZXMuICBCdXQgYSBzaW1wbGUgdXNlIGlzIHRvIGhhdmUgYSBnbG9iYWwgcG9wCisv
LyB3aXRoIGV2ZXJ5b25lIHVzaW5nIHRoZSBzYW1lIGdsb2JhbCBhbGxvY2F0b3IuCisvLwordHlw
ZWRlZiBUUG9vbEFsbG9jYXRvciogUG9vbEFsbG9jYXRvclBvaW50ZXI7CitleHRlcm4gVFBvb2xB
bGxvY2F0b3ImIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKKyNkZWZpbmUgR2xvYmFsUG9vbEFs
bG9jYXRvciBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKKworCitzdHJ1Y3QgVFRocmVhZEdsb2Jh
bFBvb2xzCit7CisgICAgVFBvb2xBbGxvY2F0b3IqIGdsb2JhbFBvb2xBbGxvY2F0b3I7Cit9Owor
Cit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxv
Y2F0b3IpOworCisvLworLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5k
ZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCisvLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6
ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCisvLworLy8gSXQgd2lsbCB1
c2UgdGhlIHBvb2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90CisvLyBkbyBhbnkgZGVhbGxvY2F0
aW9uLCBidXQgd2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KKy8vCit0ZW1wbGF0ZTxjbGFzcyBU
PgorY2xhc3MgcG9vbF9hbGxvY2F0b3IgeworcHVibGljOgorICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKKyAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlw
ZWRlZiBUKiBwb2ludGVyOworICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKKyAg
ICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVy
ZW5jZTsKKyAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKworICAgIHRlbXBsYXRlPGNsYXNzIE90
aGVyPiAKKyAgICBzdHJ1Y3QgcmViaW5kIHsKKyAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRv
cjxPdGhlcj4gb3RoZXI7CisgICAgfTsKKyAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgp
IGNvbnN0IHsgcmV0dXJuICZ4OyB9CisgICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl
ZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQorCisgICAgcG9vbF9hbGxvY2F0b3IoKSA6
IGFsbG9jYXRvcihHbG9iYWxQb29sQWxsb2NhdG9yKSB7IH0KKyAgICBwb29sX2FsbG9jYXRvcihU
UG9vbEFsbG9jYXRvciYgYSkgOiBhbGxvY2F0b3IoYSkgeyB9CisgICAgcG9vbF9hbGxvY2F0b3Io
Y29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0K
KworICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgorICAgIHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBv
b2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0b3IocC5nZXRBbGxvY2F0b3IoKSkgeyB9
CisKKyAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6
ZW9mKFQpKSk7CisgICAgfQorICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4sIGNvbnN0
IHZvaWQqKSB7IAorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRB
bGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CisgICAgfQorCisgICAgdm9pZCBk
ZWFsbG9jYXRlKHZvaWQqLCBzaXplX3R5cGUpIHsgfQorICAgIHZvaWQgZGVhbGxvY2F0ZShwb2lu
dGVyLCBzaXplX3R5cGUpIHsgfQorCisgICAgcG9pbnRlciBfQ2hhcmFsbG9jKHNpemVfdCBuKSB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigp
LmFsbG9jYXRlKG4pKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIHAsIGNv
bnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2YWwpOyB9CisgICAgdm9pZCBkZXN0cm95
KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
cG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpID09ICZy
aHMuZ2V0QWxsb2NhdG9yKCk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgcG9vbF9hbGxv
Y2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFsbG9jYXRvcigpICE9ICZyaHMuZ2V0QWxs
b2NhdG9yKCk7IH0KKworICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9mKFQpOyB9CisgICAgc2l6ZV90eXBlIG1h
eF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x
KSAvIHNpemU7IH0KKworICAgIHZvaWQgc2V0QWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBhKSB7
IGFsbG9jYXRvciA9ICphOyB9CisgICAgVFBvb2xBbGxvY2F0b3ImIGdldEFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIGFsbG9jYXRvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgVFBvb2xBbGxvY2F0
b3ImIGFsbG9jYXRvcjsKK307CisKKyNlbmRpZiAvLyBfUE9PTEFMTE9DX0lOQ0xVREVEXwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuY3BwCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVk
aWF0ZS5oIgorCitjbGFzcyBUQWxpdmVUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
ciB7CitwdWJsaWM6CisgICAgVEFsaXZlVHJhdmVyc2VyKFRRdWFsaWZpZXIgcSkgOiBUSW50ZXJt
VHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSksIGZvdW5kKGZhbHNlKSwgcXVhbGlm
aWVyKHEpCisgICAgeworICAgIH0KKworCWJvb2wgd2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsg
fQorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBmb3VuZDsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmll
cjsKKworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKK307CisKKy8vCisvLyBSZXBv
cnQgd2hldGhlciBvciBub3QgYSB2YXJpYWJsZSBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVyIHR5cGUK
Ky8vIGlzIGd1YXJhbnRlZWQgd3JpdHRlbi4gIE5vdCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJt
aW5lIGlmCisvLyBpdCBpcyB3cml0dGVuIGNvbmRpdGlvbmFsbHkuCisvLworLy8gPz8gSXQgZG9l
cyBub3QgZG8gdGhpcyB3ZWxsIHlldCwgdGhpcyBpcyBqdXN0IGEgcGxhY2UgaG9sZGVyCisvLyB0
aGF0IHNpbXBseSBkZXRlcm1pbmVzIGlmIGl0IHdhcyByZWZlcmVuY2UgYXQgYWxsLCBhbnl3aGVy
ZS4KKy8vCitib29sIFF1YWxpZmllcldyaXR0ZW4oVEludGVybU5vZGUqIG5vZGUsIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyKQoreworICAgIFRBbGl2ZVRyYXZlcnNlciBpdChxdWFsaWZpZXIpOworCisg
ICAgaWYgKG5vZGUpCisgICAgICAgIG5vZGUtPnRyYXZlcnNlKCZpdCk7CisKKyAgICByZXR1cm4g
aXQud2FzRm91bmQoKTsKK30KKwordm9pZCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIG5vZGUpCit7CisgICAgLy8KKyAgICAvLyBJZiBpdCdzIHdoYXQgd2UncmUg
bG9va2luZyBmb3IsIHJlY29yZCBpdC4KKyAgICAvLworICAgIGlmIChub2RlLT5nZXRRdWFsaWZp
ZXIoKSA9PSBxdWFsaWZpZXIpCisgICAgICAgIGZvdW5kID0gdHJ1ZTsKK30KKworYm9vbCBUQWxp
dmVUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHByZVZpc2l0LCBUSW50ZXJtU2VsZWN0
aW9uKiBub2RlKQoreworICAgIGlmICh3YXNGb3VuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZp
ZXJBbGl2ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2
ZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworYm9vbCBR
dWFsaWZpZXJXcml0dGVuKFRJbnRlcm1Ob2RlKiByb290LCBUUXVhbGlmaWVyKTsKSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvUmVtb3ZlVHJlZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9SZW1vdmVUcmVlLmgiCisKKy8vCisvLyBDb2RlIHRvIHJlY3Vyc2l2ZWx5IGRl
bGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisvLworCitjbGFzcyBSZW1vdmVUcmVlIDogcHVi
bGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKwlSZW1vdmVUcmVlKCkgOiBUSW50ZXJt
VHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSkKKwl7CisJfQorCitwcm90ZWN0ZWQ6CisJdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisJdm9pZCB2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qKTsKKwlib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5Kik7CisJYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqKTsKKwlib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9u
Kik7CisJYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSop
OworfTsKKwordm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2Rl
KQoreworCWRlbGV0ZSBub2RlOworfQorCitib29sIFJlbW92ZVRyZWU6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworCWRlbGV0ZSBub2RlOworCisJcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5KiBub2RlKQoreworICAgIGRlbGV0ZSBub2RlOworCisJcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUqIG5vZGUpCit7CisJZGVsZXRlIG5vZGU7CisKKwlyZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNl
bGVjdGlvbiogbm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKKworCXJldHVybiB0cnVlOworfQorCit2
b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiog
bm9kZSkKK3sKKwlkZWxldGUgbm9kZTsKK30KKworLy8KKy8vIEVudHJ5IHBvaW50LgorLy8KK3Zv
aWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIFJlbW92ZVRy
ZWUgaXQ7CisKKyAgICByb290LT50cmF2ZXJzZSgmaXQpOworfQorCkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvUmVtb3ZlVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9S
ZW1vdmVUcmVlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJl
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK3Zv
aWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKik7CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvU2hIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9T
SEhBTkRMRV9JTkNMVURFRF8KKyNkZWZpbmUgX1NISEFORExFX0lOQ0xVREVEXworCisvLworLy8g
TWFjaGluZSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMK
Ky8vIHNlbnQgYXMgU2hIYW5kbGUgdG8gdGhlIGRyaXZlci4KKy8vCisvLyBUaGlzIHNob3VsZCBu
b3QgYmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNvZGUuCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorCitjbGFzcyBU
Q29tcGlsZXI7CitjbGFzcyBUSW50ZXJtTm9kZTsKKworLy8KKy8vIFRoZSBiYXNlIGNsYXNzIHVz
ZWQgdG8gYmFjayBoYW5kbGVzIHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCisvLworY2xhc3MgVFNo
SGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVFNoSGFuZGxlQmFzZSgpIHsgfQorICAgIHZpcnR1
YWwgflRTaEhhbmRsZUJhc2UoKSB7IH0KKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21w
aWxlcigpIHsgcmV0dXJuIDA7IH0KK307CisKKy8vCisvLyBUaGUgYmFzZSBjbGFzcyBmb3IgdGhl
IG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyIHRvIGRlcml2ZSBmcm9tCisvLyBmb3IgbWFuYWdp
bmcgb2JqZWN0IGNvZGUgZnJvbSB0aGUgY29tcGlsZS4KKy8vCitjbGFzcyBUQ29tcGlsZXIgOiBw
dWJsaWMgVFNoSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgVENvbXBpbGVyKEVTaExhbmd1YWdl
IGwsIEVTaFNwZWMgcykgOiBsYW5ndWFnZShsKSwgc3BlYyhzKSB7IH0KKyAgICB2aXJ0dWFsIH5U
Q29tcGlsZXIoKSB7IH0KKworICAgIEVTaExhbmd1YWdlIGdldExhbmd1YWdlKCkgeyByZXR1cm4g
bGFuZ3VhZ2U7IH0KKyAgICBFU2hTcGVjIGdldFNwZWMoKSB7IHJldHVybiBzcGVjOyB9CisgICAg
dmlydHVhbCBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBjb21waWxlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CisKKyAgICB2
aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAg
IFRJbmZvU2luayBpbmZvU2luazsKK3Byb3RlY3RlZDoKKyAgICBFU2hMYW5ndWFnZSBsYW5ndWFn
ZTsKKyAgICBFU2hTcGVjIHNwZWM7Cit9OworCisvLworLy8gVGhpcyBpcyB0aGUgaW50ZXJmYWNl
IGJldHdlZW4gdGhlIG1hY2hpbmUgaW5kZXBlbmRlbnQgY29kZQorLy8gYW5kIHRoZSBtYWNoaW5l
IGRlcGVuZGVudCBjb2RlLgorLy8KKy8vIFRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb2RlIHNob3Vs
ZCBkZXJpdmUgZnJvbSB0aGUgY2xhc3NlcworLy8gYWJvdmUuIFRoZW4gQ29uc3RydWN0KigpIGFu
ZCBEZWxldGUqKCkgd2lsbCBjcmVhdGUgYW5kIAorLy8gZGVzdHJveSB0aGUgbWFjaGluZSBkZXBl
bmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUKKy8vIGFib3ZlIG1hY2hpbmUgaW5kZXBl
bmRlbnQgaW5mb3JtYXRpb24uCisvLworVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihFU2hM
YW5ndWFnZSwgRVNoU3BlYyk7Cit2b2lkIERlbGV0ZUNvbXBpbGVyKFRDb21waWxlciopOworCisj
ZW5kaWYgLy8gX1NISEFORExFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1No
YWRlckxhbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5n
LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisv
LyBJbXBsZW1lbnQgdGhlIHRvcC1sZXZlbCBvZiBpbnRlcmZhY2UgdG8gdGhlIGNvbXBpbGVyLAor
Ly8gYXMgZGVmaW5lZCBpbiBTaGFkZXJMYW5nLmgKKy8vCisKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L1N5bWJvbFRhYmxlLmgiCisKKy8vCisvLyBBIHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsYW5ndWFn
ZS4gIEVhY2ggaGFzIGEgZGlmZmVyZW50CisvLyBzZXQgb2YgYnVpbHQtaW5zLCBhbmQgd2Ugd2Fu
dCB0byBwcmVzZXJ2ZSB0aGF0IGZyb20KKy8vIGNvbXBpbGUgdG8gY29tcGlsZS4KKy8vCitUU3lt
Ym9sVGFibGUqIFN5bWJvbFRhYmxlc1tFU2hMYW5nQ291bnRdOworCisKK1RQb29sQWxsb2NhdG9y
KiBQZXJQcm9jZXNzR1BBID0gMDsKKy8vCisvLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVu
ZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCisvLyBhbmQgdGhlIHNoYWRpbmcg
bGFuZ3VhZ2UgY29tcGlsZXIuCisvLworCisvLworLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZp
cnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyCisvLyBjb21waWxlciBvcGVyYXRpb25z
LgorLy8KK2ludCBTaEluaXRpYWxpemUoKQoreworICAgIFRJbmZvU2luayBpbmZvU2luazsKKyAg
ICBib29sIHJldCA9IHRydWU7CisKKyAgICBpZiAoIUluaXRQcm9jZXNzKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlciBw
cm9jZXNzLiBJZiBpdHMgY2FsbGVkIGJ5IG11bHRpcGxlIHRocmVhZHMsIHRoZW4gCisgICAgLy8g
d2UgbmVlZCB0byBoYXZlIHRocmVhZCBzeW5jaHJvbml6YXRpb24gY29kZSBhcm91bmQgdGhlIGlu
aXRpYWxpemF0aW9uIG9mIHBlciBwcm9jZXNzCisgICAgLy8gZ2xvYmFsIHBvb2wgYWxsb2NhdG9y
CisgICAgaWYgKCFQZXJQcm9jZXNzR1BBKSB7IAorICAgICAgICBUUG9vbEFsbG9jYXRvciAqYnVp
bHRJblBvb2xBbGxvY2F0b3IgPSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7CisgICAgICAgIGJ1
aWx0SW5Qb29sQWxsb2NhdG9yLT5wdXNoKCk7CisgICAgICAgIFRQb29sQWxsb2NhdG9yKiBnUG9v
bEFsbG9jYXRvciA9ICZHbG9iYWxQb29sQWxsb2NhdG9yOworICAgICAgICBTZXRHbG9iYWxQb29s
QWxsb2NhdG9yUHRyKGJ1aWx0SW5Qb29sQWxsb2NhdG9yKTsKKworICAgICAgICBUU3ltYm9sVGFi
bGUgc3ltVGFibGVzW0VTaExhbmdDb3VudF07CisgICAgICAgIEdlbmVyYXRlQnVpbHRJblN5bWJv
bFRhYmxlKDAsIGluZm9TaW5rLCBzeW1UYWJsZXMpOworCisgICAgICAgIFBlclByb2Nlc3NHUEEg
PSBuZXcgVFBvb2xBbGxvY2F0b3IodHJ1ZSk7CisgICAgICAgIFBlclByb2Nlc3NHUEEtPnB1c2go
KTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihQZXJQcm9jZXNzR1BBKTsKKwor
ICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFuZ1ZlcnRleF0gPSBuZXcgVFN5bWJvbFRhYmxlOwor
ICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFuZ1ZlcnRleF0tPmNvcHlUYWJsZShzeW1UYWJsZXNb
RVNoTGFuZ1ZlcnRleF0pOworICAgICAgICBTeW1ib2xUYWJsZXNbRVNoTGFuZ0ZyYWdtZW50XSA9
IG5ldyBUU3ltYm9sVGFibGU7CisgICAgICAgIFN5bWJvbFRhYmxlc1tFU2hMYW5nRnJhZ21lbnRd
LT5jb3B5VGFibGUoc3ltVGFibGVzW0VTaExhbmdGcmFnbWVudF0pOworCisgICAgICAgIFNldEds
b2JhbFBvb2xBbGxvY2F0b3JQdHIoZ1Bvb2xBbGxvY2F0b3IpOworCisgICAgICAgIHN5bVRhYmxl
c1tFU2hMYW5nVmVydGV4XS5wb3AoKTsKKyAgICAgICAgc3ltVGFibGVzW0VTaExhbmdGcmFnbWVu
dF0ucG9wKCk7CisKKyAgICAgICAgYnVpbHRJblBvb2xBbGxvY2F0b3ItPnBvcEFsbCgpOworICAg
ICAgICBkZWxldGUgYnVpbHRJblBvb2xBbGxvY2F0b3I7ICAgICAgICAKKworICAgIH0KKworICAg
IHJldHVybiByZXQgPyAxIDogMDsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBj
cmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCisKK1NoSGFuZGxlIFNoQ29u
c3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYykKK3sKKyAg
ICBpZiAoIUluaXRUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVC
YXNlKiBiYXNlID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KENvbnN0cnVjdENvbXBpbGVy
KGxhbmd1YWdlLCBzcGVjKSk7CisgICAgCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJhc2UpOworfQorCit2b2lkIFNoRGVzdHJ1Y3QoU2hIYW5kbGUgaGFuZGxlKQoreworICAg
IGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFNoSGFuZGxlQmFzZSog
YmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOworCisgICAgaWYgKGJh
c2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgRGVsZXRlQ29tcGlsZXIoYmFzZS0+Z2V0QXND
b21waWxlcigpKTsKK30KKworLy8KKy8vIENsZWFudXAgc3ltYm9sIHRhYmxlcworLy8KK2ludCBT
aEZpbmFsaXplKCkKK3sgIAorICBpZiAoUGVyUHJvY2Vzc0dQQSkgeworICAgIFBlclByb2Nlc3NH
UEEtPnBvcEFsbCgpOworICAgIGRlbGV0ZSBQZXJQcm9jZXNzR1BBOworICAgIFBlclByb2Nlc3NH
UEEgPSAwOworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgRVNoTGFuZ0NvdW50OyArK2kpIHsK
KyAgICBkZWxldGUgU3ltYm9sVGFibGVzW2ldOworICAgIFN5bWJvbFRhYmxlc1tpXSA9IDA7Cisg
IH0KKyAgcmV0dXJuIDE7Cit9CisKK2Jvb2wgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoY29u
c3QgVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzLCBUSW5mb1NpbmsmIGluZm9TaW5rLCBUU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlcywgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UpCit7CisgICAgVEJ1
aWx0SW5zIGJ1aWx0SW5zOworICAgIAorCWlmIChyZXNvdXJjZXMpIHsKKwkJYnVpbHRJbnMuaW5p
dGlhbGl6ZSgqcmVzb3VyY2VzKTsKKwkJSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdl
dEJ1aWx0SW5TdHJpbmdzKCksIGxhbmd1YWdlLCBpbmZvU2luaywgcmVzb3VyY2VzLCBzeW1ib2xU
YWJsZXMpOworCX0gZWxzZSB7CisJCWJ1aWx0SW5zLmluaXRpYWxpemUoKTsKKwkJSW5pdGlhbGl6
ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJpbmdzKCksIEVTaExhbmdWZXJ0ZXgs
IGluZm9TaW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJCUluaXRpYWxpemVTeW1ib2xU
YWJsZShidWlsdElucy5nZXRCdWlsdEluU3RyaW5ncygpLCBFU2hMYW5nRnJhZ21lbnQsIGluZm9T
aW5rLCByZXNvdXJjZXMsIHN5bWJvbFRhYmxlcyk7CisJfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKFRCdWlsdEluU3RyaW5ncyogQnVpbHRJblN0
cmluZ3MsIEVTaExhbmd1YWdlIGxhbmd1YWdlLCBUSW5mb1NpbmsmIGluZm9TaW5rLCBjb25zdCBU
QnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGVzKQor
eworICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsJCisgICAgVFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZTsKKwkKKwlpZiAocmVzb3VyY2VzKQorCQlzeW1ib2xUYWJsZSA9
IHN5bWJvbFRhYmxlczsKKwllbHNlCisJCXN5bWJvbFRhYmxlID0gJnN5bWJvbFRhYmxlc1tsYW5n
dWFnZV07CisKKyAgICAvLyBUT0RPKGFsb2twKTogSW52ZXN0aWdhdGUgaWYgYSBwYXJzZS1jb250
ZXh0IGlzIG5lY2Vzc2FyeSBoZXJlIGFuZAorICAgIC8vIGlmIHN5bWJvbC10YWJsZSBjYW4gYmUg
c2hhcmVkIGJldHdlZW4gR0xFUzIgYW5kIFdlYkdMIHNwZWNzLgorICAgIFRQYXJzZUNvbnRleHQg
cGFyc2VDb250ZXh0KCpzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBsYW5ndWFnZSwgRVNoU3Bl
Y0dMRVMyLCBpbmZvU2luayk7CisKKyAgICBHbG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250
ZXh0OworICAgIAorICAgIHNldEluaXRpYWxTdGF0ZSgpOworCisgICAgYXNzZXJ0KHN5bWJvbFRh
YmxlLT5pc0VtcHR5KCkgfHwgc3ltYm9sVGFibGUtPmF0U2hhcmVkQnVpbHRJbkxldmVsKCkpOwor
ICAgICAgIAorICAgIC8vCisgICAgLy8gUGFyc2UgdGhlIGJ1aWx0LWlucy4gIFRoaXMgc2hvdWxk
IG9ubHkgaGFwcGVuIG9uY2UgcGVyCisgICAgLy8gbGFuZ3VhZ2Ugc3ltYm9sIHRhYmxlLgorICAg
IC8vCisgICAgLy8gUHVzaCB0aGUgc3ltYm9sIHRhYmxlIHRvIGdpdmUgaXQgYW4gaW5pdGlhbCBz
Y29wZS4gIFRoaXMKKyAgICAvLyBwdXNoIHNob3VsZCBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcg
cG9wLCBzbyB0aGF0IGJ1aWx0LWlucworICAgIC8vIGFyZSBwcmVzZXJ2ZWQsIGFuZCB0aGUgdGVz
dCBmb3IgYW4gZW1wdHkgdGFibGUgZmFpbHMuCisgICAgLy8KKworICAgIHN5bWJvbFRhYmxlLT5w
dXNoKCk7CisgICAgCisgICAgLy9Jbml0aWFsaXplIHRoZSBQcmVwcm9jZXNzb3IKKyAgICBpbnQg
cmV0ID0gSW5pdFByZXByb2Nlc3NvcigpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAgIlVuYWJsZSB0byBpbnRpYWxp
emUgdGhlIFByZXByb2Nlc3NvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGZvciAoVEJ1aWx0SW5TdHJpbmdzOjppdGVyYXRvciBpICA9IEJ1aWx0SW5TdHJpbmdz
W3BhcnNlQ29udGV4dC5sYW5ndWFnZV0uYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGkgIT0gQnVpbHRJblN0cmluZ3NbcGFyc2VDb250ZXh0Lmxhbmd1YWdlXS5l
bmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBidWlsdEluU2hhZGVyc1sxXTsKKyAgICAgICAgaW50IGJ1aWx0SW5MZW5n
dGhzWzFdOworCisgICAgICAgIGJ1aWx0SW5TaGFkZXJzWzBdID0gKCppKS5jX3N0cigpOworICAg
ICAgICBidWlsdEluTGVuZ3Roc1swXSA9IChpbnQpICgqaSkuc2l6ZSgpOworCisgICAgICAgIGlm
IChQYVBhcnNlU3RyaW5ncyhjb25zdF9jYXN0PGNoYXIqKj4oYnVpbHRJblNoYWRlcnMpLCBidWls
dEluTGVuZ3RocywgMSwgcGFyc2VDb250ZXh0KSAhPSAwKSB7CisgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJVbmFibGUgdG8gcGFyc2UgYnVp
bHQtaW5zIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KwlpZiAocmVzb3VyY2VzKSB7CisJCUlkZW50aWZ5QnVpbHRJbnMocGFyc2VDb250ZXh0Lmxhbmd1
YWdlLCAqc3ltYm9sVGFibGUsICpyZXNvdXJjZXMpOworCX0gZWxzZSB7CQkJCQkJCQkJICAgCisJ
CUlkZW50aWZ5QnVpbHRJbnMocGFyc2VDb250ZXh0Lmxhbmd1YWdlLCAqc3ltYm9sVGFibGUpOwor
CX0KKworICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8KKy8vIERvIGFuIGFjdHVhbCBjb21waWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhl
IHJlc3VsdCBpcyBsZWZ0IAorLy8gaW4gdGhlIGdpdmVuIGNvbXBpbGUgb2JqZWN0LgorLy8KKy8v
IFJldHVybjogIFRoZSByZXR1cm4gdmFsdWUgb2YgU2hDb21waWxlIGlzIHJlYWxseSBib29sZWFu
LCBpbmRpY2F0aW5nCisvLyBzdWNjZXNzIG9yIGZhaWx1cmUuCisvLworaW50IFNoQ29tcGlsZSgK
KyAgICBjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVy
U3RyaW5nc1tdLAorICAgIGNvbnN0IGludCBudW1TdHJpbmdzLAorICAgIGNvbnN0IEVTaE9wdGlt
aXphdGlvbkxldmVsIG9wdExldmVsLAorICAgIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291
cmNlcywKKyAgICBpbnQgZGVidWdPcHRpb25zCisgICAgKQoreworICAgIGlmICghSW5pdFRocmVh
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxU
U2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+
Z2V0QXNDb21waWxlcigpOworICAgIGlmIChjb21waWxlciA9PSAwKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnB1c2goKTsKKyAgICBUSW5mb1Npbmsm
IGluZm9TaW5rID0gY29tcGlsZXItPmluZm9TaW5rOworICAgIGluZm9TaW5rLmluZm8uZXJhc2Uo
KTsKKyAgICBpbmZvU2luay5kZWJ1Zy5lcmFzZSgpOworICAgIGluZm9TaW5rLm9iai5lcmFzZSgp
OworCisgICAgaWYgKG51bVN0cmluZ3MgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBU
SW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7CisgICAgVFN5bWJvbFRhYmxlIHN5
bWJvbFRhYmxlKCpTeW1ib2xUYWJsZXNbY29tcGlsZXItPmdldExhbmd1YWdlKCldKTsKKyAgICAK
KyAgICBHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShyZXNvdXJjZXMsIGluZm9TaW5rLCAmc3lt
Ym9sVGFibGUsIGNvbXBpbGVyLT5nZXRMYW5ndWFnZSgpKTsKKworICAgIFRQYXJzZUNvbnRleHQg
cGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBpbnRlcm1lZGlhdGUsIGNvbXBpbGVyLT5nZXRMYW5n
dWFnZSgpLCBjb21waWxlci0+Z2V0U3BlYygpLCBpbmZvU2luayk7CisgICAgcGFyc2VDb250ZXh0
LmluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlvcigpOworCisgICAgR2xvYmFsUGFyc2VDb250ZXh0
ID0gJnBhcnNlQ29udGV4dDsKKyAgICAKKyAgICBzZXRJbml0aWFsU3RhdGUoKTsKKworICAgIElu
aXRQcmVwcm9jZXNzb3IoKTsgICAgCisgICAgLy8KKyAgICAvLyBQYXJzZSB0aGUgYXBwbGljYXRp
b24ncyBzaGFkZXJzLiAgQWxsIHRoZSBmb2xsb3dpbmcgc3ltYm9sIHRhYmxlCisgICAgLy8gd29y
ayB3aWxsIGJlIHRocm93LWF3YXksIHNvIHB1c2ggYSBuZXcgYWxsb2NhdGlvbiBzY29wZSB0aGF0
IGNhbgorICAgIC8vIGJlIHRocm93biBhd2F5LCB0aGVuIHB1c2ggYSBzY29wZSBmb3IgdGhlIGN1
cnJlbnQgc2hhZGVyJ3MgZ2xvYmFscy4KKyAgICAvLworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
CisgICAgCisgICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIGlmICghc3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpKQorICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiV3Jvbmcgc3ltYm9sIHRhYmxlIGxldmVsIik7CisKKyAg
ICBpbnQgcmV0ID0gUGFQYXJzZVN0cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KHNoYWRlclN0cmlu
Z3MpLCAwLCBudW1TdHJpbmdzLCBwYXJzZUNvbnRleHQpOworICAgIGlmIChyZXQpCisgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGlmIChzdWNjZXNzICYmIHBhcnNlQ29udGV4dC50cmVl
Um9vdCkgeworICAgICAgICBpZiAob3B0TGV2ZWwgPT0gRVNoT3B0Tm9HZW5lcmF0aW9uKQorICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4Tm9uZSwg
Ik5vIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGlvbiB3YXMgcmVxdWVzdGVkLiIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3Mo
cGFyc2VDb250ZXh0LnRyZWVSb290LCBwYXJzZUNvbnRleHQubGFuZ3VhZ2UpOworCisgICAgICAg
ICAgICBpZiAoc3VjY2VzcykgeworCisgICAgICAgICAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAm
IEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQorICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUu
b3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworCisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlcgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgaWYgKCFjb21waWxlci0+Y29tcGls
ZShwYXJzZUNvbnRleHQudHJlZVJvb3QpKQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJy
b3IpOworICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQu
bnVtRXJyb3JzIDw8ICIgY29tcGlsYXRpb24gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5c
biI7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAm
IEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRy
ZWUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKKyAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbnRleHQu
dHJlZVJvb3QpIHsKKyAgICAgICAgcGFyc2VDb250ZXh0LmVycm9yKDEsICJVbmV4cGVjdGVkIGVu
ZCBvZiBmaWxlLiIsICIiLCAiIik7CisgICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZv
IDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBj
b2RlIGdlbmVyYXRlZC5cblxuIjsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBp
ZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCisgICAgICAgICAgICBpbnRl
cm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOworICAgIH0KKworICAg
IGludGVybWVkaWF0ZS5yZW1vdmUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKKworICAgIC8vCisg
ICAgLy8gRW5zdXJlIHN5bWJvbCB0YWJsZSBpcyByZXR1cm5lZCB0byB0aGUgYnVpbHQtaW4gbGV2
ZWwsCisgICAgLy8gdGhyb3dpbmcgYXdheSBhbGwgYnV0IHRoZSBidWlsdC1pbnMuCisgICAgLy8K
KyAgICB3aGlsZSAoISBzeW1ib2xUYWJsZS5hdFNoYXJlZEJ1aWx0SW5MZXZlbCgpKQorICAgICAg
ICBzeW1ib2xUYWJsZS5wb3AoKTsKKworICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7CisgICAg
Ly8KKyAgICAvLyBUaHJvdyBhd2F5IGFsbCB0aGUgdGVtcG9yYXJ5IG1lbW9yeSB1c2VkIGJ5IHRo
ZSBjb21waWxhdGlvbiBwcm9jZXNzLgorICAgIC8vCisgICAgR2xvYmFsUG9vbEFsbG9jYXRvci5w
b3AoKTsKKworICAgIHJldHVybiBzdWNjZXNzID8gMSA6IDA7Cit9CisKKy8vCisvLyBSZXR1cm4g
YW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLgorLy8KK2Nv
bnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYg
KCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9PSAw
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNf
Y2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5rID0g
MDsKKworICAgIGlmIChiYXNlLT5nZXRBc0NvbXBpbGVyKCkpCisgICAgICAgIGluZm9TaW5rID0g
JihiYXNlLT5nZXRBc0NvbXBpbGVyKCktPmdldEluZm9TaW5rKCkpOworCisgICAgaW5mb1Npbmst
PmluZm8gPDwgaW5mb1NpbmstPmRlYnVnLmNfc3RyKCk7CisgICAgcmV0dXJuIGluZm9TaW5rLT5p
bmZvLmNfc3RyKCk7Cit9CisKKy8vCisvLyBSZXR1cm4gYW55IG9iamVjdCBjb2RlLgorLy8KK2Nv
bnN0IGNoYXIqIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit7CisgICAg
aWYgKCFJbml0VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0
aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBUSW5mb1NpbmsqIGluZm9TaW5r
OworCisgICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKKyAgICAgICAgaW5mb1NpbmsgPSAm
KGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisKKyAgICByZXR1cm4gaW5m
b1NpbmstPm9iai5jX3N0cigpOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBT
eW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBNb3N0IGZ1bmN0aW9uYWxpeSBhbmQgbWFpbiBpZGVh
cworLy8gYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGhlYWRlciBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLworLy8g
VFR5cGUgaGVscGVyIGZ1bmN0aW9uIG5lZWRzIGEgcGxhY2UgdG8gbGl2ZS4KKy8vCisKKy8vCisv
LyBSZWN1cnNpdmVseSBnZW5lcmF0ZSBtYW5nbGVkIG5hbWVzLgorLy8KK3ZvaWQgVFR5cGU6OmJ1
aWxkTWFuZ2xlZE5hbWUoVFN0cmluZyYgbWFuZ2xlZE5hbWUpCit7CisgICAgaWYgKGlzTWF0cml4
KCkpCisgICAgICAgIG1hbmdsZWROYW1lICs9ICdtJzsKKyAgICBlbHNlIGlmIChpc1ZlY3Rvcigp
KQorICAgICAgICBtYW5nbGVkTmFtZSArPSAndic7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJy
ZWFrOworICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgIG1hbmdsZWROYW1l
ICs9ICdiJzsgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAg
ICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTdHJ1Y3Q6
CisgICAgICAgIG1hbmdsZWROYW1lICs9ICJzdHJ1Y3QtIjsKKyAgICAgICAgaWYgKHR5cGVOYW1l
KQorICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gKnR5cGVOYW1lOworICAgICAgICB7Ly8gc3Vw
cG9ydCBNU1ZDKys2LjAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
c3RydWN0dXJlLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1hbmdsZWROYW1lICs9
ICctJzsKKyAgICAgICAgICAgICAgICAoKnN0cnVjdHVyZSlbaV0udHlwZS0+YnVpbGRNYW5nbGVk
TmFtZShtYW5nbGVkTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2Fz
dDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNBcnJheSgpKSB7Cisg
ICAgICAgIGNoYXIgYnVmWzIwXTsKKyAgICAgICAgc3ByaW50ZihidWYsICIlZCIsIGFycmF5U2l6
ZSk7CisgICAgICAgIG1hbmdsZWROYW1lICs9ICdbJzsKKyAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
YnVmOworICAgICAgICBtYW5nbGVkTmFtZSArPSAnXSc7CisgICAgfQorfQorCitpbnQgVFR5cGU6
OmdldFN0cnVjdFNpemUoKSBjb25zdAoreworICAgIGlmICghZ2V0U3RydWN0KCkpIHsKKyAgICAg
ICAgYXNzZXJ0KGZhbHNlICYmICJOb3QgYSBzdHJ1Y3QiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgaWYgKHN0cnVjdHVyZVNpemUgPT0gMCkKKyAgICAgICAgZm9yIChUVHlwZUxp
c3Q6Oml0ZXJhdG9yIHRsID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgp
LT5lbmQoKTsgdGwrKykKKyAgICAgICAgICAgIHN0cnVjdHVyZVNpemUgKz0gKCgqdGwpLnR5cGUp
LT5nZXRPYmplY3RTaXplKCk7CisKKyAgICByZXR1cm4gc3RydWN0dXJlU2l6ZTsKK30KKworLy8K
Ky8vIER1bXAgZnVuY3Rpb25zLgorLy8KKwordm9pZCBUVmFyaWFibGU6OmR1bXAoVEluZm9TaW5r
JiBpbmZvU2luaykgY29uc3QKK3sKKyAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19z
dHIoKSA8PCAiOiAiIDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUu
Z2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiIDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIlswXSI7
CisgICAgfQorICAgIGluZm9TaW5rLmRlYnVnIDw8ICJcbiI7Cit9CisKK3ZvaWQgVEZ1bmN0aW9u
OjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Cit7CisgICAgaW5mb1NpbmsuZGVidWcg
PDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCAgcmV0dXJuVHlwZS5nZXRCYXNpY1N0cmlu
ZygpIDw8ICIgIiA8PCBnZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkgPDwgIlxuIjsKK30KKwordm9p
ZCBUU3ltYm9sVGFibGVMZXZlbDo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAorewor
ICAgIHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgaXQ7CisgICAgZm9yIChpdCA9IGxldmVsLmJlZ2lu
KCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KQorICAgICAgICAoKml0KS5zZWNvbmQtPmR1bXAo
aW5mb1NpbmspOworfQorCit2b2lkIFRTeW1ib2xUYWJsZTo6ZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdAoreworICAgIGZvciAoaW50IGxldmVsID0gY3VycmVudExldmVsKCk7IGxldmVs
ID49IDA7IC0tbGV2ZWwpIHsKKyAgICAgICAgaW5mb1NpbmsuZGVidWcgPDwgIkxFVkVMICIgPDwg
bGV2ZWwgPDwgIlxuIjsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5kdW1wKGluZm9TaW5rKTsKKyAg
ICB9Cit9CisKKy8vCisvLyBGdW5jdGlvbnMgaGF2ZSBidXJpZWQgcG9pbnRlcnMgdG8gZGVsZXRl
LgorLy8KK1RGdW5jdGlvbjo6flRGdW5jdGlvbigpCit7CisgICAgZm9yIChUUGFyYW1MaXN0Ojpp
dGVyYXRvciBpID0gcGFyYW1ldGVycy5iZWdpbigpOyBpICE9IHBhcmFtZXRlcnMuZW5kKCk7ICsr
aSkKKyAgICAgICAgZGVsZXRlICgqaSkudHlwZTsKK30KKworLy8KKy8vIFN5bWJvbCB0YWJsZSBs
ZXZlbHMgYXJlIGEgbWFwIG9mIHBvaW50ZXJzIHRvIHN5bWJvbHMgdGhhdCBoYXZlIHRvIGJlIGRl
bGV0ZWQuCisvLworVFN5bWJvbFRhYmxlTGV2ZWw6On5UU3ltYm9sVGFibGVMZXZlbCgpCit7Cisg
ICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwu
ZW5kKCk7ICsraXQpCisgICAgICAgIGRlbGV0ZSAoKml0KS5zZWNvbmQ7Cit9CisKKy8vCisvLyBD
aGFuZ2UgYWxsIGZ1bmN0aW9uIGVudHJpZXMgaW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5n
bGVkIG5hbWUKKy8vIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIG9wZXJh
dGlvbi4gIFRoaXMgaXMgYSBsb3cKKy8vIHBlcmZvcm1hbmNlIG9wZXJhdGlvbiwgYW5kIG9ubHkg
aW50ZW5kZWQgZm9yIHN5bWJvbCB0YWJsZXMgdGhhdAorLy8gbGl2ZSBhY3Jvc3MgYSBsYXJnZSBu
dW1iZXIgb2YgY29tcGlsZXMuCisvLwordm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRlVG9P
cGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApCit7CisgICAgdExldmVsOjpp
dGVyYXRvciBpdDsKKyAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLnNlY29uZC0+aXNGdW5jdGlvbigpKSB7Cisg
ICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4o
KCppdCkuc2Vjb25kKTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09IG5h
bWUpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnJlbGF0ZVRvT3BlcmF0b3Iob3ApOworICAg
ICAgICB9CisgICAgfQorfQorCisKK1RTeW1ib2w6OlRTeW1ib2woY29uc3QgVFN5bWJvbCYgY29w
eU9mKQoreworICAgIG5hbWUgPSBOZXdQb29sVFN0cmluZyhjb3B5T2YubmFtZS0+Y19zdHIoKSk7
CisgICAgdW5pcXVlSWQgPSBjb3B5T2YudW5pcXVlSWQ7Cit9CisKK1RWYXJpYWJsZTo6VFZhcmlh
YmxlKGNvbnN0IFRWYXJpYWJsZSYgY29weU9mLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikgOiBU
U3ltYm9sKGNvcHlPZikKK3sKKyAgICB0eXBlLmNvcHlUeXBlKGNvcHlPZi50eXBlLCByZW1hcHBl
cik7CisgICAgdXNlclR5cGUgPSBjb3B5T2YudXNlclR5cGU7CisgICAgLy8gZm9yIGJ1aWx0SW4g
c3ltYm9sIHRhYmxlIGxldmVsLCB1bmlvbkFycmF5IGFuZCBhcnJheUluZm9ybWF0aW9uIHBvaW50
ZXJzIHNob3VsZCBiZSBOVUxMCisgICAgYXNzZXJ0KGNvcHlPZi5hcnJheUluZm9ybWF0aW9uVHlw
ZSA9PSAwKTsKKyAgICBhcnJheUluZm9ybWF0aW9uVHlwZSA9IDA7CisKKyAgICBpZiAoY29weU9m
LnVuaW9uQXJyYXkpIHsKKyAgICAgICAgYXNzZXJ0KCFjb3B5T2YudHlwZS5nZXRTdHJ1Y3QoKSk7
CisgICAgICAgIGFzc2VydChjb3B5T2YudHlwZS5nZXRPYmplY3RTaXplKCkgPT0gMSk7CisgICAg
ICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJh
eVswXSA9IGNvcHlPZi51bmlvbkFycmF5WzBdOworICAgIH0gZWxzZQorICAgICAgICB1bmlvbkFy
cmF5ID0gMDsKK30KKworVFZhcmlhYmxlKiBUVmFyaWFibGU6OmNsb25lKFRTdHJ1Y3R1cmVNYXAm
IHJlbWFwcGVyKQoreworICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCp0
aGlzLCByZW1hcHBlcik7CisKKyAgICByZXR1cm4gdmFyaWFibGU7Cit9CisKK1RGdW5jdGlvbjo6
VEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiYgY29weU9mLCBUU3RydWN0dXJlTWFwJiByZW1hcHBl
cikgOiBUU3ltYm9sKGNvcHlPZikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvcHlPZi5wYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFy
YW07CisgICAgICAgIHBhcmFtZXRlcnMucHVzaF9iYWNrKHBhcmFtKTsKKyAgICAgICAgcGFyYW1l
dGVycy5iYWNrKCkuY29weVBhcmFtKGNvcHlPZi5wYXJhbWV0ZXJzW2ldLCByZW1hcHBlcik7Cisg
ICAgfQorCisgICAgcmV0dXJuVHlwZS5jb3B5VHlwZShjb3B5T2YucmV0dXJuVHlwZSwgcmVtYXBw
ZXIpOworICAgIG1hbmdsZWROYW1lID0gY29weU9mLm1hbmdsZWROYW1lOworICAgIG9wID0gY29w
eU9mLm9wOworICAgIGRlZmluZWQgPSBjb3B5T2YuZGVmaW5lZDsKK30KKworVEZ1bmN0aW9uKiBU
RnVuY3Rpb246OmNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQoreworICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCp0aGlzLCByZW1hcHBlcik7CisKKyAgICByZXR1
cm4gZnVuY3Rpb247Cit9CisKK1RTeW1ib2xUYWJsZUxldmVsKiBUU3ltYm9sVGFibGVMZXZlbDo6
Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCit7CisgICAgVFN5bWJvbFRhYmxlTGV2ZWwg
KnN5bVRhYmxlTGV2ZWwgPSBuZXcgVFN5bWJvbFRhYmxlTGV2ZWwoKTsKKyAgICB0TGV2ZWw6Oml0
ZXJhdG9yIGl0ZXI7CisgICAgZm9yIChpdGVyID0gbGV2ZWwuYmVnaW4oKTsgaXRlciAhPSBsZXZl
bC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIHN5bVRhYmxlTGV2ZWwtPmluc2VydCgqaXRlci0+
c2Vjb25kLT5jbG9uZShyZW1hcHBlcikpOworICAgIH0KKworICAgIHJldHVybiBzeW1UYWJsZUxl
dmVsOworfQorCit2b2lkIFRTeW1ib2xUYWJsZTo6Y29weVRhYmxlKGNvbnN0IFRTeW1ib2xUYWJs
ZSYgY29weU9mKQoreworICAgIFRTdHJ1Y3R1cmVNYXAgcmVtYXBwZXI7CisgICAgdW5pcXVlSWQg
PSBjb3B5T2YudW5pcXVlSWQ7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3B5
T2YudGFibGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdGFibGUucHVzaF9iYWNrKGNvcHlPZi50
YWJsZVtpXS0+Y2xvbmUocmVtYXBwZXIpKTsKKyAgICB9CisgICAgZm9yKCB1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3B5T2YucHJlY2lzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
cHJlY2lzaW9uU3RhY2sucHVzaF9iYWNrKCBjb3B5T2YucHJlY2lzaW9uU3RhY2tbaV0gKTsKKyAg
ICB9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBfU1lNQk9MX1RBQkxFX0lOQ0xVREVE
XworI2RlZmluZSBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXworCisvLworLy8gU3ltYm9sIHRhYmxl
IGZvciBwYXJzaW5nLiAgSGFzIHRoZXNlIGRlc2lnbiBjaGFyYWN0ZXJpc3RpY3M6CisvLworLy8g
KiBTYW1lIHN5bWJvbCB0YWJsZSBjYW4gYmUgdXNlZCB0byBjb21waWxlIG1hbnkgc2hhZGVycywg
dG8gcHJlc2VydmUKKy8vICAgZWZmb3J0IG9mIGNyZWF0aW5nIGFuZCBsb2FkaW5nIHdpdGggdGhl
IGxhcmdlIG51bWJlcnMgb2YgYnVpbHQtaW4KKy8vICAgc3ltYm9scy4KKy8vCisvLyAqIE5hbWUg
bWFuZ2xpbmcgd2lsbCBiZSB1c2VkIHRvIGdpdmUgZWFjaCBmdW5jdGlvbiBhIHVuaXF1ZSBuYW1l
CisvLyAgIHNvIHRoYXQgc3ltYm9sIHRhYmxlIGxvb2t1cHMgYXJlIG5ldmVyIGFtYmlndW91cy4g
IFRoaXMgYWxsb3dzCisvLyAgIGEgc2ltcGxlciBzeW1ib2wgdGFibGUgc3RydWN0dXJlLgorLy8K
Ky8vICogUHVzaGluZyBhbmQgcG9wcGluZyBvZiBzY29wZSwgc28gc3ltYm9sIHRhYmxlIHdpbGwg
cmVhbGx5IGJlIGEgc3RhY2sgCisvLyAgIG9mIHN5bWJvbCB0YWJsZXMuICBTZWFyY2hlZCBmcm9t
IHRoZSB0b3AsIHdpdGggbmV3IGluc2VydHMgZ29pbmcgaW50bworLy8gICB0aGUgdG9wLgorLy8K
Ky8vICogQ29uc3RhbnRzOiAgQ29tcGlsZSB0aW1lIGNvbnN0YW50IHN5bWJvbHMgd2lsbCBrZWVw
IHRoZWlyIHZhbHVlcworLy8gICBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgVGhlIHBhcnNlciBjYW4g
c3Vic3RpdHV0ZSBjb25zdGFudHMgYXQgcGFyc2UKKy8vICAgdGltZSwgaW5jbHVkaW5nIGRvaW5n
IGNvbnN0YW50IGZvbGRpbmcgYW5kIGNvbnN0YW50IHByb3BhZ2F0aW9uLgorLy8KKy8vICogTm8g
dGVtcG9yYXJpZXM6ICBUZW1wb3JhcmllcyBtYWRlIGZyb20gb3BlcmF0aW9ucyAoKywgLS0sIC54
eSwgZXRjLikKKy8vICAgYXJlIHRyYWNrZWQgaW4gdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRh
dGlvbiwgbm90IHRoZSBzeW1ib2wgdGFibGUuCisvLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj
aW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKworLy8KKy8vIFN5bWJvbCBi
YXNlIGNsYXNzLiAgKENhbiBidWlsZCBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIG91dCBvZiB0aGVz
ZS4uLikKKy8vCitjbGFzcyBUU3ltYm9sIHsgICAgCitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQorICAgIFRTeW1ib2woY29uc3QgVFN0
cmluZyAqbikgOiAgbmFtZShuKSB7IH0KKyAgICB2aXJ0dWFsIH5UU3ltYm9sKCkgeyAvKiBkb24n
dCBkZWxldGUgbmFtZSwgaXQncyBmcm9tIHRoZSBwb29sICovIH0KKyAgICBjb25zdCBUU3RyaW5n
JiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gKm5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRT
dHJpbmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0TmFtZSgpOyB9CisgICAg
dmlydHVhbCBib29sIGlzRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lk
IHNldFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CisgICAgaW50IGdldFVuaXF1
ZUlkKCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChU
SW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CQorICAgIFRTeW1ib2woY29uc3QgVFN5bWJv
bCYpOworICAgIHZpcnR1YWwgVFN5bWJvbCogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IFRTdHJpbmcgKm5hbWU7CisgICAgdW5zaWdu
ZWQgaW50IHVuaXF1ZUlkOyAgICAgIC8vIEZvciByZWFsIGNvbXBhcmluZyBkdXJpbmcgY29kZSBn
ZW5lcmF0aW9uCit9OworCisvLworLy8gVmFyaWFibGUgY2xhc3MsIG1lYW5pbmcgYSBzeW1ib2wg
dGhhdCdzIG5vdCBhIGZ1bmN0aW9uLgorLy8gCisvLyBUaGVyZSBjb3VsZCBiZSBhIHNlcGFyYXRl
IGNsYXNzIGhlaXJhcmNoeSBmb3IgQ29uc3RhbnQgdmFyaWFibGVzOworLy8gT25seSBvbmUgb2Yg
aW50LCBib29sLCBvciBmbG9hdCwgKG9yIG5vbmUpIGlzIGNvcnJlY3QgZm9yCisvLyBhbnkgcGFy
dGljdWxhciB1c2UsIGJ1dCBpdCdzIGVhc3kgdG8gZG8gdGhpcyB3YXksIGFuZCBkb2Vzbid0Cisv
LyBzZWVtIHdvcnRoIGhhdmluZyBzZXBhcmF0ZSBjbGFzc2VzLCBhbmQgImdldENvbnN0IiBjYW4n
dCBzaW1wbHkgcmV0dXJuCisvLyBkaWZmZXJlbnQgdmFsdWVzIGZvciBkaWZmZXJlbnQgdHlwZXMg
cG9seW1vcnBoaWNhbGx5LCBzbyB0aGlzIGlzIAorLy8ganVzdCBzaW1wbGUgYW5kIHByYWdtYXRp
Yy4KKy8vCitjbGFzcyBUVmFyaWFibGUgOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJsaWM6CisgICAg
VFZhcmlhYmxlKGNvbnN0IFRTdHJpbmcgKm5hbWUsIGNvbnN0IFRUeXBlJiB0LCBib29sIHVUID0g
ZmFsc2UgKSA6IFRTeW1ib2wobmFtZSksIHR5cGUodCksIHVzZXJUeXBlKHVUKSwgdW5pb25BcnJh
eSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCkgeyB9CisgICAgdmlydHVhbCB+VFZhcmlhYmxl
KCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9ICAgIAorICAgIFRUeXBlJiBnZXRUeXBlKCkgeyByZXR1cm4gdHlwZTsgfSAgICAKKyAgICBj
b25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBib29sIGlz
VXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1c2VyVHlwZTsgfQorICAgIHZvaWQgY2hhbmdlUXVh
bGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVyKSB7IHR5cGUuY2hhbmdlUXVhbGlmaWVyKHF1YWxp
Zmllcik7IH0KKyAgICB2b2lkIHVwZGF0ZUFycmF5SW5mb3JtYXRpb25UeXBlKFRUeXBlICp0KSB7
IGFycmF5SW5mb3JtYXRpb25UeXBlID0gdDsgfQorICAgIFRUeXBlKiBnZXRBcnJheUluZm9ybWF0
aW9uVHlwZSgpIHsgcmV0dXJuIGFycmF5SW5mb3JtYXRpb25UeXBlOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKKworICAgIENvbnN0YW50VW5p
b24qIGdldENvbnN0UG9pbnRlcigpCisgICAgeyAKKyAgICAgICAgaWYgKCF1bmlvbkFycmF5KQor
ICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0
U2l6ZSgpXTsKKworICAgICAgICByZXR1cm4gdW5pb25BcnJheTsKKyAgICB9CisKKyAgICBDb25z
dGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5OyB9
CisKKyAgICB2b2lkIHNoYXJlQ29uc3RQb2ludGVyKCBDb25zdGFudFVuaW9uICpjb25zdEFycmF5
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaW9uQXJyYXk7CisgICAgICAgIHVuaW9uQXJyYXkg
PSBjb25zdEFycmF5OyAgCisgICAgfQorICAgIFRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUmLCBU
U3RydWN0dXJlTWFwJiByZW1hcHBlcik7IC8vIGNvcHkgY29uc3RydWN0b3IKKyAgICB2aXJ0dWFs
IFRWYXJpYWJsZSogY2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpOworCitwcm90ZWN0ZWQ6
CisgICAgVFR5cGUgdHlwZTsKKyAgICBib29sIHVzZXJUeXBlOworICAgIC8vIHdlIGFyZSBhc3N1
bWluZyB0aGF0IFBvb2wgQWxsb2NhdG9yIHdpbGwgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0
byB1bmlvbkFycmF5CisgICAgLy8gd2hlbiB0aGlzIG9iamVjdCBpcyBkZXN0cm95ZWQKKyAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIFRUeXBlICphcnJheUluZm9ybWF0aW9uVHlw
ZTsgIC8vIHRoaXMgaXMgdXNlZCBmb3IgdXBkYXRpbmcgbWF4QXJyYXlTaXplIGluIGFsbCB0aGUg
cmVmZXJlbmNlcyB0byBhIGdpdmVuIHN5bWJvbAorfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBz
dWItY2xhc3Mgb2Ygc3ltYm9scyBhbmQgdGhlIHBhcnNlciB3aWxsIG5lZWQgdG8KKy8vIHNoYXJl
IHRoaXMgZGVmaW5pdGlvbiBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlci4KKy8vCitzdHJ1Y3QgVFBh
cmFtZXRlciB7CisgICAgVFN0cmluZyAqbmFtZTsKKyAgICBUVHlwZSogdHlwZTsKKyAgICB2b2lk
IGNvcHlQYXJhbShjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSwgVFN0cnVjdHVyZU1hcCYgcmVtYXBw
ZXIpCisgICAgeworICAgICAgICBuYW1lID0gTmV3UG9vbFRTdHJpbmcocGFyYW0ubmFtZS0+Y19z
dHIoKSk7CisgICAgICAgIHR5cGUgPSBwYXJhbS50eXBlLT5jbG9uZShyZW1hcHBlcik7CisgICAg
fQorfTsKKworLy8KKy8vIFRoZSBmdW5jdGlvbiBzdWItY2xhc3Mgb2YgYSBzeW1ib2wuICAKKy8v
CitjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJvbCB7CitwdWJsaWM6CisgICAgVEZ1bmN0
aW9uKFRPcGVyYXRvciBvKSA6CisgICAgICAgIFRTeW1ib2woMCksCisgICAgICAgIHJldHVyblR5
cGUoVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksCisgICAgICAgIG9wKG8pLAorICAgICAg
ICBkZWZpbmVkKGZhbHNlKSB7IH0KKyAgICBURnVuY3Rpb24oY29uc3QgVFN0cmluZyAqbmFtZSwg
VFR5cGUmIHJldFR5cGUsIFRPcGVyYXRvciB0T3AgPSBFT3BOdWxsKSA6IAorICAgICAgICBUU3lt
Ym9sKG5hbWUpLCAKKyAgICAgICAgcmV0dXJuVHlwZShyZXRUeXBlKSwKKyAgICAgICAgbWFuZ2xl
ZE5hbWUoVEZ1bmN0aW9uOjptYW5nbGVOYW1lKCpuYW1lKSksCisgICAgICAgIG9wKHRPcCksCisg
ICAgICAgIGRlZmluZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgflRGdW5jdGlvbigpOworICAg
IHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAKKwor
ICAgIHN0YXRpYyBUU3RyaW5nIG1hbmdsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkgeyByZXR1
cm4gbmFtZSArICcoJzsgfQorICAgIHN0YXRpYyBUU3RyaW5nIHVubWFuZ2xlTmFtZShjb25zdCBU
U3RyaW5nJiBtYW5nbGVkTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUU3RyaW5nKG1hbmds
ZWROYW1lLmNfc3RyKCksIG1hbmdsZWROYW1lLmZpbmRfZmlyc3Rfb2YoJygnKSk7CisgICAgfQor
CisgICAgdm9pZCBhZGRQYXJhbWV0ZXIoVFBhcmFtZXRlciYgcCkgCisgICAgeyAKKyAgICAgICAg
cGFyYW1ldGVycy5wdXNoX2JhY2socCk7CisgICAgICAgIG1hbmdsZWROYW1lID0gbWFuZ2xlZE5h
bWUgKyBwLnR5cGUtPmdldE1hbmdsZWROYW1lKCk7CisgICAgfQorCisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtYW5nbGVkTmFtZTsgfQorICAgIGNv
bnN0IFRUeXBlJiBnZXRSZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1cm4gcmV0dXJuVHlwZTsgfQor
ICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKyAgICBU
T3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAgICB2b2lkIHNl
dERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSB7IHJl
dHVybiBkZWZpbmVkOyB9CisKKyAgICBpbnQgZ2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4ocGFyYW1ldGVycy5zaXplKCkpOyB9ICAgIAorICAgIFRQYXJhbWV0
ZXImIG9wZXJhdG9yIFtdKGludCBpKSAgICAgICB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9Cisg
ICAgY29uc3QgVFBhcmFtZXRlciYgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIHBh
cmFtZXRlcnNbaV07IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0OworICAgIFRGdW5jdGlvbihjb25zdCBURnVuY3Rpb24mLCBUU3RydWN0dXJlTWFw
JiByZW1hcHBlcik7CisgICAgdmlydHVhbCBURnVuY3Rpb24qIGNsb25lKFRTdHJ1Y3R1cmVNYXAm
IHJlbWFwcGVyKTsKKworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgVFZlY3RvcjxUUGFyYW1ldGVy
PiBUUGFyYW1MaXN0OworICAgIFRQYXJhbUxpc3QgcGFyYW1ldGVyczsKKyAgICBUVHlwZSByZXR1
cm5UeXBlOworICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWU7CisgICAgVE9wZXJhdG9yIG9wOworICAg
IGJvb2wgZGVmaW5lZDsKK307CisKKworY2xhc3MgVFN5bWJvbFRhYmxlTGV2ZWwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVE1hcDxUU3RyaW5nLCBUU3ltYm9sKj4gdExldmVsOworICAgIHR5cGVk
ZWYgdExldmVsOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIGNv
bnN0IHRMZXZlbDo6dmFsdWVfdHlwZSB0TGV2ZWxQYWlyOworICAgIHR5cGVkZWYgc3RkOjpwYWly
PHRMZXZlbDo6aXRlcmF0b3IsIGJvb2w+IHRJbnNlcnRSZXN1bHQ7CisKKyAgICBQT09MX0FMTE9D
QVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCisgICAgVFN5bWJvbFRhYmxlTGV2
ZWwoKSB7IH0KKyAgICB+VFN5bWJvbFRhYmxlTGV2ZWwoKTsKKworICAgIGJvb2wgaW5zZXJ0KFRT
eW1ib2wmIHN5bWJvbCkgCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyByZXR1cm5pbmcg
dHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQorICAgICAgICAvLworICAg
ICAgICB0SW5zZXJ0UmVzdWx0IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gbGV2ZWwuaW5zZXJ0
KHRMZXZlbFBhaXIoc3ltYm9sLmdldE1hbmdsZWROYW1lKCksICZzeW1ib2wpKTsKKworICAgICAg
ICByZXR1cm4gcmVzdWx0LnNlY29uZDsKKyAgICB9CisKKyAgICBUU3ltYm9sKiBmaW5kKGNvbnN0
IFRTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGV2ZWwuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ID09IGxldmVsLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biAoKml0KS5zZWNvbmQ7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7CisgICAgfQorCisgICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZXZlbC5lbmQo
KTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwg
VE9wZXJhdG9yIG9wKTsKKyAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7
CisgICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsK
KworcHJvdGVjdGVkOgorICAgIHRMZXZlbCBsZXZlbDsKK307CisKK2NsYXNzIFRTeW1ib2xUYWJs
ZSB7CitwdWJsaWM6CisgICAgVFN5bWJvbFRhYmxlKCkgOiB1bmlxdWVJZCgwKQorICAgIHsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRp
bCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKKyAgICAgICAgLy8gdGhlIGxhY2sgb2YgYW4gaW5pdGlh
bCBjYWxsIHRvIHB1c2goKSBjYW4gYmUgdXNlZCB0byBkZXRlY3QKKyAgICAgICAgLy8gdGhhdCB0
aGUgc3ltYm9sIHRhYmxlIGhhcyBub3QgYmVlbiBwcmVsb2FkZWQgd2l0aCBidWlsdC1pbnMuCisg
ICAgICAgIC8vCisgICAgfQorCisgICAgVFN5bWJvbFRhYmxlKFRTeW1ib2xUYWJsZSYgc3ltVGFi
bGUpCisgICAgeworICAgICAgICB0YWJsZS5wdXNoX2JhY2soc3ltVGFibGUudGFibGVbMF0pOwor
ICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIHN5bVRhYmxlLnByZWNpc2lvblN0YWNr
WzBdICk7CisgICAgICAgIHVuaXF1ZUlkID0gc3ltVGFibGUudW5pcXVlSWQ7CisgICAgfQorCisg
ICAgflRTeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICAvLyBsZXZlbCAwIGlzIGFsd2F5cyBi
dWlsdCBJbiBzeW1ib2xzLCBzbyB3ZSBuZXZlciBwb3AgdGhhdCBvdXQKKyAgICAgICAgd2hpbGUg
KHRhYmxlLnNpemUoKSA+IDEpCisgICAgICAgICAgICBwb3AoKTsKKyAgICB9CisKKyAgICAvLwor
ICAgIC8vIFdoZW4gdGhlIHN5bWJvbCB0YWJsZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBidWls
dC1pbnMsIHRoZXJlIHNob3VsZAorICAgIC8vICdwdXNoJyBjYWxscywgc28gdGhhdCBidWlsdC1p
bnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIKKyAgICAvLyBnbG9iYWxzIGFyZSBhdCBs
ZXZlbCAxLgorICAgIC8vCisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgp
ID09IDA7IH0KKyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyByZXR1cm4gYXRTaGFyZWRCdWls
dEluTGV2ZWwoKSB8fCBhdER5bmFtaWNCdWlsdEluTGV2ZWwoKTsgfQorICAgIGJvb2wgYXRTaGFy
ZWRCdWlsdEluTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQkKKyAgICBib29s
IGF0R2xvYmFsTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMzsgfQorICAgIHZvaWQg
cHVzaCgpCisgICAgeyAKKyAgICAgICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3ltYm9sVGFibGVM
ZXZlbCk7CisgICAgICAgIHByZWNpc2lvblN0YWNrLnB1c2hfYmFjayggUHJlY2lzaW9uU3RhY2tM
ZXZlbCgpICk7CisgICAgfQorCisgICAgdm9pZCBwb3AoKQorICAgIHsgCisgICAgICAgIGRlbGV0
ZSB0YWJsZVtjdXJyZW50TGV2ZWwoKV07IAorICAgICAgICB0YWJsZS5wb3BfYmFjaygpOyAKKyAg
ICAgICAgcHJlY2lzaW9uU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBib29sIGluc2Vy
dChUU3ltYm9sJiBzeW1ib2wpCisgICAgeworICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1
bmlxdWVJZCk7CisgICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKV0tPmluc2VydChz
eW1ib2wpOworICAgIH0KKworICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAorICAgIHsKKyAgICAgICAg
aW50IGxldmVsID0gY3VycmVudExldmVsKCk7CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUp
OworICAgICAgICAgICAgLS1sZXZlbDsKKyAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYg
bGV2ZWwgPj0gMCk7CisgICAgICAgIGxldmVsKys7CisgICAgICAgIGlmIChidWlsdEluKQorICAg
ICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAwOworICAgICAgICBpZiAoc2FtZVNjb3BlKQor
ICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOworICAgICAg
ICByZXR1cm4gc3ltYm9sOworICAgIH0KKworICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRHbG9i
YWxMZXZlbCgpIHsgYXNzZXJ0KHRhYmxlLnNpemUoKSA+PSAzKTsgcmV0dXJuIHRhYmxlWzJdOyB9
CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBv
cCkgeyB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7IH0KKyAgICBpbnQgZ2V0
TWF4U3ltYm9sSWQoKSB7IHJldHVybiB1bmlxdWVJZDsgfQorICAgIHZvaWQgZHVtcChUSW5mb1Np
bmsgJmluZm9TaW5rKSBjb25zdDsKKyAgICB2b2lkIGNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFi
bGUmIGNvcHlPZik7CisKKyAgICB2b2lkIHNldERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUg
dHlwZSwgVFByZWNpc2lvbiBwcmVjICl7CisgICAgICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYm
IHR5cGUgIT0gRWJ0SW50ICkgcmV0dXJuOyAvLyBPbmx5IHNldCBkZWZhdWx0IHByZWNpc2lvbiBm
b3IgaW50L2Zsb2F0CisgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOworICAgICAgICBwcmVjaXNpb25TdGFj
a1tpbmRleE9mTGFzdEVsZW1lbnRdW3R5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3Ig
W10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICB9CisKKyAgICAvLyBTZWFyY2hl
cyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0
aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKKyAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNp
b24oIFRCYXNpY1R5cGUgdHlwZSl7CisgICAgICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYmIHR5
cGUgIT0gRWJ0SW50ICkgcmV0dXJuIEVicFVuZGVmaW5lZDsKKyAgICAgICAgaW50IGxldmVsID0g
c3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKKyAgICAgICAgYXNz
ZXJ0KCBsZXZlbCA+PSAwKTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBlbi4K
KyAgICAgICAgUHJlY2lzaW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7CisgICAgICAgIFRQcmVj
aXNpb24gcHJlYyA9IEVicFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5nIHdl
IHJldHVybiB0aGlzLiBTaG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KKyAgICAgICAgd2hpbGUo
IGxldmVsID49IDAgKXsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLmZp
bmQoIHR5cGUgKTsKKyAgICAgICAgICAgIGlmKCBpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0u
ZW5kKCkgKXsKKyAgICAgICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25kOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV2ZWwtLTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKK3Byb3RlY3RlZDogICAgCisgICAg
aW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUu
c2l6ZSgpKSAtIDE7IH0KKyAgICBib29sIGF0RHluYW1pY0J1aWx0SW5MZXZlbCgpIHsgcmV0dXJu
IHRhYmxlLnNpemUoKSA9PSAyOyB9CisKKyAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZl
bCo+IHRhYmxlOworICAgIHR5cGVkZWYgc3RkOjptYXA8IFRCYXNpY1R5cGUsIFRQcmVjaXNpb24g
PiBQcmVjaXNpb25TdGFja0xldmVsOworICAgIHN0ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xl
dmVsID4gcHJlY2lzaW9uU3RhY2s7CisgICAgaW50IHVuaXF1ZUlkOyAgICAgLy8gZm9yIHVuaXF1
ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24KK307CisKKyNlbmRpZiAvLyBfU1lN
Qk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
Y3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9P
dXRwdXRHTFNMLmgiCisKK1RyYW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTChFU2hMYW5ndWFn
ZSBsYW5nLCBFU2hTcGVjIHNwZWMpCisgICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykgeworfQor
Citib29sIFRyYW5zbGF0b3JHTFNMOjpjb21waWxlKFRJbnRlcm1Ob2RlKiByb290KSB7CisgICAg
VE91dHB1dEdMU0wgb3V0cHV0R0xTTChpbmZvU2luay5vYmopOworICAgIHJvb3QtPnRyYXZlcnNl
KCZvdXRwdXRHTFNMKTsKKworICAgIHJldHVybiB0cnVlOworfQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SR0xTTF9IXworCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIK
KworY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKK3B1YmxpYzoKKyAg
ICBUcmFuc2xhdG9yR0xTTChFU2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpOworICAgIHZp
cnR1YWwgYm9vbCBjb21waWxlKFRJbnRlcm1Ob2RlKiByb290KTsKK307CisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9UcmFu
c2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JITFNMLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
SExTTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9ySExTTC5oIgorCisjaW5jbHVkZSAiY29t
cGlsZXIvT3V0cHV0SExTTC5oIgorCitUcmFuc2xhdG9ySExTTDo6VHJhbnNsYXRvckhMU0woRVNo
TGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKQorICAgIDogVENvbXBpbGVyKGxhbmcsIHNwZWMp
Cit7Cit9CisKK2Jvb2wgVHJhbnNsYXRvckhMU0w6OmNvbXBpbGUoVEludGVybU5vZGUgKnJvb3Qp
Cit7CisgICAgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0ID0gKkdldEdsb2JhbFBhcnNlQ29u
dGV4dCgpOworICAgIHNoOjpPdXRwdXRITFNMIG91dHB1dEhMU0wocGFyc2VDb250ZXh0KTsKKwor
ICAgIG91dHB1dEhMU0wub3V0cHV0KCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hf
CisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci9TaEhhbmRsZS5oIgorCitjbGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIg
eworcHVibGljOgorICAgIFRyYW5zbGF0b3JITFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMg
c3BlYyk7CisgICAgdmlydHVhbCBib29sIGNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpOworfTsK
KworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVz
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzMDggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX1RZUEVT
X0lOQ0xVREVECisjZGVmaW5lIF9UWVBFU19JTkNMVURFRAorCisjaW5jbHVkZSAiY29tcGlsZXIv
QmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvZGVidWcuaCIKKworLy8KKy8vIE5lZWQgdG8gaGF2ZSBhc3NvY2lhdGlvbiBvZiBsaW5l
IG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWlsZGluZyBzdHJ1Y3RzLgorLy8KK2Ns
YXNzIFRUeXBlOworc3RydWN0IFRUeXBlTGluZSB7CisgICAgVFR5cGUqIHR5cGU7CisgICAgaW50
IGxpbmU7Cit9OwordHlwZWRlZiBUVmVjdG9yPFRUeXBlTGluZT4gVFR5cGVMaXN0OworCitpbmxp
bmUgVFR5cGVMaXN0KiBOZXdQb29sVFR5cGVMaXN0KCkKK3sKKyAgICB2b2lkKiBtZW1vcnkgPSBH
bG9iYWxQb29sQWxsb2NhdG9yLmFsbG9jYXRlKHNpemVvZihUVHlwZUxpc3QpKTsKKyAgICByZXR1
cm4gbmV3KG1lbW9yeSkgVFR5cGVMaXN0OworfQorCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRoZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8g
dHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBz
aG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90
IGFueXRoaW5nIGVsc2UuICBQb2ludGVycworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5
aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8g
Tm90IGFzIGJhZCBhcyBpdCBsb29rcywgdGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhh
dCB0aGUgZmllbGRzCisvLyBtYXRjaCB1cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGlu
ZyBsaWtlIHRoYXQuCisvLworY2xhc3MgVFB1YmxpY1R5cGUgeworcHVibGljOgorICAgIFRCYXNp
Y1R5cGUgdHlwZTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICBUUHJlY2lzaW9uIHBy
ZWNpc2lvbjsKKyAgICBpbnQgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgbWF0
cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJyYXk7
CisgICAgaW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAgICBpbnQgbGluZTsK
KworICAgIHZvaWQgc2V0QmFzaWMoVEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBpbnQgbG4g
PSAwKQorICAgIHsKKyAgICAgICAgdHlwZSA9IGJ0OworICAgICAgICBxdWFsaWZpZXIgPSBxOwor
ICAgICAgICBwcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CisgICAgICAgIHNpemUgPSAxOworICAg
ICAgICBtYXRyaXggPSBmYWxzZTsKKyAgICAgICAgYXJyYXkgPSBmYWxzZTsKKyAgICAgICAgYXJy
YXlTaXplID0gMDsKKyAgICAgICAgdXNlckRlZiA9IDA7CisgICAgICAgIGxpbmUgPSBsbjsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZShpbnQgcywgYm9vbCBtID0gZmFsc2UpCisgICAg
eworICAgICAgICBzaXplID0gczsKKyAgICAgICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBh
OworICAgICAgICBhcnJheVNpemUgPSBzOworICAgIH0KK307CisKK3R5cGVkZWYgVE1hcDxUVHlw
ZUxpc3QqLCBUVHlwZUxpc3QqPiBUU3RydWN0dXJlTWFwOwordHlwZWRlZiBUTWFwPFRUeXBlTGlz
dCosIFRUeXBlTGlzdCo+OjppdGVyYXRvciBUU3RydWN0dXJlTWFwSXRlcmF0b3I7CisvLworLy8g
QmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhIHR5cGUuCisvLworY2xhc3MgVFR5cGUg
eworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9j
YXRvcikKKyAgICBleHBsaWNpdCBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1
YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5LCBpbnQgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29s
IGEgPSBmYWxzZSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUodCksIHByZWNp
c2lvbihwKSwgcXVhbGlmaWVyKHEpLCBzaXplKHMpLCBtYXRyaXgobSksIGFycmF5KGEpLCBhcnJh
eVNpemUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1
Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBm
aWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1lKDApCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyB9CisgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnBy
ZWNpc2lvbiksIHF1YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAu
bWF0cml4KSwgYXJyYXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhB
cnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmds
ZWQoMCksIHR5cGVOYW1lKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmlu
ZyhwLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIGV4cGxpY2l0
IFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwgY29uc3QgVFN0cmluZyYgbiwgVFByZWNpc2lvbiBw
ID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShFYnRT
dHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBt
YXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUodXNlckRlZiksIHN0cnVjdHVyZVNpemUoMCksIG1heEFy
cmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xl
ZCgwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9v
bFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ZXhwbGljaXQgVFR5cGUoKSB7fQorICAgIHZpcnR1YWwgflRUeXBlKCkge30KKworICAgIFRUeXBl
KGNvbnN0IFRUeXBlJiB0eXBlKSB7ICp0aGlzID0gdHlwZTsgfQorCisgICAgdm9pZCBjb3B5VHlw
ZShjb25zdCBUVHlwZSYgY29weU9mLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcikKKyAgICB7Cisg
ICAgICAgIHR5cGUgPSBjb3B5T2YudHlwZTsKKyAgICAgICAgcHJlY2lzaW9uID0gY29weU9mLnBy
ZWNpc2lvbjsKKyAgICAgICAgcXVhbGlmaWVyID0gY29weU9mLnF1YWxpZmllcjsKKyAgICAgICAg
c2l6ZSA9IGNvcHlPZi5zaXplOworICAgICAgICBtYXRyaXggPSBjb3B5T2YubWF0cml4OworICAg
ICAgICBhcnJheSA9IGNvcHlPZi5hcnJheTsKKyAgICAgICAgYXJyYXlTaXplID0gY29weU9mLmFy
cmF5U2l6ZTsKKworICAgICAgICBUU3RydWN0dXJlTWFwSXRlcmF0b3IgaXRlcjsKKyAgICAgICAg
aWYgKGNvcHlPZi5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmICgoaXRlciA9IHJlbWFwcGVy
LmZpbmQoc3RydWN0dXJlKSkgPT0gcmVtYXBwZXIuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBjcmVhdGUgdGhlIG5ldyBzdHJ1Y3R1cmUgaGVyZQorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvcHlPZi5zdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFRUeXBlTGluZSB0eXBlTGluZTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUxp
bmUubGluZSA9ICgqY29weU9mLnN0cnVjdHVyZSlbaV0ubGluZTsKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZUxpbmUudHlwZSA9ICgqY29weU9mLnN0cnVjdHVyZSlbaV0udHlwZS0+Y2xvbmUocmVt
YXBwZXIpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnB1c2hfYmFjayh0eXBlTGlu
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlID0gMDsKKworICAgICAgICBmaWVsZE5hbWUgPSAw
OworICAgICAgICBpZiAoY29weU9mLmZpZWxkTmFtZSkKKyAgICAgICAgICAgIGZpZWxkTmFtZSA9
IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5maWVsZE5hbWUtPmNfc3RyKCkpOworICAgICAgICB0eXBl
TmFtZSA9IDA7CisgICAgICAgIGlmIChjb3B5T2YudHlwZU5hbWUpCisgICAgICAgICAgICB0eXBl
TmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi50eXBlTmFtZS0+Y19zdHIoKSk7CisKKyAgICAg
ICAgbWFuZ2xlZCA9IDA7CisgICAgICAgIGlmIChjb3B5T2YubWFuZ2xlZCkKKyAgICAgICAgICAg
IG1hbmdsZWQgPSBOZXdQb29sVFN0cmluZyhjb3B5T2YubWFuZ2xlZC0+Y19zdHIoKSk7CisKKyAg
ICAgICAgc3RydWN0dXJlU2l6ZSA9IGNvcHlPZi5zdHJ1Y3R1cmVTaXplOworICAgICAgICBtYXhB
cnJheVNpemUgPSBjb3B5T2YubWF4QXJyYXlTaXplOworICAgICAgICBhc3NlcnQoY29weU9mLmFy
cmF5SW5mb3JtYXRpb25UeXBlID09IDApOworICAgICAgICBhcnJheUluZm9ybWF0aW9uVHlwZSA9
IDA7IC8vIGFycmF5SW5mb3JtYXRpb25UeXBlIHNob3VsZCBub3QgYmUgc2V0IGZvciBidWlsdElu
IHN5bWJvbCB0YWJsZSBsZXZlbAorICAgIH0KKworICAgIFRUeXBlKiBjbG9uZShUU3RydWN0dXJl
TWFwJiByZW1hcHBlcikKKyAgICB7CisgICAgICAgIFRUeXBlICpuZXdUeXBlID0gbmV3IFRUeXBl
KCk7CisgICAgICAgIG5ld1R5cGUtPmNvcHlUeXBlKCp0aGlzLCByZW1hcHBlcik7CisKKyAgICAg
ICAgcmV0dXJuIG5ld1R5cGU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFR5cGUoVEJh
c2ljVHlwZSB0LCBpbnQgcywgYm9vbCBtLCBib29sIGEsIGludCBhUyA9IDApCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyB0eXBlID0gdDsgc2l6ZSA9IHM7IG1hdHJpeCA9IG07IGFycmF5
ID0gYTsgYXJyYXlTaXplID0gYVM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNU
eXBlIHQsIGludCBzLCBib29sIG0sIFRUeXBlKiB1c2VyRGVmID0gMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IHR5cGUgPSB0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZSA9IHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBtOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJEZWYpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gdXNlckRlZi0+Z2V0U3RydWN0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcnJheSBpbmZvcm1hdGlvbiBpbnRh
Y3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRU
eXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5j
X3N0cigpKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGaWVsZE5hbWUoY29uc3QgVFN0cmluZyYg
bikgeyBmaWVsZE5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9CisgICAgdmlydHVh
bCBjb25zdCBUU3RyaW5nJiBnZXRUeXBlTmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3Nl
cnQodHlwZU5hbWUpOworICAgICAgICByZXR1cm4gKnR5cGVOYW1lOworICAgIH0KKworICAgIHZp
cnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0RmllbGROYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGFzc2VydChmaWVsZE5hbWUpOworICAgICAgICByZXR1cm4gKmZpZWxkTmFtZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZTsgfQorICAgIHZpcnR1YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVy
biBwcmVjaXNpb247IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gcXVhbGlmaWVyOyB9CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZVByZWNpc2lv
bihUUHJlY2lzaW9uIHApIHsgcHJlY2lzaW9uID0gcDsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGFu
Z2VRdWFsaWZpZXIoVFF1YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7IH0KKworICAgIC8vIE9u
ZS1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSB0eXBlCisgICAgdmlydHVhbCBp
bnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9CisKKyAgICAvLyBGdWxs
LWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKKyAgICB2aXJ0dWFs
IGludCBnZXRJbnN0YW5jZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1hdHJpeCkK
KyAgICAgICAgICAgIHJldHVybiBzaXplICogc2l6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzTWF0cml4KCkgY29u
c3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
QXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KKyAgICBib29s
IGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBmaWVsZE5hbWUgIT0gMDsgfQorICAgIGludCBnZXRB
cnJheVNpemUoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemU7IH0KKyAgICB2b2lkIHNldEFycmF5
U2l6ZShpbnQgcykgeyBhcnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNl
dE1heEFycmF5U2l6ZSAoaW50IHMpIHsgbWF4QXJyYXlTaXplID0gczsgfQorICAgIGludCBnZXRN
YXhBcnJheVNpemUgKCkgY29uc3QgeyByZXR1cm4gbWF4QXJyYXlTaXplOyB9CisgICAgdm9pZCBj
bGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgbWF4QXJyYXlT
aXplID0gMDsgfQorICAgIHZvaWQgc2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUqIHQpIHsg
YXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9
CisgICAgdmlydHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYm
ICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZXRCYXNp
Y1N0cmluZyhUQmFzaWNUeXBlIHQpIHsKKyAgICAgICAgc3dpdGNoICh0KSB7CisgICAgICAgIGNh
c2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1
cm4gImludCI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0Qm9vbDogICAg
ICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJl
IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJldHVy
biAic3RydWN0dXJlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgICB9CisgICAgfQorICAgIGNv
bnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gVFR5cGU6OmdldEJhc2lj
U3RyaW5nKHR5cGUpOyB9CisgICAgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gOjpnZXRQcmVjaXNpb25TdHJpbmcocHJlY2lzaW9uKTsgfQorICAgIGNvbnN0
IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0UXVhbGlmaWVy
U3RyaW5nKHF1YWxpZmllcik7IH0KKyAgICBUVHlwZUxpc3QqIGdldFN0cnVjdCgpIHsgcmV0dXJu
IHN0cnVjdHVyZTsgfQorCisgICAgaW50IGdldE9iamVjdFNpemUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaW50IHRvdGFsU2l6ZTsKKworICAgICAgICBpZiAoZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KQorICAgICAgICAgICAgdG90YWxTaXplID0gZ2V0U3RydWN0U2l6ZSgpOworICAgICAg
ICBlbHNlIGlmIChtYXRyaXgpCisgICAgICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6ZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG90YWxTaXplID0gc2l6ZTsKKworICAgICAgICBp
ZiAoaXNBcnJheSgpKQorICAgICAgICAgICAgdG90YWxTaXplICo9IHN0ZDo6bWF4KGdldEFycmF5
U2l6ZSgpLCBnZXRNYXhBcnJheVNpemUoKSk7CisKKyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsK
KyAgICB9CisKKyAgICBUVHlwZUxpc3QqIGdldFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVj
dHVyZTsgfQorICAgIFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgeworICAgICAgICBpZiAoIW1h
bmdsZWQpIHsKKyAgICAgICAgICAgIG1hbmdsZWQgPSBOZXdQb29sVFN0cmluZygiIik7CisgICAg
ICAgICAgICBidWlsZE1hbmdsZWROYW1lKCptYW5nbGVkKTsKKyAgICAgICAgICAgICptYW5nbGVk
ICs9ICc7JyA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKm1hbmdsZWQ7CisgICAgfQor
ICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgeworICAg
ICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAgICAgICAgICAgICAg
ICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAgICAgbWF0cml4ID09
IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVj
dHVyZTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29u
c3QgeworICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgorICAgICAg
ICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgorICAgICAgICAgICAgICAgICAg
bWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJp
Z2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYm
CisgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOworICAgICAgICAv
LyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBz
b3VnaHQgYWZ0ZXIKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRUeXBlJiByaWdo
dCkgY29uc3QgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0ocmlnaHQpOworICAgIH0KKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKKyAgICAgICAgaWYg
KHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOworICAgICAgICBp
ZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7CisgICAgICAg
IGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQubWF0cml4
OworICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0
LmFycmF5OworICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJu
IGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBy
aWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5n
KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGJ1aWxkTWFuZ2xlZE5hbWUoVFN0cmlu
ZyYpOworICAgIGludCBnZXRTdHJ1Y3RTaXplKCkgY29uc3Q7CisKKyAgICBUQmFzaWNUeXBlIHR5
cGUgICAgICA6IDY7CisgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgVFF1YWxpZmllciBx
dWFsaWZpZXIgOiA3OworICAgIGludCBzaXplICAgICAgICAgICAgIDogODsgLy8gc2l6ZSBvZiB2
ZWN0b3Igb3IgbWF0cml4LCBub3Qgc2l6ZSBvZiBhcnJheQorICAgIHVuc2lnbmVkIGludCBtYXRy
aXggIDogMTsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXkgICA6IDE7CisgICAgaW50IGFycmF5U2l6
ZTsKKworICAgIFRUeXBlTGlzdCogc3RydWN0dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMg
YSBzdHJ1Y3QKKyAgICBtdXRhYmxlIGludCBzdHJ1Y3R1cmVTaXplOworICAgIGludCBtYXhBcnJh
eVNpemU7CisgICAgVFR5cGUqIGFycmF5SW5mb3JtYXRpb25UeXBlOworICAgIFRTdHJpbmcgKmZp
ZWxkTmFtZTsgICAgICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIG5hbWVzCisgICAgVFN0cmlu
ZyAqbWFuZ2xlZDsKKyAgICBUU3RyaW5nICp0eXBlTmFtZTsgICAgICAgICAgLy8gZm9yIHN0cnVj
dHVyZSBmaWVsZCB0eXBlIG5hbWUKK307CisKKyNlbmRpZiAvLyBfVFlQRVNfSU5DTFVERURfCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7CitVbmZvbGRTZWxlY3Q6OlVuZm9sZFNl
bGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKSA6IG1D
b250ZXh0KGNvbnRleHQpLCBtT3V0cHV0SExTTChvdXRwdXRITFNMKQoreworICAgIG1UZW1wb3Jh
cnlJbmRleCA9IDA7Cit9CisKK3ZvaWQgVW5mb2xkU2VsZWN0Ojp0cmF2ZXJzZShUSW50ZXJtTm9k
ZSAqbm9kZSkKK3sKKyAgICBtVGVtcG9yYXJ5SW5kZXgrKzsKKyAgICBub2RlLT50cmF2ZXJzZSh0
aGlzKTsKK30KKworYm9vbCBVbmZvbGRTZWxlY3Q6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1P
dXRwdXRITFNMLT5nZXRCb2R5U3RyZWFtKCk7CisKKyAgICBpZiAobm9kZS0+dXNlc1Rlcm5hcnlP
cGVyYXRvcigpKQorICAgIHsKKyAgICAgICAgaW50IGkgPSBtVGVtcG9yYXJ5SW5kZXgrKzsKKwor
ICAgICAgICBvdXQgPDwgbU91dHB1dEhMU0wtPnR5cGVTdHJpbmcobm9kZS0+Z2V0VHlwZSgpKSA8
PCAiIHQiIDw8IGkgPDwgIjtcbiI7CisKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgImlmKCI7CisgICAgICAgIG5vZGUtPmdldENv
bmRpdGlvbigpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CisgICAgICAgIG91dCA8PCAiKVxuIgor
ICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgb3V0IDw8ICIgICAgdCIgPDwgaSA8PCAiID0gIjsKKyAgICAg
ICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsKKyAgICAgICAg
b3V0IDw8ICI7XG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgImVsc2Vc
biIKKyAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+
dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG91dCA8PCAiICAgIHQiIDw8IGkgPDwgIiA9ICI7Cisg
ICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOworICAg
ICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgICAgIG1UZW1w
b3JhcnlJbmRleC0tOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFVuZm9s
ZFNlbGVjdDo6Z2V0VGVtcG9yYXJ5SW5kZXgoKQoreworICAgIHJldHVybiBtVGVtcG9yYXJ5SW5k
ZXg7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1VORk9MRFNF
TEVDVF9IXworI2RlZmluZSBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgT3V0cHV0SExTTDsKKworY2xhc3MgVW5mb2xkU2Vs
ZWN0IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFVuZm9sZFNl
bGVjdChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBPdXRwdXRITFNMICpvdXRwdXRITFNMKTsKKwor
ICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5vZGUpOworCisgICAgaW50IGdl
dFRlbXBvcmFyeUluZGV4KCk7CisKKyAgcHJvdGVjdGVkOgorICAgIFRQYXJzZUNvbnRleHQgJm1D
b250ZXh0OworICAgIE91dHB1dEhMU0wgKmNvbnN0IG1PdXRwdXRITFNMOworCisgICAgaW50IG1U
ZW1wb3JhcnlJbmRleDsKK307Cit9CisKKyNlbmRpZiAgIC8vIENPTVBJTEVSX1VORk9MRFNFTEVD
VF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL2RlYnVnLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0aWVzLgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvZGVidWcuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCitzdGF0aWMgY29u
c3QgaW50IGtUcmFjZUJ1ZmZlckxlbiA9IDEwMjQ7CisKKyNpZmRlZiBUUkFDRV9FTkFCTEVECitl
eHRlcm4gIkMiIHsKK3ZvaWQgVHJhY2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKyAgICBp
ZiAoIWZvcm1hdCkgcmV0dXJuOworCisgICAgVFBhcnNlQ29udGV4dCogcGFyc2VDb250ZXh0ID0g
R2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CisgICAgaWYgKHBhcnNlQ29udGV4dCkgeworICAgICAg
ICBjaGFyIGJ1ZltrVHJhY2VCdWZmZXJMZW5dOworICAgICAgICB2YV9saXN0IGFyZ3M7CisgICAg
ICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAgIHZzbnByaW50ZihidWYsIGtUcmFj
ZUJ1ZmZlckxlbiwgZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgdmFfZW5kKGFyZ3MpOworCisgICAg
ICAgIHBhcnNlQ29udGV4dC0+aW5mb1NpbmsuZGVidWcgPDwgYnVmOworICAgIH0KK30KK30gIC8v
IGV4dGVybiAiQyIKKyNlbmRpZiAgLy8gVFJBQ0VfRU5BQkxFRAorCkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcu
aAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkZWJ1Zy5oOiBEZWJ1
Z2dpbmcgdXRpbGl0aWVzLgorCisjaWZuZGVmIENPTVBJTEVSX0RFQlVHX0hfCisjZGVmaW5lIENP
TVBJTEVSX0RFQlVHX0hfCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2lmZGVmIF9ERUJVRwor
I2RlZmluZSBUUkFDRV9FTkFCTEVEICAvLyBkZWZpbmUgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2Ug
dHJhY2luZworI2VuZGlmICAvLyBfREVCVUcKKworLy8gT3V0cHV0cyB0ZXh0IHRvIHRoZSBkZWJ1
ZyBsb2cKKyNpZmRlZiBUUkFDRV9FTkFCTEVECisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmICAvLyBfX2NwbHVzcGx1cwordm9pZCBUcmFjZShjb25zdCBjaGFyKiBm
b3JtYXQsIC4uLik7CisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgIC8vIF9fY3BsdXNw
bHVzCisKKyNlbHNlICAgLy8gVFJBQ0VfRU5BQkxFRAorCisjZGVmaW5lIFRyYWNlKC4uLikgKCh2
b2lkKTApCisKKyNlbmRpZiAgLy8gVFJBQ0VfRU5BQkxFRAorCisvLyBBIG1hY3JvIGFzc2VydGlu
ZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVidWcgbG9nCisj
ZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSBkbyB7IFwKKyAgICBpZighKGV4cHJlc3Npb24pKSBc
CisgICAgICAgIFRyYWNlKCJBc3NlcnQgZmFpbGVkOiAlcyglZCk6ICIjZXhwcmVzc2lvbiJcbiIs
IF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisgICAgYXNzZXJ0KGV4cHJlc3Npb24pOyBcCit9
IHdoaWxlKDApCisKKyNkZWZpbmUgVU5JTVBMRU1FTlRFRCgpIGRvIHsgXAorICAgIFRyYWNlKCJV
bmltcGxlbWVudGVkIGludm9rZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7
IFwKKyAgICBhc3NlcnQoZmFsc2UpOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgVU5SRUFDSEFC
TEUoKSBkbyB7IFwKKyAgICBUcmFjZSgiVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBf
X0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorICAgIGFzc2VydChmYWxzZSk7IFwKK30gd2hpbGUo
MCkKKworI2VuZGlmICAgLy8gQ09NUElMRVJfREVCVUdfSF8KKwpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy5sCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MDAgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworKi8KKy8qIEJh
c2VkIG9uCitBTlNJIEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb24KKworSW4gMTk4NSwgSmVm
ZiBMZWUgcHVibGlzaGVkIHRoaXMgTGV4IHNwZWNpZmljYXRpb24gdG9nZXRoZXIgd2l0aCBhIFlh
Y2MgCitncmFtbWFyIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgQU5TSSBDIGRyYWZ0LiAgVG9tIFN0
b2NrZmlzY2ggcmVwb3N0ZWQgCitib3RoIHRvIG5ldC5zb3VyY2VzIGluIDE5ODc7IHRoYXQgb3Jp
Z2luYWwsIGFzIG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIAordG8gcXVlc3Rpb24gMTcuMjUgb2Yg
dGhlIGNvbXAubGFuZy5jIEZBUSwgY2FuIGJlIGZ0cCdlZCBmcm9tIGZ0cC51dS5uZXQsIAorZmls
ZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4gCisKK0kgaW50ZW5kIHRvIGtl
ZXAgdGhpcyB2ZXJzaW9uIGFzIGNsb3NlIHRvIHRoZSBjdXJyZW50IEMgU3RhbmRhcmQgZ3JhbW1h
ciAKK2FzIHBvc3NpYmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2Ny
ZXBhbmNpZXMuIAorCitKdXR0YSBEZWdlbmVyLCAxOTk1IAorKi8KKworRCAgICAgICAgICAgWzAt
OV0KK0wgICAgICAgICAgIFthLXpBLVpfXQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAg
ICAgICAgIFtFZV1bKy1dP3tEfSsKK08gICAgICAgICAgIFswLTddCisKKyVvcHRpb24gbm91bnB1
dCAKKyV7CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1
ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKKwor
Lyogd2luZG93cyBvbmx5IHByYWdtYSAqLworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZSA6IDQxMDIpCisjZW5kaWYKKworaW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50
IG1heF9zaXplKTsKKworZXh0ZXJuIGludCB5eXBhcnNlKHZvaWQqKTsKKyNkZWZpbmUgWVlfREVD
TCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCisj
ZGVmaW5lIHBhcnNlQ29udGV4dCAoKigoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2Fs
KSkpCisgCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIChyZXN1bHQgPSB5
eV9pbnB1dChidWYsIG1heF9zaXplKSkKKworJX0KKworLyoKK1RPRE8oYWxva3ApOiB5eWxpbmVu
byBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQgZmxleC5leGUgaW4gY29tcGlsZXIvdG9vbHMu
CitSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9u
LgorKi8KKyVvcHRpb24geXlsaW5lbm8KKworJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBuZXZl
ci1pbnRlcmFjdGl2ZQorJXggRklFTERTCisKKworJSUKKzwqPiIvLyJbXlxuXSoiXG4iICAgICB7
IC8qID8/IGNhcnJpYWdlIGFuZC9vciBsaW5lLWZlZWQ/ICovIH07CisKKyJpbnZhcmlhbnQiICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTlZBUklBTlQpOyB9Cisi
aGlnaHAiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSElH
SF9QUkVDSVNJT04pOyB9CisibWVkaXVtcCIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oTUVESVVNX1BSRUNJU0lPTik7IH0KKyJsb3dwIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMT1dfUFJFQ0lTSU9OKTsgfQorInBy
ZWNpc2lvbiIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBSRUNJ
U0lPTik7IH0KKworImF0dHJpYnV0ZSIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKEFUVFJJQlVURSk7IH0KKyJjb25zdCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihDT05TVF9RVUFMKTsgfQorInVuaWZvcm0iICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFVOSUZPUk0pOyB9CisidmFyeWlu
ZyIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkFSWUlORyk7
IH0KKworImJyZWFrIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKEJSRUFLKTsgfQorImNvbnRpbnVlIiAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKENPTlRJTlVFKTsgfQorImRvIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERPKTsgfQorImZvciIgICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEZPUik7IH0KKyJ3aGlsZSIgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihXSElMRSk7IH0KKworImlmIiAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElGKTsgfQor
ImVsc2UiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVM
U0UpOyB9CisKKyJpbiIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihJTl9RVUFMKTsgfQorIm91dCIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKE9VVF9RVUFMKTsgfQorImlub3V0IiAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOT1VUX1FVQUwpOyB9CisKKyJmbG9hdCIg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oRkxPQVRfVFlQRSk7IH0KKyJpbnQiICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4oSU5UX1RZUEUpOyB9Cisidm9pZCIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0
dXJuKFZPSURfVFlQRSk7IH0KKyJib29sIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oQk9PTF9U
WVBFKTsgfQorInRydWUiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKyJmYWxzZSIg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5iID0g
ZmFsc2U7IHJldHVybihCT09MQ09OU1RBTlQpOyB9CisKKyJkaXNjYXJkIiAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihESVNDQVJEKTsgfQorInJldHVybiIgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJFVFVSTik7IH0KKwor
Im1hdDIiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihNQVRSSVgyKTsgfQorIm1hdDMiICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihNQVRSSVgzKTsgfQorIm1hdDQiICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybihNQVRSSVg0KTsgfQorCisidmVjMiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChW
RUMyKTsgfQorInZlYzMiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDMyk7IH0KKyJ2ZWM0
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzQpOyB9CisiaXZlYzIiICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuIChJVkVDMik7IH0KKyJpdmVjMyIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4g
KElWRUMzKTsgfQorIml2ZWM0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzQpOyB9Cisi
YnZlYzIiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRl
eHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMik7IH0KKyJidmVjMyIgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5
cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMzKTsgfQorImJ2ZWM0IiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybiAoQlZFQzQpOyB9CisKKyJzYW1wbGVyMkQiICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FN
UExFUjJEOyB9Cisic2FtcGxlckN1YmUiICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVJDVUJF
OyB9CisKKyJzdHJ1Y3QiICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBh
cnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oU1RSVUNUKTsgfQorCisiYXNt
IiAgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisiY2xhc3MiICAg
ICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInVuaW9uIiAgICAgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJlbnVtIiAgICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9CisidHlwZWRlZiIgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorInRlbXBsYXRlIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKyJ0aGlzIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
cGFja2VkIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisiZ290byIg
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInN3aXRjaCIgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJkZWZhdWx0IiAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJpbmxpbmUiICAgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9Cisibm9pbmxpbmUiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorInZvbGF0aWxlIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJwdWJsaWMiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisic3Rh
dGljIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImV4dGVybiIgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJleHRlcm5hbCIgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiaW50ZXJmYWNlIiAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorCisibG9uZyIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQorInNob3J0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KKyJkb3VibGUiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
aGFsZiIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZpeGVkIiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ1bnNpZ25lZCIgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisKKyJpbnB1dCIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisib3V0cHV0IiAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQorCisiaHZlYzIiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQorImh2ZWMzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KKyJodmVjNCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZnZl
YzIiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorImZ2ZWMzIiAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJmdmVjNCIgICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZHZlYzIiICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorImR2ZWMzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJkdmVjNCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9CisKKyJzaXplb2YiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Cisi
Y2FzdCIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorCisibmFtZXNw
YWNlIiAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQorInVzaW5nIiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKwore0x9KHtMfXx7RH0pKiAgICAgICB7
ICAKKyAgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IAorICAgcHl5bHZhbC0+bGV4LnN0
cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIFBhSWRlbnRPclR5cGUo
KnB5eWx2YWwtPmxleC5zdHJpbmcsIHBhcnNlQ29udGV4dCwgcHl5bHZhbC0+bGV4LnN5bWJvbCk7
IAorfQorCiswW3hYXXtIfSsgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFO
VCk7IH0KKzB7T30rICAgICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5U
KTsgfQorMHtEfSsgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
YXJzZUNvbnRleHQuZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRl
eHQsICIiLCAiIik7IHBhcnNlQ29udGV4dC5yZWNvdmVyKCk7IHJldHVybiAwO30KK3tEfSsgICAg
ICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4Lmkg
PSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorCit7RH0re0V9
ICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5m
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5U
KTsgfQore0R9KyIuIntEfSooe0V9KT8geyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBw
eXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5dGV4dCkpOyByZXR1cm4o
RkxPQVRDT05TVEFOVCk7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRl
eHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisKKyIvKiIgICAgICAgICAgICB7ICBpbnQg
cmV0ID0gUGFQYXJzZUNvbW1lbnQocHl5bHZhbC0+bGV4LmxpbmUsIHBhcnNlQ29udGV4dCk7IGlm
ICghcmV0KSByZXR1cm4gcmV0OyB9ICAgCisKKyIrPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQUREX0FTU0lHTik7IH0KKyItPSIgICAgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU1VCX0FTU0lHTik7IH0K
KyIqPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
TVVMX0FTU0lHTik7IH0KKyIvPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oRElWX0FTU0lHTik7IH0KKyIlPSIgICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTU9EX0FTU0lHTik7IH0KKyI8PD0iICAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BU1NJR04p
OyB9CisiPj49IiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKFJJR0hUX0FTU0lHTik7IH0KKyImPSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oQU5EX0FTU0lHTik7IH0KKyJePSIgICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oWE9SX0FTU0lHTik7IH0KKyJ8PSIg
ICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1JfQVNT
SUdOKTsgfQorCisiKysiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVu
bzsgcmV0dXJuKElOQ19PUCk7IH0KKyItLSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oREVDX09QKTsgfQorIiYmIiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfT1ApOyB9CisifHwiICAgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX09QKTsgfQorIl5e
IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1Jf
T1ApOyB9CisiPD0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKExFX09QKTsgfQorIj49IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHJldHVybihHRV9PUCk7IH0KKyI9PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRVFfT1ApOyB9CisiIT0iICAgICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE5FX09QKTsgfQorIjw8IiAgICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX09QKTsg
fQorIj4+IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihSSUdIVF9PUCk7IH0KKyI7IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7
IH0KKygieyJ8IjwlIikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJz
ZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihMRUZUX0JSQUNFKTsgfQorKCJ9
InwiJT4iKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdI
VF9CUkFDRSk7IH0KKyIsIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IGlmIChwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4pIHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSBmYWxzZTsgcmV0dXJuKENPTU1BKTsgfQorIjoiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTE9OKTsgfQorIj0iICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyBy
ZXR1cm4oRVFVQUwpOyB9CisiKCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHBhcnNlQ29udGV4dC5pblR5
cGVQYXJlbiA9IHRydWU7IHJldHVybihMRUZUX1BBUkVOKTsgfQorIikiICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmluVHlwZVBhcmVuID0gZmFs
c2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KKygiWyJ8Ijw6IikgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9CUkFDS0VUKTsgfQorKCJdInwiOj4iKSAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9CUkFDS0VU
KTsgfQorIi4iICAgICAgICAgeyBCRUdJTihGSUVMRFMpOyAgcmV0dXJuKERPVCk7IH0KKyIhIiAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihCQU5HKTsgfQor
Ii0iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERBU0gp
OyB9CisifiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4o
VElMREUpOyB9CisiKyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oUExVUyk7IH0KKyIqIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihTVEFSKTsgfQorIi8iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKFNMQVNIKTsgfQorIiUiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKFBFUkNFTlQpOyB9CisiPCIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KKyI+IiAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9BTkdMRSk7IH0K
KyJ8IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihWRVJU
SUNBTF9CQVIpOyB9CisiXiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oQ0FSRVQpOyB9CisiJiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oQU1QRVJTQU5EKTsgfQorIj8iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFFVRVNUSU9OKTsgfQorCis8RklFTERTPntMfSh7TH18
e0R9KSogeyAKK0JFR0lOKElOSVRJQUwpOyAgICAgIAorICAgIHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87ICAgICAKKyAgICBweXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmco
eXl0ZXh0KTsgCisgICAgcmV0dXJuIEZJRUxEX1NFTEVDVElPTjsgfQorPEZJRUxEUz5bIFx0XHZc
ZlxyXSB7fQorCitbIFx0XHZcblxmXHJdICAgeyAgfQorPCo+PDxFT0Y+PiB7ICgmcGFyc2VDb250
ZXh0KS0+QWZ0ZXJFT0YgPSB0cnVlOyB5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
KTsgeXl0ZXJtaW5hdGUoKTt9Cis8Kj4uICAgIHsgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8g
PDwgIkZMRVg6IFVua25vd24gY2hhciAiIDw8IHl5dGV4dCA8PCAiXG4iOworICAgICAgICAgIHJl
dHVybiAwOyB9CisKKyUlCisKKworLy9JbmNsdWRpbmcgUHJlLXByb2Nlc3Nvci4KK2V4dGVybiAi
QyIgeworICAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKK30g
CisKKy8vCisvLyBUaGUgWVlfSU5QVVQgbWFjcm8ganVzdCBjYWxscyB0aGlzLiAgTWF5YmUgdGhp
cyBjb3VsZCBiZSBqdXN0IHB1dCBpbnRvCisvLyB0aGUgbWFjcm8gZGlyZWN0bHkuCisvLworCitp
bnQgeXlfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUpCit7CisgICAgaW50IGxlbjsKKwor
ICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAobGVuID49IG1heF9zaXplKSAKKyAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ug
c2Nhbm5lciB1c2VzIFJFSkVDVCIgKTsKKworICAgIGJ1ZltsZW5dID0gJyAnOworCXJldHVybiBs
ZW4rMTsKK30KKworCisvLworLy8gUGFyc2UgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBh
cnNlLiAgV2Ugc2V0IHVwIGdsb2JhbHMgdXNlZCBieQorLy8geXl3cmFwLgorLy8KKy8vIFJldHVy
bnMgMCBmb3Igc3VjY2VzcywgYXMgcGVyIHl5cGFyc2UoKS4KKy8vCitpbnQgUGFQYXJzZVN0cmlu
Z3MoY2hhciogYXJndltdLCBpbnQgc3RyTGVuW10sIGludCBhcmdjLCBUUGFyc2VDb250ZXh0JiBw
YXJzZUNvbnRleHRMb2NhbCkKK3sKKyAgICBpbnQgYXJndjBsZW47CisgICAgCisgICAgU2NhbkZy
b21TdHJpbmcoYXJndlswXSk7IAorICAgIAorICAgIC8vU3RvcmluZyB0aGUgQ3VycmVudCBDb21w
aWxlciBQYXJzZSBjb250ZXh0IGludG8gdGhlIGNwcCBzdHJ1Y3R1cmUuCisJY3BwLT5wQyA9ICh2
b2lkKikmcGFyc2VDb250ZXh0TG9jYWw7CisJCisJaWYgKCFhcmd2IHx8IGFyZ2MgPT0gMCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kp
IHsKKyAgICAgICAgaWYgKCFhcmd2W2ldKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2Nh
bC5lcnJvcigwLCAiTnVsbCBzaGFkZXIgc291cmNlIHN0cmluZyIsICIiLCAiIik7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyKCk7CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXN0ckxlbikgeworICAgICAgICBhcmd2
MGxlbiA9IChpbnQpIHN0cmxlbihhcmd2WzBdKTsKKyAgICAgICAgc3RyTGVuICAgPSAmYXJndjBs
ZW47CisgICAgfQorICAgIHl5cmVzdGFydCgwKTsKKyAgICAoJnBhcnNlQ29udGV4dExvY2FsKS0+
QWZ0ZXJFT0YgPSBmYWxzZTsKKyAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFB
cmd2ICAgICA9IGFyZ3Y7CisgICAgY3BwLT5QYUFyZ2MgICAgID0gYXJnYzsKKyAgICBjcHAtPlBh
U3RyTGVuICAgPSBzdHJMZW47CisgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOworICAg
IHl5bGluZW5vICAgPSAxOworICAgCisgICAgaWYgKCpjcHAtPlBhU3RyTGVuID49IDApIHsgICAg
CisgICAgICAgIGludCByZXQgPSB5eXBhcnNlKCh2b2lkKikoJnBhcnNlQ29udGV4dExvY2FsKSk7
CisgICAgICAgIGlmIChjcHAtPkNvbXBpbGVFcnJvciA9PSAxIHx8IHBhcnNlQ29udGV4dExvY2Fs
LnJlY292ZXJlZEZyb21FcnJvciB8fCBwYXJzZUNvbnRleHRMb2NhbC5udW1FcnJvcnMgPiAwKQor
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeXllcnJv
cihjaGFyICpzKSAKK3sKKyAgICBpZiAoKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkFmdGVy
RU9GKSB7CisgICAgICAgIGlmIChjcHAtPnRva2Vuc0JlZm9yZUVPRiA9PSAxKSB7CisgICAgICAg
ICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAic3ludGF4IGVycm9yIiwg
InByZS1tYXR1cmUgRU9GIiwgcywgIiIpOworICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHbG9iYWxQYXJz
ZUNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAic3ludGF4IGVycm9yIiwgeXl0ZXh0LCBzLCAiIik7
CisgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0gICAgICAgICAg
ICAKK30KKwordm9pZCBQYVJlc2VydmVkV29yZCgpCit7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0
LT5lcnJvcih5eWxpbmVubywgIlJlc2VydmVkIHdvcmQuIiwgeXl0ZXh0LCAiIiwgIiIpOworICAg
IEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworfQorCitpbnQgUGFJZGVudE9yVHlwZShU
U3RyaW5nJiBpZCwgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwsIFRTeW1ib2wqJiBz
eW1ib2wpCit7CisgICAgc3ltYm9sID0gcGFyc2VDb250ZXh0TG9jYWwuc3ltYm9sVGFibGUuZmlu
ZChpZCk7CisgICAgaWYgKHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9PSBmYWxzZSAm
JiBzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2
YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5s
ZXhBZnRlclR5cGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFRZUEVfTkFNRTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gSURFTlRJRklFUjsKK30KKworaW50IFBhUGFy
c2VDb21tZW50KGludCAmbGluZW5vLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCkK
K3sKKyAgICBpbnQgdHJhbnNpdGlvbkZsYWcgPSAwOworICAgIGludCBuZXh0Q2hhcjsKKyAgICAK
KyAgICB3aGlsZSAodHJhbnNpdGlvbkZsYWcgIT0gMikgeworICAgICAgICBuZXh0Q2hhciA9IHl5
aW5wdXQoKTsKKyAgICAgICAgaWYgKG5leHRDaGFyID09ICdcbicpCisgICAgICAgICAgICAgbGlu
ZW5vKys7CisgICAgICAgIHN3aXRjaCAobmV4dENoYXIpIHsKKyAgICAgICAgY2FzZSAnKicgOgor
ICAgICAgICAgICAgdHJhbnNpdGlvbkZsYWcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJy8nIDogIC8qIGlmIHN0YXIgaXMgdGhlIHByZXZpb3VzIGNoYXJhY3RlciwgdGhl
biBpdCBpcyB0aGUgZW5kIG9mIGNvbW1lbnQgKi8KKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9u
RmxhZyA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDEgOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9GIDoKKyAgICAgICAgICAgIC8qIFJh
aXNlIGVycm9yIG1lc3NhZ2UgaGVyZSAqLworICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwu
ZXJyb3IoeXlsaW5lbm8sICJFbmQgb2Ygc2hhZGVyIGZvdW5kIGJlZm9yZSBlbmQgb2YgY29tbWVu
dC4iLCAiIiwgIiIsICIiKTsKKyAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgcmV0dXJuIFlZX05VTEw7IAorICAgICAgICBkZWZhdWx0IDogIC8q
IEFueSBvdGhlciBjaGFyYWN0ZXIgd2lsbCBiZSBhIHBhcnQgb2YgdGhlIGNvbW1lbnQgKi8KKyAg
ICAgICAgICAgIHRyYW5zaXRpb25GbGFnID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gMTsKK30KKworZXh0ZXJuICJDIiB7CisKK3ZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hh
ciAqbXNnKQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5kZWJ1
Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworfQorCit2b2lkIENQUFdhcm5pbmdUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKQoreworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5p
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZywgeXlsaW5lbm8pOyAKK30K
Kwordm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQoreworICAgICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5lcnJvcih5eWxpbmVubywiIiwgIiIsbXNnLCIiKTsKKyAgICBH
bG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKK30KKwordm9pZCBDUFBFcnJvclRvSW5mb0xv
ZyhjaGFyICptc2cpCit7CisgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5
bGluZW5vLCJzeW50YXggZXJyb3IiLCAiIixtc2csIiIpOworICAgIEdsb2JhbFBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworfQorCit2b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAg
eXlsaW5lbm8gJj0gflNvdXJjZUxvY0xpbmVNYXNrOworICAgIHl5bGluZW5vIHw9IGxpbmU7Cit9
CisKK3ZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCBzdHJpbmcpCit7CisgICAgeXlsaW5lbm8gPSAo
c3RyaW5nIDw8IFNvdXJjZUxvY1N0cmluZ1NoaWZ0KSB8ICh5eWxpbmVubyAmIFNvdXJjZUxvY0xp
bmVNYXNrKTsKK30KKworaW50IEdldFN0cmluZ051bWJlcih2b2lkKQoreworICAgIHJldHVybiB5
eWxpbmVubyA+PiAxNjsKK30KKworaW50IEdldExpbmVOdW1iZXIodm9pZCkKK3sKKyAgICByZXR1
cm4geXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzazsKK30KKwordm9pZCBJbmNMaW5lTnVtYmVy
KHZvaWQpCit7CisgICAgaWYgKCh5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrKSA8PSBTb3Vy
Y2VMb2NMaW5lTWFzaykKKyAgICAgICAgKyt5eWxpbmVubzsKK30KKwordm9pZCBEZWNMaW5lTnVt
YmVyKHZvaWQpCit7CisgICAgaWYgKCh5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrKSA+IDAp
CisgICAgICAgIC0teXlsaW5lbm87Cit9CisKK3ZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIg
Kip0b2tlbnMsIGludCBudW1Ub2tlbnMpCit7ICAgIAorICAgIGlmICghc3RyY21wKHRva2Vuc1sw
XSwgIm9wdGltaXplIikpIHsKKyAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7CisgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
IlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzJdLCAib24iKSkKKyAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5j
b250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0
b2tlbnNbMl0sICJvZmYiKSkKKyAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMp
LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRlciAn
KCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7CisgICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUn
IHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
ICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsKKyAgICAgICAgaWYgKG51bVRva2VucyAh
PSA0KSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coImRlYnVnIHByYWdtYSBzeW50YXgg
aXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7CisgICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdkZWJ1Zycga2V5d29yZCIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFz
dHJjbXAodG9rZW5zWzJdLCAib24iKSkKKyAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0
cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKKyAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBhZnRl
ciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpKSB7CisgICAg
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4cGVjdGVkIHRvIGVuZCAnZGVidWcnIHBy
YWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKwor
I2lmZGVmIFBSQUdNQV9UQUJMRQorICAgICAgICAvLworICAgICAgICAvLyBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYyBwcmFnbWEKKyAgICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBwcmFnbWEKKyAgICAgICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0
aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVjb2duaXplCisgICAgICAgIC8vIEFuIEV4
YW1wbGUgb2Ygb25lIHN1Y2ggaW1wbGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEg
c3ludGF4IGxpa2UKKyAgICAgICAgLy8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQor
ICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2
YWx1ZSBhZ2FpbnN0IHRoZSBwcmFnbWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KKyAgICAgICAgLy8g
ICAgICAgIAorICAgICAgICBpZiAobnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0s
ICIoIikgJiYgIXN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOworICAgICAgICAgICAgVFByYWdtYVRhYmxl
OjppdGVyYXRvciBpdGVyOworICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0
cmluZyh0b2tlbnNbMF0pKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVu
ZCgpKSB7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0g
PSB0b2tlbnNbMl07CisgICAgICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChu
dW1Ub2tlbnMgPj0gMikgeworICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOwor
ICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOworICAgICAgICAgICAgaXRl
ciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKKyAgICAgICAgICAgIGlm
IChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vj
b25kID0gdG9rZW5zWzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
cmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMV07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyNlbmRpZiAvLyBQUkFHTUFfVEFCTEUKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmVTdHIo
Y2hhciAqc3RyaW5nKQoreworICAgIFRTdHJpbmcgc3RyU3JjOworICAgIHN0clNyYyA9IFRTdHJp
bmcoc3RyaW5nKTsKKworICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNn
ID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgKyAiICIgKyBzdHJTcmM7
Cit9CisKK2NvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZvaWQpCit7CisgICAgY3BwLT5FcnJN
c2cgPSAoKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cpLmNfc3RyKCk7Cisg
ICAgcmV0dXJuIGNwcC0+RXJyTXNnOworfQorCit2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQorewor
ICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnID0gIiI7Cit9CisKK1RC
ZWhhdmlvciBHZXRCZWhhdmlvcihjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBpZiAoIXN0
cmNtcCgicmVxdWlyZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7Cisg
ICAgZWxzZSBpZiAoIXN0cmNtcCgiZW5hYmxlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4g
RUJoRW5hYmxlOworICAgIGVsc2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCisg
ICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBi
ZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhXYXJuOworICAgIGVsc2UgeworICAgICAgICBD
UFBTaEluZm9Mb2dNc2coKFRTdHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMg
bm90IHN1cHBvcnRlZCIpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKKyAg
ICB9ICAgICAgICAKK30KKwordm9pZCAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hh
ciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAgVEJlaGF2aW9yIGJlaGF2
aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIFRNYXA8VFN0cmluZywgVEJlaGF2
aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7CisgICAgVFN0cmluZyBtc2c7CisgICAgCisgICAgLy8gc3Bl
Y2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lvbgorICAgIGlmICghc3RyY21wKGV4dE5hbWUsICJh
bGwiKSkgeworICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSB8fCBiZWhhdmlv
clZhbCA9PSBFQmhFbmFibGUpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZXh0ZW5z
aW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlvciIpOyAg
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3Ig
KGl0ZXIgPSAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9yLmJl
Z2luKCk7IGl0ZXIgIT0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2
aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZp
b3JWYWw7CisgICAgICAgIH0gICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIGl0ZXIgPSAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5n
KGV4dE5hbWUpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJlaGF2
aW9yVmFsKSB7CisgICAgICAgICAgICBjYXNlIEVCaFJlcXVpcmU6CisgICAgICAgICAgICAgICAg
Q1BQU2hJbmZvTG9nTXNnKChUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlz
IG5vdCBzdXBwb3J0ZWQiKS5jX3N0cigpKTsgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBFQmhFbmFibGU6CisgICAgICAgICAgICBjYXNlIEVCaFdhcm46CisgICAg
ICAgICAgICBjYXNlIEVCaERpc2FibGU6CisgICAgICAgICAgICAgICAgbXNnID0gVFN0cmluZygi
ZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIjsKKyAgICAgICAg
ICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXlsaW5lbm8pOyAKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICB9Cit9Cisg
ICAgICAgIAorfSAgLy8gZXh0ZXJuICJDIgorCit2b2lkIHNldEluaXRpYWxTdGF0ZSgpCit7Cisg
ICAgeXlfc3RhcnQgPSAxOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MTczIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvKioKKyAqIFRoaXMgaXMgYmlzb24gZ3JhbW1h
ciBhbmQgcHJvZHVjdGlvbiBjb2RlIGZvciBwYXJzaW5nIHRoZSBPcGVuR0wgMi4wIHNoYWRpbmcK
KyAqIGxhbmd1YWdlcy4KKyAqLworJXsKKworLyogQmFzZWQgb246CitBTlNJIEMgWWFjYyBncmFt
bWFyCisKK0luIDE5ODUsIEplZmYgTGVlIHB1Ymxpc2hlZCBoaXMgWWFjYyBncmFtbWFyICh3aGlj
aCBpcyBhY2NvbXBhbmllZCBieSBhCittYXRjaGluZyBMZXggc3BlY2lmaWNhdGlvbikgZm9yIHRo
ZSBBcHJpbCAzMCwgMTk4NSBkcmFmdCB2ZXJzaW9uIG9mIHRoZQorQU5TSSBDIHN0YW5kYXJkLiAg
VG9tIFN0b2NrZmlzY2ggcmVwb3N0ZWQgaXQgdG8gbmV0LnNvdXJjZXMgaW4gMTk4NzsgdGhhdAor
b3JpZ2luYWwsIGFzIG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDE3LjI1IG9m
IHRoZSBjb21wLmxhbmcuYworRkFRLCBjYW4gYmUgZnRwJ2VkIGZyb20gZnRwLnV1Lm5ldCwgZmls
ZSB1c2VuZXQvbmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4KKworSSBpbnRlbmQgdG8ga2Vl
cCB0aGlzIHZlcnNpb24gYXMgY2xvc2UgdG8gdGhlIGN1cnJlbnQgQyBTdGFuZGFyZCBncmFtbWFy
IGFzCitwb3NzaWJsZTsgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVw
YW5jaWVzLgorCitKdXR0YSBEZWdlbmVyLCAxOTk1CisqLworCisjaW5jbHVkZSAiY29tcGlsZXIv
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gcGFyc2VD
b250ZXh0TG9jYWwKKy8qCitUT0RPKGFsb2twKTogWVlQQVJTRV9QQVJBTV9ERUNMIGlzIG9ubHkg
aGVyZSB0byBzdXBwb3J0IG9sZCBiaXNvbi5leGUgaW4KK2NvbXBpbGVyL3Rvb2xzLiBSZW1vdmUg
aXQgd2hlbiB3ZSBjYW4gZXhjbHVzaXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgorKi8KKyNk
ZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQqCisjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQ
YXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpCisjZGVmaW5lIFlZTEVYX1BBUkFNIHBh
cnNlQ29udGV4dExvY2FsCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2
YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQorZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7
CisKKyNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1
YWdlICE9IEVTaExhbmdGcmFnbWVudCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEws
ICIgc3VwcG9ydGVkIGluIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocGFy
c2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVmVydGV4KSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRl
ZCBpbiB2ZXJ0ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgXAorICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK30KKworI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21l
bnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNk
ZWZpbmUgUEFDS19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9
IEVTaExhbmdQYWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHBhY2sgc2hhZGVycyBvbmx5
ICIsIFMsICIiLCAiIik7ICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVOUEFD
S19PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5w
YWNrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB1bnBhY2sgc2hhZGVycyBvbmx5ICIsIFMsICIi
LCAiIik7ICAgICAgICAgICAgXAorICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQQUNLX1VOUEFDS19PTkxZ
KFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1VucGFjayAmJiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhcnNlQ29udGV4dC0+bGFuZ3Vh
Z2UgIT0gRVNoTGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjay91bnBhY2sg
c2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICAgICAgIFwKKyAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CislfQorJXVuaW9u
IHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9u
IHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7Cisg
ICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAg
ICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRT
b3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9wZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1O
b2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWRO
b2RlOworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAg
ICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwor
ICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVy
IHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAg
ICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAg
ICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsK
K30KKworJXsKKyAgICBleHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqLCB2b2lkKik7CislfQorCisl
cHVyZV9wYXJzZXIgLyogSnVzdCBpbiBjYXNlIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVh
ZHMgKi8KKyVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2Yg
aWYgfCBlbHNlICovCisldG9rZW4gPGxleD4gSU5WQVJJQU5UIEhJR0hfUFJFQ0lTSU9OIE1FRElV
TV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJT04KKyV0b2tlbiA8bGV4PiBBVFRSSUJV
VEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQRSBJTlRfVFlQRQorJXRva2VuIDxsZXg+
IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NBUkQgUkVUVVJOCisldG9rZW4gPGxl
eD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVDMiBWRUMzIFZFQzQKKyV0
b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJWDMgTUFUUklYNCBJTl9RVUFMIE9VVF9RVUFMIElOT1VU
X1FVQUwgVU5JRk9STSBWQVJZSU5HCisldG9rZW4gPGxleD4gU1RSVUNUIFZPSURfVFlQRSBXSElM
RQorJXRva2VuIDxsZXg+IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRQorCisldG9rZW4gPGxleD4gSURF
TlRJRklFUiBUWVBFX05BTUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQK
KyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJT04KKyV0b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hU
X09QCisldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9PUCBORV9PUAor
JXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZfQVNTSUdOIEFE
RF9BU1NJR04KKyV0b2tlbiA8bGV4PiBNT0RfQVNTSUdOIExFRlRfQVNTSUdOIFJJR0hUX0FTU0lH
TiBBTkRfQVNTSUdOIFhPUl9BU1NJR04gT1JfQVNTSUdOCisldG9rZW4gPGxleD4gU1VCX0FTU0lH
TgorCisldG9rZW4gPGxleD4gTEVGVF9QQVJFTiBSSUdIVF9QQVJFTiBMRUZUX0JSQUNLRVQgUklH
SFRfQlJBQ0tFVCBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIERPVAorJXRva2VuIDxsZXg+IENPTU1B
IENPTE9OIEVRVUFMIFNFTUlDT0xPTiBCQU5HIERBU0ggVElMREUgUExVUyBTVEFSIFNMQVNIIFBF
UkNFTlQKKyV0b2tlbiA8bGV4PiBMRUZUX0FOR0xFIFJJR0hUX0FOR0xFIFZFUlRJQ0FMX0JBUiBD
QVJFVCBBTVBFUlNBTkQgUVVFU1RJT04KKworJXR5cGUgPGludGVybT4gYXNzaWdubWVudF9vcGVy
YXRvciB1bmFyeV9vcGVyYXRvcgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHZhcmlh
YmxlX2lkZW50aWZpZXIgcHJpbWFyeV9leHByZXNzaW9uIHBvc3RmaXhfZXhwcmVzc2lvbgorJXR5
cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGV4cHJlc3Npb24gaW50ZWdlcl9leHByZXNzaW9u
IGFzc2lnbm1lbnRfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IHVu
YXJ5X2V4cHJlc3Npb24gbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBhZGRpdGl2ZV9leHByZXNz
aW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gcmVsYXRpb25hbF9leHByZXNzaW9u
IGVxdWFsaXR5X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBjb25k
aXRpb25hbF9leHByZXNzaW9uIGNvbnN0YW50X2V4cHJlc3Npb24KKyV0eXBlIDxpbnRlcm0uaW50
ZXJtVHlwZWROb2RlPiBsb2dpY2FsX29yX2V4cHJlc3Npb24gbG9naWNhbF94b3JfZXhwcmVzc2lv
biBsb2dpY2FsX2FuZF9leHByZXNzaW9uCisldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4g
c2hpZnRfZXhwcmVzc2lvbiBhbmRfZXhwcmVzc2lvbiBleGNsdXNpdmVfb3JfZXhwcmVzc2lvbiBp
bmNsdXNpdmVfb3JfZXhwcmVzc2lvbgorJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGZ1
bmN0aW9uX2NhbGwgaW5pdGlhbGl6ZXIgY29uZGl0aW9uIGNvbmRpdGlvbm9wdAorCisldHlwZSA8
aW50ZXJtLmludGVybU5vZGU+IHRyYW5zbGF0aW9uX3VuaXQgZnVuY3Rpb25fZGVmaW5pdGlvbgor
JXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBzdGF0ZW1lbnQgc2ltcGxlX3N0YXRlbWVudAorJXR5
cGUgPGludGVybS5pbnRlcm1BZ2dyZWdhdGU+ICBzdGF0ZW1lbnRfbGlzdCBjb21wb3VuZF9zdGF0
ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gZGVjbGFyYXRpb25fc3RhdGVtZW50IHNl
bGVjdGlvbl9zdGF0ZW1lbnQgZXhwcmVzc2lvbl9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50
ZXJtTm9kZT4gZGVjbGFyYXRpb24gZXh0ZXJuYWxfZGVjbGFyYXRpb24KKyV0eXBlIDxpbnRlcm0u
aW50ZXJtTm9kZT4gZm9yX2luaXRfc3RhdGVtZW50IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdf
c2NvcGUKKyV0eXBlIDxpbnRlcm0ubm9kZVBhaXI+IHNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCBm
b3JfcmVzdF9zdGF0ZW1lbnQKKyV0eXBlIDxpbnRlcm0uaW50ZXJtTm9kZT4gaXRlcmF0aW9uX3N0
YXRlbWVudCBqdW1wX3N0YXRlbWVudCBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisldHlwZSA8aW50
ZXJtPiBzaW5nbGVfZGVjbGFyYXRpb24gaW5pdF9kZWNsYXJhdG9yX2xpc3QKKworJXR5cGUgPGlu
dGVybT4gcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHBhcmFtZXRl
cl90eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFs
aWZpZXIKKworJXR5cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKKyV0
eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlw
ZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0
eXBlX3NwZWNpZmllcl9ub25hcnJheQorJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lm
aWVyCisldHlwZSA8aW50ZXJtLnR5cGVMaW5lPiBzdHJ1Y3RfZGVjbGFyYXRvcgorJXR5cGUgPGlu
dGVybS50eXBlTGlzdD4gc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBzdHJ1Y3RfZGVjbGFyYXRpb24g
c3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKKyV0eXBlIDxpbnRlcm0uZnVuY3Rpb24+IGZ1bmN0aW9u
X2hlYWRlciBmdW5jdGlvbl9kZWNsYXJhdG9yIGZ1bmN0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxp
bnRlcm0uZnVuY3Rpb24+IGZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25f
Y2FsbF9oZWFkZXIKKyV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFy
YW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxf
Z2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKKyV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxf
b3JfbWV0aG9kCisKKyVzdGFydCB0cmFuc2xhdGlvbl91bml0CislJQorCit2YXJpYWJsZV9pZGVu
dGlmaWVyCisgICAgOiBJREVOVElGSUVSIHsKKyAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBz
ZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UKKyAgICAgICAgY29uc3QgVFN5bWJv
bCogc3ltYm9sID0gJDEuc3ltYm9sOworICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxl
OworICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOworICAgICAgICAgICAgVFZhcmlh
YmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7CisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlID0gZmFrZVZhcmlhYmxlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUgdHlw
ZSBzeW1ib2wKKyAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0
ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGRvbid0IGRlbGV0ZSAkMS5zdHJpbmcsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwg
YW5kIHRoZSBwb29sCisgICAgICAgIC8vIHBvcCB3aWxsIHJlY2xhaW0gdGhlIG1lbW9yeQorCisg
ICAgICAgIGlmICh2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
ICkgeworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5n
ZXRDb25zdFBvaW50ZXIoKTsKKyAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUo
KSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oY29uc3RBcnJheSwgdCwgJDEubGluZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxp
bmUpOworICAgIH0KKyAgICA7CisKK3ByaW1hcnlfZXhwcmVzc2lvbgorICAgIDogdmFyaWFibGVf
aWRlbnRpZmllciB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgSU5UQ09OU1RBTlQg
eworICAgICAgICAvLworICAgICAgICAvLyBJTlRfVFlQRSBpcyBvbmx5IDE2LWJpdCBwbHVzIHNp
Z24gYml0IGZvciB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycywKKyAgICAgICAgLy8gY2hlY2sgZm9y
IG92ZXJmbG93IGZvciBjb25zdGFudHMKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKGFicygkMS5p
KSA+PSAoMSA8PCAxNikpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KCQxLmkpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAgfQorICAgIHwgRkxPQVRDT05TVEFOVCB7CisgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCQxLmYpOworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBC
T09MQ09OU1RBTlQgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5iKTsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5l
KTsKKyAgICB9CisgICAgfCBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4geworICAg
ICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisKK3Bvc3RmaXhfZXhwcmVzc2lvbgorICAgIDog
cHJpbWFyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0
Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdIVF9CUkFD
S0VUIHsKKyAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgoKSAmJiAh
JDEtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xOb2RlKCkp
CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2Yg
J1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNT
eW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAn
WycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9u
IiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYg
JDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICBpZiAoJDEtPmlz
QXJyYXkoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAgICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RBcnJheU5vZGUoJDMtPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgJDEsICQyLmxpbmUp
OworICAgICAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQg
Zm9sZGluZyBmb3IgdmVjdG9ycworICAgICAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRz
OworICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxk
cy5vZmZzZXRzWzBdID0gJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLT5nZXRJQ29uc3QoKTsgLy8gbmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYu
eHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJyYXkKKyAgICAgICAgICAgICAgICAkJCA9IHBhcnNl
Q29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsICQyLmxpbmUpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciBtYXRyaWNlcworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdE1h
dHJpeE5vZGUoJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKSwgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewor
ICAgICAgICAgICAgICAgIGlmICgoJDEtPmlzVmVjdG9yKCkgfHwgJDEtPmlzTWF0cml4KCkpICYm
ICQxLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEkMS0+aXNBcnJheSgp
ICkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIi
LCAiWyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpID09IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRNYXhB
cnJheVNpemUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCktPmdldElDb25zdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5U2V0TWF4U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2RlKCksICQx
LT5nZXRUeXBlUG9pbnRlcigpLCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpLCB0cnVlLCAkMi5saW5lKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2V0TWF4U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2Rl
KCksICQxLT5nZXRUeXBlUG9pbnRlcigpLCAwLCBmYWxzZSwgJDIubGluZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdl
dElDb25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJh
cnJheSBpbmRleCBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCAkMywg
JDIubGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6
ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAiIiwgIlsiLCAiYXJyYXkgbXVzdCBiZSByZWRlY2xhcmVkIHdpdGggYSBzaXplIGJlZm9y
ZSBiZWluZyBpbmRleGVkIHdpdGggYSB2YXJpYWJsZSIpOworICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5k
aXJlY3QsICQxLCAkMywgJDIubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25z
dCgwLjBmKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29u
c3QpLCAkMi5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNBcnJheSgpKSB7CisgICAg
ICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAk
JC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLCAkMS0+Z2V0VHlwZSgp
LmdldFR5cGVOYW1lKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC0+
c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZx
VGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgJDEtPmlzTWF0cml4KCkpKTsKKworICAg
ICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisg
ICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFD
b25zdCk7CisgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkgJiYgJDEtPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgJDEt
PmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpCisg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAg
ICBlbHNlIGlmICgkMS0+aXNWZWN0b3IoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigp
ID09IEV2cUNvbnN0KQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2lj
VHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0KSk7CisgICAgICAgIGVsc2UgaWYg
KCQxLT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJh
c2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICAkJC0+c2V0VHlwZSgkMS0+Z2V0VHlwZSgpKTsKKyAgICB9CisgICAg
fCBmdW5jdGlvbl9jYWxsIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIEZJRUxEX1NFTEVDVElPTiB7CisgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iLCAiIik7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkMS0+aXNW
ZWN0b3IoKSkgeworICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgICAg
ICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCokMy5zdHJpbmcsICQxLT5n
ZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmll
bGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkg
eyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICQxLCAkMy5saW5l
KTsKKyAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgeworICAgICAgICAg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zm
c2V0c1swXSk7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAgICAgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4
RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAkJC0+c2V0
VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9y
U3RyaW5nID0gKiQzLnN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5s
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAg
ICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5n
ZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCQx
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAg
ICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywg
JDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgJDMubGluZSkpIHsKKyAgICAgICAgICAgICAg
ICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVD
b2wgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsKKyAgICAgICAgICAg
ICAgICBmaWVsZHMuY29sID0gMDsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8
fCBmaWVsZHMud2hvbGVDb2wpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwg
IiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAg
ICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5n
ZXRQcmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRJQ29uc3QoZmllbGRzLmNvbCAqICQxLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7
CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4
LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFz
aWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICAgICAgICAg
IGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgVFR5cGVMaXN0KiBmaWVsZHMg
PSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAw
KSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0
dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAg
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAq
JDMuc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29u
c3RTdHJ1Y3QoKiQzLnN0cmluZywgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBv
ZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJl
ZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICooKmZp
ZWxkcylbaV0udHlwZSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAk
MSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwg
IiIpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRy
aXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBv
b2wKKyAgICB9CisgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gSU5DX09QIHsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiKysiLCAkMSkpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsICQyLmxp
bmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgewor
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDIubGluZSwgIisrIiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIHwgcG9zdGZp
eF9leHByZXNzaW9uIERFQ19PUCB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soJDIubGluZSwgIi0tIiwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+dW5hcnlPcEVycm9yKCQyLmxpbmUsICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAk
MTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2ludGVnZXJfZXhwcmVzc2lvbgorICAgIDog
ZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmludGVnZXJFcnJvckNoZWNr
KCQxLCAiW10iKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2NhbGwKKyAgICA6IGZ1bmN0aW9u
X2NhbGxfb3JfbWV0aG9kIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAkMS5mdW5jdGlv
bjsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gZm5DYWxsLT5nZXRCdWlsdEluT3AoKTsKKworICAg
ICAgICBpZiAob3AgIT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFRoZW4gdGhpcyBzaG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAg
IC8vIERvbid0IGdvIHRocm91Z2ggdGhlIHN5bWJvbCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgor
ICAgICAgICAgICAgLy8gVGhlaXIgcGFyYW1ldGVycyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRo
bWljYWxseS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQs
IEVicFVuZGVmaW5lZCk7ICAvLyB1c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUgYmFjaworICAgICAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCQxLmxpbmUsICQx
LmludGVybU5vZGUsICpmbkNhbGwsIG9wLCAmdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAkJCA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gSXQncyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdHJ1Y3Rv
cigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgJDEubGluZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgJDEubGluZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAkJC0+c2V0VHlwZSh0eXBlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQg
aXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOworICAgICAgICAgICAgYm9vbCBidWlsdEluOworICAg
ICAgICAgICAgZm5DYW5kaWRhdGUgPSBwYXJzZUNvbnRleHQtPmZpbmRGdW5jdGlvbigkMS5saW5l
LCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgeworICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4g
IEJ1dCwgaXQgbWlnaHQgc3RpbGwgbWFwIHRvIGEgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICAv
LyBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBvcCA9IGZu
Q2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAm
JiBvcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBtYXBwZWQgdG8gYSBidWlsdC1pbiBvcGVyYXRpb24u
CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIGlmIChmbkNhbmRp
ZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5h
cnkgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3As
ICQxLmludGVybU5vZGUsIDAsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcg
b3BlcmFuZCB0eXBlIiwgIkludGVybmFsIEVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQq
PigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRl
cm1BZ2dyZWdhdGUsIG9wLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFs
IGZ1bmN0aW9uIGNhbGwKKworICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9w
RnVuY3Rpb25DYWxsLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
Zm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIGJ1aWx0
SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwgaXQncyBhIHVzZXJEZWZpbmVkIC0+IGNvdWxkIGJl
IGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5jdGlvbiBhbHNvCisgICAgICAgICAgICAgICAgICAg
IC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQncyBkZWZpbml0ZWx5IGEgYnVpbHRJbiBmdW5jdGlv
biB3aXRoIEVPcE51bGwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFidWlsdEluKQorICAgICAg
ICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7
CisgICAgICAgICAgICAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1lKGZuQ2Fu
ZGlkYXRlLT5nZXRNYW5nbGVkTmFtZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBUUXVhbGlm
aWVyIHF1YWw7CisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXJMaXN0JiBxdWFsaWZpZXJM
aXN0ID0gJCQtPmdldEFzQWdncmVnYXRlKCktPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbCA9ICgqZm5DYW5kaWRhdGUpW2ld
LnR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWwg
PT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJh
c3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBl
ZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBw
YXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllckxpc3QucHVzaF9iYWNrKHF1YWwpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICQkLT5zZXRUeXBlKGZuQ2FuZGlkYXRlLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlIHdhcyBwdXQgb3V0IGJ5
IFBhRmluZEZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAvLyBQdXQgb24gYSBkdW1teSBub2Rl
IGZvciBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVs
ZXRlIGZuQ2FsbDsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX29yX21ldGhvZAorICAg
IDogZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyB7CisgICAgICAg
IHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMubGluZSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQi
LCAiIiwgIiIpOworICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQg
PSAkMzsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9jYWxsX2dlbmVyaWMKKyAgICA6IGZ1bmN0
aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOworICAgIH0KKyAgICB8IGZ1bmN0aW9u
X2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMgUklHSFRfUEFSRU4geworICAgICAgICAkJCA9ICQx
OworICAgICAgICAkJC5saW5lID0gJDIubGluZTsKKyAgICB9CisgICAgOworCitmdW5jdGlvbl9j
YWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzCisgICAgOiBmdW5jdGlvbl9jYWxsX2hlYWRlciBWT0lE
X1RZUEUgeworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRlcm1Ob2Rl
ID0gMDsKKyAgICB9CisgICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlciB7CisgICAgICAgICQkLmZ1
bmN0aW9uID0gJDE7CisgICAgICAgICQkLmludGVybU5vZGUgPSAwOworICAgIH0KKyAgICA7CisK
K2Z1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycworICAgIDogZnVuY3Rpb25fY2Fs
bF9oZWFkZXIgYXNzaWdubWVudF9leHByZXNzaW9uIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgMCwgbmV3IFRUeXBlKCQyLT5nZXRUeXBlKCkpIH07CisgICAgICAgICQxLT5hZGRQYXJh
bWV0ZXIocGFyYW0pOworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAgICAkJC5pbnRl
cm1Ob2RlID0gJDI7CisgICAgfQorICAgIHwgZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJh
bWV0ZXJzIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7CisgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgkMy0+Z2V0VHlwZSgpKSB9OworICAgICAgICAkMS5mdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtKTsKKyAgICAgICAgJCQuZnVuY3Rpb24gPSAkMS5mdW5j
dGlvbjsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgJDMsICQyLmxpbmUpOworICAgIH0KKyAgICA7
CisKK2Z1bmN0aW9uX2NhbGxfaGVhZGVyCisgICAgOiBmdW5jdGlvbl9pZGVudGlmaWVyIExFRlRf
UEFSRU4geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90
ZTogIENvbnN0cnVjdG9ycyBsb29rIGxpa2UgZnVuY3Rpb25zLCBidXQgYXJlIHJlY29nbml6ZWQg
YXMgdHlwZXMuCisKK2Z1bmN0aW9uX2lkZW50aWZpZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyIHsK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uc3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKCQxLmFycmF5KSB7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7CisgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJDEuc2V0QXJy
YXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCQxLnVz
ZXJEZWYpIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZyA9ICIiOworICAgICAgICAg
ICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3
IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgRU9wQ29uc3RydWN0U3RydWN0KTsKKyAgICAg
ICAgICAgICQkID0gZnVuY3Rpb247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUT3Bl
cmF0b3Igb3AgPSBFT3BOdWxsOworICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25z
dHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0
Y2goJDEuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgMjogICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWMyIiwgJDEubGlu
ZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
MzogICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWMzIiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgRlJBR19WRVJU
X09OTFkoIml2ZWM0IiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogICAg
ICAgRlJBR19WRVJUX09OTFkoImJ2ZWMyIiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZl
YzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFko
ImJ2ZWMzIiwgJDEubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgNDogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWM0IiwgJDEubGluZSk7
IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcCA9PSBF
T3BOdWxsKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcoJDEudHlw
ZSksICIiKTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BD
b25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRTdHJpbmcgdGVtcFN0
cmluZyA9ICIiOworICAgICAgICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgICAgICBURnVu
Y3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwor
ICAgICAgICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IElERU5U
SUZJRVIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEu
bGluZSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOworICAgICAgICBURnVu
Y3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigkMS5zdHJpbmcsIHR5cGUpOworICAgICAg
ICAkJCA9IGZ1bmN0aW9uOworICAgIH0KKyAgICB8IEZJRUxEX1NFTEVDVElPTiB7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5n
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlwZSk7CisgICAgICAgICQkID0gZnVuY3Rpb247
CisgICAgfQorICAgIDsKKwordW5hcnlfZXhwcmVzc2lvbgorICAgIDogcG9zdGZpeF9leHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVz
c2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGlu
ZSwgIisrIiwgJDIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUlu
Y3JlbWVudCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3Io
JDEubGluZSwgIisrIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9ICQyOworICAgICAgICB9Cisg
ICAgfQorICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQxLmxpbmUsICItLSIsICQyKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICQyLCAkMS5saW5lLCBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsICItLSIsICQyLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHVuYXJ5X29wZXJhdG9y
IHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgeworICAg
ICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEu
b3AsICQyLCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIi
OworICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
RU9wTmVnYXRpdmU6ICAgZXJyb3JPcCA9ICItIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBFT3BMb2dpY2FsTm90OiBlcnJvck9wID0gIiEiOyBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgZXJyb3JPcCwgJDItPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICQkID0gJDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgJCQgPSAkMjsKKyAgICB9CisgICAgOworLy8gR3JhbW1hciBOb3RlOiAgTm8gdHJhZGl0
aW9uYWwgc3R5bGUgdHlwZSBjYXN0cy4KKwordW5hcnlfb3BlcmF0b3IKKyAgICA6IFBMVVMgIHsg
JCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTnVsbDsgfQorICAgIHwgREFTSCAgeyAkJC5s
aW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BOZWdhdGl2ZTsgfQorICAgIHwgQkFORyAgeyAkJC5s
aW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BMb2dpY2FsTm90OyB9CisgICAgOworLy8gR3JhbW1h
ciBOb3RlOiAgTm8gJyonIG9yICcmJyB1bmFyeSBvcHMuICBQb2ludGVycyBhcmUgbm90IHN1cHBv
cnRlZC4KKworbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgorICAgIDogdW5hcnlfZXhwcmVzc2lv
biB7ICQkID0gJDE7IH0KKyAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFy
eV9leHByZXNzaW9uIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIioiLCAkMi5saW5lKTsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11
bCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigk
Mi5saW5lLCAiKiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNz
aW9uIFNMQVNIIHVuYXJ5X2V4cHJlc3Npb24geworICAgICAgICBGUkFHX1ZFUlRfT05MWSgiLyIs
ICQyLmxpbmUpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCQyLmxpbmUsICIvIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2FkZGl0
aXZlX2V4cHJlc3Npb24KKyAgICA6IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CisgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BBZGQsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoJDIubGluZSwgIisiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAkJCA9ICQxOworICAgICAgICB9CisgICAgfQorICAgIHwgYWRkaXRpdmVfZXhw
cmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsICQy
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkg
eworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICItIiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICA7CisKK3NoaWZ0X2V4cHJlc3Npb24KKyAgICA6IGFkZGl0aXZl
X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCityZWxhdGlvbmFsX2V4cHJlc3Npb24K
KyAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMs
ICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0g
MCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI8
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiAg
eworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wR3JlYXRlclRoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoJDIubGluZSwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5l
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBz
aGlmdF9leHByZXNzaW9uICB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI8PSIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdChmYWxzZSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIHwgcmVsYXRpb25h
bF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKKyAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWws
ICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlm
ICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIu
bGluZSwgIj49IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAg
ICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgOworCitlcXVhbGl0eV9leHByZXNzaW9uCisgICAgOiByZWxhdGlvbmFsX2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIEVRX09QIHJl
bGF0aW9uYWxfZXhwcmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIj09IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwg
JDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxp
bmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgfQorICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxhdGlv
bmFsX2V4cHJlc3Npb24geworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIiE9IiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZh
bHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgJDIubGluZSk7CisgICAgICAgIH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMt
PmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUs
ICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgfQorICAgIDsKKworYW5kX2V4cHJlc3Npb24KKyAgICA6IGVxdWFsaXR5X2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitleGNsdXNpdmVfb3JfZXhwcmVzc2lvbgor
ICAgIDogYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgOworCitpbmNsdXNpdmVfb3Jf
ZXhwcmVzc2lvbgorICAgIDogZXhjbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Cisg
ICAgOworCitsb2dpY2FsX2FuZF9leHByZXNzaW9uCisgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVz
c2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGlu
Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICQxLCAkMywgJDIubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIiYmIiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOworCitsb2dp
Y2FsX3hvcl9leHByZXNzaW9uCisgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQorICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhw
cmVzc2lvbiAgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OworICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAkMi5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK2xvZ2ljYWxfb3JfZXhwcmVz
c2lvbgorICAgIDogbG9naWNhbF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KKyAgICB8IGxv
Z2ljYWxfb3JfZXhwcmVzc2lvbiBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsT3IsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoJDIubGluZSwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgOworCitjb25kaXRpb25hbF9leHByZXNzaW9uCisgICAgOiBsb2dp
Y2FsX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CisgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Np
b24gUVVFU1RJT04gZXhwcmVzc2lvbiBDT0xPTiBhc3NpZ25tZW50X2V4cHJlc3Npb24geworICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCQxLCAkMywgJDUsICQyLmxpbmUpOworICAg
ICAgICBpZiAoJDMtPmdldFR5cGUoKSAhPSAkNS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgJCQg
PSAwOworCisgICAgICAgIGlmICgkJCA9PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjoiLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDUt
PmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9ICQ1OworICAgICAgICB9CisgICAgfQorICAgIDsKKworYXNz
aWdubWVudF9leHByZXNzaW9uCisgICAgOiBjb25kaXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQorICAgIHwgdW5hcnlfZXhwcmVzc2lvbiBhc3NpZ25tZW50X29wZXJhdG9yIGFzc2lnbm1l
bnRfZXhwcmVzc2lvbiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soJDIubGluZSwgImFzc2lnbiIsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2ln
bigkMi5vcCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgaWYgKCQkID09IDApIHsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+YXNzaWduRXJyb3IoJDIubGluZSwgImFzc2lnbiIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gJDE7CisgICAgICAg
IH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250
ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsKKwor
YXNzaWdubWVudF9vcGVyYXRvcgorICAgIDogRVFVQUwgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3AgPSBFT3BBc3NpZ247
IH0KKyAgICB8IE1VTF9BU1NJR04gICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICQxLmxpbmUpOyAg
ICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wTXVsQXNzaWduOyB9CisgICAgfCBESVZf
QVNTSUdOICAgeyBGUkFHX1ZFUlRfT05MWSgiLz0iLCAkMS5saW5lKTsgICAgICQkLmxpbmUgPSAk
MS5saW5lOyAkJC5vcCA9IEVPcERpdkFzc2lnbjsgfQorICAgIHwgQUREX0FTU0lHTiAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5saW5lID0gJDEubGluZTsgJCQub3Ag
PSBFT3BBZGRBc3NpZ247IH0KKyAgICB8IFNVQl9BU1NJR04gICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wU3ViQXNzaWdu
OyB9CisgICAgOworCitleHByZXNzaW9uCisgICAgOiBhc3NpZ25tZW50X2V4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gQ09NTUEgYXNzaWdubWVu
dF9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb21tYSgkMSwgJDMsICQyLmxpbmUpOworICAgICAgICBpZiAoJCQgPT0gMCkgeworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIsIiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSAkMzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICA7CisKK2NvbnN0YW50X2V4cHJlc3Npb24KKyAgICA6IGNvbmRpdGlvbmFsX2V4
cHJlc3Npb24geworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdEVycm9yQ2hlY2soJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIDsKKworZGVjbGFyYXRpb24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBT
RU1JQ09MT04gICB7CisgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUgKnByb3RvdHlwZSA9IG5ldyBU
SW50ZXJtQWdncmVnYXRlOworICAgICAgICBwcm90b3R5cGUtPnNldFR5cGUoZnVuY3Rpb24uZ2V0
UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXROYW1lKGZ1bmN0aW9uLmdldE5h
bWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdl
dFBhcmFtQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyICZw
YXJhbSA9IGZ1bmN0aW9uW2ldOworICAgICAgICAgICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdl
dFR5cGUoKSwgJDEubGluZSksICQxLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAkMS5saW5lKSwgJDEu
bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByb3Rv
dHlwZS0+c2V0T3BlcmF0b3IoRU9wUHJvdG90eXBlKTsKKyAgICAgICAgJCQgPSBwcm90b3R5cGU7
CisgICAgfQorICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKKyAgICAgICAg
aWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKKyAgICAgICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZS0+
c2V0T3BlcmF0b3IoRU9wRGVjbGFyYXRpb24pOworICAgICAgICAkJCA9ICQxLmludGVybUFnZ3Jl
Z2F0ZTsKKyAgICB9CisgICAgfCBQUkVDSVNJT04gcHJlY2lzaW9uX3F1YWxpZmllciB0eXBlX3Nw
ZWNpZmllcl9ub19wcmVjIFNFTUlDT0xPTiB7CisgICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggJDMudHlwZSwgJDIgKTsKKyAgICAgICAgJCQgPSAw
OworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX3Byb3RvdHlwZQorICAgIDogZnVuY3Rpb25fZGVj
bGFyYXRvciBSSUdIVF9QQVJFTiAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBk
ZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9k
dWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2Ug
ZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCBy
ZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAg
IC8vCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+
KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwor
ICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJuVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRo
ZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygp
LCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFt
Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqcHJldkRlYylbaV0udHlwZS0+
Z2V0UXVhbGlmaWVyKCkgIT0gKCokMSlbaV0udHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlciBxdWFsaWZpZXJzIiwgKCokMSlb
aV0udHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZGVj
bGFyYXRpb24sIGl0IGNvdWxkIGFsc28gYmUgYSBkZWZpbml0aW9uLAorICAgICAgICAvLyBpbiB3
aGljaCBjYXNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgdmFyaWFibGUgbmFtZXMgZnJvbSB0aGlzIG9u
ZSwgYW5kIG5vdCB0aGUgb25lIHRoYXQncworICAgICAgICAvLyBiZWluZyByZWRlY2xhcmVkLiAg
U28sIHBhc3MgYmFjayB1cCB0aGlzIGRlY2xhcmF0aW9uLCBub3QgdGhlIG9uZSBpbiB0aGUgc3lt
Ym9sIHRhYmxlLgorICAgICAgICAvLworICAgICAgICAkJC5mdW5jdGlvbiA9ICQxOworICAgICAg
ICAkJC5saW5lID0gJDIubGluZTsKKworICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqJCQuZnVuY3Rpb24pOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9uX2RlY2xhcmF0
b3IKKyAgICA6IGZ1bmN0aW9uX2hlYWRlciB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAg
IHwgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyB7CisgICAgICAgICQkID0gJDE7Cisg
ICAgfQorICAgIDsKKworCitmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCisgICAgOiBm
dW5jdGlvbl9oZWFkZXIgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgLy8gQWRkIHRo
ZSBwYXJhbWV0ZXIKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgaWYgKCQyLnBhcmFtLnR5cGUt
PmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpCisgICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVy
KCQyLnBhcmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICQyLnBhcmFtLnR5
cGU7CisgICAgfQorICAgIHwgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyBDT01NQSBw
YXJhbWV0ZXJfZGVjbGFyYXRpb24geworICAgICAgICAvLworICAgICAgICAvLyBPbmx5IGZpcnN0
IHBhcmFtZXRlciBvZiBvbmUtcGFyYW1ldGVyIGZ1bmN0aW9ucyBjYW4gYmUgdm9pZAorICAgICAg
ICAvLyBUaGUgY2hlY2sgZm9yIG5hbWVkIHBhcmFtZXRlcnMgbm90IGJlaW5nIHZvaWQgaXMgZG9u
ZSBpbiBwYXJhbWV0ZXJfZGVjbGFyYXRvcgorICAgICAgICAvLworICAgICAgICBpZiAoJDMucGFy
YW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBh
biBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgZGVsZXRlICQzLnBh
cmFtLnR5cGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFt
ZXRlcgorICAgICAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgICAgICQxLT5hZGRQYXJhbWV0ZXIo
JDMucGFyYW0pOworICAgICAgICB9CisgICAgfQorICAgIDsKKworZnVuY3Rpb25faGVhZGVyCisg
ICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4geworICAgICAg
ICBpZiAoJDEucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVt
cG9yYXJ5KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBx
dWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmlu
ZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVyIGlzIG5vdCBpbnZv
bHZlZCBhcyB3ZWxsLi4uCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRl
ciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCisgICAgICAgIFRGdW5j
dGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRUeXBlIHR5cGUoJDEpOworICAgICAgICBmdW5jdGlv
biA9IG5ldyBURnVuY3Rpb24oJDIuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgJCQgPSBmdW5jdGlv
bjsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfZGVjbGFyYXRvcgorICAgIC8vIFR5cGUgKyBu
YW1lCisgICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIHsKKyAgICAgICAgaWYgKCQxLnR5
cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5n
KSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtID0geyQyLnN0cmluZywgbmV3IFRUeXBlKCQxKX07CisgICAgICAgICQkLmxpbmUg
PSAkMi5saW5lOworICAgICAgICAkJC5wYXJhbSA9IHBhcmFtOworICAgIH0KKyAgICB8IHR5cGVf
c3BlY2lmaWVyIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkg
b3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJv
ckNoZWNrKCQzLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5l
LCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGludCBzaXplOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCQzLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKworICAgICAgICBUVHlw
ZSogdHlwZSA9IG5ldyBUVHlwZSgkMSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICQy
LnN0cmluZywgdHlwZSB9OworICAgICAgICAkJC5saW5lID0gJDIubGluZTsKKyAgICAgICAgJCQu
cGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgOworCitwYXJhbWV0ZXJfZGVjbGFyYXRpb24KKyAg
ICAvLworICAgIC8vIFRoZSBvbmx5IHBhcmFtZXRlciBxdWFsaWZpZXIgYSBwYXJhbWV0ZXIgY2Fu
IGhhdmUgYXJlCisgICAgLy8gSU5fUVVBTCwgT1VUX1FVQUwsIElOT1VUX1FVQUwsIG9yIENPTlNU
LgorICAgIC8vCisKKyAgICAvLworICAgIC8vIFR5cGUgKyBuYW1lCisgICAgLy8KKyAgICA6IHR5
cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3Igewor
ICAgICAgICAkJCA9ICQzOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soJDMubGluZSwgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVhbGlm
aWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICok
Mi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9y
YXJ5LCAkMSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICB9CisgICAgLy8KKyAgICAvLyBPbmx5IHR5cGUKKyAgICAvLworICAgIHwgdHlw
ZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIg
eworICAgICAgICAkJCA9ICQzOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9y
Q2hlY2soJDMubGluZSwgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICB9CisgICAgfCBwYXJhbWV0ZXJfcXVh
bGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgICAgICQkID0gJDI7CisgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUs
ICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUsIEV2
cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgfQorICAgIDsKKworcGFyYW1ldGVyX3F1YWxpZmllcgorICAgIDog
LyogZW1wdHkgKi8geworICAgICAgICAkJCA9IEV2cUluOworICAgIH0KKyAgICB8IElOX1FVQUwg
eworICAgICAgICAkJCA9IEV2cUluOworICAgIH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAg
JCQgPSBFdnFPdXQ7CisgICAgfQorICAgIHwgSU5PVVRfUVVBTCB7CisgICAgICAgICQkID0gRXZx
SW5PdXQ7CisgICAgfQorICAgIDsKKworcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCisgICAgOiB0
eXBlX3NwZWNpZmllciB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlw
ZSgkMSkgfTsKKyAgICAgICAgJCQucGFyYW0gPSBwYXJhbTsKKyAgICB9CisgICAgOworCitpbml0
X2RlY2xhcmF0b3JfbGlzdAorICAgIDogc2luZ2xlX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQg
PSAkMTsKKyAgICAgICAgCisgICAgICAgIGlmICgkJC50eXBlLnByZWNpc2lvbiA9PSBFYnBVbmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICQkLnR5cGUucHJlY2lzaW9uID0gcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCQxLnR5cGUudHlwZSk7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCQxLmxpbmUsICQkLnR5cGUu
cHJlY2lzaW9uLCAkMS50eXBlLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIHsKKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRl
cm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmlu
ZywgVFR5cGUoJDEudHlwZSksICQzLmxpbmUpLCAkMy5saW5lKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJCQu
dHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJp
bmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0
cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICB9CisgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJB
Q0tFVCBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSkpCisgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwg
cGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkp
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUpOworICAgICAgICAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVj
aygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9l
eHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlKSkKKyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkID0gJDE7CisKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBl
KSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlTaXplRXJyb3JDaGVjaygkNC5saW5lLCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRy
dWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEudHlwZSk7CisgICAgICAgICAg
ICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9k
ZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIHR5
cGUsICQzLmxpbmUpLCAkMy5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVj
bGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQg
RVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1
ZSwgJDctPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSk7CisgICAgICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFy
aWFibGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkJC5s
aW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRl
cm1Ob2RlOworICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXpl
cigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkNywgaW50ZXJtTm9kZSwgdmFyaWFibGUp
KSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50
ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCBpbnRlcm1Ob2RlLCAkNi5saW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElE
RU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBF
UVVBTCBpbml0aWFsaXplciB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNo
ZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXpl
KSkKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFi
bGUpKQorICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkJC5saW5l
LCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOworICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigk
My5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkOCwgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJt
ZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2Rl
LCBpbnRlcm1Ob2RlLCAkNy5saW5lKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5U
SUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkp
IHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVybU5v
ZGUpCisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDQubGluZSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEu
aW50ZXJtQWdncmVnYXRlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAg
ICAgICB9CisgICAgfQorICAgIDsKKworc2luZ2xlX2RlY2xhcmF0aW9uCisgICAgOiBmdWxseV9z
cGVjaWZpZWRfdHlwZSB7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCQxKSwgJDEubGlu
ZSksICQxLmxpbmUpOworICAgIH0KKyAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJ
RVIgeworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGlu
ZSwgJCQudHlwZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICok
Mi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKKworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50
eXBlKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIH0KKyAgICB8
IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNL
RVQgeworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGlu
ZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3Ry
aW5nLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAg
ICAkJC50eXBlID0gJDE7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygkMy5saW5lLCAkMSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
YXJyYXlFcnJvckNoZWNrKCQzLmxpbmUsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFu
dF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUo
JDEpOworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygkMi5saW5lLCAkNCwgc2l6ZSkpCisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcs
IHR5cGUsICQyLmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisK
KyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAk
MSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJh
eVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6
ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQzLmxpbmUsICokMi5zdHJpbmcsICQxLCB2YXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIEVRVUFMIGlu
aXRpYWxpemVyIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAkJC50eXBlID0gJDE7CisKKyAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDIu
bGluZSwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgeworICAgICAgICAvLworICAg
ICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8KKyAg
ICAgICAgICAgIGlmKGludGVybU5vZGUpCisgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2Rl
LCAkMy5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAg
ICB9CisgICAgfQorICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIgeworICAgICAgICBWRVJURVhf
T05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgJDEubGluZSk7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IEV2cUludmFyaWFudFZhcnlpbmdPdXQ7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IDA7CisgICAgfQorCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sg
bGFuZ3VhZ2VzLgorLy8KKy8vICAgIHwgYnVmZmVyX3NwZWNpZmllciB7CisvLyAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gMDsKKy8vICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTog
IE5vICdlbnVtJywgb3IgJ3R5cGVkZWYnLgorCisvLworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUg
cGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8vJXR5cGUgPGludGVybT4gYnVmZmVyX2RlY2xh
cmF0aW9uCisvLyV0eXBlIDxpbnRlcm0udHlwZT4gYnVmZmVyX3NwZWNpZmllciBpbnB1dF9vcl9v
dXRwdXQgYnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QKKy8vYnVmZmVyX3NwZWNpZmllcgorLy8gICAg
OiBpbnB1dF9vcl9vdXRwdXQgTEVGVF9CUkFDRSBidWZmZXJfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSB7CisvLyAgICB9CisvLyAgICA7CisvLworLy9pbnB1dF9vcl9vdXRwdXQKKy8vICAg
IDogSU5QVVQgeworLy8gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
JDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnB1
dCIpKQorLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKy8vICAgICAgICBV
TlBBQ0tfT05MWSgiaW5wdXQiLCAkMS5saW5lKTsKKy8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBF
dnFJbnB1dDsKKy8vICAgIH0KKy8vICAgIHwgT1VUUFVUIHsKKy8vICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAib3V0cHV0IikpCisvLyAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworLy8gICAgICAgIFBBQ0tfT05MWSgib3V0cHV0IiwgJDEubGluZSk7Cisv
LyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxT3V0cHV0OworLy8gICAgfQorLy8gICAgOworCisv
LworLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgcGFjay91bnBhY2sgbGFuZ3VhZ2VzLgorLy8KKy8v
YnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QKKy8vICAgIDogYnVmZmVyX2RlY2xhcmF0aW9uIHsKKy8v
ICAgIH0KKy8vICAgIHwgYnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QgYnVmZmVyX2RlY2xhcmF0aW9u
IHsKKy8vICAgIH0KKy8vICAgIDsKKworLy8KKy8vIElucHV0L291dHB1dCBzZW1hbnRpY3M6Cisv
LyAgIGZsb2F0IG11c3QgYmUgMTYgb3IgMzIgYml0cworLy8gICBmbG9hdCBhbGlnbm1lbnQgcmVz
dHJpY3Rpb25zPworLy8gICBjaGVjayBmb3Igb25seSBvbmUgaW5wdXQgYW5kIG9ubHkgb25lIG91
dHB1dAorLy8gICBzdW0gb2YgYml0ZmllbGRzIGhhcyB0byBiZSBtdWx0aXBsZSBvZiAzMgorLy8K
KworLy8KKy8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KKy8v
CisvL2J1ZmZlcl9kZWNsYXJhdGlvbgorLy8gICAgOiB0eXBlX3NwZWNpZmllciBJREVOVElGSUVS
IENPTE9OIGNvbnN0YW50X2V4cHJlc3Npb24gU0VNSUNPTE9OIHsKKy8vICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgcGFyc2VD
b250ZXh0KSkKKy8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisvLyAgICAg
ICAgJCQudmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgJDEpOworLy8gICAgICAg
IGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC52YXJpYWJsZSkpIHsK
Ky8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9u
IiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisvLyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgICAgICAvLyBkb24ndCBoYXZlIHRvIGRl
bGV0ZSAkJC52YXJpYWJsZSwgdGhlIHBvb2wgcG9wIHdpbGwgdGFrZSBjYXJlIG9mIGl0CisvLyAg
ICAgICAgfQorLy8gICAgfQorLy8gICAgOworCitmdWxseV9zcGVjaWZpZWRfdHlwZQorICAgIDog
dHlwZV9zcGVjaWZpZXIgeworICAgICAgICAkJCA9ICQxOworCisgICAgICAgIGlmICgkMS5hcnJh
eSkgeworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygk
MS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgeworICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQxLnNldEFycmF5KGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5
cGVfc3BlY2lmaWVyICB7CisgICAgICAgIGlmICgkMi5hcnJheSAmJiBwYXJzZUNvbnRleHQtPmV4
dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKKyAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDIuc2V0QXJy
YXkoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGlmICgkMi5hcnJheSAmJiBwYXJzZUNvbnRl
eHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpIHsKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2Up
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUg
JiYKKyAgICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQp
KSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUg
Ym9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0KSAmJgorICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09
IEVidEludCkpIHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICAkJCA9ICQyOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7CisgICAg
fQorICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6IENPTlNUX1FVQUwgeworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgJDEubGluZSk7CisgICAgfQorICAgIHwgQVRU
UklCVVRFIHsKKyAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICQxLmxpbmUpOworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCisgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9p
ZCwgRXZxQXR0cmlidXRlLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBWQVJZSU5HIHsKKyAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKKyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5n
dWFnZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxVmFyeWluZ091dCwgJDEubGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLnNl
dEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgJDEubGluZSk7CisgICAgfQorICAgIHwgSU5W
QVJJQU5UIFZBUllJTkcgeworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNo
ZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAi
aW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSA9PSBFU2hMYW5nVmVydGV4KQor
ICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwg
JDEubGluZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
IEV2cUludmFyaWFudFZhcnlpbmdJbiwgJDEubGluZSk7CisgICAgfQorICAgIHwgVU5JRk9STSB7
CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVW5pZm9ybSwgJDEubGluZSk7CisgICAgfQorICAgIDsKKwordHlwZV9zcGVjaWZp
ZXIKKyAgICA6IHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgeworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICB8IHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB7Cisg
ICAgICAgICQkID0gJDI7CisgICAgICAgICQkLnByZWNpc2lvbiA9ICQxOworICAgIH0KKyAgICA7
CisKK3ByZWNpc2lvbl9xdWFsaWZpZXIKKyAgICA6IEhJR0hfUFJFQ0lTSU9OIHsKKyAgICAgICAg
JCQgPSBFYnBIaWdoOworICAgIH0KKyAgICB8IE1FRElVTV9QUkVDSVNJT04geworICAgICAgICAk
JCA9IEVicE1lZGl1bTsKKyAgICB9CisgICAgfCBMT1dfUFJFQ0lTSU9OICB7CisgICAgICAgICQk
ID0gRWJwTG93OworICAgIH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVyX25vX3ByZWMKKyAgICA6
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKKyAgICAgICAgJCQgPSAkMTsKKyAgICB9CisgICAg
fCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lv
biBSSUdIVF9CUkFDS0VUIHsKKyAgICAgICAgJCQgPSAkMTsKKworICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBz
aXplOworICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygk
Mi5saW5lLCAkMywgc2l6ZSkpCisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICA7CisKK3R5cGVfc3BlY2lmaWVyX25vbmFycmF5CisgICAgOiBWT0lEX1RZUEUgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0Vm9pZCwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgRkxPQVRfVFlQRSB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgfQorICAgIHwgSU5UX1RZUEUgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBCT09MX1RZUEUgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAgfQorLy8gICAgfCBVTlNJR05FRCBJTlRfVFlQRSB7
CisvLyAgICAgICAgUEFDS19VTlBBQ0tfT05MWSgidW5zaWduZWQiLCAkMS5saW5lKTsKKy8vICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKy8vICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworLy8gICAgfQorICAgIHwgVkVDMiB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRG
bG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9
CisgICAgfCBWRUMzIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQu
c2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IFZFQzQgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIHwgQlZF
QzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICB9CisgICAgfCBCVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsK
KyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IEJWRUM0IHsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CisgICAg
fQorICAgIHwgSVZFQzIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQu
c2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICB8IElWRUMzIHsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwg
JDEubGluZSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgfCBJVkVD
NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUo
NCk7CisgICAgfQorICAgIHwgTUFUUklYMiB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQy
IiwgJDEubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CisgICAgICAgICQkLnNl
dEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICB9CisgICAgfCBNQVRSSVgzIHsKKyAgICAgICAgRlJB
R19WRVJUX09OTFkoIm1hdDMiLCAkMS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5l
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAgIH0KKyAgICB8IE1BVFJJ
WDQgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0NCIsICQxLmxpbmUpOworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsICQxLmxpbmUpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7Cisg
ICAgfQorICAgIHwgU0FNUExFUjJEIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIy
RCIsICQxLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAkMS5saW5lKTsKKyAgICB9Cisg
ICAgfCBTQU1QTEVSQ1VCRSB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIs
ICQxLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsICQxLmxpbmUpOworICAgIH0KKyAg
ICB8IHN0cnVjdF9zcGVjaWZpZXIgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic3RydWN0Iiwg
JDEubGluZSk7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLnF1YWxpZmllciA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgIH0KKyAgICB8IFRZUEVfTkFNRSB7CisgICAgICAgIC8vCisgICAgICAgIC8v
IFRoaXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2Ug
bG9va2VkIHVwIHRoZQorICAgICAgICAvLyB0eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlw
ZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oJDEuc3ltYm9sKS0+Z2V0VHlw
ZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAkMS5saW5lKTsKKyAgICAgICAgJCQudXNlckRlZiA9
ICZzdHJ1Y3R1cmU7CisgICAgfQorICAgIDsKKworc3RydWN0X3NwZWNpZmllcgorICAgIDogU1RS
VUNUIElERU5USUZJRVIgTEVGVF9CUkFDRSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9C
UkFDRSB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5s
aW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUoJDQsICokMi5zdHJpbmcpOwor
ICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcs
ICpzdHJ1Y3R1cmUsIHRydWUpOworICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmluc2VydCgqdXNlclR5cGVEZWYpKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkMi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3Qi
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAkMS5saW5lKTsKKyAgICAg
ICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICB9CisgICAgfCBTVFJVQ1QgTEVGVF9CUkFD
RSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7CisgICAgICAgIFRUeXBlKiBz
dHJ1Y3R1cmUgPSBuZXcgVFR5cGUoJDMsIFRTdHJpbmcoIiIpKTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICQxLmxpbmUpOworICAgICAgICAkJC51c2VyRGVm
ID0gc3RydWN0dXJlOworICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNsYXJhdGlvbl9saXN0Cisg
ICAgOiBzdHJ1Y3RfZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8
IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQk
ID0gJDE7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgJDItPnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8ICQkLT5zaXpl
KCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICgoKiQkKVtqXS50eXBlLT5nZXRGaWVsZE5h
bWUoKSA9PSAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQg
bmFtZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFt
ZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkJC0+cHVz
aF9iYWNrKCgqJDIpW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisKK3N0cnVjdF9kZWNs
YXJhdGlvbgorICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1J
Q09MT04geworICAgICAgICAkJCA9ICQyOworCisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnZv
aWRFcnJvckNoZWNrKCQxLmxpbmUsICgqJDIpWzBdLnR5cGUtPmdldEZpZWxkTmFtZSgpLCAkMSkp
IHsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgJCQtPnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5
IGtub3cgYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRUeXBlKCQxLnR5cGUsICQxLnNpemUsICQxLm1h
dHJpeCwgJDEudXNlckRlZik7CisKKyAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBv
ZiBhcnJheXMKKyAgICAgICAgICAgIGlmICgoKiQkKVtpXS50eXBlLT5pc0FycmF5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQxLmxp
bmUsICQxKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJDEuYXJyYXkpCisgICAgICAgICAgICAgICAg
KCokJClbaV0udHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBp
ZiAoJDEudXNlckRlZikKKyAgICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRUeXBlTmFt
ZSgkMS51c2VyRGVmLT5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA7CisK
K3N0cnVjdF9kZWNsYXJhdG9yX2xpc3QKKyAgICA6IHN0cnVjdF9kZWNsYXJhdG9yIHsKKyAgICAg
ICAgJCQgPSBOZXdQb29sVFR5cGVMaXN0KCk7CisgICAgICAgICQkLT5wdXNoX2JhY2soJDEpOwor
ICAgIH0KKyAgICB8IHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgc3RydWN0X2RlY2xhcmF0
b3IgeworICAgICAgICAkJC0+cHVzaF9iYWNrKCQzKTsKKyAgICB9CisgICAgOworCitzdHJ1Y3Rf
ZGVjbGFyYXRvcgorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0
Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7CisgICAgICAg
ICQkLnR5cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5nKTsKKyAgICB9CisgICAgfCBJREVOVElG
SUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgeworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAk
JC50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAgICQkLmxp
bmUgPSAkMS5saW5lOworICAgICAgICAkJC50eXBlLT5zZXRGaWVsZE5hbWUoKiQxLnN0cmluZyk7
CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soJDIubGluZSwgJDMsIHNpemUpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICQkLnR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKKyAgICB9
CisgICAgOworCitpbml0aWFsaXplcgorICAgIDogYXNzaWdubWVudF9leHByZXNzaW9uIHsgJCQg
PSAkMTsgfQorICAgIDsKKworZGVjbGFyYXRpb25fc3RhdGVtZW50CisgICAgOiBkZWNsYXJhdGlv
biB7ICQkID0gJDE7IH0KKyAgICA7CisKK3N0YXRlbWVudAorICAgIDogY29tcG91bmRfc3RhdGVt
ZW50ICB7ICQkID0gJDE7IH0KKyAgICB8IHNpbXBsZV9zdGF0ZW1lbnQgICAgeyAkJCA9ICQxOyB9
CisgICAgOworCisvLyBHcmFtbWFyIE5vdGU6ICBObyBsYWJlbGVkIHN0YXRlbWVudHM7ICdnb3Rv
JyBpcyBub3Qgc3VwcG9ydGVkLgorCitzaW1wbGVfc3RhdGVtZW50CisgICAgOiBkZWNsYXJhdGlv
bl9zdGF0ZW1lbnQgeyAkJCA9ICQxOyB9CisgICAgfCBleHByZXNzaW9uX3N0YXRlbWVudCAgeyAk
JCA9ICQxOyB9CisgICAgfCBzZWxlY3Rpb25fc3RhdGVtZW50ICAgeyAkJCA9ICQxOyB9CisgICAg
fCBpdGVyYXRpb25fc3RhdGVtZW50ICAgeyAkJCA9ICQxOyB9CisgICAgfCBqdW1wX3N0YXRlbWVu
dCAgICAgICAgeyAkJCA9ICQxOyB9CisgICAgOworCitjb21wb3VuZF9zdGF0ZW1lbnQKKyAgICA6
IExFRlRfQlJBQ0UgUklHSFRfQlJBQ0UgeyAkJCA9IDA7IH0KKyAgICB8IExFRlRfQlJBQ0UgeyBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfSBzdGF0ZW1lbnRfbGlzdCB7IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklHSFRfQlJBQ0UgeworICAgICAgICBpZiAo
JDMgIT0gMCkKKyAgICAgICAgICAgICQzLT5zZXRPcGVyYXRvcihFT3BTZXF1ZW5jZSk7CisgICAg
ICAgICQkID0gJDM7CisgICAgfQorICAgIDsKKworc3RhdGVtZW50X25vX25ld19zY29wZQorICAg
IDogY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZSB7ICQkID0gJDE7IH0KKyAgICB8IHNp
bXBsZV9zdGF0ZW1lbnQgICAgICAgICAgICAgICAgeyAkJCA9ICQxOyB9CisgICAgOworCitjb21w
b3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlCisgICAgLy8gU3RhdGVtZW50IHRoYXQgZG9lc24n
dCBjcmVhdGUgYSBuZXcgc2NvcGUsIGZvciBzZWxlY3Rpb25fc3RhdGVtZW50LCBpdGVyYXRpb25f
c3RhdGVtZW50CisgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsKKyAgICAgICAgJCQgPSAw
OworICAgIH0KKyAgICB8IExFRlRfQlJBQ0Ugc3RhdGVtZW50X2xpc3QgUklHSFRfQlJBQ0Ugewor
ICAgICAgICBpZiAoJDIpCisgICAgICAgICAgICAkMi0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2Up
OworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgICA7CisKK3N0YXRlbWVudF9saXN0CisgICAg
OiBzdGF0ZW1lbnQgeworICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1h
a2VBZ2dyZWdhdGUoJDEsIDApOworICAgIH0KKyAgICB8IHN0YXRlbWVudF9saXN0IHN0YXRlbWVu
dCB7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMSwgJDIsIDApOworICAgIH0KKyAgICA7CisKK2V4cHJlc3Npb25fc3RhdGVtZW50CisgICAg
OiBTRU1JQ09MT04gIHsgJCQgPSAwOyB9CisgICAgfCBleHByZXNzaW9uIFNFTUlDT0xPTiAgeyAk
JCA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oJDEpOyB9CisgICAgOworCitzZWxlY3Rpb25f
c3RhdGVtZW50CisgICAgOiBJRiBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gc2Vs
ZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVy
cm9yQ2hlY2soJDEubGluZSwgJDMpKQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9u
KCQzLCAkNSwgJDEubGluZSk7CisgICAgfQorICAgIDsKKworc2VsZWN0aW9uX3Jlc3Rfc3RhdGVt
ZW50CisgICAgOiBzdGF0ZW1lbnQgRUxTRSBzdGF0ZW1lbnQgeworICAgICAgICAkJC5ub2RlMSA9
ICQxOworICAgICAgICAkJC5ub2RlMiA9ICQzOworICAgIH0KKyAgICB8IHN0YXRlbWVudCB7Cisg
ICAgICAgICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gMDsKKyAgICB9CisgICAg
OworCisvLyBHcmFtbWFyIE5vdGU6ICBObyAnc3dpdGNoJy4gIFN3aXRjaCBzdGF0ZW1lbnRzIG5v
dCBzdXBwb3J0ZWQuCisKK2NvbmRpdGlvbgorICAgIC8vIEluIDE5OTYgYysrIGRyYWZ0LCBjb25k
aXRpb25zIGNhbiBpbmNsdWRlIHNpbmdsZSBkZWNsYXJhdGlvbnMKKyAgICA6IGV4cHJlc3Npb24g
eworICAgICAgICAkJCA9ICQxOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JD
aGVjaygkMS0+Z2V0TGluZSgpLCAkMSkpCisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICB9CisgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIEVRVUFM
IGluaXRpYWxpemVyIHsKKyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEp
KQorICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRl
SW5pdGlhbGl6ZXIoJDIubGluZSwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkKKyAg
ICAgICAgICAgICQkID0gJDQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgOworCitpdGVyYXRpb25fc3RhdGVtZW50CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsOyB9IGNvbmRpdGlvbiBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsK
KyAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKDAsICQ2LCAkNCwgMCwgdHJ1ZSwgJDEu
bGluZSk7CisgICAgICAgIC0tcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0K
KyAgICB8IERPIHsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gc3RhdGVtZW50
IFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBTRU1JQ09MT04geworICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkOC5saW5lLCAkNikpCisgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoMCwgJDMsICQ2LCAwLCBmYWxzZSwgJDQubGluZSk7
CisgICAgICAgIC0tcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIH0KKyAgICB8
IEZPUiBMRUZUX1BBUkVOIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrcGFy
c2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBmb3JfcmVz
dF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAg
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CisgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgkNCwgJDcsIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVy
bVR5cGVkKj4oJDUubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5v
ZGUyKSwgdHJ1ZSwgJDEubGluZSk7CisgICAgICAgIC0tcGFyc2VDb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsOworICAgIH0KKyAgICA7CisKK2Zvcl9pbml0X3N0YXRlbWVudAorICAgIDogZXhwcmVz
c2lvbl9zdGF0ZW1lbnQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGRlY2xhcmF0
aW9uX3N0YXRlbWVudCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKworY29uZGl0
aW9ub3B0CisgICAgOiBjb25kaXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8
IC8qIE1heSBiZSBudWxsICovIHsKKyAgICAgICAgJCQgPSAwOworICAgIH0KKyAgICA7CisKK2Zv
cl9yZXN0X3N0YXRlbWVudAorICAgIDogY29uZGl0aW9ub3B0IFNFTUlDT0xPTiB7CisgICAgICAg
ICQkLm5vZGUxID0gJDE7CisgICAgICAgICQkLm5vZGUyID0gMDsKKyAgICB9CisgICAgfCBjb25k
aXRpb25vcHQgU0VNSUNPTE9OIGV4cHJlc3Npb24gIHsKKyAgICAgICAgJCQubm9kZTEgPSAkMTsK
KyAgICAgICAgJCQubm9kZTIgPSAkMzsKKyAgICB9CisgICAgOworCitqdW1wX3N0YXRlbWVudAor
ICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsKKyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIi
KTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcENvbnRpbnVl
LCAkMS5saW5lKTsKKyAgICB9CisgICAgfCBCUkVBSyBTRU1JQ09MT04geworICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4g
bG9vcHMiLCAiIiwgIiIpOworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFu
Y2goRU9wQnJlYWssICQxLmxpbmUpOworICAgIH0KKyAgICB8IFJFVFVSTiBTRU1JQ09MT04gewor
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1
cm4sICQxLmxpbmUpOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25U
eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVl
IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgfQorICAgIHwgUkVUVVJOIGV4cHJlc3Npb24gU0VNSUNPTE9OIHsKKyAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJu
LCAkMiwgJDEubGluZSk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUgPSB0cnVlOworICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBl
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJ2b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJy
ZXR1cm4iLCAiIik7CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfSBlbHNlIGlmICgqKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSkgIT0gJDIt
PmdldFR5cGUoKSkgeworICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
ZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0eXBlOiIsICJyZXR1cm4iLCAiIik7Cisg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB8IERJU0NBUkQgU0VNSUNPTE9OIHsKKyAgICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwgJDEu
bGluZSk7CisgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNo
KEVPcEtpbGwsICQxLmxpbmUpOworICAgIH0KKyAgICA7CisKKy8vIEdyYW1tYXIgTm90ZTogIE5v
ICdnb3RvJy4gIEdvdG9zIGFyZSBub3Qgc3VwcG9ydGVkLgorCit0cmFuc2xhdGlvbl91bml0Cisg
ICAgOiBleHRlcm5hbF9kZWNsYXJhdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIHBh
cnNlQ29udGV4dC0+dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAgfCB0cmFuc2xhdGlvbl91bml0
IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAgICAgIHBhcnNlQ29udGV4dC0+
dHJlZVJvb3QgPSAkJDsKKyAgICB9CisgICAgOworCitleHRlcm5hbF9kZWNsYXJhdGlvbgorICAg
IDogZnVuY3Rpb25fZGVmaW5pdGlvbiB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwg
ZGVjbGFyYXRpb24geworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKK2Z1bmN0aW9u
X2RlZmluaXRpb24KKyAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CisgICAgICAgIFRGdW5jdGlv
biYgZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9uKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVj
ID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4ocGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KGZ1bmN0aW9uLmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90
ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRp
bWUgd2UndmUgc2VlbiBmdW5jdGlvbgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3Qg
YmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1
cAorICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAg
aWYgKHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gVGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBhbHJl
YWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJldkRl
Yy0+c2V0RGVmaW5lZCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJhaXNlIGVycm9yIG1l
c3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBvciByZXR1cm4gYW55
dGhpbmcgb3RoZXIgdGhhbiB2b2lkCisgICAgICAgIC8vCisgICAgICAgIGlmIChmdW5jdGlvbi5n
ZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1D
b3VudCgpID4gMCkgeworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFJldHVyblR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiIiwgZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpLmdldEJh
c2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTmV3IHN5bWJvbCB0YWJsZSBzY29wZSBm
b3IgYm9keSBvZiBmdW5jdGlvbiBwbHVzIGl0cyBhcmd1bWVudHMKKyAgICAgICAgLy8KKyAgICAg
ICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gUmVtZW1iZXIgdGhlIHJldHVybiB0eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVU
VVJOIHN0YXRlbWVudHMuCisgICAgICAgIC8vCisgICAgICAgIHBhcnNlQ29udGV4dC0+Y3VycmVu
dEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgcGFy
c2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAg
ICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8gbmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1
c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8vIChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQg
YXJncykuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qg
b2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNvIGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAg
Ly8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0ZXJzLgorICAgICAgICAvLworICAgICAgICBU
SW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspIHsK
KyAgICAgICAgICAgIFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAgICAg
ICBpZiAocGFyYW0ubmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOworICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGgg
bmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
eworICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBUcmFuc2ZlciBvd25lcnNoaXAgb2YgbmFtZSBwb2ludGVyIHRvIHN5
bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtLm5h
bWUgPSAwOworCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhl
IHBhcmFtZXRlciB0byB0aGUgSElMCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICBwYXJhbU5vZGVzID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJDEubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKHBhcmFtTm9kZXMsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAi
IiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAkMS5saW5lKTsKKyAgICAgICAgJDEuaW50
ZXJtQWdncmVnYXRlID0gcGFyYW1Ob2RlczsKKyAgICAgICAgcGFyc2VDb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsID0gMDsKKyAgICB9CisgICAgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29w
ZSB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYg
cmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAgIC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBw
b3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNvZGUKKyAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCAm
JiAhIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZh
bHVlOiIsICIiLCAkMS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybUFnZ3JlZ2F0ZSwgJDMsIDApOworICAgICAgICBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkJCwgRU9wRnVu
Y3Rpb24sICQxLmxpbmUpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0TmFtZSgk
MS5mdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgJCQtPmdldEFz
QWdncmVnYXRlKCktPnNldFR5cGUoJDEuZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKSk7CisKKyAg
ICAgICAgLy8gc3RvcmUgdGhlIHByYWdtYSBpbmZvcm1hdGlvbiBmb3IgZGVidWcgYW5kIG9wdGlt
aXplIGFuZCBvdGhlciB2ZW5kb3Igc3BlY2lmaWMKKyAgICAgICAgLy8gaW5mb3JtYXRpb24uIFRo
aXMgaW5mb3JtYXRpb24gY2FuIGJlIHF1ZXJpZWQgZnJvbSB0aGUgcGFyc2UgdHJlZQorICAgICAg
ICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUocGFyc2VDb250ZXh0LT5jb250ZXh0
UHJhZ21hLm9wdGltaXplKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldERlYnVn
KHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1Zyk7CisgICAgICAgICQkLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5w
cmFnbWFUYWJsZSk7CisgICAgfQorICAgIDsKKworJSUKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9pbnRlcm1PdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1P
dXQuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKworLy8KKy8vIFR3byBwdXJwb3Nl
czoKKy8vIDEuICBTaG93IGFuIGV4YW1wbGUgb2YgaG93IHRvIGl0ZXJhdGUgdHJlZS4gIEZ1bmN0
aW9ucyBjYW4KKy8vICAgICBhbHNvIGRpcmVjdGx5IGNhbGwgVHJhdmVyc2UoKSBvbiBjaGlsZHJl
biB0aGVtc2VsdmVzIHRvCisvLyAgICAgaGF2ZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlciB0
aGUgcHJvY2VzcyB0aGFuIHNob3duIGhlcmUuCisvLyAgICAgU2VlIHRoZSBsYXN0IGZ1bmN0aW9u
IGZvciBob3cgdG8gZ2V0IHN0YXJ0ZWQuCisvLyAyLiAgUHJpbnQgb3V0IGEgdGV4dCBiYXNlZCBk
ZXNjcmlwdGlvbiBvZiB0aGUgdHJlZS4KKy8vCisKKy8vCisvLyBVc2UgdGhpcyBjbGFzcyB0byBj
YXJyeSBhbG9uZyBkYXRhIGZyb20gbm9kZSB0byBub2RlIGluCisvLyB0aGUgdHJhdmVyc2FsCisv
LworY2xhc3MgVE91dHB1dFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1
YmxpYzoKKyAgICBUT3V0cHV0VHJhdmVyc2VyKFRJbmZvU2luayYgaSkgOiBpbmZvU2luayhpKSB7
IH0KKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVElu
dGVybUNvbnN0YW50VW5pb24qKTsKKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5Kik7CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
VW5hcnkqKTsKKyAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKik7CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSopOworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCop
OworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKK307
CisKK1RTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBUU3Ry
aW5nU3RyZWFtIHN0cmVhbTsKKworICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5ICYm
IHF1YWxpZmllciAhPSBFdnFHbG9iYWwpCisgICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJT
dHJpbmcoKSA8PCAiICIgPDwgZ2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiOworICAgIGlmIChh
cnJheSkKKyAgICAgICAgc3RyZWFtIDw8ICJhcnJheSBvZiAiOworICAgIGlmIChtYXRyaXgpCisg
ICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8PCBzaXplIDw8ICIgbWF0cml4IG9mICI7Cisg
ICAgZWxzZSBpZiAoc2l6ZSA+IDEpCisgICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICItY29tcG9u
ZW50IHZlY3RvciBvZiAiOworCisgICAgc3RyZWFtIDw8IGdldEJhc2ljU3RyaW5nKCk7CisgICAg
cmV0dXJuIHN0cmVhbS5zdHIoKTsKK30KKworLy8KKy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHBy
aW50aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJzaW5nLgorLy8KKwordm9pZCBPdXRwdXRUcmVlVGV4
dChUSW5mb1NpbmsmIGluZm9TaW5rLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgaW50IGRlcHRo
KQoreworICAgIGludCBpOworCisgICAgaW5mb1NpbmsuZGVidWcubG9jYXRpb24obm9kZS0+Z2V0
TGluZSgpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICBpbmZv
U2luay5kZWJ1ZyA8PCAiICAiOworfQorCisvLworLy8gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXJl
IHRoZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLiAgVGhlIGxhc3Qgb25lCisvLyBpcyB0aGUgb25lIHRo
YXQgc3RhcnRzIHRoZSB0cmF2ZXJzYWwuCisvLworLy8gUmV0dXJuIHRydWUgZnJvbSBpbnRlcmlv
ciBub2RlcyB0byBoYXZlIHRoZSBleHRlcm5hbCB0cmF2ZXJzYWwKKy8vIGNvbnRpbnVlIG9uIHRv
IGNoaWxkcmVuLiAgSWYgeW91IHByb2Nlc3MgY2hpbGRyZW4geW91cnNlbGYsCisvLyByZXR1cm4g
ZmFsc2UuCisvLworCit2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqIG5vZGUpCit7CisgICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRo
KTsKKworICAgIGluZm9TaW5rLmRlYnVnIDw8ICInIiA8PCBub2RlLT5nZXRTeW1ib2woKSA8PCAi
JyAiOworICAgIGluZm9TaW5rLmRlYnVnIDw8ICIoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmlu
ZygpIDw8ICIpXG4iOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0g
aW5mb1Npbms7CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAg
IHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgeworICAgICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAg
ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtb3ZlIHNlY29uZCBjaGlsZCB0byBmaXJzdCBjaGls
ZCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29uZCBj
aGlsZCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAg
ICBvdXQuZGVidWcgPDwgImFkZCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJzdWJ0cmFjdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1
ZyA8PCAibXVsdGlwbHkgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246ICBvdXQuZGVidWcgPDwg
Im1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOiAgb3V0LmRlYnVnIDw8ICJ2ZWN0
b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IHNj
YWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBtdWx0IHNl
Y29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2
QXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgImRpdmlkZSBzZWNvbmQgY2hpbGQg
aW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BJbmRleEluZGlyZWN0OiBvdXQuZGVidWcgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0LmRlYnVnIDw8ICJkaXJl
Y3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9y
U3dpenpsZTogb3V0LmRlYnVnIDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOworCisgICAgICAg
IGNhc2UgRU9wQWRkOiAgICBvdXQuZGVidWcgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3ViOiAgICBvdXQuZGVidWcgPDwgInN1YnRyYWN0Ijsg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVsOiAgICBvdXQuZGVidWcg
PDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2
OiAgICBvdXQuZGVidWcgPDwgImRpdmlkZSI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEVxdWFs
IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOiAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUg
TGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29t
cGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVh
dGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFs
IjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0LmRlYnVn
IDw8ICJ2ZWN0b3Itc2NhbGUiOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0
b3JUaW1lc01hdHJpeDogb3V0LmRlYnVnIDw8ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0LmRlYnVnIDw8ICJtYXRy
aXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhcjogb3V0LmRlYnVnIDw8ICJtYXRyaXgtc2NhbGUiOyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0LmRlYnVnIDw8ICJtYXRyaXgtbXVsdGlw
bHkiOyAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogIG91dC5kZWJ1
ZyA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjog
b3V0LmRlYnVnIDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2lj
YWxBbmQ6IG91dC5kZWJ1ZyA8PCAibG9naWNhbC1hbmQiOyBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogb3V0LmRlYnVnIDw8ICI8dW5rbm93biBvcD4iOworICAgIH0KKworICAgIG91dC5kZWJ1ZyA8
PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOworCisgICAgb3V0LmRl
YnVnIDw8ICJcbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVy
c2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCit7CisgICAg
VEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKworICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9k
ZSwgZGVwdGgpOworCisgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICAgIGNhc2Ug
RU9wTmVnYXRpdmU6ICAgICAgIG91dC5kZWJ1ZyA8PCAiTmVnYXRlIHZhbHVlIjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dpY2FsTm90OgorICAgICAgICBjYXNlIEVP
cExvZ2ljYWxOb3Q6ICAgICBvdXQuZGVidWcgPDwgIk5lZ2F0ZSBjb25kaXRpb25hbCI7ICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OiAgb3V0LmRlYnVnIDw8ICJQb3N0
LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6
ICBvdXQuZGVidWcgPDwgIlBvc3QtRGVjcmVtZW50IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAiUHJlLUluY3JlbWVudCI7ICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0LmRlYnVnIDw8ICJQ
cmUtRGVjcmVtZW50IjsgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wQ29udkludFRv
Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb252RmxvYXRUb0Jvb2w6b3V0LmRlYnVnIDw8ICJDb252ZXJ0IGZsb2F0IHRv
IGJvb2wiO2JyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDpvdXQuZGVidWcg
PDwgIkNvbnZlcnQgYm9vbCB0byBmbG9hdCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udklu
dFRvRmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29udmVydCBpbnQgdG8gZmxvYXQiOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGZsb2F0
IHRvIGludCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQuZGVi
dWcgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BS
YWRpYW5zOiAgICAgICAgb3V0LmRlYnVnIDw8ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBvdXQuZGVidWcgPDwgImRlZ3JlZXMi
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAic2luZSI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb3M6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJjb3NpbmUiOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICBvdXQuZGVidWcgPDwgInRhbmdl
bnQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogICAgICAgICAg
IG91dC5kZWJ1ZyA8PCAiYXJjIHNpbmUiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBY29zOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFy
YyB0YW5nZW50IjsgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJleHAiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcExvZzogICAgICAgICAgICBvdXQuZGVidWcgPDwgImxvZyI7ICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXhwMjogICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiZXhwMiI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2cyIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICBvdXQuZGVidWcgPDwgInNxcnQiOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dC5kZWJ1
ZyA8PCAiaW52ZXJzZSBzcXJ0IjsgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFi
czogICAgICAgICAgICBvdXQuZGVidWcgPDwgIkFic29sdXRlIHZhbHVlIjsgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiU2lnbiI7ICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgb3V0
LmRlYnVnIDw8ICJGbG9vciI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENlaWw6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIkNlaWxpbmciOyAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiRnJhY3Rp
b24iOyAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAg
ICBvdXQuZGVidWcgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTm9ybWFsaXplOiAgICAgIG91dC5kZWJ1ZyA8PCAibm9ybWFsaXplIjsgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91dC5kZWJ1
ZyA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZFBkeSI7ICAg
ICAgICAgICAgICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJhbnkiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDog
ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIHVu
YXJ5IG9wIik7CisgICAgfQorCisgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0
ID0gaW5mb1Npbms7CisKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7CisgICAg
ICAgIG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIm5vZGUgaXMgc3RpbGwgRU9wTnVs
bCEiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgT3V0cHV0VHJlZVRleHQo
b3V0LCBub2RlLCBkZXB0aCk7CisKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICAg
ICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBvdXQuZGVidWcgPDwgIlNlcXVlbmNlXG4iOyByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BDb21tYTogICAgICAgICBvdXQuZGVidWcgPDwgIkNv
bW1hXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbjogICAgICBvdXQu
ZGVidWcgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9u
IENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQYXJh
bWV0ZXJzOiAgICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQuZGVidWcg
PDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzI6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCB2ZWMyIjsgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFZlYzM6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVj
dCB2ZWM0IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBvdXQuZGVi
dWcgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjMyI7IGJy
ZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQuZGVidWcgPDwgIkNvbnN0
cnVjdCBidmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQu
ZGVidWcgPDwgIkNvbnN0cnVjdCBpbnQiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWMyOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjMyI7
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQuZGVidWcgPDwgIkNv
bnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBv
dXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQyIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDM6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQ0
IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDogIG91dC5kZWJ1ZyA8
PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcExlc3NU
aGFuOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4iOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXQuZGVidWcgPDwg
IkNvbXBhcmUgR3JlYXRlciBUaGFuIjsgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW5FcXVhbDogICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiBvciBFcXVh
bCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6IG91dC5kZWJ1
ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4gb3IgRXF1YWwiOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXQuZGVidWcgPDwgIkVxdWFsIjsgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6ICAgb3V0
LmRlYnVnIDw8ICJOb3RFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRU9wTW9kOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtb2QiOyAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcFBvdzogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAicG93Ijsg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgIG91dC5kZWJ1
ZyA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcE1pbjogICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAibWluIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BN
YXg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1heCI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJjbGFtcCI7ICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibWl4IjsgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBvdXQuZGVidWcgPDwg
InN0ZXAiOyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0
LmRlYnVnIDw8ICJzbW9vdGhzdGVwIjsgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wRGlzdGFu
Y2U6ICAgICAgb3V0LmRlYnVnIDw8ICJkaXN0YW5jZSI7ICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcERvdDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZG90LXByb2R1Y3Qi
OyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXQu
ZGVidWcgPDwgImNyb3NzLXByb2R1Y3QiOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wRmFjZUZvcndhcmQ6ICAgb3V0LmRlYnVnIDw8ICJmYWNlLWZvcndhcmQiOyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6ICAgICAgIG91dC5kZWJ1ZyA8PCAicmVm
bGVjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZyYWN0OiAg
ICAgICBvdXQuZGVidWcgPDwgInJlZnJhY3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTXVsOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJjb21wb25lbnQtd2lzZSBt
dWx0aXBseSI7IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhFcnJvciwgIkJhZCBhZ2dyZWdhdGlvbiBvcCIpOworICAgIH0KKworICAgIGlmIChub2Rl
LT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wUGFyYW1ldGVy
cykKKyAgICAgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiKSI7CisKKyAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlKQoreworICAgIFRJbmZvU2luayYgb3V0ID0gaW5mb1Npbms7
CisKKyAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKKworICAgIG91dC5kZWJ1
ZyA8PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7CisgICAgb3V0LmRlYnVnIDw8ICIgKCIg
PDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKKworICAgICsrZGVwdGg7CisK
KyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIG91dC5kZWJ1
ZyA8PCAiQ29uZGl0aW9uXG4iOworICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0
aGlzKTsKKworICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAg
aWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSBj
YXNlXG4iOworICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSBjYXNlIGlzIG51bGxcbiI7CisK
KyAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0
KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgICAgIG91dC5kZWJ1ZyA8PCAiZmFsc2UgY2Fz
ZVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICB9CisKKyAgICAtLWRlcHRoOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRPdXRw
dXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9k
ZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAgaW50IHNpemUgPSBu
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRCQ29uc3QoKSkKKyAgICAgICAgICAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZmFsc2UiOworCisgICAgICAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBv
dXQuZGVidWcgPDwgIlxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKClbaV0uZ2V0RkNvbnN0KCk7CisgICAgICAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICIgKGNvbnN0IGZsb2F0KVxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpW2ldLmdldElDb25zdCgpOworICAgICAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiIChjb25zdCBpbnQpXG4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBvdXQuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiVW5rbm93biBjb25zdGFudCIsIG5vZGUtPmdldExpbmUoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVE91dHB1dFRy
YXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAg
ICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBu
b2RlLCBkZXB0aCk7CisKKyAgICBvdXQuZGVidWcgPDwgIkxvb3Agd2l0aCBjb25kaXRpb24gIjsK
KyAgICBpZiAoISBub2RlLT50ZXN0Rmlyc3QoKSkKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJub3Qg
IjsKKyAgICBvdXQuZGVidWcgPDwgInRlc3RlZCBmaXJzdFxuIjsKKworICAgICsrZGVwdGg7CisK
KyAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIGlmIChub2Rl
LT5nZXRUZXN0KCkpIHsKKyAgICAgICAgb3V0LmRlYnVnIDw8ICJMb29wIENvbmRpdGlvblxuIjsK
KyAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgb3V0LmRlYnVnIDw8ICJObyBsb29wIGNvbmRpdGlvblxuIjsKKworICAgIE91dHB1dFRy
ZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkg
eworICAgICAgICBvdXQuZGVidWcgPDwgIkxvb3AgQm9keVxuIjsKKyAgICAgICAgbm9kZS0+Z2V0
Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0LmRlYnVnIDw8
ICJObyBsb29wIGJvZHlcbiI7CisKKyAgICBpZiAobm9kZS0+Z2V0VGVybWluYWwoKSkgeworICAg
ICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQu
ZGVidWcgPDwgIkxvb3AgVGVybWluYWwgRXhwcmVzc2lvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0
VGVybWluYWwoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgLS1kZXB0aDsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChW
aXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCogbm9kZSkKK3sKKyAgICBUSW5mb1NpbmsmIG91dCA9
IGluZm9TaW5rOworCisgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CisKKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldEZsb3dPcCgpKSB7CisgICAgICAgIGNhc2UgRU9wS2lsbDogICAg
ICBvdXQuZGVidWcgPDwgIkJyYW5jaDogS2lsbCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BCcmVhazogICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnRpbnVlOiAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6
IENvbnRpbnVlIjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmV0dXJuOiAgICBvdXQu
ZGVidWcgPDwgIkJyYW5jaDogUmV0dXJuIjsgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBVbmtub3duIEJyYW5jaCI7IGJyZWFr
OworICAgIH0KKworICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgb3V0
LmRlYnVnIDw8ICIgd2l0aCBleHByZXNzaW9uXG4iOworICAgICAgICArK2RlcHRoOworICAgICAg
ICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAtLWRlcHRo
OworICAgIH0gZWxzZQorICAgICAgICBvdXQuZGVidWcgPDwgIlxuIjsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9uZSB0byBjYWxsIGV4dGVy
bmFsbHkgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KKy8vIEluZGl2aWR1YWwgZnVuY3Rpb25zIGNh
biBiZSBpbml0aWFsaXplZCB0byAwIHRvIHNraXAgcHJvY2Vzc2luZyBvZiB0aGF0CisvLyB0eXBl
IG9mIG5vZGUuICBJdCdzIGNoaWxkcmVuIHdpbGwgc3RpbGwgYmUgcHJvY2Vzc2VkLgorLy8KK3Zv
aWQgVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZShUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBp
ZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBUT3V0cHV0VHJhdmVyc2VyIGl0
KGluZm9TaW5rKTsKKworICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7Cit9CkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL2ludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2lu
dGVybWVkaWF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4NiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8KKy8vIERlZmluaXRpb24gb2YgdGhlIGluLW1lbW9yeSBoaWdoLWxldmVsIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorLy8gb2Ygc2hhZGVycy4gIFRoaXMgaXMgYSB0cmVl
IHRoYXQgcGFyc2VyIGNyZWF0ZXMuCisvLworLy8gTm9kZXMgaW4gdGhlIHRyZWUgYXJlIGRlZmlu
ZWQgYXMgYSBoaWVyYXJjaHkgb2YgY2xhc3NlcyBkZXJpdmVkIGZyb20gCisvLyBUSW50ZXJtTm9k
ZS4gRWFjaCBpcyBhIG5vZGUgaW4gYSB0cmVlLiAgVGhlcmUgaXMgbm8gcHJlc2V0IGJyYW5jaGlu
ZyBmYWN0b3I7CisvLyBlYWNoIG5vZGUgY2FuIGhhdmUgaXQncyBvd24gdHlwZSBvZiBsaXN0IG9m
IGNoaWxkcmVuLgorLy8KKworI2lmbmRlZiBfX0lOVEVSTUVESUFURV9ICisjZGVmaW5lIF9fSU5U
RVJNRURJQVRFX0gKKworI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL1R5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oIgorCisv
LworLy8gT3BlcmF0b3JzIHVzZWQgYnkgdGhlIGhpZ2gtbGV2ZWwgKHBhcnNlIHRyZWUpIHJlcHJl
c2VudGF0aW9uLgorLy8KK2VudW0gVE9wZXJhdG9yIHsKKyAgICBFT3BOdWxsLCAgICAgICAgICAg
IC8vIGlmIGluIGEgbm9kZSwgc2hvdWxkIG9ubHkgbWVhbiBhIG5vZGUgaXMgc3RpbGwgYmVpbmcg
YnVpbHQKKyAgICBFT3BTZXF1ZW5jZSwgICAgICAgIC8vIGRlbm90ZXMgYSBsaXN0IG9mIHN0YXRl
bWVudHMsIG9yIHBhcmFtZXRlcnMsIGV0Yy4KKyAgICBFT3BGdW5jdGlvbkNhbGwsICAgIAorICAg
IEVPcEZ1bmN0aW9uLCAgICAgICAgLy8gRm9yIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAgICBFT3BQ
YXJhbWV0ZXJzLCAgICAgIC8vIGFuIGFnZ3JlZ2F0ZSBsaXN0aW5nIHRoZSBwYXJhbWV0ZXJzIHRv
IGEgZnVuY3Rpb24KKworICAgIEVPcERlY2xhcmF0aW9uLAorICAgIEVPcFByb3RvdHlwZSwKKwor
ICAgIC8vCisgICAgLy8gVW5hcnkgb3BlcmF0b3JzCisgICAgLy8KKworICAgIEVPcE5lZ2F0aXZl
LAorICAgIEVPcExvZ2ljYWxOb3QsCisgICAgRU9wVmVjdG9yTG9naWNhbE5vdCwKKworICAgIEVP
cFBvc3RJbmNyZW1lbnQsCisgICAgRU9wUG9zdERlY3JlbWVudCwKKyAgICBFT3BQcmVJbmNyZW1l
bnQsCisgICAgRU9wUHJlRGVjcmVtZW50LAorCisgICAgRU9wQ29udkludFRvQm9vbCwKKyAgICBF
T3BDb252RmxvYXRUb0Jvb2wsCisgICAgRU9wQ29udkJvb2xUb0Zsb2F0LAorICAgIEVPcENvbnZJ
bnRUb0Zsb2F0LAorICAgIEVPcENvbnZGbG9hdFRvSW50LAorICAgIEVPcENvbnZCb29sVG9JbnQs
CisKKyAgICAvLworICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCisgICAgLy8KKworICAgIEVPcEFk
ZCwKKyAgICBFT3BTdWIsCisgICAgRU9wTXVsLAorICAgIEVPcERpdiwKKyAgICBFT3BFcXVhbCwK
KyAgICBFT3BOb3RFcXVhbCwKKyAgICBFT3BWZWN0b3JFcXVhbCwKKyAgICBFT3BWZWN0b3JOb3RF
cXVhbCwKKyAgICBFT3BMZXNzVGhhbiwKKyAgICBFT3BHcmVhdGVyVGhhbiwKKyAgICBFT3BMZXNz
VGhhbkVxdWFsLAorICAgIEVPcEdyZWF0ZXJUaGFuRXF1YWwsCisgICAgRU9wQ29tbWEsCisKKyAg
ICBFT3BWZWN0b3JUaW1lc1NjYWxhciwKKyAgICBFT3BWZWN0b3JUaW1lc01hdHJpeCwKKyAgICBF
T3BNYXRyaXhUaW1lc1ZlY3RvciwKKyAgICBFT3BNYXRyaXhUaW1lc1NjYWxhciwKKworICAgIEVP
cExvZ2ljYWxPciwKKyAgICBFT3BMb2dpY2FsWG9yLAorICAgIEVPcExvZ2ljYWxBbmQsCisKKyAg
ICBFT3BJbmRleERpcmVjdCwKKyAgICBFT3BJbmRleEluZGlyZWN0LAorICAgIEVPcEluZGV4RGly
ZWN0U3RydWN0LAorCisgICAgRU9wVmVjdG9yU3dpenpsZSwKKworICAgIC8vCisgICAgLy8gQnVp
bHQtaW4gZnVuY3Rpb25zIHBvdGVudGlhbGx5IG1hcHBlZCB0byBvcGVyYXRvcnMKKyAgICAvLwor
CisgICAgRU9wUmFkaWFucywKKyAgICBFT3BEZWdyZWVzLAorICAgIEVPcFNpbiwKKyAgICBFT3BD
b3MsCisgICAgRU9wVGFuLAorICAgIEVPcEFzaW4sCisgICAgRU9wQWNvcywKKyAgICBFT3BBdGFu
LAorCisgICAgRU9wUG93LAorICAgIEVPcEV4cCwKKyAgICBFT3BMb2csCisgICAgRU9wRXhwMiwK
KyAgICBFT3BMb2cyLAorICAgIEVPcFNxcnQsCisgICAgRU9wSW52ZXJzZVNxcnQsCisKKyAgICBF
T3BBYnMsCisgICAgRU9wU2lnbiwKKyAgICBFT3BGbG9vciwKKyAgICBFT3BDZWlsLAorICAgIEVP
cEZyYWN0LAorICAgIEVPcE1vZCwKKyAgICBFT3BNaW4sCisgICAgRU9wTWF4LAorICAgIEVPcENs
YW1wLAorICAgIEVPcE1peCwKKyAgICBFT3BTdGVwLAorICAgIEVPcFNtb290aFN0ZXAsCisKKyAg
ICBFT3BMZW5ndGgsCisgICAgRU9wRGlzdGFuY2UsCisgICAgRU9wRG90LAorICAgIEVPcENyb3Nz
LAorICAgIEVPcE5vcm1hbGl6ZSwKKyAgICBFT3BGYWNlRm9yd2FyZCwKKyAgICBFT3BSZWZsZWN0
LAorICAgIEVPcFJlZnJhY3QsCisKKyAgICAvL0VPcERQZHgsICAgICAgICAgICAgLy8gRnJhZ21l
bnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgIC8vRU9wRFBk
eSwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMg
ZXh0ZW5zaW9uCisgICAgLy9FT3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKworICAgIEVPcE1hdHJpeFRpbWVzTWF0
cml4LAorCisgICAgRU9wQW55LAorICAgIEVPcEFsbCwKKworICAgIC8vCisgICAgLy8gQnJhbmNo
CisgICAgLy8KKworICAgIEVPcEtpbGwsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seQorICAg
IEVPcFJldHVybiwKKyAgICBFT3BCcmVhaywKKyAgICBFT3BDb250aW51ZSwKKworICAgIC8vCisg
ICAgLy8gQ29uc3RydWN0b3JzCisgICAgLy8KKworICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBF
T3BDb25zdHJ1Y3RCb29sLAorICAgIEVPcENvbnN0cnVjdEZsb2F0LAorICAgIEVPcENvbnN0cnVj
dFZlYzIsCisgICAgRU9wQ29uc3RydWN0VmVjMywKKyAgICBFT3BDb25zdHJ1Y3RWZWM0LAorICAg
IEVPcENvbnN0cnVjdEJWZWMyLAorICAgIEVPcENvbnN0cnVjdEJWZWMzLAorICAgIEVPcENvbnN0
cnVjdEJWZWM0LAorICAgIEVPcENvbnN0cnVjdElWZWMyLAorICAgIEVPcENvbnN0cnVjdElWZWMz
LAorICAgIEVPcENvbnN0cnVjdElWZWM0LAorICAgIEVPcENvbnN0cnVjdE1hdDIsCisgICAgRU9w
Q29uc3RydWN0TWF0MywKKyAgICBFT3BDb25zdHJ1Y3RNYXQ0LAorICAgIEVPcENvbnN0cnVjdFN0
cnVjdCwKKworICAgIC8vCisgICAgLy8gbW92ZXMKKyAgICAvLworCisgICAgRU9wQXNzaWduLAor
ICAgIEVPcEluaXRpYWxpemUsCisgICAgRU9wQWRkQXNzaWduLAorICAgIEVPcFN1YkFzc2lnbiwK
KyAgICBFT3BNdWxBc3NpZ24sCisgICAgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ24sCisgICAg
RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ24sCisgICAgRU9wTWF0cml4VGltZXNTY2FsYXJBc3Np
Z24sCisgICAgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ24sCisgICAgRU9wRGl2QXNzaWduLAor
fTsKKworY2xhc3MgVEludGVybVRyYXZlcnNlcjsKK2NsYXNzIFRJbnRlcm1BZ2dyZWdhdGU7Citj
bGFzcyBUSW50ZXJtQmluYXJ5OworY2xhc3MgVEludGVybVVuYXJ5OworY2xhc3MgVEludGVybUNv
bnN0YW50VW5pb247CitjbGFzcyBUSW50ZXJtU2VsZWN0aW9uOworY2xhc3MgVEludGVybVR5cGVk
OworY2xhc3MgVEludGVybVN5bWJvbDsKK2NsYXNzIFRJbnRlcm1Mb29wOworY2xhc3MgVEluZm9T
aW5rOworCisvLworLy8gQmFzZSBjbGFzcyBmb3IgdGhlIHRyZWUgbm9kZXMKKy8vCitjbGFzcyBU
SW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9i
YWxQb29sQWxsb2NhdG9yKQorCisgICAgVEludGVybU5vZGUoKSA6IGxpbmUoMCkge30KKyAgICB2
aXJ0dWFsIFRTb3VyY2VMb2MgZ2V0TGluZSgpIGNvbnN0IHsgcmV0dXJuIGxpbmU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TGluZShUU291cmNlTG9jIGwpIHsgbGluZSA9IGw7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopID0gMDsKKyAgICB2aXJ0dWFsIFRJ
bnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFRJbnRl
cm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIFRJbnRlcm1CaW5hcnkqIGdldEFzQmluYXJ5Tm9kZSgpIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUo
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQorcHJvdGVjdGVk
OgorICAgIFRTb3VyY2VMb2MgbGluZTsKK307CisKKy8vCisvLyBUaGlzIGlzIGp1c3QgdG8gaGVs
cCB5YWNjLgorLy8KK3N0cnVjdCBUSW50ZXJtTm9kZVBhaXIgeworICAgIFRJbnRlcm1Ob2RlKiBu
b2RlMTsKKyAgICBUSW50ZXJtTm9kZSogbm9kZTI7Cit9OworCisvLworLy8gSW50ZXJtZWRpYXRl
IGNsYXNzIGZvciBub2RlcyB0aGF0IGhhdmUgYSB0eXBlLgorLy8KK2NsYXNzIFRJbnRlcm1UeXBl
ZCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CitwdWJsaWM6CisgICAgVEludGVybVR5cGVkKGNvbnN0
IFRUeXBlJiB0KSA6IHR5cGUodCkgIHsgfQorICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRB
c1R5cGVkKCkgICAgICAgICB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFR5
cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRUeXBl
JiBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIHZpcnR1YWwgVFR5cGUqIGdl
dFR5cGVQb2ludGVyKCkgeyByZXR1cm4gJnR5cGU7IH0KKworICAgIHZpcnR1YWwgVEJhc2ljVHlw
ZSBnZXRCYXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9Cisg
ICAgdmlydHVhbCBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUu
Z2V0UXVhbGlmaWVyKCk7IH0KKyAgICB2aXJ0dWFsIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIHZpcnR1YWwgaW50IGdl
dE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXROb21pbmFsU2l6ZSgpOyB9Cisg
ICAgdmlydHVhbCBpbnQgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0SW5zdGFuY2VT
aXplKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBl
LmlzTWF0cml4KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVy
biB0eXBlLmlzQXJyYXkoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuaXNWZWN0b3IoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NjYWxhcigpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKCkgICAgICBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAg
ICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQorICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBj
b25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KKworcHJvdGVjdGVkOgor
ICAgIFRUeXBlIHR5cGU7Cit9OworCisvLworLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3
aGlsZSBsb29wcy4KKy8vCitjbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7
CitwdWJsaWM6CisgICAgVEludGVybUxvb3AoVEludGVybU5vZGUgKmluaXQsIFRJbnRlcm1Ob2Rl
KiBhQm9keSwgVEludGVybVR5cGVkKiBhVGVzdCwgVEludGVybVR5cGVkKiBhVGVybWluYWwsIGJv
b2wgdGVzdEZpcnN0KSA6IAorICAgICAgICAgICAgaW5pdChpbml0KSwKKyAgICAgICAgICAgIGJv
ZHkoYUJvZHkpLAorICAgICAgICAgICAgdGVzdChhVGVzdCksCisgICAgICAgICAgICB0ZXJtaW5h
bChhVGVybWluYWwpLAorICAgICAgICAgICAgZmlyc3QodGVzdEZpcnN0KSB7IH0KKyAgICB2aXJ0
dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAgVEludGVybU5vZGUg
KmdldEluaXQoKSB7IHJldHVybiBpbml0OyB9CisgICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7
IHJldHVybiBib2R5OyB9CisgICAgVEludGVybVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVz
dDsgfQorICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsg
fQorICAgIGJvb2wgdGVzdEZpcnN0KCkgeyByZXR1cm4gZmlyc3Q7IH0KK3Byb3RlY3RlZDoKKyAg
ICBUSW50ZXJtTm9kZSAqaW5pdDsKKyAgICBUSW50ZXJtTm9kZSAqYm9keTsgICAgICAgLy8gY29k
ZSB0byBsb29wIG92ZXIKKyAgICBUSW50ZXJtVHlwZWQgKnRlc3Q7ICAgICAgLy8gZXhpdCBjb25k
aXRpb24gYXNzb2NpYXRlZCB3aXRoIGxvb3AsIGNvdWxkIGJlIDAgZm9yICdmb3InIGxvb3BzCisg
ICAgVEludGVybVR5cGVkICp0ZXJtaW5hbDsgIC8vIGV4aXN0cyBmb3IgZm9yLWxvb3BzCisgICAg
Ym9vbCBmaXJzdDsgICAgICAgICAgICAgIC8vIHRydWUgZm9yIHdoaWxlIGFuZCBmb3IsIG5vdCBm
b3IgZG8td2hpbGUKK307CisKKy8vCisvLyBIYW5kbGUgYnJlYWssIGNvbnRpbnVlLCByZXR1cm4s
IGFuZCBraWxsLgorLy8KK2NsYXNzIFRJbnRlcm1CcmFuY2ggOiBwdWJsaWMgVEludGVybU5vZGUg
eworcHVibGljOgorICAgIFRJbnRlcm1CcmFuY2goVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQq
IGUpIDoKKyAgICAgICAgICAgIGZsb3dPcChvcCksCisgICAgICAgICAgICBleHByZXNzaW9uKGUp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisgICAg
VE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0dXJuIGZsb3dPcDsgfQorICAgIFRJbnRlcm1UeXBl
ZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4cHJlc3Npb247IH0KK3Byb3RlY3RlZDoKKyAg
ICBUT3BlcmF0b3IgZmxvd09wOworICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5v
bi16ZXJvIGV4Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCit9OworCisvLworLy8g
Tm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN5bWJvbHMgb3IgY29uc3RhbnRzIGluIHRoZSBzb3Vy
Y2UgY29kZS4KKy8vCitjbGFzcyBUSW50ZXJtU3ltYm9sIDogcHVibGljIFRJbnRlcm1UeXBlZCB7
CitwdWJsaWM6CisgICAgLy8gaWYgc3ltYm9sIGlzIGluaXRpYWxpemVkIGFzIHN5bWJvbChzeW0p
LCB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhlIHBvb2xhbGxvY2F0b3Igb2Ygc3ltLiBJZiBzeW0g
Y29tZXMgZnJvbQorICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4g
aXQgY2F1c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKKyAgICAvLyBpdCBp
cyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKKyAg
ICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0
KSA6IAorICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07
fSAKKyAgICB2aXJ0dWFsIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9CisgICAgdmly
dHVhbCBjb25zdCBUU3RyaW5nJiBnZXRTeW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7ICB9
CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0
dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KK3By
b3RlY3RlZDoKKyAgICBpbnQgaWQ7CisgICAgVFN0cmluZyBzeW1ib2w7Cit9OworCitjbGFzcyBU
SW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgeworcHVibGljOgorICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uKENvbnN0YW50VW5pb24gKnVuaW9uUG9pbnRlciwgY29uc3Qg
VFR5cGUmIHQpIDogVEludGVybVR5cGVkKHQpLCB1bmlvbkFycmF5UG9pbnRlcih1bmlvblBvaW50
ZXIpIHsgfQorICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9uQXJyYXlQb2ludGVyKCkgY29uc3Qg
eyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KKyAgICB2b2lkIHNldFVuaW9uQXJyYXlQb2lu
dGVyKENvbnN0YW50VW5pb24gKmMpIHsgdW5pb25BcnJheVBvaW50ZXIgPSBjOyB9CisgICAgdmly
dHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgIHsgcmV0dXJu
IHRoaXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogKTsK
KyAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZm9sZChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCos
IFRJbmZvU2luayYpOworcHJvdGVjdGVkOgorICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQ
b2ludGVyOworfTsKKworLy8KKy8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBlcyB0
aGF0IGhvbGQgb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1YmxpYyBU
SW50ZXJtVHlwZWQgeworcHVibGljOgorICAgIFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsgcmV0
dXJuIG9wOyB9CisgICAgYm9vbCBtb2RpZmllc1N0YXRlKCkgY29uc3Q7CisgICAgYm9vbCBpc0Nv
bnN0cnVjdG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJikg
eyByZXR1cm4gdHJ1ZTsgfQorcHJvdGVjdGVkOgorICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0
b3IgbykgOiBUSW50ZXJtVHlwZWQoVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCkpLCBvcChv
KSB7fQorICAgIFRJbnRlcm1PcGVyYXRvcihUT3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVy
bVR5cGVkKHQpLCBvcChvKSB7fSAgIAorICAgIFRPcGVyYXRvciBvcDsKK307CisKKy8vCisvLyBO
b2RlcyBmb3IgYWxsIHRoZSBiYXNpYyBiaW5hcnkgbWF0aCBvcGVyYXRvcnMuCisvLworY2xhc3Mg
VEludGVybUJpbmFyeSA6IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJ
bnRlcm1CaW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pIHt9CisgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TGVmdChUSW50ZXJtVHlwZWQqIG4pIHsgbGVmdCA9IG47IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UmlnaHQoVEludGVybVR5cGVkKiBuKSB7IHJpZ2h0ID0gbjsgfQorICAgIHZpcnR1YWwgVElu
dGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQorICAgIHZpcnR1YWwg
VEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgdmly
dHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJik7Citwcm90ZWN0ZWQ6CisgICAgVElu
dGVybVR5cGVkKiBsZWZ0OworICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7Cit9OworCisvLworLy8g
Tm9kZXMgZm9yIHVuYXJ5IG1hdGggb3BlcmF0b3JzLgorLy8KK2NsYXNzIFRJbnRlcm1VbmFyeSA6
IHB1YmxpYyBUSW50ZXJtT3BlcmF0b3IgeworcHVibGljOgorICAgIFRJbnRlcm1VbmFyeShUT3Bl
cmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5kKDApIHt9
CisgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgb3Bl
cmFuZCgwKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7
CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQg
PSBvOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldE9wZXJhbmQoKSB7IHJldHVybiBv
cGVyYW5kOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyBy
ZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworcHJv
dGVjdGVkOgorICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKK307CisKK3R5cGVkZWYgVFZlY3Rv
cjxUSW50ZXJtTm9kZSo+IFRJbnRlcm1TZXF1ZW5jZTsKK3R5cGVkZWYgVFZlY3RvcjxpbnQ+IFRR
dWFsaWZpZXJMaXN0OworLy8KKy8vIE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkg
c2l6ZWQgc2V0IG9mIGNoaWxkcmVuLgorLy8KK2NsYXNzIFRJbnRlcm1BZ2dyZWdhdGUgOiBwdWJs
aWMgVEludGVybU9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUSW50ZXJtQWdncmVnYXRlKCkgOiBU
SW50ZXJtT3BlcmF0b3IoRU9wTnVsbCksIHVzZXJEZWZpbmVkKGZhbHNlKSwgcHJhZ21hVGFibGUo
MCkgeyB9CisgICAgVEludGVybUFnZ3JlZ2F0ZShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0
b3IobyksIHByYWdtYVRhYmxlKDApIHsgfQorICAgIH5USW50ZXJtQWdncmVnYXRlKCkgeyBkZWxl
dGUgcHJhZ21hVGFibGU7IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1BZ2dyZWdhdGUqIGdldEFzQWdn
cmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRvcihU
T3BlcmF0b3IgbykgeyBvcCA9IG87IH0KKyAgICB2aXJ0dWFsIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0
U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5jZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROYW1l
KGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9IG47IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRTdHJp
bmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CisgICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VXNlckRlZmlu
ZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1VzZXJEZWZp
bmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KKyAgICB2aXJ0dWFsIFRRdWFsaWZpZXJMaXN0
JiBnZXRRdWFsaWZpZXIoKSB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldE9wdGlt
aXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkg
eyBkZWJ1ZyA9IGQ7IH0KKyAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7
IH0KKyAgICBib29sIGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KKyAgICB2b2lkIGFkZFRv
UHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpOworICAgIGNvbnN0IFRQcmFn
bWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0K
K3Byb3RlY3RlZDoKKyAgICBUSW50ZXJtQWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUm
KTsgLy8gZGlzYWxsb3cgY29weSBjb25zdHJ1Y3RvcgorICAgIFRJbnRlcm1BZ2dyZWdhdGUmIG9w
ZXJhdG9yPShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1lbnQg
b3BlcmF0b3IKKyAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxdWVuY2U7CisgICAgVFF1YWxpZmllckxp
c3QgcXVhbGlmaWVyOworICAgIFRTdHJpbmcgbmFtZTsKKyAgICBib29sIHVzZXJEZWZpbmVkOyAv
LyB1c2VkIGZvciB1c2VyIGRlZmluZWQgZnVuY3Rpb24gbmFtZXMKKyAgICBib29sIG9wdGltaXpl
OworICAgIGJvb2wgZGVidWc7CisgICAgVFByYWdtYVRhYmxlICpwcmFnbWFUYWJsZTsKK307CisK
Ky8vCisvLyBGb3IgaWYgdGVzdHMuICBTaW1wbGlmaWVkIHNpbmNlIHRoZXJlIGlzIG5vIHN3aXRj
aCBzdGF0ZW1lbnQuCisvLworY2xhc3MgVEludGVybVNlbGVjdGlvbiA6IHB1YmxpYyBUSW50ZXJt
VHlwZWQgeworcHVibGljOgorICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25k
LCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIpIDoKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZChUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpKSwgY29uZGl0aW9uKGNv
bmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKyAgICBUSW50ZXJt
U2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGUqIHRydWVCLCBUSW50ZXJt
Tm9kZSogZmFsc2VCLCBjb25zdCBUVHlwZSYgdHlwZSkgOgorICAgICAgICAgICAgVEludGVybVR5
cGVkKHR5cGUpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2so
ZmFsc2VCKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7
CisgICAgYm9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Vm9pZDsgfQorICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldENvbmRpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbjsgfQorICAgIHZpcnR1YWwgVEludGVybU5vZGUq
IGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQorICAgIHZpcnR1YWwg
VEludGVybU5vZGUqIGdldEZhbHNlQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9
CisgICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJl
dHVybiB0aGlzOyB9Citwcm90ZWN0ZWQ6CisgICAgVEludGVybVR5cGVkKiBjb25kaXRpb247Cisg
ICAgVEludGVybU5vZGUqIHRydWVCbG9jazsKKyAgICBUSW50ZXJtTm9kZSogZmFsc2VCbG9jazsK
K307CisKK2VudW0gVmlzaXQKK3sKKyAgICBQcmVWaXNpdCwKKyAgICBJblZpc2l0LAorICAgIFBv
c3RWaXNpdAorfTsKKworLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLiAgVXNlciBzaG91
bGQgZGVyaXZlIGZyb20gdGhpcywgCisvLyBwdXQgdGhlaXIgdHJhdmVyc2FsIHNwZWNpZmljIGRh
dGEgaW4gaXQsIGFuZCB0aGVuIHBhc3MKKy8vIGl0IHRvIGEgVHJhdmVyc2UgbWV0aG9kLgorLy8K
Ky8vIFdoZW4gdXNpbmcgdGhpcywganVzdCBmaWxsIGluIHRoZSBtZXRob2RzIGZvciBub2RlcyB5
b3Ugd2FudCB2aXNpdGVkLgorLy8gUmV0dXJuIGZhbHNlIGZyb20gYSBwcmUtdmlzaXQgdG8gc2tp
cCB2aXNpdGluZyB0aGF0IG5vZGUncyBzdWJ0cmVlLgorLy8KK2NsYXNzIFRJbnRlcm1UcmF2ZXJz
ZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xB
bGxvY2F0b3IpCisKKyAgICBUSW50ZXJtVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQgPSB0cnVlLCBi
b29sIGluVmlzaXQgPSBmYWxzZSwgYm9vbCBwb3N0VmlzaXQgPSBmYWxzZSwgYm9vbCByaWdodFRv
TGVmdCA9IGZhbHNlKSA6IAorICAgICAgICAgICAgcHJlVmlzaXQocHJlVmlzaXQpLAorICAgICAg
ICAgICAgaW5WaXNpdChpblZpc2l0KSwKKyAgICAgICAgICAgIHBvc3RWaXNpdChwb3N0VmlzaXQp
LAorICAgICAgICAgICAgcmlnaHRUb0xlZnQocmlnaHRUb0xlZnQpLAorICAgICAgICAgICAgZGVw
dGgoMCkge30KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKikg
e30KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVu
aW9uKikge30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKSB7cmV0dXJuIHRydWU7fQorICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHtyZXR1cm4g
dHJ1ZTt9CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlKikge3JldHVybiB0cnVlO30KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHtyZXR1cm4gdHJ1ZTt9CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKikge3JldHVybiB0cnVl
O30KKworICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ZGVwdGgrKzt9CisgICAgdm9pZCBkZWNy
ZW1lbnREZXB0aCgpIHtkZXB0aC0tO30KKworICAgIGNvbnN0IGJvb2wgcHJlVmlzaXQ7CisgICAg
Y29uc3QgYm9vbCBpblZpc2l0OworICAgIGNvbnN0IGJvb2wgcG9zdFZpc2l0OworICAgIGNvbnN0
IGJvb2wgcmlnaHRUb0xlZnQ7CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgZGVwdGg7Cit9OworCisj
ZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2Fs
aW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50
ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvbG9jYWxpbnRl
cm1lZGlhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXworI2RlZmluZSBfTE9D
QUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvU3ltYm9sVGFibGUuaCIKKworc3RydWN0IFRWZWN0b3JGaWVsZHMgeworICAgIGludCBvZmZz
ZXRzWzRdOworICAgIGludCBudW07Cit9OworCisvLworLy8gU2V0IG9mIGhlbHBlciBmdW5jdGlv
bnMgdG8gaGVscCBwYXJzZSBhbmQgYnVpbGQgdGhlIHRyZWUuCisvLworY2xhc3MgVEluZm9TaW5r
OworY2xhc3MgVEludGVybWVkaWF0ZSB7CitwdWJsaWM6ICAgIAorICAgIFBPT0xfQUxMT0NBVE9S
X05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKKworICAgIFRJbnRlcm1lZGlhdGUoVElu
Zm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQorICAgIFRJbnRlcm1TeW1ib2wqIGFkZFN5bWJv
bChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIFRTb3VyY2VMb2MpOworICAg
IFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0b3IsIGNvbnN0IFRUeXBlJiwgVElu
dGVybVR5cGVkKik7CisgICAgVEludGVybVR5cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBv
cCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jLCBU
U3ltYm9sVGFibGUmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyk7Cisg
ICAgVEludGVybVR5cGVkKiBhZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFz
ZSwgVEludGVybVR5cGVkKiBpbmRleCwgVFNvdXJjZUxvYyk7CisgICAgVEludGVybVR5cGVkKiBh
ZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIFRTb3VyY2VMb2Ms
IFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdyb3dBZ2dyZWdhdGUoVElu
dGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxvYyk7CisgICAgVElu
dGVybUFnZ3JlZ2F0ZSogbWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVybU5v
ZGUqLCBUT3BlcmF0b3IsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1Ob2RlKiAgYWRkU2VsZWN0
aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVybU5vZGVQYWlyIGNvZGUsIFRTb3VyY2VMb2Mp
OworICAgIFRJbnRlcm1UeXBlZCogYWRkU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVElu
dGVybVR5cGVkKiB0cnVlQmxvY2ssIFRJbnRlcm1UeXBlZCogZmFsc2VCbG9jaywgVFNvdXJjZUxv
Yyk7CisgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBh
ZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIFRTb3VyY2VMb2Mp
OworICAgIFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVElu
dGVybUNvbnN0YW50VW5pb24qKSA7CisgICAgYm9vbCBwYXJzZUNvbnN0VHJlZShUU291cmNlTG9j
LCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYs
IFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBU
SW50ZXJtTm9kZSogYWRkTG9vcChUSW50ZXJtTm9kZSosIFRJbnRlcm1Ob2RlKiwgVEludGVybVR5
cGVkKiwgVEludGVybVR5cGVkKiwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MpOworICAgIFRJ
bnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRTb3VyY2VMb2MpOworICAgIFRJbnRl
cm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2Mp
OworICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgVFNvdXJjZUxv
Yyk7CisgICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSosIEVTaExhbmd1YWdlKTsKKwl2
b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOworICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9k
ZSopOworICAgIAorcHJvdGVjdGVkOgorICAgIFRJbmZvU2luayYgaW5mb1Npbms7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBvcGVyYXRvcj0oVEludGVybWVkaWF0ZSYpOyAvLyBwcmV2ZW50IGFzc2ln
bm1lbnRzCit9OworCisjZW5kaWYgLy8gX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvb3NpbmNsdWRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgX19PU0lOQ0xVREVfSAorI2RlZmluZSBfX09TSU5DTFVERV9ICisK
Ky8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmlj
IGRhdGF0eXBlcyBhbmQKKy8vIGRlY2xhcmVzIGFueSB3aW5kb3dzIHNwZWNpZmljIGZ1bmN0aW9u
cy4KKy8vCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCisjZGVmaW5l
IEFOR0xFX09TX1dJTgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19saW51
eF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJT
RF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fc3VuKQorI2RlZmluZSBBTkdMRV9PU19QT1NJWAor
I2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybS4KKyNlbmRpZgorCisjaWYgZGVmaW5l
ZChBTkdMRV9PU19XSU4pCisjZGVmaW5lIFNUUklDVAorI2RlZmluZSBWQ19FWFRSQUxFQU4gMQor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisjaW5j
bHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGVycm5v
Lmg+CisjZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorCisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcu
aCIKKworLy8KKy8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKKy8vCisjaWYgZGVm
aW5lZChBTkdMRV9PU19XSU4pCit0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OworI2RlZmluZSBP
U19JTlZBTElEX1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQorI2VsaWYgZGVmaW5lZChB
TkdMRV9PU19QT1NJWCkKK3R5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OworI2RlZmlu
ZSBPU19JTlZBTElEX1RMU19JTkRFWCAweEZGRkZGRkZGCisjZW5kaWYgIC8vIEFOR0xFX09TX1dJ
TgorCitPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7Citib29sIE9TX1NldFRMU1ZhbHVl
KE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOworYm9vbCBPU19GcmVlVExTSW5k
ZXgoT1NfVExTSW5kZXggbkluZGV4KTsKKworaW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9T
X1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICBhc3NlcnQobkluZGV4ICE9IE9TX0lOVkFMSURfVExT
X0lOREVYKTsKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyAgICByZXR1cm4gVGxzR2V0VmFs
dWUobkluZGV4KTsKKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCisgICAgcmV0dXJuIHB0
aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKKyNlbmRpZiAgLy8gQU5HTEVfT1NfV0lOCit9CisK
KyNlbmRpZiAvLyBfX09TSU5DTFVERV9ICkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3Vy
Y2VfcG9zaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9w
b3NpeC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9z
aXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwb3NpeCBzcGVjaWZpYyBmdW5jdGlvbnMK
Ky8vCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKKyNpZiAhZGVmaW5lZChBTkdM
RV9PU19QT1NJWCkKKyNlcnJvciBUcnlpbmcgdG8gYnVpbGQgYSBwb3NpeCBzcGVjaWZpYyBmaWxl
IGluIGEgbm9uLXBvc2l4IGJ1aWxkLgorI2VuZGlmCisKKy8vCisvLyBUaHJlYWQgTG9jYWwgU3Rv
cmFnZSBPcGVyYXRpb25zCisvLworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCit7Cisg
ICAgcHRocmVhZF9rZXlfdCBwUG9vbEluZGV4OworCisgICAgLy8KKyAgICAvLyBDcmVhdGUgZ2xv
YmFsIHBvb2wga2V5LgorICAgIC8vCisgICAgaWYgKChwdGhyZWFkX2tleV9jcmVhdGUoJnBQb29s
SW5kZXgsIE5VTEwpKSAhPSAwKSB7CisgICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0lu
ZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gcFBvb2xJ
bmRleDsKKyAgICB9Cit9CisKKworYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5k
ZXgsIHZvaWQgKmxwdlZhbHVlKQoreworICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHRo
cmVhZF9zZXRzcGVjaWZpYyhuSW5kZXgsIGxwdlZhbHVlKSA9PSAwKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworCitib29sIE9TX0Zy
ZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCit7CisgICAgaWYgKG5JbmRleCA9PSBPU19J
TlZBTElEX1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUo
KTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vCisgICAgLy8gRGVsZXRlIHRoZSBnbG9iYWwgcG9vbCBrZXkuCisgICAgLy8KKyAgICBp
ZiAocHRocmVhZF9rZXlfZGVsZXRlKG5JbmRleCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvb3Nzb3VyY2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
b3Nzb3VyY2Vfd2luLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9vc3Nv
dXJjZV93aW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisvLworLy8gVGhpcyBmaWxl
IGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBzcGVjaWZpYyBmdW5jdGlvbnMKKy8vCisK
KyNpZiAhZGVmaW5lZChBTkdMRV9PU19XSU4pCisjZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgd2lu
ZG93cyBzcGVjaWZpYyBmaWxlIGluIGEgbm9uIHdpbmRvd3MgYnVpbGQuCisjZW5kaWYKKworCisv
LworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9T
X0FsbG9jVExTSW5kZXgoKQoreworCURXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOworCWlmIChk
d0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAmJiAiT1NfQWxsb2NU
TFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKwkJ
cmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOworCX0KKworCXJldHVybiBkd0luZGV4OworfQor
CisKK2Jvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1
ZSkKK3sKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUpKQorCQlyZXR1cm4g
dHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworCitib29sIE9TX0ZyZWVUTFNJbmRl
eChPU19UTFNJbmRleCBuSW5kZXgpCit7CisJaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19J
TkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5k
ZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChUbHNGcmVlKG5JbmRleCkpCisJCXJl
dHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9w
YXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNv
bnN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCisvLworLy8gVXNlIHRoaXMg
Y2xhc3MgdG8gY2FycnkgYWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbiAKKy8vIHRoZSB0
cmF2ZXJzYWwKKy8vCitjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZl
cnNlciB7CitwdWJsaWM6CisgICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlv
biwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9T
aW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkgOiB1bmlvbkFycmF5
KGNVbmlvbiksIHR5cGUodCksCisgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBl
KSwgc2luZ2xlQ29uc3RhbnRQYXJhbShzaW5nbGVDb25zdFBhcmFtKSwgaW5mb1Npbmsoc2luayks
IHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwgZXJyb3IoZmFsc2UpLCBpc01hdHJpeChmYWxzZSksIG1h
dHJpeFNpemUoMCkKKwl7CisJCWluZGV4ID0gMDsKKwl9CisKKwlib29sIGVycm9yOworCitwcm90
ZWN0ZWQ6CisJdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisJdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKwlib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisJYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtVW5hcnkqKTsKKwlib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKik7CisJYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSopOworCWJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCop
OworCWJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKKworICAg
IGludCBpbmRleDsKKyAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OworICAgIFRUeXBlIHR5
cGU7CisgICAgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKKyAgICBib29sIHNpbmdsZUNvbnN0
YW50UGFyYW07CisgICAgVEluZm9TaW5rJiBpbmZvU2luazsKKyAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlOworICAgIGludCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3RvciAoIDQg
Zm9yIHZlYzQpCisgICAgYm9vbCBpc01hdHJpeDsKKyAgICBpbnQgbWF0cml4U2l6ZTsgLy8gZGlt
ZW5zaW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBpbnN0YW5jZSBz
aXplKQorfTsKKworLy8KKy8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2Fs
IGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQorLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUg
dHJhdmVyc2FsLgorLy8KKy8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2
ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCisvLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElm
IHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAorLy8gcmV0dXJuIGZhbHNlLgorLy8KKwor
dm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCit7
CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiU3ltYm9s
IE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOwor
ICAgIHJldHVybjsKKworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7CisgICAgCisgICAgaWYgKHF1YWxp
ZmllciAhPSBFdnFDb25zdCkgeworICAgICAgICBUU3RyaW5nIGJ1ZjsKKyAgICAgICAgYnVmLmFw
cGVuZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7CisgICAg
ICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5vZGUtPmdldExpbmUo
KSk7CisgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgCisgICAg
fQorCisgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCaW5h
cnkgTm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRDb25zdFRyYXZlcnNlcjo6dmlz
aXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQoreworICAgIFRTdHJpbmcg
YnVmOworICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0
YW50IHRvICIpOworICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+
Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOyAgCit9CisK
K2Jvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0b3IoKSAmJiBu
b2RlLT5nZXRPcCgpICE9IEVPcENvbW1hKSB7CisgICAgICAgIFRTdHJpbmcgYnVmOworICAgICAg
ICBidWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAi
KTsKKyAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+
Z2V0TGluZSgpKTsKKyAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7
ICAKKyAgICB9CisKKyAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMCkgewor
ICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYmIG5vZGUtPmdl
dFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAg
aWYgKGZsYWcpIAorICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IHRydWU7IAor
ICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOworICAgICAgICBzaXplID0g
bm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKworICAgICAgICBpZiAobm9kZS0+Z2V0
VHlwZSgpLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAg
ICAgICAgfQorICAgIH0gICAgICAgCisKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0
b3IgcCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7CisK
KyAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCisgICAgICAgICAgICBpbmRl
eCA9IDA7ICAgICAgICAgICAKKworICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlzKTsKKyAgICB9
ICAgCisgICAgaWYgKGZsYWcpIAorICAgIHsKKyAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9
IGZhbHNlOyAgIAorICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOworICAgICAgICBz
aXplID0gMDsKKyAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKKyAgICAgICAgbWF0cml4U2l6ZSA9
IDA7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQorewor
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlNlbGVjdGlv
biBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsK
KyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRDb25zdFRy
YXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQor
eworICAgIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5ID0gdW5pb25BcnJheTsKKyAgICBp
bnQgaW5zdGFuY2VTaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7CisKKyAgICBpZiAoaW5kZXgg
Pj0gaW5zdGFuY2VTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNpbmdsZUNvbnN0
YW50UGFyYW0pIHsKKyAgICAgICAgaW50IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpOworICAgIAorICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBu
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0g
cmlnaHRVbmlvbkFycmF5W2ldOworCisgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBpbnQgdG90YWxTaXplID0gaW5kZXggKyBzaXplOworICAg
ICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpOworICAgICAgICBpZiAoIWlzTWF0cml4KSB7CisgICAgICAgICAgICBpbnQgY291
bnQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0g
cmlnaHRVbmlvbkFycmF5W2NvdW50XTsKKworICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycworICAgICAg
ICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgIGludCBlbGVtZW50ID0gaW5kZXg7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgeworICAg
ICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxl
bWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAgKQorICAgICAgICAgICAgICAgICAgICBsZWZ0
VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07CisgICAgICAgICAgICAgICAg
ZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAu
MGYpOworCisgICAgICAgICAgICAgICAgKGluZGV4KSsrOworCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQorICAgICAgICAgICAgICAgICAg
ICBjb3VudCsrOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiTG9vcCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9k
ZS0+Z2V0TGluZSgpKTsKKyAgICBlcnJvciA9IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpCit7CisgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2Rl
LT5nZXRMaW5lKCkpOworICAgIGVycm9yID0gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0
YXJ0IHRoZSB0cmF2ZXJzYWwuCisvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlh
bGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAorLy8gdHlwZSBvZiBub2RlLiAg
SXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KKy8vCitib29sIFRJbnRlcm1l
ZGlhdGU6OnBhcnNlQ29uc3RUcmVlKFRTb3VyY2VMb2MgbGluZSwgVEludGVybU5vZGUqIHJvb3Qs
IENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXksIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGUsIFRT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFRUeXBlIHQsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJh
bSkKK3sKKyAgICBpZiAocm9vdCA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBU
Q29uc3RUcmF2ZXJzZXIgaXQodW5pb25BcnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3Ry
dWN0b3JUeXBlLCBpbmZvU2luaywgc3ltYm9sVGFibGUsIHQpOworCisgICAgcm9vdC0+dHJhdmVy
c2UoJml0KTsKKyAgICBpZiAoaXQuZXJyb3IpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3Vu
aXN0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkocmV2aXNp
b24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorLy8gVGhpcyBpcyBhIE5VTEwgZmlsZSBhbmQgaXMgbWVhbnQgdG8gYmUgZW1wdHkK
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzQwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2Fy
ZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIGF0
b20uYworLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworI3VuZGVmIG1hbGxvYworI3Vu
ZGVmIHJlYWxsb2MKKyN1bmRlZiBmcmVlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3Ry
aW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7
CisgICAgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpzdHI7Cit9IHRva2Vuc1tdID0geworICAg
IHsgQ1BQX0FORF9PUCwgICAgICAgICAiJiYiIH0sCisgICAgeyBDUFBfQU5EX0FTU0lHTiwgICAg
ICImPSIgfSwKKyAgICB7IENQUF9TVUJfQVNTSUdOLCAgICAgIi09IiB9LAorICAgIHsgQ1BQX01P
RF9BU1NJR04sICAgICAiJT0iIH0sCisgICAgeyBDUFBfQUREX0FTU0lHTiwgICAgICIrPSIgfSwK
KyAgICB7IENQUF9ESVZfQVNTSUdOLCAgICAgIi89IiB9LAorICAgIHsgQ1BQX01VTF9BU1NJR04s
ICAgICAiKj0iIH0sCisgICAgeyBDUFBfUklHSFRfQlJBQ0tFVCwgICI6PiIgfSwKKyAgICB7IENQ
UF9FUV9PUCwgICAgICAgICAgIj09IiB9LAorICAgIHsgQ1BQX1hPUl9PUCwgICAgICAgICAiXl4i
IH0sIAorICAgIHsgQ1BQX1hPUl9BU1NJR04sICAgICAiXj0iIH0sIAorICAgIHsgQ1BQX0ZMT0FU
Q09OU1RBTlQsICAiPGZsb2F0LWNvbnN0PiIgfSwKKyAgICB7IENQUF9HRV9PUCwgICAgICAgICAg
Ij49IiB9LAorICAgIHsgQ1BQX1JJR0hUX09QLCAgICAgICAiPj4iIH0sCisgICAgeyBDUFBfUklH
SFRfQVNTSUdOLCAgICI+Pj0iIH0sIAorICAgIHsgQ1BQX0lERU5USUZJRVIsICAgICAiPGlkZW50
PiIgfSwKKyAgICB7IENQUF9JTlRDT05TVEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9LAorICAgIHsg
Q1BQX0xFX09QLCAgICAgICAgICAiPD0iIH0sCisgICAgeyBDUFBfTEVGVF9PUCwgICAgICAgICI8
PCIgfSwKKyAgICB7IENQUF9MRUZUX0FTU0lHTiwgICAgIjw8PSIgfSwKKyAgICB7IENQUF9MRUZU
X0JSQUNLRVQsICAgIjw6IiB9LAorICAgIHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAiPCUiIH0sIAor
ICAgIHsgQ1BQX0RFQ19PUCwgICAgICAgICAiLS0iIH0sCisgICAgeyBDUFBfUklHSFRfQlJBQ0Us
ICAgICIlPiIgfSwgCisgICAgeyBDUFBfTkVfT1AsICAgICAgICAgICIhPSIgfSwKKyAgICB7IENQ
UF9PUl9PUCwgICAgICAgICAgInx8IiB9LAorICAgIHsgQ1BQX09SX0FTU0lHTiwgICAgICAifD0i
IH0sIAorICAgIHsgQ1BQX0lOQ19PUCwgICAgICAgICAiKysiIH0sCisgICAgeyBDUFBfU1RSQ09O
U1RBTlQsICAgICI8c3RyaW5nLWNvbnN0PiIgfSwKKyAgICB7IENQUF9UWVBFSURFTlRJRklFUiwg
Ijx0eXBlLWlkZW50PiIgfSwKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5n
IHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX1NUUklOR19UQUJM
RV9TSVpFIDE2Mzg0CisKK3R5cGVkZWYgc3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7CisgICAgY2hh
ciAqc3RyaW5nczsKKyAgICBpbnQgbmV4dEZyZWU7CisgICAgaW50IHNpemU7Cit9IFN0cmluZ1Rh
YmxlOworCisvKgorICogSW5pdFN0cmluZ1RhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBzdHJpbmcg
dGFibGUuCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0cmluZ1RhYmxl
ICpzdGFibGUpCit7CisgICAgc3RhYmxlLT5zdHJpbmdzID0gKGNoYXIgKikgbWFsbG9jKElOSVRf
U1RSSU5HX1RBQkxFX1NJWkUpOworICAgIGlmICghc3RhYmxlLT5zdHJpbmdzKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAvLyBaZXJvLXRoIG9mZnNldCBtZWFucyAiZW1wdHkiIHNvIGRvbid0IHVz
ZSBpdC4KKyAgICBzdGFibGUtPm5leHRGcmVlID0gMTsKKyAgICBzdGFibGUtPnNpemUgPSBJTklU
X1NUUklOR19UQUJMRV9TSVpFOworICAgIHJldHVybiAxOworfSAvLyBJbml0U3RyaW5nVGFibGUK
KworLyoKKyAqIEZyZWVTdHJpbmdUYWJsZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRhYmxlLgorICoK
KyAqLworCitzdGF0aWMgdm9pZCBGcmVlU3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkK
K3sKKyAgICBpZiAoc3RhYmxlLT5zdHJpbmdzKQorICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5n
cyk7CisgICAgc3RhYmxlLT5zdHJpbmdzID0gTlVMTDsKKyAgICBzdGFibGUtPm5leHRGcmVlID0g
MDsKKyAgICBzdGFibGUtPnNpemUgPSAwOworfSAvLyBGcmVlU3RyaW5nVGFibGUKKworLyoKKyAq
IEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0aW9u
LgorICoKKyAqLworCitzdGF0aWMgaW50IEhhc2hTdHJpbmcoY29uc3QgY2hhciAqcykKK3sKKyAg
ICBpbnQgaHZhbCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZhbCA9IChodmFs
KjEzNTA3ICsgKnMqMTk3KSBeIChodmFsID4+IDIpOworICAgICAgICBzKys7CisgICAgfQorICAg
IHJldHVybiBodmFsICYgMHg3ZmZmZmZmZjsKK30gLy8gSGFzaFN0cmluZworCisvKgorICogSGFz
aFN0cmluZzIoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgaW5jcmltZW50aW5nIGhhc2ggZnVu
Y3Rpb24uCisgKgorICovCisKK3N0YXRpYyBpbnQgSGFzaFN0cmluZzIoY29uc3QgY2hhciAqcykK
K3sKKyAgICBpbnQgaHZhbCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaHZhbCA9
IChodmFsKjcyOSArICpzKjM3KSBeIChodmFsID4+IDEpOworICAgICAgICBzKys7CisgICAgfQor
ICAgIHJldHVybiBodmFsOworfSAvLyBIYXNoU3RyaW5nMgorCisvKgorICogQWRkU3RyaW5nKCkg
LSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJpbmcgdGFibGUuICBSZXR1cm4gaXQncyBvZmZzZXQuCisg
KgorICovCisKK3N0YXRpYyBpbnQgQWRkU3RyaW5nKFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0
IGNoYXIgKnMpCit7CisgICAgaW50IGxlbiwgbG9jOworICAgIGNoYXIgKnN0cjsKKworICAgIGxl
biA9IChpbnQpIHN0cmxlbihzKTsKKyAgICBpZiAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiArIDEg
Pj0gc3RhYmxlLT5zaXplKSB7CisgICAgICAgIGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAwMDAw
KTsKKyAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKKyAgICAg
ICAgbWVtY3B5KHN0ciwgc3RhYmxlLT5zdHJpbmdzLCBzdGFibGUtPnNpemUpOworICAgICAgICBm
cmVlKHN0YWJsZS0+c3RyaW5ncyk7CisgICAgICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsKKyAg
ICB9CisgICAgbG9jID0gc3RhYmxlLT5uZXh0RnJlZTsKKyAgICBzdHJjcHkoJnN0YWJsZS0+c3Ry
aW5nc1tsb2NdLCBzKTsKKyAgICBzdGFibGUtPm5leHRGcmVlICs9IGxlbiArIDE7CisgICAgcmV0
dXJuIGxvYzsKK30gLy8gQWRkU3RyaW5nCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEhh
c2ggdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTklUX0hBU0hfVEFC
TEVfU0laRSAyMDQ3CisjZGVmaW5lIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgMworCit0eXBl
ZGVmIHN0cnVjdCBIYXNoRW50cnlfUmVjIHsKKyAgICBpbnQgaW5kZXg7ICAgICAgLy8gU3RyaW5n
IHRhYmxlIG9mZnNldCBvZiBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgICBpbnQgdmFsdWU7ICAg
ICAgLy8gQXRvbSAoc3ltYm9sKSB2YWx1ZQorfSBIYXNoRW50cnk7CisKK3R5cGVkZWYgc3RydWN0
IEhhc2hUYWJsZV9SZWMgeworICAgIEhhc2hFbnRyeSAqZW50cnk7CisgICAgaW50IHNpemU7Cisg
ICAgaW50IGVudHJpZXM7CisgICAgaW50IGNvdW50c1tIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05T
ICsgMV07Cit9IEhhc2hUYWJsZTsKKworLyoKKyAqIEluaXRIYXNoVGFibGUoKSAtIEluaXRpYWxp
emUgdGhlIGhhc2ggdGFibGUuCisgKgorICovCisKK3N0YXRpYyBpbnQgSW5pdEhhc2hUYWJsZShI
YXNoVGFibGUgKmh0YWJsZSwgaW50IGZzaXplKQoreworICAgIGludCBpaTsKKworICAgIGh0YWJs
ZS0+ZW50cnkgPSAoSGFzaEVudHJ5ICopIG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSpmc2l6ZSk7
CisgICAgaWYgKCFodGFibGUtPmVudHJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICBodGFibGUt
PnNpemUgPSBmc2l6ZTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBmc2l6ZTsgaWkrKykgeworICAg
ICAgICBodGFibGUtPmVudHJ5W2lpXS5pbmRleCA9IDA7CisgICAgICAgIGh0YWJsZS0+ZW50cnlb
aWldLnZhbHVlID0gMDsKKyAgICB9CisgICAgaHRhYmxlLT5lbnRyaWVzID0gMDsKKyAgICBmb3Ig
KGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykKKyAgICAgICAg
aHRhYmxlLT5jb3VudHNbaWldID0gMDsKKyAgICByZXR1cm4gMTsKK30gLy8gSW5pdEhhc2hUYWJs
ZQorCisvKgorICogRnJlZUhhc2hUYWJsZSgpIC0gRnJlZSB0aGUgaGFzaCB0YWJsZS4KKyAqCisg
Ki8KKworc3RhdGljIHZvaWQgRnJlZUhhc2hUYWJsZShIYXNoVGFibGUgKmh0YWJsZSkKK3sKKyAg
ICBpZiAoaHRhYmxlLT5lbnRyeSkKKyAgICAgICAgZnJlZShodGFibGUtPmVudHJ5KTsKKyAgICBo
dGFibGUtPmVudHJ5ID0gTlVMTDsKKyAgICBodGFibGUtPnNpemUgPSAwOworICAgIGh0YWJsZS0+
ZW50cmllcyA9IDA7Cit9IC8vIEZyZWVIYXNoVGFibGUKKworLyoKKyAqIEVtcHR5KCkgLSBTZWUg
aWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LgorICoKKyAqLworCitzdGF0aWMgaW50IEVt
cHR5KEhhc2hUYWJsZSAqaHRhYmxlLCBpbnQgaGFzaGxvYykKK3sKKyAgICBhc3NlcnQoaGFzaGxv
YyA+PSAwICYmIGhhc2hsb2MgPCBodGFibGUtPnNpemUpOworICAgIGlmIChodGFibGUtPmVudHJ5
W2hhc2hsb2NdLmluZGV4ID09IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfSAvLyBFbXB0eQorCisvKgorICogTWF0Y2goKSAt
IFNlZSBpZiBhIGhhc2ggdGFibGUgZW50cnkgaXMgbWF0Y2hlcyBhIHN0cmluZy4KKyAqCisgKi8K
Kworc3RhdGljIGludCBNYXRjaChIYXNoVGFibGUgKmh0YWJsZSwgU3RyaW5nVGFibGUgKnN0YWJs
ZSwgY29uc3QgY2hhciAqcywgaW50IGhhc2hsb2MpCit7CisgICAgaW50IHN0cmxvYzsKKworICAg
IHN0cmxvYyA9IGh0YWJsZS0+ZW50cnlbaGFzaGxvY10uaW5kZXg7CisgICAgaWYgKCFzdHJjbXAo
cywgJnN0YWJsZS0+c3RyaW5nc1tzdHJsb2NdKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIE1hdGNoCisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIEF0b20gdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
I2RlZmluZSBJTklUX0FUT01fVEFCTEVfU0laRSAxMDI0CisKKworc3RydWN0IEF0b21UYWJsZV9S
ZWMgeworICAgIFN0cmluZ1RhYmxlIHN0YWJsZTsgLy8gU3RyaW5nIHRhYmxlLgorICAgIEhhc2hU
YWJsZSBodGFibGU7ICAgLy8gSGFzaGVzIHN0cmluZyB0byBhdG9tIG51bWJlciBhbmQgdG9rZW4g
dmFsdWUuICBNdWx0aXBsZSBzdHJpbmdzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGF2ZSB0aGUgc2FtZSB0b2tlbiB2YWx1ZSBidXQgZWFjaCB1bmlxdWUgc3RyaW5nIGlzIGEgdW5p
cXVlIGF0b20uCisgICAgaW50ICphbWFwOyAgICAgICAgICAvLyBNYXBzIGF0b20gdmFsdWUgdG8g
b2Zmc2V0IGluIHN0cmluZyB0YWJsZS4gIEF0b21zIGFsbCBtYXAgdG8gdW5pcXVlCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIGV4Y2VwdCBmb3Igc29tZSB1bmRlZmluZWQgdmFs
dWVzIGluIHRoZSBsb3dlciwgZml4ZWQgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b2YgdGhlIGF0b20gdGFibGUgdGhhdCBtYXAgdG8gIjx1bmRlZmluZWQ+Ii4gIFRoZSBsb3dlc3Qg
MjU2IGF0b21zCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHNpbmds
ZSBjaGFyYWN0ZXIgQVNDSUkgdmFsdWVzIGV4Y2VwdCBmb3IgYWxwaGFudW1lcmljCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGFuZCAnXycsIHdoaWNoIGNhbiBiZSBvdGhl
ciB0b2tlbnMuICBOZXh0IGNvbWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYW5n
dWFnZSB0b2tlbnMgd2l0aCB0aGVpciBhdG9tIHZhbHVlcyBlcXVhbCB0byB0aGUgdG9rZW4gdmFs
dWUuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbWUgcHJlZGVmaW5lZCBhdG9t
cywgZm9sbG93ZWQgYnkgdXNlciBzcGVjaWZpZWQgaWRlbnRpZmllcnMuCisgICAgaW50ICphcmV2
OyAgICAgICAgICAvLyBSZXZlcnNlZCBhdG9tIGZvciBzeW1ib2wgdGFibGUgdXNlLgorICAgIGlu
dCBuZXh0RnJlZTsKKyAgICBpbnQgc2l6ZTsKK307CisKK3N0YXRpYyBBdG9tVGFibGUgbGF0YWJs
ZSA9IHsgeyAwIH0gfTsKK0F0b21UYWJsZSAqYXRhYmxlID0gJmxhdGFibGU7CisKK3N0YXRpYyBp
bnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRv
bSk7CisKKy8qCisgKiBHcm93QXRvbVRhYmxlKCkgLSBHcm93IHRoZSBhdG9tIHRhYmxlIHRvIGF0
IGxlYXN0ICJzaXplIiBpZiBpdCdzIHNtYWxsZXIuCisgKgorICovCisKK3N0YXRpYyBpbnQgR3Jv
d0F0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IHNpemUpCit7CisgICAgaW50ICpuZXdt
YXAsICpuZXdyZXY7CisKKyAgICBpZiAoYXRhYmxlLT5zaXplIDwgc2l6ZSkgeworICAgICAgICBp
ZiAoYXRhYmxlLT5hbWFwKSB7CisgICAgICAgICAgICBuZXdtYXAgPSByZWFsbG9jKGF0YWJsZS0+
YW1hcCwgc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBuZXdyZXYgPSByZWFsbG9jKGF0
YWJsZS0+YXJldiwgc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBuZXdtYXAgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBuZXdy
ZXYgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7CisgICAgICAgICAgICBhdGFibGUtPnNpemUg
PSAwOworICAgICAgICB9CisgICAgICAgIGlmICghbmV3bWFwIHx8ICFuZXdyZXYpIHsKKyAgICAg
ICAgICAgIC8qIGZhaWxlZCB0byBncm93IC0tIGVycm9yICovCisgICAgICAgICAgICBpZiAobmV3
bWFwKQorICAgICAgICAgICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKKyAgICAgICAgICAg
IGlmIChuZXdyZXYpCisgICAgICAgICAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3cmV2OworICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbXNldCgmbmV3bWFwW2F0
YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKKyAg
ICAgICAgbWVtc2V0KCZuZXdyZXZbYXRhYmxlLT5zaXplXSwgMCwgKHNpemUgLSBhdGFibGUtPnNp
emUpICogc2l6ZW9mKGludCkpOworICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7CisgICAg
ICAgIGF0YWJsZS0+YXJldiA9IG5ld3JldjsKKyAgICAgICAgYXRhYmxlLT5zaXplID0gc2l6ZTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9IC8vIEdyb3dBdG9tVGFibGUKKworLyoKKyAqIGxSZXZl
cnNlKCkgLSBSZXZlcnNlIHRoZSBib3R0b20gMjAgYml0cyBvZiBhIDMyIGJpdCBpbnQuCisgKgor
ICovCisKK3N0YXRpYyBpbnQgbFJldmVyc2UoaW50IGZ2YWwpCit7CisgICAgdW5zaWduZWQgaW50
IGluID0gZnZhbDsKKyAgICBpbnQgcmVzdWx0ID0gMCwgY250ID0gMDsKKworICAgIHdoaWxlKGlu
KSB7CisgICAgICAgIHJlc3VsdCA8PD0gMTsKKyAgICAgICAgcmVzdWx0IHw9IGluJjE7CisgICAg
ICAgIGluID4+PSAxOworICAgICAgICBjbnQrKzsKKyAgICB9CisKKyAgICAvLyBEb24ndCB1c2Ug
YWxsIDMxIGJpdHMuICBPbmUgbWlsbGlvbiBhdG9tcyBpcyBwbGVudHkgYW5kIHNvbWV0aW1lcyB0
aGUKKyAgICAvLyB1cHBlciBiaXRzIGFyZSB1c2VkIGZvciBvdGhlciB0aGluZ3MuCisKKyAgICBp
ZiAoY250IDwgMjApCisgICAgICAgIHJlc3VsdCA8PD0gMjAgLSBjbnQ7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30gLy8gbFJldmVyc2UKKworLyoKKyAqIEFsbG9jYXRlQXRvbSgpIC0gQWxsb2NhdGUg
YSBuZXcgYXRvbS4gIEFzc29jaWF0ZWQgd2l0aCB0aGUgInVuZGVmaW5lZCIgdmFsdWUgb2YgLTEu
CisgKgorICovCisKK3N0YXRpYyBpbnQgQWxsb2NhdGVBdG9tKEF0b21UYWJsZSAqYXRhYmxlKQor
eworICAgIGlmIChhdGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSkKKyAgICAgICAgR3Jv
d0F0b21UYWJsZShhdGFibGUsIGF0YWJsZS0+bmV4dEZyZWUqMik7CisgICAgYXRhYmxlLT5hbWFw
W2F0YWJsZS0+bmV4dEZyZWVdID0gLTE7CisgICAgYXRhYmxlLT5hcmV2W2F0YWJsZS0+bmV4dEZy
ZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7CisgICAgYXRhYmxlLT5uZXh0RnJlZSsr
OworICAgIHJldHVybiBhdGFibGUtPm5leHRGcmVlIC0gMTsKK30gLy8gQWxsb2NhdGVBdG9tCisK
Ky8qCisgKiBTZXRBdG9tVmFsdWUoKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20gYXNzb2NpYXRlZCB3
aXRoICJoYXNoaW5kZXgiLgorICoKKyAqLworCitzdGF0aWMgdm9pZCBTZXRBdG9tVmFsdWUoQXRv
bVRhYmxlICphdGFibGUsIGludCBhdG9tbnVtYmVyLCBpbnQgaGFzaGluZGV4KQoreworICAgIGF0
YWJsZS0+YW1hcFthdG9tbnVtYmVyXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0u
aW5kZXg7CisgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0b21u
dW1iZXI7Cit9IC8vIFNldEF0b21WYWx1ZQorCisvKgorICogRmluZEhhc2hMb2MoKSAtIEZpbmQg
dGhlIGhhc2ggbG9jYXRpb24gZm9yIHRoaXMgc3RyaW5nLiAgUmV0dXJuIC0xIGl0IGhhc2ggdGFi
bGUgaXMgZnVsbC4KKyAqCisgKi8KKworc3RhdGljIGludCBGaW5kSGFzaExvYyhBdG9tVGFibGUg
KmF0YWJsZSwgY29uc3QgY2hhciAqcykKK3sKKyAgICBpbnQgaGFzaGxvYywgaGFzaGRlbHRhLCBj
b3VudDsKKyAgICBpbnQgRm91bmRFbXB0eVNsb3QgPSAwOworICAgIGludCBjb2xsaXNpb25bSEFT
SF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOworCisgICAgaGFzaGxvYyA9IEhhc2hTdHJpbmco
cykgJSBhdGFibGUtPmh0YWJsZS5zaXplOworICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRhYmxl
LCBoYXNobG9jKSkgeworICAgICAgICBpZiAoTWF0Y2goJmF0YWJsZS0+aHRhYmxlLCAmYXRhYmxl
LT5zdGFibGUsIHMsIGhhc2hsb2MpKQorICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7CisgICAg
ICAgIGNvbGxpc2lvblswXSA9IGhhc2hsb2M7CisgICAgICAgIGhhc2hkZWx0YSA9IEhhc2hTdHJp
bmcyKHMpOworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChjb3VudCA8IEhBU0hf
VEFCTEVfTUFYX0NPTExJU0lPTlMpIHsKKyAgICAgICAgICAgIGhhc2hsb2MgPSAoKGhhc2hsb2Mg
KyBoYXNoZGVsdGEpICYgMHg3ZmZmZmZmZikgJSBhdGFibGUtPmh0YWJsZS5zaXplOworICAgICAg
ICAgICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNo
bG9jKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZvdW5kRW1wdHlT
bG90ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgICAgICBjb2xsaXNpb25bY291bnRdID0gaGFzaGxvYzsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghRm91bmRFbXB0eVNsb3QpIHsKKyAgICAgICAgICAgIGlm
IChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgeworICAgICAgICAgICAgICAgIGludCBpaTsK
KyAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOworICAgICAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAorICAgICAgICAgICAgICAgICAgICAgICBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKKyAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coc3RyKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYoc3RyLCAiKioqIE5ldyBzdHJpbmcg
XCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0sIGhhc2hkZWx0
YSk7CisgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7CisgICAgICAgICAgICAg
ICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogQ29sbGlkZXMgb24gdHJ5ICVk
IGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFibGUt
Pmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBh
dGFibGUtPmh0YWJsZS5jb3VudHNbY291bnRdKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGhhc2hsb2M7Cit9IC8vIEZpbmRIYXNoTG9jCisKKy8qCisgKiBJbmNyZWFzZUhhc2hUYWJs
ZVNpemUoKQorICoKKyAqLworCitzdGF0aWMgaW50IEluY3JlYXNlSGFzaFRhYmxlU2l6ZShBdG9t
VGFibGUgKmF0YWJsZSkKK3sKKyAgICBpbnQgaWksIHN0cmxvYywgb2xkaGFzaGxvYywgdmFsdWUs
IHNpemU7CisgICAgQXRvbVRhYmxlIG9sZHRhYmxlOworICAgIGNoYXIgKnM7CisKKyAgICAvLyBT
YXZlIHRoZSBvbGQgYXRvbSB0YWJsZSBhbmQgY3JlYXRlIGEgbmV3IG9uZToKKworICAgIG9sZHRh
YmxlID0gKmF0YWJsZTsKKyAgICBzaXplID0gb2xkdGFibGUuaHRhYmxlLnNpemUqMiArIDE7Cisg
ICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgc2l6ZSkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gQWRkIGFsbCB0aGUgZXhpc3RpbmcgdmFsdWVzIHRvIHRoZSBuZXcgYXRvbSB0YWJs
ZSBwcmVzZXJ2aW5nIHRoZWlyIGF0b20gdmFsdWVzOgorCisgICAgZm9yIChpaSA9IGF0YWJsZS0+
bmV4dEZyZWU7IGlpIDwgb2xkdGFibGUubmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAgc3RybG9j
ID0gb2xkdGFibGUuYW1hcFtpaV07CisgICAgICAgIHMgPSAmb2xkdGFibGUuc3RhYmxlLnN0cmlu
Z3Nbc3RybG9jXTsKKyAgICAgICAgb2xkaGFzaGxvYyA9IEZpbmRIYXNoTG9jKCZvbGR0YWJsZSwg
cyk7CisgICAgICAgIGFzc2VydChvbGRoYXNobG9jID49IDApOworICAgICAgICB2YWx1ZSA9IG9s
ZHRhYmxlLmh0YWJsZS5lbnRyeVtvbGRoYXNobG9jXS52YWx1ZTsKKyAgICAgICAgQWRkQXRvbUZp
eGVkKGF0YWJsZSwgcywgdmFsdWUpOworICAgIH0KKyAgICBGcmVlQXRvbVRhYmxlKCZvbGR0YWJs
ZSk7CisgICAgcmV0dXJuIDE7Cit9IC8vIEluY3JlYXNlSGFzaFRhYmxlU2l6ZQorCisvKgorICog
TG9va1VwQWRkU3RyaW5nSGFzaCgpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRhYmxl
LiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKKyAqICAgICAgICBpbml0aWFsaXplIHRo
ZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIDAuICBSZXR1cm4gdGhlIGhhc2ggdGFi
bGUgaW5kZXguCisgKi8KKworc3RhdGljIGludCBMb29rVXBBZGRTdHJpbmdIYXNoKEF0b21UYWJs
ZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQoreworICAgIGludCBoYXNobG9jLCBzdHJsb2M7CisK
KyAgICB3aGlsZSgxKSB7CisgICAgICAgIGhhc2hsb2MgPSBGaW5kSGFzaExvYyhhdGFibGUsIHMp
OworICAgICAgICBpZiAoaGFzaGxvYyA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IEluY3JlYXNlSGFzaFRhYmxlU2l6ZShhdGFibGUpOworICAgIH0KKworICAgIGlmIChFbXB0eSgm
YXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7CisgICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJp
ZXMrKzsKKyAgICAgICAgc3RybG9jID0gQWRkU3RyaW5nKCZhdGFibGUtPnN0YWJsZSwgcyk7Cisg
ICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLmluZGV4ID0gc3RybG9jOworICAg
ICAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS52YWx1ZSA9IDA7CisgICAgfQorICAg
IHJldHVybiBoYXNobG9jOworfSAvLyBMb29rVXBBZGRTdHJpbmdIYXNoCisKKy8qCisgKiBMb29r
VXBBZGRTdHJpbmcoKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0
J3Mgbm90IHRoZXJlLCBhZGQgaXQgYW5kCisgKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2
YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byB0aGUgbmV4dCBhdG9tIG51bWJlci4KKyAqICAgICAg
ICBSZXR1cm4gdGhlIGF0b20gdmFsdWUgb2Ygc3RyaW5nLgorICovCisKK2ludCBMb29rVXBBZGRT
dHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCit7CisgICAgaW50IGhhc2hp
bmRleCwgYXRvbTsKKworICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRhYmxl
LCBzKTsKKyAgICBhdG9tID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZTsK
KyAgICBpZiAoYXRvbSA9PSAwKSB7CisgICAgICAgIGF0b20gPSBBbGxvY2F0ZUF0b20oYXRhYmxl
KTsKKyAgICAgICAgU2V0QXRvbVZhbHVlKGF0YWJsZSwgYXRvbSwgaGFzaGluZGV4KTsKKyAgICB9
CisgICAgcmV0dXJuIGF0b207Cit9IC8vIExvb2tVcEFkZFN0cmluZworCisvKgorICogR2V0QXRv
bVN0cmluZygpCisgKgorICovCisKK2NvbnN0ICBjaGFyICpHZXRBdG9tU3RyaW5nKEF0b21UYWJs
ZSAqYXRhYmxlLCBpbnQgYXRvbSkKK3sKKyAgICBpbnQgc29mZnNldDsKKworICAgIGlmIChhdG9t
ID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgeworICAgICAgICBzb2Zmc2V0ID0gYXRh
YmxlLT5hbWFwW2F0b21dOworICAgICAgICBpZiAoc29mZnNldCA+IDAgJiYgc29mZnNldCA8IGF0
YWJsZS0+c3RhYmxlLm5leHRGcmVlKSB7CisgICAgICAgICAgICByZXR1cm4gJmF0YWJsZS0+c3Rh
YmxlLnN0cmluZ3Nbc29mZnNldF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1
cm4gIjxpbnRlcm5hbCBlcnJvcjogYmFkIHNvZmZzZXQ+IjsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChhdG9tID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAiPG51bGwg
YXRvbT4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGF0b20gPT0gRU9GKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICI8RU9GPiI7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHJldHVybiAiPGludmFsaWQgYXRvbT4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfSAvLyBHZXRBdG9tU3RyaW5nCisKKy8qCisgKiBHZXRSZXZlcnNl
ZEF0b20oKQorICoKKyAqLworCitpbnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRhYmxl
LCBpbnQgYXRvbSkKK3sKKyAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZy
ZWUpIHsKKyAgICAgICAgcmV0dXJuIGF0YWJsZS0+YXJldlthdG9tXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9IC8vIEdldFJldmVyc2VkQXRvbQorCisvKgorICog
QWRkQXRvbSgpIC0gQWRkIGEgc3RyaW5nIHRvIHRoZSBhdG9tLCBoYXNoIGFuZCBzdHJpbmcgdGFi
bGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCisgKiAgICAgICAgIFJldHVybiBpdCdzIGF0
b20gaW5kZXguCisgKi8KKworaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNo
YXIgKnMpCit7CisgICAgaW50IGF0b207CisKKyAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0
YWJsZSwgcyk7CisgICAgcmV0dXJuIGF0b207Cit9IC8vIEFkZEF0b20KKworLyoKKyAqIEFkZEF0
b21GaXhlZCgpIC0gQWRkIGFuIGF0b20gdG8gdGhlIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYg
aXQgaXNuJ3QgYWxyZWFkeSB0aGVyZS4KKyAqICAgICAgICAgQXNzaWduIGl0IHRoZSBhdG9tIHZh
bHVlIG9mICJhdG9tIi4KKyAqLworCitzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUg
KmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pCit7CisgICAgaW50IGhhc2hpbmRleCwg
bHNpemU7CisKKyAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7
CisgICAgaWYgKGF0YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplIHx8IGF0b20gPj0gYXRh
YmxlLT5zaXplKSB7CisgICAgICAgIGxzaXplID0gYXRhYmxlLT5zaXplKjI7CisgICAgICAgIGlm
IChsc2l6ZSA8PSBhdG9tKQorICAgICAgICAgICAgbHNpemUgPSBhdG9tICsgMTsKKyAgICAgICAg
R3Jvd0F0b21UYWJsZShhdGFibGUsIGxzaXplKTsKKyAgICB9CisgICAgYXRhYmxlLT5hbWFwW2F0
b21dID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKKyAgICBhdGFibGUt
Pmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbTsKKyAgICAvL2lmIChhdG9tID49
IGF0YWJsZS0+bmV4dEZyZWUpCisgICAgLy8gICAgYXRhYmxlLT5uZXh0RnJlZSA9IGF0b20gKyAx
OworICAgIHdoaWxlIChhdG9tID49IGF0YWJsZS0+bmV4dEZyZWUpIHsKKyAgICAgICAgYXRhYmxl
LT5hcmV2W2F0YWJsZS0+bmV4dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7Cisg
ICAgICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKKyAgICB9CisgICAgcmV0dXJuIGF0b207Cit9IC8v
IEFkZEF0b21GaXhlZAorCisvKgorICogSW5pdEF0b21UYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUg
YXRvbSB0YWJsZS4KKyAqCisgKi8KKworaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFi
bGUsIGludCBodHNpemUpCit7CisgICAgaW50IGlpOworCisgICAgaHRzaXplID0gaHRzaXplIDw9
IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKKyAgICBpZiAoIUluaXRTdHJpbmdU
YWJsZSgmYXRhYmxlLT5zdGFibGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIUluaXRI
YXNoVGFibGUoJmF0YWJsZS0+aHRhYmxlLCBodHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOworICAgIGF0YWJsZS0+YW1hcCA9IE5VTEw7CisgICAg
YXRhYmxlLT5zaXplID0gMDsKKyAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgSU5JVF9BVE9NX1RB
QkxFX1NJWkUpOworICAgIGlmICghYXRhYmxlLT5hbWFwKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIEluaXRpYWxpemUgbG93ZXIgcGFydCBvZiBhdG9tIHRhYmxlIHRvICI8dW5kZWZpbmVk
PiIgYXRvbToKKworICAgIEFkZEF0b21GaXhlZChhdGFibGUsICI8dW5kZWZpbmVkPiIsIDApOwor
ICAgIGZvciAoaWkgPSAwOyBpaSA8IEZJUlNUX1VTRVJfVE9LRU5fU1k7IGlpKyspCisgICAgICAg
IGF0YWJsZS0+YW1hcFtpaV0gPSBhdGFibGUtPmFtYXBbMF07CisKKyAgICAvLyBBZGQgc2luZ2xl
IGNoYXJhY3RlciB0b2tlbnMgdG8gdGhlIGF0b20gdGFibGU6CisKKyAgICB7CisJCWNvbnN0IGNo
YXIgKnMgPSAifiElXiYqKCktKz18LC48Pi8/OzpbXXt9IyI7CisgICAgICAgIGNoYXIgdFsyXTsK
KworICAgICAgICB0WzFdID0gJ1wwJzsKKyAgICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAgICAg
ICB0WzBdID0gKnM7CisgICAgICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0LCBzWzBdKTsK
KyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBtdWx0aXBs
ZSBjaGFyYWN0ZXIgc2Nhbm5lciB0b2tlbnMgOgorCisgICAgZm9yIChpaSA9IDA7IGlpIDwgc2l6
ZW9mKHRva2Vucykvc2l6ZW9mKHRva2Vuc1swXSk7IGlpKyspCisgICAgICAgIEFkZEF0b21GaXhl
ZChhdGFibGUsIHRva2Vuc1tpaV0uc3RyLCB0b2tlbnNbaWldLnZhbCk7CisKKyAgICAvLyBBZGQg
ZXJyb3Igc3ltYm9sIGlmIHJ1bm5pbmcgaW4gZXJyb3IgbW9kZToKKworICAgIGlmIChjcHAtPm9w
dGlvbnMuRXJyb3JNb2RlKQorICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiZXJyb3IiLCBF
UlJPUl9TWSk7CisKKyAgICBBZGRBdG9tKGF0YWJsZSwgIjwqKiogZW5kIGZpeGVkIGF0b21zICoq
Kj4iKTsKKworICAgIHJldHVybiAxOworfSAvLyBJbml0QXRvbVRhYmxlCisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIERlYnVnIFByaW50aW5nIEZ1bmN0aW9uczogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoK
KyAqIFByaW50QXRvbVRhYmxlKCkKKyAqCisgKi8KKwordm9pZCBQcmludEF0b21UYWJsZShBdG9t
VGFibGUgKmF0YWJsZSkKK3sKKyAgICBpbnQgaWk7CisgICAgY2hhciBzdHJbMjAwXTsKKworICAg
IGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsKKyAgICAgICAgc3By
aW50ZihzdHIsICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJs
ZS0+YW1hcFtpaV1dKTsKKyAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9CisgICAg
c3ByaW50ZihzdHIsICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNpb25z
PSIsCisgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLnNpemUsIGF0YWJsZS0+aHRhYmxlLmVudHJp
ZXMpOworICAgIENQUERlYnVnTG9nTXNnKHN0cik7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgSEFT
SF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgeworICAgICAgICBzcHJpbnRmKHN0ciwgIiAl
ZCIsIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tpaV0pOworICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhz
dHIpOworICAgIH0KKworfSAvLyBQcmludEF0b21UYWJsZQorCisKKy8qCisgKiBHZXRTdHJpbmdP
ZkF0b20oKQorICoKKyAqLworCitjaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFi
bGUsIGludCBhdG9tKQoreworCSBjaGFyKiBjaHJfc3RyOworCSBjaHJfc3RyPSZhdGFibGUtPnN0
YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFthdG9tXV07CisJIHJldHVybiBjaHJfc3RyOworfSAv
LyBHZXRTdHJpbmdPZkF0b20KKworLyoKKyAqIEZyZWVBdG9tVGFibGUoKSAtIEZyZWUgdGhlIGF0
b20gdGFibGUgYW5kIGFzc29jaWF0ZWQgbWVtb3J5CisgKgorICovCisKK3ZvaWQgRnJlZUF0b21U
YWJsZShBdG9tVGFibGUgKmF0YWJsZSkKK3sKKyAgICBGcmVlU3RyaW5nVGFibGUoJmF0YWJsZS0+
c3RhYmxlKTsKKyAgICBGcmVlSGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSk7CisgICAgaWYgKGF0
YWJsZS0+YW1hcCkKKyAgICAgICAgZnJlZShhdGFibGUtPmFtYXApOworICAgIGlmIChhdGFibGUt
PmFyZXYpCisgICAgICAgIGZyZWUoYXRhYmxlLT5hcmV2KTsKKyAgICBhdGFibGUtPmFtYXAgPSBO
VUxMOworICAgIGF0YWJsZS0+YXJldiA9IE5VTEw7CisgICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7
CisgICAgYXRhYmxlLT5zaXplID0gMDsKK30gLy8gRnJlZUF0b21UYWJsZQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8gRW5kIG9mIGF0b20uYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCShyZXZpc2lvbiAwKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0Nv
cHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRp
b24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVz
ZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMg
TlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAg
SWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2Us
IGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgor
CitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5
b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29w
eXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNv
ZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUK
K05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJj
ZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRl
IHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3Rp
Y2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlz
Y2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdh
cmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dv
cyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhw
cmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2Vz
CitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1
ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGlu
ZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdo
aWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJl
IGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcg
UFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5H
IFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAor
Tk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4g
Q09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5W
SURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVY
RU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVD
VElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09G
VFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFD
VCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhF
UldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIGF0b20uaAor
Ly8KKworI2lmICFkZWZpbmVkKF9fQVRPTV9IKQorI2RlZmluZSBfX0FUT01fSCAxCisKK3R5cGVk
ZWYgc3RydWN0IEF0b21UYWJsZV9SZWMgQXRvbVRhYmxlOworCitleHRlcm4gQXRvbVRhYmxlICph
dGFibGU7CisKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXpl
KTsKK3ZvaWQgRnJlZUF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7CitpbnQgQWRkQXRvbShB
dG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Cit2b2lkIFByaW50QXRvbVRhYmxlKEF0
b21UYWJsZSAqYXRhYmxlKTsKK2ludCBMb29rVXBBZGRTdHJpbmcoQXRvbVRhYmxlICphdGFibGUs
IGNvbnN0IGNoYXIgKnMpOworY29uc3QgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGF0b20pOworaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwg
aW50IGF0b20pOworY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQg
YXRvbSk7CisjZW5kaWYgLy8gIWRlZmluZWQoX19BVE9NX0gpCkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorQ29weXJpZ2h0
IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCisKK05WSURJQSBDb3Jwb3JhdGlvbigiTlZJ
RElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KK2NvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAoraW5z
dGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEg
c29mdHdhcmUKK2NvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3Ug
ZG8gbm90IGFncmVlIHdpdGggdGhlc2UKK3Rlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFs
bCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQorc29mdHdhcmUuCisKK0luIGNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0
ZXJtcywgYW5kCitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBl
cnNvbmFsLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRz
IGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKKyJOVklESUEgU29mdHdhcmUi
KSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQorTlZJRElB
IFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9v
ciBiaW5hcnkKK2Zvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5W
SURJQSBTb2Z0d2FyZSwgeW91IG11c3QKK3JldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBO
VklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCit0ZXh0IGFuZCBkaXNjbGFpbWVy
cyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KK05l
aXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5W
SURJQQorQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGUKK05WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KK0V4Y2VwdCBhcyBleHByZXNzbHkg
c3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKK2V4cHJl
c3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1
dCBub3QKK2xpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2Vk
IGJ5IHlvdXIgZGVyaXZhdGl2ZQord29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhl
IE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKK2luY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGlj
ZW5zZWQgaGVyZXVuZGVyLiAKKworVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURF
RCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgV0lUSE9V
VCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5G
UklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLCBPUgorSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5B
VElPTiBXSVRIIE9USEVSCitQUk9EVUNUUy4KKworSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJF
IExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAorSU5DSURFTlRBTCwgRVhFTVBMQVJZ
LCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywg
TE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GCitVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBN
T0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKK05WSURJQSBTT0ZUV0FSRSwg
SE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAorVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwg
RVZFTiBJRgorTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLworLy8gY29tcGlsZS5oCisvLwor
CisjaWYgIWRlZmluZWQoX19DT01QSUxFX0gpCisjZGVmaW5lIF9fQ09NUElMRV9IIDEKKworaW50
IEluaXRDUFBTdHJ1Y3Qodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0IE9wdGlvbnNfUmVjeworICAg
IGNvbnN0IGNoYXIgKnByb2ZpbGVTdHJpbmc7CisgICAgaW50IEVycm9yTW9kZTsKKyAgICBpbnQg
UXVpZXQ7CisJCisgICAgLy8gRGVidWcgVGhlIENvbXBpbGVyIG9wdGlvbnM6CisgICAgaW50IER1
bXBBdG9tVGFibGU7Cit9IE9wdGlvbnM7CisKK3N0cnVjdCBDUFBTdHJ1Y3RfUmVjIHsKKyAgICAv
LyBQdWJsaWMgbWVtYmVycworICAgIFNvdXJjZUxvYyAqcExhc3RTb3VyY2VMb2M7ICAvLyBTZXQg
YXQgdGhlIHN0YXJ0IG9mIGVhY2ggc3RhdGVtZW50IGJ5IHRoZSB0cmVlIHdhbGtlcnMKKyAgICBP
cHRpb25zIG9wdGlvbnM7ICAgICAgICAgICAgLy8gQ29tcGlsZSBvcHRpb25zIGFuZCBwYXJhbWV0
ZXJzCisKKyAgICAvLyBQcml2YXRlIG1lbWJlcnMKKyAgICBTb3VyY2VMb2MgbGFzdFNvdXJjZUxv
YzsKKworICAgIC8vIFNjYW5uZXIgZGF0YToKKworICAgIFNvdXJjZUxvYyAqdG9rZW5Mb2M7ICAg
ICAgICAvLyBTb3VyY2UgbG9jYXRpb24gb2YgbW9zdCByZWNlbnQgdG9rZW4gc2VlbiBieSB0aGUg
c2Nhbm5lcgorICAgIGludCBtb3N0UmVjZW50VG9rZW47ICAgICAgICAvLyBNb3N0IHJlY2VudCB0
b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCisgICAgSW5wdXRTcmMgKmN1cnJlbnRJbnB1dDsKKyAg
ICBpbnQgcHJldmlvdXNfdG9rZW47CisgICAgaW50IHBhc3RGaXJzdFN0YXRlbWVudDsgICAgIC8v
IHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgI3ZlcnNpb24gaXMgdGhlIGZpcnN0IHN0YXRlbWVudCBz
ZWVuIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50CisgICAgCisJdm9pZCAqcEM7ICAgICAgICAgICAg
ICAgICAgIC8vIHN0b3JpbmcgdGhlIHBhcnNlQ29udGV4dCBvZiB0aGUgY29tcGlsZSBvYmplY3Qg
aW4gY3BwLiAgCisgICAgIAorICAgIC8vIFByaXZhdGUgbWVtYmVyczoKKyAgICBTb3VyY2VMb2Mg
bHRva2VuTG9jOworCWludCBpZmRlcHRoOyAgICAgICAgICAgICAgICAvL2N1cnJlbnQgI2lmLSNl
bHNlLSNlbmRpZiBuZXN0aW5nIGluIHRoZSBjcHAuYyBmaWxlIChwcmUtcHJvY2Vzc29yKSAgICAK
KyAgICBpbnQgZWxzZWRlcHRoWzY0XTsgICAgICAgICAgLy9LZWVwIGEgdHJhY2sgb2YgI2lmIGRl
cHRoLi5NYXggYWxsb3dlZCBpcyA2NC4gICAKKyAgICBpbnQgZWxzZXRyYWNrZXI7ICAgICAgICAg
ICAgLy8jaWYtI2Vsc2UgYW5kICNlbmRpZiBjb25zdHJ1Y3RzLi4uQ291bnRlci4KKyAgICBjb25z
dCBjaGFyICpFcnJNc2c7CisgICAgaW50IENvbXBpbGVFcnJvcjsgICAgICAgICAgIC8vSW5kaWNh
dGUgY29tcGlsZSBlcnJvciB3aGVuICNlcnJvciwgI2Vsc2UsI2VsaWYgbWlzbWF0Y2guCisKKyAg
ICAvLworICAgIC8vIEdsb2JhbHMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIFBhUGFyc2VT
dHJpbmdzKCkgYW5kIHl5X2lucHV0KClhbmQgCisgICAgLy8gYWxzbyBhY3Jvc3MgdGhlIGZpbGVz
LihnZW5fZ2xzbGFuZy5jcHAgYW5kIHNjYW5uZXIuYykKKyAgICAvLworICAgIGludCAgICBQYVdo
aWNoU3RyOyAgICAgICAgICAgIC8vIHdoaWNoIHN0cmluZyB3ZSdyZSBwYXJzaW5nCisgICAgaW50
KiAgIFBhU3RyTGVuOyAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFB
cmd2IHN0cmluZ3MKKyAgICBpbnQgICAgUGFBcmdjOyAgICAgICAgICAgICAgICAvLyBjb3VudCBv
ZiBzdHJpbmdzIGluIHRoZSBhcnJheQorICAgIGNoYXIqKiBQYUFyZ3Y7ICAgICAgICAgICAgICAg
IC8vIG91ciBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlICAgIAorICAgIHVuc2lnbmVkIGludCB0
b2tlbnNCZWZvcmVFT0YgOiAxOworfTsKKworI2VuZGlmIC8vICFkZWZpbmVkKF9fQ09NUElMRV9I
KQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDI5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2Fy
ZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBjcHAu
YworLy8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKworc3RhdGljIGlu
dCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKy8qIERvbid0IHVzZSBtZW1vcnkuYydz
IHJlcGxhY2VtZW50cywgYXMgd2UgY2xlYW4gdXAgcHJvcGVybHkgaGVyZSAqLworI3VuZGVmIG1h
bGxvYworI3VuZGVmIGZyZWUKKworc3RhdGljIGludCBiaW5kQXRvbSA9IDA7CitzdGF0aWMgaW50
IGNvbnN0QXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmF1bHRBdG9tID0gMDsKK3N0YXRpYyBpbnQg
ZGVmaW5lQXRvbSA9IDA7CitzdGF0aWMgaW50IGRlZmluZWRBdG9tID0gMDsKK3N0YXRpYyBpbnQg
ZWxzZUF0b20gPSAwOworc3RhdGljIGludCBlbGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGVuZGlm
QXRvbSA9IDA7CitzdGF0aWMgaW50IGlmQXRvbSA9IDA7CitzdGF0aWMgaW50IGlmZGVmQXRvbSA9
IDA7CitzdGF0aWMgaW50IGlmbmRlZkF0b20gPSAwOworc3RhdGljIGludCBpbmNsdWRlQXRvbSA9
IDA7CitzdGF0aWMgaW50IGxpbmVBdG9tID0gMDsKK3N0YXRpYyBpbnQgcHJhZ21hQXRvbSA9IDA7
CitzdGF0aWMgaW50IHRleHVuaXRBdG9tID0gMDsKK3N0YXRpYyBpbnQgdW5kZWZBdG9tID0gMDsK
K3N0YXRpYyBpbnQgZXJyb3JBdG9tID0gMDsKK3N0YXRpYyBpbnQgX19MSU5FX19BdG9tID0gMDsK
K3N0YXRpYyBpbnQgX19GSUxFX19BdG9tID0gMDsKK3N0YXRpYyBpbnQgX19WRVJTSU9OX19BdG9t
ID0gMDsKK3N0YXRpYyBpbnQgdmVyc2lvbkF0b20gPSAwOworc3RhdGljIGludCBleHRlbnNpb25B
dG9tID0gMDsKKworc3RhdGljIFNjb3BlICptYWNyb3MgPSAwOworI2RlZmluZSBNQVhfTUFDUk9f
QVJHUyAgNjQKKyNkZWZpbmUgTUFYX0lGX05FU1RJTkcgIDY0CisKK3N0YXRpYyBTb3VyY2VMb2Mg
aWZsb2M7IC8qIG91dGVybW9zdCAjaWYgKi8KKworaW50IEluaXRDUFAodm9pZCkKK3sKKyAgICBj
aGFyICAgICAgICBidWZmZXJbNjRdLCAqdDsKKyAgICBjb25zdCBjaGFyICAqZjsKKworICAgIC8v
IEFkZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKKyAgICBi
aW5kQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7CisgICAgY29uc3RBdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7CisgICAgZGVmYXVsdEF0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOworICAgIGRlZmluZUF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lIik7CisgICAgZGVmaW5lZEF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lZCIpOworICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3Ry
aW5nKGF0YWJsZSwgImVsaWYiKTsKKyAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJlbHNlIik7CisgICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVu
ZGlmIik7CisgICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7CisgICAg
aWZkZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7CisgICAgaWZuZGVm
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKKyAgICBpbmNsdWRlQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7CisgICAgbGluZUF0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAibGluZSIpOworICAgIHByYWdtYUF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAicHJhZ21hIik7CisgICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAidGV4dW5pdCIpOworICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmlu
ZyhhdGFibGUsICJ1bmRlZiIpOworCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJlcnJvciIpOworICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJf
X0xJTkVfXyIpOworICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJf
X0ZJTEVfXyIpOworCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJf
X1ZFUlNJT05fXyIpOworICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
InZlcnNpb24iKTsKKyAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
ImV4dGVuc2lvbiIpOworICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29s
KDAsIDApKTsKKyAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKKyAgICB0ID0gYnVmZmVy
ICsgc3RybGVuKGJ1ZmZlcik7CisgICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOwor
ICAgIHdoaWxlICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6
ZW9mKGJ1ZmZlcikgLSAxKQorICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKKyAgICAqdCA9
IDA7CisKKyAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKKyAgICBQcmVkZWZpbmVJ
bnRNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKKworCXJldHVybiAxOwor
fSAvLyBJbml0Q1BQCisKK2ludCBGcmVlQ1BQKHZvaWQpCit7CisgICAgaWYgKG1hY3JvcykKKyAg
ICB7CisgICAgICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOworICAgICAgICBtYWNyb3Mg
PSAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitpbnQgRmluYWxDUFAodm9pZCkKK3sK
KwlpZiAoY3BwLT5pZmRlcHRoKQorCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7
CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQoreworICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFy
Z2M7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZTsKKyAgICBNYWNyb1N5bWJvbCBtYWM7CisgICAg
U3ltYm9sICpzeW1iOworICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKKyAgICBtZW1zZXQoJm1hYywg
MCwgc2l6ZW9mKG1hYykpOworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJ
RVIpIHsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKKyAgICAgICAgcmV0
dXJuIHRva2VuOworICAgIH0KKyAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OworICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKKyAgICBpZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7CisgICAgICAg
IC8vIGdhdGhlciBhcmd1bWVudHMKKyAgICAgICAgYXJnYyA9IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJykn
KSBicmVhazsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgeworCQkJ
CUNQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRv
a2VuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJH
UykKKyAgICAgICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Cisg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7CisgICAgICAg
IGlmICh0b2tlbiAhPSAnKScpIHsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVm
aW5lIik7CisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIH0KKyAgICAgICAgbWFj
LmFyZ2MgPSBhcmdjOworICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2ws
IGFyZ2MgKiBzaXplb2YoaW50KSk7CisgICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJn
YyAqIHNpemVvZihpbnQpKTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKyAgICBtYWMuYm9keSA9IE5ld1Rv
a2VuU3RyZWFtKEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKKyAg
ICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewor
ICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFy
YWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2Ui
KTsKKyAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgfQorICAgICAgICBSZWNvcmRU
b2tlbihtYWMuYm9keSwgdG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH07CisK
KyAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7CisgICAgaWYgKHN5bWIpIHsK
KyAgICAgICAgaWYgKCFzeW1iLT5kZXRhaWxzLm1hYy51bmRlZikgeworICAgICAgICAgICAgLy8g
YWxyZWFkeSBkZWZpbmVkIC0tIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGlkZW50aWNhbAor
ICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ2MgIT0gbWFjLmFyZ2MpIGdvdG8g
ZXJyb3I7CisgICAgICAgICAgICBmb3IgKGFyZ2M9MDsgYXJnYyA8IG1hYy5hcmdjOyBhcmdjKysp
CisgICAgICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFyZ3NbYXJnY10gIT0gbWFj
LmFyZ3NbYXJnY10pCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAg
ICBSZXdpbmRUb2tlblN0cmVhbShzeW1iLT5kZXRhaWxzLm1hYy5ib2R5KTsKKyAgICAgICAgICAg
IFJld2luZFRva2VuU3RyZWFtKG1hYy5ib2R5KTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICBpbnQgb2xkX2x2YWwsIG9sZF90b2tlbjsKKyAgICAgICAgICAgICAgICBvbGRfdG9r
ZW4gPSBSZWFkVG9rZW4oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSwgeXlsdmFscHApOworICAgICAg
ICAgICAgICAgIG9sZF9sdmFsID0geXlsdmFscHAtPnNjX2ludDsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IFJlYWRUb2tlbihtYWMuYm9keSwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbiAhPSBvbGRfdG9rZW4gfHwgeXlsdmFscHAtPnNjX2ludCAhPSBvbGRfbHZhbCkgeyAK
KyAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoIk1h
Y3JvIFJlZGVmaW5lZCIpOworICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdP
ZkF0b20oYXRhYmxlLG5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJm
cm9tVFN0cigpOworICAgICAgICAgICAgICAgICAgICBEZWNMaW5lTnVtYmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAg
ICAgSW5jTGluZU51bWJlcigpOworICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IH0KKyAgICAgICAgICAgIH0gd2hpbGUgKHRva2Vu
ID4gMCk7CisgICAgICAgIH0KKyAgICAgICAgLy9GcmVlTWFjcm8oJnN5bWItPmRldGFpbHMubWFj
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkdW1teUxvYy5maWxlID0gMDsKKyAgICAgICAgZHVt
bXlMb2MubGluZSA9IDA7CisgICAgICAgIHN5bWIgPSBBZGRTeW1ib2woJmR1bW15TG9jLCBtYWNy
b3MsIG5hbWUsIE1BQ1JPX1MpOworICAgIH0KKyAgICBzeW1iLT5kZXRhaWxzLm1hYyA9IG1hYzsK
KyAgICByZXR1cm4gJ1xuJzsKK30gLy8gQ1BQZGVmaW5lCisKK3N0YXRpYyBpbnQgQ1BQdW5kZWYo
eXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBTeW1ib2wgKnN5bWI7
CisJaWYodG9rZW4gPT0gJ1xuJyl7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsKKwkg
ICAgcmV0dXJuIHRva2VuOworICAgIH0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIp
CisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3Jvcywg
eXlsdmFscHAtPnNjX2lkZW50KTsKKyAgICBpZiAoc3ltYikgeworICAgICAgICBzeW1iLT5kZXRh
aWxzLm1hYy51bmRlZiA9IDE7CisgICAgfQorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJ1xu
JykgeworICAgIGVycm9yOgorICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVmIik7Cisg
ICAgfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdW5kZWYKKworLyogQ1BQZWxzZSAtLSBz
a2lwIGZvcndhcmQgdG8gYXBwcm9wcmlhdGUgc3BvdC4gIFRoaXMgaXMgYWN0dWFsbHkgdXNlZAor
KiogdG8gc2tpcCB0byBhbmQgI2VuZGlmIGFmdGVyIHNlZWluZyBhbiAjZWxzZSwgQU5EIHRvIHNr
aXAgdG8gYSAjZWxzZSwKKyoqICNlbGlmLCBvciAjZW5kaWYgYWZ0ZXIgYSAjaWYvI2lmZGVmLyNp
Zm5kZWYvI2VsaWYgdGVzdCB3YXMgZmFsc2UKKyovCisKK3N0YXRpYyBpbnQgQ1BQZWxzZShpbnQg
bWF0Y2hlbHNlLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgYXRvbSxkZXB0aD0w
OworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CisJCisJd2hpbGUgKHRva2VuID4gMCkgeworICAgICAgICBpZiAodG9r
ZW4gIT0gJyMnKSB7CisJCSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisJCWlmICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJRklFUikKKwkJCWNvbnRp
bnVlOworICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50OworICAgICAgICBpZiAoYXRv
bSA9PSBpZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9PSBpZm5kZWZBdG9tKXsK
KyAgICAgICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAtPmVsc2V0cmFja2VyKys7
CisgICAgICAgICAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7CisJCX0K
KwkJZWxzZSBpZiAoYXRvbSA9PSBlbmRpZkF0b20pIHsKKyAgICAgICAgICAgIGlmKC0tZGVwdGg8
MCl7CisJCQkgICAgLS1jcHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIGlmIChjcHAt
PmlmZGVwdGgpIAorICAgICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLS1jcHAtPmVsc2V0cmFja2VyOworICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRoOwor
ICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoKGludCkobWF0Y2hlbHNlKSAhPSAwKSYm
IGRlcHRoPT0wKSB7CisJCQlpZiAoYXRvbSA9PSBlbHNlQXRvbSApIHsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5n
ICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfSAKKwkJCQlicmVhazsKKwkJCX0gCisJCQll
bHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7CisgICAgICAgICAgICAgICAgLyogd2UgZGVjcmVt
ZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNhdXNlIENQUGlmIHdpbGwgaW5jcmVtZW50CisgICAg
ICAgICAgICAgICAgICogaXQgYW5kIHdlIHJlYWxseSB3YW50IHRvIGxlYXZlIGl0IGFsb25lICov
CisJCQkJaWYgKGNwcC0+aWZkZXB0aCl7CisJCQkJCS0tY3BwLT5pZmRlcHRoOworCQkJCSAgICAt
LWNwcC0+ZWxzZXRyYWNrZXI7CisJCQkJfQorICAgICAgICAgICAgICAgIHJldHVybiBDUFBpZih5
eWx2YWxwcCk7CisgICAgICAgICAgICB9CisJCX0KKyAgICAgICAgZWxzZSBpZigoYXRvbT09ZWxz
ZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpKXsKKyAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICBjcHAtPkNv
bXBpbGVFcnJvcj0xOworICAgICAgICB9CisJfTsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2Vu
dW0gZXZhbF9wcmVjIHsKKyAgICBNSU5fUFJFQywKKyAgICBDT05ELCBMT0dPUiwgTE9HQU5ELCBP
UiwgWE9SLCBBTkQsIEVRVUFMLCBSRUxBVElPTiwgU0hJRlQsIEFERCwgTVVMLCBVTkFSWSwKKyAg
ICBNQVhfUFJFQworfTsKKworc3RhdGljIGludCBvcF9sb2dvcihpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgfHwgYjsgfQorc3RhdGljIGludCBvcF9sb2dhbmQoaW50IGEsIGludCBiKSB7IHJldHVy
biBhICYmIGI7IH0KK3N0YXRpYyBpbnQgb3Bfb3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIHwg
YjsgfQorc3RhdGljIGludCBvcF94b3IoaW50IGEsIGludCBiKSB7IHJldHVybiBhIF4gYjsgfQor
c3RhdGljIGludCBvcF9hbmQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICYgYjsgfQorc3RhdGlj
IGludCBvcF9lcShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorc3RhdGljIGludCBv
cF9uZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgIT0gYjsgfQorc3RhdGljIGludCBvcF9nZShp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj0gYjsgfQorc3RhdGljIGludCBvcF9sZShpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgPD0gYjsgfQorc3RhdGljIGludCBvcF9ndChpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgPiBiOyB9CitzdGF0aWMgaW50IG9wX2x0KGludCBhLCBpbnQgYikgeyByZXR1
cm4gYSA8IGI7IH0KK3N0YXRpYyBpbnQgb3Bfc2hsKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8
PCBiOyB9CitzdGF0aWMgaW50IG9wX3NocihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj4gYjsg
fQorc3RhdGljIGludCBvcF9hZGQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICsgYjsgfQorc3Rh
dGljIGludCBvcF9zdWIoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC0gYjsgfQorc3RhdGljIGlu
dCBvcF9tdWwoaW50IGEsIGludCBiKSB7IHJldHVybiBhICogYjsgfQorc3RhdGljIGludCBvcF9k
aXYoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC8gYjsgfQorc3RhdGljIGludCBvcF9tb2QoaW50
IGEsIGludCBiKSB7IHJldHVybiBhICUgYjsgfQorc3RhdGljIGludCBvcF9wb3MoaW50IGEpIHsg
cmV0dXJuIGE7IH0KK3N0YXRpYyBpbnQgb3BfbmVnKGludCBhKSB7IHJldHVybiAtYTsgfQorc3Rh
dGljIGludCBvcF9jbXBsKGludCBhKSB7IHJldHVybiB+YTsgfQorc3RhdGljIGludCBvcF9ub3Qo
aW50IGEpIHsgcmV0dXJuICFhOyB9CisKK3N0cnVjdCB7CisgICAgaW50IHRva2VuLCBwcmVjLCAo
Km9wKShpbnQsIGludCk7Cit9IGJpbm9wW10gPSB7CisgICAgeyBDUFBfT1JfT1AsIExPR09SLCBv
cF9sb2dvciB9LAorICAgIHsgQ1BQX0FORF9PUCwgTE9HQU5ELCBvcF9sb2dhbmQgfSwKKyAgICB7
ICd8JywgT1IsIG9wX29yIH0sCisgICAgeyAnXicsIFhPUiwgb3BfeG9yIH0sCisgICAgeyAnJics
IEFORCwgb3BfYW5kIH0sCisgICAgeyBDUFBfRVFfT1AsIEVRVUFMLCBvcF9lcSB9LAorICAgIHsg
Q1BQX05FX09QLCBFUVVBTCwgb3BfbmUgfSwKKyAgICB7ICc+JywgUkVMQVRJT04sIG9wX2d0IH0s
CisgICAgeyBDUFBfR0VfT1AsIFJFTEFUSU9OLCBvcF9nZSB9LAorICAgIHsgJzwnLCBSRUxBVElP
Tiwgb3BfbHQgfSwKKyAgICB7IENQUF9MRV9PUCwgUkVMQVRJT04sIG9wX2xlIH0sCisgICAgeyBD
UFBfTEVGVF9PUCwgU0hJRlQsIG9wX3NobCB9LAorICAgIHsgQ1BQX1JJR0hUX09QLCBTSElGVCwg
b3Bfc2hyIH0sCisgICAgeyAnKycsIEFERCwgb3BfYWRkIH0sCisgICAgeyAnLScsIEFERCwgb3Bf
c3ViIH0sCisgICAgeyAnKicsIE1VTCwgb3BfbXVsIH0sCisgICAgeyAnLycsIE1VTCwgb3BfZGl2
IH0sCisgICAgeyAnJScsIE1VTCwgb3BfbW9kIH0sCit9OworCitzdHJ1Y3QgeworICAgIGludCB0
b2tlbiwgKCpvcCkoaW50KTsKK30gdW5vcFtdID0geworICAgIHsgJysnLCBvcF9wb3MgfSwKKyAg
ICB7ICctJywgb3BfbmVnIH0sCisgICAgeyAnficsIG9wX2NtcGwgfSwKKyAgICB7ICchJywgb3Bf
bm90IH0sCit9OworCisjZGVmaW5lIEFMRU4oQSkgKHNpemVvZihBKS9zaXplb2YoQVswXSkpCisK
K3N0YXRpYyBpbnQgZXZhbChpbnQgdG9rZW4sIGludCBwcmVjLCBpbnQgKnJlcywgaW50ICplcnIs
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGludCAgICAgICAgIGksIHZhbDsKKyAgICBT
eW1ib2wgICAgICAqczsKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAg
ICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZpbmVkQXRvbSkgeworICAgICAgICAgICAg
aW50IG5lZWRjbG9zZSA9IDA7CisgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAodG9r
ZW4gPT0gJygnKSB7CisgICAgICAgICAgICAgICAgbmVlZGNsb3NlID0gMTsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gIT0gQ1BQX0lE
RU5USUZJRVIpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICpyZXMg
PSAocyA9IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICA/ICFzLT5kZXRhaWxzLm1hYy51bmRlZiA6IDA7CisgICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgICAgICAgICBpZiAobmVlZGNsb3NlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRva2VuICE9ICcpJykKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoTWFjcm9FeHBhbmQoeXls
dmFscHAtPnNjX2lkZW50LCB5eWx2YWxwcCkpIHsKKwkJCXRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHJldHVy
biBldmFsKHRva2VuLCBwcmVjLCByZXMsIGVyciwgeXlsdmFscHApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCX0gZWxzZSBpZiAodG9rZW4g
PT0gQ1BQX0lOVENPTlNUQU5UKSB7CisgICAgICAgICpyZXMgPSB5eWx2YWxwcC0+c2NfaW50Owor
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgfSBlbHNlIGlmICh0b2tlbiA9PSAnKCcpIHsKKyAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVDLCByZXMsIGVyciwgeXlsdmFs
cHApOworICAgICAgICBpZiAoISplcnIpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnKScp
CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IEFMRU4odW5vcCkgLSAxOyBpID49IDA7
IGktLSkgeworICAgICAgICAgICAgaWYgKHVub3BbaV0udG9rZW4gPT0gdG9rZW4pCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBVTkFSWSwgcmVzLCBl
cnIsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICpyZXMgPSB1bm9wW2ldLm9wKCpyZXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0K
KyAgICB3aGlsZSAoISplcnIpIHsKKyAgICAgICAgaWYgKHRva2VuID09ICcpJyB8fCB0b2tlbiA9
PSAnXG4nKSBicmVhazsKKyAgICAgICAgZm9yIChpID0gQUxFTihiaW5vcCkgLSAxOyBpID49IDA7
IGktLSkgeworICAgICAgICAgICAgaWYgKGJpbm9wW2ldLnRva2VuID09IHRva2VuKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMCB8fCBiaW5vcFtp
XS5wcmVjIDw9IHByZWMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFsID0gKnJlczsK
KyAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOworICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIGJpbm9wW2ldLnByZWMs
IHJlcywgZXJyLCB5eWx2YWxwcCk7CisgICAgICAgICpyZXMgPSBiaW5vcFtpXS5vcCh2YWwsICpy
ZXMpOworICAgIH0KKyAgICByZXR1cm4gdG9rZW47CitlcnJvcjoKKyAgICBDUFBFcnJvclRvSW5m
b0xvZygiaW5jb3JyZWN0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUiKTsKKyAgICAqZXJyID0gMTsK
KyAgICAqcmVzID0gMDsKKyAgICByZXR1cm4gdG9rZW47Cit9IC8vIGV2YWwKKworc3RhdGljIGlu
dCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaW50IHJl
cyA9IDAsIGVyciA9IDA7CisJY3BwLT5lbHNldHJhY2tlcisrOworICAgIGNwcC0+ZWxzZWRlcHRo
W2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKKyAgICBpZiAoIWNwcC0+aWZkZXB0aCsrKQorICAgICAg
ICBpZmxvYyA9ICpjcHAtPnRva2VuTG9jOworCWlmKGNwcC0+aWZkZXB0aCA+TUFYX0lGX05FU1RJ
TkcpeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4
Y2VlZGVkIik7CisJCXJldHVybiAwOworCX0KKwl0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVD
LCAmcmVzLCAmZXJyLCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9ICdcbicpIHsKKyAgICAg
ICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nIHRoZSBw
cmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgIHdo
aWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgIH0gCisgICAgaWYgKCFy
ZXMgJiYgIWVycikgeworICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOworICAg
IH0KKworICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQaWYKKworc3RhdGljIGludCBDUFBpZmRl
ZihpbnQgZGVmaW5lZCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICBpbnQgbmFtZSA9IHl5bHZhbHBwLT5zY19pZGVudDsKKwlpZigrK2NwcC0+aWZkZXB0aCA+TUFY
X0lGX05FU1RJTkcpeworCSAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRl
cHRoIGV4Y2VlZGVkIik7CisJCXJldHVybiAwOworCX0KKwljcHAtPmVsc2V0cmFja2VyKys7Cisg
ICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOworICAgIGlmICh0b2tlbiAh
PSBDUFBfSURFTlRJRklFUikgeworICAgICAgICAgICAgZGVmaW5lZCA/IENQUEVycm9yVG9JbmZv
TG9nKCJpZmRlZiIpOkNQUEVycm9yVG9JbmZvTG9nKCJpZm5kZWYiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBTeW1ib2wgKnMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKKyAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgeworICAgICAgICAgICAgQ1BQV2Fybmlu
Z1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZmRlZiBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICB3aGlsZSAo
dG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCgocyAmJiAhcy0+ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCisg
ICAgICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOworICAgIH0KKyAgICByZXR1
cm4gdG9rZW47Cit9IC8vIENQUGlmZGVmCisKK3N0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBlcHAg
KiB5eWx2YWxwcCkgCit7CisgICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwlpZih0b2tlbj09J1xuJyl7CisJCURlY0xp
bmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAgICAg
IEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0dXJuIHRva2VuOworCX0KKwllbHNlIGlmICh0b2tlbiA9
PSBDUFBfSU5UQ09OU1RBTlQpIHsKKwkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSk7CisJCVNldExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgCisJCWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKKyAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOworCQkJ
U2V0U3RyaW5nTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOworICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCQkJ
aWYodG9rZW4hPSdcbicpCisJCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisgICAgICAg
IH0KKwkJZWxzZSBpZiAodG9rZW4gPT0gJ1xuJyl7CisJCQlyZXR1cm4gdG9rZW47CisJCX0KKwkJ
ZWxzZXsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOworCQl9CisJfQor
CWVsc2V7CisgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7CisJfQorICAgIHJl
dHVybiB0b2tlbjsKK30KKworc3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxw
cCkgeworCisJaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworCQorICAgIHdoaWxl
ICh0b2tlbiAhPSAnXG4nKSB7CisJCWlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0
b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpeworICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAt
PnN5bWJvbF9uYW1lKTsKKwkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9r
ZW4gPT0gQ1BQX1NUUkNPTlNUQU5UKXsKKwkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFi
bGUseXlsdmFscHAtPnNjX2lkZW50KSk7CisJCX1lbHNlIHsKKwkJICAgIFN0b3JlU3RyKEdldFN0
cmluZ09mQXRvbShhdGFibGUsdG9rZW4pKTsKKwkJfQorCQl0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJfQorCURlY0xpbmVOdW1i
ZXIoKTsKKwkvL3N0b3JlIHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9uIGxv
Zy4uc2V0IHRoZSBDb21waWxlIEVycm9yIGZsYWchISEhCisJbWVzc2FnZT1HZXRTdHJmcm9tVFN0
cigpOworICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICBSZXNldFRTdHJpbmcoKTsK
KyAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgIEluY0xpbmVOdW1iZXIoKTsKKyAgICByZXR1
cm4gJ1xuJzsKK30vL0NQUGVycm9yCisKK3N0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQoreworCWNoYXIgU3JjU3RyTmFtZVsyXTsKKwljaGFyKiogYWxsVG9rZW5zOwor
CWludCB0b2tlbkNvdW50ID0gMDsKKwlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOworCWNvbnN0IGNo
YXIqIFNyY1N0cjsKKwlpbnQgaTsKKworCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJCisJaWYgKHRva2VuPT0nXG4nKSB7
CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFnbWEi
KTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCSAgICByZXR1cm4gdG9rZW47CisJfQorCQor
CWFsbFRva2VucyA9IChjaGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50
KTsJCisKKwl3aGlsZSAodG9rZW4gIT0gJ1xuJykgeworCQlpZiAodG9rZW5Db3VudCA+PSBtYXhU
b2tlbkNvdW50KSB7CisJCQltYXhUb2tlbkNvdW50ICo9IDI7CisJCQlhbGxUb2tlbnMgPSAoY2hh
cioqKXJlYWxsb2MoKGNoYXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNv
dW50KTsKKwkJfQorCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgQ1BQX0lERU5USUZJRVI6CisJ
CQlTcmNTdHIgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKKwkJ
CWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAx
KTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKKwkJCWJyZWFr
OworCQljYXNlIENQUF9JTlRDT05TVEFOVDoKKwkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xf
bmFtZTsKKwkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNy
Y1N0cikgKyAxKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsK
KwkJCWJyZWFrOworCQljYXNlIENQUF9GTE9BVENPTlNUQU5UOgorCQkJU3JjU3RyID0geXlsdmFs
cHAtPnN5bWJvbF9uYW1lOworCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxv
YyhzdHJsZW4oU3JjU3RyKSArIDEpOworCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50Kytd
LCBTcmNTdHIpOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisgICAgICAgICAgICAvLyBFT0YKKyAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0
aCBhIG5ld2xpbmUiKTsJCQkKKwkJCXJldHVybiB0b2tlbjsKKwkJZGVmYXVsdDoKKwkJCVNyY1N0
ck5hbWVbMF0gPSB0b2tlbjsKKwkJCVNyY1N0ck5hbWVbMV0gPSAnXDAnOworCQkJYWxsVG9rZW5z
W3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYygyKTsKKwkJCXN0cmNweShhbGxUb2tlbnNbdG9r
ZW5Db3VudCsrXSwgU3JjU3RyTmFtZSk7CisJCX0KKwkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworCX0KKworCWNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB0b2tlbiwgeXlsdmFscHApOworCUhh
bmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRva2VucywgdG9rZW5Db3VudCk7CisJdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
CQorCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50OyArK2kpIHsKKwkJZnJlZSAoYWxsVG9rZW5z
W2ldKTsKKwl9CisJZnJlZSAoYWxsVG9rZW5zKTsJCisKKwlyZXR1cm4gdG9rZW47ICAgIAorfSAv
LyBDUFBwcmFnbWEKKworI2RlZmluZSBFU1NMX1ZFUlNJT05fTlVNQkVSIDEwMAorI2RlZmluZSBF
U1NMX1ZFUlNJT05fU1RSSU5HICIxMDAiCisKK3N0YXRpYyBpbnQgQ1BQdmVyc2lvbih5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKK3sKKworICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisKKyAgICBpZiAoY3BwLT5wYXN0Rmly
c3RTdGF0ZW1lbnQgPT0gMSkKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjdmVyc2lvbiBtdXN0
IG9jY3VyIGJlZm9yZSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoZSBwcm9ncmFtIik7CisKKyAg
ICBpZih0b2tlbj09J1xuJyl7CisJCURlY0xpbmVOdW1iZXIoKTsKKyAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIiN2ZXJzaW9uIik7CisgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKKwkJcmV0dXJu
IHRva2VuOworCX0KKyAgICBpZiAodG9rZW4gIT0gQ1BQX0lOVENPTlNUQU5UKQorICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsKKwkKKyAgICB5eWx2YWxwcC0+c2NfaW50PWF0
b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKwkvL1NldFZlcnNpb25OdW1iZXIoeXlsdmFscHAt
PnNjX2ludCk7CisgICAgCisgICAgaWYgKHl5bHZhbHBwLT5zY19pbnQgIT0gRVNTTF9WRVJTSU9O
X05VTUJFUikKKyAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJWZXJzaW9uIG51bWJlciBub3Qgc3Vw
cG9ydGVkIGJ5IEVTU0wiKTsKKworICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAKKwlpZiAodG9rZW4gPT0gJ1xuJyl7
CisJCXJldHVybiB0b2tlbjsKKwl9CisJZWxzZXsKKyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiN2ZXJzaW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQdmVyc2lvbgorCitz
dGF0aWMgaW50IENQUGV4dGVuc2lvbih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKworICAgIGlu
dCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CisgICAgY2hhciBleHRlbnNpb25OYW1lWzgwXTsKKworICAgIGlmKHRva2VuPT0nXG4n
KXsKKwkJRGVjTGluZU51bWJlcigpOworICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lv
biBuYW1lIG5vdCBzcGVjaWZpZWQiKTsKKyAgICAgICAgSW5jTGluZU51bWJlcigpOworCQlyZXR1
cm4gdG9rZW47CisJfQorCisgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQorICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOworICAgIAorICAgIHN0cmNweShleHRl
bnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisJ
ICAgIAorICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gIT0gJzonKSB7CisgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiJzonIG1pc3NpbmcgYWZ0ZXIgZXh0ZW5zaW9uIG5hbWUiKTsKKyAgICAgICAgcmV0
dXJuIHRva2VuOworICAgIH0KKyAgICAKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgaWYgKHRva2VuICE9IENQUF9J
REVOVElGSUVSKSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygiYmVoYXZpb3IgZm9yIGV4dGVu
c2lvbiBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAg
ICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7CisKKyAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisJaWYgKHRva2VuID09ICdc
bicpeworCQlyZXR1cm4gdG9rZW47CisJfQorCWVsc2V7CisgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCIjZXh0ZW5zaW9uIik7CisJfQorICAgIHJldHVybiB0b2tlbjsKK30gLy8gQ1BQZXh0ZW5z
aW9uCisKK2ludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisgICAgaW50IGlzVmVyc2lvbiA9IDA7CisK
KyAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKKyAgICAgICAgaWYgKHl5bHZhbHBw
LT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7CisgICAgICAgICAgICAgdG9rZW4gPSBDUFBkZWZp
bmUoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBl
bHNlQXRvbSkgeworCQkJIGlmKENoa0NvcnJlY3RFbHNlTmVzdGluZygpKXsKKyAgICAgICAgICAg
ICAgICAgaWYgKCFjcHAtPmlmZGVwdGggKXsKKyAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjZWxzZSBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAgICAgICAgY3BwLT5D
b21waWxlRXJyb3I9MTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisgICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CisgICAgICAgICAgICAgICAg
ICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2Vs
c2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgICAgICB9CisJCQkgICAgIHRva2VuID0gQ1BQZWxzZSgw
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7CisgICAgICAgICAgICAgICAgIGNw
cC0+aWZkZXB0aD0wOworICAgICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9
IDE7CisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgIH0KKwkJfSBlbHNl
IGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxpZkF0b20pIHsKKyAgICAgICAgICAgIGlmICgh
Y3BwLT5pZmRlcHRoKXsKKyAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbGlm
IG1pc21hdGNoIik7CisgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7CisgICAg
ICAgICAgICB9IAorICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNh
cmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCisgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
IAorICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworCQkgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZW5kaWZBdG9tKSB7CisJCSAgICAgLS1jcHAtPmVsc2V0
cmFja2VyOworICAgICAgICAgICAgIGlmICghY3BwLT5pZmRlcHRoKXsKKyAgICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbmRpZiBtaXNtYXRjaCIpOworICAgICAgICAgICAgICAg
ICBjcHAtPkNvbXBpbGVFcnJvcj0xOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNl
CisJCQkgIAkgLS1jcHAtPmlmZGVwdGg7CisJICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lk
ZW50ID09IGlmQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQaWYoeXlsdmFscHApOwor
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZmRlZkF0b20pIHsKKyAg
ICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEsIHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNl
IGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZuZGVmQXRvbSkgeworICAgICAgICAgICAgIHRv
a2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBw
LT5zY19pZGVudCA9PSBsaW5lQXRvbSkgeworICAgICAgICAgICAgIHRva2VuID0gQ1BQbGluZSh5
eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHByYWdt
YUF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQUHByYWdtYSh5eWx2YWxwcCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHVuZGVmQXRvbSkgeworICAgICAg
ICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKHl5
bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20pIHsKKyAgICAgICAgICAgICB0b2tlbiA9IENQ
UGVycm9yKHl5bHZhbHBwKTsKKyAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQg
PT0gdmVyc2lvbkF0b20pIHsKKyAgICAgICAgICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxw
cCk7CisgICAgICAgICAgICBpc1ZlcnNpb24gPSAxOworICAgICAgICB9IGVsc2UgaWYgKHl5bHZh
bHBwLT5zY19pZGVudCA9PSBleHRlbnNpb25BdG9tKSB7CisgICAgICAgICAgICB0b2tlbiA9IENQ
UGV4dGVuc2lvbih5eWx2YWxwcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdG9y
ZVN0cigiSW52YWxpZCBEaXJlY3RpdmUiKTsKKyAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmlu
Z09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBtZXNzYWdl
PUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7
CisgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGls
ZSAodG9rZW4gIT0gJ1xuJyAmJiB0b2tlbiAhPSAwICYmIHRva2VuICE9IEVPRikgeworCQl0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CisJfQorICAgICAgICAKKyAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisKKyAgICBy
ZXR1cm4gdG9rZW47Cit9IC8vIHJlYWRDUFBsaW5lCisKK3ZvaWQgRnJlZU1hY3JvKE1hY3JvU3lt
Ym9sICpzKSB7CisgICAgRGVsZXRlVG9rZW5TdHJlYW0ocy0+Ym9keSk7Cit9CisKK3ZvaWQgUHJl
ZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKSB7CisgICAgU291cmNl
TG9jIGxvY2F0aW9uID0gezB9OworICAgIFN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBNYWNy
b1N5bWJvbCBtYWNybyA9IHswfTsKKyAgICB5eXN0eXBlcHAgdmFsID0gezB9OworICAgIGludCBh
dG9tID0gMDsKKworICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3Mt
PnBvb2wpOworICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKKyAgICBzcHJpbnRmKHZhbC5zeW1ib2xf
bmFtZSwgIiVkIiwgdmFsdWUpOworICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRD
T05TVEFOVCwgJnZhbCk7CisgICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUp
OworICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9f
Uyk7CisgICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOworfQorCitzdGF0aWMgaW50IGVv
Zl9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9
CitzdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgeyB9CisKK3N0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7CisgICAgSW5wdXRTcmMgKmlu
ID0gbWFsbG9jKHNpemVvZihJbnB1dFNyYykpOworICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElu
cHV0U3JjKSk7CisgICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKKyAgICBpbi0+Z2V0Y2ggPSBlb2Zf
c2NhbjsKKyAgICBpbi0+dW5nZXRjaCA9IG5vb3A7CisgICAgaW4tPnByZXYgPSBjcHAtPmN1cnJl
bnRJbnB1dDsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOworfQorCitzdGF0aWMgdm9pZCBQ
b3BFb2ZTcmMoKSB7CisgICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2Fu
KSB7CisgICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OworICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5wcmV2OworICAgICAgICBmcmVlKGluKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbjsKKyAgICBUb2tlblN0cmVhbSAq
bjsKKyAgICBSZXdpbmRUb2tlblN0cmVhbShhKTsKKyAgICBkbyB7CisgICAgICAgIHRva2VuID0g
UmVhZFRva2VuKGEsIHl5bHZhbHBwKTsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElG
SUVSICYmIExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9IHdoaWxlICh0b2tlbiA+IDApOworICAgIGlmICh0b2tlbiA8PSAw
KSByZXR1cm4gYTsKKyAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOworICAg
IFB1c2hFb2ZTcmMoKTsKKyAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOworICAgIHdo
aWxlICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApKSA+IDApIHsKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYm
IE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7CisgICAg
fQorICAgIFBvcEVvZlNyYygpOworICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOworICAgIHJldHVy
biBuOworfSAvLyBQcmVzY2FuTWFjcm9BcmcKKwordHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNy
YyB7CisgICAgSW5wdXRTcmMgICAgYmFzZTsKKyAgICBNYWNyb1N5bWJvbCAqbWFjOworICAgIFRv
a2VuU3RyZWFtICoqYXJnczsKK30gTWFjcm9JbnB1dFNyYzsKKworLyogbWFjcm9fc2NhbiAtLS0K
KyoqIHJldHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcg
bWFjcm8gYXJncyAKKyovCitzdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7CisgICAgaW50IGk7CisgICAgaW50IHRva2VuID0gUmVh
ZFRva2VuKGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKKyAgICBpZiAodG9rZW4gPT0gQ1BQX0lE
RU5USUZJRVIpIHsKKyAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0p
CisgICAgICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQp
IGJyZWFrOworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICBSZWFkRnJvbVRva2Vu
U3RyZWFtKGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOworICAgICAgICAgICAg
cmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwor
ICAgIGluLT5tYWMtPmJ1c3kgPSAwOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2Uu
cHJldjsKKyAgICBpZiAoaW4tPmFyZ3MpIHsKKyAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2Mt
MTsgaT49MDsgaS0tKQorICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0p
OworICAgICAgICBmcmVlKGluLT5hcmdzKTsKKyAgICB9CisgICAgZnJlZShpbik7CisgICAgcmV0
dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Cit9IC8vIG1hY3JvX3NjYW4KKworLyogTWFjcm9FeHBhbmQKKyoqIGNoZWNrIGFuIGlkZW50aWZp
ZXIgKGF0b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgor
KiogSWYgaXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJv
cHJpYXRlIGV4cGFuc2lvbgorKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFM
U0UuCisqLworCitpbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQoreworICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3Ms
IGF0b20pOworICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOworICAgIGludCBpLGosIHRva2Vu
LCBkZXB0aD0wOworICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJaWYgKGF0b20gPT0gX19MSU5F
X19BdG9tKSB7CisgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Cisg
ICAgICAgIHNwcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIlZCIseXlsdmFscHAtPnNjX2lu
dCk7CisgICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKKyAg
ICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOworICAgICAgICBzcHJp
bnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQiLHl5bHZhbHBwLT5zY19pbnQpOworICAgICAg
ICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisJaWYgKGF0b20gPT0gX19WRVJTSU9OX19BdG9tKSB7CisgICAgICAgIHN0cmNw
eSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsRVNTTF9WRVJTSU9OX1NUUklORyk7CisgICAgICAgIHl5
bHZhbHBwLT5zY19pbnQgPSBhdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgIFVu
Z2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH0KKyAgICBpZiAoIXN5bSB8fCBzeW0tPmRldGFpbHMubWFjLnVuZGVmKSByZXR1cm4gMDsK
KyAgICBpZiAoc3ltLT5kZXRhaWxzLm1hYy5idXN5KSByZXR1cm4gMDsgICAgICAgIC8vIG5vIHJl
Y3Vyc2l2ZSBleHBhbnNpb25zCisgICAgaW4gPSBtYWxsb2Moc2l6ZW9mKCppbikpOworICAgIG1l
bXNldChpbiwgMCwgc2l6ZW9mKCppbikpOworICAgIGluLT5iYXNlLnNjYW4gPSAodm9pZCAqKW1h
Y3JvX3NjYW47CisgICAgaW4tPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOwor
ICAgIGluLT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICBpbi0+bWFj
ID0gJnN5bS0+ZGV0YWlscy5tYWM7CisgICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYXJncykgewor
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisJCWlmICh0b2tlbiAhPSAnKCcpIHsKKyAgICAgICAgICAgIFVuZ2V0VG9r
ZW4odG9rZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IGF0
b207CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpbi0+YXJncyA9
IG1hbGxvYyhpbi0+bWFjLT5hcmdjICogc2l6ZW9mKFRva2VuU3RyZWFtICopKTsKKyAgICAgICAg
Zm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKQorICAgICAgICAgICAgaW4tPmFyZ3NbaV0g
PSBOZXdUb2tlblN0cmVhbSgibWFjcm8gYXJnIiwgMCk7CisJCWk9MDtqPTA7CisgICAgICAgIGRv
eworICAgICAgICAgICAgZGVwdGggPSAwOworCQkJd2hpbGUoMSkgeworICAgICAgICAgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBTdG9yZVN0cigiRU9GIGluIE1hY3JvICIpOworICAgICAgICAgICAgICAgICAgICBTdG9y
ZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOworICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2cobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9PTApICYmICh0b2tlbiE9JyknKSkgYnJlYWs7CisgICAg
ICAgICAgICAgICAgaWYgKGRlcHRoID09IDAgJiYgKHRva2VuID09ICcsJyB8fCB0b2tlbiA9PSAn
KScpKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsrOwor
ICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIGRlcHRoLS07CisgICAgICAgICAgICAg
ICAgUmVjb3JkVG9rZW4oaW4tPmFyZ3NbaV0sIHRva2VuLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgaj0xOworCQkJfQorICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgeworICAgICAg
ICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0xKSAmJmo9PTApCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkrKzsKKwkJfXdoaWxlKGkgPCBpbi0+bWFjLT5h
cmdjKTsKKworICAgICAgICBpZiAoaSA8IGluLT5tYWMtPmFyZ2MpIHsKKyAgICAgICAgICAgIFN0
b3JlU3RyKCJUb28gZmV3IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBTdG9yZVN0cihH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3Ry
ZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKKyAgICAg
ICAgICAgIFJlc2V0VFN0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9ICcpJykg
eworICAgICAgICAgICAgZGVwdGg9MDsKKwkJCXdoaWxlICh0b2tlbiA+PSAwICYmIChkZXB0aCA+
IDAgfHwgdG9rZW4gIT0gJyknKSkgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScp
IGRlcHRoLS07CisgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tl
biA9PSAnKCcpIGRlcHRoKys7CisgICAgICAgICAgICB9CisJCQkKKyAgICAgICAgICAgIGlmICh0
b2tlbiA8PSAwKSB7CisgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsK
KyAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsK
KyAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7CisgICAgICAgICAgICAg
ICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIFJlc2V0VFN0cmlu
ZygpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgU3RvcmVTdHIoIlRvbyBtYW55IGFyZ3MgaW4gTWFjcm8gIik7CisgICAgICAgICAgICBTdG9y
ZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKKyAgICAgICAgICAgIG1lc3NhZ2U9
R2V0U3RyZnJvbVRTdHIoKTsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsK
KyAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOworCQl9CisJCWZvciAoaT0wOyBpPGluLT5tYWMt
PmFyZ2M7IGkrKykgeworICAgICAgICAgICAgaW4tPmFyZ3NbaV0gPSBQcmVzY2FuTWFjcm9Bcmco
aW4tPmFyZ3NbaV0sIHl5bHZhbHBwKTsKKyAgICAgICAgfQorICAgIH0KKyNpZiAwCisgICAgcHJp
bnRmKCIgIDwlczolZD5mb3VuZCBtYWNybyAlc1xuIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGxv
Yy5maWxlKSwKKyAgICAgICAgICAgbG9jLmxpbmUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdG9t
KSk7CisgICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7CisgICAgICAgIHByaW50
ZigiXHRhcmcgJXMgPSAnIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGluLT5tYWMtPmFyZ3NbaV0p
KTsKKyAgICAgICAgRHVtcFRva2VuU3RyZWFtKHN0ZG91dCwgaW4tPmFyZ3NbaV0pOworICAgICAg
ICBwcmludGYoIidcbiIpOworICAgIH0KKyNlbmRpZgorCS8qcmV0YWluIHRoZSBpbnB1dCBzb3Vy
Y2UqLworICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKKyAgICBzeW0tPmRl
dGFpbHMubWFjLmJ1c3kgPSAxOworICAgIFJld2luZFRva2VuU3RyZWFtKHN5bS0+ZGV0YWlscy5t
YWMuYm9keSk7CisgICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0dXJu
IDE7Cit9IC8vIE1hY3JvRXhwYW5kCisKK2ludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCkK
K3sKKyAgICBpZihjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT09MCl7CisJICBjcHAt
PmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT0xOworICAgICAgcmV0dXJuIDE7ICAgICAgICAg
IAorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3BwLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Cit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAor
CitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BS
T0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKy8vCisvLyBjcHAuaAorLy8KKworI2lmICFkZWZpbmVkKF9fQ1BQX0gp
CisjZGVmaW5lIF9fQ1BQX0ggMQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Bh
cnNlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKKworaW50
IEluaXRDUFAodm9pZCk7CitpbnQgRmluYWxDUFAodm9pZCk7CitpbnQgIHJlYWRDUFBsaW5lKHl5
c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBw
ICogeXlsdmFscHApOworaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKTsKKwordHlwZWRl
ZiBzdHJ1Y3QgTWFjcm9TeW1ib2wgeworICAgIGludCBhcmdjOworICAgIGludCAqYXJnczsKKyAg
ICBUb2tlblN0cmVhbSAqYm9keTsKKyAgICB1bnNpZ25lZCBidXN5OjE7CisgICAgdW5zaWduZWQg
dW5kZWY6MTsKK30gTWFjcm9TeW1ib2w7CisKK3ZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICop
Owordm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwor
Cit2b2lkICBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpOyAgICAgIC8vIFByaW50cyBp
bmZvcm1hdGlvbiBpbnRvIGRlYnVnIGxvZwordm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0IGNo
YXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG9nCit2b2lk
ICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJuaW5n
IG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKK3ZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFyKios
IGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgordm9pZCAg
UmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2FnZSBh
cyBUU3RyaW5nLgordm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAgICAv
LyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgordm9pZCAgU3RvcmVT
dHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBpbiBQ
YXJzZSBDb250ZXh0Lgordm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAgICAg
ICAvLyBTZXQgbGluZSBudW1iZXIuICAKK3ZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAgICAg
ICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAoraW50ICAgR2V0TGluZU51bWJl
cih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJl
ci4gCitpbnQgICBHZXRTdHJpbmdOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgIC8vIEdldCB0
aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKK2NvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpOyAgICAgICAgICAgLy8gQ29udmVydCBUU3RyaW5nIHRvIFN0cmluZy4gIAordm9pZCAgdXBk
YXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVo
YXZpb3IpOworaW50ICAgRnJlZUNQUCh2b2lkKTsKKworI2VuZGlmIC8vICEoZGVmaW5lZChfX0NQ
UF9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5j
CShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1
Y3QuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0
aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdh
cmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9y
IHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2Nl
cHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0
ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUg
dGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVz
ZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGlj
ZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBz
b2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2Rp
ZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQg
dGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0City
ZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhl
IGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRp
b25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtz
LCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklE
SUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJv
bSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8g
b3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVk
IGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRl
bnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtz
IG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitp
bmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBO
VklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lU
SE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT
UyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZ
LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJB
VElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMu
CisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJ
TkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQor
T1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklC
VVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVS
IFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwg
U1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLy8KKy8vIGNwcHN0cnVjdC5jCisvLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGds
b2JhbHMuaCIKKworQ1BQU3RydWN0ICAqY3BwICAgICAgPSBOVUxMOworc3RhdGljIGludCAgcmVm
Q291bnQgPSAwOworCitpbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKTsKK2ludCBSZXNldFByZXBy
b2Nlc3Nvcih2b2lkKTsKK2ludCBGcmVlQ1BQU3RydWN0KHZvaWQpOworaW50IEZpbmFsaXplUHJl
cHJvY2Vzc29yKHZvaWQpOworCisvKgorICogSW5pdENQUFN0cnVjdCgpIC0gSW5pdGlsYWl6ZSB0
aGUgQ1BQIHN0cnVjdHVyZS4KKyAqCisgKi8KKworaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCkKK3sK
KyAgICBpbnQgbGVuOworICAgIGNoYXIgKnA7CisKKyAgICBjcHAgPSAoQ1BQU3RydWN0ICopIG1h
bGxvYyhzaXplb2YoQ1BQU3RydWN0KSk7CisgICAgaWYgKGNwcCA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJlZkNvdW50Kys7CisKKyAgICAvLyBJbml0aWFsaXplIHB1YmxpYyBt
ZW1iZXJzOgorICAgIGNwcC0+cExhc3RTb3VyY2VMb2MgPSAmY3BwLT5sYXN0U291cmNlTG9jOwor
ICAgIAorCXAgPSAoY2hhciAqKSAmY3BwLT5vcHRpb25zOworICAgIGxlbiA9IHNpemVvZihjcHAt
Pm9wdGlvbnMpOworICAgIHdoaWxlICgtLWxlbiA+PSAwKQorICAgICAgICBwW2xlbl0gPSAwOwor
ICAgICAKKyAgICBSZXNldFByZXByb2Nlc3NvcigpOworICAgIHJldHVybiAxOworfSAvLyBJbml0
Q1BQU3RydWN0CisKK2ludCBSZXNldFByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIC8vIEluaXRp
YWxpemUgcHJpdmF0ZSBtZW1iZXJzOgorCisgICAgY3BwLT5sYXN0U291cmNlTG9jLmZpbGUgPSAw
OworICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5saW5lID0gMDsKKwljcHAtPnBDPTA7CisgICAgY3Bw
LT5Db21waWxlRXJyb3I9MDsgCisJY3BwLT5pZmRlcHRoPTA7CisgICAgZm9yKGNwcC0+ZWxzZXRy
YWNrZXI9MDsgY3BwLT5lbHNldHJhY2tlcjw2NDsgY3BwLT5lbHNldHJhY2tlcisrKQorCQljcHAt
PmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXT0wOyAKKwljcHAtPmVsc2V0cmFja2VyPTA7Cisg
ICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAwOworICAgIHJldHVybiAxOworfQorCisvL0ludGlh
bGl6aW5nIHRoZSBQcmVwcm9jZXNzb3IuCisKK2ludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpCit7
CisgICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKKyAgICAgICAgIyAgaWZkZWYgQ1BQX1NUVUZG
CisgICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7CisgICAgICAgICAgICBJbml0Q1BQU3RydWN0
KCk7CisgICAgICAgICAgICBjcHAtPm9wdGlvbnMuUXVpZXQgPSAxOworICAgICAgICAgICAgY3Bw
LT5vcHRpb25zLnByb2ZpbGVTdHJpbmcgPSAiZ2VuZXJpYyI7CisgICAgICAgICAgICBpZiAoIUlu
aXRBdG9tVGFibGUoYXRhYmxlLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgICAgIGlmICghSW5pdFNjYW5uZXIoY3BwKSkKKwkgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAjICBlbmRpZgorICByZXR1cm4gMDsgCit9CisKKy8vRnJlZUNQUFN0cnVjdCgpIC0gRnJl
ZSB0aGUgQ1BQIHN0cnVjdHVyZS4KKworaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCkKK3sKKyAgICBp
ZiAocmVmQ291bnQpCisgICAgeworICAgICAgIGZyZWUoY3BwKTsKKyAgICAgICByZWZDb3VudC0t
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMTsKK30KKworLy9GaW5hbGl6aW5nIHRoZSBQcmVw
cm9jZXNzb3IuCisKK2ludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKQoreworICAgIyAgZGVm
aW5lIENQUF9TVFVGRiB0cnVlCisgICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgorICAgICAgICAg
ICAgRnJlZUF0b21UYWJsZShhdGFibGUpOworICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgpOwor
ICAgICAgICAgICAgRnJlZVNjYW5uZXIoKTsKKyAgICAgICAjICBlbmRpZgorICByZXR1cm4gMDsg
Cit9CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBjcHBzdHJ1Y3QuYyAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1v
cnkuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCitDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQor
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAor
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQor
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RT
LgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
K09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8vCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxzdGRpbnQu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgor
CisvLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBpZiBjYWxsZWQgd2l0aCAwIGFy
Z3VtZW50cworI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEwMjQpCisjZGVmaW5lIEFMSUdO
ICAgICAgICAgICA4CisKKy8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgYHJlYWwnIG1hbGxvYyBhbmQg
ZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKKyN1bmRlZiBtYWxsb2MKKyN1bmRlZiBmcmVlCisK
K3N0cnVjdCBjaHVuayB7CisgICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKK307CisKK3N0
cnVjdCBjbGVhbnVwIHsKKyAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpuZXh0OworICAgIHZvaWQg
ICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICph
cmc7Cit9OworCitzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgeworICAgIHN0cnVjdCBjaHVuayAgICAg
ICAgKm5leHQ7CisgICAgdWludHB0cl90ICAgICAgICAgICBmcmVlLCBlbmQ7CisgICAgc2l6ZV90
ICAgICAgICAgICAgICBjaHVua3NpemU7CisgICAgdWludHB0cl90ICAgICAgICAgICBhbGlnbm1h
c2s7CisgICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKK307CisKK01lbW9yeVBvb2wg
Km1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbikKK3sK
KyAgICBNZW1vcnlQb29sICAqcG9vbDsKKworICAgIGlmIChhbGlnbiA9PSAwKSBhbGlnbiA9IEFM
SUdOOworICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXplID0gQ0hVTktTSVpFOworICAg
IGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSA8IHNp
emVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7CisgICAgaWYgKGNodW5rc2l6ZSAmIChhbGlnbi0x
KSkgcmV0dXJuIDA7CisgICAgaWYgKCEocG9vbCA9IG1hbGxvYyhjaHVua3NpemUpKSkgcmV0dXJu
IDA7CisgICAgcG9vbC0+bmV4dCA9IDA7CisgICAgcG9vbC0+Y2h1bmtzaXplID0gY2h1bmtzaXpl
OworICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFsaWduKS0xOyAgCisgICAgcG9v
bC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29sLT5hbGlnbm1hc2spICYgfnBv
b2wtPmFsaWdubWFzazsKKyAgICBwb29sLT5lbmQgPSAodWludHB0cl90KXBvb2wgKyBjaHVua3Np
emU7CisgICAgcG9vbC0+Y2xlYW51cCA9IDA7CisgICAgcmV0dXJuIHBvb2w7Cit9CisKK3ZvaWQg
bWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCit7CisgICAgc3RydWN0IGNsZWFudXAgICAg
ICAqY2xlYW51cDsKKyAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpwLCAqbmV4dDsKKworICAgIGZv
ciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNsZWFudXAgPSBjbGVhbnVwLT5u
ZXh0KSB7CisgICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFyZyk7CisgICAgfQorICAgIGZv
ciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4dCkgeworICAgICAgICBuZXh0
ID0gcC0+bmV4dDsKKyAgICAgICAgZnJlZShwKTsKKyAgICB9Cit9CisKK3ZvaWQgKm1lbV9BbGxv
YyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBzdHJ1Y3QgY2h1bmsgKmNo
OworICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOworICAgIHNpemUgPSAoc2l6ZSAr
IHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOworICAgIGlmIChzaXplIDw9IDAp
IHNpemUgPSBwb29sLT5hbGlnbm1hc2s7CisgICAgcG9vbC0+ZnJlZSArPSBzaXplOworICAgIGlm
IChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUgPCAodWludHB0cl90KXJ2KSB7
CisgICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3QgY2h1bmspICsg
cG9vbC0+YWxpZ25tYXNrKQorICAgICAgICAgICAgICAgICAgICAgICYgfnBvb2wtPmFsaWdubWFz
azsKKyAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7CisgICAgICAgIGlmIChtaW5y
ZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7CisgICAgICAgICAgICAvLyByZXF1ZXN0IHNpemUgaXMg
dG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUgaXQgYXMKKyAgICAgICAgICAg
IC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCisgICAgICAgICAgICBjaCA9IG1h
bGxvYyhtaW5yZXEpOworICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5jaHVua3NpemUpOworICAgICAg
ICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7CisgICAgICAgICAgICBwb29sLT5mcmVlID0gKHVpbnRw
dHJfdCljaCArIG1pbnJlcTsKKyAgICAgICAgICAgIHBvb2wtPmVuZCA9ICh1aW50cHRyX3QpY2gg
KyBwb29sLT5jaHVua3NpemU7CisgICAgICAgIH0KKyAgICAgICAgY2gtPm5leHQgPSBwb29sLT5u
ZXh0OworICAgICAgICBwb29sLT5uZXh0ID0gY2g7CisgICAgICAgIHJ2ID0gKHZvaWQgKikoKCh1
aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2spOwor
ICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKK2ludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29s
ICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykgeworICAgIHN0cnVjdCBjbGVh
bnVwICpjbGVhbnVwOworCisgICAgcG9vbC0+ZnJlZSA9IChwb29sLT5mcmVlICsgc2l6ZW9mKHZv
aWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7CisgICAgY2xlYW51cCA9IG1lbV9BbGxv
Yyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKKyAgICBpZiAoIWNsZWFudXApIHJldHVy
biAtMTsKKyAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51cDsKKyAgICBjbGVhbnVwLT5m
biA9IGZuOworICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKKyAgICBwb29sLT5jbGVhbnVwID0gY2xl
YW51cDsKKyAgICByZXR1cm4gMDsKK30KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9tZW1vcnkuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
CisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgor
UFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworLy8KKyNpZm5kZWYgX19NRU1PUllfSAorI2RlZmluZSBfX01FTU9S
WV9ICisKK3R5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVjIE1lbW9yeVBvb2w7CisKK2V4dGVy
biBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3QgY2h1bmtzaXplLCB1bnNpZ25lZCBp
bnQgYWxpZ24pOworZXh0ZXJuIHZvaWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKik7CitleHRl
cm4gdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnAsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2
b2lkICptZW1fUmVhbGxvYyhNZW1vcnlQb29sICpwLCB2b2lkICpvbGQsIHNpemVfdCBvbGRzaXpl
LCBzaXplX3QgbmV3c2l6ZSk7CitleHRlcm4gaW50IG1lbV9BZGRDbGVhbnVwKE1lbW9yeVBvb2wg
KnAsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKTsKKworI2VuZGlmIC8qIF9fTUVNT1JZ
X0ggKi8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitO
VklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91
IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVy
bXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJp
YnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9m
IHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxl
YXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklE
SUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFi
aWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywg
TlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5k
ZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAo
dGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJl
ZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5
b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhl
IGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRo
ZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNl
IG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEu
CitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmln
aHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJ
QSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRz
IHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90
aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0
ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09G
VFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM
SUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRI
RVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5P
IEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwK
K0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRI
RSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0Yg
VEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRI
RU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJ
QUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
CisjaWZuZGVmIEJJU09OX1BBUlNFUl9ICisjIGRlZmluZSBCSVNPTl9QQVJTRVJfSAorCisjaWZu
ZGVmIHl5c3R5cGVwcAordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICBzY19pbnQ7CisgICAg
ZmxvYXQgIHNjX2Z2YWw7CisgICAgaW50ICAgIHNjX2lkZW50OworCWNoYXIgICBzeW1ib2xfbmFt
ZVtNQVhfU1lNQk9MX05BTUVfTEVOKzFdOworfSB5eXN0eXBlcHA7CisKKyMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxCisjZW5kaWYKKyMgZGVmaW5lCUNQUF9BTkRfT1AJICAgICAgICAyNTcK
KyMgZGVmaW5lCUNQUF9TVUJfQVNTSUdOCSAgICAyNTkKKyMgZGVmaW5lCUNQUF9NT0RfQVNTSUdO
CSAgICAyNjAKKyMgZGVmaW5lCUNQUF9BRERfQVNTSUdOCTI2MQorIyBkZWZpbmUJQ1BQX0RJVl9B
U1NJR04JMjYyCisjIGRlZmluZQlDUFBfTVVMX0FTU0lHTgkyNjMKKyMgZGVmaW5lCUNQUF9FUV9P
UAkgICAgICAgIDI2NAorIyBkZWZpbmUgICAgQ1BQX1hPUl9PUCAgICAgICAgIDI2NSAKKyMgZGVm
aW5lCUVSUk9SX1NZCSAgICAyNjYKKyMgZGVmaW5lCUNQUF9GTE9BVENPTlNUQU5UCTI2NworIyBk
ZWZpbmUJQ1BQX0dFX09QCSAgICAgICAgMjY4CisjIGRlZmluZQlDUFBfUklHSFRfT1AgICAgICAg
IDI2OQorIyBkZWZpbmUJQ1BQX0lERU5USUZJRVIJICAgIDI3MAorIyBkZWZpbmUJQ1BQX0lOVENP
TlNUQU5UCSAgICAyNzEKKyMgZGVmaW5lCUNQUF9MRV9PUAkgICAgICAgIDI3MgorIyBkZWZpbmUJ
Q1BQX0xFRlRfT1AJICAgICAgICAyNzMKKyMgZGVmaW5lCUNQUF9ERUNfT1AJMjc0CisjIGRlZmlu
ZQlDUFBfTkVfT1AJICAgICAgICAyNzUKKyMgZGVmaW5lCUNQUF9PUl9PUAkgICAgICAgIDI3Ngor
IyBkZWZpbmUJQ1BQX0lOQ19PUAkgICAgMjc3CisjIGRlZmluZQlDUFBfU1RSQ09OU1RBTlQJICAg
IDI3OAorIyBkZWZpbmUJQ1BQX1RZUEVJREVOVElGSUVSCTI3OQorCisjIGRlZmluZQlGSVJTVF9V
U0VSX1RPS0VOX1NZCTI4OQorCisjIGRlZmluZQlDUFBfUklHSFRfQVNTSUdOCSAgICAyODAKKyMg
ZGVmaW5lCUNQUF9MRUZUX0FTU0lHTgkgICAgMjgxCisjIGRlZmluZQlDUFBfQU5EX0FTU0lHTgky
ODIKKyMgZGVmaW5lCUNQUF9PUl9BU1NJR04gIAkyODMKKyMgZGVmaW5lCUNQUF9YT1JfQVNTSUdO
CTI4NAorIyBkZWZpbmUJQ1BQX0xFRlRfQlJBQ0tFVAkyODUKKyMgZGVmaW5lCUNQUF9SSUdIVF9C
UkFDS0VUCTI4NgorIyBkZWZpbmUJQ1BQX0xFRlRfQlJBQ0UJMjg3CisjIGRlZmluZQlDUFBfUklH
SFRfQlJBQ0UJMjg4CisKKyNlbmRpZiAvKiBub3QgQklTT05fUEFSU0VSX0ggKi8KSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklE
SUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGlu
Citjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMs
IGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0
aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRo
ZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNl
IGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEK
K3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRl
IGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJ
RElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIg
TlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhl
CisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlz
dHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
bnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3Ug
cmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNv
cHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwor
dGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBO
VklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1h
cmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitF
eGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRz
IG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBo
ZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRo
YXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVy
IHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQu
IE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdB
UkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE
LAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIg
QUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVW
RU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lO
Q0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBV
U0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhF
CitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9S
WSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJ
TElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisj
IGluY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKK2V4dGVybiBDUFBT
dHJ1Y3QgKmNwcDsKK2ludCBJbml0Q1BQU3RydWN0KHZvaWQpOworaW50IEluaXRTY2FubmVyKENQ
UFN0cnVjdCAqY3BwKTsKK2ludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQg
aHRzaXplKTsKK2ludCBTY2FuRnJvbVN0cmluZyhjaGFyICpzKTsKK2NoYXIqIEdldFN0cmluZ09m
QXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NjQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAo
YykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJ
QSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3Rh
bGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNv
ZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRv
IG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGws
IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVy
bXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJz
b25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBp
biB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiks
IHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBT
b2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3Ig
YmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklE
SUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJ
RElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMg
aW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0
aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklE
SUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0
YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNz
IG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQg
bm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBi
eSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBO
VklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vu
c2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQg
T04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQg
TElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJ
TkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJ
T04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBM
SUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExP
U1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9E
SUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhP
V0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVW
RU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHNjYW5uZXIuYworLy8KKwor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAwCisgICAgI2luY2x1ZGUgPGllZWVmcC5o
PgorICAgICNlbHNlCisgICAgI2RlZmluZSBpc2luZmYoeCkgKCgoKihpbnQgKikmKHgpICYgMHg3
ZjgwMDAwMEwpPT0weDdmODAwMDAwTCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAoKCoo
aW50ICopJih4KSAmIDB4MDA3ZmZmZmZMKT09MDAwMDAwMDAwMEwpKQorI2VuZGlmCisKKyNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKKwordHlwZWRlZiBzdHJ1
Y3QgU3RyaW5nSW5wdXRTcmMgeworICAgIElucHV0U3JjIGJhc2U7CisgICAgY2hhciAqcDsKK30g
U3RyaW5nSW5wdXRTcmM7CisKK3N0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICByZXR1cm4gRU9GOworfSAvLyBlb2Zfc2NhbgorCitz
dGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkge30KKworc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAm
ZW9mX3NjYW4sICZub29wIH07CisKK3N0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2RlZmluZSBFT0xfU1kgJ1xuJworCisjaWYgZGVmaW5l
ZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgX19hc20gaW50IDMKKyNl
bGlmIGRlZmluZWQoX01fQU1ENjQpCisgICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIGFzc2Vy
dCghIkRiZ19CcmVha3BvaW50Iik7CisjZWxzZQorICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQo
KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfTV9BTUQ2NCkK
KyAgICBfX2ludDY0IFJEVFNDICggdm9pZCApIHsKKworICAgICAgICBfX2ludDY0IHY7CisgICAg
CisgICAgICAgIF9fYXNtIF9fZW1pdCAweDBmCisgICAgICAgIF9fYXNtIF9fZW1pdCAweDMxCisg
ICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdiwgZWF4CisgICAgICAgIF9fYXNtIG1vdiBkd29y
ZCBwdHIgdis0LCBlZHgKKyAgICAKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorI2VuZGlmCisK
KworaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKQoreworICAgIC8vIEFkZCB2YXJpb3Vz
IGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKKyAgICBpZiAoIUluaXRDUFAo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjcHAtPm1vc3RSZWNlbnRUb2tlbiA9IDA7Cisg
ICAgY3BwLT50b2tlbkxvYyA9ICZjcHAtPmx0b2tlbkxvYzsKKworICAgIGNwcC0+bHRva2VuTG9j
LmZpbGUgPSAwOworICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSAwOworCisgICAgY3BwLT5jdXJy
ZW50SW5wdXQgPSAmZW9mX2lucHV0c3JjOworICAgIGNwcC0+cHJldmlvdXNfdG9rZW4gPSAnXG4n
OworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKworICAgIHJldHVybiAxOworfSAv
LyBJbml0U2Nhbm5lcgorCitpbnQgRnJlZVNjYW5uZXIodm9pZCkKK3sKKyAgICByZXR1cm4gKEZy
ZWVDUFAoKSk7Cit9CisKKy8qCisgKiBzdHJfZ2V0Y2goKQorICogdGFrZXMgY2FyZSBvZiByZWFk
aW5nIGZyb20gbXVsdGlwbGUgc3RyaW5ncy4KKyAqIHJldHVybnMgdGhlIG5leHQtY2hhciBmcm9t
IHRoZSBpbnB1dCBzdHJlYW0uCisgKiByZXR1cm5zIEVPRiB3aGVuIHRoZSBjb21wbGV0ZSBzaGFk
ZXIgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IHN0cl9nZXRjaChTdHJpbmdJbnB1dFNyYyAq
aW4pCit7CisJZm9yKDs7KXsKKwkgICBpZiAoKmluLT5wKXsKKwkgICAgICBpZiAoKmluLT5wID09
ICdcbicpIHsKKyAgICAgICAgICAgICBpbi0+YmFzZS5saW5lKys7CisgICAgICAgICAgICAgSW5j
TGluZU51bWJlcigpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKmluLT5wKys7CisJ
ICAgfQorCSAgIGlmKCsrKGNwcC0+UGFXaGljaFN0cikgPCBjcHAtPlBhQXJnYyl7CisJCSAgZnJl
ZShpbik7CisJCSAgU2V0U3RyaW5nTnVtYmVyKGNwcC0+UGFXaGljaFN0cik7CisgICAgCSAgU2V0
TGluZU51bWJlcigxKTsKKwkJICBTY2FuRnJvbVN0cmluZyhjcHAtPlBhQXJndltjcHAtPlBhV2hp
Y2hTdHJdKTsKKwkJICBpbj0oU3RyaW5nSW5wdXRTcmMqKWNwcC0+Y3VycmVudElucHV0OworCSAg
ICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAKKwkgICB9CisJICAgZWxzZXsKKwkgICAgICBjcHAt
PmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7CisJICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7
CisgICAgICAgICAgZnJlZShpbik7CisgICAgICAgICAgcmV0dXJuIEVPRjsKKyAgICAgICB9ICAK
Kwl9Cit9IC8vIHN0cl9nZXRjaAorCitzdGF0aWMgdm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJbnB1
dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICp0eXBlKSB7CisgICAgaWYgKGluLT5wWy0xXSA9
PSBjaClpbi0+cC0tOworCWVsc2UgeworCQkqKGluLT5wKT0nXDAnOyAvL3RoaXMgd291bGQgdGFr
ZSBjYXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBwcmV2aW91cyBzdHJpbmcuCisJICAgIGNwcC0+UGFX
aGljaFN0ci0tOworCX0gIAorCWlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgIGluLT5iYXNlLmxp
bmUtLTsKKyAgICAgICAgRGVjTGluZU51bWJlcigpOworICAgIH0KK30gLy8gc3RyX3VuZ2V0Y2gK
KworaW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKnMpCit7CisgICAgCisJU3RyaW5nSW5wdXRTcmMg
KmluID0gbWFsbG9jKHNpemVvZihTdHJpbmdJbnB1dFNyYykpOworICAgIG1lbXNldChpbiwgMCwg
c2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CisJaW4tPnAgPSBzOworICAgIGluLT5iYXNlLmxpbmUg
PSAxOworICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47CisgICAgaW4tPmJhc2UuZ2V0Y2gg
PSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNoOworICAgIGluLT5i
YXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKikpc3Ry
X3VuZ2V0Y2g7CisgICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIGNw
cC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOworCisgICAgcmV0dXJuIDE7Cit9IC8vIFNjYW5G
cm9tU3RyaW5nOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9hdGluZyBwb2ludCBjb25zdGFu
dHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiBsQnVpbGRGbG9hdFZhbHVlKCkgLSBRdWljayBh
bmQgZGlydHkgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludC4gIFNpbmNlIGFsbAorICogICAg
ICAgICB3ZSBuZWVkIGlzIHNpbmdsZSBwcmVjaXNpb24gdGhpcyBzaG91bGQgYmUgcXVpdGUgcHJl
Y2lzZS4KKyAqLworCitzdGF0aWMgZmxvYXQgbEJ1aWxkRmxvYXRWYWx1ZShjb25zdCBjaGFyICpz
dHIsIGludCBsZW4sIGludCBleHApCit7CisgICAgZG91YmxlIHZhbCwgZXhwdmFsLCB0ZW47Cisg
ICAgaW50IGlpLCBsbGVuLCBhYnNleHA7CisgICAgZmxvYXQgcnY7CisKKyAgICB2YWwgPSAwLjA7
CisgICAgbGxlbiA9IGxlbjsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspCisgICAg
ICAgIHZhbCA9IHZhbCoxMC4wICsgKHN0cltpaV0gLSAnMCcpOworICAgIGlmIChleHAgIT0gMCkg
eworICAgICAgICBhYnNleHAgPSBleHAgPiAwID8gZXhwIDogLWV4cDsKKyAgICAgICAgZXhwdmFs
ID0gMS4wZjsKKyAgICAgICAgdGVuID0gMTAuMDsKKyAgICAgICAgd2hpbGUgKGFic2V4cCkgewor
ICAgICAgICAgICAgaWYgKGFic2V4cCAmIDEpCisgICAgICAgICAgICAgICAgZXhwdmFsICo9IHRl
bjsKKyAgICAgICAgICAgIHRlbiAqPSB0ZW47CisgICAgICAgICAgICBhYnNleHAgPj49IDE7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGV4cCA+PSAwKSB7CisgICAgICAgICAgICB2YWwgKj0gZXhw
dmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsIC89IGV4cHZhbDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBydiA9IChmbG9hdCl2YWw7CisgICAgaWYgKGlzaW5mZihydikpIHsK
KwkJQ1BQRXJyb3JUb0luZm9Mb2coIiBFUlJPUl9fX0ZQX0NPTlNUX09WRVJGTE9XIik7CisgICAg
fQorICAgIHJldHVybiBydjsKK30gLy8gbEJ1aWxkRmxvYXRWYWx1ZQorCisKKy8qCisgKiBsRmxv
YXRDb25zdCgpIC0gU2NhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgQXNzdW1lcyB0aGF0
IHRoZSBzY2FubmVyCisgKiAgICAgICAgIGhhcyBzZWVuIGF0IGxlYXN0IG9uZSBkaWdpdCwgZm9s
bG93ZWQgYnkgZWl0aGVyIGEgZGVjaW1hbCAnLicgb3IgdGhlCisgKiAgICAgICAgIGxldHRlciAn
ZScuCisgKi8KKworc3RhdGljIGludCBsRmxvYXRDb25zdChjaGFyICpzdHIsIGludCBsZW4sIGlu
dCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApCit7CisgICAgaW50IEhhc0RlY2ltYWwsIGRlY2xl
biwgZXhwLCBFeHBTaWduOworICAgIGludCBzdHJfbGVuOworICAgIGZsb2F0IGx2YWw7CisgICAg
CisgICAgSGFzRGVjaW1hbCA9IDA7CisgICAgZGVjbGVuID0gMDsKKyAgICBleHAgPSAwOworCQor
ICAgIHN0cl9sZW49bGVuOworICAgIGlmIChjaCA9PSAnLicpIHsKKwkJc3RyW2xlbisrXT1jaDsK
KyAgICAgICAgSGFzRGVjaW1hbCA9IDE7CisgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIHdoaWxlIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9O
QU1FX0xFTikgeworICAgICAgICAgICAgICAgIGRlY2xlbisrOworICAgICAgICAgICAgICAgIGlm
IChsZW4gPiAwIHx8IGNoICE9ICcwJykgeworICAgICAgICAgICAgICAgICAgICBzdHJbbGVuXSA9
IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKztzdHJfbGVuKys7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0ZQX0NPTlNUX1RPT19MT05HIik7Cisg
ICAgICAgICAgICAgICAgbGVuID0gMSxzdHJfbGVuPTE7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBFeHBvbmVudDoKKworICAgIGlmIChjaCA9PSAnZScgfHwgY2gg
PT0gJ0UnKSB7CisgICAgICAgIEV4cFNpZ24gPSAxOworCQlzdHJbbGVuKytdPWNoOworICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOworICAgICAgICBpZiAoY2ggPT0gJysnKSB7CisgICAgICAgICAgICBzdHJbbGVuKytdPWNo
OyAgCisJCQljaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICB9IGVsc2UgaWYgKGNoID09ICctJykgeworICAgICAgICAgICAg
RXhwU2lnbiA9IC0xOworCQkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgIHdo
aWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZXhwID0gZXhw
KjEwICsgY2ggLSAnMCc7CisJCQkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIkVSUk9SX19fRVJST1JfSU5fRVhQT05FTlQiKTsKKyAgICAgICAgfQorICAgICAgICBl
eHAgKj0gRXhwU2lnbjsKKyAgICB9CisgICAgICAKKyAgICBpZiAobGVuID09IDApIHsKKyAgICAg
ICAgbHZhbCA9IDAuMGY7CisJCXN0cmNweShzdHIsIjAuMCIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHN0cltsZW5dPSdcMCc7ICAgICAgCisgICAgICAgIGx2YWwgPSBsQnVpbGRGbG9hdFZhbHVl
KHN0ciwgc3RyX2xlbiwgZXhwIC0gZGVjbGVuKTsKKyAgICB9CisgICAgLy8gU3VmZml4OgorICAg
IAorICAgIHl5bHZhbHBwLT5zY19mdmFsID0gbHZhbDsKKyAgICBzdHJjcHkoeXlsdmFscHAtPnN5
bWJvbF9uYW1lLHN0cik7CisgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7ICAgICAgICAgICAgCisgICAgcmV0dXJuIENQUF9GTE9B
VENPTlNUQU5UOworfSAvLyBsRmxvYXRDb25zdAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8g
Tm9ybWFsIFNjYW5uZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgCitzdGF0aWMgaW50IGJ5
dGVfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGNoYXIg
c3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiArIDFdOworICAgIGNoYXIgc3RyaW5nX3Zh
bFtNQVhfU1RSSU5HX0xFTiArIDFdOworICAgIGludCBBbHJlYWR5Q29tcGxhaW5lZDsKKyAgICBp
bnQgbGVuLCBjaCwgaWksIGl2YWwgPSAwOworCisgICAgZm9yICg7OykgeworICAgICAgICB5eWx2
YWxwcC0+c2NfaW50ID0gMDsKKyAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKwkJCisgICAgICAgIHdoaWxlIChjaCA9PSAn
ICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXHInKSB7CisgICAgICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gMTsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0KKwkJCisgICAgICAgIGNwcC0+
bHRva2VuTG9jLmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKKyAgICAgICAgY3BwLT5s
dG9rZW5Mb2MubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgICAgICBsZW4gPSAw
OworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGRlZmF1bHQ6CisJCQlyZXR1cm4gY2g7
IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KKyAgICAgICAgY2FzZSBFT0Y6CisgICAgICAgICAg
ICByZXR1cm4gLTE7CisJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBj
YXNlICdFJzoKKyAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6
IGNhc2UgJ0onOgorICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6IGNhc2UgJ00nOiBjYXNlICdO
JzogY2FzZSAnTyc6CisgICAgICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2Ug
J1MnOiBjYXNlICdUJzoKKyAgICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2Fz
ZSAnWCc6IGNhc2UgJ1knOgorICAgICAgICBjYXNlICdaJzogY2FzZSAnXyc6CisgICAgICAgIGNh
c2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKKyAgICAgICAg
Y2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgorICAgICAg
ICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6CisgICAg
ICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBjYXNlICd0JzoKKyAg
ICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgor
ICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAg
ICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOwor
ICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwkJCQkJCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdo
aWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycpOworICAg
ICAgICAgICAgaWYgKGxlbiA+PSBNQVhfU1lNQk9MX05BTUVfTEVOKQorICAgICAgICAgICAgICAg
IGxlbiA9IE1BWF9TWU1CT0xfTkFNRV9MRU4gLSAxOworICAgICAgICAgICAgc3ltYm9sX25hbWVb
bGVuXSA9ICdcMCc7CisgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19p
ZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICcwJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewor
CQkJCXl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OworICAgICAgICAgICAgICAgIGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8CisgICAgICAgICAgICAg
ICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKwkJCQkJCXl5bHZhbHBwLT5z
eW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdmFs
IDw9IDB4MGZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9
IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0g
J0EnICYmIGNoIDw9ICdGJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9
IGNoIC0gJ0EnICsgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICdhJyArIDEwOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdmFs
ID0gKGl2YWwgPDwgNCkgfCBpaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fSEVY
X0NPTlNUX09WRVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNv
bXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYg
Y2ggPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYm
IGNoIDw9ICdmJykpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VSUk9SX0lOX0hFWF9DT05TVEFOVCIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVb
bGVuXSA9ICdcMCc7CisJCQkJY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisJCQkJeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeyAvLyBvY3RhbCBpbnRlZ2VyIGNvbnN0YW50cwor
ICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKKyAgICAgICAgICAgICAgICBp
dmFsID0gMDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHl5bHZh
bHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl2
YWwgPD0gMHgxZmZmZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICcw
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCAzKSB8IGlpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFB
bHJlYWR5Q29tcGxhaW5lZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJFUlJPUl9fX09DVF9DT05TVF9PVkVSRkxPVyIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYm
IGNoIDw9ICc3Jyk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScg
fHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIAorICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSwgbGVuLCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKwkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOworICAgICAgICAgICAgfSBl
bHNlIHsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKKwkJCQljaCA9ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIEZhbGwgdGhyb3VnaC4uLgorICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMn
OiBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAn
OCc6IGNhc2UgJzknOgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAw
IHx8IGNoICE9ICcwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAgICAgICAgICAg
aWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBj
aCA9PSAneCd8fCBjaCA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29u
c3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0g
J1wwJzsKKwkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBpdmFsID0gMDsKKyAgICAgICAgICAgICAg
ICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlp
IDwgbGVuOyBpaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0geXlsdmFscHAtPnN5bWJv
bF9uYW1lW2lpXSAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpdmFsID4gMjE0NzQ4
MzY0KSB8fCAoaXZhbCA9PSAyMTQ3NDgzNjQgJiYgY2ggPj0gOCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWluZWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19JTlRFR0VSX0NPTlNUX09WRVJGTE9XIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaXZhbCA9IGl2YWwqMTAgKyBjaDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2
YWw7CisgICAgICAgICAgICAgICAgaWYoaXZhbD09MCkKKyAgICAgICAgICAgICAgICAgICBzdHJj
cHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIwIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9JTlRDT05TVEFOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICctJzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ERUNfT1A7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICctJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfSU5DX09QOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FERF9BU1NJR047CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIHJldHVybiAnKyc7CisgICAg
ICAgICAgICB9CisgICAgICAgIGNhc2UgJyonOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
IGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIHJldHVybiAnKic7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJyUnOgorICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX01PRF9BU1NJR047CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7
CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICclJzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRf
QlJBQ0tFVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJy
ZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICc6JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnXic6
CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICdeJykgeworICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfWE9SX09QOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hP
Ul9BU1NJR047CisgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgICAgcmV0dXJuICdeJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9P
UDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICc9JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnISc6CisgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfTkVfT1A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOworICAgICAgICAgICAgICAgIHJldHVybiAnISc7CisgICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgJ3wnOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX09QOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQ1BQX09SX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAg
ICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ3wnOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnJic6CisgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAg
ICAgICAgaWYgKGNoID09ICcmJykgeworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX09Q
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FORF9BU1NJR047CisgICAgICAgICAgICAg
ICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgcmV0dXJu
ICcmJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgJzwn
OgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKKyAgICAgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9MRUZUX0FTU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNleworICAg
ICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZU
X09QOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09ICc9JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xF
X09QOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aCA9PSAnJScpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDS0VUOworICAgICAgICAgICAgICAgICAgICBl
bHNleworICAgICAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJzwnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICBpZihjaCA9PSAnPScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNT
SUdOOworICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX09QOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc9Jykgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0dFX09QOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJz4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAn
Lic6CisgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAn
OScpIHsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0
Q29uc3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCAwLCAnLicsIHl5bHZhbHBwKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7IC8vIFNwZWNpYWwgRU9GIGhhY2sKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICcuJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgJy8nOgorICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLycpIHsKKyAg
ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpOworICAgICAgICAgICAgICAgIGlm
IChjaCA9PSBFT0YpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyonKSB7Cisg
ICAgICAgICAgICAgICAgaW50IG5sY291bnQgPSAwOworICAgICAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykgbmxjb3VudCsrOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IEVPRikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0g
RU9GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1Jf
X19FT0ZfSU5fQ09NTUVOVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJy8n
KTsKKyAgICAgICAgICAgICAgICBpZiAobmxjb3VudCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1xuJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gR28gdHJ5
IGl0IGFnYWluLi4uCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lHTjsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcvJzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CisgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicgJiYgY2ggIT0g
RU9GKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIg
KFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgTUFYX1NUUklOR19MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RyaW5nX3ZhbFtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAg
ICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgaWYgKGNoID09ICci
JykgeworICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmlu
ZyhhdGFibGUsIHN0cmluZ192YWwpOworICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1RSQ09O
U1RBTlQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJFUlJPUl9fX0NQUF9FT0xfSU5fU1RSSU5HIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEVSUk9SX1NZOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSAvLyBieXRl
X3NjYW4KKworaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoreyAgICAKKwl5
eXN0eXBlcHAgeXlsdmFscHA7CisgICAgaW50IHRva2VuID0gJ1xuJzsgICAKKworICAgIGZvcig7
OykgeworCisgICAgICAgIGNoYXIqIHRva2VuU3RyaW5nID0gMDsKKyAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKKwkJ
aWYoY2hlY2tfRU9GKHRva2VuKSkKKwkJICAgIHJldHVybiAwOworICAgICAgICBpZiAodG9rZW4g
PT0gJyMnKSB7CisgICAgICAgICAgICBpZiAoY3BwLT5wcmV2aW91c190b2tlbiA9PSAnXG4nfHwg
Y3BwLT5wcmV2aW91c190b2tlbiA9PSAwKSB7CisJCQkgICAgdG9rZW4gPSByZWFkQ1BQbGluZSgm
eXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworCQkJICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGNv
bW1hbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGF0
IGxpbmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gdG9rZW47CisgICAgICAgIC8vIGV4
cGFuZCBtYWNyb3MKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1hY3Jv
RXhwYW5kKHl5bHZhbHBwLnNjX2lkZW50LCAmeXlsdmFscHApKSB7CisgICAgICAgICAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHRva2VuID09ICdcbicpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAx
OworICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZh
bHBwLnNjX2lkZW50KTsKKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05T
VEFOVHx8dG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7ICAgICAgICAgICAgCisgICAgICAgICAgICB0
b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOworCQl9IGVsc2UgeyAgICAgICAgICAg
IAorICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKTsK
KwkgICAgfQorCisgICAgICAgIGlmICh0b2tlblN0cmluZykgeworICAgICAgICAgICAgaWYgKChz
aWduZWQpc3RybGVuKHRva2VuU3RyaW5nKSA+PSBtYXhTaXplKSB7CisgICAgICAgICAgICAgICAg
Y3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiBtYXhTaXpl
OyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlICBpZiAoc3RybGVuKHRva2VuU3Ry
aW5nKSA+IDApIHsKKwkJCSAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7CisgICAgICAgICAg
ICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiAo
aW50KXN0cmxlbih0b2tlblN0cmluZyk7CisgICAgICAgICAgICB9ICAKKworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30gLy8geXlsZXgK
KworLy9DaGVja3MgaWYgdGhlIHRva2VuIGp1c3QgcmVhZCBpcyBFT0Ygb3Igbm90LgoraW50IGNo
ZWNrX0VPRihpbnQgdG9rZW4pCit7CisgICBpZih0b2tlbj09LTEpeworICAgICAgIGlmKGNwcC0+
aWZkZXB0aCA+MCl7CisJCUNQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBp
bGF0aW9uIHN0b3BwZWQiKTsKKyAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKKyAgICAgICB9
CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIEVuZCBvZiBzY2FubmVyLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3
YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHNj
YW5uZXIuaAorLy8KKworI2lmICFkZWZpbmVkKF9fU0NBTk5FUl9IKQorI2RlZmluZSBfX1NDQU5O
RVJfSCAxCisKKyNkZWZpbmUgTUFYX1NZTUJPTF9OQU1FX0xFTiAxMjgKKyNkZWZpbmUgTUFYX1NU
UklOR19MRU4gNTEyCisKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgi
CisKKy8vIE5vdCByZWFsbHkgYXRvbSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4uCisK
K3R5cGVkZWYgc3RydWN0IFNvdXJjZUxvY19SZWMgeworICAgIHVuc2lnbmVkIHNob3J0IGZpbGUs
IGxpbmU7Cit9IFNvdXJjZUxvYzsKKworaW50IHl5cGFyc2UgKHZvaWQpOworCitpbnQgeXlsZXhf
Q1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOworCit0eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7
CisgICAgc3RydWN0IElucHV0U3JjCSpwcmV2OworICAgIGludAkJCSgqc2Nhbikoc3RydWN0IElu
cHV0U3JjICosIHl5c3R5cGVwcCAqKTsKKyAgICBpbnQJCQkoKmdldGNoKShzdHJ1Y3QgSW5wdXRT
cmMgKiwgeXlzdHlwZXBwICopOworICAgIHZvaWQJCSgqdW5nZXRjaCkoc3RydWN0IElucHV0U3Jj
ICosIGludCwgeXlzdHlwZXBwICopOworICAgIGludAkJCW5hbWU7ICAvKiBhdG9tICovCisgICAg
aW50CQkJbGluZTsKK30gSW5wdXRTcmM7CisKK2ludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNw
cCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCitpbnQgU2NhbkZyb21TdHJpbmco
Y2hhciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0aGUgc3RyaW5n
IG1lbnRpb25lZC4KK2ludCBjaGVja19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlm
IHdlIGhpdCBhIEVPRiBhYnJ1cHRseSAKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqKTsg
ICAvLyBzdGlja2luZyB0aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKK3Zv
aWQgU2V0TGluZU51bWJlcihpbnQpOwordm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKK3ZvaWQg
SW5jTGluZU51bWJlcih2b2lkKTsKK3ZvaWQgRGVjTGluZU51bWJlcih2b2lkKTsKK2ludCBGcmVl
U2Nhbm5lcih2b2lkKTsgICAgICAgICAgICAgICAgIC8vIEZyZWUgdGhlIGNwcCBzY2FubmVyCisj
ZW5kaWYgLy8gIShkZWZpbmVkKF9fU0NBTk5FUl9IKQorCkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmln
aHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJO
VklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBv
ZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitp
bnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJ
QSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlv
dSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0
YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4g
Y29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEg
cGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdo
dHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2Fy
ZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklE
SUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5k
L29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUg
TlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9m
IE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWlt
ZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgor
TmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2Yg
TlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3Ns
eSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhw
cmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcg
YnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5n
ZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0
aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBs
aWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJ
REVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRI
T1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1J
TkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJ
TkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEg
QkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExB
UlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RP
LCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04s
IE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJF
LCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNF
LCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzbGdsb2JhbHMuaAor
Ly8KKworI2lmICFkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCisjZGVmaW5lIF9fU0xHTE9CQUxTX0gg
MQorCit0eXBlZGVmIHN0cnVjdCBDUFBTdHJ1Y3RfUmVjIENQUFN0cnVjdDsKKworZXh0ZXJuIENQ
UFN0cnVjdCAqY3BwOworCisjdW5kZWYgIENQUENfREVCVUdfVEhFX0NPTVBJTEVSCisjaWYgZGVm
aW5lZChfREVCVUcpCisjZGVmaW5lIENQUENfREVCVUdfVEhFX0NPTVBJTEVSIDEKKyNlbmRpZgor
CisjdW5kZWYgIENQUENfRU5BQkxFX1RPT0xTCisjZGVmaW5lIENQUENfRU5BQkxFX1RPT0xTIDEK
KworI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jb21waWxlLmgiCisjaWYgIWRlZmluZWQoTk9fUEFSU0VSKQorI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTlVMTCkK
KyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2VuZGlmIC8vICEoZGVmaW5lZChfX1NMR0xPQkFM
U19IKQorCisKKyAgICAKKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmMJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODkgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2luc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCitjb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAorc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Citmb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitOZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKK0NvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
CitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
K3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCisK
K1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK0lUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgorUFJP
RFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKK05WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1wqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworLy8KKy8vIHN5bWJvbHMuYworLy8KKworI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBT
eW1ib2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU2NvcGUgKlNjb3Bl
TGlzdCA9IE5VTEw7CitTY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKK1Njb3BlICpHbG9iYWxT
Y29wZSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkgewor
ICAgIFNjb3BlICpzY29wZSA9IF9zY29wZTsKKworICAgIGlmIChzY29wZS0+bmV4dCkKKyAgICAg
ICAgc2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKKyAgICBpZiAoc2NvcGUtPnByZXYp
CisgICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7CisgICAgZWxzZQorICAg
ICAgICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKK30KKworLyoKKyAqIE5ld1Njb3BlKCkKKyAq
CisgKi8KK1Njb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQoreworICAgIFNj
b3BlICpsU2NvcGU7CisKKyAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNjb3Bl
KSk7CisgICAgbFNjb3BlLT5wb29sID0gcG9vbDsKKyAgICBsU2NvcGUtPnBhcmVudCA9IE5VTEw7
CisgICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7CisgICAgbFNjb3BlLT5zeW1ib2xzID0gTlVM
TDsKKyAgICAKKyAgICBsU2NvcGUtPmxldmVsID0gMDsKKworICAgIGxTY29wZS0+cHJvZ3JhbXMg
PSBOVUxMOworICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKKyAgICAgICAgU2Nv
cGVMaXN0LT5wcmV2ID0gbFNjb3BlOworICAgIGxTY29wZS0+cHJldiA9IDA7CisgICAgU2NvcGVM
aXN0ID0gbFNjb3BlOworICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBsU2Nv
cGUpOworICAgIHJldHVybiBsU2NvcGU7Cit9IC8vIE5ld1Njb3BlCisKKy8qCisgKiBQdXNoU2Nv
cGUoKQorICoKKyAqLworCit2b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQoreworICAgIFNj
b3BlICpsU2NvcGU7CisKKyAgICBpZiAoQ3VycmVudFNjb3BlKSB7CisgICAgICAgIGZTY29wZS0+
bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKKyAgICAgICAgaWYgKGZTY29wZS0+bGV2
ZWwgPT0gMSkgeworICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgeworICAgICAgICAgICAg
ICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0xLCB3
ZSdyZQorICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1cGVy
Z2xvYmFsIHNjb3BlLiAgVGhpbmdzCisgICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBpZiB3
ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKKyAgICAgICAgICAgICAg
ICAgKiBzZXQgaXQgdG8gMiAqLworICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAyOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49IDIp
IHsKKyAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKKyAgICAgICAgICAgIHdoaWxlIChsU2Nv
cGUtPmxldmVsID4gMikKKyAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7Cisg
ICAgICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7CisgICAgfQorICAgIGZTY29wZS0+cGFy
ZW50ID0gQ3VycmVudFNjb3BlOworICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKK30gLy8gUHVz
aFNjb3BlCisKKy8qCisgKiBQb3BTY29wZSgpCisgKgorICovCisKK1Njb3BlICpQb3BTY29wZSh2
b2lkKQoreworICAgIFNjb3BlICpsU2NvcGU7CisKKyAgICBsU2NvcGUgPSBDdXJyZW50U2NvcGU7
CisgICAgaWYgKEN1cnJlbnRTY29wZSkKKyAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVudFNj
b3BlLT5wYXJlbnQ7CisgICAgcmV0dXJuIGxTY29wZTsKK30gLy8gUG9wU2NvcGUKKworLyoKKyAq
IE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7CisgKgorICovCisKK1N5
bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwg
c3ltYm9sa2luZCBraW5kKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgY2hhciAqcGNoOwor
ICAgIGludCBpaTsKKworICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxsb2MoZlNjb3BlLT5w
b29sLCBzaXplb2YoU3ltYm9sKSk7CisgICAgbFN5bWItPmxlZnQgPSBOVUxMOworICAgIGxTeW1i
LT5yaWdodCA9IE5VTEw7CisgICAgbFN5bWItPm5leHQgPSBOVUxMOworICAgIGxTeW1iLT5uYW1l
ID0gbmFtZTsKKyAgICBsU3ltYi0+bG9jID0gKmxvYzsKKyAgICBsU3ltYi0+a2luZCA9IGtpbmQ7
CisgICAgCisgICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKKworICAgIHBjaCA9IChjaGFyICopICZs
U3ltYi0+ZGV0YWlsczsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YobFN5bWItPmRldGFp
bHMpOyBpaSsrKQorICAgICAgICAqcGNoKysgPSAwOworICAgIHJldHVybiBsU3ltYjsKK30gLy8g
TmV3U3ltYm9sCisKKy8qCisgKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJpbmFyeSB0cmVlIGlz
IG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0aGV5CisgKiAg
ICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhpcyBsYXRlciAoYnkg
cmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCisgKi8KKworc3RhdGljIHZvaWQgbEFkZFRvVHJl
ZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKK3sKKyAgICBTeW1ib2wgKmxTeW1i
OworICAgIGludCBscmV2LCBmcmV2OworCisgICAgbFN5bWIgPSAqZlN5bWJvbHM7CisgICAgaWYg
KGxTeW1iKSB7CisgICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBmU3ltYi0+
bmFtZSk7CisgICAgICAgIHdoaWxlIChsU3ltYikgeworICAgICAgICAgICAgbHJldiA9IEdldFJl
dmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKKyAgICAgICAgICAgIGlmIChscmV2ID09
IGZyZXYpIHsKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiR2V0QXRvbVN0cmlu
ZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZyZXYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsU3ltYiA9IGxTeW1iLT5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdodCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+cmlnaHQgPSBmU3lt
YjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7CisgICAgfQorfSAvLyBsQWRkVG9UcmVlCisK
KworLyoKKyAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUsIG9yIGZ1bmN0aW9u
IG5hbWUgdG8gYSBzY29wZS4KKyAqCisgKi8KKworU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9j
ICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpCit7CisgICAg
U3ltYm9sICpsU3ltYjsKKworICAgIGlmICghZlNjb3BlKQorICAgICAgICBmU2NvcGUgPSBDdXJy
ZW50U2NvcGU7CisgICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0b20sIGtpbmQp
OworICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOworICAgIHJldHVybiBs
U3ltYjsKK30gLy8gQWRkU3ltYm9sCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogU3ltYm9sIFNl
bWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogTG9va1VwTG9jYWxTeW1i
b2woKQorICoKKyAqLworCitTeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUs
IGludCBhdG9tKQoreworICAgIFN5bWJvbCAqbFN5bWI7CisgICAgaW50IHJuYW1lLCByYXRvbTsK
KworICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7CisgICAgaWYgKCFm
U2NvcGUpCisgICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKKyAgICBsU3ltYiA9IGZTY29w
ZS0+c3ltYm9sczsKKyAgICB3aGlsZSAobFN5bWIpIHsKKyAgICAgICAgcm5hbWUgPSBHZXRSZXZl
cnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7CisgICAgICAgIGlmIChybmFtZSA9PSByYXRv
bSkgeworICAgICAgICAgICAgcmV0dXJuIGxTeW1iOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1i
LT5sZWZ0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsU3ltYiA9IGxT
eW1iLT5yaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
TlVMTDsKK30gLy8gTG9va1VwTG9jYWxTeW1ib2wKKworLyoKKyAqIExvb2tVcFN5bWJvbCgpCisg
KgorICovCisKK1N5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKQor
eworICAgIFN5bWJvbCAqbFN5bWI7CisKKyAgICBpZiAoIWZTY29wZSkKKyAgICAgICAgZlNjb3Bl
ID0gQ3VycmVudFNjb3BlOworICAgIHdoaWxlIChmU2NvcGUpIHsKKyAgICAgICAgbFN5bWIgPSBM
b29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOworICAgICAgICBpZiAobFN5bWIpCisgICAg
ICAgICAgICByZXR1cm4gbFN5bWI7CisgICAgICAgIGZTY29wZSA9IGZTY29wZS0+cGFyZW50Owor
ICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30gLy8gTG9va1VwU3ltYm9sCisKSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitD
b3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0
aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1
c2UsCitpbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlz
IE5WSURJQSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4g
IElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNl
LCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4K
KworSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMg
eW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNv
cHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBT
b2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhl
CitOVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3Vy
Y2UgYW5kL29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0
ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90
aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRp
c2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3
YXJlLgorTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9n
b3Mgb2YgTlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4
cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNl
cworZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNs
dWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBp
bmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3
aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2Fy
ZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5H
IFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElO
RyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwK
K05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElO
IENPTUJJTkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBO
VklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBF
WEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKK1RPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RV
Q1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNP
RlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJB
Q1QsCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RI
RVJXSVNFLCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyBzeW1ib2xz
LmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkKKyNkZWZpbmUgX19TWU1CT0xTX0gg
MQorCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgorCit0eXBlZGVm
IGVudW0gc3ltYm9sa2luZCB7CisgICBNQUNST19TCit9IHN5bWJvbGtpbmQ7CisKKy8vIFR5cGVk
ZWZzIGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1ib2xzLmgiOgorCit0eXBlZGVmIHN0
cnVjdCBTY29wZV9SZWMgU2NvcGU7Cit0eXBlZGVmIHN0cnVjdCBTeW1ib2xfUmVjIFN5bWJvbDsK
KwordHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgeworICAgIHN0cnVjdCBTeW1ib2xMaXN0
X1JlYyAqbmV4dDsKKyAgICBTeW1ib2wgKnN5bWI7Cit9IFN5bWJvbExpc3Q7CisKK3N0cnVjdCBT
Y29wZV9SZWMgeworICAgIFNjb3BlICpuZXh0LCAqcHJldjsgICAgIC8vIGRvdWJseS1saW5rZWQg
bGlzdCBvZiBhbGwgc2NvcGVzCisgICAgU2NvcGUgKnBhcmVudDsKKyAgICBTY29wZSAqZnVuU2Nv
cGU7ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBvZiBlbmNsb3NpbmcgZnVuY3Rpb24K
KyAgICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29sIHVzZWQgZm9yIGFsbG9jYXRpb24g
aW4gdGhpcyBzY29wZQorICAgIFN5bWJvbCAqc3ltYm9sczsKKyAgICAKKwlpbnQgbGV2ZWw7ICAg
ICAgICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9IGdsb2JhbHMsIGV0Yy4KKworICAg
IC8vIE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVsIDEpOgorICAgIFN5bWJvbExpc3Qg
KnByb2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9yIHRoaXMgY29tcGlsYXRpb24uCit9
OworCisKKy8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBiaW5hcnkgdHJlZS4KKworI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAgICAgIC8vIHRvIGdldCBNYWNyb1N5
bWJvbCBkZWYKKworc3RydWN0IFN5bWJvbF9SZWMgeworICAgIFN5bWJvbCAqbGVmdCwgKnJpZ2h0
OworICAgIFN5bWJvbCAqbmV4dDsKKyAgICBpbnQgbmFtZTsgICAgICAgLy8gTmFtZSBhdG9tCisg
ICAgU291cmNlTG9jIGxvYzsKKyAgICBzeW1ib2xraW5kIGtpbmQ7CisgICAgdW5pb24geworICAg
ICAgICBNYWNyb1N5bWJvbCBtYWM7CisgICAgfSBkZXRhaWxzOworfTsKKworZXh0ZXJuIFNjb3Bl
ICpDdXJyZW50U2NvcGU7CitleHRlcm4gU2NvcGUgKkdsb2JhbFNjb3BlOworZXh0ZXJuIFNjb3Bl
ICpTY29wZUxpc3Q7CisKK1Njb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICopOworI2Rl
ZmluZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2woQ3VycmVudFNjb3BlLT5wb29sKQor
dm9pZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7CitTY29wZSAqUG9wU2NvcGUodm9pZCk7CitT
eW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUs
IHN5bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2Nv
cGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7CitTeW1ib2wgKkxvb2tVcExv
Y2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKK1N5bWJvbCAqTG9va1VwU3ltYm9s
KFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAq
KTsKKworCisjZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCisKSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCitDb3B5cmln
aHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KKworTlZJRElBIENvcnBvcmF0aW9uKCJO
VklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgorY29uc2lkZXJhdGlvbiBv
ZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCitp
bnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJ
QSBzb2Z0d2FyZQorY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlv
dSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQordGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0
YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCitzb2Z0d2FyZS4KKworSW4g
Y29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEg
cGVyc29uYWwsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdo
dHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQorIk5WSURJQSBTb2Z0d2Fy
ZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCitOVklE
SUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5k
L29yIGJpbmFyeQorZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUg
TlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAorcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9m
IE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKK3RleHQgYW5kIGRpc2NsYWlt
ZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgor
TmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2Yg
TlZJRElBCitDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQorTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgorRXhjZXB0IGFzIGV4cHJlc3Ns
eSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcworZXhw
cmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcg
YnV0IG5vdAorbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5n
ZWQgYnkgeW91ciBkZXJpdmF0aXZlCit3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0
aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQoraW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBs
aWNlbnNlZCBoZXJldW5kZXIuIAorCitUSEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJ
REVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBXSVRI
T1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1J
TkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UsIE9SCitJVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJ
TkFUSU9OIFdJVEggT1RIRVIKK1BST0RVQ1RTLgorCitJTiBOTyBFVkVOVCBTSEFMTCBOVklESUEg
QkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBFWEVNUExB
UlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RP
LCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04s
IE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQorTlZJRElBIFNPRlRXQVJF
LCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCitU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNF
LCBFVkVOIElGCitOVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vCisvLyB0b2tlbnMuYworLy8K
KworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgorCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
IFByZXByb2Nlc3NvciBhbmQgVG9rZW4gUmVjb3JkZXIgYW5kIFBsYXliYWNrOiAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
Ky8qCisgKiBpZHN0cigpCisgKiBDb3B5IGEgc3RyaW5nIHRvIGEgbWFsbG9jJ2VkIGJsb2NrIGFu
ZCBjb252ZXJ0IGl0IGludG8gc29tZXRoaW5nIHN1aXRhYmxlCisgKiBmb3IgYW4gSUQKKyAqCisg
Ki8KKworc3RhdGljIGNoYXIgKmlkc3RyKGNvbnN0IGNoYXIgKmZzdHIsIE1lbW9yeVBvb2wgKnBv
b2wpCit7CisgICAgc2l6ZV90IGxlbjsKKyAgICBjaGFyICpzdHIsICp0OworICAgIGNvbnN0IGNo
YXIgKmY7CisKKyAgICBsZW4gPSBzdHJsZW4oZnN0cik7CisgICAgaWYgKCFwb29sKQorICAgICAg
ICBzdHIgPSAoY2hhciAqKSBtYWxsb2MobGVuICsgMSk7CisgICAgZWxzZQorICAgICAgICBzdHIg
PSAoY2hhciAqKSBtZW1fQWxsb2MocG9vbCwgbGVuICsgMSk7CisgICAgCisgICAgZm9yIChmPWZz
dHIsIHQ9c3RyOyAqZjsgZisrKSB7CisgICAgICAgIGlmIChpc2FsbnVtKCpmKSkgKnQrKyA9ICpm
OworICAgICAgICBlbHNlIGlmICgqZiA9PSAnLicgfHwgKmYgPT0gJy8nKSAqdCsrID0gJ18nOwor
ICAgIH0KKyAgICAqdCA9IDA7CisgICAgcmV0dXJuIHN0cjsKK30gLy8gaWRzdHIKKworCisvKgor
ICogbE5ld0Jsb2NrKCkKKyAqCisgKi8KKworc3RhdGljIFRva2VuQmxvY2sgKmxOZXdCbG9jayhU
b2tlblN0cmVhbSAqZlRvaywgTWVtb3J5UG9vbCAqcG9vbCkKK3sKKyAgICBUb2tlbkJsb2NrICps
QmxvY2s7CisKKyAgICBpZiAoIXBvb2wpCisgICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2NrICop
IG1hbGxvYyhzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOworICAgIGVsc2UKKyAgICAgICAgbEJs
b2NrID0gKFRva2VuQmxvY2sgKikgbWVtX0FsbG9jKHBvb2wsIHNpemVvZihUb2tlbkJsb2NrKSAr
IDI1Nik7CisgICAgbEJsb2NrLT5jb3VudCA9IDA7CisgICAgbEJsb2NrLT5jdXJyZW50ID0gMDsK
KyAgICBsQmxvY2stPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBsQmxvY2sgKyBzaXplb2YoVG9r
ZW5CbG9jayk7CisgICAgbEJsb2NrLT5tYXggPSAyNTY7CisgICAgbEJsb2NrLT5uZXh0ID0gTlVM
TDsKKyAgICBpZiAoZlRvay0+aGVhZCkgeworICAgICAgICBmVG9rLT5jdXJyZW50LT5uZXh0ID0g
bEJsb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIGZUb2stPmhlYWQgPSBsQmxvY2s7CisgICAg
fQorICAgIGZUb2stPmN1cnJlbnQgPSBsQmxvY2s7CisgICAgcmV0dXJuIGxCbG9jazsKK30gLy8g
bE5ld0Jsb2NrCisKKy8qCisgKiBsQWRkQnl0ZSgpCisgKgorICovCisKK3N0YXRpYyB2b2lkIGxB
ZGRCeXRlKFRva2VuU3RyZWFtICpmVG9rLCB1bnNpZ25lZCBjaGFyIGZWYWwpCit7CisgICAgVG9r
ZW5CbG9jayAqbEJsb2NrOworICAgIGxCbG9jayA9IGZUb2stPmN1cnJlbnQ7CisgICAgaWYgKGxC
bG9jay0+Y291bnQgPj0gbEJsb2NrLT5tYXgpCisgICAgICAgIGxCbG9jayA9IGxOZXdCbG9jayhm
VG9rLCAwKTsKKyAgICBsQmxvY2stPmRhdGFbbEJsb2NrLT5jb3VudCsrXSA9IGZWYWw7Cit9IC8v
IGxBZGRCeXRlCisKKworCisvKgorICogbFJlYWRCeXRlKCkgLSBHZXQgdGhlIG5leHQgYnl0ZSBm
cm9tIGEgc3RyZWFtLgorICoKKyAqLworCitzdGF0aWMgaW50IGxSZWFkQnl0ZShUb2tlblN0cmVh
bSAqcFRvaykKK3sKKyAgICBUb2tlbkJsb2NrICpsQmxvY2s7CisgICAgaW50IGx2YWwgPSAtMTsK
KworICAgIGxCbG9jayA9IHBUb2stPmN1cnJlbnQ7CisgICAgaWYgKGxCbG9jaykgeworICAgICAg
ICBpZiAobEJsb2NrLT5jdXJyZW50ID49IGxCbG9jay0+Y291bnQpIHsKKyAgICAgICAgICAgIGxC
bG9jayA9IGxCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGlmIChsQmxvY2spCisgICAgICAgICAg
ICAgICAgbEJsb2NrLT5jdXJyZW50ID0gMDsKKyAgICAgICAgICAgIHBUb2stPmN1cnJlbnQgPSBs
QmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxCbG9jaykKKyAgICAgICAgICAgIGx2YWwg
PSBsQmxvY2stPmRhdGFbbEJsb2NrLT5jdXJyZW50KytdOworICAgIH0KKyAgICByZXR1cm4gbHZh
bDsKK30gLy8gbFJlYWRCeXRlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLyBHbG9iYWwgRnVuY3Rpb25zOi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKy8qCisgKiBOZXdUb2tlblN0cmVhbSgpCisgKgorICovCisKK1Rva2VuU3RyZWFtICpO
ZXdUb2tlblN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQb29sICpwb29sKQoreworICAg
IFRva2VuU3RyZWFtICpwVG9rOworCisgICAgaWYgKCFwb29sKQorICAgICAgICBwVG9rID0gKFRv
a2VuU3RyZWFtICopIG1hbGxvYyhzaXplb2YoVG9rZW5TdHJlYW0pKTsKKyAgICBlbHNlCisgICAg
ICAgIHBUb2sgPSAoVG9rZW5TdHJlYW0qKW1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5TdHJl
YW0pKTsKKyAgICBwVG9rLT5uZXh0ID0gTlVMTDsKKyAgICBwVG9rLT5uYW1lID0gaWRzdHIobmFt
ZSwgcG9vbCk7CisgICAgcFRvay0+aGVhZCA9IE5VTEw7CisgICAgcFRvay0+Y3VycmVudCA9IE5V
TEw7CisgICAgbE5ld0Jsb2NrKHBUb2ssIHBvb2wpOworICAgIHJldHVybiBwVG9rOworfSAvLyBO
ZXdUb2tlblN0cmVhbQorCisvKgorICogRGVsZXRlVG9rZW5TdHJlYW0oKQorICoKKyAqLworCit2
b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQoreworICAgIFRva2VuQmxv
Y2sgKnBCbG9jaywgKm5CbG9jazsKKworICAgIGlmIChwVG9rKSB7CisgICAgICAgIHBCbG9jayA9
IHBUb2stPmhlYWQ7CisgICAgICAgIHdoaWxlIChwQmxvY2spIHsKKyAgICAgICAgICAgIG5CbG9j
ayA9IHBCbG9jay0+bmV4dDsKKyAgICAgICAgICAgIGZyZWUocEJsb2NrKTsKKyAgICAgICAgICAg
IHBCbG9jayA9IG5CbG9jazsKKyAgICAgICAgfQorICAgICAgICBpZiAocFRvay0+bmFtZSkKKyAg
ICAgICAgICAgIGZyZWUocFRvay0+bmFtZSk7CisgICAgICAgIGZyZWUocFRvayk7CisgICAgfQor
fSAvLyBEZWxldGVUb2tlblN0cmVhbQorCisvKgorICogUmVjb3JkVG9rZW4oKSAtIEFkZCBhIHRv
a2VuIHRvIHRoZSBlbmQgb2YgYSBsaXN0IGZvciBsYXRlciBwbGF5YmFjayBvciBwcmludG91dC4K
KyAqCisgKi8KKwordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2Vu
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjb25zdCBjaGFyICpzOworICAgIHVuc2ln
bmVkIGNoYXIgKnN0cj1OVUxMOworCisgICAgaWYgKHRva2VuID4gMjU2KQorICAgICAgICBsQWRk
Qnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoKHRva2VuICYgMHg3ZikgKyAweDgwKSk7CisgICAg
ZWxzZQorICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikodG9rZW4gJiAweDdm
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CisgICAg
Y2FzZSBDUFBfVFlQRUlERU5USUZJRVI6CisgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6CisgICAg
ICAgIHMgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKKyAgICAg
ICAgd2hpbGUgKCpzKQorICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIp
ICpzKyspOworICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKKyAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKKyAgICAg
ICAgIHN0cj15eWx2YWxwcC0+c3ltYm9sX25hbWU7CisgICAgICAgICB3aGlsZSAoKnN0cil7Cisg
ICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCh1bnNpZ25lZCBjaGFyKSAqc3RyKTsKKyAgICAgICAg
ICAgICpzdHIrKzsKKyAgICAgICAgIH0KKyAgICAgICAgIGxBZGRCeXRlKHBUb2ssIDApOworICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNp
Z25lZCBjaGFyKSh5eWx2YWxwcC0+c2NfaW50ID8gMSA6IDApKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9IC8vIFJlY29yZFRva2VuCisKKy8qCisgKiBSZXdpbmRUb2tl
blN0cmVhbSgpIC0gUmVzZXQgYSB0b2tlbiBzdHJlYW0gaW4gcHJlcGVyYXRpb24gZm9yIHJlYWRp
bmcuCisgKgorICovCisKK3ZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2sp
Cit7CisgICAgaWYgKHBUb2stPmhlYWQpIHsKKyAgICAgICAgcFRvay0+Y3VycmVudCA9IHBUb2st
PmhlYWQ7CisgICAgICAgIHBUb2stPmN1cnJlbnQtPmN1cnJlbnQgPSAwOworICAgIH0KK30gLy8g
UmV3aW5kVG9rZW5TdHJlYW0KKworLyoKKyAqIFJlYWRUb2tlbigpIC0gUmVhZCB0aGUgbmV4dCB0
b2tlbiBmcm9tIGEgc3RyZWFtLgorICoKKyAqLworCitpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFt
ICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBjaGFyIHN5bWJvbF9uYW1lW01B
WF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKKyAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19M
RU4gKyAxXTsKKyAgICBpbnQgbHRva2VuLCBsZW47CisgICAgY2hhciBjaDsKKworICAgIGx0b2tl
biA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICBpZiAobHRva2VuID49IDApIHsKKyAgICAgICAgaWYg
KGx0b2tlbiA+IDEyNykKKyAgICAgICAgICAgIGx0b2tlbiArPSAxMjg7CisgICAgICAgIHN3aXRj
aCAobHRva2VuKSB7CisgICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6CisgICAgICAgIGNhc2Ug
Q1BQX1RZUEVJREVOVElGSUVSOgorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIGNo
ID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnYScgJiYgY2gg
PD0gJ3onKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicp
IHx8CisgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKKyAg
ICAgICAgICAgICAgICAgICAgIGNoID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgeworICAgICAgICAgICAgICAgICAg
ICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAg
ICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAg
ICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19p
ZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBDUFBfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENQUF9TVFJDT05TVEFOVDoKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICB3aGls
ZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQorICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1RSSU5HX0xFTikKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW4rK10g
PSBjaDsKKyAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IDA7CisgICAgICAgICAgICB5eWx2
YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgorICAgICAg
ICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAg
ICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKXx8KGNoPT0nZSd8fGNoPT0nRSd8
fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSctJykpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOworICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAg
ICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Cisg
ICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CisgICAgICAgICAgICBzdHJjcHkoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19m
dmFsPShmbG9hdClhdG9mKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CisgICAgICAgICAgICBsZW4gPSAwOwor
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CisgICAgICAgICAgICB3aGlsZSAoKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bWJv
bF9uYW1lW2xlbl0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAg
ICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAg
ICAgYXNzZXJ0KGNoID09ICdcMCcpOworICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSxzeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2ko
eXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICcoJzoKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbHRva2VuOworICAg
IH0KKyAgICByZXR1cm4gRU9GX1NZOworfSAvLyBSZWFkVG9rZW4KKwordHlwZWRlZiBzdHJ1Y3Qg
VG9rZW5JbnB1dFNyYyB7CisgICAgSW5wdXRTcmMgICAgICAgICAgICBiYXNlOworICAgIFRva2Vu
U3RyZWFtICAgICAgICAgKnRva2VuczsKKyAgICBpbnQgICAgICAgICAgICAgICAgICgqZmluYWwp
KENQUFN0cnVjdCAqKTsKK30gVG9rZW5JbnB1dFNyYzsKKworc3RhdGljIGludCBzY2FuX3Rva2Vu
KFRva2VuSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKK3sKKyAgICBpbnQgdG9r
ZW4gPSBSZWFkVG9rZW4oaW4tPnRva2VucywgeXlsdmFscHApOworICAgIGludCAoKmZpbmFsKShD
UFBTdHJ1Y3QgKik7CisgICAgY3BwLT50b2tlbkxvYy0+ZmlsZSA9IGNwcC0+Y3VycmVudElucHV0
LT5uYW1lOworICAgIGNwcC0+dG9rZW5Mb2MtPmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGlu
ZTsKKyAgICBpZiAodG9rZW4gPT0gJ1xuJykgeworICAgICAgICBpbi0+YmFzZS5saW5lKys7Cisg
ICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisgICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRv
a2VuOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKKyAgICBmaW5hbCA9
IGluLT5maW5hbDsKKyAgICBmcmVlKGluKTsKKyAgICBpZiAoZmluYWwgJiYgIWZpbmFsKGNwcCkp
IHJldHVybiAtMTsKKyAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKK30KKworaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5T
dHJlYW0gKnRzLCBpbnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSkKK3sKKyAgICBU
b2tlbklucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoVG9rZW5JbnB1dFNyYykpOworICAgIG1l
bXNldChpbiwgMCwgc2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKKyAgICBpbi0+YmFzZS5uYW1lID0g
bmFtZTsKKyAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7CisgICAgaW4tPmJh
c2Uuc2NhbiA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5cGVwcCAqKSlzY2FuX3Rva2VuOwor
ICAgIGluLT5iYXNlLmxpbmUgPSAxOworICAgIGluLT50b2tlbnMgPSB0czsKKyAgICBpbi0+Zmlu
YWwgPSBmaW5hbDsKKyAgICBSZXdpbmRUb2tlblN0cmVhbSh0cyk7CisgICAgY3BwLT5jdXJyZW50
SW5wdXQgPSAmaW4tPmJhc2U7CisgICAgcmV0dXJuIDE7Cit9CisKK3R5cGVkZWYgc3RydWN0IFVu
Z290VG9rZW4geworICAgIElucHV0U3JjICAgIGJhc2U7CisgICAgaW50ICAgICAgICAgdG9rZW47
CisgICAgeXlzdHlwZXBwICAgICBsdmFsOworfSBVbmdvdFRva2VuOworCitzdGF0aWMgaW50IHJl
Z2V0X3Rva2VuKFVuZ290VG9rZW4gKnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQoreworICAgIGlu
dCB0b2tlbiA9IHQtPnRva2VuOworICAgICp5eWx2YWxwcCA9IHQtPmx2YWw7CisgICAgY3BwLT5j
dXJyZW50SW5wdXQgPSB0LT5iYXNlLnByZXY7CisgICAgZnJlZSh0KTsKKyAgICByZXR1cm4gdG9r
ZW47Cit9CisKK3ZvaWQgVW5nZXRUb2tlbihpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KSB7CisgICAgVW5nb3RUb2tlbiAqdCA9IG1hbGxvYyhzaXplb2YoVW5nb3RUb2tlbikpOworICAg
IG1lbXNldCh0LCAwLCBzaXplb2YoVW5nb3RUb2tlbikpOworICAgIHQtPnRva2VuID0gdG9rZW47
CisgICAgdC0+bHZhbCA9ICp5eWx2YWxwcDsKKyAgICB0LT5iYXNlLnNjYW4gPSAodm9pZCAqKXJl
Z2V0X3Rva2VuOworICAgIHQtPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OworICAgIHQt
PmJhc2UubmFtZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOworICAgIHQtPmJhc2UubGluZSA9
IGNwcC0+Y3VycmVudElucHV0LT5saW5lOworICAgIGNwcC0+Y3VycmVudElucHV0ID0gJnQtPmJh
c2U7Cit9CisKKwordm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFtICpz
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeworICAgIGludCB0b2tlbjsKKyAgICBjaGFyIHN0clsx
MDBdOworCisgICAgaWYgKGZwID09IDApIGZwID0gc3Rkb3V0OworICAgIFJld2luZFRva2VuU3Ry
ZWFtKHMpOworICAgIHdoaWxlICgodG9rZW4gPSBSZWFkVG9rZW4ocywgeXlsdmFscHApKSA+IDAp
IHsKKyAgICAgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIENQUF9JREVOVElGSUVS
OgorICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKKyAgICAgICAgICAgIHNwcmludGYo
c3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgorICAgICAg
ICAgICAgc3ByaW50ZihzdHIsICJcIiVzXCIiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFs
cHAtPnNjX2lkZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfRkxP
QVRDT05TVEFOVDoKKyAgICAgICAgICAgIC8vcHJpbnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2Nf
ZnZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6
CisgICAgICAgICAgICAvL3ByaW50ZigiJWQgIiwgeXlsdmFscHAtPnNjX2ludCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh0b2tlbiA+PSAx
MjcpCisgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlcyAiLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgdG9rZW4pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzcHJpbnRm
KHN0ciwgIiVjIiwgdG9rZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKK0NvcHlyaWdo
dCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgorCitOVklESUEgQ29ycG9yYXRpb24oIk5W
SURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCitjb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKK2lu
c3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElB
IHNvZnR3YXJlCitjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91
IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCit0ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3Rh
bGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKK3NvZnR3YXJlLgorCitJbiBj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZAorc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBw
ZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0
cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCisiTlZJRElBIFNvZnR3YXJl
IiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKK05WSURJ
QSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQv
b3IgYmluYXJ5Citmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBO
VklESUEgU29mdHdhcmUsIHlvdSBtdXN0CityZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2Yg
TlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordGV4dCBhbmQgZGlzY2xhaW1l
cnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCitO
ZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBO
VklESUEKK0NvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhlCitOVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCitFeGNlcHQgYXMgZXhwcmVzc2x5
IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCitleHBy
ZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBi
dXQgbm90CitsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdl
ZCBieSB5b3VyIGRlcml2YXRpdmUKK3dvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRo
ZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCitpbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxp
Y2Vuc2VkIGhlcmV1bmRlci4gCisKK1RIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklE
RUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlO
RlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgT1IKK0lUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklO
QVRJT04gV0lUSCBPVEhFUgorUFJPRFVDVFMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBC
RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIEVYRU1QTEFS
WSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8s
IExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwg
TU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCitOVklESUEgU09GVFdBUkUs
IEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKK1RP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0Us
IEVWRU4gSUYKK05WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIHRva2Vucy5oCisvLwor
CisjaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKKyNkZWZpbmUgX19UT0tFTlNfSCAxCisKKyNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCisKKyNkZWZpbmUgRU9GX1NZICgt
MSkKKwordHlwZWRlZiBzdHJ1Y3QgVG9rZW5CbG9ja19SZWMgVG9rZW5CbG9jazsKKwordHlwZWRl
ZiBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjIHsKKyAgICBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjICpu
ZXh0OworICAgIGNoYXIgKm5hbWU7CisgICAgVG9rZW5CbG9jayAqaGVhZDsKKyAgICBUb2tlbkJs
b2NrICpjdXJyZW50OworfSBUb2tlblN0cmVhbTsKKworc3RydWN0IFRva2VuQmxvY2tfUmVjIHsK
KyAgICBUb2tlbkJsb2NrICpuZXh0OworICAgIGludCBjdXJyZW50OworICAgIGludCBjb3VudDsK
KyAgICBpbnQgbWF4OworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCitleHRlcm4gVG9r
ZW5TdHJlYW0gc3RkbGliX2NwcF9zdHJlYW07CisKKworVG9rZW5TdHJlYW0gKk5ld1Rva2VuU3Ry
ZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wgKnBvb2wpOwordm9pZCBEZWxldGVUb2tl
blN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7IAordm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVh
bSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Cit2b2lkIFJld2luZFRv
a2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsKK2ludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0g
KnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKK2ludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRv
a2VuU3RyZWFtICpwVG9rLCBpbnQgbmFtZSwgaW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSk7Cit2
b2lkIFVuZ2V0VG9rZW4oaW50LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7CisKKyNpZiBkZWZpbmVk
KENQUENfRU5BQkxFX1RPT0xTKQorCit2b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICosIFRva2Vu
U3RyZWFtICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKKworI2VuZGlmIC8vIGRlZmluZWQoQ1BQ
Q19FTkFCTEVfVE9PTFMpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChfX1RPS0VOU19IKQpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL3Rvb2xzL0NPUFlJTkcuYmlzb24JKHJldmlzaW9uIDApCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFDQorCQkgICAgICAgVmVy
c2lvbiAyLCBKdW5lIDE5OTENCisNCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjc1IE1h
c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0ENCisgRXZlcnlvbmUgaXMgcGVybWl0dGVk
IHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzDQorIG9mIHRoaXMgbGljZW5z
ZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLg0KKw0KKwkJCSAgICBQ
cmVhbWJsZQ0KKw0KKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25l
ZCB0byB0YWtlIGF3YXkgeW91cg0KK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5
IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorTGljZW5zZSBpcyBpbnRlbmRlZCB0
byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQ0KK3NvZnR3
YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMu
ICBUaGlzDQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZy
ZWUgU29mdHdhcmUNCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9n
cmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvDQordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQ0KK3RoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0
bw0KK3lvdXIgcHJvZ3JhbXMsIHRvby4NCisNCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0
d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QNCitwcmljZS4gIE91ciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91DQor
aGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChh
bmQgY2hhcmdlIGZvcg0KK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2Vp
dmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdA0KK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBj
YW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0DQoraW4gbmV3IGZyZWUg
cHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLg0KKw0K
KyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0
aGF0IGZvcmJpZA0KK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlv
dSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4NCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRl
IHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQ0KK2Rpc3RyaWJ1dGUg
Y29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4NCisNCisgIEZvciBl
eGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRo
ZXINCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFs
bCB0aGUgcmlnaHRzIHRoYXQNCit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRo
ZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQ0KK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBt
dXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXINCityaWdodHMuDQor
DQorICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0
IHRoZSBzb2Z0d2FyZSwgYW5kDQorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2
ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwNCitkaXN0cmlidXRlIGFuZC9vciBtb2Rp
ZnkgdGhlIHNvZnR3YXJlLg0KKw0KKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlv
biBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4NCit0aGF0IGV2ZXJ5b25lIHVuZGVy
c3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQ0KK3NvZnR3YXJl
LiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2Vk
IG9uLCB3ZQ0KK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZl
IGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvDQordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBi
eSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwNCithdXRob3JzJyByZXB1
dGF0aW9ucy4NCisNCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBj
b25zdGFudGx5IGJ5IHNvZnR3YXJlDQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRh
bmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQ0KK3Byb2dyYW0gd2lsbCBpbmRpdmlk
dWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUNCitwcm9n
cmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIg
dGhhdCBhbnkNCitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVz
ZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLg0KKw0KKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNv
bmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQNCittb2RpZmljYXRpb24gZm9s
bG93Lg0KKwwNCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KKyAgIFRFUk1TIEFO
RCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTg0K
Kw0KKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29y
ayB3aGljaCBjb250YWlucw0KK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRl
ciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkDQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LA0KK3JlZmVycyB0
byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9n
cmFtIg0KK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVu
ZGVyIGNvcHlyaWdodCBsYXc6DQordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRo
ZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwNCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBt
b2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcg0KK2xhbmd1YWdlLiAg
KEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24g
aW4NCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3Nl
ZCBhcyAieW91Ii4NCisNCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0
aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdA0KK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0
aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YNCitydW5uaW5nIHRoZSBQcm9n
cmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtDQor
aXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBv
biB0aGUNCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5p
bmcgdGhlIFByb2dyYW0pLg0KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0
aGUgUHJvZ3JhbSBkb2VzLg0KKw0KKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZl
cmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzDQorc291cmNlIGNvZGUgYXMgeW91IHJlY2Vp
dmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91DQorY29uc3BpY3VvdXNseSBh
bmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQ0KK2Nv
cHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFs
bCB0aGUNCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJz
ZW5jZSBvZiBhbnkgd2FycmFudHk7DQorYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2Yg
dGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQ0KK2Fsb25nIHdpdGggdGhlIFByb2dy
YW0uDQorDQorWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJh
bnNmZXJyaW5nIGEgY29weSwgYW5kDQoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJy
YW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4NCisNCisgIDIuIFlvdSBtYXkg
bW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24N
CitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNv
cHkgYW5kDQorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUg
dGVybXMgb2YgU2VjdGlvbiAxDQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBh
bGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCisNCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1v
ZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQorICAgIHN0YXRpbmcgdGhh
dCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuDQorDQor
ICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVi
bGlzaCwgdGhhdCBpbg0KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2
ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkNCisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNl
bnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQNCisgICAgcGFydGllcyB1
bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KKw0KKyAgICBjKSBJZiB0aGUgbW9kaWZp
ZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5DQorICAgIHdo
ZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gN
CisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQg
b3IgZGlzcGxheSBhbg0KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRl
IGNvcHlyaWdodCBub3RpY2UgYW5kIGENCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2Fy
cmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlDQorICAgIGEgd2FycmFudHkp
IGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXINCisgICAg
dGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5
IG9mIHRoaXMNCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2Vs
ZiBpcyBpbnRlcmFjdGl2ZSBidXQNCisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBh
biBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbg0KKyAgICB0aGUgUHJvZ3JhbSBpcyBu
b3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikNCisMDQorVGhlc2UgcmVxdWly
ZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZg0KK2lkZW50
aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFBy
b2dyYW0sDQorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5k
IHNlcGFyYXRlIHdvcmtzIGluDQordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBp
dHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQ0KK3NlY3Rpb25zIHdoZW4geW91IGRpc3Ry
aWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQ0KK2Rpc3RyaWJ1dGUg
dGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNl
ZA0KK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJl
IG9uIHRoZSB0ZXJtcyBvZg0KK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90
aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlDQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBl
YWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0Lg0KKw0KK1RodXMs
IGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3Ig
Y29udGVzdA0KK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJh
dGhlciwgdGhlIGludGVudCBpcyB0bw0KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRo
ZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcg0KK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQg
b24gdGhlIFByb2dyYW0uDQorDQorSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5v
dGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQ0KK3dpdGggdGhlIFByb2dyYW0gKG9y
IHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZg0KK2Egc3Rv
cmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3Jr
IHVuZGVyDQordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4NCisNCisgIDMuIFlvdSBtYXkgY29w
eSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LA0KK3Vu
ZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRo
ZSB0ZXJtcyBvZg0KK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxz
byBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoNCisNCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGgg
dGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQ0KKyAgICBzb3VyY2Ug
Y29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlv
bnMNCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBz
b2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEg
d3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlDQorICAgIHllYXJzLCB0byBn
aXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyDQorICAg
IGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29t
cGxldGUNCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNv
dXJjZSBjb2RlLCB0byBiZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2Vj
dGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQ0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZv
ciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsDQorDQorICAgIGMpIEFjY29tcGFueSBpdCB3aXRo
IHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyDQorICAgIHRvIGRp
c3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlz
DQorICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9u
bHkgaWYgeW91DQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4
ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gNCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1
YnNlY3Rpb24gYiBhYm92ZS4pDQorDQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMg
dGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcg0KK21ha2luZyBtb2RpZmljYXRpb25z
IHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlDQorY29kZSBt
ZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1
cyBhbnkNCithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBz
Y3JpcHRzIHVzZWQgdG8NCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2Yg
dGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhDQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBz
b3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlDQorYW55dGhpbmcgdGhhdCBp
cyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkNCitmb3Jt
KSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24p
IG9mIHRoZQ0KK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywg
dW5sZXNzIHRoYXQgY29tcG9uZW50DQoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxl
Lg0KKw0KK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1h
ZGUgYnkgb2ZmZXJpbmcNCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwg
dGhlbiBvZmZlcmluZyBlcXVpdmFsZW50DQorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2Rl
IGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzDQorZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3Vy
Y2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90DQorY29tcGVsbGVkIHRv
IGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4NCisMDQorICA0LiBZ
b3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFBy
b2dyYW0NCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4g
IEFueSBhdHRlbXB0DQorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBk
aXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzDQordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0
ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLg0KK0hvd2V2ZXIsIHBhcnRp
ZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyDQor
dGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBs
b25nIGFzIHN1Y2gNCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuDQorDQorICA1
LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3Ug
aGF2ZSBub3QNCitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBw
ZXJtaXNzaW9uIHRvIG1vZGlmeSBvcg0KK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRl
cml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQ0KK3Byb2hpYml0ZWQgYnkgbGF3IGlm
IHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkNCittb2RpZnlp
bmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUN
CitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2Ug
dG8gZG8gc28sIGFuZA0KK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcs
IGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcNCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBv
biBpdC4NCisNCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChv
ciBhbnkgd29yayBiYXNlZCBvbiB0aGUNCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0
aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQ0KK29yaWdpbmFsIGxpY2Vuc29yIHRv
IGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8NCit0aGVz
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcg0K
K3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBn
cmFudGVkIGhlcmVpbi4NCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNv
bXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bw0KK3RoaXMgTGljZW5zZS4NCisNCisgIDcuIElm
LCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBw
YXRlbnQNCitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVk
IHRvIHBhdGVudCBpc3N1ZXMpLA0KK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0
aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3INCitvdGhlcndpc2UpIHRoYXQgY29udHJh
ZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90DQorZXhjdXNl
IHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QN
CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0
aW9ucyB1bmRlciB0aGlzDQorTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0
aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQ0KK21heSBub3QgZGlzdHJpYnV0ZSB0aGUg
UHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQNCitsaWNlbnNlIHdvdWxk
IG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5
DQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRo
cm91Z2ggeW91LCB0aGVuDQordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQg
YW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bw0KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0
cmlidXRpb24gb2YgdGhlIFByb2dyYW0uDQorDQorSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0
aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyDQorYW55IHBhcnRpY3Vs
YXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0
bw0KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5
IGluIG90aGVyDQorY2lyY3Vtc3RhbmNlcy4NCisNCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2Yg
dGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55DQorcGF0ZW50cyBvciBv
dGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkN
CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3Rl
Y3RpbmcgdGhlDQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBz
eXN0ZW0sIHdoaWNoIGlzDQoraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2Vz
LiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlDQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUg
d2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZA0KK3Rocm91Z2ggdGhhdCBzeXN0ZW0g
aW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0DQorc3lzdGVtOyBp
dCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2ls
bGluZw0KK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFu
ZCBhIGxpY2Vuc2VlIGNhbm5vdA0KK2ltcG9zZSB0aGF0IGNob2ljZS4NCisNCitUaGlzIHNlY3Rp
b24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQg
dG8NCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4NCisMDQor
ICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVz
dHJpY3RlZCBpbg0KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNv
cHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQ0KK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hv
IHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UNCittYXkgYWRkIGFuIGV4cGxp
Y2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcNCit0aG9z
ZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9y
IGFtb25nDQorY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlz
IExpY2Vuc2UgaW5jb3Jwb3JhdGVzDQordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0
aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuDQorDQorICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucw0KK29mIHRoZSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lv
bnMgd2lsbA0KK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1
dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bw0KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNl
cm5zLg0KKw0KK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24g
bnVtYmVyLiAgSWYgdGhlIFByb2dyYW0NCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0
aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQ0KK2xhdGVyIHZlcnNpb24i
LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlv
bnMNCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZQ0KK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBk
b2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YNCit0aGlzIExpY2Vuc2UsIHlvdSBt
YXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
DQorRm91bmRhdGlvbi4NCisNCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0
cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUNCitwcm9ncmFtcyB3aG9zZSBkaXN0cmli
dXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yDQordG8g
YXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5
IHRoZSBGcmVlDQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzDQorbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAg
T3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMNCitvZiBwcmVzZXJ2
aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdh
cmUgYW5kDQorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBn
ZW5lcmFsbHkuDQorDQorCQkJICAgIE5PIFdBUlJBTlRZDQorDQorICAxMS4gQkVDQVVTRSBUSEUg
UFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkN
CitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUg
TEFXLiAgRVhDRVBUIFdIRU4NCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTDQorUFJPVklERSBUSEUgUFJPR1JBTSAi
QVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQNCitP
UiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRg0KK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMNCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9S
TUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFDQorUFJPR1JBTSBQ
Uk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJW
SUNJTkcsDQorUkVQQUlSIE9SIENPUlJFQ1RJT04uDQorDQorICAxMi4gSU4gTk8gRVZFTlQgVU5M
RVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HDQor
V0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9E
SUZZIEFORC9PUg0KK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUs
IEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsDQorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBT
UEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HDQorT1VU
IE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJV
VCBOT1QgTElNSVRFRA0KK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElO
QUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQ0KK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9S
IEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSDQorUFJP
R1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFDQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLg0KKw0KKwkJICAgICBFTkQg
T0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCisMDQorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkgVGhl
c2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMNCisNCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3
IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QNCitwb3NzaWJs
ZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBt
YWtlIGl0DQorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFu
ZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuDQorDQorICBUbyBkbyBzbywgYXR0YWNoIHRoZSBm
b2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdA0KK3RvIGF0dGFj
aCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZl
bHkNCitjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91
bGQgaGF2ZSBhdCBsZWFzdA0KK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8g
d2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLg0KKw0KKyAgICA8b25lIGxpbmUgdG8gZ2l2
ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPg0K
KyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4NCisNCisgICAgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUNCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N
CisNCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1h
c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorDQorQWxzbyBhZGQgaW5mb3JtYXRp
b24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuDQor
DQorSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQg
bm90aWNlIGxpa2UgdGhpcw0KK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6
DQorDQorICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1l
IG9mIGF1dGhvcg0KKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FS
UkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuDQorICAgIFRoaXMgaXMgZnJlZSBzb2Z0
d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQNCisgICAgdW5kZXIg
Y2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLg0KKw0KK1RoZSBo
eXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRo
ZSBhcHByb3ByaWF0ZQ0KK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2Yg
Y291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkNCitiZSBjYWxsZWQgc29tZXRoaW5nIG90
aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUNCittb3Vz
ZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLg0KKw0K
K1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9n
cmFtbWVyKSBvciB5b3VyDQorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRp
c2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYNCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2Ft
cGxlOyBhbHRlciB0aGUgbmFtZXM6DQorDQorICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2Ns
YWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtDQorICBgR25vbW92aXNp
b24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhh
Y2tlci4NCisNCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQ0KKyAgVHkg
Q29vbiwgUHJlc2lkZW50IG9mIFZpY2UNCisNCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
ZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8NCitwcm9wcmll
dGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwg
eW91IG1heQ0KK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3By
aWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQ0KK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQg
eW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbA0KK1B1YmxpYyBMaWNl
bnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLg0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci90
b29scy9DT1BZSU5HLmZsZXgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xz
L0NPUFlJTkcuZmxleAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21waWxlci90b29scy9D
T1BZSU5HLmZsZXgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKK0ZsZXggY2FycmllcyB0
aGUgY29weXJpZ2h0IHVzZWQgZm9yIEJTRCBzb2Z0d2FyZSwgc2xpZ2h0bHkgbW9kaWZpZWQNCiti
ZWNhdXNlIGl0IG9yaWdpbmF0ZWQgYXQgdGhlIExhd3JlbmNlIEJlcmtlbGV5IChub3QgTGl2ZXJt
b3JlISkgTGFib3JhdG9yeSwNCit3aGljaCBvcGVyYXRlcyB1bmRlciBhIGNvbnRyYWN0IHdpdGgg
dGhlIERlcGFydG1lbnQgb2YgRW5lcmd5Og0KKw0KKwlDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisJQWxsIHJpZ2h0cyByZXNl
cnZlZC4NCisNCisJVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRl
ZCB0byBCZXJrZWxleSBieQ0KKwlWZXJuIFBheHNvbi4NCisNCisJVGhlIFVuaXRlZCBTdGF0ZXMg
R292ZXJubWVudCBoYXMgcmlnaHRzIGluIHRoaXMgd29yayBwdXJzdWFudA0KKwl0byBjb250cmFj
dCBuby4gREUtQUMwMy03NlNGMDAwOTggYmV0d2VlbiB0aGUgVW5pdGVkIFN0YXRlcw0KKwlEZXBh
cnRtZW50IG9mIEVuZXJneSBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisNCisJ
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVy
bWl0dGVkDQorCXByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgZGlzdHJpYnV0aW9ucyByZXRhaW4g
dGhpcyBlbnRpcmUNCisJY29weXJpZ2h0IG5vdGljZSBhbmQgY29tbWVudCwgYW5kICgyKSBkaXN0
cmlidXRpb25zIGluY2x1ZGluZw0KKwliaW5hcmllcyBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr
bm93bGVkZ2VtZW50OiAgYGBUaGlzIHByb2R1Y3QNCisJaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv
cGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsDQorCUJlcmtlbGV5IGFuZCBpdHMg
Y29udHJpYnV0b3JzJycgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXINCisJbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaW4gYWxsIGFkdmVydGlzaW5nDQor
CW1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlLiAg
TmVpdGhlciB0aGUNCisJbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlDQorCXVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorCXdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMg
SVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUg0KKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRA0KKwlXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSDQorCVBVUlBPU0Uu
DQorDQorVGhpcyBiYXNpY2FsbHkgc2F5cyAiZG8gd2hhdGV2ZXIgeW91IHBsZWFzZSB3aXRoIHRo
aXMgc29mdHdhcmUgZXhjZXB0DQorcmVtb3ZlIHRoaXMgbm90aWNlIG9yIHRha2UgYWR2YW50YWdl
IG9mIHRoZSBVbml2ZXJzaXR5J3MgKG9yIHRoZSBmbGV4DQorYXV0aG9ycycpIG5hbWUiLg0KKw0K
K05vdGUgdGhhdCB0aGUgImZsZXguc2tsIiBzY2FubmVyIHNrZWxldG9uIGNhcnJpZXMgbm8gY29w
eXJpZ2h0IG5vdGljZS4NCitZb3UgYXJlIGZyZWUgdG8gZG8gd2hhdGV2ZXIgeW91IHBsZWFzZSB3
aXRoIHNjYW5uZXJzIGdlbmVyYXRlZCB1c2luZyBmbGV4Ow0KK2ZvciB0aGVtLCB5b3UgYXJlIG5v
dCBldmVuIGJvdW5kIGJ5IHRoZSBhYm92ZSBjb3B5cmlnaHQuDQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3Rvb2xzL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvdG9v
bHMvUkVBRE1FCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL1JFQURN
RQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorVGhlIHN0YW5kYWxvbmUgQmlzb24gYW5k
IEZsZXggd2luMzIgZXhlY3V0YWJsZXMNCit3ZXJlIGNyZWF0ZWQgYnkgV2lsYnVyIFN0cmVldHQg
YW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tOg0KK2h0dHA6Ly91c2VycGFnZXMubW9ubW91dGguY29t
L353c3RyZWV0dC9sZXgteWFjYy9sZXgteWFjYy5odG1sDQorDQorQmlzb24gdmVyc2lvbiAxLjI0
Og0KK1NlZSBDT1BZSU5HLmJpc29uIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLg0KK1RoZSBvcmln
aW5hbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBiaXNvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0
aGUgZm9sbG93aW5nIGxvY2F0aW9uOg0KK2h0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5j
b20vZmlsZXMvYmlzb24uemlwDQorDQorRmxleCB2ZXJzaW9uIDIuNS4yDQorU2VlIENPUFlJTkcu
ZmxleCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4NCitUaGUgb3JpZ2luYWwgc291cmNlIGRpc3Ry
aWJ1dGlvbiBmb3IgZmxleCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0
aW9uOg0KK2h0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5jb20vZmlsZXMvZmxleC56aXAN
CisNCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvdG9vbHMvYmlzb24uaGFpcnkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5CShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMzNCBAQAorCitleHRlcm4gaW50IHRpbWVjbG9jazsKKworCitpbnQgeXllcnJvcjsJ
CS8qICBZeWVycm9yIGFuZCB5eWNvc3QgYXJlIHNldCBieSBndWFyZHMuCSovCitpbnQgeXljb3N0
OwkJLyogIElmIHl5ZXJyb3IgaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSBieSBhCSovCisJCQkv
KiAgZ3VhcmQsIHRoZSByZWR1Y3Rpb24gd2l0aCB3aGljaCB0aGUgZ3VhcmQJKi8KKwkJCS8qICBp
cyBhc3NvY2lhdGVkIGlzIG5vdCBwZXJmb3JtZWQsIGFuZCB0aGUJKi8KKwkJCS8qICBlcnJvciBy
ZWNvdmVyeSBtZWNoYW5pc20gaXMgaW52b2tlZC4JKi8KKwkJCS8qICBZeWNvc3QgaW5kaWNhdGVz
IHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcJKi8KKwkJCS8qICB0aGUgcmVkdWN0aW9uIGdpdmVuIHRo
ZSBhdHRyaWJ1dGVzIG9mIHRoZQkqLworCQkJLyogIHN5bWJvbHMuCQkJCQkqLworCisKKy8qICBZ
WU1BWERFUFRIIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhdGUgYW5kIHZh
bHVlCSovCisvKiAgc3RhY2tzLgkJCQkJCQkJKi8KKworI2lmbmRlZglZWU1BWERFUFRICisjZGVm
aW5lCVlZTUFYREVQVEgJNTAwCisjZW5kaWYKKworLyogIFlZTUFYUlVMRVMgbXVzdCBiZSBhdCBs
ZWFzdCBhcyBsYXJnZSBhcyB0aGUgbnVtYmVyIG9mIHJ1bGVzIHRoYXQJKi8KKy8qICBjb3VsZCBi
ZSBwbGFjZWQgaW4gdGhlIHJ1bGUgcXVldWUuICBUaGF0IG51bWJlciBjb3VsZCBiZSBkZXRlcm1p
bmVkCSovCisvKiAgZnJvbSB0aGUgZ3JhbW1hciBhbmQgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBi
dXQsIGFzIHlldCwgaXQgaXMgbm90LgkqLworCisjaWZuZGVmCVlZTUFYUlVMRVMKKyNkZWZpbmUJ
WVlNQVhSVUxFUwkxMDAKKyNlbmRpZgorCisjaWZuZGVmCVlZTUFYQkFDS1VQCisjZGVmaW5lIFlZ
TUFYQkFDS1VQCTEwMAorI2VuZGlmCisKKworc2hvcnQJeXlzc1tZWU1BWERFUFRIXTsJLyogIHRo
ZSBzdGF0ZSBzdGFjawkJCSovCitZWVNUWVBFCXl5dnNbWVlNQVhERVBUSF07CS8qICB0aGUgc2Vt
YW50aWMgdmFsdWUgc3RhY2sJCSovCitZWUxUWVBFIHl5bHNbWVlNQVhERVBUSF07CS8qICB0aGUg
bG9jYXRpb24gc3RhY2sJCQkqLworc2hvcnQJeXlycVtZWU1BWFJVTEVTXTsJLyogIHRoZSBydWxl
IHF1ZXVlCQkJKi8KK2ludAl5eWNoYXI7CQkJLyogIHRoZSBsb29rYWhlYWQgc3ltYm9sCQkqLwor
CitZWVNUWVBFCXl5bHZhbDsJCQkvKiAgdGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZQkJKi8KKwkJ
CQkvKiAgbG9va2FoZWFkIHN5bWJvbAkJCSovCisKK1lZU1RZUEUgeXl0dmFsOwkJCS8qICB0aGUg
c2VtYW50aWMgdmFsdWUgZm9yIHRoZSBzdGF0ZQkqLworCQkJCS8qICBhdCB0aGUgdG9wIG9mIHRo
ZSBzdGF0ZSBzdGFjay4JKi8KKworWVlTVFlQRSB5eXZhbDsJCQkvKiAgdGhlIHZhcmlhYmxlIHVz
ZWQgdG8gcmV0dXJuCQkqLworCQkJCS8qICBzZW1hbnRpYyB2YWx1ZXMgZnJvbSB0aGUgYWN0aW9u
CSovCisJCQkJLyogIHJvdXRpbmVzCQkJCSovCisKK1lZTFRZUEUgeXlsbG9jOwkJLyogIGxvY2F0
aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJKi8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisKK1lZ
TFRZUEUgeXl0bG9jOwkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBzdGF0ZSBhdCB0aGUJKi8K
KwkJCQkvKiAgdG9wIG9mIHRoZSBzdGF0ZSBzdGFjawkJKi8KKworCitpbnQJeXludW5sZXhlZDsK
K3Nob3J0CXl5dW5jaGFyW1lZTUFYQkFDS1VQXTsKK1lZU1RZUEUJeXl1bnZhbFtZWU1BWEJBQ0tV
UF07CitZWUxUWVBFIHl5dW5sb2NbWVlNQVhCQUNLVVBdOworCitzaG9ydCAqeXlnc3NwOwkJCS8q
ICBhIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgc3RhdGUJKi8KKwkJCQkvKiAgc3RhY2s7IG9u
bHkgc2V0IGR1cmluZyBlcnJvcgkqLworCQkJCS8qICByZWNvdmVyeS4JCQkJKi8KKworWVlTVFlQ
RSAqeXlndnNwOwkJLyogIGEgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSB2YWx1ZQkqLworCQkJ
CS8qICBzdGFjazsgb25seSBzZXQgZHVyaW5nIGVycm9yCSovCisJCQkJLyogIHJlY292ZXJ5LgkJ
CQkqLworCitZWUxUWVBFICp5eWdsc3A7CQkvKiAgYSBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhl
CQkqLworCQkJCS8qICBsb2NhdGlvbiBzdGFjazsgb25seSBzZXQgZHVyaW5nCSovCisJCQkJLyog
IGVycm9yIHJlY292ZXJ5LgkJCSovCisKKworLyogIFl5Z2V0IGlzIGFuIGludGVyZmFjZSBiZXR3
ZWVuIHRoZSBwYXJzZXIgYW5kIHRoZSBsZXhpY2FsIGFuYWx5emVyLgkqLworLyogIEl0IGlzIGNv
c3RseSB0byBwcm92aWRlIHN1Y2ggYW4gaW50ZXJmYWNlLCBidXQgaXQgYXZvaWRzIHJlcXVpcmlu
ZwkqLworLyogIHRoZSBsZXhpY2FsIGFuYWx5emVyIHRvIGJlIGFibGUgdG8gYmFjayB1cCB0aGUg
c2Nhbi4JCSovCisKK3l5Z2V0KCkKK3sKKyAgaWYgKHl5bnVubGV4ZWQgPiAwKQorICAgIHsKKyAg
ICAgIHl5bnVubGV4ZWQtLTsKKyAgICAgIHl5Y2hhciA9IHl5dW5jaGFyW3l5bnVubGV4ZWRdOwor
ICAgICAgeXlsdmFsID0geXl1bnZhbFt5eW51bmxleGVkXTsKKyAgICAgIHl5bGxvYyA9IHl5dW5s
b2NbeXludW5sZXhlZF07CisgICAgfQorICBlbHNlIGlmICh5eWNoYXIgPD0gMCkKKyAgICB5eWNo
YXIgPSAwOworICBlbHNlCisgICAgeworICAgICAgeXljaGFyID0geXlsZXgoKTsKKyAgICAgIGlm
ICh5eWNoYXIgPCAwKQorCXl5Y2hhciA9IDA7CisgICAgICBlbHNlIHl5Y2hhciA9IFlZVFJBTlNM
QVRFKHl5Y2hhcik7CisgICAgfQorfQorCisKKworeXl1bmxleChjaHIsIHZhbCwgbG9jKQoraW50
IGNocjsKK1lZU1RZUEUgdmFsOworWVlMVFlQRSBsb2M7Cit7CisgIHl5dW5jaGFyW3l5bnVubGV4
ZWRdID0gY2hyOworICB5eXVudmFsW3l5bnVubGV4ZWRdID0gdmFsOworICB5eXVubG9jW3l5bnVu
bGV4ZWRdID0gbG9jOworICB5eW51bmxleGVkKys7Cit9CisKKworCit5eXJlc3RvcmUoZmlyc3Qs
IGxhc3QpCityZWdpc3RlciBzaG9ydCAqZmlyc3Q7CityZWdpc3RlciBzaG9ydCAqbGFzdDsKK3sK
KyAgcmVnaXN0ZXIgc2hvcnQgKnNzcDsKKyAgcmVnaXN0ZXIgc2hvcnQgKnJwOworICByZWdpc3Rl
ciBpbnQgc3ltYm9sOworICByZWdpc3RlciBpbnQgc3RhdGU7CisgIHJlZ2lzdGVyIGludCB0dmFs
c2F2ZWQ7CisKKyAgc3NwID0geXlnc3NwOworICB5eXVubGV4KHl5Y2hhciwgeXlsdmFsLCB5eWxs
b2MpOworCisgIHR2YWxzYXZlZCA9IDA7CisgIHdoaWxlIChmaXJzdCAhPSBsYXN0KQorICAgIHsK
KyAgICAgIHN5bWJvbCA9IHl5c3Rvc1sqc3NwXTsKKyAgICAgIGlmIChzeW1ib2wgPCBZWU5UQkFT
RSkKKwl7CisJICB5eXVubGV4KHN5bWJvbCwgeXl0dmFsLCB5eXRsb2MpOworCSAgdHZhbHNhdmVk
ID0gMTsKKwkgIHNzcC0tOworCX0KKworICAgICAgc3NwLS07CisKKyAgICAgIGlmIChmaXJzdCA9
PSB5eXJxKQorCWZpcnN0ID0geXlycSArIFlZTUFYUlVMRVM7CisKKyAgICAgIGZpcnN0LS07CisK
KyAgICAgIGZvciAocnAgPSB5eXJocyArIHl5cHJoc1sqZmlyc3RdOyBzeW1ib2wgPSAqcnA7IHJw
KyspCisJeworCSAgaWYgKHN5bWJvbCA8IFlZTlRCQVNFKQorCSAgICBzdGF0ZSA9IHl5dGFibGVb
eXlwYWN0Wypzc3BdICsgc3ltYm9sXTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHN0YXRlID0g
eXlwZ290b1tzeW1ib2wgLSBZWU5UQkFTRV0gKyAqc3NwOworCisJICAgICAgaWYgKHN0YXRlID49
IDAgJiYgc3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbc3RhdGVdID09ICpzc3ApCisJCXN0YXRl
ID0geXl0YWJsZVtzdGF0ZV07CisJICAgICAgZWxzZQorCQlzdGF0ZSA9IHl5ZGVmZ290b1tzeW1i
b2wgLSBZWU5UQkFTRV07CisJICAgIH0KKworCSAgKisrc3NwID0gc3RhdGU7CisJfQorICAgIH0K
KworICBpZiAoICEgdHZhbHNhdmVkICYmIHNzcCA+IHl5c3MpCisgICAgeworICAgICAgeXl1bmxl
eCh5eXN0b3NbKnNzcF0sIHl5dHZhbCwgeXl0bG9jKTsKKyAgICAgIHNzcC0tOworICAgIH0KKwor
ICB5eWdzc3AgPSBzc3A7Cit9CisKKworCitpbnQKK3l5cGFyc2UoKQoreworICByZWdpc3RlciBp
bnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3Nw
OworICByZWdpc3RlciBzaG9ydCAqeXlycTA7CisgIHJlZ2lzdGVyIHNob3J0ICp5eXB0cjsKKyAg
cmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisKKyAgaW50IHl5bGVuOworICBZWUxUWVBFICp5eWxz
cDsKKyAgc2hvcnQgKnl5cnExOworICBzaG9ydCAqeXlycTI7CisKKyAgeXlzdGF0ZSA9IDA7Cisg
IHl5c3NwID0geXlzcyAtIDE7CisgIHl5dnNwID0geXl2cyAtIDE7CisgIHl5bHNwID0geXlscyAt
IDE7CisgIHl5cnEwID0geXlycTsKKyAgeXlycTEgPSB5eXJxMDsKKyAgeXlycTIgPSB5eXJxMDsK
KworICB5eWNoYXIgPSB5eWxleCgpOworICBpZiAoeXljaGFyIDwgMCkKKyAgICB5eWNoYXIgPSAw
OworICBlbHNlIHl5Y2hhciA9IFlZVFJBTlNMQVRFKHl5Y2hhcik7CisKK3l5bmV3c3RhdGU6CisK
KyAgaWYgKHl5c3NwID49IHl5c3MgKyBZWU1BWERFUFRIIC0gMSkKKyAgICB7CisgICAgICB5eWFi
b3J0KCJQYXJzZXIgU3RhY2sgT3ZlcmZsb3ciKTsKKyAgICAgIFlZQUJPUlQ7CisgICAgfQorCisg
ICorK3l5c3NwID0geXlzdGF0ZTsKKworeXlyZXN1bWU6CisKKyAgeXluID0geXlwYWN0W3l5c3Rh
dGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4g
Kz0geXljaGFyOworICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5d
ICE9IHl5Y2hhcikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07
CisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5
cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsK
KworICB5eXN0YXRlID0geXluOworCisgIHl5cHRyID0geXlycTI7CisgIHdoaWxlICh5eXB0ciAh
PSB5eXJxMSkKKyAgICB7CisgICAgICB5eW4gPSAqeXlwdHIrKzsKKyAgICAgIHl5bGVuID0geXly
Mlt5eW5dOworICAgICAgeXl2c3AgLT0geXlsZW47CisgICAgICB5eWxzcCAtPSB5eWxlbjsKKwor
ICAgICAgeXlndWFyZCh5eW4sIHl5dnNwLCB5eWxzcCk7CisgICAgICBpZiAoeXllcnJvcikKKwln
b3RvIHl5c2VtZXJyOworCisgICAgICB5eWFjdGlvbih5eW4sIHl5dnNwLCB5eWxzcCk7CisgICAg
ICAqKyt5eXZzcCA9IHl5dmFsOworCisgICAgICB5eWxzcCsrOworICAgICAgaWYgKHl5bGVuID09
IDApCisJeworCSAgeXlsc3AtPnRpbWVzdGFtcCA9IHRpbWVjbG9jazsKKwkgIHl5bHNwLT5maXJz
dF9saW5lID0geXl0bG9jLmZpcnN0X2xpbmU7CisJICB5eWxzcC0+Zmlyc3RfY29sdW1uID0geXl0
bG9jLmZpcnN0X2NvbHVtbjsKKwkgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxhc3Rf
bGluZTsKKwkgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47CisJ
ICB5eWxzcC0+dGV4dCA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5bHNwLT5sYXN0X2xp
bmUgPSAoeXlsc3AreXlsZW4tMSktPmxhc3RfbGluZTsKKwkgIHl5bHNwLT5sYXN0X2NvbHVtbiA9
ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9jb2x1bW47CisJfQorCSAgCisgICAgICBpZiAoeXlwdHIg
PT0geXlycSArIFlZTUFYUlVMRVMpCisgICAgICAgIHl5cHRyID0geXlycTsKKyAgICB9CisKKyAg
aWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICB5eXJxMiA9IHl5cHRy
OworICB5eXJxMSA9IHl5cnEwOworCisgICorK3l5dnNwID0geXl0dmFsOworICAqKyt5eWxzcCA9
IHl5dGxvYzsKKyAgeXl0dmFsID0geXlsdmFsOworICB5eXRsb2MgPSB5eWxsb2M7CisgIHl5Z2V0
KCk7CisKKyAgZ290byB5eW5ld3N0YXRlOworCit5eWRlZmF1bHQ6CisKKyAgeXluID0geXlkZWZh
Y3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworCit5eXJl
ZHVjZToKKworICAqeXlycTArKyA9IHl5bjsKKworICBpZiAoeXlycTAgPT0geXlycSArIFlZTUFY
UlVMRVMpCisgICAgeXlycTAgPSB5eXJxOworCisgIGlmICh5eXJxMCA9PSB5eXJxMikKKyAgICB7
CisgICAgICB5eWFib3J0KCJQYXJzZXIgUnVsZSBRdWV1ZSBPdmVyZmxvdyIpOworICAgICAgWVlB
Qk9SVDsKKyAgICB9CisKKyAgeXlzc3AgLT0geXlyMlt5eW5dOworICB5eW4gPSB5eXIxW3l5bl07
CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworICBpZiAo
eXlzdGF0ZSA+PSAwICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0g
Knl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlz
dGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UQkFTRV07CisKKyAgZ290byB5eW5ld3N0YXRlOwor
Cit5eXNlbWVycjoKKyAgKi0teXlwdHIgPSB5eW47CisgIHl5cnEyID0geXlwdHI7CisgIHl5dnNw
ICs9IHl5cjJbeXluXTsKKworeXllcnJsYWI6CisKKyAgeXlnc3NwID0geXlzc3A7CisgIHl5Z3Zz
cCA9IHl5dnNwOworICB5eWdsc3AgPSB5eWxzcDsKKyAgeXlyZXN0b3JlKHl5cnEwLCB5eXJxMik7
CisgIHl5cmVjb3ZlcigpOworICB5eXN0YXRlID0gKnl5Z3NzcDsKKyAgeXlzc3AgPSB5eWdzc3A7
CisgIHl5dnNwID0geXlndnNwOworICB5eXJxMCA9IHl5cnE7CisgIHl5cnExID0geXlycTA7Cisg
IHl5cnEyID0geXlycTA7CisgIGdvdG8geXlyZXN1bWU7Cit9CisKKyQKSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2Nv
bXBpbGVyL3Rvb2xzL2Jpc29uLnNpbXBsZQkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci90b29scy9iaXNvbi5zaW1wbGUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjk5IEBACisv
KiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGlu
ZScgbGluZXMuICAqLworCisvKiBTa2VsZXRvbiBvdXRwdXQgcGFyc2VyIGZvciBiaXNvbiwKKyAg
IENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisg
ICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg
TUEgMDIxMzksIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhp
cyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKyAgIEJpc29uIG91dHB1dCBmaWxlLCB5
b3UgbWF5IHVzZSB0aGF0IG91dHB1dCBmaWxlIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisgICBUaGlz
IHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uCisgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworCisjaWZkZWYgX19HTlVDX18K
KyNkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbHNlIC8qIG5vdCBfX0dOVUNfXyAq
LworI2lmIEhBVkVfQUxMT0NBX0gKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbHNlIC8qIG5vdCBI
QVZFX0FMTE9DQV9IICovCisjaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjZWxzZSAvKiBu
b3QgX0FJWCAqLworY2hhciAqYWxsb2NhICgpOworI2VuZGlmIC8qIG5vdCBfQUlYICovCisjZW5k
aWYgLyogbm90IEhBVkVfQUxMT0NBX0ggKi8KKyNlbmRpZiAvKiBub3QgX19HTlVDX18gKi8KKwor
ZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKiBzKTsKKworI2lmbmRlZiBhbGxvY2EKKyNpZmRlZiBf
X0dOVUNfXworI2RlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorI2Vsc2UgLyogbm90IEdO
VSBDLiAgKi8KKyNpZiAoIWRlZmluZWQgKF9fU1REQ19fKSAmJiBkZWZpbmVkIChzcGFyYykpIHx8
IGRlZmluZWQgKF9fc3BhcmNfXykgfHwgZGVmaW5lZCAoX19zcGFyYykgfHwgZGVmaW5lZCAoX19z
Z2kpCisjaW5jbHVkZSA8YWxsb2NhLmg+CisjZWxzZSAvKiBub3Qgc3BhcmMgKi8KKyNpZiAoZGVm
aW5lZCAoTVNET1MpICYmICFkZWZpbmVkIChfX1RVUkJPQ19fKSkgfHwgZGVmaW5lZCAoV0lOMzIp
CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZSAvKiBub3QgTVNET1MsIG9yIF9fVFVSQk9DX18g
Ki8KKyNpZiBkZWZpbmVkKF9BSVgpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisgI3ByYWdtYSBhbGxv
Y2EKKyNlbHNlIC8qIG5vdCBNU0RPUywgX19UVVJCT0NfXywgb3IgX0FJWCAqLworI2lmZGVmIF9f
aHB1eAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKK3ZvaWQgKmFsbG9jYSAodW5z
aWduZWQgaW50KTsKK307CisjZWxzZSAvKiBub3QgX19jcGx1c3BsdXMgKi8KK3ZvaWQgKmFsbG9j
YSAoKTsKKyNlbmRpZiAvKiBub3QgX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX2hwdXggKi8K
KyNlbmRpZiAvKiBub3QgX0FJWCAqLworI2VuZGlmIC8qIG5vdCBNU0RPUywgb3IgX19UVVJCT0Nf
XyAqLworI2VuZGlmIC8qIG5vdCBzcGFyYy4gICovCisjZW5kaWYgLyogbm90IEdOVSBDLiAgKi8K
KyNlbmRpZiAvKiBhbGxvY2Egbm90IGRlZmluZWQuICAqLworCisvKiBUaGlzIGlzIHRoZSBwYXJz
ZXIgY29kZSB0aGF0IGlzIHdyaXR0ZW4gaW50byBlYWNoIGJpc29uIHBhcnNlcgorICB3aGVuIHRo
ZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdy
YW1tYXIuCisgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlp
bmcgdGhlIGhhaXJ5IHBhcnNlcgorICB1c2VkIHdoZW4gJXNlbWFudGljX3BhcnNlciBpcyBzcGVj
aWZpZWQuICAqLworCisvKiBOb3RlOiB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGRvbGxhciBzaWdu
IGluIHRoaXMgZmlsZS4KKyAgIEl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBsaXN0IG9mIGFjdGlvbnMs
IGVhY2ggYWN0aW9uCisgICBhcyBvbmUgY2FzZSBvZiB0aGUgc3dpdGNoLiAgKi8KKworI2RlZmlu
ZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9
IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5l
IFlZQUNDRVBUCXJldHVybigwKQorI2RlZmluZSBZWUFCT1JUIAlyZXR1cm4oMSkKKyNkZWZpbmUg
WVlFUlJPUgkJZ290byB5eWVycmxhYjEKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLgorICAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkgdG8gZWFzZSB0aGUKKyAg
IHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBP
bmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4g
ICovCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorI2RlZmluZSBZWVJFQ09WRVJJTkco
KSAgKCEheXllcnJzdGF0dXMpCisjZGVmaW5lIFlZQkFDS1VQKHRva2VuLCB2YWx1ZSkgXAorZG8J
CQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAg
ICB7IHl5Y2hhciA9ICh0b2tlbiksIHl5bHZhbCA9ICh2YWx1ZSk7CQkJXAorICAgICAgeXljaGFy
MSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwK
KyAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJ
CQkJXAorICAgIHsgeXllcnJvciAoInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKTsgWVlF
UlJPUjsgfQlcCit3aGlsZSAoMCkKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJS
Q09ERQkyNTYKKworI2lmbmRlZiBZWVBVUkUKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCkKKyNlbmRp
ZgorCisjaWZkZWYgWVlQVVJFCisjaWZkZWYgWVlMU1BfTkVFREVECisjaWZkZWYgWVlMRVhfUEFS
QU0KKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQor
I2Vsc2UKKyNkZWZpbmUgWVlMRVgJCXl5bGV4KCZ5eWx2YWwsICZ5eWxsb2MpCisjZW5kaWYKKyNl
bHNlIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNpZmRlZiBZWUxFWF9QQVJBTQorI2RlZmluZSBZ
WUxFWAkJeXlsZXgoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorI2RlZmluZSBZWUxFWAkJ
eXlsZXgoJnl5bHZhbCkKKyNlbmRpZgorI2VuZGlmIC8qIG5vdCBZWUxTUF9ORUVERUQgKi8KKyNl
bmRpZgorCisvKiBJZiBub25yZWVudHJhbnQsIGdlbmVyYXRlIHRoZSB2YXJpYWJsZXMgaGVyZSAq
LworCisjaWZuZGVmIFlZUFVSRQorCitpbnQJeXljaGFyOwkJCS8qICB0aGUgbG9va2FoZWFkIHN5
bWJvbAkJKi8KK1lZU1RZUEUJeXlsdmFsOwkJCS8qICB0aGUgc2VtYW50aWMgdmFsdWUgb2YgdGhl
CQkqLworCQkJCS8qICBsb29rYWhlYWQgc3ltYm9sCQkJKi8KKworI2lmZGVmIFlZTFNQX05FRURF
RAorWVlMVFlQRSB5eWxsb2M7CQkJLyogIGxvY2F0aW9uIGRhdGEgZm9yIHRoZSBsb29rYWhlYWQJ
Ki8KKwkJCQkvKiAgc3ltYm9sCQkJCSovCisjZW5kaWYKKworaW50IHl5bmVycnM7CQkJLyogIG51
bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyICAgICAgICovCisjZW5kaWYgIC8qIG5vdCBZWVBV
UkUgKi8KKworI2lmIFlZREVCVUcgIT0gMAoraW50IHl5ZGVidWc7CQkJLyogIG5vbnplcm8gbWVh
bnMgcHJpbnQgcGFyc2UgdHJhY2UJKi8KKy8qIFNpbmNlIHRoaXMgaXMgdW5pbml0aWFsaXplZCwg
aXQgZG9lcyBub3Qgc3RvcCBtdWx0aXBsZSBwYXJzZXJzCisgICBmcm9tIGNvZXhpc3RpbmcuICAq
LworI2VuZGlmCisKKy8qICBZWUlOSVRERVBUSCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgc2l6ZSBv
ZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzCSovCisKKyNpZm5kZWYJWVlJTklUREVQVEgKKyNkZWZpbmUg
WVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogIFlZTUFYREVQVEggaXMgdGhlIG1heGltdW0g
c2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvCisgICAgKGVmZmVjdGl2ZSBvbmx5IGlmIHRoZSBi
dWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLiAgKi8KKworI2lmIFlZTUFY
REVQVEggPT0gMAorI3VuZGVmIFlZTUFYREVQVEgKKyNlbmRpZgorCisjaWZuZGVmIFlZTUFYREVQ
VEgKKyNkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKy8qIFByZXZlbnQgd2Fybmlu
ZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworaW50IHl5cGFy
c2UgKHZvaWQpOworI2VuZGlmCisMCisjaWYgX19HTlVDX18gPiAxCQkvKiBHTlUgQyBhbmQgR05V
IEMrKyBkZWZpbmUgdGhpcy4gICovCisjZGVmaW5lIF9feXlfbWVtY3B5KEZST00sVE8sQ09VTlQp
CV9fYnVpbHRpbl9tZW1jcHkoVE8sRlJPTSxDT1VOVCkKKyNlbHNlCQkJCS8qIG5vdCBHTlUgQyBv
ciBDKysgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKworLyogVGhpcyBpcyB0aGUgbW9zdCByZWxp
YWJsZSB3YXkgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMKKyAgIGluIGF2YWlsYWJsZSBidWls
dC1pbiBmdW5jdGlvbnMgb24gdmFyaW91cyBzeXN0ZW1zLiAgKi8KK3N0YXRpYyB2b2lkCitfX3l5
X21lbWNweSAoZnJvbSwgdG8sIGNvdW50KQorICAgICBjaGFyICpmcm9tOworICAgICBjaGFyICp0
bzsKKyAgICAgc2l6ZV90IGNvdW50OworeworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAg
cmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBzaXplX3QgaSA9IGNvdW50OworCisg
IHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZWxzZSAvKiBfX2NwbHVz
cGx1cyAqLworCisvKiBUaGlzIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0byBhdm9pZCBpbmNv
bXBhdGliaWxpdGllcworICAgaW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBvbiB2YXJp
b3VzIHN5c3RlbXMuICAqLworc3RhdGljIHZvaWQKK19feXlfbWVtY3B5IChjaGFyICpmcm9tLCBj
aGFyICp0bywgc2l6ZV90IGNvdW50KQoreworICByZWdpc3RlciBjaGFyICpmID0gZnJvbTsKKyAg
cmVnaXN0ZXIgY2hhciAqdCA9IHRvOworICByZWdpc3RlciBzaXplX3QgaSA9IGNvdW50OworCisg
IHdoaWxlIChpLS0gPiAwKQorICAgICp0KysgPSAqZisrOworfQorCisjZW5kaWYKKyNlbmRpZgor
CisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIFlZUEFSU0VfUEFSQU0gYXMgdGhlIG5hbWUgb2YgYW4g
YXJndW1lbnQgdG8gYmUgcGFzc2VkCisgICBpbnRvIHl5cGFyc2UuICBUaGUgYXJndW1lbnQgc2hv
dWxkIGhhdmUgdHlwZSB2b2lkICouCisgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4g
b2JqZWN0LgorICAgR3JhbW1hciBhY3Rpb25zIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlIGJ5IGNh
c3RpbmcgaXQKKyAgIHRvIHRoZSBwcm9wZXIgcG9pbnRlciB0eXBlLiAgKi8KKworI2lmZGVmIFlZ
UEFSU0VfUEFSQU0KKyNpZm5kZWYgWVlQQVJTRV9QQVJBTV9ERUNMCisjZGVmaW5lIFlZUEFSU0Vf
UEFSQU1fREVDTCB2b2lkICpZWVBBUlNFX1BBUkFNOworI2VuZGlmIAorI2Vsc2UKKyNkZWZpbmUg
WVlQQVJTRV9QQVJBTQorI2RlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKyNlbmRpZgorCitleHRl
cm4gWVlfREVDTDsKKworaW50Cit5eXBhcnNlKFlZUEFSU0VfUEFSQU1fREVDTCBZWVBBUlNFX1BB
UkFNKSB7CisgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworICByZWdpc3RlciBpbnQgeXluOworICBy
ZWdpc3RlciBzaG9ydCAqeXlzc3A7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworICBpbnQg
eXllcnJzdGF0dXM7CS8qICBudW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBt
ZXNzYWdlcyBlbmFibGVkICovCisgIGludCB5eWNoYXIxID0gMDsJCS8qICBsb29rYWhlYWQgdG9r
ZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlciAqLworCisgIHNob3J0
CXl5c3NhW1lZSU5JVERFUFRIXTsJLyogIHRoZSBzdGF0ZSBzdGFjawkJCSovCisgIFlZU1RZUEUg
eXl2c2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIHNlbWFudGljIHZhbHVlIHN0YWNrCQkqLworCisg
IHNob3J0ICp5eXNzID0geXlzc2E7CQkvKiAgcmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFy
YXRlIHBvaW50ZXJzICovCisgIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsJLyogIHRvIGFsbG93IHl5
b3ZlcmZsb3cgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZSAqLworCisjaWZkZWYgWVlMU1Bf
TkVFREVECisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOwkvKiAgdGhlIGxvY2F0aW9uIHN0
YWNrCQkJKi8KKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworICBZWUxUWVBFICp5eWxzcDsKKwor
I2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0sIHl5bHNwLS0pCisjZWxzZQor
I2RlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBzaXpl
X3QgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworI2lmZGVmIFlZUFVSRQorICBpbnQgeXlj
aGFyOworICBZWVNUWVBFIHl5bHZhbDsKKyAgaW50IHl5bmVycnM7CisjaWZkZWYgWVlMU1BfTkVF
REVECisgIFlZTFRZUEUgeXlsbG9jOworI2VuZGlmCisjZW5kaWYKKworICBZWVNUWVBFIHl5dmFs
OwkJLyogIHRoZSB2YXJpYWJsZSB1c2VkIHRvIHJldHVybgkJKi8KKwkJCQkvKiAgc2VtYW50aWMg
dmFsdWVzIGZyb20gdGhlIGFjdGlvbgkqLworCQkJCS8qICByb3V0aW5lcwkJCQkqLworCisgIGlu
dCB5eWxlbjsKKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKTsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSAwOwor
ICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJ
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNr
IHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24g
c3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0
YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXpl
ZC4gICovCisKKyAgeXlzc3AgPSB5eXNzIC0gMTsKKyAgeXl2c3AgPSB5eXZzOworI2lmZGVmIFlZ
TFNQX05FRURFRAorICB5eWxzcCA9IHl5bHM7CisjZW5kaWYKKworLyogUHVzaCBhIG5ldyBzdGF0
ZSwgd2hpY2ggaXMgZm91bmQgaW4gIHl5c3RhdGUgIC4gICovCisvKiBJbiBhbGwgY2FzZXMsIHdo
ZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgaGF2ZSBq
dXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tz
LiAgKi8KK3l5bmV3c3RhdGU6CisKKyAgKisreXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNz
cCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdpdmUgdXNlciBh
IGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjayAqLworICAgICAgLyogVXNlIGNvcGllcyBv
ZiB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvIG1l
bW9yeS4gKi8KKyAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKKyAgICAgIHNob3J0ICp5eXNz
MSA9IHl5c3M7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICAgICBZWUxUWVBFICp5eWxzMSA9IHl5
bHM7CisjZW5kaWYKKworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUg
dGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBzaXplX3Qgc2l6ZSA9IHl5c3Nw
IC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJmbG93CisgICAgICAvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZgorCSB0aGUgZGF0YSBpbiB1
c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICAqLworI2lmZGVmIFlZTFNQX05FRURFRAorICAg
ICAgLyogVGhpcyB1c2VkIHRvIGJlIGEgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBl
eHRyYSBhcmdzLAorCSBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBp
cyBhIG1hY3JvLiAgKi8KKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVyZmxvdyIs
CisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNpemUgKiBz
aXplb2YgKCp5eXZzcCksCisJCSAmeXlsczEsIHNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAm
eXlzdGFja3NpemUpOworI2Vsc2UKKyAgICAgIHl5b3ZlcmZsb3coInBhcnNlciBzdGFjayBvdmVy
ZmxvdyIsCisJCSAmeXlzczEsIHNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAmeXl2czEsIHNp
emUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAmeXlzdGFja3NpemUpOworI2VuZGlmCisKKyAgICAg
IHl5c3MgPSB5eXNzMTsgeXl2cyA9IHl5dnMxOworI2lmZGVmIFlZTFNQX05FRURFRAorICAgICAg
eXlscyA9IHl5bHMxOworI2VuZGlmCisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisgICAgICAv
KiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6
ZSA+PSBZWU1BWERFUFRIKQorCXsKKwkgIHl5ZXJyb3IoInBhcnNlciBzdGFjayBvdmVyZmxvdyIp
OworCSAgcmV0dXJuIDI7CisJfQorICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmICh5
eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworICAg
ICAgeXlzcyA9IChzaG9ydCAqKSBhbGxvY2EgKHl5c3RhY2tzaXplICogc2l6ZW9mICgqeXlzc3Ap
KTsKKyAgICAgIF9feXlfbWVtY3B5ICgoY2hhciAqKXl5c3MxLCAoY2hhciAqKXl5c3MsIHNpemUg
KiBzaXplb2YgKCp5eXNzcCkpOworICAgICAgeXl2cyA9IChZWVNUWVBFICopIGFsbG9jYSAoeXlz
dGFja3NpemUgKiBzaXplb2YgKCp5eXZzcCkpOworICAgICAgX195eV9tZW1jcHkgKChjaGFyICop
eXl2czEsIChjaGFyICopeXl2cywgc2l6ZSAqIHNpemVvZiAoKnl5dnNwKSk7CisjaWZkZWYgWVlM
U1BfTkVFREVECisgICAgICB5eWxzID0gKFlZTFRZUEUgKikgYWxsb2NhICh5eXN0YWNrc2l6ZSAq
IHNpemVvZiAoKnl5bHNwKSk7CisgICAgICBfX3l5X21lbWNweSAoKGNoYXIgKil5eWxzMSwgKGNo
YXIgKil5eWxzLCBzaXplICogc2l6ZW9mICgqeXlsc3ApKTsKKyNlbmRpZgorI2VuZGlmIC8qIG5v
IHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgc2l6ZSAtIDE7CisgICAgICB5
eXZzcCA9IHl5dnMgKyBzaXplIC0gMTsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgICAgIHl5bHNw
ID0geXlscyArIHNpemUgLSAxOworI2VuZGlmCisKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIGlm
ICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWRc
biIsIHl5c3RhY2tzaXplKTsKKyNlbmRpZgorCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5
c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworI2lmIFlZREVCVUcgIT0gMAorICBp
ZiAoeXlkZWJ1ZykKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5
eXN0YXRlKTsKKyNlbmRpZgorCisgIGdvdG8geXliYWNrdXA7CisgeXliYWNrdXA6CisKKy8qIERv
IGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyog
UmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBo
YXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKwor
ICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8g
eXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYg
ZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVN
UFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICov
CisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyNpZiBZWURFQlVHICE9IDAKKyAg
ICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKTsK
KyNlbmRpZgorICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9r
ZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRo
ICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICov
CisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERv
bid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYg
KHl5ZGVidWcpCisJZnByaW50ZihzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIik7Cisj
ZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUo
eXljaGFyKTsKKworI2lmIFlZREVCVUcgIT0gMAorICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAg
ZnByaW50ZiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLCB5eWNoYXIsIHl5dG5hbWVb
eXljaGFyMV0pOworCSAgLyogR2l2ZSB0aGUgaW5kaXZpZHVhbCBwYXJzZXIgYSB3YXkgdG8gcHJp
bnQgdGhlIHByZWNpc2UgbWVhbmluZworCSAgICAgb2YgYSB0b2tlbiwgZm9yIGZ1cnRoZXIgZGVi
dWdnaW5nIGluZm8uICAqLworI2lmZGVmIFlZUFJJTlQKKwkgIFlZUFJJTlQgKHN0ZGVyciwgeXlj
aGFyLCB5eWx2YWwpOworI2VuZGlmCisJICBmcHJpbnRmIChzdGRlcnIsICIpXG4iKTsKKwl9Cisj
ZW5kaWYKKyAgICB9CisKKyAgeXluICs9IHl5Y2hhcjE7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+
IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0geXljaGFyMSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsK
KworICB5eW4gPSB5eXRhYmxlW3l5bl07CisKKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRo
aXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorICAgICBOZWdhdGl2ZSA9PiByZWR1Y2UsIC15
eW4gaXMgcnVsZSBudW1iZXIuCisgICAgIFBvc2l0aXZlID0+IHNoaWZ0LCB5eW4gaXMgbmV3IHN0
YXRlLgorICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8g
c2hpZnQsCisgICAgICAganVzdCByZXR1cm4gc3VjY2Vzcy4KKyAgICAgMCwgb3IgbW9zdCBuZWdh
dGl2ZSBudW1iZXIgPT4gZXJyb3IuICAqLworCisgIGlmICh5eW4gPCAwKQorICAgIHsKKyAgICAg
IGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOwor
ICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAwKQorICAgIGdv
dG8geXllcnJsYWI7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisg
IC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworCisjaWYgWVlERUJVRyAhPSAwCisg
IGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJWQgKCVz
KSwgIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgIC8qIERpc2NhcmQg
dGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisgIGlmICh5eWNo
YXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICAqKyt5eXZzcCA9IHl5bHZh
bDsKKyNpZmRlZiBZWUxTUF9ORUVERUQKKyAgKisreXlsc3AgPSB5eWxsb2M7CisjZW5kaWYKKwor
ICAvKiBjb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4g
b2ZmIGVycm9yIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykgeXllcnJzdGF0dXMtLTsK
KworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKy8qIERvIHRoZSBkZWZh
dWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICAqLworeXlkZWZhdWx0OgorCisgIHl5
biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxh
YjsKKworLyogRG8gYSByZWR1Y3Rpb24uICB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8g
cmVkdWNlIHdpdGguICAqLworeXlyZWR1Y2U6CisgIHl5bGVuID0geXlyMlt5eW5dOworICBpZiAo
eXlsZW4gPiAwKQorICAgIHl5dmFsID0geXl2c3BbMS15eWxlbl07IC8qIGltcGxlbWVudCBkZWZh
dWx0IHZhbHVlIG9mIHRoZSBhY3Rpb24gKi8KKworI2lmIFlZREVCVUcgIT0gMAorICBpZiAoeXlk
ZWJ1ZykKKyAgICB7CisgICAgICBpbnQgaTsKKworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVk
dWNpbmcgdmlhIHJ1bGUgJWQgKGxpbmUgJWQpLCAiLAorCSAgICAgICB5eW4sIHl5cmxpbmVbeXlu
XSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVp
ciByZXN1bHQuICAqLworICAgICAgZm9yIChpID0geXlwcmhzW3l5bl07IHl5cmhzW2ldID4gMDsg
aSsrKQorCWZwcmludGYgKHN0ZGVyciwgIiVzICIsIHl5dG5hbWVbeXlyaHNbaV1dKTsKKyAgICAg
IGZwcmludGYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9
CisjZW5kaWYKKworJCAgIC8qIHRoZSBhY3Rpb24gZmlsZSBnZXRzIGNvcGllZCBpbiBpbiBwbGFj
ZSBvZiB0aGlzIGRvbGxhcnNpZ24gKi8KKyAgeXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09IHl5
bGVuOworI2lmZGVmIFlZTFNQX05FRURFRAorICB5eWxzcCAtPSB5eWxlbjsKKyNlbmRpZgorCisj
aWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIHsKKyAgICAgIHNob3J0ICpzc3Ax
ID0geXlzcyAtIDE7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsK
KyAgICAgIHdoaWxlIChzc3AxICE9IHl5c3NwKQorCWZwcmludGYgKHN0ZGVyciwgIiAlZCIsICor
K3NzcDEpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKwor
ICAqKyt5eXZzcCA9IHl5dmFsOworCisjaWZkZWYgWVlMU1BfTkVFREVECisgIHl5bHNwKys7Cisg
IGlmICh5eWxlbiA9PSAwKQorICAgIHsKKyAgICAgIHl5bHNwLT5maXJzdF9saW5lID0geXlsbG9j
LmZpcnN0X2xpbmU7CisgICAgICB5eWxzcC0+Zmlyc3RfY29sdW1uID0geXlsbG9jLmZpcnN0X2Nv
bHVtbjsKKyAgICAgIHl5bHNwLT5sYXN0X2xpbmUgPSAoeXlsc3AtMSktPmxhc3RfbGluZTsKKyAg
ICAgIHl5bHNwLT5sYXN0X2NvbHVtbiA9ICh5eWxzcC0xKS0+bGFzdF9jb2x1bW47CisgICAgICB5
eWxzcC0+dGV4dCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXlsc3AtPmxhc3Rf
bGluZSA9ICh5eWxzcCt5eWxlbi0xKS0+bGFzdF9saW5lOworICAgICAgeXlsc3AtPmxhc3RfY29s
dW1uID0gKHl5bHNwK3l5bGVuLTEpLT5sYXN0X2NvbHVtbjsKKyAgICB9CisjZW5kaWYKKworICAv
KiBOb3cgInNoaWZ0IiB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uCisgICAgIERldGVybWlu
ZSB3aGF0IHN0YXRlIHRoYXQgZ29lcyB0bywKKyAgICAgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBv
cHBlZCBiYWNrIHRvCisgICAgIGFuZCB0aGUgcnVsZSBudW1iZXIgcmVkdWNlZCBieS4gICovCisK
KyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRCQVNF
XSArICp5eXNzcDsKKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5
eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRl
XTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworCisg
IGdvdG8geXluZXdzdGF0ZTsKKworeXllcnJsYWI6ICAgLyogaGVyZSBvbiBkZXRlY3RpbmcgZXJy
b3IgKi8KKworICBpZiAoISB5eWVycnN0YXR1cykKKyAgICAvKiBJZiBub3QgYWxyZWFkeSByZWNv
dmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKyAgICB7CisgICAg
ICArK3l5bmVycnM7CisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKworICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisJ
eworCSAgaW50IHNpemUgPSAwOworCSAgY2hhciAqbXNnOworCSAgaW50IHgsIGNvdW50OworCisJ
ICBjb3VudCA9IDA7CisJICAvKiBTdGFydCBYIGF0IC15eW4gaWYgbmVjIHRvIGF2b2lkIG5lZ2F0
aXZlIGluZGV4ZXMgaW4geXljaGVjay4gICovCisJICBmb3IgKHggPSAoeXluIDwgMCA/IC15eW4g
OiAwKTsKKwkgICAgICAgeCA8IChzaXplb2YoeXl0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7IHgr
KykKKwkgICAgaWYgKHl5Y2hlY2tbeCArIHl5bl0gPT0geCkKKwkgICAgICBzaXplICs9IHN0cmxl
bih5eXRuYW1lW3hdKSArIDE1LCBjb3VudCsrOworCSAgbXNnID0gKGNoYXIgKikgbWFsbG9jKHNp
emUgKyAxNSk7CisJICBpZiAobXNnICE9IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkobXNnLCAi
cGFyc2UgZXJyb3IiKTsKKworCSAgICAgIGlmIChjb3VudCA8IDUpCisJCXsKKwkJICBjb3VudCA9
IDA7CisJCSAgZm9yICh4ID0gKHl5biA8IDAgPyAteXluIDogMCk7CisJCSAgICAgICB4IDwgKHNp
emVvZih5eXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsgeCsrKQorCQkgICAgaWYgKHl5Y2hlY2tb
eCArIHl5bl0gPT0geCkKKwkJICAgICAgeworCQkJc3RyY2F0KG1zZywgY291bnQgPT0gMCA/ICIs
IGV4cGVjdGluZyBgIiA6ICIgb3IgYCIpOworCQkJc3RyY2F0KG1zZywgeXl0bmFtZVt4XSk7CisJ
CQlzdHJjYXQobXNnLCAiJyIpOworCQkJY291bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAgICAg
eXllcnJvcihtc2cpOworCSAgICAgIGZyZWUobXNnKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB5
eWVycm9yICgicGFyc2UgZXJyb3I7IGFsc28gdmlydHVhbCBtZW1vcnkgZXhjZWVkZWQiKTsKKwl9
CisgICAgICBlbHNlCisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisJeXllcnJvcigicGFy
c2UgZXJyb3IiKTsKKyAgICB9CisKKyAgZ290byB5eWVycmxhYjE7Cit5eWVycmxhYjE6ICAgLyog
aGVyZSBvbiBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gKi8KKworICBpZiAo
eXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBpZiBqdXN0IHRyaWVkIGFuZCBmYWls
ZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuIGVycm9yLCBkaXNjYXJkIGl0LiAg
Ki8KKworICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisgICAg
ICBpZiAoeXljaGFyID09IFlZRU9GKQorCVlZQUJPUlQ7CisKKyNpZiBZWURFQlVHICE9IDAKKyAg
ICAgIGlmICh5eWRlYnVnKQorCWZwcmludGYoc3RkZXJyLCAiRGlzY2FyZGluZyB0b2tlbiAlZCAo
JXMpLlxuIiwgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKyNlbmRpZgorCisgICAgICB5eWNo
YXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2th
aGVhZCB0b2tlbgorICAgICBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IgdG9rZW4uICAqLworCisg
IHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMg
dGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKK3l5ZXJyZGVmYXVsdDogIC8qIGN1cnJl
bnQgc3RhdGUgZG9lcyBub3QgZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgdGhlIGVycm9yIHRva2Vu
LiAqLworCisjaWYgMAorICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxp
Y2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKyAgICAgc2hvdWxkIHNoaWZ0IHRoZW0uICAqLworICB5
eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBh
bnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4qLworICBpZiAoeXluKSBnb3RvIHl5ZGVm
YXVsdDsKKyNlbmRpZgorCit5eWVycnBvcDogICAvKiBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVj
YXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbiAqLworCisgIGlmICh5eXNzcCA9
PSB5eXNzKSBZWUFCT1JUOworICB5eXZzcC0tOworICB5eXN0YXRlID0gKi0teXlzc3A7CisjaWZk
ZWYgWVlMU1BfTkVFREVECisgIHl5bHNwLS07CisjZW5kaWYKKworI2lmIFlZREVCVUcgIT0gMAor
ICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqc3NwMSA9IHl5c3MgLSAxOworICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworICAgICAgd2hp
bGUgKHNzcDEgIT0geXlzc3ApCisJZnByaW50ZiAoc3RkZXJyLCAiICVkIiwgKisrc3NwMSk7Cisg
ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCit5eWVycmhhbmRs
ZToKKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAg
IGdvdG8geXllcnJkZWZhdWx0OworCisgIHl5biArPSBZWVRFUlJPUjsKKyAgaWYgKHl5biA8IDAg
fHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSBZWVRFUlJPUikKKyAgICBnb3RvIHl5
ZXJyZGVmYXVsdDsKKworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPCAwKQorICAg
IHsKKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorCWdvdG8geXllcnJwb3A7CisgICAgICB5eW4g
PSAteXluOworICAgICAgZ290byB5eXJlZHVjZTsKKyAgICB9CisgIGVsc2UgaWYgKHl5biA9PSAw
KQorICAgIGdvdG8geXllcnJwb3A7CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUND
RVBUOworCisjaWYgWVlERUJVRyAhPSAwCisgIGlmICh5eWRlYnVnKQorICAgIGZwcmludGYoc3Rk
ZXJyLCAiU2hpZnRpbmcgZXJyb3IgdG9rZW4sICIpOworI2VuZGlmCisKKyAgKisreXl2c3AgPSB5
eWx2YWw7CisjaWZkZWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsbG9jOworI2VuZGlm
CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworfQpJbmRleDogQU5HTEUv
c3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvQ29u
ZmlnLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbmZp
Zy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBm
b3JtYXQsIHR5cGUKKy8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMg
RUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCisvLyBbRUdMIDEuNF0gc2VjdGlv
biAzLjQgcGFnZSAxNS4KKworI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKKworI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIGVnbAoreworQ29uZmlnOjpD
b25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdM
aW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQg
ZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCisgICAgOiBtRGlzcGxheU1v
ZGUoZGlzcGxheU1vZGUpLCBtUmVuZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCks
IG1EZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxlKG11
bHRpU2FtcGxlKQoreworICAgIHNldChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heEludGVy
dmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUp
OworfQorCit2b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQoreworICAgIG1CdWZmZXJTaXplID0g
MDsKKyAgICBtUmVkU2l6ZSA9IDA7CisgICAgbUdyZWVuU2l6ZSA9IDA7CisgICAgbUJsdWVTaXpl
ID0gMDsKKyAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7CisgICAgbUFscGhhU2l6ZSA9IDA7CisgICAg
bUFscGhhTWFza1NpemUgPSAwOworICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRfQ0FS
RTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db2xvckJ1
ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKKyAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RPTlRf
Q0FSRTsKKyAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOworICAgIG1Db25mb3JtYW50ID0g
MDsKKyAgICBtRGVwdGhTaXplID0gMDsKKyAgICBtTGV2ZWwgPSAwOworICAgIG1NYXRjaE5hdGl2
ZVBpeG1hcCA9IEVHTF9OT05FOworICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOworICAgIG1NYXhQ
QnVmZmVySGVpZ2h0ID0gMDsKKyAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7CisgICAgbU1heFN3
YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IEVHTF9E
T05UX0NBUkU7CisgICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1O
YXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9DQVJF
OworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOworICAgIG1TYW1wbGVC
dWZmZXJzID0gMDsKKyAgICBtU2FtcGxlcyA9IDA7CisgICAgbVN0ZW5jaWxTaXplID0gMDsKKyAg
ICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKKyAgICBtVHJhbnNwYXJlbnRUeXBlID0g
RUdMX05PTkU7CisgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAg
IG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOworICAgIG1UcmFuc3BhcmVu
dEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Cit9CisKK3ZvaWQgQ29uZmlnOjpzZXQoRDNERElT
UExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVy
dmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2ls
Rm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgc3dpdGNoIChyZW5kZXJUYXJnZXRG
b3JtYXQpCisgICAgeworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgIG1CdWZm
ZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9
IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAgICBtQnVm
ZmVyU2l6ZSA9IDMyOworICAgICAgICBtUmVkU2l6ZSA9IDEwOworICAgICAgICBtR3JlZW5TaXpl
ID0gMTA7CisgICAgICAgIG1CbHVlU2l6ZSA9IDEwOworICAgICAgICBtQWxwaGFTaXplID0gMjsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgbUJ1
ZmZlclNpemUgPSAzMjsKKyAgICAgICAgbVJlZFNpemUgPSA4OworICAgICAgICBtR3JlZW5TaXpl
ID0gODsKKyAgICAgICAgbUJsdWVTaXplID0gODsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDg7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICBtQnVmZmVy
U2l6ZSA9IDE2OworICAgICAgICBtUmVkU2l6ZSA9IDU7CisgICAgICAgIG1HcmVlblNpemUgPSA2
OworICAgICAgICBtQmx1ZVNpemUgPSA1OworICAgICAgICBtQWxwaGFTaXplID0gMDsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgbUJ1ZmZlclNp
emUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsK
KyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDA7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgIG1CdWZmZXJTaXpl
ID0gMzI7CisgICAgICAgIG1SZWRTaXplID0gODsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDg7Cisg
ICAgICAgIG1CbHVlU2l6ZSA9IDg7CisgICAgICAgIG1BbHBoYVNpemUgPSAwOworICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIg
Zm9ybWF0cyBzaG91bGQgbm90IGJlIHZhbGlkCisgICAgfQorCisgICAgbUx1bWluYW5jZVNpemUg
PSAwOworICAgIG1BbHBoYU1hc2tTaXplID0gMDsKKyAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVH
TF9GQUxTRTsKKyAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7CisgICAgbUNvbG9y
QnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOworICAgIG1Db25maWdDYXZlYXQgPSAoZGlzcGxh
eU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9TTE9X
X0NPTkZJRzsKKyAgICBtQ29uZmlnSUQgPSAwOworICAgIG1Db25mb3JtYW50ID0gRUdMX09QRU5H
TF9FUzJfQklUOworCisgICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCisgICAgeworLy8g
ICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgorLy8gICAgICBtRGVwdGhTaXplID0gMTY7Cisv
LyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7CisvLyAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RG
TVRfRDMyOgorICAgICAgICBtRGVwdGhTaXplID0gMzI7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9
IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6CisgICAgICAgIG1E
ZXB0aFNpemUgPSAxNTsKKyAgICAgICAgbVN0ZW5jaWxTaXplID0gMTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEQzREZNVF9EMjRTODoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDI0OworICAg
ICAgICBtU3RlbmNpbFNpemUgPSA4OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNERk1U
X0QyNFg4OgorICAgICAgICBtRGVwdGhTaXplID0gMjQ7CisgICAgICAgIG1TdGVuY2lsU2l6ZSA9
IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAg
bURlcHRoU2l6ZSA9IDI0OworICAgICAgICBtU3RlbmNpbFNpemUgPSA0OworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgICAgbURlcHRoU2l6ZSA9IDE2OworICAg
ICAgICBtU3RlbmNpbFNpemUgPSAwOworICAgICAgICBicmVhazsKKy8vICAgIGNhc2UgRDNERk1U
X0QzMkZfTE9DS0FCTEU6CisvLyAgICAgIG1EZXB0aFNpemUgPSAzMjsKKy8vICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKKy8vICAgICAgYnJlYWs7CisvLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6Cisv
LyAgICAgIG1EZXB0aFNpemUgPSAyNDsKKy8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKKy8vICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIG1MZXZlbCA9IDA7CisgICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Cisg
ICAgbU1heFBCdWZmZXJXaWR0aCA9IDA7CisgICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOworICAg
IG1NYXhQQnVmZmVyUGl4ZWxzID0gMDsKKyAgICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50ZXJ2
YWw7CisgICAgbU1pblN3YXBJbnRlcnZhbCA9IG1pbkludGVydmFsOworICAgIG1OYXRpdmVSZW5k
ZXJhYmxlID0gRUdMX0ZBTFNFOworICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7CisgICAgbU5hdGl2
ZVZpc3VhbFR5cGUgPSAwOworICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJ
VDsKKyAgICBtU2FtcGxlQnVmZmVycyA9IG11bHRpU2FtcGxlID8gMSA6IDA7CisgICAgbVNhbXBs
ZXMgPSBtdWx0aVNhbXBsZTsKKyAgICBtU3VyZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQgfCBF
R0xfV0lORE9XX0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7CisgICAgbVRy
YW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOworICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gMDsK
KyAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gMDsKKyAgICBtVHJhbnNwYXJlbnRCbHVlVmFs
dWUgPSAwOworfQorCitFR0xDb25maWcgQ29uZmlnOjpnZXRIYW5kbGUoKSBjb25zdAoreworICAg
IHJldHVybiAoRUdMQ29uZmlnKShzaXplX3QpbUNvbmZpZ0lEOworfQorCitTb3J0Q29uZmlnOjpT
b3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKKyAgICA6IG1XYW50UmVkKGZhbHNl
KSwgbVdhbnRHcmVlbihmYWxzZSksIG1XYW50Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFsc2Up
LCBtV2FudEx1bWluYW5jZShmYWxzZSkKK3sKKyAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhh
dHRyaWJMaXN0KTsKK30KKwordm9pZCBTb3J0Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9uZW50
cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCit7CisgICAgLy8gW0VHTF0gc2VjdGlvbiAzLjQu
MSBwYWdlIDI0CisgICAgLy8gU29ydGluZyBydWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVtYmVy
IG9mIGNvbG9yIGJpdHMsIG5vdCBjb25zaWRlcmluZworICAgIC8vIGNvbXBvbmVudHMgdGhhdCBh
cmUgMCBvciBkb24ndC1jYXJlLgorICAgIGZvciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0cmli
TGlzdDsgYXR0clswXSAhPSBFR0xfTk9ORTsgYXR0ciArPSAyKQorICAgIHsKKyAgICAgICAgaWYg
KGF0dHJbMV0gIT0gMCAmJiBhdHRyWzFdICE9IEVHTF9ET05UX0NBUkUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYXR0clswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgIG1XYW50UmVkID0gdHJ1ZTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50QWxw
aGEgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6
IG1XYW50THVtaW5hbmNlID0gdHJ1ZTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0VHTGludCBTb3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShjb25z
dCBDb25maWcgJmNvbmZpZykgY29uc3QKK3sKKyAgICBFR0xpbnQgdG90YWwgPSAwOworCisgICAg
aWYgKG1XYW50UmVkKSAgICAgICB0b3RhbCArPSBjb25maWcubVJlZFNpemU7CisgICAgaWYgKG1X
YW50R3JlZW4pICAgICB0b3RhbCArPSBjb25maWcubUdyZWVuU2l6ZTsKKyAgICBpZiAobVdhbnRC
bHVlKSAgICAgIHRvdGFsICs9IGNvbmZpZy5tQmx1ZVNpemU7CisgICAgaWYgKG1XYW50QWxwaGEp
ICAgICB0b3RhbCArPSBjb25maWcubUFscGhhU2l6ZTsKKyAgICBpZiAobVdhbnRMdW1pbmFuY2Up
IHRvdGFsICs9IGNvbmZpZy5tTHVtaW5hbmNlU2l6ZTsKKworICAgIHJldHVybiB0b3RhbDsKK30K
KworYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29u
ZmlnICp5KSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMpKCp4LCAqeSk7Cit9CisKK2Jvb2wg
U29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkg
Y29uc3QKK3sKKyAgICAjZGVmaW5lIFNPUlQoYXR0cmlidXRlKSAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKHguYXR0cmlidXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAgICAg
IFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHJldHVybiB4LmF0dHJpYnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwKKyAg
ICAgICAgfQorCisgICAgTUVUQV9BU1NFUlQoRUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcgJiYg
RUdMX1NMT1dfQ09ORklHIDwgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRyk7CisgICAgU09SVCht
Q29uZmlnQ2F2ZWF0KTsKKworICAgIE1FVEFfQVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdMX0xV
TUlOQU5DRV9CVUZGRVIpOworICAgIFNPUlQobUNvbG9yQnVmZmVyVHlwZSk7CisKKyAgICAvLyBC
eSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcgdGhv
c2UgdGhhdCBhcmUgcmVxdWVzdGVkIHRvIGJlID4gMC4KKyAgICBFR0xpbnQgeENvbXBvbmVudHNT
aXplID0gd2FudGVkQ29tcG9uZW50c1NpemUoeCk7CisgICAgRUdMaW50IHlDb21wb25lbnRzU2l6
ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHkpOworICAgIGlmICh4Q29tcG9uZW50c1NpemUgIT0g
eUNvbXBvbmVudHNTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6ZSA+
IHlDb21wb25lbnRzU2l6ZTsKKyAgICB9CisKKyAgICBTT1JUKG1CdWZmZXJTaXplKTsKKyAgICBT
T1JUKG1TYW1wbGVCdWZmZXJzKTsKKyAgICBTT1JUKG1TYW1wbGVzKTsKKyAgICBTT1JUKG1EZXB0
aFNpemUpOworICAgIFNPUlQobVN0ZW5jaWxTaXplKTsKKyAgICBTT1JUKG1BbHBoYU1hc2tTaXpl
KTsKKyAgICBTT1JUKG1OYXRpdmVWaXN1YWxUeXBlKTsKKyAgICBTT1JUKG1Db25maWdJRCk7CisK
KyAgICAjdW5kZWYgU09SVAorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBXZSdkIGxpa2Ug
dG8gdXNlIFNvcnRDb25maWcgdG8gYWxzbyBlbGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3MuCisv
LyBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2UgbmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRoIGRp
ZmZlcmVudCBwZXItUkdCLWNvbXBvbmVudCBsYXlvdXRzLAorLy8gYnV0IHRoZSBzYW1lIHRvdGFs
LgorLy8gNTU1MSBhbmQgNTY1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZmZXJl
bnQuCisvLyA1NTUxIGFuZCA1NTUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUgaXMg
ZGlmZmVyZW50LgorY29uc3QgRUdMaW50IENvbmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQorewor
ICAgIEVHTF9SRURfU0laRSwgMSwKKyAgICBFR0xfR1JFRU5fU0laRSwgMSwKKyAgICBFR0xfQkxV
RV9TSVpFLCAxLAorICAgIEVHTF9MVU1JTkFOQ0VfU0laRSwgMSwKKyAgICAvLyBCVVQgTk9UIEFM
UEhBCisgICAgRUdMX05PTkUKK307CisKK0NvbmZpZ1NldDo6Q29uZmlnU2V0KCkKKyAgICA6IG1T
ZXQoU29ydENvbmZpZyhtU29ydEF0dHJpYnMpKQoreworfQorCit2b2lkIENvbmZpZ1NldDo6YWRk
KEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xp
bnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpCit7CisgICAgQ29uZmln
IGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWwsIHJl
bmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSk7CisKKyAg
ICBtU2V0Lmluc2VydChjb25maWcpOworfQorCitzaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVNldC5zaXplKCk7Cit9CisKK2Jvb2wgQ29uZmlnU2V0OjpnZXRD
b25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xp
bnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgdmVjdG9yPGNvbnN0IENv
bmZpZyo+IHBhc3NlZDsKKyAgICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7CisKKyAgICBm
b3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7
IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAgIGNv
bnN0IEVHTGludCAqYXR0cmlidXRlID0gYXR0cmliTGlzdDsKKworICAgICAgICB3aGlsZSAoYXR0
cmlidXRlWzBdICE9IEVHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0
dHJpYnV0ZVswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVS
X1NJWkU6ICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXpl
ID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bUJsdWVTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1HcmVlblNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAg
ICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfU1RF
TkNJTF9TSVpFOiAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmln
Q2F2ZWF0ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1MZXZlbCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklT
VUFMX1RZUEU6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
U0FNUExFUzogICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2Ft
cGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChj
b25maWctPm1TdXJmYWNlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVf
VkFMVUU6ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmli
dXRlWzFdOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BB
UkVOVF9HUkVFTl9WQUxVRTogICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1
ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVu
dFJlZFZhbHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5t
QmluZFRvVGV4dHVyZVJHQiA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9
IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0JBID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVS
VkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1J
TkFOQ0VfU0laRTogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1h
c2tTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tQ29sb3JCdWZmZXJUeXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRj
aCA9IChjb25maWctPm1SZW5kZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRl
WzFdOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDog
ICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6
ICAgICAgICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVb
MV0pID09IGF0dHJpYnV0ZVsxXTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhc3NlZC5wdXNoX2Jh
Y2soJipjb25maWcpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3MpCisgICAg
eworICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25maWco
YXR0cmliTGlzdCkpOworCisgICAgICAgIEVHTGludCBpbmRleDsKKyAgICAgICAgZm9yIChpbmRl
eCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGludD4o
cGFzc2VkLnNpemUoKSk7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZ3Nb
aW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAgICAg
ICAqbnVtQ29uZmlnID0gaW5kZXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpu
dW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citjb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRs
ZSkKK3sKKyAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9
IG1TZXQuZW5kKCk7IGNvbmZpZysrKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZy0+Z2V0SGFu
ZGxlKCkgPT0gY29uZmlnSGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJigq
Y29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorfQpJbmRl
eDogQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
RUdML0NvbmZpZy5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENv
bmZpZy5oOiBEZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUgZm9y
bWF0LCB0eXBlCisvLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRzIEVH
TENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24g
My40IHBhZ2UgMTUuCisKKyNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8KKyNkZWZpbmUgSU5DTFVE
RV9DT05GSUdfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5j
bHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKKworY2xhc3MgQ29u
ZmlnCit7CisgIHB1YmxpYzoKKyAgICBDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUs
IEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1B
VCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGlu
dCBtdWx0aVNhbXBsZSk7CisKKyAgICB2b2lkIHNldERlZmF1bHRzKCk7CisgICAgdm9pZCBzZXQo
RDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGlu
dCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1B
VCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7CisgICAgRUdMQ29uZmln
IGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgY29uc3QgRDNERElTUExBWU1PREUgbURpc3BsYXlN
b2RlOworICAgIGNvbnN0IEQzREZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgIGNvbnN0
IEQzREZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIGNvbnN0IEVHTGludCBtTXVsdGlT
YW1wbGU7CisKKyAgICBFR0xpbnQgbUJ1ZmZlclNpemU7ICAgICAgICAgICAgICAvLyBEZXB0aCBv
ZiB0aGUgY29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1SZWRTaXplOyAgICAgICAgICAgICAgICAg
Ly8gQml0cyBvZiBSZWQgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtR3JlZW5TaXpl
OyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgR3JlZW4gaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAg
IEVHTGludCBtQmx1ZVNpemU7ICAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQmx1ZSBpbiB0aGUg
Y29sb3IgYnVmZmVyCisgICAgRUdMaW50IG1MdW1pbmFuY2VTaXplOyAgICAgICAgICAgLy8gQml0
cyBvZiBMdW1pbmFuY2UgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAgIEVHTGludCBtQWxwaGFTaXpl
OyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgaW4gdGhlIGNvbG9yIGJ1ZmZlcgorICAg
IEVHTGludCBtQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgTWFzayBp
biB0aGUgbWFzayBidWZmZXIKKyAgICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCOyAgICAv
LyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQiB0ZXh0dXJlcy4KKyAgICBFR0xCb29sZWFuIG1CaW5k
VG9UZXh0dXJlUkdCQTsgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQkEgdGV4dHVyZXMuCisg
ICAgRUdMZW51bSBtQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgLy8gQ29sb3IgYnVmZmVyIHR5cGUK
KyAgICBFR0xlbnVtIG1Db25maWdDYXZlYXQ7ICAgICAgICAgICAvLyBBbnkgY2F2ZWF0cyBmb3Ig
dGhlIGNvbmZpZ3VyYXRpb24KKyAgICBFR0xpbnQgbUNvbmZpZ0lEOyAgICAgICAgICAgICAgICAv
LyBVbmlxdWUgRUdMQ29uZmlnIGlkZW50aWZpZXIKKyAgICBFR0xpbnQgbUNvbmZvcm1hbnQ7ICAg
ICAgICAgICAgICAvLyBXaGV0aGVyIGNvbnRleHRzIGNyZWF0ZWQgd2l0aCB0aGlzIGNvbmZpZyBh
cmUgY29uZm9ybWFudAorICAgIEVHTGludCBtRGVwdGhTaXplOyAgICAgICAgICAgICAgIC8vIEJp
dHMgb2YgWiBpbiB0aGUgZGVwdGggYnVmZmVyCisgICAgRUdMaW50IG1MZXZlbDsgICAgICAgICAg
ICAgICAgICAgLy8gRnJhbWUgYnVmZmVyIGxldmVsCisgICAgRUdMQm9vbGVhbiBtTWF0Y2hOYXRp
dmVQaXhtYXA7ICAgLy8gTWF0Y2ggdGhlIG5hdGl2ZSBwaXhtYXAgZm9ybWF0CisgICAgRUdMaW50
IG1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICAgLy8gTWF4aW11bSB3aWR0aCBvZiBwYnVmZmVyCisg
ICAgRUdMaW50IG1NYXhQQnVmZmVySGVpZ2h0OyAgICAgICAgLy8gTWF4aW11bSBoZWlnaHQgb2Yg
cGJ1ZmZlcgorICAgIEVHTGludCBtTWF4UEJ1ZmZlclBpeGVsczsgICAgICAgIC8vIE1heGltdW0g
c2l6ZSBvZiBwYnVmZmVyCisgICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICAgLy8g
TWF4aW11bSBzd2FwIGludGVydmFsCisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7ICAgICAg
ICAgLy8gTWluaW11bSBzd2FwIGludGVydmFsCisgICAgRUdMQm9vbGVhbiBtTmF0aXZlUmVuZGVy
YWJsZTsgICAgLy8gRUdMX1RSVUUgaWYgbmF0aXZlIHJlbmRlcmluZyBBUElzIGNhbiByZW5kZXIg
dG8gc3VyZmFjZQorICAgIEVHTGludCBtTmF0aXZlVmlzdWFsSUQ7ICAgICAgICAgIC8vIEhhbmRs
ZSBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB2aXN1YWwKKyAgICBFR0xpbnQgbU5hdGl2ZVZpc3Vh
bFR5cGU7ICAgICAgICAvLyBOYXRpdmUgdmlzdWFsIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmlz
dWFsCisgICAgRUdMaW50IG1SZW5kZXJhYmxlVHlwZTsgICAgICAgICAgLy8gV2hpY2ggY2xpZW50
IHJlbmRlcmluZyBBUElzIGFyZSBzdXBwb3J0ZWQuCisgICAgRUdMaW50IG1TYW1wbGVCdWZmZXJz
OyAgICAgICAgICAgLy8gTnVtYmVyIG9mIG11bHRpc2FtcGxlIGJ1ZmZlcnMKKyAgICBFR0xpbnQg
bVNhbXBsZXM7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgcGl4ZWwK
KyAgICBFR0xpbnQgbVN0ZW5jaWxTaXplOyAgICAgICAgICAgICAvLyBCaXRzIG9mIFN0ZW5jaWwg
aW4gdGhlIHN0ZW5jaWwgYnVmZmVyCisgICAgRUdMaW50IG1TdXJmYWNlVHlwZTsgICAgICAgICAg
ICAgLy8gV2hpY2ggdHlwZXMgb2YgRUdMIHN1cmZhY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAgRUdM
ZW51bSBtVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgLy8gVHlwZSBvZiB0cmFuc3BhcmVuY3kgc3Vw
cG9ydGVkCisgICAgRUdMaW50IG1UcmFuc3BhcmVudFJlZFZhbHVlOyAgICAgLy8gVHJhbnNwYXJl
bnQgcmVkIHZhbHVlCisgICAgRUdMaW50IG1UcmFuc3BhcmVudEdyZWVuVmFsdWU7ICAgLy8gVHJh
bnNwYXJlbnQgZ3JlZW4gdmFsdWUKKyAgICBFR0xpbnQgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlOyAg
ICAvLyBUcmFuc3BhcmVudCBibHVlIHZhbHVlCit9OworCisvLyBGdW5jdGlvbiBvYmplY3QgdXNl
ZCBieSBTVEwgc29ydGluZyByb3V0aW5lcyBmb3Igb3JkZXJpbmcgQ29uZmlncyBhY2NvcmRpbmcg
dG8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0LgorY2xhc3MgU29ydENvbmZpZworeworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgU29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3Qp
OworCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmlnICp5
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25m
aWcgJnkpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgdm9pZCBzY2FuRm9yV2FudGVkQ29tcG9u
ZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOworICAgIEVHTGludCB3YW50ZWRDb21wb25l
bnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29uc3Q7CisKKyAgICBib29sIG1XYW50UmVk
OworICAgIGJvb2wgbVdhbnRHcmVlbjsKKyAgICBib29sIG1XYW50Qmx1ZTsKKyAgICBib29sIG1X
YW50QWxwaGE7CisgICAgYm9vbCBtV2FudEx1bWluYW5jZTsKK307CisKK2NsYXNzIENvbmZpZ1Nl
dAoreworICAgIGZyaWVuZCBEaXNwbGF5OworCisgIHB1YmxpYzoKKyAgICBDb25maWdTZXQoKTsK
KworICAgIHZvaWQgYWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dh
cEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUp
OworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZp
ZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwg
RUdMaW50ICpudW1Db25maWcpOworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdMQ29uZmln
IGNvbmZpZ0hhbmRsZSk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQ29uZmlnU2V0KTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0Q29uZmln
PiBTZXQ7CisgICAgdHlwZWRlZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIFNldCBtU2V0
OworCisgICAgc3RhdGljIGNvbnN0IEVHTGludCBtU29ydEF0dHJpYnNbXTsKK307Cit9CisKKyNl
bmRpZiAgIC8vIElOQ0xVREVfQ09ORklHX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ3MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRGlzcGxheS5jcHA6IEltcGxl
bWVudHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAor
Ly8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlz
cGxheS4KKy8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KKworI2luY2x1ZGUgImxp
YkVHTC9EaXNwbGF5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9y
PgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5o
IgorCisjZGVmaW5lIFJFRl9SQVNUIDAgICAvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmlu
aW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKwor
bmFtZXNwYWNlIGVnbAoreworRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkgOiBt
RGMoZGV2aWNlQ29udGV4dCkKK3sKKyAgICBtRDNkOSA9IE5VTEw7CisgICAgbURldmljZSA9IE5V
TEw7CisKKyAgICBtQWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVMVDsKKworICAgICNpZiBSRUZf
UkFTVCA9PSAxIHx8IGRlZmluZWQoRk9SQ0VfUkVGX1JBU1QpCisgICAgICAgIG1EZXZpY2VUeXBl
ID0gRDNEREVWVFlQRV9SRUY7CisgICAgI2Vsc2UKKyAgICAgICAgbURldmljZVR5cGUgPSBEM0RE
RVZUWVBFX0hBTDsKKyAgICAjZW5kaWYKKworICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSAxOworICAg
IG1NYXhTd2FwSW50ZXJ2YWwgPSAxOworICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKK30KKworRGlz
cGxheTo6fkRpc3BsYXkoKQoreworICAgIHRlcm1pbmF0ZSgpOworfQorCitib29sIERpc3BsYXk6
OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShEM0Rf
U0RLX1ZFUlNJT04pOworCisgICAgaWYgKG1EM2Q5KQorICAgIHsKKyAgICAgICAgaWYgKG1EYyAh
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBjb3Jy
ZXNwb25kcyB0bworICAgICAgICB9CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+
R2V0RGV2aWNlQ2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5Q
aXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbUQzZDkgPSBOVUxMOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbU1pblN3YXBJbnRl
cnZhbCA9IDQ7CisgICAgICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKKworICAgICAgICAg
ICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5U
RVJWQUxfSU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50
ZXJ2YWwsIDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
MCk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAm
IEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6
bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1h
eFN3YXBJbnRlcnZhbCwgMSk7fQorICAgICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRh
dGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKSAgICAgICB7bU1pblN3YXBJ
bnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVydmFs
ID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7fQorICAgICAgICAgICAgaWYgKG1EZXZp
Y2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUp
ICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBt
TWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQorICAgICAg
ICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2Fw
SW50ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZh
bCwgNCk7fQorCisgICAgICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0
c1tdID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGTVRfQTFSNUc1QjUsCisg
ICAgICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNv
bmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5n
IGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisgICAg
ICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgICAgIEQzREZNVF9SNUc2
QjUsCisgICAgICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgICAgIEQz
REZNVF9YOFI4RzhCOAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgRDNERk9S
TUFUIGRlcHRoU3RlbmNpbEZvcm1hdHNbXSA9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAv
LyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDMyLAorICAg
ICAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKKyAgICAgICAgICAgICAgICBEM0RGTVRfRDI0Uzgs
CisgICAgICAgICAgICAgICAgRDNERk1UX0QyNFg4LAorICAgICAgICAgICAgLy8gIEQzREZNVF9E
MjRYNFM0LAorICAgICAgICAgICAgICAgIEQzREZNVF9EMTYsCisgICAgICAgICAgICAvLyAgRDNE
Rk1UX0QzMkZfTE9DS0FCTEUsCisgICAgICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAorICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2Rl
OworICAgICAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1
cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAgICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7CisK
KyAgICAgICAgICAgIGZvciAoaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBzaXpl
b2YocmVuZGVyVGFyZ2V0Rm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5kZXgr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07CisKKyAgICAgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKworICAgICAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGRlcHRoU3RlbmNpbEluZGV4ID0gMDsgZGVwdGhTdGVuY2ls
SW5kZXggPCBzaXplb2YoZGVwdGhTdGVuY2lsRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsg
ZGVwdGhTdGVuY2lsSW5kZXgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZv
cm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJU
WVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0Rl
cHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmZpZ1NldC5hZGQoY3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcEludGVy
dmFsLCBtTWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZv
cm1hdCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVu
aXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5CisgICAgICAgICAgICBFR0xpbnQgaW5k
ZXggPSAxOworICAgICAgICAgICAgZm9yIChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9IGNv
bmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsgY29u
ZmlnKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRp
b24gPSAqY29uZmlnOworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lEID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgIG1Db25m
aWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICB7CisgICAgICAgIHRl
cm1pbmF0ZSgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBEaXNwbGF5Ojp0ZXJtaW5hdGUoKQoreworICAgIGZvciAoU3VyZmFj
ZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0g
bVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSAqc3Vy
ZmFjZTsKKyAgICB9CisKKyAgICBmb3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9yIGNvbnRleHQgPSBt
Q29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjb250ZXh0
KyspCisgICAgeworICAgICAgICBnbERlc3Ryb3lDb250ZXh0KCpjb250ZXh0KTsKKyAgICB9CisK
KyAgICBpZiAobURldmljZSkKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgbURldmljZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EM2Q5KQorICAgIHsKKyAg
ICAgICAgbUQzZDktPlJlbGVhc2UoKTsKKyAgICAgICAgbUQzZDkgPSBOVUxMOworICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKK3sKKyAgICBpZiAoIW1TY2VuZVN0YXJ0ZWQp
CisgICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsKKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgbVNjZW5lU3RhcnRlZCA9
IHRydWU7CisgICAgfQorfQorCit2b2lkIERpc3BsYXk6OmVuZFNjZW5lKCkKK3sKKyAgICBpZiAo
bVNjZW5lU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gbURldmljZS0+RW5k
U2NlbmUoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgbVNj
ZW5lU3RhcnRlZCA9IGZhbHNlOworICAgIH0KK30KKworYm9vbCBEaXNwbGF5OjpnZXRDb25maWdz
KEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29u
ZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCit7CisgICAgcmV0dXJuIG1Db25maWdTZXQuZ2V0
Q29uZmlncyhjb25maWdzLCBhdHRyaWJMaXN0LCBjb25maWdTaXplLCBudW1Db25maWcpOworfQor
Citib29sIERpc3BsYXk6OmdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xpbnQg
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKworICAgIHN3aXRjaCAoYXR0cmli
dXRlKQorICAgIHsKKyAgICAgIGNhc2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CdWZmZXJTaXplOyAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1BbHBoYVNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JM
VUVfU0laRTogICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CbHVlU2l6
ZTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAg
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1HcmVlblNpemU7ICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZWRTaXplOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0RFUFRIX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1EZXB0aFNpemU7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NURU5D
SUxfU0laRTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdGVuY2lsU2l6
ZTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAg
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25maWdDYXZlYXQ7ICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDogICAgICAgICAgICAgICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1Db25maWdJRDsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1MZXZlbDsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElWRV9S
RU5ERVJBQkxFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVSZW5kZXJh
YmxlOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTogICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1TYW1wbGVzOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1T
YW1wbGVCdWZmZXJzOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1NVUkZBQ0VfVFlQ
RTogICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZTsgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFR5cGU7ICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1UcmFuc3BhcmVudEJsdWVWYWx1ZTsgICBicmVhazsKKyAgICAgIGNhc2UgRUdM
X1RSQU5TUEFSRU5UX0dSRUVOX1ZBTFVFOiAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFu
c3BhcmVudEdyZWVuVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JF
RF9WQUxVRTogICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFJlZFZhbHVl
OyAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCOyAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBOiAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCQTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01J
Tl9TV0FQX0lOVEVSVkFMOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NaW5Td2Fw
SW50ZXJ2YWw7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFM
OiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NYXhTd2FwSW50ZXJ2YWw7ICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1MdW1pbmFuY2VTaXplOyAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1BbHBoYU1hc2tTaXplOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX0NPTE9S
X0JVRkZFUl9UWVBFOiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db2xvckJ1ZmZl
clR5cGU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTogICAg
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJhYmxlVHlwZTsgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRUdMX01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgICp2YWx1ZSA9
IGZhbHNlOyBVTklNUExFTUVOVEVEKCk7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1Db25mb3JtYW50OyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3VyZmFjZSAq
RGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZp
ZykKK3sKKyAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChj
b25maWcpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0g
ezB9OworCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGNv
bmZpZ3VyYXRpb24tPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckNvdW50ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9y
bWF0ID0gY29uZmlndXJhdGlvbi0+bVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJIZWlnaHQgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0
ZW5jaWwgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplID8gVFJVRSA6IEZBTFNFOworICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNl
V2luZG93ID0gd2luZG93OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0
eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVz
ZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8v
IEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9u
SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfQ09QWTsKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7ICAgLy8gRklYTUUKKworICAgIElEaXJlY3QzRFN3
YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5VTEw7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRo
U3RlbmNpbFN1cmZhY2UgPSBOVUxMOworCisgICAgaWYgKCFtRGV2aWNlKQorICAgIHsKKyAgICAg
ICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVB
VEVfTk9XSU5ET1dDSEFOR0VTOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNy
ZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFncyB8
IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJ
Q0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworCisgICAgICAgIGlmIChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpT
dXJmYWNlKilOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRh
cHRlciwgbURldmljZVR5cGUsIHdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZU
V0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKKwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgIGlmIChtRGV2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICBtU2NlbmVTdGFydGVk
ID0gZmFsc2U7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBDaGFp
bik7CisgICAgICAgICAgICBtRGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0aFN0
ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBpZiAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlm
IHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFjZXMv
d2luZG93cyBjdXJyZW50bHkgaW4gdXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICAgICAgICAg
Ly8gYSBzZXBhcmF0ZSBzd2FwIGNoYWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFp
bigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBh
ZGRpdGlvbmFsIHN3YXAgY2hhaW5zLiBPdXQgb2YgbWVtb3J5LiIpOworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
ICAgICAgICAgLy8gQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlIGEgZGVwdGhzdGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKKyAgICAgICAgICAg
IC8vIENyZWF0ZURldmljZSwgc28gd2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgorICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJh
bWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFs
aXR5LCBGQUxTRSwgJmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwg
c3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW4uIE91dCBvZiBtZW1vcnkuIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgdGhl
IGRldmljZSBhbHJlYWR5IGV4aXN0cywgYnV0IHRoZXJlIGFyZSBubyBzdXJmYWNlcyBpbiB1c2Us
IHRoZW4gYWxsIHRoZSBzdXJmYWNlcy93aW5kb3dzCisgICAgICAgICAgICAvLyBoYXZlIGJlZW4g
ZGVzdHJveWVkLCBhbmQgd2Ugc2hvdWxkIHJlcHVycG9zZSB0aGUgb3JpZ2luYWxseSBjcmVhdGVk
IGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvcgorICAgICAgICAgICAgLy8gdXNlIHdpdGggdGhlIG5l
dyBzdXJmYWNlIHdlIGFyZSBjcmVhdGluZy4KKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXNldCBw
cmVzZW50YXRpb24gcGFyYW1ldGVycyBmb3IgZGV2aWNlLiBPdXQgb2YgbWVtb3J5LiIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilO
VUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICAgICAgaWYgKG1EZXZpY2UpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PkdldFN3YXBDaGFpbigwLCAmc3dhcENoYWluKTsKKyAgICAgICAgICAgICAgICBtRGV2aWNlLT5H
ZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBOVUxMOworCisg
ICAgaWYgKHN3YXBDaGFpbikKKyAgICB7CisgICAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0
aGlzLCBzd2FwQ2hhaW4sIGRlcHRoU3RlbmNpbFN1cmZhY2UsIGNvbmZpZ3VyYXRpb24pOworICAg
ICAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7CisKKyAgICAgICAgc3dhcENoYWluLT5S
ZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK0VHTENvbnRleHQg
RGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQoreworICAgIGNv
bnN0IGVnbDo6Q29uZmlnICpjb25maWcgPSBtQ29uZmlnU2V0LmdldChjb25maWdIYW5kbGUpOwor
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY29uZmlnKTsKKyAg
ICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CisKKyAgICByZXR1cm4gY29udGV4dDsKK30K
Kwordm9pZCBEaXNwbGF5OjpkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7
CisgICAgZGVsZXRlIHN1cmZhY2U7CisgICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7Cit9
CisKK3ZvaWQgRGlzcGxheTo6ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7
CisgICAgZ2xEZXN0cm95Q29udGV4dChjb250ZXh0KTsKKyAgICBtQ29udGV4dFNldC5lcmFzZShj
b250ZXh0KTsKK30KKworYm9vbCBEaXNwbGF5Ojppc0luaXRpYWxpemVkKCkKK3sKKyAgICByZXR1
cm4gbUQzZDkgIT0gTlVMTCAmJiBtQ29uZmlnU2V0LnNpemUoKSA+IDA7Cit9CisKK2Jvb2wgRGlz
cGxheTo6aXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKQoreworICAgIHJldHVybiBtQ29u
ZmlnU2V0LmdldChjb25maWcpICE9IE5VTEw7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNWYWxpZENv
bnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIG1Db250ZXh0U2V0LmZp
bmQoY29udGV4dCkgIT0gbUNvbnRleHRTZXQuZW5kKCk7Cit9CisKK2Jvb2wgRGlzcGxheTo6aXNW
YWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQoreworICAgIHJldHVybiBtU3VyZmFj
ZVNldC5maW5kKHN1cmZhY2UpICE9IG1TdXJmYWNlU2V0LmVuZCgpOworfQorCitib29sIERpc3Bs
YXk6Omhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdykKK3sKKyAgICBmb3IgKFN1
cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNl
ICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgeworICAgICAgICBpZiAoKCpz
dXJmYWNlKS0+Z2V0V2luZG93SGFuZGxlKCkgPT0gd2luZG93KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBEaXNwbGF5OjpzZXRTd2FwSW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCit7Cisg
ICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOworICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1h
eChtU3dhcEludGVydmFsLCBtTWluU3dhcEludGVydmFsKTsKKyAgICBtU3dhcEludGVydmFsID0g
c3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCk7CisKKyAgICBtUHJlc2Vu
dEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOworfQorCitEV09SRCBE
aXNwbGF5OjpnZXRQcmVzZW50SW50ZXJ2YWwoKQoreworICAgIHJldHVybiBtUHJlc2VudEludGVy
dmFsOworfQorCitEV09SRCBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwp
Cit7CisgICAgc3dpdGNoKGludGVydmFsKQorICAgIHsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQz
RFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9PTkU7CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVS
VkFMX1RXTzsKKyAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7
CisgICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX0RFRkFVTFQ7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERldmlj
ZSgpCit7CisgICAgcmV0dXJuIG1EZXZpY2U7Cit9CisKK0QzRENBUFM5IERpc3BsYXk6OmdldERl
dmljZUNhcHMoKQoreworICAgIHJldHVybiBtRGV2aWNlQ2FwczsKK30KK30KSW5kZXg6IEFOR0xF
L3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIERpc3BsYXku
aDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFic3Ry
YWN0CisvLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50cyBF
R0xEaXNwbGF5LgorLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgorCisjaWZuZGVm
IElOQ0xVREVfRElTUExBWV9IXworI2RlZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KKworI2lmbmRl
ZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRp
ZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxkM2Q5Lmg+CisKKyNpbmNsdWRlIDxz
ZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSAibGliRUdM
L0NvbmZpZy5oIgorI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCisKK25hbWVzcGFjZSBlZ2wK
K3sKK2NsYXNzIERpc3BsYXkKK3sKKyAgcHVibGljOgorICAgIERpc3BsYXkoSERDIGRldmljZUNv
bnRleHQpOworCisgICAgfkRpc3BsYXkoKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworICAg
IHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY2VuZSgpOworICAg
IHZpcnR1YWwgdm9pZCBlbmRTY2VuZSgpOworCisgICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZp
ZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwg
RUdMaW50ICpudW1Db25maWcpOworICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBj
b25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOworCisgICAgZWdsOjpTdXJm
YWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnKTsK
KyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7CisK
KyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CisgICAgdm9p
ZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisKKyAgICBib29sIGlzSW5p
dGlhbGl6ZWQoKTsKKyAgICBib29sIGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZyk7Cisg
ICAgYm9vbCBpc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9vbCBp
c1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOworICAgIGJvb2wgaGFzRXhpc3Rp
bmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKKworICAgIHZvaWQgc2V0U3dhcEludGVydmFs
KEdMaW50IGludGVydmFsKTsKKyAgICBEV09SRCBnZXRQcmVzZW50SW50ZXJ2YWwoKTsKKyAgICBz
dGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGludGVydmFsKTsKKworICAgIHZpcnR1
YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7CisgICAgdmlydHVhbCBEM0RDQVBTOSBn
ZXREZXZpY2VDYXBzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRGlzcGxheSk7CisgICAgY29uc3QgSERDIG1EYzsKKworICAgIFVJTlQgbUFkYXB0ZXI7Cisg
ICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKKyAgICBJRGlyZWN0M0Q5ICptRDNkOTsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOworICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworCisg
ICAgYm9vbCBtU2NlbmVTdGFydGVkOworICAgIEdMaW50IG1Td2FwSW50ZXJ2YWw7CisgICAgRUdM
aW50IG1NYXhTd2FwSW50ZXJ2YWw7CisgICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7CisgICAg
RFdPUkQgbVByZXNlbnRJbnRlcnZhbDsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFjZSo+
IFN1cmZhY2VTZXQ7CisgICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKKworICAgIENvbmZpZ1Nl
dCBtQ29uZmlnU2V0OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENvbnRl
eHRTZXQ7CisgICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKK307Cit9CisKKyNlbmRpZiAgIC8v
IElOQ0xVREVfRElTUExBWV9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MDEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQorLy8g
c3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBi
dWZmZXJzLgorLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxp
dHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCisKKyNpbmNsdWRlICJsaWJFR0wvU3Vy
ZmFjZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJFR0wv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKK25hbWVzcGFjZSBlZ2wKK3sK
K1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dhcENoYWluOSAq
c3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsLCBjb25zdCBDb25maWcg
KmNvbmZpZykgCisgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVN3YXBDaGFpbihzd2FwQ2hhaW4p
LCBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCksIG1Db25maWcoY29uZmlnKQoreworICAgIG1C
YWNrQnVmZmVyID0gTlVMTDsKKyAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICBtRmxpcFRl
eHR1cmUgPSBOVUxMOworICAgIG1GbGlwU3RhdGUgPSBOVUxMOworICAgIG1QcmVGbGlwU3RhdGUg
PSBOVUxMOworCisgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElT
UExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3Qg
cmF0aW8KKyAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOworICAgIG1Td2FwQmVo
YXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKKworICAgIGlmIChtU3dhcENoYWluKQorICAg
IHsKKyAgICAgICAgbVN3YXBDaGFpbi0+QWRkUmVmKCk7CisgICAgICAgIG1Td2FwQ2hhaW4tPkdl
dEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CisK
KyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtQmFja0J1ZmZl
ci0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9u
LldpZHRoOworICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OworCisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KG1XaWR0aCwgbUhl
aWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUsIGRl
c2NyaXB0aW9uLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxM
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihFR0xf
QkFEX0FMTE9DKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGRl
c2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUZsaXBUZXh0dXJlLCBOVUxMKTsK
KworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworCisgICAgICAgICAgICBlcnJvcihFR0xfQkFEX0FMTE9DKTsKKworICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1N1cmZhY2U6On5TdXJmYWNlKCkKK3sKKyAgICBpZiAobVN3
YXBDaGFpbikKKyAgICB7CisgICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICB9CisK
KyAgICBpZiAobUJhY2tCdWZmZXIpCisgICAgeworICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFz
ZSgpOworICAgIH0KKworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQor
ICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KKworICAgIGlm
IChtRmxpcFRleHR1cmUpCisgICAgeworICAgICAgICBtRmxpcFRleHR1cmUtPlJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1GbGlwU3RhdGUt
PlJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAobVByZUZsaXBTdGF0ZSkKKyAgICB7CisgICAg
ICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK0hXTkQgU3VyZmFjZTo6
Z2V0V2luZG93SGFuZGxlKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAg
IEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKKyAgICAgICAgbVN3YXBD
aGFpbi0+R2V0UHJlc2VudFBhcmFtZXRlcnMoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKworICAgICAg
ICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdzsKKyAgICB9CisKKyAgICBy
ZXR1cm4gTlVMTDsKK30KKwordm9pZCBTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUo
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQorewor
ICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVO
QUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFC
TEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFBp
eGVsU2hhZGVyKE5VTEwpOworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOworCisg
ICAgLy8gSnVzdCBzYW1wbGUgdGhlIHRleHR1cmUKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7CisgICAgZGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJF
KTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBE
M0RUT1BfRElTQUJMRSk7CisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHNvdXJjZSk7CisgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9J
TlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NS
R0JURVhUVVJFLCBGQUxTRSk7CisgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQz
REZWRl9URVgxKTsKKworICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsgLy8g
RHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMgYWJvdXQgc3RyZWFtIDAsIG5vdCB0aGUgcmVzdC4K
K30KKwordm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit7CisgICAgSFJFU1VMVCBocjsKKworICAg
IGlmIChtRmxpcFN0YXRlID09IE5VTEwpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdHdvIHN0
YXRlIGJsb2NrcyBib3RoIHJlY29yZGluZyB0aGUgc3RhdGVzIHRoYXQgYXJlIGNoYW5nZWQgd2hl
biBzd2FwcGluZy4KKworICAgICAgICAvLyBtUHJlRmxpcFN0YXRlIHdpbGwgcmVjb3JkIHRoZSBv
cmlnaW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgorICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0
ZUJsb2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgd3JpdGVS
ZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsKKyAgICAgICAgaHIgPSBkZXZpY2Ut
PkVuZFN0YXRlQmxvY2soJm1QcmVGbGlwU3RhdGUpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVN
T1JZKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbVByZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbUZs
aXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgc3RhdGUgZm9yIHRoZSBzd2FwIG9wZXJhdGlvbi4KKyAg
ICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOworICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisKKyAgICAgICAgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSwg
c291cmNlKTsKKworICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBTdGF0
ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICB7CisgICAgICAgICAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICAgICAg
ICAgIG1QcmVGbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1QcmVGbGlwU3RhdGUg
PSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
aHIgPSBtRmxpcFN0YXRlLT5BcHBseSgpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhyID0gbVBy
ZUZsaXBTdGF0ZS0+Q2FwdHVyZSgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgICAgIGhyID0gbUZsaXBTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOworICAgIH0KKworICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtUHJlRmxp
cEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmbVByZUZs
aXBEZXB0aFN0ZW5jaWwpOworCisgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbUJhY2tC
dWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKK30KKwor
dm9pZCBTdXJmYWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKQorewor
ICAgIG1QcmVGbGlwU3RhdGUtPkFwcGx5KCk7CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdl
dCgwLCBtUHJlRmxpcEJhY2tCdWZmZXIpOworICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3Vy
ZmFjZShtUHJlRmxpcERlcHRoU3RlbmNpbCk7CisKKyAgICBpZiAobVByZUZsaXBCYWNrQnVmZmVy
KQorICAgIHsKKyAgICAgICAgbVByZUZsaXBCYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgICAg
IG1QcmVGbGlwQmFja0J1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlwRGVw
dGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKKyAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIH0KK30KKworYm9v
bCBTdXJmYWNlOjpzd2FwKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CisgICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKKworICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7CisgICAgICAgIG1GbGlwVGV4
dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7CisKKyAgICAgICAgbURp
c3BsYXktPmVuZFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QobVJlbmRlclRh
cmdldCwgTlVMTCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisKKyAgICAg
ICAgYXBwbHlGbGlwU3RhdGUoZGV2aWNlLCBtRmxpcFRleHR1cmUpOworCisgICAgICAgIC8vIFJl
bmRlciB0aGUgdGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRoZSBiYWNrIGJ1ZmZlcgorICAgICAg
ICBmbG9hdCBxdWFkWzRdWzZdID0ge3sgICAgIDAgLSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4w
ZiwgMS4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0
aCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAxLjBmfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAu
MGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAg
IDAgLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgMC4wZiwgMC4wZn19OyAgIC8v
IHgsIHksIHosIHJodywgdSwgdgorCisgICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Cisg
ICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBxdWFk
LCA2ICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICAgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2Uo
KTsKKworICAgICAgICByZXN0b3JlU3RhdGUoZGV2aWNlKTsKKworICAgICAgICBtRGlzcGxheS0+
ZW5kU2NlbmUoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50
KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIG1EaXNwbGF5LT5nZXRQcmVzZW50SW50ZXJ2YWwoKSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJS
T1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9T
VCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRUdMaW50IFN1cmZhY2U6OmdldFdp
ZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQorCitFR0xpbnQgU3VyZmFjZTo6
Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUhlaWdodDsKK30KKworSURpcmVjdDNE
U3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1SZW5kZXJU
YXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZh
Y2U6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgewor
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbURl
cHRoU3RlbmNpbDsKK30KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIFN1cmZhY2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJmYWNl
IGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKKy8vIHN1Y2ggYXMgdGhlIGNs
aWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KKy8vIElt
cGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0g
c2VjdGlvbiAyLjIgcGFnZSAzLgorCisjaWZuZGVmIElOQ0xVREVfU1VSRkFDRV9IXworI2RlZmlu
ZSBJTkNMVURFX1NVUkZBQ0VfSF8KKworI2RlZmluZSBFR0xBUEkKKyNpbmNsdWRlIDxFR0wvZWds
Lmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KworbmFtZXNwYWNlIGVnbAoreworY2xhc3MgRGlzcGxheTsKK2NsYXNzIENvbmZpZzsKKworY2xh
c3MgU3VyZmFjZQoreworICBwdWJsaWM6CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBJ
RGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4sIElEaXJlY3QzRFN1cmZhY2U5KiBkZXB0aFN0
ZW5jaWwsIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworCisgICAgflN1cmZhY2UoKTsKKwor
ICAgIEhXTkQgZ2V0V2luZG93SGFuZGxlKCk7CisgICAgYm9vbCBzd2FwKCk7CisKKyAgICB2aXJ0
dWFsIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdo
dCgpIGNvbnN0OworCisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFy
Z2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7CisK
KyAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKKyAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpj
b25zdCBtU3dhcENoYWluOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKKyAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbURlcHRoU3RlbmNpbDsKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJlOwor
CisgICAgdm9pZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJl
Y3QzRFRleHR1cmU5ICpzb3VyY2UpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlKElEaXJlY3QzRERl
dmljZTkgKmRldmljZSk7CisgICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICBJRGly
ZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAq
bVByZUZsaXBTdGF0ZTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBCYWNrQnVmZmVy
OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKKworICAgIGNv
bnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2FzIGNy
ZWF0ZWQgd2l0aAorICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWlnaHQg
b2Ygc3VyZmFjZQorICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0aCBv
ZiBzdXJmYWNlCisvLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6b250
YWwgZG90IHBpdGNoCisvLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZlcnRp
Y2FsIGRvdCBwaXRjaAorLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJZiB0
cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCisvLyAgRUdMQm9vbGVhbiBtaXBt
YXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcworLy8gIEVHTGlu
dCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRvCisv
LyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29sdmUg
YmVoYXZpb3IKKyAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxheSBh
c3BlY3QgcmF0aW8KKyAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVuZGVy
IGJ1ZmZlcgorICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIgc3dh
cCBiZWhhdmlvcgorLy8gIEVHTGVudW0gdGV4dHVyZUZvcm1hdDsgICAgICAgICAvLyBGb3JtYXQg
b2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCisvLyAgRUdMZW51bSB0ZXh0dXJl
VGFyZ2V0OyAgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQorLy8g
IEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9wZW5W
RworLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBmb3Ig
T3BlblZHCit9OworfQorCisjZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KSW5kZXg6IEFO
R0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
bGliRUdMLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4KKworI2lu
Y2x1ZGUgPGV4Y2VwdGlvbj4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgorI2luY2x1
ZGUgImxpYkVHTC9EaXNwbGF5LmgiCisKKworYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkpCit7CisgICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNv
bmZpZykKK3sKKyAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbmZpZyhjb25m
aWcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBmYWxzZSk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNw
bGF5ICpkaXNwbGF5LCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIXZhbGlkYXRl
KGRpc3BsYXkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpCit7CisgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRTdXJm
YWNlKHN1cmZhY2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFD
RSwgZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gIkMiCit7
CitFR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7
CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOworCisgICAgaWYg
KGVycm9yICE9IEVHTF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZWdsOjpzZXRDdXJyZW50RXJy
b3IoRUdMX1NVQ0NFU1MpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworRUdMRGlz
cGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
X2lkKQoreworICAgIFRSQUNFKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCA9IDB4
JTAuOHApIiwgZGlzcGxheV9pZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBSZXR1cm4gdGhlIHNhbWUgRUdMRGlzcGxheSBoYW5kbGUgd2hlbiBkaXNwbGF5X2lkIGFscmVh
ZHkgY3JlYXRlZCBhIGRpc3BsYXkKKworICAgICAgICBpZiAoZGlzcGxheV9pZCA9PSBFR0xfREVG
QVVMVF9ESVNQTEFZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6RGlz
cGxheSgoSERDKU5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlfaWQgaXMgYSB2YWxpZCBkaXNwbGF5
IGRldmljZSBjb250ZXh0CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgZWdsOjpEaXNwbGF5KChI
REMpZGlzcGxheV9pZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19E
SVNQTEFZKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Cit9CisKK0VHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAqbWFq
b3IsIEVHTGludCAqbWlub3IpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44cCkiLAor
ICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
CisKKyAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0UpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOworICAgICAgICBpZiAobWlu
b3IpICptaW5vciA9IDQ7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZB
TFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUoRUdMRGlzcGxheSBk
cHkpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHApIiwgZHB5KTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19j
YXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgZGlzcGxheS0+dGVybWluYXRlKCk7
CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitjb25z
dCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGludCBu
YW1lKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgbmFt
ZSA9ICVkKSIsIGRweSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5hbWUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNz
KCJPcGVuR0xfRVMiKTsKKyAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgorICAgICAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoIiIpOworICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoKKyAgICAg
ICAgICAgIHJldHVybiBzdWNjZXNzKCJUcmFuc0dhbWluZyBJbmMuIik7CisgICAgICAgICAgY2Fz
ZSBFR0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKGdpdC1kZXZl
bCAiX19EQVRFX18iICIgX19USU1FX18iKSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25m
aWcpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyAq
Y29uZmlncyA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXplID0gJWQs
IEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGNvbmZpZ3Ms
IGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKwor
ICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFudW1fY29uZmlnKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVH
TF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlzdFtd
ID0gICAge0VHTF9OT05FfTsKKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ3MoY29u
ZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9
CisKK0VHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwg
Y29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29u
ZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkg
ZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKKyAg
ICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXpl
ID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGF0
dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbnVtX2NvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
RUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07CisKKyAgICAgICAgaWYgKCFhdHRy
aWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBhdHRyaWJMaXN0
OworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdzLCBhdHRy
aWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOworCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0
Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVk
LCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRy
aWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAo
IXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZp
Z0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTFN1
cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xD
b25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUwLjhw
LCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRw
eSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisgICAgICAgIEhX
TkQgd2luZG93ID0gKEhXTkQpd2luOworCisgICAgICAgIGlmICghSXNXaW5kb3cod2luZG93KSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZFX1dJTkRP
VywgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJpYl9saXN0
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmF0dHJpYl9saXN0ICE9IEVHTF9OT05F
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3RbMF0p
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSX0JV
RkZFUjoKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJfbGlzdFsxXSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JBQ0tfQlVG
RkVSOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVyaW5nIGRp
cmVjdGx5IHRvIGZyb250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQ09M
T1JTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gs
IEVHTF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZP
Uk1BVDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19TVVJGQUNFKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkaXNwbGF5LT5oYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsK
KyAgICAgICAgfQorCisgICAgICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IChFR0xTdXJmYWNlKWRp
c3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcpOworCisgICAgICAgIHJl
dHVybiBzdWNjZXNzKHN1cmZhY2UpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZB
Q0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKK30KKworRUdMU3VyZmFj
ZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENv
bmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgY29uZmln
LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJu
IEVHTF9OT19TVVJGQUNFOworfQorCitFR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQaXht
YXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVQaXht
YXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKK3sKKyAgICBUUkFDRSgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVH
TE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgorICAgICAgICAgICJjb25zdCBF
R0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFwLCBhdHRy
aWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdM
X05PX1NVUkZBQ0U7CisgICAgICAgIH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3VyZmFjZShF
R0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQoreworICAgIFRSQUNFKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwg
c3VyZmFjZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFM
U0UpOworICAgICAgICB9CisKKyAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZhY2UoKGVnbDo6
U3VyZmFjZSopc3VyZmFjZSk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdM
X0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlz
cGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2
YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFj
ZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVl
ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNw
bGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOworICAg
ICAgICB9CisKKyAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFj
ZSopc3VyZmFjZTsKKworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xf
VkdfQ09MT1JTUEFDRToKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgorICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNl
LT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0hP
UklaT05UQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9QQlVG
RkVSOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKKyAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9NVUxUSVNB
TVBMRV9SRVNPTFZFOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1RfUkFUSU86
CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6CisgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgRUdMX1NXQVBfQkVIQVZJT1I6CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9S
TUFUOgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKKyAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKKyAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0
ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKK3sKKyAgICBUUkFDRSgiKEVHTGVudW0gYXBp
ID0gMHglWCkiLCBhcGkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGFwaSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6CisgICAgICAgICAgY2Fz
ZSBFR0xfT1BFTlZHX0FQSToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX0ZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGVnbDo6c2V0Q3VycmVu
dEFQSShhcGkpOworCisgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9GQUxTRTsK
K30KKworRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKK3sKKyAgICBUUkFDRSgi
KCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6OmdldEN1
cnJlbnRBUEkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOworICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQor
CitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCit7CisgICAgVFJBQ0Uo
IigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDApOworICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19ESVNQTEFZ
LCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsKKworICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTFN1cmZhY2Ug
X19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3BsYXkgZHB5
LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZpZyBjb25m
aWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1ZmZlciBi
dWZmZXIgPSAweCUwLjhwLCAiCisgICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAweCUwLjhw
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAorICAgICAgICAgIGRweSwg
YnVmdHlwZSwgYnVmZmVyLCBjb25maWcsIGF0dHJpYl9saXN0KTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgfQorCisg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Cit9CisKK0VHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQoreworICAgIFRSQUNFKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xp
bnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAgZHB5LCBz
dXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKwor
ICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOwor
fQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHks
IEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEVHTERp
c3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50
IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGV4SW1hZ2Uo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKK3sKKyAg
ICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0g
MHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nh
c3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisK
KyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xT
d2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKK3sKKyAgICBUUkFD
RSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQpIiwgZHB5
LCBpbnRlcnZhbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXktPnNldFN3YXBJbnRlcnZhbChpbnRlcnZh
bCk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitF
R0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xD
b25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENv
bmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUwLjhw
LCAiCisgICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRw
eSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CisgICAgICAgIH0KKwor
ICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZp
Zyk7CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19DT05URVhU
OworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNwbGF5
IGRweSwgRUdMQ29udGV4dCBjdHgpCit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4
JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7CisKKyAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjdHggPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAg
ICBkaXNwbGF5LT5kZXN0cm95Q29udGV4dCgoZ2w6OkNvbnRleHQqKWN0eCk7CisKKyAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3Rk
Y2FsbCBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBFR0xT
dXJmYWNlIHJlYWQsIEVHTENvbnRleHQgY3R4KQoreworICAgIFRSQUNFKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJlYWQg
PSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHApIiwKKyAgICAgICAgICBkcHksIGRy
YXcsIHJlYWQsIGN0eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOworICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgRFdPUkQgcGFzc2VzOworCisgICAgICAgIGlmICghZGV2aWNlIHx8IGRldmljZS0+VmFsaWRh
dGVEZXZpY2UoJnBhc3NlcykgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGN0eCAhPSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRhdGUoZGlz
cGxheSwgY29udGV4dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRyYXcgIT0gRUdMX05PX1NVUkZBQ0UgJiYgIXZh
bGlkYXRlKGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKSkgfHwKKyAg
ICAgICAgICAgIChyZWFkICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZShkaXNwbGF5LCBz
dGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRyYXcgIT0gcmVh
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisg
ICAgICAgIH0KKworICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7CisgICAgICAg
IGVnbDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOworICAgICAgICBlZ2w6OnNldEN1cnJl
bnRSZWFkU3VyZmFjZShyZWFkKTsKKworICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQsIGRp
c3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKKworICAgICAgICByZXR1
cm4gc3VjY2VzcyhFR0xfVFJVRSk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwor
ICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTENvbnRleHQgX19zdGRjYWxs
IGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGdsR2V0Q3VycmVudENvbnRl
eHQoKTsKKworICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9OT19DT05URVhUKTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX05PX0NPTlRF
WFQ7Cit9CisKK0VHTFN1cmZhY2UgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGlu
dCByZWFkZHJhdykKK3sKKyAgICBUUkFDRSgiKEVHTGludCByZWFkZHJhdyA9ICVkKSIsIHJlYWRk
cmF3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRkcmF3ID09IEVHTF9SRUFE
KQorICAgICAgICB7CisgICAgICAgICAgICBFR0xTdXJmYWNlIHJlYWQgPSBlZ2w6OmdldEN1cnJl
bnRSZWFkU3VyZmFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MocmVhZCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAocmVhZGRyYXcgPT0gRUdMX0RSQVcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEVHTFN1cmZhY2UgZHJhdyA9IGVnbDo6Z2V0Q3VycmVudERyYXdTdXJmYWNl
KCk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhkcmF3KTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOworfQor
CitFR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKQoreworICAg
IFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBFR0xEaXNwbGF5IGRweSA9
IGVnbDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKKworICAgICAgICByZXR1cm4gc3VjY2VzcyhkcHkp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOworICAgIH0KKworICAgIHJl
dHVybiBFR0xfTk9fRElTUExBWTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlD
b250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwg
RUdMQ29udGV4dCBjdHggPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCAq
dmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgZHB5LCBjdHgsIGF0dHJpYnV0ZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworCisgICAgICAgIGlmICghdmFsaWRhdGUoZGlz
cGxheSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7CisgICAgICAg
IH0KKworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKKworICAgICAgICByZXR1
cm4gc3VjY2VzcygwKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7CisgICAgfQor
CisgICAgcmV0dXJuIEVHTF9GQUxTRTsKK30KKworRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2Fp
dEdMKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorCisgICAgICAgIHJldHVybiBzdWNjZXNzKDAp
OworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4g
RUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0TmF0aXZlKEVHTGlu
dCBlbmdpbmUpCit7CisgICAgVFJBQ0UoIihFR0xpbnQgZW5naW5lID0gJWQpIiwgZW5naW5lKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisK
KyAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOworICAgIH0KKworICAgIHJldHVybiBFR0xfRkFMU0U7Cit9CisKK0VHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2Up
Cit7CisgICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cmZhY2Ug
PT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICBlZ2w6OlN1
cmZhY2UgKmVnbFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOworCisgICAgICAgIGlm
IChlZ2xTdXJmYWNlLT5zd2FwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUdMX0ZBTFNFOworfQorCitFR0xCb29sZWFuIF9fc3Rk
Y2FsbCBlZ2xDb3B5QnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBF
R0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCkKK3sKKyAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMTmF0aXZlUGl4bWFw
VHlwZSB0YXJnZXQgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSwgdGFyZ2V0KTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKKworICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOworICAgICAgICB9CisKKyAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
MCk7CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVy
biBFR0xfRkFMU0U7Cit9CisKK19fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5
cGUgX19zdGRjYWxsIGVnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQorewor
ICAgIFRSQUNFKCIoY29uc3QgY2hhciAqcHJvY25hbWUgPSBcIiVzXCIpIiwgcHJvY25hbWUpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgICAgICBfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgICAgIH07CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IEV4dGVuc2lvbiBlZ2xFeHRlbnNpb25zW10gPQorICAgICAgICB7CisgICAg
ICAgICAgICB7IiIsIE5VTEx9LAorICAgICAgICB9OworCisgICAgICAgIGZvciAoaW50IGV4dCA9
IDA7IGV4dCA8IHNpemVvZihlZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQr
KykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZWdsRXh0ZW5z
aW9uc1tleHRdLm5hbWUpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWVnbEV4dGVuc2lv
bnNbZXh0XS5hZGRyZXNzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGdsR2V0UHJvY0FkZHJlc3MocHJvY25hbWUpOworICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpTlVMTCk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2
IEBACitMSUJSQVJZCWxpYkVHTAorRVhQT1JUUworCWVnbEJpbmRBUEkgICAgICAgICAgICAgICAg
ICAgICAgQDE0CisJZWdsQmluZFRleEltYWdlICAgICAgICAgICAgICAgICBAMjAKKwllZ2xDaG9v
c2VDb25maWcgICAgICAgICAgICAgICAgIEA3CisJZWdsQ29weUJ1ZmZlcnMgICAgICAgICAgICAg
ICAgICBAMzMKKwllZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgIEAyMworCWVnbENyZWF0
ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAgICBAMTgKKwllZ2xDcmVhdGVQYnVmZmVyU3Vy
ZmFjZSAgICAgICAgIEAxMAorCWVnbENyZWF0ZVBpeG1hcFN1cmZhY2UgICAgICAgICAgQDExCisJ
ZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAgICBAOQorCWVnbERlc3Ryb3lDb250ZXh0ICAg
ICAgICAgICAgICAgQDI0CisJZWdsRGVzdHJveVN1cmZhY2UgICAgICAgICAgICAgICBAMTIKKwll
Z2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAgIEA4CisJZWdsR2V0Q29uZmlncyAgICAgICAg
ICAgICAgICAgICBANgorCWVnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgQDI2CisJZWds
R2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBAMjgKKwllZ2xHZXRDdXJyZW50U3VyZmFjZSAg
ICAgICAgICAgIEAyNworCWVnbEdldERpc3BsYXkgICAgICAgICAgICAgICAgICAgQDIKKwllZ2xH
ZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAxCisJZWdsR2V0UHJvY0FkZHJlc3MgICAgICAg
ICAgICAgICBAMzQKKwllZ2xJbml0aWFsaXplICAgICAgICAgICAgICAgICAgIEAzCisJZWdsTWFr
ZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUKKwllZ2xRdWVyeUFQSSAgICAgICAgICAgICAg
ICAgICAgIEAxNQorCWVnbFF1ZXJ5Q29udGV4dCAgICAgICAgICAgICAgICAgQDI5CisJZWdsUXVl
cnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQorCWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAgICAg
ICAgICAgQDEzCisJZWdsUmVsZWFzZVRleEltYWdlICAgICAgICAgICAgICBAMjEKKwllZ2xSZWxl
YXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNworCWVnbFN1cmZhY2VBdHRyaWIgICAgICAgICAg
ICAgICAgQDE5CisJZWdsU3dhcEJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzIKKwllZ2xTd2Fw
SW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgorCWVnbFRlcm1pbmF0ZSAgICAgICAgICAgICAg
ICAgICAgQDQKKwllZ2xXYWl0Q2xpZW50ICAgICAgICAgICAgICAgICAgIEAxNgorCWVnbFdhaXRH
TCAgICAgICAgICAgICAgICAgICAgICAgQDMwCisJZWdsV2FpdE5hdGl2ZSAgICAgICAgICAgICAg
ICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMvbGli
RUdML2xpYkVHTC52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
dmNwcm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9
IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkVHTCINCisJUHJvamVj
dEdVSUQ9IntFNzQ2RkNBOS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9Ig0KKwlSb290TmFt
ZXNwYWNlPSJsaWJFR0wiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3Jr
VmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlO
YW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rv
b2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25m
aWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRp
b25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0ZXJTZXQ9IjEi
DQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJCQkvPg0KKwkJ
CTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIwIg0KKwkJCQlB
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3RE
aXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtf
REVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBS
RUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0KKwkJCQlCYXNpY1J1
bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlEZXRlY3Q2NEJpdFBv
cnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0
Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0K
KwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIyIg0KKwkJ
CQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiINCisJCQkJR2VuZXJhdGVEZWJ1Z0lu
Zm9ybWF0aW9uPSJ0cnVlIg0KKwkJCQlTdWJTeXN0ZW09IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNl
QWRkcmVzcz0iMSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdl
dE1hY2hpbmU9IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQor
CQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJU
b29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
DQorCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQor
CQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25E
aXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENv
bmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0
ZXJTZXQ9IjEiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlO
YW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJ
CQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiDQorCQkJCU9wdGltaXphdGlvbj0iMiINCisJCQkJSW5saW5lRnVuY3Rpb25F
eHBhbnNpb249IjIiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVj
dERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSINCisJCQkJUHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRT
O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIg0KKwkJCQlS
dW50aW1lTGlicmFyeT0iMCINCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQorCQkJCVdh
cm5pbmdMZXZlbD0iMyINCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxz
ZSINCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29s
DQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJ
CU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5s
aWIiDQorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9
ImxpYkVHTC5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJ
U3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQorCQkJCUVuYWJsZUNP
TURBVEZvbGRpbmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCisJCQkJRGF0
YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjEiDQorCQkJLz4N
CisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQor
CQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0i
VkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNvbW1hbmRMaW5lPSJA
ZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilc
bGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5s
aWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1l
KVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiDQorCQkJLz4NCisJCTwv
Q29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwv
UmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IlNvdXJjZSBGaWxl
cyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214
Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1
MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29uZmlnLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XENvbW1vblxkZWJ1Zy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJI
ZWFkZXIgRmlsZXMiDQorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQorCQkJ
VW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0i
DQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlzcGxheS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caW5jbHVkZVxFR0xcZWdsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xleHQuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdM
XGVnbHBsYXRmb3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9G
aWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIg0KKwkJCT4N
CisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zp
c3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML21haW4uY3BwCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2xpYkVHTC9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQgYW5kIG1hbmFn
ZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgor
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK3N0YXRpYyBEV09SRCBjdXJyZW50VExTID0g
VExTX09VVF9PRl9JTkRFWEVTOworCitCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0
YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICAgc3dpdGNoIChyZWFz
b24pCisgICAgeworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgIHsKKyAg
ICAgICAgICAgICNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgRklMRSAqZGVidWcgPSBm
b3BlbigiZGVidWcudHh0IiwgInJ0Iik7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVidWcpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOworICAg
ICAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAid3QiKTsgICAvLyBF
cmFzZQorICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBjdXJyZW50VExTID0gVGxzQWxs
b2MoKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRFWEVT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUg
aW5kZXgKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVnbDo6Q3VycmVudCAqY3VycmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBU
Uiwgc2l6ZW9mKGVnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJy
ZW50KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQtPmVycm9yID0gRUdMX1NVQ0NFU1M7Cisg
ICAgICAgICAgICAgICAgY3VycmVudC0+QVBJID0gRUdMX09QRU5HTF9FU19BUEk7CisgICAgICAg
ICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7CisgICAgICAgICAgICAg
ICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKKworICAgICAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoK
KyAgICAgICAgeworICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJl
bnRUTFMpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVGxzRnJlZShjdXJyZW50VExTKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBU
UlVFOworfQorCituYW1lc3BhY2UgZWdsCit7Cit2b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQg
ZXJyb3IpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKKworICAgIGN1cnJlbnQtPmVycm9yID0gZXJyb3I7Cit9CisKK0VHTGludCBn
ZXRDdXJyZW50RXJyb3IoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+ZXJyb3I7Cit9CisK
K3ZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50
ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+QVBJ
ID0gQVBJOworfQorCitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKQoreworICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4g
Y3VycmVudC0+QVBJOworfQorCit2b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5
KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICBjdXJyZW50LT5kaXNwbGF5ID0gZHB5OworfQorCitFR0xEaXNwbGF5IGdl
dEN1cnJlbnREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7Cit9
CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSkKK3sKKyAg
ICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwor
CisgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBzdXJmYWNlOworfQorCitFR0xTdXJmYWNlIGdl
dEN1cnJlbnREcmF3U3VyZmFjZSgpCit7CisgICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50
KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKKworICAgIHJldHVybiBjdXJyZW50LT5kcmF3U3Vy
ZmFjZTsKK30KKwordm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNl
KQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7CisKKyAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IHN1cmZhY2U7Cit9CisKK0VHTFN1
cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQt
PnJlYWRTdXJmYWNlOworfQorfQorCit2b2lkIGVycm9yKEVHTGludCBlcnJvckNvZGUpCit7Cisg
ICAgZWdsOjpzZXRDdXJyZW50RXJyb3IoZXJyb3JDb2RlKTsKK30KSW5kZXg6IEFOR0xFL3NyYy9s
aWJFR0wvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0
aHJlYWQtbG9jYWwgZGF0YS4KKworI2lmbmRlZiBMSUJFR0xfTUFJTl9IXworI2RlZmluZSBMSUJF
R0xfTUFJTl9IXworCisjZGVmaW5lIEVHTEFQSQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKworbmFt
ZXNwYWNlIGVnbAoreworc3RydWN0IEN1cnJlbnQKK3sKKyAgICBFR0xpbnQgZXJyb3I7CisgICAg
RUdMZW51bSBBUEk7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5OworICAgIEVHTFN1cmZhY2UgZHJh
d1N1cmZhY2U7CisgICAgRUdMU3VyZmFjZSByZWFkU3VyZmFjZTsKK307CisKK3ZvaWQgc2V0Q3Vy
cmVudEVycm9yKEVHTGludCBlcnJvcik7CitFR0xpbnQgZ2V0Q3VycmVudEVycm9yKCk7CisKK3Zv
aWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSk7CitFR0xlbnVtIGdldEN1cnJlbnRBUEkoKTsK
Kwordm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5IGRweSk7CitFR0xEaXNwbGF5IGdl
dEN1cnJlbnREaXNwbGF5KCk7CisKK3ZvaWQgc2V0Q3VycmVudERyYXdTdXJmYWNlKEVHTFN1cmZh
Y2Ugc3VyZmFjZSk7CitFR0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFjZSgpOworCit2b2lk
IHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOworRUdMU3VyZmFjZSBn
ZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKK30KKwordm9pZCBlcnJvcihFR0xpbnQgZXJyb3JDb2Rl
KTsKKwordGVtcGxhdGU8Y2xhc3MgVD4KK2NvbnN0IFQgJmVycm9yKEVHTGludCBlcnJvckNvZGUs
IGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVycm9yKGVycm9yQ29kZSk7CisKKyAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQ+Citjb25zdCBUICZzdWNj
ZXNzKGNvbnN0IFQgJnJldHVyblZhbHVlKQoreworICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKEVH
TF9TVUNDRVNTKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAvLyBM
SUJFR0xfTUFJTl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiAwKQorKysgQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NjQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBj
bGFzcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisKKyNpbmNsdWRlIDxkM2R4OS5o
PgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFp
bi5oIgorCituYW1lc3BhY2UKK3sKKy8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKKy8vIElucHV0
IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCisvLyBPdXRwdXRzIHRoZSBob21vZ2Vub3Vz
IHBvc2l0aW9uIGFzLWlzLgorLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRo
ZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9t
IHJpZ2h0LgorLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkg
bXVzdCBiZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgorY29uc3QgY2hhciBz
dGFuZGFyZHZzW10gPQorInN0cnVjdCBWU19PVVRQVVRcbiIKKyJ7XG4iCisiICAgIGZsb2F0NCBw
b3NpdGlvbiA6IFBPU0lUSU9OO1xuIgorIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7
XG4iCisifTtcbiIKKyJcbiIKKyJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7XG4i
CisiXG4iCisiVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pXG4i
Cisie1xuIgorIiAgICBWU19PVVRQVVQgT3V0O1xuIgorIlxuIgorIiAgICBPdXQucG9zaXRpb24g
PSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCisiICAgIE91dC50ZXhjb29yZCA9IHBvc2l0
aW9uICogZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAw
KTtcbiIKKyJcbiIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBGbGlwIFkgVmVy
dGV4IFNoYWRlcgorLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KKy8vIE91
dHB1dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCisvLyBPdXRwdXRzIGEgdGV4IGNv
b3JkIHdpdGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5k
ICgxLDApIGluIHRoZSBib3R0b20gcmlnaHQuCisvLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBp
eGVsIHdpZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KK2NvbnN0IGNoYXIgZmxpcHl2
c1tdID0KKyJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisie1xuIgorIiAgICBmbG9hdDQgcG9zaXRpb24g
OiBQT1NJVElPTjtcbiIKKyIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgorIn07
XG4iCisiXG4iCisidW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgorIlxuIgor
IlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgorIntcbiIK
KyIgICAgVlNfT1VUUFVUIE91dDtcbiIKKyJcbiIKKyIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRp
b24gKyBoYWxmUGl4ZWxTaXplO1xuIgorIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZs
b2F0NCgwLjUsIDAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIKKyJc
biIKKyIgICAgcmV0dXJuIE91dDtcbiIKKyJ9XG4iOworCisvLyBQYXNzdGhyb3VnaCBQaXhlbCBT
aGFkZXIKKy8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KK2NvbnN0
IGNoYXIgcGFzc3Rocm91Z2hwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4iCisi
ZmxvYXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCisie1xu
IgorIglyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCisifVxuIjsKKworLy8gTHVt
aW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0
YzApLnJycmEuCisvLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9
IDAuCisvLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorY29u
c3QgY2hhciBsdW1pbmFuY2Vwc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisiXG4iCisi
dW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRtcCA9IHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAudyA9IHRtcC53ICogbW9kZS54ICsgbW9k
ZS55O1xuIgorIglyZXR1cm4gdG1wLnh4eHc7XG4iCisifVxuIjsKKworLy8gUkdCL0EgQ29tcG9u
ZW50IE1hc2sgUGl4ZWwgU2hhZGVyCisvLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdpdGgg
b3B0aW9ucyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KKy8vIFRvIGZvcmNlIFJHQiA9
IDAsIHNldCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgorLy8gVG8gZm9yY2UgQSA9IDEs
IHNldCBDMC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAuCitj
b25zdCBjaGFyIGNvbXBvbmVudG1hc2twc1tdID0KKyJzYW1wbGVyMkQgdGV4IDogczA7XG4iCisi
XG4iCisidW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgorIlxuIgorImZsb2F0NCBtYWluKGZs
b2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgorIntcbiIKKyIJZmxvYXQ0IHRt
cCA9IHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgorIgl0bXAueHl6ID0gdG1wLnh5eiAqIG1v
ZGUueDtcbiIKKyIJdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudztcbiIKKyIJcmV0dXJu
IHRtcDtcbiIKKyJ9XG4iOworCit9CisKK25hbWVzcGFjZSBnbAoreworCitjb25zdCBjaGFyICog
Y29uc3QgQmxpdDo6bVNoYWRlclNvdXJjZVtdID0KK3sKKyAgICBzdGFuZGFyZHZzLAorICAgIGZs
aXB5dnMsCisgICAgcGFzc3Rocm91Z2hwcywKKyAgICBsdW1pbmFuY2VwcywKKyAgICBjb21wb25l
bnRtYXNrcHMKK307CisKK0JsaXQ6OkJsaXQoQ29udGV4dCAqY29udGV4dCkKKyAgOiBtQ29udGV4
dChjb250ZXh0KSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRp
b24oTlVMTCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5V
TEwpLCBtU2F2ZWRTdGF0ZUJsb2NrKE5VTEwpCit7CisgICAgaW5pdEdlb21ldHJ5KCk7CisgICAg
bWVtc2V0KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Cit9
CisKK0JsaXQ6On5CbGl0KCkKK3sKKyAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3Rh
dGVCbG9jay0+UmVsZWFzZSgpOworICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0
ZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1
YWRWZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBTSEFERVJfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJz
W2ldKQorICAgICAgICB7CisgICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKK3sK
KyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KKyAgICB7CisgICAgICAgIC0xLCAtMSwK
KyAgICAgICAgLTEsICAxLAorICAgICAgICAgMSwgLTEsCisgICAgICAgICAxLCAgMQorICAgIH07
CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhS
RVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplb2YocXVhZCksIEQzRFVT
QUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1YWRWZXJ0ZXhCdWZmZXIsIE5V
TEwpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgeworICAgICAgICBBU1NFUlQoaHIgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICB2b2lkICpsb2Nr
UHRyOworICAgIG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKKyAg
ICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKKyAgICBtUXVhZFZlcnRleEJ1
ZmZlci0+VW5sb2NrKCk7CisKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZWxl
bWVudHNbXSA9CisgICAgeworICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwgRDNE
REVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKKyAgICAgICAg
RDNEREVDTF9FTkQoKQorICAgIH07CisKKyAgICBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVj
bGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChociA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+
Citib29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2Zp
bGUsCisgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNl
OTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSoqKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hh
ZGVyKShEM0RTaGFkZXJUeXBlKikpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7CisKKyAgICBEM0RTaGFkZXJUeXBlICpzaGFkZXI7CisKKyAgICBpZiAobUNv
bXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCisgICAgeworICAgICAgICBzaGFkZXIgPSBz
dGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSUQzRFhCdWZmZXIgKnNoYWRlckNvZGU7Cisg
ICAgICAgIEhSRVNVTFQgaHIgPSBEM0RYQ29tcGlsZVNoYWRlcihtU2hhZGVyU291cmNlW3NvdXJj
ZV0sIHN0cmxlbihtU2hhZGVyU291cmNlW3NvdXJjZV0pLCBOVUxMLCBOVUxMLCAibWFpbiIsIHBy
b2ZpbGUsIDAsICZzaGFkZXJDb2RlLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY29tcGlsZSAlcyBz
aGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGlu
dClzb3VyY2UsIGhyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGhyID0gKGRldmljZS0+KmNyZWF0ZVNoYWRlcikoc3RhdGljX2Nhc3Q8Y29uc3QgRFdP
UkQqPihzaGFkZXJDb2RlLT5HZXRCdWZmZXJQb2ludGVyKCkpLCAmc2hhZGVyKTsKKyAgICAgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlckNvZGUtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSAlcyBzaGFkZXIgZm9yIGJs
aXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhy
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNoYWRl
ckNvZGUtPlJlbGVhc2UoKTsKKworICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0gPSBz
aGFkZXI7CisgICAgfQorCisgICAgSFJFU1VMVCBociA9IChkZXZpY2UtPipzZXRTaGFkZXIpKHNo
YWRlcik7CisKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVk
IHRvIHNldCAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwg
cHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldFZlcnRleFNoYWRlcihTaGFk
ZXJJZCBzaGFkZXIpCit7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RWZXJ0ZXhTaGFk
ZXI5PihzaGFkZXIsIG1Db250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0
M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0
ZXhTaGFkZXIpOworfQorCitib29sIEJsaXQ6OnNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRl
cikKK3sKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVy
LCBtQ29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCksICZJRGlyZWN0M0REZXZpY2U5OjpD
cmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKK30K
KworUkVDVCBCbGl0OjpnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkg
Y29uc3QKK3sKKyAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICBzdXJmYWNlLT5HZXREZXNj
KCZkZXNjKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAwOworICAgIHJlY3Qu
dG9wID0gMDsKKyAgICByZWN0LnJpZ2h0ID0gZGVzYy5XaWR0aDsKKyAgICByZWN0LmJvdHRvbSA9
IGRlc2MuSGVpZ2h0OworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2Jvb2wgQmxpdDo6Ym94Rmls
dGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQor
eworICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUo
c291cmNlLCBnZXRTdXJmYWNlUmVjdChzb3VyY2UpKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBzYXZlU3RhdGUoKTsKKworICAgIGRldmljZS0+
U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBk
ZXN0KTsKKworICAgIHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworICAgIHNl
dFBpeGVsU2hhZGVyKFNIQURFUl9QU19QQVNTVEhST1VHSCk7CisKKyAgICBzZXRDb21tb25CbGl0
U3RhdGUoKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRF
UiwgRDNEVEVYRl9MSU5FQVIpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNB
TVBfTUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CisKKyAgICBzZXRWaWV3cG9ydChnZXRTdXJm
YWNlUmVjdChkZXN0KSwgMCwgMCk7CisKKyAgICByZW5kZXIoKTsKKworICAgIHRleHR1cmUtPlJl
bGVhc2UoKTsKKworICAgIHJlc3RvcmVTdGF0ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQmxpdDo6Zm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25z
dCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCit7CisgICAgSURpcmVjdDNEVGV4
dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3Qp
OworICAgIGlmICghdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIHNh
dmVTdGF0ZSgpOworCisgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOworICAgIGRl
dmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRlc3QpOworCisgICAgc2V0Vmlld3BvcnQoc291cmNl
UmVjdCwgeG9mZnNldCwgeW9mZnNldCk7CisKKyAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKKyAg
ICBpZiAoc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoZGVzdEZvcm1hdCkpCisgICAgeworICAgICAg
ICByZW5kZXIoKTsKKyAgICB9CisKKyAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisKKyAgICByZXN0
b3JlU3RhdGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsaXQ6OnNldEZvcm1h
dENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KQoreworICAgIGJvb2wgb2theSA9IHNl
dFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOworCisgICAgc3dpdGNoIChkZXN0Rm9y
bWF0KQorICAgIHsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdM
X1JHQkE6CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAg
IG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01QT05FTlRNQVNLKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVy
KFNIQURFUl9QU19MVU1JTkFOQ0UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
IW9rYXkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZW51bSB7
IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07CisKKyAgICAvLyBUaGUgbWVhbmluZyBvZiB0
aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0IHdhcyBzZWxlY3RlZC4KKyAg
ICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3ZlIGZvciBkZXRhaWxzLgorICAg
IGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07CisKKyAgICBzd2l0Y2ggKGRlc3RG
b3JtYXQpCisgICAgeworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2Ug
R0xfUkdCQToKKyAgICAgICAgcHNDb25zdDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtaXSA9
IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgcHNDb25z
dDBbWF0gPSAxOworICAgICAgICBwc0NvbnN0MFtXXSA9IDE7CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBwc0NvbnN0MFtaXSA9IDE7CisgICAgICAgIGJy
ZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgcHNDb25zdDBbWV0gPSAx
OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgIHBzQ29uc3QwW1hdID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZ2V0RGV2
aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1Rl
eHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3Qp
Cit7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVND
IHNvdXJjZURlc2M7CisgICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7CisKKyAgICAv
LyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCisgICAgSURpcmVjdDNEVGV4
dHVyZTkgKnRleHR1cmU7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20g
LSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZv
cm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQor
CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOworICAgIHJlc3VsdCA9IHRl
eHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOworCisgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgIHRleHR1
cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJ
RGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7CisgICAgfQorCisgICAgUkVDVCBkM2RTb3VyY2VSZWN0
OworICAgIGQzZFNvdXJjZVJlY3QubGVmdCA9IHNvdXJjZVJlY3QubGVmdDsKKyAgICBkM2RTb3Vy
Y2VSZWN0LnJpZ2h0ID0gc291cmNlUmVjdC5yaWdodDsKKyAgICBkM2RTb3VyY2VSZWN0LnRvcCA9
IHNvdXJjZVJlY3QudG9wOworICAgIGQzZFNvdXJjZVJlY3QuYm90dG9tID0gc291cmNlUmVjdC5i
b3R0b207CisKKyAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAgIHJlc3VsdCA9IGRldmljZS0+
U3RyZXRjaFJlY3Qoc3VyZmFjZSwgJmQzZFNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxM
LCBEM0RURVhGX05PTkUpOworCisgICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAg
ICB0ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOworICAgIH0KKworICAgIHJldHVybiB0ZXh0
dXJlOworfQorCit2b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3Qs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBEM0RWSUVXUE9SVDkgdnA7CisgICAgdnAuWCAg
ICAgID0geG9mZnNldDsKKyAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OworICAgIHZwLldpZHRoICA9
IHNvdXJjZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7CisgICAgdnAuSGVpZ2h0ID0gc291
cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKKyAgICB2cC5NaW5aICAgPSAwLjBmOwor
ICAgIHZwLk1heFogICA9IDEuMGY7CisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOworCisg
ICAgZmxvYXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5I
ZWlnaHQsIDAsIDAgfTsKKyAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBo
YWxmUGl4ZWxBZGp1c3QsIDEpOworfQorCit2b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgp
Cit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBk
ZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7CisKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVO
QUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFC
TEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7CisgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7CisKKyAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Cisg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZf
UE9JTlQpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRV
UkUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJF
U1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQorICAgIHsKKyAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOworICAgIH0KK30KKwordm9pZCBCbGl0OjpyZW5k
ZXIoKQoreworICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEhSRVNVTFQgaHIg
PSBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNp
emVvZihmbG9hdCkpOworICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVh
ZFZlcnRleERlY2xhcmF0aW9uKTsKKworICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICBo
ciA9IGRldmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKK30K
Kwordm9pZCBCbGl0OjpzYXZlU3RhdGUoKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgSFJFU1VMVCBocjsKKworICAgIGRldmljZS0+R2V0RGVw
dGhTdGVuY2lsU3VyZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKKyAgICBkZXZpY2UtPkdldFJl
bmRlclRhcmdldCgwLCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKKworICAgIGlmIChtU2F2ZWRTdGF0
ZUJsb2NrID09IE5VTEwpCisgICAgeworICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJs
b2NrKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHNldENvbW1v
bkJsaXRTdGF0ZSgpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0WzRd
ID0geyAwLCAwLCAwLCAwIH07CisKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVM
TCk7CisgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29u
c3QsIDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOworICAgICAgICBk
ZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOworCisgICAg
ICAgIEQzRFZJRVdQT1JUOSBkdW1teVZwOworICAgICAgICBkdW1teVZwLlggPSAwOworICAgICAg
ICBkdW1teVZwLlkgPSAwOworICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKKyAgICAgICAgZHVt
bXlWcC5IZWlnaHQgPSAxOworICAgICAgICBkdW1teVZwLk1pblogPSAwOworICAgICAgICBkdW1t
eVZwLk1heFogPSAxOworCisgICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnApOwor
CisgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKKworICAgICAgICBkZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7CisKKyAgICAgICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKKwor
ICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7Cisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRT
dGF0ZUJsb2NrICE9IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOworICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgfQorfQorCit2b2lkIEJsaXQ6OnJlc3RvcmVT
dGF0ZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisK
KyAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsK
KyAgICBpZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2F2
ZWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0g
TlVMTDsKKyAgICB9CisKKyAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5k
ZXJUYXJnZXQpOworICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgICAgICBtU2F2ZWRSZW5k
ZXJUYXJnZXQgPSBOVUxMOworICAgIH0KKworICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9
IE5VTEwpOworCisgICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKKyAgICB7CisgICAg
ICAgIG1TYXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7CisgICAgfQorfQorCit9CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL0JsaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0JsaXQuaAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCbGl0LmNw
cDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCisKKyNpZm5kZWYgTElCR0xFU1YyX0JMSVRf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlIDxkM2Q5Lmg+
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK2Ns
YXNzIENvbnRleHQ7CisKK2NsYXNzIEJsaXQKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IEJs
aXQoQ29udGV4dCAqY29udGV4dCk7CisgICAgfkJsaXQoKTsKKworICAgIC8vIENvcHkgZnJvbSBz
b3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCisgICAgLy8gc291cmNlUmVjdCwgeG9mZnNl
dCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKKyAg
ICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVjaWZp
ZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3JtYXQg
PSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCisgICAgYm9v
bCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CisKKyAgICAvLyAyeDIgYm94IGZpbHRlciBzYW1w
bGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KKyAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBpcyBS
R0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCisgICAgYm9vbCBi
b3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QpOworCisgIHByaXZhdGU6CisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisKKyAgICBJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhE
ZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247CisKKyAgICB2b2lkIGluaXRHZW9t
ZXRyeSgpOworCisgICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZv
cm1hdCk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOworICAgIHZv
aWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCk7CisgICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKKyAgICBSRUNUIGdl
dFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKKworICAgIC8v
IFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJT
b3VyY2UuCisgICAgZW51bSBTaGFkZXJJZAorICAgIHsKKyAgICAgICAgU0hBREVSX1ZTX1NUQU5E
QVJELAorICAgICAgICBTSEFERVJfVlNfRkxJUFksCisgICAgICAgIFNIQURFUl9QU19QQVNTVEhS
T1VHSCwKKyAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKKyAgICAgICAgU0hBREVSX1BTX0NP
TVBPTkVOVE1BU0ssCisgICAgICAgIFNIQURFUl9DT1VOVAorICAgIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2VbXTsKKworICAgIC8vIFRoaXMgYWN0dWFs
bHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgY2FzdGVkIHRvIElVbmtub3duLgorICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJzW1NI
QURFUl9DT1VOVF07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KKyAgICBi
b29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipjcmVhdGVT
aGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUgKiopLAorICAgICAgICAgICAgICAg
ICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFk
ZXJUeXBlKikpOworCisgICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsK
KyAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7CisgICAgdm9pZCByZW5k
ZXIoKTsKKworICAgIHZvaWQgc2F2ZVN0YXRlKCk7CisgICAgdm9pZCByZXN0b3JlU3RhdGUoKTsK
KyAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpt
U2F2ZWREZXB0aFN0ZW5jaWw7CisKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxpdCk7
Cit9OworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
QnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5n
IHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgorLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBi
dWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBnbAoreworCitCdWZmZXI6OkJ1ZmZlcigpCit7CisgICAgbUNvbnRl
bnRzID0gTlVMTDsKKyAgICBtU2l6ZSA9IDA7CisgICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFX
OworfQorCitCdWZmZXI6On5CdWZmZXIoKQoreworICAgIGRlbGV0ZVtdIG1Db250ZW50czsKK30K
Kwordm9pZCBCdWZmZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBz
aXplLCBHTGVudW0gdXNhZ2UpCit7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAgICAg
IGRlbGV0ZVtdIG1Db250ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoc2l6ZSAhPSBtU2l6ZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVtdIG1Db250
ZW50czsKKyAgICAgICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07CisgICAgICAgIG1l
bXNldChtQ29udGVudHMsIDAsIHNpemUpOworICAgIH0KKworICAgIGlmIChkYXRhICE9IE5VTEwg
JiYgc2l6ZSA+IDApCisgICAgeworICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXpl
KTsKKyAgICB9CisKKyAgICBtU2l6ZSA9IHNpemU7CisgICAgbVVzYWdlID0gdXNhZ2U7Cit9CisK
K3ZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIg
c2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KQoreworICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZzZXQs
IGRhdGEsIHNpemUpOworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6
OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgorLy8g
aW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5j
dGlvbmFsaXR5LgorLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCisK
KyNpZm5kZWYgTElCR0xFU1YyX0JVRkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVSX0hf
CisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2RlZmluZSBHTF9B
UElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQnVmZmVyCit7CisgIHB1YmxpYzoK
KyAgICBCdWZmZXIoKTsKKworICAgIHZpcnR1YWwgfkJ1ZmZlcigpOworCisgICAgdm9pZCBidWZm
ZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsK
KyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXpl
LCBHTGludHB0ciBvZmZzZXQpOworCisgICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJuIG1Db250ZW50
czsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KKyAgICBHTGVu
dW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKworICBwcml2YXRlOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOworCisgICAgR0x1Ynl0ZSAqbUNvbnRlbnRz
OworICAgIHNpemVfdCBtU2l6ZTsKKyAgICBHTGVudW0gbVVzYWdlOworfTsKKworfQorCisjZW5k
aWYgICAvLyBMSUJHTEVTVjJfQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI5OTAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENvbnRleHQu
Y3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0
YXRlIGFuZCBwZXJmb3JtaW5nCisvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdM
RVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAi
bGliRUdML0Rpc3BsYXkuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0
cnkvZHg5LmgiCisKKyN1bmRlZiBuZWFyCisjdW5kZWYgZmFyCisKK25hbWVzcGFjZSBnbAorewor
Q29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKQorICAgIDogbUNvbmZp
Zyhjb25maWcpCit7CisgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsK
KworICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOworICAgIG1TdGF0ZS5zdGVuY2ls
Q2xlYXJWYWx1ZSA9IDA7CisKKyAgICBtU3RhdGUuY3VsbEZhY2UgPSBmYWxzZTsKKyAgICBtU3Rh
dGUuY3VsbE1vZGUgPSBHTF9CQUNLOworICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7Cisg
ICAgbVN0YXRlLmRlcHRoVGVzdCA9IGZhbHNlOworICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9M
RVNTOworICAgIG1TdGF0ZS5ibGVuZCA9IGZhbHNlOworICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiA9IEdMX09ORTsKKyAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKKyAgICBt
U3RhdGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsKKyAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEg
PSBHTF9aRVJPOworICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7Cisg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOworICAgIG1TdGF0ZS5i
bGVuZENvbG9yLnJlZCA9IDA7CisgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOworICAg
IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSAwOworICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhh
ID0gMDsKKyAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsKKyAgICBtU3RhdGUuc3RlbmNp
bEZ1bmMgPSBHTF9BTFdBWVM7CisgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAwOworICAgIG1TdGF0
ZS5zdGVuY2lsTWFzayA9IC0xOworICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7Cisg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsKKyAgICBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgPSAwOworICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7CisgICAgbVN0
YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gLTE7CisgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0g
R0xfS0VFUDsKKyAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOworICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrRmFpbCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFp
bCA9IEdMX0tFRVA7CisgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX0tF
RVA7CisgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7CisgICAgbVN0YXRlLnBv
bHlnb25PZmZzZXRGYWN0b3IgPSAwLjBmOworICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMg
PSAwLjBmOworICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKKyAgICBt
U3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBmYWxzZTsKKyAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VW
YWx1ZSA9IDEuMGY7CisgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gZmFsc2U7Cisg
ICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZmFsc2U7CisgICAgbVN0YXRlLmRpdGhlciA9IHRydWU7
CisgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IEdMX0RPTlRfQ0FSRTsKKworICAgIG1T
dGF0ZS5saW5lV2lkdGggPSAxLjBmOworCisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7CisgICAg
bVN0YXRlLnZpZXdwb3J0WSA9IDA7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBjb25maWct
Pm1EaXNwbGF5TW9kZS5XaWR0aDsKKyAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBjb25maWct
Pm1EaXNwbGF5TW9kZS5IZWlnaHQ7CisgICAgbVN0YXRlLnpOZWFyID0gMC4wZjsKKyAgICBtU3Rh
dGUuekZhciA9IDEuMGY7CisKKyAgICBtU3RhdGUuc2Npc3NvclggPSAwOworICAgIG1TdGF0ZS5z
Y2lzc29yWSA9IDA7CisgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IGNvbmZpZy0+bURpc3BsYXlN
b2RlLldpZHRoOworICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1v
ZGUuSGVpZ2h0OworCisgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHRydWU7CisgICAgbVN0YXRl
LmNvbG9yTWFza0dyZWVuID0gdHJ1ZTsKKyAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7
CisgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKKyAgICBtU3RhdGUuZGVwdGhNYXNr
ID0gdHJ1ZTsKKworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDgz
OgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NV
QkVfTUFQIGhhdmUgdHdvZGltZW5zaW9uYWwKKyAgICAvLyBhbmQgY3ViZSBtYXAgdGV4dHVyZSBz
dGF0ZSB2ZWN0b3JzIHJlc3BlY3RpdmVseSBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAgICAvLyBJ
biBvcmRlciB0aGF0IGFjY2VzcyB0byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBsb3N0
LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHRleHR1cmUKKyAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9z
ZSBuYW1lcyBhcmUgMC4KKworICAgIG1UZXh0dXJlMkRaZXJvID0gbmV3IFRleHR1cmUyRCh0aGlz
KTsKKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOwor
CisgICAgbUNvbG9yYnVmZmVyWmVybyA9IE5VTEw7CisgICAgbURlcHRoYnVmZmVyWmVybyA9IE5V
TEw7CisgICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKKworICAgIG1TdGF0ZS5hY3RpdmVT
YW1wbGVyID0gMDsKKyAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKKyAgICBiaW5k
VGV4dHVyZTJEKDApOworICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5kUmVuZGVyYnVm
ZmVyKDApOworCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09V
TlQ7IHR5cGUrKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVy
IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NP
VU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0g
TlVMTDsKKyAgICB9CisKKyAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOworCisgICAgbVN0
YXRlLnBhY2tBbGlnbm1lbnQgPSA0OworICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0Owor
CisgICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxMOworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5V
TEw7CisgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKwor
ICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKKyAg
ICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwor
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKKworICAgIG1IYXNCZWVu
Q3VycmVudCA9IGZhbHNlOworCisgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7Cisg
ICAgbWFya0FsbFN0YXRlRGlydHkoKTsKK30KKworQ29udGV4dDo6fkNvbnRleHQoKQoreworICAg
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CisKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlw
ZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1J
bmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgfQorCisgICAgZGVsZXRlIG1UZXh0dXJlMkRa
ZXJvOworICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1Db2xv
cmJ1ZmZlclplcm87CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAgZGVsZXRlIG1T
dGVuY2lsYnVmZmVyWmVybzsKKworICAgIGRlbGV0ZSBtQnVmZmVyQmFja0VuZDsKKyAgICBkZWxl
dGUgbVZlcnRleERhdGFNYW5hZ2VyOworICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKKyAg
ICBkZWxldGUgbUJsaXQ7CisKKyAgICB3aGlsZSAoIW1CdWZmZXJNYXAuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9
CisKKyAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxl
dGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGls
ZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNoYWRlcihtU2hh
ZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZl
ck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVm
ZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1SZW5kZXJidWZm
ZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVuZGVy
YnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICB3aGlsZSAoIW1UZXh0dXJl
TWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJl
Z2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSkK
KyAgICB7CisgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPlJlbGVhc2UoKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBl
Z2w6OlN1cmZhY2UgKnN1cmZhY2UpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
ZGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoIW1IYXNCZWVuQ3VycmVudCkKKyAgICB7
CisgICAgICAgIG1EZXZpY2VDYXBzID0gZGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOworCisgICAg
ICAgIG1CdWZmZXJCYWNrRW5kID0gbmV3IER4OUJhY2tFbmQodGhpcywgZGV2aWNlKTsKKyAgICAg
ICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1CdWZm
ZXJCYWNrRW5kKTsKKyAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFu
YWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1CbGl0ID0gbmV3IEJsaXQodGhp
cyk7CisKKyAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOworCisgICAgICAgIG1TdGF0ZS52
aWV3cG9ydFggPSAwOworICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKKyAgICAgICAgbVN0
YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOworICAgICAgICBtU3RhdGUu
dmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtU3RhdGUu
c2Npc3NvclggPSAwOworICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOworICAgICAgICBtU3Rh
dGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgbVN0YXRlLnNj
aXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKKworICAgICAgICBtSGFzQmVlbkN1
cnJlbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVjdDNE
IDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcwJyBu
YW1lcworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFj
ZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNp
bCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOworCisgICAgRnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1ZmZlcigpOworICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1
ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7CisgICAgRGVw
dGhidWZmZXIgKmRlcHRoYnVmZmVyWmVybyA9IG5ldyBEZXB0aGJ1ZmZlcihkZXB0aFN0ZW5jaWwp
OworICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IFN0ZW5jaWxidWZm
ZXIoZGVwdGhTdGVuY2lsKTsKKworICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclpl
cm8pOworICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOworICAgIHNldERl
cHRoYnVmZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOworICAgIHNldFN0ZW5jaWxidWZmZXJaZXJv
KHN0ZW5jaWxidWZmZXJaZXJvKTsKKworICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3JidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRoYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVuY2ls
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisKKyAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7CisKKyAgICBpZiAoZGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIGlmIChtRGV2aWNlQ2Fwcy5QaXhl
bFNoYWRlclZlcnNpb24gPT0gRDNEUFNfVkVSU0lPTigzLCAwKSkKKyAgICB7CisgICAgICAgIG1Q
c1Byb2ZpbGUgPSAicHNfM18wIjsKKyAgICAgICAgbVZzUHJvZmlsZSA9ICJ2c18zXzAiOworICAg
IH0KKyAgICBlbHNlICAvLyBlZ2w6OkRpc3BsYXkgZ3VhcmFudGVlcyBzdXBwb3J0IGZvciBhdCBs
ZWFzdCAyLjAKKyAgICB7CisgICAgICAgIG1Qc1Byb2ZpbGUgPSAicHNfMl8wIjsKKyAgICAgICAg
bVZzUHJvZmlsZSA9ICJ2c18yXzAiOworICAgIH0KKworICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVk
IGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRy
YXcuCit2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKK3sKKyAgICBtQXBwbGllZFJl
bmRlclRhcmdldFNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7
CisgICAgbUFwcGxpZWRQcm9ncmFtID0gMDsKKworICAgIG1DbGVhclN0YXRlRGlydHkgPSB0cnVl
OworICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRy
dWU7CisgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBtQmxlbmRTdGF0ZURpcnR5ID0g
dHJ1ZTsKKyAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICBt
U2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwor
fQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwg
ZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCit7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5y
ZWQgPSByZWQ7CisgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOworICAg
IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7CisgICAgbVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5hbHBoYSA9IGFscGhhOworfQorCit2b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgo
ZmxvYXQgZGVwdGgpCit7CisgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworfQor
Cit2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKK3sKKyAgICBtU3Rh
dGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOworfQorCit2b2lkIENvbnRleHQ6OnNldEN1
bGxGYWNlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJs
ZWQpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOworICAgICAgICBt
Q3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0N1bGxG
YWNlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKK30KKwor
dm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBpZiAobVN0YXRl
LmN1bGxNb2RlICE9IG1vZGUpCisgICAgeworICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2Rl
OworICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQoreworICAgIGlmIChtU3RhdGUuZnJvbnRG
YWNlICE9IGZyb250KQorICAgIHsKKyAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250Owor
ICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0
ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsK
KyAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRl
eHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5kZXB0
aFRlc3Q7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMp
Cit7CisgICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQorICAgIHsKKyAgICAg
ICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKKyAgICAgICAgbURlcHRoU3RhdGVEaXJ0
eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQg
ek5lYXIsIGZsb2F0IHpGYXIpCit7CisgICAgbVN0YXRlLnpOZWFyID0gek5lYXI7CisgICAgbVN0
YXRlLnpGYXIgPSB6RmFyOworfQorCit2b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBt
U3RhdGUuYmxlbmQgPSBlbmFibGVkOworICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsK
KyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtU3RhdGUuYmxlbmQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3Jz
KEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdM
ZW51bSBkZXN0QWxwaGEpCit7CisgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3Vy
Y2VSR0IgfHwKKyAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEg
fHwKKyAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8CisgICAgICAgIG1T
dGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCisgICAgeworICAgICAgICBtU3RhdGUu
c291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7CisgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0Ig
PSBkZXN0UkdCOworICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhh
OworICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7CisgICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXRCbGVu
ZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQor
eworICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8CisgICAgICAgIG1TdGF0
ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9y
LmJsdWUgIT0gYmx1ZSB8fAorICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBo
YSkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKKyAgICAgICAg
bVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKKyAgICAgICAgbVN0YXRlLmJsZW5kQ29s
b3IuYmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7
CisgICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1
YXRpb24pCit7CisgICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9u
IHx8CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikK
KyAgICB7CisgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Cisg
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOworICAgICAg
ICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3Qg
IT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7
CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENv
bnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRl
LnN0ZW5jaWxUZXN0OworfQorCit2b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVt
IHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCit7Cisg
ICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAorICAgICAgICBtU3Rh
dGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFz
ayAhPSBzdGVuY2lsTWFzaykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0
ZW5jaWxGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkg
PyBzdGVuY2lsUmVmIDogMDsKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1h
c2s7CisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdM
aW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQoreworICAgIGlmICht
U3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAorICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKKyAgICAgICAgbVN0YXRlLnN0
ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCisgICAgeworICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOworICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKKyAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKKyAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKK3sKKyAgICBpZiAobVN0
YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKKyAgICAgICAgbVN0
ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U3Rl
bmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQoreworICAgIGlm
IChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCisg
ICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dy
aXRlbWFzazsKKyAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBH
TGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykK
K3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8CisgICAgICAg
IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAor
ICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBh
c3MpCisgICAgeworICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKKyAg
ICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7
CisgICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQ
YXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFp
bCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzcykKK3sKKyAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2ls
QmFja0ZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKKyAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFz
c0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCisgICAgeworICAgICAgICBt
U3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOworICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOworICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzOworICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKwor
dm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQorICAgIHsKKyAgICAgICAg
bVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKKyAgICAgICAgbVBvbHlnb25PZmZz
ZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNQb2x5Z29u
T2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9m
ZnNldEZpbGw7CisKK30KKwordm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdM
ZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQoreworICAgIGlmIChtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKKyAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0
cyAhPSB1bml0cykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0g
ZmFjdG9yOworICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7CisgICAg
ICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENv
bnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCit7CisgICAgaWYg
KG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKKyAgICB7CisgICAgICAg
IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOworICAgICAgICBtU2FtcGxl
U3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxlQWxw
aGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9v
bCBlbmFibGVkKQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkK
KyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7CisgICAgICAg
IG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNT
YW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2U7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xj
bGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQoreworICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSAhPSB2YWx1ZSB8fAorICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQg
IT0gaW52ZXJ0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2
YWx1ZTsKKyAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OworICAg
ICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6
OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobVN0YXRlLnNjaXNzb3JU
ZXN0ICE9IGVuYWJsZWQpCisgICAgeworICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFi
bGVkOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOworICAgIH0KK30KKworYm9v
bCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGF0ZS5zY2lzc29yVGVzdDsKK30KKwordm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFi
bGVkKQoreworICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCisgICAgeworICAgICAg
ICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKKyAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0
cnVlOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOworfQorCit2b2lkIENvbnRleHQ6OnNldExpbmVX
aWR0aChHTGZsb2F0IHdpZHRoKQoreworICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKK30K
Kwordm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCit7Cisg
ICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6
c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCit7CisgICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7CisgICAgbVN0YXRlLnZpZXdw
b3J0WSA9IHk7CisgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKKyAgICBtU3RhdGUu
dmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBh
cmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sK
KyAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZICE9IHkgfHwg
CisgICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQgIT0gaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0geDsKKyAg
ICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKKyAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9
IHdpZHRoOworICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
bVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0
Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCit7
CisgICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1hc2tH
cmVlbiAhPSBncmVlbiB8fAorICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAhPSBibHVlIHx8
IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKKyAgICB7CisgICAgICAgIG1TdGF0ZS5j
b2xvck1hc2tSZWQgPSByZWQ7CisgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IGdyZWVu
OworICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7CisgICAgICAgIG1TdGF0ZS5j
b2xvck1hc2tBbHBoYSA9IGFscGhhOworICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQoreworICAg
IGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCisgICAgeworICAgICAgICBtU3RhdGUuZGVw
dGhNYXNrID0gbWFzazsKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKQoreworICAgIG1T
dGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0RnJh
bWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuZnJhbWVidWZmZXI7
Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZm
ZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dLm1FbmFibGVkID0gZW5hYmxlZDsKK30KKworY29uc3QgQXR0cmlidXRlU3Rh
dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKK30KKwor
dm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVt
LCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1h
bGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRl
LCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0
cmliTnVtXS5tQm91bmRCdWZmZXIgPSBib3VuZEJ1ZmZlcjsKKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXplOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKKyAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOworfQorCitjb25zdCB2b2lkICpD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9p
bnRlcjsKK30KKworLy8gcmV0dXJucyBlbnRpcmUgc2V0IG9mIGF0dHJpYnV0ZXMgYXMgYSBibG9j
aworY29uc3QgQXR0cmlidXRlU3RhdGUgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkJsb2NrKCkK
K3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZTsKK30KKwordm9pZCBDb250ZXh0
OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKK3sKKyAgICBtU3RhdGUucGFja0Fs
aWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworfQorCit2b2lk
IENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCit7CisgICAgbVN0
YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKK30KKworR0xpbnQgQ29udGV4dDo6Z2V0
VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKK0dMdWludCBDb250
ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisg
ICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtQnVmZmVyTWFwW2hhbmRsZV0g
PSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQg
c2hhZGVyL3Byb2dyYW0gbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0g
dHlwZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtU2hh
ZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpIHx8IG1Qcm9ncmFtTWFwLmZp
bmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQor
ICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gR0xfVkVS
VEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0
ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9G
UkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcg
RnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgcHJv
Z3JhbS9zaGFkZXIgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQoreworICAg
IHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZpbmQo
aGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAh
PSBtU2hhZGVyTWFwLmVuZCgpKSAgIC8vIFNoYXJlZCBuYW1lIHNwYWNlCisgICAgeworICAgICAg
ICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFByb2dy
YW0oKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHRl
eHR1cmUgbmFtZQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHVuc2ln
bmVkIGludCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxl
KSAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0K
KworICAgIG1UZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRsZTsK
K30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQorR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsK
KworICAgIHdoaWxlIChtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1GcmFtZWJ1ZmZl
ck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1GcmFt
ZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8v
IFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCitHTHVpbnQgQ29udGV4dDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKKworICAg
IHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVyYnVmZmVyTWFw
LmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAgbVJlbmRlcmJ1
ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgQnVmZmVyTWFwOjpp
dGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKKworICAgIGlm
IChidWZmZXJPYmplY3QgIT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgIGRlbGV0ZSBidWZmZXJPYmplY3QtPnNlY29uZDsK
KyAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJPYmplY3QpOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKK3sKKyAgICBTaGFkZXJNYXA6
Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFkZXIpOworCisgICAg
aWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KCFzaGFkZXJPYmplY3QtPnNlY29uZC0+aXNBdHRhY2hlZCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2hhZGVyTWFw
LmVyYXNlKHNoYWRlck9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQg
cHJvZ3JhbSkKK3sKKyAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtT2JqZWN0ID0gbVBy
b2dyYW1NYXAuZmluZChwcm9ncmFtKTsKKworICAgIGlmIChwcm9ncmFtT2JqZWN0ICE9IG1Qcm9n
cmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKHByb2dyYW0gIT0gbVN0YXRlLmN1cnJl
bnRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+
c2Vjb25kOworICAgICAgICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgVGV4dHVy
ZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7
CisKKyAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUgIT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHRleHR1cmVPYmplY3QtPnNlY29uZDsK
KyAgICAgICAgfQorCisgICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOwor
ICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVi
dWZmZXIpCit7CisgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0
ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOworCisgICAgaWYgKGZyYW1lYnVm
ZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKworICAgICAgICBkZWxldGUgZnJhbWVidWZmZXJP
YmplY3QtPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwLmVyYXNlKGZyYW1lYnVmZmVy
T2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdM
dWludCByZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5k
ZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKKwor
ICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworCisgICAgICAg
IGRlbGV0ZSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZDsKKyAgICAgICAgbVJlbmRlcmJ1ZmZl
ck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVy
ICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1hcFti
dWZmZXJdID0gbmV3IEJ1ZmZlcigpOworICAgIH0KKworICAgIG1TdGF0ZS5hcnJheUJ1ZmZlciA9
IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2ln
bmVkIGludCBidWZmZXIpCit7CisgICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVm
ZmVyKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsK
KyAgICB9CisKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID0gYnVmZmVyOworfQorCit2
b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCit7CisgICAgaWYgKCFn
ZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAgICAgIG1UZXh0
dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmUyRCh0aGlzKTsKKyAgICB9CisKKyAgICBtU3Rh
dGUudGV4dHVyZTJEID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1Q
TEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworfQorCit2b2lkIENvbnRl
eHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAoIWdldFRl
eHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQorICAgIHsKKyAgICAgICAgbVRleHR1cmVN
YXBbdGV4dHVyZV0gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgfQorCisgICAgbVN0
YXRlLnRleHR1cmVDdWJlTWFwID0gdGV4dHVyZTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXSA9IHRleHR1cmU7Cit9CisKK3Zv
aWQgQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBp
ZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKKyAgICB7CisgICAgICAgIG1GcmFtZWJ1
ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKKyAgICB9CisKKyAgICBt
U3RhdGUuZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5k
UmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKHJlbmRlcmJ1ZmZl
ciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKKyAgICB7CisgICAgICAg
IG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IG5ldyBSZW5kZXJidWZmZXIoKTsKKyAg
ICB9CisKKyAgICBtU3RhdGUucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyOworfQorCit2b2lk
IENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgUHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTHVpbnQgcHJpb3JQcm9n
cmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9
IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBk
ZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KKworICAgIGlmIChwcm9ncmFt
T2JqZWN0ICYmIHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkpCisgICAgewor
ICAgICAgICBkZWxldGVQcm9ncmFtKHByaW9yUHJvZ3JhbSk7CisgICAgfQorfQorCit2b2lkIENv
bnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRl
bGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVy
OworfQorCit2b2lkIENvbnRleHQ6OnNldENvbG9yYnVmZmVyWmVybyhDb2xvcmJ1ZmZlciAqYnVm
ZmVyKQoreworICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJvOworICAgIG1Db2xvcmJ1ZmZlclpl
cm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6c2V0RGVwdGhidWZmZXJaZXJvKERlcHRo
YnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87CisgICAgbURl
cHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKK30KKwordm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsYnVm
ZmVyWmVybyhTdGVuY2lsYnVmZmVyICpidWZmZXIpCit7CisgICAgZGVsZXRlIG1TdGVuY2lsYnVm
ZmVyWmVybzsKKyAgICBtU3RlbmNpbGJ1ZmZlclplcm8gPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6c2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQoreworICAgIGRlbGV0
ZSBtUmVuZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdOworICAgIG1SZW5kZXJidWZm
ZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl0gPSBidWZmZXI7Cit9CisKK0J1ZmZlciAqQ29udGV4
dDo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgQnVmZmVyTWFwOjppdGVy
YXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChidWZmZXIg
PT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7CisgICAgfQor
fQorCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQorewor
ICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRsZSk7
CisKKyAgICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNoYWRl
ci0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbSh1bnNp
Z25lZCBpbnQgaGFuZGxlKQoreworICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBt
UHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1h
cC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgIH0KK30KKworVGV4dHVy
ZSAqQ29udGV4dDo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGlmICho
YW5kbGUgPT0gMCkgcmV0dXJuIE5VTEw7CisKKyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0ZXh0
dXJlID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHRleHR1cmUgPT0gbVRl
eHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsKKyAgICB9Cit9CisK
K0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxl
KQoreworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1
ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVm
ZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOworICAgIH0KK30K
KworUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhh
bmRsZSkKK3sKKyAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9IG1S
ZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBt
UmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29uZDsK
KyAgICB9Cit9CisKK0NvbG9yYnVmZmVyICpDb250ZXh0OjpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQg
aGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgICAg
aWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yYnVmZmVyKj4ocmVuZGVy
YnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAgLy8gU3BlY2lhbCBjYXNlOiAw
IHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNlZCBvbiB0aGUg
YXR0YWNobWVudCB0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVyWmVybzsK
KyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRGVwdGhidWZmZXIgKkNvbnRleHQ6Omdl
dERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSAhPSAwKQorICAg
IHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZmZXIo
aGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVyYnVmZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNE
ZXB0aGJ1ZmZlcigpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
ICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHJlbmRlciB0
YXJnZXRzIGJhc2VkIG9uIHRoZSBhdHRhY2htZW50IHR5cGUKKyAgICB7CisgICAgICAgIHJldHVy
biBtRGVwdGhidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitTdGVu
Y2lsYnVmZmVyICpDb250ZXh0OjpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpCit7Cisg
ICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJi
dWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKworICAgICAgICBpZiAocmVuZGVyYnVm
ZmVyICYmIHJlbmRlcmJ1ZmZlci0+aXNTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdGVuY2lsYnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXJaZXJvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5h
cnJheUJ1ZmZlcik7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpOwor
fQorCitQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCit7CisgICAgcmV0dXJu
IGdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKK30KKworVGV4dHVyZTJEICpDb250
ZXh0OjpnZXRUZXh0dXJlMkQoKQoreworICAgIGlmIChtU3RhdGUudGV4dHVyZTJEID09IDApICAg
Ly8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBi
YXNlZCBvbiB0aGUgdGFyZ2V0CisgICAgeworICAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm87
CisgICAgfQorCisgICAgcmV0dXJuIChUZXh0dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRleHR1
cmUyRCk7Cit9CisKK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgp
Cit7CisgICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9PSAwKSAgIC8vIFNwZWNpYWwgY2Fz
ZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRh
cmdldAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAgfQor
CisgICAgcmV0dXJuIChUZXh0dXJlQ3ViZU1hcCopZ2V0VGV4dHVyZShtU3RhdGUudGV4dHVyZUN1
YmVNYXApOworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25l
ZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07CisKKyAgICBpZiAodGV4aWQgPT0g
MCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOiByZXR1cm4g
bVRleHR1cmUyRFplcm87CisgICAgICAgICAgY2FzZSBTQU1QTEVSX0NVQkU6IHJldHVybiBtVGV4
dHVyZUN1YmVNYXBaZXJvOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGdldFRleHR1
cmUodGV4aWQpOworfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIoKQor
eworICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUuZnJhbWVidWZmZXIpOworfQorCiti
b29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMp
Cit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1NIQURFUl9DT01Q
SUxFUjogICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAqcGFyYW1z
ID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNrOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAg
ICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKKyAgICAgICAgcGFyYW1zWzFd
ID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29s
b3JNYXNrQmx1ZTsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9G
SUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7CisgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBo
YVRvQ292ZXJhZ2U7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNU
OiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7
CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFRlc3Q7CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5ibGVuZDsKKyAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0
OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgLy8gUGxl
YXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBn
ZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KKyAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBh
IGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCisg
ICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291
bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQorICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1h
a2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0Y2gg
KHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVy
YWdlVmFsdWU7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25P
ZmZzZXRGYWN0b3I7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBn
bDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKKyAgICAgICAgcGFyYW1zWzFdID0gZ2w6
OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICAgIHBhcmFtc1swXSA9IGdsOjpB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOworICAgICAgICBwYXJhbXNbMV0gPSBnbDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0RFUFRIX1JBTkdFOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7CisgICAgICAg
IHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdy
ZWVuOworICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7Cisg
ICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKKyAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmJsZW5kQ29sb3IucmVkOworICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRD
b2xvci5ncmVlbjsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsK
KyAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFM
VUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRh
dGlvbgorICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhl
IGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKKyAgICAvLyBHZXRJbnRlZ2VydiBh
cyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNp
b24gaW4gYW55CisgICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRv
IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCisgICAgLy8gQ29u
dGV4dDo6Z2V0RmxvYXR2LgorICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZBUllJTkdfVkVDVE9SUzsgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzogKnBhcmFtcyA9IGdsOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFy
YW1zID0gZ2w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJhbXMgPSBnbDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdsOjpNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJC
VUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9S
TUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6
ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAvKiBubyBjb21wcmVz
c2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkgZm9y
bWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJB
WV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZl
cjsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcjsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
a0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlBBQ0tf
QUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1l
bnQ7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9I
SU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBh
c3NEZXB0aFBhc3M7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRI
X0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNv
dXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRf
U1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRB
bHBoYTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2s7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0
ZW1hc2s7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnbDo6TUFYX1RFWFRVUkVfU0laRTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdsOjpN
QVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NB
TVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFUzogICAg
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFU
OiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heCgoaW50KWdsOjpNQVhfUkVOREVSQlVGRkVSX1NJ
WkUsIChpbnQpZ2w6Ok1BWF9URVhUVVJFX1NJWkUpOworICAgICAgICAgICAgcGFyYW1zWzBdID0g
bWF4RGltZW5zaW9uOworICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgICAg
cGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKKyAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRl
LnZpZXdwb3J0WTsKKyAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7Cisg
ICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUu
c2Npc3Nvclg7CisgICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKKyAgICAgICAg
cGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsKKyAgICAgICAgcGFyYW1zWzNdID0gbVN0
YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DVUxMX0ZB
Q0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoK
KyAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJh
bWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAqcGFy
YW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVlblNp
emUoKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpwYXJh
bXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhhU2l6
ZSgpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRI
X0JJVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoYnVmZmVyICpkZXB0
aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworCisgICAgICAgICAgICBp
ZiAoZGVwdGhidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CSVRTOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVyICpz
dGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKworICAgICAg
ICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1T
dGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdsOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVy
VGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3Rh
dGUuYWN0aXZlU2FtcGxlciA+IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5h
Y3RpdmVTYW1wbGVyXTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0g
KnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQoreworICAgIC8vIFBsZWFzZSBub3RlOiB0
aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBs
ZW1lbnRhdGlvbgorICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUg
c3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUKKyAgICAvLyB0byB0
aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3
b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KKyAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6
OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRl
ZCAKKyAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJl
dHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFibGUsIHdlCisgICAgLy8gcGxhY2UgREVQ
VEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZl
cmVuY2UgdG8gdGhlIGNhbGxpbmcKKyAgICAvLyBhcHBsaWNhdGlvbi4KKyAgICBzd2l0Y2ggKHBu
YW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6IC8q
IG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gCisgICAgICBj
YXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5
cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJ
TkdfVkVDVE9SUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICAg
IGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0la
RToKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICAgIGNhc2Ug
R0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKKyAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJP
R1JBTToKKyAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX1VOUEFD
S19BTElHTk1FTlQ6CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAg
Y2FzZSBHTF9SRURfQklUUzoKKyAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKKyAgICAgIGNhc2Ug
R0xfQkxVRV9CSVRTOgorICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgorICAgICAgY2FzZSBHTF9E
RVBUSF9CSVRTOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6CisgICAgICBjYXNlIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RF
OgorICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgorICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVS
RToKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZB
TFVFX01BU0s6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOgorICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0ZBSUw6CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX0ZVTkM6CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJ
TDoKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgIGNhc2UgR0xfREVQVEhf
RlVOQzoKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjoKKyAgICAgIGNhc2UgR0xfQkxFTkRf
U1JDX0FMUEhBOgorICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOgorICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfQUxQSEE6CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoKKyAgICAg
IGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJ
VEVNQVNLOgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOgor
ICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9N
QVBfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKKyAgICAgIGNh
c2UgR0xfU0FNUExFUzoKKyAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOgorICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVA6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwor
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICB7CisgICAgICAgICAgICAq
dHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgIGNhc2UgR0xfU0NJ
U1NPUl9CT1g6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAg
ICAgICAgKm51bVBhcmFtcyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NIQURFUl9DT01QSUxFUjoKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lO
VkVSVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOgorICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgIC8vIENVTExfRkFDRSB0aHJvdWdoIERJVEhFUiBhcmUgbmF0
dXJhbCB0byBJc0VuYWJsZWQsCisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgLy8gYnV0IGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVyaWVz
LgorICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1
cnBvc2UsIHRoZXkgYXJlIHRyZWF0ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwKKyAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFOgorICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6CisgICAgICBj
YXNlIEdMX1NURU5DSUxfVEVTVDoKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDoKKyAgICAgIGNh
c2UgR0xfQkxFTkQ6CisgICAgICBjYXNlIEdMX0RJVEhFUjoKKyAgICAgICAgeworICAgICAgICAg
ICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAgICAg
ICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOworICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZBQ1RPUjoKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAg
ICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICAgIGNhc2UgR0xfREVQVEhfQ0xF
QVJfVkFMVUU6CisgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6CisgICAgICAgIHsKKyAgICAgICAg
ICAgICp0eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JB
TkdFOgorICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgICBjYXNl
IEdMX0RFUFRIX1JBTkdFOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FU
OworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgY2FzZSBHTF9CTEVORF9D
T0xPUjoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwg
c3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAorLy8gc2Npc3NvciByZWN0YW5nbGUgdG8g
dGhlIERpcmVjdDNEIDkgZGV2aWNlCitib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJv
b2wgaWdub3JlVmlld3BvcnQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CisKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFt
ZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9i
amVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgewor
ICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0
ZW5jaWwoKTsKKworICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CisgICAgaWYgKHJlbmRlclRhcmdl
dFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKKyAgICB7CisgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CisgICAgICAgIG1BcHBsaWVk
UmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIH0KKworICAgIHVu
c2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aGJ1ZmZlclNlcmlhbCgpOworICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsKQorICAgIHsKKyAgICAgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxT
dXJmYWNlKGRlcHRoU3RlbmNpbCk7CisgICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwg
PSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB9CisKKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQ7
CisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZk
ZXNjKTsKKworICAgIGlmIChpZ25vcmVWaWV3cG9ydCkKKyAgICB7CisgICAgICAgIHZpZXdwb3J0
LlggPSAwOworICAgICAgICB2aWV3cG9ydC5ZID0gMDsKKyAgICAgICAgdmlld3BvcnQuV2lkdGgg
PSBkZXNjLldpZHRoOworICAgICAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAg
ICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBm
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2aWV3cG9ydC5YID0gc3RkOjptYXgo
bVN0YXRlLnZpZXdwb3J0WCwgMCk7CisgICAgICAgIHZpZXdwb3J0LlkgPSBzdGQ6Om1heChtU3Rh
dGUudmlld3BvcnRZLCAwKTsKKyAgICAgICAgdmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbihtU3Rh
dGUudmlld3BvcnRXaWR0aCwgKGludClkZXNjLldpZHRoIC0gKGludCl2aWV3cG9ydC5YKTsKKyAg
ICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAo
aW50KWRlc2MuSGVpZ2h0IC0gKGludCl2aWV3cG9ydC5ZKTsKKyAgICAgICAgdmlld3BvcnQuTWlu
WiA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKKyAgICAgICAgdmlld3BvcnQuTWF4WiA9IGNsYW1w
MDEobVN0YXRlLnpGYXIpOworICAgIH0KKworICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8
IHZpZXdwb3J0LkhlaWdodCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8v
IE5vdGhpbmcgdG8gcmVuZGVyCisgICAgfQorCisgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdmll
d3BvcnQpOworCisgICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKKyAgICB7CisgICAgICAgIGlm
IChtU3RhdGUuc2Npc3NvclRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1QgcmVjdCA9
IHttU3RhdGUuc2Npc3NvclgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNz
b3JZLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5z
Y2lzc29yV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZICsg
bVN0YXRlLnNjaXNzb3JIZWlnaHR9OworCisgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNzb3JS
ZWN0KCZyZWN0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJ
U1NPUlRFU1RFTkFCTEUsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVO
QUJMRSwgRkFMU0UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtU2Npc3NvclN0YXRl
RGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtKQor
ICAgIHsKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFt
KCk7CisKKyAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAv
IHZpZXdwb3J0LldpZHRoLCAxLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKKyAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCAoR0xmbG9hdCopJnh5KTsK
KworICAgICAgICBHTGludCB3aW5kb3cgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFdpbmRvd0xvY2F0
aW9uKCk7CisgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAv
IDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8g
Mi4wZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRZ
ICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07CisgICAgICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm00ZnYod2luZG93LCAxLCAoR0xmbG9hdCopJndoeHkpOworCisgICAgICAgIEdM
aW50IGRlcHRoID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7CisgICAgICAg
IEdMZmxvYXQgZHpbMl0gPSB7KG1TdGF0ZS56RmFyIC0gbVN0YXRlLnpOZWFyKSAvIDIuMGYsICht
U3RhdGUuek5lYXIgKyBtU3RhdGUuekZhcikgLyAyLjBmfTsKKyAgICAgICAgcHJvZ3JhbU9iamVj
dC0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgKEdMZmxvYXQqKSZkeik7CisKKyAgICAgICAgR0xp
bnQgbmVhciA9IHByb2dyYW1PYmplY3QtPmdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKTsKKyAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihuZWFyLCAxLCAmbVN0YXRlLnpOZWFy
KTsKKworICAgICAgICBHTGludCBmYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlRmFy
TG9jYXRpb24oKTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFmdihmYXIsIDEs
ICZtU3RhdGUuekZhcik7CisKKyAgICAgICAgR0xpbnQgZGlmZiA9IHByb2dyYW1PYmplY3QtPmdl
dERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCB6RGlmZiA9IG1TdGF0
ZS56RmFyIC0gbVN0YXRlLnpOZWFyOworICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3Jt
MWZ2KGRpZmYsIDEsICZ6RGlmZik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IEFwcGxpZXMgdGhlIGZpeGVkLWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBh
bHBoYSBibGVuZGluZywgc3RlbmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
K3ZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICBHTGludCBmcm9udENDVyA9IHByb2dy
YW1PYmplY3QtPmdldER4RnJvbnRDQ1dMb2NhdGlvbigpOworICAgIEdMaW50IGNjdyA9IChtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NDVyk7CisgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFp
dihmcm9udENDVywgMSwgJmNjdyk7CisKKyAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKTsKKyAgICBHTGludCBhbHdheXNG
cm9udCA9ICFpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7CisgICAgcHJvZ3JhbU9iamVjdC0+c2V0
VW5pZm9ybTFpdihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOworCisgICAgaWYgKG1D
dWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0
YXRlLmN1bGxGYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9k
ZSwgbVN0YXRlLmZyb250RmFjZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNE
Q1VMTF9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IGZhbHNl
OworICAgIH0KKworICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQorICAgIHsKKyAgICAgICAgaWYg
KG1TdGF0ZS5kZXB0aFRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7CisgICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0
YXRlLmRlcHRoRnVuYykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxT
RSk7CisgICAgICAgIH0KKworICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRl
LmJsZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOworCisgICAgICAgICAgICBpZiAobVN0YXRlLnNv
dXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICBtU3Rh
dGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0QmxlbmRS
R0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4
OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+KG1TdGF0
ZS5ibGVuZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVu
ZENvbG9yLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9y
LmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhh
KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxl
bmRSR0IpKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJM
RU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVzMmR4OjpDb252
ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOworCisgICAgICAgICAgICBpZiAo
bVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IAorICAg
ICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RCbGVuZEFscGhh
IHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0ZS5i
bGVuZEVxdWF0aW9uQWxwaGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwor
CisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFM
UEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOwor
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5EQUxQ
SEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOworICAg
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBl
czJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOworCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUs
IEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVO
QUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IGZh
bHNlOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURp
cnR5KQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBoYXNTdGVuY2ls
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgVFJVRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOworCisgICAgICAgICAgICAvLyBGSVhN
RTogVW5zdXBwb3J0ZWQgYnkgRDNEOQorICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVU
WVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKKyAgICAgICAgICAg
IGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBEM0RSU19T
VEVOQ0lMTUFTSzsKKyAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19D
Q1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7CisgICAgICAgICAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVt
YXNrIHx8IAorICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0ZS5zdGVu
Y2lsQmFja1JlZiB8fCAKKyAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIo
IlNlcGFyYXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2UgdmFsdWVz
LCBvciBzdGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBzdGVu
Y2lsIHJlZgorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZy
YW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBHTHVpbnQg
bWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsK
KworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRF
TUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5D
IDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOworCisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0
ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJlZiA6IG1heFN0
ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNL
LCBtU3RhdGUuc3RlbmNpbE1hc2spOworCisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RS
U19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
czJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RS
U19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsKSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1T
dGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1df
U1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKKworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8g
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3Rh
dGUuc3RlbmNpbEJhY2tXcml0ZW1hc2spOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZVTkMgOiBEM0RS
U19DQ1dfU1RFTkNJTEZVTkMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
czJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNrRnVuYykpOworCisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNp
bEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBt
YXhTdGVuY2lsKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxN
QVNLLCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKKworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTEZBSUwg
OiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsKSk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0
YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1Mg
OiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IGZhbHNlOworICAgIH0KKworICAg
IGlmIChtTWFza1N0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0
ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOworICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgbVN0YXRlLmRl
cHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkKKyAgICB7Cisg
ICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpLT5nZXRE
ZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FM
RURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcikpOworICAg
ICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsKKyAgICAgICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZk
ZXB0aEJpYXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FM
RURFUFRIQklBUywgMCk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFUFRIQklBUywgMCk7CisgICAgICAgIH0KKworICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRl
RGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobUNvbmZpZy0+bU11bHRpU2FtcGxlICE9
IDAgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnNhbXBs
ZUFscGhhVG9Db3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBh
bHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgRklY
TUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAgICB9CisKKyAg
ICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobURpdGhl
clN0YXRlRGlydHkpCisgICAgeworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7CisKKyAgICAgICAg
bURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtRnJvbnRGYWNlRGlydHkg
PSBmYWxzZTsKK30KKworLy8gRmlsbCBpbiB0aGUgc2VtYW50aWNJbmRleCBmaWVsZCBvZiB0aGUg
YXJyYXkgb2YgVHJhbnNsYXRlZEF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBHTFNMIHBy
b2dyYW0uCit2b2lkIENvbnRleHQ6Omxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqYXR0cmlidXRlcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgYXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4ID0g
Z2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0U2VtYW50aWNJbmRleChpKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdMZW51bSBtb2RlLCBH
TGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAqdXNlSW5kZXhpbmcsIFRyYW5zbGF0ZWRJ
bmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0
ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1h
bmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGZpcnN0LCBjb3VudCwgdHJhbnNsYXRlZCk7CisgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg
fQorCisgICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKKworICAgIG1CdWZm
ZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAg
IGlmICh0cmFuc2xhdGVkW2ldLmVuYWJsZWQgJiYgdHJhbnNsYXRlZFtpXS5ub25BcnJheSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZh
bGlkYXRlVW5pbmRleGVkKG1vZGUsIGNvdW50LCBpbmRleEluZm8pOworICAgICAgICAgICAgaWYg
KGVyciAhPSBHTF9OT19FUlJPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtQnVmZmVyQmFja0VuZC0+c2V0
dXBJbmRpY2VzUHJlRHJhdygqaW5kZXhJbmZvKTsKKworICAgICAgICAgICAgKnVzZUluZGV4aW5n
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKKyAgICAgICAgfQorICAg
IH0KKworICAgICp1c2VJbmRleGluZyA9IGZhbHNlOworICAgIHJldHVybiBHTF9OT19FUlJPUjsK
K30KKworR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRyYW5zbGF0ZWRJ
bmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0
ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1h
bmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1h
eEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCB0cmFuc2xhdGVkKTsKKworICAgIGlmIChlcnIg
PT0gR0xfTk9fRVJST1IpCisgICAgeworICAgICAgICBsb29rdXBBdHRyaWJ1dGVNYXBwaW5nKHRy
YW5zbGF0ZWQpOworCisgICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVE
cmF3KHRyYW5zbGF0ZWQpOworICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9CisKKy8vIEFwcGxp
ZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNE
IDkgZGV2aWNlCitHTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCB2b2lkICpp
bmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0
ZWRJbmRleERhdGEgKmluZGV4SW5mbykKK3sKKyAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1h
bmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1vZGUsIHR5cGUsIGNvdW50LCBnZXRCdWZmZXIobVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciksIGluZGljZXMsIGluZGV4SW5mbyk7CisKKyAgICBpZiAo
ZXJyID09IEdMX05PX0VSUk9SKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlckJhY2tFbmQtPnNldHVw
SW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisgICAgfQorCisgICAgcmV0dXJuIGVycjsKK30K
KworLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUgRGly
ZWN0M0QgOSBkZXZpY2UKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKK3sKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5
ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtT2JqZWN0LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBJ
RGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKworICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CisKKyAgICBpZiAocHJv
Z3JhbU9iamVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtKQorICAgIHsKKyAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5kaXJ0eUFsbFNhbXBsZXJzKCk7CisgICAgICAgIG1BcHBsaWVkUHJvZ3JhbSA9IHByb2dy
YW1PYmplY3QtPmdldFNlcmlhbCgpOworICAgIH0KKworICAgIHByb2dyYW1PYmplY3QtPmFwcGx5
VW5pZm9ybXMoKTsKK30KKworLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3Rh
dGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgIGZvciAo
aW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBs
ZXIrKykKKyAgICB7CisgICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1PYmplY3QtPmdl
dFNhbXBsZXJNYXBwaW5nKHNhbXBsZXIpOworICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFNhbXBsZXJUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0U2FtcGxlclR5cGUoc2FtcGxlcik7CisKKyAgICAgICAgICAgIFRleHR1cmUg
KnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwor
CisgICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+aXNTYW1wbGVyRGlydHkoc2FtcGxlcikg
fHwgdGV4dHVyZS0+aXNEaXJ0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOworICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOworICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7CisgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIo
KTsKKworICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVy
LCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNhbXBsZXIsIEQzRFNB
TVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKKworICAgICAg
ICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX01B
R0ZJTFRFUiwgZXMyZHg6OkNvbnZlcnRNYWdGaWx0ZXIobWFnRmlsdGVyKSk7CisgICAgICAgICAg
ICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVy
OworICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydE1pbkZpbHRlcihtaW5GaWx0ZXIs
ICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIpOworICAgICAgICAgICAgICAgICAgICBkZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmls
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxl
ciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7CisKKyAgICAgICAgICAgICAgICAg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBsZXIsIHRleHR1cmUtPmdldFRleHR1cmUoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCBnZXRJbmNv
bXBsZXRlVGV4dHVyZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRTYW1w
bGVyRGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNhbXBs
ZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShz
YW1wbGVyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRTYW1wbGVy
RGlydHkoc2FtcGxlciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgCisgICAg
fQorfQorCit2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB2b2lk
KiBwaXhlbHMpCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZm
ZXIoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworCisgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlOwor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uo
ZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwg
JnN5c3RlbVN1cmZhY2UsIE5VTEwpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJ
U0FNUExFX05PTkUpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6
IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVk
IHJlbmRlciB0YXJnZXQKKyAgICB9CisKKyAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKKworICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICB7CisgICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAg
ICAgICBzd2l0Y2ggKHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBEM0RFUlJf
RFJJVkVSSU5URVJOQUxFUlJPUjoKKyAgICAgICAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQorICAgICAg
ICB9CisgICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKKyAgICBSRUNUIHJlY3QgPSB7
c3RkOjptYXgoeCwgMCksCisgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KHksIDApLAorICAgICAg
ICAgICAgICAgICBzdGQ6Om1pbih4ICsgd2lkdGgsIChpbnQpZGVzYy5XaWR0aCksCisgICAgICAg
ICAgICAgICAgIHN0ZDo6bWluKHkgKyBoZWlnaHQsIChpbnQpZGVzYy5IZWlnaHQpfTsKKworICAg
IHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19S
RUFET05MWSk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAg
cmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCisgICAgfQorCisgICAg
dW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7CisgICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7CisgICAgdW5zaWdu
ZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOworCisgICAgR0xzaXpl
aSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUu
cGFja0FsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0g
cmVjdC50b3A7IGorKykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5y
aWdodCAtIHJlY3QubGVmdDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCByOwor
ICAgICAgICAgICAgZmxvYXQgZzsKKyAgICAgICAgICAgIGZsb2F0IGI7CisgICAgICAgICAgICBm
bG9hdCBhOworCisgICAgICAgICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0
Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgx
LjBmIC8gMHgwMDFGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICog
KDEuMGYgLyAweDA3RTApOworICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkg
KiAoMS4wZiAvIDB4RjgwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHhyZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgYSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAx
RikgKiAoMS4wZiAvIDB4MDAxRik7CisgICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4
MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7CisgICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAm
IDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAq
KHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOworICAg
ICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwor
ICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTAp
OworICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdD
MDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsg
NCAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdi
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOworICAgICAgICAgICAgICAgICAg
ICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7CisgICAgICAg
ICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAw
KTsKKyAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAv
IDB4MDBGRjAwMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kiko
c291cmNlICsgNCAqIGkgKyBqICogbG9jay5QaXRjaCk7CisKKyAgICAgICAgICAgICAgICAgICAg
YSA9IDEuMGY7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICog
KDEuMGYgLyAweDAwMDAwMEZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgw
MDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOworICAgICAgICAgICAgICAgICAgICByID0g
KHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
MlIxMEcxMEIxMDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBsb2Nr
LlBpdGNoKTsKKworICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAq
ICgxLjBmIC8gMHhDMDAwMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4
MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOworICAgICAgICAgICAg
ICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQorICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAoZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1JH
QkE6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIHIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9GT1JNQVQKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAvLyBJ
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUKKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2
W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41
ZikgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEg
KiByICsgMC41ZikgPDwgMTEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3lzdGVtU3VyZmFjZS0+
VW5sb2NrUmVjdCgpOworCisgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworfQorCit2b2lk
IENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKKyAgICBEV09SRCBmbGFncyA9IDA7CisKKyAgICBpZiAobWFzayAm
IEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgeworICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9C
VUZGRVJfQklUOworCisgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZm
ZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gRDNE
Q0xFQVJfVEFSR0VUOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVSX0JJ
VDsKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdl
dERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
YWdzIHw9IEQzRENMRUFSX1pCVUZGRVI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoU3Rl
bmNpbCgpOworCisgICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKKworICAgIGlmICgo
bWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZGVwdGhTdGVuY2lsKQorICAgIHsKKyAg
ICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVz
YygmZGVzYyk7CisKKyAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAg
ICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVz
Yy5Gb3JtYXQpOworICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7CisKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobWFzayAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkp
ICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRo
ZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEQzRENPTE9S
IGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFs
cGhhKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3Jl
ZW4pLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08
OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgZmxvYXQgZGVwdGggPSBjbGFt
cDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUpOworICAgIGludCBzdGVuY2lsID0gbVN0YXRlLnN0
ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAg
ICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKKyAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2Mp
OworCisgICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGVzMmR4OjpHZXRBbHBoYVNpemUoZGVzYy5G
b3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKKworICAgIGNvbnN0IGJvb2wg
bmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7CisgICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShtU3RhdGUuY29sb3JNYXNr
UmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOwor
CisgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIp
CisgICAgeworICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBm
cm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCisgICAgICAgIC8vIFN0
YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwgYmUgZmxhZ2dlZCBk
aXJ0eSBpbiB0aGUgY2FzZSB0aGF0CisgICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uCisg
ICAgICAgIEhSRVNVTFQgaHI7CisgICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID09
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxv
Y2soKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNF
KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQz
RENVTExfTk9ORSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJ
TExNT0RFLCBEM0RGSUxMX1NPTElEKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7CisgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKKyAgICAg
ICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUs
IEZBTFNFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisKKyAgICAgICAgICAgIGhyID0gZGV2
aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKKyAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IGhyID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1NYXNr
ZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNh
dmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xl
YXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgICAgIH0KKworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pX
UklURUVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKKyAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRU5BQkxFLCBGQUxTRSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7CisgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOworICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOworICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKKyAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOworCisgICAg
ICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAobVN0YXRlLmNv
bG9yTWFza1JlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0
ZS5jb2xvck1hc2tHcmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gOiAwKSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
U3RhdGUuY29sb3JNYXNrQmx1ZSAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobVN0YXRlLmNvbG9yTWFza0FscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDAp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RDTEVB
Ul9TVEVOQ0lMKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgRkFMU0UpOworICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZUyk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxSRUYsIHN0
ZW5jaWwpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
V1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayk7CisgICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxaRkFJTCwg
RDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMUEFTUywgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOworICAgICAgICAgICAg
bVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVO
QUJMRSwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRl
cihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CisgICAgICAg
IGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7CisgICAgICAg
IGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKKworICAgICAgICBzdHJ1Y3QgVmVy
dGV4CisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHgsIHksIHosIHc7CisgICAgICAgICAg
ICBEM0RDT0xPUiBkaWZmdXNlOworICAgICAgICB9OworCisgICAgICAgIFZlcnRleCBxdWFkWzRd
OworICAgICAgICBxdWFkWzBdLnggPSAwLjBmOworICAgICAgICBxdWFkWzBdLnkgPSAoZmxvYXQp
ZGVzYy5IZWlnaHQ7CisgICAgICAgIHF1YWRbMF0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRbMF0u
dyA9IDEuMGY7CisgICAgICAgIHF1YWRbMF0uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAgIHF1
YWRbMV0ueCA9IChmbG9hdClkZXNjLldpZHRoOworICAgICAgICBxdWFkWzFdLnkgPSAoZmxvYXQp
ZGVzYy5IZWlnaHQ7CisgICAgICAgIHF1YWRbMV0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRbMV0u
dyA9IDEuMGY7CisgICAgICAgIHF1YWRbMV0uZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAgIHF1
YWRbMl0ueCA9IDAuMGY7CisgICAgICAgIHF1YWRbMl0ueSA9IDAuMGY7CisgICAgICAgIHF1YWRb
Ml0ueiA9IDAuMGY7CisgICAgICAgIHF1YWRbMl0udyA9IDEuMGY7CisgICAgICAgIHF1YWRbMl0u
ZGlmZnVzZSA9IGNvbG9yOworCisgICAgICAgIHF1YWRbM10ueCA9IChmbG9hdClkZXNjLldpZHRo
OworICAgICAgICBxdWFkWzNdLnkgPSAwLjBmOworICAgICAgICBxdWFkWzNdLnogPSAwLjBmOwor
ICAgICAgICBxdWFkWzNdLncgPSAxLjBmOworICAgICAgICBxdWFkWzNdLmRpZmZ1c2UgPSBjb2xv
cjsKKworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+RHJh
d1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihWZXJ0ZXgp
KTsKKworICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9aQlVGRkVSKQorICAgICAgICB7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwor
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRS
VUUpOworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVS
LCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1NYXNr
ZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChmbGFncykKKyAgICB7CisgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgZmxhZ3MsIGNv
bG9yLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KQoreworICAgIGlmICgh
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBn
ZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOworICAgIGludCBwcmltaXRpdmVD
b3VudDsKKworICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQs
ICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKworICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFs
c2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGUobW9k
ZSk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKKyAgICBib29sIHVzZUlu
ZGV4aW5nOworICAgIEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihtb2RlLCBmaXJzdCwg
Y291bnQsICZ1c2VJbmRleGluZywgJmluZGV4SW5mbyk7CisgICAgaWYgKGVyciAhPSBHTF9OT19F
UlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihlcnIpOworICAgIH0KKworICAgIGFw
cGx5U2hhZGVycygpOworICAgIGFwcGx5VGV4dHVyZXMoKTsKKworICAgIGlmICghZ2V0Q3VycmVu
dFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBpZiAoIWN1bGxTa2lwc0Ry
YXcobW9kZSkpCisgICAgeworICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAg
IGlmICh1c2VJbmRleGluZykKKyAgICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5EcmF3SW5k
ZXhlZFByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGlu
ZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsx
LCBpbmRleEluZm8ub2Zmc2V0L2luZGV4SW5mby5pbmRleFNpemUsIHByaW1pdGl2ZUNvdW50KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+
RHJhd1ByaW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCBwcmltaXRpdmVDb3VudCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBH
THNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogaW5kaWNlcykKK3sKKyAgICBp
ZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKCFpbmRpY2VzICYmICFtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBn
ZXREaXNwbGF5KCk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CisgICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOworICAgIGludCBwcmltaXRpdmVD
b3VudDsKKworICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQs
ICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQorICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKworICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFs
c2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGUobW9k
ZSk7CisKKyAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKKyAgICBHTGVudW0gZXJy
ID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5m
byk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihlcnIpOworICAgIH0KKworICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5m
byk7CisgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihlcnIpOworICAgIH0KKworICAgIGFwcGx5U2hhZGVycygpOworICAgIGFwcGx5VGV4dHVy
ZXMoKTsKKworICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+dmFsaWRhdGVTYW1wbGVycygp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICB9CisKKyAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCisgICAgeworICAgICAgICBkaXNw
bGF5LT5zdGFydFNjZW5lKCk7CisgICAgICAgIGRldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUo
cHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5k
ZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgaW5kZXhJbmZvLm9m
ZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmltaXRpdmVDb3VudCk7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OmZpbmlzaCgpCit7CisgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0
RGlzcGxheSgpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwor
ICAgIElEaXJlY3QzRFF1ZXJ5OSAqb2NjbHVzaW9uUXVlcnkgPSBOVUxMOworCisgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZv
Y2NsdXNpb25RdWVyeSk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBpZiAob2NjbHVzaW9uUXVlcnkpCisgICAgeworICAgICAgICBJRGlyZWN0
M0RTdGF0ZUJsb2NrOSAqc2F2ZWRTdGF0ZSA9IE5VTEw7CisgICAgICAgIGRldmljZS0+Q3JlYXRl
U3RhdGVCbG9jayhEM0RTQlRfQUxMLCAmc2F2ZWRTdGF0ZSk7CisKKyAgICAgICAgb2NjbHVzaW9u
UXVlcnktPklzc3VlKEQzRElTU1VFX0JFR0lOKTsKKworICAgICAgICAvLyBSZW5kZXIgc29tZXRo
aW5nIG91dHNpZGUgdGhlIHJlbmRlciB0YXJnZXQKKyAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1T
b3VyY2VGcmVxKDAsIDEpOworICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwor
ICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKKyAgICAgICAgZGV2aWNlLT5T
ZXRGVkYoRDNERlZGX1hZWlJIVyk7CisgICAgICAgIGZsb2F0IGRhdGFbNF0gPSB7LTEuMGYsIC0x
LjBmLCAtMS4wZiwgMS4wZn07CisgICAgICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKKyAgICAg
ICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfUE9JTlRMSVNULCAxLCBkYXRhLCBzaXpl
b2YoZGF0YSkpOworCisgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQp
OworCisgICAgICAgIHdoaWxlIChvY2NsdXNpb25RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RH
RVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBLZWVw
IHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwg
Zmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDApOworICAgICAgICB9CisKKyAgICAgICAgb2NjbHVz
aW9uUXVlcnktPlJlbGVhc2UoKTsKKworICAgICAgICBpZiAoc2F2ZWRTdGF0ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgc2F2ZWRTdGF0ZS0+QXBwbHkoKTsKKyAgICAgICAgICAgIHNhdmVkU3Rh
dGUtPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpmbHVz
aCgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAg
SURpcmVjdDNEUXVlcnk5ICpldmVudFF1ZXJ5ID0gTlVMTDsKKworICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVudFF1ZXJ5KTsK
KworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIGlm
IChldmVudFF1ZXJ5KQorICAgIHsKKyAgICAgICAgZXZlbnRRdWVyeS0+SXNzdWUoRDNESVNTVUVf
RU5EKTsKKworICAgICAgICB3aGlsZSAoZXZlbnRRdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RH
RVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBLZWVw
IHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwg
Zmlyc3QKKyAgICAgICAgICAgIFNsZWVwKDApOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRR
dWVyeS0+UmVsZWFzZSgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlk
RW51bSgpCit7CisgICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0Ojpy
ZWNvcmRJbnZhbGlkVmFsdWUoKQoreworICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOworfQorCit2
b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQoreworICAgIG1JbnZhbGlkT3Bl
cmF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCit7
CisgICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsKK30KKwordm9pZCBDb250ZXh0OjpyZWNvcmRJbnZh
bGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQoreworICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVy
YXRpb24gPSB0cnVlOworfQorCisvLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5k
IGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuCisvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAy
LjUgcGFnZSAxMy4KK0dMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1JbnZh
bGlkRW51bSkKKyAgICB7CisgICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOworCisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0VOVU07CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkVmFsdWUp
CisgICAgeworICAgICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7CisKKyAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfVkFMVUU7CisgICAgfQorCisgICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQor
ICAgIHsKKyAgICAgICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKKworICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgfQorCisgICAgaWYgKG1PdXRPZk1lbW9yeSkK
KyAgICB7CisgICAgICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOworCisgICAgICAgIHJldHVybiBH
TF9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3Bl
cmF0aW9uKQorICAgIHsKKyAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZh
bHNlOworCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRl
eHQ6OmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpCit7CisgICAgcmV0dXJuIG1Qc1Byb2ZpbGU7Cit9
CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldFZlcnRleFNoYWRlclByb2ZpbGUoKQoreworICAg
IHJldHVybiBtVnNQcm9maWxlOworfQorCit2b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVp
bnQgYnVmZmVyKQoreworICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdl
IDIyOgorICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0IGlzIGJv
dW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQgY29udGV4dAor
ICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFy
ZSByZXNldCB0byB6ZXJvLgorCisgICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlciA9PSBidWZmZXIp
CisgICAgeworICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgIH0KKworICAgIGlm
IChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIH0KKworICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCisg
ICAgeworICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIgPSAwOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAg
Ly8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44IHBhZ2UgODQ6CisgICAgLy8gSWYgYSB0
ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3
aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUKKyAgICAvLyByZWJvdW5k
IHRvIHRleHR1cmUgb2JqZWN0IHplcm8KKworICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwg
U0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgeworICAgICAgICBmb3IgKGludCBzYW1w
bGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2Ft
cGxlcl0gPT0gdGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0gPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2Ug
MTEyOgorICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1h
Z2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhlbiBp
dCBpcworICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxlZCwg
d2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGljaCB0
aGlzCisgICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJh
bWVidWZmZXIuCisKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZl
cigpOworCisgICAgaWYgKGZyYW1lYnVmZmVyKQorICAgIHsKKyAgICAgICAgZnJhbWVidWZmZXIt
PmRldGFjaFRleHR1cmUodGV4dHVyZSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRldGFj
aEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDc6CisgICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0
IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQs
IGl0IGlzIGFzIHRob3VnaAorICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRl
ZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8u
CisKKyAgICBpZiAobVN0YXRlLmZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQorICAgIHsKKyAg
ICAgICAgYmluZEZyYW1lYnVmZmVyKDApOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRh
Y2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6CisgICAgLy8gSWYgYSByZW5kZXJidWZmZXIg
dGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlz
IGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCisgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0
aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgorCisgICAgaWYgKG1T
dGF0ZS5yZW5kZXJidWZmZXIgPT0gcmVuZGVyYnVmZmVyKQorICAgIHsKKyAgICAgICAgYmluZFJl
bmRlcmJ1ZmZlcigwKTsKKyAgICB9CisKKyAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biA0LjQgcGFnZSAxMTE6CisgICAgLy8gSWYgYSByZW5kZXJidWZmZXIgb2JqZWN0IGlzIGRlbGV0
ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJh
bWVidWZmZXIsCisgICAgLy8gdGhlbiBpdCBpcyBhcyBpZiBGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSByZW5kZXJidWZmZXIgb2YgMCwgZm9yIGVhY2ggYXR0
YWNobWVudAorICAgIC8vIHBvaW50IHRvIHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFjaGVkIGlu
IHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCisKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKGZyYW1lYnVmZmVyKQorICAg
IHsKKyAgICAgICAgZnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
OworICAgIH0KK30KKworVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoU2Ft
cGxlclR5cGUgdHlwZSkKK3sKKyAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0
eXBlXTsKKworICAgIGlmICh0ID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Qg
R0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKKworICAgICAgICBzd2l0Y2ggKHR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsbHMgdGhyb3VnaCB0byBTQU1QTEVSXzJE
CisKKyAgICAgICAgICBjYXNlIFNBTVBMRVJfMkQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKHRoaXMpOworICAg
ICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgR0xfUkdCQSwgMSwgMSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIHQgPSBp
bmNvbXBsZXRlMmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgU0FNUExFUl9DVUJFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBUZXh0
dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisK
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCBHTF9SR0JBLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3Vi
ZS0+c2V0SW1hZ2VQb3NZKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVn
WSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7
CisgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgR0xfUkdCQSwg
MSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKworICAgICAgICAgICAgICB0ID0gaW5jb21w
bGV0ZUN1YmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0gPSB0OworICAgIH0KKworICAgIHJl
dHVybiB0OworfQorCitib29sIENvbnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2Rl
KQoreworICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09IEdM
X0ZST05UX0FORF9CQUNLICYmIGlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKK30KKworYm9vbCBD
b250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChk
cmF3TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6Cisg
ICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29udGV4dDo6aGFzU3RlbmNpbCgpCit7Cisg
ICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKwor
ICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkKKyAgICB7CisgICAgICAgIFN0ZW5jaWxidWZmZXIg
KnN0ZW5jaWxidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZl
cigpOworCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2JqZWN0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+IDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4
dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKQor
eworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsK
KyAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFs
dWVzWzFdOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVb
Ml0gPSB2YWx1ZXNbMl07CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJl
bnRWYWx1ZVszXSA9IHZhbHVlc1szXTsKKworICAgIG1WZXJ0ZXhEYXRhTWFuYWdlci0+ZGlydHlD
dXJyZW50VmFsdWVzKCk7Cit9CisKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygp
Cit7CisgICAgaWYgKG1CdWZmZXJCYWNrRW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQorICAgIHsK
KyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAi
OworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0
cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CisgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKKyAg
ICB9Cit9CisKK2NvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKK30KKworfQorCitleHRl
cm4gIkMiCit7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcpCit7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcpOworfQorCit2
b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCit7CisgICAgZGVsZXRl
IGNvbnRleHQ7CisKKyAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQorICAgIHsK
KyAgICAgICAgZ2w6Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KK30KKwor
dm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBnbDo6bWFrZUN1cnJlbnQoY29u
dGV4dCwgZGlzcGxheSwgc3VyZmFjZSk7Cit9CisKK2dsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRD
b250ZXh0KCkKK3sKKyAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKK30KK30KSW5kZXg6IEFO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250
ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDg3IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBDb250ZXh0Lmg6IERlZmluZXMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2luZyBh
bGwgR0wgc3RhdGUgYW5kIHBlcmZvcm1pbmcKKy8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJdCBp
cyB0aGUgR0xFUzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KKworI2lm
bmRlZiBJTkNMVURFX0NPTlRFWFRfSF8KKyNkZWZpbmUgSU5DTFVERV9DT05URVhUX0hfCisKKyNk
ZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2RlZmluZSBFR0xBUEkK
KyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSA8bWFw
PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGVnbAorewor
Y2xhc3MgRGlzcGxheTsKK2NsYXNzIFN1cmZhY2U7CitjbGFzcyBDb25maWc7Cit9CisKK25hbWVz
cGFjZSBnbAoreworc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CitzdHJ1Y3QgVHJhbnNsYXRl
ZEluZGV4RGF0YTsKKworY2xhc3MgQnVmZmVyOworY2xhc3MgU2hhZGVyOworY2xhc3MgUHJvZ3Jh
bTsKK2NsYXNzIFRleHR1cmU7CitjbGFzcyBUZXh0dXJlMkQ7CitjbGFzcyBUZXh0dXJlQ3ViZU1h
cDsKK2NsYXNzIEZyYW1lYnVmZmVyOworY2xhc3MgUmVuZGVyYnVmZmVyOworY2xhc3MgQ29sb3Ji
dWZmZXI7CitjbGFzcyBEZXB0aGJ1ZmZlcjsKK2NsYXNzIFN0ZW5jaWxidWZmZXI7CitjbGFzcyBW
ZXJ0ZXhEYXRhTWFuYWdlcjsKK2NsYXNzIEluZGV4RGF0YU1hbmFnZXI7CitjbGFzcyBCdWZmZXJC
YWNrRW5kOworY2xhc3MgQmxpdDsKKworZW51bQoreworICAgIE1BWF9WRVJURVhfQVRUUklCUyA9
IDEyLAorICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMTI4LAorICAgIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgPSA4LAorICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0g
MTYsCisgICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMCwKKyAgICBNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUyA9IDE2LAorICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMg
PSAxNiwKKyAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgPSA0MDk2LCAgIC8vIEZJWE1FOiBWZXJp
ZnkKKyAgICBNQVhfRFJBV19CVUZGRVJTID0gMSwKKworICAgIElNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUID0gR0xfUkdCLAorICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQ
RSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Cit9OworCitjb25zdCBmbG9hdCBBTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURU
SF9SQU5HRV9NQVggPSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
X01JTiA9IDEuMGY7Citjb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYID0g
MS4wZjsKKworZW51bSBTYW1wbGVyVHlwZQoreworICAgIFNBTVBMRVJfMkQsCisgICAgU0FNUExF
Ul9DVUJFLAorCisgICAgU0FNUExFUl9UWVBFX0NPVU5UCit9OworCitzdHJ1Y3QgQ29sb3IKK3sK
KyAgICBmbG9hdCByZWQ7CisgICAgZmxvYXQgZ3JlZW47CisgICAgZmxvYXQgYmx1ZTsKKyAgICBm
bG9hdCBhbHBoYTsKK307CisKKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmds
ZSB2ZXJ0ZXggYXR0cmlidXRlCitjbGFzcyBBdHRyaWJ1dGVTdGF0ZQoreworICBwdWJsaWM6Cisg
ICAgQXR0cmlidXRlU3RhdGUoKQorICAgICAgICA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCks
IG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1Cb3VuZEJ1
ZmZlcigwKSwgbUVuYWJsZWQoZmFsc2UpCisgICAgeworICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMDsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7CisgICAgICAgIG1DdXJyZW50VmFs
dWVbMl0gPSAwOworICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMTsKKyAgICB9CisKKyAgICAv
LyBGcm9tIFZlcnRleEFycmF5UG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGludCBt
U2l6ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIEdMc2l6ZWkgbVN0cmlkZTsgLy8gMCBt
ZWFucyBuYXR1cmFsIHN0cmlkZQorICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOworCisgICAgR0x1
aW50IG1Cb3VuZEJ1ZmZlcjsgLy8gQ2FwdHVyZWQgd2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIgaXMg
Y2FsbGVkLgorCisgICAgYm9vbCBtRW5hYmxlZDsgLy8gRnJvbSBFbmFibGUvRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5CisKKyAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAvLyBGcm9tIFZlcnRl
eEF0dHJpYjRmCit9OworCisvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3Rh
dGUKK3N0cnVjdCBTdGF0ZQoreworICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBHTGNs
YW1wZiBkZXB0aENsZWFyVmFsdWU7CisgICAgaW50IHN0ZW5jaWxDbGVhclZhbHVlOworCisgICAg
Ym9vbCBjdWxsRmFjZTsKKyAgICBHTGVudW0gY3VsbE1vZGU7CisgICAgR0xlbnVtIGZyb250RmFj
ZTsKKyAgICBib29sIGRlcHRoVGVzdDsKKyAgICBHTGVudW0gZGVwdGhGdW5jOworICAgIGJvb2wg
YmxlbmQ7CisgICAgR0xlbnVtIHNvdXJjZUJsZW5kUkdCOworICAgIEdMZW51bSBkZXN0QmxlbmRS
R0I7CisgICAgR0xlbnVtIHNvdXJjZUJsZW5kQWxwaGE7CisgICAgR0xlbnVtIGRlc3RCbGVuZEFs
cGhhOworICAgIEdMZW51bSBibGVuZEVxdWF0aW9uUkdCOworICAgIEdMZW51bSBibGVuZEVxdWF0
aW9uQWxwaGE7CisgICAgQ29sb3IgYmxlbmRDb2xvcjsKKyAgICBib29sIHN0ZW5jaWxUZXN0Owor
ICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKKyAgICBHTGludCBzdGVuY2lsUmVmOworICAgIEdMdWlu
dCBzdGVuY2lsTWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEZhaWw7CisgICAgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsOworICAgIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKKyAgICBH
THVpbnQgc3RlbmNpbFdyaXRlbWFzazsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tGdW5jOworICAg
IEdMaW50IHN0ZW5jaWxCYWNrUmVmOworICAgIEdMdWludCBzdGVuY2lsQmFja01hc2s7CisgICAg
R0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKKyAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsOworICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7CisgICAgR0x1aW50IHN0
ZW5jaWxCYWNrV3JpdGVtYXNrOworICAgIGJvb2wgcG9seWdvbk9mZnNldEZpbGw7CisgICAgR0xm
bG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOworICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldFVuaXRz
OworICAgIGJvb2wgc2FtcGxlQWxwaGFUb0NvdmVyYWdlOworICAgIGJvb2wgc2FtcGxlQ292ZXJh
Z2U7CisgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1ZTsKKyAgICBib29sIHNhbXBsZUNv
dmVyYWdlSW52ZXJ0OworICAgIGJvb2wgc2Npc3NvclRlc3Q7CisgICAgYm9vbCBkaXRoZXI7CisK
KyAgICBHTGZsb2F0IGxpbmVXaWR0aDsKKworICAgIEdMZW51bSBnZW5lcmF0ZU1pcG1hcEhpbnQ7
CisKKyAgICBHTGludCB2aWV3cG9ydFg7CisgICAgR0xpbnQgdmlld3BvcnRZOworICAgIEdMc2l6
ZWkgdmlld3BvcnRXaWR0aDsKKyAgICBHTHNpemVpIHZpZXdwb3J0SGVpZ2h0OworICAgIGZsb2F0
IHpOZWFyOworICAgIGZsb2F0IHpGYXI7CisKKyAgICBHTGludCBzY2lzc29yWDsKKyAgICBHTGlu
dCBzY2lzc29yWTsKKyAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKKyAgICBHTHNpemVpIHNjaXNz
b3JIZWlnaHQ7CisKKyAgICBib29sIGNvbG9yTWFza1JlZDsKKyAgICBib29sIGNvbG9yTWFza0dy
ZWVuOworICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKKyAgICBib29sIGNvbG9yTWFza0FscGhhOwor
ICAgIGJvb2wgZGVwdGhNYXNrOworCisgICAgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCisgICAgR0x1aW50IGFycmF5QnVm
ZmVyOworICAgIEdMdWludCBlbGVtZW50QXJyYXlCdWZmZXI7CisgICAgR0x1aW50IHRleHR1cmUy
RDsKKyAgICBHTHVpbnQgdGV4dHVyZUN1YmVNYXA7CisgICAgR0x1aW50IGZyYW1lYnVmZmVyOwor
ICAgIEdMdWludCByZW5kZXJidWZmZXI7CisgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOworCisg
ICAgQXR0cmlidXRlU3RhdGUgdmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Cisg
ICAgR0x1aW50IHNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfVFlQRV9DT1VOVF1bTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOworCisgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OworICAgIEdMaW50IHBh
Y2tBbGlnbm1lbnQ7Cit9OworCitjbGFzcyBDb250ZXh0Cit7CisgIHB1YmxpYzoKKyAgICBDb250
ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworCisgICAgfkNvbnRleHQoKTsKKworICAg
IHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1
cmZhY2UpOworCisgICAgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOworCisgICAgLy8gU3RhdGUg
bWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKKworICAgIHZvaWQgc2V0Q2xlYXJEZXB0aChm
bG9hdCBkZXB0aCk7CisKKyAgICB2b2lkIHNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCk7CisK
KyAgICB2b2lkIHNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc0N1bGxGYWNl
RW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRDdWxsTW9kZShHTGVudW0gbW9kZSk7CisK
KyAgICB2b2lkIHNldEZyb250RmFjZShHTGVudW0gZnJvbnQpOworCisgICAgdm9pZCBzZXREZXB0
aFRlc3QoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0
OworCisgICAgdm9pZCBzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYyk7CisKKyAgICB2b2lk
IHNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpOworICAgIAorICAgIHZvaWQg
c2V0QmxlbmQoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzQmxlbmRFbmFibGVkKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVz
dFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKTsKKyAgICB2b2lkIHNl
dEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxw
aGEpOworICAgIHZvaWQgc2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51
bSBhbHBoYUVxdWF0aW9uKTsKKworICAgIHZvaWQgc2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVk
KTsKKyAgICBib29sIGlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVp
bnQgc3RlbmNpbE1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tQYXJhbXMoR0xlbnVtIHN0
ZW5jaWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYsIEdMdWludCBzdGVuY2lsQmFja01h
c2spOworICAgIHZvaWQgc2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFz
ayk7CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tX
cml0ZW1hc2spOworICAgIHZvaWQgc2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxG
YWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRo
UGFzcyk7CisgICAgdm9pZCBzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxC
YWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxC
YWNrUGFzc0RlcHRoUGFzcyk7CisKKyAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRGaWxsKGJvb2wg
ZW5hYmxlZCk7CisgICAgYm9vbCBpc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0
IHVuaXRzKTsKKworICAgIHZvaWQgc2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxl
ZCk7CisgICAgYm9vbCBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzU2Ft
cGxlQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdl
UGFyYW1zKEdMY2xhbXBmIHZhbHVlLCBib29sIGludmVydCk7CisKKyAgICB2b2lkIHNldFNjaXNz
b3JUZXN0KGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBpc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNv
bnN0OworCisgICAgdm9pZCBzZXREaXRoZXIoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzRGl0
aGVyRW5hYmxlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0
aCk7CisKKyAgICB2b2lkIHNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCk7CisKKyAg
ICB2b2lkIHNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIHZvaWQgc2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2b2lkIHNldENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKKyAg
ICB2b2lkIHNldERlcHRoTWFzayhib29sIG1hc2spOworCisgICAgdm9pZCBzZXRBY3RpdmVTYW1w
bGVyKGludCBhY3RpdmUpOworCisgICAgR0x1aW50IGdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29u
c3Q7CisgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgR0x1
aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFZlcnRleEF0
dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKKyAgICBj
b25zdCBBdHRyaWJ1dGVTdGF0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtLCBHTHVpbnQgYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgY29uc3Qgdm9pZCAqZ2V0VmVydGV4QXR0cmli
UG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKKworICAgIGNvbnN0IEF0dHJp
YnV0ZVN0YXRlICpnZXRWZXJ0ZXhBdHRyaWJCbG9jaygpOworCisgICAgdm9pZCBzZXRVbnBhY2tB
bGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKKyAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1lbnQo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOwor
ICAgIEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBjb25zdDsKKworICAgIEdMdWludCBjcmVhdGVC
dWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKKyAgICBHTHVp
bnQgY3JlYXRlUHJvZ3JhbSgpOworICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CisgICAgR0x1
aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigp
OworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBkZWxl
dGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBw
cm9ncmFtKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZv
aWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgYmluZEFycmF5
QnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpOwor
ICAgIHZvaWQgYmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJp
bmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOworICAgIHZvaWQgYmluZFJlbmRlcmJ1
ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIHVzZVByb2dyYW0oR0x1aW50IHBy
b2dyYW0pOworCisgICAgdm9pZCBzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyKTsKKyAgICB2b2lkIHNldENvbG9yYnVmZmVyWmVybyhDb2xvcmJ1ZmZlciAqcmVuZGVy
YnVmZmVyKTsKKyAgICB2b2lkIHNldERlcHRoYnVmZmVyWmVybyhEZXB0aGJ1ZmZlciAqZGVwdGhC
dWZmZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlclplcm8oU3RlbmNpbGJ1ZmZlciAqc3Rl
bmNpbEJ1ZmZlcik7CisgICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoUmVuZGVyYnVmZmVyICpyZW5k
ZXJidWZmZXIpOworCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25z
dCBHTGZsb2F0ICp2YWx1ZXMpOworCisgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRs
ZSk7CisgICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7CisgICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWlu
dCBoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQgaGFuZGxl
KTsKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAg
ICBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRGVwdGhi
dWZmZXIgKmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFN0ZW5jaWxidWZmZXIg
KmdldFN0ZW5jaWxidWZmZXIoR0x1aW50IGhhbmRsZSk7CisKKyAgICBCdWZmZXIgKmdldEFycmF5
QnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICBQcm9n
cmFtICpnZXRDdXJyZW50UHJvZ3JhbSgpOworICAgIFRleHR1cmUyRCAqZ2V0VGV4dHVyZTJEKCk7
CisgICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgVGV4dHVyZSAq
Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5cGUp
OworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBnZXRGbG9h
dHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0SW50ZWdlcnYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBib29sIGdldEJvb2xlYW52KEdMZW51
bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpOworCisgICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRl
ckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1z
KTsKKworICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCk7Cisg
ICAgdm9pZCBhcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7CisgICAgR0xlbnVtIGFwcGx5VmVy
dGV4QnVmZmVyKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAq
dXNlSW5kZXhpbmcsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgR0xlbnVt
IGFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbyk7
CisgICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pOworICAgIEdMZW51bSBhcHBseUNvdW50aW5nSW5kZXhCdWZmZXIoR0xlbnVtIG1v
ZGUsIEdMZW51bSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKyAgICB2
b2lkIGFwcGx5U2hhZGVycygpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOworCisgICAgdm9p
ZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKTsKKyAgICB2b2lk
IGNsZWFyKEdMYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2Rl
LCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRpY2Vz
KTsKKyAgICB2b2lkIGZpbmlzaCgpOworICAgIHZvaWQgZmx1c2goKTsKKworICAgIHZvaWQgcmVj
b3JkSW52YWxpZEVudW0oKTsKKyAgICB2b2lkIHJlY29yZEludmFsaWRWYWx1ZSgpOworICAgIHZv
aWQgcmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOworICAgIHZvaWQgcmVjb3JkT3V0T2ZNZW1vcnko
KTsKKyAgICB2b2lkIHJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOworCisgICAg
R0xlbnVtIGdldEVycm9yKCk7CisKKyAgICBjb25zdCBjaGFyICpnZXRQaXhlbFNoYWRlclByb2Zp
bGUoKTsKKyAgICBjb25zdCBjaGFyICpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7CisKKyAgICBj
b25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKworICAgIEJsaXQgKmdldEJs
aXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQorCisgICAgY29uc3QgRDNEQ0FQUzkgJmdldERldmlj
ZUNhcHMoKSB7IHJldHVybiBtRGV2aWNlQ2FwczsgfQorCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKENvbnRleHQpOworCisgICAgdm9pZCBsb29rdXBBdHRyaWJ1dGVN
YXBwaW5nKFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpOworCisgICAgdm9pZCBkZXRh
Y2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0
ZXh0dXJlKTsKKyAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7
CisgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAg
ICBUZXh0dXJlICpnZXRJbmNvbXBsZXRlVGV4dHVyZShTYW1wbGVyVHlwZSB0eXBlKTsKKworICAg
IGJvb2wgY3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpOworICAgIGJvb2wgaXNUcmlhbmds
ZU1vZGUoR0xlbnVtIGRyYXdNb2RlKTsKKyAgICBib29sIGhhc1N0ZW5jaWwoKTsKKworICAgIGNv
bnN0IGVnbDo6Q29uZmlnICpjb25zdCBtQ29uZmlnOworCisgICAgU3RhdGUgICBtU3RhdGU7CisK
KyAgICBUZXh0dXJlMkQgKm1UZXh0dXJlMkRaZXJvOworICAgIFRleHR1cmVDdWJlTWFwICptVGV4
dHVyZUN1YmVNYXBaZXJvOworCisgICAgQ29sb3JidWZmZXIgKm1Db2xvcmJ1ZmZlclplcm87Cisg
ICAgRGVwdGhidWZmZXIgKm1EZXB0aGJ1ZmZlclplcm87CisgICAgU3RlbmNpbGJ1ZmZlciAqbVN0
ZW5jaWxidWZmZXJaZXJvOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEJ1ZmZlcio+
IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKKworICAgIHR5cGVkZWYgc3Rk
OjptYXA8R0x1aW50LCBTaGFkZXIqPiBTaGFkZXJNYXA7CisgICAgU2hhZGVyTWFwIG1TaGFkZXJN
YXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7
CisgICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1
aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKKyAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOwor
CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJN
YXA7CisgICAgRnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBz
dGQ6Om1hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKKyAgICBSZW5k
ZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKKworICAgIHZvaWQgaW5pdEV4dGVuc2lvblN0
cmluZygpOworICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7CisKKyAgICBCdWZmZXJC
YWNrRW5kICptQnVmZmVyQmFja0VuZDsKKyAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERh
dGFNYW5hZ2VyOworICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOworCisg
ICAgQmxpdCAqbUJsaXQ7CisKKyAgICBUZXh0dXJlICptSW5jb21wbGV0ZVRleHR1cmVzW1NBTVBM
RVJfVFlQRV9DT1VOVF07CisKKyAgICAvLyBSZWNvcmRlZCBlcnJvcnMKKyAgICBib29sIG1JbnZh
bGlkRW51bTsKKyAgICBib29sIG1JbnZhbGlkVmFsdWU7CisgICAgYm9vbCBtSW52YWxpZE9wZXJh
dGlvbjsKKyAgICBib29sIG1PdXRPZk1lbW9yeTsKKyAgICBib29sIG1JbnZhbGlkRnJhbWVidWZm
ZXJPcGVyYXRpb247CisKKyAgICBib29sIG1IYXNCZWVuQ3VycmVudDsKKworICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFByb2dyYW07CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOwor
CisgICAgY29uc3QgY2hhciAqbVBzUHJvZmlsZTsKKyAgICBjb25zdCBjaGFyICptVnNQcm9maWxl
OworCisgICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncworICAgIGJvb2wgbUNsZWFyU3RhdGVEaXJ0
eTsKKyAgICBib29sIG1DdWxsU3RhdGVEaXJ0eTsKKyAgICBib29sIG1EZXB0aFN0YXRlRGlydHk7
CisgICAgYm9vbCBtTWFza1N0YXRlRGlydHk7CisgICAgYm9vbCBtUGl4ZWxQYWNraW5nU3RhdGVE
aXJ0eTsKKyAgICBib29sIG1CbGVuZFN0YXRlRGlydHk7CisgICAgYm9vbCBtU3RlbmNpbFN0YXRl
RGlydHk7CisgICAgYm9vbCBtUG9seWdvbk9mZnNldFN0YXRlRGlydHk7CisgICAgYm9vbCBtU2Np
c3NvclN0YXRlRGlydHk7CisgICAgYm9vbCBtU2FtcGxlU3RhdGVEaXJ0eTsKKyAgICBib29sIG1G
cm9udEZhY2VEaXJ0eTsKKyAgICBib29sIG1EaXRoZXJTdGF0ZURpcnR5OworCisgICAgSURpcmVj
dDNEU3RhdGVCbG9jazkgKm1NYXNrZWRDbGVhclNhdmVkU3RhdGU7CisKKyAgICBEM0RDQVBTOSBt
RGV2aWNlQ2FwczsKK307Cit9CisKK2V4dGVybiAiQyIKK3sKKy8vIEV4cG9ydGVkIGZ1bmN0aW9u
cyBmb3IgdXNlIGJ5IEVHTAorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnKTsKK3ZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29u
dGV4dCk7Cit2b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlz
cGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKK2dsOjpDb250ZXh0ICpnbEdl
dEN1cnJlbnRDb250ZXh0KCk7CitfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKK30K
KworI2VuZGlmICAgLy8gSU5DTFVERV9DT05URVhUX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwNSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gRnJhbWVidWZmZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RnJhbWVidWZmZXIg
Y2xhc3MuIEltcGxlbWVudHMgR0wgZnJhbWVidWZmZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA1Lgor
CisjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIK
KworbmFtZXNwYWNlIGdsCit7CitGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQoreworICAgIG1D
b2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgIG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7CisK
KyAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtRGVwdGhidWZmZXJIYW5kbGUg
PSAwOworCisgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICBtU3RlbmNpbGJ1
ZmZlckhhbmRsZSA9IDA7Cit9CisKK0ZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQoreworfQor
Cit2b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNv
bG9yYnVmZmVyKQoreworICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSB0eXBlOworICAgIG1Db2xvcmJ1
ZmZlckhhbmRsZSA9IGNvbG9yYnVmZmVyOworfQorCit2b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0
aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQoreworICAgIG1EZXB0aGJ1
ZmZlclR5cGUgPSB0eXBlOworICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IGRlcHRoYnVmZmVyOwor
fQorCit2b2lkIEZyYW1lYnVmZmVyOjpzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgc3RlbmNpbGJ1ZmZlcikKK3sKKyAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSB0eXBlOworICAg
IG1TdGVuY2lsYnVmZmVySGFuZGxlID0gc3RlbmNpbGJ1ZmZlcjsKK30KKwordm9pZCBGcmFtZWJ1
ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBpZiAobUNvbG9yYnVm
ZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUp
KQorICAgIHsKKyAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAgIG1D
b2xvcmJ1ZmZlckhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRs
ZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKKyAgICB7
CisgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtRGVwdGhidWZm
ZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9PSB0
ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgIHsKKyAg
ICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbVN0ZW5jaWxidWZm
ZXJIYW5kbGUgPSAwOworICAgIH0KK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVy
YnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKG1Db2xvcmJ1ZmZlckhhbmRs
ZSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgeworICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKKyAgICAgICAgbUNv
bG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVySGFuZGxl
ID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikK
KyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOworICAgICAgICBtRGVw
dGhidWZmZXJIYW5kbGUgPSAwOworICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlckhhbmRs
ZSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CisgICAgICAg
IG1TdGVuY2lsYnVmZmVySGFuZGxlID0gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBGcmFt
ZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKmNv
bG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb2xvcmJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3Ji
dWZmZXIoKTsKKworICAgIGlmIChjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBj
b2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK3Vuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQor
eworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBEZXB0
aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZm
ZXJIYW5kbGUpOworCisgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
SURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBEZXB0aGJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5k
bGUpOworCisgICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlcHRo
YnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30K
KworQ29sb3JidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlcigpCit7CisgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIENvbG9yYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IE5VTEw7CisKKyAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9OT05F
KQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgY29sb3JidWZmZXIgPSBO
VUxMOworICAgIH0KKyAgICBlbHNlIGlmIChtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJV
RkZFUikKKyAgICB7CisgICAgICAgIGNvbG9yYnVmZmVyID0gY29udGV4dC0+Z2V0Q29sb3JidWZm
ZXIobUNvbG9yYnVmZmVySGFuZGxlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Y29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKG1Db2xvcmJ1ZmZlckhhbmRsZSktPmdl
dENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlclR5cGUpOworICAgIH0KKworICAgIGlmIChjb2xvcmJ1
ZmZlciAmJiBjb2xvcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbG9yYnVmZmVyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitEZXB0aGJ1
ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyKCkKK3sKKyAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVy
ID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKworICAgIGlm
IChkZXB0aGJ1ZmZlciAmJiBkZXB0aGJ1ZmZlci0+aXNEZXB0aGJ1ZmZlcigpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
CitTdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCit7CisgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIFN0ZW5jaWxidWZm
ZXIgKnN0ZW5jaWxidWZmZXIgPSBjb250ZXh0LT5nZXRTdGVuY2lsYnVmZmVyKG1TdGVuY2lsYnVm
ZmVySGFuZGxlKTsKKworICAgIGlmIChzdGVuY2lsYnVmZmVyICYmIHN0ZW5jaWxidWZmZXItPmlz
U3RlbmNpbGJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXI7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3JidWZmZXJUeXBlKCkKK3sKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKK30KKworR0xl
bnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKQoreworICAgIHJldHVybiBtRGVw
dGhidWZmZXJUeXBlOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJU
eXBlKCkKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOworfQorCitHTHVpbnQgRnJh
bWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKCkKK3sKKyAgICByZXR1cm4gbUNvbG9yYnVm
ZmVySGFuZGxlOworfQorCitHTHVpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxl
KCkKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVySGFuZGxlOworfQorCitHTHVpbnQgRnJhbWVi
dWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKQoreworICAgIHJldHVybiBtU3RlbmNpbGJ1
ZmZlckhhbmRsZTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQorewor
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgIGludCB3
aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisKKyAgICBpZiAobUNvbG9yYnVmZmVyVHlw
ZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0g
Z2V0Q29sb3JidWZmZXIoKTsKKworICAgICAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpID09IDAg
fHwgY29sb3JidWZmZXItPmdldEhlaWdodCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0K
KworICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOworICAgICAgICBoZWln
aHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisKKyAg
ICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRlcHRoYnVmZmVyLT5nZXRIZWln
aHQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdpZHRo
KCk7CisgICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAg
ICB7CisgICAgICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBjb250ZXh0LT5nZXRT
dGVuY2lsYnVmZmVyKG1TdGVuY2lsYnVmZmVySGFuZGxlKTsKKworICAgICAgICBpZiAoIXN0ZW5j
aWxidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RlbmNpbGJ1
ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpID09IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpOworICAg
ICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBo
ZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Cit9Cit9Cklu
ZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBGcmFtZWJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6RnJh
bWVidWZmZXIgY2xhc3MuIEltcGxlbWVudHMgR0wgZnJhbWVidWZmZXIKKy8vIG9iamVjdHMgYW5k
IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBh
Z2UgMTA1LgorCisjaWZuZGVmIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXworI2RlZmluZSBMSUJH
TEVTVjJfRlJBTUVCVUZGRVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBDb2xvcmJ1ZmZlcjsKK2NsYXNzIERlcHRo
YnVmZmVyOworY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKKworY2xhc3MgRnJhbWVidWZmZXIKK3sKKyAg
cHVibGljOgorICAgIEZyYW1lYnVmZmVyKCk7CisKKyAgICB+RnJhbWVidWZmZXIoKTsKKworICAg
IHZvaWQgc2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsK
KyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVm
ZmVyKTsKKworICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9p
ZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dERlcHRoU3RlbmNpbCgpOworCisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlh
bCgpOworICAgIHVuc2lnbmVkIGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOworCisgICAgQ29s
b3JidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7CisgICAgRGVwdGhidWZmZXIgKmdldERlcHRoYnVm
ZmVyKCk7CisgICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworCisgICAgR0xl
bnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUo
KTsKKyAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKworICAgIEdMdWludCBnZXRD
b2xvcmJ1ZmZlckhhbmRsZSgpOworICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwor
ICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisKKyAgICBHTGVudW0gY29tcGxl
dGVuZXNzKCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJh
bWVidWZmZXIpOworCisgICAgR0x1aW50IG1Db2xvcmJ1ZmZlckhhbmRsZTsKKyAgICBHTGVudW0g
bUNvbG9yYnVmZmVyVHlwZTsKKworICAgIEdMdWludCBtRGVwdGhidWZmZXJIYW5kbGU7CisgICAg
R0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7CisKKyAgICBHTHVpbnQgbVN0ZW5jaWxidWZmZXJIYW5k
bGU7CisgICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKK307Cit9CisKKyNlbmRpZiAgIC8v
IExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCShy
ZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNzYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmNw
cDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3Jh
bSBvYmplY3RzCisvLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
LmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7Cit1bnNpZ25lZCBpbnQgUHJvZ3JhbTo6
bUN1cnJlbnRTZXJpYWwgPSAxOworCitzdGQ6OnN0cmluZyBzdHIoaW50IGkpCit7CisgICAgY2hh
ciBidWZmZXJbMjBdOworICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKKyAgICByZXR1cm4g
YnVmZmVyOworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5h
bWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQoreworICAgIGludCBieXRlcyA9IFVuaWZvcm1UeXBl
U2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKKyAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0
ZXNdOworICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgZGlydHkgPSB0cnVlOworICAg
IGhhbmRsZXNTZXQgPSBmYWxzZTsKK30KKworVW5pZm9ybTo6flVuaWZvcm0oKQoreworICAgIGRl
bGV0ZVtdIGRhdGE7Cit9CisKK1VuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGlu
ZGV4KSAKKyAgICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQor
eworfQorCitQcm9ncmFtOjpQcm9ncmFtKCkKK3sKKyAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxM
OworICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworCisgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5V
TEw7CisgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlUFMg
PSBOVUxMOworICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworCisgICAgbUluZm9Mb2cgPSBO
VUxMOworICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKworICAgIHVubGluaygpOworCisgICAgbURl
bGV0ZVN0YXR1cyA9IGZhbHNlOworCisgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Cit9CisK
K1Byb2dyYW06On5Qcm9ncmFtKCkKK3sKKyAgICB1bmxpbmsodHJ1ZSk7CisKKyAgICBpZiAobVZl
cnRleFNoYWRlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNo
KCk7CisgICAgfQorCisgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQorICAgIHsKKyAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3Jh
bTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5
cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7CisgICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPmF0dGFjaCgpOworICAgIH0KKyAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5
cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50
U2hhZGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKKyAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5hdHRhY2goKTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hh
ZGVyKFNoYWRlciAqc2hhZGVyKQoreworICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9W
RVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbVZlcnRleFNoYWRlciA9IE5V
TEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5U
X1NIQURFUikKKyAgICB7CisgICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBO
VUxMOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICB1bmxpbmsoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJh
Z21lbnRTaGFkZXIgPyAxIDogMCk7Cit9CisKK0lEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3Jh
bTo6Z2V0UGl4ZWxTaGFkZXIoKQoreworICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOworfQor
CitJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtOjpnZXRWZXJ0ZXhTaGFkZXIoKQorewor
ICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKK30KKwordm9pZCBQcm9ncmFtOjpiaW5kQXR0
cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGlm
IChpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1BdHRyaWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAg
bUF0dHJpYnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsKKyAgICB9Cit9CisKK0dMdWlu
dCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKQoreworICAg
IGlmIChuYW1lKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1M
aW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFtZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0U2Vt
YW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCit7CisgICAgaWYgKGF0dHJpYnV0ZUluZGV4
ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgeworICAg
ICAgICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOworICAgIH0KKworICAg
IHJldHVybiAtMTsKK30KKworLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgdW5p
dCBjb3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCisvLyBpbmRleCByZWZlcmVu
Y2VkIGluIHRoZSBjb21waWxlZCBITFNMIHNoYWRlcgorR0xpbnQgUHJvZ3JhbTo6Z2V0U2FtcGxl
ck1hcHBpbmcodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKK3sKKyAgICBhc3NlcnQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworCisgICAg
R0xpbnQgbG9naWNhbFRleHR1cmVVbml0ID0gLTE7CisKKyAgICBpZiAobVNhbXBsZXJzW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKQorICAgIHsKKyAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNh
bXBsZXJzW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0OworICAgIH0KKworICAgIGlm
IChsb2dpY2FsVGV4dHVyZVVuaXQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitTYW1wbGVyVHlwZSBQcm9ncmFtOjpnZXRTYW1wbGVyVHlwZSh1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4KQoreworICAgIGFzc2VydChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisgICAgYXNzZXJ0KG1TYW1wbGVyc1tzYW1wbGVy
SW5kZXhdLmFjdGl2ZSk7CisKKyAgICByZXR1cm4gbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0udHlw
ZTsKK30KKworYm9vbCBQcm9ncmFtOjppc1NhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4KSBjb25zdAoreworICAgIGlmIChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJz
KS9zaXplb2YobVNhbXBsZXJzWzBdKSkKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlcnNb
c2FtcGxlckluZGV4XS5kaXJ0eTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFByb2dyYW06OnNldFNhbXBsZXJEaXJ0eSh1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4LCBib29sIGRpcnR5KQoreworICAgIGlmIChzYW1wbGVySW5k
ZXggPCBzaXplb2YobVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSkKKyAgICB7CisgICAg
ICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gZGlydHk7CisgICAgfQorICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9u
KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgZGVjb3JhdGVkKQoreworICAgIHN0ZDo6c3RyaW5nIG5h
bWVTdHIobmFtZSk7CisgICAgaW50IHN1YnNjcmlwdCA9IDA7CisgICAgc2l6ZV90IGJlZ2luQiA9
IG5hbWVTdHIuZmluZCgnWycpOworICAgIHNpemVfdCBlbmRCID0gbmFtZVN0ci5maW5kKCddJyk7
CisgICAgaWYgKGJlZ2luQiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBlbmRCICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc3Vic2NyU3RyID0gbmFtZVN0
ci5zdWJzdHIoYmVnaW5CICsgMSwgYmVnaW5CIC0gZW5kQiAtIDEpOworICAgICAgICBuYW1lU3Ry
LmVyYXNlKGJlZ2luQik7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2koc3Vic2NyU3RyLmNfc3Ry
KCkpOworICAgIH0KKworICAgIGlmICghZGVjb3JhdGVkKQorICAgIHsKKyAgICAgICAgbmFtZVN0
ciA9IGRlY29yYXRlKG5hbWVTdHIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlm
b3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGxvY2F0
aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKKyAgICB7CisgICAg
ICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWVTdHIgJiYKKyAgICAg
ICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpLAor
ICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOworICAgIH0KKyAgICBl
bHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisgICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnRdOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xib29sZWFuKSwK
KyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIHNpemVvZihHTGJvb2xlYW4pICogY291bnQpOwor
CisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICB7
CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAyLAorICAgICAgICAgICAgICAg
diwgMiAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDJdOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVh
bikgKiAyLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMiAqIHNpemVvZihHTGJvb2xlYW4p
ICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBl
bHNlIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
X1ZFQzMpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMywKKyAg
ICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogM107
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xib29sZWFuKSAqIDMsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCAzICogc2l6ZW9m
KEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Cisg
ICAgfQorICAgIGVsc2UgCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfRkxPQVRfVkVDNCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisK
KyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9h
dCkgKiA0LAorICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQp
CisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5b
Y291bnQgKiA0XTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGJvb2xlYW4pICogNCwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMs
IDQgKiBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9v
bFBhcmFtczsKKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07CisgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOworCisgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7CisKKyAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAorICAgICAgICAgICB2YWx1
ZSwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9B
VF9NQVQzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBh
cnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorCisgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgIG1lbWNweSh0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZs
b2F0KSAqIDksCisgICAgICAgICAgIHZhbHVlLCA5ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit7CisgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKKworICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworCisgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYsCisgICAgICAgICAgIHZhbHVlLCAx
NiAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW06OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAg
ICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIHYsIHNpemVvZihHTGlu
dCkgKiBjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTCkKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKKyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltjb3VudF07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1l
bWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGJvb2xlYW4pLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgc2l6ZW9m
KEdMYm9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfSU5UX1ZFQzIpCisgICAgeworICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOworCisgICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7CisKKyAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIs
CisgICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCisgICAgewor
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOworCisgICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorCisgICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAy
XTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodltpXSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0g
R0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGJvb2xlYW4pICogMiwKKyAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXplb2Yo
R0xib29sZWFuKSAqIGNvdW50KTsKKworICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQoreworICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7CisKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlRfVkVDMykKKyAgICB7CisgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3Jt
LT5hcnJheVNpemU7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKKworICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywK
KyAgICAgICAgICAgICAgIHYsIDMgKiBzaXplb2YoR0xpbnQpICogY291bnQpOworICAgIH0KKyAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICB7Cisg
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CisKKyAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCisKKyAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
KyAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDNd
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh2W2ldID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMYm9vbGVhbikgKiAzLAorICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMyAqIHNpemVvZihH
TGJvb2xlYW4pICogY291bnQpOworCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKKworICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0lOVF9WRUM0KQorICAgIHsKKyAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKKworICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOworCisgICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAor
ICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIHsKKyAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKworICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KKworICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwor
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogNF07
CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xib29sZWFuKSAqIDQsCisgICAgICAgICAgICAgICBib29sUGFyYW1zLCA0ICogc2l6ZW9mKEdM
Ym9vbGVhbikgKiBjb3VudCk7CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRp
b24sIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBV
bmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICBzd2l0Y2gg
KFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfQk9PTDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudCAqIHNpemVvZihHTGZsb2F0KSwKKyAgICAg
ICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdMZmxvYXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0lOVDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9
IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFByb2dyYW06OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwg
R0xpbnQgKnBhcmFtcykKK3sKKyAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3Jt
Q29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisKKyAgICBzd2l0Y2ggKFVuaWZv
cm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfQk9PTDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBj
b3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCli
b29sUGFyYW1zW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCAqZmxv
YXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBjb3VudDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICBtZW1jcHko
cGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGNvdW50ICogc2l6ZW9mKEdMaW50KSwKKyAgICAgICAgICAgICAgIGNvdW50ICogc2l6
ZW9mKEdMaW50KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtOjpkaXJ0eUFs
bFVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMu
c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1Vbmlm
b3JtczsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0tPmRpcnR5ID0g
dHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxTYW1wbGVycygpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOyArK2luZGV4KQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJzW2luZGV4XS5kaXJ0eSA9
IHRydWU7CisgICAgfQorfQorCisvLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0
aGlzIHByb2dyYW0gb2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQordm9pZCBQcm9ncmFt
OjphcHBseVVuaWZvcm1zKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5p
Zm9ybUluZGV4LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCisgICAgeworICAgICAgICBpZiAobVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKKyAgICAgICAgICAgIEdMZmxvYXQgKmYg
PSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKyAgICAgICAgICAgIEdMaW50ICppID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOworICAgICAgICAgICAgR0xib29sZWFuICpiID0g
KEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKKworICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXRVbmlmb3JtLT50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybTFidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3Jt
MmJ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm0zYnYobG9jYXRpb24sIGFycmF5U2l6ZSwg
Yik7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5
VW5pZm9ybTRidihsb2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgYXBwbHlVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJh
eVNpemUsIGYpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiBhcHBseVVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IGFwcGx5VW5pZm9ybTNmdihsb2NhdGlv
biwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDNDogYXBwbHlVbmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiBhcHBseVVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6IGFwcGx5VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgYXJyYXlTaXpl
LCBmKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5U2l6
ZSwgaSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAgIGFw
cGx5VW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KGxvY2F0aW9uLCBh
cnJheVNpemUsIGkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVD
NDogICBhcHBseVVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIENvbXBpbGVzIHRoZSBITFNMIGNvZGUgb2Yg
dGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCitJRDNEWEJ1ZmZl
ciAqUHJvZ3JhbTo6Y29tcGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIg
KnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCit7CisgICAgaWYg
KCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgSUQzRFhC
dWZmZXIgKmJpbmFyeSA9IE5VTEw7CisgICAgSUQzRFhCdWZmZXIgKmVycm9yTWVzc2FnZSA9IE5V
TEw7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhDb21waWxlU2hhZGVyKGhsc2wsIChVSU5U
KXN0cmxlbihobHNsKSwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxlLCAwLCAmYmluYXJ5LCAm
ZXJyb3JNZXNzYWdlLCBjb25zdGFudFRhYmxlKTsKKworICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaW5hcnk7CisgICAgfQorCisgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSUQzRFhCdWZm
ZXIqKU5VTEwpOworICAgIH0KKworICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgeworICAgICAg
ICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVm
ZmVyUG9pbnRlcigpOworCisgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiJXNcbiIsIG1lc3NhZ2Up
OworICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICBUUkFDRSgiXG4lcyIsIG1l
c3NhZ2UpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvLyBQYWNrcyB2YXJ5aW5n
cyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJv
bSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNl
Y3Rpb24gNyBwYWdlIDExMQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyBy
ZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCitpbnQgUHJvZ3JhbTo6cGFja1Zhcnlpbmdz
KGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKK3sKKyAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5
aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKKyAgICB7
CisgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZhcnlp
bmctPnNpemU7CisgICAgICAgIGludCBtID0gVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50
eXBlKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG0gPT0g
MiB8fCBtID09IDMgfHwgbSA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gMDsgciA8PSBNQVhfVkFSWUlOR19WRUNUT1JTIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKworICAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bSAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7CisgICAgICAgICAgICAg
ICAgICAgIHZhcnlpbmctPmNvbCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBuOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0g
Jip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBNQVhfVkFSWUlO
R19WRUNUT1JTIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhcnlpbmctPmNvbCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbjsgeSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2lu
Z1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtID09IDEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKKworICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBNQVhfVkFSWUlOR19WRUNUT1JTOyB5KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6
IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQg
Y29sdW1uID0gMDsKKworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hdID4gbiAmJiBzcGFjZVt4
XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4gPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPiBuKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgcisrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0p
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIG47IHkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+Y29sID0gY29sdW1uOworCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kVG9JbmZvTG9n
KCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
IHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsKKwor
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgcisrKQorICAgIHsK
KyAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3Jd
WzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworYm9vbCBQ
cm9ncmFtOjpsaW5rVmFyeWluZ3MoKQoreworICAgIGlmIChtUGl4ZWxITFNMLmVtcHR5KCkgfHwg
bVZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0g
e05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MocGFja2luZyk7CisKKyAg
ICBpZiAocmVnaXN0ZXJzIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAocmVnaXN0ZXJzID09IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgJiYgbUZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGFwcGVuZFRvSW5mb0xvZygi
Tm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOworCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciBpbnB1dCA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0g
bUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKKyAgICB7CisgICAgICAg
IGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIG91dHB1dCA9IG1WZXJ0ZXhTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSBt
VmVydGV4U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQt
PnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRUb0luZm9Mb2coIlR5cGUgb2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3Qg
bWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigp
KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+cmVnOworICAgICAgICAg
ICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKKworICAgICAgICAgICAgICAgIG1hdGNo
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAgICAgICB7CisgICAgICAgICAgICBhcHBl
bmRUb0luZm9Mb2coIkZyYWdtZW50IHZhcnlpbmcgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBh
bnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gInN0
cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IHNl
bWFudGljSW5kZXggPSAwOworICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJp
YnV0ZSA9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBt
VmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6ICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MyAiOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogbVZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJy
ZWFrOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDR4NCAiOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1WZXJ0ZXhITFNMICs9IGRlY29yYXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiIDogVEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisKKyAgICAg
ICAgc2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Cisg
ICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAgIlxu
IgorICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6
IFBPU0lUSU9OO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKysp
CisgICAgeworICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAo
cGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7CisKKyAgICAgICAg
bVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBz
dHIocikgKyAiIDogVEVYQ09PUkQiICsgc3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYg
KG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBtVmVydGV4
SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiBURVhDT09SRCIgKyBzdHIocmVnaXN0
ZXJzKSArICI7XG4iOworICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNf
SU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICAiICsg
ZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOworCisgICAgICAgIGlmIChWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAorICAgICAgICB7Cisg
ICAgICAgICAgICBtVmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlKGF0dHJpYnV0ZS0+bmFtZSkg
KyAiKTtcbiI7CisgICAgfQorCisgICAgbVZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4
ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgLSBkeF9IYWxmUGl4ZWxTaXplLnkg
KiBnbF9Qb3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24u
dztcbiI7CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7
CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bv
c2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5
aW5nID0gbVZlcnRleFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4
U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgaWYgKHZh
cnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwor
ICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihy
KTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAg
Ly8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleEhMU0wgKz0gIi4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogbVZlcnRleEhMU0wgKz0gIngi
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG1WZXJ0
ZXhITFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBtVmVydGV4SExTTCArPSAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzogbVZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJh
eSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIn1cbiI7CisKKyAgICBtUGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAg
ICAgICAgICAgICAgICJ7XG4iOworICAgIAorICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
bUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJl
ZyArIGkgKiByb3dzICsgaik7CisgICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDQgdiIgKyBuICsgIiA6IFRFWENPT1JEIiArIG4gKyAiO1xuIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQor
ICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiBU
RVhDT09SRCIgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKyAgICAgICAgCisgICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKKyAgICB9CisKKyAgICBt
UGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgorICAgICAg
ICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAg
ICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIjsKKworICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAg
IHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0Lmds
X0ZyYWdDb29yZC53O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfV2luZG93LnggKyBkeF9XaW5k
b3cuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlu
cHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1dpbmRvdy55ICsgZHhfV2luZG93Lnc7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAg
ICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsKKyAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAo
ZHhfRnJvbnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjAp
KTtcbiI7CisgICAgfQorCisgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9
IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRT
aGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBpZiAodmFy
eWluZy0+cmVnID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlu
dCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJv
d3MgKyBqKTsKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5
aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiID0g
aW5wdXQudiIgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBtUGl4
ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQgb3V0
cHV0O1xuIiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAg
In1cbiI7CisKKyAgICBUUkFDRSgiXG4lcyIsIG1QaXhlbEhMU0wuY19zdHIoKSk7CisgICAgVFJB
Q0UoIlxuJXMiLCBtVmVydGV4SExTTC5jX3N0cigpKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBi
eSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5ncywKKy8vIGNvbXBpbGluZyB0aGVtIGludG8gYmlu
YXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5n
CisvLyBhIGxpc3Qgb2YgdW5pZm9ybXMKK3ZvaWQgUHJvZ3JhbTo6bGluaygpCit7CisgICAgdW5s
aW5rKCk7CisKKyAgICBpZiAoIW1GcmFnbWVudFNoYWRlciB8fCAhbUZyYWdtZW50U2hhZGVyLT5p
c0NvbXBpbGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFt
VmVydGV4U2hhZGVyIHx8ICFtVmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQo
KTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+Z2V0VmVydGV4U2hh
ZGVyUHJvZmlsZSgpOworICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPmdl
dFBpeGVsU2hhZGVyUHJvZmlsZSgpOworCisgICAgbVBpeGVsSExTTCA9IG1GcmFnbWVudFNoYWRl
ci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gbVZlcnRleFNoYWRlci0+Z2V0SExTTCgp
OworCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBJRDNEWEJ1ZmZlciAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1W
ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKKyAg
ICBJRDNEWEJ1ZmZlciAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExTTC5j
X3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKKworICAgIGlmICh2ZXJ0
ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCisgICAgeworICAgICAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcigoRFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVmZmVy
UG9pbnRlcigpLCAmbVZlcnRleEV4ZWN1dGFibGUpOworICAgICAgICBIUkVTVUxUIHBpeGVsUmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKKworICAgICAgICBpZiAodmVydGV4
UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBp
eGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKKworICAg
ICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKKyAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVh
c2UoKTsKKyAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKKyAgICAgICAgcGl4ZWxCaW5hcnkg
PSBOVUxMOworCisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRh
YmxlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVBTKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghbGlua1VuaWZvcm1zKG1Db25zdGFudFRhYmxlVlMpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGhl
c2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xf
IGFuZCBkeF8KKyAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRvIG5v
dCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgorICAgICAgICAgICAgbURlcHRoUmFuZ2VO
ZWFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UubmVhciIsIHRy
dWUpOworICAgICAgICAgICAgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZ2xfRGVwdGhSYW5nZS5mYXIiLCB0cnVlKTsKKyAgICAgICAgICAgIG1EZXB0aFJhbmdl
RGlmZkxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLmRpZmYiLCB0
cnVlKTsKKyAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImR4X0RlcHRoIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhXaW5kb3dMb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbigiZHhfV2luZG93IiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiLCB0
cnVlKTsKKyAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0Zyb250Q0NXIiwgdHJ1ZSk7CisgICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiLCB0cnVlKTsKKwor
ICAgICAgICAgICAgbUxpbmtlZCA9IHRydWU7ICAgLy8gU3VjY2VzcworICAgICAgICB9CisgICAg
fQorfQorCisvLyBEZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0cmlidXRlcyBh
bmQgRGlyZWN0M0QgOSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKK2Jvb2wgUHJvZ3JhbTo6
bGlua0F0dHJpYnV0ZXMoKQoreworICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsK
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisg
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGludCBsb2NhdGlvbiA9
IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAgICAgICBpZiAobG9j
YXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRy
aWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmli
dXRlOworCisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRl
LT50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhf
QVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2co
IkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIs
IGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcm93czsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzZWRMb2Nh
dGlvbnMgfD0gMSA8PCAobG9jYXRpb24gKyBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5n
IGxvY2F0aW9uCisgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
bVZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlu
dCBsb2NhdGlvbiA9IGdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2Nh
dGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQo
YXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9j
YXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJT
KTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUlu
ZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcyki
LCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gRmFpbCB0byBsaW5rCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaW5r
ZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IG1WZXJ0ZXhT
aGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZSk7CisgICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7CisKKyAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW1hbnRp
Y0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitpbnQgUHJvZ3JhbTo6Z2V0QXR0cmlidXRlQmluZGluZyhj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxv
Y2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBsb2NhdGlvbisrKQorICAgIHsKKyAgICAgICAg
aWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVC
aW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxv
Y2F0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitib29sIFBy
b2dyYW06OmxpbmtVbmlmb3JtcyhJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCit7
CisgICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Cisg
ICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKKyAgICBVSU5UIGRlc2Ny
aXB0aW9uQ291bnQgPSAxOworCisgICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29uc3RhbnRU
YWJsZURlc2NyaXB0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50SW5kZXgg
PSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0YW50czsg
Y29uc3RhbnRJbmRleCsrKQorICAgIHsKKyAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFudEhhbmRs
ZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOworICAgICAg
ICBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFu
dERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgaWYgKCFkZWZpbmVV
bmlmb3JtKGNvbnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQg
aW4gdGhlIGJpbmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKKy8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKK2Jvb2wgUHJv
Z3JhbTo6ZGVmaW5lVW5pZm9ybShjb25zdCBEM0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29u
c3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5h
bWUpCit7CisgICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJT
X1NBTVBMRVIpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gY29u
c3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OworCisgICAgICAgIGFzc2VydChzYW1wbGVy
SW5kZXggPCBzaXplb2YobVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CisKKyAgICAg
ICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbVNhbXBs
ZXJzW3NhbXBsZXJJbmRleF0udHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNE
WFBUX1NBTVBMRVJDVUJFKSA/IFNBTVBMRVJfQ1VCRSA6IFNBTVBMRVJfMkQ7CisgICAgICAgIG1T
YW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgIG1T
YW1wbGVyc1tzYW1wbGVySW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2go
Y29uc3RhbnREZXNjcmlwdGlvbi5DbGFzcykKKyAgICB7CisgICAgICBjYXNlIEQzRFhQQ19TVFJV
Q1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsg
ZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CisKKyAgICAg
ICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0aW9uOworICAgICAgICAg
ICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CisKKyAgICAgICAgICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0
aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVu
aWZvcm0oZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUgKyAiLiIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIGNhc2UgRDNEWFBDX1NDQUxB
UjoKKyAgICAgIGNhc2UgRDNEWFBDX1ZFQ1RPUjoKKyAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9D
T0xVTU5TOgorICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgorICAgICAgICByZXR1cm4gZGVmaW5l
VW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5O
YW1lKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybShjb25z
dCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgJm5h
bWUpCit7CisgICAgVW5pZm9ybSAqdW5pZm9ybSA9IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNj
cmlwdGlvbiwgbmFtZSk7CisKKyAgICBpZighdW5pZm9ybSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKKyAgICBH
TGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbihuYW1lLmNfc3RyKCksIHRydWUpOwor
ICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKKworICAgIGlmIChsb2NhdGlvbiA+PSAw
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIHVuaWZvcm07CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF0tPnR5cGUgIT0gdHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOworICAgIHVuc2lnbmVkIGludCB1bmlmb3Jt
SW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCisgICAgeworICAgICAgICBtVW5pZm9y
bUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24obmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1VuaWZvcm0gKlByb2dyYW06OmNyZWF0
ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0
ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0g
MSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRDNEWFBUX1NB
TVBMRVIyRDoKKyAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKKyAgICAgICAgICAg
IHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIG5hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBEM0RYUFRfQk9PTDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5D
b2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBuYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xf
Qk9PTF9WRUM0LCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKKyAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIG5hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9JTlRfVkVDMiwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Cisg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQs
IG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMyLCBuYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfRkxPQVRfVkVDMywgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Cisg
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIG5h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcworICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEQzRFhQVF9GTE9BVDoKKyAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5S
b3dzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9GTE9BVF9NQVQyLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
KyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMywg
bmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGNhc2Ug
NDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIG5hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICByZXR1cm4gMDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0
SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIFByb2dyYW06OmRlY29yYXRlKGNvbnN0IHN0ZDo6
c3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMykgIT0gImdsXyIg
JiYgc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICB7CisgICAgICAgIHJldHVybiAi
XyIgKyBzdHJpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJp
bmc7CisgICAgfQorfQorCitzdGQ6OnN0cmluZyBQcm9ncmFtOjp1bmRlY29yYXRlKGNvbnN0IHN0
ZDo6c3RyaW5nICZzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5zdWJzdHIoMCwgMSkgPT0gIl8i
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorfQorCitib29sIFByb2dy
YW06OmFwcGx5VW5pZm9ybTFidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xib29sZWFuICp2KQoreworICAgIEJPT0wgKnZlY3RvciA9IG5ldyBCT09MW2NvdW50XTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAodltp
XSA9PSBHTF9GQUxTRSkKKyAgICAgICAgICAgIHZlY3RvcltpXSA9IDA7CisgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICB2ZWN0b3JbaV0gPSAxOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisg
ICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAg
ICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFu
dFZTKTsKKworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOworCisg
ICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRC
b29sQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAg
ICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldEJv
b2xBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAg
IGRlbGV0ZSBbXSB2ZWN0b3I7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0yYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
Ym9vbGVhbiAqdikKK3sKKyAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0
W2NvdW50XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7Cisg
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdMX0ZBTFNFID8gMC4wZiA6
IDEuMGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsxXSA9PSBHTF9GQUxT
RSA/IDAuMGYgOiAxLjBmKSwgMCwgMCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKworICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0
YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50
KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFu
dFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3Vu
dCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2J2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7CisgICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9
IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgodlswXSA9PSBH
TF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZbMV0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodlsyXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwgMCk7CisKKyAgICAg
ICAgdiArPSAzOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25z
dGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRs
ZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQor
ICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBj
b25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9y
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGJ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGJvb2xlYW4gKnYpCit7Cisg
ICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0g
PSBEM0RYVkVDVE9SNCgodlswXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZbMV0gPT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZiks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsyXSA9PSBHTF9GQUxTRSA/IDAu
MGYgOiAxLjBmKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzNdID09IEdM
X0ZBTFNFID8gMC4wZiA6IDEuMGYpKTsKKworICAgICAgICB2ICs9IDM7CisgICAgfQorCisgICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CisKKyAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7CisgICAgRDNEWEhBTkRMRSBj
b25zdGFudFZTOworICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3Rh
bnRQUywgJmNvbnN0YW50VlMpOworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOworCisgICAgaWYgKGNvbnN0YW50UFMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQp
OworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50
VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50
KTsKKyAgICB9CisKKyAgICBkZWxldGUgW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhB
TkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25z
dGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25z
dGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0RmxvYXRBcnJheShk
ZXZpY2UsIGNvbnN0YW50UFMsIHYsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRW
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldEZsb2F0QXJyYXkoZGV2aWNl
LCBjb25zdGFudFZTLCB2LCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcg
RDNEWFZFQ1RPUjRbY291bnRdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgIHsKKyAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQodlswXSwgdlsxXSwgMCwg
MCk7CisKKyAgICAgICAgdiArPSAyOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNE
WEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRD
b25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChj
b25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJy
YXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAo
Y29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFy
cmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVs
ZXRlW10gdmVjdG9yOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBw
bHlVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KQoreworICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRd
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
dmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQodlswXSwgdlsxXSwgdlsyXSwgMCk7CisKKyAgICAgICAg
diArPSAzOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFu
dFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXMo
dGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAg
IHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25z
dGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29u
c3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29u
c3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50
UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFi
bGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCAoRDNEWFZFQ1RPUjQqKXYs
IGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1D
b25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgKEQzRFhW
RUNUT1I0Kil2LCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RYTUFUUklYICptYXRyaXggPSBu
ZXcgRDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFUUklYKHZhbHVlWzBdLCB2YWx1
ZVsyXSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXSwgdmFs
dWVbM10sIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIDAs
ICAgICAgICAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAw
LCAgICAgICAgMCwgMSk7CisKKyAgICAgICAgdmFsdWUgKz0gNDsKKyAgICB9CisKKyAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0
YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBT
LCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxl
UFMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRQUywgbWF0cml4LCBj
b3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMpCisgICAgeworICAgICAgICBtQ29u
c3RhbnRUYWJsZVZTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50VlMs
IG1hdHJpeCwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIG1hdHJpeDsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybU1hdHJpeDNmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAg
RDNEWE1BVFJJWCAqbWF0cml4ID0gbmV3IEQzRFhNQVRSSVhbY291bnRdOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbWF0cml4W2ldID0gRDNE
WE1BVFJJWCh2YWx1ZVswXSwgdmFsdWVbM10sIHZhbHVlWzZdLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlWzFdLCB2YWx1ZVs0XSwgdmFsdWVbN10sIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMl0sIHZhbHVlWzVdLCB2YWx1ZVs4XSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgMCwgICAgICAgIDAsICAg
ICAgICAxKTsKKworICAgICAgICB2YWx1ZSArPSA5OworICAgIH0KKworICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
CisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsK
KyAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25z
dGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKwor
ICAgIGlmIChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0
TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50KTsK
KyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRh
YmxlVlMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0cml4
LCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gbWF0cml4OworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBEM0RYTUFU
UklYICptYXRyaXggPSBuZXcgRDNEWE1BVFJJWFtjb3VudF07CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBtYXRyaXhbaV0gPSBEM0RYTUFUUklY
KHZhbHVlWzBdLCB2YWx1ZVs0XSwgdmFsdWVbOF0sICB2YWx1ZVsxMl0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVbMV0sIHZhbHVlWzVdLCB2YWx1ZVs5XSwgIHZhbHVlWzEz
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsyXSwgdmFsdWVbNl0sIHZh
bHVlWzEwXSwgdmFsdWVbMTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
WzNdLCB2YWx1ZVs3XSwgdmFsdWVbMTFdLCB2YWx1ZVsxNV0pOworCisgICAgICAgIHZhbHVlICs9
IDE2OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFudFBT
OworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXModGFy
Z2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAgIHsK
KyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNl
LCBjb25zdGFudFBTLCBtYXRyaXgsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRW
UykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldE1hdHJpeFRyYW5zcG9zZUFy
cmF5KGRldmljZSwgY29uc3RhbnRWUywgbWF0cml4LCBjb3VudCk7CisgICAgfQorCisgICAgZGVs
ZXRlW10gbWF0cml4OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBw
bHlVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKK3sKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKKyAgICBE
M0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZv
cm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAg
IEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247CisgICAgICAgIFVJTlQgZGVz
Y3JpcHRpb25Db3VudCA9IDE7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFi
bGVQUy0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50UFMsICZjb25zdGFudERlc2NyaXB0aW9uLCAm
ZGVzY3JpcHRpb25Db3VudCk7CisKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSBtQ29uc3RhbnRUYWJs
ZVBTLT5HZXRTYW1wbGVySW5kZXgoY29uc3RhbnRQUyk7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXg7IHNhbXBsZXJJbmRleCA8IGZpcnN0
SW5kZXggKyBjb3VudDsgc2FtcGxlckluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgR0xpbnQgbWFwcGVkU2FtcGxlciA9IHZbMF07CisKKyAgICAgICAgICAgICAgICBpZiAo
c2FtcGxlckluZGV4ID49IDAgJiYgc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBs
ZXJzW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
W3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gbWFwcGVkU2FtcGxlcjsKKyAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGlydHkgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRQUykKKyAgICB7CisgICAgICAg
IG1Db25zdGFudFRhYmxlUFMtPlNldEludEFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdiwgY291
bnQpOworICAgIH0KKworICAgIGlmIChjb25zdGFudFZTKQorICAgIHsKKyAgICAgICAgbUNvbnN0
YW50VGFibGVWUy0+U2V0SW50QXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2LCBjb3VudCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAg
ICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7CisKKyAgICAgICAg
diArPSAyOworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAgRDNEWEhBTkRMRSBjb25zdGFu
dFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBnZXRDb25zdGFudEhhbmRsZXMo
dGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlmIChjb25zdGFudFBTKQorICAg
IHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25z
dGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBpZiAoY29uc3RhbnRWUykKKyAg
ICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29u
c3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgZGVsZXRlW10gdmVjdG9yOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtM2l2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKK3sKKyAgICBEM0RY
VkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHZlY3RvcltpXSA9IEQzRFhW
RUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOworCisgICAg
ICAgIHYgKz0gMzsKKyAgICB9CisKKyAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKworICAgIEQzRFhIQU5ETEUgY29u
c3RhbnRQUzsKKyAgICBEM0RYSEFORExFIGNvbnN0YW50VlM7CisgICAgZ2V0Q29uc3RhbnRIYW5k
bGVzKHRhcmdldFVuaWZvcm0sICZjb25zdGFudFBTLCAmY29uc3RhbnRWUyk7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBpZiAoY29uc3RhbnRQUykK
KyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwg
Y29uc3RhbnRQUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAgaWYgKGNvbnN0YW50VlMp
CisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50VlMsIHZlY3RvciwgY291bnQpOworICAgIH0KKworICAgIGRlbGV0ZVtdIHZlY3Rv
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW06OmFwcGx5VW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCit7CisgICAg
RDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICB2ZWN0b3JbaV0gPSBE
M0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQp
dlszXSk7CisKKyAgICAgICAgdiArPSA0OworICAgIH0KKworICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworCisgICAg
RDNEWEhBTkRMRSBjb25zdGFudFBTOworICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKKyAgICBn
ZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZT
KTsKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIGlm
IChjb25zdGFudFBTKQorICAgIHsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9y
QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKKyAgICB9CisKKyAgICBp
ZiAoY29uc3RhbnRWUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3Rv
ckFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7CisgICAgfQorCisgICAg
ZGVsZXRlIFtdIHZlY3RvcjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFByb2dyYW06
OmFwcGVuZFRvSW5mb0xvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpZiAoIWZv
cm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyIGluZm9bMTAy
NF07CisKKyAgICB2YV9saXN0IHZhcmFyZzsKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
CisgICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAg
IHZhX2VuZCh2YXJhcmcpOworCisgICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7
CisKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hh
cltpbmZvTGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShtSW5mb0xvZywgaW5mbyk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJsZW4obUlu
Zm9Mb2cpOworICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hhcltsb2dMZW5ndGggKyBpbmZv
TGVuZ3RoICsgMV07CisgICAgICAgIHN0cmNweShuZXdMb2csIG1JbmZvTG9nKTsKKyAgICAgICAg
c3RyY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCwgaW5mbyk7CisKKyAgICAgICAgZGVsZXRlW10gbUlu
Zm9Mb2c7CisgICAgICAgIG1JbmZvTG9nID0gbmV3TG9nOworICAgIH0KK30KKwordm9pZCBQcm9n
cmFtOjpyZXNldEluZm9Mb2coKQoreworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAg
IGRlbGV0ZSBbXSBtSW5mb0xvZzsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIHByb2dyYW0g
b2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBhZnRlciBkZXRhY2hpbmcgYSBzaGFkZXIsIGJl
Zm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgordm9pZCBQcm9ncmFtOjp1bmxpbmso
Ym9vbCBkZXN0cm95KQoreworICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0
cnVjdGVkCisgICAgeworICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbUZyYWdt
ZW50U2hhZGVyID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVmVydGV4U2hhZGVy
KQorICAgICAgICB7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICAg
ICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1QaXhlbEV4ZWN1dGFibGUpCisgICAgeworICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOworICAgIH0KKworICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB9CisKKyAg
ICBpZiAobUNvbnN0YW50VGFibGVQUykKKyAgICB7CisgICAgICAgIG1Db25zdGFudFRhYmxlUFMt
PlJlbGVhc2UoKTsKKyAgICAgICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7CisgICAgfQorCisg
ICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCisgICAgeworICAgICAgICBtQ29uc3RhbnRUYWJsZVZT
LT5SZWxlYXNlKCk7CisgICAgICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOworICAgIH0KKwor
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4
KyspCisgICAgeworICAgICAgICBtTGlua2VkQXR0cmlidXRlW2luZGV4XS5uYW1lLmNsZWFyKCk7
CisgICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOworICAgIH0KKworICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykK
KyAgICB7CisgICAgICAgIG1TYW1wbGVyc1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CisgICAgICAg
IG1TYW1wbGVyc1tpbmRleF0uZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIHdoaWxlICghbVVu
aWZvcm1zLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsK
KyAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CisgICAgfQorCisgICAgbURlcHRoUmFuZ2VE
aWZmTG9jYXRpb24gPSAtMTsKKyAgICBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbiA9IC0xOworICAg
IG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSAtMTsKKyAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7
CisgICAgbUR4V2luZG93TG9jYXRpb24gPSAtMTsKKyAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRp
b24gPSAtMTsKKyAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7CisgICAgbUR4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uID0gLTE7CisKKyAgICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7CisKKyAgICBt
UGl4ZWxITFNMLmNsZWFyKCk7CisgICAgbVZlcnRleEhMU0wuY2xlYXIoKTsKKworICAgIGRlbGV0
ZVtdIG1JbmZvTG9nOworICAgIG1JbmZvTG9nID0gTlVMTDsKKworICAgIG1MaW5rZWQgPSBmYWxz
ZTsKK30KKworYm9vbCBQcm9ncmFtOjppc0xpbmtlZCgpCit7CisgICAgcmV0dXJuIG1MaW5rZWQ7
Cit9CisKK2Jvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4g
bVZhbGlkYXRlZDsKK30KKwordW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TZXJpYWw7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1
ZVNlcmlhbCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CisKK2ludCBQcm9n
cmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1JbmZvTG9nKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgcmV0
dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQor
eworICAgIGludCBpbmRleCA9IDA7CisKKyAgICBpZiAobUluZm9Mb2cpCisgICAgeworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1JbmZv
TG9nKSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xvZ1tp
bmRleF07CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGJ1ZlNpemUpCisgICAgeworICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7CisgICAgfQor
CisgICAgaWYgKGxlbmd0aCkKKyAgICB7CisgICAgICAgICpsZW5ndGggPSBpbmRleDsKKyAgICB9
Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQs
IEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCit7CisgICAgaW50IHRvdGFsID0gMDsK
KworICAgIGlmIChtVmVydGV4U2hhZGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRvdGFsIDwgbWF4
Q291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNo
YWRlci0+Z2V0SGFuZGxlKCk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbCsrOworICAgIH0K
KworICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCisgICAgeworICAgICAgICBpZiAodG90YWwgPCBt
YXhDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21l
bnRTaGFkZXItPmdldEhhbmRsZSgpOworICAgICAgICB9CisKKyAgICAgICAgdG90YWwrKzsKKyAg
ICB9CisKKyAgICBpZiAoY291bnQpCisgICAgeworICAgICAgICAqY291bnQgPSB0b3RhbDsKKyAg
ICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5
cGUsIEdMY2hhciAqbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspCisgICAgeworICAgICAg
ICBkbworICAgICAgICB7CisgICAgICAgICAgICBhdHRyaWJ1dGUrKzsKKworICAgICAgICAgICAg
QVNTRVJUKGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUyk7ICAgLy8gaW5kZXggbXVzdCBi
ZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQorICAgICAgICB9CisgICAg
ICAgIHdoaWxlIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKTsKKyAg
ICB9CisKKyAgICBpZiAoYnVmc2l6ZSA+IDApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpz
dHJpbmcgPSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOworCisgICAg
ICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLCBidWZzaXplKTsKKyAgICAgICAgbmFtZVtidWZzaXpl
IC0gMV0gPSAnXDAnOworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc2l6
ZSA9IDE7ICAgLy8gQWx3YXlzIGEgc2luZ2xlICd0eXBlJyBpbnN0YW5jZQorCisgICAgKnR5cGUg
PSBtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0udHlwZTsKK30KKworR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICBm
b3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisK
K0dMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCit7CisgICAgaW50
IG1heExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJp
YnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsK
KyAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVu
Z3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3Zv
aWQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5h
bWUpCit7CisgICAgdW5zaWduZWQgaW50IHVuaWZvcm0gPSAwOworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuaWZvcm0rKzsKKworICAgICAgICAgICAgQVNTRVJUKHVuaWZvcm0gPCBt
VW5pZm9ybXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3Rp
dmVVbmlmb3JtQ291bnQoKQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChtVW5pZm9ybXNbdW5p
Zm9ybV0tPm5hbWUuc3Vic3RyKDAsIDMpID09ICJkeF8iKTsKKyAgICB9CisKKyAgICBpZiAoYnVm
c2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmRlY29yYXRl
KG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZSk7CisKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+YXJyYXlTaXplICE9IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSAi
WzBdIjsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCks
IGJ1ZnNpemUpOworICAgICAgICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAg
aWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1l
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5h
cnJheVNpemU7CisKKyAgICAqdHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKK30KKwor
R0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKK3sKKyAgICBpbnQgY291bnQg
PSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBu
dW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1z
W3VuaWZvcm1JbmRleF0tPm5hbWUuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50
OworfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCkKK3sKKyAg
ICBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1V
bmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsg
dW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5lbXB0eSgpICYmIG1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLnN1YnN0cigwLCAzKSAhPSAiZHhfIikKKyAgICAgICAgewor
ICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgoKGludCkodW5kZWNvcmF0ZShtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XS0+bmFtZSkubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6
ZmxhZ0ZvckRlbGV0aW9uKCkKK3sKKyAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1E
ZWxldGVTdGF0dXM7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQoreworICAgIHJlc2V0
SW5mb0xvZygpOworCisgICAgaWYgKCFpc0xpbmtlZCgpKSAKKyAgICB7CisgICAgICAgIGFwcGVu
ZFRvSW5mb0xvZygiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5IGxpbmtlZC4iKTsK
KyAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBhcHBseVVuaWZvcm1zKCk7CisgICAgICAgIGlmICghdmFsaWRhdGVTYW1wbGVycygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBhcHBlbmRUb0luZm9Mb2coIlNhbXBsZXJzIG9mIGNvbmZs
aWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdC4iKTsKKyAg
ICAgICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorfQorCitib29sIFByb2dyYW06OnZhbGlkYXRlU2FtcGxlcnMoKSBjb25zdAoreworICAgIC8v
IGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50
IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKKyAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQs
IGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdp
bGwgZmFpbCwgYW5kCisgICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNz
dWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgorICAgIHN0ZDo6bWFwPGludCwgU2FtcGxl
clR5cGU+IHNhbXBsZXJNYXA7IAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFM7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlcnNb
aV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2FtcGxlck1hcC5maW5kKG1T
YW1wbGVyc1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQpICE9IHNhbXBsZXJNYXAuZW5kKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1tpXS50eXBlICE9IHNhbXBs
ZXJNYXBbbVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdF0pCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYW1wbGVyTWFwW21TYW1wbGVyc1tpXS5sb2dpY2Fs
VGV4dHVyZVVuaXRdID0gbVNhbXBsZXJzW2ldLnR5cGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRDb25z
dGFudEhhbmRsZXMoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgRDNEWEhBTkRMRSAqY29uc3RhbnRQ
UywgRDNEWEhBTkRMRSAqY29uc3RhbnRWUykKK3sKKyAgICBpZiAoIXRhcmdldFVuaWZvcm0tPmhh
bmRsZXNTZXQpCisgICAgeworICAgICAgICB0YXJnZXRVbmlmb3JtLT5wc0hhbmRsZSA9IG1Db25z
dGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKDAsIHRhcmdldFVuaWZvcm0tPm5hbWUuY19z
dHIoKSk7CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnZzSGFuZGxlID0gbUNvbnN0YW50VGFibGVW
Uy0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKKyAg
ICAgICAgdGFyZ2V0VW5pZm9ybS0+aGFuZGxlc1NldCA9IHRydWU7CisgICAgfQorCisgICAgKmNv
bnN0YW50UFMgPSB0YXJnZXRVbmlmb3JtLT5wc0hhbmRsZTsKKyAgICAqY29uc3RhbnRWUyA9IHRh
cmdldFVuaWZvcm0tPnZzSGFuZGxlOworfQorCitHTGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdl
RGlmZkxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoUmFuZ2VEaWZmTG9jYXRp
b247Cit9CisKK0dMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbjsKK30KKworR0xpbnQgUHJv
Z3JhbTo6Z2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURl
cHRoUmFuZ2VGYXJMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aExvY2F0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKK30KKworR0xpbnQg
UHJvZ3JhbTo6Z2V0RHhXaW5kb3dMb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeFdp
bmRvd0xvY2F0aW9uOworfQorCitHTGludCBQcm9ncmFtOjpnZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKK30K
KworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKK30KKworR0xpbnQgUHJvZ3JhbTo6Z2V0RHhQb2lu
dHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtRHhQb2ludHNPckxpbmVz
TG9jYXRpb247Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjIzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGds
OjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cworLy8gYW5kIHJl
bGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBh
Z2UgMjguCisKKyNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1BST0dSQU1fSF8KKworI2luY2x1ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hh
ZGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKworbmFtZXNwYWNlIGdsCit7
CitjbGFzcyBGcmFnbWVudFNoYWRlcjsKK2NsYXNzIFZlcnRleFNoYWRlcjsKKworLy8gSGVscGVy
IHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KK3N0cnVjdCBVbmlm
b3JtCit7CisgICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUpOworCisgICAgflVuaWZvcm0oKTsKKworICAgIGNvbnN0
IEdMZW51bSB0eXBlOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgY29uc3QgdW5z
aWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgYm9v
bCBkaXJ0eTsKKworICAgIEQzRFhIQU5ETEUgdnNIYW5kbGU7CisgICAgRDNEWEhBTkRMRSBwc0hh
bmRsZTsKKyAgICBib29sIGhhbmRsZXNTZXQ7Cit9OworCisvLyBTdHJ1Y3QgdXNlZCBmb3IgY29y
cmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwor
c3RydWN0IFVuaWZvcm1Mb2NhdGlvbgoreworICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7
CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBlbGVtZW50OworICAg
IHVuc2lnbmVkIGludCBpbmRleDsKK307CisKK2NsYXNzIFByb2dyYW0KK3sKKyAgcHVibGljOgor
ICAgIFByb2dyYW0oKTsKKworICAgIH5Qcm9ncmFtKCk7CisKKyAgICBib29sIGF0dGFjaFNoYWRl
cihTaGFkZXIgKnNoYWRlcik7CisgICAgYm9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIp
OworICAgIGludCBnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0OworCisgICAgSURpcmVj
dDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKmdldFZlcnRleFNoYWRlcigpOworCisgICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRp
b24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICBHTHVpbnQgZ2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CisgICAgaW50IGdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KTsKKworICAgIHZvaWQgZGlydHlBbGxTYW1wbGVycygpOworCisg
ICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Cisg
ICAgU2FtcGxlclR5cGUgZ2V0U2FtcGxlclR5cGUodW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7
CisgICAgYm9vbCBpc1NhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KSBjb25z
dDsKKyAgICB2b2lkIHNldFNhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4LCBi
b29sIGRpcnR5KTsKKworICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihjb25zdCBjaGFyICpu
YW1lLCBib29sIGRlY29yYXRlZCk7CisgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
KyAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNl
dFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKKworICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0ICpwYXJh
bXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAqcGFyYW1z
KTsKKworICAgIEdMaW50IGdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdDsKKyAgICBH
TGludCBnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RGVw
dGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9u
KCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhXaW5kb3dMb2NhdGlvbigpIGNvbnN0OworICAgIEdM
aW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhG
cm9udENDV0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhQb2ludHNPckxpbmVzTG9j
YXRpb24oKSBjb25zdDsKKworICAgIHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOworICAgIHZvaWQg
YXBwbHlVbmlmb3JtcygpOworCisgICAgdm9pZCBsaW5rKCk7CisgICAgYm9vbCBpc0xpbmtlZCgp
OworICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2
b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwg
R0x1aW50ICpzaGFkZXJzKTsKKworICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBp
bmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVu
dW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7CisgICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291
bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKKworICAgIHZv
aWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOworICAg
IEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1NYXhMZW5ndGgoKTsKKworICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgYm9vbCBp
c0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OworCisgICAgdm9pZCB2YWxpZGF0ZSgpOworICAg
IGJvb2wgdmFsaWRhdGVTYW1wbGVycygpIGNvbnN0OworICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBj
b25zdDsKKworICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKKworICAgIElEM0RYQnVm
ZmVyICpjb21waWxlVG9CaW5hcnkoY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmls
ZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSk7CisgICAgdm9pZCB1bmxpbmso
Ym9vbCBkZXN0cm95ID0gZmFsc2UpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5
aW5nICpwYWNraW5nW11bNF0pOworICAgIGJvb2wgbGlua1ZhcnlpbmdzKCk7CisKKyAgICBib29s
IGxpbmtBdHRyaWJ1dGVzKCk7CisgICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUpOworCisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSUQzRFhDb25zdGFudFRh
YmxlICpjb25zdGFudFRhYmxlKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3QgRDNEWEhB
TkRMRSAmY29uc3RhbnRIYW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBzdGQ6OnN0cmluZyBuYW1lID0gIiIpOworICAgIGJvb2wgZGVmaW5lVW5pZm9y
bShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJp
bmcgJm5hbWUpOworICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybTFidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xi
b29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJidihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTNi
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xib29sZWFuICp2KTsKKyAg
ICBib29sIGFwcGx5VW5pZm9ybTRidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xib29sZWFuICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTFmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwor
ICAgIGJvb2wgYXBwbHlVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CisgICAgYm9vbCBhcHBseVVuaWZv
cm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgYXBwbHlVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSk7CisgICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIGFwcGx5VW5pZm9ybTJpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgYXBw
bHlVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dik7CisgICAgYm9vbCBhcHBseVVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKKworICAgIHZvaWQgZ2V0Q29uc3RhbnRIYW5kbGVzKFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEQzRFhIQU5ETEUgKmNvbnN0YW50UFMsIEQzRFhIQU5ETEUgKmNv
bnN0YW50VlMpOworCisgICAgdm9pZCBhcHBlbmRUb0luZm9Mb2coY29uc3QgY2hhciAqaW5mbywg
Li4uKTsKKyAgICB2b2lkIHJlc2V0SW5mb0xvZygpOworCisgICAgc3RhdGljIHN0ZDo6c3RyaW5n
IGRlY29yYXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZzdHJpbmcpOyAgICAgLy8gUHJlcGVuZCBhbiB1
bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHVuZGVjb3JhdGUoY29uc3Qgc3RkOjpz
dHJpbmcgJnN0cmluZyk7ICAgLy8gUmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQorCisgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOworCisgICAgRnJhZ21lbnRTaGFkZXIgKm1G
cmFnbWVudFNoYWRlcjsKKyAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CisKKyAgICBz
dGQ6OnN0cmluZyBtUGl4ZWxITFNMOworICAgIHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNMOworCisg
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVjdXRhYmxlOworICAgIElEaXJlY3Qz
RFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOworICAgIElEM0RYQ29uc3RhbnRUYWJs
ZSAqbUNvbnN0YW50VGFibGVQUzsKKyAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRh
YmxlVlM7CisKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0dHJpYnV0ZUJpbmRpbmdbTUFY
X1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVS
VEVYX0FUVFJJQlNdOworICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNd
OworCisgICAgc3RydWN0IFNhbXBsZXIKKyAgICB7CisgICAgICAgIGJvb2wgYWN0aXZlOworICAg
ICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7CisgICAgICAgIFNhbXBsZXJUeXBlIHR5cGU7
CisgICAgICAgIGJvb2wgZGlydHk7CisgICAgfTsKKworICAgIFNhbXBsZXIgbVNhbXBsZXJzW01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9y
bSo+IFVuaWZvcm1BcnJheTsKKyAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOworICAgIHR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7CisgICAgVW5pZm9y
bUluZGV4IG1Vbmlmb3JtSW5kZXg7CisKKyAgICBHTGludCBtRGVwdGhSYW5nZURpZmZMb2NhdGlv
bjsKKyAgICBHTGludCBtRGVwdGhSYW5nZU5lYXJMb2NhdGlvbjsKKyAgICBHTGludCBtRGVwdGhS
YW5nZUZhckxvY2F0aW9uOworICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247CisgICAgR0xpbnQg
bUR4V2luZG93TG9jYXRpb247CisgICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwor
ICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CisgICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uOworCisgICAgYm9vbCBtTGlua2VkOworICAgIGJvb2wgbURlbGV0ZVN0YXR1czsg
ICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hl
biBubyBsb25nZXIgaW4gdXNlCisgICAgY2hhciAqbUluZm9Mb2c7CisgICAgYm9vbCBtVmFsaWRh
dGVkOworCisgICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aW50IG1DdXJyZW50U2VyaWFsOworfTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dS
QU1fSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzU1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJidWZmZXIuY3Bw
OiB0aGUgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcworLy8g
Q29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdM
IHJlbmRlcmJ1ZmZlcgorLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3Vuc2lnbmVk
IGludCBSZW5kZXJidWZmZXI6Om1DdXJyZW50U2VyaWFsID0gMTsKKworUmVuZGVyYnVmZmVyOjpS
ZW5kZXJidWZmZXIoKQoreworICAgIG1XaWR0aCA9IDA7CisgICAgbUhlaWdodCA9IDA7CisgICAg
bUZvcm1hdCA9IEdMX1JHQkE0OyAvLyBkZWZhdWx0IGZvcm1hdCwgbmVlZHMgdG8gYmUgb25lIG9m
IHRoZSBleHBlY3RlZCByZW5kZXJidWZmZXIgZm9ybWF0cworICAgIG1TZXJpYWwgPSBpc3N1ZVNl
cmlhbCgpOworfQorCitSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQoreworfQorCitib29s
IFJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFJlbmRlcmJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRl
clRhcmdldCgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpS
ZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
K2ludCBSZW5kZXJidWZmZXI6OmdldFdpZHRoKCkKK3sKKyAgICByZXR1cm4gbVdpZHRoOworfQor
CitpbnQgUmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKQoreworICAgIHJldHVybiBtSGVpZ2h0Owor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7
CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdodDsKK30KKworCitHTGVu
dW0gUmVuZGVyYnVmZmVyOjpnZXRGb3JtYXQoKQoreworICAgIHJldHVybiBtRm9ybWF0OworfQor
Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjppc3N1ZVNlcmlh
bCgpCit7CisgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Cit9CisKK0NvbG9yYnVmZmVyOjpD
b2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KSA6IG1SZW5kZXJUYXJn
ZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgeworICAgICAg
ICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOworCisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisK
KyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsK
KyAgICB9CisKK30KKworQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZXMyZHg6OkNv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwg
Jm1SZW5kZXJUYXJnZXQsIE5VTEwpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAg
eworICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBtRm9ybWF0ID0gZm9y
bWF0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRTaXplKDAsIDApOworICAg
ICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7CisgICAgfQorfQorCitDb2xvcmJ1ZmZlcjo6fkNvbG9y
YnVmZmVyKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29sb3JidWZmZXI6OmlzQ29s
b3JidWZmZXIoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6
OmdldFJlZFNpemUoKQoreworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXRE
ZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRSZWRTaXplKGRl
c2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0dMdWludCBD
b2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKK3sKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAg
ICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgbVJlbmRl
clRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAgIHJldHVybiBlczJkeDo6
R2V0R3JlZW5TaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUoKQoreworICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwor
ICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAg
cmV0dXJuIGVzMmR4OjpHZXRCbHVlU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEFscGhhU2l6ZSgpCit7
CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzY3JpcHRpb247CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9u
KTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldEFscGhhU2l6ZShkZXNjcmlwdGlvbi5Gb3Jt
YXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqQ29s
b3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7
Cit9CisKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhT
dGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChkZXB0aFN0
ZW5jaWwpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworCisgICAgICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXRE
ZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwg
ZGVzY3JpcHRpb24uSGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVO
VDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBj
YWxsaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3Ig
dXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorICAgIH0KK30KKworRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQz
REZNVF9EMjRTOCwgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2ls
LCAwKTsKKworICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgc2V0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2
OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxs
aW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNl
IGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRTaXplKDAs
IDApOworICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vZGVmYXVsdCBmb3JtYXQKKyAgICB9
Cit9CisKK0RlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQoreworICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIH0KK30K
KworYm9vbCBEZXB0aGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0dMdWludCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkKK3sKKyAgICBpZiAobURl
cHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsK
KyAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOworCisgICAgICAg
IHJldHVybiBlczJkeDo6R2V0RGVwdGhTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aGJ1ZmZlcjo6Z2V0
RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKK30KKworU3RlbmNp
bGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6
IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChkZXB0aFN0ZW5jaWwpCisg
ICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworCisgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNj
cmlwdGlvbik7CisKKyAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRp
b24uSGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJZiB0
aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0
aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qg
b25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQor
ICAgIH0KK30KKworU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisK
KyAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIEQz
RE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7CisKKyAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRl
cmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0
aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc2V0U2l6ZSgwLCAwKTsKKyAgICAgICAgbUZvcm1hdCA9
IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0CisgICAgfQorfQorCitTdGVuY2lsYnVmZmVyOjp+
U3RlbmNpbGJ1ZmZlcigpCit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAg
ICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgfQorfQorCitHTHVpbnQgU3RlbmNpbGJ1
ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKQoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsK
KyAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhTdGVu
Y2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRT
dGVuY2lsU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitib29sIFN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwoKQoreworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOworfQorfQpJbmRleDogQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB2aXJ0dWFsIGdsOjpS
ZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkCisvLyBjbGFzc2VzIENvbG9yYnVmZmVy
LCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZm
ZXIKKy8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJV
RkZFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCisKKyNkZWZpbmUgR0xf
QVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKworI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUmVu
ZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBSZW5kZXJidWZmZXIoKTsKKworICAgIHZpcnR1
YWwgflJlbmRlcmJ1ZmZlcigpOworCisgICAgdmlydHVhbCBib29sIGlzQ29sb3JidWZmZXIoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOworICAgIHZpcnR1YWwgYm9vbCBpc1N0
ZW5jaWxidWZmZXIoKTsKKworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRl
clRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOworCisgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKTsKKyAgICB2aXJ0dWFsIGludCBnZXRI
ZWlnaHQoKTsKKyAgICBHTGVudW0gZ2V0Rm9ybWF0KCk7CisgICAgdW5zaWduZWQgaW50IGdldFNl
cmlhbCgpIGNvbnN0OworCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwor
CisgIHByb3RlY3RlZDoKKyAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOworCisgICAg
c3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKKworICAgIGludCBtV2lkdGg7Cisg
ICAgaW50IG1IZWlnaHQ7Cit9OworCitjbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJi
dWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQpOworICAgIENvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xlbnVtIGZvcm1hdCk7CisKKyAgICB+Q29sb3JidWZmZXIoKTsKKworICAgIGJvb2wg
aXNDb2xvcmJ1ZmZlcigpOworCisgICAgR0x1aW50IGdldFJlZFNpemUoKTsKKyAgICBHTHVpbnQg
Z2V0R3JlZW5TaXplKCk7CisgICAgR0x1aW50IGdldEJsdWVTaXplKCk7CisgICAgR0x1aW50IGdl
dEFscGhhU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgp
OworCisgIHByb3RlY3RlZDoKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1ZmZlcik7
Cit9OworCitjbGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0
ZW5jaWwpOworICAgIERlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB+
RGVwdGhidWZmZXIoKTsKKworICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOworCisgICAgR0x1aW50
IGdldERlcHRoU2l6ZSgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoYnVm
ZmVyKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKK307CisKK2NsYXNz
IFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBl
eHBsaWNpdCBTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwor
ICAgIFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIH5TdGVuY2ls
YnVmZmVyKCk7CisKKyAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpOworCisgICAgR0x1aW50IGdl
dFN0ZW5jaWxTaXplKCk7CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RlbmNpbGJ1
ZmZlcik7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Cit9OworfQorCisj
ZW5kaWYgICAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwMiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2hh
ZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzICBkZXJpdmVk
IGNsYXNzZXMKKy8vIFZlcnRleFNoYWRlciBhbmQgRnJhZ21lbnRTaGFkZXIuIEltcGxlbWVudHMg
R0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQKKy8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQgc2VjdGlvbiAzLjggcGFnZSA4NC4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKwor
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sK
K3ZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwordm9pZCAqU2hhZGVyOjpt
VmVydGV4Q29tcGlsZXIgPSBOVUxMOworCitTaGFkZXI6OlNoYWRlcihDb250ZXh0ICpjb250ZXh0
LCBHTHVpbnQgaGFuZGxlKSA6IG1IYW5kbGUoaGFuZGxlKSwgbUNvbnRleHQoY29udGV4dCkKK3sK
KyAgICBtU291cmNlID0gTlVMTDsKKyAgICBtSGxzbCA9IE5VTEw7CisgICAgbUluZm9Mb2cgPSBO
VUxMOworCisgICAgLy8gUGVyZm9ybSBhIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRoZSBz
aGFkZXIgY29tcGlsZXIgKG9yIGFmdGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNvbXBp
bGVyKQorICAgIGlmICghbUZyYWdtZW50Q29tcGlsZXIpCisgICAgeworICAgICAgICBpbnQgcmVz
dWx0ID0gU2hJbml0aWFsaXplKCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExh
bmdGcmFnbWVudCwgRVNoU3BlY0dMRVMyKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9
IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3BlY0dMRVMyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1BdHRhY2hDb3VudCA9IDA7CisgICAgbURlbGV0ZVN0YXR1cyA9
IGZhbHNlOworfQorCitTaGFkZXI6On5TaGFkZXIoKQoreworICAgIGRlbGV0ZVtdIG1Tb3VyY2U7
CisgICAgZGVsZXRlW10gbUhsc2w7CisgICAgZGVsZXRlW10gbUluZm9Mb2c7Cit9CisKK0dMdWlu
dCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IYW5kbGU7Cit9CisK
K3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3sKKyAgICBkZWxldGVbXSBtU291cmNlOworICAgIGlu
dCB0b3RhbExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgeworICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSBsZW5ndGhbaV07CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSAoaW50KXN0cmxl
bihzdHJpbmdbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgbVNvdXJjZSA9IG5ldyBjaGFy
W3RvdGFsTGVuZ3RoICsgMV07CisgICAgY2hhciAqY29kZSA9IG1Tb3VyY2U7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBpbnQgc3RyaW5nTGVu
Z3RoOworCisgICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IGxlbmd0aFtpXTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IChpbnQpc3RybGVu
KHN0cmluZ1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJuY3B5KGNvZGUsIHN0cmluZ1tp
XSwgc3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgY29kZSArPSBzdHJpbmdMZW5ndGg7CisgICAgfQor
CisgICAgbVNvdXJjZVt0b3RhbExlbmd0aF0gPSAnXDAnOworfQorCitpbnQgU2hhZGVyOjpnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1JbmZvTG9nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgcmV0dXJuIHN0cmxl
bihtSW5mb0xvZykgKyAxOworICAgIH0KK30KKwordm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit7CisgICAgaW50
IGluZGV4ID0gMDsKKworICAgIGlmIChtSW5mb0xvZykKKyAgICB7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGJ1ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJsZW4obUluZm9Mb2cpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpbmZvTG9nW2luZGV4XSA9IG1JbmZvTG9nW2luZGV4XTsKKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVmU2l6ZSkK
KyAgICB7CisgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBpZiAo
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKworaW50
IFNoYWRlcjo6Z2V0U291cmNlTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1Tb3VyY2UpCisg
ICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICBy
ZXR1cm4gc3RybGVuKG1Tb3VyY2UpICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpnZXRT
b3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKnNvdXJjZSkKK3sK
KyAgICBpbnQgaW5kZXggPSAwOworCisgICAgaWYgKG1Tb3VyY2UpCisgICAgeworICAgICAgICB3
aGlsZSAoaW5kZXggPCBidWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1Tb3VyY2Up
KQorICAgICAgICB7CisgICAgICAgICAgICBzb3VyY2VbaW5kZXhdID0gbVNvdXJjZVtpbmRleF07
CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1ZlNp
emUpCisgICAgeworICAgICAgICBzb3VyY2VbaW5kZXhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBp
ZiAobGVuZ3RoKQorICAgIHsKKyAgICAgICAgKmxlbmd0aCA9IGluZGV4OworICAgIH0KK30KKwor
Ym9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQoreworICAgIHJldHVybiBtSGxzbCAhPSBOVUxMOwor
fQorCitjb25zdCBjaGFyICpTaGFkZXI6OmdldEhMU0woKQoreworICAgIHJldHVybiBtSGxzbDsK
K30KKwordm9pZCBTaGFkZXI6OmF0dGFjaCgpCit7CisgICAgbUF0dGFjaENvdW50Kys7Cit9CisK
K3ZvaWQgU2hhZGVyOjpkZXRhY2goKQoreworICAgIG1BdHRhY2hDb3VudC0tOworCisgICAgaWYg
KG1BdHRhY2hDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCisgICAgeworICAgICAgICBtQ29u
dGV4dC0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOworICAgIH0KK30KKworYm9vbCBTaGFkZXI6Omlz
QXR0YWNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtQXR0YWNoQ291bnQgPiAwOworfQorCiti
b29sIFNoYWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
RGVsZXRlU3RhdHVzOworfQorCit2b2lkIFNoYWRlcjo6ZmxhZ0ZvckRlbGV0aW9uKCkKK3sKKyAg
ICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKK30KKwordm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxl
cigpCit7CisgICAgU2hEZXN0cnVjdChtRnJhZ21lbnRDb21waWxlcik7CisgICAgU2hEZXN0cnVj
dChtVmVydGV4Q29tcGlsZXIpOworCisgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOworICAg
IG1WZXJ0ZXhDb21waWxlciA9IE5VTEw7CisKKyAgICBTaEZpbmFsaXplKCk7Cit9CisKK3ZvaWQg
U2hhZGVyOjpwYXJzZVZhcnlpbmdzKCkKK3sKKyAgICBpZiAobUhsc2wpCisgICAgeworICAgICAg
ICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsK
KworICAgICAgICB3aGlsZSh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHZhcnlp
bmdUeXBlWzI1Nl07CisgICAgICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07CisKKyAgICAg
ICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICVzICVzIiwgdmFyeWlu
Z1R5cGUsIHZhcnlpbmdOYW1lKTsKKworICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7CisgICAgICAg
ICAgICBpbnQgc2l6ZSA9IDE7CisKKyAgICAgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOworICAgICAgICAgICAg
ICAgICphcnJheSA9ICdcMCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhcnlpbmdz
LnB1c2hfYmFjayhWYXJ5aW5nKHBhcnNlVHlwZSh2YXJ5aW5nVHlwZSksIHZhcnlpbmdOYW1lLCBz
aXplLCBhcnJheSAhPSBOVUxMKSk7CisKKyAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0
LCAiOyIpICsgMjsKKyAgICAgICAgfQorCisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ryc3Ry
KG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPT1JEIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNGcm9u
dEZhY2luZyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVMTDsK
KyAgICB9Cit9CisKK3ZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVyKQor
eworICAgIGlmIChpc0NvbXBpbGVkKCkgfHwgIW1Tb3VyY2UpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVFJBQ0UoIlxuJXMiLCBtU291cmNlKTsKKworICAgIGRlbGV0ZVtd
IG1JbmZvTG9nOworICAgIG1JbmZvTG9nID0gTlVMTDsKKworICAgIFRCdWlsdEluUmVzb3VyY2Ug
cmVzb3VyY2VzOworCisgICAgcmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPSBNQVhfVkVSVEVY
X0FUVFJJQlM7CisgICAgcmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0g
TUFYX1ZBUllJTkdfVkVDVE9SUzsKKyAgICByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMgPSBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAgcmVzb3VyY2VzLm1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzsKKyAgICByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUzsKKyAgICByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJz
ID0gTUFYX0RSQVdfQlVGRkVSUzsKKworICAgIGludCByZXN1bHQgPSBTaENvbXBpbGUoY29tcGls
ZXIsICZtU291cmNlLCAxLCBFU2hPcHROb25lLCAmcmVzb3VyY2VzLCBFRGVidWdPcE5vbmUpOwor
ICAgIGNvbnN0IGNoYXIgKm9iaiA9IFNoR2V0T2JqZWN0Q29kZShjb21waWxlcik7CisgICAgY29u
c3QgY2hhciAqaW5mbyA9IFNoR2V0SW5mb0xvZyhjb21waWxlcik7CisKKyAgICBpZiAocmVzdWx0
KQorICAgIHsKKyAgICAgICAgbUhsc2wgPSBuZXcgY2hhcltzdHJsZW4ob2JqKSArIDFdOworICAg
ICAgICBzdHJjcHkobUhsc2wsIG9iaik7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSGxzbCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbc3Ry
bGVuKGluZm8pICsgMV07CisgICAgICAgIHN0cmNweShtSW5mb0xvZywgaW5mbyk7CisKKyAgICAg
ICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgfQorfQorCitHTGVudW0gU2hhZGVyOjpw
YXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gImZs
b2F0IikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICB9CisgICAgZWxzZSBp
ZiAodHlwZSA9PSAiZmxvYXQyIikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMy
OworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUX1ZFQzM7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0
NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKKyAgICB9CisgICAgZWxz
ZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X01BVDI7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDR4NCIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICB9
CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIEdMX05PTkU7Cit9CisKKy8v
IHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4g
eQorYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZh
cnlpbmcgJnkpCit7CisgICAgaWYoeC50eXBlID09IHkudHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB4LnNpemUgPiB5LnNpemU7CisgICAgfQorCisgICAgc3dpdGNoICh4LnR5cGUpCisgICAg
eworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOworICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICAgIHN3
aXRjaCh5LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsK
KyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOworICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0
cnVlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0
dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOworICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzoKKyAgICAgICAgc3dpdGNoKHkudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjog
cmV0dXJuIGZhbHNlOworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNl
OworICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOworICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAgIHN3aXRjaCh5
LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBm
YWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVl
OworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZXJ0ZXhTaGFkZXI6OlZlcnRl
eFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihjb250ZXh0
LCBoYW5kbGUpCit7Cit9CisKK1ZlcnRleFNoYWRlcjo6flZlcnRleFNoYWRlcigpCit7Cit9CisK
K0dMZW51bSBWZXJ0ZXhTaGFkZXI6OmdldFR5cGUoKQoreworICAgIHJldHVybiBHTF9WRVJURVhf
U0hBREVSOworfQorCit2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCit7CisgICAgY29tcGls
ZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOworICAgIHBhcnNlQXR0cmlidXRlcygpOworICAgIHBh
cnNlVmFyeWluZ3MoKTsKK30KKworaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChj
b25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoIWF0dHJpYnV0ZU5h
bWUuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICAg
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRyaWJ1dGVOYW1l
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpY0luZGV4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKwordm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCit7CisgICAgaWYg
KG1IbHNsKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2ws
ICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKKworICAgICAgICB3aGlsZSh0cnVlKQorICAgICAgICB7
CisgICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKKyAgICAgICAgICAgIGNoYXIg
YXR0cmlidXRlTmFtZVsyNTZdOworCisgICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihp
bnB1dCwgInN0YXRpYyAlcyBfJXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKKwor
ICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVz
aF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUp
KTsKKworICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOworICAgICAg
ICB9CisgICAgfQorfQorCitGcmFnbWVudFNoYWRlcjo6RnJhZ21lbnRTaGFkZXIoQ29udGV4dCAq
Y29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIoY29udGV4dCwgaGFuZGxlKQoreworfQor
CitGcmFnbWVudFNoYWRlcjo6fkZyYWdtZW50U2hhZGVyKCkKK3sKK30KKworR0xlbnVtIEZyYWdt
ZW50U2hhZGVyOjpnZXRUeXBlKCkKK3sKKyAgICByZXR1cm4gR0xfRlJBR01FTlRfU0hBREVSOwor
fQorCit2b2lkIEZyYWdtZW50U2hhZGVyOjpjb21waWxlKCkKK3sKKyAgICBjb21waWxlVG9ITFNM
KG1GcmFnbWVudENvbXBpbGVyKTsKKyAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgdmFyeWluZ3Mu
c29ydChjb21wYXJlVmFyeWluZyk7Cit9Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1No
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJldmlz
aW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2hhZGVyLmg6IERlZmluZXMg
dGhlIGFic3RyYWN0IGdsOjpTaGFkZXIgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCisv
LyBjbGFzc2VzIFZlcnRleFNoYWRlciBhbmQgRnJhZ21lbnRTaGFkZXIuIEltcGxlbWVudHMgR0wg
c2hhZGVyIG9iamVjdHMgYW5kCisvLyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQgc2VjdGlvbgorLy8gMy44IHBhZ2UgODQu
CisKKyNpZm5kZWYgTElCR0xFU1YyX1NIQURFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfU0hBREVS
X0hfCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1
ZGUgPGQzZHg5Lmg+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBWYXJ5
aW5nCit7CisgICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUs
IGludCBzaXplLCBib29sIGFycmF5KQorICAgICAgICA6IHR5cGUodHlwZSksIG5hbWUobmFtZSks
IHNpemUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwgY29sKC0xKQorICAgIHsKKyAgICB9
CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIGludCBzaXpl
OyAgIC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKKyAgICBib29sIGFycmF5OworCisgICAg
aW50IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3RlciwgYXNzaWduZWQgZHVyaW5nIGxp
bmsKKyAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50LCBhc3NpZ25lZCBk
dXJpbmcgbGluaworfTsKKwordHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7
CisKK2NsYXNzIFNoYWRlcgoreworICAgIGZyaWVuZCBQcm9ncmFtOworCisgIHB1YmxpYzoKKyAg
ICBTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisKKyAgICB2aXJ0dWFs
IH5TaGFkZXIoKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSA9IDA7CisgICAgR0x1
aW50IGdldEhhbmRsZSgpIGNvbnN0OworCisgICAgdm9pZCBkZWxldGVTb3VyY2UoKTsKKyAgICB2
b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBH
TGludCAqbGVuZ3RoKTsKKyAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OworICAgIHZv
aWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZyk7CisgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgZ2V0U291
cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpzb3VyY2UpOworCisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7CisgICAgYm9vbCBpc0NvbXBpbGVkKCk7Cisg
ICAgY29uc3QgY2hhciAqZ2V0SExTTCgpOworCisgICAgdm9pZCBhdHRhY2goKTsKKyAgICB2b2lk
IGRldGFjaCgpOworICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNvbnN0OworICAgIGJvb2wgaXNGbGFn
Z2VkRm9yRGVsZXRpb24oKSBjb25zdDsKKyAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOworCisg
ICAgc3RhdGljIHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXIpOworCisgICAgdm9pZCBwYXJzZVZhcnlpbmdz
KCk7CisKKyAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOworCisgICAgc3Rh
dGljIEdMZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOworICAgIHN0YXRp
YyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkp
OworCisgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CisgICAgaW50IG1BdHRhY2hDb3VudDsgICAg
IC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8K
KyAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBz
aGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCisKKyAgICBjaGFyICpt
U291cmNlOworICAgIGNoYXIgKm1IbHNsOworICAgIGNoYXIgKm1JbmZvTG9nOworCisgICAgVmFy
eWluZ0xpc3QgdmFyeWluZ3M7CisKKyAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOworICAgIGJvb2wg
bVVzZXNGcm9udEZhY2luZzsKKworICAgIENvbnRleHQgKm1Db250ZXh0OworCisgICAgc3RhdGlj
IHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOworICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGls
ZXI7Cit9OworCitzdHJ1Y3QgQXR0cmlidXRlCit7CisgICAgQXR0cmlidXRlKCkgOiB0eXBlKEdM
X05PTkUpLCBuYW1lKCIiKQorICAgIHsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5
cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKKyAg
ICB7CisgICAgfQorCisgICAgR0xlbnVtIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKK307
CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKKworY2xh
c3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgoreworICAgIGZyaWVuZCBQcm9ncmFtOwor
CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhh
bmRsZSk7CisKKyAgICB+VmVydGV4U2hhZGVyKCk7CisKKyAgICBHTGVudW0gZ2V0VHlwZSgpOwor
ICAgIHZvaWQgY29tcGlsZSgpOworICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6
c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOworCisgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZXMoKTsK
KworICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworfTsKKworY2xhc3MgRnJhZ21lbnRT
aGFkZXIgOiBwdWJsaWMgU2hhZGVyCit7CisgIHB1YmxpYzoKKyAgICBGcmFnbWVudFNoYWRlcihD
b250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKworICAgIH5GcmFnbWVudFNoYWRlcigp
OworCisgICAgR0xlbnVtIGdldFR5cGUoKTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7Cit9Owor
fQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfU0hBREVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFRleHR1cmUuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRl
cml2ZWQgY2xhc3NlcworLy8gVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50
cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kIHJlbGF0ZWQKKy8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0JsaXQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1RleHR1cmU6OkltYWdl
OjpJbWFnZSgpCisgIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHkoZmFsc2UpLCBzdXJmYWNl
KE5VTEwpCit7Cit9CisKK1RleHR1cmU6OkltYWdlOjp+SW1hZ2UoKQoreworICBpZiAoc3VyZmFj
ZSkgc3VyZmFjZS0+UmVsZWFzZSgpOworfQorCitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHQgKmNv
bnRleHQpIDogbUNvbnRleHQoY29udGV4dCkKK3sKKyAgICBtTWluRmlsdGVyID0gR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSOworICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7CisgICAgbVdyYXBT
ID0gR0xfUkVQRUFUOworICAgIG1XcmFwVCA9IEdMX1JFUEVBVDsKKworICAgIG1EaXJ0eU1ldGFE
YXRhID0gdHJ1ZTsKKyAgICBtRGlydHkgPSB0cnVlOworICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxz
ZTsKKyAgICBtQmFzZVRleHR1cmUgPSBOVUxMOworfQorCitUZXh0dXJlOjp+VGV4dHVyZSgpCit7
Cit9CisKK0JsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQoreworICAgIHJldHVybiBtQ29udGV4
dC0+Z2V0QmxpdHRlcigpOworfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0
ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKK2Jvb2wgVGV4dHVyZTo6c2V0
TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit7CisgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgewor
ICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1N
aW5GaWx0ZXIgIT0gZmlsdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1NaW5G
aWx0ZXIgPSBmaWx0ZXI7CisgICAgICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgb24g
c3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKK2Jv
b2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit7CisgICAgc3dpdGNoIChm
aWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5F
QVI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOworICAgICAg
ICAgICAgICAgIG1EaXJ0eSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQorYm9vbCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVu
dW0gd3JhcCkKK3sKKyAgICBzd2l0Y2ggKHdyYXApCisgICAgeworICAgICAgY2FzZSBHTF9SRVBF
QVQ6CisgICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6CisgICAgICBjYXNlIEdMX01JUlJPUkVE
X1JFUEVBVDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1XcmFwUyAhPSB3cmFwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1XcmFwUyA9IHdyYXA7CisgICAgICAgICAgICAg
ICAgbURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpCitib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3cmFw
KQoreworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JFUEVBVDoKKyAg
ICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKKyAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFU
OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKKyAgICAgICAgICAgICAgICBtRGly
dHkgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K0dMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtTWlu
RmlsdGVyOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0TWFnRmlsdGVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1hZ0ZpbHRlcjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVdyYXBTOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFQo
KSBjb25zdAoreworICAgIHJldHVybiBtV3JhcFQ7Cit9CisKK0dMdWludCBUZXh0dXJlOjpnZXRX
aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1XaWR0aDsKK30KKworR0x1aW50IFRleHR1cmU6
OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1IZWlnaHQ7Cit9CisKKy8vIFNlbGVj
dHMgYW4gaW50ZXJuYWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1hZ2UKK0Qz
REZPUk1BVCBUZXh0dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1
cm4gRDNERk1UX0E4UjhHOEI4OworfQorCitpbnQgVGV4dHVyZTo6aW1hZ2VQaXRjaChjb25zdCBJ
bWFnZSAmaW1nKSBjb25zdAoreworICAgIHJldHVybiBpbWcud2lkdGggKiA0OworfQorCisvLyBT
dG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdp
ZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKKy8v
IGludG8gdGhlIEJHUkE4IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRj
aCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KK3ZvaWQgVGV4dHVyZTo6bG9hZEltYWdlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7CisK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlMTYgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc291
cmNlKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAq
IDQ7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHI7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGc7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGE7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbeF07
CisgICAgICAgICAgICAgICAgciA9IDA7CisgICAgICAgICAgICAgICAgZyA9IDA7CisgICAgICAg
ICAgICAgICAgYiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4XTsKKyAgICAg
ICAgICAgICAgICBnID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeF07
CisgICAgICAgICAgICAgICAgYSA9IDB4RkY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAgICAgciA9
IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICAgICAgZyA9IHNvdXJjZVsyKngrMF07CisgICAg
ICAgICAgICAgICAgYiA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICAgICAgYSA9IHNvdXJj
ZVsyKngrMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAg
ICAgICAgciA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAgICAgICAgICAgICAgICBnID0gc291
cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDMgKyAy
XTsKKyAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCByZ2JhID0gc291cmNlMTZbeF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAw
eEZGOworICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykg
fCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgo
cmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4
MDApID4+IDEzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAg
ICAgICAgICAgIHIgPSBzb3VyY2VbeCAqIDQgKyAwXTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IHNvdXJjZVt4ICogNCArIDFdOworICAgICAgICAgICAgICAgICAgICBiID0gc291cmNlW3ggKiA0
ICsgMl07CisgICAgICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbeCAqIDQgKyAzXTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAw
RikgPj4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMEYwKSA8
PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBn
ID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAm
IDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgYSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgYiA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJn
YmEgJiAweDA3QzApID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAm
IDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IGI7CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSBnOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gcjsKKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFj
ZSA9IE5VTEw7CisKKyAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCkKKyAgICB7Cisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZU9mZnNjcmVlblBsYWlu
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBzZWxlY3RGb3JtYXQoZm9ybWF0KSwgRDNEUE9PTF9TWVNU
RU1NRU0sICZuZXdTdXJmYWNlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlt
Zy0+c3VyZmFjZSkgaW1nLT5zdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgaW1nLT5zdXJmYWNlID0g
bmV3U3VyZmFjZTsKKworICAgIGltZy0+d2lkdGggPSB3aWR0aDsKKyAgICBpbWctPmhlaWdodCA9
IGhlaWdodDsKKyAgICBpbWctPmZvcm1hdCA9IGZvcm1hdDsKKworICAgIGlmIChwaXhlbHMgIT0g
TlVMTCAmJiBuZXdTdXJmYWNlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0RMT0NLRURfUkVD
VCBsb2NrZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbmV3U3VyZmFjZS0+TG9ja1JlY3Qo
JmxvY2tlZCwgTlVMTCwgMCk7CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAgICAg
ICAgbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICB9CisKKyAgICAgICAgaW1nLT5k
aXJ0eSA9IHRydWU7CisgICAgfQorCisgICAgbURpcnR5TWV0YURhdGEgPSB0cnVlOworfQorCit2
b2lkIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit7Cisg
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsgeW9mZnNldCA+
IGltZy0+aGVpZ2h0KSByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisKKyAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWQ7CisgICAgSFJFU1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxv
Y2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIGxvYWRJbWFn
ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOworICAgICAg
ICBpbWctPnN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICB9CisKKyAgICBpbWctPmRpcnR5ID0g
dHJ1ZTsKK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlOjpnZXRUZXh0dXJlKCkK
K3sKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIGlmIChtRGlydHlNZXRhRGF0YSkKKyAgICB7CisgICAgICAgIG1CYXNlVGV4
dHVyZSA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgbUlzUmVuZGVyYWJsZSA9IGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChtRGlydHlNZXRhRGF0YSB8fCBkaXJ0eUltYWdlRGF0YSgpKQorICAg
IHsKKyAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworICAgIH0KKworICAgIG1EaXJ0eU1ldGFEYXRh
ID0gZmFsc2U7CisgICAgQVNTRVJUKCFkaXJ0eUltYWdlRGF0YSgpKTsKKworICAgIHJldHVybiBt
QmFzZVRleHR1cmU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNEaXJ0eSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtRGlydHkgfHwgbURpcnR5TWV0YURhdGEgfHwgZGlydHlJbWFnZURhdGEoKSk7Cit9
CisKKy8vIFJldHVybnMgdGhlIHRvcC1sZXZlbCB0ZXh0dXJlIHN1cmZhY2UgYXMgYSByZW5kZXIg
dGFyZ2V0Cit2b2lkIFRleHR1cmU6Om5lZWRSZW5kZXJUYXJnZXQoKQoreworICAgIGlmICghbUlz
UmVuZGVyYWJsZSkKKyAgICB7CisgICAgICAgIG1CYXNlVGV4dHVyZSA9IGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOworICAgICAgICBtSXNSZW5kZXJhYmxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoZGlydHlJbWFnZURhdGEoKSkKKyAgICB7CisgICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAg
ICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOworfQorCit2b2lkIFRleHR1cmU6OmRy
b3BUZXh0dXJlKCkKK3sKKyAgICBpZiAobUJhc2VUZXh0dXJlKQorICAgIHsKKyAgICAgICAgbUJh
c2VUZXh0dXJlID0gTlVMTDsKKyAgICB9CisKKyAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7Cit9
CisKK3ZvaWQgVGV4dHVyZTo6cHVzaFRleHR1cmUoSURpcmVjdDNEQmFzZVRleHR1cmU5ICpuZXdU
ZXh0dXJlLCBib29sIHJlbmRlcmFibGUpCit7CisgICAgbUJhc2VUZXh0dXJlID0gbmV3VGV4dHVy
ZTsKKyAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOworICAgIG1Jc1JlbmRlcmFibGUgPSByZW5k
ZXJhYmxlOworICAgIG1EaXJ0eSA9IHRydWU7Cit9CisKKworR0xpbnQgVGV4dHVyZTo6Y3JlYXRp
b25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IG1heGxldmVsKSBj
b25zdAoreworICAgIGlmIChpc1BvdzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1heGxldmVsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBw
ZXJtaXQgTlBPVCBtaXBtYXBzLgorICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKK0dMaW50
IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSwgR0xpbnQgbWF4bGV2ZWwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNyZWF0aW9uTGV2ZWxzKHNpemUsIHNpemUsIG1heGxldmVsKTsK
K30KKworaW50IFRleHR1cmU6OmxldmVsQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtQmFz
ZVRleHR1cmUgPyBtQmFzZVRleHR1cmUtPkdldExldmVsQ291bnQoKSA6IDA7Cit9CisKK1RleHR1
cmUyRDo6VGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Cit9CisK
K1RleHR1cmUyRDo6flRleHR1cmUyRCgpCit7CisgICAgZGVsZXRlIG1Db2xvcmJ1ZmZlclByb3h5
OworCisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgIH0KK30KKworR0xlbnVtIFRleHR1cmUy
RDo6Z2V0VGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKK30KKwor
Ly8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sgdGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRpbCBk
cmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21wbGV0ZSB0ZXh0dXJlCisvLyBmb3IgcmVuZGVy
LXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleEltYWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yga2Vl
cGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBsZXZlbHMuCisvLyBDYWxsIHRoaXMgd2hlbiBh
IHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1cmUgbXVzdCBiZSBkZWZpbmVkIHdpdGggYSBz
cGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWlnaHQuCisvLworLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBleGlzdGluZyB0ZXh0dXJlIHdhcyB1bnN1aXRhYmxlIGhhZCB0byBiZSBkZXN0cm95ZWQu
IElmIHNvLCBpdCB3aWxsIGFsc28gc2V0CisvLyBhIG5ldyBoZWlnaHQgYW5kIHdpZHRoIGZvciB0
aGUgdGV4dHVyZSBieSB3b3JraW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiB3aWR0aCBhbmQg
aGVpZ2h0LgorYm9vbCBUZXh0dXJlMkQ6OnJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBib29sIHdpZHRoT2theSA9IChtV2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOworICAgIGJvb2wg
aGVpZ2h0T2theSA9IChtSGVpZ2h0ID4+IGxldmVsID09IGhlaWdodCk7CisKKyAgICBib29sIHNp
emVPa2F5ID0gKCh3aWR0aE9rYXkgJiYgaGVpZ2h0T2theSkKKyAgICAgICAgICAgICAgICAgICAg
IHx8ICh3aWR0aE9rYXkgJiYgbUhlaWdodCA+PiBsZXZlbCA9PSAwICYmIGhlaWdodCA9PSAxKQor
ICAgICAgICAgICAgICAgICAgICAgfHwgKGhlaWdodE9rYXkgJiYgbVdpZHRoID4+IGxldmVsID09
IDAgJiYgd2lkdGggPT0gMSkpOworCisgICAgYm9vbCB0ZXh0dXJlT2theSA9IChzaXplT2theSAm
JiBpbnRlcm5hbEZvcm1hdCA9PSBtSW1hZ2VBcnJheVswXS5mb3JtYXQpOworCisgICAgaWYgKCF0
ZXh0dXJlT2theSkKKyAgICB7CisgICAgICAgIFRSQUNFKCJSZWRlZmluaW5nIDJEIHRleHR1cmUg
KCVkLCAweCUwNFgsICVkLCAlZCA9PiAweCUwNFgsICVkLCAlZCkuIiwgbGV2ZWwsCisgICAgICAg
ICAgICAgIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LAorICAgICAgICAg
ICAgICBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgLy8gUHVyZ2Ug
YWxsIHRoZSBsZXZlbHMgYW5kIHRoZSB0ZXh0dXJlLgorCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbaV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtSW1h
Z2VBcnJheVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4
dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAg
ICAgZHJvcFRleHR1cmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1XaWR0aCA9IHdpZHRoIDw8
IGxldmVsOworICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0IDw8IGxldmVsOworICAgICAgICBtSW1h
Z2VBcnJheVswXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAgICB9CisKKyAgICByZXR1cm4g
IXRleHR1cmVPa2F5OworfQorCit2b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZl
bF0pOworfQorCit2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5zdXJmYWNlICE9IE5VTEwpOworCisgICAg
aWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RMZXZlbCA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUt
PkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmRlc3RMZXZlbCk7CisKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOworCisg
ICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5b2Zmc2V0OworICAgICAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKKworICAgICAgICAgICAgUE9JTlQg
ZGVzdFBvaW50OworICAgICAgICAgICAgZGVzdFBvaW50LnggPSB4b2Zmc2V0OworICAgICAgICAg
ICAgZGVzdFBvaW50LnkgPSB5b2Zmc2V0OworCisgICAgICAgICAgICByZXN1bHQgPSBnZXREZXZp
Y2UoKS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsICZzb3VyY2VSZWN0LCBkZXN0TGV2ZWws
ICZkZXN0UG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgIGltZy0+ZGly
dHkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OnN1Yklt
YWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIFRleHR1cmU6OnN1Yklt
YWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIGNvbW1pdFJlY3Qo
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFRleHR1
cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIg
KnNvdXJjZSkKK3sKKyAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1h
dCwgd2lkdGgsIGhlaWdodCkpCisgICAgeworICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KTsKKyAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgIH0KKworICAgIGlm
ICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAg
IHsKKyAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
OworICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHk7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKwor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgSFJFU1VMVCBociA9IG1U
ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKworICAgICAgICBnZXRCbGl0
dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVj
dCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7
CisgICAgfQorCisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLndpZHRoID0gd2lkdGg7CisgICAgbUlt
YWdlQXJyYXlbbGV2ZWxdLmhlaWdodCA9IGhlaWdodDsKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0u
Zm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJj
ZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLndpZHRo
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uaGVpZ2h0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAgIGlm
IChyZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtSW1hZ2VBcnJheVsw
XS53aWR0aCwgbUltYWdlQXJyYXlbMF0uaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKyAgICB9
CisKKyAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBSRUNUIHNv
dXJjZVJlY3Q7CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSB4ICsgd2lkdGg7CisgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworCisgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0OworICAgICAgICBIUkVTVUxUIGhyID0gbVRleHR1cmUtPkdldFN1cmZhY2VM
ZXZlbChsZXZlbCwgJmRlc3QpOworCisgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVy
dChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5m
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7
CisgICAgfQorfQorCisvLyBUZXN0cyBmb3IgR0wgdGV4dHVyZSBvYmplY3QgY29tcGxldGVuZXNz
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KK2Jvb2wgVGV4dHVy
ZTJEOjppc0NvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJy
YXlbMF0ud2lkdGg7CisgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5oZWlnaHQ7
CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG1pcG1hcHBpbmcgPSBmYWxzZTsKKworICAg
IHN3aXRjaCAobU1pbkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAg
ICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGluZyA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2Ug
R0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9M
SU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgorICAgICAgICBtaXBt
YXBwaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CisgICAgfQorCisgICAgaWYgKChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYg
IWlzUG93Mih3aWR0aCkpCisgICAgICAgIHx8IChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VE
R0UgJiYgIWlzUG93MihoZWlnaHQpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAobWlwbWFwcGluZykKKyAgICB7CisgICAgICAgIGlmICghaXNQb3cyKHdp
ZHRoKSB8fCAhaXNQb3cyKGhlaWdodCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0aCwg
aGVpZ2h0KSk7CisKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZl
bCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmZvcm1h
dCAhPSBtSW1hZ2VBcnJheVswXS5mb3JtYXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUltYWdl
QXJyYXlbbGV2ZWxdLndpZHRoICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uaGVpZ2h0ICE9IHN0ZDo6bWF4KDEs
IGhlaWdodCA+PiBsZXZlbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJv
bSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCitJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgSURpcmVj
dDNEVGV4dHVyZTkgKnRleHR1cmU7CisKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFy
cmF5WzBdLmZvcm1hdCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4
dHVyZShtV2lkdGgsIG1IZWlnaHQsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgbUhlaWdodCwgMCks
IDAsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwp
OworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSkgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICBt
VGV4dHVyZSA9IHRleHR1cmU7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVy
ZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKworICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS5kaXJ0eSkKKyAgICAgICAgeworICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKmxldmVsU3VyZmFjZSA9IE5VTEw7CisgICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZsZXZlbFN1cmZhY2Up
OworCisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKG1JbWFnZUFycmF5W2xldmVsXS5zdXJmYWNl
LCBOVUxMLCBsZXZlbFN1cmZhY2UsIE5VTEwpOworICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBsZXZlbFN1cmZhY2UtPlJlbGVhc2Uo
KTsKKworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5kaXJ0eSA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKlRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBJRGlyZWN0M0RU
ZXh0dXJlOSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdo
dCAhPSAwKQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxh
eSgpOworICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAg
ICAgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXS5mb3Jt
YXQpOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1X
aWR0aCwgbUhlaWdodCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCBtSGVpZ2h0LCAwKSwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwp
OworCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
KElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGxldmVscyA9IGxl
dmVsQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGks
ICZzb3VyY2UpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxM
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJmYWNlTGV2
ZWwoaSwgJmRlc3QpOworCisgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwg
TlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwor
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVh
c2UoKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgZGVzdC0+
UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1U
ZXh0dXJlICE9IE5VTEwpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAg
IH0KKworICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisK
K2Jvb2wgVGV4dHVyZTJEOjpkaXJ0eUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgaW50IHEgPSBs
b2cyKHN0ZDo6bWF4KG1XaWR0aCwgbUhlaWdodCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PD0gcTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLmRpcnR5KSByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZTJE
OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdLndp
ZHRoKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIC8vIFB1cmdl
IGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhl
IGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6
Om1heChtV2lkdGgsIG1IZWlnaHQpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCisgICAgeworICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uc3VyZmFjZSAhPSBO
VUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAg
ICAgfQorCisgICAgICAgIG1JbWFnZUFycmF5W2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAg
bUltYWdlQXJyYXlbaV0uZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0uZm9ybWF0OworICAgICAgICBt
SW1hZ2VBcnJheVtpXS53aWR0aCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLndpZHRoID4+IGks
IDEpOworICAgICAgICBtSW1hZ2VBcnJheVtpXS5oZWlnaHQgPSBzdGQ6Om1heChtSW1hZ2VBcnJh
eVswXS5oZWlnaHQgPj4gaSwgMSk7CisgICAgfQorCisgICAgbmVlZFJlbmRlclRhcmdldCgpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIHsKKyAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gTlVMTDsKKyAgICAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmxvd2VyID0gTlVMTDsKKworICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KGktMSwgJnVwcGVyKTsKKyAgICAgICAgbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAmbG93
ZXIpOworCisgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2Uo
KTsKKyAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgfQor
fQorCitDb2xvcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KQoreworICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7Cisg
ICAgfQorCisgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCisgICAgeworICAgICAg
ICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0
YXJnZXQpOworICAgIH0KKworICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKK30KKworSURp
cmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
Cit7CisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKworICAgIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBOVUxM
OworICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnJlbmRlclRhcmdldCk7CisKKyAg
ICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVN
YXAoQ29udGV4dCAqY29udGV4dCkgOiBUZXh0dXJlKGNvbnRleHQpCit7CisgICAgbVRleHR1cmUg
PSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAg
ICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZUN1YmVNYXA6On5U
ZXh0dXJlQ3ViZU1hcCgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAg
eworICAgICAgICBkZWxldGUgbUZhY2VQcm94aWVzW2ldOworICAgIH0KKworICAgIGlmIChtVGV4
dHVyZSkKKyAgICB7CisgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIG1UZXh0
dXJlID0gTlVMTDsKKyAgICB9Cit9CisKK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKK30KKwordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7Cisg
ICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1h
Z2UoMSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0
SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoMiwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCit7CisgICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsK
K30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCit7CisgICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKK30KKwordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQoreworICAgIGludCBmYWNlID0gZmFjZUluZGV4KGZhY2VUYXJnZXQpOworCisgICAg
QVNTRVJUKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zdXJmYWNlICE9IE5VTEwpOworCisgICAg
aWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RMZXZlbCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAgICAgICAg
QVNTRVJUKGRlc3RMZXZlbCAhPSBOVUxMKTsKKworICAgICAgICBpZiAoZGVzdExldmVsICE9IE5V
TEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdOworCisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBz
b3VyY2VSZWN0LmxlZnQgPSB4b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5
b2Zmc2V0OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKKworICAg
ICAgICAgICAgUE9JTlQgZGVzdFBvaW50OworICAgICAgICAgICAgZGVzdFBvaW50LnggPSB4b2Zm
c2V0OworICAgICAgICAgICAgZGVzdFBvaW50LnkgPSB5b2Zmc2V0OworCisgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKGltZy0+c3VyZmFjZSwg
JnNvdXJjZVJlY3QsIGRlc3RMZXZlbCwgJmRlc3RQb2ludCk7CisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsK
KworICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBjb21taXRSZWN0
KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworLy8g
VGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCitib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXBs
ZXRlKCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLndpZHRoOwor
CisgICAgaWYgKHNpemUgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIG1pcG1hcHBpbmc7CisKKyAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCisgICAg
eworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAg
IG1pcG1hcHBpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoK
KyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgorICAgICAgY2FzZSBHTF9MSU5F
QVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBmb3IgKGlu
dCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1hZ2VB
cnJheVtmYWNlXVswXS53aWR0aCAhPSBzaXplIHx8IG1JbWFnZUFycmF5W2ZhY2VdWzBdLmhlaWdo
dCAhPSBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAobWlwbWFwcGluZykKKyAgICB7CisgICAgICAgIGlmICghaXNQ
b3cyKHNpemUpICYmIChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQo
KSAhPSBHTF9DTEFNUF9UT19FREdFKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHEgPSBsb2cyKHNpemUpOworCisgICAgICAg
IGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5mb3JtYXQg
IT0gbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ud2lkdGggIT0gc3RkOjptYXgoMSwg
c2l6ZSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQVNTRVJU
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5oZWlnaHQgPT0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLndpZHRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCisvLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNl
IGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZQorSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgpCit7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgRDNERk9STUFU
IGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpOworCisgICAg
SURpcmVjdDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJlOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCAw
KSwgMCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVM
TCk7CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlKSBtVGV4dHVyZS0+UmVsZWFzZSgpOworCisg
ICAgbVRleHR1cmUgPSB0ZXh0dXJlOworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSgpCit7CisgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisKKyAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKKyAgICB7CisgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAg
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwor
CisgICAgICAgICAgICBpZiAoaW1nLT5kaXJ0eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbGV2ZWxTdXJmYWNlID0gZ2V0Q3ViZU1hcFN1cmZhY2Uo
ZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZXZlbFN1cmZhY2UgIT0gTlVM
TCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWxTdXJmYWNlICE9IE5VTEwpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsIE5VTEwsIGxldmVsU3VyZmFjZSwgTlVMTCk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgbGV2ZWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaW1nLT5kaXJ0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3Vi
ZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBJRGlyZWN0M0RDdWJlVGV4dHVy
ZTkgKnRleHR1cmUgPSBOVUxMOworCisgICAgaWYgKG1XaWR0aCAhPSAwKQorICAgIHsKKyAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworICAgICAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICAgICAgRDNERk9STUFUIGZvcm1h
dCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpOworCisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0aW9u
TGV2ZWxzKG1XaWR0aCwgMCksIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZm9ybWF0LCBEM0RQT09M
X0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKKworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGlu
dCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENV
QkVNQVBfRkFDRVM+KGYpLCBpLCAmc291cmNlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5S
ZWxlYXNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0Owor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShz
dGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmKSwgaSwgJmRlc3QpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+
UmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHNvdXJjZSwgTlVM
TCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4
dHVyZTkqKU5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1UZXh0dXJlICE9IE5V
TEwpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIG1U
ZXh0dXJlID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoKTsKKworICAg
IFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0pOworfQorCit1bnNpZ25l
ZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkKK3sKKyAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gMSk7CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOworICAg
IE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsKKyAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7
CisgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOworCisgICAgcmV0dXJuIGZhY2UgLSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7Cit9CisKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmRp
cnR5SW1hZ2VEYXRhKCkgY29uc3QKK3sKKyAgICBpbnQgcSA9IGxvZzIobVdpZHRoKTsKKworICAg
IGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gcTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlb
Zl1baV0uZGlydHkpIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLyBXaGlsZSBPcGVuR0wgZG9lc24ndCBjaGVjayB0ZXh0dXJlIGNvbnNp
c3RlbmN5IHVudGlsIGRyYXctdGltZSwgRDNEOSByZXF1aXJlcyBhIGNvbXBsZXRlIHRleHR1cmUK
Ky8vIGZvciByZW5kZXItdG8tdGV4dHVyZSAoc3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBXZSBoYXZl
IG5vIHdheSBvZiBrZWVwaW5nIGluZGl2aWR1YWwgaW5jb25zaXN0ZW50IGxldmVscyAmIGZhY2Vz
LgorLy8gQ2FsbCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFyIGxldmVsIG9mIHRoZSB0ZXh0dXJlIG11
c3QgYmUgZGVmaW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9ybWF0LCB3aWR0aCBhbmQgaGVpZ2h0Lgor
Ly8KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVyZSB3YXMgdW5zdWl0YWJs
ZSBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQgd2lsbCBhbHNvIHNldAorLy8gYSBuZXcg
c2l6ZSBmb3IgdGhlIHRleHR1cmUgYnkgd29ya2luZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2ZW4g
c2l6ZS4KK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKQoreworICAgIC8vIEFyZSB0aGVz
ZSBzZXR0aW5ncyBjb21wYXRpYmxlIHdpdGggbGV2ZWwgMD8KKyAgICBib29sIHNpemVPa2F5ID0g
KG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID4+IGxldmVsID09IHdpZHRoKTsKKworICAgIGJvb2wg
dGV4dHVyZU9rYXkgPSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxGb3JtYXQgPT0gbUltYWdlQXJyYXlb
MF1bMF0uZm9ybWF0KTsKKworICAgIGlmICghdGV4dHVyZU9rYXkpCisgICAgeworICAgICAgICBU
UkFDRSgiUmVkZWZpbmluZyBjdWJlIHRleHR1cmUgKCVkLCAweCUwNFgsICVkID0+IDB4JTA0WCwg
JWQpLiIsIGxldmVsLAorICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIG1J
bWFnZUFycmF5WzBdWzBdLndpZHRoLAorICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgpOworCisgICAgICAgIC8vIFB1cmdlIGFsbCB0aGUgbGV2ZWxzIGFuZCB0aGUgdGV4dHVyZS4K
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZhY2UgIT0g
TlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZdW2ldLmRpcnR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlb
Zl1baV0uc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtmXVtpXS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1UZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgICAgIGRyb3BUZXh0dXJlKCk7CisgICAgICAgIH0KKworICAgICAgICBt
V2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUltYWdlQXJyYXlbMF1bMF0ud2lkdGgg
PSB3aWR0aCA8PCBsZXZlbDsKKyAgICAgICAgbUhlaWdodCA9IHdpZHRoIDw8IGxldmVsOworICAg
ICAgICBtSW1hZ2VBcnJheVswXVswXS5oZWlnaHQgPSB3aWR0aCA8PCBsZXZlbDsKKworICAgICAg
ICBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAgICB9CisKKyAg
ICByZXR1cm4gIXRleHR1cmVPa2F5OworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1h
Z2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIg
KnNvdXJjZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KGZhY2Up
OworCisgICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
KSkKKyAgICB7CisgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICBwdXNo
VGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgfQorCisgICAgQVNTRVJUKHdpZHRoID09IGhl
aWdodCk7CisKKyAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAg
IHsKKyAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4
OworICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOworICAgICAgICBzb3VyY2VS
ZWN0LnRvcCA9IHk7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKwor
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2Us
IGxldmVsKTsKKworICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5n
ZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3Qp
OworICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgfQorCisgICAgbUltYWdlQXJyYXlbZmFj
ZWluZGV4XVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKKyAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhd
W2xldmVsXS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZl
bF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQgaW50IGZhY2VJZGVudGlmaWVy
LCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisgICAgdW5zaWduZWQgaW50IGZhY2VJbmRleDsKKwor
ICAgIGlmIChmYWNlSWRlbnRpZmllciA8IDYpCisgICAgeworICAgICAgICBmYWNlSW5kZXggPSBm
YWNlSWRlbnRpZmllcjsKKyAgICB9CisgICAgZWxzZSBpZiAoZmFjZUlkZW50aWZpZXIgPj0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIGZhY2VJZGVudGlmaWVyIDw9IEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWikKKyAgICB7CisgICAgICAgIGZhY2VJbmRleCA9IGZhY2VJ
ZGVudGlmaWVyIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBmYWNlSW5kZXggPSAw
OworICAgIH0KKworICAgIGlmIChtVGV4dHVyZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOworCisgICAgSFJFU1VMVCBociA9IG1UZXh0dXJlLT5H
ZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmYWNlSW5kZXgp
LCBsZXZlbCwgJnN1cmZhY2UpOworCisgICAgcmV0dXJuIChTVUNDRUVERUQoaHIpKSA/IHN1cmZh
Y2UgOiBOVUxMOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpz
b3VyY2UpCit7CisgICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2Up
XVtsZXZlbF0ud2lkdGg7CisKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zm
c2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFy
cmF5WzBdWzBdLmZvcm1hdCwgbUltYWdlQXJyYXlbMF1bMF0ud2lkdGgpKQorICAgIHsKKyAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJl
LCB0cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2V0UmVuZGVyVGFyZ2V0
KGZhY2UpOworICAgIH0KKworICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICB7Cisg
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKKyAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgc291cmNlUmVjdC50
b3AgPSB5OworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisKKyAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBnZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZl
bCk7CisKKyAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgeG9mZnNl
dCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICB9Cit9CisK
K2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAo
bUltYWdlQXJyYXlbMF1bMF0ud2lkdGggPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMTsgZiA8IDY7IGYrKykKKyAg
ICB7CisgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVswXS53aWR0aCAhPSBtSW1hZ2VBcnJheVsw
XVswXS53aWR0aAorICAgICAgICAgICAgfHwgbUltYWdlQXJyYXlbZl1bMF0uZm9ybWF0ICE9IG1J
bWFnZUFycmF5WzBdWzBdLmZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgaWYgKCFpc1BvdzIobUltYWdl
QXJyYXlbMF1bMF0ud2lkdGgpIHx8ICFpc0N1YmVDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICAvLyBQdXJn
ZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRo
ZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIobUlt
YWdlQXJyYXlbMF1bMF0ud2lkdGgpOworICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwg
NjsgZisrKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uc3VyZmFj
ZSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zd
W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtp
XS5zdXJmYWNlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUltYWdlQXJy
YXlbZl1baV0uZGlydHkgPSBmYWxzZTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0u
Zm9ybWF0ID0gbUltYWdlQXJyYXlbZl1bMF0uZm9ybWF0OworICAgICAgICAgICAgbUltYWdlQXJy
YXlbZl1baV0ud2lkdGggPSBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS53aWR0aCA+PiBpLCAx
KTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmhlaWdodCA9IG1JbWFnZUFycmF5W2Zd
W2ldLndpZHRoOworICAgICAgICB9CisgICAgfQorCisgICAgbmVlZFJlbmRlclRhcmdldCgpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1YmVNYXBTdXJmYWNlKGYsIGkt
MSk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3Vy
ZmFjZShmLCBpKTsKKworICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0g
TlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZp
bHRlcih1cHBlciwgbG93ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodXBw
ZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGlmIChsb3dlciAhPSBO
VUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorCitDb2xvcmJ1ZmZl
ciAqVGV4dHVyZUN1YmVNYXA6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCit7CisgICAg
aWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZlciAqKU5VTEwpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CisKKyAgICBp
ZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgeworICAgICAgICBtRmFjZVByb3hp
ZXNbZmFjZV0gPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOworfQorCitJRGlyZWN0M0RTdXJm
YWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQorewor
ICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgbmVlZFJl
bmRlclRhcmdldCgpOworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5V
TEw7CisgICAgbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENVQkVN
QVBfRkFDRVM+KGZhY2VJbmRleCh0YXJnZXQpKSwgMCwgJnJlbmRlclRhcmdldCk7CisKKyAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCitUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94
eTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHkoVGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdl
dCkKKyAgOiBDb2xvcmJ1ZmZlcihOVUxMKSwgbVRleHR1cmUodGV4dHVyZSksIG1UYXJnZXQodGFy
Z2V0KQoreworICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTo6
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgaWYgKG1S
ZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgIG1SZW5kZXJUYXJn
ZXQgPSBtVGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworCisgICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXQ7Cit9CisKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6
Z2V0V2lkdGgoKQoreworICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgoKTsKK30KKworaW50
IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKQoreworICAgIHJl
dHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KCk7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVy
ZS5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjUwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUZXh0dXJl
Lmg6IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgY29uY3Jl
dGUgZGVyaXZlZAorLy8gY2xhc3NlcyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBs
ZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQKKy8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCisKKyNpZm5kZWYgTElCR0xF
U1YyX1RFWFRVUkVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1RFWFRVUkVfSF8KKworI2luY2x1ZGUg
PHZlY3Rvcj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8ZDNkOS5oPgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBDb250ZXh0OworY2xhc3MgQmxpdDsKKworZW51
bQoreworICAgIE1BWF9URVhUVVJFX1NJWkUgPSAyMDQ4LAorICAgIE1BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUgPSAyMDQ4LAorCisgICAgTUFYX1RFWFRVUkVfTEVWRUxTID0gMTIgICAvLyAxK2xv
ZzIgb2YgTUFYX1RFWFRVUkVfU0laRQorfTsKKworY2xhc3MgVGV4dHVyZQoreworICBwdWJsaWM6
CisgICAgZXhwbGljaXQgVGV4dHVyZShDb250ZXh0ICpjb250ZXh0KTsKKworICAgIHZpcnR1YWwg
flRleHR1cmUoKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsK
KworICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wgc2V0TWFn
RmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwor
ICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOworCisgICAgR0xlbnVtIGdldE1pbkZpbHRl
cigpIGNvbnN0OworICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0V3JhcFMoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKKworICAgIEdM
dWludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgPSAwOworCisgICAgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CisgICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0
Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwcygpID0gMDsKKworICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworCisgIHByb3Rl
Y3RlZDoKKyAgICBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eTsKKyAgICBmcmllbmQgY2xh
c3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7CisgICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVy
UHJveHkgOiBwdWJsaWMgQ29sb3JidWZmZXIKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAg
IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQp
OworICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgMkQtbGlrZSB0ZXh0dXJlIHRhcmdldCAoR0xf
VEVYVFVSRV8yRCBvciBvbmUgb2YgdGhlIGN1YmUgZmFjZSB0YXJnZXRzKQorCisgICAgICAgIHZp
cnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworCisgICAgICAgIHZp
cnR1YWwgaW50IGdldFdpZHRoKCk7CisgICAgICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpOwor
CisgICAgICBwcml2YXRlOgorICAgICAgICBUZXh0dXJlICptVGV4dHVyZTsKKyAgICAgICAgR0xl
bnVtIG1UYXJnZXQ7CisgICAgfTsKKworICAgIC8vIEhlbHBlciBzdHJ1Y3R1cmUgcmVwcmVzZW50
aW5nIGEgc2luZ2xlIGltYWdlIGxheWVyCisgICAgc3RydWN0IEltYWdlCisgICAgeworICAgICAg
ICBJbWFnZSgpOworICAgICAgICB+SW1hZ2UoKTsKKworICAgICAgICBHTHNpemVpIHdpZHRoOwor
ICAgICAgICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xlbnVtIGZvcm1hdDsKKworICAgICAg
ICBib29sIGRpcnR5OworCisgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlOworICAg
IH07CisKKyAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0KTsK
KyAgICBpbnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25zdDsKKworICAgIEdMZW51
bSBtTWluRmlsdGVyOworICAgIEdMZW51bSBtTWFnRmlsdGVyOworICAgIEdMZW51bSBtV3JhcFM7
CisgICAgR0xlbnVtIG1XcmFwVDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisgICAgdm9pZCBzdWJJ
bWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKworICAgIHZvaWQgbmVlZFJlbmRl
clRhcmdldCgpOworCisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IG1heGxldmVsKSBjb25zdDsKKyAgICBHTGludCBjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUsIEdMaW50IG1heGxldmVsKSBjb25zdDsKKworICAgIC8vIFRoZSBw
b2ludGVyIHJldHVybmVkIGlzIHdlYWsgYW5kIGl0IGlzIGFzc3VtZWQgdGhlIGRlcml2ZWQgY2xh
c3Mgd2lsbCBrZWVwIGEgc3Ryb25nIHBvaW50ZXIgdW50aWwgdGhlIG5leHQgY3JlYXRlVGV4dHVy
ZSgpIGNhbGwuCisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1
cmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKSA9IDA7CisgICAgdmly
dHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0gMDsK
KyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRh
cmdldCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGRpcnR5SW1hZ2VEYXRhKCkgY29uc3QgPSAw
OworCisgICAgdm9pZCBkcm9wVGV4dHVyZSgpOworICAgIHZvaWQgcHVzaFRleHR1cmUoSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpuZXdUZXh0dXJlLCBib29sIHJlbmRlcmFibGUpOworCisgICAgQmxp
dCAqZ2V0QmxpdHRlcigpOworCisgICAgdW5zaWduZWQgaW50IG1XaWR0aDsKKyAgICB1bnNpZ25l
ZCBpbnQgbUhlaWdodDsKKworICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7CisKKyAgICBDb250ZXh0
ICptQ29udGV4dDsKKworICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbUJhc2VUZXh0dXJlOyAv
LyBUaGlzIGlzIGEgd2VhayBwb2ludGVyLiBUaGUgZGVyaXZlZCBjbGFzcyBpcyBhc3N1bWVkIHRv
IG93biBhIHN0cm9uZyBwb2ludGVyLgorICAgIGJvb2wgbURpcnR5TWV0YURhdGE7CisgICAgYm9v
bCBtSXNSZW5kZXJhYmxlOworCisgICAgYm9vbCBtRGlydHk7CisKKyAgICB2b2lkIGxvYWRJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBzdGQ6OnNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKK307CisKK2NsYXNzIFRleHR1cmUy
RCA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJlMkQo
Q29udGV4dCAqY29udGV4dCk7CisKKyAgICB+VGV4dHVyZTJEKCk7CisKKyAgICBHTGVudW0gZ2V0
VGFyZ2V0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwor
ICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXIgKnNvdXJjZSk7CisgICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisKKyAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKworICAg
IHZpcnR1YWwgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpOworCisg
IHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7CisKKyAg
ICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCBib29sIGRpcnR5
SW1hZ2VEYXRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKKworICAgIEltYWdlIG1JbWFnZUFycmF5W01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7CisKKyAgICBUZXh0dXJlQ29sb3JidWZmZXJQcm94
eSAqbUNvbG9yYnVmZmVyUHJveHk7CisKKyAgICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CisKKyAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIHRhcmdldCk7Cit9OworCitjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJl
Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChDb250ZXh0ICpjb250
ZXh0KTsKKworICAgIH5UZXh0dXJlQ3ViZU1hcCgpOworCisgICAgR0xlbnVtIGdldFRhcmdldCgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CisgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9p
ZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1koR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CisKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisgICAgdm9p
ZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworCisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisKKyAgICB2aXJ0dWFs
IENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CisKKyAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCBib29sIGRpcnR5SW1h
Z2VEYXRhKCkgY29uc3Q7CisKKyAgICAvLyBmYWNlSWRlbnRpZmllciBpcyAwLTUgb3Igb25lIG9m
IHRoZSBHTF9URVhUVVJFX0NVQkVfTUFQXyogZW51bWVyYW50cy4KKyAgICAvLyBSZXR1cm5zIE5V
TEwgaWYgdGhlIGNhbGwgdW5kZXJseWluZyBEaXJlY3QzRCBjYWxsIGZhaWxzLgorICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZSh1bnNpZ25lZCBpbnQgZmFjZUlkZW50aWZp
ZXIsIHVuc2lnbmVkIGludCBsZXZlbCk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJ
bmRleChHTGVudW0gZmFjZSk7CisKKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldEltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIGNvbW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCk7CisKKyAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtNQVhfVEVYVFVS
RV9MRVZFTFNdOworCisgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKKworICAg
IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptRmFjZVByb3hpZXNbNl07CisKKyAgICB2aXJ0dWFs
IElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Cit9Owor
fQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVYVFVSRV9IXwpJbmRleDogQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDQzIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisvLyBsaWJHTEVTdjIuY3BwOiBJbXBsZW1lbnRzIHRoZSBleHBvcnRlZCBPcGVuR0wgRVMg
Mi4wIGZ1bmN0aW9ucy4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlIDxleGNlcHRpb24+Cisj
aW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
RnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKKworZXh0ZXJuICJDIgoreworCit2b2lk
IF9fc3RkY2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCit7CisgICAgVFJBQ0Uo
IihHTGVudW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmICh0ZXh0dXJlIDwgR0xfVEVYVFVSRTAgfHwgdGV4dHVyZSA+IEdMX1RFWFRVUkUw
ICsgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIC0gMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEFjdGl2ZVNhbXBsZXIo
dGV4dHVyZSAtIEdMX1RFWFRVUkUwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEF0dGFjaFNoYWRlcihHTHVpbnQgcHJv
Z3JhbSwgR0x1aW50IHNoYWRlcikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQs
IEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAg
IGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
c2hhZGVyT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRQcm9ncmFtKHNoYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmF0dGFj
aFNoYWRlcihzaGFkZXJPYmplY3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3Qg
R0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50
IGluZGV4ID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgaW5k
ZXgsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0dHJpYnV0
ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kQXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgZnJhbWVidWZm
ZXIpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGZyYW1lYnVm
ZmVyID0gJWQpIiwgdGFyZ2V0LCBmcmFtZWJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgcmVuZGVyYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
dWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
ZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFRleHR1cmUoR0xlbnVt
IHRhcmdldCwgR0x1aW50IHRleHR1cmUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKworICAg
ICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QgJiYgdGV4dHVyZU9iamVjdC0+Z2V0VGFyZ2V0KCkg
IT0gdGFyZ2V0ICYmIHRleHR1cmUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJl
MkQodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1
cmVDdWJlTWFwKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNs
YW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCit7CisgICAgVFJBQ0Uo
IihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9
ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kQ29sb3IoZ2w6OmNsYW1wMDEocmVkKSwgZ2w6OmNs
YW1wMDEoZ3JlZW4pLCBnbDo6Y2xhbXAwMShibHVlKSwgZ2w6OmNsYW1wMDEoYWxwaGEpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpCit7CisgICAgZ2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUobW9kZSwgbW9kZSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlv
blNlcGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIG1vZGVSR0IgPSAweCVYLCBHTGVudW0gbW9kZUFscGhhID0gMHglWCkiLCBtb2Rl
UkdCLCBtb2RlQWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGVS
R0IpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgorICAgICAgICAgIGNh
c2UgR0xfRlVOQ19TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJU
UkFDVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3
aXRjaCAobW9kZUFscGhhKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoK
KyAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9GVU5D
X1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEJs
ZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuYyhHTGVu
dW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpCit7CisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShz
ZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0g
c3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBzcmNSR0Ig
PSAweCVYLCBHTGVudW0gZHN0UkdCID0gMHglWCwgR0xlbnVtIHNyY0FscGhhID0gMHglWCwgR0xl
bnVtIGRzdEFscGhhID0gMHglWCkiLAorICAgICAgICAgIHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKHNyY1JHQikK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX09O
RToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19TUkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhB
OgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNl
IEdMX0RTVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Cisg
ICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19DT05TVEFOVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgorICAgICAgICAgIGNh
c2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoIChkc3RSR0IpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9T
UkNfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAg
ICAgIGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9D
T0xPUjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RB
TlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Cisg
ICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoc3JjQWxwaGEpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1pFUk86CisgICAgICAgICAgY2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9TUkNf
Q09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAgICAg
IGNhc2UgR0xfRFNUX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xP
UjoKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19TUkNfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRf
Q09MT1I6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6CisgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
ZHN0QWxwaGEpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1pFUk86CisgICAgICAgICAg
Y2FzZSBHTF9PTkU6CisgICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6CisgICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgorICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgor
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKKyAgICAgICAgICBjYXNlIEdM
X1NSQ19BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6CisgICAg
ICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6CisgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNU
X0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6CisgICAgICAgICAgY2FzZSBHTF9DT05TVEFO
VF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY29uc3Rh
bnRDb2xvclVzZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNyY1JHQiA9PSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgZHN0UkdCID09IEdMX09ORV9N
SU5VU19DT05TVEFOVF9DT0xPUik7CisKKyAgICAgICAgYm9vbCBjb25zdGFudEFscGhhVXNlZCA9
IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJH
QiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBKTsKKworICAgICAgICBpZiAoY29uc3RhbnRDb2xvclVzZWQgJiYgY29uc3RhbnRBbHBo
YVVzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiU2ltdWx0YW5lb3VzIHVzZSBvZiBH
TF9DT05TVEFOVF9BTFBIQS9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5kIEdMX0NPTlNU
QU5UX0NPTE9SL0dMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiBpbnZhbGlkIHVuZGVyIFdlYkdM
Iik7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
R0x2b2lkKiBkYXRhLCBHTGVudW0gdXNhZ2UpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAu
OHAsIEdMZW51bSB1c2FnZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBzaXplLCBkYXRhLCB1
c2FnZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoICh1c2FnZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
U1RSRUFNX0RSQVc6CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKKyAgICAgICAgICBj
YXNlIEdMX0RZTkFNSUNfRFJBVzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
YnVmZmVyOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6CisgICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICAgICAgICAgICAg
ICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVm
ZmVyLT5idWZmZXJEYXRhKGRhdGEsIHNpemUsIHVzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlclN1YkRh
dGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0
IEdMdm9pZCogZGF0YSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0
YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgMCB8fCBvZmZzZXQgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNpemUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyU3Vi
RGF0YShkYXRhLCBzaXplLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdMZW51bSB0YXJnZXQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCki
LCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZS
QU1FQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1l
YnVmZmVyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNz
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFzaykK
K3sKKyAgICBUUkFDRSgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1hc2spOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmNsZWFyKG1hc2spOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBm
IGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdM
Y2xhbXBmIHJlZCA9ICVmLCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYs
IEdMY2xhbXBmIGFscGhhID0gJWYpIiwKKyAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+c2V0Q2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xDbGVhckRlcHRoZihHTGNsYW1wZiBkZXB0aCkKK3sKKyAgICBUUkFDRSgiKEdMY2xh
bXBmIGRlcHRoID0gJWYpIiwgZGVwdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyRGVwdGgoZGVwdGgp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdMaW50IHMpCit7CisgICAgVFJBQ0UoIihHTGludCBz
ID0gJWQpIiwgcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29s
b3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdM
Ym9vbGVhbiBhbHBoYSkKK3sKKyAgICBUUkFDRSgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29s
ZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVk
KSIsCisgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENv
bG9yTWFzayhyZWQgPT0gR0xfVFJVRSwgZ3JlZW4gPT0gR0xfVFJVRSwgYmx1ZSA9PSBHTF9UUlVF
LCBhbHBoYSA9PSBHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXBpbGVTaGFkZXIoR0x1aW50IHNoYWRl
cikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpT
aGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAg
ICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2hhZGVyT2JqZWN0
LT5jb21waWxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBU
UkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIgCisgICAgICAgICAgIkdM
c2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCBHTHNpemVpIGltYWdlU2l6ZSA9
ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBk
YXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6SXNUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGds
OjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxl
dmVsID4gMCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNp
emUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsgLy8gdWx0aW1hdGVseSB3ZSBkb24ndCBzdXBwb3J0IGNvbXByZXNzZWQgdGV4dHVyZXMKKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgVFJBQ0UoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGlu
dCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTHNpemVp
IGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoIWdsOjpJ
c1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPCAw
IHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
IHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIod2lkdGgpKSB8fCAobGV2ZWwgPiAwICYmICFn
bDo6aXNQb3cyKGhlaWdodCkpIHx8IGltYWdlU2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh4b2Zmc2V0ICE9IDAgfHwgeW9mZnNldCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gVGhlIHRleHR1cmUgYmVp
bmcgb3BlcmF0ZWQgb24gaXMgbm90IGEgY29tcHJlc3NlZCB0ZXh0dXJlLgorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIp
Cit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwg
R0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBH
TGludCBib3JkZXIgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobGV2ZWwgPiAwICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjpp
c1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgaWYgKHdp
ZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1B
WF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgorICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvcmRlciAhPSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnNvdXJjZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVy
KCk7CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUt
PmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQs
IEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdM
aW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVp
Z2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKCFnbDo6
SXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwg
MCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3aWR0
aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBoZWln
aHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGNv
bnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyKCk7CisKKyAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZShsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVQcm9ncmFt
KHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0ZVByb2dy
YW0oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK0dMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVTaGFkZXIoR0xlbnVt
IHR5cGUpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdHlwZSA9IDB4JVgpIiwgdHlwZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5U
X1NIQURFUjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwg
MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDAp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEN1bGxGYWNl
KEdMZW51bSBtb2RlKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAg
ICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0Q3VsbE1vZGUobW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlQnVmZmVycyhH
THNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkg
biA9ICVkLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVy
KGJ1ZmZlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRnJhbWVidWZmZXJz
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihH
THNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4s
IGZyYW1lYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZnJhbWVidWZmZXJzW2ldICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcnNbaV0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0p
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3Jh
bSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogcmVuZGVyYnVmZmVy
cykKK3sKKyAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1
ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZl
cnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2hhZGVyKEdMdWludCBzaGFk
ZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlciA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVUZXh0dXJl
cyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogdGV4dHVyZXMpCit7CisgICAgVFJBQ0UoIihHTHNp
emVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVy
ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ld
ICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5k
ZWxldGVUZXh0dXJlKHRleHR1cmVzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCit7CisgICAgVFJBQ0UoIihHTGVu
dW0gZnVuYyA9IDB4JVgpIiwgZnVuYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoZnVuYykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVWRVI6CisgICAgICAgICAg
Y2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgY2FzZSBHTF9MRVNTOgorICAgICAgICAgIGNhc2Ug
R0xfTEVRVUFMOgorICAgICAgICAgIGNhc2UgR0xfRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9H
UkVBVEVSOgorICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorICAgICAgICAgIGNhc2UgR0xfTk9U
RVFVQUw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoRnVuYyhmdW5j
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKK3sKKyAgICBUUkFDRSgiKEdM
Ym9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhNYXNrKGZsYWcg
IT0gR0xfRkFMU0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVwdGhSYW5nZWYoR0xjbGFtcGYgek5lYXIsIEdMY2xh
bXBmIHpGYXIpCit7CisgICAgVFJBQ0UoIihHTGNsYW1wZiB6TmVhciA9ICVmLCBHTGNsYW1wZiB6
RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoUmFuZ2Uoek5lYXIs
IHpGYXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsRGV0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hh
ZGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRlciA9
ICVkKSIsIHByb2dyYW0sIHNoYWRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBnbDo6U2hhZGVyICpz
aGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlckJ5UHJvZ3JhbUhhbmRsZTsKKyAgICAgICAgICAgICAg
ICBzaGFkZXJCeVByb2dyYW1IYW5kbGUgPSBjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzaGFkZXJCeVByb2dyYW1IYW5kbGUpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbUJ5U2hhZGVySGFuZGxlID0gY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpOwor
ICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbUJ5U2hhZGVySGFuZGxlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0LT5kZXRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGlzYWJsZShHTGVudW0gY2FwKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9m
ZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFs
c2UpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAg
ICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0
U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxz
ZSk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIo
ZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCit7Cisg
ICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZl
cnRleEF0dHJpYkVuYWJsZWQoaW5kZXgsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KQoreworICAgIFRSQUNFKCIoR0xl
bnVtIG1vZGUgPSAweCVYLCBHTGludCBmaXJzdCA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQpIiwg
bW9kZSwgZmlyc3QsIGNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50
IDwgMCB8fCBmaXJzdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsRHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1vZGUg
PSAweCVYLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2
b2lkKiBpbmRpY2VzID0gMHglMC44cCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBp
bmRpY2VzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xF
bmFibGUoR0xlbnVtIGNhcCkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNh
cCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
Q1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZSh0cnVlKTsgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJ
TEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1ZSk7ICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQt
PnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFn
ZSh0cnVlKTsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNv
bnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRl
c3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5E
OiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHTHVpbnQgaW5kZXgpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRl
eCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYkVuYWJsZWQoaW5kZXgsIHRydWUpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsRmluaXNoKHZvaWQpCit7CisgICAgVFJBQ0UoIigpIik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZmluaXNo
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xGbHVzaCh2b2lkKQoreworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmZsdXNoKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJl
bmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0g
YXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQgPSAweCVYLCAiCisg
ICAgICAgICAgIkdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiB8fCByZW5kZXJidWZmZXJ0YXJnZXQg
IT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
ckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAgICAgICAgICBmcmFt
ZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFD
SE1FTlQ6CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFj
aG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCkKK3sK
KyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4
JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMdWludCB0ZXh0dXJl
ID0gJWQsIEdMaW50IGxldmVsID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQs
IHRleHR1cmUsIGxldmVsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldCAh
PSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQp
CisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgorICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICBjYXNlIEdMX1NURU5DSUxf
QVRUQUNITUVOVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRleHR1cmUgPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXh0YXJnZXQgPSBHTF9OT05FOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXggPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAg
ICAgICAgICAgICAgaWYgKHRleCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0g
R0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxldmVs
ICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0
RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVy
SGFuZGxlKCkgPT0gMCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgZnJhbWVidWZmZXItPnNldENvbG9y
YnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQVRUQUNITUVOVDogICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFy
Z2V0LCB0ZXh0dXJlKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6IGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKHRleHRhcmdldCwgdGV4dHVy
ZSk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJvbnRGYWNlKEdMZW51bSBtb2Rl
KQoreworICAgIFRSQUNFKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBzd2l0Y2ggKG1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX0NXOgorICAgICAgICAgIGNhc2UgR0xfQ0NXOgorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0RnJvbnRGYWNlKG1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbkJ1ZmZl
cnMoR0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4g
PSAlZCwgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVC
dWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0
YXJnZXQpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5GcmFtZWJ1
ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGZyYW1lYnVmZmVycykKK3sKKyAgICBUUkFDRSgiKEdM
c2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgZnJhbWVi
dWZmZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
c1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZW5SZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJzKQor
eworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogcmVuZGVyYnVmZmVycyA9IDB4
JTAuOHApIiwgbiwgcmVuZGVyYnVmZmVycyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChuIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4sIEdMdWludCog
dGV4dHVyZXMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJl
cyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRleHR1cmVzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlQXR0cmliKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkgKmxl
bmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAiR0xpbnQgKnNpemUgPSAweCUwLjhwLCBHTGVu
dW0gKnR5cGUgPSAlMC44cCwgR0xjaGFyICpuYW1lID0gJTAuOHApIiwKKyAgICAgICAgICBwcm9n
cmFtLCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFt
T2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBi
dWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5p
Zm9ybShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKQorewor
ICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdMc2l6
ZWkgYnVmc2l6ZSA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
IEdMaW50KiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0eXBlID0gMHglMC44cCwgR0xjaGFyKiBu
YW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZzaXplLCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoYnVm
c2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1D
b3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVj
dC0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBu
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXpl
aSBtYXhjb3VudCwgR0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycykKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwgR0xzaXplaSog
Y291bnQgPSAweCUwLjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCisgICAgICAgICAg
cHJvZ3JhbSwgbWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKG1heGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hhZGVy
cyhtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK2ludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlvbihH
THVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQoreworICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gJXMpIiwgcHJvZ3JhbSwgbmFtZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJv
Z3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRB
dHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgLTEpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKQoreworICAgIFRSQUNF
KCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xib29sZWFuKiBwYXJhbXMgPSAweCUwLjhwKSIsICBw
bmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgcGFyYW1z
KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBl
LCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFs
aWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAg
ICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICAgICAg
ICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGZsb2F0UGFyYW1zW2ldID09IDAuMGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBH
TF9JTlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50
UGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50
W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGludFBhcmFtc1tpXSA9PSAwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RS
VUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
W10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgorICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBIG51bGwg
YnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRh
cmdldAorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19z
dGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKK3sKKyAgICBUUkFDRSgiKCkiKTsKKworICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgIGlmIChjb250ZXh0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldEVycm9yKCk7CisgICAgfQorCisgICAg
cmV0dXJuIEdMX05PX0VSUk9SOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEZsb2F0dihHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcG5hbWUsIHBhcmFtcyk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1
ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAg
ICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJl
IG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5
cGUgPT0gR0xfQk9PTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ld
ID09IEdMX0ZBTFNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAu
MGY7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOworICAg
ICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKKworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsK
KworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFy
YW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHBh
cmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gYXR0YWNo
bWVudFR5cGU7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogICAgCisgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5
cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAg
ICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIo
KS0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgIAorICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0RGVwdGhidWZm
ZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgIAorICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+
Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxl
ID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xlbnVt
IGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8vIFR5cGUgY2F0ZWdvcnkKKyAgICAgICAgICAgIGlm
IChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0
VHlwZSA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJFOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBz
d2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRPYmplY3RUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBh
dHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGF0
dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgLy8gRnJhbWVidWZmZXJUZXh0dXJlMkQgd2ls
bCBub3QgYWxsb3cgbGV2ZWwgdG8gYmUgc2V0IHRvIGFueXRoaW5nIGVsc2UgaW4gR0wgRVMgMi4w
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAg
ICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXNDdWJlbWFwVGV4
dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwg
R0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50
KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFy
YW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgICAgIGlmIChu
dW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93
biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0
dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0g
TlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVt
UGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFt
ZSwgYm9vbFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQ
YXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2
ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xf
REVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0g
R0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09MT1IpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxvYXRQYXJhbXNbaV0gLSAxLjBm
KSAvIDIuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGlu
dCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQYXJhbXNbaV0gKyAwLjUpIDog
Y2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dy
YW0gPSAlZCwgR0xlbnVtIHBuYW1lID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBy
b2dyYW0sIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlv
bigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9MSU5L
X1NUQVRVUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNMaW5r
ZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVkFM
SURBVEVfU1RBVFVTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5p
c1ZhbGlkYXRlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1P
YmplY3QtPmdldEluZm9Mb2dMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQVRUQUNIRURfU0hBREVSUzoKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURVM6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJp
YnV0ZUNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNUzoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9y
bUNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdM
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHBy
b2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9n
cmFtSW5mb0xvZyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogaW5mb2xvZykKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQs
IEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIq
IGluZm9sb2cgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYnVmc2l6ZSwgbGVuZ3Ro
LCBpbmZvbG9nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5ndGgsIGlu
Zm9sb2cpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhw
KSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRS
ZW5kZXJidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGNvbnRleHQtPmdldFJl
bmRlcmJ1ZmZlcihjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKSk7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZm
ZXItPmdldFdpZHRoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVu
ZGVyYnVmZmVyLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEZvcm1hdCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRToKKyAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6
OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0UmVkU2l6ZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEdyZWVuU2l6ZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JMVUVf
U0laRToKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGlj
X2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0Qmx1ZVNpemUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9B
TFBIQV9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZm
ZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRBbHBoYVNpemUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9ERVBUSF9TSVpFOgorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzRGVw
dGhidWZmZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXREZXB0
aFNpemUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1JF
TkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ci0+aXNTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OlN0ZW5jaWxidWZmZXIqPihyZW5kZXJidWZm
ZXIpLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJpdihHTHVpbnQgc2hhZGVyLCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVy
ID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBzaGFk
ZXIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQt
PmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1RZUEU6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBJTEVfU1RBVFVT
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlzQ29tcGlsZWQoKSA/
IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBz
aGFkZXJPYmplY3QtPmdldEluZm9Mb2dMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0U291cmNlTGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
R2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQoreworICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9
ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xj
aGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVu
Z3RoLCBpbmZvbG9nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisg
ICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5ndGgsIGluZm9s
b2cpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBl
LCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKQor
eworICAgIFRSQUNFKCIoR0xlbnVtIHNoYWRlcnR5cGUgPSAweCVYLCBHTGVudW0gcHJlY2lzaW9u
dHlwZSA9IDB4JVgsIEdMaW50KiByYW5nZSA9IDB4JTAuOHAsIEdMaW50KiBwcmVjaXNpb24gPSAw
eCUwLjhwKSIsCisgICAgICAgICAgc2hhZGVydHlwZSwgcHJlY2lzaW9udHlwZSwgcmFuZ2UsIHBy
ZWNpc2lvbik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2hhZGVydHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgICBj
YXNlIEdMX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAocHJlY2lzaW9udHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfTE9XX0ZMT0FUOgorICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0ZMT0FUOgor
ICAgICAgICAgIGNhc2UgR0xfSElHSF9GTE9BVDoKKyAgICAgICAgICAgIC8vIEFzc3VtZSBJRUVF
IDc1NCBwcmVjaXNpb24KKyAgICAgICAgICAgIHJhbmdlWzBdID0gMTI3OworICAgICAgICAgICAg
cmFuZ2VbMV0gPSAxMjc7CisgICAgICAgICAgICAqcHJlY2lzaW9uID0gMjM7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0xPV19JTlQ6CisgICAgICAgICAgY2FzZSBHTF9N
RURJVU1fSU5UOgorICAgICAgICAgIGNhc2UgR0xfSElHSF9JTlQ6CisgICAgICAgICAgICAvLyBT
b21lIChtb3N0KSBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRp
bmctcG9pbnQgbnVtYmVycywKKyAgICAgICAgICAgIC8vIHdoaWNoIGNhbiBhY2N1cmF0ZWx5IHJl
cHJlc2VudCBpbnRlZ2VycyB1cCB0byArLy0xNjc3NzIxNgorICAgICAgICAgICAgcmFuZ2VbMF0g
PSAyNDsKKyAgICAgICAgICAgIHJhbmdlWzFdID0gMjQ7CisgICAgICAgICAgICAqcHJlY2lzaW9u
ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclNvdXJj
ZShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFy
KiBzb3VyY2UpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVm
c2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIHNvdXJjZSA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9i
amVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOworCisgICAgICAgICAgICBpZiAoIXNo
YWRlck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaGFk
ZXJPYmplY3QtPmdldFNvdXJjZShidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSogX19z
dGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBuYW1lKQoreworICAgIFRSQUNFKCIoR0xlbnVtIG5h
bWUgPSAweCVYKSIsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgc3dpdGNoIChuYW1lKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9WRU5ET1I6CisgICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJUcmFuc0dhbWluZyBJbmMuIjsKKyAgICAgICAgICBjYXNlIEdMX1JFTkRFUkVS
OgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiQU5HTEUiOworICAgICAgICAgIGNhc2Ug
R0xfVkVSU0lPTjoKKyAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAg
KGdpdC1kZXZlbCAiX19EQVRFX18gIiAiIF9fVElNRV9fIikiOworICAgICAgICAgIGNhc2UgR0xf
U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKiki
T3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoZ2l0LWRldmVsICJfX0RBVEVfXyAiICIgX19USU1FX18i
KSI7CisgICAgICAgICAgY2FzZSBHTF9FWFRFTlNJT05TOgorICAgICAgICAgICAgcmV0dXJuIChH
THVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmco
KSA6ICIiKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUqKU5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCAoR0x1Ynl0ZSopTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCki
LCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNaW5G
aWx0ZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVy
ZS0+Z2V0V3JhcFMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
dGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNaW5GaWx0ZXIoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVu
aWZvcm1mdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykK
K3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5p
c0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBwYXJhbXMpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdM
aW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IHByb2dy
YW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
cHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1p
dihsb2NhdGlvbiwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2ludCBfX3N0ZGNhbGwgZ2xH
ZXRVbmlmb3JtTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKK3sK
KyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4
JTAuOHApIiwgcHJvZ3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoc3Ryc3Ry
KG5hbWUsICJnbF8iKSA9PSBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9iamVjdC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG5hbWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgLTEpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCog
cGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0gY29u
dGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0
dHJpYlN0YXRlLm1FbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRy
aWJTdGF0ZS5tU3RyaWRlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQg
PyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlcjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRF
WF9BVFRSSUI6CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhdHRyaWJT
dGF0ZS5tQ3VycmVudFZhbHVlW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihHTHVpbnQg
aW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBUUkFDRSgiKEdMdWlu
dCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QXR0cmli
dXRlU3RhdGUgYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRl
eCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUu
bVNpemU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJp
YlN0YXRlLm1TdHJpZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBhdHRyaWJTdGF0ZS5tVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxT
RSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YXR0cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVb
aV07CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoY3VycmVudFZhbHVl
ID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSArIDAuNWYpIDogY2VpbChjdXJyZW50VmFsdWUg
LSAwLjVmKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KEdMdWludCBpbmRleCwg
R0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IGlu
ZGV4ID0gJWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBvaW50ZXIgPSAweCUwLjhw
KSIsIGluZGV4LCBwbmFtZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUg
IT0gR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2b2lkKj4oY29udGV4dC0+Z2V0
VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsSGludChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gbW9kZSkKK3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVu
dW0gbW9kZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0dFTkVSQVRF
X01JUE1BUF9ISU5UOgorICAgICAgICAgICAgc3dpdGNoIChtb2RlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZBU1RFU1Q6CisgICAgICAgICAgICAgIGNhc2UgR0xfTklD
RVNUOgorICAgICAgICAgICAgICBjYXNlIEdMX0RPTlRfQ0FSRToKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQpCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0R2VuZXJhdGVNaXBtYXBIaW50KG1vZGUpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJ
c0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIFRSQUNFKCIoR0x1aW50IGJ1ZmZlciA9ICVk
KSIsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBidWZmZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNvbnRl
eHQtPmdldEJ1ZmZlcihidWZmZXIpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNF
bmFibGVkKEdMZW51bSBjYXApCit7CisgICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCkiLCBj
YXApOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NVTExfRkFDRTogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VFbmFi
bGVkKCk7CisgICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBy
ZXR1cm4gY29udGV4dC0+aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5pc1Nh
bXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVfQ09WRVJBR0U6ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdlRW5h
YmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVuY2ls
VGVzdEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0Js
ZW5kRW5hYmxlZCgpOworICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZh
bHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQoreworICAgIFRSQUNFKCIo
R0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgZnJhbWVidWZmZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAg
IH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElz
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0g
JWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCAmJiBwcm9n
cmFtKQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFt
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxT
RSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gX19zdGRj
YWxsIGdsSXNSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBUUkFDRSgi
KEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCByZW5kZXJidWZmZXIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQgJiYgcmVuZGVyYnVmZmVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFM
U0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzU2hhZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgc2hh
ZGVyID0gJWQpIiwgc2hhZGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0ICYm
IHNoYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0
ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7CisKKyAgICAgICAgICAgIGlmIChzaGFkZXJP
YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNF
KTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xJc1RleHR1cmUoR0x1aW50IHRleHR1cmUpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgdGV4
dHVyZSA9ICVkKSIsIHRleHR1cmUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQg
JiYgdGV4dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVP
YmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworCisgICAgICAgICAgICBpZiAo
dGV4dHVyZU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xf
VFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
R0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKK3sKKyAgICBUUkFDRSgiKEdMZmxvYXQg
d2lkdGggPSAlZikiLCB3aWR0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3aWR0
aCA8PSAwLjBmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldExpbmVXaWR0aCh3aWR0aCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xMaW5rUHJvZ3Jh
bShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwg
cHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHByb2dyYW1PYmplY3QtPmxpbmsoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdM
ZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCit7CisgICAgVFJBQ0UoIihHTGVudW0gcG5hbWUgPSAw
eCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHBuYW1lLCBwYXJhbSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOgor
ICAgICAgICAgICAgICAgIGlmIChwYXJhbSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0gIT0g
NCAmJiBwYXJhbSAhPSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFVucGFja0FsaWdubWVudChwYXJhbSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDoK
KyAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFtICE9
IDQgJiYgcGFyYW0gIT0gOCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNrQWxpZ25tZW50KHBhcmFtKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
UG9seWdvbk9mZnNldChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKK3sKKyAgICBUUkFD
RSgiKEdMZmxvYXQgZmFjdG9yID0gJWYsIEdMZmxvYXQgdW5pdHMgPSAlZikiLCBmYWN0b3IsIHVu
aXRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKGZhY3RvciwgdW5pdHMpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsUmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKQor
eworICAgIFRSQUNFKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGgg
PSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgorICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0g
MHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsICBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbGVhc2VTaGFkZXJDb21waWxlcih2b2lkKQor
eworICAgIFRSQUNFKCIoKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6U2hhZGVy
OjpyZWxlYXNlQ29tcGlsZXIoKTsKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0g
MHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAg
ICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJCVUZGRVI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAg
ICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKKyAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IHdpZHRoID4g
Z2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSB8fCBoZWlnaHQgPiBnbDo6TUFYX1JFTkRFUkJVRkZF
Ul9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6RGVwdGhidWZm
ZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQkE0OgorICAgICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRl
cmJ1ZmZlcihuZXcgZ2w6OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9JTkRFWDg6CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBn
bDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShH
TGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKK3sKKyAgICBUUkFDRSgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhnbDo6Y2xhbXAwMSh2YWx1ZSksIGludmVy
dCA9PSBHTF9UUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVFJBQ0UoIihHTGludCB4ID0gJWQsIEdM
aW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgs
IHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0KiBjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclBhcmFtcyh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFNoYWRlckJpbmFyeShHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hh
ZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkg
bGVuZ3RoKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogc2hh
ZGVycyA9IDB4JTAuOHAsIEdMZW51bSBiaW5hcnlmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAg
ImNvbnN0IEdMdm9pZCogYmluYXJ5ID0gMHglMC44cCwgR0xzaXplaSBsZW5ndGggPSAlZCkiLAor
ICAgICAgICAgIG4sIHNoYWRlcnMsIGJpbmFyeWZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICAvLyBObyBiaW5hcnkgc2hhZGVyIGZvcm1hdHMgYXJlIHN1
cHBvcnRlZC4KKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291
cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywg
Y29uc3QgR0xpbnQqIGxlbmd0aCkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhwLCBjb25z
dCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAorICAgICAgICAgIHNoYWRlciwgY291bnQsIHN0
cmluZywgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKKworICAg
ICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNoYWRlck9iamVj
dC0+c2V0U291cmNlKGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsRnVu
YyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaykKK3sKKyAgICBnbFN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1
bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCit7CisgICAgVFJBQ0UoIihHTGVudW0gZmFjZSA9
IDB4JVgsIEdMZW51bSBmdW5jID0gMHglWCwgR0xpbnQgcmVmID0gJWQsIEdMdWludCBtYXNrID0g
JWQpIiwgZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChmYWNlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9GUk9OVDoKKyAgICAg
ICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZnVu
YykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVWRVI6CisgICAgICAgICAgY2FzZSBH
TF9BTFdBWVM6CisgICAgICAgICAgY2FzZSBHTF9MRVNTOgorICAgICAgICAgIGNhc2UgR0xfTEVR
VUFMOgorICAgICAgICAgIGNhc2UgR0xfRVFVQUw6CisgICAgICAgICAgY2FzZSBHTF9HRVFVQUw6
CisgICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2UgPT0g
R0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U3RlbmNpbFBhcmFtcyhmdW5jLCByZWYsIG1hc2spOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JB
Q0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJh
Y2tQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFN0ZW5j
aWxNYXNrKEdMdWludCBtYXNrKQoreworICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VF9BTkRfQkFDSywgbWFzayk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1hc2tTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spCit7CisgICAgVFJBQ0UoIihHTGVudW0gZmFj
ZSA9IDB4JVgsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgbWFzayk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
RlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNhc2UgR0xfRlJPTlRf
QU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8
IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3RlbmNpbFdyaXRlbWFzayhtYXNrKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9C
QUNLKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxC
YWNrV3JpdGVtYXNrKG1hc2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE9wKEdM
ZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcykKK3sKKyAgICBnbFN0ZW5jaWxP
cFNlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZmFp
bCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCit7CisgICAgVFJBQ0UoIihHTGVudW0gZmFj
ZSA9IDB4JVgsIEdMZW51bSBmYWlsID0gMHglWCwgR0xlbnVtIHpmYWlsID0gMHglWCwgR0xlbnVt
IHpwYXMgPSAweCVYcykiLAorICAgICAgICAgIGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmFjZSkKKyAgICAgICAgeworICAgICAg
ICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgIGNh
c2UgR0xfRlJPTlRfQU5EX0JBQ0s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2ggKGZhaWwpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X1pFUk86CisgICAgICAgICAgY2FzZSBHTF9LRUVQOgorICAgICAgICAgIGNhc2UgR0xfUkVQTEFD
RToKKyAgICAgICAgICBjYXNlIEdMX0lOQ1I6CisgICAgICAgICAgY2FzZSBHTF9ERUNSOgorICAg
ICAgICAgIGNhc2UgR0xfSU5WRVJUOgorICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgorICAg
ICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoICh6ZmFpbCkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgR0xfWkVSTzoKKyAgICAgICAgICBjYXNlIEdMX0tFRVA6CisgICAgICAgICAgY2FzZSBHTF9S
RVBMQUNFOgorICAgICAgICAgIGNhc2UgR0xfSU5DUjoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1I6
CisgICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6CisgICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6
CisgICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHpwYXNzKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9aRVJPOgorICAgICAgICAgIGNhc2UgR0xfS0VFUDoKKyAgICAgICAgICBjYXNl
IEdMX1JFUExBQ0U6CisgICAgICAgICAgY2FzZSBHTF9JTkNSOgorICAgICAgICAgIGNhc2UgR0xf
REVDUjoKKyAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKKyAgICAgICAgICBjYXNlIEdMX0lOQ1Jf
V1JBUDoKKyAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0aW9u
cyhmYWlsLCB6ZmFpbCwgenBhc3MpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
Ym9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMp
Cit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhl
aWdodCA9ICVkLCAiCisgICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9ICAweCUw
LjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobGV2ZWwgPiAwICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWds
Ojppc1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6
Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VCRV9NQVBf
VEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQg
IT0gZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdCOgor
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvcmRlciAh
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlKGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRV
bnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NYKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQo
KSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1h
Z2VOZWdZKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0
LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQs
IHBuYW1lLCAoR0xpbnQpcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRl
cmZ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKQor
eworICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCAoR0xpbnQpKnBhcmFtcyk7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaShHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgdGFyZ2V0LCBwbmFtZSwg
cGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgor
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
OgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgorICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+
c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBh
cmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6CisgICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgICAgIGlm
ICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW1zKQoreworICAgIGdsVGV4UGFyYW1ldGVyaSh0
YXJnZXQsIHBuYW1lLCAqcGFyYW1zKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpCit7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAi
R0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0g
MHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4
ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxT
IHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6
bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6
bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWdsOjpD
aGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0
YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQorewor
ICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngpOworfQorCit2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQq
IHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4KQoreworICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwgJngpOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0o
KTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFpdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmYoR0xp
bnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAgIEdMZmxvYXQgeHlbMl0g
PSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHkp
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5p
Zm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpCit7Cisg
ICAgR0xpbnQgeHlbNF0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIDEs
IChHTGludCopJnh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBUUkFDRSgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6KQoreworICAgIEdMZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OworCisgICAgZ2xV
bmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5eik7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2koR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCit7CisgICAgR0xpbnQgeHl6WzNdID0g
e3gsIHksIHp9OworCisgICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXop
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9j
YXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW0oKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTNpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdM
ZmxvYXQgdykKK3sKKyAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAgICBn
bFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6dyk7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQs
IHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGkoR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit7CisgICAgR0xp
bnQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKKworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwg
MSwgKEdMaW50KikmeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit7CisgICAgVFJBQ0Uo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2
ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5z
ZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIFRS
QUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4g
dHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAg
ICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9u
LCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBUUkFDRSgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291
bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291
bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xm
bG9hdCogdmFsdWUpCit7CisgICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVp
IGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFs
dWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZh
bHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bv
c2UgIT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7CisgICAgVFJB
Q0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFRSQUNF
KCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRh
dGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQor
eworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGluZGV4
LCB4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAwLCAxIH07CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0
cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIFRSQUNF
KCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwg
aW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAx
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xm
bG9hdCB5ID0gJWYpIiwgaW5kZXgsIHgsIHkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHks
IDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFs
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0
KiB2YWx1ZXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9h
dCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRd
ID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdM
dWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sKKyAgICBUUkFD
RSgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdM
ZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCB5LCB6LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCogdmFsdWVzKQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjRmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwg
R0xmbG9hdCB3KQoreworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9
ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYsIEdMZmxvYXQgdyA9ICVmKSIsIGlu
ZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQor
eworICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihp
bmRleCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZGV4
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkg
c3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKK3sKKyAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9
ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJH
TGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZv
aWQqIHB0ciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBwdHIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemUg
PCAxIHx8IHNpemUgPiA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgorICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+
Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xfVFJV
RSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRSQUNFKCIoR0xpbnQgeCA9ICVk
LCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1zKHgsIHksIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBi
b3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykK
K3sKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdMc2l6ZWkgd2lkdGgg
PSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgIgorICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUg
PSAweCV4LCBjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBVTklNUExF
TUVOVEVEKCk7ICAgLy8gRklYTUUKKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xH
ZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKK3sKKyAgICBzdHJ1Y3QgRXh0ZW5z
aW9uCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICBfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIGFkZHJlc3M7CisgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdCBFeHRlbnNpb24gZ2xFeHRlbnNpb25zW10gPQorICAgIHsKKyAgICAgICAgeyJn
bFRleEltYWdlM0RPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFRleEltYWdlM0RPRVN9LAorICAgIH07CisKKyAgICBmb3IgKGludCBleHQgPSAwOyBleHQg
PCBzaXplb2YoZ2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKKyAgICB7
CisgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGdsRXh0ZW5zaW9uc1tleHRdLm5hbWUpID09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbEV4dGVuc2lvbnNbZXh0XS5hZGRyZXNzOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5kZWYJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5kZWYJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU0IEBACitMSUJSQVJZIGxpYkdMRVN2Mgor
RVhQT1JUUworICAgIGdsQWN0aXZlVGV4dHVyZSAgICAgICAgICAgICAgICAgQDEKKyAgICBnbEF0
dGFjaFNoYWRlciAgICAgICAgICAgICAgICAgIEAyCisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24g
ICAgICAgICAgICBAMworICAgIGdsQmluZEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgQDQKKyAg
ICBnbEJpbmRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgIEA1CisgICAgZ2xCaW5kUmVuZGVyYnVm
ZmVyICAgICAgICAgICAgICBANgorICAgIGdsQmluZFRleHR1cmUgICAgICAgICAgICAgICAgICAg
QDcKKyAgICBnbEJsZW5kQ29sb3IgICAgICAgICAgICAgICAgICAgIEA4CisgICAgZ2xCbGVuZEVx
dWF0aW9uICAgICAgICAgICAgICAgICBAOQorICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlICAg
ICAgICAgQDEwCisgICAgZ2xCbGVuZEZ1bmMgICAgICAgICAgICAgICAgICAgICBAMTEKKyAgICBn
bEJsZW5kRnVuY1NlcGFyYXRlICAgICAgICAgICAgIEAxMgorICAgIGdsQnVmZmVyRGF0YSAgICAg
ICAgICAgICAgICAgICAgQDEzCisgICAgZ2xCdWZmZXJTdWJEYXRhICAgICAgICAgICAgICAgICBA
MTQKKyAgICBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgIEAxNQorICAgIGdsQ2xlYXIg
ICAgICAgICAgICAgICAgICAgICAgICAgQDE2CisgICAgZ2xDbGVhckNvbG9yICAgICAgICAgICAg
ICAgICAgICBAMTcKKyAgICBnbENsZWFyRGVwdGhmICAgICAgICAgICAgICAgICAgIEAxOAorICAg
IGdsQ2xlYXJTdGVuY2lsICAgICAgICAgICAgICAgICAgQDE5CisgICAgZ2xDb2xvck1hc2sgICAg
ICAgICAgICAgICAgICAgICBAMjAKKyAgICBnbENvbXBpbGVTaGFkZXIgICAgICAgICAgICAgICAg
IEAyMQorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgICAgICAgICAgQDIyCisgICAgZ2xDb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCAgICAgICBAMjMKKyAgICBnbENvcHlUZXhJbWFnZTJEICAgICAg
ICAgICAgICAgIEAyNAorICAgIGdsQ29weVRleFN1YkltYWdlMkQgICAgICAgICAgICAgQDI1Cisg
ICAgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICBAMjYKKyAgICBnbENyZWF0ZVNoYWRl
ciAgICAgICAgICAgICAgICAgIEAyNworICAgIGdsQ3VsbEZhY2UgICAgICAgICAgICAgICAgICAg
ICAgQDI4CisgICAgZ2xEZWxldGVCdWZmZXJzICAgICAgICAgICAgICAgICBAMjkKKyAgICBnbERl
bGV0ZUZyYW1lYnVmZmVycyAgICAgICAgICAgIEAzMAorICAgIGdsRGVsZXRlUHJvZ3JhbSAgICAg
ICAgICAgICAgICAgQDMyCisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzICAgICAgICAgICBAMzMK
KyAgICBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgIEAzNAorICAgIGdsRGVsZXRlVGV4
dHVyZXMgICAgICAgICAgICAgICAgQDMxCisgICAgZ2xEZXB0aEZ1bmMgICAgICAgICAgICAgICAg
ICAgICBAMzYKKyAgICBnbERlcHRoTWFzayAgICAgICAgICAgICAgICAgICAgIEAzNworICAgIGds
RGVwdGhSYW5nZWYgICAgICAgICAgICAgICAgICAgQDM4CisgICAgZ2xEZXRhY2hTaGFkZXIgICAg
ICAgICAgICAgICAgICBAMzUKKyAgICBnbERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgIEAz
OQorICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgQDQwCisgICAgZ2xEcmF3QXJy
YXlzICAgICAgICAgICAgICAgICAgICBANDEKKyAgICBnbERyYXdFbGVtZW50cyAgICAgICAgICAg
ICAgICAgIEA0MgorICAgIGdsRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgQDQzCisgICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICBANDQKKyAgICBnbEZpbmlzaCAgICAgICAg
ICAgICAgICAgICAgICAgIEA0NQorICAgIGdsRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAg
QDQ2CisgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAgICAgICBANDcKKyAgICBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEICAgICAgICAgIEA0OAorICAgIGdsRnJvbnRGYWNlICAgICAgICAgICAg
ICAgICAgICAgQDQ5CisgICAgZ2xHZW5CdWZmZXJzICAgICAgICAgICAgICAgICAgICBANTAKKyAg
ICBnbEdlbkZyYW1lYnVmZmVycyAgICAgICAgICAgICAgIEA1MgorICAgIGdsR2VuUmVuZGVyYnVm
ZmVycyAgICAgICAgICAgICAgQDUzCisgICAgZ2xHZW5UZXh0dXJlcyAgICAgICAgICAgICAgICAg
ICBANTQKKyAgICBnbEdlbmVyYXRlTWlwbWFwICAgICAgICAgICAgICAgIEA1MQorICAgIGdsR2V0
QWN0aXZlQXR0cmliICAgICAgICAgICAgICAgQDU1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtICAg
ICAgICAgICAgICBANTYKKyAgICBnbEdldEF0dGFjaGVkU2hhZGVycyAgICAgICAgICAgIEA1Nwor
ICAgIGdsR2V0QXR0cmliTG9jYXRpb24gICAgICAgICAgICAgQDU4CisgICAgZ2xHZXRCb29sZWFu
diAgICAgICAgICAgICAgICAgICBANTkKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcml2ICAgICAg
ICAgIEA2MAorICAgIGdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICAgQDYxCisgICAgZ2xH
ZXRGbG9hdHYgICAgICAgICAgICAgICAgICAgICBANjIKKyAgICBnbEdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2ICAgQDYzCisgICAgZ2xHZXRJbnRlZ2VydiAgICAgICAgICAgICAg
ICAgICBANjQKKyAgICBnbEdldFByb2dyYW1JbmZvTG9nICAgICAgICAgICAgIEA2NgorICAgIGds
R2V0UHJvZ3JhbWl2ICAgICAgICAgICAgICAgICAgQDY1CisgICAgZ2xHZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdiAgICBANjcKKyAgICBnbEdldFNoYWRlckluZm9Mb2cgICAgICAgICAgICAgIEA2
OQorICAgIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ICAgICAgQDcwCisgICAgZ2xHZXRTaGFk
ZXJTb3VyY2UgICAgICAgICAgICAgICBANzEKKyAgICBnbEdldFNoYWRlcml2ICAgICAgICAgICAg
ICAgICAgIEA2OAorICAgIGdsR2V0U3RyaW5nICAgICAgICAgICAgICAgICAgICAgQDcyCisgICAg
Z2xHZXRUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICBANzMKKyAgICBnbEdldFRleFBhcmFtZXRl
cml2ICAgICAgICAgICAgIEA3NAorICAgIGdsR2V0VW5pZm9ybUxvY2F0aW9uICAgICAgICAgICAg
QDc3CisgICAgZ2xHZXRVbmlmb3JtZnYgICAgICAgICAgICAgICAgICBANzUKKyAgICBnbEdldFVu
aWZvcm1pdiAgICAgICAgICAgICAgICAgIEA3NgorICAgIGdsR2V0VmVydGV4QXR0cmliUG9pbnRl
cnYgICAgICAgQDgwCisgICAgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAgICAgICAgICAgICBANzgKKyAg
ICBnbEdldFZlcnRleEF0dHJpYml2ICAgICAgICAgICAgIEA3OQorICAgIGdsSGludCAgICAgICAg
ICAgICAgICAgICAgICAgICAgQDgxCisgICAgZ2xJc0J1ZmZlciAgICAgICAgICAgICAgICAgICAg
ICBAODIKKyAgICBnbElzRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgIEA4MworICAgIGdsSXNG
cmFtZWJ1ZmZlciAgICAgICAgICAgICAgICAgQDg0CisgICAgZ2xJc1Byb2dyYW0gICAgICAgICAg
ICAgICAgICAgICBAODUKKyAgICBnbElzUmVuZGVyYnVmZmVyICAgICAgICAgICAgICAgIEA4Ngor
ICAgIGdsSXNTaGFkZXIgICAgICAgICAgICAgICAgICAgICAgQDg3CisgICAgZ2xJc1RleHR1cmUg
ICAgICAgICAgICAgICAgICAgICBAODgKKyAgICBnbExpbmVXaWR0aCAgICAgICAgICAgICAgICAg
ICAgIEA4OQorICAgIGdsTGlua1Byb2dyYW0gICAgICAgICAgICAgICAgICAgQDkwCisgICAgZ2xQ
aXhlbFN0b3JlaSAgICAgICAgICAgICAgICAgICBAOTEKKyAgICBnbFBvbHlnb25PZmZzZXQgICAg
ICAgICAgICAgICAgIEA5MgorICAgIGdsUmVhZFBpeGVscyAgICAgICAgICAgICAgICAgICAgQDkz
CisgICAgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgICAgICAgICBAOTQKKyAgICBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UgICAgICAgICAgIEA5NQorICAgIGdsU2FtcGxlQ292ZXJhZ2UgICAgICAgICAg
ICAgICAgQDk2CisgICAgZ2xTY2lzc29yICAgICAgICAgICAgICAgICAgICAgICBAOTcKKyAgICBn
bFNoYWRlckJpbmFyeSAgICAgICAgICAgICAgICAgIEA5OAorICAgIGdsU2hhZGVyU291cmNlICAg
ICAgICAgICAgICAgICAgQDk5CisgICAgZ2xTdGVuY2lsRnVuYyAgICAgICAgICAgICAgICAgICBA
MTAwCisgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlICAgICAgICAgICBAMTAxCisgICAgZ2xTdGVu
Y2lsTWFzayAgICAgICAgICAgICAgICAgICBAMTAyCisgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRl
ICAgICAgICAgICBAMTAzCisgICAgZ2xTdGVuY2lsT3AgICAgICAgICAgICAgICAgICAgICBAMTA0
CisgICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAgICAgICAgICAgICBAMTA1CisgICAgZ2xUZXhJbWFn
ZTJEICAgICAgICAgICAgICAgICAgICBAMTA2CisgICAgZ2xUZXhQYXJhbWV0ZXJmICAgICAgICAg
ICAgICAgICBAMTA3CisgICAgZ2xUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICAgICBAMTA4Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJpICAgICAgICAgICAgICAgICBAMTA5CisgICAgZ2xUZXhQYXJhbWV0
ZXJpdiAgICAgICAgICAgICAgICBAMTEwCisgICAgZ2xUZXhTdWJJbWFnZTJEICAgICAgICAgICAg
ICAgICBAMTExCisgICAgZ2xVbmlmb3JtMWYgICAgICAgICAgICAgICAgICAgICBAMTEyCisgICAg
Z2xVbmlmb3JtMWZ2ICAgICAgICAgICAgICAgICAgICBAMTEzCisgICAgZ2xVbmlmb3JtMWkgICAg
ICAgICAgICAgICAgICAgICBAMTE0CisgICAgZ2xVbmlmb3JtMWl2ICAgICAgICAgICAgICAgICAg
ICBAMTE1CisgICAgZ2xVbmlmb3JtMmYgICAgICAgICAgICAgICAgICAgICBAMTE2CisgICAgZ2xV
bmlmb3JtMmZ2ICAgICAgICAgICAgICAgICAgICBAMTE3CisgICAgZ2xVbmlmb3JtMmkgICAgICAg
ICAgICAgICAgICAgICBAMTE4CisgICAgZ2xVbmlmb3JtMml2ICAgICAgICAgICAgICAgICAgICBA
MTE5CisgICAgZ2xVbmlmb3JtM2YgICAgICAgICAgICAgICAgICAgICBAMTIwCisgICAgZ2xVbmlm
b3JtM2Z2ICAgICAgICAgICAgICAgICAgICBAMTIxCisgICAgZ2xVbmlmb3JtM2kgICAgICAgICAg
ICAgICAgICAgICBAMTIyCisgICAgZ2xVbmlmb3JtM2l2ICAgICAgICAgICAgICAgICAgICBAMTIz
CisgICAgZ2xVbmlmb3JtNGYgICAgICAgICAgICAgICAgICAgICBAMTI0CisgICAgZ2xVbmlmb3Jt
NGZ2ICAgICAgICAgICAgICAgICAgICBAMTI1CisgICAgZ2xVbmlmb3JtNGkgICAgICAgICAgICAg
ICAgICAgICBAMTI2CisgICAgZ2xVbmlmb3JtNGl2ICAgICAgICAgICAgICAgICAgICBAMTI3Cisg
ICAgZ2xVbmlmb3JtTWF0cml4MmZ2ICAgICAgICAgICAgICBAMTI4CisgICAgZ2xVbmlmb3JtTWF0
cml4M2Z2ICAgICAgICAgICAgICBAMTI5CisgICAgZ2xVbmlmb3JtTWF0cml4NGZ2ICAgICAgICAg
ICAgICBAMTMwCisgICAgZ2xVc2VQcm9ncmFtICAgICAgICAgICAgICAgICAgICBAMTMxCisgICAg
Z2xWYWxpZGF0ZVByb2dyYW0gICAgICAgICAgICAgICBAMTMyCisgICAgZ2xWZXJ0ZXhBdHRyaWIx
ZiAgICAgICAgICAgICAgICBAMTMzCisgICAgZ2xWZXJ0ZXhBdHRyaWIxZnYgICAgICAgICAgICAg
ICBAMTM0CisgICAgZ2xWZXJ0ZXhBdHRyaWIyZiAgICAgICAgICAgICAgICBAMTM1CisgICAgZ2xW
ZXJ0ZXhBdHRyaWIyZnYgICAgICAgICAgICAgICBAMTM2CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZiAg
ICAgICAgICAgICAgICBAMTM3CisgICAgZ2xWZXJ0ZXhBdHRyaWIzZnYgICAgICAgICAgICAgICBA
MTM4CisgICAgZ2xWZXJ0ZXhBdHRyaWI0ZiAgICAgICAgICAgICAgICBAMTM5CisgICAgZ2xWZXJ0
ZXhBdHRyaWI0ZnYgICAgICAgICAgICAgICBAMTQwCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
ICAgICAgICAgICBAMTQxCisgICAgZ2xWaWV3cG9ydCAgICAgICAgICAgICAgICAgICAgICBAMTQy
CisKKyAgICA7IEV4dGVuc2lvbnMKKyAgICBnbFRleEltYWdlM0RPRVMJCQkJCUAxNDMKKyAgICAK
KyAgICA7IEVHTCBkZXBlbmRlbmNpZXMKKyAgICBnbENyZWF0ZUNvbnRleHQJCQkJCUAxNDQgTk9O
QU1FCisgICAgZ2xEZXN0cm95Q29udGV4dAkJCQlAMTQ1IE5PTkFNRQorICAgIGdsTWFrZUN1cnJl
bnQJCQkJCUAxNDYgTk9OQU1FCisgICAgZ2xHZXRDdXJyZW50Q29udGV4dAkJCQlAMTQ3IE5PTkFN
RQorICAgIGdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNw
cm9qCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5
cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9ImxpYkdMRVN2MiINCisJ
UHJvamVjdEdVSUQ9IntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9Ig0KKwlS
b290TmFtZXNwYWNlPSJsaWJHTEVTdjIiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0
RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZv
cm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVz
Pg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24N
CisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25E
aXIpJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENv
bmZpZ3VyYXRpb25OYW1lKSINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlDaGFyYWN0
ZXJTZXQ9IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRv
b2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCisJ
CQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01JRExUb29sIg0KKwkJCS8+DQorCQkJ
PFRvb2wNCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJT3B0aW1pemF0aW9uPSIw
Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAk
KFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NF
Q1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVgiDQorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIg0K
KwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KKwkJ
CQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCisJCQkJV2FybmluZ0xldmVsPSIzIg0KKwkJCQlE
ZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIg0KKwkJCQlEZWJ1Z0luZm9ybWF0
aW9uRm9ybWF0PSI0Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVz
b3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291
cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5r
RXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0K
KwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJEM2R4OS5saWIiDQorCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMiINCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiDQorCQkJ
CUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJ
CQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9u
PSIwIg0KKwkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFt
ZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0
VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJ
Lz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRv
b2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1l
PSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9z
dEJ1aWxkRXZlbnRUb29sIg0KKwkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtt
a2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsm
I3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZxdW90
OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7
JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Ig0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+
DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJT3V0cHV0
RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIg0KKwkJCUludGVy
bWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiDQorCQkJQ29uZmlndXJhdGlv
blR5cGU9IjIiDQorCQkJQ2hhcmFjdGVyU2V0PSIxIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXph
dGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkv
Pg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIN
CisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8
VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlPcHRpbWl6YXRpb249IjIi
DQorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIg0KKwkJCQlBZGRpdGlvbmFsSW5jbHVk
ZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1
ZGUiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7
X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5N
QVg7X1NFQ1VSRV9TQ0w9MCINCisJCQkJUnVudGltZUxpYnJhcnk9IjAiDQorCQkJCVVzZVByZWNv
bXBpbGVkSGVhZGVyPSIwIg0KKwkJCQlXYXJuaW5nTGV2ZWw9IjMiDQorCQkJCURldGVjdDY0Qml0
UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiDQorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9
IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBp
bGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxl
clRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wi
DQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0
aW9uYWxEZXBlbmRlbmNpZXM9IkQzZHg5LmxpYiINCisJCQkJTGlua0luY3JlbWVudGFsPSIxIg0K
KwkJCQlJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPSJmYWxzZSINCisJCQkJTW9kdWxlRGVmaW5p
dGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiDQorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0i
dHJ1ZSINCisJCQkJU3ViU3lzdGVtPSIyIg0KKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQor
CQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQorCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0i
MSINCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQorCQkJCVRhcmdldE1hY2hpbmU9
IjEiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0K
KwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wN
CisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9
IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9v
bCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJ
CS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJCUNv
bW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpciku
LlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVv
dDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5c
bGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChP
dXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwk
KENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gw
QTsiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJ
PFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwkJPEZpbHRlcg0KKwkJ
CU5hbWU9IlNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lk
bDtocGo7YmF0O2FzbTthc214Ig0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1
LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cQmxpdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXENvbnRleHQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGRlYnVnLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVi
dWZmZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxsaWJHTEVTdjIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRl
ci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXFRleHR1cmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWx0ZXINCisJCQkJTmFtZT0iR2VvbWV0cnkiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJl
bGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGR4OS5jcHAiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLlxn
ZW9tZXRyeVxJbmRleERhdGFNYW5hZ2VyLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XFZlcnRleERhdGFNYW5hZ2Vy
LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0ZXI+
DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KKwkJCUZpbHRlcj0iaDtocHA7
aHh4O2htO2lubDtpbmM7eHNkIg0KKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJE
LTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9Ig0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cQmxpdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxCdWZmZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVT
MlxnbDIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMnBsYXRm
b3JtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuXG1haW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cbWF0aHV0aWwuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFRleHR1cmUuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cdXRp
bGl0aWVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJH
ZW9tZXRyeSINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21l
dHJ5XGJhY2tlbmQuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGR4OS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQor
CQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFuYWdl
ci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cZ2VvbWV0cnlcdmVydGV4Y29udmVyc2lvbi5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcVmVydGV4RGF0YU1h
bmFnZXIuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVyPg0KKwkJPC9GaWx0
ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLlxsaWJHTEVTdjIuZGVmIg0KKwkJCT4N
CisJCTwvRmlsZT4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zp
c3VhbFN0dWRpb1Byb2plY3Q+DQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCShyZXZpc2lvbiAwKQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQg
YW5kIG1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGliRUdM
L1N1cmZhY2UuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorCitzdGF0
aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsKKworQk9PTCBXSU5BUEkg
RGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVk
KQoreworICAgIHN3aXRjaCAocmVhc29uKQorICAgIHsKKyAgICAgIGNhc2UgRExMX1BST0NFU1Nf
QVRUQUNIOgorICAgICAgICB7CisgICAgICAgICAgICBjdXJyZW50VExTID0gVGxzQWxsb2MoKTsK
KworICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRFWEVTKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgK
KyAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJyZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVv
ZihnbDo6Q3VycmVudCkpOworCisgICAgICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKKwor
ICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRleHQgPSBOVUxMOworICAgICAgICAgICAgICAg
IGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKKyAgICAgICAgeworICAg
ICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAg
ICAgICAgICBpZiAoY3VycmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2Nh
bEZyZWUoKEhMT0NBTCljdXJyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgICAgICB7CisgICAg
ICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUbHNG
cmVlKGN1cnJlbnRUTFMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK25hbWVz
cGFjZSBnbAorewordm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKK3sKKyAgICBDdXJyZW50ICpjdXJy
ZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgY3VycmVudC0+
Y29udGV4dCA9IGNvbnRleHQ7CisgICAgY3VycmVudC0+ZGlzcGxheSA9IGRpc3BsYXk7CisKKyAg
ICBpZiAoY29udGV4dCAmJiBkaXNwbGF5ICYmIHN1cmZhY2UpCisgICAgeworICAgICAgICBjb250
ZXh0LT5tYWtlQ3VycmVudChkaXNwbGF5LCBzdXJmYWNlKTsKKyAgICB9Cit9CisKK0NvbnRleHQg
KmdldENvbnRleHQoKQoreworICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7CisKKyAgICByZXR1cm4gY3VycmVudC0+Y29udGV4dDsKK30KKwor
ZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCkKK3sKKyAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1
cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOworCisgICAgcmV0dXJuIGN1cnJlbnQtPmRp
c3BsYXk7Cit9CisKK0lEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpCit7CisgICAgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOworCisgICAgcmV0dXJuIGRpc3BsYXktPmdl
dERldmljZSgpOworfQorfQorCisvLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKK3ZvaWQgZXJyb3Io
R0xlbnVtIGVycm9yQ29kZSkKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsR2V0Q3Vy
cmVudENvbnRleHQoKTsKKworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChlcnJvckNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRU5VTToK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRFbnVtKCk7CisgICAgICAgICAgICBn
bDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZW51bVxuIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfVkFMVUU6CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkVmFsdWUoKTsKKyAgICAgICAgICAgIGdsOjp0cmFjZSgi
XHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCB2YWx1ZVxuIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJc
dCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvcmRPdXRPZk1lbW9yeSgpOworICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEgRXJy
b3IgZ2VuZXJhdGVkOiBvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKKyAgICAgICAg
ICAgIGdsOjp0cmFjZSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBmcmFtZWJ1ZmZlciBv
cGVyYXRpb25cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZp
c2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1haW4uaDogTWFuYWdlbWVudCBv
ZiB0aHJlYWQtbG9jYWwgZGF0YS4KKworI2lmbmRlZiBMSUJHTEVTVjJfTUFJTl9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfTUFJTl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkVHTC9E
aXNwbGF5LmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
Z2wKK3sKK3N0cnVjdCBDdXJyZW50Cit7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXk7Cit9OworCit2b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRl
eHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKKworQ29u
dGV4dCAqZ2V0Q29udGV4dCgpOworZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCk7CisKK0lEaXJl
Y3QzRERldmljZTkgKmdldERldmljZSgpOworfQorCit2b2lkIGVycm9yKEdMZW51bSBlcnJvckNv
ZGUpOworCit0ZW1wbGF0ZTxjbGFzcyBUPgorY29uc3QgVCAmZXJyb3IoR0xlbnVtIGVycm9yQ29k
ZSwgY29uc3QgVCAmcmV0dXJuVmFsdWUpCit7CisgICAgZXJyb3IoZXJyb3JDb2RlKTsKKworICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX01BSU5fSF8K
SW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVu
Y3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJHTEVT
VjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIGdsCit7Citp
bmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAgcmV0dXJuICh4ICYgKHggLSAxKSkgPT0g
MCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBsb2cyKGludCB4KQoreworICAgIGludCBy
ID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSByKys7CisgICAgcmV0dXJuIHI7Cit9CisK
K2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5zaWduZWQgaW50IHgpCit7CisgICAgaWYg
KHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOworICAgIHggfD0geCA+PiAyOworICAgIHgg
fD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAgIHggfD0geCA+PiAxNjsKKyAgICB4Kys7
CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKK3sK
KyAgICByZXR1cm4geCA8IDAgPyAwIDogKHggPiAxID8gMSA6IHgpOworfQorCit0ZW1wbGF0ZTxj
b25zdCBpbnQgbj4KK2lubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIgLSBuKTsKKworICAgIGlm
ICh4ID4gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBtYXg7CisgICAgfQorICAgIGVsc2UgaWYg
KHggPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KShtYXggKiB4ICsgMC41Zik7CisgICAgfQor
fQorfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL3V0
aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIg
dXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKwor
I2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaW5jbHVk
ZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
KworbmFtZXNwYWNlIGdsCit7CisKK2ludCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgor
ICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2Ug
R0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0JP
T0xfVkVDMzoKKyAgICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0Ogor
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKKyAgICAgICAgICByZXR1cm4gOTsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDoKKyAgICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZhdWx0OgorICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29t
cG9uZW50VHlwZShHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgICAgcmV0dXJuIEdM
X0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgIGNh
c2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZF
QzM6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICAgIHJldHVybiBHTF9JTlQ7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0
dXJuIEdMX05PTkU7Cit9CisKK3NpemVfdCBVbmlmb3JtVHlwZVNpemUoR0xlbnVtIHR5cGUpCit7
CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgcmV0dXJuIHNp
emVvZihHTGJvb2xlYW4pOworICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIHNpemVvZihHTGZs
b2F0KTsKKyAgICAgIGNhc2UgR0xfSU5UOiAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgIH0K
KworICAgIHJldHVybiBVbmlmb3JtVHlwZVNpemUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkp
ICogVW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworfQorCitpbnQgVmFyaWFibGVSb3dDb3Vu
dChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBH
TF9OT05FOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNh
c2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBj
YXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHJldHVybiAyOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgVmFyaWFibGVDb2x1bW5D
b3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9OT05FOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICAgIHJl
dHVybiAyOworICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgQWxsb2NhdGVGaXJz
dEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXpl
LCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9
IGJpdHNTaXplKTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBp
bnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAgeworICAg
ICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmJp
dHMgfD0gbWFzazsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAgICAg
bWFzayA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK0dMc2l6ZWkgQ29tcHV0
ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBh
bGlnbm1lbnQpCit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVu
dCkpOworCisgICAgR0xzaXplaSByYXdQaXRjaCA9IENvbXB1dGVQaXhlbFNpemUoZm9ybWF0LCB0
eXBlKSAqIHdpZHRoOworICAgIHJldHVybiAocmF3UGl0Y2ggKyBhbGlnbm1lbnQgLSAxKSAmIH4o
YWxpZ25tZW50IC0gMSk7Cit9CisKKy8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiBh
IHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQoraW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25l
ZCBjaGFyKTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNpemVv
Zih1bnNpZ25lZCBjaGFyKTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0
dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7CisgICAgICAgICAgY2FzZSBHTF9SR0I6ICAg
ICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOworICAgICAgICAgIGNh
c2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKKyAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitib29sIElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICByZXR1cm4gKHRhcmdl
dCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWik7Cit9CisKK2Jvb2wgSXNUZXh0dXJlVGFyZ2V0KEdMZW51
bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKK30KKworLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgorYm9vbCBDaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAg
ICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0JBKTsKKworICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKKyAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKKworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfQorCituYW1lc3Bh
Y2UgZXMyZHgKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFy
aXNvbikKK3sKKyAgICBEM0RDTVBGVU5DIGQzZENvbXAgPSBEM0RDTVBfQUxXQVlTOworICAgIHN3
aXRjaCAoY29tcGFyaXNvbikKKyAgICB7CisgICAgICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21w
ID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FMV0FZUzogICBk
M2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0xFU1M6
ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xFU1NFUVVBTDsgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNEQ01QX0VRVUFMOyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVI7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0dFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0dSRUFURVJFUVVB
TDsgYnJlYWs7CisgICAgICBjYXNlIEdMX05PVEVRVUFMOiBkM2RDb21wID0gRDNEQ01QX05PVEVR
VUFMOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBkM2RDb21wOworfQorCitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9y
IGNvbG9yKQoreworICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5y
ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmJsdWUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5hbHBoYSkpOworfQorCitE
M0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCkKK3sKKyAgICBEM0RCTEVORCBk
M2RCbGVuZCA9IEQzREJMRU5EX1pFUk87CisKKyAgICBzd2l0Y2ggKGJsZW5kKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5E
X1pFUk87ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FOiAgICAgICAgICAgICAg
ICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09ORTsgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NS
Q0NPTE9SOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjog
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0NPTE9SOyAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RD
T0xPUjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjogICAg
ICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RDT0xPUjsgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhB
OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQTogICAgICBk
M2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhBOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
RFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RBTFBIQTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RC
bGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9SOyAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOiBkM2RCbGVu
ZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09OU1RB
TlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9SOyAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9
IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1JDX0FMUEhB
X1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBU0FUOyAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQz
ZEJsZW5kOworfQorCitEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKQor
eworICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOworCisgICAgc3dp
dGNoIChibGVuZE9wKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfU1VCVFJB
Q1Q7ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6IGQzZEJs
ZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNUOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGQzZEJsZW5kT3A7Cit9CisKK0QzRFNU
RU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApCit7CisgICAgRDNEU1RF
TkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOworCisgICAgc3dpdGNoIChz
dGVuY2lsT3ApCisgICAgeworICAgICAgY2FzZSBHTF9aRVJPOiAgICAgIGQzZFN0ZW5jaWxPcCA9
IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfS0VFUDogICAgICBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX1JFUExBQ0U7IGJyZWFrOwor
ICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNS
U0FUOyBicmVhazsKKyAgICAgIGNhc2UgR0xfREVDUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RT
VEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3Rl
bmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9JTkNS
X1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSOyAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVDUjsgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBkM2RTdGVuY2lsT3A7Cit9CisKK0QzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3Jh
cChHTGVudW0gd3JhcCkKK3sKKyAgICBEM0RURVhUVVJFQUREUkVTUyBkM2RXcmFwID0gRDNEVEFE
RFJFU1NfV1JBUDsKKworICAgIHN3aXRjaCAod3JhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JF
UEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19DTEFN
UDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6ICAgZDNkV3JhcCA9IEQz
RFRBRERSRVNTX01JUlJPUjsgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiBkM2RXcmFwOworfQorCitEM0RDVUxMIENvbnZlcnRDdWxsTW9k
ZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpCit7CisgICAgRDNEQ1VMTCBjdWxs
ID0gRDNEQ1VMTF9DQ1c7CisgICAgc3dpdGNoIChjdWxsRmFjZSkKKyAgICB7CisgICAgICBjYXNl
IEdMX0ZST05UOgorICAgICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxM
X0NXIDogRDNEQ1VMTF9DQ1cpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkFDSzoK
KyAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DQ1cgOiBEM0RD
VUxMX0NXKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgor
ICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAvLyBjdWxsaW5nIHdpbGwgYmUgaGFuZGxlZCBk
dXJpbmcgZHJhdworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIGN1bGw7Cit9CisKK0RXT1JEIENvbnZlcnRDb2xvck1hc2so
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKK3sKKyAgICByZXR1
cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKKyAgICAgICAgICAg
KGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKKyAgICAgICAgICAgKGJs
dWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKKyAgICAgICAgICAgKGFscGhh
ID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOworfQorCitEM0RURVhUVVJFRklMVEVS
VFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpCit7CisgICAgRDNEVEVYVFVS
RUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICBzd2l0Y2ggKG1h
Z0ZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9IEQz
RFRFWEZfUE9JTlQ7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmlsdGVy
ID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZDNkTWFnRmlsdGVyOworfQorCit2b2lkIENvbnZlcnRNaW5G
aWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRl
ciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKG1p
bkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICpkM2RNaW5G
aWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9O
T05FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICAqZDNk
TWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX05PTkU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9O
RUFSRVNUOgorICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKKyAgICAgICAg
KmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RU
RVhGX0xJTkVBUjsKKyAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICAg
ICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOworICAgICAgICAqZDNkTWlwRmlsdGVyID0g
RDNEVEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX0xJTkVBUjoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOworICAg
ICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7CisgICAg
ICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5j
aWxGb3JtYXQpCit7CisgICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBEM0RGTVRfRDI0RlM4OgorICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIHJldHVy
biA4OworICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAg
ICBjYXNlIEQzREZNVF9EMTVTMToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEQzREZN
VF9EMTZfTE9DS0FCTEU6CisgICAgICBjYXNlIEQzREZNVF9EMzI6CisgICAgICBjYXNlIEQzREZN
VF9EMjRYODoKKyAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6CisgICAgICBjYXNlIEQz
REZNVF9EMTY6CisgICAgICAgIHJldHVybiAwOworLy8gICAgICBjYXNlIEQzREZNVF9EMzJfTE9D
S0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5CisvLyAgICAgIGNhc2UgRDNE
Rk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1bnNp
Z25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0
Y2ggKGNvbG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAgICAgICByZXR1cm4gMTsK
KyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6
CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgIHJldHVybiAwOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVk
IGludCBHZXRSZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNv
bG9yRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgorICAgICAg
ICByZXR1cm4gMTA7CisgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgorICAgICAgICByZXR1cm4gODsKKyAgICAgIGNhc2UgRDNERk1UX0ExUjVH
NUI1OgorICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1
QjU6CisgICAgICAgIHJldHVybiA1OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBHZXRHcmVlblNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KQoreworICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCisgICAgeworICAg
ICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CisgICAgICAgIHJldHVybiAxMDsKKyAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAg
IHJldHVybiA4OworICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICBjYXNlIEQzREZN
VF9YMVI1RzVCNToKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6
CisgICAgICAgIHJldHVybiA2OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKKyAgICB7CisgICAgICBj
YXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKKyAgICAgICAgcmV0dXJuIDEwOworICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKKyAgICAgICAgcmV0
dXJuIDg7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgIGNhc2UgRDNERk1UX1I1
RzZCNToKKyAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgorICAgICAgICByZXR1cm4gNTsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGRlcHRoRm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJM
RTogIHJldHVybiAxNjsKKyAgICAgIGNhc2UgRDNERk1UX0QzMjogICAgICAgICAgIHJldHVybiAz
MjsKKyAgICAgIGNhc2UgRDNERk1UX0QxNVMxOiAgICAgICAgIHJldHVybiAxNTsKKyAgICAgIGNh
c2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1UX0Qy
NFg4OiAgICAgICAgIHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6ICAgICAg
IHJldHVybiAyNDsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjogICAgICAgICAgIHJldHVybiAxNjsK
KyAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6IHJldHVybiAzMjsKKyAgICAgIGNhc2Ug
RDNERk1UX0QyNEZTODogICAgICAgIHJldHVybiAyNDsKKy8vICAgICAgY2FzZSBEM0RGTVRfRDMy
X0xPQ0tBQkxFOiAgcmV0dXJuIDMyOyAgIC8vIEQzRDlFeCBvbmx5CisvLyAgICAgIGNhc2UgRDNE
Rk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiAwOyAgICAvLyBEM0Q5RXggb25seQorICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkg
cHJpbWl0aXZlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZ
UEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpCit7CisgICAgc3dp
dGNoIChwcmltaXRpdmVUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAg
ICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKKyAgICAgICAgKmQzZFByaW1p
dGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9MSU5FUzoKKyAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsKKyAg
ICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLyAyOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTElORV9MT09QOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlw
ZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0
aXZlQ291bnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgorICAg
ICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAxOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RS
SUFOR0xFTElTVDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQg
LyAzOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6CisgICAg
ICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKKyAgICAgICAgKmQz
ZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAyOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgorICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQz
RFBUX1RSSUFOR0xFRkFOOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVD
b3VudCAtIDI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitEM0RGT1JNQVQgQ29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfUkdCQTQ6CisgICAgICBjYXNlIEdMX1JHQjVfQTE6ICAg
ICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBHTF9SR0I1NjU6
ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7CisgICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDE2OgorICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgcmV0dXJu
IEQzREZNVF9EMjRTODsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVy
biBEM0RGTVRfQThSOEc4Qjg7CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xF
U3YyL3V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGls
aXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMu
CisKKyNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElM
SVRJRVNfSAorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNp
bmNsdWRlIDxkM2Q5Lmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgQ29sb3I7CisKK2lu
dCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOworR0xlbnVtIFVuaWZvcm1Db21w
b25lbnRUeXBlKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtVHlwZVNpemUoR0xlbnVtIHR5
cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOworCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2ln
bmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQg
Yml0c1NpemUpOworCitpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSk7CitHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRh
cmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgSXNUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQp
OworYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
KTsKKworfQorCituYW1lc3BhY2UgZXMyZHgKK3sKKworRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFy
aXNvbihHTGVudW0gY29tcGFyaXNvbik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9y
IGNvbG9yKTsKK0QzREJMRU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKTsKK0QzREJM
RU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApOworRDNEU1RFTkNJTE9QIENvbnZl
cnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CitEM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0
VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOworRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVt
IGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKTsKK0RXT1JEIENvbnZlcnRDb2xvck1hc2soYm9v
bCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CitEM0RURVhUVVJFRklM
VEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpOwordm9pZCBDb252ZXJ0
TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5G
aWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpOwordW5zaWduZWQgaW50
IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldFJl
ZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRHcmVlblNpemUo
RDNERk9STUFUIGNvbG9yRm9ybWF0KTsKK3Vuc2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JN
QVQgY29sb3JGb3JtYXQpOwordW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVw
dGhGb3JtYXQpOwordW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2ls
Rm9ybWF0KTsKK2Jvb2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUs
IEdMc2l6ZWkgcHJpbWl0aXZlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBS
SU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwor
RDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CisKK30K
KworI2VuZGlmICAvLyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IEFOR0xFL3NyYy9saWJH
TEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9t
ZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdlciwg
YSBjbGFzcyB0aGF0CisvLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBmb3Ig
aW5kZXggYnVmZmVycy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFN
YW5hZ2VyLmgiCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorCituYW1lc3BhY2UKK3sKKyAgICBlbnVt
IHsgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSA9IDQwOTYgKiBzaXplb2YoR0x1aW50KSB9Owor
fQorCituYW1lc3BhY2UgZ2wKK3sKKworSW5kZXhEYXRhTWFuYWdlcjo6SW5kZXhEYXRhTWFuYWdl
cihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNrZW5kKQorICA6IG1Db250ZXh0
KGNvbnRleHQpLCBtQmFja2VuZChiYWNrZW5kKSwgbUludEluZGljZXNTdXBwb3J0ZWQoYmFja2Vu
ZC0+c3VwcG9ydEludEluZGljZXMoKSkKK3sKKyAgICBtQ291bnRpbmdCdWZmZXIgPSBOVUxMOwor
ICAgIG1Db3VudGluZ0J1ZmZlclNpemUgPSAwOworCisgICAgbUxpbmVMb29wQnVmZmVyID0gTlVM
TDsKKworICAgIG1TdHJlYW1CdWZmZXJTaG9ydCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZl
cihJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAgICBp
ZiAobUludEluZGljZXNTdXBwb3J0ZWQpCisgICAgeworICAgICAgICBtU3RyZWFtQnVmZmVySW50
ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUs
IEdMX1VOU0lHTkVEX0lOVCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdHJl
YW1CdWZmZXJJbnQgPSBOVUxMOworICAgIH0KK30KKworSW5kZXhEYXRhTWFuYWdlcjo6fkluZGV4
RGF0YU1hbmFnZXIoKQoreworICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyU2hvcnQ7CisgICAgZGVs
ZXRlIG1TdHJlYW1CdWZmZXJJbnQ7CisgICAgZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKKyAgICBk
ZWxldGUgbUxpbmVMb29wQnVmZmVyOworfQorCituYW1lc3BhY2UKK3sKKwordGVtcGxhdGUgPGNs
YXNzIElucHV0SW5kZXhUeXBlLCBjbGFzcyBPdXRwdXRJbmRleFR5cGU+Cit2b2lkIGNvcHlJbmRp
Y2VzKGNvbnN0IElucHV0SW5kZXhUeXBlICppbiwgR0xzaXplaSBjb3VudCwgT3V0cHV0SW5kZXhU
eXBlICpvdXQsIEdMdWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5kZXgpCit7CisgICAgSW5w
dXRJbmRleFR5cGUgZmlyc3QgPSAqaW47CisgICAgR0x1aW50IG1pbkluZGV4U29GYXIgPSBmaXJz
dDsKKyAgICBHTHVpbnQgbWF4SW5kZXhTb0ZhciA9IGZpcnN0OworCisgICAgZm9yIChHTHNpemVp
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtaW5JbmRleFNvRmFy
ID4gKmluKSBtaW5JbmRleFNvRmFyID0gKmluOworICAgICAgICBpZiAobWF4SW5kZXhTb0ZhciA8
ICppbikgbWF4SW5kZXhTb0ZhciA9ICppbjsKKworICAgICAgICAqb3V0KysgPSAqaW4rKzsKKyAg
ICB9CisKKyAgICAvLyBJdCBtaWdodCBiZSBhIGxpbmUgbG9vcCwgc28gY29weSB0aGUgbG9vcCBp
bmRleC4KKyAgICAqb3V0ID0gZmlyc3Q7CisKKyAgICAqbWluSW5kZXggPSBtaW5JbmRleFNvRmFy
OworICAgICptYXhJbmRleCA9IG1heEluZGV4U29GYXI7Cit9CisKK30KKworR0xlbnVtIEluZGV4
RGF0YU1hbmFnZXI6OnByZVJlbmRlclZhbGlkYXRlKEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwg
R0xzaXplaSBjb3VudCwgQnVmZmVyICphcnJheUVsZW1lbnRCdWZmZXIsIGNvbnN0IHZvaWQgKmlu
ZGljZXMsIFRyYW5zbGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpCit7CisgICAgQVNTRVJUKHR5
cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFIHx8IHR5
cGUgPT0gR0xfVU5TSUdORURfSU5UKTsKKyAgICBBU1NFUlQoY291bnQgPiAwKTsKKworICAgIGlm
IChhcnJheUVsZW1lbnRCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNpemVpPihpbmRpY2VzKTsKKworICAgICAgICBpZiAo
dHlwZVNpemUodHlwZSkgKiBjb3VudCArIG9mZnNldCA+IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90
PihhcnJheUVsZW1lbnRCdWZmZXItPnNpemUoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgfQorCisgICAgICAgIGluZGljZXMg
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oYXJyYXlFbGVtZW50QnVmZmVyLT5kYXRhKCkp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIHRyYW5zbGF0ZWQtPmNvdW50ID0gY291bnQ7CisKKyAg
ICBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlID0gc3BhY2VSZXF1aXJlZCh0eXBlLCBjb3VudCk7
CisKKyAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnN0cmVhbUliID0gcHJlcGFyZUluZGV4QnVm
ZmVyKHR5cGUsIHJlcXVpcmVkU3BhY2UpOworCisgICAgc2l6ZV90IG9mZnNldDsKKyAgICB2b2lk
ICpvdXRwdXQgPSBzdHJlYW1JYi0+bWFwKHJlcXVpcmVkU3BhY2UsICZvZmZzZXQpOworCisgICAg
dHJhbnNsYXRlZC0+YnVmZmVyID0gc3RyZWFtSWI7CisgICAgdHJhbnNsYXRlZC0+b2Zmc2V0ID0g
b2Zmc2V0OworICAgIHRyYW5zbGF0ZWQtPmluZGV4U2l6ZSA9IGluZGV4U2l6ZSh0eXBlKTsKKwor
ICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICBjb25zdCBH
THVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKTsKKyAgICAg
ICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKworICAg
ICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAm
dHJhbnNsYXRlZC0+bWF4SW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VO
U0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIGNvbnN0IEdMdWludCAqaW4gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKTsKKworICAgICAgICBpZiAobUludEluZGljZXNTdXBw
b3J0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdWludCAqb3V0ID0gc3RhdGljX2Nhc3Q8
R0x1aW50Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgY29weUluZGljZXMoaW4sIGNvdW50LCBv
dXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdoZW4gMzItYml0
IGluZGljZXMgYXJlIHVuc3VwcG9ydGVkLCBmYWtlIHRoZW0gYnkgdHJ1bmNhdGluZyB0byAxNi1i
aXQuCisKKyAgICAgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+
KG91dHB1dCk7CisKKyAgICAgICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJh
bnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgR0x1c2hvcnQgKmluID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKTsKKyAgICAgICAgR0x1c2hvcnQgKm91dCA9
IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKworICAgICAgICBjb3B5SW5kaWNlcyhp
biwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5k
ZXgpOworICAgIH0KKworICAgIHN0cmVhbUliLT51bm1hcCgpOworCisgICAgcmV0dXJuIEdMX05P
X0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xl
bnVtIHR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCAm
JiBtSW50SW5kaWNlc1N1cHBvcnRlZCkgPyBzaXplb2YoR0x1aW50KSA6IHNpemVvZihHTHVzaG9y
dCk7Cit9CisKK3N0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0
eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdMdWJ5
dGUpOworICAgIH0KK30KKworc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1
aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGNv
dW50ICsgMSkgKiBpbmRleFNpemUodHlwZSk7IC8vICsxIGJlY2F1c2Ugd2UgYWx3YXlzIGxlYXZl
IGFuIGV4dHJhIGZvciBsaW5lIGxvb3BzCit9CisKK1RyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqSW5k
ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4QnVmZmVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVf
dCByZXF1aXJlZFNwYWNlKQoreworICAgIGJvb2wgdXNlMzIgPSAodHlwZSA9PSBHTF9VTlNJR05F
RF9JTlQgJiYgbUludEluZGljZXNTdXBwb3J0ZWQpOworCisgICAgVHJhbnNsYXRlZEluZGV4QnVm
ZmVyICpzdHJlYW1JYiA9IHVzZTMyID8gbVN0cmVhbUJ1ZmZlckludCA6IG1TdHJlYW1CdWZmZXJT
aG9ydDsKKworICAgIGlmIChyZXF1aXJlZFNwYWNlID4gc3RyZWFtSWItPnNpemUoKSkKKyAgICB7
CisgICAgICAgIHN0ZDo6c2l6ZV90IG5ld1NpemUgPSBzdGQ6Om1heChyZXF1aXJlZFNwYWNlLCAy
ICogc3RyZWFtSWItPnNpemUoKSk7CisKKyAgICAgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpu
ZXdTdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIobmV3U2l6ZSwgdXNl
MzIgPyBHTF9VTlNJR05FRF9JTlQgOiBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAgICAgICAgZGVs
ZXRlIHN0cmVhbUliOworCisgICAgICAgIHN0cmVhbUliID0gbmV3U3RyZWFtQnVmZmVyOworCisg
ICAgICAgIGlmICh1c2UzMikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlcklu
dCA9IHN0cmVhbUliOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbVN0cmVhbUJ1ZmZlclNob3J0ID0gc3RyZWFtSWI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzdHJlYW1JYi0+cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOworCisgICAgcmV0dXJu
IHN0cmVhbUliOworfQorCitHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFsaWRh
dGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRleERh
dGEgKmluZGV4SW5mbykKK3sKKyAgICBpZiAoY291bnQgPj0gNjU1MzUpIHJldHVybiBHTF9PVVRf
T0ZfTUVNT1JZOworCisgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIHsKKyAgICAg
ICAgLy8gRm9yIGxpbmUgbG9vcHMsIGNyZWF0ZSBhIHNpbmdsZS11c2UgYnVmZmVyIHRoYXQgcnVu
cyAwIC0gY291bnQtMSwgMC4KKyAgICAgICAgZGVsZXRlIG1MaW5lTG9vcEJ1ZmZlcjsKKyAgICAg
ICAgbUxpbmVMb29wQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKChjb3VudCsx
KSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKKworICAgICAg
ICB1bnNpZ25lZCBzaG9ydCAqaW5kaWNlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0ICo+
KG1MaW5lTG9vcEJ1ZmZlci0+bWFwKCkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRpY2VzW2NvdW50XSA9IDA7CisKKyAgICAgICAgbUxpbmVMb29w
QnVmZmVyLT51bm1hcCgpOworCisgICAgICAgIGluZGV4SW5mby0+YnVmZmVyID0gbUxpbmVMb29w
QnVmZmVyOworICAgICAgICBpbmRleEluZm8tPmNvdW50ID0gY291bnQgKyAxOworICAgICAgICBp
bmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgIH0KKyAgICBlbHNlIGlmIChtQ291
bnRpbmdCdWZmZXJTaXplIDwgY291bnQpCisgICAgeworICAgICAgICBtQ291bnRpbmdCdWZmZXJT
aXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8R0xzaXplaT4oY2VpbFBvdzIoY291bnQpKSwgbUNv
dW50aW5nQnVmZmVyU2l6ZSoyKTsKKworICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwor
ICAgICAgICBtQ291bnRpbmdCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIoY291
bnQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7CisKKyAgICAg
ICAgdW5zaWduZWQgc2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCAq
PihtQ291bnRpbmdCdWZmZXItPm1hcCgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGljZXNbaV0gPSBpOworICAg
ICAgICB9CisKKyAgICAgICAgbUNvdW50aW5nQnVmZmVyLT51bm1hcCgpOworCisgICAgICAgIGlu
ZGV4SW5mby0+YnVmZmVyID0gbUNvdW50aW5nQnVmZmVyOworICAgICAgICBpbmRleEluZm8tPmNv
dW50ID0gY291bnQ7CisgICAgICAgIGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3VudCAtIDE7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZGV4SW5mby0+YnVmZmVyID0gbUNvdW50
aW5nQnVmZmVyOworICAgICAgICBpbmRleEluZm8tPmNvdW50ID0gY291bnQ7CisgICAgICAgIGlu
ZGV4SW5mby0+bWF4SW5kZXggPSBjb3VudCAtIDE7CisgICAgfQorCisgICAgaW5kZXhJbmZvLT5p
bmRleFNpemUgPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgIGluZGV4SW5mby0+bWluSW5k
ZXggPSAwOworICAgIGluZGV4SW5mby0+b2Zmc2V0ID0gMDsKKworICAgIHJldHVybiBHTF9OT19F
UlJPUjsKK30KKworfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERh
dGFNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9J
bmRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dl
b21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oOiBEZWZp
bmVzIHRoZSBJbmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKKy8vIHJ1bnMgdGhlIEJ1ZmZl
ciB0cmFuc2xhdGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgorCisjaWZuZGVmIExJQkdM
RVNWMl9HRU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9HRU9N
RVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8
Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xh
c3MgQnVmZmVyOworY2xhc3MgQnVmZmVyQmFja0VuZDsKK2NsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1
ZmZlcjsKK3N0cnVjdCBGb3JtYXRDb252ZXJ0ZXI7CisKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhE
YXRhCit7CisgICAgR0x1aW50IG1pbkluZGV4OworICAgIEdMdWludCBtYXhJbmRleDsKKyAgICBH
THVpbnQgY291bnQ7CisgICAgR0x1aW50IGluZGV4U2l6ZTsKKworICAgIFRyYW5zbGF0ZWRJbmRl
eEJ1ZmZlciAqYnVmZmVyOworICAgIEdMc2l6ZWkgb2Zmc2V0OworfTsKKworY2xhc3MgSW5kZXhE
YXRhTWFuYWdlcgoreworICBwdWJsaWM6CisgICAgSW5kZXhEYXRhTWFuYWdlcihDb250ZXh0ICpj
b250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNrZW5kKTsKKyAgICB+SW5kZXhEYXRhTWFuYWdlcigp
OworCisgICAgR0xlbnVtIHByZVJlbmRlclZhbGlkYXRlKEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgR0xzaXplaSBjb3VudCwgQnVmZmVyICphcnJheUVsZW1lbnRCdWZmZXIsIGNvbnN0IHZvaWQg
KmluZGljZXMsIFRyYW5zbGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpOworICAgIEdMZW51bSBw
cmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgVHJh
bnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKKworICBwcml2YXRlOgorICAgIHN0ZDo6c2l6
ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKKyAgICBz
dGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xlbnVtIHR5cGUpIGNvbnN0
OworICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291
bnQpIGNvbnN0OworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqcHJlcGFyZUluZGV4QnVmZmVy
KEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKTsKKworICAgIENvbnRleHQg
Km1Db250ZXh0OworICAgIEJ1ZmZlckJhY2tFbmQgKm1CYWNrZW5kOworCisgICAgYm9vbCBtSW50
SW5kaWNlc1N1cHBvcnRlZDsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1
ZmZlclNob3J0OworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlckludDsK
KworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbUNvdW50aW5nQnVmZmVyOworICAgIEdMc2l6
ZWkgbUNvdW50aW5nQnVmZmVyU2l6ZTsKKworICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbUxp
bmVMb29wQnVmZmVyOworfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllf
SU5ERVhEQVRBTUFOQUdFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9W
ZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9n
ZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
bGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L1ZlcnRleERh
dGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQK
Ky8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+
CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZm
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorCisjaW5jbHVkZSAibGliR0xF
U3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5k
ZXhEYXRhTWFuYWdlci5oIgorCituYW1lc3BhY2UKK3sKKyAgICBlbnVtIHsgSU5JVElBTF9TVFJF
QU1fQlVGRkVSX1NJWkUgPSAxMDI0KjEwMjQgfTsKK30KKworbmFtZXNwYWNlIGdsCit7CisKK1Zl
cnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZm
ZXJCYWNrRW5kICpiYWNrZW5kKQorICAgIDogbUNvbnRleHQoY29udGV4dCksIG1CYWNrZW5kKGJh
Y2tlbmQpLCBtRGlydHlDdXJyZW50VmFsdWVzKHRydWUpLCBtQ3VycmVudFZhbHVlT2Zmc2V0KDAp
Cit7CisgICAgbVN0cmVhbUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXIoSU5J
VElBTF9TVFJFQU1fQlVGRkVSX1NJWkUpOworICAgIHRyeQorICAgIHsKKyAgICAgICAgbUN1cnJl
bnRWYWx1ZUJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJv
KDQgKiBzaXplb2YoZmxvYXQpICogTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICB9CisgICAgY2F0
Y2ggKC4uLikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOworICAgICAgICB0
aHJvdzsKKyAgICB9Cit9CisKK1ZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1hbmFnZXIo
KQoreworICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOworICAgIGRlbGV0ZSBtQ3VycmVudFZhbHVl
QnVmZmVyOworfQorCitzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IFZlcnRleERhdGFN
YW5hZ2VyOjpnZXRBY3RpdmVBdHRyaWJzKCkgY29uc3QKK3sKKyAgICBzdGQ6OmJpdHNldDxNQVhf
VkVSVEVYX0FUVFJJQlM+IGFjdGl2ZTsKKworICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4Kysp
CisgICAgeworICAgICAgICBhY3RpdmVbYXR0cmlidXRlSW5kZXhdID0gKHByb2dyYW0tPmdldFNl
bWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YWN0aXZlOworfQorCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZVJlbmRlclZhbGlkYXRl
KEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkKQoreworICAg
IGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJp
YkJsb2NrKCk7CisgICAgY29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBhY3Rp
dmVBdHRyaWJzID0gZ2V0QWN0aXZlQXR0cmlicygpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghYWN0aXZlQXR0
cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkICYmIGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVy
ICE9IDAgJiYgIW1Db250ZXh0LT5nZXRCdWZmZXIoYXR0cmlic1tpXS5tQm91bmRCdWZmZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgIH0KKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAg
ICB0cmFuc2xhdGVkW2ldLmVuYWJsZWQgPSBhY3RpdmVBdHRyaWJzW2ldOworICAgIH0KKworICAg
IGJvb2wgdXNlc0N1cnJlbnRWYWx1ZXMgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0
cmlic1tpXSAmJiAhYXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
dXNlc0N1cnJlbnRWYWx1ZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBIYW5kbGUgdGhlIGlkZW50aXR5LW1hcHBlZCBhdHRyaWJ1dGVzLgor
ICAgIC8vIFByb2Nlc3MgYXJyYXkgYXR0cmlidXRlcy4KKworICAgIHN0ZDo6c2l6ZV90IHJlcXVp
cmVkU3BhY2UgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmIGF0dHJpYnNb
aV0ubUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVkU3BhY2UgKz0gc3Bh
Y2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAocmVxdWlyZWRTcGFjZSA+IG1TdHJlYW1CdWZmZXItPnNpemUoKSkKKyAgICB7CisgICAgICAg
IHN0ZDo6c2l6ZV90IG5ld1NpemUgPSBzdGQ6Om1heChyZXF1aXJlZFNwYWNlLCAzICogbVN0cmVh
bUJ1ZmZlci0+c2l6ZSgpIC8gMik7IC8vIDEuNSB4IG1TdHJlYW1CdWZmZXItPnNpemUoKSBpcyBh
cmJpdHJhcnkgYW5kIHNob3VsZCBiZSBjaGVja2VkIHRvIHNlZSB3ZSBkb24ndCBoYXZlIHRvbyBt
YW55IHJlYWxsb2NhdGlvbnMuCisKKyAgICAgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqbmV3
U3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlcihuZXdTaXplKTsKKwor
ICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKKyAgICAgICAgbVN0cmVhbUJ1ZmZlciA9IG5l
d1N0cmVhbUJ1ZmZlcjsKKyAgICB9CisKKyAgICBtU3RyZWFtQnVmZmVyLT5yZXNlcnZlU3BhY2Uo
cmVxdWlyZWRTcGFjZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0
cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9ybWF0Q29udmVydGVy
IGZvcm1hdENvbnZlcnRlciA9IG1CYWNrZW5kLT5nZXRGb3JtYXRDb252ZXJ0ZXIoYXR0cmlic1tp
XS5tVHlwZSwgYXR0cmlic1tpXS5tU2l6ZSwgYXR0cmlic1tpXS5tTm9ybWFsaXplZCk7CisKKyAg
ICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ubm9uQXJyYXkgPSBmYWxzZTsKKyAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0udHlwZSA9IGF0dHJpYnNbaV0ubVR5cGU7CisgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLnNpemUgPSBhdHRyaWJzW2ldLm1TaXplOworICAgICAgICAgICAgdHJhbnNsYXRlZFtp
XS5ub3JtYWxpemVkID0gYXR0cmlic1tpXS5tTm9ybWFsaXplZDsKKyAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0uc3RyaWRlID0gZm9ybWF0Q29udmVydGVyLm91dHB1dFZlcnRleFNpemU7CisgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLmJ1ZmZlciA9IG1TdHJlYW1CdWZmZXI7CisKKyAgICAgICAg
ICAgIHNpemVfdCBpbnB1dFN0cmlkZSA9IGludGVycHJldEdsU3RyaWRlKGF0dHJpYnNbaV0pOwor
ICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRTaXplID0gdHlwZVNpemUoYXR0cmlic1tpXS5tVHlw
ZSkgKiBhdHRyaWJzW2ldLm1TaXplOworCisgICAgICAgICAgICB2b2lkICpvdXRwdXQgPSBtU3Ry
ZWFtQnVmZmVyLT5tYXAoc3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCksICZ0cmFuc2xh
dGVkW2ldLm9mZnNldCk7CisKKyAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0OworICAgICAg
ICAgICAgaWYgKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gbUNvbnRleHQtPmdldEJ1ZmZlcihhdHRyaWJzW2ld
Lm1Cb3VuZEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcmVpbnRl
cnByZXRfY2FzdDxzaXplX3Q+KGF0dHJpYnNbaV0ubVBvaW50ZXIpOworCisgICAgICAgICAgICAg
ICAgLy8gQmVmb3JlIHdlIGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgc2l6ZSBiZWxvdywgbWFrZSBz
dXJlIGl0IGNhbiBiZSBjb21wdXRlZCB3aXRob3V0IGludGVnZXIgb3ZlcmZsb3cuCisgICAgICAg
ICAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAtIHN0
YXJ0IDwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGNvdW50KQorICAgICAgICAgICAgICAgICAg
ICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLyBpbnB1dFN0cmlk
ZSA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGFydCArIGNvdW50IC0gMSkgLy8gaXQncyBh
IHByZXJlcXVpc2l0ZSB0aGF0IGNvdW50ID49IDEsIHNvIHN0YXJ0K2NvdW50LTEgPj0gMC4KKyAg
ICAgICAgICAgICAgICAgICAgfHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1h
eCgpIC0gb2Zmc2V0IDwgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEpCisgICAgICAg
ICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAt
IGVsZW1lbnRTaXplIDwgb2Zmc2V0ICsgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEp
ICsgZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBt
U3RyZWFtQnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KG9mZnNldCArIGlucHV0U3RyaWRlICogKHN0YXJ0ICsgY291bnQgLSAxKSArIGVsZW1lbnRTaXpl
ID4gYnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtU3RyZWFtQnVmZmVyLT51bm1hcCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlucHV0ID0gYXR0cmlic1tpXS5tUG9pbnRlcjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaW5w
dXRTdHJpZGUgKiBzdGFydDsKKworICAgICAgICAgICAgaWYgKGZvcm1hdENvbnZlcnRlci5pZGVu
dGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9ybWF0Q29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNv
dW50LCBvdXRwdXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RyZWFtQnVmZmVy
LT51bm1hcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzZXNDdXJyZW50VmFsdWVz
KQorICAgIHsKKyAgICAgICAgcHJvY2Vzc05vbkFycmF5QXR0cmlidXRlcyhhdHRyaWJzLCBhY3Rp
dmVBdHRyaWJzLCB0cmFuc2xhdGVkLCBjb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX05P
X0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xl
bnVtIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfQllURTogY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdMYnl0ZSk7Cisg
ICAgICBjYXNlIEdMX1NIT1JUOiBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9m
KEdMc2hvcnQpOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIHNpemVvZihHTGZpeGVkKTsK
KyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgIH0KK30KKwor
c3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OmludGVycHJldEdsU3RyaWRlKGNvbnN0IEF0
dHJpYnV0ZVN0YXRlICZhdHRyaWIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0dHJpYi5tU3RyaWRl
ID8gYXR0cmliLm1TdHJpZGUgOiB0eXBlU2l6ZShhdHRyaWIubVR5cGUpICogYXR0cmliLm1TaXpl
OworfQorCisvLyBSb3VuZCB1cCB4ICg+PTApIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIG11bHRp
cGxlICg+MCkuCisvLyAwIHJvdW5kcyB1cCB0byAwLgorc3RkOjpzaXplX3QgVmVydGV4RGF0YU1h
bmFnZXI6OnJvdW5kVXAoc3RkOjpzaXplX3QgeCwgc3RkOjpzaXplX3QgbXVsdGlwbGUpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHggPj0gMCk7CisgICAgQVNTRVJUKG11bHRpcGxlID4gMCk7CisKKyAg
ICBzdGQ6OnNpemVfdCByZW1haW5kZXIgPSB4ICUgbXVsdGlwbGU7CisgICAgaWYgKHJlbWFpbmRl
ciAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHggKyBtdWx0aXBsZSAtIHJlbWFpbmRlcjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfQorCitz
dGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChjb25zdCBBdHRyaWJ1
dGVTdGF0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBtYXhWZXJ0ZXgpIGNvbnN0Cit7CisgICAgc3Rk
OjpzaXplX3Qgc2l6ZSA9IG1CYWNrZW5kLT5nZXRGb3JtYXRDb252ZXJ0ZXIoYXR0cmliLm1UeXBl
LCBhdHRyaWIubVNpemUsIGF0dHJpYi5tTm9ybWFsaXplZCkub3V0cHV0VmVydGV4U2l6ZTsKKyAg
ICBzaXplICo9IG1heFZlcnRleDsKKworICAgIHJldHVybiByb3VuZFVwKHNpemUsIDQgKiBzaXpl
b2YoR0xmbG9hdCkpOworfQorCit2b2lkIFZlcnRleERhdGFNYW5hZ2VyOjpwcm9jZXNzTm9uQXJy
YXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBjb25zdCBzdGQ6OmJp
dHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFuc2xhdGVkQXR0cmli
dXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCkKK3sKKyAgICBpZiAobURpcnR5Q3Vy
cmVudFZhbHVlcykKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHRvdGFsU2l6ZSA9IDQgKiBz
aXplb2YoZmxvYXQpICogTUFYX1ZFUlRFWF9BVFRSSUJTOworCisgICAgICAgIG1DdXJyZW50VmFs
dWVCdWZmZXItPnJlc2VydmVTcGFjZSh0b3RhbFNpemUpOworCisgICAgICAgIGZsb2F0KiBjdXJy
ZW50VmFsdWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtQ3VycmVudFZhbHVlQnVmZmVyLT5tYXAo
dG90YWxTaXplLCAmbUN1cnJlbnRWYWx1ZU9mZnNldCkpOworCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHTF9GTE9BVHg0IGlzIHN1cHBvcnRlZCBieSB0aGUg
YmFjay1lbmQuIChGb3IgRDNEOSwgaXQgaXMgYSBtYW5kYXRvcnkgZm9ybWF0LikKKyAgICAgICAg
ICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOwor
ICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMV0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMV07CisgICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCsyXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVsyXTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzNdID0gYXR0cmli
c1tpXS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICB9CisKKyAgICAgICAgbUN1cnJlbnRWYWx1
ZUJ1ZmZlci0+dW5tYXAoKTsKKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWN0aXZlQXR0
cmlic1tpXSAmJiAhYXR0cmlic1tpXS5tRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5ub25BcnJheSA9IHRydWU7CisKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0uYnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKKworICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS50eXBlID0gR0xfRkxPQVQ7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNpemUgPSA0
OworICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5ub3JtYWxpemVkID0gZmFsc2U7CisgICAgICAg
ICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CisgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
Lm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXQgKyA0ICogc2l6ZW9mKGZsb2F0KSAqIGk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0
cnkvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMv
bGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGdlb21ldHJ5L1ZlcnRleERhdGFN
YW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKKy8v
IHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgorCisjaWZuZGVmIExJQkdMRVNW
Ml9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVU
UllfVkVSVEVYREFUQU1BTkFHRVJfSF8KKworI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxj
c3RkZGVmPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFz
cyBCdWZmZXI7CitjbGFzcyBCdWZmZXJCYWNrRW5kOworY2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlcjsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworc3RydWN0IEZvcm1hdENvbnZlcnRl
cjsKK3N0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOworCitjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdl
cgoreworICBwdWJsaWM6CisgICAgVmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwg
QnVmZmVyQmFja0VuZCAqYmFja2VuZCk7CisgICAgflZlcnRleERhdGFNYW5hZ2VyKCk7CisKKyAg
ICB2b2lkIGRpcnR5Q3VycmVudFZhbHVlcygpIHsgbURpcnR5Q3VycmVudFZhbHVlcyA9IHRydWU7
IH0KKworICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGludCBzdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicyk7CisKKyAgcHJpdmF0ZToK
KyAgICBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IGdldEFjdGl2ZUF0dHJpYnMoKSBj
b25zdDsKKworICAgIHZvaWQgcHJvY2Vzc05vbkFycmF5QXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1
dGVTdGF0ZSAqYXR0cmlicywgY29uc3Qgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiAm
YWN0aXZlQXR0cmlicywgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgc3RkOjpzaXpl
X3QgY291bnQpOworCisgICAgc3RkOjpzaXplX3QgdHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0
OworICAgIHN0ZDo6c2l6ZV90IGludGVycHJldEdsU3RyaWRlKGNvbnN0IEF0dHJpYnV0ZVN0YXRl
ICZhdHRyaWIpIGNvbnN0OworCisgICAgc3RkOjpzaXplX3Qgcm91bmRVcChzdGQ6OnNpemVfdCB4
LCBzdGQ6OnNpemVfdCBtdWx0aXBsZSkgY29uc3Q7CisgICAgc3RkOjpzaXplX3Qgc3BhY2VSZXF1
aXJlZChjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBtYXhWZXJ0ZXgp
IGNvbnN0OworCisgICAgQ29udGV4dCAqbUNvbnRleHQ7CisgICAgQnVmZmVyQmFja0VuZCAqbUJh
Y2tlbmQ7CisKKyAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICptU3RyZWFtQnVmZmVyOworCisg
ICAgYm9vbCBtRGlydHlDdXJyZW50VmFsdWVzOworICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50VmFs
dWVPZmZzZXQ7ICAgICAgICAgICAgLy8gT2Zmc2V0IHdpdGhpbiBtQ3VycmVudFZhbHVlQnVmZmVy
IHRoYXQgdGhlIGN1cnJlbnQgYXR0cmlidXRlIHZhbHVlcyB3ZXJlIGxhc3QgbG9hZGVkIGF0Lgor
ICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1DdXJyZW50VmFsdWVCdWZmZXI7Cit9OworCit9
CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9IXwpJ
bmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCShyZXZpc2lvbiAw
KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZ2VvbWV0cnkvYmFj
a2VuZC5oOiBBYnN0cmFjdCBjbGFzc2VzIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRWZXJ0ZXhC
dWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgorLy8gdGhhdCBtdXN0IGJlIGltcGxlbWVu
dGVkIGJ5IGFueSBBUEktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgQU5HTEUuCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCisKK25hbWVzcGFjZSBnbAoreworCit2b2lkICpUcmFuc2xhdGVkQnVmZmVyOjptYXAo
c3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9mZnNldCkKK3sKKyAgICBB
U1NFUlQocmVxdWlyZWRTcGFjZSA8PSBtQnVmZmVyU2l6ZSk7CisKKyAgICByZXNlcnZlU3BhY2Uo
cmVxdWlyZWRTcGFjZSk7CisKKyAgICAqb2Zmc2V0ID0gbUN1cnJlbnRQb2ludDsKKyAgICBtQ3Vy
cmVudFBvaW50ICs9IHJlcXVpcmVkU3BhY2U7CisKKyAgICByZXR1cm4gc3RyZWFtaW5nTWFwKCpv
ZmZzZXQsIHJlcXVpcmVkU3BhY2UpOworfQorCit2b2lkIFRyYW5zbGF0ZWRCdWZmZXI6OnJlc2Vy
dmVTcGFjZShzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKQoreworICAgIGlmIChtQ3VycmVudFBv
aW50ICsgcmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmVjeWNs
ZSgpOworICAgICAgICBtQ3VycmVudFBvaW50ID0gMDsKKyAgICB9Cit9CisKK30KSW5kZXg6IEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTEwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9iYWNrZW5kLmg6IEFic3Ry
YWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJh
bnNsYXRlZEluZGV4QnVmZmVyCisvLyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYW55IEFQ
SS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KKworI2lmbmRlZiBMSUJHTEVTVjJf
R0VPTUVUUllfQkFDS0VORF9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfQkFDS0VORF9I
XworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXI7CitjbGFzcyBUcmFuc2xhdGVk
SW5kZXhCdWZmZXI7CisKK3N0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKK3sKKyAgICBib29sIGlkZW50
aXR5OworICAgIHN0ZDo6c2l6ZV90IG91dHB1dFZlcnRleFNpemU7CisgICAgdm9pZCAoKmNvbnZl
cnRBcnJheSkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qg
biwgdm9pZCAqb3V0KTsKK307CisKK3N0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCit7CisgICAg
Ym9vbCBlbmFibGVkOworICAgIGJvb2wgbm9uQXJyYXk7CisKKyAgICAvLyBUaGVzZSBhcmUgdGhl
IG9yaWdpbmFsIHVudHJhbnNsYXRlZCB2YWx1ZXMuIChPciBqdXN0IGhhdmUgc29tZSBzb3J0IG9m
IEJ1ZmZlckJhY2tFbmQ6OlRyYW5zbGF0ZWRUeXBlS2V5LikKKyAgICBHTGVudW0gdHlwZTsKKyAg
ICBzdGQ6OnNpemVfdCBzaXplOworICAgIGJvb2wgbm9ybWFsaXplZDsKKworICAgIHN0ZDo6c2l6
ZV90IG9mZnNldDsKKworICAgIHN0ZDo6c2l6ZV90IHN0cmlkZTsgLy8gMCBtZWFucyBub3QgdG8g
YWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAorCisgICAgc3RkOjpzaXplX3Qgc2VtYW50
aWNJbmRleDsKKworICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmJ1ZmZlcjsKK307CisKK2Ns
YXNzIEJ1ZmZlckJhY2tFbmQKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkJ1ZmZlckJhY2tF
bmQoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0SW50SW5kaWNlcygpID0gMDsKKwor
ICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKHN0
ZDo6c2l6ZV90IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIg
KmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSkgPSAwOwor
ICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJbmRleEJ1ZmZlcihzdGQ6
OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSkgPSAwOworICAgIHZpcnR1YWwgRm9ybWF0Q29udmVy
dGVyIGdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9v
bCBub3JtYWxpemUpID0gMDsKKworICAgIC8vIEZvciBhbiBpZGVudGl0eS1tYXBwYWJsZSBzdHJl
YW0sIHZlcmlmeSB0aGF0IHRoZSBzdHJpZGUgYW5kIG9mZnNldCBhcmUgb2theS4KKyAgICB2aXJ0
dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0
ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIEdMZW51bSBzZXR1cEluZGljZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwQXR0cmlidXRlc1By
ZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykgPSAwOworfTsKKwor
Y2xhc3MgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNs
YXRlZEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IG1CdWZmZXJTaXplKHNpemUpLCBtQ3VycmVu
dFBvaW50KDApIHsgfQorICAgIHZpcnR1YWwgflRyYW5zbGF0ZWRCdWZmZXIoKSB7IH0KKworICAg
IHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyU2l6ZTsgfQorCisgICAg
dmlydHVhbCB2b2lkICptYXAoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOwor
CisgICAgdm9pZCByZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSk7CisKKyAg
ICB2b2lkICptYXAoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9mZnNl
dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXpl
X3Qgc2l6ZSkgPSAwOworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgbUJ1ZmZlclNpemU7
CisgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRQb2ludDsKKworICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUcmFuc2xhdGVkQnVmZmVyKTsKK307CisKK2NsYXNzIFRyYW5zbGF0ZWRWZXJ0ZXhC
dWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGlj
aXQgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IFRyYW5zbGF0ZWRC
dWZmZXIoc2l6ZSkgeyB9Cit9OworCitjbGFzcyBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgOiBwdWJs
aWMgVHJhbnNsYXRlZEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNsYXRl
ZEluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogVHJhbnNsYXRlZEJ1ZmZlcihzaXplKSB7
IH0KK307CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8K
SW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHJldmlzaW9uIDApCisrKyBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjEzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9keDkuaDogRGlyZWN0
M0QgOS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIuCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvZ2VvbWV0cnkvZHg5LmgiCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCisjZGVmaW5lIEdMX0FQ
SUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKworbmFt
ZXNwYWNlCit7CisvLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0
byBEM0QgZGVjbCB0eXBlOgorLy8KKy8vIEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0
KQorLy8gQllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4
YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKKy8vIFVOU0lHTkVEX0JZVEUgICAgICAg
IFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQorLy8gVU5TSUdORURfQllURS1ub3Jt
ICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBTSE9SVCAgICAg
ICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCisvLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9S
VC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFVOU0lHTkVEX1NIT1JU
ICAgICAgIEZMT0FUIChDYXN0KQorLy8gVU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0g
KElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkg
RkxPQVQgKEZpeGVkVG9GbG9hdCkKKy8vIEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVu
dGl0eSkKKworLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRo
ZSBDIHR5cGVkZWYuIAordGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+IHN0cnVjdCBHTFRvQ1R5cGUg
eyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0JZVEU+IHsgdHlwZWRlZiBH
TGJ5dGUgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURf
QllURT4geyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRv
Q1R5cGU8R0xfU0hPUlQ+IHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlw
ZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+IHsgdHlwZWRlZiBH
THVpbnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+IHsg
dHlwZWRlZiBHTGZsb2F0IHR5cGU7IH07CisKKy8vIFRoaXMgZGlmZmVycyBmcm9tIEQzRERFQ0xU
WVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUgZXhwYW5zaW9uIGlzIGFwcGxpZWQgbGFz
dC4pCitlbnVtIEQzRFZlcnRleFR5cGUKK3sKKyAgICBEM0RWVF9GTE9BVCwKKyAgICBEM0RWVF9T
SE9SVCwKKyAgICBEM0RWVF9TSE9SVF9OT1JNLAorICAgIEQzRFZUX1VCWVRFLAorICAgIEQzRFZU
X1VCWVRFX05PUk0sCisgICAgRDNEVlRfVVNIT1JUX05PUk0KK307CisKKy8vIEQzRFRvQ1R5cGUg
bWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51bSBEM0RWZXJ0ZXhUeXBlKSB0byB0aGUg
Y29ycmVzcG9uZGluZyBDIHR5cGUuCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IEQzRFR5cGU+IHN0
cnVjdCBEM0RUb0NUeXBlIHsgfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNE
VlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQz
RFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRfTk9STT4geyB0eXBlZGVmIHNob3J0IHR5
cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURT4geyB0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VU0hPUlRfTk9STT4geyB0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IHR5cGU7IH07CisKKy8vIEVuY29kZSB0aGUgdHlwZS9zaXplIGNvbWJpbmF0
aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0eXBlL3NpemUgaXQgZXhwYW5kcyB0byBh
IHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIGZpbmFsIHNpemUuCit0
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplPgorc3RydWN0IFdpZGVuUnVsZQor
eworfTsKKwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX0ZMT0FU
LCBzaXplPiAgICAgICAgICA6IGdsOjpOb1dpZGVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQg
c2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6
V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5S
dWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7
IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEUsIHNp
emU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQg
c2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBnbDo6
V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5S
dWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7
IH07CisKKy8vIFZlcnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUg
ZmxhZyBhbmQgdmVydGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBl
ICYgc2l6ZSBjb21iaW5hdGlvbi4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50
IHNpemU+CitzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzCit7Cit9OworCit0ZW1wbGF0ZSA8dW5zaWdu
ZWQgaW50IGNhcGZsYWcsIHVuc2lnbmVkIGludCBkZWNsZmxhZz4KK3N0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXIKK3sKKyAgICBlbnVtIHsgY2FwZmxhZyA9IGNhcGZsYWcgfTsKKyAgICBlbnVt
IHsgZGVjbGZsYWcgPSBkZWNsZmxhZyB9OworfTsKKwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNE
REVDTFRZUEVfRkxPQVQxPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9G
TE9BVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxP
QVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4geyB9
OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFn
c0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0sIDQ+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQRV9V
QllURTROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VT
SE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUMk4s
IEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07CisKKworLy8gVmVydGV4
VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJlZCBh
bmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcykuCit0
ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPgorc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nCit7Cit9OworCit0ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQsIEQz
RFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+CitzdHJ1Y3QgVmVydGV4VHlwZU1hcHBp
bmdCYXNlCit7CisgICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OworICAgIGVudW0g
eyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAg
IC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCB0
cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+ICAg
ICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWRlbnRpdHkKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9S
VCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFsaXpl
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQs
IGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+
IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIEZp
eGVkVG9GbG9hdAordGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQorCisKKy8v
IEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lvblJ1
bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUsIElk
ZW50aXR5LCBGaXhlZFRvRmxvYXQpLgorLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNlbHZl
cyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCisKKy8vIEFsbW9zdCBhbGwgY2Fz
ZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVhbGx5
IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBpbmcp
LgordGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBp
bnQgdG9UeXBlPgorc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNhc3Q8dHlwZW5hbWUgR0xU
b0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBl
PgoreworfTsKKworLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBm
bG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KK3RlbXBsYXRlIDxHTGVudW0gZnJvbVR5
cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDog
Z2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07CisK
Ky8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJl
bnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBy
dWxlcy4KK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2PiB7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4g
OiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKKworLy8gQSAyLXN0YWdlIGNvbnN0
cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVz
dCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCisvLyB3aGV0aGVyIGl0IGlzIG5v
cm1hbGl6ZWQgb3Igbm90LgordGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KK3N0
cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyCit7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgdHJ1ZT4gIDogZ2w6Ok5vcm1h
bGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKK3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVm
YXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBnbDo6U2ltcGxlRGVmYXVsdFZhbHVl
czxUPiB7IH07CisKKy8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNE
IHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQgCit0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Ym9vbCBub3JtYWxpemVkPgorc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVy
dGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8Ym9vbCBu
b3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4g
OiBnbDo6U2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OworCisvLyBQb2xpY3kgcnVsZXMg
Zm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIHRoZSBwcmVm
ZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KKy8vIFRoZSBmYWxsYmFjayBjb252ZXJzaW9u
IHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVzdCBzdXBwb3J0Lgor
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVtIHsgdHlwZSA9IFQ6
OnByZWZlcnJlZCB9OyB9OwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VGYWxsYmFjayB7
IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKKworLy8gQ29udmVydGVyIHRpZXMgaXQg
YWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUgYW5kIGNob2ljZSBv
ZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKKy8vIGl0IHByb3ZpZGVzIGFsbCB0aGUg
bWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRlciwgdGhlIEQzRENB
UFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZworLy8gYW5kIHRoZSBEM0RERUNMVFlQRSBt
ZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRlY2xmbGFnLgordGVt
cGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQgc2l6ZSwgdGVtcGxh
dGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgorc3RydWN0IENvbnZlcnRlcgorICAg
IDogZ2w6OlZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVmZXJlbmNl
UnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUsIHNp
emU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxp
emVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlw
ZW5hbWUgRDNEVG9DVHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5
cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgoreworcHJpdmF0
ZToKKyAgICBlbnVtIHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGlu
Zzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSB9OworICAgIGVudW0geyBkM2RzaXplID0g
V2lkZW5SdWxlPGQzZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07CisKK3B1YmxpYzoKKyAgICBl
bnVtIHsgY2FwZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxh
ZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2Rz
aXplPjo6ZGVjbGZsYWcgfTsKK307CisKK30KKworbmFtZXNwYWNlIGdsCit7CitEeDlCYWNrRW5k
OjpEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmQzZGRldmlj
ZSkKKyAgICA6IG1EZXZpY2UoZDNkZGV2aWNlKQoreworICAgIG1EZXZpY2UtPkFkZFJlZigpOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICsraSkKKyAgICB7
CisgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IHRydWU7CisgICAgICAgIG1TdHJl
YW1GcmVxdWVuY3lbaV0gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOworICAgIH0KKwor
ICAgIG1TdHJlYW1GcmVxdWVuY3lbTUFYX1ZFUlRFWF9BVFRSSUJTXSA9IFNUUkVBTV9GUkVRVUVO
Q1lfVU5JTlNUQU5DRUQ7CisKKyAgICBEM0RDQVBTOSBjYXBzID0gY29udGV4dC0+Z2V0RGV2aWNl
Q2FwcygpOworCisgICAgSURpcmVjdDNEOSAqZDNkT2JqZWN0OworICAgIG1EZXZpY2UtPkdldERp
cmVjdDNEKCZkM2RPYmplY3QpOworCisgICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBpZGVudDsK
KyAgICBkM2RPYmplY3QtPkdldEFkYXB0ZXJJZGVudGlmaWVyKGNhcHMuQWRhcHRlck9yZGluYWws
IDAsICZpZGVudCk7CisgICAgZDNkT2JqZWN0LT5SZWxlYXNlKCk7CisKKyAgICAvLyBJbnN0YW5j
aW5nIGlzIG1hbmRhdG9yeSBmb3IgYWxsIEhXIHdpdGggU00zIHZlcnRleCBzaGFkZXJzLCBidXQg
YXZvaWQgaGFyZHdhcmUgd2hlcmUgaXQgZG9lcyBub3Qgd29yay4KKyAgICBtVXNlSW5zdGFuY2lu
Z0ZvclN0cmlkZVplcm8gPSAoY2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9uID49IEQzRFZTX1ZFUlNJ
T04oMywgMCkgJiYgaWRlbnQuVmVuZG9ySWQgIT0gMHg4MDg2KTsKKyAgICBtU3VwcG9ydEludElu
ZGljZXMgPSAoY2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNikpOworCisgICAgY2hlY2tW
ZXJ0ZXhDYXBzKGNhcHMuRGVjbFR5cGVzKTsKK30KKworRHg5QmFja0VuZDo6fkR4OUJhY2tFbmQo
KQoreworICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKK30KKworYm9vbCBEeDlCYWNrRW5kOjpzdXBw
b3J0SW50SW5kaWNlcygpCit7CisgICAgcmV0dXJuIG1TdXBwb3J0SW50SW5kaWNlczsKK30KKwor
Ly8gSW5pdGlhbGlzZSBhIFRyYW5zbGF0aW9uSW5mbworI2RlZmluZSBUUkFOU0xBVElPTih0eXBl
LCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJl
ZD46OmlkZW50aXR5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQ29udmVy
dGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmZpbmFsU2l6ZSwgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZl
cnJlZD46OmNvbnZlcnRBcnJheSwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVy
PHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAorICAgIH0KKworI2Rl
ZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAg
XAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVk
Pjo6Y2FwZmxhZywgXAorICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQ
cmVmZXJyZWQpLCAgICAgICAgXAorICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXpl
LCBVc2VGYWxsYmFjaykgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9
LCAgICAgXAorICAgIH0KKworY29uc3QgRHg5QmFja0VuZDo6VHJhbnNsYXRpb25EZXNjcmlwdGlv
biBEeDlCYWNrRW5kOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCld
W25vcm1hbGl6ZWRdW3NpemUtMV0KK3sKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfQllU
RSksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUpLAorICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCisgICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBF
KEdMX1VOU0lHTkVEX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfRklYRUQp
LAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GTE9BVCkKK307CisKK3ZvaWQgRHg5QmFj
a0VuZDo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBpKyspCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBrKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtq
XVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUF0
dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZh
bGxiYWNrQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK1RyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKkR4OUJhY2tFbmQ6OmNy
ZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHJldHVybiBuZXcgRHg5
VmVydGV4QnVmZmVyKG1EZXZpY2UsIHNpemUpOworfQorCitUcmFuc2xhdGVkVmVydGV4QnVmZmVy
ICpEeDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6ZV90
IHNpemUpCit7CisgICAgaWYgKG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyKG1EZXZpY2UsIHNpemUpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlclplcm9T
dHJpZGVXb3JrYXJvdW5kKG1EZXZpY2UsIHNpemUpOworICAgIH0KK30KKworVHJhbnNsYXRlZElu
ZGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXpl
LCBHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gbmV3IER4OUluZGV4QnVmZmVyKG1EZXZpY2Us
IHNpemUsIHR5cGUpOworfQorCisvLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJpYnV0ZVR5
cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCit1bnNpZ25lZCBpbnQgRHg5QmFja0VuZDo6
dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOiByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1
cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OworCisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKKyAgICB9Cit9CisKK0Zvcm1hdENvbnZlcnRlciBEeDlC
YWNrRW5kOjpnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUs
IGJvb2wgbm9ybWFsaXplKQoreworICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4
KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZm9ybWF0Q29udmVydGVyOworfQorCitEM0RERUNM
VFlQRSBEeDlCYWNrRW5kOjptYXBBdHRyaWJ1dGVUeXBlKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVf
dCBzaXplLCBib29sIG5vcm1hbGl6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0ZVR5
cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFdLmQzZERlY2xUeXBlOworfQor
Citib29sIER4OUJhY2tFbmQ6OnZhbGlkYXRlU3RyZWFtKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVf
dCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9mZnNldCkgY29uc3QKK3sK
KyAgICAvLyBEM0Q5IHJlcXVpcmVzIHRoZSBzdHJlYW0gb2Zmc2V0IGFuZCBzdHJpZGUgdG8gYmUg
YSBtdWx0aXBsZSBvZiBEV09SRC4KKyAgICByZXR1cm4gKHN0cmlkZSAlIHNpemVvZihEV09SRCkg
PT0gMCAmJiBvZmZzZXQgJSBzaXplb2YoRFdPUkQpID09IDApOworfQorCitJRGlyZWN0M0RWZXJ0
ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkVmVydGV4QnVmZmVy
ICp2YikgY29uc3QKK3sKKyAgICByZXR1cm4gdmIgPyBzdGF0aWNfY2FzdDxEeDlWZXJ0ZXhCdWZm
ZXIqPih2YiktPmdldEJ1ZmZlcigpIDogTlVMTDsKK30KKworSURpcmVjdDNESW5kZXhCdWZmZXI5
ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmliKSBjb25z
dAoreworICAgIHJldHVybiBpYiA/IHN0YXRpY19jYXN0PER4OUluZGV4QnVmZmVyKj4oaWIpLT5n
ZXRCdWZmZXIoKSA6IE5VTEw7Cit9CisKK0dMZW51bSBEeDlCYWNrRW5kOjpzZXR1cEluZGljZXNQ
cmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbykKK3sKKyAgICBtRGV2
aWNlLT5TZXRJbmRpY2VzKGdldER4QnVmZmVyKGluZGV4SW5mby5idWZmZXIpKTsKKyAgICByZXR1
cm4gR0xfTk9fRVJST1I7Cit9CisKK0dMZW51bSBEeDlCYWNrRW5kOjpzZXR1cEF0dHJpYnV0ZXNQ
cmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpCit7CisgICAgSFJF
U1VMVCBocjsKKworICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRU
UklCUysxXTsKKworICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICpuZXh0RWxlbWVudCA9ICZlbGVtZW50
c1swXTsKKworICAgIGZvciAoQllURSBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlN0cmVhbSA9IGkgKyAxOyAgICAvLyBTdHJlYW0gMCBp
cyBza2lwcGVkIGJlY2F1c2UgRDNEIGRvZXMgbm90IHBlcm1pdCBpdCB0byBiZSBhbiBpbnN0YW5j
ZWQgc3RyZWFtLgorICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk9mZnNldCA9IDA7CisgICAgICAg
ICAgICBuZXh0RWxlbWVudC0+VHlwZSA9IHN0YXRpY19jYXN0PEJZVEU+KG1hcEF0dHJpYnV0ZVR5
cGUoYXR0cmlidXRlc1tpXS50eXBlLCBhdHRyaWJ1dGVzW2ldLnNpemUsIGF0dHJpYnV0ZXNbaV0u
bm9ybWFsaXplZCkpOworICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xN
RVRIT0RfREVGQVVMVDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xV
U0FHRV9URVhDT09SRDsKKyAgICAgICAgICAgIG5leHRFbGVtZW50LT5Vc2FnZUluZGV4ID0gYXR0
cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4OworICAgICAgICAgICAgbmV4dEVsZW1lbnQrKzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbmQg
PSBEM0RERUNMX0VORCgpOworICAgICpuZXh0RWxlbWVudCA9IGVuZDsKKworICAgIElEaXJlY3Qz
RFZlcnRleERlY2xhcmF0aW9uOSogdmVydGV4RGVjbGFyYXRpb247CisgICAgaHIgPSBtRGV2aWNl
LT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJnZlcnRleERlY2xhcmF0aW9uKTsK
KyAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbih2ZXJ0ZXhEZWNsYXJhdGlvbik7Cisg
ICAgdmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKKworICAgIG1EZXZpY2UtPlNldFN0cmVh
bVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKKworICAgIGJvb2wgbm9uQXJyYXlBdHRyaWJ1dGVzID0g
ZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubm9uQXJyYXkpIG5vbkFycmF5QXR0cmli
dXRlcyA9IHRydWU7CisKKyAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZShpICsg
MSwgZ2V0RHhCdWZmZXIoYXR0cmlidXRlc1tpXS5idWZmZXIpLCBhdHRyaWJ1dGVzW2ldLm9mZnNl
dCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOworICAgICAgICAgICAgaWYgKCFtQXBwbGllZEF0dHJp
YkVuYWJsZWRbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUFwcGxpZWRBdHRy
aWJFbmFibGVkW2ldID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQXBwbGllZEF0dHJpYkVuYWJsZWRbaV0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNl
KGkgKyAxLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBtQXBwbGllZEF0dHJpYkVuYWJsZWRb
aV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
VXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8pCisgICAgeworICAgICAgICAvLyBXaGVuIHRoZXJl
IGFyZSBubyBzdHJpZGUgemVybyBhdHRyaWJ1dGVzLCB3ZSBkaXNhYmxlIGluc3RhbmNpbmcgc28g
dGhhdCBEcmF3UHJpbWl0aXZlIGNhbiBiZSB1c2VkLgorCisgICAgICAgIGlmIChub25BcnJheUF0
dHJpYnV0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5WzBd
ICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtU3RyZWFtRnJlcXVlbmN5WzBdID0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEOworICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgRDNEU1RSRUFNU09V
UkNFX0lOREVYRUREQVRBIHwgMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxlZCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLm5vbkFycmF5KQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0cmVh
bUZyZXF1ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VEKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVx
dWVuY3lbaSsxXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VEOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSArIDEsIEQzRFNUUkVB
TVNPVVJDRV9JTlNUQU5DRURBVEEgfCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5
W2krMV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbaSsxXSA9
IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhF
RERBVEEgfCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTICsgMTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChtU3RyZWFtRnJlcXVlbmN5W2ldICE9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5
W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkLCBidXQgb3RoZXJ3aXNlIHRoZXJlIGlzIGEg
YnVnZ3kgZHJpdmVyIHRoYXQgd2lsbCBsZWF2ZSBpbnN0YW5jaW5nCisgICAgICAgICAgICAgICAg
ICAgIC8vIGVuYWJsZWQgZm9yIHRoZSBmaXJzdCBkcmF3IGFmdGVyIGl0IGhhcyBiZWVuIHR1cm5l
ZCBvZmYuCisgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
aSwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9fRVJS
T1I7Cit9CisKK0R4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6RHg5VmVydGV4QnVmZmVyKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSkKKyAgICA6IFRyYW5zbGF0
ZWRWZXJ0ZXhCdWZmZXIoc2l6ZSkKK3sKKyAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVW
ZXJ0ZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwg
MCwgRDNEUE9PTF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgaWYgKGhyICE9
IFNfT0spCisgICAgeworICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZl
cnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAgICAgIHRocm93IHN0ZDo6YmFk
X2FsbG9jKCk7CisgICAgfQorfQorCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OkR4OVZl
cnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERX
T1JEIHVzYWdlRmxhZ3MpCisgICAgOiBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHNpemUpCit7Cisg
ICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxh
Z3MsIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgIGlmICho
ciAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg
YSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0aHJvdyBzdGQ6
OmJhZF9hbGxvYygpOworICAgIH0KK30KKworCitEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6
On5EeDlWZXJ0ZXhCdWZmZXIoKQoreworICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKK30K
KworSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpn
ZXRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtVmVydGV4QnVmZmVyOworfQorCit2b2lk
ICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6Om1hcCgpCit7CisgICAgdm9pZCAqbWFwUHRy
OworCisgICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRyLCAwKTsKKworICAgIHJl
dHVybiBtYXBQdHI7Cit9CisKK3ZvaWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjp1bm1h
cCgpCit7CisgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Cit9CisKK3ZvaWQgRHg5QmFja0Vu
ZDo6RHg5VmVydGV4QnVmZmVyOjpyZWN5Y2xlKCkKK3sKKyAgICB2b2lkICpkdW1teTsKKyAgICBt
VmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICBt
VmVydGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4
QnVmZmVyOjpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXpl
KQoreworICAgIHZvaWQgKm1hcFB0cjsKKworICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0
LCBzaXplLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKKworICAgIHJldHVybiBtYXBQ
dHI7Cit9CisKKy8vIE5vcm1hbGx5IFZCcyBhcmUgY3JlYXRlZCB3aXRoIEQzRFVTQUdFX1dSSVRF
T05MWSB8IEQzRFVTQUdFX0RZTkFNSUMsIGJ1dCBzb21lIGhhcmR3YXJlICYgZHJpdmVycyB3b24n
dCByZW5kZXIKKy8vIGlmIGFueSBzdHJpZGUtemVybyBzdHJlYW1zIGFyZSBpbiBEM0RVU0FHRV9E
WU5BTUlDIFZCcywgc28gdGhpcyBwcm92aWRlcyBhIHdheSB0byBjcmVhdGUgc3VjaCBWQnMgd2l0
aCBvbmx5IEQzRFVTQUdFX1dSSVRFT05MWSBzZXQuCisvLyBEM0RMT0NLX0RJU0NBUkQgYW5kIEQz
RExPQ0tfTk9PVkVSV1JJVEUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIEQzRFVTQUdFX0RZTkFNSUMg
VkJzLCBzbyB3ZSBvdmVycmlkZSBtZXRob2RzIHRvIGF2b2lkIHVzaW5nIHRoZXNlIGZsYWdzLgor
RHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OkR4OVZlcnRl
eEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3Rk
OjpzaXplX3Qgc2l6ZSkKKyAgICA6IER4OVZlcnRleEJ1ZmZlcihkZXZpY2UsIHNpemUsIEQzRFVT
QUdFX1dSSVRFT05MWSkKK3sKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXJa
ZXJvU3RyaWRlV29ya2Fyb3VuZDo6cmVjeWNsZSgpCit7Cit9CisKK3ZvaWQgKkR4OUJhY2tFbmQ6
OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpzdHJlYW1pbmdNYXAoc3RkOjpz
aXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKQoreworICAgIHZvaWQgKm1hcFB0cjsKKwor
ICAgIGdldEJ1ZmZlcigpLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgMCk7CisKKyAgICBy
ZXR1cm4gbWFwUHRyOworfQorCitEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6RHg5SW5kZXhC
dWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0g
dHlwZSkKKyAgICA6IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcihzaXplKQoreworICAgIEFTU0VSVCh0
eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKTsKKwor
ICAgIEQzREZPUk1BVCBmb3JtYXQgPSAodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCkgPyBEM0RG
TVRfSU5ERVgxNiA6IEQzREZNVF9JTkRFWDMyOworCisgICAgSFJFU1VMVCBociA9IGRldmljZS0+
Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtSW5kZXhCdWZmZXIsIE5VTEwpOworICAg
IGlmIChociAhPSBTX09LKQorICAgIHsKKyAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9j
YXRpbmcgYW4gaW5kZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB0aHJv
dyBzdGQ6OmJhZF9hbGxvYygpOworICAgIH0KK30KKworRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZm
ZXI6On5EeDlJbmRleEJ1ZmZlcigpCit7CisgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Cit9
CisKK0lEaXJlY3QzREluZGV4QnVmZmVyOSpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6Z2V0
QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluZGV4QnVmZmVyOworfQorCit2b2lkICpE
eDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6bWFwKCkKK3sKKyAgICB2b2lkICptYXBQdHI7CisK
KyAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwgMCk7CisKKyAgICByZXR1cm4g
bWFwUHRyOworfQorCit2b2lkIER4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjp1bm1hcCgpCit7
CisgICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKK30KKwordm9pZCBEeDlCYWNrRW5kOjpEeDlJ
bmRleEJ1ZmZlcjo6cmVjeWNsZSgpCit7CisgICAgdm9pZCAqZHVtbXk7CisgICAgbUluZGV4QnVm
ZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICBtSW5kZXhCdWZm
ZXItPlVubG9jaygpOworfQorCit2b2lkICpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6c3Ry
ZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKK3sKKyAgICB2
b2lkICptYXBQdHI7CisKKyAgICBtSW5kZXhCdWZmZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFw
UHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKKworICAgIHJldHVybiBtYXBQdHI7Cit9CisKK30K
SW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaAkocmV2aXNpb24gMCkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM3
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS9keDkuaDogRGlyZWN0M0QgOS1i
YXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIuCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01F
VFJZX0RYOV9IXworI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hfCisKKyNpbmNsdWRl
IDxkM2Q5Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIER4
OUJhY2tFbmQgOiBwdWJsaWMgQnVmZmVyQmFja0VuZAoreworICBwdWJsaWM6CisgICAgZXhwbGlj
aXQgRHg5QmFja0VuZChDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkM2RkZXZp
Y2UpOworICAgIH5EeDlCYWNrRW5kKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydEludElu
ZGljZXMoKTsKKworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVy
dGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBzaXpl
KTsKKyAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIo
c3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpOworICAgIHZpcnR1YWwgRm9ybWF0Q29udmVy
dGVyIGdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9v
bCBub3JtYWxpemUpOworCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlU3RyZWFtKEdMZW51bSB0
eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9m
ZnNldCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEluZGljZXNQcmVEcmF3KGNv
bnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbyk7CisgICAgdmlydHVhbCBHTGVudW0g
c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1
dGVzKTsKKworICBwcml2YXRlOgorICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CisKKyAg
ICBib29sIG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybzsKKyAgICBib29sIG1TdXBwb3J0SW50
SW5kaWNlczsKKworICAgIGJvb2wgbUFwcGxpZWRBdHRyaWJFbmFibGVkW01BWF9WRVJURVhfQVRU
UklCU107CisKKyAgICBlbnVtIFN0cmVhbUZyZXF1ZW5jeQorICAgIHsKKyAgICAgICAgU1RSRUFN
X0ZSRVFVRU5DWV9VTklOU1RBTkNFRCA9IDAsCisgICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lfSU5E
RVhFRCwKKyAgICAgICAgU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQKKyAgICB9OworCisgICAg
U3RyZWFtRnJlcXVlbmN5IG1TdHJlYW1GcmVxdWVuY3lbTUFYX1ZFUlRFWF9BVFRSSUJTKzFdOwor
CisgICAgc3RydWN0IFRyYW5zbGF0aW9uSW5mbworICAgIHsKKyAgICAgICAgRm9ybWF0Q29udmVy
dGVyIGZvcm1hdENvbnZlcnRlcjsKKyAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7Cisg
ICAgfTsKKworICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKKwor
ICAgIFRyYW5zbGF0aW9uSW5mbyBtQXR0cmlidXRlVHlwZXNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1b
bm9ybWFsaXplZF1bc2l6ZS0xXQorCisgICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24K
KyAgICB7CisgICAgICAgIERXT1JEIGNhcHNGbGFnOworICAgICAgICBUcmFuc2xhdGlvbkluZm8g
cHJlZmVycmVkQ29udmVyc2lvbjsKKyAgICAgICAgVHJhbnNsYXRpb25JbmZvIGZhbGxiYWNrQ29u
dmVyc2lvbjsKKyAgICB9OworCisgICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRl
IG1BdHRyaWJ1dGVUeXBlcy4KKyAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNjcmlwdGlv
biBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRd
OyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZS0xXQorCisgICAgdm9pZCBjaGVja1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKTsKKwor
ICAgIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUpIGNvbnN0OworCisgICAgY2xh
c3MgRHg5VmVydGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIKKyAgICB7
CisgICAgICBwdWJsaWM6CisgICAgICAgIER4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpOworICAgICAgICB2aXJ0dWFsIH5EeDlWZXJ0ZXhC
dWZmZXIoKTsKKworICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBj
b25zdDsKKworICAgICAgcHJvdGVjdGVkOgorICAgICAgICBEeDlWZXJ0ZXhCdWZmZXIoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKTsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5t
YXAoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUp
OworCisgICAgICBwcml2YXRlOgorICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptVmVy
dGV4QnVmZmVyOworICAgIH07CisKKyAgICBjbGFzcyBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRl
V29ya2Fyb3VuZCA6IHB1YmxpYyBEeDlWZXJ0ZXhCdWZmZXIKKyAgICB7CisgICAgICBwdWJsaWM6
CisgICAgICAgIER4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKElEaXJlY3QzRERl
dmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSk7CisKKyAgICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICpzdHJl
YW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKKyAgICB9Owor
CisgICAgY2xhc3MgRHg5SW5kZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEluZGV4QnVmZmVy
CisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBEeDlJbmRleEJ1ZmZlcihJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKTsKKyAgICAgICAg
dmlydHVhbCB+RHg5SW5kZXhCdWZmZXIoKTsKKworICAgICAgICBJRGlyZWN0M0RJbmRleEJ1ZmZl
cjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgdm9pZCAqbWFwKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5n
TWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7CisKKyAgICAgIHByaXZh
dGU6CisgICAgICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOworICAgIH07
CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyICp2YikgY29uc3Q7CisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXREeEJ1
ZmZlcihUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmliKSBjb25zdDsKKworICAgIEQzRERFQ0xUWVBF
IG1hcEF0dHJpYnV0ZVR5cGUoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9y
bWFsaXplZCkgY29uc3Q7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRS
WV9EWDlfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4Y29udmVy
c2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvdmVydGV4
Y29udmVyc2lvbi5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRy
eS92ZXJ0ZXhjb252ZXJzaW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA4IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBnZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGlicmFy
eSBvZiB2ZXJ0ZXggY29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQK
Ky8vIHRoZSBGb3JtYXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29udmVy
c2lvbiBzeXN0ZW0uCisKKyNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWENPTlZFUlNJ
T05fSF8KKyNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWENPTlZFUlNJT05fSF8KKwor
I2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIgLy8gRGVmaW5lcyBJbmRleAorCituYW1lc3BhY2UgZ2wKK3sKKworLy8g
Q29udmVyc2lvbiB0eXBlczoKKy8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlm
IHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3JtLCBmYWxzZSBvdGhlcndpc2UKKy8vIHN0YXRp
YyBVIGNvbnZlcnQoVCk6IGNvbnZlcnQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBpbnB1dCB0
eXBlIHRvIHRoZSBvdXRwdXQgdHlwZQorLy8gdHlwZWRlZiAuLi4gT3V0cHV0VHlwZTogdGhlIHR5
cGUgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJzaW9uCisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3Ry
dWN0IElkZW50aXR5Cit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwor
CisgICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7CisKKyAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkK
KyAgICB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBG
cm9tVCwgY2xhc3MgVG9UPgorc3RydWN0IENhc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBp
ZGVudGl0eSA9IGZhbHNlOworCisgICAgdHlwZWRlZiBUb1QgT3V0cHV0VHlwZTsKKworICAgIHN0
YXRpYyBUb1QgY29udmVydChGcm9tVCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRvVD4oeCk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgQ2Fz
dDxULCBUPgoreworICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gdHJ1ZTsKKworICAg
IHR5cGVkZWYgVCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIFQgY29udmVydChUIHgpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCk7CisgICAgfQorfTsKKwordGVtcGxh
dGUgPGNsYXNzIFQ+CitzdHJ1Y3QgTm9ybWFsaXplCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
aWRlbnRpdHkgPSBmYWxzZTsKKworICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKKworICAg
IHN0YXRpYyBmbG9hdCBjb252ZXJ0KFQgeCkKKyAgICB7CisgICAgICAgIHR5cGVkZWYgc3RkOjpu
dW1lcmljX2xpbWl0czxUPiBOTDsKKyAgICAgICAgZmxvYXQgZiA9IHN0YXRpY19jYXN0PGZsb2F0
Pih4KTsKKworICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IGF0IGNvbXBpbGUgdGltZQor
ICAgICAgICAgICAgLy8gc3RhdGljIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCB0
aGUgZmlyc3QgdGltZSB3ZSBnZXQgaGVyZSwgc3RvcmVzIGl0IHRvIG1lbW9yeSB3aXRoIHN0YXRp
YyBndWFyZCBhbmQgYWxsIHRoYXQuCisgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0g
MS4wZi8oMipzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSsxKTsKKyAgICAgICAgICAgIHJl
dHVybiAoMipmKzEpKmRpdmlzb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZi9OTDo6bWF4KCk7CisgICAgICAgIH0KKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgRnJvbVR5cGUsIHN0ZDo6c2l6ZV90IFNjYWxlQml0cz4KK3N0cnVj
dCBGaXhlZFRvRmxvYXQKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNl
OworCisgICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOworCisgICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoRnJvbVR5cGUgeCkKKyAgICB7CisgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAx
LjBmIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PEZyb21UeXBlPigxKSA8PCBTY2Fs
ZUJpdHMpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpICogZGl2aXNvcjsK
KyAgICB9Cit9OworCisvLyBXaWRlbiB0eXBlczoKKy8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQgaW5pdGlhbFdpZHRoOiBudW1iZXIgb2YgY29tcG9uZW50cyBiZWZvcmUgY29udmVyc2lvbgor
Ly8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmaW5hbFdpZHRoOiBudW1iZXIgb2YgY29tcG9u
ZW50cyBhZnRlciBjb252ZXJzaW9uCisKKy8vIEZsb2F0IGlzIHN1cHBvcnRlZCBhdCBhbnkgc2l6
ZS4KK3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IE5vV2lkZW4KK3sKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE47Cit9OworCisvLyBTSE9SVCwgbm9ybS1TSE9SVCwg
bm9ybS1VTlNJR05FRF9TSE9SVCBhcmUgc3VwcG9ydGVkIGJ1dCBvbmx5IHdpdGggMiBvciA0IGNv
bXBvbmVudHMKK3RlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorc3RydWN0IFdpZGVuVG9FdmVuCit7
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47CisgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOKyhOJjEpOworfTsKKwordGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3QgV2lkZW5Ub0ZvdXIKK3sKKyAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
aXplX3QgZmluYWxXaWR0aCA9IDQ7Cit9OworCisvLyBNb3N0IHR5cGVzIGhhdmUgMCBhbmQgMSB0
aGF0IGFyZSBqdXN0IHRoYXQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3N0cnVjdCBTaW1wbGVEZWZh
dWx0VmFsdWVzCit7CisgICAgc3RhdGljIFQgemVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KDApOyB9CisgICAgc3RhdGljIFQgb25lKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMSk7IH0K
K307CisKKy8vIEJ1dCBub3JtYWxpc2VkIHR5cGVzIG9ubHkgc3RvcmUgWzAsMV0gb3IgWy0xLDFd
IHNvIDEuMCBpcyByZXByZXNlbnRlZCBieSB0aGUgbWF4IHZhbHVlLgordGVtcGxhdGUgPGNsYXNz
IFQ+CitzdHJ1Y3QgTm9ybWFsaXplZERlZmF1bHRWYWx1ZXMKK3sKKyAgICBzdGF0aWMgVCB6ZXJv
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KKyAgICBzdGF0aWMgVCBvbmUoKSB7IHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQorfTsKKworLy8gQ29udmVydGVy
OgorLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVu
dGl0eSB0cmFuc2Zvcm0gKHdpdGggbm8gd2lkZW5pbmcpCisvLyBzdGF0aWMgY29uc3Qgc3RkOjpz
aXplX3QgZmluYWxTaXplOiBudW1iZXIgb2YgYnl0ZXMgcGVyIG91dHB1dCB2ZXJ0ZXgKKy8vIHN0
YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRl
LCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOiBjb252ZXJ0IGFuIGFycmF5IG9mIHZlcnRpY2Vz
LiBJbnB1dCBtYXkgYmUgc3RyaWRlZCwgYnV0IG91dHB1dCB3aWxsIGJlIHVuc3RyaWRlZC4KKwor
dGVtcGxhdGUgPGNsYXNzIEluVCwgY2xhc3MgV2lkZW5SdWxlLCBjbGFzcyBDb252ZXJ0ZXIsIGNs
YXNzIERlZmF1bHRWYWx1ZVJ1bGUgPSBTaW1wbGVEZWZhdWx0VmFsdWVzPEluVD4gPgorc3RydWN0
IFZlcnRleERhdGFDb252ZXJ0ZXIKK3sKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnZlcnRlcjo6
T3V0cHV0VHlwZSBPdXRwdXRUeXBlOworICAgIHR5cGVkZWYgSW5UIElucHV0VHlwZTsKKworICAg
IHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gKFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRoID09
IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCkgJiYgQ29udmVydGVyOjppZGVudGl0eTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplID0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoICog
c2l6ZW9mKE91dHB1dFR5cGUpOworCisgICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0
IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3QgbiwgT3V0cHV0
VHlwZSAqb3V0KQorICAgIHsKKyAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG47
IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgSW5wdXRUeXBlICplaW4gPSBwb2lu
dGVyQWRkQnl0ZXMoaW4sIGkgKiBzdHJpZGUpOworCisgICAgICAgICAgICBjb3B5Q29tcG9uZW50
KG91dCwgZWluLCAwLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6
ZXJvKCkpKTsKKyAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDEsIHN0YXRpY19j
YXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOworICAgICAgICAgICAg
Y29weUNvbXBvbmVudChvdXQsIGVpbiwgMiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVs
dFZhbHVlUnVsZTo6emVybygpKSk7CisgICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWlu
LCAzLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjpvbmUoKSkpOwor
CisgICAgICAgICAgICBvdXQgKz0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6
OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCkKKyAgICB7CisgICAgICAg
IHJldHVybiBjb252ZXJ0QXJyYXkoc3RhdGljX2Nhc3Q8Y29uc3QgSW5wdXRUeXBlKj4oaW4pLCBz
dHJpZGUsIG4sIHN0YXRpY19jYXN0PE91dHB1dFR5cGUqPihvdXQpKTsKKyAgICB9CisKKyAgcHJp
dmF0ZToKKyAgICAvLyBBZHZhbmNlIHRoZSBnaXZlbiBwb2ludGVyIGJ5IGEgbnVtYmVyIG9mIGJ5
dGVzIChub3QgcG9pbnRlZC10byBlbGVtZW50cykuCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Cisg
ICAgc3RhdGljIFQgKnBvaW50ZXJBZGRCeXRlcyhUICpiYXNlUHRyLCBzdGQ6OnNpemVfdCBudW1C
eXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQgKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VQdHIpICsgbnVtQnl0ZXMpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGNvcHlDb21wb25lbnQoT3V0cHV0VHlwZSAqb3V0LCBjb25zdCBJbnB1dFR5
cGUgKmluLCBzdGQ6OnNpemVfdCBlbGVtZW50aW5kZXgsIE91dHB1dFR5cGUgZGVmYXVsdHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKFdpZGVuUnVsZTo6ZmluYWxXaWR0aCA+IGVsZW1lbnRpbmRl
eCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRoID4g
ZWxlbWVudGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dFtlbGVtZW50
aW5kZXhdID0gQ29udmVydGVyOjpjb252ZXJ0KGluW2VsZW1lbnRpbmRleF0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91
dFtlbGVtZW50aW5kZXhdID0gZGVmYXVsdHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfTsKKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVY
Q09OVkVSU0lPTl9IXwo=
</data>
<flag name="review"
          id="51599"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>